譚顯峰,董超,黃斌(四川大學(xué)計算機(jī)學(xué)院,成都 610065)
基于VTK和MFC的管道建模及可視化實現(xiàn)
譚顯峰,董超,黃斌
(四川大學(xué)計算機(jī)學(xué)院,成都610065)
目前,自來水、石油、天然氣等物質(zhì)的運輸離不開管道,管道的合理敷設(shè)至關(guān)重要。由于受到地理位置和環(huán)境因素的影響,管道敷設(shè)通常是任何一個大型項目中最費時的工作,也是產(chǎn)生問題最多的部分。管道建模及可視化可以提高設(shè)計質(zhì)量,嚴(yán)格控制材料,高效率、高精度地構(gòu)造出管道網(wǎng)絡(luò),并且最大可能地避免設(shè)計錯誤的產(chǎn)生[1-2]。
本文以VTK(Visualization Toolkit)可視化圖形類庫為基礎(chǔ),在 Windows上,以VC 6.0為開發(fā)平臺,結(jié)合MFC,對VTK的顯示功能進(jìn)行封裝和修改,建立了管道材料庫,實現(xiàn)了管道的添加、刪除等建模過程,以及管道模型繪制,管道圖形旋轉(zhuǎn)、平移、縮放等基本的可視化功能。
VTK是一個開源、跨平臺、可自由獲取、支持并行處理的圖形應(yīng)用函數(shù)庫。通過VTK可以將科學(xué)實驗數(shù)據(jù)如建筑學(xué)、氣象學(xué)、醫(yī)學(xué)、生物學(xué),對體、面、光源等的逼真渲染,從而幫助人們理解那些采取錯綜復(fù)雜而又往往規(guī)模龐大的數(shù)字呈現(xiàn)形式的科學(xué)概念或結(jié)果。
1.1VTK 概述
VTK包含一個C++類庫和眾多的翻譯接口層,包括Tcl/Tk、Java、Python。VTK是在三維函數(shù)庫OpenGL的基礎(chǔ)上采用面向?qū)ο蟮脑O(shè)計方法發(fā)展起來的,它將我們在可視化開發(fā)過程中會經(jīng)常遇到的細(xì)節(jié)屏蔽起來,并將一些常用的算法封裝起來。例如VTK將我們在表面重建中比較常見的Marching Cubes算法封裝起來,以類的形式供用戶使用,這樣我們在對三維規(guī)則點陣數(shù)據(jù)進(jìn)行表面重建時就不必再重復(fù)編寫Marching Cubes算法的代碼,而直接使用VTK中已經(jīng)提供的vtkMarchingCubes類。
1.2VTK 原理
VTK中的兩個重要組件:可視化管線和渲染引擎。可視化管線主要負(fù)責(zé)數(shù)據(jù)獲取或者創(chuàng)建,數(shù)據(jù)處理,然后將數(shù)據(jù)寫入文件或者傳遞至渲染引擎中進(jìn)行顯示。渲染引擎負(fù)責(zé)創(chuàng)建傳遞過來的數(shù)據(jù)的一個可視表達(dá)。
可視化管線的運行原理如圖1所示:

圖1 VTK可視化管線的運行原理圖
數(shù)據(jù)源用于讀入或生成需要處理的原始數(shù)據(jù)。數(shù)據(jù)對象表示了VTK中不同類型的數(shù)據(jù),主要包括:Structured points(結(jié)構(gòu)化點集),vtkRectilinearGrid(線性網(wǎng)格),Structured grid(結(jié)構(gòu)化網(wǎng)格),Unstructured grid(非結(jié)構(gòu)化網(wǎng)格,管線的建模就是利用這種數(shù)據(jù)的子對象aQuad),Polygonal Data(多邊形體數(shù)據(jù))。
VTK通過管道過濾器來操作和變換數(shù)據(jù)。過濾器即各種算法(例如碰撞檢測、常用數(shù)學(xué)函數(shù)、矩陣變換和圖像處理等)所封裝成的代碼,用于對數(shù)據(jù)對象進(jìn)行相應(yīng)的處理和分析,它可以接收一個或多個數(shù)據(jù)對象的輸入,也可以產(chǎn)生一個或多個對象的輸出。
VTK將處理完后的數(shù)據(jù)通過映射器將其轉(zhuǎn)換成可被顯示幾何對象。
當(dāng)數(shù)據(jù)對象完成上述流程后,用戶只需按順序調(diào)用指定的渲染類(vtkLight、vtkAbsractMapper、vtkRen-derer、vtkCamera、vtkActtor等),就可將結(jié)果渲染到指定的窗口中[3]。
1.3VTK 與 MFC 的集成
VTK本身不提供圖形用戶接口,相對于其他語言,C++應(yīng)用程序體積更小,運行更快,而且容易部署安裝。此外,采用C++語言開發(fā)VTK應(yīng)用程序,不需要編譯額外的Tcl、Java和Python支持。
建立新的VTK項目時,在正確安裝VTK的基礎(chǔ)上,必須在項目的Project-setting中對相關(guān)參數(shù)進(jìn)行設(shè)置,以便將需要的VTK頭文件和lib庫引入MFC項目
中[4]。
在本文中VTK與MFC的集成方法是新建一個CCubeView類,作為整個軟件顯示功能的實現(xiàn),該類繼承自MFC的CView類,封裝了VTK中的渲染類 (如vtkRenderer)和數(shù)據(jù)對象類(如vtkUnstructuredGrid),以及映射器等。通過調(diào)用類中redraw()函數(shù)進(jìn)行視圖重繪。
管道模型中管道的數(shù)量和種類繁多,連接方式錯綜復(fù)雜,管道模型的建立離不開數(shù)據(jù)模型的支撐。本文采用數(shù)據(jù)文本的行式,通過關(guān)鍵字記錄每根管道的基本屬性(長度、方向、材料、連接方式等),利用VTK的可視化管線原理進(jìn)行數(shù)據(jù)輸出,實現(xiàn)管道的三維建模及可視化。
2.1管道模型的建立
(1)管道材料庫建立
建立管道時,管道材料參數(shù)較多(泊松比、彈性模量等),并且在不同的溫度下,各參數(shù)還要進(jìn)行差值計算,為簡化用戶操作,在參照GB/T20801-2006《壓力管道規(guī)范》、GB/T12459-2005《鋼制對焊無縫管件》等國家標(biāo)準(zhǔn)的基礎(chǔ)上,將管道材料做成材料文件,用戶只需選擇材料名就可以將相應(yīng)的材料參數(shù)根據(jù)不同的溫度進(jìn)行差值計算后的結(jié)果讀入程序中。如果用戶使用的材料不在材料庫中,可進(jìn)行自定義添加,或者在某種材料的參數(shù)上進(jìn)行修改。
(2)管道數(shù)據(jù)的存儲
模型中管道的數(shù)量及連接關(guān)系通過文本文件的方式進(jìn)行存儲,一個文件對應(yīng)一個模型。
文件中通過關(guān)鍵字記錄每根管道的屬性。主要包括:*Model,記錄管道是模型中的第幾段以、管道的起點信息以及管道方向;*Dimension,記錄管道的長度及終點坐標(biāo);*Temperature,記錄管道的溫度;*Material,記錄管道的材料參數(shù),包括材料名稱、彈性模量、泊松比、屈服強(qiáng)度等;*Welding Material,記錄管道焊接區(qū)的材料參數(shù);*start point,記錄管道起點的公稱直徑、彎頭系列、壁厚;*end point,記錄管道終點的公稱直徑、彎頭系列、壁厚。
模型中每根管道有自己獨立的編號,關(guān)鍵字末尾加上編號就可成為該段管道所有參數(shù)的唯一標(biāo)識。新建模型時編號從1開始遞增,通過全局變量控制當(dāng)前添加的是第幾段管道。
(3)管道的添加與刪除
添加和刪除管道錢必須新建或者打開一個模型。在改模型上添加管道時,除第一根管道外,用戶通過拾取模型中已有管道的起點(終點)坐標(biāo),作為新管道的起點,隨后輸入相關(guān)參數(shù)。程序通過識別已拾取的管道起點ID,在文件中查找管道起點坐標(biāo),根據(jù)長度和方向等參數(shù)進(jìn)行計算得到管道的終點坐標(biāo),和用戶輸入的其他參數(shù)一起寫入數(shù)據(jù)文件。管道的方向可以是沿坐標(biāo)軸的方向,也可以是空間中任何一個方向,若是后者,通過輸入水平面夾角和水平投影與X軸夾角連個參數(shù)可以唯一確定新管道的方向。每添加一段管道,程序?qū)⒃跀?shù)據(jù)文件末尾增加一組帶管道編號的關(guān)鍵字,兵將添加的管道顯示在界面中。
下面是個添加管道的實例:第一步,在新建模型中沿x軸正方向添加一根1000米長的管道;第二步,以第一根管道終點為起點沿y軸正方向添加一根1000米長的管道;第三步,以第二根管道終點為起點沿Z軸正方向添加一根1000米長的管道;第四步,以第二根管道終點為起點,水平面夾角和水平投影與X軸夾角都設(shè)置為30度,添加一根1000米長的管道。管道添加過程如圖2所示:

圖2 VTK可視化管線的運行原理圖
刪除管道時只能刪除模型中最后一段管道,同時刪除數(shù)據(jù)文件中最后一組關(guān)鍵字。2.2管道模型的可視化
(1)顯示
根據(jù)VTK的可視化管線和渲染原理,將數(shù)據(jù)文件作為VTK的數(shù)據(jù)源。
程序中CCubeView類提供用來顯示功能。CGlob-alData是數(shù)據(jù)類,封裝了VTK中所有的數(shù)據(jù)類型,作為全局變量,存儲模型中的所有數(shù)據(jù)信息,在不同類之間中轉(zhuǎn)數(shù)據(jù)。
以下處理使VTK的圖像顯示在CCubeView中:


CGlobalData中的GetMesh()函數(shù)完成將模型數(shù)據(jù)文件轉(zhuǎn)換成VTK數(shù)據(jù)源的操作;SetInput()函數(shù),將CGlobalData中的VTK數(shù)據(jù)源傳給CCubeView;最后調(diào)用CCubeView的redraw()函數(shù),重繪視圖區(qū)。redraw()函數(shù)部分代碼和功能如下:

放進(jìn)VTK的渲染器,實現(xiàn)圖像繪制。
(2)旋轉(zhuǎn)
程序 vtkInteractorStyleRubberBandPick類繼承自vtkInteractorStyleTrackballCamera,OnLeftButtonDown()方法捕捉鼠標(biāo)左鍵和Ctrl鍵同時按下去的操作,隨后調(diào)用VTK的StartRotate()函數(shù),實現(xiàn)圖像旋轉(zhuǎn)。
旋轉(zhuǎn)效果如圖3所示:

圖3 旋轉(zhuǎn)對比圖
(3)縮放
vtkInteractorStyleRubberBandPick中OnMouseWheel Forward()方法捕捉鼠標(biāo)滑輪向前滾動和Ctrl鍵同時按下去的操作,隨后調(diào)用VTK的StartDolly()函數(shù),實現(xiàn)圖像放大。圖像縮小功能原理和放大時一樣,調(diào)用的方法是OnMouseWheelBackward()。
縮放效果如圖4所示。
(4)平移
vtkInteractorStyleRubberBandPick中 OnRightBut-tonDown()方法捕捉鼠標(biāo)右鍵和Ctrl鍵同時按下去的操作,隨后調(diào)用VTK的StartPan()函數(shù),實現(xiàn)圖像平移。
平移效果如圖5所示。

圖4 縮放對比圖
綜上所述,采用VTK和MFC結(jié)合的方式,以數(shù)據(jù)文件的形式記錄管道信息實現(xiàn)管道建模。封裝VTK的數(shù)據(jù)類和顯示類,實現(xiàn)管道模型的可視化。但管道的建模過程比較繁瑣,刪除方式還不夠靈活,這是下一步的研究重點。

圖5 平移對比圖
[1]陳文賢.CAD三維建模技術(shù)在管道敷設(shè)中的具體應(yīng)用.石油化工建設(shè),2014.
[2]楊飛,王解先.空間管道的連接建模及3D打印.工程勘察,2015.
[3]余偉巍,席平,何飛.利用VTK與MFC的醫(yī)學(xué)模型重建方法研究與實現(xiàn).工程圖學(xué)學(xué)報,2009.
[4]羅火靈,許永忠,陳世仲.基于VTK和MFC的醫(yī)學(xué)圖像三維重建研究與實現(xiàn).生物醫(yī)學(xué)工程學(xué)進(jìn)展,2010.
VTK;MFC;Pipe Modeling;Visualization
Pipe Modeling and Visualization Based on VTK and MFC
TAN Xian-feng,DONG Chao,HUGNG Bin
(College of Computer Science,Sichuan University,Chengdu 610065)
1007-1423(2016)07-0084-04
10.3969/j.issn.1007-1423.2016.07.019
譚顯峰(1983-),男,重慶人,在讀研究生,研究方向為信息安全
董超(1985-),男,山東新泰人,碩士研究生,研究方向為智能信息處理
黃斌(1986-),男,云南曲靖人,在讀研究生,研究方向為信息安全和高性能計算
2016-01-21
2016-02-25
VTK在圖像處理與顯示方面有強(qiáng)大的功能和源代碼開放特點,但是它缺乏友好的交互界面,通過將其與MFC結(jié)合,實現(xiàn)管道建模及可視化,可以提高管道網(wǎng)絡(luò)建設(shè)的效率和精度,最大程度地避免設(shè)計錯誤的產(chǎn)生。
VTK;MFC;管道建模;可視化
VTK in image processing and display has powerful function and open source characteristics,but it lacks a friendly interactive interface, through the combination with MFC,can realize pipe modeling and visualization,and can improve the efficiency and accuracy of the pipeline network construction,the maximum to avoid design errors.