diff --git a/FlatCAMObj.py b/FlatCAMObj.py index 0064a1d5..64892be4 100644 --- a/FlatCAMObj.py +++ b/FlatCAMObj.py @@ -987,9 +987,12 @@ class FlatCAMGeometry(FlatCAMObj, Geometry): assert isinstance(geo_obj, FlatCAMGeometry) #assert isinstance(app_obj, App) - cp = self.clear_polygon(poly.buffer(-self.options["paintmargin"]), tooldia, overlap=overlap) if self.options["paintmethod"] == "seed": cp = self.clear_polygon2(poly.buffer(-self.options["paintmargin"]), tooldia, overlap=overlap) + + else: + cp = self.clear_polygon(poly.buffer(-self.options["paintmargin"]), tooldia, overlap=overlap) + geo_obj.solid_geometry = list(cp.get_objects()) geo_obj.options["cnctooldia"] = tooldia self.app.inform.emit("Done.") diff --git a/camlib.py b/camlib.py index a51b2b80..31cee105 100644 --- a/camlib.py +++ b/camlib.py @@ -331,6 +331,8 @@ class Geometry(object): :return: """ + assert type(polygon) == Polygon + ## The toolpaths # Index first and last points in paths def get_pts(o): @@ -347,9 +349,19 @@ class Geometry(object): while True: current = current.buffer(-tooldia * (1 - overlap)) if current.area > 0: - geoms.insert(current.exterior) - for i in current.interiors: - geoms.insert(i) + + # current can be a MultiPolygon + try: + for p in current: + geoms.insert(p.exterior) + for i in p.interiors: + geoms.insert(i) + + # Not a Multipolygon. + except TypeError: + geoms.insert(current.exterior) + for i in current.interiors: + geoms.insert(i) else: break return geoms