Mayavi: Анимация цвета лица triangular_mesh

Созданный на 26 янв. 2017  ·  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

Потратьте день или два, пытаясь исправить это, и следуйте тому же примеру. Огромное Вам спасибо!

Все 2 Комментарий

Я сильно очистил код, создав 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

Потратьте день или два, пытаясь исправить это, и следуйте тому же примеру. Огромное Вам спасибо!

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

Kekushke picture Kekushke  ·  9Комментарии

GaelVaroquaux picture GaelVaroquaux  ·  13Комментарии

rambalachandran picture rambalachandran  ·  9Комментарии

thoth291 picture thoth291  ·  10Комментарии

indranilsinharoy picture indranilsinharoy  ·  9Комментарии