Bladeren bron

Fix bugs around removing points and point-empty shape

Kentaro Wada 4 jaren geleden
bovenliggende
commit
3a6e076469
2 gewijzigde bestanden met toevoegingen van 23 en 1 verwijderingen
  1. 15 1
      labelme/app.py
  2. 8 0
      labelme/widgets/canvas.py

+ 15 - 1
labelme/app.py

@@ -405,7 +405,7 @@ class MainWindow(QtWidgets.QMainWindow):
         )
         removePoint = action(
             text="Remove Selected Point",
-            slot=self.canvas.removeSelectedPoint,
+            slot=self.removeSelectedPoint,
             icon="edit",
             tip="Remove selected point from polygon",
             enabled=False,
@@ -1168,6 +1168,10 @@ class MainWindow(QtWidgets.QMainWindow):
             group_id = shape["group_id"]
             other_data = shape["other_data"]
 
+            if not points:
+                # skip point-empty shape
+                continue
+
             shape = Shape(
                 label=label,
                 shape_type=shape_type,
@@ -1869,6 +1873,16 @@ class MainWindow(QtWidgets.QMainWindow):
     def toggleKeepPrevMode(self):
         self._config["keep_prev"] = not self._config["keep_prev"]
 
+    def removeSelectedPoint(self):
+        self.canvas.removeSelectedPoint()
+        if not self.canvas.hShape.points:
+            self.canvas.deleteShape(self.canvas.hShape)
+            self.remLabels([self.canvas.hShape])
+            self.setDirty()
+            if self.noShapes():
+                for action in self.actions.onShapesPresent:
+                    action.setEnabled(False)
+
     def deleteSelectedShape(self):
         yes, no = QtWidgets.QMessageBox.Yes, QtWidgets.QMessageBox.No
         msg = self.tr(

+ 8 - 0
labelme/widgets/canvas.py

@@ -524,6 +524,14 @@ class Canvas(QtWidgets.QWidget):
             self.update()
         return deleted_shapes
 
+    def deleteShape(self, shape):
+        if shape in self.selectedShapes:
+            self.selectedShapes.remove(shape)
+        if shape in self.shapes:
+            self.shapes.remove(shape)
+        self.storeShapes()
+        self.update()
+
     def copySelectedShapes(self):
         if self.selectedShapes:
             self.selectedShapesCopy = [s.copy() for s in self.selectedShapes]