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):