- fixed a small issue in the Panelization Tool that blocked the usage of a Geometry object as panelization reference

This commit is contained in:
Marius Stanciu 2020-06-05 03:37:01 +03:00 committed by Marius
parent 835cba0efd
commit bfdaa73798
3 changed files with 36 additions and 37 deletions

View File

@ -7,6 +7,10 @@ CHANGELOG for FlatCAM beta
================================================= =================================================
5.06.2020
- fixed a small issue in the Panelization Tool that blocked the usage of a Geometry object as panelization reference
4.06.2020 4.06.2020
- improved the Isolation Tool - rest machining: test if the isolated polygon has interiors (holes) and if those can't be isolated too then mark the polygon as a rest geometry to be isolated with the next tool and so on - improved the Isolation Tool - rest machining: test if the isolated polygon has interiors (holes) and if those can't be isolated too then mark the polygon as a rest geometry to be isolated with the next tool and so on

View File

@ -396,6 +396,7 @@ class Panelize(AppTool):
def on_type_box_index_changed(self): def on_type_box_index_changed(self):
obj_type = self.type_box_combo.currentIndex() obj_type = self.type_box_combo.currentIndex()
obj_type = 2 if obj_type == 1 else obj_type
self.box_combo.setRootModelIndex(self.app.collection.index(obj_type, 0, QtCore.QModelIndex())) self.box_combo.setRootModelIndex(self.app.collection.index(obj_type, 0, QtCore.QModelIndex()))
self.box_combo.setCurrentIndex(0) self.box_combo.setCurrentIndex(0)
self.box_combo.obj_type = { self.box_combo.obj_type = {
@ -421,12 +422,12 @@ class Panelize(AppTool):
except Exception as e: except Exception as e:
log.debug("Panelize.on_panelize() --> %s" % str(e)) log.debug("Panelize.on_panelize() --> %s" % str(e))
self.app.inform.emit('[ERROR_NOTCL] %s: %s' % (_("Could not retrieve object"), name)) self.app.inform.emit('[ERROR_NOTCL] %s: %s' % (_("Could not retrieve object"), name))
return "Could not retrieve object: %s" % name return
if panel_source_obj is None: if panel_source_obj is None:
self.app.inform.emit('[ERROR_NOTCL] %s: %s' % self.app.inform.emit('[ERROR_NOTCL] %s: %s' %
(_("Object not found"), panel_source_obj)) (_("Object not found"), panel_source_obj))
return "Object not found: %s" % panel_source_obj return
boxname = self.box_combo.currentText() boxname = self.box_combo.currentText()
@ -435,7 +436,7 @@ class Panelize(AppTool):
except Exception as e: except Exception as e:
log.debug("Panelize.on_panelize() --> %s" % str(e)) log.debug("Panelize.on_panelize() --> %s" % str(e))
self.app.inform.emit('[ERROR_NOTCL] %s: %s' % (_("Could not retrieve object"), boxname)) self.app.inform.emit('[ERROR_NOTCL] %s: %s' % (_("Could not retrieve object"), boxname))
return "Could not retrieve object: %s" % boxname return
if box is None: if box is None:
self.app.inform.emit('[WARNING_NOTCL] %s: %s' % (_("No object Box. Using instead"), panel_source_obj)) self.app.inform.emit('[WARNING_NOTCL] %s: %s' % (_("No object Box. Using instead"), panel_source_obj))
@ -466,7 +467,7 @@ class Panelize(AppTool):
if 0 in {columns, rows}: if 0 in {columns, rows}:
self.app.inform.emit('[ERROR_NOTCL] %s' % self.app.inform.emit('[ERROR_NOTCL] %s' %
_("Columns or Rows are zero value. Change them to a positive integer.")) _("Columns or Rows are zero value. Change them to a positive integer."))
return "Columns or Rows are zero value. Change them to a positive integer." return
xmin, ymin, xmax, ymax = box.bounds() xmin, ymin, xmax, ymax = box.bounds()
lenghtx = xmax - xmin + spacing_columns lenghtx = xmax - xmin + spacing_columns
@ -586,7 +587,7 @@ class Panelize(AppTool):
obj_fin.create_geometry() obj_fin.create_geometry()
obj_fin.zeros = panel_source_obj.zeros obj_fin.zeros = panel_source_obj.zeros
obj_fin.units = panel_source_obj.units obj_fin.units = panel_source_obj.units
self.app.proc_container.update_view_text('') app_obj.proc_container.update_view_text('')
def job_init_geometry(obj_fin, app_obj): def job_init_geometry(obj_fin, app_obj):
currentx = 0.0 currentx = 0.0
@ -628,11 +629,11 @@ class Panelize(AppTool):
geo_len += len(panel_source_obj.tools[tool]['solid_geometry']) geo_len += len(panel_source_obj.tools[tool]['solid_geometry'])
except TypeError: except TypeError:
geo_len += 1 geo_len += 1
else: # else:
try: # try:
geo_len = len(panel_source_obj.solid_geometry) # geo_len = len(panel_source_obj.solid_geometry)
except TypeError: # except TypeError:
geo_len = 1 # geo_len = 1
elif panel_source_obj.kind == 'gerber': elif panel_source_obj.kind == 'gerber':
for ap in panel_source_obj.apertures: for ap in panel_source_obj.apertures:
if 'geometry' in panel_source_obj.apertures[ap]: if 'geometry' in panel_source_obj.apertures[ap]:
@ -653,7 +654,7 @@ class Panelize(AppTool):
if panel_source_obj.kind == 'geometry': if panel_source_obj.kind == 'geometry':
if panel_source_obj.multigeo is True: if panel_source_obj.multigeo is True:
for tool in panel_source_obj.tools: for tool in panel_source_obj.tools:
if self.app.abort_flag: if app_obj.abort_flag:
# graceful abort requested by the user # graceful abort requested by the user
raise grace raise grace
@ -667,13 +668,11 @@ class Panelize(AppTool):
pol_nr += 1 pol_nr += 1
disp_number = int(np.interp(pol_nr, [0, geo_len], [0, 100])) disp_number = int(np.interp(pol_nr, [0, geo_len], [0, 100]))
if old_disp_number < disp_number <= 100: if old_disp_number < disp_number <= 100:
self.app.proc_container.update_view_text(' %s: %d %d%%' % app_obj.proc_container.update_view_text(
(_("Copy"), ' %s: %d %d%%' % (_("Copy"), int(element), disp_number))
int(element),
disp_number))
old_disp_number = disp_number old_disp_number = disp_number
else: else:
if self.app.abort_flag: if app_obj.abort_flag:
# graceful abort requested by the user # graceful abort requested by the user
raise grace raise grace
@ -685,7 +684,7 @@ class Panelize(AppTool):
pol_nr = 0 pol_nr = 0
try: try:
for geo_el in panel_source_obj.solid_geometry: for geo_el in panel_source_obj.solid_geometry:
if self.app.abort_flag: if app_obj.abort_flag:
# graceful abort requested by the user # graceful abort requested by the user
raise grace raise grace
@ -696,10 +695,8 @@ class Panelize(AppTool):
disp_number = int(np.interp(pol_nr, [0, geo_len], [0, 100])) disp_number = int(np.interp(pol_nr, [0, geo_len], [0, 100]))
if old_disp_number < disp_number <= 100: if old_disp_number < disp_number <= 100:
self.app.proc_container.update_view_text(' %s: %d %d%%' % app_obj.proc_container.update_view_text(
(_("Copy"), ' %s: %d %d%%' % (_("Copy"), int(element), disp_number))
int(element),
disp_number))
old_disp_number = disp_number old_disp_number = disp_number
except TypeError: except TypeError:
@ -713,7 +710,7 @@ class Panelize(AppTool):
try: try:
for geo_el in panel_source_obj.solid_geometry: for geo_el in panel_source_obj.solid_geometry:
if self.app.abort_flag: if app_obj.abort_flag:
# graceful abort requested by the user # graceful abort requested by the user
raise grace raise grace
@ -724,7 +721,7 @@ class Panelize(AppTool):
obj_fin.solid_geometry.append(trans_geo) obj_fin.solid_geometry.append(trans_geo)
for apid in panel_source_obj.apertures: for apid in panel_source_obj.apertures:
if self.app.abort_flag: if app_obj.abort_flag:
# graceful abort requested by the user # graceful abort requested by the user
raise grace raise grace
if 'geometry' in panel_source_obj.apertures[apid]: if 'geometry' in panel_source_obj.apertures[apid]:
@ -735,7 +732,7 @@ class Panelize(AppTool):
geo_len = 1 geo_len = 1
pol_nr = 0 pol_nr = 0
for el in panel_source_obj.apertures[apid]['geometry']: for el in panel_source_obj.apertures[apid]['geometry']:
if self.app.abort_flag: if app_obj.abort_flag:
# graceful abort requested by the user # graceful abort requested by the user
raise grace raise grace
@ -758,16 +755,13 @@ class Panelize(AppTool):
disp_number = int(np.interp(pol_nr, [0, geo_len], [0, 100])) disp_number = int(np.interp(pol_nr, [0, geo_len], [0, 100]))
if old_disp_number < disp_number <= 100: if old_disp_number < disp_number <= 100:
self.app.proc_container.update_view_text(' %s: %d %d%%' % app_obj.proc_container.update_view_text(
(_("Copy"), ' %s: %d %d%%' % (_("Copy"), int(element), disp_number))
int(element),
disp_number))
old_disp_number = disp_number old_disp_number = disp_number
currentx += lenghtx currentx += lenghtx
currenty += lenghty currenty += lenghty
print("before", obj_fin.tools)
if panel_source_obj.kind == 'geometry' and panel_source_obj.multigeo is True: if panel_source_obj.kind == 'geometry' and panel_source_obj.multigeo is True:
# I'm going to do this only here as a fix for panelizing cutouts # I'm going to do this only here as a fix for panelizing cutouts
# I'm going to separate linestrings out of the solid geometry from other # I'm going to separate linestrings out of the solid geometry from other
@ -782,22 +776,23 @@ class Panelize(AppTool):
other_geo.append(geo) other_geo.append(geo)
fused_lines = list(unary_union(lines)) fused_lines = list(unary_union(lines))
obj_fin.tools[tool]['solid_geometry'] = fused_lines + other_geo obj_fin.tools[tool]['solid_geometry'] = fused_lines + other_geo
print("after", obj_fin.tools)
if panel_type == 'gerber': if panel_type == 'gerber':
self.app.inform.emit('%s' % _("Generating panel ... Adding the Gerber code.")) app_obj.inform.emit('%s' % _("Generating panel ... Adding the Gerber code."))
obj_fin.source_file = self.app.export_gerber(obj_name=self.outname, filename=None, obj_fin.source_file = self.app.export_gerber(obj_name=self.outname, filename=None,
local_use=obj_fin, use_thread=False) local_use=obj_fin, use_thread=False)
# obj_fin.solid_geometry = cascaded_union(obj_fin.solid_geometry) # obj_fin.solid_geometry = cascaded_union(obj_fin.solid_geometry)
# 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('') app_obj.proc_container.update_view_text('')
self.app.inform.emit('%s: %d' % (_("Generating panel... Spawning copies"), (int(rows * columns)))) self.app.inform.emit('%s: %d' % (_("Generating panel... Spawning copies"), (int(rows * columns))))
if panel_source_obj.kind == 'excellon': if panel_source_obj.kind == 'excellon':
self.app.app_obj.new_object("excellon", self.outname, job_init_excellon, plot=True, autoselected=True) self.app.app_obj.new_object(
"excellon", self.outname, job_init_excellon, plot=True, autoselected=True)
else: else:
self.app.app_obj.new_object(panel_type, self.outname, job_init_geometry, plot=True, autoselected=True) self.app.app_obj.new_object(
panel_type, self.outname, job_init_geometry, plot=True, autoselected=True)
if self.constrain_flag is False: if self.constrain_flag is False:
self.app.inform.emit('[success] %s' % _("Panel done...")) self.app.inform.emit('[success] %s' % _("Panel done..."))
@ -812,7 +807,7 @@ class Panelize(AppTool):
def job_thread(app_obj): def job_thread(app_obj):
try: try:
panelize_worker() panelize_worker()
self.app.inform.emit('[success] %s' % _("Panel created successfully.")) app_obj.inform.emit('[success] %s' % _("Panel created successfully."))
except Exception as ee: except Exception as ee:
proc.done() proc.done()
log.debug(str(ee)) log.debug(str(ee))

View File

@ -2898,7 +2898,7 @@ class App(QtCore.QObject):
self.translator_grid_lay.addWidget(QtWidgets.QLabel('%s' % "French"), 2, 0) self.translator_grid_lay.addWidget(QtWidgets.QLabel('%s' % "French"), 2, 0)
self.translator_grid_lay.addWidget(QtWidgets.QLabel('%s' % "Michel Maciejewski"), 2, 1) self.translator_grid_lay.addWidget(QtWidgets.QLabel('%s' % "Michel Maciejewski"), 2, 1)
self.translator_grid_lay.addWidget(QtWidgets.QLabel('%s' % ""), 2, 2) self.translator_grid_lay.addWidget(QtWidgets.QLabel('%s' % ""), 2, 2)
self.translator_grid_lay.addWidget(QtWidgets.QLabel('%s' % "<micmac@gmail.com>"), 2, 3) self.translator_grid_lay.addWidget(QtWidgets.QLabel('%s' % "<micmac589@gmail.com>"), 2, 3)
self.translator_grid_lay.addWidget(QtWidgets.QLabel('%s' % "Hungarian"), 3, 0) self.translator_grid_lay.addWidget(QtWidgets.QLabel('%s' % "Hungarian"), 3, 0)
self.translator_grid_lay.addWidget(QtWidgets.QLabel('%s' % " "), 3, 1) self.translator_grid_lay.addWidget(QtWidgets.QLabel('%s' % " "), 3, 1)
@ -2906,7 +2906,7 @@ class App(QtCore.QObject):
self.translator_grid_lay.addWidget(QtWidgets.QLabel('%s' % " "), 3, 3) self.translator_grid_lay.addWidget(QtWidgets.QLabel('%s' % " "), 3, 3)
self.translator_grid_lay.addWidget(QtWidgets.QLabel('%s' % "Italian"), 4, 0) self.translator_grid_lay.addWidget(QtWidgets.QLabel('%s' % "Italian"), 4, 0)
self.translator_grid_lay.addWidget(QtWidgets.QLabel('%s' % "Golfetto Massimiliano"), 4, 1) self.translator_grid_lay.addWidget(QtWidgets.QLabel('%s' % "Massimiliano Golfetto"), 4, 1)
self.translator_grid_lay.addWidget(QtWidgets.QLabel('%s' % " "), 4, 2) self.translator_grid_lay.addWidget(QtWidgets.QLabel('%s' % " "), 4, 2)
self.translator_grid_lay.addWidget(QtWidgets.QLabel('%s' % "<golfetto.pcb@gmail.com>"), 4, 3) self.translator_grid_lay.addWidget(QtWidgets.QLabel('%s' % "<golfetto.pcb@gmail.com>"), 4, 3)