Switched default values into Settings spreadsheet.

This commit is contained in:
Markus Lampert
2017-10-02 20:03:53 -07:00
parent ead2eb4e46
commit 87cf84151e
5 changed files with 51 additions and 162 deletions

View File

@@ -115,7 +115,7 @@
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Enable to include the default values in the template.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="title">
<string>Defaults</string>
<string>Settings</string>
</property>
<property name="checkable">
<bool>true</bool>

View File

@@ -393,120 +393,6 @@
</item>
</layout>
</widget>
<widget class="QWidget" name="tab">
<attribute name="title">
<string>Defaults</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_7">
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Tool Rapid Speed</string>
</property>
<property name="checked">
<bool>false</bool>
</property>
<layout class="QGridLayout" name="gridLayout_4">
<item row="0" column="2">
<widget class="Gui::InputField" name="defaultRapidHorizontal">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Rapid horizontal feed rate assigned to new Tool Controllers.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLabel" name="defaultRapidHorizontalIcon">
<property name="text">
<string>Hori</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="defaultRapidVerticalIcon">
<property name="text">
<string>Vert</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="Gui::InputField" name="defaultRapidVertical">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Rapid vertical feed rate assigned to new Tool Controllers.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>Horizontal</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_7">
<property name="text">
<string>Vertical</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
<string>Operation Heights</string>
</property>
<property name="checked">
<bool>false</bool>
</property>
<layout class="QGridLayout" name="gridLayout_5">
<item row="0" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Safe Extra</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Clearance Extra</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="defaultHeightSafe">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Extra height for Safe Heights, measured from the operations Start Depth.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="defaultHeightClearance">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Extra height for Clearance Heights, measured from the operations Start Depth.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="verticalSpacer_3">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>415</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<widget class="QWidget" name="tabTools">
<attribute name="title">
<string>Tools</string>

View File

@@ -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

View File

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

View File

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