diff --git a/src/Mod/Path/Gui/Resources/panels/DlgJobTemplateExport.ui b/src/Mod/Path/Gui/Resources/panels/DlgJobTemplateExport.ui
index dc5e05e478..a743bbf66f 100644
--- a/src/Mod/Path/Gui/Resources/panels/DlgJobTemplateExport.ui
+++ b/src/Mod/Path/Gui/Resources/panels/DlgJobTemplateExport.ui
@@ -115,7 +115,7 @@
<html><head/><body><p>Enable to include the default values in the template.</p></body></html>
- Defaults
+ Settings
true
diff --git a/src/Mod/Path/Gui/Resources/panels/PathEdit.ui b/src/Mod/Path/Gui/Resources/panels/PathEdit.ui
index c97a991d43..b12c7dda9f 100644
--- a/src/Mod/Path/Gui/Resources/panels/PathEdit.ui
+++ b/src/Mod/Path/Gui/Resources/panels/PathEdit.ui
@@ -393,120 +393,6 @@
-
-
- Defaults
-
-
- -
-
-
- Tool Rapid Speed
-
-
- false
-
-
-
-
-
-
- <html><head/><body><p>Rapid horizontal feed rate assigned to new Tool Controllers.</p></body></html>
-
-
-
- -
-
-
- Hori
-
-
-
- -
-
-
- Vert
-
-
-
- -
-
-
- <html><head/><body><p>Rapid vertical feed rate assigned to new Tool Controllers.</p></body></html>
-
-
-
- -
-
-
- Horizontal
-
-
-
- -
-
-
- Vertical
-
-
-
-
-
-
- -
-
-
- Operation Heights
-
-
- false
-
-
-
-
-
-
- Safe Extra
-
-
-
- -
-
-
- Clearance Extra
-
-
-
- -
-
-
- <html><head/><body><p>Extra height for Safe Heights, measured from the operations Start Depth.</p></body></html>
-
-
-
- -
-
-
- <html><head/><body><p>Extra height for Clearance Heights, measured from the operations Start Depth.</p></body></html>
-
-
-
-
-
-
- -
-
-
- Qt::Vertical
-
-
-
- 20
- 415
-
-
-
-
-
-
Tools
diff --git a/src/Mod/Path/PathScripts/PathJob.py b/src/Mod/Path/PathScripts/PathJob.py
index 46cf1924f0..d0c12e0890 100644
--- a/src/Mod/Path/PathScripts/PathJob.py
+++ b/src/Mod/Path/PathScripts/PathJob.py
@@ -64,6 +64,14 @@ class JobTemplate:
DefaultSafeHeight = 'DefaultSafeHeight'
DefaultClearanceHeight = 'DefaultClearanceHeight'
+class JobSetting:
+ '''Alias names for the official settings being used.'''
+ DefaultVertRapid = 'DefaultVertRapid'
+ DefaultHorizRapid = 'DefaultHorizRapid'
+ DefaultSafeHeight = 'DefaultSafeHeight'
+ DefaultClearanceHeight = 'DefaultClearanceHeight'
+
+
def isArchPanelSheet(obj):
return hasattr(obj, 'Proxy') and isinstance(obj.Proxy, ArchPanel.PanelSheet)
@@ -138,9 +146,10 @@ class ObjectJob:
if obj.Stock.ViewObject:
obj.Stock.ViewObject.Visibility = False
- def setSetting(self, obj, row, name, value, label):
+ def createSetting(self, obj, row, name, value, label):
labelCell = "B%d" % row
valueCell = "C%d" % row
+ PathLog.info("createSetting(%d, %s, %s): %s" % (row, name, value, valueCell))
obj.Settings.set(labelCell, label)
obj.Settings.set(valueCell, value)
obj.Settings.setAlias(valueCell, name)
@@ -150,11 +159,11 @@ class ObjectJob:
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'))
+ self.createSetting(obj, 3, JobSetting.DefaultHorizRapid, '0 mm/s', translate('PathJob', 'Default Horizontal Rapid'))
+ self.createSetting(obj, 4, JobSetting.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'))
+ self.createSetting(obj, 7, JobSetting.DefaultSafeHeight, '3 mm', translate('PathJob', 'Default Safe Height'))
+ self.createSetting(obj, 8, JobSetting.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.'''
@@ -211,6 +220,11 @@ class ObjectJob:
return obj.Base.Objects[0]
return obj.Base
+ def updateSetting(self, obj, name, value):
+ cell = obj.Settings.getCellFromAlias(name)
+ PathLog.info("updateSetting(%s, %s): %s" % (name, value, cell))
+ self.obj.Settings.set(cell, value)
+
def setFromTemplateFile(self, obj, template):
'''setFromTemplateFile(obj, template) ... extract the properties from the given template file and assign to receiver.
This will also create any TCs stored in the template.'''
@@ -220,6 +234,15 @@ class ObjectJob:
attrs = json.load(fp)
if attrs.get(JobTemplate.Version) and 1 == int(attrs[JobTemplate.Version]):
+ if attrs.get(JobTemplate.DefaultVertRapid):
+ self.updateSetting(obj, JobSetting.DefaultVertRapid, attrs[JobTemplate.DefaultVertRapid])
+ if attrs.get(JobTemplate.DefaultHorizRapid):
+ self.updateSetting(obj, JobSetting.DefaultHorizRapid, attrs[JobTemplate.DefaultHorizRapid])
+ if attrs.get(JobTemplate.DefaultSafeHeight):
+ self.updateSetting(obj, JobSetting.DefaultSafeHeight, attrs[JobTemplate.DefaultSafeHeight])
+ if attrs.get(JobTemplate.DefaultClearanceHeight):
+ self.updateSetting(obj, JobSetting.DefaultClearanceHeight, attrs[JobTemplate.DefaultClearanceHeight])
+
if attrs.get(JobTemplate.GeometryTolerance):
obj.GeometryTolerance = float(attrs.get(JobTemplate.GeometryTolerance))
if attrs.get(JobTemplate.PostProcessor):
@@ -233,21 +256,11 @@ class ObjectJob:
if attrs.get(JobTemplate.Description):
obj.Description = attrs.get(JobTemplate.Description)
-
if attrs.get(JobTemplate.ToolController):
for tc in attrs.get(JobTemplate.ToolController):
tcs.append(PathToolController.FromTemplate(tc))
if attrs.get(JobTemplate.Stock):
obj.Stock = PathStock.CreateFromTemplate(obj, attrs.get(JobTemplate.Stock))
-
- if attrs.get(JobTemplate.DefaultVertRapid):
- obj.Settings.DefaultVertRapid = attrs[JobTemplate.DefaultVertRapid]
- if attrs.get(JobTemplate.DefaultHorizRapid):
- obj.Settings.DefaultHorizRapid = attrs[JobTemplate.DefaultHorizRapid]
- if attrs.get(JobTemplate.DefaultSafeHeight):
- obj.Settings.DefaultSafeHeight = attrs[JobTemplate.DefaultSafeHeight]
- if attrs.get(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())
@@ -297,8 +310,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.setExpression('VertRapid', "%s.DefaultVertRapid" % self.obj.Settings.Name)
- tc.setExpression('HorizRapid', "%s.DefaultHorizRapid" % self.obj.Settings.Name)
+ tc.setExpression('VertRapid', "%s.%s" % (self.obj.Settings.Name, JobSetting.DefaultVertRapid))
+ tc.setExpression('HorizRapid', "%s.%s" % (self.obj.Settings.Name, JobSetting.DefaultHorizRapid))
group.append(tc)
self.obj.ToolController = group
diff --git a/src/Mod/Path/PathScripts/PathJobGui.py b/src/Mod/Path/PathScripts/PathJobGui.py
index b5b7a90e41..2608460ca8 100644
--- a/src/Mod/Path/PathScripts/PathJobGui.py
+++ b/src/Mod/Path/PathScripts/PathJobGui.py
@@ -480,13 +480,6 @@ class TaskPanel:
self.postProcessorDefaultTooltip = self.form.postProcessor.toolTip()
self.postProcessorArgsDefaultTooltip = self.form.postProcessorArguments.toolTip()
- hicon = QtGui.QIcon.fromTheme('object-flip-horizontal')
- vicon = QtGui.QIcon.fromTheme('object-flip-vertical')
- iconSize = QtCore.QSize()
-
- self.form.defaultRapidHorizontalIcon.setPixmap(hicon.pixmap(iconSize))
- self.form.defaultRapidVerticalIcon.setPixmap(vicon.pixmap(iconSize))
-
self.vproxy.setupEditVisibility(self.obj)
self.stockFromBase = None
@@ -561,11 +554,6 @@ class TaskPanel:
self.updateTooltips()
self.stockEdit.getFields(self.obj)
- PathGui.updateInputField(self.obj, 'DefaultSafeHeight', self.form.defaultHeightSafe)
- PathGui.updateInputField(self.obj, 'DefaultClearanceHeight', self.form.defaultHeightClearance)
- PathGui.updateInputField(self.obj, 'DefaultVertRapid', self.form.defaultRapidVertical)
- PathGui.updateInputField(self.obj, 'DefaultHorizRapid', self.form.defaultRapidHorizontal)
-
self.obj.Proxy.execute(self.obj)
def selectComboBoxText(self, widget, text):
@@ -664,12 +652,6 @@ class TaskPanel:
self.updateToolController()
self.stockEdit.setFields(self.obj)
- self.form.defaultRapidVertical.setText(self.obj.DefaultVertRapid.UserString)
- self.form.defaultRapidHorizontal.setText(self.obj.DefaultHorizRapid.UserString)
- self.form.defaultHeightSafe.setText(self.obj.DefaultSafeHeight.UserString)
- self.form.defaultHeightClearance.setText(self.obj.DefaultClearanceHeight.UserString)
-
-
def setPostProcessorOutputFile(self):
filename = QtGui.QFileDialog.getSaveFileName(self.form, translate("Path_Job", "Select Output File"), None, translate("Path_Job", "All Files (*.*)"))
if filename and filename[0]:
@@ -1009,12 +991,6 @@ class TaskPanel:
self.form.moveToOrigin.clicked.connect(self.alignMoveToOrigin)
self.updateSelection()
- # Defaults
- self.form.defaultRapidVertical.editingFinished.connect(self.getFields)
- self.form.defaultRapidHorizontal.editingFinished.connect(self.getFields)
- self.form.defaultHeightSafe.editingFinished.connect(self.getFields)
- self.form.defaultHeightClearance.editingFinished.connect(self.getFields)
-
# set active page
if activate in ['General', 'Base']:
self.form.setCurrentIndex(0)
@@ -1049,6 +1025,7 @@ def Create(base, template=None):
obj = PathJob.Create('Job', base, template)
ViewProvider(obj.ViewObject)
FreeCAD.ActiveDocument.commitTransaction()
+ obj.Document.recompute()
obj.ViewObject.Proxy.editObject(obj.Stock)
return obj
except:
diff --git a/src/Mod/Path/PathScripts/PathToolController.py b/src/Mod/Path/PathScripts/PathToolController.py
index ab4cfe9598..be3b08542c 100644
--- a/src/Mod/Path/PathScripts/PathToolController.py
+++ b/src/Mod/Path/PathScripts/PathToolController.py
@@ -47,17 +47,20 @@ def translate(context, text, disambig=None):
class ToolControllerTemplate:
'''Attribute and sub element strings for template export/import.'''
- Name = 'name'
- Label = 'label'
- ToolNumber = 'nr'
- VertFeed = 'vfeed'
+ Expressions = 'xengine'
+ ExprExpr = 'expr'
+ ExprProp = 'prop'
HorizFeed = 'hfeed'
- VertRapid = 'vrapid'
HorizRapid = 'hrapid'
- SpindleSpeed = 'speed'
+ Label = 'label'
+ Name = 'name'
SpindleDir = 'dir'
+ SpindleSpeed = 'speed'
+ ToolNumber = 'nr'
Tool = 'tool'
Version = 'version'
+ VertFeed = 'vfeed'
+ VertRapid = 'vrapid'
class ToolController:
def __init__(self, obj, tool=1):
@@ -100,6 +103,9 @@ class ToolController:
obj.ToolNumber = int(template.get(ToolControllerTemplate.ToolNumber))
if template.get(ToolControllerTemplate.Tool):
obj.Tool.setFromTemplate(template.get(ToolControllerTemplate.Tool))
+ if template.get(ToolControllerTemplate.Expressions):
+ for exprDef in template.get(ToolControllerTemplate.Expressions):
+ obj.setExpression(exprDef[ToolControllerTemplate.ExprProp], exprDef[ToolControllerTemplate.ExprExpr])
else:
PathLog.error(translate('PathToolController', "Unsupported PathToolController template version %s") % template.get(ToolControllerTemplate.Version))
@@ -117,6 +123,13 @@ class ToolController:
attrs[ToolControllerTemplate.SpindleSpeed] = obj.SpindleSpeed
attrs[ToolControllerTemplate.SpindleDir] = obj.SpindleDir
attrs[ToolControllerTemplate.Tool] = obj.Tool.templateAttrs()
+ expressions = []
+ for expr in obj.ExpressionEngine:
+ PathLog.info('%s: %s' % (expr[0], expr[1]))
+ expressions.append({ToolControllerTemplate.ExprProp: expr[0], ToolControllerTemplate.ExprExpr: expr[1]})
+ if expressions:
+ PathLog.info('add expressions')
+ attrs[ToolControllerTemplate.Expressions] = expressions
return attrs
def execute(self, obj):