• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于VTK和MFC的管道建模及可視化實(shí)現(xiàn)

      2016-09-20 07:22:40譚顯峰董超黃斌四川大學(xué)計(jì)算機(jī)學(xué)院成都610065
      現(xiàn)代計(jì)算機(jī) 2016年7期
      關(guān)鍵詞:起點(diǎn)可視化管線

      譚顯峰,董超,黃斌(四川大學(xué)計(jì)算機(jī)學(xué)院,成都 610065)

      基于VTK和MFC的管道建模及可視化實(shí)現(xiàn)

      譚顯峰,董超,黃斌
      (四川大學(xué)計(jì)算機(jī)學(xué)院,成都610065)

      0 引言

      目前,自來(lái)水、石油、天然氣等物質(zhì)的運(yùn)輸離不開管道,管道的合理敷設(shè)至關(guān)重要。由于受到地理位置和環(huán)境因素的影響,管道敷設(shè)通常是任何一個(gè)大型項(xiàng)目中最費(fèi)時(shí)的工作,也是產(chǎn)生問(wèn)題最多的部分。管道建模及可視化可以提高設(shè)計(jì)質(zhì)量,嚴(yán)格控制材料,高效率、高精度地構(gòu)造出管道網(wǎng)絡(luò),并且最大可能地避免設(shè)計(jì)錯(cuò)誤的產(chǎn)生[1-2]。

      本文以VTK(Visualization Toolkit)可視化圖形類庫(kù)為基礎(chǔ),在 Windows上,以VC 6.0為開發(fā)平臺(tái),結(jié)合MFC,對(duì)VTK的顯示功能進(jìn)行封裝和修改,建立了管道材料庫(kù),實(shí)現(xiàn)了管道的添加、刪除等建模過(guò)程,以及管道模型繪制,管道圖形旋轉(zhuǎn)、平移、縮放等基本的可視化功能。

      1 VTK

      VTK是一個(gè)開源、跨平臺(tái)、可自由獲取、支持并行處理的圖形應(yīng)用函數(shù)庫(kù)。通過(guò)VTK可以將科學(xué)實(shí)驗(yàn)數(shù)據(jù)如建筑學(xué)、氣象學(xué)、醫(yī)學(xué)、生物學(xué),對(duì)體、面、光源等的逼真渲染,從而幫助人們理解那些采取錯(cuò)綜復(fù)雜而又往往規(guī)模龐大的數(shù)字呈現(xiàn)形式的科學(xué)概念或結(jié)果。

      1.1VTK 概述

      VTK包含一個(gè)C++類庫(kù)和眾多的翻譯接口層,包括Tcl/Tk、Java、Python。VTK是在三維函數(shù)庫(kù)OpenGL的基礎(chǔ)上采用面向?qū)ο蟮脑O(shè)計(jì)方法發(fā)展起來(lái)的,它將我們?cè)诳梢暬_發(fā)過(guò)程中會(huì)經(jīng)常遇到的細(xì)節(jié)屏蔽起來(lái),并將一些常用的算法封裝起來(lái)。例如VTK將我們?cè)诒砻嬷亟ㄖ斜容^常見(jiàn)的Marching Cubes算法封裝起來(lái),以類的形式供用戶使用,這樣我們?cè)趯?duì)三維規(guī)則點(diǎn)陣數(shù)據(jù)進(jìn)行表面重建時(shí)就不必再重復(fù)編寫Marching Cubes算法的代碼,而直接使用VTK中已經(jīng)提供的vtkMarchingCubes類。

      1.2VTK 原理

      VTK中的兩個(gè)重要組件:可視化管線和渲染引擎??梢暬芫€主要負(fù)責(zé)數(shù)據(jù)獲取或者創(chuàng)建,數(shù)據(jù)處理,然后將數(shù)據(jù)寫入文件或者傳遞至渲染引擎中進(jìn)行顯示。渲染引擎負(fù)責(zé)創(chuàng)建傳遞過(guò)來(lái)的數(shù)據(jù)的一個(gè)可視表達(dá)。

      可視化管線的運(yùn)行原理如圖1所示:

      圖1 VTK可視化管線的運(yùn)行原理圖

      數(shù)據(jù)源用于讀入或生成需要處理的原始數(shù)據(jù)。數(shù)據(jù)對(duì)象表示了VTK中不同類型的數(shù)據(jù),主要包括:Structured points(結(jié)構(gòu)化點(diǎn)集),vtkRectilinearGrid(線性網(wǎng)格),Structured grid(結(jié)構(gòu)化網(wǎng)格),Unstructured grid(非結(jié)構(gòu)化網(wǎng)格,管線的建模就是利用這種數(shù)據(jù)的子對(duì)象aQuad),Polygonal Data(多邊形體數(shù)據(jù))。

      VTK通過(guò)管道過(guò)濾器來(lái)操作和變換數(shù)據(jù)。過(guò)濾器即各種算法(例如碰撞檢測(cè)、常用數(shù)學(xué)函數(shù)、矩陣變換和圖像處理等)所封裝成的代碼,用于對(duì)數(shù)據(jù)對(duì)象進(jìn)行相應(yīng)的處理和分析,它可以接收一個(gè)或多個(gè)數(shù)據(jù)對(duì)象的輸入,也可以產(chǎn)生一個(gè)或多個(gè)對(duì)象的輸出。

      VTK將處理完后的數(shù)據(jù)通過(guò)映射器將其轉(zhuǎn)換成可被顯示幾何對(duì)象。

      當(dāng)數(shù)據(jù)對(duì)象完成上述流程后,用戶只需按順序調(diào)用指定的渲染類(vtkLight、vtkAbsractMapper、vtkRen-derer、vtkCamera、vtkActtor等),就可將結(jié)果渲染到指定的窗口中[3]。

      1.3VTK 與 MFC 的集成

      VTK本身不提供圖形用戶接口,相對(duì)于其他語(yǔ)言,C++應(yīng)用程序體積更小,運(yùn)行更快,而且容易部署安裝。此外,采用C++語(yǔ)言開發(fā)VTK應(yīng)用程序,不需要編譯額外的Tcl、Java和Python支持。

      建立新的VTK項(xiàng)目時(shí),在正確安裝VTK的基礎(chǔ)上,必須在項(xiàng)目的Project-setting中對(duì)相關(guān)參數(shù)進(jìn)行設(shè)置,以便將需要的VTK頭文件和lib庫(kù)引入MFC項(xiàng)目

      中[4]。

      在本文中VTK與MFC的集成方法是新建一個(gè)CCubeView類,作為整個(gè)軟件顯示功能的實(shí)現(xiàn),該類繼承自MFC的CView類,封裝了VTK中的渲染類 (如vtkRenderer)和數(shù)據(jù)對(duì)象類(如vtkUnstructuredGrid),以及映射器等。通過(guò)調(diào)用類中redraw()函數(shù)進(jìn)行視圖重繪。

      2 管道建模及可視化實(shí)現(xiàn)

      管道模型中管道的數(shù)量和種類繁多,連接方式錯(cuò)綜復(fù)雜,管道模型的建立離不開數(shù)據(jù)模型的支撐。本文采用數(shù)據(jù)文本的行式,通過(guò)關(guān)鍵字記錄每根管道的基本屬性(長(zhǎng)度、方向、材料、連接方式等),利用VTK的可視化管線原理進(jìn)行數(shù)據(jù)輸出,實(shí)現(xiàn)管道的三維建模及可視化。

      2.1管道模型的建立

      (1)管道材料庫(kù)建立

      建立管道時(shí),管道材料參數(shù)較多(泊松比、彈性模量等),并且在不同的溫度下,各參數(shù)還要進(jìn)行差值計(jì)算,為簡(jiǎn)化用戶操作,在參照GB/T20801-2006《壓力管道規(guī)范》、GB/T12459-2005《鋼制對(duì)焊無(wú)縫管件》等國(guó)家標(biāo)準(zhǔn)的基礎(chǔ)上,將管道材料做成材料文件,用戶只需選擇材料名就可以將相應(yīng)的材料參數(shù)根據(jù)不同的溫度進(jìn)行差值計(jì)算后的結(jié)果讀入程序中。如果用戶使用的材料不在材料庫(kù)中,可進(jìn)行自定義添加,或者在某種材料的參數(shù)上進(jìn)行修改。

      (2)管道數(shù)據(jù)的存儲(chǔ)

      模型中管道的數(shù)量及連接關(guān)系通過(guò)文本文件的方式進(jìn)行存儲(chǔ),一個(gè)文件對(duì)應(yīng)一個(gè)模型。

      文件中通過(guò)關(guān)鍵字記錄每根管道的屬性。主要包括:*Model,記錄管道是模型中的第幾段以、管道的起點(diǎn)信息以及管道方向;*Dimension,記錄管道的長(zhǎng)度及終點(diǎn)坐標(biāo);*Temperature,記錄管道的溫度;*Material,記錄管道的材料參數(shù),包括材料名稱、彈性模量、泊松比、屈服強(qiáng)度等;*Welding Material,記錄管道焊接區(qū)的材料參數(shù);*start point,記錄管道起點(diǎn)的公稱直徑、彎頭系列、壁厚;*end point,記錄管道終點(diǎn)的公稱直徑、彎頭系列、壁厚。

      模型中每根管道有自己獨(dú)立的編號(hào),關(guān)鍵字末尾加上編號(hào)就可成為該段管道所有參數(shù)的唯一標(biāo)識(shí)。新建模型時(shí)編號(hào)從1開始遞增,通過(guò)全局變量控制當(dāng)前添加的是第幾段管道。

      (3)管道的添加與刪除

      添加和刪除管道錢必須新建或者打開一個(gè)模型。在改模型上添加管道時(shí),除第一根管道外,用戶通過(guò)拾取模型中已有管道的起點(diǎn)(終點(diǎn))坐標(biāo),作為新管道的起點(diǎn),隨后輸入相關(guān)參數(shù)。程序通過(guò)識(shí)別已拾取的管道起點(diǎn)ID,在文件中查找管道起點(diǎn)坐標(biāo),根據(jù)長(zhǎng)度和方向等參數(shù)進(jìn)行計(jì)算得到管道的終點(diǎn)坐標(biāo),和用戶輸入的其他參數(shù)一起寫入數(shù)據(jù)文件。管道的方向可以是沿坐標(biāo)軸的方向,也可以是空間中任何一個(gè)方向,若是后者,通過(guò)輸入水平面夾角和水平投影與X軸夾角連個(gè)參數(shù)可以唯一確定新管道的方向。每添加一段管道,程序?qū)⒃跀?shù)據(jù)文件末尾增加一組帶管道編號(hào)的關(guān)鍵字,兵將添加的管道顯示在界面中。

      下面是個(gè)添加管道的實(shí)例:第一步,在新建模型中沿x軸正方向添加一根1000米長(zhǎng)的管道;第二步,以第一根管道終點(diǎn)為起點(diǎn)沿y軸正方向添加一根1000米長(zhǎng)的管道;第三步,以第二根管道終點(diǎn)為起點(diǎn)沿Z軸正方向添加一根1000米長(zhǎng)的管道;第四步,以第二根管道終點(diǎn)為起點(diǎn),水平面夾角和水平投影與X軸夾角都設(shè)置為30度,添加一根1000米長(zhǎng)的管道。管道添加過(guò)程如圖2所示:

      圖2 VTK可視化管線的運(yùn)行原理圖

      刪除管道時(shí)只能刪除模型中最后一段管道,同時(shí)刪除數(shù)據(jù)文件中最后一組關(guān)鍵字。2.2管道模型的可視化

      (1)顯示

      根據(jù)VTK的可視化管線和渲染原理,將數(shù)據(jù)文件作為VTK的數(shù)據(jù)源。

      程序中CCubeView類提供用來(lái)顯示功能。CGlob-alData是數(shù)據(jù)類,封裝了VTK中所有的數(shù)據(jù)類型,作為全局變量,存儲(chǔ)模型中的所有數(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的渲染器,實(shí)現(xiàn)圖像繪制。

      (2)旋轉(zhuǎn)

      程序 vtkInteractorStyleRubberBandPick類繼承自vtkInteractorStyleTrackballCamera,OnLeftButtonDown()方法捕捉鼠標(biāo)左鍵和Ctrl鍵同時(shí)按下去的操作,隨后調(diào)用VTK的StartRotate()函數(shù),實(shí)現(xiàn)圖像旋轉(zhuǎn)。

      旋轉(zhuǎn)效果如圖3所示:

      圖3 旋轉(zhuǎn)對(duì)比圖

      (3)縮放

      vtkInteractorStyleRubberBandPick中OnMouseWheel Forward()方法捕捉鼠標(biāo)滑輪向前滾動(dòng)和Ctrl鍵同時(shí)按下去的操作,隨后調(diào)用VTK的StartDolly()函數(shù),實(shí)現(xiàn)圖像放大。圖像縮小功能原理和放大時(shí)一樣,調(diào)用的方法是OnMouseWheelBackward()。

      縮放效果如圖4所示。

      (4)平移

      vtkInteractorStyleRubberBandPick中 OnRightBut-tonDown()方法捕捉鼠標(biāo)右鍵和Ctrl鍵同時(shí)按下去的操作,隨后調(diào)用VTK的StartPan()函數(shù),實(shí)現(xiàn)圖像平移。

      平移效果如圖5所示。

      3 結(jié)語(yǔ)

      圖4 縮放對(duì)比圖

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

      圖5 平移對(duì)比圖

      [1]陳文賢.CAD三維建模技術(shù)在管道敷設(shè)中的具體應(yīng)用.石油化工建設(shè),2014.

      [2]楊飛,王解先.空間管道的連接建模及3D打印.工程勘察,2015.

      [3]余偉巍,席平,何飛.利用VTK與MFC的醫(yī)學(xué)模型重建方法研究與實(shí)現(xiàn).工程圖學(xué)學(xué)報(bào),2009.

      [4]羅火靈,許永忠,陳世仲.基于VTK和MFC的醫(yī)學(xué)圖像三維重建研究與實(shí)現(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-),男,重慶人,在讀研究生,研究方向?yàn)樾畔踩?/p>

      董超(1985-),男,山東新泰人,碩士研究生,研究方向?yàn)橹悄苄畔⑻幚?/p>

      黃斌(1986-),男,云南曲靖人,在讀研究生,研究方向?yàn)樾畔踩透咝阅苡?jì)算

      2016-01-21

      2016-02-25

      VTK在圖像處理與顯示方面有強(qiáng)大的功能和源代碼開放特點(diǎn),但是它缺乏友好的交互界面,通過(guò)將其與MFC結(jié)合,實(shí)現(xiàn)管道建模及可視化,可以提高管道網(wǎng)絡(luò)建設(shè)的效率和精度,最大程度地避免設(shè)計(jì)錯(cuò)誤的產(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.

      猜你喜歡
      起點(diǎn)可視化管線
      基于CiteSpace的足三里穴研究可視化分析
      基于Power BI的油田注水運(yùn)行動(dòng)態(tài)分析與可視化展示
      云南化工(2021年8期)2021-12-21 06:37:54
      基于CGAL和OpenGL的海底地形三維可視化
      “融評(píng)”:黨媒評(píng)論的可視化創(chuàng)新
      弄清楚“起點(diǎn)”前面有多少
      起點(diǎn)
      我的“新”起點(diǎn)
      夾套管線預(yù)制安裝
      淺談通信管線工程建設(shè)
      電子制作(2017年10期)2017-04-18 07:23:00
      淺談通信管線工程建設(shè)
      電子制作(2017年9期)2017-04-17 03:01:06
      焦作市| 定陶县| 双牌县| 南昌市| 河北区| 隆德县| 北流市| 响水县| 仲巴县| 阳朔县| 大港区| 邹平县| 祁门县| 正定县| 多伦县| 东阳市| 扎兰屯市| 莱芜市| 张家口市| 克什克腾旗| 湄潭县| 枞阳县| 临高县| 威远县| 淮阳县| 内黄县| 姜堰市| 凌源市| 茌平县| 内江市| 康平县| 枣强县| 田林县| 嘉禾县| 司法| 淮阳县| 洛宁县| 松原市| 武定县| 泰安市| 府谷县|