gcode_macro: default parameter values

Signed-off-by: Janar Sööt <janar.soot@gmail.com>
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
Janar Sööt 2018-09-27 19:08:01 +03:00 committed by Kevin O'Connor
parent d9e35481be
commit 68dc28580f
2 changed files with 15 additions and 1 deletions

View File

@ -976,6 +976,14 @@
# a macro MY_DELAY with gcode "G4 P{DELAY}" then the command # a macro MY_DELAY with gcode "G4 P{DELAY}" then the command
# "MY_DELAY DELAY=100" would evaluate to "G4 P100". This parameter # "MY_DELAY DELAY=100" would evaluate to "G4 P100". This parameter
# must be provided. # must be provided.
#default_parameter_<parameter>:
# One may define any number of options with a "default_parameter_"
# prefix. Use this to define default values for g-code parameters.
# For example, if one were to define the macro MY_DELAY with gcode
# "G4 P{DELAY}" along with "default_paramter_DELAY = 50" then the
# command "MY_DELAY" would evaluate to "G4 P50". The default is to
# require that all parameters used in the gcode script be present in
# the command invoking the macro.
# Replicape support - see the generic-replicape.cfg file for further # Replicape support - see the generic-replicape.cfg file for further

View File

@ -5,6 +5,8 @@
# This file may be distributed under the terms of the GNU GPLv3 license. # This file may be distributed under the terms of the GNU GPLv3 license.
import logging import logging
DEFAULT_PREFIX = 'default_parameter_'
class GCodeMacro: class GCodeMacro:
def __init__(self, config): def __init__(self, config):
self.alias = config.get_name().split()[1].upper() self.alias = config.get_name().split()[1].upper()
@ -17,14 +19,18 @@ class GCodeMacro:
except self.gcode.error as e: except self.gcode.error as e:
raise config.error(str(e)) raise config.error(str(e))
self.in_script = False self.in_script = False
self.kwparams = { o[len(DEFAULT_PREFIX):].upper(): config.get(o)
for o in config.get_prefix_options(DEFAULT_PREFIX) }
cmd_desc = "G-Code macro" cmd_desc = "G-Code macro"
def cmd(self, params): def cmd(self, params):
if self.in_script: if self.in_script:
raise self.gcode.error( raise self.gcode.error(
"Macro %s called recursively" % (self.alias,)) "Macro %s called recursively" % (self.alias,))
script = "" script = ""
kwparams = dict(self.kwparams)
kwparams.update(params)
try: try:
script = self.script.format(**params) script = self.script.format(**kwparams)
except Exception: except Exception:
msg = "Macro %s script formatting failed" % (self.alias,) msg = "Macro %s script formatting failed" % (self.alias,)
logging.exception(msg) logging.exception(msg)