diff --git a/src/Mod/Path/Path/Main/Job.py b/src/Mod/Path/Path/Main/Job.py index a758232cc4..23203f4b21 100644 --- a/src/Mod/Path/Path/Main/Job.py +++ b/src/Mod/Path/Path/Main/Job.py @@ -604,7 +604,11 @@ class ObjectJob: if attrs.get(JobTemplate.ToolController): for tc in attrs.get(JobTemplate.ToolController): - tcs.append(PathToolController.FromTemplate(tc)) + ctrl = PathToolController.FromTemplate(tc) + if ctrl: + tcs.append(ctrl) + else: + Path.Log.debug(f"skipping TC {tc['name']}") if attrs.get(JobTemplate.Stock): obj.Stock = PathStock.CreateFromTemplate( obj, attrs.get(JobTemplate.Stock) @@ -622,7 +626,8 @@ class ObjectJob: obj.SplitOutput = attrs.get(JobTemplate.SplitOutput) Path.Log.debug("setting tool controllers (%d)" % len(tcs)) - obj.Tools.Group = tcs + if tcs: + obj.Tools.Group = tcs else: Path.Log.error( "Unsupported PathJob template version {}".format( diff --git a/src/Mod/Path/Path/Tool/Controller.py b/src/Mod/Path/Path/Tool/Controller.py index 1426adf058..794f0ea5ab 100644 --- a/src/Mod/Path/Path/Tool/Controller.py +++ b/src/Mod/Path/Path/Tool/Controller.py @@ -187,13 +187,20 @@ class ToolController: template.get(ToolControllerTemplate.ToolNumber) ) if template.get(ToolControllerTemplate.Tool): + self.ensureToolBit(obj) toolVersion = template.get(ToolControllerTemplate.Tool).get( ToolControllerTemplate.Version ) - self.ensureToolBit(obj) - obj.Tool = PathToolBit.Factory.CreateFromAttrs( - template.get(ToolControllerTemplate.Tool) - ) + if toolVersion == 2: + obj.Tool = PathToolBit.Factory.CreateFromAttrs( + template.get(ToolControllerTemplate.Tool) + ) + else: + obj.Tool = None + if toolVersion == 1: + Path.Log.error(f"{obj.Name} - legacy Tools no longer supported - ignoring") + else: + Path.Log.error(f"{obj.Name} - unknown Tool version {toolVersion} - ignoring") if ( obj.Tool and obj.Tool.ViewObject @@ -246,7 +253,7 @@ class ToolController: return attrs def execute(self, obj): - Path.Log.track() + Path.Log.track(obj.Name) args = { "toolnumber": obj.ToolNumber, @@ -304,7 +311,7 @@ def Create( assignTool=True, ): - Path.Log.track(tool, toolNumber) + Path.Log.track(name, tool, toolNumber, assignViewProvider, assignTool) obj = FreeCAD.ActiveDocument.addObject("Path::FeaturePython", name) obj.Label = name @@ -333,8 +340,10 @@ def FromTemplate(template, assignViewProvider=True): name = template.get(ToolControllerTemplate.Name, ToolControllerTemplate.Label) obj = Create(name, assignViewProvider=True, assignTool=False) obj.Proxy.setFromTemplate(obj, template) - - return obj + if obj.Tool: + return obj + FreeCAD.ActiveDocument.removeObject(obj.Name) + return None if FreeCAD.GuiUp: diff --git a/src/Mod/Path/Path/Tool/Gui/Controller.py b/src/Mod/Path/Path/Tool/Gui/Controller.py index c19937f777..630741908a 100644 --- a/src/Mod/Path/Path/Tool/Gui/Controller.py +++ b/src/Mod/Path/Path/Tool/Gui/Controller.py @@ -119,7 +119,7 @@ class ViewProvider: def claimChildren(self): obj = self.vobj.Object - if obj and obj.Proxy: + if obj and obj.Proxy and obj.Tool: return [obj.Tool] return []