|
@@ -419,61 +419,65 @@ class CutOut(FlatCAMTool):
|
|
|
except TypeError:
|
|
except TypeError:
|
|
|
object_geo = [object_geo]
|
|
object_geo = [object_geo]
|
|
|
|
|
|
|
|
- for geo in object_geo:
|
|
|
|
|
- if isinstance(cutout_obj, FlatCAMGerber):
|
|
|
|
|
- geo = (geo.buffer(margin + abs(dia / 2))).exterior
|
|
|
|
|
-
|
|
|
|
|
- # Get min and max data for each object as we just cut rectangles across X or Y
|
|
|
|
|
- xmin, ymin, xmax, ymax = recursive_bounds(geo)
|
|
|
|
|
-
|
|
|
|
|
- px = 0.5 * (xmin + xmax) + margin
|
|
|
|
|
- py = 0.5 * (ymin + ymax) + margin
|
|
|
|
|
- lenx = (xmax - xmin) + (margin * 2)
|
|
|
|
|
- leny = (ymax - ymin) + (margin * 2)
|
|
|
|
|
-
|
|
|
|
|
- if gaps == '8' or gaps == '2LR':
|
|
|
|
|
- geo = self.subtract_poly_from_geo(geo,
|
|
|
|
|
- xmin - gapsize, # botleft_x
|
|
|
|
|
- py - gapsize + leny / 4, # botleft_y
|
|
|
|
|
- xmax + gapsize, # topright_x
|
|
|
|
|
- py + gapsize + leny / 4) # topright_y
|
|
|
|
|
- geo = self.subtract_poly_from_geo(geo,
|
|
|
|
|
- xmin - gapsize,
|
|
|
|
|
- py - gapsize - leny / 4,
|
|
|
|
|
- xmax + gapsize,
|
|
|
|
|
- py + gapsize - leny / 4)
|
|
|
|
|
-
|
|
|
|
|
- if gaps == '8' or gaps == '2TB':
|
|
|
|
|
- geo = self.subtract_poly_from_geo(geo,
|
|
|
|
|
- px - gapsize + lenx / 4,
|
|
|
|
|
- ymin - gapsize,
|
|
|
|
|
- px + gapsize + lenx / 4,
|
|
|
|
|
- ymax + gapsize)
|
|
|
|
|
- geo = self.subtract_poly_from_geo(geo,
|
|
|
|
|
- px - gapsize - lenx / 4,
|
|
|
|
|
- ymin - gapsize,
|
|
|
|
|
- px + gapsize - lenx / 4,
|
|
|
|
|
- ymax + gapsize)
|
|
|
|
|
-
|
|
|
|
|
- if gaps == '4' or gaps == 'LR':
|
|
|
|
|
- geo = self.subtract_poly_from_geo(geo,
|
|
|
|
|
- xmin - gapsize,
|
|
|
|
|
- py - gapsize,
|
|
|
|
|
- xmax + gapsize,
|
|
|
|
|
- py + gapsize)
|
|
|
|
|
-
|
|
|
|
|
- if gaps == '4' or gaps == 'TB':
|
|
|
|
|
- geo = self.subtract_poly_from_geo(geo,
|
|
|
|
|
- px - gapsize,
|
|
|
|
|
- ymin - gapsize,
|
|
|
|
|
- px + gapsize,
|
|
|
|
|
- ymax + gapsize)
|
|
|
|
|
|
|
+ # for geo in object_geo:
|
|
|
|
|
+ if isinstance(cutout_obj, FlatCAMGerber):
|
|
|
|
|
+ geo = (object_geo.buffer(margin + abs(dia / 2))).exterior
|
|
|
|
|
+ else:
|
|
|
|
|
+ geo = object_geo
|
|
|
|
|
+
|
|
|
|
|
+ geo = unary_union(geo)
|
|
|
|
|
+
|
|
|
|
|
+ # Get min and max data for each object as we just cut rectangles across X or Y
|
|
|
|
|
+ xmin, ymin, xmax, ymax = recursive_bounds(geo)
|
|
|
|
|
+
|
|
|
|
|
+ px = 0.5 * (xmin + xmax) + margin
|
|
|
|
|
+ py = 0.5 * (ymin + ymax) + margin
|
|
|
|
|
+ lenx = (xmax - xmin) + (margin * 2)
|
|
|
|
|
+ leny = (ymax - ymin) + (margin * 2)
|
|
|
|
|
+
|
|
|
|
|
+ if gaps == '8' or gaps == '2LR':
|
|
|
|
|
+ geo = self.subtract_poly_from_geo(geo,
|
|
|
|
|
+ xmin - gapsize, # botleft_x
|
|
|
|
|
+ py - gapsize + leny / 4, # botleft_y
|
|
|
|
|
+ xmax + gapsize, # topright_x
|
|
|
|
|
+ py + gapsize + leny / 4) # topright_y
|
|
|
|
|
+ geo = self.subtract_poly_from_geo(geo,
|
|
|
|
|
+ xmin - gapsize,
|
|
|
|
|
+ py - gapsize - leny / 4,
|
|
|
|
|
+ xmax + gapsize,
|
|
|
|
|
+ py + gapsize - leny / 4)
|
|
|
|
|
+
|
|
|
|
|
+ if gaps == '8' or gaps == '2TB':
|
|
|
|
|
+ geo = self.subtract_poly_from_geo(geo,
|
|
|
|
|
+ px - gapsize + lenx / 4,
|
|
|
|
|
+ ymin - gapsize,
|
|
|
|
|
+ px + gapsize + lenx / 4,
|
|
|
|
|
+ ymax + gapsize)
|
|
|
|
|
+ geo = self.subtract_poly_from_geo(geo,
|
|
|
|
|
+ px - gapsize - lenx / 4,
|
|
|
|
|
+ ymin - gapsize,
|
|
|
|
|
+ px + gapsize - lenx / 4,
|
|
|
|
|
+ ymax + gapsize)
|
|
|
|
|
+
|
|
|
|
|
+ if gaps == '4' or gaps == 'LR':
|
|
|
|
|
+ geo = self.subtract_poly_from_geo(geo,
|
|
|
|
|
+ xmin - gapsize,
|
|
|
|
|
+ py - gapsize,
|
|
|
|
|
+ xmax + gapsize,
|
|
|
|
|
+ py + gapsize)
|
|
|
|
|
+
|
|
|
|
|
+ if gaps == '4' or gaps == 'TB':
|
|
|
|
|
+ geo = self.subtract_poly_from_geo(geo,
|
|
|
|
|
+ px - gapsize,
|
|
|
|
|
+ ymin - gapsize,
|
|
|
|
|
+ px + gapsize,
|
|
|
|
|
+ ymax + gapsize)
|
|
|
|
|
|
|
|
- try:
|
|
|
|
|
- for g in geo:
|
|
|
|
|
- solid_geo.append(g)
|
|
|
|
|
- except TypeError:
|
|
|
|
|
- solid_geo.append(geo)
|
|
|
|
|
|
|
+ try:
|
|
|
|
|
+ for g in geo:
|
|
|
|
|
+ solid_geo.append(g)
|
|
|
|
|
+ except TypeError:
|
|
|
|
|
+ solid_geo.append(geo)
|
|
|
|
|
|
|
|
geo_obj.solid_geometry = deepcopy(solid_geo)
|
|
geo_obj.solid_geometry = deepcopy(solid_geo)
|
|
|
xmin, ymin, xmax, ymax = recursive_bounds(geo_obj.solid_geometry)
|
|
xmin, ymin, xmax, ymax = recursive_bounds(geo_obj.solid_geometry)
|
|
@@ -575,63 +579,63 @@ class CutOut(FlatCAMTool):
|
|
|
except TypeError:
|
|
except TypeError:
|
|
|
object_geo = [object_geo]
|
|
object_geo = [object_geo]
|
|
|
|
|
|
|
|
- for poly in object_geo:
|
|
|
|
|
-
|
|
|
|
|
- xmin, ymin, xmax, ymax = poly.bounds
|
|
|
|
|
- geo = box(xmin, ymin, xmax, ymax)
|
|
|
|
|
-
|
|
|
|
|
- # if Gerber create a buffer at a distance
|
|
|
|
|
- # if Geometry then cut through the geometry
|
|
|
|
|
- if isinstance(cutout_obj, FlatCAMGerber):
|
|
|
|
|
- geo = geo.buffer(margin + abs(dia / 2))
|
|
|
|
|
-
|
|
|
|
|
- px = 0.5 * (xmin + xmax) + margin
|
|
|
|
|
- py = 0.5 * (ymin + ymax) + margin
|
|
|
|
|
- lenx = (xmax - xmin) + (margin * 2)
|
|
|
|
|
- leny = (ymax - ymin) + (margin * 2)
|
|
|
|
|
-
|
|
|
|
|
- if gaps == '8' or gaps == '2LR':
|
|
|
|
|
- geo = self.subtract_poly_from_geo(geo,
|
|
|
|
|
- xmin - gapsize, # botleft_x
|
|
|
|
|
- py - gapsize + leny / 4, # botleft_y
|
|
|
|
|
- xmax + gapsize, # topright_x
|
|
|
|
|
- py + gapsize + leny / 4) # topright_y
|
|
|
|
|
- geo = self.subtract_poly_from_geo(geo,
|
|
|
|
|
- xmin - gapsize,
|
|
|
|
|
- py - gapsize - leny / 4,
|
|
|
|
|
- xmax + gapsize,
|
|
|
|
|
- py + gapsize - leny / 4)
|
|
|
|
|
-
|
|
|
|
|
- if gaps == '8' or gaps == '2TB':
|
|
|
|
|
- geo = self.subtract_poly_from_geo(geo,
|
|
|
|
|
- px - gapsize + lenx / 4,
|
|
|
|
|
- ymin - gapsize,
|
|
|
|
|
- px + gapsize + lenx / 4,
|
|
|
|
|
- ymax + gapsize)
|
|
|
|
|
- geo = self.subtract_poly_from_geo(geo,
|
|
|
|
|
- px - gapsize - lenx / 4,
|
|
|
|
|
- ymin - gapsize,
|
|
|
|
|
- px + gapsize - lenx / 4,
|
|
|
|
|
- ymax + gapsize)
|
|
|
|
|
-
|
|
|
|
|
- if gaps == '4' or gaps == 'LR':
|
|
|
|
|
- geo = self.subtract_poly_from_geo(geo,
|
|
|
|
|
- xmin - gapsize,
|
|
|
|
|
- py - gapsize,
|
|
|
|
|
- xmax + gapsize,
|
|
|
|
|
- py + gapsize)
|
|
|
|
|
-
|
|
|
|
|
- if gaps == '4' or gaps == 'TB':
|
|
|
|
|
- geo = self.subtract_poly_from_geo(geo,
|
|
|
|
|
- px - gapsize,
|
|
|
|
|
- ymin - gapsize,
|
|
|
|
|
- px + gapsize,
|
|
|
|
|
- ymax + gapsize)
|
|
|
|
|
- try:
|
|
|
|
|
- for g in geo:
|
|
|
|
|
- solid_geo.append(g)
|
|
|
|
|
- except TypeError:
|
|
|
|
|
- solid_geo.append(geo)
|
|
|
|
|
|
|
+ object_geo = unary_union(object_geo)
|
|
|
|
|
+
|
|
|
|
|
+ xmin, ymin, xmax, ymax = object_geo.bounds
|
|
|
|
|
+ geo = box(xmin, ymin, xmax, ymax)
|
|
|
|
|
+
|
|
|
|
|
+ # if Gerber create a buffer at a distance
|
|
|
|
|
+ # if Geometry then cut through the geometry
|
|
|
|
|
+ if isinstance(cutout_obj, FlatCAMGerber):
|
|
|
|
|
+ geo = geo.buffer(margin + abs(dia / 2))
|
|
|
|
|
+
|
|
|
|
|
+ px = 0.5 * (xmin + xmax) + margin
|
|
|
|
|
+ py = 0.5 * (ymin + ymax) + margin
|
|
|
|
|
+ lenx = (xmax - xmin) + (margin * 2)
|
|
|
|
|
+ leny = (ymax - ymin) + (margin * 2)
|
|
|
|
|
+
|
|
|
|
|
+ if gaps == '8' or gaps == '2LR':
|
|
|
|
|
+ geo = self.subtract_poly_from_geo(geo,
|
|
|
|
|
+ xmin - gapsize, # botleft_x
|
|
|
|
|
+ py - gapsize + leny / 4, # botleft_y
|
|
|
|
|
+ xmax + gapsize, # topright_x
|
|
|
|
|
+ py + gapsize + leny / 4) # topright_y
|
|
|
|
|
+ geo = self.subtract_poly_from_geo(geo,
|
|
|
|
|
+ xmin - gapsize,
|
|
|
|
|
+ py - gapsize - leny / 4,
|
|
|
|
|
+ xmax + gapsize,
|
|
|
|
|
+ py + gapsize - leny / 4)
|
|
|
|
|
+
|
|
|
|
|
+ if gaps == '8' or gaps == '2TB':
|
|
|
|
|
+ geo = self.subtract_poly_from_geo(geo,
|
|
|
|
|
+ px - gapsize + lenx / 4,
|
|
|
|
|
+ ymin - gapsize,
|
|
|
|
|
+ px + gapsize + lenx / 4,
|
|
|
|
|
+ ymax + gapsize)
|
|
|
|
|
+ geo = self.subtract_poly_from_geo(geo,
|
|
|
|
|
+ px - gapsize - lenx / 4,
|
|
|
|
|
+ ymin - gapsize,
|
|
|
|
|
+ px + gapsize - lenx / 4,
|
|
|
|
|
+ ymax + gapsize)
|
|
|
|
|
+
|
|
|
|
|
+ if gaps == '4' or gaps == 'LR':
|
|
|
|
|
+ geo = self.subtract_poly_from_geo(geo,
|
|
|
|
|
+ xmin - gapsize,
|
|
|
|
|
+ py - gapsize,
|
|
|
|
|
+ xmax + gapsize,
|
|
|
|
|
+ py + gapsize)
|
|
|
|
|
+
|
|
|
|
|
+ if gaps == '4' or gaps == 'TB':
|
|
|
|
|
+ geo = self.subtract_poly_from_geo(geo,
|
|
|
|
|
+ px - gapsize,
|
|
|
|
|
+ ymin - gapsize,
|
|
|
|
|
+ px + gapsize,
|
|
|
|
|
+ ymax + gapsize)
|
|
|
|
|
+ try:
|
|
|
|
|
+ for g in geo:
|
|
|
|
|
+ solid_geo.append(g)
|
|
|
|
|
+ except TypeError:
|
|
|
|
|
+ solid_geo.append(geo)
|
|
|
|
|
|
|
|
geo_obj.solid_geometry = deepcopy(solid_geo)
|
|
geo_obj.solid_geometry = deepcopy(solid_geo)
|
|
|
|
|
|