Frage

Ich verwende Mayavi für eine 3D-Visualisierung mit TraitsUI.Der scene ist ein Merkmal vom Typ MlabSceneModel.Ich möchte die Beleuchtung ändern und versuchen, darauf zuzugreifen scene.light_manager in einer Funktion, die auf aufgerufen wird activated Ereignis.Jedoch, scene.light_manager ist immer None.

Benutzen mlab.figure() Ich möchte eine Szene erstellen, die über einen Lichtmanager verfügt. Da ich jedoch möchte, dass die Szene in die Benutzeroberfläche integriert wird und nicht in ein zusätzliches Fenster, ist dies für mich keine Option.

War es hilfreich?

Lösung

Gute Frage, die mich zunächst verwirrt hat.

Wenn man sich die tvtk-Quelle ansieht, wird der Lichtmanager der Szene hinzugefügt, wenn der Interaktor generiert wird, was nach der Aktivierung der Szene geschieht.Außerdem habe ich als erstes versucht, zuzuhören 'scene:light_manager' funktioniert nicht, da der Lichtmanager ein ist Property Merkmal, das sich nicht direkt ändert.Wenn Sie jedoch auf das Objekt selbst hören, auf das die Eigenschaft verweist, wird bei der Erstellung eine Benachrichtigung ausgelöst.Mit anderen Worten, machen Sie Folgendes:

class Application(HasTraits):
  scene=Instance(MlabSceneModel,())

  ...

  @on_trait_change('scene:scene_editor:light_manager')
  def muck_with_the_lights(self):
    print self.scene.light_manager
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top