Procházet zdrojové kódy

- more customization for the progress display in case of NCC Tool, Paint Tool and for the Gcode generation

Marius Stanciu před 6 roky
rodič
revize
24e29bda55
5 změnil soubory, kde provedl 293 přidání a 232 odebrání
  1. 1 0
      README.md
  2. 45 35
      camlib.py
  3. 73 51
      flatcamTools/ToolNonCopperClear.py
  4. 41 48
      flatcamTools/ToolPaint.py
  5. 133 98
      locale_template/strings.pot

+ 1 - 0
README.md

@@ -19,6 +19,7 @@ CAD program, and create G-Code for Isolation routing.
 - added progress display in status bar for generating CNCJob from Excellon objects
 - added progress display in status bar for generating CNCJob from Excellon objects
 - added progress display in status bar for generating CNCJob from Geometry objects
 - added progress display in status bar for generating CNCJob from Geometry objects
 - modified all the FlatCAM tools strings to the new format in which the status is no longer included in the translated strings to make it easier for the future translations
 - modified all the FlatCAM tools strings to the new format in which the status is no longer included in the translated strings to make it easier for the future translations
+- more customization for the progress display in case of NCC Tool, Paint Tool and for the Gcode generation
 - updated POT file with the new strings
 - updated POT file with the new strings
 
 
 5.09.2019
 5.09.2019

+ 45 - 35
camlib.py

@@ -5438,6 +5438,12 @@ class CNCjob(Geometry):
                             else:
                             else:
                                 current_tooldia = float('%.4f' % float(exobj.tools[tool]["C"]))
                                 current_tooldia = float('%.4f' % float(exobj.tools[tool]["C"]))
 
 
+                            self.app.inform.emit(
+                                '%s: %s%s.' % (_("Starting G-Code for tool with diameter"),
+                                               str(current_tooldia),
+                                               str(self.units))
+                            )
+
                             # TODO apply offset only when using the GUI, for TclCommand this will create an error
                             # TODO apply offset only when using the GUI, for TclCommand this will create an error
                             # because the values for Z offset are created in build_ui()
                             # because the values for Z offset are created in build_ui()
                             try:
                             try:
@@ -5481,13 +5487,7 @@ class CNCjob(Geometry):
                                     disp_number = int(np.interp(loc_nr, [0, geo_len], [0, 99]))
                                     disp_number = int(np.interp(loc_nr, [0, geo_len], [0, 99]))
 
 
                                     if old_disp_number < disp_number <= 100:
                                     if old_disp_number < disp_number <= 100:
-                                        self.app.inform.emit(
-                                            '%s: %s%s. %s: %d%%' % (_("Starting G-Code for tool with diameter"),
-                                                                    str(current_tooldia),
-                                                                    str(self.units),
-                                                                    _("Progress"),
-                                                                    disp_number)
-                                        )
+                                        self.app.proc_container.update_view_text(' %d%%' % disp_number)
                                         old_disp_number = disp_number
                                         old_disp_number = disp_number
 
 
                             else:
                             else:
@@ -5570,6 +5570,12 @@ class CNCjob(Geometry):
                             else:
                             else:
                                 current_tooldia = float('%.4f' % float(exobj.tools[tool]["C"]))
                                 current_tooldia = float('%.4f' % float(exobj.tools[tool]["C"]))
 
 
+                            self.app.inform.emit(
+                                '%s: %s%s.' % (_("Starting G-Code for tool with diameter"),
+                                               str(current_tooldia),
+                                               str(self.units))
+                            )
+
                             # TODO apply offset only when using the GUI, for TclCommand this will create an error
                             # TODO apply offset only when using the GUI, for TclCommand this will create an error
                             # because the values for Z offset are created in build_ui()
                             # because the values for Z offset are created in build_ui()
                             try:
                             try:
@@ -5613,13 +5619,7 @@ class CNCjob(Geometry):
                                     disp_number = int(np.interp(loc_nr, [0, geo_len], [0, 99]))
                                     disp_number = int(np.interp(loc_nr, [0, geo_len], [0, 99]))
 
 
                                     if old_disp_number < disp_number <= 100:
                                     if old_disp_number < disp_number <= 100:
-                                        self.app.inform.emit(
-                                            '%s: %s%s. %s: %d%%' % (_("Starting G-Code for tool with diameter"),
-                                                                    str(current_tooldia),
-                                                                    str(self.units),
-                                                                    _("Progress"),
-                                                                    disp_number)
-                                        )
+                                        self.app.proc_container.update_view_text(' %d%%' % disp_number)
                                         old_disp_number = disp_number
                                         old_disp_number = disp_number
 
 
                             else:
                             else:
@@ -5661,6 +5661,12 @@ class CNCjob(Geometry):
                         else:
                         else:
                             current_tooldia = float('%.4f' % float(exobj.tools[tool]["C"]))
                             current_tooldia = float('%.4f' % float(exobj.tools[tool]["C"]))
 
 
+                        self.app.inform.emit(
+                            '%s: %s%s.' % (_("Starting G-Code for tool with diameter"),
+                                           str(current_tooldia),
+                                           str(self.units))
+                        )
+
                         # TODO apply offset only when using the GUI, for TclCommand this will create an error
                         # TODO apply offset only when using the GUI, for TclCommand this will create an error
                         # because the values for Z offset are created in build_ui()
                         # because the values for Z offset are created in build_ui()
                         try:
                         try:
@@ -5706,13 +5712,7 @@ class CNCjob(Geometry):
                                 disp_number = int(np.interp(loc_nr, [0, geo_len], [0, 99]))
                                 disp_number = int(np.interp(loc_nr, [0, geo_len], [0, 99]))
 
 
                                 if old_disp_number < disp_number <= 100:
                                 if old_disp_number < disp_number <= 100:
-                                    self.app.inform.emit(
-                                        '%s: %s%s. %s: %d%%' % (_("Starting G-Code for tool with diameter"),
-                                                                str(current_tooldia),
-                                                                str(self.units),
-                                                                _("Progress"),
-                                                                disp_number)
-                                    )
+                                    self.app.proc_container.update_view_text(' %d%%' % disp_number)
                                     old_disp_number = disp_number
                                     old_disp_number = disp_number
                         else:
                         else:
                             self.app.inform.emit(_('[ERROR_NOTCL] G91 coordinates not implemented ...'))
                             self.app.inform.emit(_('[ERROR_NOTCL] G91 coordinates not implemented ...'))
@@ -5944,6 +5944,12 @@ class CNCjob(Geometry):
         else:
         else:
             current_tooldia = float('%.4f' % float(self.tooldia))
             current_tooldia = float('%.4f' % float(self.tooldia))
 
 
+        self.app.inform.emit(
+            '%s: %s%s.' % (_("Starting G-Code for tool with diameter"),
+                           str(current_tooldia),
+                           str(self.units))
+        )
+
         pt, geo = storage.nearest(current_pt)
         pt, geo = storage.nearest(current_pt)
 
 
         try:
         try:
@@ -5988,13 +5994,7 @@ class CNCjob(Geometry):
 
 
                 disp_number = int(np.interp(path_count, [0, geo_len], [0, 99]))
                 disp_number = int(np.interp(path_count, [0, geo_len], [0, 99]))
                 if old_disp_number < disp_number <= 100:
                 if old_disp_number < disp_number <= 100:
-                    self.app.inform.emit(
-                        '%s: %s%s. %s: %d%%' % (_("Starting G-Code for tool with diameter"),
-                                                str(current_tooldia),
-                                                str(self.units),
-                                                _("Progress"),
-                                                disp_number)
-                    )
+                    self.app.proc_container.update_view_text(' %d%%' % disp_number)
                     old_disp_number = disp_number
                     old_disp_number = disp_number
         except StopIteration:  # Nothing found in storage.
         except StopIteration:  # Nothing found in storage.
             pass
             pass
@@ -6263,6 +6263,12 @@ class CNCjob(Geometry):
         else:
         else:
             current_tooldia = float('%.4f' % float(self.tooldia))
             current_tooldia = float('%.4f' % float(self.tooldia))
 
 
+        self.app.inform.emit(
+            '%s: %s%s.' % (_("Starting G-Code for tool with diameter"),
+                           str(current_tooldia),
+                           str(self.units))
+        )
+
         path_count = 0
         path_count = 0
         current_pt = (0, 0)
         current_pt = (0, 0)
         pt, geo = storage.nearest(current_pt)
         pt, geo = storage.nearest(current_pt)
@@ -6307,13 +6313,7 @@ class CNCjob(Geometry):
 
 
                 disp_number = int(np.interp(path_count, [0, geo_len], [0, 99]))
                 disp_number = int(np.interp(path_count, [0, geo_len], [0, 99]))
                 if old_disp_number < disp_number <= 100:
                 if old_disp_number < disp_number <= 100:
-                    self.app.inform.emit(
-                        '%s: %s%s. %s: %d%%' % (_("Starting G-Code for tool with diameter"),
-                                                str(current_tooldia),
-                                                str(self.units),
-                                                _("Progress"),
-                                                disp_number)
-                    )
+                    self.app.proc_container.update_view_text(' %d%%' % disp_number)
                     old_disp_number = disp_number
                     old_disp_number = disp_number
         except StopIteration:  # Nothing found in storage.
         except StopIteration:  # Nothing found in storage.
             pass
             pass
@@ -6406,6 +6406,11 @@ class CNCjob(Geometry):
         path_count = 0
         path_count = 0
         current_pt = (0, 0)
         current_pt = (0, 0)
 
 
+        # variables to display the percentage of work done
+        geo_len = len(flat_geometry)
+        disp_number = 0
+        old_disp_number = 0
+
         pt, geo = storage.nearest(current_pt)
         pt, geo = storage.nearest(current_pt)
 
 
         try:
         try:
@@ -6424,10 +6429,15 @@ class CNCjob(Geometry):
                 current_pt = geo.coords[-1]
                 current_pt = geo.coords[-1]
                 pt, geo = storage.nearest(current_pt)  # Next
                 pt, geo = storage.nearest(current_pt)  # Next
 
 
+                disp_number = int(np.interp(path_count, [0, geo_len], [0, 99]))
+                if old_disp_number < disp_number <= 100:
+                    self.app.proc_container.update_view_text(' %d%%' % disp_number)
+                    old_disp_number = disp_number
         except StopIteration:  # Nothing found in storage.
         except StopIteration:  # Nothing found in storage.
             pass
             pass
 
 
         log.debug("Finishing SolderPste G-Code... %s paths traced." % path_count)
         log.debug("Finishing SolderPste G-Code... %s paths traced." % path_count)
+        self.app.inform.emit(_("Finished SolderPste G-Code generation... %s paths traced.") % str(path_count))
 
 
         # Finish
         # Finish
         self.gcode += self.doformat(p.lift_code)
         self.gcode += self.doformat(p.lift_code)

+ 73 - 51
flatcamTools/ToolNonCopperClear.py

@@ -1323,7 +1323,9 @@ class NonCopperClear(FlatCAMTool, Gerber):
 
 
         units = self.app.ui.general_defaults_form.general_app_group.units_radio.get_value()
         units = self.app.ui.general_defaults_form.general_app_group.units_radio.get_value()
 
 
-        log.debug("Copper clearing started. Reading parameters.")
+        log.debug("NCC Tool started. Reading parameters.")
+        self.app.inform.emit(_("NCC Tool started. Reading parameters."))
+
         ncc_method = method if method else self.ncc_method_radio.get_value()
         ncc_method = method if method else self.ncc_method_radio.get_value()
 
 
         if margin is not None:
         if margin is not None:
@@ -1385,7 +1387,9 @@ class NonCopperClear(FlatCAMTool, Gerber):
         # ##############################################################################################################
         # ##############################################################################################################
         # Prepare non-copper polygons. Create the bounding box area from which the copper features will be subtracted ##
         # Prepare non-copper polygons. Create the bounding box area from which the copper features will be subtracted ##
         # ##############################################################################################################
         # ##############################################################################################################
-        log.debug("Copper clearing. Preparing non-copper polygons.")
+        log.debug("NCC Tool. Preparing non-copper polygons.")
+        self.app.inform.emit(_("NCC Tool. Preparing non-copper polygons."))
+
         try:
         try:
             if sel_obj is None or sel_obj == 'itself':
             if sel_obj is None or sel_obj == 'itself':
                 ncc_sel_obj = ncc_obj
                 ncc_sel_obj = ncc_obj
@@ -1414,6 +1418,7 @@ class NonCopperClear(FlatCAMTool, Gerber):
                 log.debug("NonCopperClear.clear_copper() 'itself'  --> %s" % str(e))
                 log.debug("NonCopperClear.clear_copper() 'itself'  --> %s" % str(e))
                 self.app.inform.emit('[ERROR_NOTCL] %s' % _("No object available."))
                 self.app.inform.emit('[ERROR_NOTCL] %s' % _("No object available."))
                 return 'fail'
                 return 'fail'
+
         elif ncc_select == 'area':
         elif ncc_select == 'area':
             geo_n = cascaded_union(self.sel_rect)
             geo_n = cascaded_union(self.sel_rect)
             try:
             try:
@@ -1427,6 +1432,7 @@ class NonCopperClear(FlatCAMTool, Gerber):
                 geo_buff_list.append(poly.buffer(distance=ncc_margin, join_style=base.JOIN_STYLE.mitre))
                 geo_buff_list.append(poly.buffer(distance=ncc_margin, join_style=base.JOIN_STYLE.mitre))
 
 
             bounding_box = cascaded_union(geo_buff_list)
             bounding_box = cascaded_union(geo_buff_list)
+
         elif ncc_select == 'box':
         elif ncc_select == 'box':
             geo_n = ncc_sel_obj.solid_geometry
             geo_n = ncc_sel_obj.solid_geometry
             if isinstance(ncc_sel_obj, FlatCAMGeometry):
             if isinstance(ncc_sel_obj, FlatCAMGeometry):
@@ -1449,7 +1455,7 @@ class NonCopperClear(FlatCAMTool, Gerber):
                 self.app.inform.emit('[ERROR_NOTCL] %s' % _("The reference object type is not supported."))
                 self.app.inform.emit('[ERROR_NOTCL] %s' % _("The reference object type is not supported."))
                 return 'fail'
                 return 'fail'
 
 
-        log.debug("Copper clearing. Finished non-copper polygons.")
+        log.debug("NCC Tool. Finished non-copper polygons.")
         # ########################################################################################################
         # ########################################################################################################
         # set the name for the future Geometry object
         # set the name for the future Geometry object
         # I do it here because it is also stored inside the gen_clear_area() and gen_clear_area_rest() methods
         # I do it here because it is also stored inside the gen_clear_area() and gen_clear_area_rest() methods
@@ -1467,7 +1473,8 @@ class NonCopperClear(FlatCAMTool, Gerber):
             assert isinstance(geo_obj, FlatCAMGeometry), \
             assert isinstance(geo_obj, FlatCAMGeometry), \
                 "Initializer expected a FlatCAMGeometry, got %s" % type(geo_obj)
                 "Initializer expected a FlatCAMGeometry, got %s" % type(geo_obj)
 
 
-            log.debug("Copper clearing. Normal copper clearing task started.")
+            log.debug("NCC Tool. Normal copper clearing task started.")
+            self.app.inform.emit(_("NCC Tool. Finished non-copper polygons. Normal copper clearing task started."))
 
 
             # a flag to signal that the isolation is broken by the bounding box in 'area' and 'box' cases
             # a flag to signal that the isolation is broken by the bounding box in 'area' and 'box' cases
             # will store the number of tools for which the isolation is broken
             # will store the number of tools for which the isolation is broken
@@ -1498,13 +1505,17 @@ class NonCopperClear(FlatCAMTool, Gerber):
             # ###################################################################################################
             # ###################################################################################################
             # Calculate the empty area by subtracting the solid_geometry from the object bounding box geometry ##
             # Calculate the empty area by subtracting the solid_geometry from the object bounding box geometry ##
             # ###################################################################################################
             # ###################################################################################################
-            log.debug("Copper clearing. Calculate 'empty' area.")
+            log.debug("NCC Tool. Calculate 'empty' area.")
+            self.app.inform.emit(_("NCC Tool. Calculate 'empty' area."))
+
             if isinstance(ncc_obj, FlatCAMGerber) and not isotooldia:
             if isinstance(ncc_obj, FlatCAMGerber) and not isotooldia:
                 sol_geo = ncc_obj.solid_geometry
                 sol_geo = ncc_obj.solid_geometry
                 if has_offset is True:
                 if has_offset is True:
-                    app_obj.inform.emit('[WARNING_NOTCL] %s' % _("Buffering ..."))
+                    app_obj.inform.emit('[WARNING_NOTCL] %s ...' %
+                                        _("Buffering"))
                     sol_geo = sol_geo.buffer(distance=ncc_offset)
                     sol_geo = sol_geo.buffer(distance=ncc_offset)
-                    app_obj.inform.emit('[success] %s' % _("Buffering finished ..."))
+                    app_obj.inform.emit('[success] %s ...' %
+                                        _("Buffering finished"))
                 empty = self.get_ncc_empty_area(target=sol_geo, boundary=bounding_box)
                 empty = self.get_ncc_empty_area(target=sol_geo, boundary=bounding_box)
             elif isinstance(ncc_obj, FlatCAMGerber) and isotooldia:
             elif isinstance(ncc_obj, FlatCAMGerber) and isotooldia:
                 isolated_geo = []
                 isolated_geo = []
@@ -1582,19 +1593,24 @@ class NonCopperClear(FlatCAMTool, Gerber):
 
 
                 sol_geo = cascaded_union(isolated_geo)
                 sol_geo = cascaded_union(isolated_geo)
                 if has_offset is True:
                 if has_offset is True:
-                    app_obj.inform.emit(_("[WARNING_NOTCL] Buffering ..."))
+                    app_obj.inform.emit('[WARNING_NOTCL] %s ...' %
+                                        _("Buffering"))
                     sol_geo = sol_geo.buffer(distance=ncc_offset)
                     sol_geo = sol_geo.buffer(distance=ncc_offset)
-                    app_obj.inform.emit('[success] %s' % _("Buffering finished ..."))
+                    app_obj.inform.emit('[success] %s ...' %
+                                        _("Buffering finished"))
                 empty = self.get_ncc_empty_area(target=sol_geo, boundary=bounding_box)
                 empty = self.get_ncc_empty_area(target=sol_geo, boundary=bounding_box)
             elif isinstance(ncc_obj, FlatCAMGeometry):
             elif isinstance(ncc_obj, FlatCAMGeometry):
                 sol_geo = cascaded_union(ncc_obj.solid_geometry)
                 sol_geo = cascaded_union(ncc_obj.solid_geometry)
                 if has_offset is True:
                 if has_offset is True:
-                    app_obj.inform.emit(_("[WARNING_NOTCL] Buffering ..."))
+                    app_obj.inform.emit('[WARNING_NOTCL] %s ...' %
+                                        _("Buffering"))
                     sol_geo = sol_geo.buffer(distance=ncc_offset)
                     sol_geo = sol_geo.buffer(distance=ncc_offset)
-                    app_obj.inform.emit('[success] %' % _("Buffering finished ..."))
+                    app_obj.inform.emit('[success] %s ...' %
+                                        _("Buffering finished"))
                 empty = self.get_ncc_empty_area(target=sol_geo, boundary=bounding_box)
                 empty = self.get_ncc_empty_area(target=sol_geo, boundary=bounding_box)
             else:
             else:
-                app_obj.inform.emit('[ERROR_NOTCL] %' % _('The selected object is not suitable for copper clearing.'))
+                app_obj.inform.emit('[ERROR_NOTCL] %s' %
+                                    _('The selected object is not suitable for copper clearing.'))
                 return
                 return
 
 
             if empty.is_empty:
             if empty.is_empty:
@@ -1605,17 +1621,20 @@ class NonCopperClear(FlatCAMTool, Gerber):
             if type(empty) is Polygon:
             if type(empty) is Polygon:
                 empty = MultiPolygon([empty])
                 empty = MultiPolygon([empty])
 
 
-            log.debug("Copper clearing. Finished calculation of 'empty' area.")
+            log.debug("NCC Tool. Finished calculation of 'empty' area.")
+            self.app.inform.emit(_("NCC Tool. Finished calculation of 'empty' area."))
+
             cp = None
             cp = None
             for tool in sorted_tools:
             for tool in sorted_tools:
                 log.debug("Starting geometry processing for tool: %s" % str(tool))
                 log.debug("Starting geometry processing for tool: %s" % str(tool))
                 app_obj.inform.emit(
                 app_obj.inform.emit(
-                    '[success] %s %s%s %s: %d%%' % (_('Non-Copper Clearing with tool diameter = '),
-                                                    str(tool),
-                                                    units.lower(),
-                                                    _('started. Progress'),
-                                                    0)
+                    '[success] %s %s%s %s' % (_('NCC Tool clearing with tool diameter = '),
+                                              str(tool),
+                                              units.lower(),
+                                              _('started.'))
                 )
                 )
+                app_obj.proc_container.update_view_text(' %d%%' % 0)
+
                 cleared_geo[:] = []
                 cleared_geo[:] = []
 
 
                 # Get remaining tools offset
                 # Get remaining tools offset
@@ -1686,13 +1705,7 @@ class NonCopperClear(FlatCAMTool, Gerber):
                                 # log.debug("Polygons cleared: %d" % pol_nr)
                                 # log.debug("Polygons cleared: %d" % pol_nr)
 
 
                                 if old_disp_number < disp_number <= 100:
                                 if old_disp_number < 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)
-                                    )
+                                    self.app.proc_container.update_view_text(' %d%%' % disp_number)
                                     old_disp_number = disp_number
                                     old_disp_number = disp_number
                                     # log.debug("Polygons cleared: %d. Percentage done: %d%%" % (pol_nr, disp_number))
                                     # log.debug("Polygons cleared: %d. Percentage done: %d%%" % (pol_nr, disp_number))
 
 
@@ -1753,9 +1766,9 @@ class NonCopperClear(FlatCAMTool, Gerber):
             # print("Indexing...", end=' ')
             # print("Indexing...", end=' ')
             # geo_obj.make_index()
             # geo_obj.make_index()
             if warning_flag == 0:
             if warning_flag == 0:
-                self.app.inform.emit('[success] %s' % _("Non-Copper clear all done."))
+                self.app.inform.emit('[success] %s' % _("NCC Tool clear all done."))
             else:
             else:
-                self.app.inform.emit('[WARNING] %s: %s %s.' % (_("Non-Copper clear all done but the copper features "
+                self.app.inform.emit('[WARNING] %s: %s %s.' % (_("NCC Tool clear all done but the copper features "
                                                                  "isolation is broken for"),
                                                                  "isolation is broken for"),
                                                                str(warning_flag),
                                                                str(warning_flag),
                                                                _("tools")))
                                                                _("tools")))
@@ -1767,7 +1780,9 @@ class NonCopperClear(FlatCAMTool, Gerber):
             assert isinstance(geo_obj, FlatCAMGeometry), \
             assert isinstance(geo_obj, FlatCAMGeometry), \
                 "Initializer expected a FlatCAMGeometry, got %s" % type(geo_obj)
                 "Initializer expected a FlatCAMGeometry, got %s" % type(geo_obj)
 
 
-            log.debug("Copper clearing. Rest machining copper clearing task started.")
+            log.debug("NCC Tool. Rest machining copper clearing task started.")
+            app_obj.inform.emit('_(NCC Tool. Rest machining copper clearing task started.')
+
             # a flag to signal that the isolation is broken by the bounding box in 'area' and 'box' cases
             # a flag to signal that the isolation is broken by the bounding box in 'area' and 'box' cases
             # will store the number of tools for which the isolation is broken
             # will store the number of tools for which the isolation is broken
             warning_flag = 0
             warning_flag = 0
@@ -1785,17 +1800,22 @@ class NonCopperClear(FlatCAMTool, Gerber):
 
 
             # repurposed flag for final object, geo_obj. True if it has any solid_geometry, False if not.
             # repurposed flag for final object, geo_obj. True if it has any solid_geometry, False if not.
             app_obj.poly_not_cleared = True
             app_obj.poly_not_cleared = True
-            log.debug("Copper clearing. Calculate 'empty' area.")
+            log.debug("NCC Tool. Calculate 'empty' area.")
+            app_obj.inform.emit("NCC Tool. Calculate 'empty' area.")
+
             # ###################################################################################################
             # ###################################################################################################
             # Calculate the empty area by subtracting the solid_geometry from the object bounding box geometry ##
             # Calculate the empty area by subtracting the solid_geometry from the object bounding box geometry ##
             # ###################################################################################################
             # ###################################################################################################
             if isinstance(ncc_obj, FlatCAMGerber) and not isotooldia:
             if isinstance(ncc_obj, FlatCAMGerber) and not isotooldia:
                 sol_geo = ncc_obj.solid_geometry
                 sol_geo = ncc_obj.solid_geometry
                 if has_offset is True:
                 if has_offset is True:
-                    app_obj.inform.emit('[WARNING_NOTCL] %s' % _("Buffering ..."))
+                    app_obj.inform.emit('[WARNING_NOTCL] %s ...' %
+                                        _("Buffering"))
                     sol_geo = sol_geo.buffer(distance=ncc_offset)
                     sol_geo = sol_geo.buffer(distance=ncc_offset)
-                    app_obj.inform.emit('[success] %s' % _("Buffering finished ..."))
+                    app_obj.inform.emit('[success] %s ...' %
+                                        _("Buffering finished"))
                 empty = self.get_ncc_empty_area(target=sol_geo, boundary=bounding_box)
                 empty = self.get_ncc_empty_area(target=sol_geo, boundary=bounding_box)
+
             elif isinstance(ncc_obj, FlatCAMGerber) and isotooldia:
             elif isinstance(ncc_obj, FlatCAMGerber) and isotooldia:
                 isolated_geo = []
                 isolated_geo = []
                 self.solid_geometry = ncc_obj.solid_geometry
                 self.solid_geometry = ncc_obj.solid_geometry
@@ -1872,19 +1892,26 @@ class NonCopperClear(FlatCAMTool, Gerber):
 
 
                 sol_geo = cascaded_union(isolated_geo)
                 sol_geo = cascaded_union(isolated_geo)
                 if has_offset is True:
                 if has_offset is True:
-                    app_obj.inform.emit('[WARNING_NOTCL] %s' % _("Buffering ..."))
+                    app_obj.inform.emit('[WARNING_NOTCL] %s ...' %
+                                        _("Buffering"))
                     sol_geo = sol_geo.buffer(distance=ncc_offset)
                     sol_geo = sol_geo.buffer(distance=ncc_offset)
-                    app_obj.inform.emit('[success] %s' % _("Buffering finished ..."))
+                    app_obj.inform.emit('[success] %s ...' %
+                                        _("Buffering finished"))
                 empty = self.get_ncc_empty_area(target=sol_geo, boundary=bounding_box)
                 empty = self.get_ncc_empty_area(target=sol_geo, boundary=bounding_box)
+
             elif isinstance(ncc_obj, FlatCAMGeometry):
             elif isinstance(ncc_obj, FlatCAMGeometry):
                 sol_geo = cascaded_union(ncc_obj.solid_geometry)
                 sol_geo = cascaded_union(ncc_obj.solid_geometry)
                 if has_offset is True:
                 if has_offset is True:
-                    app_obj.inform.emit(_("[WARNING_NOTCL] Buffering ..."))
+                    app_obj.inform.emit('[WARNING_NOTCL] %s ...' %
+                                        _("Buffering"))
                     sol_geo = sol_geo.buffer(distance=ncc_offset)
                     sol_geo = sol_geo.buffer(distance=ncc_offset)
-                    app_obj.inform.emit('[success] %s' % _("Buffering finished ..."))
+                    app_obj.inform.emit('[success] %s ...' %
+                                        _("Buffering finished"))
                 empty = self.get_ncc_empty_area(target=sol_geo, boundary=bounding_box)
                 empty = self.get_ncc_empty_area(target=sol_geo, boundary=bounding_box)
+
             else:
             else:
-                app_obj.inform.emit('[ERROR_NOTCL] %s' % _('The selected object is not suitable for copper clearing.'))
+                app_obj.inform.emit('[ERROR_NOTCL] %s' %
+                                    _('The selected object is not suitable for copper clearing.'))
                 return
                 return
 
 
             if empty.is_empty:
             if empty.is_empty:
@@ -1897,7 +1924,8 @@ class NonCopperClear(FlatCAMTool, Gerber):
 
 
             area = empty.buffer(0)
             area = empty.buffer(0)
 
 
-            log.debug("Copper clearing. Finished calculation of 'empty' area.")
+            log.debug("NCC Tool. Finished calculation of 'empty' area.")
+            app_obj.inform.emit("NCC Tool. Finished calculation of 'empty' area.")
 
 
             # Generate area for each tool
             # Generate area for each tool
             while sorted_tools:
             while sorted_tools:
@@ -1905,12 +1933,12 @@ class NonCopperClear(FlatCAMTool, Gerber):
                 log.debug("Starting geometry processing for tool: %s" % str(tool))
                 log.debug("Starting geometry processing for tool: %s" % str(tool))
 
 
                 app_obj.inform.emit(
                 app_obj.inform.emit(
-                    '[success] %s %s%s %s: %d%%' % (_('Non-Copper Rest Clearing with tool diameter = '),
-                                                    str(tool),
-                                                    units.lower(),
-                                                    _('started. Progress'),
-                                                    0)
+                    '[success] %s %s%s %s' % (_('NCC Tool clearing with tool diameter = '),
+                                              str(tool),
+                                              units.lower(),
+                                              _('started.'))
                 )
                 )
+                app_obj.proc_container.update_view_text(' %d%%' % 0)
 
 
                 tool_used = tool - 1e-12
                 tool_used = tool - 1e-12
                 cleared_geo[:] = []
                 cleared_geo[:] = []
@@ -1997,13 +2025,7 @@ class NonCopperClear(FlatCAMTool, Gerber):
                                 # log.debug("Polygons cleared: %d" % pol_nr)
                                 # log.debug("Polygons cleared: %d" % pol_nr)
 
 
                                 if disp_number > old_disp_number and disp_number <= 100:
                                 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)
-                                    )
+                                    self.app.proc_container.update_view_text(' %d%%' % disp_number)
                                     old_disp_number = disp_number
                                     old_disp_number = disp_number
                                     # log.debug("Polygons cleared: %d. Percentage done: %d%%" % (pol_nr, disp_number))
                                     # log.debug("Polygons cleared: %d. Percentage done: %d%%" % (pol_nr, disp_number))
 
 
@@ -2048,10 +2070,10 @@ class NonCopperClear(FlatCAMTool, Gerber):
             # it will be updated only if there is a solid_geometry for tools
             # it will be updated only if there is a solid_geometry for tools
             if geo_obj.tools:
             if geo_obj.tools:
                 if warning_flag == 0:
                 if warning_flag == 0:
-                    self.app.inform.emit('[success] %s' % _("Non-Copper Rest Machining clear all done."))
+                    self.app.inform.emit('[success] %s' % _("NCC Tool Rest Machining clear all done."))
                 else:
                 else:
                     self.app.inform.emit(
                     self.app.inform.emit(
-                        '[WARNING] %s: %s %s.' % (_("Non-Copper Rest Machining clear all done but the copper features "
+                        '[WARNING] %s: %s %s.' % (_("NCC Tool Rest Machining clear all done but the copper features "
                                                     "isolation is broken for"), str(warning_flag), _("tools")))
                                                     "isolation is broken for"), str(warning_flag), _("tools")))
                 return
                 return
             else:
             else:

+ 41 - 48
flatcamTools/ToolPaint.py

@@ -903,6 +903,11 @@ class ToolPaint(FlatCAMTool, Gerber):
         self.app.report_usage(_("on_paint_button_click"))
         self.app.report_usage(_("on_paint_button_click"))
         # self.app.call_source = 'paint'
         # self.app.call_source = 'paint'
 
 
+        # #####################################################
+        # ######### Reading Parameters ########################
+        # #####################################################
+        self.app.inform.emit(_("Paint Tool. Reading parameters."))
+
         try:
         try:
             overlap = float(self.paintoverlap_entry.get_value())
             overlap = float(self.paintoverlap_entry.get_value())
         except ValueError:
         except ValueError:
@@ -1206,7 +1211,8 @@ class ToolPaint(FlatCAMTool, Gerber):
             self.app.inform.emit(_('[WARNING] No polygon found.'))
             self.app.inform.emit(_('[WARNING] No polygon found.'))
             return
             return
 
 
-        proc = self.app.proc_container.new(_("Painting polygon."))
+        proc = self.app.proc_container.new(_("Painting polygon..."))
+        self.app.inform.emit(_("Paint Tool. Painting polygon at location: %s") % str(inside_pt))
 
 
         name = outname if outname is not None else self.obj_name + "_paint"
         name = outname if outname is not None else self.obj_name + "_paint"
 
 
@@ -1445,7 +1451,7 @@ class ToolPaint(FlatCAMTool, Gerber):
                                          _("Wrong value format entered, use a number."))
                                          _("Wrong value format entered, use a number."))
                     return
                     return
 
 
-        proc = self.app.proc_container.new(_("Painting polygon..."))
+        proc = self.app.proc_container.new(_("Painting polygons..."))
         name = outname if outname is not None else self.obj_name + "_paint"
         name = outname if outname is not None else self.obj_name + "_paint"
 
 
         over = overlap if overlap is not None else float(self.app.defaults["tools_paintoverlap"])
         over = overlap if overlap is not None else float(self.app.defaults["tools_paintoverlap"])
@@ -1521,6 +1527,7 @@ class ToolPaint(FlatCAMTool, Gerber):
             #     "Initializer expected a FlatCAMGeometry, got %s" % type(geo_obj)
             #     "Initializer expected a FlatCAMGeometry, got %s" % type(geo_obj)
 
 
             log.debug("Paint Tool. Normal painting all task started.")
             log.debug("Paint Tool. Normal painting all task started.")
+            app_obj.inform.emit(_("Paint Tool. Normal painting all task started."))
 
 
             tool_dia = None
             tool_dia = None
             if order == 'fwd':
             if order == 'fwd':
@@ -1547,12 +1554,12 @@ class ToolPaint(FlatCAMTool, Gerber):
             for tool_dia in sorted_tools:
             for tool_dia in sorted_tools:
                 log.debug("Starting geometry processing for tool: %s" % str(tool_dia))
                 log.debug("Starting geometry processing for tool: %s" % str(tool_dia))
                 app_obj.inform.emit(
                 app_obj.inform.emit(
-                    '[success] %s %s%s %s: %d%%' % (_('Painting with tool diameter = '),
-                                                    str(tool_dia),
-                                                    self.units.lower(),
-                                                    _('started. Progress'),
-                                                    0)
+                    '[success] %s %s%s %s' % (_('Painting with tool diameter = '),
+                                              str(tool_dia),
+                                              self.units.lower(),
+                                              _('started'))
                 )
                 )
+                app_obj.proc_container.update_view_text(' %d%%' % 0)
 
 
                 # find the tooluid associated with the current tool_dia so we know where to add the tool solid_geometry
                 # find the tooluid associated with the current tool_dia so we know where to add the tool solid_geometry
                 for k, v in tools_storage.items():
                 for k, v in tools_storage.items():
@@ -1617,13 +1624,7 @@ class ToolPaint(FlatCAMTool, Gerber):
                     # log.debug("Polygons cleared: %d" % pol_nr)
                     # log.debug("Polygons cleared: %d" % pol_nr)
 
 
                     if old_disp_number < disp_number <= 100:
                     if old_disp_number < disp_number <= 100:
-                        app_obj.inform.emit(
-                            '[success] %s %s%s %s: %d%%' % (_('Painting with tool diameter = '),
-                                                            str(tool_dia),
-                                                            self.units.lower(),
-                                                            _('started. Progress'),
-                                                            disp_number)
-                        )
+                        app_obj.proc_container.update_view_text(' %d%%' % disp_number)
                         old_disp_number = disp_number
                         old_disp_number = disp_number
                         # log.debug("Polygons cleared: %d. Percentage done: %d%%" % (pol_nr, disp_number))
                         # log.debug("Polygons cleared: %d. Percentage done: %d%%" % (pol_nr, disp_number))
 
 
@@ -1677,6 +1678,7 @@ class ToolPaint(FlatCAMTool, Gerber):
                 "Initializer expected a FlatCAMGeometry, got %s" % type(geo_obj)
                 "Initializer expected a FlatCAMGeometry, got %s" % type(geo_obj)
 
 
             log.debug("Paint Tool. Rest machining painting all task started.")
             log.debug("Paint Tool. Rest machining painting all task started.")
+            app_obj.inform.emit(_("Paint Tool. Rest machining painting all task started."))
 
 
             tool_dia = None
             tool_dia = None
             sorted_tools.sort(reverse=True)
             sorted_tools.sort(reverse=True)
@@ -1697,6 +1699,13 @@ class ToolPaint(FlatCAMTool, Gerber):
 
 
             for tool_dia in sorted_tools:
             for tool_dia in sorted_tools:
                 log.debug("Starting geometry processing for tool: %s" % str(tool_dia))
                 log.debug("Starting geometry processing for tool: %s" % str(tool_dia))
+                app_obj.inform.emit(
+                    '[success] %s %s%s %s' % (_('Painting with tool diameter = '),
+                                              str(tool_dia),
+                                              self.units.lower(),
+                                              _('started'))
+                )
+                app_obj.proc_container.update_view_text(' %d%%' % 0)
 
 
                 painted_area = recurse(obj.solid_geometry)
                 painted_area = recurse(obj.solid_geometry)
                 # variables to display the percentage of work done
                 # variables to display the percentage of work done
@@ -1746,13 +1755,7 @@ class ToolPaint(FlatCAMTool, Gerber):
                     # log.debug("Polygons cleared: %d" % pol_nr)
                     # log.debug("Polygons cleared: %d" % pol_nr)
 
 
                     if old_disp_number < disp_number <= 100:
                     if old_disp_number < disp_number <= 100:
-                        app_obj.inform.emit(
-                            '[success] %s %s%s %s: %d%%' % (_('Painting with tool diameter = '),
-                                                            str(tool_dia),
-                                                            self.units.lower(),
-                                                            _('started. Progress'),
-                                                            disp_number)
-                        )
+                        app_obj.proc_container.update_view_text(' %d%%' % disp_number)
                         old_disp_number = disp_number
                         old_disp_number = disp_number
                         # log.debug("Polygons cleared: %d. Percentage done: %d%%" % (pol_nr, disp_number))
                         # log.debug("Polygons cleared: %d. Percentage done: %d%%" % (pol_nr, disp_number))
 
 
@@ -1859,7 +1862,7 @@ class ToolPaint(FlatCAMTool, Gerber):
                                          _("Wrong value format entered, use a number."))
                                          _("Wrong value format entered, use a number."))
                     return
                     return
 
 
-        proc = self.app.proc_container.new(_("Painting polygon..."))
+        proc = self.app.proc_container.new(_("Painting polygons..."))
         name = outname if outname is not None else self.obj_name + "_paint"
         name = outname if outname is not None else self.obj_name + "_paint"
 
 
         over = overlap if overlap is not None else float(self.app.defaults["tools_paintoverlap"])
         over = overlap if overlap is not None else float(self.app.defaults["tools_paintoverlap"])
@@ -1922,6 +1925,7 @@ class ToolPaint(FlatCAMTool, Gerber):
             #     "Initializer expected a FlatCAMGeometry, got %s" % type(geo_obj)
             #     "Initializer expected a FlatCAMGeometry, got %s" % type(geo_obj)
 
 
             log.debug("Paint Tool. Normal painting area task started.")
             log.debug("Paint Tool. Normal painting area task started.")
+            app_obj.inform.emit(_("Paint Tool. Normal painting area task started."))
 
 
             tool_dia = None
             tool_dia = None
             if order == 'fwd':
             if order == 'fwd':
@@ -1959,12 +1963,12 @@ class ToolPaint(FlatCAMTool, Gerber):
             for tool_dia in sorted_tools:
             for tool_dia in sorted_tools:
                 log.debug("Starting geometry processing for tool: %s" % str(tool_dia))
                 log.debug("Starting geometry processing for tool: %s" % str(tool_dia))
                 app_obj.inform.emit(
                 app_obj.inform.emit(
-                    '[success] %s %s%s %s: %d%%' % (_('Painting with tool diameter = '),
-                                                    str(tool_dia),
-                                                    self.units.lower(),
-                                                    _('started. Progress'),
-                                                    0)
+                    '[success] %s %s%s %s' % (_('Painting with tool diameter = '),
+                                              str(tool_dia),
+                                              self.units.lower(),
+                                              _('started'))
                 )
                 )
+                app_obj.proc_container.update_view_text(' %d%%' % 0)
 
 
                 # find the tooluid associated with the current tool_dia so we know where to add the tool solid_geometry
                 # find the tooluid associated with the current tool_dia so we know where to add the tool solid_geometry
                 for k, v in tools_storage.items():
                 for k, v in tools_storage.items():
@@ -2027,14 +2031,8 @@ class ToolPaint(FlatCAMTool, Gerber):
                     disp_number = int(np.interp(pol_nr, [0, geo_len], [0, 99]))
                     disp_number = int(np.interp(pol_nr, [0, geo_len], [0, 99]))
                     # log.debug("Polygons cleared: %d" % pol_nr)
                     # 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%%' % (_('Painting with tool diameter = '),
-                                                            str(tool_dia),
-                                                            self.units.lower(),
-                                                            _('started. Progress'),
-                                                            disp_number)
-                        )
+                    if old_disp_number < disp_number <= 100:
+                        app_obj.proc_container.update_view_text(' %d%%' % disp_number)
                         old_disp_number = disp_number
                         old_disp_number = disp_number
                         # log.debug("Polygons cleared: %d. Percentage done: %d%%" % (pol_nr, disp_number))
                         # log.debug("Polygons cleared: %d. Percentage done: %d%%" % (pol_nr, disp_number))
 
 
@@ -2088,6 +2086,7 @@ class ToolPaint(FlatCAMTool, Gerber):
                 "Initializer expected a FlatCAMGeometry, got %s" % type(geo_obj)
                 "Initializer expected a FlatCAMGeometry, got %s" % type(geo_obj)
 
 
             log.debug("Paint Tool. Rest machining painting area task started.")
             log.debug("Paint Tool. Rest machining painting area task started.")
+            app_obj.inform.emit(_("Paint Tool. Rest machining painting area task started."))
 
 
             tool_dia = None
             tool_dia = None
             sorted_tools.sort(reverse=True)
             sorted_tools.sort(reverse=True)
@@ -2109,12 +2108,12 @@ class ToolPaint(FlatCAMTool, Gerber):
             for tool_dia in sorted_tools:
             for tool_dia in sorted_tools:
                 log.debug("Starting geometry processing for tool: %s" % str(tool_dia))
                 log.debug("Starting geometry processing for tool: %s" % str(tool_dia))
                 app_obj.inform.emit(
                 app_obj.inform.emit(
-                    '[success] %s %s%s %s: %d%%' % (_('Painting with tool diameter = '),
-                                                    str(tool_dia),
-                                                    self.units.lower(),
-                                                    _('started. Progress'),
-                                                    0)
+                    '[success] %s %s%s %s' % (_('Painting with tool diameter = '),
+                                              str(tool_dia),
+                                              self.units.lower(),
+                                              _('started'))
                 )
                 )
+                app_obj.proc_container.update_view_text(' %d%%' % 0)
 
 
                 painted_area = recurse(obj.solid_geometry)
                 painted_area = recurse(obj.solid_geometry)
                 # variables to display the percentage of work done
                 # variables to display the percentage of work done
@@ -2162,14 +2161,8 @@ class ToolPaint(FlatCAMTool, Gerber):
                     disp_number = int(np.interp(pol_nr, [0, geo_len], [0, 99]))
                     disp_number = int(np.interp(pol_nr, [0, geo_len], [0, 99]))
                     # log.debug("Polygons cleared: %d" % pol_nr)
                     # 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%%' % (_('Painting with tool diameter = '),
-                                                            str(tool_dia),
-                                                            self.units.lower(),
-                                                            _('started. Progress'),
-                                                            disp_number)
-                        )
+                    if old_disp_number < disp_number <= 100:
+                        app_obj.proc_container.update_view_text(' %d%%' % disp_number)
                         old_disp_number = disp_number
                         old_disp_number = disp_number
                         # log.debug("Polygons cleared: %d. Percentage done: %d%%" % (pol_nr, disp_number))
                         # log.debug("Polygons cleared: %d. Percentage done: %d%%" % (pol_nr, disp_number))
 
 

+ 133 - 98
locale_template/strings.pot

@@ -6,7 +6,7 @@
 msgid ""
 msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: \n"
 "Project-Id-Version: \n"
-"POT-Creation-Date: 2019-09-06 21:00+0300\n"
+"POT-Creation-Date: 2019-09-06 22:24+0300\n"
 "PO-Revision-Date: 2019-03-25 15:08+0200\n"
 "PO-Revision-Date: 2019-03-25 15:08+0200\n"
 "Last-Translator: \n"
 "Last-Translator: \n"
 "Language-Team: \n"
 "Language-Team: \n"
@@ -1641,16 +1641,12 @@ msgstr ""
 msgid "Starting G-Code"
 msgid "Starting G-Code"
 msgstr ""
 msgstr ""
 
 
-#: camlib.py:5485 camlib.py:5617 camlib.py:5710 camlib.py:5992 camlib.py:6311
+#: camlib.py:5442 camlib.py:5574 camlib.py:5665 camlib.py:5948 camlib.py:6267
 msgid "Starting G-Code for tool with diameter"
 msgid "Starting G-Code for tool with diameter"
 msgstr ""
 msgstr ""
 
 
-#: camlib.py:5488 camlib.py:5620 camlib.py:5713 camlib.py:5995 camlib.py:6314
-msgid "Progress"
-msgstr ""
-
-#: camlib.py:5494 camlib.py:5626 camlib.py:5718 camlib.py:6899 camlib.py:7172
-#: camlib.py:7270 camlib.py:7312
+#: camlib.py:5494 camlib.py:5626 camlib.py:5718 camlib.py:6909 camlib.py:7182
+#: camlib.py:7280 camlib.py:7322
 msgid "[ERROR_NOTCL] G91 coordinates not implemented ..."
 msgid "[ERROR_NOTCL] G91 coordinates not implemented ..."
 msgstr ""
 msgstr ""
 
 
@@ -1742,6 +1738,11 @@ msgstr ""
 msgid "[ERROR_NOTCL] There is no tool data in the SolderPaste geometry."
 msgid "[ERROR_NOTCL] There is no tool data in the SolderPaste geometry."
 msgstr ""
 msgstr ""
 
 
+#: camlib.py:6440
+#, python-format
+msgid "Finished SolderPste G-Code generation... %s paths traced."
+msgstr ""
+
 #: flatcamEditors/FlatCAMExcEditor.py:45 flatcamEditors/FlatCAMExcEditor.py:69
 #: flatcamEditors/FlatCAMExcEditor.py:45 flatcamEditors/FlatCAMExcEditor.py:69
 #: flatcamEditors/FlatCAMExcEditor.py:150
 #: flatcamEditors/FlatCAMExcEditor.py:150
 #: flatcamEditors/FlatCAMExcEditor.py:350
 #: flatcamEditors/FlatCAMExcEditor.py:350
@@ -8922,11 +8923,11 @@ msgstr ""
 #: flatcamTools/ToolNonCopperClear.py:901
 #: flatcamTools/ToolNonCopperClear.py:901
 #: flatcamTools/ToolNonCopperClear.py:980
 #: flatcamTools/ToolNonCopperClear.py:980
 #: flatcamTools/ToolNonCopperClear.py:1062
 #: flatcamTools/ToolNonCopperClear.py:1062
-#: flatcamTools/ToolNonCopperClear.py:1339
-#: flatcamTools/ToolNonCopperClear.py:1365 flatcamTools/ToolPaint.py:695
-#: flatcamTools/ToolPaint.py:770 flatcamTools/ToolPaint.py:914
-#: flatcamTools/ToolPaint.py:968 flatcamTools/ToolPaint.py:1200
-#: flatcamTools/ToolPaint.py:1445 flatcamTools/ToolPaint.py:1859
+#: flatcamTools/ToolNonCopperClear.py:1341
+#: flatcamTools/ToolNonCopperClear.py:1367 flatcamTools/ToolPaint.py:695
+#: flatcamTools/ToolPaint.py:770 flatcamTools/ToolPaint.py:919
+#: flatcamTools/ToolPaint.py:973 flatcamTools/ToolPaint.py:1205
+#: flatcamTools/ToolPaint.py:1451 flatcamTools/ToolPaint.py:1862
 #: flatcamTools/ToolPanelize.py:397 flatcamTools/ToolPanelize.py:409
 #: flatcamTools/ToolPanelize.py:397 flatcamTools/ToolPanelize.py:409
 #: flatcamTools/ToolPanelize.py:422 flatcamTools/ToolPanelize.py:435
 #: flatcamTools/ToolPanelize.py:422 flatcamTools/ToolPanelize.py:435
 #: flatcamTools/ToolPanelize.py:447 flatcamTools/ToolPanelize.py:458
 #: flatcamTools/ToolPanelize.py:447 flatcamTools/ToolPanelize.py:458
@@ -9088,7 +9089,7 @@ msgstr ""
 
 
 #: flatcamTools/ToolCutOut.py:371 flatcamTools/ToolCutOut.py:571
 #: flatcamTools/ToolCutOut.py:371 flatcamTools/ToolCutOut.py:571
 #: flatcamTools/ToolNonCopperClear.py:1124
 #: flatcamTools/ToolNonCopperClear.py:1124
-#: flatcamTools/ToolNonCopperClear.py:1265 flatcamTools/ToolPaint.py:1141
+#: flatcamTools/ToolNonCopperClear.py:1265 flatcamTools/ToolPaint.py:1146
 #: flatcamTools/ToolPanelize.py:359 flatcamTools/ToolPanelize.py:376
 #: flatcamTools/ToolPanelize.py:359 flatcamTools/ToolPanelize.py:376
 #: flatcamTools/ToolSub.py:254 flatcamTools/ToolSub.py:269
 #: flatcamTools/ToolSub.py:254 flatcamTools/ToolSub.py:269
 #: flatcamTools/ToolSub.py:456 flatcamTools/ToolSub.py:471
 #: flatcamTools/ToolSub.py:456 flatcamTools/ToolSub.py:471
@@ -9848,7 +9849,7 @@ msgstr ""
 msgid "Overlap value must be between 0 (inclusive) and 1 (exclusive), "
 msgid "Overlap value must be between 0 (inclusive) and 1 (exclusive), "
 msgstr ""
 msgstr ""
 
 
-#: flatcamTools/ToolNonCopperClear.py:1083 flatcamTools/ToolPaint.py:937
+#: flatcamTools/ToolNonCopperClear.py:1083 flatcamTools/ToolPaint.py:942
 #, python-format
 #, python-format
 msgid "Could not retrieve object: %s"
 msgid "Could not retrieve object: %s"
 msgstr ""
 msgstr ""
@@ -9857,7 +9858,7 @@ msgstr ""
 msgid "Wrong Tool Dia value format entered, use a number."
 msgid "Wrong Tool Dia value format entered, use a number."
 msgstr ""
 msgstr ""
 
 
-#: flatcamTools/ToolNonCopperClear.py:1112 flatcamTools/ToolPaint.py:973
+#: flatcamTools/ToolNonCopperClear.py:1112 flatcamTools/ToolPaint.py:978
 msgid "No selected tools in Tool Table."
 msgid "No selected tools in Tool Table."
 msgstr ""
 msgstr ""
 
 
@@ -9865,11 +9866,11 @@ msgstr ""
 msgid "Click the start point of the area."
 msgid "Click the start point of the area."
 msgstr ""
 msgstr ""
 
 
-#: flatcamTools/ToolNonCopperClear.py:1148 flatcamTools/ToolPaint.py:1029
+#: flatcamTools/ToolNonCopperClear.py:1148 flatcamTools/ToolPaint.py:1034
 msgid "Click the end point of the paint area."
 msgid "Click the end point of the paint area."
 msgstr ""
 msgstr ""
 
 
-#: flatcamTools/ToolNonCopperClear.py:1154 flatcamTools/ToolPaint.py:1035
+#: flatcamTools/ToolNonCopperClear.py:1154 flatcamTools/ToolPaint.py:1040
 msgid "Zone added. Click to start adding next zone or right click to finish."
 msgid "Zone added. Click to start adding next zone or right click to finish."
 msgstr ""
 msgstr ""
 
 
@@ -9877,69 +9878,81 @@ msgstr ""
 msgid "Non-Copper clearing ..."
 msgid "Non-Copper clearing ..."
 msgstr ""
 msgstr ""
 
 
-#: flatcamTools/ToolNonCopperClear.py:1415 flatcamTools/ToolPaint.py:2276
+#: flatcamTools/ToolNonCopperClear.py:1327
+msgid "NCC Tool started. Reading parameters."
+msgstr ""
+
+#: flatcamTools/ToolNonCopperClear.py:1391
+msgid "NCC Tool. Preparing non-copper polygons."
+msgstr ""
+
+#: flatcamTools/ToolNonCopperClear.py:1419 flatcamTools/ToolPaint.py:2269
 msgid "No object available."
 msgid "No object available."
 msgstr ""
 msgstr ""
 
 
-#: flatcamTools/ToolNonCopperClear.py:1449
+#: flatcamTools/ToolNonCopperClear.py:1455
 msgid "The reference object type is not supported."
 msgid "The reference object type is not supported."
 msgstr ""
 msgstr ""
 
 
-#: flatcamTools/ToolNonCopperClear.py:1505
-#: flatcamTools/ToolNonCopperClear.py:1795
-#: flatcamTools/ToolNonCopperClear.py:1875
-msgid "Buffering ..."
+#: flatcamTools/ToolNonCopperClear.py:1477
+msgid ""
+"NCC Tool. Finished non-copper polygons. Normal copper clearing task started."
 msgstr ""
 msgstr ""
 
 
-#: flatcamTools/ToolNonCopperClear.py:1507
-#: flatcamTools/ToolNonCopperClear.py:1587
-#: flatcamTools/ToolNonCopperClear.py:1594
-#: flatcamTools/ToolNonCopperClear.py:1797
-#: flatcamTools/ToolNonCopperClear.py:1877
-#: flatcamTools/ToolNonCopperClear.py:1884
-msgid "Buffering finished ..."
+#: flatcamTools/ToolNonCopperClear.py:1509
+msgid "NCC Tool. Calculate 'empty' area."
 msgstr ""
 msgstr ""
 
 
-#: flatcamTools/ToolNonCopperClear.py:1525
-#: flatcamTools/ToolNonCopperClear.py:1815
-msgid "Isolation geometry could not be generated."
+#: flatcamTools/ToolNonCopperClear.py:1515
+#: flatcamTools/ToolNonCopperClear.py:1597
+#: flatcamTools/ToolNonCopperClear.py:1606
+#: flatcamTools/ToolNonCopperClear.py:1813
+#: flatcamTools/ToolNonCopperClear.py:1896
+#: flatcamTools/ToolNonCopperClear.py:1906
+msgid "Buffering"
 msgstr ""
 msgstr ""
 
 
-#: flatcamTools/ToolNonCopperClear.py:1585
-#: flatcamTools/ToolNonCopperClear.py:1592
-#: flatcamTools/ToolNonCopperClear.py:1882
-msgid "[WARNING_NOTCL] Buffering ..."
+#: flatcamTools/ToolNonCopperClear.py:1518
+#: flatcamTools/ToolNonCopperClear.py:1600
+#: flatcamTools/ToolNonCopperClear.py:1609
+#: flatcamTools/ToolNonCopperClear.py:1816
+#: flatcamTools/ToolNonCopperClear.py:1899
+#: flatcamTools/ToolNonCopperClear.py:1909
+msgid "Buffering finished"
 msgstr ""
 msgstr ""
 
 
-#: flatcamTools/ToolNonCopperClear.py:1597
-#: flatcamTools/ToolNonCopperClear.py:1887
+#: flatcamTools/ToolNonCopperClear.py:1536
+#: flatcamTools/ToolNonCopperClear.py:1835
+msgid "Isolation geometry could not be generated."
+msgstr ""
+
+#: flatcamTools/ToolNonCopperClear.py:1613
+#: flatcamTools/ToolNonCopperClear.py:1914
 msgid "The selected object is not suitable for copper clearing."
 msgid "The selected object is not suitable for copper clearing."
 msgstr ""
 msgstr ""
 
 
-#: flatcamTools/ToolNonCopperClear.py:1602
-#: flatcamTools/ToolNonCopperClear.py:1892
+#: flatcamTools/ToolNonCopperClear.py:1618
+#: flatcamTools/ToolNonCopperClear.py:1919
 msgid "Could not get the extent of the area to be non copper cleared."
 msgid "Could not get the extent of the area to be non copper cleared."
 msgstr ""
 msgstr ""
 
 
-#: flatcamTools/ToolNonCopperClear.py:1613
-#: flatcamTools/ToolNonCopperClear.py:1690
-#: flatcamTools/ToolNonCopperClear.py:2001
-msgid "Non-Copper Clearing with tool diameter = "
+#: flatcamTools/ToolNonCopperClear.py:1625
+msgid "NCC Tool. Finished calculation of 'empty' area."
+msgstr ""
+
+#: flatcamTools/ToolNonCopperClear.py:1631
+#: flatcamTools/ToolNonCopperClear.py:1936
+msgid "NCC Tool clearing with tool diameter = "
 msgstr ""
 msgstr ""
 
 
-#: flatcamTools/ToolNonCopperClear.py:1616
-#: flatcamTools/ToolNonCopperClear.py:1693
-#: flatcamTools/ToolNonCopperClear.py:1911
-#: flatcamTools/ToolNonCopperClear.py:2004 flatcamTools/ToolPaint.py:1553
-#: flatcamTools/ToolPaint.py:1624 flatcamTools/ToolPaint.py:1753
-#: flatcamTools/ToolPaint.py:1965 flatcamTools/ToolPaint.py:2035
-#: flatcamTools/ToolPaint.py:2115 flatcamTools/ToolPaint.py:2170
-msgid "started. Progress"
+#: flatcamTools/ToolNonCopperClear.py:1634
+#: flatcamTools/ToolNonCopperClear.py:1939
+msgid "started."
 msgstr ""
 msgstr ""
 
 
-#: flatcamTools/ToolNonCopperClear.py:1746 flatcamTools/ToolPaint.py:1364
-#: flatcamTools/ToolPaint.py:1663 flatcamTools/ToolPaint.py:1786
-#: flatcamTools/ToolPaint.py:2074 flatcamTools/ToolPaint.py:2203
+#: flatcamTools/ToolNonCopperClear.py:1759 flatcamTools/ToolPaint.py:1370
+#: flatcamTools/ToolPaint.py:1664 flatcamTools/ToolPaint.py:1789
+#: flatcamTools/ToolPaint.py:2072 flatcamTools/ToolPaint.py:2196
 msgid ""
 msgid ""
 "There is no Painting Geometry in the file.\n"
 "There is no Painting Geometry in the file.\n"
 "Usually it means that the tool diameter is too big for the painted "
 "Usually it means that the tool diameter is too big for the painted "
@@ -9947,32 +9960,27 @@ msgid ""
 "Change the painting parameters and try again."
 "Change the painting parameters and try again."
 msgstr ""
 msgstr ""
 
 
-#: flatcamTools/ToolNonCopperClear.py:1756
-msgid "Non-Copper clear all done."
+#: flatcamTools/ToolNonCopperClear.py:1769
+msgid "NCC Tool clear all done."
 msgstr ""
 msgstr ""
 
 
-#: flatcamTools/ToolNonCopperClear.py:1758
-msgid ""
-"Non-Copper clear all done but the copper features isolation is broken for"
+#: flatcamTools/ToolNonCopperClear.py:1771
+msgid "NCC Tool clear all done but the copper features isolation is broken for"
 msgstr ""
 msgstr ""
 
 
-#: flatcamTools/ToolNonCopperClear.py:1761
-#: flatcamTools/ToolNonCopperClear.py:2055
+#: flatcamTools/ToolNonCopperClear.py:1774
+#: flatcamTools/ToolNonCopperClear.py:2077
 msgid "tools"
 msgid "tools"
 msgstr ""
 msgstr ""
 
 
-#: flatcamTools/ToolNonCopperClear.py:1908
-msgid "Non-Copper Rest Clearing with tool diameter = "
+#: flatcamTools/ToolNonCopperClear.py:2073
+msgid "NCC Tool Rest Machining clear all done."
 msgstr ""
 msgstr ""
 
 
-#: flatcamTools/ToolNonCopperClear.py:2051
-msgid "Non-Copper Rest Machining clear all done."
-msgstr ""
-
-#: flatcamTools/ToolNonCopperClear.py:2054
+#: flatcamTools/ToolNonCopperClear.py:2076
 msgid ""
 msgid ""
-"Non-Copper Rest Machining clear all done but the copper features isolation "
-"is broken for"
+"NCC Tool Rest Machining clear all done but the copper features isolation is "
+"broken for"
 msgstr ""
 msgstr ""
 
 
 #: flatcamTools/ToolPDF.py:38
 #: flatcamTools/ToolPDF.py:38
@@ -10103,85 +10111,108 @@ msgid ""
 "specified by another object."
 "specified by another object."
 msgstr ""
 msgstr ""
 
 
-#: flatcamTools/ToolPaint.py:919
+#: flatcamTools/ToolPaint.py:909
+msgid "Paint Tool. Reading parameters."
+msgstr ""
+
+#: flatcamTools/ToolPaint.py:924
 msgid "Overlap value must be between 0 (inclusive) and 1 (exclusive)"
 msgid "Overlap value must be between 0 (inclusive) and 1 (exclusive)"
 msgstr ""
 msgstr ""
 
 
-#: flatcamTools/ToolPaint.py:923 flatcamTools/ToolPaint.py:986
+#: flatcamTools/ToolPaint.py:928 flatcamTools/ToolPaint.py:991
 msgid "Click inside the desired polygon."
 msgid "Click inside the desired polygon."
 msgstr ""
 msgstr ""
 
 
-#: flatcamTools/ToolPaint.py:943 flatcamTools/ToolPanelize.py:366
+#: flatcamTools/ToolPaint.py:948 flatcamTools/ToolPanelize.py:366
 #: tclCommands/TclCommandBbox.py:66 tclCommands/TclCommandNregions.py:65
 #: tclCommands/TclCommandBbox.py:66 tclCommands/TclCommandNregions.py:65
 msgid "Object not found"
 msgid "Object not found"
 msgstr ""
 msgstr ""
 
 
-#: flatcamTools/ToolPaint.py:951
+#: flatcamTools/ToolPaint.py:956
 msgid "Can't do Paint on MultiGeo geometries"
 msgid "Can't do Paint on MultiGeo geometries"
 msgstr ""
 msgstr ""
 
 
-#: flatcamTools/ToolPaint.py:995 flatcamTools/ToolPaint.py:1448
-#: flatcamTools/ToolPaint.py:1862
+#: flatcamTools/ToolPaint.py:1000 flatcamTools/ToolPaint.py:1214
 msgid "Painting polygon..."
 msgid "Painting polygon..."
 msgstr ""
 msgstr ""
 
 
-#: flatcamTools/ToolPaint.py:1017
+#: flatcamTools/ToolPaint.py:1022
 msgid "Click the start point of the paint area."
 msgid "Click the start point of the paint area."
 msgstr ""
 msgstr ""
 
 
-#: flatcamTools/ToolPaint.py:1206
+#: flatcamTools/ToolPaint.py:1211
 msgid "[WARNING] No polygon found."
 msgid "[WARNING] No polygon found."
 msgstr ""
 msgstr ""
 
 
-#: flatcamTools/ToolPaint.py:1209
-msgid "Painting polygon."
+#: flatcamTools/ToolPaint.py:1215
+#, python-format
+msgid "Paint Tool. Painting polygon at location: %s"
 msgstr ""
 msgstr ""
 
 
-#: flatcamTools/ToolPaint.py:1283
+#: flatcamTools/ToolPaint.py:1289
 msgid "Geometry could not be painted completely"
 msgid "Geometry could not be painted completely"
 msgstr ""
 msgstr ""
 
 
-#: flatcamTools/ToolPaint.py:1326
+#: flatcamTools/ToolPaint.py:1332
 msgid ""
 msgid ""
 "Could not do Paint. Try a different combination of parameters. Or a "
 "Could not do Paint. Try a different combination of parameters. Or a "
 "different strategy of paint"
 "different strategy of paint"
 msgstr ""
 msgstr ""
 
 
-#: flatcamTools/ToolPaint.py:1369
+#: flatcamTools/ToolPaint.py:1375
 msgid "Paint Single Done."
 msgid "Paint Single Done."
 msgstr ""
 msgstr ""
 
 
-#: flatcamTools/ToolPaint.py:1391
+#: flatcamTools/ToolPaint.py:1397
 msgid "PaintTool.paint_poly()"
 msgid "PaintTool.paint_poly()"
 msgstr ""
 msgstr ""
 
 
-#: flatcamTools/ToolPaint.py:1398 flatcamTools/ToolPaint.py:1811
-#: flatcamTools/ToolPaint.py:2228
+#: flatcamTools/ToolPaint.py:1404 flatcamTools/ToolPaint.py:1814
+#: flatcamTools/ToolPaint.py:2221
 msgid "Polygon Paint started ..."
 msgid "Polygon Paint started ..."
 msgstr ""
 msgstr ""
 
 
-#: flatcamTools/ToolPaint.py:1550 flatcamTools/ToolPaint.py:1621
-#: flatcamTools/ToolPaint.py:1750 flatcamTools/ToolPaint.py:1962
-#: flatcamTools/ToolPaint.py:2032 flatcamTools/ToolPaint.py:2112
-#: flatcamTools/ToolPaint.py:2167
+#: flatcamTools/ToolPaint.py:1454 flatcamTools/ToolPaint.py:1865
+msgid "Painting polygons..."
+msgstr ""
+
+#: flatcamTools/ToolPaint.py:1530
+msgid "Paint Tool. Normal painting all task started."
+msgstr ""
+
+#: flatcamTools/ToolPaint.py:1557 flatcamTools/ToolPaint.py:1703
+#: flatcamTools/ToolPaint.py:1966 flatcamTools/ToolPaint.py:2111
 msgid "Painting with tool diameter = "
 msgid "Painting with tool diameter = "
 msgstr ""
 msgstr ""
 
 
-#: flatcamTools/ToolPaint.py:1610 flatcamTools/ToolPaint.py:1739
+#: flatcamTools/ToolPaint.py:1560 flatcamTools/ToolPaint.py:1706
+#: flatcamTools/ToolPaint.py:1969 flatcamTools/ToolPaint.py:2114
+msgid "started"
+msgstr ""
+
+#: flatcamTools/ToolPaint.py:1617 flatcamTools/ToolPaint.py:1748
 msgid ""
 msgid ""
 "Could not do Paint All. Try a different combination of parameters. Or a "
 "Could not do Paint All. Try a different combination of parameters. Or a "
 "different Method of paint"
 "different Method of paint"
 msgstr ""
 msgstr ""
 
 
-#: flatcamTools/ToolPaint.py:1672
+#: flatcamTools/ToolPaint.py:1673
 msgid "[success] Paint All Done."
 msgid "[success] Paint All Done."
 msgstr ""
 msgstr ""
 
 
-#: flatcamTools/ToolPaint.py:1795 flatcamTools/ToolPaint.py:2212
+#: flatcamTools/ToolPaint.py:1681
+msgid "Paint Tool. Rest machining painting all task started."
+msgstr ""
+
+#: flatcamTools/ToolPaint.py:1798 flatcamTools/ToolPaint.py:2205
 msgid "Paint All with Rest-Machining done."
 msgid "Paint All with Rest-Machining done."
 msgstr ""
 msgstr ""
 
 
-#: flatcamTools/ToolPaint.py:2022 flatcamTools/ToolPaint.py:2157
+#: flatcamTools/ToolPaint.py:1928
+msgid "Paint Tool. Normal painting area task started."
+msgstr ""
+
+#: flatcamTools/ToolPaint.py:2026 flatcamTools/ToolPaint.py:2156
 #, python-format
 #, python-format
 msgid ""
 msgid ""
 "Could not do Paint All. Try a different combination of parameters. Or a "
 "Could not do Paint All. Try a different combination of parameters. Or a "
@@ -10189,10 +10220,14 @@ msgid ""
 "%s"
 "%s"
 msgstr ""
 msgstr ""
 
 
-#: flatcamTools/ToolPaint.py:2083
+#: flatcamTools/ToolPaint.py:2081
 msgid "[success] Paint Area Done."
 msgid "[success] Paint Area Done."
 msgstr ""
 msgstr ""
 
 
+#: flatcamTools/ToolPaint.py:2089
+msgid "Paint Tool. Rest machining painting area task started."
+msgstr ""
+
 #: flatcamTools/ToolPanelize.py:25
 #: flatcamTools/ToolPanelize.py:25
 msgid "Panelize PCB"
 msgid "Panelize PCB"
 msgstr ""
 msgstr ""