From bfdaa73798834a743b792a681d00173bab8cb6b2 Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Fri, 5 Jun 2020 03:37:01 +0300 Subject: [PATCH 1/2] - fixed a small issue in the Panelization Tool that blocked the usage of a Geometry object as panelization reference --- CHANGELOG.md | 4 +++ appTools/ToolPanelize.py | 65 +++++++++++++++++++--------------------- app_Main.py | 4 +-- 3 files changed, 36 insertions(+), 37 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ccfbd590..c63972ca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 - 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 diff --git a/appTools/ToolPanelize.py b/appTools/ToolPanelize.py index 0db27472..e742038c 100644 --- a/appTools/ToolPanelize.py +++ b/appTools/ToolPanelize.py @@ -396,6 +396,7 @@ class Panelize(AppTool): def on_type_box_index_changed(self): 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.setCurrentIndex(0) self.box_combo.obj_type = { @@ -421,12 +422,12 @@ class Panelize(AppTool): except Exception as e: log.debug("Panelize.on_panelize() --> %s" % str(e)) 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: self.app.inform.emit('[ERROR_NOTCL] %s: %s' % (_("Object not found"), panel_source_obj)) - return "Object not found: %s" % panel_source_obj + return boxname = self.box_combo.currentText() @@ -435,7 +436,7 @@ class Panelize(AppTool): except Exception as e: log.debug("Panelize.on_panelize() --> %s" % str(e)) 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: 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}: self.app.inform.emit('[ERROR_NOTCL] %s' % _("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() lenghtx = xmax - xmin + spacing_columns @@ -586,7 +587,7 @@ class Panelize(AppTool): obj_fin.create_geometry() obj_fin.zeros = panel_source_obj.zeros 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): currentx = 0.0 @@ -628,11 +629,11 @@ class Panelize(AppTool): geo_len += len(panel_source_obj.tools[tool]['solid_geometry']) except TypeError: geo_len += 1 - else: - try: - geo_len = len(panel_source_obj.solid_geometry) - except TypeError: - geo_len = 1 + # else: + # try: + # geo_len = len(panel_source_obj.solid_geometry) + # except TypeError: + # geo_len = 1 elif panel_source_obj.kind == 'gerber': for ap in panel_source_obj.apertures: 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.multigeo is True: for tool in panel_source_obj.tools: - if self.app.abort_flag: + if app_obj.abort_flag: # graceful abort requested by the user raise grace @@ -667,13 +668,11 @@ class Panelize(AppTool): pol_nr += 1 disp_number = int(np.interp(pol_nr, [0, geo_len], [0, 100])) if old_disp_number < disp_number <= 100: - self.app.proc_container.update_view_text(' %s: %d %d%%' % - (_("Copy"), - int(element), - disp_number)) + app_obj.proc_container.update_view_text( + ' %s: %d %d%%' % (_("Copy"), int(element), disp_number)) old_disp_number = disp_number else: - if self.app.abort_flag: + if app_obj.abort_flag: # graceful abort requested by the user raise grace @@ -685,7 +684,7 @@ class Panelize(AppTool): pol_nr = 0 try: 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 raise grace @@ -696,10 +695,8 @@ class Panelize(AppTool): disp_number = int(np.interp(pol_nr, [0, geo_len], [0, 100])) if old_disp_number < disp_number <= 100: - self.app.proc_container.update_view_text(' %s: %d %d%%' % - (_("Copy"), - int(element), - disp_number)) + app_obj.proc_container.update_view_text( + ' %s: %d %d%%' % (_("Copy"), int(element), disp_number)) old_disp_number = disp_number except TypeError: @@ -713,7 +710,7 @@ class Panelize(AppTool): try: 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 raise grace @@ -724,7 +721,7 @@ class Panelize(AppTool): obj_fin.solid_geometry.append(trans_geo) for apid in panel_source_obj.apertures: - if self.app.abort_flag: + if app_obj.abort_flag: # graceful abort requested by the user raise grace if 'geometry' in panel_source_obj.apertures[apid]: @@ -735,7 +732,7 @@ class Panelize(AppTool): geo_len = 1 pol_nr = 0 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 raise grace @@ -758,16 +755,13 @@ class Panelize(AppTool): disp_number = int(np.interp(pol_nr, [0, geo_len], [0, 100])) if old_disp_number < disp_number <= 100: - self.app.proc_container.update_view_text(' %s: %d %d%%' % - (_("Copy"), - int(element), - disp_number)) + app_obj.proc_container.update_view_text( + ' %s: %d %d%%' % (_("Copy"), int(element), disp_number)) old_disp_number = disp_number currentx += lenghtx currenty += lenghty - print("before", obj_fin.tools) 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 separate linestrings out of the solid geometry from other @@ -782,22 +776,23 @@ class Panelize(AppTool): other_geo.append(geo) fused_lines = list(unary_union(lines)) obj_fin.tools[tool]['solid_geometry'] = fused_lines + other_geo - print("after", obj_fin.tools) 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, local_use=obj_fin, use_thread=False) # obj_fin.solid_geometry = cascaded_union(obj_fin.solid_geometry) # 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)))) 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: - 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: self.app.inform.emit('[success] %s' % _("Panel done...")) @@ -812,7 +807,7 @@ class Panelize(AppTool): def job_thread(app_obj): try: panelize_worker() - self.app.inform.emit('[success] %s' % _("Panel created successfully.")) + app_obj.inform.emit('[success] %s' % _("Panel created successfully.")) except Exception as ee: proc.done() log.debug(str(ee)) diff --git a/app_Main.py b/app_Main.py index c008be78..9ab48a23 100644 --- a/app_Main.py +++ b/app_Main.py @@ -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' % "Michel Maciejewski"), 2, 1) self.translator_grid_lay.addWidget(QtWidgets.QLabel('%s' % ""), 2, 2) - self.translator_grid_lay.addWidget(QtWidgets.QLabel('%s' % ""), 2, 3) + self.translator_grid_lay.addWidget(QtWidgets.QLabel('%s' % ""), 2, 3) self.translator_grid_lay.addWidget(QtWidgets.QLabel('%s' % "Hungarian"), 3, 0) 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' % "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, 3) From fb602d6f9bac8419adf396f29cce878915fb5ac4 Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Fri, 5 Jun 2020 04:09:29 +0300 Subject: [PATCH 2/2] - fixed a small issue in the Panelization Tool that blocked the usage of a Geometry object as panelization reference --- CHANGELOG.md | 1 + appTools/ToolCalculators.py | 8 ++++---- app_Main.py | 3 ++- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c63972ca..401626ad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -122,6 +122,7 @@ CHANGELOG for FlatCAM beta 27.05.2020 - working on Isolation Tool: made to work the Isolation with multiple tools without rest machining +- in Tool Calculators fixed an application crash if the user typed letters instead of numbers in the boxes. Now the boxes accept only numbers, dots, comma, spaces and arithmetic operators 26.05.2020 diff --git a/appTools/ToolCalculators.py b/appTools/ToolCalculators.py index b26ae9fb..39018e20 100644 --- a/appTools/ToolCalculators.py +++ b/appTools/ToolCalculators.py @@ -7,7 +7,7 @@ from PyQt5 import QtWidgets from appTool import AppTool -from appGUI.GUIElements import FCSpinner, FCDoubleSpinner, FCEntry +from appGUI.GUIElements import FCSpinner, FCDoubleSpinner, NumericalEvalEntry import math import gettext @@ -63,13 +63,13 @@ class ToolCalculator(AppTool): grid_units_layout.addWidget(mm_label, 0, 0) grid_units_layout.addWidget(inch_label, 0, 1) - self.inch_entry = FCEntry() + self.inch_entry = NumericalEvalEntry(border_color='#0069A9') # self.inch_entry.setFixedWidth(70) # self.inch_entry.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter) self.inch_entry.setToolTip(_("Here you enter the value to be converted from INCH to MM")) - self.mm_entry = FCEntry() + self.mm_entry = NumericalEvalEntry(border_color='#0069A9') # self.mm_entry.setFixedWidth(130) # self.mm_entry.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter) self.mm_entry.setToolTip(_("Here you enter the value to be converted from MM to INCH")) @@ -104,7 +104,7 @@ class ToolCalculator(AppTool): ) self.tipAngle_label = QtWidgets.QLabel('%s:' % _("Tip Angle")) self.tipAngle_entry = FCSpinner(callback=self.confirmation_message_int) - self.tipAngle_entry.set_range(0,180) + self.tipAngle_entry.set_range(0, 180) self.tipAngle_entry.set_step(5) # self.tipAngle_entry.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter) diff --git a/app_Main.py b/app_Main.py index 9ab48a23..26246c87 100644 --- a/app_Main.py +++ b/app_Main.py @@ -162,7 +162,8 @@ class App(QtCore.QObject): # ############################################################################################################### # ################################### Version and VERSION DATE ################################################## # ############################################################################################################### - version = 8.993 + version = "Unstable Version" + # version = 8.993 version_date = "2020/06/05" beta = True