为什么MlabSceneModel的light_manager没有设置?
题
我正在使用Mayavi与TraitsUI进行3D可视化。该 scene
是MlabSceneModel类型的特征。我想改变照明,并试图访问 scene.light_manager
在一个函数中调用 activated
事件。然而, scene.light_manager
总是这样 None
.
使用 mlab.figure()
要创建一个具有灯光管理器的场景,但由于我希望场景集成在UI中,而不是在额外的窗口中,这对我来说是没有选择的。
解决方案
这是个好问题,一开始让我陷入了一个循环。
查看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
不隶属于 StackOverflow