支持调整顶点大小以及删除顶点

This commit is contained in:
yatengLG 2023-08-10 14:35:56 +08:00
parent fb0205d993
commit 010b8667ca
5 changed files with 38 additions and 13 deletions

View File

@ -21,4 +21,5 @@ label:
- color: '#5c3566'
name: fence
language: en
mask_alpha: 0.6
mask_alpha: 0.4
vertex_size: 2

View File

@ -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()

View File

@ -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:

View File

@ -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()

View File

@ -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)