- fixed postprocessor files to work with toolchange_xy parameter value = None (no values in Edit - Preferences fields) - actual fix
- fixed Tcl commands CncJob and DrillCncJob to work with toolchange
This commit is contained in:
parent
7bc806f1dc
commit
4441e40042
|
@ -1678,6 +1678,7 @@ class FlatCAMExcellon(FlatCAMObj, Excellon):
|
|||
drillz=self.options['drillz'],
|
||||
toolchange=self.options["toolchange"],
|
||||
toolchangez=self.options["toolchangez"],
|
||||
toolchangexy=self.options["toolchangexy"],
|
||||
startz=self.options["startz"],
|
||||
endz=self.options["endz"],
|
||||
excellon_optimization_type=self.options["optimization_type"])
|
||||
|
|
|
@ -20,6 +20,7 @@ CAD program, and create G-Code for Isolation routing.
|
|||
- fixed unit conversion functions in case the toolchange_xy parameter is None
|
||||
- more fixes in camlib.CNCJob regarding usage of toolchange (in case it is None)
|
||||
- fixed postprocessor files to work with toolchange_xy parameter value = None (no values in Edit - Preferences fields)
|
||||
- fixed Tcl commands CncJob and DrillCncJob to work with toolchange
|
||||
|
||||
29.01.2019
|
||||
|
||||
|
|
|
@ -5167,12 +5167,15 @@ class CNCjob(Geometry):
|
|||
self.pp_geometry = self.app.postprocessors[self.pp_geometry_name]
|
||||
p = self.pp_geometry
|
||||
|
||||
self.oldx = 0.0
|
||||
self.oldy = 0.0
|
||||
|
||||
self.gcode = self.doformat(p.start_code)
|
||||
|
||||
self.gcode += self.doformat(p.feedrate_code) # sets the feed rate
|
||||
|
||||
self.gcode += self.doformat(p.lift_code, x=0, y=0) # Move (up) to travel height
|
||||
self.gcode += self.doformat(p.startz_code, x=0, y=0)
|
||||
self.gcode += self.doformat(p.lift_code, x=self.oldx , y=self.oldy ) # Move (up) to travel height
|
||||
self.gcode += self.doformat(p.startz_code, x=self.oldx , y=self.oldy )
|
||||
|
||||
if toolchange:
|
||||
# if "line_xyz" in self.pp_geometry_name:
|
||||
|
|
|
@ -88,22 +88,47 @@ class default(FlatCAMPostProc):
|
|||
if i[0] == p.tool:
|
||||
no_drills = i[2]
|
||||
|
||||
gcode = """G00 Z{toolchangez}
|
||||
if toolchangexy is not None:
|
||||
gcode = """G00 Z{toolchangez}
|
||||
G00 X{toolchangex} Y{toolchangey}
|
||||
T{tool}
|
||||
M5
|
||||
M6
|
||||
(MSG, Change to Tool Dia = {toolC}, Total drills for tool T{tool} = {t_drills})
|
||||
M0""".format(toolchangez=self.coordinate_format%(p.coords_decimals, toolchangez),
|
||||
M0""".format(toolchangex=self.coordinate_format % (p.coords_decimals, toolchangex),
|
||||
toolchangey=self.coordinate_format % (p.coords_decimals, toolchangey),
|
||||
toolchangez=self.coordinate_format % (p.coords_decimals, toolchangez),
|
||||
tool=int(p.tool),
|
||||
t_drills=no_drills,
|
||||
toolC=toolC_formatted)
|
||||
else:
|
||||
gcode = """G00 Z{toolchangez}
|
||||
T{tool}
|
||||
M5
|
||||
M6
|
||||
(MSG, Change to Tool Dia = {toolC}, Total drills for tool T{tool} = {t_drills})
|
||||
M0""".format(toolchangez=self.coordinate_format % (p.coords_decimals, toolchangez),
|
||||
tool=int(p.tool),
|
||||
t_drills=no_drills,
|
||||
toolC=toolC_formatted)
|
||||
|
||||
if toolchangexy is not None:
|
||||
gcode += ('\n' + 'G00 X{toolchangex} Y{toolchangey}'.format(toolchangex=toolchangex,
|
||||
toolchangey=toolchangey))
|
||||
return gcode
|
||||
|
||||
else:
|
||||
gcode = """G00 Z{toolchangez}
|
||||
if toolchangexy is not None:
|
||||
gcode = """G00 Z{toolchangez}
|
||||
G00 X{toolchangex} Y{toolchangey}
|
||||
T{tool}
|
||||
M5
|
||||
M6
|
||||
(MSG, Change to Tool Dia = {toolC})
|
||||
M0""".format(toolchangex=self.coordinate_format % (p.coords_decimals, toolchangex),
|
||||
toolchangey=self.coordinate_format % (p.coords_decimals, toolchangey),
|
||||
toolchangez=self.coordinate_format % (p.coords_decimals, toolchangez),
|
||||
tool=int(p.tool),
|
||||
toolC=toolC_formatted)
|
||||
else:
|
||||
gcode = """G00 Z{toolchangez}
|
||||
T{tool}
|
||||
M5
|
||||
M6
|
||||
|
@ -111,9 +136,7 @@ M6
|
|||
M0""".format(toolchangez=self.coordinate_format%(p.coords_decimals, toolchangez),
|
||||
tool=int(p.tool),
|
||||
toolC=toolC_formatted)
|
||||
if toolchangexy is not None:
|
||||
gcode += ('\n' + 'G00 X{toolchangex} Y{toolchangey}'.format(toolchangex=toolchangex,
|
||||
toolchangey=toolchangey))
|
||||
|
||||
return gcode
|
||||
|
||||
def up_to_zero_code(self, p):
|
||||
|
|
|
@ -72,6 +72,8 @@ class grbl_11(FlatCAMPostProc):
|
|||
toolchangex = toolchangexy[0]
|
||||
toolchangey = toolchangexy[1]
|
||||
|
||||
no_drills = 1
|
||||
|
||||
if int(p.tool) == 1 and p.startz is not None:
|
||||
toolchangez = p.startz
|
||||
|
||||
|
@ -80,39 +82,60 @@ class grbl_11(FlatCAMPostProc):
|
|||
else:
|
||||
toolC_formatted = format(p.toolC, '.4f')
|
||||
|
||||
no_drills = 1
|
||||
|
||||
if str(p['options']['type']) == 'Excellon':
|
||||
for i in p['options']['Tools_in_use']:
|
||||
if i[0] == p.tool:
|
||||
no_drills = i[2]
|
||||
|
||||
gcode = """G00 Z{toolchangez}
|
||||
T{tool}
|
||||
M5
|
||||
M6
|
||||
(MSG, Change to Tool Dia = {toolC}, Total drills for tool T{tool} = {t_drills})
|
||||
M0""".format(toolchangez=self.coordinate_format % (p.coords_decimals, toolchangez),
|
||||
tool=int(p.tool),
|
||||
t_drills=no_drills,
|
||||
toolC=toolC_formatted)
|
||||
if toolchangexy is not None:
|
||||
gcode = """G00 Z{toolchangez}
|
||||
G00 X{toolchangex} Y{toolchangey}
|
||||
T{tool}
|
||||
M5
|
||||
M6
|
||||
(MSG, Change to Tool Dia = {toolC}, Total drills for tool T{tool} = {t_drills})
|
||||
M0""".format(toolchangex=self.coordinate_format % (p.coords_decimals, toolchangex),
|
||||
toolchangey=self.coordinate_format % (p.coords_decimals, toolchangey),
|
||||
toolchangez=self.coordinate_format % (p.coords_decimals, toolchangez),
|
||||
tool=int(p.tool),
|
||||
t_drills=no_drills,
|
||||
toolC=toolC_formatted)
|
||||
else:
|
||||
gcode = """G00 Z{toolchangez}
|
||||
T{tool}
|
||||
M5
|
||||
M6
|
||||
(MSG, Change to Tool Dia = {toolC}, Total drills for tool T{tool} = {t_drills})
|
||||
M0""".format(toolchangez=self.coordinate_format % (p.coords_decimals, toolchangez),
|
||||
tool=int(p.tool),
|
||||
t_drills=no_drills,
|
||||
toolC=toolC_formatted)
|
||||
|
||||
if toolchangexy is not None:
|
||||
gcode += ('\n' + 'G00 X{toolchangex} Y{toolchangey}'.format(toolchangex=toolchangex,
|
||||
toolchangey=toolchangey))
|
||||
return gcode
|
||||
|
||||
else:
|
||||
gcode = """G00 Z{toolchangez}
|
||||
T{tool}
|
||||
M5
|
||||
M6
|
||||
(MSG, Change to Tool Dia = {toolC})
|
||||
M0""".format(toolchangez=self.coordinate_format % (p.coords_decimals, toolchangez),
|
||||
tool=int(p.tool),
|
||||
toolC=toolC_formatted)
|
||||
if toolchangexy is not None:
|
||||
gcode += ('\n' + 'G00 X{toolchangex} Y{toolchangey}'.format(toolchangex=toolchangex,
|
||||
toolchangey=toolchangey))
|
||||
gcode = """G00 Z{toolchangez}
|
||||
G00 X{toolchangex} Y{toolchangey}
|
||||
T{tool}
|
||||
M5
|
||||
M6
|
||||
(MSG, Change to Tool Dia = {toolC})
|
||||
M0""".format(toolchangex=self.coordinate_format % (p.coords_decimals, toolchangex),
|
||||
toolchangey=self.coordinate_format % (p.coords_decimals, toolchangey),
|
||||
toolchangez=self.coordinate_format % (p.coords_decimals, toolchangez),
|
||||
tool=int(p.tool),
|
||||
toolC=toolC_formatted)
|
||||
else:
|
||||
gcode = """G00 Z{toolchangez}
|
||||
T{tool}
|
||||
M5
|
||||
M6
|
||||
(MSG, Change to Tool Dia = {toolC})
|
||||
M0""".format(toolchangez=self.coordinate_format%(p.coords_decimals, toolchangez),
|
||||
tool=int(p.tool),
|
||||
toolC=toolC_formatted)
|
||||
|
||||
return gcode
|
||||
|
||||
def up_to_zero_code(self, p):
|
||||
|
|
|
@ -80,8 +80,12 @@ class line_xyz(FlatCAMPostProc):
|
|||
toolchangex = toolchangexy[0]
|
||||
toolchangey = toolchangexy[1]
|
||||
else:
|
||||
toolchangex = p.x
|
||||
toolchangey = p.y
|
||||
if str(p['options']['type']) == 'Excellon':
|
||||
toolchangex = p.oldx
|
||||
toolchangey = p.oldy
|
||||
else:
|
||||
toolchangex = p.x
|
||||
toolchangey = p.y
|
||||
|
||||
no_drills = 1
|
||||
|
||||
|
|
|
@ -64,14 +64,15 @@ class manual_toolchange(FlatCAMPostProc):
|
|||
|
||||
def toolchange_code(self, p):
|
||||
toolchangez = p.toolchangez
|
||||
toolchangexy = p['toolchange_xy']
|
||||
toolchangexy = p.toolchange_xy
|
||||
gcode = ''
|
||||
|
||||
if toolchangexy is not None:
|
||||
toolchangex = toolchangexy[0]
|
||||
toolchangey = toolchangexy[1]
|
||||
else:
|
||||
toolchangex = p.oldx
|
||||
toolchangey = p.oldy
|
||||
# else:
|
||||
# toolchangex = p.oldx
|
||||
# toolchangey = p.oldy
|
||||
|
||||
no_drills = 1
|
||||
|
||||
|
@ -87,10 +88,12 @@ class manual_toolchange(FlatCAMPostProc):
|
|||
for i in p['options']['Tools_in_use']:
|
||||
if i[0] == p.tool:
|
||||
no_drills = i[2]
|
||||
return """G00 Z{toolchangez}
|
||||
|
||||
if toolchangexy is not None:
|
||||
gcode = """G00 Z{toolchangez}
|
||||
T{tool}
|
||||
M5
|
||||
G00 X{toolchangex} Y{toolchangey}
|
||||
M5
|
||||
G00 X{toolchangex} Y{toolchangey}
|
||||
(MSG, Change to Tool Dia = {toolC}, Total drills for current tool = {t_drills})
|
||||
M0
|
||||
G01 Z0
|
||||
|
@ -103,8 +106,28 @@ M0
|
|||
tool=int(p.tool),
|
||||
t_drills=no_drills,
|
||||
toolC=toolC_formatted)
|
||||
|
||||
else:
|
||||
gcode = """G00 Z{toolchangez}
|
||||
T{tool}
|
||||
M5
|
||||
(MSG, Change to Tool Dia = {toolC}, Total drills for current tool = {t_drills})
|
||||
M0
|
||||
G01 Z0
|
||||
M0
|
||||
G00 Z{toolchangez}
|
||||
M0
|
||||
""".format(
|
||||
toolchangez=self.coordinate_format%(p.coords_decimals, toolchangez),
|
||||
tool=int(p.tool),
|
||||
t_drills=no_drills,
|
||||
toolC=toolC_formatted)
|
||||
|
||||
return gcode
|
||||
|
||||
else:
|
||||
return """G00 Z{toolchangez}
|
||||
if toolchangexy is not None:
|
||||
gcode = """G00 Z{toolchangez}
|
||||
T{tool}
|
||||
M5
|
||||
G00 X{toolchangex}Y{toolchangey}
|
||||
|
@ -119,6 +142,21 @@ M0
|
|||
toolchangez=self.coordinate_format%(p.coords_decimals, toolchangez),
|
||||
tool=int(p.tool),
|
||||
toolC=toolC_formatted)
|
||||
else:
|
||||
gcode = """G00 Z{toolchangez}
|
||||
T{tool}
|
||||
M5
|
||||
(MSG, Change to Tool Dia = {toolC})
|
||||
M0
|
||||
G01 Z0
|
||||
M0
|
||||
G00 Z{toolchangez}
|
||||
M0
|
||||
""".format(toolchangez=self.coordinate_format%(p.coords_decimals, toolchangez),
|
||||
tool=int(p.tool),
|
||||
toolC=toolC_formatted)
|
||||
|
||||
return gcode
|
||||
|
||||
def up_to_zero_code(self, p):
|
||||
return 'G01 Z0'
|
||||
|
|
|
@ -66,6 +66,13 @@ class marlin(FlatCAMPostProc):
|
|||
|
||||
def toolchange_code(self, p):
|
||||
toolchangez = p.toolchangez
|
||||
toolchangexy = p.toolchange_xy
|
||||
gcode = ''
|
||||
|
||||
if toolchangexy is not None:
|
||||
toolchangex = toolchangexy[0]
|
||||
toolchangey = toolchangexy[1]
|
||||
|
||||
no_drills = 1
|
||||
|
||||
if int(p.tool) == 1 and p.startz is not None:
|
||||
|
@ -80,20 +87,57 @@ class marlin(FlatCAMPostProc):
|
|||
for i in p['options']['Tools_in_use']:
|
||||
if i[0] == p.tool:
|
||||
no_drills = i[2]
|
||||
return """G0 Z{toolchangez}
|
||||
|
||||
if toolchangexy is not None:
|
||||
gcode = """G0 Z{toolchangez}
|
||||
G0 X{toolchangex} Y{toolchangey}
|
||||
T{tool}
|
||||
M5
|
||||
M0 Change to Tool Dia = {toolC}, Total drills for current tool = {t_drills}
|
||||
""".format(toolchangez=self.coordinate_format%(p.coords_decimals, toolchangez),
|
||||
tool=int(p.tool),
|
||||
t_drills=no_drills,
|
||||
toolC=toolC_formatted)
|
||||
M6
|
||||
(MSG, Change to Tool Dia = {toolC}, Total drills for tool T{tool} = {t_drills})
|
||||
M0""".format(toolchangex=self.coordinate_format % (p.coords_decimals, toolchangex),
|
||||
toolchangey=self.coordinate_format % (p.coords_decimals, toolchangey),
|
||||
toolchangez=self.coordinate_format % (p.coords_decimals, toolchangez),
|
||||
tool=int(p.tool),
|
||||
t_drills=no_drills,
|
||||
toolC=toolC_formatted)
|
||||
else:
|
||||
gcode = """G0 Z{toolchangez}
|
||||
T{tool}
|
||||
M5
|
||||
M6
|
||||
(MSG, Change to Tool Dia = {toolC}, Total drills for tool T{tool} = {t_drills})
|
||||
M0""".format(toolchangez=self.coordinate_format % (p.coords_decimals, toolchangez),
|
||||
tool=int(p.tool),
|
||||
t_drills=no_drills,
|
||||
toolC=toolC_formatted)
|
||||
|
||||
return gcode
|
||||
|
||||
else:
|
||||
return """G0 Z{toolchangez}
|
||||
if toolchangexy is not None:
|
||||
gcode = """G0 Z{toolchangez}
|
||||
G0 X{toolchangex} Y{toolchangey}
|
||||
T{tool}
|
||||
M5
|
||||
M0 Change to Tool Dia = {toolC}
|
||||
""".format(toolchangez=self.coordinate_format%(p.coords_decimals, toolchangez),
|
||||
tool=int(p.tool),
|
||||
toolC=toolC_formatted)
|
||||
M6
|
||||
(MSG, Change to Tool Dia = {toolC})
|
||||
M0""".format(toolchangex=self.coordinate_format % (p.coords_decimals, toolchangex),
|
||||
toolchangey=self.coordinate_format % (p.coords_decimals, toolchangey),
|
||||
toolchangez=self.coordinate_format % (p.coords_decimals, toolchangez),
|
||||
tool=int(p.tool),
|
||||
toolC=toolC_formatted)
|
||||
else:
|
||||
gcode = """G0 Z{toolchangez}
|
||||
T{tool}
|
||||
M5
|
||||
M6
|
||||
(MSG, Change to Tool Dia = {toolC})
|
||||
M0""".format(toolchangez=self.coordinate_format%(p.coords_decimals, toolchangez),
|
||||
tool=int(p.tool),
|
||||
toolC=toolC_formatted)
|
||||
|
||||
return gcode
|
||||
|
||||
def up_to_zero_code(self, p):
|
||||
return 'G1 Z0' + " " + self.feedrate_code(p)
|
||||
|
|
|
@ -55,6 +55,9 @@ class TclCommandCncjob(TclCommandSignaled):
|
|||
('multidepth', 'Use or not multidepth cnccut. (True or False)'),
|
||||
('depthperpass', 'Height of one layer for multidepth.'),
|
||||
('extracut', 'Use or not an extra cnccut over the first point in path,in the job end (example: True)'),
|
||||
('toolchange', 'Enable tool changes (example: True).'),
|
||||
('toolchangez', 'Z distance for toolchange (example: 30.0).'),
|
||||
('toolchangexy', 'X, Y coordonates for toolchange in format (x, y) (example: (2.0, 3.1) ).'),
|
||||
('endz', 'Height where the last move will park.'),
|
||||
('outname', 'Name of the resulting Geometry object.'),
|
||||
('ppname_g', 'Name of the Geometry postprocessor. No quotes, case sensitive')
|
||||
|
@ -96,6 +99,10 @@ class TclCommandCncjob(TclCommandSignaled):
|
|||
args["endz"]= args["endz"] if "endz" in args else obj.options["endz"]
|
||||
args["ppname_g"] = args["ppname_g"] if "ppname_g" in args else obj.options["ppname_g"]
|
||||
|
||||
args["toolchange"] = True if "toolchange" in args and args["toolchange"] == 1 else False
|
||||
args["toolchangez"] = args["toolchangez"] if "toolchangez" in args else obj.options["toolchangez"]
|
||||
args["toolchangexy"] = args["toolchangexy"] if "toolchangexy" in args else obj.options["toolchangexy"]
|
||||
|
||||
del args['name']
|
||||
|
||||
# HACK !!! Should be solved elsewhere!!!
|
||||
|
|
|
@ -47,6 +47,7 @@ class TclCommandDrillcncjob(TclCommandSignaled):
|
|||
('spindlespeed', 'Speed of the spindle in rpm (example: 4000).'),
|
||||
('toolchange', 'Enable tool changes (example: True).'),
|
||||
('toolchangez', 'Z distance for toolchange (example: 30.0).'),
|
||||
('toolchangexy', 'X, Y coordonates for toolchange in format (x, y) (example: (2.0, 3.1) ).'),
|
||||
('endz', 'Z distance at job end (example: 30.0).'),
|
||||
('ppname_e', 'This is the Excellon postprocessor name: case_sensitive, no_quotes'),
|
||||
('outname', 'Name of the resulting Geometry object.'),
|
||||
|
@ -93,13 +94,16 @@ class TclCommandDrillcncjob(TclCommandSignaled):
|
|||
|
||||
toolchange = True if "toolchange" in args and args["toolchange"] == 1 else False
|
||||
toolchangez = args["toolchangez"] if "toolchangez" in args else obj.options["toolchangez"]
|
||||
toolchangexy = args["toolchangexy"] if "toolchangexy" in args else obj.options["toolchangexy"]
|
||||
|
||||
endz = args["endz"] if "endz" in args else obj.options["endz"]
|
||||
|
||||
tools = args["tools"] if "tools" in args else 'all'
|
||||
opt_type = args["opt_type"] if "opt_type" in args else 'B'
|
||||
|
||||
job_obj.generate_from_excellon_by_tool(obj, tools, drillz=drillz, toolchangez=toolchangez, endz=endz,
|
||||
job_obj.generate_from_excellon_by_tool(obj, tools, drillz=drillz, toolchangez=toolchangez,
|
||||
toolchangexy=toolchangexy,
|
||||
endz=endz,
|
||||
toolchange=toolchange, excellon_optimization_type=opt_type)
|
||||
job_obj.gcode_parse()
|
||||
job_obj.create_geometry()
|
||||
|
|
Loading…
Reference in New Issue