diff --git a/CHANGELOG.md b/CHANGELOG.md index ca1bca4a..1eae24de 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,9 +7,14 @@ CHANGELOG for FlatCAM beta ================================================= +8.12.2021 + +- fixed some more Shapely 2.0 deprecation warnings +- fixed a message bug in the AppMain + 29.11.2021 -- some issues fixed that were left behind rom porting to PyQt6 +- some issues fixed that were left behind from porting to PyQt6 - trying to solve differently RuntimeError exceptions that randomly popup due of wrapped C++ objects being deleted by attempting to create a new UI for the objects 27.11.2021 diff --git a/appObjects/FlatCAMGeometry.py b/appObjects/FlatCAMGeometry.py index 508ea671..96827bcd 100644 --- a/appObjects/FlatCAMGeometry.py +++ b/appObjects/FlatCAMGeometry.py @@ -1256,7 +1256,8 @@ class GeometryObject(FlatCAMObj, Geometry): self.geo_len = 0 try: source_geo = self.tools[tool]['solid_geometry'] - work_geo = source_geo.geoms if isinstance(source_geo, MultiPolygon) else source_geo + work_geo = source_geo.geoms if isinstance(source_geo, (MultiPolygon, MultiLineString)) else \ + source_geo self.geo_len = len(work_geo) except TypeError: self.geo_len = 1 @@ -1269,7 +1270,8 @@ class GeometryObject(FlatCAMObj, Geometry): self.geo_len = 0 try: source_geo = self.solid_geometry - work_geo = source_geo.geoms if isinstance(source_geo, MultiPolygon) else source_geo + work_geo = source_geo.geoms if isinstance(source_geo, (MultiPolygon, MultiLineString)) else \ + source_geo self.geo_len = len(work_geo) except TypeError: self.geo_len = 1 diff --git a/appPlugins/ToolCutOut.py b/appPlugins/ToolCutOut.py index d6c216d7..af99cee1 100644 --- a/appPlugins/ToolCutOut.py +++ b/appPlugins/ToolCutOut.py @@ -2131,7 +2131,8 @@ class CutOut(AppTool): maxx = -Inf maxy = -Inf - for k in obj: + work_geo = obj.geoms if isinstance(obj , (MultiPolygon, MultiLineString)) else obj + for k in work_geo: minx_, miny_, maxx_, maxy_ = bounds_rec(k) minx = min(minx, minx_) miny = min(miny, miny_) diff --git a/appPlugins/ToolPanelize.py b/appPlugins/ToolPanelize.py index 8b79993f..80b93669 100644 --- a/appPlugins/ToolPanelize.py +++ b/appPlugins/ToolPanelize.py @@ -858,12 +858,20 @@ class Panelize(AppTool): if panel_source_obj.multigeo is True: for tool in panel_source_obj.tools: try: - geo_len += len(panel_source_obj.tools[tool]['solid_geometry']) + work_geo = panel_source_obj.tools[tool]['solid_geometry'] + geo_len += len( + work_geo.geoms if isinstance(work_geo, (MultiPolygon, MultiLineString)) else + work_geo + ) except TypeError: geo_len += 1 else: try: - geo_len = len(panel_source_obj.solid_geometry) + work_geo = panel_source_obj.solid_geometry + geo_len = len( + work_geo.geoms if isinstance(work_geo, (MultiPolygon, MultiLineString)) else + work_geo + ) except TypeError: geo_len = 1 elif panel_source_obj.kind == 'gerber': @@ -892,13 +900,20 @@ class Panelize(AppTool): # calculate the number of polygons try: - geo_len = len(panel_source_obj.tools[tool]['solid_geometry']) + work_geo = panel_source_obj.tools[tool]['solid_geometry'] + geo_len = len( + work_geo.geoms if isinstance(work_geo, (MultiPolygon, MultiLineString)) + else work_geo + ) except TypeError: geo_len = 1 # panelization pol_nr = 0 - for geo_el in panel_source_obj.tools[tool]['solid_geometry']: + work_geo = panel_source_obj.tools[tool]['solid_geometry'] + i_wg = work_geo.geoms if isinstance(work_geo, (MultiPolygon, MultiLineString)) \ + else work_geo + for geo_el in i_wg: trans_geo = translate_recursion(geo_el) if not trans_geo.is_empty: new_obj.tools[tool]['solid_geometry'].append(trans_geo) @@ -920,14 +935,21 @@ class Panelize(AppTool): # calculate the number of polygons try: - geo_len = len(panel_source_obj.solid_geometry) + work_geo = panel_source_obj.solid_geometry + geo_len = len( + work_geo.geoms if isinstance(work_geo, (MultiPolygon, MultiLineString)) + else work_geo + ) except TypeError: geo_len = 1 # panelization pol_nr = 0 try: - for geo_el in panel_source_obj.solid_geometry: + work_geo = panel_source_obj.solid_geometry + i_wg = work_geo.geoms if isinstance(work_geo, (MultiPolygon, MultiLineString)) \ + else work_geo + for geo_el in i_wg: if app_obj.abort_flag: # graceful abort requested by the user raise grace @@ -1178,7 +1200,7 @@ class PanelizeUI: self.type_obj_combo.setItemIcon(2, QtGui.QIcon(self.app.resource_location + "/geometry16.png")) grid0.addWidget(self.type_object_label, 2, 0) - grid0.addWidget( self.type_obj_combo, 2, 1) + grid0.addWidget(self.type_obj_combo, 2, 1) # Object to be panelized self.object_combo = FCComboBox() diff --git a/app_Main.py b/app_Main.py index 1551fb91..58deae1e 100644 --- a/app_Main.py +++ b/app_Main.py @@ -10965,7 +10965,7 @@ class MenuFileHandlers(QtCore.QObject): else: return exported_gerber except Exception as e: - self.error("App.export_gerber.make_gerber() --> %s" % str(e)) + self.log.error("App.export_gerber.make_gerber() --> %s" % str(e)) return 'fail' if use_thread is True: @@ -10975,7 +10975,7 @@ class MenuFileHandlers(QtCore.QObject): ret = make_gerber() if ret == 'fail': app_obj.inform.emit('[ERROR_NOTCL] %s' % _('Could not export.')) - return + return 'fail' self.worker_task.emit({'fcn': job_thread_grb, 'params': [self]}) else: diff --git a/camlib.py b/camlib.py index 4b678aef..89f0a856 100644 --- a/camlib.py +++ b/camlib.py @@ -2556,7 +2556,10 @@ class Geometry(object): # variables to display the percentage of work done self.geo_len = 0 try: - self.geo_len = len(self.tools[tool]['solid_geometry']) + work_geo = self.tools[tool]['solid_geometry'] + self.geo_len = len( + work_geo.geoms if isinstance(work_geo, (MultiPolygon, MultiLineString)) else work_geo + ) except TypeError: self.geo_len = 1 self.old_disp_number = 0 @@ -2567,7 +2570,10 @@ class Geometry(object): # variables to display the percentage of work done self.geo_len = 0 try: - self.geo_len = len(self.solid_geometry) + work_geo = self.solid_geometry + self.geo_len = len( + work_geo.geoms if isinstance(work_geo, (MultiPolygon, MultiLineString)) else work_geo + ) except TypeError: self.geo_len = 1 self.old_disp_number = 0 @@ -7786,7 +7792,8 @@ class CNCjob(Geometry): cmaxx = -np.Inf cmaxy = -np.Inf - for oo in obj: + w_geo = obj.geoms if isinstance(obj, (MultiPolygon, MultiLineString)) else obj + for oo in w_geo: if type(oo) is dict: for key in oo: minx_, miny_, maxx_, maxy_ = bounds_rec(oo[key]) @@ -7825,7 +7832,9 @@ class CNCjob(Geometry): maxx = -np.Inf maxy = -np.Inf try: - for geo in v['solid_geometry']: + work_geo = v['solid_geometry'] + i_wg = work_geo.geoms if isinstance(work_geo, (MultiPolygon, MultiLineString)) else work_geo + for geo in i_wg: if isinstance(geo, list): geo = unary_union(geo) if geo.is_empty: