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]
このような変換を便利で迅速かつ安全な方法で行う一般的なルーチンがないのだろうか?