我正在使用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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top