From 18a2530368a158def77abf6b385e96d1e3606f38 Mon Sep 17 00:00:00 2001 From: Alias_z Date: Fri, 28 Jul 2023 11:27:58 +0200 Subject: [PATCH 1/2] =?UTF-8?q?=E6=94=AF=E6=8C=81=E6=8B=96=E5=8A=A8?= =?UTF-8?q?=E9=BC=A0=E6=A0=87=E6=8F=8F=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- widgets/canvas.py | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/widgets/canvas.py b/widgets/canvas.py index e7b4ea6..84d9eb5 100644 --- a/widgets/canvas.py +++ b/widgets/canvas.py @@ -7,7 +7,8 @@ from configs import STATUSMode, CLICKMode, DRAWMode, CONTOURMode from PIL import Image import numpy as np import cv2 - +from PyQt5.QtCore import QTimer # 拖动鼠标描点 +import time # 拖动鼠标描点 class AnnotationScene(QtWidgets.QGraphicsScene): def __init__(self, mainwindow): @@ -29,6 +30,13 @@ class AnnotationScene(QtWidgets.QGraphicsScene): self.guide_line_x:QtWidgets.QGraphicsLineItem = None self.guide_line_y:QtWidgets.QGraphicsLineItem = None + # 拖动鼠标描点 + self.just_pressed = False + self.last_draw_time = time.time() + self.draw_interval = 0.15 + self.drawing = False + + def load_image(self, image_path:str): self.clear() if self.mainwindow.use_segment_anything: @@ -384,9 +392,39 @@ class AnnotationScene(QtWidgets.QGraphicsScene): raise ValueError('The draw mode named {} not supported.') if self.draw_mode == DRAWMode.SEGMENTANYTHING: self.update_mask() + + # 拖动鼠标描点 + self.drawing = True + self.just_pressed = True + self.last_draw_time = time.time() super(AnnotationScene, self).mousePressEvent(event) + # 拖动鼠标描点 + def mouseReleaseEvent(self, event: 'QtWidgets.QGraphicsSceneMouseEvent'): + self.drawing = False + super(AnnotationScene, self).mouseReleaseEvent(event) + def mouseMoveEvent(self, event: 'QtWidgets.QGraphicsSceneMouseEvent'): + # 拖动鼠标描点 + if self.drawing: + current_time = time.time() + if self.last_draw_time is not None and current_time - self.last_draw_time < self.draw_interval: + return # 时间小于给定值不画点 + self.last_draw_time = current_time + sceneX, sceneY = event.scenePos().x(), event.scenePos().y() + sceneX = 0 if sceneX < 0 else sceneX + sceneX = self.width()-1 if sceneX > self.width()-1 else sceneX + sceneY = 0 if sceneY < 0 else sceneY + sceneY = self.height()-1 if sceneY > self.height()-1 else sceneY + + if self.current_graph is not None: + if self.draw_mode == DRAWMode.POLYGON: + if not self.just_pressed: + self.current_graph.addPoint(QtCore.QPointF(sceneX, sceneY)) + else: + self.current_graph.movePoint(len(self.current_graph.points)-1, QtCore.QPointF(sceneX, sceneY)) + self.just_pressed = False + # 辅助线 if self.guide_line_x is not None and self.guide_line_y is not None: if self.guide_line_x in self.items(): From 73357231af4d3cd543e81d8db7ae46d6c4274fe2 Mon Sep 17 00:00:00 2001 From: Alias_z Date: Fri, 28 Jul 2023 11:29:07 +0200 Subject: [PATCH 2/2] Update canvas.py --- widgets/canvas.py | 1 - 1 file changed, 1 deletion(-) diff --git a/widgets/canvas.py b/widgets/canvas.py index 84d9eb5..8e7284e 100644 --- a/widgets/canvas.py +++ b/widgets/canvas.py @@ -7,7 +7,6 @@ from configs import STATUSMode, CLICKMode, DRAWMode, CONTOURMode from PIL import Image import numpy as np import cv2 -from PyQt5.QtCore import QTimer # 拖动鼠标描点 import time # 拖动鼠标描点 class AnnotationScene(QtWidgets.QGraphicsScene):