コード例 #1
0
 def OnCameraSyncEvent(self, event: CameraSyncEvent):
     if CameraObservable.get().is_sync:
         canvas = event.GetEventObject()
         for panel in self.GetAllViewerPanels():
             if canvas is not panel.gl_canvas:
                 interactor = panel.gl_canvas.camera_interactor
                 interactor.sync(event.interactor)
コード例 #2
0
ファイル: viewer_panel.py プロジェクト: kkyong77/pyvistas
 def UpdateScene(self):
     for i, scene in enumerate(self.scenes):
         if i == self.scene_choice.GetSelection():
             observable = CameraObservable.get()
             if observable.is_sync:
                 interactor = self.saved_interactor_state
             else:
                 interactor = self.gl_canvas.camera_interactor
             interactor.camera.scene = scene
             if not observable.is_sync:
                 interactor.reset_position()
             self.selected_scene = scene
     self.gl_canvas.Refresh()
コード例 #3
0
ファイル: camera.py プロジェクト: kkyong77/pyvistas
    def __init__(self, scene=None, color=RGBColor(0, 0, 0), observable=False):
        if scene is None:
            scene = Scene()

        self.raycaster = Raycaster()
        self.box_select = BoxSelect(self.raycaster, self)
        self.poly_select = PolySelect(self.raycaster, self)
        self.scene = scene
        self.color = color
        self._matrix_stack = []
        self.matrix = Matrix44.identity(dtype=numpy.float32)
        self.saved_matrix_state = None
        self.wireframe = False
        self.selection_view = False
        self.proj_matrix = Matrix44.identity(dtype=numpy.float32)

        self.set_up_vector(Vector3([0, 1, 0]))
        self.set_position(Vector3())
        self.set_point_of_interest(Vector3([0, 0, -10]))

        if observable:
            CameraObservable.get().add_observer(self)
コード例 #4
0
 def SyncAllCameras(self, do_sync, save_state):
     observable = CameraObservable.get()
     if do_sync:
         interactor = self.GetMainViewerPanel().gl_canvas.camera_interactor
         observable.sync_camera(interactor, save_state)
         for panel in self.GetAllViewerPanels():
             if panel is not self.GetMainViewerPanel():
                 panel.gl_canvas.camera_controls.hide()
     else:
         main_panel_interactor = observable.global_interactor
         observable.unsync_camera()
         if main_panel_interactor is not None:
             self.GetMainViewerPanel(
             ).gl_canvas.camera_interactor = main_panel_interactor
         for panel in self.GetAllViewerPanels():
             if panel is not None and panel is not self.GetMainViewerPanel(
             ):
                 panel.gl_canvas.camera_controls.show()
コード例 #5
0
    def AddViewer(self, new_viewer=None):
        # Add new row if necessary
        if self.num_viewers % self.num_columns == 0:
            self.AddRow()

        last_row = self.rows[-1]

        # Create new viewer
        if new_viewer is None:
            new_viewer = ViewerPanel(self, wx.ID_ANY)
        new_viewer.HideResizeAreas()
        new_viewer.ResetNeighbors()

        index = last_row.num_viewers
        last_row.viewers[index] = new_viewer
        last_row.num_viewers += 1
        self.num_viewers += 1

        # Size proportions for the new viewer
        new_viewer.width = 1 / last_row.num_viewers
        new_viewer.height = 1 / len(self.rows)

        for viewer in last_row.viewers[:index]:
            viewer.width *= index * (1 / last_row.num_viewers)

        # Set neighbors
        if last_row.num_viewers > 1:
            new_viewer.SetNeighbor(last_row.viewers[index - 1],
                                   ViewerPanel.WEST)
            last_row.viewers[index - 1].SetNeighbor(new_viewer,
                                                    ViewerPanel.EAST)

        if last_row.prev_row is not None and last_row.prev_row.num_viewers >= last_row.num_viewers:
            for viewer in last_row.prev_row.viewers:
                new_viewer.SetNeighbor(viewer, ViewerPanel.NORTH)
                viewer.SetNeighbor(new_viewer, ViewerPanel.SOUTH)

        self.UpdateViewerSizes()

        observable = CameraObservable.get()
        if observable.is_sync:
            self.SyncAllCameras(False, False)
            self.SyncAllCameras(True, True)
            new_viewer.ResetCameraInteractor()
コード例 #6
0
ファイル: gl_canvas.py プロジェクト: kkyong77/pyvistas
 def Sync(self):
     if self.can_sync and CameraObservable.get().is_sync:
         event = CameraSyncEvent(interactor=self.camera_interactor)
         event.SetEventObject(self)
         wx.PostEvent(self.GetParent().GetParent(), event)
コード例 #7
0
ファイル: gl_canvas.py プロジェクト: kkyong77/pyvistas
 def OnDestroy(self, event):
     CameraObservable.get().remove_observer(self.camera)
     self.camera_controls.Destroy()
     self.selection_controls.Destroy()
コード例 #8
0
ファイル: viewer_panel.py プロジェクト: kkyong77/pyvistas
 def ResetCameraInteractor(self):
     observable = CameraObservable.get()
     if observable.is_sync:
         self.reset_interactor = True
     else:
         self.gl_canvas.camera_interactor.reset_position()
コード例 #9
0
ファイル: viewer_panel.py プロジェクト: kkyong77/pyvistas
    def __init__(self, parent, id):
        super().__init__(parent, id)

        self.north = []
        self.east = None
        self.south = []
        self.west = None
        self.width = 1.
        self.height = 1.

        self.resizing_north = False
        self.resizing_east = False
        self.resizing_south = False
        self.resizing_west = False
        self.last_pos = None

        self.scenes = []
        self.selected_scene = None
        self.saved_interactor_state = None
        self.reset_interactor = False

        self.parent = parent
        self.north_resize_area = wx.Window(self, wx.ID_ANY, wx.DefaultPosition,
                                           wx.Size(-1, 2))
        self.east_resize_area = wx.Window(self, wx.ID_ANY, wx.DefaultPosition,
                                          wx.Size(2, -1))
        self.south_resize_area = wx.Window(self, wx.ID_ANY, wx.DefaultPosition,
                                           wx.Size(-1, 2))
        self.west_resize_area = wx.Window(self, wx.ID_ANY, wx.DefaultPosition,
                                          wx.Size(2, -1))

        self.north_resize_area.SetCursor(wx.Cursor(wx.CURSOR_SIZENS))
        self.east_resize_area.SetCursor(wx.Cursor(wx.CURSOR_SIZEWE))
        self.south_resize_area.SetCursor(wx.Cursor(wx.CURSOR_SIZENS))
        self.west_resize_area.SetCursor(wx.Cursor(wx.CURSOR_SIZEWE))

        self.scene_choice = wx.Choice(self, wx.ID_ANY)
        self.scene_choice.SetToolTip('Select a scene to view')

        self.legend_button = wx.BitmapButton(
            self, wx.ID_ANY, get_resource_bitmap('stripes.png'))
        self.legend_button.SetToolTip('Show/hide legend')

        self.camera = Camera(observable=True)

        attrib_list = [
            WX_GL_RGBA, WX_GL_DOUBLEBUFFER, WX_GL_DEPTH_SIZE, 16,
            WX_GL_CORE_PROFILE, WX_GL_MAJOR_VERSION, 3, WX_GL_MINOR_VERSION, 3
        ]

        self.gl_canvas = GLCanvas(self,
                                  wx.ID_ANY,
                                  self.camera,
                                  attrib_list=attrib_list,
                                  can_sync=True)
        self.gl_canvas.Refresh()

        sizer = wx.BoxSizer(wx.VERTICAL)
        self.SetSizer(sizer)

        top_sizer = wx.BoxSizer(wx.HORIZONTAL)
        top_sizer.Add(self.scene_choice, 1,
                      wx.RIGHT | wx.ALIGN_CENTER_VERTICAL)
        top_sizer.Add(self.legend_button, 0,
                      wx.LEFT | wx.RIGHT | wx.ALIGN_CENTER_VERTICAL, 3)

        content_sizer = wx.BoxSizer(wx.VERTICAL)
        content_sizer.Add(top_sizer, 0, wx.EXPAND | wx.ALL, 5)
        content_sizer.Add(self.gl_canvas, 1, wx.EXPAND)

        center_sizer = wx.BoxSizer(wx.HORIZONTAL)
        center_sizer.Add(self.west_resize_area, 0, wx.EXPAND)
        center_sizer.Add(content_sizer, 1, wx.EXPAND)
        center_sizer.Add(self.east_resize_area, 0, wx.EXPAND)

        sizer.Add(self.north_resize_area, 0, wx.EXPAND)
        sizer.Add(center_sizer, 1, wx.EXPAND)
        sizer.Add(self.south_resize_area, 0, wx.EXPAND)

        # Event handlers
        self.scene_choice.Bind(wx.EVT_CHOICE, self.OnSceneChoice)
        self.legend_button.Bind(wx.EVT_BUTTON, self.OnLegendLabel)

        self.north_resize_area.Bind(wx.EVT_LEFT_DOWN, self.OnResizeLeftDown)
        self.north_resize_area.Bind(wx.EVT_LEFT_UP, self.OnResizeLeftUp)
        self.north_resize_area.Bind(wx.EVT_MOTION, self.OnResizeMotion)

        self.east_resize_area.Bind(wx.EVT_LEFT_DOWN, self.OnResizeLeftDown)
        self.east_resize_area.Bind(wx.EVT_LEFT_UP, self.OnResizeLeftUp)
        self.east_resize_area.Bind(wx.EVT_MOTION, self.OnResizeMotion)

        self.south_resize_area.Bind(wx.EVT_LEFT_DOWN, self.OnResizeLeftDown)
        self.south_resize_area.Bind(wx.EVT_LEFT_UP, self.OnResizeLeftUp)
        self.south_resize_area.Bind(wx.EVT_MOTION, self.OnResizeMotion)

        self.west_resize_area.Bind(wx.EVT_LEFT_DOWN, self.OnResizeLeftDown)
        self.west_resize_area.Bind(wx.EVT_LEFT_UP, self.OnResizeLeftUp)
        self.west_resize_area.Bind(wx.EVT_MOTION, self.OnResizeMotion)

        self.gl_canvas.Bind(wx.EVT_LEFT_DCLICK, self.OnCanvasDClick)
        self.gl_canvas.Bind(wx.EVT_RIGHT_DOWN, self.OnCanvasRightClick)

        self.gl_canvas.camera.wireframe = False
        self.gl_canvas.SetFocus()

        self.Bind(wx.EVT_WINDOW_DESTROY, self.OnDestroy)
        self.Bind(EVT_CAMERA_SELECT_FINISH, self.OnDragSelectFinish)

        self.legend_window = LegendWindow(self, wx.ID_ANY)

        self.RefreshScenes()

        observable = CameraObservable.get()
        observable.add_observer(self)
        self.reset_interactor = observable.is_sync
コード例 #10
0
ファイル: viewer_panel.py プロジェクト: kkyong77/pyvistas
 def OnDestroy(self, event):
     CameraObservable.get().remove_observer(self)
     event.Skip()
コード例 #11
0
ファイル: camera.py プロジェクト: kkyong77/pyvistas
 def __del__(self):
     CameraObservable.get().remove_observer(self)
コード例 #12
0
 def OnCameraModeChanged(self, event):
     if CameraObservable.get().is_sync:
         self.SyncAllCameras(True, False)