From 2623bb0a655fc6ca4d2c7fc8ad5c764492ff9022 Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Mon, 25 May 2020 00:37:54 +0300 Subject: [PATCH] - updated the Gerber parser such that it will parse correctly Gerber files that have only one solid polygon inside with multiple clear polygons (like those generated by the Invert Tool) --- AppParsers/ParseGerber.py | 2 +- AppTools/ToolInvertGerber.py | 5 +++++ CHANGELOG.md | 2 +- camlib.py | 3 ++- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/AppParsers/ParseGerber.py b/AppParsers/ParseGerber.py index 1bd37e91..73e0b939 100644 --- a/AppParsers/ParseGerber.py +++ b/AppParsers/ParseGerber.py @@ -1476,7 +1476,7 @@ class Gerber(Geometry): sol_geo_length = 1 try: - if buff_length == 0 and sol_geo_length in [0, 1]: + if buff_length == 0 and sol_geo_length in [0, 1] and self.solid_geometry.area == 0: log.error("Object is not Gerber file or empty. Aborting Object creation.") return 'fail' except TypeError as e: diff --git a/AppTools/ToolInvertGerber.py b/AppTools/ToolInvertGerber.py index 50579a93..b97ec269 100644 --- a/AppTools/ToolInvertGerber.py +++ b/AppTools/ToolInvertGerber.py @@ -228,6 +228,11 @@ class ToolInvertGerber(AppTool): for poly in grb_obj.solid_geometry: new_solid_geometry = new_solid_geometry.difference(poly) + try: + __ = iter(new_solid_geometry) + except TypeError: + new_solid_geometry = [new_solid_geometry] + new_options = {} for opt in grb_obj.options: new_options[opt] = deepcopy(grb_obj.options[opt]) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4ace8ce3..961d99e8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,7 +13,7 @@ CHANGELOG for FlatCAM beta - added a new GUI element which is a evaluated LineEdit that accepts only float numbers and /,*,+,-,% chars - finished the Etch Compensation Tool - fixed unreliable work of Gerber Editor and optimized the App.editor2object() method - +- updated the Gerber parser such that it will parse correctly Gerber files that have only one solid polygon inside with multiple clear polygons (like those generated by the Invert Tool) 23.05.2020 diff --git a/camlib.py b/camlib.py index a718910a..5e8e328f 100644 --- a/camlib.py +++ b/camlib.py @@ -586,7 +586,8 @@ class Geometry(object): return def is_empty(self): - if isinstance(self.solid_geometry, BaseGeometry): + if isinstance(self.solid_geometry, BaseGeometry) or isinstance(self.solid_geometry, Polygon) or \ + isinstance(self.solid_geometry, MultiPolygon): return self.solid_geometry.is_empty if isinstance(self.solid_geometry, list):