我想将.VTK ASCII polydata文件转换为仅包含点坐标的numpy数组。我首先尝试了这个:https://stackoverflow.com/a/11894302但是它存储了一个(3,3)numpy数组,其中每个条目实际上是构成该特定单元格的三个点的坐标(在这种情况下是一个三角形)。但是,我不想要细胞,我想要每个点的坐标(没有重复)。接下来我尝试了这个:https://stackoverflow.com/a/23359921/6619666进行了一些修改。这是我的最终代码。而不是numpy数组,值被存储为元组,但我不确定该元组是否代表每个点。
import sys
import numpy
import vtk
from vtk.util.numpy_support import vtk_to_numpy
reader = vtk.vtkPolyDataReader()
reader.SetFileName('Filename.vtk')
reader.ReadAllScalarsOn()
reader.ReadAllVectorsOn()
reader.Update()
nodes_vtk_array= reader.GetOutput().GetPoints().GetData()
print nodes_vtk_array
请提出建议。
答案 0 :(得分:5)
您可以从polydata对象中获取点坐标,如下所示:
polydata = reader.GetOutput()
points = polydata.GetPoints()
array = points.GetData()
numpy_nodes = vtk_to_numpy(array)
答案 1 :(得分:4)
您可以使用dataset_adapter
中的vtk.numpy_interface
:
from vtk.numpy_interface import dataset_adapter as dsa
polydata = reader.GetOutput()
numpy_array_of_points = dsa.WrapDataObject(polydata).Points
来自Kitware blog:
可以访问PointData,CellData,FieldData,Points (仅限vtkPointSet的子类),Polygons(仅限vtkPolyData) 方式。