From 23a1495c328122018445827abc216920dccff256 Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Mon, 3 Feb 2020 14:46:39 +0200 Subject: [PATCH] - 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 --- README.md | 2 ++ camlib.py | 10 ++++++---- flatcamGUI/ObjectUI.py | 10 +++++----- flatcamGUI/PreferencesUI.py | 22 +++++++++++----------- flatcamTools/ToolSolderPaste.py | 18 +++++++++--------- preprocessors/default.py | 10 +++++----- preprocessors/grbl_laser.py | 5 +++-- 7 files changed, 41 insertions(+), 36 deletions(-) diff --git a/README.md b/README.md index 2ee1e479..e50d47be 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/camlib.py b/camlib.py index b51be9a8..9eaa8ab8 100644 --- a/camlib.py +++ b/camlib.py @@ -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, diff --git a/flatcamGUI/ObjectUI.py b/flatcamGUI/ObjectUI.py index 63c747a4..ed9863ae 100644 --- a/flatcamGUI/ObjectUI.py +++ b/flatcamGUI/ObjectUI.py @@ -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) diff --git a/flatcamGUI/PreferencesUI.py b/flatcamGUI/PreferencesUI.py index be3e1e20..cde679cf 100644 --- a/flatcamGUI/PreferencesUI.py +++ b/flatcamGUI/PreferencesUI.py @@ -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")) diff --git a/flatcamTools/ToolSolderPaste.py b/flatcamTools/ToolSolderPaste.py index c2393bd2..af227bd3 100644 --- a/flatcamTools/ToolSolderPaste.py +++ b/flatcamTools/ToolSolderPaste.py @@ -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 diff --git a/preprocessors/default.py b/preprocessors/default.py index d1ddf6ad..e57ed812 100644 --- a/preprocessors/default.py +++ b/preprocessors/default.py @@ -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 diff --git a/preprocessors/grbl_laser.py b/preprocessors/grbl_laser.py index a95708ca..e975a703 100644 --- a/preprocessors/grbl_laser.py +++ b/preprocessors/grbl_laser.py @@ -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 ''