From c38eee06e20d1c3a8005f4ec1890548ce0e27df4 Mon Sep 17 00:00:00 2001 From: Markus Lampert Date: Mon, 27 Nov 2017 15:04:26 -0800 Subject: [PATCH] Abort OP creation transaction if TC selection is aborted with cancel, #3274 --- src/Mod/Path/PathScripts/PathDrilling.py | 3 ++- src/Mod/Path/PathScripts/PathHelix.py | 3 ++- src/Mod/Path/PathScripts/PathOp.py | 7 +++++-- src/Mod/Path/PathScripts/PathOpGui.py | 11 +++++++---- src/Mod/Path/PathScripts/PathUtils.py | 2 +- 5 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/Mod/Path/PathScripts/PathDrilling.py b/src/Mod/Path/PathScripts/PathDrilling.py index b1ac92a481..5f2ba85d31 100644 --- a/src/Mod/Path/PathScripts/PathDrilling.py +++ b/src/Mod/Path/PathScripts/PathDrilling.py @@ -124,5 +124,6 @@ def Create(name): '''Create(name) ... Creates and returns a Drilling operation.''' obj = FreeCAD.ActiveDocument.addObject("Path::FeaturePython", name) proxy = ObjectDrilling(obj) - proxy.findAllHoles(obj) + if obj.Proxy: + proxy.findAllHoles(obj) return obj diff --git a/src/Mod/Path/PathScripts/PathHelix.py b/src/Mod/Path/PathScripts/PathHelix.py index d2295d991f..c1b09562c6 100644 --- a/src/Mod/Path/PathScripts/PathHelix.py +++ b/src/Mod/Path/PathScripts/PathHelix.py @@ -197,5 +197,6 @@ def Create(name): '''Create(name) ... Creates and returns a Helix operation.''' obj = FreeCAD.ActiveDocument.addObject("Path::FeaturePython", name) proxy = ObjectHelix(obj) - proxy.findAllHoles(obj) + if obj.Proxy: + proxy.findAllHoles(obj) return obj diff --git a/src/Mod/Path/PathScripts/PathOp.py b/src/Mod/Path/PathScripts/PathOp.py index 863de21f29..175387bb5b 100644 --- a/src/Mod/Path/PathScripts/PathOp.py +++ b/src/Mod/Path/PathScripts/PathOp.py @@ -149,8 +149,8 @@ class ObjectOp(object): self.initOperation(obj) - obj.Proxy = self - self.setDefaultValues(obj) + if self.setDefaultValues(obj): + obj.Proxy = self def onDocumentRestored(self, obj): features = self.opFeatures(obj) @@ -244,6 +244,8 @@ class ObjectOp(object): if FeatureTool & features: obj.ToolController = PathUtils.findToolController(obj) + if not obj.ToolController: + return False obj.OpToolDiameter = 1.0 if FeatureDepths & features: @@ -273,6 +275,7 @@ class ObjectOp(object): self.opSetDefaultValues(obj) obj.recompute() + return True def _setBaseAndStock(self, obj, ignoreErrors=False): job = PathUtils.findParentJob(obj) diff --git a/src/Mod/Path/PathScripts/PathOpGui.py b/src/Mod/Path/PathScripts/PathOpGui.py index 26af229f4f..3c864724d4 100644 --- a/src/Mod/Path/PathScripts/PathOpGui.py +++ b/src/Mod/Path/PathScripts/PathOpGui.py @@ -934,11 +934,14 @@ def Create(res): that is created in each operations Gui implementation.''' FreeCAD.ActiveDocument.openTransaction("Create %s" % res.name) obj = res.objFactory(res.name) - vobj = ViewProvider(obj.ViewObject, res) + if obj.Proxy: + vobj = ViewProvider(obj.ViewObject, res) - FreeCAD.ActiveDocument.commitTransaction() - obj.ViewObject.startEditing() - return obj + FreeCAD.ActiveDocument.commitTransaction() + obj.ViewObject.startEditing() + return obj + FreeCAD.ActiveDocument.abortTransaction() + return None class CommandPathOp: '''Generic, data driven implementation of a Path operation creation command. diff --git a/src/Mod/Path/PathScripts/PathUtils.py b/src/Mod/Path/PathScripts/PathUtils.py index 88f9fd02f4..fdcdd27b84 100644 --- a/src/Mod/Path/PathScripts/PathUtils.py +++ b/src/Mod/Path/PathScripts/PathUtils.py @@ -456,7 +456,7 @@ def findToolController(obj, name=None): mylist = [i.Label for i in controllers] form.uiToolController.addItems(mylist) r = form.exec_() - if r is False: + if not r: tc = None else: tc = [i for i in controllers if i.Label == form.uiToolController.currentText()][0]