Mayavi: Animando el color de la cara triangular_mesh

Creado en 26 ene. 2017  ·  2Comentarios  ·  Fuente: enthought/mayavi

Hola, tengo una malla triangular con datos correspondientes al color de la cara, que puedo trazar usando la solución del n. ° 253, por ejemplo

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)  

Sin embargo, no estoy seguro de cómo animar los cambios de color. Por ejemplo,

@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()

hace lo que me gustaría, pero se ralentiza rápidamente a medida que avanza la animación y, finalmente, no se puede utilizar. La mayoría de los cambios que intento (por ejemplo, eliminar los comandos de canalización) dan como resultado que la imagen no se actualice en absoluto. ¿Existe alguna otra opción para actualizar los colores de la cara?

Comentario más útil

@RomeshA

Pasé uno o dos días tratando de solucionar este problema y seguí el mismo ejemplo. ¡Muchísimas gracias a ti!

Todos 2 comentarios

Limpié mucho el código creando un tvtk.PolyData manualmente. Sin embargo, el otro gran cambio es que la documentación sugiere que el método PolyData.modified() es lo que debería usarse para actualizar la figura. Sin embargo, esto no funciona para mí; en su lugar, tengo que usar el método VTKDataSource.update() , donde VTKDataSource envuelve el PolyData y, por lo tanto, debe encontrarse atravesando el padres superficiales

Entonces el código de trabajo final fue

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

Pasé uno o dos días tratando de solucionar este problema y seguí el mismo ejemplo. ¡Muchísimas gracias a ti!

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

thoth291 picture thoth291  ·  10Comentarios

kitchoi picture kitchoi  ·  10Comentarios

Mallcock1 picture Mallcock1  ·  10Comentarios

igamenovoer picture igamenovoer  ·  7Comentarios

anntzer picture anntzer  ·  7Comentarios