Почему не устанавливается Light_manager MlabSceneModel?
Вопрос
Я использую Mayavi для 3D-визуализации с помощью TraitsUI.А scene
— это признак типа MlabSceneModel.Я хочу изменить освещение и пытаюсь получить доступ scene.light_manager
в функции, вызываемой activated
событие.Однако, scene.light_manager
всегда None
.
С использованием mlab.figure()
создать сцену с менеджером освещения, но поскольку я хочу, чтобы сцена была интегрирована в пользовательский интерфейс, а не в дополнительное окно, для меня это не вариант.
Решение
Хороший вопрос, который поначалу поставил меня в замешательство.
Если посмотреть на источник tvtk, то менеджер света добавляется в сцену при генерации интерактора, что происходит после активации сцены.Кроме того, первое, что я попробовал, это послушать 'scene:light_manager'
не работает, потому что менеджер освещения является Property
черта, которая напрямую не меняется.Тем не менее, если вы прослушиваете сам объект, на который ссылается свойство, он вызовет уведомление о создании.Другими словами, сделайте следующее:
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