谭显峰,董超,黄斌(四川大学计算机学院,成都 610065)
基于VTK和MFC的管道建模及可视化实现
谭显峰,董超,黄斌
(四川大学计算机学院,成都610065)
目前,自来水、石油、天然气等物质的运输离不开管道,管道的合理敷设至关重要。由于受到地理位置和环境因素的影响,管道敷设通常是任何一个大型项目中最费时的工作,也是产生问题最多的部分。管道建模及可视化可以提高设计质量,严格控制材料,高效率、高精度地构造出管道网络,并且最大可能地避免设计错误的产生[1-2]。
本文以VTK(Visualization Toolkit)可视化图形类库为基础,在 Windows上,以VC 6.0为开发平台,结合MFC,对VTK的显示功能进行封装和修改,建立了管道材料库,实现了管道的添加、删除等建模过程,以及管道模型绘制,管道图形旋转、平移、缩放等基本的可视化功能。
VTK是一个开源、跨平台、可自由获取、支持并行处理的图形应用函数库。通过VTK可以将科学实验数据如建筑学、气象学、医学、生物学,对体、面、光源等的逼真渲染,从而帮助人们理解那些采取错综复杂而又往往规模庞大的数字呈现形式的科学概念或结果。
1.1VTK 概述
VTK包含一个C++类库和众多的翻译接口层,包括Tcl/Tk、Java、Python。VTK是在三维函数库OpenGL的基础上采用面向对象的设计方法发展起来的,它将我们在可视化开发过程中会经常遇到的细节屏蔽起来,并将一些常用的算法封装起来。例如VTK将我们在表面重建中比较常见的Marching Cubes算法封装起来,以类的形式供用户使用,这样我们在对三维规则点阵数据进行表面重建时就不必再重复编写Marching Cubes算法的代码,而直接使用VTK中已经提供的vtkMarchingCubes类。
1.2VTK 原理
VTK中的两个重要组件:可视化管线和渲染引擎。可视化管线主要负责数据获取或者创建,数据处理,然后将数据写入文件或者传递至渲染引擎中进行显示。渲染引擎负责创建传递过来的数据的一个可视表达。
可视化管线的运行原理如图1所示:
图1 VTK可视化管线的运行原理图
数据源用于读入或生成需要处理的原始数据。数据对象表示了VTK中不同类型的数据,主要包括:Structured points(结构化点集),vtkRectilinearGrid(线性网格),Structured grid(结构化网格),Unstructured grid(非结构化网格,管线的建模就是利用这种数据的子对象aQuad),Polygonal Data(多边形体数据)。
VTK通过管道过滤器来操作和变换数据。过滤器即各种算法(例如碰撞检测、常用数学函数、矩阵变换和图像处理等)所封装成的代码,用于对数据对象进行相应的处理和分析,它可以接收一个或多个数据对象的输入,也可以产生一个或多个对象的输出。
VTK将处理完后的数据通过映射器将其转换成可被显示几何对象。
当数据对象完成上述流程后,用户只需按顺序调用指定的渲染类(vtkLight、vtkAbsractMapper、vtkRen-derer、vtkCamera、vtkActtor等),就可将结果渲染到指定的窗口中[3]。
1.3VTK 与 MFC 的集成
VTK本身不提供图形用户接口,相对于其他语言,C++应用程序体积更小,运行更快,而且容易部署安装。此外,采用C++语言开发VTK应用程序,不需要编译额外的Tcl、Java和Python支持。
建立新的VTK项目时,在正确安装VTK的基础上,必须在项目的Project-setting中对相关参数进行设置,以便将需要的VTK头文件和lib库引入MFC项目
中[4]。
在本文中VTK与MFC的集成方法是新建一个CCubeView类,作为整个软件显示功能的实现,该类继承自MFC的CView类,封装了VTK中的渲染类 (如vtkRenderer)和数据对象类(如vtkUnstructuredGrid),以及映射器等。通过调用类中redraw()函数进行视图重绘。
管道模型中管道的数量和种类繁多,连接方式错综复杂,管道模型的建立离不开数据模型的支撑。本文采用数据文本的行式,通过关键字记录每根管道的基本属性(长度、方向、材料、连接方式等),利用VTK的可视化管线原理进行数据输出,实现管道的三维建模及可视化。
2.1管道模型的建立
(1)管道材料库建立
建立管道时,管道材料参数较多(泊松比、弹性模量等),并且在不同的温度下,各参数还要进行差值计算,为简化用户操作,在参照GB/T20801-2006《压力管道规范》、GB/T12459-2005《钢制对焊无缝管件》等国家标准的基础上,将管道材料做成材料文件,用户只需选择材料名就可以将相应的材料参数根据不同的温度进行差值计算后的结果读入程序中。如果用户使用的材料不在材料库中,可进行自定义添加,或者在某种材料的参数上进行修改。
(2)管道数据的存储
模型中管道的数量及连接关系通过文本文件的方式进行存储,一个文件对应一个模型。
文件中通过关键字记录每根管道的属性。主要包括:*Model,记录管道是模型中的第几段以、管道的起点信息以及管道方向;*Dimension,记录管道的长度及终点坐标;*Temperature,记录管道的温度;*Material,记录管道的材料参数,包括材料名称、弹性模量、泊松比、屈服强度等;*Welding Material,记录管道焊接区的材料参数;*start point,记录管道起点的公称直径、弯头系列、壁厚;*end point,记录管道终点的公称直径、弯头系列、壁厚。
模型中每根管道有自己独立的编号,关键字末尾加上编号就可成为该段管道所有参数的唯一标识。新建模型时编号从1开始递增,通过全局变量控制当前添加的是第几段管道。
(3)管道的添加与删除
添加和删除管道钱必须新建或者打开一个模型。在改模型上添加管道时,除第一根管道外,用户通过拾取模型中已有管道的起点(终点)坐标,作为新管道的起点,随后输入相关参数。程序通过识别已拾取的管道起点ID,在文件中查找管道起点坐标,根据长度和方向等参数进行计算得到管道的终点坐标,和用户输入的其他参数一起写入数据文件。管道的方向可以是沿坐标轴的方向,也可以是空间中任何一个方向,若是后者,通过输入水平面夹角和水平投影与X轴夹角连个参数可以唯一确定新管道的方向。每添加一段管道,程序将在数据文件末尾增加一组带管道编号的关键字,兵将添加的管道显示在界面中。
下面是个添加管道的实例:第一步,在新建模型中沿x轴正方向添加一根1000米长的管道;第二步,以第一根管道终点为起点沿y轴正方向添加一根1000米长的管道;第三步,以第二根管道终点为起点沿Z轴正方向添加一根1000米长的管道;第四步,以第二根管道终点为起点,水平面夹角和水平投影与X轴夹角都设置为30度,添加一根1000米长的管道。管道添加过程如图2所示:
图2 VTK可视化管线的运行原理图
删除管道时只能删除模型中最后一段管道,同时删除数据文件中最后一组关键字。2.2管道模型的可视化
(1)显示
根据VTK的可视化管线和渲染原理,将数据文件作为VTK的数据源。
程序中CCubeView类提供用来显示功能。CGlob-alData是数据类,封装了VTK中所有的数据类型,作为全局变量,存储模型中的所有数据信息,在不同类之间中转数据。
以下处理使VTK的图像显示在CCubeView中:
CGlobalData中的GetMesh()函数完成将模型数据文件转换成VTK数据源的操作;SetInput()函数,将CGlobalData中的VTK数据源传给CCubeView;最后调用CCubeView的redraw()函数,重绘视图区。redraw()函数部分代码和功能如下:
放进VTK的渲染器,实现图像绘制。
(2)旋转
程序 vtkInteractorStyleRubberBandPick类继承自vtkInteractorStyleTrackballCamera,OnLeftButtonDown()方法捕捉鼠标左键和Ctrl键同时按下去的操作,随后调用VTK的StartRotate()函数,实现图像旋转。
旋转效果如图3所示:
图3 旋转对比图
(3)缩放
vtkInteractorStyleRubberBandPick中OnMouseWheel Forward()方法捕捉鼠标滑轮向前滚动和Ctrl键同时按下去的操作,随后调用VTK的StartDolly()函数,实现图像放大。图像缩小功能原理和放大时一样,调用的方法是OnMouseWheelBackward()。
缩放效果如图4所示。
(4)平移
vtkInteractorStyleRubberBandPick中 OnRightBut-tonDown()方法捕捉鼠标右键和Ctrl键同时按下去的操作,随后调用VTK的StartPan()函数,实现图像平移。
平移效果如图5所示。
图4 缩放对比图
综上所述,采用VTK和MFC结合的方式,以数据文件的形式记录管道信息实现管道建模。封装VTK的数据类和显示类,实现管道模型的可视化。但管道的建模过程比较繁琐,删除方式还不够灵活,这是下一步的研究重点。
图5 平移对比图
[1]陈文贤.CAD三维建模技术在管道敷设中的具体应用.石油化工建设,2014.
[2]杨飞,王解先.空间管道的连接建模及3D打印.工程勘察,2015.
[3]余伟巍,席平,何飞.利用VTK与MFC的医学模型重建方法研究与实现.工程图学学报,2009.
[4]罗火灵,许永忠,陈世仲.基于VTK和MFC的医学图像三维重建研究与实现.生物医学工程学进展,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在图像处理与显示方面有强大的功能和源代码开放特点,但是它缺乏友好的交互界面,通过将其与MFC结合,实现管道建模及可视化,可以提高管道网络建设的效率和精度,最大程度地避免设计错误的产生。
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.