0

I am trying to code a program based on traitsUI and Mayavi, but I have some problems. Following the code I am using:

    #!/usr/bin/env python
    import os
    from traits.api import HasTraits, Instance, String, on_trait_change
    from traitsui.api import View, Item
    from tvtk.pyface.scene_editor import SceneEditor
    
    from mayavi.tools.mlab_scene_model import MlabSceneModel
    from mayavi.core.ui.mayavi_scene import MayaviScene
    
    class ActorViewer(HasTraits):
        scene = Instance(MlabSceneModel, ())
        view = View(Item(name='scene',
                         editor=SceneEditor(scene_class=MayaviScene),
                         show_label=True,
                         resizable=True,
                         dock='tab',
                         height=500,
                         width=500),
                    resizable=True
                    )
    
        def __init__(self, engine=None, **traits):
            HasTraits.__init__(self, **traits)
    
            if engine is not None:
                self.scene=MlabSceneModel(engine=engine)
            else:
                self.scene=MlabSceneModel()
            self.generate_data()
    
        @on_trait_change('scene.activated')
        def generate_data(self):
            src=self.scene.mlab.pipeline.open(Path+i)
            self.scene.mlab.view(40, 50)
            self.scene.mlab.pipeline.outline(src)
            self.scene.mlab.pipeline.iso_surface(src, contours=60, opacity=0.5)
    
    if __name__ == '__main__':
        Path = "/path/to/my/folder"
        filelist = os.listdir(Path)
        for i in filelist:
            if i.endswith(".vtr"):
                if ("E1_" in i) or ("E2_" in i):
                    print("file name ", i)
                    a = ActorViewer()
                    a.configure_traits()
  1. The call self.scene.mlab.view(40, 50) returns AttributeError: 'NoneType' object has no attribute 'active_camera', thus I don't know how to set the camera. I have read that it is related to when the scene is activated, but I couldn't find a solution.
  2. Without setting the view, the code works, but each file is loaded and rendered alone. In order to proceed with the main loop, each render has to be closed. I would like to dock each of the file without closing them.
  3. I couldn't find a way to set a custom label to each tab after allowing show_label=True and to have it aligned horizontally at the top of the scene.
  4. I tried to set the outline with the 'cornered' layout, but I couldn't find a way to do that. self.scene.mlab.pipeline.outline.outline_mode('cornered') gets simply ignored.

Thank you for your help!

giammi56
  • 154
  • 1
  • 15

0 Answers0