Browse Source

- 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

Marius Stanciu 6 years ago
parent
commit
23a1495c32

+ 2 - 0
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
 

+ 6 - 4
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,

+ 5 - 5
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)

+ 11 - 11
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"))

+ 9 - 9
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

+ 5 - 5
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       

+ 3 - 2
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 ''