- fixed the FlatCAMGerber.merge() function

- added a new menu entry for the Gerber Join function: Edit -> Conversions -> "Join Gerber(s) to Gerber" allowing joining Gerber objects into a final Gerber object
This commit is contained in:
Marius Stanciu
2019-01-28 02:01:53 +02:00
committed by Marius S
parent ad69be0456
commit 8145ff9aac
5 changed files with 47 additions and 8 deletions

View File

@@ -937,6 +937,8 @@ class App(QtCore.QObject):
self.ui.menuedit_convertjoin.triggered.connect(self.on_edit_join)
self.ui.menuedit_convertjoinexc.triggered.connect(self.on_edit_join_exc)
self.ui.menuedit_convertjoingrb.triggered.connect(self.on_edit_join_grb)
self.ui.menuedit_convert_sg2mg.triggered.connect(self.on_convert_singlegeo_to_multigeo)
self.ui.menuedit_convert_mg2sg.triggered.connect(self.on_convert_multigeo_to_singlegeo)
@@ -2485,6 +2487,25 @@ class App(QtCore.QObject):
self.new_object("excellon", 'Combo_Excellon', initialize)
def on_edit_join_grb(self):
"""
Callback for Edit->Join Gerber. Joins the selected Gerber objects into
a new one.
:return: None
"""
objs = self.collection.get_selected()
for obj in objs:
if not isinstance(obj, FlatCAMGerber):
self.inform.emit("[error_notcl]Failed. Gerber joining works only on Gerber objects.")
return
def initialize(obj, app):
FlatCAMGerber.merge(objs, obj)
self.new_object("gerber", 'Combo_Gerber', initialize)
def on_convert_singlegeo_to_multigeo(self):
obj = self.collection.get_active()

View File

@@ -159,7 +159,7 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
# Separator
self.menuedit.addSeparator()
self.menueditedit = self.menuedit.addAction(QtGui.QIcon('share/edit16.png'), 'Edit Object\tE')
self.menueditok = self.menuedit.addAction(QtGui.QIcon('share/edit_ok16.png'), '&Update Object\tCTRL+S')
self.menueditok = self.menuedit.addAction(QtGui.QIcon('share/edit_ok16.png'), 'Save && Close Editor\tCTRL+S')
# Separator
self.menuedit.addSeparator()
self.menuedit_convert = self.menuedit.addMenu(QtGui.QIcon('share/convert24.png'), 'Conversion')
@@ -175,6 +175,10 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
QtGui.QIcon('share/join16.png'), 'Join Excellon(s) -> Excellon')
self.menuedit_convertjoinexc.setToolTip(
"Merge a selection of Excellon objects into a new combo Excellon object.")
self.menuedit_convertjoingrb = self.menuedit_convert.addAction(
QtGui.QIcon('share/join16.png'), 'Join Gerber(s) -> Gerber')
self.menuedit_convertjoingrb.setToolTip(
"Merge a selection of Gerber objects into a new combo Gerber object.")
# Separator
self.menuedit_convert.addSeparator()
self.menuedit_convert_sg2mg = self.menuedit_convert.addAction(
@@ -372,7 +376,9 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
self.newexc_btn = self.toolbargeo.addAction(QtGui.QIcon('share/new_exc32.png'), "New Blank Excellon")
self.toolbargeo.addSeparator()
self.editgeo_btn = self.toolbargeo.addAction(QtGui.QIcon('share/edit32.png'), "Editor")
self.update_obj_btn = self.toolbargeo.addAction(QtGui.QIcon('share/edit_ok32_bis.png'), "Save Object")
self.update_obj_btn = self.toolbargeo.addAction(
QtGui.QIcon('share/edit_ok32_bis.png'), "Save Object and close the Editor"
)
self.update_obj_btn.setEnabled(False)
self.toolbargeo.addSeparator()
self.delete_btn = self.toolbargeo.addAction(QtGui.QIcon('share/cancel_edit32.png'), "&Delete")

View File

@@ -366,6 +366,7 @@ class FlatCAMGerber(FlatCAMObj, Gerber):
if grb_final.solid_geometry is None:
grb_final.solid_geometry = []
if type(grb_final.solid_geometry) is not list:
grb_final.solid_geometry = [grb_final.solid_geometry]
@@ -380,10 +381,11 @@ class FlatCAMGerber(FlatCAMObj, Gerber):
# Expand lists
if type(grb) is list:
FlatCAMGerber.merge(grb, grb_final)
else: # If not list, just append
for geos in grb.solid_geometry:
grb_final.solid_geometry.append(geos)
# If not list, just append
else:
grb_final.solid_geometry.append(grb.solid_geometry)
grb_final.solid_geometry = MultiPolygon(grb_final.solid_geometry)
def __init__(self, name):
Gerber.__init__(self, steps_per_circle=self.app.defaults["gerber_circle_steps"])

View File

@@ -9,6 +9,12 @@ CAD program, and create G-Code for Isolation routing.
=================================================
28.01.2018
- fixed the FlatCAMGerber.merge() function
- added a new menu entry for the Gerber Join function: Edit -> Conversions -> "Join Gerber(s) to Gerber" allowing joining Gerber objects into a final Gerber object
27.01.2018
- added more key shortcuts into the application; they are now displayed in the GUI menu's
@@ -20,7 +26,6 @@ CAD program, and create G-Code for Isolation routing.
- modified grbl_laser postprocessor file so it includes a Sxxxx command on the line with M02 (laser active) whenever a value is enter in the Spindlespeed entry field
- remade the EDIT -> PREFERENCES window, the Excellon and Gerber sections. Created a new section named TOOLS
26.01.2019
- fixed grbl_11 postprocessor in linear_code() function

View File

@@ -2965,7 +2965,7 @@ class Gerber (Geometry):
return 0, 0, 0, 0
def bounds_rec(obj):
if type(obj) is list:
if type(obj) is list and type(obj) is not MultiPolygon:
minx = Inf
miny = Inf
maxx = -Inf
@@ -2980,7 +2980,12 @@ class Gerber (Geometry):
maxx = max(maxx, maxx_)
maxy = max(maxy, maxy_)
else:
minx_, miny_, maxx_, maxy_ = bounds_rec(k)
try:
minx_, miny_, maxx_, maxy_ = bounds_rec(k)
except Exception as e:
log.debug("camlib.Geometry.bounds() --> %s" % str(e))
return
minx = min(minx, minx_)
miny = min(miny, miny_)
maxx = max(maxx, maxx_)