From 91cad9c57d5af96eb29574bd71667627e91df2eb Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Wed, 11 Sep 2019 04:54:30 +0300 Subject: [PATCH] - added the Gerber code as source for the panelized object in Panelize Tool - whenever a Gerber file is deleted, the mark_shapes objects are deleted also --- FlatCAMApp.py | 54 +++++++++++++++++++++--------------- FlatCAMObj.py | 6 +++- README.md | 5 ++++ camlib.py | 1 + flatcamTools/ToolPanelize.py | 10 ++++++- 5 files changed, 52 insertions(+), 24 deletions(-) diff --git a/FlatCAMApp.py b/FlatCAMApp.py index 11eab696..e567960b 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -5734,7 +5734,8 @@ class App(QtCore.QObject): for el in obj_active.mark_shapes: obj_active.mark_shapes[el].clear(update=True) obj_active.mark_shapes[el].enabled = False - obj_active.mark_shapes[el] = None + # obj_active.mark_shapes[el] = None + del el elif isinstance(obj_active, FlatCAMCNCjob): try: obj_active.annotation.clear(update=True) @@ -8557,12 +8558,14 @@ class App(QtCore.QObject): _('Could not export Excellon file.')) return - def export_gerber(self, obj_name, filename, use_thread=True): + def export_gerber(self, obj_name, filename, local_use=None, use_thread=True): """ Exports a Gerber Object to an Gerber file. :param obj_name: the name of the FlatCAM object to be saved as Gerber :param filename: Path to the Gerber file to save to. + :param local_use: if the Gerber code is to be saved to a file (None) or used within FlatCAM. + When not None, the value will be the actual Gerber object for which to create the Gerber code :param use_thread: if to be run in a separate thread :return: """ @@ -8573,11 +8576,14 @@ class App(QtCore.QObject): self.log.debug("export_gerber()") - try: - obj = self.collection.get_by_name(str(obj_name)) - except: - # TODO: The return behavior has not been established... should raise exception? - return "Could not retrieve object: %s" % obj_name + if local_use is None: + try: + obj = self.collection.get_by_name(str(obj_name)) + except: + # TODO: The return behavior has not been established... should raise exception? + return "Could not retrieve object: %s" % obj_name + else: + obj = local_use # updated units gunits = self.defaults["gerber_exp_units"] @@ -8649,26 +8655,28 @@ class App(QtCore.QObject): exported_gerber += gerber_code exported_gerber += footer - try: - with open(filename, 'w') as fp: - fp.write(exported_gerber) - except PermissionError: - self.inform.emit('[WARNING] %s' % - _("Permission denied, saving not possible.\n" - "Most likely another app is holding the file open and not accessible.")) - return 'fail' + if local_use is None: + try: + with open(filename, 'w') as fp: + fp.write(exported_gerber) + except PermissionError: + self.inform.emit('[WARNING] %s' % + _("Permission denied, saving not possible.\n" + "Most likely another app is holding the file open and not accessible.")) + return 'fail' - if self.defaults["global_open_style"] is False: - self.file_opened.emit("Gerber", filename) - self.file_saved.emit("Gerber", filename) - self.inform.emit('[success] %s: %s' % - (_("Gerber file exported to"), filename)) + if self.defaults["global_open_style"] is False: + self.file_opened.emit("Gerber", filename) + self.file_saved.emit("Gerber", filename) + self.inform.emit('[success] %s: %s' % + (_("Gerber file exported to"), filename)) + else: + return exported_gerber except Exception as e: log.debug("App.export_gerber.make_gerber() --> %s" % str(e)) return 'fail' if use_thread is True: - with self.proc_container.new(_("Exporting Gerber")) as proc: def job_thread_grb(app_obj): @@ -8684,7 +8692,9 @@ class App(QtCore.QObject): if ret == 'fail': self.inform.emit('[ERROR_NOTCL] %s' % _('Could not export Gerber file.')) - return + return 'fail' + if local_use is not None: + return ret def export_dxf(self, obj_name, filename, use_thread=True): """ diff --git a/FlatCAMObj.py b/FlatCAMObj.py index d1caf441..b510d1e8 100644 --- a/FlatCAMObj.py +++ b/FlatCAMObj.py @@ -1519,7 +1519,12 @@ class FlatCAMGerber(FlatCAMObj, Gerber): def export_gerber(self, whole, fract, g_zeros='L', factor=1): """ + Creates a Gerber file content to be exported to a file. + :param whole: how many digits in the whole part of coordinates + :param fract: how many decimals in coordinates + :param g_zeros: type of the zero suppression used: LZ or TZ; string + :param factor: factor to be applied onto the Gerber coordinates :return: Gerber_code """ log.debug("FlatCAMGerber.export_gerber() --> Generating the Gerber code from the selected Gerber file") @@ -1670,7 +1675,6 @@ class FlatCAMGerber(FlatCAMObj, Gerber): for geo_elem in self.apertures[apid]['geometry']: if 'follow' in geo_elem: geo = geo_elem['follow'] - print(geo) if not geo.is_empty: if isinstance(geo, Point): if g_zeros == 'T': diff --git a/README.md b/README.md index 33aac430..9717fa8a 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,11 @@ CAD program, and create G-Code for Isolation routing. ================================================= +11.09.2019 + +- added the Gerber code as source for the panelized object in Panelize Tool +- whenever a Gerber file is deleted, the mark_shapes objects are deleted also + 10.09.2019 - made isolation threaded diff --git a/camlib.py b/camlib.py index 4a072131..625167b2 100644 --- a/camlib.py +++ b/camlib.py @@ -3395,6 +3395,7 @@ class Gerber (Geometry): log.warning("Union done.") if current_polarity == 'D': + self.app.inform.emit('%s' % _("Gerber processing. Applying Gerber polarity.")) try: self.solid_geometry = self.solid_geometry.union(new_poly) except Exception as e: diff --git a/flatcamTools/ToolPanelize.py b/flatcamTools/ToolPanelize.py index b0f619c8..f241d6ad 100644 --- a/flatcamTools/ToolPanelize.py +++ b/flatcamTools/ToolPanelize.py @@ -487,7 +487,7 @@ class Panelize(FlatCAMTool): def panelize_2(): if panel_obj is not None: - self.app.inform.emit(_("Generating panel ... Please wait.")) + self.app.inform.emit(_("Generating panel ... ")) self.app.progress.emit(0) @@ -771,6 +771,12 @@ class Panelize(FlatCAMTool): currentx += lenghtx currenty += lenghty + if panel_type == 'gerber': + self.app.inform.emit('%s %s' % + (_("Generating panel ..."), _("Adding the Gerber code."))) + obj_fin.source_file = self.app.export_gerber(obj_name=self.outname, filename=None, + local_use=obj_fin, use_thread=False) + # app_obj.log.debug("Found %s geometries. Creating a panel geometry cascaded union ..." % # len(obj_fin.solid_geometry)) @@ -778,6 +784,8 @@ class Panelize(FlatCAMTool): # app_obj.log.debug("Finished creating a cascaded union for the panel.") self.app.proc_container.update_view_text('') + self.app.inform.emit('%s %s: %d' % + (_("Generating panel ..."), _("Spawning copies"), (int(rows * columns)))) if isinstance(panel_obj, FlatCAMExcellon): self.app.progress.emit(50) self.app.new_object("excellon", self.outname, job_init_excellon, plot=True, autoselected=True)