vtkPolyData是一种具体的数据集类型,表示顶点、直线、多边形和三角形条带等渲染基本体。数据是完全非结构化的:点在超类vtkPointSet中表示,单元使用vtkCellArray的四个实例表示,这是一个连接列表(图16-3)。四个VTKCellarray代表顶点和多顶点;直线和多段线;三角形、四边形和多边形;和三角带。
图(a) vtkPolyData和vtkUnstructuredGrid的完整非结构化数据表示。单元指向定义它们的点;点指向使用它们的单元格。该结构可用于确定顶点、边和面邻居以及其他拓扑信息。
图(b) 非结构化数据由点(三维空间中的几何图形和位置)、单元阵列(单元连接性)、单元类型(提供对单元的随机访问)和单元链接(提供拓扑信息)表示。单元类型和单元链接阵列是按需创建的。
图16-3 表示非结构化数据。这种结构用于表示多边形和非结构化网格数据集。
由于vtkPolyData是非结构化的,因此必须显式表示单元和点。为了支持其超类vtkDataSet所需的一些方法(主要是拓扑方法,如GetPointCells()和GetCellNeights()),vtkPolyData具有复杂的内部数据结构,如图16-3所示。除了vtkPoints和vtkCellArrays之外,数据结构还包括单元类型(vtkCellTypes)和单元链接(vtkCellLinks)的列表。单元类型数组允许随机访问单元。这是必要的,因为vtkCellArray无法支持随机访问,因为单个单元的大小可能不同。单元链接数组通过主要包含对使用特定顶点的所有单元的引用来支持拓扑操作。(有关更多信息,请参阅可视化工具包文本。)这两个类的实例vtkCellTypes和vtkCellLinks仅在需要时实例化。也就是说,如果需要对单元格进行随机访问,则实例化vtkCellTypes;或者,如果需要拓扑信息,则会实例化vtkCellLinks。
虽然这个结构相当复杂,但好消息是,在很大程度上,内部结构的管理是由您负责的。通常,只要使用vtkDataSet的API来接口信息,就永远不需要直接操作该结构。在某些情况下,在编写筛选器或使用某些vtkPolyData或vtkUnstructuredGrid方法时,可能必须使用BuildCells()和BuildLinks()方法显式创建单元格类型和/或单元格链接数组。在极少数情况下,您可能希望直接操纵结构,删除点或单元,和/或修改链接数组以反映拓扑的变化。有关更多信息,请参阅第355页的“数据集支持的对象”一节。演示这些复杂运算符用法的代码示例包括Graphics/vtkDecimatePro、Graphics/vtkDelaunay2D和Graphics/vtkDelaunay3D类。
vtkPolyData Methods
vtkPolyData类相当复杂,重载了从其超类vtkDataSet和vtkPointSet继承的许多方法。大部分复杂性是由于在单独的VTKCellarray中定义顶点、直线、多边形和三角形条带,以及在网格上操作的特殊(几何)方法。
SetVerts (verts)
指定顶点vertices列表,verts。参数verts是vtkCellArray的一个实例。
注:顶点(vertices)和点(points)之间的区别在于点定义几何体;而顶点表示包含单个点的单元。单元可以在VTK中直接渲染,而点则不能。
verts = GetVerts()
Get the list of vertices. The list is an instance of vtkCellArray.
SetLines (lines)
Specify the list of lines, lines. The parameter lines is an instance of vtkCellArray.
lines = GetLines()
Get the list of lines. The list is an instance of vtkCellArray.
SetPolys(polys)
Specify the list of polygons, polys. The parameter polys is an instance of vtkCellArray.
polys = GetPolys()
Get the list of polygons. The list is an instance of vtkCellArray.
SetStrips(strips)
Specify the list of triangle strips三角形条带, strips. The parameter strips is an instance of vtkCellArray.
strips = GetStrips()
Get the list of triangle strips. The list is an instance of vtkCellArray
numVerts = GetNumberOfVerts()
Return the number of vertices.
numLines = GetNumberOfLines()
Return the number of lines.
numPolys = GetNumberOfPolys()
Return the number of polygons.
numStrips = GetNumberOfStrips()
Return the number of triangle strips.
Allocate(numCells, extend)
在调用InsertNextCell()(将在下面两项中介绍)方法之前执行初始内存分配。参数numCells是对要插入的单元数的估计;extend是用来扩展内部结构的大小(如果需要)。
Allocate(inPolyData, numCells, extend)
与上述方法类似,此方法为顶点、直线、多边形和三角形条形阵列分配初始存储。不过,它会检查提供的inPolyData,以确定要分配哪些数组;仅当inPolyData中的相应数组中存在数据时,才会分配它们。
cellId = InsertNextCell(type, npts, pts)
给定单元格类型(cell type)、type、单元格中的点数、npts和ids点的整数列表、pts,插入一个单元格并返回其单元格id。有关类型值的定义,请参见图19-20。在调用此方法之前,请确保调用Allocate()。
cellId = InsertNextCell(type, pts)
给定一个单元格类型、type,vtkIdList的实例、ts,插入一个单元格并返回其单元格id。
在调用此方法之前,请确保调用Allocate()。
Reset()
将vtkPolyData的此实例恢复到其初始状态,而不释放分配的内存。
BuildCells()
构建内部vtkCellTypes数组。这允许对单元格进行随机访问(例如GetCell()和其他特殊的vtkPolyData方法)。通常,除非对vtkPolyData执行专门的操作,否则不需要调用此方法。
BuildLinks()
构建内部vtkCellLinks阵列。这样可以访问拓扑信息,例如邻域(例如顶点、边、面邻域)。通常不需要调用此方法,除非对vtkPolyData执行特殊操作。
DeleteCells()
释放内部vtkCellTypes阵列(array)的内存,该阵列允许随机访问单元。此方法也会隐式删除单元格链接,因为它们不再有效
DeleteLinks()
Release the memory for the internal vtkCellLinks array
GetPointCells(ptId, ncells, cells)
Given a point id (ptId), return the number of cells using the point (ncells), and an integer array of cell ids that use the point (cells).
GetCellEdgeNeighbors(cellId, p1, p2, cellIds)
给定一个单元格(cellId)和两个点(p1和p2)形成单元格边缘,填写用户提供的使用边缘(p1,p2)的所有单元格列表。
GetCellPoints(cellId, npts, pts)
暂无评论内容