Refactored basic painting algorithm to generate FlatCAMRtreeStorage.

This commit is contained in:
jpcaram
2015-01-30 13:47:25 -05:00
parent 4389f173a8
commit 3aa1746b23
2 changed files with 26 additions and 9 deletions

View File

@@ -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.")

View File

@@ -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):