Просмотр исходного кода

Merged in marius_stanciu/flatcam_beta/Beta (pull request #183)

Beta
Marius Stanciu 6 лет назад
Родитель
Сommit
11f6d23b45

+ 22 - 18
FlatCAMApp.py

@@ -98,7 +98,7 @@ class App(QtCore.QObject):
     # ####################################
     # Version and VERSION DATE ###########
     # ####################################
-    version = 8.94
+    version = 8.95
     version_date = "2019/08/17"
     beta = True
 
@@ -824,7 +824,7 @@ class App(QtCore.QObject):
             "excellon_toolchangexy": "0.0, 0.0",
             "excellon_startz": None,
             "excellon_endz": 0.5,
-            "excellon_feedrate_rapid": 3.14961,
+            "excellon_feedrate_rapid": 31.4961,
             "excellon_z_pdepth": -0.02,
             "excellon_feedrate_probe": 3.14961,
             "excellon_f_plunge": False,
@@ -1395,18 +1395,11 @@ class App(QtCore.QObject):
         end_plot_time = time.time()
         self.log.debug("Finished Canvas initialization in %s seconds." % (str(end_plot_time - start_plot_time)))
 
-        # ### EDITOR section
-        self.geo_editor = FlatCAMGeoEditor(self, disabled=True)
-        self.exc_editor = FlatCAMExcEditor(self)
-        self.grb_editor = FlatCAMGrbEditor(self)
-
         # ### Adjust tabs width ## ##
         # self.collection.view.setMinimumWidth(self.ui.options_scroll_area.widget().sizeHint().width() +
         #     self.ui.options_scroll_area.verticalScrollBar().sizeHint().width())
         self.collection.view.setMinimumWidth(290)
 
-        self.log.debug("Finished adding FlatCAM Editor's.")
-
         # ### Worker ####
         if self.defaults["global_worker_number"]:
             self.workers = WorkerStack(workers_number=int(self.defaults["global_worker_number"]))
@@ -2102,6 +2095,17 @@ class App(QtCore.QObject):
         filename_factory = self.data_path + '/factory_defaults.FlatConfig'
         os.chmod(filename_factory, S_IREAD | S_IRGRP | S_IROTH)
 
+        ####################################################
+        # ### EDITOR section ###############################
+        ####################################################
+
+        # watch out for the position of the editors instantiation ... if it is done before a save of the default values
+        # at the first launch of the App , the editors will not be functional.
+        self.geo_editor = FlatCAMGeoEditor(self, disabled=True)
+        self.exc_editor = FlatCAMExcEditor(self)
+        self.grb_editor = FlatCAMGrbEditor(self)
+        self.log.debug("Finished adding FlatCAM Editor's.")
+
         # Post-GUI initialization: Experimental attempt
         # to perform unit tests on the GUI.
         # if post_gui is not None:
@@ -2378,9 +2382,6 @@ class App(QtCore.QObject):
             # we set the notebook to hidden
             self.ui.splitter.setSizes([0, 1])
 
-            # set call source to the Editor we go into
-            self.call_source = 'geo_editor'
-
             if edited_object.multigeo is True:
                 edited_tools = [int(x.text()) for x in edited_object.ui.geo_tools_table.selectedItems()]
                 if len(edited_tools) > 1:
@@ -2402,30 +2403,33 @@ class App(QtCore.QObject):
             else:
                 self.geo_editor.edit_fcgeometry(edited_object)
 
+            # set call source to the Editor we go into
+            self.call_source = 'geo_editor'
+
         elif isinstance(edited_object, FlatCAMExcellon):
             # store the Excellon Editor Toolbar visibility before entering in the Editor
             self.exc_editor.toolbar_old_state = True if self.ui.exc_edit_toolbar.isVisible() else False
 
-            # set call source to the Editor we go into
-            self.call_source = 'exc_editor'
-
             if self.ui.splitter.sizes()[0] == 0:
                 self.ui.splitter.setSizes([1, 1])
 
             self.exc_editor.edit_fcexcellon(edited_object)
 
+            # set call source to the Editor we go into
+            self.call_source = 'exc_editor'
+
         elif isinstance(edited_object, FlatCAMGerber):
             # store the Gerber Editor Toolbar visibility before entering in the Editor
             self.grb_editor.toolbar_old_state = True if self.ui.grb_edit_toolbar.isVisible() else False
 
-            # set call source to the Editor we go into
-            self.call_source = 'grb_editor'
-
             if self.ui.splitter.sizes()[0] == 0:
                 self.ui.splitter.setSizes([1, 1])
 
             self.grb_editor.edit_fcgerber(edited_object)
 
+            # set call source to the Editor we go into
+            self.call_source = 'grb_editor'
+
         # make sure that we can't select another object while in Editor Mode:
         # self.collection.view.setSelectionMode(QtWidgets.QAbstractItemView.NoSelection)
         self.ui.project_frame.setDisabled(True)

+ 33 - 11
FlatCAMObj.py

@@ -5000,14 +5000,20 @@ class FlatCAMGeometry(FlatCAMObj, Geometry):
                     geoms.append(scale_recursion(local_geom))
                 return geoms
             else:
-                return affinity.scale(geom, xfactor, yfactor, origin=(px, py))
+                try:
+                    return affinity.scale(geom, xfactor, yfactor, origin=(px, py))
+                except AttributeError:
+                    return geom
 
         if self.multigeo is True:
             for tool in self.tools:
                 self.tools[tool]['solid_geometry'] = scale_recursion(self.tools[tool]['solid_geometry'])
         else:
-            self.solid_geometry = scale_recursion(self.solid_geometry)
-
+            try:
+                self.solid_geometry = scale_recursion(self.solid_geometry)
+            except AttributeError:
+                self.solid_geometry = []
+                return
         self.app.inform.emit(_(
             "[success] Geometry Scale done."
         ))
@@ -5038,7 +5044,10 @@ class FlatCAMGeometry(FlatCAMObj, Geometry):
                     geoms.append(translate_recursion(local_geom))
                 return geoms
             else:
-                return affinity.translate(geom, xoff=dx, yoff=dy)
+                try:
+                    return affinity.translate(geom, xoff=dx, yoff=dy)
+                except AttributeError:
+                    return geom
 
         if self.multigeo is True:
             for tool in self.tools:
@@ -5506,7 +5515,7 @@ class FlatCAMCNCjob(FlatCAMObj, CNCjob):
         # Fill form fields only on object create
         self.to_form()
 
-        # this means that the object that created this CNCJob was an Excellon
+        # this means that the object that created this CNCJob was an Excellon or Geometry
         try:
             if self.travel_distance:
                 self.ui.t_distance_label.show()
@@ -5515,6 +5524,19 @@ class FlatCAMCNCjob(FlatCAMObj, CNCjob):
                 self.ui.t_distance_entry.set_value('%.4f' % float(self.travel_distance))
                 self.ui.units_label.setText(str(self.units).lower())
                 self.ui.units_label.setDisabled(True)
+
+                self.ui.t_time_label.show()
+                self.ui.t_time_entry.setVisible(True)
+                self.ui.t_time_entry.setDisabled(True)
+                # if time is more than 1 then we have minutes, else we have seconds
+                if self.routing_time > 1:
+                    self.ui.t_time_entry.set_value('%.4f' % math.ceil(float(self.routing_time)))
+                    self.ui.units_time_label.setText('min')
+                else:
+                    time_r = self.routing_time * 60
+                    self.ui.t_time_entry.set_value('%.4f' % math.ceil(float(time_r)))
+                    self.ui.units_time_label.setText('sec')
+                self.ui.units_time_label.setDisabled(True)
         except AttributeError:
             pass
 
@@ -5972,6 +5994,12 @@ class FlatCAMCNCjob(FlatCAMObj, CNCjob):
 
         visible = visible if visible else self.options['plot']
 
+        if self.ui.annotation_cb.get_value() and self.ui.plot_cb.get_value():
+            self.text_col.enabled = True
+        else:
+            self.text_col.enabled = False
+        self.annotation.redraw()
+
         try:
             if self.multitool is False:  # single tool usage
                 self.plot2(tooldia=float(self.options["tooldia"]), obj=self, visible=visible, kind=kind)
@@ -5986,12 +6014,6 @@ class FlatCAMCNCjob(FlatCAMObj, CNCjob):
             self.shapes.clear(update=True)
             self.annotation.clear(update=True)
 
-        if self.ui.annotation_cb.get_value() and self.ui.plot_cb.get_value():
-            self.text_col.enabled = True
-        else:
-            self.text_col.enabled = False
-        self.annotation.redraw()
-
     def on_annotation_change(self):
         if self.ui.annotation_cb.get_value():
             self.text_col.enabled = True

+ 14 - 0
README.md

@@ -11,6 +11,20 @@ CAD program, and create G-Code for Isolation routing.
 
 17.08.2019
 
+- added estimated time of routing for the CNCJob and added travelled distance parameter for geometry, too
+- fixed error when creating CNCJob due of having the annotations disabled from preferences but the plot2() function from camlib.CNCJob class still performed operations who yielded TypeError exceptions
+- coded a more accurate way to estimate the job time in CNCJob, taking into consideration if there is a usage of multi depth which generate more passes
+- another fix (final one) for the Exception generated by the annotations set not to show in Preferences
+- updated translations and changed version
+- fixed installer issue for the x64 version due of the used CX_FREEZE python package which was in unofficial version (obviously not ready to be used)
+- fixed bug in Geometry Editor, in disconnect_canvas_event_handlers() where I left some part of code without adding a try - except block which was required
+- moved the initialization of the FlatCAM editors after a read of the default values. If I don't do this then only at the first start of the application the Editors are not functional as the Editor objects are most likely destroyed
+- fixed bug in FlatCAM editors that caused the shapes to be drawn without resolution when the app units where INCH
+- modified the transformation functions in all classes in camlib.py and FlatCAMObj.py to work with empty geometries
+- RELEASE 8.95
+
+17.08.2019
+
 - updated the translations for the new strings
 - RELEASE 8.94
 

+ 180 - 34
camlib.py

@@ -1389,7 +1389,10 @@ class Geometry(object):
                     new_obj.append(mirror_geom(g))
                 return new_obj
             else:
-                return affinity.scale(obj, xscale, yscale, origin=(px, py))
+                try:
+                    return affinity.scale(obj, xscale, yscale, origin=(px, py))
+                except AttributeError:
+                    return obj
 
         try:
             if self.multigeo is True:
@@ -1427,7 +1430,10 @@ class Geometry(object):
                     new_obj.append(rotate_geom(g))
                 return new_obj
             else:
-                return affinity.rotate(obj, angle, origin=(px, py))
+                try:
+                    return affinity.rotate(obj, angle, origin=(px, py))
+                except AttributeError:
+                    return obj
 
         try:
             if self.multigeo is True:
@@ -1463,7 +1469,10 @@ class Geometry(object):
                     new_obj.append(skew_geom(g))
                 return new_obj
             else:
-                return affinity.skew(obj, angle_x, angle_y, origin=(px, py))
+                try:
+                    return affinity.skew(obj, angle_x, angle_y, origin=(px, py))
+                except AttributeError:
+                    return obj
 
         try:
             if self.multigeo is True:
@@ -3380,7 +3389,10 @@ class Gerber (Geometry):
                     new_obj.append(scale_geom(g))
                 return new_obj
             else:
-                return affinity.scale(obj, xfactor, yfactor, origin=(px, py))
+                try:
+                    return affinity.scale(obj, xfactor, yfactor, origin=(px, py))
+                except AttributeError:
+                    return obj
 
         self.solid_geometry = scale_geom(self.solid_geometry)
         self.follow_geometry = scale_geom(self.follow_geometry)
@@ -3444,7 +3456,10 @@ class Gerber (Geometry):
                     new_obj.append(offset_geom(g))
                 return new_obj
             else:
-                return affinity.translate(obj, xoff=dx, yoff=dy)
+                try:
+                    return affinity.translate(obj, xoff=dx, yoff=dy)
+                except AttributeError:
+                    return obj
 
         # ## Solid geometry
         self.solid_geometry = offset_geom(self.solid_geometry)
@@ -3500,7 +3515,10 @@ class Gerber (Geometry):
                     new_obj.append(mirror_geom(g))
                 return new_obj
             else:
-                return affinity.scale(obj, xscale, yscale, origin=(px, py))
+                try:
+                    return affinity.scale(obj, xscale, yscale, origin=(px, py))
+                except AttributeError:
+                    return obj
 
         self.solid_geometry = mirror_geom(self.solid_geometry)
         self.follow_geometry = mirror_geom(self.follow_geometry)
@@ -3546,7 +3564,10 @@ class Gerber (Geometry):
                     new_obj.append(skew_geom(g))
                 return new_obj
             else:
-                return affinity.skew(obj, angle_x, angle_y, origin=(px, py))
+                try:
+                    return affinity.skew(obj, angle_x, angle_y, origin=(px, py))
+                except AttributeError:
+                    return obj
 
         self.solid_geometry = skew_geom(self.solid_geometry)
         self.follow_geometry = skew_geom(self.follow_geometry)
@@ -3585,7 +3606,10 @@ class Gerber (Geometry):
                     new_obj.append(rotate_geom(g))
                 return new_obj
             else:
-                return affinity.rotate(obj, angle, origin=(px, py))
+                try:
+                    return affinity.rotate(obj, angle, origin=(px, py))
+                except AttributeError:
+                    return obj
 
         self.solid_geometry = rotate_geom(self.solid_geometry)
         self.follow_geometry = rotate_geom(self.follow_geometry)
@@ -4703,8 +4727,10 @@ class Excellon(Geometry):
                     new_obj.append(scale_geom(g))
                 return new_obj
             else:
-                return affinity.scale(obj, xfactor,
-                                             yfactor, origin=(px, py))
+                try:
+                    return affinity.scale(obj, xfactor, yfactor, origin=(px, py))
+                except AttributeError:
+                    return obj
 
         # Drills
         for drill in self.drills:
@@ -4739,7 +4765,10 @@ class Excellon(Geometry):
                     new_obj.append(offset_geom(g))
                 return new_obj
             else:
-                return affinity.translate(obj, xoff=dx, yoff=dy)
+                try:
+                    return affinity.translate(obj, xoff=dx, yoff=dy)
+                except AttributeError:
+                    return obj
 
         # Drills
         for drill in self.drills:
@@ -4776,7 +4805,10 @@ class Excellon(Geometry):
                     new_obj.append(mirror_geom(g))
                 return new_obj
             else:
-                return affinity.scale(obj, xscale, yscale, origin=(px, py))
+                try:
+                    return affinity.scale(obj, xscale, yscale, origin=(px, py))
+                except AttributeError:
+                    return obj
 
         # Modify data
         # Drills
@@ -4823,7 +4855,10 @@ class Excellon(Geometry):
                     new_obj.append(skew_geom(g))
                 return new_obj
             else:
-                return affinity.skew(obj, angle_x, angle_y, origin=(px, py))
+                try:
+                    return affinity.skew(obj, angle_x, angle_y, origin=(px, py))
+                except AttributeError:
+                    return obj
 
         if point is None:
             px, py = 0, 0
@@ -4874,9 +4909,15 @@ class Excellon(Geometry):
                 return new_obj
             else:
                 if origin:
-                    return affinity.rotate(obj, angle, origin=origin)
+                    try:
+                        return affinity.rotate(obj, angle, origin=origin)
+                    except AttributeError:
+                        return obj
                 else:
-                    return affinity.rotate(obj, angle, origin=(px, py))
+                    try:
+                        return affinity.rotate(obj, angle, origin=(px, py))
+                    except AttributeError:
+                        return obj
 
         if point is None:
             # Drills
@@ -5024,6 +5065,11 @@ class CNCjob(Geometry):
 
         self.tool = 0.0
 
+        # here store the travelled distance
+        self.travel_distance = 0.0
+        # here store the routing time
+        self.routing_time = 0.0
+
         # used for creating drill CCode geometry; will be updated in the generate_from_excellon_by_tool()
         self.exc_drills = None
         self.exc_tools = None
@@ -5285,7 +5331,10 @@ class CNCjob(Geometry):
             self.oldx = 0.0
             self.oldy = 0.0
 
-        measured_distance = 0
+        measured_distance = 0.0
+        measured_down_distance = 0.0
+        measured_up_to_zero_distance = 0.0
+        measured_lift_distance = 0.0
 
         current_platform = platform.architecture()[0]
         if current_platform == '64bit':
@@ -5382,8 +5431,16 @@ class CNCjob(Geometry):
 
                                 gcode += self.doformat(p.rapid_code, x=locx, y=locy)
                                 gcode += self.doformat(p.down_code, x=locx, y=locy)
+
+                                measured_down_distance += abs(self.z_cut) + abs(self.z_move)
+
                                 if self.f_retract is False:
                                     gcode += self.doformat(p.up_to_zero_code, x=locx, y=locy)
+                                    measured_up_to_zero_distance += abs(self.z_cut)
+                                    measured_lift_distance += abs(self.z_move)
+                                else:
+                                    measured_lift_distance += abs(self.z_cut) + abs(self.z_move)
+
                                 gcode += self.doformat(p.lift_code, x=locx, y=locy)
                                 measured_distance += abs(distance_euclidian(locx, locy, self.oldx, self.oldy))
                                 self.oldx = locx
@@ -5477,10 +5534,19 @@ class CNCjob(Geometry):
                             for k in node_list:
                                 locx = locations[k][0]
                                 locy = locations[k][1]
+
                                 gcode += self.doformat(p.rapid_code, x=locx, y=locy)
                                 gcode += self.doformat(p.down_code, x=locx, y=locy)
+
+                                measured_down_distance += abs(self.z_cut) + abs(self.z_move)
+
                                 if self.f_retract is False:
                                     gcode += self.doformat(p.up_to_zero_code, x=locx, y=locy)
+                                    measured_up_to_zero_distance += abs(self.z_cut)
+                                    measured_lift_distance += abs(self.z_move)
+                                else:
+                                    measured_lift_distance += abs(self.z_cut) + abs(self.z_move)
+
                                 gcode += self.doformat(p.lift_code, x=locx, y=locy)
                                 measured_distance += abs(distance_euclidian(locx, locy, self.oldx, self.oldy))
                                 self.oldx = locx
@@ -5537,8 +5603,16 @@ class CNCjob(Geometry):
                         for point in self.optimized_travelling_salesman(altPoints):
                             gcode += self.doformat(p.rapid_code, x=point[0], y=point[1])
                             gcode += self.doformat(p.down_code, x=point[0], y=point[1])
+
+                            measured_down_distance += abs(self.z_cut) + abs(self.z_move)
+
                             if self.f_retract is False:
                                 gcode += self.doformat(p.up_to_zero_code, x=point[0], y=point[1])
+                                measured_up_to_zero_distance += abs(self.z_cut)
+                                measured_lift_distance += abs(self.z_move)
+                            else:
+                                measured_lift_distance += abs(self.z_cut) + abs(self.z_move)
+
                             gcode += self.doformat(p.lift_code, x=point[0], y=point[1])
                             measured_distance += abs(distance_euclidian(point[0], point[1], self.oldx, self.oldy))
                             self.oldx = point[0]
@@ -5558,6 +5632,15 @@ class CNCjob(Geometry):
                   str(measured_distance) + '\n')
         self.travel_distance = measured_distance
 
+        # I use the value of self.feedrate_rapid for the feadrate in case of the measure_lift_distance and for
+        # traveled_time because it is not always possible to determine the feedrate that the CNC machine uses
+        # for G0 move (the fastest speed available to the CNC router). Although self.feedrate_rapids is used only with
+        # Marlin postprocessor and derivatives.
+        self.routing_time = (measured_down_distance + measured_up_to_zero_distance) / self.feedrate
+        lift_time = measured_lift_distance / self.feedrate_rapid
+        traveled_time = measured_distance / self.feedrate_rapid
+        self.routing_time += lift_time + traveled_time
+
         self.gcode = gcode
         return 'OK'
 
@@ -5736,6 +5819,9 @@ class CNCjob(Geometry):
             if self.dwell is True:
                 self.gcode += self.doformat(p.dwell_code)   # Dwell time
 
+        total_travel = 0.0
+        total_cut = 0.0
+
         # ## Iterate over geometry paths getting the nearest each time.
         log.debug("Starting G-Code...")
         path_count = 0
@@ -5757,21 +5843,41 @@ class CNCjob(Geometry):
 
                 # ---------- Single depth/pass --------
                 if not multidepth:
+                    # calculate the cut distance
+                    total_cut = total_cut + geo.length
+
                     self.gcode += self.create_gcode_single_pass(geo, extracut, tolerance)
 
                 # --------- Multi-pass ---------
                 else:
+                    # calculate the cut distance
+                    # due of the number of cuts (multi depth) it has to multiplied by the number of cuts
+                    nr_cuts = 0
+                    depth = abs(self.z_cut)
+                    while depth > 0:
+                        nr_cuts += 1
+                        depth -= float(self.z_depthpercut)
+
+                    total_cut += (geo.length * nr_cuts)
+
                     self.gcode += self.create_gcode_multi_pass(geo, extracut, tolerance,
                                                                postproc=p, current_point=current_pt)
 
+                # calculate the total distance
+                total_travel = total_travel + abs(distance(pt1=current_pt, pt2=pt))
                 current_pt = geo.coords[-1]
-                pt, geo = storage.nearest(current_pt) # Next
 
+                pt, geo = storage.nearest(current_pt) # Next
         except StopIteration:  # Nothing found in storage.
             pass
 
         log.debug("Finishing G-Code... %s paths traced." % path_count)
 
+        # add move to end position
+        total_travel += abs(distance_euclidian(current_pt[0], current_pt[1], 0, 0))
+        self.travel_distance += total_travel + total_cut
+        self.routing_time += total_cut / self.feedrate
+
         # Finish
         self.gcode += self.doformat(p.spindle_stop_code)
         self.gcode += self.doformat(p.lift_code, x=current_pt[0], y=current_pt[1])
@@ -6002,6 +6108,9 @@ class CNCjob(Geometry):
             if self.dwell is True:
                 self.gcode += self.doformat(p.dwell_code)   # Dwell time
 
+        total_travel = 0.0
+        total_cut = 0.0
+
         # Iterate over geometry paths getting the nearest each time.
         log.debug("Starting G-Code...")
         path_count = 0
@@ -6021,21 +6130,40 @@ class CNCjob(Geometry):
 
                 # ---------- Single depth/pass --------
                 if not multidepth:
+                    # calculate the cut distance
+                    total_cut += geo.length
                     self.gcode += self.create_gcode_single_pass(geo, extracut, tolerance)
 
                 # --------- Multi-pass ---------
                 else:
+                    # calculate the cut distance
+                    # due of the number of cuts (multi depth) it has to multiplied by the number of cuts
+                    nr_cuts = 0
+                    depth = abs(self.z_cut)
+                    while depth > 0:
+                        nr_cuts += 1
+                        depth -= float(self.z_depthpercut)
+
+                    total_cut += (geo.length * nr_cuts)
+
                     self.gcode += self.create_gcode_multi_pass(geo, extracut, tolerance,
                                                                postproc=p, current_point=current_pt)
 
+                # calculate the travel distance
+                total_travel += abs(distance(pt1=current_pt, pt2=pt))
                 current_pt = geo.coords[-1]
-                pt, geo = storage.nearest(current_pt) # Next
 
+                pt, geo = storage.nearest(current_pt) # Next
         except StopIteration:  # Nothing found in storage.
             pass
 
         log.debug("Finishing G-Code... %s paths traced." % path_count)
 
+        # add move to end position
+        total_travel += abs(distance_euclidian(current_pt[0], current_pt[1], 0, 0))
+        self.travel_distance += total_travel + total_cut
+        self.routing_time += total_cut / self.feedrate
+
         # Finish
         self.gcode += self.doformat(p.spindle_stop_code)
         self.gcode += self.doformat(p.lift_code, x=current_pt[0], y=current_pt[1])
@@ -6572,10 +6700,12 @@ class CNCjob(Geometry):
                     if geo['kind'][0] == 'C':
                         obj.add_shape(shape=poly, color=color['C'][1], face_color=color['C'][0],
                                       visible=visible, layer=1)
-
-            obj.annotation.set(text=text, pos=pos, visible=obj.options['plot'],
-                               font_size=self.app.defaults["cncjob_annotation_fontsize"],
-                               color=self.app.defaults["cncjob_annotation_fontcolor"])
+            try:
+                obj.annotation.set(text=text, pos=pos, visible=obj.options['plot'],
+                                   font_size=self.app.defaults["cncjob_annotation_fontsize"],
+                                   color=self.app.defaults["cncjob_annotation_fontcolor"])
+            except Exception as e:
+                pass
 
     def create_geometry(self):
         # TODO: This takes forever. Too much data?
@@ -7046,7 +7176,10 @@ class CNCjob(Geometry):
             self.gcode = scale_g(self.gcode)
             # offset geometry
             for g in self.gcode_parsed:
-                g['geom'] = affinity.scale(g['geom'], xfactor, yfactor, origin=(px, py))
+                try:
+                    g['geom'] = affinity.scale(g['geom'], xfactor, yfactor, origin=(px, py))
+                except AttributeError:
+                    return g['geom']
             self.create_geometry()
         else:
             for k, v in self.cnc_tools.items():
@@ -7054,9 +7187,11 @@ class CNCjob(Geometry):
                 v['gcode'] = scale_g(v['gcode'])
                 # scale gcode_parsed
                 for g in v['gcode_parsed']:
-                    g['geom'] = affinity.scale(g['geom'], xfactor, yfactor, origin=(px, py))
+                    try:
+                        g['geom'] = affinity.scale(g['geom'], xfactor, yfactor, origin=(px, py))
+                    except AttributeError:
+                        return g['geom']
                 v['solid_geometry'] = cascaded_union([geo['geom'] for geo in v['gcode_parsed']])
-
         self.create_geometry()
 
     def offset(self, vect):
@@ -7112,7 +7247,10 @@ class CNCjob(Geometry):
             self.gcode = offset_g(self.gcode)
             # offset geometry
             for g in self.gcode_parsed:
-                g['geom'] = affinity.translate(g['geom'], xoff=dx, yoff=dy)
+                try:
+                    g['geom'] = affinity.translate(g['geom'], xoff=dx, yoff=dy)
+                except AttributeError:
+                    return g['geom']
             self.create_geometry()
         else:
             for k, v in self.cnc_tools.items():
@@ -7120,7 +7258,10 @@ class CNCjob(Geometry):
                 v['gcode'] = offset_g(v['gcode'])
                 # offset gcode_parsed
                 for g in v['gcode_parsed']:
-                    g['geom'] = affinity.translate(g['geom'], xoff=dx, yoff=dy)
+                    try:
+                        g['geom'] = affinity.translate(g['geom'], xoff=dx, yoff=dy)
+                    except AttributeError:
+                        return g['geom']
                 v['solid_geometry'] = cascaded_union([geo['geom'] for geo in v['gcode_parsed']])
 
     def mirror(self, axis, point):
@@ -7134,8 +7275,10 @@ class CNCjob(Geometry):
         xscale, yscale = {"X": (1.0, -1.0), "Y": (-1.0, 1.0)}[axis]
 
         for g in self.gcode_parsed:
-            g['geom'] = affinity.scale(g['geom'], xscale, yscale, origin=(px, py))
-
+            try:
+                g['geom'] = affinity.scale(g['geom'], xscale, yscale, origin=(px, py))
+            except AttributeError:
+                return g['geom']
         self.create_geometry()
 
     def skew(self, angle_x, angle_y, point):
@@ -7156,9 +7299,10 @@ class CNCjob(Geometry):
         px, py = point
 
         for g in self.gcode_parsed:
-            g['geom'] = affinity.skew(g['geom'], angle_x, angle_y,
-                                      origin=(px, py))
-
+            try:
+                g['geom'] = affinity.skew(g['geom'], angle_x, angle_y, origin=(px, py))
+            except AttributeError:
+                return g['geom']
         self.create_geometry()
 
     def rotate(self, angle, point):
@@ -7172,8 +7316,10 @@ class CNCjob(Geometry):
         px, py = point
 
         for g in self.gcode_parsed:
-            g['geom'] = affinity.rotate(g['geom'], angle, origin=(px, py))
-
+            try:
+                g['geom'] = affinity.rotate(g['geom'], angle, origin=(px, py))
+            except AttributeError:
+                return g['geom']
         self.create_geometry()
 
 

+ 15 - 1
flatcamEditors/FlatCAMExcEditor.py

@@ -1,3 +1,11 @@
+# ##########################################################
+# FlatCAM: 2D Post-processing for Manufacturing            #
+# http://flatcam.org                                       #
+# File Author: Marius Adrian Stanciu (c)                   #
+# Date: 8/17/2019                                          #
+# MIT Licence                                              #
+# ##########################################################
+
 from PyQt5 import QtGui, QtCore, QtWidgets
 from PyQt5.QtCore import Qt, QSettings
 
@@ -1945,6 +1953,11 @@ class FlatCAMExcEditor(QtCore.QObject):
         # this var will store the state of the toolbar before starting the editor
         self.toolbar_old_state = False
 
+        if self.units == 'MM':
+            self.tolerance = float(self.app.defaults["global_tolerance"])
+        else:
+            self.tolerance = float(self.app.defaults["global_tolerance"]) / 20
+
         self.app.ui.delete_drill_btn.triggered.connect(self.on_delete_btn)
         self.name_entry.returnPressed.connect(self.on_name_activate)
         self.addtool_btn.clicked.connect(self.on_tool_add)
@@ -2048,6 +2061,7 @@ class FlatCAMExcEditor(QtCore.QObject):
 
         # store the status of the editor so the Delete at object level will not work until the edit is finished
         self.editor_active = False
+        log.debug("Initialization of the FlatCAM Excellon Editor is finished ...")
 
     def pool_recreated(self, pool):
         self.shapes.pool = pool
@@ -3727,7 +3741,7 @@ class FlatCAMExcEditor(QtCore.QObject):
                 plot_elements += self.plot_shape(geometry=geometry.interiors, color=color, linewidth=linewidth)
 
             if type(geometry) == LineString or type(geometry) == LinearRing:
-                plot_elements.append(self.shapes.add(shape=geometry, color=color, layer=0))
+                plot_elements.append(self.shapes.add(shape=geometry, color=color, layer=0, tolerance=self.tolerance))
 
             if type(geometry) == Point:
                 pass

+ 41 - 8
flatcamEditors/FlatCAMGeoEditor.py

@@ -3118,6 +3118,7 @@ class FlatCAMGeoEditor(QtCore.QObject):
 
         # store the status of the editor so the Delete at object level will not work until the edit is finished
         self.editor_active = False
+        log.debug("Initialization of the FlatCAM Geometry Editor is finished ...")
 
     def pool_recreated(self, pool):
         self.shapes.pool = pool
@@ -3174,6 +3175,7 @@ class FlatCAMGeoEditor(QtCore.QObject):
 
         # Tell the App that the editor is active
         self.editor_active = True
+        log.debug("Finished activating the Geometry Editor...")
 
     def deactivate(self):
         try:
@@ -3253,6 +3255,7 @@ class FlatCAMGeoEditor(QtCore.QObject):
         # Show original geometry
         if self.fcgeometry:
             self.fcgeometry.visible = True
+        log.debug("Finished deactivating the Geometry Editor...")
 
     def connect_canvas_event_handlers(self):
         # Canvas events
@@ -3352,14 +3355,41 @@ class FlatCAMGeoEditor(QtCore.QObject):
         except (TypeError, AttributeError):
             pass
 
-        self.app.ui.draw_circle.triggered.disconnect()
-        self.app.ui.draw_poly.triggered.disconnect()
-        self.app.ui.draw_arc.triggered.disconnect()
+        try:
+            self.app.ui.draw_circle.triggered.disconnect()
+        except (TypeError, AttributeError):
+            pass
+
+        try:
+            self.app.ui.draw_poly.triggered.disconnect()
+        except (TypeError, AttributeError):
+            pass
+
+        try:
+            self.app.ui.draw_arc.triggered.disconnect()
+        except (TypeError, AttributeError):
+            pass
+
+
+        try:
+            self.app.ui.draw_text.triggered.disconnect()
+        except (TypeError, AttributeError):
+            pass
+
+        try:
+            self.app.ui.draw_buffer.triggered.disconnect()
+        except (TypeError, AttributeError):
+            pass
 
-        self.app.ui.draw_text.triggered.disconnect()
-        self.app.ui.draw_buffer.triggered.disconnect()
-        self.app.ui.draw_paint.triggered.disconnect()
-        self.app.ui.draw_eraser.triggered.disconnect()
+        try:
+            self.app.ui.draw_paint.triggered.disconnect()
+        except (TypeError, AttributeError):
+            pass
+
+        try:
+            self.app.ui.draw_eraser.triggered.disconnect()
+        except (TypeError, AttributeError):
+            pass
 
         try:
             self.app.ui.draw_union.triggered.disconnect(self.union)
@@ -3376,7 +3406,10 @@ class FlatCAMGeoEditor(QtCore.QObject):
         except (TypeError, AttributeError):
             pass
 
-        self.app.ui.draw_transform.triggered.disconnect()
+        try:
+            self.app.ui.draw_transform.triggered.disconnect()
+        except (TypeError, AttributeError):
+            pass
 
     def add_shape(self, shape):
         """

+ 44 - 14
flatcamEditors/FlatCAMGrbEditor.py

@@ -1,3 +1,11 @@
+# ##########################################################
+# FlatCAM: 2D Post-processing for Manufacturing            #
+# http://flatcam.org                                       #
+# File Author: Marius Adrian Stanciu (c)                   #
+# Date: 8/17/2019                                          #
+# MIT Licence                                              #
+# ##########################################################
+
 from PyQt5 import QtGui, QtCore, QtWidgets
 from PyQt5.QtCore import Qt, QSettings
 
@@ -839,6 +847,8 @@ class FCRegion(FCShapeTool):
         self.name = 'region'
         self.draw_app = draw_app
 
+        self.steps_per_circle = self.draw_app.app.defaults["gerber_circle_steps"]
+
         size_ap = float(self.draw_app.storage_dict[self.draw_app.last_aperture_selected]['size'])
         self.buf_val = (size_ap / 2) if size_ap > 0 else 0.0000001
 
@@ -885,7 +895,7 @@ class FCRegion(FCShapeTool):
         y = data[1]
 
         if len(self.points) == 0:
-            new_geo_el['solid'] = Point(data).buffer(self.buf_val)
+            new_geo_el['solid'] = Point(data).buffer(self.buf_val, resolution=int(self.steps_per_circle / 4))
             return DrawToolUtilityShape(new_geo_el)
 
         if len(self.points) == 1:
@@ -951,12 +961,15 @@ class FCRegion(FCShapeTool):
 
             if len(self.temp_points) > 1:
                 try:
-                    new_geo_el['solid'] = LineString(self.temp_points).buffer(self.buf_val, join_style=1)
+                    new_geo_el['solid'] = LineString(self.temp_points).buffer(self.buf_val,
+                                                                              resolution=int(self.steps_per_circle / 4),
+                                                                              join_style=1)
                     return DrawToolUtilityShape(new_geo_el)
                 except Exception as e:
                     log.debug("FlatCAMGrbEditor.FCRegion.utility_geometry() --> %s" % str(e))
             else:
-                new_geo_el['solid'] = Point(self.temp_points).buffer(self.buf_val)
+                new_geo_el['solid'] = Point(self.temp_points).buffer(self.buf_val,
+                                                                     resolution=int(self.steps_per_circle / 4))
                 return DrawToolUtilityShape(new_geo_el)
 
         if len(self.points) > 2:
@@ -1012,7 +1025,9 @@ class FCRegion(FCShapeTool):
             self.temp_points.append(data)
             new_geo_el = dict()
 
-            new_geo_el['solid'] = LinearRing(self.temp_points).buffer(self.buf_val, join_style=1)
+            new_geo_el['solid'] = LinearRing(self.temp_points).buffer(self.buf_val,
+                                                                      resolution=int(self.steps_per_circle / 4),
+                                                                      join_style=1)
             new_geo_el['follow'] = LinearRing(self.temp_points)
 
             return DrawToolUtilityShape(new_geo_el)
@@ -1031,7 +1046,9 @@ class FCRegion(FCShapeTool):
 
             new_geo_el = dict()
 
-            new_geo_el['solid'] = Polygon(self.points).buffer(self.buf_val, join_style=2)
+            new_geo_el['solid'] = Polygon(self.points).buffer(self.buf_val,
+                                                              resolution=int(self.steps_per_circle / 4),
+                                                              join_style=2)
             new_geo_el['follow'] = Polygon(self.points).exterior
 
             self.geometry = DrawToolShape(new_geo_el)
@@ -1128,10 +1145,12 @@ class FCTrack(FCRegion):
     def make(self):
         new_geo_el = dict()
         if len(self.temp_points) == 1:
-            new_geo_el['solid'] = Point(self.temp_points).buffer(self.buf_val)
+            new_geo_el['solid'] = Point(self.temp_points).buffer(self.buf_val,
+                                                                 resolution=int(self.steps_per_circle / 4))
             new_geo_el['follow'] = Point(self.temp_points)
         else:
-            new_geo_el['solid'] = (LineString(self.temp_points).buffer(self.buf_val)).buffer(0)
+            new_geo_el['solid'] = (LineString(self.temp_points).buffer(
+                self.buf_val, resolution=int(self.steps_per_circle / 4))).buffer(0)
             new_geo_el['follow'] = LineString(self.temp_points)
 
         self.geometry = DrawToolShape(new_geo_el)
@@ -1156,10 +1175,12 @@ class FCTrack(FCRegion):
         new_geo_el = dict()
 
         if len(self.temp_points) == 1:
-            new_geo_el['solid'] = Point(self.temp_points).buffer(self.buf_val)
+            new_geo_el['solid'] = Point(self.temp_points).buffer(self.buf_val,
+                                                                 resolution=int(self.steps_per_circle / 4))
             new_geo_el['follow'] = Point(self.temp_points)
         else:
-            new_geo_el['solid'] = LineString(self.temp_points).buffer(self.buf_val)
+            new_geo_el['solid'] = LineString(self.temp_points).buffer(self.buf_val,
+                                                                      resolution=int(self.steps_per_circle / 4))
             new_geo_el['follow'] = LineString(self.temp_points)
 
         self.draw_app.add_gerber_shape(DrawToolShape(new_geo_el),
@@ -1177,7 +1198,8 @@ class FCTrack(FCRegion):
         new_geo_el = dict()
 
         if len(self.points) == 0:
-            new_geo_el['solid'] = Point(data).buffer(self.buf_val)
+            new_geo_el['solid'] = Point(data).buffer(self.buf_val,
+                                                     resolution=int(self.steps_per_circle / 4))
 
             return DrawToolUtilityShape(new_geo_el)
         elif len(self.points) > 0:
@@ -1235,10 +1257,12 @@ class FCTrack(FCRegion):
 
             self.temp_points.append(data)
             if len(self.temp_points) == 1:
-                new_geo_el['solid'] = Point(self.temp_points).buffer(self.buf_val)
+                new_geo_el['solid'] = Point(self.temp_points).buffer(self.buf_val,
+                                                                     resolution=int(self.steps_per_circle / 4))
                 return DrawToolUtilityShape(new_geo_el)
 
-            new_geo_el['solid'] = LineString(self.temp_points).buffer(self.buf_val)
+            new_geo_el['solid'] = LineString(self.temp_points).buffer(self.buf_val,
+                                                                      resolution=int(self.steps_per_circle / 4))
             return DrawToolUtilityShape(new_geo_el)
 
     def on_key(self, key):
@@ -2802,6 +2826,11 @@ class FlatCAMGrbEditor(QtCore.QObject):
         # this will flag if the Editor "tools" are launched from key shortcuts (True) or from menu toolbar (False)
         self.launched_from_shortcuts = False
 
+        if self.units == 'MM':
+            self.tolerance = float(self.app.defaults["global_tolerance"])
+        else:
+            self.tolerance = float(self.app.defaults["global_tolerance"]) / 20
+
         def make_callback(the_tool):
             def f():
                 self.on_tool_select(the_tool)
@@ -2887,6 +2916,7 @@ class FlatCAMGrbEditor(QtCore.QObject):
         self.conversion_factor = 1
 
         self.set_ui()
+        log.debug("Initialization of the FlatCAM Gerber Editor is finished ...")
 
     def pool_recreated(self, pool):
         self.shapes.pool = pool
@@ -4372,11 +4402,11 @@ class FlatCAMGrbEditor(QtCore.QObject):
             geometry = self.active_tool.geometry
 
         try:
-            self.shapes.add(shape=geometry.geo, color=color, face_color=color, layer=0)
+            self.shapes.add(shape=geometry.geo, color=color, face_color=color, layer=0, tolerance=self.tolerance)
         except AttributeError:
             if type(geometry) == Point:
                 return
-            self.shapes.add(shape=geometry, color=color, face_color=color+'AF', layer=0)
+            self.shapes.add(shape=geometry, color=color, face_color=color+'AF', layer=0, tolerance=self.tolerance)
 
     def start_delayed_plot(self, check_period):
         """

+ 21 - 8
flatcamGUI/ObjectUI.py

@@ -1393,20 +1393,28 @@ class CNCObjectUI(ObjectUI):
 
         self.t_distance_label = QtWidgets.QLabel(_("<b>Travelled dist.:</b>"))
         self.t_distance_label.setToolTip(
-            _(
-                "This is the total travelled distance on X-Y plane.\n"
-                "In current units."
-            )
+            _("This is the total travelled distance on X-Y plane.\n"
+              "In current units.")
         )
         self.t_distance_entry = FCEntry()
         self.t_distance_entry.setToolTip(
-            _(
-                "This is the total travelled distance on X-Y plane.\n"
-                "In current units."
-            )
+            _("This is the total travelled distance on X-Y plane.\n"
+              "In current units.")
         )
         self.units_label = QtWidgets.QLabel()
 
+        self.t_time_label = QtWidgets.QLabel(_("<b>Estimated time:</b>"))
+        self.t_time_label.setToolTip(
+            _("This is the estimated time to do the routing/drilling,\n"
+              "without the time spent in ToolChange events.")
+        )
+        self.t_time_entry = FCEntry()
+        self.t_time_entry.setToolTip(
+            _("This is the estimated time to do the routing/drilling,\n"
+              "without the time spent in ToolChange events.")
+        )
+        self.units_time_label = QtWidgets.QLabel()
+
         f_lay = QtWidgets.QGridLayout()
         f_lay.setColumnStretch(1, 1)
         f_lay.setColumnStretch(2, 1)
@@ -1421,9 +1429,14 @@ class CNCObjectUI(ObjectUI):
         f_lay.addWidget(self.t_distance_label, 2, 0)
         f_lay.addWidget(self.t_distance_entry, 2, 1)
         f_lay.addWidget(self.units_label, 2, 2)
+        f_lay.addWidget(self.t_time_label, 3, 0)
+        f_lay.addWidget(self.t_time_entry, 3, 1)
+        f_lay.addWidget(self.units_time_label, 3, 2)
 
         self.t_distance_label.hide()
         self.t_distance_entry.setVisible(False)
+        self.t_time_label.hide()
+        self.t_time_entry.setVisible(False)
 
         e1_lbl = QtWidgets.QLabel('')
         self.custom_box.addWidget(e1_lbl)

+ 2 - 2
flatcamParsers/ParseDXF.py

@@ -1,10 +1,10 @@
-# ########################################################## ##
+# ##########################################################
 # FlatCAM: 2D Post-processing for Manufacturing            #
 # http://flatcam.org                                       #
 # File Author: Marius Adrian Stanciu (c)                   #
 # Date: 3/10/2019                                          #
 # MIT Licence                                              #
-# ########################################################## ##
+# ##########################################################
 
 from shapely.geometry import LineString
 import logging

BIN
locale/de/LC_MESSAGES/strings.mo


+ 85 - 74
locale/de/LC_MESSAGES/strings.po

@@ -1,8 +1,8 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: \n"
-"POT-Creation-Date: 2019-08-17 00:12+0300\n"
-"PO-Revision-Date: 2019-08-17 00:30+0300\n"
+"POT-Creation-Date: 2019-08-17 15:12+0300\n"
+"PO-Revision-Date: 2019-08-17 15:13+0300\n"
 "Last-Translator: \n"
 "Language-Team: \n"
 "Language: de\n"
@@ -147,7 +147,7 @@ msgstr "[WARNING_NOTCL] Export der FlatCAM-Einstellungen wurde abgebrochen."
 
 #: FlatCAMApp.py:2977 FlatCAMApp.py:4804 FlatCAMApp.py:7270 FlatCAMApp.py:7380
 #: FlatCAMApp.py:7501 FlatCAMApp.py:7556 FlatCAMApp.py:7667 FlatCAMApp.py:7790
-#: FlatCAMObj.py:5862 flatcamTools/ToolSolderPaste.py:1400
+#: FlatCAMObj.py:5875 flatcamTools/ToolSolderPaste.py:1400
 msgid ""
 "[WARNING] Permission denied, saving not possible.\n"
 "Most likely another app is holding the file open and not accessible."
@@ -852,7 +852,7 @@ msgstr "Quelleditor"
 msgid "[ERROR]App.on_view_source() -->%s"
 msgstr "[ERROR]App.on_view_source() -->%s"
 
-#: FlatCAMApp.py:7033 FlatCAMApp.py:8215 FlatCAMObj.py:5643
+#: FlatCAMApp.py:7033 FlatCAMApp.py:8215 FlatCAMObj.py:5656
 #: flatcamTools/ToolSolderPaste.py:1284
 msgid "Code Editor"
 msgstr "Code-Editor"
@@ -1361,11 +1361,11 @@ msgstr ""
 msgid "[success] Name changed from {old} to {new}"
 msgstr "[success] Name geändert von {old} zu {new}"
 
-#: FlatCAMObj.py:558 FlatCAMObj.py:2128 FlatCAMObj.py:3402 FlatCAMObj.py:5536
+#: FlatCAMObj.py:558 FlatCAMObj.py:2128 FlatCAMObj.py:3402 FlatCAMObj.py:5549
 msgid "<span style=\"color:green;\"><b>Basic</b></span>"
 msgstr "<span style=\"color:green;\"><b>Basic</b></span>"
 
-#: FlatCAMObj.py:570 FlatCAMObj.py:2144 FlatCAMObj.py:3424 FlatCAMObj.py:5542
+#: FlatCAMObj.py:570 FlatCAMObj.py:2144 FlatCAMObj.py:3424 FlatCAMObj.py:5555
 msgid "<span style=\"color:red;\"><b>Advanced</b></span>"
 msgstr "<span style=\"color:red;\"><b>Erweitert</b></span>"
 
@@ -1478,8 +1478,8 @@ msgstr ""
 msgid "Generating CNC Code"
 msgstr "CNC-Code generieren"
 
-#: FlatCAMObj.py:2785 FlatCAMObj.py:5075 camlib.py:5179 camlib.py:5638
-#: camlib.py:5905
+#: FlatCAMObj.py:2785 FlatCAMObj.py:5075 camlib.py:5184 camlib.py:5680
+#: camlib.py:5970
 msgid ""
 "[ERROR]The Toolchange X,Y field in Edit -> Preferences has to be in the "
 "format (x, y) \n"
@@ -1601,25 +1601,25 @@ msgstr ""
 msgid "[success] Geometry Offset done."
 msgstr "[success] Geometrie Offset fertig."
 
-#: FlatCAMObj.py:5604 FlatCAMObj.py:5609 flatcamTools/ToolSolderPaste.py:1368
+#: FlatCAMObj.py:5617 FlatCAMObj.py:5622 flatcamTools/ToolSolderPaste.py:1368
 msgid "Export Machine Code ..."
 msgstr "Maschinencode exportieren ..."
 
-#: FlatCAMObj.py:5615 flatcamTools/ToolSolderPaste.py:1371
+#: FlatCAMObj.py:5628 flatcamTools/ToolSolderPaste.py:1371
 msgid "[WARNING_NOTCL] Export Machine Code cancelled ..."
 msgstr "[WARNING_NOTCL] Export Machine Code cancelled ..."
 
-#: FlatCAMObj.py:5632
+#: FlatCAMObj.py:5645
 #, python-format
 msgid "[success] Machine Code file saved to: %s"
 msgstr "[success] Maschinencode-Datei gespeichert in: %s"
 
-#: FlatCAMObj.py:5654
+#: FlatCAMObj.py:5667
 #, python-format
 msgid "[ERROR]FlatCAMCNNJob.on_edit_code_click() -->%s"
 msgstr "[ERROR]FlatCAMCNNJob.on_edit_code_click() -->%s"
 
-#: FlatCAMObj.py:5771
+#: FlatCAMObj.py:5784
 #, python-format
 msgid ""
 "[WARNING_NOTCL] This CNCJob object can't be processed because it is a %s "
@@ -1628,11 +1628,11 @@ msgstr ""
 "[WARNING_NOTCL] Dieses CNC-Auftrag Objekt kann nicht verarbeitet werden, da "
 "es sich um ein %s CNC-Auftrag Objekt handelt."
 
-#: FlatCAMObj.py:5824
+#: FlatCAMObj.py:5837
 msgid "[ERROR_NOTCL] G-code does not have a units code: either G20 or G21"
 msgstr "[ERROR_NOTCL] G-Code hat keinen Einheitencode: entweder G20 oder G21"
 
-#: FlatCAMObj.py:5837
+#: FlatCAMObj.py:5850
 msgid ""
 "[ERROR_NOTCL] Cancelled. The Toolchange Custom code is enabled but it's "
 "empty."
@@ -1640,17 +1640,17 @@ msgstr ""
 "[ERROR_NOTCL] Abgebrochen. Der benutzerdefinierte Code zum Ändern des "
 "Werkzeugs ist aktiviert, aber er ist leer."
 
-#: FlatCAMObj.py:5844
+#: FlatCAMObj.py:5857
 msgid "[success] Toolchange G-code was replaced by a custom code."
 msgstr ""
 "[success] Der Werkzeugwechsel-G-Code wurde durch einen benutzerdefinierten "
 "Code ersetzt."
 
-#: FlatCAMObj.py:5858 flatcamTools/ToolSolderPaste.py:1397
+#: FlatCAMObj.py:5871 flatcamTools/ToolSolderPaste.py:1397
 msgid "[WARNING_NOTCL] No such file or directory"
 msgstr "[WARNING_NOTCL] Keine solche Datei oder Ordner"
 
-#: FlatCAMObj.py:5882 FlatCAMObj.py:5894
+#: FlatCAMObj.py:5895 FlatCAMObj.py:5907
 msgid ""
 "[WARNING_NOTCL] The used postprocessor file has to have in it's name: "
 "'toolchange_custom'"
@@ -1658,7 +1658,7 @@ msgstr ""
 "[WARNING_NOTCL] Die verwendete Postprozessor-Datei muss im Namen enthalten "
 "sein: 'toolchange_custom'"
 
-#: FlatCAMObj.py:5900
+#: FlatCAMObj.py:5913
 msgid "[ERROR] There is no postprocessor file."
 msgstr "[ERROR] Es gibt keine Postprozessor-Datei."
 
@@ -1804,12 +1804,12 @@ msgstr ""
 "da kein Werkzeug zugeordnet wurde.\n"
 "Überprüfen Sie den resultierenden GCode."
 
-#: camlib.py:5088
+#: camlib.py:5093
 #, python-format
 msgid "[ERROR] There is no such parameter: %s"
 msgstr "[ERROR] Es gibt keinen solchen Parameter: %s"
 
-#: camlib.py:5158
+#: camlib.py:5163
 msgid ""
 "[WARNING] The Cut Z parameter has positive value. It is the depth value to "
 "drill into material.\n"
@@ -1824,7 +1824,7 @@ msgstr ""
 "einen negativen Wert. \n"
 "Überprüfen Sie den resultierenden CNC-Code (Gcode usw.)."
 
-#: camlib.py:5165 camlib.py:5661 camlib.py:5928
+#: camlib.py:5170 camlib.py:5703 camlib.py:5993
 #, python-format
 msgid ""
 "[WARNING] The Cut Z parameter is zero. There will be no cut, skipping %s file"
@@ -1832,15 +1832,15 @@ msgstr ""
 "[WARNING] Der Parameter Cut Z ist Null. Es wird kein Schnitt ausgeführt, da "
 "die %s Datei übersprungen wird"
 
-#: camlib.py:5394 camlib.py:5491 camlib.py:5549
+#: camlib.py:5410 camlib.py:5516 camlib.py:5582
 msgid "[ERROR_NOTCL] The loaded Excellon file has no drills ..."
 msgstr "[ERROR_NOTCL] Die geladene Excellon-Datei hat keine Bohrer ..."
 
-#: camlib.py:5496
+#: camlib.py:5521
 msgid "[ERROR_NOTCL] Wrong optimization type selected."
 msgstr "[ERROR_NOTCL] Falscher Optimierungstyp ausgewählt."
 
-#: camlib.py:5649 camlib.py:5916
+#: camlib.py:5691 camlib.py:5981
 msgid ""
 "[ERROR_NOTCL] Cut_Z parameter is None or zero. Most likely a bad "
 "combinations of other parameters."
@@ -1848,7 +1848,7 @@ msgstr ""
 "[ERROR_NOTCL] Der Parameter Cut_Z ist None oder Null. Höchstwahrscheinlich "
 "eine schlechte Kombination anderer Parameter."
 
-#: camlib.py:5654 camlib.py:5921
+#: camlib.py:5696 camlib.py:5986
 msgid ""
 "[WARNING] The Cut Z parameter has positive value. It is the depth value to "
 "cut into material.\n"
@@ -1863,11 +1863,11 @@ msgstr ""
 "einen negativen Wert. \n"
 "Überprüfen Sie den resultierenden CNC-Code (Gcode usw.)."
 
-#: camlib.py:5670 camlib.py:5933
+#: camlib.py:5712 camlib.py:5998
 msgid "[ERROR_NOTCL] Travel Z parameter is None or zero."
 msgstr "[ERROR_NOTCL] Der Parameter für den Travel Z ist Kein oder Null."
 
-#: camlib.py:5674 camlib.py:5937
+#: camlib.py:5716 camlib.py:6002
 msgid ""
 "[WARNING] The Travel Z parameter has negative value. It is the height value "
 "to travel between cuts.\n"
@@ -1881,7 +1881,7 @@ msgstr ""
 "einen Tippfehler handelt, konvertiert die App den Wert in einen positiven "
 "Wert. Überprüfen Sie den resultierenden CNC-Code (Gcode usw.)."
 
-#: camlib.py:5681 camlib.py:5944
+#: camlib.py:5723 camlib.py:6009
 #, python-format
 msgid ""
 "[WARNING] The Z Travel parameter is zero. This is dangerous, skipping %s file"
@@ -1889,12 +1889,12 @@ msgstr ""
 "[WARNING] Der Parameter Z-Weg ist Null. Dies ist gefährlich, da die %s Datei "
 "übersprungen wird"
 
-#: camlib.py:5811
+#: camlib.py:5876
 #, python-format
 msgid "[ERROR]Expected a Geometry, got %s"
 msgstr "[ERROR] Eine Geometrie erwartet,%s erhalten"
 
-#: camlib.py:5817
+#: camlib.py:5882
 msgid ""
 "[ERROR_NOTCL] Trying to generate a CNC Job from a Geometry object without "
 "solid_geometry."
@@ -1902,7 +1902,7 @@ msgstr ""
 "[ERROR_NOTCL] Der Versuch, einen CNC-Auftrag aus einem Geometrieobjekt ohne "
 "solid_geometry zu generieren."
 
-#: camlib.py:5856
+#: camlib.py:5921
 msgid ""
 "[ERROR_NOTCL] The Tool Offset value is too negative to use for the "
 "current_geometry.\n"
@@ -1912,7 +1912,7 @@ msgstr ""
 "current_geometry zu verwenden.\n"
 "Erhöhen Sie den Wert (im Modul) und versuchen Sie es erneut."
 
-#: camlib.py:6068
+#: camlib.py:6155
 msgid "[ERROR_NOTCL] There is no tool data in the SolderPaste geometry."
 msgstr ""
 "[ERROR_NOTCL] In der SolderPaste-Geometrie sind keine Werkzeugdaten "
@@ -2744,7 +2744,7 @@ msgstr "Spiegeln (Flip)"
 
 #: flatcamEditors/FlatCAMGeoEditor.py:622
 #: flatcamEditors/FlatCAMGrbEditor.py:4746 flatcamGUI/ObjectUI.py:127
-#: flatcamGUI/ObjectUI.py:889 flatcamGUI/ObjectUI.py:1471
+#: flatcamGUI/ObjectUI.py:889 flatcamGUI/ObjectUI.py:1484
 #: flatcamTools/ToolTransform.py:28
 msgid "Offset"
 msgstr "Versatz"
@@ -3762,7 +3762,7 @@ msgstr "Code"
 
 #: flatcamEditors/FlatCAMGrbEditor.py:2337
 #: flatcamEditors/FlatCAMGrbEditor.py:3758 flatcamGUI/ObjectUI.py:227
-#: flatcamGUI/ObjectUI.py:889 flatcamGUI/ObjectUI.py:1471
+#: flatcamGUI/ObjectUI.py:889 flatcamGUI/ObjectUI.py:1484
 msgid "Type"
 msgstr "Typ"
 
@@ -4628,7 +4628,6 @@ msgid "Add Slot Array\tQ"
 msgstr "Steckplatz-Array hinzufügen\tQ"
 
 #: flatcamGUI/FlatCAMGUI.py:470
-#| msgid "Add Polygon\tN"
 msgid "Add Slot\tW"
 msgstr "Slot hinzufügen\tW"
 
@@ -7258,7 +7257,7 @@ msgstr "Zeichn"
 
 #: flatcamGUI/FlatCAMGUI.py:4189 flatcamGUI/FlatCAMGUI.py:5467
 #: flatcamGUI/ObjectUI.py:174 flatcamGUI/ObjectUI.py:544
-#: flatcamGUI/ObjectUI.py:877 flatcamGUI/ObjectUI.py:1456
+#: flatcamGUI/ObjectUI.py:877 flatcamGUI/ObjectUI.py:1469
 msgid "Plot (show) this object."
 msgstr "Plotten (zeigen) dieses Objekt."
 
@@ -8500,7 +8499,7 @@ msgid "CNC Job General"
 msgstr "CNC-Job Allgemein"
 
 #: flatcamGUI/FlatCAMGUI.py:5840 flatcamGUI/ObjectUI.py:542
-#: flatcamGUI/ObjectUI.py:875 flatcamGUI/ObjectUI.py:1453
+#: flatcamGUI/ObjectUI.py:875 flatcamGUI/ObjectUI.py:1466
 msgid "Plot Object"
 msgstr "Plotobjekt"
 
@@ -8606,7 +8605,7 @@ msgid "<b>Export G-Code:</b>"
 msgstr "<b>G-Code exportieren:</b>"
 
 #: flatcamGUI/FlatCAMGUI.py:5965 flatcamGUI/FlatCAMGUI.py:6006
-#: flatcamGUI/ObjectUI.py:1489
+#: flatcamGUI/ObjectUI.py:1502
 msgid ""
 "Export and save G-Code to\n"
 "make this object to a file."
@@ -8630,7 +8629,7 @@ msgstr ""
 msgid "Append to G-Code:"
 msgstr "An G-Code anhängen:"
 
-#: flatcamGUI/FlatCAMGUI.py:5984 flatcamGUI/ObjectUI.py:1511
+#: flatcamGUI/FlatCAMGUI.py:5984 flatcamGUI/ObjectUI.py:1524
 msgid ""
 "Type here any G-Code commands you would\n"
 "like to append to the generated file.\n"
@@ -8644,7 +8643,7 @@ msgstr ""
 msgid "CNC Job Adv. Options"
 msgstr "Erw. CNC-Joboptionen"
 
-#: flatcamGUI/FlatCAMGUI.py:6012 flatcamGUI/ObjectUI.py:1529
+#: flatcamGUI/FlatCAMGUI.py:6012 flatcamGUI/ObjectUI.py:1542
 msgid "Toolchange G-Code:"
 msgstr "Werkzeugwechsel G-Code:"
 
@@ -8660,11 +8659,11 @@ msgstr ""
 "Dies stellt einen benutzerdefinierten Werkzeugwechsel-GCode dar.\n"
 "oder ein Werkzeugwechsel-Makro."
 
-#: flatcamGUI/FlatCAMGUI.py:6028 flatcamGUI/ObjectUI.py:1551
+#: flatcamGUI/FlatCAMGUI.py:6028 flatcamGUI/ObjectUI.py:1564
 msgid "Use Toolchange Macro"
 msgstr "Benutze das Werkzeugwechselmakro"
 
-#: flatcamGUI/FlatCAMGUI.py:6030 flatcamGUI/ObjectUI.py:1554
+#: flatcamGUI/FlatCAMGUI.py:6030 flatcamGUI/ObjectUI.py:1567
 msgid ""
 "Check this box if you want to use\n"
 "a Custom Toolchange GCode (macro)."
@@ -8672,7 +8671,7 @@ msgstr ""
 "Aktivieren Sie dieses Kontrollkästchen, wenn Sie verwenden möchten\n"
 "ein benutzerdefiniertes Werkzeug ändert GCode (Makro)."
 
-#: flatcamGUI/FlatCAMGUI.py:6042 flatcamGUI/ObjectUI.py:1563
+#: flatcamGUI/FlatCAMGUI.py:6042 flatcamGUI/ObjectUI.py:1576
 msgid ""
 "A list of the FlatCAM variables that can be used\n"
 "in the Toolchange event.\n"
@@ -8682,35 +8681,35 @@ msgstr ""
 "im Werkzeugwechselereignis.\n"
 "Sie müssen mit dem \"%\" -Symbol umgeben sein"
 
-#: flatcamGUI/FlatCAMGUI.py:6049 flatcamGUI/ObjectUI.py:1570
+#: flatcamGUI/FlatCAMGUI.py:6049 flatcamGUI/ObjectUI.py:1583
 msgid "Parameters"
 msgstr "Parameters"
 
-#: flatcamGUI/FlatCAMGUI.py:6052 flatcamGUI/ObjectUI.py:1573
+#: flatcamGUI/FlatCAMGUI.py:6052 flatcamGUI/ObjectUI.py:1586
 msgid "FlatCAM CNC parameters"
 msgstr "FlatCAM CNC-Parameter"
 
-#: flatcamGUI/FlatCAMGUI.py:6053 flatcamGUI/ObjectUI.py:1574
+#: flatcamGUI/FlatCAMGUI.py:6053 flatcamGUI/ObjectUI.py:1587
 msgid "tool = tool number"
 msgstr "tool = Werkzeugnummer"
 
-#: flatcamGUI/FlatCAMGUI.py:6054 flatcamGUI/ObjectUI.py:1575
+#: flatcamGUI/FlatCAMGUI.py:6054 flatcamGUI/ObjectUI.py:1588
 msgid "tooldia = tool diameter"
 msgstr "tooldia = Werkzeugdurchmesser"
 
-#: flatcamGUI/FlatCAMGUI.py:6055 flatcamGUI/ObjectUI.py:1576
+#: flatcamGUI/FlatCAMGUI.py:6055 flatcamGUI/ObjectUI.py:1589
 msgid "t_drills = for Excellon, total number of drills"
 msgstr "t_drills = für Excellon die Gesamtzahl der Bohrer"
 
-#: flatcamGUI/FlatCAMGUI.py:6056 flatcamGUI/ObjectUI.py:1577
+#: flatcamGUI/FlatCAMGUI.py:6056 flatcamGUI/ObjectUI.py:1590
 msgid "x_toolchange = X coord for Toolchange"
 msgstr "x_toolchange = X-Koord für Werkzeugwechsel"
 
-#: flatcamGUI/FlatCAMGUI.py:6057 flatcamGUI/ObjectUI.py:1578
+#: flatcamGUI/FlatCAMGUI.py:6057 flatcamGUI/ObjectUI.py:1591
 msgid "y_toolchange = Y coord for Toolchange"
 msgstr "y_toolchange = Y-Koord für Werkzeugwechsel"
 
-#: flatcamGUI/FlatCAMGUI.py:6058 flatcamGUI/ObjectUI.py:1579
+#: flatcamGUI/FlatCAMGUI.py:6058 flatcamGUI/ObjectUI.py:1592
 msgid "z_toolchange = Z coord for Toolchange"
 msgstr "z_toolchange = Z-Koord für Werkzeugwechsel"
 
@@ -8722,15 +8721,15 @@ msgstr "z_cut = Z Tiefe für den Schnitt"
 msgid "z_move = Z height for travel"
 msgstr "z_move = Z Höhe für die Reise"
 
-#: flatcamGUI/FlatCAMGUI.py:6061 flatcamGUI/ObjectUI.py:1582
+#: flatcamGUI/FlatCAMGUI.py:6061 flatcamGUI/ObjectUI.py:1595
 msgid "z_depthpercut = the step value for multidepth cut"
 msgstr "z_depthpercut =der Schrittwert für den mehrstufigen Schnitt"
 
-#: flatcamGUI/FlatCAMGUI.py:6062 flatcamGUI/ObjectUI.py:1583
+#: flatcamGUI/FlatCAMGUI.py:6062 flatcamGUI/ObjectUI.py:1596
 msgid "spindlesspeed = the value for the spindle speed"
 msgstr "spindlesspeed =der Wert für die Spindeldrehzahl"
 
-#: flatcamGUI/FlatCAMGUI.py:6064 flatcamGUI/ObjectUI.py:1584
+#: flatcamGUI/FlatCAMGUI.py:6064 flatcamGUI/ObjectUI.py:1597
 msgid "dwelltime = time to dwell to allow the spindle to reach it's set RPM"
 msgstr ""
 "dwelltime = Zeit zum Verweilen, damit die Spindel ihre eingestellte Drehzahl "
@@ -10168,11 +10167,11 @@ msgstr ""
 "ausgegraut und Cut Z wird automatisch aus dem neuen berechnet\n"
 "Zeigt UI-Formulareinträge mit den Namen V-Tip Dia und V-Tip Angle an."
 
-#: flatcamGUI/ObjectUI.py:889 flatcamGUI/ObjectUI.py:1471
+#: flatcamGUI/ObjectUI.py:889 flatcamGUI/ObjectUI.py:1484
 msgid "Dia"
 msgstr "Durchm"
 
-#: flatcamGUI/ObjectUI.py:889 flatcamGUI/ObjectUI.py:1471
+#: flatcamGUI/ObjectUI.py:889 flatcamGUI/ObjectUI.py:1484
 #: flatcamTools/ToolNonCopperClear.py:83 flatcamTools/ToolPaint.py:80
 msgid "TT"
 msgstr "TT"
@@ -10495,7 +10494,7 @@ msgstr "<b> Anmerkung anzeigen: </b>"
 msgid "<b>Travelled dist.:</b>"
 msgstr "<b> Zurückgelegte Distanz: </b>"
 
-#: flatcamGUI/ObjectUI.py:1397 flatcamGUI/ObjectUI.py:1404
+#: flatcamGUI/ObjectUI.py:1396 flatcamGUI/ObjectUI.py:1401
 msgid ""
 "This is the total travelled distance on X-Y plane.\n"
 "In current units."
@@ -10503,11 +10502,23 @@ msgstr ""
 "Dies ist die Gesamtstrecke auf der X-Y-Ebene.\n"
 "In aktuellen Einheiten."
 
-#: flatcamGUI/ObjectUI.py:1435
+#: flatcamGUI/ObjectUI.py:1406
+msgid "<b>Estimated time:</b>"
+msgstr "<b>Geschätzte Zeit:</b>"
+
+#: flatcamGUI/ObjectUI.py:1408 flatcamGUI/ObjectUI.py:1413
+msgid ""
+"This is the estimated time to do the routing/drilling,\n"
+"without the time spent in ToolChange events."
+msgstr ""
+"Dies ist die geschätzte Zeit für das Fräsen / Bohren.\n"
+"ohne die Zeit, die in Werkzeugwechselereignissen verbracht wird."
+
+#: flatcamGUI/ObjectUI.py:1448
 msgid "<b>CNC Tools Table</b>"
 msgstr "<b> CNC-Werkzeugtabelle </b>"
 
-#: flatcamGUI/ObjectUI.py:1438
+#: flatcamGUI/ObjectUI.py:1451
 msgid ""
 "Tools in this CNCJob object used for cutting.\n"
 "The tool diameter is used for plotting on canvas.\n"
@@ -10529,27 +10540,27 @@ msgstr ""
 "Der 'Werkzeugtyp' (TT) kann kreisförmig mit 1 bis 4 Zähnen (C1..C4) sein.\n"
 "Kugel (B) oder V-Form (V)."
 
-#: flatcamGUI/ObjectUI.py:1472
+#: flatcamGUI/ObjectUI.py:1485
 msgid "P"
 msgstr "P"
 
-#: flatcamGUI/ObjectUI.py:1478
+#: flatcamGUI/ObjectUI.py:1491
 msgid "Update Plot"
 msgstr "Plot aktualisieren"
 
-#: flatcamGUI/ObjectUI.py:1480
+#: flatcamGUI/ObjectUI.py:1493
 msgid "Update the plot."
 msgstr "Aktualisieren Sie die Darstellung."
 
-#: flatcamGUI/ObjectUI.py:1487
+#: flatcamGUI/ObjectUI.py:1500
 msgid "<b>Export CNC Code:</b>"
 msgstr "<b> CNC-Code exportieren: </b>"
 
-#: flatcamGUI/ObjectUI.py:1495
+#: flatcamGUI/ObjectUI.py:1508
 msgid "Prepend to CNC Code:"
 msgstr "CNC-Code voranstellen:"
 
-#: flatcamGUI/ObjectUI.py:1498
+#: flatcamGUI/ObjectUI.py:1511
 msgid ""
 "Type here any G-Code commands you would\n"
 "like to add to the beginning of the generated file."
@@ -10557,11 +10568,11 @@ msgstr ""
 "Geben Sie hier alle G-Code-Befehle ein\n"
 "gerne an den Anfang der generierten Datei hinzufügen."
 
-#: flatcamGUI/ObjectUI.py:1508
+#: flatcamGUI/ObjectUI.py:1521
 msgid "Append to CNC Code:"
 msgstr "An CNC Code anhängen:"
 
-#: flatcamGUI/ObjectUI.py:1532
+#: flatcamGUI/ObjectUI.py:1545
 msgid ""
 "Type here any G-Code commands you would\n"
 "like to be executed when Toolchange event is encountered.\n"
@@ -10583,19 +10594,19 @@ msgstr ""
 "das hat \"toolchange_custom\" im Namen und das ist gebaut\n"
 "mit der \"Toolchange Custom\" -Prozessordatei als Vorlage."
 
-#: flatcamGUI/ObjectUI.py:1580
+#: flatcamGUI/ObjectUI.py:1593
 msgid "z_cut = depth where to cut"
 msgstr "z_cut = Tiefe, wo geschnitten werden soll"
 
-#: flatcamGUI/ObjectUI.py:1581
+#: flatcamGUI/ObjectUI.py:1594
 msgid "z_move = height where to travel"
 msgstr "z_move = Höhe wo zu reisen"
 
-#: flatcamGUI/ObjectUI.py:1600
+#: flatcamGUI/ObjectUI.py:1613
 msgid "View CNC Code"
 msgstr "CNC-Code anzeigen"
 
-#: flatcamGUI/ObjectUI.py:1603
+#: flatcamGUI/ObjectUI.py:1616
 msgid ""
 "Opens TAB to view/modify/print G-Code\n"
 "file."
@@ -10603,11 +10614,11 @@ msgstr ""
 "Öffnet die Registerkarte zum Anzeigen / Ändern / Drucken von G-Code\n"
 "Datei."
 
-#: flatcamGUI/ObjectUI.py:1609
+#: flatcamGUI/ObjectUI.py:1622
 msgid "Save CNC Code"
 msgstr "CNC-Code speichern"
 
-#: flatcamGUI/ObjectUI.py:1612
+#: flatcamGUI/ObjectUI.py:1625
 msgid ""
 "Opens dialog to save G-Code\n"
 "file."

BIN
locale/en/LC_MESSAGES/strings.mo


Разница между файлами не показана из-за своего большого размера
+ 54 - 433
locale/en/LC_MESSAGES/strings.po


BIN
locale/es/LC_MESSAGES/strings.mo


+ 85 - 75
locale/es/LC_MESSAGES/strings.po

@@ -5,8 +5,8 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: \n"
-"POT-Creation-Date: 2019-08-17 00:31+0300\n"
-"PO-Revision-Date: 2019-08-17 00:42+0300\n"
+"POT-Creation-Date: 2019-08-17 15:14+0300\n"
+"PO-Revision-Date: 2019-08-17 15:15+0300\n"
 "Last-Translator: Marius Stanciu - Google Translate\n"
 "Language-Team: \n"
 "Language: es\n"
@@ -151,7 +151,7 @@ msgstr "[WARNING_NOTCL] Preferencia de exportación de FlatCAM cancelada."
 
 #: FlatCAMApp.py:2977 FlatCAMApp.py:4804 FlatCAMApp.py:7270 FlatCAMApp.py:7380
 #: FlatCAMApp.py:7501 FlatCAMApp.py:7556 FlatCAMApp.py:7667 FlatCAMApp.py:7790
-#: FlatCAMObj.py:5862 flatcamTools/ToolSolderPaste.py:1400
+#: FlatCAMObj.py:5875 flatcamTools/ToolSolderPaste.py:1400
 msgid ""
 "[WARNING] Permission denied, saving not possible.\n"
 "Most likely another app is holding the file open and not accessible."
@@ -857,7 +857,7 @@ msgstr "Editor de fuente"
 msgid "[ERROR]App.on_view_source() -->%s"
 msgstr "[ERROR]App.on_view_source() -->%s"
 
-#: FlatCAMApp.py:7033 FlatCAMApp.py:8215 FlatCAMObj.py:5643
+#: FlatCAMApp.py:7033 FlatCAMApp.py:8215 FlatCAMObj.py:5656
 #: flatcamTools/ToolSolderPaste.py:1284
 msgid "Code Editor"
 msgstr "Editor de código"
@@ -1363,11 +1363,11 @@ msgstr ""
 msgid "[success] Name changed from {old} to {new}"
 msgstr "[success] El nombre cambió de {old} a {new}"
 
-#: FlatCAMObj.py:558 FlatCAMObj.py:2128 FlatCAMObj.py:3402 FlatCAMObj.py:5536
+#: FlatCAMObj.py:558 FlatCAMObj.py:2128 FlatCAMObj.py:3402 FlatCAMObj.py:5549
 msgid "<span style=\"color:green;\"><b>Basic</b></span>"
 msgstr "<span style=\"color:green;\"><b>Basic</b></span>"
 
-#: FlatCAMObj.py:570 FlatCAMObj.py:2144 FlatCAMObj.py:3424 FlatCAMObj.py:5542
+#: FlatCAMObj.py:570 FlatCAMObj.py:2144 FlatCAMObj.py:3424 FlatCAMObj.py:5555
 msgid "<span style=\"color:red;\"><b>Advanced</b></span>"
 msgstr "<span style=\"color:red;\"><b>Avanzado</b></span>"
 
@@ -1480,8 +1480,8 @@ msgstr ""
 msgid "Generating CNC Code"
 msgstr "Generando Código CNC"
 
-#: FlatCAMObj.py:2785 FlatCAMObj.py:5075 camlib.py:5179 camlib.py:5638
-#: camlib.py:5905
+#: FlatCAMObj.py:2785 FlatCAMObj.py:5075 camlib.py:5184 camlib.py:5680
+#: camlib.py:5970
 msgid ""
 "[ERROR]The Toolchange X,Y field in Edit -> Preferences has to be in the "
 "format (x, y) \n"
@@ -1601,25 +1601,25 @@ msgstr ""
 msgid "[success] Geometry Offset done."
 msgstr "[success] Desplazamiento de geometría realizado."
 
-#: FlatCAMObj.py:5604 FlatCAMObj.py:5609 flatcamTools/ToolSolderPaste.py:1368
+#: FlatCAMObj.py:5617 FlatCAMObj.py:5622 flatcamTools/ToolSolderPaste.py:1368
 msgid "Export Machine Code ..."
 msgstr "Exportar código de máquina ..."
 
-#: FlatCAMObj.py:5615 flatcamTools/ToolSolderPaste.py:1371
+#: FlatCAMObj.py:5628 flatcamTools/ToolSolderPaste.py:1371
 msgid "[WARNING_NOTCL] Export Machine Code cancelled ..."
 msgstr "[WARNING_NOTCL] Exportar código de máquina cancelado ..."
 
-#: FlatCAMObj.py:5632
+#: FlatCAMObj.py:5645
 #, python-format
 msgid "[success] Machine Code file saved to: %s"
 msgstr "[success] Archivo de código de máquina guardado en: %s"
 
-#: FlatCAMObj.py:5654
+#: FlatCAMObj.py:5667
 #, python-format
 msgid "[ERROR]FlatCAMCNNJob.on_edit_code_click() -->%s"
 msgstr "[ERROR]FlatCAMCNNJob.on_edit_code_click() -->%s"
 
-#: FlatCAMObj.py:5771
+#: FlatCAMObj.py:5784
 #, python-format
 msgid ""
 "[WARNING_NOTCL] This CNCJob object can't be processed because it is a %s "
@@ -1628,11 +1628,11 @@ msgstr ""
 "[WARNING_NOTCL] Este objeto CNCJob no se puede procesar porque es un objeto "
 "%s CNCJob."
 
-#: FlatCAMObj.py:5824
+#: FlatCAMObj.py:5837
 msgid "[ERROR_NOTCL] G-code does not have a units code: either G20 or G21"
 msgstr "[ERROR_NOTCL] El código G no tiene un código de unidades: G20 o G21"
 
-#: FlatCAMObj.py:5837
+#: FlatCAMObj.py:5850
 msgid ""
 "[ERROR_NOTCL] Cancelled. The Toolchange Custom code is enabled but it's "
 "empty."
@@ -1640,17 +1640,17 @@ msgstr ""
 "[ERROR_NOTCL] Cancelado. El código personalizado de Toolchange está "
 "habilitado pero está vacío."
 
-#: FlatCAMObj.py:5844
+#: FlatCAMObj.py:5857
 msgid "[success] Toolchange G-code was replaced by a custom code."
 msgstr ""
 "[success] El código G de Toolchange fue reemplazado por un código "
 "personalizado."
 
-#: FlatCAMObj.py:5858 flatcamTools/ToolSolderPaste.py:1397
+#: FlatCAMObj.py:5871 flatcamTools/ToolSolderPaste.py:1397
 msgid "[WARNING_NOTCL] No such file or directory"
 msgstr "[WARNING_NOTCL] El fichero o directorio no existe"
 
-#: FlatCAMObj.py:5882 FlatCAMObj.py:5894
+#: FlatCAMObj.py:5895 FlatCAMObj.py:5907
 msgid ""
 "[WARNING_NOTCL] The used postprocessor file has to have in it's name: "
 "'toolchange_custom'"
@@ -1658,7 +1658,7 @@ msgstr ""
 "[WARNING_NOTCL] El archivo de postprocesador usado debe tener su nombre: "
 "'toolchange_custom'"
 
-#: FlatCAMObj.py:5900
+#: FlatCAMObj.py:5913
 msgid "[ERROR] There is no postprocessor file."
 msgstr "[ERROR] No hay archivo de postprocesador."
 
@@ -1803,12 +1803,12 @@ msgstr ""
 "por no tener una herramienta asociada.\n"
 "Compruebe el GCode resultante."
 
-#: camlib.py:5088
+#: camlib.py:5093
 #, python-format
 msgid "[ERROR] There is no such parameter: %s"
 msgstr "[ERROR] No hay tal parámetro: %s"
 
-#: camlib.py:5158
+#: camlib.py:5163
 msgid ""
 "[WARNING] The Cut Z parameter has positive value. It is the depth value to "
 "drill into material.\n"
@@ -1822,22 +1822,22 @@ msgstr ""
 "tipográfico, por lo tanto, la aplicación convertirá el valor a negativo. "
 "Compruebe el código CNC resultante (Gcode, etc.)."
 
-#: camlib.py:5165 camlib.py:5661 camlib.py:5928
+#: camlib.py:5170 camlib.py:5703 camlib.py:5993
 #, python-format
 msgid ""
 "[WARNING] The Cut Z parameter is zero. There will be no cut, skipping %s file"
 msgstr ""
 "[WARNING] El parámetro Cut Z es cero. No habrá corte, saltando %s archivo"
 
-#: camlib.py:5394 camlib.py:5491 camlib.py:5549
+#: camlib.py:5410 camlib.py:5516 camlib.py:5582
 msgid "[ERROR_NOTCL] The loaded Excellon file has no drills ..."
 msgstr "[ERROR_NOTCL] El archivo Excellon cargado no tiene perforaciones ..."
 
-#: camlib.py:5496
+#: camlib.py:5521
 msgid "[ERROR_NOTCL] Wrong optimization type selected."
 msgstr "[ERROR_NOTCL] Tipo de optimización incorrecto seleccionado."
 
-#: camlib.py:5649 camlib.py:5916
+#: camlib.py:5691 camlib.py:5981
 msgid ""
 "[ERROR_NOTCL] Cut_Z parameter is None or zero. Most likely a bad "
 "combinations of other parameters."
@@ -1845,7 +1845,7 @@ msgstr ""
 "[ERROR_NOTCL] El parámetro Cut_Z es Ninguno o cero. Lo más probable es una "
 "mala combinación de otros parámetros."
 
-#: camlib.py:5654 camlib.py:5921
+#: camlib.py:5696 camlib.py:5986
 msgid ""
 "[WARNING] The Cut Z parameter has positive value. It is the depth value to "
 "cut into material.\n"
@@ -1859,11 +1859,11 @@ msgstr ""
 "tipográfico, por lo tanto, la aplicación convertirá el valor a negativo. "
 "Verifique el código CNC resultante (Gcode, etc.)."
 
-#: camlib.py:5670 camlib.py:5933
+#: camlib.py:5712 camlib.py:5998
 msgid "[ERROR_NOTCL] Travel Z parameter is None or zero."
 msgstr "[ERROR_NOTCL] El parámetro Travel Z des Ninguno o cero."
 
-#: camlib.py:5674 camlib.py:5937
+#: camlib.py:5716 camlib.py:6002
 msgid ""
 "[WARNING] The Travel Z parameter has negative value. It is the height value "
 "to travel between cuts.\n"
@@ -1877,7 +1877,7 @@ msgstr ""
 "error tipográfico, por lo tanto, la aplicación convertirá el valor a "
 "positivo. Verifique el código CNC resultante (Gcode, etc.)."
 
-#: camlib.py:5681 camlib.py:5944
+#: camlib.py:5723 camlib.py:6009
 #, python-format
 msgid ""
 "[WARNING] The Z Travel parameter is zero. This is dangerous, skipping %s file"
@@ -1885,12 +1885,12 @@ msgstr ""
 "[WARNING] El parámetro Z Travel es cero. Esto es peligroso, saltando el "
 "archive %s"
 
-#: camlib.py:5811
+#: camlib.py:5876
 #, python-format
 msgid "[ERROR]Expected a Geometry, got %s"
 msgstr "[ERROR] Se esperaba una geometría, se obtuvo %s"
 
-#: camlib.py:5817
+#: camlib.py:5882
 msgid ""
 "[ERROR_NOTCL] Trying to generate a CNC Job from a Geometry object without "
 "solid_geometry."
@@ -1898,7 +1898,7 @@ msgstr ""
 "[ERROR_NOTCL] Intentando generar un trabajo de CNC desde un objeto de "
 "geometría sin solid_geometry."
 
-#: camlib.py:5856
+#: camlib.py:5921
 msgid ""
 "[ERROR_NOTCL] The Tool Offset value is too negative to use for the "
 "current_geometry.\n"
@@ -1908,7 +1908,7 @@ msgstr ""
 "para usarlo con la current_geometry.\n"
 "Aumente el valor (en el módulo) y vuelva a intentarlo."
 
-#: camlib.py:6068
+#: camlib.py:6155
 msgid "[ERROR_NOTCL] There is no tool data in the SolderPaste geometry."
 msgstr ""
 "[ERROR_NOTCL] No hay datos de herramientas en la geometría SolderPaste."
@@ -2732,7 +2732,7 @@ msgstr "Espejo (Flip)"
 
 #: flatcamEditors/FlatCAMGeoEditor.py:622
 #: flatcamEditors/FlatCAMGrbEditor.py:4746 flatcamGUI/ObjectUI.py:127
-#: flatcamGUI/ObjectUI.py:889 flatcamGUI/ObjectUI.py:1471
+#: flatcamGUI/ObjectUI.py:889 flatcamGUI/ObjectUI.py:1484
 #: flatcamTools/ToolTransform.py:28
 msgid "Offset"
 msgstr "Compensar"
@@ -3748,7 +3748,7 @@ msgstr "Código"
 
 #: flatcamEditors/FlatCAMGrbEditor.py:2337
 #: flatcamEditors/FlatCAMGrbEditor.py:3758 flatcamGUI/ObjectUI.py:227
-#: flatcamGUI/ObjectUI.py:889 flatcamGUI/ObjectUI.py:1471
+#: flatcamGUI/ObjectUI.py:889 flatcamGUI/ObjectUI.py:1484
 msgid "Type"
 msgstr "Tipo"
 
@@ -4609,12 +4609,10 @@ msgid "Add Drill\tD"
 msgstr "Añadir taladro\tD"
 
 #: flatcamGUI/FlatCAMGUI.py:468
-#| msgid "Add Drill Array\tA"
 msgid "Add Slot Array\tQ"
 msgstr "Agregar matriz de ranuras\tQ"
 
 #: flatcamGUI/FlatCAMGUI.py:470
-#| msgid "Add Polygon\tN"
 msgid "Add Slot\tW"
 msgstr "Agregar ranura\tW"
 
@@ -6609,7 +6607,7 @@ msgstr "Gráfico"
 
 #: flatcamGUI/FlatCAMGUI.py:4189 flatcamGUI/FlatCAMGUI.py:5467
 #: flatcamGUI/ObjectUI.py:174 flatcamGUI/ObjectUI.py:544
-#: flatcamGUI/ObjectUI.py:877 flatcamGUI/ObjectUI.py:1456
+#: flatcamGUI/ObjectUI.py:877 flatcamGUI/ObjectUI.py:1469
 msgid "Plot (show) this object."
 msgstr "Trazar (mostrar) este objeto."
 
@@ -7849,7 +7847,7 @@ msgid "CNC Job General"
 msgstr "CNC trabajo general"
 
 #: flatcamGUI/FlatCAMGUI.py:5840 flatcamGUI/ObjectUI.py:542
-#: flatcamGUI/ObjectUI.py:875 flatcamGUI/ObjectUI.py:1453
+#: flatcamGUI/ObjectUI.py:875 flatcamGUI/ObjectUI.py:1466
 msgid "Plot Object"
 msgstr "Trazar objeto"
 
@@ -7952,7 +7950,7 @@ msgid "<b>Export G-Code:</b>"
 msgstr "<b> Exportar código G: </b>"
 
 #: flatcamGUI/FlatCAMGUI.py:5965 flatcamGUI/FlatCAMGUI.py:6006
-#: flatcamGUI/ObjectUI.py:1489
+#: flatcamGUI/ObjectUI.py:1502
 msgid ""
 "Export and save G-Code to\n"
 "make this object to a file."
@@ -7976,7 +7974,7 @@ msgstr ""
 msgid "Append to G-Code:"
 msgstr "Adjuntar al código G:"
 
-#: flatcamGUI/FlatCAMGUI.py:5984 flatcamGUI/ObjectUI.py:1511
+#: flatcamGUI/FlatCAMGUI.py:5984 flatcamGUI/ObjectUI.py:1524
 msgid ""
 "Type here any G-Code commands you would\n"
 "like to append to the generated file.\n"
@@ -7990,7 +7988,7 @@ msgstr ""
 msgid "CNC Job Adv. Options"
 msgstr "CNC trabajo adv. Opc."
 
-#: flatcamGUI/FlatCAMGUI.py:6012 flatcamGUI/ObjectUI.py:1529
+#: flatcamGUI/FlatCAMGUI.py:6012 flatcamGUI/ObjectUI.py:1542
 msgid "Toolchange G-Code:"
 msgstr "Cambio de herra. G-Code:"
 
@@ -8006,11 +8004,11 @@ msgstr ""
 "Esto constituirá un GCode de cambio de herramienta personalizado,\n"
 "o una macro de cambio de herramientas."
 
-#: flatcamGUI/FlatCAMGUI.py:6028 flatcamGUI/ObjectUI.py:1551
+#: flatcamGUI/FlatCAMGUI.py:6028 flatcamGUI/ObjectUI.py:1564
 msgid "Use Toolchange Macro"
 msgstr "Util. la herra. de cambio de macro"
 
-#: flatcamGUI/FlatCAMGUI.py:6030 flatcamGUI/ObjectUI.py:1554
+#: flatcamGUI/FlatCAMGUI.py:6030 flatcamGUI/ObjectUI.py:1567
 msgid ""
 "Check this box if you want to use\n"
 "a Custom Toolchange GCode (macro)."
@@ -8018,7 +8016,7 @@ msgstr ""
 "Marque esta casilla si desea utilizar\n"
 "una herramienta personalizada para cambiar GCode (macro)."
 
-#: flatcamGUI/FlatCAMGUI.py:6042 flatcamGUI/ObjectUI.py:1563
+#: flatcamGUI/FlatCAMGUI.py:6042 flatcamGUI/ObjectUI.py:1576
 msgid ""
 "A list of the FlatCAM variables that can be used\n"
 "in the Toolchange event.\n"
@@ -8028,35 +8026,35 @@ msgstr ""
 "en el evento Cambio de herramienta.\n"
 "Deben estar rodeados por el símbolo '%'"
 
-#: flatcamGUI/FlatCAMGUI.py:6049 flatcamGUI/ObjectUI.py:1570
+#: flatcamGUI/FlatCAMGUI.py:6049 flatcamGUI/ObjectUI.py:1583
 msgid "Parameters"
 msgstr "Parámetros"
 
-#: flatcamGUI/FlatCAMGUI.py:6052 flatcamGUI/ObjectUI.py:1573
+#: flatcamGUI/FlatCAMGUI.py:6052 flatcamGUI/ObjectUI.py:1586
 msgid "FlatCAM CNC parameters"
 msgstr "Parámetros de FlatCAM CNC"
 
-#: flatcamGUI/FlatCAMGUI.py:6053 flatcamGUI/ObjectUI.py:1574
+#: flatcamGUI/FlatCAMGUI.py:6053 flatcamGUI/ObjectUI.py:1587
 msgid "tool = tool number"
 msgstr "tool = número de herramienta"
 
-#: flatcamGUI/FlatCAMGUI.py:6054 flatcamGUI/ObjectUI.py:1575
+#: flatcamGUI/FlatCAMGUI.py:6054 flatcamGUI/ObjectUI.py:1588
 msgid "tooldia = tool diameter"
 msgstr "tooldia = diá. de la herramienta"
 
-#: flatcamGUI/FlatCAMGUI.py:6055 flatcamGUI/ObjectUI.py:1576
+#: flatcamGUI/FlatCAMGUI.py:6055 flatcamGUI/ObjectUI.py:1589
 msgid "t_drills = for Excellon, total number of drills"
 msgstr "t_drills = para Excellon, núm. total de taladros"
 
-#: flatcamGUI/FlatCAMGUI.py:6056 flatcamGUI/ObjectUI.py:1577
+#: flatcamGUI/FlatCAMGUI.py:6056 flatcamGUI/ObjectUI.py:1590
 msgid "x_toolchange = X coord for Toolchange"
 msgstr "x_toolchange = Coord. X para cambio de herra."
 
-#: flatcamGUI/FlatCAMGUI.py:6057 flatcamGUI/ObjectUI.py:1578
+#: flatcamGUI/FlatCAMGUI.py:6057 flatcamGUI/ObjectUI.py:1591
 msgid "y_toolchange = Y coord for Toolchange"
 msgstr "y_toolchange = Coord. Y para cambio de herra."
 
-#: flatcamGUI/FlatCAMGUI.py:6058 flatcamGUI/ObjectUI.py:1579
+#: flatcamGUI/FlatCAMGUI.py:6058 flatcamGUI/ObjectUI.py:1592
 msgid "z_toolchange = Z coord for Toolchange"
 msgstr "x_toolchange = Coord. X para cambio de herra."
 
@@ -8068,15 +8066,15 @@ msgstr "z_cut = Z profund. para el corte."
 msgid "z_move = Z height for travel"
 msgstr "z_move = Altura Z para viajar"
 
-#: flatcamGUI/FlatCAMGUI.py:6061 flatcamGUI/ObjectUI.py:1582
+#: flatcamGUI/FlatCAMGUI.py:6061 flatcamGUI/ObjectUI.py:1595
 msgid "z_depthpercut = the step value for multidepth cut"
 msgstr "z_depthpercut = el valor de paso para corte multidepto"
 
-#: flatcamGUI/FlatCAMGUI.py:6062 flatcamGUI/ObjectUI.py:1583
+#: flatcamGUI/FlatCAMGUI.py:6062 flatcamGUI/ObjectUI.py:1596
 msgid "spindlesspeed = the value for the spindle speed"
 msgstr "spindlesspeed = el valor para la velocidad del husillo"
 
-#: flatcamGUI/FlatCAMGUI.py:6064 flatcamGUI/ObjectUI.py:1584
+#: flatcamGUI/FlatCAMGUI.py:6064 flatcamGUI/ObjectUI.py:1597
 msgid "dwelltime = time to dwell to allow the spindle to reach it's set RPM"
 msgstr ""
 "dwelltime = tiempo de espera para permitir que el husillo alcance su RPM "
@@ -9508,11 +9506,11 @@ msgstr ""
 "atenuado y Cut Z se calcula automáticamente a partir de la nueva\n"
 "mostró entradas de formulario de IU denominadas V-Tipo Dia y V-Tipo ángulo."
 
-#: flatcamGUI/ObjectUI.py:889 flatcamGUI/ObjectUI.py:1471
+#: flatcamGUI/ObjectUI.py:889 flatcamGUI/ObjectUI.py:1484
 msgid "Dia"
 msgstr "Dia"
 
-#: flatcamGUI/ObjectUI.py:889 flatcamGUI/ObjectUI.py:1471
+#: flatcamGUI/ObjectUI.py:889 flatcamGUI/ObjectUI.py:1484
 #: flatcamTools/ToolNonCopperClear.py:83 flatcamTools/ToolPaint.py:80
 msgid "TT"
 msgstr "TT"
@@ -9834,7 +9832,7 @@ msgstr "<b>Mostrar anotación:</b>"
 msgid "<b>Travelled dist.:</b>"
 msgstr "<b>Dist. recorrida.:</b>"
 
-#: flatcamGUI/ObjectUI.py:1397 flatcamGUI/ObjectUI.py:1404
+#: flatcamGUI/ObjectUI.py:1396 flatcamGUI/ObjectUI.py:1401
 msgid ""
 "This is the total travelled distance on X-Y plane.\n"
 "In current units."
@@ -9842,11 +9840,23 @@ msgstr ""
 "Esta es la distancia total recorrida en el plano X-Y.\n"
 "En unidades actuales."
 
-#: flatcamGUI/ObjectUI.py:1435
+#: flatcamGUI/ObjectUI.py:1406
+msgid "<b>Estimated time:</b>"
+msgstr "<b>Duración estimada:</b>"
+
+#: flatcamGUI/ObjectUI.py:1408 flatcamGUI/ObjectUI.py:1413
+msgid ""
+"This is the estimated time to do the routing/drilling,\n"
+"without the time spent in ToolChange events."
+msgstr ""
+"Este es el tiempo estimado para hacer el enrutamiento / perforación,\n"
+"sin el tiempo dedicado a los eventos de cambio de herramienta."
+
+#: flatcamGUI/ObjectUI.py:1448
 msgid "<b>CNC Tools Table</b>"
 msgstr "<b>Mesa de herra. CNC</b>"
 
-#: flatcamGUI/ObjectUI.py:1438
+#: flatcamGUI/ObjectUI.py:1451
 msgid ""
 "Tools in this CNCJob object used for cutting.\n"
 "The tool diameter is used for plotting on canvas.\n"
@@ -9869,27 +9879,27 @@ msgstr ""
 "C4),\n"
 "bola (B) o en forma de V (V)."
 
-#: flatcamGUI/ObjectUI.py:1472
+#: flatcamGUI/ObjectUI.py:1485
 msgid "P"
 msgstr "P"
 
-#: flatcamGUI/ObjectUI.py:1478
+#: flatcamGUI/ObjectUI.py:1491
 msgid "Update Plot"
 msgstr "Actualizar Trama"
 
-#: flatcamGUI/ObjectUI.py:1480
+#: flatcamGUI/ObjectUI.py:1493
 msgid "Update the plot."
 msgstr "Actualiza la trama."
 
-#: flatcamGUI/ObjectUI.py:1487
+#: flatcamGUI/ObjectUI.py:1500
 msgid "<b>Export CNC Code:</b>"
 msgstr "<b>Exportar código CNC:</b>"
 
-#: flatcamGUI/ObjectUI.py:1495
+#: flatcamGUI/ObjectUI.py:1508
 msgid "Prepend to CNC Code:"
 msgstr "Anteponer al código del CNC:"
 
-#: flatcamGUI/ObjectUI.py:1498
+#: flatcamGUI/ObjectUI.py:1511
 msgid ""
 "Type here any G-Code commands you would\n"
 "like to add to the beginning of the generated file."
@@ -9897,11 +9907,11 @@ msgstr ""
 "Escriba aquí cualquier comando de código G que desee\n"
 "desea agregar al comienzo del archivo generado."
 
-#: flatcamGUI/ObjectUI.py:1508
+#: flatcamGUI/ObjectUI.py:1521
 msgid "Append to CNC Code:"
 msgstr "Añadir al código CNC:"
 
-#: flatcamGUI/ObjectUI.py:1532
+#: flatcamGUI/ObjectUI.py:1545
 msgid ""
 "Type here any G-Code commands you would\n"
 "like to be executed when Toolchange event is encountered.\n"
@@ -9923,19 +9933,19 @@ msgstr ""
 "que tiene 'toolchange_custom' en su nombre y esto está construido\n"
 "teniendo como plantilla el archivo posprocesador 'Toolchange Custom'."
 
-#: flatcamGUI/ObjectUI.py:1580
+#: flatcamGUI/ObjectUI.py:1593
 msgid "z_cut = depth where to cut"
 msgstr "z_cut = profundidad donde cortar"
 
-#: flatcamGUI/ObjectUI.py:1581
+#: flatcamGUI/ObjectUI.py:1594
 msgid "z_move = height where to travel"
 msgstr "z_move = altura donde viajar"
 
-#: flatcamGUI/ObjectUI.py:1600
+#: flatcamGUI/ObjectUI.py:1613
 msgid "View CNC Code"
 msgstr "Ver código CNC"
 
-#: flatcamGUI/ObjectUI.py:1603
+#: flatcamGUI/ObjectUI.py:1616
 msgid ""
 "Opens TAB to view/modify/print G-Code\n"
 "file."
@@ -9943,11 +9953,11 @@ msgstr ""
 "Abre la pestaña para ver / modificar / imprimir el código G\n"
 "expediente."
 
-#: flatcamGUI/ObjectUI.py:1609
+#: flatcamGUI/ObjectUI.py:1622
 msgid "Save CNC Code"
 msgstr "Guardar código CNC"
 
-#: flatcamGUI/ObjectUI.py:1612
+#: flatcamGUI/ObjectUI.py:1625
 msgid ""
 "Opens dialog to save G-Code\n"
 "file."

BIN
locale/pt_BR/LC_MESSAGES/strings.mo


+ 85 - 75
locale/pt_BR/LC_MESSAGES/strings.po

@@ -2,8 +2,8 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: \n"
-"POT-Creation-Date: 2019-08-17 00:43+0300\n"
-"PO-Revision-Date: 2019-08-17 00:56+0300\n"
+"POT-Creation-Date: 2019-08-17 15:15+0300\n"
+"PO-Revision-Date: 2019-08-17 15:16+0300\n"
 "Last-Translator: Carlos Stein <carlos.stein@gmail.com>\n"
 "Language-Team: \n"
 "Language: pt_BR\n"
@@ -149,7 +149,7 @@ msgstr "[WARNING_NOTCL] Exportação de preferências do FlatCAM cancelada."
 
 #: FlatCAMApp.py:2977 FlatCAMApp.py:4804 FlatCAMApp.py:7270 FlatCAMApp.py:7380
 #: FlatCAMApp.py:7501 FlatCAMApp.py:7556 FlatCAMApp.py:7667 FlatCAMApp.py:7790
-#: FlatCAMObj.py:5862 flatcamTools/ToolSolderPaste.py:1400
+#: FlatCAMObj.py:5875 flatcamTools/ToolSolderPaste.py:1400
 msgid ""
 "[WARNING] Permission denied, saving not possible.\n"
 "Most likely another app is holding the file open and not accessible."
@@ -845,7 +845,7 @@ msgstr "Editor de Fontes"
 msgid "[ERROR]App.on_view_source() -->%s"
 msgstr "[ERROR]App.on_view_source() -->%s"
 
-#: FlatCAMApp.py:7033 FlatCAMApp.py:8215 FlatCAMObj.py:5643
+#: FlatCAMApp.py:7033 FlatCAMApp.py:8215 FlatCAMObj.py:5656
 #: flatcamTools/ToolSolderPaste.py:1284
 msgid "Code Editor"
 msgstr "Editor de Códigos"
@@ -1347,11 +1347,11 @@ msgstr ""
 msgid "[success] Name changed from {old} to {new}"
 msgstr "[success] Nome alterado de {old} para {new}"
 
-#: FlatCAMObj.py:558 FlatCAMObj.py:2128 FlatCAMObj.py:3402 FlatCAMObj.py:5536
+#: FlatCAMObj.py:558 FlatCAMObj.py:2128 FlatCAMObj.py:3402 FlatCAMObj.py:5549
 msgid "<span style=\"color:green;\"><b>Basic</b></span>"
 msgstr "<span style=\"color:green;\"><b>Básico</b></span>"
 
-#: FlatCAMObj.py:570 FlatCAMObj.py:2144 FlatCAMObj.py:3424 FlatCAMObj.py:5542
+#: FlatCAMObj.py:570 FlatCAMObj.py:2144 FlatCAMObj.py:3424 FlatCAMObj.py:5555
 msgid "<span style=\"color:red;\"><b>Advanced</b></span>"
 msgstr "<span style=\"color:red;\"><b>Avançado</b></span>"
 
@@ -1463,8 +1463,8 @@ msgstr ""
 msgid "Generating CNC Code"
 msgstr "Gerando Código CNC"
 
-#: FlatCAMObj.py:2785 FlatCAMObj.py:5075 camlib.py:5179 camlib.py:5638
-#: camlib.py:5905
+#: FlatCAMObj.py:2785 FlatCAMObj.py:5075 camlib.py:5184 camlib.py:5680
+#: camlib.py:5970
 msgid ""
 "[ERROR]The Toolchange X,Y field in Edit -> Preferences has to be in the "
 "format (x, y) \n"
@@ -1581,25 +1581,25 @@ msgstr ""
 msgid "[success] Geometry Offset done."
 msgstr "[success] Deslocamento de Geometria feito."
 
-#: FlatCAMObj.py:5604 FlatCAMObj.py:5609 flatcamTools/ToolSolderPaste.py:1368
+#: FlatCAMObj.py:5617 FlatCAMObj.py:5622 flatcamTools/ToolSolderPaste.py:1368
 msgid "Export Machine Code ..."
 msgstr "Exportar Código da Máquina ..."
 
-#: FlatCAMObj.py:5615 flatcamTools/ToolSolderPaste.py:1371
+#: FlatCAMObj.py:5628 flatcamTools/ToolSolderPaste.py:1371
 msgid "[WARNING_NOTCL] Export Machine Code cancelled ..."
 msgstr "[WARNING_NOTCL] Exportar código da máquina cancelado ..."
 
-#: FlatCAMObj.py:5632
+#: FlatCAMObj.py:5645
 #, python-format
 msgid "[success] Machine Code file saved to: %s"
 msgstr "[success] Arquivo G-Code salvo em: %s"
 
-#: FlatCAMObj.py:5654
+#: FlatCAMObj.py:5667
 #, python-format
 msgid "[ERROR]FlatCAMCNNJob.on_edit_code_click() -->%s"
 msgstr "[ERROR]FlatCAMCNNJob.on_edit_code_click() -->%s"
 
-#: FlatCAMObj.py:5771
+#: FlatCAMObj.py:5784
 #, python-format
 msgid ""
 "[WARNING_NOTCL] This CNCJob object can't be processed because it is a %s "
@@ -1608,11 +1608,11 @@ msgstr ""
 "[WARNING_NOTCL] Este objeto Trabalho CNC não pode ser processado porque é um "
 "objeto %s CNCJob."
 
-#: FlatCAMObj.py:5824
+#: FlatCAMObj.py:5837
 msgid "[ERROR_NOTCL] G-code does not have a units code: either G20 or G21"
 msgstr "[ERROR_NOTCL] O G-Code não possui um código de unidade: G20 ou G21"
 
-#: FlatCAMObj.py:5837
+#: FlatCAMObj.py:5850
 msgid ""
 "[ERROR_NOTCL] Cancelled. The Toolchange Custom code is enabled but it's "
 "empty."
@@ -1620,16 +1620,16 @@ msgstr ""
 "[ERROR_NOTCL] Cancelado. O código personalizado do Toolchange está ativado, "
 "mas está vazio."
 
-#: FlatCAMObj.py:5844
+#: FlatCAMObj.py:5857
 msgid "[success] Toolchange G-code was replaced by a custom code."
 msgstr ""
 "[success] O G-Code do Toolchange foi substituído por um código personalizado."
 
-#: FlatCAMObj.py:5858 flatcamTools/ToolSolderPaste.py:1397
+#: FlatCAMObj.py:5871 flatcamTools/ToolSolderPaste.py:1397
 msgid "[WARNING_NOTCL] No such file or directory"
 msgstr "[WARNING_NOTCL] Nenhum arquivo ou diretório"
 
-#: FlatCAMObj.py:5882 FlatCAMObj.py:5894
+#: FlatCAMObj.py:5895 FlatCAMObj.py:5907
 msgid ""
 "[WARNING_NOTCL] The used postprocessor file has to have in it's name: "
 "'toolchange_custom'"
@@ -1637,7 +1637,7 @@ msgstr ""
 "[WARNING_NOTCL] O arquivo do postprocessor usado deve ter em seu nome: "
 "'toolchange_custom'"
 
-#: FlatCAMObj.py:5900
+#: FlatCAMObj.py:5913
 msgid "[ERROR] There is no postprocessor file."
 msgstr "[ERROR] Não há arquivo de pós-processamento."
 
@@ -1785,12 +1785,12 @@ msgstr ""
 "uma ferramenta associada. \n"
 "Verifique o G-Code resultante."
 
-#: camlib.py:5088
+#: camlib.py:5093
 #, python-format
 msgid "[ERROR] There is no such parameter: %s"
 msgstr "[ERROR] Não existe esse parâmetro: %s"
 
-#: camlib.py:5158
+#: camlib.py:5163
 msgid ""
 "[WARNING] The Cut Z parameter has positive value. It is the depth value to "
 "drill into material.\n"
@@ -1803,7 +1803,7 @@ msgstr ""
 "um erro de digitação, o aplicativo converterá o valor para negativo.\n"
 "Verifique o código CNC resultante (G-Code, etc.)."
 
-#: camlib.py:5165 camlib.py:5661 camlib.py:5928
+#: camlib.py:5170 camlib.py:5703 camlib.py:5993
 #, python-format
 msgid ""
 "[WARNING] The Cut Z parameter is zero. There will be no cut, skipping %s file"
@@ -1811,15 +1811,15 @@ msgstr ""
 "[WARNING] O parâmetro Profundidade de Corte é zero. Não haverá corte, "
 "ignorando arquivo %s"
 
-#: camlib.py:5394 camlib.py:5491 camlib.py:5549
+#: camlib.py:5410 camlib.py:5516 camlib.py:5582
 msgid "[ERROR_NOTCL] The loaded Excellon file has no drills ..."
 msgstr "[ERROR_NOTCL] O arquivo Excellon carregado não tem brocas ..."
 
-#: camlib.py:5496
+#: camlib.py:5521
 msgid "[ERROR_NOTCL] Wrong optimization type selected."
 msgstr "[ERROR_NOTCL] Tipo de otimização incorreto selecionado."
 
-#: camlib.py:5649 camlib.py:5916
+#: camlib.py:5691 camlib.py:5981
 msgid ""
 "[ERROR_NOTCL] Cut_Z parameter is None or zero. Most likely a bad "
 "combinations of other parameters."
@@ -1827,7 +1827,7 @@ msgstr ""
 "O parâmetro [ERROR_NOTCL] Cut_Z está vazio ou é zero. O mais provável é uma "
 "combinação ruim de outros parâmetros."
 
-#: camlib.py:5654 camlib.py:5921
+#: camlib.py:5696 camlib.py:5986
 msgid ""
 "[WARNING] The Cut Z parameter has positive value. It is the depth value to "
 "cut into material.\n"
@@ -1840,11 +1840,11 @@ msgstr ""
 "um erro de digitação, o aplicativo converterá o valor para negativo.\n"
 "Verifique o código CNC resultante (G-Code, etc.)."
 
-#: camlib.py:5670 camlib.py:5933
+#: camlib.py:5712 camlib.py:5998
 msgid "[ERROR_NOTCL] Travel Z parameter is None or zero."
 msgstr "[ERROR_NOTCL] O parâmetro Altura de Deslocamento Z é Nulo ou zero."
 
-#: camlib.py:5674 camlib.py:5937
+#: camlib.py:5716 camlib.py:6002
 msgid ""
 "[WARNING] The Travel Z parameter has negative value. It is the height value "
 "to travel between cuts.\n"
@@ -1858,7 +1858,7 @@ msgstr ""
 "positivo.\n"
 "Verifique o código CNC resultante (G-Code, etc.)."
 
-#: camlib.py:5681 camlib.py:5944
+#: camlib.py:5723 camlib.py:6009
 #, python-format
 msgid ""
 "[WARNING] The Z Travel parameter is zero. This is dangerous, skipping %s file"
@@ -1866,12 +1866,12 @@ msgstr ""
 "[WARNING] O parâmetro Altura de Deslocamento é zero. Isso é perigoso, "
 "ignorando arquivo %s"
 
-#: camlib.py:5811
+#: camlib.py:5876
 #, python-format
 msgid "[ERROR]Expected a Geometry, got %s"
 msgstr "[ERROR] Esperada uma geometria, recebido %s"
 
-#: camlib.py:5817
+#: camlib.py:5882
 msgid ""
 "[ERROR_NOTCL] Trying to generate a CNC Job from a Geometry object without "
 "solid_geometry."
@@ -1879,7 +1879,7 @@ msgstr ""
 "[ERROR_NOTCL] Tentando gerar um trabalho CNC a partir de um objeto Geometria "
 "sem solid_geometry."
 
-#: camlib.py:5856
+#: camlib.py:5921
 msgid ""
 "[ERROR_NOTCL] The Tool Offset value is too negative to use for the "
 "current_geometry.\n"
@@ -1889,7 +1889,7 @@ msgstr ""
 "usar na current_geometry.\n"
 "Altere o valor e tente novamente."
 
-#: camlib.py:6068
+#: camlib.py:6155
 msgid "[ERROR_NOTCL] There is no tool data in the SolderPaste geometry."
 msgstr ""
 "[ERROR_NOTCL] Não há dados da ferramenta na geometria da Pasta de Solda."
@@ -2707,7 +2707,7 @@ msgstr "Espelhar (Flip)"
 
 #: flatcamEditors/FlatCAMGeoEditor.py:622
 #: flatcamEditors/FlatCAMGrbEditor.py:4746 flatcamGUI/ObjectUI.py:127
-#: flatcamGUI/ObjectUI.py:889 flatcamGUI/ObjectUI.py:1471
+#: flatcamGUI/ObjectUI.py:889 flatcamGUI/ObjectUI.py:1484
 #: flatcamTools/ToolTransform.py:28
 msgid "Offset"
 msgstr "Deslocamento"
@@ -3717,7 +3717,7 @@ msgstr "Código"
 
 #: flatcamEditors/FlatCAMGrbEditor.py:2337
 #: flatcamEditors/FlatCAMGrbEditor.py:3758 flatcamGUI/ObjectUI.py:227
-#: flatcamGUI/ObjectUI.py:889 flatcamGUI/ObjectUI.py:1471
+#: flatcamGUI/ObjectUI.py:889 flatcamGUI/ObjectUI.py:1484
 msgid "Type"
 msgstr "Tipo"
 
@@ -4573,12 +4573,10 @@ msgid "Add Drill\tD"
 msgstr "Adicionar Broca\tD"
 
 #: flatcamGUI/FlatCAMGUI.py:468
-#| msgid "Add Drill Array\tA"
 msgid "Add Slot Array\tQ"
 msgstr "Adic. matriz de ranhuras\tQ"
 
 #: flatcamGUI/FlatCAMGUI.py:470
-#| msgid "Add Polygon\tN"
 msgid "Add Slot\tW"
 msgstr "Adicionar Ranhura\tW"
 
@@ -7172,7 +7170,7 @@ msgstr "Gráfico"
 
 #: flatcamGUI/FlatCAMGUI.py:4189 flatcamGUI/FlatCAMGUI.py:5467
 #: flatcamGUI/ObjectUI.py:174 flatcamGUI/ObjectUI.py:544
-#: flatcamGUI/ObjectUI.py:877 flatcamGUI/ObjectUI.py:1456
+#: flatcamGUI/ObjectUI.py:877 flatcamGUI/ObjectUI.py:1469
 msgid "Plot (show) this object."
 msgstr "Mostra o objeto no gráfico."
 
@@ -8376,7 +8374,7 @@ msgid "CNC Job General"
 msgstr "Trabalho CNC Geral"
 
 #: flatcamGUI/FlatCAMGUI.py:5840 flatcamGUI/ObjectUI.py:542
-#: flatcamGUI/ObjectUI.py:875 flatcamGUI/ObjectUI.py:1453
+#: flatcamGUI/ObjectUI.py:875 flatcamGUI/ObjectUI.py:1466
 msgid "Plot Object"
 msgstr "Mostrar"
 
@@ -8476,7 +8474,7 @@ msgid "<b>Export G-Code:</b>"
 msgstr "<b>Exportar G-Code:</b>"
 
 #: flatcamGUI/FlatCAMGUI.py:5965 flatcamGUI/FlatCAMGUI.py:6006
-#: flatcamGUI/ObjectUI.py:1489
+#: flatcamGUI/ObjectUI.py:1502
 msgid ""
 "Export and save G-Code to\n"
 "make this object to a file."
@@ -8500,7 +8498,7 @@ msgstr ""
 msgid "Append to G-Code:"
 msgstr "Incluir no final do G-Code:"
 
-#: flatcamGUI/FlatCAMGUI.py:5984 flatcamGUI/ObjectUI.py:1511
+#: flatcamGUI/FlatCAMGUI.py:5984 flatcamGUI/ObjectUI.py:1524
 msgid ""
 "Type here any G-Code commands you would\n"
 "like to append to the generated file.\n"
@@ -8514,7 +8512,7 @@ msgstr ""
 msgid "CNC Job Adv. Options"
 msgstr "Opções Avançadas"
 
-#: flatcamGUI/FlatCAMGUI.py:6012 flatcamGUI/ObjectUI.py:1529
+#: flatcamGUI/FlatCAMGUI.py:6012 flatcamGUI/ObjectUI.py:1542
 msgid "Toolchange G-Code:"
 msgstr "G-Code para Troca de Ferramentas:"
 
@@ -8530,11 +8528,11 @@ msgstr ""
 "É um G-Code personalizado para Troca de Ferramentas\n"
 "ou uma Macro de Troca de Ferramentas."
 
-#: flatcamGUI/FlatCAMGUI.py:6028 flatcamGUI/ObjectUI.py:1551
+#: flatcamGUI/FlatCAMGUI.py:6028 flatcamGUI/ObjectUI.py:1564
 msgid "Use Toolchange Macro"
 msgstr "Usar Macro de Troca de Ferramentas"
 
-#: flatcamGUI/FlatCAMGUI.py:6030 flatcamGUI/ObjectUI.py:1554
+#: flatcamGUI/FlatCAMGUI.py:6030 flatcamGUI/ObjectUI.py:1567
 msgid ""
 "Check this box if you want to use\n"
 "a Custom Toolchange GCode (macro)."
@@ -8542,7 +8540,7 @@ msgstr ""
 "Marque esta caixa se você quiser usar a macro G-Code para Troca de "
 "Ferramentas."
 
-#: flatcamGUI/FlatCAMGUI.py:6042 flatcamGUI/ObjectUI.py:1563
+#: flatcamGUI/FlatCAMGUI.py:6042 flatcamGUI/ObjectUI.py:1576
 msgid ""
 "A list of the FlatCAM variables that can be used\n"
 "in the Toolchange event.\n"
@@ -8552,35 +8550,35 @@ msgstr ""
 "no evento Troca de Ferramentas.\n"
 "Elas devem estar cercadas pelo símbolo '%'"
 
-#: flatcamGUI/FlatCAMGUI.py:6049 flatcamGUI/ObjectUI.py:1570
+#: flatcamGUI/FlatCAMGUI.py:6049 flatcamGUI/ObjectUI.py:1583
 msgid "Parameters"
 msgstr "Parâmetros"
 
-#: flatcamGUI/FlatCAMGUI.py:6052 flatcamGUI/ObjectUI.py:1573
+#: flatcamGUI/FlatCAMGUI.py:6052 flatcamGUI/ObjectUI.py:1586
 msgid "FlatCAM CNC parameters"
 msgstr "Parâmetros do FlatCAM CNC"
 
-#: flatcamGUI/FlatCAMGUI.py:6053 flatcamGUI/ObjectUI.py:1574
+#: flatcamGUI/FlatCAMGUI.py:6053 flatcamGUI/ObjectUI.py:1587
 msgid "tool = tool number"
 msgstr "tool = número da ferramenta"
 
-#: flatcamGUI/FlatCAMGUI.py:6054 flatcamGUI/ObjectUI.py:1575
+#: flatcamGUI/FlatCAMGUI.py:6054 flatcamGUI/ObjectUI.py:1588
 msgid "tooldia = tool diameter"
 msgstr "tooldia = diâmetro da ferramenta"
 
-#: flatcamGUI/FlatCAMGUI.py:6055 flatcamGUI/ObjectUI.py:1576
+#: flatcamGUI/FlatCAMGUI.py:6055 flatcamGUI/ObjectUI.py:1589
 msgid "t_drills = for Excellon, total number of drills"
 msgstr "t_drills = para Excellon, número total de brocas"
 
-#: flatcamGUI/FlatCAMGUI.py:6056 flatcamGUI/ObjectUI.py:1577
+#: flatcamGUI/FlatCAMGUI.py:6056 flatcamGUI/ObjectUI.py:1590
 msgid "x_toolchange = X coord for Toolchange"
 msgstr "x_toolchange = coord. X para troca de ferramentas"
 
-#: flatcamGUI/FlatCAMGUI.py:6057 flatcamGUI/ObjectUI.py:1578
+#: flatcamGUI/FlatCAMGUI.py:6057 flatcamGUI/ObjectUI.py:1591
 msgid "y_toolchange = Y coord for Toolchange"
 msgstr "y_toolchange = coord. Y para troca de ferramentas"
 
-#: flatcamGUI/FlatCAMGUI.py:6058 flatcamGUI/ObjectUI.py:1579
+#: flatcamGUI/FlatCAMGUI.py:6058 flatcamGUI/ObjectUI.py:1592
 msgid "z_toolchange = Z coord for Toolchange"
 msgstr "z_toolchange = coord. Z para troca de ferramentas"
 
@@ -8592,15 +8590,15 @@ msgstr "z_cut = profundidade Z para o corte"
 msgid "z_move = Z height for travel"
 msgstr "z_move = altura Z para deslocamentos"
 
-#: flatcamGUI/FlatCAMGUI.py:6061 flatcamGUI/ObjectUI.py:1582
+#: flatcamGUI/FlatCAMGUI.py:6061 flatcamGUI/ObjectUI.py:1595
 msgid "z_depthpercut = the step value for multidepth cut"
 msgstr "z_depthpercut = valor do passe para corte múltiplas profundidade"
 
-#: flatcamGUI/FlatCAMGUI.py:6062 flatcamGUI/ObjectUI.py:1583
+#: flatcamGUI/FlatCAMGUI.py:6062 flatcamGUI/ObjectUI.py:1596
 msgid "spindlesspeed = the value for the spindle speed"
 msgstr "spindlesspeed = velocidade do spindle"
 
-#: flatcamGUI/FlatCAMGUI.py:6064 flatcamGUI/ObjectUI.py:1584
+#: flatcamGUI/FlatCAMGUI.py:6064 flatcamGUI/ObjectUI.py:1597
 msgid "dwelltime = time to dwell to allow the spindle to reach it's set RPM"
 msgstr "dwelltime = tempo de espera para o spindle atingir sua vel. RPM"
 
@@ -10000,11 +9998,11 @@ msgstr ""
 "de Corte é calculada automaticamente a partir das entradas do\n"
 "formulário da interface do usuário e do Ângulo da Ponta-V."
 
-#: flatcamGUI/ObjectUI.py:889 flatcamGUI/ObjectUI.py:1471
+#: flatcamGUI/ObjectUI.py:889 flatcamGUI/ObjectUI.py:1484
 msgid "Dia"
 msgstr "Dia"
 
-#: flatcamGUI/ObjectUI.py:889 flatcamGUI/ObjectUI.py:1471
+#: flatcamGUI/ObjectUI.py:889 flatcamGUI/ObjectUI.py:1484
 #: flatcamTools/ToolNonCopperClear.py:83 flatcamTools/ToolPaint.py:80
 msgid "TT"
 msgstr "TF"
@@ -10320,7 +10318,7 @@ msgstr "<b>Exibir Anotação:</b>"
 msgid "<b>Travelled dist.:</b>"
 msgstr "<b>Dist. percorrida:</b>"
 
-#: flatcamGUI/ObjectUI.py:1397 flatcamGUI/ObjectUI.py:1404
+#: flatcamGUI/ObjectUI.py:1396 flatcamGUI/ObjectUI.py:1401
 msgid ""
 "This is the total travelled distance on X-Y plane.\n"
 "In current units."
@@ -10328,11 +10326,23 @@ msgstr ""
 "Essa é a distância total percorrida no plano XY,\n"
 "nas unidades atuais."
 
-#: flatcamGUI/ObjectUI.py:1435
+#: flatcamGUI/ObjectUI.py:1406
+msgid "<b>Estimated time:</b>"
+msgstr "<b>Duração estimada:</b>"
+
+#: flatcamGUI/ObjectUI.py:1408 flatcamGUI/ObjectUI.py:1413
+msgid ""
+"This is the estimated time to do the routing/drilling,\n"
+"without the time spent in ToolChange events."
+msgstr ""
+"Este é o tempo estimado para fazer o roteamento / perfuração,\n"
+"sem o tempo gasto em eventos de Alteração de Ferramentas."
+
+#: flatcamGUI/ObjectUI.py:1448
 msgid "<b>CNC Tools Table</b>"
 msgstr "<b>Tabela de Ferramentas CNC</b>"
 
-#: flatcamGUI/ObjectUI.py:1438
+#: flatcamGUI/ObjectUI.py:1451
 msgid ""
 "Tools in this CNCJob object used for cutting.\n"
 "The tool diameter is used for plotting on canvas.\n"
@@ -10355,27 +10365,27 @@ msgstr ""
 "O 'Tipo de Ferramenta' (TF) pode ser circular com 1 a 4 dentes (C1..C4),\n"
 "bola (B) ou Em forma de V (V)."
 
-#: flatcamGUI/ObjectUI.py:1472
+#: flatcamGUI/ObjectUI.py:1485
 msgid "P"
 msgstr "P"
 
-#: flatcamGUI/ObjectUI.py:1478
+#: flatcamGUI/ObjectUI.py:1491
 msgid "Update Plot"
 msgstr "Atualizar Gráfico"
 
-#: flatcamGUI/ObjectUI.py:1480
+#: flatcamGUI/ObjectUI.py:1493
 msgid "Update the plot."
 msgstr "Atualiza o gráfico."
 
-#: flatcamGUI/ObjectUI.py:1487
+#: flatcamGUI/ObjectUI.py:1500
 msgid "<b>Export CNC Code:</b>"
 msgstr "<b>Exportar Código CNC:</b>"
 
-#: flatcamGUI/ObjectUI.py:1495
+#: flatcamGUI/ObjectUI.py:1508
 msgid "Prepend to CNC Code:"
 msgstr "Incluir no Início do Código CNC:"
 
-#: flatcamGUI/ObjectUI.py:1498
+#: flatcamGUI/ObjectUI.py:1511
 msgid ""
 "Type here any G-Code commands you would\n"
 "like to add to the beginning of the generated file."
@@ -10383,11 +10393,11 @@ msgstr ""
 "Digite aqui comandos G-Code que você gostaria de adicionar ao início do "
 "arquivo gerado."
 
-#: flatcamGUI/ObjectUI.py:1508
+#: flatcamGUI/ObjectUI.py:1521
 msgid "Append to CNC Code:"
 msgstr "Incluir no Final do Código CNC:"
 
-#: flatcamGUI/ObjectUI.py:1532
+#: flatcamGUI/ObjectUI.py:1545
 msgid ""
 "Type here any G-Code commands you would\n"
 "like to be executed when Toolchange event is encountered.\n"
@@ -10410,29 +10420,29 @@ msgstr ""
 "como modelo o arquivo de pós-processamento 'Customização da troca de "
 "ferramentas'."
 
-#: flatcamGUI/ObjectUI.py:1580
+#: flatcamGUI/ObjectUI.py:1593
 msgid "z_cut = depth where to cut"
 msgstr "z_cut = profundidade de corte"
 
-#: flatcamGUI/ObjectUI.py:1581
+#: flatcamGUI/ObjectUI.py:1594
 msgid "z_move = height where to travel"
 msgstr "z_move = altura para deslocamentos"
 
-#: flatcamGUI/ObjectUI.py:1600
+#: flatcamGUI/ObjectUI.py:1613
 msgid "View CNC Code"
 msgstr "Ver Código CNC"
 
-#: flatcamGUI/ObjectUI.py:1603
+#: flatcamGUI/ObjectUI.py:1616
 msgid ""
 "Opens TAB to view/modify/print G-Code\n"
 "file."
 msgstr "Abre uma ABA para visualizar/modificar/imprimir o arquivo G-Code."
 
-#: flatcamGUI/ObjectUI.py:1609
+#: flatcamGUI/ObjectUI.py:1622
 msgid "Save CNC Code"
 msgstr "Salvar Código CNC"
 
-#: flatcamGUI/ObjectUI.py:1612
+#: flatcamGUI/ObjectUI.py:1625
 msgid ""
 "Opens dialog to save G-Code\n"
 "file."

BIN
locale/ro/LC_MESSAGES/strings.mo


+ 85 - 75
locale/ro/LC_MESSAGES/strings.po

@@ -5,8 +5,8 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: \n"
-"POT-Creation-Date: 2019-08-17 00:56+0300\n"
-"PO-Revision-Date: 2019-08-17 01:17+0300\n"
+"POT-Creation-Date: 2019-08-17 15:17+0300\n"
+"PO-Revision-Date: 2019-08-17 15:17+0300\n"
 "Last-Translator: \n"
 "Language-Team: \n"
 "Language: ro\n"
@@ -153,7 +153,7 @@ msgstr "[WARNING_NOTCL] Exportul preferințelor FlatCAM este anulat."
 
 #: FlatCAMApp.py:2977 FlatCAMApp.py:4804 FlatCAMApp.py:7270 FlatCAMApp.py:7380
 #: FlatCAMApp.py:7501 FlatCAMApp.py:7556 FlatCAMApp.py:7667 FlatCAMApp.py:7790
-#: FlatCAMObj.py:5862 flatcamTools/ToolSolderPaste.py:1400
+#: FlatCAMObj.py:5875 flatcamTools/ToolSolderPaste.py:1400
 msgid ""
 "[WARNING] Permission denied, saving not possible.\n"
 "Most likely another app is holding the file open and not accessible."
@@ -856,7 +856,7 @@ msgstr "Editor Cod"
 msgid "[ERROR]App.on_view_source() -->%s"
 msgstr "[ERROR]App.on_view_source() -->%s"
 
-#: FlatCAMApp.py:7033 FlatCAMApp.py:8215 FlatCAMObj.py:5643
+#: FlatCAMApp.py:7033 FlatCAMApp.py:8215 FlatCAMObj.py:5656
 #: flatcamTools/ToolSolderPaste.py:1284
 msgid "Code Editor"
 msgstr "Editor Cod"
@@ -1363,11 +1363,11 @@ msgstr ""
 msgid "[success] Name changed from {old} to {new}"
 msgstr "[success] Numele schimbat din {old} in {new}"
 
-#: FlatCAMObj.py:558 FlatCAMObj.py:2128 FlatCAMObj.py:3402 FlatCAMObj.py:5536
+#: FlatCAMObj.py:558 FlatCAMObj.py:2128 FlatCAMObj.py:3402 FlatCAMObj.py:5549
 msgid "<span style=\"color:green;\"><b>Basic</b></span>"
 msgstr "<span style=\"color:green;\"><b>Baza</b></span>"
 
-#: FlatCAMObj.py:570 FlatCAMObj.py:2144 FlatCAMObj.py:3424 FlatCAMObj.py:5542
+#: FlatCAMObj.py:570 FlatCAMObj.py:2144 FlatCAMObj.py:3424 FlatCAMObj.py:5555
 msgid "<span style=\"color:red;\"><b>Advanced</b></span>"
 msgstr "<span style=\"color:red;\"><b>Avansat</b></span>"
 
@@ -1479,8 +1479,8 @@ msgstr ""
 msgid "Generating CNC Code"
 msgstr "CNC Code in curs de generare"
 
-#: FlatCAMObj.py:2785 FlatCAMObj.py:5075 camlib.py:5179 camlib.py:5638
-#: camlib.py:5905
+#: FlatCAMObj.py:2785 FlatCAMObj.py:5075 camlib.py:5184 camlib.py:5680
+#: camlib.py:5970
 msgid ""
 "[ERROR]The Toolchange X,Y field in Edit -> Preferences has to be in the "
 "format (x, y) \n"
@@ -1596,25 +1596,25 @@ msgstr ""
 msgid "[success] Geometry Offset done."
 msgstr "[success] Ofset Geometrie executat."
 
-#: FlatCAMObj.py:5604 FlatCAMObj.py:5609 flatcamTools/ToolSolderPaste.py:1368
+#: FlatCAMObj.py:5617 FlatCAMObj.py:5622 flatcamTools/ToolSolderPaste.py:1368
 msgid "Export Machine Code ..."
 msgstr "Exporta CNC Cod Masina ..."
 
-#: FlatCAMObj.py:5615 flatcamTools/ToolSolderPaste.py:1371
+#: FlatCAMObj.py:5628 flatcamTools/ToolSolderPaste.py:1371
 msgid "[WARNING_NOTCL] Export Machine Code cancelled ..."
 msgstr "[WARNING_NOTCL] Exportul codului masina CNC a fost anulat ..."
 
-#: FlatCAMObj.py:5632
+#: FlatCAMObj.py:5645
 #, python-format
 msgid "[success] Machine Code file saved to: %s"
 msgstr "[success] Fişierul cu cod CNC este salvat in: %s"
 
-#: FlatCAMObj.py:5654
+#: FlatCAMObj.py:5667
 #, python-format
 msgid "[ERROR]FlatCAMCNNJob.on_edit_code_click() -->%s"
 msgstr "[ERROR]FlatCAMCNNJob.on_edit_code_click() -->%s"
 
-#: FlatCAMObj.py:5771
+#: FlatCAMObj.py:5784
 #, python-format
 msgid ""
 "[WARNING_NOTCL] This CNCJob object can't be processed because it is a %s "
@@ -1623,11 +1623,11 @@ msgstr ""
 "[WARNING_NOTCL] Acest obiect CNCJob nu poate fi procesar deoarece este un "
 "obiect CNCJob tip %s."
 
-#: FlatCAMObj.py:5824
+#: FlatCAMObj.py:5837
 msgid "[ERROR_NOTCL] G-code does not have a units code: either G20 or G21"
 msgstr "[ERROR_NOTCL] G-code nu contine codul pt unitati: G20 sau G21"
 
-#: FlatCAMObj.py:5837
+#: FlatCAMObj.py:5850
 msgid ""
 "[ERROR_NOTCL] Cancelled. The Toolchange Custom code is enabled but it's "
 "empty."
@@ -1635,17 +1635,17 @@ msgstr ""
 "[ERROR_NOTCL] Anulat. Codul G-Code din Macro-ul Schimbare unealtă este "
 "activat dar nuc contine nimic."
 
-#: FlatCAMObj.py:5844
+#: FlatCAMObj.py:5857
 msgid "[success] Toolchange G-code was replaced by a custom code."
 msgstr ""
 "[success] G-Code-ul pt schimbare unealtă a fost inlocuit cu un cod "
 "pesonalizat."
 
-#: FlatCAMObj.py:5858 flatcamTools/ToolSolderPaste.py:1397
+#: FlatCAMObj.py:5871 flatcamTools/ToolSolderPaste.py:1397
 msgid "[WARNING_NOTCL] No such file or directory"
 msgstr "[WARNING_NOTCL] Nu exista un asemenea fişier sau director"
 
-#: FlatCAMObj.py:5882 FlatCAMObj.py:5894
+#: FlatCAMObj.py:5895 FlatCAMObj.py:5907
 msgid ""
 "[WARNING_NOTCL] The used postprocessor file has to have in it's name: "
 "'toolchange_custom'"
@@ -1653,7 +1653,7 @@ msgstr ""
 "[WARNING_NOTCL] Postprocesorul folosit trebuie să aibă in numele sau: "
 "'toolchange_custom'"
 
-#: FlatCAMObj.py:5900
+#: FlatCAMObj.py:5913
 msgid "[ERROR] There is no postprocessor file."
 msgstr "[ERROR] Nu exista nici-un fişier postprocesor."
 
@@ -1798,12 +1798,12 @@ msgstr ""
 "deoarece nu are o unealtă asociata.\n"
 "Verifică codul G-Code rezultat."
 
-#: camlib.py:5088
+#: camlib.py:5093
 #, python-format
 msgid "[ERROR] There is no such parameter: %s"
 msgstr "[ERROR] Nu exista un asemenea parametru: %s"
 
-#: camlib.py:5158
+#: camlib.py:5163
 msgid ""
 "[WARNING] The Cut Z parameter has positive value. It is the depth value to "
 "drill into material.\n"
@@ -1816,7 +1816,7 @@ msgstr ""
 "Se presupune că este o eroare de tastare astfel ca aplicaţia va converti "
 "intr-o valoare negativă. Verifică codul masina (G-Code etc) rezultat."
 
-#: camlib.py:5165 camlib.py:5661 camlib.py:5928
+#: camlib.py:5170 camlib.py:5703 camlib.py:5993
 #, python-format
 msgid ""
 "[WARNING] The Cut Z parameter is zero. There will be no cut, skipping %s file"
@@ -1824,15 +1824,15 @@ msgstr ""
 "[WARNING] Parametrul >Z tăiere< este nul. Nu va fi nici-o tăiere prin urmare "
 "nu procesam fişierul %s"
 
-#: camlib.py:5394 camlib.py:5491 camlib.py:5549
+#: camlib.py:5410 camlib.py:5516 camlib.py:5582
 msgid "[ERROR_NOTCL] The loaded Excellon file has no drills ..."
 msgstr "[ERROR_NOTCL] Fişierul Excellon incărcat nu are găuri ..."
 
-#: camlib.py:5496
+#: camlib.py:5521
 msgid "[ERROR_NOTCL] Wrong optimization type selected."
 msgstr "[ERROR_NOTCL] Un tip de optimizare incorrect  a fost selectat."
 
-#: camlib.py:5649 camlib.py:5916
+#: camlib.py:5691 camlib.py:5981
 msgid ""
 "[ERROR_NOTCL] Cut_Z parameter is None or zero. Most likely a bad "
 "combinations of other parameters."
@@ -1840,7 +1840,7 @@ msgstr ""
 "[ERROR_NOTCL] Parametrul >Z tăiere< este None sau zero. Cel mai probabil o "
 "combinaţie nefericita de parametri."
 
-#: camlib.py:5654 camlib.py:5921
+#: camlib.py:5696 camlib.py:5986
 msgid ""
 "[WARNING] The Cut Z parameter has positive value. It is the depth value to "
 "cut into material.\n"
@@ -1853,11 +1853,11 @@ msgstr ""
 "Se presupune că este o eroare de tastare astfel ca aplicaţia va converti "
 "intr-o valoare negativă. Verifică codul masina (G-Code etc) rezultat."
 
-#: camlib.py:5670 camlib.py:5933
+#: camlib.py:5712 camlib.py:5998
 msgid "[ERROR_NOTCL] Travel Z parameter is None or zero."
 msgstr "[ERROR_NOTCL] Parametrul >Z deplasare< este None sau zero."
 
-#: camlib.py:5674 camlib.py:5937
+#: camlib.py:5716 camlib.py:6002
 msgid ""
 "[WARNING] The Travel Z parameter has negative value. It is the height value "
 "to travel between cuts.\n"
@@ -1871,7 +1871,7 @@ msgstr ""
 "Se presupune că este o eroare de tastare astfel ca aplicaţia va converti "
 "intr-o valoare pozitivă. Verifică codul masina (G-Code etc) rezultat."
 
-#: camlib.py:5681 camlib.py:5944
+#: camlib.py:5723 camlib.py:6009
 #, python-format
 msgid ""
 "[WARNING] The Z Travel parameter is zero. This is dangerous, skipping %s file"
@@ -1879,12 +1879,12 @@ msgstr ""
 "[WARNING] Parametrul >Z deplasare< este zero. Aceasta este periculos, prin "
 "urmare fişierul %s nu se procesează."
 
-#: camlib.py:5811
+#: camlib.py:5876
 #, python-format
 msgid "[ERROR]Expected a Geometry, got %s"
 msgstr "[ERROR] Se astepta o Geometrie, am primit in schimb %s"
 
-#: camlib.py:5817
+#: camlib.py:5882
 msgid ""
 "[ERROR_NOTCL] Trying to generate a CNC Job from a Geometry object without "
 "solid_geometry."
@@ -1892,7 +1892,7 @@ msgstr ""
 "[ERROR_NOTCL] Se încearcă generarea unui CNC Job dintr-un obiect Geometrie "
 "fără atributul solid_geometry."
 
-#: camlib.py:5856
+#: camlib.py:5921
 msgid ""
 "[ERROR_NOTCL] The Tool Offset value is too negative to use for the "
 "current_geometry.\n"
@@ -1902,7 +1902,7 @@ msgstr ""
 "fi folosita. \n"
 "Mareste valoarea absoluta și încearcă din nou."
 
-#: camlib.py:6068
+#: camlib.py:6155
 msgid "[ERROR_NOTCL] There is no tool data in the SolderPaste geometry."
 msgstr ""
 "[ERROR_NOTCL] Nu exista date cu privier la unealtă in geometria SolderPaste."
@@ -2732,7 +2732,7 @@ msgstr "Oglindire"
 
 #: flatcamEditors/FlatCAMGeoEditor.py:622
 #: flatcamEditors/FlatCAMGrbEditor.py:4746 flatcamGUI/ObjectUI.py:127
-#: flatcamGUI/ObjectUI.py:889 flatcamGUI/ObjectUI.py:1471
+#: flatcamGUI/ObjectUI.py:889 flatcamGUI/ObjectUI.py:1484
 #: flatcamTools/ToolTransform.py:28
 msgid "Offset"
 msgstr "Ofset"
@@ -3755,7 +3755,7 @@ msgstr "Cod"
 
 #: flatcamEditors/FlatCAMGrbEditor.py:2337
 #: flatcamEditors/FlatCAMGrbEditor.py:3758 flatcamGUI/ObjectUI.py:227
-#: flatcamGUI/ObjectUI.py:889 flatcamGUI/ObjectUI.py:1471
+#: flatcamGUI/ObjectUI.py:889 flatcamGUI/ObjectUI.py:1484
 msgid "Type"
 msgstr "Tip"
 
@@ -4618,12 +4618,10 @@ msgid "Add Drill\tD"
 msgstr "Adaugă Găurire\tD"
 
 #: flatcamGUI/FlatCAMGUI.py:468
-#| msgid "Add Drill Array\tA"
 msgid "Add Slot Array\tQ"
 msgstr "Adăugați Arie de Sloturi\tQ"
 
 #: flatcamGUI/FlatCAMGUI.py:470
-#| msgid "Add Polygon\tN"
 msgid "Add Slot\tW"
 msgstr "Adăugați Slot\tW"
 
@@ -7243,7 +7241,7 @@ msgstr "Afisează"
 
 #: flatcamGUI/FlatCAMGUI.py:4189 flatcamGUI/FlatCAMGUI.py:5467
 #: flatcamGUI/ObjectUI.py:174 flatcamGUI/ObjectUI.py:544
-#: flatcamGUI/ObjectUI.py:877 flatcamGUI/ObjectUI.py:1456
+#: flatcamGUI/ObjectUI.py:877 flatcamGUI/ObjectUI.py:1469
 msgid "Plot (show) this object."
 msgstr "Afisează (arata) acest obiect."
 
@@ -8522,7 +8520,7 @@ msgid "CNC Job General"
 msgstr "CNCJob General"
 
 #: flatcamGUI/FlatCAMGUI.py:5840 flatcamGUI/ObjectUI.py:542
-#: flatcamGUI/ObjectUI.py:875 flatcamGUI/ObjectUI.py:1453
+#: flatcamGUI/ObjectUI.py:875 flatcamGUI/ObjectUI.py:1466
 msgid "Plot Object"
 msgstr "Afisează"
 
@@ -8624,7 +8622,7 @@ msgid "<b>Export G-Code:</b>"
 msgstr "<b>Exporta G-Code:</b>"
 
 #: flatcamGUI/FlatCAMGUI.py:5965 flatcamGUI/FlatCAMGUI.py:6006
-#: flatcamGUI/ObjectUI.py:1489
+#: flatcamGUI/ObjectUI.py:1502
 msgid ""
 "Export and save G-Code to\n"
 "make this object to a file."
@@ -8648,7 +8646,7 @@ msgstr ""
 msgid "Append to G-Code:"
 msgstr "Adaugă la sfârşitul G-Code:"
 
-#: flatcamGUI/FlatCAMGUI.py:5984 flatcamGUI/ObjectUI.py:1511
+#: flatcamGUI/FlatCAMGUI.py:5984 flatcamGUI/ObjectUI.py:1524
 msgid ""
 "Type here any G-Code commands you would\n"
 "like to append to the generated file.\n"
@@ -8661,7 +8659,7 @@ msgstr ""
 msgid "CNC Job Adv. Options"
 msgstr "Opțiuni Avans. CNCJob"
 
-#: flatcamGUI/FlatCAMGUI.py:6012 flatcamGUI/ObjectUI.py:1529
+#: flatcamGUI/FlatCAMGUI.py:6012 flatcamGUI/ObjectUI.py:1542
 msgid "Toolchange G-Code:"
 msgstr "G-Code pt schimb unealtă:"
 
@@ -8677,11 +8675,11 @@ msgstr ""
 "Comanda M6 este inlocuita.\n"
 "Aceata va constitui un macro pentru schimbul uneltelor."
 
-#: flatcamGUI/FlatCAMGUI.py:6028 flatcamGUI/ObjectUI.py:1551
+#: flatcamGUI/FlatCAMGUI.py:6028 flatcamGUI/ObjectUI.py:1564
 msgid "Use Toolchange Macro"
 msgstr "Fol. Macro schimb unealtă"
 
-#: flatcamGUI/FlatCAMGUI.py:6030 flatcamGUI/ObjectUI.py:1554
+#: flatcamGUI/FlatCAMGUI.py:6030 flatcamGUI/ObjectUI.py:1567
 msgid ""
 "Check this box if you want to use\n"
 "a Custom Toolchange GCode (macro)."
@@ -8689,7 +8687,7 @@ msgstr ""
 "Bifează aici daca dorești să folosești Macro pentru\n"
 "schimb unelte."
 
-#: flatcamGUI/FlatCAMGUI.py:6042 flatcamGUI/ObjectUI.py:1563
+#: flatcamGUI/FlatCAMGUI.py:6042 flatcamGUI/ObjectUI.py:1576
 msgid ""
 "A list of the FlatCAM variables that can be used\n"
 "in the Toolchange event.\n"
@@ -8699,35 +8697,35 @@ msgstr ""
 "de schimb al uneltei (când se intalneste comanda M6).\n"
 "Este necesar să fie inconjurate de simbolul '%'."
 
-#: flatcamGUI/FlatCAMGUI.py:6049 flatcamGUI/ObjectUI.py:1570
+#: flatcamGUI/FlatCAMGUI.py:6049 flatcamGUI/ObjectUI.py:1583
 msgid "Parameters"
 msgstr "Parametri"
 
-#: flatcamGUI/FlatCAMGUI.py:6052 flatcamGUI/ObjectUI.py:1573
+#: flatcamGUI/FlatCAMGUI.py:6052 flatcamGUI/ObjectUI.py:1586
 msgid "FlatCAM CNC parameters"
 msgstr "Parametri FlatCAM CNC"
 
-#: flatcamGUI/FlatCAMGUI.py:6053 flatcamGUI/ObjectUI.py:1574
+#: flatcamGUI/FlatCAMGUI.py:6053 flatcamGUI/ObjectUI.py:1587
 msgid "tool = tool number"
 msgstr "tool = numărul uneltei"
 
-#: flatcamGUI/FlatCAMGUI.py:6054 flatcamGUI/ObjectUI.py:1575
+#: flatcamGUI/FlatCAMGUI.py:6054 flatcamGUI/ObjectUI.py:1588
 msgid "tooldia = tool diameter"
 msgstr "tooldia = dimaetrul uneltei"
 
-#: flatcamGUI/FlatCAMGUI.py:6055 flatcamGUI/ObjectUI.py:1576
+#: flatcamGUI/FlatCAMGUI.py:6055 flatcamGUI/ObjectUI.py:1589
 msgid "t_drills = for Excellon, total number of drills"
 msgstr "t_drills = pt Excellom, numărul total de operațiuni găurire"
 
-#: flatcamGUI/FlatCAMGUI.py:6056 flatcamGUI/ObjectUI.py:1577
+#: flatcamGUI/FlatCAMGUI.py:6056 flatcamGUI/ObjectUI.py:1590
 msgid "x_toolchange = X coord for Toolchange"
 msgstr "x_toolchange = coord. X pt schimb unealtă"
 
-#: flatcamGUI/FlatCAMGUI.py:6057 flatcamGUI/ObjectUI.py:1578
+#: flatcamGUI/FlatCAMGUI.py:6057 flatcamGUI/ObjectUI.py:1591
 msgid "y_toolchange = Y coord for Toolchange"
 msgstr "y_toolchange = coord. Y pt schimb unealtă"
 
-#: flatcamGUI/FlatCAMGUI.py:6058 flatcamGUI/ObjectUI.py:1579
+#: flatcamGUI/FlatCAMGUI.py:6058 flatcamGUI/ObjectUI.py:1592
 msgid "z_toolchange = Z coord for Toolchange"
 msgstr "z_toolchange = coord. Z pt schimb unealtă"
 
@@ -8739,15 +8737,15 @@ msgstr "z_cut = Z adâncimea de tăiere"
 msgid "z_move = Z height for travel"
 msgstr "z_move = Z Înălţimea deplasare"
 
-#: flatcamGUI/FlatCAMGUI.py:6061 flatcamGUI/ObjectUI.py:1582
+#: flatcamGUI/FlatCAMGUI.py:6061 flatcamGUI/ObjectUI.py:1595
 msgid "z_depthpercut = the step value for multidepth cut"
 msgstr "z_depthpercut = pasul pentru taierea progresiva"
 
-#: flatcamGUI/FlatCAMGUI.py:6062 flatcamGUI/ObjectUI.py:1583
+#: flatcamGUI/FlatCAMGUI.py:6062 flatcamGUI/ObjectUI.py:1596
 msgid "spindlesspeed = the value for the spindle speed"
 msgstr "spindlesspeed = valoarea viteza motor"
 
-#: flatcamGUI/FlatCAMGUI.py:6064 flatcamGUI/ObjectUI.py:1584
+#: flatcamGUI/FlatCAMGUI.py:6064 flatcamGUI/ObjectUI.py:1597
 msgid "dwelltime = time to dwell to allow the spindle to reach it's set RPM"
 msgstr "dwelltime = durata de asteptare ca motorul să ajunga la turatia setată"
 
@@ -10176,11 +10174,11 @@ msgstr ""
 "- V-Dia \n"
 "- V-unghi"
 
-#: flatcamGUI/ObjectUI.py:889 flatcamGUI/ObjectUI.py:1471
+#: flatcamGUI/ObjectUI.py:889 flatcamGUI/ObjectUI.py:1484
 msgid "Dia"
 msgstr "Dia"
 
-#: flatcamGUI/ObjectUI.py:889 flatcamGUI/ObjectUI.py:1471
+#: flatcamGUI/ObjectUI.py:889 flatcamGUI/ObjectUI.py:1484
 #: flatcamTools/ToolNonCopperClear.py:83 flatcamTools/ToolPaint.py:80
 msgid "TT"
 msgstr "TU"
@@ -10507,7 +10505,7 @@ msgstr "<b>Afișare notatii:</b>"
 msgid "<b>Travelled dist.:</b>"
 msgstr "<b>Distanta:</b>"
 
-#: flatcamGUI/ObjectUI.py:1397 flatcamGUI/ObjectUI.py:1404
+#: flatcamGUI/ObjectUI.py:1396 flatcamGUI/ObjectUI.py:1401
 msgid ""
 "This is the total travelled distance on X-Y plane.\n"
 "In current units."
@@ -10515,11 +10513,23 @@ msgstr ""
 "Aceasta este distanţa totala parcursa in planul X-Y.\n"
 "In unitatile curente."
 
-#: flatcamGUI/ObjectUI.py:1435
+#: flatcamGUI/ObjectUI.py:1406
+msgid "<b>Estimated time:</b>"
+msgstr "<b>Durată estimată:</b>"
+
+#: flatcamGUI/ObjectUI.py:1408 flatcamGUI/ObjectUI.py:1413
+msgid ""
+"This is the estimated time to do the routing/drilling,\n"
+"without the time spent in ToolChange events."
+msgstr ""
+"Acesta este timpul estimat pentru efectuarea traseului / găuririi,\n"
+"fără timpul petrecut în evenimentele ToolChange."
+
+#: flatcamGUI/ObjectUI.py:1448
 msgid "<b>CNC Tools Table</b>"
 msgstr "<b>Tabela Unelte CNC</b>"
 
-#: flatcamGUI/ObjectUI.py:1438
+#: flatcamGUI/ObjectUI.py:1451
 msgid ""
 "Tools in this CNCJob object used for cutting.\n"
 "The tool diameter is used for plotting on canvas.\n"
@@ -10540,27 +10550,27 @@ msgstr ""
 "Shape\n"
 "(cu forma in V)."
 
-#: flatcamGUI/ObjectUI.py:1472
+#: flatcamGUI/ObjectUI.py:1485
 msgid "P"
 msgstr "P"
 
-#: flatcamGUI/ObjectUI.py:1478
+#: flatcamGUI/ObjectUI.py:1491
 msgid "Update Plot"
 msgstr "Actualiz. afișare"
 
-#: flatcamGUI/ObjectUI.py:1480
+#: flatcamGUI/ObjectUI.py:1493
 msgid "Update the plot."
 msgstr "Actualizează afișarea obiectelor."
 
-#: flatcamGUI/ObjectUI.py:1487
+#: flatcamGUI/ObjectUI.py:1500
 msgid "<b>Export CNC Code:</b>"
 msgstr "<b>Exporta codul masina CNC:</b>"
 
-#: flatcamGUI/ObjectUI.py:1495
+#: flatcamGUI/ObjectUI.py:1508
 msgid "Prepend to CNC Code:"
 msgstr "Adaugă la inceput in codul G-Code:"
 
-#: flatcamGUI/ObjectUI.py:1498
+#: flatcamGUI/ObjectUI.py:1511
 msgid ""
 "Type here any G-Code commands you would\n"
 "like to add to the beginning of the generated file."
@@ -10568,11 +10578,11 @@ msgstr ""
 "Plasează aici acele comenzi GCode care se dorește să fie\n"
 "adaugate la inceputul codului masina CNC."
 
-#: flatcamGUI/ObjectUI.py:1508
+#: flatcamGUI/ObjectUI.py:1521
 msgid "Append to CNC Code:"
 msgstr "Adaugă la sfârşit in codul G-Code:"
 
-#: flatcamGUI/ObjectUI.py:1532
+#: flatcamGUI/ObjectUI.py:1545
 msgid ""
 "Type here any G-Code commands you would\n"
 "like to be executed when Toolchange event is encountered.\n"
@@ -10594,19 +10604,19 @@ msgstr ""
 "'toolchange_custom'\n"
 "in numele sau."
 
-#: flatcamGUI/ObjectUI.py:1580
+#: flatcamGUI/ObjectUI.py:1593
 msgid "z_cut = depth where to cut"
 msgstr "z_cut = adâncimea de tăiere"
 
-#: flatcamGUI/ObjectUI.py:1581
+#: flatcamGUI/ObjectUI.py:1594
 msgid "z_move = height where to travel"
 msgstr "z_move = Înălţimea deplasare"
 
-#: flatcamGUI/ObjectUI.py:1600
+#: flatcamGUI/ObjectUI.py:1613
 msgid "View CNC Code"
 msgstr "Vizualiz. codul CNC"
 
-#: flatcamGUI/ObjectUI.py:1603
+#: flatcamGUI/ObjectUI.py:1616
 msgid ""
 "Opens TAB to view/modify/print G-Code\n"
 "file."
@@ -10614,11 +10624,11 @@ msgstr ""
 "Deschide un nou tab pentru a vizualiza, modifica\n"
 "sau tipari codul G-Code."
 
-#: flatcamGUI/ObjectUI.py:1609
+#: flatcamGUI/ObjectUI.py:1622
 msgid "Save CNC Code"
 msgstr "Salvează codul CNC"
 
-#: flatcamGUI/ObjectUI.py:1612
+#: flatcamGUI/ObjectUI.py:1625
 msgid ""
 "Opens dialog to save G-Code\n"
 "file."

BIN
locale/ru/LC_MESSAGES/strings.mo


+ 84 - 74
locale/ru/LC_MESSAGES/strings.po

@@ -5,7 +5,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: \n"
-"POT-Creation-Date: 2019-08-17 01:17+0300\n"
+"POT-Creation-Date: 2019-08-17 15:17+0300\n"
 "PO-Revision-Date: \n"
 "Last-Translator: Andrey Kultyapov <camellan@yandex.ru>\n"
 "Language-Team: \n"
@@ -148,7 +148,7 @@ msgstr "[WARNING_NOTCL] Экспорт настроек FlatCAM отменён."
 
 #: FlatCAMApp.py:2977 FlatCAMApp.py:4804 FlatCAMApp.py:7270 FlatCAMApp.py:7380
 #: FlatCAMApp.py:7501 FlatCAMApp.py:7556 FlatCAMApp.py:7667 FlatCAMApp.py:7790
-#: FlatCAMObj.py:5862 flatcamTools/ToolSolderPaste.py:1400
+#: FlatCAMObj.py:5875 flatcamTools/ToolSolderPaste.py:1400
 msgid ""
 "[WARNING] Permission denied, saving not possible.\n"
 "Most likely another app is holding the file open and not accessible."
@@ -835,7 +835,7 @@ msgstr "Редактор исходного кода"
 msgid "[ERROR]App.on_view_source() -->%s"
 msgstr "[ERROR]App.on_view_source() -->%s"
 
-#: FlatCAMApp.py:7033 FlatCAMApp.py:8215 FlatCAMObj.py:5643
+#: FlatCAMApp.py:7033 FlatCAMApp.py:8215 FlatCAMObj.py:5656
 #: flatcamTools/ToolSolderPaste.py:1284
 msgid "Code Editor"
 msgstr "Редактор кода"
@@ -1332,11 +1332,11 @@ msgstr ""
 msgid "[success] Name changed from {old} to {new}"
 msgstr "[success] Имя изменено с {old} на {new}"
 
-#: FlatCAMObj.py:558 FlatCAMObj.py:2128 FlatCAMObj.py:3402 FlatCAMObj.py:5536
+#: FlatCAMObj.py:558 FlatCAMObj.py:2128 FlatCAMObj.py:3402 FlatCAMObj.py:5549
 msgid "<span style=\"color:green;\"><b>Basic</b></span>"
 msgstr "<span style=\"color:green;\"><b>Базовый</b></span>"
 
-#: FlatCAMObj.py:570 FlatCAMObj.py:2144 FlatCAMObj.py:3424 FlatCAMObj.py:5542
+#: FlatCAMObj.py:570 FlatCAMObj.py:2144 FlatCAMObj.py:3424 FlatCAMObj.py:5555
 msgid "<span style=\"color:red;\"><b>Advanced</b></span>"
 msgstr "<span style=\"color:red;\"><b>Расширенный</b></span>"
 
@@ -1447,8 +1447,8 @@ msgstr ""
 msgid "Generating CNC Code"
 msgstr "Генерация кода ЧПУ"
 
-#: FlatCAMObj.py:2785 FlatCAMObj.py:5075 camlib.py:5179 camlib.py:5638
-#: camlib.py:5905
+#: FlatCAMObj.py:2785 FlatCAMObj.py:5075 camlib.py:5184 camlib.py:5680
+#: camlib.py:5970
 msgid ""
 "[ERROR]The Toolchange X,Y field in Edit -> Preferences has to be in the "
 "format (x, y) \n"
@@ -1565,25 +1565,25 @@ msgstr ""
 msgid "[success] Geometry Offset done."
 msgstr "[success] Смещение Geometry выполнено."
 
-#: FlatCAMObj.py:5604 FlatCAMObj.py:5609 flatcamTools/ToolSolderPaste.py:1368
+#: FlatCAMObj.py:5617 FlatCAMObj.py:5622 flatcamTools/ToolSolderPaste.py:1368
 msgid "Export Machine Code ..."
 msgstr "Экспорт GCode ..."
 
-#: FlatCAMObj.py:5615 flatcamTools/ToolSolderPaste.py:1371
+#: FlatCAMObj.py:5628 flatcamTools/ToolSolderPaste.py:1371
 msgid "[WARNING_NOTCL] Export Machine Code cancelled ..."
 msgstr "[WARNING_NOTCL] Экспорт GCode отменен ..."
 
-#: FlatCAMObj.py:5632
+#: FlatCAMObj.py:5645
 #, python-format
 msgid "[success] Machine Code file saved to: %s"
 msgstr "[success] Файл GCode сохранён в: %s"
 
-#: FlatCAMObj.py:5654
+#: FlatCAMObj.py:5667
 #, python-format
 msgid "[ERROR]FlatCAMCNNJob.on_edit_code_click() -->%s"
 msgstr "[ERROR]FlatCAMCNNJob.on_edit_code_click() -->%s"
 
-#: FlatCAMObj.py:5771
+#: FlatCAMObj.py:5784
 #, python-format
 msgid ""
 "[WARNING_NOTCL] This CNCJob object can't be processed because it is a %s "
@@ -1592,11 +1592,11 @@ msgstr ""
 "[WARNING_NOTCL] CNCJob объект %s не может быть обработан, так как он "
 "является объектом  CNCJob."
 
-#: FlatCAMObj.py:5824
+#: FlatCAMObj.py:5837
 msgid "[ERROR_NOTCL] G-code does not have a units code: either G20 or G21"
 msgstr "[ERROR_NOTCL] G-code не имеет кода единиц измерения: G20 или G21"
 
-#: FlatCAMObj.py:5837
+#: FlatCAMObj.py:5850
 msgid ""
 "[ERROR_NOTCL] Cancelled. The Toolchange Custom code is enabled but it's "
 "empty."
@@ -1604,16 +1604,16 @@ msgstr ""
 "[ERROR_NOTCL] Отмена. Пользовательский код смены инструмента включен, но он "
 "пуст."
 
-#: FlatCAMObj.py:5844
+#: FlatCAMObj.py:5857
 msgid "[success] Toolchange G-code was replaced by a custom code."
 msgstr ""
 "[success] G-code смены инструмента был заменен на пользовательский код."
 
-#: FlatCAMObj.py:5858 flatcamTools/ToolSolderPaste.py:1397
+#: FlatCAMObj.py:5871 flatcamTools/ToolSolderPaste.py:1397
 msgid "[WARNING_NOTCL] No such file or directory"
 msgstr "[WARNING_NOTCL] Нет такого файла или каталога"
 
-#: FlatCAMObj.py:5882 FlatCAMObj.py:5894
+#: FlatCAMObj.py:5895 FlatCAMObj.py:5907
 msgid ""
 "[WARNING_NOTCL] The used postprocessor file has to have in it's name: "
 "'toolchange_custom'"
@@ -1621,7 +1621,7 @@ msgstr ""
 "[WARNING_NOTCL] Используемый файл постпроцессора должен иметь имя: "
 "'toolchange_custom'"
 
-#: FlatCAMObj.py:5900
+#: FlatCAMObj.py:5913
 msgid "[ERROR] There is no postprocessor file."
 msgstr "[ERROR] Это не файл постпроцессора."
 
@@ -1765,12 +1765,12 @@ msgstr ""
 "из-за отсутствия связанного инструмента.\n"
 "Проверьте полученный GCode."
 
-#: camlib.py:5088
+#: camlib.py:5093
 #, python-format
 msgid "[ERROR] There is no such parameter: %s"
 msgstr "[ERROR] Такого параметра нет: %s"
 
-#: camlib.py:5158
+#: camlib.py:5163
 msgid ""
 "[WARNING] The Cut Z parameter has positive value. It is the depth value to "
 "drill into material.\n"
@@ -1784,7 +1784,7 @@ msgstr ""
 "предполагая, что это опечатка, приложение преобразует значение в "
 "отрицательное. Проверьте полученный CNC code (Gcode и т. д.)."
 
-#: camlib.py:5165 camlib.py:5661 camlib.py:5928
+#: camlib.py:5170 camlib.py:5703 camlib.py:5993
 #, python-format
 msgid ""
 "[WARNING] The Cut Z parameter is zero. There will be no cut, skipping %s file"
@@ -1792,15 +1792,15 @@ msgstr ""
 "[WARNING] Параметр \"Глубина резания\" равен нулю. Обрезки не будет , "
 "пропускается файл %s"
 
-#: camlib.py:5394 camlib.py:5491 camlib.py:5549
+#: camlib.py:5410 camlib.py:5516 camlib.py:5582
 msgid "[ERROR_NOTCL] The loaded Excellon file has no drills ..."
 msgstr "[ERROR_NOTCL] загруженный файл Excellon не имеет отверстий ..."
 
-#: camlib.py:5496
+#: camlib.py:5521
 msgid "[ERROR_NOTCL] Wrong optimization type selected."
 msgstr "[ERROR_NOTCL] Выбран неправильный тип оптимизации."
 
-#: camlib.py:5649 camlib.py:5916
+#: camlib.py:5691 camlib.py:5981
 msgid ""
 "[ERROR_NOTCL] Cut_Z parameter is None or zero. Most likely a bad "
 "combinations of other parameters."
@@ -1808,7 +1808,7 @@ msgstr ""
 "[ERROR_NOTCL] Параметр \"Глубина резания\" равен None или пуст. Скорее всего "
 "неудачное сочетание других параметров."
 
-#: camlib.py:5654 camlib.py:5921
+#: camlib.py:5696 camlib.py:5986
 msgid ""
 "[WARNING] The Cut Z parameter has positive value. It is the depth value to "
 "cut into material.\n"
@@ -1822,11 +1822,11 @@ msgstr ""
 "предполагая, что это опечатка, приложение преобразует значение в "
 "отрицательное. Проверьте полученный CNC code (Gcode и т. д.)."
 
-#: camlib.py:5670 camlib.py:5933
+#: camlib.py:5712 camlib.py:5998
 msgid "[ERROR_NOTCL] Travel Z parameter is None or zero."
 msgstr "[ERROR_NOTCL] Параметр \"Отвод по Z\" равен None или пуст."
 
-#: camlib.py:5674 camlib.py:5937
+#: camlib.py:5716 camlib.py:6002
 msgid ""
 "[WARNING] The Travel Z parameter has negative value. It is the height value "
 "to travel between cuts.\n"
@@ -1840,7 +1840,7 @@ msgstr ""
 "что это опечатка, приложение преобразует значение в положительное. Проверьте "
 "полученный CNC code (Gcode и т. д.)."
 
-#: camlib.py:5681 camlib.py:5944
+#: camlib.py:5723 camlib.py:6009
 #, python-format
 msgid ""
 "[WARNING] The Z Travel parameter is zero. This is dangerous, skipping %s file"
@@ -1848,19 +1848,19 @@ msgstr ""
 "[WARNING] Параметр \"Отвод по Z\" равен нулю. Это опасно, пропускается файл "
 "%s"
 
-#: camlib.py:5811
+#: camlib.py:5876
 #, python-format
 msgid "[ERROR]Expected a Geometry, got %s"
 msgstr "[ERROR]Ожидалась Geometry, получили %s"
 
-#: camlib.py:5817
+#: camlib.py:5882
 msgid ""
 "[ERROR_NOTCL] Trying to generate a CNC Job from a Geometry object without "
 "solid_geometry."
 msgstr ""
 "[ERROR_NOTCL] Попытка создать CNC Job из объекта Geometry без solid_geometry."
 
-#: camlib.py:5856
+#: camlib.py:5921
 msgid ""
 "[ERROR_NOTCL] The Tool Offset value is too negative to use for the "
 "current_geometry.\n"
@@ -1870,7 +1870,7 @@ msgstr ""
 "current_geometry.\n"
 "Увеличте значение (в модуле) и повторите попытку."
 
-#: camlib.py:6068
+#: camlib.py:6155
 msgid "[ERROR_NOTCL] There is no tool data in the SolderPaste geometry."
 msgstr "[ERROR_NOTCL] В геометрии SolderPaste нет данных инструмента."
 
@@ -2682,7 +2682,7 @@ msgstr "Зеркалирование (отражение)"
 
 #: flatcamEditors/FlatCAMGeoEditor.py:622
 #: flatcamEditors/FlatCAMGrbEditor.py:4746 flatcamGUI/ObjectUI.py:127
-#: flatcamGUI/ObjectUI.py:889 flatcamGUI/ObjectUI.py:1471
+#: flatcamGUI/ObjectUI.py:889 flatcamGUI/ObjectUI.py:1484
 #: flatcamTools/ToolTransform.py:28
 msgid "Offset"
 msgstr "Смещение"
@@ -3690,7 +3690,7 @@ msgstr "Код"
 
 #: flatcamEditors/FlatCAMGrbEditor.py:2337
 #: flatcamEditors/FlatCAMGrbEditor.py:3758 flatcamGUI/ObjectUI.py:227
-#: flatcamGUI/ObjectUI.py:889 flatcamGUI/ObjectUI.py:1471
+#: flatcamGUI/ObjectUI.py:889 flatcamGUI/ObjectUI.py:1484
 msgid "Type"
 msgstr "Тип"
 
@@ -4548,12 +4548,10 @@ msgid "Add Drill\tD"
 msgstr "Добавить сверло\tD"
 
 #: flatcamGUI/FlatCAMGUI.py:468
-#| msgid "Add Drill Array\tA"
 msgid "Add Slot Array\tQ"
 msgstr "Добавить массив слотов\tQ"
 
 #: flatcamGUI/FlatCAMGUI.py:470
-#| msgid "Add Polygon\tN"
 msgid "Add Slot\tW"
 msgstr "Добавить слот\tW"
 
@@ -7161,7 +7159,7 @@ msgstr "Вкл."
 
 #: flatcamGUI/FlatCAMGUI.py:4189 flatcamGUI/FlatCAMGUI.py:5467
 #: flatcamGUI/ObjectUI.py:174 flatcamGUI/ObjectUI.py:544
-#: flatcamGUI/ObjectUI.py:877 flatcamGUI/ObjectUI.py:1456
+#: flatcamGUI/ObjectUI.py:877 flatcamGUI/ObjectUI.py:1469
 msgid "Plot (show) this object."
 msgstr "Начертить (отобразить) этот объект."
 
@@ -8396,7 +8394,7 @@ msgid "CNC Job General"
 msgstr "CNC Job основные"
 
 #: flatcamGUI/FlatCAMGUI.py:5840 flatcamGUI/ObjectUI.py:542
-#: flatcamGUI/ObjectUI.py:875 flatcamGUI/ObjectUI.py:1453
+#: flatcamGUI/ObjectUI.py:875 flatcamGUI/ObjectUI.py:1466
 msgid "Plot Object"
 msgstr "Рисовать объекты"
 
@@ -8500,7 +8498,7 @@ msgid "<b>Export G-Code:</b>"
 msgstr "<b>Экспорт G-Code:</b>"
 
 #: flatcamGUI/FlatCAMGUI.py:5965 flatcamGUI/FlatCAMGUI.py:6006
-#: flatcamGUI/ObjectUI.py:1489
+#: flatcamGUI/ObjectUI.py:1502
 msgid ""
 "Export and save G-Code to\n"
 "make this object to a file."
@@ -8525,7 +8523,7 @@ msgstr ""
 msgid "Append to G-Code:"
 msgstr "Коды постобработки для G-Code:"
 
-#: flatcamGUI/FlatCAMGUI.py:5984 flatcamGUI/ObjectUI.py:1511
+#: flatcamGUI/FlatCAMGUI.py:5984 flatcamGUI/ObjectUI.py:1524
 msgid ""
 "Type here any G-Code commands you would\n"
 "like to append to the generated file.\n"
@@ -8539,7 +8537,7 @@ msgstr ""
 msgid "CNC Job Adv. Options"
 msgstr "CNC Job дополн."
 
-#: flatcamGUI/FlatCAMGUI.py:6012 flatcamGUI/ObjectUI.py:1529
+#: flatcamGUI/FlatCAMGUI.py:6012 flatcamGUI/ObjectUI.py:1542
 msgid "Toolchange G-Code:"
 msgstr "G-Code смены инструмента:"
 
@@ -8555,11 +8553,11 @@ msgstr ""
 "Это будет представлять собой пользовательский GCode смены инструмента,\n"
 "или макрос смены инструмента."
 
-#: flatcamGUI/FlatCAMGUI.py:6028 flatcamGUI/ObjectUI.py:1551
+#: flatcamGUI/FlatCAMGUI.py:6028 flatcamGUI/ObjectUI.py:1564
 msgid "Use Toolchange Macro"
 msgstr "Использовать макросы смены инструмента"
 
-#: flatcamGUI/FlatCAMGUI.py:6030 flatcamGUI/ObjectUI.py:1554
+#: flatcamGUI/FlatCAMGUI.py:6030 flatcamGUI/ObjectUI.py:1567
 msgid ""
 "Check this box if you want to use\n"
 "a Custom Toolchange GCode (macro)."
@@ -8567,7 +8565,7 @@ msgstr ""
 "Установите этот флажок, если хотите использовать\n"
 "пользовательский GCode смены инструментов (макрос)."
 
-#: flatcamGUI/FlatCAMGUI.py:6042 flatcamGUI/ObjectUI.py:1563
+#: flatcamGUI/FlatCAMGUI.py:6042 flatcamGUI/ObjectUI.py:1576
 msgid ""
 "A list of the FlatCAM variables that can be used\n"
 "in the Toolchange event.\n"
@@ -8577,35 +8575,35 @@ msgstr ""
 "при смене инструмента.\n"
 "Они должны быть окружены '%' символом"
 
-#: flatcamGUI/FlatCAMGUI.py:6049 flatcamGUI/ObjectUI.py:1570
+#: flatcamGUI/FlatCAMGUI.py:6049 flatcamGUI/ObjectUI.py:1583
 msgid "Parameters"
 msgstr "Параметры"
 
-#: flatcamGUI/FlatCAMGUI.py:6052 flatcamGUI/ObjectUI.py:1573
+#: flatcamGUI/FlatCAMGUI.py:6052 flatcamGUI/ObjectUI.py:1586
 msgid "FlatCAM CNC parameters"
 msgstr "Параметры CNC FlatCAM"
 
-#: flatcamGUI/FlatCAMGUI.py:6053 flatcamGUI/ObjectUI.py:1574
+#: flatcamGUI/FlatCAMGUI.py:6053 flatcamGUI/ObjectUI.py:1587
 msgid "tool = tool number"
 msgstr "tool = tool number"
 
-#: flatcamGUI/FlatCAMGUI.py:6054 flatcamGUI/ObjectUI.py:1575
+#: flatcamGUI/FlatCAMGUI.py:6054 flatcamGUI/ObjectUI.py:1588
 msgid "tooldia = tool diameter"
 msgstr "tooldia = диаметр инструмента"
 
-#: flatcamGUI/FlatCAMGUI.py:6055 flatcamGUI/ObjectUI.py:1576
+#: flatcamGUI/FlatCAMGUI.py:6055 flatcamGUI/ObjectUI.py:1589
 msgid "t_drills = for Excellon, total number of drills"
 msgstr "t_drills = для Excellon, общее количество сверл"
 
-#: flatcamGUI/FlatCAMGUI.py:6056 flatcamGUI/ObjectUI.py:1577
+#: flatcamGUI/FlatCAMGUI.py:6056 flatcamGUI/ObjectUI.py:1590
 msgid "x_toolchange = X coord for Toolchange"
 msgstr "x_toolchange = координата X для смены инструмента"
 
-#: flatcamGUI/FlatCAMGUI.py:6057 flatcamGUI/ObjectUI.py:1578
+#: flatcamGUI/FlatCAMGUI.py:6057 flatcamGUI/ObjectUI.py:1591
 msgid "y_toolchange = Y coord for Toolchange"
 msgstr "y_toolchange = координата Y для смены инструмента"
 
-#: flatcamGUI/FlatCAMGUI.py:6058 flatcamGUI/ObjectUI.py:1579
+#: flatcamGUI/FlatCAMGUI.py:6058 flatcamGUI/ObjectUI.py:1592
 msgid "z_toolchange = Z coord for Toolchange"
 msgstr "z_toolchange = координата Z для смены инструмента"
 
@@ -8617,15 +8615,15 @@ msgstr "z_cut = Z глубина распила"
 msgid "z_move = Z height for travel"
 msgstr "z_move = высота Z для перемещения"
 
-#: flatcamGUI/FlatCAMGUI.py:6061 flatcamGUI/ObjectUI.py:1582
+#: flatcamGUI/FlatCAMGUI.py:6061 flatcamGUI/ObjectUI.py:1595
 msgid "z_depthpercut = the step value for multidepth cut"
 msgstr "z_depthpercut = значение шага для мультипроходного разреза"
 
-#: flatcamGUI/FlatCAMGUI.py:6062 flatcamGUI/ObjectUI.py:1583
+#: flatcamGUI/FlatCAMGUI.py:6062 flatcamGUI/ObjectUI.py:1596
 msgid "spindlesspeed = the value for the spindle speed"
 msgstr "spindlesspeed = значение скорости вращения шпинделя"
 
-#: flatcamGUI/FlatCAMGUI.py:6064 flatcamGUI/ObjectUI.py:1584
+#: flatcamGUI/FlatCAMGUI.py:6064 flatcamGUI/ObjectUI.py:1597
 msgid "dwelltime = time to dwell to allow the spindle to reach it's set RPM"
 msgstr ""
 "dwelltime = время, чтобы остановиться, чтобы позволить шпинделю достичь его "
@@ -10045,11 +10043,11 @@ msgstr ""
 "показал пользовательский интерфейс записи форма имени Вольт-Совет диаметр и "
 "V-наконечник угол."
 
-#: flatcamGUI/ObjectUI.py:889 flatcamGUI/ObjectUI.py:1471
+#: flatcamGUI/ObjectUI.py:889 flatcamGUI/ObjectUI.py:1484
 msgid "Dia"
 msgstr "Диам"
 
-#: flatcamGUI/ObjectUI.py:889 flatcamGUI/ObjectUI.py:1471
+#: flatcamGUI/ObjectUI.py:889 flatcamGUI/ObjectUI.py:1484
 #: flatcamTools/ToolNonCopperClear.py:83 flatcamTools/ToolPaint.py:80
 msgid "TT"
 msgstr "TT"
@@ -10371,7 +10369,7 @@ msgstr "<b>Показывать подписи:</b>"
 msgid "<b>Travelled dist.:</b>"
 msgstr "<b>Расст. прохода:</b>"
 
-#: flatcamGUI/ObjectUI.py:1397 flatcamGUI/ObjectUI.py:1404
+#: flatcamGUI/ObjectUI.py:1396 flatcamGUI/ObjectUI.py:1401
 msgid ""
 "This is the total travelled distance on X-Y plane.\n"
 "In current units."
@@ -10379,11 +10377,23 @@ msgstr ""
 "Это общее пройденное расстояние на X-Y плоскости.\n"
 "В текущих единицах измерения."
 
-#: flatcamGUI/ObjectUI.py:1435
+#: flatcamGUI/ObjectUI.py:1406
+msgid "<b>Estimated time:</b>"
+msgstr "<b>Предполагаемая Продолжительность:</b>"
+
+#: flatcamGUI/ObjectUI.py:1408 flatcamGUI/ObjectUI.py:1413
+msgid ""
+"This is the estimated time to do the routing/drilling,\n"
+"without the time spent in ToolChange events."
+msgstr ""
+"Это расчетное время для выполнения маршрутизации / бурения,\n"
+"без времени, проведенного в событиях смены инструмента."
+
+#: flatcamGUI/ObjectUI.py:1448
 msgid "<b>CNC Tools Table</b>"
 msgstr "<b>Таблица инструментов</b>"
 
-#: flatcamGUI/ObjectUI.py:1438
+#: flatcamGUI/ObjectUI.py:1451
 msgid ""
 "Tools in this CNCJob object used for cutting.\n"
 "The tool diameter is used for plotting on canvas.\n"
@@ -10405,27 +10415,27 @@ msgstr ""
 "\"Тип инструмента\" (TT) может быть круговым с 1 до 4 зубами (C1..C4),\n"
 "шарик (B), или V-образный(V)."
 
-#: flatcamGUI/ObjectUI.py:1472
+#: flatcamGUI/ObjectUI.py:1485
 msgid "P"
 msgstr "P"
 
-#: flatcamGUI/ObjectUI.py:1478
+#: flatcamGUI/ObjectUI.py:1491
 msgid "Update Plot"
 msgstr "Обновить участок"
 
-#: flatcamGUI/ObjectUI.py:1480
+#: flatcamGUI/ObjectUI.py:1493
 msgid "Update the plot."
 msgstr "Обновление участка."
 
-#: flatcamGUI/ObjectUI.py:1487
+#: flatcamGUI/ObjectUI.py:1500
 msgid "<b>Export CNC Code:</b>"
 msgstr "<b>Экспорт CNC Code:</b>"
 
-#: flatcamGUI/ObjectUI.py:1495
+#: flatcamGUI/ObjectUI.py:1508
 msgid "Prepend to CNC Code:"
 msgstr "Добавить в начало CNC Code:"
 
-#: flatcamGUI/ObjectUI.py:1498
+#: flatcamGUI/ObjectUI.py:1511
 msgid ""
 "Type here any G-Code commands you would\n"
 "like to add to the beginning of the generated file."
@@ -10433,11 +10443,11 @@ msgstr ""
 "Введите здесь любые G-Code команды, которые вы\n"
 "хотели бы добавить в начале генерируемого файла."
 
-#: flatcamGUI/ObjectUI.py:1508
+#: flatcamGUI/ObjectUI.py:1521
 msgid "Append to CNC Code:"
 msgstr "Дописать в конец CNC Code:"
 
-#: flatcamGUI/ObjectUI.py:1532
+#: flatcamGUI/ObjectUI.py:1545
 msgid ""
 "Type here any G-Code commands you would\n"
 "like to be executed when Toolchange event is encountered.\n"
@@ -10459,29 +10469,29 @@ msgstr ""
 "и иметь \"toolchange_custom\" в имени, и будет построено\n"
 "используя в качестве шаблона файл постпроцессора \"Tool change Custom\"."
 
-#: flatcamGUI/ObjectUI.py:1580
+#: flatcamGUI/ObjectUI.py:1593
 msgid "z_cut = depth where to cut"
 msgstr "z_cut = глубина резания"
 
-#: flatcamGUI/ObjectUI.py:1581
+#: flatcamGUI/ObjectUI.py:1594
 msgid "z_move = height where to travel"
 msgstr "z_move = высота перемещения"
 
-#: flatcamGUI/ObjectUI.py:1600
+#: flatcamGUI/ObjectUI.py:1613
 msgid "View CNC Code"
 msgstr "Просмотр CNC Code"
 
-#: flatcamGUI/ObjectUI.py:1603
+#: flatcamGUI/ObjectUI.py:1616
 msgid ""
 "Opens TAB to view/modify/print G-Code\n"
 "file."
 msgstr "Открывает вкладку для просмотра/изменения/печати файла G-Code."
 
-#: flatcamGUI/ObjectUI.py:1609
+#: flatcamGUI/ObjectUI.py:1622
 msgid "Save CNC Code"
 msgstr "Сохранить CNC Code"
 
-#: flatcamGUI/ObjectUI.py:1612
+#: flatcamGUI/ObjectUI.py:1625
 msgid ""
 "Opens dialog to save G-Code\n"
 "file."

+ 82 - 72
locale_template/strings.pot

@@ -6,7 +6,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: \n"
-"POT-Creation-Date: 2019-08-17 00:12+0300\n"
+"POT-Creation-Date: 2019-08-17 15:12+0300\n"
 "PO-Revision-Date: 2019-03-25 15:08+0200\n"
 "Last-Translator: \n"
 "Language-Team: \n"
@@ -142,7 +142,7 @@ msgstr ""
 
 #: FlatCAMApp.py:2977 FlatCAMApp.py:4804 FlatCAMApp.py:7270 FlatCAMApp.py:7380
 #: FlatCAMApp.py:7501 FlatCAMApp.py:7556 FlatCAMApp.py:7667 FlatCAMApp.py:7790
-#: FlatCAMObj.py:5862 flatcamTools/ToolSolderPaste.py:1400
+#: FlatCAMObj.py:5875 flatcamTools/ToolSolderPaste.py:1400
 msgid ""
 "[WARNING] Permission denied, saving not possible.\n"
 "Most likely another app is holding the file open and not accessible."
@@ -769,7 +769,7 @@ msgstr ""
 msgid "[ERROR]App.on_view_source() -->%s"
 msgstr ""
 
-#: FlatCAMApp.py:7033 FlatCAMApp.py:8215 FlatCAMObj.py:5643
+#: FlatCAMApp.py:7033 FlatCAMApp.py:8215 FlatCAMObj.py:5656
 #: flatcamTools/ToolSolderPaste.py:1284
 msgid "Code Editor"
 msgstr ""
@@ -1177,11 +1177,11 @@ msgstr ""
 msgid "[success] Name changed from {old} to {new}"
 msgstr ""
 
-#: FlatCAMObj.py:558 FlatCAMObj.py:2128 FlatCAMObj.py:3402 FlatCAMObj.py:5536
+#: FlatCAMObj.py:558 FlatCAMObj.py:2128 FlatCAMObj.py:3402 FlatCAMObj.py:5549
 msgid "<span style=\"color:green;\"><b>Basic</b></span>"
 msgstr ""
 
-#: FlatCAMObj.py:570 FlatCAMObj.py:2144 FlatCAMObj.py:3424 FlatCAMObj.py:5542
+#: FlatCAMObj.py:570 FlatCAMObj.py:2144 FlatCAMObj.py:3424 FlatCAMObj.py:5555
 msgid "<span style=\"color:red;\"><b>Advanced</b></span>"
 msgstr ""
 
@@ -1284,8 +1284,8 @@ msgstr ""
 msgid "Generating CNC Code"
 msgstr ""
 
-#: FlatCAMObj.py:2785 FlatCAMObj.py:5075 camlib.py:5179 camlib.py:5638
-#: camlib.py:5905
+#: FlatCAMObj.py:2785 FlatCAMObj.py:5075 camlib.py:5184 camlib.py:5680
+#: camlib.py:5970
 msgid ""
 "[ERROR]The Toolchange X,Y field in Edit -> Preferences has to be in the "
 "format (x, y) \n"
@@ -1386,56 +1386,56 @@ msgstr ""
 msgid "[success] Geometry Offset done."
 msgstr ""
 
-#: FlatCAMObj.py:5604 FlatCAMObj.py:5609 flatcamTools/ToolSolderPaste.py:1368
+#: FlatCAMObj.py:5617 FlatCAMObj.py:5622 flatcamTools/ToolSolderPaste.py:1368
 msgid "Export Machine Code ..."
 msgstr ""
 
-#: FlatCAMObj.py:5615 flatcamTools/ToolSolderPaste.py:1371
+#: FlatCAMObj.py:5628 flatcamTools/ToolSolderPaste.py:1371
 msgid "[WARNING_NOTCL] Export Machine Code cancelled ..."
 msgstr ""
 
-#: FlatCAMObj.py:5632
+#: FlatCAMObj.py:5645
 #, python-format
 msgid "[success] Machine Code file saved to: %s"
 msgstr ""
 
-#: FlatCAMObj.py:5654
+#: FlatCAMObj.py:5667
 #, python-format
 msgid "[ERROR]FlatCAMCNNJob.on_edit_code_click() -->%s"
 msgstr ""
 
-#: FlatCAMObj.py:5771
+#: FlatCAMObj.py:5784
 #, python-format
 msgid ""
 "[WARNING_NOTCL] This CNCJob object can't be processed because it is a %s "
 "CNCJob object."
 msgstr ""
 
-#: FlatCAMObj.py:5824
+#: FlatCAMObj.py:5837
 msgid "[ERROR_NOTCL] G-code does not have a units code: either G20 or G21"
 msgstr ""
 
-#: FlatCAMObj.py:5837
+#: FlatCAMObj.py:5850
 msgid ""
 "[ERROR_NOTCL] Cancelled. The Toolchange Custom code is enabled but it's "
 "empty."
 msgstr ""
 
-#: FlatCAMObj.py:5844
+#: FlatCAMObj.py:5857
 msgid "[success] Toolchange G-code was replaced by a custom code."
 msgstr ""
 
-#: FlatCAMObj.py:5858 flatcamTools/ToolSolderPaste.py:1397
+#: FlatCAMObj.py:5871 flatcamTools/ToolSolderPaste.py:1397
 msgid "[WARNING_NOTCL] No such file or directory"
 msgstr ""
 
-#: FlatCAMObj.py:5882 FlatCAMObj.py:5894
+#: FlatCAMObj.py:5895 FlatCAMObj.py:5907
 msgid ""
 "[WARNING_NOTCL] The used postprocessor file has to have in it's name: "
 "'toolchange_custom'"
 msgstr ""
 
-#: FlatCAMObj.py:5900
+#: FlatCAMObj.py:5913
 msgid "[ERROR] There is no postprocessor file."
 msgstr ""
 
@@ -1563,12 +1563,12 @@ msgid ""
 "Check the resulting GCode."
 msgstr ""
 
-#: camlib.py:5088
+#: camlib.py:5093
 #, python-format
 msgid "[ERROR] There is no such parameter: %s"
 msgstr ""
 
-#: camlib.py:5158
+#: camlib.py:5163
 msgid ""
 "[WARNING] The Cut Z parameter has positive value. It is the depth value to "
 "drill into material.\n"
@@ -1577,27 +1577,27 @@ msgid ""
 "CNC code (Gcode etc)."
 msgstr ""
 
-#: camlib.py:5165 camlib.py:5661 camlib.py:5928
+#: camlib.py:5170 camlib.py:5703 camlib.py:5993
 #, python-format
 msgid ""
 "[WARNING] The Cut Z parameter is zero. There will be no cut, skipping %s file"
 msgstr ""
 
-#: camlib.py:5394 camlib.py:5491 camlib.py:5549
+#: camlib.py:5410 camlib.py:5516 camlib.py:5582
 msgid "[ERROR_NOTCL] The loaded Excellon file has no drills ..."
 msgstr ""
 
-#: camlib.py:5496
+#: camlib.py:5521
 msgid "[ERROR_NOTCL] Wrong optimization type selected."
 msgstr ""
 
-#: camlib.py:5649 camlib.py:5916
+#: camlib.py:5691 camlib.py:5981
 msgid ""
 "[ERROR_NOTCL] Cut_Z parameter is None or zero. Most likely a bad "
 "combinations of other parameters."
 msgstr ""
 
-#: camlib.py:5654 camlib.py:5921
+#: camlib.py:5696 camlib.py:5986
 msgid ""
 "[WARNING] The Cut Z parameter has positive value. It is the depth value to "
 "cut into material.\n"
@@ -1606,11 +1606,11 @@ msgid ""
 "code (Gcode etc)."
 msgstr ""
 
-#: camlib.py:5670 camlib.py:5933
+#: camlib.py:5712 camlib.py:5998
 msgid "[ERROR_NOTCL] Travel Z parameter is None or zero."
 msgstr ""
 
-#: camlib.py:5674 camlib.py:5937
+#: camlib.py:5716 camlib.py:6002
 msgid ""
 "[WARNING] The Travel Z parameter has negative value. It is the height value "
 "to travel between cuts.\n"
@@ -1619,31 +1619,31 @@ msgid ""
 "code (Gcode etc)."
 msgstr ""
 
-#: camlib.py:5681 camlib.py:5944
+#: camlib.py:5723 camlib.py:6009
 #, python-format
 msgid ""
 "[WARNING] The Z Travel parameter is zero. This is dangerous, skipping %s file"
 msgstr ""
 
-#: camlib.py:5811
+#: camlib.py:5876
 #, python-format
 msgid "[ERROR]Expected a Geometry, got %s"
 msgstr ""
 
-#: camlib.py:5817
+#: camlib.py:5882
 msgid ""
 "[ERROR_NOTCL] Trying to generate a CNC Job from a Geometry object without "
 "solid_geometry."
 msgstr ""
 
-#: camlib.py:5856
+#: camlib.py:5921
 msgid ""
 "[ERROR_NOTCL] The Tool Offset value is too negative to use for the "
 "current_geometry.\n"
 "Raise the value (in module) and try again."
 msgstr ""
 
-#: camlib.py:6068
+#: camlib.py:6155
 msgid "[ERROR_NOTCL] There is no tool data in the SolderPaste geometry."
 msgstr ""
 
@@ -2375,7 +2375,7 @@ msgstr ""
 
 #: flatcamEditors/FlatCAMGeoEditor.py:622
 #: flatcamEditors/FlatCAMGrbEditor.py:4746 flatcamGUI/ObjectUI.py:127
-#: flatcamGUI/ObjectUI.py:889 flatcamGUI/ObjectUI.py:1471
+#: flatcamGUI/ObjectUI.py:889 flatcamGUI/ObjectUI.py:1484
 #: flatcamTools/ToolTransform.py:28
 msgid "Offset"
 msgstr ""
@@ -3290,7 +3290,7 @@ msgstr ""
 
 #: flatcamEditors/FlatCAMGrbEditor.py:2337
 #: flatcamEditors/FlatCAMGrbEditor.py:3758 flatcamGUI/ObjectUI.py:227
-#: flatcamGUI/ObjectUI.py:889 flatcamGUI/ObjectUI.py:1471
+#: flatcamGUI/ObjectUI.py:889 flatcamGUI/ObjectUI.py:1484
 msgid "Type"
 msgstr ""
 
@@ -5946,7 +5946,7 @@ msgstr ""
 
 #: flatcamGUI/FlatCAMGUI.py:4189 flatcamGUI/FlatCAMGUI.py:5467
 #: flatcamGUI/ObjectUI.py:174 flatcamGUI/ObjectUI.py:544
-#: flatcamGUI/ObjectUI.py:877 flatcamGUI/ObjectUI.py:1456
+#: flatcamGUI/ObjectUI.py:877 flatcamGUI/ObjectUI.py:1469
 msgid "Plot (show) this object."
 msgstr ""
 
@@ -6943,7 +6943,7 @@ msgid "CNC Job General"
 msgstr ""
 
 #: flatcamGUI/FlatCAMGUI.py:5840 flatcamGUI/ObjectUI.py:542
-#: flatcamGUI/ObjectUI.py:875 flatcamGUI/ObjectUI.py:1453
+#: flatcamGUI/ObjectUI.py:875 flatcamGUI/ObjectUI.py:1466
 msgid "Plot Object"
 msgstr ""
 
@@ -7031,7 +7031,7 @@ msgid "<b>Export G-Code:</b>"
 msgstr ""
 
 #: flatcamGUI/FlatCAMGUI.py:5965 flatcamGUI/FlatCAMGUI.py:6006
-#: flatcamGUI/ObjectUI.py:1489
+#: flatcamGUI/ObjectUI.py:1502
 msgid ""
 "Export and save G-Code to\n"
 "make this object to a file."
@@ -7051,7 +7051,7 @@ msgstr ""
 msgid "Append to G-Code:"
 msgstr ""
 
-#: flatcamGUI/FlatCAMGUI.py:5984 flatcamGUI/ObjectUI.py:1511
+#: flatcamGUI/FlatCAMGUI.py:5984 flatcamGUI/ObjectUI.py:1524
 msgid ""
 "Type here any G-Code commands you would\n"
 "like to append to the generated file.\n"
@@ -7062,7 +7062,7 @@ msgstr ""
 msgid "CNC Job Adv. Options"
 msgstr ""
 
-#: flatcamGUI/FlatCAMGUI.py:6012 flatcamGUI/ObjectUI.py:1529
+#: flatcamGUI/FlatCAMGUI.py:6012 flatcamGUI/ObjectUI.py:1542
 msgid "Toolchange G-Code:"
 msgstr ""
 
@@ -7074,52 +7074,52 @@ msgid ""
 "or a Toolchange Macro."
 msgstr ""
 
-#: flatcamGUI/FlatCAMGUI.py:6028 flatcamGUI/ObjectUI.py:1551
+#: flatcamGUI/FlatCAMGUI.py:6028 flatcamGUI/ObjectUI.py:1564
 msgid "Use Toolchange Macro"
 msgstr ""
 
-#: flatcamGUI/FlatCAMGUI.py:6030 flatcamGUI/ObjectUI.py:1554
+#: flatcamGUI/FlatCAMGUI.py:6030 flatcamGUI/ObjectUI.py:1567
 msgid ""
 "Check this box if you want to use\n"
 "a Custom Toolchange GCode (macro)."
 msgstr ""
 
-#: flatcamGUI/FlatCAMGUI.py:6042 flatcamGUI/ObjectUI.py:1563
+#: flatcamGUI/FlatCAMGUI.py:6042 flatcamGUI/ObjectUI.py:1576
 msgid ""
 "A list of the FlatCAM variables that can be used\n"
 "in the Toolchange event.\n"
 "They have to be surrounded by the '%' symbol"
 msgstr ""
 
-#: flatcamGUI/FlatCAMGUI.py:6049 flatcamGUI/ObjectUI.py:1570
+#: flatcamGUI/FlatCAMGUI.py:6049 flatcamGUI/ObjectUI.py:1583
 msgid "Parameters"
 msgstr ""
 
-#: flatcamGUI/FlatCAMGUI.py:6052 flatcamGUI/ObjectUI.py:1573
+#: flatcamGUI/FlatCAMGUI.py:6052 flatcamGUI/ObjectUI.py:1586
 msgid "FlatCAM CNC parameters"
 msgstr ""
 
-#: flatcamGUI/FlatCAMGUI.py:6053 flatcamGUI/ObjectUI.py:1574
+#: flatcamGUI/FlatCAMGUI.py:6053 flatcamGUI/ObjectUI.py:1587
 msgid "tool = tool number"
 msgstr ""
 
-#: flatcamGUI/FlatCAMGUI.py:6054 flatcamGUI/ObjectUI.py:1575
+#: flatcamGUI/FlatCAMGUI.py:6054 flatcamGUI/ObjectUI.py:1588
 msgid "tooldia = tool diameter"
 msgstr ""
 
-#: flatcamGUI/FlatCAMGUI.py:6055 flatcamGUI/ObjectUI.py:1576
+#: flatcamGUI/FlatCAMGUI.py:6055 flatcamGUI/ObjectUI.py:1589
 msgid "t_drills = for Excellon, total number of drills"
 msgstr ""
 
-#: flatcamGUI/FlatCAMGUI.py:6056 flatcamGUI/ObjectUI.py:1577
+#: flatcamGUI/FlatCAMGUI.py:6056 flatcamGUI/ObjectUI.py:1590
 msgid "x_toolchange = X coord for Toolchange"
 msgstr ""
 
-#: flatcamGUI/FlatCAMGUI.py:6057 flatcamGUI/ObjectUI.py:1578
+#: flatcamGUI/FlatCAMGUI.py:6057 flatcamGUI/ObjectUI.py:1591
 msgid "y_toolchange = Y coord for Toolchange"
 msgstr ""
 
-#: flatcamGUI/FlatCAMGUI.py:6058 flatcamGUI/ObjectUI.py:1579
+#: flatcamGUI/FlatCAMGUI.py:6058 flatcamGUI/ObjectUI.py:1592
 msgid "z_toolchange = Z coord for Toolchange"
 msgstr ""
 
@@ -7131,15 +7131,15 @@ msgstr ""
 msgid "z_move = Z height for travel"
 msgstr ""
 
-#: flatcamGUI/FlatCAMGUI.py:6061 flatcamGUI/ObjectUI.py:1582
+#: flatcamGUI/FlatCAMGUI.py:6061 flatcamGUI/ObjectUI.py:1595
 msgid "z_depthpercut = the step value for multidepth cut"
 msgstr ""
 
-#: flatcamGUI/FlatCAMGUI.py:6062 flatcamGUI/ObjectUI.py:1583
+#: flatcamGUI/FlatCAMGUI.py:6062 flatcamGUI/ObjectUI.py:1596
 msgid "spindlesspeed = the value for the spindle speed"
 msgstr ""
 
-#: flatcamGUI/FlatCAMGUI.py:6064 flatcamGUI/ObjectUI.py:1584
+#: flatcamGUI/FlatCAMGUI.py:6064 flatcamGUI/ObjectUI.py:1597
 msgid "dwelltime = time to dwell to allow the spindle to reach it's set RPM"
 msgstr ""
 
@@ -8306,11 +8306,11 @@ msgid ""
 "showed UI form entries named V-Tip Dia and V-Tip Angle."
 msgstr ""
 
-#: flatcamGUI/ObjectUI.py:889 flatcamGUI/ObjectUI.py:1471
+#: flatcamGUI/ObjectUI.py:889 flatcamGUI/ObjectUI.py:1484
 msgid "Dia"
 msgstr ""
 
-#: flatcamGUI/ObjectUI.py:889 flatcamGUI/ObjectUI.py:1471
+#: flatcamGUI/ObjectUI.py:889 flatcamGUI/ObjectUI.py:1484
 #: flatcamTools/ToolNonCopperClear.py:83 flatcamTools/ToolPaint.py:80
 msgid "TT"
 msgstr ""
@@ -8549,17 +8549,27 @@ msgstr ""
 msgid "<b>Travelled dist.:</b>"
 msgstr ""
 
-#: flatcamGUI/ObjectUI.py:1397 flatcamGUI/ObjectUI.py:1404
+#: flatcamGUI/ObjectUI.py:1396 flatcamGUI/ObjectUI.py:1401
 msgid ""
 "This is the total travelled distance on X-Y plane.\n"
 "In current units."
 msgstr ""
 
-#: flatcamGUI/ObjectUI.py:1435
+#: flatcamGUI/ObjectUI.py:1406
+msgid "<b>Estimated time:</b>"
+msgstr ""
+
+#: flatcamGUI/ObjectUI.py:1408 flatcamGUI/ObjectUI.py:1413
+msgid ""
+"This is the estimated time to do the routing/drilling,\n"
+"without the time spent in ToolChange events."
+msgstr ""
+
+#: flatcamGUI/ObjectUI.py:1448
 msgid "<b>CNC Tools Table</b>"
 msgstr ""
 
-#: flatcamGUI/ObjectUI.py:1438
+#: flatcamGUI/ObjectUI.py:1451
 msgid ""
 "Tools in this CNCJob object used for cutting.\n"
 "The tool diameter is used for plotting on canvas.\n"
@@ -8572,37 +8582,37 @@ msgid ""
 "ball(B), or V-Shaped(V)."
 msgstr ""
 
-#: flatcamGUI/ObjectUI.py:1472
+#: flatcamGUI/ObjectUI.py:1485
 msgid "P"
 msgstr ""
 
-#: flatcamGUI/ObjectUI.py:1478
+#: flatcamGUI/ObjectUI.py:1491
 msgid "Update Plot"
 msgstr ""
 
-#: flatcamGUI/ObjectUI.py:1480
+#: flatcamGUI/ObjectUI.py:1493
 msgid "Update the plot."
 msgstr ""
 
-#: flatcamGUI/ObjectUI.py:1487
+#: flatcamGUI/ObjectUI.py:1500
 msgid "<b>Export CNC Code:</b>"
 msgstr ""
 
-#: flatcamGUI/ObjectUI.py:1495
+#: flatcamGUI/ObjectUI.py:1508
 msgid "Prepend to CNC Code:"
 msgstr ""
 
-#: flatcamGUI/ObjectUI.py:1498
+#: flatcamGUI/ObjectUI.py:1511
 msgid ""
 "Type here any G-Code commands you would\n"
 "like to add to the beginning of the generated file."
 msgstr ""
 
-#: flatcamGUI/ObjectUI.py:1508
+#: flatcamGUI/ObjectUI.py:1521
 msgid "Append to CNC Code:"
 msgstr ""
 
-#: flatcamGUI/ObjectUI.py:1532
+#: flatcamGUI/ObjectUI.py:1545
 msgid ""
 "Type here any G-Code commands you would\n"
 "like to be executed when Toolchange event is encountered.\n"
@@ -8615,29 +8625,29 @@ msgid ""
 "having as template the 'Toolchange Custom' posprocessor file."
 msgstr ""
 
-#: flatcamGUI/ObjectUI.py:1580
+#: flatcamGUI/ObjectUI.py:1593
 msgid "z_cut = depth where to cut"
 msgstr ""
 
-#: flatcamGUI/ObjectUI.py:1581
+#: flatcamGUI/ObjectUI.py:1594
 msgid "z_move = height where to travel"
 msgstr ""
 
-#: flatcamGUI/ObjectUI.py:1600
+#: flatcamGUI/ObjectUI.py:1613
 msgid "View CNC Code"
 msgstr ""
 
-#: flatcamGUI/ObjectUI.py:1603
+#: flatcamGUI/ObjectUI.py:1616
 msgid ""
 "Opens TAB to view/modify/print G-Code\n"
 "file."
 msgstr ""
 
-#: flatcamGUI/ObjectUI.py:1609
+#: flatcamGUI/ObjectUI.py:1622
 msgid "Save CNC Code"
 msgstr ""
 
-#: flatcamGUI/ObjectUI.py:1612
+#: flatcamGUI/ObjectUI.py:1625
 msgid ""
 "Opens dialog to save G-Code\n"
 "file."

Некоторые файлы не были показаны из-за большого количества измененных файлов