- 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

@ -22,6 +22,8 @@ CAD program, and create G-Code for Isolation routing.
- in Paint Tool and NCC Tool fixed the RMB click detection when Area selection is used
- finished the work on file extensions registration with FlatCAM. If the file extensions are deleted in the Preferences -> File Associations then those extensions are unregistered with FlatCAM
- fixed bug in NCC Tools and in SolderPaste Tool if in Edit -> Preferences only one tool is entered
- 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
2.09.2019

View File

@ -1027,9 +1027,15 @@ class Geometry(object):
# Add margin (contour) to storage
if contour:
geoms.insert(margin_poly.exterior)
for ints in margin_poly.interiors:
geoms.insert(ints)
if isinstance(margin_poly, Polygon):
geoms.insert(margin_poly.exterior)
for ints in margin_poly.interiors:
geoms.insert(ints)
elif isinstance(margin_poly, MultiPolygon):
for poly in margin_poly:
geoms.insert(poly.exterior)
for ints in poly.interiors:
geoms.insert(ints)
# Optimization: Reduce lifts
if connect:

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: