Explorar el Código

- 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)

Marius Stanciu hace 6 años
padre
commit
e0417b034b
Se han modificado 4 ficheros con 99 adiciones y 1 borrados
  1. 27 0
      FlatCAMApp.py
  2. 3 0
      README.md
  3. 63 1
      camlib.py
  4. 6 0
      flatcamTools/ToolProperties.py

+ 27 - 0
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
 

+ 3 - 0
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
 

+ 63 - 1
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"]

+ 6 - 0
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():