diff --git a/src/Mod/Path/Path/Post/UtilsArguments.py b/src/Mod/Path/Path/Post/UtilsArguments.py index f458293550..2adcb76109 100644 --- a/src/Mod/Path/Path/Post/UtilsArguments.py +++ b/src/Mod/Path/Path/Post/UtilsArguments.py @@ -36,6 +36,8 @@ import shlex from FreeCAD import Units +import Path.Post.UtilsParse as PostUtilsParse + def add_flag_type_arguments( argument_group, @@ -447,6 +449,12 @@ def init_shared_values(values): # values["OUTPUT_TOOL_CHANGE"] = True # + # This dictionary/hash holds the functions that are used + # to process the G-code parameter values + # + values["PARAMETER_FUNCTIONS"] = {} + PostUtilsParse.init_parameter_functions(values["PARAMETER_FUNCTIONS"]) + # # This list controls the order of parameters in a line during output. # values["PARAMETER_ORDER"] = [ diff --git a/src/Mod/Path/Path/Post/UtilsExport.py b/src/Mod/Path/Path/Post/UtilsExport.py index 125c5c19b8..b34b63ae12 100644 --- a/src/Mod/Path/Path/Post/UtilsExport.py +++ b/src/Mod/Path/Path/Post/UtilsExport.py @@ -206,6 +206,7 @@ def export_common(values, objectslist, filename): # process the operation gcode gcode += PostUtilsParse.parse_a_group(values, obj) + # do the post_op if values["OUTPUT_COMMENTS"]: comment = PostUtilsParse.create_comment( diff --git a/src/Mod/Path/Path/Post/UtilsParse.py b/src/Mod/Path/Path/Post/UtilsParse.py index 7158cb483e..20cf7ac80d 100644 --- a/src/Mod/Path/Path/Post/UtilsParse.py +++ b/src/Mod/Path/Path/Post/UtilsParse.py @@ -256,6 +256,45 @@ def format_outstring(values, strTable): return s +def init_parameter_functions(parameter_functions): + """Initialize a list of parameter functions. + + These functions are called in the PostUtilsParse.parse_a_path + function to return the appropriate parameter value. + """ + default_parameter_functions = { + "A": default_axis_parameter, + "B": default_axis_parameter, + "C": default_axis_parameter, + "D": default_D_parameter, + "E": default_length_parameter, + "F": default_F_parameter, + # "G" is reserved for G-code commands + "H": default_int_parameter, + "I": default_length_parameter, + "J": default_length_parameter, + "K": default_length_parameter, + "L": default_int_parameter, + # "M" is reserved for M-code commands + # "N" is reserved for the line numbers + # "O" is reserved for the line numbers for subroutines + "P": default_P_parameter, + "Q": default_Q_parameter, + "R": default_length_parameter, + "S": default_S_parameter, + "T": default_int_parameter, + "U": default_axis_parameter, + "V": default_axis_parameter, + "W": default_axis_parameter, + "X": default_axis_parameter, + "Y": default_axis_parameter, + "Z": default_axis_parameter, + # "$" is used by LinuxCNC (and others?) to designate which spindle + } + for parameter in default_parameter_functions: + parameter_functions[parameter] = default_parameter_functions[parameter] + + def linenumber(values, space=None): """Output the next line number if appropriate.""" if values["OUTPUT_LINE_NUMBERS"]: @@ -267,41 +306,6 @@ def linenumber(values, space=None): return "" -# -# These functions are called in the parse_a_path function -# to return the appropriate parameter value. -# -parameter_functions = { - "A": default_axis_parameter, - "B": default_axis_parameter, - "C": default_axis_parameter, - "D": default_D_parameter, - "E": default_length_parameter, - "F": default_F_parameter, - # "G" is reserved for G-code commands - "H": default_int_parameter, - "I": default_length_parameter, - "J": default_length_parameter, - "K": default_length_parameter, - "L": default_int_parameter, - # "M" is reserved for M-code commands - # "N" is reserved for the beginning of line numbers - # "O" is reserved for the beginning of line numbers for subroutines - "P": default_P_parameter, - "Q": default_Q_parameter, - "R": default_length_parameter, - "S": default_S_parameter, - "T": default_int_parameter, - "U": default_axis_parameter, - "V": default_axis_parameter, - "W": default_axis_parameter, - "X": default_axis_parameter, - "Y": default_axis_parameter, - "Z": default_axis_parameter, - # "$" is used by LinuxCNC (and others?) to designate which spindle -} - - def parse_a_group(values, pathobj): """Parse a Group (compound, project, or simple path).""" nl = "\n" @@ -366,6 +370,7 @@ def parse_a_path(values, pathobj): continue if values["COMMENT_SYMBOL"] != "(" and len(command) > 2: command = create_comment(values, command[1:-1]) + if ( values["OUTPUT_ADAPTIVE"] and adaptiveOp @@ -385,7 +390,7 @@ def parse_a_path(values, pathobj): # Now add the remaining parameters in order for parameter in values["PARAMETER_ORDER"]: if parameter in c.Parameters: - parameter_value = parameter_functions[parameter]( + parameter_value = values["PARAMETER_FUNCTIONS"][parameter]( values, command, parameter, c.Parameters[parameter], currLocation ) if parameter_value: