Просмотр исходного кода

Workaround for #152. Check for empty polygons before adding.

Juan Pablo Caram 10 лет назад
Родитель
Сommit
d8c5d46cd0
1 измененных файлов с 13 добавлено и 11 удалено
  1. 13 11
      camlib.py

+ 13 - 11
camlib.py

@@ -1619,7 +1619,7 @@ class Gerber (Geometry):
                                     geo = LineString(path)
                                     geo = LineString(path)
                                 else:
                                 else:
                                     geo = LineString(path).buffer(width / 2)
                                     geo = LineString(path).buffer(width / 2)
-                            poly_buffer.append(geo)
+                            if not geo.is_empty: poly_buffer.append(geo)
 
 
                         path = [[current_x, current_y]]  # Start new path
                         path = [[current_x, current_y]]  # Start new path
 
 
@@ -1629,7 +1629,7 @@ class Gerber (Geometry):
                         # --- BUFFERED ---
                         # --- BUFFERED ---
                         flash = Gerber.create_flash_geometry(Point([current_x, current_y]),
                         flash = Gerber.create_flash_geometry(Point([current_x, current_y]),
                                                              self.apertures[current_aperture])
                                                              self.apertures[current_aperture])
-                        poly_buffer.append(flash)
+                        if not flash.is_empty: poly_buffer.append(flash)
 
 
                         path = [[current_x, current_y]]  # Reset path starting point
                         path = [[current_x, current_y]]  # Reset path starting point
 
 
@@ -1685,7 +1685,7 @@ class Gerber (Geometry):
                             # --- BUFFERED ---
                             # --- BUFFERED ---
                             width = self.apertures[last_path_aperture]["size"]
                             width = self.apertures[last_path_aperture]["size"]
                             buffered = LineString(path).buffer(width / 2)
                             buffered = LineString(path).buffer(width / 2)
-                            poly_buffer.append(buffered)
+                            if not buffered.is_empty: poly_buffer.append(buffered)
 
 
                         current_x = x
                         current_x = x
                         current_y = y
                         current_y = y
@@ -1788,7 +1788,7 @@ class Gerber (Geometry):
                             #                                      self.apertures[current_aperture])
                             #                                      self.apertures[current_aperture])
                             flash = Gerber.create_flash_geometry(Point(current_x, current_y),
                             flash = Gerber.create_flash_geometry(Point(current_x, current_y),
                                                                  self.apertures[current_aperture])
                                                                  self.apertures[current_aperture])
-                            poly_buffer.append(flash)
+                            if not flash.is_empty: poly_buffer.append(flash)
                         except IndexError:
                         except IndexError:
                             log.warning("Line %d: %s -> Nothing there to flash!" % (line_num, gline))
                             log.warning("Line %d: %s -> Nothing there to flash!" % (line_num, gline))
 
 
@@ -1811,7 +1811,7 @@ class Gerber (Geometry):
                         ## --- Buffered ---
                         ## --- Buffered ---
                         width = self.apertures[last_path_aperture]["size"]
                         width = self.apertures[last_path_aperture]["size"]
                         geo = LineString(path).buffer(width/2)
                         geo = LineString(path).buffer(width/2)
-                        poly_buffer.append(geo)
+                        if not geo.is_empty: poly_buffer.append(geo)
 
 
                         path = [path[-1]]
                         path = [path[-1]]
 
 
@@ -1841,7 +1841,7 @@ class Gerber (Geometry):
                     region = Polygon(path)
                     region = Polygon(path)
                     if not region.is_valid:
                     if not region.is_valid:
                         region = region.buffer(0)
                         region = region.buffer(0)
-                    poly_buffer.append(region)
+                    if not region.is_empty: poly_buffer.append(region)
 
 
                     path = [[current_x, current_y]]  # Start new path
                     path = [[current_x, current_y]]  # Start new path
                     continue
                     continue
@@ -1875,7 +1875,7 @@ class Gerber (Geometry):
                         # --- Buffered ----
                         # --- Buffered ----
                         width = self.apertures[last_path_aperture]["size"]
                         width = self.apertures[last_path_aperture]["size"]
                         geo = LineString(path).buffer(width / 2)
                         geo = LineString(path).buffer(width / 2)
-                        poly_buffer.append(geo)
+                        if not geo.is_empty: poly_buffer.append(geo)
                         path = [path[-1]]
                         path = [path[-1]]
 
 
                     continue
                     continue
@@ -1891,7 +1891,7 @@ class Gerber (Geometry):
                         # --- Buffered ----
                         # --- Buffered ----
                         width = self.apertures[last_path_aperture]["size"]
                         width = self.apertures[last_path_aperture]["size"]
                         geo = LineString(path).buffer(width / 2)
                         geo = LineString(path).buffer(width / 2)
-                        poly_buffer.append(geo)
+                        if not geo.is_empty: poly_buffer.append(geo)
 
 
                         path = [path[-1]]
                         path = [path[-1]]
 
 
@@ -1963,18 +1963,20 @@ class Gerber (Geometry):
                 ## --- Buffered ---
                 ## --- Buffered ---
                 width = self.apertures[last_path_aperture]["size"]
                 width = self.apertures[last_path_aperture]["size"]
                 geo = LineString(path).buffer(width / 2)
                 geo = LineString(path).buffer(width / 2)
-                poly_buffer.append(geo)
+                if not geo.is_empty: poly_buffer.append(geo)
 
 
             # --- Apply buffer ---
             # --- Apply buffer ---
             log.warn("Joining %d polygons." % len(poly_buffer))
             log.warn("Joining %d polygons." % len(poly_buffer))
-            if (self.use_buffer_for_union):
+            if self.use_buffer_for_union:
+                log.debug("Union by buffer...")
                 new_poly = MultiPolygon(poly_buffer)
                 new_poly = MultiPolygon(poly_buffer)
                 new_poly = new_poly.buffer(0.00000001)
                 new_poly = new_poly.buffer(0.00000001)
                 new_poly = new_poly.buffer(-0.00000001)
                 new_poly = new_poly.buffer(-0.00000001)
                 log.warn("Union(buffer) done.")
                 log.warn("Union(buffer) done.")
             else:
             else:
+                log.debug("Union by union()...")
                 new_poly = cascaded_union(poly_buffer)
                 new_poly = cascaded_union(poly_buffer)
-                new_poly = new_poly = new_poly.buffer(0)
+                new_poly = new_poly.buffer(0)
                 log.warn("Union done.")
                 log.warn("Union done.")
             if current_polarity == 'D':
             if current_polarity == 'D':
                 self.solid_geometry = self.solid_geometry.union(new_poly)
                 self.solid_geometry = self.solid_geometry.union(new_poly)