From 3aa1746b2318c8a0e0cedb2c20387785be847193 Mon Sep 17 00:00:00 2001 From: jpcaram Date: Fri, 30 Jan 2015 13:47:25 -0500 Subject: [PATCH] Refactored basic painting algorithm to generate FlatCAMRtreeStorage. --- FlatCAMApp.py | 7 ++++--- camlib.py | 28 ++++++++++++++++++++++------ 2 files changed, 26 insertions(+), 9 deletions(-) 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):