国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

利用VTK實現幾何模型的三維建模

2015-06-28 14:52:41陳小艷李柏林
鐵路計算機應用 2015年7期
關鍵詞:鋼結構可視化建模

陳小艷,王 強,2,李柏林

(1.西南交通大學 機械工程學院,成都 610031;2. 成都工業(yè)學院 機械系,成都 610031)

利用VTK實現幾何模型的三維建模

陳小艷1,王 強1,2,李柏林1

(1.西南交通大學 機械工程學院,成都 610031;2. 成都工業(yè)學院 機械系,成都 610031)

針對鋼結構橋梁的三維可視化問題,提出利用VTK的三維建模功能,同時利用C#語言實現了鋼結構橋梁的節(jié)點單元數據的三維可視化。研究VTK的數據表達方式,實現模型的拉伸、旋轉等建模;結合四元數法,實現模型的旋轉幾何變換。實驗結果表明,通過VTK實現鋼結構橋梁節(jié)點單元數據三維建模是可行的;該可視化平臺具有很好的可移植性和擴展性,并且可以方便的依靠底層數據對模型進行有限元分析等開發(fā)工作。

三維可視化; VTK;三維建模; C#語言;四元數

在傳統(tǒng)工程行業(yè)如機械、土木、電氣等方面,二維圖紙的表達已經不能滿足現在工程的需要,目前,大部分企業(yè)都有自己的三維可視化部門,以解決二維圖紙帶來的缺陷和不足[1]。三維可視化是其它功能如分析、仿真等功能的實現基礎。目前,國內外實現三維可視化的技術主要包括以下幾種方法。

(1)直接在現有三維軟件上進行建模,如CATIA、UG、PRO/E等;或者以這些軟件為基礎進行二次開發(fā)來實現專用需求。采用這種方法能夠方便的實現三維可視化,這種方式目前應用比較廣泛。設計人員不必關心圖形可視化的內部實現算法,可以把更多的精力集中在設計上。但是這些模型只能依附于各自的軟件系統(tǒng)來展示模型,由于模型格式解讀比較困難,如果想將三維模型嵌入用戶自己的軟件系統(tǒng)中實現別的相關的需求是非常難于實現的。

(2)在現有的三維引擎上進行開發(fā),比如Open-GL。這種方法能夠實現各種三維模型的可視化顯示,而且與平臺無關,可以在任何軟件系統(tǒng)中實現三維可視化。這類方法由于開發(fā)工作量比較大,對于開發(fā)人員的專業(yè)要求比較高,在實際應用中也比較難實現。

本文采用一種C#語言和VTK結合進行開發(fā)的方法,實現了鋼結構橋梁的三維可視化顯示。由于C#語言是完全面向對象的,使用起來非常方便。在開發(fā)過程中不用擔心內存管理,系統(tǒng)穩(wěn)定性較好。VTK是在OpenGL的基礎上建立的一套函數庫,以其強大的三維可視化功能及易用性而受到歡迎。由于開發(fā)環(huán)境的便利性,使得開發(fā)的效率得到了提高。

1 VTK簡介

VTK(Visualization Toolkit)是由William J. Schmeder, Kenneth M.Martin, William E. Iorensen三人于1993年開發(fā),利用面向對象的技術設計和實現的三維可視化工具箱[2]。最早主要用于醫(yī)學圖像可視化。目前除了在醫(yī)學可視化上的廣泛應用外,也加入了幾何圖形的三維建模功能。著名的分析軟件MIDAS就是基于VTK開發(fā)實現的。然而,國內卻很少有人知道VTK的三維建模功能。導致很多應用不得不買國外的軟件來實現。VTK包含了三維計算機圖形學、圖像處理和可視化3部分功能。其中封裝了目前許多優(yōu)秀的三維可視化算法,可以方便的實現數據的三維可視化[3]。

VTK建立在OpenGL基礎之上,與平臺無關。它不僅支持對幾何的顯示及渲染,同時支持多種圖形算法(光柵圖形生成算法,消隱算法等)、可視化算法(矢量,標量,張量) 及高級的建模技術(快速建模,多邊形優(yōu)化,Delanay 三角面片生成法)。而且,VTK 的開發(fā)者組織了一個有效的論壇及新聞組,通過這種平臺,VTK 的使用者之間可以方便地進行交流與合作[4]。

可視化模式由數據對象和處理對象組成。在VTK中,主要有5種數據集類型:結構化點集(Structured Points)、線性網格(VTKRectilinear Grid)、結構化網格(Stucturedd Grid)、非結構化網格(Unstructured Grid)以及多邊形數據(Polygonal Data)[5]。處理對象主要包括數據源對象、過濾器以及映射器。VTK的可視化過程是基于管線流的設計模式。將要處理的數據作為流動介質在管線中流動,不同的階段對數據有不同的處理方式[6]。 VTK的可視化流程如圖1所示。

圖1 VTK可視化流程

可視化模型主要對數據進行處理,生成可被繪制的集合體,而圖形模型主要對生成的幾何體進行繪制。有了可視化管線,VTK的可視化過程就可以用數據在可視化管線流動的過程來描述。

在C#語言中使用VTK是使用基于VTK的.net封裝包.net Wrappers for VTK。這是一個開源的軟件包,可以在VTK的網站上直接下載來使用。基于C#語言的VTK開發(fā)效率要比基于C++語言的VTK開發(fā)效率高很多,主要表現在以下幾個方面:

(1)由于Form編程代替了MFC的界面編程,界面設計只需要使用相應的控件,使得更方便的搭建應用程序框架;

(2)由于C#語言的垃圾回收機制,使得進行對象生成和銷毀管理更加方便;

(3)VTK的.net 封裝使得VTK的引用更加方便,只需要使“using vtk”,就完成了在C++語言中的所有頭文件的引用;

(4)由于采用的C# Form編程,使得窗口消息的獲取更加方便;

(5)C#語言是完全面向對象的,使得對程序的設計實現和管理更加方便。

2 基于VTK的三維可視化平臺設計

2.1 可視化平臺數據存儲和管理

幾何模型是由點、線、面和體組成。其中,點是組成所有幾何模型的基礎。因此,所有數據存儲的基礎都是基于點的存儲。在本可視化系統(tǒng)中,點的數據存儲采用C#語言的字典類(directory(TKey,TValue))來實現。Dictionary(TKey,TValue)類在內部是作為一個哈希表來實現的,它提供了從一組鍵到一組值的映射,通過鍵來檢索值的速度是非??斓?。因此,可以方便的實現點的操作如添加、刪除、修改等。TKey表示點的ID,TValue表示點的3D坐標。在實際應用中添加點用如下代碼所示:

//聲明一個點存儲字典

Dictionary〈int, Point3D> pointList =

new Dictionary〈int, Point3D>();

//聲明一個3D點變量

Point3D pointCoor = new Point3D();

//對點進行坐標賦值

pointCoor.x = x;

pointCoor.y = y;

pointCoor.z = z;

//將點添加到字典中

pointList.Add(pointID, pointCoor);

有了點的存儲基礎,線和面以及體的存儲就比較方便,其存儲方式都采用字典類來實現。其中,線的存儲采用與點關聯(lián)的方式,面的存儲采用與線關聯(lián),體的存儲采用與面關聯(lián)。在字典中存儲線的格式Directory(lineID,List〈pointID>),存儲面的格式Directory(faceID,List〈lineID>),存儲體的格式Directory(bodyID,List〈faceID>)。

對于點、線、面以及體的操作主要包括添加、刪除和修改等。(1)對體的操作,由于體處在最頂層,如果添加一個體,根據構成體的對應面直接生成;如果刪除體,則直接刪除體而保留對應的面數據。如果修改體,則根據對應的面數據重新生成體。(2)對于其他3類數據點、線和面的操作,由于每一類的操作都關聯(lián)了另一類數據,如果是添加操作,因為添加不與已經存在的數據相關聯(lián),則直接生成新的數據;如果是刪除或修改,則提示用戶是否保留其下一層數據。如果刪除線,則提示用戶相關聯(lián)的面和體數據是否保留。

2.2 可視化平臺的三維模型生成

三維建模方法總結起來主要有以下幾類:拉伸、旋轉、掃描以及螺旋掃描等。幾乎所有三維模型都是由這些基本的命令組合生成。拉伸是指一個二維截面圖形沿著指定方向運動生成實體;旋轉是指二維截面沿著指定軸旋轉生成實體;掃描指截面沿著指定路徑運動生成實體;螺旋掃描指截面沿著指定路徑運動的同時繞指定軸旋轉而生成的實體。

在實際建模中,根據實體特征構建二維截面,然后根據特征類型選擇不同的三維生成方法。比如拉伸特征的創(chuàng)建:(1)在字典類中查詢構成二維截面的線ID;(2)根據線ID查詢點的ID;(3)得到點的坐標。根據點的坐標依次連接成二維截面。同時,根據點坐標計算拉伸方向,拉伸方向為二維截面的法線方向。在創(chuàng)建拉伸特征的時候,有兩個問題需要解決:點的連接順序,拉伸方向的計算。在本系統(tǒng)中,結合鋼結構橋梁可視化的特點:根據用戶輸入的點和單元,可視化桿系單元,定義桿系單元的截面類型,根據截面類型來確定點的連接順序。截面的拉伸方向為法向,法向計算根據點坐標來完成。

設:A(x1, y1, z1),B(x2, y2, z2),C(x3, y3, z3)是平面上的3個點,這3個點可以形成3個向量。

AB(x2-x1, y2-y1, z2-z1),

AC(x3-x1, y3-y1, z3-z1),

BC(x3-x2, y3-y2, z3-z2),

取向量AB和BC做叉積AB?BC,利用三階行列式,寫成:

計算行列式即解出平面法向量的坐標,其方向滿足右手螺旋法則。圖2是生成的工字鋼的拉伸三維模型。關鍵代碼如下:

//構建二維截面數據

vtkPolyData pPolyData = new vtkPolyData()

pPolyData.SetPoints(pPoints);

//創(chuàng)建拉伸

vtkLinearExtrusionFilter extrude = new

vtkLinear-ExtrusionFilter();

//設置拉伸截面

extrude.SetInput(pPolyData);

//設置拉伸長度

extrude.SetScaleFactor(iDis);

//設置拉伸方向

extrude.SetVector(direcX,direcY,direcZ);

圖2 拉伸成型的工字鋼三維模型

2.3 模型三維幾何變換

幾何變換主要包括平移、旋轉等操作。對于相同的模型,不需要進行重復建模,只需要將模型平移或旋轉到相應的位置即可。平移操作只需要進行坐標平移操作,相對比較簡單,這里不再詳述。三維空間的旋轉變換可采用歐拉角、幾何旋轉矩陣或者四元數等方法。歐拉角存在萬向節(jié)死鎖,即當3個萬向節(jié)其中兩個軸發(fā)生重合時,會失去一個自由度,而采用旋轉矩陣需要大量的乘法運算。因此,本文采用四元數法實現模型的任意方向旋轉,四元數(Quaternions)是由愛爾蘭數學家威廉?盧云?哈密頓 (William Rowan Hamilton)在1843年發(fā)明的數學概念。四元數的乘法不符合交換律,它是最簡單的超復數,非零四元數的乘法群在R3的實部為零的部分上的共軛作用可以實現轉動。單位四元數(絕對值為1的四元數)若實部為cos(t),它的共軛作用是一個角度為2t的轉動,轉軸為虛部的方向[7~10]。四元數的優(yōu)點是:

(1)表達式無奇點(和例如歐拉角之類的表示相比);

(2)比矩陣更簡煉,也更快速;

(3)單位四元數的對可以表示四維空間中的一個轉動。

設空間任意向量A(xa, ya, za)與一旋轉角度θ,如圖3所示:

圖3 四元數旋轉示意圖

將之轉換為四元數:

對于三維空間的任意軸旋轉,假設有一向量P(x, y, z),對一單位四元數q做旋轉,將P視為無標量的四元數Xi+Yj+Zk,則向量的旋轉經證明如下:Rot(P)=qpq-1。為了計算方便,用矩陣的方式來表示四元數的乘法,假設四元數表示如下:q=[w, x, y, z]=[s,v],其中s=w是標量部分,v=(x, y, z)是矢量部分。兩個四元數相乘的矩陣表示法如下:

令 q=[s,v]=[cosθ, u?sinθ]其中u為單位向量,則可以證明q?q'?q-1會讓q'繞著u軸旋轉2θ,此即為四元數的旋轉公式。根據四元數的矩陣乘法和旋轉,將旋轉公式用以下矩陣的乘法來表示:

也就是說如果要讓任意向量(x', y', z') (w'為0)對某個單位向量軸u(x, y, z)旋轉角度2θ,則w=cosθ,代入以上的矩陣乘法,即可得旋轉后的(x'', y'', z''),為了方便,轉換矩陣的最下列與最右行可以省略不寫。利用上式變換矩陣。即可實現三維模型的任意方向的旋轉變換。

3 三維可視化實例

如圖4是采用VTK和C#語言結合開發(fā)的鋼結構橋梁的三維可視化平臺。通過數據導入將橋梁結構的點數據和單元數據導入系統(tǒng),定義單元的截面形狀,最后通過VTK的三維建模功能以及四元數法實現模型的幾何變換后實現的整個鋼結構橋梁的三維可視化顯示結果。圖中定義的截面形狀為工字型截面。點數據共有577個,單元數據共有937個。鋼結構橋梁的三維可視平臺如圖4所示。圖4(a)是節(jié)點和單元的桿系結構可視化;圖4(b)是將單元進行三維渲染的結構;圖4(c)是定義單元的截面形狀;圖4(d)是圖4(b)三維可視化的局部放大圖。實驗表明,通過VTK實現三維建模是可行的。

4 結束語

VTK作為一種可視化工具包,主要用于醫(yī)學圖像的三維重建。本文利用VTK和C#語言開發(fā)工具,提出了在VTK中進行幾何實體的三維建模方法。采用C#語言的directory類進行數據存儲和管理;對于大數據量的幾何變換操作,利用四元數法的旋轉,減少了模型在任意方向旋轉的時間。實驗證明,采用VTK和C#語言結合的方式,可以方便快速地實現幾何模型的三維建模,開發(fā)效率較高,并且不受系統(tǒng)限制,可以在用戶自己的平臺上實現三維建模。在實際工程應用中具有較強的應用價值。

圖4 鋼結構橋梁的三維可視化平臺

[1]張祖勛,鄭順義,張劍清.三維可視化工程設計的研究[J].武漢大學學報:信息科學版,2002,27(4):337-342.

[2]A.C.Pavao. E.V.S.Pouzada, M.A.Mathias. Electromagnetic field visualization through vtk software[C]. Microwave and Optoelectronics Conference, 2001. IMOC 2001, Belem, Brazi, Proceedings of the 2001 SBMO/IEEE MTT-S International, 2001,21-24.

[3]王延華,洪 飛,吳恩華. 基于VTK庫的醫(yī)學圖像處理子系統(tǒng)設計和實現[J].計算機工程與應用,2003,39(8):205-207.

[4]Cline H, Lorensen Wetal. Two algorithm for three-Dimensional reconstruction of tomograms[J]. Medical Physics,1988,15(3): 320.

[5]William J. Schroeder, Lisa S. Avila, Kenneth M. Martin. The visualization toolkit user's guide[M].GE Corporate Research & Development,2001: 89-117.

[6]Arjan J.F. Kok, Robert van Liere. A multimodal virtual reality interface for 3D interaction with vtk[J]. Knowledge and Information Systems, 2007(13): 197-219.

[7]王 勇,馬立元,王忠強.四元數法在計算機圖形中的應用[J].軍械工程學院學報,2001,13(2):48-51.

[8]劉俊峰.三維轉動的四元數表述[J]. 大學物理,2004,23(4):39-43.

[9]Pletinckx D. Quaternion calculus as a basic tool in computer graphics[J]. The Visual Computer,1989, 5 (1) : 2-13 .

[10]劉愛東,黃 彬,盧中武.基于四元數的坐標旋轉與插值方法研究[J]. 計算機與現代化,2012,27(2):44-47.

責任編輯 徐侃春

3-D modeling for geometric model through VTK

CHEN Xiaoyan1, WANG Qiang1,2, LI Bailin1
( 1.School of Mechanical Engineering, Southwest Jiaotong University, Chengdu 610031, China; 2. Department of Mechanics, Chengdu Technological University, Chengdu 610031, China )

A 3-D modeling method, taken advantage of VTK, combined with C#, was proposed to solve the 3-D visualizing problem of steel structure bridges. Data expression of VTK was researched, geometric transformations of model such as stretching, rotation were implemented through VTK and quaternion algorithm. Experiment showed it was practical to implement 3-D model building via VTK. In addition, the visualization platform was with portability and expansibility, fi nite analysis for model was available with underlying data.

3-D visualization; VTK(visualized toolkit); 3-D modeling; C#; quaternion

U242.5∶TP39

A

1005-8451(2015)07-0007-05

2014-12-01

四川省科技支撐計劃(2013GZ0032)。

陳小艷,在讀碩士研究生;王 強,在讀博士研究生。

猜你喜歡
鋼結構可視化建模
基于CiteSpace的足三里穴研究可視化分析
頂推滑移法在鋼結構橋梁施工中的應用
鋼結構防火設計規(guī)范及要點探討
首件鋼結構構件確認機制在鋼結構施工中的應用
山東冶金(2022年1期)2022-04-19 13:40:48
基于Power BI的油田注水運行動態(tài)分析與可視化展示
云南化工(2021年8期)2021-12-21 06:37:54
聯(lián)想等效,拓展建?!浴皫щ娦∏蛟诘刃鲋凶鰣A周運動”為例
基于CGAL和OpenGL的海底地形三維可視化
“融評”:黨媒評論的可視化創(chuàng)新
傳媒評論(2019年4期)2019-07-13 05:49:14
基于PSS/E的風電場建模與動態(tài)分析
電子制作(2018年17期)2018-09-28 01:56:44
不對稱半橋變換器的建模與仿真
泾阳县| 保靖县| 剑川县| 射洪县| 福鼎市| 松原市| 隆昌县| 连南| 泗阳县| 邵东县| 桂林市| 巴楚县| 文登市| 平利县| 淳化县| 绵阳市| 翁源县| 潼南县| 隆回县| 西乌珠穆沁旗| 城口县| 肥城市| 沛县| 乌兰察布市| 和硕县| 思南县| 连江县| 邢台市| 施秉县| 明水县| 蒲江县| 秦皇岛市| 渭南市| 大宁县| 秭归县| 建水县| 奎屯市| 寻甸| 陆河县| 汝州市| 平阳县|