Extracted Job Settings into their own implementation file.

This commit is contained in:
Markus Lampert
2017-10-07 21:40:22 -07:00
parent 9cec64880f
commit 6797d5b4b5
4 changed files with 95 additions and 40 deletions

View File

@@ -74,6 +74,7 @@ SET(PathScripts_SRCS
PathScripts/PathProfileFacesGui.py
PathScripts/PathSanity.py
PathScripts/PathSelection.py
PathScripts/PathSettings.py
PathScripts/PathSimpleCopy.py
PathScripts/PathStock.py
PathScripts/PathStop.py

View File

@@ -27,6 +27,7 @@ import Draft
import FreeCAD
import PathScripts.PathIconViewProvider as PathIconViewProvider
import PathScripts.PathLog as PathLog
import PathScripts.PathSettings as PathSettings
import PathScripts.PathStock as PathStock
import PathScripts.PathToolController as PathToolController
import PathScripts.PathUtil as PathUtil
@@ -64,14 +65,6 @@ 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)
@@ -146,24 +139,11 @@ class ObjectJob:
if obj.Stock.ViewObject:
obj.Stock.ViewObject.Visibility = False
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)
def setupSettings(self, obj):
self.settings = PathSettings.Settings(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.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.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'))
self.settings.setup()
def onDelete(self, obj, arg2=None):
'''Called by the view provider, there doesn't seem to be a callback on the obj itself.'''
@@ -220,11 +200,6 @@ 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.'''
@@ -235,13 +210,13 @@ class ObjectJob:
if attrs.get(JobTemplate.Version) and 1 == int(attrs[JobTemplate.Version]):
if attrs.get(JobTemplate.DefaultVertRapid):
self.updateSetting(obj, JobSetting.DefaultVertRapid, attrs[JobTemplate.DefaultVertRapid])
self.settings.updateSetting(PathSettings.Default.VertRapid, attrs[JobTemplate.DefaultVertRapid])
if attrs.get(JobTemplate.DefaultHorizRapid):
self.updateSetting(obj, JobSetting.DefaultHorizRapid, attrs[JobTemplate.DefaultHorizRapid])
self.settings.updateSetting(PathSettings.Default.HorizRapid, attrs[JobTemplate.DefaultHorizRapid])
if attrs.get(JobTemplate.DefaultSafeHeight):
self.updateSetting(obj, JobSetting.DefaultSafeHeight, attrs[JobTemplate.DefaultSafeHeight])
self.settings.updateSetting(PathSettings.Default.SafeHeight, attrs[JobTemplate.DefaultSafeHeight])
if attrs.get(JobTemplate.DefaultClearanceHeight):
self.updateSetting(obj, JobSetting.DefaultClearanceHeight, attrs[JobTemplate.DefaultClearanceHeight])
self.settings.updateSetting(PathSettings.Default.ClearanceHeight, attrs[JobTemplate.DefaultClearanceHeight])
if attrs.get(JobTemplate.GeometryTolerance):
obj.GeometryTolerance = float(attrs.get(JobTemplate.GeometryTolerance))
@@ -281,10 +256,10 @@ class ObjectJob:
attrs[JobTemplate.GeometryTolerance] = str(obj.GeometryTolerance.Value)
if obj.Description:
attrs[JobTemplate.Description] = obj.Description
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
attrs[JobTemplate.DefaultVertRapid] = obj.Settings.DefaultVertRapid
attrs[JobTemplate.DefaultHorizRapid] = obj.Settings.DefaultHorizRapid
attrs[JobTemplate.DefaultSafeHeight] = obj.Settings.DefaultSafeHeight
attrs[JobTemplate.DefaultClearanceHeight] = obj.Settings.DefaultClearanceHeight
return attrs
def __getstate__(self):
@@ -310,8 +285,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.%s" % (self.obj.Settings.Name, JobSetting.DefaultVertRapid))
tc.setExpression('HorizRapid', "%s.%s" % (self.obj.Settings.Name, JobSetting.DefaultHorizRapid))
tc.setExpression('VertRapid', "%s.%s" % (self.obj.Settings.Name, PathSettings.Default.VertRapid))
tc.setExpression('HorizRapid', "%s.%s" % (self.obj.Settings.Name, PathSettings.Default.HorizRapid))
group.append(tc)
self.obj.ToolController = group

View File

@@ -25,6 +25,7 @@
import FreeCAD
import Path
import PathScripts.PathLog as PathLog
import PathScripts.PathSettings as PathSettings
import PathScripts.PathUtil as PathUtil
import PathScripts.PathUtils as PathUtils
@@ -235,8 +236,8 @@ class ObjectOp(object):
obj.StepDown = 1.0
if FeatureHeights & features:
obj.setExpression('SafeHeight', "%s.DefaultSafeHeight+StartDepth" % job.Settings.Name)
obj.setExpression('ClearanceHeight', "%s.DefaultClearanceHeight+StartDepth" % job.Settings.Name)
obj.setExpression('SafeHeight', "%s.%s+StartDepth" % (job.Settings.Name, PathSettings.Default.SafeHeight))
obj.setExpression('ClearanceHeight', "%s.%s+StartDepth" % (job.Settings.Name, PathSettings.Default.ClearanceHeight))
if FeatureStartPoint & features:
obj.UseStartPoint = False

View File

@@ -0,0 +1,78 @@
# -*- coding: utf-8 -*-
# ***************************************************************************
# * *
# * Copyright (c) 2017 sliptonic <shopinthewoods@gmail.com> *
# * *
# * This program is free software; you can redistribute it and/or modify *
# * it under the terms of the GNU Lesser General Public License (LGPL) *
# * as published by the Free Software Foundation; either version 2 of *
# * the License, or (at your option) any later version. *
# * for detail see the LICENCE text file. *
# * *
# * This program is distributed in the hope that it will be useful, *
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
# * GNU Library General Public License for more details. *
# * *
# * You should have received a copy of the GNU Library General Public *
# * License along with this program; if not, write to the Free Software *
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
# * USA *
# * *
# ***************************************************************************
import FreeCAD
import Path
import PathScripts.PathLog as PathLog
import PySide
__title__ = "Settings for a Job."
__author__ = "sliptonic (Brad Collette)"
__url__ = "http://www.freecadweb.org"
__doc__ = "A container for all default values and job specific configuration values."
if False:
PathLog.setLevel(PathLog.Level.DEBUG, PathLog.thisModule())
PathLog.trackModule()
else:
PathLog.setLevel(PathLog.Level.INFO, PathLog.thisModule())
def translate(context, text, disambig=None):
return PySide.QtCore.QCoreApplication.translate(context, text, disambig)
class Default:
HorizRapid = 'DefaultHorizRapid'
VertRapid = 'DefaultVertRapid'
SafeHeight = 'DefaultSafeHeight'
ClearanceHeight = 'DefaultClearanceHeight'
class Settings:
def __init__(self, obj):
self.obj = obj
def setup(self):
self.obj.Settings = self.obj.Document.addObject('Spreadsheet::Sheet', 'Settings')
self.obj.Settings.set('A2', translate('PathSettings', 'Tool Rapid Speeds'))
self.createSetting(3, Default.HorizRapid, '0 mm/s', translate('PathSettings', 'Horizontal'), translate('PathSettings', 'Default speed for horizzontal rapid moves.'))
self.createSetting(4, Default.VertRapid, '0 mm/s', translate('PathSettings', 'Vertical'), translate('PathSettings', 'Default speed for vertical rapid moves.'))
self.obj.Settings.set('A6', translate('PathSettings', 'Operation Heights'))
self.createSetting(7, Default.SafeHeight, '3 mm', translate('PathSettings', 'Safe Height'), translate('PathSettings', 'Default value added to StartDepth used for the safe height.'))
self.createSetting(8, Default.ClearanceHeight, '5 mm', translate('PathSettings', 'Clearance Height'), translate('PathSettings', 'Default value added to StartDepth used for the clearance height.'))
def updateSetting(self, name, value):
cell = self.obj.Settings.getCellFromAlias(name)
PathLog.debug("updateSetting(%s, %s): %s" % (name, value, cell))
self.obj.Settings.set(cell, value)
def createSetting(self, row, name, value, label, desc):
labelCell = "B%d" % row
valueCell = "C%d" % row
descCell = "D%d" % row
PathLog.debug("createSetting(%d, %s, %s): %s" % (row, name, value, valueCell))
self.obj.Settings.set(labelCell, label)
self.obj.Settings.set(valueCell, value)
self.obj.Settings.setAlias(valueCell, name)
self.obj.Settings.set(descCell, desc)