diff --git a/FlatCAMApp.py b/FlatCAMApp.py index 54b27f0f..e5cd1830 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -396,6 +396,7 @@ class App(QtCore.QObject): "excellon_travelz": self.ui.excellon_defaults_form.excellon_opt_group.travelz_entry, "excellon_feedrate": self.ui.excellon_defaults_form.excellon_opt_group.feedrate_entry, "excellon_spindlespeed": self.ui.excellon_defaults_form.excellon_opt_group.spindlespeed_entry, + "excellon_spindledir": self.ui.excellon_defaults_form.excellon_opt_group.spindledir_radio, "excellon_dwell": self.ui.excellon_defaults_form.excellon_opt_group.dwell_cb, "excellon_dwelltime": self.ui.excellon_defaults_form.excellon_opt_group.dwelltime_entry, "excellon_toolchange": self.ui.excellon_defaults_form.excellon_opt_group.toolchange_cb, @@ -434,6 +435,7 @@ class App(QtCore.QObject): "geometry_feedrate": self.ui.geometry_defaults_form.geometry_opt_group.cncfeedrate_entry, "geometry_feedrate_z": self.ui.geometry_defaults_form.geometry_opt_group.cncplunge_entry, "geometry_spindlespeed": self.ui.geometry_defaults_form.geometry_opt_group.cncspindlespeed_entry, + "geometry_spindledir": self.ui.geometry_defaults_form.geometry_opt_group.spindledir_radio, "geometry_dwell": self.ui.geometry_defaults_form.geometry_opt_group.dwell_cb, "geometry_dwelltime": self.ui.geometry_defaults_form.geometry_opt_group.dwelltime_entry, "geometry_ppname_g": self.ui.geometry_defaults_form.geometry_opt_group.pp_geometry_name_cb, @@ -711,6 +713,7 @@ class App(QtCore.QObject): "excellon_travelz": 0.1, "excellon_feedrate": 3.0, "excellon_spindlespeed": None, + "excellon_spindledir": 'CW', "excellon_dwell": False, "excellon_dwelltime": 1, "excellon_toolchange": False, @@ -753,6 +756,7 @@ class App(QtCore.QObject): "geometry_feedrate": 3.0, "geometry_feedrate_z": 3.0, "geometry_spindlespeed": None, + "geometry_spindledir": 'CW', "geometry_dwell": False, "geometry_dwelltime": 1, "geometry_ppname_g": 'default', @@ -942,6 +946,7 @@ class App(QtCore.QObject): "excellon_travelz": self.ui.excellon_options_form.excellon_opt_group.travelz_entry, "excellon_feedrate": self.ui.excellon_options_form.excellon_opt_group.feedrate_entry, "excellon_spindlespeed": self.ui.excellon_options_form.excellon_opt_group.spindlespeed_entry, + "excellon_spindledir": self.ui.excellon_options_form.excellon_opt_group.spindledir_radio, "excellon_dwell": self.ui.excellon_options_form.excellon_opt_group.dwell_cb, "excellon_dwelltime": self.ui.excellon_options_form.excellon_opt_group.dwelltime_entry, "excellon_toolchange": self.ui.excellon_options_form.excellon_opt_group.toolchange_cb, @@ -963,6 +968,7 @@ class App(QtCore.QObject): "geometry_feedrate": self.ui.geometry_options_form.geometry_opt_group.cncfeedrate_entry, "geometry_feedrate_z": self.ui.geometry_options_form.geometry_opt_group.cncplunge_entry, "geometry_spindlespeed": self.ui.geometry_options_form.geometry_opt_group.cncspindlespeed_entry, + "geometry_spindledir": self.ui.geometry_options_form.geometry_opt_group.spindledir_radio, "geometry_dwell": self.ui.geometry_options_form.geometry_opt_group.dwell_cb, "geometry_dwelltime": self.ui.geometry_options_form.geometry_opt_group.dwelltime_entry, "geometry_ppname_g": self.ui.geometry_options_form.geometry_opt_group.pp_geometry_name_cb, @@ -1065,6 +1071,7 @@ class App(QtCore.QObject): "excellon_feedrate": 3.0, "excellon_feedrate_rapid": 3.0, "excellon_spindlespeed": None, + "excellon_spindledir": 'CW', "excellon_dwell": True, "excellon_dwelltime": 1000, "excellon_toolchange": False, @@ -1085,6 +1092,7 @@ class App(QtCore.QObject): "geometry_feedrate_z": 3.0, "geometry_feedrate_rapid": 3.0, "geometry_spindlespeed": None, + "geometry_spindledir": 'CW', "geometry_dwell": True, "geometry_dwelltime": 1000, "geometry_cnctooldia": 0.016, diff --git a/FlatCAMObj.py b/FlatCAMObj.py index dfbbf718..1c4c2441 100644 --- a/FlatCAMObj.py +++ b/FlatCAMObj.py @@ -1350,15 +1350,20 @@ class FlatCAMGerber(FlatCAMObj, Gerber): geo_coords[0][0], geo_coords[0][1], factor) gerber_code += "X{xform}Y{yform}D02*\n".format(xform=x_formatted, yform=y_formatted) + + prev_coord = geo_coords[0] for coord in geo_coords[1:]: - if g_zeros == 'T': - x_formatted, y_formatted = tz_format(coord[0], coord[1], factor) - gerber_code += "X{xform}Y{yform}D01*\n".format(xform=x_formatted, - yform=y_formatted) - else: - x_formatted, y_formatted = lz_format(coord[0], coord[1], factor) - gerber_code += "X{xform}Y{yform}D01*\n".format(xform=x_formatted, - yform=y_formatted) + if coord != prev_coord: + if g_zeros == 'T': + x_formatted, y_formatted = tz_format(coord[0], coord[1], factor) + gerber_code += "X{xform}Y{yform}D01*\n".format(xform=x_formatted, + yform=y_formatted) + else: + x_formatted, y_formatted = lz_format(coord[0], coord[1], factor) + gerber_code += "X{xform}Y{yform}D01*\n".format(xform=x_formatted, + yform=y_formatted) + prev_coord = coord + gerber_code += 'D02*\n' gerber_code += 'G37*\n' gerber_code += '%LPD*%\n' @@ -1377,15 +1382,20 @@ class FlatCAMGerber(FlatCAMObj, Gerber): x_formatted, y_formatted = lz_format(geo_coords[0][0], geo_coords[0][1], factor) gerber_code += "X{xform}Y{yform}D02*\n".format(xform=x_formatted, yform=y_formatted) + + prev_coord = geo_coords[0] for coord in geo_coords[1:]: - if g_zeros == 'T': - x_formatted, y_formatted = tz_format(coord[0], coord[1], factor) - gerber_code += "X{xform}Y{yform}D01*\n".format(xform=x_formatted, - yform=y_formatted) - else: - x_formatted, y_formatted = lz_format(coord[0], coord[1], factor) - gerber_code += "X{xform}Y{yform}D01*\n".format(xform=x_formatted, - yform=y_formatted) + if coord != prev_coord: + if g_zeros == 'T': + x_formatted, y_formatted = tz_format(coord[0], coord[1], factor) + gerber_code += "X{xform}Y{yform}D01*\n".format(xform=x_formatted, + yform=y_formatted) + else: + x_formatted, y_formatted = lz_format(coord[0], coord[1], factor) + gerber_code += "X{xform}Y{yform}D01*\n".format(xform=x_formatted, + yform=y_formatted) + prev_coord = coord + gerber_code += 'D02*\n' gerber_code += 'G37*\n' gerber_code += '%LPD*%\n' @@ -1422,15 +1432,20 @@ class FlatCAMGerber(FlatCAMObj, Gerber): geo_coords[0][0], geo_coords[0][1], factor) gerber_code += "X{xform}Y{yform}D02*\n".format(xform=x_formatted, yform=y_formatted) + + prev_coord = geo_coords[0] for coord in geo_coords[1:]: - if g_zeros == 'T': - x_formatted, y_formatted = tz_format(coord[0], coord[1], factor) - gerber_code += "X{xform}Y{yform}D01*\n".format(xform=x_formatted, - yform=y_formatted) - else: - x_formatted, y_formatted = lz_format(coord[0], coord[1], factor) - gerber_code += "X{xform}Y{yform}D01*\n".format(xform=x_formatted, - yform=y_formatted) + if coord != prev_coord: + if g_zeros == 'T': + x_formatted, y_formatted = tz_format(coord[0], coord[1], factor) + gerber_code += "X{xform}Y{yform}D01*\n".format(xform=x_formatted, + yform=y_formatted) + else: + x_formatted, y_formatted = lz_format(coord[0], coord[1], factor) + gerber_code += "X{xform}Y{yform}D01*\n".format(xform=x_formatted, + yform=y_formatted) + prev_coord = coord + # gerber_code += "D02*\n" if 'clear' in geo_elem: @@ -1460,15 +1475,20 @@ class FlatCAMGerber(FlatCAMObj, Gerber): geo_coords[0][0], geo_coords[0][1], factor) gerber_code += "X{xform}Y{yform}D02*\n".format(xform=x_formatted, yform=y_formatted) + + prev_coord = geo_coords[0] for coord in geo_coords[1:]: - if g_zeros == 'T': - x_formatted, y_formatted = tz_format(coord[0], coord[1], factor) - gerber_code += "X{xform}Y{yform}D01*\n".format(xform=x_formatted, - yform=y_formatted) - else: - x_formatted, y_formatted = lz_format(coord[0], coord[1], factor) - gerber_code += "X{xform}Y{yform}D01*\n".format(xform=x_formatted, - yform=y_formatted) + if coord != prev_coord: + if g_zeros == 'T': + x_formatted, y_formatted = tz_format(coord[0], coord[1], factor) + gerber_code += "X{xform}Y{yform}D01*\n".format(xform=x_formatted, + yform=y_formatted) + else: + x_formatted, y_formatted = lz_format(coord[0], coord[1], factor) + gerber_code += "X{xform}Y{yform}D01*\n".format(xform=x_formatted, + yform=y_formatted) + + prev_coord = coord # gerber_code += "D02*\n" gerber_code += '%LPD*%\n' @@ -2551,8 +2571,10 @@ class FlatCAMExcellon(FlatCAMObj, Excellon): job_obj.feedrate_rapid = float(self.options["feedrate_rapid"]) job_obj.spindlespeed = float(self.options["spindlespeed"]) if self.options["spindlespeed"] else None + job_obj.spindledir = self.app.defaults['excellon_spindledir'] job_obj.dwell = self.options["dwell"] job_obj.dwelltime = float(self.options["dwelltime"]) + job_obj.pp_excellon_name = pp_excellon_name job_obj.toolchange_xy_type = "excellon" @@ -4406,6 +4428,8 @@ class FlatCAMGeometry(FlatCAMObj, Geometry): 'offset_value': tool_offset }) + spindledir = self.app.defaults['geometry_spindledir'] + job_obj.coords_decimals = self.app.defaults["cncjob_coords_decimals"] job_obj.fr_decimals = self.app.defaults["cncjob_fr_decimals"] @@ -4425,7 +4449,7 @@ class FlatCAMGeometry(FlatCAMObj, Geometry): self, tooldia=tooldia_val, offset=tool_offset, tolerance=0.0005, z_cut=z_cut, z_move=z_move, feedrate=feedrate, feedrate_z=feedrate_z, feedrate_rapid=feedrate_rapid, - spindlespeed=spindlespeed, dwell=dwell, dwelltime=dwelltime, + spindlespeed=spindlespeed, spindledir=spindledir, dwell=dwell, dwelltime=dwelltime, multidepth=multidepth, depthpercut=depthpercut, extracut=extracut, startz=startz, endz=endz, toolchange=toolchange, toolchangez=toolchangez, toolchangexy=toolchangexy, @@ -4649,12 +4673,14 @@ class FlatCAMGeometry(FlatCAMObj, Geometry): app_obj.progress.emit(40) + spindledir = self.app.defaults['geometry_spindledir'] + tool_solid_geometry = self.tools[current_uid]['solid_geometry'] res = job_obj.generate_from_multitool_geometry( tool_solid_geometry, tooldia=tooldia_val, offset=tool_offset, tolerance=0.0005, z_cut=z_cut, z_move=z_move, feedrate=feedrate, feedrate_z=feedrate_z, feedrate_rapid=feedrate_rapid, - spindlespeed=spindlespeed, dwell=dwell, dwelltime=dwelltime, + spindlespeed=spindlespeed, spindledir=spindledir, dwell=dwell, dwelltime=dwelltime, multidepth=multidepth, depthpercut=depthpercut, extracut=extracut, startz=startz, endz=endz, toolchange=toolchange, toolchangez=toolchangez, toolchangexy=toolchangexy, diff --git a/README.md b/README.md index b178e92d..9a648f7c 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,11 @@ CAD program, and create G-Code for Isolation routing. ================================================= +16.05.2019 + +- Gerber Export: made sure that if some of the coordinates in a Gerber object geometry are repeating then the resulting Gerber code include only one copy +- added a new parameter/feature: now the spindle can work in clockwise mode (CW) or counter clockwise mode (CCW) + 15.05.2019 - rewrited the Gerber Parser in camlib - success diff --git a/camlib.py b/camlib.py index 2084c186..b76aa630 100644 --- a/camlib.py +++ b/camlib.py @@ -4932,7 +4932,7 @@ class CNCjob(Geometry): feedrate=3.0, feedrate_z=3.0, feedrate_rapid=3.0, feedrate_probe=3.0, pp_geometry_name='default', pp_excellon_name='default', depthpercut=0.1,z_pdepth=-0.02, - spindlespeed=None, dwell=True, dwelltime=1000, + spindlespeed=None, spindledir='CW', dwell=True, dwelltime=1000, toolchangez=0.787402, toolchange_xy=[0.0, 0.0], endz=2.0, segx=None, @@ -5000,6 +5000,7 @@ class CNCjob(Geometry): self.feedrate_probe = feedrate_probe if feedrate_probe else None self.spindlespeed = spindlespeed + self.spindledir = spindledir self.dwell = dwell self.dwelltime = dwelltime @@ -5553,7 +5554,7 @@ class CNCjob(Geometry): def generate_from_multitool_geometry(self, geometry, append=True, tooldia=None, offset=0.0, tolerance=0, z_cut=1.0, z_move=2.0, feedrate=2.0, feedrate_z=2.0, feedrate_rapid=30, - spindlespeed=None, dwell=False, dwelltime=1.0, + spindlespeed=None, spindledir='CW', dwell=False, dwelltime=1.0, multidepth=False, depthpercut=None, toolchange=False, toolchangez=1.0, toolchangexy="0.0, 0.0", extracut=False, startz=None, endz=2.0, pp_geometry_name=None, tool_no=1): @@ -5603,6 +5604,7 @@ class CNCjob(Geometry): self.feedrate_rapid = float(feedrate_rapid) if feedrate_rapid else None self.spindlespeed = int(spindlespeed) if spindlespeed else None + self.spindledir = spindledir self.dwell = dwell self.dwelltime = float(dwelltime) if dwelltime else None @@ -5767,7 +5769,7 @@ class CNCjob(Geometry): tooldia=None, offset=0.0, tolerance=0, z_cut=1.0, z_move=2.0, feedrate=2.0, feedrate_z=2.0, feedrate_rapid=30, - spindlespeed=None, dwell=False, dwelltime=1.0, + spindlespeed=None, spindledir='CW', dwell=False, dwelltime=1.0, multidepth=False, depthpercut=None, toolchange=False, toolchangez=1.0, toolchangexy="0.0, 0.0", extracut=False, startz=None, endz=2.0, @@ -5863,29 +5865,21 @@ class CNCjob(Geometry): self.tooldia = float(tooldia) if tooldia else None self.z_cut = float(z_cut) if z_cut else None - self.z_move = float(z_move) if z_move else None self.feedrate = float(feedrate) if feedrate else None - self.z_feedrate = float(feedrate_z) if feedrate_z else None - self.feedrate_rapid = float(feedrate_rapid) if feedrate_rapid else None self.spindlespeed = int(spindlespeed) if spindlespeed else None - + self.spindledir = spindledir self.dwell = dwell - self.dwelltime = float(dwelltime) if dwelltime else None self.startz = float(startz) if startz else None - self.z_end = float(endz) if endz else None - self.z_depthpercut = float(depthpercut) if depthpercut else None - self.multidepth = multidepth - self.z_toolchange = float(toolchangez) if toolchangez else None try: diff --git a/flatcamGUI/FlatCAMGUI.py b/flatcamGUI/FlatCAMGUI.py index 11987e9c..62505ab8 100644 --- a/flatcamGUI/FlatCAMGUI.py +++ b/flatcamGUI/FlatCAMGUI.py @@ -4628,6 +4628,20 @@ class ExcellonOptPrefGroupUI(OptionsGroupUI): self.spindlespeed_entry = IntEntry(allow_empty=True) grid2.addWidget(self.spindlespeed_entry, 5, 1) + # Spindle direction + spindle_dir_label = QtWidgets.QLabel(_('Spindle dir.:')) + spindle_dir_label.setToolTip( + _("This sets the direction that the spindle is rotating.\n" + "It can be either:\n" + "- CW = clockwise or\n" + "- CCW = counter clockwise") + ) + + self.spindledir_radio = RadioSet([{'label': 'CW', 'value': 'CW'}, + {'label': 'CCW', 'value': 'CCW'}]) + grid2.addWidget(spindle_dir_label, 6, 0) + grid2.addWidget(self.spindledir_radio, 6, 1) + # Dwell dwelllabel = QtWidgets.QLabel(_('Dwell:')) dwelllabel.setToolTip( @@ -4640,10 +4654,10 @@ class ExcellonOptPrefGroupUI(OptionsGroupUI): ) self.dwell_cb = FCCheckBox() self.dwelltime_entry = FCEntry() - grid2.addWidget(dwelllabel, 6, 0) - grid2.addWidget(self.dwell_cb, 6, 1) - grid2.addWidget(dwelltime, 7, 0) - grid2.addWidget(self.dwelltime_entry, 7, 1) + grid2.addWidget(dwelllabel, 7, 0) + grid2.addWidget(self.dwell_cb, 7, 1) + grid2.addWidget(dwelltime, 8, 0) + grid2.addWidget(self.dwelltime_entry, 8, 1) self.ois_dwell_exc = OptionalInputSection(self.dwell_cb, [self.dwelltime_entry]) @@ -4653,10 +4667,10 @@ class ExcellonOptPrefGroupUI(OptionsGroupUI): _("The postprocessor file that dictates\n" "gcode output.") ) - grid2.addWidget(pp_excellon_label, 8, 0) + grid2.addWidget(pp_excellon_label, 9, 0) self.pp_excellon_name_cb = FCComboBox() self.pp_excellon_name_cb.setFocusPolicy(Qt.StrongFocus) - grid2.addWidget(self.pp_excellon_name_cb, 8, 1) + grid2.addWidget(self.pp_excellon_name_cb, 9, 1) #### Choose what to use for Gcode creation: Drills, Slots or Both @@ -4670,8 +4684,8 @@ class ExcellonOptPrefGroupUI(OptionsGroupUI): self.excellon_gcode_type_radio = RadioSet([{'label': 'Drills', 'value': 'drills'}, {'label': 'Slots', 'value': 'slots'}, {'label': 'Both', 'value': 'both'}]) - grid2.addWidget(excellon_gcode_type_label, 9, 0) - grid2.addWidget(self.excellon_gcode_type_radio, 9, 1) + grid2.addWidget(excellon_gcode_type_label, 10, 0) + grid2.addWidget(self.excellon_gcode_type_radio, 10, 1) # until I decide to implement this feature those remain disabled excellon_gcode_type_label.hide() @@ -5121,6 +5135,20 @@ class GeometryOptPrefGroupUI(OptionsGroupUI): self.cncspindlespeed_entry = IntEntry(allow_empty=True) grid1.addWidget(self.cncspindlespeed_entry, 8, 1) + # Spindle direction + spindle_dir_label = QtWidgets.QLabel(_('Spindle dir.:')) + spindle_dir_label.setToolTip( + _("This sets the direction that the spindle is rotating.\n" + "It can be either:\n" + "- CW = clockwise or\n" + "- CCW = counter clockwise") + ) + + self.spindledir_radio = RadioSet([{'label': 'CW', 'value': 'CW'}, + {'label': 'CCW', 'value': 'CCW'}]) + grid1.addWidget(spindle_dir_label, 9, 0) + grid1.addWidget(self.spindledir_radio, 9, 1) + # Dwell self.dwell_cb = FCCheckBox(label=_('Dwell:')) self.dwell_cb.setToolTip( @@ -5132,9 +5160,9 @@ class GeometryOptPrefGroupUI(OptionsGroupUI): _("Number of milliseconds for spindle to dwell.") ) self.dwelltime_entry = FCEntry() - grid1.addWidget(self.dwell_cb, 9, 0) - grid1.addWidget(dwelltime, 10, 0) - grid1.addWidget(self.dwelltime_entry, 10, 1) + grid1.addWidget(self.dwell_cb, 10, 0) + grid1.addWidget(dwelltime, 11, 0) + grid1.addWidget(self.dwelltime_entry, 11, 1) self.ois_dwell = OptionalInputSection(self.dwell_cb, [self.dwelltime_entry]) @@ -5144,10 +5172,10 @@ class GeometryOptPrefGroupUI(OptionsGroupUI): _("The postprocessor file that dictates\n" "Machine Code output.") ) - grid1.addWidget(pp_label, 11, 0) + grid1.addWidget(pp_label, 12, 0) self.pp_geometry_name_cb = FCComboBox() self.pp_geometry_name_cb.setFocusPolicy(Qt.StrongFocus) - grid1.addWidget(self.pp_geometry_name_cb, 11, 1) + grid1.addWidget(self.pp_geometry_name_cb, 12, 1) self.layout.addStretch() diff --git a/postprocessors/Toolchange_Custom.py b/postprocessors/Toolchange_Custom.py index d9ba51bf..abdbf899 100644 --- a/postprocessors/Toolchange_Custom.py +++ b/postprocessors/Toolchange_Custom.py @@ -157,10 +157,11 @@ M6 return 'G01 F' + str(self.feedrate_format %(p.fr_decimals, p.z_feedrate)) def spindle_code(self, p): + sdir = {'CW': 'M03', 'CCW': 'M04'}[p.spindledir] if p.spindlespeed: - return 'M03 S' + str(p.spindlespeed) + return '%s S%s' % (sdir, str(p.spindlespeed)) else: - return 'M03' + return sdir def dwell_code(self, p): if p.dwelltime: diff --git a/postprocessors/Toolchange_Probe_MACH3.py b/postprocessors/Toolchange_Probe_MACH3.py index 7d902fd2..60f42926 100644 --- a/postprocessors/Toolchange_Probe_MACH3.py +++ b/postprocessors/Toolchange_Probe_MACH3.py @@ -260,10 +260,11 @@ M0 return 'G01 F' + str(self.feedrate_format %(p.fr_decimals, p.z_feedrate)) def spindle_code(self, p): + sdir = {'CW': 'M03', 'CCW': 'M04'}[p.spindledir] if p.spindlespeed: - return 'M03 S' + str(p.spindlespeed) + return '%s S%s' % (sdir, str(p.spindlespeed)) else: - return 'M03' + return sdir def dwell_code(self, p): if p.dwelltime: diff --git a/postprocessors/Toolchange_manual.py b/postprocessors/Toolchange_manual.py index 4d9341fd..148fc2c7 100644 --- a/postprocessors/Toolchange_manual.py +++ b/postprocessors/Toolchange_manual.py @@ -220,11 +220,12 @@ M0 def z_feedrate_code(self, p): return 'G01 F' + str(self.feedrate_format %(p.fr_decimals, p.z_feedrate)) - def spindle_code(self,p): + def spindle_code(self, p): + sdir = {'CW': 'M03', 'CCW': 'M04'}[p.spindledir] if p.spindlespeed: - return 'M03 S' + str(p.spindlespeed) + return '%s S%s' % (sdir, str(p.spindlespeed)) else: - return 'M03' + return sdir def dwell_code(self, p): if p.dwelltime: diff --git a/postprocessors/default.py b/postprocessors/default.py index 643348cf..d9e6a241 100644 --- a/postprocessors/default.py +++ b/postprocessors/default.py @@ -192,10 +192,11 @@ M0""".format(z_toolchange=self.coordinate_format%(p.coords_decimals, z_toolchang return 'G01 F' + str(self.feedrate_format %(p.fr_decimals, p.z_feedrate)) def spindle_code(self, p): + sdir = {'CW': 'M03', 'CCW': 'M04'}[p.spindledir] if p.spindlespeed: - return 'M03 S' + str(p.spindlespeed) + return '%s S%s' % (sdir, str(p.spindlespeed)) else: - return 'M03' + return sdir def dwell_code(self, p): if p.dwelltime: diff --git a/postprocessors/grbl_11.py b/postprocessors/grbl_11.py index 988a90d5..cae2f39a 100644 --- a/postprocessors/grbl_11.py +++ b/postprocessors/grbl_11.py @@ -191,11 +191,12 @@ M0""".format(z_toolchange=self.coordinate_format%(p.coords_decimals, z_toolchang def z_feedrate_code(self, p): return 'G01 F' + str(self.feedrate_format %(p.fr_decimals, p.z_feedrate)) - def spindle_code(self,p): + def spindle_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 dwell_code(self, p): if p.dwelltime: diff --git a/postprocessors/grbl_laser.py b/postprocessors/grbl_laser.py index 4895549f..66285191 100644 --- a/postprocessors/grbl_laser.py +++ b/postprocessors/grbl_laser.py @@ -90,7 +90,11 @@ class grbl_laser(FlatCAMPostProc): return 'G01 F' + str(self.feedrate_format %(p.fr_decimals, p.z_feedrate)) def spindle_code(self, p): - return '' + sdir = {'CW': 'M03', 'CCW': 'M04'}[p.spindledir] + if p.spindlespeed: + return '%s S%s' % (sdir, str(p.spindlespeed)) + else: + return sdir def dwell_code(self, p): return '' diff --git a/postprocessors/line_xyz.py b/postprocessors/line_xyz.py index adbd849f..b9c7aebd 100644 --- a/postprocessors/line_xyz.py +++ b/postprocessors/line_xyz.py @@ -193,10 +193,11 @@ M0""".format(x_toolchange=self.coordinate_format%(p.coords_decimals, x_toolchang return 'G01 F' + str(self.feedrate_format %(p.fr_decimals, p.z_feedrate)) def spindle_code(self, p): + sdir = {'CW': 'M03', 'CCW': 'M04'}[p.spindledir] if p.spindlespeed: - return 'M03 S' + str(p.spindlespeed) + return '%s S%s' % (sdir, str(p.spindlespeed)) else: - return 'M03' + return sdir def dwell_code(self, p): if p.dwelltime: diff --git a/postprocessors/marlin.py b/postprocessors/marlin.py index 72fe44c9..d0859faf 100644 --- a/postprocessors/marlin.py +++ b/postprocessors/marlin.py @@ -198,11 +198,12 @@ M0""".format(z_toolchange=self.coordinate_format%(p.coords_decimals, z_toolchang def feedrate_rapid_code(self, p): return 'F' + self.feedrate_rapid_format % (p.fr_decimals, p.feedrate_rapid) - def spindle_code(self,p): + def spindle_code(self, p): + sdir = {'CW': 'M3', 'CCW': 'M4'}[p.spindledir] if p.spindlespeed: - return 'M3 S%d' % p.spindlespeed + return '%s S%s' % (sdir, str(p.spindlespeed)) else: - return 'M3' + return sdir def dwell_code(self, p): if p.dwelltime: