vtkDataSet
是一个表示数据集对象的抽象类,算法流处理对象都是数据集,下面是官方介绍
In vtk a dataset consists of a structure (geometry and topology) and
attribute data. The structure is defined implicitly or explicitly as
a collection of cells. The geometry of the structure is contained in
point coordinates plus the cell interpolation functions. The topology
of the dataset structure is defined by cell types and how the cells
share their defining points.
vtkDataSet由结构数据(geometry&topology) 和属性数据(attribute data)组成。
结构数据由一个cells集合显示或者隐式的定义。这里geometry 表示的是点的序号信息,topology由cell的类型表示这些点该怎么表达(点,线,面,多边形?)
属性数据要么是point data or cell data,典型的用于filter处理。
其实vtkDataSet主要作用就是定义了DataSet的几种属性,方便filter操作:
const DATASET_FIELDS = ['pointData', 'cellData', 'fieldData']
// Add dataset attributes
DATASET_FIELDS.forEach((fieldName) => {
if (!model[fieldName]) {
model[fieldName] = vtkDataSetAttributes.newInstance();
} else {
model[fieldName] = vtk(model[fieldName]);
}
});
vtkPointSet extends
vtkDataSet
上面的
vtkDataSet只定义几种属性数据,vtkPointSet表示点集,vtkPolygon继承于它。
其的points属性是一个vtkPoints数据对象,存放了顶点数据。
通过getPoints获取点集数据。
vtkPointSet is an abstract class that specifies the interface for
datasets that explicitly use "point" arrays to represent geometry.
For example, vtkPolyData and vtkUnstructuredGrid require point arrays
to specify point position, while vtkStructuredPoints generates point
positions implicitly.
下面是ts写它的定义
class vtkPointSet extends vtkDataSet{
//Constructor & properties
static newInstance(initalValues?:{}):vtkPointSet;
getNumberOfPoints();
getBounds();
computeBounds();
shallowCopy(other, debug = false);
getPoints():Core.vtkPoints;
setPoints(vtkPoints:Core.vtkPoints);
}
vtkpolydata
extends
vtkPointSet
除了本身是点集,还包含了cell信息,来表示这些点集如何拓扑(这些点构成什么样的片元,点?线?面?),cell信息包括(点verts ,线lines,三角面polys,三角带strips,)
下面几个方法可以获取对应的vtkCellArray数据
getVerts()
getLines()
getPolys()
getStrips()
vtkCellArray数据存放了每个Cell元素的顶点索引
如三角面: [3,posid1,posid2,posid3,3,posid2,posid3,posid4]
线:[2,pos1,pos2,2,pos2,pos3]
vtkDataArray
可以把它认为是一个ArrayBuffer的封装,points,cells数据最终都存在这里。
通过下面两个方法来存取数据,因为他继承于vtkObject ,在setData后会调用modified方法通知对象修改。
setData(typeArray)
getData()
所以vtkPolyData获取点数据和cell数据
let pld = sourcePxy.getDataset();
let points = pld.getPoints().getData();
let cells = pld.getPolys().getData();