嗨,我有一个三角形网格,其中包含与面部颜色对应的数据,我可以使用 #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
清理代码。 然而,另一个重大变化是文档表明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
花一两天时间尝试解决此问题,并遵循相同的示例。 非常感谢你!
最有用的评论
@RomeshA
花一两天时间尝试解决此问题,并遵循相同的示例。 非常感谢你!