2024年2月6日发(作者:)

VTK培训的教程

Document number:NOCG-YUNOO-BUYTT-UU986-1986UT

VTK(VisualizationToolkit)安装和配置

没有找到或下的安装版,若是用话有现成的安装版本,只能自己动手编译了一下

安装版的配置环境(VC6,Windows)

1.必须要下载的东西,VC6已经装好为前提:

5.0.4安装程序的Download

源程序

数据

2.安装5.0.4在D:ProgramFiles,解压到D:ProgramFiles到D:ProgramFiles用cmake编译到D:ProgramFilesbin下,(这一步花了我不少时间,每次cmake编译到一定量就死掉,不知道什么原因,编译了不下10次终于成功)

4.参数设置,几个关键参数要注意;

vtk_use_guisupport,打开它,才能选vtk_use_mfc,再configure;

vtk_data_root:目的是告诉cmake,vtk需要的数据都在哪里,我们的数据在D:ProgramFilesvtkdata-5.0.4

build_examples:就是询问是否编译vtk中的例子,我第一次的时候选上了,结果编译了2个小时的例子还没编译完,所以我后来选了off。

build_shared_libs:如果设置为off,就只会生成lib文件,用于开发肯定是够了。如果设置为on,将会多生成dll文件,这些dll需要拷到windows/system目录下。。建议选On,

中选ok,在bin文件下,编译dsw文件就行,我大概花6分钟。

6.测试:这时新建一个project,win32consoleapplication,anemptyproject,生成后给sourcefiles加一个,把下面的代码放进去。

#include""

#include""

#include""

#include""

#include""

#include""

#include""

intmain()

{

vtkConeSource*cone=vtkConeSource::New();

cone->SetHeight;

cone->SetRadius;

cone->SetResolution(10);

vtkPolyDataMapper*coneMapper=vtkPolyDataMapper::New();

coneMapper->SetInputConnection(cone->GetOutputPort());

vtkActor*coneActor=vtkActor::New();

coneActor->SetMapper(coneMapper);

vtkRenderer*ren1=vtkRenderer::New();

ren1->AddActor(coneActor);

ren1->SetBackground,,;

vtkRenderWindow*renWin=vtkRenderWindow::New();

renWin->AddRenderer(ren1);

renWin->SetSize(300,300);

inti;

for(i=0;i<360;++i)

{

renWin->Render();

ren1->GetActiveCamera()->Azimuth(i);

}

cone->Delete();

coneMapper->Delete();

coneActor->Delete();

ren1->Delete();

renWin->Delete();

return0;

}

环境路径设置,这个比较重要:

1).修改Projectsetting->C/C++->Category->Preprocessor->Additionalincludedirectories:

D:ProgramFilesvtk-5.0.4Graphics,D:ProgramFilesVTKFilesVTKFilesbin,D:ProgramFilesVTK

2).修改Projectsetting->Link->Input->Object/librarymodules:

D:ProgramFilesbinbinDebug

VTK编程简介(转载)

0如何利用文档

VTK是由WillSchroeder等创立的KitwareInc.的开放源码产品。Kitware提供关于VTK的技术支持和各种服务产品,包括教科书和用户指南:TheVisualizationToolkitAnObject-OrientedApproachTo3DGraphics,3rdedition和TheVisualizationToolkitUser'sGuide。两本书的内容各有侧重,教科书主要介绍可视化的各种算法以及VTK中的数据结构,而用户指南强调软件的使用方法。可以根据使用过程中遇到的不同问题参考两本书中的相应章节。编程中对具体的类、函数等的使用可以参考电子版的手册。编程中遇到的问题,可以在VTK的maillist上提出,一般都会有解答。

1编译VTK库

准备源代码

从下载源代码。源代码按成熟度依次分为官方发行版、每日打包版和CVS开发版,其中官方发行版最稳定,CVS开发版最新。一般应用使用官方发行版即可。

用CMake产生具体平台下的工程文件

VTK是用C++语言开发的平台无关的图形库。为了使相互关联的VTK库代码能在不同平台(如Windows和Unix)和不同编译器(如和Borland)下方便使用,Kitware开发了CMake这一转换工具。比如使用CMake,可以为Windows平台下的产生相应的工程文件(.dsp或.dsw文件),此后就可以在VisualStudio的集成开发环境(IDE)下进行编译连接了。

CMake提供一个用户界面,用户可以定制某些变量,其中比较重要的是BUILD_SHARED_LIBS,根据它的选择可以生成VTK的静态库或者动态链接库。如果编译成静态库,那么在开发应用程序时要将相应库代码加入可执行程序;如果是动态库,则可执行程序与动态链接库是分离的。用动态库的好处是可以减小主程序的体积,缺点是可执行程序不能独立运行。不过在有些情况下,因为某些专利算法在商业用途里只能授权使用,所以VTK提供的部分代码只能以动态链接库的方式使用,所以应该熟悉编译动态链接库的方法。其他较常见的重要变量有VTK_USE_PATENTED、VTK_USE_HYBRID等,编译时使它们打开开关,就可以编译出相应的库以便日后使用了。

图1

编译库

以下以Windows平台下的编译环境为例来说明使用方法,不再声明。

打开用CMake产生的.dsw文件,选择工程类型进行编译。工程类型主要分两类:Release和Debug,开发过程中一般用Debug,到发行时再用Release,所以在此用Debug即可。编译整个工程产生全部库,这个过程所需时间很长。编译完成后,会在CMake里面指定的目标目录内(如vtkbin)产生编译出的库文件(缺省在vtkbin/bin/Debug目录内)。

2在开发环境下使用VTK库

VTK库编译好了以后,就可以在VisualStudio开发环境下使用VTK库了。使用VTK库首先要设置头文件和库文件的路径,以便使用VTK库的程序在编译和链接的时候可以搜索到。头文件的位置即源代码的各个子目录,里面包含了大量的.h文件。将其路径加入到的Tools->Options->Directories内,如图2。注意除了源码的各个子目录外,还要加上一个文件的路径,它在CMake产生的目标目录内。库文件的设置与此类似,也在Directories页面进行,其路径是前述编译产生库文件的目录(如vtkbin/bin/Debug)。这样设置好路径以后,使用VTK库的程序就可以正确地编译和链接了。对于使用动态链接库的程序来说,此时还不能运行编译出来的可执行程序(.exe),还需要一步,即把VTK的动态链接库文件所在路径加入操作系统的环境变量PATH,或直接将这些库文件拷贝到系统目录。

图2

3VTK库编程特点

VTK库是用面向对象的C++语言写成的,由于主要开发者有着十数年涉及可视化系统的经验,所以VTK拥有非常合理的模型和结构。

VTK的编程风格在教科书的附录A,包括命名规范、术语定义、各类对象的用途说明等。值得注意的,比如它的对象工厂(ObjectFactory)概念。在VTK里,是用::New()的方式来初始化对象的,而不是用C++中的new来新建对象,对象工厂不仅可以做到代码与设备无关,而且通过引用计数(referencecounting),可以使程序清晰简明,不容易发生内存泄漏或崩溃的问题。

VTK中实现了数百个类及其方法,它们之间简化的继承和关联关系可以从教科书附录的图中看到。熟悉不同的类的用途和它们之间的关系,对编程十分有利。

对开发者来说,如何扩充这个类库是重要的,教科书的附录介绍了这个问题,而用户指南的开发者指南部分有一章来讲具体的做法。

4通过例子学习VTK概念及编程

要用VTK库进行可视化编程首先要对可视化要有一定的概念和基础。除了普通的可视化教科书以外,VTK提供的教科书本身就非常好。VTK源程序包的Example目录包括了一系列例子,它们都有详尽的注释。一步步学习这些例子,可以很容易理解VTK涉及的可视化概念和VTK编程的一般特点。

学习这些例子首先要成功编译运行它们。这个步骤跟编译库类似,也需要先用CMake工具生成VisualStudio的工程文件,然后编译;而要保证程序能正确运行,还得保证VTK库文件在环境变量的PATH内。

初学者应该从Tutorial目录内的Stepx例子入手,它们从最简单的VTK程序开始,一步步地增加概念,演示了各种可视化概念。注意例子里的注释,以第一个程序(Step1的Cone程序)为例,看一下源程序:

源程序:Example/Tutorial/Step1/Cxx/

Wecreateaninstanceof

.n)n个点的y值,形成n个离散点(x1,y1,....xn,yn),然后把这些点用连续的线段连接起来,构成要绘制的方程,用有限的离散点表现连续的空间,常用插值、二次、三次曲面、样条函数等算法对离散点进行处理。

2、数据的结构是规则(结构化)的或是不规则(非结构化)的

构成结构化数据的离散点之间具有一定的层次关系,如格网数据结构就是结构化的数据,离散数据点之间具有很强的逻辑关系,非结构化数据的离散点之间没有逻辑关系,常用于表现性质差异变化比较大的数据,如不均匀物体的密度等信息。

3、数据具有一定的空间尺度

VTK可视化的数据具有一定的空间尺度,如点表现为0维,一维的线、二维的面和三维的体等,对于不同维度的数据,VTK提供了不同的可视化方法。

二、数据集

在VTK可视化管线中的数据对象,称为数据集,数据集主要由组织结构和数据属性两部分组成,如下图所示:

组织结构主要有几何数据和数据之间的拓扑关系组成,拓普关系描述了数据之间的一种固定的构成关系,在VTK中,这种构成关系被称为单元,几何数据用空间位置坐标表示,描述了数据在空间的位置,也描述了数据拓扑空间关系,如TIN数据由多个三角形构成,三角形被称为单元,描述这些单元所在空间的数据点就是几何数据。属性数据主要描述几何数据或单元数据的相关属性信息,如在地质应用中,常用属性数据表示某一个空间位置点的地层。

在VTK应用中,数据集的构成是很重要的内容,只有了解了这些,才能更好的构建自己需要可视化的数据。

VTK教程之四单元和点集

VTK的数据集对象主要由多个单元构成,如对于如下的多边形网格,其由多个四边形单元构成。

图中的各个顶点(1、2、3...25)定义了网格图形的几何形状,构成了数据集的几何数据,各个顶点依照构建的单元类型,按一定顺序排列,相互连通,构成了单元的拓扑结构,如在上图中,构建的单元类型为四边形单元,则第一个单元由1、6、7、2四个顶点按1、6、7、2顺序排列,构成一个四边形单元。

下面再给出一个6面体类型单元的例子,如下图所示:

图中的6面体单元由7、21、22、5、8、10、1、6共8个顶点构成,共有6个面、12条边,顶点8和10构成了一条边,顶点8、10、21、22构成了一个面,顶点坐标存储在顶点列表数组中,如图中左侧的Pointlist用于存储顶点坐标。

在VTK中提供了许多单元类型,下面分别对这些单元进行介绍。

1、顶点单元

基本的0维度单元,用单一的点来定义,如下图所示:

2、多顶点单元

基本的0维度单元,用多个点来定义,如下图所示:

3、线单元

基本的1维单元,由两个顶点定义,线的方向从第一个顶点指向第二个顶点,如下图所示:

4、多义线单元

组合1维单元,由多条线组合而成,多义线由一系列按顺序排列的N+1个顶点构成,N表示线段的数目,每相邻的两个点构成一条线段,如下图所示:

5、三角形单元

基本的2维单元,由三个按逆时针顺序排列的顶点构成,三角面的法线方向遵循右手规则,如下图所示:

6、三角条带

组合的2维单元,由N+2个按顺序排列的点构成,N表示三角形的数目,每相邻的三个点构成一个三角形,如下图所示:

7、4边形单元

基本的2维单元,由按逆时针方向排列的位于同一平面上的4个顶点构成,构成的4边形必须是凸4边形,4边形形成的平面法线方向遵循右手规则,如下图所示:

8、像素单元

四边形单元的特例,是一个正方形单元,构成单元的4个边相垂直正交,如下图所示:

9、多边形单元

基本的二维单元,由N个逆时针排列的顶点组成,这N个顶点位于同一平面上。多边形表面的法线遵循右手规则,如下图所示:

10、四面体单元

基本的3维单元,由4个不共面的点组成,一个4面体有6个边和4个三角面,如下图所示:

11、六面体单元

基本的3维单元,8个不共面的顶点构成,该单元必须是凸的,如下图所示:

VTK除了提供这些基本的单元外,还提供了一些二维或三维的组合单元,这些组合单元可以分解为基本单元,如下图所示:

构成单元的顶点在3维空间中定义,而单元有不同的拓扑维度,如0维的点,一维的线,二维的三角形、三维的4面体单元等,由于决定单元的顶点定义在三维空间中,所以,不论哪种拓扑维度的单元,都可以在三维空间中定义,单元是构建数据集的基础,建立可视化的数据集时,首先需要考虑的是如何构建这种数据集的单元类型,例如,需要可视化一个多边形面时,可以考虑将多边形面进行三角剖分,构建多个三角单元,作为该多边形面的基本单元。

VTK教程之五数据集的类型和数据集的属性数据

在VTK中数据集的类型主要按构成数据集的几何数据和单元来划分,主要的数据集类型包括:结构化网格数据集、非结构化网格数据集、多边形数据集、结构化点集、线性网格数据集、非结构化点集等几大类,各类的表现形式如下图所示:

1、结构化网格数据集

结构化网格具有规则的拓扑结构和不规则的几何结构,但是单元没有重叠或交叉,结构化网格的单元是由四边形或六面体组成,结构化网格通常用于有限差分析,数据集构成如图所示:

2、非结构化网格数据集

非结构化网格集是最常见的数据集类型,它的拓扑结构的几何结构都是非结构化的,在此数据集中所有单元类型都可以组成任意组合,所以单元的拓扑结构从零维延伸至三维,在VTK中任一类型的数据集都可用非结构化网格来表达,非结构化网格被用于有限元分析、计算几何和图形表示等领域,数据集构成如图所示:

3、多边形数据集

在VTK中多边形数据集是由顶点、多顶点、线、多线、多边形各三角带构成,多边形数据是非结构化的,并且多边形数据集的单元在拓扑维度上有多种变化,顶点、线和多边形构成了用来表达0、1和2维几何图形的基本要素的最小集合,同时用多顶点、多线和三角形带单元来提高效率和性能,特别是三角形带用一个三角形带表达N个三角形只需要用N+2个点,但是用传统的表达方法需要用3N个点,数据集构成如图所示:

4、线性网格数据集

是排列在矩形方格中的点和单元的集合,线性网格的拓扑结构是规则的,但其几何结构只有一部分是规则的,也就是说,它的点是沿着坐标轴排列的,但是两点间的间隔可能不同,线性网格是由象素和三维象素组成的,它的拓扑结构通过指定网格的维数来隐式地表达,几何结构通过x,y,z坐标来表达。,数据集的构成如图所示:

6、结构化点集数据集

按规则排列的点的集合,点的排列和坐标轴平行,形成方形的点阵,下图所示:

7、非结构化点集

是指不规则地分布在空间的点集,非结构化点集具有不规则的几何结构,但不具有拓扑结构,非结构化点集用离散点来表达,通常,这类数据没有固定的结构,是由一些可视化程序识别和创建的,非结构化点集适合表现非结构化数据,为了实现数据的可视化,可将这种数据形式转换成其它一些结构化的数据形式,如图所示:

属性数据主要用于描述数据集的属性特征,属性数据常常和数据集的几何数据或单元数据相关联,对数据集的可视化实质上是对属性数据的可视化,例如,根据压力监测数据构建一个压力场可视化数据集后,数据集中的每个数据点(几何数据)或单元都必须有对应的属性数据,VTK根据属性数据设置颜色表,用不同的颜色表示不同的压力,通过颜色的变化情况,可以直观的分析出压力的变化趋势。

属性数据依据数据的性质可分为标量数据、向量数据、张量数据几大类,一般标量数据和向量数据应用的比较多,大部分的例子都以这两种数据为主。

1、标量数据

标量数据只表示数据的大小,例如温度、压力、高度等。

2、向量数据

既有大小又有方向的量,如速度、应力、位移等。

3、张量数据

张量是矢量和矩阵通过复杂的数学算法得到的,一个k阶的张量可当作一个k维的表格。零阶的张量是标量,一阶的张量是矢量,二阶的张量是纹理坐标,三阶的张量是一个三维阵列。

属性数据只能和数据集中的点及单元关联,对于构成单元的基本组成要素,如边和面等不能与数据属性关联,我们称与点关联的数据属性为点属性,与单元关联的数据属性为单元属性。

在VTK中用vtkPointData类和vtkCellData类表达数据集属性,它们是类vtkFieldData的子类,构成数据集的每个点(或单元)和属性数据之间存在一对一的关系,如一个数据集由N个点(或单元)构成,那么必须有N个属性数据和这N个点(或单元)一一对应,通过点的ID号就可以对该点的属性数据进行访问,例如在数据集aDataSet中访问ID号为129的点的标量值时(假设标量数据已被定义且不为空)使用如下方法:

aDataSet->GetPointData()->GetScalars()->GetScalar(129)。

VTK教程之六构建数据集的例子程序

本教程主要说明如何用VTK构建一个可视化的数据集,数据集主要由描述数据集几何形状的点集数据及构成数据集的单元构成,因此构建数据集的主要任务就是确定点集和构建单元,本示例程序构建了一个瓶子的实体,然后绘制瓶子,示例程序执行的步骤如下:

1、首先确定瓶子外轮廓的控制点,形成点集。

2、构建一个线单元。

3、构建多边形数据,把这些点集连接起来绘制一条线。

4、采用压制过滤器旋转轮廓线,构成瓶子的表面实体。

5、绘制瓶子

示例程序的代码如下:

headsqquarter");

7%,但死亡率下降了%。另外甲型H1N1流感的发病数是前年的170倍左

右。