2016-05-09 6 views
0

私はmlab.contour3dプロットから三角化vtkPolyDataを取得しようとしています。 minimal surfacesを適切に三角測量するのが最も速い方法だと思われるので、私はmayaviを使用しています。私はvtkPolyDataとして必要です。なぜなら、.stlファイルとして保存したいからです。ここでmayavi mlab.contour3dプロットをvtkPolyDataに変換してください

は、私のコードのMWEです:

import numpy as np 
from mayavi import mlab 

def fun(x, y, z): 
    return np.cos(x) + np.cos(y) + np.cos(z) 

x, y, z = np.mgrid[-1:1:100j, -1:1:100j, -1:1:100j] 
contour = mlab.contour3d(x, y, z, fun) 
mlab.show() 

私はmayaviから、次に取得することは、すでに三角とVTK(またはtvtk)を使用して表示される面であるので、vtkPolyDataを得ることが可能であるべきですそこから。しかし、私がこれまでに見つけた唯一の方法は、mlab.savefig(test.obj)を使用して.objファイルをエクスポートすることです(これは悪いです。mayaviのUIが開くたびにファイルを保存するために時間がかかるため)。vtkOBJReaderを使用してファイルを再度インポートすると、 vtkPolyDataしたいです。

誰かがこれを行うためのより簡単な方法を知っていますか?

編集:私の問題をもう少し明確にするために、私は視覚化からデータにアクセスできます。 mayavi.tools.pipeline.get_vtk_src()であるが、それはvtkImageDataの形で来る。誰かがそれをvtkPolyDataに変換する方法を知っていれば、それも解決策になります。

答えて

1

私は解決策を見つけました。

import numpy as np 
from mayavi import mlab 

def fun(x, y, z): 
    return np.cos(x) + np.cos(y) + np.cos(z) 

x, y, z = np.mgrid[-1:1:100j, -1:1:100j, -1:1:100j] 
contour = mlab.contour3d(x, y, z, fun) 
actor = contour.actor.actors[0] 
polydata = tvtk.to_vtk(actor.mapper.input) # solution 
mlab.show() 

このトリックは、PolyDataMapperであるパイプラインからマッパーにアクセスするように思われます。それで私はちょうどtvtk.to_vtk()関数を使って、より少なくとも私が好むvtkを続けることができます。

関連する問題