- 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
This commit is contained in:
parent
a348bc8738
commit
91cad9c57d
|
@ -5734,7 +5734,8 @@ class App(QtCore.QObject):
|
||||||
for el in obj_active.mark_shapes:
|
for el in obj_active.mark_shapes:
|
||||||
obj_active.mark_shapes[el].clear(update=True)
|
obj_active.mark_shapes[el].clear(update=True)
|
||||||
obj_active.mark_shapes[el].enabled = False
|
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):
|
elif isinstance(obj_active, FlatCAMCNCjob):
|
||||||
try:
|
try:
|
||||||
obj_active.annotation.clear(update=True)
|
obj_active.annotation.clear(update=True)
|
||||||
|
@ -8557,12 +8558,14 @@ class App(QtCore.QObject):
|
||||||
_('Could not export Excellon file.'))
|
_('Could not export Excellon file.'))
|
||||||
return
|
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.
|
Exports a Gerber Object to an Gerber file.
|
||||||
|
|
||||||
:param obj_name: the name of the FlatCAM object to be saved as Gerber
|
: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 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
|
:param use_thread: if to be run in a separate thread
|
||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
|
@ -8573,11 +8576,14 @@ class App(QtCore.QObject):
|
||||||
|
|
||||||
self.log.debug("export_gerber()")
|
self.log.debug("export_gerber()")
|
||||||
|
|
||||||
try:
|
if local_use is None:
|
||||||
obj = self.collection.get_by_name(str(obj_name))
|
try:
|
||||||
except:
|
obj = self.collection.get_by_name(str(obj_name))
|
||||||
# TODO: The return behavior has not been established... should raise exception?
|
except:
|
||||||
return "Could not retrieve object: %s" % obj_name
|
# 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
|
# updated units
|
||||||
gunits = self.defaults["gerber_exp_units"]
|
gunits = self.defaults["gerber_exp_units"]
|
||||||
|
@ -8649,26 +8655,28 @@ class App(QtCore.QObject):
|
||||||
exported_gerber += gerber_code
|
exported_gerber += gerber_code
|
||||||
exported_gerber += footer
|
exported_gerber += footer
|
||||||
|
|
||||||
try:
|
if local_use is None:
|
||||||
with open(filename, 'w') as fp:
|
try:
|
||||||
fp.write(exported_gerber)
|
with open(filename, 'w') as fp:
|
||||||
except PermissionError:
|
fp.write(exported_gerber)
|
||||||
self.inform.emit('[WARNING] %s' %
|
except PermissionError:
|
||||||
_("Permission denied, saving not possible.\n"
|
self.inform.emit('[WARNING] %s' %
|
||||||
"Most likely another app is holding the file open and not accessible."))
|
_("Permission denied, saving not possible.\n"
|
||||||
return 'fail'
|
"Most likely another app is holding the file open and not accessible."))
|
||||||
|
return 'fail'
|
||||||
|
|
||||||
if self.defaults["global_open_style"] is False:
|
if self.defaults["global_open_style"] is False:
|
||||||
self.file_opened.emit("Gerber", filename)
|
self.file_opened.emit("Gerber", filename)
|
||||||
self.file_saved.emit("Gerber", filename)
|
self.file_saved.emit("Gerber", filename)
|
||||||
self.inform.emit('[success] %s: %s' %
|
self.inform.emit('[success] %s: %s' %
|
||||||
(_("Gerber file exported to"), filename))
|
(_("Gerber file exported to"), filename))
|
||||||
|
else:
|
||||||
|
return exported_gerber
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
log.debug("App.export_gerber.make_gerber() --> %s" % str(e))
|
log.debug("App.export_gerber.make_gerber() --> %s" % str(e))
|
||||||
return 'fail'
|
return 'fail'
|
||||||
|
|
||||||
if use_thread is True:
|
if use_thread is True:
|
||||||
|
|
||||||
with self.proc_container.new(_("Exporting Gerber")) as proc:
|
with self.proc_container.new(_("Exporting Gerber")) as proc:
|
||||||
|
|
||||||
def job_thread_grb(app_obj):
|
def job_thread_grb(app_obj):
|
||||||
|
@ -8684,7 +8692,9 @@ class App(QtCore.QObject):
|
||||||
if ret == 'fail':
|
if ret == 'fail':
|
||||||
self.inform.emit('[ERROR_NOTCL] %s' %
|
self.inform.emit('[ERROR_NOTCL] %s' %
|
||||||
_('Could not export Gerber file.'))
|
_('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):
|
def export_dxf(self, obj_name, filename, use_thread=True):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -1519,7 +1519,12 @@ class FlatCAMGerber(FlatCAMObj, Gerber):
|
||||||
|
|
||||||
def export_gerber(self, whole, fract, g_zeros='L', factor=1):
|
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
|
:return: Gerber_code
|
||||||
"""
|
"""
|
||||||
log.debug("FlatCAMGerber.export_gerber() --> Generating the Gerber code from the selected Gerber file")
|
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']:
|
for geo_elem in self.apertures[apid]['geometry']:
|
||||||
if 'follow' in geo_elem:
|
if 'follow' in geo_elem:
|
||||||
geo = geo_elem['follow']
|
geo = geo_elem['follow']
|
||||||
print(geo)
|
|
||||||
if not geo.is_empty:
|
if not geo.is_empty:
|
||||||
if isinstance(geo, Point):
|
if isinstance(geo, Point):
|
||||||
if g_zeros == 'T':
|
if g_zeros == 'T':
|
||||||
|
|
|
@ -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
|
10.09.2019
|
||||||
|
|
||||||
- made isolation threaded
|
- made isolation threaded
|
||||||
|
|
|
@ -3395,6 +3395,7 @@ class Gerber (Geometry):
|
||||||
log.warning("Union done.")
|
log.warning("Union done.")
|
||||||
|
|
||||||
if current_polarity == 'D':
|
if current_polarity == 'D':
|
||||||
|
self.app.inform.emit('%s' % _("Gerber processing. Applying Gerber polarity."))
|
||||||
try:
|
try:
|
||||||
self.solid_geometry = self.solid_geometry.union(new_poly)
|
self.solid_geometry = self.solid_geometry.union(new_poly)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|
|
@ -487,7 +487,7 @@ class Panelize(FlatCAMTool):
|
||||||
|
|
||||||
def panelize_2():
|
def panelize_2():
|
||||||
if panel_obj is not None:
|
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)
|
self.app.progress.emit(0)
|
||||||
|
|
||||||
|
@ -771,6 +771,12 @@ class Panelize(FlatCAMTool):
|
||||||
currentx += lenghtx
|
currentx += lenghtx
|
||||||
currenty += lenghty
|
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 ..." %
|
# app_obj.log.debug("Found %s geometries. Creating a panel geometry cascaded union ..." %
|
||||||
# len(obj_fin.solid_geometry))
|
# len(obj_fin.solid_geometry))
|
||||||
|
|
||||||
|
@ -778,6 +784,8 @@ class Panelize(FlatCAMTool):
|
||||||
# app_obj.log.debug("Finished creating a cascaded union for the panel.")
|
# app_obj.log.debug("Finished creating a cascaded union for the panel.")
|
||||||
self.app.proc_container.update_view_text('')
|
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):
|
if isinstance(panel_obj, FlatCAMExcellon):
|
||||||
self.app.progress.emit(50)
|
self.app.progress.emit(50)
|
||||||
self.app.new_object("excellon", self.outname, job_init_excellon, plot=True, autoselected=True)
|
self.app.new_object("excellon", self.outname, job_init_excellon, plot=True, autoselected=True)
|
||||||
|
|
Loading…
Reference in New Issue