Domanda

Sto usando Mayavi per una visualizzazione 3D con Traitsui.Il scene è un tratto del tipo mlabscenemodel.Voglio cambiare l'illuminazione e cercare di accedere a scene.light_manager in una funzione chiamata evento activated.Tuttavia, scene.light_manager è sempre None.

Utilizzando mlab.figure() per creare una scena che ha un leggero manager, ma come voglio che la scena sia integrata nell'interfaccia utente e non in una finestra aggiuntiva questa non è alcuna opzione per me.

È stato utile?

Soluzione

Buona domanda che mi ha gettato per un loop all'inizio.

Guardando la fonte TVTK, il Gestore Light viene aggiunto alla scena quando viene generato l'interactor, che avviene dopo l'attivazione della scena.Inoltre, la prima cosa che ho provato, che doveva ascoltare 'scene:light_manager' non funziona perché la Light Manager è un tratto Property che non cambia direttamente.Detto questo, se ascolti l'oggetto stesso, che è indicato dalla proprietà, attiverà una notifica sulla creazione.In altre parole, fai questo:

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
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top