From 4c1951aedccffa9e36e2fc1d5b363f906717eb61 Mon Sep 17 00:00:00 2001 From: Russell Johnson <47639332+Russ4262@users.noreply.github.com> Date: Thu, 12 Aug 2021 22:26:57 -0500 Subject: [PATCH] Path: Allow parent job assignment Modifications focus on allowing the creation of operations to include direct provision of parent job. Path: Remove `useGui` implementation --- src/Mod/Path/PathScripts/PathAdaptive.py | 4 ++-- src/Mod/Path/PathScripts/PathCustom.py | 4 ++-- src/Mod/Path/PathScripts/PathDeburr.py | 5 ++--- src/Mod/Path/PathScripts/PathDrilling.py | 5 +++-- src/Mod/Path/PathScripts/PathEngrave.py | 8 ++++---- src/Mod/Path/PathScripts/PathHelix.py | 4 ++-- src/Mod/Path/PathScripts/PathJobGui.py | 2 +- src/Mod/Path/PathScripts/PathMillFace.py | 4 ++-- src/Mod/Path/PathScripts/PathOp.py | 11 +++++++---- src/Mod/Path/PathScripts/PathOpGui.py | 5 +++-- src/Mod/Path/PathScripts/PathPocket.py | 4 ++-- src/Mod/Path/PathScripts/PathPocketShape.py | 6 +++--- src/Mod/Path/PathScripts/PathProbe.py | 4 ++-- src/Mod/Path/PathScripts/PathProfile.py | 4 ++-- src/Mod/Path/PathScripts/PathProfileContour.py | 4 ++-- src/Mod/Path/PathScripts/PathProfileEdges.py | 4 ++-- src/Mod/Path/PathScripts/PathProfileFaces.py | 4 ++-- src/Mod/Path/PathScripts/PathSlot.py | 4 ++-- src/Mod/Path/PathScripts/PathSurface.py | 4 ++-- src/Mod/Path/PathScripts/PathThreadMilling.py | 4 ++-- src/Mod/Path/PathScripts/PathVcarve.py | 4 ++-- src/Mod/Path/PathScripts/PathWaterline.py | 4 ++-- 22 files changed, 53 insertions(+), 49 deletions(-) diff --git a/src/Mod/Path/PathScripts/PathAdaptive.py b/src/Mod/Path/PathScripts/PathAdaptive.py index f7b96cf96e..4d16b1d68e 100644 --- a/src/Mod/Path/PathScripts/PathAdaptive.py +++ b/src/Mod/Path/PathScripts/PathAdaptive.py @@ -737,9 +737,9 @@ def SetupProperties(): return setup -def Create(name, obj=None): +def Create(name, obj=None, parentJob=None): '''Create(name) ... Creates and returns a Adaptive operation.''' if obj is None: obj = FreeCAD.ActiveDocument.addObject("Path::FeaturePython", name) - obj.Proxy = PathAdaptive(obj, name) + obj.Proxy = PathAdaptive(obj, name, parentJob) return obj diff --git a/src/Mod/Path/PathScripts/PathCustom.py b/src/Mod/Path/PathScripts/PathCustom.py index acfca878d2..73c4b4097e 100644 --- a/src/Mod/Path/PathScripts/PathCustom.py +++ b/src/Mod/Path/PathScripts/PathCustom.py @@ -70,9 +70,9 @@ def SetupProperties(): return setup -def Create(name, obj=None): +def Create(name, obj=None, parentJob=None): '''Create(name) ... Creates and returns a Custom operation.''' if obj is None: obj = FreeCAD.ActiveDocument.addObject("Path::FeaturePython", name) - proxy = ObjectCustom(obj, name) + obj.Proxy = ObjectCustom(obj, name, parentJob) return obj diff --git a/src/Mod/Path/PathScripts/PathDeburr.py b/src/Mod/Path/PathScripts/PathDeburr.py index 51bbb96207..fbfdf7cf02 100644 --- a/src/Mod/Path/PathScripts/PathDeburr.py +++ b/src/Mod/Path/PathScripts/PathDeburr.py @@ -291,10 +291,9 @@ def SetupProperties(): return setup -def Create(name, obj=None): +def Create(name, obj=None, parentJob=None): '''Create(name) ... Creates and returns a Deburr operation.''' if obj is None: obj = FreeCAD.ActiveDocument.addObject("Path::FeaturePython", name) - - obj.Proxy = ObjectDeburr(obj, name) + obj.Proxy = ObjectDeburr(obj, name, parentJob) return obj diff --git a/src/Mod/Path/PathScripts/PathDrilling.py b/src/Mod/Path/PathScripts/PathDrilling.py index 907749a904..fbcbce910a 100644 --- a/src/Mod/Path/PathScripts/PathDrilling.py +++ b/src/Mod/Path/PathScripts/PathDrilling.py @@ -159,12 +159,13 @@ def SetupProperties(): setup.append("RetractHeight") return setup -def Create(name, obj = None): + +def Create(name, obj=None, parentJob=None): '''Create(name) ... Creates and returns a Drilling operation.''' if obj is None: obj = FreeCAD.ActiveDocument.addObject("Path::FeaturePython", name) - obj.Proxy = ObjectDrilling(obj, name) + obj.Proxy = ObjectDrilling(obj, name, parentJob) if obj.Proxy: obj.Proxy.findAllHoles(obj) diff --git a/src/Mod/Path/PathScripts/PathEngrave.py b/src/Mod/Path/PathScripts/PathEngrave.py index 0edba1b07a..b60d2c977e 100644 --- a/src/Mod/Path/PathScripts/PathEngrave.py +++ b/src/Mod/Path/PathScripts/PathEngrave.py @@ -48,8 +48,8 @@ def translate(context, text, disambig=None): class ObjectEngrave(PathEngraveBase.ObjectOp): '''Proxy class for Engrave operation.''' - def __init__(self, obj, name): - super(ObjectEngrave, self).__init__(obj, name) + def __init__(self, obj, name, parentJob): + super(ObjectEngrave, self).__init__(obj, name, parentJob) self.wires = [] def opFeatures(self, obj): @@ -144,9 +144,9 @@ def SetupProperties(): return ["StartVertex"] -def Create(name, obj=None): +def Create(name, obj=None, parentJob=None): '''Create(name) ... Creates and returns an Engrave operation.''' if obj is None: obj = FreeCAD.ActiveDocument.addObject("Path::FeaturePython", name) - obj.Proxy = ObjectEngrave(obj, name) + obj.Proxy = ObjectEngrave(obj, name, parentJob) return obj diff --git a/src/Mod/Path/PathScripts/PathHelix.py b/src/Mod/Path/PathScripts/PathHelix.py index 59a729ab84..b74669f53f 100644 --- a/src/Mod/Path/PathScripts/PathHelix.py +++ b/src/Mod/Path/PathScripts/PathHelix.py @@ -214,11 +214,11 @@ def SetupProperties(): return setup -def Create(name, obj=None): +def Create(name, obj=None, parentJob=None): '''Create(name) ... Creates and returns a Helix operation.''' if obj is None: obj = FreeCAD.ActiveDocument.addObject("Path::FeaturePython", name) - obj.Proxy = ObjectHelix(obj, name) + obj.Proxy = ObjectHelix(obj, name, parentJob) if obj.Proxy: obj.Proxy.findAllHoles(obj) return obj diff --git a/src/Mod/Path/PathScripts/PathJobGui.py b/src/Mod/Path/PathScripts/PathJobGui.py index ce62fd0923..327b676b30 100644 --- a/src/Mod/Path/PathScripts/PathJobGui.py +++ b/src/Mod/Path/PathScripts/PathJobGui.py @@ -175,8 +175,8 @@ class ViewProvider: FreeCADGui.Control.closeDialog() FreeCADGui.Control.showDialog(self.taskPanel) self.taskPanel.setupUi(activate) - self.deleteOnReject = False self.showOriginAxis(True) + self.deleteOnReject = False def resetTaskPanel(self): self.showOriginAxis(False) diff --git a/src/Mod/Path/PathScripts/PathMillFace.py b/src/Mod/Path/PathScripts/PathMillFace.py index db01c49379..f3c1d93511 100644 --- a/src/Mod/Path/PathScripts/PathMillFace.py +++ b/src/Mod/Path/PathScripts/PathMillFace.py @@ -304,9 +304,9 @@ def SetupProperties(): return setup -def Create(name, obj=None): +def Create(name, obj=None, parentJob=None): '''Create(name) ... Creates and returns a Mill Facing operation.''' if obj is None: obj = FreeCAD.ActiveDocument.addObject("Path::FeaturePython", name) - obj.Proxy = ObjectFace(obj, name) + obj.Proxy = ObjectFace(obj, name, parentJob) return obj diff --git a/src/Mod/Path/PathScripts/PathOp.py b/src/Mod/Path/PathScripts/PathOp.py index fa53a20093..d9537f99f7 100644 --- a/src/Mod/Path/PathScripts/PathOp.py +++ b/src/Mod/Path/PathScripts/PathOp.py @@ -119,7 +119,7 @@ class ObjectOp(object): obj.addProperty("App::PropertyDistance", "OpStockZMin", "Op Values", QtCore.QT_TRANSLATE_NOOP("PathOp", "Holds the min Z value of Stock")) obj.setEditorMode('OpStockZMin', 1) # read-only - def __init__(self, obj, name): + def __init__(self, obj, name, parentJob=None): PathLog.track() obj.addProperty("App::PropertyBool", "Active", "Path", QtCore.QT_TRANSLATE_NOOP("PathOp", "Make False, to prevent operation from generating code")) @@ -190,6 +190,8 @@ class ObjectOp(object): self.initOperation(obj) if not hasattr(obj, 'DoNotSetDefaultValues') or not obj.DoNotSetDefaultValues: + if parentJob: + self.job = PathUtils.addToJob(obj, jobname=parentJob.Name) job = self.setDefaultValues(obj) if job: job.SetupSheet.Proxy.setOperationProperties(obj, name) @@ -322,7 +324,10 @@ class ObjectOp(object): def setDefaultValues(self, obj): '''setDefaultValues(obj) ... base implementation. Do not overwrite, overwrite opSetDefaultValues() instead.''' - job = PathUtils.addToJob(obj) + if self.job: + job = self.job + else: + job = PathUtils.addToJob(obj) obj.Active = True @@ -622,5 +627,3 @@ class ObjectOp(object): 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 6fcdf86e54..d7aafb37c3 100644 --- a/src/Mod/Path/PathScripts/PathOpGui.py +++ b/src/Mod/Path/PathScripts/PathOpGui.py @@ -1280,12 +1280,12 @@ 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) - obj = res.objFactory(res.name) + obj = res.objFactory(res.name, obj=None, parentJob=res.job) if obj.Proxy: obj.ViewObject.Proxy = ViewProvider(obj.ViewObject, res) obj.ViewObject.Visibility = False - FreeCAD.ActiveDocument.commitTransaction() + obj.ViewObject.Document.setEdit(obj.ViewObject, 0) return obj FreeCAD.ActiveDocument.abortTransaction() @@ -1329,6 +1329,7 @@ class CommandResources: self.menuText = menuText self.accelKey = accelKey self.toolTip = toolTip + self.job = None def SetupOperation(name, diff --git a/src/Mod/Path/PathScripts/PathPocket.py b/src/Mod/Path/PathScripts/PathPocket.py index 643cfdc06a..65249c6b20 100644 --- a/src/Mod/Path/PathScripts/PathPocket.py +++ b/src/Mod/Path/PathScripts/PathPocket.py @@ -717,9 +717,9 @@ def SetupProperties(): return PathPocketBase.SetupProperties() + ["HandleMultipleFeatures"] -def Create(name, obj=None): +def Create(name, obj=None, parentJob=None): '''Create(name) ... Creates and returns a Pocket operation.''' if obj is None: obj = FreeCAD.ActiveDocument.addObject("Path::FeaturePython", name) - obj.Proxy = ObjectPocket(obj, name) + obj.Proxy = ObjectPocket(obj, name, parentJob) return obj diff --git a/src/Mod/Path/PathScripts/PathPocketShape.py b/src/Mod/Path/PathScripts/PathPocketShape.py index 902fb21c44..8a52dbb6fc 100644 --- a/src/Mod/Path/PathScripts/PathPocketShape.py +++ b/src/Mod/Path/PathScripts/PathPocketShape.py @@ -242,11 +242,11 @@ def SetupProperties(): return setup -def Create(name, obj=None): +def Create(name, obj=None, parentJob=None): '''Create(name) ... Creates and returns a Pocket operation.''' if obj is None: obj = FreeCAD.ActiveDocument.addObject('Path::FeaturePython', name) - - obj.Proxy = ObjectPocket(obj, name) + obj.Proxy = ObjectPocket(obj, name, parentJob) + return obj return obj \ No newline at end of file diff --git a/src/Mod/Path/PathScripts/PathProbe.py b/src/Mod/Path/PathScripts/PathProbe.py index f555b00075..e2fc33e8f0 100644 --- a/src/Mod/Path/PathScripts/PathProbe.py +++ b/src/Mod/Path/PathScripts/PathProbe.py @@ -97,9 +97,9 @@ def SetupProperties(): return setup -def Create(name, obj=None): +def Create(name, obj=None, parentJob=None): '''Create(name) ... Creates and returns a Probing operation.''' if obj is None: obj = FreeCAD.ActiveDocument.addObject("Path::FeaturePython", name) - proxy = ObjectProbing(obj, name) + proxy = ObjectProbing(obj, name, parentJob) return obj diff --git a/src/Mod/Path/PathScripts/PathProfile.py b/src/Mod/Path/PathScripts/PathProfile.py index 39f65f9956..07901949f8 100644 --- a/src/Mod/Path/PathScripts/PathProfile.py +++ b/src/Mod/Path/PathScripts/PathProfile.py @@ -1301,9 +1301,9 @@ def SetupProperties(): return setup -def Create(name, obj=None): +def Create(name, obj=None, parentJob=None): '''Create(name) ... Creates and returns a Profile based on faces operation.''' if obj is None: obj = FreeCAD.ActiveDocument.addObject("Path::FeaturePython", name) - obj.Proxy = ObjectProfile(obj, name) + obj.Proxy = ObjectProfile(obj, name, parentJob) return obj diff --git a/src/Mod/Path/PathScripts/PathProfileContour.py b/src/Mod/Path/PathScripts/PathProfileContour.py index e743cdc8eb..ba02016b48 100644 --- a/src/Mod/Path/PathScripts/PathProfileContour.py +++ b/src/Mod/Path/PathScripts/PathProfileContour.py @@ -42,9 +42,9 @@ def SetupProperties(): return PathProfile.SetupProperties() -def Create(name, obj=None): +def Create(name, obj=None, parentJob=None): '''Create(name) ... Creates and returns a Profile operation.''' if obj is None: obj = FreeCAD.ActiveDocument.addObject("Path::FeaturePython", name) - obj.Proxy = ObjectContour(obj, name) + obj.Proxy = ObjectContour(obj, name, parentJob) return obj diff --git a/src/Mod/Path/PathScripts/PathProfileEdges.py b/src/Mod/Path/PathScripts/PathProfileEdges.py index 26a28e701a..a79a93e2b1 100644 --- a/src/Mod/Path/PathScripts/PathProfileEdges.py +++ b/src/Mod/Path/PathScripts/PathProfileEdges.py @@ -43,9 +43,9 @@ def SetupProperties(): return PathProfile.SetupProperties() -def Create(name, obj=None): +def Create(name, obj=None, parentJob=None): '''Create(name) ... Creates and returns a Profile operation.''' if obj is None: obj = FreeCAD.ActiveDocument.addObject("Path::FeaturePython", name) - obj.Proxy = ObjectProfile(obj, name) + obj.Proxy = ObjectProfile(obj, name, parentJob) return obj diff --git a/src/Mod/Path/PathScripts/PathProfileFaces.py b/src/Mod/Path/PathScripts/PathProfileFaces.py index 2896ab4390..f8f0b705dc 100644 --- a/src/Mod/Path/PathScripts/PathProfileFaces.py +++ b/src/Mod/Path/PathScripts/PathProfileFaces.py @@ -44,9 +44,9 @@ def SetupProperties(): return PathProfile.SetupProperties() -def Create(name, obj=None): +def Create(name, obj=None, parentJob=None): '''Create(name) ... Creates and returns a Profile operation.''' if obj is None: obj = FreeCAD.ActiveDocument.addObject("Path::FeaturePython", name) - obj.Proxy = ObjectProfile(obj, name) + obj.Proxy = ObjectProfile(obj, name, parentJob) return obj diff --git a/src/Mod/Path/PathScripts/PathSlot.py b/src/Mod/Path/PathScripts/PathSlot.py index 472a7fbe8f..9048b66a08 100644 --- a/src/Mod/Path/PathScripts/PathSlot.py +++ b/src/Mod/Path/PathScripts/PathSlot.py @@ -1767,9 +1767,9 @@ def SetupProperties(): return [tup[1] for tup in ObjectSlot.opPropertyDefinitions(False)] -def Create(name, obj=None): +def Create(name, obj=None, parentJob=None): '''Create(name) ... Creates and returns a Slot operation.''' if obj is None: obj = FreeCAD.ActiveDocument.addObject("Path::FeaturePython", name) - obj.Proxy = ObjectSlot(obj, name) + obj.Proxy = ObjectSlot(obj, name, parentJob) return obj diff --git a/src/Mod/Path/PathScripts/PathSurface.py b/src/Mod/Path/PathScripts/PathSurface.py index 015fdbb579..bf2107b34c 100644 --- a/src/Mod/Path/PathScripts/PathSurface.py +++ b/src/Mod/Path/PathScripts/PathSurface.py @@ -2124,9 +2124,9 @@ def SetupProperties(): return [tup[1] for tup in ObjectSurface.opPropertyDefinitions(False)] -def Create(name, obj=None): +def Create(name, obj=None, parentJob=None): '''Create(name) ... Creates and returns a Surface operation.''' if obj is None: obj = FreeCAD.ActiveDocument.addObject("Path::FeaturePython", name) - obj.Proxy = ObjectSurface(obj, name) + obj.Proxy = ObjectSurface(obj, name, parentJob) return obj diff --git a/src/Mod/Path/PathScripts/PathThreadMilling.py b/src/Mod/Path/PathScripts/PathThreadMilling.py index f7ca04b19a..0c5580d8eb 100644 --- a/src/Mod/Path/PathScripts/PathThreadMilling.py +++ b/src/Mod/Path/PathScripts/PathThreadMilling.py @@ -327,11 +327,11 @@ def SetupProperties(): return setup -def Create(name, obj=None): +def Create(name, obj=None, parentJob=None): '''Create(name) ... Creates and returns a thread milling operation.''' if obj is None: obj = FreeCAD.ActiveDocument.addObject("Path::FeaturePython", name) - obj.Proxy = ObjectThreadMilling(obj, name) + obj.Proxy = ObjectThreadMilling(obj, name, parentJob) if obj.Proxy: obj.Proxy.findAllHoles(obj) return obj diff --git a/src/Mod/Path/PathScripts/PathVcarve.py b/src/Mod/Path/PathScripts/PathVcarve.py index 4b93ed1ad3..45609ebcf3 100644 --- a/src/Mod/Path/PathScripts/PathVcarve.py +++ b/src/Mod/Path/PathScripts/PathVcarve.py @@ -363,9 +363,9 @@ def SetupProperties(): return ["Discretize"] -def Create(name, obj=None): +def Create(name, obj=None, parentJob=None): '''Create(name) ... Creates and returns a Vcarve operation.''' if obj is None: obj = FreeCAD.ActiveDocument.addObject("Path::FeaturePython", name) - ObjectVcarve(obj, name) + obj.Proxy = ObjectVcarve(obj, name, parentJob) return obj diff --git a/src/Mod/Path/PathScripts/PathWaterline.py b/src/Mod/Path/PathScripts/PathWaterline.py index 764d4c723b..9ccc95bd68 100644 --- a/src/Mod/Path/PathScripts/PathWaterline.py +++ b/src/Mod/Path/PathScripts/PathWaterline.py @@ -1814,9 +1814,9 @@ def SetupProperties(): return [tup[1] for tup in ObjectWaterline.opPropertyDefinitions(False)] -def Create(name, obj=None): +def Create(name, obj=None, parentJob=None): '''Create(name) ... Creates and returns a Waterline operation.''' if obj is None: obj = FreeCAD.ActiveDocument.addObject("Path::FeaturePython", name) - obj.Proxy = ObjectWaterline(obj, name) + obj.Proxy = ObjectWaterline(obj, name, parentJob) return obj