我在Python脚本中使用Mayavi2来计算3d等值面。结果我得到了一个vtkPoints对象。现在我想将这个vtkPoints对象(下面的代码示例中的'vtkout')转换为一个简单的numpy数组,其中3行包含所有x,y和z值。 我使用这样的代码获得vtkout:
import numpy
from enthought.mayavi import mlab
import array
randVol = numpy.random.rand(50,50,50) # fill volume with some random potential
X, Y, Z = numpy.mgrid[0:50, 0:50, 0:50] # grid
surf = mlab.contour3d(X, Y, Z, randVol, contours=[0.5]) # calc contour
vtkout = surf.contour.contour_filter.output.points # get the vtkPoints object
目前我使用以下代码将点提取到数组中:
pointsArray = numpy.zeros((3, vtkout.number_of_points))
for n in range(vtkout.number_of_points):
pointsArray[0,n] = vtkout[n][0]
pointsArray[1,n] = vtkout[n][1]
pointsArray[2,n] = vtkout[n][2]
我想知道是否没有一般程序可以方便,快捷和安全的方式为我做这样的转换?
答案 0 :(得分:3)
正如对原始帖子的评论所证实,您可以尝试:
vtkout.to_array().T
这是一种不需要循环的直接方法。
答案 1 :(得分:2)
vtk_points.to_array()
对我不起作用(to_array()似乎不存在于普通的vtk中。)
在我的案例中实际工作的是使用numpy_support
模块:
from vtk.util import numpy_support
as_numpy = numpy_support.vtk_to_numpy(vtk_points.GetData())