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
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()
def mouseMoveEvent(self, event: QMouseEvent): if event.x() > self.width() - 20: QApplication.setOverrideCursor(Qt.SplitHCursor) else: QApplication.setOverrideCursor(Qt.ArrowCursor) if self.last_point is None or not (event.buttons() & Qt.LeftButton): return new_width = event.x() + 10 new_width = max(new_width, 150) new_width = min(new_width, 600) self.setMinimumWidth(new_width)
def mouseMoveEvent(self, e: QMouseEvent): if self.chosen is None: return index = self.color_layout.indexOf(self.chosen) index2 = int(e.x() / self.width() * self.color_layout.count() + 0.5) if index2 != index: self.color_layout.insertWidget(index2, self.chosen)
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()
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())
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()
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
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)
def mousePressEvent(self, event: QMouseEvent): if event.x() > self.width() - self.triangle_width: super().mousePressEvent(event) self.clicked.emit(self.id)
def mousePressEvent(self, event: QtGui.QMouseEvent): self.last_move_x = event.x() self.last_move_y = event.y()
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)
def mousePressEvent(self, event: QMouseEvent): if event.x() > self.width() - 20: self.last_point = event.pos()
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)
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