读取.VTK polydata文件并将其转换为Numpy数组

时间:2016-07-21 12:57:14

标签: python arrays numpy vtk

我想将.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

请提出建议。

2 个答案:

答案 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)   方式。