|
@@ -1773,7 +1773,10 @@ class Gerber (Geometry):
|
|
|
|
|
|
|
|
## --- BUFFERED ---
|
|
## --- BUFFERED ---
|
|
|
if making_region:
|
|
if making_region:
|
|
|
- geo = Polygon(path)
|
|
|
|
|
|
|
+ if follow:
|
|
|
|
|
+ geo = Polygon()
|
|
|
|
|
+ else:
|
|
|
|
|
+ geo = Polygon(path)
|
|
|
else:
|
|
else:
|
|
|
if last_path_aperture is None:
|
|
if last_path_aperture is None:
|
|
|
log.warning("No aperture defined for curent path. (%d)" % line_num)
|
|
log.warning("No aperture defined for curent path. (%d)" % line_num)
|
|
@@ -1783,7 +1786,9 @@ class Gerber (Geometry):
|
|
|
geo = LineString(path)
|
|
geo = LineString(path)
|
|
|
else:
|
|
else:
|
|
|
geo = LineString(path).buffer(width / 2)
|
|
geo = LineString(path).buffer(width / 2)
|
|
|
- if not geo.is_empty: 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
|
|
|
|
|
|
|
@@ -1795,17 +1800,26 @@ class Gerber (Geometry):
|
|
|
if len(path) > 1:
|
|
if len(path) > 1:
|
|
|
# --- Buffered ----
|
|
# --- Buffered ----
|
|
|
width = self.apertures[last_path_aperture]["size"]
|
|
width = self.apertures[last_path_aperture]["size"]
|
|
|
- geo = LineString(path).buffer(width / 2)
|
|
|
|
|
- if not geo.is_empty: poly_buffer.append(geo)
|
|
|
|
|
|
|
+
|
|
|
|
|
+ if follow:
|
|
|
|
|
+ geo = LineString(path)
|
|
|
|
|
+ else:
|
|
|
|
|
+ geo = LineString(path).buffer(width / 2)
|
|
|
|
|
+
|
|
|
|
|
+ if not geo.is_empty:
|
|
|
|
|
+ poly_buffer.append(geo)
|
|
|
|
|
|
|
|
# Reset path starting point
|
|
# Reset path starting point
|
|
|
path = [[current_x, current_y]]
|
|
path = [[current_x, current_y]]
|
|
|
|
|
|
|
|
# --- BUFFERED ---
|
|
# --- BUFFERED ---
|
|
|
# Draw the flash
|
|
# Draw the flash
|
|
|
|
|
+ if follow:
|
|
|
|
|
+ continue
|
|
|
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])
|
|
|
- if not flash.is_empty: poly_buffer.append(flash)
|
|
|
|
|
|
|
+ if not flash.is_empty:
|
|
|
|
|
+ poly_buffer.append(flash)
|
|
|
|
|
|
|
|
continue
|
|
continue
|
|
|
|
|
|
|
@@ -1858,8 +1872,13 @@ 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)
|
|
|
|
|
- if not buffered.is_empty: poly_buffer.append(buffered)
|
|
|
|
|
|
|
+
|
|
|
|
|
+ if follow:
|
|
|
|
|
+ buffered = LineString(path)
|
|
|
|
|
+ else:
|
|
|
|
|
+ buffered = LineString(path).buffer(width / 2)
|
|
|
|
|
+ if not buffered.is_empty:
|
|
|
|
|
+ poly_buffer.append(buffered)
|
|
|
|
|
|
|
|
current_x = x
|
|
current_x = x
|
|
|
current_y = y
|
|
current_y = y
|
|
@@ -1972,9 +1991,12 @@ class Gerber (Geometry):
|
|
|
log.debug("Bare op-code %d." % current_operation_code)
|
|
log.debug("Bare op-code %d." % current_operation_code)
|
|
|
# flash = Gerber.create_flash_geometry(Point(path[-1]),
|
|
# flash = Gerber.create_flash_geometry(Point(path[-1]),
|
|
|
# self.apertures[current_aperture])
|
|
# self.apertures[current_aperture])
|
|
|
|
|
+ if follow:
|
|
|
|
|
+ continue
|
|
|
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])
|
|
|
- if not flash.is_empty: 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))
|
|
|
|
|
|
|
@@ -1996,8 +2018,13 @@ 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)
|
|
|
|
|
- if not geo.is_empty: poly_buffer.append(geo)
|
|
|
|
|
|
|
+
|
|
|
|
|
+ if follow:
|
|
|
|
|
+ geo = LineString(path)
|
|
|
|
|
+ else:
|
|
|
|
|
+ geo = LineString(path).buffer(width/2)
|
|
|
|
|
+ if not geo.is_empty:
|
|
|
|
|
+ poly_buffer.append(geo)
|
|
|
|
|
|
|
|
path = [path[-1]]
|
|
path = [path[-1]]
|
|
|
|
|
|
|
@@ -2024,10 +2051,15 @@ class Gerber (Geometry):
|
|
|
# "aperture": last_path_aperture})
|
|
# "aperture": last_path_aperture})
|
|
|
|
|
|
|
|
# --- Buffered ---
|
|
# --- Buffered ---
|
|
|
- region = Polygon(path)
|
|
|
|
|
|
|
+ if follow:
|
|
|
|
|
+ region = Polygon()
|
|
|
|
|
+ else:
|
|
|
|
|
+ region = Polygon(path)
|
|
|
if not region.is_valid:
|
|
if not region.is_valid:
|
|
|
- region = region.buffer(0)
|
|
|
|
|
- if not region.is_empty: poly_buffer.append(region)
|
|
|
|
|
|
|
+ if not follow:
|
|
|
|
|
+ region = region.buffer(0)
|
|
|
|
|
+ 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
|
|
@@ -2060,8 +2092,14 @@ class Gerber (Geometry):
|
|
|
if len(path) > 1:
|
|
if len(path) > 1:
|
|
|
# --- Buffered ----
|
|
# --- Buffered ----
|
|
|
width = self.apertures[last_path_aperture]["size"]
|
|
width = self.apertures[last_path_aperture]["size"]
|
|
|
- geo = LineString(path).buffer(width / 2)
|
|
|
|
|
- if not geo.is_empty: poly_buffer.append(geo)
|
|
|
|
|
|
|
+
|
|
|
|
|
+ if follow:
|
|
|
|
|
+ geo = LineString(path)
|
|
|
|
|
+ else:
|
|
|
|
|
+ geo = LineString(path).buffer(width / 2)
|
|
|
|
|
+ if not geo.is_empty:
|
|
|
|
|
+ poly_buffer.append(geo)
|
|
|
|
|
+
|
|
|
path = [path[-1]]
|
|
path = [path[-1]]
|
|
|
|
|
|
|
|
continue
|
|
continue
|
|
@@ -2076,8 +2114,13 @@ 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)
|
|
|
|
|
- if not geo.is_empty: poly_buffer.append(geo)
|
|
|
|
|
|
|
+
|
|
|
|
|
+ if follow:
|
|
|
|
|
+ geo = LineString(path)
|
|
|
|
|
+ else:
|
|
|
|
|
+ geo = LineString(path).buffer(width / 2)
|
|
|
|
|
+ if not geo.is_empty:
|
|
|
|
|
+ poly_buffer.append(geo)
|
|
|
|
|
|
|
|
path = [path[-1]]
|
|
path = [path[-1]]
|
|
|
|
|
|
|
@@ -2148,10 +2191,18 @@ 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)
|
|
|
|
|
- if not geo.is_empty: poly_buffer.append(geo)
|
|
|
|
|
|
|
+ if follow:
|
|
|
|
|
+ geo = LineString(path)
|
|
|
|
|
+ else:
|
|
|
|
|
+ geo = LineString(path).buffer(width / 2)
|
|
|
|
|
+ if not geo.is_empty:
|
|
|
|
|
+ poly_buffer.append(geo)
|
|
|
|
|
|
|
|
# --- Apply buffer ---
|
|
# --- Apply buffer ---
|
|
|
|
|
+ if follow:
|
|
|
|
|
+ self.solid_geometry = poly_buffer
|
|
|
|
|
+ return
|
|
|
|
|
+
|
|
|
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...")
|
|
log.debug("Union by buffer...")
|