簡體   English   中英

使用python讀取VTK文件

[英]Read a VTK file with python

我有以下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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM