3

Python スクリプトで Mayavi2 を使用して 3D 等値面を計算しています。その結果、vtkPoints オブジェクトを取得します。ここで、この vtkPoints オブジェクト (以下のコード サンプルの「vtkout」) を、x、y、z のすべての値を含む 3 行の単純な numpy 配列に変換したいと考えています。次のようなコードを使用して 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 に答える