Pourquoi le light_manager de MlabSceneModel n'est-il pas défini ?
Question
J'utilise Mayavi pour une visualisation 3D avec TraitsUI.Le scene
est un trait du type MlabSceneModel.Je veux changer l'éclairage et essayer d'accéder scene.light_manager
dans une fonction appelée sur le activated
événement.Cependant, scene.light_manager
est toujours None
.
En utilisant mlab.figure()
pour créer une scène dotée d'un gestionnaire de lumière, mais comme je souhaite que la scène soit intégrée dans l'interface utilisateur et non dans une fenêtre supplémentaire, ce n'est pas une option pour moi.
La solution
Bonne question qui m'a fait flipper au début.
En regardant la source tvtk, le gestionnaire de lumière est ajouté à la scène lorsque l'interacteur est généré, ce qui se produit après l'activation de la scène.D'ailleurs, la première chose que j'ai essayée, c'est d'écouter 'scene:light_manager'
ne fonctionne pas car le gestionnaire de lumière est un Property
trait qui ne change pas directement.Cela dit, si vous écoutez l'objet lui-même, auquel la propriété fait référence, cela déclenchera une notification lors de sa création.En d'autres termes, faites ceci :
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