我在Python脚本中使用Mayavi2计算3D等值面。结果,我得到了一个vtkPoints对象。现在,我想将这个vtkPoints对象(下面代码示例中的'vtkout')转换为一个简单的numpy数组,其中包含所有x,y和z值的3行。
我使用以下代码获取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]
我想知道是否有一种通用的程序可以以方便、快捷和安全的方式为我完成这些转换?
numpy.frombuffer(vtkout)
这样的方法,然后进行重塑。 - Sven Marnachvtkout.to_array()
。如果您提供一个简短的例子和适当的导入语句来生成一个样本vtkPoints对象,我可以为您提供更进一步的帮助。 - JoshAdel