Merge pull request #8307 from LarryWoestman/staging
Path: Refactored the add_parameters function into individual functions.
This commit is contained in:
@@ -35,77 +35,6 @@ from FreeCAD import Units
|
||||
import Path
|
||||
import Path.Post.Utils as PostUtils
|
||||
|
||||
def add_parameters(values, outstring, command, params, currLocation):
|
||||
"""Add the parameters (sometimes called "words") to the outstring."""
|
||||
for param in values["PARAMETER_ORDER"]:
|
||||
if param not in params:
|
||||
continue
|
||||
p_p = params[param]
|
||||
if param == "F":
|
||||
if currLocation[param] == p_p and not values["OUTPUT_DOUBLES"]:
|
||||
continue
|
||||
# Many posts don't use rapid speeds, but eventually
|
||||
# there will be refactored posts that do, so this
|
||||
# "if statement" is being kept separate to make it
|
||||
# more obvious where to put that check.
|
||||
if command in values["RAPID_MOVES"]:
|
||||
continue
|
||||
feed = Units.Quantity(p_p, Units.Velocity)
|
||||
if feed.getValueAs(values["UNIT_SPEED_FORMAT"]) <= 0.0:
|
||||
continue
|
||||
param_num = format_for_feed(values, feed)
|
||||
elif param in ("H", "L", "T"):
|
||||
param_num = str(int(p_p))
|
||||
elif param == "D":
|
||||
if command in ("G41", "G42"):
|
||||
param_num = str(int(p_p))
|
||||
elif command in ("G41.1", "G42.1"):
|
||||
pos = Units.Quantity(p_p, Units.Length)
|
||||
param_num = format_for_axis(values, pos)
|
||||
elif command in ("G96", "G97"):
|
||||
param_num = format_for_spindle(values, p_p)
|
||||
else: # anything else that is supported
|
||||
param_num = str(float(p_p))
|
||||
elif param == "P":
|
||||
if command in (
|
||||
"G2",
|
||||
"G02",
|
||||
"G3",
|
||||
"G03",
|
||||
"G5.2",
|
||||
"G5.3",
|
||||
"G10",
|
||||
"G54.1",
|
||||
"G59",
|
||||
):
|
||||
param_num = str(int(p_p))
|
||||
elif command in ("G4", "G04", "G76", "G82", "G86", "G89"):
|
||||
param_num = str(float(p_p))
|
||||
elif command in ("G5", "G05", "G64"):
|
||||
pos = Units.Quantity(p_p, Units.Length)
|
||||
param_num = format_for_axis(values, pos)
|
||||
else: # anything else that is supported
|
||||
param_num = str(p_p)
|
||||
elif param == "Q":
|
||||
if command == "G10":
|
||||
param_num = str(int(p_p))
|
||||
elif command in ("G64", "G73", "G83"):
|
||||
pos = Units.Quantity(p_p, Units.Length)
|
||||
param_num = format_for_axis(values, pos)
|
||||
elif param == "S":
|
||||
param_num = format_for_spindle(values, p_p)
|
||||
else:
|
||||
if (
|
||||
not values["OUTPUT_DOUBLES"]
|
||||
and param in currLocation
|
||||
and currLocation[param] == p_p
|
||||
):
|
||||
continue
|
||||
pos = Units.Quantity(p_p, Units.Length)
|
||||
param_num = format_for_axis(values, pos)
|
||||
outstring.append(f"{param}{param_num}")
|
||||
|
||||
|
||||
def create_comment(values, comment_string):
|
||||
"""Create a comment from a string using the correct comment symbol."""
|
||||
if values["COMMENT_SYMBOL"] == "(":
|
||||
@@ -114,6 +43,84 @@ def create_comment(values, comment_string):
|
||||
return values["COMMENT_SYMBOL"] + comment_string
|
||||
|
||||
|
||||
def default_axis_parameter(values, command, param, param_value, currLocation):
|
||||
"""Process an axis parameter."""
|
||||
if (
|
||||
not values["OUTPUT_DOUBLES"]
|
||||
and param in currLocation
|
||||
and currLocation[param] == param_value
|
||||
):
|
||||
return None
|
||||
return format_for_axis(values, Units.Quantity(param_value, Units.Length))
|
||||
|
||||
|
||||
def default_D_parameter(values, command, param, param_value, currLocation):
|
||||
"""Process the D parameter."""
|
||||
if command in ("G41", "G42"):
|
||||
return str(int(param_value))
|
||||
if command in ("G41.1", "G42.1"):
|
||||
return format_for_axis(values, Units.Quantity(param_value, Units.Length))
|
||||
if command in ("G96", "G97"):
|
||||
return format_for_spindle(values, param_value)
|
||||
# anything else that is supported
|
||||
return str(float(param_value))
|
||||
|
||||
|
||||
def default_F_parameter(values, command, param, param_value, currLocation):
|
||||
"""Process the F parameter."""
|
||||
if (
|
||||
not values["OUTPUT_DOUBLES"]
|
||||
and param in currLocation
|
||||
and currLocation[param] == param_value
|
||||
):
|
||||
return None
|
||||
# Many posts don't use rapid speeds, but eventually
|
||||
# there will be refactored posts that do, so this
|
||||
# "if statement" is being kept separate to make it
|
||||
# more obvious where to put that check.
|
||||
if command in values["RAPID_MOVES"]:
|
||||
return None
|
||||
feed = Units.Quantity(param_value, Units.Velocity)
|
||||
if feed.getValueAs(values["UNIT_SPEED_FORMAT"]) <= 0.0:
|
||||
return None
|
||||
return format_for_feed(values, feed)
|
||||
|
||||
|
||||
def default_int_parameter(values, command, param, param_value, currLocation):
|
||||
"""Process a parameter that is treated like an integer."""
|
||||
return str(int(param_value))
|
||||
|
||||
|
||||
def default_length_parameter(values, command, param, param_value, currLocation):
|
||||
"""Process a parameter that is treated like a length."""
|
||||
return format_for_axis(values, Units.Quantity(param_value, Units.Length))
|
||||
|
||||
|
||||
def default_P_parameter(values, command, param, param_value, currLocation):
|
||||
"""Process the P parameter."""
|
||||
if command in ("G2", "G02", "G3", "G03", "G5.2", "G5.3", "G10", "G54.1", "G59"):
|
||||
return str(int(param_value))
|
||||
if command in ("G4", "G04", "G76", "G82", "G86", "G89"):
|
||||
return str(float(param_value))
|
||||
if command in ("G5", "G05", "G64"):
|
||||
return format_for_axis(values, Units.Quantity(param_value, Units.Length))
|
||||
# anything else that is supported
|
||||
return str(param_value)
|
||||
|
||||
|
||||
def default_Q_parameter(values, command, param, param_value, currLocation):
|
||||
"""Process the Q parameter."""
|
||||
if command == "G10":
|
||||
return str(int(param_value))
|
||||
if command in ("G64", "G73", "G83"):
|
||||
return format_for_axis(values, Units.Quantity(param_value, Units.Length))
|
||||
|
||||
|
||||
def default_S_parameter(values, command, param, param_value, currLocation):
|
||||
"""Process the S parameter."""
|
||||
return format_for_spindle(values, param_value)
|
||||
|
||||
|
||||
def drill_translate(values, cmd, params):
|
||||
"""Translate drill cycles."""
|
||||
trBuff = ""
|
||||
@@ -259,6 +266,41 @@ 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"
|
||||
@@ -340,7 +382,13 @@ def parse_a_path(values, pathobj):
|
||||
outstring.pop(0)
|
||||
|
||||
# Now add the remaining parameters in order
|
||||
add_parameters(values, outstring, command, c.Parameters, currLocation)
|
||||
for parameter in values["PARAMETER_ORDER"]:
|
||||
if parameter in c.Parameters:
|
||||
parameter_value = parameter_functions[parameter](
|
||||
values, command, parameter, c.Parameters[parameter], currLocation
|
||||
)
|
||||
if parameter_value:
|
||||
outstring.append(f"{parameter}{parameter_value}")
|
||||
|
||||
if (
|
||||
values["OUTPUT_ADAPTIVE"]
|
||||
|
||||
Reference in New Issue
Block a user