- fixed the preprocessors with 'laser' in the name to use the spindle direction set in the Preferences

- increased the upper limit for feedrates by an order of magnitude
This commit is contained in:
Marius Stanciu 2020-02-03 14:46:39 +02:00 committed by Marius
parent 10d4ed512b
commit 23a1495c32
7 changed files with 41 additions and 36 deletions

View File

@ -12,6 +12,8 @@ CAD program, and create G-Code for Isolation routing.
3.02.2020
- modified Spinbox and DoubleSpinbox Custom UI elements such that they issue a warning status message when the typed value is out of range
- fixed the preprocessors with 'laser' in the name to use the spindle direction set in the Preferences
- increased the upper limit for feedrates by an order of magnitude
2.02.2020

View File

@ -3105,7 +3105,9 @@ class CNCjob(Geometry):
:param feedrate_z:
:param feedrate_rapid:
:param spindlespeed:
:param spindledir:
:param spindledir: Direction of rotation for the spindle. If using GRBL laser mode will
adjust the laser mode
:param dwell:
:param dwelltime:
:param multidepth: If True, use multiple passes to reach the desired depth.
@ -4055,14 +4057,14 @@ class CNCjob(Geometry):
else:
command['Z'] = 0
elif 'grbl_laser' in self.pp_excellon_name or 'grbl_laser' in self.pp_geometry_name or \
(self.pp_solderpaste_name is not None and 'Paste' in self.pp_solderpaste_name):
elif 'laser' in self.pp_excellon_name.lower() or 'laser' in self.pp_geometry_name.lower() or \
(self.pp_solderpaste_name is not None and 'paste' in self.pp_solderpaste_name.lower()):
match_lsr = re.search(r"X([\+-]?\d+.[\+-]?\d+)\s*Y([\+-]?\d+.[\+-]?\d+)", gline)
if match_lsr:
command['X'] = float(match_lsr.group(1).replace(" ", ""))
command['Y'] = float(match_lsr.group(2).replace(" ", ""))
match_lsr_pos = re.search(r"^(M0[3|5])", gline)
match_lsr_pos = re.search(r"^(M0[3-5])", gline)
if match_lsr_pos:
if 'M05' in match_lsr_pos.group(1):
# the value does not matter, only that it is positive so the gcode_parse() know it is > 0,

View File

@ -1038,7 +1038,7 @@ class ExcellonObjectUI(ObjectUI):
)
self.feedrate_entry = FCDoubleSpinner(callback=self.confirmation_message)
self.feedrate_entry.set_precision(self.decimals)
self.feedrate_entry.set_range(0.0, 9999.9999)
self.feedrate_entry.set_range(0.0, 99999.9999)
self.feedrate_entry.setSingleStep(0.1)
self.grid3.addWidget(frlabel, 14, 0)
@ -1055,7 +1055,7 @@ class ExcellonObjectUI(ObjectUI):
)
self.feedrate_rapid_entry = FCDoubleSpinner(callback=self.confirmation_message)
self.feedrate_rapid_entry.set_precision(self.decimals)
self.feedrate_rapid_entry.set_range(0.0, 9999.9999)
self.feedrate_rapid_entry.set_range(0.0, 99999.9999)
self.feedrate_rapid_entry.setSingleStep(0.1)
self.grid3.addWidget(self.feedrate_rapid_label, 16, 0)
@ -1778,7 +1778,7 @@ class GeometryObjectUI(ObjectUI):
)
self.cncfeedrate_entry = FCDoubleSpinner(callback=self.confirmation_message)
self.cncfeedrate_entry.set_precision(self.decimals)
self.cncfeedrate_entry.set_range(0, 9999.9999)
self.cncfeedrate_entry.set_range(0, 99999.9999)
self.cncfeedrate_entry.setSingleStep(0.1)
self.grid3.addWidget(frlabel, 10, 0)
@ -1793,7 +1793,7 @@ class GeometryObjectUI(ObjectUI):
)
self.cncplunge_entry = FCDoubleSpinner(callback=self.confirmation_message)
self.cncplunge_entry.set_precision(self.decimals)
self.cncplunge_entry.set_range(0, 9999.9999)
self.cncplunge_entry.set_range(0, 99999.9999)
self.cncplunge_entry.setSingleStep(0.1)
self.grid3.addWidget(frzlabel, 11, 0)
@ -1810,7 +1810,7 @@ class GeometryObjectUI(ObjectUI):
)
self.cncfeedrate_rapid_entry = FCDoubleSpinner(callback=self.confirmation_message)
self.cncfeedrate_rapid_entry.set_precision(self.decimals)
self.cncfeedrate_rapid_entry.set_range(0, 9999.9999)
self.cncfeedrate_rapid_entry.set_range(0, 99999.9999)
self.cncfeedrate_rapid_entry.setSingleStep(0.1)
self.grid3.addWidget(self.fr_rapidlabel, 12, 0)

View File

@ -3154,7 +3154,7 @@ class ExcellonOptPrefGroupUI(OptionsGroupUI):
)
self.feedrate_entry = FCDoubleSpinner()
self.feedrate_entry.set_precision(self.decimals)
self.feedrate_entry.set_range(0, 999)
self.feedrate_entry.set_range(0, 99999.9999)
grid2.addWidget(frlabel, 5, 0)
grid2.addWidget(self.feedrate_entry, 5, 1)
@ -3316,7 +3316,7 @@ class ExcellonAdvOptPrefGroupUI(OptionsGroupUI):
)
self.feedrate_rapid_entry = FCDoubleSpinner()
self.feedrate_rapid_entry.set_precision(self.decimals)
self.feedrate_rapid_entry.set_range(0, 9999999.9999)
self.feedrate_rapid_entry.set_range(0, 99999.9999)
grid1.addWidget(fr_rapid_label, 3, 0)
grid1.addWidget(self.feedrate_rapid_entry, 3, 1)
@ -3341,7 +3341,7 @@ class ExcellonAdvOptPrefGroupUI(OptionsGroupUI):
)
self.feedrate_probe_entry = FCDoubleSpinner()
self.feedrate_probe_entry.set_precision(self.decimals)
self.feedrate_probe_entry.set_range(0, 9999999.9999)
self.feedrate_probe_entry.set_range(0, 99999.9999)
grid1.addWidget(self.feedrate_probe_label, 5, 0)
grid1.addWidget(self.feedrate_probe_entry, 5, 1)
@ -4081,7 +4081,7 @@ class GeometryOptPrefGroupUI(OptionsGroupUI):
"plane in units per minute")
)
self.cncfeedrate_entry = FCDoubleSpinner()
self.cncfeedrate_entry.set_range(0, 99999)
self.cncfeedrate_entry.set_range(0, 99999.9999)
self.cncfeedrate_entry.set_precision(self.decimals)
self.cncfeedrate_entry.setSingleStep(0.1)
self.cncfeedrate_entry.setWrapping(True)
@ -4097,7 +4097,7 @@ class GeometryOptPrefGroupUI(OptionsGroupUI):
"It is called also Plunge.")
)
self.cncplunge_entry = FCDoubleSpinner()
self.cncplunge_entry.set_range(0, 99999)
self.cncplunge_entry.set_range(0, 99999.9999)
self.cncplunge_entry.set_precision(self.decimals)
self.cncplunge_entry.setSingleStep(0.1)
self.cncplunge_entry.setWrapping(True)
@ -4208,7 +4208,7 @@ class GeometryAdvOptPrefGroupUI(OptionsGroupUI):
"ignore for any other cases.")
)
self.cncfeedrate_rapid_entry = FCDoubleSpinner()
self.cncfeedrate_rapid_entry.set_range(0, 99999)
self.cncfeedrate_rapid_entry.set_range(0, 99999.9999)
self.cncfeedrate_rapid_entry.set_precision(self.decimals)
self.cncfeedrate_rapid_entry.setSingleStep(0.1)
self.cncfeedrate_rapid_entry.setWrapping(True)
@ -4260,7 +4260,7 @@ class GeometryAdvOptPrefGroupUI(OptionsGroupUI):
_("The feedrate used while the probe is probing.")
)
self.feedrate_probe_entry = FCDoubleSpinner()
self.feedrate_probe_entry.set_range(0, 99999)
self.feedrate_probe_entry.set_range(0, 99999.9999)
self.feedrate_probe_entry.set_precision(self.decimals)
self.feedrate_probe_entry.setSingleStep(0.1)
self.feedrate_probe_entry.setWrapping(True)
@ -6709,7 +6709,7 @@ class ToolsSolderpastePrefGroupUI(OptionsGroupUI):
# Feedrate X-Y
self.frxy_entry = FCDoubleSpinner()
self.frxy_entry.set_precision(self.decimals)
self.frxy_entry.set_range(0.0000001, 9999.9999)
self.frxy_entry.set_range(0.0000001, 99999.9999)
self.frxy_entry.setSingleStep(0.1)
self.frxy_label = QtWidgets.QLabel('%s:' % _("Feedrate X-Y"))
@ -6722,7 +6722,7 @@ class ToolsSolderpastePrefGroupUI(OptionsGroupUI):
# Feedrate Z
self.frz_entry = FCDoubleSpinner()
self.frz_entry.set_precision(self.decimals)
self.frz_entry.set_range(0.0000001, 9999.9999)
self.frz_entry.set_range(0.0000001, 99999.9999)
self.frz_entry.setSingleStep(0.1)
self.frz_label = QtWidgets.QLabel('%s:' % _("Feedrate Z"))
@ -6736,7 +6736,7 @@ class ToolsSolderpastePrefGroupUI(OptionsGroupUI):
# Feedrate Z Dispense
self.frz_dispense_entry = FCDoubleSpinner()
self.frz_dispense_entry.set_precision(self.decimals)
self.frz_dispense_entry.set_range(0.0000001, 9999.9999)
self.frz_dispense_entry.set_range(0.0000001, 99999.9999)
self.frz_dispense_entry.setSingleStep(0.1)
self.frz_dispense_label = QtWidgets.QLabel('%s:' % _("Feedrate Z Dispense"))
@ -6749,7 +6749,7 @@ class ToolsSolderpastePrefGroupUI(OptionsGroupUI):
# Spindle Speed Forward
self.speedfwd_entry = FCSpinner()
self.speedfwd_entry.set_range(0, 999999)
self.speedfwd_entry.set_range(0, 99999)
self.speedfwd_entry.setSingleStep(1000)
self.speedfwd_label = QtWidgets.QLabel('%s:' % _("Spindle Speed FWD"))

View File

@ -245,7 +245,7 @@ class SolderPaste(FlatCAMTool):
# Feedrate X-Y
self.frxy_entry = FCDoubleSpinner()
self.frxy_entry.set_range(0.0000001, 9999.9999)
self.frxy_entry.set_range(0.0000, 99999.9999)
self.frxy_entry.set_precision(self.decimals)
self.frxy_entry.setSingleStep(0.1)
@ -257,7 +257,7 @@ class SolderPaste(FlatCAMTool):
# Feedrate Z
self.frz_entry = FCDoubleSpinner()
self.frz_entry.set_range(0.0000001, 9999.9999)
self.frz_entry.set_range(0.0000, 99999.9999)
self.frz_entry.set_precision(self.decimals)
self.frz_entry.setSingleStep(0.1)
@ -270,7 +270,7 @@ class SolderPaste(FlatCAMTool):
# Feedrate Z Dispense
self.frz_dispense_entry = FCDoubleSpinner()
self.frz_dispense_entry.set_range(0.0000001, 9999.9999)
self.frz_dispense_entry.set_range(0.0000, 99999.9999)
self.frz_dispense_entry.set_precision(self.decimals)
self.frz_dispense_entry.setSingleStep(0.1)
@ -491,6 +491,8 @@ class SolderPaste(FlatCAMTool):
self.units = ''
self.name = ""
self.obj = None
self.text_editor_tab = None
# this will be used in the combobox context menu, for delete entry
@ -652,10 +654,10 @@ class SolderPaste(FlatCAMTool):
for tooluid_key, tooluid_value in self.tooltable_tools.items():
if float('%.*f' % (self.decimals, tooluid_value['tooldia'])) == tool_sorted:
tool_id += 1
id = QtWidgets.QTableWidgetItem('%d' % int(tool_id))
id.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled)
id_item = QtWidgets.QTableWidgetItem('%d' % int(tool_id))
id_item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled)
row_no = tool_id - 1
self.tools_table.setItem(row_no, 0, id) # Tool name/id
self.tools_table.setItem(row_no, 0, id_item) # Tool name/id
# Make sure that the drill diameter when in MM is with no more than 2 decimals
# There are no drill bits in MM with more than 2 decimals diameter
@ -1295,7 +1297,7 @@ class SolderPaste(FlatCAMTool):
if obj.tools[tooluid_key]['solid_geometry'] is None:
a += 1
if a == len(obj.tools):
self.app.inform.emit('[ERROR_NOTCL] %s...' % _('Cancelled. Empty file, it has no geometry'))
self.app.inform.emit('[ERROR_NOTCL] %s...' % _('Cancelled. Empty file, it has no geometry'))
return 'fail'
# use the name of the first tool selected in self.geo_tools_table which has the diameter passed as tool_dia
@ -1334,8 +1336,6 @@ class SolderPaste(FlatCAMTool):
assert isinstance(job_obj, FlatCAMCNCjob), \
"Initializer expected a FlatCAMCNCjob, got %s" % type(job_obj)
tool_cnc_dict = {}
# this turn on the FlatCAMCNCJob plot for multiple tools
job_obj.multitool = True
job_obj.multigeo = True

View File

@ -117,11 +117,11 @@ M6
M0
G00 Z{z_toolchange}
""".format(x_toolchange=self.coordinate_format % (p.coords_decimals, x_toolchange),
y_toolchange=self.coordinate_format % (p.coords_decimals, y_toolchange),
z_toolchange=self.coordinate_format % (p.coords_decimals, z_toolchange),
tool=int(p.tool),
t_drills=no_drills,
toolC=toolC_formatted)
y_toolchange=self.coordinate_format % (p.coords_decimals, y_toolchange),
z_toolchange=self.coordinate_format % (p.coords_decimals, z_toolchange),
tool=int(p.tool),
t_drills=no_drills,
toolC=toolC_formatted)
else:
gcode = """
M5

View File

@ -54,10 +54,11 @@ class grbl_laser(FlatCAMPostProc):
return 'M05 S0'
def down_code(self, p):
sdir = {'CW': 'M03', 'CCW': 'M04'}[p.spindledir]
if p.spindlespeed:
return 'M03 S%d' % p.spindlespeed
return '%s S%s' % (sdir, str(p.spindlespeed))
else:
return 'M03'
return sdir
def toolchange_code(self, p):
return ''