- 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.

This commit is contained in:
Marius Stanciu 2020-06-03 04:02:04 +03:00 committed by Marius
parent c5c11efeed
commit 89d2de48da
8 changed files with 34 additions and 7 deletions

View File

@ -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,

View File

@ -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)

View File

@ -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:

View File

@ -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()

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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,