本章提供的信息使构建VTK应用程序和类的工作更容易一些。当你想要一个系统中对象的概览时,对象图是有用的;它们以称为对象建模图的符号形式包含在这里。我们在这里使用的图被简化为主要显示继承,但也显示了类之间的一些关联。提供了简洁的过滤器描述,以帮助您找到正确的过滤器来完成手头的工作。本章还记录了VTK遗留和XML文件格式。
19.1对象图
下面的部分包含使用OMT图形语言的简化对象图。本节的目的是传达软件结构的本质,特别是继承和对象关联。由于空间限制,并不是所有的对象都显示出来,特别是“叶子”(即继承树的底部)对象。相反,我们选择一个叶子对象来表示其他兄弟对象。(在线文档中提供了VTK中所有类的对象图。)对象的组织遵循大纲的组织。
基本原理
基础对象示意图如图19-1所示。它们表示核心数据对象以及其他对象操作类。
单元格
单元格对象图如图19-3所示。目前,有21种混凝土单元类型在
VTK。特殊类vtkGenericCell用于表示任何类型的单元格(即,支持线程-安全vtkDataSet::GetCell()方法)。类vtkEmptyCell用于指示已删除或NULL单元格的存在。
数据集
数据对象图如图19-2所示,数据集对象图如图19-2所示
19-4。目前,支持六种具体的数据集类型。可以表示非结构化的点数据通过vtkPointSet的任何子类。vtkImageData以前是vtkStructuredPoints,表示
二维图像和三维体数据。
拓扑和属性数据
拓扑和属性数据对象的对象图如图19-5所示。这些是表示数据的核心对象。
- 管道
VTK流水线架构中类的对象图如图19-6所示。这包括执行对象和信息对象。
来源和过滤器
源与过滤对象关系图如图19-7所示。
- 映射器
映射器对象示意图如图19-8所示。基本上有两种类型:将可视化数据映射到图形系统的图形映射器和将数据写入输出文件(或其他文件)的写入器
I / O设备)。
小部件和交互样式
VTK提供了一套广泛的交互式小部件和交互样式。小部件可能以响应用户交互的2D或3D道具(称为表示)的形式出现在场景中。请注意,交互样式类似于小部件,只是没有表示与交互器相关联(交互器通常用于控制摄像机)。部件和交互样式对象图如图19-9所示。
- 图形
图形对象图如图19-10所示。图已被扩展,以包含与系统中对象的一些关联。如果您不熟悉面向对象图形符号,请参阅Rumbaugh等人的《面向对象建模与设计》。
- 体绘制
体绘制类层次结构如图19-11所示。
结构化体绘制的层次结构如图19-12所示,非结构化网格体绘制的层次结构如图19-12所示
图19-13。注意,VTK的体渲染过程支持混合体、表面和注释。只要确保表面几何形状是不透明的。
- 影像学
成像对象示意图如图19-14所示。成像通过vtkImageData数据集与图形管道集成。此外,可以通过vtkRendererSource或vtkWindowToImageFilter对象从渲染器捕获图像,然后将图像馈送到成像管道中。
- 类的构建
OpenGL渲染器对象图如图19-15所示。注意,在VTK中还有其他渲染库。OpenGL对象图是这些其他库的代表。
拾取类
拾取类的层次结构如图19-16所示。vtkPropPicker和vtkWorldPointPicker是最快的(基于硬件的)选择器。所有选择器都可以从渲染窗口中的选择点返回全局x-y-z。vtkCellPicker使用软件光线投射来返回关于单元格的信息(单元格id,交点的参数坐标)。vtkPointPicker返回一个点id。vtkPropPicker指示选择了vtkProp的哪个实例,并返回选择坐标。
- 变换层级
VTK提供了广泛的、强大的转换层次结构。这个层次结构支持线性、非线性、仿射和齐次转换。转换对象图如图19-17所示。
19.2过滤器概述
在本节中,我们提供VTK滤波器的简要总结。本节分为三个部分:源对象的概述、成像过滤器的列表和可视化过滤器的描述。用于与数据交互的类(即,读取器、写入器、导入器和导出器)将在第12章中描述
第239页的"读写数据"
- 来源物体
在本节中,我们提供源对象的简要描述。源对象启动可视化管道。注意,这里没有列出读取器(读取文件的源对象)。相反,找到他们第12章,读和写数据,在239页。每个条目都包含一个简短的描述,包括它生成的输出类型。
•vtkArrowSource -生成一个箭头的多边形表示。
•vtkAxes -创建三条正交线,形成一组x-y-z轴。(参见第65页的“3D Text Annotation and vtkFollower”)
•vtkBooleanTexture -基于隐式函数定义的区域边界的内部,外部或区域边界的组合创建2D纹理地图(结构化点)。
•vtkConeSource -生成锥体的多边形表示。(参见第94页的“字形”)
•vtkCubeSource -生成立方体的多边形表示。
•vtkCursor3D -生成一个3D光标(显示一个边界框和三条相交的线)给定的边界框和焦点。
•vtk圆柱体源-生成一个多边形表示的圆柱体。(参见第42页的“过程源对象”)
•vtkDiskSource -生成一个多边形表示的磁盘在中心有一个洞。
•vtkEarthSource -生成地球作为球体的多边形表示。
•vtkEllipticalButtonSource -创建一个椭球形状的3D按钮。
•vtkGlyphSource2D -生成二维字形的多边形表示。
•vtkImageCanvasSource2D -创建一个图像绘制到它与原始形状。(参见第126页的“ImageCanvasSource2D”)
•vtkImageEllipsoidSource -创建一个椭球分布的图像。(见“图像逻辑”第132页)
•vtkImageGaussianSource -创建一个高斯分布的图像。
•vtkImageGridSource -创建一个轴对齐网格的图像。
•vtkImageMandelbrotSource -创建一个曼德布洛特集的图像。
•vtkImageNoiseSource -创建一个图像填充随机,均匀的噪声。
•vtkImageSinusoidSource -创建一个图像的正弦值计算指定周期,相位,幅度和方向。(见第128页的“ImageSinusoidSource”)
•vtkLineSource -创建一条折线,具有线段的分辨率,由两个端点定义。(见“流表面”在第97页)
•vtkMILVideoSource -矩阵成像库帧捕获器。
•vtkOutlineCornerSource -为用户指定的边界框创建线框轮廓角(类似于vtkOutlineCornerFilter,但明确指定一个边界框,而不是指定一个输入数据集,从中确定一个边界框)。
•vtkOutlineSource -在用户指定的边界框周围生成线框轮廓(类似于vtkOutlineFilter,但明确指定一个边界框,而不是指定一个输入数据集,从中确定一个边界框)。
•vtkparameterfunctionsource -镶嵌一个给定的参数函数(指定为vtkparameterfunction的子类)。
•vtkPlaneSource -通过指定平面的三个角和分辨率(在X和Y),生成平面上的四边形数组。
•vtkPlatonicSolidSource -生成五个柏拉图体(四面体、立方体、八面体、二十面体和十二面体)的多边形表示。
•vtkPointLoad -从半无限域上的点负载生成张量场。
•vtkPointSource -生成指定半径内的点的随机云。
•vtkProgrammableDataObjectSource -一个过滤器,可以在运行时编程读取或生成一个vtkDataObject(即,一个字段)。(见“工作与字段数据”在249页)
•vtkProgrammableSource -一个过滤器,可以在运行时编程读取或生成任何类型的vtkDataSet。(参见“曲面从无组织点”在224页)
•vtkPSphereSource -一个子类的vtkSphereSource,可以处理请求的一块数据。
•vtkRectangularButtonSource -创建一个矩形的3D按钮。
•vtkRegularPolygonSource -创建一个规则的,n边多边形和/或折线。这对于播种流线或定义裁剪/切割区域很有用。
•vtkRendererSource -一个将渲染器或渲染窗口带入成像管道的成像过滤器(非常适合屏幕捕获)。
•vtkRTAnalyticSource -产生一个图像数据集,其像素/体素值由函数Maximum*Gaussian + XMag*sin(XFreq*X) + YMag*sin(YFreq*Y) + ZMag*cos(ZFreq*Z)确定。
•vtkSampleFunction -评估一个隐式函数在一个卷。(参见第103页的“提取细胞子集”)
•vtkSphereSource -生成球体的多边形表示。(见“vtkDelaunay2D”在第218页)
•vtkSuperquadricSource -生成超二次曲面的多边形表示。
•vtkTextSource -创建输入文本的多边形表示。
•vtkTexturedSphereSource -创建一个多边形表示的球体与相关的纹理坐标。
•vtkTransformToGrid -采样用户指定的转换到3D统一网格。
•vtkTriangularTexture -生成一个三角形的2D纹理图。
•vtkVectorText -创建文本的多边形表示。(见“转换数据”在第70页)
•vtkVideoSource -抓取视频信号作为图像。
•vtkWin32VideoSource -视频为windows视频数字化。
•vtkwindowtoimageffilter -捕获vtkWindow的内容作为输入到图像管道。(参见第247页的“保存图像”。)
成像过滤器
在本节中,我们提供了一个简单的总结成像滤波器。请注意,其他可视化过滤器的描述可以在第455页的“可视化过滤器”中找到。用于与数据交互的类在第239页的第12章“读写数据”中描述。
这里描述的所有过滤器都采用vtkImageData(或过时的vtkStructuredPoints)作为输入,并且通常产生相同类型的输出。
•vtkClipVolume -剪辑一个卷与隐式的功能,以产生一个四面体网格。
•vtkDiscreteMarchingCubes - vtkMarchingCubes的子类,(如果计算标量)将存储输出标量值作为以单元为中心的数据。
•vtkExtractVOI -提取感兴趣的卷(卷的子集)和/或对卷进行子采样。
•vtkGreedyTerrainDecimation -用三角形网格(三角不规则网络- TIN)近似高度场。(见222页的“高斯飞溅”)
•vtkImageAccumulate -生成输入图像的直方图。(见第132页的“直方图”。)
•vtkImageAnisotropicDiffusion2D -迭代地应用一个2D扩散过滤器来执行边缘保持平滑。
•vtkImageAnisotropicDiffusion3D -迭代应用3D扩散过滤器来执行边缘保持平滑。
•vtkImageAppend -合并多个输入图像到一个输出图像;它们将沿着用户指定的轴进行连接。
•vtkImageAppendComponents -从两个输入图像合并组件;生成的图像将包含来自这两个图像的所有组件。
•vtkImageBlend -根据alpha值和/或每个输入的不透明度设置组合多个图像的组件;每个输入图像的组件数量必须匹配,并且输出图像也将具有此数量的组件。(见“ImageGridSource”在127页)
•vtkImageButterworthHighPass -应用频域高通滤波器。
•vtkImageButterworthLowPass -应用频域低通滤波器。
•vtkImageCacheFilter -缓存(存储)图像以备将来使用,以避免管道重新执行。
•vtkImageCast -通过从输入标量类型转换到用户指定的输出标量类型来改变图像的标量类型。(见“转换标量类型”在第128页)
•vtkImageChangeInformation -修改间距,原点,或数据的范围,而不改变数据本身。(见“改变间距,原点,或范围”在第129页)
•vtkImageCheckerboard -显示两个图像一次使用棋盘图案。
•vtkImageCityBlockDistance -创建一个距离地图(距离最近的0值像素/体素)使用城市街区(或曼哈顿)度量(即,沿着像素/体素边缘,从不通过一个单元的中间步进)。
•vtkImageClip -减少输入图像的大小(范围)。
•vtkImageConstantPad -改变图像的范围,将原始范围之外的任何像素设置为恒定的用户指定值。
•vtkImageContinuousDilate3D -评估椭球体邻域的最大值。
•vtkImageContinuousErode3D -评估椭球体邻域的最小值。
•vtkImageConvolve -卷积的图像与内核。
•vtkImageCorrelation -创建两个输入图像的相关图像。
•vtkImageCursor3D -添加一个光标到输入图像,修改光标覆盖的像素/体素。
•vtkImageDataGeometryFilter -提取几何(点,线,平面)作为vtkPolyData。(见“基于标量值的Warp”在122页)
•vtkImageDataStreamer -启动流图像数据;为了满足对数据的请求,此过滤器对其输入多次调用Update(),每次请求不同的数据片段。当操作无法存储在内存中的大型数据时,这非常有用,因为过滤器需要在此图像/卷数据上操作所需的所有附加信息。(参见第127页的“ImageNoiseSource”。)
•vtkImageDifference -生成两个图像的差异图像/误差值。
•vtkImageDilateErode3D -增加一个标量值的区域的大小,同时减少区域的大小与另一个标量值沿着两者之间的边界。
•vtkImageDivergence -创建一个标量场,表示输入矢量场的变化率。
•vtkImageDotProduct -从两个矢量图像创建一个点积图像。
•vtkImageEuclideanDistance -创建一个距离图(即距离最近的0值像素/体素)3D欧几里得距离(即直线距离)。
•vtkimageeuclideantpolar -转换二维欧几里德坐标到极坐标。
•vtkImageExport -将vtkImageData中的数据传递给C编程语言数组,为应用程序提供对内存中图像数据的直接访问。这与vtkImageImport相反。
•vtkImageExtractComponents -提取输入图像的组件的子集。
•vtkImageFFT -执行快速傅里叶变换(即,从空间变换到频域)。
•vtkImageFlip -翻转关于指定轴的图像(即,右变为左等)。
•vtkImageFourierCenter -将零频率从原点移动到中心。
•vtkimagegaussianssmooth -执行1D, 2D或3D高斯卷积平滑输入图像。(见“高斯平滑”133页)
•vtkImageGradient -计算梯度矢量在2D或3D的每个点的图像;矢量结果作为标量分量存储在输出图像中。
•vtkImageGradientMagnitude -类似于vtkImageGradient,但图像中每个点的梯度矢量的大小存储在输出图像中。
•vtkImageHSIToRGB -将使用HSI(色调,饱和度,强度)颜色模型存储的图像转换为RGB(红,绿,蓝)模型。
•vtkImageHSVToRGB -转换图像存储使用HSV(色调,饱和度,值)的颜色模型到RGB(红,绿,蓝)之一。
•vtkImageHybridMedian2D -执行中值(中间值)过滤器,同时保留线/角。
•vtkImageIdealHighPass -执行一个简单的频域高通滤波器。
•vtkImageIdealLowPass -执行一个简单的频域低通滤波器。
•vtkImageImport -从C编程语言数组中的数据创建vtkImageData。这与vtkImageExport相反。
•vtkImageIslandRemoval2D -从图像中删除具有指定值的小集群。
•vtkImageLaplacian -计算拉普拉斯(梯度散度)。
•vtkImageLogarithmicScale -对每个像素执行log函数。
•vtkImageLogic -执行逻辑操作:AND, OR, XOR, NAND, NOR, NOT;前四个操作需要两个输入图像;最后两个只需要一个。
•vtkImageLuminance -计算RGB图像的亮度(亮度= 0.3*R + 0.59*G + 0.11*B)。(参见第132页的“图像亮度”)
•vtkimagemamplify -通过整数比例因子增加图像的大小。
•vtkImageMagnitude -从输入图像的标量分量计算一个大小图像。(见“梯度”133页)
•vtkImageMapToColors -映射单一组件的图像通过查找表。
•vtkImageMapToWindowLevelColors -通过查找表和窗口/级别映射单组件输入图像(即,根据(S - (L - W/2)) / W调制查找表的颜色,其中S是标量值,L是级别值,W是窗口值)。这允许您突出显示指定范围内的标量。(参见第131页的“将图像映射到颜色”)
•vtkImageMarchingCubes -行进立方体的流媒体版本。
•vtkImageMask -结合一个蒙版图像与输入图像。如果掩码像素不为零,则输出像素与输入相同;如果掩码像素为零,则输入像素设置为用户指定的“掩码值”。
•vtkImageMaskBits -指定四个无符号整型值,并使用它们来计算每个输入像素的每个组件的按位逻辑操作(每个组件一个无符号整型值)。
•vtkImageMathematics -应用基本的数学运算到一个或两个图像。(见135页的“图像数学”)
•vtkImageMedian3D -计算矩形邻域的中值(中间值)滤波器。
•vtkimagemirorpad -改变图像的范围;在其边界处镜像原始图像,以填充原始范围外的像素。
•vtkImageNonMaximumSuppression -设置非最大(即,不是峰值)像素值为0。
•vtkimagnormalize -归一化由图像的标量分量定义的向量。
•vtkImageOpenClose3D -执行打开或关闭(图像形态学操作)使用两个扩张/侵蚀操作。
•vtkImagePermute -重新排序一个图像的轴;使用SetFilteredAxes()来指定X、Y和Z轴应该如何重新标记。
•vtkImageQuantizeRGBToIndex -从RGB(红色,绿色,蓝色)图像,创建索引图像和查找表。当通过查找表传递输出图像中的索引时,将返回输入图像的相应RGB值。这个过滤器不支持流,因为它必须在整个图像上操作。
•vtkImageRange3D -计算范围(最大-最小)在椭球体邻域。
•vtkImageRectilinearWipe -使两个图像的直线组合。
•vtkImageResample -重新采样图像,以增加或减少其大小。(参见第159页“速度与精度的权衡”。)
•vtkImageReslice -排列,旋转,翻转,缩放,重新采样,变形,和/或垫图像数据的任何组合与合理的高效率。
•vtkImageRFFT -执行反向快速傅里叶变换(即从频率到空间域的变换)。
•vtkImageRGBToHSI -将使用RGB(红,绿,蓝)颜色模型存储的图像转换为HSI(色调,饱和度,强度)之一。
•vtkImageRGBToHSV -转换图像存储使用RGB(红,绿,蓝)的颜色模型到HSV(色调,饱和度,值)之一。
•vtkImageSeedConnectivity -标签区域连接到用户指定的种子像素/体素与指定的值。
•vtkImageSeparableConvolution -计算三个,一维卷积的图像(沿每个X, Y和Z轴)。
•vtkImageShiftScale -将输入图像的标量值移位指定的量,然后将它们乘以指定的比例值。(见“转换标量类型”在第128页)
•vtkImageShrink3D -收缩(减少范围)的图像上的均匀网格上的子采样。
•vtkImageSkeleton2D -在2D中执行骨架操作。
•vtkImageSobel2D -计算一个图像的矢量场显示梯度的强度在每个像素使用索贝尔函数。
•vtkImageSobel3D -计算一个体积的矢量场,显示在每个体素使用索贝尔函数的强度梯度。
•vtkImageStencil -通过cookie-cutter操作组合图像。
•vtkImageToImageStencil -将vtkImageData转换为可以与vtkImageStencil或其他VTK类一起使用的图像,将模板应用于图像。
•vtkImageToPolyDataFilter -将图像转换为多边形。
•vtkImageThreshold -执行二进制或连续阈值,用用户指定的值替换符合或不符合阈值标准的标量值。
•vtkImageTranslateExtent -移动整个范围,但不改变数据,类似于vtkImageChangeInformation。
•vtkImageVariance3D -计算椭球体邻域内方差的近似值(即,邻域中每个像素/体素与中心像素/体素值之间的差的平方的平均值)。
•vtkImageWrapPad - pad图像使用一个mod操作的像素索引,使原始图像平铺在新图像。
•vtkLinkEdgels -链接的边缘在一起形成数字曲线。
•vtkMarchingCubes -高性能等高轮廓算法。(见“使用数据属性”在第89页)
•vtkMarchingSquares -在2D高性能等高轮廓算法。
•vtkMemoryLimitImageDataStreamer -一个子类的vtkImageDataStreamer,确定使用基于用户指定的内存限制流的片数。
•vtkRecursiveDividingCubes -生成等高线作为点的云。
•vtkSimpleImageFilterExample -只是复制输入图像到输出;作为成像滤光器的简单示例提供。它的超类vtkSimpleImageToImageFilter隐藏了vtkImageAlgorithm的许多复杂性。(见“一个简单的成像滤波器”在399页)
•vtkSynchronizedTemplates2D -在2D高性能等高轮廓算法。
•vtkSynchronizedTemplates3D -在3D高性能等高轮廓算法。
•vtkSynchronizedTemplatesCutter3D -从图像/体积数据集生成切割表面(通过指定切割函数)。
- 可视化过滤器
下面列出的类按照它们输入的数据类型进行组织。每个类都包含对其功能的简要描述以及关于多个输入或输出的任何特殊符号。
输入类型vtkDataSet。这些过滤器将处理任何类型的数据集(即vtkDataSet的子类)。
•vtkAppendFilter -将一个或多个数据集附加到单个非结构化网格中。
•vtkArrayCalculator -对字段数据数组中的数据执行数学运算。
•vtkAssignAttribute -标记数据数组作为属性(标量,向量等)。
•vtkAttributeDataToFieldDataFilter -将属性数据(点或单元格)转换为字段数据。
•vtkBoxClipDataSet -生成一个非结构化网格数据集,仅由包含在用户指定框中的单元格(和单元格的片段)组成。
•vtkBrownianPoints -分配随机向量点。
•vtkCastToConcrete -将抽象类型的输入(例如,vtkDataSet)转换为具体形式(例如,vtkPolyData)。(见“提取部分网格”在第115页)
•vtkCellCenters -生成点(vtkPolyData)标记单元中心。vtkCellDataToPointData -将单元格数据转换为点数据。(见“使用数据属性”在89页)
•vtkCellDerivatives -计算标量和向量的导数。
•vtkClipDataSet -通过任意vtkDataSets的单元格切割,返回包含在用户指定的隐式函数中的所有内容(或具有大于指定的标量值)。
•vtkConnectivityFilter -提取几何连接的细胞到一个非结构化的网格。(见“提取细胞作为多边形数据”在第104页)
•vtkContourFilter -生成等值面(s)。(见第93页的“轮廓”)
•vtkCutMaterial -计算(材料,阵列)对的切割平面。
•vtkCutter -从n维数据集生成n-1维切割面。(见第98页的“切割”部分。)
•vtkDashedStreamLine -生成一个流线与破折号表示经过的时间。(虽然这是vtkStreamer的子类,vtkStreamTracer不复制其功能)
•vtkDataSetSurfaceFilter -从数据集提取表面几何(vtkGeometryFilter的更快版本,但选项更少)。
•vtkDataSetToDataObjectFilter -将数据集转换为一般数据对象。
•vtkDataSetTriangleFilter -三角测量任何类型的数据集。•vtkDicer -用于基于空间(或其他)隔离生成数据值的抽象超类。
•vtkDistributedDataFilter -在并行应用程序中的处理器之间重新分配数据到空间连续的非结构化网格数据集。这个过滤器有时被称为“D3”,即“分布式数据分解”。
•vtkDistributedStreamTracer -通过集成跨处理器分布的数据集的矢量场来生成流线。
•vtkEdgePoints -沿单元格边缘生成点,相交等值面。
•vtkElevationFilter -根据沿矢量的投影生成标量。
•vtkExtractEdges -提取数据集的单元格边缘作为线条。(见“vtkDelaunay2D”在218页)
•vtkExtractGeometry -提取细胞,无论是完全在内部或外部的隐式函数。
•vtkExtractTensorComponents -提取张量的分量作为标量,向量,法线,或纹理坐标。
•vtkExtractVectorComponents -提取矢量的分量作为单独的标量。
•vtkFieldDataToAttributeDataFilter -将一般字段数据转换为点或单元格属性数据。
•vtkGaussianSplatter -生成一个标量场在一个体积飞溅点(注入点到一个体积,分布值到附近的体素)与椭圆,高斯分布。(见“高斯飞溅”222页)
•vtkGeometryFilter -从数据集提取表面几何形状,并将输出存储为vtkPolyData。(见“提取细胞作为多边形数据”在第104页)
•vtkGlyph2D -一个2D专业化的vtkGlyph3D。字形的平移、旋转和缩放限制在x-y平面上。
•vtkGlyph3D -复制一个多边形字形(第二个输入到过滤器定义字形)到(第一个)输入的每个点。
•vtkHedgeHog -从相关的向量场在每个点生成缩放和定向的线(基本上是vtkGlyph3D的专业化)。
•vtkHyperStreamline -使用张量数据生成流管;根据特征向量对管截面进行翘曲。
•vtkIdFilter -从整数点或单元格id值生成标量或字段数据(用于绘图)。(见第68页“标签数据”。)
•vtkimplicitmodeler -通过计算从输入几何到图像/体积数据集点的距离来生成距离场。
•vtkimplicittexturecords -基于隐式函数创建纹理坐标。
•vtkInterpolateDataSetAttributes -在两个数据集之间插值点和细胞为中心的属性数据(标量,向量等)(对动画有用)。
•vtkMarchingContourFilter -从标量值生成等值面/等值线。这个过滤器调用vtkMarchingSquares, vtkMarchingCubes, vtkImageMarchingCubes或vtkContourFilter(取决于输入数据集的类型)来执行轮廓。
•vtkMaskFields -允许控制哪些字段被传递到输出。
•vtkMaskPoints -选择输入点的子集。此过滤器通常与vtkGlyph3D一起使用,以限制生成的字形数量。
•vtkMergeDataObjectFilter -合并一个数据对象和数据集,形成一个新的数据集(用于合并单独存储的数据作为几何和解决方案文件)。
•vtkMergeFields -合并组件从多个数组(所有在一个单元格数据,点数据,或一般字段数据),以形成一个新的数组。
•vtkMergeFilter -合并数据组件(例如,几何,标量,矢量等)从不同的数据集到一个单一的数据集。(参见“合并数据”在99页)
•vtkMeshQuality -计算四面体网格的几何质量。
•vtkOBBDicer -使用定向边界框划分数据集。
•vtkOutlineCornerFilter -为任意输入数据集创建线框轮廓角(类似于vtkOutlineCornerSource,但使用数据集的边界框)。
•vtkOutlineFilter -在输入数据集周围创建线框轮廓(类似于vtkOutlineSource,但使用数据集的边界框)。(见“探测”在第100页)
•vtkPassThroughFilter -过滤器浅拷贝其输入到输出。
•vtkPCellDataToPointData - vtkCellDataToPointData的子类,可以对数据块进行操作并产生块不变的结果。
•vtkPointDataToCellData -转换点数据到单元格数据。(见“使用数据属性”第89页)
•vtkOutlineCornerFilter -执行vtkOutlineCornerFilter跨进程分布的多边形数据的功能。它确保轮廓角是围绕整个数据集的边界框的角绘制的,而不是围绕每个数据块的边界框的角绘制的。
•vtkPProbeFilter -一个并行版本的vtkProbeFilter。
•vtkProbeFilter -探针,或重新采样,一个数据集与另一个。
•vtkProcessIdScalars -在一个点或单元标量数组中存储包含该部分数据的进程的进程id。这对于可视化地显示跨处理器的数据分区非常有用。
•vtkProgrammableAttributeDataFilter -一个运行时可编程过滤器,对数据属性进行操作。
•vtkprogramablefilter -一个运行时可编程过滤器。
•vtkprogramableglyphfilter -一个运行时可编程过滤器,可以根据数据值生成任意变化的字形。
•vtkProjectedTexture -生成纹理坐标投影到任意表面。
•vtkRearrangeFields -移动和/或复制数据数组(字段)之间的一般字段数据,点数据,和单元格数据。(见“工作与现场数据”在249页)
•vtkReflectionFilter -反映一个数据集跨越一个平面。
•vtkSelectVisiblePoints -选择可见点的子集;隐藏点被剔除(不传递到输出)。(参见第68页的“标记数据”)
•vtkShepardMethod -将一组点重新采样到卷中。
•vtkShrinkFilter—通过将每个单元格的顶点移动到该单元格的质心(顶点的平均位置)来收缩数据集的单元格;这导致细胞彼此分离。(见“提取子集的细胞”在103页)
•vtkSimpleElevationFilter -从点与用户指定向量的点积生成标量。
•vtkSpatialRepresentationFilter -创建一个空间搜索(即定位器)对象的多边形表示。
•vtkSplitField -将多组件字段(数据数组)拆分为多个单组件字段。
•vtkStreamer -抽象超类执行矢量场粒子积分。弃用;使用vtkStreamTracer和它的子类代替。
•vtkStreamLine -从矢量场生成流线。弃用;使用vtkStreamTracer和它的子类代替。
•vtkStreamPoints -从矢量场沿流线生成一组点。弃用;使用vtkStreamTracer和它的子类代替。
•vtkStreamTracer -通过整合矢量场生成流线。
•vtksurfacerconstructionfilter -从无组织的点构建一个表面。(参见“曲面从无组织点”在第224页)
•vtktensorglyyph -生成基于张量特征值和特征向量的字形。
•vtktexturemapto圆柱体-通过将数据投影到圆柱体上生成二维纹理坐标。
•vtkTextureMapToPlane -通过将数据投影到平面上生成二维纹理坐标。
•vtkTextureMapToSphere -通过将数据投影到球体上生成二维纹理坐标。
•vtkThreshold -提取标量值低于、高于或介于阈值范围之间的单元格。(见“使用数据属性”在89页)
•vtkThresholdPoints -提取点的标量值位于以下,以上,或在阈值范围之间。
•vtkthresholdtexturecords -基于满足阈值标准计算纹理坐标。
•vtktransformtexturecords -转换(例如,缩放,移动等)纹理坐标。(参见“生成纹理坐标”在第111页)
•vtkVectorDot -存储从向量和法线之间的点积计算的每个点的标量。
•vtkVectorNorm -计算标量从向量的欧几里得范数。
•vtkvoxelmodeleller -将任意数据集转换为体素(图像/体积)表示。这个过滤器类似于vtkimplicitmodeler,但是它存储占用而不是距离。
输入类型vtkPointSet。这些过滤器将处理vtkPointSet子类的数据集。(这些类显式地表示他们的点与实例vtkPoints。)
•vtkDelaunay2D -创建约束和非约束Delaunay三角形包括alpha形状。(见“vtkDelaunay2D”在第218页)
•vtkDelaunay3D -创建三维Delaunay三角剖分包括alpha形状。(见“vtkDelaunay3D”221页)
•vtkextractdata加班-从指定点id的时间序列中提取点数据。
•vtkPCAAnalysisFilter -执行一组对齐点集的主成分分析。
•vtkProcrustesAlignmentFilter -将一组点集数据集以最小二乘的方式对齐到它们的相互平均值。
•vtkTransformFilter -使用4x4变换矩阵重新定位vtkPointSet中的点。(参见第70页的“转换数据”)
•vtkWarpLens -根据镜头畸变变换点。
•vtkWarpScalar -修改点坐标缩放根据标量值。(见“基于标量值的翘曲”在122页)
•vtkWarpTo -修改点坐标翘曲向一个点。
•vtkWarpVector -修改点坐标缩放在点矢量的方向。
•vtkWeightedTransformFilter -基于每个点或每个单元加权函数的变换。输入类型vtkPolyData。输入类型必须为vtkPolyData。记住,接受vtkDataSet和vtkPointSet的过滤器也将处理vtkPolyData。
•vtkAppendPolyData -收集一个或多个vtkPolyData数据集到单个vtkPolyData。
•vtkApproximatingSubdivisionFilter—一个超类,用于使用近似方案细分多边形表面的单元格。
•vtkArcPlotter -沿着任意折线绘制数据。
•vtkbanddedpolydatacontourfilter -生成填充轮廓(所有具有相同单元标量值的单元格带)。
•vtkButterflySubdivisionFilter -细分三角形,多边形表面使用蝴蝶细分方案;为多边形表面的每个三角形创建四个新三角形。
•vtkCleanPolyData -合并重合点,删除退化的原语。
•vtkClipPolyData -使用隐式函数(或标量值)剪辑多边形数据集,返回隐式函数(或大于标量值)内的所有单元格。
•vtkCollectPolyData -在执行数据集的分布式处理时,将分布式多边形数据集收集到第0个进程。
•vtkCurvatures -计算vtkPolyData对象在数据集中每个点的曲率(高斯和平均值)。
•vtkDecimatePro -减少三角形网格中的三角形数量。
•vtkDepthSortPolyData -基于深度(与相机的距离)对多边形进行排序;用于半透明渲染。
•vtkDuplicatePolyData -当使用分布式平铺显示时,将数据集的整个副本放在每个进程上。过滤器用于驱动平铺显示的管道末端。
•vtkExtractPolyDataGeometry -提取完全位于隐式函数内部或外部的多边形细胞。这与vtkClipPolyData的功能非常相似。
•vtkextractpolydat每个-提取一块多边形数据集的请求由下游过滤器或映射器。
•vtkFeatureEdges -提取多边形数据集中满足某些条件(特征,边界,流形,非流形边缘)的细胞边缘。
•vtkGraphLayoutFilter -分配无向图网络到令人愉快的安排。
•vtkHull -生成多边形数据集的凸壳,使用六个或更多独立的平面来绑定数据集。
•vtkLinearExtrusionFilter -生成多边形数据扫描vtkPolyData根据指定的直线挤压功能。(见“挤出”217页)
•vtkLinearSubdivisionFilter -细分一个三角形,多边形表面使用线性细分方案;为多边形表面的每个三角形创建四个新三角形。
•vtkLoopSubdivisionFilter -使用Loop的细分方案细分三角形多边形表面(在Loop, C.,“基于三角形的平滑细分表面”中描述,犹他大学硕士论文,1987年8月)。
•vtkMaskPolyData -通过选择输入vtkPolyData的每n个单元格创建一个新的vtkPolyData;N为用户自定义。
•vtkLinearExtrusionFilter -一个子类的vtkLinearExtrusionFilter,可以产生分段不变的结果。
•vtkPolyDataConnectivityFilter -提取数据集的几何连接区域。
•vtkPolyDataNormals -在数据集中的每个点生成表面法向量(即垂直于几何表面的向量)。(参见第107页的“生成表面法线”。)
•vtkPolyDataStreamer -请求片一个接一个从输入(上游过滤器),并追加产生的多边形数据(使用vtkAppendPolyData)形成一个单一的输出数据集。
•vtkPolyDataToImageStencil -将vtkPolyData转换为可以与vtkImageStencil或其他VTK类一起使用的图像,这些类将模板应用于图像。
•vtkPolyDataNormals - vtkPolyDataNormals的子类,可以产生块不变的结果。
•vtkProjectedTerrainPath -将输入折线投影到地形图像上(2D vtkImageData,其标量是高度数据)。
•vtkQuadricClustering -一个抽取算法(使用空间分组),用于非常大的数据集。
•vtkQuadricDecimation -一种使用二次误差测量的抽取算法。
•vtkquantizepolydatpoints -除了继承vtkCleanPolyData的功能外,还量化点的x-y-z坐标(即将坐标转换为整数值坐标)。
•vtkReverseSense—反转单元格中点的连接顺序和/或表面法线的方向。(参见“曲面从无组织的点”在第224页)•vtkRibbonFilter -创建从多边形数据集中的线定向带。
•vtkRotationalExtrusionFilter -通过扫描vtkPolyData根据指定的旋转路径生成多边形数据。(参见第217页的“挤压”)
•vtkruledsurfaceffilter -从两条或多条“平行线”构建多边形表面。此过滤器通常用于从流线的耙创建流表面。
•vtkSelectPolyData -选择多边形数据绘制一个循环(即,创建一个列表的x-y-z点坐标)。多边形输出要么是包含在循环中的单元格,要么是带有指示所选点的新标量数组的未改变的几何形状。
•vtkShrinkPolyData -通过将每个单元格的点移动到单元格的质心来收缩多边形数据,导致多边形单元格彼此断开连接。
•vtkSmoothPolyDataFilter -使用拉普拉斯平滑来“放松”多边形网格,使单元“形状更好”,顶点分布更均匀。
•vtksplineffilter -使用vtkSpline从包含折线的输入数据集生成均匀细分的折线。
•vtkStripper -从输入三角形和多边形网格从输入线生成三角形条。
•vtkSubPixelPositionEdgels -根据第二个输入(vtkImageData)中包含的梯度调整输入多边形数据集中的边缘(线)位置。
•vtkTransformPolyDataFilter -根据4x4变换矩阵重新定位多边形数据集中的点。这个过滤器类似于vtkTransformFilter,但它专门用于vtkPolyData。(参见第70页的“数据转换”。)
•vtktransmitpolydateach -当在分布式环境中工作时,所有的多边形数据最初都在进程0上,将数据集分成块(每个进程一个),并将其相应的块发送给每个进程。
•vtkTriangleFilter -从多边形或三角形条生成三角形。
•vtktriangulartcoord -为多边形数据集中的三角形生成纹理坐标。
•vtkTubeFilter -包裹线与几何管。
•vtkVoxelContoursToSurfaceFilter -转换线轮廓(存储在多边形数据集中作为vtkPolygon单元)到一个表面。
•vtkWindowedSincPolyDataFilter -使用窗口sinc函数(标准信号处理低通滤波器)平滑网格。(见第109页的“平滑网格”。)
输入类型vtkStructuredGrid。输入类型必须是vtkStructuredGrid。记住,接受vtkDataSet和vtkPointSet的过滤器也将处理vtkStructuredGrid。
•vtkBlankStructuredGrid -将指定的点标量数组转换为一个空白字段(即,包含0的点被认为是“关闭”,1的点被认为是“打开”)。如果一个点的标量值位于指定的标量范围内,则该点被清空(标记为“off”);否则,它不会被空白(即标记为“on”)。
•vtkBlankStructuredGridWithImage -创建一个空白字段(即,包含0的点被认为是“关闭”和1的点被认为是“打开”的数组),用于具有尺寸与结构化网格相同的图像的结构化网格。图像中的零值表示输出点被空化;非零值表示输出点可见。
•vtkExtractGrid -提取感兴趣的区域和/或子样本vtkStructuredGrid。
•vtkGridSynchronizedTemplates3D -高性能等轮廓算法,专门用于结构化网格数据集。
•vtkStructuredGridClip -减少输入结构化网格的范围。这个过滤器的功能与vtkImageClip非常相似,但它在结构化网格上运行,而不是图像或卷。
•vtkStructuredGridGeometryFilter -提取一个区域的结构化网格(通过指定该区域的范围)多边形几何(点,线,面)。(参见第112页的“提取计算平面”)
•vtkstructuredgridoutlineffilter -生成结构化网格边界的线框轮廓。这类似于vtkOutlineFilter,但是轮廓的边缘将遵循vtkStructuredGrid的边界曲线。
输入类型vtkUnstructuredGrid。这些过滤器将vtkUnstructuredGrid作为输入。记住,接受vtkDataSet和vtkPointSet的过滤器也将处理vtkUnstructuredGrid的。
•vtkContourGrid -从标量值生成等值面/等值线,专门用于非结构化网格。(见第117页“轮廓非结构化网格”)
•vtkExtractUnstructuredGrid -提取一个非结构化网格的子集,无论是通过感兴趣的区域,按点id,或按单元id。(参见第115页的“提取网格部分”。)
•vtkExtractUnstructuredGridPiece -根据下游过滤器或映射器的要求提取非结构化网格数据集的一部分。
•vtkExtractUserDefinedPiece - vtkExtractUnstructuredGridPiece的子类,其中组成一块的单元格由用户指定的函数定义。
•vtkSubdivideTetra -将每个原始四面体的四面体网格细分为12个四面体。
•vtkTransmitUnstructuredGridPiece -当在分布式环境中工作时,所有非结构化网格数据最初都在进程0上,将数据集分成块(每个进程一个),并向每个进程发送相应的块。输入类型vtkreclineargrid。
输入类型必须为vtklineargrid。记住,接受vtkDataSet的过滤器也将处理vtkreclineargrid。
•vtkextractreclineargrid -从结构化的线性数据集中提取子网格(感兴趣的体积,或VOI)。
•vtkrecitlineargridclip -减少输入直线网格数据集的大小(范围)。
•vtkreclineargridgeometryfilter -提取一个区域的直线网格(通过指定该区域的范围)作为多边形几何(点,线,面)。(见“提取计算平面”在第112页)
•vtkreclineargridoutlinefilter -创建一个线框轮廓周围的直线网格的边界。
•vtkrectanglineargridtotetrahedra -从一个直线网格创建一个四面体网格(vtkUnstructuredGrid)。
•vtkreclinearsynchronizedtemplates -从标量值生成等值面,专门用于直线网格。
映射对象
在本节中,我们将简要描述映射器对象。Mapper对象终止可视化管道。注意,这里没有列出写入器(写入文件的映射器对象)。相反,可以在239页的“读写数据”中找到它们。每个条目都包含一个简短的描述,包括它需要的输入类型。
•vtkDataSetMapper -映射任何类型的数据集到图形系统。
•vtkFixedPointVolumeRayCastMapper -通过软件光线投射(使用15位定点精度进行计算)将一个体积(vtkImageData)映射到一个图像,该体积包含任何数据类型的多达4个分量的标量。
•vtkImageMapper - 2D图像显示。
•vtkLabeledDataMapper -生成基于底层数据值的数据集的3D文本标签。
•vtkPolyDataMapper -将多边形数据映射到图形系统。(请参阅第53页的“定义几何”以及本书中的许多代码示例。)
•vtkPolyDataMapper2D -绘制vtkPolyData到覆盖平面。
•vtkProjectedTetrahedraMapper -使用Shirley和Tuchman在1990年12月的计算机图形学“直接标量体渲染的多边形近似”中描述的体渲染技术将非结构化网格映射到图像上。
•vtkTextMapper -显示2D文本注释。
•vtkUnstructuredGridVolumeRayCastMapper -通过软件光线投射将非结构化网格映射到图像上。
•vtkUnstructuredGridVolumeZSweepMapper -使用Ricardo Farias, Joseph S. B. Mitchell和Claudio T. Silva在2000年体可视化研讨会上发表的“ZSweep:一种高效而精确的非结构化体渲染投影算法”中描述的ZSweep技术将非结构化网格映射到图像上,第91—99页,2000年10月。
•vtkVolumeRayCastMapper -映射一个卷(vtkImageData)到一个图像通过软件光线投射卷包含单组件无符号短或无符号字符标量。
•vtkVolumeTextureMapper2D -映射一个体积(vtkImageData)通过2D纹理图像。
•vtkVolumeTextureMapper3D -通过3D纹理映射一个卷(vtkImageData)到一个图像,利用当前的图形硬件来执行3D纹理映射。
Actor (Prop)对象
以下是系统中可用的各种类型vtkProp(例如vtkProp3D和vtkActor)的简要描述。
•vtkActor -一种类型的vtkProp3D,其几何是由分析原语,如多边形和线条定义;它通常用于表示3D场景中的数据集。(参见第53页的“演员”)
•vtkActor2D -在覆盖平面上绘制的道具类型。(参见“控制vtkActor2D”在第62页和“文本注释”在第63页)
•vtkAnnotatedCubeActor -一个子类的vtkProp3D,显示一个三维立方体与面部标签指示坐标方向。它旨在与vtkOrientationMarkerWidget一起使用,以指示3D场景中的方向。
•vtkAssembly - vtkProp3D的共享变换矩阵的有序分组(层次结构)。
•vtkAxesActor - vtkProp3D的子类,显示三个标记的坐标轴。它旨在与vtkOrientationMarkerWIdget一起使用,以指示3D场景中的方向。
•vtkAxisActor2D -在覆盖平面上绘制的单个标记轴。
•vtkCaptionActor2D -附加一个文本标题的对象。
•vtkCornerAnnotation -在viewport的四个角落显示文本。
•vtkCubeAxesActor2D -绘制x-y-z轴围绕一个边界框(指定使用vtkDataSet, vtkProp,或手动指定的绑定)。每个轴都用其相关维度中边界框的坐标范围进行标记。(参见第68页的“边界框轴(vtkCubeAxesActor2D)”。)
•vtkFollower -一个vtkActor,总是面对相机。(见“3D文本注释和vtkFollower”在第65页)
•vtkImageActor -一个特殊类型的vtkProp3D,绘制一个图像作为纹理映射在一个单一的多边形。(见“图像演员”在第124页)
•vtkLegendBoxActor -使用的vtkXYPlotActor绘制曲线图例;将文本,符号和线条组合成一个曲线图例,用于标记vtkXYPlotActor中的曲线。
•vtkLODActor -一个简单的细节级方案,用于渲染3D几何。(见“level-of-detail Actors”在第55页)
•vtkLODProp3D - levelof -detail方法的vtkProp3D的。它比vtkLODActor更通用,因为它支持任何类型的vtkProp3D,包括vtkVolume(用于体积渲染)。
•vtkParallelCoordinatesActor -用于显示vtkDataObject的多变量可视化技术。平行坐标通过使用一组N个平行轴(不像通常的x-y-z笛卡尔轴那样正交)来表示N维数据。每个N维的点都被绘制成一条折线,其中该点的N个分量都位于N个轴中的一个上,并且这些分量由直线连接。
•vtkpropassemassembly - vtkProps的有序分组(层次结构)。
•vtkProp3D -一个可转换(即,有一个矩阵)类型的vtkProp。
•vtkScalarBarActor -一个有标签的彩色条,可以直观地表达颜色和标量值之间的关系。(参见第66页的“标量条”)
•vtkTextActor -在覆盖平面上绘制的文本,可以设置为缩放视口大小的变化。
•vtkTextActor3D -一个子类的vtkProp3D显示文本。与vtkTextActor不同,它支持面向文本。
•vtkVolume -一个vtkProp3D用于体积渲染。
•vtkXYPlotActor -绘制包含在一个或多个vtkDataSets标量数据的x-y图。(见第66页的“X-Y图”。)
视图和信息学
VTK 5.4及以后版本对信息学(信息可视化)和相关类(例如vtkView)有广泛的支持。信息学相关对象图如图19-18所示。请注意,对Qt图表的支持是内置到视图层次结构的一部分(仅当VTK是针对Qt编译的)。最后,这里的许多类需要Boost Graph Library (http://www.boost.org/doc/ libs/1_39_0/libs/ Graph /doc/index.html)或Parallel Boost Graph Library (PBGL)是用VTK构建的,这当然需要在相关的CMake构建过程中启用此选项。有关VTK信息可视化功能的更多信息,请参阅第163页的“信息可视化”。
vtkGraph算法。以下是生成数据对象类型vtkGraph的算法。默认情况下,算法接受vtkGraph作为输入,但这可以通过覆盖FillInputPortInfo()方法来改变。
•vtkBoostBrandesCentrality -计算vtkGraph上的Brandes between centrality。
•vtkBoostBreadthFirstSearch -执行广度优先搜索。
•vtkBoostConnectedComponents -找到一个图的连接组件。
•vtkCollapseGraph -根据输入选择将顶点折叠到其邻居上。
•vtkCollectGraph -收集一个分布式图到顶点0。
•vtkEdgeLayout -布局图形使用复杂的边缘放置(包括弯曲的边缘)。这与vtkGraphLayout不同,后者放置顶点(通过直线连接)。支持多种策略。
•vtkExtractSelectedGraph -根据选择返回输入图的子图。
•vtkGraphHierarchicalBundleEdges -布局图与参考补充vtkTree。vtkGraph定义了图的拓扑结构;vtkTree定义几何形状。
•vtkGraphLayout -使用各种策略布局图形的顶点。
•vtkPBGLBreadthFirstSearch -使用PBGL在分布式图上执行宽度优先搜索。
•vtkPBGLCollapseGraph -使用PBGL将多个顶点(具有相同的值)折叠到分布式图中的相同顶点上。
•vtkPBGLCollapseParallelEdges -使用PBGL将多个顶点折叠成单个顶点。
•vtkPBGLCollectGraph -收集分布式vtkGraph的所有片段到单个,非分布式vtkGraph。
•vtkPBGLConnectedComponents -使用PBGL计算分布式图上的连接组件。
•vtkPBGLGraphSQLReader -使用两个SQL表创建一个图。边缘表的每条边必须有一行,其中两列定义边缘源和目标。顶点表的每个顶点都有一个行,其字段值与边缘表中的值相匹配。
•vtkPBGLMinimumSpanningTree -计算分布式图中的最小生成树。
•vtkPBGLRandomGraphSource -生成一个随机边缘的分布式图。
•vtkPBGLRMATGraphSource -生成根据递归矩阵(R-MAT)模型构建的分布式随机图。
•vtkPBGLShortestPaths -计算从一个原点顶点到分布式图中所有其他顶点的最短路径。
•vtkPBGLVertexColoring—计算分布式无向图的顶点着色,其中每个顶点的颜色与其相邻顶点不同。
•vtk摄动巧合顶点-移动顶点轻微,使他们不重叠。
•vtkRandomGraphSource -生成一个随机图与指定数量的顶点。
•vtkRemoveIsolatedVertices -删除顶点与度为零的图。
•vtkSplineGraphEdges -子样本图边缘,使光滑的曲线。
•vtkSQLDatabaseGraphSource -从SQL查询生成图形。
•vtkSQLGraphReader -从SQL数据库读取图形。
•vtkTableToGraph -将vtkTable转换为使用辅助链接图的vtkGraph。
•vtkVertexDegree -添加一个属性数据数组与每个顶点的程度。
vtkTable算法。以下是产生数据对象类型vtkTable的算法。默认情况下,算法接受vtkTable作为输入,但这可以通过覆盖FillInputPortInfo()方法来改变。
•vtkBoostSplitTableField -通过创建包含分隔数据的新行来拆分表字段。
•vtkCollectTable—收集分布式表。
•vtkDataObjectToTable -提取VTK字段数据作为表。
•vtkDelimitedTextReader -用于解析文本文件的阅读器。分隔符(可以是任何字符)用于分隔表中的条目。
•vtkExtractSelectedRows—返回表的选定行。
•vtkExtractTemporalFieldData -从输入字段数据中提取时间数组。
•vtkFixedWidthTextReader -读取固定宽度字段的文本文件。
•vtkISIReader -读取ISI文件。ISI是表示书目引文的标记格式。
•vtkmergeccolumns -合并两个列成一个列。如果数据是数字,则在合并列中对值求和。如果数据数组是字符串,则值用分隔空格连接(如果两个字符串都非空)。
•vtkMergeTables -合并两个表。
•vtkRISReader -读取RIS文件。RIS是一种表示书目引文的标记格式。
•vtkRowQueryToTable -执行SQL查询并将结果放入表中。
•vtkSQLDatabaseTableSource -从SQL查询生成表。
•vtkstatisticsalgalgorithm -这是统计算法的基类,包括双变量,均值,多相关和单变量统计。
•vtkThresholdTable -使用用户指定的最小值和最大值的阈值表行。
vtkTree算法。以下是产生数据对象类型vtkTree的算法。默认情况下,算法接受vtkTree作为输入,但这可以通过覆盖FillInputPortInfo()方法来改变。
•vtkAreaLayout -创建基于各种区域布局策略的树轮。
•vtkBoostBreadthFirstSearchTree -使用BGL从给定的源顶点执行宽度优先搜索。
•vtkBoostPrimMinimumSpanningTree -从图,起始顶点和边加权数组构建最小生成树。
•vtkGroupLeafVertices -一个过滤器,扩展树和分类叶顶点。
•vtkNetworkHierarchy -从图中包含的网络IP地址生成树。
•vtkprunetreeffilter -删除在vtkTree的特定顶点扎根的子树。
•vtkstahermetric -计算一个树的Stahler度量。这个指标描述了在每个节点上扎根的子树的复杂性。
•vtktabletotreeffilter -将vtkTable转换为vtkTree。
•vtkTreeFieldAggregator -将字段数据值分配给树中的所有顶点,从叶子开始工作。
•vtkTreeLevelsFilter -添加级别和叶子字段(即数据数组)到vtkTree。
•vtkTreeMapLayout -布局树到树的地图。树中的每个顶点对应于树形图中的一个矩形区域。
•vtkXMLTreeReader -读取XML文件到vtkTree。
vtkUndirectedGraph算法。以下是产生数据对象类型vtkUndirectedGraph的算法。默认情况下,算法接受vtkGraph作为输入,但这可以通过覆盖FillInputPortInfo()方法来改变。
•vtkBoostConnectedComponents -找到使用BGL的图形的双连接组件。
•vtkChacoGraphReader -读取Chaco图形文件。
•vtkTulipReader -读取郁金香图形文件。
•vtkXGMLReader -读取xgmml图形文件。
vtkDirectedGraph算法。以下是产生数据对象类型vtkDirectedGraph的算法。默认情况下,算法接受vtkGraph作为输入,但这可以通过覆盖FillInputPortInfo()方法来改变。
•vtkPipelineGraphSource -构建一个图从VTK管道。
vtkPassInputType算法。以下是生成与其输入类型相同的数据对象类型的算法。默认情况下,算法将vtkDataObject作为输入,但这可以通过覆盖FillInputPortInfo()方法来更改。
•vtkAddMembershipArray -添加一个数组的输出表明成员在一个输入选择。
•vtkApplyColors -使用默认颜色,查找表,注释和/或选择为数据集着色。
•vtkApplyIcons -生成图标的数据集使用默认的颜色,查找表,注释,和/或选择。
•vtkArrayMap -将输入数组中的值映射到(可能)不同类型的输出数组中的不同值。
•vtkAssignAttribute -将字段标记为属性。
•vtkAssignCoordinates -给定两个或三个数组,在这些数组中取这些值,并使用它们作为x-y-z坐标。
•vtkConvertSelectionDomain -转换一个选择从一个域到另一个使用已知的域映射。
•vtkDataRepresentation -所有数据表示的通用超类。
•vtkGeoAssignCoordinates -给定纬度和经度,采取这些值,并将其转换为x-y-z世界坐标。
•vtkPassThrough -浅拷贝输入到输出。
•vtkprogramablefilter -一个通用的,用户可编程的过滤器。
•vtkRemoveHiddenData -删除行/边/顶点的输入数据标记的注释。
•vtkTemporalStatistics -计算点或单元数据的统计数据,因为它随着时间的推移而变化。
•vtkTransferAttributes -传输数据从图形表示到树表示使用直接映射或谱系id。
19.3 VTK文件格式
可视化工具包提供了许多源对象和写入器对象来读写流行的数据文件格式。可视化工具包还提供了一些自己的文件格式。创建另一种数据文件格式的主要原因是为各种数据集类型提供一致的数据表示方案,并提供在软件之间通信数据的简单方法。
只要有可能,我们建议您使用更广泛使用的格式。但是,如果这是不可能的,可以使用这里描述的Visualization Toolkit格式。请注意,许多其他工具可能不支持这些格式。有两种不同风格的文件格式可在VTK。最简单的是遗留的串行格式,它们易于通过手动或编程进行读写。但是,这些格式不如本节后面介绍的基于XML的文件格式灵活。XML格式支持随机访问、并行I/O和便携式数据压缩,并且在可能的情况下优先于串行VTK文件格式。
简单的遗留格式
传统的VTK文件格式由五个基本部分组成。
1. 第一部分是文件版本和标识符。这部分包含一行:# vtk DataFile Version x.x。除了版本号x.x外,这一行必须与所示完全一致,版本号会因vtk的不同版本而有所不同。(注:当前版本号为3.0。
2.1.0和2.0版本的文件与3.0版本的文件兼容。第二部分是标题。报头由一个以换行符\n结束的字符串组成。头最大256个字符。标头可用于描述数据并包含任何其他相关信息。
3. 下一部分是文件格式。文件格式描述文件的类型,是ASCII还是二进制。在这一行必须出现单个单词ASCII或BINARY。
4. 第四部分是数据集结构。几何部分描述数据集的几何和拓扑结构。这一部分以一行开头,其中包含关键字DATASET,后跟一个描述数据集类型的关键字。然后,根据数据集的类型,其他关键字/数据组合定义实际数据。
5. 最后一部分描述了数据集属性。这一部分以关键字POINT_DATA或CELL_DATA开始,后跟一个整数,分别指定点或单元格的数量。(首先是POINT_DATA还是CELL_DATA并不重要。)其他关键字/数据组合然后定义实际的数据集属性值(即标量、向量、张量、法线、纹理坐标或字段数据)。
文件格式概述如图19-19所示。前三个部分是强制性的,但其他两个是可选的。因此,您可以通过操作系统文件操作或使用VTK过滤器合并数据,灵活地混合和匹配数据集属性和几何形状。
关键字不区分大小写,可以用空格分隔。在描述数据文件格式之前,请注意以下事项。
•dataType是bit、unsigned_char、char、unsigned_short、short、unsigned_int、int、unsigned_long、long、float或double类型中的一种。这些关键字用于描述数据的形式,既用于从文件中读取数据,也用于构造适当的内部对象。并非所有类都支持所有数据类型。
•无论文件是二进制文件还是ASCII文件,所有关键字短语都以ASCII形式编写。文件的二进制部分(如果是二进制形式)是正确的数据;例如,定义点坐标、标量、单元格索引等的数字。
•索引为0偏移。因此第一个点是id为0的点。
•如果文件中同时存在数据属性和几何/拓扑部分,则数据属性部分中定义的数据值的数量必须与几何/拓扑部分中定义的点或单元的数量完全匹配。
•单元格类型和索引为int类型。
•二进制数据必须放在文件中紧接前一个ASCII关键字和参数序列的“换行符”(\n)字符之后。
•几何/拓扑描述必须出现在数据属性描述之前。
二进制文件。二进制文件在VTK是便携式跨不同的计算机系统,只要你观察两个条件。首先,确保数据的字节顺序正确,其次,确保每个数据类型的长度是一致的。
大多数时候,VTK为您管理二进制文件的字节顺序。当您在一台计算机上写入二进制文件并从另一台计算机读取它时,表示数据的字节将根据需要自动交换。例如,写在Sun上的二进制文件是按大端序存储的,而写在PC上的二进制文件是按小端序存储的。因此,在Sun工作站上写入的文件在PC上读取时需要进行字节交换。(请参阅vtkByteSwap类了解实现细节。)这里描述的VTK数据文件是以大端格式编写的。
但是,有些文件格式没有显式定义字节排序形式。您会发现,外部程序或vtkVolume16Reader、vtkMCubesReader和vtkMCubesWriter类读取或写入的数据可能具有不同的字节顺序,具体取决于原始系统。在这种情况下,
VTK允许您通过使用方法指定字节顺序
SetDataByteOrderToBigEndian()
SetDataByteOrderToLittleEndian()
二进制文件的另一个问题是,系统可能使用不同的字节数来表示整数或其他本机类型。例如,一些64位系统将用8字节表示整数,而其他系统将用4字节表示整数。目前,Visualization Toolkit无法处理在数据长度不兼容的系统之间传输遗留二进制文件。在这种情况下,使用ASCII文件格式代替。
数据集格式。可视化工具箱支持五种不同的数据集格式:结构化点
(即vtkImageData),结构化网格,直线网格,非结构化网格和多边形数据。与VTK XML文件(在本章后面描述)不同,传统的VTK文件使用。VTK文件扩展名,而不管文件中包含的数据集类型。具有隐式拓扑的数据(结构化数据,如vtkImageData和vtkStructuredGrid)以x增长最快的方式排序,然后是y,然后是z。这些格式如下。
•结构化点
该文件格式支持1D、2D和3D结构化点数据集。维数nx ny nz必须大于等于1。数据间距sx, sy, sz必须大于0。(注:在1.0版本的数据文件中,间距被称为“宽高比”。ASPECT_RATIO仍然可以在2.0版本的数据文件中使用,但不建议使用。)
DATASET STRUCTURED_POINTS
DIMENSIONS nx ny nz
ORIGIN x y z SPACING sx sy sz
•结构化网格
该文件格式支持1D、2D和3D结构化网格数据集。维数nx ny nz必须大于等于1。点坐标由POINTS部分中的数据定义。它由每个点的x-y-z数据值组成。
DATASET STRUCTURED_GRID
DIMENSIONS nx ny nz
POINTS n dataType
p0x p0y p0z
p1x p1y p1z
...
p(n-1)x p(n-1)y p(n-1)z
•直线型网格
直线型网格定义了具有规则拓扑和半规则几何对齐的数据集沿着x-y-z坐标轴。几何图形由三个单调递增的坐标值列表定义,每个x-y-z坐标轴对应一个列表。拓扑通过指定网格维度来定义,网格维度必须大于或等于1。
DATASET RECTILINEAR_GRID
DIMENSIONS nx ny nz
X_COORDINATES nx dataType
x0 x1
...
x(nx-1)
Y_COORDINATES ny dataType
y0 y1
...
y(ny-1)
Z_COORDINATES nz dataType
z0 z1
...
z(nz-1)
多边形数据多边形数据集由曲面图形基元的任意组合组成:顶点(和多顶点)、直线(和多直线)、多边形(各种类型)和三角带。多边形数据由POINTS, vertex, LINES, POLYGONS或TRIANGLE_STRIPS部分定义。POINTS的定义与我们看到的结构化网格数据集相同。vertex, LINES, POLYGONS或TRIANGLE_STRIPS关键字定义多边形数据集拓扑。每个关键字都需要两个参数:单元格的数量n和单元格列表的大小。单元格列表大小是表示该列表所需的整数值的总数(即,每个单元格上numPoints和连通性索引的总和)。关键字顶点、线条、多边形或TRIANGLE_STRIPS都不是必需的。
DATASET POLYDATA
POINTS n dataType
p0x p0y p0z
p1x p1y p1z
...
p(n-1)x p(n-1)y p(n-1)z
VERTICES n size
numPoints0, i0, j0, k0, ...
numPoints1, i1, j1, k1, ...
...
numPointsn-1, in-1, jn-1, kn-1, ...
LINES n size
numPoints0, i0, j0, k0, ...
numPoints1, i1, j1, k1, ...
...
numPointsn-1, in-1, jn-1, kn-1, ...
POLYGONS n size
numPoints0, i0, j0, k0, ...
numPoints1, i1, j1, k1, ...
...
numPointsn-1, in-1, jn-1, kn-1, ...
TRIANGLE_STRIPS n size
numPoints0, i0, j0, k0, ...
numPoints1, i1, j1, k1, ...
...
numPointsn-1, in-1, jn-1, kn-1, ...
•非结构化网格非结构化网格数据集由任何可能的单元格类型的任意组合组成。非结构化网格由点、单元格和单元格类型定义。CELLS关键字需要两个参数:单元格的数目n和单元格列表的大小。单元格列表大小是表示该列表所需的整数值的总数(即,每个单元格上numPoints和连通性索引的总和)。CELL_TYPES关键字需要一个参数:单元格的个数n。这个值应该与cells关键字指定的值匹配。单元格类型数据是指定单元格类型的每个单元格的单个整数值(参见vtkCell.h或图19-20)。
DATASET UNSTRUCTURED_GRID
POINTS n dataType
p0x p0y p0z
p1x p1y p1z
...
p(n-1)x p(n-1)y p(n-1)z
CELLS n size
numPoints0, i, j, k, l, ...
numPoints1, i, j, k, l, ...
numPoints2, i, j, k, l, ...
...
numPointsn-1, i, j, k, l, ...
CELL_TYPES n
type0
type1
type2
...
typen-1
•领域
现场数据是一种通用格式,没有拓扑结构和几何结构,也没有特定的维度。通常,字段数据与数据集的点或单元相关联。但是,如果FIELD类型被指定为数据集类型(参见图19-19),那么将定义一个通用的VTK数据对象。使用下一节中描述的格式来定义字段。也看到
第249页的“使用现场数据”和第477页的“示例”中开始的第四个示例。
数据集属性格式。可视化工具箱支持以下数据集属性:标量(一到四个分量)、颜色标量、向量、法线、纹理坐标(1D、2D和3D)、张量和字段数据。此外,还可以定义一个使用RGBA颜色规范的查找表,它与标量数据相关联。数据集属性支持点和单元格。
每种类型的属性数据都有一个与之关联的dataName。这是一个用于标识特定数据的字符串(不包含空格)。dataName用于VTK读取器提取数据。因此,一个文件中可以包含多个相同类型的属性数据。例如,在数据集点上定义的两个不同的标量字段,压力和温度,可以包含在同一个文件中。(如果在VTK读取器中没有指定匹配的dataName,则从文件中提取该类型的第一个数据。)
•标量
标量定义包括查找表的说明。查找表的定义是可选的。如果没有指定,默认的VTK表将被使用(tableName应该是)
“违约”)。还要注意,numComp变量是可选的——默认情况下组件的数量等于1。(参数numComp的取值范围必须在(1,4)之间;在vtk2.3之前的VTK版本中不支持此参数。)
SCALARS dataName dataType numComp
LOOKUP_TABLE tableName
s0
s1
...
sn-1
•颜色标量
颜色标量(即,直接映射到颜色的无符号字符值)的定义取决于每个标量的值(nValues)的数量。如果文件格式是ASCII,则使用nValues浮动值(0,1)来定义颜色标量。如果文件格式为BINARY,则数据流由每个标量值的nValues无符号char值组成。
COLOR_SCALARS dataName nValues
c00 c01 ... c0(nValues-1)
c10 c11 ... c1(nValues-1)
...
c(n-1)0 c(n-1)1 ... c(n-1)(nValues-1)
•查找表
tableName字段是一个字符串(没有嵌入空格),用于标识查找表。这个标签被VTK阅读器用来提取一个特定的表。
查找表中的每个条目都是rgba[4](红-绿-蓝-alpha)数组(alpha是不透明的,alpha=0是透明的)。如果文件格式是ASCII,则查找表的值必须是(0,1)之间的浮点值。如果文件格式为BINARY,则每个表项的数据流必须是4个无符号字符值。
LOOKUP_TABLE tableName size
r0 g0 b0 a0
r1 g1 b1 a1
...
rsize-1 gsize-1 bsize-1 asize-1
向量
VECTORS dataName dataType
v0x v0y v0z
v1x v1y v1z
...
v(n-1)x v(n-1)y v(n-1)z
- 法线
法线假定归一化。
NORMALS dataName dataType
n0x n0y n0z
n1x n1y n1z
...
n(n-1)x n(n-1)y n(n-1)z
•纹理坐标
支持1、2和3维的纹理坐标。
TEXTURE_COORDINATES dataName dim dataType
t00 t01 ... t0(dim-1)
t10 t11 ... t1(dim-1)
...
t(n-1)0 t(n-1)1 ... t(n-1)(dim-1)
•张量
目前只支持实值对称张量。
字段数据
字段数据本质上是数据数组的数组。定义字段数据意味着为字段指定一个名称并指定它包含的数组的数量。然后,对于每个数组,定义数组的名称arrayName(i)、数组的组件数numComponents、数组中的元组数numTuples和数据类型dataType。
的例子。第一个例子是一个由六个多角面表示的立方体。我们定义了六个面上的单分量标量、法线和字段数据。有与八个顶点相关联的标量数据。还定义了与点标量相关的八种颜色的查找表。
下一个例子是维度的体积。由于没有定义查找表,因此用户必须在VTK中创建一个查找表,否则将使用默认查找表。
第三个示例是包含8个VTK单元格类型的非结构化网格(如图19-20和图19-21所示)。该文件包含标量和矢量数据。
第四个也是最后一个示例是表示为字段的数据。您可能还希望看到“与
字段数据”,查看如何操作该数据。(下面显示的数据文件可以在$VTK_DATA_ROOT/ data /financial.vtk中找到。)
在本例中,一个字段使用六个数组表示。每个数组有一个组件和3188个元组。六个数组中有五个是float类型,而最后一个数组是unsigned_short类型。
在data目录中可以找到其他示例。
- 讨论有关微软文档标准
VTK使用XML语法提供了另一组数据格式。虽然这些格式比之前描述的原始VTK格式要复杂得多(参见第470页的“简单遗留格式”),但它们支持更多的功能。开发它们的主要动机是促进数据流和并行I/O。该格式的一些特性包括支持压缩,可移植二进制编码,随机访问,大端和小端字节顺序,块数据的多个文件表示,以及不同VTK数据集类型的新文件扩展名。XML还提供了许多特性,特别是使用特定于应用程序的标记扩展文件格式的能力。有两种类型的VTK XML数据文件:并行和串行,如下所述。
•系列。文件类型设计为仅由单个进程的应用程序读取和写入。所有的数据都包含在一个文件中。
•平行。为具有多个并行执行进程的应用程序的读写而设计的文件类型。数据集被分成几个部分。每个进程被分配一个或一组片段来读或写。单个片段存储在相应的串行文件类型中。并行文件类型实际上不包含任何数据,而是描述结构信息,然后引用包含每个部分数据的其他串行文件。
在XML格式中,VTK数据集分为两类之一。
•结构。数据集是一个拓扑规则的单元数组,如像素和体素(例如,图像数据)或四边形和六面体(例如,结构化网格)(参见第25页的“可视化管道”了解更多信息)。数据的矩形子集通过区段来描述。结构化数据集类型是vtkImageData, vtklineargrid和vtkStructuredGrid。
•非结构化。数据集形成了一个拓扑不规则的点和单元集。数据的子集使用片段来描述。非结构化数据集类型是vtkPolyData和vtkUnstructuredGrid(参见第25页的“可视化管道”了解更多信息)。
按照惯例,每种数据类型和文件类型都与特定的文件扩展名配对。类型和相应的扩展名为:
•ImageData (.vti) - Serial vtkImageData (structured)。
•PolyData (.vtp) -串行vtkPolyData(非结构化)。
•直线网格(.vtr) -串行vtk直线网格(结构化)。
•StructuredGrid (.vts) -串行vtkStructuredGrid(结构化)。
•UnstructuredGrid (.vtu) - Serial vtkUnstructuredGrid(非结构化)。
•PImageData (.pvti) -并行vtkImageData(结构化)。
•PPolyData (.pvtp) -并行vtkPolyData(非结构化)。
•PRectilinearGrid (.pvtr) -平行vtklineargrid(结构化)。
•PStructuredGrid (.pvts) -并行vtkStructuredGrid(结构化)。
•PUnstructuredGrid (.pvtu) -并行vtkUnstructuredGrid(非结构化)。所有VTK XML文件类型都是格式良好的XML文档。*文档级元素是VTKFile:
元素的属性是:
*在一种情况下,文件不是格式良好的XML文档。当AppendedData部分没有编码为base64时,会出现可能违反XML规范的原始二进制数据。这不是默认行为,必须由用户显式启用。
type -文件的类型(前面列表中的项目符号项)。version -“major”中的文件版本号。小”格式。
byte_order -存储数据的机器字节顺序。这是“BigEndian”或“LittleEndian”。
compressor -文件中的某些数据可能被压缩。这指定了用于压缩数据的vtkdataccompressor的子类。
嵌套在VTKFile元素内部的是一个元素,其名称对应于数据格式的类型(即类型属性)。此元素描述数据集的拓扑结构,对于串行和并行格式是不同的,如下所述
串行XML文件格式。VTKFile元素包含一个元素,其名称对应于文件描述的数据集类型。我们将其称为数据集元素,它是ImageData、lineargrid、StructuredGrid、PolyData或UnstructuredGrid中的一个。数据集元素包含一个或多个Piece元素,每个元素描述数据集的一部分。数据集元素和Piece元素一起指定整个数据集。数据集的每个部分必须指定该部分的几何形状(点和单元)以及与每个点或单元相关联的数据。
对于每种数据集类型,几何图形的指定是不同的,但是每个数据集的每个部分都包含PointData和CellData元素,为该部分中的每个点和单元指定数据。每种串行数据集格式的总体结构如下:
•ImageData -每个ImageData块指定其在数据集的整个范围内的范围。
点和单元由范围、原点和间距隐式地描述。请注意,所有片段的原点和间距都是恒定的,因此它们被指定为
ImageData XML元素如下所示。
<VTKFile type=”ImageData” ...>
<ImageData WholeExtent=”x1 x2 y1 y2 z1 z2”
Origin=”x0 y0 z0” Spacing=”dx dy dz”>
<Piece Extent=”x1 x2 y1 y2 z1 z2”>
<PointData>...</PointData>
<CellData>...</CellData>
</Piece>
</ImageData>
</VTKFile>
•直线型网格-每个直线型网格块指定其在数据集的整个范围内的范围。这些点由坐标元素描述。范围隐式地描述了细胞。
<VTKFile type=”RectilinearGrid” ...>
<RectilinearGrid WholeExtent=”x1 x2 y1 y2 z1 z2”>
<Piece Extent=”x1 x2 y1 y2 z1 z2”>
<PointData>...</PointData>
<CellData>...</CellData>
<Coordinates>...</Coordinates>
</Piece>
</RectilinearGrid>
</VTKFile>
•StructuredGrid -每个StructuredGrid块指定其在数据集的整个范围内的范围。这些点由points元素显式地描述。范围隐式地描述了细胞。
<VTKFile type=”StructuredGrid” ...>
<StructuredGrid WholeExtent=”x1 x2 y1 y2 z1 z2”>
<Piece Extent=”x1 x2 y1 y2 z1 z2”>
<PointData>...</PointData>
<CellData>...</CellData>
<Points>...</Points>
</Piece>
</StructuredGrid>
</VTKFile>
•PolyData -每个PolyData块指定一组独立于其他块的点和单元格。这些点由points元素显式地描述。单元格由vert、Lines、Strips和polyys元素明确地描述。
<VTKFile type=”PolyData” ...>
<PolyData>
<Piece NumberOfPoints=”#” NumberOfVerts=”#” NumberOfLines=”#”
NumberOfStrips=”#” NumberOfPolys=”#”>
<PointData>...</PointData>
<CellData>...</CellData>
<Points>...</Points>
<Verts>...</Verts>
<Lines>...</Lines>
<Strips>...</Strips>
<Polys>...</Polys>
</Piece>
</PolyData>
</VTKFile>
•UnstructuredGrid -每个UnstructuredGrid块指定一组独立于其他块的点和单元。这些点由points元素显式地描述。
单元格由cells元素显式地描述。
<VTKFile type=”UnstructuredGrid” ...>
<UnstructuredGrid>
<Piece NumberOfPoints=”#” NumberOfCells=”#”>
<PointData>...</PointData>
<CellData>...</CellData>
<Points>...</Points>
<Cells>...</Cells>
</Piece>
</UnstructuredGrid>
</VTKFile>
每个数据集都用PointData和CellData描述与其点和单元关联的数据
XML元素如下:
<PointData Scalars=”Temperature” Vectors=”Velocity”>
<DataArray Name=”Velocity” .../>
<DataArray Name=”Temperature” .../>
<DataArray Name=”Pressure” .../>
</PointData>
VTK允许任意数量的数据数组与数据集的点和单元相关联。
每个数据数组由DataArray元素描述,该元素为每个数组提供了一个名称。PointData和CellData的以下属性用于通过名称指定活动数组:
Scalars -活动标量数组的名称(如果有的话)。
向量-活动向量数组的名称(如果有的话)。
Normals -活动的Normals数组的名称(如果有的话)。
张量-活动张量数组的名称(如果有的话)。
tcoordds -活动纹理坐标数组的名称,如果有的话。
一些数据集使用以下常见元素的不同组合来描述它们的点和单元:
•Points - Points元素显式地为每个点单独定义坐标。它包含一个DataArray元素,描述一个数组,每个值有三个组件,每个组件指定一个点的坐标。
<Points>
<DataArray NumberOfComponents=”3” .../>
</Points>
坐标——坐标元素通过为范围内的每个整数值指定沿每个轴的坐标来定义范围的点坐标。它包含三个
DataArray元素,分别描述沿x-y-z轴的坐标。
<Coordinates>
<DataArray .../>
<DataArray .../>
<DataArray .../>
</Coordinates>
•vert, Lines, Strips, and polyys - vert, Lines, Strips, and polyys元素通过指定点连接来明确定义单元格。单元格类型通过指定它们的元素类型隐式地知道。每个元素包含两个DataArray元素。第一个数组指定点连接。所有单元格的点列表都连接在一起。第二个数组指定每个单元格末尾到连接性数组的偏移量。
<Verts>
<DataArray type=”Int32” Name=”connectivity” .../>
<DataArray type=”Int32” Name=”offsets” .../>
</Verts>
•Cells - Cells元素通过指定点连接和细胞类型显式地定义细胞。它包含三个DataArray元素。第一个数组指定点连接。
所有单元格的点列表都连接在一起。第二个数组指定每个单元格末尾到连接性数组的偏移量。第三个数组指定每个单元格的类型。(注:单元格类型定义见图19-20和图19-21)
<Cells>
<DataArray type=”Int32” Name=”connectivity” .../>
<DataArray type=”Int32” Name=”offsets” .../>
<DataArray type=”UInt8” Name=”types” .../>
</Cells>
所有的数据和几何规格都使用DataArray元素来描述它们的实际内容,如下所示:
•DataArray - DataArray元素存储一种类型的值序列。每个值可能有一个或多个组件。
<DataArray type=”Float32” Name=”vectors” NumberOfComponents=”3”
format=”appended” offset=”0”/>
<DataArray type=”Float32” Name=”scalars” format=”binary”>
bAAAAAAAAAAAAIA/AAAAQAAAQEAAAIBA... </DataArray>
<DataArray type=”Int32” Name=”offsets” format=”ascii”>
10 20 30 ... </DataArray>
DataArray元素的属性说明如下:type—数组中单个组件的数据类型。这是Int8, UInt8, Int16,
UInt16, Int32, UInt32, Int64, UInt64, Float32, Float64。
Name—阵列的名称。这通常是对存储在数组中的数据的简要描述。
NumberOfComponents -数组中每个值的组件数。
format——数据值本身存储在文件中的方法。这是
" ascii ", " binary ",或" appended "。
offset -如果format属性为" appended ",则指定从被附加数据部分开始到该数组数据开始的偏移量。
RangeMin、RangeMax—这些可选属性指定DataArray中存在的最小值和最大值。
format属性从三种存储数据值的方式中进行选择:format= " ascii " -数据直接在DataArray元素中以ascii格式列出。空格用于分隔。
format= " binary " -数据以base64编码,并在DataArray元素中连续列出。数据也可以在base64编码之前进行压缩。数据的字节顺序与VTKFile元素的byte_order属性指定的字节顺序匹配。
format= " appended " -数据存储在附加数据部分。由于许多DataArray元素可能将它们的数据存储在这个部分中,因此offset属性用于指定每个DataArray的数据开始的位置。这种格式是VTK的编写者默认使用的。附加的数据部分存储在appenddeddata元素中,该元素嵌套在VTKFile中dataset元素之后:
<VTKFile ...>
...
<AppendedData encoding=”base64”>
_QMwEAAAAAAAAA...
</AppendedData>
</VTKFile>
追加的数据部分以appenddeddata元素中下划线之后的第一个字符开始。下划线不是数据的一部分,但总是存在。本节中的数据总是二进制形式,但可以压缩和/或base64编码。数据的字节顺序与VTKFile元素的byte_order属性指定的字节顺序匹配。每个DataArray的数据是连续存储的,并在没有分隔符的情况下立即附加在前一个DataArray的数据之后。DataArray的offset属性指示从下划线后面的第一个字符到其数据开头的文件位置偏移量。
并行文件格式。并行文件格式实际上并不在文件中存储任何数据。相反,数据被分解成多个片段,每个片段存储在相同数据集类型的串行文件中。
VTKFile元素包含一个元素,其名称对应于文件描述的数据集类型,但带有“P”前缀。我们将其称为并行数据集元素,它是PImageData、PRectilinearGrid、PStructuredGrid、PPolyData或PUnstructuredGrid中的一个。
并行数据集元素和嵌套在其中的元素指定用于存储点、点数据和单元数据的数据数组的类型(用于存储单元的数组类型由VTK固定)。元素实际上不包含任何数据,而是包含一个Piece元素列表,该列表指定从哪个源读取每个片段。各个部件以相应的串行文件格式存储。并行文件需要指定类型和结构信息,以便读取器可以更新管道信息,而无需实际读取片段的文件。
每种并行数据集格式的一般结构如下:
•PImageData - PImageData元素指定了数据集的整个范围和幽灵级别的数量,通过这些级别,各个部分的范围重叠。起源和
间距属性隐式指定点的位置。每个Piece元素描述一个片段的范围和存储该片段的文件。
<VTKFile type=”PImageData” ...>
<PImageData WholeExtent=”x1 x2 y1 y2 z1 z2”
GhostLevel=”#” Origin=”x0 y0 z0” Spacing=”dx dy dz”>
<PPointData>...</PPointData>
<PCellData>...</PCellData>
<Piece Extent=”x1 x2 y1 y2 z1 z2” Source=”imageData0.vti”/>
...
</PImageData>
</VTKFile>
•PRectilinearGrid - PRectilinearGrid元素指定数据集的整个范围和幽灵级别的数量,通过这些级别,各个部分的范围重叠。的
元素描述用于指定沿每个轴的点坐标的数组类型,但实际上不包含数据。每个Piece元素描述一个片段的范围和存储该片段的文件。
<VTKFile type=”PRectilinearGrid” ...>
<PRectilinearGrid WholeExtent=”x1 x2 y1 y2 z1 z2”
GhostLevel=”#”>
<PPointData>...</PPointData>
<PCellData>...</PCellData>
<PCoordinates>...</PCoordinates>
<Piece Extent=”x1 x2 y1 y2 z1 z2”
Source=”rectilinearGrid0.vtr”/>
...
</PRectilinearGrid>
</VTKFile>
•PStructuredGrid - PStructuredGrid元素指定数据集的整个范围和幽灵级别的数量,通过这些级别,各个部分的范围重叠。的
元素描述用于指定点位置的数组类型,但实际上不包含数据。每个Piece元素描述一个片段的范围和存储该片段的文件。
<VTKFile type=”PStructuredGrid” ...>
<PStructuredGrid WholeExtent=”x1 x2 y1 y2 z1 z2”
GhostLevel=”#”>
<PPointData>...</PPointData>
<PCellData>...</PCellData>
<PPoints>...</PPoints>
<Piece Extent=”x1 x2 y1 y2 z1 z2”
Source=”structuredGrid0.vts”/>
...
</PStructuredGrid>
</VTKFile>
•PPolyData - PPolyData元素指定了各个部分重叠的幽灵级别的数量。PPoints元素描述了用于指定点位置的数组类型,但实际上并不包含数据。每个Piece元素指定存储该块的文件。
<VTKFile type=”PPolyData” ...>
<PPolyData GhostLevel=”#”>
<PPointData>...</PPointData>
<PCellData>...</PCellData>
<PPoints>...</PPoints>
<Piece Source=”polyData0.vtp”/>
...
</PPolyData>
</VTKFile>
•PUnstructuredGrid - PUnstructuredGrid元素指定了各个部分重叠的幽灵级别的数量。PPoints元素描述了用于指定点位置的数组类型,但实际上并不包含数据。每个Piece元素指定存储该块的文件。
<VTKFile type=”PUnstructuredGrid” ...>
<PUnstructuredGrid GhostLevel=”0”>
<PPointData>...</PPointData>
<PCellData>...</PCellData>
<PPoints>...</PPoints>
<Piece Source=”unstructuredGrid0.vtu”/>
...
</PUnstructuredGrid>
</VTKFile>
每个数据集都使用PPointData和pelldata元素来描述与其点和单元格相关联的数据数组类型。
•PPointData和pelldata -这些元素只是从串行文件格式镜像PointData和CellData元素。它们包含描述数据数组的PDataArray元素,但没有任何实际数据。
<PPointData Scalars=”Temperature” Vectors=”Velocity”>
<PDataArray Name=”Velocity” .../>
<PDataArray Name=”Temperature” .../>
<PDataArray Name=”Pressure” .../>
</PPointData>
对于需要指定点的数据集,以下元素反映了串行文件格式的对应元素:
•PPoints - PPoints元素包含一个PDataArray元素,该元素描述了一个包含三个组件的数组。数据数组实际上不包含任何数据。
<PPoints>
<PDataArray NumberOfComponents=”3” .../>
</PPoints>
•PCoordinates - PCoordinates元素包含三个PDataArray元素,它们描述用于指定沿每个轴的坐标的数组。数据数组实际上不包含任何数据。
<PCoordinates>
<PDataArray .../>
<PDataArray .../>
<PDataArray .../>
</PCoordinates>
所有的数据和几何规范都使用PDataArray元素来描述数据数组类型:
•PDataArray—PDataArray元素指定类型、名称和可选的
DataArray元素的NumberOfComponents属性。它不包含实际数据。阅读器可以使用它在输出中创建数据数组,而不需要读取任何实际数据,这在某些情况下对于高效的管道更新是必要的。
<PDataArray type=”Float32” Name=”vectors” NumberOfComponents=”3”/>
例子。下面是一个完整的例子,指定一个vtkPolyData来表示一个立方体,它的点和面上有一些标量数据。
<?xml version="1.0"?>
<VTKFile type="PPolyData" version="0.1" byte_order="LittleEndian">
<PPolyData GhostLevel="0">
<PPointData Scalars="my_scalars">
<PDataArray type="Float32" Name="my_scalars"/>
</PPointData>
<PCellData Scalars="cell_scalars" Normals="cell_normals">
<PDataArray type="Int32" Name="cell_scalars"/>
<PDataArray type="Float32" Name="cell_normals"
NumberOfComponents="3"/>
</PCellData>
<PPoints>
<PDataArray type="Float32" NumberOfComponents="3"/>
</PPoints>
<Piece Source="polyEx0.vtp"/>
</PPolyData>
</VTKFile>
<?xml version="1.0"?>
<VTKFile type="PolyData" version="0.1" byte_order="LittleEndian">
<PolyData>
<Piece NumberOfPoints="8" NumberOfVerts="0" NumberOfLines="0"
NumberOfStrips="0" NumberOfPolys="6">
<Points>
<DataArray type="Float32" NumberOfComponents="3" format="ascii">
0 0 0 1 0 0 1 1 0 0 1 0 0 0 1 1 0 1 1 1 1 0 1 1
</DataArray>
</Points>
<PointData Scalars="my_scalars">
<DataArray type="Float32" Name="my_scalars" format="ascii">
0 1 2 3 4 5 6 7
</DataArray>
</PointData>
<CellData Scalars="cell_scalars" Normals="cell_normals">
<DataArray type="Int32" Name="cell_scalars" format="ascii">
0 1 2 3 4 5
</DataArray>
<DataArray type="Float32" Name="cell_normals"
NumberOfComponents="3" format="ascii">
0 0 -1 0 0 1 0 -1 0 0 1 0 -1 0 0 1 0 0
</DataArray>
</CellData>
<Polys>
<DataArray type="Int32" Name="connectivity" format="ascii">
0 1 2 3 4 5 6 7 0 1 5 4 2 3 7 6 0 4 7 3 1 2 6 5
</DataArray>
<DataArray type="Int32" Name="offsets" format="ascii">
4 8 12 16 20 24
</DataArray>
</Polys>
</Piece>
</PolyData>
</VTKFile>
本书为英文翻译而来,供学习vtk.js的人参考。