VTK 学习----VTK对象-数据类

4.4.1 vtkDataObject

vtkDataObject 

可视化数据的一般表示。

vtkDataObject是可视化数据的一般表示。它用于封装用于可视化网络执行的实例变量和方法,以及表示由字段组成的数据(即,仅仅是非结构化的数据堆)。这将与vtkDataSet进行比较,vtkDataSet是具有几何和/或拓扑结构的数据。

vtkDataObjects用于通过vtkFieldData实例变量表示任意数据存储库。这些数据必须最终映射到vtkDataSet的具体子类才能实际显示。

vtkAnnotation

存储注释构件的集合。

vtkAnnotation是注释属性的集合,以及指示注释引用的数据部分的关联选择。

vtkAnnotationLayers

存储有序的注释集集合。

vtkAnnotationLayers存储注释图层的集合。每个图层可以包含任意数量的vtkAnnotation对象。层的排序引入了注释的优先级。较高层中的注释可能会掩盖较低层中的注释。

vtkArrayData

包含多个vtkArray对象的管道数据对象。

因为vtkArray不能作为数据对象的属性存储,所以需要“载体”对象来通过管道传递vtkArrayvtkArrayData充当零对多vtkArray实例的容器,可以通过从零开始的索引检索。请注意,存储在vtkArrayData的数组集合可能没有相关的类型,维度或范围。

vtkBSPCuts

此类表示3D空间的轴对齐二进制空间分区。

该类在vtkKdNodes树的vtkKdTree表示(由vtkDistributedDataFilter使用)和图分区库(如Zoltan)提供的紧凑数组表示之间进行转换。这种表示形式可以用于消息传递。

vtkGenericDataSet

定义数据集接口。

在VTK中,空间 - 时间数据是根据数据集定义的。数据集由几何(例如,点),拓扑(例如,单元)和属性(例如,标量,向量等)组成.vtkGenericDataSet是定义此抽象的抽象类。

由于vtkGenericDataSet提供了一个操作数据的通用接口,因此处理它的算法往往比专门用于特定数据类型的算法慢。因此,有一些具体的非抽象子类可以更有效地表示和提供对数据的访问。请注意,当前可在VTK / GenericFiltering /子目录中找到用于处理此数据集类型的过滤器。

不像vtkDataSet类,vtkGenericDataSet提供了更灵活的接口包括迭代器的支持。vtkGenericDataSet还设计用于将VTK连接到外部仿真包,而无需复制内存以获取更多信息。因此,vtkGenericDataSet在适配器框架中起着核心作用。

vtkGeoJSONFeature

表示GeoJSON几何要素和属性。

解析GeoJSON输入时,vtkGeoJSONReader使用此类。它不直接由应用程序实例化。

vtkImageStencilData

vtkImageStencilData以一种在速度和存储空间方面都很有效的方式描述了一个图像模板。模板区段存储在图像中的每个x行中(如果需要,每行多个区段),可以通过getnext区段()方法检索。

vtkPiecewiseFunction

定义分段函数映射。这种映射允许添加控制点,并允许用户控制控制点之间的功能。基于锐度和中点参数,在控制点之间采用分段hermite曲线。锐度为0时得到分段线性函数,锐度为1时得到分段常数函数。中点是曲线达到Y中值的控制点之间的归一化距离。添加节点时指定的中点和锐度值用于控制到节点范围之外的下一个节点的转换(忽略最后一个节点的值),如果Clamping处于关闭状态,则值为0,如果为Clamping,则值为最近的节点点。使用传统的添加点的方法(没有锐度和中点参数)将默认为中点= 0.5(控制点之间的一半)和锐度= 0.0(线性)。

vtkTable

一个表,其中包含类似类型的数据列。

vtkTable是用于存储数据列的基本数据结构。在内部,列存储在名为RowData 的vtkDataSetAttributes结构中。但是,使用vtkTable API还可确保每列具有相同数量的条目,并提供行访问(使用vtkVariantArray)和单一条目访问(使用vtkVariant)。

vtkDataObject继承的字段数据可用于存储与表相关的元数据。

应该使用vtkTable API来更改表数据。对GetRowData()返回的对象执行操作可能会产生意外结果。vtkTable允许用户使用SetRowData()设置字段数据; 表中的行数由第一个数组中的元组数决定(假设所有数组的长度相同)。

添加了AddColumn的每个列必须将其名称设置为唯一的非空字符串,以便GetValue()正常运行。

4.4.2 vtkDataSet

vtkDataSet

用于指定数据集行为的抽象类。

vtkDataSet是一个抽象类,它指定数据集对象的接口。vtkDataSet还提供了有关数据信息的方法,例如中心,边界框和代表长度。

在vtk中,数据集由结构(几何和拓扑)和属性数据组成。结构被隐式或显式地定义为单元的集合。结构的几何形状包含在点坐标和单元插值函数中。数据集结构的拓扑由单元类型以及单元如何共享其定义点来定义。

vtk中的属性数据是点数据(点数据)或单元数据(单元数据)。通常,过滤器对点数据进行操作,但是一些过滤器可以对单元数据进行操作,单元数据和点数据可以是一个,也可以不是。

vtkImageData

拓扑和几何规则的数据阵列。

vtkImageData是一个数据对象,它是vtkDataSet的具体实现。vtkImageData表示几何结构,它是拓扑和几何常规点阵列。

vtkStructuredPoints

ImageData的子类。

StructuredPoints是ImageData的一个子类,它要求数据范围与更新范围精确匹配。Normall图像数据允许数据范围可能大于更新范围。StructuredPoints对原点的定义也与vtkImageData不同。对于结构化点,原点是第一个点的位置。而图像将原点定义为点(0,0,0)的位置。图像原点存储在ivar中,结构化点有特殊的方法来设置/获取原点/区段。

vtkUniformGrid

图像数据与消隐。

vtkUniformGrid是的子类vtkImageData。除了所有图像数据功能外,它还支持消隐。

vtkRectilinearGrid

拓扑规则的数据集,在三个坐标方向上具有可变间距。

vtkRectilinearGrid是一个数据对象,它是vtkDataSet的具体实现。vtkRectilinearGrid表示拓扑规则的几何结构,在三个坐标方向xyz上具有可变间距。

要定义vtkRectilinearGrid,必须指定数据的尺寸,并提供三个值数组,指定沿xyz轴的坐标。使用三个vtkDataArray对象指定坐标数组(一个用于x,一个用于y,一个用于z)。

确保网格的尺寸与xyz方向上的坐标数相匹配。否则,可能导致不可预测的结果(包括程序失败)。此外,即使数据集拓扑为2D,1D或0D,您也必须在所有三个方向上提供坐标。

4.4.3 vtkPointSet

vtkPointSet

用于指定数据集行为的抽象类。

vtkPointSet是一个抽象类,它指定显式使用“点”数组表示几何的数据集的接口。例如,vtkPolyDatavtkUnstructuredGrid需要点数组指定点位置,而vtkStructuredGrid隐式生成点位置。

vtkExplicitStructuredGrid

具有显式拓扑和几何的结构化网格。

vtkExplicitStructuredGrid是一个数据对象,是vtkDataSet的具体实现。vtkExplicitStructuredGrid是一种六面体拓扑规则阵列的几何结构。这种拓扑结构是一个立方体的拓扑结构,该立方体被细分为一组常规的较小的立方体。每个单元都可以用i-j-k索引寻址,但是相邻的六面体不一定共享一个面,并且六面体可以被消隐(关闭)。

与非结构化网格一样,vtkExplicitStructuredGrid具有显式的点坐标和单元格到点的索引。与非结构化网格不同,vtkExplicitStructuredGrid不保留单元格类型列表,因为所有可见单元格都是六面体。vtkExplicitStructuredGrid可以利用它的布局来执行基于i、j、k参数的操作,类似于结构化网格。这使得该类上的一些操作更快,同时又不失单元格->点映射的灵活性。这个类最常见的用法是在您有所有六面体,但单元格使用的点并不完全由i、j、k参数定义使用。这方面的一个例子是一个结构网格,其中一半的体素位移发生在它的中间,比如一个地质断层。

点的顺序和个数是任意的。单元格的顺序和数量必须与网格维数- 1所指定的一致,因为在vtk结构化数据集中,维数与点对应。其中dims[]为网格在i-j-k拓扑方向上的维数。单元数为(dims[0] - 1) * (dims[1] - 1) * (dims[2] - 1)。

vtkLabelHierarchy

包含标签的八叉树。

该类表示用于表示呈现优先级的层次结构中的标签。保持了一个标签的二叉树,它在空间上细分了标签锚的边界。标签占据树的哪一层决定了它的优先级;那些在在高层次的树将更有可能比那些在地层次的树更容易渲染。

将vtkLabelHierarchy对象传递给vtkLabelPlacementMapper过滤器,以便动态地、不重叠地按帧放置标签。

注意,如果我们有一个d维的二叉树,并且我们希望每个节点(所有节点,而不仅仅是叶子节点)上有固定数量的$n$标签,我们可以在假设点分布均匀的情况下计算所需树的深度。给定总共的$N$点数,我们知道$\frac{N}{|T|} = N$,其中$|T|$是树的基数(即,其中包含的节点数)。因为我们有一个均匀的分布,所以树将被均匀地细分,因此$|T| = 1 + 2^d + \left(2^d)^2 + \cdots + \left(2^d)^k$,其中$d$是输入点的维数(目前固定在3)。当$k$变大时,$|T|\大约2 \左(2^d)^k$。利用这个近似,我们可以解出$k$:

\[k = \frac{log{N}{2n}}}{\log{2^d}} \]

给定一组$N$ input标签锚,我们将计算$k$,然后将锚放入树的$k$级别的树节点中。在这之后,所有的节点都在树的叶子上,并且这些叶子在第k层;没有锚将在1,2层,为了解决这个问题,我们将选择向上移动一些锚。向上移动的确切数字取决于TargetLabelCount。我们将在每个节点上移动尽可能多的TargetLabelCount。

您应该避免出现MaximumDepth不允许TargetLabelCount或每个节点上的条目更少的情况。最大深度是硬限制,而TargetLabelCount是建议的最优值。每个节点的TargetLabelCount条目将远远多于TargetLabelCount条目,并且事情将变得非常缓慢。

vtkPath

表示由贝塞尔曲线定义的路径的具体数据集。

vtkPath为线段、二阶(二次)和三阶(三次)Bezier曲线组成的路径提供了一个容器。

vtkPolyData

示顶点、线、多边形和三角形条的具体数据集。

vtkPolyData是一个数据对象,它是vtkDataSet的具体实现。vtkPolyData表示由顶点,线,多边形和/或三角形条组成的几何结构。还表示了点和单元属性值(例如,标量,向量等)。

vtkPolyData支持的实际单元类型(vtkCellType.h)有:vtkVertex、vtkPolyVertex、vtkLine、vtkPolyLine、vtkTriangle、vtkQuad、vtkPolygon和vtkTriangleStrip。

vtkPolyData对象的一个重要特性是可以使用特殊的遍历和数据操作方法来处理数据。这些方法通常比vtkDataSet方法更有效,应尽可能使用。例如,遍历数据集中的单元格,我们将使用GetCell()。要使用vtkPolyData遍历单元格,我们将检索表示多边形的单元格数组对象(例如使用GetPolys()),然后使用vtkCellArray的InitTraversal()和GetNextCell()方法。

因为vtkPolyData是由四个独立的vtkCellArray实例实现的,分别表示0D顶点、1D行、2D多边形和2D三角形带,所以可以创建由多种单元格类型混合组成的vtkPolyData实例。由于类的设计,在如何将混合单元格类型插入到vtkPolyData以及它们处理和呈现的顺序上存在一定的限制。为了保持单元格id的一致性,并确保正确呈现具有单元格数据的单元格,用户必须按照顶点(vtkVertex和vtkPolyVertex)、线(vtkLine和vtkPolyLine)、多边形(vtkTriangle、vtkQuad、vtkPolygon)和三角形条(vtkTriangleStrip)的顺序插入混合单元格。

在处理混合单元类型的vtkPolyData时,有些过滤器可能以不同的方式处理单元。有些人会将一种类型转换成另一种类型(例如,vtkTriangleStrip转换成vtktriangle)或期望某种类型(vtkDecimatePro需要三角形或三角形带;vtkTubeFilter需要预计行)。仔细阅读每个过滤器的文档,了解如何处理vtkPolyData的每个部分。

vtkStructuredGrid

拓扑规则的数据阵列。

vtkStructuredGrid是一个数据对象,它是vtkDataSet的具体实现。vtkStructuredGrid表示几何结构,它是拓扑规则的点阵列。拓扑结构是一个多维数据集的拓扑结构,该多维数据集已细分为较小立方体的常规数组。每个点/单元可以用ijk索引寻址。示例包括有限差分网格。

点的顺序和数量必须与网格尺寸指定的相匹配。点顺序以i增加最快(从0 <= i <dims [0]),然后j(0 <= j <dims [1]),然后k(0 <= k <dims [2])其中dims [ ]是ijk拓扑方向上网格的维数。点数是dims [0] * dims [1] * dims [2]。对于网格的单元格也是如此。单元格的顺序和数量必须与网格尺寸指定的顺序和数量相匹配。单元格顺序以i增加最快(从0 <= i <(dims [0] -1)),然后j(0 <= j <(dims [1] -1)),然后k(0 <= k < (dims [2] -1))单元格数是(dims [0] -1)*(dims [1] -1)*(dims [2] -1)。

vtkStructuredGrid能够清空或“关闭”数据集中的点和单元格。这是通过在ghost数组中为需要消隐的每个点/单元设置vtkDataSetAttributes :: HIDDENPOINTvtkDataSetAttributes :: HIDDENCELL来完成的。

vtkUnstructuredGrid

表示所有可能的单元格类型的任意组合的dataset。

vtkUnstructuredGrid是一个数据对象,它是vtkDataSet的具体实现。vtkUnstructuredGrid表示任何单元格类型的任意组合。这包括0D(例如,点),1D(例如,线,折线),2D(例如,三角形,多边形)和3D(例如,六面体,四面体,多面体等)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dylan55_you

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值