基于VTK的有限元计算结果可视化
尹小刚,奚金荣
河海大学工程力学系,南京 (210098)

摘要:有限元计算结果的可视化是分析有限元计算结果的重要手段。随着可视化的广泛应用,人们对于三维真实感图形的要求也逐步提高。为了便于使用,国内外推出了许多优秀的可视化软件。其中可视化工具包(Visualization ToolKit)是一个面向对象的可视化类库,它为从事可视化工具开发的广大科研工作者提供直接的技术支持。本文介绍了常用的可视化技术、VTK(Visualization ToolKit)特点及可视化流水线,数据流向。以Microsoft Visual C++ 6.0作为开发工具,结合VTK,编制了相应的可视化程序,基本实现了有限元计算结果(温度场、位移场、 应力场等)的可视化。最后给出了一个可视化的实例,成功地实现了云图、切割、流线、流面的显示。 关键词:可视化;VTK;有限元计算结果

1. 引言
有限元分析过程中产生相当数量的结果信息,这些信息要被分析者理解,并加以利用,可视化是非常重要的。可视化技术利用人的视觉和计算机,根据数据产生的图像,利用颜色、密度、透明度、文字等技术,将不可见变为可见,在短时间内通过图形传递大量信息,使研究人员能够直观、迅速地观察到计算模拟的结果。VTK (Visualization ToolKit) 就是一款能给从事可视化应用程序开发工作的研究人员提供直接的技术支持的一个强大的可视化开发工具。
2. 有限元分析中常用的可视化技术
有限元分析中的可视化技术包括标量场的可视化技术和矢量场的可视化技术两大类[1]。标量场的可视化方法主要有彩色云图、等值线图、等值面及切片图,其中以等值线图和彩色云图最为常用。彩色云图通过颜色的变化反映数据的变化, 具有直观、 美观的特点, 是一种重要的可视化技术。其常用的生成算法有以下3种:
(1)根据所选物理量,在有限元网格上以不同颜色填充网格,产生既简单又十分直观的量值分布彩色云图。
(2)在两等值线之间的区域内填以不同的颜色.这种方法最常用。
(3)扫描线算法:该算法用插值法计算出扫描线上各点的场量值,并建立场量值与颜色的对应关系,从而产生高质量的彩色云图。
矢量场的可视化方法主要是箭头线段表示法[2]、流线、矢量场动画[3],其中以箭头线段表示法最为常用。箭头线段表示法是用一组线段结合箭头表示矢量场。具体说来:线段的长度反映矢量模的大小,箭头反映矢量的方向。矢量场的场线是一条空间曲线,该曲线上任一点的切线方向与矢量场在该点的方向一致,流场中称为流线。流线在流体中应用较多,它是通过在流场中加入示踪粒子,这些粒子随流体一起平流,显示出各种流动现象,利用计算机实现矢量场可视化。一条流线可以被认为是一种无质量的微粒在矢量场中的路径。 通常生成多条流线来探究场中感兴趣的特征。流线通过数值积分来计算,因此显示出来的只是实际流

线的近似表示。创建一条流线需要声明一个开始点(在多流线中,要声明多个起始点),一个积分方向(可以是沿着流程方向,也可以是逆着方向,也可以是两个方向都包括),还有其它用来控制传播的参数。矢量场动画也是一种表达矢量的较好方法。由于动画能够动态地描述矢量场的结构,变速动画还能直观反映矢量大小,目前在大型有限元软件中一般都带有该功能。
3. VTK简介
伴随着可视化的广泛应用,国内外推出了许多优秀的可视化软件, 其中可视化工具包(VTK Visualization ToolKit) [4,5]是一个开放源码、自由获取的软件系统,全世界的数以千计的研究人员和开发人员用它来进行3D计算机图形,图像处理,可视化。VTK(VTK Visualization ToolKit)包含一个c++类库,众多的翻译接口层,包括Tcl/Tk,Java,Python。VTK 还是一个用于可视化应用程序构造与运行的支撑环境,它是在三维函数库OpenGL 的基础上采用面向对象的设计方法发展起来的,它将我们在可视化开发过程中会经常遇到的细节屏蔽起来,并将一些常用的算法封装起来。VTK以其强大的功能、 方便的使用以及源码开放等特点受到了许多研究人员和组织机构的重视。
3.1 VTK特点
VTK 是一个强大的可视化开发工具,它以用户使用的方便性和灵活性为主要原则,具有如下的特点[6]:
(1)具有强大的三维图形功能。Visualization Toolkit 既支持基于体素Voxel-basedrendering 的体绘制Volume Rendering又保留了传统的面绘制,从而在极大的改善可视化效果的同时又可以充分利用现有的图形库和图形硬件。
(2) Visualization Toolkit 的体系结构使其具有非常好的流streaming 和高速缓存caching 的能力,在处理大量的数据时不必考虑内存资源的限制。
(3) Visualization Toolkit 能够更好的支持基于网络的工具比如Java 和VRML 随着Web 和Internet 技术的发展Visualization Toolkit 有着很好的发展前景。
(4) 能够支持多种着色。
(5) Visualization Toolkit 具有设备无关性使其代码具有良好的可移植性。
(6) Visualization Toolkit 中定义了许多宏,这些宏极大的简化了编程工作并且加强了一致的对象行为。
(7) Visualization Toolkit 具有更丰富的数据类型,支持对多种数据类型进行处理。
(8) 既可以工作于Windows 操作系统又可以工作于Unix 操作系统极大的方便了用户。
3.2 VTK可视化流水线
VTK 中定义的过程对象根据其 pipeline 主要包括了数据源(Source) , 过滤器 ( Filters)、映射 (Mappers) , 数据流水线(dat-apipeline) [7], 过程如下图 1所示:
数据源( Source):vtkSource 是所有数据源的基类, 其子类定义了许多数据源类型;

过滤器( Filters):vtkFilter 是各种 Filter 的基类, 从 vtkSource中派生出来, 接收 Source 中的数据, 进行各种不同的 Filter 处理工作。Filters 为 VTK的主要部件, 由其基类派生出了许多子类, 实现了许多图形学算法。例如网格细化( vtkSubdivideTetra) , 压缩( vtk-ShrinkFilter) , 映 射 ( vtkReflectionFilter) , 旋 转 ( vtkRotationalExtru-sionFilter) , 提取边( vtkExtractEdges) 等方法, 将其封装起来, 用户只需要编写简单程序接口调用就可, 并可以通过改变其参数来达到想要的效果;
映射(Mappers):vtkMapper 是所有 Mappers 的基类, 从 Filtes接受数据, 并把其映射为图形库中的基本图元。根据映射方式的不同, 有多个继承子类。

图1 数据对象和处理对象相连的可视化流水线

图2 数据流向

4. 有限元计算结果的可视化

4.1 可视化设计过程
(1) 我们利用有限元软件(ANSYS、ABAQUS、Marc等)分析、求解实际问题,得到单元、节点、位移、应力、温度、坐标等信息。
(2) 用C++以文件的形式读入这些信息,创建vtkUnstructuredGrid ,并将读入进来的信息添加到vtkUnstructuredGrid里面,从而建立起vtkUnstructuredGrid的数据形式。
(3) 根据不同的功能,设计可视化通道,检查、修改、调试程序。
(4) 在MFC AppWizard[exe]下设计界面,并将调好的代码添加到菜单里面,完成整过可视化设计部分。
具体以实现流线绘制的部分代码简要说明上述过程:
vtkUnstructuredGrid*ugrid=vtkUnstructuredGrid::New();
通过SetPoints、AddArray、SetScalars等方法将读入的单元、节点、位移、应力、温度、坐标等信息加入到ugrid中,完成步骤(1)、(2);
可视化通道设计如下:

图3 Streamlines可视化通道

按照上述可视化通道,检查、调试代码,并将调试好的代码做成MFC AppWizard下菜单的形式,完成步骤(3)、(4)。
4.2 应用实例

根据本文方法, 编制了有限元计算结果的可视化程序, 实现了温度场、位移场、 应力场等有限元数据场的可视化。下图是一个带孔的铰链经本程序调用后运行情况:图4是应力Mises的彩色云图;图5是对位移X方向分量(Ux)彩色云图的切割;图6是位移流线图;图7为位移流面图。

图4 应力图(S, Mises plotting)

图5 对位移X方向分量(Ux)云图的切割

图6 流线图(Streamlines plotting)

图7 流面图(Streamsurfaces plotting)

从上面的结果中可以看出,本文所述方法通用、有效,调色图比较能反映真实情况。
5. 总结
(1)本文成功地实现了用VTK可视化有限元计算结果;
(2)证实了VTK在有限元计算结果可视化方面有很强的适用性。

参考文献
[1]谢春,马兰,彭颖红,有限元计算结果可视化处理[J],计算计辅助设计与图形学学报,Vol.12.No.2.Feb.2000;
[2]武君胜,有限元分析计算中的可视化技术及其实现[J], 计算机辅助工程,NO.1 Mar.1995;
[3]张文,矢量场可视化算法研究与系统设计[J],国防科学技术大学研究生院学位论文,2001;
[4] Wong C,Gouda M,Lam S.Secure Group CommunicationsUsing Key Graphs.IEEE/ACM Transactions on
networking,1999,8(1):16-30.;
[5] Thomas Hardjono,Gene Tsudik.IP Multicast Security:Issuesand Directions.Annales de Telecom,2000,
6:324-340;
[6]周振环,王安明,王京阳,赵明,基于VTK三维可视化编程[J],深圳职业技术学院学报,2007;
[7] 陈琰, 梁云, 杨海新,基于VTK技术的可视化研究[J],电脑知识与技术,2007;

基于VTK的有限元计算结果可视化 尹小刚,奚金荣相关推荐

  1. 【VTK+有限元后处理】可视化结果云图

    构建vtkUnstructuredGrid对象 为了读取不同格式的有限元计算结果文件,我们先写一个FEDataModel类来管理有限元的几何拓扑和属性信息. class FEDataModel:&qu ...

  2. python三维矩阵可视化_科学计算三维可视化---Mlab基础(基于Numpy数组的绘图函数)...

    Mlab了解 Mlab是Mayavi提供的面向脚本的api,他可以实现快速的三维可视化,Mayavi可以通过Mlab的绘图函数对Numpy数组建立可视化. 过程为: .建立数据源 .使用Filter( ...

  3. matlab鬼成像,一种基于光计算的可视化计算鬼成像系统及成像方法与流程

    本发明涉及成像探测领域,具体为一种基于光计算的可视化计算鬼成像系统及成像方法. 背景技术: 光学鬼成像技术是通过双路光信号符合探测恢复待测物体空间信息实现的.其特点是包含物体信息的信号光(signal ...

  4. Python计算树模型(随机森林、xgboost等)的特征重要度及其波动程度:基于熵减的特征重要度计算及可视化、基于特征排列的特征重要性(feature permutation)计算及可视化

    Python计算树模型(随机森林.xgboost等)的特征重要度及其波动程度:基于熵减的特征重要度计算及可视化.基于特征排列的特征重要性(feature permutation)计算及可视化 目录

  5. 基于VTK的MFC应用程序开发(3)

    基于VTK的MFC应用程序开发(3) 分类: VTK应用示例 2013-05-17 13:37 3307人阅读 评论(23) 收藏 举报 目录(?)[+] 之前介绍了基于VTK的单文档应用程序开发,并 ...

  6. 基于VTK与Qt的体绘制程序

    基于VTK与Qt的体绘制程序 分类: VTK Qt Volume Rendering C&C++ 2013-06-10 09:17 3434人阅读 评论(13) 收藏 举报 目录(?)[+] ...

  7. VTK:一个面向对象的可视化类库(zz)

    VTK:一个面向对象的可视化类库(zz) (高隽 黄伟 合肥工业大学计算机与信息学院 合肥 230009)         摘要 Visualization Toolkit 是一个面向对象的可视化类库 ...

  8. python 科学计算三维可视化笔记(第三周 高级进阶)

    python 科学计算三维可视化笔记 第三周 高级进阶 python 科学计算三维可视化笔记 第三周 高级进阶 一.Mayavi 入门 1. Mayavi 库的基本元素 2. 快速绘制实例 3. Ma ...

  9. 基于VTK的PACS系统的开发 心路历程2

    中文操作手册-简介部分 翻译不易,且看且珍惜! 前言: 欢迎使用可视化工具包(VTK)的用户指南,VTK是一个开源的.面向对象的软件系统,用于计算机图形学.可视化. 和图像处理.虽然它大而复杂,一旦你 ...

最新文章

  1. Windows客户端C/C++编程规范“建议”——函数
  2. 【译】理解Javascript函数执行—调用栈、事件循环、任务等
  3. 【framework】spring3-mvc实例-信息转换
  4. 神经网络训练集与Fock矩阵
  5. 借助axios的拦截器实现Vue.js中登陆状态校验的思路
  6. df.isnull使用细节
  7. 前端学习(1563):ng-if
  8. 简易listview与adapter实现列表,ArrayAdapter和BaseAdapter
  9. ERROR 3009 (HY000): Column count of mysql.user is wrong. Expected 45, found 42. Created with MySQL 5
  10. 算法我也不知道有没有下一个---一个题目的开端(索引堆与图)
  11. 疑似realme旗舰新机入网:采用升降前置摄像头
  12. 你真的会用搜索引擎吗
  13. 【读书笔记】触摸屏游戏设计
  14. Python数据分析-绘图-2-Seaborn进阶绘图-7-网格图
  15. Mysql-mmm 架构部署
  16. 最全UnityHub下载链接Unity2022~2017各版本+Unity5.x【间歇性更新】
  17. 【Git】OpenSSL SSL_read: Connection was aborted, errno 10053
  18. android单元测试AndroidTestCase
  19. 兰大本科生发31篇论文引质疑,研究范围从改革开放到呼吸道感染,本人:我努力有错吗?...
  20. 目前已完成linux适配的软件,WPS Linux版与国产统一操作系统UOS完成适配:符合国人使用习惯...

热门文章

  1. 手机开发平台的学习指南、教程和资料总结
  2. R语言点阵图dotplot参数详解
  3. airodump-ng wlan0mon无法找到wifi信息
  4. 掌握萨克斯演奏技巧的主要4点
  5. kubeadm安装Kubernetes V1.10集群详细文档
  6. 物联网竞赛DAY3---NB-IoT模块板控制
  7. ProCAST 2021反算教程
  8. 线性代数与解析几何——Part3 线性空间 线性变换
  9. Android音频系统的改进设想和展望 PulseAudio介绍
  10. Excel2013函数公式大全(二)