Mayavi: 三角形のメッシュの顔の色をアニメーション化する

作成日 2017年01月26日  ·  2コメント  ·  ソース: enthought/mayavi

こんにちは、私は顔の色に対応するデータを持つ三角形メッシュを持っています。これは、#253のソリューションを使用してプロットできます。

mesh = mlab.triangular_mesh(self.vertices[:,0], self.vertices[:,1], self.vertices[:,2], self.triangles,representation='wireframe',opacity=0)
mesh.mlab_source.dataset.cell_data.scalars = color
mesh.mlab_source.dataset.cell_data.scalars.name = 'Cell data' 
mesh.mlab_source.update() 
mesh2 = mlab.pipeline.set_active_attribute(mesh,cell_scalars='Cell data') 
surf = mlab.pipeline.surface(mesh2)  

ただし、色の変化をアニメーション化する方法がわかりません。 例えば、

@mlab.animate(delay=100)
def anim():
    f = mlab.gcf()
    for i in range(0,data.shape[0]):
        mesh.mlab_source.dataset.cell_data.scalars = data[i,:]
        mesh.mlab_source.dataset.cell_data.scalars.name = 'Cell data' 
        mesh.mlab_source.update()
        mesh2 = mlab.pipeline.set_active_attribute(mesh,cell_scalars='Cell data') 
        mlab.pipeline.surface(mesh2) 
        yield
anim()
mlab.show()

私が望むことをしますが、アニメーションが進むにつれて急速に遅くなり、最終的には使用できなくなります。 私が試したほとんどの変更(パイプラインコマンドの削除など)では、イメージがまったく更新されません。 顔の色を更新する他のオプションはありますか?

最も参考になるコメント

@RomeshA

これを修正するために1日か2日を費やし、同じ例に従っていました。 どうもありがとうございました!

全てのコメント2件

tvtk.PolyData手動で作成して、コードをたくさんクリーンアップしました。 ただし、もう1つの大きな変更点は、ドキュメントで、図を更新するために使用する必要があるのはPolyData.modified()メソッドであると示唆されていることです。 ただし、これは私には機能しません-代わりに、 VTKDataSource.update()メソッドを使用する必要があります。この場合、 VTKDataSourcePolyDataをラップするため、トラバースして見つける必要があります。表面の親

したがって、最終的な作業コードは

from mayavi import mlab 
from tvtk.api import tvtk

polydata = tvtk.PolyData(points=self.vertices, polys=self.triangles)
polydata.cell_data.scalars = np.ravel(data[:,0].copy())
polydata.cell_data.scalars.name = 'celldata'
mesh = mlab.pipeline.surface(polydata)

@mlab.animate(delay=10)
def anim():
    for i in range(0,data.shape[0]):
        polydata.cell_data.scalars = np.ravel(data[:,i].copy())
        polydata.cell_data.scalars.name = "celldata" 
        # polydata.modified()  # does not work
        mesh.parent.parent.update() # works
        yield

anim()
mlab.show()

@RomeshA

これを修正するために1日か2日を費やし、同じ例に従っていました。 どうもありがとうございました!

このページは役に立ちましたか?
0 / 5 - 0 評価

関連する問題

dnacombo picture dnacombo  ·  7コメント

rahulporuri picture rahulporuri  ·  3コメント

stefanoborini picture stefanoborini  ·  11コメント

scottstanie picture scottstanie  ·  4コメント

relyativist picture relyativist  ·  16コメント