3

我在 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]

我想知道是否没有通用的例程以方便、快速和安全的方式为我进行此类转换?

4

2 回答 2

4

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())
于 2016-10-28T10:47:46.267 回答
3

正如对原始帖子的评论所证实的那样,您可以尝试:

vtkout.to_array().T

这是一种不需要循环的直接方法。

于 2011-04-01T12:16:29.823 回答