From db65e44bcaae4e2045c797df16a7f3410d5974f0 Mon Sep 17 00:00:00 2001 From: sliptonic Date: Mon, 1 Dec 2025 10:59:49 -0600 Subject: [PATCH] CAM: fixes bug with op creation/cancelation (#25800) --- src/Mod/CAM/Path/Op/Base.py | 5 ++++- src/Mod/CAM/Path/Op/Gui/Base.py | 22 ++++++++++++++++++---- src/Mod/CAM/PathScripts/PathUtilsGui.py | 1 - 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/Mod/CAM/Path/Op/Base.py b/src/Mod/CAM/Path/Op/Base.py index 9ad9509f38..1a9cea247b 100644 --- a/src/Mod/CAM/Path/Op/Base.py +++ b/src/Mod/CAM/Path/Op/Base.py @@ -550,7 +550,10 @@ class ObjectOp(object): job = self.job else: job = PathUtils.addToJob(obj) - + if not job: + raise ValueError( + "No job associated with the operation. Please ensure the operation is part of a job." + ) obj.Active = True features = self.opFeatures(obj) diff --git a/src/Mod/CAM/Path/Op/Gui/Base.py b/src/Mod/CAM/Path/Op/Gui/Base.py index d3b0557dcd..ef950eac56 100644 --- a/src/Mod/CAM/Path/Op/Gui/Base.py +++ b/src/Mod/CAM/Path/Op/Gui/Base.py @@ -33,7 +33,6 @@ import Path.Op.Base as PathOp import Path.Op.Gui.Selection as PathSelection import Path.Tool.Controller as PathToolController from Path.Tool.library.ui.dock import ToolBitLibraryDock -import PathGui import PathScripts.PathUtils as PathUtils import importlib from PySide.QtCore import QT_TRANSLATE_NOOP @@ -422,9 +421,10 @@ class TaskPanelPage(object): self.tcEditor.controller.hide() def resetToolController(self, job, tc): - if self.obj is not None: - self.obj.ToolController = tc - self.setupToolController() + if self.obj is None: + return + self.obj.ToolController = tc + self.setupToolController() def copyToolController(self): oldTc = self.tcEditor.obj @@ -1454,6 +1454,9 @@ def Create(res): this function directly, but calls the Activated() function of the Command object that is created in each operations Gui implementation.""" FreeCAD.ActiveDocument.openTransaction("Create %s" % res.name) + if res.job is None: + FreeCAD.ActiveDocument.abortTransaction() + raise ValueError("No job selected. Operation creation aborted.") try: obj = res.objFactory(res.name, obj=None, parentJob=res.job) if obj.Proxy: @@ -1502,6 +1505,17 @@ class CommandPathOp: return False def Activated(self): + jobs = PathUtils.GetJobs() + if not jobs: + return + job = PathUtils.UserInput.chooseJob(jobs) + if job is None: + return # Abort if no job selected or canceled + self.res.job = job + return Create(self.res) + + def setJob(self, job): + self.res.job = job return Create(self.res) diff --git a/src/Mod/CAM/PathScripts/PathUtilsGui.py b/src/Mod/CAM/PathScripts/PathUtilsGui.py index 34d35c11f0..7738c1f688 100644 --- a/src/Mod/CAM/PathScripts/PathUtilsGui.py +++ b/src/Mod/CAM/PathScripts/PathUtilsGui.py @@ -26,7 +26,6 @@ import FreeCAD import Path import Path.Main.Gui.JobCmd as PathJobCmd import Path.Tool.Controller as PathToolController -import PathGui import PathScripts.PathUtils as PathUtils from PySide import QtGui