Bladeren bron

- added a new feature for Gerber parsing: if the NO buffering is chosen in the Gerber Advanced Preferences there is now a checkbox to activate delayed buffering which will do the buffering in background allowing the user to work in between. I hope that this can be useful in case of large Gerber files.

Marius Stanciu 5 jaren geleden
bovenliggende
commit
89d2de48da

+ 1 - 0
AppGUI/preferences/PreferencesUIManager.py

@@ -138,6 +138,7 @@ class PreferencesUIManager:
             # "gerber_aperture_buffer_factor": self.ui.gerber_defaults_form.gerber_adv_opt_group.buffer_aperture_entry,
             "gerber_follow": self.ui.gerber_defaults_form.gerber_adv_opt_group.follow_cb,
             "gerber_buffering": self.ui.gerber_defaults_form.gerber_adv_opt_group.buffering_radio,
+            "gerber_delayed_buffering": self.ui.gerber_defaults_form.gerber_adv_opt_group.delayed_buffer_cb,
             "gerber_simplification": self.ui.gerber_defaults_form.gerber_adv_opt_group.simplify_cb,
             "gerber_simp_tolerance": self.ui.gerber_defaults_form.gerber_adv_opt_group.simplification_tol_spinner,
 

+ 19 - 3
AppGUI/preferences/gerber/GerberAdvOptPrefGroupUI.py

@@ -76,6 +76,13 @@ class GerberAdvOptPrefGroupUI(OptionsGroupUI):
         grid0.addWidget(buffering_label, 9, 0)
         grid0.addWidget(self.buffering_radio, 9, 1)
 
+        # Delayed Buffering
+        self.delayed_buffer_cb = FCCheckBox(label=_('Delayed Buffering'))
+        self.delayed_buffer_cb.setToolTip(
+            _("When checked it will do the buffering in background.")
+        )
+        grid0.addWidget(self.delayed_buffer_cb, 10, 0, 1, 2)
+
         # Simplification
         self.simplify_cb = FCCheckBox(label=_('Simplify'))
         self.simplify_cb.setToolTip(
@@ -83,7 +90,7 @@ class GerberAdvOptPrefGroupUI(OptionsGroupUI):
               "loaded with simplification having a set tolerance.\n"
               "<<WARNING>>: Don't change this unless you know what you are doing !!!")
                                     )
-        grid0.addWidget(self.simplify_cb, 10, 0, 1, 2)
+        grid0.addWidget(self.simplify_cb, 11, 0, 1, 2)
 
         # Simplification tolerance
         self.simplification_tol_label = QtWidgets.QLabel(_('Tolerance'))
@@ -95,8 +102,8 @@ class GerberAdvOptPrefGroupUI(OptionsGroupUI):
         self.simplification_tol_spinner.setRange(0.00000, 0.01000)
         self.simplification_tol_spinner.setSingleStep(0.0001)
 
-        grid0.addWidget(self.simplification_tol_label, 11, 0)
-        grid0.addWidget(self.simplification_tol_spinner, 11, 1)
+        grid0.addWidget(self.simplification_tol_label, 12, 0)
+        grid0.addWidget(self.simplification_tol_spinner, 12, 1)
         self.ois_simplif = OptionalInputSection(
             self.simplify_cb,
             [
@@ -105,3 +112,12 @@ class GerberAdvOptPrefGroupUI(OptionsGroupUI):
             logic=True)
 
         self.layout.addStretch()
+
+        # signals
+        self.buffering_radio.activated_custom.connect(self.on_buffering_change)
+
+    def on_buffering_change(self, val):
+        if val == 'no':
+            self.delayed_buffer_cb.setDisabled(False)
+        else:
+            self.delayed_buffer_cb.setDisabled(True)

+ 4 - 0
AppObjects/AppObject.py

@@ -356,6 +356,10 @@ class AppObject(QtCore.QObject):
                 log.debug("%f seconds adding object and plotting." % (t1 - t0))
                 self.object_plotted.emit(t_obj)
 
+                if t_obj.kind == 'gerber' and self.app.defaults["gerber_delayed_buffering"] != 'full' and \
+                        self.app.defaults["gerber_delayed_buffering"]:
+                    t_obj.do_buffer_signal.emit()
+
         # Send to worker
         # self.worker.add_task(worker_task, [self])
         if plot is True:

+ 5 - 1
AppObjects/FlatCAMGerber.py

@@ -37,6 +37,8 @@ class GerberObject(FlatCAMObj, Gerber):
     optionChanged = QtCore.pyqtSignal(str)
     replotApertures = QtCore.pyqtSignal()
 
+    do_buffer_signal = QtCore.pyqtSignal()
+
     ui_type = GerberObjectUI
 
     @staticmethod
@@ -214,6 +216,8 @@ class GerberObject(FlatCAMObj, Gerber):
         self.ui.aperture_table_visibility_cb.stateChanged.connect(self.on_aperture_table_visibility_change)
         self.ui.follow_cb.stateChanged.connect(self.on_follow_cb_click)
 
+        self.do_buffer_signal.connect(self.on_generate_buffer)
+
         # Show/Hide Advanced Options
         if self.app.defaults["global_app_level"] == 'b':
             self.ui.level.setText('<span style="color:green;"><b>%s</b></span>' % _('Basic'))
@@ -1490,7 +1494,7 @@ class GerberObject(FlatCAMObj, Gerber):
         Gerber.skew(self, angle_x=angle_x, angle_y=angle_y, point=point)
         self.replotApertures.emit()
 
-    def buffer(self, distance, join, factor=None):
+    def buffer(self, distance, join=2, factor=None):
         Gerber.buffer(self, distance=distance, join=join, factor=factor)
         self.replotApertures.emit()
 

+ 3 - 2
AppParsers/ParseGerber.py

@@ -1493,7 +1493,8 @@ class Gerber(Geometry):
                 if self.app.defaults["gerber_buffering"] == 'full':
                     new_poly = new_poly.buffer(0.00000001)
                     new_poly = new_poly.buffer(-0.00000001)
-                log.warning("Union(buffer) done.")
+                    log.warning("Union(buffer) done.")
+
             else:
                 log.debug("Union by union()...")
                 new_poly = cascaded_union(poly_buffer)
@@ -2260,7 +2261,7 @@ class Gerber(Geometry):
         self.app.inform.emit('[success] %s' % _("Gerber Rotate done."))
         self.app.proc_container.new_text = ''
 
-    def buffer(self, distance, join, factor=None):
+    def buffer(self, distance, join=2, factor=None):
         """
 
         :param distance:    If 'factor' is True then distance is the factor

+ 1 - 0
CHANGELOG.md

@@ -12,6 +12,7 @@ CHANGELOG for FlatCAM beta
 - updated Transform Tool to have a selection of possible references for the transformations that are now selectable in the GUI
 - Transform Tool - compacted the UI
 - minor issue in Paint Tool
+- added a new feature for Gerber parsing: if the NO buffering is chosen in the Gerber Advanced Preferences there is now a checkbox to activate delayed buffering which will do the buffering in background allowing the user to work in between. I hope that this can be useful in case of large Gerber files.
 
 2.06.2020
 

+ 0 - 1
camlib.py

@@ -10,7 +10,6 @@
 from PyQt5 import QtWidgets, QtCore
 from io import StringIO
 
-import numpy as np
 from numpy.linalg import solve, norm
 
 import platform

+ 1 - 0
defaults.py

@@ -183,6 +183,7 @@ class FlatCAMDefaults:
         "gerber_aperture_buffer_factor": 0.0,
         "gerber_follow": False,
         "gerber_buffering": "full",
+        "gerber_delayed_buffering": True,
         "gerber_simplification": False,
         "gerber_simp_tolerance": 0.0005,