diff --git a/FlatCAMApp.py b/FlatCAMApp.py index c7ddc82f..d57bece9 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -742,7 +742,7 @@ class App(QtCore.QObject): else: # No: add a number! name += "_1" - # Create object + ## Create object classdict = { "gerber": FlatCAMGerber, "excellon": FlatCAMExcellon, @@ -771,11 +771,12 @@ class App(QtCore.QObject): self.log.debug("%f seconds executing initialize()." % (t2 - t1)) # Check units and convert if necessary + # This condition CAN be true because initialize() can change obj.units if self.options["units"].upper() != obj.units.upper(): self.inform.emit("Converting units to " + self.options["units"] + ".") obj.convert_units(self.options["units"]) - t3 = time.time() - self.log.debug("%f seconds converting units." % (t3 - t2)) + t3 = time.time() + self.log.debug("%f seconds converting units." % (t3 - t2)) FlatCAMApp.App.log.debug("Moving new object back to main thread.") diff --git a/camlib.py b/camlib.py index 9069d051..0c1189fb 100644 --- a/camlib.py +++ b/camlib.py @@ -316,7 +316,8 @@ class Geometry(object): boundary = self.solid_geometry.envelope return boundary.difference(self.solid_geometry) - def clear_polygon(self, polygon, tooldia, overlap=0.15): + @staticmethod + def clear_polygon(polygon, tooldia, overlap=0.15): """ Creates geometry inside a polygon for a tool to cover the whole area. @@ -329,14 +330,29 @@ class Geometry(object): :param overlap: Overlap of toolpasses. :return: """ - poly_cuts = [polygon.buffer(-tooldia / 2.0)] + + ## The toolpaths + # Index first and last points in paths + def get_pts(o): + return [o.coords[0], o.coords[-1]] + geoms = FlatCAMRTreeStorage() + geoms.get_points = get_pts + + current = polygon.buffer(-tooldia / 2.0) + + geoms.insert(current.exterior) + for i in current.interiors: + geoms.insert(i) + while True: - polygon = poly_cuts[-1].buffer(-tooldia * (1 - overlap)) - if polygon.area > 0: - poly_cuts.append(polygon) + current = current.buffer(-tooldia * (1 - overlap)) + if current.area > 0: + geoms.insert(current.exterior) + for i in current.interiors: + geoms.insert(i) else: break - return poly_cuts + return geoms @staticmethod def clear_polygon2(polygon, tooldia, seedpoint=None, overlap=0.15):