[英]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.