Warum wird der light_manager von MlabSceneModel nicht festgelegt?
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.
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