Explorar o código

Refactored basic painting algorithm to generate FlatCAMRtreeStorage.

jpcaram %!s(int64=11) %!d(string=hai) anos
pai
achega
3aa1746b23
Modificáronse 2 ficheiros con 26 adicións e 9 borrados
  1. 4 3
      FlatCAMApp.py
  2. 22 6
      camlib.py

+ 4 - 3
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.")
 

+ 22 - 6
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):