Пример #1
0
    def on_key_press(self, symbol, modifiers):
        try:
            char = chr(symbol)
        except OverflowError:
            print(" Warning: The value of the pressed key is too large.")
            return

        event_data = {"symbol": symbol, "modifiers": modifiers}
        propagate_event = EVENT_DISPATCHER.dispatch(EventType.KeyPressEvent,
                                                    **event_data)
        if propagate_event is not None and propagate_event is False:
            return

        frame = self.camera.frame
        if char == "r":
            frame.to_default_state()
        elif char == "q":
            self.quit_interaction = True
        elif char == "p":
            theta, phi, gamma = frame.get_euler_angles() * 180 / PI
            if hasattr(self, "info"):
                self.remove(self.info)
            self.info = Text(
                f"(theta,phi,gamma)=({round(theta, 2)},{round(phi, 2)},{round(gamma, 2)})"
                f"\n\nCenter:{frame.get_center()}"
                f"\n\nScale:{frame.scale_factor}").scale(0.5)
            self.info.fix_in_frame()
            self.info.to_edge(UL)
            self.add(self.info)
Пример #2
0
 def on_mouse_release(self, point: np.ndarray, button: int,
                      mods: int) -> None:
     event_data = {"point": point, "button": button, "mods": mods}
     propagate_event = EVENT_DISPATCHER.dispatch(
         EventType.MouseReleaseEvent, **event_data)
     if propagate_event is not None and propagate_event is False:
         return
Пример #3
0
    def on_mouse_drag(self, point, d_point, buttons, modifiers):
        self.mouse_drag_point.move_to(point)

        event_data = {"point": point, "d_point": d_point, "buttons": buttons, "modifiers": modifiers}
        propagate_event = EVENT_DISPATCHER.dispatch(EventType.MouseDragEvent, **event_data)
        if propagate_event is not None and propagate_event is False:
            return
Пример #4
0
    def on_key_press(self, symbol: int, modifiers: int) -> None:
        try:
            char = chr(symbol)
        except OverflowError:
            log.warning("The value of the pressed key is too large.")
            return

        event_data = {"symbol": symbol, "modifiers": modifiers}
        propagate_event = EVENT_DISPATCHER.dispatch(EventType.KeyPressEvent,
                                                    **event_data)
        if propagate_event is not None and propagate_event is False:
            return

        if char == RESET_FRAME_KEY:
            self.camera.frame.to_default_state()
        elif char == "z" and modifiers == COMMAND_MODIFIER:
            self.undo()
        elif char == "z" and modifiers == COMMAND_MODIFIER | SHIFT_MODIFIER:
            self.redo()
        # command + q
        elif char == QUIT_KEY and modifiers == COMMAND_MODIFIER:
            self.quit_interaction = True
        # Space or right arrow
        elif char == " " or symbol == ARROW_SYMBOLS[2]:
            self.hold_on_wait = False
Пример #5
0
    def on_mouse_motion(
        self,
        point: np.ndarray,
        d_point: np.ndarray
    ) -> None:
        self.mouse_point.move_to(point)

        event_data = {"point": point, "d_point": d_point}
        propagate_event = EVENT_DISPATCHER.dispatch(EventType.MouseMotionEvent, **event_data)
        if propagate_event is not None and propagate_event is False:
            return

        frame = self.camera.frame
        # Handle perspective changes
        if self.window.is_key_pressed(ord(PAN_3D_KEY)):
            frame.increment_theta(-self.pan_sensitivity * d_point[0])
            frame.increment_phi(self.pan_sensitivity * d_point[1])
        # Handle frame movements
        elif self.window.is_key_pressed(ord(FRAME_SHIFT_KEY)):
            shift = -d_point
            shift[0] *= frame.get_width() / 2
            shift[1] *= frame.get_height() / 2
            transform = frame.get_inverse_camera_rotation_matrix()
            shift = np.dot(np.transpose(transform), shift)
            frame.shift(shift)
Пример #6
0
 def on_mouse_press(self, point: np.ndarray, button: int,
                    mods: int) -> None:
     self.mouse_drag_point.move_to(point)
     event_data = {"point": point, "button": button, "mods": mods}
     propagate_event = EVENT_DISPATCHER.dispatch(EventType.MousePressEvent,
                                                 **event_data)
     if propagate_event is not None and propagate_event is False:
         return
Пример #7
0
 def on_key_release(
     self,
     symbol: int,
     modifiers: int
 ) -> None:
     event_data = {"symbol": symbol, "modifiers": modifiers}
     propagate_event = EVENT_DISPATCHER.dispatch(EventType.KeyReleaseEvent, **event_data)
     if propagate_event is not None and propagate_event is False:
         return
Пример #8
0
    def on_mouse_scroll(self, point, offset):
        event_data = {"point": point, "offset": offset}
        propagate_event = EVENT_DISPATCHER.dispatch(EventType.MouseScrollEvent, **event_data)
        if propagate_event is not None and propagate_event is False:
            return

        frame = self.camera.frame
        if self.window.is_key_pressed(ord("z")):
            factor = 1 + np.arctan(10 * offset[1])
            frame.scale(factor, about_point=point)
        else:
            transform = frame.get_inverse_camera_rotation_matrix()
            shift = np.dot(np.transpose(transform), offset)
            frame.shift(-20.0 * shift)
Пример #9
0
    def on_key_press(self, symbol, modifiers):
        try:
            char = chr(symbol)
        except OverflowError:
            print(" Warning: The value of the pressed key is too large.")
            return

        event_data = {"symbol": symbol, "modifiers": modifiers}
        propagate_event = EVENT_DISPATCHER.dispatch(EventType.KeyPressEvent, **event_data)
        if propagate_event is not None and propagate_event is False:
            return

        if char == "r":
            self.camera.frame.to_default_state()
        elif char == "q":
            self.quit_interaction = True
Пример #10
0
    def on_mouse_motion(self, point, d_point):
        self.mouse_point.move_to(point)

        event_data = {"point": point, "d_point": d_point}
        propagate_event = EVENT_DISPATCHER.dispatch(EventType.MouseMotionEvent, **event_data)
        if propagate_event is not None and propagate_event is False:
            return

        frame = self.camera.frame
        if self.window.is_key_pressed(ord("d")):
            frame.increment_theta(-d_point[0])
            frame.increment_phi(d_point[1])
        elif self.window.is_key_pressed(ord("s")):
            shift = -d_point
            shift[0] *= frame.get_width() / 2
            shift[1] *= frame.get_height() / 2
            transform = frame.get_inverse_camera_rotation_matrix()
            shift = np.dot(np.transpose(transform), shift)
            frame.shift(shift)
Пример #11
0
    def on_key_press(self, symbol: int, modifiers: int) -> None:
        try:
            char = chr(symbol)
        except OverflowError:
            log.warning("The value of the pressed key is too large.")
            return

        event_data = {"symbol": symbol, "modifiers": modifiers}
        propagate_event = EVENT_DISPATCHER.dispatch(EventType.KeyPressEvent,
                                                    **event_data)
        if propagate_event is not None and propagate_event is False:
            return

        if char == "r":
            self.camera.frame.to_default_state()
        elif char == "q":
            self.quit_interaction = True
        elif char == " " or symbol == 65363:  # Space or right arrow
            self.hold_on_wait = False
        elif char == "e" and modifiers == 3:  # ctrl + shift + e
            self.embed(close_scene_on_exit=False)
Пример #12
0
 def on_mouse_press(self, point, button, mods):
     event_data = {"point": point, "button": button, "mods": mods}
     propagate_event = EVENT_DISPATCHER.dispatch(EventType.MousePressEvent, **event_data)
     if propagate_event is not None and propagate_event is False:
         return