1、毕 业 论 文基于VTK的有限元网格可视化研究及软件设计The Visualization Study for Finite Element Mesh and Program Design Based on the VTK学 院 土木建筑学院 专 业 工 程 力 学 学 生 薛 健 学 号 08980130 指导教师 王家林 教授 重庆交通大学 2012 年前 言科学计算可视化112(Visualization in Scientific Computing)的概念自1987年提出到现在,短短25年的时间里,已经对自然科学的几乎所有领域产生了深刻而意义深远的影响。在有限元分析(FEA)领域,可
2、视化技术更是凭借其直观、高效、交互性好的优点成为了诠释网格数据和计算结果的强有力手段甚至是无可替代的方法。本课题的目的即在对于有限元网格可视化技术的研究。有限元网格可视化是有限元分析中一个重要的技术环节,具有重要的工程意义和理论价值。在实际工程中,网格划分的质量直接影响着求解精度以及解的收敛性,而网格的可视化则为庞大的网格系统的人机交互提供了一个方便、直观、高效的手段,不但能够有效地诠释网格数据,还为网格质量的评价与反馈提供了可能;在理论上,成形后的有限元网格具有不依赖于模型对象的独立的几何性态,这使其成为有限元计算的基础甚至核心,而有限元网格的可视化就正是要把网格那些重要的几何属性直观、高效
3、地揭示出来。目前,主流的有限元通用软件或者网格划分专用软件越来越重视软件的可视化及其相关的交互功能,不仅是在友好的图形用户界面的开发、多种数据结果的精确显示、复杂工程项目的可视化仿真建模等等方面,甚至将网格的可视化功能集成到网格划分的功能模块之中,大大提高了网格划分的效率,同时使用户能够对分析过程中网格数据的变化进行及时准确地把握。在有限元应用领域,网格小变形方向的可视化技术已经相当成熟;另外,在流体、传热、电磁场等涉及到物理场、大变形、甚至多场耦合的领域,有限元网格技术也取得了巨大的发展,可视化技术更是为其海量数据的分析处理提供了强大的支持。本课题以Microsoft Visual 2010
4、为编译平台,基于VTK (Visualization Toolkit)及其接口技术,面向土木工程领域研究有限元分析中杆系结构单元、表面单元、实体单元的网格可视化方法。由VTK与MFC混合编程开发出一个有限元网格可视化软件来实现有限元网格的显示、实现对多种网格数据类型的支持、实现网格对象的人机交互等功能。目 录摘 要IABSTRACTIII第一章 绪 论11.1选题的目的与意义11.2国内外研究现状11.2.1OpenGL (Open Graphics Library)21.2.2VTK (Visualization Toolkit)31.3 本课题研究内容3第二章 VTK的结构、执行机制以及V
5、TK软件平台的搭建52.1 VTK的结构与执行机制52.2 VTK软件平台的搭建72.2.1 Microsoft Visual 2010 与Boost库72.2.2 Cmake简介72.2.3 Windows XP环境下VTK 5.8.0的编译与配置8第三章 数据输入接口143.1 有限元网格数据类143.1.1 节点类143.1.2 单元类173.2 数据文件的读入203.2.1 网格数据的读入种类、控制与特点203.2.2 节点编号与坐标的读入213.2.3 二维Delaunay边界点的读入233.2.4 节点位移分量的读入253.2.5 单元编号及顶点的读入26第四章 有限元网格的可视化
6、284.1 VTK基本数据的表达284.1.1 可视化数据的特点284.1.2 VTK的单元数据集284.1.3 数据集类型324.2 VTK的对象工厂设计模式334.3 绘图程序的组织结构344.4 节点的绘制与标注364.5 线单元模型的绘制404.6 三角形单元模型的绘制434.7 四面体单元模型、六面体单元模型的绘制464.8 五面体单元模型的绘制494.9 Delaunay三角网的绘制514.9.1 平面点集的三角剖分524.9.2 Delaunay三角剖分524.9.3 Delaunay三角网的性质534.9.4 vtkDelaunay2D类与vtkDelaunay3D类534.9
7、.5 用vtkDelaunay2D类建立二维离散点集的Delaunay三角网554.9.6 用vtkDelaunay2D类建立二维约束Delaunay三角网59第五章 VTK与MFC混合编程655.1 MFC655.2 位移放大/缩小按钮的添加65第六章 结 论68致 谢69参考文献70附 录72重庆交通大学2012届毕业设计毕业论文摘 要本课题以Microsoft Visual 2010为编译平台,基于VTK (Visualization Toolkit)及其接口技术,实现了有限元分析中多种单元网格模型的可视化。这些网格单元类型包括:离散点集、线单元模型、三角形单元模型、四面体单元模型、五面
8、体单元模型、六面体单元模型。实现了网格单元变形图的绘制。通过改变位移放大系数的方式,可以得到网格未变形时的状态、真实变形状态以及变形放大状态。利用vtkDelaunay2D类进行了离散点集的Delaunay三角剖分与约束边界情形下的Delaunay三角剖分。讨论了vtkDelaunay2D类在进行约束边界情形下的Delaunay三角剖分时存在的一些局限性。实现了节点、单元、位移数据的输入接口,并由VTK与MFC混合编程实现了简单按钮与功能的添加以及多文件的组织。关键字:VTK,有限元网格,可视化,Microsoft Visual 2010,MFCIABSTRACTThe programming
9、 uses Microsoft Visual 2010 as its compile platform. It bases on the VTK (Visualization Toolkit) and its interface technology to realize the visualization of some models meshes in Finite Element Analysis. These meshes including: discrete points set, line element model, triangular element model, tetr
10、ahedral element model, wedge element model and hexahedron element model. It realizes the visualization of meshes deformation. With changing the displacement amplification coefficient, it can get the meshes which have no deformation, or the meshes have real deformation, or the deformation amplificati
11、on. Using the class vtkDelaunay2D to get the Delaunay triangulations about discrete point set, and also the triangulations that lies the boundaries exist. Discussed the limitations of class vtkDelaunay2D in process the Delaunay triangulations under the situation that the boundaries exist. The progra
12、mming realizes the input interface to the nodes, elements and displacement datas. And it realizes simple button and function and the organization of the files added by the VTK and MFC mixing programming.KeyWords: VTK, Finite Element Mesh, visualization, Microsoft Visual 2010, MFC75第一章 绪 论科学数据的可视化与数值
13、分析一样,是分析处理数据不可或缺的重要手段。它不但直观形象地诠释着庞杂的数据类型、挖掘着数据的本质与相互间的联系,还为处理海量的信息提供了强有力的技术支持。VTK是一个开源的可视化工具包,它在科学计算可视化领域(Visualization in Scientific Computing)占据着重要的地位,并越来越发挥出巨大的作用;在有限元分析领域,有限元网格则始终是有限元方法的核心。因此,可以想见,它们二者的结合将具有重要的理论与工程意义。有限元网格本质上可以抽象为一个复杂的空间拓扑点集。我们常常把这个点集中的点元素称为节点(Node),而把点与点之间的联系称为单元(Element)。点是最基
14、本的结构,无法再予以细分;而单元的不同类型和性状则描述了点之间的不同联系,这些联系和点阵的空间排布一起就形成了有限元网格的拓扑属性。对应地,VTK的数据集包含数据属性和组织结构,而组织结构又包含了拓扑结构(Cells)和几何结构(Points),每种结构上又各自绑定着相应的属性。这种拓扑结构与元素的对应正好可以用来映射网格结构的单元和节点,因而在VTK中的多边形数据、结构点集以及各种类型的网格数据就正好可用于网格拓扑点集的表达。1.1 选题的目的与意义有限元网格是有限元方法的核心,有限元分析的一切建模、计算都建立在其基础上。在有限元分析过程中,所划分网格的质量在很大程度上影响着计算结果的精度或
15、者收敛程度。而对于一个大型的有限元模型,庞大的网格数据一旦在计算过程中出现错误,很难检查出来,由此降低执行效率。如果将有限元网格在前处理过程中可视化,则可以通过直观、交互式的手段检查、评估网格划分的质量,对存在的问题进行及时、准确的处理,确保网格划分的有效性。另外,有限元网格在划分完成后实际上就与模型对象脱离了关系,具有独立的几何性态,之后的计算完全是建立在网格的几何属性之上而与原有模型没有任何关系。因此,对于网格生成后计算的研究属于几何与算法的范畴,不依赖于模型对象,也应当是独立的。有限元网格的可视化就正好可以为网格几何性质的表达、评价以及进一步的研究提供有力的支持。1.2 国内外研究现状现
16、有的有限元分析通用软件(如Abaqus、Ansys、Nastran等)已经越来越重视开发可视化的功能。比如,在图形用户界面的设计开发、网格及其节点的显示与交互、数据结果的可视化等许多方面做了大量的工作,使得这些软件的可视化功能变得更加的完善、界面变得更加的友好,用户在建模、分析等过程中对于模型对象的操作更加的便捷、高效,对数据结果的分析处理也更加的准确与直观。另外,一些专业前处理软件(如Abaqus/CAE、Ansys/workbench 等)和专门用于进行网格划分的前处理软件(MeshMorpher、HyperGraph、Gridgen、Gambit、Icem CFD等)更是将网格的可视化功
17、能集成在了网格划分的模块之中,大大提高了网格可视化的效率,同时使用户能够对分析过程中网格的变化进行及时准确地把握。目前常用的可视化工具主要有OpenGL12-15 (Open Graphics Library)、Direct 3D 16 (D3D)、IBM OpenDX1718(Open Visualization Data Explorer)、VTK2-7 (Visualization Toolkit)、Matlab19-21等等。其中,OpenGL是一个老牌的三维计算机图形和建模库,已广泛应用于计算机可视化的各个领域,包括游戏开发和科学计算可视化;Direct 3D是微软制定的3D规格界面
18、,与OpenGL同为电脑绘图软件和电脑游戏经常使用的两套绘图编程接口,但目前只在Windows平台上可用;IBM OpenDX是UNIX上一个功能全面的可视化应用程序,主要用于数据的可视化和分析;而VTK是一个开源的可视化工具包,用来进行3D的计算机图形图像的处理、可视化以及二次开发;Matlab的可视化功能则主要针对各种类型的函数、偏微分方程数值计算结果以及仿真建模的可视化,处理的数据主要是科学计算的数值结果,数据形式以矩阵形式为主。在这些可视化工具包中,OpenGL与VTK以其强大的功能在科学计算的图形图像处理方面占据了重要的地位,极大地推动了科学计算可视化的发展。1.2.1 OpenGL
19、 (Open Graphics Library)OpenGL12-15是一个三维的计算机图形和建模库,它独立于视窗操作系统或其它操作系统,亦是网络透明的。OpenGL也是一个专业的图形程序接口,是一个功能强大、调用方便,直接与硬件联系的、面向过程的底层图形库。OpenGL集成了所有曲面造型、图形变换、光照、材质、纹理、像素操作、融合、反走样、雾化等等复杂的计算机图形学算法,为用户提供了可视化方面强大而又方便实用的功能。OpenGL具有高度的开放性、可移植性、网络透明性等特点,因而常用于游戏开发、科学计算可视化(运动仿真、有限元分析、流体计算、医学成像、分子化学、汽车等曲面造型、地理信息、石油勘
20、探、气候模型模拟)、虚拟现实技术、影视广告、CAI等领域。OpenGL可与VC+紧密接合,因而便于有关计算和图形算法的实现,并保证算法的正确性和可靠性,使用简便、效率高。它能够在Windows 95/98、Windows NT、Macos、Beos、OS/2及Unix上应用,以它为基础开发的应用程序能够在这些平台间方便的移植。另外,OpenGL可以在网络上工作,即客户机/服务器型,显示图形的计算机(客户机)可以不是运行图形程序的计算机(服务器),客户机与服务器可以是不同类型的计算机,只要两者服从相同的协议1315。1.2.2 VTK (Visualization Toolkit)VTK2是一个
21、开源的可视化工具包,用来进行3D的计算机图形图像的处理、可视化以及二次开发。它亦是一个用于可视化应用程序构造与运行的支撑环境,是在三维函数库OpenGL的基础上采用面向对象的设计方法建立发展起来的。它将可视化开发过程中会经常遇到的细节屏蔽起来,并将一些常用的算法封装起来,以类的形式给用户以支持,极大地提高了数据的安全性和代码的执行效率。VTK包含一个功能强大的C+类库,同时也支持多种脚本语言,包括Python、Tcl/Tk、Java等;它支持多种可视化算法,包括标量、向量、张量、纹理和体积测定方法等;它提供许多高级的建模技术,比如隐函数建模、多边形减面、网格平滑、切割、造型以及Delaunay
22、三角划分等5。另外,许多成像算法已被整合,融入了二维成像和三维成像的图形算法和数据。VTK提供多种数据表达类型,包括无结构点集、多边形数据、图像、体元、结构网格、正交网格以及无结构网格等。它的绘制模式支持2D、多边形、体元和纹理绘制,以及它们的各种组合6。VTK源码开放、交互性好、跨平台、支持平行处理,它以其强大的可视化功能在学术研究以及商业应用的许多领域越来越受到重视。VTK的一个重要应用就是和ITK(Insight Segmentation and Registration Toolkit)混合编程实现医学影像的三维可视化重构8-10,其中包括著名的可视人计划(Visible Human
23、Project,VHP,1989)111、颅面建模等,为数字医学的研究、临床应用开辟了一个全新的方向。此外,VTK已在建筑学、气象学、生物学、航空航天、石油勘探、地理学、测绘学、声学系统、流体系统、有限元分析、表面重构等诸多应用领域发挥了巨大作用。1.3 本课题研究内容本课题以Microsoft Visual 2010为编译平台,基于VTK及其接口技术,面向土木工程领域研究有限元分析中杆系结构单元、表面单元、实体单元的网格可视化方法。由VTK与MFC混合编程开发出一个有限元网格可视化软件来实现有限元网格的显示、实现对多种网格数据类型的支持、实现网格对象的人机交互等功能,是VTK的基本应用。第二
24、章 VTK的结构、执行机制以及 VTK软件平台的搭建2.1 VTK的结构与执行机制VTK (Visualization Toolkit)是在OpenGL的基础上建立发展起来的可视化工具包。但它不再像OpenGL一样采用面向过程的手段,而是采用了面向对象的程序设计方法,将可视化过程中一些常用的数据和算法封装起来,以C+类库的形式给用户以支持,这样一来,用户不必再关心一些绘制细节的实现就可以直接调用需要的绘图功能,极大地简化了可视化程序开发的过程,提高了可视化绘制的效率。C+代码解 释 层VTK工具包的结构如图2.1所示,它由一个C+核心编译层和一个算法的解释应用层构成。核心层即是封装了算法的代码
25、,而解释层就是在进程组建时自动生成的支持C+及其他程序设计语言的对外接口。VTK具有以下一些主要特点; 源码开放、跨平台、支持平行处理;图2.1 VTK工具包结构 包含C+类库; 支持多种脚本语言,包括Python、Tcl/Tk、Java等; 包含多种高级的建模技术与可视化算法; 交互性好; 可用于二次开发。这些特点为用户的可视化编程带来了极大的便利与灵活性,扩展了用户自由发挥的空间,几乎可以满足2D、3D可视化项目的各种功能要求。VTK处理的可视化数据类型包括多边形数据、结构点集、正交网格、结构网格、无结构网格等等。它的可视化流程采用所谓“管道流(Pipeline)”机制,图2.2显示了管道
26、数据流的方向。其中Source和Filter构成了VTK的可视化模型,Mapper和Actor则构成了VTK的图形模型,它们统称为对象模型。可视化数据是不能直接由计算机硬件绘制成图形图像的,需要将其转变为图形数据才能绘制。在管道流中,可视化模型组成的SourceFilterMapperActor图2.2 VTK可视化的管道流(Pipeline)机制可视化管道就负责将可视化数据转换为图形数据,而图形模型组成的图形管道则将图形数据交由计算机硬件绘制成可视可交互的图像图形。在程序设计中vtkObject是VTK的抽象基类,它为整个可视化流程提供基本的方法。Source为整个流水线提供可视化数据,并为
27、整个可视化流程定义具体的行为和接口。这主要由派生自vtkObject的vtkSource这个类及其派生类来实现。可视化数据大体上分为两类:一是从外部读入的已有数据,一类则是由函数或方程运算后生成的数据。Filter对原始的数据进行筛选、加工,并为某些可视化流程提供特定的算法。它可以接收一个或多个输入,并产生一个或多个的输出。在程序代码中,这主要是通过vtkFilter这个类及其派生类来实现。另外,vtkFilter是由vtkSource派生出来的。Mapper将经过Filter处理后的应用数据映射成几何数据,为原始数据和图像数据之间定义接口。vtkMapper是vtkObject的派生类,它与
28、其自身的其它派生类一道来实现这个功能。Actor接收Mapper导出的数据并进行整合,然后交由绘制器Renderer进行绘制,最后再由RenderWindow显示出来。这就完成了一条流水线(管道流)的主要工作。整个可视化过程可以由以下C+形式代码来表示:/创建数据源vtkSource *source=vtkSource:New();/创建映射器vtkMapper *mapper=vtkMapper:New();mapper-SetInput(source-GetOutput();/创建演员vtkActor *actor=vtkActor:New();actor-SetMapper(mapper
29、);/创建绘制器vtkRenderer *ren=vtkRenderer:New();ren-AddActor(actor);/创建绘制窗口并显示绘制vtkRenderWindow *renwin=vtkRenderWindow:New();renwin-AddRenderer(ren);renwin-Render();在上面这个可视化框架下,没有加入过滤器Filter,因为它并不是每个可视化过程必需的。另外,由以上过程可见,可视化过程操作的变量类型主要是指针类型,这样可以方便直接地对内存地址进行访问,提高绘制效率。基于这个原因,在不至引起混淆的情况下,后文不再区分VTK代码中“类的对象”和“
30、类的对象指针”这两个概念,统称为类的对象或类的实例,需要区别时会特别指明。在可视化过程中,还可以通过vtkRenderWindowInteractor这个类及其派生类为绘制窗口添加交互;通过vtkProperty为绘制对象添加属性;在表现三维实体时,还需要通过vtkLight来实现立体化,通过vtkCamera来实现定位等等。综合以上可知,vtkObject(vtkSource),vtkFilter,vtkMapper,vtkActor,vtkRenderer,vtkRenderWindow,vtkRenderWindowInteractor,vtkLight,vtkCamera,vtkPro
31、perty等等这些类及其派生类就构成了VTK可视化编程的框架,所有可视化进程都由它们构建起来的管道流来实现。这就是VTK的执行机制。2.2 VTK软件平台的搭建2.2.1 Microsoft Visual 2010 与Boost库本课题的程序代码是基于Windows下Microsoft Visual 2010编译平台的。Microsoft Visual Studio(简称VS)是微软公司推出的开发环境,是目前最流行的Windows应用程序开发平台。随着C+新标准的公布,Microsoft Visual 2010在C+开发方面带来了很多革命性的变化,为开发者提供了更加友好的图形用户界面以及高效稳
32、健的运行环境。Boost是目前最具影响力的C+第三方程序库,它的出现为C+标准库添加了很多强大的功能,为C+标准库注入了新的活力。Boost由几十个程序库构成,一些程序库提供了SLT之外的容器、函数对象和算法,其他程序库的功能涉及文本处理、数值计算、向量和矩阵计算、图像处理、内存管理、并行编程、分布式计算、模板元编程等方面,功能十分强大。2.2.2 Cmake简介在本课题的实施中,Cmake (cross platform make)用于在安装VTK时对VTK的源码包进行编译配置(具体步骤见第2.2.3节)。Cmake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译)
33、过程。它是为了满足美国国家医学图书馆出资的Visible Human Project专案下的Insight Segmentation and Registration Toolkit (ITK) 软件跨平台建构的需求而被创造出来的,其设计受到了Ken Martin开发的pcmaker所影响。Pcmaker原本则是为了支援Visualization Toolkit (VTK)才出现的。Cmake能够对微软Visual Studio .NET和Visual Studio版本进行支持;能够支持多种面向对象的程序设计语言、脚本语言;能够在许多操作系统上进行跨平台编译,包括Linux、POSIX相容的系
34、统(AIX、*BSD、HP-UX、IRIX、MinGW/MSYS、Solaris系统)、Mac OS X和微软Windows 95/98/NT/2000/XP等。Cmake并不直接建构出最终的软件,而是产生标准的建构档(如Unix的Makefile或Microsoft Visual C+ 的 projects/workspaces),然后再依一般的建构方式使用。它通过CmakeLists.txt文本文档来构建工程,CmakeLists.txt也称为组态档,它是用建构软件专用的一种特殊编程语言编写的CMake脚本。当需要用Cmake来组建一个工程时,首先就需要编写一个CmakeLists.txt
35、,在这个CmakeLists.txt文档中应当包含一些必要的编译指令、必要的库函数或文件名以及设置路径。编译完成后再生成项目,就可以产生后缀为.dsp、.sln和.vcproj的文档。同时,Cmake通过读取CmakeLists.txt文档中的配置会自动为所建工程添加相应的路径或库函数。另外,针对同一个工程项目的不同使用要求,Cmake还能对这个项目进行反复编译,以重设不同的配置。基于这些原因,Cmake为大型工程项目的编译、构建和配置带来了极大的方便。但本课题在组建工程时并为用Cmake进行配置,而是通过添加包含绝对路径的C+头文件的方式来进行路径设置的(参见第2.2.3节(10).3) 通
36、过C+头文件来设置路径)。2.2.3 Windows XP环境下VTK 5.8.0的编译与配置安装版的配置环境:Windows xp、cmake2.8.7、visual_studio_2010。(1) 在VTK官网http:/vtk.org 的Download下载vtk 5.8.0的以下组件:win32安装程序:vtk-5.8.0-win32-x86.exe 源程序:vtk-5.8.0.zip 数据文件:vtkdata-5.8.0.zip 文档包(根据需要安装):vtkDocHtml-5.8.0.tar.gz (另外,带.tar的相应压缩包用于Unix系统,暂不下载。)(2) 安装vtk-5.
37、8.0-win32-x86.exe在F:Program FilesVTK 5.8.0;解压vtk-5.8.0.zip到F:Program FilesVTK 5.8.0vtk-5.8.0; 解压vtkdata-5.8.0.zip到F:Program FilesVTK 5.8.0vtkdata-5.8.0。 (如需使用文档包,则再把vtkDocHtml-5.8.0.tar.gz解压到F:Program FilesVTK 5.8.0html)(3) 打开cmake(cmake-2.8.7-win32-x86bincmake-gui.exe),用cmake编译VTK 5.8.0:首先,将源码和编译工作
38、目录两个目录填好:sourse code目录是F:Program FilesVTK 5.8.0vtk-5.8.0,build 目录是F:Program FilesVTK 5.8.0bin。再按configure按钮,cmake软件会让用户选择需要使用的编译器,选择Visual Studio 10。然后,cmake就会对系统进行扫描了,停下来之后显示红色列表,此时开始修改cmake选项,即下面第四步参数设置。(4) 参数设置: build_documentation:创建文档。初次编译时可以不选,在编译VTK的chm格式的帮助文档时,需要将这个选项选上。build_examples:询问是否编译
39、VTK中的例子。编译时,要多花些时间。build_shared_libs:如果不勾选,就只会生成.lib文件(静态库),如果勾选将会多生成dll文件(动态库),这些dll文件需要拷到windows/system32目录下,或者通过设置路径放到编译器(VS 2010)能够找到的路径下。build_testing:编译VTK的测试代码。cmake_backwards_compatibility:默认2.4未改动cmake_install_prefix:把它设置为f:/Program Files/VTK。这相当于以前版本(比如cmake2.4)中的cmake_install_divfix,就是以后要
40、安装VTK的路径。vtk_data_root:VTK数据文件的路径,设置为F:Program FilesVTK 5.8.0vtkdata-5.8.0。vtk_large_data_root:同样设置为F:Program FilesVTK 5.8.0vtkdata-5.8.0vtk_use_parallel:用VTK做并行计算时,要把这个选项选上。选中Advanced进入高级选项,勾选vtk_use_boost。勾选vtk_use_guisupport,打开它才能选vtk_use_mfc(选中),这一步很关键,很多时候把VTK安装好后却无法运行VTK中与MFC混合编程的例子,提示错误为缺少vtk
41、mfc.lib,问题就出在这个选项,必须先把vtk_use_guisupport选上,再configure之后,会出现一个新的选项vtk_use_mfc,把它也选上就行了。vtk_use_guisupport 这个选项在勾选Advanced后才能出现。其余选项均保持默认值。修改完cmake选项以后,按configure按钮,直到没有选项显示为红色。在cmake以前的版本(比如cmake2.4)中,ok按钮会在configure完成后变为可用,点击ok按钮,就可以生成VC的工程文件了。而在cmake2.8.7(以及cmake2.8.6)中,已经没有ok按钮了,这时候,点一下generate按钮,
42、产生相应的VTK.sln 解决方案在F:Program FilesVTK 5.8.0bin中。(5) 由于选择的编译器是VS 2010,参数设置完成后在编译整个解决方案之前(即打开VTK.sln之前),需要先执行以下操作才能用VS 2010编译VTK(这是不同于用VC6.0,VC7.0,VC8.0进行编译的地方):1) 先找到F:Program FilesVTK 5.8.0vtk-5.8.0GUISupportMFCvtkMFCWindow.cpp,用记事本打开,找到类似以下源码并修改数值如下:-#ifndef WINVER#define WINVER 0x0501#endif#ifndef
43、_WIN32_WINNT#define _WIN32_WINNT 0x0501 / =_WIN32_WINNT_NT4#endif#ifndef _WIN32_IE#define _WIN32_IE 0x0601 /=_WIN32_IE_IE60SP1#endif-2) 如果之前Cmake勾选了 build_examples,工程中含有VKT的examples,仅改上面代码还不够,还需要找到vtk-5.8.0ExamplesGUIWin32vtkMFCvtkDLGstdafx.hvtk-5.8.0ExamplesGUIWin32vtkMFCvtkMDIstdafx.hvtk-5.8.0Exam
44、plesGUIWin32vtkMFCvtkSDIstdafx.hvtk-5.8.0ExamplesGUIWin32SampleMFCstdafx.h四个文件,每个文件下找到类似以下源码并修改数值如下:-#ifndef WINVER #define WINVER 0x0501 #endif#ifndef _WIN32_WINNT #define _WIN32_WINNT 0x0501 #endif #if _MSC_VER = 1300#ifndef _WIN32_WINDOWS #define _WIN32_WINDOWS 0x0501#endif#endif#ifndef _WIN32_IE
45、 #define _WIN32_IE 0x0601 #endif-3) 如果不进行上述两步操作,在编译项目过程中会出现类似下面错误:fatal error C1189: #error : This file requires _WIN32_WINNT to be #defined at least to 0x0403. Value 0x0501 or higher is recommended.(6) 编译整个解决方案:打开VTK.sln启动VS 2010,点击编译生成解决方案开始编译。(另外,也可在F:Program FilesVTK 5.8.0bin文件夹中选中ALL_BUILD.vcxp
46、roj打开)。编译好的文件默认是Debug文件,保存在F:Program FilesVTK 5.8.0binbinDebug中。虽然之前第5步已经修改了某些.cpp文件和.h文件,但在编译解决方案时,有时还是会遇到一些错误。在附录中列出了一些编译时常见错误及解决方法。(7) 编译好Debug文件之后,再编译一个Release文件:在VS 2010的Solution Explorer中右击ALL_BUILDProperties点击Configuration Manager将Active solution configurration 选项选为Release。重新编译,则生成Release文件。(某些路径可能需要重新设置)。编译好的文件保存在F:Program FilesVTK 5.8.0binbinRelease。(8) 至此,VK