Path: Now can set parameter_functions from a postprocessor file.

This commit is contained in:
LarryWoestman
2022-07-23 19:38:26 -07:00
committed by LarryWoestman
parent 88784694f6
commit 3f499ec1c4
3 changed files with 50 additions and 36 deletions

View File

@@ -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"] = [

View File

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

View File

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