From 44c796c8d336e320e9f3773558b3c674336c6e7a Mon Sep 17 00:00:00 2001 From: Roy-043 Date: Thu, 29 Aug 2024 17:41:19 +0200 Subject: [PATCH] Draft: Fix error handling of Draft_Trimex Selecting an edge or vertex of a solid was not handled properly. The tool does not support these subelements, but the code did not call self.finish() is such cases. --- src/Mod/Draft/draftguitools/gui_trimex.py | 25 +++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/Mod/Draft/draftguitools/gui_trimex.py b/src/Mod/Draft/draftguitools/gui_trimex.py index aba0e16269..93f337ec11 100644 --- a/src/Mod/Draft/draftguitools/gui_trimex.py +++ b/src/Mod/Draft/draftguitools/gui_trimex.py @@ -115,6 +115,9 @@ class Trimex(gui_base_original.Modifier): import Part if "Shape" not in self.obj.PropertiesList: + self.obj = None + self.finish() + _err(translate("draft", "This object is not supported.")) return if "Placement" in self.obj.PropertiesList: self.placement = self.obj.Placement @@ -127,14 +130,18 @@ class Trimex(gui_base_original.Modifier): elif len(self.obj.Shape.Faces) > 1: # face extrude mode, a new object is created ss = Gui.Selection.getSelectionEx()[0] - if len(ss.SubObjects) == 1: - if ss.SubObjects[0].ShapeType == "Face": - self.obj = self.doc.addObject("Part::Feature", "Face") - self.obj.Shape = ss.SubObjects[0] - self.extrudeMode = True - self.ghost = [trackers.ghostTracker([self.obj])] - self.normal = self.obj.Shape.Faces[0].normalAt(0.5, 0.5) - self.ghost += [trackers.lineTracker() for _ in self.obj.Shape.Vertexes] + if len(ss.SubObjects) == 1 and ss.SubObjects[0].ShapeType == "Face": + self.obj = self.doc.addObject("Part::Feature", "Face") + self.obj.Shape = ss.SubObjects[0] + self.extrudeMode = True + self.ghost = [trackers.ghostTracker([self.obj])] + self.normal = self.obj.Shape.Faces[0].normalAt(0.5, 0.5) + self.ghost += [trackers.lineTracker() for _ in self.obj.Shape.Vertexes] + else: + self.obj = None + self.finish() + _err(translate("draft", "Only a single face can be extruded.")) + return else: # normal wire trimex mode self.color = self.obj.ViewObject.LineColor @@ -160,7 +167,9 @@ class Trimex(gui_base_original.Modifier): self.ghost.append(trackers.arcTracker(scolor=sc, swidth=sw)) if not self.ghost: + self.obj = None self.finish() + return for g in self.ghost: g.on() self.activePoint = 0