diff --git a/FlatCAMApp.py b/FlatCAMApp.py index e1924f2d..30e04fd6 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -4498,6 +4498,15 @@ class App(QtCore.QObject): def initialize(obj_init, app): obj_init.solid_geometry = obj.solid_geometry + try: + obj_init.follow_geometry = obj.follow_geometry + except: + pass + try: + obj_init.apertures = obj.apertures + except: + pass + try: if obj.tools: obj_init.tools = obj.tools @@ -4531,6 +4540,15 @@ class App(QtCore.QObject): def initialize_geometry(obj_init, app): obj_init.solid_geometry = obj.solid_geometry + try: + obj_init.follow_geometry = obj.follow_geometry + except: + pass + try: + obj_init.apertures = obj.apertures + except: + pass + try: if obj.tools: obj_init.tools = obj.tools @@ -4580,6 +4598,15 @@ class App(QtCore.QObject): def initialize(obj_init, app): obj_init.solid_geometry = obj.solid_geometry + try: + obj_init.follow_geometry = obj.follow_geometry + except: + pass + try: + obj_init.apertures = obj.apertures + except: + pass + if obj.tools: obj_init.tools = obj.tools diff --git a/README.md b/README.md index 3271c38a..737c52ca 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,9 @@ CAD program, and create G-Code for Isolation routing. - new feature: added ability to edit MultiGeo geometry (geometry from Paint Tool) - changed all the info messages that are of type warning, error or success so they have a space added after the keyword - changed the Romanian translation by adding more diacritics +- modified Gerber parser to copy the follow_geometry in the self.apertures +- modified the Properties Tool to show the number of elements in the follow_geometry for each aperture +- modified the copy functions to copy the follow_geometry and also the apertures if it's possible (only for Gerber objects) 27.03.2019 diff --git a/camlib.py b/camlib.py index 5b03fc00..cd5e6a8d 100644 --- a/camlib.py +++ b/camlib.py @@ -2242,6 +2242,11 @@ class Gerber (Geometry): geo = LineString(path) if not geo.is_empty: follow_buffer.append(geo) + try: + self.apertures[current_aperture]['follow_geometry'].append(geo) + except KeyError: + self.apertures[current_aperture]['follow_geometry'] = [] + self.apertures[current_aperture]['follow_geometry'].append(geo) geo = LineString(path).buffer(width / 1.999, int(self.steps_per_circle / 4)) if not geo.is_empty: @@ -2453,6 +2458,11 @@ class Gerber (Geometry): geo = LineString(path) if not geo.is_empty: follow_buffer.append(geo) + try: + self.apertures[current_aperture]['follow_geometry'].append(geo) + except KeyError: + self.apertures[current_aperture]['follow_geometry'] = [] + self.apertures[current_aperture]['follow_geometry'].append(geo) geo = LineString(path).buffer(width / 1.999, int(self.steps_per_circle / 4)) if not geo.is_empty: @@ -2478,6 +2488,11 @@ class Gerber (Geometry): geo = LineString(path) if not geo.is_empty: follow_buffer.append(geo) + try: + self.apertures[current_aperture]['follow_geometry'].append(geo) + except KeyError: + self.apertures[current_aperture]['follow_geometry'] = [] + self.apertures[current_aperture]['follow_geometry'].append(geo) geo = LineString(path).buffer(width/1.999, int(self.steps_per_circle / 4)) if not geo.is_empty: @@ -2503,6 +2518,12 @@ class Gerber (Geometry): if geo: if not geo.is_empty: follow_buffer.append(geo) + try: + self.apertures[current_aperture]['follow_geometry'].append(geo) + except KeyError: + self.apertures[current_aperture]['follow_geometry'] = [] + self.apertures[current_aperture]['follow_geometry'].append(geo) + poly_buffer.append(geo) try: self.apertures[current_aperture]['solid_geometry'].append(geo) @@ -2531,6 +2552,11 @@ class Gerber (Geometry): region = Polygon() if not region.is_empty: follow_buffer.append(region) + try: + self.apertures[current_aperture]['follow_geometry'].append(region) + except KeyError: + self.apertures[current_aperture]['follow_geometry'] = [] + self.apertures[current_aperture]['follow_geometry'].append(region) region = Polygon(path) if not region.is_valid: @@ -2670,10 +2696,20 @@ class Gerber (Geometry): if self.apertures[last_path_aperture]["type"] != 'R': if not geo.is_empty: follow_buffer.append(geo) + try: + self.apertures[current_aperture]['follow_geometry'].append(geo) + except KeyError: + self.apertures[current_aperture]['follow_geometry'] = [] + self.apertures[current_aperture]['follow_geometry'].append(geo) except Exception as e: log.debug("camlib.Gerber.parse_lines() --> %s" % str(e)) if not geo.is_empty: follow_buffer.append(geo) + try: + self.apertures[current_aperture]['follow_geometry'].append(geo) + except KeyError: + self.apertures[current_aperture]['follow_geometry'] = [] + self.apertures[current_aperture]['follow_geometry'].append(geo) # this treats the case when we are storing geometry as solids if making_region: @@ -2741,8 +2777,18 @@ class Gerber (Geometry): try: if self.apertures[last_path_aperture]["type"] != 'R': follow_buffer.append(geo) + try: + self.apertures[current_aperture]['follow_geometry'].append(geo) + except KeyError: + self.apertures[current_aperture]['follow_geometry'] = [] + self.apertures[current_aperture]['follow_geometry'].append(geo) except: follow_buffer.append(geo) + try: + self.apertures[current_aperture]['follow_geometry'].append(geo) + except KeyError: + self.apertures[current_aperture]['follow_geometry'] = [] + self.apertures[current_aperture]['follow_geometry'].append(geo) # this treats the case when we are storing geometry as solids width = self.apertures[last_path_aperture]["size"] @@ -2770,7 +2816,13 @@ class Gerber (Geometry): # --- BUFFERED --- # Draw the flash # this treats the case when we are storing geometry as paths - follow_buffer.append(Point([linear_x, linear_y])) + geo_flash = Point([linear_x, linear_y]) + follow_buffer.append(geo_flash) + try: + self.apertures[current_aperture]['follow_geometry'].append(geo_flash) + except KeyError: + self.apertures[current_aperture]['follow_geometry'] = [] + self.apertures[current_aperture]['follow_geometry'].append(geo_flash) # this treats the case when we are storing geometry as solids flash = Gerber.create_flash_geometry( @@ -2869,6 +2921,11 @@ class Gerber (Geometry): geo = LineString(path) if not geo.is_empty: follow_buffer.append(geo) + try: + self.apertures[current_aperture]['follow_geometry'].append(geo) + except KeyError: + self.apertures[current_aperture]['follow_geometry'] = [] + self.apertures[current_aperture]['follow_geometry'].append(geo) # this treats the case when we are storing geometry as solids buffered = LineString(path).buffer(width / 1.999, int(self.steps_per_circle)) @@ -3000,6 +3057,11 @@ class Gerber (Geometry): geo = LineString(path) if not geo.is_empty: follow_buffer.append(geo) + try: + self.apertures[current_aperture]['follow_geometry'].append(geo) + except KeyError: + self.apertures[current_aperture]['follow_geometry'] = [] + self.apertures[current_aperture]['follow_geometry'].append(geo) # this treats the case when we are storing geometry as solids width = self.apertures[last_path_aperture]["size"] diff --git a/flatcamTools/ToolProperties.py b/flatcamTools/ToolProperties.py index 0cf54c5e..63f329ae 100644 --- a/flatcamTools/ToolProperties.py +++ b/flatcamTools/ToolProperties.py @@ -178,6 +178,12 @@ class Properties(FlatCAMTool): if obj.apertures[ap]['solid_geometry']: elems = len(obj.apertures[ap]['solid_geometry']) temp_ap['solid_geometry'] = '%s Polygons' % str(elems) + try: + if obj.apertures[ap]['follow_geometry']: + elems = len(obj.apertures[ap]['follow_geometry']) + temp_ap['follow_geometry'] = '%s Polygons' % str(elems) + except KeyError: + pass self.addChild(apertures, [str(ap), str(temp_ap)], True) elif obj.kind.lower() == 'excellon': for tool, value in obj.tools.items():