diff --git a/isat.yaml b/isat.yaml index 6ea21f0..9b725dd 100644 --- a/isat.yaml +++ b/isat.yaml @@ -21,4 +21,5 @@ label: - color: '#5c3566' name: fence language: en -mask_alpha: 0.6 +mask_alpha: 0.4 +vertex_size: 2 diff --git a/widgets/annos_dock_widget.py b/widgets/annos_dock_widget.py index 46f9d6a..ba753a8 100644 --- a/widgets/annos_dock_widget.py +++ b/widgets/annos_dock_widget.py @@ -102,7 +102,6 @@ class AnnosDockWidget(QtWidgets.QWidget, Ui_Form): def set_polygon_selected(self): items = self.listWidget.selectedItems() - have_selected = True if items else False if have_selected: self.mainwindow.scene.change_mode_to_edit() diff --git a/widgets/canvas.py b/widgets/canvas.py index 263e447..490bd31 100644 --- a/widgets/canvas.py +++ b/widgets/canvas.py @@ -2,7 +2,7 @@ # @Author : LG from PyQt5 import QtWidgets, QtGui, QtCore -from widgets.polygon import Polygon +from widgets.polygon import Polygon, Vertex from configs import STATUSMode, CLICKMode, DRAWMode, CONTOURMode from PIL import Image import numpy as np @@ -300,12 +300,16 @@ class AnnotationScene(QtWidgets.QGraphicsScene): def delete_selected_graph(self): deleted_layer = None for item in self.selectedItems(): - if item in self.mainwindow.polygons: + if isinstance(item, Polygon) and (item in self.mainwindow.polygons): self.mainwindow.polygons.remove(item) item.delete() self.removeItem(item) deleted_layer = item.zValue() del item + elif isinstance(item, Vertex): + index = item.polygon.vertexs.index(item) + item.polygon.removePoint(index) + if deleted_layer is not None: for p in self.mainwindow.polygons: if p.zValue() > deleted_layer: diff --git a/widgets/mainwindow.py b/widgets/mainwindow.py index 0019e08..0953216 100644 --- a/widgets/mainwindow.py +++ b/widgets/mainwindow.py @@ -165,16 +165,28 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow): self.pths_actions[model_name] = action self.menuSAM_model.addAction(action) + # mask alpha self.toolBar.addSeparator() self.mask_aplha = QtWidgets.QSlider(QtCore.Qt.Orientation.Horizontal, self) self.mask_aplha.setFixedWidth(50) self.mask_aplha.setStatusTip('Mask alpha.') - self.mask_aplha.setToolTip('Mask alpha ') + self.mask_aplha.setToolTip('Mask alpha') self.mask_aplha.setMaximum(10) self.mask_aplha.setMinimum(3) self.mask_aplha.valueChanged.connect(self.change_mask_aplha) self.toolBar.addWidget(self.mask_aplha) + # vertex size + self.toolBar.addSeparator() + self.vertex_size = QtWidgets.QSlider(QtCore.Qt.Orientation.Horizontal, self) + self.vertex_size.setFixedWidth(50) + self.vertex_size.setStatusTip('Vertex size.') + self.vertex_size.setToolTip('Vertex size') + self.vertex_size.setMaximum(10) + self.vertex_size.setMinimum(2) + self.vertex_size.valueChanged.connect(self.change_vertex_size) + self.toolBar.addWidget(self.vertex_size) + self.trans = QtCore.QTranslator() def translate(self, language='zh'): @@ -233,6 +245,9 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow): self.cfg['mask_alpha'] = mask_alpha self.mask_aplha.setValue(mask_alpha*10) + vertex_size = self.cfg.get('vertex_size', 2) + self.cfg['vertex_size'] = int(vertex_size) + model_name = self.cfg.get('model_name', '') self.init_segment_anything(model_name) @@ -558,6 +573,12 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow): self.scene.update_mask() self.cfg['mask_alpha'] = value + def change_vertex_size(self): + value = self.vertex_size.value() + self.cfg['vertex_size'] = value + if self.current_index is not None: + self.show_image(self.current_index) + def ISAT_to_VOC(self): self.ISAT_to_VOC_dialog.reset_gui() self.ISAT_to_VOC_dialog.show() diff --git a/widgets/polygon.py b/widgets/polygon.py index 80e0da0..e3ec7d0 100644 --- a/widgets/polygon.py +++ b/widgets/polygon.py @@ -6,14 +6,13 @@ from annotation import Object import typing class Vertex(QtWidgets.QGraphicsPathItem): - def __init__(self, polygon, index, color): + def __init__(self, polygon, color, nohover_size=2): super(Vertex, self).__init__() self.polygon = polygon - self.index = index self.color = color - self.hover_size = 3 - self.nohover_size = 2 + self.nohover_size = nohover_size + self.hover_size = self.nohover_size + 2 self.line_width = 0 self.nohover = QtGui.QPainterPath() @@ -32,7 +31,8 @@ class Vertex(QtWidgets.QGraphicsPathItem): self.setZValue(1e5) def itemChange(self, change: 'QtWidgets.QGraphicsItem.GraphicsItemChange', value: typing.Any): - + if change == QtWidgets.QGraphicsItem.GraphicsItemChange.ItemSelectedHasChanged: + self.scene().mainwindow.actionDelete.setEnabled(self.isSelected()) if change == QtWidgets.QGraphicsItem.GraphicsItemChange.ItemPositionChange and self.isEnabled(): # 限制顶点移动到图外 if value.x() < 0: @@ -43,8 +43,8 @@ class Vertex(QtWidgets.QGraphicsPathItem): value.setY(0) if value.y() > self.scene().height()-1: value.setY(self.scene().height()-1) - - self.polygon.movePoint(self.index, value) + index = self.polygon.vertexs.index(self) + self.polygon.movePoint(index, value) return super(Vertex, self).itemChange(change, value) @@ -85,7 +85,7 @@ class Polygon(QtWidgets.QGraphicsPolygonItem): def addPoint(self, point): self.points.append(point) - vertex = Vertex(self, len(self.points)-1, self.color) + vertex = Vertex(self, self.color, self.scene().mainwindow.cfg['vertex_size']) # 添加路径点 self.scene().addItem(vertex) self.vertexs.append(vertex)