こんにちは、私は顔の色に対応するデータを持つ三角形メッシュを持っています。これは、#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()
私が望むことをしますが、アニメーションが進むにつれて急速に遅くなり、最終的には使用できなくなります。 私が試したほとんどの変更(パイプラインコマンドの削除など)では、イメージがまったく更新されません。 顔の色を更新する他のオプションはありますか?
tvtk.PolyData
手動で作成して、コードをたくさんクリーンアップしました。 ただし、もう1つの大きな変更点は、ドキュメントで、図を更新するために使用する必要があるのはPolyData.modified()
メソッドであると示唆されていることです。 ただし、これは私には機能しません-代わりに、 VTKDataSource.update()
メソッドを使用する必要があります。この場合、 VTKDataSource
はPolyData
をラップするため、トラバースして見つける必要があります。表面の親
したがって、最終的な作業コードは
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日を費やし、同じ例に従っていました。 どうもありがとうございました!
最も参考になるコメント
@RomeshA
これを修正するために1日か2日を費やし、同じ例に従っていました。 どうもありがとうございました!