- fixed bug in camblib.clear_polygon3() which caused that some copper clearing / paintings were not complete (some polygons were not processed) when the Straight Lines method was used

- some changes in NCC Tools regarding of the clearing itself
This commit is contained in:
Marius Stanciu
2019-09-03 23:15:29 +03:00
committed by Marius
parent 241cac8556
commit d909b98130
3 changed files with 96 additions and 36 deletions

View File

@@ -1601,6 +1601,7 @@ class NonCopperClear(FlatCAMTool, Gerber):
if type(empty) is Polygon:
empty = MultiPolygon([empty])
cp = None
for tool in sorted_tools:
app_obj.inform.emit(_('[success] Non-Copper Clearing with ToolDia = %s started.') % str(tool))
cleared_geo[:] = []
@@ -1622,22 +1623,44 @@ class NonCopperClear(FlatCAMTool, Gerber):
if area.geoms:
if len(area.geoms) > 0:
for p in area.geoms:
try:
if ncc_method == 'standard':
cp = self.clear_polygon(p, tool, self.app.defaults["gerber_circle_steps"],
overlap=overlap, contour=contour, connect=connect)
elif ncc_method == 'seed':
cp = self.clear_polygon2(p, tool, self.app.defaults["gerber_circle_steps"],
overlap=overlap, contour=contour, connect=connect)
else:
cp = self.clear_polygon3(p, tool, self.app.defaults["gerber_circle_steps"],
overlap=overlap, contour=contour, connect=connect)
if cp:
cleared_geo += list(cp.get_objects())
except Exception as e:
log.warning("Polygon can not be cleared. %s" % str(e))
app_obj.poly_not_cleared = True
continue
if p is not None:
try:
if isinstance(p, Polygon):
if ncc_method == 'standard':
cp = self.clear_polygon(p, tool, self.app.defaults["gerber_circle_steps"],
overlap=overlap, contour=contour, connect=connect)
elif ncc_method == 'seed':
cp = self.clear_polygon2(p, tool, self.app.defaults["gerber_circle_steps"],
overlap=overlap, contour=contour, connect=connect)
else:
cp = self.clear_polygon3(p, tool, self.app.defaults["gerber_circle_steps"],
overlap=overlap, contour=contour, connect=connect)
if cp:
cleared_geo += list(cp.get_objects())
elif isinstance(p, MultiPolygon):
for pol in p:
if pol is not None:
if ncc_method == 'standard':
cp = self.clear_polygon(pol, tool,
self.app.defaults["gerber_circle_steps"],
overlap=overlap, contour=contour,
connect=connect)
elif ncc_method == 'seed':
cp = self.clear_polygon2(pol, tool,
self.app.defaults["gerber_circle_steps"],
overlap=overlap, contour=contour,
connect=connect)
else:
cp = self.clear_polygon3(pol, tool,
self.app.defaults["gerber_circle_steps"],
overlap=overlap, contour=contour,
connect=connect)
if cp:
cleared_geo += list(cp.get_objects())
except Exception as e:
log.warning("Polygon can not be cleared. %s" % str(e))
app_obj.poly_not_cleared = True
continue
# check if there is a geometry at all in the cleared geometry
if cleared_geo:
@@ -1866,23 +1889,52 @@ class NonCopperClear(FlatCAMTool, Gerber):
if area.geoms:
if len(area.geoms) > 0:
for p in area.geoms:
try:
if ncc_method == 'standard':
cp = self.clear_polygon(p, tool_used, self.app.defaults["gerber_circle_steps"],
overlap=overlap, contour=contour, connect=connect)
elif ncc_method == 'seed':
cp = self.clear_polygon2(p, tool_used,
self.app.defaults["gerber_circle_steps"],
overlap=overlap, contour=contour, connect=connect)
else:
cp = self.clear_polygon3(p, tool_used,
self.app.defaults["gerber_circle_steps"],
overlap=overlap, contour=contour, connect=connect)
cleared_geo.append(list(cp.get_objects()))
except:
log.warning("Polygon can't be cleared.")
# this polygon should be added to a list and then try clear it with a smaller tool
rest_geo.append(p)
if p is not None:
if isinstance(p, Polygon):
try:
if ncc_method == 'standard':
cp = self.clear_polygon(p, tool_used,
self.app.defaults["gerber_circle_steps"],
overlap=overlap, contour=contour, connect=connect)
elif ncc_method == 'seed':
cp = self.clear_polygon2(p, tool_used,
self.app.defaults["gerber_circle_steps"],
overlap=overlap, contour=contour, connect=connect)
else:
cp = self.clear_polygon3(p, tool_used,
self.app.defaults["gerber_circle_steps"],
overlap=overlap, contour=contour, connect=connect)
cleared_geo.append(list(cp.get_objects()))
except Exception as e:
log.warning("Polygon can't be cleared. %s" % str(e))
# this polygon should be added to a list and then try clear it with
# a smaller tool
rest_geo.append(p)
elif isinstance(p, MultiPolygon):
for poly in p:
if poly is not None:
try:
if ncc_method == 'standard':
cp = self.clear_polygon(poly, tool_used,
self.app.defaults["gerber_circle_steps"],
overlap=overlap, contour=contour,
connect=connect)
elif ncc_method == 'seed':
cp = self.clear_polygon2(poly, tool_used,
self.app.defaults["gerber_circle_steps"],
overlap=overlap, contour=contour,
connect=connect)
else:
cp = self.clear_polygon3(poly, tool_used,
self.app.defaults["gerber_circle_steps"],
overlap=overlap, contour=contour,
connect=connect)
cleared_geo.append(list(cp.get_objects()))
except Exception as e:
log.warning("Polygon can't be cleared. %s" % str(e))
# this polygon should be added to a list and then try clear it with
# a smaller tool
rest_geo.append(poly)
# check if there is a geometry at all in the cleared geometry
if cleared_geo: