phdussud 10 лет назад
Родитель
Сommit
bc524684ab
4 измененных файлов с 55 добавлено и 15 удалено
  1. 8 3
      FlatCAMApp.py
  2. 6 0
      FlatCAMGUI.py
  3. 33 12
      FlatCAMObj.py
  4. 8 0
      ObjectUI.py

+ 8 - 3
FlatCAMApp.py

@@ -181,6 +181,7 @@ class App(QtCore.QObject):
             "gerber_isotooldia": self.defaults_form.gerber_group.iso_tool_dia_entry,
             "gerber_isopasses": self.defaults_form.gerber_group.iso_width_entry,
             "gerber_isooverlap": self.defaults_form.gerber_group.iso_overlap_entry,
+            "gerber_combine_passes": self.defaults_form.gerber_group.combine_passes_cb,
             "gerber_cutouttooldia": self.defaults_form.gerber_group.cutout_tooldia_entry,
             "gerber_cutoutmargin": self.defaults_form.gerber_group.cutout_margin_entry,
             "gerber_cutoutgapsize": self.defaults_form.gerber_group.cutout_gap_entry,
@@ -296,6 +297,7 @@ class App(QtCore.QObject):
             "gerber_isotooldia": self.options_form.gerber_group.iso_tool_dia_entry,
             "gerber_isopasses": self.options_form.gerber_group.iso_width_entry,
             "gerber_isooverlap": self.options_form.gerber_group.iso_overlap_entry,
+            "gerber_combine_passes": self.options_form.gerber_group.combine_passes_cb,
             "gerber_cutouttooldia": self.options_form.gerber_group.cutout_tooldia_entry,
             "gerber_cutoutmargin": self.options_form.gerber_group.cutout_margin_entry,
             "gerber_cutoutgapsize": self.options_form.gerber_group.cutout_gap_entry,
@@ -332,6 +334,7 @@ class App(QtCore.QObject):
             "gerber_isotooldia": 0.016,
             "gerber_isopasses": 1,
             "gerber_isooverlap": 0.15,
+            "gerber_combine_passes": True,
             "gerber_cutouttooldia": 0.07,
             "gerber_cutoutmargin": 0.1,
             "gerber_cutoutgapsize": 0.15,
@@ -2098,7 +2101,8 @@ class App(QtCore.QObject):
             types = {'dia': float,
                      'passes': int,
                      'overlap': float,
-                     'outname': str}
+                     'outname': str, 
+                     'combine': int}
 
             for key in kwa:
                 if key not in types:
@@ -2394,10 +2398,11 @@ class App(QtCore.QObject):
             'isolate': {
                 'fcn': isolate,
                 'help': "Creates isolation routing geometry for the given Gerber.\n" +
-                        "> isolate <name> [-dia <d>] [-passes <p>] [-overlap <o>]\n" +
+                        "> isolate <name> [-dia <d>] [-passes <p>] [-overlap <o>] [-combine 0|1]\n" +
                         "   name: Name of the object\n"
                         "   dia: Tool diameter\n   passes: # of tool width\n" +
-                        "   overlap: Fraction of tool diameter to overlap passes"
+                        "   overlap: Fraction of tool diameter to overlap passes" +
+                        "   combine: combine all passes into one geometry"
             },
             'cutout': {
                 'fcn': cutout,

+ 6 - 0
FlatCAMGUI.py

@@ -405,6 +405,12 @@ class GerberOptionsGroupUI(OptionsGroupUI):
         grid1.addWidget(overlabel, 2, 0)
         self.iso_overlap_entry = FloatEntry()
         grid1.addWidget(self.iso_overlap_entry, 2, 1)
+        
+        self.combine_passes_cb = FCCheckBox(label='Combine Passes')
+        self.combine_passes_cb.setToolTip(
+            "Combine all passes into one object"
+        )
+        grid1.addWidget(self.combine_passes_cb, 3, 0)
 
         ## Board cuttout
         self.board_cutout_label = QtGui.QLabel("<b>Board cutout:</b>")

+ 33 - 12
FlatCAMObj.py

@@ -262,6 +262,7 @@ class FlatCAMGerber(FlatCAMObj, Gerber):
             "isotooldia": 0.016,
             "isopasses": 1,
             "isooverlap": 0.15,
+            "combine_passes": True,
             "cutouttooldia": 0.07,
             "cutoutmargin": 0.2,
             "cutoutgapsize": 0.15,
@@ -298,6 +299,7 @@ class FlatCAMGerber(FlatCAMObj, Gerber):
             "isotooldia": self.ui.iso_tool_dia_entry,
             "isopasses": self.ui.iso_width_entry,
             "isooverlap": self.ui.iso_overlap_entry,
+            "combine_passes":self.ui.combine_passes_cb,
             "cutouttooldia": self.ui.cutout_tooldia_entry,
             "cutoutmargin": self.ui.cutout_margin_entry,
             "cutoutgapsize": self.ui.cutout_gap_entry,
@@ -415,7 +417,7 @@ class FlatCAMGerber(FlatCAMObj, Gerber):
         # TODO: Do something if this is None. Offer changing name?
         self.app.new_object("geometry", follow_name, follow_init)
 
-    def isolate(self, dia=None, passes=None, overlap=None, outname=None):
+    def isolate(self, dia=None, passes=None, overlap=None, outname=None, combine=None):
         """
         Creates an isolation routing geometry object in the project.
 
@@ -425,36 +427,55 @@ class FlatCAMGerber(FlatCAMObj, Gerber):
         :param outname: Base name of the output object
         :return: None
         """
-
         if dia is None:
             dia = self.options["isotooldia"]
         if passes is None:
             passes = int(self.options["isopasses"])
         if overlap is None:
-            overlap = self.options["isooverlap"] * dia
+            overlap = self.options["isooverlap"]
+        if combine is None:
+            combine = self.options["combine_passes"]
+        else:
+            combine = bool(combine)
 
         base_name = self.options["name"] + "_iso"
         base_name = outname or base_name
 
-        for i in range(passes):
-
-            offset = (2 * i + 1) / 2.0 * dia - i * overlap
-            if passes > 1:
-                iso_name = base_name + str(i + 1)
-            else:
-                iso_name = base_name
+        if (combine):
+            iso_name = base_name
 
             # TODO: This is ugly. Create way to pass data into init function.
             def iso_init(geo_obj, app_obj):
                 # Propagate options
                 geo_obj.options["cnctooldia"] = self.options["isotooldia"]
-
-                geo_obj.solid_geometry = self.isolation_geometry(offset)
+                geo_obj.solid_geometry = []
+                for i in range(passes):
+                    offset = (2 * i + 1) / 2.0 * dia - i * overlap * dia
+                    geo_obj.solid_geometry.append(self.isolation_geometry(offset))
                 app_obj.info("Isolation geometry created: %s" % geo_obj.options["name"])
 
             # TODO: Do something if this is None. Offer changing name?
             self.app.new_object("geometry", iso_name, iso_init)
 
+        else:
+            for i in range(passes):
+
+                offset = (2 * i + 1) / 2.0 * dia - i * overlap  * dia
+                if passes > 1:
+                    iso_name = base_name + str(i + 1)
+                else:
+                    iso_name = base_name
+
+                # TODO: This is ugly. Create way to pass data into init function.
+                def iso_init(geo_obj, app_obj):
+                    # Propagate options
+                    geo_obj.options["cnctooldia"] = self.options["isotooldia"]
+                    geo_obj.solid_geometry = self.isolation_geometry(offset)
+                    app_obj.info("Isolation geometry created: %s" % geo_obj.options["name"])
+
+                # TODO: Do something if this is None. Offer changing name?
+                self.app.new_object("geometry", iso_name, iso_init)
+
     def on_plot_cb_click(self, *args):
         if self.muted_ui:
             return

+ 8 - 0
ObjectUI.py

@@ -560,6 +560,14 @@ class GerberObjectUI(ObjectUI):
         self.iso_overlap_entry = FloatEntry()
         grid1.addWidget(self.iso_overlap_entry, 2, 1)
 
+        # combine all passes CB
+        self.combine_passes_cb = FCCheckBox(label='Combine Passes')
+        self.combine_passes_cb.setToolTip(
+            "Combine all passes into one object"
+        )
+        grid1.addWidget(self.combine_passes_cb, 3, 0)
+
+
         self.generate_iso_button = QtGui.QPushButton('Generate Geometry')
         self.generate_iso_button.setToolTip(
             "Create the Geometry Object\n"