编程语言
首页 > 编程语言> > 使用python读取VTK文件

使用python读取VTK文件

作者:互联网

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

# 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)的可能性.有人可以帮我这个忙吗?

马塞尔

解决方法:

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

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

标签:vtk,python,openfoam
来源: https://codeday.me/bug/20191121/2049434.html