diff --git a/src/Mod/Path/PathScripts/PathOp.py b/src/Mod/Path/PathScripts/PathOp.py index 24497f1a58..0a16a1361c 100644 --- a/src/Mod/Path/PathScripts/PathOp.py +++ b/src/Mod/Path/PathScripts/PathOp.py @@ -324,7 +324,7 @@ class ObjectOp(object): if 1 < len(job.Operations.Group): obj.ToolController = PathUtil.toolControllerForOp(job.Operations.Group[-2]) else: - obj.ToolController = PathUtils.findToolController(obj) + obj.ToolController = PathUtils.findToolController(obj, self) if not obj.ToolController: return None obj.OpToolDiameter = obj.ToolController.Tool.Diameter @@ -585,3 +585,11 @@ class ObjectOp(object): obj.Base = baselist else: PathLog.notice((translate("Path", "Base object %s.%s rejected by operation") + "\n") % (base.Label, sub)) + + def isToolSupported(self, obj, tool): + '''toolSupported(obj, tool) ... Returns true if the op supports the given tool. + This function can safely be overwritten by subclasses.''' + + return True + + diff --git a/src/Mod/Path/PathScripts/PathOpGui.py b/src/Mod/Path/PathScripts/PathOpGui.py index b1643ed119..d0d5c22d83 100644 --- a/src/Mod/Path/PathScripts/PathOpGui.py +++ b/src/Mod/Path/PathScripts/PathOpGui.py @@ -383,7 +383,7 @@ class TaskPanelPage(object): combo.blockSignals(False) if obj.ToolController is None: - obj.ToolController = PathUtils.findToolController(obj) + obj.ToolController = PathUtils.findToolController(obj, obj.Proxy) if obj.ToolController is not None: self.selectInComboBox(obj.ToolController.Label, combo) @@ -391,7 +391,7 @@ class TaskPanelPage(object): '''updateToolController(obj, combo) ... helper function to update obj's ToolController property if a different one has been selected in the combo box.''' - tc = PathUtils.findToolController(obj, combo.currentText()) + tc = PathUtils.findToolController(obj, obj.Proxy, combo.currentText()) if obj.ToolController != tc: obj.ToolController = tc diff --git a/src/Mod/Path/PathScripts/PathUtils.py b/src/Mod/Path/PathScripts/PathUtils.py index e78b1cfb2d..c53b7a2ab6 100644 --- a/src/Mod/Path/PathScripts/PathUtils.py +++ b/src/Mod/Path/PathScripts/PathUtils.py @@ -392,19 +392,22 @@ def reverseEdge(e): return newedge -def getToolControllers(obj): +def getToolControllers(obj, proxy=None): '''returns all the tool controllers''' + if proxy is None: + proxy = obj.Proxy try: job = findParentJob(obj) except Exception: # pylint: disable=broad-except job = None + print("op={} ({})".format(obj.Label, type(obj))) if job: - return job.ToolController + return [c for c in job.ToolController if proxy.isToolSupported(obj, c.Tool)] return [] -def findToolController(obj, name=None): +def findToolController(obj, proxy, name=None): '''returns a tool controller with a given name. If no name is specified, returns the first controller. if no controller is found, returns None''' @@ -416,7 +419,7 @@ def findToolController(obj, name=None): if c is not None: return c - controllers = getToolControllers(obj) + controllers = getToolControllers(obj, proxy) if len(controllers) == 0: return None