支持调整顶点大小以及删除顶点
This commit is contained in:
parent
fb0205d993
commit
010b8667ca
@ -21,4 +21,5 @@ label:
|
||||
- color: '#5c3566'
|
||||
name: fence
|
||||
language: en
|
||||
mask_alpha: 0.6
|
||||
mask_alpha: 0.4
|
||||
vertex_size: 2
|
||||
|
@ -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()
|
||||
|
@ -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:
|
||||
|
@ -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()
|
||||
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user