Merge pull request #8443 from LarryWoestman/staging
Path: Now can set parameter_functions from a postprocessor file.
This commit is contained in:
@@ -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"] = [
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -256,6 +256,44 @@ 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
|
||||
}
|
||||
parameter_functions.update(default_parameter_functions)
|
||||
|
||||
|
||||
def linenumber(values, space=None):
|
||||
"""Output the next line number if appropriate."""
|
||||
if values["OUTPUT_LINE_NUMBERS"]:
|
||||
@@ -267,41 +305,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 +369,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 +389,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:
|
||||
|
||||
Reference in New Issue
Block a user