- 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:
@@ -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,
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
@@ -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:
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user