ソースを参照

Spindle speed for G-code from geometry and excellon. Solves #124.

Juan Pablo Caram 10 年 前
コミット
f503dabc7e
5 ファイル変更49 行追加19 行削除
  1. 9 2
      FlatCAMApp.py
  2. 2 2
      FlatCAMGUI.py
  3. 18 10
      FlatCAMObj.py
  4. 15 2
      GUIElements.py
  5. 5 3
      ObjectUI.py

+ 9 - 2
FlatCAMApp.py

@@ -195,12 +195,14 @@ class App(QtCore.QObject):
             "excellon_drillz": self.defaults_form.excellon_group.cutz_entry,
             "excellon_travelz": self.defaults_form.excellon_group.travelz_entry,
             "excellon_feedrate": self.defaults_form.excellon_group.feedrate_entry,
+            "excellon_spindlespeed": self.defaults_form.excellon_group.spindlespeed_entry,
             "geometry_plot": self.defaults_form.geometry_group.plot_cb,
             "geometry_cutz": self.defaults_form.geometry_group.cutz_entry,
             "geometry_travelz": self.defaults_form.geometry_group.travelz_entry,
             "geometry_feedrate": self.defaults_form.geometry_group.cncfeedrate_entry,
             "geometry_cnctooldia": self.defaults_form.geometry_group.cnctooldia_entry,
             "geometry_painttooldia": self.defaults_form.geometry_group.painttooldia_entry,
+            "geometry_spindlespeed": self.defaults_form.geometry_group.cncspindlespeed_entry,
             "geometry_paintoverlap": self.defaults_form.geometry_group.paintoverlap_entry,
             "geometry_paintmargin": self.defaults_form.geometry_group.paintmargin_entry,
             "cncjob_plot": self.defaults_form.cncjob_group.plot_cb,
@@ -234,11 +236,13 @@ class App(QtCore.QObject):
             "excellon_drillz": -0.1,
             "excellon_travelz": 0.1,
             "excellon_feedrate": 3.0,
+            "excellon_spindlespeed": None,
             "geometry_plot": True,
             "geometry_cutz": -0.002,
             "geometry_travelz": 0.1,
             "geometry_feedrate": 3.0,
             "geometry_cnctooldia": 0.016,
+            "geometry_spindlespeed": None,
             "geometry_painttooldia": 0.07,
             "geometry_paintoverlap": 0.15,
             "geometry_paintmargin": 0.0,
@@ -268,8 +272,7 @@ class App(QtCore.QObject):
             "zdownrate": None,
             "excellon_zeros": "L",
             "gerber_use_buffer_for_union": True,
-            "cncjob_coordinate_format": "X%.4fY%.4f",
-            "spindlespeed": None
+            "cncjob_coordinate_format": "X%.4fY%.4f"
         })
 
         ###############################
@@ -315,10 +318,12 @@ class App(QtCore.QObject):
             "excellon_drillz": self.options_form.excellon_group.cutz_entry,
             "excellon_travelz": self.options_form.excellon_group.travelz_entry,
             "excellon_feedrate": self.options_form.excellon_group.feedrate_entry,
+            "excellon_spindlespeed": self.options_form.excellon_group.spindlespeed_entry,
             "geometry_plot": self.options_form.geometry_group.plot_cb,
             "geometry_cutz": self.options_form.geometry_group.cutz_entry,
             "geometry_travelz": self.options_form.geometry_group.travelz_entry,
             "geometry_feedrate": self.options_form.geometry_group.cncfeedrate_entry,
+            "geometry_spindlespeed": self.options_form.geometry_group.cncspindlespeed_entry,
             "geometry_cnctooldia": self.options_form.geometry_group.cnctooldia_entry,
             "geometry_painttooldia": self.options_form.geometry_group.painttooldia_entry,
             "geometry_paintoverlap": self.options_form.geometry_group.paintoverlap_entry,
@@ -353,10 +358,12 @@ class App(QtCore.QObject):
             "excellon_drillz": -0.1,
             "excellon_travelz": 0.1,
             "excellon_feedrate": 3.0,
+            "excellon_spindlespeed": None,
             "geometry_plot": True,
             "geometry_cutz": -0.002,
             "geometry_travelz": 0.1,
             "geometry_feedrate": 3.0,
+            "geometry_spindlespeed": None,
             "geometry_cnctooldia": 0.016,
             "geometry_painttooldia": 0.07,
             "geometry_paintoverlap": 0.15,

+ 2 - 2
FlatCAMGUI.py

@@ -586,7 +586,7 @@ class ExcellonOptionsGroupUI(OptionsGroupUI):
             "in RPM (optional)"
         )
         grid1.addWidget(spdlabel, 3, 0)
-        self.spindlespeed_entry = LengthEntry()
+        self.spindlespeed_entry = IntEntry(allow_empty=True)
         grid1.addWidget(self.spindlespeed_entry, 3, 1)
 
 
@@ -662,7 +662,7 @@ class GeometryOptionsGroupUI(OptionsGroupUI):
             "in RPM (optional)"
         )
         grid1.addWidget(spdlabel, 4, 0)
-        self.cncspindlespeed_entry = LengthEntry()
+        self.cncspindlespeed_entry = IntEntry(allow_empty=True)
         grid1.addWidget(self.cncspindlespeed_entry, 4, 1)
 
         ## Paint area

+ 18 - 10
FlatCAMObj.py

@@ -609,7 +609,7 @@ class FlatCAMExcellon(FlatCAMObj, Excellon):
             "tooldia": 0.1,
             "toolchange": False,
             "toolchangez": 1.0,
-            "spindlespeed": ""
+            "spindlespeed": None
         })
 
         # TODO: Document this.
@@ -834,12 +834,14 @@ class FlatCAMCNCjob(FlatCAMObj, CNCjob):
     ui_type = CNCObjectUI
 
     def __init__(self, name, units="in", kind="generic", z_move=0.1,
-                 feedrate=3.0, z_cut=-0.002, tooldia=0.0,spindlespeed=None):
+                 feedrate=3.0, z_cut=-0.002, tooldia=0.0,
+                 spindlespeed=None):
 
         FlatCAMApp.App.log.debug("Creating CNCJob object...")
 
         CNCjob.__init__(self, units=units, kind=kind, z_move=z_move,
-                        feedrate=feedrate, z_cut=z_cut, tooldia=tooldia, spindlespeed=spindlespeed)
+                        feedrate=feedrate, z_cut=z_cut, tooldia=tooldia,
+                        spindlespeed=spindlespeed)
 
         FlatCAMObj.__init__(self, name)
 
@@ -980,7 +982,7 @@ class FlatCAMGeometry(FlatCAMObj, Geometry):
             "cutz": -0.002,
             "travelz": 0.1,
             "feedrate": 5.0,
-            "spindlespeed": "",
+            "spindlespeed": None,
             "cnctooldia": 0.4 / 25.4,
             "painttooldia": 0.0625,
             "paintoverlap": 0.15,
@@ -1095,7 +1097,8 @@ class FlatCAMGeometry(FlatCAMObj, Geometry):
         self.generatecncjob()
 
     def generatecncjob(self, z_cut=None, z_move=None,
-                       feedrate=None, tooldia=None, outname=None, spindlespeed=None):
+                       feedrate=None, tooldia=None, outname=None,
+                       spindlespeed=None):
         """
         Creates a CNCJob out of this Geometry object.
 
@@ -1115,11 +1118,16 @@ class FlatCAMGeometry(FlatCAMObj, Geometry):
         tooldia = tooldia if tooldia is not None else self.options["cnctooldia"]
 
         # To allow default value to be "" (optional in gui) and translate to None
-        if not isinstance(spindlespeed, int):
-            if isinstance(self.options["spindlespeed"], int):
-                spindlespeed = self.options["spindlespeed"]
-            else:
-                spindlespeed = None
+        # if not isinstance(spindlespeed, int):
+        #     if isinstance(self.options["spindlespeed"], int) or \
+        #             isinstance(self.options["spindlespeed"], float):
+        #         spindlespeed = int(self.options["spindlespeed"])
+        #     else:
+        #         spindlespeed = None
+
+        if spindlespeed is None:
+            # int or None.
+            spindlespeed = self.options['spindlespeed']
 
         # Object initialization function for app.new_object()
         # RUNNING ON SEPARATE THREAD!

+ 15 - 2
GUIElements.py

@@ -121,17 +121,30 @@ class FloatEntry(QtGui.QLineEdit):
         return float(evaled)
 
     def set_value(self, val):
-        self.setText("%.6f"%val)
+        self.setText("%.6f" % val)
 
 
 class IntEntry(QtGui.QLineEdit):
-    def __init__(self, parent=None):
+
+    def __init__(self, parent=None, allow_empty=False, empty_val=None):
         super(IntEntry, self).__init__(parent)
+        self.allow_empty = allow_empty
+        self.empty_val = empty_val
 
     def get_value(self):
+
+        if self.allow_empty:
+            if str(self.text()) == "":
+                return self.empty_val
+
         return int(self.text())
 
     def set_value(self, val):
+
+        if val == self.empty_val and self.allow_empty:
+            self.setText(QtCore.QString(""))
+            return
+
         self.setText(QtCore.QString(str(val)))
 
 

+ 5 - 3
ObjectUI.py

@@ -278,7 +278,7 @@ class GeometryObjectUI(ObjectUI):
             "in RPM (optional)"
         )
         grid1.addWidget(spdlabel, 4, 0)
-        self.cncspindlespeed_entry = LengthEntry()
+        self.cncspindlespeed_entry = IntEntry(allow_empty=True)
         grid1.addWidget(self.cncspindlespeed_entry, 4, 1)
 
         self.generate_cnc_button = QtGui.QPushButton('Generate')
@@ -365,7 +365,9 @@ class ExcellonObjectUI(ObjectUI):
     """
 
     def __init__(self, parent=None):
-        ObjectUI.__init__(self, title='Excellon Object', icon_file='share/drill32.png', parent=parent)
+        ObjectUI.__init__(self, title='Excellon Object',
+                          icon_file='share/drill32.png',
+                          parent=parent)
 
         #### Plot options ####
 
@@ -463,7 +465,7 @@ class ExcellonObjectUI(ObjectUI):
             "in RPM (optional)"
         )
         grid1.addWidget(spdlabel, 5, 0)
-        self.spindlespeed_entry = LengthEntry()
+        self.spindlespeed_entry = IntEntry(allow_empty=True)
         grid1.addWidget(self.spindlespeed_entry, 5, 1)
 
         choose_tools_label = QtGui.QLabel(