VTK User\\'s Guide中文版(4)

2019-01-19 18:59

据流方法将信息变换成图形数据,在这个方法中涉及两个基本对象类型。

图3-3 与点集和单元数据集相关的数据属性

·vtkDataObject 数据对象 ·vtkProcessObject 处理对象

数据对象表示各种类型的数据,vtkDataObject可以看成是通用的“blob”数据(blob数据类型的列可以存储大型二进制对象,如图形、视频和声音等。具有正式结构的数据称为数据集(DataSet类)。图3-2表明VTK支持的数据集对象,图中数据集对象由几何和拓扑结构构成,以及与些相关的属性数据如尺度或向量。属性数据是与数据集相关的点和单元格。单元格是一种点的拓扑组织,格是数据集的原子,用来在点之间进行插值。图4-15表示VTK支持的各种单元格类型。图3-3显示VTK支持的属性对象。

处理对象,也即常指的滤波器,作用于数据对象产生新的数据对象。处理对象表示系统的算法。处理对象和数据对象通过可视化流水线相连(数据流网),图3-4就是可视流水线的描述。

该图和图3-5一起显示了一些重要的可视化概念。源处理对象靠读取(reader对象)或构造一个或更多数据对象(程序化源对象)。滤波器吸入数据对象,产生一个或更多数据对

象输出。我们前面见过的图形对象Mappers,将数据对象转换成图形对象,然后由图形对象来绘制。Writers是一种类型的映射器,将数据写入一个文件或流中。

图3-4 数据对象和处理对象相连产生可视化流水线,箭头所指是数据流向

关于构建可视化流水线有一些重要的问题,简要在这里介绍一下。首先,流水线拓扑结构由方法变化而构成

A Filter->SetInput (anotherFilter->GetOutput());

这些方法将一个过滤器的输出作为另一个过滤器的输入(具有多输入和输出的过滤器类似)。其次,必须建立一个机制来控制流水线的执行,仅执行那些流水线的必要部分,产生输出的更新。可视化工具箱使用一个懒评估方案(当数据被请求时才执行),依据每个对象内部修改时间。第三,流水线组装仅需要那些兼容的对象,使用SetInput() 和GetOutput()方法能与其它对象很好地结合在一起。在VTK中,C++编译时类型检查强迫做到这一点。最后,我们必须决定一旦流水线执行,数据对象是否需要缓存或保留。由于可视化数据集相当大,如何成功应用VTK工具相当重要。VTK提供了将数据缓存开或关的方法,使用计数参数来避免拷贝数据,以及当整个数据不能装入内存时将数据流分块的方法(建议参考第四章可视化工具箱内容获得更多的信息)。

图3-5 多输入和多输出

请注意,处理对象和数据对象都有很多变化,图11-2 显示了VTK当前版本支持的6种不同对象类型。处理对象在输入和输出之间变化,当然实现的是特殊算法。

流水线执行

前面我们讨论了流水线执行,本节将拓宽对流水线执行一些重要概念的理解。如前所示,当需要计算时流水线才执行,例如你初始化一个读对象,想得到点的数目

读对象将从调用的GetNumberOfPoints()方法返回“0”,尽管数据文件包含了上千个点。然而,如果你加入Update()方法

读对象就会返回正确的点数。因为第1个例子GetNumberOfPoints()方法,没有要求计算,因此返回点数为“0”。第2个例子中,Update()方法迫使读入器执行,从文件中读入数据。

图3-6 流水线执行概念总览

通常不必须手工调用Update(),因为过滤器与可视化流水线相连。在这种情况下,当演员收到一个需要绘制自己的请求时,它会朝着它的映射方法,Update()方法会自动被送到流水线。流水线的执行从高处开始,如图3-6所示,绘制方法经常会初始化所需数据,这些数据通过流水线向下传送,由于流水线部分过时,流水线过滤器重新执行,导致流水线末端数据更新,然后由演员来进行绘制。(想得到更多执行处理信息,参见第十章管理流水线执行,219页)。

图像处理

VTK支持广泛的图像处理和体素绘制功能,2D(图像)和3D(体素)数据均看成是vtkImageData,VTK的图像数据集是一个规则的、轴向排列的数组。图像、像素映射、位图都是2D图像数据集例子,体素(2D图像堆积)就是3D图像数据集。

在图像流水线中的处理对象的输入和输出均是图像处理对象,由于数据特性相对规则和简单,图像流水线有一些其它的重要特性。体绘制用来可视化3D vtkImageData(见36页),特殊的图像浏览器 观察2D图像。图像流水线中几乎所有的处理对象都是多线程,具有数据流分片能力(以满足用户特殊的内存局限)。滤波器自动感知系统处理器的数目,在运行过程中产生多线程数,自动将通过流水线的数据分片(参见使用流232页)。

本章简要介绍了可视化系统设计,建议读者详细了解VTK中许多算法细节。通过例子来学习是一种很好的方法,第4-8章包含许多带注释的例子,展示VTK各种功能,希望读者研究源代码以及数百个例子。

3.2 创建一个应用

这部分包含使用Tcl、C++、Java和Python语言开发VTK程序(Kitware使用VB或ActiveX/COM创建的VTK商业产品,参见38页)。读过介绍以后,应该跳到所感兴趣语言的子部分。除了为你提供指令来创建和运行一个简单程序以外,每部分将演示如何在该语言中进行调用。

用户方法,观察者和命令

调用(用户方法)在VTK中使用Subject/Observer和Command设计格式来实现。这意味着VTK中每一个类(每个vtkObject子类)都有一个AddObserver()方法,可能从VTK中建立调用。观察者观看每一个调用对象的事件,如果它观察者观察的事件之一匹配,相关的命令就会被调用。例如,所有滤波器在开始执行前都调用StartEvent,如果加入了一个观察StartEvent观察者,那么它会在滤波器每次开始执行时被调用。考虑下列Tcl 脚本产生一个vtkElevationFilter,为StartEvent加入一个观察者,调用程序PrintStatus。

所有VTK支持语言都有这种功能。下面每一部分有一个小例子来说明如何使用它。进一步关于用户方法的讨论,请参见303页“用窗口系统来集成”。要产生自己的应用程序,建议你从VTK的例子着手,它们在VTK/Example源代码布置和以及PC机可执行布置的子目录中。在源代码布置中,例子是按先题目后语言来组织的。 Tcl

Tcl是创建VTK应用程序最容易的语言之一,一旦安装了VTK,就可以与布置一起来运行Tcl例子。在Windows下,可以安装自我解压文档,见8页“在Windows 9X/NT/ME/2000/XP”。

Microsoft Visual C++

你为Cone例子运行了CMake以后,就可以启动Microsoft Visual C++,装载Cone.dsw,选择创建类型(Release 或 Debug),创建应用程序。如果想将VTK集成到已有的不使用CMake的工程中,可以从简单例子中拷贝设置到存在的工作区中。现在考虑一个真实的 Windows应用程序,这个过程类似于上面的例子,只是创建的是Windows应用程序,而不是控制台程序。大多数代码是标准的Windows代码,对于任何Windows开发工具都是合适的。这个例子位于Examples/GUI/Win32/SimpleCxx,只有CMakeLists.txt文件中的命令行ADD_EXECUTABLE的WIN32参数有所不同。

我们从包含必要的VTK include文件开始,无须包含标准的windows头文件,因为VTK头文件已经包含它们。接下来,在两个标准的windows原型后定义一个小型的myVTKApp类。当使用C++开发时,应该使用面向对象方法而不是许多Tcl例子中的脚本编程风格。这里我们将VTK应用程序组件封装到这个小类中。


VTK User\\'s Guide中文版(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2002年1月自考中英合作会计学试题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: