Mayavi: mlab.axes() verursacht eine Ausnahme in Mayavi 4.5.0

Erstellt am 6. Jan. 2017  ·  9Kommentare  ·  Quelle: enthought/mayavi

Hallo, vor kurzem habe ich Mayavi von 4.4.4 auf 4.5.0 aktualisiert. Nach dem Update beobachte ich eine Ausnahme, wenn ich die mlab Funktion axes() . Hier ist ein Testcode (die fehlerverursachende Zeile wird durch den Kommentar angezeigt):

from mayavi import mlab
from numpy import pi, sin, cos, mgrid
dphi, dtheta = pi/250.0, pi/250.0
[phi,theta] = mgrid[0:pi+dphi*1.5:dphi,0:2*pi+dtheta*1.5:dtheta]
m0 = 4; m1 = 3; m2 = 2; m3 = 3; m4 = 6; m5 = 2; m6 = 6; m7 = 4;
r = sin(m0*phi)**m1 + cos(m2*phi)**m3 + sin(m4*theta)**m5 + cos(m6*theta)**m7
x = r*sin(phi)*cos(theta)
y = r*cos(phi)
z = r*sin(phi)*sin(theta)
s = mlab.mesh(x, y, z)
mlab.axes(color=(0.9,0.9,0.9))       # LINE CAUSING ERROR
mlab.show()

Wenn ich den obigen Code in einer Windows- und Anaconda-Umgebung ausführe, sehe ich die folgenden Fehlermeldungen:

Popup-Nachricht (Feld):

Exception
In c:\anaconda\lib\site-packages\mayavi-4.5.0-py2.7-win-amd64.egg\tvtk\tvtk_base.py:569
TypeError: SetInputData argument 1:method requires a vtkDataSet, a vtkPolyDataNormals was provided. (in _wrap_call)

Meldung im Konsolenfenster:

No handlers could be found for logger "mayavi.core.common"
Exception occurred in traits notification handler.
Please check the log file for details.
Exception occurred in traits notification handler for object: <mayavi.tools.decorations.Axes object at 0x0000000011AC00A0>, trait: extent, old value: [0 0 0 0 0 0], new value: [-1.53801118  1.53801118 -2.          2.27326963 -1.53801118  1.53801118]
Traceback (most recent call last):
  File "C:\Anaconda\lib\site-packages\traits\trait_notifiers.py", line 340, in __call__
    self.handler( *args )
  File "C:\Anaconda\lib\site-packages\mayavi-4.5.0-py2.7-win-amd64.egg\mayavi\tools\decorations.py", line 373, in _extent_changed
    axes.module_manager.source.outputs[0].bounds
AttributeError: 'PolyDataNormals' object has no attribute 'bounds'

Zusatzinformation

Umgebung, in der die obige Ausnahme auftritt
Betriebssystem: Windows 10
Python-Installation: Python 2.7 installiert mit Anaconda
Mayavi-Paket: mayavi 4.5.0 py27_0 menpo
VTK-Paket: vtk 7.0.0 py27_0 menpo
PyQt-Paket: pyqt 5.6.0 py27_1

Umgebung, in der der obige Code ausgeführt wird OK
Betriebssystem: Windows 7
Python-Installation: Python 2.7 installiert mit Anaconda
Mayavi-Paket: mayavi 4.4.4 py27_0 menpo
VTK-Paket: vtk 7.0.0 py27_0 menpo
PyQt-Paket: pyqt 4.11.4 py27_5

Hilfreichster Kommentar

Wenn es immer noch von Interesse ist, hatte ich mit einer ähnlichen Konfiguration wie die von Jeitan gerade den gleichen Fehler und habe ihn durch Bearbeiten von mayavi\modules\axes.py in update_pipeline behoben und Folgendes geändert:
self.configure_input_data(self.axes, src.outputs[0])
zu:
self.configure_input_data(self.axes, src.outputs[0].output)

(Erstes ist Typ PolyDataNormals, letzteres ist PolyData, das von DataSet abgeleitet wird.)

Alle 9 Kommentare

Für das, was es wert ist, habe ich diesen Fehler gerade unter den folgenden Bedingungen dupliziert:

Betriebssystem: Windows 10
Python-Installation: Python 2.7 installiert mit Anaconda
Mayavi-Paket: mayavi 4.5.0 py27_0
VTK-Paket: vtk 6.3.0 py27_1
PyQt-Paket: pyqt 4.11.4 py27_4

Wenn ich mit conda install mayavi=4.4 * downgrade, funktioniert der Code
Mayavi -> 4.4.0
VTK -> 5.10.1

*Nicht damit zusammenhängender Hinweis - dies führt zu einem Downgrade von numpy von 1.10 auf 1.9.3, was Spyder kaputt macht, sodass Sie es manuell erneut aktualisieren müssen

Ich habe das gleiche Problem hier. Hat keiner eine Ahnung?

Wenn es immer noch von Interesse ist, hatte ich mit einer ähnlichen Konfiguration wie die von Jeitan gerade den gleichen Fehler und habe ihn durch Bearbeiten von mayavi\modules\axes.py in update_pipeline behoben und Folgendes geändert:
self.configure_input_data(self.axes, src.outputs[0])
zu:
self.configure_input_data(self.axes, src.outputs[0].output)

(Erstes ist Typ PolyDataNormals, letzteres ist PolyData, das von DataSet abgeleitet wird.)

Ich bin auch auf das Problem gestoßen.

@jdonegan Ihre Vorschläge haben meine Probleme behoben:+1: . Ich denke, du solltest einen Fix posten, damit er nicht manuell gemacht werden muss

Ich hatte auch dieses Problem und der Fix von @jdonegan hat gut funktioniert. Wollte eine PR einreichen, sieht aber so aus, als hätte
self.configure_input(self.axes, src.outputs[0])

Vielleicht sollte dieses Thema geschlossen werden, um Verwirrung zu vermeiden?

In ähnlicher Weise sollte das gleiche Problem und eine ähnliche Korrektur auf Zeile 373 in Decorations.py angewendet werden:
Achsen.Achsen.Bereiche = \
axis.module_manager.source.outputs[0].output.bounds

um den Fehler zu beheben
"AttributeError: 'PolyDataNormals'-Objekt hat kein Attribut 'bounds'"

Ich glaube also, dass der Commit 996fb25 nur einen Teil des Problems behoben hat.

Wie @TinghuiWang bemerkte, muss dies an mehreren Stellen behoben werden. Abhängig von Ihrem Plot-Aufruf (bei mir war es plot3d vs points3d) müssen Sie es jedoch möglicherweise wieder ändern. Ich habe es wie folgt behoben:

In mayavi\modules\axes.py in Zeile 173 habe ich mich geändert

self.configure_input_data(self.axes, src.outputs[0])

zu

data = src.outputs[0] if not hasattr(src.outputs[0], 'output') else src.outputs[0].output
self.configure_input_data(self.axes, data)

Ähnlich in \mayavi\tools\decorations.py in Zeile 372 habe ich gecanged

axes.axes.ranges = axes.module_manager.source.outputs[0].bounds

zu

src = axes.module_manager.source
data = src.outputs[0] if not hasattr(src.outputs[0], 'output') else src.outputs[0].output
axes.axes.ranges = data.bounds

Bitte repariert es, Leute. Die Achsen werden wirklich gebraucht.

Folgt obiger Methode, ich habe nur einen Teil des Problems gelöst, ich habe immer noch die Ausnahme:
Exception occurred in traits notification handler for object: <mayavi.tools.decorations.Axes object at 0x11a41ce60>, trait: extent, old value: [0 0 0 0 0 0], new value: [ -2. 17. -2. 17. -4.85316642 6.54683358] NoneType: None

und keine Achsenbeschriftung auf dem Bild.

Kann jemand helfen? Vielen Dank!

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

GaelVaroquaux picture GaelVaroquaux  ·  13Kommentare

dnacombo picture dnacombo  ·  7Kommentare

Kekushke picture Kekushke  ·  9Kommentare

Make42 picture Make42  ·  7Kommentare

PennyQ picture PennyQ  ·  4Kommentare