- 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_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_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_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_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, "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(buffering_label, 9, 0)
grid0.addWidget(self.buffering_radio, 9, 1) 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 # Simplification
self.simplify_cb = FCCheckBox(label=_('Simplify')) self.simplify_cb = FCCheckBox(label=_('Simplify'))
self.simplify_cb.setToolTip( self.simplify_cb.setToolTip(
@@ -83,7 +90,7 @@ class GerberAdvOptPrefGroupUI(OptionsGroupUI):
"loaded with simplification having a set tolerance.\n" "loaded with simplification having a set tolerance.\n"
"<<WARNING>>: Don't change this unless you know what you are doing !!!") "<<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 # Simplification tolerance
self.simplification_tol_label = QtWidgets.QLabel(_('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.setRange(0.00000, 0.01000)
self.simplification_tol_spinner.setSingleStep(0.0001) self.simplification_tol_spinner.setSingleStep(0.0001)
grid0.addWidget(self.simplification_tol_label, 11, 0) grid0.addWidget(self.simplification_tol_label, 12, 0)
grid0.addWidget(self.simplification_tol_spinner, 11, 1) grid0.addWidget(self.simplification_tol_spinner, 12, 1)
self.ois_simplif = OptionalInputSection( self.ois_simplif = OptionalInputSection(
self.simplify_cb, self.simplify_cb,
[ [
@@ -105,3 +112,12 @@ class GerberAdvOptPrefGroupUI(OptionsGroupUI):
logic=True) logic=True)
self.layout.addStretch() 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)) log.debug("%f seconds adding object and plotting." % (t1 - t0))
self.object_plotted.emit(t_obj) 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 # Send to worker
# self.worker.add_task(worker_task, [self]) # self.worker.add_task(worker_task, [self])
if plot is True: if plot is True:

View File

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

View File

@@ -1493,7 +1493,8 @@ class Gerber(Geometry):
if self.app.defaults["gerber_buffering"] == 'full': if self.app.defaults["gerber_buffering"] == 'full':
new_poly = new_poly.buffer(0.00000001) new_poly = new_poly.buffer(0.00000001)
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: else:
log.debug("Union by union()...") log.debug("Union by union()...")
new_poly = cascaded_union(poly_buffer) new_poly = cascaded_union(poly_buffer)
@@ -2260,7 +2261,7 @@ class Gerber(Geometry):
self.app.inform.emit('[success] %s' % _("Gerber Rotate done.")) self.app.inform.emit('[success] %s' % _("Gerber Rotate done."))
self.app.proc_container.new_text = '' 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 :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 - 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 - Transform Tool - compacted the UI
- minor issue in Paint Tool - 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 2.06.2020

View File

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

View File

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