VTK基本数据结构之数据的存储和表达

vtkDataArray

  VTK中的内存分配采用连续内存,可以快速地创建、删除和遍历,称之为数据数组(Data Array),用类vtkDataArray来实现。数组数据的访问是基于索引的,与C++一样,从零开始计数。以vtkFloatArray类来说明如何在VTK中实现连续内存的数据数组。
  如下图,变量Array是一个指向浮点型数组的指针,数组的长度由变量Size指定,由于数组的长度是动态增加的,所以当存储数据的数组长度超出指定的长度时,会自动触发Resize()操作来调整数组的长度,是数组的长度变成原来的两倍。MaxId是一个整型的偏移量,用来定义最后一个被插入的数据的索引。如果没有数据插入,MaxId等于-1。
  
VTK基本数据结构之数据的存储和表达_第1张图片

  许多可视化数据是由多个数据分量组成的,如RGB颜色数据由红、绿、蓝三个分量组成。为了在连续数组中表达这一类数据,引入了元组(Tuple)的概念。元组是数据数组的子数组,用于存储数据类型相同的分量数据,元组的组分个数称为元组的大小,在给定后不会改变。Number of Components是数据数组里元组的组分个数。元组的组分个数称为元组的大小。
  以vtkPolyData为例,该类由几何数据(vtkPoints)、拓扑数据(vtkCellArray)和属性数据(vtkPointData、vtkCellData和vtkFieldData)组成,而这些数据都是通过数据数组(vtkDataArray)的形式存储。

数据对象的表达

  VTK里的数据对象是作为vtkDataArray的数组(即数据数组的数组)实现的。vtkDataObject是一种通用的可视化数据的表达,内部封装了与可视化管线的执行相关的变量和方法,包括表达数据。vtkDataObject内部有一个vtkFieldData(场数据)的实例,负责对数据的表达。
  vtkFildData存储的数据是与数据对象的属性数据相关。以vtkPolyData为例,vtkPolyData内部存储了三种类型的数据,分别是vtkPointData、vtkCellData和vtkFieldData。vtkPointData是与每一个点相关联的数据,如某点上的温度,vtkCellData是与每一个单元相关联的数据,如某个三角形单元的面积,除点和单元数据以外的数据,应该使用vtkFieldData。

总结

vtkDataObject

VTK中的数据一般是以数据对象的形式表现的,vtkDataObject是VTK可视化数据最常用的表达形式,数据对象表现的数据可被可视化管线所处理,当数据对象组织成一种结构以后,这些数据才能被VTK的可视化算法处理。

vtkDataArray

数据数组vtkDataArray及其子类是建立VTK数据对象的基础。不同类型的数据对象都含有几何结构和拓扑结构信息,而这些结构信息的存储就是使用vtkDataArray及其子类,比如vtkPolyData里的vtkCellArray存储拓扑结构信息。

vtkFieldData

数据集里的属性数据是对拓扑结构和几何结构信息的补充。与数据集的点数据相关联的属性数据用vtkPointData来表达,与单元数据相关联的属性数据用vtkCellData来表达。二者都派生自vtkDataSetAttributes,而vtkDataSetAttributes派生自vtkFildData。换而言之,可以使用vtkFieldData来存储各种属性数据。

你可能感兴趣的:(Study-VTK,vtk,数据数组)