- 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:
parent
241cac8556
commit
d909b98130
|
@ -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
|
||||
|
||||
|
|
12
camlib.py
12
camlib.py
|
@ -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:
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Reference in New Issue