From ead2eb4e468f1a95520c09ce1ef17866f1f88af5 Mon Sep 17 00:00:00 2001 From: Markus Lampert Date: Sun, 1 Oct 2017 23:52:37 -0700 Subject: [PATCH] Replaced job default-properties with setting spreadsheet and set expressions for heights and rapid speeds. --- src/Mod/Path/PathScripts/PathJob.py | 54 +++++++++++++++----------- src/Mod/Path/PathScripts/PathJobGui.py | 3 ++ src/Mod/Path/PathScripts/PathOp.py | 18 ++++----- 3 files changed, 43 insertions(+), 32 deletions(-) diff --git a/src/Mod/Path/PathScripts/PathJob.py b/src/Mod/Path/PathScripts/PathJob.py index 0d1f7f8a2c..46cf1924f0 100644 --- a/src/Mod/Path/PathScripts/PathJob.py +++ b/src/Mod/Path/PathScripts/PathJob.py @@ -123,7 +123,7 @@ class ObjectJob: obj.setEditorMode('Operations', 2) # hide obj.setEditorMode('Placement', 2) - self.initDefaultValues(obj) + self.setupSettings(obj) obj.Base = createResourceClone(obj, base, 'Base', 'BaseGeometry') obj.Proxy = self @@ -138,18 +138,23 @@ class ObjectJob: if obj.Stock.ViewObject: obj.Stock.ViewObject.Visibility = False + def setSetting(self, obj, row, name, value, label): + labelCell = "B%d" % row + valueCell = "C%d" % row + obj.Settings.set(labelCell, label) + obj.Settings.set(valueCell, value) + obj.Settings.setAlias(valueCell, name) - def initDefaultValues(self, obj): - if not hasattr(obj, 'DefaultHorizRapid'): - obj.addProperty('App::PropertySpeed', 'DefaultHorizRapid', 'Defaults', QtCore.QT_TRANSLATE_NOOP('PathJob', 'Horizontal rapid feed rate for new tool controllers')) - if not hasattr(obj, 'DefaultVertRapid'): - obj.addProperty('App::PropertySpeed', 'DefaultVertRapid', 'Defaults', QtCore.QT_TRANSLATE_NOOP('PathJob', 'Vertical rapid feed rate for new tool controllers')) - if not hasattr(obj, 'DefaultSafeHeight'): - obj.addProperty('App::PropertyLength', 'DefaultSafeHeight', 'Defaults', QtCore.QT_TRANSLATE_NOOP('PathJob', 'Extra distance on top of StartDepth to set SafeHeight')) - obj.DefaultSafeHeight = 3.0 - if not hasattr(obj, 'DefaultClearanceHeight'): - obj.addProperty('App::PropertyLength', 'DefaultClearanceHeight', 'Defaults', QtCore.QT_TRANSLATE_NOOP('PathJob', 'Extra distance on top of StartDepth to set ClearanceHeight')) - obj.DefaultClearanceHeight = 5.0 + def setupSettings(self, obj): + if not hasattr(obj, 'Settings'): + obj.addProperty('App::PropertyLink', 'Settings', 'Base', QtCore.QT_TRANSLATE_NOOP('PathJob', 'Spreadsheet holding the settings for this job')) + obj.Settings = obj.Document.addObject('Spreadsheet::Sheet', 'Settings') + obj.Settings.set('A2', translate('PathJob', 'Tool Rapid Speeds')) + self.setSetting(obj, 3, 'DefaultHorizRapid', '0 mm/s', translate('PathJob', 'Default Horizontal Rapid')) + self.setSetting(obj, 4, 'DefaultVertRapid', '0 mm/s', translate('PathJob', 'Default Vertical Rapid')) + obj.Settings.set('A6', translate('PathJob', 'Operation Heights')) + self.setSetting(obj, 7, 'DefaultSafeHeight', '3 mm', translate('PathJob', 'Default Safe Height')) + self.setSetting(obj, 8, 'DefaultClearanceHeight', '5 mm', translate('PathJob', 'Default Clearance Height')) def onDelete(self, obj, arg2=None): '''Called by the view provider, there doesn't seem to be a callback on the obj itself.''' @@ -180,6 +185,9 @@ class ObjectJob: for tc in obj.ToolController: doc.removeObject(tc.Name) obj.ToolController = [] + # Settings + doc.removeObject(obj.Settings.Name) + obj.Settings = None def fixupResourceClone(self, obj, name, icon): if not isResourceClone(obj, name, name) and not isArchPanelSheet(obj): @@ -189,7 +197,7 @@ class ObjectJob: def onDocumentRestored(self, obj): self.fixupResourceClone(obj, 'Base', 'BaseGeometry') - self.initDefaultValues(obj) + self.setupSettings(obj) def onChanged(self, obj, prop): if prop == "PostProcessor" and obj.PostProcessor: @@ -233,13 +241,13 @@ class ObjectJob: obj.Stock = PathStock.CreateFromTemplate(obj, attrs.get(JobTemplate.Stock)) if attrs.get(JobTemplate.DefaultVertRapid): - obj.DefaultVertRapid = attrs[JobTemplate.DefaultVertRapid] + obj.Settings.DefaultVertRapid = attrs[JobTemplate.DefaultVertRapid] if attrs.get(JobTemplate.DefaultHorizRapid): - obj.DefaultHorizRapid = attrs[JobTemplate.DefaultHorizRapid] + obj.Settings.DefaultHorizRapid = attrs[JobTemplate.DefaultHorizRapid] if attrs.get(JobTemplate.DefaultSafeHeight): - obj.DefaultSafeHeight = attrs[JobTemplate.DefaultSafeHeight] + obj.Settings.DefaultSafeHeight = attrs[JobTemplate.DefaultSafeHeight] if attrs.get(JobTemplate.DefaultClearanceHeight): - obj.DefaultClearanceHeight = attrs[JobTemplate.DefaultClearanceHeight] + obj.Settings.DefaultClearanceHeight = attrs[JobTemplate.DefaultClearanceHeight] else: PathLog.error(translate('PathJob', "Unsupported PathJob template version %s") % attrs.get(JobTemplate.Version)) tcs.append(PathToolController.Create()) @@ -260,10 +268,10 @@ class ObjectJob: attrs[JobTemplate.GeometryTolerance] = str(obj.GeometryTolerance.Value) if obj.Description: attrs[JobTemplate.Description] = obj.Description - attrs[JobTemplate.DefaultVertRapid] = obj.DefaultVertRapid.UserString - attrs[JobTemplate.DefaultHorizRapid] = obj.DefaultHorizRapid.UserString - attrs[JobTemplate.DefaultSafeHeight] = obj.DefaultSafeHeight.UserString - attrs[JobTemplate.DefaultClearanceHeight] = obj.DefaultClearanceHeight.UserString + attrs[JobTemplate.DefaultVertRapid] = obj.Settings.DefaultVertRapid.UserString + attrs[JobTemplate.DefaultHorizRapid] = obj.Settings.DefaultHorizRapid.UserString + attrs[JobTemplate.DefaultSafeHeight] = obj.Settings.DefaultSafeHeight.UserString + attrs[JobTemplate.DefaultClearanceHeight] = obj.Settings.DefaultClearanceHeight.UserString return attrs def __getstate__(self): @@ -289,8 +297,8 @@ class ObjectJob: group = self.obj.ToolController PathLog.info("addToolController(%s): %s" % (tc.Label, [t.Label for t in group])) if tc.Name not in [str(t.Name) for t in group]: - tc.VertRapid = self.obj.DefaultVertRapid - tc.HorizRapid = self.obj.DefaultHorizRapid + tc.setExpression('VertRapid', "%s.DefaultVertRapid" % self.obj.Settings.Name) + tc.setExpression('HorizRapid', "%s.DefaultHorizRapid" % self.obj.Settings.Name) group.append(tc) self.obj.ToolController = group diff --git a/src/Mod/Path/PathScripts/PathJobGui.py b/src/Mod/Path/PathScripts/PathJobGui.py index 42e3bbe844..b5b7a90e41 100644 --- a/src/Mod/Path/PathScripts/PathJobGui.py +++ b/src/Mod/Path/PathScripts/PathJobGui.py @@ -156,6 +156,9 @@ class ViewProvider: children.append(self.obj.Base) if self.obj.Stock: children.append(self.obj.Stock) + if hasattr(self.obj, 'Settings'): + # when loading a job that didn't have settings they might not've been created yet + children.append(self.obj.Settings) return children def onDelete(self, vobj, arg2=None): diff --git a/src/Mod/Path/PathScripts/PathOp.py b/src/Mod/Path/PathScripts/PathOp.py index 0570e04cd9..74c0a0ac87 100644 --- a/src/Mod/Path/PathScripts/PathOp.py +++ b/src/Mod/Path/PathScripts/PathOp.py @@ -216,7 +216,7 @@ class ObjectOp(object): def setDefaultValues(self, obj): '''setDefaultValues(obj) ... base implementation. Do not overwrite, overwrite opSetDefaultValues() instead.''' - PathUtils.addToJob(obj) + job = PathUtils.addToJob(obj) obj.Active = True @@ -235,8 +235,8 @@ class ObjectOp(object): obj.StepDown = 1.0 if FeatureHeights & features: - obj.ClearanceHeight = 10.0 - obj.SafeHeight = 8.0 + obj.setExpression('SafeHeight', "%s.DefaultSafeHeight+StartDepth" % job.Settings.Name) + obj.setExpression('ClearanceHeight', "%s.DefaultClearanceHeight+StartDepth" % job.Settings.Name) if FeatureStartPoint & features: obj.UseStartPoint = False @@ -330,12 +330,12 @@ class ObjectOp(object): if obj.StartDepth.Value < zmax: safeDepths = False - clearance = obj.StartDepth.Value + self.job.DefaultClearanceHeight.Value - safe = obj.StartDepth.Value + self.job.DefaultSafeHeight.Value - if hasattr(obj, 'ClearanceHeight') and not PathGeom.isRoughly(clearance, obj.ClearanceHeight.Value): - obj.ClearanceHeight = clearance - if hasattr(obj, 'SafeHeight') and not PathGeom.isRoughly(safe, obj.SafeHeight.Value): - obj.SafeHeight = safe + #clearance = obj.StartDepth.Value + self.job.Settings.DefaultClearanceHeight.Value + #safe = obj.StartDepth.Value + self.job.Settings.DefaultSafeHeight.Value + #if hasattr(obj, 'ClearanceHeight') and not PathGeom.isRoughly(clearance, obj.ClearanceHeight.Value): + # obj.ClearanceHeight = clearance + #if hasattr(obj, 'SafeHeight') and not PathGeom.isRoughly(safe, obj.SafeHeight.Value): + # obj.SafeHeight = safe return safeDepths