使用Python读取VTK文件

3
我有以下由OpenFOAM生成的VTK文件:
```html

我有以下由OpenFOAM生成的VTK文件:

```
# vtk DataFile Version 2.0
sampleSurface
ASCII
DATASET POLYDATA
POINTS 4 float
0.0 0.0 0.0
1.0 0.0 0.0
0.0 1.0 0.0
1.0 1.0 0.0

POLYGONS 2 8
3 0 1 2
3 2 1 3

POINT_DATA 4
FIELD attributes 1
U 3 4 float
1.0 2.0 3.0
1.0 2.0 3.0
1.0 2.0 3.0
1.0 2.0 3.0

它是3D域的一个平面切割面。有4个点,形成两个三角形。在每个点上,定义向量U。我可以使用以下代码获取点数和点:

import vtk
reader = vtk.vtkPolyDataReader()
reader.SetFileName('myVTKfile.vtk')
reader.ReadAllScalarsOn()
reader.ReadAllVectorsOn()
reader.ReadAllTensorsOn()
reader.Update()
vtkdata = reader.GetOutput()

print vtkdata.GetNumberOfPoints()
print vtkdata.GetPoint(0)

很遗憾,我还没有找到获取三角形(多边形)列表和数据列表(向量U)的可能性。有人能帮我解决这个问题吗?

马塞尔

1个回答

3

对于点数据(如标量和向量),您可以通过以下方式访问:

pointData = vtkdata.GetPointData()
vectorData = pointData.GetVectors()

vectorData将包含一个vtkDataArray,您可以使用它来处理数据。

对于几何数据,您可以使用GetVerts、GetLines、GetPolys(三角形、四边形和其他多边形),以及可能的GetStrips(用于三角形带)方法。对于没有粘连到三角形带中的三角形,您可以使用以下方式访问数据:

polyCells = vtkdata.GetPolys()
numPolys = polyCells.GetNumberOfCells() #Number of polygons (triangles in your case)

从Python中访问单元格数据(它只是点索引的列表)有点麻烦,而且显然自我上次使用VTK编写代码以来已经发生了变化(当时使用的是VTK 5.x)。至少,您可以获取单元格数组并按照此处描述的方式进行扫描: http://vtk.1045678.n5.nabble.com/vtkCellArray-in-python-td3348424.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接