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.

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top