Pergunta

Eu estou usando Mayavi para uma visualização 3D com TraitsUI.O scene é uma característica do tipo de MlabSceneModel.Eu quero mudar a iluminação e a tentar aceder scene.light_manager em uma função chamada no activated do evento.No entanto, scene.light_manager é sempre None.

Usando mlab.figure() para cria uma cena que tem uma luz gestor, mas como eu quero a cena a ser integrado na INTERFACE do usuário e não em uma janela adicional isso não é opção para mim.

Foi útil?

Solução

Boa pergunta que me desnorteou em primeiro lugar.

Olhando para o tvtk fonte, a luz manager é adicionado a cena quando o interator é gerado, o que ocorre após a cena de ativação.Além disso, a primeira coisa que eu tentei, que foi para ouvir 'scene:light_manager' não funciona porque a luz manager é um Property traço que não alterar diretamente.Dito isso, se você ouvir o próprio objeto, que é referido pela propriedade, irá desencadear uma notificação sobre a criação.Em outras palavras, o fazer:

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top