- added percentage display for work done in NCC Tool

This commit is contained in:
Marius Stanciu
2019-09-06 10:37:59 +03:00
committed by Marius
parent c1e079474d
commit 9f0b5d92db
2 changed files with 90 additions and 31 deletions

View File

@@ -13,6 +13,7 @@ CAD program, and create G-Code for Isolation routing.
- remade visibility threaded
- reimplemented the thread listening for new FlatCAM process starting with args so it is no longer subclassed but using the moveToThread function
- added percentage display for work done in NCC Tool
5.09.2019

View File

@@ -1324,6 +1324,8 @@ class NonCopperClear(FlatCAMTool, Gerber):
# ####### Read the parameters #########################################
# #####################################################################
units = self.app.ui.general_defaults_form.general_app_group.units_radio.get_value()
log.debug("Copper clearing started. Reading parameters.")
ncc_method = method if method else self.ncc_method_radio.get_value()
@@ -1611,7 +1613,13 @@ class NonCopperClear(FlatCAMTool, Gerber):
cp = None
for tool in sorted_tools:
log.debug("Starting geometry processing for tool: %s" % str(tool))
app_obj.inform.emit(_('[success] Non-Copper Clearing with ToolDia = %s started.') % str(tool))
app_obj.inform.emit(
'[success] %s %s%s %s: %d%%' % (_('Non-Copper Clearing with tool diameter = '),
str(tool),
units.lower(),
_('started. Progress'),
0)
)
cleared_geo[:] = []
# Get remaining tools offset
@@ -1628,13 +1636,18 @@ class NonCopperClear(FlatCAMTool, Gerber):
if type(area) is Polygon:
area = MultiPolygon([area])
# variables to display the percentage of work done
step = int(len(area.geoms) / 100)
disp_number = 0
old_disp_number = 0
log.warning("Total number of polygons to be cleared. %s" % str(len(area.geoms)))
log.warning("Step: %d" % step)
if area.geoms:
if len(area.geoms) > 0:
# pol_nr = 0
pol_nr = 0
for p in area.geoms:
if p is not None:
# pol_nr += 1
# log.debug("Polygons cleared: %d" % pol_nr)
try:
if isinstance(p, Polygon):
if ncc_method == 'standard':
@@ -1673,7 +1686,22 @@ class NonCopperClear(FlatCAMTool, Gerber):
app_obj.poly_not_cleared = True
continue
# check if there is a geometry at all in the cleared geometry
pol_nr += 1
disp_number = int(pol_nr / step)
# log.debug("Polygons cleared: %d" % pol_nr)
if disp_number > old_disp_number and disp_number <= 100:
app_obj.inform.emit(
'[success] %s %s%s %s: %d%%' % (_('Non-Copper Clearing with tool diameter = '),
str(tool),
units.lower(),
_('started. Progress'),
disp_number)
)
old_disp_number = disp_number
# log.debug("Polygons cleared: %d. Percentage done: %d%%" % (pol_nr, disp_number))
# check if there is a geometry at all in the cleared geometry
if cleared_geo:
# Overall cleared area
cleared = empty.buffer(-offset * (1 + overlap)).buffer(-tool / 1.999999).buffer(
@@ -1871,12 +1899,19 @@ class NonCopperClear(FlatCAMTool, Gerber):
area = empty.buffer(0)
log.debug("Copper clearing. Finished calculation of 'empty' area.")
# Generate area for each tool
while sorted_tools:
tool = sorted_tools.pop(0)
log.debug("Starting geometry processing for tool: %s" % str(tool))
app_obj.inform.emit(_('[success] Non-Copper Rest Clearing with ToolDia = %s started.') % str(tool))
app_obj.inform.emit(
'[success] %s %s%s %s: %d%%' % (_('Non-Copper Rest Clearing with tool diameter = '),
str(tool),
units.lower(),
_('started. Progress'),
0)
)
tool_used = tool - 1e-12
cleared_geo[:] = []
@@ -1901,8 +1936,16 @@ class NonCopperClear(FlatCAMTool, Gerber):
area = MultiPolygon(deepcopy(allparts))
allparts[:] = []
# variables to display the percentage of work done
step = int(len(area.geoms) / 100)
disp_number = 0
old_disp_number = 0
log.warning("Total number of polygons to be cleared. %s" % str(len(area.geoms)))
log.warning("Step: %d" % step)
if area.geoms:
if len(area.geoms) > 0:
pol_nr = 0
for p in area.geoms:
if p is not None:
if isinstance(p, Polygon):
@@ -1925,31 +1968,46 @@ class NonCopperClear(FlatCAMTool, Gerber):
# 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)
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)
pol_nr += 1
disp_number = int(pol_nr / step)
# log.debug("Polygons cleared: %d" % pol_nr)
if disp_number > old_disp_number and disp_number <= 100:
app_obj.inform.emit(
'[success] %s %s%s %s: %d%%' % (_('Non-Copper Clearing with tool diameter = '),
str(tool),
units.lower(),
_('started. Progress'),
disp_number)
)
old_disp_number = disp_number
# log.debug("Polygons cleared: %d. Percentage done: %d%%" % (pol_nr, disp_number))
# check if there is a geometry at all in the cleared geometry
if cleared_geo: