From 974e70674861db2126504e75c6ef6eb9b5c71384 Mon Sep 17 00:00:00 2001 From: Markus Lampert Date: Mon, 25 Sep 2017 20:37:32 -0700 Subject: [PATCH] Switch out base in case user selects features of the original - fixes op placement. --- src/Mod/Path/PathScripts/PathJobGui.py | 4 +--- src/Mod/Path/PathScripts/PathOp.py | 28 +++++++++++++++++--------- src/Mod/Path/PathScripts/PathUtil.py | 10 +++++++++ 3 files changed, 30 insertions(+), 12 deletions(-) diff --git a/src/Mod/Path/PathScripts/PathJobGui.py b/src/Mod/Path/PathScripts/PathJobGui.py index e0a1d90adc..7a2048bf6a 100644 --- a/src/Mod/Path/PathScripts/PathJobGui.py +++ b/src/Mod/Path/PathScripts/PathJobGui.py @@ -458,9 +458,7 @@ class TaskPanel: self.stockEdit = None def baseObjectViewObject(self, obj): - base = obj.Proxy.baseObject(obj) - body = base.getParentGeoFeatureGroup() - return body.ViewObject if body else base.ViewObject + return PathUtil.getPublicObject(obj.Proxy.baseObject(obj)).ViewObject def baseObjectSaveVisibility(self, obj): baseVO = self.baseObjectViewObject(self.obj) diff --git a/src/Mod/Path/PathScripts/PathOp.py b/src/Mod/Path/PathScripts/PathOp.py index 9b7db21f5f..10a928949d 100644 --- a/src/Mod/Path/PathScripts/PathOp.py +++ b/src/Mod/Path/PathScripts/PathOp.py @@ -25,6 +25,7 @@ import FreeCAD import Path import PathScripts.PathLog as PathLog +import PathScripts.PathUtil as PathUtil import PathScripts.PathUtils as PathUtils from PathScripts.PathGeom import PathGeom @@ -252,6 +253,7 @@ class ObjectOp(object): if not ignoreErrors: PathLog.error(translate("Path", "Parent job %s doesn't have a base object") % job.Label) return False + self.job = job self.baseobject = job.Base self.stock = job.Stock return True @@ -400,13 +402,21 @@ class ObjectOp(object): def addBase(self, obj, base, sub): PathLog.track() - baselist = obj.Base - if baselist is None: - baselist = [] - item = (base, sub) - if item in baselist: - PathLog.notice(translate("Path", "this object already in the list" + "\n")) - else: - baselist.append(item) - obj.Base = baselist + base = PathUtil.getPublicObject(base) + + if self._setBaseAndStock(obj): + if base == self.job.Proxy.baseObject(self.job): + PathLog.info("this is it") + base = self.baseobject + else: + PathLog.info("no, base=%s job.base=%s" % (base, self.job.Proxy.baseObject(self.job))) + baselist = obj.Base + if baselist is None: + baselist = [] + item = (base, sub) + if item in baselist: + PathLog.notice(translate("Path", "this object already in the list" + "\n")) + else: + baselist.append(item) + obj.Base = baselist diff --git a/src/Mod/Path/PathScripts/PathUtil.py b/src/Mod/Path/PathScripts/PathUtil.py index c4a486682f..bda4577edd 100644 --- a/src/Mod/Path/PathScripts/PathUtil.py +++ b/src/Mod/Path/PathScripts/PathUtil.py @@ -70,10 +70,20 @@ def isSolid(obj): return False def toolControllerForOp(op): + '''toolControllerForOp(op) ... return the tool controller used by the op. + If the op doesn't have its own tool controller but has a Base object, return its tool controller. + Otherwise return None.''' if hasattr(op, 'ToolController'): return op.ToolController if hasattr(op, 'Base'): return toolControllerForOp(op.Base) return None +def getPublicObject(obj): + '''getPublicObject(obj) ... returns the object which should be used to reference a feature of the given object.''' + if hasattr(obj, 'getParentGeoFeatureGroup'): + body = obj.getParentGeoFeatureGroup() + if body: + return getPublicObject(body) + return obj