上一篇写了一些数据源的生成或者读取方法。下面开始严肃的讲一下VTK中的数据集,虽然感受有时候不会直接去用,可是感受这个是基础,因此要先看。c++
直接看《VTK用户手册》的第44页 3.1 可视化vtkDataSet类数据算法
在写这篇的时候,也结合了张晓东、罗火灵两位大大编写的《VTK图形图像开发进阶》。这本书的3.2 节也是讲数据对象和数据集编程
在VTK中,数据通常以数据对象的形式表现。数据对象是数据的集合,数据对象表现的数据是能够被可视化管线处理的数据,只有当数据对象被组织成一种结构后,才能被VTK提供的可视化算法所处理。spa
将数据对象组织成一种结构并赋予相应的属性值,就造成了数据集(Dataset)。VTK里与数据集对应的类是vtkDataSet,该类从vtkdataObject直接派生。(《VTK图形图像开发进阶》)对象
vtkDataSet 是全部数据集类的父类,是一个抽象类,不能实例化。开发
vtkDataSet由两个部分组成:组织结构(Organizing Structure)以及与组织结构相关的属性数据(Attribute Data)
get
而vtkDataSet的组织结构又由拓扑结构(Topology)和几何结构(Geometry)两部分组成。基础
《VTK图形图像开发进阶》这本书上将的很清晰(P49),特摘录下来(我按照本身的理解从新组织了一下):可视化
几何结构描述了对象的空间位置关系(好比,要画一个三角形,首先须要指定三角形的三个顶点坐标P1,P2,P3,在VTK中指定点用PointData)进阶
拓扑结构描述了对象的构成形式(好比,上面所说的三个顶点P1,P2,P3在不指定拓扑关系的时候,有不少种组织形式,好比,三个孤立的点,好比一条直线加一个孤立的点,或者是一段折线,可是指定了拓扑结构,好比说按照P1-P2-P3的顺序用直线链接起来,那么他就是一个三角形,vtk用单元数据来描述拓扑结构)
上面的三个点P1,P2,P3定义了数据集的几何结构,而P1,P2,P3顺序链接方式定义了数据集的拓扑结构。也就是点数据定义了数据集的几何结构,单元数据定义了数据集的拓扑结构,要造成完整的数据集必须有几何和拓扑两种结构。
拓扑结构具备几个变换不变性。例如说一个多边形是三角形,即指器拓扑结构,而给定每一个点的坐标,则为其几何结构。
几何结构是一种空间描述,与空间变换有紧密联系,常见的变换有旋转、平移和缩放。
属性数据是对拓扑结构和几何信息的补充,属性数据能够是某个点的温度值,也能够是某个单元的质量。
可能单看上面以为有点蒙,也可能会以为好像太理论没什么用,那能够直接看《VTK图形图像开发进阶》的第62页,这里讲了数据集中的一种,vtkImageData,这个数据集的应用十分普遍,vtkImageData类型的数据集是按照规则排列在矩形方格中的点和单元的集合,以下图所示,若是数据集的点和单元排列在平面(二维)上,则称此数据集为像素映射(pixmap)、位图或图像。若是排列在层叠面(三维)上,则称为体。vtkImageData 是由一维的线、二维的像素或三维的体素组成,vtkImageData的结构以及拓扑都是规则的,所以每一个点的位置能够隐式的表达,只须要知道vtkIamgeData数据的维数、起始点的位置和相邻点之间的间距,就能够计算出每一个点的空间位置。数据维数用一个三元组(nx,ny,nz)来表示,分别表示在X,Y,Z 方向上点的个数。vtkImageData数据集的点的个数一共是 nx*ny*nz,单元的个数一共是(nx-1)*(ny-1)*(nz-1)。
上面的网址中也详细的讲解了,VTK的数据集和数据属性,这时周振环老师的《医学图像编程技术》中的内容。
下面简单写几个例子,c++实现的例子在书上面都有了,我就把他们改为C#下的实现吧。
代码有点多放在下一篇。