コード例 #1
0
 def _get_ratio(self, e: QMouseEvent, margin=10):
     frame_margin = 10
     width = self.width() - 2 * frame_margin
     if e.x() < margin or e.x() > self.width() - margin:
         return
     if e.y() < margin or e.y() > self.height() - margin:
         return
     return (e.x() - frame_margin) / width
コード例 #2
0
ファイル: dicom_widget.py プロジェクト: achouman34/capstone
    def mouseMoveEvent(self, event: QtGui.QMouseEvent):
        self.window.mouse_x = event.x()
        self.window.mouse_y = event.y()
        self.window.update_coordinates()

        if event.buttons() == QtCore.Qt.LeftButton:
            self.window_width += event.y() - self.last_move_y
            self.window_center += event.x() - self.last_move_x

            self.last_move_x = event.x()
            self.last_move_y = event.y()
コード例 #3
0
 def mouseMoveEvent(self, event: QMouseEvent) -> None:
     """Drag to move the joint."""
     if not self.pressed:
         return
     row = self.get_joint_number()
     if not row > -1:
         return
     mx = (event.x() - self.ox) / self.zoom
     my = (event.y() - self.oy) / -self.zoom
     hv = _ConfigureCanvas.edit_size / 2
     if -hv <= mx <= hv:
         self.pos[row] = (mx, self.pos[row][1])
     else:
         if -hv <= mx:
             x = hv
         else:
             x = -hv
         self.pos[row] = (x, self.pos[row][1])
     if -hv <= my <= hv:
         self.pos[row] = (self.pos[row][0], my)
     else:
         if -hv <= my:
             y = hv
         else:
             y = -hv
         self.pos[row] = (self.pos[row][0], y)
     self.update()
コード例 #4
0
    def mouseMoveEvent(self, event: QMouseEvent) -> None:
        if self.lastPos is None:
            return

        dx = event.x() - self.lastPos.x()
        dy = event.y() - self.lastPos.y()
        smoothness = max(self.viewer.smoothness, 0.1)

        # viewer.world.setToIdentity()
        if event.buttons() == Qt.LeftButton:
            self.viewer.rotate(alpha=dy / smoothness,
                               beta=0,
                               gamma=dx / smoothness)

        elif event.buttons() == Qt.RightButton:
            self.viewer.rotate(alpha=dy / smoothness,
                               beta=dx / smoothness,
                               gamma=0)

        elif event.buttons() == Qt.MiddleButton:
            off_center = self.viewer.off_center[2]
            distance_x = off_center / self.viewer.width()
            distance_y = off_center / self.viewer.height()

            self.viewer.translate(x=-distance_x * dx, y=distance_y * dy, z=0)

        self.lastPos = QPoint(event.pos())
コード例 #5
0
    def mouseMoveEvent(self, event: QMouseEvent) -> None:
        super().mouseMoveEvent(event)

        # Update end of line
        start = self.viewer.flatline.vertices[0]
        ndc = self.viewer.screen_to_ndc(event.x(), event.y(), 1.0)

        self.viewer.flatline.vertices = [start, ndc]
        self.viewer.makeCurrent()
        self.viewer.flatline.reload()
コード例 #6
0
 def mousePressEvent(self, event: QMouseEvent) -> None:
     """Check if get close to a joint."""
     mx = (event.x() - self.ox) / self.zoom
     my = (event.y() - self.oy) / -self.zoom
     for node, (x, y) in self.pos.items():
         if node in self.same:
             continue
         if hypot(x - mx, y - my) <= 5:
             self.set_joint_number.emit(node)
             self.pressed = True
             break
コード例 #7
0
    def mousePressEvent(self, event: QMouseEvent) -> None:
        super().mousePressEvent(event)

        # Setup NDC vertices
        ndc = self.viewer.screen_to_ndc(event.x(), event.y(), 1.0)
        self.viewer.flatline.vertices = [ndc, ndc]
        self.viewer.makeCurrent()
        self.viewer.flatline.reload()

        # Only show line if required
        if len(self.origins) == 0:
            self.viewer.flatline.show()
        else:
            self.viewer.flatline.hide()

        # Discard points if not left-click
        if event.buttons() == Qt.LeftButton:
            self.detect_rays(event)
            self.viewer.setMouseTracking(True)
        else:
            self.origins.clear()
            self.rays.clear()
            self.viewer.setMouseTracking(False)
コード例 #8
0
ファイル: dicom_widget.py プロジェクト: achouman34/capstone
 def mousePressEvent(self, event: QtGui.QMouseEvent):
     self.last_move_x = event.x()
     self.last_move_y = event.y()
コード例 #9
0
 def mouseMoveEvent(self, event: QMouseEvent) -> None:
     """Set mouse position."""
     self.update_pos.emit((event.x() - self.ox) / self.zoom,
                          (event.y() - self.oy) / self.zoom)
コード例 #10
0
    def mouseMoveEvent(self, event: QMouseEvent) -> None:
        """Move mouse.

        + Middle button: Translate canvas view.
        + Left button: Free move mode / Rectangular selection.
        """
        x, y = self.__mouse_pos(event)
        if self.selector.middle_dragged:
            self.ox = event.x() - self.selector.x * self.zoom
            self.oy = event.y() + self.selector.y * self.zoom
            self.update()
        elif self.selector.left_dragged:
            if self.free_move == FreeMode.NO_FREE_MOVE:
                if self.show_target_path:
                    self.set_target_point.emit(x, y)
                else:
                    # Rectangular selection
                    self.selector.picking = True
                    self.selector.sx = self.__snap(x, is_zoom=False)
                    self.selector.sy = self.__snap(y, is_zoom=False)
                    self.__select_func(rect=True)
                    selection = self.selector.current_selection()
                    if selection:
                        self.selected.emit(selection, False)
                    else:
                        self.no_selected.emit()
                    self.selected_tips.emit(
                        event.globalPos(),
                        f"({self.selector.x:.02f}, {self.selector.y:.02f})\n"
                        f"({self.selector.sx:.02f}, {self.selector.sy:.02f})\n"
                        f"{len(selection)} {_selection_unit[self.select_mode]}(s)"
                    )
            elif self.select_mode == SelectMode.JOINT:
                if self.free_move == FreeMode.TRANSLATE:
                    # Free move translate function.
                    mouse_x = self.__snap(x - self.selector.x, is_zoom=False)
                    mouse_y = self.__snap(y - self.selector.y, is_zoom=False)
                    self.selected_tips.emit(
                        event.globalPos(), f"{mouse_x:+.02f}, {mouse_y:+.02f}")
                    for num in self.selections:
                        vpoint = self.vpoints[num]
                        vpoint.move((mouse_x + vpoint.x, mouse_y + vpoint.y))
                elif self.free_move == FreeMode.ROTATE:
                    # Free move rotate function.
                    alpha = atan2(y, x) - atan2(self.selector.y,
                                                self.selector.x)
                    self.selected_tips.emit(event.globalPos(),
                                            f"{degrees(alpha):+.02f}°")
                    for num in self.selections:
                        vpoint = self.vpoints[num]
                        r = hypot(vpoint.x, vpoint.y)
                        beta = atan2(vpoint.y, vpoint.x)
                        vpoint.move(
                            (r * cos(beta + alpha), r * sin(beta + alpha)))
                        if vpoint.type in {VJoint.P, VJoint.RP}:
                            vpoint.rotate(self.vangles[num] +
                                          degrees(beta + alpha))
                elif self.free_move == FreeMode.REFLECT:
                    # Free move reflect function.
                    fx = 1 if x > 0 else -1
                    fy = 1 if y > 0 else -1
                    self.selected_tips.emit(event.globalPos(),
                                            f"{fx:+d}, {fy:+d}")
                    for num in self.selections:
                        vpoint = self.vpoints[num]
                        if vpoint.type == VJoint.R:
                            vpoint.move((vpoint.x * fx, vpoint.y * fy))
                        else:
                            vpoint.move((vpoint.x * fx, vpoint.y * fy))
                            if (x > 0) != (y > 0):
                                vpoint.rotate(180 - self.vangles[num])
                if self.free_move != FreeMode.NO_FREE_MOVE and self.selections:
                    self.update_preview_path()
            self.update()
        self.tracking.emit(x, y)
コード例 #11
0
 def __mouse_pos(self, event: QMouseEvent) -> Tuple[float, float]:
     """Return the mouse position mapping to main canvas."""
     return (event.x() - self.ox) / self.zoom, (event.y() -
                                                self.oy) / -self.zoom