用python读取VTK文件

Posted

技术标签:

【中文标题】用python读取VTK文件【英文标题】:Read a VTK file with python 【发布时间】:2014-10-22 14:12:16 【问题描述】:

我有以下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)的可能性。有人可以帮我解决这个问题吗?

马塞尔

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于用python读取VTK文件的主要内容,如果未能解决你的问题,请参考以下文章

如何用C语言输出paraview能够直接读取的数据文件?

如何用vtk读取stl模型获取点

VTK-py读取与显示相关函数

VTK读取图片,然后QT显示

将文件BMP链读入VTK并通过Python+QT渲染体积3d

使用脚本将 VTK 转换为 JSON