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?
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!
Hilfreichster Kommentar
@RomeshA
Verbringen Sie ein oder zwei Tage damit, dies zu beheben, und befolgen Sie dasselbe Beispiel. Vielen Dank an dich!