Pregunta

Estoy usando Mayavi para una visualización 3D con TraitsUI.El scene es un rasgo del tipo MlabSceneModel.Quiero cambiar la iluminación e intento acceder. scene.light_manager en una función llamada en el activated evento.Sin embargo, scene.light_manager es siempre None.

Usando mlab.figure() para crear una escena que tiene un administrador de luz, pero como quiero que la escena esté integrada en la interfaz de usuario y no en una ventana adicional, esta no es una opción para mí.

¿Fue útil?

Solución

Buena pregunta que al principio me dejó perplejo.

Mirando la fuente tvtk, el administrador de luz se agrega a la escena cuando se genera el interactor, lo que ocurre después de la activación de la escena.Además, lo primero que intenté, que fue escuchar 'scene:light_manager' no funciona porque el administrador de luz es un Property rasgo que no cambia directamente.Dicho esto, si escucha el objeto en sí, al que hace referencia la propiedad, se activará una notificación al crearlo.En otras palabras, haz esto:

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top