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

vtkDataArray

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

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值