diff --git a/src/Mod/Path/CMakeLists.txt b/src/Mod/Path/CMakeLists.txt index cc7428b255..031b360a4d 100644 --- a/src/Mod/Path/CMakeLists.txt +++ b/src/Mod/Path/CMakeLists.txt @@ -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 diff --git a/src/Mod/Path/PathScripts/PathJob.py b/src/Mod/Path/PathScripts/PathJob.py index d0c12e0890..b873707492 100644 --- a/src/Mod/Path/PathScripts/PathJob.py +++ b/src/Mod/Path/PathScripts/PathJob.py @@ -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 diff --git a/src/Mod/Path/PathScripts/PathOp.py b/src/Mod/Path/PathScripts/PathOp.py index 74c0a0ac87..1185b539cf 100644 --- a/src/Mod/Path/PathScripts/PathOp.py +++ b/src/Mod/Path/PathScripts/PathOp.py @@ -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 diff --git a/src/Mod/Path/PathScripts/PathSettings.py b/src/Mod/Path/PathScripts/PathSettings.py new file mode 100644 index 0000000000..895fdb5cdc --- /dev/null +++ b/src/Mod/Path/PathScripts/PathSettings.py @@ -0,0 +1,78 @@ +# -*- coding: utf-8 -*- + +# *************************************************************************** +# * * +# * Copyright (c) 2017 sliptonic * +# * * +# * 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) +