Mayavi: Animierende triangular_mesh Gesichtsfarbe

Erstellt am 26. Jan. 2017  ·  2Kommentare  ·  Quelle: enthought/mayavi

Hallo, ich habe ein dreieckiges Netz mit Daten, die der Gesichtsfarbe entsprechen, die ich mit der Lösung von # 253 z. B. darstellen kann

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)  

Ich bin mir jedoch nicht sicher, wie man dann Änderungen in der Farbe animiert. Zum Beispiel,

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

tut, was ich möchte, verlangsamt sich jedoch im Laufe der Animation schnell und ist schließlich unbrauchbar. Die meisten Änderungen, die ich versuche (zB das Entfernen der Pipeline-Befehle), führen dazu, dass das Bild überhaupt nicht aktualisiert wird. Gibt es eine andere Möglichkeit, die Gesichtsfarben zu aktualisieren?

Hilfreichster Kommentar

@RomeshA

Verbringen Sie ein oder zwei Tage damit, dies zu beheben, und befolgen Sie dasselbe Beispiel. Vielen Dank an dich!

Alle 2 Kommentare

Ich habe den Code viel aufgeräumt, indem ich manuell ein tvtk.PolyData . Die andere große Änderung besteht jedoch darin, dass die Dokumentation vorschlägt, dass die Methode PolyData.modified() zum Aktualisieren der Abbildung verwendet werden sollte. Dies funktioniert jedoch nicht für mich - stattdessen muss ich die Methode VTKDataSource.update() verwenden, bei der VTKDataSource die PolyData und daher durch Durchqueren der gefunden werden muss Oberflächeneltern

Der endgültige Arbeitscode war also

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

Verbringen Sie ein oder zwei Tage damit, dies zu beheben, und befolgen Sie dasselbe Beispiel. Vielen Dank an dich!

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

stefanoborini picture stefanoborini  ·  11Kommentare

scottstanie picture scottstanie  ·  4Kommentare

relyativist picture relyativist  ·  16Kommentare

thoth291 picture thoth291  ·  10Kommentare

dnacombo picture dnacombo  ·  7Kommentare