Por que o light_manager de MlabSceneModel não ficar definido?
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.
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