diff --git a/CHANGELOG.md b/CHANGELOG.md index c9ac9e74..065dc290 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,11 +7,28 @@ CHANGELOG for FlatCAM beta ================================================= +27.04.2020 + +- finished the moving of all Tcl Shell stuff out of the FlatCAAMApp class to flatcamTools.ToolShell class +- updated the requirements.txt file to request that the Shapely package needs to be at least version 1.7.0 as it is needed in the latest versions of FlatCAM beta +- some TOOD cleanups +- minor changes +- replaced the testing if instance of FlatCAMObj with testing the obj.kind attribute +- removed the import of the whole FlatCAMApp file only for the usage of GracefulException +- remove the import of FlatCAMApp and used alternate ways +- optimized the imports in some files +- moved the Bookmarksmanager and ToolDB classes into their own files +- solved some bugs that were not so visible in the Editors and HPGL parser +- split the FlatCAMObj file into multiple files located in the flatcamObjects folder and renamed the contained classes with names more suggestive +- updated the Google Translation for the German language +- added support for Hungarian language - no translation for now + 25.04.2020 - ensured that on Graceful Exit (CTRL+ALT+X key combo) if using Progressive Plotting, the eventual residual plotted lines are deleted. This apply for Tool NCC and Tool Paint - fixed links in Attributions tab in Help -> About FlatCAM to be able to open external links. - updated Google Translations for French and Spanish languages +- added some '\n' chars in the Help Tcl command to make the help more readable 24.04.2020 @@ -282,7 +299,7 @@ CHANGELOG for FlatCAM beta 12.02.2020 -- working on fixing a bug in FlatCAMGeometry.merge() - FIXED issue #380 +- working on fixing a bug in GeometryObject.merge() - FIXED issue #380 - fixed bug: when deleting a FlatCAMCNCJob with annotations enabled, the annotations are not deleted from canvas; fixed issue #379 - fixed bug: creating a new project while a project is open and it contain CNCJob annotations and/or Gerber mark shapes, did not delete them from canvas @@ -637,7 +654,7 @@ CHANGELOG for FlatCAM beta - modified the Jump To method such that now allows relative jump from the current mouse location - fixed the Defaults upgrade overwriting the new version number with the old one - fixed issue with clear_polygon3() - the one who makes 'lines' and fixed the NCC Tool -- some small changes in the FlatCAMGeometry.on_tool_add() method +- some small changes in the GeometryObject.on_tool_add() method - made sure that in Geometry Editor the self.app.mouse attribute is updated with the current mouse position (x, y) - updated the preprocessor files - fixed the HPGL preprocessor @@ -680,7 +697,7 @@ CHANGELOG for FlatCAM beta - changed the Scale Entry in Object UI to FCEntry() GUI element in order to allow expressions to be entered. E.g: 1/25.4 - some small changes in the Scale button handler in FlatCAMObj() class - added option to save objects as PDF files in File -> Save menu -- optimized the FlatCAMGerber.clear_plot_apertures() method +- optimized the GerberObject.clear_plot_apertures() method - some changes in the ObjectUI and for the Geometry UI - finished a very rough and limited HPGL2 file import @@ -710,7 +727,7 @@ CHANGELOG for FlatCAM beta - reverted this change: "selected object in Project used to ask twice for UI build" because it will not build the UI when a tab is closed for Document object and the object is selected - fixed issue after Geometry object edit; the GCode made from an edited object did not reflect the changes in the object - in Object UI, the Scale FCDoubleSpinner will no longer work for Return key press due of issues of unwanted scaling on focusOut event -- in FlatCAMGeometry fixed the scale and offset methods to always process the self.solid_geometry +- in GeometryObject fixed the scale and offset methods to always process the self.solid_geometry - Calibration Tool - finished the calibrated object creation method - updated the POT file - fixed an error in the German PO file @@ -801,7 +818,7 @@ CHANGELOG for FlatCAM beta 28.11.2019 -- small fixes in NCC Tool and in the FlatCAMGeometry class +- small fixes in NCC Tool and in the GeometryObject class 27.11.2019 @@ -819,7 +836,7 @@ CHANGELOG for FlatCAM beta - In Gerber isolation changed the UI - in Gerber isolation added the option to selectively isolate only certain polygons -- made some optimizations in FlatCAMGerber.isolate() method +- made some optimizations in GerberObject.isolate() method - updated the 'single' isolation of Gerber polygons to remove the polygon if clicked on it and it is already in the list of single polygons to be isolated - clicking to add a polygon when doing Single type isolation will add a blue shape marking the selected polygon, second click will remove that shape - fixed bugs in Paint Tool when painting single polygon @@ -830,7 +847,7 @@ CHANGELOG for FlatCAM beta - in Tool Fiducials added a new fiducial type: chess pattern - work in Calibrate Excellon Tool -- fixed the line numbers in the TextPlainEdit to fit all digits of the line number; activated the line numbers for FlatCAMScript objects too +- fixed the line numbers in the TextPlainEdit to fit all digits of the line number; activated the line numbers for ScriptObject objects too - line numbers in the TextPlainEdit for the selected line are bold - made sure that the self.defaults dictionary is deepcopy-ed in the self.options dictionary - made sure that the units are read from the self.defaults and not from the GUI @@ -842,7 +859,7 @@ CHANGELOG for FlatCAM beta - Tool Fiducials - updated the source_file object for the modified Gerber files - working on adding line numbers to the TextPlainEdit - GCode view now has line numbers -- solved a bug that made selection of objects on canvas impossible if there is an object of type FlatCAMScript or FlatCAMDocument opened +- solved a bug that made selection of objects on canvas impossible if there is an object of type ScriptObject or DocumentObject opened 21.11.2019 @@ -899,7 +916,7 @@ CHANGELOG for FlatCAM beta - trying to improve the performance of View CNC Code command by using QPlainTextEdit; made the mods for it - when using the Find function in the TextEditor and the result reach the bottom of the document, the next find will be the first in the document (before it defaulted to the beginning of the document) - finished improving the show of text files in FlatCAM (CNC Code, Source files) -- fixed an issue in the FlatCAMObj.FlatCAMGerber.convert_units() which needed to be updated after changes elsewhere +- fixed an issue in the FlatCAMObj.GerberObject.convert_units() which needed to be updated after changes elsewhere 12.11.2019 @@ -937,7 +954,7 @@ CHANGELOG for FlatCAM beta - the "CRTL+S" key combo when the Preferences Tab is in focus will save the Preferences instead of saving the Project - fixed bug in the Paint Tool that did not allow choosing a Paint Method that was not Standard -- made sure that in the FlatCAMGeometry.merge() all the source data is deepcopy-ed in the final object +- made sure that in the GeometryObject.merge() all the source data is deepcopy-ed in the final object - the font color of the Preferences tab will change to red if settings are not saved and it will revert to default when saved - fixed issue #333. The Geometry Editor Paint tool was not working and using it resulted in an error @@ -1149,7 +1166,7 @@ CHANGELOG for FlatCAM beta - added a dark theme to FlatCAM (only for canvas). The selection is done in Edit -> Preferences -> General -> GUI Settings - updated the .POT file and worked a bit in the romanian translation - small changes: reduced the thickness of the axis in 3D mode from 3 pixels to 1 pixel -- made sure that is the text in the source file of a FlatCAMDocument is HTML is loaded as such +- made sure that is the text in the source file of a DocumentObject is HTML is loaded as such - added inverted icons 6.10.2019 @@ -1193,20 +1210,20 @@ CHANGELOG for FlatCAM beta 3.10.2019 -- previously I've added the initial layout for the FlatCAMDocument object -- added more editing features in the Selected Tab for the FlatCAMDocument object +- previously I've added the initial layout for the DocumentObject object +- added more editing features in the Selected Tab for the DocumentObject object 2.10.2019 - fixed bug in Geometry Editor that did not allow the copy of geometric elements - created a new class that holds all the Code Editor functionality and integrated as a Editor in FlatCAM, the location is in flatcamEditors folder - remade all the functions for view_source, scripts and view_code to use the new TextEditor class; now all the Code Editor tabs are being kept alive, before only one could be in an open state -- changed the name of the new object FlatCAMNotes to a more general one FlatCAMDocument -- changed the way a new FlatCAMScript object is made, the method that is processing the Tcl commands when the Run button is clicked is moved to the FlatCAMObj.FlatCAMScript() class +- changed the name of the new object FlatCAMNotes to a more general one DocumentObject +- changed the way a new ScriptObject object is made, the method that is processing the Tcl commands when the Run button is clicked is moved to the FlatCAMObj.ScriptObject() class - reused the Multiprocessing Pool declared in the App for the ToolRulesCheck() class - adapted the Project context menu for the new types of FLatCAM objects - modified the setup_recent_files to accommodate the new FlatCAM objects -- made sure that when an FlatCAMScript object is deleted, it's associated Tab is closed +- made sure that when an ScriptObject object is deleted, it's associated Tab is closed - fixed the FlatCMAScript object saving when project is saved (loading a project with this script object is not working yet) - fixed the FlatCMAScript object when loading it from a project @@ -1220,7 +1237,7 @@ CHANGELOG for FlatCAM beta - added new settings for the Gerber newly introduced feature to isolate with the V-Shape tools (tip dia, tip angle, tool_type and cut Z) in Edit -> Preferences -> Gerber Advanced - made those settings just added for Gerber, to be updated on object creation - added the Geo Tolerance parameter to those that are converted from MM to INCH -- added two new FlatCAM objects: FlatCAMScript and FlatCAMNotes +- added two new FlatCAM objects: ScriptObject and FlatCAMNotes 30.09.2019 @@ -1443,7 +1460,7 @@ CHANGELOG for FlatCAM beta 15.09.2019 -- refactored FlatCAMGeometry.mtool_gen_cncjob() method +- refactored GeometryObject.mtool_gen_cncjob() method - fixed the TclCommandCncjob to work for multigeometry Geometry objects; still I had to fix the list of tools parameter, right now I am setting it to an empty list - update the Tcl Command isolate to be able to isolate exteriors, interiors besides the full isolation, using the iso_type parameter - fixed issue in ToolPaint that could not allow area painting of a geometry that was a list and not a Geometric element (polygon or MultiPolygon) @@ -1819,7 +1836,7 @@ CHANGELOG for FlatCAM beta - done regression to solve the bug with multiple passes cutting from the copper features (I should remember not to make mods here) - if 'combine' is checked in Gerber isolation but there is only one pass, the resulting geometry will still be single geo - the 'passes' entry was changed to a IntSpinner so it will allow passes to be entered only in range (1, 999) - it will not allow entry of 0 which may create some issues -- improved the FlatCAMGerber.isolate() function to work for geometry in the form of list and also in case that the elements of the list are LinearRings (like when doing the Exterior Isolation) +- improved the GerberObject.isolate() function to work for geometry in the form of list and also in case that the elements of the list are LinearRings (like when doing the Exterior Isolation) - in NCC Tool made sure that at each run the old objects are deleted - fixed bug in camlib.Gerber.parse_lines() Gerber parser where for Allegro Gerber files the Gerber units were incorrectly detected - improved Mark Area Tool in Gerber Editor such that at each launch the previous markings are deleted @@ -1914,7 +1931,7 @@ CHANGELOG for FlatCAM beta 19.07.2019 -- fixed bug in FlatCAMObj.FlatCAMGeometry.ui_disconnect(); the widgets signals were not disconnected from handlers when required therefore the signals were connected in an exponential way +- fixed bug in FlatCAMObj.GeometryObject.ui_disconnect(); the widgets signals were not disconnected from handlers when required therefore the signals were connected in an exponential way - some changes in the widgets used in the Selected tab for Geometry object - some PEP8 cleanup in FlatCAMObj.py - updated languages @@ -2045,7 +2062,7 @@ CHANGELOG for FlatCAM beta - fixed bug in ToolCutout where creating a cutout object geometry from another external isolation geometry failed - fixed bug in cncjob TclCommand where the gcode could not be correctly generated due of missing bounds params in obj.options dict -- fixed a hardcoded tolerance in FlatCAMGeometry.generatecncjob() and in FlatCAMGeometry.mtool_gen_cncjob() to use the parameter from Preferences +- fixed a hardcoded tolerance in GeometryObject.generatecncjob() and in GeometryObject.mtool_gen_cncjob() to use the parameter from Preferences - updated translations 5.06.2019 @@ -2219,7 +2236,7 @@ CHANGELOG for FlatCAM beta - fixed some bugs related to moving an Gerber object with the aperture table in view - added a new parameter in the Edit -> Preferences -> App Preferences named Geo Tolerance. This parameter control the level of geometric detail throughout FlatCAM. It directly influence the effect of Circle Steps parameter. - solved a bug in Excellon Editor that caused app crash when trying to edit a tool in Tool Table due of missing a tool offset -- updated the ToolPanelize tool so the Gerber panel of type FlatCAMGerber can be isolated like any other FlatCAMGerber object +- updated the ToolPanelize tool so the Gerber panel of type GerberObject can be isolated like any other GerberObject object - updated the ToolPanelize tool so it can be edited - modified the default values for toolchangez and endz parameters so they are now safe in all cases @@ -2703,7 +2720,7 @@ CHANGELOG for FlatCAM beta - added ability to mark individual apertures in Gerber file using the Gerber Aperture Table - more modifications for the Gerber UI layout; made 'follow' an advanced Gerber option - added in Preferences a new Category: Gerber Advanced Options. For now it controls the display of Gerber Aperture Table and the "follow" attribute4 -- fixed FlatCAMGerber.merge() to merge the self.apertures[ap]['solid_geometry'] too +- fixed GerberObject.merge() to merge the self.apertures[ap]['solid_geometry'] too - started to work on a new feature that allow adding a ToolChange GCode macro - GUI added both in CNCJob Selected tab and in CNCJob Preferences - added a limited 'sort-of' Gerber Editor: it allows buffering and scaling of apertures @@ -2846,7 +2863,7 @@ CHANGELOG for FlatCAM beta - added total travel distance for CNCJob object created from Excellon Object in the CNCJob Selected tab - added 'FlatCAM ' prefix to any detached tab, for easy identification - remade the Grids context menu (right mouse button click on canvas). Now it has values linked to the units type (inch or mm). Added ability to add or delete grid values and they are persistent. -- updated the function for the project context menu 'Generate CNC' menu entry (Action) to use the modernized function FlatCAMObj.FlatCAMGeometry.on_generatecnc_button_click() +- updated the function for the project context menu 'Generate CNC' menu entry (Action) to use the modernized function FlatCAMObj.GeometryObject.on_generatecnc_button_click() - when linked, the grid snap on Y will copy the value in grid snap on X in real time - in Gerber aperture table now the values are displayed in the current units set in FlatCAM - added shortcut key 'J' (jump to location) in Editors and added an icon to the dialog popup window @@ -2863,7 +2880,7 @@ CHANGELOG for FlatCAM beta - finished Gerber aperture table display - made the Gerber aperture table not visible as default and added a checkbox that can toggle the visibility - fixed issue with plotting in CNCJob; with Plot kind set to something else than 'all' when toggling Plot, it was defaulting to kind = 'all' -- added (and commented) an experimental FlatCAMObj.FlatCAMGerber.plot_aperture() +- added (and commented) an experimental FlatCAMObj.GerberObject.plot_aperture() 12.02.2019 @@ -3052,7 +3069,7 @@ CHANGELOG for FlatCAM beta 28.01.2018 -- fixed the FlatCAMGerber.merge() function +- fixed the GerberObject.merge() function - added a new menu entry for the Gerber Join function: Edit -> Conversions -> "Join Gerber(s) to Gerber" allowing joining Gerber objects into a final Gerber object - moved Paint Tool defaults from Geometry section to the Tools section in Edit -> Preferences - added key shortcuts for Open Manual = F1 and for Open Online VideoHelp = F2 @@ -3075,13 +3092,13 @@ CHANGELOG for FlatCAM beta - added new entries to the Canvas context menu (Copy, Delete, Edit/Save, Move, New Excellon, New Geometry, New Project) - fixed GRBL_laser preprocessor file - updated function for copy of an Excellon object for the case when the object has slots -- updated FlatCAMExcellon.merge() function to work in case some (or all) of the merged objects have slots +- updated ExcellonObject.merge() function to work in case some (or all) of the merged objects have slots 25.01.2019 - deleted junk folders - remade the Panelize Tool: now it is much faster, it is multi-threaded, it works with multitool geometries and it works with multigeo geometries too. -- made sure to copy the options attribute to the final object in the case of: FlatCAMGeometry.merge(), FlatCAMGerber.merge() and for the Panelize Tool +- made sure to copy the options attribute to the final object in the case of: GeometryObject.merge(), GerberObject.merge() and for the Panelize Tool - modified the panelize TclCommand to take advantage of the new panelize() function; added a 'threaded' parameter (default value is 1) which controls the execution of the panelize TclCommand: threaded or non-threaded - fixed TclCommand Cutout - added a new TclCommand named CutoutAny. Keyword: cutout_any @@ -3164,7 +3181,7 @@ CHANGELOG for FlatCAM beta - fixed the initial text in the ToolShell - reactivated the version check in case the release is not BETA; FlatCAMApp.App has now a beta object that when set True the application will show in the Title and help-> About that is Beta (and it disable version checking) - added a new name (mine: for good and/or bad) to the contributors list -- fixed the Join function to work on Gerber and Excellon, Gerber and Gerber, Excellon and Excelon combination of objects. The merged property is the solid_geometry and the result is a FlatCAMGeometry object. +- fixed the Join function to work on Gerber and Excellon, Gerber and Gerber, Excellon and Excelon combination of objects. The merged property is the solid_geometry and the result is a GeometryObject object. 3.01.2019 @@ -3246,8 +3263,8 @@ CHANGELOG for FlatCAM beta 18.12.2018 -- small changes in FlatCAMGeometry.plot() -- updated the FlatCAMGeometry.merge() function and the Join Geometry feature to accommodate the different types of geometries: singlegeo and multigeo type +- small changes in GeometryObject.plot() +- updated the GeometryObject.merge() function and the Join Geometry feature to accommodate the different types of geometries: singlegeo and multigeo type - added Conversion submenu in Edit where I moved the Join features and added the Convert from MultiGeo to SingleGeo type and the reverse - added Copy Tool (on a selection of tools) feature in Geometry Object UI - fixed the bounds() method for the MultiGeo geometry object so the canvas selection is working and also the Properties Tool diff --git a/FlatCAMApp.py b/FlatCAMApp.py index 0cd6a882..35ef604e 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -14,24 +14,22 @@ import getopt import random import simplejson as json import lzma -# import threading import shutil import stat - +from datetime import datetime from stat import S_IREAD, S_IRGRP, S_IROTH import ctypes +import traceback -# import tkinter as tk -# from PyQt5 import QtPrintSupport +from shapely.geometry import Point, MultiPolygon +from io import StringIO from reportlab.graphics import renderPDF from reportlab.pdfgen import canvas -# from reportlab.graphics import renderPM from reportlab.lib.units import inch, mm from reportlab.lib.pagesizes import landscape, portrait from svglib.svglib import svg2rlg -# from contextlib import contextmanager import gc from xml.dom.minidom import parseString as parse_xml_string @@ -39,23 +37,32 @@ from xml.dom.minidom import parseString as parse_xml_string from multiprocessing.connection import Listener, Client from multiprocessing import Pool import socket -# from array import array - -# import vispy.scene as scene # ####################################### # # Imports part of FlatCAM ## # ####################################### +from FlatCAMCommon import LoudDict, color_variant +from FlatCAMBookmark import BookmarkManager +from FlatCAMDB import ToolsDB2 + from ObjectCollection import * -from FlatCAMObj import * -from camlib import to_dict, dict2obj, ET, ParseError +from flatcamObjects.FlatCAMObj import FlatCAMObj +from flatcamObjects.FlatCAMCNCJob import CNCJobObject +from flatcamObjects.FlatCAMDocument import DocumentObject +from flatcamObjects.FlatCAMExcellon import ExcellonObject +from flatcamObjects.FlatCAMGeometry import GeometryObject +from flatcamObjects.FlatCAMGerber import GerberObject +from flatcamObjects.FlatCAMScript import ScriptObject + +from flatcamParsers.ParseExcellon import Excellon +from flatcamParsers.ParseGerber import Gerber +from camlib import to_dict, dict2obj, ET, ParseError, Geometry, CNCjob from flatcamGUI.PlotCanvas import * from flatcamGUI.PlotCanvasLegacy import * from flatcamGUI.FlatCAMGUI import * from flatcamGUI.GUIElements import FCFileSaveDialog -from FlatCAMCommon import LoudDict, BookmarkManager, ToolsDB, ToolsDB2, color_variant from FlatCAMPostProc import load_preprocessors from flatcamEditors.FlatCAMGeoEditor import FlatCAMGeoEditor @@ -73,8 +80,6 @@ from vispy.io import write_png from flatcamTools import * -import tclCommands - import gettext import FlatCAMTranslation as fcTranslate import builtins @@ -1173,6 +1178,15 @@ class App(QtCore.QObject): # set FlatCAM units in the Status bar self.set_screen_units(self.defaults['units']) + # ############################################################################# + # ################################ AUTOSAVE SETUP ############################# + # ############################################################################# + + self.block_autosave = False + self.autosave_timer = QtCore.QTimer(self) + self.save_project_auto_update() + self.autosave_timer.timeout.connect(self.save_project_auto) + # ############################################################################# # ######################## UPDATE PREFERENCES GUI FORMS ####################### # ############################################################################# @@ -1960,15 +1974,6 @@ class App(QtCore.QObject): self.worker_task.connect(self.workers.add_task) self.log.debug("Finished creating Workers crew.") - # ############################################################################# - # ################################ AUTOSAVE SETUP ############################# - # ############################################################################# - - self.block_autosave = False - self.autosave_timer = QtCore.QTimer(self) - self.save_project_auto_update() - self.autosave_timer.timeout.connect(self.save_project_auto) - # ############################################################################# # ################################# Activity Monitor ########################## # ############################################################################# @@ -2553,23 +2558,11 @@ class App(QtCore.QObject): # #################################################################################### # ####################### Shell SETUP ################################################ # #################################################################################### - # this will hold the TCL instance - self.tcl = None - # the actual variable will be redeclared in setup_tcl() - self.tcl_commands_storage = None - - self.init_tcl() - - self.shell = FCShell(self, version=self.version) - self.shell._edit.set_model_data(self.myKeywords) - self.shell.setWindowIcon(self.ui.app_icon) - self.shell.setWindowTitle("FlatCAM Shell") - self.shell.resize(*self.defaults["global_shell_shape"]) - self.shell._append_to_browser('in', "FlatCAM %s - " % self.version) - self.shell.append_output('%s\n\n' % _("Type >help< to get started")) + self.shell = FCShell(app=self, version=self.version) self.ui.shell_dock.setWidget(self.shell) + self.log.debug("TCL Shell has been initialized.") # show TCL shell at start-up based on the Menu -? Edit -> Preferences setting. if self.defaults["global_shell_at_startup"]: @@ -3422,14 +3415,14 @@ class App(QtCore.QObject): edited_object = self.collection.get_active() - if isinstance(edited_object, FlatCAMGerber) or isinstance(edited_object, FlatCAMGeometry) or \ - isinstance(edited_object, FlatCAMExcellon): + if isinstance(edited_object, GerberObject) or isinstance(edited_object, GeometryObject) or \ + isinstance(edited_object, ExcellonObject): pass else: self.inform.emit('[WARNING_NOTCL] %s' % _("Select a Geometry, Gerber or Excellon Object to edit.")) return - if isinstance(edited_object, FlatCAMGeometry): + if isinstance(edited_object, GeometryObject): # store the Geometry Editor Toolbar visibility before entering in the Editor self.geo_editor.toolbar_old_state = True if self.ui.geo_edit_toolbar.isVisible() else False @@ -3462,7 +3455,7 @@ class App(QtCore.QObject): # set call source to the Editor we go into self.call_source = 'geo_editor' - elif isinstance(edited_object, FlatCAMExcellon): + elif isinstance(edited_object, ExcellonObject): # 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 @@ -3474,7 +3467,7 @@ class App(QtCore.QObject): # set call source to the Editor we go into self.call_source = 'exc_editor' - elif isinstance(edited_object, FlatCAMGerber): + elif isinstance(edited_object, GerberObject): # 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 @@ -3538,7 +3531,7 @@ class App(QtCore.QObject): self.ui.tool_scroll_area.setWidget(QtWidgets.QWidget()) self.ui.notebook.setTabText(2, "Tool") - if isinstance(edited_obj, FlatCAMGeometry): + if isinstance(edited_obj, GeometryObject): obj_type = "Geometry" if cleanup is None: self.geo_editor.update_fcgeometry(edited_obj) @@ -3564,7 +3557,7 @@ class App(QtCore.QObject): edited_obj.build_ui() self.inform.emit('[success] %s' % _("Editor exited. Editor content saved.")) - elif isinstance(edited_obj, FlatCAMGerber): + elif isinstance(edited_obj, GerberObject): obj_type = "Gerber" if cleanup is None: self.grb_editor.update_fcgerber() @@ -3589,7 +3582,7 @@ class App(QtCore.QObject): # Remove anything else in the GUI self.ui.selected_scroll_area.takeWidget() - elif isinstance(edited_obj, FlatCAMExcellon): + elif isinstance(edited_obj, ExcellonObject): obj_type = "Excellon" if cleanup is None: self.exc_editor.update_fcexcellon(edited_obj) @@ -3621,13 +3614,13 @@ class App(QtCore.QObject): self.inform.emit('[WARNING_NOTCL] %s' % _("Editor exited. Editor content was not saved.")) - if isinstance(edited_obj, FlatCAMGeometry): + if isinstance(edited_obj, GeometryObject): self.geo_editor.deactivate() edited_obj.build_ui() - elif isinstance(edited_obj, FlatCAMGerber): + elif isinstance(edited_obj, GerberObject): self.grb_editor.deactivate_grb_editor() edited_obj.build_ui() - elif isinstance(edited_obj, FlatCAMExcellon): + elif isinstance(edited_obj, ExcellonObject): self.exc_editor.deactivate() edited_obj.build_ui() else: @@ -3642,11 +3635,11 @@ class App(QtCore.QObject): # Switch notebook to Selected page self.ui.notebook.setCurrentWidget(self.ui.selected_tab) else: - if isinstance(edited_obj, FlatCAMGeometry): + if isinstance(edited_obj, GeometryObject): self.geo_editor.deactivate() - elif isinstance(edited_obj, FlatCAMGerber): + elif isinstance(edited_obj, GerberObject): self.grb_editor.deactivate_grb_editor() - elif isinstance(edited_obj, FlatCAMExcellon): + elif isinstance(edited_obj, ExcellonObject): self.exc_editor.deactivate() else: self.inform.emit('[WARNING_NOTCL] %s' % @@ -4238,12 +4231,12 @@ class App(QtCore.QObject): # ## Create object classdict = { - "gerber": FlatCAMGerber, - "excellon": FlatCAMExcellon, - "cncjob": FlatCAMCNCjob, - "geometry": FlatCAMGeometry, - "script": FlatCAMScript, - "document": FlatCAMDocument + "gerber": GerberObject, + "excellon": ExcellonObject, + "cncjob": CNCJobObject, + "geometry": GeometryObject, + "script": ScriptObject, + "document": DocumentObject } App.log.debug("Calling object constructor...") @@ -4251,7 +4244,7 @@ class App(QtCore.QObject): # Object creation/instantiation obj = classdict[kind](name) - obj.units = self.options["units"] # TODO: The constructor should look at defaults. + obj.units = self.options["units"] # IMPORTANT # The key names in defaults and options dictionary's are not random: @@ -4327,7 +4320,7 @@ class App(QtCore.QObject): # update the KeyWords list with the name of the file self.myKeywords.append(obj.options['name']) - FlatCAMApp.App.log.debug("Moving new object back to main thread.") + log.debug("Moving new object back to main thread.") # Move the object to the main thread and let the app know that it is available. obj.moveToThread(self.main_thread) @@ -4508,7 +4501,7 @@ class App(QtCore.QObject): # here it is done the object plotting def worker_task(t_obj): with self.proc_container.new(_("Plotting")): - if isinstance(t_obj, FlatCAMCNCjob): + if isinstance(t_obj, CNCJobObject): t_obj.plot(kind=self.defaults["cncjob_plot_kind"]) else: t_obj.plot() @@ -5672,7 +5665,7 @@ class App(QtCore.QObject): # if at least one True object is in the list then due of the previous check, all list elements are True objects if True in geo_type_set: def initialize(geo_obj, app): - FlatCAMGeometry.merge(self, geo_list=objs, geo_final=geo_obj, multigeo=True) + GeometryObject.merge(self, geo_list=objs, geo_final=geo_obj, multigeo=True) app.inform.emit('[success] %s.' % _("Geometry merging finished")) # rename all the ['name] key in obj.tools[tooluid]['data'] to the obj_name_multi @@ -5682,7 +5675,7 @@ class App(QtCore.QObject): self.new_object("geometry", obj_name_multi, initialize) else: def initialize(geo_obj, app): - FlatCAMGeometry.merge(self, geo_list=objs, geo_final=geo_obj, multigeo=False) + GeometryObject.merge(self, geo_list=objs, geo_final=geo_obj, multigeo=False) app.inform.emit('[success] %s.' % _("Geometry merging finished")) # rename all the ['name] key in obj.tools[tooluid]['data'] to the obj_name_multi @@ -5705,7 +5698,7 @@ class App(QtCore.QObject): objs = self.collection.get_selected() for obj in objs: - if not isinstance(obj, FlatCAMExcellon): + if not isinstance(obj, ExcellonObject): self.inform.emit('[ERROR_NOTCL] %s' % _("Failed. Excellon joining works only on Excellon objects.")) return @@ -5715,7 +5708,7 @@ class App(QtCore.QObject): return 'fail' def initialize(exc_obj, app): - FlatCAMExcellon.merge(self, exc_list=objs, exc_final=exc_obj) + ExcellonObject.merge(self, exc_list=objs, exc_final=exc_obj) app.inform.emit('[success] %s.' % _("Excellon merging finished")) self.new_object("excellon", 'Combo_Excellon', initialize) @@ -5733,7 +5726,7 @@ class App(QtCore.QObject): objs = self.collection.get_selected() for obj in objs: - if not isinstance(obj, FlatCAMGerber): + if not isinstance(obj, GerberObject): self.inform.emit('[ERROR_NOTCL] %s' % _("Failed. Gerber joining works only on Gerber objects.")) return @@ -5743,7 +5736,7 @@ class App(QtCore.QObject): return 'fail' def initialize(grb_obj, app): - FlatCAMGerber.merge(self, grb_list=objs, grb_final=grb_obj) + GerberObject.merge(self, grb_list=objs, grb_final=grb_obj) app.inform.emit('[success] %s.' % _("Gerber merging finished")) self.new_object("gerber", 'Combo_Gerber', initialize) @@ -5767,8 +5760,8 @@ class App(QtCore.QObject): self.inform.emit('[ERROR_NOTCL] %s' % _("Failed. Select a Geometry Object and try again.")) return - if not isinstance(obj, FlatCAMGeometry): - self.inform.emit('[ERROR_NOTCL] %s: %s' % (_("Expected a FlatCAMGeometry, got"), type(obj))) + if not isinstance(obj, GeometryObject): + self.inform.emit('[ERROR_NOTCL] %s: %s' % (_("Expected a GeometryObject, got"), type(obj))) return obj.multigeo = True @@ -5802,9 +5795,9 @@ class App(QtCore.QObject): _("Failed. Select a Geometry Object and try again.")) return - if not isinstance(obj, FlatCAMGeometry): + if not isinstance(obj, GeometryObject): self.inform.emit('[ERROR_NOTCL] %s: %s' % - (_("Expected a FlatCAMGeometry, got"), type(obj))) + (_("Expected a GeometryObject, got"), type(obj))) return obj.multigeo = False @@ -6089,7 +6082,7 @@ class App(QtCore.QObject): current = self.collection.get_active() if current is not None: # the transfer of converted values to the UI form for Geometry is done local in the FlatCAMObj.py - if not isinstance(current, FlatCAMGeometry): + if not isinstance(current, GeometryObject): current.to_form() # replot all objects @@ -6128,9 +6121,10 @@ class App(QtCore.QObject): def on_fullscreen(self, disable=False): self.report_usage("on_fullscreen()") + flags = self.ui.windowFlags() if self.toggle_fscreen is False and disable is False: # self.ui.showFullScreen() - self.ui.setWindowFlags(self.ui.windowFlags() | Qt.FramelessWindowHint) + self.ui.setWindowFlags(flags | Qt.FramelessWindowHint) a = self.ui.geometry() self.x_pos = a.x() self.y_pos = a.y() @@ -6158,7 +6152,7 @@ class App(QtCore.QObject): self.ui.splitter_left.setVisible(False) self.toggle_fscreen = True elif self.toggle_fscreen is True or disable is True: - self.ui.setWindowFlags(self.ui.windowFlags() & ~Qt.FramelessWindowHint) + self.ui.setWindowFlags(flags & ~Qt.FramelessWindowHint) self.ui.setGeometry(self.x_pos, self.y_pos, self.width, self.height) self.ui.showNormal() self.restore_toolbar_view() @@ -6953,7 +6947,7 @@ class App(QtCore.QObject): # work only if the notebook tab on focus is the Selected_Tab and only if the object is Geometry if notebook_widget_name == 'selected_tab': - if str(type(self.collection.get_active())) == "": + if str(type(self.collection.get_active())) == "": self.collection.get_active().on_tool_delete() # work only if the notebook tab on focus is the Tools_Tab @@ -7017,14 +7011,14 @@ class App(QtCore.QObject): self.log.debug("App.on_delete()") for obj_active in self.collection.get_selected(): - # if the deleted object is FlatCAMGerber then make sure to delete the possible mark shapes - if isinstance(obj_active, FlatCAMGerber): + # if the deleted object is GerberObject then make sure to delete the possible mark shapes + if isinstance(obj_active, GerberObject): for el in obj_active.mark_shapes: obj_active.mark_shapes[el].clear(update=True) obj_active.mark_shapes[el].enabled = False # obj_active.mark_shapes[el] = None del el - elif isinstance(obj_active, FlatCAMCNCjob): + elif isinstance(obj_active, CNCJobObject): try: obj_active.text_col.enabled = False del obj_active.text_col @@ -7566,15 +7560,15 @@ class App(QtCore.QObject): obj_name = obj.options["name"] try: - if isinstance(obj, FlatCAMExcellon): + if isinstance(obj, ExcellonObject): self.new_object("excellon", str(obj_name) + "_copy", initialize_excellon) - elif isinstance(obj, FlatCAMGerber): + elif isinstance(obj, GerberObject): self.new_object("gerber", str(obj_name) + "_copy", initialize) - elif isinstance(obj, FlatCAMGeometry): + elif isinstance(obj, GeometryObject): self.new_object("geometry", str(obj_name) + "_copy", initialize) - elif isinstance(obj, FlatCAMScript): + elif isinstance(obj, ScriptObject): self.new_object("script", str(obj_name) + "_copy", initialize_script) - elif isinstance(obj, FlatCAMDocument): + elif isinstance(obj, DocumentObject): self.new_object("document", str(obj_name) + "_copy", initialize_document) except Exception as e: return "Operation failed: %s" % str(e) @@ -7618,11 +7612,11 @@ class App(QtCore.QObject): for obj in self.collection.get_selected(): obj_name = obj.options["name"] try: - if isinstance(obj, FlatCAMExcellon): + if isinstance(obj, ExcellonObject): self.new_object("excellon", str(obj_name) + custom_name, initialize_excellon) - elif isinstance(obj, FlatCAMGerber): + elif isinstance(obj, GerberObject): self.new_object("gerber", str(obj_name) + custom_name, initialize_gerber) - elif isinstance(obj, FlatCAMGeometry): + elif isinstance(obj, GeometryObject): self.new_object("geometry", str(obj_name) + custom_name, initialize_geometry) except Exception as er: return "Operation failed: %s" % str(er) @@ -7672,7 +7666,7 @@ class App(QtCore.QObject): def initialize_excellon(obj_init, app): # objs = self.collection.get_selected() - # FlatCAMGeometry.merge(objs, obj) + # GeometryObject.merge(objs, obj) solid_geo = [] for tool in obj.tools: for geo in obj.tools[tool]['solid_geometry']: @@ -7689,7 +7683,7 @@ class App(QtCore.QObject): obj_name = obj.options["name"] try: - if isinstance(obj, FlatCAMExcellon): + if isinstance(obj, ExcellonObject): self.new_object("geometry", str(obj_name) + "_conv", initialize_excellon) else: self.new_object("geometry", str(obj_name) + "_conv", initialize) @@ -7767,9 +7761,9 @@ class App(QtCore.QObject): obj_name = obj.options["name"] try: - if isinstance(obj, FlatCAMExcellon): + if isinstance(obj, ExcellonObject): self.new_object("gerber", str(obj_name) + "_conv", initialize_excellon) - elif isinstance(obj, FlatCAMGeometry): + elif isinstance(obj, GeometryObject): self.new_object("gerber", str(obj_name) + "_conv", initialize_geometry) else: log.warning("App.convert_any2gerber --> This is no vaild object for conversion.") @@ -7970,7 +7964,7 @@ class App(QtCore.QObject): tool_from_db = deepcopy(tool) obj = self.collection.get_active() - if isinstance(obj, FlatCAMGeometry): + if isinstance(obj, GeometryObject): obj.on_tool_from_db_inserted(tool=tool_from_db) # close the tab and delete it @@ -8312,7 +8306,7 @@ class App(QtCore.QObject): :return: None """ if self.is_legacy is False: - self.plotcanvas.update() # TODO: Need update canvas? + self.plotcanvas.update() else: self.plotcanvas.auto_adjust_axes() @@ -8320,7 +8314,6 @@ class App(QtCore.QObject): self.collection.update_view() # self.inform.emit(_("Plots updated ...")) - # TODO: Rework toolbar 'clear', 'replot' functions def on_toolbar_replot(self): """ Callback for toolbar button. Re-plots all objects. @@ -8372,7 +8365,6 @@ class App(QtCore.QObject): def on_collection_updated(self, obj, state, old_name): """ Create a menu from the object loaded in the collection. - TODO: should use the collection model to do this :param obj: object that was changed (added, deleted, renamed) :param state: what was done with the object. Can be: added, deleted, delete_all, renamed @@ -8572,8 +8564,11 @@ class App(QtCore.QObject): grid_toggle.triggered.connect(lambda: self.ui.grid_snap_btn.trigger()) def set_grid(self): - self.ui.grid_gap_x_entry.setText(self.sender().text()) - self.ui.grid_gap_y_entry.setText(self.sender().text()) + menu_action = self.sender() + assert isinstance(menu_action, QtWidgets.QAction), "Expected QAction got %s" % type(menu_action) + + self.ui.grid_gap_x_entry.setText(menu_action.text()) + self.ui.grid_gap_y_entry.setText(menu_action.text()) def on_grid_add(self): # ## Current application units in lower Case @@ -9003,8 +8998,8 @@ class App(QtCore.QObject): curr_x, curr_y = self.pos for obj in self.all_objects_list: - # FlatCAMScript and FlatCAMDocument objects can't be selected - if isinstance(obj, FlatCAMScript) or isinstance(obj, FlatCAMDocument): + # ScriptObject and DocumentObject objects can't be selected + if isinstance(obj, ScriptObject) or isinstance(obj, DocumentObject): continue if key == 'multisel' and obj.options['name'] in self.objects_under_the_click_list: @@ -9324,7 +9319,8 @@ class App(QtCore.QObject): """ Returns the application to its startup state. This method is thread-safe. - :return: None + :param cli: Boolean. If True this method was run from command line + :return: None """ self.report_usage("on_file_new") @@ -9344,7 +9340,7 @@ class App(QtCore.QObject): for obj in self.collection.get_list(): # delete shapes left drawn from mark shape_collections, if any - if isinstance(obj, FlatCAMGerber): + if isinstance(obj, GerberObject): try: for el in obj.mark_shapes: obj.mark_shapes[el].clear(update=True) @@ -9354,7 +9350,7 @@ class App(QtCore.QObject): pass # also delete annotation shapes, if any - elif isinstance(obj, FlatCAMCNCjob): + elif isinstance(obj, CNCJobObject): try: obj.text_col.enabled = False del obj.text_col @@ -9417,17 +9413,17 @@ class App(QtCore.QObject): """ obj = self.collection.get_active() - if type(obj) == FlatCAMGeometry: + if type(obj) == GeometryObject: self.on_file_exportdxf() - elif type(obj) == FlatCAMExcellon: + elif type(obj) == ExcellonObject: self.on_file_saveexcellon() - elif type(obj) == FlatCAMCNCjob: + elif type(obj) == CNCJobObject: obj.on_exportgcode_button_click() - elif type(obj) == FlatCAMGerber: + elif type(obj) == GerberObject: self.on_file_savegerber() - elif type(obj) == FlatCAMScript: + elif type(obj) == ScriptObject: self.on_file_savescript() - elif type(obj) == FlatCAMDocument: + elif type(obj) == DocumentObject: self.on_file_savedocument() def obj_move(self): @@ -9440,7 +9436,7 @@ class App(QtCore.QObject): self.report_usage("obj_move()") self.move_tool.run(toggle=False) - def on_fileopengerber(self, signal: bool = None, name=None): + def on_fileopengerber(self, signal, name=None): """ File menu callback for opening a Gerber. @@ -9487,7 +9483,7 @@ class App(QtCore.QObject): if filename != '': self.worker_task.emit({'fcn': self.open_gerber, 'params': [filename]}) - def on_fileopenexcellon(self, signal: bool = None, name=None): + def on_fileopenexcellon(self, signal, name=None): """ File menu callback for opening an Excellon file. @@ -9524,7 +9520,7 @@ class App(QtCore.QObject): if filename != '': self.worker_task.emit({'fcn': self.open_excellon, 'params': [filename]}) - def on_fileopengcode(self, signal: bool = None, name=None): + def on_fileopengcode(self, signal, name=None): """ File menu call back for opening gcode. @@ -9566,7 +9562,7 @@ class App(QtCore.QObject): if filename != '': self.worker_task.emit({'fcn': self.open_gcode, 'params': [filename, None, True]}) - def on_file_openproject(self, signal: bool = None): + def on_file_openproject(self, signal): """ File menu callback for opening a project. @@ -9597,12 +9593,13 @@ class App(QtCore.QObject): # thread safe. The new_project() self.open_project(filename) - def on_fileopenhpgl2(self, signal: bool = None, name=None): + def on_fileopenhpgl2(self, signal, name=None): """ File menu callback for opening a HPGL2. - :param signal: required because clicking the entry will generate a checked signal which needs a container - :return: None + :param signal: required because clicking the entry will generate a checked signal which needs a container + :param name: + :return: None """ self.report_usage("on_fileopenhpgl2") @@ -9635,12 +9632,12 @@ class App(QtCore.QObject): if filename != '': self.worker_task.emit({'fcn': self.open_hpgl2, 'params': [filename]}) - def on_file_openconfig(self, signal: bool = None): + def on_file_openconfig(self, signal): """ File menu callback for opening a config file. - :param signal: required because clicking the entry will generate a checked signal which needs a container - :return: None + :param signal: required because clicking the entry will generate a checked signal which needs a container + :return: None """ self.report_usage("on_file_openconfig") @@ -9679,10 +9676,10 @@ class App(QtCore.QObject): return # Check for more compatible types and add as required - if (not isinstance(obj, FlatCAMGeometry) - and not isinstance(obj, FlatCAMGerber) - and not isinstance(obj, FlatCAMCNCjob) - and not isinstance(obj, FlatCAMExcellon)): + if (not isinstance(obj, GeometryObject) + and not isinstance(obj, GerberObject) + and not isinstance(obj, CNCJobObject) + and not isinstance(obj, ExcellonObject)): msg = '[ERROR_NOTCL] %s' % \ _("Only Geometry, Gerber and CNCJob objects can be used.") msgbox = QtWidgets.QMessageBox() @@ -9726,8 +9723,7 @@ class App(QtCore.QObject): image = _screenshot() data = np.asarray(image) if not data.ndim == 3 and data.shape[-1] in (3, 4): - self.inform.emit('[[WARNING_NOTCL]] %s' % - _('Data must be a 3D array with last dimension 3 or 4')) + self.inform.emit('[[WARNING_NOTCL]] %s' % _('Data must be a 3D array with last dimension 3 or 4')) return filter_ = "PNG File (*.png);;All Files (*.*)" @@ -9769,9 +9765,8 @@ class App(QtCore.QObject): return # Check for more compatible types and add as required - if not isinstance(obj, FlatCAMGerber): - self.inform.emit('[ERROR_NOTCL] %s' % - _("Failed. Only Gerber objects can be saved as Gerber files...")) + if not isinstance(obj, GerberObject): + self.inform.emit('[ERROR_NOTCL] %s' % _("Failed. Only Gerber objects can be saved as Gerber files...")) return name = self.collection.get_active().options["name"] @@ -9811,7 +9806,7 @@ class App(QtCore.QObject): return # Check for more compatible types and add as required - if not isinstance(obj, FlatCAMScript): + if not isinstance(obj, ScriptObject): self.inform.emit('[ERROR_NOTCL] %s' % _("Failed. Only Script objects can be saved as TCL Script files...")) return @@ -9852,7 +9847,7 @@ class App(QtCore.QObject): return # Check for more compatible types and add as required - if not isinstance(obj, FlatCAMScript): + if not isinstance(obj, ScriptObject): self.inform.emit('[ERROR_NOTCL] %s' % _("Failed. Only Document objects can be saved as Document files...")) return @@ -9893,7 +9888,7 @@ class App(QtCore.QObject): return # Check for more compatible types and add as required - if not isinstance(obj, FlatCAMExcellon): + if not isinstance(obj, ExcellonObject): self.inform.emit('[ERROR_NOTCL] %s' % _("Failed. Only Excellon objects can be saved as Excellon files...")) return @@ -9934,7 +9929,7 @@ class App(QtCore.QObject): return # Check for more compatible types and add as required - if not isinstance(obj, FlatCAMExcellon): + if not isinstance(obj, ExcellonObject): self.inform.emit('[ERROR_NOTCL] %s' % _("Failed. Only Excellon objects can be saved as Excellon files...")) return @@ -9978,7 +9973,7 @@ class App(QtCore.QObject): return # Check for more compatible types and add as required - if not isinstance(obj, FlatCAMGerber): + if not isinstance(obj, GerberObject): self.inform.emit('[ERROR_NOTCL] %s' % _("Failed. Only Gerber objects can be saved as Gerber files...")) return @@ -10028,7 +10023,7 @@ class App(QtCore.QObject): return # Check for more compatible types and add as required - if not isinstance(obj, FlatCAMGeometry): + if not isinstance(obj, GeometryObject): msg = '[ERROR_NOTCL] %s' % _("Only Geometry objects can be used.") msgbox = QtWidgets.QMessageBox() msgbox.setInformativeText(msg) @@ -10377,7 +10372,7 @@ class App(QtCore.QObject): self.splash.showMessage('%s: %ssec\n%s' % (_("Canvas initialization started.\n" "Canvas initialization finished in"), '%.2f' % self.used_time, - _("Executing FlatCAMScript file.") + _("Executing ScriptObject file.") ), alignment=Qt.AlignBottom | Qt.AlignLeft, color=QtGui.QColor("gray")) @@ -10392,7 +10387,6 @@ class App(QtCore.QObject): # The Qt methods above will return a QString which can cause problems later. # So far json.dump() will fail to serialize it. - # TODO: Improve the serialization methods and remove this fix. filename = str(filename) if filename == "": @@ -10853,12 +10847,11 @@ class App(QtCore.QObject): try: obj = self.collection.get_by_name(str(obj_name)) except Exception: - # TODO: The return behavior has not been established... should raise exception? return "Could not retrieve object: %s" % obj_name else: obj = local_use - if not isinstance(obj, FlatCAMExcellon): + if not isinstance(obj, ExcellonObject): self.inform.emit('[ERROR_NOTCL] %s' % _("Failed. Only Excellon objects can be saved as Excellon files...")) return @@ -11003,7 +10996,6 @@ class App(QtCore.QObject): try: obj = self.collection.get_by_name(str(obj_name)) except Exception: - # TODO: The return behavior has not been established... should raise exception? return "Could not retrieve object: %s" % obj_name else: obj = local_use @@ -11265,8 +11257,8 @@ class App(QtCore.QObject): # How the object should be initialized def obj_init(gerber_obj, app_obj): - assert isinstance(gerber_obj, FlatCAMGerber), \ - "Expected to initialize a FlatCAMGerber but got %s" % type(gerber_obj) + assert isinstance(gerber_obj, GerberObject), \ + "Expected to initialize a GerberObject but got %s" % type(gerber_obj) # Opening the file happens here try: @@ -11451,8 +11443,8 @@ class App(QtCore.QObject): # How the object should be initialized def obj_init(geo_obj, app_obj): - assert isinstance(geo_obj, FlatCAMGeometry), \ - "Expected to initialize a FlatCAMGeometry but got %s" % type(geo_obj) + assert isinstance(geo_obj, GeometryObject), \ + "Expected to initialize a GeometryObject but got %s" % type(geo_obj) # Opening the file happens here obj = HPGL2(self) @@ -11806,7 +11798,6 @@ class App(QtCore.QObject): :return: """ - # TODO: Move this to constructor icons = { "gerber": self.resource_location + "/flatcam_icon16.png", "excellon": self.resource_location + "/drill16.png", @@ -11990,32 +11981,38 @@ class App(QtCore.QObject): tsize = fsize + int(fsize / 2) # selected_text = (_(''' - #

Selected Tab - Choose an Item from Project Tab

+ #

Selected Tab - Choose an Item from Project Tab + #

# #

Details:
# The normal flow when working in FlatCAM is the following:

# #
    - #
  1. Loat/Import a Gerber, Excellon, Gcode, DXF, Raster Image or SVG file into + #
  2. Loat/Import a Gerber, Excellon, Gcode, DXF, Raster Image or SVG + # file into # FlatCAM using either the menu's, toolbars, key shortcuts or # even dragging and dropping the files on the GUI.
    #
    - # You can also load a FlatCAM project by double clicking on the project file, drag & drop of the + # You can also load a FlatCAM project by double clicking on the project file, drag & + # drop of the # file into the FLATCAM GUI or through the menu/toolbar links offered within the app.

    #  
  3. - #
  4. Once an object is available in the Project Tab, by selecting it and then + #
  5. Once an object is available in the Project Tab, by selecting it + # and then # focusing on SELECTED TAB (more simpler is to double click the object name in the # Project Tab), SELECTED TAB will be updated with the object properties according to # it's kind: Gerber, Excellon, Geometry or CNCJob object.
    #
    - # If the selection of the object is done on the canvas by single click instead, and the SELECTED TAB + # If the selection of the object is done on the canvas by single click instead, and the + # SELECTED TAB # is in focus, again the object properties will be displayed into the Selected Tab. Alternatively, # double clicking on the object on the canvas will bring the SELECTED TAB and populate # it even if it was out of focus.
    #
    # You can change the parameters in this screen and the flow direction is like this:
    #
    - # Gerber/Excellon Object -> Change Param -> Generate Geometry -> Geometry Object + # Gerber/Excellon Object -> Change Param -> Generate Geometry -> + # Geometry Object # -> Add tools (change param in Selected Tab) -> Generate CNCJob -> CNCJob Object # -> Verify GCode (through Edit CNC Code) and/or append/prepend to GCode (again, done in # SELECTED TAB) -> Save GCode
  6. @@ -12128,7 +12125,7 @@ class App(QtCore.QObject): # no_stats dict; just so it won't break things on website no_ststs_dict = {} no_ststs_dict["global_ststs"] = {} - full_url = App.version_url + "?s=" + str(self.defaults['global_serial']) + "&v=" + str(self.version) + \ + full_url = App.version_url + "?s=" + str(self.defaults['global_serial']) + "&v=" + str(self.version) +\ "&os=" + str(self.os) + "&" + urllib.parse.urlencode(no_ststs_dict["global_ststs"]) App.log.debug("Checking for updates @ %s" % full_url) @@ -12337,7 +12334,7 @@ class App(QtCore.QObject): with self.proc_container.new(_("Enabling plots ...")): for plot_obj in objs: # obj.options['plot'] = True - if isinstance(plot_obj, FlatCAMCNCjob): + if isinstance(plot_obj, CNCJobObject): plot_obj.plot(visible=True, kind=self.defaults["cncjob_plot_kind"]) else: plot_obj.plot(visible=True) @@ -12389,7 +12386,7 @@ class App(QtCore.QObject): with self.proc_container.new(_("Disabling plots ...")): for plot_obj in objs: # obj.options['plot'] = True - if isinstance(plot_obj, FlatCAMCNCjob): + if isinstance(plot_obj, CNCJobObject): plot_obj.plot(visible=False, kind=self.defaults["cncjob_plot_kind"]) else: plot_obj.plot(visible=False) @@ -12441,7 +12438,7 @@ class App(QtCore.QObject): new_color = self.defaults['gerber_plot_fill'] clicked_action = self.sender() - assert isinstance(clicked_action, QAction), "Expected a QAction, got %s" % isinstance(clicked_action, QAction) + assert isinstance(clicked_action, QAction), "Expected a QAction, got %s" % type(clicked_action) act_name = clicked_action.text() sel_obj_list = self.collection.get_selected() @@ -12717,8 +12714,12 @@ class App(QtCore.QObject): :return: """ log.debug("App.save_project_auto_update() --> updated the interval timeout.") - if self.autosave_timer.isActive(): - self.autosave_timer.stop() + try: + if self.autosave_timer.isActive(): + self.autosave_timer.stop() + except Exception: + pass + if self.defaults['global_autosave'] is True: self.autosave_timer.setInterval(int(self.defaults['global_autosave_timeout'])) self.autosave_timer.start() @@ -12749,211 +12750,6 @@ class App(QtCore.QObject): self.options.update(self.defaults) # self.options_write_form() - def init_tcl(self): - """ - Initialize the TCL Shell. A dock widget that holds the GUI interface to the FlatCAM command line. - :return: None - """ - if hasattr(self, 'tcl') and self.tcl is not None: - # self.tcl = None - # TODO we need to clean non default variables and procedures here - # new object cannot be used here as it will not remember values created for next passes, - # because tcl was executed in old instance of TCL - pass - else: - self.tcl = tk.Tcl() - self.setup_shell() - self.log.debug("TCL Shell has been initialized.") - - def setup_shell(self): - """ - Creates shell functions. Runs once at startup. - - :return: None - """ - - self.log.debug("setup_shell()") - - # def shelp(p=None): - # pass - - # --- Migrated to new architecture --- - # def options(name): - # ops = self.collection.get_by_name(str(name)).options - # return '\n'.join(["%s: %s" % (o, ops[o]) for o in ops]) - - # def h(*args): - # """ - # Pre-processes arguments to detect '-keyword value' pairs into dictionary - # and standalone parameters into list. - # """ - # - # kwa = {} - # a = [] - # n = len(args) - # name = None - # for i in range(n): - # match = re.search(r'^-([a-zA-Z].*)', args[i]) - # if match: - # assert name is None - # name = match.group(1) - # continue - # - # if name is None: - # a.append(args[i]) - # else: - # kwa[name] = args[i] - # name = None - # - # return a, kwa - - # @contextmanager - # def wait_signal(signal, timeout=10000): - # """ - # Block loop until signal emitted, timeout (ms) elapses - # or unhandled exception happens in a thread. - # - # :param timeout: time after which the loop is exited - # :param signal: Signal to wait for. - # """ - # loop = QtCore.QEventLoop() - # - # # Normal termination - # signal.connect(loop.quit) - # - # # Termination by exception in thread - # self.thread_exception.connect(loop.quit) - # - # status = {'timed_out': False} - # - # def report_quit(): - # status['timed_out'] = True - # loop.quit() - # - # yield - # - # # Temporarily change how exceptions are managed. - # oeh = sys.excepthook - # ex = [] - # - # def except_hook(type_, value, traceback_): - # ex.append(value) - # oeh(type_, value, traceback_) - # - # sys.excepthook = except_hook - # - # # Terminate on timeout - # if timeout is not None: - # QtCore.QTimer.singleShot(timeout, report_quit) - # - # # # ## Block ## ## - # loop.exec_() - # - # # Restore exception management - # sys.excepthook = oeh - # if ex: - # self.raise_tcl_error(str(ex[0])) - # - # if status['timed_out']: - # raise Exception('Timed out!') - # - # def make_docs(): - # output = '' - # import collections - # od = collections.OrderedDict(sorted(self.tcl_commands_storage.items())) - # for cmd_, val in od.items(): - # output += cmd_ + ' \n' + ''.join(['~'] * len(cmd_)) + '\n' - # - # t = val['help'] - # usage_i = t.find('>') - # if usage_i < 0: - # expl = t - # output += expl + '\n\n' - # continue - # - # expl = t[:usage_i - 1] - # output += expl + '\n\n' - # - # end_usage_i = t[usage_i:].find('\n') - # - # if end_usage_i < 0: - # end_usage_i = len(t[usage_i:]) - # output += ' ' + t[usage_i:] + '\n No parameters.\n' - # else: - # extras = t[usage_i + end_usage_i + 1:] - # parts = [s.strip() for s in extras.split('\n')] - # - # output += ' ' + t[usage_i:usage_i + end_usage_i] + '\n' - # for p in parts: - # output += ' ' + p + '\n\n' - # - # return output - - ''' - Howto implement TCL shell commands: - - All parameters passed to command should be possible to set as None and test it afterwards. - This is because we need to see error caused in tcl, - if None value as default parameter is not allowed TCL will return empty error. - Use: - def mycommand(name=None,...): - - Test it like this: - if name is None: - - self.raise_tcl_error('Argument name is missing.') - - When error ocurre, always use raise_tcl_error, never return "sometext" on error, - otherwise we will miss it and processing will silently continue. - Method raise_tcl_error pass error into TCL interpreter, then raise python exception, - which is catched in exec_command and displayed in TCL shell console with red background. - Error in console is displayed with TCL trace. - - This behavior works only within main thread, - errors with promissed tasks can be catched and detected only with log. - TODO: this problem have to be addressed somehow, maybe rewrite promissing to be blocking somehow for - TCL shell. - - Kamil's comment: I will rewrite existing TCL commands from time to time to follow this rules. - - ''' - - self.tcl_commands_storage = {} - # commands = { - # 'help': { - # 'fcn': shelp, - # 'help': _("Shows list of commands."), - # 'description': '' - # }, - # } - - # Import/overwrite tcl commands as objects of TclCommand descendants - # This modifies the variable 'commands'. - tclCommands.register_all_commands(self, self.tcl_commands_storage) - - # Add commands to the tcl interpreter - for cmd in self.tcl_commands_storage: - self.tcl.createcommand(cmd, self.tcl_commands_storage[cmd]['fcn']) - - # Make the tcl puts function return instead of print to stdout - self.tcl.eval(''' - rename puts original_puts - proc puts {args} { - if {[llength $args] == 1} { - return "[lindex $args 0]" - } else { - eval original_puts $args - } - } - ''') - - # TODO: This shouldn't be here. - class TclErrorException(Exception): - """ - this exception is defined here, to be able catch it if we successfully handle all errors from shell command - """ - pass - def toggle_shell(self): """ Toggle shell: if is visible close it, if it is closed then open it @@ -13025,62 +12821,6 @@ class App(QtCore.QObject): except AttributeError: log.debug("shell_message() is called before Shell Class is instantiated. The message is: %s", str(msg)) - def raise_tcl_unknown_error(self, unknownException): - """ - Raise exception if is different type than TclErrorException - this is here mainly to show unknown errors inside TCL shell console. - - :param unknownException: - :return: - """ - - if not isinstance(unknownException, self.TclErrorException): - self.raise_tcl_error("Unknown error: %s" % str(unknownException)) - else: - raise unknownException - - def display_tcl_error(self, error, error_info=None): - """ - Escape bracket [ with '\' otherwise there is error - "ERROR: missing close-bracket" instead of real error - - :param error: it may be text or exception - :param error_info: Some informations about the error - :return: None - """ - - if isinstance(error, Exception): - exc_type, exc_value, exc_traceback = error_info - if not isinstance(error, self.TclErrorException): - show_trace = 1 - else: - show_trace = int(self.defaults['global_verbose_error_level']) - - if show_trace > 0: - trc = traceback.format_list(traceback.extract_tb(exc_traceback)) - trc_formated = [] - for a in reversed(trc): - trc_formated.append(a.replace(" ", " > ").replace("\n", "")) - text = "%s\nPython traceback: %s\n%s" % (exc_value, exc_type, "\n".join(trc_formated)) - else: - text = "%s" % error - else: - text = error - - text = text.replace('[', '\\[').replace('"', '\\"') - self.tcl.eval('return -code error "%s"' % text) - - def raise_tcl_error(self, text): - """ - This method pass exception from python into TCL as error, so we get stacktrace and reason - - :param text: text of error - :return: raise exception - """ - - self.display_tcl_error(text) - raise self.TclErrorException(text) - class ArgsThread(QtCore.QObject): open_signal = pyqtSignal(list) @@ -13129,13 +12869,4 @@ class ArgsThread(QtCore.QObject): def run(self): self.my_loop(self.address) - -class GracefulException(Exception): - # Graceful Exception raised when the user is requesting to cancel the current threaded task - def __init__(self): - super().__init__() - - def __str__(self): - return '\n\n%s' % _("The user requested a graceful exit of the current task.") - # end of file diff --git a/FlatCAMBookmark.py b/FlatCAMBookmark.py new file mode 100644 index 00000000..ab372baa --- /dev/null +++ b/FlatCAMBookmark.py @@ -0,0 +1,381 @@ +from PyQt5 import QtGui, QtCore, QtWidgets +from flatcamGUI.GUIElements import FCTable, FCEntry, FCButton, FCFileSaveDialog + +import sys +import webbrowser + +from copy import deepcopy +from datetime import datetime +import gettext +import FlatCAMTranslation as fcTranslate +import builtins + +fcTranslate.apply_language('strings') +if '_' not in builtins.__dict__: + _ = gettext.gettext + + +class BookmarkManager(QtWidgets.QWidget): + + mark_rows = QtCore.pyqtSignal() + + def __init__(self, app, storage, parent=None): + super(BookmarkManager, self).__init__(parent) + + self.app = app + + assert isinstance(storage, dict), "Storage argument is not a dictionary" + + self.bm_dict = deepcopy(storage) + + # Icon and title + # self.setWindowIcon(parent.app_icon) + # self.setWindowTitle(_("Bookmark Manager")) + # self.resize(600, 400) + + # title = QtWidgets.QLabel( + # "FlatCAM
    " + # ) + # title.setOpenExternalLinks(True) + + # layouts + layout = QtWidgets.QVBoxLayout() + self.setLayout(layout) + + table_hlay = QtWidgets.QHBoxLayout() + layout.addLayout(table_hlay) + + self.table_widget = FCTable(drag_drop=True, protected_rows=[0, 1]) + self.table_widget.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows) + table_hlay.addWidget(self.table_widget) + + self.table_widget.setColumnCount(3) + self.table_widget.setColumnWidth(0, 20) + self.table_widget.setHorizontalHeaderLabels( + [ + '#', + _('Title'), + _('Web Link') + ] + ) + self.table_widget.horizontalHeaderItem(0).setToolTip( + _("Index.\n" + "The rows in gray color will populate the Bookmarks menu.\n" + "The number of gray colored rows is set in Preferences.")) + self.table_widget.horizontalHeaderItem(1).setToolTip( + _("Description of the link that is set as an menu action.\n" + "Try to keep it short because it is installed as a menu item.")) + self.table_widget.horizontalHeaderItem(2).setToolTip( + _("Web Link. E.g: https://your_website.org ")) + + # pal = QtGui.QPalette() + # pal.setColor(QtGui.QPalette.Background, Qt.white) + + # New Bookmark + new_vlay = QtWidgets.QVBoxLayout() + layout.addLayout(new_vlay) + + new_title_lbl = QtWidgets.QLabel('%s' % _("New Bookmark")) + new_vlay.addWidget(new_title_lbl) + + form0 = QtWidgets.QFormLayout() + new_vlay.addLayout(form0) + + title_lbl = QtWidgets.QLabel('%s:' % _("Title")) + self.title_entry = FCEntry() + form0.addRow(title_lbl, self.title_entry) + + link_lbl = QtWidgets.QLabel('%s:' % _("Web Link")) + self.link_entry = FCEntry() + self.link_entry.set_value('http://') + form0.addRow(link_lbl, self.link_entry) + + # Buttons Layout + button_hlay = QtWidgets.QHBoxLayout() + layout.addLayout(button_hlay) + + add_entry_btn = FCButton(_("Add Entry")) + remove_entry_btn = FCButton(_("Remove Entry")) + export_list_btn = FCButton(_("Export List")) + import_list_btn = FCButton(_("Import List")) + # closebtn = QtWidgets.QPushButton(_("Close")) + + # button_hlay.addStretch() + button_hlay.addWidget(add_entry_btn) + button_hlay.addWidget(remove_entry_btn) + + button_hlay.addWidget(export_list_btn) + button_hlay.addWidget(import_list_btn) + # button_hlay.addWidget(closebtn) + # ############################################################################## + # ######################## SIGNALS ############################################# + # ############################################################################## + + add_entry_btn.clicked.connect(self.on_add_entry) + remove_entry_btn.clicked.connect(self.on_remove_entry) + export_list_btn.clicked.connect(self.on_export_bookmarks) + import_list_btn.clicked.connect(self.on_import_bookmarks) + self.title_entry.returnPressed.connect(self.on_add_entry) + self.link_entry.returnPressed.connect(self.on_add_entry) + # closebtn.clicked.connect(self.accept) + + self.table_widget.drag_drop_sig.connect(self.mark_table_rows_for_actions) + self.build_bm_ui() + + def build_bm_ui(self): + + self.table_widget.setRowCount(len(self.bm_dict)) + + nr_crt = 0 + sorted_bookmarks = sorted(list(self.bm_dict.items()), key=lambda x: int(x[0])) + for entry, bookmark in sorted_bookmarks: + row = nr_crt + nr_crt += 1 + + title = bookmark[0] + weblink = bookmark[1] + + id_item = QtWidgets.QTableWidgetItem('%d' % int(nr_crt)) + # id.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) + self.table_widget.setItem(row, 0, id_item) # Tool name/id + + title_item = QtWidgets.QTableWidgetItem(title) + self.table_widget.setItem(row, 1, title_item) + + weblink_txt = QtWidgets.QTextBrowser() + weblink_txt.setOpenExternalLinks(True) + weblink_txt.setFrameStyle(QtWidgets.QFrame.NoFrame) + weblink_txt.document().setDefaultStyleSheet("a{ text-decoration: none; }") + + weblink_txt.setHtml('%s' % (weblink, weblink)) + + self.table_widget.setCellWidget(row, 2, weblink_txt) + + vertical_header = self.table_widget.verticalHeader() + vertical_header.hide() + + horizontal_header = self.table_widget.horizontalHeader() + horizontal_header.setMinimumSectionSize(10) + horizontal_header.setDefaultSectionSize(70) + horizontal_header.setSectionResizeMode(0, QtWidgets.QHeaderView.Fixed) + horizontal_header.resizeSection(0, 20) + horizontal_header.setSectionResizeMode(1, QtWidgets.QHeaderView.ResizeToContents) + horizontal_header.setSectionResizeMode(2, QtWidgets.QHeaderView.Stretch) + + self.mark_table_rows_for_actions() + + self.app.defaults["global_bookmarks"].clear() + for key, val in self.bm_dict.items(): + self.app.defaults["global_bookmarks"][key] = deepcopy(val) + + def on_add_entry(self, **kwargs): + """ + Add a entry in the Bookmark Table and in the menu actions + :return: None + """ + if 'title' in kwargs: + title = kwargs['title'] + else: + title = self.title_entry.get_value() + if title == '': + self.app.inform.emit('[ERROR_NOTCL] %s' % _("Title entry is empty.")) + return 'fail' + + if 'link' in kwargs: + link = kwargs['link'] + else: + link = self.link_entry.get_value() + + if link == 'http://': + self.app.inform.emit('[ERROR_NOTCL] %s' % _("Web link entry is empty.")) + return 'fail' + + # if 'http' not in link or 'https' not in link: + # link = 'http://' + link + + for bookmark in self.bm_dict.values(): + if title == bookmark[0] or link == bookmark[1]: + self.app.inform.emit('[ERROR_NOTCL] %s' % _("Either the Title or the Weblink already in the table.")) + return 'fail' + + # for some reason if the last char in the weblink is a slash it does not make the link clickable + # so I remove it + if link[-1] == '/': + link = link[:-1] + # add the new entry to storage + new_entry = len(self.bm_dict) + 1 + self.bm_dict[str(new_entry)] = [title, link] + + # add the link to the menu but only if it is within the set limit + bm_limit = int(self.app.defaults["global_bookmarks_limit"]) + if len(self.bm_dict) < bm_limit: + act = QtWidgets.QAction(parent=self.app.ui.menuhelp_bookmarks) + act.setText(title) + act.setIcon(QtGui.QIcon(self.app.resource_location + '/link16.png')) + act.triggered.connect(lambda: webbrowser.open(link)) + self.app.ui.menuhelp_bookmarks.insertAction(self.app.ui.menuhelp_bookmarks_manager, act) + + self.app.inform.emit('[success] %s' % _("Bookmark added.")) + + # add the new entry to the bookmark manager table + self.build_bm_ui() + + def on_remove_entry(self): + """ + Remove an Entry in the Bookmark table and from the menu actions + :return: + """ + index_list = [] + for model_index in self.table_widget.selectionModel().selectedRows(): + index = QtCore.QPersistentModelIndex(model_index) + index_list.append(index) + title_to_remove = self.table_widget.item(model_index.row(), 1).text() + + if title_to_remove == 'FlatCAM' or title_to_remove == 'Backup Site': + self.app.inform.emit('[WARNING_NOTCL] %s.' % _("This bookmark can not be removed")) + self.build_bm_ui() + return + else: + for k, bookmark in list(self.bm_dict.items()): + if title_to_remove == bookmark[0]: + # remove from the storage + self.bm_dict.pop(k, None) + + for act in self.app.ui.menuhelp_bookmarks.actions(): + if act.text() == title_to_remove: + # disconnect the signal + try: + act.triggered.disconnect() + except TypeError: + pass + # remove the action from the menu + self.app.ui.menuhelp_bookmarks.removeAction(act) + + # house keeping: it pays to have keys increased by one + new_key = 0 + new_dict = {} + for k, v in self.bm_dict.items(): + # we start with key 1 so we can use the len(self.bm_dict) + # when adding bookmarks (keys in bm_dict) + new_key += 1 + new_dict[str(new_key)] = v + + self.bm_dict = deepcopy(new_dict) + new_dict.clear() + + self.app.inform.emit('[success] %s' % _("Bookmark removed.")) + + # for index in index_list: + # self.table_widget.model().removeRow(index.row()) + self.build_bm_ui() + + def on_export_bookmarks(self): + self.app.report_usage("on_export_bookmarks") + self.app.log.debug("on_export_bookmarks()") + + date = str(datetime.today()).rpartition('.')[0] + date = ''.join(c for c in date if c not in ':-') + date = date.replace(' ', '_') + + filter__ = "Text File (*.TXT);;All Files (*.*)" + filename, _f = FCFileSaveDialog.get_saved_filename( caption=_("Export FlatCAM Bookmarks"), + directory='{l_save}/FlatCAM_{n}_{date}'.format( + l_save=str(self.app.get_last_save_folder()), + n=_("Bookmarks"), + date=date), + filter=filter__) + + filename = str(filename) + + if filename == "": + self.app.inform.emit('[WARNING_NOTCL] %s' % _("Cancelled.")) + return + else: + try: + f = open(filename, 'w') + f.close() + except PermissionError: + self.app.inform.emit('[WARNING] %s' % + _("Permission denied, saving not possible.\n" + "Most likely another app is holding the file open and not accessible.")) + return + except IOError: + self.app.log.debug('Creating a new bookmarks file ...') + f = open(filename, 'w') + f.close() + except Exception: + e = sys.exc_info()[0] + self.app.log.error("Could not load defaults file.") + self.app.log.error(str(e)) + self.app.inform.emit('[ERROR_NOTCL] %s' % _("Could not load bookmarks file.")) + return + + # Save Bookmarks to a file + try: + with open(filename, "w") as f: + for title, link in self.bm_dict.items(): + line2write = str(title) + ':' + str(link) + '\n' + f.write(line2write) + except Exception: + self.app.inform.emit('[ERROR_NOTCL] %s' % _("Failed to write bookmarks to file.")) + return + self.app.inform.emit('[success] %s: %s' % (_("Exported bookmarks to"), filename)) + + def on_import_bookmarks(self): + self.app.log.debug("on_import_bookmarks()") + + filter_ = "Text File (*.txt);;All Files (*.*)" + filename, _f = QtWidgets.QFileDialog.getOpenFileName(caption=_("Import FlatCAM Bookmarks"), filter=filter_) + + filename = str(filename) + + if filename == "": + self.app.inform.emit('[WARNING_NOTCL] %s' % _("Cancelled.")) + else: + try: + with open(filename) as f: + bookmarks = f.readlines() + except IOError: + self.app.log.error("Could not load bookmarks file.") + self.app.inform.emit('[ERROR_NOTCL] %s' % _("Could not load bookmarks file.")) + return + + for line in bookmarks: + proc_line = line.replace(' ', '').partition(':') + self.on_add_entry(title=proc_line[0], link=proc_line[2]) + + self.app.inform.emit('[success] %s: %s' % (_("Imported Bookmarks from"), filename)) + + def mark_table_rows_for_actions(self): + for row in range(self.table_widget.rowCount()): + item_to_paint = self.table_widget.item(row, 0) + if row < self.app.defaults["global_bookmarks_limit"]: + item_to_paint.setBackground(QtGui.QColor('gray')) + # item_to_paint.setForeground(QtGui.QColor('black')) + else: + item_to_paint.setBackground(QtGui.QColor('white')) + # item_to_paint.setForeground(QtGui.QColor('black')) + + def rebuild_actions(self): + # rebuild the storage to reflect the order of the lines + self.bm_dict.clear() + for row in range(self.table_widget.rowCount()): + title = self.table_widget.item(row, 1).text() + wlink = self.table_widget.cellWidget(row, 2).toPlainText() + + entry = int(row) + 1 + self.bm_dict.update( + { + str(entry): [title, wlink] + } + ) + + self.app.install_bookmarks(book_dict=self.bm_dict) + + # def accept(self): + # self.rebuild_actions() + # super().accept() + + def closeEvent(self, QCloseEvent): + self.rebuild_actions() + super().closeEvent(QCloseEvent) \ No newline at end of file diff --git a/FlatCAMCommon.py b/FlatCAMCommon.py index cabf0e47..bf10e4c2 100644 --- a/FlatCAMCommon.py +++ b/FlatCAMCommon.py @@ -11,17 +11,6 @@ # Date: 11/4/2019 # # ########################################################## -from PyQt5 import QtGui, QtCore, QtWidgets -from flatcamGUI.GUIElements import FCTable, FCEntry, FCButton, FCDoubleSpinner, FCComboBox, FCCheckBox, FCSpinner, \ - FCTree, RadioSet, FCFileSaveDialog -from camlib import to_dict - -import sys -import webbrowser -import json - -from copy import deepcopy -from datetime import datetime import gettext import FlatCAMTranslation as fcTranslate import builtins @@ -31,6 +20,15 @@ if '_' not in builtins.__dict__: _ = gettext.gettext +class GracefulException(Exception): + # Graceful Exception raised when the user is requesting to cancel the current threaded task + def __init__(self): + super().__init__() + + def __str__(self): + return '\n\n%s' % _("The user requested a graceful exit of the current task.") + + class LoudDict(dict): """ A Dictionary with a callback for @@ -95,2752 +93,6 @@ class FCSignal: 'from signal %s' % (func, self)) -class BookmarkManager(QtWidgets.QWidget): - - mark_rows = QtCore.pyqtSignal() - - def __init__(self, app, storage, parent=None): - super(BookmarkManager, self).__init__(parent) - - self.app = app - - assert isinstance(storage, dict), "Storage argument is not a dictionary" - - self.bm_dict = deepcopy(storage) - - # Icon and title - # self.setWindowIcon(parent.app_icon) - # self.setWindowTitle(_("Bookmark Manager")) - # self.resize(600, 400) - - # title = QtWidgets.QLabel( - # "FlatCAM
    " - # ) - # title.setOpenExternalLinks(True) - - # layouts - layout = QtWidgets.QVBoxLayout() - self.setLayout(layout) - - table_hlay = QtWidgets.QHBoxLayout() - layout.addLayout(table_hlay) - - self.table_widget = FCTable(drag_drop=True, protected_rows=[0, 1]) - self.table_widget.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows) - table_hlay.addWidget(self.table_widget) - - self.table_widget.setColumnCount(3) - self.table_widget.setColumnWidth(0, 20) - self.table_widget.setHorizontalHeaderLabels( - [ - '#', - _('Title'), - _('Web Link') - ] - ) - self.table_widget.horizontalHeaderItem(0).setToolTip( - _("Index.\n" - "The rows in gray color will populate the Bookmarks menu.\n" - "The number of gray colored rows is set in Preferences.")) - self.table_widget.horizontalHeaderItem(1).setToolTip( - _("Description of the link that is set as an menu action.\n" - "Try to keep it short because it is installed as a menu item.")) - self.table_widget.horizontalHeaderItem(2).setToolTip( - _("Web Link. E.g: https://your_website.org ")) - - # pal = QtGui.QPalette() - # pal.setColor(QtGui.QPalette.Background, Qt.white) - - # New Bookmark - new_vlay = QtWidgets.QVBoxLayout() - layout.addLayout(new_vlay) - - new_title_lbl = QtWidgets.QLabel('%s' % _("New Bookmark")) - new_vlay.addWidget(new_title_lbl) - - form0 = QtWidgets.QFormLayout() - new_vlay.addLayout(form0) - - title_lbl = QtWidgets.QLabel('%s:' % _("Title")) - self.title_entry = FCEntry() - form0.addRow(title_lbl, self.title_entry) - - link_lbl = QtWidgets.QLabel('%s:' % _("Web Link")) - self.link_entry = FCEntry() - self.link_entry.set_value('http://') - form0.addRow(link_lbl, self.link_entry) - - # Buttons Layout - button_hlay = QtWidgets.QHBoxLayout() - layout.addLayout(button_hlay) - - add_entry_btn = FCButton(_("Add Entry")) - remove_entry_btn = FCButton(_("Remove Entry")) - export_list_btn = FCButton(_("Export List")) - import_list_btn = FCButton(_("Import List")) - # closebtn = QtWidgets.QPushButton(_("Close")) - - # button_hlay.addStretch() - button_hlay.addWidget(add_entry_btn) - button_hlay.addWidget(remove_entry_btn) - - button_hlay.addWidget(export_list_btn) - button_hlay.addWidget(import_list_btn) - # button_hlay.addWidget(closebtn) - # ############################################################################## - # ######################## SIGNALS ############################################# - # ############################################################################## - - add_entry_btn.clicked.connect(self.on_add_entry) - remove_entry_btn.clicked.connect(self.on_remove_entry) - export_list_btn.clicked.connect(self.on_export_bookmarks) - import_list_btn.clicked.connect(self.on_import_bookmarks) - self.title_entry.returnPressed.connect(self.on_add_entry) - self.link_entry.returnPressed.connect(self.on_add_entry) - # closebtn.clicked.connect(self.accept) - - self.table_widget.drag_drop_sig.connect(self.mark_table_rows_for_actions) - self.build_bm_ui() - - def build_bm_ui(self): - - self.table_widget.setRowCount(len(self.bm_dict)) - - nr_crt = 0 - sorted_bookmarks = sorted(list(self.bm_dict.items()), key=lambda x: int(x[0])) - for entry, bookmark in sorted_bookmarks: - row = nr_crt - nr_crt += 1 - - title = bookmark[0] - weblink = bookmark[1] - - id_item = QtWidgets.QTableWidgetItem('%d' % int(nr_crt)) - # id.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) - self.table_widget.setItem(row, 0, id_item) # Tool name/id - - title_item = QtWidgets.QTableWidgetItem(title) - self.table_widget.setItem(row, 1, title_item) - - weblink_txt = QtWidgets.QTextBrowser() - weblink_txt.setOpenExternalLinks(True) - weblink_txt.setFrameStyle(QtWidgets.QFrame.NoFrame) - weblink_txt.document().setDefaultStyleSheet("a{ text-decoration: none; }") - - weblink_txt.setHtml('%s' % (weblink, weblink)) - - self.table_widget.setCellWidget(row, 2, weblink_txt) - - vertical_header = self.table_widget.verticalHeader() - vertical_header.hide() - - horizontal_header = self.table_widget.horizontalHeader() - horizontal_header.setMinimumSectionSize(10) - horizontal_header.setDefaultSectionSize(70) - horizontal_header.setSectionResizeMode(0, QtWidgets.QHeaderView.Fixed) - horizontal_header.resizeSection(0, 20) - horizontal_header.setSectionResizeMode(1, QtWidgets.QHeaderView.ResizeToContents) - horizontal_header.setSectionResizeMode(2, QtWidgets.QHeaderView.Stretch) - - self.mark_table_rows_for_actions() - - self.app.defaults["global_bookmarks"].clear() - for key, val in self.bm_dict.items(): - self.app.defaults["global_bookmarks"][key] = deepcopy(val) - - def on_add_entry(self, **kwargs): - """ - Add a entry in the Bookmark Table and in the menu actions - :return: None - """ - if 'title' in kwargs: - title = kwargs['title'] - else: - title = self.title_entry.get_value() - if title == '': - self.app.inform.emit('[ERROR_NOTCL] %s' % _("Title entry is empty.")) - return 'fail' - - if 'link' in kwargs: - link = kwargs['link'] - else: - link = self.link_entry.get_value() - - if link == 'http://': - self.app.inform.emit('[ERROR_NOTCL] %s' % _("Web link entry is empty.")) - return 'fail' - - # if 'http' not in link or 'https' not in link: - # link = 'http://' + link - - for bookmark in self.bm_dict.values(): - if title == bookmark[0] or link == bookmark[1]: - self.app.inform.emit('[ERROR_NOTCL] %s' % _("Either the Title or the Weblink already in the table.")) - return 'fail' - - # for some reason if the last char in the weblink is a slash it does not make the link clickable - # so I remove it - if link[-1] == '/': - link = link[:-1] - # add the new entry to storage - new_entry = len(self.bm_dict) + 1 - self.bm_dict[str(new_entry)] = [title, link] - - # add the link to the menu but only if it is within the set limit - bm_limit = int(self.app.defaults["global_bookmarks_limit"]) - if len(self.bm_dict) < bm_limit: - act = QtWidgets.QAction(parent=self.app.ui.menuhelp_bookmarks) - act.setText(title) - act.setIcon(QtGui.QIcon(self.app.resource_location + '/link16.png')) - act.triggered.connect(lambda: webbrowser.open(link)) - self.app.ui.menuhelp_bookmarks.insertAction(self.app.ui.menuhelp_bookmarks_manager, act) - - self.app.inform.emit('[success] %s' % _("Bookmark added.")) - - # add the new entry to the bookmark manager table - self.build_bm_ui() - - def on_remove_entry(self): - """ - Remove an Entry in the Bookmark table and from the menu actions - :return: - """ - index_list = [] - for model_index in self.table_widget.selectionModel().selectedRows(): - index = QtCore.QPersistentModelIndex(model_index) - index_list.append(index) - title_to_remove = self.table_widget.item(model_index.row(), 1).text() - - if title_to_remove == 'FlatCAM' or title_to_remove == 'Backup Site': - self.app.inform.emit('[WARNING_NOTCL] %s.' % _("This bookmark can not be removed")) - self.build_bm_ui() - return - else: - for k, bookmark in list(self.bm_dict.items()): - if title_to_remove == bookmark[0]: - # remove from the storage - self.bm_dict.pop(k, None) - - for act in self.app.ui.menuhelp_bookmarks.actions(): - if act.text() == title_to_remove: - # disconnect the signal - try: - act.triggered.disconnect() - except TypeError: - pass - # remove the action from the menu - self.app.ui.menuhelp_bookmarks.removeAction(act) - - # house keeping: it pays to have keys increased by one - new_key = 0 - new_dict = {} - for k, v in self.bm_dict.items(): - # we start with key 1 so we can use the len(self.bm_dict) - # when adding bookmarks (keys in bm_dict) - new_key += 1 - new_dict[str(new_key)] = v - - self.bm_dict = deepcopy(new_dict) - new_dict.clear() - - self.app.inform.emit('[success] %s' % _("Bookmark removed.")) - - # for index in index_list: - # self.table_widget.model().removeRow(index.row()) - self.build_bm_ui() - - def on_export_bookmarks(self): - self.app.report_usage("on_export_bookmarks") - self.app.log.debug("on_export_bookmarks()") - - date = str(datetime.today()).rpartition('.')[0] - date = ''.join(c for c in date if c not in ':-') - date = date.replace(' ', '_') - - filter__ = "Text File (*.TXT);;All Files (*.*)" - filename, _f = FCFileSaveDialog.get_saved_filename( caption=_("Export FlatCAM Bookmarks"), - directory='{l_save}/FlatCAM_{n}_{date}'.format( - l_save=str(self.app.get_last_save_folder()), - n=_("Bookmarks"), - date=date), - filter=filter__) - - filename = str(filename) - - if filename == "": - self.app.inform.emit('[WARNING_NOTCL] %s' % _("Cancelled.")) - return - else: - try: - f = open(filename, 'w') - f.close() - except PermissionError: - self.app.inform.emit('[WARNING] %s' % - _("Permission denied, saving not possible.\n" - "Most likely another app is holding the file open and not accessible.")) - return - except IOError: - self.app.log.debug('Creating a new bookmarks file ...') - f = open(filename, 'w') - f.close() - except Exception: - e = sys.exc_info()[0] - self.app.log.error("Could not load defaults file.") - self.app.log.error(str(e)) - self.app.inform.emit('[ERROR_NOTCL] %s' % _("Could not load bookmarks file.")) - return - - # Save Bookmarks to a file - try: - with open(filename, "w") as f: - for title, link in self.bm_dict.items(): - line2write = str(title) + ':' + str(link) + '\n' - f.write(line2write) - except Exception: - self.app.inform.emit('[ERROR_NOTCL] %s' % _("Failed to write bookmarks to file.")) - return - self.app.inform.emit('[success] %s: %s' % (_("Exported bookmarks to"), filename)) - - def on_import_bookmarks(self): - self.app.log.debug("on_import_bookmarks()") - - filter_ = "Text File (*.txt);;All Files (*.*)" - filename, _f = QtWidgets.QFileDialog.getOpenFileName(caption=_("Import FlatCAM Bookmarks"), filter=filter_) - - filename = str(filename) - - if filename == "": - self.app.inform.emit('[WARNING_NOTCL] %s' % _("Cancelled.")) - else: - try: - with open(filename) as f: - bookmarks = f.readlines() - except IOError: - self.app.log.error("Could not load bookmarks file.") - self.app.inform.emit('[ERROR_NOTCL] %s' % _("Could not load bookmarks file.")) - return - - for line in bookmarks: - proc_line = line.replace(' ', '').partition(':') - self.on_add_entry(title=proc_line[0], link=proc_line[2]) - - self.app.inform.emit('[success] %s: %s' % (_("Imported Bookmarks from"), filename)) - - def mark_table_rows_for_actions(self): - for row in range(self.table_widget.rowCount()): - item_to_paint = self.table_widget.item(row, 0) - if row < self.app.defaults["global_bookmarks_limit"]: - item_to_paint.setBackground(QtGui.QColor('gray')) - # item_to_paint.setForeground(QtGui.QColor('black')) - else: - item_to_paint.setBackground(QtGui.QColor('white')) - # item_to_paint.setForeground(QtGui.QColor('black')) - - def rebuild_actions(self): - # rebuild the storage to reflect the order of the lines - self.bm_dict.clear() - for row in range(self.table_widget.rowCount()): - title = self.table_widget.item(row, 1).text() - wlink = self.table_widget.cellWidget(row, 2).toPlainText() - - entry = int(row) + 1 - self.bm_dict.update( - { - str(entry): [title, wlink] - } - ) - - self.app.install_bookmarks(book_dict=self.bm_dict) - - # def accept(self): - # self.rebuild_actions() - # super().accept() - - def closeEvent(self, QCloseEvent): - self.rebuild_actions() - super().closeEvent(QCloseEvent) - - -class ToolsDB(QtWidgets.QWidget): - - mark_tools_rows = QtCore.pyqtSignal() - - def __init__(self, app, callback_on_edited, callback_on_tool_request, parent=None): - super(ToolsDB, self).__init__(parent) - - self.app = app - self.decimals = 4 - self.callback_app = callback_on_edited - - self.on_tool_request = callback_on_tool_request - - self.offset_item_options = ["Path", "In", "Out", "Custom"] - self.type_item_options = ["Iso", "Rough", "Finish"] - self.tool_type_item_options = ["C1", "C2", "C3", "C4", "B", "V"] - - ''' - dict to hold all the tools in the Tools DB - format: - { - tool_id: { - 'name': 'new_tool' - 'tooldia': self.app.defaults["geometry_cnctooldia"] - 'offset': 'Path' - 'offset_value': 0.0 - 'type': _('Rough'), - 'tool_type': 'C1' - 'data': dict() - } - } - ''' - self.db_tool_dict = {} - - # layouts - layout = QtWidgets.QVBoxLayout() - self.setLayout(layout) - - table_hlay = QtWidgets.QHBoxLayout() - layout.addLayout(table_hlay) - - self.table_widget = FCTable(drag_drop=True) - self.table_widget.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows) - table_hlay.addWidget(self.table_widget) - - # set the number of columns and the headers tool tips - self.configure_table() - - # pal = QtGui.QPalette() - # pal.setColor(QtGui.QPalette.Background, Qt.white) - - # New Bookmark - new_vlay = QtWidgets.QVBoxLayout() - layout.addLayout(new_vlay) - - # new_tool_lbl = QtWidgets.QLabel('%s' % _("New Tool")) - # new_vlay.addWidget(new_tool_lbl, alignment=QtCore.Qt.AlignBottom) - - self.buttons_frame = QtWidgets.QFrame() - self.buttons_frame.setContentsMargins(0, 0, 0, 0) - layout.addWidget(self.buttons_frame) - self.buttons_box = QtWidgets.QHBoxLayout() - self.buttons_box.setContentsMargins(0, 0, 0, 0) - self.buttons_frame.setLayout(self.buttons_box) - self.buttons_frame.show() - - add_entry_btn = FCButton(_("Add Geometry Tool in DB")) - add_entry_btn.setToolTip( - _("Add a new tool in the Tools Database.\n" - "It will be used in the Geometry UI.\n" - "You can edit it after it is added.") - ) - self.buttons_box.addWidget(add_entry_btn) - - # add_fct_entry_btn = FCButton(_("Add Paint/NCC Tool in DB")) - # add_fct_entry_btn.setToolTip( - # _("Add a new tool in the Tools Database.\n" - # "It will be used in the Paint/NCC Tools UI.\n" - # "You can edit it after it is added.") - # ) - # self.buttons_box.addWidget(add_fct_entry_btn) - - remove_entry_btn = FCButton(_("Delete Tool from DB")) - remove_entry_btn.setToolTip( - _("Remove a selection of tools in the Tools Database.") - ) - self.buttons_box.addWidget(remove_entry_btn) - - export_db_btn = FCButton(_("Export DB")) - export_db_btn.setToolTip( - _("Save the Tools Database to a custom text file.") - ) - self.buttons_box.addWidget(export_db_btn) - - import_db_btn = FCButton(_("Import DB")) - import_db_btn.setToolTip( - _("Load the Tools Database information's from a custom text file.") - ) - self.buttons_box.addWidget(import_db_btn) - - self.add_tool_from_db = FCButton(_("Add Tool from Tools DB")) - self.add_tool_from_db.setToolTip( - _("Add a new tool in the Tools Table of the\n" - "active Geometry object after selecting a tool\n" - "in the Tools Database.") - ) - self.add_tool_from_db.hide() - - self.cancel_tool_from_db = FCButton(_("Cancel")) - self.cancel_tool_from_db.hide() - - hlay = QtWidgets.QHBoxLayout() - layout.addLayout(hlay) - hlay.addWidget(self.add_tool_from_db) - hlay.addWidget(self.cancel_tool_from_db) - hlay.addStretch() - - # ############################################################################## - # ######################## SIGNALS ############################################# - # ############################################################################## - - add_entry_btn.clicked.connect(self.on_tool_add) - remove_entry_btn.clicked.connect(self.on_tool_delete) - export_db_btn.clicked.connect(self.on_export_tools_db_file) - import_db_btn.clicked.connect(self.on_import_tools_db_file) - # closebtn.clicked.connect(self.accept) - - self.add_tool_from_db.clicked.connect(self.on_tool_requested_from_app) - self.cancel_tool_from_db.clicked.connect(self.on_cancel_tool) - - self.setup_db_ui() - - def configure_table(self): - self.table_widget.setColumnCount(27) - # self.table_widget.setColumnWidth(0, 20) - self.table_widget.setHorizontalHeaderLabels( - [ - '#', - _("Tool Name"), - _("Tool Dia"), - _("Tool Offset"), - _("Custom Offset"), - _("Tool Type"), - _("Tool Shape"), - _("Cut Z"), - _("MultiDepth"), - _("DPP"), - _("V-Dia"), - _("V-Angle"), - _("Travel Z"), - _("FR"), - _("FR Z"), - _("FR Rapids"), - _("Spindle Speed"), - _("Dwell"), - _("Dwelltime"), - _("Preprocessor"), - _("ExtraCut"), - _("E-Cut Length"), - _("Toolchange"), - _("Toolchange XY"), - _("Toolchange Z"), - _("Start Z"), - _("End Z"), - ] - ) - self.table_widget.horizontalHeaderItem(0).setToolTip( - _("Tool Index.")) - self.table_widget.horizontalHeaderItem(1).setToolTip( - _("Tool name.\n" - "This is not used in the app, it's function\n" - "is to serve as a note for the user.")) - self.table_widget.horizontalHeaderItem(2).setToolTip( - _("Tool Diameter.")) - self.table_widget.horizontalHeaderItem(3).setToolTip( - _("Tool Offset.\n" - "Can be of a few types:\n" - "Path = zero offset\n" - "In = offset inside by half of tool diameter\n" - "Out = offset outside by half of tool diameter\n" - "Custom = custom offset using the Custom Offset value")) - self.table_widget.horizontalHeaderItem(4).setToolTip( - _("Custom Offset.\n" - "A value to be used as offset from the current path.")) - self.table_widget.horizontalHeaderItem(5).setToolTip( - _("Tool Type.\n" - "Can be:\n" - "Iso = isolation cut\n" - "Rough = rough cut, low feedrate, multiple passes\n" - "Finish = finishing cut, high feedrate")) - self.table_widget.horizontalHeaderItem(6).setToolTip( - _("Tool Shape. \n" - "Can be:\n" - "C1 ... C4 = circular tool with x flutes\n" - "B = ball tip milling tool\n" - "V = v-shape milling tool")) - self.table_widget.horizontalHeaderItem(7).setToolTip( - _("Cutting Depth.\n" - "The depth at which to cut into material.")) - self.table_widget.horizontalHeaderItem(8).setToolTip( - _("Multi Depth.\n" - "Selecting this will allow cutting in multiple passes,\n" - "each pass adding a DPP parameter depth.")) - self.table_widget.horizontalHeaderItem(9).setToolTip( - _("DPP. Depth per Pass.\n" - "The value used to cut into material on each pass.")) - self.table_widget.horizontalHeaderItem(10).setToolTip( - _("V-Dia.\n" - "Diameter of the tip for V-Shape Tools.")) - self.table_widget.horizontalHeaderItem(11).setToolTip( - _("V-Agle.\n" - "Angle at the tip for the V-Shape Tools.")) - self.table_widget.horizontalHeaderItem(12).setToolTip( - _("Clearance Height.\n" - "Height at which the milling bit will travel between cuts,\n" - "above the surface of the material, avoiding all fixtures.")) - self.table_widget.horizontalHeaderItem(13).setToolTip( - _("FR. Feedrate\n" - "The speed on XY plane used while cutting into material.")) - self.table_widget.horizontalHeaderItem(14).setToolTip( - _("FR Z. Feedrate Z\n" - "The speed on Z plane.")) - self.table_widget.horizontalHeaderItem(15).setToolTip( - _("FR Rapids. Feedrate Rapids\n" - "Speed used while moving as fast as possible.\n" - "This is used only by some devices that can't use\n" - "the G0 g-code command. Mostly 3D printers.")) - self.table_widget.horizontalHeaderItem(16).setToolTip( - _("Spindle Speed.\n" - "If it's left empty it will not be used.\n" - "The speed of the spindle in RPM.")) - self.table_widget.horizontalHeaderItem(17).setToolTip( - _("Dwell.\n" - "Check this if a delay is needed to allow\n" - "the spindle motor to reach it's set speed.")) - self.table_widget.horizontalHeaderItem(18).setToolTip( - _("Dwell Time.\n" - "A delay used to allow the motor spindle reach it's set speed.")) - self.table_widget.horizontalHeaderItem(19).setToolTip( - _("Preprocessor.\n" - "A selection of files that will alter the generated G-code\n" - "to fit for a number of use cases.")) - self.table_widget.horizontalHeaderItem(20).setToolTip( - _("Extra Cut.\n" - "If checked, after a isolation is finished an extra cut\n" - "will be added where the start and end of isolation meet\n" - "such as that this point is covered by this extra cut to\n" - "ensure a complete isolation.")) - self.table_widget.horizontalHeaderItem(21).setToolTip( - _("Extra Cut length.\n" - "If checked, after a isolation is finished an extra cut\n" - "will be added where the start and end of isolation meet\n" - "such as that this point is covered by this extra cut to\n" - "ensure a complete isolation. This is the length of\n" - "the extra cut.")) - self.table_widget.horizontalHeaderItem(22).setToolTip( - _("Toolchange.\n" - "It will create a toolchange event.\n" - "The kind of toolchange is determined by\n" - "the preprocessor file.")) - self.table_widget.horizontalHeaderItem(23).setToolTip( - _("Toolchange XY.\n" - "A set of coordinates in the format (x, y).\n" - "Will determine the cartesian position of the point\n" - "where the tool change event take place.")) - self.table_widget.horizontalHeaderItem(24).setToolTip( - _("Toolchange Z.\n" - "The position on Z plane where the tool change event take place.")) - self.table_widget.horizontalHeaderItem(25).setToolTip( - _("Start Z.\n" - "If it's left empty it will not be used.\n" - "A position on Z plane to move immediately after job start.")) - self.table_widget.horizontalHeaderItem(26).setToolTip( - _("End Z.\n" - "A position on Z plane to move immediately after job stop.")) - - def setup_db_ui(self): - filename = self.app.data_path + '/geo_tools_db.FlatDB' - - # load the database tools from the file - try: - with open(filename) as f: - tools = f.read() - except IOError: - self.app.log.error("Could not load tools DB file.") - self.app.inform.emit('[ERROR] %s' % _("Could not load Tools DB file.")) - return - - try: - self.db_tool_dict = json.loads(tools) - except Exception: - e = sys.exc_info()[0] - self.app.log.error(str(e)) - self.app.inform.emit('[ERROR] %s' % _("Failed to parse Tools DB file.")) - return - - self.app.inform.emit('[success] %s: %s' % (_("Loaded FlatCAM Tools DB from"), filename)) - - self.build_db_ui() - - self.table_widget.setupContextMenu() - self.table_widget.addContextMenu( - _("Add to DB"), self.on_tool_add, icon=QtGui.QIcon(self.app.resource_location + "/plus16.png")) - self.table_widget.addContextMenu( - _("Copy from DB"), self.on_tool_copy, icon=QtGui.QIcon(self.app.resource_location + "/copy16.png")) - self.table_widget.addContextMenu( - _("Delete from DB"), self.on_tool_delete, icon=QtGui.QIcon(self.app.resource_location + "/delete32.png")) - - def build_db_ui(self): - self.ui_disconnect() - self.table_widget.setRowCount(len(self.db_tool_dict)) - - nr_crt = 0 - - for toolid, dict_val in self.db_tool_dict.items(): - row = nr_crt - nr_crt += 1 - - t_name = dict_val['name'] - try: - self.add_tool_table_line(row, name=t_name, widget=self.table_widget, tooldict=dict_val) - except Exception as e: - self.app.log.debug("ToolDB.build_db_ui.add_tool_table_line() --> %s" % str(e)) - vertical_header = self.table_widget.verticalHeader() - vertical_header.hide() - - horizontal_header = self.table_widget.horizontalHeader() - horizontal_header.setMinimumSectionSize(10) - horizontal_header.setDefaultSectionSize(70) - - self.table_widget.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustToContents) - for x in range(27): - self.table_widget.resizeColumnToContents(x) - - horizontal_header.setSectionResizeMode(0, QtWidgets.QHeaderView.Fixed) - # horizontal_header.setSectionResizeMode(1, QtWidgets.QHeaderView.Stretch) - # horizontal_header.setSectionResizeMode(13, QtWidgets.QHeaderView.Fixed) - - horizontal_header.resizeSection(0, 20) - # horizontal_header.setSectionResizeMode(1, QtWidgets.QHeaderView.ResizeToContents) - # horizontal_header.setSectionResizeMode(2, QtWidgets.QHeaderView.Stretch) - - self.ui_connect() - - def add_tool_table_line(self, row, name, widget, tooldict): - data = tooldict['data'] - - nr_crt = row + 1 - id_item = QtWidgets.QTableWidgetItem('%d' % int(nr_crt)) - # id_item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) - flags = id_item.flags() & ~QtCore.Qt.ItemIsEditable - id_item.setFlags(flags) - widget.setItem(row, 0, id_item) # Tool name/id - - tool_name_item = QtWidgets.QTableWidgetItem(name) - widget.setItem(row, 1, tool_name_item) - - dia_item = FCDoubleSpinner() - dia_item.set_precision(self.decimals) - dia_item.setSingleStep(0.1) - dia_item.set_range(0.0, 9999.9999) - dia_item.set_value(float(tooldict['tooldia'])) - widget.setCellWidget(row, 2, dia_item) - - tool_offset_item = FCComboBox() - for item in self.offset_item_options: - tool_offset_item.addItem(item) - tool_offset_item.set_value(tooldict['offset']) - widget.setCellWidget(row, 3, tool_offset_item) - - c_offset_item = FCDoubleSpinner() - c_offset_item.set_precision(self.decimals) - c_offset_item.setSingleStep(0.1) - c_offset_item.set_range(-9999.9999, 9999.9999) - c_offset_item.set_value(float(tooldict['offset_value'])) - widget.setCellWidget(row, 4, c_offset_item) - - tt_item = FCComboBox() - for item in self.type_item_options: - tt_item.addItem(item) - tt_item.set_value(tooldict['type']) - widget.setCellWidget(row, 5, tt_item) - - tshape_item = FCComboBox() - for item in self.tool_type_item_options: - tshape_item.addItem(item) - tshape_item.set_value(tooldict['tool_type']) - widget.setCellWidget(row, 6, tshape_item) - - cutz_item = FCDoubleSpinner() - cutz_item.set_precision(self.decimals) - cutz_item.setSingleStep(0.1) - if self.app.defaults['global_machinist_setting']: - cutz_item.set_range(-9999.9999, 9999.9999) - else: - cutz_item.set_range(-9999.9999, -0.0000) - - cutz_item.set_value(float(data['cutz'])) - widget.setCellWidget(row, 7, cutz_item) - - multidepth_item = FCCheckBox() - multidepth_item.set_value(data['multidepth']) - widget.setCellWidget(row, 8, multidepth_item) - - # to make the checkbox centered but it can no longer have it's value accessed - needs a fix using findchild() - # multidepth_item = QtWidgets.QWidget() - # cb = FCCheckBox() - # cb.set_value(data['multidepth']) - # qhboxlayout = QtWidgets.QHBoxLayout(multidepth_item) - # qhboxlayout.addWidget(cb) - # qhboxlayout.setAlignment(QtCore.Qt.AlignCenter) - # qhboxlayout.setContentsMargins(0, 0, 0, 0) - # widget.setCellWidget(row, 8, multidepth_item) - - depth_per_pass_item = FCDoubleSpinner() - depth_per_pass_item.set_precision(self.decimals) - depth_per_pass_item.setSingleStep(0.1) - depth_per_pass_item.set_range(0.0, 9999.9999) - depth_per_pass_item.set_value(float(data['depthperpass'])) - widget.setCellWidget(row, 9, depth_per_pass_item) - - vtip_dia_item = FCDoubleSpinner() - vtip_dia_item.set_precision(self.decimals) - vtip_dia_item.setSingleStep(0.1) - vtip_dia_item.set_range(0.0, 9999.9999) - vtip_dia_item.set_value(float(data['vtipdia'])) - widget.setCellWidget(row, 10, vtip_dia_item) - - vtip_angle_item = FCDoubleSpinner() - vtip_angle_item.set_precision(self.decimals) - vtip_angle_item.setSingleStep(0.1) - vtip_angle_item.set_range(-360.0, 360.0) - vtip_angle_item.set_value(float(data['vtipangle'])) - widget.setCellWidget(row, 11, vtip_angle_item) - - travelz_item = FCDoubleSpinner() - travelz_item.set_precision(self.decimals) - travelz_item.setSingleStep(0.1) - if self.app.defaults['global_machinist_setting']: - travelz_item.set_range(-9999.9999, 9999.9999) - else: - travelz_item.set_range(0.0000, 9999.9999) - - travelz_item.set_value(float(data['travelz'])) - widget.setCellWidget(row, 12, travelz_item) - - fr_item = FCDoubleSpinner() - fr_item.set_precision(self.decimals) - fr_item.set_range(0.0, 9999.9999) - fr_item.set_value(float(data['feedrate'])) - widget.setCellWidget(row, 13, fr_item) - - frz_item = FCDoubleSpinner() - frz_item.set_precision(self.decimals) - frz_item.set_range(0.0, 9999.9999) - frz_item.set_value(float(data['feedrate_z'])) - widget.setCellWidget(row, 14, frz_item) - - frrapids_item = FCDoubleSpinner() - frrapids_item.set_precision(self.decimals) - frrapids_item.set_range(0.0, 9999.9999) - frrapids_item.set_value(float(data['feedrate_rapid'])) - widget.setCellWidget(row, 15, frrapids_item) - - spindlespeed_item = FCSpinner() - spindlespeed_item.set_range(0, 1000000) - spindlespeed_item.set_value(int(data['spindlespeed'])) - spindlespeed_item.set_step(100) - widget.setCellWidget(row, 16, spindlespeed_item) - - dwell_item = FCCheckBox() - dwell_item.set_value(data['dwell']) - widget.setCellWidget(row, 17, dwell_item) - - dwelltime_item = FCDoubleSpinner() - dwelltime_item.set_precision(self.decimals) - dwelltime_item.set_range(0.0000, 9999.9999) - dwelltime_item.set_value(float(data['dwelltime'])) - widget.setCellWidget(row, 18, dwelltime_item) - - pp_item = FCComboBox() - for item in self.app.preprocessors: - pp_item.addItem(item) - pp_item.set_value(data['ppname_g']) - widget.setCellWidget(row, 19, pp_item) - - ecut_item = FCCheckBox() - ecut_item.set_value(data['extracut']) - widget.setCellWidget(row, 20, ecut_item) - - ecut_length_item = FCDoubleSpinner() - ecut_length_item.set_precision(self.decimals) - ecut_length_item.set_range(0.0000, 9999.9999) - ecut_length_item.set_value(data['extracut_length']) - widget.setCellWidget(row, 21, ecut_length_item) - - toolchange_item = FCCheckBox() - toolchange_item.set_value(data['toolchange']) - widget.setCellWidget(row, 22, toolchange_item) - - toolchangexy_item = QtWidgets.QTableWidgetItem(str(data['toolchangexy']) if data['toolchangexy'] else '') - widget.setItem(row, 23, toolchangexy_item) - - toolchangez_item = FCDoubleSpinner() - toolchangez_item.set_precision(self.decimals) - toolchangez_item.setSingleStep(0.1) - if self.app.defaults['global_machinist_setting']: - toolchangez_item.set_range(-9999.9999, 9999.9999) - else: - toolchangez_item.set_range(0.0000, 9999.9999) - - toolchangez_item.set_value(float(data['toolchangez'])) - widget.setCellWidget(row, 24, toolchangez_item) - - startz_item = QtWidgets.QTableWidgetItem(str(data['startz']) if data['startz'] else '') - widget.setItem(row, 25, startz_item) - - endz_item = FCDoubleSpinner() - endz_item.set_precision(self.decimals) - endz_item.setSingleStep(0.1) - if self.app.defaults['global_machinist_setting']: - endz_item.set_range(-9999.9999, 9999.9999) - else: - endz_item.set_range(0.0000, 9999.9999) - - endz_item.set_value(float(data['endz'])) - widget.setCellWidget(row, 26, endz_item) - - def on_tool_add(self): - """ - Add a tool in the DB Tool Table - :return: None - """ - - default_data = {} - default_data.update({ - "cutz": float(self.app.defaults["geometry_cutz"]), - "multidepth": self.app.defaults["geometry_multidepth"], - "depthperpass": float(self.app.defaults["geometry_depthperpass"]), - "vtipdia": float(self.app.defaults["geometry_vtipdia"]), - "vtipangle": float(self.app.defaults["geometry_vtipangle"]), - "travelz": float(self.app.defaults["geometry_travelz"]), - "feedrate": float(self.app.defaults["geometry_feedrate"]), - "feedrate_z": float(self.app.defaults["geometry_feedrate_z"]), - "feedrate_rapid": float(self.app.defaults["geometry_feedrate_rapid"]), - "spindlespeed": self.app.defaults["geometry_spindlespeed"], - "dwell": self.app.defaults["geometry_dwell"], - "dwelltime": float(self.app.defaults["geometry_dwelltime"]), - "ppname_g": self.app.defaults["geometry_ppname_g"], - "extracut": self.app.defaults["geometry_extracut"], - "extracut_length": float(self.app.defaults["geometry_extracut_length"]), - "toolchange": self.app.defaults["geometry_toolchange"], - "toolchangexy": self.app.defaults["geometry_toolchangexy"], - "toolchangez": float(self.app.defaults["geometry_toolchangez"]), - "startz": self.app.defaults["geometry_startz"], - "endz": float(self.app.defaults["geometry_endz"]) - }) - - dict_elem = {} - dict_elem['name'] = 'new_tool' - if type(self.app.defaults["geometry_cnctooldia"]) == float: - dict_elem['tooldia'] = self.app.defaults["geometry_cnctooldia"] - else: - try: - tools_string = self.app.defaults["geometry_cnctooldia"].split(",") - tools_diameters = [eval(a) for a in tools_string if a != ''] - dict_elem['tooldia'] = tools_diameters[0] if tools_diameters else 0.0 - except Exception as e: - self.app.log.debug("ToolDB.on_tool_add() --> %s" % str(e)) - return - - dict_elem['offset'] = 'Path' - dict_elem['offset_value'] = 0.0 - dict_elem['type'] = 'Rough' - dict_elem['tool_type'] = 'C1' - dict_elem['data'] = default_data - - new_toolid = len(self.db_tool_dict) + 1 - self.db_tool_dict[new_toolid] = deepcopy(dict_elem) - - # add the new entry to the Tools DB table - self.build_db_ui() - self.callback_on_edited() - self.app.inform.emit('[success] %s' % _("Tool added to DB.")) - - def on_tool_copy(self): - """ - Copy a selection of Tools in the Tools DB table - :return: - """ - new_tool_id = self.table_widget.rowCount() + 1 - for model_index in self.table_widget.selectionModel().selectedRows(): - # index = QtCore.QPersistentModelIndex(model_index) - old_tool_id = self.table_widget.item(model_index.row(), 0).text() - new_tool_id += 1 - - for toolid, dict_val in list(self.db_tool_dict.items()): - if int(old_tool_id) == int(toolid): - self.db_tool_dict.update({ - new_tool_id: deepcopy(dict_val) - }) - - self.build_db_ui() - self.callback_on_edited() - self.app.inform.emit('[success] %s' % _("Tool copied from Tools DB.")) - - def on_tool_delete(self): - """ - Delete a selection of Tools in the Tools DB table - :return: - """ - for model_index in self.table_widget.selectionModel().selectedRows(): - # index = QtCore.QPersistentModelIndex(model_index) - toolname_to_remove = self.table_widget.item(model_index.row(), 0).text() - - for toolid, dict_val in list(self.db_tool_dict.items()): - if int(toolname_to_remove) == int(toolid): - # remove from the storage - self.db_tool_dict.pop(toolid, None) - - self.build_db_ui() - self.callback_on_edited() - self.app.inform.emit('[success] %s' % _("Tool removed from Tools DB.")) - - def on_export_tools_db_file(self): - self.app.report_usage("on_export_tools_db_file") - self.app.log.debug("on_export_tools_db_file()") - - date = str(datetime.today()).rpartition('.')[0] - date = ''.join(c for c in date if c not in ':-') - date = date.replace(' ', '_') - - filter__ = "Text File (*.TXT);;All Files (*.*)" - filename, _f = FCFileSaveDialog.get_saved_filename( caption=_("Export Tools Database"), - directory='{l_save}/FlatCAM_{n}_{date}'.format( - l_save=str(self.app.get_last_save_folder()), - n=_("Tools_Database"), - date=date), - filter=filter__) - - filename = str(filename) - - if filename == "": - self.app.inform.emit('[WARNING_NOTCL] %s' % _("Cancelled.")) - return - else: - try: - f = open(filename, 'w') - f.close() - except PermissionError: - self.app.inform.emit('[WARNING] %s' % - _("Permission denied, saving not possible.\n" - "Most likely another app is holding the file open and not accessible.")) - return - except IOError: - self.app.log.debug('Creating a new Tools DB file ...') - f = open(filename, 'w') - f.close() - except Exception: - e = sys.exc_info()[0] - self.app.log.error("Could not load Tools DB file.") - self.app.log.error(str(e)) - self.app.inform.emit('[ERROR_NOTCL] %s' % _("Could not load Tools DB file.")) - return - - # Save update options - try: - # Save Tools DB in a file - try: - with open(filename, "w") as f: - json.dump(self.db_tool_dict, f, default=to_dict, indent=2) - except Exception as e: - self.app.log.debug("App.on_save_tools_db() --> %s" % str(e)) - self.inform.emit('[ERROR_NOTCL] %s' % _("Failed to write Tools DB to file.")) - return - except Exception: - self.app.inform.emit('[ERROR_NOTCL] %s' % _("Failed to write Tools DB to file.")) - return - - self.app.inform.emit('[success] %s: %s' % (_("Exported Tools DB to"), filename)) - - def on_import_tools_db_file(self): - self.app.report_usage("on_import_tools_db_file") - self.app.log.debug("on_import_tools_db_file()") - - filter__ = "Text File (*.TXT);;All Files (*.*)" - filename, _f = QtWidgets.QFileDialog.getOpenFileName(caption=_("Import FlatCAM Tools DB"), filter=filter__) - - if filename == "": - self.app.inform.emit('[WARNING_NOTCL] %s' % _("Cancelled.")) - else: - try: - with open(filename) as f: - tools_in_db = f.read() - except IOError: - self.app.log.error("Could not load Tools DB file.") - self.app.inform.emit('[ERROR_NOTCL] %s' % _("Could not load Tools DB file.")) - return - - try: - self.db_tool_dict = json.loads(tools_in_db) - except Exception: - e = sys.exc_info()[0] - self.app.log.error(str(e)) - self.app.inform.emit('[ERROR] %s' % _("Failed to parse Tools DB file.")) - return - - self.app.inform.emit('[success] %s: %s' % (_("Loaded FlatCAM Tools DB from"), filename)) - self.build_db_ui() - self.callback_on_edited() - - def on_save_tools_db(self, silent=False): - self.app.log.debug("ToolsDB.on_save_button() --> Saving Tools Database to file.") - - filename = self.app.data_path + "/geo_tools_db.FlatDB" - - # Preferences save, update the color of the Tools DB Tab text - for idx in range(self.app.ui.plot_tab_area.count()): - if self.app.ui.plot_tab_area.tabText(idx) == _("Tools Database"): - self.app.ui.plot_tab_area.tabBar.setTabTextColor(idx, QtGui.QColor('black')) - - # Save Tools DB in a file - try: - f = open(filename, "w") - json.dump(self.db_tool_dict, f, default=to_dict, indent=2) - f.close() - except Exception as e: - self.app.log.debug("ToolsDB.on_save_tools_db() --> %s" % str(e)) - self.app.inform.emit('[ERROR_NOTCL] %s' % _("Failed to write Tools DB to file.")) - return - - if not silent: - self.app.inform.emit('[success] %s' % _("Saved Tools DB.")) - - def ui_connect(self): - try: - try: - self.table_widget.itemChanged.disconnect(self.callback_on_edited) - except (TypeError, AttributeError): - pass - self.table_widget.itemChanged.connect(self.callback_on_edited) - except AttributeError: - pass - - for row in range(self.table_widget.rowCount()): - for col in range(self.table_widget.columnCount()): - # ComboBox - try: - try: - self.table_widget.cellWidget(row, col).currentIndexChanged.disconnect(self.callback_on_edited) - except (TypeError, AttributeError): - pass - self.table_widget.cellWidget(row, col).currentIndexChanged.connect(self.callback_on_edited) - except AttributeError: - pass - - # CheckBox - try: - try: - self.table_widget.cellWidget(row, col).toggled.disconnect(self.callback_on_edited) - except (TypeError, AttributeError): - pass - self.table_widget.cellWidget(row, col).toggled.connect(self.callback_on_edited) - except AttributeError: - pass - - # SpinBox, DoubleSpinBox - try: - try: - self.table_widget.cellWidget(row, col).valueChanged.disconnect(self.callback_on_edited) - except (TypeError, AttributeError): - pass - self.table_widget.cellWidget(row, col).valueChanged.connect(self.callback_on_edited) - except AttributeError: - pass - - def ui_disconnect(self): - try: - self.table_widget.itemChanged.disconnect(self.callback_on_edited) - except (TypeError, AttributeError): - pass - - for row in range(self.table_widget.rowCount()): - for col in range(self.table_widget.columnCount()): - # ComboBox - try: - self.table_widget.cellWidget(row, col).currentIndexChanged.disconnect(self.callback_on_edited) - except (TypeError, AttributeError): - pass - - # CheckBox - try: - self.table_widget.cellWidget(row, col).toggled.disconnect(self.callback_on_edited) - except (TypeError, AttributeError): - pass - - # SpinBox, DoubleSpinBox - try: - self.table_widget.cellWidget(row, col).valueChanged.disconnect(self.callback_on_edited) - except (TypeError, AttributeError): - pass - - def callback_on_edited(self): - - # update the dictionary storage self.db_tool_dict - self.db_tool_dict.clear() - dict_elem = {} - default_data = {} - - for row in range(self.table_widget.rowCount()): - new_toolid = row + 1 - for col in range(self.table_widget.columnCount()): - column_header_text = self.table_widget.horizontalHeaderItem(col).text() - if column_header_text == _('Tool Name'): - dict_elem['name'] = self.table_widget.item(row, col).text() - elif column_header_text == _('Tool Dia'): - dict_elem['tooldia'] = self.table_widget.cellWidget(row, col).get_value() - elif column_header_text == _('Tool Offset'): - dict_elem['offset'] = self.table_widget.cellWidget(row, col).get_value() - elif column_header_text == _('Custom Offset'): - dict_elem['offset_value'] = self.table_widget.cellWidget(row, col).get_value() - elif column_header_text == _('Tool Type'): - dict_elem['type'] = self.table_widget.cellWidget(row, col).get_value() - elif column_header_text == _('Tool Shape'): - dict_elem['tool_type'] = self.table_widget.cellWidget(row, col).get_value() - else: - if column_header_text == _('Cut Z'): - default_data['cutz'] = self.table_widget.cellWidget(row, col).get_value() - elif column_header_text == _('MultiDepth'): - default_data['multidepth'] = self.table_widget.cellWidget(row, col).get_value() - elif column_header_text == _('DPP'): - default_data['depthperpass'] = self.table_widget.cellWidget(row, col).get_value() - elif column_header_text == _('V-Dia'): - default_data['vtipdia'] = self.table_widget.cellWidget(row, col).get_value() - elif column_header_text == _('V-Angle'): - default_data['vtipangle'] = self.table_widget.cellWidget(row, col).get_value() - elif column_header_text == _('Travel Z'): - default_data['travelz'] = self.table_widget.cellWidget(row, col).get_value() - elif column_header_text == _('FR'): - default_data['feedrate'] = self.table_widget.cellWidget(row, col).get_value() - elif column_header_text == _('FR Z'): - default_data['feedrate_z'] = self.table_widget.cellWidget(row, col).get_value() - elif column_header_text == _('FR Rapids'): - default_data['feedrate_rapid'] = self.table_widget.cellWidget(row, col).get_value() - elif column_header_text == _('Spindle Speed'): - default_data['spindlespeed'] = self.table_widget.cellWidget(row, col).get_value() - elif column_header_text == _('Dwell'): - default_data['dwell'] = self.table_widget.cellWidget(row, col).get_value() - elif column_header_text == _('Dwelltime'): - default_data['dwelltime'] = self.table_widget.cellWidget(row, col).get_value() - elif column_header_text == _('Preprocessor'): - default_data['ppname_g'] = self.table_widget.cellWidget(row, col).get_value() - elif column_header_text == _('ExtraCut'): - default_data['extracut'] = self.table_widget.cellWidget(row, col).get_value() - elif column_header_text == _("E-Cut Length"): - default_data['extracut_length'] = self.table_widget.cellWidget(row, col).get_value() - elif column_header_text == _('Toolchange'): - default_data['toolchange'] = self.table_widget.cellWidget(row, col).get_value() - elif column_header_text == _('Toolchange XY'): - default_data['toolchangexy'] = self.table_widget.item(row, col).text() - elif column_header_text == _('Toolchange Z'): - default_data['toolchangez'] = self.table_widget.cellWidget(row, col).get_value() - elif column_header_text == _('Start Z'): - default_data['startz'] = float(self.table_widget.item(row, col).text()) \ - if self.table_widget.item(row, col).text() != '' else None - elif column_header_text == _('End Z'): - default_data['endz'] = self.table_widget.cellWidget(row, col).get_value() - - dict_elem['data'] = default_data - self.db_tool_dict.update( - { - new_toolid: deepcopy(dict_elem) - } - ) - - self.callback_app() - - def on_tool_requested_from_app(self): - if not self.table_widget.selectionModel().selectedRows(): - self.app.inform.emit('[WARNING_NOTCL] %s...' % _("No Tool/row selected in the Tools Database table")) - return - - model_index_list = self.table_widget.selectionModel().selectedRows() - for model_index in model_index_list: - selected_row = model_index.row() - tool_uid = selected_row + 1 - for key in self.db_tool_dict.keys(): - if str(key) == str(tool_uid): - selected_tool = self.db_tool_dict[key] - self.on_tool_request(tool=selected_tool) - - def on_cancel_tool(self): - for idx in range(self.app.ui.plot_tab_area.count()): - if self.app.ui.plot_tab_area.tabText(idx) == _("Tools Database"): - wdg = self.app.ui.plot_tab_area.widget(idx) - wdg.deleteLater() - self.app.ui.plot_tab_area.removeTab(idx) - self.app.inform.emit('%s' % _("Cancelled adding tool from DB.")) - - def resize_new_tool_table_widget(self, min_size, max_size): - """ - Resize the table widget responsible for adding new tool in the Tool Database - - :param min_size: passed by rangeChanged signal or the self.new_tool_table_widget.horizontalScrollBar() - :param max_size: passed by rangeChanged signal or the self.new_tool_table_widget.horizontalScrollBar() - :return: - """ - t_height = self.t_height - if max_size > min_size: - t_height = self.t_height + self.new_tool_table_widget.verticalScrollBar().height() - - self.new_tool_table_widget.setMaximumHeight(t_height) - - def closeEvent(self, QCloseEvent): - super().closeEvent(QCloseEvent) - - -class ToolsDB2(QtWidgets.QWidget): - - mark_tools_rows = QtCore.pyqtSignal() - - def __init__(self, app, callback_on_edited, callback_on_tool_request, parent=None): - super(ToolsDB2, self).__init__(parent) - - self.app = app - self.decimals = self.app.decimals - self.callback_app = callback_on_edited - - self.on_tool_request = callback_on_tool_request - - self.offset_item_options = ["Path", "In", "Out", "Custom"] - self.type_item_options = ["Iso", "Rough", "Finish"] - self.tool_type_item_options = ["C1", "C2", "C3", "C4", "B", "V"] - - ''' - dict to hold all the tools in the Tools DB - format: - { - tool_id: { - 'name': 'new_tool' - 'tooldia': self.app.defaults["geometry_cnctooldia"] - 'offset': 'Path' - 'offset_value': 0.0 - 'type': _('Rough'), - 'tool_type': 'C1' - 'data': dict() - } - } - ''' - self.db_tool_dict = {} - - # layouts - grid_layout = QtWidgets.QGridLayout() - grid_layout.setColumnStretch(0, 0) - grid_layout.setColumnStretch(1, 1) - - self.setLayout(grid_layout) - - tree_layout = QtWidgets.QVBoxLayout() - grid_layout.addLayout(tree_layout, 0, 0) - - self.tree_widget = FCTree(columns=2, header_hidden=False, protected_column=[0]) - self.tree_widget.setHeaderLabels(["ID", "Tool Name"]) - self.tree_widget.setIndentation(0) - self.tree_widget.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) - self.tree_widget.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection) - - # set alternating colors - # self.tree_widget.setAlternatingRowColors(True) - # p = QtGui.QPalette() - # p.setColor(QtGui.QPalette.AlternateBase, QtGui.QColor(226, 237, 253) ) - # self.tree_widget.setPalette(p) - - self.tree_widget.setSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.MinimumExpanding) - tree_layout.addWidget(self.tree_widget) - - param_hlay = QtWidgets.QHBoxLayout() - param_area = QtWidgets.QScrollArea() - param_widget = QtWidgets.QWidget() - param_widget.setLayout(param_hlay) - - param_area.setWidget(param_widget) - param_area.setWidgetResizable(True) - - grid_layout.addWidget(param_area, 0, 1) - - # ########################################################################### - # ############## The UI form ################################################ - # ########################################################################### - self.basic_box = QtWidgets.QGroupBox() - self.basic_box.setStyleSheet(""" - QGroupBox - { - font-size: 16px; - font-weight: bold; - } - """) - self.basic_vlay = QtWidgets.QVBoxLayout() - self.basic_box.setTitle(_("Basic Geo Parameters")) - self.basic_box.setFixedWidth(250) - - self.advanced_box = QtWidgets.QGroupBox() - self.advanced_box.setStyleSheet(""" - QGroupBox - { - font-size: 16px; - font-weight: bold; - } - """) - self.advanced_vlay = QtWidgets.QVBoxLayout() - self.advanced_box.setTitle(_("Advanced Geo Parameters")) - self.advanced_box.setFixedWidth(250) - - self.ncc_box = QtWidgets.QGroupBox() - self.ncc_box.setStyleSheet(""" - QGroupBox - { - font-size: 16px; - font-weight: bold; - } - """) - self.ncc_vlay = QtWidgets.QVBoxLayout() - self.ncc_box.setTitle(_("NCC Parameters")) - self.ncc_box.setFixedWidth(250) - - self.paint_box = QtWidgets.QGroupBox() - self.paint_box.setStyleSheet(""" - QGroupBox - { - font-size: 16px; - font-weight: bold; - } - """) - self.paint_vlay = QtWidgets.QVBoxLayout() - self.paint_box.setTitle(_("Paint Parameters")) - self.paint_box.setFixedWidth(250) - - self.basic_box.setLayout(self.basic_vlay) - self.advanced_box.setLayout(self.advanced_vlay) - self.ncc_box.setLayout(self.ncc_vlay) - self.paint_box.setLayout(self.paint_vlay) - - geo_vlay = QtWidgets.QVBoxLayout() - geo_vlay.addWidget(self.basic_box) - geo_vlay.addWidget(self.advanced_box) - geo_vlay.addStretch() - - tools_vlay = QtWidgets.QVBoxLayout() - tools_vlay.addWidget(self.ncc_box) - tools_vlay.addWidget(self.paint_box) - tools_vlay.addStretch() - - param_hlay.addLayout(geo_vlay) - param_hlay.addLayout(tools_vlay) - param_hlay.addStretch() - - # ########################################################################### - # ############### BASIC UI form ############################################# - # ########################################################################### - - self.grid0 = QtWidgets.QGridLayout() - self.basic_vlay.addLayout(self.grid0) - self.grid0.setColumnStretch(0, 0) - self.grid0.setColumnStretch(1, 1) - self.basic_vlay.addStretch() - - # Tool Name - self.name_label = QtWidgets.QLabel('%s:' % _('Tool Name')) - self.name_label.setToolTip( - _("Tool name.\n" - "This is not used in the app, it's function\n" - "is to serve as a note for the user.")) - - self.name_entry = FCEntry() - self.name_entry.setObjectName('gdb_name') - - self.grid0.addWidget(self.name_label, 0, 0) - self.grid0.addWidget(self.name_entry, 0, 1) - - # Tool Dia - self.dia_label = QtWidgets.QLabel('%s:' % _('Tool Dia')) - self.dia_label.setToolTip( - _("Tool Diameter.")) - - self.dia_entry = FCDoubleSpinner() - self.dia_entry.set_range(-9999.9999, 9999.9999) - self.dia_entry.set_precision(self.decimals) - self.dia_entry.setObjectName('gdb_dia') - - self.grid0.addWidget(self.dia_label, 1, 0) - self.grid0.addWidget(self.dia_entry, 1, 1) - - # Tool Shape - self.shape_label = QtWidgets.QLabel('%s:' % _('Tool Shape')) - self.shape_label.setToolTip( - _("Tool Shape. \n" - "Can be:\n" - "C1 ... C4 = circular tool with x flutes\n" - "B = ball tip milling tool\n" - "V = v-shape milling tool")) - - self.shape_combo = FCComboBox() - self.shape_combo.addItems(["C1", "C2", "C3", "C4", "B", "V"]) - self.shape_combo.setObjectName('gdb_shape') - - self.grid0.addWidget(self.shape_label, 2, 0) - self.grid0.addWidget(self.shape_combo, 2, 1) - - # Cut Z - self.cutz_label = QtWidgets.QLabel('%s:' % _("Cut Z")) - self.cutz_label.setToolTip( - _("Cutting Depth.\n" - "The depth at which to cut into material.")) - - self.cutz_entry = FCDoubleSpinner() - self.cutz_entry.set_range(-9999.9999, 9999.9999) - self.cutz_entry.set_precision(self.decimals) - self.cutz_entry.setObjectName('gdb_cutz') - - self.grid0.addWidget(self.cutz_label, 4, 0) - self.grid0.addWidget(self.cutz_entry, 4, 1) - - # Multi Depth - self.multidepth_label = QtWidgets.QLabel('%s:' % _("MultiDepth")) - self.multidepth_label.setToolTip( - _("Multi Depth.\n" - "Selecting this will allow cutting in multiple passes,\n" - "each pass adding a DPP parameter depth.")) - - self.multidepth_cb = FCCheckBox() - self.multidepth_cb.setObjectName('gdb_multidepth') - - self.grid0.addWidget(self.multidepth_label, 5, 0) - self.grid0.addWidget(self.multidepth_cb, 5, 1) - - # Depth Per Pass - self.dpp_label = QtWidgets.QLabel('%s:' % _("DPP")) - self.dpp_label.setToolTip( - _("DPP. Depth per Pass.\n" - "The value used to cut into material on each pass.")) - - self.multidepth_entry = FCDoubleSpinner() - self.multidepth_entry.set_range(-9999.9999, 9999.9999) - self.multidepth_entry.set_precision(self.decimals) - self.multidepth_entry.setObjectName('gdb_multidepth_entry') - - self.grid0.addWidget(self.dpp_label, 7, 0) - self.grid0.addWidget(self.multidepth_entry, 7, 1) - - # Travel Z - self.travelz_label = QtWidgets.QLabel('%s:' % _("Travel Z")) - self.travelz_label.setToolTip( - _("Clearance Height.\n" - "Height at which the milling bit will travel between cuts,\n" - "above the surface of the material, avoiding all fixtures.")) - - self.travelz_entry = FCDoubleSpinner() - self.travelz_entry.set_range(-9999.9999, 9999.9999) - self.travelz_entry.set_precision(self.decimals) - self.travelz_entry.setObjectName('gdb_travel') - - self.grid0.addWidget(self.travelz_label, 9, 0) - self.grid0.addWidget(self.travelz_entry, 9, 1) - - # Feedrate X-Y - self.frxy_label = QtWidgets.QLabel('%s:' % _("Feedrate X-Y")) - self.frxy_label.setToolTip( - _("Feedrate X-Y. Feedrate\n" - "The speed on XY plane used while cutting into material.")) - - self.frxy_entry = FCDoubleSpinner() - self.frxy_entry.set_range(-999999.9999, 999999.9999) - self.frxy_entry.set_precision(self.decimals) - self.frxy_entry.setObjectName('gdb_frxy') - - self.grid0.addWidget(self.frxy_label, 12, 0) - self.grid0.addWidget(self.frxy_entry, 12, 1) - - # Feedrate Z - self.frz_label = QtWidgets.QLabel('%s:' % _("Feedrate Z")) - self.frz_label.setToolTip( - _("Feedrate Z\n" - "The speed on Z plane.")) - - self.frz_entry = FCDoubleSpinner() - self.frz_entry.set_range(-999999.9999, 999999.9999) - self.frz_entry.set_precision(self.decimals) - self.frz_entry.setObjectName('gdb_frz') - - self.grid0.addWidget(self.frz_label, 14, 0) - self.grid0.addWidget(self.frz_entry, 14, 1) - - # Spindle Spped - self.spindle_label = QtWidgets.QLabel('%s:' % _("Spindle Speed")) - self.spindle_label.setToolTip( - _("Spindle Speed.\n" - "If it's left empty it will not be used.\n" - "The speed of the spindle in RPM.")) - - self.spindle_entry = FCDoubleSpinner() - self.spindle_entry.set_range(-999999.9999, 999999.9999) - self.spindle_entry.set_precision(self.decimals) - self.spindle_entry.setObjectName('gdb_spindle') - - self.grid0.addWidget(self.spindle_label, 15, 0) - self.grid0.addWidget(self.spindle_entry, 15, 1) - - # Dwell - self.dwell_label = QtWidgets.QLabel('%s:' % _("Dwell")) - self.dwell_label.setToolTip( - _("Dwell.\n" - "Check this if a delay is needed to allow\n" - "the spindle motor to reach it's set speed.")) - - self.dwell_cb = FCCheckBox() - self.dwell_cb.setObjectName('gdb_dwell') - - self.grid0.addWidget(self.dwell_label, 16, 0) - self.grid0.addWidget(self.dwell_cb, 16, 1) - - # Dwell Time - self.dwelltime_label = QtWidgets.QLabel('%s:' % _("Dwelltime")) - self.dwelltime_label.setToolTip( - _("Dwell Time.\n" - "A delay used to allow the motor spindle reach it's set speed.")) - - self.dwelltime_entry = FCDoubleSpinner() - self.dwelltime_entry.set_range(0.0000, 9999.9999) - self.dwelltime_entry.set_precision(self.decimals) - self.dwelltime_entry.setObjectName('gdb_dwelltime') - - self.grid0.addWidget(self.dwelltime_label, 17, 0) - self.grid0.addWidget(self.dwelltime_entry, 17, 1) - - # ########################################################################### - # ############### ADVANCED UI form ########################################## - # ########################################################################### - - self.grid1 = QtWidgets.QGridLayout() - self.advanced_vlay.addLayout(self.grid1) - self.grid1.setColumnStretch(0, 0) - self.grid1.setColumnStretch(1, 1) - self.advanced_vlay.addStretch() - - # Tool Type - self.type_label = QtWidgets.QLabel('%s:' % _("Tool Type")) - self.type_label.setToolTip( - _("Tool Type.\n" - "Can be:\n" - "Iso = isolation cut\n" - "Rough = rough cut, low feedrate, multiple passes\n" - "Finish = finishing cut, high feedrate")) - - self.type_combo = FCComboBox() - self.type_combo.addItems(["Iso", "Rough", "Finish"]) - self.type_combo.setObjectName('gdb_type') - - self.grid1.addWidget(self.type_label, 0, 0) - self.grid1.addWidget(self.type_combo, 0, 1) - - # Tool Offset - self.tooloffset_label = QtWidgets.QLabel('%s:' % _('Tool Offset')) - self.tooloffset_label.setToolTip( - _("Tool Offset.\n" - "Can be of a few types:\n" - "Path = zero offset\n" - "In = offset inside by half of tool diameter\n" - "Out = offset outside by half of tool diameter\n" - "Custom = custom offset using the Custom Offset value")) - - self.tooloffset_combo = FCComboBox() - self.tooloffset_combo.addItems(["Path", "In", "Out", "Custom"]) - self.tooloffset_combo.setObjectName('gdb_tool_offset') - - self.grid1.addWidget(self.tooloffset_label, 2, 0) - self.grid1.addWidget(self.tooloffset_combo, 2, 1) - - # Custom Offset - self.custom_offset_label = QtWidgets.QLabel('%s:' % _("Custom Offset")) - self.custom_offset_label.setToolTip( - _("Custom Offset.\n" - "A value to be used as offset from the current path.")) - - self.custom_offset_entry = FCDoubleSpinner() - self.custom_offset_entry.set_range(-9999.9999, 9999.9999) - self.custom_offset_entry.set_precision(self.decimals) - self.custom_offset_entry.setObjectName('gdb_custom_offset') - - self.grid1.addWidget(self.custom_offset_label, 5, 0) - self.grid1.addWidget(self.custom_offset_entry, 5, 1) - - # V-Dia - self.vdia_label = QtWidgets.QLabel('%s:' % _("V-Dia")) - self.vdia_label.setToolTip( - _("V-Dia.\n" - "Diameter of the tip for V-Shape Tools.")) - - self.vdia_entry = FCDoubleSpinner() - self.vdia_entry.set_range(0.0000, 9999.9999) - self.vdia_entry.set_precision(self.decimals) - self.vdia_entry.setObjectName('gdb_vdia') - - self.grid1.addWidget(self.vdia_label, 7, 0) - self.grid1.addWidget(self.vdia_entry, 7, 1) - - # V-Angle - self.vangle_label = QtWidgets.QLabel('%s:' % _("V-Angle")) - self.vangle_label.setToolTip( - _("V-Agle.\n" - "Angle at the tip for the V-Shape Tools.")) - - self.vangle_entry = FCDoubleSpinner() - self.vangle_entry.set_range(-360.0, 360.0) - self.vangle_entry.set_precision(self.decimals) - self.vangle_entry.setObjectName('gdb_vangle') - - self.grid1.addWidget(self.vangle_label, 8, 0) - self.grid1.addWidget(self.vangle_entry, 8, 1) - - # Feedrate Rapids - self.frapids_label = QtWidgets.QLabel('%s:' % _("FR Rapids")) - self.frapids_label.setToolTip( - _("FR Rapids. Feedrate Rapids\n" - "Speed used while moving as fast as possible.\n" - "This is used only by some devices that can't use\n" - "the G0 g-code command. Mostly 3D printers.")) - - self.frapids_entry = FCDoubleSpinner() - self.frapids_entry.set_range(0.0000, 9999.9999) - self.frapids_entry.set_precision(self.decimals) - self.frapids_entry.setObjectName('gdb_frapids') - - self.grid1.addWidget(self.frapids_label, 10, 0) - self.grid1.addWidget(self.frapids_entry, 10, 1) - - # Extra Cut - self.ecut_label = QtWidgets.QLabel('%s:' % _("ExtraCut")) - self.ecut_label.setToolTip( - _("Extra Cut.\n" - "If checked, after a isolation is finished an extra cut\n" - "will be added where the start and end of isolation meet\n" - "such as that this point is covered by this extra cut to\n" - "ensure a complete isolation.")) - - self.ecut_cb = FCCheckBox() - self.ecut_cb.setObjectName('gdb_ecut') - - self.grid1.addWidget(self.ecut_label, 12, 0) - self.grid1.addWidget(self.ecut_cb, 12, 1) - - # Extra Cut Length - self.ecut_length_label = QtWidgets.QLabel('%s:' % _("E-Cut Length")) - self.ecut_length_label.setToolTip( - _("Extra Cut length.\n" - "If checked, after a isolation is finished an extra cut\n" - "will be added where the start and end of isolation meet\n" - "such as that this point is covered by this extra cut to\n" - "ensure a complete isolation. This is the length of\n" - "the extra cut.")) - - self.ecut_length_entry = FCDoubleSpinner() - self.ecut_length_entry.set_range(0.0000, 9999.9999) - self.ecut_length_entry.set_precision(self.decimals) - self.ecut_length_entry.setObjectName('gdb_ecut_length') - - self.grid1.addWidget(self.ecut_length_label, 13, 0) - self.grid1.addWidget(self.ecut_length_entry, 13, 1) - - # ########################################################################### - # ############### NCC UI form ############################################### - # ########################################################################### - - self.grid2 = QtWidgets.QGridLayout() - self.ncc_vlay.addLayout(self.grid2) - self.grid2.setColumnStretch(0, 0) - self.grid2.setColumnStretch(1, 1) - self.ncc_vlay.addStretch() - - # Operation - op_label = QtWidgets.QLabel('%s:' % _('Operation')) - op_label.setToolTip( - _("The 'Operation' can be:\n" - "- Isolation -> will ensure that the non-copper clearing is always complete.\n" - "If it's not successful then the non-copper clearing will fail, too.\n" - "- Clear -> the regular non-copper clearing.") - ) - - self.op_radio = RadioSet([ - {"label": _("Clear"), "value": "clear"}, - {"label": _("Isolation"), "value": "iso"} - ], orientation='horizontal', stretch=False) - self.op_radio.setObjectName("gdb_n_operation") - - self.grid2.addWidget(op_label, 13, 0) - self.grid2.addWidget(self.op_radio, 13, 1) - - # Milling Type Radio Button - self.milling_type_label = QtWidgets.QLabel('%s:' % _('Milling Type')) - self.milling_type_label.setToolTip( - _("Milling type when the selected tool is of type: 'iso_op':\n" - "- climb / best for precision milling and to reduce tool usage\n" - "- conventional / useful when there is no backlash compensation") - ) - - self.milling_type_radio = RadioSet([{'label': _('Climb'), 'value': 'cl'}, - {'label': _('Conventional'), 'value': 'cv'}]) - self.milling_type_radio.setToolTip( - _("Milling type when the selected tool is of type: 'iso_op':\n" - "- climb / best for precision milling and to reduce tool usage\n" - "- conventional / useful when there is no backlash compensation") - ) - self.milling_type_radio.setObjectName("gdb_n_milling_type") - - self.grid2.addWidget(self.milling_type_label, 14, 0) - self.grid2.addWidget(self.milling_type_radio, 14, 1) - - # Overlap Entry - nccoverlabel = QtWidgets.QLabel('%s:' % _('Overlap')) - nccoverlabel.setToolTip( - _("How much (percentage) of the tool width to overlap each tool pass.\n" - "Adjust the value starting with lower values\n" - "and increasing it if areas that should be cleared are still \n" - "not cleared.\n" - "Lower values = faster processing, faster execution on CNC.\n" - "Higher values = slow processing and slow execution on CNC\n" - "due of too many paths.") - ) - self.ncc_overlap_entry = FCDoubleSpinner(suffix='%') - self.ncc_overlap_entry.set_precision(self.decimals) - self.ncc_overlap_entry.setWrapping(True) - self.ncc_overlap_entry.setRange(0.000, 99.9999) - self.ncc_overlap_entry.setSingleStep(0.1) - self.ncc_overlap_entry.setObjectName("gdb_n_overlap") - - self.grid2.addWidget(nccoverlabel, 15, 0) - self.grid2.addWidget(self.ncc_overlap_entry, 15, 1) - - # Margin - nccmarginlabel = QtWidgets.QLabel('%s:' % _('Margin')) - nccmarginlabel.setToolTip( - _("Bounding box margin.") - ) - self.ncc_margin_entry = FCDoubleSpinner() - self.ncc_margin_entry.set_precision(self.decimals) - self.ncc_margin_entry.set_range(-9999.9999, 9999.9999) - self.ncc_margin_entry.setObjectName("gdb_n_margin") - - self.grid2.addWidget(nccmarginlabel, 16, 0) - self.grid2.addWidget(self.ncc_margin_entry, 16, 1) - - # Method - methodlabel = QtWidgets.QLabel('%s:' % _('Method')) - methodlabel.setToolTip( - _("Algorithm for copper clearing:\n" - "- Standard: Fixed step inwards.\n" - "- Seed-based: Outwards from seed.\n" - "- Line-based: Parallel lines.") - ) - - self.ncc_method_combo = FCComboBox() - self.ncc_method_combo.addItems( - [_("Standard"), _("Seed"), _("Lines")] - ) - self.ncc_method_combo.setObjectName("gdb_n_method") - - self.grid2.addWidget(methodlabel, 17, 0) - self.grid2.addWidget(self.ncc_method_combo, 17, 1) - - # Connect lines - self.ncc_connect_cb = FCCheckBox('%s' % _("Connect")) - self.ncc_connect_cb.setObjectName("gdb_n_connect") - - self.ncc_connect_cb.setToolTip( - _("Draw lines between resulting\n" - "segments to minimize tool lifts.") - ) - self.grid2.addWidget(self.ncc_connect_cb, 18, 0) - - # Contour - self.ncc_contour_cb = FCCheckBox('%s' % _("Contour")) - self.ncc_contour_cb.setObjectName("gdb_n_contour") - - self.ncc_contour_cb.setToolTip( - _("Cut around the perimeter of the polygon\n" - "to trim rough edges.") - ) - self.grid2.addWidget(self.ncc_contour_cb, 18, 1) - - # ## NCC Offset choice - self.ncc_choice_offset_cb = FCCheckBox('%s' % _("Offset")) - self.ncc_choice_offset_cb.setObjectName("gdb_n_offset") - - self.ncc_choice_offset_cb.setToolTip( - _("If used, it will add an offset to the copper features.\n" - "The copper clearing will finish to a distance\n" - "from the copper features.\n" - "The value can be between 0 and 10 FlatCAM units.") - ) - self.grid2.addWidget(self.ncc_choice_offset_cb, 19, 0) - - # ## NCC Offset Entry - self.ncc_offset_spinner = FCDoubleSpinner() - self.ncc_offset_spinner.set_range(0.00, 10.00) - self.ncc_offset_spinner.set_precision(4) - self.ncc_offset_spinner.setWrapping(True) - self.ncc_offset_spinner.setObjectName("gdb_n_offset_value") - - units = self.app.defaults['units'].upper() - if units == 'MM': - self.ncc_offset_spinner.setSingleStep(0.1) - else: - self.ncc_offset_spinner.setSingleStep(0.01) - - self.grid2.addWidget(self.ncc_offset_spinner, 19, 1) - - # ########################################################################### - # ############### Paint UI form ############################################# - # ########################################################################### - - self.grid3 = QtWidgets.QGridLayout() - self.paint_vlay.addLayout(self.grid3) - self.grid3.setColumnStretch(0, 0) - self.grid3.setColumnStretch(1, 1) - self.paint_vlay.addStretch() - - # Overlap - ovlabel = QtWidgets.QLabel('%s:' % _('Overlap')) - ovlabel.setToolTip( - _("How much (percentage) of the tool width to overlap each tool pass.\n" - "Adjust the value starting with lower values\n" - "and increasing it if areas that should be painted are still \n" - "not painted.\n" - "Lower values = faster processing, faster execution on CNC.\n" - "Higher values = slow processing and slow execution on CNC\n" - "due of too many paths.") - ) - self.paintoverlap_entry = FCDoubleSpinner(suffix='%') - self.paintoverlap_entry.set_precision(3) - self.paintoverlap_entry.setWrapping(True) - self.paintoverlap_entry.setRange(0.0000, 99.9999) - self.paintoverlap_entry.setSingleStep(0.1) - self.paintoverlap_entry.setObjectName('gdb_p_overlap') - - self.grid3.addWidget(ovlabel, 1, 0) - self.grid3.addWidget(self.paintoverlap_entry, 1, 1) - - # Margin - marginlabel = QtWidgets.QLabel('%s:' % _('Margin')) - marginlabel.setToolTip( - _("Distance by which to avoid\n" - "the edges of the polygon to\n" - "be painted.") - ) - self.paintmargin_entry = FCDoubleSpinner() - self.paintmargin_entry.set_precision(self.decimals) - self.paintmargin_entry.set_range(-9999.9999, 9999.9999) - self.paintmargin_entry.setObjectName('gdb_p_margin') - - self.grid3.addWidget(marginlabel, 2, 0) - self.grid3.addWidget(self.paintmargin_entry, 2, 1) - - # Method - methodlabel = QtWidgets.QLabel('%s:' % _('Method')) - methodlabel.setToolTip( - _("Algorithm for painting:\n" - "- Standard: Fixed step inwards.\n" - "- Seed-based: Outwards from seed.\n" - "- Line-based: Parallel lines.\n" - "- Laser-lines: Active only for Gerber objects.\n" - "Will create lines that follow the traces.\n" - "- Combo: In case of failure a new method will be picked from the above\n" - "in the order specified.") - ) - - self.paintmethod_combo = FCComboBox() - self.paintmethod_combo.addItems( - [_("Standard"), _("Seed"), _("Lines"), _("Laser_lines"), _("Combo")] - ) - idx = self.paintmethod_combo.findText(_("Laser_lines")) - self.paintmethod_combo.model().item(idx).setEnabled(False) - - self.paintmethod_combo.setObjectName('gdb_p_method') - - self.grid3.addWidget(methodlabel, 7, 0) - self.grid3.addWidget(self.paintmethod_combo, 7, 1) - - # Connect lines - self.pathconnect_cb = FCCheckBox('%s' % _("Connect")) - self.pathconnect_cb.setObjectName('gdb_p_connect') - self.pathconnect_cb.setToolTip( - _("Draw lines between resulting\n" - "segments to minimize tool lifts.") - ) - - self.paintcontour_cb = FCCheckBox('%s' % _("Contour")) - self.paintcontour_cb.setObjectName('gdb_p_contour') - self.paintcontour_cb.setToolTip( - _("Cut around the perimeter of the polygon\n" - "to trim rough edges.") - ) - - self.grid3.addWidget(self.pathconnect_cb, 10, 0) - self.grid3.addWidget(self.paintcontour_cb, 10, 1) - - # #################################################################### - # #################################################################### - # GUI for the lower part of the window - # #################################################################### - # #################################################################### - - new_vlay = QtWidgets.QVBoxLayout() - grid_layout.addLayout(new_vlay, 1, 0, 1, 2) - - self.buttons_frame = QtWidgets.QFrame() - self.buttons_frame.setContentsMargins(0, 0, 0, 0) - new_vlay.addWidget(self.buttons_frame) - self.buttons_box = QtWidgets.QHBoxLayout() - self.buttons_box.setContentsMargins(0, 0, 0, 0) - self.buttons_frame.setLayout(self.buttons_box) - self.buttons_frame.show() - - add_entry_btn = FCButton(_("Add Tool in DB")) - add_entry_btn.setToolTip( - _("Add a new tool in the Tools Database.\n" - "It will be used in the Geometry UI.\n" - "You can edit it after it is added.") - ) - self.buttons_box.addWidget(add_entry_btn) - - # add_fct_entry_btn = FCButton(_("Add Paint/NCC Tool in DB")) - # add_fct_entry_btn.setToolTip( - # _("Add a new tool in the Tools Database.\n" - # "It will be used in the Paint/NCC Tools UI.\n" - # "You can edit it after it is added.") - # ) - # self.buttons_box.addWidget(add_fct_entry_btn) - - remove_entry_btn = FCButton(_("Delete Tool from DB")) - remove_entry_btn.setToolTip( - _("Remove a selection of tools in the Tools Database.") - ) - self.buttons_box.addWidget(remove_entry_btn) - - export_db_btn = FCButton(_("Export DB")) - export_db_btn.setToolTip( - _("Save the Tools Database to a custom text file.") - ) - self.buttons_box.addWidget(export_db_btn) - - import_db_btn = FCButton(_("Import DB")) - import_db_btn.setToolTip( - _("Load the Tools Database information's from a custom text file.") - ) - self.buttons_box.addWidget(import_db_btn) - - self.add_tool_from_db = FCButton(_("Add Tool from Tools DB")) - self.add_tool_from_db.setToolTip( - _("Add a new tool in the Tools Table of the\n" - "active Geometry object after selecting a tool\n" - "in the Tools Database.") - ) - self.add_tool_from_db.hide() - - self.cancel_tool_from_db = FCButton(_("Cancel")) - self.cancel_tool_from_db.hide() - - hlay = QtWidgets.QHBoxLayout() - tree_layout.addLayout(hlay) - hlay.addWidget(self.add_tool_from_db) - hlay.addWidget(self.cancel_tool_from_db) - hlay.addStretch() - - # ############################################################################## - # ############################################################################## - # ########## SETUP THE DICTIONARIES THAT HOLD THE WIDGETS ##################### - # ############################################################################## - # ############################################################################## - - self.form_fields = { - # Basic - "name": self.name_entry, - "tooldia": self.dia_entry, - "tool_type": self.shape_combo, - "cutz": self.cutz_entry, - "multidepth": self.multidepth_cb, - "depthperpass": self.multidepth_entry, - "travelz": self.travelz_entry, - "feedrate": self.frxy_entry, - "feedrate_z": self.frz_entry, - "spindlespeed": self.spindle_entry, - "dwell": self.dwell_cb, - "dwelltime": self.dwelltime_entry, - - # Advanced - "type": self.type_combo, - "offset": self.tooloffset_combo, - "offset_value": self.custom_offset_entry, - "vtipdia": self.vdia_entry, - "vtipangle": self.vangle_entry, - "feedrate_rapid": self.frapids_entry, - "extracut": self.ecut_cb, - "extracut_length": self.ecut_length_entry, - - # NCC - "tools_nccoperation": self.op_radio, - "tools_nccmilling_type": self.milling_type_radio, - "tools_nccoverlap": self.ncc_overlap_entry, - "tools_nccmargin": self.ncc_margin_entry, - "tools_nccmethod": self.ncc_method_combo, - "tools_nccconnect": self.ncc_connect_cb, - "tools_ncccontour": self.ncc_contour_cb, - "tools_ncc_offset_choice": self.ncc_choice_offset_cb, - "tools_ncc_offset_value": self.ncc_offset_spinner, - - # Paint - "tools_paintoverlap": self.paintoverlap_entry, - "tools_paintmargin": self.paintmargin_entry, - "tools_paintmethod": self.paintmethod_combo, - "tools_pathconnect": self.pathconnect_cb, - "tools_paintcontour": self.paintcontour_cb, - } - - self.name2option = { - # Basic - "gdb_name": "name", - "gdb_dia": "tooldia", - "gdb_shape": "tool_type", - "gdb_cutz": "cutz", - "gdb_multidepth": "multidepth", - "gdb_multidepth_entry": "depthperpass", - "gdb_travel": "travelz", - "gdb_frxy": "feedrate", - "gdb_frz": "feedrate_z", - "gdb_spindle": "spindlespeed", - "gdb_dwell": "dwell", - "gdb_dwelltime": "dwelltime", - - # Advanced - "gdb_type": "type", - "gdb_tool_offset": "offset", - "gdb_custom_offset": "offset_value", - "gdb_vdia": "vtipdia", - "gdb_vangle": "vtipangle", - "gdb_frapids": "feedrate_rapid", - "gdb_ecut": "extracut", - "gdb_ecut_length": "extracut_length", - - # NCC - "gdb_n_operation": "tools_nccoperation", - "gdb_n_overlap": "tools_nccoverlap", - "gdb_n_margin": "tools_nccmargin", - "gdb_n_method": "tools_nccmethod", - "gdb_n_connect": "tools_nccconnect", - "gdb_n_contour": "tools_ncccontour", - "gdb_n_offset": "tools_ncc_offset_choice", - "gdb_n_offset_value": "tools_ncc_offset_value", - "gdb_n_milling_type": "tools_nccmilling_type", - - # Paint - 'gdb_p_overlap': "tools_paintoverlap", - 'gdb_p_margin': "tools_paintmargin", - 'gdb_p_method': "tools_paintmethod", - 'gdb_p_connect': "tools_pathconnect", - 'gdb_p_contour': "tools_paintcontour", - } - - self.current_toolid = None - - # variable to show if double clicking and item will trigger adding a tool from DB - self.ok_to_add = False - - # ############################################################################## - # ######################## SIGNALS ############################################# - # ############################################################################## - - add_entry_btn.clicked.connect(self.on_tool_add) - remove_entry_btn.clicked.connect(self.on_tool_delete) - export_db_btn.clicked.connect(self.on_export_tools_db_file) - import_db_btn.clicked.connect(self.on_import_tools_db_file) - # closebtn.clicked.connect(self.accept) - - self.add_tool_from_db.clicked.connect(self.on_tool_requested_from_app) - self.cancel_tool_from_db.clicked.connect(self.on_cancel_tool) - - # self.tree_widget.selectionModel().selectionChanged.connect(self.on_list_selection_change) - self.tree_widget.currentItemChanged.connect(self.on_list_selection_change) - self.tree_widget.itemChanged.connect(self.on_list_item_edited) - self.tree_widget.customContextMenuRequested.connect(self.on_menu_request) - - self.tree_widget.itemDoubleClicked.connect(self.on_item_double_clicked) - - self.setup_db_ui() - - def on_menu_request(self, pos): - - menu = QtWidgets.QMenu() - add_tool = menu.addAction(QtGui.QIcon(self.app.resource_location + '/plus16.png'), _("Add to DB")) - add_tool.triggered.connect(self.on_tool_add) - - copy_tool = menu.addAction(QtGui.QIcon(self.app.resource_location + '/copy16.png'), _("Copy from DB")) - copy_tool.triggered.connect(self.on_tool_copy) - - delete_tool = menu.addAction(QtGui.QIcon(self.app.resource_location + '/delete32.png'), _("Delete from DB")) - delete_tool.triggered.connect(self.on_tool_delete) - - # tree_item = self.tree_widget.itemAt(pos) - menu.exec(self.tree_widget.viewport().mapToGlobal(pos)) - - def on_item_double_clicked(self, item, column): - if column == 0 and self.ok_to_add is True: - self.ok_to_add = False - self.on_tool_requested_from_app() - - def on_list_selection_change(self, current, previous): - # for idx in current.indexes(): - # print(idx.data()) - # print(current.text(0)) - self.current_toolid = int(current.text(0)) - - self.storage_to_form(self.db_tool_dict[current.text(0)]) - - def on_list_item_edited(self, item, column): - if column == 0: - return - - self.name_entry.set_value(item.text(1)) - - def storage_to_form(self, dict_storage): - for form_key in self.form_fields: - for storage_key in dict_storage: - if form_key == storage_key: - try: - self.form_fields[form_key].set_value(dict_storage[form_key]) - except Exception as e: - print(str(e)) - if storage_key == 'data': - for data_key in dict_storage[storage_key]: - if form_key == data_key: - try: - self.form_fields[form_key].set_value(dict_storage['data'][data_key]) - except Exception as e: - print(str(e)) - - def form_to_storage(self, tool): - self.blockSignals(True) - - widget_changed = self.sender() - wdg_objname = widget_changed.objectName() - option_changed = self.name2option[wdg_objname] - - tooluid_item = int(tool) - - for tooluid_key, tooluid_val in self.db_tool_dict.items(): - if int(tooluid_key) == tooluid_item: - new_option_value = self.form_fields[option_changed].get_value() - if option_changed in tooluid_val: - tooluid_val[option_changed] = new_option_value - if option_changed in tooluid_val['data']: - tooluid_val['data'][option_changed] = new_option_value - - self.blockSignals(False) - - def setup_db_ui(self): - filename = self.app.data_path + '/geo_tools_db.FlatDB' - - # load the database tools from the file - try: - with open(filename) as f: - tools = f.read() - except IOError: - self.app.log.error("Could not load tools DB file.") - self.app.inform.emit('[ERROR] %s' % _("Could not load Tools DB file.")) - return - - try: - self.db_tool_dict = json.loads(tools) - except Exception: - e = sys.exc_info()[0] - self.app.log.error(str(e)) - self.app.inform.emit('[ERROR] %s' % _("Failed to parse Tools DB file.")) - return - - self.app.inform.emit('[success] %s: %s' % (_("Loaded FlatCAM Tools DB from"), filename)) - - self.build_db_ui() - - def build_db_ui(self): - self.ui_disconnect() - nr_crt = 0 - - parent = self.tree_widget - self.tree_widget.blockSignals(True) - self.tree_widget.clear() - self.tree_widget.blockSignals(False) - - for toolid, dict_val in self.db_tool_dict.items(): - row = nr_crt - nr_crt += 1 - - t_name = dict_val['name'] - try: - # self.add_tool_table_line(row, name=t_name, tooldict=dict_val) - self.tree_widget.blockSignals(True) - try: - self.tree_widget.addParentEditable(parent=parent, title=[str(row+1), t_name], editable=True) - except Exception as e: - print('FlatCAMCoomn.ToolDB2.build_db_ui() -> ', str(e)) - self.tree_widget.blockSignals(False) - except Exception as e: - self.app.log.debug("ToolDB.build_db_ui.add_tool_table_line() --> %s" % str(e)) - - if self.current_toolid is None or self.current_toolid < 1: - if self.db_tool_dict: - self.storage_to_form(self.db_tool_dict['1']) - - # Enable GUI - self.basic_box.setEnabled(True) - self.advanced_box.setEnabled(True) - self.ncc_box.setEnabled(True) - self.paint_box.setEnabled(True) - - self.tree_widget.setCurrentItem(self.tree_widget.topLevelItem(0)) - # self.tree_widget.setFocus() - - else: - # Disable GUI - self.basic_box.setEnabled(False) - self.advanced_box.setEnabled(False) - self.ncc_box.setEnabled(False) - self.paint_box.setEnabled(False) - else: - self.storage_to_form(self.db_tool_dict[str(self.current_toolid)]) - - self.ui_connect() - - def on_tool_add(self): - """ - Add a tool in the DB Tool Table - :return: None - """ - - default_data = {} - default_data.update({ - "plot": True, - "cutz": float(self.app.defaults["geometry_cutz"]), - "multidepth": self.app.defaults["geometry_multidepth"], - "depthperpass": float(self.app.defaults["geometry_depthperpass"]), - "vtipdia": float(self.app.defaults["geometry_vtipdia"]), - "vtipangle": float(self.app.defaults["geometry_vtipangle"]), - "travelz": float(self.app.defaults["geometry_travelz"]), - "feedrate": float(self.app.defaults["geometry_feedrate"]), - "feedrate_z": float(self.app.defaults["geometry_feedrate_z"]), - "feedrate_rapid": float(self.app.defaults["geometry_feedrate_rapid"]), - "spindlespeed": self.app.defaults["geometry_spindlespeed"], - "dwell": self.app.defaults["geometry_dwell"], - "dwelltime": float(self.app.defaults["geometry_dwelltime"]), - "ppname_g": self.app.defaults["geometry_ppname_g"], - "extracut": self.app.defaults["geometry_extracut"], - "extracut_length": float(self.app.defaults["geometry_extracut_length"]), - "toolchange": self.app.defaults["geometry_toolchange"], - "toolchangexy": self.app.defaults["geometry_toolchangexy"], - "toolchangez": float(self.app.defaults["geometry_toolchangez"]), - "startz": self.app.defaults["geometry_startz"], - "endz": float(self.app.defaults["geometry_endz"]), - - # NCC - "tools_nccoperation": self.app.defaults["tools_nccoperation"], - "tools_nccmilling_type": self.app.defaults["tools_nccmilling_type"], - "tools_nccoverlap": float(self.app.defaults["tools_nccoverlap"]), - "tools_nccmargin": float(self.app.defaults["tools_nccmargin"]), - "tools_nccmethod": self.app.defaults["tools_nccmethod"], - "tools_nccconnect": self.app.defaults["tools_nccconnect"], - "tools_ncccontour": self.app.defaults["tools_ncccontour"], - "tools_ncc_offset_choice": self.app.defaults["tools_ncc_offset_choice"], - "tools_ncc_offset_value": float(self.app.defaults["tools_ncc_offset_value"]), - - # Paint - "tools_paintoverlap": float(self.app.defaults["tools_paintoverlap"]), - "tools_paintmargin": float(self.app.defaults["tools_paintmargin"]), - "tools_paintmethod": self.app.defaults["tools_paintmethod"], - "tools_pathconnect": self.app.defaults["tools_pathconnect"], - "tools_paintcontour": self.app.defaults["tools_paintcontour"], - }) - - dict_elem = {} - dict_elem['name'] = 'new_tool' - if type(self.app.defaults["geometry_cnctooldia"]) == float: - dict_elem['tooldia'] = self.app.defaults["geometry_cnctooldia"] - else: - try: - tools_string = self.app.defaults["geometry_cnctooldia"].split(",") - tools_diameters = [eval(a) for a in tools_string if a != ''] - dict_elem['tooldia'] = tools_diameters[0] if tools_diameters else 0.0 - except Exception as e: - self.app.log.debug("ToolDB.on_tool_add() --> %s" % str(e)) - return - - dict_elem['offset'] = 'Path' - dict_elem['offset_value'] = 0.0 - dict_elem['type'] = 'Rough' - dict_elem['tool_type'] = 'C1' - dict_elem['data'] = default_data - - new_toolid = len(self.db_tool_dict) + 1 - self.db_tool_dict[str(new_toolid)] = deepcopy(dict_elem) - - # add the new entry to the Tools DB table - self.update_storage() - self.build_db_ui() - self.app.inform.emit('[success] %s' % _("Tool added to DB.")) - - def on_tool_copy(self): - """ - Copy a selection of Tools in the Tools DB table - :return: - """ - new_tool_id = len(self.db_tool_dict) - for item in self.tree_widget.selectedItems(): - old_tool_id = item.data(0, QtCore.Qt.DisplayRole) - - for toolid, dict_val in list(self.db_tool_dict.items()): - if int(old_tool_id) == int(toolid): - new_tool_id += 1 - new_key = str(new_tool_id) - - self.db_tool_dict.update({ - new_key: deepcopy(dict_val) - }) - - self.current_toolid = new_tool_id - - self.update_storage() - self.build_db_ui() - self.app.inform.emit('[success] %s' % _("Tool copied from Tools DB.")) - - def on_tool_delete(self): - """ - Delete a selection of Tools in the Tools DB table - :return: - """ - for item in self.tree_widget.selectedItems(): - toolname_to_remove = item.data(0, QtCore.Qt.DisplayRole) - - for toolid, dict_val in list(self.db_tool_dict.items()): - if int(toolname_to_remove) == int(toolid): - # remove from the storage - self.db_tool_dict.pop(toolid, None) - - self.current_toolid -= 1 - - self.update_storage() - self.build_db_ui() - self.app.inform.emit('[success] %s' % _("Tool removed from Tools DB.")) - - def on_export_tools_db_file(self): - self.app.report_usage("on_export_tools_db_file") - self.app.log.debug("on_export_tools_db_file()") - - date = str(datetime.today()).rpartition('.')[0] - date = ''.join(c for c in date if c not in ':-') - date = date.replace(' ', '_') - - filter__ = "Text File (*.TXT);;All Files (*.*)" - filename, _f = FCFileSaveDialog.get_saved_filename( caption=_("Export Tools Database"), - directory='{l_save}/FlatCAM_{n}_{date}'.format( - l_save=str(self.app.get_last_save_folder()), - n=_("Tools_Database"), - date=date), - filter=filter__) - - filename = str(filename) - - if filename == "": - self.app.inform.emit('[WARNING_NOTCL] %s' % _("Cancelled.")) - return - else: - try: - f = open(filename, 'w') - f.close() - except PermissionError: - self.app.inform.emit('[WARNING] %s' % - _("Permission denied, saving not possible.\n" - "Most likely another app is holding the file open and not accessible.")) - return - except IOError: - self.app.log.debug('Creating a new Tools DB file ...') - f = open(filename, 'w') - f.close() - except Exception: - e = sys.exc_info()[0] - self.app.log.error("Could not load Tools DB file.") - self.app.log.error(str(e)) - self.app.inform.emit('[ERROR_NOTCL] %s' % _("Could not load Tools DB file.")) - return - - # Save update options - try: - # Save Tools DB in a file - try: - with open(filename, "w") as f: - json.dump(self.db_tool_dict, f, default=to_dict, indent=2) - except Exception as e: - self.app.log.debug("App.on_save_tools_db() --> %s" % str(e)) - self.inform.emit('[ERROR_NOTCL] %s' % _("Failed to write Tools DB to file.")) - return - except Exception: - self.app.inform.emit('[ERROR_NOTCL] %s' % _("Failed to write Tools DB to file.")) - return - - self.app.inform.emit('[success] %s: %s' % (_("Exported Tools DB to"), filename)) - - def on_import_tools_db_file(self): - self.app.report_usage("on_import_tools_db_file") - self.app.log.debug("on_import_tools_db_file()") - - filter__ = "Text File (*.TXT);;All Files (*.*)" - filename, _f = QtWidgets.QFileDialog.getOpenFileName(caption=_("Import FlatCAM Tools DB"), filter=filter__) - - if filename == "": - self.app.inform.emit('[WARNING_NOTCL] %s' % _("Cancelled.")) - else: - try: - with open(filename) as f: - tools_in_db = f.read() - except IOError: - self.app.log.error("Could not load Tools DB file.") - self.app.inform.emit('[ERROR_NOTCL] %s' % _("Could not load Tools DB file.")) - return - - try: - self.db_tool_dict = json.loads(tools_in_db) - except Exception: - e = sys.exc_info()[0] - self.app.log.error(str(e)) - self.app.inform.emit('[ERROR] %s' % _("Failed to parse Tools DB file.")) - return - - self.app.inform.emit('[success] %s: %s' % (_("Loaded FlatCAM Tools DB from"), filename)) - self.build_db_ui() - self.update_storage() - - def on_save_tools_db(self, silent=False): - self.app.log.debug("ToolsDB.on_save_button() --> Saving Tools Database to file.") - - filename = self.app.data_path + "/geo_tools_db.FlatDB" - - # Preferences save, update the color of the Tools DB Tab text - for idx in range(self.app.ui.plot_tab_area.count()): - if self.app.ui.plot_tab_area.tabText(idx) == _("Tools Database"): - self.app.ui.plot_tab_area.tabBar.setTabTextColor(idx, QtGui.QColor('black')) - - # Save Tools DB in a file - try: - f = open(filename, "w") - json.dump(self.db_tool_dict, f, default=to_dict, indent=2) - f.close() - except Exception as e: - self.app.log.debug("ToolsDB.on_save_tools_db() --> %s" % str(e)) - self.app.inform.emit('[ERROR_NOTCL] %s' % _("Failed to write Tools DB to file.")) - return - - if not silent: - self.app.inform.emit('[success] %s' % _("Saved Tools DB.")) - - def ui_connect(self): - # make sure that we don't make multiple connections to the widgets - self.ui_disconnect() - - self.name_entry.editingFinished.connect(self.update_tree_name) - - for key in self.form_fields: - wdg = self.form_fields[key] - - # FCEntry - if isinstance(wdg, FCEntry): - wdg.textChanged.connect(self.update_storage) - - # ComboBox - if isinstance(wdg, FCComboBox): - wdg.currentIndexChanged.connect(self.update_storage) - - # CheckBox - if isinstance(wdg, FCCheckBox): - wdg.toggled.connect(self.update_storage) - - # FCRadio - if isinstance(wdg, RadioSet): - wdg.activated_custom.connect(self.update_storage) - - # SpinBox, DoubleSpinBox - if isinstance(wdg, FCSpinner) or isinstance(wdg, FCDoubleSpinner): - wdg.valueChanged.connect(self.update_storage) - - def ui_disconnect(self): - try: - self.name_entry.editingFinished.disconnect(self.update_tree_name) - except (TypeError, AttributeError): - pass - - for key in self.form_fields: - wdg = self.form_fields[key] - - # FCEntry - if isinstance(wdg, FCEntry): - try: - wdg.textChanged.disconnect(self.update_storage) - except (TypeError, AttributeError): - pass - - # ComboBox - if isinstance(wdg, FCComboBox): - try: - wdg.currentIndexChanged.disconnect(self.update_storage) - except (TypeError, AttributeError): - pass - - # CheckBox - if isinstance(wdg, FCCheckBox): - try: - wdg.toggled.disconnect(self.update_storage) - except (TypeError, AttributeError): - pass - - # FCRadio - if isinstance(wdg, RadioSet): - try: - wdg.activated_custom.disconnect(self.update_storage) - except (TypeError, AttributeError): - pass - - # SpinBox, DoubleSpinBox - if isinstance(wdg, FCSpinner) or isinstance(wdg, FCDoubleSpinner): - try: - wdg.valueChanged.disconnect(self.update_storage) - except (TypeError, AttributeError): - pass - - def update_tree_name(self): - val = self.name_entry.get_value() - - item = self.tree_widget.currentItem() - # I'm setting the value for the second column (designated by 1) because first column holds the ID - # and second column holds the Name (this behavior is set in the build_ui method) - item.setData(1, QtCore.Qt.DisplayRole, val) - - def update_storage(self): - """ - Update the dictionary that is the storage of the tools 'database' - :return: - """ - tool_id = str(self.current_toolid) - - wdg = self.sender() - if wdg is None: - return - - wdg_name = wdg.objectName() - - try: - val = wdg.get_value() - except AttributeError: - return - - if wdg_name == "gdb_name": - self.db_tool_dict[tool_id]['name'] = val - elif wdg_name == "gdb_dia": - self.db_tool_dict[tool_id]['tooldia'] = val - elif wdg_name == "gdb_tool_offset": - self.db_tool_dict[tool_id]['offset'] = val - elif wdg_name == "gdb_custom_offset": - self.db_tool_dict[tool_id]['offset_value'] = val - elif wdg_name == "gdb_type": - self.db_tool_dict[tool_id]['type'] = val - elif wdg_name == "gdb_shape": - self.db_tool_dict[tool_id]['tool_type'] = val - else: - if wdg_name == "gdb_cutz": - self.db_tool_dict[tool_id]['data']['cutz'] = val - elif wdg_name == "gdb_multidepth": - self.db_tool_dict[tool_id]['data']['multidepth'] = val - elif wdg_name == "gdb_multidepth_entry": - self.db_tool_dict[tool_id]['data']['depthperpass'] = val - - elif wdg_name == "gdb_travel": - self.db_tool_dict[tool_id]['data']['travelz'] = val - elif wdg_name == "gdb_frxy": - self.db_tool_dict[tool_id]['data']['feedrate'] = val - elif wdg_name == "gdb_frz": - self.db_tool_dict[tool_id]['data']['feedrate_z'] = val - elif wdg_name == "gdb_spindle": - self.db_tool_dict[tool_id]['data']['spindlespeed'] = val - elif wdg_name == "gdb_dwell": - self.db_tool_dict[tool_id]['data']['dwell'] = val - elif wdg_name == "gdb_dwelltime": - self.db_tool_dict[tool_id]['data']['dwelltime'] = val - - elif wdg_name == "gdb_vdia": - self.db_tool_dict[tool_id]['data']['vtipdia'] = val - elif wdg_name == "gdb_vangle": - self.db_tool_dict[tool_id]['data']['vtipangle'] = val - elif wdg_name == "gdb_frapids": - self.db_tool_dict[tool_id]['data']['feedrate_rapid'] = val - elif wdg_name == "gdb_ecut": - self.db_tool_dict[tool_id]['data']['extracut'] = val - elif wdg_name == "gdb_ecut_length": - self.db_tool_dict[tool_id]['data']['extracut_length'] = val - - # NCC Tool - elif wdg_name == "gdb_n_operation": - self.db_tool_dict[tool_id]['data']['tools_nccoperation'] = val - elif wdg_name == "gdb_n_overlap": - self.db_tool_dict[tool_id]['data']['tools_nccoverlap'] = val - elif wdg_name == "gdb_n_margin": - self.db_tool_dict[tool_id]['data']['tools_nccmargin'] = val - elif wdg_name == "gdb_n_method": - self.db_tool_dict[tool_id]['data']['tools_nccmethod'] = val - elif wdg_name == "gdb_n_connect": - self.db_tool_dict[tool_id]['data']['tools_nccconnect'] = val - elif wdg_name == "gdb_n_contour": - self.db_tool_dict[tool_id]['data']['tools_ncccontour'] = val - elif wdg_name == "gdb_n_offset": - self.db_tool_dict[tool_id]['data']['tools_ncc_offset_choice'] = val - elif wdg_name == "gdb_n_offset_value": - self.db_tool_dict[tool_id]['data']['tools_ncc_offset_value'] = val - elif wdg_name == "gdb_n_milling_type": - self.db_tool_dict[tool_id]['data']['tools_nccmilling_type'] = val - - # Paint Tool - elif wdg_name == "gdb_p_overlap": - self.db_tool_dict[tool_id]['data']['tools_paintoverlap'] = val - elif wdg_name == "gdb_p_margin": - self.db_tool_dict[tool_id]['data']['tools_paintmargin'] = val - elif wdg_name == "gdb_p_method": - self.db_tool_dict[tool_id]['data']['tools_paintmethod'] = val - elif wdg_name == "gdb_p_connect": - self.db_tool_dict[tool_id]['data']['tools_pathconnect'] = val - elif wdg_name == "gdb_p_contour": - self.db_tool_dict[tool_id]['data']['tools_paintcontour'] = val - - self.callback_app() - - def on_tool_requested_from_app(self): - if not self.tree_widget.selectedItems(): - self.app.inform.emit('[WARNING_NOTCL] %s...' % _("No Tool/row selected in the Tools Database table")) - return - - for item in self.tree_widget.selectedItems(): - tool_uid = item.data(0, QtCore.Qt.DisplayRole) - - for key in self.db_tool_dict.keys(): - if str(key) == str(tool_uid): - selected_tool = self.db_tool_dict[key] - self.on_tool_request(tool=selected_tool) - - def on_cancel_tool(self): - for idx in range(self.app.ui.plot_tab_area.count()): - if self.app.ui.plot_tab_area.tabText(idx) == _("Tools Database"): - wdg = self.app.ui.plot_tab_area.widget(idx) - wdg.deleteLater() - self.app.ui.plot_tab_area.removeTab(idx) - self.app.inform.emit('%s' % _("Cancelled adding tool from DB.")) - - def resize_new_tool_table_widget(self, min_size, max_size): - """ - Resize the table widget responsible for adding new tool in the Tool Database - - :param min_size: passed by rangeChanged signal or the self.new_tool_table_widget.horizontalScrollBar() - :param max_size: passed by rangeChanged signal or the self.new_tool_table_widget.horizontalScrollBar() - :return: - """ - t_height = self.t_height - if max_size > min_size: - t_height = self.t_height + self.new_tool_table_widget.verticalScrollBar().height() - - self.new_tool_table_widget.setMaximumHeight(t_height) - - def closeEvent(self, QCloseEvent): - super().closeEvent(QCloseEvent) - - def color_variant(hex_color, bright_factor=1): """ Takes a color in HEX format #FF00FF and produces a lighter or darker variant diff --git a/FlatCAMDB.py b/FlatCAMDB.py new file mode 100644 index 00000000..3d7b35a8 --- /dev/null +++ b/FlatCAMDB.py @@ -0,0 +1,2399 @@ +from PyQt5 import QtGui, QtCore, QtWidgets +from flatcamGUI.GUIElements import FCTable, FCEntry, FCButton, FCDoubleSpinner, FCComboBox, FCCheckBox, FCSpinner, \ + FCTree, RadioSet, FCFileSaveDialog +from camlib import to_dict + +import sys +import json + +from copy import deepcopy +from datetime import datetime +import gettext +import FlatCAMTranslation as fcTranslate +import builtins + +fcTranslate.apply_language('strings') +if '_' not in builtins.__dict__: + _ = gettext.gettext + + +class ToolsDB(QtWidgets.QWidget): + + mark_tools_rows = QtCore.pyqtSignal() + + def __init__(self, app, callback_on_edited, callback_on_tool_request, parent=None): + super(ToolsDB, self).__init__(parent) + + self.app = app + self.decimals = 4 + self.callback_app = callback_on_edited + + self.on_tool_request = callback_on_tool_request + + self.offset_item_options = ["Path", "In", "Out", "Custom"] + self.type_item_options = ["Iso", "Rough", "Finish"] + self.tool_type_item_options = ["C1", "C2", "C3", "C4", "B", "V"] + + ''' + dict to hold all the tools in the Tools DB + format: + { + tool_id: { + 'name': 'new_tool' + 'tooldia': self.app.defaults["geometry_cnctooldia"] + 'offset': 'Path' + 'offset_value': 0.0 + 'type': _('Rough'), + 'tool_type': 'C1' + 'data': dict() + } + } + ''' + self.db_tool_dict = {} + + # layouts + layout = QtWidgets.QVBoxLayout() + self.setLayout(layout) + + table_hlay = QtWidgets.QHBoxLayout() + layout.addLayout(table_hlay) + + self.table_widget = FCTable(drag_drop=True) + self.table_widget.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows) + table_hlay.addWidget(self.table_widget) + + # set the number of columns and the headers tool tips + self.configure_table() + + # pal = QtGui.QPalette() + # pal.setColor(QtGui.QPalette.Background, Qt.white) + + # New Bookmark + new_vlay = QtWidgets.QVBoxLayout() + layout.addLayout(new_vlay) + + # new_tool_lbl = QtWidgets.QLabel('%s' % _("New Tool")) + # new_vlay.addWidget(new_tool_lbl, alignment=QtCore.Qt.AlignBottom) + + self.buttons_frame = QtWidgets.QFrame() + self.buttons_frame.setContentsMargins(0, 0, 0, 0) + layout.addWidget(self.buttons_frame) + self.buttons_box = QtWidgets.QHBoxLayout() + self.buttons_box.setContentsMargins(0, 0, 0, 0) + self.buttons_frame.setLayout(self.buttons_box) + self.buttons_frame.show() + + add_entry_btn = FCButton(_("Add Geometry Tool in DB")) + add_entry_btn.setToolTip( + _("Add a new tool in the Tools Database.\n" + "It will be used in the Geometry UI.\n" + "You can edit it after it is added.") + ) + self.buttons_box.addWidget(add_entry_btn) + + # add_fct_entry_btn = FCButton(_("Add Paint/NCC Tool in DB")) + # add_fct_entry_btn.setToolTip( + # _("Add a new tool in the Tools Database.\n" + # "It will be used in the Paint/NCC Tools UI.\n" + # "You can edit it after it is added.") + # ) + # self.buttons_box.addWidget(add_fct_entry_btn) + + remove_entry_btn = FCButton(_("Delete Tool from DB")) + remove_entry_btn.setToolTip( + _("Remove a selection of tools in the Tools Database.") + ) + self.buttons_box.addWidget(remove_entry_btn) + + export_db_btn = FCButton(_("Export DB")) + export_db_btn.setToolTip( + _("Save the Tools Database to a custom text file.") + ) + self.buttons_box.addWidget(export_db_btn) + + import_db_btn = FCButton(_("Import DB")) + import_db_btn.setToolTip( + _("Load the Tools Database information's from a custom text file.") + ) + self.buttons_box.addWidget(import_db_btn) + + self.add_tool_from_db = FCButton(_("Add Tool from Tools DB")) + self.add_tool_from_db.setToolTip( + _("Add a new tool in the Tools Table of the\n" + "active Geometry object after selecting a tool\n" + "in the Tools Database.") + ) + self.add_tool_from_db.hide() + + self.cancel_tool_from_db = FCButton(_("Cancel")) + self.cancel_tool_from_db.hide() + + hlay = QtWidgets.QHBoxLayout() + layout.addLayout(hlay) + hlay.addWidget(self.add_tool_from_db) + hlay.addWidget(self.cancel_tool_from_db) + hlay.addStretch() + + # ############################################################################## + # ######################## SIGNALS ############################################# + # ############################################################################## + + add_entry_btn.clicked.connect(self.on_tool_add) + remove_entry_btn.clicked.connect(self.on_tool_delete) + export_db_btn.clicked.connect(self.on_export_tools_db_file) + import_db_btn.clicked.connect(self.on_import_tools_db_file) + # closebtn.clicked.connect(self.accept) + + self.add_tool_from_db.clicked.connect(self.on_tool_requested_from_app) + self.cancel_tool_from_db.clicked.connect(self.on_cancel_tool) + + self.setup_db_ui() + + def configure_table(self): + self.table_widget.setColumnCount(27) + # self.table_widget.setColumnWidth(0, 20) + self.table_widget.setHorizontalHeaderLabels( + [ + '#', + _("Tool Name"), + _("Tool Dia"), + _("Tool Offset"), + _("Custom Offset"), + _("Tool Type"), + _("Tool Shape"), + _("Cut Z"), + _("MultiDepth"), + _("DPP"), + _("V-Dia"), + _("V-Angle"), + _("Travel Z"), + _("FR"), + _("FR Z"), + _("FR Rapids"), + _("Spindle Speed"), + _("Dwell"), + _("Dwelltime"), + _("Preprocessor"), + _("ExtraCut"), + _("E-Cut Length"), + _("Toolchange"), + _("Toolchange XY"), + _("Toolchange Z"), + _("Start Z"), + _("End Z"), + ] + ) + self.table_widget.horizontalHeaderItem(0).setToolTip( + _("Tool Index.")) + self.table_widget.horizontalHeaderItem(1).setToolTip( + _("Tool name.\n" + "This is not used in the app, it's function\n" + "is to serve as a note for the user.")) + self.table_widget.horizontalHeaderItem(2).setToolTip( + _("Tool Diameter.")) + self.table_widget.horizontalHeaderItem(3).setToolTip( + _("Tool Offset.\n" + "Can be of a few types:\n" + "Path = zero offset\n" + "In = offset inside by half of tool diameter\n" + "Out = offset outside by half of tool diameter\n" + "Custom = custom offset using the Custom Offset value")) + self.table_widget.horizontalHeaderItem(4).setToolTip( + _("Custom Offset.\n" + "A value to be used as offset from the current path.")) + self.table_widget.horizontalHeaderItem(5).setToolTip( + _("Tool Type.\n" + "Can be:\n" + "Iso = isolation cut\n" + "Rough = rough cut, low feedrate, multiple passes\n" + "Finish = finishing cut, high feedrate")) + self.table_widget.horizontalHeaderItem(6).setToolTip( + _("Tool Shape. \n" + "Can be:\n" + "C1 ... C4 = circular tool with x flutes\n" + "B = ball tip milling tool\n" + "V = v-shape milling tool")) + self.table_widget.horizontalHeaderItem(7).setToolTip( + _("Cutting Depth.\n" + "The depth at which to cut into material.")) + self.table_widget.horizontalHeaderItem(8).setToolTip( + _("Multi Depth.\n" + "Selecting this will allow cutting in multiple passes,\n" + "each pass adding a DPP parameter depth.")) + self.table_widget.horizontalHeaderItem(9).setToolTip( + _("DPP. Depth per Pass.\n" + "The value used to cut into material on each pass.")) + self.table_widget.horizontalHeaderItem(10).setToolTip( + _("V-Dia.\n" + "Diameter of the tip for V-Shape Tools.")) + self.table_widget.horizontalHeaderItem(11).setToolTip( + _("V-Agle.\n" + "Angle at the tip for the V-Shape Tools.")) + self.table_widget.horizontalHeaderItem(12).setToolTip( + _("Clearance Height.\n" + "Height at which the milling bit will travel between cuts,\n" + "above the surface of the material, avoiding all fixtures.")) + self.table_widget.horizontalHeaderItem(13).setToolTip( + _("FR. Feedrate\n" + "The speed on XY plane used while cutting into material.")) + self.table_widget.horizontalHeaderItem(14).setToolTip( + _("FR Z. Feedrate Z\n" + "The speed on Z plane.")) + self.table_widget.horizontalHeaderItem(15).setToolTip( + _("FR Rapids. Feedrate Rapids\n" + "Speed used while moving as fast as possible.\n" + "This is used only by some devices that can't use\n" + "the G0 g-code command. Mostly 3D printers.")) + self.table_widget.horizontalHeaderItem(16).setToolTip( + _("Spindle Speed.\n" + "If it's left empty it will not be used.\n" + "The speed of the spindle in RPM.")) + self.table_widget.horizontalHeaderItem(17).setToolTip( + _("Dwell.\n" + "Check this if a delay is needed to allow\n" + "the spindle motor to reach it's set speed.")) + self.table_widget.horizontalHeaderItem(18).setToolTip( + _("Dwell Time.\n" + "A delay used to allow the motor spindle reach it's set speed.")) + self.table_widget.horizontalHeaderItem(19).setToolTip( + _("Preprocessor.\n" + "A selection of files that will alter the generated G-code\n" + "to fit for a number of use cases.")) + self.table_widget.horizontalHeaderItem(20).setToolTip( + _("Extra Cut.\n" + "If checked, after a isolation is finished an extra cut\n" + "will be added where the start and end of isolation meet\n" + "such as that this point is covered by this extra cut to\n" + "ensure a complete isolation.")) + self.table_widget.horizontalHeaderItem(21).setToolTip( + _("Extra Cut length.\n" + "If checked, after a isolation is finished an extra cut\n" + "will be added where the start and end of isolation meet\n" + "such as that this point is covered by this extra cut to\n" + "ensure a complete isolation. This is the length of\n" + "the extra cut.")) + self.table_widget.horizontalHeaderItem(22).setToolTip( + _("Toolchange.\n" + "It will create a toolchange event.\n" + "The kind of toolchange is determined by\n" + "the preprocessor file.")) + self.table_widget.horizontalHeaderItem(23).setToolTip( + _("Toolchange XY.\n" + "A set of coordinates in the format (x, y).\n" + "Will determine the cartesian position of the point\n" + "where the tool change event take place.")) + self.table_widget.horizontalHeaderItem(24).setToolTip( + _("Toolchange Z.\n" + "The position on Z plane where the tool change event take place.")) + self.table_widget.horizontalHeaderItem(25).setToolTip( + _("Start Z.\n" + "If it's left empty it will not be used.\n" + "A position on Z plane to move immediately after job start.")) + self.table_widget.horizontalHeaderItem(26).setToolTip( + _("End Z.\n" + "A position on Z plane to move immediately after job stop.")) + + def setup_db_ui(self): + filename = self.app.data_path + '/geo_tools_db.FlatDB' + + # load the database tools from the file + try: + with open(filename) as f: + tools = f.read() + except IOError: + self.app.log.error("Could not load tools DB file.") + self.app.inform.emit('[ERROR] %s' % _("Could not load Tools DB file.")) + return + + try: + self.db_tool_dict = json.loads(tools) + except Exception: + e = sys.exc_info()[0] + self.app.log.error(str(e)) + self.app.inform.emit('[ERROR] %s' % _("Failed to parse Tools DB file.")) + return + + self.app.inform.emit('[success] %s: %s' % (_("Loaded FlatCAM Tools DB from"), filename)) + + self.build_db_ui() + + self.table_widget.setupContextMenu() + self.table_widget.addContextMenu( + _("Add to DB"), self.on_tool_add, icon=QtGui.QIcon(self.app.resource_location + "/plus16.png")) + self.table_widget.addContextMenu( + _("Copy from DB"), self.on_tool_copy, icon=QtGui.QIcon(self.app.resource_location + "/copy16.png")) + self.table_widget.addContextMenu( + _("Delete from DB"), self.on_tool_delete, icon=QtGui.QIcon(self.app.resource_location + "/delete32.png")) + + def build_db_ui(self): + self.ui_disconnect() + self.table_widget.setRowCount(len(self.db_tool_dict)) + + nr_crt = 0 + + for toolid, dict_val in self.db_tool_dict.items(): + row = nr_crt + nr_crt += 1 + + t_name = dict_val['name'] + try: + self.add_tool_table_line(row, name=t_name, widget=self.table_widget, tooldict=dict_val) + except Exception as e: + self.app.log.debug("ToolDB.build_db_ui.add_tool_table_line() --> %s" % str(e)) + vertical_header = self.table_widget.verticalHeader() + vertical_header.hide() + + horizontal_header = self.table_widget.horizontalHeader() + horizontal_header.setMinimumSectionSize(10) + horizontal_header.setDefaultSectionSize(70) + + self.table_widget.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustToContents) + for x in range(27): + self.table_widget.resizeColumnToContents(x) + + horizontal_header.setSectionResizeMode(0, QtWidgets.QHeaderView.Fixed) + # horizontal_header.setSectionResizeMode(1, QtWidgets.QHeaderView.Stretch) + # horizontal_header.setSectionResizeMode(13, QtWidgets.QHeaderView.Fixed) + + horizontal_header.resizeSection(0, 20) + # horizontal_header.setSectionResizeMode(1, QtWidgets.QHeaderView.ResizeToContents) + # horizontal_header.setSectionResizeMode(2, QtWidgets.QHeaderView.Stretch) + + self.ui_connect() + + def add_tool_table_line(self, row, name, widget, tooldict): + data = tooldict['data'] + + nr_crt = row + 1 + id_item = QtWidgets.QTableWidgetItem('%d' % int(nr_crt)) + # id_item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) + flags = id_item.flags() & ~QtCore.Qt.ItemIsEditable + id_item.setFlags(flags) + widget.setItem(row, 0, id_item) # Tool name/id + + tool_name_item = QtWidgets.QTableWidgetItem(name) + widget.setItem(row, 1, tool_name_item) + + dia_item = FCDoubleSpinner() + dia_item.set_precision(self.decimals) + dia_item.setSingleStep(0.1) + dia_item.set_range(0.0, 9999.9999) + dia_item.set_value(float(tooldict['tooldia'])) + widget.setCellWidget(row, 2, dia_item) + + tool_offset_item = FCComboBox() + for item in self.offset_item_options: + tool_offset_item.addItem(item) + tool_offset_item.set_value(tooldict['offset']) + widget.setCellWidget(row, 3, tool_offset_item) + + c_offset_item = FCDoubleSpinner() + c_offset_item.set_precision(self.decimals) + c_offset_item.setSingleStep(0.1) + c_offset_item.set_range(-9999.9999, 9999.9999) + c_offset_item.set_value(float(tooldict['offset_value'])) + widget.setCellWidget(row, 4, c_offset_item) + + tt_item = FCComboBox() + for item in self.type_item_options: + tt_item.addItem(item) + tt_item.set_value(tooldict['type']) + widget.setCellWidget(row, 5, tt_item) + + tshape_item = FCComboBox() + for item in self.tool_type_item_options: + tshape_item.addItem(item) + tshape_item.set_value(tooldict['tool_type']) + widget.setCellWidget(row, 6, tshape_item) + + cutz_item = FCDoubleSpinner() + cutz_item.set_precision(self.decimals) + cutz_item.setSingleStep(0.1) + if self.app.defaults['global_machinist_setting']: + cutz_item.set_range(-9999.9999, 9999.9999) + else: + cutz_item.set_range(-9999.9999, -0.0000) + + cutz_item.set_value(float(data['cutz'])) + widget.setCellWidget(row, 7, cutz_item) + + multidepth_item = FCCheckBox() + multidepth_item.set_value(data['multidepth']) + widget.setCellWidget(row, 8, multidepth_item) + + # to make the checkbox centered but it can no longer have it's value accessed - needs a fix using findchild() + # multidepth_item = QtWidgets.QWidget() + # cb = FCCheckBox() + # cb.set_value(data['multidepth']) + # qhboxlayout = QtWidgets.QHBoxLayout(multidepth_item) + # qhboxlayout.addWidget(cb) + # qhboxlayout.setAlignment(QtCore.Qt.AlignCenter) + # qhboxlayout.setContentsMargins(0, 0, 0, 0) + # widget.setCellWidget(row, 8, multidepth_item) + + depth_per_pass_item = FCDoubleSpinner() + depth_per_pass_item.set_precision(self.decimals) + depth_per_pass_item.setSingleStep(0.1) + depth_per_pass_item.set_range(0.0, 9999.9999) + depth_per_pass_item.set_value(float(data['depthperpass'])) + widget.setCellWidget(row, 9, depth_per_pass_item) + + vtip_dia_item = FCDoubleSpinner() + vtip_dia_item.set_precision(self.decimals) + vtip_dia_item.setSingleStep(0.1) + vtip_dia_item.set_range(0.0, 9999.9999) + vtip_dia_item.set_value(float(data['vtipdia'])) + widget.setCellWidget(row, 10, vtip_dia_item) + + vtip_angle_item = FCDoubleSpinner() + vtip_angle_item.set_precision(self.decimals) + vtip_angle_item.setSingleStep(0.1) + vtip_angle_item.set_range(-360.0, 360.0) + vtip_angle_item.set_value(float(data['vtipangle'])) + widget.setCellWidget(row, 11, vtip_angle_item) + + travelz_item = FCDoubleSpinner() + travelz_item.set_precision(self.decimals) + travelz_item.setSingleStep(0.1) + if self.app.defaults['global_machinist_setting']: + travelz_item.set_range(-9999.9999, 9999.9999) + else: + travelz_item.set_range(0.0000, 9999.9999) + + travelz_item.set_value(float(data['travelz'])) + widget.setCellWidget(row, 12, travelz_item) + + fr_item = FCDoubleSpinner() + fr_item.set_precision(self.decimals) + fr_item.set_range(0.0, 9999.9999) + fr_item.set_value(float(data['feedrate'])) + widget.setCellWidget(row, 13, fr_item) + + frz_item = FCDoubleSpinner() + frz_item.set_precision(self.decimals) + frz_item.set_range(0.0, 9999.9999) + frz_item.set_value(float(data['feedrate_z'])) + widget.setCellWidget(row, 14, frz_item) + + frrapids_item = FCDoubleSpinner() + frrapids_item.set_precision(self.decimals) + frrapids_item.set_range(0.0, 9999.9999) + frrapids_item.set_value(float(data['feedrate_rapid'])) + widget.setCellWidget(row, 15, frrapids_item) + + spindlespeed_item = FCSpinner() + spindlespeed_item.set_range(0, 1000000) + spindlespeed_item.set_value(int(data['spindlespeed'])) + spindlespeed_item.set_step(100) + widget.setCellWidget(row, 16, spindlespeed_item) + + dwell_item = FCCheckBox() + dwell_item.set_value(data['dwell']) + widget.setCellWidget(row, 17, dwell_item) + + dwelltime_item = FCDoubleSpinner() + dwelltime_item.set_precision(self.decimals) + dwelltime_item.set_range(0.0000, 9999.9999) + dwelltime_item.set_value(float(data['dwelltime'])) + widget.setCellWidget(row, 18, dwelltime_item) + + pp_item = FCComboBox() + for item in self.app.preprocessors: + pp_item.addItem(item) + pp_item.set_value(data['ppname_g']) + widget.setCellWidget(row, 19, pp_item) + + ecut_item = FCCheckBox() + ecut_item.set_value(data['extracut']) + widget.setCellWidget(row, 20, ecut_item) + + ecut_length_item = FCDoubleSpinner() + ecut_length_item.set_precision(self.decimals) + ecut_length_item.set_range(0.0000, 9999.9999) + ecut_length_item.set_value(data['extracut_length']) + widget.setCellWidget(row, 21, ecut_length_item) + + toolchange_item = FCCheckBox() + toolchange_item.set_value(data['toolchange']) + widget.setCellWidget(row, 22, toolchange_item) + + toolchangexy_item = QtWidgets.QTableWidgetItem(str(data['toolchangexy']) if data['toolchangexy'] else '') + widget.setItem(row, 23, toolchangexy_item) + + toolchangez_item = FCDoubleSpinner() + toolchangez_item.set_precision(self.decimals) + toolchangez_item.setSingleStep(0.1) + if self.app.defaults['global_machinist_setting']: + toolchangez_item.set_range(-9999.9999, 9999.9999) + else: + toolchangez_item.set_range(0.0000, 9999.9999) + + toolchangez_item.set_value(float(data['toolchangez'])) + widget.setCellWidget(row, 24, toolchangez_item) + + startz_item = QtWidgets.QTableWidgetItem(str(data['startz']) if data['startz'] else '') + widget.setItem(row, 25, startz_item) + + endz_item = FCDoubleSpinner() + endz_item.set_precision(self.decimals) + endz_item.setSingleStep(0.1) + if self.app.defaults['global_machinist_setting']: + endz_item.set_range(-9999.9999, 9999.9999) + else: + endz_item.set_range(0.0000, 9999.9999) + + endz_item.set_value(float(data['endz'])) + widget.setCellWidget(row, 26, endz_item) + + def on_tool_add(self): + """ + Add a tool in the DB Tool Table + :return: None + """ + + default_data = {} + default_data.update({ + "cutz": float(self.app.defaults["geometry_cutz"]), + "multidepth": self.app.defaults["geometry_multidepth"], + "depthperpass": float(self.app.defaults["geometry_depthperpass"]), + "vtipdia": float(self.app.defaults["geometry_vtipdia"]), + "vtipangle": float(self.app.defaults["geometry_vtipangle"]), + "travelz": float(self.app.defaults["geometry_travelz"]), + "feedrate": float(self.app.defaults["geometry_feedrate"]), + "feedrate_z": float(self.app.defaults["geometry_feedrate_z"]), + "feedrate_rapid": float(self.app.defaults["geometry_feedrate_rapid"]), + "spindlespeed": self.app.defaults["geometry_spindlespeed"], + "dwell": self.app.defaults["geometry_dwell"], + "dwelltime": float(self.app.defaults["geometry_dwelltime"]), + "ppname_g": self.app.defaults["geometry_ppname_g"], + "extracut": self.app.defaults["geometry_extracut"], + "extracut_length": float(self.app.defaults["geometry_extracut_length"]), + "toolchange": self.app.defaults["geometry_toolchange"], + "toolchangexy": self.app.defaults["geometry_toolchangexy"], + "toolchangez": float(self.app.defaults["geometry_toolchangez"]), + "startz": self.app.defaults["geometry_startz"], + "endz": float(self.app.defaults["geometry_endz"]) + }) + + dict_elem = {} + dict_elem['name'] = 'new_tool' + if type(self.app.defaults["geometry_cnctooldia"]) == float: + dict_elem['tooldia'] = self.app.defaults["geometry_cnctooldia"] + else: + try: + tools_string = self.app.defaults["geometry_cnctooldia"].split(",") + tools_diameters = [eval(a) for a in tools_string if a != ''] + dict_elem['tooldia'] = tools_diameters[0] if tools_diameters else 0.0 + except Exception as e: + self.app.log.debug("ToolDB.on_tool_add() --> %s" % str(e)) + return + + dict_elem['offset'] = 'Path' + dict_elem['offset_value'] = 0.0 + dict_elem['type'] = 'Rough' + dict_elem['tool_type'] = 'C1' + dict_elem['data'] = default_data + + new_toolid = len(self.db_tool_dict) + 1 + self.db_tool_dict[new_toolid] = deepcopy(dict_elem) + + # add the new entry to the Tools DB table + self.build_db_ui() + self.callback_on_edited() + self.app.inform.emit('[success] %s' % _("Tool added to DB.")) + + def on_tool_copy(self): + """ + Copy a selection of Tools in the Tools DB table + :return: + """ + new_tool_id = self.table_widget.rowCount() + 1 + for model_index in self.table_widget.selectionModel().selectedRows(): + # index = QtCore.QPersistentModelIndex(model_index) + old_tool_id = self.table_widget.item(model_index.row(), 0).text() + new_tool_id += 1 + + for toolid, dict_val in list(self.db_tool_dict.items()): + if int(old_tool_id) == int(toolid): + self.db_tool_dict.update({ + new_tool_id: deepcopy(dict_val) + }) + + self.build_db_ui() + self.callback_on_edited() + self.app.inform.emit('[success] %s' % _("Tool copied from Tools DB.")) + + def on_tool_delete(self): + """ + Delete a selection of Tools in the Tools DB table + :return: + """ + for model_index in self.table_widget.selectionModel().selectedRows(): + # index = QtCore.QPersistentModelIndex(model_index) + toolname_to_remove = self.table_widget.item(model_index.row(), 0).text() + + for toolid, dict_val in list(self.db_tool_dict.items()): + if int(toolname_to_remove) == int(toolid): + # remove from the storage + self.db_tool_dict.pop(toolid, None) + + self.build_db_ui() + self.callback_on_edited() + self.app.inform.emit('[success] %s' % _("Tool removed from Tools DB.")) + + def on_export_tools_db_file(self): + self.app.report_usage("on_export_tools_db_file") + self.app.log.debug("on_export_tools_db_file()") + + date = str(datetime.today()).rpartition('.')[0] + date = ''.join(c for c in date if c not in ':-') + date = date.replace(' ', '_') + + filter__ = "Text File (*.TXT);;All Files (*.*)" + filename, _f = FCFileSaveDialog.get_saved_filename(caption=_("Export Tools Database"), + directory='{l_save}/FlatCAM_{n}_{date}'.format( + l_save=str(self.app.get_last_save_folder()), + n=_("Tools_Database"), + date=date), + filter=filter__) + + filename = str(filename) + + if filename == "": + self.app.inform.emit('[WARNING_NOTCL] %s' % _("Cancelled.")) + return + else: + try: + f = open(filename, 'w') + f.close() + except PermissionError: + self.app.inform.emit('[WARNING] %s' % + _("Permission denied, saving not possible.\n" + "Most likely another app is holding the file open and not accessible.")) + return + except IOError: + self.app.log.debug('Creating a new Tools DB file ...') + f = open(filename, 'w') + f.close() + except Exception: + e = sys.exc_info()[0] + self.app.log.error("Could not load Tools DB file.") + self.app.log.error(str(e)) + self.app.inform.emit('[ERROR_NOTCL] %s' % _("Could not load Tools DB file.")) + return + + # Save update options + try: + # Save Tools DB in a file + try: + with open(filename, "w") as f: + json.dump(self.db_tool_dict, f, default=to_dict, indent=2) + except Exception as e: + self.app.log.debug("App.on_save_tools_db() --> %s" % str(e)) + self.app.inform.emit('[ERROR_NOTCL] %s' % _("Failed to write Tools DB to file.")) + return + except Exception: + self.app.inform.emit('[ERROR_NOTCL] %s' % _("Failed to write Tools DB to file.")) + return + + self.app.inform.emit('[success] %s: %s' % (_("Exported Tools DB to"), filename)) + + def on_import_tools_db_file(self): + self.app.report_usage("on_import_tools_db_file") + self.app.log.debug("on_import_tools_db_file()") + + filter__ = "Text File (*.TXT);;All Files (*.*)" + filename, _f = QtWidgets.QFileDialog.getOpenFileName(caption=_("Import FlatCAM Tools DB"), filter=filter__) + + if filename == "": + self.app.inform.emit('[WARNING_NOTCL] %s' % _("Cancelled.")) + else: + try: + with open(filename) as f: + tools_in_db = f.read() + except IOError: + self.app.log.error("Could not load Tools DB file.") + self.app.inform.emit('[ERROR_NOTCL] %s' % _("Could not load Tools DB file.")) + return + + try: + self.db_tool_dict = json.loads(tools_in_db) + except Exception: + e = sys.exc_info()[0] + self.app.log.error(str(e)) + self.app.inform.emit('[ERROR] %s' % _("Failed to parse Tools DB file.")) + return + + self.app.inform.emit('[success] %s: %s' % (_("Loaded FlatCAM Tools DB from"), filename)) + self.build_db_ui() + self.callback_on_edited() + + def on_save_tools_db(self, silent=False): + self.app.log.debug("ToolsDB.on_save_button() --> Saving Tools Database to file.") + + filename = self.app.data_path + "/geo_tools_db.FlatDB" + + # Preferences save, update the color of the Tools DB Tab text + for idx in range(self.app.ui.plot_tab_area.count()): + if self.app.ui.plot_tab_area.tabText(idx) == _("Tools Database"): + self.app.ui.plot_tab_area.tabBar.setTabTextColor(idx, QtGui.QColor('black')) + + # Save Tools DB in a file + try: + f = open(filename, "w") + json.dump(self.db_tool_dict, f, default=to_dict, indent=2) + f.close() + except Exception as e: + self.app.log.debug("ToolsDB.on_save_tools_db() --> %s" % str(e)) + self.app.inform.emit('[ERROR_NOTCL] %s' % _("Failed to write Tools DB to file.")) + return + + if not silent: + self.app.inform.emit('[success] %s' % _("Saved Tools DB.")) + + def ui_connect(self): + try: + try: + self.table_widget.itemChanged.disconnect(self.callback_on_edited) + except (TypeError, AttributeError): + pass + self.table_widget.itemChanged.connect(self.callback_on_edited) + except AttributeError: + pass + + for row in range(self.table_widget.rowCount()): + for col in range(self.table_widget.columnCount()): + # ComboBox + try: + try: + self.table_widget.cellWidget(row, col).currentIndexChanged.disconnect(self.callback_on_edited) + except (TypeError, AttributeError): + pass + self.table_widget.cellWidget(row, col).currentIndexChanged.connect(self.callback_on_edited) + except AttributeError: + pass + + # CheckBox + try: + try: + self.table_widget.cellWidget(row, col).toggled.disconnect(self.callback_on_edited) + except (TypeError, AttributeError): + pass + self.table_widget.cellWidget(row, col).toggled.connect(self.callback_on_edited) + except AttributeError: + pass + + # SpinBox, DoubleSpinBox + try: + try: + self.table_widget.cellWidget(row, col).valueChanged.disconnect(self.callback_on_edited) + except (TypeError, AttributeError): + pass + self.table_widget.cellWidget(row, col).valueChanged.connect(self.callback_on_edited) + except AttributeError: + pass + + def ui_disconnect(self): + try: + self.table_widget.itemChanged.disconnect(self.callback_on_edited) + except (TypeError, AttributeError): + pass + + for row in range(self.table_widget.rowCount()): + for col in range(self.table_widget.columnCount()): + # ComboBox + try: + self.table_widget.cellWidget(row, col).currentIndexChanged.disconnect(self.callback_on_edited) + except (TypeError, AttributeError): + pass + + # CheckBox + try: + self.table_widget.cellWidget(row, col).toggled.disconnect(self.callback_on_edited) + except (TypeError, AttributeError): + pass + + # SpinBox, DoubleSpinBox + try: + self.table_widget.cellWidget(row, col).valueChanged.disconnect(self.callback_on_edited) + except (TypeError, AttributeError): + pass + + def callback_on_edited(self): + + # update the dictionary storage self.db_tool_dict + self.db_tool_dict.clear() + dict_elem = {} + default_data = {} + + for row in range(self.table_widget.rowCount()): + new_toolid = row + 1 + for col in range(self.table_widget.columnCount()): + column_header_text = self.table_widget.horizontalHeaderItem(col).text() + if column_header_text == _('Tool Name'): + dict_elem['name'] = self.table_widget.item(row, col).text() + elif column_header_text == _('Tool Dia'): + dict_elem['tooldia'] = self.table_widget.cellWidget(row, col).get_value() + elif column_header_text == _('Tool Offset'): + dict_elem['offset'] = self.table_widget.cellWidget(row, col).get_value() + elif column_header_text == _('Custom Offset'): + dict_elem['offset_value'] = self.table_widget.cellWidget(row, col).get_value() + elif column_header_text == _('Tool Type'): + dict_elem['type'] = self.table_widget.cellWidget(row, col).get_value() + elif column_header_text == _('Tool Shape'): + dict_elem['tool_type'] = self.table_widget.cellWidget(row, col).get_value() + else: + if column_header_text == _('Cut Z'): + default_data['cutz'] = self.table_widget.cellWidget(row, col).get_value() + elif column_header_text == _('MultiDepth'): + default_data['multidepth'] = self.table_widget.cellWidget(row, col).get_value() + elif column_header_text == _('DPP'): + default_data['depthperpass'] = self.table_widget.cellWidget(row, col).get_value() + elif column_header_text == _('V-Dia'): + default_data['vtipdia'] = self.table_widget.cellWidget(row, col).get_value() + elif column_header_text == _('V-Angle'): + default_data['vtipangle'] = self.table_widget.cellWidget(row, col).get_value() + elif column_header_text == _('Travel Z'): + default_data['travelz'] = self.table_widget.cellWidget(row, col).get_value() + elif column_header_text == _('FR'): + default_data['feedrate'] = self.table_widget.cellWidget(row, col).get_value() + elif column_header_text == _('FR Z'): + default_data['feedrate_z'] = self.table_widget.cellWidget(row, col).get_value() + elif column_header_text == _('FR Rapids'): + default_data['feedrate_rapid'] = self.table_widget.cellWidget(row, col).get_value() + elif column_header_text == _('Spindle Speed'): + default_data['spindlespeed'] = self.table_widget.cellWidget(row, col).get_value() + elif column_header_text == _('Dwell'): + default_data['dwell'] = self.table_widget.cellWidget(row, col).get_value() + elif column_header_text == _('Dwelltime'): + default_data['dwelltime'] = self.table_widget.cellWidget(row, col).get_value() + elif column_header_text == _('Preprocessor'): + default_data['ppname_g'] = self.table_widget.cellWidget(row, col).get_value() + elif column_header_text == _('ExtraCut'): + default_data['extracut'] = self.table_widget.cellWidget(row, col).get_value() + elif column_header_text == _("E-Cut Length"): + default_data['extracut_length'] = self.table_widget.cellWidget(row, col).get_value() + elif column_header_text == _('Toolchange'): + default_data['toolchange'] = self.table_widget.cellWidget(row, col).get_value() + elif column_header_text == _('Toolchange XY'): + default_data['toolchangexy'] = self.table_widget.item(row, col).text() + elif column_header_text == _('Toolchange Z'): + default_data['toolchangez'] = self.table_widget.cellWidget(row, col).get_value() + elif column_header_text == _('Start Z'): + default_data['startz'] = float(self.table_widget.item(row, col).text()) \ + if self.table_widget.item(row, col).text() != '' else None + elif column_header_text == _('End Z'): + default_data['endz'] = self.table_widget.cellWidget(row, col).get_value() + + dict_elem['data'] = default_data + self.db_tool_dict.update( + { + new_toolid: deepcopy(dict_elem) + } + ) + + self.callback_app() + + def on_tool_requested_from_app(self): + if not self.table_widget.selectionModel().selectedRows(): + self.app.inform.emit('[WARNING_NOTCL] %s...' % _("No Tool/row selected in the Tools Database table")) + return + + model_index_list = self.table_widget.selectionModel().selectedRows() + for model_index in model_index_list: + selected_row = model_index.row() + tool_uid = selected_row + 1 + for key in self.db_tool_dict.keys(): + if str(key) == str(tool_uid): + selected_tool = self.db_tool_dict[key] + self.on_tool_request(tool=selected_tool) + + def on_cancel_tool(self): + for idx in range(self.app.ui.plot_tab_area.count()): + if self.app.ui.plot_tab_area.tabText(idx) == _("Tools Database"): + wdg = self.app.ui.plot_tab_area.widget(idx) + wdg.deleteLater() + self.app.ui.plot_tab_area.removeTab(idx) + self.app.inform.emit('%s' % _("Cancelled adding tool from DB.")) + + def resize_new_tool_table_widget(self, min_size, max_size): + """ + Resize the table widget responsible for adding new tool in the Tool Database + + :param min_size: passed by rangeChanged signal or the self.new_tool_table_widget.horizontalScrollBar() + :param max_size: passed by rangeChanged signal or the self.new_tool_table_widget.horizontalScrollBar() + :return: + """ + t_height = self.t_height + if max_size > min_size: + t_height = self.t_height + self.new_tool_table_widget.verticalScrollBar().height() + + self.new_tool_table_widget.setMaximumHeight(t_height) + + def closeEvent(self, QCloseEvent): + super().closeEvent(QCloseEvent) + + +class ToolsDB2(QtWidgets.QWidget): + + mark_tools_rows = QtCore.pyqtSignal() + + def __init__(self, app, callback_on_edited, callback_on_tool_request, parent=None): + super(ToolsDB2, self).__init__(parent) + + self.app = app + self.decimals = self.app.decimals + self.callback_app = callback_on_edited + + self.on_tool_request = callback_on_tool_request + + self.offset_item_options = ["Path", "In", "Out", "Custom"] + self.type_item_options = ["Iso", "Rough", "Finish"] + self.tool_type_item_options = ["C1", "C2", "C3", "C4", "B", "V"] + + ''' + dict to hold all the tools in the Tools DB + format: + { + tool_id: { + 'name': 'new_tool' + 'tooldia': self.app.defaults["geometry_cnctooldia"] + 'offset': 'Path' + 'offset_value': 0.0 + 'type': _('Rough'), + 'tool_type': 'C1' + 'data': dict() + } + } + ''' + self.db_tool_dict = {} + + # layouts + grid_layout = QtWidgets.QGridLayout() + grid_layout.setColumnStretch(0, 0) + grid_layout.setColumnStretch(1, 1) + + self.setLayout(grid_layout) + + tree_layout = QtWidgets.QVBoxLayout() + grid_layout.addLayout(tree_layout, 0, 0) + + self.tree_widget = FCTree(columns=2, header_hidden=False, protected_column=[0]) + self.tree_widget.setHeaderLabels(["ID", "Tool Name"]) + self.tree_widget.setIndentation(0) + self.tree_widget.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) + self.tree_widget.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection) + + # set alternating colors + # self.tree_widget.setAlternatingRowColors(True) + # p = QtGui.QPalette() + # p.setColor(QtGui.QPalette.AlternateBase, QtGui.QColor(226, 237, 253) ) + # self.tree_widget.setPalette(p) + + self.tree_widget.setSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.MinimumExpanding) + tree_layout.addWidget(self.tree_widget) + + param_hlay = QtWidgets.QHBoxLayout() + param_area = QtWidgets.QScrollArea() + param_widget = QtWidgets.QWidget() + param_widget.setLayout(param_hlay) + + param_area.setWidget(param_widget) + param_area.setWidgetResizable(True) + + grid_layout.addWidget(param_area, 0, 1) + + # ########################################################################### + # ############## The UI form ################################################ + # ########################################################################### + self.basic_box = QtWidgets.QGroupBox() + self.basic_box.setStyleSheet(""" + QGroupBox + { + font-size: 16px; + font-weight: bold; + } + """) + self.basic_vlay = QtWidgets.QVBoxLayout() + self.basic_box.setTitle(_("Basic Geo Parameters")) + self.basic_box.setFixedWidth(250) + + self.advanced_box = QtWidgets.QGroupBox() + self.advanced_box.setStyleSheet(""" + QGroupBox + { + font-size: 16px; + font-weight: bold; + } + """) + self.advanced_vlay = QtWidgets.QVBoxLayout() + self.advanced_box.setTitle(_("Advanced Geo Parameters")) + self.advanced_box.setFixedWidth(250) + + self.ncc_box = QtWidgets.QGroupBox() + self.ncc_box.setStyleSheet(""" + QGroupBox + { + font-size: 16px; + font-weight: bold; + } + """) + self.ncc_vlay = QtWidgets.QVBoxLayout() + self.ncc_box.setTitle(_("NCC Parameters")) + self.ncc_box.setFixedWidth(250) + + self.paint_box = QtWidgets.QGroupBox() + self.paint_box.setStyleSheet(""" + QGroupBox + { + font-size: 16px; + font-weight: bold; + } + """) + self.paint_vlay = QtWidgets.QVBoxLayout() + self.paint_box.setTitle(_("Paint Parameters")) + self.paint_box.setFixedWidth(250) + + self.basic_box.setLayout(self.basic_vlay) + self.advanced_box.setLayout(self.advanced_vlay) + self.ncc_box.setLayout(self.ncc_vlay) + self.paint_box.setLayout(self.paint_vlay) + + geo_vlay = QtWidgets.QVBoxLayout() + geo_vlay.addWidget(self.basic_box) + geo_vlay.addWidget(self.advanced_box) + geo_vlay.addStretch() + + tools_vlay = QtWidgets.QVBoxLayout() + tools_vlay.addWidget(self.ncc_box) + tools_vlay.addWidget(self.paint_box) + tools_vlay.addStretch() + + param_hlay.addLayout(geo_vlay) + param_hlay.addLayout(tools_vlay) + param_hlay.addStretch() + + # ########################################################################### + # ############### BASIC UI form ############################################# + # ########################################################################### + + self.grid0 = QtWidgets.QGridLayout() + self.basic_vlay.addLayout(self.grid0) + self.grid0.setColumnStretch(0, 0) + self.grid0.setColumnStretch(1, 1) + self.basic_vlay.addStretch() + + # Tool Name + self.name_label = QtWidgets.QLabel('%s:' % _('Tool Name')) + self.name_label.setToolTip( + _("Tool name.\n" + "This is not used in the app, it's function\n" + "is to serve as a note for the user.")) + + self.name_entry = FCEntry() + self.name_entry.setObjectName('gdb_name') + + self.grid0.addWidget(self.name_label, 0, 0) + self.grid0.addWidget(self.name_entry, 0, 1) + + # Tool Dia + self.dia_label = QtWidgets.QLabel('%s:' % _('Tool Dia')) + self.dia_label.setToolTip( + _("Tool Diameter.")) + + self.dia_entry = FCDoubleSpinner() + self.dia_entry.set_range(-9999.9999, 9999.9999) + self.dia_entry.set_precision(self.decimals) + self.dia_entry.setObjectName('gdb_dia') + + self.grid0.addWidget(self.dia_label, 1, 0) + self.grid0.addWidget(self.dia_entry, 1, 1) + + # Tool Shape + self.shape_label = QtWidgets.QLabel('%s:' % _('Tool Shape')) + self.shape_label.setToolTip( + _("Tool Shape. \n" + "Can be:\n" + "C1 ... C4 = circular tool with x flutes\n" + "B = ball tip milling tool\n" + "V = v-shape milling tool")) + + self.shape_combo = FCComboBox() + self.shape_combo.addItems(["C1", "C2", "C3", "C4", "B", "V"]) + self.shape_combo.setObjectName('gdb_shape') + + self.grid0.addWidget(self.shape_label, 2, 0) + self.grid0.addWidget(self.shape_combo, 2, 1) + + # Cut Z + self.cutz_label = QtWidgets.QLabel('%s:' % _("Cut Z")) + self.cutz_label.setToolTip( + _("Cutting Depth.\n" + "The depth at which to cut into material.")) + + self.cutz_entry = FCDoubleSpinner() + self.cutz_entry.set_range(-9999.9999, 9999.9999) + self.cutz_entry.set_precision(self.decimals) + self.cutz_entry.setObjectName('gdb_cutz') + + self.grid0.addWidget(self.cutz_label, 4, 0) + self.grid0.addWidget(self.cutz_entry, 4, 1) + + # Multi Depth + self.multidepth_label = QtWidgets.QLabel('%s:' % _("MultiDepth")) + self.multidepth_label.setToolTip( + _("Multi Depth.\n" + "Selecting this will allow cutting in multiple passes,\n" + "each pass adding a DPP parameter depth.")) + + self.multidepth_cb = FCCheckBox() + self.multidepth_cb.setObjectName('gdb_multidepth') + + self.grid0.addWidget(self.multidepth_label, 5, 0) + self.grid0.addWidget(self.multidepth_cb, 5, 1) + + # Depth Per Pass + self.dpp_label = QtWidgets.QLabel('%s:' % _("DPP")) + self.dpp_label.setToolTip( + _("DPP. Depth per Pass.\n" + "The value used to cut into material on each pass.")) + + self.multidepth_entry = FCDoubleSpinner() + self.multidepth_entry.set_range(-9999.9999, 9999.9999) + self.multidepth_entry.set_precision(self.decimals) + self.multidepth_entry.setObjectName('gdb_multidepth_entry') + + self.grid0.addWidget(self.dpp_label, 7, 0) + self.grid0.addWidget(self.multidepth_entry, 7, 1) + + # Travel Z + self.travelz_label = QtWidgets.QLabel('%s:' % _("Travel Z")) + self.travelz_label.setToolTip( + _("Clearance Height.\n" + "Height at which the milling bit will travel between cuts,\n" + "above the surface of the material, avoiding all fixtures.")) + + self.travelz_entry = FCDoubleSpinner() + self.travelz_entry.set_range(-9999.9999, 9999.9999) + self.travelz_entry.set_precision(self.decimals) + self.travelz_entry.setObjectName('gdb_travel') + + self.grid0.addWidget(self.travelz_label, 9, 0) + self.grid0.addWidget(self.travelz_entry, 9, 1) + + # Feedrate X-Y + self.frxy_label = QtWidgets.QLabel('%s:' % _("Feedrate X-Y")) + self.frxy_label.setToolTip( + _("Feedrate X-Y. Feedrate\n" + "The speed on XY plane used while cutting into material.")) + + self.frxy_entry = FCDoubleSpinner() + self.frxy_entry.set_range(-999999.9999, 999999.9999) + self.frxy_entry.set_precision(self.decimals) + self.frxy_entry.setObjectName('gdb_frxy') + + self.grid0.addWidget(self.frxy_label, 12, 0) + self.grid0.addWidget(self.frxy_entry, 12, 1) + + # Feedrate Z + self.frz_label = QtWidgets.QLabel('%s:' % _("Feedrate Z")) + self.frz_label.setToolTip( + _("Feedrate Z\n" + "The speed on Z plane.")) + + self.frz_entry = FCDoubleSpinner() + self.frz_entry.set_range(-999999.9999, 999999.9999) + self.frz_entry.set_precision(self.decimals) + self.frz_entry.setObjectName('gdb_frz') + + self.grid0.addWidget(self.frz_label, 14, 0) + self.grid0.addWidget(self.frz_entry, 14, 1) + + # Spindle Spped + self.spindle_label = QtWidgets.QLabel('%s:' % _("Spindle Speed")) + self.spindle_label.setToolTip( + _("Spindle Speed.\n" + "If it's left empty it will not be used.\n" + "The speed of the spindle in RPM.")) + + self.spindle_entry = FCDoubleSpinner() + self.spindle_entry.set_range(-999999.9999, 999999.9999) + self.spindle_entry.set_precision(self.decimals) + self.spindle_entry.setObjectName('gdb_spindle') + + self.grid0.addWidget(self.spindle_label, 15, 0) + self.grid0.addWidget(self.spindle_entry, 15, 1) + + # Dwell + self.dwell_label = QtWidgets.QLabel('%s:' % _("Dwell")) + self.dwell_label.setToolTip( + _("Dwell.\n" + "Check this if a delay is needed to allow\n" + "the spindle motor to reach it's set speed.")) + + self.dwell_cb = FCCheckBox() + self.dwell_cb.setObjectName('gdb_dwell') + + self.grid0.addWidget(self.dwell_label, 16, 0) + self.grid0.addWidget(self.dwell_cb, 16, 1) + + # Dwell Time + self.dwelltime_label = QtWidgets.QLabel('%s:' % _("Dwelltime")) + self.dwelltime_label.setToolTip( + _("Dwell Time.\n" + "A delay used to allow the motor spindle reach it's set speed.")) + + self.dwelltime_entry = FCDoubleSpinner() + self.dwelltime_entry.set_range(0.0000, 9999.9999) + self.dwelltime_entry.set_precision(self.decimals) + self.dwelltime_entry.setObjectName('gdb_dwelltime') + + self.grid0.addWidget(self.dwelltime_label, 17, 0) + self.grid0.addWidget(self.dwelltime_entry, 17, 1) + + # ########################################################################### + # ############### ADVANCED UI form ########################################## + # ########################################################################### + + self.grid1 = QtWidgets.QGridLayout() + self.advanced_vlay.addLayout(self.grid1) + self.grid1.setColumnStretch(0, 0) + self.grid1.setColumnStretch(1, 1) + self.advanced_vlay.addStretch() + + # Tool Type + self.type_label = QtWidgets.QLabel('%s:' % _("Tool Type")) + self.type_label.setToolTip( + _("Tool Type.\n" + "Can be:\n" + "Iso = isolation cut\n" + "Rough = rough cut, low feedrate, multiple passes\n" + "Finish = finishing cut, high feedrate")) + + self.type_combo = FCComboBox() + self.type_combo.addItems(["Iso", "Rough", "Finish"]) + self.type_combo.setObjectName('gdb_type') + + self.grid1.addWidget(self.type_label, 0, 0) + self.grid1.addWidget(self.type_combo, 0, 1) + + # Tool Offset + self.tooloffset_label = QtWidgets.QLabel('%s:' % _('Tool Offset')) + self.tooloffset_label.setToolTip( + _("Tool Offset.\n" + "Can be of a few types:\n" + "Path = zero offset\n" + "In = offset inside by half of tool diameter\n" + "Out = offset outside by half of tool diameter\n" + "Custom = custom offset using the Custom Offset value")) + + self.tooloffset_combo = FCComboBox() + self.tooloffset_combo.addItems(["Path", "In", "Out", "Custom"]) + self.tooloffset_combo.setObjectName('gdb_tool_offset') + + self.grid1.addWidget(self.tooloffset_label, 2, 0) + self.grid1.addWidget(self.tooloffset_combo, 2, 1) + + # Custom Offset + self.custom_offset_label = QtWidgets.QLabel('%s:' % _("Custom Offset")) + self.custom_offset_label.setToolTip( + _("Custom Offset.\n" + "A value to be used as offset from the current path.")) + + self.custom_offset_entry = FCDoubleSpinner() + self.custom_offset_entry.set_range(-9999.9999, 9999.9999) + self.custom_offset_entry.set_precision(self.decimals) + self.custom_offset_entry.setObjectName('gdb_custom_offset') + + self.grid1.addWidget(self.custom_offset_label, 5, 0) + self.grid1.addWidget(self.custom_offset_entry, 5, 1) + + # V-Dia + self.vdia_label = QtWidgets.QLabel('%s:' % _("V-Dia")) + self.vdia_label.setToolTip( + _("V-Dia.\n" + "Diameter of the tip for V-Shape Tools.")) + + self.vdia_entry = FCDoubleSpinner() + self.vdia_entry.set_range(0.0000, 9999.9999) + self.vdia_entry.set_precision(self.decimals) + self.vdia_entry.setObjectName('gdb_vdia') + + self.grid1.addWidget(self.vdia_label, 7, 0) + self.grid1.addWidget(self.vdia_entry, 7, 1) + + # V-Angle + self.vangle_label = QtWidgets.QLabel('%s:' % _("V-Angle")) + self.vangle_label.setToolTip( + _("V-Agle.\n" + "Angle at the tip for the V-Shape Tools.")) + + self.vangle_entry = FCDoubleSpinner() + self.vangle_entry.set_range(-360.0, 360.0) + self.vangle_entry.set_precision(self.decimals) + self.vangle_entry.setObjectName('gdb_vangle') + + self.grid1.addWidget(self.vangle_label, 8, 0) + self.grid1.addWidget(self.vangle_entry, 8, 1) + + # Feedrate Rapids + self.frapids_label = QtWidgets.QLabel('%s:' % _("FR Rapids")) + self.frapids_label.setToolTip( + _("FR Rapids. Feedrate Rapids\n" + "Speed used while moving as fast as possible.\n" + "This is used only by some devices that can't use\n" + "the G0 g-code command. Mostly 3D printers.")) + + self.frapids_entry = FCDoubleSpinner() + self.frapids_entry.set_range(0.0000, 9999.9999) + self.frapids_entry.set_precision(self.decimals) + self.frapids_entry.setObjectName('gdb_frapids') + + self.grid1.addWidget(self.frapids_label, 10, 0) + self.grid1.addWidget(self.frapids_entry, 10, 1) + + # Extra Cut + self.ecut_label = QtWidgets.QLabel('%s:' % _("ExtraCut")) + self.ecut_label.setToolTip( + _("Extra Cut.\n" + "If checked, after a isolation is finished an extra cut\n" + "will be added where the start and end of isolation meet\n" + "such as that this point is covered by this extra cut to\n" + "ensure a complete isolation.")) + + self.ecut_cb = FCCheckBox() + self.ecut_cb.setObjectName('gdb_ecut') + + self.grid1.addWidget(self.ecut_label, 12, 0) + self.grid1.addWidget(self.ecut_cb, 12, 1) + + # Extra Cut Length + self.ecut_length_label = QtWidgets.QLabel('%s:' % _("E-Cut Length")) + self.ecut_length_label.setToolTip( + _("Extra Cut length.\n" + "If checked, after a isolation is finished an extra cut\n" + "will be added where the start and end of isolation meet\n" + "such as that this point is covered by this extra cut to\n" + "ensure a complete isolation. This is the length of\n" + "the extra cut.")) + + self.ecut_length_entry = FCDoubleSpinner() + self.ecut_length_entry.set_range(0.0000, 9999.9999) + self.ecut_length_entry.set_precision(self.decimals) + self.ecut_length_entry.setObjectName('gdb_ecut_length') + + self.grid1.addWidget(self.ecut_length_label, 13, 0) + self.grid1.addWidget(self.ecut_length_entry, 13, 1) + + # ########################################################################### + # ############### NCC UI form ############################################### + # ########################################################################### + + self.grid2 = QtWidgets.QGridLayout() + self.ncc_vlay.addLayout(self.grid2) + self.grid2.setColumnStretch(0, 0) + self.grid2.setColumnStretch(1, 1) + self.ncc_vlay.addStretch() + + # Operation + op_label = QtWidgets.QLabel('%s:' % _('Operation')) + op_label.setToolTip( + _("The 'Operation' can be:\n" + "- Isolation -> will ensure that the non-copper clearing is always complete.\n" + "If it's not successful then the non-copper clearing will fail, too.\n" + "- Clear -> the regular non-copper clearing.") + ) + + self.op_radio = RadioSet([ + {"label": _("Clear"), "value": "clear"}, + {"label": _("Isolation"), "value": "iso"} + ], orientation='horizontal', stretch=False) + self.op_radio.setObjectName("gdb_n_operation") + + self.grid2.addWidget(op_label, 13, 0) + self.grid2.addWidget(self.op_radio, 13, 1) + + # Milling Type Radio Button + self.milling_type_label = QtWidgets.QLabel('%s:' % _('Milling Type')) + self.milling_type_label.setToolTip( + _("Milling type when the selected tool is of type: 'iso_op':\n" + "- climb / best for precision milling and to reduce tool usage\n" + "- conventional / useful when there is no backlash compensation") + ) + + self.milling_type_radio = RadioSet([{'label': _('Climb'), 'value': 'cl'}, + {'label': _('Conventional'), 'value': 'cv'}]) + self.milling_type_radio.setToolTip( + _("Milling type when the selected tool is of type: 'iso_op':\n" + "- climb / best for precision milling and to reduce tool usage\n" + "- conventional / useful when there is no backlash compensation") + ) + self.milling_type_radio.setObjectName("gdb_n_milling_type") + + self.grid2.addWidget(self.milling_type_label, 14, 0) + self.grid2.addWidget(self.milling_type_radio, 14, 1) + + # Overlap Entry + nccoverlabel = QtWidgets.QLabel('%s:' % _('Overlap')) + nccoverlabel.setToolTip( + _("How much (percentage) of the tool width to overlap each tool pass.\n" + "Adjust the value starting with lower values\n" + "and increasing it if areas that should be cleared are still \n" + "not cleared.\n" + "Lower values = faster processing, faster execution on CNC.\n" + "Higher values = slow processing and slow execution on CNC\n" + "due of too many paths.") + ) + self.ncc_overlap_entry = FCDoubleSpinner(suffix='%') + self.ncc_overlap_entry.set_precision(self.decimals) + self.ncc_overlap_entry.setWrapping(True) + self.ncc_overlap_entry.setRange(0.000, 99.9999) + self.ncc_overlap_entry.setSingleStep(0.1) + self.ncc_overlap_entry.setObjectName("gdb_n_overlap") + + self.grid2.addWidget(nccoverlabel, 15, 0) + self.grid2.addWidget(self.ncc_overlap_entry, 15, 1) + + # Margin + nccmarginlabel = QtWidgets.QLabel('%s:' % _('Margin')) + nccmarginlabel.setToolTip( + _("Bounding box margin.") + ) + self.ncc_margin_entry = FCDoubleSpinner() + self.ncc_margin_entry.set_precision(self.decimals) + self.ncc_margin_entry.set_range(-9999.9999, 9999.9999) + self.ncc_margin_entry.setObjectName("gdb_n_margin") + + self.grid2.addWidget(nccmarginlabel, 16, 0) + self.grid2.addWidget(self.ncc_margin_entry, 16, 1) + + # Method + methodlabel = QtWidgets.QLabel('%s:' % _('Method')) + methodlabel.setToolTip( + _("Algorithm for copper clearing:\n" + "- Standard: Fixed step inwards.\n" + "- Seed-based: Outwards from seed.\n" + "- Line-based: Parallel lines.") + ) + + self.ncc_method_combo = FCComboBox() + self.ncc_method_combo.addItems( + [_("Standard"), _("Seed"), _("Lines")] + ) + self.ncc_method_combo.setObjectName("gdb_n_method") + + self.grid2.addWidget(methodlabel, 17, 0) + self.grid2.addWidget(self.ncc_method_combo, 17, 1) + + # Connect lines + self.ncc_connect_cb = FCCheckBox('%s' % _("Connect")) + self.ncc_connect_cb.setObjectName("gdb_n_connect") + + self.ncc_connect_cb.setToolTip( + _("Draw lines between resulting\n" + "segments to minimize tool lifts.") + ) + self.grid2.addWidget(self.ncc_connect_cb, 18, 0) + + # Contour + self.ncc_contour_cb = FCCheckBox('%s' % _("Contour")) + self.ncc_contour_cb.setObjectName("gdb_n_contour") + + self.ncc_contour_cb.setToolTip( + _("Cut around the perimeter of the polygon\n" + "to trim rough edges.") + ) + self.grid2.addWidget(self.ncc_contour_cb, 18, 1) + + # ## NCC Offset choice + self.ncc_choice_offset_cb = FCCheckBox('%s' % _("Offset")) + self.ncc_choice_offset_cb.setObjectName("gdb_n_offset") + + self.ncc_choice_offset_cb.setToolTip( + _("If used, it will add an offset to the copper features.\n" + "The copper clearing will finish to a distance\n" + "from the copper features.\n" + "The value can be between 0 and 10 FlatCAM units.") + ) + self.grid2.addWidget(self.ncc_choice_offset_cb, 19, 0) + + # ## NCC Offset Entry + self.ncc_offset_spinner = FCDoubleSpinner() + self.ncc_offset_spinner.set_range(0.00, 10.00) + self.ncc_offset_spinner.set_precision(4) + self.ncc_offset_spinner.setWrapping(True) + self.ncc_offset_spinner.setObjectName("gdb_n_offset_value") + + units = self.app.defaults['units'].upper() + if units == 'MM': + self.ncc_offset_spinner.setSingleStep(0.1) + else: + self.ncc_offset_spinner.setSingleStep(0.01) + + self.grid2.addWidget(self.ncc_offset_spinner, 19, 1) + + # ########################################################################### + # ############### Paint UI form ############################################# + # ########################################################################### + + self.grid3 = QtWidgets.QGridLayout() + self.paint_vlay.addLayout(self.grid3) + self.grid3.setColumnStretch(0, 0) + self.grid3.setColumnStretch(1, 1) + self.paint_vlay.addStretch() + + # Overlap + ovlabel = QtWidgets.QLabel('%s:' % _('Overlap')) + ovlabel.setToolTip( + _("How much (percentage) of the tool width to overlap each tool pass.\n" + "Adjust the value starting with lower values\n" + "and increasing it if areas that should be painted are still \n" + "not painted.\n" + "Lower values = faster processing, faster execution on CNC.\n" + "Higher values = slow processing and slow execution on CNC\n" + "due of too many paths.") + ) + self.paintoverlap_entry = FCDoubleSpinner(suffix='%') + self.paintoverlap_entry.set_precision(3) + self.paintoverlap_entry.setWrapping(True) + self.paintoverlap_entry.setRange(0.0000, 99.9999) + self.paintoverlap_entry.setSingleStep(0.1) + self.paintoverlap_entry.setObjectName('gdb_p_overlap') + + self.grid3.addWidget(ovlabel, 1, 0) + self.grid3.addWidget(self.paintoverlap_entry, 1, 1) + + # Margin + marginlabel = QtWidgets.QLabel('%s:' % _('Margin')) + marginlabel.setToolTip( + _("Distance by which to avoid\n" + "the edges of the polygon to\n" + "be painted.") + ) + self.paintmargin_entry = FCDoubleSpinner() + self.paintmargin_entry.set_precision(self.decimals) + self.paintmargin_entry.set_range(-9999.9999, 9999.9999) + self.paintmargin_entry.setObjectName('gdb_p_margin') + + self.grid3.addWidget(marginlabel, 2, 0) + self.grid3.addWidget(self.paintmargin_entry, 2, 1) + + # Method + methodlabel = QtWidgets.QLabel('%s:' % _('Method')) + methodlabel.setToolTip( + _("Algorithm for painting:\n" + "- Standard: Fixed step inwards.\n" + "- Seed-based: Outwards from seed.\n" + "- Line-based: Parallel lines.\n" + "- Laser-lines: Active only for Gerber objects.\n" + "Will create lines that follow the traces.\n" + "- Combo: In case of failure a new method will be picked from the above\n" + "in the order specified.") + ) + + self.paintmethod_combo = FCComboBox() + self.paintmethod_combo.addItems( + [_("Standard"), _("Seed"), _("Lines"), _("Laser_lines"), _("Combo")] + ) + idx = self.paintmethod_combo.findText(_("Laser_lines")) + self.paintmethod_combo.model().item(idx).setEnabled(False) + + self.paintmethod_combo.setObjectName('gdb_p_method') + + self.grid3.addWidget(methodlabel, 7, 0) + self.grid3.addWidget(self.paintmethod_combo, 7, 1) + + # Connect lines + self.pathconnect_cb = FCCheckBox('%s' % _("Connect")) + self.pathconnect_cb.setObjectName('gdb_p_connect') + self.pathconnect_cb.setToolTip( + _("Draw lines between resulting\n" + "segments to minimize tool lifts.") + ) + + self.paintcontour_cb = FCCheckBox('%s' % _("Contour")) + self.paintcontour_cb.setObjectName('gdb_p_contour') + self.paintcontour_cb.setToolTip( + _("Cut around the perimeter of the polygon\n" + "to trim rough edges.") + ) + + self.grid3.addWidget(self.pathconnect_cb, 10, 0) + self.grid3.addWidget(self.paintcontour_cb, 10, 1) + + # #################################################################### + # #################################################################### + # GUI for the lower part of the window + # #################################################################### + # #################################################################### + + new_vlay = QtWidgets.QVBoxLayout() + grid_layout.addLayout(new_vlay, 1, 0, 1, 2) + + self.buttons_frame = QtWidgets.QFrame() + self.buttons_frame.setContentsMargins(0, 0, 0, 0) + new_vlay.addWidget(self.buttons_frame) + self.buttons_box = QtWidgets.QHBoxLayout() + self.buttons_box.setContentsMargins(0, 0, 0, 0) + self.buttons_frame.setLayout(self.buttons_box) + self.buttons_frame.show() + + add_entry_btn = FCButton(_("Add Tool in DB")) + add_entry_btn.setToolTip( + _("Add a new tool in the Tools Database.\n" + "It will be used in the Geometry UI.\n" + "You can edit it after it is added.") + ) + self.buttons_box.addWidget(add_entry_btn) + + # add_fct_entry_btn = FCButton(_("Add Paint/NCC Tool in DB")) + # add_fct_entry_btn.setToolTip( + # _("Add a new tool in the Tools Database.\n" + # "It will be used in the Paint/NCC Tools UI.\n" + # "You can edit it after it is added.") + # ) + # self.buttons_box.addWidget(add_fct_entry_btn) + + remove_entry_btn = FCButton(_("Delete Tool from DB")) + remove_entry_btn.setToolTip( + _("Remove a selection of tools in the Tools Database.") + ) + self.buttons_box.addWidget(remove_entry_btn) + + export_db_btn = FCButton(_("Export DB")) + export_db_btn.setToolTip( + _("Save the Tools Database to a custom text file.") + ) + self.buttons_box.addWidget(export_db_btn) + + import_db_btn = FCButton(_("Import DB")) + import_db_btn.setToolTip( + _("Load the Tools Database information's from a custom text file.") + ) + self.buttons_box.addWidget(import_db_btn) + + self.add_tool_from_db = FCButton(_("Add Tool from Tools DB")) + self.add_tool_from_db.setToolTip( + _("Add a new tool in the Tools Table of the\n" + "active Geometry object after selecting a tool\n" + "in the Tools Database.") + ) + self.add_tool_from_db.hide() + + self.cancel_tool_from_db = FCButton(_("Cancel")) + self.cancel_tool_from_db.hide() + + hlay = QtWidgets.QHBoxLayout() + tree_layout.addLayout(hlay) + hlay.addWidget(self.add_tool_from_db) + hlay.addWidget(self.cancel_tool_from_db) + hlay.addStretch() + + # ############################################################################## + # ############################################################################## + # ########## SETUP THE DICTIONARIES THAT HOLD THE WIDGETS ##################### + # ############################################################################## + # ############################################################################## + + self.form_fields = { + # Basic + "name": self.name_entry, + "tooldia": self.dia_entry, + "tool_type": self.shape_combo, + "cutz": self.cutz_entry, + "multidepth": self.multidepth_cb, + "depthperpass": self.multidepth_entry, + "travelz": self.travelz_entry, + "feedrate": self.frxy_entry, + "feedrate_z": self.frz_entry, + "spindlespeed": self.spindle_entry, + "dwell": self.dwell_cb, + "dwelltime": self.dwelltime_entry, + + # Advanced + "type": self.type_combo, + "offset": self.tooloffset_combo, + "offset_value": self.custom_offset_entry, + "vtipdia": self.vdia_entry, + "vtipangle": self.vangle_entry, + "feedrate_rapid": self.frapids_entry, + "extracut": self.ecut_cb, + "extracut_length": self.ecut_length_entry, + + # NCC + "tools_nccoperation": self.op_radio, + "tools_nccmilling_type": self.milling_type_radio, + "tools_nccoverlap": self.ncc_overlap_entry, + "tools_nccmargin": self.ncc_margin_entry, + "tools_nccmethod": self.ncc_method_combo, + "tools_nccconnect": self.ncc_connect_cb, + "tools_ncccontour": self.ncc_contour_cb, + "tools_ncc_offset_choice": self.ncc_choice_offset_cb, + "tools_ncc_offset_value": self.ncc_offset_spinner, + + # Paint + "tools_paintoverlap": self.paintoverlap_entry, + "tools_paintmargin": self.paintmargin_entry, + "tools_paintmethod": self.paintmethod_combo, + "tools_pathconnect": self.pathconnect_cb, + "tools_paintcontour": self.paintcontour_cb, + } + + self.name2option = { + # Basic + "gdb_name": "name", + "gdb_dia": "tooldia", + "gdb_shape": "tool_type", + "gdb_cutz": "cutz", + "gdb_multidepth": "multidepth", + "gdb_multidepth_entry": "depthperpass", + "gdb_travel": "travelz", + "gdb_frxy": "feedrate", + "gdb_frz": "feedrate_z", + "gdb_spindle": "spindlespeed", + "gdb_dwell": "dwell", + "gdb_dwelltime": "dwelltime", + + # Advanced + "gdb_type": "type", + "gdb_tool_offset": "offset", + "gdb_custom_offset": "offset_value", + "gdb_vdia": "vtipdia", + "gdb_vangle": "vtipangle", + "gdb_frapids": "feedrate_rapid", + "gdb_ecut": "extracut", + "gdb_ecut_length": "extracut_length", + + # NCC + "gdb_n_operation": "tools_nccoperation", + "gdb_n_overlap": "tools_nccoverlap", + "gdb_n_margin": "tools_nccmargin", + "gdb_n_method": "tools_nccmethod", + "gdb_n_connect": "tools_nccconnect", + "gdb_n_contour": "tools_ncccontour", + "gdb_n_offset": "tools_ncc_offset_choice", + "gdb_n_offset_value": "tools_ncc_offset_value", + "gdb_n_milling_type": "tools_nccmilling_type", + + # Paint + 'gdb_p_overlap': "tools_paintoverlap", + 'gdb_p_margin': "tools_paintmargin", + 'gdb_p_method': "tools_paintmethod", + 'gdb_p_connect': "tools_pathconnect", + 'gdb_p_contour': "tools_paintcontour", + } + + self.current_toolid = None + + # variable to show if double clicking and item will trigger adding a tool from DB + self.ok_to_add = False + + # ############################################################################## + # ######################## SIGNALS ############################################# + # ############################################################################## + + add_entry_btn.clicked.connect(self.on_tool_add) + remove_entry_btn.clicked.connect(self.on_tool_delete) + export_db_btn.clicked.connect(self.on_export_tools_db_file) + import_db_btn.clicked.connect(self.on_import_tools_db_file) + # closebtn.clicked.connect(self.accept) + + self.add_tool_from_db.clicked.connect(self.on_tool_requested_from_app) + self.cancel_tool_from_db.clicked.connect(self.on_cancel_tool) + + # self.tree_widget.selectionModel().selectionChanged.connect(self.on_list_selection_change) + self.tree_widget.currentItemChanged.connect(self.on_list_selection_change) + self.tree_widget.itemChanged.connect(self.on_list_item_edited) + self.tree_widget.customContextMenuRequested.connect(self.on_menu_request) + + self.tree_widget.itemDoubleClicked.connect(self.on_item_double_clicked) + + self.setup_db_ui() + + def on_menu_request(self, pos): + + menu = QtWidgets.QMenu() + add_tool = menu.addAction(QtGui.QIcon(self.app.resource_location + '/plus16.png'), _("Add to DB")) + add_tool.triggered.connect(self.on_tool_add) + + copy_tool = menu.addAction(QtGui.QIcon(self.app.resource_location + '/copy16.png'), _("Copy from DB")) + copy_tool.triggered.connect(self.on_tool_copy) + + delete_tool = menu.addAction(QtGui.QIcon(self.app.resource_location + '/delete32.png'), _("Delete from DB")) + delete_tool.triggered.connect(self.on_tool_delete) + + # tree_item = self.tree_widget.itemAt(pos) + menu.exec(self.tree_widget.viewport().mapToGlobal(pos)) + + def on_item_double_clicked(self, item, column): + if column == 0 and self.ok_to_add is True: + self.ok_to_add = False + self.on_tool_requested_from_app() + + def on_list_selection_change(self, current, previous): + # for idx in current.indexes(): + # print(idx.data()) + # print(current.text(0)) + self.current_toolid = int(current.text(0)) + + self.storage_to_form(self.db_tool_dict[current.text(0)]) + + def on_list_item_edited(self, item, column): + if column == 0: + return + + self.name_entry.set_value(item.text(1)) + + def storage_to_form(self, dict_storage): + for form_key in self.form_fields: + for storage_key in dict_storage: + if form_key == storage_key: + try: + self.form_fields[form_key].set_value(dict_storage[form_key]) + except Exception as e: + print(str(e)) + if storage_key == 'data': + for data_key in dict_storage[storage_key]: + if form_key == data_key: + try: + self.form_fields[form_key].set_value(dict_storage['data'][data_key]) + except Exception as e: + print(str(e)) + + def form_to_storage(self, tool): + self.blockSignals(True) + + widget_changed = self.sender() + wdg_objname = widget_changed.objectName() + option_changed = self.name2option[wdg_objname] + + tooluid_item = int(tool) + + for tooluid_key, tooluid_val in self.db_tool_dict.items(): + if int(tooluid_key) == tooluid_item: + new_option_value = self.form_fields[option_changed].get_value() + if option_changed in tooluid_val: + tooluid_val[option_changed] = new_option_value + if option_changed in tooluid_val['data']: + tooluid_val['data'][option_changed] = new_option_value + + self.blockSignals(False) + + def setup_db_ui(self): + filename = self.app.data_path + '/geo_tools_db.FlatDB' + + # load the database tools from the file + try: + with open(filename) as f: + tools = f.read() + except IOError: + self.app.log.error("Could not load tools DB file.") + self.app.inform.emit('[ERROR] %s' % _("Could not load Tools DB file.")) + return + + try: + self.db_tool_dict = json.loads(tools) + except Exception: + e = sys.exc_info()[0] + self.app.log.error(str(e)) + self.app.inform.emit('[ERROR] %s' % _("Failed to parse Tools DB file.")) + return + + self.app.inform.emit('[success] %s: %s' % (_("Loaded FlatCAM Tools DB from"), filename)) + + self.build_db_ui() + + def build_db_ui(self): + self.ui_disconnect() + nr_crt = 0 + + parent = self.tree_widget + self.tree_widget.blockSignals(True) + self.tree_widget.clear() + self.tree_widget.blockSignals(False) + + for toolid, dict_val in self.db_tool_dict.items(): + row = nr_crt + nr_crt += 1 + + t_name = dict_val['name'] + try: + # self.add_tool_table_line(row, name=t_name, tooldict=dict_val) + self.tree_widget.blockSignals(True) + try: + self.tree_widget.addParentEditable(parent=parent, title=[str(row+1), t_name], editable=True) + except Exception as e: + print('FlatCAMCoomn.ToolDB2.build_db_ui() -> ', str(e)) + self.tree_widget.blockSignals(False) + except Exception as e: + self.app.log.debug("ToolDB.build_db_ui.add_tool_table_line() --> %s" % str(e)) + + if self.current_toolid is None or self.current_toolid < 1: + if self.db_tool_dict: + self.storage_to_form(self.db_tool_dict['1']) + + # Enable GUI + self.basic_box.setEnabled(True) + self.advanced_box.setEnabled(True) + self.ncc_box.setEnabled(True) + self.paint_box.setEnabled(True) + + self.tree_widget.setCurrentItem(self.tree_widget.topLevelItem(0)) + # self.tree_widget.setFocus() + + else: + # Disable GUI + self.basic_box.setEnabled(False) + self.advanced_box.setEnabled(False) + self.ncc_box.setEnabled(False) + self.paint_box.setEnabled(False) + else: + self.storage_to_form(self.db_tool_dict[str(self.current_toolid)]) + + self.ui_connect() + + def on_tool_add(self): + """ + Add a tool in the DB Tool Table + :return: None + """ + + default_data = {} + default_data.update({ + "plot": True, + "cutz": float(self.app.defaults["geometry_cutz"]), + "multidepth": self.app.defaults["geometry_multidepth"], + "depthperpass": float(self.app.defaults["geometry_depthperpass"]), + "vtipdia": float(self.app.defaults["geometry_vtipdia"]), + "vtipangle": float(self.app.defaults["geometry_vtipangle"]), + "travelz": float(self.app.defaults["geometry_travelz"]), + "feedrate": float(self.app.defaults["geometry_feedrate"]), + "feedrate_z": float(self.app.defaults["geometry_feedrate_z"]), + "feedrate_rapid": float(self.app.defaults["geometry_feedrate_rapid"]), + "spindlespeed": self.app.defaults["geometry_spindlespeed"], + "dwell": self.app.defaults["geometry_dwell"], + "dwelltime": float(self.app.defaults["geometry_dwelltime"]), + "ppname_g": self.app.defaults["geometry_ppname_g"], + "extracut": self.app.defaults["geometry_extracut"], + "extracut_length": float(self.app.defaults["geometry_extracut_length"]), + "toolchange": self.app.defaults["geometry_toolchange"], + "toolchangexy": self.app.defaults["geometry_toolchangexy"], + "toolchangez": float(self.app.defaults["geometry_toolchangez"]), + "startz": self.app.defaults["geometry_startz"], + "endz": float(self.app.defaults["geometry_endz"]), + + # NCC + "tools_nccoperation": self.app.defaults["tools_nccoperation"], + "tools_nccmilling_type": self.app.defaults["tools_nccmilling_type"], + "tools_nccoverlap": float(self.app.defaults["tools_nccoverlap"]), + "tools_nccmargin": float(self.app.defaults["tools_nccmargin"]), + "tools_nccmethod": self.app.defaults["tools_nccmethod"], + "tools_nccconnect": self.app.defaults["tools_nccconnect"], + "tools_ncccontour": self.app.defaults["tools_ncccontour"], + "tools_ncc_offset_choice": self.app.defaults["tools_ncc_offset_choice"], + "tools_ncc_offset_value": float(self.app.defaults["tools_ncc_offset_value"]), + + # Paint + "tools_paintoverlap": float(self.app.defaults["tools_paintoverlap"]), + "tools_paintmargin": float(self.app.defaults["tools_paintmargin"]), + "tools_paintmethod": self.app.defaults["tools_paintmethod"], + "tools_pathconnect": self.app.defaults["tools_pathconnect"], + "tools_paintcontour": self.app.defaults["tools_paintcontour"], + }) + + dict_elem = {} + dict_elem['name'] = 'new_tool' + if type(self.app.defaults["geometry_cnctooldia"]) == float: + dict_elem['tooldia'] = self.app.defaults["geometry_cnctooldia"] + else: + try: + tools_string = self.app.defaults["geometry_cnctooldia"].split(",") + tools_diameters = [eval(a) for a in tools_string if a != ''] + dict_elem['tooldia'] = tools_diameters[0] if tools_diameters else 0.0 + except Exception as e: + self.app.log.debug("ToolDB.on_tool_add() --> %s" % str(e)) + return + + dict_elem['offset'] = 'Path' + dict_elem['offset_value'] = 0.0 + dict_elem['type'] = 'Rough' + dict_elem['tool_type'] = 'C1' + dict_elem['data'] = default_data + + new_toolid = len(self.db_tool_dict) + 1 + self.db_tool_dict[str(new_toolid)] = deepcopy(dict_elem) + + # add the new entry to the Tools DB table + self.update_storage() + self.build_db_ui() + self.app.inform.emit('[success] %s' % _("Tool added to DB.")) + + def on_tool_copy(self): + """ + Copy a selection of Tools in the Tools DB table + :return: + """ + new_tool_id = len(self.db_tool_dict) + for item in self.tree_widget.selectedItems(): + old_tool_id = item.data(0, QtCore.Qt.DisplayRole) + + for toolid, dict_val in list(self.db_tool_dict.items()): + if int(old_tool_id) == int(toolid): + new_tool_id += 1 + new_key = str(new_tool_id) + + self.db_tool_dict.update({ + new_key: deepcopy(dict_val) + }) + + self.current_toolid = new_tool_id + + self.update_storage() + self.build_db_ui() + self.app.inform.emit('[success] %s' % _("Tool copied from Tools DB.")) + + def on_tool_delete(self): + """ + Delete a selection of Tools in the Tools DB table + :return: + """ + for item in self.tree_widget.selectedItems(): + toolname_to_remove = item.data(0, QtCore.Qt.DisplayRole) + + for toolid, dict_val in list(self.db_tool_dict.items()): + if int(toolname_to_remove) == int(toolid): + # remove from the storage + self.db_tool_dict.pop(toolid, None) + + self.current_toolid -= 1 + + self.update_storage() + self.build_db_ui() + self.app.inform.emit('[success] %s' % _("Tool removed from Tools DB.")) + + def on_export_tools_db_file(self): + self.app.report_usage("on_export_tools_db_file") + self.app.log.debug("on_export_tools_db_file()") + + date = str(datetime.today()).rpartition('.')[0] + date = ''.join(c for c in date if c not in ':-') + date = date.replace(' ', '_') + + filter__ = "Text File (*.TXT);;All Files (*.*)" + filename, _f = FCFileSaveDialog.get_saved_filename(caption=_("Export Tools Database"), + directory='{l_save}/FlatCAM_{n}_{date}'.format( + l_save=str(self.app.get_last_save_folder()), + n=_("Tools_Database"), + date=date), + filter=filter__) + + filename = str(filename) + + if filename == "": + self.app.inform.emit('[WARNING_NOTCL] %s' % _("Cancelled.")) + return + else: + try: + f = open(filename, 'w') + f.close() + except PermissionError: + self.app.inform.emit('[WARNING] %s' % + _("Permission denied, saving not possible.\n" + "Most likely another app is holding the file open and not accessible.")) + return + except IOError: + self.app.log.debug('Creating a new Tools DB file ...') + f = open(filename, 'w') + f.close() + except Exception: + e = sys.exc_info()[0] + self.app.log.error("Could not load Tools DB file.") + self.app.log.error(str(e)) + self.app.inform.emit('[ERROR_NOTCL] %s' % _("Could not load Tools DB file.")) + return + + # Save update options + try: + # Save Tools DB in a file + try: + with open(filename, "w") as f: + json.dump(self.db_tool_dict, f, default=to_dict, indent=2) + except Exception as e: + self.app.log.debug("App.on_save_tools_db() --> %s" % str(e)) + self.inform.emit('[ERROR_NOTCL] %s' % _("Failed to write Tools DB to file.")) + return + except Exception: + self.app.inform.emit('[ERROR_NOTCL] %s' % _("Failed to write Tools DB to file.")) + return + + self.app.inform.emit('[success] %s: %s' % (_("Exported Tools DB to"), filename)) + + def on_import_tools_db_file(self): + self.app.report_usage("on_import_tools_db_file") + self.app.log.debug("on_import_tools_db_file()") + + filter__ = "Text File (*.TXT);;All Files (*.*)" + filename, _f = QtWidgets.QFileDialog.getOpenFileName(caption=_("Import FlatCAM Tools DB"), filter=filter__) + + if filename == "": + self.app.inform.emit('[WARNING_NOTCL] %s' % _("Cancelled.")) + else: + try: + with open(filename) as f: + tools_in_db = f.read() + except IOError: + self.app.log.error("Could not load Tools DB file.") + self.app.inform.emit('[ERROR_NOTCL] %s' % _("Could not load Tools DB file.")) + return + + try: + self.db_tool_dict = json.loads(tools_in_db) + except Exception: + e = sys.exc_info()[0] + self.app.log.error(str(e)) + self.app.inform.emit('[ERROR] %s' % _("Failed to parse Tools DB file.")) + return + + self.app.inform.emit('[success] %s: %s' % (_("Loaded FlatCAM Tools DB from"), filename)) + self.build_db_ui() + self.update_storage() + + def on_save_tools_db(self, silent=False): + self.app.log.debug("ToolsDB.on_save_button() --> Saving Tools Database to file.") + + filename = self.app.data_path + "/geo_tools_db.FlatDB" + + # Preferences save, update the color of the Tools DB Tab text + for idx in range(self.app.ui.plot_tab_area.count()): + if self.app.ui.plot_tab_area.tabText(idx) == _("Tools Database"): + self.app.ui.plot_tab_area.tabBar.setTabTextColor(idx, QtGui.QColor('black')) + + # Save Tools DB in a file + try: + f = open(filename, "w") + json.dump(self.db_tool_dict, f, default=to_dict, indent=2) + f.close() + except Exception as e: + self.app.log.debug("ToolsDB.on_save_tools_db() --> %s" % str(e)) + self.app.inform.emit('[ERROR_NOTCL] %s' % _("Failed to write Tools DB to file.")) + return + + if not silent: + self.app.inform.emit('[success] %s' % _("Saved Tools DB.")) + + def ui_connect(self): + # make sure that we don't make multiple connections to the widgets + self.ui_disconnect() + + self.name_entry.editingFinished.connect(self.update_tree_name) + + for key in self.form_fields: + wdg = self.form_fields[key] + + # FCEntry + if isinstance(wdg, FCEntry): + wdg.textChanged.connect(self.update_storage) + + # ComboBox + if isinstance(wdg, FCComboBox): + wdg.currentIndexChanged.connect(self.update_storage) + + # CheckBox + if isinstance(wdg, FCCheckBox): + wdg.toggled.connect(self.update_storage) + + # FCRadio + if isinstance(wdg, RadioSet): + wdg.activated_custom.connect(self.update_storage) + + # SpinBox, DoubleSpinBox + if isinstance(wdg, FCSpinner) or isinstance(wdg, FCDoubleSpinner): + wdg.valueChanged.connect(self.update_storage) + + def ui_disconnect(self): + try: + self.name_entry.editingFinished.disconnect(self.update_tree_name) + except (TypeError, AttributeError): + pass + + for key in self.form_fields: + wdg = self.form_fields[key] + + # FCEntry + if isinstance(wdg, FCEntry): + try: + wdg.textChanged.disconnect(self.update_storage) + except (TypeError, AttributeError): + pass + + # ComboBox + if isinstance(wdg, FCComboBox): + try: + wdg.currentIndexChanged.disconnect(self.update_storage) + except (TypeError, AttributeError): + pass + + # CheckBox + if isinstance(wdg, FCCheckBox): + try: + wdg.toggled.disconnect(self.update_storage) + except (TypeError, AttributeError): + pass + + # FCRadio + if isinstance(wdg, RadioSet): + try: + wdg.activated_custom.disconnect(self.update_storage) + except (TypeError, AttributeError): + pass + + # SpinBox, DoubleSpinBox + if isinstance(wdg, FCSpinner) or isinstance(wdg, FCDoubleSpinner): + try: + wdg.valueChanged.disconnect(self.update_storage) + except (TypeError, AttributeError): + pass + + def update_tree_name(self): + val = self.name_entry.get_value() + + item = self.tree_widget.currentItem() + # I'm setting the value for the second column (designated by 1) because first column holds the ID + # and second column holds the Name (this behavior is set in the build_ui method) + item.setData(1, QtCore.Qt.DisplayRole, val) + + def update_storage(self): + """ + Update the dictionary that is the storage of the tools 'database' + :return: + """ + tool_id = str(self.current_toolid) + + try: + wdg = self.sender() + + assert isinstance(wdg, QtWidgets.QWidget), "Expected a QWidget got %s" % type(wdg) + + if wdg is None: + return + + wdg_name = wdg.objectName() + val = wdg.get_value() + except AttributeError: + return + + if wdg_name == "gdb_name": + self.db_tool_dict[tool_id]['name'] = val + elif wdg_name == "gdb_dia": + self.db_tool_dict[tool_id]['tooldia'] = val + elif wdg_name == "gdb_tool_offset": + self.db_tool_dict[tool_id]['offset'] = val + elif wdg_name == "gdb_custom_offset": + self.db_tool_dict[tool_id]['offset_value'] = val + elif wdg_name == "gdb_type": + self.db_tool_dict[tool_id]['type'] = val + elif wdg_name == "gdb_shape": + self.db_tool_dict[tool_id]['tool_type'] = val + else: + if wdg_name == "gdb_cutz": + self.db_tool_dict[tool_id]['data']['cutz'] = val + elif wdg_name == "gdb_multidepth": + self.db_tool_dict[tool_id]['data']['multidepth'] = val + elif wdg_name == "gdb_multidepth_entry": + self.db_tool_dict[tool_id]['data']['depthperpass'] = val + + elif wdg_name == "gdb_travel": + self.db_tool_dict[tool_id]['data']['travelz'] = val + elif wdg_name == "gdb_frxy": + self.db_tool_dict[tool_id]['data']['feedrate'] = val + elif wdg_name == "gdb_frz": + self.db_tool_dict[tool_id]['data']['feedrate_z'] = val + elif wdg_name == "gdb_spindle": + self.db_tool_dict[tool_id]['data']['spindlespeed'] = val + elif wdg_name == "gdb_dwell": + self.db_tool_dict[tool_id]['data']['dwell'] = val + elif wdg_name == "gdb_dwelltime": + self.db_tool_dict[tool_id]['data']['dwelltime'] = val + + elif wdg_name == "gdb_vdia": + self.db_tool_dict[tool_id]['data']['vtipdia'] = val + elif wdg_name == "gdb_vangle": + self.db_tool_dict[tool_id]['data']['vtipangle'] = val + elif wdg_name == "gdb_frapids": + self.db_tool_dict[tool_id]['data']['feedrate_rapid'] = val + elif wdg_name == "gdb_ecut": + self.db_tool_dict[tool_id]['data']['extracut'] = val + elif wdg_name == "gdb_ecut_length": + self.db_tool_dict[tool_id]['data']['extracut_length'] = val + + # NCC Tool + elif wdg_name == "gdb_n_operation": + self.db_tool_dict[tool_id]['data']['tools_nccoperation'] = val + elif wdg_name == "gdb_n_overlap": + self.db_tool_dict[tool_id]['data']['tools_nccoverlap'] = val + elif wdg_name == "gdb_n_margin": + self.db_tool_dict[tool_id]['data']['tools_nccmargin'] = val + elif wdg_name == "gdb_n_method": + self.db_tool_dict[tool_id]['data']['tools_nccmethod'] = val + elif wdg_name == "gdb_n_connect": + self.db_tool_dict[tool_id]['data']['tools_nccconnect'] = val + elif wdg_name == "gdb_n_contour": + self.db_tool_dict[tool_id]['data']['tools_ncccontour'] = val + elif wdg_name == "gdb_n_offset": + self.db_tool_dict[tool_id]['data']['tools_ncc_offset_choice'] = val + elif wdg_name == "gdb_n_offset_value": + self.db_tool_dict[tool_id]['data']['tools_ncc_offset_value'] = val + elif wdg_name == "gdb_n_milling_type": + self.db_tool_dict[tool_id]['data']['tools_nccmilling_type'] = val + + # Paint Tool + elif wdg_name == "gdb_p_overlap": + self.db_tool_dict[tool_id]['data']['tools_paintoverlap'] = val + elif wdg_name == "gdb_p_margin": + self.db_tool_dict[tool_id]['data']['tools_paintmargin'] = val + elif wdg_name == "gdb_p_method": + self.db_tool_dict[tool_id]['data']['tools_paintmethod'] = val + elif wdg_name == "gdb_p_connect": + self.db_tool_dict[tool_id]['data']['tools_pathconnect'] = val + elif wdg_name == "gdb_p_contour": + self.db_tool_dict[tool_id]['data']['tools_paintcontour'] = val + + self.callback_app() + + def on_tool_requested_from_app(self): + if not self.tree_widget.selectedItems(): + self.app.inform.emit('[WARNING_NOTCL] %s...' % _("No Tool/row selected in the Tools Database table")) + return + + for item in self.tree_widget.selectedItems(): + tool_uid = item.data(0, QtCore.Qt.DisplayRole) + + for key in self.db_tool_dict.keys(): + if str(key) == str(tool_uid): + selected_tool = self.db_tool_dict[key] + self.on_tool_request(tool=selected_tool) + + def on_cancel_tool(self): + for idx in range(self.app.ui.plot_tab_area.count()): + if self.app.ui.plot_tab_area.tabText(idx) == _("Tools Database"): + wdg = self.app.ui.plot_tab_area.widget(idx) + wdg.deleteLater() + self.app.ui.plot_tab_area.removeTab(idx) + self.app.inform.emit('%s' % _("Cancelled adding tool from DB.")) + + # def resize_new_tool_table_widget(self, min_size, max_size): + # """ + # Resize the table widget responsible for adding new tool in the Tool Database + # + # :param min_size: passed by rangeChanged signal or the self.new_tool_table_widget.horizontalScrollBar() + # :param max_size: passed by rangeChanged signal or the self.new_tool_table_widget.horizontalScrollBar() + # :return: + # """ + # t_height = self.t_height + # if max_size > min_size: + # t_height = self.t_height + self.new_tool_table_widget.verticalScrollBar().height() + # + # self.new_tool_table_widget.setMaximumHeight(t_height) + + def closeEvent(self, QCloseEvent): + super().closeEvent(QCloseEvent) diff --git a/FlatCAMObj.py b/FlatCAMObj.py deleted file mode 100644 index d23ea62b..00000000 --- a/FlatCAMObj.py +++ /dev/null @@ -1,8244 +0,0 @@ -# ########################################################## -# FlatCAM: 2D Post-processing for Manufacturing # -# http://flatcam.org # -# Author: Juan Pablo Caram (c) # -# Date: 2/5/2014 # -# MIT Licence # -# ########################################################## - -# ########################################################## -# File modified by: Marius Stanciu # -# ########################################################## - - -from shapely.geometry import Point, Polygon, MultiPolygon, MultiLineString, LineString, LinearRing -from shapely.ops import cascaded_union -import shapely.affinity as affinity - -from copy import deepcopy -# from copy import copy - -from io import StringIO -import traceback -import inspect # TODO: For debugging only. -from datetime import datetime - -from flatcamEditors.FlatCAMTextEditor import TextEditor -from flatcamGUI.ObjectUI import * -from flatcamGUI.GUIElements import FCFileSaveDialog -from FlatCAMCommon import LoudDict -from flatcamGUI.PlotCanvasLegacy import ShapeCollectionLegacy -from flatcamParsers.ParseExcellon import Excellon -from flatcamParsers.ParseGerber import Gerber -from camlib import Geometry, CNCjob -import FlatCAMApp - -# from flatcamGUI.VisPyVisuals import ShapeCollection - -import tkinter as tk -import os -import sys -import itertools -import ezdxf - -import math -import numpy as np - -import gettext -import FlatCAMTranslation as fcTranslate -import builtins - -fcTranslate.apply_language('strings') -if '_' not in builtins.__dict__: - _ = gettext.gettext - - -# Interrupts plotting process if FlatCAMObj has been deleted -class ObjectDeleted(Exception): - pass - - -class ValidationError(Exception): - def __init__(self, message, errors): - super().__init__(message) - - self.errors = errors - - -# ####################################### -# # FlatCAMObj ## -# ####################################### - - -class FlatCAMObj(QtCore.QObject): - """ - Base type of objects handled in FlatCAM. These become interactive - in the GUI, can be plotted, and their options can be modified - by the user in their respective forms. - """ - - # Instance of the application to which these are related. - # The app should set this value. - app = None - - # signal to plot a single object - plot_single_object = QtCore.pyqtSignal() - - def __init__(self, name): - """ - Constructor. - - :param name: Name of the object given by the user. - :return: FlatCAMObj - """ - - QtCore.QObject.__init__(self) - - # View - self.ui = None - - self.options = LoudDict(name=name) - self.options.set_change_callback(self.on_options_change) - - self.form_fields = {} - - # store here the default data for Geometry Data - self.default_data = {} - - # 2D mode - # Axes must exist and be attached to canvas. - self.axes = None - self.kind = None # Override with proper name - - if self.app.is_legacy is False: - self.shapes = self.app.plotcanvas.new_shape_group() - # self.shapes = ShapeCollection(parent=self.app.plotcanvas.view.scene, pool=self.app.pool, layers=2) - else: - self.shapes = ShapeCollectionLegacy(obj=self, app=self.app, name=name) - - self.mark_shapes = {} - - self.item = None # Link with project view item - - self.muted_ui = False - self.deleted = False - - try: - self._drawing_tolerance = float(self.app.defaults["global_tolerance"]) if \ - self.app.defaults["global_tolerance"] else 0.01 - except ValueError: - self._drawing_tolerance = 0.01 - - self.isHovering = False - self.notHovering = True - - # Flag to show if a selection shape is drawn - self.selection_shape_drawn = False - - # self.units = 'IN' - self.units = self.app.defaults['units'] - - self.plot_single_object.connect(self.single_object_plot) - - def __del__(self): - pass - - def __str__(self): - return "".format(self.kind, self.options["name"]) - - def from_dict(self, d): - """ - This supersedes ``from_dict`` in derived classes. Derived classes - must inherit from FlatCAMObj first, then from derivatives of Geometry. - - ``self.options`` is only updated, not overwritten. This ensures that - options set by the app do not vanish when reading the objects - from a project file. - - :param d: Dictionary with attributes to set. - :return: None - """ - - for attr in self.ser_attrs: - - if attr == 'options': - self.options.update(d[attr]) - else: - try: - setattr(self, attr, d[attr]) - except KeyError: - log.debug("FlatCAMObj.from_dict() --> KeyError: %s. " - "Means that we are loading an old project that don't" - "have all attributes in the latest FlatCAM." % str(attr)) - pass - - def on_options_change(self, key): - # Update form on programmatically options change - self.set_form_item(key) - - # Set object visibility - if key == 'plot': - self.visible = self.options['plot'] - - self.optionChanged.emit(key) - - def set_ui(self, ui): - self.ui = ui - - self.form_fields = {"name": self.ui.name_entry} - - assert isinstance(self.ui, ObjectUI) - self.ui.name_entry.returnPressed.connect(self.on_name_activate) - - try: - # it will raise an exception for those FlatCAM objects that do not build UI with the common elements - self.ui.offset_button.clicked.connect(self.on_offset_button_click) - except (TypeError, AttributeError): - pass - - try: - self.ui.scale_button.clicked.connect(self.on_scale_button_click) - except (TypeError, AttributeError): - pass - - try: - self.ui.offsetvector_entry.returnPressed.connect(self.on_offset_button_click) - except (TypeError, AttributeError): - pass - - # Creates problems on focusOut - try: - self.ui.scale_entry.returnPressed.connect(self.on_scale_button_click) - except (TypeError, AttributeError): - pass - - # self.ui.skew_button.clicked.connect(self.on_skew_button_click) - - def build_ui(self): - """ - Sets up the UI/form for this object. Show the UI - in the App. - - :return: None - :rtype: None - """ - - self.muted_ui = True - FlatCAMApp.App.log.debug(str(inspect.stack()[1][3]) + "--> FlatCAMObj.build_ui()") - - try: - # HACK: disconnect the scale entry signal since on focus out event will trigger an undesired scale() - # it seems that the takewidget() does generate a focus out event for the QDoubleSpinbox ... - # and reconnect after the takeWidget() is done - # self.ui.scale_entry.returnPressed.disconnect(self.on_scale_button_click) - self.app.ui.selected_scroll_area.takeWidget() - # self.ui.scale_entry.returnPressed.connect(self.on_scale_button_click) - except Exception as e: - self.app.log.debug("FlatCAMObj.build_ui() --> Nothing to remove: %s" % str(e)) - - self.app.ui.selected_scroll_area.setWidget(self.ui) - # self.ui.setMinimumWidth(100) - # self.ui.setMaximumWidth(self.app.ui.selected_tab.sizeHint().width()) - - self.muted_ui = False - - def on_name_activate(self, silent=None): - old_name = copy(self.options["name"]) - new_name = self.ui.name_entry.get_value() - - if new_name != old_name: - # update the SHELL auto-completer model data - try: - self.app.myKeywords.remove(old_name) - self.app.myKeywords.append(new_name) - self.app.shell._edit.set_model_data(self.app.myKeywords) - self.app.ui.code_editor.set_model_data(self.app.myKeywords) - except Exception: - log.debug("on_name_activate() --> Could not remove the old object name from auto-completer model list") - - self.options["name"] = self.ui.name_entry.get_value() - self.default_data["name"] = self.ui.name_entry.get_value() - self.app.collection.update_view() - if silent: - self.app.inform.emit('[success] %s: %s %s: %s' % ( - _("Name changed from"), str(old_name), _("to"), str(new_name) - ) - ) - - def on_offset_button_click(self): - self.app.report_usage("obj_on_offset_button") - - self.read_form() - vector_val = self.ui.offsetvector_entry.get_value() - - def worker_task(): - with self.app.proc_container.new(_("Offsetting...")): - self.offset(vector_val) - self.app.proc_container.update_view_text('') - with self.app.proc_container.new('%s...' % _("Plotting")): - self.plot() - self.app.object_changed.emit(self) - - self.app.worker_task.emit({'fcn': worker_task, 'params': []}) - - def on_scale_button_click(self): - self.read_form() - try: - factor = float(eval(self.ui.scale_entry.get_value())) - except Exception as e: - self.app.inform.emit('[ERROR_NOTCL] %s' % _("Scaling could not be executed.")) - log.debug("FlatCAMObj.on_scale_button_click() -- %s" % str(e)) - return - - if type(factor) != float: - self.app.inform.emit('[ERROR_NOTCL] %s' % _("Scaling could not be executed.")) - - # if factor is 1.0 do nothing, there is no point in scaling with a factor of 1.0 - if factor == 1.0: - self.app.inform.emit('[success] %s' % _("Scale done.")) - return - - log.debug("FlatCAMObj.on_scale_button_click()") - - def worker_task(): - with self.app.proc_container.new(_("Scaling...")): - self.scale(factor) - self.app.inform.emit('[success] %s' % _("Scale done.")) - - self.app.proc_container.update_view_text('') - with self.app.proc_container.new('%s...' % _("Plotting")): - self.plot() - self.app.object_changed.emit(self) - - self.app.worker_task.emit({'fcn': worker_task, 'params': []}) - - def on_skew_button_click(self): - self.app.report_usage("obj_on_skew_button") - self.read_form() - x_angle = self.ui.xangle_entry.get_value() - y_angle = self.ui.yangle_entry.get_value() - - def worker_task(): - with self.app.proc_container.new(_("Skewing...")): - self.skew(x_angle, y_angle) - self.app.proc_container.update_view_text('') - with self.app.proc_container.new('%s...' % _("Plotting")): - self.plot() - self.app.object_changed.emit(self) - - self.app.worker_task.emit({'fcn': worker_task, 'params': []}) - - def to_form(self): - """ - Copies options to the UI form. - - :return: None - """ - FlatCAMApp.App.log.debug(str(inspect.stack()[1][3]) + " --> FlatCAMObj.to_form()") - for option in self.options: - try: - self.set_form_item(option) - except Exception: - self.app.log.warning("Unexpected error:", sys.exc_info()) - - def read_form(self): - """ - Reads form into ``self.options``. - - :return: None - :rtype: None - """ - FlatCAMApp.App.log.debug(str(inspect.stack()[1][3]) + "--> FlatCAMObj.read_form()") - for option in self.options: - try: - self.read_form_item(option) - except Exception: - self.app.log.warning("Unexpected error:", sys.exc_info()) - - def set_form_item(self, option): - """ - Copies the specified option to the UI form. - - :param option: Name of the option (Key in ``self.options``). - :type option: str - :return: None - """ - - try: - self.form_fields[option].set_value(self.options[option]) - except KeyError: - # self.app.log.warn("Tried to set an option or field that does not exist: %s" % option) - pass - - def read_form_item(self, option): - """ - Reads the specified option from the UI form into ``self.options``. - - :param option: Name of the option. - :type option: str - :return: None - """ - try: - self.options[option] = self.form_fields[option].get_value() - except KeyError: - pass - # self.app.log.warning("Failed to read option from field: %s" % option) - - def plot(self, kind=None): - """ - Plot this object (Extend this method to implement the actual plotting). - Call this in descendants before doing the plotting. - - :param kind: Used by only some of the FlatCAM objects - :return: Whether to continue plotting or not depending on the "plot" option. Boolean - """ - FlatCAMApp.App.log.debug(str(inspect.stack()[1][3]) + " --> FlatCAMObj.plot()") - - if self.deleted: - return False - - self.clear() - return True - - def single_object_plot(self): - def plot_task(): - with self.app.proc_container.new('%s...' % _("Plotting")): - self.plot() - self.app.object_changed.emit(self) - - self.app.worker_task.emit({'fcn': plot_task, 'params': []}) - - def serialize(self): - """ - Returns a representation of the object as a dictionary so - it can be later exported as JSON. Override this method. - - :return: Dictionary representing the object - :rtype: dict - """ - return - - def deserialize(self, obj_dict): - """ - Re-builds an object from its serialized version. - - :param obj_dict: Dictionary representing a FlatCAMObj - :type obj_dict: dict - :return: None - """ - return - - def add_shape(self, **kwargs): - if self.deleted: - raise ObjectDeleted() - else: - key = self.shapes.add(tolerance=self.drawing_tolerance, **kwargs) - return key - - def add_mark_shape(self, apid, **kwargs): - if self.deleted: - raise ObjectDeleted() - else: - key = self.mark_shapes[apid].add(tolerance=self.drawing_tolerance, layer=0, **kwargs) - return key - - def update_filters(self, last_ext, filter_string): - """ - Will modify the filter string that is used when saving a file (a list of file extensions) to have the last - used file extension as the first one in the special string - - :param last_ext: The file extension that was last used to save a file - :param filter_string: A key in self.app.defaults that holds a string with the filter from QFileDialog - used when saving a file - :return: None - """ - - filters = copy(self.app.defaults[filter_string]) - filter_list = filters.split(';;') - filter_list_enum_1 = enumerate(filter_list) - - # search for the last element in the filters which should always be "All Files (*.*)" - last_elem = '' - for elem in list(filter_list_enum_1): - if '(*.*)' in elem[1]: - last_elem = filter_list.pop(elem[0]) - - filter_list_enum = enumerate(filter_list) - for elem in list(filter_list_enum): - if '.' + last_ext in elem[1]: - used_ext = filter_list.pop(elem[0]) - - # sort the extensions back - filter_list.sort(key=lambda x: x.rpartition('.')[2]) - - # add as a first element the last used extension - filter_list.insert(0, used_ext) - # add back the element that should always be the last (All Files) - filter_list.append(last_elem) - - self.app.defaults[filter_string] = ';;'.join(filter_list) - return - - @staticmethod - def poly2rings(poly): - return [poly.exterior] + [interior for interior in poly.interiors] - - @property - def visible(self): - return self.shapes.visible - - @visible.setter - def visible(self, value, threaded=True): - log.debug("FlatCAMObj.visible()") - - def worker_task(app_obj): - self.shapes.visible = value - - if self.app.is_legacy is False: - # Not all object types has annotations - try: - self.annotation.visible = value - except Exception: - pass - - if threaded is False: - worker_task(app_obj=self.app) - else: - self.app.worker_task.emit({'fcn': worker_task, 'params': [self]}) - - @property - def drawing_tolerance(self): - self.units = self.app.defaults['units'].upper() - tol = self._drawing_tolerance if self.units == 'MM' or not self.units else self._drawing_tolerance / 25.4 - return tol - - @drawing_tolerance.setter - def drawing_tolerance(self, value): - self.units = self.app.defaults['units'].upper() - self._drawing_tolerance = value if self.units == 'MM' or not self.units else value / 25.4 - - def clear(self, update=False): - self.shapes.clear(update) - - # Not all object types has annotations - try: - self.annotation.clear(update) - except AttributeError: - pass - - def delete(self): - # Free resources - del self.ui - del self.options - - # Set flag - self.deleted = True - - -class FlatCAMGerber(FlatCAMObj, Gerber): - """ - Represents Gerber code. - """ - optionChanged = QtCore.pyqtSignal(str) - replotApertures = QtCore.pyqtSignal() - - ui_type = GerberObjectUI - - def merge(self, grb_list, grb_final): - """ - Merges the geometry of objects in geo_list into - the geometry of geo_final. - - :param grb_list: List of FlatCAMGerber Objects to join. - :param grb_final: Destination FlatCAMGeometry object. - :return: None - """ - - if grb_final.solid_geometry is None: - grb_final.solid_geometry = [] - grb_final.follow_geometry = [] - - if not grb_final.apertures: - grb_final.apertures = {} - - if type(grb_final.solid_geometry) is not list: - grb_final.solid_geometry = [grb_final.solid_geometry] - grb_final.follow_geometry = [grb_final.follow_geometry] - - for grb in grb_list: - - # Expand lists - if type(grb) is list: - FlatCAMGerber.merge(grb, grb_final) - else: # If not list, just append - for option in grb.options: - if option != 'name': - try: - grb_final.options[option] = grb.options[option] - except KeyError: - log.warning("Failed to copy option.", option) - - try: - for geos in grb.solid_geometry: - grb_final.solid_geometry.append(geos) - grb_final.follow_geometry.append(geos) - except TypeError: - grb_final.solid_geometry.append(grb.solid_geometry) - grb_final.follow_geometry.append(grb.solid_geometry) - - for ap in grb.apertures: - if ap not in grb_final.apertures: - grb_final.apertures[ap] = grb.apertures[ap] - else: - # create a list of integers out of the grb.apertures keys and find the max of that value - # then, the aperture duplicate is assigned an id value incremented with 1, - # and finally made string because the apertures dict keys are strings - max_ap = str(max([int(k) for k in grb_final.apertures.keys()]) + 1) - grb_final.apertures[max_ap] = {} - grb_final.apertures[max_ap]['geometry'] = [] - - for k, v in grb.apertures[ap].items(): - grb_final.apertures[max_ap][k] = deepcopy(v) - - grb_final.solid_geometry = MultiPolygon(grb_final.solid_geometry) - grb_final.follow_geometry = MultiPolygon(grb_final.follow_geometry) - - def __init__(self, name): - self.decimals = self.app.decimals - - self.circle_steps = int(self.app.defaults["gerber_circle_steps"]) - - Gerber.__init__(self, steps_per_circle=self.circle_steps) - FlatCAMObj.__init__(self, name) - - self.kind = "gerber" - - # The 'name' is already in self.options from FlatCAMObj - # Automatically updates the UI - self.options.update({ - "plot": True, - "multicolored": False, - "solid": False, - "tool_type": 'circular', - "vtipdia": 0.1, - "vtipangle": 30, - "vcutz": -0.05, - "isotooldia": 0.016, - "isopasses": 1, - "isooverlap": 15, - "milling_type": "cl", - "combine_passes": True, - "noncoppermargin": 0.0, - "noncopperrounded": False, - "bboxmargin": 0.0, - "bboxrounded": False, - "aperture_display": False, - "follow": False, - "iso_scope": 'all', - "iso_type": 'full' - }) - - # type of isolation: 0 = exteriors, 1 = interiors, 2 = complete isolation (both interiors and exteriors) - self.iso_type = 2 - - self.multigeo = False - - self.follow = False - - self.apertures_row = 0 - - # store the source file here - self.source_file = "" - - # list of rows with apertures plotted - self.marked_rows = [] - - # Mouse events - self.mr = None - self.mm = None - self.mp = None - - # dict to store the polygons selected for isolation; key is the shape added to be plotted and value is the poly - self.poly_dict = {} - - # store the status of grid snapping - self.grid_status_memory = None - - self.units_found = self.app.defaults['units'] - - self.fill_color = self.app.defaults['gerber_plot_fill'] - self.outline_color = self.app.defaults['gerber_plot_line'] - self.alpha_level = 'bf' - - # keep track if the UI is built so we don't have to build it every time - self.ui_build = False - - # build only once the aperture storage (takes time) - self.build_aperture_storage = False - - # Attributes to be included in serialization - # Always append to it because it carries contents - # from predecessors. - self.ser_attrs += ['options', 'kind', 'fill_color', 'outline_color', 'alpha_level'] - - def set_ui(self, ui): - """ - Maps options with GUI inputs. - Connects GUI events to methods. - - :param ui: GUI object. - :type ui: GerberObjectUI - :return: None - """ - FlatCAMObj.set_ui(self, ui) - FlatCAMApp.App.log.debug("FlatCAMGerber.set_ui()") - - self.units = self.app.defaults['units'].upper() - - self.replotApertures.connect(self.on_mark_cb_click_table) - - self.form_fields.update({ - "plot": self.ui.plot_cb, - "multicolored": self.ui.multicolored_cb, - "solid": self.ui.solid_cb, - "tool_type": self.ui.tool_type_radio, - "vtipdia": self.ui.tipdia_spinner, - "vtipangle": self.ui.tipangle_spinner, - "vcutz": self.ui.cutz_spinner, - "isotooldia": self.ui.iso_tool_dia_entry, - "isopasses": self.ui.iso_width_entry, - "isooverlap": self.ui.iso_overlap_entry, - "milling_type": self.ui.milling_type_radio, - "combine_passes": self.ui.combine_passes_cb, - "noncoppermargin": self.ui.noncopper_margin_entry, - "noncopperrounded": self.ui.noncopper_rounded_cb, - "bboxmargin": self.ui.bbmargin_entry, - "bboxrounded": self.ui.bbrounded_cb, - "aperture_display": self.ui.aperture_table_visibility_cb, - "follow": self.ui.follow_cb, - "iso_scope": self.ui.iso_scope_radio, - "iso_type": self.ui.iso_type_radio - }) - - # Fill form fields only on object create - self.to_form() - - assert isinstance(self.ui, GerberObjectUI) - self.ui.plot_cb.stateChanged.connect(self.on_plot_cb_click) - self.ui.solid_cb.stateChanged.connect(self.on_solid_cb_click) - self.ui.multicolored_cb.stateChanged.connect(self.on_multicolored_cb_click) - self.ui.generate_iso_button.clicked.connect(self.on_iso_button_click) - self.ui.generate_ncc_button.clicked.connect(self.app.ncclear_tool.run) - self.ui.generate_cutout_button.clicked.connect(self.app.cutout_tool.run) - self.ui.generate_bb_button.clicked.connect(self.on_generatebb_button_click) - self.ui.generate_noncopper_button.clicked.connect(self.on_generatenoncopper_button_click) - self.ui.aperture_table_visibility_cb.stateChanged.connect(self.on_aperture_table_visibility_change) - self.ui.follow_cb.stateChanged.connect(self.on_follow_cb_click) - - # set the model for the Area Exception comboboxes - self.ui.obj_combo.setModel(self.app.collection) - self.ui.obj_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex())) - self.ui.obj_combo.is_last = True - self.ui.obj_combo.obj_type = { - _("Gerber"): "Gerber", _("Geometry"): "Geometry" - }[self.ui.type_obj_combo.get_value()] - self.on_type_obj_index_changed() - - self.ui.type_obj_combo.currentIndexChanged.connect(self.on_type_obj_index_changed) - - self.ui.tool_type_radio.activated_custom.connect(self.on_tool_type_change) - # establish visibility for the GUI elements found in the slot function - self.ui.tool_type_radio.activated_custom.emit(self.options['tool_type']) - - # Show/Hide Advanced Options - if self.app.defaults["global_app_level"] == 'b': - self.ui.level.setText('%s' % _('Basic')) - self.options['tool_type'] = 'circular' - - self.ui.tool_type_label.hide() - self.ui.tool_type_radio.hide() - - # override the Preferences Value; in Basic mode the Tool Type is always Circular ('C1') - self.ui.tool_type_radio.set_value('circular') - - self.ui.tipdialabel.hide() - self.ui.tipdia_spinner.hide() - self.ui.tipanglelabel.hide() - self.ui.tipangle_spinner.hide() - self.ui.cutzlabel.hide() - self.ui.cutz_spinner.hide() - - self.ui.apertures_table_label.hide() - self.ui.aperture_table_visibility_cb.hide() - self.ui.milling_type_label.hide() - self.ui.milling_type_radio.hide() - self.ui.iso_type_label.hide() - self.ui.iso_type_radio.hide() - - self.ui.follow_cb.hide() - self.ui.except_cb.setChecked(False) - self.ui.except_cb.hide() - else: - self.ui.level.setText('%s' % _('Advanced')) - self.ui.tipdia_spinner.valueChanged.connect(self.on_calculate_tooldia) - self.ui.tipangle_spinner.valueChanged.connect(self.on_calculate_tooldia) - self.ui.cutz_spinner.valueChanged.connect(self.on_calculate_tooldia) - - if self.app.defaults["gerber_buffering"] == 'no': - self.ui.create_buffer_button.show() - try: - self.ui.create_buffer_button.clicked.disconnect(self.on_generate_buffer) - except TypeError: - pass - self.ui.create_buffer_button.clicked.connect(self.on_generate_buffer) - else: - self.ui.create_buffer_button.hide() - - # set initial state of the aperture table and associated widgets - self.on_aperture_table_visibility_change() - - self.build_ui() - self.units_found = self.app.defaults['units'] - - def on_calculate_tooldia(self): - try: - tdia = float(self.ui.tipdia_spinner.get_value()) - except Exception: - return - try: - dang = float(self.ui.tipangle_spinner.get_value()) - except Exception: - return - try: - cutz = float(self.ui.cutz_spinner.get_value()) - except Exception: - return - - cutz *= -1 - if cutz < 0: - cutz *= -1 - - half_tip_angle = dang / 2 - - tool_diameter = tdia + (2 * cutz * math.tan(math.radians(half_tip_angle))) - self.ui.iso_tool_dia_entry.set_value(tool_diameter) - - def on_type_obj_index_changed(self): - val = self.ui.type_obj_combo.get_value() - obj_type = {"Gerber": 0, "Geometry": 2}[val] - self.ui.obj_combo.setRootModelIndex(self.app.collection.index(obj_type, 0, QtCore.QModelIndex())) - self.ui.obj_combo.setCurrentIndex(0) - self.ui.obj_combo.obj_type = {_("Gerber"): "Gerber", _("Geometry"): "Geometry"}[val] - - def on_tool_type_change(self, state): - if state == 'circular': - self.ui.tipdialabel.hide() - self.ui.tipdia_spinner.hide() - self.ui.tipanglelabel.hide() - self.ui.tipangle_spinner.hide() - self.ui.cutzlabel.hide() - self.ui.cutz_spinner.hide() - self.ui.iso_tool_dia_entry.setDisabled(False) - # update the value in the self.iso_tool_dia_entry once this is selected - self.ui.iso_tool_dia_entry.set_value(self.options['isotooldia']) - else: - self.ui.tipdialabel.show() - self.ui.tipdia_spinner.show() - self.ui.tipanglelabel.show() - self.ui.tipangle_spinner.show() - self.ui.cutzlabel.show() - self.ui.cutz_spinner.show() - self.ui.iso_tool_dia_entry.setDisabled(True) - # update the value in the self.iso_tool_dia_entry once this is selected - self.on_calculate_tooldia() - - def build_ui(self): - FlatCAMObj.build_ui(self) - - if self.ui.aperture_table_visibility_cb.get_value() and self.ui_build is False: - self.ui_build = True - - try: - # if connected, disconnect the signal from the slot on item_changed as it creates issues - self.ui.apertures_table.itemChanged.disconnect() - except (TypeError, AttributeError): - pass - - self.apertures_row = 0 - aper_no = self.apertures_row + 1 - sort = [] - for k, v in list(self.apertures.items()): - sort.append(int(k)) - sorted_apertures = sorted(sort) - - n = len(sorted_apertures) - self.ui.apertures_table.setRowCount(n) - - for ap_code in sorted_apertures: - ap_code = str(ap_code) - - ap_id_item = QtWidgets.QTableWidgetItem('%d' % int(self.apertures_row + 1)) - ap_id_item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) - self.ui.apertures_table.setItem(self.apertures_row, 0, ap_id_item) # Tool name/id - - ap_code_item = QtWidgets.QTableWidgetItem(ap_code) - ap_code_item.setFlags(QtCore.Qt.ItemIsEnabled) - - ap_type_item = QtWidgets.QTableWidgetItem(str(self.apertures[ap_code]['type'])) - ap_type_item.setFlags(QtCore.Qt.ItemIsEnabled) - - if str(self.apertures[ap_code]['type']) == 'R' or str(self.apertures[ap_code]['type']) == 'O': - ap_dim_item = QtWidgets.QTableWidgetItem( - '%.*f, %.*f' % (self.decimals, self.apertures[ap_code]['width'], - self.decimals, self.apertures[ap_code]['height'] - ) - ) - ap_dim_item.setFlags(QtCore.Qt.ItemIsEnabled) - elif str(self.apertures[ap_code]['type']) == 'P': - ap_dim_item = QtWidgets.QTableWidgetItem( - '%.*f, %.*f' % (self.decimals, self.apertures[ap_code]['diam'], - self.decimals, self.apertures[ap_code]['nVertices']) - ) - ap_dim_item.setFlags(QtCore.Qt.ItemIsEnabled) - else: - ap_dim_item = QtWidgets.QTableWidgetItem('') - ap_dim_item.setFlags(QtCore.Qt.ItemIsEnabled) - - try: - if self.apertures[ap_code]['size'] is not None: - ap_size_item = QtWidgets.QTableWidgetItem( - '%.*f' % (self.decimals, float(self.apertures[ap_code]['size']))) - else: - ap_size_item = QtWidgets.QTableWidgetItem('') - except KeyError: - ap_size_item = QtWidgets.QTableWidgetItem('') - ap_size_item.setFlags(QtCore.Qt.ItemIsEnabled) - - mark_item = FCCheckBox() - mark_item.setLayoutDirection(QtCore.Qt.RightToLeft) - # if self.ui.aperture_table_visibility_cb.isChecked(): - # mark_item.setChecked(True) - - self.ui.apertures_table.setItem(self.apertures_row, 1, ap_code_item) # Aperture Code - self.ui.apertures_table.setItem(self.apertures_row, 2, ap_type_item) # Aperture Type - self.ui.apertures_table.setItem(self.apertures_row, 3, ap_size_item) # Aperture Dimensions - self.ui.apertures_table.setItem(self.apertures_row, 4, ap_dim_item) # Aperture Dimensions - - empty_plot_item = QtWidgets.QTableWidgetItem('') - empty_plot_item.setFlags(~QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) - self.ui.apertures_table.setItem(self.apertures_row, 5, empty_plot_item) - self.ui.apertures_table.setCellWidget(self.apertures_row, 5, mark_item) - - self.apertures_row += 1 - - self.ui.apertures_table.selectColumn(0) - self.ui.apertures_table.resizeColumnsToContents() - self.ui.apertures_table.resizeRowsToContents() - - vertical_header = self.ui.apertures_table.verticalHeader() - # vertical_header.setSectionResizeMode(QtWidgets.QHeaderView.ResizeToContents) - vertical_header.hide() - self.ui.apertures_table.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) - - horizontal_header = self.ui.apertures_table.horizontalHeader() - horizontal_header.setMinimumSectionSize(10) - horizontal_header.setDefaultSectionSize(70) - horizontal_header.setSectionResizeMode(0, QtWidgets.QHeaderView.Fixed) - horizontal_header.resizeSection(0, 27) - horizontal_header.setSectionResizeMode(1, QtWidgets.QHeaderView.ResizeToContents) - horizontal_header.setSectionResizeMode(2, QtWidgets.QHeaderView.ResizeToContents) - horizontal_header.setSectionResizeMode(3, QtWidgets.QHeaderView.ResizeToContents) - horizontal_header.setSectionResizeMode(4, QtWidgets.QHeaderView.Stretch) - horizontal_header.setSectionResizeMode(5, QtWidgets.QHeaderView.Fixed) - horizontal_header.resizeSection(5, 17) - self.ui.apertures_table.setColumnWidth(5, 17) - - self.ui.apertures_table.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) - self.ui.apertures_table.setSortingEnabled(False) - self.ui.apertures_table.setMinimumHeight(self.ui.apertures_table.getHeight()) - self.ui.apertures_table.setMaximumHeight(self.ui.apertures_table.getHeight()) - - # update the 'mark' checkboxes state according with what is stored in the self.marked_rows list - if self.marked_rows: - for row in range(self.ui.apertures_table.rowCount()): - try: - self.ui.apertures_table.cellWidget(row, 5).set_value(self.marked_rows[row]) - except IndexError: - pass - - self.ui_connect() - - def ui_connect(self): - for row in range(self.ui.apertures_table.rowCount()): - try: - self.ui.apertures_table.cellWidget(row, 5).clicked.disconnect(self.on_mark_cb_click_table) - except (TypeError, AttributeError): - pass - self.ui.apertures_table.cellWidget(row, 5).clicked.connect(self.on_mark_cb_click_table) - - try: - self.ui.mark_all_cb.clicked.disconnect(self.on_mark_all_click) - except (TypeError, AttributeError): - pass - self.ui.mark_all_cb.clicked.connect(self.on_mark_all_click) - - def ui_disconnect(self): - for row in range(self.ui.apertures_table.rowCount()): - try: - self.ui.apertures_table.cellWidget(row, 5).clicked.disconnect() - except (TypeError, AttributeError): - pass - - try: - self.ui.mark_all_cb.clicked.disconnect(self.on_mark_all_click) - except (TypeError, AttributeError): - pass - - def on_generate_buffer(self): - self.app.inform.emit('[WARNING_NOTCL] %s...' % _("Buffering solid geometry")) - - def buffer_task(): - with self.app.proc_container.new('%s...' % _("Buffering")): - if isinstance(self.solid_geometry, list): - self.solid_geometry = MultiPolygon(self.solid_geometry) - - self.solid_geometry = self.solid_geometry.buffer(0.0000001) - self.solid_geometry = self.solid_geometry.buffer(-0.0000001) - self.app.inform.emit('[success] %s.' % _("Done")) - self.plot_single_object.emit() - - self.app.worker_task.emit({'fcn': buffer_task, 'params': []}) - - def on_generatenoncopper_button_click(self, *args): - self.app.report_usage("gerber_on_generatenoncopper_button") - - self.read_form() - name = self.options["name"] + "_noncopper" - - def geo_init(geo_obj, app_obj): - assert isinstance(geo_obj, FlatCAMGeometry) - if isinstance(self.solid_geometry, list): - try: - self.solid_geometry = MultiPolygon(self.solid_geometry) - except Exception: - self.solid_geometry = cascaded_union(self.solid_geometry) - - bounding_box = self.solid_geometry.envelope.buffer(float(self.options["noncoppermargin"])) - if not self.options["noncopperrounded"]: - bounding_box = bounding_box.envelope - non_copper = bounding_box.difference(self.solid_geometry) - - if non_copper is None or non_copper.is_empty: - self.app.inform.emit("[ERROR_NOTCL] %s" % _("Operation could not be done.")) - return "fail" - geo_obj.solid_geometry = non_copper - - self.app.new_object("geometry", name, geo_init) - - def on_generatebb_button_click(self, *args): - self.app.report_usage("gerber_on_generatebb_button") - self.read_form() - name = self.options["name"] + "_bbox" - - def geo_init(geo_obj, app_obj): - assert isinstance(geo_obj, FlatCAMGeometry) - - if isinstance(self.solid_geometry, list): - try: - self.solid_geometry = MultiPolygon(self.solid_geometry) - except Exception: - self.solid_geometry = cascaded_union(self.solid_geometry) - - # Bounding box with rounded corners - bounding_box = self.solid_geometry.envelope.buffer(float(self.options["bboxmargin"])) - if not self.options["bboxrounded"]: # Remove rounded corners - bounding_box = bounding_box.envelope - - if bounding_box is None or bounding_box.is_empty: - self.app.inform.emit("[ERROR_NOTCL] %s" % _("Operation could not be done.")) - return "fail" - geo_obj.solid_geometry = bounding_box - - self.app.new_object("geometry", name, geo_init) - - def on_iso_button_click(self, *args): - - obj = self.app.collection.get_active() - - self.iso_type = 2 - if self.ui.iso_type_radio.get_value() == 'ext': - self.iso_type = 0 - if self.ui.iso_type_radio.get_value() == 'int': - self.iso_type = 1 - - def worker_task(iso_obj, app_obj): - with self.app.proc_container.new(_("Isolating...")): - if self.ui.follow_cb.get_value() is True: - iso_obj.follow_geo() - # in the end toggle the visibility of the origin object so we can see the generated Geometry - iso_obj.ui.plot_cb.toggle() - else: - app_obj.report_usage("gerber_on_iso_button") - self.read_form() - - iso_scope = 'all' if self.ui.iso_scope_radio.get_value() == 'all' else 'single' - self.isolate_handler(iso_type=self.iso_type, iso_scope=iso_scope) - - self.app.worker_task.emit({'fcn': worker_task, 'params': [obj, self.app]}) - - def follow_geo(self, outname=None): - """ - Creates a geometry object "following" the gerber paths. - - :return: None - """ - - # default_name = self.options["name"] + "_follow" - # follow_name = outname or default_name - - if outname is None: - follow_name = self.options["name"] + "_follow" - else: - follow_name = outname - - def follow_init(follow_obj, app): - # Propagate options - follow_obj.options["cnctooldia"] = str(self.options["isotooldia"]) - follow_obj.solid_geometry = self.follow_geometry - - # TODO: Do something if this is None. Offer changing name? - try: - self.app.new_object("geometry", follow_name, follow_init) - except Exception as e: - return "Operation failed: %s" % str(e) - - def isolate_handler(self, iso_type, iso_scope): - - if iso_scope == 'all': - self.isolate(iso_type=iso_type) - else: - # disengage the grid snapping since it may be hard to click on polygons with grid snapping on - if self.app.ui.grid_snap_btn.isChecked(): - self.grid_status_memory = True - self.app.ui.grid_snap_btn.trigger() - else: - self.grid_status_memory = False - - self.mr = self.app.plotcanvas.graph_event_connect('mouse_release', self.on_mouse_click_release) - - if self.app.is_legacy is False: - self.app.plotcanvas.graph_event_disconnect('mouse_release', self.app.on_mouse_click_release_over_plot) - else: - self.app.plotcanvas.graph_event_disconnect(self.app.mr) - - self.app.inform.emit('[WARNING_NOTCL] %s' % _("Click on a polygon to isolate it.")) - - def on_mouse_click_release(self, event): - if self.app.is_legacy is False: - event_pos = event.pos - right_button = 2 - self.app.event_is_dragging = self.app.event_is_dragging - else: - event_pos = (event.xdata, event.ydata) - right_button = 3 - self.app.event_is_dragging = self.app.ui.popMenu.mouse_is_panning - - try: - x = float(event_pos[0]) - y = float(event_pos[1]) - except TypeError: - return - - event_pos = (x, y) - curr_pos = self.app.plotcanvas.translate_coords(event_pos) - if self.app.grid_status(): - curr_pos = self.app.geo_editor.snap(curr_pos[0], curr_pos[1]) - else: - curr_pos = (curr_pos[0], curr_pos[1]) - - if event.button == 1: - clicked_poly = self.find_polygon(point=(curr_pos[0], curr_pos[1])) - - if self.app.selection_type is not None: - self.selection_area_handler(self.app.pos, curr_pos, self.app.selection_type) - self.app.selection_type = None - elif clicked_poly: - if clicked_poly not in self.poly_dict.values(): - shape_id = self.app.tool_shapes.add(tolerance=self.drawing_tolerance, layer=0, shape=clicked_poly, - color=self.app.defaults['global_sel_draw_color'] + 'AF', - face_color=self.app.defaults['global_sel_draw_color'] + 'AF', - visible=True) - self.poly_dict[shape_id] = clicked_poly - self.app.inform.emit( - '%s: %d. %s' % (_("Added polygon"), int(len(self.poly_dict)), - _("Click to add next polygon or right click to start isolation.")) - ) - else: - try: - for k, v in list(self.poly_dict.items()): - if v == clicked_poly: - self.app.tool_shapes.remove(k) - self.poly_dict.pop(k) - break - except TypeError: - return - self.app.inform.emit( - '%s. %s' % (_("Removed polygon"), - _("Click to add/remove next polygon or right click to start isolation.")) - ) - - self.app.tool_shapes.redraw() - else: - self.app.inform.emit(_("No polygon detected under click position.")) - elif event.button == right_button and self.app.event_is_dragging is False: - # restore the Grid snapping if it was active before - if self.grid_status_memory is True: - self.app.ui.grid_snap_btn.trigger() - - if self.app.is_legacy is False: - self.app.plotcanvas.graph_event_disconnect('mouse_release', self.on_mouse_click_release) - else: - self.app.plotcanvas.graph_event_disconnect(self.mr) - - self.app.mr = self.app.plotcanvas.graph_event_connect('mouse_release', - self.app.on_mouse_click_release_over_plot) - - self.app.tool_shapes.clear(update=True) - - if self.poly_dict: - poly_list = deepcopy(list(self.poly_dict.values())) - self.isolate(iso_type=self.iso_type, geometry=poly_list) - self.poly_dict.clear() - else: - self.app.inform.emit('[ERROR_NOTCL] %s' % _("List of single polygons is empty. Aborting.")) - - def selection_area_handler(self, start_pos, end_pos, sel_type): - """ - :param start_pos: mouse position when the selection LMB click was done - :param end_pos: mouse position when the left mouse button is released - :param sel_type: if True it's a left to right selection (enclosure), if False it's a 'touch' selection - :return: - """ - poly_selection = Polygon([start_pos, (end_pos[0], start_pos[1]), end_pos, (start_pos[0], end_pos[1])]) - - # delete previous selection shape - self.app.delete_selection_shape() - - added_poly_count = 0 - try: - for geo in self.solid_geometry: - if geo not in self.poly_dict.values(): - if sel_type is True: - if geo.within(poly_selection): - shape_id = self.app.tool_shapes.add(tolerance=self.drawing_tolerance, layer=0, - shape=geo, - color=self.app.defaults['global_sel_draw_color'] + 'AF', - face_color=self.app.defaults[ - 'global_sel_draw_color'] + 'AF', - visible=True) - self.poly_dict[shape_id] = geo - added_poly_count += 1 - else: - if poly_selection.intersects(geo): - shape_id = self.app.tool_shapes.add(tolerance=self.drawing_tolerance, layer=0, - shape=geo, - color=self.app.defaults['global_sel_draw_color'] + 'AF', - face_color=self.app.defaults[ - 'global_sel_draw_color'] + 'AF', - visible=True) - self.poly_dict[shape_id] = geo - added_poly_count += 1 - except TypeError: - if self.solid_geometry not in self.poly_dict.values(): - if sel_type is True: - if self.solid_geometry.within(poly_selection): - shape_id = self.app.tool_shapes.add(tolerance=self.drawing_tolerance, layer=0, - shape=self.solid_geometry, - color=self.app.defaults['global_sel_draw_color'] + 'AF', - face_color=self.app.defaults[ - 'global_sel_draw_color'] + 'AF', - visible=True) - self.poly_dict[shape_id] = self.solid_geometry - added_poly_count += 1 - else: - if poly_selection.intersects(self.solid_geometry): - shape_id = self.app.tool_shapes.add(tolerance=self.drawing_tolerance, layer=0, - shape=self.solid_geometry, - color=self.app.defaults['global_sel_draw_color'] + 'AF', - face_color=self.app.defaults[ - 'global_sel_draw_color'] + 'AF', - visible=True) - self.poly_dict[shape_id] = self.solid_geometry - added_poly_count += 1 - - if added_poly_count > 0: - self.app.tool_shapes.redraw() - self.app.inform.emit( - '%s: %d. %s' % (_("Added polygon"), - int(added_poly_count), - _("Click to add next polygon or right click to start isolation.")) - ) - else: - self.app.inform.emit(_("No polygon in selection.")) - - def isolate(self, iso_type=None, geometry=None, dia=None, passes=None, overlap=None, outname=None, combine=None, - milling_type=None, follow=None, plot=True): - """ - Creates an isolation routing geometry object in the project. - - :param iso_type: type of isolation to be done: 0 = exteriors, 1 = interiors and 2 = both - :param geometry: specific geometry to isolate - :param dia: Tool diameter - :param passes: Number of tool widths to cut - :param overlap: Overlap between passes in fraction of tool diameter - :param outname: Base name of the output object - :param combine: Boolean: if to combine passes in one resulting object in case of multiple passes - :param milling_type: type of milling: conventional or climbing - :param follow: Boolean: if to generate a 'follow' geometry - :param plot: Boolean: if to plot the resulting geometry object - :return: None - """ - - if geometry is None: - work_geo = self.follow_geometry if follow is True else self.solid_geometry - else: - work_geo = geometry - - if dia is None: - dia = float(self.options["isotooldia"]) - - if passes is None: - passes = int(self.options["isopasses"]) - - if overlap is None: - overlap = float(self.options["isooverlap"]) - - overlap /= 100.0 - - combine = self.options["combine_passes"] if combine is None else bool(combine) - - if milling_type is None: - milling_type = self.options["milling_type"] - - if iso_type is None: - iso_t = 2 - else: - iso_t = iso_type - - base_name = self.options["name"] - - if combine: - if outname is None: - if self.iso_type == 0: - iso_name = base_name + "_ext_iso" - elif self.iso_type == 1: - iso_name = base_name + "_int_iso" - else: - iso_name = base_name + "_iso" - else: - iso_name = outname - - def iso_init(geo_obj, app_obj): - # Propagate options - geo_obj.options["cnctooldia"] = str(self.options["isotooldia"]) - geo_obj.tool_type = self.ui.tool_type_radio.get_value().upper() - - geo_obj.solid_geometry = [] - - # transfer the Cut Z and Vtip and VAngle values in case that we use the V-Shape tool in Gerber UI - if self.ui.tool_type_radio.get_value() == 'v': - new_cutz = self.ui.cutz_spinner.get_value() - new_vtipdia = self.ui.tipdia_spinner.get_value() - new_vtipangle = self.ui.tipangle_spinner.get_value() - tool_type = 'V' - else: - new_cutz = self.app.defaults['geometry_cutz'] - new_vtipdia = self.app.defaults['geometry_vtipdia'] - new_vtipangle = self.app.defaults['geometry_vtipangle'] - tool_type = 'C1' - - # store here the default data for Geometry Data - default_data = {} - default_data.update({ - "name": iso_name, - "plot": self.app.defaults['geometry_plot'], - "cutz": new_cutz, - "vtipdia": new_vtipdia, - "vtipangle": new_vtipangle, - "travelz": self.app.defaults['geometry_travelz'], - "feedrate": self.app.defaults['geometry_feedrate'], - "feedrate_z": self.app.defaults['geometry_feedrate_z'], - "feedrate_rapid": self.app.defaults['geometry_feedrate_rapid'], - "dwell": self.app.defaults['geometry_dwell'], - "dwelltime": self.app.defaults['geometry_dwelltime'], - "multidepth": self.app.defaults['geometry_multidepth'], - "ppname_g": self.app.defaults['geometry_ppname_g'], - "depthperpass": self.app.defaults['geometry_depthperpass'], - "extracut": self.app.defaults['geometry_extracut'], - "extracut_length": self.app.defaults['geometry_extracut_length'], - "toolchange": self.app.defaults['geometry_toolchange'], - "toolchangez": self.app.defaults['geometry_toolchangez'], - "endz": self.app.defaults['geometry_endz'], - "spindlespeed": self.app.defaults['geometry_spindlespeed'], - "toolchangexy": self.app.defaults['geometry_toolchangexy'], - "startz": self.app.defaults['geometry_startz'] - }) - - geo_obj.tools = {} - geo_obj.tools['1'] = {} - geo_obj.tools.update({ - '1': { - 'tooldia': float(self.options["isotooldia"]), - 'offset': 'Path', - 'offset_value': 0.0, - 'type': _('Rough'), - 'tool_type': tool_type, - 'data': default_data, - 'solid_geometry': geo_obj.solid_geometry - } - }) - - for nr_pass in range(passes): - iso_offset = dia * ((2 * nr_pass + 1) / 2.0) - (nr_pass * overlap * dia) - - # if milling type is climb then the move is counter-clockwise around features - mill_dir = 1 if milling_type == 'cl' else 0 - geom = self.generate_envelope(iso_offset, mill_dir, geometry=work_geo, env_iso_type=iso_t, - follow=follow, nr_passes=nr_pass) - - if geom == 'fail': - app_obj.inform.emit('[ERROR_NOTCL] %s' % _("Isolation geometry could not be generated.")) - return 'fail' - geo_obj.solid_geometry.append(geom) - - # update the geometry in the tools - geo_obj.tools['1']['solid_geometry'] = geo_obj.solid_geometry - - # detect if solid_geometry is empty and this require list flattening which is "heavy" - # or just looking in the lists (they are one level depth) and if any is not empty - # proceed with object creation, if there are empty and the number of them is the length - # of the list then we have an empty solid_geometry which should raise a Custom Exception - empty_cnt = 0 - if not isinstance(geo_obj.solid_geometry, list) and \ - not isinstance(geo_obj.solid_geometry, MultiPolygon): - geo_obj.solid_geometry = [geo_obj.solid_geometry] - - for g in geo_obj.solid_geometry: - if g: - break - else: - empty_cnt += 1 - - if empty_cnt == len(geo_obj.solid_geometry): - raise ValidationError("Empty Geometry", None) - else: - app_obj.inform.emit('[success] %s" %s' % (_("Isolation geometry created"), geo_obj.options["name"])) - - # even if combine is checked, one pass is still single-geo - geo_obj.multigeo = True if passes > 1 else False - - # ############################################################ - # ########## AREA SUBTRACTION ################################ - # ############################################################ - if self.ui.except_cb.get_value(): - self.app.proc_container.update_view_text(' %s' % _("Subtracting Geo")) - geo_obj.solid_geometry = self.area_subtraction(geo_obj.solid_geometry) - - # TODO: Do something if this is None. Offer changing name? - self.app.new_object("geometry", iso_name, iso_init, plot=plot) - else: - for i in range(passes): - - offset = dia * ((2 * i + 1) / 2.0) - (i * overlap * dia) - if passes > 1: - if outname is None: - if self.iso_type == 0: - iso_name = base_name + "_ext_iso" + str(i + 1) - elif self.iso_type == 1: - iso_name = base_name + "_int_iso" + str(i + 1) - else: - iso_name = base_name + "_iso" + str(i + 1) - else: - iso_name = outname - else: - if outname is None: - if self.iso_type == 0: - iso_name = base_name + "_ext_iso" - elif self.iso_type == 1: - iso_name = base_name + "_int_iso" - else: - iso_name = base_name + "_iso" - else: - iso_name = outname - - def iso_init(geo_obj, app_obj): - # Propagate options - geo_obj.options["cnctooldia"] = str(self.options["isotooldia"]) - if self.ui.tool_type_radio.get_value() == 'v': - geo_obj.tool_type = 'V' - else: - geo_obj.tool_type = 'C1' - - # if milling type is climb then the move is counter-clockwise around features - mill_dir = 1 if milling_type == 'cl' else 0 - geom = self.generate_envelope(offset, mill_dir, geometry=work_geo, env_iso_type=iso_t, - follow=follow, - nr_passes=i) - - if geom == 'fail': - app_obj.inform.emit('[ERROR_NOTCL] %s' % _("Isolation geometry could not be generated.")) - return 'fail' - - geo_obj.solid_geometry = geom - - # transfer the Cut Z and Vtip and VAngle values in case that we use the V-Shape tool in Gerber UI - # even if the resulting geometry is not multigeo we add the tools dict which will hold the data - # required to be transfered to the Geometry object - if self.ui.tool_type_radio.get_value() == 'v': - new_cutz = self.ui.cutz_spinner.get_value() - new_vtipdia = self.ui.tipdia_spinner.get_value() - new_vtipangle = self.ui.tipangle_spinner.get_value() - tool_type = 'V' - else: - new_cutz = self.app.defaults['geometry_cutz'] - new_vtipdia = self.app.defaults['geometry_vtipdia'] - new_vtipangle = self.app.defaults['geometry_vtipangle'] - tool_type = 'C1' - - # store here the default data for Geometry Data - default_data = {} - default_data.update({ - "name": iso_name, - "plot": self.app.defaults['geometry_plot'], - "cutz": new_cutz, - "vtipdia": new_vtipdia, - "vtipangle": new_vtipangle, - "travelz": self.app.defaults['geometry_travelz'], - "feedrate": self.app.defaults['geometry_feedrate'], - "feedrate_z": self.app.defaults['geometry_feedrate_z'], - "feedrate_rapid": self.app.defaults['geometry_feedrate_rapid'], - "dwell": self.app.defaults['geometry_dwell'], - "dwelltime": self.app.defaults['geometry_dwelltime'], - "multidepth": self.app.defaults['geometry_multidepth'], - "ppname_g": self.app.defaults['geometry_ppname_g'], - "depthperpass": self.app.defaults['geometry_depthperpass'], - "extracut": self.app.defaults['geometry_extracut'], - "extracut_length": self.app.defaults['geometry_extracut_length'], - "toolchange": self.app.defaults['geometry_toolchange'], - "toolchangez": self.app.defaults['geometry_toolchangez'], - "endz": self.app.defaults['geometry_endz'], - "spindlespeed": self.app.defaults['geometry_spindlespeed'], - "toolchangexy": self.app.defaults['geometry_toolchangexy'], - "startz": self.app.defaults['geometry_startz'] - }) - - geo_obj.tools = {} - geo_obj.tools['1'] = {} - geo_obj.tools.update({ - '1': { - 'tooldia': float(self.options["isotooldia"]), - 'offset': 'Path', - 'offset_value': 0.0, - 'type': _('Rough'), - 'tool_type': tool_type, - 'data': default_data, - 'solid_geometry': geo_obj.solid_geometry - } - }) - - # detect if solid_geometry is empty and this require list flattening which is "heavy" - # or just looking in the lists (they are one level depth) and if any is not empty - # proceed with object creation, if there are empty and the number of them is the length - # of the list then we have an empty solid_geometry which should raise a Custom Exception - empty_cnt = 0 - if not isinstance(geo_obj.solid_geometry, list): - geo_obj.solid_geometry = [geo_obj.solid_geometry] - - for g in geo_obj.solid_geometry: - if g: - break - else: - empty_cnt += 1 - - if empty_cnt == len(geo_obj.solid_geometry): - raise ValidationError("Empty Geometry", None) - else: - app_obj.inform.emit('[success] %s: %s' % - (_("Isolation geometry created"), geo_obj.options["name"])) - geo_obj.multigeo = False - - # ############################################################ - # ########## AREA SUBTRACTION ################################ - # ############################################################ - if self.ui.except_cb.get_value(): - self.app.proc_container.update_view_text(' %s' % _("Subtracting Geo")) - geo_obj.solid_geometry = self.area_subtraction(geo_obj.solid_geometry) - - # TODO: Do something if this is None. Offer changing name? - self.app.new_object("geometry", iso_name, iso_init, plot=plot) - - def generate_envelope(self, offset, invert, geometry=None, env_iso_type=2, follow=None, nr_passes=0): - # isolation_geometry produces an envelope that is going on the left of the geometry - # (the copper features). To leave the least amount of burrs on the features - # the tool needs to travel on the right side of the features (this is called conventional milling) - # the first pass is the one cutting all of the features, so it needs to be reversed - # the other passes overlap preceding ones and cut the left over copper. It is better for them - # to cut on the right side of the left over copper i.e on the left side of the features. - - if follow: - geom = self.isolation_geometry(offset, geometry=geometry, follow=follow) - else: - try: - geom = self.isolation_geometry(offset, geometry=geometry, iso_type=env_iso_type, passes=nr_passes) - except Exception as e: - log.debug('FlatCAMGerber.isolate().generate_envelope() --> %s' % str(e)) - return 'fail' - - if invert: - try: - pl = [] - for p in geom: - if p is not None: - if isinstance(p, Polygon): - pl.append(Polygon(p.exterior.coords[::-1], p.interiors)) - elif isinstance(p, LinearRing): - pl.append(Polygon(p.coords[::-1])) - geom = MultiPolygon(pl) - except TypeError: - if isinstance(geom, Polygon) and geom is not None: - geom = Polygon(geom.exterior.coords[::-1], geom.interiors) - elif isinstance(geom, LinearRing) and geom is not None: - geom = Polygon(geom.coords[::-1]) - else: - log.debug("FlatCAMGerber.isolate().generate_envelope() Error --> Unexpected Geometry %s" % - type(geom)) - except Exception as e: - log.debug("FlatCAMGerber.isolate().generate_envelope() Error --> %s" % str(e)) - return 'fail' - return geom - - def area_subtraction(self, geo, subtractor_geo=None): - """ - Subtracts the subtractor_geo (if present else self.solid_geometry) from the geo - - :param geo: target geometry from which to subtract - :param subtractor_geo: geometry that acts as subtractor - :return: - """ - new_geometry = [] - target_geo = geo - - if subtractor_geo: - sub_union = cascaded_union(subtractor_geo) - else: - name = self.ui.obj_combo.currentText() - subtractor_obj = self.app.collection.get_by_name(name) - sub_union = cascaded_union(subtractor_obj.solid_geometry) - - try: - for geo_elem in target_geo: - if isinstance(geo_elem, Polygon): - for ring in self.poly2rings(geo_elem): - new_geo = ring.difference(sub_union) - if new_geo and not new_geo.is_empty: - new_geometry.append(new_geo) - elif isinstance(geo_elem, MultiPolygon): - for poly in geo_elem: - for ring in self.poly2rings(poly): - new_geo = ring.difference(sub_union) - if new_geo and not new_geo.is_empty: - new_geometry.append(new_geo) - elif isinstance(geo_elem, LineString): - new_geo = geo_elem.difference(sub_union) - if new_geo: - if not new_geo.is_empty: - new_geometry.append(new_geo) - elif isinstance(geo_elem, MultiLineString): - for line_elem in geo_elem: - new_geo = line_elem.difference(sub_union) - if new_geo and not new_geo.is_empty: - new_geometry.append(new_geo) - except TypeError: - if isinstance(target_geo, Polygon): - for ring in self.poly2rings(target_geo): - new_geo = ring.difference(sub_union) - if new_geo: - if not new_geo.is_empty: - new_geometry.append(new_geo) - elif isinstance(target_geo, LineString): - new_geo = target_geo.difference(sub_union) - if new_geo and not new_geo.is_empty: - new_geometry.append(new_geo) - elif isinstance(target_geo, MultiLineString): - for line_elem in target_geo: - new_geo = line_elem.difference(sub_union) - if new_geo and not new_geo.is_empty: - new_geometry.append(new_geo) - return new_geometry - - def on_plot_cb_click(self, *args): - if self.muted_ui: - return - self.read_form_item('plot') - self.plot() - - def on_solid_cb_click(self, *args): - if self.muted_ui: - return - self.read_form_item('solid') - self.plot() - - def on_multicolored_cb_click(self, *args): - if self.muted_ui: - return - self.read_form_item('multicolored') - self.plot() - - def on_follow_cb_click(self): - if self.muted_ui: - return - self.plot() - - def on_aperture_table_visibility_change(self): - if self.ui.aperture_table_visibility_cb.isChecked(): - # add the shapes storage for marking apertures - if self.build_aperture_storage is False: - self.build_aperture_storage = True - - if self.app.is_legacy is False: - for ap_code in self.apertures: - self.mark_shapes[ap_code] = self.app.plotcanvas.new_shape_collection(layers=1) - else: - for ap_code in self.apertures: - self.mark_shapes[ap_code] = ShapeCollectionLegacy(obj=self, app=self.app, - name=self.options['name'] + str(ap_code)) - - self.ui.apertures_table.setVisible(True) - for ap in self.mark_shapes: - self.mark_shapes[ap].enabled = True - - self.ui.mark_all_cb.setVisible(True) - self.ui.mark_all_cb.setChecked(False) - self.build_ui() - else: - self.ui.apertures_table.setVisible(False) - - self.ui.mark_all_cb.setVisible(False) - - # on hide disable all mark plots - try: - for row in range(self.ui.apertures_table.rowCount()): - self.ui.apertures_table.cellWidget(row, 5).set_value(False) - self.clear_plot_apertures() - - # for ap in list(self.mark_shapes.keys()): - # # self.mark_shapes[ap].enabled = False - # del self.mark_shapes[ap] - except Exception as e: - log.debug(" FlatCAMGerber.on_aperture_visibility_changed() --> %s" % str(e)) - - def convert_units(self, units): - """ - Converts the units of the object by scaling dimensions in all geometry - and options. - - :param units: Units to which to convert the object: "IN" or "MM". - :type units: str - :return: None - :rtype: None - """ - - # units conversion to get a conversion should be done only once even if we found multiple - # units declaration inside a Gerber file (it can happen to find also the obsolete declaration) - if self.conversion_done is True: - log.debug("Gerber units conversion cancelled. Already done.") - return - - log.debug("FlatCAMObj.FlatCAMGerber.convert_units()") - - factor = Gerber.convert_units(self, units) - - # self.options['isotooldia'] = float(self.options['isotooldia']) * factor - # self.options['bboxmargin'] = float(self.options['bboxmargin']) * factor - - def plot(self, kind=None, **kwargs): - """ - - :param kind: Not used, for compatibility with the plot method for other objects - :param kwargs: Color and face_color, visible - :return: - """ - FlatCAMApp.App.log.debug(str(inspect.stack()[1][3]) + " --> FlatCAMGerber.plot()") - - # Does all the required setup and returns False - # if the 'ptint' option is set to False. - if not FlatCAMObj.plot(self): - return - - if 'color' in kwargs: - color = kwargs['color'] - else: - color = self.outline_color - - if 'face_color' in kwargs: - face_color = kwargs['face_color'] - else: - face_color = self.fill_color - - if 'visible' not in kwargs: - visible = self.options['plot'] - else: - visible = kwargs['visible'] - - # if the Follow Geometry checkbox is checked then plot only the follow geometry - if self.ui.follow_cb.get_value(): - geometry = self.follow_geometry - else: - geometry = self.solid_geometry - - # Make sure geometry is iterable. - try: - __ = iter(geometry) - except TypeError: - geometry = [geometry] - - if self.app.is_legacy is False: - def random_color(): - r_color = np.random.rand(4) - r_color[3] = 1 - return r_color - else: - def random_color(): - while True: - r_color = np.random.rand(4) - r_color[3] = 1 - - new_color = '#' - for idx in range(len(r_color)): - new_color += '%x' % int(r_color[idx] * 255) - # do it until a valid color is generated - # a valid color has the # symbol, another 6 chars for the color and the last 2 chars for alpha - # for a total of 9 chars - if len(new_color) == 9: - break - return new_color - - try: - if self.options["solid"]: - for g in geometry: - if type(g) == Polygon or type(g) == LineString: - self.add_shape(shape=g, color=color, - face_color=random_color() if self.options['multicolored'] - else face_color, visible=visible) - elif type(g) == Point: - pass - else: - try: - for el in g: - self.add_shape(shape=el, color=color, - face_color=random_color() if self.options['multicolored'] - else face_color, visible=visible) - except TypeError: - self.add_shape(shape=g, color=color, - face_color=random_color() if self.options['multicolored'] - else face_color, visible=visible) - else: - for g in geometry: - if type(g) == Polygon or type(g) == LineString: - self.add_shape(shape=g, color=random_color() if self.options['multicolored'] else 'black', - visible=visible) - elif type(g) == Point: - pass - else: - for el in g: - self.add_shape(shape=el, color=random_color() if self.options['multicolored'] else 'black', - visible=visible) - self.shapes.redraw( - # update_colors=(self.fill_color, self.outline_color), - # indexes=self.app.plotcanvas.shape_collection.data.keys() - ) - except (ObjectDeleted, AttributeError): - self.shapes.clear(update=True) - except Exception as e: - log.debug("FlatCAMGerber.plot() --> %s" % str(e)) - - # experimental plot() when the solid_geometry is stored in the self.apertures - def plot_aperture(self, run_thread=True, **kwargs): - """ - - :param run_thread: if True run the aperture plot as a thread in a worker - :param kwargs: color and face_color - :return: - """ - - FlatCAMApp.App.log.debug(str(inspect.stack()[1][3]) + " --> FlatCAMGerber.plot_aperture()") - - # Does all the required setup and returns False - # if the 'ptint' option is set to False. - # if not FlatCAMObj.plot(self): - # return - - # for marking apertures, line color and fill color are the same - if 'color' in kwargs: - color = kwargs['color'] - else: - color = self.app.defaults['gerber_plot_fill'] - - if 'marked_aperture' not in kwargs: - return - else: - aperture_to_plot_mark = kwargs['marked_aperture'] - if aperture_to_plot_mark is None: - return - - if 'visible' not in kwargs: - visibility = True - else: - visibility = kwargs['visible'] - - with self.app.proc_container.new(_("Plotting Apertures")): - - def job_thread(app_obj): - try: - if aperture_to_plot_mark in self.apertures: - for elem in self.apertures[aperture_to_plot_mark]['geometry']: - if 'solid' in elem: - geo = elem['solid'] - if type(geo) == Polygon or type(geo) == LineString: - self.add_mark_shape(apid=aperture_to_plot_mark, shape=geo, color=color, - face_color=color, visible=visibility) - else: - for el in geo: - self.add_mark_shape(apid=aperture_to_plot_mark, shape=el, color=color, - face_color=color, visible=visibility) - - self.mark_shapes[aperture_to_plot_mark].redraw() - - except (ObjectDeleted, AttributeError): - self.clear_plot_apertures() - except Exception as e: - log.debug("FlatCAMGerber.plot_aperture() --> %s" % str(e)) - - if run_thread: - self.app.worker_task.emit({'fcn': job_thread, 'params': [self]}) - else: - job_thread(self) - - def clear_plot_apertures(self, aperture='all'): - """ - - :param aperture: string; aperture for which to clear the mark shapes - :return: - """ - - if self.mark_shapes: - if aperture == 'all': - for apid in list(self.apertures.keys()): - try: - if self.app.is_legacy is True: - self.mark_shapes[apid].clear(update=False) - else: - self.mark_shapes[apid].clear(update=True) - except Exception as e: - log.debug("FlatCAMGerber.clear_plot_apertures() 'all' --> %s" % str(e)) - else: - try: - if self.app.is_legacy is True: - self.mark_shapes[aperture].clear(update=False) - else: - self.mark_shapes[aperture].clear(update=True) - except Exception as e: - log.debug("FlatCAMGerber.clear_plot_apertures() 'aperture' --> %s" % str(e)) - - def clear_mark_all(self): - self.ui.mark_all_cb.set_value(False) - self.marked_rows[:] = [] - - def on_mark_cb_click_table(self): - """ - Will mark aperture geometries on canvas or delete the markings depending on the checkbox state - :return: - """ - - self.ui_disconnect() - cw = self.sender() - try: - cw_index = self.ui.apertures_table.indexAt(cw.pos()) - cw_row = cw_index.row() - except AttributeError: - cw_row = 0 - except TypeError: - return - - self.marked_rows[:] = [] - - try: - aperture = self.ui.apertures_table.item(cw_row, 1).text() - except AttributeError: - return - - if self.ui.apertures_table.cellWidget(cw_row, 5).isChecked(): - self.marked_rows.append(True) - # self.plot_aperture(color='#2d4606bf', marked_aperture=aperture, visible=True) - self.plot_aperture(color=self.app.defaults['global_sel_draw_color'] + 'AF', - marked_aperture=aperture, visible=True, run_thread=True) - # self.mark_shapes[aperture].redraw() - else: - self.marked_rows.append(False) - self.clear_plot_apertures(aperture=aperture) - - # make sure that the Mark All is disabled if one of the row mark's are disabled and - # if all the row mark's are enabled also enable the Mark All checkbox - cb_cnt = 0 - total_row = self.ui.apertures_table.rowCount() - for row in range(total_row): - if self.ui.apertures_table.cellWidget(row, 5).isChecked(): - cb_cnt += 1 - else: - cb_cnt -= 1 - if cb_cnt < total_row: - self.ui.mark_all_cb.setChecked(False) - else: - self.ui.mark_all_cb.setChecked(True) - self.ui_connect() - - def on_mark_all_click(self): - self.ui_disconnect() - mark_all = self.ui.mark_all_cb.isChecked() - for row in range(self.ui.apertures_table.rowCount()): - # update the mark_rows list - if mark_all: - self.marked_rows.append(True) - else: - self.marked_rows[:] = [] - - mark_cb = self.ui.apertures_table.cellWidget(row, 5) - mark_cb.setChecked(mark_all) - - if mark_all: - for aperture in self.apertures: - # self.plot_aperture(color='#2d4606bf', marked_aperture=aperture, visible=True) - self.plot_aperture(color=self.app.defaults['global_sel_draw_color'] + 'AF', - marked_aperture=aperture, visible=True) - # HACK: enable/disable the grid for a better look - self.app.ui.grid_snap_btn.trigger() - self.app.ui.grid_snap_btn.trigger() - else: - self.clear_plot_apertures() - self.marked_rows[:] = [] - - self.ui_connect() - - def export_gerber(self, whole, fract, g_zeros='L', factor=1): - """ - Creates a Gerber file content to be exported to a file. - - :param whole: how many digits in the whole part of coordinates - :param fract: how many decimals in coordinates - :param g_zeros: type of the zero suppression used: LZ or TZ; string - :param factor: factor to be applied onto the Gerber coordinates - :return: Gerber_code - """ - log.debug("FlatCAMGerber.export_gerber() --> Generating the Gerber code from the selected Gerber file") - - def tz_format(x, y, fac): - x_c = x * fac - y_c = y * fac - - x_form = "{:.{dec}f}".format(x_c, dec=fract) - y_form = "{:.{dec}f}".format(y_c, dec=fract) - - # extract whole part and decimal part - x_form = x_form.partition('.') - y_form = y_form.partition('.') - - # left padd the 'whole' part with zeros - x_whole = x_form[0].rjust(whole, '0') - y_whole = y_form[0].rjust(whole, '0') - - # restore the coordinate padded in the left with 0 and added the decimal part - # without the decinal dot - x_form = x_whole + x_form[2] - y_form = y_whole + y_form[2] - return x_form, y_form - - def lz_format(x, y, fac): - x_c = x * fac - y_c = y * fac - - x_form = "{:.{dec}f}".format(x_c, dec=fract).replace('.', '') - y_form = "{:.{dec}f}".format(y_c, dec=fract).replace('.', '') - - # pad with rear zeros - x_form.ljust(length, '0') - y_form.ljust(length, '0') - - return x_form, y_form - - # Gerber code is stored here - gerber_code = '' - - # apertures processing - try: - length = whole + fract - if '0' in self.apertures: - if 'geometry' in self.apertures['0']: - for geo_elem in self.apertures['0']['geometry']: - if 'solid' in geo_elem: - geo = geo_elem['solid'] - if not geo.is_empty: - gerber_code += 'G36*\n' - geo_coords = list(geo.exterior.coords) - # first command is a move with pen-up D02 at the beginning of the geo - if g_zeros == 'T': - x_formatted, y_formatted = tz_format(geo_coords[0][0], geo_coords[0][1], factor) - gerber_code += "X{xform}Y{yform}D02*\n".format(xform=x_formatted, - yform=y_formatted) - else: - x_formatted, y_formatted = lz_format(geo_coords[0][0], geo_coords[0][1], factor) - gerber_code += "X{xform}Y{yform}D02*\n".format(xform=x_formatted, - yform=y_formatted) - for coord in geo_coords[1:]: - if g_zeros == 'T': - x_formatted, y_formatted = tz_format(coord[0], coord[1], factor) - gerber_code += "X{xform}Y{yform}D01*\n".format(xform=x_formatted, - yform=y_formatted) - else: - x_formatted, y_formatted = lz_format(coord[0], coord[1], factor) - gerber_code += "X{xform}Y{yform}D01*\n".format(xform=x_formatted, - yform=y_formatted) - gerber_code += 'D02*\n' - gerber_code += 'G37*\n' - - clear_list = list(geo.interiors) - if clear_list: - gerber_code += '%LPC*%\n' - for clear_geo in clear_list: - gerber_code += 'G36*\n' - geo_coords = list(clear_geo.coords) - - # first command is a move with pen-up D02 at the beginning of the geo - if g_zeros == 'T': - x_formatted, y_formatted = tz_format( - geo_coords[0][0], geo_coords[0][1], factor) - gerber_code += "X{xform}Y{yform}D02*\n".format(xform=x_formatted, - yform=y_formatted) - else: - x_formatted, y_formatted = lz_format( - geo_coords[0][0], geo_coords[0][1], factor) - gerber_code += "X{xform}Y{yform}D02*\n".format(xform=x_formatted, - yform=y_formatted) - - prev_coord = geo_coords[0] - for coord in geo_coords[1:]: - if coord != prev_coord: - if g_zeros == 'T': - x_formatted, y_formatted = tz_format(coord[0], coord[1], factor) - gerber_code += "X{xform}Y{yform}D01*\n".format(xform=x_formatted, - yform=y_formatted) - else: - x_formatted, y_formatted = lz_format(coord[0], coord[1], factor) - gerber_code += "X{xform}Y{yform}D01*\n".format(xform=x_formatted, - yform=y_formatted) - prev_coord = coord - - gerber_code += 'D02*\n' - gerber_code += 'G37*\n' - gerber_code += '%LPD*%\n' - if 'clear' in geo_elem: - geo = geo_elem['clear'] - if not geo.is_empty: - gerber_code += '%LPC*%\n' - gerber_code += 'G36*\n' - geo_coords = list(geo.exterior.coords) - # first command is a move with pen-up D02 at the beginning of the geo - if g_zeros == 'T': - x_formatted, y_formatted = tz_format(geo_coords[0][0], geo_coords[0][1], factor) - gerber_code += "X{xform}Y{yform}D02*\n".format(xform=x_formatted, - yform=y_formatted) - else: - x_formatted, y_formatted = lz_format(geo_coords[0][0], geo_coords[0][1], factor) - gerber_code += "X{xform}Y{yform}D02*\n".format(xform=x_formatted, - yform=y_formatted) - - prev_coord = geo_coords[0] - for coord in geo_coords[1:]: - if coord != prev_coord: - if g_zeros == 'T': - x_formatted, y_formatted = tz_format(coord[0], coord[1], factor) - gerber_code += "X{xform}Y{yform}D01*\n".format(xform=x_formatted, - yform=y_formatted) - else: - x_formatted, y_formatted = lz_format(coord[0], coord[1], factor) - gerber_code += "X{xform}Y{yform}D01*\n".format(xform=x_formatted, - yform=y_formatted) - prev_coord = coord - - gerber_code += 'D02*\n' - gerber_code += 'G37*\n' - gerber_code += '%LPD*%\n' - except Exception as e: - log.debug("FlatCAMObj.FlatCAMGerber.export_gerber() '0' aperture --> %s" % str(e)) - - for apid in self.apertures: - if apid == '0': - continue - else: - gerber_code += 'D%s*\n' % str(apid) - if 'geometry' in self.apertures[apid]: - for geo_elem in self.apertures[apid]['geometry']: - try: - if 'follow' in geo_elem: - geo = geo_elem['follow'] - if not geo.is_empty: - if isinstance(geo, Point): - if g_zeros == 'T': - x_formatted, y_formatted = tz_format(geo.x, geo.y, factor) - gerber_code += "X{xform}Y{yform}D03*\n".format(xform=x_formatted, - yform=y_formatted) - else: - x_formatted, y_formatted = lz_format(geo.x, geo.y, factor) - gerber_code += "X{xform}Y{yform}D03*\n".format(xform=x_formatted, - yform=y_formatted) - else: - geo_coords = list(geo.coords) - # first command is a move with pen-up D02 at the beginning of the geo - if g_zeros == 'T': - x_formatted, y_formatted = tz_format( - geo_coords[0][0], geo_coords[0][1], factor) - gerber_code += "X{xform}Y{yform}D02*\n".format(xform=x_formatted, - yform=y_formatted) - else: - x_formatted, y_formatted = lz_format( - geo_coords[0][0], geo_coords[0][1], factor) - gerber_code += "X{xform}Y{yform}D02*\n".format(xform=x_formatted, - yform=y_formatted) - - prev_coord = geo_coords[0] - for coord in geo_coords[1:]: - if coord != prev_coord: - if g_zeros == 'T': - x_formatted, y_formatted = tz_format(coord[0], coord[1], factor) - gerber_code += "X{xform}Y{yform}D01*\n".format(xform=x_formatted, - yform=y_formatted) - else: - x_formatted, y_formatted = lz_format(coord[0], coord[1], factor) - gerber_code += "X{xform}Y{yform}D01*\n".format(xform=x_formatted, - yform=y_formatted) - prev_coord = coord - - # gerber_code += "D02*\n" - except Exception as e: - log.debug("FlatCAMObj.FlatCAMGerber.export_gerber() 'follow' --> %s" % str(e)) - - try: - if 'clear' in geo_elem: - gerber_code += '%LPC*%\n' - - geo = geo_elem['clear'] - if not geo.is_empty: - if isinstance(geo, Point): - if g_zeros == 'T': - x_formatted, y_formatted = tz_format(geo.x, geo.y, factor) - gerber_code += "X{xform}Y{yform}D03*\n".format(xform=x_formatted, - yform=y_formatted) - else: - x_formatted, y_formatted = lz_format(geo.x, geo.y, factor) - gerber_code += "X{xform}Y{yform}D03*\n".format(xform=x_formatted, - yform=y_formatted) - elif isinstance(geo, Polygon): - geo_coords = list(geo.exterior.coords) - # first command is a move with pen-up D02 at the beginning of the geo - if g_zeros == 'T': - x_formatted, y_formatted = tz_format( - geo_coords[0][0], geo_coords[0][1], factor) - gerber_code += "X{xform}Y{yform}D02*\n".format(xform=x_formatted, - yform=y_formatted) - else: - x_formatted, y_formatted = lz_format( - geo_coords[0][0], geo_coords[0][1], factor) - gerber_code += "X{xform}Y{yform}D02*\n".format(xform=x_formatted, - yform=y_formatted) - - prev_coord = geo_coords[0] - for coord in geo_coords[1:]: - if coord != prev_coord: - if g_zeros == 'T': - x_formatted, y_formatted = tz_format(coord[0], coord[1], factor) - gerber_code += "X{xform}Y{yform}D01*\n".format(xform=x_formatted, - yform=y_formatted) - else: - x_formatted, y_formatted = lz_format(coord[0], coord[1], factor) - gerber_code += "X{xform}Y{yform}D01*\n".format(xform=x_formatted, - yform=y_formatted) - - prev_coord = coord - - for geo_int in geo.interiors: - geo_coords = list(geo_int.coords) - # first command is a move with pen-up D02 at the beginning of the geo - if g_zeros == 'T': - x_formatted, y_formatted = tz_format( - geo_coords[0][0], geo_coords[0][1], factor) - gerber_code += "X{xform}Y{yform}D02*\n".format(xform=x_formatted, - yform=y_formatted) - else: - x_formatted, y_formatted = lz_format( - geo_coords[0][0], geo_coords[0][1], factor) - gerber_code += "X{xform}Y{yform}D02*\n".format(xform=x_formatted, - yform=y_formatted) - - prev_coord = geo_coords[0] - for coord in geo_coords[1:]: - if coord != prev_coord: - if g_zeros == 'T': - x_formatted, y_formatted = tz_format(coord[0], coord[1], factor) - gerber_code += "X{xform}Y{yform}D01*\n".format( - xform=x_formatted, - yform=y_formatted) - else: - x_formatted, y_formatted = lz_format(coord[0], coord[1], factor) - gerber_code += "X{xform}Y{yform}D01*\n".format( - xform=x_formatted, - yform=y_formatted) - - prev_coord = coord - else: - geo_coords = list(geo.coords) - # first command is a move with pen-up D02 at the beginning of the geo - if g_zeros == 'T': - x_formatted, y_formatted = tz_format( - geo_coords[0][0], geo_coords[0][1], factor) - gerber_code += "X{xform}Y{yform}D02*\n".format(xform=x_formatted, - yform=y_formatted) - else: - x_formatted, y_formatted = lz_format( - geo_coords[0][0], geo_coords[0][1], factor) - gerber_code += "X{xform}Y{yform}D02*\n".format(xform=x_formatted, - yform=y_formatted) - - prev_coord = geo_coords[0] - for coord in geo_coords[1:]: - if coord != prev_coord: - if g_zeros == 'T': - x_formatted, y_formatted = tz_format(coord[0], coord[1], factor) - gerber_code += "X{xform}Y{yform}D01*\n".format(xform=x_formatted, - yform=y_formatted) - else: - x_formatted, y_formatted = lz_format(coord[0], coord[1], factor) - gerber_code += "X{xform}Y{yform}D01*\n".format(xform=x_formatted, - yform=y_formatted) - - prev_coord = coord - # gerber_code += "D02*\n" - gerber_code += '%LPD*%\n' - except Exception as e: - log.debug("FlatCAMObj.FlatCAMGerber.export_gerber() 'clear' --> %s" % str(e)) - - if not self.apertures: - log.debug("FlatCAMObj.FlatCAMGerber.export_gerber() --> Gerber Object is empty: no apertures.") - return 'fail' - - return gerber_code - - def mirror(self, axis, point): - Gerber.mirror(self, axis=axis, point=point) - self.replotApertures.emit() - - def offset(self, vect): - Gerber.offset(self, vect=vect) - self.replotApertures.emit() - - def rotate(self, angle, point): - Gerber.rotate(self, angle=angle, point=point) - self.replotApertures.emit() - - def scale(self, xfactor, yfactor=None, point=None): - Gerber.scale(self, xfactor=xfactor, yfactor=yfactor, point=point) - self.replotApertures.emit() - - def skew(self, angle_x, angle_y, point): - Gerber.skew(self, angle_x=angle_x, angle_y=angle_y, point=point) - self.replotApertures.emit() - - def buffer(self, distance, join, factor=None): - Gerber.buffer(self, distance=distance, join=join, factor=factor) - self.replotApertures.emit() - - def serialize(self): - return { - "options": self.options, - "kind": self.kind - } - - -class FlatCAMExcellon(FlatCAMObj, Excellon): - """ - Represents Excellon/Drill code. - """ - - ui_type = ExcellonObjectUI - optionChanged = QtCore.pyqtSignal(str) - - def __init__(self, name): - self.decimals = self.app.decimals - - self.circle_steps = int(self.app.defaults["geometry_circle_steps"]) - - Excellon.__init__(self, geo_steps_per_circle=self.circle_steps) - FlatCAMObj.__init__(self, name) - - self.kind = "excellon" - - self.options.update({ - "plot": True, - "solid": False, - - "operation": "drill", - "milling_type": "drills", - - "milling_dia": 0.04, - - "cutz": -0.1, - "multidepth": False, - "depthperpass": 0.7, - "travelz": 0.1, - "feedrate": self.app.defaults["geometry_feedrate"], - "feedrate_z": 5.0, - "feedrate_rapid": 5.0, - "tooldia": 0.1, - "slot_tooldia": 0.1, - "toolchange": False, - "toolchangez": 1.0, - "toolchangexy": "0.0, 0.0", - "extracut": self.app.defaults["geometry_extracut"], - "extracut_length": self.app.defaults["geometry_extracut_length"], - "endz": 2.0, - "endxy": '', - - "startz": None, - "offset": 0.0, - "spindlespeed": 0, - "dwell": True, - "dwelltime": 1000, - "ppname_e": 'default', - "ppname_g": self.app.defaults["geometry_ppname_g"], - "z_pdepth": -0.02, - "feedrate_probe": 3.0, - "optimization_type": "B", - }) - - # TODO: Document this. - self.tool_cbs = {} - - # dict that holds the object names and the option name - # the key is the object name (defines in ObjectUI) for each UI element that is a parameter - # particular for a tool and the value is the actual name of the option that the UI element is changing - self.name2option = {} - - # default set of data to be added to each tool in self.tools as self.tools[tool]['data'] = self.default_data - self.default_data = {} - - # fill in self.default_data values from self.options - for opt_key, opt_val in self.app.options.items(): - if opt_key.find('excellon_') == 0: - self.default_data[opt_key] = deepcopy(opt_val) - for opt_key, opt_val in self.app.options.items(): - if opt_key.find('geometry_') == 0: - self.default_data[opt_key] = deepcopy(opt_val) - - # variable to store the total amount of drills per job - self.tot_drill_cnt = 0 - self.tool_row = 0 - - # variable to store the total amount of slots per job - self.tot_slot_cnt = 0 - self.tool_row_slots = 0 - - # variable to store the distance travelled - self.travel_distance = 0.0 - - # store the source file here - self.source_file = "" - - self.multigeo = False - self.units_found = self.app.defaults['units'] - - self.fill_color = self.app.defaults['excellon_plot_fill'] - self.outline_color = self.app.defaults['excellon_plot_line'] - self.alpha_level = 'bf' - - # Attributes to be included in serialization - # Always append to it because it carries contents - # from predecessors. - self.ser_attrs += ['options', 'kind'] - - def merge(self, exc_list, exc_final): - """ - Merge Excellon objects found in exc_list parameter into exc_final object. - Options are always copied from source . - - Tools are disregarded, what is taken in consideration is the unique drill diameters found as values in the - exc_list tools dict's. In the reconstruction section for each unique tool diameter it will be created a - tool_name to be used in the final Excellon object, exc_final. - - If only one object is in exc_list parameter then this function will copy that object in the exc_final - - :param exc_list: List or one object of FlatCAMExcellon Objects to join. - :param exc_final: Destination FlatCAMExcellon object. - :return: None - """ - - try: - decimals_exc = self.decimals - except AttributeError: - decimals_exc = 4 - - # flag to signal that we need to reorder the tools dictionary and drills and slots lists - flag_order = False - - try: - flattened_list = list(itertools.chain(*exc_list)) - except TypeError: - flattened_list = exc_list - - # this dict will hold the unique tool diameters found in the exc_list objects as the dict keys and the dict - # values will be list of Shapely Points; for drills - custom_dict_drills = {} - - # this dict will hold the unique tool diameters found in the exc_list objects as the dict keys and the dict - # values will be list of Shapely Points; for slots - custom_dict_slots = {} - - for exc in flattened_list: - # copy options of the current excellon obj to the final excellon obj - for option in exc.options: - if option != 'name': - try: - exc_final.options[option] = exc.options[option] - except Exception: - exc.app.log.warning("Failed to copy option.", option) - - for drill in exc.drills: - exc_tool_dia = float('%.*f' % (decimals_exc, exc.tools[drill['tool']]['C'])) - - if exc_tool_dia not in custom_dict_drills: - custom_dict_drills[exc_tool_dia] = [drill['point']] - else: - custom_dict_drills[exc_tool_dia].append(drill['point']) - - for slot in exc.slots: - exc_tool_dia = float('%.*f' % (decimals_exc, exc.tools[slot['tool']]['C'])) - - if exc_tool_dia not in custom_dict_slots: - custom_dict_slots[exc_tool_dia] = [[slot['start'], slot['stop']]] - else: - custom_dict_slots[exc_tool_dia].append([slot['start'], slot['stop']]) - - # add the zeros and units to the exc_final object - exc_final.zeros = exc.zeros - exc_final.units = exc.units - - # ########################################## - # Here we add data to the exc_final object # - # ########################################## - - # variable to make tool_name for the tools - current_tool = 0 - # The tools diameter are now the keys in the drill_dia dict and the values are the Shapely Points in case of - # drills - for tool_dia in custom_dict_drills: - # we create a tool name for each key in the drill_dia dict (the key is a unique drill diameter) - current_tool += 1 - - tool_name = str(current_tool) - spec = {"C": float(tool_dia)} - exc_final.tools[tool_name] = spec - - # rebuild the drills list of dict's that belong to the exc_final object - for point in custom_dict_drills[tool_dia]: - exc_final.drills.append( - { - "point": point, - "tool": str(current_tool) - } - ) - - # The tools diameter are now the keys in the drill_dia dict and the values are a list ([start, stop]) - # of two Shapely Points in case of slots - for tool_dia in custom_dict_slots: - # we create a tool name for each key in the slot_dia dict (the key is a unique slot diameter) - # but only if there are no drills - if not exc_final.tools: - current_tool += 1 - tool_name = str(current_tool) - spec = {"C": float(tool_dia)} - exc_final.tools[tool_name] = spec - else: - dia_list = [] - for v in exc_final.tools.values(): - dia_list.append(float(v["C"])) - - if tool_dia not in dia_list: - flag_order = True - - current_tool = len(dia_list) + 1 - tool_name = str(current_tool) - spec = {"C": float(tool_dia)} - exc_final.tools[tool_name] = spec - - else: - for k, v in exc_final.tools.items(): - if v["C"] == tool_dia: - current_tool = int(k) - break - - # rebuild the slots list of dict's that belong to the exc_final object - for point in custom_dict_slots[tool_dia]: - exc_final.slots.append( - { - "start": point[0], - "stop": point[1], - "tool": str(current_tool) - } - ) - - # flag_order == True means that there was an slot diameter not in the tools and we also have drills - # and the new tool was added to self.tools therefore we need to reorder the tools and drills and slots - current_tool = 0 - if flag_order is True: - dia_list = [] - temp_drills = [] - temp_slots = [] - temp_tools = {} - for v in exc_final.tools.values(): - dia_list.append(float(v["C"])) - dia_list.sort() - for ordered_dia in dia_list: - current_tool += 1 - tool_name_temp = str(current_tool) - spec_temp = {"C": float(ordered_dia)} - temp_tools[tool_name_temp] = spec_temp - - for drill in exc_final.drills: - exc_tool_dia = float('%.*f' % (decimals_exc, exc_final.tools[drill['tool']]['C'])) - if exc_tool_dia == ordered_dia: - temp_drills.append( - { - "point": drill["point"], - "tool": str(current_tool) - } - ) - - for slot in exc_final.slots: - slot_tool_dia = float('%.*f' % (decimals_exc, exc_final.tools[slot['tool']]['C'])) - if slot_tool_dia == ordered_dia: - temp_slots.append( - { - "start": slot["start"], - "stop": slot["stop"], - "tool": str(current_tool) - } - ) - - # delete the exc_final tools, drills and slots - exc_final.tools = {} - exc_final.drills[:] = [] - exc_final.slots[:] = [] - - # update the exc_final tools, drills and slots with the ordered values - exc_final.tools = temp_tools - exc_final.drills[:] = temp_drills - exc_final.slots[:] = temp_slots - - # create the geometry for the exc_final object - exc_final.create_geometry() - - def build_ui(self): - FlatCAMObj.build_ui(self) - - self.units = self.app.defaults['units'].upper() - - for row in range(self.ui.tools_table.rowCount()): - try: - # if connected, disconnect the signal from the slot on item_changed as it creates issues - offset_spin_widget = self.ui.tools_table.cellWidget(row, 4) - offset_spin_widget.valueChanged.disconnect() - except (TypeError, AttributeError): - pass - - n = len(self.tools) - # we have (n+2) rows because there are 'n' tools, each a row, plus the last 2 rows for totals. - self.ui.tools_table.setRowCount(n + 2) - - self.tot_drill_cnt = 0 - self.tot_slot_cnt = 0 - - self.tool_row = 0 - - sort = [] - for k, v in list(self.tools.items()): - sort.append((k, v.get('C'))) - sorted_tools = sorted(sort, key=lambda t1: t1[1]) - tools = [i[0] for i in sorted_tools] - - new_options = {} - for opt in self.options: - new_options[opt] = self.options[opt] - - for tool_no in tools: - - # add the data dictionary for each tool with the default values - self.tools[tool_no]['data'] = deepcopy(new_options) - # self.tools[tool_no]['data']["tooldia"] = self.tools[tool_no]["C"] - # self.tools[tool_no]['data']["slot_tooldia"] = self.tools[tool_no]["C"] - - drill_cnt = 0 # variable to store the nr of drills per tool - slot_cnt = 0 # variable to store the nr of slots per tool - - # Find no of drills for the current tool - for drill in self.drills: - if drill['tool'] == tool_no: - drill_cnt += 1 - - self.tot_drill_cnt += drill_cnt - - # Find no of slots for the current tool - for slot in self.slots: - if slot['tool'] == tool_no: - slot_cnt += 1 - - self.tot_slot_cnt += slot_cnt - - exc_id_item = QtWidgets.QTableWidgetItem('%d' % int(tool_no)) - exc_id_item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) - - dia_item = QtWidgets.QTableWidgetItem('%.*f' % (self.decimals, self.tools[tool_no]['C'])) - dia_item.setFlags(QtCore.Qt.ItemIsEnabled) - - drill_count_item = QtWidgets.QTableWidgetItem('%d' % drill_cnt) - drill_count_item.setFlags(QtCore.Qt.ItemIsEnabled) - - # if the slot number is zero is better to not clutter the GUI with zero's so we print a space - slot_count_str = '%d' % slot_cnt if slot_cnt > 0 else '' - slot_count_item = QtWidgets.QTableWidgetItem(slot_count_str) - slot_count_item.setFlags(QtCore.Qt.ItemIsEnabled) - - plot_item = FCCheckBox() - plot_item.setLayoutDirection(QtCore.Qt.RightToLeft) - if self.ui.plot_cb.isChecked(): - plot_item.setChecked(True) - - self.ui.tools_table.setItem(self.tool_row, 0, exc_id_item) # Tool name/id - self.ui.tools_table.setItem(self.tool_row, 1, dia_item) # Diameter - self.ui.tools_table.setItem(self.tool_row, 2, drill_count_item) # Number of drills per tool - self.ui.tools_table.setItem(self.tool_row, 3, slot_count_item) # Number of drills per tool - empty_plot_item = QtWidgets.QTableWidgetItem('') - empty_plot_item.setFlags(~QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) - self.ui.tools_table.setItem(self.tool_row, 5, empty_plot_item) - self.ui.tools_table.setCellWidget(self.tool_row, 5, plot_item) - - self.tool_row += 1 - - # add a last row with the Total number of drills - empty_1 = QtWidgets.QTableWidgetItem('') - empty_1.setFlags(~QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) - empty_1_1 = QtWidgets.QTableWidgetItem('') - empty_1_1.setFlags(~QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) - empty_1_2 = QtWidgets.QTableWidgetItem('') - empty_1_2.setFlags(~QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) - empty_1_3 = QtWidgets.QTableWidgetItem('') - empty_1_3.setFlags(~QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) - - label_tot_drill_count = QtWidgets.QTableWidgetItem(_('Total Drills')) - tot_drill_count = QtWidgets.QTableWidgetItem('%d' % self.tot_drill_cnt) - label_tot_drill_count.setFlags(QtCore.Qt.ItemIsEnabled) - tot_drill_count.setFlags(QtCore.Qt.ItemIsEnabled) - - self.ui.tools_table.setItem(self.tool_row, 0, empty_1) - self.ui.tools_table.setItem(self.tool_row, 1, label_tot_drill_count) - self.ui.tools_table.setItem(self.tool_row, 2, tot_drill_count) # Total number of drills - self.ui.tools_table.setItem(self.tool_row, 3, empty_1_1) - self.ui.tools_table.setItem(self.tool_row, 5, empty_1_3) - - font = QtGui.QFont() - font.setBold(True) - font.setWeight(75) - - for k in [1, 2]: - self.ui.tools_table.item(self.tool_row, k).setForeground(QtGui.QColor(127, 0, 255)) - self.ui.tools_table.item(self.tool_row, k).setFont(font) - - self.tool_row += 1 - - # add a last row with the Total number of slots - empty_2 = QtWidgets.QTableWidgetItem('') - empty_2.setFlags(~QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) - empty_2_1 = QtWidgets.QTableWidgetItem('') - empty_2_1.setFlags(~QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) - empty_2_2 = QtWidgets.QTableWidgetItem('') - empty_2_2.setFlags(~QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) - empty_2_3 = QtWidgets.QTableWidgetItem('') - empty_2_3.setFlags(~QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) - - label_tot_slot_count = QtWidgets.QTableWidgetItem(_('Total Slots')) - tot_slot_count = QtWidgets.QTableWidgetItem('%d' % self.tot_slot_cnt) - label_tot_slot_count.setFlags(QtCore.Qt.ItemIsEnabled) - tot_slot_count.setFlags(QtCore.Qt.ItemIsEnabled) - - self.ui.tools_table.setItem(self.tool_row, 0, empty_2) - self.ui.tools_table.setItem(self.tool_row, 1, label_tot_slot_count) - self.ui.tools_table.setItem(self.tool_row, 2, empty_2_1) - self.ui.tools_table.setItem(self.tool_row, 3, tot_slot_count) # Total number of slots - self.ui.tools_table.setItem(self.tool_row, 5, empty_2_3) - - for kl in [1, 2, 3]: - self.ui.tools_table.item(self.tool_row, kl).setFont(font) - self.ui.tools_table.item(self.tool_row, kl).setForeground(QtGui.QColor(0, 70, 255)) - - # sort the tool diameter column - # self.ui.tools_table.sortItems(1) - - # all the tools are selected by default - self.ui.tools_table.selectColumn(0) - - self.ui.tools_table.resizeColumnsToContents() - self.ui.tools_table.resizeRowsToContents() - - vertical_header = self.ui.tools_table.verticalHeader() - # vertical_header.setSectionResizeMode(QtWidgets.QHeaderView.ResizeToContents) - vertical_header.hide() - self.ui.tools_table.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) - - horizontal_header = self.ui.tools_table.horizontalHeader() - horizontal_header.setMinimumSectionSize(10) - horizontal_header.setDefaultSectionSize(70) - horizontal_header.setSectionResizeMode(0, QtWidgets.QHeaderView.Fixed) - horizontal_header.resizeSection(0, 20) - - horizontal_header.setSectionResizeMode(1, QtWidgets.QHeaderView.Stretch) - - horizontal_header.setSectionResizeMode(2, QtWidgets.QHeaderView.ResizeToContents) - horizontal_header.setSectionResizeMode(3, QtWidgets.QHeaderView.ResizeToContents) - horizontal_header.setSectionResizeMode(5, QtWidgets.QHeaderView.Fixed) - horizontal_header.resizeSection(5, 17) - self.ui.tools_table.setColumnWidth(5, 17) - - # horizontal_header.setStretchLastSection(True) - # horizontal_header.setColumnWidth(2, QtWidgets.QHeaderView.ResizeToContents) - - # horizontal_header.setStretchLastSection(True) - self.ui.tools_table.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) - - self.ui.tools_table.setSortingEnabled(False) - - self.ui.tools_table.setMinimumHeight(self.ui.tools_table.getHeight()) - self.ui.tools_table.setMaximumHeight(self.ui.tools_table.getHeight()) - - if not self.drills: - self.ui.tooldia_entry.hide() - self.ui.generate_milling_button.hide() - else: - self.ui.tooldia_entry.show() - self.ui.generate_milling_button.show() - - if not self.slots: - self.ui.slot_tooldia_entry.hide() - self.ui.generate_milling_slots_button.hide() - else: - self.ui.slot_tooldia_entry.show() - self.ui.generate_milling_slots_button.show() - - # set the text on tool_data_label after loading the object - sel_items = self.ui.tools_table.selectedItems() - sel_rows = [it.row() for it in sel_items] - if len(sel_rows) > 1: - self.ui.tool_data_label.setText( - "%s: %s" % (_('Parameters for'), _("Multiple Tools")) - ) - - self.ui_connect() - - def set_ui(self, ui): - """ - Configures the user interface for this object. - Connects options to form fields. - - :param ui: User interface object. - :type ui: ExcellonObjectUI - :return: None - """ - FlatCAMObj.set_ui(self, ui) - - FlatCAMApp.App.log.debug("FlatCAMExcellon.set_ui()") - - self.units = self.app.defaults['units'].upper() - - self.form_fields.update({ - "plot": self.ui.plot_cb, - "solid": self.ui.solid_cb, - - "operation": self.ui.operation_radio, - "milling_type": self.ui.milling_type_radio, - - "milling_dia": self.ui.mill_dia_entry, - "cutz": self.ui.cutz_entry, - "multidepth": self.ui.mpass_cb, - "depthperpass": self.ui.maxdepth_entry, - "travelz": self.ui.travelz_entry, - "feedrate_z": self.ui.feedrate_z_entry, - "feedrate": self.ui.xyfeedrate_entry, - "feedrate_rapid": self.ui.feedrate_rapid_entry, - "tooldia": self.ui.tooldia_entry, - "slot_tooldia": self.ui.slot_tooldia_entry, - "toolchange": self.ui.toolchange_cb, - "toolchangez": self.ui.toolchangez_entry, - "extracut": self.ui.extracut_cb, - "extracut_length": self.ui.e_cut_entry, - - "spindlespeed": self.ui.spindlespeed_entry, - "dwell": self.ui.dwell_cb, - "dwelltime": self.ui.dwelltime_entry, - - "startz": self.ui.estartz_entry, - "endz": self.ui.endz_entry, - "endxy": self.ui.endxy_entry, - - "offset": self.ui.offset_entry, - - "ppname_e": self.ui.pp_excellon_name_cb, - "ppname_g": self.ui.pp_geo_name_cb, - "z_pdepth": self.ui.pdepth_entry, - "feedrate_probe": self.ui.feedrate_probe_entry, - # "gcode_type": self.ui.excellon_gcode_type_radio - }) - - self.name2option = { - "e_operation": "operation", - "e_milling_type": "milling_type", - "e_milling_dia": "milling_dia", - "e_cutz": "cutz", - "e_multidepth": "multidepth", - "e_depthperpass": "depthperpass", - - "e_travelz": "travelz", - "e_feedratexy": "feedrate", - "e_feedratez": "feedrate_z", - "e_fr_rapid": "feedrate_rapid", - "e_extracut": "extracut", - "e_extracut_length": "extracut_length", - "e_spindlespeed": "spindlespeed", - "e_dwell": "dwell", - "e_dwelltime": "dwelltime", - "e_offset": "offset", - } - - # populate Excellon preprocessor combobox list - for name in list(self.app.preprocessors.keys()): - # the HPGL preprocessor is only for Geometry not for Excellon job therefore don't add it - if name == 'hpgl': - continue - self.ui.pp_excellon_name_cb.addItem(name) - - # populate Geometry (milling) preprocessor combobox list - for name in list(self.app.preprocessors.keys()): - self.ui.pp_geo_name_cb.addItem(name) - - # Fill form fields - self.to_form() - - # update the changes in UI depending on the selected preprocessor in Preferences - # after this moment all the changes in the Posprocessor combo will be handled by the activated signal of the - # self.ui.pp_excellon_name_cb combobox - self.on_pp_changed() - - # Show/Hide Advanced Options - if self.app.defaults["global_app_level"] == 'b': - self.ui.level.setText('%s' % _('Basic')) - - self.ui.tools_table.setColumnHidden(4, True) - self.ui.tools_table.setColumnHidden(5, True) - self.ui.estartz_label.hide() - self.ui.estartz_entry.hide() - self.ui.feedrate_rapid_label.hide() - self.ui.feedrate_rapid_entry.hide() - self.ui.pdepth_label.hide() - self.ui.pdepth_entry.hide() - self.ui.feedrate_probe_label.hide() - self.ui.feedrate_probe_entry.hide() - else: - self.ui.level.setText('%s' % _('Advanced')) - - assert isinstance(self.ui, ExcellonObjectUI), \ - "Expected a ExcellonObjectUI, got %s" % type(self.ui) - self.ui.plot_cb.stateChanged.connect(self.on_plot_cb_click) - self.ui.solid_cb.stateChanged.connect(self.on_solid_cb_click) - self.ui.generate_cnc_button.clicked.connect(self.on_create_cncjob_button_click) - self.ui.generate_milling_button.clicked.connect(self.on_generate_milling_button_click) - self.ui.generate_milling_slots_button.clicked.connect(self.on_generate_milling_slots_button_click) - - self.on_operation_type(val='drill') - self.ui.operation_radio.activated_custom.connect(self.on_operation_type) - - self.ui.pp_excellon_name_cb.activated.connect(self.on_pp_changed) - - self.ui.apply_param_to_all.clicked.connect(self.on_apply_param_to_all_clicked) - - self.units_found = self.app.defaults['units'] - - # ######################################## - # #######3 TEMP SETTINGS ################# - # ######################################## - self.ui.operation_radio.set_value("drill") - self.ui.operation_radio.setEnabled(False) - - def ui_connect(self): - - # selective plotting - for row in range(self.ui.tools_table.rowCount() - 2): - self.ui.tools_table.cellWidget(row, 5).clicked.connect(self.on_plot_cb_click_table) - self.ui.plot_cb.stateChanged.connect(self.on_plot_cb_click) - - # rows selected - self.ui.tools_table.clicked.connect(self.on_row_selection_change) - self.ui.tools_table.horizontalHeader().sectionClicked.connect(self.on_row_selection_change) - - # value changed in the particular parameters of a tool - for key, option in self.name2option.items(): - current_widget = self.form_fields[option] - - if isinstance(current_widget, FCCheckBox): - current_widget.stateChanged.connect(self.form_to_storage) - if isinstance(current_widget, RadioSet): - current_widget.activated_custom.connect(self.form_to_storage) - elif isinstance(current_widget, FCDoubleSpinner) or isinstance(current_widget, FCSpinner): - current_widget.returnPressed.connect(self.form_to_storage) - - def ui_disconnect(self): - # selective plotting - for row in range(self.ui.tools_table.rowCount()): - try: - self.ui.tools_table.cellWidget(row, 5).clicked.disconnect() - except (TypeError, AttributeError): - pass - try: - self.ui.plot_cb.stateChanged.disconnect() - except (TypeError, AttributeError): - pass - - # rows selected - try: - self.ui.tools_table.clicked.disconnect() - except (TypeError, AttributeError): - pass - try: - self.ui.tools_table.horizontalHeader().sectionClicked.disconnect() - except (TypeError, AttributeError): - pass - - # value changed in the particular parameters of a tool - for key, option in self.name2option.items(): - current_widget = self.form_fields[option] - - if isinstance(current_widget, FCCheckBox): - try: - current_widget.stateChanged.disconnect(self.form_to_storage) - except (TypeError, ValueError): - pass - if isinstance(current_widget, RadioSet): - try: - current_widget.activated_custom.disconnect(self.form_to_storage) - except (TypeError, ValueError): - pass - elif isinstance(current_widget, FCDoubleSpinner) or isinstance(current_widget, FCSpinner): - try: - current_widget.returnPressed.disconnect(self.form_to_storage) - except (TypeError, ValueError): - pass - - def on_row_selection_change(self): - self.ui_disconnect() - - sel_rows = [] - sel_items = self.ui.tools_table.selectedItems() - for it in sel_items: - sel_rows.append(it.row()) - - if not sel_rows: - self.ui.tool_data_label.setText( - "%s: %s" % (_('Parameters for'), _("No Tool Selected")) - ) - self.ui.generate_cnc_button.setDisabled(True) - self.ui.generate_milling_button.setDisabled(True) - self.ui.generate_milling_slots_button.setDisabled(True) - self.ui_connect() - return - else: - self.ui.generate_cnc_button.setDisabled(False) - self.ui.generate_milling_button.setDisabled(False) - self.ui.generate_milling_slots_button.setDisabled(False) - - if len(sel_rows) == 1: - # update the QLabel that shows for which Tool we have the parameters in the UI form - tooluid = int(self.ui.tools_table.item(sel_rows[0], 0).text()) - self.ui.tool_data_label.setText( - "%s: %s %d" % (_('Parameters for'), _("Tool"), tooluid) - ) - else: - self.ui.tool_data_label.setText( - "%s: %s" % (_('Parameters for'), _("Multiple Tools")) - ) - - for c_row in sel_rows: - # populate the form with the data from the tool associated with the row parameter - try: - item = self.ui.tools_table.item(c_row, 0) - if type(item) is not None: - tooluid = item.text() - self.storage_to_form(self.tools[str(tooluid)]['data']) - else: - self.ui_connect() - return - except Exception as e: - log.debug("Tool missing. Add a tool in Geo Tool Table. %s" % str(e)) - self.ui_connect() - return - - self.ui_connect() - - def storage_to_form(self, dict_storage): - for form_key in self.form_fields: - for storage_key in dict_storage: - if form_key == storage_key and form_key not in \ - ["toolchange", "toolchangez", "startz", "endz", "ppname_e", "ppname_g"]: - try: - self.form_fields[form_key].set_value(dict_storage[form_key]) - except Exception as e: - log.debug("FlatCAMExcellon.storage_to_form() --> %s" % str(e)) - pass - - def form_to_storage(self): - if self.ui.tools_table.rowCount() == 0: - # there is no tool in tool table so we can't save the GUI elements values to storage - return - - self.ui_disconnect() - - widget_changed = self.sender() - wdg_objname = widget_changed.objectName() - option_changed = self.name2option[wdg_objname] - - # row = self.ui.tools_table.currentRow() - rows = sorted(set(index.row() for index in self.ui.tools_table.selectedIndexes())) - for row in rows: - if row < 0: - row = 0 - tooluid_item = int(self.ui.tools_table.item(row, 0).text()) - - for tooluid_key, tooluid_val in self.tools.items(): - if int(tooluid_key) == tooluid_item: - new_option_value = self.form_fields[option_changed].get_value() - if option_changed in tooluid_val: - tooluid_val[option_changed] = new_option_value - if option_changed in tooluid_val['data']: - tooluid_val['data'][option_changed] = new_option_value - - self.ui_connect() - - def on_operation_type(self, val): - if val == 'mill': - self.ui.mill_type_label.show() - self.ui.milling_type_radio.show() - self.ui.mill_dia_label.show() - self.ui.mill_dia_entry.show() - self.ui.frxylabel.show() - self.ui.xyfeedrate_entry.show() - self.ui.extracut_cb.show() - self.ui.e_cut_entry.show() - - # if 'laser' not in self.ui.pp_excellon_name_cb.get_value().lower(): - # self.ui.mpass_cb.show() - # self.ui.maxdepth_entry.show() - else: - self.ui.mill_type_label.hide() - self.ui.milling_type_radio.hide() - self.ui.mill_dia_label.hide() - self.ui.mill_dia_entry.hide() - # self.ui.mpass_cb.hide() - # self.ui.maxdepth_entry.hide() - self.ui.frxylabel.hide() - self.ui.xyfeedrate_entry.hide() - self.ui.extracut_cb.hide() - self.ui.e_cut_entry.hide() - - def get_selected_tools_list(self): - """ - Returns the keys to the self.tools dictionary corresponding - to the selections on the tool list in the GUI. - - :return: List of tools. - :rtype: list - """ - - return [str(x.text()) for x in self.ui.tools_table.selectedItems()] - - def get_selected_tools_table_items(self): - """ - Returns a list of lists, each list in the list is made out of row elements - - :return: List of table_tools items. - :rtype: list - """ - table_tools_items = [] - for x in self.ui.tools_table.selectedItems(): - # from the columnCount we subtract a value of 1 which represent the last column (plot column) - # which does not have text - txt = '' - elem = [] - - for column in range(0, self.ui.tools_table.columnCount() - 1): - try: - txt = self.ui.tools_table.item(x.row(), column).text() - except AttributeError: - try: - txt = self.ui.tools_table.cellWidget(x.row(), column).currentText() - except AttributeError: - pass - elem.append(txt) - table_tools_items.append(deepcopy(elem)) - # table_tools_items.append([self.ui.tools_table.item(x.row(), column).text() - # for column in range(0, self.ui.tools_table.columnCount() - 1)]) - for item in table_tools_items: - item[0] = str(item[0]) - return table_tools_items - - def export_excellon(self, whole, fract, e_zeros=None, form='dec', factor=1, slot_type='routing'): - """ - Returns two values, first is a boolean , if 1 then the file has slots and second contain the Excellon code - :return: has_slots and Excellon_code - """ - - excellon_code = '' - - # store here if the file has slots, return 1 if any slots, 0 if only drills - has_slots = 0 - - # drills processing - try: - if self.drills: - length = whole + fract - for tool in self.tools: - excellon_code += 'T0%s\n' % str(tool) if int(tool) < 10 else 'T%s\n' % str(tool) - - for drill in self.drills: - if form == 'dec' and tool == drill['tool']: - drill_x = drill['point'].x * factor - drill_y = drill['point'].y * factor - excellon_code += "X{:.{dec}f}Y{:.{dec}f}\n".format(drill_x, drill_y, dec=fract) - elif e_zeros == 'LZ' and tool == drill['tool']: - drill_x = drill['point'].x * factor - drill_y = drill['point'].y * factor - - exc_x_formatted = "{:.{dec}f}".format(drill_x, dec=fract) - exc_y_formatted = "{:.{dec}f}".format(drill_y, dec=fract) - - # extract whole part and decimal part - exc_x_formatted = exc_x_formatted.partition('.') - exc_y_formatted = exc_y_formatted.partition('.') - - # left padd the 'whole' part with zeros - x_whole = exc_x_formatted[0].rjust(whole, '0') - y_whole = exc_y_formatted[0].rjust(whole, '0') - - # restore the coordinate padded in the left with 0 and added the decimal part - # without the decinal dot - exc_x_formatted = x_whole + exc_x_formatted[2] - exc_y_formatted = y_whole + exc_y_formatted[2] - - excellon_code += "X{xform}Y{yform}\n".format(xform=exc_x_formatted, - yform=exc_y_formatted) - elif tool == drill['tool']: - drill_x = drill['point'].x * factor - drill_y = drill['point'].y * factor - - exc_x_formatted = "{:.{dec}f}".format(drill_x, dec=fract).replace('.', '') - exc_y_formatted = "{:.{dec}f}".format(drill_y, dec=fract).replace('.', '') - - # pad with rear zeros - exc_x_formatted.ljust(length, '0') - exc_y_formatted.ljust(length, '0') - - excellon_code += "X{xform}Y{yform}\n".format(xform=exc_x_formatted, - yform=exc_y_formatted) - except Exception as e: - log.debug(str(e)) - - # slots processing - try: - if self.slots: - has_slots = 1 - for tool in self.tools: - excellon_code += 'G05\n' - - if int(tool) < 10: - excellon_code += 'T0' + str(tool) + '\n' - else: - excellon_code += 'T' + str(tool) + '\n' - - for slot in self.slots: - if form == 'dec' and tool == slot['tool']: - start_slot_x = slot['start'].x * factor - start_slot_y = slot['start'].y * factor - stop_slot_x = slot['stop'].x * factor - stop_slot_y = slot['stop'].y * factor - if slot_type == 'routing': - excellon_code += "G00X{:.{dec}f}Y{:.{dec}f}\nM15\n".format(start_slot_x, - start_slot_y, - dec=fract) - excellon_code += "G01X{:.{dec}f}Y{:.{dec}f}\nM16\n".format(stop_slot_x, - stop_slot_y, - dec=fract) - elif slot_type == 'drilling': - excellon_code += "X{:.{dec}f}Y{:.{dec}f}G85X{:.{dec}f}Y{:.{dec}f}\nG05\n".format( - start_slot_x, start_slot_y, stop_slot_x, stop_slot_y, dec=fract - ) - - elif e_zeros == 'LZ' and tool == slot['tool']: - start_slot_x = slot['start'].x * factor - start_slot_y = slot['start'].y * factor - stop_slot_x = slot['stop'].x * factor - stop_slot_y = slot['stop'].y * factor - - start_slot_x_formatted = "{:.{dec}f}".format(start_slot_x, dec=fract).replace('.', '') - start_slot_y_formatted = "{:.{dec}f}".format(start_slot_y, dec=fract).replace('.', '') - stop_slot_x_formatted = "{:.{dec}f}".format(stop_slot_x, dec=fract).replace('.', '') - stop_slot_y_formatted = "{:.{dec}f}".format(stop_slot_y, dec=fract).replace('.', '') - - # extract whole part and decimal part - start_slot_x_formatted = start_slot_x_formatted.partition('.') - start_slot_y_formatted = start_slot_y_formatted.partition('.') - stop_slot_x_formatted = stop_slot_x_formatted.partition('.') - stop_slot_y_formatted = stop_slot_y_formatted.partition('.') - - # left padd the 'whole' part with zeros - start_x_whole = start_slot_x_formatted[0].rjust(whole, '0') - start_y_whole = start_slot_y_formatted[0].rjust(whole, '0') - stop_x_whole = stop_slot_x_formatted[0].rjust(whole, '0') - stop_y_whole = stop_slot_y_formatted[0].rjust(whole, '0') - - # restore the coordinate padded in the left with 0 and added the decimal part - # without the decinal dot - start_slot_x_formatted = start_x_whole + start_slot_x_formatted[2] - start_slot_y_formatted = start_y_whole + start_slot_y_formatted[2] - stop_slot_x_formatted = stop_x_whole + stop_slot_x_formatted[2] - stop_slot_y_formatted = stop_y_whole + stop_slot_y_formatted[2] - - if slot_type == 'routing': - excellon_code += "G00X{xstart}Y{ystart}\nM15\n".format(xstart=start_slot_x_formatted, - ystart=start_slot_y_formatted) - excellon_code += "G01X{xstop}Y{ystop}\nM16\n".format(xstop=stop_slot_x_formatted, - ystop=stop_slot_y_formatted) - elif slot_type == 'drilling': - excellon_code += "{xstart}Y{ystart}G85X{xstop}Y{ystop}\nG05\n".format( - xstart=start_slot_x_formatted, ystart=start_slot_y_formatted, - xstop=stop_slot_x_formatted, ystop=stop_slot_y_formatted - ) - elif tool == slot['tool']: - start_slot_x = slot['start'].x * factor - start_slot_y = slot['start'].y * factor - stop_slot_x = slot['stop'].x * factor - stop_slot_y = slot['stop'].y * factor - length = whole + fract - - start_slot_x_formatted = "{:.{dec}f}".format(start_slot_x, dec=fract).replace('.', '') - start_slot_y_formatted = "{:.{dec}f}".format(start_slot_y, dec=fract).replace('.', '') - stop_slot_x_formatted = "{:.{dec}f}".format(stop_slot_x, dec=fract).replace('.', '') - stop_slot_y_formatted = "{:.{dec}f}".format(stop_slot_y, dec=fract).replace('.', '') - - # pad with rear zeros - start_slot_x_formatted.ljust(length, '0') - start_slot_y_formatted.ljust(length, '0') - stop_slot_x_formatted.ljust(length, '0') - stop_slot_y_formatted.ljust(length, '0') - - if slot_type == 'routing': - excellon_code += "G00X{xstart}Y{ystart}\nM15\n".format(xstart=start_slot_x_formatted, - ystart=start_slot_y_formatted) - excellon_code += "G01X{xstop}Y{ystop}\nM16\n".format(xstop=stop_slot_x_formatted, - ystop=stop_slot_y_formatted) - elif slot_type == 'drilling': - excellon_code += "{xstart}Y{ystart}G85X{xstop}Y{ystop}\nG05\n".format( - xstart=start_slot_x_formatted, ystart=start_slot_y_formatted, - xstop=stop_slot_x_formatted, ystop=stop_slot_y_formatted - ) - except Exception as e: - log.debug(str(e)) - - if not self.drills and not self.slots: - log.debug("FlatCAMObj.FlatCAMExcellon.export_excellon() --> Excellon Object is empty: no drills, no slots.") - return 'fail' - - return has_slots, excellon_code - - def generate_milling_drills(self, tools=None, outname=None, tooldia=None, plot=False, use_thread=False): - """ - Note: This method is a good template for generic operations as - it takes it's options from parameters or otherwise from the - object's options and returns a (success, msg) tuple as feedback - for shell operations. - - :return: Success/failure condition tuple (bool, str). - :rtype: tuple - """ - - # Get the tools from the list. These are keys - # to self.tools - if tools is None: - tools = self.get_selected_tools_list() - - if outname is None: - outname = self.options["name"] + "_mill" - - if tooldia is None: - tooldia = float(self.options["tooldia"]) - - # Sort tools by diameter. items() -> [('name', diameter), ...] - # sorted_tools = sorted(list(self.tools.items()), key=lambda tl: tl[1]) # no longer works in Python3 - - sort = [] - for k, v in self.tools.items(): - sort.append((k, v.get('C'))) - sorted_tools = sorted(sort, key=lambda t1: t1[1]) - - if tools == "all": - tools = [i[0] for i in sorted_tools] # List if ordered tool names. - log.debug("Tools 'all' and sorted are: %s" % str(tools)) - - if len(tools) == 0: - self.app.inform.emit('[ERROR_NOTCL] %s' % - _("Please select one or more tools from the list and try again.")) - return False, "Error: No tools." - - for tool in tools: - if tooldia > self.tools[tool]["C"]: - self.app.inform.emit( - '[ERROR_NOTCL] %s %s: %s' % ( - _("Milling tool for DRILLS is larger than hole size. Cancelled."), - _("Tool"), - str(tool) - ) - ) - return False, "Error: Milling tool is larger than hole." - - def geo_init(geo_obj, app_obj): - assert isinstance(geo_obj, FlatCAMGeometry), \ - "Initializer expected a FlatCAMGeometry, got %s" % type(geo_obj) - - # ## Add properties to the object - - # get the tool_table items in a list of row items - tool_table_items = self.get_selected_tools_table_items() - # insert an information only element in the front - tool_table_items.insert(0, [_("Tool_nr"), _("Diameter"), _("Drills_Nr"), _("Slots_Nr")]) - - geo_obj.options['Tools_in_use'] = tool_table_items - geo_obj.options['type'] = 'Excellon Geometry' - geo_obj.options["cnctooldia"] = str(tooldia) - - geo_obj.solid_geometry = [] - - # in case that the tool used has the same diameter with the hole, and since the maximum resolution - # for FlatCAM is 6 decimals, - # we add a tenth of the minimum value, meaning 0.0000001, which from our point of view is "almost zero" - for hole in self.drills: - if hole['tool'] in tools: - buffer_value = self.tools[hole['tool']]["C"] / 2 - tooldia / 2 - if buffer_value == 0: - geo_obj.solid_geometry.append( - Point(hole['point']).buffer(0.0000001).exterior) - else: - geo_obj.solid_geometry.append( - Point(hole['point']).buffer(buffer_value).exterior) - if use_thread: - def geo_thread(app_obj): - app_obj.new_object("geometry", outname, geo_init, plot=plot) - - # Create a promise with the new name - self.app.collection.promise(outname) - - # Send to worker - self.app.worker_task.emit({'fcn': geo_thread, 'params': [self.app]}) - else: - self.app.new_object("geometry", outname, geo_init, plot=plot) - - return True, "" - - def generate_milling_slots(self, tools=None, outname=None, tooldia=None, plot=True, use_thread=False): - """ - Note: This method is a good template for generic operations as - it takes it's options from parameters or otherwise from the - object's options and returns a (success, msg) tuple as feedback - for shell operations. - - :return: Success/failure condition tuple (bool, str). - :rtype: tuple - """ - - # Get the tools from the list. These are keys - # to self.tools - if tools is None: - tools = self.get_selected_tools_list() - - if outname is None: - outname = self.options["name"] + "_mill" - - if tooldia is None: - tooldia = float(self.options["slot_tooldia"]) - - # Sort tools by diameter. items() -> [('name', diameter), ...] - # sorted_tools = sorted(list(self.tools.items()), key=lambda tl: tl[1]) # no longer works in Python3 - - sort = [] - for k, v in self.tools.items(): - sort.append((k, v.get('C'))) - sorted_tools = sorted(sort, key=lambda t1: t1[1]) - - if tools == "all": - tools = [i[0] for i in sorted_tools] # List if ordered tool names. - log.debug("Tools 'all' and sorted are: %s" % str(tools)) - - if len(tools) == 0: - self.app.inform.emit('[ERROR_NOTCL] %s' % - _("Please select one or more tools from the list and try again.")) - return False, "Error: No tools." - - for tool in tools: - # I add the 0.0001 value to account for the rounding error in converting from IN to MM and reverse - adj_toolstable_tooldia = float('%.*f' % (self.decimals, float(tooldia))) - adj_file_tooldia = float('%.*f' % (self.decimals, float(self.tools[tool]["C"]))) - if adj_toolstable_tooldia > adj_file_tooldia + 0.0001: - self.app.inform.emit('[ERROR_NOTCL] %s' % - _("Milling tool for SLOTS is larger than hole size. Cancelled.")) - return False, "Error: Milling tool is larger than hole." - - def geo_init(geo_obj, app_obj): - assert isinstance(geo_obj, FlatCAMGeometry), \ - "Initializer expected a FlatCAMGeometry, got %s" % type(geo_obj) - - # ## Add properties to the object - - # get the tool_table items in a list of row items - tool_table_items = self.get_selected_tools_table_items() - # insert an information only element in the front - tool_table_items.insert(0, [_("Tool_nr"), _("Diameter"), _("Drills_Nr"), _("Slots_Nr")]) - - geo_obj.options['Tools_in_use'] = tool_table_items - geo_obj.options['type'] = 'Excellon Geometry' - geo_obj.options["cnctooldia"] = str(tooldia) - - geo_obj.solid_geometry = [] - - # in case that the tool used has the same diameter with the hole, and since the maximum resolution - # for FlatCAM is 6 decimals, - # we add a tenth of the minimum value, meaning 0.0000001, which from our point of view is "almost zero" - for slot in self.slots: - if slot['tool'] in tools: - toolstable_tool = float('%.*f' % (self.decimals, float(tooldia))) - file_tool = float('%.*f' % (self.decimals, float(self.tools[tool]["C"]))) - - # I add the 0.0001 value to account for the rounding error in converting from IN to MM and reverse - # for the file_tool (tooldia actually) - buffer_value = float(file_tool / 2) - float(toolstable_tool / 2) + 0.0001 - if buffer_value == 0: - start = slot['start'] - stop = slot['stop'] - - lines_string = LineString([start, stop]) - poly = lines_string.buffer(0.0000001, int(self.geo_steps_per_circle)).exterior - geo_obj.solid_geometry.append(poly) - else: - start = slot['start'] - stop = slot['stop'] - - lines_string = LineString([start, stop]) - poly = lines_string.buffer(buffer_value, int(self.geo_steps_per_circle)).exterior - geo_obj.solid_geometry.append(poly) - - if use_thread: - def geo_thread(app_obj): - app_obj.new_object("geometry", outname + '_slot', geo_init, plot=plot) - - # Create a promise with the new name - self.app.collection.promise(outname) - - # Send to worker - self.app.worker_task.emit({'fcn': geo_thread, 'params': [self.app]}) - else: - self.app.new_object("geometry", outname + '_slot', geo_init, plot=plot) - - return True, "" - - def on_generate_milling_button_click(self, *args): - self.app.report_usage("excellon_on_create_milling_drills button") - self.read_form() - - self.generate_milling_drills(use_thread=False) - - def on_generate_milling_slots_button_click(self, *args): - self.app.report_usage("excellon_on_create_milling_slots_button") - self.read_form() - - self.generate_milling_slots(use_thread=False) - - def on_pp_changed(self): - current_pp = self.ui.pp_excellon_name_cb.get_value() - - if "toolchange_probe" in current_pp.lower(): - self.ui.pdepth_entry.setVisible(True) - self.ui.pdepth_label.show() - - self.ui.feedrate_probe_entry.setVisible(True) - self.ui.feedrate_probe_label.show() - else: - self.ui.pdepth_entry.setVisible(False) - self.ui.pdepth_label.hide() - - self.ui.feedrate_probe_entry.setVisible(False) - self.ui.feedrate_probe_label.hide() - - if 'marlin' in current_pp.lower() or 'custom' in current_pp.lower(): - self.ui.feedrate_rapid_label.show() - self.ui.feedrate_rapid_entry.show() - else: - self.ui.feedrate_rapid_label.hide() - self.ui.feedrate_rapid_entry.hide() - - if 'laser' in current_pp.lower(): - self.ui.cutzlabel.hide() - self.ui.cutz_entry.hide() - try: - self.ui.mpass_cb.hide() - self.ui.maxdepth_entry.hide() - except AttributeError: - pass - - if 'marlin' in current_pp.lower(): - self.ui.travelzlabel.setText('%s:' % _("Focus Z")) - self.ui.endz_label.show() - self.ui.endz_entry.show() - else: - self.ui.travelzlabel.hide() - self.ui.travelz_entry.hide() - - self.ui.endz_label.hide() - self.ui.endz_entry.hide() - - try: - self.ui.frzlabel.hide() - self.ui.feedrate_z_entry.hide() - except AttributeError: - pass - - self.ui.dwell_cb.hide() - self.ui.dwelltime_entry.hide() - - self.ui.spindle_label.setText('%s:' % _("Laser Power")) - - try: - self.ui.tool_offset_label.hide() - self.ui.offset_entry.hide() - except AttributeError: - pass - else: - self.ui.cutzlabel.show() - self.ui.cutz_entry.show() - try: - self.ui.mpass_cb.show() - self.ui.maxdepth_entry.show() - except AttributeError: - pass - - self.ui.travelzlabel.setText('%s:' % _('Travel Z')) - - self.ui.travelzlabel.show() - self.ui.travelz_entry.show() - - self.ui.endz_label.show() - self.ui.endz_entry.show() - - try: - self.ui.frzlabel.show() - self.ui.feedrate_z_entry.show() - except AttributeError: - pass - self.ui.dwell_cb.show() - self.ui.dwelltime_entry.show() - - self.ui.spindle_label.setText('%s:' % _('Spindle speed')) - - try: - self.ui.tool_offset_lbl.show() - self.ui.offset_entry.show() - except AttributeError: - pass - - def on_create_cncjob_button_click(self, *args): - self.app.report_usage("excellon_on_create_cncjob_button") - self.read_form() - - # Get the tools from the list - tools = self.get_selected_tools_list() - - if len(tools) == 0: - # if there is a single tool in the table (remember that the last 2 rows are for totals and do not count in - # tool number) it means that there are 3 rows (1 tool and 2 totals). - # in this case regardless of the selection status of that tool, use it. - if self.ui.tools_table.rowCount() == 3: - tools.append(self.ui.tools_table.item(0, 0).text()) - else: - self.app.inform.emit('[ERROR_NOTCL] %s' % - _("Please select one or more tools from the list and try again.")) - return - - xmin = self.options['xmin'] - ymin = self.options['ymin'] - xmax = self.options['xmax'] - ymax = self.options['ymax'] - - job_name = self.options["name"] + "_cnc" - pp_excellon_name = self.options["ppname_e"] - - # Object initialization function for app.new_object() - def job_init(job_obj, app_obj): - assert isinstance(job_obj, FlatCAMCNCjob), \ - "Initializer expected a FlatCAMCNCjob, got %s" % type(job_obj) - - # get the tool_table items in a list of row items - tool_table_items = self.get_selected_tools_table_items() - # insert an information only element in the front - tool_table_items.insert(0, [_("Tool_nr"), _("Diameter"), _("Drills_Nr"), _("Slots_Nr")]) - - # ## Add properties to the object - - job_obj.origin_kind = 'excellon' - - job_obj.options['Tools_in_use'] = tool_table_items - job_obj.options['type'] = 'Excellon' - job_obj.options['ppname_e'] = pp_excellon_name - - job_obj.multidepth = self.options["multidepth"] - job_obj.z_depthpercut = self.options["depthperpass"] - - job_obj.z_move = float(self.options["travelz"]) - job_obj.feedrate = float(self.options["feedrate_z"]) - job_obj.z_feedrate = float(self.options["feedrate_z"]) - job_obj.feedrate_rapid = float(self.options["feedrate_rapid"]) - - job_obj.spindlespeed = float(self.options["spindlespeed"]) if self.options["spindlespeed"] != 0 else None - job_obj.spindledir = self.app.defaults['excellon_spindledir'] - job_obj.dwell = self.options["dwell"] - job_obj.dwelltime = float(self.options["dwelltime"]) - - job_obj.pp_excellon_name = pp_excellon_name - - job_obj.toolchange_xy_type = "excellon" - job_obj.coords_decimals = int(self.app.defaults["cncjob_coords_decimals"]) - job_obj.fr_decimals = int(self.app.defaults["cncjob_fr_decimals"]) - - job_obj.options['xmin'] = xmin - job_obj.options['ymin'] = ymin - job_obj.options['xmax'] = xmax - job_obj.options['ymax'] = ymax - - job_obj.z_pdepth = float(self.options["z_pdepth"]) - job_obj.feedrate_probe = float(self.options["feedrate_probe"]) - - job_obj.z_cut = float(self.options['cutz']) - job_obj.toolchange = self.options["toolchange"] - job_obj.xy_toolchange = self.app.defaults["excellon_toolchangexy"] - job_obj.z_toolchange = float(self.options["toolchangez"]) - job_obj.startz = float(self.options["startz"]) if self.options["startz"] else None - job_obj.endz = float(self.options["endz"]) - job_obj.xy_end = self.options["endxy"] - job_obj.excellon_optimization_type = self.app.defaults["excellon_optimization_type"] - - tools_csv = ','.join(tools) - ret_val = job_obj.generate_from_excellon_by_tool(self, tools_csv, use_ui=True) - - if ret_val == 'fail': - return 'fail' - - job_obj.gcode_parse() - job_obj.create_geometry() - - # To be run in separate thread - def job_thread(app_obj): - with self.app.proc_container.new(_("Generating CNC Code")): - app_obj.new_object("cncjob", job_name, job_init) - - # Create promise for the new name. - self.app.collection.promise(job_name) - - # Send to worker - # self.app.worker.add_task(job_thread, [self.app]) - self.app.worker_task.emit({'fcn': job_thread, 'params': [self.app]}) - - def convert_units(self, units): - log.debug("FlatCAMObj.FlatCAMExcellon.convert_units()") - - Excellon.convert_units(self, units) - - # factor = Excellon.convert_units(self, units) - # self.options['drillz'] = float(self.options['drillz']) * factor - # self.options['travelz'] = float(self.options['travelz']) * factor - # self.options['feedrate'] = float(self.options['feedrate']) * factor - # self.options['feedrate_rapid'] = float(self.options['feedrate_rapid']) * factor - # self.options['toolchangez'] = float(self.options['toolchangez']) * factor - # - # if self.app.defaults["excellon_toolchangexy"] == '': - # self.options['toolchangexy'] = "0.0, 0.0" - # else: - # coords_xy = [float(eval(coord)) for coord in self.app.defaults["excellon_toolchangexy"].split(",")] - # if len(coords_xy) < 2: - # self.app.inform.emit('[ERROR] %s' % _("The Toolchange X,Y field in Edit -> Preferences has to be " - # "in the format (x, y) \n" - # "but now there is only one value, not two. ")) - # return 'fail' - # coords_xy[0] *= factor - # coords_xy[1] *= factor - # self.options['toolchangexy'] = "%f, %f" % (coords_xy[0], coords_xy[1]) - # - # if self.options['startz'] is not None: - # self.options['startz'] = float(self.options['startz']) * factor - # self.options['endz'] = float(self.options['endz']) * factor - - def on_solid_cb_click(self, *args): - if self.muted_ui: - return - self.read_form_item('solid') - self.plot() - - def on_plot_cb_click(self, *args): - if self.muted_ui: - return - self.plot() - self.read_form_item('plot') - - self.ui_disconnect() - cb_flag = self.ui.plot_cb.isChecked() - for row in range(self.ui.tools_table.rowCount() - 2): - table_cb = self.ui.tools_table.cellWidget(row, 5) - if cb_flag: - table_cb.setChecked(True) - else: - table_cb.setChecked(False) - - self.ui_connect() - - def on_plot_cb_click_table(self): - # self.ui.cnc_tools_table.cellWidget(row, 2).widget().setCheckState(QtCore.Qt.Unchecked) - self.ui_disconnect() - # cw = self.sender() - # cw_index = self.ui.tools_table.indexAt(cw.pos()) - # cw_row = cw_index.row() - check_row = 0 - - self.shapes.clear(update=True) - for tool_key in self.tools: - solid_geometry = self.tools[tool_key]['solid_geometry'] - - # find the geo_tool_table row associated with the tool_key - for row in range(self.ui.tools_table.rowCount()): - tool_item = int(self.ui.tools_table.item(row, 0).text()) - if tool_item == int(tool_key): - check_row = row - break - if self.ui.tools_table.cellWidget(check_row, 5).isChecked(): - self.options['plot'] = True - # self.plot_element(element=solid_geometry, visible=True) - # Plot excellon (All polygons?) - if self.options["solid"]: - for geo in solid_geometry: - self.add_shape(shape=geo, color='#750000BF', face_color='#C40000BF', - visible=self.options['plot'], - layer=2) - else: - for geo in solid_geometry: - self.add_shape(shape=geo.exterior, color='red', visible=self.options['plot']) - for ints in geo.interiors: - self.add_shape(shape=ints, color='green', visible=self.options['plot']) - self.shapes.redraw() - - # make sure that the general plot is disabled if one of the row plot's are disabled and - # if all the row plot's are enabled also enable the general plot checkbox - cb_cnt = 0 - total_row = self.ui.tools_table.rowCount() - for row in range(total_row - 2): - if self.ui.tools_table.cellWidget(row, 5).isChecked(): - cb_cnt += 1 - else: - cb_cnt -= 1 - if cb_cnt < total_row - 2: - self.ui.plot_cb.setChecked(False) - else: - self.ui.plot_cb.setChecked(True) - self.ui_connect() - - def plot(self, visible=None, kind=None): - - # Does all the required setup and returns False - # if the 'ptint' option is set to False. - if not FlatCAMObj.plot(self): - return - - # try: - # # Plot Excellon (All polygons?) - # if self.options["solid"]: - # for tool in self.tools: - # for geo in self.tools[tool]['solid_geometry']: - # self.add_shape(shape=geo, color='#750000BF', face_color='#C40000BF', - # visible=self.options['plot'], - # layer=2) - # else: - # for tool in self.tools: - # for geo in self.tools[tool]['solid_geometry']: - # self.add_shape(shape=geo.exterior, color='red', visible=self.options['plot']) - # for ints in geo.interiors: - # self.add_shape(shape=ints, color='orange', visible=self.options['plot']) - # - # self.shapes.redraw() - # return - # except (ObjectDeleted, AttributeError, KeyError): - # self.shapes.clear(update=True) - - # this stays for compatibility reasons, in case we try to open old projects - try: - __ = iter(self.solid_geometry) - except TypeError: - self.solid_geometry = [self.solid_geometry] - - visible = visible if visible else self.options['plot'] - - try: - # Plot Excellon (All polygons?) - if self.options["solid"]: - for geo in self.solid_geometry: - self.add_shape(shape=geo, - color=self.outline_color, - face_color=self.fill_color, - visible=visible, - layer=2) - else: - for geo in self.solid_geometry: - self.add_shape(shape=geo.exterior, color='red', visible=visible) - for ints in geo.interiors: - self.add_shape(shape=ints, color='orange', visible=visible) - - self.shapes.redraw() - except (ObjectDeleted, AttributeError): - self.shapes.clear(update=True) - - def on_apply_param_to_all_clicked(self): - if self.ui.tools_table.rowCount() == 0: - # there is no tool in tool table so we can't save the GUI elements values to storage - log.debug("FlatCAMExcellon.on_apply_param_to_all_clicked() --> no tool in Tools Table, aborting.") - return - - self.ui_disconnect() - - row = self.ui.tools_table.currentRow() - if row < 0: - row = 0 - - tooluid_item = int(self.ui.tools_table.item(row, 0).text()) - temp_tool_data = {} - - for tooluid_key, tooluid_val in self.tools.items(): - if int(tooluid_key) == tooluid_item: - # this will hold the 'data' key of the self.tools[tool] dictionary that corresponds to - # the current row in the tool table - temp_tool_data = tooluid_val['data'] - break - - for tooluid_key, tooluid_val in self.tools.items(): - tooluid_val['data'] = deepcopy(temp_tool_data) - - self.app.inform.emit('[success] %s' % _("Current Tool parameters were applied to all tools.")) - - self.ui_connect() - - -class FlatCAMGeometry(FlatCAMObj, Geometry): - """ - Geometric object not associated with a specific - format. - """ - optionChanged = QtCore.pyqtSignal(str) - ui_type = GeometryObjectUI - - def __init__(self, name): - self.decimals = self.app.decimals - - self.circle_steps = int(self.app.defaults["geometry_circle_steps"]) - - FlatCAMObj.__init__(self, name) - Geometry.__init__(self, geo_steps_per_circle=self.circle_steps) - - self.kind = "geometry" - - self.options.update({ - "plot": True, - "cutz": -0.002, - "vtipdia": 0.1, - "vtipangle": 30, - "travelz": 0.1, - "feedrate": 5.0, - "feedrate_z": 5.0, - "feedrate_rapid": 5.0, - "spindlespeed": 0, - "dwell": True, - "dwelltime": 1000, - "multidepth": False, - "depthperpass": 0.002, - "extracut": False, - "extracut_length": 0.1, - "endz": 2.0, - "endxy": '', - - "startz": None, - "toolchange": False, - "toolchangez": 1.0, - "toolchangexy": "0.0, 0.0", - "ppname_g": 'default', - "z_pdepth": -0.02, - "feedrate_probe": 3.0, - }) - - if "cnctooldia" not in self.options: - if type(self.app.defaults["geometry_cnctooldia"]) == float: - self.options["cnctooldia"] = self.app.defaults["geometry_cnctooldia"] - else: - try: - tools_string = self.app.defaults["geometry_cnctooldia"].split(",") - tools_diameters = [eval(a) for a in tools_string if a != ''] - self.options["cnctooldia"] = tools_diameters[0] if tools_diameters else 0.0 - except Exception as e: - log.debug("FlatCAMObj.FlatCAMGeometry.init() --> %s" % str(e)) - - self.options["startz"] = self.app.defaults["geometry_startz"] - - # this will hold the tool unique ID that is useful when having multiple tools with same diameter - self.tooluid = 0 - - ''' - self.tools = {} - This is a dictionary. Each dict key is associated with a tool used in geo_tools_table. The key is the - tool_id of the tools and the value is another dict that will hold the data under the following form: - {tooluid: { - 'tooldia': 1, - 'offset': 'Path', - 'offset_value': 0.0 - 'type': 'Rough', - 'tool_type': 'C1', - 'data': self.default_tool_data - 'solid_geometry': [] - } - } - ''' - self.tools = {} - - # this dict is to store those elements (tools) of self.tools that are selected in the self.geo_tools_table - # those elements are the ones used for generating GCode - self.sel_tools = {} - - self.offset_item_options = ["Path", "In", "Out", "Custom"] - self.type_item_options = [_("Iso"), _("Rough"), _("Finish")] - self.tool_type_item_options = ["C1", "C2", "C3", "C4", "B", "V"] - - # flag to store if the V-Shape tool is selected in self.ui.geo_tools_table - self.v_tool_type = None - - # flag to store if the Geometry is type 'multi-geometry' meaning that each tool has it's own geometry - # the default value is False - self.multigeo = False - - # flag to store if the geometry is part of a special group of geometries that can't be processed by the default - # engine of FlatCAM. Most likely are generated by some of tools and are special cases of geometries. - self.special_group = None - - self.old_pp_state = self.app.defaults["geometry_multidepth"] - self.old_toolchangeg_state = self.app.defaults["geometry_toolchange"] - self.units_found = self.app.defaults['units'] - - # this variable can be updated by the Object that generates the geometry - self.tool_type = 'C1' - - # save here the old value for the Cut Z before it is changed by selecting a V-shape type tool in the tool table - self.old_cutz = self.app.defaults["geometry_cutz"] - - self.fill_color = self.app.defaults['geometry_plot_line'] - self.outline_color = self.app.defaults['geometry_plot_line'] - self.alpha_level = 'FF' - - self.param_fields = {} - - # Attributes to be included in serialization - # Always append to it because it carries contents - # from predecessors. - self.ser_attrs += ['options', 'kind', 'tools', 'multigeo'] - - def build_ui(self): - self.ui_disconnect() - FlatCAMObj.build_ui(self) - - self.units = self.app.defaults['units'] - - tool_idx = 0 - - n = len(self.tools) - self.ui.geo_tools_table.setRowCount(n) - - for tooluid_key, tooluid_value in self.tools.items(): - tool_idx += 1 - row_no = tool_idx - 1 - - tool_id = QtWidgets.QTableWidgetItem('%d' % int(tool_idx)) - tool_id.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) - self.ui.geo_tools_table.setItem(row_no, 0, tool_id) # Tool name/id - - # Make sure that the tool diameter when in MM is with no more than 2 decimals. - # There are no tool bits in MM with more than 3 decimals diameter. - # For INCH the decimals should be no more than 3. There are no tools under 10mils. - - dia_item = QtWidgets.QTableWidgetItem('%.*f' % (self.decimals, float(tooluid_value['tooldia']))) - - dia_item.setFlags(QtCore.Qt.ItemIsEnabled) - - offset_item = FCComboBox() - for item in self.offset_item_options: - offset_item.addItem(item) - # offset_item.setStyleSheet('background-color: rgb(255,255,255)') - idx = offset_item.findText(tooluid_value['offset']) - offset_item.setCurrentIndex(idx) - - type_item = FCComboBox() - for item in self.type_item_options: - type_item.addItem(item) - # type_item.setStyleSheet('background-color: rgb(255,255,255)') - idx = type_item.findText(tooluid_value['type']) - type_item.setCurrentIndex(idx) - - tool_type_item = FCComboBox() - for item in self.tool_type_item_options: - tool_type_item.addItem(item) - # tool_type_item.setStyleSheet('background-color: rgb(255,255,255)') - idx = tool_type_item.findText(tooluid_value['tool_type']) - tool_type_item.setCurrentIndex(idx) - - tool_uid_item = QtWidgets.QTableWidgetItem(str(tooluid_key)) - - plot_item = FCCheckBox() - plot_item.setLayoutDirection(QtCore.Qt.RightToLeft) - if self.ui.plot_cb.isChecked(): - plot_item.setChecked(True) - - self.ui.geo_tools_table.setItem(row_no, 1, dia_item) # Diameter - self.ui.geo_tools_table.setCellWidget(row_no, 2, offset_item) - self.ui.geo_tools_table.setCellWidget(row_no, 3, type_item) - self.ui.geo_tools_table.setCellWidget(row_no, 4, tool_type_item) - - # ## REMEMBER: THIS COLUMN IS HIDDEN IN OBJECTUI.PY ### - self.ui.geo_tools_table.setItem(row_no, 5, tool_uid_item) # Tool unique ID - self.ui.geo_tools_table.setCellWidget(row_no, 6, plot_item) - - try: - self.ui.tool_offset_entry.set_value(tooluid_value['offset_value']) - except Exception as e: - log.debug("build_ui() --> Could not set the 'offset_value' key in self.tools. Error: %s" % str(e)) - - # make the diameter column editable - for row in range(tool_idx): - self.ui.geo_tools_table.item(row, 1).setFlags(QtCore.Qt.ItemIsSelectable | - QtCore.Qt.ItemIsEditable | - QtCore.Qt.ItemIsEnabled) - - # sort the tool diameter column - # self.ui.geo_tools_table.sortItems(1) - # all the tools are selected by default - # self.ui.geo_tools_table.selectColumn(0) - - self.ui.geo_tools_table.resizeColumnsToContents() - self.ui.geo_tools_table.resizeRowsToContents() - - vertical_header = self.ui.geo_tools_table.verticalHeader() - # vertical_header.setSectionResizeMode(QtWidgets.QHeaderView.ResizeToContents) - vertical_header.hide() - self.ui.geo_tools_table.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) - - horizontal_header = self.ui.geo_tools_table.horizontalHeader() - horizontal_header.setMinimumSectionSize(10) - horizontal_header.setDefaultSectionSize(70) - horizontal_header.setSectionResizeMode(0, QtWidgets.QHeaderView.Fixed) - horizontal_header.resizeSection(0, 20) - horizontal_header.setSectionResizeMode(1, QtWidgets.QHeaderView.Stretch) - # horizontal_header.setColumnWidth(2, QtWidgets.QHeaderView.ResizeToContents) - horizontal_header.setSectionResizeMode(3, QtWidgets.QHeaderView.ResizeToContents) - horizontal_header.setSectionResizeMode(4, QtWidgets.QHeaderView.Fixed) - horizontal_header.resizeSection(4, 40) - horizontal_header.setSectionResizeMode(6, QtWidgets.QHeaderView.Fixed) - horizontal_header.resizeSection(4, 17) - # horizontal_header.setStretchLastSection(True) - self.ui.geo_tools_table.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) - - self.ui.geo_tools_table.setColumnWidth(0, 20) - self.ui.geo_tools_table.setColumnWidth(4, 40) - self.ui.geo_tools_table.setColumnWidth(6, 17) - - # self.ui.geo_tools_table.setSortingEnabled(True) - - self.ui.geo_tools_table.setMinimumHeight(self.ui.geo_tools_table.getHeight()) - self.ui.geo_tools_table.setMaximumHeight(self.ui.geo_tools_table.getHeight()) - - # update UI for all rows - useful after units conversion but only if there is at least one row - row_cnt = self.ui.geo_tools_table.rowCount() - if row_cnt > 0: - for r in range(row_cnt): - self.update_ui(r) - - # select only the first tool / row - selected_row = 0 - try: - self.select_tools_table_row(selected_row, clearsel=True) - # update the Geometry UI - self.update_ui() - except Exception as e: - # when the tools table is empty there will be this error but once the table is populated it will go away - log.debug(str(e)) - - # disable the Plot column in Tool Table if the geometry is SingleGeo as it is not needed - # and can create some problems - if self.multigeo is False: - self.ui.geo_tools_table.setColumnHidden(6, True) - else: - self.ui.geo_tools_table.setColumnHidden(6, False) - - self.set_tool_offset_visibility(selected_row) - - # HACK: for whatever reasons the name in Selected tab is reverted to the original one after a successful rename - # done in the collection view but only for Geometry objects. Perhaps some references remains. Should be fixed. - self.ui.name_entry.set_value(self.options['name']) - self.ui_connect() - - self.ui.e_cut_entry.setDisabled(False) if self.ui.extracut_cb.get_value() else \ - self.ui.e_cut_entry.setDisabled(True) - - # set the text on tool_data_label after loading the object - sel_rows = [] - sel_items = self.ui.geo_tools_table.selectedItems() - for it in sel_items: - sel_rows.append(it.row()) - if len(sel_rows) > 1: - self.ui.tool_data_label.setText( - "%s: %s" % (_('Parameters for'), _("Multiple Tools")) - ) - - def set_ui(self, ui): - FlatCAMObj.set_ui(self, ui) - - log.debug("FlatCAMGeometry.set_ui()") - - assert isinstance(self.ui, GeometryObjectUI), \ - "Expected a GeometryObjectUI, got %s" % type(self.ui) - - self.units = self.app.defaults['units'].upper() - self.units_found = self.app.defaults['units'] - - # populate preprocessor names in the combobox - for name in list(self.app.preprocessors.keys()): - self.ui.pp_geometry_name_cb.addItem(name) - - self.form_fields.update({ - "plot": self.ui.plot_cb, - "cutz": self.ui.cutz_entry, - "vtipdia": self.ui.tipdia_entry, - "vtipangle": self.ui.tipangle_entry, - "travelz": self.ui.travelz_entry, - "feedrate": self.ui.cncfeedrate_entry, - "feedrate_z": self.ui.feedrate_z_entry, - "feedrate_rapid": self.ui.feedrate_rapid_entry, - "spindlespeed": self.ui.cncspindlespeed_entry, - "dwell": self.ui.dwell_cb, - "dwelltime": self.ui.dwelltime_entry, - "multidepth": self.ui.mpass_cb, - "ppname_g": self.ui.pp_geometry_name_cb, - "z_pdepth": self.ui.pdepth_entry, - "feedrate_probe": self.ui.feedrate_probe_entry, - "depthperpass": self.ui.maxdepth_entry, - "extracut": self.ui.extracut_cb, - "extracut_length": self.ui.e_cut_entry, - "toolchange": self.ui.toolchangeg_cb, - "toolchangez": self.ui.toolchangez_entry, - "endz": self.ui.endz_entry, - "endxy": self.ui.endxy_entry, - "cnctooldia": self.ui.addtool_entry - }) - - self.param_fields.update({ - "vtipdia": self.ui.tipdia_entry, - "vtipangle": self.ui.tipangle_entry, - "cutz": self.ui.cutz_entry, - "depthperpass": self.ui.maxdepth_entry, - "multidepth": self.ui.mpass_cb, - "travelz": self.ui.travelz_entry, - "feedrate": self.ui.cncfeedrate_entry, - "feedrate_z": self.ui.feedrate_z_entry, - "feedrate_rapid": self.ui.feedrate_rapid_entry, - "extracut": self.ui.extracut_cb, - "extracut_length": self.ui.e_cut_entry, - "spindlespeed": self.ui.cncspindlespeed_entry, - "dwelltime": self.ui.dwelltime_entry, - "dwell": self.ui.dwell_cb, - "pdepth": self.ui.pdepth_entry, - "pfeedrate": self.ui.feedrate_probe_entry, - }) - # Fill form fields only on object create - self.to_form() - - # update the changes in UI depending on the selected preprocessor in Preferences - # after this moment all the changes in the Posprocessor combo will be handled by the activated signal of the - # self.ui.pp_geometry_name_cb combobox - self.on_pp_changed() - - self.ui.tipdialabel.hide() - self.ui.tipdia_entry.hide() - self.ui.tipanglelabel.hide() - self.ui.tipangle_entry.hide() - self.ui.cutz_entry.setDisabled(False) - - # store here the default data for Geometry Data - self.default_data = {} - self.default_data.update({ - "name": None, - "plot": None, - "cutz": None, - "vtipdia": None, - "vtipangle": None, - "travelz": None, - "feedrate": None, - "feedrate_z": None, - "feedrate_rapid": None, - "dwell": None, - "dwelltime": None, - "multidepth": None, - "ppname_g": None, - "depthperpass": None, - "extracut": None, - "extracut_length": None, - "toolchange": None, - "toolchangez": None, - "endz": None, - "endxy": '', - "spindlespeed": 0, - "toolchangexy": None, - "startz": None - }) - - # fill in self.default_data values from self.options - for def_key in self.default_data: - for opt_key, opt_val in self.options.items(): - if def_key == opt_key: - self.default_data[def_key] = deepcopy(opt_val) - - if type(self.options["cnctooldia"]) == float: - tools_list = [self.options["cnctooldia"]] - else: - try: - temp_tools = self.options["cnctooldia"].split(",") - tools_list = [ - float(eval(dia)) for dia in temp_tools if dia != '' - ] - except Exception as e: - log.error("FlatCAMGeometry.set_ui() -> At least one tool diameter needed. " - "Verify in Edit -> Preferences -> Geometry General -> Tool dia. %s" % str(e)) - return - - self.tooluid += 1 - - if not self.tools: - for toold in tools_list: - new_data = deepcopy(self.default_data) - self.tools.update({ - self.tooluid: { - 'tooldia': float('%.*f' % (self.decimals, float(toold))), - 'offset': 'Path', - 'offset_value': 0.0, - 'type': _('Rough'), - 'tool_type': self.tool_type, - 'data': new_data, - 'solid_geometry': self.solid_geometry - } - }) - self.tooluid += 1 - else: - # if self.tools is not empty then it can safely be assumed that it comes from an opened project. - # Because of the serialization the self.tools list on project save, the dict keys (members of self.tools - # are each a dict) are turned into strings so we rebuild the self.tools elements so the keys are - # again float type; dict's don't like having keys changed when iterated through therefore the need for the - # following convoluted way of changing the keys from string to float type - temp_tools = {} - for tooluid_key in self.tools: - val = deepcopy(self.tools[tooluid_key]) - new_key = deepcopy(int(tooluid_key)) - temp_tools[new_key] = val - - self.tools.clear() - self.tools = deepcopy(temp_tools) - - self.ui.tool_offset_entry.hide() - self.ui.tool_offset_lbl.hide() - - # used to store the state of the mpass_cb if the selected preprocessor for geometry is hpgl - self.old_pp_state = self.default_data['multidepth'] - self.old_toolchangeg_state = self.default_data['toolchange'] - - if not isinstance(self.ui, GeometryObjectUI): - log.debug("Expected a GeometryObjectUI, got %s" % type(self.ui)) - return - - self.ui.geo_tools_table.setupContextMenu() - self.ui.geo_tools_table.addContextMenu( - _("Add from Tool DB"), self.on_tool_add_from_db_clicked, - icon=QtGui.QIcon(self.app.resource_location + "/plus16.png")) - self.ui.geo_tools_table.addContextMenu( - _("Copy"), self.on_tool_copy, - icon=QtGui.QIcon(self.app.resource_location + "/copy16.png")) - self.ui.geo_tools_table.addContextMenu( - _("Delete"), lambda: self.on_tool_delete(all_tools=None), - icon=QtGui.QIcon(self.app.resource_location + "/delete32.png")) - - # Show/Hide Advanced Options - if self.app.defaults["global_app_level"] == 'b': - self.ui.level.setText('%s' % _('Basic')) - - self.ui.geo_tools_table.setColumnHidden(2, True) - self.ui.geo_tools_table.setColumnHidden(3, True) - # self.ui.geo_tools_table.setColumnHidden(4, True) - self.ui.addtool_entry_lbl.hide() - self.ui.addtool_entry.hide() - self.ui.addtool_btn.hide() - self.ui.copytool_btn.hide() - self.ui.deltool_btn.hide() - # self.ui.endz_label.hide() - # self.ui.endz_entry.hide() - self.ui.fr_rapidlabel.hide() - self.ui.feedrate_rapid_entry.hide() - self.ui.extracut_cb.hide() - self.ui.e_cut_entry.hide() - self.ui.pdepth_label.hide() - self.ui.pdepth_entry.hide() - self.ui.feedrate_probe_label.hide() - self.ui.feedrate_probe_entry.hide() - else: - self.ui.level.setText('%s' % _('Advanced')) - - self.ui.e_cut_entry.setDisabled(False) if self.app.defaults['geometry_extracut'] else \ - self.ui.e_cut_entry.setDisabled(True) - self.ui.extracut_cb.toggled.connect(lambda state: self.ui.e_cut_entry.setDisabled(not state)) - - self.ui.plot_cb.stateChanged.connect(self.on_plot_cb_click) - self.ui.generate_cnc_button.clicked.connect(self.on_generatecnc_button_click) - self.ui.paint_tool_button.clicked.connect(lambda: self.app.paint_tool.run(toggle=False)) - self.ui.generate_ncc_button.clicked.connect(lambda: self.app.ncclear_tool.run(toggle=False)) - self.ui.pp_geometry_name_cb.activated.connect(self.on_pp_changed) - - self.ui.tipdia_entry.valueChanged.connect(self.update_cutz) - self.ui.tipangle_entry.valueChanged.connect(self.update_cutz) - - self.ui.addtool_from_db_btn.clicked.connect(self.on_tool_add_from_db_clicked) - self.ui.apply_param_to_all.clicked.connect(self.on_apply_param_to_all_clicked) - self.ui.cutz_entry.returnPressed.connect(self.on_cut_z_changed) - - def on_cut_z_changed(self): - self.old_cutz = self.ui.cutz_entry.get_value() - - def set_tool_offset_visibility(self, current_row): - if current_row is None: - return - try: - tool_offset = self.ui.geo_tools_table.cellWidget(current_row, 2) - if tool_offset is not None: - tool_offset_txt = tool_offset.currentText() - if tool_offset_txt == 'Custom': - self.ui.tool_offset_entry.show() - self.ui.tool_offset_lbl.show() - else: - self.ui.tool_offset_entry.hide() - self.ui.tool_offset_lbl.hide() - except Exception as e: - log.debug("set_tool_offset_visibility() --> " + str(e)) - return - - def on_offset_value_edited(self): - """ - This will save the offset_value into self.tools storage whenever the offset value is edited - :return: - """ - - for current_row in self.ui.geo_tools_table.selectedItems(): - # sometime the header get selected and it has row number -1 - # we don't want to do anything with the header :) - if current_row.row() < 0: - continue - tool_uid = int(self.ui.geo_tools_table.item(current_row.row(), 5).text()) - self.set_tool_offset_visibility(current_row.row()) - - for tooluid_key, tooluid_value in self.tools.items(): - if int(tooluid_key) == tool_uid: - try: - tooluid_value['offset_value'] = float(self.ui.tool_offset_entry.get_value()) - except ValueError: - # try to convert comma to decimal point. if it's still not working error message and return - try: - tooluid_value['offset_value'] = float( - self.ui.tool_offset_entry.get_value().replace(',', '.') - ) - except ValueError: - self.app.inform.emit('[ERROR_NOTCL] %s' % - _("Wrong value format entered, use a number.")) - return - - def ui_connect(self): - # on any change to the widgets that matter it will be called self.gui_form_to_storage which will save the - # changes in geometry UI - for i in self.param_fields: - current_widget = self.param_fields[i] - if isinstance(current_widget, FCCheckBox): - current_widget.stateChanged.connect(self.gui_form_to_storage) - elif isinstance(current_widget, FCComboBox): - current_widget.currentIndexChanged.connect(self.gui_form_to_storage) - elif isinstance(current_widget, FloatEntry) or isinstance(current_widget, LengthEntry) or \ - isinstance(current_widget, FCEntry) or isinstance(current_widget, IntEntry): - current_widget.editingFinished.connect(self.gui_form_to_storage) - elif isinstance(current_widget, FCSpinner) or isinstance(current_widget, FCDoubleSpinner): - current_widget.returnPressed.connect(self.gui_form_to_storage) - - for row in range(self.ui.geo_tools_table.rowCount()): - for col in [2, 3, 4]: - self.ui.geo_tools_table.cellWidget(row, col).currentIndexChanged.connect( - self.on_tooltable_cellwidget_change) - - # I use lambda's because the connected functions have parameters that could be used in certain scenarios - self.ui.addtool_btn.clicked.connect(lambda: self.on_tool_add()) - - self.ui.copytool_btn.clicked.connect(lambda: self.on_tool_copy()) - self.ui.deltool_btn.clicked.connect(lambda: self.on_tool_delete()) - - # self.ui.geo_tools_table.currentItemChanged.connect(self.on_row_selection_change) - self.ui.geo_tools_table.clicked.connect(self.on_row_selection_change) - self.ui.geo_tools_table.horizontalHeader().sectionClicked.connect(self.on_row_selection_change) - - self.ui.geo_tools_table.itemChanged.connect(self.on_tool_edit) - self.ui.tool_offset_entry.returnPressed.connect(self.on_offset_value_edited) - - for row in range(self.ui.geo_tools_table.rowCount()): - self.ui.geo_tools_table.cellWidget(row, 6).clicked.connect(self.on_plot_cb_click_table) - self.ui.plot_cb.stateChanged.connect(self.on_plot_cb_click) - - # common parameters update - self.ui.pp_geometry_name_cb.currentIndexChanged.connect(self.update_common_param_in_storage) - - def ui_disconnect(self): - - # on any change to the widgets that matter it will be called self.gui_form_to_storage which will save the - # changes in geometry UI - for i in self.param_fields: - # current_widget = self.ui.grid3.itemAt(i).widget() - current_widget = self.param_fields[i] - if isinstance(current_widget, FCCheckBox): - try: - current_widget.stateChanged.disconnect(self.gui_form_to_storage) - except (TypeError, AttributeError): - pass - elif isinstance(current_widget, FCComboBox): - try: - current_widget.currentIndexChanged.disconnect(self.gui_form_to_storage) - except (TypeError, AttributeError): - pass - elif isinstance(current_widget, LengthEntry) or isinstance(current_widget, IntEntry) or \ - isinstance(current_widget, FCEntry) or isinstance(current_widget, FloatEntry): - try: - current_widget.editingFinished.disconnect(self.gui_form_to_storage) - except (TypeError, AttributeError): - pass - elif isinstance(current_widget, FCSpinner) or isinstance(current_widget, FCDoubleSpinner): - try: - current_widget.returnPressed.disconnect(self.gui_form_to_storage) - except TypeError: - pass - - for row in range(self.ui.geo_tools_table.rowCount()): - for col in [2, 3, 4]: - try: - self.ui.geo_tools_table.cellWidget(row, col).currentIndexChanged.disconnect() - except (TypeError, AttributeError): - pass - - try: - self.ui.addtool_btn.clicked.disconnect() - except (TypeError, AttributeError): - pass - - try: - self.ui.copytool_btn.clicked.disconnect() - except (TypeError, AttributeError): - pass - - try: - self.ui.deltool_btn.clicked.disconnect() - except (TypeError, AttributeError): - pass - - try: - self.ui.geo_tools_table.clicked.disconnect() - except (TypeError, AttributeError): - pass - try: - self.ui.geo_tools_table.horizontalHeader().sectionClicked.disconnect() - except (TypeError, AttributeError): - pass - - try: - self.ui.geo_tools_table.itemChanged.disconnect() - except (TypeError, AttributeError): - pass - - try: - self.ui.tool_offset_entry.returnPressed.disconnect() - except (TypeError, AttributeError): - pass - - for row in range(self.ui.geo_tools_table.rowCount()): - try: - self.ui.geo_tools_table.cellWidget(row, 6).clicked.disconnect() - except (TypeError, AttributeError): - pass - - try: - self.ui.plot_cb.stateChanged.disconnect() - except (TypeError, AttributeError): - pass - - def on_row_selection_change(self): - self.update_ui() - - def update_ui(self, row=None): - self.ui_disconnect() - - if row is None: - sel_rows = [] - sel_items = self.ui.geo_tools_table.selectedItems() - for it in sel_items: - sel_rows.append(it.row()) - else: - sel_rows = row if type(row) == list else [row] - - if not sel_rows: - sel_rows = [0] - - for current_row in sel_rows: - self.set_tool_offset_visibility(current_row) - - # populate the form with the data from the tool associated with the row parameter - try: - item = self.ui.geo_tools_table.item(current_row, 5) - if type(item) is not None: - tooluid = int(item.text()) - else: - self.ui_connect() - return - except Exception as e: - log.debug("Tool missing. Add a tool in Geo Tool Table. %s" % str(e)) - self.ui_connect() - return - - # update the QLabel that shows for which Tool we have the parameters in the UI form - if len(sel_rows) == 1: - self.ui.tool_data_label.setText( - "%s: %s %d" % (_('Parameters for'), _("Tool"), tooluid) - ) - - # update the form with the V-Shape fields if V-Shape selected in the geo_tool_table - # also modify the Cut Z form entry to reflect the calculated Cut Z from values got from V-Shape Fields - try: - item = self.ui.geo_tools_table.cellWidget(current_row, 4) - if item is not None: - tool_type_txt = item.currentText() - self.ui_update_v_shape(tool_type_txt=tool_type_txt) - else: - self.ui_connect() - return - except Exception as e: - log.debug("Tool missing in ui_update_v_shape(). Add a tool in Geo Tool Table. %s" % str(e)) - return - - try: - # set the form with data from the newly selected tool - for tooluid_key, tooluid_value in list(self.tools.items()): - if int(tooluid_key) == tooluid: - for key, value in list(tooluid_value.items()): - if key == 'data': - form_value_storage = tooluid_value['data'] - self.update_form(form_value_storage) - if key == 'offset_value': - # update the offset value in the entry even if the entry is hidden - self.ui.tool_offset_entry.set_value(tooluid_value['offset_value']) - - if key == 'tool_type' and value == 'V': - self.update_cutz() - except Exception as e: - log.debug("FlatCAMGeometry.update_ui() -> %s " % str(e)) - - else: - self.ui.tool_data_label.setText( - "%s: %s" % (_('Parameters for'), _("Multiple Tools")) - ) - - self.ui_connect() - - def on_tool_add(self, dia=None): - self.ui_disconnect() - - self.units = self.app.defaults['units'].upper() - - if dia is not None: - tooldia = dia - else: - tooldia = float(self.ui.addtool_entry.get_value()) - - # construct a list of all 'tooluid' in the self.tools - # tool_uid_list = [] - # for tooluid_key in self.tools: - # tool_uid_list.append(int(tooluid_key)) - tool_uid_list = [int(tooluid_key) for tooluid_key in self.tools] - - # find maximum from the temp_uid, add 1 and this is the new 'tooluid' - max_uid = max(tool_uid_list) if tool_uid_list else 0 - self.tooluid = max_uid + 1 - - tooldia = float('%.*f' % (self.decimals, tooldia)) - - # here we actually add the new tool; if there is no tool in the tool table we add a tool with default data - # otherwise we add a tool with data copied from last tool - if self.tools: - last_data = self.tools[max_uid]['data'] - last_offset = self.tools[max_uid]['offset'] - last_offset_value = self.tools[max_uid]['offset_value'] - last_type = self.tools[max_uid]['type'] - last_tool_type = self.tools[max_uid]['tool_type'] - last_solid_geometry = self.tools[max_uid]['solid_geometry'] - - # if previous geometry was empty (it may happen for the first tool added) - # then copy the object.solid_geometry - if not last_solid_geometry: - last_solid_geometry = self.solid_geometry - - self.tools.update({ - self.tooluid: { - 'tooldia': tooldia, - 'offset': last_offset, - 'offset_value': last_offset_value, - 'type': last_type, - 'tool_type': last_tool_type, - 'data': deepcopy(last_data), - 'solid_geometry': deepcopy(last_solid_geometry) - } - }) - else: - self.tools.update({ - self.tooluid: { - 'tooldia': tooldia, - 'offset': 'Path', - 'offset_value': 0.0, - 'type': _('Rough'), - 'tool_type': 'C1', - 'data': deepcopy(self.default_data), - 'solid_geometry': self.solid_geometry - } - }) - - self.tools[self.tooluid]['data']['name'] = self.options['name'] - - self.ui.tool_offset_entry.hide() - self.ui.tool_offset_lbl.hide() - - # we do this HACK to make sure the tools attribute to be serialized is updated in the self.ser_attrs list - try: - self.ser_attrs.remove('tools') - except TypeError: - pass - self.ser_attrs.append('tools') - - self.app.inform.emit('[success] %s' % _("Tool added in Tool Table.")) - self.ui_connect() - self.build_ui() - - # if there is no tool left in the Tools Table, enable the parameters GUI - if self.ui.geo_tools_table.rowCount() != 0: - self.ui.geo_param_frame.setDisabled(False) - - def on_tool_add_from_db_clicked(self): - """ - Called when the user wants to add a new tool from Tools Database. It will create the Tools Database object - and display the Tools Database tab in the form needed for the Tool adding - :return: None - """ - - # if the Tools Database is already opened focus on it - for idx in range(self.app.ui.plot_tab_area.count()): - if self.app.ui.plot_tab_area.tabText(idx) == _("Tools Database"): - self.app.ui.plot_tab_area.setCurrentWidget(self.app.tools_db_tab) - break - self.app.on_tools_database() - self.app.tools_db_tab.ok_to_add = True - self.app.tools_db_tab.buttons_frame.hide() - self.app.tools_db_tab.add_tool_from_db.show() - self.app.tools_db_tab.cancel_tool_from_db.show() - - def on_tool_from_db_inserted(self, tool): - """ - Called from the Tools DB object through a App method when adding a tool from Tools Database - :param tool: a dict with the tool data - :return: None - """ - - self.ui_disconnect() - self.units = self.app.defaults['units'].upper() - - tooldia = float(tool['tooldia']) - - # construct a list of all 'tooluid' in the self.tools - tool_uid_list = [] - for tooluid_key in self.tools: - tool_uid_item = int(tooluid_key) - tool_uid_list.append(tool_uid_item) - - # find maximum from the temp_uid, add 1 and this is the new 'tooluid' - if not tool_uid_list: - max_uid = 0 - else: - max_uid = max(tool_uid_list) - self.tooluid = max_uid + 1 - - tooldia = float('%.*f' % (self.decimals, tooldia)) - - self.tools.update({ - self.tooluid: { - 'tooldia': tooldia, - 'offset': tool['offset'], - 'offset_value': float(tool['offset_value']), - 'type': tool['type'], - 'tool_type': tool['tool_type'], - 'data': deepcopy(tool['data']), - 'solid_geometry': self.solid_geometry - } - }) - - self.tools[self.tooluid]['data']['name'] = self.options['name'] - - self.ui.tool_offset_entry.hide() - self.ui.tool_offset_lbl.hide() - - # we do this HACK to make sure the tools attribute to be serialized is updated in the self.ser_attrs list - try: - self.ser_attrs.remove('tools') - except TypeError: - pass - self.ser_attrs.append('tools') - - self.ui_connect() - self.build_ui() - - # if there is no tool left in the Tools Table, enable the parameters GUI - if self.ui.geo_tools_table.rowCount() != 0: - self.ui.geo_param_frame.setDisabled(False) - - def on_tool_copy(self, all_tools=None): - self.ui_disconnect() - - # find the tool_uid maximum value in the self.tools - uid_list = [] - for key in self.tools: - uid_list.append(int(key)) - try: - max_uid = max(uid_list, key=int) - except ValueError: - max_uid = 0 - - if all_tools is None: - if self.ui.geo_tools_table.selectedItems(): - for current_row in self.ui.geo_tools_table.selectedItems(): - # sometime the header get selected and it has row number -1 - # we don't want to do anything with the header :) - if current_row.row() < 0: - continue - try: - tooluid_copy = int(self.ui.geo_tools_table.item(current_row.row(), 5).text()) - self.set_tool_offset_visibility(current_row.row()) - max_uid += 1 - self.tools[int(max_uid)] = deepcopy(self.tools[tooluid_copy]) - except AttributeError: - self.app.inform.emit('[WARNING_NOTCL] %s' % _("Failed. Select a tool to copy.")) - self.ui_connect() - self.build_ui() - return - except Exception as e: - log.debug("on_tool_copy() --> " + str(e)) - # deselect the table - # self.ui.geo_tools_table.clearSelection() - else: - self.app.inform.emit('[WARNING_NOTCL] %s' % _("Failed. Select a tool to copy.")) - self.ui_connect() - self.build_ui() - return - else: - # we copy all tools in geo_tools_table - try: - temp_tools = deepcopy(self.tools) - max_uid += 1 - for tooluid in temp_tools: - self.tools[int(max_uid)] = deepcopy(temp_tools[tooluid]) - temp_tools.clear() - except Exception as e: - log.debug("on_tool_copy() --> " + str(e)) - - # if there are no more tools in geo tools table then hide the tool offset - if not self.tools: - self.ui.tool_offset_entry.hide() - self.ui.tool_offset_lbl.hide() - - # we do this HACK to make sure the tools attribute to be serialized is updated in the self.ser_attrs list - try: - self.ser_attrs.remove('tools') - except ValueError: - pass - self.ser_attrs.append('tools') - - self.ui_connect() - self.build_ui() - self.app.inform.emit('[success] %s' % _("Tool was copied in Tool Table.")) - - def on_tool_edit(self, current_item): - self.ui_disconnect() - - current_row = current_item.row() - try: - d = float(self.ui.geo_tools_table.item(current_row, 1).text()) - except ValueError: - # try to convert comma to decimal point. if it's still not working error message and return - try: - d = float(self.ui.geo_tools_table.item(current_row, 1).text().replace(',', '.')) - except ValueError: - self.app.inform.emit('[ERROR_NOTCL] %s' % _("Wrong value format entered, use a number.")) - return - - tool_dia = float('%.*f' % (self.decimals, d)) - tooluid = int(self.ui.geo_tools_table.item(current_row, 5).text()) - - self.tools[tooluid]['tooldia'] = tool_dia - - try: - self.ser_attrs.remove('tools') - self.ser_attrs.append('tools') - except (TypeError, ValueError): - pass - - self.app.inform.emit('[success] %s' % _("Tool was edited in Tool Table.")) - self.ui_connect() - self.build_ui() - - def on_tool_delete(self, all_tools=None): - self.ui_disconnect() - - if all_tools is None: - if self.ui.geo_tools_table.selectedItems(): - for current_row in self.ui.geo_tools_table.selectedItems(): - # sometime the header get selected and it has row number -1 - # we don't want to do anything with the header :) - if current_row.row() < 0: - continue - try: - tooluid_del = int(self.ui.geo_tools_table.item(current_row.row(), 5).text()) - self.set_tool_offset_visibility(current_row.row()) - - temp_tools = deepcopy(self.tools) - for tooluid_key in self.tools: - if int(tooluid_key) == tooluid_del: - # if the self.tools has only one tool and we delete it then we move the solid_geometry - # as a property of the object otherwise there will be nothing to hold it - if len(self.tools) == 1: - self.solid_geometry = deepcopy(self.tools[tooluid_key]['solid_geometry']) - temp_tools.pop(tooluid_del, None) - self.tools = deepcopy(temp_tools) - temp_tools.clear() - except AttributeError: - self.app.inform.emit('[WARNING_NOTCL] %s' % _("Failed. Select a tool to delete.")) - self.ui_connect() - self.build_ui() - return - except Exception as e: - log.debug("on_tool_delete() --> " + str(e)) - # deselect the table - # self.ui.geo_tools_table.clearSelection() - else: - self.app.inform.emit('[WARNING_NOTCL] %s' % _("Failed. Select a tool to delete.")) - self.ui_connect() - self.build_ui() - return - else: - # we delete all tools in geo_tools_table - self.tools.clear() - - self.app.plot_all() - - # if there are no more tools in geo tools table then hide the tool offset - if not self.tools: - self.ui.tool_offset_entry.hide() - self.ui.tool_offset_lbl.hide() - - # we do this HACK to make sure the tools attribute to be serialized is updated in the self.ser_attrs list - try: - self.ser_attrs.remove('tools') - except TypeError: - pass - self.ser_attrs.append('tools') - - self.ui_connect() - self.build_ui() - self.app.inform.emit('[success] %s' % _("Tool was deleted in Tool Table.")) - - obj_active = self.app.collection.get_active() - # if the object was MultiGeo and now it has no tool at all (therefore no geometry) - # we make it back SingleGeo - if self.ui.geo_tools_table.rowCount() <= 0: - obj_active.multigeo = False - obj_active.options['xmin'] = 0 - obj_active.options['ymin'] = 0 - obj_active.options['xmax'] = 0 - obj_active.options['ymax'] = 0 - - if obj_active.multigeo is True: - try: - xmin, ymin, xmax, ymax = obj_active.bounds() - obj_active.options['xmin'] = xmin - obj_active.options['ymin'] = ymin - obj_active.options['xmax'] = xmax - obj_active.options['ymax'] = ymax - except Exception: - obj_active.options['xmin'] = 0 - obj_active.options['ymin'] = 0 - obj_active.options['xmax'] = 0 - obj_active.options['ymax'] = 0 - - # if there is no tool left in the Tools Table, disable the parameters GUI - if self.ui.geo_tools_table.rowCount() == 0: - self.ui.geo_param_frame.setDisabled(True) - - def ui_update_v_shape(self, tool_type_txt): - if tool_type_txt == 'V': - self.ui.tipdialabel.show() - self.ui.tipdia_entry.show() - self.ui.tipanglelabel.show() - self.ui.tipangle_entry.show() - self.ui.cutz_entry.setDisabled(True) - - self.update_cutz() - else: - self.ui.tipdialabel.hide() - self.ui.tipdia_entry.hide() - self.ui.tipanglelabel.hide() - self.ui.tipangle_entry.hide() - self.ui.cutz_entry.setDisabled(False) - - def update_cutz(self): - vdia = float(self.ui.tipdia_entry.get_value()) - half_vangle = float(self.ui.tipangle_entry.get_value()) / 2 - - row = self.ui.geo_tools_table.currentRow() - tool_uid_item = self.ui.geo_tools_table.item(row, 5) - if tool_uid_item is None: - return - tool_uid = int(tool_uid_item.text()) - - tool_dia_item = self.ui.geo_tools_table.item(row, 1) - if tool_dia_item is None: - return - tooldia = float(tool_dia_item.text()) - - try: - new_cutz = (tooldia - vdia) / (2 * math.tan(math.radians(half_vangle))) - except ZeroDivisionError: - new_cutz = self.old_cutz - - new_cutz = float('%.*f' % (self.decimals, new_cutz)) * -1.0 # this value has to be negative - - self.ui.cutz_entry.set_value(new_cutz) - - # store the new CutZ value into storage (self.tools) - for tooluid_key, tooluid_value in self.tools.items(): - if int(tooluid_key) == tool_uid: - tooluid_value['data']['cutz'] = new_cutz - - def on_tooltable_cellwidget_change(self): - cw = self.sender() - cw_index = self.ui.geo_tools_table.indexAt(cw.pos()) - cw_row = cw_index.row() - cw_col = cw_index.column() - current_uid = int(self.ui.geo_tools_table.item(cw_row, 5).text()) - - # store the text of the cellWidget that changed it's index in the self.tools - for tooluid_key, tooluid_value in self.tools.items(): - if int(tooluid_key) == current_uid: - cb_txt = cw.currentText() - if cw_col == 2: - tooluid_value['offset'] = cb_txt - if cb_txt == 'Custom': - self.ui.tool_offset_entry.show() - self.ui.tool_offset_lbl.show() - else: - self.ui.tool_offset_entry.hide() - self.ui.tool_offset_lbl.hide() - # reset the offset_value in storage self.tools - tooluid_value['offset_value'] = 0.0 - elif cw_col == 3: - # force toolpath type as 'Iso' if the tool type is V-Shape - if self.ui.geo_tools_table.cellWidget(cw_row, 4).currentText() == 'V': - tooluid_value['type'] = _('Iso') - idx = self.ui.geo_tools_table.cellWidget(cw_row, 3).findText(_('Iso')) - self.ui.geo_tools_table.cellWidget(cw_row, 3).setCurrentIndex(idx) - else: - tooluid_value['type'] = cb_txt - elif cw_col == 4: - tooluid_value['tool_type'] = cb_txt - - # if the tool_type selected is V-Shape then autoselect the toolpath type as Iso - if cb_txt == 'V': - idx = self.ui.geo_tools_table.cellWidget(cw_row, 3).findText(_('Iso')) - self.ui.geo_tools_table.cellWidget(cw_row, 3).setCurrentIndex(idx) - else: - self.ui.cutz_entry.set_value(self.old_cutz) - - self.ui_update_v_shape(tool_type_txt=self.ui.geo_tools_table.cellWidget(cw_row, 4).currentText()) - - def update_form(self, dict_storage): - for form_key in self.form_fields: - for storage_key in dict_storage: - if form_key == storage_key: - try: - self.form_fields[form_key].set_value(dict_storage[form_key]) - except Exception as e: - log.debug(str(e)) - - # this is done here because those buttons control through OptionalInputSelection if some entry's are Enabled - # or not. But due of using the ui_disconnect() status is no longer updated and I had to do it here - self.ui.ois_dwell_geo.on_cb_change() - self.ui.ois_mpass_geo.on_cb_change() - self.ui.ois_tcz_geo.on_cb_change() - - def on_apply_param_to_all_clicked(self): - if self.ui.geo_tools_table.rowCount() == 0: - # there is no tool in tool table so we can't save the GUI elements values to storage - log.debug("FlatCAMGeometry.gui_form_to_storage() --> no tool in Tools Table, aborting.") - return - - self.ui_disconnect() - - row = self.ui.geo_tools_table.currentRow() - if row < 0: - row = 0 - - # store all the data associated with the row parameter to the self.tools storage - tooldia_item = float(self.ui.geo_tools_table.item(row, 1).text()) - offset_item = self.ui.geo_tools_table.cellWidget(row, 2).currentText() - type_item = self.ui.geo_tools_table.cellWidget(row, 3).currentText() - tool_type_item = self.ui.geo_tools_table.cellWidget(row, 4).currentText() - - offset_value_item = float(self.ui.tool_offset_entry.get_value()) - - # this new dict will hold the actual useful data, another dict that is the value of key 'data' - temp_tools = {} - temp_dia = {} - temp_data = {} - - for tooluid_key, tooluid_value in self.tools.items(): - for key, value in tooluid_value.items(): - if key == 'tooldia': - temp_dia[key] = tooldia_item - # update the 'offset', 'type' and 'tool_type' sections - if key == 'offset': - temp_dia[key] = offset_item - if key == 'type': - temp_dia[key] = type_item - if key == 'tool_type': - temp_dia[key] = tool_type_item - if key == 'offset_value': - temp_dia[key] = offset_value_item - - if key == 'data': - # update the 'data' section - for data_key in tooluid_value[key].keys(): - for form_key, form_value in self.form_fields.items(): - if form_key == data_key: - temp_data[data_key] = form_value.get_value() - # make sure we make a copy of the keys not in the form (we may use 'data' keys that are - # updated from self.app.defaults - if data_key not in self.form_fields: - temp_data[data_key] = value[data_key] - temp_dia[key] = deepcopy(temp_data) - temp_data.clear() - - if key == 'solid_geometry': - temp_dia[key] = deepcopy(self.tools[tooluid_key]['solid_geometry']) - - temp_tools[tooluid_key] = deepcopy(temp_dia) - - self.tools.clear() - self.tools = deepcopy(temp_tools) - temp_tools.clear() - - self.ui_connect() - - def gui_form_to_storage(self): - if self.ui.geo_tools_table.rowCount() == 0: - # there is no tool in tool table so we can't save the GUI elements values to storage - log.debug("FlatCAMGeometry.gui_form_to_storage() --> no tool in Tools Table, aborting.") - return - - self.ui_disconnect() - widget_changed = self.sender() - try: - widget_idx = self.ui.grid3.indexOf(widget_changed) - except Exception: - return - - # those are the indexes for the V-Tip Dia and V-Tip Angle, if edited calculate the new Cut Z - if widget_idx == 1 or widget_idx == 3: - self.update_cutz() - - # the original connect() function of the OptionalInputSelection is no longer working because of the - # ui_diconnect() so I use this 'hack' - if isinstance(widget_changed, FCCheckBox): - if widget_changed.text() == 'Multi-Depth:': - self.ui.ois_mpass_geo.on_cb_change() - - if widget_changed.text() == 'Tool change': - self.ui.ois_tcz_geo.on_cb_change() - - if widget_changed.text() == 'Dwell:': - self.ui.ois_dwell_geo.on_cb_change() - - row = self.ui.geo_tools_table.currentRow() - if row < 0: - row = 0 - - # store all the data associated with the row parameter to the self.tools storage - tooldia_item = float(self.ui.geo_tools_table.item(row, 1).text()) - offset_item = self.ui.geo_tools_table.cellWidget(row, 2).currentText() - type_item = self.ui.geo_tools_table.cellWidget(row, 3).currentText() - tool_type_item = self.ui.geo_tools_table.cellWidget(row, 4).currentText() - tooluid_item = int(self.ui.geo_tools_table.item(row, 5).text()) - - offset_value_item = float(self.ui.tool_offset_entry.get_value()) - - # this new dict will hold the actual useful data, another dict that is the value of key 'data' - temp_tools = {} - temp_dia = {} - temp_data = {} - - for tooluid_key, tooluid_value in self.tools.items(): - if int(tooluid_key) == tooluid_item: - for key, value in tooluid_value.items(): - if key == 'tooldia': - temp_dia[key] = tooldia_item - # update the 'offset', 'type' and 'tool_type' sections - if key == 'offset': - temp_dia[key] = offset_item - if key == 'type': - temp_dia[key] = type_item - if key == 'tool_type': - temp_dia[key] = tool_type_item - if key == 'offset_value': - temp_dia[key] = offset_value_item - - if key == 'data': - # update the 'data' section - for data_key in tooluid_value[key].keys(): - for form_key, form_value in self.form_fields.items(): - if form_key == data_key: - temp_data[data_key] = form_value.get_value() - # make sure we make a copy of the keys not in the form (we may use 'data' keys that are - # updated from self.app.defaults - if data_key not in self.form_fields: - temp_data[data_key] = value[data_key] - temp_dia[key] = deepcopy(temp_data) - temp_data.clear() - - if key == 'solid_geometry': - temp_dia[key] = deepcopy(self.tools[tooluid_key]['solid_geometry']) - - temp_tools[tooluid_key] = deepcopy(temp_dia) - else: - temp_tools[tooluid_key] = deepcopy(tooluid_value) - - self.tools.clear() - self.tools = deepcopy(temp_tools) - temp_tools.clear() - self.ui_connect() - - def update_common_param_in_storage(self): - for tooluid_value in self.tools.values(): - tooluid_value['data']['ppname_g'] = self.ui.pp_geometry_name_cb.get_value() - - def select_tools_table_row(self, row, clearsel=None): - if clearsel: - self.ui.geo_tools_table.clearSelection() - - if self.ui.geo_tools_table.rowCount() > 0: - # self.ui.geo_tools_table.item(row, 0).setSelected(True) - self.ui.geo_tools_table.setCurrentItem(self.ui.geo_tools_table.item(row, 0)) - - def export_dxf(self): - dwg = None - try: - dwg = ezdxf.new('R2010') - msp = dwg.modelspace() - - def g2dxf(dxf_space, geo_obj): - if isinstance(geo_obj, MultiPolygon): - for poly in geo_obj: - ext_points = list(poly.exterior.coords) - dxf_space.add_lwpolyline(ext_points) - for interior in poly.interiors: - dxf_space.add_lwpolyline(list(interior.coords)) - if isinstance(geo_obj, Polygon): - ext_points = list(geo_obj.exterior.coords) - dxf_space.add_lwpolyline(ext_points) - for interior in geo_obj.interiors: - dxf_space.add_lwpolyline(list(interior.coords)) - if isinstance(geo_obj, MultiLineString): - for line in geo_obj: - dxf_space.add_lwpolyline(list(line.coords)) - if isinstance(geo_obj, LineString) or isinstance(geo_obj, LinearRing): - dxf_space.add_lwpolyline(list(geo_obj.coords)) - - multigeo_solid_geometry = [] - if self.multigeo: - for tool in self.tools: - multigeo_solid_geometry += self.tools[tool]['solid_geometry'] - else: - multigeo_solid_geometry = self.solid_geometry - - for geo in multigeo_solid_geometry: - if type(geo) == list: - for g in geo: - g2dxf(msp, g) - else: - g2dxf(msp, geo) - - # points = FlatCAMGeometry.get_pts(geo) - # msp.add_lwpolyline(points) - except Exception as e: - log.debug(str(e)) - - return dwg - - def get_selected_tools_table_items(self): - """ - Returns a list of lists, each list in the list is made out of row elements - - :return: List of table_tools items. - :rtype: list - """ - table_tools_items = [] - if self.multigeo: - for x in self.ui.geo_tools_table.selectedItems(): - elem = [] - txt = '' - - for column in range(0, self.ui.geo_tools_table.columnCount()): - try: - txt = self.ui.geo_tools_table.item(x.row(), column).text() - except AttributeError: - try: - txt = self.ui.geo_tools_table.cellWidget(x.row(), column).currentText() - except AttributeError: - pass - elem.append(txt) - table_tools_items.append(deepcopy(elem)) - # table_tools_items.append([self.ui.geo_tools_table.item(x.row(), column).text() - # for column in range(0, self.ui.geo_tools_table.columnCount())]) - else: - for x in self.ui.geo_tools_table.selectedItems(): - r = [] - txt = '' - - # the last 2 columns for single-geo geometry are irrelevant and create problems reading - # so we don't read them - for column in range(0, self.ui.geo_tools_table.columnCount() - 2): - # the columns have items that have text but also have items that are widgets - # for which the text they hold has to be read differently - try: - txt = self.ui.geo_tools_table.item(x.row(), column).text() - except AttributeError: - try: - txt = self.ui.geo_tools_table.cellWidget(x.row(), column).currentText() - except AttributeError: - pass - r.append(txt) - table_tools_items.append(r) - - for item in table_tools_items: - item[0] = str(item[0]) - return table_tools_items - - def on_pp_changed(self): - current_pp = self.ui.pp_geometry_name_cb.get_value() - if current_pp == 'hpgl': - self.old_pp_state = self.ui.mpass_cb.get_value() - self.old_toolchangeg_state = self.ui.toolchangeg_cb.get_value() - - self.ui.mpass_cb.set_value(False) - self.ui.mpass_cb.setDisabled(True) - - self.ui.toolchangeg_cb.set_value(True) - self.ui.toolchangeg_cb.setDisabled(True) - else: - self.ui.mpass_cb.set_value(self.old_pp_state) - self.ui.mpass_cb.setDisabled(False) - - self.ui.toolchangeg_cb.set_value(self.old_toolchangeg_state) - self.ui.toolchangeg_cb.setDisabled(False) - - if "toolchange_probe" in current_pp.lower(): - self.ui.pdepth_entry.setVisible(True) - self.ui.pdepth_label.show() - - self.ui.feedrate_probe_entry.setVisible(True) - self.ui.feedrate_probe_label.show() - else: - self.ui.pdepth_entry.setVisible(False) - self.ui.pdepth_label.hide() - - self.ui.feedrate_probe_entry.setVisible(False) - self.ui.feedrate_probe_label.hide() - - if 'marlin' in current_pp.lower() or 'custom' in current_pp.lower(): - self.ui.fr_rapidlabel.show() - self.ui.feedrate_rapid_entry.show() - else: - self.ui.fr_rapidlabel.hide() - self.ui.feedrate_rapid_entry.hide() - - if 'laser' in current_pp.lower(): - self.ui.cutzlabel.hide() - self.ui.cutz_entry.hide() - try: - self.ui.mpass_cb.hide() - self.ui.maxdepth_entry.hide() - except AttributeError: - pass - - if 'marlin' in current_pp.lower(): - self.ui.travelzlabel.setText('%s:' % _("Focus Z")) - self.ui.endz_label.show() - self.ui.endz_entry.show() - else: - self.ui.travelzlabel.hide() - self.ui.travelz_entry.hide() - - self.ui.endz_label.hide() - self.ui.endz_entry.hide() - - try: - self.ui.frzlabel.hide() - self.ui.feedrate_z_entry.hide() - except AttributeError: - pass - - self.ui.dwell_cb.hide() - self.ui.dwelltime_entry.hide() - - self.ui.spindle_label.setText('%s:' % _("Laser Power")) - - try: - self.ui.tool_offset_label.hide() - self.ui.offset_entry.hide() - except AttributeError: - pass - else: - self.ui.cutzlabel.show() - self.ui.cutz_entry.show() - try: - self.ui.mpass_cb.show() - self.ui.maxdepth_entry.show() - except AttributeError: - pass - - self.ui.travelzlabel.setText('%s:' % _('Travel Z')) - - self.ui.travelzlabel.show() - self.ui.travelz_entry.show() - - self.ui.endz_label.show() - self.ui.endz_entry.show() - - try: - self.ui.frzlabel.show() - self.ui.feedrate_z_entry.show() - except AttributeError: - pass - self.ui.dwell_cb.show() - self.ui.dwelltime_entry.show() - - self.ui.spindle_label.setText('%s:' % _('Spindle speed')) - - try: - self.ui.tool_offset_lbl.show() - self.ui.offset_entry.show() - except AttributeError: - pass - - def on_generatecnc_button_click(self, *args): - log.debug("Generating CNCJob from Geometry ...") - self.app.report_usage("geometry_on_generatecnc_button") - - # this reads the values in the UI form to the self.options dictionary - self.read_form() - - self.sel_tools = {} - - try: - if self.special_group: - self.app.inform.emit( - '[WARNING_NOTCL] %s %s %s.' % - (_("This Geometry can't be processed because it is"), str(self.special_group), _("geometry")) - ) - return - except AttributeError: - pass - - # test to see if we have tools available in the tool table - if self.ui.geo_tools_table.selectedItems(): - for x in self.ui.geo_tools_table.selectedItems(): - # try: - # tooldia = float(self.ui.geo_tools_table.item(x.row(), 1).text()) - # except ValueError: - # # try to convert comma to decimal point. if it's still not working error message and return - # try: - # tooldia = float(self.ui.geo_tools_table.item(x.row(), 1).text().replace(',', '.')) - # except ValueError: - # self.app.inform.emit('[ERROR_NOTCL] %s' % - # _("Wrong value format entered, use a number.")) - # return - tooluid = int(self.ui.geo_tools_table.item(x.row(), 5).text()) - - for tooluid_key, tooluid_value in self.tools.items(): - if int(tooluid_key) == tooluid: - self.sel_tools.update({ - tooluid: deepcopy(tooluid_value) - }) - self.mtool_gen_cncjob() - self.ui.geo_tools_table.clearSelection() - - elif self.ui.geo_tools_table.rowCount() == 1: - tooluid = int(self.ui.geo_tools_table.item(0, 5).text()) - - for tooluid_key, tooluid_value in self.tools.items(): - if int(tooluid_key) == tooluid: - self.sel_tools.update({ - tooluid: deepcopy(tooluid_value) - }) - self.mtool_gen_cncjob() - self.ui.geo_tools_table.clearSelection() - - else: - self.app.inform.emit('[ERROR_NOTCL] %s' % _("Failed. No tool selected in the tool table ...")) - - def mtool_gen_cncjob(self, outname=None, tools_dict=None, tools_in_use=None, segx=None, segy=None, - plot=True, use_thread=True): - """ - Creates a multi-tool CNCJob out of this Geometry object. - The actual work is done by the target FlatCAMCNCjob object's - `generate_from_geometry_2()` method. - - :param tools_dict: a dictionary that holds the whole data needed to create the Gcode - (including the solid_geometry) - - :param tools_in_use: the tools that are used, needed by some preprocessors - :type list of lists, each list in the list is made out of row elements of tools table from GUI - - :param outname: - :param tools_dict: - :param tools_in_use: - :param segx: number of segments on the X axis, for auto-levelling - :param segy: number of segments on the Y axis, for auto-levelling - :param plot: if True the generated object will be plotted; if False will not be plotted - :param use_thread: if True use threading - :return: None - """ - - # use the name of the first tool selected in self.geo_tools_table which has the diameter passed as tool_dia - outname = "%s_%s" % (self.options["name"], 'cnc') if outname is None else outname - - tools_dict = self.sel_tools if tools_dict is None else tools_dict - tools_in_use = tools_in_use if tools_in_use is not None else self.get_selected_tools_table_items() - segx = segx if segx is not None else float(self.app.defaults['geometry_segx']) - segy = segy if segy is not None else float(self.app.defaults['geometry_segy']) - - try: - xmin = self.options['xmin'] - ymin = self.options['ymin'] - xmax = self.options['xmax'] - ymax = self.options['ymax'] - except Exception as e: - log.debug("FlatCAMObj.FlatCAMGeometry.mtool_gen_cncjob() --> %s\n" % str(e)) - - msg = '[ERROR] %s' % _("An internal error has occurred. See shell.\n") - msg += '%s %s' % ('FlatCAMObj.FlatCAMGeometry.mtool_gen_cncjob() -->', str(e)) - msg += traceback.format_exc() - self.app.inform.emit(msg) - return - - # Object initialization function for app.new_object() - # RUNNING ON SEPARATE THREAD! - def job_init_single_geometry(job_obj, app_obj): - log.debug("Creating a CNCJob out of a single-geometry") - assert isinstance(job_obj, FlatCAMCNCjob), \ - "Initializer expected a FlatCAMCNCjob, got %s" % type(job_obj) - - job_obj.options['xmin'] = xmin - job_obj.options['ymin'] = ymin - job_obj.options['xmax'] = xmax - job_obj.options['ymax'] = ymax - - # count the tools - tool_cnt = 0 - - dia_cnc_dict = {} - - # this turn on the FlatCAMCNCJob plot for multiple tools - job_obj.multitool = True - job_obj.multigeo = False - job_obj.cnc_tools.clear() - - job_obj.options['Tools_in_use'] = tools_in_use - job_obj.segx = segx if segx else float(self.app.defaults["geometry_segx"]) - job_obj.segy = segy if segy else float(self.app.defaults["geometry_segy"]) - - job_obj.z_pdepth = float(self.app.defaults["geometry_z_pdepth"]) - job_obj.feedrate_probe = float(self.app.defaults["geometry_feedrate_probe"]) - - for tooluid_key in list(tools_dict.keys()): - tool_cnt += 1 - - dia_cnc_dict = deepcopy(tools_dict[tooluid_key]) - tooldia_val = float('%.*f' % (self.decimals, float(tools_dict[tooluid_key]['tooldia']))) - dia_cnc_dict.update({ - 'tooldia': tooldia_val - }) - - if dia_cnc_dict['offset'] == 'in': - tool_offset = -dia_cnc_dict['tooldia'] / 2 - elif dia_cnc_dict['offset'].lower() == 'out': - tool_offset = dia_cnc_dict['tooldia'] / 2 - elif dia_cnc_dict['offset'].lower() == 'custom': - try: - offset_value = float(self.ui.tool_offset_entry.get_value()) - except ValueError: - # try to convert comma to decimal point. if it's still not working error message and return - try: - offset_value = float(self.ui.tool_offset_entry.get_value().replace(',', '.')) - except ValueError: - self.app.inform.emit('[ERROR_NOTCL] %s' % _("Wrong value format entered, use a number.")) - return - if offset_value: - tool_offset = float(offset_value) - else: - self.app.inform.emit( - '[WARNING] %s' % _("Tool Offset is selected in Tool Table but no value is provided.\n" - "Add a Tool Offset or change the Offset Type.") - ) - return - else: - tool_offset = 0.0 - - dia_cnc_dict.update({ - 'offset_value': tool_offset - }) - - z_cut = tools_dict[tooluid_key]['data']["cutz"] - z_move = tools_dict[tooluid_key]['data']["travelz"] - feedrate = tools_dict[tooluid_key]['data']["feedrate"] - feedrate_z = tools_dict[tooluid_key]['data']["feedrate_z"] - feedrate_rapid = tools_dict[tooluid_key]['data']["feedrate_rapid"] - multidepth = tools_dict[tooluid_key]['data']["multidepth"] - extracut = tools_dict[tooluid_key]['data']["extracut"] - extracut_length = tools_dict[tooluid_key]['data']["extracut_length"] - depthpercut = tools_dict[tooluid_key]['data']["depthperpass"] - toolchange = tools_dict[tooluid_key]['data']["toolchange"] - toolchangez = tools_dict[tooluid_key]['data']["toolchangez"] - toolchangexy = tools_dict[tooluid_key]['data']["toolchangexy"] - startz = tools_dict[tooluid_key]['data']["startz"] - endz = tools_dict[tooluid_key]['data']["endz"] - endxy = self.options["endxy"] - spindlespeed = tools_dict[tooluid_key]['data']["spindlespeed"] - dwell = tools_dict[tooluid_key]['data']["dwell"] - dwelltime = tools_dict[tooluid_key]['data']["dwelltime"] - pp_geometry_name = tools_dict[tooluid_key]['data']["ppname_g"] - - spindledir = self.app.defaults['geometry_spindledir'] - tool_solid_geometry = self.solid_geometry - - job_obj.coords_decimals = self.app.defaults["cncjob_coords_decimals"] - job_obj.fr_decimals = self.app.defaults["cncjob_fr_decimals"] - - # Propagate options - job_obj.options["tooldia"] = tooldia_val - job_obj.options['type'] = 'Geometry' - job_obj.options['tool_dia'] = tooldia_val - - # it seems that the tolerance needs to be a lot lower value than 0.01 and it was hardcoded initially - # to a value of 0.0005 which is 20 times less than 0.01 - tol = float(self.app.defaults['global_tolerance']) / 20 - res = job_obj.generate_from_geometry_2( - self, tooldia=tooldia_val, offset=tool_offset, tolerance=tol, - z_cut=z_cut, z_move=z_move, - feedrate=feedrate, feedrate_z=feedrate_z, feedrate_rapid=feedrate_rapid, - spindlespeed=spindlespeed, spindledir=spindledir, dwell=dwell, dwelltime=dwelltime, - multidepth=multidepth, depthpercut=depthpercut, - extracut=extracut, extracut_length=extracut_length, startz=startz, endz=endz, endxy=endxy, - toolchange=toolchange, toolchangez=toolchangez, toolchangexy=toolchangexy, - pp_geometry_name=pp_geometry_name, - tool_no=tool_cnt) - - if res == 'fail': - log.debug("FlatCAMGeometry.mtool_gen_cncjob() --> generate_from_geometry2() failed") - return 'fail' - else: - dia_cnc_dict['gcode'] = res - - # tell gcode_parse from which point to start drawing the lines depending on what kind of - # object is the source of gcode - job_obj.toolchange_xy_type = "geometry" - - self.app.inform.emit('[success] %s' % _("G-Code parsing in progress...")) - dia_cnc_dict['gcode_parsed'] = job_obj.gcode_parse() - self.app.inform.emit('[success] %s' % _("G-Code parsing finished...")) - - # TODO this serve for bounding box creation only; should be optimized - # commented this; there is no need for the actual GCode geometry - the original one will serve as well - # for bounding box values - # dia_cnc_dict['solid_geometry'] = cascaded_union([geo['geom'] for geo in dia_cnc_dict['gcode_parsed']]) - try: - dia_cnc_dict['solid_geometry'] = tool_solid_geometry - self.app.inform.emit('[success] %s...' % _("Finished G-Code processing")) - except Exception as e: - self.app.inform.emit('[ERROR] %s: %s' % (_("G-Code processing failed with error"), str(e))) - - job_obj.cnc_tools.update({ - tooluid_key: deepcopy(dia_cnc_dict) - }) - dia_cnc_dict.clear() - - # Object initialization function for app.new_object() - # RUNNING ON SEPARATE THREAD! - def job_init_multi_geometry(job_obj, app_obj): - log.debug("Creating a CNCJob out of a multi-geometry") - assert isinstance(job_obj, FlatCAMCNCjob), \ - "Initializer expected a FlatCAMCNCjob, got %s" % type(job_obj) - - current_uid = int(1) - - job_obj.options['xmin'] = xmin - job_obj.options['ymin'] = ymin - job_obj.options['xmax'] = xmax - job_obj.options['ymax'] = ymax - - # count the tools - tool_cnt = 0 - - dia_cnc_dict = {} - - # this turn on the FlatCAMCNCJob plot for multiple tools - job_obj.multitool = True - job_obj.multigeo = True - job_obj.cnc_tools.clear() - - job_obj.options['Tools_in_use'] = tools_in_use - job_obj.segx = segx if segx else float(self.app.defaults["geometry_segx"]) - job_obj.segy = segy if segy else float(self.app.defaults["geometry_segy"]) - - job_obj.z_pdepth = float(self.app.defaults["geometry_z_pdepth"]) - job_obj.feedrate_probe = float(self.app.defaults["geometry_feedrate_probe"]) - - # make sure that trying to make a CNCJob from an empty file is not creating an app crash - if not self.solid_geometry: - a = 0 - for tooluid_key in self.tools: - if self.tools[tooluid_key]['solid_geometry'] is None: - a += 1 - if a == len(self.tools): - self.app.inform.emit('[ERROR_NOTCL] %s...' % _('Cancelled. Empty file, it has no geometry')) - return 'fail' - - for tooluid_key in list(tools_dict.keys()): - tool_cnt += 1 - dia_cnc_dict = deepcopy(tools_dict[tooluid_key]) - tooldia_val = float('%.*f' % (self.decimals, float(tools_dict[tooluid_key]['tooldia']))) - - dia_cnc_dict.update({ - 'tooldia': tooldia_val - }) - - # find the tool_dia associated with the tooluid_key - # search in the self.tools for the sel_tool_dia and when found see what tooluid has - # on the found tooluid in self.tools we also have the solid_geometry that interest us - # for k, v in self.tools.items(): - # if float('%.*f' % (self.decimals, float(v['tooldia']))) == tooldia_val: - # current_uid = int(k) - # break - - if dia_cnc_dict['offset'] == 'in': - tool_offset = -tooldia_val / 2 - elif dia_cnc_dict['offset'].lower() == 'out': - tool_offset = tooldia_val / 2 - elif dia_cnc_dict['offset'].lower() == 'custom': - offset_value = float(self.ui.tool_offset_entry.get_value()) - if offset_value: - tool_offset = float(offset_value) - else: - self.app.inform.emit('[WARNING] %s' % - _("Tool Offset is selected in Tool Table but " - "no value is provided.\n" - "Add a Tool Offset or change the Offset Type.")) - return - else: - tool_offset = 0.0 - - dia_cnc_dict.update({ - 'offset_value': tool_offset - }) - - z_cut = tools_dict[tooluid_key]['data']["cutz"] - z_move = tools_dict[tooluid_key]['data']["travelz"] - feedrate = tools_dict[tooluid_key]['data']["feedrate"] - feedrate_z = tools_dict[tooluid_key]['data']["feedrate_z"] - feedrate_rapid = tools_dict[tooluid_key]['data']["feedrate_rapid"] - multidepth = tools_dict[tooluid_key]['data']["multidepth"] - extracut = tools_dict[tooluid_key]['data']["extracut"] - extracut_length = tools_dict[tooluid_key]['data']["extracut_length"] - depthpercut = tools_dict[tooluid_key]['data']["depthperpass"] - toolchange = tools_dict[tooluid_key]['data']["toolchange"] - toolchangez = tools_dict[tooluid_key]['data']["toolchangez"] - toolchangexy = tools_dict[tooluid_key]['data']["toolchangexy"] - startz = tools_dict[tooluid_key]['data']["startz"] - endz = tools_dict[tooluid_key]['data']["endz"] - endxy = self.options["endxy"] - spindlespeed = tools_dict[tooluid_key]['data']["spindlespeed"] - dwell = tools_dict[tooluid_key]['data']["dwell"] - dwelltime = tools_dict[tooluid_key]['data']["dwelltime"] - pp_geometry_name = tools_dict[tooluid_key]['data']["ppname_g"] - - spindledir = self.app.defaults['geometry_spindledir'] - tool_solid_geometry = self.tools[tooluid_key]['solid_geometry'] - - job_obj.coords_decimals = self.app.defaults["cncjob_coords_decimals"] - job_obj.fr_decimals = self.app.defaults["cncjob_fr_decimals"] - - # Propagate options - job_obj.options["tooldia"] = tooldia_val - job_obj.options['type'] = 'Geometry' - job_obj.options['tool_dia'] = tooldia_val - - # it seems that the tolerance needs to be a lot lower value than 0.01 and it was hardcoded initially - # to a value of 0.0005 which is 20 times less than 0.01 - tol = float(self.app.defaults['global_tolerance']) / 20 - res = job_obj.generate_from_multitool_geometry( - tool_solid_geometry, tooldia=tooldia_val, offset=tool_offset, - tolerance=tol, z_cut=z_cut, z_move=z_move, - feedrate=feedrate, feedrate_z=feedrate_z, feedrate_rapid=feedrate_rapid, - spindlespeed=spindlespeed, spindledir=spindledir, dwell=dwell, dwelltime=dwelltime, - multidepth=multidepth, depthpercut=depthpercut, - extracut=extracut, extracut_length=extracut_length, startz=startz, endz=endz, endxy=endxy, - toolchange=toolchange, toolchangez=toolchangez, toolchangexy=toolchangexy, - pp_geometry_name=pp_geometry_name, - tool_no=tool_cnt) - - if res == 'fail': - log.debug("FlatCAMGeometry.mtool_gen_cncjob() --> generate_from_geometry2() failed") - return 'fail' - else: - dia_cnc_dict['gcode'] = res - - self.app.inform.emit('[success] %s' % _("G-Code parsing in progress...")) - dia_cnc_dict['gcode_parsed'] = job_obj.gcode_parse() - self.app.inform.emit('[success] %s' % _("G-Code parsing finished...")) - - # TODO this serve for bounding box creation only; should be optimized - # commented this; there is no need for the actual GCode geometry - the original one will serve as well - # for bounding box values - # geo_for_bound_values = cascaded_union([ - # geo['geom'] for geo in dia_cnc_dict['gcode_parsed'] if geo['geom'].is_valid is True - # ]) - try: - dia_cnc_dict['solid_geometry'] = deepcopy(tool_solid_geometry) - self.app.inform.emit('[success] %s' % _("Finished G-Code processing...")) - except Exception as ee: - self.app.inform.emit('[ERROR] %s: %s' % (_("G-Code processing failed with error"), str(ee))) - - # tell gcode_parse from which point to start drawing the lines depending on what kind of - # object is the source of gcode - job_obj.toolchange_xy_type = "geometry" - - job_obj.cnc_tools.update({ - tooluid_key: deepcopy(dia_cnc_dict) - }) - dia_cnc_dict.clear() - - if use_thread: - # To be run in separate thread - def job_thread(app_obj): - if self.multigeo is False: - with self.app.proc_container.new(_("Generating CNC Code")): - if app_obj.new_object("cncjob", outname, job_init_single_geometry, plot=plot) != 'fail': - app_obj.inform.emit('[success] %s: %s' % (_("CNCjob created"), outname)) - else: - with self.app.proc_container.new(_("Generating CNC Code")): - if app_obj.new_object("cncjob", outname, job_init_multi_geometry) != 'fail': - app_obj.inform.emit('[success] %s: %s' % (_("CNCjob created"), outname)) - - # Create a promise with the name - self.app.collection.promise(outname) - # Send to worker - self.app.worker_task.emit({'fcn': job_thread, 'params': [self.app]}) - else: - if self.solid_geometry: - self.app.new_object("cncjob", outname, job_init_single_geometry, plot=plot) - else: - self.app.new_object("cncjob", outname, job_init_multi_geometry, plot=plot) - - def generatecncjob( - self, outname=None, - dia=None, offset=None, - z_cut=None, z_move=None, - feedrate=None, feedrate_z=None, feedrate_rapid=None, - spindlespeed=None, dwell=None, dwelltime=None, - multidepth=None, depthperpass=None, - toolchange=None, toolchangez=None, toolchangexy=None, - extracut=None, extracut_length=None, startz=None, endz=None, - pp=None, - segx=None, segy=None, - use_thread=True, - plot=True): - """ - Only used for TCL Command. - Creates a CNCJob out of this Geometry object. The actual - work is done by the target camlib.CNCjob - `generate_from_geometry_2()` method. - - :param outname: Name of the new object - :param dia: Tool diameter - :param offset: - :param z_cut: Cut depth (negative value) - :param z_move: Height of the tool when travelling (not cutting) - :param feedrate: Feed rate while cutting on X - Y plane - :param feedrate_z: Feed rate while cutting on Z plane - :param feedrate_rapid: Feed rate while moving with rapids - :param spindlespeed: Spindle speed (RPM) - :param dwell: - :param dwelltime: - :param multidepth: - :param depthperpass: - :param toolchange: - :param toolchangez: - :param toolchangexy: - :param extracut: - :param extracut_length: - :param startz: - :param endz: - :param pp: Name of the preprocessor - :param segx: - :param segy: - :param use_thread: - :param plot: - :return: None - """ - - tooldia = dia if dia else float(self.options["cnctooldia"]) - outname = outname if outname is not None else self.options["name"] - - z_cut = z_cut if z_cut is not None else float(self.options["cutz"]) - z_move = z_move if z_move is not None else float(self.options["travelz"]) - - feedrate = feedrate if feedrate is not None else float(self.options["feedrate"]) - feedrate_z = feedrate_z if feedrate_z is not None else float(self.options["feedrate_z"]) - feedrate_rapid = feedrate_rapid if feedrate_rapid is not None else float(self.options["feedrate_rapid"]) - - multidepth = multidepth if multidepth is not None else self.options["multidepth"] - depthperpass = depthperpass if depthperpass is not None else float(self.options["depthperpass"]) - - segx = segx if segx is not None else float(self.app.defaults['geometry_segx']) - segy = segy if segy is not None else float(self.app.defaults['geometry_segy']) - - extracut = extracut if extracut is not None else float(self.options["extracut"]) - extracut_length = extracut_length if extracut_length is not None else float(self.options["extracut_length"]) - - startz = startz if startz is not None else self.options["startz"] - endz = endz if endz is not None else float(self.options["endz"]) - endxy = self.options["endxy"] - - toolchangez = toolchangez if toolchangez else float(self.options["toolchangez"]) - toolchangexy = toolchangexy if toolchangexy else self.options["toolchangexy"] - toolchange = toolchange if toolchange else self.options["toolchange"] - - offset = offset if offset else 0.0 - - # int or None. - spindlespeed = spindlespeed if spindlespeed else self.options['spindlespeed'] - dwell = dwell if dwell else self.options["dwell"] - dwelltime = dwelltime if dwelltime else float(self.options["dwelltime"]) - - ppname_g = pp if pp else self.options["ppname_g"] - - # Object initialization function for app.new_object() - # RUNNING ON SEPARATE THREAD! - def job_init(job_obj, app_obj): - assert isinstance(job_obj, FlatCAMCNCjob), "Initializer expected a FlatCAMCNCjob, got %s" % type(job_obj) - - # Propagate options - job_obj.options["tooldia"] = tooldia - - job_obj.coords_decimals = self.app.defaults["cncjob_coords_decimals"] - job_obj.fr_decimals = self.app.defaults["cncjob_fr_decimals"] - - job_obj.options['type'] = 'Geometry' - job_obj.options['tool_dia'] = tooldia - - job_obj.segx = segx - job_obj.segy = segy - - job_obj.z_pdepth = float(self.options["z_pdepth"]) - job_obj.feedrate_probe = float(self.options["feedrate_probe"]) - - job_obj.options['xmin'] = self.options['xmin'] - job_obj.options['ymin'] = self.options['ymin'] - job_obj.options['xmax'] = self.options['xmax'] - job_obj.options['ymax'] = self.options['ymax'] - - # it seems that the tolerance needs to be a lot lower value than 0.01 and it was hardcoded initially - # to a value of 0.0005 which is 20 times less than 0.01 - tol = float(self.app.defaults['global_tolerance']) / 20 - job_obj.generate_from_geometry_2( - self, tooldia=tooldia, offset=offset, tolerance=tol, - z_cut=z_cut, z_move=z_move, - feedrate=feedrate, feedrate_z=feedrate_z, feedrate_rapid=feedrate_rapid, - spindlespeed=spindlespeed, dwell=dwell, dwelltime=dwelltime, - multidepth=multidepth, depthpercut=depthperpass, - toolchange=toolchange, toolchangez=toolchangez, toolchangexy=toolchangexy, - extracut=extracut, extracut_length=extracut_length, startz=startz, endz=endz, endxy=endxy, - pp_geometry_name=ppname_g - ) - - # tell gcode_parse from which point to start drawing the lines depending on what kind of object is the - # source of gcode - job_obj.toolchange_xy_type = "geometry" - job_obj.gcode_parse() - self.app.inform.emit('[success] %s' % _("Finished G-Code processing...")) - - if use_thread: - # To be run in separate thread - def job_thread(app_obj): - with self.app.proc_container.new(_("Generating CNC Code")): - app_obj.new_object("cncjob", outname, job_init, plot=plot) - app_obj.inform.emit('[success] %s: %s' % (_("CNCjob created")), outname) - - # Create a promise with the name - self.app.collection.promise(outname) - # Send to worker - self.app.worker_task.emit({'fcn': job_thread, 'params': [self.app]}) - else: - self.app.new_object("cncjob", outname, job_init, plot=plot) - - # def on_plot_cb_click(self, *args): - # if self.muted_ui: - # return - # self.read_form_item('plot') - - def scale(self, xfactor, yfactor=None, point=None): - """ - Scales all geometry by a given factor. - - :param xfactor: Factor by which to scale the object's geometry/ - :type xfactor: float - :param yfactor: Factor by which to scale the object's geometry/ - :type yfactor: float - :return: None - :rtype: None - """ - log.debug("FlatCAMObj.FlatCAMGeometry.scale()") - - try: - xfactor = float(xfactor) - except Exception: - self.app.inform.emit('[ERROR_NOTCL] %s' % _("Scale factor has to be a number: integer or float.")) - return - - if yfactor is None: - yfactor = xfactor - else: - try: - yfactor = float(yfactor) - except Exception: - self.app.inform.emit('[ERROR_NOTCL] %s' % _("Scale factor has to be a number: integer or float.")) - return - - if xfactor == 1 and yfactor == 1: - return - - if point is None: - px = 0 - py = 0 - else: - px, py = point - - self.geo_len = 0 - self.old_disp_number = 0 - self.el_count = 0 - - def scale_recursion(geom): - if type(geom) is list: - geoms = [] - for local_geom in geom: - geoms.append(scale_recursion(local_geom)) - return geoms - else: - try: - self.el_count += 1 - disp_number = int(np.interp(self.el_count, [0, self.geo_len], [0, 100])) - if self.old_disp_number < disp_number <= 100: - self.app.proc_container.update_view_text(' %d%%' % disp_number) - self.old_disp_number = disp_number - - return affinity.scale(geom, xfactor, yfactor, origin=(px, py)) - except AttributeError: - return geom - - if self.multigeo is True: - for tool in self.tools: - # variables to display the percentage of work done - self.geo_len = 0 - try: - self.geo_len = len(self.tools[tool]['solid_geometry']) - except TypeError: - self.geo_len = 1 - self.old_disp_number = 0 - self.el_count = 0 - - self.tools[tool]['solid_geometry'] = scale_recursion(self.tools[tool]['solid_geometry']) - - try: - # variables to display the percentage of work done - self.geo_len = 0 - try: - self.geo_len = len(self.solid_geometry) - except TypeError: - self.geo_len = 1 - self.old_disp_number = 0 - self.el_count = 0 - - self.solid_geometry = scale_recursion(self.solid_geometry) - except AttributeError: - self.solid_geometry = [] - return - - self.app.proc_container.new_text = '' - self.app.inform.emit('[success] %s' % _("Geometry Scale done.")) - - def offset(self, vect): - """ - Offsets all geometry by a given vector/ - - :param vect: (x, y) vector by which to offset the object's geometry. - :type vect: tuple - :return: None - :rtype: None - """ - log.debug("FlatCAMObj.FlatCAMGeometry.offset()") - - try: - dx, dy = vect - except TypeError: - self.app.inform.emit('[ERROR_NOTCL] %s' % - _("An (x,y) pair of values are needed. " - "Probable you entered only one value in the Offset field.") - ) - return - - if dx == 0 and dy == 0: - return - - self.geo_len = 0 - self.old_disp_number = 0 - self.el_count = 0 - - def translate_recursion(geom): - if type(geom) is list: - geoms = [] - for local_geom in geom: - geoms.append(translate_recursion(local_geom)) - return geoms - else: - try: - self.el_count += 1 - disp_number = int(np.interp(self.el_count, [0, self.geo_len], [0, 100])) - if self.old_disp_number < disp_number <= 100: - self.app.proc_container.update_view_text(' %d%%' % disp_number) - self.old_disp_number = disp_number - - return affinity.translate(geom, xoff=dx, yoff=dy) - except AttributeError: - return geom - - if self.multigeo is True: - for tool in self.tools: - # variables to display the percentage of work done - self.geo_len = 0 - try: - self.geo_len = len(self.tools[tool]['solid_geometry']) - except TypeError: - self.geo_len = 1 - self.old_disp_number = 0 - self.el_count = 0 - - self.tools[tool]['solid_geometry'] = translate_recursion(self.tools[tool]['solid_geometry']) - - # variables to display the percentage of work done - self.geo_len = 0 - try: - self.geo_len = len(self.solid_geometry) - except TypeError: - self.geo_len = 1 - - self.old_disp_number = 0 - self.el_count = 0 - - self.solid_geometry = translate_recursion(self.solid_geometry) - - self.app.proc_container.new_text = '' - self.app.inform.emit('[success] %s' % _("Geometry Offset done.")) - - def convert_units(self, units): - log.debug("FlatCAMObj.FlatCAMGeometry.convert_units()") - - self.ui_disconnect() - - factor = Geometry.convert_units(self, units) - - self.options['cutz'] = float(self.options['cutz']) * factor - self.options['depthperpass'] = float(self.options['depthperpass']) * factor - self.options['travelz'] = float(self.options['travelz']) * factor - self.options['feedrate'] = float(self.options['feedrate']) * factor - self.options['feedrate_z'] = float(self.options['feedrate_z']) * factor - self.options['feedrate_rapid'] = float(self.options['feedrate_rapid']) * factor - self.options['endz'] = float(self.options['endz']) * factor - # self.options['cnctooldia'] *= factor - # self.options['painttooldia'] *= factor - # self.options['paintmargin'] *= factor - # self.options['paintoverlap'] *= factor - - self.options["toolchangez"] = float(self.options["toolchangez"]) * factor - - if self.app.defaults["geometry_toolchangexy"] == '': - self.options['toolchangexy'] = "0.0, 0.0" - else: - coords_xy = [float(eval(coord)) for coord in self.app.defaults["geometry_toolchangexy"].split(",")] - if len(coords_xy) < 2: - self.app.inform.emit('[ERROR] %s' % - _("The Toolchange X,Y field in Edit -> Preferences " - "has to be in the format (x, y)\n" - "but now there is only one value, not two.") - ) - return 'fail' - coords_xy[0] *= factor - coords_xy[1] *= factor - self.options['toolchangexy'] = "%f, %f" % (coords_xy[0], coords_xy[1]) - - if self.options['startz'] is not None: - self.options['startz'] = float(self.options['startz']) * factor - - param_list = ['cutz', 'depthperpass', 'travelz', 'feedrate', 'feedrate_z', 'feedrate_rapid', - 'endz', 'toolchangez'] - - if isinstance(self, FlatCAMGeometry): - temp_tools_dict = {} - tool_dia_copy = {} - data_copy = {} - for tooluid_key, tooluid_value in self.tools.items(): - for dia_key, dia_value in tooluid_value.items(): - if dia_key == 'tooldia': - dia_value *= factor - dia_value = float('%.*f' % (self.decimals, dia_value)) - tool_dia_copy[dia_key] = dia_value - if dia_key == 'offset': - tool_dia_copy[dia_key] = dia_value - if dia_key == 'offset_value': - dia_value *= factor - tool_dia_copy[dia_key] = dia_value - - # convert the value in the Custom Tool Offset entry in UI - custom_offset = None - try: - custom_offset = float(self.ui.tool_offset_entry.get_value()) - except ValueError: - # try to convert comma to decimal point. if it's still not working error message and return - try: - custom_offset = float(self.ui.tool_offset_entry.get_value().replace(',', '.')) - except ValueError: - self.app.inform.emit('[ERROR_NOTCL] %s' % - _("Wrong value format entered, use a number.")) - return - except TypeError: - pass - - if custom_offset: - custom_offset *= factor - self.ui.tool_offset_entry.set_value(custom_offset) - - if dia_key == 'type': - tool_dia_copy[dia_key] = dia_value - if dia_key == 'tool_type': - tool_dia_copy[dia_key] = dia_value - if dia_key == 'data': - for data_key, data_value in dia_value.items(): - # convert the form fields that are convertible - for param in param_list: - if data_key == param and data_value is not None: - data_copy[data_key] = data_value * factor - # copy the other dict entries that are not convertible - if data_key not in param_list: - data_copy[data_key] = data_value - tool_dia_copy[dia_key] = deepcopy(data_copy) - data_copy.clear() - - temp_tools_dict.update({ - tooluid_key: deepcopy(tool_dia_copy) - }) - tool_dia_copy.clear() - - self.tools.clear() - self.tools = deepcopy(temp_tools_dict) - - # if there is a value in the new tool field then convert that one too - try: - self.ui.addtool_entry.returnPressed.disconnect() - except TypeError: - pass - tooldia = self.ui.addtool_entry.get_value() - if tooldia: - tooldia *= factor - tooldia = float('%.*f' % (self.decimals, tooldia)) - - self.ui.addtool_entry.set_value(tooldia) - self.ui.addtool_entry.returnPressed.connect(self.on_tool_add) - - return factor - - def plot_element(self, element, color=None, visible=None): - - if color is None: - color = '#FF0000FF' - - visible = visible if visible else self.options['plot'] - try: - for sub_el in element: - self.plot_element(sub_el, color=color) - - except TypeError: # Element is not iterable... - # if self.app.is_legacy is False: - self.add_shape(shape=element, color=color, visible=visible, layer=0) - - def plot(self, visible=None, kind=None): - """ - Plot the object. - - :param visible: Controls if the added shape is visible of not - :param kind: added so there is no error when a project is loaded and it has both geometry and CNCJob, because - CNCJob require the 'kind' parameter. Perhaps the FlatCAMObj.plot() has to be rewrited - :return: - """ - - # Does all the required setup and returns False - # if the 'ptint' option is set to False. - if not FlatCAMObj.plot(self): - return - - try: - # plot solid geometries found as members of self.tools attribute dict - # for MultiGeo - if self.multigeo is True: # geo multi tool usage - for tooluid_key in self.tools: - solid_geometry = self.tools[tooluid_key]['solid_geometry'] - self.plot_element(solid_geometry, visible=visible, - color=self.app.defaults["geometry_plot_line"]) - else: - # plot solid geometry that may be an direct attribute of the geometry object - # for SingleGeo - if self.solid_geometry: - self.plot_element(self.solid_geometry, visible=visible, - color=self.app.defaults["geometry_plot_line"]) - - # self.plot_element(self.solid_geometry, visible=self.options['plot']) - - self.shapes.redraw() - - except (ObjectDeleted, AttributeError): - self.shapes.clear(update=True) - - def on_plot_cb_click(self, *args): - if self.muted_ui: - return - self.read_form_item('plot') - self.plot() - - self.ui_disconnect() - cb_flag = self.ui.plot_cb.isChecked() - for row in range(self.ui.geo_tools_table.rowCount()): - table_cb = self.ui.geo_tools_table.cellWidget(row, 6) - if cb_flag: - table_cb.setChecked(True) - else: - table_cb.setChecked(False) - self.ui_connect() - - def on_plot_cb_click_table(self): - # self.ui.cnc_tools_table.cellWidget(row, 2).widget().setCheckState(QtCore.Qt.Unchecked) - self.ui_disconnect() - # cw = self.sender() - # cw_index = self.ui.geo_tools_table.indexAt(cw.pos()) - # cw_row = cw_index.row() - check_row = 0 - - self.shapes.clear(update=True) - for tooluid_key in self.tools: - solid_geometry = self.tools[tooluid_key]['solid_geometry'] - - # find the geo_tool_table row associated with the tooluid_key - for row in range(self.ui.geo_tools_table.rowCount()): - tooluid_item = int(self.ui.geo_tools_table.item(row, 5).text()) - if tooluid_item == int(tooluid_key): - check_row = row - break - if self.ui.geo_tools_table.cellWidget(check_row, 6).isChecked(): - self.plot_element(element=solid_geometry, visible=True) - self.shapes.redraw() - - # make sure that the general plot is disabled if one of the row plot's are disabled and - # if all the row plot's are enabled also enable the general plot checkbox - cb_cnt = 0 - total_row = self.ui.geo_tools_table.rowCount() - for row in range(total_row): - if self.ui.geo_tools_table.cellWidget(row, 6).isChecked(): - cb_cnt += 1 - else: - cb_cnt -= 1 - if cb_cnt < total_row: - self.ui.plot_cb.setChecked(False) - else: - self.ui.plot_cb.setChecked(True) - self.ui_connect() - - def merge(self, geo_list, geo_final, multigeo=None): - """ - Merges the geometry of objects in grb_list into - the geometry of geo_final. - - :param geo_list: List of FlatCAMGerber Objects to join. - :param geo_final: Destination FlatCAMGerber object. - :param multigeo: if the merged geometry objects are of type MultiGeo - :return: None - """ - - if geo_final.solid_geometry is None: - geo_final.solid_geometry = [] - - try: - __ = iter(geo_final.solid_geometry) - except TypeError: - geo_final.solid_geometry = [geo_final.solid_geometry] - - new_solid_geometry = [] - new_options = {} - new_tools = {} - - for geo_obj in geo_list: - for option in geo_obj.options: - if option != 'name': - try: - new_options[option] = deepcopy(geo_obj.options[option]) - except Exception as e: - log.warning("Failed to copy option %s. Error: %s" % (str(option), str(e))) - - # Expand lists - if type(geo_obj) is list: - FlatCAMGeometry.merge(self, geo_list=geo_obj, geo_final=geo_final) - # If not list, just append - else: - if multigeo is None or multigeo is False: - geo_final.multigeo = False - else: - geo_final.multigeo = True - - try: - new_solid_geometry += deepcopy(geo_obj.solid_geometry) - except Exception as e: - log.debug("FlatCAMGeometry.merge() --> %s" % str(e)) - - # find the tool_uid maximum value in the geo_final - try: - max_uid = max([int(i) for i in new_tools.keys()]) - except ValueError: - max_uid = 0 - - # add and merge tools. If what we try to merge as Geometry is Excellon's and/or Gerber's then don't try - # to merge the obj.tools as it is likely there is none to merge. - if not isinstance(geo_obj, FlatCAMGerber) and not isinstance(geo_obj, FlatCAMExcellon): - for tool_uid in geo_obj.tools: - max_uid += 1 - new_tools[max_uid] = deepcopy(geo_obj.tools[tool_uid]) - - geo_final.options.update(new_options) - geo_final.solid_geometry = new_solid_geometry - geo_final.tools = new_tools - - @staticmethod - def get_pts(o): - """ - Returns a list of all points in the object, where - the object can be a MultiPolygon, Polygon, Not a polygon, or a list - of such. Search is done recursively. - - :param: geometric object - :return: List of points - :rtype: list - """ - pts = [] - - # Iterable: descend into each item. - try: - for subo in o: - pts += FlatCAMGeometry.get_pts(subo) - - # Non-iterable - except TypeError: - if o is not None: - if type(o) == MultiPolygon: - for poly in o: - pts += FlatCAMGeometry.get_pts(poly) - # ## Descend into .exerior and .interiors - elif type(o) == Polygon: - pts += FlatCAMGeometry.get_pts(o.exterior) - for i in o.interiors: - pts += FlatCAMGeometry.get_pts(i) - elif type(o) == MultiLineString: - for line in o: - pts += FlatCAMGeometry.get_pts(line) - # ## Has .coords: list them. - else: - pts += list(o.coords) - else: - return - return pts - - -class FlatCAMCNCjob(FlatCAMObj, CNCjob): - """ - Represents G-Code. - """ - optionChanged = QtCore.pyqtSignal(str) - ui_type = CNCObjectUI - - def __init__(self, name, units="in", kind="generic", z_move=0.1, - feedrate=3.0, feedrate_rapid=3.0, z_cut=-0.002, tooldia=0.0, - spindlespeed=None): - - FlatCAMApp.App.log.debug("Creating CNCJob object...") - - self.decimals = self.app.decimals - - CNCjob.__init__(self, units=units, kind=kind, z_move=z_move, - feedrate=feedrate, feedrate_rapid=feedrate_rapid, z_cut=z_cut, tooldia=tooldia, - spindlespeed=spindlespeed, steps_per_circle=int(self.app.defaults["cncjob_steps_per_circle"])) - - FlatCAMObj.__init__(self, name) - - self.kind = "cncjob" - - self.options.update({ - "plot": True, - "tooldia": 0.03937, # 0.4mm in inches - "append": "", - "prepend": "", - "dwell": False, - "dwelltime": 1, - "type": 'Geometry', - "toolchange_macro": '', - "toolchange_macro_enable": False - }) - - ''' - This is a dict of dictionaries. Each dict is associated with a tool present in the file. The key is the - diameter of the tools and the value is another dict that will hold the data under the following form: - {tooldia: { - 'tooluid': 1, - 'offset': 'Path', - 'type_item': 'Rough', - 'tool_type': 'C1', - 'data': {} # a dict to hold the parameters - 'gcode': "" # a string with the actual GCODE - 'gcode_parsed': {} # dictionary holding the CNCJob geometry and type of geometry - (cut or move) - 'solid_geometry': [] - }, - ... - } - It is populated in the FlatCAMGeometry.mtool_gen_cncjob() - BEWARE: I rely on the ordered nature of the Python 3.7 dictionary. Things might change ... - ''' - self.cnc_tools = {} - - ''' - This is a dict of dictionaries. Each dict is associated with a tool present in the file. The key is the - diameter of the tools and the value is another dict that will hold the data under the following form: - {tooldia: { - 'tool': int, - 'nr_drills': int, - 'nr_slots': int, - 'offset': float, - 'data': {} # a dict to hold the parameters - 'gcode': "" # a string with the actual GCODE - 'gcode_parsed': {} # dictionary holding the CNCJob geometry and type of geometry (cut or move) - 'solid_geometry': [] - }, - ... - } - It is populated in the FlatCAMExcellon.on_create_cncjob_click() but actually - it's done in camlib.CNCJob.generate_from_excellon_by_tool() - BEWARE: I rely on the ordered nature of the Python 3.7 dictionary. Things might change ... - ''' - self.exc_cnc_tools = {} - - # flag to store if the CNCJob is part of a special group of CNCJob objects that can't be processed by the - # default engine of FlatCAM. They generated by some of tools and are special cases of CNCJob objects. - self.special_group = None - - # for now it show if the plot will be done for multi-tool CNCJob (True) or for single tool - # (like the one in the TCL Command), False - self.multitool = False - - # determine if the GCode was generated out of a Excellon object or a Geometry object - self.origin_kind = None - - # used for parsing the GCode lines to adjust the GCode when the GCode is offseted or scaled - gcodex_re_string = r'(?=.*(X[-\+]?\d*\.\d*))' - self.g_x_re = re.compile(gcodex_re_string) - gcodey_re_string = r'(?=.*(Y[-\+]?\d*\.\d*))' - self.g_y_re = re.compile(gcodey_re_string) - gcodez_re_string = r'(?=.*(Z[-\+]?\d*\.\d*))' - self.g_z_re = re.compile(gcodez_re_string) - - gcodef_re_string = r'(?=.*(F[-\+]?\d*\.\d*))' - self.g_f_re = re.compile(gcodef_re_string) - gcodet_re_string = r'(?=.*(\=\s*[-\+]?\d*\.\d*))' - self.g_t_re = re.compile(gcodet_re_string) - - gcodenr_re_string = r'([+-]?\d*\.\d+)' - self.g_nr_re = re.compile(gcodenr_re_string) - - # Attributes to be included in serialization - # Always append to it because it carries contents - # from predecessors. - self.ser_attrs += ['options', 'kind', 'origin_kind', 'cnc_tools', 'exc_cnc_tools', 'multitool'] - - if self.app.is_legacy is False: - self.text_col = self.app.plotcanvas.new_text_collection() - self.text_col.enabled = True - self.annotation = self.app.plotcanvas.new_text_group(collection=self.text_col) - - self.gcode_editor_tab = None - - self.units_found = self.app.defaults['units'] - - def build_ui(self): - self.ui_disconnect() - - FlatCAMObj.build_ui(self) - self.units = self.app.defaults['units'].upper() - - # if the FlatCAM object is Excellon don't build the CNC Tools Table but hide it - self.ui.cnc_tools_table.hide() - if self.cnc_tools: - self.ui.cnc_tools_table.show() - self.build_cnc_tools_table() - - self.ui.exc_cnc_tools_table.hide() - if self.exc_cnc_tools: - self.ui.exc_cnc_tools_table.show() - self.build_excellon_cnc_tools() - # - self.ui_connect() - - def build_cnc_tools_table(self): - tool_idx = 0 - - n = len(self.cnc_tools) - self.ui.cnc_tools_table.setRowCount(n) - - for dia_key, dia_value in self.cnc_tools.items(): - - tool_idx += 1 - row_no = tool_idx - 1 - - t_id = QtWidgets.QTableWidgetItem('%d' % int(tool_idx)) - # id.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) - self.ui.cnc_tools_table.setItem(row_no, 0, t_id) # Tool name/id - - # Make sure that the tool diameter when in MM is with no more than 2 decimals. - # There are no tool bits in MM with more than 2 decimals diameter. - # For INCH the decimals should be no more than 4. There are no tools under 10mils. - - dia_item = QtWidgets.QTableWidgetItem('%.*f' % (self.decimals, float(dia_value['tooldia']))) - - offset_txt = list(str(dia_value['offset'])) - offset_txt[0] = offset_txt[0].upper() - offset_item = QtWidgets.QTableWidgetItem(''.join(offset_txt)) - type_item = QtWidgets.QTableWidgetItem(str(dia_value['type'])) - tool_type_item = QtWidgets.QTableWidgetItem(str(dia_value['tool_type'])) - - t_id.setFlags(QtCore.Qt.ItemIsEnabled) - dia_item.setFlags(QtCore.Qt.ItemIsEnabled) - offset_item.setFlags(QtCore.Qt.ItemIsEnabled) - type_item.setFlags(QtCore.Qt.ItemIsEnabled) - tool_type_item.setFlags(QtCore.Qt.ItemIsEnabled) - - # hack so the checkbox stay centered in the table cell - # used this: - # https://stackoverflow.com/questions/32458111/pyqt-allign-checkbox-and-put-it-in-every-row - # plot_item = QtWidgets.QWidget() - # checkbox = FCCheckBox() - # checkbox.setCheckState(QtCore.Qt.Checked) - # qhboxlayout = QtWidgets.QHBoxLayout(plot_item) - # qhboxlayout.addWidget(checkbox) - # qhboxlayout.setAlignment(QtCore.Qt.AlignCenter) - # qhboxlayout.setContentsMargins(0, 0, 0, 0) - plot_item = FCCheckBox() - plot_item.setLayoutDirection(QtCore.Qt.RightToLeft) - tool_uid_item = QtWidgets.QTableWidgetItem(str(dia_key)) - if self.ui.plot_cb.isChecked(): - plot_item.setChecked(True) - - self.ui.cnc_tools_table.setItem(row_no, 1, dia_item) # Diameter - self.ui.cnc_tools_table.setItem(row_no, 2, offset_item) # Offset - self.ui.cnc_tools_table.setItem(row_no, 3, type_item) # Toolpath Type - self.ui.cnc_tools_table.setItem(row_no, 4, tool_type_item) # Tool Type - - # ## REMEMBER: THIS COLUMN IS HIDDEN IN OBJECTUI.PY # ## - self.ui.cnc_tools_table.setItem(row_no, 5, tool_uid_item) # Tool unique ID) - self.ui.cnc_tools_table.setCellWidget(row_no, 6, plot_item) - - # make the diameter column editable - # for row in range(tool_idx): - # self.ui.cnc_tools_table.item(row, 1).setFlags(QtCore.Qt.ItemIsSelectable | - # QtCore.Qt.ItemIsEnabled) - - for row in range(tool_idx): - self.ui.cnc_tools_table.item(row, 0).setFlags( - self.ui.cnc_tools_table.item(row, 0).flags() ^ QtCore.Qt.ItemIsSelectable) - - self.ui.cnc_tools_table.resizeColumnsToContents() - self.ui.cnc_tools_table.resizeRowsToContents() - - vertical_header = self.ui.cnc_tools_table.verticalHeader() - # vertical_header.setSectionResizeMode(QtWidgets.QHeaderView.ResizeToContents) - vertical_header.hide() - self.ui.cnc_tools_table.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) - - horizontal_header = self.ui.cnc_tools_table.horizontalHeader() - horizontal_header.setMinimumSectionSize(10) - horizontal_header.setDefaultSectionSize(70) - horizontal_header.setSectionResizeMode(0, QtWidgets.QHeaderView.Fixed) - horizontal_header.resizeSection(0, 20) - horizontal_header.setSectionResizeMode(1, QtWidgets.QHeaderView.Stretch) - horizontal_header.setSectionResizeMode(3, QtWidgets.QHeaderView.ResizeToContents) - horizontal_header.setSectionResizeMode(4, QtWidgets.QHeaderView.Fixed) - horizontal_header.resizeSection(4, 40) - horizontal_header.setSectionResizeMode(6, QtWidgets.QHeaderView.Fixed) - horizontal_header.resizeSection(4, 17) - # horizontal_header.setStretchLastSection(True) - self.ui.cnc_tools_table.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) - - self.ui.cnc_tools_table.setColumnWidth(0, 20) - self.ui.cnc_tools_table.setColumnWidth(4, 40) - self.ui.cnc_tools_table.setColumnWidth(6, 17) - - # self.ui.geo_tools_table.setSortingEnabled(True) - - self.ui.cnc_tools_table.setMinimumHeight(self.ui.cnc_tools_table.getHeight()) - self.ui.cnc_tools_table.setMaximumHeight(self.ui.cnc_tools_table.getHeight()) - - def build_excellon_cnc_tools(self): - tool_idx = 0 - - n = len(self.exc_cnc_tools) - self.ui.exc_cnc_tools_table.setRowCount(n) - - for tooldia_key, dia_value in self.exc_cnc_tools.items(): - - tool_idx += 1 - row_no = tool_idx - 1 - - t_id = QtWidgets.QTableWidgetItem('%d' % int(tool_idx)) - dia_item = QtWidgets.QTableWidgetItem('%.*f' % (self.decimals, float(tooldia_key))) - nr_drills_item = QtWidgets.QTableWidgetItem('%d' % int(dia_value['nr_drills'])) - nr_slots_item = QtWidgets.QTableWidgetItem('%d' % int(dia_value['nr_slots'])) - cutz_item = QtWidgets.QTableWidgetItem('%.*f' % (self.decimals, float(dia_value['offset_z']) + self.z_cut)) - - t_id.setFlags(QtCore.Qt.ItemIsEnabled) - dia_item.setFlags(QtCore.Qt.ItemIsEnabled) - nr_drills_item.setFlags(QtCore.Qt.ItemIsEnabled) - nr_slots_item.setFlags(QtCore.Qt.ItemIsEnabled) - cutz_item.setFlags(QtCore.Qt.ItemIsEnabled) - - # hack so the checkbox stay centered in the table cell - # used this: - # https://stackoverflow.com/questions/32458111/pyqt-allign-checkbox-and-put-it-in-every-row - # plot_item = QtWidgets.QWidget() - # checkbox = FCCheckBox() - # checkbox.setCheckState(QtCore.Qt.Checked) - # qhboxlayout = QtWidgets.QHBoxLayout(plot_item) - # qhboxlayout.addWidget(checkbox) - # qhboxlayout.setAlignment(QtCore.Qt.AlignCenter) - # qhboxlayout.setContentsMargins(0, 0, 0, 0) - - plot_item = FCCheckBox() - plot_item.setLayoutDirection(QtCore.Qt.RightToLeft) - tool_uid_item = QtWidgets.QTableWidgetItem(str(dia_value['tool'])) - if self.ui.plot_cb.isChecked(): - plot_item.setChecked(True) - - # TODO until the feature of individual plot for an Excellon tool is implemented - plot_item.setDisabled(True) - - self.ui.exc_cnc_tools_table.setItem(row_no, 0, t_id) # Tool name/id - self.ui.exc_cnc_tools_table.setItem(row_no, 1, dia_item) # Diameter - self.ui.exc_cnc_tools_table.setItem(row_no, 2, nr_drills_item) # Nr of drills - self.ui.exc_cnc_tools_table.setItem(row_no, 3, nr_slots_item) # Nr of slots - - # ## REMEMBER: THIS COLUMN IS HIDDEN IN OBJECTUI.PY # ## - self.ui.exc_cnc_tools_table.setItem(row_no, 4, tool_uid_item) # Tool unique ID) - self.ui.exc_cnc_tools_table.setItem(row_no, 5, cutz_item) - self.ui.exc_cnc_tools_table.setCellWidget(row_no, 6, plot_item) - - for row in range(tool_idx): - self.ui.exc_cnc_tools_table.item(row, 0).setFlags( - self.ui.exc_cnc_tools_table.item(row, 0).flags() ^ QtCore.Qt.ItemIsSelectable) - - self.ui.exc_cnc_tools_table.resizeColumnsToContents() - self.ui.exc_cnc_tools_table.resizeRowsToContents() - - vertical_header = self.ui.exc_cnc_tools_table.verticalHeader() - vertical_header.hide() - self.ui.exc_cnc_tools_table.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) - - horizontal_header = self.ui.exc_cnc_tools_table.horizontalHeader() - horizontal_header.setMinimumSectionSize(10) - horizontal_header.setDefaultSectionSize(70) - horizontal_header.setSectionResizeMode(0, QtWidgets.QHeaderView.Fixed) - horizontal_header.resizeSection(0, 20) - horizontal_header.setSectionResizeMode(1, QtWidgets.QHeaderView.Stretch) - horizontal_header.setSectionResizeMode(2, QtWidgets.QHeaderView.ResizeToContents) - horizontal_header.setSectionResizeMode(3, QtWidgets.QHeaderView.ResizeToContents) - horizontal_header.setSectionResizeMode(5, QtWidgets.QHeaderView.ResizeToContents) - - horizontal_header.setSectionResizeMode(6, QtWidgets.QHeaderView.Fixed) - - # horizontal_header.setStretchLastSection(True) - self.ui.exc_cnc_tools_table.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) - - self.ui.exc_cnc_tools_table.setColumnWidth(0, 20) - self.ui.exc_cnc_tools_table.setColumnWidth(6, 17) - - self.ui.exc_cnc_tools_table.setMinimumHeight(self.ui.exc_cnc_tools_table.getHeight()) - self.ui.exc_cnc_tools_table.setMaximumHeight(self.ui.exc_cnc_tools_table.getHeight()) - - def set_ui(self, ui): - FlatCAMObj.set_ui(self, ui) - - FlatCAMApp.App.log.debug("FlatCAMCNCJob.set_ui()") - - assert isinstance(self.ui, CNCObjectUI), \ - "Expected a CNCObjectUI, got %s" % type(self.ui) - - self.units = self.app.defaults['units'].upper() - self.units_found = self.app.defaults['units'] - - # this signal has to be connected to it's slot before the defaults are populated - # the decision done in the slot has to override the default value set bellow - self.ui.toolchange_cb.toggled.connect(self.on_toolchange_custom_clicked) - - self.form_fields.update({ - "plot": self.ui.plot_cb, - "tooldia": self.ui.tooldia_entry, - "append": self.ui.append_text, - "prepend": self.ui.prepend_text, - "toolchange_macro": self.ui.toolchange_text, - "toolchange_macro_enable": self.ui.toolchange_cb - }) - - # Fill form fields only on object create - self.to_form() - - # 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() - self.ui.t_distance_entry.setVisible(True) - self.ui.t_distance_entry.setDisabled(True) - self.ui.t_distance_entry.set_value('%.*f' % (self.decimals, 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('%.*f' % (self.decimals, 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('%.*f' % (self.decimals, math.ceil(float(time_r)))) - self.ui.units_time_label.setText('sec') - self.ui.units_time_label.setDisabled(True) - except AttributeError: - pass - - if self.multitool is False: - self.ui.tooldia_entry.show() - self.ui.updateplot_button.show() - else: - self.ui.tooldia_entry.hide() - self.ui.updateplot_button.hide() - - # set the kind of geometries are plotted by default with plot2() from camlib.CNCJob - self.ui.cncplot_method_combo.set_value(self.app.defaults["cncjob_plot_kind"]) - - try: - self.ui.annotation_cb.stateChanged.disconnect(self.on_annotation_change) - except (TypeError, AttributeError): - pass - self.ui.annotation_cb.stateChanged.connect(self.on_annotation_change) - - # set if to display text annotations - self.ui.annotation_cb.set_value(self.app.defaults["cncjob_annotation"]) - - # Show/Hide Advanced Options - if self.app.defaults["global_app_level"] == 'b': - self.ui.level.setText(_( - 'Basic' - )) - - self.ui.cnc_frame.hide() - else: - self.ui.level.setText(_( - 'Advanced' - )) - self.ui.cnc_frame.show() - - self.ui.updateplot_button.clicked.connect(self.on_updateplot_button_click) - self.ui.export_gcode_button.clicked.connect(self.on_exportgcode_button_click) - self.ui.modify_gcode_button.clicked.connect(self.on_edit_code_click) - - self.ui.tc_variable_combo.currentIndexChanged[str].connect(self.on_cnc_custom_parameters) - - self.ui.cncplot_method_combo.activated_custom.connect(self.on_plot_kind_change) - - def on_cnc_custom_parameters(self, signal_text): - if signal_text == 'Parameters': - return - else: - self.ui.toolchange_text.insertPlainText('%%%s%%' % signal_text) - - def ui_connect(self): - for row in range(self.ui.cnc_tools_table.rowCount()): - self.ui.cnc_tools_table.cellWidget(row, 6).clicked.connect(self.on_plot_cb_click_table) - self.ui.plot_cb.stateChanged.connect(self.on_plot_cb_click) - - def ui_disconnect(self): - for row in range(self.ui.cnc_tools_table.rowCount()): - self.ui.cnc_tools_table.cellWidget(row, 6).clicked.disconnect(self.on_plot_cb_click_table) - try: - self.ui.plot_cb.stateChanged.disconnect(self.on_plot_cb_click) - except (TypeError, AttributeError): - pass - - def on_updateplot_button_click(self, *args): - """ - Callback for the "Updata Plot" button. Reads the form for updates - and plots the object. - """ - self.read_form() - self.on_plot_kind_change() - - def on_plot_kind_change(self): - kind = self.ui.cncplot_method_combo.get_value() - - def worker_task(): - with self.app.proc_container.new(_("Plotting...")): - self.plot(kind=kind) - - self.app.worker_task.emit({'fcn': worker_task, 'params': []}) - - def on_exportgcode_button_click(self, *args): - """ - Handler activated by a button clicked when exporting GCode. - - :param args: - :return: - """ - self.app.report_usage("cncjob_on_exportgcode_button") - - self.read_form() - name = self.app.collection.get_active().options['name'] - save_gcode = False - - if 'Roland' in self.pp_excellon_name or 'Roland' in self.pp_geometry_name: - _filter_ = "RML1 Files .rol (*.rol);;All Files (*.*)" - elif 'hpgl' in self.pp_geometry_name: - _filter_ = "HPGL Files .plt (*.plt);;All Files (*.*)" - else: - save_gcode = True - _filter_ = self.app.defaults['cncjob_save_filters'] - - try: - dir_file_to_save = self.app.get_last_save_folder() + '/' + str(name) - filename, _f = FCFileSaveDialog.get_saved_filename( - caption=_("Export Machine Code ..."), - directory=dir_file_to_save, - filter=_filter_ - ) - except TypeError: - filename, _f = FCFileSaveDialog.get_saved_filename(caption=_("Export Machine Code ..."), filter=_filter_) - - filename = str(filename) - - if filename == '': - self.app.inform.emit('[WARNING_NOTCL] %s' % _("Export Machine Code cancelled ...")) - return - else: - if save_gcode is True: - used_extension = filename.rpartition('.')[2] - self.update_filters(last_ext=used_extension, filter_string='cncjob_save_filters') - - new_name = os.path.split(str(filename))[1].rpartition('.')[0] - self.ui.name_entry.set_value(new_name) - self.on_name_activate(silent=True) - - preamble = str(self.ui.prepend_text.get_value()) - postamble = str(self.ui.append_text.get_value()) - - gc = self.export_gcode(filename, preamble=preamble, postamble=postamble) - if gc == 'fail': - return - - if self.app.defaults["global_open_style"] is False: - self.app.file_opened.emit("gcode", filename) - self.app.file_saved.emit("gcode", filename) - self.app.inform.emit('[success] %s: %s' % (_("Machine Code file saved to"), filename)) - - def on_edit_code_click(self, *args): - """ - Handler activated by a button clicked when editing GCode. - - :param args: - :return: - """ - - self.app.proc_container.view.set_busy(_("Loading...")) - - preamble = str(self.ui.prepend_text.get_value()) - postamble = str(self.ui.append_text.get_value()) - - gco = self.export_gcode(preamble=preamble, postamble=postamble, to_file=True) - if gco == 'fail': - return - else: - self.app.gcode_edited = gco - - self.gcode_editor_tab = TextEditor(app=self.app, plain_text=True) - - # add the tab if it was closed - self.app.ui.plot_tab_area.addTab(self.gcode_editor_tab, '%s' % _("Code Editor")) - self.gcode_editor_tab.setObjectName('code_editor_tab') - - # delete the absolute and relative position and messages in the infobar - self.app.ui.position_label.setText("") - self.app.ui.rel_position_label.setText("") - - # first clear previous text in text editor (if any) - self.gcode_editor_tab.code_editor.clear() - self.gcode_editor_tab.code_editor.setReadOnly(False) - - self.gcode_editor_tab.code_editor.completer_enable = False - self.gcode_editor_tab.buttonRun.hide() - - # Switch plot_area to CNCJob tab - self.app.ui.plot_tab_area.setCurrentWidget(self.gcode_editor_tab) - - self.gcode_editor_tab.t_frame.hide() - # then append the text from GCode to the text editor - try: - self.gcode_editor_tab.code_editor.setPlainText(self.app.gcode_edited.getvalue()) - # for line in self.app.gcode_edited: - # QtWidgets.QApplication.processEvents() - # - # proc_line = str(line).strip('\n') - # self.gcode_editor_tab.code_editor.append(proc_line) - except Exception as e: - log.debug('FlatCAMCNNJob.on_edit_code_click() -->%s' % str(e)) - self.app.inform.emit('[ERROR] %s %s' % ('FlatCAMCNNJob.on_edit_code_click() -->', str(e))) - return - - self.gcode_editor_tab.code_editor.moveCursor(QtGui.QTextCursor.Start) - - self.gcode_editor_tab.handleTextChanged() - self.gcode_editor_tab.t_frame.show() - self.app.proc_container.view.set_idle() - - self.app.inform.emit('[success] %s...' % _('Loaded Machine Code into Code Editor')) - - def gcode_header(self, comment_start_symbol=None, comment_stop_symbol=None): - """ - Will create a header to be added to all GCode files generated by FlatCAM - - :param comment_start_symbol: A symbol to be used as the first symbol in a comment - :param comment_stop_symbol: A symbol to be used as the last symbol in a comment - :return: A string with a GCode header - """ - - log.debug("FlatCAMCNCJob.gcode_header()") - time_str = "{:%A, %d %B %Y at %H:%M}".format(datetime.now()) - marlin = False - hpgl = False - probe_pp = False - - start_comment = comment_start_symbol if comment_start_symbol is not None else '(' - stop_comment = comment_stop_symbol if comment_stop_symbol is not None else ')' - - try: - for key in self.cnc_tools: - ppg = self.cnc_tools[key]['data']['ppname_g'] - if 'marlin' in ppg.lower() or 'repetier' in ppg.lower(): - marlin = True - break - if ppg == 'hpgl': - hpgl = True - break - if "toolchange_probe" in ppg.lower(): - probe_pp = True - break - except KeyError: - # log.debug("FlatCAMCNCJob.gcode_header() error: --> %s" % str(e)) - pass - - try: - if 'marlin' in self.options['ppname_e'].lower() or 'repetier' in self.options['ppname_e'].lower(): - marlin = True - except KeyError: - # log.debug("FlatCAMCNCJob.gcode_header(): --> There is no such self.option: %s" % str(e)) - pass - - try: - if "toolchange_probe" in self.options['ppname_e'].lower(): - probe_pp = True - except KeyError: - # log.debug("FlatCAMCNCJob.gcode_header(): --> There is no such self.option: %s" % str(e)) - pass - - if marlin is True: - gcode = ';Marlin(Repetier) G-CODE GENERATED BY FLATCAM v%s - www.flatcam.org - Version Date: %s\n' % \ - (str(self.app.version), str(self.app.version_date)) + '\n' - - gcode += ';Name: ' + str(self.options['name']) + '\n' - gcode += ';Type: ' + "G-code from " + str(self.options['type']) + '\n' - - # if str(p['options']['type']) == 'Excellon' or str(p['options']['type']) == 'Excellon Geometry': - # gcode += '(Tools in use: ' + str(p['options']['Tools_in_use']) + ')\n' - - gcode += ';Units: ' + self.units.upper() + '\n' + "\n" - gcode += ';Created on ' + time_str + '\n' + '\n' - elif hpgl is True: - gcode = 'CO "HPGL CODE GENERATED BY FLATCAM v%s - www.flatcam.org - Version Date: %s' % \ - (str(self.app.version), str(self.app.version_date)) + '";\n' - - gcode += 'CO "Name: ' + str(self.options['name']) + '";\n' - gcode += 'CO "Type: ' + "HPGL code from " + str(self.options['type']) + '";\n' - - # if str(p['options']['type']) == 'Excellon' or str(p['options']['type']) == 'Excellon Geometry': - # gcode += '(Tools in use: ' + str(p['options']['Tools_in_use']) + ')\n' - - gcode += 'CO "Units: ' + self.units.upper() + '";\n' - gcode += 'CO "Created on ' + time_str + '";\n' - elif probe_pp is True: - gcode = '(G-CODE GENERATED BY FLATCAM v%s - www.flatcam.org - Version Date: %s)\n' % \ - (str(self.app.version), str(self.app.version_date)) + '\n' - - gcode += '(This GCode tool change is done by using a Probe.)\n' \ - '(Make sure that before you start the job you first do a rough zero for Z axis.)\n' \ - '(This means that you need to zero the CNC axis and then jog to the toolchange X, Y location,)\n' \ - '(mount the probe and adjust the Z so more or less the probe tip touch the plate. ' \ - 'Then zero the Z axis.)\n' + '\n' - - gcode += '(Name: ' + str(self.options['name']) + ')\n' - gcode += '(Type: ' + "G-code from " + str(self.options['type']) + ')\n' - - # if str(p['options']['type']) == 'Excellon' or str(p['options']['type']) == 'Excellon Geometry': - # gcode += '(Tools in use: ' + str(p['options']['Tools_in_use']) + ')\n' - - gcode += '(Units: ' + self.units.upper() + ')\n' + "\n" - gcode += '(Created on ' + time_str + ')\n' + '\n' - else: - gcode = '%sG-CODE GENERATED BY FLATCAM v%s - www.flatcam.org - Version Date: %s%s\n' % \ - (start_comment, str(self.app.version), str(self.app.version_date), stop_comment) + '\n' - - gcode += '%sName: ' % start_comment + str(self.options['name']) + '%s\n' % stop_comment - gcode += '%sType: ' % start_comment + "G-code from " + str(self.options['type']) + '%s\n' % stop_comment - - # if str(p['options']['type']) == 'Excellon' or str(p['options']['type']) == 'Excellon Geometry': - # gcode += '(Tools in use: ' + str(p['options']['Tools_in_use']) + ')\n' - - gcode += '%sUnits: ' % start_comment + self.units.upper() + '%s\n' % stop_comment + "\n" - gcode += '%sCreated on ' % start_comment + time_str + '%s\n' % stop_comment + '\n' - - return gcode - - def gcode_footer(self, end_command=None): - """ - Will add the M02 to the end of GCode, if requested. - - :param end_command: 'M02' or 'M30' - String - :return: - """ - if end_command: - return end_command - else: - return 'M02' - - def export_gcode(self, filename=None, preamble='', postamble='', to_file=False): - """ - This will save the GCode from the Gcode object to a file on the OS filesystem - - :param filename: filename for the GCode file - :param preamble: a custom Gcode block to be added at the beginning of the Gcode file - :param postamble: a custom Gcode block to be added at the end of the Gcode file - :param to_file: if False then no actual file is saved but the app will know that a file was created - :return: None - """ - # gcode = '' - # roland = False - # hpgl = False - # isel_icp = False - - include_header = True - - try: - if self.special_group: - self.app.inform.emit('[WARNING_NOTCL] %s %s %s.' % - (_("This CNCJob object can't be processed because it is a"), - str(self.special_group), - _("CNCJob object"))) - return 'fail' - except AttributeError: - pass - - # if this dict is not empty then the object is a Geometry object - if self.cnc_tools: - first_key = next(iter(self.cnc_tools)) - include_header = self.app.preprocessors[self.cnc_tools[first_key]['data']['ppname_g']].include_header - - # if this dict is not empty then the object is an Excellon object - if self.exc_cnc_tools: - first_key = next(iter(self.exc_cnc_tools)) - include_header = self.app.preprocessors[self.exc_cnc_tools[first_key]['data']['ppname_e']].include_header - - # # detect if using Roland preprocessor - # try: - # for key in self.cnc_tools: - # if self.cnc_tools[key]['data']['ppname_g'] == 'Roland_MDX_20': - # roland = True - # break - # except Exception: - # try: - # for key in self.cnc_tools: - # if self.cnc_tools[key]['data']['ppname_e'] == 'Roland_MDX_20': - # roland = True - # break - # except Exception: - # pass - # - # # detect if using HPGL preprocessor - # try: - # for key in self.cnc_tools: - # if self.cnc_tools[key]['data']['ppname_g'] == 'hpgl': - # hpgl = True - # break - # except Exception: - # try: - # for key in self.cnc_tools: - # if self.cnc_tools[key]['data']['ppname_e'] == 'hpgl': - # hpgl = True - # break - # except Exception: - # pass - # - # # detect if using ISEL_ICP_CNC preprocessor - # try: - # for key in self.cnc_tools: - # if 'ISEL_ICP' in self.cnc_tools[key]['data']['ppname_g'].upper(): - # isel_icp = True - # break - # except Exception: - # try: - # for key in self.cnc_tools: - # if 'ISEL_ICP' in self.cnc_tools[key]['data']['ppname_e'].upper(): - # isel_icp = True - # break - # except Exception: - # pass - - # do not add gcode_header when using the Roland preprocessor, add it for every other preprocessor - # if roland is False and hpgl is False and isel_icp is False: - # gcode = self.gcode_header() - - # do not add gcode_header when using the Roland, HPGL or ISEP_ICP_CNC preprocessor (or any other preprocessor - # that has the include_header attribute set as False, add it for every other preprocessor - # if include_header: - # gcode = self.gcode_header() - # else: - # gcode = '' - - # # detect if using multi-tool and make the Gcode summation correctly for each case - # if self.multitool is True: - # for tooluid_key in self.cnc_tools: - # for key, value in self.cnc_tools[tooluid_key].items(): - # if key == 'gcode': - # gcode += value - # break - # else: - # gcode += self.gcode - - # if roland is True: - # g = preamble + gcode + postamble - # elif hpgl is True: - # g = self.gcode_header() + preamble + gcode + postamble - # else: - # # fix so the preamble gets inserted in between the comments header and the actual start of GCODE - # g_idx = gcode.rfind('G20') - # - # # if it did not find 'G20' then search for 'G21' - # if g_idx == -1: - # g_idx = gcode.rfind('G21') - # - # # if it did not find 'G20' and it did not find 'G21' then there is an error and return - # # but only when the preprocessor is not ISEL_ICP who is allowed not to have the G20/G21 command - # if g_idx == -1 and isel_icp is False: - # self.app.inform.emit('[ERROR_NOTCL] %s' % _("G-code does not have a units code: either G20 or G21")) - # return - # - # footer = self.app.defaults['cncjob_footer'] - # end_gcode = self.gcode_footer() if footer is True else '' - # g = gcode[:g_idx] + preamble + '\n' + gcode[g_idx:] + postamble + end_gcode - - gcode = '' - if include_header is False: - g = preamble - # detect if using multi-tool and make the Gcode summation correctly for each case - if self.multitool is True: - for tooluid_key in self.cnc_tools: - for key, value in self.cnc_tools[tooluid_key].items(): - if key == 'gcode': - gcode += value - break - else: - gcode += self.gcode - - g = g + gcode + postamble - else: - # search for the GCode beginning which is usually a G20 or G21 - # fix so the preamble gets inserted in between the comments header and the actual start of GCODE - # g_idx = gcode.rfind('G20') - # - # # if it did not find 'G20' then search for 'G21' - # if g_idx == -1: - # g_idx = gcode.rfind('G21') - # - # # if it did not find 'G20' and it did not find 'G21' then there is an error and return - # if g_idx == -1: - # self.app.inform.emit('[ERROR_NOTCL] %s' % _("G-code does not have a units code: either G20 or G21")) - # return - - # detect if using multi-tool and make the Gcode summation correctly for each case - if self.multitool is True: - for tooluid_key in self.cnc_tools: - for key, value in self.cnc_tools[tooluid_key].items(): - if key == 'gcode': - gcode += value - break - else: - gcode += self.gcode - - end_gcode = self.gcode_footer() if self.app.defaults['cncjob_footer'] is True else '' - - # detect if using a HPGL preprocessor - hpgl = False - if self.cnc_tools: - for key in self.cnc_tools: - if 'ppname_g' in self.cnc_tools[key]['data']: - if 'hpgl' in self.cnc_tools[key]['data']['ppname_g']: - hpgl = True - break - elif self.exc_cnc_tools: - for key in self.cnc_tools: - if 'ppname_e' in self.cnc_tools[key]['data']: - if 'hpgl' in self.cnc_tools[key]['data']['ppname_e']: - hpgl = True - break - - if hpgl: - processed_gcode = '' - pa_re = re.compile(r"^PA\s*(-?\d+\.\d*),?\s*(-?\d+\.\d*)*;?$") - for gline in gcode.splitlines(): - match = pa_re.search(gline) - if match: - x_int = int(float(match.group(1))) - y_int = int(float(match.group(2))) - new_line = 'PA%d,%d;\n' % (x_int, y_int) - processed_gcode += new_line - else: - processed_gcode += gline + '\n' - - gcode = processed_gcode - g = self.gcode_header() + '\n' + preamble + '\n' + gcode + postamble + end_gcode - else: - try: - g_idx = gcode.index('G94') - g = self.gcode_header() + gcode[:g_idx + 3] + '\n\n' + preamble + '\n' + \ - gcode[(g_idx + 3):] + postamble + end_gcode - except ValueError: - self.app.inform.emit('[ERROR_NOTCL] %s' % - _("G-code does not have a G94 code and we will not include the code in the " - "'Prepend to GCode' text box")) - g = self.gcode_header() + '\n' + gcode + postamble + end_gcode - - # if toolchange custom is used, replace M6 code with the code from the Toolchange Custom Text box - if self.ui.toolchange_cb.get_value() is True: - # match = self.re_toolchange.search(g) - if 'M6' in g: - m6_code = self.parse_custom_toolchange_code(self.ui.toolchange_text.get_value()) - if m6_code is None or m6_code == '': - self.app.inform.emit( - '[ERROR_NOTCL] %s' % _("Cancelled. The Toolchange Custom code is enabled but it's empty.") - ) - return 'fail' - - g = g.replace('M6', m6_code) - self.app.inform.emit('[success] %s' % _("Toolchange G-code was replaced by a custom code.")) - - lines = StringIO(g) - - # Write - if filename is not None: - try: - force_windows_line_endings = self.app.defaults['cncjob_line_ending'] - if force_windows_line_endings and sys.platform != 'win32': - with open(filename, 'w', newline='\r\n') as f: - for line in lines: - f.write(line) - else: - with open(filename, 'w') as f: - for line in lines: - f.write(line) - except FileNotFoundError: - self.app.inform.emit('[WARNING_NOTCL] %s' % _("No such file or directory")) - return - except PermissionError: - self.app.inform.emit( - '[WARNING] %s' % _("Permission denied, saving not possible.\n" - "Most likely another app is holding the file open and not accessible.") - ) - return 'fail' - elif to_file is False: - # Just for adding it to the recent files list. - if self.app.defaults["global_open_style"] is False: - self.app.file_opened.emit("cncjob", filename) - self.app.file_saved.emit("cncjob", filename) - - self.app.inform.emit('[success] %s: %s' % (_("Saved to"), filename)) - else: - return lines - - def on_toolchange_custom_clicked(self, signal): - """ - Handler for clicking toolchange custom. - - :param signal: - :return: - """ - - try: - if 'toolchange_custom' not in str(self.options['ppname_e']).lower(): - if self.ui.toolchange_cb.get_value(): - self.ui.toolchange_cb.set_value(False) - self.app.inform.emit('[WARNING_NOTCL] %s' % - _("The used preprocessor file has to have in it's name: 'toolchange_custom'")) - except KeyError: - try: - for key in self.cnc_tools: - ppg = self.cnc_tools[key]['data']['ppname_g'] - if 'toolchange_custom' not in str(ppg).lower(): - print(ppg) - if self.ui.toolchange_cb.get_value(): - self.ui.toolchange_cb.set_value(False) - self.app.inform.emit('[WARNING_NOTCL] %s' % - _("The used preprocessor file has to have in it's name: " - "'toolchange_custom'")) - except KeyError: - self.app.inform.emit('[ERROR] %s' % _("There is no preprocessor file.")) - - def get_gcode(self, preamble='', postamble=''): - """ - We need this to be able to get_gcode separately for shell command export_gcode - - :param preamble: Extra GCode added to the beginning of the GCode - :param postamble: Extra GCode added at the end of the GCode - :return: The modified GCode - """ - return preamble + '\n' + self.gcode + "\n" + postamble - - def get_svg(self): - # we need this to be able get_svg separately for shell command export_svg - pass - - def on_plot_cb_click(self, *args): - """ - Handler for clicking on the Plot checkbox. - - :param args: - :return: - """ - if self.muted_ui: - return - kind = self.ui.cncplot_method_combo.get_value() - self.plot(kind=kind) - self.read_form_item('plot') - - self.ui_disconnect() - cb_flag = self.ui.plot_cb.isChecked() - for row in range(self.ui.cnc_tools_table.rowCount()): - table_cb = self.ui.cnc_tools_table.cellWidget(row, 6) - if cb_flag: - table_cb.setChecked(True) - else: - table_cb.setChecked(False) - self.ui_connect() - - def on_plot_cb_click_table(self): - """ - Handler for clicking the plot checkboxes added into a Table on each row. Purpose: toggle visibility for the - tool/aperture found on that row. - :return: - """ - - # self.ui.cnc_tools_table.cellWidget(row, 2).widget().setCheckState(QtCore.Qt.Unchecked) - self.ui_disconnect() - # cw = self.sender() - # cw_index = self.ui.cnc_tools_table.indexAt(cw.pos()) - # cw_row = cw_index.row() - - kind = self.ui.cncplot_method_combo.get_value() - - self.shapes.clear(update=True) - - for tooluid_key in self.cnc_tools: - tooldia = float('%.*f' % (self.decimals, float(self.cnc_tools[tooluid_key]['tooldia']))) - gcode_parsed = self.cnc_tools[tooluid_key]['gcode_parsed'] - # tool_uid = int(self.ui.cnc_tools_table.item(cw_row, 3).text()) - - for r in range(self.ui.cnc_tools_table.rowCount()): - if int(self.ui.cnc_tools_table.item(r, 5).text()) == int(tooluid_key): - if self.ui.cnc_tools_table.cellWidget(r, 6).isChecked(): - self.plot2(tooldia=tooldia, obj=self, visible=True, gcode_parsed=gcode_parsed, kind=kind) - - self.shapes.redraw() - - # make sure that the general plot is disabled if one of the row plot's are disabled and - # if all the row plot's are enabled also enable the general plot checkbox - cb_cnt = 0 - total_row = self.ui.cnc_tools_table.rowCount() - for row in range(total_row): - if self.ui.cnc_tools_table.cellWidget(row, 6).isChecked(): - cb_cnt += 1 - else: - cb_cnt -= 1 - if cb_cnt < total_row: - self.ui.plot_cb.setChecked(False) - else: - self.ui.plot_cb.setChecked(True) - self.ui_connect() - - def plot(self, visible=None, kind='all'): - """ - # Does all the required setup and returns False - # if the 'ptint' option is set to False. - - :param visible: Boolean to decide if the object will be plotted as visible or disabled on canvas - :param kind: String. Can be "all" or "travel" or "cut". For CNCJob plotting - :return: None - """ - if not FlatCAMObj.plot(self): - return - - visible = visible if visible else self.options['plot'] - - if self.app.is_legacy is False: - 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 - try: - dia_plot = float(self.options["tooldia"]) - except ValueError: - # we may have a tuple with only one element and a comma - dia_plot = [float(el) for el in self.options["tooldia"].split(',') if el != ''][0] - self.plot2(dia_plot, obj=self, visible=visible, kind=kind) - else: - # multiple tools usage - if self.cnc_tools: - for tooluid_key in self.cnc_tools: - tooldia = float('%.*f' % (self.decimals, float(self.cnc_tools[tooluid_key]['tooldia']))) - gcode_parsed = self.cnc_tools[tooluid_key]['gcode_parsed'] - self.plot2(tooldia=tooldia, obj=self, visible=visible, gcode_parsed=gcode_parsed, kind=kind) - - # TODO: until the gcode parsed will be stored on each Excellon tool this will not get executed - if self.exc_cnc_tools: - for tooldia_key in self.exc_cnc_tools: - tooldia = float('%.*f' % (self.decimals, float(tooldia_key))) - # gcode_parsed = self.cnc_tools[tooldia_key]['gcode_parsed'] - gcode_parsed = self.gcode_parsed - self.plot2(tooldia=tooldia, obj=self, visible=visible, gcode_parsed=gcode_parsed, kind=kind) - - self.shapes.redraw() - except (ObjectDeleted, AttributeError): - self.shapes.clear(update=True) - if self.app.is_legacy is False: - self.annotation.clear(update=True) - - def on_annotation_change(self): - """ - Handler for toggling the annotation display by clicking a checkbox. - :return: - """ - - if self.app.is_legacy is False: - if self.ui.annotation_cb.get_value(): - self.text_col.enabled = True - else: - self.text_col.enabled = False - # kind = self.ui.cncplot_method_combo.get_value() - # self.plot(kind=kind) - self.annotation.redraw() - else: - kind = self.ui.cncplot_method_combo.get_value() - self.plot(kind=kind) - - def convert_units(self, units): - """ - Units conversion used by the CNCJob objects. - - :param units: Can be "MM" or "IN" - :return: - """ - - log.debug("FlatCAMObj.FlatCAMECNCjob.convert_units()") - - factor = CNCjob.convert_units(self, units) - self.options["tooldia"] = float(self.options["tooldia"]) * factor - - param_list = ['cutz', 'depthperpass', 'travelz', 'feedrate', 'feedrate_z', 'feedrate_rapid', - 'endz', 'toolchangez'] - - temp_tools_dict = {} - tool_dia_copy = {} - data_copy = {} - - for tooluid_key, tooluid_value in self.cnc_tools.items(): - for dia_key, dia_value in tooluid_value.items(): - if dia_key == 'tooldia': - dia_value *= factor - dia_value = float('%.*f' % (self.decimals, dia_value)) - tool_dia_copy[dia_key] = dia_value - if dia_key == 'offset': - tool_dia_copy[dia_key] = dia_value - if dia_key == 'offset_value': - dia_value *= factor - tool_dia_copy[dia_key] = dia_value - - if dia_key == 'type': - tool_dia_copy[dia_key] = dia_value - if dia_key == 'tool_type': - tool_dia_copy[dia_key] = dia_value - if dia_key == 'data': - for data_key, data_value in dia_value.items(): - # convert the form fields that are convertible - for param in param_list: - if data_key == param and data_value is not None: - data_copy[data_key] = data_value * factor - # copy the other dict entries that are not convertible - if data_key not in param_list: - data_copy[data_key] = data_value - tool_dia_copy[dia_key] = deepcopy(data_copy) - data_copy.clear() - - if dia_key == 'gcode': - tool_dia_copy[dia_key] = dia_value - if dia_key == 'gcode_parsed': - tool_dia_copy[dia_key] = dia_value - if dia_key == 'solid_geometry': - tool_dia_copy[dia_key] = dia_value - - # if dia_key == 'solid_geometry': - # tool_dia_copy[dia_key] = affinity.scale(dia_value, xfact=factor, origin=(0, 0)) - # if dia_key == 'gcode_parsed': - # for g in dia_value: - # g['geom'] = affinity.scale(g['geom'], factor, factor, origin=(0, 0)) - # - # tool_dia_copy['gcode_parsed'] = deepcopy(dia_value) - # tool_dia_copy['solid_geometry'] = cascaded_union([geo['geom'] for geo in dia_value]) - - temp_tools_dict.update({ - tooluid_key: deepcopy(tool_dia_copy) - }) - tool_dia_copy.clear() - - self.cnc_tools.clear() - self.cnc_tools = deepcopy(temp_tools_dict) - - -class FlatCAMScript(FlatCAMObj): - """ - Represents a TCL script object. - """ - optionChanged = QtCore.pyqtSignal(str) - ui_type = ScriptObjectUI - - def __init__(self, name): - self.decimals = self.app.decimals - - FlatCAMApp.App.log.debug("Creating a FlatCAMScript object...") - FlatCAMObj.__init__(self, name) - - self.kind = "script" - - self.options.update({ - "plot": True, - "type": 'Script', - "source_file": '', - }) - - self.units = '' - - self.ser_attrs = ['options', 'kind', 'source_file'] - self.source_file = '' - self.script_code = '' - - self.units_found = self.app.defaults['units'] - - # self.script_editor_tab = TextEditor(app=self.app, plain_text=True) - self.script_editor_tab = TextEditor(app=self.app, plain_text=True) - - def set_ui(self, ui): - """ - Sets the Object UI in Selected Tab for the FlatCAM Script type of object. - :param ui: - :return: - """ - FlatCAMObj.set_ui(self, ui) - FlatCAMApp.App.log.debug("FlatCAMScript.set_ui()") - - assert isinstance(self.ui, ScriptObjectUI), \ - "Expected a ScriptObjectUI, got %s" % type(self.ui) - - self.units = self.app.defaults['units'].upper() - self.units_found = self.app.defaults['units'] - - # Fill form fields only on object create - self.to_form() - - # Show/Hide Advanced Options - if self.app.defaults["global_app_level"] == 'b': - self.ui.level.setText(_( - 'Basic' - )) - else: - self.ui.level.setText(_( - 'Advanced' - )) - - # tab_here = False - # # try to not add too many times a tab that it is already installed - # for idx in range(self.app.ui.plot_tab_area.count()): - # if self.app.ui.plot_tab_area.widget(idx).objectName() == self.options['name']: - # tab_here = True - # break - # - # # add the tab if it is not already added - # if tab_here is False: - # self.app.ui.plot_tab_area.addTab(self.script_editor_tab, '%s' % _("Script Editor")) - # self.script_editor_tab.setObjectName(self.options['name']) - - self.app.ui.plot_tab_area.addTab(self.script_editor_tab, '%s' % _("Script Editor")) - self.script_editor_tab.setObjectName(self.options['name']) - - # first clear previous text in text editor (if any) - # self.script_editor_tab.code_editor.clear() - # self.script_editor_tab.code_editor.setReadOnly(False) - - self.ui.autocomplete_cb.set_value(self.app.defaults['script_autocompleter']) - self.on_autocomplete_changed(state=self.app.defaults['script_autocompleter']) - - self.script_editor_tab.buttonRun.show() - - # Switch plot_area to CNCJob tab - self.app.ui.plot_tab_area.setCurrentWidget(self.script_editor_tab) - - flt = "FlatCAM Scripts (*.FlatScript);;All Files (*.*)" - self.script_editor_tab.buttonOpen.clicked.disconnect() - self.script_editor_tab.buttonOpen.clicked.connect(lambda: self.script_editor_tab.handleOpen(filt=flt)) - self.script_editor_tab.buttonSave.clicked.disconnect() - self.script_editor_tab.buttonSave.clicked.connect(lambda: self.script_editor_tab.handleSaveGCode(filt=flt)) - - self.script_editor_tab.buttonRun.clicked.connect(self.handle_run_code) - self.script_editor_tab.handleTextChanged() - - self.ui.autocomplete_cb.stateChanged.connect(self.on_autocomplete_changed) - - self.ser_attrs = ['options', 'kind', 'source_file'] - - # ---------------------------------------------------- # - # ----------- LOAD THE TEXT SOURCE FILE -------------- # - # ---------------------------------------------------- # - self.app.proc_container.view.set_busy(_("Loading...")) - self.script_editor_tab.t_frame.hide() - - try: - self.script_editor_tab.code_editor.setPlainText(self.source_file) - # for line in self.source_file.splitlines(): - # QtWidgets.QApplication.processEvents() - # self.script_editor_tab.code_editor.append(line) - except Exception as e: - log.debug("FlatCAMScript.set_ui() --> %s" % str(e)) - - self.script_editor_tab.code_editor.moveCursor(QtGui.QTextCursor.End) - self.script_editor_tab.t_frame.show() - - self.app.proc_container.view.set_idle() - self.build_ui() - - def build_ui(self): - FlatCAMObj.build_ui(self) - - def handle_run_code(self): - # trying to run a Tcl command without having the Shell open will create some warnings because the Tcl Shell - # tries to print on a hidden widget, therefore show the dock if hidden - if self.app.ui.shell_dock.isHidden(): - self.app.ui.shell_dock.show() - - self.script_code = deepcopy(self.script_editor_tab.code_editor.toPlainText()) - - old_line = '' - for tcl_command_line in self.script_code.splitlines(): - # do not process lines starting with '#' = comment and empty lines - if not tcl_command_line.startswith('#') and tcl_command_line != '': - # id FlatCAM is run in Windows then replace all the slashes with - # the UNIX style slash that TCL understands - if sys.platform == 'win32': - if "open" in tcl_command_line: - tcl_command_line = tcl_command_line.replace('\\', '/') - - if old_line != '': - new_command = old_line + tcl_command_line + '\n' - else: - new_command = tcl_command_line - - # execute the actual Tcl command - try: - self.app.shell.open_processing() # Disables input box. - - result = self.app.tcl.eval(str(new_command)) - if result != 'None': - self.app.shell.append_output(result + '\n') - - old_line = '' - except tk.TclError: - old_line = old_line + tcl_command_line + '\n' - except Exception as e: - log.debug("FlatCAMScript.handleRunCode() --> %s" % str(e)) - - if old_line != '': - # it means that the script finished with an error - result = self.app.tcl.eval("set errorInfo") - log.error("Exec command Exception: %s" % (result + '\n')) - self.app.shell.append_error('ERROR: ' + result + '\n') - - self.app.shell.close_processing() - - def on_autocomplete_changed(self, state): - if state: - self.script_editor_tab.code_editor.completer_enable = True - else: - self.script_editor_tab.code_editor.completer_enable = False - - def to_dict(self): - """ - Returns a representation of the object as a dictionary. - Attributes to include are listed in ``self.ser_attrs``. - - :return: A dictionary-encoded copy of the object. - :rtype: dict - """ - d = {} - for attr in self.ser_attrs: - d[attr] = getattr(self, attr) - return d - - def from_dict(self, d): - """ - Sets object's attributes from a dictionary. - Attributes to include are listed in ``self.ser_attrs``. - This method will look only for only and all the - attributes in ``self.ser_attrs``. They must all - be present. Use only for deserializing saved - objects. - - :param d: Dictionary of attributes to set in the object. - :type d: dict - :return: None - """ - for attr in self.ser_attrs: - setattr(self, attr, d[attr]) - - -class FlatCAMDocument(FlatCAMObj): - """ - Represents a Document object. - """ - optionChanged = QtCore.pyqtSignal(str) - ui_type = DocumentObjectUI - - def __init__(self, name): - self.decimals = self.app.decimals - - FlatCAMApp.App.log.debug("Creating a Document object...") - FlatCAMObj.__init__(self, name) - - self.kind = "document" - self.units = '' - - self.ser_attrs = ['options', 'kind', 'source_file'] - self.source_file = '' - self.doc_code = '' - - self.font_name = None - self.font_italic = None - self.font_bold = None - self.font_underline = None - - self.document_editor_tab = None - - self._read_only = False - self.units_found = self.app.defaults['units'] - - def set_ui(self, ui): - FlatCAMObj.set_ui(self, ui) - FlatCAMApp.App.log.debug("FlatCAMDocument.set_ui()") - - assert isinstance(self.ui, DocumentObjectUI), \ - "Expected a DocumentObjectUI, got %s" % type(self.ui) - - self.units = self.app.defaults['units'].upper() - self.units_found = self.app.defaults['units'] - - # Fill form fields only on object create - self.to_form() - - # Show/Hide Advanced Options - if self.app.defaults["global_app_level"] == 'b': - self.ui.level.setText(_( - 'Basic' - )) - else: - self.ui.level.setText(_( - 'Advanced' - )) - - self.document_editor_tab = TextEditor(app=self.app) - stylesheet = """ - QTextEdit {selection-background-color:%s; - selection-color:white; - } - """ % self.app.defaults["document_sel_color"] - - self.document_editor_tab.code_editor.setStyleSheet(stylesheet) - - # first clear previous text in text editor (if any) - self.document_editor_tab.code_editor.clear() - self.document_editor_tab.code_editor.setReadOnly(self._read_only) - - self.document_editor_tab.buttonRun.hide() - - self.ui.autocomplete_cb.set_value(self.app.defaults['document_autocompleter']) - self.on_autocomplete_changed(state=self.app.defaults['document_autocompleter']) - self.on_tab_size_change(val=self.app.defaults['document_tab_size']) - - flt = "FlatCAM Docs (*.FlatDoc);;All Files (*.*)" - - # ###################################################################### - # ######################## SIGNALS ##################################### - # ###################################################################### - self.document_editor_tab.buttonOpen.clicked.disconnect() - self.document_editor_tab.buttonOpen.clicked.connect(lambda: self.document_editor_tab.handleOpen(filt=flt)) - self.document_editor_tab.buttonSave.clicked.disconnect() - self.document_editor_tab.buttonSave.clicked.connect(lambda: self.document_editor_tab.handleSaveGCode(filt=flt)) - - self.document_editor_tab.code_editor.textChanged.connect(self.on_text_changed) - - self.ui.font_type_cb.currentFontChanged.connect(self.font_family) - self.ui.font_size_cb.activated.connect(self.font_size) - self.ui.font_bold_tb.clicked.connect(self.on_bold_button) - self.ui.font_italic_tb.clicked.connect(self.on_italic_button) - self.ui.font_under_tb.clicked.connect(self.on_underline_button) - - self.ui.font_color_entry.editingFinished.connect(self.on_font_color_entry) - self.ui.font_color_button.clicked.connect(self.on_font_color_button) - self.ui.sel_color_entry.editingFinished.connect(self.on_selection_color_entry) - self.ui.sel_color_button.clicked.connect(self.on_selection_color_button) - - self.ui.al_left_tb.clicked.connect(lambda: self.document_editor_tab.code_editor.setAlignment(Qt.AlignLeft)) - self.ui.al_center_tb.clicked.connect(lambda: self.document_editor_tab.code_editor.setAlignment(Qt.AlignCenter)) - self.ui.al_right_tb.clicked.connect(lambda: self.document_editor_tab.code_editor.setAlignment(Qt.AlignRight)) - self.ui.al_justify_tb.clicked.connect( - lambda: self.document_editor_tab.code_editor.setAlignment(Qt.AlignJustify) - ) - - self.ui.autocomplete_cb.stateChanged.connect(self.on_autocomplete_changed) - self.ui.tab_size_spinner.returnPressed.connect(self.on_tab_size_change) - # ####################################################################### - - self.ui.font_color_entry.set_value(self.app.defaults['document_font_color']) - self.ui.font_color_button.setStyleSheet( - "background-color:%s" % str(self.app.defaults['document_font_color'])) - - self.ui.sel_color_entry.set_value(self.app.defaults['document_sel_color']) - self.ui.sel_color_button.setStyleSheet( - "background-color:%s" % self.app.defaults['document_sel_color']) - - self.ui.font_size_cb.setCurrentIndex(int(self.app.defaults['document_font_size'])) - - self.document_editor_tab.handleTextChanged() - self.ser_attrs = ['options', 'kind', 'source_file'] - - if Qt.mightBeRichText(self.source_file): - self.document_editor_tab.code_editor.setHtml(self.source_file) - else: - for line in self.source_file.splitlines(): - self.document_editor_tab.code_editor.append(line) - - self.build_ui() - - @property - def read_only(self): - return self._read_only - - @read_only.setter - def read_only(self, val): - if val: - self._read_only = True - else: - self._read_only = False - - def build_ui(self): - FlatCAMObj.build_ui(self) - tab_here = False - - # try to not add too many times a tab that it is already installed - for idx in range(self.app.ui.plot_tab_area.count()): - if self.app.ui.plot_tab_area.widget(idx).objectName() == self.options['name']: - tab_here = True - break - - # add the tab if it is not already added - if tab_here is False: - self.app.ui.plot_tab_area.addTab(self.document_editor_tab, '%s' % _("Document Editor")) - self.document_editor_tab.setObjectName(self.options['name']) - - # Switch plot_area to CNCJob tab - self.app.ui.plot_tab_area.setCurrentWidget(self.document_editor_tab) - - def on_autocomplete_changed(self, state): - if state: - self.document_editor_tab.code_editor.completer_enable = True - else: - self.document_editor_tab.code_editor.completer_enable = False - - def on_tab_size_change(self, val=None): - try: - self.ui.tab_size_spinner.returnPressed.disconnect(self.on_tab_size_change) - except TypeError: - pass - - if val: - self.ui.tab_size_spinner.set_value(val) - - tab_balue = int(self.ui.tab_size_spinner.get_value()) - self.document_editor_tab.code_editor.setTabStopWidth(tab_balue) - self.app.defaults['document_tab_size'] = tab_balue - - self.ui.tab_size_spinner.returnPressed.connect(self.on_tab_size_change) - - def on_text_changed(self): - self.source_file = self.document_editor_tab.code_editor.toHtml() - # print(self.source_file) - - def font_family(self, font): - # self.document_editor_tab.code_editor.selectAll() - font.setPointSize(float(self.ui.font_size_cb.get_value())) - self.document_editor_tab.code_editor.setCurrentFont(font) - self.font_name = self.ui.font_type_cb.currentFont().family() - - def font_size(self): - # self.document_editor_tab.code_editor.selectAll() - self.document_editor_tab.code_editor.setFontPointSize(float(self.ui.font_size_cb.get_value())) - - def on_bold_button(self): - if self.ui.font_bold_tb.isChecked(): - self.document_editor_tab.code_editor.setFontWeight(QtGui.QFont.Bold) - self.font_bold = True - else: - self.document_editor_tab.code_editor.setFontWeight(QtGui.QFont.Normal) - self.font_bold = False - - def on_italic_button(self): - if self.ui.font_italic_tb.isChecked(): - self.document_editor_tab.code_editor.setFontItalic(True) - self.font_italic = True - else: - self.document_editor_tab.code_editor.setFontItalic(False) - self.font_italic = False - - def on_underline_button(self): - if self.ui.font_under_tb.isChecked(): - self.document_editor_tab.code_editor.setFontUnderline(True) - self.font_underline = True - else: - self.document_editor_tab.code_editor.setFontUnderline(False) - self.font_underline = False - - # Setting font colors handlers - def on_font_color_entry(self): - self.app.defaults['document_font_color'] = self.ui.font_color_entry.get_value() - self.ui.font_color_button.setStyleSheet("background-color:%s" % str(self.app.defaults['document_font_color'])) - - def on_font_color_button(self): - current_color = QtGui.QColor(self.app.defaults['document_font_color']) - - c_dialog = QtWidgets.QColorDialog() - font_color = c_dialog.getColor(initial=current_color) - - if font_color.isValid() is False: - return - - self.document_editor_tab.code_editor.setTextColor(font_color) - self.ui.font_color_button.setStyleSheet("background-color:%s" % str(font_color.name())) - - new_val = str(font_color.name()) - self.ui.font_color_entry.set_value(new_val) - self.app.defaults['document_font_color'] = new_val - - # Setting selection colors handlers - def on_selection_color_entry(self): - self.app.defaults['document_sel_color'] = self.ui.sel_color_entry.get_value() - self.ui.sel_color_button.setStyleSheet("background-color:%s" % str(self.app.defaults['document_sel_color'])) - - def on_selection_color_button(self): - current_color = QtGui.QColor(self.app.defaults['document_sel_color']) - - c_dialog = QtWidgets.QColorDialog() - sel_color = c_dialog.getColor(initial=current_color) - - if sel_color.isValid() is False: - return - - p = QtGui.QPalette() - p.setColor(QtGui.QPalette.Highlight, sel_color) - p.setColor(QtGui.QPalette.HighlightedText, QtGui.QColor('white')) - - self.document_editor_tab.code_editor.setPalette(p) - - self.ui.sel_color_button.setStyleSheet("background-color:%s" % str(sel_color.name())) - - new_val = str(sel_color.name()) - self.ui.sel_color_entry.set_value(new_val) - self.app.defaults['document_sel_color'] = new_val - - def to_dict(self): - """ - Returns a representation of the object as a dictionary. - Attributes to include are listed in ``self.ser_attrs``. - - :return: A dictionary-encoded copy of the object. - :rtype: dict - """ - d = {} - for attr in self.ser_attrs: - d[attr] = getattr(self, attr) - return d - - def from_dict(self, d): - """ - Sets object's attributes from a dictionary. - Attributes to include are listed in ``self.ser_attrs``. - This method will look only for only and all the - attributes in ``self.ser_attrs``. They must all - be present. Use only for deserializing saved - objects. - - :param d: Dictionary of attributes to set in the object. - :type d: dict - :return: None - """ - for attr in self.ser_attrs: - setattr(self, attr, d[attr]) - -# end of file diff --git a/FlatCAMPostProc.py b/FlatCAMPostProc.py index a822c01d..15991d80 100644 --- a/FlatCAMPostProc.py +++ b/FlatCAMPostProc.py @@ -12,8 +12,10 @@ from abc import ABCMeta, abstractmethod import math # module-root dictionary of preprocessors -import FlatCAMApp +import logging + +log = logging.getLogger('base') preprocessors = {} @@ -23,7 +25,7 @@ class ABCPostProcRegister(ABCMeta): newclass = super(ABCPostProcRegister, cls).__new__(cls, clsname, bases, attrs) if object not in bases: if newclass.__name__ in preprocessors: - FlatCAMApp.App.log.warning('Preprocessor %s has been overriden' % newclass.__name__) + log.warning('Preprocessor %s has been overriden' % newclass.__name__) preprocessors[newclass.__name__] = newclass() # here is your register function return newclass diff --git a/FlatCAMTranslation.py b/FlatCAMTranslation.py index f7e75d96..fc4de384 100644 --- a/FlatCAMTranslation.py +++ b/FlatCAMTranslation.py @@ -29,6 +29,7 @@ languages_dict = { 'en': 'English', 'es': 'Spanish', 'fr': 'French', + 'hu': 'Hungarian', 'it': 'Italian', 'ro': 'Romanian', 'ru': 'Russian', diff --git a/ObjectCollection.py b/ObjectCollection.py index 1108683a..4c00a6c0 100644 --- a/ObjectCollection.py +++ b/ObjectCollection.py @@ -16,10 +16,15 @@ from PyQt5.QtCore import Qt, QSettings from PyQt5.QtGui import QColor # from PyQt5.QtCore import QModelIndex -from FlatCAMObj import FlatCAMGerber, FlatCAMGeometry, FlatCAMExcellon, FlatCAMCNCjob, FlatCAMDocument, FlatCAMScript, \ - FlatCAMObj +from flatcamObjects.FlatCAMObj import FlatCAMObj +from flatcamObjects.FlatCAMCNCJob import CNCJobObject +from flatcamObjects.FlatCAMDocument import DocumentObject +from flatcamObjects.FlatCAMExcellon import ExcellonObject +from flatcamObjects.FlatCAMGeometry import GeometryObject +from flatcamObjects.FlatCAMGerber import GerberObject +from flatcamObjects.FlatCAMScript import ScriptObject + import inspect # TODO: Remove -import FlatCAMApp import re import logging @@ -234,12 +239,12 @@ class ObjectCollection(QtCore.QAbstractItemModel): ] classdict = { - "gerber": FlatCAMGerber, - "excellon": FlatCAMExcellon, - "cncjob": FlatCAMCNCjob, - "geometry": FlatCAMGeometry, - "script": FlatCAMScript, - "document": FlatCAMDocument + "gerber": GerberObject, + "excellon": ExcellonObject, + "cncjob": CNCJobObject, + "geometry": GeometryObject, + "script": ScriptObject, + "document": DocumentObject } icon_files = { @@ -332,7 +337,7 @@ class ObjectCollection(QtCore.QAbstractItemModel): self.update_list_signal.connect(self.on_update_list_signal) def promise(self, obj_name): - FlatCAMApp.App.log.debug("Object %s has been promised." % obj_name) + log.debug("Object %s has been promised." % obj_name) self.promises.add(obj_name) def has_promises(self): @@ -349,7 +354,7 @@ class ObjectCollection(QtCore.QAbstractItemModel): return len(self.plot_promises) > 0 def on_mouse_down(self, event): - FlatCAMApp.App.log.debug("Mouse button pressed on list") + log.debug("Mouse button pressed on list") def on_menu_request(self, pos): @@ -373,17 +378,17 @@ class ObjectCollection(QtCore.QAbstractItemModel): self.app.ui.menuprojectcolor.setEnabled(False) for obj in self.get_selected(): - if type(obj) == FlatCAMGerber or type(obj) == FlatCAMExcellon: + if type(obj) == GerberObject or type(obj) == ExcellonObject: self.app.ui.menuprojectcolor.setEnabled(True) - if type(obj) != FlatCAMGeometry: + if type(obj) != GeometryObject: self.app.ui.menuprojectgeneratecnc.setVisible(False) - if type(obj) != FlatCAMGeometry and type(obj) != FlatCAMExcellon and type(obj) != FlatCAMGerber: + if type(obj) != GeometryObject and type(obj) != ExcellonObject and type(obj) != GerberObject: self.app.ui.menuprojectedit.setVisible(False) - if type(obj) != FlatCAMGerber and type(obj) != FlatCAMExcellon and type(obj) != FlatCAMCNCjob: + if type(obj) != GerberObject and type(obj) != ExcellonObject and type(obj) != CNCJobObject: self.app.ui.menuprojectviewsource.setVisible(False) - if type(obj) != FlatCAMGerber and type(obj) != FlatCAMGeometry and type(obj) != FlatCAMExcellon and \ - type(obj) != FlatCAMCNCjob: + if type(obj) != GerberObject and type(obj) != GeometryObject and type(obj) != ExcellonObject and \ + type(obj) != CNCJobObject: # meaning for Scripts and for Document type of FlatCAM object self.app.ui.menuprojectenable.setVisible(False) self.app.ui.menuprojectdisable.setVisible(False) @@ -532,21 +537,21 @@ class ObjectCollection(QtCore.QAbstractItemModel): # return QtWidgets.QAbstractItemModel.flags(self, index) def append(self, obj, active=False, to_index=None): - FlatCAMApp.App.log.debug(str(inspect.stack()[1][3]) + " --> OC.append()") + log.debug(str(inspect.stack()[1][3]) + " --> OC.append()") name = obj.options["name"] # Check promises and clear if exists if name in self.promises: self.promises.remove(name) - # FlatCAMApp.App.log.debug("Promised object %s became available." % name) - # FlatCAMApp.App.log.debug("%d promised objects remaining." % len(self.promises)) + # log.debug("Promised object %s became available." % name) + # log.debug("%d promised objects remaining." % len(self.promises)) # Prevent same name while name in self.get_names(): # ## Create a new name # Ends with number? - FlatCAMApp.App.log.debug("new_object(): Object name (%s) exists, changing." % name) + log.debug("new_object(): Object name (%s) exists, changing." % name) match = re.search(r'(.*[^\d])?(\d+)$', name) if match: # Yes: Increment the number! base = match.group(1) or '' @@ -596,7 +601,7 @@ class ObjectCollection(QtCore.QAbstractItemModel): :rtype: list """ - # FlatCAMApp.App.log.debug(str(inspect.stack()[1][3]) + " --> OC.get_names()") + # log.debug(str(inspect.stack()[1][3]) + " --> OC.get_names()") return [x.options['name'] for x in self.get_list()] def get_bounds(self): @@ -606,7 +611,7 @@ class ObjectCollection(QtCore.QAbstractItemModel): :return: [xmin, ymin, xmax, ymax] :rtype: list """ - FlatCAMApp.App.log.debug(str(inspect.stack()[1][3]) + "--> OC.get_bounds()") + log.debug(str(inspect.stack()[1][3]) + "--> OC.get_bounds()") # TODO: Move the operation out of here. @@ -624,7 +629,7 @@ class ObjectCollection(QtCore.QAbstractItemModel): xmax = max([xmax, gxmax]) ymax = max([ymax, gymax]) except Exception as e: - FlatCAMApp.App.log.warning("DEV WARNING: Tried to get bounds of empty geometry. %s" % str(e)) + log.warning("DEV WARNING: Tried to get bounds of empty geometry. %s" % str(e)) return [xmin, ymin, xmax, ymax] @@ -638,7 +643,7 @@ class ObjectCollection(QtCore.QAbstractItemModel): :return: The requested object or None if no such object. :rtype: FlatCAMObj or None """ - # FlatCAMApp.App.log.debug(str(inspect.stack()[1][3]) + "--> OC.get_by_name()") + # log.debug(str(inspect.stack()[1][3]) + "--> OC.get_by_name()") if isCaseSensitive is None or isCaseSensitive is True: for obj in self.get_list(): @@ -760,7 +765,7 @@ class ObjectCollection(QtCore.QAbstractItemModel): self.app.all_objects_list = self.get_list() def delete_all(self): - FlatCAMApp.App.log.debug(str(inspect.stack()[1][3]) + "--> OC.delete_all()") + log.debug(str(inspect.stack()[1][3]) + "--> OC.delete_all()") self.app.object_status_changed.emit(None, 'delete_all', '') @@ -897,8 +902,15 @@ class ObjectCollection(QtCore.QAbstractItemModel): self.set_inactive(name) def on_list_selection_change(self, current, previous): - # FlatCAMApp.App.log.debug("on_list_selection_change()") - # FlatCAMApp.App.log.debug("Current: %s, Previous %s" % (str(current), str(previous))) + """ + + :param current: Current selected item + :param previous: Previously selected item + :return: + """ + + # log.debug("on_list_selection_change()") + # log.debug("Current: %s, Previous %s" % (str(current), str(previous))) try: obj = current.indexes()[0].internalPointer().obj @@ -942,12 +954,12 @@ class ObjectCollection(QtCore.QAbstractItemModel): ) except IndexError: self.item_selected.emit('none') - # FlatCAMApp.App.log.debug("on_list_selection_change(): Index Error (Nothing selected?)") + # log.debug("on_list_selection_change(): Index Error (Nothing selected?)") self.app.inform.emit('') try: self.app.ui.selected_scroll_area.takeWidget() except Exception as e: - FlatCAMApp.App.log.debug("Nothing to remove. %s" % str(e)) + log.debug("Nothing to remove. %s" % str(e)) self.app.setup_component_editor() return diff --git a/camlib.py b/camlib.py index 44ba0106..da0854f9 100644 --- a/camlib.py +++ b/camlib.py @@ -33,9 +33,11 @@ from shapely.wkt import dumps as sdumps from shapely.geometry.base import BaseGeometry from shapely.geometry import shape -# needed for legacy mode +# --------------------------------------- +# NEEDED for Legacy mode # Used for solid polygons in Matplotlib from descartes.patch import PolygonPatch +# --------------------------------------- import collections from collections import Iterable @@ -44,6 +46,8 @@ import rasterio from rasterio.features import shapes import ezdxf +from FlatCAMCommon import GracefulException as grace + # TODO: Commented for FlatCAM packaging with cx_freeze # from scipy.spatial import KDTree, Delaunay # from scipy.spatial import Delaunay @@ -56,7 +60,7 @@ if platform.architecture()[0] == '64bit': from ortools.constraint_solver import routing_enums_pb2 import logging -import FlatCAMApp + import gettext import FlatCAMTranslation as fcTranslate import builtins @@ -635,26 +639,26 @@ class Geometry(object): def bounds_rec(obj): if type(obj) is list: - minx = np.Inf - miny = np.Inf - maxx = -np.Inf - maxy = -np.Inf + gminx = np.Inf + gminy = np.Inf + gmaxx = -np.Inf + gmaxy = -np.Inf for k in obj: if type(k) is dict: for key in k: minx_, miny_, maxx_, maxy_ = bounds_rec(k[key]) - minx = min(minx, minx_) - miny = min(miny, miny_) - maxx = max(maxx, maxx_) - maxy = max(maxy, maxy_) + gminx = min(gminx, minx_) + gminy = min(gminy, miny_) + gmaxx = max(gmaxx, maxx_) + gmaxy = max(gmaxy, maxy_) else: minx_, miny_, maxx_, maxy_ = bounds_rec(k) - minx = min(minx, minx_) - miny = min(miny, miny_) - maxx = max(maxx, maxx_) - maxy = max(maxy, maxy_) - return minx, miny, maxx, maxy + gminx = min(gminx, minx_) + gminy = min(gminy, miny_) + gmaxx = max(gmaxx, maxx_) + gmaxy = max(gmaxy, maxy_) + return gminx, gminy, gmaxx, gmaxy else: # it's a Shapely object, return it's bounds return obj.bounds @@ -678,7 +682,7 @@ class Geometry(object): maxx_list.append(maxx) maxy_list.append(maxy) - return(min(minx_list), min(miny_list), max(maxx_list), max(maxy_list)) + return min(minx_list), min(miny_list), max(maxx_list), max(maxy_list) else: if flatten: self.flatten(reset=True) @@ -710,7 +714,6 @@ class Geometry(object): # return 0, 0, 0, 0 # # if type(self.solid_geometry) is list: - # # TODO: This can be done faster. See comment from Shapely mailing lists. # if len(self.solid_geometry) == 0: # log.debug('solid_geometry is empty []') # return 0, 0, 0, 0 @@ -726,7 +729,6 @@ class Geometry(object): # return 0, 0, 0, 0 # # if type(self.solid_geometry) is list: - # # TODO: This can be done faster. See comment from Shapely mailing lists. # if len(self.solid_geometry) == 0: # log.debug('solid_geometry is empty []') # return 0, 0, 0, 0 @@ -930,7 +932,7 @@ class Geometry(object): if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace geo_iso = [] @@ -954,7 +956,7 @@ class Geometry(object): for pol in working_geo: if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace if offset == 0: geo_iso.append(pol) else: @@ -1005,13 +1007,13 @@ class Geometry(object): """ Imports shapes from an SVG file into the object's geometry. - :param filename: Path to the SVG file. - :type filename: str + :param filename: Path to the SVG file. + :type filename: str :param object_type: parameter passed further along - :param flip: Flip the vertically. - :type flip: bool - :param units: FlatCAM units - :return: None + :param flip: Flip the vertically. + :type flip: bool + :param units: FlatCAM units + :return: None """ log.debug("camlib.Geometry.import_svg()") @@ -1060,10 +1062,10 @@ class Geometry(object): """ Imports shapes from an DXF file into the object's geometry. - :param filename: Path to the DXF file. - :type filename: str - :param units: Application units - :type flip: str + :param filename: Path to the DXF file. + :type filename: str + :param object_type: + :param units: Application units :return: None """ @@ -1212,15 +1214,15 @@ class Geometry(object): This algorithm shrinks the edges of the polygon and takes the resulting edges as toolpaths. - :param polygon: Polygon to clear. - :param tooldia: Diameter of the tool. - :param steps_per_circle: number of linear segments to be used to approximate a circle - :param overlap: Overlap of toolpasses. - :param connect: Draw lines between disjoint segments to - minimize tool lifts. - :param contour: Paint around the edges. Inconsequential in - this painting method. - :param prog_plot: boolean; if Ture use the progressive plotting + :param polygon: Polygon to clear. + :param tooldia: Diameter of the tool. + :param steps_per_circle: number of linear segments to be used to approximate a circle + :param overlap: Overlap of toolpasses. + :param connect: Draw lines between disjoint segments to + minimize tool lifts. + :param contour: Paint around the edges. Inconsequential in + this painting method. + :param prog_plot: boolean; if Ture use the progressive plotting :return: """ @@ -1261,7 +1263,7 @@ class Geometry(object): while True: if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace # provide the app with a way to process the GUI events when in a blocking loop QtWidgets.QApplication.processEvents() @@ -1353,7 +1355,7 @@ class Geometry(object): while True: if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace # provide the app with a way to process the GUI events when in a blocking loop QtWidgets.QApplication.processEvents() @@ -1467,7 +1469,7 @@ class Geometry(object): while y > bot + tooldia / 1.999999999: if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace # provide the app with a way to process the GUI events when in a blocking loop QtWidgets.QApplication.processEvents() @@ -1504,7 +1506,7 @@ class Geometry(object): while x < right - tooldia / 1.999999999: if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace # provide the app with a way to process the GUI events when in a blocking loop QtWidgets.QApplication.processEvents() @@ -1594,15 +1596,15 @@ class Geometry(object): This algorithm draws parallel lines inside the polygon. - :param line: The target line that create painted polygon. - :param aperture_size: the size of the aperture that is used to draw the 'line' as a polygon - :type line: shapely.geometry.LineString or shapely.geometry.MultiLineString - :param tooldia: Tool diameter. - :param steps_per_circle: how many linear segments to use to approximate a circle - :param overlap: Tool path overlap percentage. - :param connect: Connect lines to avoid tool lifts. - :param contour: Paint around the edges. - :param prog_plot: boolean; if to use the progressive plotting + :param line: The target line that create painted polygon. + :param aperture_size: the size of the aperture that is used to draw the 'line' as a polygon + :type line: shapely.geometry.LineString or shapely.geometry.MultiLineString + :param tooldia: Tool diameter. + :param steps_per_circle: how many linear segments to use to approximate a circle + :param overlap: Tool path overlap percentage. + :param connect: Connect lines to avoid tool lifts. + :param contour: Paint around the edges. + :param prog_plot: boolean; if to use the progressive plotting :return: """ @@ -1635,7 +1637,7 @@ class Geometry(object): while delta < aperture_size / 2: if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace # provide the app with a way to process the GUI events when in a blocking loop QtWidgets.QApplication.processEvents() @@ -1800,7 +1802,7 @@ class Geometry(object): # #storage.insert(shape) # ## Iterate over geometry paths getting the nearest each time. - #optimized_paths = [] + # optimized_paths = [] optimized_paths = FlatCAMRTreeStorage() optimized_paths.get_points = get_pts path_count = 0 @@ -1870,12 +1872,13 @@ class Geometry(object): def path_connect(storage, origin=(0, 0)): """ Simplifies paths in the FlatCAMRTreeStorage storage by - connecting paths that touch on their enpoints. + connecting paths that touch on their endpoints. - :param storage: Storage containing the initial paths. - :rtype storage: FlatCAMRTreeStorage - :return: Simplified storage. - :rtype: FlatCAMRTreeStorage + :param storage: Storage containing the initial paths. + :rtype storage: FlatCAMRTreeStorage + :param origin: tuple; point from which to calculate the nearest point + :return: Simplified storage. + :rtype: FlatCAMRTreeStorage """ log.debug("path_connect()") @@ -1888,7 +1891,7 @@ class Geometry(object): # storage.get_points = get_pts # # for shape in pathlist: - # if shape is not None: # TODO: This shouldn't have happened. + # if shape is not None: # storage.insert(shape) path_count = 0 @@ -2113,11 +2116,11 @@ class Geometry(object): Mirrors the object around a specified axis passign through the given point. - :param axis: "X" or "Y" indicates around which axis to mirror. - :type axis: str - :param point: [x, y] point belonging to the mirror axis. - :type point: list - :return: None + :param axis: "X" or "Y" indicates around which axis to mirror. + :type axis: str + :param point: [x, y] point belonging to the mirror axis. + :type point: list + :return: None """ log.debug("camlib.Geometry.mirror()") @@ -2148,8 +2151,7 @@ class Geometry(object): # variables to display the percentage of work done self.geo_len = 0 try: - for g in self.tools[tool]['solid_geometry']: - self.geo_len += 1 + self.geo_len = len(self.tools[tool]['solid_geometry']) except TypeError: self.geo_len = 1 self.old_disp_number = 0 @@ -2160,19 +2162,16 @@ class Geometry(object): # variables to display the percentage of work done self.geo_len = 0 try: - for g in self.solid_geometry: - self.geo_len += 1 + self.geo_len = len(self.solid_geometry) except TypeError: self.geo_len = 1 self.old_disp_number = 0 self.el_count = 0 self.solid_geometry = mirror_geom(self.solid_geometry) - self.app.inform.emit('[success] %s...' % - _('Object was mirrored')) + self.app.inform.emit('[success] %s...' % _('Object was mirrored')) except AttributeError: - self.app.inform.emit('[ERROR_NOTCL] %s' % - _("Failed to mirror. No object selected")) + self.app.inform.emit('[ERROR_NOTCL] %s' % _("Failed to mirror. No object selected")) self.app.proc_container.new_text = '' @@ -2180,29 +2179,28 @@ class Geometry(object): """ Rotate an object by an angle (in degrees) around the provided coordinates. - Parameters - ---------- + :param angle: The angle of rotation are specified in degrees (default). Positive angles are counter-clockwise and negative are clockwise rotations. + :param point: The point of origin can be a keyword 'center' for the bounding box center (default), 'centroid' for the geometry's centroid, a Point object or a coordinate tuple (x0, y0). - See shapely manual for more information: - http://toblerity.org/shapely/manual.html#affine-transformations + See shapely manual for more information: http://toblerity.org/shapely/manual.html#affine-transformations """ log.debug("camlib.Geometry.rotate()") px, py = point def rotate_geom(obj): - if type(obj) is list: + try: new_obj = [] for g in obj: new_obj.append(rotate_geom(g)) return new_obj - else: + except TypeError: try: self.el_count += 1 disp_number = int(np.interp(self.el_count, [0, self.geo_len], [0, 100])) @@ -2220,8 +2218,7 @@ class Geometry(object): # variables to display the percentage of work done self.geo_len = 0 try: - for g in self.tools[tool]['solid_geometry']: - self.geo_len += 1 + self.geo_len = len(self.tools[tool]['solid_geometry']) except TypeError: self.geo_len = 1 self.old_disp_number = 0 @@ -2232,19 +2229,16 @@ class Geometry(object): # variables to display the percentage of work done self.geo_len = 0 try: - for g in self.solid_geometry: - self.geo_len += 1 + self.geo_len = len(self.solid_geometry) except TypeError: self.geo_len = 1 self.old_disp_number = 0 self.el_count = 0 self.solid_geometry = rotate_geom(self.solid_geometry) - self.app.inform.emit('[success] %s...' % - _('Object was rotated')) + self.app.inform.emit('[success] %s...' % _('Object was rotated')) except AttributeError: - self.app.inform.emit('[ERROR_NOTCL] %s' % - _("Failed to rotate. No object selected")) + self.app.inform.emit('[ERROR_NOTCL] %s' % _("Failed to rotate. No object selected")) self.app.proc_container.new_text = '' @@ -2252,28 +2246,29 @@ class Geometry(object): """ Shear/Skew the geometries of an object by angles along x and y dimensions. - Parameters - ---------- + :param angle_x: + :param angle_y: angle_x, angle_y : float, float The shear angle(s) for the x and y axes respectively. These can be specified in either degrees (default) or radians by setting use_radians=True. + + :param point: Origin point for Skew point: tuple of coordinates (x,y) - See shapely manual for more information: - http://toblerity.org/shapely/manual.html#affine-transformations + See shapely manual for more information: http://toblerity.org/shapely/manual.html#affine-transformations """ log.debug("camlib.Geometry.skew()") px, py = point def skew_geom(obj): - if type(obj) is list: + try: new_obj = [] for g in obj: new_obj.append(skew_geom(g)) return new_obj - else: + except TypeError: try: self.el_count += 1 disp_number = int(np.interp(self.el_count, [0, self.geo_len], [0, 100])) @@ -2291,8 +2286,7 @@ class Geometry(object): # variables to display the percentage of work done self.geo_len = 0 try: - for g in self.tools[tool]['solid_geometry']: - self.geo_len += 1 + self.geo_len = len(self.tools[tool]['solid_geometry']) except TypeError: self.geo_len = 1 self.old_disp_number = 0 @@ -2310,11 +2304,9 @@ class Geometry(object): self.el_count = 0 self.solid_geometry = skew_geom(self.solid_geometry) - self.app.inform.emit('[success] %s...' % - _('Object was skewed')) + self.app.inform.emit('[success] %s...' % _('Object was skewed')) except AttributeError: - self.app.inform.emit('[ERROR_NOTCL] %s' % - _("Failed to skew. No object selected")) + self.app.inform.emit('[ERROR_NOTCL] %s' % _("Failed to skew. No object selected")) self.app.proc_container.new_text = '' @@ -2328,8 +2320,9 @@ class Geometry(object): def buffer(self, distance, join, factor): """ - :param distance: if 'factor' is True then distance is the factor - :param factor: True or False (None) + :param distance: if 'factor' is True then distance is the factor + :param join: The kind of join used by the shapely buffer method: round, square or bevel + :param factor: True or False (None) :return: """ @@ -2477,6 +2470,8 @@ class CNCjob(Geometry): self.multidepth = False self.z_depthpercut = depthpercut + self.extracut_length = None + self.excellon_optimization_type = 'B' # if set True then the GCode generation will use UI; used in Excellon GVode for now @@ -2779,7 +2774,7 @@ class CNCjob(Geometry): for drill in exobj.drills: if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace if drill['tool'] in tools: try: @@ -2813,11 +2808,11 @@ class CNCjob(Geometry): def __init__(self, tool): """Initialize distance array.""" - locations = create_data_array(tool) + locs = create_data_array(tool) self.matrix = {} - if locations: - size = len(locations) + if locs: + size = len(locs) for from_node in range(size): self.matrix[from_node] = {} @@ -2825,10 +2820,10 @@ class CNCjob(Geometry): if from_node == to_node: self.matrix[from_node][to_node] = 0 else: - x1 = locations[from_node][0] - y1 = locations[from_node][1] - x2 = locations[to_node][0] - y2 = locations[to_node][1] + x1 = locs[from_node][0] + y1 = locs[from_node][1] + x2 = locs[to_node][0] + y2 = locs[to_node][1] self.matrix[from_node][to_node] = distance_euclidian(x1, y1, x2, y2) # def Distance(self, from_node, to_node): @@ -2846,8 +2841,8 @@ class CNCjob(Geometry): if tool not in points: return None - for point in points[tool]: - loc_list.append((point.coords.xy[0][0], point.coords.xy[1][0])) + for pt in points[tool]: + loc_list.append((pt.coords.xy[0][0], pt.coords.xy[1][0])) return loc_list if self.xy_toolchange is not None: @@ -2873,7 +2868,7 @@ class CNCjob(Geometry): for tool in tools: if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace self.tool = tool self.postdata['toolC'] = exobj.tools[tool]["C"] @@ -2973,7 +2968,7 @@ class CNCjob(Geometry): while not routing.IsEnd(node): if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace node_list.append(node) node = assignment.Value(routing.NextVar(node)) @@ -2987,7 +2982,7 @@ class CNCjob(Geometry): if tool in points: if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace # Tool change sequence (optional) if self.toolchange: @@ -3031,7 +3026,7 @@ class CNCjob(Geometry): for k in node_list: if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace locx = locations[k][0] locy = locations[k][1] @@ -3103,7 +3098,7 @@ class CNCjob(Geometry): for tool in tools: if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace self.tool = tool self.postdata['toolC']=exobj.tools[tool]["C"] @@ -3206,7 +3201,7 @@ class CNCjob(Geometry): if tool in points: if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace # Tool change sequence (optional) if self.toolchange: @@ -3249,7 +3244,7 @@ class CNCjob(Geometry): for k in node_list: if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace locx = locations[k][0] locy = locations[k][1] @@ -3323,7 +3318,7 @@ class CNCjob(Geometry): for tool in tools: if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace if exobj.drills: self.tool = tool @@ -3370,7 +3365,7 @@ class CNCjob(Geometry): if tool in points: if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace # Tool change sequence (optional) if self.toolchange: @@ -3418,7 +3413,7 @@ class CNCjob(Geometry): for point in node_list: if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace locx = point[0] locy = point[1] @@ -3675,13 +3670,13 @@ class CNCjob(Geometry): log.debug("Indexing geometry before generating G-Code...") self.app.inform.emit(_("Indexing geometry before generating G-Code...")) - for shape in flat_geometry: + for geo_shape in flat_geometry: if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace - if shape is not None: # TODO: This shouldn't have happened. - storage.insert(shape) + if geo_shape is not None: + storage.insert(geo_shape) # self.input_geometry_bounds = geometry.bounds() @@ -3757,7 +3752,7 @@ class CNCjob(Geometry): while True: if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace path_count += 1 @@ -3839,14 +3834,31 @@ class CNCjob(Geometry): :param geometry: :param append: :param tooldia: + :param offset: :param tolerance: - :param multidepth: If True, use multiple passes to reach - the desired depth. - :param depthpercut: Maximum depth in each pass. - :param extracut: Adds (or not) an extra cut at the end of each path - overlapping the first point in path to ensure complete copper removal - :param extracut_length: The extra cut length - :return: None + :param z_cut: + :param z_move: + :param feedrate: + :param feedrate_z: + :param feedrate_rapid: + :param spindlespeed: + :param spindledir: + :param dwell: + :param dwelltime: + :param multidepth: If True, use multiple passes to reach the desired depth. + :param depthpercut: Maximum depth in each pass. + :param toolchange: + :param toolchangez: + :param toolchangexy: + :param extracut: Adds (or not) an extra cut at the end of each path overlapping the first point in + path to ensure complete copper removal + :param extracut_length: The extra cut length + :param startz: + :param endz: + :param endxy: + :param pp_geometry_name: + :param tool_no: + :return: None """ if not isinstance(geometry, Geometry): @@ -4049,13 +4061,13 @@ class CNCjob(Geometry): log.debug("Indexing geometry before generating G-Code...") self.app.inform.emit(_("Indexing geometry before generating G-Code...")) - for shape in flat_geometry: + for geo_shape in flat_geometry: if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace - if shape is not None: # TODO: This shouldn't have happened. - storage.insert(shape) + if geo_shape is not None: + storage.insert(geo_shape) if not append: self.gcode = "" @@ -4080,7 +4092,7 @@ class CNCjob(Geometry): if toolchange is False: self.gcode += self.doformat(p.lift_code, x=self.oldx, y=self.oldy) # Move (up) to travel height - self.gcode += self.doformat(p.startz_code, x=self.oldx , y=self.oldy) + self.gcode += self.doformat(p.startz_code, x=self.oldx, y=self.oldy) if toolchange: # if "line_xyz" in self.pp_geometry_name: @@ -4130,7 +4142,7 @@ class CNCjob(Geometry): while True: if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace path_count += 1 @@ -4219,7 +4231,6 @@ class CNCjob(Geometry): self.app.inform.emit('[ERROR_NOTCL] %s' % _("There is no tool data in the SolderPaste geometry.")) - # this is the tool diameter, it is used as such to accommodate the preprocessor who need the tool diameter # given under the name 'toolC' @@ -4254,9 +4265,13 @@ class CNCjob(Geometry): # Store the geometry log.debug("Indexing geometry before generating G-Code...") - for shape in flat_geometry: - if shape is not None: - storage.insert(shape) + for geo_shape in flat_geometry: + if self.app.abort_flag: + # graceful abort requested by the user + raise grace + + if geo_shape is not None: + storage.insert(geo_shape) # Initial G-Code self.gcode = self.doformat(p.start_code) @@ -4278,7 +4293,7 @@ class CNCjob(Geometry): while True: if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace path_count += 1 @@ -4303,7 +4318,7 @@ class CNCjob(Geometry): log.debug("Finishing SolderPste G-Code... %s paths traced." % path_count) self.app.inform.emit( - '%s... %s %s' % (_("Finished SolderPste G-Code generation"), str(path_count), _("paths traced.")) + '%s... %s %s' % (_("Finished SolderPaste G-Code generation"), str(path_count), _("paths traced.")) ) # Finish @@ -5014,18 +5029,25 @@ class CNCjob(Geometry): z_cut=None, z_move=None, zdownrate=None, feedrate=None, feedrate_z=None, feedrate_rapid=None, cont=False, old_point=(0, 0)): """ + Generates G-code to cut along the linear feature. - :param linear: The path to cut along. - :type: Shapely.LinearRing or Shapely.Linear String - :param tolerance: All points in the simplified object will be within the - tolerance distance of the original geometry. - :type tolerance: float - :param feedrate: speed for cut on X - Y plane - :param feedrate_z: speed for cut on Z plane - :param feedrate_rapid: speed to move between cuts; usually is G0 but some CNC require to specify it - :return: G-code to cut along the linear feature. - :rtype: str + :param linear: The path to cut along. + :type: Shapely.LinearRing or Shapely.Linear String + :param tolerance: All points in the simplified object will be within the + tolerance distance of the original geometry. + :type tolerance: float + :param down: + :param up: + :param z_cut: + :param z_move: + :param zdownrate: + :param feedrate: speed for cut on X - Y plane + :param feedrate_z: speed for cut on Z plane + :param feedrate_rapid: speed to move between cuts; usually is G0 but some CNC require to specify it + :param cont: + :param old_point: + :return: G-code to cut along the linear feature. """ if z_cut is None: @@ -5087,7 +5109,7 @@ class CNCjob(Geometry): for pt in path[1:]: if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace if self.coordinates_type == "G90": # For Absolute coordinates type G90 @@ -5112,22 +5134,30 @@ class CNCjob(Geometry): return gcode def linear2gcode_extra(self, linear, extracut_length, tolerance=0, down=True, up=True, - z_cut=None, z_move=None, zdownrate=None, - feedrate=None, feedrate_z=None, feedrate_rapid=None, cont=False, old_point=(0, 0)): + z_cut=None, z_move=None, zdownrate=None, + feedrate=None, feedrate_z=None, feedrate_rapid=None, cont=False, old_point=(0, 0)): """ + Generates G-code to cut along the linear feature. - :param linear: The path to cut along. - :param extracut_length: how much to cut extra over the first point at the end of the path - :type: Shapely.LinearRing or Shapely.Linear String - :param tolerance: All points in the simplified object will be within the - tolerance distance of the original geometry. - :type tolerance: float - :param feedrate: speed for cut on X - Y plane - :param feedrate_z: speed for cut on Z plane - :param feedrate_rapid: speed to move between cuts; usually is G0 but some CNC require to specify it - :return: G-code to cut along the linear feature. - :rtype: str + :param linear: The path to cut along. + :type: Shapely.LinearRing or Shapely.Linear String + :param extracut_length: how much to cut extra over the first point at the end of the path + :param tolerance: All points in the simplified object will be within the + tolerance distance of the original geometry. + :type tolerance: float + :param down: + :param up: + :param z_cut: + :param z_move: + :param zdownrate: + :param feedrate: speed for cut on X - Y plane + :param feedrate_z: speed for cut on Z plane + :param feedrate_rapid: speed to move between cuts; usually is G0 but some CNC require to specify it + :param cont: + :param old_point: + :return: G-code to cut along the linear feature. + :rtype: str """ if z_cut is None: @@ -5190,7 +5220,7 @@ class CNCjob(Geometry): for pt in path[1:]: if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace if self.coordinates_type == "G90": # For Absolute coordinates type G90 @@ -5342,7 +5372,7 @@ class CNCjob(Geometry): if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace path = list(point.coords) p = self.pp_geometry @@ -5401,7 +5431,7 @@ class CNCjob(Geometry): for g in self.gcode_parsed: if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace if g['kind'][0] == 'C': cuts.append(g) @@ -5417,7 +5447,7 @@ class CNCjob(Geometry): if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace if cuts: cutsgeom = cascaded_union([geo['geom'] for geo in cuts]) @@ -5433,38 +5463,38 @@ class CNCjob(Geometry): return svg_elem - def bounds(self): + def bounds(self, flatten=None): """ Returns coordinates of rectangular bounds of geometry: (xmin, ymin, xmax, ymax). + + :param flatten: Not used, it is here for compatibility with base class method """ - # fixed issue of getting bounds only for one level lists of objects - # now it can get bounds for nested lists of objects log.debug("camlib.CNCJob.bounds()") def bounds_rec(obj): if type(obj) is list: - minx = np.Inf - miny = np.Inf - maxx = -np.Inf - maxy = -np.Inf + cminx = np.Inf + cminy = np.Inf + cmaxx = -np.Inf + cmaxy = -np.Inf for k in obj: if type(k) is dict: for key in k: minx_, miny_, maxx_, maxy_ = bounds_rec(k[key]) - minx = min(minx, minx_) - miny = min(miny, miny_) - maxx = max(maxx, maxx_) - maxy = max(maxy, maxy_) + cminx = min(cminx, minx_) + cminy = min(cminy, miny_) + cmaxx = max(cmaxx, maxx_) + cmaxy = max(cmaxy, maxy_) else: minx_, miny_, maxx_, maxy_ = bounds_rec(k) - minx = min(minx, minx_) - miny = min(miny, miny_) - maxx = max(maxx, maxx_) - maxy = max(maxy, maxy_) - return minx, miny, maxx, maxy + cminx = min(cminx, minx_) + cminy = min(cminy, miny_) + cmaxx = max(cmaxx, maxx_) + cmaxy = max(cmaxy, maxy_) + return cminx, cminy, cmaxx, cmaxy else: # it's a Shapely object, return it's bounds return obj.bounds @@ -5510,12 +5540,12 @@ class CNCjob(Geometry): given factor. Tool sizes, feedrates, or Z-axis dimensions are not altered. - :param factor: Number by which to scale the object. - :type factor: float - :param point: the (x,y) coords for the point of origin of scale - :type tuple of floats - :return: None - :rtype: None + :param factor: Number by which to scale the object. + :type factor: float + :param point: the (x,y) coords for the point of origin of scale + :type tuple of floats + :return: None + :rtype: None """ log.debug("camlib.CNCJob.scale()") @@ -5638,8 +5668,7 @@ class CNCjob(Geometry): # variables to display the percentage of work done self.geo_len = 0 try: - for g in self.gcode_parsed: - self.geo_len += 1 + self.geo_len = len(self.gcode_parsed) except TypeError: self.geo_len = 1 self.old_disp_number = 0 @@ -5667,8 +5696,7 @@ class CNCjob(Geometry): # variables to display the percentage of work done self.geo_len = 0 try: - for g in v['gcode_parsed']: - self.geo_len += 1 + self.geo_len = len(v['gcode_parsed']) except TypeError: self.geo_len = 1 self.old_disp_number = 0 @@ -5700,9 +5728,9 @@ class CNCjob(Geometry): g_offsetx_re, g_offsety_re, multitool, cnnc_tools are attributes of FlatCAMCNCJob class in camlib - :param vect: (x, y) offset vector. - :type vect: tuple - :return: None + :param vect: (x, y) offset vector. + :type vect: tuple + :return: None """ log.debug("camlib.CNCJob.offset()") @@ -5748,8 +5776,7 @@ class CNCjob(Geometry): # variables to display the percentage of work done self.geo_len = 0 try: - for g in self.gcode_parsed: - self.geo_len += 1 + self.geo_len = len(self.gcode_parsed) except TypeError: self.geo_len = 1 self.old_disp_number = 0 @@ -5777,8 +5804,7 @@ class CNCjob(Geometry): # variables to display the percentage of work done self.geo_len = 0 try: - for g in v['gcode_parsed']: - self.geo_len += 1 + self.geo_len = len(v['gcode_parsed']) except TypeError: self.geo_len = 1 self.old_disp_number = 0 @@ -5804,9 +5830,10 @@ class CNCjob(Geometry): def mirror(self, axis, point): """ - Mirror the geometrys of an object by an given axis around the coordinates of the 'point' - :param angle: - :param point: tupple of coordinates (x,y) + Mirror the geometry of an object by an given axis around the coordinates of the 'point' + + :param axis: Axis for Mirror + :param point: tuple of coordinates (x,y). Point of origin for Mirror :return: """ log.debug("camlib.CNCJob.mirror()") @@ -5817,8 +5844,7 @@ class CNCjob(Geometry): # variables to display the percentage of work done self.geo_len = 0 try: - for g in self.gcode_parsed: - self.geo_len += 1 + self.geo_len = len(self.gcode_parsed) except TypeError: self.geo_len = 1 self.old_disp_number = 0 @@ -5843,16 +5869,16 @@ class CNCjob(Geometry): """ Shear/Skew the geometries of an object by angles along x and y dimensions. - Parameters - ---------- + :param angle_x: + :param angle_y: angle_x, angle_y : float, float The shear angle(s) for the x and y axes respectively. These can be specified in either degrees (default) or radians by setting use_radians=True. - point: tupple of coordinates (x,y) - See shapely manual for more information: - http://toblerity.org/shapely/manual.html#affine-transformations + :param point: tupple of coordinates (x,y) + + See shapely manual for more information: http://toblerity.org/shapely/manual.html#affine-transformations """ log.debug("camlib.CNCJob.skew()") @@ -5861,8 +5887,7 @@ class CNCjob(Geometry): # variables to display the percentage of work done self.geo_len = 0 try: - for g in self.gcode_parsed: - self.geo_len += 1 + self.geo_len = len(self.gcode_parsed) except TypeError: self.geo_len = 1 self.old_disp_number = 0 @@ -5885,9 +5910,10 @@ class CNCjob(Geometry): def rotate(self, angle, point): """ - Rotate the geometrys of an object by an given angle around the coordinates of the 'point' - :param angle: - :param point: tupple of coordinates (x,y) + Rotate the geometry of an object by an given angle around the coordinates of the 'point' + + :param angle: Angle of Rotation + :param point: tuple of coordinates (x,y). Origin point for Rotation :return: """ log.debug("camlib.CNCJob.rotate()") @@ -5897,8 +5923,7 @@ class CNCjob(Geometry): # variables to display the percentage of work done self.geo_len = 0 try: - for g in self.gcode_parsed: - self.geo_len += 1 + self.geo_len = len(self.gcode_parsed) except TypeError: self.geo_len = 1 self.old_disp_number = 0 @@ -5921,6 +5946,12 @@ class CNCjob(Geometry): def get_bounds(geometry_list): + """ + Will return limit values for a list of geometries + + :param geometry_list: List of geometries for which to calculate the bounds limits + :return: + """ xmin = np.Inf ymin = np.Inf xmax = -np.Inf @@ -5943,21 +5974,21 @@ def arc(center, radius, start, stop, direction, steps_per_circ): """ Creates a list of point along the specified arc. - :param center: Coordinates of the center [x, y] - :type center: list - :param radius: Radius of the arc. - :type radius: float - :param start: Starting angle in radians - :type start: float - :param stop: End angle in radians - :type stop: float - :param direction: Orientation of the arc, "CW" or "CCW" - :type direction: string - :param steps_per_circ: Number of straight line segments to - represent a circle. - :type steps_per_circ: int - :return: The desired arc, as list of tuples - :rtype: list + :param center: Coordinates of the center [x, y] + :type center: list + :param radius: Radius of the arc. + :type radius: float + :param start: Starting angle in radians + :type start: float + :param stop: End angle in radians + :type stop: float + :param direction: Orientation of the arc, "CW" or "CCW" + :type direction: string + :param steps_per_circ: Number of straight line segments to + represent a circle. + :type steps_per_circ: int + :return: The desired arc, as list of tuples + :rtype: list """ # TODO: Resolution should be established by maximum error from the exact arc. @@ -6031,10 +6062,10 @@ def to_dict(obj): * ApertureMacro * BaseGeometry - :param obj: Shapely geometry. - :type obj: BaseGeometry - :return: Dictionary with serializable form if ``obj`` was - BaseGeometry or ApertureMacro, otherwise returns ``obj``. + :param obj: Shapely geometry. + :type obj: BaseGeometry + :return: Dictionary with serializable form if ``obj`` was + BaseGeometry or ApertureMacro, otherwise returns ``obj``. """ if isinstance(obj, ApertureMacro): return { @@ -6053,9 +6084,9 @@ def dict2obj(d): """ Default deserializer. - :param d: Serializable dictionary representation of an object - to be reconstructed. - :return: Reconstructed object. + :param d: Serializable dictionary representation of an object + to be reconstructed. + :return: Reconstructed object. """ if '__class__' in d and '__inst__' in d: if d['__class__'] == "Shply": @@ -6390,10 +6421,10 @@ def three_point_circle(p1, p2, p3): Computes the center and radius of a circle from 3 points on its circumference. - :param p1: Point 1 - :param p2: Point 2 - :param p3: Point 3 - :return: center, radius + :param p1: Point 1 + :param p2: Point 2 + :param p3: Point 3 + :return: center, radius """ # Midpoints a1 = (p1 + p2) / 2.0 diff --git a/flatcamEditors/FlatCAMExcEditor.py b/flatcamEditors/FlatCAMExcEditor.py index 2baaac5d..9220aba5 100644 --- a/flatcamEditors/FlatCAMExcEditor.py +++ b/flatcamEditors/FlatCAMExcEditor.py @@ -12,7 +12,6 @@ from camlib import distance, arc, FlatCAMRTreeStorage from flatcamGUI.GUIElements import FCEntry, FCComboBox, FCTable, FCDoubleSpinner, RadioSet, FCSpinner from flatcamEditors.FlatCAMGeoEditor import FCShapeTool, DrawTool, DrawToolShape, DrawToolUtilityShape, FlatCAMGeoEditor from flatcamParsers.ParseExcellon import Excellon -import FlatCAMApp from shapely.geometry import LineString, LinearRing, MultiLineString, Polygon, MultiPolygon, Point import shapely.affinity as affinity @@ -179,7 +178,7 @@ class FCDrillArray(FCShapeTool): try: QtGui.QGuiApplication.restoreOverrideCursor() - except Exception as e: + except Exception: pass self.cursor = QtGui.QCursor(QtGui.QPixmap(self.draw_app.app.resource_location + '/aero_drill_array.png')) @@ -1516,7 +1515,7 @@ class FlatCAMExcEditor(QtCore.QObject): draw_shape_idx = -1 def __init__(self, app): - assert isinstance(app, FlatCAMApp.App), "Expected the app to be a FlatCAMApp.App, got %s" % type(app) + # assert isinstance(app, FlatCAMApp.App), "Expected the app to be a FlatCAMApp.App, got %s" % type(app) super(FlatCAMExcEditor, self).__init__() @@ -2230,8 +2229,8 @@ 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 - def entry2option(option, entry): - self.options[option] = float(entry.text()) + # def entry2option(option, entry): + # self.options[option] = float(entry.text()) # Event signals disconnect id holders self.mp = None @@ -2388,7 +2387,7 @@ class FlatCAMExcEditor(QtCore.QObject): try: # Find no of slots for the current tool - for slot in self.slots: + for slot in self.slot_points_edit: if slot['tool'] == tool_no: slot_cnt += 1 @@ -2661,15 +2660,13 @@ class FlatCAMExcEditor(QtCore.QObject): # self.tools_table_exc.selectionModel().currentChanged.disconnect() self.is_modified = True - new_dia = None + # new_dia = None - if self.tools_table_exc.currentItem() is not None: - try: - new_dia = float(self.tools_table_exc.currentItem().text()) - except ValueError as e: - log.debug("FlatCAMExcEditor.on_tool_edit() --> %s" % str(e)) - self.tools_table_exc.setCurrentItem(None) - return + try: + new_dia = float(self.tools_table_exc.currentItem().text()) + except ValueError as e: + log.debug("FlatCAMExcEditor.on_tool_edit() --> %s" % str(e)) + return row_of_item_changed = self.tools_table_exc.currentRow() # rows start with 0, tools start with 1 so we adjust the value by 1 @@ -3042,7 +3039,7 @@ class FlatCAMExcEditor(QtCore.QObject): Imports the geometry from the given FlatCAM Excellon object into the editor. - :param exc_obj: FlatCAMExcellon object + :param exc_obj: ExcellonObject object :return: None """ @@ -3118,7 +3115,7 @@ class FlatCAMExcEditor(QtCore.QObject): """ Create a new Excellon object that contain the edited content of the source Excellon object - :param exc_obj: FlatCAMExcellon + :param exc_obj: ExcellonObject :return: None """ @@ -3297,7 +3294,8 @@ class FlatCAMExcEditor(QtCore.QObject): return self.edited_obj_name - def update_options(self, obj): + @staticmethod + def update_options(obj): try: if not obj.options: obj.options = {} @@ -3316,10 +3314,14 @@ class FlatCAMExcEditor(QtCore.QObject): """ Creates a new Excellon object for the edited Excellon. Thread-safe. - :param outname: Name of the resulting object. None causes the - name to be that of the file. - :type outname: str - :return: None + :param outname: Name of the resulting object. None causes the + name to be that of the file. + :type outname: str + + :param n_drills: The new Drills storage + :param n_slots: The new Slots storage + :param n_tools: The new Tools storage + :return: None """ self.app.log.debug("Update the Excellon object with edited content. Source is %s" % @@ -3429,12 +3431,12 @@ class FlatCAMExcEditor(QtCore.QObject): self.replot() - def toolbar_tool_toggle(self, key): - self.options[key] = self.sender().isChecked() - if self.options[key] is True: - return 1 - else: - return 0 + # def toolbar_tool_toggle(self, key): + # self.options[key] = self.sender().isChecked() + # if self.options[key] is True: + # return 1 + # else: + # return 0 def on_canvas_click(self, event): """ @@ -3446,12 +3448,12 @@ class FlatCAMExcEditor(QtCore.QObject): """ if self.app.is_legacy is False: event_pos = event.pos - event_is_dragging = event.is_dragging - right_button = 2 + # event_is_dragging = event.is_dragging + # right_button = 2 else: event_pos = (event.xdata, event.ydata) - event_is_dragging = self.app.plotcanvas.is_dragging - right_button = 3 + # event_is_dragging = self.app.plotcanvas.is_dragging + # right_button = 3 self.pos = self.canvas.translate_coords(event_pos) @@ -3575,8 +3577,8 @@ class FlatCAMExcEditor(QtCore.QObject): if isinstance(shape, DrawToolUtilityShape): self.utility.append(shape) - else: - self.storage.insert(shape) # TODO: Check performance + # else: + # self.storage.insert(shape) def on_exc_click_release(self, event): """ @@ -3591,11 +3593,11 @@ class FlatCAMExcEditor(QtCore.QObject): if self.app.is_legacy is False: event_pos = event.pos - event_is_dragging = event.is_dragging + # event_is_dragging = event.is_dragging right_button = 2 else: event_pos = (event.xdata, event.ydata) - event_is_dragging = self.app.plotcanvas.is_dragging + # event_is_dragging = self.app.plotcanvas.is_dragging right_button = 3 pos_canvas = self.canvas.translate_coords(event_pos) @@ -4027,7 +4029,7 @@ class FlatCAMExcEditor(QtCore.QObject): del self.slot_points_edit[storage][0] if del_shape in self.selected: - self.selected.remove(del_shape) # TODO: Check performance + self.selected.remove(del_shape) def delete_utility_geometry(self): for_deletion = [util_shape for util_shape in self.utility] diff --git a/flatcamEditors/FlatCAMGeoEditor.py b/flatcamEditors/FlatCAMGeoEditor.py index a3761201..d329bfcb 100644 --- a/flatcamEditors/FlatCAMGeoEditor.py +++ b/flatcamEditors/FlatCAMGeoEditor.py @@ -20,7 +20,6 @@ from flatcamGUI.ObjectUI import RadioSet from flatcamGUI.GUIElements import OptionalInputSection, FCCheckBox, FCEntry, FCComboBox, FCTextAreaRich, \ FCTable, FCDoubleSpinner, FCButton, EvalEntry2, FCInputDialog, FCTree from flatcamParsers.ParseFont import * -import FlatCAMApp from shapely.geometry import LineString, LinearRing, MultiLineString, Polygon, MultiPolygon from shapely.ops import cascaded_union, unary_union, linemerge @@ -88,8 +87,8 @@ class BufferSelectionTool(FlatCAMTool): self.buffer_corner_lbl.setToolTip( _("There are 3 types of corners:\n" " - 'Round': the corner is rounded for exterior buffer.\n" - " - 'Square:' the corner is met in a sharp angle for exterior buffer.\n" - " - 'Beveled:' the corner is a line that directly connects the features meeting in the corner") + " - 'Square': the corner is met in a sharp angle for exterior buffer.\n" + " - 'Beveled': the corner is a line that directly connects the features meeting in the corner") ) self.buffer_corner_cb = FCComboBox() self.buffer_corner_cb.addItem(_("Round")) @@ -3299,8 +3298,8 @@ class FlatCAMGeoEditor(QtCore.QObject): draw_shape_idx = -1 def __init__(self, app, disabled=False): - assert isinstance(app, FlatCAMApp.App), \ - "Expected the app to be a FlatCAMApp.App, got %s" % type(app) + # assert isinstance(app, FlatCAMApp.App), \ + # "Expected the app to be a FlatCAMApp.App, got %s" % type(app) super(FlatCAMGeoEditor, self).__init__() @@ -4011,6 +4010,7 @@ class FlatCAMGeoEditor(QtCore.QObject): :return: Boolean. Status of the checkbox that toggled the Editor Tool """ cb_widget = self.sender() + assert isinstance(cb_widget, QtWidgets.QAction), "Expected a QAction got %s" % type(cb_widget) self.options[key] = cb_widget.isChecked() return 1 if self.options[key] is True else 0 @@ -4035,7 +4035,7 @@ class FlatCAMGeoEditor(QtCore.QObject): Imports the geometry from the given FlatCAM Geometry object into the editor. - :param fcgeometry: FlatCAMGeometry + :param fcgeometry: GeometryObject :param multigeo_tool: A tool for the case of the edited geometry being of type 'multigeo' :return: None """ @@ -4750,7 +4750,7 @@ class FlatCAMGeoEditor(QtCore.QObject): Transfers the geometry tool shape buffer to the selected geometry object. The geometry already in the object are removed. - :param fcgeometry: FlatCAMGeometry + :param fcgeometry: GeometryObject :return: None """ if self.multigeo_tool: diff --git a/flatcamEditors/FlatCAMGrbEditor.py b/flatcamEditors/FlatCAMGrbEditor.py index a1052495..b1233e6e 100644 --- a/flatcamEditors/FlatCAMGrbEditor.py +++ b/flatcamEditors/FlatCAMGrbEditor.py @@ -21,7 +21,6 @@ from camlib import distance, arc, three_point_circle from flatcamGUI.GUIElements import FCEntry, FCComboBox, FCTable, FCDoubleSpinner, FCSpinner, RadioSet, \ EvalEntry2, FCInputDialog, FCButton, OptionalInputSection, FCCheckBox from FlatCAMTool import FlatCAMTool -import FlatCAMApp import numpy as np from numpy.linalg import norm as numpy_norm @@ -182,6 +181,7 @@ class FCShapeTool(DrawTool): def __init__(self, draw_app): DrawTool.__init__(self, draw_app) + self.name = None def make(self): pass @@ -199,7 +199,7 @@ class FCPad(FCShapeTool): try: QtGui.QGuiApplication.restoreOverrideCursor() - except Exception as e: + except Exception: pass self.cursor = QtGui.QCursor(QtGui.QPixmap(self.draw_app.app.resource_location + '/aero_circle.png')) QtGui.QGuiApplication.setOverrideCursor(self.cursor) @@ -1415,7 +1415,7 @@ class FCDisc(FCShapeTool): try: QtGui.QGuiApplication.restoreOverrideCursor() - except Exception as e: + except Exception: pass self.cursor = QtGui.QCursor(QtGui.QPixmap(self.draw_app.app.resource_location + '/aero_disc.png')) QtGui.QGuiApplication.setOverrideCursor(self.cursor) @@ -2422,8 +2422,8 @@ class FlatCAMGrbEditor(QtCore.QObject): mp_finished = QtCore.pyqtSignal(list) def __init__(self, app): - assert isinstance(app, FlatCAMApp.App), \ - "Expected the app to be a FlatCAMApp.App, got %s" % type(app) + # assert isinstance(app, FlatCAMApp.App), \ + # "Expected the app to be a FlatCAMApp.App, got %s" % type(app) super(FlatCAMGrbEditor, self).__init__() @@ -2621,8 +2621,8 @@ class FlatCAMGrbEditor(QtCore.QObject): self.buffer_corner_lbl.setToolTip( _("There are 3 types of corners:\n" " - 'Round': the corner is rounded.\n" - " - 'Square:' the corner is met in a sharp angle.\n" - " - 'Beveled:' the corner is a line that directly connects the features meeting in the corner") + " - 'Square': the corner is met in a sharp angle.\n" + " - 'Beveled': the corner is a line that directly connects the features meeting in the corner") ) self.buffer_corner_cb = FCComboBox() self.buffer_corner_cb.addItem(_("Round")) @@ -3479,7 +3479,7 @@ class FlatCAMGrbEditor(QtCore.QObject): current_table_dia_edited = float(self.apertures_table.currentItem().text()) except ValueError as e: log.debug("FlatCAMExcEditor.on_tool_edit() --> %s" % str(e)) - self.apertures_table.setCurrentItem(None) + # self.apertures_table.setCurrentItem(None) return row_of_item_changed = self.apertures_table.currentRow() @@ -3833,7 +3833,7 @@ class FlatCAMGrbEditor(QtCore.QObject): Imports the geometry found in self.apertures from the given FlatCAM Gerber object into the editor. - :param orig_grb_obj: FlatCAMExcellon + :param orig_grb_obj: ExcellonObject :return: None """ @@ -3956,10 +3956,10 @@ class FlatCAMGrbEditor(QtCore.QObject): global_clear_geo = [] # create one big geometry made out of all 'negative' (clear) polygons - for apid in app_obj.gerber_obj.apertures: + for aper_id in app_obj.gerber_obj.apertures: # first check if we have any clear_geometry (LPC) and if yes added it to the global_clear_geo - if 'geometry' in app_obj.gerber_obj.apertures[apid]: - for elem in app_obj.gerber_obj.apertures[apid]['geometry']: + if 'geometry' in app_obj.gerber_obj.apertures[aper_id]: + for elem in app_obj.gerber_obj.apertures[aper_id]['geometry']: if 'clear' in elem: global_clear_geo.append(elem['clear']) log.warning("Found %d clear polygons." % len(global_clear_geo)) @@ -3967,7 +3967,7 @@ class FlatCAMGrbEditor(QtCore.QObject): if global_clear_geo: global_clear_geo = MultiPolygon(global_clear_geo) if isinstance(global_clear_geo, Polygon): - global_clear_geo = list(global_clear_geo) + global_clear_geo = [global_clear_geo] # we subtract the big "negative" (clear) geometry from each solid polygon but only the part of # clear geometry that fits inside the solid. otherwise we may loose the solid @@ -3979,8 +3979,8 @@ class FlatCAMGrbEditor(QtCore.QObject): # solid_geo = elem['solid'] # for clear_geo in global_clear_geo: # # Make sure that the clear_geo is within the solid_geo otherwise we loose - # # the solid_geometry. We want for clear_geometry just to cut into solid_geometry not to - # # delete it + # # the solid_geometry. We want for clear_geometry just to cut + # # into solid_geometry not to delete it # if clear_geo.within(solid_geo): # solid_geo = solid_geo.difference(clear_geo) # try: @@ -4307,14 +4307,14 @@ class FlatCAMGrbEditor(QtCore.QObject): self.plot_all() - def toolbar_tool_toggle(self, key): - """ - - :param key: key to update in self.options dictionary - :return: - """ - self.options[key] = self.sender().isChecked() - return self.options[key] + # def toolbar_tool_toggle(self, key): + # """ + # + # :param key: key to update in self.options dictionary + # :return: + # """ + # self.options[key] = self.sender().isChecked() + # return self.options[key] def on_grb_shape_complete(self, storage=None, specific_shape=None, no_plot=False): """ @@ -4389,12 +4389,12 @@ class FlatCAMGrbEditor(QtCore.QObject): """ if self.app.is_legacy is False: event_pos = event.pos - event_is_dragging = event.is_dragging - right_button = 2 + # event_is_dragging = event.is_dragging + # right_button = 2 else: event_pos = (event.xdata, event.ydata) - event_is_dragging = self.app.plotcanvas.is_dragging - right_button = 3 + # event_is_dragging = self.app.plotcanvas.is_dragging + # right_button = 3 self.pos = self.canvas.translate_coords(event_pos) @@ -4457,11 +4457,11 @@ class FlatCAMGrbEditor(QtCore.QObject): self.modifiers = QtWidgets.QApplication.keyboardModifiers() if self.app.is_legacy is False: event_pos = event.pos - event_is_dragging = event.is_dragging + # event_is_dragging = event.is_dragging right_button = 2 else: event_pos = (event.xdata, event.ydata) - event_is_dragging = self.app.plotcanvas.is_dragging + # event_is_dragging = self.app.plotcanvas.is_dragging right_button = 3 pos_canvas = self.canvas.translate_coords(event_pos) @@ -4747,10 +4747,10 @@ class FlatCAMGrbEditor(QtCore.QObject): Plots a geometric object or list of objects without rendering. Plotted objects are returned as a list. This allows for efficient/animated rendering. - :param geometry: Geometry to be plotted (Any Shapely.geom kind or list of such) - :param color: Shape color - :param linewidth: Width of lines in # of pixels. - :return: List of plotted elements. + :param geometry: Geometry to be plotted (Any Shapely.geom kind or list of such) + :param color: Shape color + :param linewidth: Width of lines in # of pixels. + :return: List of plotted elements. """ if geometry is None: @@ -5597,7 +5597,7 @@ class TransformEditorTool(FlatCAMTool): self.flip_ref_entry.set_value((0, 0)) def template(self): - if not self.fcdraw.selected: + if not self.draw_app.selected: self.app.inform.emit('[WARNING_NOTCL] %s' % _("Cancelled. No shape selected.")) return diff --git a/flatcamGUI/FlatCAMGUI.py b/flatcamGUI/FlatCAMGUI.py index 905ad9fe..76b2ee51 100644 --- a/flatcamGUI/FlatCAMGUI.py +++ b/flatcamGUI/FlatCAMGUI.py @@ -2876,7 +2876,7 @@ class FlatCAMGUI(QtWidgets.QMainWindow): # Open Excellon file if key == QtCore.Qt.Key_E: - self.app.on_fileopenexcellon() + self.app.on_fileopenexcellon(signal=None) # Open Gerber file if key == QtCore.Qt.Key_G: @@ -2884,7 +2884,7 @@ class FlatCAMGUI(QtWidgets.QMainWindow): if 'editor' in widget_name.lower(): self.app.goto_text_line() else: - self.app.on_fileopengerber() + self.app.on_fileopengerber(signal=None) # Distance Tool if key == QtCore.Qt.Key_M: diff --git a/flatcamGUI/ObjectUI.py b/flatcamGUI/ObjectUI.py index 3b91514c..01ebf384 100644 --- a/flatcamGUI/ObjectUI.py +++ b/flatcamGUI/ObjectUI.py @@ -1241,6 +1241,7 @@ class ExcellonObjectUI(ObjectUI): self.pdepth_entry.set_precision(self.decimals) self.pdepth_entry.set_range(-9999.9999, 9999.9999) self.pdepth_entry.setSingleStep(0.1) + self.pdepth_entry.setObjectName("e_depth_probe") self.grid5.addWidget(self.pdepth_label, 13, 0) self.grid5.addWidget(self.pdepth_entry, 13, 1) @@ -1258,7 +1259,7 @@ class ExcellonObjectUI(ObjectUI): self.feedrate_probe_entry.set_precision(self.decimals) self.feedrate_probe_entry.set_range(0.0, 9999.9999) self.feedrate_probe_entry.setSingleStep(0.1) - self.feedrate_probe_entry.setObjectName(_("e_fr_probe")) + self.feedrate_probe_entry.setObjectName("e_fr_probe") self.grid5.addWidget(self.feedrate_probe_label, 14, 0) self.grid5.addWidget(self.feedrate_probe_entry, 14, 1) diff --git a/flatcamGUI/PlotCanvasLegacy.py b/flatcamGUI/PlotCanvasLegacy.py index d2136784..df9c8231 100644 --- a/flatcamGUI/PlotCanvasLegacy.py +++ b/flatcamGUI/PlotCanvasLegacy.py @@ -16,8 +16,6 @@ from descartes.patch import PolygonPatch from shapely.geometry import Polygon, LineString, LinearRing -import FlatCAMApp - from copy import deepcopy import logging @@ -496,7 +494,7 @@ class PlotCanvasLegacy(QtCore.QObject): :param event: :return: """ - FlatCAMApp.App.log.debug('on_key_down(): ' + str(event.key)) + log.debug('on_key_down(): ' + str(event.key)) self.key = event.key def on_key_up(self, event): @@ -531,7 +529,7 @@ class PlotCanvasLegacy(QtCore.QObject): try: self.figure.clf() except KeyError: - FlatCAMApp.App.log.warning("KeyError in MPL figure.clf()") + log.warning("KeyError in MPL figure.clf()") # Re-build self.figure.add_axes(self.axes) @@ -582,7 +580,7 @@ class PlotCanvasLegacy(QtCore.QObject): try: r = width / height except ZeroDivisionError: - FlatCAMApp.App.log.error("Height is %f" % height) + log.error("Height is %f" % height) return canvas_w, canvas_h = self.canvas.get_width_height() canvas_r = float(canvas_w) / canvas_h @@ -1190,10 +1188,10 @@ class ShapeCollectionLegacy: linewidth=local_shapes[element]['linewidth']) self.axes.add_patch(patch) except AssertionError: - FlatCAMApp.App.log.warning("A geometry component was not a polygon:") - FlatCAMApp.App.log.warning(str(element)) + log.warning("A geometry component was not a polygon:") + log.warning(str(element)) except Exception as e: - FlatCAMApp.App.log.debug( + log.debug( "PlotCanvasLegacy.ShepeCollectionLegacy.redraw() gerber 'solid' --> %s" % str(e)) else: try: diff --git a/flatcamGUI/PreferencesUI.py b/flatcamGUI/PreferencesUI.py index 8ad23154..96c5e52e 100644 --- a/flatcamGUI/PreferencesUI.py +++ b/flatcamGUI/PreferencesUI.py @@ -8420,7 +8420,7 @@ class Tools2PunchGerberPrefGroupUI(OptionsGroupUI): "- Excellon Object-> the Excellon object drills center will serve as reference.\n" "- Fixed Diameter -> will try to use the pads center as reference adding fixed diameter holes.\n" "- Fixed Annular Ring -> will try to keep a set annular ring.\n" - "- Proportional -> will make a Gerber punch hole having the diameter a percentage of the pad diameter.\n") + "- Proportional -> will make a Gerber punch hole having the diameter a percentage of the pad diameter.") ) grid_lay.addWidget(self.hole_size_label, 9, 0) grid_lay.addWidget(self.hole_size_radio, 9, 1) diff --git a/flatcamObjects/FlatCAMCNCJob.py b/flatcamObjects/FlatCAMCNCJob.py new file mode 100644 index 00000000..c154965b --- /dev/null +++ b/flatcamObjects/FlatCAMCNCJob.py @@ -0,0 +1,1220 @@ +# ########################################################## +# FlatCAM: 2D Post-processing for Manufacturing # +# http://flatcam.org # +# Author: Juan Pablo Caram (c) # +# Date: 2/5/2014 # +# MIT Licence # +# ########################################################## + +# ########################################################## +# File modified by: Marius Stanciu # +# ########################################################## + +from copy import deepcopy +from io import StringIO +from datetime import datetime + +from flatcamEditors.FlatCAMTextEditor import TextEditor +from flatcamObjects.FlatCAMObj import * + +from camlib import CNCjob + +import os +import sys +import math + +import gettext +import FlatCAMTranslation as fcTranslate +import builtins + +fcTranslate.apply_language('strings') +if '_' not in builtins.__dict__: + _ = gettext.gettext + + +class CNCJobObject(FlatCAMObj, CNCjob): + """ + Represents G-Code. + """ + optionChanged = QtCore.pyqtSignal(str) + ui_type = CNCObjectUI + + def __init__(self, name, units="in", kind="generic", z_move=0.1, + feedrate=3.0, feedrate_rapid=3.0, z_cut=-0.002, tooldia=0.0, + spindlespeed=None): + + log.debug("Creating CNCJob object...") + + self.decimals = self.app.decimals + + CNCjob.__init__(self, units=units, kind=kind, z_move=z_move, + feedrate=feedrate, feedrate_rapid=feedrate_rapid, z_cut=z_cut, tooldia=tooldia, + spindlespeed=spindlespeed, steps_per_circle=int(self.app.defaults["cncjob_steps_per_circle"])) + + FlatCAMObj.__init__(self, name) + + self.kind = "cncjob" + + self.options.update({ + "plot": True, + "tooldia": 0.03937, # 0.4mm in inches + "append": "", + "prepend": "", + "dwell": False, + "dwelltime": 1, + "type": 'Geometry', + "toolchange_macro": '', + "toolchange_macro_enable": False + }) + + ''' + This is a dict of dictionaries. Each dict is associated with a tool present in the file. The key is the + diameter of the tools and the value is another dict that will hold the data under the following form: + {tooldia: { + 'tooluid': 1, + 'offset': 'Path', + 'type_item': 'Rough', + 'tool_type': 'C1', + 'data': {} # a dict to hold the parameters + 'gcode': "" # a string with the actual GCODE + 'gcode_parsed': {} # dictionary holding the CNCJob geometry and type of geometry + (cut or move) + 'solid_geometry': [] + }, + ... + } + It is populated in the GeometryObject.mtool_gen_cncjob() + BEWARE: I rely on the ordered nature of the Python 3.7 dictionary. Things might change ... + ''' + self.cnc_tools = {} + + ''' + This is a dict of dictionaries. Each dict is associated with a tool present in the file. The key is the + diameter of the tools and the value is another dict that will hold the data under the following form: + {tooldia: { + 'tool': int, + 'nr_drills': int, + 'nr_slots': int, + 'offset': float, + 'data': {} # a dict to hold the parameters + 'gcode': "" # a string with the actual GCODE + 'gcode_parsed': {} # dictionary holding the CNCJob geometry and type of geometry (cut or move) + 'solid_geometry': [] + }, + ... + } + It is populated in the ExcellonObject.on_create_cncjob_click() but actually + it's done in camlib.CNCJob.generate_from_excellon_by_tool() + BEWARE: I rely on the ordered nature of the Python 3.7 dictionary. Things might change ... + ''' + self.exc_cnc_tools = {} + + # flag to store if the CNCJob is part of a special group of CNCJob objects that can't be processed by the + # default engine of FlatCAM. They generated by some of tools and are special cases of CNCJob objects. + self.special_group = None + + # for now it show if the plot will be done for multi-tool CNCJob (True) or for single tool + # (like the one in the TCL Command), False + self.multitool = False + + # determine if the GCode was generated out of a Excellon object or a Geometry object + self.origin_kind = None + + # used for parsing the GCode lines to adjust the GCode when the GCode is offseted or scaled + gcodex_re_string = r'(?=.*(X[-\+]?\d*\.\d*))' + self.g_x_re = re.compile(gcodex_re_string) + gcodey_re_string = r'(?=.*(Y[-\+]?\d*\.\d*))' + self.g_y_re = re.compile(gcodey_re_string) + gcodez_re_string = r'(?=.*(Z[-\+]?\d*\.\d*))' + self.g_z_re = re.compile(gcodez_re_string) + + gcodef_re_string = r'(?=.*(F[-\+]?\d*\.\d*))' + self.g_f_re = re.compile(gcodef_re_string) + gcodet_re_string = r'(?=.*(\=\s*[-\+]?\d*\.\d*))' + self.g_t_re = re.compile(gcodet_re_string) + + gcodenr_re_string = r'([+-]?\d*\.\d+)' + self.g_nr_re = re.compile(gcodenr_re_string) + + # Attributes to be included in serialization + # Always append to it because it carries contents + # from predecessors. + self.ser_attrs += ['options', 'kind', 'origin_kind', 'cnc_tools', 'exc_cnc_tools', 'multitool'] + + if self.app.is_legacy is False: + self.text_col = self.app.plotcanvas.new_text_collection() + self.text_col.enabled = True + self.annotation = self.app.plotcanvas.new_text_group(collection=self.text_col) + + self.gcode_editor_tab = None + + self.units_found = self.app.defaults['units'] + + def build_ui(self): + self.ui_disconnect() + + FlatCAMObj.build_ui(self) + self.units = self.app.defaults['units'].upper() + + # if the FlatCAM object is Excellon don't build the CNC Tools Table but hide it + self.ui.cnc_tools_table.hide() + if self.cnc_tools: + self.ui.cnc_tools_table.show() + self.build_cnc_tools_table() + + self.ui.exc_cnc_tools_table.hide() + if self.exc_cnc_tools: + self.ui.exc_cnc_tools_table.show() + self.build_excellon_cnc_tools() + # + self.ui_connect() + + def build_cnc_tools_table(self): + tool_idx = 0 + + n = len(self.cnc_tools) + self.ui.cnc_tools_table.setRowCount(n) + + for dia_key, dia_value in self.cnc_tools.items(): + + tool_idx += 1 + row_no = tool_idx - 1 + + t_id = QtWidgets.QTableWidgetItem('%d' % int(tool_idx)) + # id.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) + self.ui.cnc_tools_table.setItem(row_no, 0, t_id) # Tool name/id + + # Make sure that the tool diameter when in MM is with no more than 2 decimals. + # There are no tool bits in MM with more than 2 decimals diameter. + # For INCH the decimals should be no more than 4. There are no tools under 10mils. + + dia_item = QtWidgets.QTableWidgetItem('%.*f' % (self.decimals, float(dia_value['tooldia']))) + + offset_txt = list(str(dia_value['offset'])) + offset_txt[0] = offset_txt[0].upper() + offset_item = QtWidgets.QTableWidgetItem(''.join(offset_txt)) + type_item = QtWidgets.QTableWidgetItem(str(dia_value['type'])) + tool_type_item = QtWidgets.QTableWidgetItem(str(dia_value['tool_type'])) + + t_id.setFlags(QtCore.Qt.ItemIsEnabled) + dia_item.setFlags(QtCore.Qt.ItemIsEnabled) + offset_item.setFlags(QtCore.Qt.ItemIsEnabled) + type_item.setFlags(QtCore.Qt.ItemIsEnabled) + tool_type_item.setFlags(QtCore.Qt.ItemIsEnabled) + + # hack so the checkbox stay centered in the table cell + # used this: + # https://stackoverflow.com/questions/32458111/pyqt-allign-checkbox-and-put-it-in-every-row + # plot_item = QtWidgets.QWidget() + # checkbox = FCCheckBox() + # checkbox.setCheckState(QtCore.Qt.Checked) + # qhboxlayout = QtWidgets.QHBoxLayout(plot_item) + # qhboxlayout.addWidget(checkbox) + # qhboxlayout.setAlignment(QtCore.Qt.AlignCenter) + # qhboxlayout.setContentsMargins(0, 0, 0, 0) + plot_item = FCCheckBox() + plot_item.setLayoutDirection(QtCore.Qt.RightToLeft) + tool_uid_item = QtWidgets.QTableWidgetItem(str(dia_key)) + if self.ui.plot_cb.isChecked(): + plot_item.setChecked(True) + + self.ui.cnc_tools_table.setItem(row_no, 1, dia_item) # Diameter + self.ui.cnc_tools_table.setItem(row_no, 2, offset_item) # Offset + self.ui.cnc_tools_table.setItem(row_no, 3, type_item) # Toolpath Type + self.ui.cnc_tools_table.setItem(row_no, 4, tool_type_item) # Tool Type + + # ## REMEMBER: THIS COLUMN IS HIDDEN IN OBJECTUI.PY # ## + self.ui.cnc_tools_table.setItem(row_no, 5, tool_uid_item) # Tool unique ID) + self.ui.cnc_tools_table.setCellWidget(row_no, 6, plot_item) + + # make the diameter column editable + # for row in range(tool_idx): + # self.ui.cnc_tools_table.item(row, 1).setFlags(QtCore.Qt.ItemIsSelectable | + # QtCore.Qt.ItemIsEnabled) + + for row in range(tool_idx): + self.ui.cnc_tools_table.item(row, 0).setFlags( + self.ui.cnc_tools_table.item(row, 0).flags() ^ QtCore.Qt.ItemIsSelectable) + + self.ui.cnc_tools_table.resizeColumnsToContents() + self.ui.cnc_tools_table.resizeRowsToContents() + + vertical_header = self.ui.cnc_tools_table.verticalHeader() + # vertical_header.setSectionResizeMode(QtWidgets.QHeaderView.ResizeToContents) + vertical_header.hide() + self.ui.cnc_tools_table.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) + + horizontal_header = self.ui.cnc_tools_table.horizontalHeader() + horizontal_header.setMinimumSectionSize(10) + horizontal_header.setDefaultSectionSize(70) + horizontal_header.setSectionResizeMode(0, QtWidgets.QHeaderView.Fixed) + horizontal_header.resizeSection(0, 20) + horizontal_header.setSectionResizeMode(1, QtWidgets.QHeaderView.Stretch) + horizontal_header.setSectionResizeMode(3, QtWidgets.QHeaderView.ResizeToContents) + horizontal_header.setSectionResizeMode(4, QtWidgets.QHeaderView.Fixed) + horizontal_header.resizeSection(4, 40) + horizontal_header.setSectionResizeMode(6, QtWidgets.QHeaderView.Fixed) + horizontal_header.resizeSection(4, 17) + # horizontal_header.setStretchLastSection(True) + self.ui.cnc_tools_table.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) + + self.ui.cnc_tools_table.setColumnWidth(0, 20) + self.ui.cnc_tools_table.setColumnWidth(4, 40) + self.ui.cnc_tools_table.setColumnWidth(6, 17) + + # self.ui.geo_tools_table.setSortingEnabled(True) + + self.ui.cnc_tools_table.setMinimumHeight(self.ui.cnc_tools_table.getHeight()) + self.ui.cnc_tools_table.setMaximumHeight(self.ui.cnc_tools_table.getHeight()) + + def build_excellon_cnc_tools(self): + tool_idx = 0 + + n = len(self.exc_cnc_tools) + self.ui.exc_cnc_tools_table.setRowCount(n) + + for tooldia_key, dia_value in self.exc_cnc_tools.items(): + + tool_idx += 1 + row_no = tool_idx - 1 + + t_id = QtWidgets.QTableWidgetItem('%d' % int(tool_idx)) + dia_item = QtWidgets.QTableWidgetItem('%.*f' % (self.decimals, float(tooldia_key))) + nr_drills_item = QtWidgets.QTableWidgetItem('%d' % int(dia_value['nr_drills'])) + nr_slots_item = QtWidgets.QTableWidgetItem('%d' % int(dia_value['nr_slots'])) + cutz_item = QtWidgets.QTableWidgetItem('%.*f' % (self.decimals, float(dia_value['offset_z']) + self.z_cut)) + + t_id.setFlags(QtCore.Qt.ItemIsEnabled) + dia_item.setFlags(QtCore.Qt.ItemIsEnabled) + nr_drills_item.setFlags(QtCore.Qt.ItemIsEnabled) + nr_slots_item.setFlags(QtCore.Qt.ItemIsEnabled) + cutz_item.setFlags(QtCore.Qt.ItemIsEnabled) + + # hack so the checkbox stay centered in the table cell + # used this: + # https://stackoverflow.com/questions/32458111/pyqt-allign-checkbox-and-put-it-in-every-row + # plot_item = QtWidgets.QWidget() + # checkbox = FCCheckBox() + # checkbox.setCheckState(QtCore.Qt.Checked) + # qhboxlayout = QtWidgets.QHBoxLayout(plot_item) + # qhboxlayout.addWidget(checkbox) + # qhboxlayout.setAlignment(QtCore.Qt.AlignCenter) + # qhboxlayout.setContentsMargins(0, 0, 0, 0) + + plot_item = FCCheckBox() + plot_item.setLayoutDirection(QtCore.Qt.RightToLeft) + tool_uid_item = QtWidgets.QTableWidgetItem(str(dia_value['tool'])) + if self.ui.plot_cb.isChecked(): + plot_item.setChecked(True) + + # TODO until the feature of individual plot for an Excellon tool is implemented + plot_item.setDisabled(True) + + self.ui.exc_cnc_tools_table.setItem(row_no, 0, t_id) # Tool name/id + self.ui.exc_cnc_tools_table.setItem(row_no, 1, dia_item) # Diameter + self.ui.exc_cnc_tools_table.setItem(row_no, 2, nr_drills_item) # Nr of drills + self.ui.exc_cnc_tools_table.setItem(row_no, 3, nr_slots_item) # Nr of slots + + # ## REMEMBER: THIS COLUMN IS HIDDEN IN OBJECTUI.PY # ## + self.ui.exc_cnc_tools_table.setItem(row_no, 4, tool_uid_item) # Tool unique ID) + self.ui.exc_cnc_tools_table.setItem(row_no, 5, cutz_item) + self.ui.exc_cnc_tools_table.setCellWidget(row_no, 6, plot_item) + + for row in range(tool_idx): + self.ui.exc_cnc_tools_table.item(row, 0).setFlags( + self.ui.exc_cnc_tools_table.item(row, 0).flags() ^ QtCore.Qt.ItemIsSelectable) + + self.ui.exc_cnc_tools_table.resizeColumnsToContents() + self.ui.exc_cnc_tools_table.resizeRowsToContents() + + vertical_header = self.ui.exc_cnc_tools_table.verticalHeader() + vertical_header.hide() + self.ui.exc_cnc_tools_table.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) + + horizontal_header = self.ui.exc_cnc_tools_table.horizontalHeader() + horizontal_header.setMinimumSectionSize(10) + horizontal_header.setDefaultSectionSize(70) + horizontal_header.setSectionResizeMode(0, QtWidgets.QHeaderView.Fixed) + horizontal_header.resizeSection(0, 20) + horizontal_header.setSectionResizeMode(1, QtWidgets.QHeaderView.Stretch) + horizontal_header.setSectionResizeMode(2, QtWidgets.QHeaderView.ResizeToContents) + horizontal_header.setSectionResizeMode(3, QtWidgets.QHeaderView.ResizeToContents) + horizontal_header.setSectionResizeMode(5, QtWidgets.QHeaderView.ResizeToContents) + + horizontal_header.setSectionResizeMode(6, QtWidgets.QHeaderView.Fixed) + + # horizontal_header.setStretchLastSection(True) + self.ui.exc_cnc_tools_table.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) + + self.ui.exc_cnc_tools_table.setColumnWidth(0, 20) + self.ui.exc_cnc_tools_table.setColumnWidth(6, 17) + + self.ui.exc_cnc_tools_table.setMinimumHeight(self.ui.exc_cnc_tools_table.getHeight()) + self.ui.exc_cnc_tools_table.setMaximumHeight(self.ui.exc_cnc_tools_table.getHeight()) + + def set_ui(self, ui): + FlatCAMObj.set_ui(self, ui) + + log.debug("FlatCAMCNCJob.set_ui()") + + assert isinstance(self.ui, CNCObjectUI), \ + "Expected a CNCObjectUI, got %s" % type(self.ui) + + self.units = self.app.defaults['units'].upper() + self.units_found = self.app.defaults['units'] + + # this signal has to be connected to it's slot before the defaults are populated + # the decision done in the slot has to override the default value set bellow + self.ui.toolchange_cb.toggled.connect(self.on_toolchange_custom_clicked) + + self.form_fields.update({ + "plot": self.ui.plot_cb, + "tooldia": self.ui.tooldia_entry, + "append": self.ui.append_text, + "prepend": self.ui.prepend_text, + "toolchange_macro": self.ui.toolchange_text, + "toolchange_macro_enable": self.ui.toolchange_cb + }) + + # Fill form fields only on object create + self.to_form() + + # 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() + self.ui.t_distance_entry.setVisible(True) + self.ui.t_distance_entry.setDisabled(True) + self.ui.t_distance_entry.set_value('%.*f' % (self.decimals, 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('%.*f' % (self.decimals, 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('%.*f' % (self.decimals, math.ceil(float(time_r)))) + self.ui.units_time_label.setText('sec') + self.ui.units_time_label.setDisabled(True) + except AttributeError: + pass + + if self.multitool is False: + self.ui.tooldia_entry.show() + self.ui.updateplot_button.show() + else: + self.ui.tooldia_entry.hide() + self.ui.updateplot_button.hide() + + # set the kind of geometries are plotted by default with plot2() from camlib.CNCJob + self.ui.cncplot_method_combo.set_value(self.app.defaults["cncjob_plot_kind"]) + + try: + self.ui.annotation_cb.stateChanged.disconnect(self.on_annotation_change) + except (TypeError, AttributeError): + pass + self.ui.annotation_cb.stateChanged.connect(self.on_annotation_change) + + # set if to display text annotations + self.ui.annotation_cb.set_value(self.app.defaults["cncjob_annotation"]) + + # Show/Hide Advanced Options + if self.app.defaults["global_app_level"] == 'b': + self.ui.level.setText(_( + 'Basic' + )) + + self.ui.cnc_frame.hide() + else: + self.ui.level.setText(_( + 'Advanced' + )) + self.ui.cnc_frame.show() + + self.ui.updateplot_button.clicked.connect(self.on_updateplot_button_click) + self.ui.export_gcode_button.clicked.connect(self.on_exportgcode_button_click) + self.ui.modify_gcode_button.clicked.connect(self.on_edit_code_click) + + self.ui.tc_variable_combo.currentIndexChanged[str].connect(self.on_cnc_custom_parameters) + + self.ui.cncplot_method_combo.activated_custom.connect(self.on_plot_kind_change) + + def on_cnc_custom_parameters(self, signal_text): + if signal_text == 'Parameters': + return + else: + self.ui.toolchange_text.insertPlainText('%%%s%%' % signal_text) + + def ui_connect(self): + for row in range(self.ui.cnc_tools_table.rowCount()): + self.ui.cnc_tools_table.cellWidget(row, 6).clicked.connect(self.on_plot_cb_click_table) + self.ui.plot_cb.stateChanged.connect(self.on_plot_cb_click) + + def ui_disconnect(self): + for row in range(self.ui.cnc_tools_table.rowCount()): + self.ui.cnc_tools_table.cellWidget(row, 6).clicked.disconnect(self.on_plot_cb_click_table) + try: + self.ui.plot_cb.stateChanged.disconnect(self.on_plot_cb_click) + except (TypeError, AttributeError): + pass + + def on_updateplot_button_click(self, *args): + """ + Callback for the "Updata Plot" button. Reads the form for updates + and plots the object. + """ + self.read_form() + self.on_plot_kind_change() + + def on_plot_kind_change(self): + kind = self.ui.cncplot_method_combo.get_value() + + def worker_task(): + with self.app.proc_container.new(_("Plotting...")): + self.plot(kind=kind) + + self.app.worker_task.emit({'fcn': worker_task, 'params': []}) + + def on_exportgcode_button_click(self, *args): + """ + Handler activated by a button clicked when exporting GCode. + + :param args: + :return: + """ + self.app.report_usage("cncjob_on_exportgcode_button") + + self.read_form() + name = self.app.collection.get_active().options['name'] + save_gcode = False + + if 'Roland' in self.pp_excellon_name or 'Roland' in self.pp_geometry_name: + _filter_ = "RML1 Files .rol (*.rol);;All Files (*.*)" + elif 'hpgl' in self.pp_geometry_name: + _filter_ = "HPGL Files .plt (*.plt);;All Files (*.*)" + else: + save_gcode = True + _filter_ = self.app.defaults['cncjob_save_filters'] + + try: + dir_file_to_save = self.app.get_last_save_folder() + '/' + str(name) + filename, _f = FCFileSaveDialog.get_saved_filename( + caption=_("Export Machine Code ..."), + directory=dir_file_to_save, + filter=_filter_ + ) + except TypeError: + filename, _f = FCFileSaveDialog.get_saved_filename(caption=_("Export Machine Code ..."), filter=_filter_) + + filename = str(filename) + + if filename == '': + self.app.inform.emit('[WARNING_NOTCL] %s' % _("Export Machine Code cancelled ...")) + return + else: + if save_gcode is True: + used_extension = filename.rpartition('.')[2] + self.update_filters(last_ext=used_extension, filter_string='cncjob_save_filters') + + new_name = os.path.split(str(filename))[1].rpartition('.')[0] + self.ui.name_entry.set_value(new_name) + self.on_name_activate(silent=True) + + preamble = str(self.ui.prepend_text.get_value()) + postamble = str(self.ui.append_text.get_value()) + + gc = self.export_gcode(filename, preamble=preamble, postamble=postamble) + if gc == 'fail': + return + + if self.app.defaults["global_open_style"] is False: + self.app.file_opened.emit("gcode", filename) + self.app.file_saved.emit("gcode", filename) + self.app.inform.emit('[success] %s: %s' % (_("Machine Code file saved to"), filename)) + + def on_edit_code_click(self, *args): + """ + Handler activated by a button clicked when editing GCode. + + :param args: + :return: + """ + + self.app.proc_container.view.set_busy(_("Loading...")) + + preamble = str(self.ui.prepend_text.get_value()) + postamble = str(self.ui.append_text.get_value()) + + gco = self.export_gcode(preamble=preamble, postamble=postamble, to_file=True) + if gco == 'fail': + return + else: + self.app.gcode_edited = gco + + self.gcode_editor_tab = TextEditor(app=self.app, plain_text=True) + + # add the tab if it was closed + self.app.ui.plot_tab_area.addTab(self.gcode_editor_tab, '%s' % _("Code Editor")) + self.gcode_editor_tab.setObjectName('code_editor_tab') + + # delete the absolute and relative position and messages in the infobar + self.app.ui.position_label.setText("") + self.app.ui.rel_position_label.setText("") + + # first clear previous text in text editor (if any) + self.gcode_editor_tab.code_editor.clear() + self.gcode_editor_tab.code_editor.setReadOnly(False) + + self.gcode_editor_tab.code_editor.completer_enable = False + self.gcode_editor_tab.buttonRun.hide() + + # Switch plot_area to CNCJob tab + self.app.ui.plot_tab_area.setCurrentWidget(self.gcode_editor_tab) + + self.gcode_editor_tab.t_frame.hide() + # then append the text from GCode to the text editor + try: + self.gcode_editor_tab.code_editor.setPlainText(self.app.gcode_edited.getvalue()) + # for line in self.app.gcode_edited: + # QtWidgets.QApplication.processEvents() + # + # proc_line = str(line).strip('\n') + # self.gcode_editor_tab.code_editor.append(proc_line) + except Exception as e: + log.debug('FlatCAMCNNJob.on_edit_code_click() -->%s' % str(e)) + self.app.inform.emit('[ERROR] %s %s' % ('FlatCAMCNNJob.on_edit_code_click() -->', str(e))) + return + + self.gcode_editor_tab.code_editor.moveCursor(QtGui.QTextCursor.Start) + + self.gcode_editor_tab.handleTextChanged() + self.gcode_editor_tab.t_frame.show() + self.app.proc_container.view.set_idle() + + self.app.inform.emit('[success] %s...' % _('Loaded Machine Code into Code Editor')) + + def gcode_header(self, comment_start_symbol=None, comment_stop_symbol=None): + """ + Will create a header to be added to all GCode files generated by FlatCAM + + :param comment_start_symbol: A symbol to be used as the first symbol in a comment + :param comment_stop_symbol: A symbol to be used as the last symbol in a comment + :return: A string with a GCode header + """ + + log.debug("FlatCAMCNCJob.gcode_header()") + time_str = "{:%A, %d %B %Y at %H:%M}".format(datetime.now()) + marlin = False + hpgl = False + probe_pp = False + + start_comment = comment_start_symbol if comment_start_symbol is not None else '(' + stop_comment = comment_stop_symbol if comment_stop_symbol is not None else ')' + + try: + for key in self.cnc_tools: + ppg = self.cnc_tools[key]['data']['ppname_g'] + if 'marlin' in ppg.lower() or 'repetier' in ppg.lower(): + marlin = True + break + if ppg == 'hpgl': + hpgl = True + break + if "toolchange_probe" in ppg.lower(): + probe_pp = True + break + except KeyError: + # log.debug("FlatCAMCNCJob.gcode_header() error: --> %s" % str(e)) + pass + + try: + if 'marlin' in self.options['ppname_e'].lower() or 'repetier' in self.options['ppname_e'].lower(): + marlin = True + except KeyError: + # log.debug("FlatCAMCNCJob.gcode_header(): --> There is no such self.option: %s" % str(e)) + pass + + try: + if "toolchange_probe" in self.options['ppname_e'].lower(): + probe_pp = True + except KeyError: + # log.debug("FlatCAMCNCJob.gcode_header(): --> There is no such self.option: %s" % str(e)) + pass + + if marlin is True: + gcode = ';Marlin(Repetier) G-CODE GENERATED BY FLATCAM v%s - www.flatcam.org - Version Date: %s\n' % \ + (str(self.app.version), str(self.app.version_date)) + '\n' + + gcode += ';Name: ' + str(self.options['name']) + '\n' + gcode += ';Type: ' + "G-code from " + str(self.options['type']) + '\n' + + # if str(p['options']['type']) == 'Excellon' or str(p['options']['type']) == 'Excellon Geometry': + # gcode += '(Tools in use: ' + str(p['options']['Tools_in_use']) + ')\n' + + gcode += ';Units: ' + self.units.upper() + '\n' + "\n" + gcode += ';Created on ' + time_str + '\n' + '\n' + elif hpgl is True: + gcode = 'CO "HPGL CODE GENERATED BY FLATCAM v%s - www.flatcam.org - Version Date: %s' % \ + (str(self.app.version), str(self.app.version_date)) + '";\n' + + gcode += 'CO "Name: ' + str(self.options['name']) + '";\n' + gcode += 'CO "Type: ' + "HPGL code from " + str(self.options['type']) + '";\n' + + # if str(p['options']['type']) == 'Excellon' or str(p['options']['type']) == 'Excellon Geometry': + # gcode += '(Tools in use: ' + str(p['options']['Tools_in_use']) + ')\n' + + gcode += 'CO "Units: ' + self.units.upper() + '";\n' + gcode += 'CO "Created on ' + time_str + '";\n' + elif probe_pp is True: + gcode = '(G-CODE GENERATED BY FLATCAM v%s - www.flatcam.org - Version Date: %s)\n' % \ + (str(self.app.version), str(self.app.version_date)) + '\n' + + gcode += '(This GCode tool change is done by using a Probe.)\n' \ + '(Make sure that before you start the job you first do a rough zero for Z axis.)\n' \ + '(This means that you need to zero the CNC axis and then jog to the toolchange X, Y location,)\n' \ + '(mount the probe and adjust the Z so more or less the probe tip touch the plate. ' \ + 'Then zero the Z axis.)\n' + '\n' + + gcode += '(Name: ' + str(self.options['name']) + ')\n' + gcode += '(Type: ' + "G-code from " + str(self.options['type']) + ')\n' + + # if str(p['options']['type']) == 'Excellon' or str(p['options']['type']) == 'Excellon Geometry': + # gcode += '(Tools in use: ' + str(p['options']['Tools_in_use']) + ')\n' + + gcode += '(Units: ' + self.units.upper() + ')\n' + "\n" + gcode += '(Created on ' + time_str + ')\n' + '\n' + else: + gcode = '%sG-CODE GENERATED BY FLATCAM v%s - www.flatcam.org - Version Date: %s%s\n' % \ + (start_comment, str(self.app.version), str(self.app.version_date), stop_comment) + '\n' + + gcode += '%sName: ' % start_comment + str(self.options['name']) + '%s\n' % stop_comment + gcode += '%sType: ' % start_comment + "G-code from " + str(self.options['type']) + '%s\n' % stop_comment + + # if str(p['options']['type']) == 'Excellon' or str(p['options']['type']) == 'Excellon Geometry': + # gcode += '(Tools in use: ' + str(p['options']['Tools_in_use']) + ')\n' + + gcode += '%sUnits: ' % start_comment + self.units.upper() + '%s\n' % stop_comment + "\n" + gcode += '%sCreated on ' % start_comment + time_str + '%s\n' % stop_comment + '\n' + + return gcode + + @staticmethod + def gcode_footer(end_command=None): + """ + Will add the M02 to the end of GCode, if requested. + + :param end_command: 'M02' or 'M30' - String + :return: + """ + if end_command: + return end_command + else: + return 'M02' + + def export_gcode(self, filename=None, preamble='', postamble='', to_file=False): + """ + This will save the GCode from the Gcode object to a file on the OS filesystem + + :param filename: filename for the GCode file + :param preamble: a custom Gcode block to be added at the beginning of the Gcode file + :param postamble: a custom Gcode block to be added at the end of the Gcode file + :param to_file: if False then no actual file is saved but the app will know that a file was created + :return: None + """ + # gcode = '' + # roland = False + # hpgl = False + # isel_icp = False + + include_header = True + + try: + if self.special_group: + self.app.inform.emit('[WARNING_NOTCL] %s %s %s.' % + (_("This CNCJob object can't be processed because it is a"), + str(self.special_group), + _("CNCJob object"))) + return 'fail' + except AttributeError: + pass + + # if this dict is not empty then the object is a Geometry object + if self.cnc_tools: + first_key = next(iter(self.cnc_tools)) + include_header = self.app.preprocessors[self.cnc_tools[first_key]['data']['ppname_g']].include_header + + # if this dict is not empty then the object is an Excellon object + if self.exc_cnc_tools: + first_key = next(iter(self.exc_cnc_tools)) + include_header = self.app.preprocessors[self.exc_cnc_tools[first_key]['data']['ppname_e']].include_header + + # # detect if using Roland preprocessor + # try: + # for key in self.cnc_tools: + # if self.cnc_tools[key]['data']['ppname_g'] == 'Roland_MDX_20': + # roland = True + # break + # except Exception: + # try: + # for key in self.cnc_tools: + # if self.cnc_tools[key]['data']['ppname_e'] == 'Roland_MDX_20': + # roland = True + # break + # except Exception: + # pass + # + # # detect if using HPGL preprocessor + # try: + # for key in self.cnc_tools: + # if self.cnc_tools[key]['data']['ppname_g'] == 'hpgl': + # hpgl = True + # break + # except Exception: + # try: + # for key in self.cnc_tools: + # if self.cnc_tools[key]['data']['ppname_e'] == 'hpgl': + # hpgl = True + # break + # except Exception: + # pass + # + # # detect if using ISEL_ICP_CNC preprocessor + # try: + # for key in self.cnc_tools: + # if 'ISEL_ICP' in self.cnc_tools[key]['data']['ppname_g'].upper(): + # isel_icp = True + # break + # except Exception: + # try: + # for key in self.cnc_tools: + # if 'ISEL_ICP' in self.cnc_tools[key]['data']['ppname_e'].upper(): + # isel_icp = True + # break + # except Exception: + # pass + + # do not add gcode_header when using the Roland preprocessor, add it for every other preprocessor + # if roland is False and hpgl is False and isel_icp is False: + # gcode = self.gcode_header() + + # do not add gcode_header when using the Roland, HPGL or ISEP_ICP_CNC preprocessor (or any other preprocessor + # that has the include_header attribute set as False, add it for every other preprocessor + # if include_header: + # gcode = self.gcode_header() + # else: + # gcode = '' + + # # detect if using multi-tool and make the Gcode summation correctly for each case + # if self.multitool is True: + # for tooluid_key in self.cnc_tools: + # for key, value in self.cnc_tools[tooluid_key].items(): + # if key == 'gcode': + # gcode += value + # break + # else: + # gcode += self.gcode + + # if roland is True: + # g = preamble + gcode + postamble + # elif hpgl is True: + # g = self.gcode_header() + preamble + gcode + postamble + # else: + # # fix so the preamble gets inserted in between the comments header and the actual start of GCODE + # g_idx = gcode.rfind('G20') + # + # # if it did not find 'G20' then search for 'G21' + # if g_idx == -1: + # g_idx = gcode.rfind('G21') + # + # # if it did not find 'G20' and it did not find 'G21' then there is an error and return + # # but only when the preprocessor is not ISEL_ICP who is allowed not to have the G20/G21 command + # if g_idx == -1 and isel_icp is False: + # self.app.inform.emit('[ERROR_NOTCL] %s' % _("G-code does not have a units code: either G20 or G21")) + # return + # + # footer = self.app.defaults['cncjob_footer'] + # end_gcode = self.gcode_footer() if footer is True else '' + # g = gcode[:g_idx] + preamble + '\n' + gcode[g_idx:] + postamble + end_gcode + + gcode = '' + if include_header is False: + g = preamble + # detect if using multi-tool and make the Gcode summation correctly for each case + if self.multitool is True: + for tooluid_key in self.cnc_tools: + for key, value in self.cnc_tools[tooluid_key].items(): + if key == 'gcode': + gcode += value + break + else: + gcode += self.gcode + + g = g + gcode + postamble + else: + # search for the GCode beginning which is usually a G20 or G21 + # fix so the preamble gets inserted in between the comments header and the actual start of GCODE + # g_idx = gcode.rfind('G20') + # + # # if it did not find 'G20' then search for 'G21' + # if g_idx == -1: + # g_idx = gcode.rfind('G21') + # + # # if it did not find 'G20' and it did not find 'G21' then there is an error and return + # if g_idx == -1: + # self.app.inform.emit('[ERROR_NOTCL] %s' % _("G-code does not have a units code: either G20 or G21")) + # return + + # detect if using multi-tool and make the Gcode summation correctly for each case + if self.multitool is True: + for tooluid_key in self.cnc_tools: + for key, value in self.cnc_tools[tooluid_key].items(): + if key == 'gcode': + gcode += value + break + else: + gcode += self.gcode + + end_gcode = self.gcode_footer() if self.app.defaults['cncjob_footer'] is True else '' + + # detect if using a HPGL preprocessor + hpgl = False + if self.cnc_tools: + for key in self.cnc_tools: + if 'ppname_g' in self.cnc_tools[key]['data']: + if 'hpgl' in self.cnc_tools[key]['data']['ppname_g']: + hpgl = True + break + elif self.exc_cnc_tools: + for key in self.cnc_tools: + if 'ppname_e' in self.cnc_tools[key]['data']: + if 'hpgl' in self.cnc_tools[key]['data']['ppname_e']: + hpgl = True + break + + if hpgl: + processed_gcode = '' + pa_re = re.compile(r"^PA\s*(-?\d+\.\d*),?\s*(-?\d+\.\d*)*;?$") + for gline in gcode.splitlines(): + match = pa_re.search(gline) + if match: + x_int = int(float(match.group(1))) + y_int = int(float(match.group(2))) + new_line = 'PA%d,%d;\n' % (x_int, y_int) + processed_gcode += new_line + else: + processed_gcode += gline + '\n' + + gcode = processed_gcode + g = self.gcode_header() + '\n' + preamble + '\n' + gcode + postamble + end_gcode + else: + try: + g_idx = gcode.index('G94') + g = self.gcode_header() + gcode[:g_idx + 3] + '\n\n' + preamble + '\n' + \ + gcode[(g_idx + 3):] + postamble + end_gcode + except ValueError: + self.app.inform.emit('[ERROR_NOTCL] %s' % + _("G-code does not have a G94 code and we will not include the code in the " + "'Prepend to GCode' text box")) + g = self.gcode_header() + '\n' + gcode + postamble + end_gcode + + # if toolchange custom is used, replace M6 code with the code from the Toolchange Custom Text box + if self.ui.toolchange_cb.get_value() is True: + # match = self.re_toolchange.search(g) + if 'M6' in g: + m6_code = self.parse_custom_toolchange_code(self.ui.toolchange_text.get_value()) + if m6_code is None or m6_code == '': + self.app.inform.emit( + '[ERROR_NOTCL] %s' % _("Cancelled. The Toolchange Custom code is enabled but it's empty.") + ) + return 'fail' + + g = g.replace('M6', m6_code) + self.app.inform.emit('[success] %s' % _("Toolchange G-code was replaced by a custom code.")) + + lines = StringIO(g) + + # Write + if filename is not None: + try: + force_windows_line_endings = self.app.defaults['cncjob_line_ending'] + if force_windows_line_endings and sys.platform != 'win32': + with open(filename, 'w', newline='\r\n') as f: + for line in lines: + f.write(line) + else: + with open(filename, 'w') as f: + for line in lines: + f.write(line) + except FileNotFoundError: + self.app.inform.emit('[WARNING_NOTCL] %s' % _("No such file or directory")) + return + except PermissionError: + self.app.inform.emit( + '[WARNING] %s' % _("Permission denied, saving not possible.\n" + "Most likely another app is holding the file open and not accessible.") + ) + return 'fail' + elif to_file is False: + # Just for adding it to the recent files list. + if self.app.defaults["global_open_style"] is False: + self.app.file_opened.emit("cncjob", filename) + self.app.file_saved.emit("cncjob", filename) + + self.app.inform.emit('[success] %s: %s' % (_("Saved to"), filename)) + else: + return lines + + def on_toolchange_custom_clicked(self, signal): + """ + Handler for clicking toolchange custom. + + :param signal: + :return: + """ + + try: + if 'toolchange_custom' not in str(self.options['ppname_e']).lower(): + if self.ui.toolchange_cb.get_value(): + self.ui.toolchange_cb.set_value(False) + self.app.inform.emit('[WARNING_NOTCL] %s' % + _("The used preprocessor file has to have in it's name: 'toolchange_custom'")) + except KeyError: + try: + for key in self.cnc_tools: + ppg = self.cnc_tools[key]['data']['ppname_g'] + if 'toolchange_custom' not in str(ppg).lower(): + print(ppg) + if self.ui.toolchange_cb.get_value(): + self.ui.toolchange_cb.set_value(False) + self.app.inform.emit('[WARNING_NOTCL] %s' % + _("The used preprocessor file has to have in it's name: " + "'toolchange_custom'")) + except KeyError: + self.app.inform.emit('[ERROR] %s' % _("There is no preprocessor file.")) + + def get_gcode(self, preamble='', postamble=''): + """ + We need this to be able to get_gcode separately for shell command export_gcode + + :param preamble: Extra GCode added to the beginning of the GCode + :param postamble: Extra GCode added at the end of the GCode + :return: The modified GCode + """ + return preamble + '\n' + self.gcode + "\n" + postamble + + def get_svg(self): + # we need this to be able get_svg separately for shell command export_svg + pass + + def on_plot_cb_click(self, *args): + """ + Handler for clicking on the Plot checkbox. + + :param args: + :return: + """ + if self.muted_ui: + return + kind = self.ui.cncplot_method_combo.get_value() + self.plot(kind=kind) + self.read_form_item('plot') + + self.ui_disconnect() + cb_flag = self.ui.plot_cb.isChecked() + for row in range(self.ui.cnc_tools_table.rowCount()): + table_cb = self.ui.cnc_tools_table.cellWidget(row, 6) + if cb_flag: + table_cb.setChecked(True) + else: + table_cb.setChecked(False) + self.ui_connect() + + def on_plot_cb_click_table(self): + """ + Handler for clicking the plot checkboxes added into a Table on each row. Purpose: toggle visibility for the + tool/aperture found on that row. + :return: + """ + + # self.ui.cnc_tools_table.cellWidget(row, 2).widget().setCheckState(QtCore.Qt.Unchecked) + self.ui_disconnect() + # cw = self.sender() + # cw_index = self.ui.cnc_tools_table.indexAt(cw.pos()) + # cw_row = cw_index.row() + + kind = self.ui.cncplot_method_combo.get_value() + + self.shapes.clear(update=True) + + for tooluid_key in self.cnc_tools: + tooldia = float('%.*f' % (self.decimals, float(self.cnc_tools[tooluid_key]['tooldia']))) + gcode_parsed = self.cnc_tools[tooluid_key]['gcode_parsed'] + # tool_uid = int(self.ui.cnc_tools_table.item(cw_row, 3).text()) + + for r in range(self.ui.cnc_tools_table.rowCount()): + if int(self.ui.cnc_tools_table.item(r, 5).text()) == int(tooluid_key): + if self.ui.cnc_tools_table.cellWidget(r, 6).isChecked(): + self.plot2(tooldia=tooldia, obj=self, visible=True, gcode_parsed=gcode_parsed, kind=kind) + + self.shapes.redraw() + + # make sure that the general plot is disabled if one of the row plot's are disabled and + # if all the row plot's are enabled also enable the general plot checkbox + cb_cnt = 0 + total_row = self.ui.cnc_tools_table.rowCount() + for row in range(total_row): + if self.ui.cnc_tools_table.cellWidget(row, 6).isChecked(): + cb_cnt += 1 + else: + cb_cnt -= 1 + if cb_cnt < total_row: + self.ui.plot_cb.setChecked(False) + else: + self.ui.plot_cb.setChecked(True) + self.ui_connect() + + def plot(self, visible=None, kind='all'): + """ + # Does all the required setup and returns False + # if the 'ptint' option is set to False. + + :param visible: Boolean to decide if the object will be plotted as visible or disabled on canvas + :param kind: String. Can be "all" or "travel" or "cut". For CNCJob plotting + :return: None + """ + if not FlatCAMObj.plot(self): + return + + visible = visible if visible else self.options['plot'] + + if self.app.is_legacy is False: + 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 + try: + dia_plot = float(self.options["tooldia"]) + except ValueError: + # we may have a tuple with only one element and a comma + dia_plot = [float(el) for el in self.options["tooldia"].split(',') if el != ''][0] + self.plot2(dia_plot, obj=self, visible=visible, kind=kind) + else: + # multiple tools usage + if self.cnc_tools: + for tooluid_key in self.cnc_tools: + tooldia = float('%.*f' % (self.decimals, float(self.cnc_tools[tooluid_key]['tooldia']))) + gcode_parsed = self.cnc_tools[tooluid_key]['gcode_parsed'] + self.plot2(tooldia=tooldia, obj=self, visible=visible, gcode_parsed=gcode_parsed, kind=kind) + + # TODO: until the gcode parsed will be stored on each Excellon tool this will not get executed + if self.exc_cnc_tools: + for tooldia_key in self.exc_cnc_tools: + tooldia = float('%.*f' % (self.decimals, float(tooldia_key))) + # gcode_parsed = self.cnc_tools[tooldia_key]['gcode_parsed'] + gcode_parsed = self.gcode_parsed + self.plot2(tooldia=tooldia, obj=self, visible=visible, gcode_parsed=gcode_parsed, kind=kind) + + self.shapes.redraw() + except (ObjectDeleted, AttributeError): + self.shapes.clear(update=True) + if self.app.is_legacy is False: + self.annotation.clear(update=True) + + def on_annotation_change(self): + """ + Handler for toggling the annotation display by clicking a checkbox. + :return: + """ + + if self.app.is_legacy is False: + if self.ui.annotation_cb.get_value(): + self.text_col.enabled = True + else: + self.text_col.enabled = False + # kind = self.ui.cncplot_method_combo.get_value() + # self.plot(kind=kind) + self.annotation.redraw() + else: + kind = self.ui.cncplot_method_combo.get_value() + self.plot(kind=kind) + + def convert_units(self, units): + """ + Units conversion used by the CNCJob objects. + + :param units: Can be "MM" or "IN" + :return: + """ + + log.debug("FlatCAMObj.FlatCAMECNCjob.convert_units()") + + factor = CNCjob.convert_units(self, units) + self.options["tooldia"] = float(self.options["tooldia"]) * factor + + param_list = ['cutz', 'depthperpass', 'travelz', 'feedrate', 'feedrate_z', 'feedrate_rapid', + 'endz', 'toolchangez'] + + temp_tools_dict = {} + tool_dia_copy = {} + data_copy = {} + + for tooluid_key, tooluid_value in self.cnc_tools.items(): + for dia_key, dia_value in tooluid_value.items(): + if dia_key == 'tooldia': + dia_value *= factor + dia_value = float('%.*f' % (self.decimals, dia_value)) + tool_dia_copy[dia_key] = dia_value + if dia_key == 'offset': + tool_dia_copy[dia_key] = dia_value + if dia_key == 'offset_value': + dia_value *= factor + tool_dia_copy[dia_key] = dia_value + + if dia_key == 'type': + tool_dia_copy[dia_key] = dia_value + if dia_key == 'tool_type': + tool_dia_copy[dia_key] = dia_value + if dia_key == 'data': + for data_key, data_value in dia_value.items(): + # convert the form fields that are convertible + for param in param_list: + if data_key == param and data_value is not None: + data_copy[data_key] = data_value * factor + # copy the other dict entries that are not convertible + if data_key not in param_list: + data_copy[data_key] = data_value + tool_dia_copy[dia_key] = deepcopy(data_copy) + data_copy.clear() + + if dia_key == 'gcode': + tool_dia_copy[dia_key] = dia_value + if dia_key == 'gcode_parsed': + tool_dia_copy[dia_key] = dia_value + if dia_key == 'solid_geometry': + tool_dia_copy[dia_key] = dia_value + + # if dia_key == 'solid_geometry': + # tool_dia_copy[dia_key] = affinity.scale(dia_value, xfact=factor, origin=(0, 0)) + # if dia_key == 'gcode_parsed': + # for g in dia_value: + # g['geom'] = affinity.scale(g['geom'], factor, factor, origin=(0, 0)) + # + # tool_dia_copy['gcode_parsed'] = deepcopy(dia_value) + # tool_dia_copy['solid_geometry'] = cascaded_union([geo['geom'] for geo in dia_value]) + + temp_tools_dict.update({ + tooluid_key: deepcopy(tool_dia_copy) + }) + tool_dia_copy.clear() + + self.cnc_tools.clear() + self.cnc_tools = deepcopy(temp_tools_dict) diff --git a/flatcamObjects/FlatCAMDocument.py b/flatcamObjects/FlatCAMDocument.py new file mode 100644 index 00000000..5f33b73a --- /dev/null +++ b/flatcamObjects/FlatCAMDocument.py @@ -0,0 +1,314 @@ +# ########################################################## +# FlatCAM: 2D Post-processing for Manufacturing # +# http://flatcam.org # +# Author: Juan Pablo Caram (c) # +# Date: 2/5/2014 # +# MIT Licence # +# ########################################################## + +# ########################################################## +# File modified by: Marius Stanciu # +# ########################################################## + +from flatcamEditors.FlatCAMTextEditor import TextEditor +from flatcamObjects.FlatCAMObj import * + +import gettext +import FlatCAMTranslation as fcTranslate +import builtins + +fcTranslate.apply_language('strings') +if '_' not in builtins.__dict__: + _ = gettext.gettext + + +class DocumentObject(FlatCAMObj): + """ + Represents a Document object. + """ + optionChanged = QtCore.pyqtSignal(str) + ui_type = DocumentObjectUI + + def __init__(self, name): + self.decimals = self.app.decimals + + log.debug("Creating a Document object...") + FlatCAMObj.__init__(self, name) + + self.kind = "document" + self.units = '' + + self.ser_attrs = ['options', 'kind', 'source_file'] + self.source_file = '' + self.doc_code = '' + + self.font_name = None + self.font_italic = None + self.font_bold = None + self.font_underline = None + + self.document_editor_tab = None + + self._read_only = False + self.units_found = self.app.defaults['units'] + + def set_ui(self, ui): + FlatCAMObj.set_ui(self, ui) + log.debug("DocumentObject.set_ui()") + + assert isinstance(self.ui, DocumentObjectUI), \ + "Expected a DocumentObjectUI, got %s" % type(self.ui) + + self.units = self.app.defaults['units'].upper() + self.units_found = self.app.defaults['units'] + + # Fill form fields only on object create + self.to_form() + + # Show/Hide Advanced Options + if self.app.defaults["global_app_level"] == 'b': + self.ui.level.setText(_( + 'Basic' + )) + else: + self.ui.level.setText(_( + 'Advanced' + )) + + self.document_editor_tab = TextEditor(app=self.app) + stylesheet = """ + QTextEdit {selection-background-color:%s; + selection-color:white; + } + """ % self.app.defaults["document_sel_color"] + + self.document_editor_tab.code_editor.setStyleSheet(stylesheet) + + # first clear previous text in text editor (if any) + self.document_editor_tab.code_editor.clear() + self.document_editor_tab.code_editor.setReadOnly(self._read_only) + + self.document_editor_tab.buttonRun.hide() + + self.ui.autocomplete_cb.set_value(self.app.defaults['document_autocompleter']) + self.on_autocomplete_changed(state=self.app.defaults['document_autocompleter']) + self.on_tab_size_change(val=self.app.defaults['document_tab_size']) + + flt = "FlatCAM Docs (*.FlatDoc);;All Files (*.*)" + + # ###################################################################### + # ######################## SIGNALS ##################################### + # ###################################################################### + self.document_editor_tab.buttonOpen.clicked.disconnect() + self.document_editor_tab.buttonOpen.clicked.connect(lambda: self.document_editor_tab.handleOpen(filt=flt)) + self.document_editor_tab.buttonSave.clicked.disconnect() + self.document_editor_tab.buttonSave.clicked.connect(lambda: self.document_editor_tab.handleSaveGCode(filt=flt)) + + self.document_editor_tab.code_editor.textChanged.connect(self.on_text_changed) + + self.ui.font_type_cb.currentFontChanged.connect(self.font_family) + self.ui.font_size_cb.activated.connect(self.font_size) + self.ui.font_bold_tb.clicked.connect(self.on_bold_button) + self.ui.font_italic_tb.clicked.connect(self.on_italic_button) + self.ui.font_under_tb.clicked.connect(self.on_underline_button) + + self.ui.font_color_entry.editingFinished.connect(self.on_font_color_entry) + self.ui.font_color_button.clicked.connect(self.on_font_color_button) + self.ui.sel_color_entry.editingFinished.connect(self.on_selection_color_entry) + self.ui.sel_color_button.clicked.connect(self.on_selection_color_button) + + self.ui.al_left_tb.clicked.connect(lambda: self.document_editor_tab.code_editor.setAlignment(Qt.AlignLeft)) + self.ui.al_center_tb.clicked.connect(lambda: self.document_editor_tab.code_editor.setAlignment(Qt.AlignCenter)) + self.ui.al_right_tb.clicked.connect(lambda: self.document_editor_tab.code_editor.setAlignment(Qt.AlignRight)) + self.ui.al_justify_tb.clicked.connect( + lambda: self.document_editor_tab.code_editor.setAlignment(Qt.AlignJustify) + ) + + self.ui.autocomplete_cb.stateChanged.connect(self.on_autocomplete_changed) + self.ui.tab_size_spinner.returnPressed.connect(self.on_tab_size_change) + # ####################################################################### + + self.ui.font_color_entry.set_value(self.app.defaults['document_font_color']) + self.ui.font_color_button.setStyleSheet( + "background-color:%s" % str(self.app.defaults['document_font_color'])) + + self.ui.sel_color_entry.set_value(self.app.defaults['document_sel_color']) + self.ui.sel_color_button.setStyleSheet( + "background-color:%s" % self.app.defaults['document_sel_color']) + + self.ui.font_size_cb.setCurrentIndex(int(self.app.defaults['document_font_size'])) + + self.document_editor_tab.handleTextChanged() + self.ser_attrs = ['options', 'kind', 'source_file'] + + if Qt.mightBeRichText(self.source_file): + self.document_editor_tab.code_editor.setHtml(self.source_file) + else: + for line in self.source_file.splitlines(): + self.document_editor_tab.code_editor.append(line) + + self.build_ui() + + @property + def read_only(self): + return self._read_only + + @read_only.setter + def read_only(self, val): + if val: + self._read_only = True + else: + self._read_only = False + + def build_ui(self): + FlatCAMObj.build_ui(self) + tab_here = False + + # try to not add too many times a tab that it is already installed + for idx in range(self.app.ui.plot_tab_area.count()): + if self.app.ui.plot_tab_area.widget(idx).objectName() == self.options['name']: + tab_here = True + break + + # add the tab if it is not already added + if tab_here is False: + self.app.ui.plot_tab_area.addTab(self.document_editor_tab, '%s' % _("Document Editor")) + self.document_editor_tab.setObjectName(self.options['name']) + + # Switch plot_area to CNCJob tab + self.app.ui.plot_tab_area.setCurrentWidget(self.document_editor_tab) + + def on_autocomplete_changed(self, state): + if state: + self.document_editor_tab.code_editor.completer_enable = True + else: + self.document_editor_tab.code_editor.completer_enable = False + + def on_tab_size_change(self, val=None): + try: + self.ui.tab_size_spinner.returnPressed.disconnect(self.on_tab_size_change) + except TypeError: + pass + + if val: + self.ui.tab_size_spinner.set_value(val) + + tab_balue = int(self.ui.tab_size_spinner.get_value()) + self.document_editor_tab.code_editor.setTabStopWidth(tab_balue) + self.app.defaults['document_tab_size'] = tab_balue + + self.ui.tab_size_spinner.returnPressed.connect(self.on_tab_size_change) + + def on_text_changed(self): + self.source_file = self.document_editor_tab.code_editor.toHtml() + # print(self.source_file) + + def font_family(self, font): + # self.document_editor_tab.code_editor.selectAll() + font.setPointSize(float(self.ui.font_size_cb.get_value())) + self.document_editor_tab.code_editor.setCurrentFont(font) + self.font_name = self.ui.font_type_cb.currentFont().family() + + def font_size(self): + # self.document_editor_tab.code_editor.selectAll() + self.document_editor_tab.code_editor.setFontPointSize(float(self.ui.font_size_cb.get_value())) + + def on_bold_button(self): + if self.ui.font_bold_tb.isChecked(): + self.document_editor_tab.code_editor.setFontWeight(QtGui.QFont.Bold) + self.font_bold = True + else: + self.document_editor_tab.code_editor.setFontWeight(QtGui.QFont.Normal) + self.font_bold = False + + def on_italic_button(self): + if self.ui.font_italic_tb.isChecked(): + self.document_editor_tab.code_editor.setFontItalic(True) + self.font_italic = True + else: + self.document_editor_tab.code_editor.setFontItalic(False) + self.font_italic = False + + def on_underline_button(self): + if self.ui.font_under_tb.isChecked(): + self.document_editor_tab.code_editor.setFontUnderline(True) + self.font_underline = True + else: + self.document_editor_tab.code_editor.setFontUnderline(False) + self.font_underline = False + + # Setting font colors handlers + def on_font_color_entry(self): + self.app.defaults['document_font_color'] = self.ui.font_color_entry.get_value() + self.ui.font_color_button.setStyleSheet("background-color:%s" % str(self.app.defaults['document_font_color'])) + + def on_font_color_button(self): + current_color = QtGui.QColor(self.app.defaults['document_font_color']) + + c_dialog = QtWidgets.QColorDialog() + font_color = c_dialog.getColor(initial=current_color) + + if font_color.isValid() is False: + return + + self.document_editor_tab.code_editor.setTextColor(font_color) + self.ui.font_color_button.setStyleSheet("background-color:%s" % str(font_color.name())) + + new_val = str(font_color.name()) + self.ui.font_color_entry.set_value(new_val) + self.app.defaults['document_font_color'] = new_val + + # Setting selection colors handlers + def on_selection_color_entry(self): + self.app.defaults['document_sel_color'] = self.ui.sel_color_entry.get_value() + self.ui.sel_color_button.setStyleSheet("background-color:%s" % str(self.app.defaults['document_sel_color'])) + + def on_selection_color_button(self): + current_color = QtGui.QColor(self.app.defaults['document_sel_color']) + + c_dialog = QtWidgets.QColorDialog() + sel_color = c_dialog.getColor(initial=current_color) + + if sel_color.isValid() is False: + return + + p = QtGui.QPalette() + p.setColor(QtGui.QPalette.Highlight, sel_color) + p.setColor(QtGui.QPalette.HighlightedText, QtGui.QColor('white')) + + self.document_editor_tab.code_editor.setPalette(p) + + self.ui.sel_color_button.setStyleSheet("background-color:%s" % str(sel_color.name())) + + new_val = str(sel_color.name()) + self.ui.sel_color_entry.set_value(new_val) + self.app.defaults['document_sel_color'] = new_val + + def to_dict(self): + """ + Returns a representation of the object as a dictionary. + Attributes to include are listed in ``self.ser_attrs``. + + :return: A dictionary-encoded copy of the object. + :rtype: dict + """ + d = {} + for attr in self.ser_attrs: + d[attr] = getattr(self, attr) + return d + + def from_dict(self, d): + """ + Sets object's attributes from a dictionary. + Attributes to include are listed in ``self.ser_attrs``. + This method will look only for only and all the + attributes in ``self.ser_attrs``. They must all + be present. Use only for deserializing saved + objects. + + :param d: Dictionary of attributes to set in the object. + :type d: dict + :return: None + """ + for attr in self.ser_attrs: + setattr(self, attr, d[attr]) diff --git a/flatcamObjects/FlatCAMExcellon.py b/flatcamObjects/FlatCAMExcellon.py new file mode 100644 index 00000000..ee48e2b2 --- /dev/null +++ b/flatcamObjects/FlatCAMExcellon.py @@ -0,0 +1,1622 @@ +# ########################################################## +# FlatCAM: 2D Post-processing for Manufacturing # +# http://flatcam.org # +# Author: Juan Pablo Caram (c) # +# Date: 2/5/2014 # +# MIT Licence # +# ########################################################## + +# ########################################################## +# File modified by: Marius Stanciu # +# ########################################################## + + +from shapely.geometry import Point, LineString + +from copy import deepcopy + +from flatcamParsers.ParseExcellon import Excellon +from flatcamObjects.FlatCAMObj import * + +import itertools + +import gettext +import FlatCAMTranslation as fcTranslate +import builtins + +fcTranslate.apply_language('strings') +if '_' not in builtins.__dict__: + _ = gettext.gettext + + +class ExcellonObject(FlatCAMObj, Excellon): + """ + Represents Excellon/Drill code. + """ + + ui_type = ExcellonObjectUI + optionChanged = QtCore.pyqtSignal(str) + + def __init__(self, name): + self.decimals = self.app.decimals + + self.circle_steps = int(self.app.defaults["geometry_circle_steps"]) + + Excellon.__init__(self, geo_steps_per_circle=self.circle_steps) + FlatCAMObj.__init__(self, name) + + self.kind = "excellon" + + self.options.update({ + "plot": True, + "solid": False, + + "operation": "drill", + "milling_type": "drills", + + "milling_dia": 0.04, + + "cutz": -0.1, + "multidepth": False, + "depthperpass": 0.7, + "travelz": 0.1, + "feedrate": self.app.defaults["geometry_feedrate"], + "feedrate_z": 5.0, + "feedrate_rapid": 5.0, + "tooldia": 0.1, + "slot_tooldia": 0.1, + "toolchange": False, + "toolchangez": 1.0, + "toolchangexy": "0.0, 0.0", + "extracut": self.app.defaults["geometry_extracut"], + "extracut_length": self.app.defaults["geometry_extracut_length"], + "endz": 2.0, + "endxy": '', + + "startz": None, + "offset": 0.0, + "spindlespeed": 0, + "dwell": True, + "dwelltime": 1000, + "ppname_e": 'default', + "ppname_g": self.app.defaults["geometry_ppname_g"], + "z_pdepth": -0.02, + "feedrate_probe": 3.0, + "optimization_type": "B", + }) + + # TODO: Document this. + self.tool_cbs = {} + + # dict that holds the object names and the option name + # the key is the object name (defines in ObjectUI) for each UI element that is a parameter + # particular for a tool and the value is the actual name of the option that the UI element is changing + self.name2option = {} + + # default set of data to be added to each tool in self.tools as self.tools[tool]['data'] = self.default_data + self.default_data = {} + + # fill in self.default_data values from self.options + for opt_key, opt_val in self.app.options.items(): + if opt_key.find('excellon_') == 0: + self.default_data[opt_key] = deepcopy(opt_val) + for opt_key, opt_val in self.app.options.items(): + if opt_key.find('geometry_') == 0: + self.default_data[opt_key] = deepcopy(opt_val) + + # variable to store the total amount of drills per job + self.tot_drill_cnt = 0 + self.tool_row = 0 + + # variable to store the total amount of slots per job + self.tot_slot_cnt = 0 + self.tool_row_slots = 0 + + # variable to store the distance travelled + self.travel_distance = 0.0 + + # store the source file here + self.source_file = "" + + self.multigeo = False + self.units_found = self.app.defaults['units'] + + self.fill_color = self.app.defaults['excellon_plot_fill'] + self.outline_color = self.app.defaults['excellon_plot_line'] + self.alpha_level = 'bf' + + # Attributes to be included in serialization + # Always append to it because it carries contents + # from predecessors. + self.ser_attrs += ['options', 'kind'] + + def merge(self, exc_list, exc_final): + """ + Merge Excellon objects found in exc_list parameter into exc_final object. + Options are always copied from source . + + Tools are disregarded, what is taken in consideration is the unique drill diameters found as values in the + exc_list tools dict's. In the reconstruction section for each unique tool diameter it will be created a + tool_name to be used in the final Excellon object, exc_final. + + If only one object is in exc_list parameter then this function will copy that object in the exc_final + + :param exc_list: List or one object of ExcellonObject Objects to join. + :param exc_final: Destination ExcellonObject object. + :return: None + """ + + try: + decimals_exc = self.decimals + except AttributeError: + decimals_exc = 4 + + # flag to signal that we need to reorder the tools dictionary and drills and slots lists + flag_order = False + + try: + flattened_list = list(itertools.chain(*exc_list)) + except TypeError: + flattened_list = exc_list + + # this dict will hold the unique tool diameters found in the exc_list objects as the dict keys and the dict + # values will be list of Shapely Points; for drills + custom_dict_drills = {} + + # this dict will hold the unique tool diameters found in the exc_list objects as the dict keys and the dict + # values will be list of Shapely Points; for slots + custom_dict_slots = {} + + for exc in flattened_list: + # copy options of the current excellon obj to the final excellon obj + for option in exc.options: + if option != 'name': + try: + exc_final.options[option] = exc.options[option] + except Exception: + exc.app.log.warning("Failed to copy option.", option) + + for drill in exc.drills: + exc_tool_dia = float('%.*f' % (decimals_exc, exc.tools[drill['tool']]['C'])) + + if exc_tool_dia not in custom_dict_drills: + custom_dict_drills[exc_tool_dia] = [drill['point']] + else: + custom_dict_drills[exc_tool_dia].append(drill['point']) + + for slot in exc.slots: + exc_tool_dia = float('%.*f' % (decimals_exc, exc.tools[slot['tool']]['C'])) + + if exc_tool_dia not in custom_dict_slots: + custom_dict_slots[exc_tool_dia] = [[slot['start'], slot['stop']]] + else: + custom_dict_slots[exc_tool_dia].append([slot['start'], slot['stop']]) + + # add the zeros and units to the exc_final object + exc_final.zeros = exc.zeros + exc_final.units = exc.units + + # ########################################## + # Here we add data to the exc_final object # + # ########################################## + + # variable to make tool_name for the tools + current_tool = 0 + # The tools diameter are now the keys in the drill_dia dict and the values are the Shapely Points in case of + # drills + for tool_dia in custom_dict_drills: + # we create a tool name for each key in the drill_dia dict (the key is a unique drill diameter) + current_tool += 1 + + tool_name = str(current_tool) + spec = {"C": float(tool_dia)} + exc_final.tools[tool_name] = spec + + # rebuild the drills list of dict's that belong to the exc_final object + for point in custom_dict_drills[tool_dia]: + exc_final.drills.append( + { + "point": point, + "tool": str(current_tool) + } + ) + + # The tools diameter are now the keys in the drill_dia dict and the values are a list ([start, stop]) + # of two Shapely Points in case of slots + for tool_dia in custom_dict_slots: + # we create a tool name for each key in the slot_dia dict (the key is a unique slot diameter) + # but only if there are no drills + if not exc_final.tools: + current_tool += 1 + tool_name = str(current_tool) + spec = {"C": float(tool_dia)} + exc_final.tools[tool_name] = spec + else: + dia_list = [] + for v in exc_final.tools.values(): + dia_list.append(float(v["C"])) + + if tool_dia not in dia_list: + flag_order = True + + current_tool = len(dia_list) + 1 + tool_name = str(current_tool) + spec = {"C": float(tool_dia)} + exc_final.tools[tool_name] = spec + + else: + for k, v in exc_final.tools.items(): + if v["C"] == tool_dia: + current_tool = int(k) + break + + # rebuild the slots list of dict's that belong to the exc_final object + for point in custom_dict_slots[tool_dia]: + exc_final.slots.append( + { + "start": point[0], + "stop": point[1], + "tool": str(current_tool) + } + ) + + # flag_order == True means that there was an slot diameter not in the tools and we also have drills + # and the new tool was added to self.tools therefore we need to reorder the tools and drills and slots + current_tool = 0 + if flag_order is True: + dia_list = [] + temp_drills = [] + temp_slots = [] + temp_tools = {} + for v in exc_final.tools.values(): + dia_list.append(float(v["C"])) + dia_list.sort() + for ordered_dia in dia_list: + current_tool += 1 + tool_name_temp = str(current_tool) + spec_temp = {"C": float(ordered_dia)} + temp_tools[tool_name_temp] = spec_temp + + for drill in exc_final.drills: + exc_tool_dia = float('%.*f' % (decimals_exc, exc_final.tools[drill['tool']]['C'])) + if exc_tool_dia == ordered_dia: + temp_drills.append( + { + "point": drill["point"], + "tool": str(current_tool) + } + ) + + for slot in exc_final.slots: + slot_tool_dia = float('%.*f' % (decimals_exc, exc_final.tools[slot['tool']]['C'])) + if slot_tool_dia == ordered_dia: + temp_slots.append( + { + "start": slot["start"], + "stop": slot["stop"], + "tool": str(current_tool) + } + ) + + # delete the exc_final tools, drills and slots + exc_final.tools = {} + exc_final.drills[:] = [] + exc_final.slots[:] = [] + + # update the exc_final tools, drills and slots with the ordered values + exc_final.tools = temp_tools + exc_final.drills[:] = temp_drills + exc_final.slots[:] = temp_slots + + # create the geometry for the exc_final object + exc_final.create_geometry() + + def build_ui(self): + FlatCAMObj.build_ui(self) + + self.units = self.app.defaults['units'].upper() + + for row in range(self.ui.tools_table.rowCount()): + try: + # if connected, disconnect the signal from the slot on item_changed as it creates issues + offset_spin_widget = self.ui.tools_table.cellWidget(row, 4) + offset_spin_widget.valueChanged.disconnect() + except (TypeError, AttributeError): + pass + + n = len(self.tools) + # we have (n+2) rows because there are 'n' tools, each a row, plus the last 2 rows for totals. + self.ui.tools_table.setRowCount(n + 2) + + self.tot_drill_cnt = 0 + self.tot_slot_cnt = 0 + + self.tool_row = 0 + + sort = [] + for k, v in list(self.tools.items()): + sort.append((k, v.get('C'))) + sorted_tools = sorted(sort, key=lambda t1: t1[1]) + tools = [i[0] for i in sorted_tools] + + new_options = {} + for opt in self.options: + new_options[opt] = self.options[opt] + + for tool_no in tools: + + # add the data dictionary for each tool with the default values + self.tools[tool_no]['data'] = deepcopy(new_options) + # self.tools[tool_no]['data']["tooldia"] = self.tools[tool_no]["C"] + # self.tools[tool_no]['data']["slot_tooldia"] = self.tools[tool_no]["C"] + + drill_cnt = 0 # variable to store the nr of drills per tool + slot_cnt = 0 # variable to store the nr of slots per tool + + # Find no of drills for the current tool + for drill in self.drills: + if drill['tool'] == tool_no: + drill_cnt += 1 + + self.tot_drill_cnt += drill_cnt + + # Find no of slots for the current tool + for slot in self.slots: + if slot['tool'] == tool_no: + slot_cnt += 1 + + self.tot_slot_cnt += slot_cnt + + exc_id_item = QtWidgets.QTableWidgetItem('%d' % int(tool_no)) + exc_id_item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) + + dia_item = QtWidgets.QTableWidgetItem('%.*f' % (self.decimals, self.tools[tool_no]['C'])) + dia_item.setFlags(QtCore.Qt.ItemIsEnabled) + + drill_count_item = QtWidgets.QTableWidgetItem('%d' % drill_cnt) + drill_count_item.setFlags(QtCore.Qt.ItemIsEnabled) + + # if the slot number is zero is better to not clutter the GUI with zero's so we print a space + slot_count_str = '%d' % slot_cnt if slot_cnt > 0 else '' + slot_count_item = QtWidgets.QTableWidgetItem(slot_count_str) + slot_count_item.setFlags(QtCore.Qt.ItemIsEnabled) + + plot_item = FCCheckBox() + plot_item.setLayoutDirection(QtCore.Qt.RightToLeft) + if self.ui.plot_cb.isChecked(): + plot_item.setChecked(True) + + self.ui.tools_table.setItem(self.tool_row, 0, exc_id_item) # Tool name/id + self.ui.tools_table.setItem(self.tool_row, 1, dia_item) # Diameter + self.ui.tools_table.setItem(self.tool_row, 2, drill_count_item) # Number of drills per tool + self.ui.tools_table.setItem(self.tool_row, 3, slot_count_item) # Number of drills per tool + empty_plot_item = QtWidgets.QTableWidgetItem('') + empty_plot_item.setFlags(~QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) + self.ui.tools_table.setItem(self.tool_row, 5, empty_plot_item) + self.ui.tools_table.setCellWidget(self.tool_row, 5, plot_item) + + self.tool_row += 1 + + # add a last row with the Total number of drills + empty_1 = QtWidgets.QTableWidgetItem('') + empty_1.setFlags(~QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) + empty_1_1 = QtWidgets.QTableWidgetItem('') + empty_1_1.setFlags(~QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) + empty_1_2 = QtWidgets.QTableWidgetItem('') + empty_1_2.setFlags(~QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) + empty_1_3 = QtWidgets.QTableWidgetItem('') + empty_1_3.setFlags(~QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) + + label_tot_drill_count = QtWidgets.QTableWidgetItem(_('Total Drills')) + tot_drill_count = QtWidgets.QTableWidgetItem('%d' % self.tot_drill_cnt) + label_tot_drill_count.setFlags(QtCore.Qt.ItemIsEnabled) + tot_drill_count.setFlags(QtCore.Qt.ItemIsEnabled) + + self.ui.tools_table.setItem(self.tool_row, 0, empty_1) + self.ui.tools_table.setItem(self.tool_row, 1, label_tot_drill_count) + self.ui.tools_table.setItem(self.tool_row, 2, tot_drill_count) # Total number of drills + self.ui.tools_table.setItem(self.tool_row, 3, empty_1_1) + self.ui.tools_table.setItem(self.tool_row, 5, empty_1_3) + + font = QtGui.QFont() + font.setBold(True) + font.setWeight(75) + + for k in [1, 2]: + self.ui.tools_table.item(self.tool_row, k).setForeground(QtGui.QColor(127, 0, 255)) + self.ui.tools_table.item(self.tool_row, k).setFont(font) + + self.tool_row += 1 + + # add a last row with the Total number of slots + empty_2 = QtWidgets.QTableWidgetItem('') + empty_2.setFlags(~QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) + empty_2_1 = QtWidgets.QTableWidgetItem('') + empty_2_1.setFlags(~QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) + empty_2_2 = QtWidgets.QTableWidgetItem('') + empty_2_2.setFlags(~QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) + empty_2_3 = QtWidgets.QTableWidgetItem('') + empty_2_3.setFlags(~QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) + + label_tot_slot_count = QtWidgets.QTableWidgetItem(_('Total Slots')) + tot_slot_count = QtWidgets.QTableWidgetItem('%d' % self.tot_slot_cnt) + label_tot_slot_count.setFlags(QtCore.Qt.ItemIsEnabled) + tot_slot_count.setFlags(QtCore.Qt.ItemIsEnabled) + + self.ui.tools_table.setItem(self.tool_row, 0, empty_2) + self.ui.tools_table.setItem(self.tool_row, 1, label_tot_slot_count) + self.ui.tools_table.setItem(self.tool_row, 2, empty_2_1) + self.ui.tools_table.setItem(self.tool_row, 3, tot_slot_count) # Total number of slots + self.ui.tools_table.setItem(self.tool_row, 5, empty_2_3) + + for kl in [1, 2, 3]: + self.ui.tools_table.item(self.tool_row, kl).setFont(font) + self.ui.tools_table.item(self.tool_row, kl).setForeground(QtGui.QColor(0, 70, 255)) + + # sort the tool diameter column + # self.ui.tools_table.sortItems(1) + + # all the tools are selected by default + self.ui.tools_table.selectColumn(0) + + self.ui.tools_table.resizeColumnsToContents() + self.ui.tools_table.resizeRowsToContents() + + vertical_header = self.ui.tools_table.verticalHeader() + # vertical_header.setSectionResizeMode(QtWidgets.QHeaderView.ResizeToContents) + vertical_header.hide() + self.ui.tools_table.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) + + horizontal_header = self.ui.tools_table.horizontalHeader() + horizontal_header.setMinimumSectionSize(10) + horizontal_header.setDefaultSectionSize(70) + horizontal_header.setSectionResizeMode(0, QtWidgets.QHeaderView.Fixed) + horizontal_header.resizeSection(0, 20) + + horizontal_header.setSectionResizeMode(1, QtWidgets.QHeaderView.Stretch) + + horizontal_header.setSectionResizeMode(2, QtWidgets.QHeaderView.ResizeToContents) + horizontal_header.setSectionResizeMode(3, QtWidgets.QHeaderView.ResizeToContents) + horizontal_header.setSectionResizeMode(5, QtWidgets.QHeaderView.Fixed) + horizontal_header.resizeSection(5, 17) + self.ui.tools_table.setColumnWidth(5, 17) + + # horizontal_header.setStretchLastSection(True) + # horizontal_header.setColumnWidth(2, QtWidgets.QHeaderView.ResizeToContents) + + # horizontal_header.setStretchLastSection(True) + self.ui.tools_table.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) + + self.ui.tools_table.setSortingEnabled(False) + + self.ui.tools_table.setMinimumHeight(self.ui.tools_table.getHeight()) + self.ui.tools_table.setMaximumHeight(self.ui.tools_table.getHeight()) + + if not self.drills: + self.ui.tooldia_entry.hide() + self.ui.generate_milling_button.hide() + else: + self.ui.tooldia_entry.show() + self.ui.generate_milling_button.show() + + if not self.slots: + self.ui.slot_tooldia_entry.hide() + self.ui.generate_milling_slots_button.hide() + else: + self.ui.slot_tooldia_entry.show() + self.ui.generate_milling_slots_button.show() + + # set the text on tool_data_label after loading the object + sel_items = self.ui.tools_table.selectedItems() + sel_rows = [it.row() for it in sel_items] + if len(sel_rows) > 1: + self.ui.tool_data_label.setText( + "%s: %s" % (_('Parameters for'), _("Multiple Tools")) + ) + + self.ui_connect() + + def set_ui(self, ui): + """ + Configures the user interface for this object. + Connects options to form fields. + + :param ui: User interface object. + :type ui: ExcellonObjectUI + :return: None + """ + FlatCAMObj.set_ui(self, ui) + + log.debug("ExcellonObject.set_ui()") + + self.units = self.app.defaults['units'].upper() + + self.form_fields.update({ + "plot": self.ui.plot_cb, + "solid": self.ui.solid_cb, + + "operation": self.ui.operation_radio, + "milling_type": self.ui.milling_type_radio, + + "milling_dia": self.ui.mill_dia_entry, + "cutz": self.ui.cutz_entry, + "multidepth": self.ui.mpass_cb, + "depthperpass": self.ui.maxdepth_entry, + "travelz": self.ui.travelz_entry, + "feedrate_z": self.ui.feedrate_z_entry, + "feedrate": self.ui.xyfeedrate_entry, + "feedrate_rapid": self.ui.feedrate_rapid_entry, + "tooldia": self.ui.tooldia_entry, + "slot_tooldia": self.ui.slot_tooldia_entry, + "toolchange": self.ui.toolchange_cb, + "toolchangez": self.ui.toolchangez_entry, + "extracut": self.ui.extracut_cb, + "extracut_length": self.ui.e_cut_entry, + + "spindlespeed": self.ui.spindlespeed_entry, + "dwell": self.ui.dwell_cb, + "dwelltime": self.ui.dwelltime_entry, + + "startz": self.ui.estartz_entry, + "endz": self.ui.endz_entry, + "endxy": self.ui.endxy_entry, + + "offset": self.ui.offset_entry, + + "ppname_e": self.ui.pp_excellon_name_cb, + "ppname_g": self.ui.pp_geo_name_cb, + "z_pdepth": self.ui.pdepth_entry, + "feedrate_probe": self.ui.feedrate_probe_entry, + # "gcode_type": self.ui.excellon_gcode_type_radio + }) + + self.name2option = { + "e_operation": "operation", + "e_milling_type": "milling_type", + "e_milling_dia": "milling_dia", + "e_cutz": "cutz", + "e_multidepth": "multidepth", + "e_depthperpass": "depthperpass", + + "e_travelz": "travelz", + "e_feedratexy": "feedrate", + "e_feedratez": "feedrate_z", + "e_fr_rapid": "feedrate_rapid", + "e_extracut": "extracut", + "e_extracut_length": "extracut_length", + "e_spindlespeed": "spindlespeed", + "e_dwell": "dwell", + "e_dwelltime": "dwelltime", + "e_offset": "offset", + } + + # populate Excellon preprocessor combobox list + for name in list(self.app.preprocessors.keys()): + # the HPGL preprocessor is only for Geometry not for Excellon job therefore don't add it + if name == 'hpgl': + continue + self.ui.pp_excellon_name_cb.addItem(name) + + # populate Geometry (milling) preprocessor combobox list + for name in list(self.app.preprocessors.keys()): + self.ui.pp_geo_name_cb.addItem(name) + + # Fill form fields + self.to_form() + + # update the changes in UI depending on the selected preprocessor in Preferences + # after this moment all the changes in the Posprocessor combo will be handled by the activated signal of the + # self.ui.pp_excellon_name_cb combobox + self.on_pp_changed() + + # Show/Hide Advanced Options + if self.app.defaults["global_app_level"] == 'b': + self.ui.level.setText('%s' % _('Basic')) + + self.ui.tools_table.setColumnHidden(4, True) + self.ui.tools_table.setColumnHidden(5, True) + self.ui.estartz_label.hide() + self.ui.estartz_entry.hide() + self.ui.feedrate_rapid_label.hide() + self.ui.feedrate_rapid_entry.hide() + self.ui.pdepth_label.hide() + self.ui.pdepth_entry.hide() + self.ui.feedrate_probe_label.hide() + self.ui.feedrate_probe_entry.hide() + else: + self.ui.level.setText('%s' % _('Advanced')) + + assert isinstance(self.ui, ExcellonObjectUI), \ + "Expected a ExcellonObjectUI, got %s" % type(self.ui) + self.ui.plot_cb.stateChanged.connect(self.on_plot_cb_click) + self.ui.solid_cb.stateChanged.connect(self.on_solid_cb_click) + self.ui.generate_cnc_button.clicked.connect(self.on_create_cncjob_button_click) + self.ui.generate_milling_button.clicked.connect(self.on_generate_milling_button_click) + self.ui.generate_milling_slots_button.clicked.connect(self.on_generate_milling_slots_button_click) + + self.on_operation_type(val='drill') + self.ui.operation_radio.activated_custom.connect(self.on_operation_type) + + self.ui.pp_excellon_name_cb.activated.connect(self.on_pp_changed) + + self.ui.apply_param_to_all.clicked.connect(self.on_apply_param_to_all_clicked) + + self.units_found = self.app.defaults['units'] + + # ######################################## + # #######3 TEMP SETTINGS ################# + # ######################################## + self.ui.operation_radio.set_value("drill") + self.ui.operation_radio.setEnabled(False) + + def ui_connect(self): + + # selective plotting + for row in range(self.ui.tools_table.rowCount() - 2): + self.ui.tools_table.cellWidget(row, 5).clicked.connect(self.on_plot_cb_click_table) + self.ui.plot_cb.stateChanged.connect(self.on_plot_cb_click) + + # rows selected + self.ui.tools_table.clicked.connect(self.on_row_selection_change) + self.ui.tools_table.horizontalHeader().sectionClicked.connect(self.on_row_selection_change) + + # value changed in the particular parameters of a tool + for key, option in self.name2option.items(): + current_widget = self.form_fields[option] + + if isinstance(current_widget, FCCheckBox): + current_widget.stateChanged.connect(self.form_to_storage) + if isinstance(current_widget, RadioSet): + current_widget.activated_custom.connect(self.form_to_storage) + elif isinstance(current_widget, FCDoubleSpinner) or isinstance(current_widget, FCSpinner): + current_widget.returnPressed.connect(self.form_to_storage) + + def ui_disconnect(self): + # selective plotting + for row in range(self.ui.tools_table.rowCount()): + try: + self.ui.tools_table.cellWidget(row, 5).clicked.disconnect() + except (TypeError, AttributeError): + pass + try: + self.ui.plot_cb.stateChanged.disconnect() + except (TypeError, AttributeError): + pass + + # rows selected + try: + self.ui.tools_table.clicked.disconnect() + except (TypeError, AttributeError): + pass + try: + self.ui.tools_table.horizontalHeader().sectionClicked.disconnect() + except (TypeError, AttributeError): + pass + + # value changed in the particular parameters of a tool + for key, option in self.name2option.items(): + current_widget = self.form_fields[option] + + if isinstance(current_widget, FCCheckBox): + try: + current_widget.stateChanged.disconnect(self.form_to_storage) + except (TypeError, ValueError): + pass + if isinstance(current_widget, RadioSet): + try: + current_widget.activated_custom.disconnect(self.form_to_storage) + except (TypeError, ValueError): + pass + elif isinstance(current_widget, FCDoubleSpinner) or isinstance(current_widget, FCSpinner): + try: + current_widget.returnPressed.disconnect(self.form_to_storage) + except (TypeError, ValueError): + pass + + def on_row_selection_change(self): + self.ui_disconnect() + + sel_rows = [] + sel_items = self.ui.tools_table.selectedItems() + for it in sel_items: + sel_rows.append(it.row()) + + if not sel_rows: + self.ui.tool_data_label.setText( + "%s: %s" % (_('Parameters for'), _("No Tool Selected")) + ) + self.ui.generate_cnc_button.setDisabled(True) + self.ui.generate_milling_button.setDisabled(True) + self.ui.generate_milling_slots_button.setDisabled(True) + self.ui_connect() + return + else: + self.ui.generate_cnc_button.setDisabled(False) + self.ui.generate_milling_button.setDisabled(False) + self.ui.generate_milling_slots_button.setDisabled(False) + + if len(sel_rows) == 1: + # update the QLabel that shows for which Tool we have the parameters in the UI form + tooluid = int(self.ui.tools_table.item(sel_rows[0], 0).text()) + self.ui.tool_data_label.setText( + "%s: %s %d" % (_('Parameters for'), _("Tool"), tooluid) + ) + else: + self.ui.tool_data_label.setText( + "%s: %s" % (_('Parameters for'), _("Multiple Tools")) + ) + + for c_row in sel_rows: + # populate the form with the data from the tool associated with the row parameter + try: + item = self.ui.tools_table.item(c_row, 0) + if type(item) is not None: + tooluid = item.text() + self.storage_to_form(self.tools[str(tooluid)]['data']) + else: + self.ui_connect() + return + except Exception as e: + log.debug("Tool missing. Add a tool in Geo Tool Table. %s" % str(e)) + self.ui_connect() + return + + self.ui_connect() + + def storage_to_form(self, dict_storage): + for form_key in self.form_fields: + for storage_key in dict_storage: + if form_key == storage_key and form_key not in \ + ["toolchange", "toolchangez", "startz", "endz", "ppname_e", "ppname_g"]: + try: + self.form_fields[form_key].set_value(dict_storage[form_key]) + except Exception as e: + log.debug("ExcellonObject.storage_to_form() --> %s" % str(e)) + pass + + def form_to_storage(self): + if self.ui.tools_table.rowCount() == 0: + # there is no tool in tool table so we can't save the GUI elements values to storage + return + + self.ui_disconnect() + + widget_changed = self.sender() + wdg_objname = widget_changed.objectName() + option_changed = self.name2option[wdg_objname] + + # row = self.ui.tools_table.currentRow() + rows = sorted(set(index.row() for index in self.ui.tools_table.selectedIndexes())) + for row in rows: + if row < 0: + row = 0 + tooluid_item = int(self.ui.tools_table.item(row, 0).text()) + + for tooluid_key, tooluid_val in self.tools.items(): + if int(tooluid_key) == tooluid_item: + new_option_value = self.form_fields[option_changed].get_value() + if option_changed in tooluid_val: + tooluid_val[option_changed] = new_option_value + if option_changed in tooluid_val['data']: + tooluid_val['data'][option_changed] = new_option_value + + self.ui_connect() + + def on_operation_type(self, val): + if val == 'mill': + self.ui.mill_type_label.show() + self.ui.milling_type_radio.show() + self.ui.mill_dia_label.show() + self.ui.mill_dia_entry.show() + self.ui.frxylabel.show() + self.ui.xyfeedrate_entry.show() + self.ui.extracut_cb.show() + self.ui.e_cut_entry.show() + + # if 'laser' not in self.ui.pp_excellon_name_cb.get_value().lower(): + # self.ui.mpass_cb.show() + # self.ui.maxdepth_entry.show() + else: + self.ui.mill_type_label.hide() + self.ui.milling_type_radio.hide() + self.ui.mill_dia_label.hide() + self.ui.mill_dia_entry.hide() + # self.ui.mpass_cb.hide() + # self.ui.maxdepth_entry.hide() + self.ui.frxylabel.hide() + self.ui.xyfeedrate_entry.hide() + self.ui.extracut_cb.hide() + self.ui.e_cut_entry.hide() + + def get_selected_tools_list(self): + """ + Returns the keys to the self.tools dictionary corresponding + to the selections on the tool list in the GUI. + + :return: List of tools. + :rtype: list + """ + + return [str(x.text()) for x in self.ui.tools_table.selectedItems()] + + def get_selected_tools_table_items(self): + """ + Returns a list of lists, each list in the list is made out of row elements + + :return: List of table_tools items. + :rtype: list + """ + table_tools_items = [] + for x in self.ui.tools_table.selectedItems(): + # from the columnCount we subtract a value of 1 which represent the last column (plot column) + # which does not have text + txt = '' + elem = [] + + for column in range(0, self.ui.tools_table.columnCount() - 1): + try: + txt = self.ui.tools_table.item(x.row(), column).text() + except AttributeError: + try: + txt = self.ui.tools_table.cellWidget(x.row(), column).currentText() + except AttributeError: + pass + elem.append(txt) + table_tools_items.append(deepcopy(elem)) + # table_tools_items.append([self.ui.tools_table.item(x.row(), column).text() + # for column in range(0, self.ui.tools_table.columnCount() - 1)]) + for item in table_tools_items: + item[0] = str(item[0]) + return table_tools_items + + def export_excellon(self, whole, fract, e_zeros=None, form='dec', factor=1, slot_type='routing'): + """ + Returns two values, first is a boolean , if 1 then the file has slots and second contain the Excellon code + :return: has_slots and Excellon_code + """ + + excellon_code = '' + + # store here if the file has slots, return 1 if any slots, 0 if only drills + has_slots = 0 + + # drills processing + try: + if self.drills: + length = whole + fract + for tool in self.tools: + excellon_code += 'T0%s\n' % str(tool) if int(tool) < 10 else 'T%s\n' % str(tool) + + for drill in self.drills: + if form == 'dec' and tool == drill['tool']: + drill_x = drill['point'].x * factor + drill_y = drill['point'].y * factor + excellon_code += "X{:.{dec}f}Y{:.{dec}f}\n".format(drill_x, drill_y, dec=fract) + elif e_zeros == 'LZ' and tool == drill['tool']: + drill_x = drill['point'].x * factor + drill_y = drill['point'].y * factor + + exc_x_formatted = "{:.{dec}f}".format(drill_x, dec=fract) + exc_y_formatted = "{:.{dec}f}".format(drill_y, dec=fract) + + # extract whole part and decimal part + exc_x_formatted = exc_x_formatted.partition('.') + exc_y_formatted = exc_y_formatted.partition('.') + + # left padd the 'whole' part with zeros + x_whole = exc_x_formatted[0].rjust(whole, '0') + y_whole = exc_y_formatted[0].rjust(whole, '0') + + # restore the coordinate padded in the left with 0 and added the decimal part + # without the decinal dot + exc_x_formatted = x_whole + exc_x_formatted[2] + exc_y_formatted = y_whole + exc_y_formatted[2] + + excellon_code += "X{xform}Y{yform}\n".format(xform=exc_x_formatted, + yform=exc_y_formatted) + elif tool == drill['tool']: + drill_x = drill['point'].x * factor + drill_y = drill['point'].y * factor + + exc_x_formatted = "{:.{dec}f}".format(drill_x, dec=fract).replace('.', '') + exc_y_formatted = "{:.{dec}f}".format(drill_y, dec=fract).replace('.', '') + + # pad with rear zeros + exc_x_formatted.ljust(length, '0') + exc_y_formatted.ljust(length, '0') + + excellon_code += "X{xform}Y{yform}\n".format(xform=exc_x_formatted, + yform=exc_y_formatted) + except Exception as e: + log.debug(str(e)) + + # slots processing + try: + if self.slots: + has_slots = 1 + for tool in self.tools: + excellon_code += 'G05\n' + + if int(tool) < 10: + excellon_code += 'T0' + str(tool) + '\n' + else: + excellon_code += 'T' + str(tool) + '\n' + + for slot in self.slots: + if form == 'dec' and tool == slot['tool']: + start_slot_x = slot['start'].x * factor + start_slot_y = slot['start'].y * factor + stop_slot_x = slot['stop'].x * factor + stop_slot_y = slot['stop'].y * factor + if slot_type == 'routing': + excellon_code += "G00X{:.{dec}f}Y{:.{dec}f}\nM15\n".format(start_slot_x, + start_slot_y, + dec=fract) + excellon_code += "G01X{:.{dec}f}Y{:.{dec}f}\nM16\n".format(stop_slot_x, + stop_slot_y, + dec=fract) + elif slot_type == 'drilling': + excellon_code += "X{:.{dec}f}Y{:.{dec}f}G85X{:.{dec}f}Y{:.{dec}f}\nG05\n".format( + start_slot_x, start_slot_y, stop_slot_x, stop_slot_y, dec=fract + ) + + elif e_zeros == 'LZ' and tool == slot['tool']: + start_slot_x = slot['start'].x * factor + start_slot_y = slot['start'].y * factor + stop_slot_x = slot['stop'].x * factor + stop_slot_y = slot['stop'].y * factor + + start_slot_x_formatted = "{:.{dec}f}".format(start_slot_x, dec=fract).replace('.', '') + start_slot_y_formatted = "{:.{dec}f}".format(start_slot_y, dec=fract).replace('.', '') + stop_slot_x_formatted = "{:.{dec}f}".format(stop_slot_x, dec=fract).replace('.', '') + stop_slot_y_formatted = "{:.{dec}f}".format(stop_slot_y, dec=fract).replace('.', '') + + # extract whole part and decimal part + start_slot_x_formatted = start_slot_x_formatted.partition('.') + start_slot_y_formatted = start_slot_y_formatted.partition('.') + stop_slot_x_formatted = stop_slot_x_formatted.partition('.') + stop_slot_y_formatted = stop_slot_y_formatted.partition('.') + + # left padd the 'whole' part with zeros + start_x_whole = start_slot_x_formatted[0].rjust(whole, '0') + start_y_whole = start_slot_y_formatted[0].rjust(whole, '0') + stop_x_whole = stop_slot_x_formatted[0].rjust(whole, '0') + stop_y_whole = stop_slot_y_formatted[0].rjust(whole, '0') + + # restore the coordinate padded in the left with 0 and added the decimal part + # without the decinal dot + start_slot_x_formatted = start_x_whole + start_slot_x_formatted[2] + start_slot_y_formatted = start_y_whole + start_slot_y_formatted[2] + stop_slot_x_formatted = stop_x_whole + stop_slot_x_formatted[2] + stop_slot_y_formatted = stop_y_whole + stop_slot_y_formatted[2] + + if slot_type == 'routing': + excellon_code += "G00X{xstart}Y{ystart}\nM15\n".format(xstart=start_slot_x_formatted, + ystart=start_slot_y_formatted) + excellon_code += "G01X{xstop}Y{ystop}\nM16\n".format(xstop=stop_slot_x_formatted, + ystop=stop_slot_y_formatted) + elif slot_type == 'drilling': + excellon_code += "{xstart}Y{ystart}G85X{xstop}Y{ystop}\nG05\n".format( + xstart=start_slot_x_formatted, ystart=start_slot_y_formatted, + xstop=stop_slot_x_formatted, ystop=stop_slot_y_formatted + ) + elif tool == slot['tool']: + start_slot_x = slot['start'].x * factor + start_slot_y = slot['start'].y * factor + stop_slot_x = slot['stop'].x * factor + stop_slot_y = slot['stop'].y * factor + length = whole + fract + + start_slot_x_formatted = "{:.{dec}f}".format(start_slot_x, dec=fract).replace('.', '') + start_slot_y_formatted = "{:.{dec}f}".format(start_slot_y, dec=fract).replace('.', '') + stop_slot_x_formatted = "{:.{dec}f}".format(stop_slot_x, dec=fract).replace('.', '') + stop_slot_y_formatted = "{:.{dec}f}".format(stop_slot_y, dec=fract).replace('.', '') + + # pad with rear zeros + start_slot_x_formatted.ljust(length, '0') + start_slot_y_formatted.ljust(length, '0') + stop_slot_x_formatted.ljust(length, '0') + stop_slot_y_formatted.ljust(length, '0') + + if slot_type == 'routing': + excellon_code += "G00X{xstart}Y{ystart}\nM15\n".format(xstart=start_slot_x_formatted, + ystart=start_slot_y_formatted) + excellon_code += "G01X{xstop}Y{ystop}\nM16\n".format(xstop=stop_slot_x_formatted, + ystop=stop_slot_y_formatted) + elif slot_type == 'drilling': + excellon_code += "{xstart}Y{ystart}G85X{xstop}Y{ystop}\nG05\n".format( + xstart=start_slot_x_formatted, ystart=start_slot_y_formatted, + xstop=stop_slot_x_formatted, ystop=stop_slot_y_formatted + ) + except Exception as e: + log.debug(str(e)) + + if not self.drills and not self.slots: + log.debug("FlatCAMObj.ExcellonObject.export_excellon() --> Excellon Object is empty: no drills, no slots.") + return 'fail' + + return has_slots, excellon_code + + def generate_milling_drills(self, tools=None, outname=None, tooldia=None, plot=False, use_thread=False): + """ + Note: This method is a good template for generic operations as + it takes it's options from parameters or otherwise from the + object's options and returns a (success, msg) tuple as feedback + for shell operations. + + :return: Success/failure condition tuple (bool, str). + :rtype: tuple + """ + + # Get the tools from the list. These are keys + # to self.tools + if tools is None: + tools = self.get_selected_tools_list() + + if outname is None: + outname = self.options["name"] + "_mill" + + if tooldia is None: + tooldia = float(self.options["tooldia"]) + + # Sort tools by diameter. items() -> [('name', diameter), ...] + # sorted_tools = sorted(list(self.tools.items()), key=lambda tl: tl[1]) # no longer works in Python3 + + sort = [] + for k, v in self.tools.items(): + sort.append((k, v.get('C'))) + sorted_tools = sorted(sort, key=lambda t1: t1[1]) + + if tools == "all": + tools = [i[0] for i in sorted_tools] # List if ordered tool names. + log.debug("Tools 'all' and sorted are: %s" % str(tools)) + + if len(tools) == 0: + self.app.inform.emit('[ERROR_NOTCL] %s' % + _("Please select one or more tools from the list and try again.")) + return False, "Error: No tools." + + for tool in tools: + if tooldia > self.tools[tool]["C"]: + self.app.inform.emit( + '[ERROR_NOTCL] %s %s: %s' % ( + _("Milling tool for DRILLS is larger than hole size. Cancelled."), + _("Tool"), + str(tool) + ) + ) + return False, "Error: Milling tool is larger than hole." + + def geo_init(geo_obj, app_obj): + assert geo_obj.kind == 'geometry', "Initializer expected a GeometryObject, got %s" % type(geo_obj) + + # ## Add properties to the object + + # get the tool_table items in a list of row items + tool_table_items = self.get_selected_tools_table_items() + # insert an information only element in the front + tool_table_items.insert(0, [_("Tool_nr"), _("Diameter"), _("Drills_Nr"), _("Slots_Nr")]) + + geo_obj.options['Tools_in_use'] = tool_table_items + geo_obj.options['type'] = 'Excellon Geometry' + geo_obj.options["cnctooldia"] = str(tooldia) + + geo_obj.solid_geometry = [] + + # in case that the tool used has the same diameter with the hole, and since the maximum resolution + # for FlatCAM is 6 decimals, + # we add a tenth of the minimum value, meaning 0.0000001, which from our point of view is "almost zero" + for hole in self.drills: + if hole['tool'] in tools: + buffer_value = self.tools[hole['tool']]["C"] / 2 - tooldia / 2 + if buffer_value == 0: + geo_obj.solid_geometry.append( + Point(hole['point']).buffer(0.0000001).exterior) + else: + geo_obj.solid_geometry.append( + Point(hole['point']).buffer(buffer_value).exterior) + if use_thread: + def geo_thread(app_obj): + app_obj.new_object("geometry", outname, geo_init, plot=plot) + + # Create a promise with the new name + self.app.collection.promise(outname) + + # Send to worker + self.app.worker_task.emit({'fcn': geo_thread, 'params': [self.app]}) + else: + self.app.new_object("geometry", outname, geo_init, plot=plot) + + return True, "" + + def generate_milling_slots(self, tools=None, outname=None, tooldia=None, plot=True, use_thread=False): + """ + Note: This method is a good template for generic operations as + it takes it's options from parameters or otherwise from the + object's options and returns a (success, msg) tuple as feedback + for shell operations. + + :return: Success/failure condition tuple (bool, str). + :rtype: tuple + """ + + # Get the tools from the list. These are keys + # to self.tools + if tools is None: + tools = self.get_selected_tools_list() + + if outname is None: + outname = self.options["name"] + "_mill" + + if tooldia is None: + tooldia = float(self.options["slot_tooldia"]) + + # Sort tools by diameter. items() -> [('name', diameter), ...] + # sorted_tools = sorted(list(self.tools.items()), key=lambda tl: tl[1]) # no longer works in Python3 + + sort = [] + for k, v in self.tools.items(): + sort.append((k, v.get('C'))) + sorted_tools = sorted(sort, key=lambda t1: t1[1]) + + if tools == "all": + tools = [i[0] for i in sorted_tools] # List if ordered tool names. + log.debug("Tools 'all' and sorted are: %s" % str(tools)) + + if len(tools) == 0: + self.app.inform.emit('[ERROR_NOTCL] %s' % + _("Please select one or more tools from the list and try again.")) + return False, "Error: No tools." + + for tool in tools: + # I add the 0.0001 value to account for the rounding error in converting from IN to MM and reverse + adj_toolstable_tooldia = float('%.*f' % (self.decimals, float(tooldia))) + adj_file_tooldia = float('%.*f' % (self.decimals, float(self.tools[tool]["C"]))) + if adj_toolstable_tooldia > adj_file_tooldia + 0.0001: + self.app.inform.emit('[ERROR_NOTCL] %s' % + _("Milling tool for SLOTS is larger than hole size. Cancelled.")) + return False, "Error: Milling tool is larger than hole." + + def geo_init(geo_obj, app_obj): + assert geo_obj.kind == 'geometry' "Initializer expected a GeometryObject, got %s" % type(geo_obj) + + # ## Add properties to the object + + # get the tool_table items in a list of row items + tool_table_items = self.get_selected_tools_table_items() + # insert an information only element in the front + tool_table_items.insert(0, [_("Tool_nr"), _("Diameter"), _("Drills_Nr"), _("Slots_Nr")]) + + geo_obj.options['Tools_in_use'] = tool_table_items + geo_obj.options['type'] = 'Excellon Geometry' + geo_obj.options["cnctooldia"] = str(tooldia) + + geo_obj.solid_geometry = [] + + # in case that the tool used has the same diameter with the hole, and since the maximum resolution + # for FlatCAM is 6 decimals, + # we add a tenth of the minimum value, meaning 0.0000001, which from our point of view is "almost zero" + for slot in self.slots: + if slot['tool'] in tools: + toolstable_tool = float('%.*f' % (self.decimals, float(tooldia))) + file_tool = float('%.*f' % (self.decimals, float(self.tools[tool]["C"]))) + + # I add the 0.0001 value to account for the rounding error in converting from IN to MM and reverse + # for the file_tool (tooldia actually) + buffer_value = float(file_tool / 2) - float(toolstable_tool / 2) + 0.0001 + if buffer_value == 0: + start = slot['start'] + stop = slot['stop'] + + lines_string = LineString([start, stop]) + poly = lines_string.buffer(0.0000001, int(self.geo_steps_per_circle)).exterior + geo_obj.solid_geometry.append(poly) + else: + start = slot['start'] + stop = slot['stop'] + + lines_string = LineString([start, stop]) + poly = lines_string.buffer(buffer_value, int(self.geo_steps_per_circle)).exterior + geo_obj.solid_geometry.append(poly) + + if use_thread: + def geo_thread(app_obj): + app_obj.new_object("geometry", outname + '_slot', geo_init, plot=plot) + + # Create a promise with the new name + self.app.collection.promise(outname) + + # Send to worker + self.app.worker_task.emit({'fcn': geo_thread, 'params': [self.app]}) + else: + self.app.new_object("geometry", outname + '_slot', geo_init, plot=plot) + + return True, "" + + def on_generate_milling_button_click(self, *args): + self.app.report_usage("excellon_on_create_milling_drills button") + self.read_form() + + self.generate_milling_drills(use_thread=False) + + def on_generate_milling_slots_button_click(self, *args): + self.app.report_usage("excellon_on_create_milling_slots_button") + self.read_form() + + self.generate_milling_slots(use_thread=False) + + def on_pp_changed(self): + current_pp = self.ui.pp_excellon_name_cb.get_value() + + if "toolchange_probe" in current_pp.lower(): + self.ui.pdepth_entry.setVisible(True) + self.ui.pdepth_label.show() + + self.ui.feedrate_probe_entry.setVisible(True) + self.ui.feedrate_probe_label.show() + else: + self.ui.pdepth_entry.setVisible(False) + self.ui.pdepth_label.hide() + + self.ui.feedrate_probe_entry.setVisible(False) + self.ui.feedrate_probe_label.hide() + + if 'marlin' in current_pp.lower() or 'custom' in current_pp.lower(): + self.ui.feedrate_rapid_label.show() + self.ui.feedrate_rapid_entry.show() + else: + self.ui.feedrate_rapid_label.hide() + self.ui.feedrate_rapid_entry.hide() + + if 'laser' in current_pp.lower(): + self.ui.cutzlabel.hide() + self.ui.cutz_entry.hide() + try: + self.ui.mpass_cb.hide() + self.ui.maxdepth_entry.hide() + except AttributeError: + pass + + if 'marlin' in current_pp.lower(): + self.ui.travelzlabel.setText('%s:' % _("Focus Z")) + self.ui.endz_label.show() + self.ui.endz_entry.show() + else: + self.ui.travelzlabel.hide() + self.ui.travelz_entry.hide() + + self.ui.endz_label.hide() + self.ui.endz_entry.hide() + + try: + self.ui.frzlabel.hide() + self.ui.feedrate_z_entry.hide() + except AttributeError: + pass + + self.ui.dwell_cb.hide() + self.ui.dwelltime_entry.hide() + + self.ui.spindle_label.setText('%s:' % _("Laser Power")) + + try: + self.ui.tool_offset_label.hide() + self.ui.offset_entry.hide() + except AttributeError: + pass + else: + self.ui.cutzlabel.show() + self.ui.cutz_entry.show() + try: + self.ui.mpass_cb.show() + self.ui.maxdepth_entry.show() + except AttributeError: + pass + + self.ui.travelzlabel.setText('%s:' % _('Travel Z')) + + self.ui.travelzlabel.show() + self.ui.travelz_entry.show() + + self.ui.endz_label.show() + self.ui.endz_entry.show() + + try: + self.ui.frzlabel.show() + self.ui.feedrate_z_entry.show() + except AttributeError: + pass + self.ui.dwell_cb.show() + self.ui.dwelltime_entry.show() + + self.ui.spindle_label.setText('%s:' % _('Spindle speed')) + + try: + self.ui.tool_offset_lbl.show() + self.ui.offset_entry.show() + except AttributeError: + pass + + def on_create_cncjob_button_click(self, *args): + self.app.report_usage("excellon_on_create_cncjob_button") + self.read_form() + + # Get the tools from the list + tools = self.get_selected_tools_list() + + if len(tools) == 0: + # if there is a single tool in the table (remember that the last 2 rows are for totals and do not count in + # tool number) it means that there are 3 rows (1 tool and 2 totals). + # in this case regardless of the selection status of that tool, use it. + if self.ui.tools_table.rowCount() == 3: + tools.append(self.ui.tools_table.item(0, 0).text()) + else: + self.app.inform.emit('[ERROR_NOTCL] %s' % + _("Please select one or more tools from the list and try again.")) + return + + xmin = self.options['xmin'] + ymin = self.options['ymin'] + xmax = self.options['xmax'] + ymax = self.options['ymax'] + + job_name = self.options["name"] + "_cnc" + pp_excellon_name = self.options["ppname_e"] + + # Object initialization function for app.new_object() + def job_init(job_obj, app_obj): + assert job_obj.kind == 'cncjob', "Initializer expected a CNCJobObject, got %s" % type(job_obj) + + # get the tool_table items in a list of row items + tool_table_items = self.get_selected_tools_table_items() + # insert an information only element in the front + tool_table_items.insert(0, [_("Tool_nr"), _("Diameter"), _("Drills_Nr"), _("Slots_Nr")]) + + # ## Add properties to the object + + job_obj.origin_kind = 'excellon' + + job_obj.options['Tools_in_use'] = tool_table_items + job_obj.options['type'] = 'Excellon' + job_obj.options['ppname_e'] = pp_excellon_name + + job_obj.multidepth = self.options["multidepth"] + job_obj.z_depthpercut = self.options["depthperpass"] + + job_obj.z_move = float(self.options["travelz"]) + job_obj.feedrate = float(self.options["feedrate_z"]) + job_obj.z_feedrate = float(self.options["feedrate_z"]) + job_obj.feedrate_rapid = float(self.options["feedrate_rapid"]) + + job_obj.spindlespeed = float(self.options["spindlespeed"]) if self.options["spindlespeed"] != 0 else None + job_obj.spindledir = self.app.defaults['excellon_spindledir'] + job_obj.dwell = self.options["dwell"] + job_obj.dwelltime = float(self.options["dwelltime"]) + + job_obj.pp_excellon_name = pp_excellon_name + + job_obj.toolchange_xy_type = "excellon" + job_obj.coords_decimals = int(self.app.defaults["cncjob_coords_decimals"]) + job_obj.fr_decimals = int(self.app.defaults["cncjob_fr_decimals"]) + + job_obj.options['xmin'] = xmin + job_obj.options['ymin'] = ymin + job_obj.options['xmax'] = xmax + job_obj.options['ymax'] = ymax + + job_obj.z_pdepth = float(self.options["z_pdepth"]) + job_obj.feedrate_probe = float(self.options["feedrate_probe"]) + + job_obj.z_cut = float(self.options['cutz']) + job_obj.toolchange = self.options["toolchange"] + job_obj.xy_toolchange = self.app.defaults["excellon_toolchangexy"] + job_obj.z_toolchange = float(self.options["toolchangez"]) + job_obj.startz = float(self.options["startz"]) if self.options["startz"] else None + job_obj.endz = float(self.options["endz"]) + job_obj.xy_end = self.options["endxy"] + job_obj.excellon_optimization_type = self.app.defaults["excellon_optimization_type"] + + tools_csv = ','.join(tools) + ret_val = job_obj.generate_from_excellon_by_tool(self, tools_csv, use_ui=True) + + if ret_val == 'fail': + return 'fail' + + job_obj.gcode_parse() + job_obj.create_geometry() + + # To be run in separate thread + def job_thread(app_obj): + with self.app.proc_container.new(_("Generating CNC Code")): + app_obj.new_object("cncjob", job_name, job_init) + + # Create promise for the new name. + self.app.collection.promise(job_name) + + # Send to worker + # self.app.worker.add_task(job_thread, [self.app]) + self.app.worker_task.emit({'fcn': job_thread, 'params': [self.app]}) + + def convert_units(self, units): + log.debug("FlatCAMObj.ExcellonObject.convert_units()") + + Excellon.convert_units(self, units) + + # factor = Excellon.convert_units(self, units) + # self.options['drillz'] = float(self.options['drillz']) * factor + # self.options['travelz'] = float(self.options['travelz']) * factor + # self.options['feedrate'] = float(self.options['feedrate']) * factor + # self.options['feedrate_rapid'] = float(self.options['feedrate_rapid']) * factor + # self.options['toolchangez'] = float(self.options['toolchangez']) * factor + # + # if self.app.defaults["excellon_toolchangexy"] == '': + # self.options['toolchangexy'] = "0.0, 0.0" + # else: + # coords_xy = [float(eval(coord)) for coord in self.app.defaults["excellon_toolchangexy"].split(",")] + # if len(coords_xy) < 2: + # self.app.inform.emit('[ERROR] %s' % _("The Toolchange X,Y field in Edit -> Preferences has to be " + # "in the format (x, y) \n" + # "but now there is only one value, not two. ")) + # return 'fail' + # coords_xy[0] *= factor + # coords_xy[1] *= factor + # self.options['toolchangexy'] = "%f, %f" % (coords_xy[0], coords_xy[1]) + # + # if self.options['startz'] is not None: + # self.options['startz'] = float(self.options['startz']) * factor + # self.options['endz'] = float(self.options['endz']) * factor + + def on_solid_cb_click(self, *args): + if self.muted_ui: + return + self.read_form_item('solid') + self.plot() + + def on_plot_cb_click(self, *args): + if self.muted_ui: + return + self.plot() + self.read_form_item('plot') + + self.ui_disconnect() + cb_flag = self.ui.plot_cb.isChecked() + for row in range(self.ui.tools_table.rowCount() - 2): + table_cb = self.ui.tools_table.cellWidget(row, 5) + if cb_flag: + table_cb.setChecked(True) + else: + table_cb.setChecked(False) + + self.ui_connect() + + def on_plot_cb_click_table(self): + # self.ui.cnc_tools_table.cellWidget(row, 2).widget().setCheckState(QtCore.Qt.Unchecked) + self.ui_disconnect() + # cw = self.sender() + # cw_index = self.ui.tools_table.indexAt(cw.pos()) + # cw_row = cw_index.row() + check_row = 0 + + self.shapes.clear(update=True) + for tool_key in self.tools: + solid_geometry = self.tools[tool_key]['solid_geometry'] + + # find the geo_tool_table row associated with the tool_key + for row in range(self.ui.tools_table.rowCount()): + tool_item = int(self.ui.tools_table.item(row, 0).text()) + if tool_item == int(tool_key): + check_row = row + break + if self.ui.tools_table.cellWidget(check_row, 5).isChecked(): + self.options['plot'] = True + # self.plot_element(element=solid_geometry, visible=True) + # Plot excellon (All polygons?) + if self.options["solid"]: + for geo in solid_geometry: + self.add_shape(shape=geo, color='#750000BF', face_color='#C40000BF', + visible=self.options['plot'], + layer=2) + else: + for geo in solid_geometry: + self.add_shape(shape=geo.exterior, color='red', visible=self.options['plot']) + for ints in geo.interiors: + self.add_shape(shape=ints, color='green', visible=self.options['plot']) + self.shapes.redraw() + + # make sure that the general plot is disabled if one of the row plot's are disabled and + # if all the row plot's are enabled also enable the general plot checkbox + cb_cnt = 0 + total_row = self.ui.tools_table.rowCount() + for row in range(total_row - 2): + if self.ui.tools_table.cellWidget(row, 5).isChecked(): + cb_cnt += 1 + else: + cb_cnt -= 1 + if cb_cnt < total_row - 2: + self.ui.plot_cb.setChecked(False) + else: + self.ui.plot_cb.setChecked(True) + self.ui_connect() + + def plot(self, visible=None, kind=None): + + # Does all the required setup and returns False + # if the 'ptint' option is set to False. + if not FlatCAMObj.plot(self): + return + + # try: + # # Plot Excellon (All polygons?) + # if self.options["solid"]: + # for tool in self.tools: + # for geo in self.tools[tool]['solid_geometry']: + # self.add_shape(shape=geo, color='#750000BF', face_color='#C40000BF', + # visible=self.options['plot'], + # layer=2) + # else: + # for tool in self.tools: + # for geo in self.tools[tool]['solid_geometry']: + # self.add_shape(shape=geo.exterior, color='red', visible=self.options['plot']) + # for ints in geo.interiors: + # self.add_shape(shape=ints, color='orange', visible=self.options['plot']) + # + # self.shapes.redraw() + # return + # except (ObjectDeleted, AttributeError, KeyError): + # self.shapes.clear(update=True) + + # this stays for compatibility reasons, in case we try to open old projects + try: + __ = iter(self.solid_geometry) + except TypeError: + self.solid_geometry = [self.solid_geometry] + + visible = visible if visible else self.options['plot'] + + try: + # Plot Excellon (All polygons?) + if self.options["solid"]: + for geo in self.solid_geometry: + self.add_shape(shape=geo, + color=self.outline_color, + face_color=self.fill_color, + visible=visible, + layer=2) + else: + for geo in self.solid_geometry: + self.add_shape(shape=geo.exterior, color='red', visible=visible) + for ints in geo.interiors: + self.add_shape(shape=ints, color='orange', visible=visible) + + self.shapes.redraw() + except (ObjectDeleted, AttributeError): + self.shapes.clear(update=True) + + def on_apply_param_to_all_clicked(self): + if self.ui.tools_table.rowCount() == 0: + # there is no tool in tool table so we can't save the GUI elements values to storage + log.debug("ExcellonObject.on_apply_param_to_all_clicked() --> no tool in Tools Table, aborting.") + return + + self.ui_disconnect() + + row = self.ui.tools_table.currentRow() + if row < 0: + row = 0 + + tooluid_item = int(self.ui.tools_table.item(row, 0).text()) + temp_tool_data = {} + + for tooluid_key, tooluid_val in self.tools.items(): + if int(tooluid_key) == tooluid_item: + # this will hold the 'data' key of the self.tools[tool] dictionary that corresponds to + # the current row in the tool table + temp_tool_data = tooluid_val['data'] + break + + for tooluid_key, tooluid_val in self.tools.items(): + tooluid_val['data'] = deepcopy(temp_tool_data) + + self.app.inform.emit('[success] %s' % _("Current Tool parameters were applied to all tools.")) + + self.ui_connect() diff --git a/flatcamObjects/FlatCAMGeometry.py b/flatcamObjects/FlatCAMGeometry.py new file mode 100644 index 00000000..aba7b711 --- /dev/null +++ b/flatcamObjects/FlatCAMGeometry.py @@ -0,0 +1,2622 @@ +# ########################################################## +# FlatCAM: 2D Post-processing for Manufacturing # +# http://flatcam.org # +# Author: Juan Pablo Caram (c) # +# Date: 2/5/2014 # +# MIT Licence # +# ########################################################## + +# ########################################################## +# File modified by: Marius Stanciu # +# ########################################################## + +from shapely.geometry import Polygon, MultiPolygon, MultiLineString, LineString, LinearRing +import shapely.affinity as affinity + +from camlib import Geometry + +from flatcamObjects.FlatCAMObj import * + +import ezdxf +import math +import numpy as np +from copy import deepcopy +import traceback + +import gettext +import FlatCAMTranslation as fcTranslate +import builtins + +fcTranslate.apply_language('strings') +if '_' not in builtins.__dict__: + _ = gettext.gettext + + +class GeometryObject(FlatCAMObj, Geometry): + """ + Geometric object not associated with a specific + format. + """ + optionChanged = QtCore.pyqtSignal(str) + ui_type = GeometryObjectUI + + def __init__(self, name): + self.decimals = self.app.decimals + + self.circle_steps = int(self.app.defaults["geometry_circle_steps"]) + + FlatCAMObj.__init__(self, name) + Geometry.__init__(self, geo_steps_per_circle=self.circle_steps) + + self.kind = "geometry" + + self.options.update({ + "plot": True, + "cutz": -0.002, + "vtipdia": 0.1, + "vtipangle": 30, + "travelz": 0.1, + "feedrate": 5.0, + "feedrate_z": 5.0, + "feedrate_rapid": 5.0, + "spindlespeed": 0, + "dwell": True, + "dwelltime": 1000, + "multidepth": False, + "depthperpass": 0.002, + "extracut": False, + "extracut_length": 0.1, + "endz": 2.0, + "endxy": '', + + "startz": None, + "toolchange": False, + "toolchangez": 1.0, + "toolchangexy": "0.0, 0.0", + "ppname_g": 'default', + "z_pdepth": -0.02, + "feedrate_probe": 3.0, + }) + + if "cnctooldia" not in self.options: + if type(self.app.defaults["geometry_cnctooldia"]) == float: + self.options["cnctooldia"] = self.app.defaults["geometry_cnctooldia"] + else: + try: + tools_string = self.app.defaults["geometry_cnctooldia"].split(",") + tools_diameters = [eval(a) for a in tools_string if a != ''] + self.options["cnctooldia"] = tools_diameters[0] if tools_diameters else 0.0 + except Exception as e: + log.debug("FlatCAMObj.GeometryObject.init() --> %s" % str(e)) + + self.options["startz"] = self.app.defaults["geometry_startz"] + + # this will hold the tool unique ID that is useful when having multiple tools with same diameter + self.tooluid = 0 + + ''' + self.tools = {} + This is a dictionary. Each dict key is associated with a tool used in geo_tools_table. The key is the + tool_id of the tools and the value is another dict that will hold the data under the following form: + {tooluid: { + 'tooldia': 1, + 'offset': 'Path', + 'offset_value': 0.0 + 'type': 'Rough', + 'tool_type': 'C1', + 'data': self.default_tool_data + 'solid_geometry': [] + } + } + ''' + self.tools = {} + + # this dict is to store those elements (tools) of self.tools that are selected in the self.geo_tools_table + # those elements are the ones used for generating GCode + self.sel_tools = {} + + self.offset_item_options = ["Path", "In", "Out", "Custom"] + self.type_item_options = [_("Iso"), _("Rough"), _("Finish")] + self.tool_type_item_options = ["C1", "C2", "C3", "C4", "B", "V"] + + # flag to store if the V-Shape tool is selected in self.ui.geo_tools_table + self.v_tool_type = None + + # flag to store if the Geometry is type 'multi-geometry' meaning that each tool has it's own geometry + # the default value is False + self.multigeo = False + + # flag to store if the geometry is part of a special group of geometries that can't be processed by the default + # engine of FlatCAM. Most likely are generated by some of tools and are special cases of geometries. + self.special_group = None + + self.old_pp_state = self.app.defaults["geometry_multidepth"] + self.old_toolchangeg_state = self.app.defaults["geometry_toolchange"] + self.units_found = self.app.defaults['units'] + + # this variable can be updated by the Object that generates the geometry + self.tool_type = 'C1' + + # save here the old value for the Cut Z before it is changed by selecting a V-shape type tool in the tool table + self.old_cutz = self.app.defaults["geometry_cutz"] + + self.fill_color = self.app.defaults['geometry_plot_line'] + self.outline_color = self.app.defaults['geometry_plot_line'] + self.alpha_level = 'FF' + + self.param_fields = {} + + # Attributes to be included in serialization + # Always append to it because it carries contents + # from predecessors. + self.ser_attrs += ['options', 'kind', 'tools', 'multigeo'] + + def build_ui(self): + self.ui_disconnect() + FlatCAMObj.build_ui(self) + + self.units = self.app.defaults['units'] + + tool_idx = 0 + + n = len(self.tools) + self.ui.geo_tools_table.setRowCount(n) + + for tooluid_key, tooluid_value in self.tools.items(): + tool_idx += 1 + row_no = tool_idx - 1 + + tool_id = QtWidgets.QTableWidgetItem('%d' % int(tool_idx)) + tool_id.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) + self.ui.geo_tools_table.setItem(row_no, 0, tool_id) # Tool name/id + + # Make sure that the tool diameter when in MM is with no more than 2 decimals. + # There are no tool bits in MM with more than 3 decimals diameter. + # For INCH the decimals should be no more than 3. There are no tools under 10mils. + + dia_item = QtWidgets.QTableWidgetItem('%.*f' % (self.decimals, float(tooluid_value['tooldia']))) + + dia_item.setFlags(QtCore.Qt.ItemIsEnabled) + + offset_item = FCComboBox() + for item in self.offset_item_options: + offset_item.addItem(item) + # offset_item.setStyleSheet('background-color: rgb(255,255,255)') + idx = offset_item.findText(tooluid_value['offset']) + offset_item.setCurrentIndex(idx) + + type_item = FCComboBox() + for item in self.type_item_options: + type_item.addItem(item) + # type_item.setStyleSheet('background-color: rgb(255,255,255)') + idx = type_item.findText(tooluid_value['type']) + type_item.setCurrentIndex(idx) + + tool_type_item = FCComboBox() + for item in self.tool_type_item_options: + tool_type_item.addItem(item) + # tool_type_item.setStyleSheet('background-color: rgb(255,255,255)') + idx = tool_type_item.findText(tooluid_value['tool_type']) + tool_type_item.setCurrentIndex(idx) + + tool_uid_item = QtWidgets.QTableWidgetItem(str(tooluid_key)) + + plot_item = FCCheckBox() + plot_item.setLayoutDirection(QtCore.Qt.RightToLeft) + if self.ui.plot_cb.isChecked(): + plot_item.setChecked(True) + + self.ui.geo_tools_table.setItem(row_no, 1, dia_item) # Diameter + self.ui.geo_tools_table.setCellWidget(row_no, 2, offset_item) + self.ui.geo_tools_table.setCellWidget(row_no, 3, type_item) + self.ui.geo_tools_table.setCellWidget(row_no, 4, tool_type_item) + + # ## REMEMBER: THIS COLUMN IS HIDDEN IN OBJECTUI.PY ### + self.ui.geo_tools_table.setItem(row_no, 5, tool_uid_item) # Tool unique ID + self.ui.geo_tools_table.setCellWidget(row_no, 6, plot_item) + + try: + self.ui.tool_offset_entry.set_value(tooluid_value['offset_value']) + except Exception as e: + log.debug("build_ui() --> Could not set the 'offset_value' key in self.tools. Error: %s" % str(e)) + + # make the diameter column editable + for row in range(tool_idx): + self.ui.geo_tools_table.item(row, 1).setFlags(QtCore.Qt.ItemIsSelectable | + QtCore.Qt.ItemIsEditable | + QtCore.Qt.ItemIsEnabled) + + # sort the tool diameter column + # self.ui.geo_tools_table.sortItems(1) + # all the tools are selected by default + # self.ui.geo_tools_table.selectColumn(0) + + self.ui.geo_tools_table.resizeColumnsToContents() + self.ui.geo_tools_table.resizeRowsToContents() + + vertical_header = self.ui.geo_tools_table.verticalHeader() + # vertical_header.setSectionResizeMode(QtWidgets.QHeaderView.ResizeToContents) + vertical_header.hide() + self.ui.geo_tools_table.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) + + horizontal_header = self.ui.geo_tools_table.horizontalHeader() + horizontal_header.setMinimumSectionSize(10) + horizontal_header.setDefaultSectionSize(70) + horizontal_header.setSectionResizeMode(0, QtWidgets.QHeaderView.Fixed) + horizontal_header.resizeSection(0, 20) + horizontal_header.setSectionResizeMode(1, QtWidgets.QHeaderView.Stretch) + # horizontal_header.setColumnWidth(2, QtWidgets.QHeaderView.ResizeToContents) + horizontal_header.setSectionResizeMode(3, QtWidgets.QHeaderView.ResizeToContents) + horizontal_header.setSectionResizeMode(4, QtWidgets.QHeaderView.Fixed) + horizontal_header.resizeSection(4, 40) + horizontal_header.setSectionResizeMode(6, QtWidgets.QHeaderView.Fixed) + horizontal_header.resizeSection(4, 17) + # horizontal_header.setStretchLastSection(True) + self.ui.geo_tools_table.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) + + self.ui.geo_tools_table.setColumnWidth(0, 20) + self.ui.geo_tools_table.setColumnWidth(4, 40) + self.ui.geo_tools_table.setColumnWidth(6, 17) + + # self.ui.geo_tools_table.setSortingEnabled(True) + + self.ui.geo_tools_table.setMinimumHeight(self.ui.geo_tools_table.getHeight()) + self.ui.geo_tools_table.setMaximumHeight(self.ui.geo_tools_table.getHeight()) + + # update UI for all rows - useful after units conversion but only if there is at least one row + row_cnt = self.ui.geo_tools_table.rowCount() + if row_cnt > 0: + for r in range(row_cnt): + self.update_ui(r) + + # select only the first tool / row + selected_row = 0 + try: + self.select_tools_table_row(selected_row, clearsel=True) + # update the Geometry UI + self.update_ui() + except Exception as e: + # when the tools table is empty there will be this error but once the table is populated it will go away + log.debug(str(e)) + + # disable the Plot column in Tool Table if the geometry is SingleGeo as it is not needed + # and can create some problems + if self.multigeo is False: + self.ui.geo_tools_table.setColumnHidden(6, True) + else: + self.ui.geo_tools_table.setColumnHidden(6, False) + + self.set_tool_offset_visibility(selected_row) + + # HACK: for whatever reasons the name in Selected tab is reverted to the original one after a successful rename + # done in the collection view but only for Geometry objects. Perhaps some references remains. Should be fixed. + self.ui.name_entry.set_value(self.options['name']) + self.ui_connect() + + self.ui.e_cut_entry.setDisabled(False) if self.ui.extracut_cb.get_value() else \ + self.ui.e_cut_entry.setDisabled(True) + + # set the text on tool_data_label after loading the object + sel_rows = [] + sel_items = self.ui.geo_tools_table.selectedItems() + for it in sel_items: + sel_rows.append(it.row()) + if len(sel_rows) > 1: + self.ui.tool_data_label.setText( + "%s: %s" % (_('Parameters for'), _("Multiple Tools")) + ) + + def set_ui(self, ui): + FlatCAMObj.set_ui(self, ui) + + log.debug("GeometryObject.set_ui()") + + assert isinstance(self.ui, GeometryObjectUI), \ + "Expected a GeometryObjectUI, got %s" % type(self.ui) + + self.units = self.app.defaults['units'].upper() + self.units_found = self.app.defaults['units'] + + # populate preprocessor names in the combobox + for name in list(self.app.preprocessors.keys()): + self.ui.pp_geometry_name_cb.addItem(name) + + self.form_fields.update({ + "plot": self.ui.plot_cb, + "cutz": self.ui.cutz_entry, + "vtipdia": self.ui.tipdia_entry, + "vtipangle": self.ui.tipangle_entry, + "travelz": self.ui.travelz_entry, + "feedrate": self.ui.cncfeedrate_entry, + "feedrate_z": self.ui.feedrate_z_entry, + "feedrate_rapid": self.ui.feedrate_rapid_entry, + "spindlespeed": self.ui.cncspindlespeed_entry, + "dwell": self.ui.dwell_cb, + "dwelltime": self.ui.dwelltime_entry, + "multidepth": self.ui.mpass_cb, + "ppname_g": self.ui.pp_geometry_name_cb, + "z_pdepth": self.ui.pdepth_entry, + "feedrate_probe": self.ui.feedrate_probe_entry, + "depthperpass": self.ui.maxdepth_entry, + "extracut": self.ui.extracut_cb, + "extracut_length": self.ui.e_cut_entry, + "toolchange": self.ui.toolchangeg_cb, + "toolchangez": self.ui.toolchangez_entry, + "endz": self.ui.endz_entry, + "endxy": self.ui.endxy_entry, + "cnctooldia": self.ui.addtool_entry + }) + + self.param_fields.update({ + "vtipdia": self.ui.tipdia_entry, + "vtipangle": self.ui.tipangle_entry, + "cutz": self.ui.cutz_entry, + "depthperpass": self.ui.maxdepth_entry, + "multidepth": self.ui.mpass_cb, + "travelz": self.ui.travelz_entry, + "feedrate": self.ui.cncfeedrate_entry, + "feedrate_z": self.ui.feedrate_z_entry, + "feedrate_rapid": self.ui.feedrate_rapid_entry, + "extracut": self.ui.extracut_cb, + "extracut_length": self.ui.e_cut_entry, + "spindlespeed": self.ui.cncspindlespeed_entry, + "dwelltime": self.ui.dwelltime_entry, + "dwell": self.ui.dwell_cb, + "pdepth": self.ui.pdepth_entry, + "pfeedrate": self.ui.feedrate_probe_entry, + }) + # Fill form fields only on object create + self.to_form() + + # update the changes in UI depending on the selected preprocessor in Preferences + # after this moment all the changes in the Posprocessor combo will be handled by the activated signal of the + # self.ui.pp_geometry_name_cb combobox + self.on_pp_changed() + + self.ui.tipdialabel.hide() + self.ui.tipdia_entry.hide() + self.ui.tipanglelabel.hide() + self.ui.tipangle_entry.hide() + self.ui.cutz_entry.setDisabled(False) + + # store here the default data for Geometry Data + self.default_data = {} + self.default_data.update({ + "name": None, + "plot": None, + "cutz": None, + "vtipdia": None, + "vtipangle": None, + "travelz": None, + "feedrate": None, + "feedrate_z": None, + "feedrate_rapid": None, + "dwell": None, + "dwelltime": None, + "multidepth": None, + "ppname_g": None, + "depthperpass": None, + "extracut": None, + "extracut_length": None, + "toolchange": None, + "toolchangez": None, + "endz": None, + "endxy": '', + "spindlespeed": 0, + "toolchangexy": None, + "startz": None + }) + + # fill in self.default_data values from self.options + for def_key in self.default_data: + for opt_key, opt_val in self.options.items(): + if def_key == opt_key: + self.default_data[def_key] = deepcopy(opt_val) + + if type(self.options["cnctooldia"]) == float: + tools_list = [self.options["cnctooldia"]] + else: + try: + temp_tools = self.options["cnctooldia"].split(",") + tools_list = [ + float(eval(dia)) for dia in temp_tools if dia != '' + ] + except Exception as e: + log.error("GeometryObject.set_ui() -> At least one tool diameter needed. " + "Verify in Edit -> Preferences -> Geometry General -> Tool dia. %s" % str(e)) + return + + self.tooluid += 1 + + if not self.tools: + for toold in tools_list: + new_data = deepcopy(self.default_data) + self.tools.update({ + self.tooluid: { + 'tooldia': float('%.*f' % (self.decimals, float(toold))), + 'offset': 'Path', + 'offset_value': 0.0, + 'type': _('Rough'), + 'tool_type': self.tool_type, + 'data': new_data, + 'solid_geometry': self.solid_geometry + } + }) + self.tooluid += 1 + else: + # if self.tools is not empty then it can safely be assumed that it comes from an opened project. + # Because of the serialization the self.tools list on project save, the dict keys (members of self.tools + # are each a dict) are turned into strings so we rebuild the self.tools elements so the keys are + # again float type; dict's don't like having keys changed when iterated through therefore the need for the + # following convoluted way of changing the keys from string to float type + temp_tools = {} + for tooluid_key in self.tools: + val = deepcopy(self.tools[tooluid_key]) + new_key = deepcopy(int(tooluid_key)) + temp_tools[new_key] = val + + self.tools.clear() + self.tools = deepcopy(temp_tools) + + self.ui.tool_offset_entry.hide() + self.ui.tool_offset_lbl.hide() + + # used to store the state of the mpass_cb if the selected preprocessor for geometry is hpgl + self.old_pp_state = self.default_data['multidepth'] + self.old_toolchangeg_state = self.default_data['toolchange'] + + if not isinstance(self.ui, GeometryObjectUI): + log.debug("Expected a GeometryObjectUI, got %s" % type(self.ui)) + return + + self.ui.geo_tools_table.setupContextMenu() + self.ui.geo_tools_table.addContextMenu( + _("Add from Tool DB"), self.on_tool_add_from_db_clicked, + icon=QtGui.QIcon(self.app.resource_location + "/plus16.png")) + self.ui.geo_tools_table.addContextMenu( + _("Copy"), self.on_tool_copy, + icon=QtGui.QIcon(self.app.resource_location + "/copy16.png")) + self.ui.geo_tools_table.addContextMenu( + _("Delete"), lambda: self.on_tool_delete(all_tools=None), + icon=QtGui.QIcon(self.app.resource_location + "/delete32.png")) + + # Show/Hide Advanced Options + if self.app.defaults["global_app_level"] == 'b': + self.ui.level.setText('%s' % _('Basic')) + + self.ui.geo_tools_table.setColumnHidden(2, True) + self.ui.geo_tools_table.setColumnHidden(3, True) + # self.ui.geo_tools_table.setColumnHidden(4, True) + self.ui.addtool_entry_lbl.hide() + self.ui.addtool_entry.hide() + self.ui.addtool_btn.hide() + self.ui.copytool_btn.hide() + self.ui.deltool_btn.hide() + # self.ui.endz_label.hide() + # self.ui.endz_entry.hide() + self.ui.fr_rapidlabel.hide() + self.ui.feedrate_rapid_entry.hide() + self.ui.extracut_cb.hide() + self.ui.e_cut_entry.hide() + self.ui.pdepth_label.hide() + self.ui.pdepth_entry.hide() + self.ui.feedrate_probe_label.hide() + self.ui.feedrate_probe_entry.hide() + else: + self.ui.level.setText('%s' % _('Advanced')) + + self.ui.e_cut_entry.setDisabled(False) if self.app.defaults['geometry_extracut'] else \ + self.ui.e_cut_entry.setDisabled(True) + self.ui.extracut_cb.toggled.connect(lambda state: self.ui.e_cut_entry.setDisabled(not state)) + + self.ui.plot_cb.stateChanged.connect(self.on_plot_cb_click) + self.ui.generate_cnc_button.clicked.connect(self.on_generatecnc_button_click) + self.ui.paint_tool_button.clicked.connect(lambda: self.app.paint_tool.run(toggle=False)) + self.ui.generate_ncc_button.clicked.connect(lambda: self.app.ncclear_tool.run(toggle=False)) + self.ui.pp_geometry_name_cb.activated.connect(self.on_pp_changed) + + self.ui.tipdia_entry.valueChanged.connect(self.update_cutz) + self.ui.tipangle_entry.valueChanged.connect(self.update_cutz) + + self.ui.addtool_from_db_btn.clicked.connect(self.on_tool_add_from_db_clicked) + self.ui.apply_param_to_all.clicked.connect(self.on_apply_param_to_all_clicked) + self.ui.cutz_entry.returnPressed.connect(self.on_cut_z_changed) + + def on_cut_z_changed(self): + self.old_cutz = self.ui.cutz_entry.get_value() + + def set_tool_offset_visibility(self, current_row): + if current_row is None: + return + try: + tool_offset = self.ui.geo_tools_table.cellWidget(current_row, 2) + if tool_offset is not None: + tool_offset_txt = tool_offset.currentText() + if tool_offset_txt == 'Custom': + self.ui.tool_offset_entry.show() + self.ui.tool_offset_lbl.show() + else: + self.ui.tool_offset_entry.hide() + self.ui.tool_offset_lbl.hide() + except Exception as e: + log.debug("set_tool_offset_visibility() --> " + str(e)) + return + + def on_offset_value_edited(self): + """ + This will save the offset_value into self.tools storage whenever the offset value is edited + :return: + """ + + for current_row in self.ui.geo_tools_table.selectedItems(): + # sometime the header get selected and it has row number -1 + # we don't want to do anything with the header :) + if current_row.row() < 0: + continue + tool_uid = int(self.ui.geo_tools_table.item(current_row.row(), 5).text()) + self.set_tool_offset_visibility(current_row.row()) + + for tooluid_key, tooluid_value in self.tools.items(): + if int(tooluid_key) == tool_uid: + try: + tooluid_value['offset_value'] = float(self.ui.tool_offset_entry.get_value()) + except ValueError: + # try to convert comma to decimal point. if it's still not working error message and return + try: + tooluid_value['offset_value'] = float( + self.ui.tool_offset_entry.get_value().replace(',', '.') + ) + except ValueError: + self.app.inform.emit('[ERROR_NOTCL] %s' % + _("Wrong value format entered, use a number.")) + return + + def ui_connect(self): + # on any change to the widgets that matter it will be called self.gui_form_to_storage which will save the + # changes in geometry UI + for i in self.param_fields: + current_widget = self.param_fields[i] + if isinstance(current_widget, FCCheckBox): + current_widget.stateChanged.connect(self.gui_form_to_storage) + elif isinstance(current_widget, FCComboBox): + current_widget.currentIndexChanged.connect(self.gui_form_to_storage) + elif isinstance(current_widget, FloatEntry) or isinstance(current_widget, LengthEntry) or \ + isinstance(current_widget, FCEntry) or isinstance(current_widget, IntEntry): + current_widget.editingFinished.connect(self.gui_form_to_storage) + elif isinstance(current_widget, FCSpinner) or isinstance(current_widget, FCDoubleSpinner): + current_widget.returnPressed.connect(self.gui_form_to_storage) + + for row in range(self.ui.geo_tools_table.rowCount()): + for col in [2, 3, 4]: + self.ui.geo_tools_table.cellWidget(row, col).currentIndexChanged.connect( + self.on_tooltable_cellwidget_change) + + # I use lambda's because the connected functions have parameters that could be used in certain scenarios + self.ui.addtool_btn.clicked.connect(lambda: self.on_tool_add()) + + self.ui.copytool_btn.clicked.connect(lambda: self.on_tool_copy()) + self.ui.deltool_btn.clicked.connect(lambda: self.on_tool_delete()) + + # self.ui.geo_tools_table.currentItemChanged.connect(self.on_row_selection_change) + self.ui.geo_tools_table.clicked.connect(self.on_row_selection_change) + self.ui.geo_tools_table.horizontalHeader().sectionClicked.connect(self.on_row_selection_change) + + self.ui.geo_tools_table.itemChanged.connect(self.on_tool_edit) + self.ui.tool_offset_entry.returnPressed.connect(self.on_offset_value_edited) + + for row in range(self.ui.geo_tools_table.rowCount()): + self.ui.geo_tools_table.cellWidget(row, 6).clicked.connect(self.on_plot_cb_click_table) + self.ui.plot_cb.stateChanged.connect(self.on_plot_cb_click) + + # common parameters update + self.ui.pp_geometry_name_cb.currentIndexChanged.connect(self.update_common_param_in_storage) + + def ui_disconnect(self): + + # on any change to the widgets that matter it will be called self.gui_form_to_storage which will save the + # changes in geometry UI + for i in self.param_fields: + # current_widget = self.ui.grid3.itemAt(i).widget() + current_widget = self.param_fields[i] + if isinstance(current_widget, FCCheckBox): + try: + current_widget.stateChanged.disconnect(self.gui_form_to_storage) + except (TypeError, AttributeError): + pass + elif isinstance(current_widget, FCComboBox): + try: + current_widget.currentIndexChanged.disconnect(self.gui_form_to_storage) + except (TypeError, AttributeError): + pass + elif isinstance(current_widget, LengthEntry) or isinstance(current_widget, IntEntry) or \ + isinstance(current_widget, FCEntry) or isinstance(current_widget, FloatEntry): + try: + current_widget.editingFinished.disconnect(self.gui_form_to_storage) + except (TypeError, AttributeError): + pass + elif isinstance(current_widget, FCSpinner) or isinstance(current_widget, FCDoubleSpinner): + try: + current_widget.returnPressed.disconnect(self.gui_form_to_storage) + except TypeError: + pass + + for row in range(self.ui.geo_tools_table.rowCount()): + for col in [2, 3, 4]: + try: + self.ui.geo_tools_table.cellWidget(row, col).currentIndexChanged.disconnect() + except (TypeError, AttributeError): + pass + + try: + self.ui.addtool_btn.clicked.disconnect() + except (TypeError, AttributeError): + pass + + try: + self.ui.copytool_btn.clicked.disconnect() + except (TypeError, AttributeError): + pass + + try: + self.ui.deltool_btn.clicked.disconnect() + except (TypeError, AttributeError): + pass + + try: + self.ui.geo_tools_table.clicked.disconnect() + except (TypeError, AttributeError): + pass + try: + self.ui.geo_tools_table.horizontalHeader().sectionClicked.disconnect() + except (TypeError, AttributeError): + pass + + try: + self.ui.geo_tools_table.itemChanged.disconnect() + except (TypeError, AttributeError): + pass + + try: + self.ui.tool_offset_entry.returnPressed.disconnect() + except (TypeError, AttributeError): + pass + + for row in range(self.ui.geo_tools_table.rowCount()): + try: + self.ui.geo_tools_table.cellWidget(row, 6).clicked.disconnect() + except (TypeError, AttributeError): + pass + + try: + self.ui.plot_cb.stateChanged.disconnect() + except (TypeError, AttributeError): + pass + + def on_row_selection_change(self): + self.update_ui() + + def update_ui(self, row=None): + self.ui_disconnect() + + if row is None: + sel_rows = [] + sel_items = self.ui.geo_tools_table.selectedItems() + for it in sel_items: + sel_rows.append(it.row()) + else: + sel_rows = row if type(row) == list else [row] + + if not sel_rows: + sel_rows = [0] + + for current_row in sel_rows: + self.set_tool_offset_visibility(current_row) + + # populate the form with the data from the tool associated with the row parameter + try: + item = self.ui.geo_tools_table.item(current_row, 5) + if type(item) is not None: + tooluid = int(item.text()) + else: + self.ui_connect() + return + except Exception as e: + log.debug("Tool missing. Add a tool in Geo Tool Table. %s" % str(e)) + self.ui_connect() + return + + # update the QLabel that shows for which Tool we have the parameters in the UI form + if len(sel_rows) == 1: + self.ui.tool_data_label.setText( + "%s: %s %d" % (_('Parameters for'), _("Tool"), tooluid) + ) + + # update the form with the V-Shape fields if V-Shape selected in the geo_tool_table + # also modify the Cut Z form entry to reflect the calculated Cut Z from values got from V-Shape Fields + try: + item = self.ui.geo_tools_table.cellWidget(current_row, 4) + if item is not None: + tool_type_txt = item.currentText() + self.ui_update_v_shape(tool_type_txt=tool_type_txt) + else: + self.ui_connect() + return + except Exception as e: + log.debug("Tool missing in ui_update_v_shape(). Add a tool in Geo Tool Table. %s" % str(e)) + return + + try: + # set the form with data from the newly selected tool + for tooluid_key, tooluid_value in list(self.tools.items()): + if int(tooluid_key) == tooluid: + for key, value in list(tooluid_value.items()): + if key == 'data': + form_value_storage = tooluid_value['data'] + self.update_form(form_value_storage) + if key == 'offset_value': + # update the offset value in the entry even if the entry is hidden + self.ui.tool_offset_entry.set_value(tooluid_value['offset_value']) + + if key == 'tool_type' and value == 'V': + self.update_cutz() + except Exception as e: + log.debug("GeometryObject.update_ui() -> %s " % str(e)) + + else: + self.ui.tool_data_label.setText( + "%s: %s" % (_('Parameters for'), _("Multiple Tools")) + ) + + self.ui_connect() + + def on_tool_add(self, dia=None): + self.ui_disconnect() + + self.units = self.app.defaults['units'].upper() + + if dia is not None: + tooldia = dia + else: + tooldia = float(self.ui.addtool_entry.get_value()) + + # construct a list of all 'tooluid' in the self.tools + # tool_uid_list = [] + # for tooluid_key in self.tools: + # tool_uid_list.append(int(tooluid_key)) + tool_uid_list = [int(tooluid_key) for tooluid_key in self.tools] + + # find maximum from the temp_uid, add 1 and this is the new 'tooluid' + max_uid = max(tool_uid_list) if tool_uid_list else 0 + self.tooluid = max_uid + 1 + + tooldia = float('%.*f' % (self.decimals, tooldia)) + + # here we actually add the new tool; if there is no tool in the tool table we add a tool with default data + # otherwise we add a tool with data copied from last tool + if self.tools: + last_data = self.tools[max_uid]['data'] + last_offset = self.tools[max_uid]['offset'] + last_offset_value = self.tools[max_uid]['offset_value'] + last_type = self.tools[max_uid]['type'] + last_tool_type = self.tools[max_uid]['tool_type'] + last_solid_geometry = self.tools[max_uid]['solid_geometry'] + + # if previous geometry was empty (it may happen for the first tool added) + # then copy the object.solid_geometry + if not last_solid_geometry: + last_solid_geometry = self.solid_geometry + + self.tools.update({ + self.tooluid: { + 'tooldia': tooldia, + 'offset': last_offset, + 'offset_value': last_offset_value, + 'type': last_type, + 'tool_type': last_tool_type, + 'data': deepcopy(last_data), + 'solid_geometry': deepcopy(last_solid_geometry) + } + }) + else: + self.tools.update({ + self.tooluid: { + 'tooldia': tooldia, + 'offset': 'Path', + 'offset_value': 0.0, + 'type': _('Rough'), + 'tool_type': 'C1', + 'data': deepcopy(self.default_data), + 'solid_geometry': self.solid_geometry + } + }) + + self.tools[self.tooluid]['data']['name'] = self.options['name'] + + self.ui.tool_offset_entry.hide() + self.ui.tool_offset_lbl.hide() + + # we do this HACK to make sure the tools attribute to be serialized is updated in the self.ser_attrs list + try: + self.ser_attrs.remove('tools') + except TypeError: + pass + self.ser_attrs.append('tools') + + self.app.inform.emit('[success] %s' % _("Tool added in Tool Table.")) + self.ui_connect() + self.build_ui() + + # if there is no tool left in the Tools Table, enable the parameters GUI + if self.ui.geo_tools_table.rowCount() != 0: + self.ui.geo_param_frame.setDisabled(False) + + def on_tool_add_from_db_clicked(self): + """ + Called when the user wants to add a new tool from Tools Database. It will create the Tools Database object + and display the Tools Database tab in the form needed for the Tool adding + :return: None + """ + + # if the Tools Database is already opened focus on it + for idx in range(self.app.ui.plot_tab_area.count()): + if self.app.ui.plot_tab_area.tabText(idx) == _("Tools Database"): + self.app.ui.plot_tab_area.setCurrentWidget(self.app.tools_db_tab) + break + self.app.on_tools_database() + self.app.tools_db_tab.ok_to_add = True + self.app.tools_db_tab.buttons_frame.hide() + self.app.tools_db_tab.add_tool_from_db.show() + self.app.tools_db_tab.cancel_tool_from_db.show() + + def on_tool_from_db_inserted(self, tool): + """ + Called from the Tools DB object through a App method when adding a tool from Tools Database + :param tool: a dict with the tool data + :return: None + """ + + self.ui_disconnect() + self.units = self.app.defaults['units'].upper() + + tooldia = float(tool['tooldia']) + + # construct a list of all 'tooluid' in the self.tools + tool_uid_list = [] + for tooluid_key in self.tools: + tool_uid_item = int(tooluid_key) + tool_uid_list.append(tool_uid_item) + + # find maximum from the temp_uid, add 1 and this is the new 'tooluid' + if not tool_uid_list: + max_uid = 0 + else: + max_uid = max(tool_uid_list) + self.tooluid = max_uid + 1 + + tooldia = float('%.*f' % (self.decimals, tooldia)) + + self.tools.update({ + self.tooluid: { + 'tooldia': tooldia, + 'offset': tool['offset'], + 'offset_value': float(tool['offset_value']), + 'type': tool['type'], + 'tool_type': tool['tool_type'], + 'data': deepcopy(tool['data']), + 'solid_geometry': self.solid_geometry + } + }) + + self.tools[self.tooluid]['data']['name'] = self.options['name'] + + self.ui.tool_offset_entry.hide() + self.ui.tool_offset_lbl.hide() + + # we do this HACK to make sure the tools attribute to be serialized is updated in the self.ser_attrs list + try: + self.ser_attrs.remove('tools') + except TypeError: + pass + self.ser_attrs.append('tools') + + self.ui_connect() + self.build_ui() + + # if there is no tool left in the Tools Table, enable the parameters GUI + if self.ui.geo_tools_table.rowCount() != 0: + self.ui.geo_param_frame.setDisabled(False) + + def on_tool_copy(self, all_tools=None): + self.ui_disconnect() + + # find the tool_uid maximum value in the self.tools + uid_list = [] + for key in self.tools: + uid_list.append(int(key)) + try: + max_uid = max(uid_list, key=int) + except ValueError: + max_uid = 0 + + if all_tools is None: + if self.ui.geo_tools_table.selectedItems(): + for current_row in self.ui.geo_tools_table.selectedItems(): + # sometime the header get selected and it has row number -1 + # we don't want to do anything with the header :) + if current_row.row() < 0: + continue + try: + tooluid_copy = int(self.ui.geo_tools_table.item(current_row.row(), 5).text()) + self.set_tool_offset_visibility(current_row.row()) + max_uid += 1 + self.tools[int(max_uid)] = deepcopy(self.tools[tooluid_copy]) + except AttributeError: + self.app.inform.emit('[WARNING_NOTCL] %s' % _("Failed. Select a tool to copy.")) + self.ui_connect() + self.build_ui() + return + except Exception as e: + log.debug("on_tool_copy() --> " + str(e)) + # deselect the table + # self.ui.geo_tools_table.clearSelection() + else: + self.app.inform.emit('[WARNING_NOTCL] %s' % _("Failed. Select a tool to copy.")) + self.ui_connect() + self.build_ui() + return + else: + # we copy all tools in geo_tools_table + try: + temp_tools = deepcopy(self.tools) + max_uid += 1 + for tooluid in temp_tools: + self.tools[int(max_uid)] = deepcopy(temp_tools[tooluid]) + temp_tools.clear() + except Exception as e: + log.debug("on_tool_copy() --> " + str(e)) + + # if there are no more tools in geo tools table then hide the tool offset + if not self.tools: + self.ui.tool_offset_entry.hide() + self.ui.tool_offset_lbl.hide() + + # we do this HACK to make sure the tools attribute to be serialized is updated in the self.ser_attrs list + try: + self.ser_attrs.remove('tools') + except ValueError: + pass + self.ser_attrs.append('tools') + + self.ui_connect() + self.build_ui() + self.app.inform.emit('[success] %s' % _("Tool was copied in Tool Table.")) + + def on_tool_edit(self, current_item): + self.ui_disconnect() + + current_row = current_item.row() + try: + d = float(self.ui.geo_tools_table.item(current_row, 1).text()) + except ValueError: + # try to convert comma to decimal point. if it's still not working error message and return + try: + d = float(self.ui.geo_tools_table.item(current_row, 1).text().replace(',', '.')) + except ValueError: + self.app.inform.emit('[ERROR_NOTCL] %s' % _("Wrong value format entered, use a number.")) + return + + tool_dia = float('%.*f' % (self.decimals, d)) + tooluid = int(self.ui.geo_tools_table.item(current_row, 5).text()) + + self.tools[tooluid]['tooldia'] = tool_dia + + try: + self.ser_attrs.remove('tools') + self.ser_attrs.append('tools') + except (TypeError, ValueError): + pass + + self.app.inform.emit('[success] %s' % _("Tool was edited in Tool Table.")) + self.ui_connect() + self.build_ui() + + def on_tool_delete(self, all_tools=None): + self.ui_disconnect() + + if all_tools is None: + if self.ui.geo_tools_table.selectedItems(): + for current_row in self.ui.geo_tools_table.selectedItems(): + # sometime the header get selected and it has row number -1 + # we don't want to do anything with the header :) + if current_row.row() < 0: + continue + try: + tooluid_del = int(self.ui.geo_tools_table.item(current_row.row(), 5).text()) + self.set_tool_offset_visibility(current_row.row()) + + temp_tools = deepcopy(self.tools) + for tooluid_key in self.tools: + if int(tooluid_key) == tooluid_del: + # if the self.tools has only one tool and we delete it then we move the solid_geometry + # as a property of the object otherwise there will be nothing to hold it + if len(self.tools) == 1: + self.solid_geometry = deepcopy(self.tools[tooluid_key]['solid_geometry']) + temp_tools.pop(tooluid_del, None) + self.tools = deepcopy(temp_tools) + temp_tools.clear() + except AttributeError: + self.app.inform.emit('[WARNING_NOTCL] %s' % _("Failed. Select a tool to delete.")) + self.ui_connect() + self.build_ui() + return + except Exception as e: + log.debug("on_tool_delete() --> " + str(e)) + # deselect the table + # self.ui.geo_tools_table.clearSelection() + else: + self.app.inform.emit('[WARNING_NOTCL] %s' % _("Failed. Select a tool to delete.")) + self.ui_connect() + self.build_ui() + return + else: + # we delete all tools in geo_tools_table + self.tools.clear() + + self.app.plot_all() + + # if there are no more tools in geo tools table then hide the tool offset + if not self.tools: + self.ui.tool_offset_entry.hide() + self.ui.tool_offset_lbl.hide() + + # we do this HACK to make sure the tools attribute to be serialized is updated in the self.ser_attrs list + try: + self.ser_attrs.remove('tools') + except TypeError: + pass + self.ser_attrs.append('tools') + + self.ui_connect() + self.build_ui() + self.app.inform.emit('[success] %s' % _("Tool was deleted in Tool Table.")) + + obj_active = self.app.collection.get_active() + # if the object was MultiGeo and now it has no tool at all (therefore no geometry) + # we make it back SingleGeo + if self.ui.geo_tools_table.rowCount() <= 0: + obj_active.multigeo = False + obj_active.options['xmin'] = 0 + obj_active.options['ymin'] = 0 + obj_active.options['xmax'] = 0 + obj_active.options['ymax'] = 0 + + if obj_active.multigeo is True: + try: + xmin, ymin, xmax, ymax = obj_active.bounds() + obj_active.options['xmin'] = xmin + obj_active.options['ymin'] = ymin + obj_active.options['xmax'] = xmax + obj_active.options['ymax'] = ymax + except Exception: + obj_active.options['xmin'] = 0 + obj_active.options['ymin'] = 0 + obj_active.options['xmax'] = 0 + obj_active.options['ymax'] = 0 + + # if there is no tool left in the Tools Table, disable the parameters GUI + if self.ui.geo_tools_table.rowCount() == 0: + self.ui.geo_param_frame.setDisabled(True) + + def ui_update_v_shape(self, tool_type_txt): + if tool_type_txt == 'V': + self.ui.tipdialabel.show() + self.ui.tipdia_entry.show() + self.ui.tipanglelabel.show() + self.ui.tipangle_entry.show() + self.ui.cutz_entry.setDisabled(True) + + self.update_cutz() + else: + self.ui.tipdialabel.hide() + self.ui.tipdia_entry.hide() + self.ui.tipanglelabel.hide() + self.ui.tipangle_entry.hide() + self.ui.cutz_entry.setDisabled(False) + + def update_cutz(self): + vdia = float(self.ui.tipdia_entry.get_value()) + half_vangle = float(self.ui.tipangle_entry.get_value()) / 2 + + row = self.ui.geo_tools_table.currentRow() + tool_uid_item = self.ui.geo_tools_table.item(row, 5) + if tool_uid_item is None: + return + tool_uid = int(tool_uid_item.text()) + + tool_dia_item = self.ui.geo_tools_table.item(row, 1) + if tool_dia_item is None: + return + tooldia = float(tool_dia_item.text()) + + try: + new_cutz = (tooldia - vdia) / (2 * math.tan(math.radians(half_vangle))) + except ZeroDivisionError: + new_cutz = self.old_cutz + + new_cutz = float('%.*f' % (self.decimals, new_cutz)) * -1.0 # this value has to be negative + + self.ui.cutz_entry.set_value(new_cutz) + + # store the new CutZ value into storage (self.tools) + for tooluid_key, tooluid_value in self.tools.items(): + if int(tooluid_key) == tool_uid: + tooluid_value['data']['cutz'] = new_cutz + + def on_tooltable_cellwidget_change(self): + cw = self.sender() + # assert isinstance(cw, FCComboBox) or isinstance(cw, FCCheckBox),\ + # "Expected a FCCombobox or a FCCheckbox got %s" % type(cw) + cw_index = self.ui.geo_tools_table.indexAt(cw.pos()) + cw_row = cw_index.row() + cw_col = cw_index.column() + current_uid = int(self.ui.geo_tools_table.item(cw_row, 5).text()) + + # store the text of the cellWidget that changed it's index in the self.tools + for tooluid_key, tooluid_value in self.tools.items(): + if int(tooluid_key) == current_uid: + cb_txt = cw.currentText() + if cw_col == 2: + tooluid_value['offset'] = cb_txt + if cb_txt == 'Custom': + self.ui.tool_offset_entry.show() + self.ui.tool_offset_lbl.show() + else: + self.ui.tool_offset_entry.hide() + self.ui.tool_offset_lbl.hide() + # reset the offset_value in storage self.tools + tooluid_value['offset_value'] = 0.0 + elif cw_col == 3: + # force toolpath type as 'Iso' if the tool type is V-Shape + if self.ui.geo_tools_table.cellWidget(cw_row, 4).currentText() == 'V': + tooluid_value['type'] = _('Iso') + idx = self.ui.geo_tools_table.cellWidget(cw_row, 3).findText(_('Iso')) + self.ui.geo_tools_table.cellWidget(cw_row, 3).setCurrentIndex(idx) + else: + tooluid_value['type'] = cb_txt + elif cw_col == 4: + tooluid_value['tool_type'] = cb_txt + + # if the tool_type selected is V-Shape then autoselect the toolpath type as Iso + if cb_txt == 'V': + idx = self.ui.geo_tools_table.cellWidget(cw_row, 3).findText(_('Iso')) + self.ui.geo_tools_table.cellWidget(cw_row, 3).setCurrentIndex(idx) + else: + self.ui.cutz_entry.set_value(self.old_cutz) + + self.ui_update_v_shape(tool_type_txt=self.ui.geo_tools_table.cellWidget(cw_row, 4).currentText()) + + def update_form(self, dict_storage): + for form_key in self.form_fields: + for storage_key in dict_storage: + if form_key == storage_key: + try: + self.form_fields[form_key].set_value(dict_storage[form_key]) + except Exception as e: + log.debug(str(e)) + + # this is done here because those buttons control through OptionalInputSelection if some entry's are Enabled + # or not. But due of using the ui_disconnect() status is no longer updated and I had to do it here + self.ui.ois_dwell_geo.on_cb_change() + self.ui.ois_mpass_geo.on_cb_change() + self.ui.ois_tcz_geo.on_cb_change() + + def on_apply_param_to_all_clicked(self): + if self.ui.geo_tools_table.rowCount() == 0: + # there is no tool in tool table so we can't save the GUI elements values to storage + log.debug("GeometryObject.gui_form_to_storage() --> no tool in Tools Table, aborting.") + return + + self.ui_disconnect() + + row = self.ui.geo_tools_table.currentRow() + if row < 0: + row = 0 + + # store all the data associated with the row parameter to the self.tools storage + tooldia_item = float(self.ui.geo_tools_table.item(row, 1).text()) + offset_item = self.ui.geo_tools_table.cellWidget(row, 2).currentText() + type_item = self.ui.geo_tools_table.cellWidget(row, 3).currentText() + tool_type_item = self.ui.geo_tools_table.cellWidget(row, 4).currentText() + + offset_value_item = float(self.ui.tool_offset_entry.get_value()) + + # this new dict will hold the actual useful data, another dict that is the value of key 'data' + temp_tools = {} + temp_dia = {} + temp_data = {} + + for tooluid_key, tooluid_value in self.tools.items(): + for key, value in tooluid_value.items(): + if key == 'tooldia': + temp_dia[key] = tooldia_item + # update the 'offset', 'type' and 'tool_type' sections + if key == 'offset': + temp_dia[key] = offset_item + if key == 'type': + temp_dia[key] = type_item + if key == 'tool_type': + temp_dia[key] = tool_type_item + if key == 'offset_value': + temp_dia[key] = offset_value_item + + if key == 'data': + # update the 'data' section + for data_key in tooluid_value[key].keys(): + for form_key, form_value in self.form_fields.items(): + if form_key == data_key: + temp_data[data_key] = form_value.get_value() + # make sure we make a copy of the keys not in the form (we may use 'data' keys that are + # updated from self.app.defaults + if data_key not in self.form_fields: + temp_data[data_key] = value[data_key] + temp_dia[key] = deepcopy(temp_data) + temp_data.clear() + + if key == 'solid_geometry': + temp_dia[key] = deepcopy(self.tools[tooluid_key]['solid_geometry']) + + temp_tools[tooluid_key] = deepcopy(temp_dia) + + self.tools.clear() + self.tools = deepcopy(temp_tools) + temp_tools.clear() + + self.ui_connect() + + def gui_form_to_storage(self): + if self.ui.geo_tools_table.rowCount() == 0: + # there is no tool in tool table so we can't save the GUI elements values to storage + log.debug("GeometryObject.gui_form_to_storage() --> no tool in Tools Table, aborting.") + return + + self.ui_disconnect() + widget_changed = self.sender() + try: + widget_idx = self.ui.grid3.indexOf(widget_changed) + except Exception: + return + + # those are the indexes for the V-Tip Dia and V-Tip Angle, if edited calculate the new Cut Z + if widget_idx == 1 or widget_idx == 3: + self.update_cutz() + + # the original connect() function of the OptionalInputSelection is no longer working because of the + # ui_diconnect() so I use this 'hack' + if isinstance(widget_changed, FCCheckBox): + if widget_changed.text() == 'Multi-Depth:': + self.ui.ois_mpass_geo.on_cb_change() + + if widget_changed.text() == 'Tool change': + self.ui.ois_tcz_geo.on_cb_change() + + if widget_changed.text() == 'Dwell:': + self.ui.ois_dwell_geo.on_cb_change() + + row = self.ui.geo_tools_table.currentRow() + if row < 0: + row = 0 + + # store all the data associated with the row parameter to the self.tools storage + tooldia_item = float(self.ui.geo_tools_table.item(row, 1).text()) + offset_item = self.ui.geo_tools_table.cellWidget(row, 2).currentText() + type_item = self.ui.geo_tools_table.cellWidget(row, 3).currentText() + tool_type_item = self.ui.geo_tools_table.cellWidget(row, 4).currentText() + tooluid_item = int(self.ui.geo_tools_table.item(row, 5).text()) + + offset_value_item = float(self.ui.tool_offset_entry.get_value()) + + # this new dict will hold the actual useful data, another dict that is the value of key 'data' + temp_tools = {} + temp_dia = {} + temp_data = {} + + for tooluid_key, tooluid_value in self.tools.items(): + if int(tooluid_key) == tooluid_item: + for key, value in tooluid_value.items(): + if key == 'tooldia': + temp_dia[key] = tooldia_item + # update the 'offset', 'type' and 'tool_type' sections + if key == 'offset': + temp_dia[key] = offset_item + if key == 'type': + temp_dia[key] = type_item + if key == 'tool_type': + temp_dia[key] = tool_type_item + if key == 'offset_value': + temp_dia[key] = offset_value_item + + if key == 'data': + # update the 'data' section + for data_key in tooluid_value[key].keys(): + for form_key, form_value in self.form_fields.items(): + if form_key == data_key: + temp_data[data_key] = form_value.get_value() + # make sure we make a copy of the keys not in the form (we may use 'data' keys that are + # updated from self.app.defaults + if data_key not in self.form_fields: + temp_data[data_key] = value[data_key] + temp_dia[key] = deepcopy(temp_data) + temp_data.clear() + + if key == 'solid_geometry': + temp_dia[key] = deepcopy(self.tools[tooluid_key]['solid_geometry']) + + temp_tools[tooluid_key] = deepcopy(temp_dia) + else: + temp_tools[tooluid_key] = deepcopy(tooluid_value) + + self.tools.clear() + self.tools = deepcopy(temp_tools) + temp_tools.clear() + self.ui_connect() + + def update_common_param_in_storage(self): + for tooluid_value in self.tools.values(): + tooluid_value['data']['ppname_g'] = self.ui.pp_geometry_name_cb.get_value() + + def select_tools_table_row(self, row, clearsel=None): + if clearsel: + self.ui.geo_tools_table.clearSelection() + + if self.ui.geo_tools_table.rowCount() > 0: + # self.ui.geo_tools_table.item(row, 0).setSelected(True) + self.ui.geo_tools_table.setCurrentItem(self.ui.geo_tools_table.item(row, 0)) + + def export_dxf(self): + dwg = None + try: + dwg = ezdxf.new('R2010') + msp = dwg.modelspace() + + def g2dxf(dxf_space, geo_obj): + if isinstance(geo_obj, MultiPolygon): + for poly in geo_obj: + ext_points = list(poly.exterior.coords) + dxf_space.add_lwpolyline(ext_points) + for interior in poly.interiors: + dxf_space.add_lwpolyline(list(interior.coords)) + if isinstance(geo_obj, Polygon): + ext_points = list(geo_obj.exterior.coords) + dxf_space.add_lwpolyline(ext_points) + for interior in geo_obj.interiors: + dxf_space.add_lwpolyline(list(interior.coords)) + if isinstance(geo_obj, MultiLineString): + for line in geo_obj: + dxf_space.add_lwpolyline(list(line.coords)) + if isinstance(geo_obj, LineString) or isinstance(geo_obj, LinearRing): + dxf_space.add_lwpolyline(list(geo_obj.coords)) + + multigeo_solid_geometry = [] + if self.multigeo: + for tool in self.tools: + multigeo_solid_geometry += self.tools[tool]['solid_geometry'] + else: + multigeo_solid_geometry = self.solid_geometry + + for geo in multigeo_solid_geometry: + if type(geo) == list: + for g in geo: + g2dxf(msp, g) + else: + g2dxf(msp, geo) + + # points = GeometryObject.get_pts(geo) + # msp.add_lwpolyline(points) + except Exception as e: + log.debug(str(e)) + + return dwg + + def get_selected_tools_table_items(self): + """ + Returns a list of lists, each list in the list is made out of row elements + + :return: List of table_tools items. + :rtype: list + """ + table_tools_items = [] + if self.multigeo: + for x in self.ui.geo_tools_table.selectedItems(): + elem = [] + txt = '' + + for column in range(0, self.ui.geo_tools_table.columnCount()): + try: + txt = self.ui.geo_tools_table.item(x.row(), column).text() + except AttributeError: + try: + txt = self.ui.geo_tools_table.cellWidget(x.row(), column).currentText() + except AttributeError: + pass + elem.append(txt) + table_tools_items.append(deepcopy(elem)) + # table_tools_items.append([self.ui.geo_tools_table.item(x.row(), column).text() + # for column in range(0, self.ui.geo_tools_table.columnCount())]) + else: + for x in self.ui.geo_tools_table.selectedItems(): + r = [] + txt = '' + + # the last 2 columns for single-geo geometry are irrelevant and create problems reading + # so we don't read them + for column in range(0, self.ui.geo_tools_table.columnCount() - 2): + # the columns have items that have text but also have items that are widgets + # for which the text they hold has to be read differently + try: + txt = self.ui.geo_tools_table.item(x.row(), column).text() + except AttributeError: + try: + txt = self.ui.geo_tools_table.cellWidget(x.row(), column).currentText() + except AttributeError: + pass + r.append(txt) + table_tools_items.append(r) + + for item in table_tools_items: + item[0] = str(item[0]) + return table_tools_items + + def on_pp_changed(self): + current_pp = self.ui.pp_geometry_name_cb.get_value() + if current_pp == 'hpgl': + self.old_pp_state = self.ui.mpass_cb.get_value() + self.old_toolchangeg_state = self.ui.toolchangeg_cb.get_value() + + self.ui.mpass_cb.set_value(False) + self.ui.mpass_cb.setDisabled(True) + + self.ui.toolchangeg_cb.set_value(True) + self.ui.toolchangeg_cb.setDisabled(True) + else: + self.ui.mpass_cb.set_value(self.old_pp_state) + self.ui.mpass_cb.setDisabled(False) + + self.ui.toolchangeg_cb.set_value(self.old_toolchangeg_state) + self.ui.toolchangeg_cb.setDisabled(False) + + if "toolchange_probe" in current_pp.lower(): + self.ui.pdepth_entry.setVisible(True) + self.ui.pdepth_label.show() + + self.ui.feedrate_probe_entry.setVisible(True) + self.ui.feedrate_probe_label.show() + else: + self.ui.pdepth_entry.setVisible(False) + self.ui.pdepth_label.hide() + + self.ui.feedrate_probe_entry.setVisible(False) + self.ui.feedrate_probe_label.hide() + + if 'marlin' in current_pp.lower() or 'custom' in current_pp.lower(): + self.ui.fr_rapidlabel.show() + self.ui.feedrate_rapid_entry.show() + else: + self.ui.fr_rapidlabel.hide() + self.ui.feedrate_rapid_entry.hide() + + if 'laser' in current_pp.lower(): + self.ui.cutzlabel.hide() + self.ui.cutz_entry.hide() + try: + self.ui.mpass_cb.hide() + self.ui.maxdepth_entry.hide() + except AttributeError: + pass + + if 'marlin' in current_pp.lower(): + self.ui.travelzlabel.setText('%s:' % _("Focus Z")) + self.ui.endz_label.show() + self.ui.endz_entry.show() + else: + self.ui.travelzlabel.hide() + self.ui.travelz_entry.hide() + + self.ui.endz_label.hide() + self.ui.endz_entry.hide() + + try: + self.ui.frzlabel.hide() + self.ui.feedrate_z_entry.hide() + except AttributeError: + pass + + self.ui.dwell_cb.hide() + self.ui.dwelltime_entry.hide() + + self.ui.spindle_label.setText('%s:' % _("Laser Power")) + + try: + self.ui.tool_offset_label.hide() + self.ui.offset_entry.hide() + except AttributeError: + pass + else: + self.ui.cutzlabel.show() + self.ui.cutz_entry.show() + try: + self.ui.mpass_cb.show() + self.ui.maxdepth_entry.show() + except AttributeError: + pass + + self.ui.travelzlabel.setText('%s:' % _('Travel Z')) + + self.ui.travelzlabel.show() + self.ui.travelz_entry.show() + + self.ui.endz_label.show() + self.ui.endz_entry.show() + + try: + self.ui.frzlabel.show() + self.ui.feedrate_z_entry.show() + except AttributeError: + pass + self.ui.dwell_cb.show() + self.ui.dwelltime_entry.show() + + self.ui.spindle_label.setText('%s:' % _('Spindle speed')) + + try: + self.ui.tool_offset_lbl.show() + self.ui.offset_entry.show() + except AttributeError: + pass + + def on_generatecnc_button_click(self, *args): + log.debug("Generating CNCJob from Geometry ...") + self.app.report_usage("geometry_on_generatecnc_button") + + # this reads the values in the UI form to the self.options dictionary + self.read_form() + + self.sel_tools = {} + + try: + if self.special_group: + self.app.inform.emit( + '[WARNING_NOTCL] %s %s %s.' % + (_("This Geometry can't be processed because it is"), str(self.special_group), _("geometry")) + ) + return + except AttributeError: + pass + + # test to see if we have tools available in the tool table + if self.ui.geo_tools_table.selectedItems(): + for x in self.ui.geo_tools_table.selectedItems(): + # try: + # tooldia = float(self.ui.geo_tools_table.item(x.row(), 1).text()) + # except ValueError: + # # try to convert comma to decimal point. if it's still not working error message and return + # try: + # tooldia = float(self.ui.geo_tools_table.item(x.row(), 1).text().replace(',', '.')) + # except ValueError: + # self.app.inform.emit('[ERROR_NOTCL] %s' % + # _("Wrong value format entered, use a number.")) + # return + tooluid = int(self.ui.geo_tools_table.item(x.row(), 5).text()) + + for tooluid_key, tooluid_value in self.tools.items(): + if int(tooluid_key) == tooluid: + self.sel_tools.update({ + tooluid: deepcopy(tooluid_value) + }) + self.mtool_gen_cncjob() + self.ui.geo_tools_table.clearSelection() + + elif self.ui.geo_tools_table.rowCount() == 1: + tooluid = int(self.ui.geo_tools_table.item(0, 5).text()) + + for tooluid_key, tooluid_value in self.tools.items(): + if int(tooluid_key) == tooluid: + self.sel_tools.update({ + tooluid: deepcopy(tooluid_value) + }) + self.mtool_gen_cncjob() + self.ui.geo_tools_table.clearSelection() + + else: + self.app.inform.emit('[ERROR_NOTCL] %s' % _("Failed. No tool selected in the tool table ...")) + + def mtool_gen_cncjob(self, outname=None, tools_dict=None, tools_in_use=None, segx=None, segy=None, + plot=True, use_thread=True): + """ + Creates a multi-tool CNCJob out of this Geometry object. + The actual work is done by the target CNCJobObject object's + `generate_from_geometry_2()` method. + + :param tools_dict: a dictionary that holds the whole data needed to create the Gcode + (including the solid_geometry) + + :param tools_in_use: the tools that are used, needed by some preprocessors + :type list of lists, each list in the list is made out of row elements of tools table from GUI + + :param outname: + :param tools_dict: + :param tools_in_use: + :param segx: number of segments on the X axis, for auto-levelling + :param segy: number of segments on the Y axis, for auto-levelling + :param plot: if True the generated object will be plotted; if False will not be plotted + :param use_thread: if True use threading + :return: None + """ + + # use the name of the first tool selected in self.geo_tools_table which has the diameter passed as tool_dia + outname = "%s_%s" % (self.options["name"], 'cnc') if outname is None else outname + + tools_dict = self.sel_tools if tools_dict is None else tools_dict + tools_in_use = tools_in_use if tools_in_use is not None else self.get_selected_tools_table_items() + segx = segx if segx is not None else float(self.app.defaults['geometry_segx']) + segy = segy if segy is not None else float(self.app.defaults['geometry_segy']) + + try: + xmin = self.options['xmin'] + ymin = self.options['ymin'] + xmax = self.options['xmax'] + ymax = self.options['ymax'] + except Exception as e: + log.debug("FlatCAMObj.GeometryObject.mtool_gen_cncjob() --> %s\n" % str(e)) + + msg = '[ERROR] %s' % _("An internal error has occurred. See shell.\n") + msg += '%s %s' % ('FlatCAMObj.GeometryObject.mtool_gen_cncjob() -->', str(e)) + msg += traceback.format_exc() + self.app.inform.emit(msg) + return + + # Object initialization function for app.new_object() + # RUNNING ON SEPARATE THREAD! + def job_init_single_geometry(job_obj, app_obj): + log.debug("Creating a CNCJob out of a single-geometry") + assert job_obj.kind == 'cncjob', "Initializer expected a CNCJobObject, got %s" % type(job_obj) + + job_obj.options['xmin'] = xmin + job_obj.options['ymin'] = ymin + job_obj.options['xmax'] = xmax + job_obj.options['ymax'] = ymax + + # count the tools + tool_cnt = 0 + + dia_cnc_dict = {} + + # this turn on the FlatCAMCNCJob plot for multiple tools + job_obj.multitool = True + job_obj.multigeo = False + job_obj.cnc_tools.clear() + + job_obj.options['Tools_in_use'] = tools_in_use + job_obj.segx = segx if segx else float(self.app.defaults["geometry_segx"]) + job_obj.segy = segy if segy else float(self.app.defaults["geometry_segy"]) + + job_obj.z_pdepth = float(self.app.defaults["geometry_z_pdepth"]) + job_obj.feedrate_probe = float(self.app.defaults["geometry_feedrate_probe"]) + + for tooluid_key in list(tools_dict.keys()): + tool_cnt += 1 + + dia_cnc_dict = deepcopy(tools_dict[tooluid_key]) + tooldia_val = float('%.*f' % (self.decimals, float(tools_dict[tooluid_key]['tooldia']))) + dia_cnc_dict.update({ + 'tooldia': tooldia_val + }) + + if dia_cnc_dict['offset'] == 'in': + tool_offset = -dia_cnc_dict['tooldia'] / 2 + elif dia_cnc_dict['offset'].lower() == 'out': + tool_offset = dia_cnc_dict['tooldia'] / 2 + elif dia_cnc_dict['offset'].lower() == 'custom': + try: + offset_value = float(self.ui.tool_offset_entry.get_value()) + except ValueError: + # try to convert comma to decimal point. if it's still not working error message and return + try: + offset_value = float(self.ui.tool_offset_entry.get_value().replace(',', '.')) + except ValueError: + self.app.inform.emit('[ERROR_NOTCL] %s' % _("Wrong value format entered, use a number.")) + return + if offset_value: + tool_offset = float(offset_value) + else: + self.app.inform.emit( + '[WARNING] %s' % _("Tool Offset is selected in Tool Table but no value is provided.\n" + "Add a Tool Offset or change the Offset Type.") + ) + return + else: + tool_offset = 0.0 + + dia_cnc_dict.update({ + 'offset_value': tool_offset + }) + + z_cut = tools_dict[tooluid_key]['data']["cutz"] + z_move = tools_dict[tooluid_key]['data']["travelz"] + feedrate = tools_dict[tooluid_key]['data']["feedrate"] + feedrate_z = tools_dict[tooluid_key]['data']["feedrate_z"] + feedrate_rapid = tools_dict[tooluid_key]['data']["feedrate_rapid"] + multidepth = tools_dict[tooluid_key]['data']["multidepth"] + extracut = tools_dict[tooluid_key]['data']["extracut"] + extracut_length = tools_dict[tooluid_key]['data']["extracut_length"] + depthpercut = tools_dict[tooluid_key]['data']["depthperpass"] + toolchange = tools_dict[tooluid_key]['data']["toolchange"] + toolchangez = tools_dict[tooluid_key]['data']["toolchangez"] + toolchangexy = tools_dict[tooluid_key]['data']["toolchangexy"] + startz = tools_dict[tooluid_key]['data']["startz"] + endz = tools_dict[tooluid_key]['data']["endz"] + endxy = self.options["endxy"] + spindlespeed = tools_dict[tooluid_key]['data']["spindlespeed"] + dwell = tools_dict[tooluid_key]['data']["dwell"] + dwelltime = tools_dict[tooluid_key]['data']["dwelltime"] + pp_geometry_name = tools_dict[tooluid_key]['data']["ppname_g"] + + spindledir = self.app.defaults['geometry_spindledir'] + tool_solid_geometry = self.solid_geometry + + job_obj.coords_decimals = self.app.defaults["cncjob_coords_decimals"] + job_obj.fr_decimals = self.app.defaults["cncjob_fr_decimals"] + + # Propagate options + job_obj.options["tooldia"] = tooldia_val + job_obj.options['type'] = 'Geometry' + job_obj.options['tool_dia'] = tooldia_val + + # it seems that the tolerance needs to be a lot lower value than 0.01 and it was hardcoded initially + # to a value of 0.0005 which is 20 times less than 0.01 + tol = float(self.app.defaults['global_tolerance']) / 20 + res = job_obj.generate_from_geometry_2( + self, tooldia=tooldia_val, offset=tool_offset, tolerance=tol, + z_cut=z_cut, z_move=z_move, + feedrate=feedrate, feedrate_z=feedrate_z, feedrate_rapid=feedrate_rapid, + spindlespeed=spindlespeed, spindledir=spindledir, dwell=dwell, dwelltime=dwelltime, + multidepth=multidepth, depthpercut=depthpercut, + extracut=extracut, extracut_length=extracut_length, startz=startz, endz=endz, endxy=endxy, + toolchange=toolchange, toolchangez=toolchangez, toolchangexy=toolchangexy, + pp_geometry_name=pp_geometry_name, + tool_no=tool_cnt) + + if res == 'fail': + log.debug("GeometryObject.mtool_gen_cncjob() --> generate_from_geometry2() failed") + return 'fail' + else: + dia_cnc_dict['gcode'] = res + + # tell gcode_parse from which point to start drawing the lines depending on what kind of + # object is the source of gcode + job_obj.toolchange_xy_type = "geometry" + + self.app.inform.emit('[success] %s' % _("G-Code parsing in progress...")) + dia_cnc_dict['gcode_parsed'] = job_obj.gcode_parse() + self.app.inform.emit('[success] %s' % _("G-Code parsing finished...")) + + # TODO this serve for bounding box creation only; should be optimized + # commented this; there is no need for the actual GCode geometry - the original one will serve as well + # for bounding box values + # dia_cnc_dict['solid_geometry'] = cascaded_union([geo['geom'] for geo in dia_cnc_dict['gcode_parsed']]) + try: + dia_cnc_dict['solid_geometry'] = tool_solid_geometry + self.app.inform.emit('[success] %s...' % _("Finished G-Code processing")) + except Exception as er: + self.app.inform.emit('[ERROR] %s: %s' % (_("G-Code processing failed with error"), str(er))) + + job_obj.cnc_tools.update({ + tooluid_key: deepcopy(dia_cnc_dict) + }) + dia_cnc_dict.clear() + + # Object initialization function for app.new_object() + # RUNNING ON SEPARATE THREAD! + def job_init_multi_geometry(job_obj, app_obj): + log.debug("Creating a CNCJob out of a multi-geometry") + assert job_obj.kind == 'cncjob', "Initializer expected a CNCJobObject, got %s" % type(job_obj) + + job_obj.options['xmin'] = xmin + job_obj.options['ymin'] = ymin + job_obj.options['xmax'] = xmax + job_obj.options['ymax'] = ymax + + # count the tools + tool_cnt = 0 + + dia_cnc_dict = {} + + # this turn on the FlatCAMCNCJob plot for multiple tools + job_obj.multitool = True + job_obj.multigeo = True + job_obj.cnc_tools.clear() + + job_obj.options['Tools_in_use'] = tools_in_use + job_obj.segx = segx if segx else float(self.app.defaults["geometry_segx"]) + job_obj.segy = segy if segy else float(self.app.defaults["geometry_segy"]) + + job_obj.z_pdepth = float(self.app.defaults["geometry_z_pdepth"]) + job_obj.feedrate_probe = float(self.app.defaults["geometry_feedrate_probe"]) + + # make sure that trying to make a CNCJob from an empty file is not creating an app crash + if not self.solid_geometry: + a = 0 + for tooluid_key in self.tools: + if self.tools[tooluid_key]['solid_geometry'] is None: + a += 1 + if a == len(self.tools): + self.app.inform.emit('[ERROR_NOTCL] %s...' % _('Cancelled. Empty file, it has no geometry')) + return 'fail' + + for tooluid_key in list(tools_dict.keys()): + tool_cnt += 1 + dia_cnc_dict = deepcopy(tools_dict[tooluid_key]) + tooldia_val = float('%.*f' % (self.decimals, float(tools_dict[tooluid_key]['tooldia']))) + + dia_cnc_dict.update({ + 'tooldia': tooldia_val + }) + + # find the tool_dia associated with the tooluid_key + # search in the self.tools for the sel_tool_dia and when found see what tooluid has + # on the found tooluid in self.tools we also have the solid_geometry that interest us + # for k, v in self.tools.items(): + # if float('%.*f' % (self.decimals, float(v['tooldia']))) == tooldia_val: + # current_uid = int(k) + # break + + if dia_cnc_dict['offset'] == 'in': + tool_offset = -tooldia_val / 2 + elif dia_cnc_dict['offset'].lower() == 'out': + tool_offset = tooldia_val / 2 + elif dia_cnc_dict['offset'].lower() == 'custom': + offset_value = float(self.ui.tool_offset_entry.get_value()) + if offset_value: + tool_offset = float(offset_value) + else: + self.app.inform.emit('[WARNING] %s' % + _("Tool Offset is selected in Tool Table but " + "no value is provided.\n" + "Add a Tool Offset or change the Offset Type.")) + return + else: + tool_offset = 0.0 + + dia_cnc_dict.update({ + 'offset_value': tool_offset + }) + + z_cut = tools_dict[tooluid_key]['data']["cutz"] + z_move = tools_dict[tooluid_key]['data']["travelz"] + feedrate = tools_dict[tooluid_key]['data']["feedrate"] + feedrate_z = tools_dict[tooluid_key]['data']["feedrate_z"] + feedrate_rapid = tools_dict[tooluid_key]['data']["feedrate_rapid"] + multidepth = tools_dict[tooluid_key]['data']["multidepth"] + extracut = tools_dict[tooluid_key]['data']["extracut"] + extracut_length = tools_dict[tooluid_key]['data']["extracut_length"] + depthpercut = tools_dict[tooluid_key]['data']["depthperpass"] + toolchange = tools_dict[tooluid_key]['data']["toolchange"] + toolchangez = tools_dict[tooluid_key]['data']["toolchangez"] + toolchangexy = tools_dict[tooluid_key]['data']["toolchangexy"] + startz = tools_dict[tooluid_key]['data']["startz"] + endz = tools_dict[tooluid_key]['data']["endz"] + endxy = self.options["endxy"] + spindlespeed = tools_dict[tooluid_key]['data']["spindlespeed"] + dwell = tools_dict[tooluid_key]['data']["dwell"] + dwelltime = tools_dict[tooluid_key]['data']["dwelltime"] + pp_geometry_name = tools_dict[tooluid_key]['data']["ppname_g"] + + spindledir = self.app.defaults['geometry_spindledir'] + tool_solid_geometry = self.tools[tooluid_key]['solid_geometry'] + + job_obj.coords_decimals = self.app.defaults["cncjob_coords_decimals"] + job_obj.fr_decimals = self.app.defaults["cncjob_fr_decimals"] + + # Propagate options + job_obj.options["tooldia"] = tooldia_val + job_obj.options['type'] = 'Geometry' + job_obj.options['tool_dia'] = tooldia_val + + # it seems that the tolerance needs to be a lot lower value than 0.01 and it was hardcoded initially + # to a value of 0.0005 which is 20 times less than 0.01 + tol = float(self.app.defaults['global_tolerance']) / 20 + res = job_obj.generate_from_multitool_geometry( + tool_solid_geometry, tooldia=tooldia_val, offset=tool_offset, + tolerance=tol, z_cut=z_cut, z_move=z_move, + feedrate=feedrate, feedrate_z=feedrate_z, feedrate_rapid=feedrate_rapid, + spindlespeed=spindlespeed, spindledir=spindledir, dwell=dwell, dwelltime=dwelltime, + multidepth=multidepth, depthpercut=depthpercut, + extracut=extracut, extracut_length=extracut_length, startz=startz, endz=endz, endxy=endxy, + toolchange=toolchange, toolchangez=toolchangez, toolchangexy=toolchangexy, + pp_geometry_name=pp_geometry_name, + tool_no=tool_cnt) + + if res == 'fail': + log.debug("GeometryObject.mtool_gen_cncjob() --> generate_from_geometry2() failed") + return 'fail' + else: + dia_cnc_dict['gcode'] = res + + self.app.inform.emit('[success] %s' % _("G-Code parsing in progress...")) + dia_cnc_dict['gcode_parsed'] = job_obj.gcode_parse() + self.app.inform.emit('[success] %s' % _("G-Code parsing finished...")) + + # TODO this serve for bounding box creation only; should be optimized + # commented this; there is no need for the actual GCode geometry - the original one will serve as well + # for bounding box values + # geo_for_bound_values = cascaded_union([ + # geo['geom'] for geo in dia_cnc_dict['gcode_parsed'] if geo['geom'].is_valid is True + # ]) + try: + dia_cnc_dict['solid_geometry'] = deepcopy(tool_solid_geometry) + self.app.inform.emit('[success] %s' % _("Finished G-Code processing...")) + except Exception as ee: + self.app.inform.emit('[ERROR] %s: %s' % (_("G-Code processing failed with error"), str(ee))) + + # tell gcode_parse from which point to start drawing the lines depending on what kind of + # object is the source of gcode + job_obj.toolchange_xy_type = "geometry" + + job_obj.cnc_tools.update({ + tooluid_key: deepcopy(dia_cnc_dict) + }) + dia_cnc_dict.clear() + + if use_thread: + # To be run in separate thread + def job_thread(app_obj): + if self.multigeo is False: + with self.app.proc_container.new(_("Generating CNC Code")): + if app_obj.new_object("cncjob", outname, job_init_single_geometry, plot=plot) != 'fail': + app_obj.inform.emit('[success] %s: %s' % (_("CNCjob created"), outname)) + else: + with self.app.proc_container.new(_("Generating CNC Code")): + if app_obj.new_object("cncjob", outname, job_init_multi_geometry) != 'fail': + app_obj.inform.emit('[success] %s: %s' % (_("CNCjob created"), outname)) + + # Create a promise with the name + self.app.collection.promise(outname) + # Send to worker + self.app.worker_task.emit({'fcn': job_thread, 'params': [self.app]}) + else: + if self.solid_geometry: + self.app.new_object("cncjob", outname, job_init_single_geometry, plot=plot) + else: + self.app.new_object("cncjob", outname, job_init_multi_geometry, plot=plot) + + def generatecncjob( + self, outname=None, + dia=None, offset=None, + z_cut=None, z_move=None, + feedrate=None, feedrate_z=None, feedrate_rapid=None, + spindlespeed=None, dwell=None, dwelltime=None, + multidepth=None, depthperpass=None, + toolchange=None, toolchangez=None, toolchangexy=None, + extracut=None, extracut_length=None, startz=None, endz=None, + pp=None, + segx=None, segy=None, + use_thread=True, + plot=True): + """ + Only used for TCL Command. + Creates a CNCJob out of this Geometry object. The actual + work is done by the target camlib.CNCjob + `generate_from_geometry_2()` method. + + :param outname: Name of the new object + :param dia: Tool diameter + :param offset: + :param z_cut: Cut depth (negative value) + :param z_move: Height of the tool when travelling (not cutting) + :param feedrate: Feed rate while cutting on X - Y plane + :param feedrate_z: Feed rate while cutting on Z plane + :param feedrate_rapid: Feed rate while moving with rapids + :param spindlespeed: Spindle speed (RPM) + :param dwell: + :param dwelltime: + :param multidepth: + :param depthperpass: + :param toolchange: + :param toolchangez: + :param toolchangexy: + :param extracut: + :param extracut_length: + :param startz: + :param endz: + :param pp: Name of the preprocessor + :param segx: + :param segy: + :param use_thread: + :param plot: + :return: None + """ + + tooldia = dia if dia else float(self.options["cnctooldia"]) + outname = outname if outname is not None else self.options["name"] + + z_cut = z_cut if z_cut is not None else float(self.options["cutz"]) + z_move = z_move if z_move is not None else float(self.options["travelz"]) + + feedrate = feedrate if feedrate is not None else float(self.options["feedrate"]) + feedrate_z = feedrate_z if feedrate_z is not None else float(self.options["feedrate_z"]) + feedrate_rapid = feedrate_rapid if feedrate_rapid is not None else float(self.options["feedrate_rapid"]) + + multidepth = multidepth if multidepth is not None else self.options["multidepth"] + depthperpass = depthperpass if depthperpass is not None else float(self.options["depthperpass"]) + + segx = segx if segx is not None else float(self.app.defaults['geometry_segx']) + segy = segy if segy is not None else float(self.app.defaults['geometry_segy']) + + extracut = extracut if extracut is not None else float(self.options["extracut"]) + extracut_length = extracut_length if extracut_length is not None else float(self.options["extracut_length"]) + + startz = startz if startz is not None else self.options["startz"] + endz = endz if endz is not None else float(self.options["endz"]) + endxy = self.options["endxy"] + + toolchangez = toolchangez if toolchangez else float(self.options["toolchangez"]) + toolchangexy = toolchangexy if toolchangexy else self.options["toolchangexy"] + toolchange = toolchange if toolchange else self.options["toolchange"] + + offset = offset if offset else 0.0 + + # int or None. + spindlespeed = spindlespeed if spindlespeed else self.options['spindlespeed'] + dwell = dwell if dwell else self.options["dwell"] + dwelltime = dwelltime if dwelltime else float(self.options["dwelltime"]) + + ppname_g = pp if pp else self.options["ppname_g"] + + # Object initialization function for app.new_object() + # RUNNING ON SEPARATE THREAD! + def job_init(job_obj, app_obj): + assert job_obj.kind == 'cncjob', "Initializer expected a CNCJobObject, got %s" % type(job_obj) + + # Propagate options + job_obj.options["tooldia"] = tooldia + + job_obj.coords_decimals = self.app.defaults["cncjob_coords_decimals"] + job_obj.fr_decimals = self.app.defaults["cncjob_fr_decimals"] + + job_obj.options['type'] = 'Geometry' + job_obj.options['tool_dia'] = tooldia + + job_obj.segx = segx + job_obj.segy = segy + + job_obj.z_pdepth = float(self.options["z_pdepth"]) + job_obj.feedrate_probe = float(self.options["feedrate_probe"]) + + job_obj.options['xmin'] = self.options['xmin'] + job_obj.options['ymin'] = self.options['ymin'] + job_obj.options['xmax'] = self.options['xmax'] + job_obj.options['ymax'] = self.options['ymax'] + + # it seems that the tolerance needs to be a lot lower value than 0.01 and it was hardcoded initially + # to a value of 0.0005 which is 20 times less than 0.01 + tol = float(self.app.defaults['global_tolerance']) / 20 + job_obj.generate_from_geometry_2( + self, tooldia=tooldia, offset=offset, tolerance=tol, + z_cut=z_cut, z_move=z_move, + feedrate=feedrate, feedrate_z=feedrate_z, feedrate_rapid=feedrate_rapid, + spindlespeed=spindlespeed, dwell=dwell, dwelltime=dwelltime, + multidepth=multidepth, depthpercut=depthperpass, + toolchange=toolchange, toolchangez=toolchangez, toolchangexy=toolchangexy, + extracut=extracut, extracut_length=extracut_length, startz=startz, endz=endz, endxy=endxy, + pp_geometry_name=ppname_g + ) + + # tell gcode_parse from which point to start drawing the lines depending on what kind of object is the + # source of gcode + job_obj.toolchange_xy_type = "geometry" + job_obj.gcode_parse() + self.app.inform.emit('[success] %s' % _("Finished G-Code processing...")) + + if use_thread: + # To be run in separate thread + def job_thread(app_obj): + with self.app.proc_container.new(_("Generating CNC Code")): + app_obj.new_object("cncjob", outname, job_init, plot=plot) + app_obj.inform.emit('[success] %s: %s' % (_("CNCjob created")), outname) + + # Create a promise with the name + self.app.collection.promise(outname) + # Send to worker + self.app.worker_task.emit({'fcn': job_thread, 'params': [self.app]}) + else: + self.app.new_object("cncjob", outname, job_init, plot=plot) + + # def on_plot_cb_click(self, *args): + # if self.muted_ui: + # return + # self.read_form_item('plot') + + def scale(self, xfactor, yfactor=None, point=None): + """ + Scales all geometry by a given factor. + + :param xfactor: Factor by which to scale the object's geometry/ + :type xfactor: float + :param yfactor: Factor by which to scale the object's geometry/ + :type yfactor: float + :param point: Point around which to scale + :return: None + :rtype: None + """ + log.debug("FlatCAMObj.GeometryObject.scale()") + + try: + xfactor = float(xfactor) + except Exception: + self.app.inform.emit('[ERROR_NOTCL] %s' % _("Scale factor has to be a number: integer or float.")) + return + + if yfactor is None: + yfactor = xfactor + else: + try: + yfactor = float(yfactor) + except Exception: + self.app.inform.emit('[ERROR_NOTCL] %s' % _("Scale factor has to be a number: integer or float.")) + return + + if xfactor == 1 and yfactor == 1: + return + + if point is None: + px = 0 + py = 0 + else: + px, py = point + + self.geo_len = 0 + self.old_disp_number = 0 + self.el_count = 0 + + def scale_recursion(geom): + if type(geom) is list: + geoms = [] + for local_geom in geom: + geoms.append(scale_recursion(local_geom)) + return geoms + else: + try: + self.el_count += 1 + disp_number = int(np.interp(self.el_count, [0, self.geo_len], [0, 100])) + if self.old_disp_number < disp_number <= 100: + self.app.proc_container.update_view_text(' %d%%' % disp_number) + self.old_disp_number = disp_number + + return affinity.scale(geom, xfactor, yfactor, origin=(px, py)) + except AttributeError: + return geom + + if self.multigeo is True: + for tool in self.tools: + # variables to display the percentage of work done + self.geo_len = 0 + try: + self.geo_len = len(self.tools[tool]['solid_geometry']) + except TypeError: + self.geo_len = 1 + self.old_disp_number = 0 + self.el_count = 0 + + self.tools[tool]['solid_geometry'] = scale_recursion(self.tools[tool]['solid_geometry']) + + try: + # variables to display the percentage of work done + self.geo_len = 0 + try: + self.geo_len = len(self.solid_geometry) + except TypeError: + self.geo_len = 1 + self.old_disp_number = 0 + self.el_count = 0 + + self.solid_geometry = scale_recursion(self.solid_geometry) + except AttributeError: + self.solid_geometry = [] + return + + self.app.proc_container.new_text = '' + self.app.inform.emit('[success] %s' % _("Geometry Scale done.")) + + def offset(self, vect): + """ + Offsets all geometry by a given vector/ + + :param vect: (x, y) vector by which to offset the object's geometry. + :type vect: tuple + :return: None + :rtype: None + """ + log.debug("FlatCAMObj.GeometryObject.offset()") + + try: + dx, dy = vect + except TypeError: + self.app.inform.emit('[ERROR_NOTCL] %s' % + _("An (x,y) pair of values are needed. " + "Probable you entered only one value in the Offset field.") + ) + return + + if dx == 0 and dy == 0: + return + + self.geo_len = 0 + self.old_disp_number = 0 + self.el_count = 0 + + def translate_recursion(geom): + if type(geom) is list: + geoms = [] + for local_geom in geom: + geoms.append(translate_recursion(local_geom)) + return geoms + else: + try: + self.el_count += 1 + disp_number = int(np.interp(self.el_count, [0, self.geo_len], [0, 100])) + if self.old_disp_number < disp_number <= 100: + self.app.proc_container.update_view_text(' %d%%' % disp_number) + self.old_disp_number = disp_number + + return affinity.translate(geom, xoff=dx, yoff=dy) + except AttributeError: + return geom + + if self.multigeo is True: + for tool in self.tools: + # variables to display the percentage of work done + self.geo_len = 0 + try: + self.geo_len = len(self.tools[tool]['solid_geometry']) + except TypeError: + self.geo_len = 1 + self.old_disp_number = 0 + self.el_count = 0 + + self.tools[tool]['solid_geometry'] = translate_recursion(self.tools[tool]['solid_geometry']) + + # variables to display the percentage of work done + self.geo_len = 0 + try: + self.geo_len = len(self.solid_geometry) + except TypeError: + self.geo_len = 1 + + self.old_disp_number = 0 + self.el_count = 0 + + self.solid_geometry = translate_recursion(self.solid_geometry) + + self.app.proc_container.new_text = '' + self.app.inform.emit('[success] %s' % _("Geometry Offset done.")) + + def convert_units(self, units): + log.debug("FlatCAMObj.GeometryObject.convert_units()") + + self.ui_disconnect() + + factor = Geometry.convert_units(self, units) + + self.options['cutz'] = float(self.options['cutz']) * factor + self.options['depthperpass'] = float(self.options['depthperpass']) * factor + self.options['travelz'] = float(self.options['travelz']) * factor + self.options['feedrate'] = float(self.options['feedrate']) * factor + self.options['feedrate_z'] = float(self.options['feedrate_z']) * factor + self.options['feedrate_rapid'] = float(self.options['feedrate_rapid']) * factor + self.options['endz'] = float(self.options['endz']) * factor + # self.options['cnctooldia'] *= factor + # self.options['painttooldia'] *= factor + # self.options['paintmargin'] *= factor + # self.options['paintoverlap'] *= factor + + self.options["toolchangez"] = float(self.options["toolchangez"]) * factor + + if self.app.defaults["geometry_toolchangexy"] == '': + self.options['toolchangexy'] = "0.0, 0.0" + else: + coords_xy = [float(eval(coord)) for coord in self.app.defaults["geometry_toolchangexy"].split(",")] + if len(coords_xy) < 2: + self.app.inform.emit('[ERROR] %s' % + _("The Toolchange X,Y field in Edit -> Preferences " + "has to be in the format (x, y)\n" + "but now there is only one value, not two.") + ) + return 'fail' + coords_xy[0] *= factor + coords_xy[1] *= factor + self.options['toolchangexy'] = "%f, %f" % (coords_xy[0], coords_xy[1]) + + if self.options['startz'] is not None: + self.options['startz'] = float(self.options['startz']) * factor + + param_list = ['cutz', 'depthperpass', 'travelz', 'feedrate', 'feedrate_z', 'feedrate_rapid', + 'endz', 'toolchangez'] + + if isinstance(self, GeometryObject): + temp_tools_dict = {} + tool_dia_copy = {} + data_copy = {} + for tooluid_key, tooluid_value in self.tools.items(): + for dia_key, dia_value in tooluid_value.items(): + if dia_key == 'tooldia': + dia_value *= factor + dia_value = float('%.*f' % (self.decimals, dia_value)) + tool_dia_copy[dia_key] = dia_value + if dia_key == 'offset': + tool_dia_copy[dia_key] = dia_value + if dia_key == 'offset_value': + dia_value *= factor + tool_dia_copy[dia_key] = dia_value + + # convert the value in the Custom Tool Offset entry in UI + custom_offset = None + try: + custom_offset = float(self.ui.tool_offset_entry.get_value()) + except ValueError: + # try to convert comma to decimal point. if it's still not working error message and return + try: + custom_offset = float(self.ui.tool_offset_entry.get_value().replace(',', '.')) + except ValueError: + self.app.inform.emit('[ERROR_NOTCL] %s' % + _("Wrong value format entered, use a number.")) + return + except TypeError: + pass + + if custom_offset: + custom_offset *= factor + self.ui.tool_offset_entry.set_value(custom_offset) + + if dia_key == 'type': + tool_dia_copy[dia_key] = dia_value + if dia_key == 'tool_type': + tool_dia_copy[dia_key] = dia_value + if dia_key == 'data': + for data_key, data_value in dia_value.items(): + # convert the form fields that are convertible + for param in param_list: + if data_key == param and data_value is not None: + data_copy[data_key] = data_value * factor + # copy the other dict entries that are not convertible + if data_key not in param_list: + data_copy[data_key] = data_value + tool_dia_copy[dia_key] = deepcopy(data_copy) + data_copy.clear() + + temp_tools_dict.update({ + tooluid_key: deepcopy(tool_dia_copy) + }) + tool_dia_copy.clear() + + self.tools.clear() + self.tools = deepcopy(temp_tools_dict) + + # if there is a value in the new tool field then convert that one too + try: + self.ui.addtool_entry.returnPressed.disconnect() + except TypeError: + pass + tooldia = self.ui.addtool_entry.get_value() + if tooldia: + tooldia *= factor + tooldia = float('%.*f' % (self.decimals, tooldia)) + + self.ui.addtool_entry.set_value(tooldia) + self.ui.addtool_entry.returnPressed.connect(self.on_tool_add) + + return factor + + def plot_element(self, element, color=None, visible=None): + + if color is None: + color = '#FF0000FF' + + visible = visible if visible else self.options['plot'] + try: + for sub_el in element: + self.plot_element(sub_el, color=color) + + except TypeError: # Element is not iterable... + # if self.app.is_legacy is False: + self.add_shape(shape=element, color=color, visible=visible, layer=0) + + def plot(self, visible=None, kind=None): + """ + Plot the object. + + :param visible: Controls if the added shape is visible of not + :param kind: added so there is no error when a project is loaded and it has both geometry and CNCJob, because + CNCJob require the 'kind' parameter. Perhaps the FlatCAMObj.plot() has to be rewrited + :return: + """ + + # Does all the required setup and returns False + # if the 'ptint' option is set to False. + if not FlatCAMObj.plot(self): + return + + try: + # plot solid geometries found as members of self.tools attribute dict + # for MultiGeo + if self.multigeo is True: # geo multi tool usage + for tooluid_key in self.tools: + solid_geometry = self.tools[tooluid_key]['solid_geometry'] + self.plot_element(solid_geometry, visible=visible, + color=self.app.defaults["geometry_plot_line"]) + else: + # plot solid geometry that may be an direct attribute of the geometry object + # for SingleGeo + if self.solid_geometry: + self.plot_element(self.solid_geometry, visible=visible, + color=self.app.defaults["geometry_plot_line"]) + + # self.plot_element(self.solid_geometry, visible=self.options['plot']) + + self.shapes.redraw() + + except (ObjectDeleted, AttributeError): + self.shapes.clear(update=True) + + def on_plot_cb_click(self, *args): + if self.muted_ui: + return + self.read_form_item('plot') + self.plot() + + self.ui_disconnect() + cb_flag = self.ui.plot_cb.isChecked() + for row in range(self.ui.geo_tools_table.rowCount()): + table_cb = self.ui.geo_tools_table.cellWidget(row, 6) + if cb_flag: + table_cb.setChecked(True) + else: + table_cb.setChecked(False) + self.ui_connect() + + def on_plot_cb_click_table(self): + # self.ui.cnc_tools_table.cellWidget(row, 2).widget().setCheckState(QtCore.Qt.Unchecked) + self.ui_disconnect() + # cw = self.sender() + # cw_index = self.ui.geo_tools_table.indexAt(cw.pos()) + # cw_row = cw_index.row() + check_row = 0 + + self.shapes.clear(update=True) + for tooluid_key in self.tools: + solid_geometry = self.tools[tooluid_key]['solid_geometry'] + + # find the geo_tool_table row associated with the tooluid_key + for row in range(self.ui.geo_tools_table.rowCount()): + tooluid_item = int(self.ui.geo_tools_table.item(row, 5).text()) + if tooluid_item == int(tooluid_key): + check_row = row + break + if self.ui.geo_tools_table.cellWidget(check_row, 6).isChecked(): + self.plot_element(element=solid_geometry, visible=True) + self.shapes.redraw() + + # make sure that the general plot is disabled if one of the row plot's are disabled and + # if all the row plot's are enabled also enable the general plot checkbox + cb_cnt = 0 + total_row = self.ui.geo_tools_table.rowCount() + for row in range(total_row): + if self.ui.geo_tools_table.cellWidget(row, 6).isChecked(): + cb_cnt += 1 + else: + cb_cnt -= 1 + if cb_cnt < total_row: + self.ui.plot_cb.setChecked(False) + else: + self.ui.plot_cb.setChecked(True) + self.ui_connect() + + def merge(self, geo_list, geo_final, multigeo=None): + """ + Merges the geometry of objects in grb_list into + the geometry of geo_final. + + :param geo_list: List of GerberObject Objects to join. + :param geo_final: Destination GerberObject object. + :param multigeo: if the merged geometry objects are of type MultiGeo + :return: None + """ + + if geo_final.solid_geometry is None: + geo_final.solid_geometry = [] + + try: + __ = iter(geo_final.solid_geometry) + except TypeError: + geo_final.solid_geometry = [geo_final.solid_geometry] + + new_solid_geometry = [] + new_options = {} + new_tools = {} + + for geo_obj in geo_list: + for option in geo_obj.options: + if option != 'name': + try: + new_options[option] = deepcopy(geo_obj.options[option]) + except Exception as e: + log.warning("Failed to copy option %s. Error: %s" % (str(option), str(e))) + + # Expand lists + if type(geo_obj) is list: + GeometryObject.merge(self, geo_list=geo_obj, geo_final=geo_final) + # If not list, just append + else: + if multigeo is None or multigeo is False: + geo_final.multigeo = False + else: + geo_final.multigeo = True + + try: + new_solid_geometry += deepcopy(geo_obj.solid_geometry) + except Exception as e: + log.debug("GeometryObject.merge() --> %s" % str(e)) + + # find the tool_uid maximum value in the geo_final + try: + max_uid = max([int(i) for i in new_tools.keys()]) + except ValueError: + max_uid = 0 + + # add and merge tools. If what we try to merge as Geometry is Excellon's and/or Gerber's then don't try + # to merge the obj.tools as it is likely there is none to merge. + if geo_obj.kind != 'gerber' and geo_obj.kind != 'excellon': + for tool_uid in geo_obj.tools: + max_uid += 1 + new_tools[max_uid] = deepcopy(geo_obj.tools[tool_uid]) + + geo_final.options.update(new_options) + geo_final.solid_geometry = new_solid_geometry + geo_final.tools = new_tools + + @staticmethod + def get_pts(o): + """ + Returns a list of all points in the object, where + the object can be a MultiPolygon, Polygon, Not a polygon, or a list + of such. Search is done recursively. + + :param: geometric object + :return: List of points + :rtype: list + """ + pts = [] + + # Iterable: descend into each item. + try: + for subo in o: + pts += GeometryObject.get_pts(subo) + + # Non-iterable + except TypeError: + if o is not None: + if type(o) == MultiPolygon: + for poly in o: + pts += GeometryObject.get_pts(poly) + # ## Descend into .exerior and .interiors + elif type(o) == Polygon: + pts += GeometryObject.get_pts(o.exterior) + for i in o.interiors: + pts += GeometryObject.get_pts(i) + elif type(o) == MultiLineString: + for line in o: + pts += GeometryObject.get_pts(line) + # ## Has .coords: list them. + else: + pts += list(o.coords) + else: + return + return pts diff --git a/flatcamObjects/FlatCAMGerber.py b/flatcamObjects/FlatCAMGerber.py new file mode 100644 index 00000000..7f241535 --- /dev/null +++ b/flatcamObjects/FlatCAMGerber.py @@ -0,0 +1,1870 @@ +# ########################################################## +# FlatCAM: 2D Post-processing for Manufacturing # +# http://flatcam.org # +# Author: Juan Pablo Caram (c) # +# Date: 2/5/2014 # +# MIT Licence # +# ########################################################## + +# ########################################################## +# File modified by: Marius Stanciu # +# ########################################################## + + +from shapely.geometry import Point, Polygon, MultiPolygon, MultiLineString, LineString, LinearRing +from shapely.ops import cascaded_union + +from flatcamParsers.ParseGerber import Gerber +from flatcamObjects.FlatCAMObj import * + +import math +import numpy as np +from copy import deepcopy + +import gettext +import FlatCAMTranslation as fcTranslate +import builtins + +fcTranslate.apply_language('strings') +if '_' not in builtins.__dict__: + _ = gettext.gettext + + +class GerberObject(FlatCAMObj, Gerber): + """ + Represents Gerber code. + """ + optionChanged = QtCore.pyqtSignal(str) + replotApertures = QtCore.pyqtSignal() + + ui_type = GerberObjectUI + + def merge(self, grb_list, grb_final): + """ + Merges the geometry of objects in geo_list into + the geometry of geo_final. + + :param grb_list: List of GerberObject Objects to join. + :param grb_final: Destination GeometryObject object. + :return: None + """ + + if grb_final.solid_geometry is None: + grb_final.solid_geometry = [] + grb_final.follow_geometry = [] + + if not grb_final.apertures: + grb_final.apertures = {} + + if type(grb_final.solid_geometry) is not list: + grb_final.solid_geometry = [grb_final.solid_geometry] + grb_final.follow_geometry = [grb_final.follow_geometry] + + for grb in grb_list: + + # Expand lists + if type(grb) is list: + GerberObject.merge(grb, grb_final) + else: # If not list, just append + for option in grb.options: + if option != 'name': + try: + grb_final.options[option] = grb.options[option] + except KeyError: + log.warning("Failed to copy option.", option) + + try: + for geos in grb.solid_geometry: + grb_final.solid_geometry.append(geos) + grb_final.follow_geometry.append(geos) + except TypeError: + grb_final.solid_geometry.append(grb.solid_geometry) + grb_final.follow_geometry.append(grb.solid_geometry) + + for ap in grb.apertures: + if ap not in grb_final.apertures: + grb_final.apertures[ap] = grb.apertures[ap] + else: + # create a list of integers out of the grb.apertures keys and find the max of that value + # then, the aperture duplicate is assigned an id value incremented with 1, + # and finally made string because the apertures dict keys are strings + max_ap = str(max([int(k) for k in grb_final.apertures.keys()]) + 1) + grb_final.apertures[max_ap] = {} + grb_final.apertures[max_ap]['geometry'] = [] + + for k, v in grb.apertures[ap].items(): + grb_final.apertures[max_ap][k] = deepcopy(v) + + grb_final.solid_geometry = MultiPolygon(grb_final.solid_geometry) + grb_final.follow_geometry = MultiPolygon(grb_final.follow_geometry) + + def __init__(self, name): + self.decimals = self.app.decimals + + self.circle_steps = int(self.app.defaults["gerber_circle_steps"]) + + Gerber.__init__(self, steps_per_circle=self.circle_steps) + FlatCAMObj.__init__(self, name) + + self.kind = "gerber" + + # The 'name' is already in self.options from FlatCAMObj + # Automatically updates the UI + self.options.update({ + "plot": True, + "multicolored": False, + "solid": False, + "tool_type": 'circular', + "vtipdia": 0.1, + "vtipangle": 30, + "vcutz": -0.05, + "isotooldia": 0.016, + "isopasses": 1, + "isooverlap": 15, + "milling_type": "cl", + "combine_passes": True, + "noncoppermargin": 0.0, + "noncopperrounded": False, + "bboxmargin": 0.0, + "bboxrounded": False, + "aperture_display": False, + "follow": False, + "iso_scope": 'all', + "iso_type": 'full' + }) + + # type of isolation: 0 = exteriors, 1 = interiors, 2 = complete isolation (both interiors and exteriors) + self.iso_type = 2 + + self.multigeo = False + + self.follow = False + + self.apertures_row = 0 + + # store the source file here + self.source_file = "" + + # list of rows with apertures plotted + self.marked_rows = [] + + # Mouse events + self.mr = None + self.mm = None + self.mp = None + + # dict to store the polygons selected for isolation; key is the shape added to be plotted and value is the poly + self.poly_dict = {} + + # store the status of grid snapping + self.grid_status_memory = None + + self.units_found = self.app.defaults['units'] + + self.fill_color = self.app.defaults['gerber_plot_fill'] + self.outline_color = self.app.defaults['gerber_plot_line'] + self.alpha_level = 'bf' + + # keep track if the UI is built so we don't have to build it every time + self.ui_build = False + + # build only once the aperture storage (takes time) + self.build_aperture_storage = False + + # Attributes to be included in serialization + # Always append to it because it carries contents + # from predecessors. + self.ser_attrs += ['options', 'kind', 'fill_color', 'outline_color', 'alpha_level'] + + def set_ui(self, ui): + """ + Maps options with GUI inputs. + Connects GUI events to methods. + + :param ui: GUI object. + :type ui: GerberObjectUI + :return: None + """ + FlatCAMObj.set_ui(self, ui) + log.debug("GerberObject.set_ui()") + + self.units = self.app.defaults['units'].upper() + + self.replotApertures.connect(self.on_mark_cb_click_table) + + self.form_fields.update({ + "plot": self.ui.plot_cb, + "multicolored": self.ui.multicolored_cb, + "solid": self.ui.solid_cb, + "tool_type": self.ui.tool_type_radio, + "vtipdia": self.ui.tipdia_spinner, + "vtipangle": self.ui.tipangle_spinner, + "vcutz": self.ui.cutz_spinner, + "isotooldia": self.ui.iso_tool_dia_entry, + "isopasses": self.ui.iso_width_entry, + "isooverlap": self.ui.iso_overlap_entry, + "milling_type": self.ui.milling_type_radio, + "combine_passes": self.ui.combine_passes_cb, + "noncoppermargin": self.ui.noncopper_margin_entry, + "noncopperrounded": self.ui.noncopper_rounded_cb, + "bboxmargin": self.ui.bbmargin_entry, + "bboxrounded": self.ui.bbrounded_cb, + "aperture_display": self.ui.aperture_table_visibility_cb, + "follow": self.ui.follow_cb, + "iso_scope": self.ui.iso_scope_radio, + "iso_type": self.ui.iso_type_radio + }) + + # Fill form fields only on object create + self.to_form() + + assert isinstance(self.ui, GerberObjectUI) + self.ui.plot_cb.stateChanged.connect(self.on_plot_cb_click) + self.ui.solid_cb.stateChanged.connect(self.on_solid_cb_click) + self.ui.multicolored_cb.stateChanged.connect(self.on_multicolored_cb_click) + self.ui.generate_iso_button.clicked.connect(self.on_iso_button_click) + self.ui.generate_ncc_button.clicked.connect(self.app.ncclear_tool.run) + self.ui.generate_cutout_button.clicked.connect(self.app.cutout_tool.run) + self.ui.generate_bb_button.clicked.connect(self.on_generatebb_button_click) + self.ui.generate_noncopper_button.clicked.connect(self.on_generatenoncopper_button_click) + self.ui.aperture_table_visibility_cb.stateChanged.connect(self.on_aperture_table_visibility_change) + self.ui.follow_cb.stateChanged.connect(self.on_follow_cb_click) + + # set the model for the Area Exception comboboxes + self.ui.obj_combo.setModel(self.app.collection) + self.ui.obj_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex())) + self.ui.obj_combo.is_last = True + self.ui.obj_combo.obj_type = { + _("Gerber"): "Gerber", _("Geometry"): "Geometry" + }[self.ui.type_obj_combo.get_value()] + self.on_type_obj_index_changed() + + self.ui.type_obj_combo.currentIndexChanged.connect(self.on_type_obj_index_changed) + + self.ui.tool_type_radio.activated_custom.connect(self.on_tool_type_change) + # establish visibility for the GUI elements found in the slot function + self.ui.tool_type_radio.activated_custom.emit(self.options['tool_type']) + + # Show/Hide Advanced Options + if self.app.defaults["global_app_level"] == 'b': + self.ui.level.setText('%s' % _('Basic')) + self.options['tool_type'] = 'circular' + + self.ui.tool_type_label.hide() + self.ui.tool_type_radio.hide() + + # override the Preferences Value; in Basic mode the Tool Type is always Circular ('C1') + self.ui.tool_type_radio.set_value('circular') + + self.ui.tipdialabel.hide() + self.ui.tipdia_spinner.hide() + self.ui.tipanglelabel.hide() + self.ui.tipangle_spinner.hide() + self.ui.cutzlabel.hide() + self.ui.cutz_spinner.hide() + + self.ui.apertures_table_label.hide() + self.ui.aperture_table_visibility_cb.hide() + self.ui.milling_type_label.hide() + self.ui.milling_type_radio.hide() + self.ui.iso_type_label.hide() + self.ui.iso_type_radio.hide() + + self.ui.follow_cb.hide() + self.ui.except_cb.setChecked(False) + self.ui.except_cb.hide() + else: + self.ui.level.setText('%s' % _('Advanced')) + self.ui.tipdia_spinner.valueChanged.connect(self.on_calculate_tooldia) + self.ui.tipangle_spinner.valueChanged.connect(self.on_calculate_tooldia) + self.ui.cutz_spinner.valueChanged.connect(self.on_calculate_tooldia) + + if self.app.defaults["gerber_buffering"] == 'no': + self.ui.create_buffer_button.show() + try: + self.ui.create_buffer_button.clicked.disconnect(self.on_generate_buffer) + except TypeError: + pass + self.ui.create_buffer_button.clicked.connect(self.on_generate_buffer) + else: + self.ui.create_buffer_button.hide() + + # set initial state of the aperture table and associated widgets + self.on_aperture_table_visibility_change() + + self.build_ui() + self.units_found = self.app.defaults['units'] + + def on_calculate_tooldia(self): + try: + tdia = float(self.ui.tipdia_spinner.get_value()) + except Exception: + return + try: + dang = float(self.ui.tipangle_spinner.get_value()) + except Exception: + return + try: + cutz = float(self.ui.cutz_spinner.get_value()) + except Exception: + return + + cutz *= -1 + if cutz < 0: + cutz *= -1 + + half_tip_angle = dang / 2 + + tool_diameter = tdia + (2 * cutz * math.tan(math.radians(half_tip_angle))) + self.ui.iso_tool_dia_entry.set_value(tool_diameter) + + def on_type_obj_index_changed(self): + val = self.ui.type_obj_combo.get_value() + obj_type = {"Gerber": 0, "Geometry": 2}[val] + self.ui.obj_combo.setRootModelIndex(self.app.collection.index(obj_type, 0, QtCore.QModelIndex())) + self.ui.obj_combo.setCurrentIndex(0) + self.ui.obj_combo.obj_type = {_("Gerber"): "Gerber", _("Geometry"): "Geometry"}[val] + + def on_tool_type_change(self, state): + if state == 'circular': + self.ui.tipdialabel.hide() + self.ui.tipdia_spinner.hide() + self.ui.tipanglelabel.hide() + self.ui.tipangle_spinner.hide() + self.ui.cutzlabel.hide() + self.ui.cutz_spinner.hide() + self.ui.iso_tool_dia_entry.setDisabled(False) + # update the value in the self.iso_tool_dia_entry once this is selected + self.ui.iso_tool_dia_entry.set_value(self.options['isotooldia']) + else: + self.ui.tipdialabel.show() + self.ui.tipdia_spinner.show() + self.ui.tipanglelabel.show() + self.ui.tipangle_spinner.show() + self.ui.cutzlabel.show() + self.ui.cutz_spinner.show() + self.ui.iso_tool_dia_entry.setDisabled(True) + # update the value in the self.iso_tool_dia_entry once this is selected + self.on_calculate_tooldia() + + def build_ui(self): + FlatCAMObj.build_ui(self) + + if self.ui.aperture_table_visibility_cb.get_value() and self.ui_build is False: + self.ui_build = True + + try: + # if connected, disconnect the signal from the slot on item_changed as it creates issues + self.ui.apertures_table.itemChanged.disconnect() + except (TypeError, AttributeError): + pass + + self.apertures_row = 0 + aper_no = self.apertures_row + 1 + sort = [] + for k, v in list(self.apertures.items()): + sort.append(int(k)) + sorted_apertures = sorted(sort) + + n = len(sorted_apertures) + self.ui.apertures_table.setRowCount(n) + + for ap_code in sorted_apertures: + ap_code = str(ap_code) + + ap_id_item = QtWidgets.QTableWidgetItem('%d' % int(self.apertures_row + 1)) + ap_id_item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) + self.ui.apertures_table.setItem(self.apertures_row, 0, ap_id_item) # Tool name/id + + ap_code_item = QtWidgets.QTableWidgetItem(ap_code) + ap_code_item.setFlags(QtCore.Qt.ItemIsEnabled) + + ap_type_item = QtWidgets.QTableWidgetItem(str(self.apertures[ap_code]['type'])) + ap_type_item.setFlags(QtCore.Qt.ItemIsEnabled) + + if str(self.apertures[ap_code]['type']) == 'R' or str(self.apertures[ap_code]['type']) == 'O': + ap_dim_item = QtWidgets.QTableWidgetItem( + '%.*f, %.*f' % (self.decimals, self.apertures[ap_code]['width'], + self.decimals, self.apertures[ap_code]['height'] + ) + ) + ap_dim_item.setFlags(QtCore.Qt.ItemIsEnabled) + elif str(self.apertures[ap_code]['type']) == 'P': + ap_dim_item = QtWidgets.QTableWidgetItem( + '%.*f, %.*f' % (self.decimals, self.apertures[ap_code]['diam'], + self.decimals, self.apertures[ap_code]['nVertices']) + ) + ap_dim_item.setFlags(QtCore.Qt.ItemIsEnabled) + else: + ap_dim_item = QtWidgets.QTableWidgetItem('') + ap_dim_item.setFlags(QtCore.Qt.ItemIsEnabled) + + try: + if self.apertures[ap_code]['size'] is not None: + ap_size_item = QtWidgets.QTableWidgetItem( + '%.*f' % (self.decimals, float(self.apertures[ap_code]['size']))) + else: + ap_size_item = QtWidgets.QTableWidgetItem('') + except KeyError: + ap_size_item = QtWidgets.QTableWidgetItem('') + ap_size_item.setFlags(QtCore.Qt.ItemIsEnabled) + + mark_item = FCCheckBox() + mark_item.setLayoutDirection(QtCore.Qt.RightToLeft) + # if self.ui.aperture_table_visibility_cb.isChecked(): + # mark_item.setChecked(True) + + self.ui.apertures_table.setItem(self.apertures_row, 1, ap_code_item) # Aperture Code + self.ui.apertures_table.setItem(self.apertures_row, 2, ap_type_item) # Aperture Type + self.ui.apertures_table.setItem(self.apertures_row, 3, ap_size_item) # Aperture Dimensions + self.ui.apertures_table.setItem(self.apertures_row, 4, ap_dim_item) # Aperture Dimensions + + empty_plot_item = QtWidgets.QTableWidgetItem('') + empty_plot_item.setFlags(~QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) + self.ui.apertures_table.setItem(self.apertures_row, 5, empty_plot_item) + self.ui.apertures_table.setCellWidget(self.apertures_row, 5, mark_item) + + self.apertures_row += 1 + + self.ui.apertures_table.selectColumn(0) + self.ui.apertures_table.resizeColumnsToContents() + self.ui.apertures_table.resizeRowsToContents() + + vertical_header = self.ui.apertures_table.verticalHeader() + # vertical_header.setSectionResizeMode(QtWidgets.QHeaderView.ResizeToContents) + vertical_header.hide() + self.ui.apertures_table.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) + + horizontal_header = self.ui.apertures_table.horizontalHeader() + horizontal_header.setMinimumSectionSize(10) + horizontal_header.setDefaultSectionSize(70) + horizontal_header.setSectionResizeMode(0, QtWidgets.QHeaderView.Fixed) + horizontal_header.resizeSection(0, 27) + horizontal_header.setSectionResizeMode(1, QtWidgets.QHeaderView.ResizeToContents) + horizontal_header.setSectionResizeMode(2, QtWidgets.QHeaderView.ResizeToContents) + horizontal_header.setSectionResizeMode(3, QtWidgets.QHeaderView.ResizeToContents) + horizontal_header.setSectionResizeMode(4, QtWidgets.QHeaderView.Stretch) + horizontal_header.setSectionResizeMode(5, QtWidgets.QHeaderView.Fixed) + horizontal_header.resizeSection(5, 17) + self.ui.apertures_table.setColumnWidth(5, 17) + + self.ui.apertures_table.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) + self.ui.apertures_table.setSortingEnabled(False) + self.ui.apertures_table.setMinimumHeight(self.ui.apertures_table.getHeight()) + self.ui.apertures_table.setMaximumHeight(self.ui.apertures_table.getHeight()) + + # update the 'mark' checkboxes state according with what is stored in the self.marked_rows list + if self.marked_rows: + for row in range(self.ui.apertures_table.rowCount()): + try: + self.ui.apertures_table.cellWidget(row, 5).set_value(self.marked_rows[row]) + except IndexError: + pass + + self.ui_connect() + + def ui_connect(self): + for row in range(self.ui.apertures_table.rowCount()): + try: + self.ui.apertures_table.cellWidget(row, 5).clicked.disconnect(self.on_mark_cb_click_table) + except (TypeError, AttributeError): + pass + self.ui.apertures_table.cellWidget(row, 5).clicked.connect(self.on_mark_cb_click_table) + + try: + self.ui.mark_all_cb.clicked.disconnect(self.on_mark_all_click) + except (TypeError, AttributeError): + pass + self.ui.mark_all_cb.clicked.connect(self.on_mark_all_click) + + def ui_disconnect(self): + for row in range(self.ui.apertures_table.rowCount()): + try: + self.ui.apertures_table.cellWidget(row, 5).clicked.disconnect() + except (TypeError, AttributeError): + pass + + try: + self.ui.mark_all_cb.clicked.disconnect(self.on_mark_all_click) + except (TypeError, AttributeError): + pass + + def on_generate_buffer(self): + self.app.inform.emit('[WARNING_NOTCL] %s...' % _("Buffering solid geometry")) + + def buffer_task(): + with self.app.proc_container.new('%s...' % _("Buffering")): + if isinstance(self.solid_geometry, list): + self.solid_geometry = MultiPolygon(self.solid_geometry) + + self.solid_geometry = self.solid_geometry.buffer(0.0000001) + self.solid_geometry = self.solid_geometry.buffer(-0.0000001) + self.app.inform.emit('[success] %s.' % _("Done")) + self.plot_single_object.emit() + + self.app.worker_task.emit({'fcn': buffer_task, 'params': []}) + + def on_generatenoncopper_button_click(self, *args): + self.app.report_usage("gerber_on_generatenoncopper_button") + + self.read_form() + name = self.options["name"] + "_noncopper" + + def geo_init(geo_obj, app_obj): + assert geo_obj.kind == 'geometry', "Expected a Geometry object got %s" % type(geo_obj) + + if isinstance(self.solid_geometry, list): + try: + self.solid_geometry = MultiPolygon(self.solid_geometry) + except Exception: + self.solid_geometry = cascaded_union(self.solid_geometry) + + bounding_box = self.solid_geometry.envelope.buffer(float(self.options["noncoppermargin"])) + if not self.options["noncopperrounded"]: + bounding_box = bounding_box.envelope + non_copper = bounding_box.difference(self.solid_geometry) + + if non_copper is None or non_copper.is_empty: + self.app.inform.emit("[ERROR_NOTCL] %s" % _("Operation could not be done.")) + return "fail" + geo_obj.solid_geometry = non_copper + + self.app.new_object("geometry", name, geo_init) + + def on_generatebb_button_click(self, *args): + self.app.report_usage("gerber_on_generatebb_button") + self.read_form() + name = self.options["name"] + "_bbox" + + def geo_init(geo_obj, app_obj): + assert geo_obj.kind == 'geometry', "Expected a Geometry object got %s" % type(geo_obj) + + if isinstance(self.solid_geometry, list): + try: + self.solid_geometry = MultiPolygon(self.solid_geometry) + except Exception: + self.solid_geometry = cascaded_union(self.solid_geometry) + + # Bounding box with rounded corners + bounding_box = self.solid_geometry.envelope.buffer(float(self.options["bboxmargin"])) + if not self.options["bboxrounded"]: # Remove rounded corners + bounding_box = bounding_box.envelope + + if bounding_box is None or bounding_box.is_empty: + self.app.inform.emit("[ERROR_NOTCL] %s" % _("Operation could not be done.")) + return "fail" + geo_obj.solid_geometry = bounding_box + + self.app.new_object("geometry", name, geo_init) + + def on_iso_button_click(self, *args): + + obj = self.app.collection.get_active() + + self.iso_type = 2 + if self.ui.iso_type_radio.get_value() == 'ext': + self.iso_type = 0 + if self.ui.iso_type_radio.get_value() == 'int': + self.iso_type = 1 + + def worker_task(iso_obj, app_obj): + with self.app.proc_container.new(_("Isolating...")): + if self.ui.follow_cb.get_value() is True: + iso_obj.follow_geo() + # in the end toggle the visibility of the origin object so we can see the generated Geometry + iso_obj.ui.plot_cb.toggle() + else: + app_obj.report_usage("gerber_on_iso_button") + self.read_form() + + iso_scope = 'all' if self.ui.iso_scope_radio.get_value() == 'all' else 'single' + self.isolate_handler(iso_type=self.iso_type, iso_scope=iso_scope) + + self.app.worker_task.emit({'fcn': worker_task, 'params': [obj, self.app]}) + + def follow_geo(self, outname=None): + """ + Creates a geometry object "following" the gerber paths. + + :return: None + """ + + # default_name = self.options["name"] + "_follow" + # follow_name = outname or default_name + + if outname is None: + follow_name = self.options["name"] + "_follow" + else: + follow_name = outname + + def follow_init(follow_obj, app): + # Propagate options + follow_obj.options["cnctooldia"] = str(self.options["isotooldia"]) + follow_obj.solid_geometry = self.follow_geometry + + # TODO: Do something if this is None. Offer changing name? + try: + self.app.new_object("geometry", follow_name, follow_init) + except Exception as e: + return "Operation failed: %s" % str(e) + + def isolate_handler(self, iso_type, iso_scope): + + if iso_scope == 'all': + self.isolate(iso_type=iso_type) + else: + # disengage the grid snapping since it may be hard to click on polygons with grid snapping on + if self.app.ui.grid_snap_btn.isChecked(): + self.grid_status_memory = True + self.app.ui.grid_snap_btn.trigger() + else: + self.grid_status_memory = False + + self.mr = self.app.plotcanvas.graph_event_connect('mouse_release', self.on_mouse_click_release) + + if self.app.is_legacy is False: + self.app.plotcanvas.graph_event_disconnect('mouse_release', self.app.on_mouse_click_release_over_plot) + else: + self.app.plotcanvas.graph_event_disconnect(self.app.mr) + + self.app.inform.emit('[WARNING_NOTCL] %s' % _("Click on a polygon to isolate it.")) + + def on_mouse_click_release(self, event): + if self.app.is_legacy is False: + event_pos = event.pos + right_button = 2 + self.app.event_is_dragging = self.app.event_is_dragging + else: + event_pos = (event.xdata, event.ydata) + right_button = 3 + self.app.event_is_dragging = self.app.ui.popMenu.mouse_is_panning + + try: + x = float(event_pos[0]) + y = float(event_pos[1]) + except TypeError: + return + + event_pos = (x, y) + curr_pos = self.app.plotcanvas.translate_coords(event_pos) + if self.app.grid_status(): + curr_pos = self.app.geo_editor.snap(curr_pos[0], curr_pos[1]) + else: + curr_pos = (curr_pos[0], curr_pos[1]) + + if event.button == 1: + clicked_poly = self.find_polygon(point=(curr_pos[0], curr_pos[1])) + + if self.app.selection_type is not None: + self.selection_area_handler(self.app.pos, curr_pos, self.app.selection_type) + self.app.selection_type = None + elif clicked_poly: + if clicked_poly not in self.poly_dict.values(): + shape_id = self.app.tool_shapes.add(tolerance=self.drawing_tolerance, layer=0, shape=clicked_poly, + color=self.app.defaults['global_sel_draw_color'] + 'AF', + face_color=self.app.defaults['global_sel_draw_color'] + 'AF', + visible=True) + self.poly_dict[shape_id] = clicked_poly + self.app.inform.emit( + '%s: %d. %s' % (_("Added polygon"), int(len(self.poly_dict)), + _("Click to add next polygon or right click to start isolation.")) + ) + else: + try: + for k, v in list(self.poly_dict.items()): + if v == clicked_poly: + self.app.tool_shapes.remove(k) + self.poly_dict.pop(k) + break + except TypeError: + return + self.app.inform.emit( + '%s. %s' % (_("Removed polygon"), + _("Click to add/remove next polygon or right click to start isolation.")) + ) + + self.app.tool_shapes.redraw() + else: + self.app.inform.emit(_("No polygon detected under click position.")) + elif event.button == right_button and self.app.event_is_dragging is False: + # restore the Grid snapping if it was active before + if self.grid_status_memory is True: + self.app.ui.grid_snap_btn.trigger() + + if self.app.is_legacy is False: + self.app.plotcanvas.graph_event_disconnect('mouse_release', self.on_mouse_click_release) + else: + self.app.plotcanvas.graph_event_disconnect(self.mr) + + self.app.mr = self.app.plotcanvas.graph_event_connect('mouse_release', + self.app.on_mouse_click_release_over_plot) + + self.app.tool_shapes.clear(update=True) + + if self.poly_dict: + poly_list = deepcopy(list(self.poly_dict.values())) + self.isolate(iso_type=self.iso_type, geometry=poly_list) + self.poly_dict.clear() + else: + self.app.inform.emit('[ERROR_NOTCL] %s' % _("List of single polygons is empty. Aborting.")) + + def selection_area_handler(self, start_pos, end_pos, sel_type): + """ + :param start_pos: mouse position when the selection LMB click was done + :param end_pos: mouse position when the left mouse button is released + :param sel_type: if True it's a left to right selection (enclosure), if False it's a 'touch' selection + :return: + """ + poly_selection = Polygon([start_pos, (end_pos[0], start_pos[1]), end_pos, (start_pos[0], end_pos[1])]) + + # delete previous selection shape + self.app.delete_selection_shape() + + added_poly_count = 0 + try: + for geo in self.solid_geometry: + if geo not in self.poly_dict.values(): + if sel_type is True: + if geo.within(poly_selection): + shape_id = self.app.tool_shapes.add(tolerance=self.drawing_tolerance, layer=0, + shape=geo, + color=self.app.defaults['global_sel_draw_color'] + 'AF', + face_color=self.app.defaults[ + 'global_sel_draw_color'] + 'AF', + visible=True) + self.poly_dict[shape_id] = geo + added_poly_count += 1 + else: + if poly_selection.intersects(geo): + shape_id = self.app.tool_shapes.add(tolerance=self.drawing_tolerance, layer=0, + shape=geo, + color=self.app.defaults['global_sel_draw_color'] + 'AF', + face_color=self.app.defaults[ + 'global_sel_draw_color'] + 'AF', + visible=True) + self.poly_dict[shape_id] = geo + added_poly_count += 1 + except TypeError: + if self.solid_geometry not in self.poly_dict.values(): + if sel_type is True: + if self.solid_geometry.within(poly_selection): + shape_id = self.app.tool_shapes.add(tolerance=self.drawing_tolerance, layer=0, + shape=self.solid_geometry, + color=self.app.defaults['global_sel_draw_color'] + 'AF', + face_color=self.app.defaults[ + 'global_sel_draw_color'] + 'AF', + visible=True) + self.poly_dict[shape_id] = self.solid_geometry + added_poly_count += 1 + else: + if poly_selection.intersects(self.solid_geometry): + shape_id = self.app.tool_shapes.add(tolerance=self.drawing_tolerance, layer=0, + shape=self.solid_geometry, + color=self.app.defaults['global_sel_draw_color'] + 'AF', + face_color=self.app.defaults[ + 'global_sel_draw_color'] + 'AF', + visible=True) + self.poly_dict[shape_id] = self.solid_geometry + added_poly_count += 1 + + if added_poly_count > 0: + self.app.tool_shapes.redraw() + self.app.inform.emit( + '%s: %d. %s' % (_("Added polygon"), + int(added_poly_count), + _("Click to add next polygon or right click to start isolation.")) + ) + else: + self.app.inform.emit(_("No polygon in selection.")) + + def isolate(self, iso_type=None, geometry=None, dia=None, passes=None, overlap=None, outname=None, combine=None, + milling_type=None, follow=None, plot=True): + """ + Creates an isolation routing geometry object in the project. + + :param iso_type: type of isolation to be done: 0 = exteriors, 1 = interiors and 2 = both + :param geometry: specific geometry to isolate + :param dia: Tool diameter + :param passes: Number of tool widths to cut + :param overlap: Overlap between passes in fraction of tool diameter + :param outname: Base name of the output object + :param combine: Boolean: if to combine passes in one resulting object in case of multiple passes + :param milling_type: type of milling: conventional or climbing + :param follow: Boolean: if to generate a 'follow' geometry + :param plot: Boolean: if to plot the resulting geometry object + :return: None + """ + + if geometry is None: + work_geo = self.follow_geometry if follow is True else self.solid_geometry + else: + work_geo = geometry + + if dia is None: + dia = float(self.options["isotooldia"]) + + if passes is None: + passes = int(self.options["isopasses"]) + + if overlap is None: + overlap = float(self.options["isooverlap"]) + + overlap /= 100.0 + + combine = self.options["combine_passes"] if combine is None else bool(combine) + + if milling_type is None: + milling_type = self.options["milling_type"] + + if iso_type is None: + iso_t = 2 + else: + iso_t = iso_type + + base_name = self.options["name"] + + if combine: + if outname is None: + if self.iso_type == 0: + iso_name = base_name + "_ext_iso" + elif self.iso_type == 1: + iso_name = base_name + "_int_iso" + else: + iso_name = base_name + "_iso" + else: + iso_name = outname + + def iso_init(geo_obj, app_obj): + # Propagate options + geo_obj.options["cnctooldia"] = str(self.options["isotooldia"]) + geo_obj.tool_type = self.ui.tool_type_radio.get_value().upper() + + geo_obj.solid_geometry = [] + + # transfer the Cut Z and Vtip and VAngle values in case that we use the V-Shape tool in Gerber UI + if self.ui.tool_type_radio.get_value() == 'v': + new_cutz = self.ui.cutz_spinner.get_value() + new_vtipdia = self.ui.tipdia_spinner.get_value() + new_vtipangle = self.ui.tipangle_spinner.get_value() + tool_type = 'V' + else: + new_cutz = self.app.defaults['geometry_cutz'] + new_vtipdia = self.app.defaults['geometry_vtipdia'] + new_vtipangle = self.app.defaults['geometry_vtipangle'] + tool_type = 'C1' + + # store here the default data for Geometry Data + default_data = {} + default_data.update({ + "name": iso_name, + "plot": self.app.defaults['geometry_plot'], + "cutz": new_cutz, + "vtipdia": new_vtipdia, + "vtipangle": new_vtipangle, + "travelz": self.app.defaults['geometry_travelz'], + "feedrate": self.app.defaults['geometry_feedrate'], + "feedrate_z": self.app.defaults['geometry_feedrate_z'], + "feedrate_rapid": self.app.defaults['geometry_feedrate_rapid'], + "dwell": self.app.defaults['geometry_dwell'], + "dwelltime": self.app.defaults['geometry_dwelltime'], + "multidepth": self.app.defaults['geometry_multidepth'], + "ppname_g": self.app.defaults['geometry_ppname_g'], + "depthperpass": self.app.defaults['geometry_depthperpass'], + "extracut": self.app.defaults['geometry_extracut'], + "extracut_length": self.app.defaults['geometry_extracut_length'], + "toolchange": self.app.defaults['geometry_toolchange'], + "toolchangez": self.app.defaults['geometry_toolchangez'], + "endz": self.app.defaults['geometry_endz'], + "spindlespeed": self.app.defaults['geometry_spindlespeed'], + "toolchangexy": self.app.defaults['geometry_toolchangexy'], + "startz": self.app.defaults['geometry_startz'] + }) + + geo_obj.tools = {} + geo_obj.tools['1'] = {} + geo_obj.tools.update({ + '1': { + 'tooldia': float(self.options["isotooldia"]), + 'offset': 'Path', + 'offset_value': 0.0, + 'type': _('Rough'), + 'tool_type': tool_type, + 'data': default_data, + 'solid_geometry': geo_obj.solid_geometry + } + }) + + for nr_pass in range(passes): + iso_offset = dia * ((2 * nr_pass + 1) / 2.0) - (nr_pass * overlap * dia) + + # if milling type is climb then the move is counter-clockwise around features + mill_dir = 1 if milling_type == 'cl' else 0 + geom = self.generate_envelope(iso_offset, mill_dir, geometry=work_geo, env_iso_type=iso_t, + follow=follow, nr_passes=nr_pass) + + if geom == 'fail': + app_obj.inform.emit('[ERROR_NOTCL] %s' % _("Isolation geometry could not be generated.")) + return 'fail' + geo_obj.solid_geometry.append(geom) + + # update the geometry in the tools + geo_obj.tools['1']['solid_geometry'] = geo_obj.solid_geometry + + # detect if solid_geometry is empty and this require list flattening which is "heavy" + # or just looking in the lists (they are one level depth) and if any is not empty + # proceed with object creation, if there are empty and the number of them is the length + # of the list then we have an empty solid_geometry which should raise a Custom Exception + empty_cnt = 0 + if not isinstance(geo_obj.solid_geometry, list) and \ + not isinstance(geo_obj.solid_geometry, MultiPolygon): + geo_obj.solid_geometry = [geo_obj.solid_geometry] + + for g in geo_obj.solid_geometry: + if g: + break + else: + empty_cnt += 1 + + if empty_cnt == len(geo_obj.solid_geometry): + raise ValidationError("Empty Geometry", None) + else: + app_obj.inform.emit('[success] %s" %s' % (_("Isolation geometry created"), geo_obj.options["name"])) + + # even if combine is checked, one pass is still single-geo + geo_obj.multigeo = True if passes > 1 else False + + # ############################################################ + # ########## AREA SUBTRACTION ################################ + # ############################################################ + if self.ui.except_cb.get_value(): + self.app.proc_container.update_view_text(' %s' % _("Subtracting Geo")) + geo_obj.solid_geometry = self.area_subtraction(geo_obj.solid_geometry) + + # TODO: Do something if this is None. Offer changing name? + self.app.new_object("geometry", iso_name, iso_init, plot=plot) + else: + for i in range(passes): + + offset = dia * ((2 * i + 1) / 2.0) - (i * overlap * dia) + if passes > 1: + if outname is None: + if self.iso_type == 0: + iso_name = base_name + "_ext_iso" + str(i + 1) + elif self.iso_type == 1: + iso_name = base_name + "_int_iso" + str(i + 1) + else: + iso_name = base_name + "_iso" + str(i + 1) + else: + iso_name = outname + else: + if outname is None: + if self.iso_type == 0: + iso_name = base_name + "_ext_iso" + elif self.iso_type == 1: + iso_name = base_name + "_int_iso" + else: + iso_name = base_name + "_iso" + else: + iso_name = outname + + def iso_init(geo_obj, app_obj): + # Propagate options + geo_obj.options["cnctooldia"] = str(self.options["isotooldia"]) + if self.ui.tool_type_radio.get_value() == 'v': + geo_obj.tool_type = 'V' + else: + geo_obj.tool_type = 'C1' + + # if milling type is climb then the move is counter-clockwise around features + mill_dir = 1 if milling_type == 'cl' else 0 + geom = self.generate_envelope(offset, mill_dir, geometry=work_geo, env_iso_type=iso_t, + follow=follow, + nr_passes=i) + + if geom == 'fail': + app_obj.inform.emit('[ERROR_NOTCL] %s' % _("Isolation geometry could not be generated.")) + return 'fail' + + geo_obj.solid_geometry = geom + + # transfer the Cut Z and Vtip and VAngle values in case that we use the V-Shape tool in Gerber UI + # even if the resulting geometry is not multigeo we add the tools dict which will hold the data + # required to be transfered to the Geometry object + if self.ui.tool_type_radio.get_value() == 'v': + new_cutz = self.ui.cutz_spinner.get_value() + new_vtipdia = self.ui.tipdia_spinner.get_value() + new_vtipangle = self.ui.tipangle_spinner.get_value() + tool_type = 'V' + else: + new_cutz = self.app.defaults['geometry_cutz'] + new_vtipdia = self.app.defaults['geometry_vtipdia'] + new_vtipangle = self.app.defaults['geometry_vtipangle'] + tool_type = 'C1' + + # store here the default data for Geometry Data + default_data = {} + default_data.update({ + "name": iso_name, + "plot": self.app.defaults['geometry_plot'], + "cutz": new_cutz, + "vtipdia": new_vtipdia, + "vtipangle": new_vtipangle, + "travelz": self.app.defaults['geometry_travelz'], + "feedrate": self.app.defaults['geometry_feedrate'], + "feedrate_z": self.app.defaults['geometry_feedrate_z'], + "feedrate_rapid": self.app.defaults['geometry_feedrate_rapid'], + "dwell": self.app.defaults['geometry_dwell'], + "dwelltime": self.app.defaults['geometry_dwelltime'], + "multidepth": self.app.defaults['geometry_multidepth'], + "ppname_g": self.app.defaults['geometry_ppname_g'], + "depthperpass": self.app.defaults['geometry_depthperpass'], + "extracut": self.app.defaults['geometry_extracut'], + "extracut_length": self.app.defaults['geometry_extracut_length'], + "toolchange": self.app.defaults['geometry_toolchange'], + "toolchangez": self.app.defaults['geometry_toolchangez'], + "endz": self.app.defaults['geometry_endz'], + "spindlespeed": self.app.defaults['geometry_spindlespeed'], + "toolchangexy": self.app.defaults['geometry_toolchangexy'], + "startz": self.app.defaults['geometry_startz'] + }) + + geo_obj.tools = {} + geo_obj.tools['1'] = {} + geo_obj.tools.update({ + '1': { + 'tooldia': float(self.options["isotooldia"]), + 'offset': 'Path', + 'offset_value': 0.0, + 'type': _('Rough'), + 'tool_type': tool_type, + 'data': default_data, + 'solid_geometry': geo_obj.solid_geometry + } + }) + + # detect if solid_geometry is empty and this require list flattening which is "heavy" + # or just looking in the lists (they are one level depth) and if any is not empty + # proceed with object creation, if there are empty and the number of them is the length + # of the list then we have an empty solid_geometry which should raise a Custom Exception + empty_cnt = 0 + if not isinstance(geo_obj.solid_geometry, list): + geo_obj.solid_geometry = [geo_obj.solid_geometry] + + for g in geo_obj.solid_geometry: + if g: + break + else: + empty_cnt += 1 + + if empty_cnt == len(geo_obj.solid_geometry): + raise ValidationError("Empty Geometry", None) + else: + app_obj.inform.emit('[success] %s: %s' % + (_("Isolation geometry created"), geo_obj.options["name"])) + geo_obj.multigeo = False + + # ############################################################ + # ########## AREA SUBTRACTION ################################ + # ############################################################ + if self.ui.except_cb.get_value(): + self.app.proc_container.update_view_text(' %s' % _("Subtracting Geo")) + geo_obj.solid_geometry = self.area_subtraction(geo_obj.solid_geometry) + + # TODO: Do something if this is None. Offer changing name? + self.app.new_object("geometry", iso_name, iso_init, plot=plot) + + def generate_envelope(self, offset, invert, geometry=None, env_iso_type=2, follow=None, nr_passes=0): + # isolation_geometry produces an envelope that is going on the left of the geometry + # (the copper features). To leave the least amount of burrs on the features + # the tool needs to travel on the right side of the features (this is called conventional milling) + # the first pass is the one cutting all of the features, so it needs to be reversed + # the other passes overlap preceding ones and cut the left over copper. It is better for them + # to cut on the right side of the left over copper i.e on the left side of the features. + + if follow: + geom = self.isolation_geometry(offset, geometry=geometry, follow=follow) + else: + try: + geom = self.isolation_geometry(offset, geometry=geometry, iso_type=env_iso_type, passes=nr_passes) + except Exception as e: + log.debug('GerberObject.isolate().generate_envelope() --> %s' % str(e)) + return 'fail' + + if invert: + try: + pl = [] + for p in geom: + if p is not None: + if isinstance(p, Polygon): + pl.append(Polygon(p.exterior.coords[::-1], p.interiors)) + elif isinstance(p, LinearRing): + pl.append(Polygon(p.coords[::-1])) + geom = MultiPolygon(pl) + except TypeError: + if isinstance(geom, Polygon) and geom is not None: + geom = Polygon(geom.exterior.coords[::-1], geom.interiors) + elif isinstance(geom, LinearRing) and geom is not None: + geom = Polygon(geom.coords[::-1]) + else: + log.debug("GerberObject.isolate().generate_envelope() Error --> Unexpected Geometry %s" % + type(geom)) + except Exception as e: + log.debug("GerberObject.isolate().generate_envelope() Error --> %s" % str(e)) + return 'fail' + return geom + + def area_subtraction(self, geo, subtractor_geo=None): + """ + Subtracts the subtractor_geo (if present else self.solid_geometry) from the geo + + :param geo: target geometry from which to subtract + :param subtractor_geo: geometry that acts as subtractor + :return: + """ + new_geometry = [] + target_geo = geo + + if subtractor_geo: + sub_union = cascaded_union(subtractor_geo) + else: + name = self.ui.obj_combo.currentText() + subtractor_obj = self.app.collection.get_by_name(name) + sub_union = cascaded_union(subtractor_obj.solid_geometry) + + try: + for geo_elem in target_geo: + if isinstance(geo_elem, Polygon): + for ring in self.poly2rings(geo_elem): + new_geo = ring.difference(sub_union) + if new_geo and not new_geo.is_empty: + new_geometry.append(new_geo) + elif isinstance(geo_elem, MultiPolygon): + for poly in geo_elem: + for ring in self.poly2rings(poly): + new_geo = ring.difference(sub_union) + if new_geo and not new_geo.is_empty: + new_geometry.append(new_geo) + elif isinstance(geo_elem, LineString): + new_geo = geo_elem.difference(sub_union) + if new_geo: + if not new_geo.is_empty: + new_geometry.append(new_geo) + elif isinstance(geo_elem, MultiLineString): + for line_elem in geo_elem: + new_geo = line_elem.difference(sub_union) + if new_geo and not new_geo.is_empty: + new_geometry.append(new_geo) + except TypeError: + if isinstance(target_geo, Polygon): + for ring in self.poly2rings(target_geo): + new_geo = ring.difference(sub_union) + if new_geo: + if not new_geo.is_empty: + new_geometry.append(new_geo) + elif isinstance(target_geo, LineString): + new_geo = target_geo.difference(sub_union) + if new_geo and not new_geo.is_empty: + new_geometry.append(new_geo) + elif isinstance(target_geo, MultiLineString): + for line_elem in target_geo: + new_geo = line_elem.difference(sub_union) + if new_geo and not new_geo.is_empty: + new_geometry.append(new_geo) + return new_geometry + + def on_plot_cb_click(self, *args): + if self.muted_ui: + return + self.read_form_item('plot') + self.plot() + + def on_solid_cb_click(self, *args): + if self.muted_ui: + return + self.read_form_item('solid') + self.plot() + + def on_multicolored_cb_click(self, *args): + if self.muted_ui: + return + self.read_form_item('multicolored') + self.plot() + + def on_follow_cb_click(self): + if self.muted_ui: + return + self.plot() + + def on_aperture_table_visibility_change(self): + if self.ui.aperture_table_visibility_cb.isChecked(): + # add the shapes storage for marking apertures + if self.build_aperture_storage is False: + self.build_aperture_storage = True + + if self.app.is_legacy is False: + for ap_code in self.apertures: + self.mark_shapes[ap_code] = self.app.plotcanvas.new_shape_collection(layers=1) + else: + for ap_code in self.apertures: + self.mark_shapes[ap_code] = ShapeCollectionLegacy(obj=self, app=self.app, + name=self.options['name'] + str(ap_code)) + + self.ui.apertures_table.setVisible(True) + for ap in self.mark_shapes: + self.mark_shapes[ap].enabled = True + + self.ui.mark_all_cb.setVisible(True) + self.ui.mark_all_cb.setChecked(False) + self.build_ui() + else: + self.ui.apertures_table.setVisible(False) + + self.ui.mark_all_cb.setVisible(False) + + # on hide disable all mark plots + try: + for row in range(self.ui.apertures_table.rowCount()): + self.ui.apertures_table.cellWidget(row, 5).set_value(False) + self.clear_plot_apertures() + + # for ap in list(self.mark_shapes.keys()): + # # self.mark_shapes[ap].enabled = False + # del self.mark_shapes[ap] + except Exception as e: + log.debug(" GerberObject.on_aperture_visibility_changed() --> %s" % str(e)) + + def convert_units(self, units): + """ + Converts the units of the object by scaling dimensions in all geometry + and options. + + :param units: Units to which to convert the object: "IN" or "MM". + :type units: str + :return: None + :rtype: None + """ + + # units conversion to get a conversion should be done only once even if we found multiple + # units declaration inside a Gerber file (it can happen to find also the obsolete declaration) + if self.conversion_done is True: + log.debug("Gerber units conversion cancelled. Already done.") + return + + log.debug("FlatCAMObj.GerberObject.convert_units()") + + factor = Gerber.convert_units(self, units) + + # self.options['isotooldia'] = float(self.options['isotooldia']) * factor + # self.options['bboxmargin'] = float(self.options['bboxmargin']) * factor + + def plot(self, kind=None, **kwargs): + """ + + :param kind: Not used, for compatibility with the plot method for other objects + :param kwargs: Color and face_color, visible + :return: + """ + log.debug(str(inspect.stack()[1][3]) + " --> GerberObject.plot()") + + # Does all the required setup and returns False + # if the 'ptint' option is set to False. + if not FlatCAMObj.plot(self): + return + + if 'color' in kwargs: + color = kwargs['color'] + else: + color = self.outline_color + + if 'face_color' in kwargs: + face_color = kwargs['face_color'] + else: + face_color = self.fill_color + + if 'visible' not in kwargs: + visible = self.options['plot'] + else: + visible = kwargs['visible'] + + # if the Follow Geometry checkbox is checked then plot only the follow geometry + if self.ui.follow_cb.get_value(): + geometry = self.follow_geometry + else: + geometry = self.solid_geometry + + # Make sure geometry is iterable. + try: + __ = iter(geometry) + except TypeError: + geometry = [geometry] + + if self.app.is_legacy is False: + def random_color(): + r_color = np.random.rand(4) + r_color[3] = 1 + return r_color + else: + def random_color(): + while True: + r_color = np.random.rand(4) + r_color[3] = 1 + + new_color = '#' + for idx in range(len(r_color)): + new_color += '%x' % int(r_color[idx] * 255) + # do it until a valid color is generated + # a valid color has the # symbol, another 6 chars for the color and the last 2 chars for alpha + # for a total of 9 chars + if len(new_color) == 9: + break + return new_color + + try: + if self.options["solid"]: + for g in geometry: + if type(g) == Polygon or type(g) == LineString: + self.add_shape(shape=g, color=color, + face_color=random_color() if self.options['multicolored'] + else face_color, visible=visible) + elif type(g) == Point: + pass + else: + try: + for el in g: + self.add_shape(shape=el, color=color, + face_color=random_color() if self.options['multicolored'] + else face_color, visible=visible) + except TypeError: + self.add_shape(shape=g, color=color, + face_color=random_color() if self.options['multicolored'] + else face_color, visible=visible) + else: + for g in geometry: + if type(g) == Polygon or type(g) == LineString: + self.add_shape(shape=g, color=random_color() if self.options['multicolored'] else 'black', + visible=visible) + elif type(g) == Point: + pass + else: + for el in g: + self.add_shape(shape=el, color=random_color() if self.options['multicolored'] else 'black', + visible=visible) + self.shapes.redraw( + # update_colors=(self.fill_color, self.outline_color), + # indexes=self.app.plotcanvas.shape_collection.data.keys() + ) + except (ObjectDeleted, AttributeError): + self.shapes.clear(update=True) + except Exception as e: + log.debug("GerberObject.plot() --> %s" % str(e)) + + # experimental plot() when the solid_geometry is stored in the self.apertures + def plot_aperture(self, run_thread=True, **kwargs): + """ + + :param run_thread: if True run the aperture plot as a thread in a worker + :param kwargs: color and face_color + :return: + """ + + log.debug(str(inspect.stack()[1][3]) + " --> GerberObject.plot_aperture()") + + # Does all the required setup and returns False + # if the 'ptint' option is set to False. + # if not FlatCAMObj.plot(self): + # return + + # for marking apertures, line color and fill color are the same + if 'color' in kwargs: + color = kwargs['color'] + else: + color = self.app.defaults['gerber_plot_fill'] + + if 'marked_aperture' not in kwargs: + return + else: + aperture_to_plot_mark = kwargs['marked_aperture'] + if aperture_to_plot_mark is None: + return + + if 'visible' not in kwargs: + visibility = True + else: + visibility = kwargs['visible'] + + with self.app.proc_container.new(_("Plotting Apertures")): + + def job_thread(app_obj): + try: + if aperture_to_plot_mark in self.apertures: + for elem in self.apertures[aperture_to_plot_mark]['geometry']: + if 'solid' in elem: + geo = elem['solid'] + if type(geo) == Polygon or type(geo) == LineString: + self.add_mark_shape(apid=aperture_to_plot_mark, shape=geo, color=color, + face_color=color, visible=visibility) + else: + for el in geo: + self.add_mark_shape(apid=aperture_to_plot_mark, shape=el, color=color, + face_color=color, visible=visibility) + + self.mark_shapes[aperture_to_plot_mark].redraw() + + except (ObjectDeleted, AttributeError): + self.clear_plot_apertures() + except Exception as e: + log.debug("GerberObject.plot_aperture() --> %s" % str(e)) + + if run_thread: + self.app.worker_task.emit({'fcn': job_thread, 'params': [self]}) + else: + job_thread(self) + + def clear_plot_apertures(self, aperture='all'): + """ + + :param aperture: string; aperture for which to clear the mark shapes + :return: + """ + + if self.mark_shapes: + if aperture == 'all': + for apid in list(self.apertures.keys()): + try: + if self.app.is_legacy is True: + self.mark_shapes[apid].clear(update=False) + else: + self.mark_shapes[apid].clear(update=True) + except Exception as e: + log.debug("GerberObject.clear_plot_apertures() 'all' --> %s" % str(e)) + else: + try: + if self.app.is_legacy is True: + self.mark_shapes[aperture].clear(update=False) + else: + self.mark_shapes[aperture].clear(update=True) + except Exception as e: + log.debug("GerberObject.clear_plot_apertures() 'aperture' --> %s" % str(e)) + + def clear_mark_all(self): + self.ui.mark_all_cb.set_value(False) + self.marked_rows[:] = [] + + def on_mark_cb_click_table(self): + """ + Will mark aperture geometries on canvas or delete the markings depending on the checkbox state + :return: + """ + + self.ui_disconnect() + try: + cw = self.sender() + assert isinstance(cw, FCCheckBox),\ + "Expected a cellWidget but got %s" % type(cw) + cw_index = self.ui.apertures_table.indexAt(cw.pos()) + cw_row = cw_index.row() + except AttributeError: + cw_row = 0 + except TypeError: + return + + self.marked_rows[:] = [] + + try: + aperture = self.ui.apertures_table.item(cw_row, 1).text() + except AttributeError: + return + + if self.ui.apertures_table.cellWidget(cw_row, 5).isChecked(): + self.marked_rows.append(True) + # self.plot_aperture(color='#2d4606bf', marked_aperture=aperture, visible=True) + self.plot_aperture(color=self.app.defaults['global_sel_draw_color'] + 'AF', + marked_aperture=aperture, visible=True, run_thread=True) + # self.mark_shapes[aperture].redraw() + else: + self.marked_rows.append(False) + self.clear_plot_apertures(aperture=aperture) + + # make sure that the Mark All is disabled if one of the row mark's are disabled and + # if all the row mark's are enabled also enable the Mark All checkbox + cb_cnt = 0 + total_row = self.ui.apertures_table.rowCount() + for row in range(total_row): + if self.ui.apertures_table.cellWidget(row, 5).isChecked(): + cb_cnt += 1 + else: + cb_cnt -= 1 + if cb_cnt < total_row: + self.ui.mark_all_cb.setChecked(False) + else: + self.ui.mark_all_cb.setChecked(True) + self.ui_connect() + + def on_mark_all_click(self): + self.ui_disconnect() + mark_all = self.ui.mark_all_cb.isChecked() + for row in range(self.ui.apertures_table.rowCount()): + # update the mark_rows list + if mark_all: + self.marked_rows.append(True) + else: + self.marked_rows[:] = [] + + mark_cb = self.ui.apertures_table.cellWidget(row, 5) + mark_cb.setChecked(mark_all) + + if mark_all: + for aperture in self.apertures: + # self.plot_aperture(color='#2d4606bf', marked_aperture=aperture, visible=True) + self.plot_aperture(color=self.app.defaults['global_sel_draw_color'] + 'AF', + marked_aperture=aperture, visible=True) + # HACK: enable/disable the grid for a better look + self.app.ui.grid_snap_btn.trigger() + self.app.ui.grid_snap_btn.trigger() + else: + self.clear_plot_apertures() + self.marked_rows[:] = [] + + self.ui_connect() + + def export_gerber(self, whole, fract, g_zeros='L', factor=1): + """ + Creates a Gerber file content to be exported to a file. + + :param whole: how many digits in the whole part of coordinates + :param fract: how many decimals in coordinates + :param g_zeros: type of the zero suppression used: LZ or TZ; string + :param factor: factor to be applied onto the Gerber coordinates + :return: Gerber_code + """ + log.debug("GerberObject.export_gerber() --> Generating the Gerber code from the selected Gerber file") + + def tz_format(x, y, fac): + x_c = x * fac + y_c = y * fac + + x_form = "{:.{dec}f}".format(x_c, dec=fract) + y_form = "{:.{dec}f}".format(y_c, dec=fract) + + # extract whole part and decimal part + x_form = x_form.partition('.') + y_form = y_form.partition('.') + + # left padd the 'whole' part with zeros + x_whole = x_form[0].rjust(whole, '0') + y_whole = y_form[0].rjust(whole, '0') + + # restore the coordinate padded in the left with 0 and added the decimal part + # without the decinal dot + x_form = x_whole + x_form[2] + y_form = y_whole + y_form[2] + return x_form, y_form + + def lz_format(x, y, fac): + x_c = x * fac + y_c = y * fac + + x_form = "{:.{dec}f}".format(x_c, dec=fract).replace('.', '') + y_form = "{:.{dec}f}".format(y_c, dec=fract).replace('.', '') + + # pad with rear zeros + x_form.ljust(length, '0') + y_form.ljust(length, '0') + + return x_form, y_form + + # Gerber code is stored here + gerber_code = '' + + # apertures processing + try: + length = whole + fract + if '0' in self.apertures: + if 'geometry' in self.apertures['0']: + for geo_elem in self.apertures['0']['geometry']: + if 'solid' in geo_elem: + geo = geo_elem['solid'] + if not geo.is_empty: + gerber_code += 'G36*\n' + geo_coords = list(geo.exterior.coords) + # first command is a move with pen-up D02 at the beginning of the geo + if g_zeros == 'T': + x_formatted, y_formatted = tz_format(geo_coords[0][0], geo_coords[0][1], factor) + gerber_code += "X{xform}Y{yform}D02*\n".format(xform=x_formatted, + yform=y_formatted) + else: + x_formatted, y_formatted = lz_format(geo_coords[0][0], geo_coords[0][1], factor) + gerber_code += "X{xform}Y{yform}D02*\n".format(xform=x_formatted, + yform=y_formatted) + for coord in geo_coords[1:]: + if g_zeros == 'T': + x_formatted, y_formatted = tz_format(coord[0], coord[1], factor) + gerber_code += "X{xform}Y{yform}D01*\n".format(xform=x_formatted, + yform=y_formatted) + else: + x_formatted, y_formatted = lz_format(coord[0], coord[1], factor) + gerber_code += "X{xform}Y{yform}D01*\n".format(xform=x_formatted, + yform=y_formatted) + gerber_code += 'D02*\n' + gerber_code += 'G37*\n' + + clear_list = list(geo.interiors) + if clear_list: + gerber_code += '%LPC*%\n' + for clear_geo in clear_list: + gerber_code += 'G36*\n' + geo_coords = list(clear_geo.coords) + + # first command is a move with pen-up D02 at the beginning of the geo + if g_zeros == 'T': + x_formatted, y_formatted = tz_format( + geo_coords[0][0], geo_coords[0][1], factor) + gerber_code += "X{xform}Y{yform}D02*\n".format(xform=x_formatted, + yform=y_formatted) + else: + x_formatted, y_formatted = lz_format( + geo_coords[0][0], geo_coords[0][1], factor) + gerber_code += "X{xform}Y{yform}D02*\n".format(xform=x_formatted, + yform=y_formatted) + + prev_coord = geo_coords[0] + for coord in geo_coords[1:]: + if coord != prev_coord: + if g_zeros == 'T': + x_formatted, y_formatted = tz_format(coord[0], coord[1], factor) + gerber_code += "X{xform}Y{yform}D01*\n".format(xform=x_formatted, + yform=y_formatted) + else: + x_formatted, y_formatted = lz_format(coord[0], coord[1], factor) + gerber_code += "X{xform}Y{yform}D01*\n".format(xform=x_formatted, + yform=y_formatted) + prev_coord = coord + + gerber_code += 'D02*\n' + gerber_code += 'G37*\n' + gerber_code += '%LPD*%\n' + if 'clear' in geo_elem: + geo = geo_elem['clear'] + if not geo.is_empty: + gerber_code += '%LPC*%\n' + gerber_code += 'G36*\n' + geo_coords = list(geo.exterior.coords) + # first command is a move with pen-up D02 at the beginning of the geo + if g_zeros == 'T': + x_formatted, y_formatted = tz_format(geo_coords[0][0], geo_coords[0][1], factor) + gerber_code += "X{xform}Y{yform}D02*\n".format(xform=x_formatted, + yform=y_formatted) + else: + x_formatted, y_formatted = lz_format(geo_coords[0][0], geo_coords[0][1], factor) + gerber_code += "X{xform}Y{yform}D02*\n".format(xform=x_formatted, + yform=y_formatted) + + prev_coord = geo_coords[0] + for coord in geo_coords[1:]: + if coord != prev_coord: + if g_zeros == 'T': + x_formatted, y_formatted = tz_format(coord[0], coord[1], factor) + gerber_code += "X{xform}Y{yform}D01*\n".format(xform=x_formatted, + yform=y_formatted) + else: + x_formatted, y_formatted = lz_format(coord[0], coord[1], factor) + gerber_code += "X{xform}Y{yform}D01*\n".format(xform=x_formatted, + yform=y_formatted) + prev_coord = coord + + gerber_code += 'D02*\n' + gerber_code += 'G37*\n' + gerber_code += '%LPD*%\n' + except Exception as e: + log.debug("FlatCAMObj.GerberObject.export_gerber() '0' aperture --> %s" % str(e)) + + for apid in self.apertures: + if apid == '0': + continue + else: + gerber_code += 'D%s*\n' % str(apid) + if 'geometry' in self.apertures[apid]: + for geo_elem in self.apertures[apid]['geometry']: + try: + if 'follow' in geo_elem: + geo = geo_elem['follow'] + if not geo.is_empty: + if isinstance(geo, Point): + if g_zeros == 'T': + x_formatted, y_formatted = tz_format(geo.x, geo.y, factor) + gerber_code += "X{xform}Y{yform}D03*\n".format(xform=x_formatted, + yform=y_formatted) + else: + x_formatted, y_formatted = lz_format(geo.x, geo.y, factor) + gerber_code += "X{xform}Y{yform}D03*\n".format(xform=x_formatted, + yform=y_formatted) + else: + geo_coords = list(geo.coords) + # first command is a move with pen-up D02 at the beginning of the geo + if g_zeros == 'T': + x_formatted, y_formatted = tz_format( + geo_coords[0][0], geo_coords[0][1], factor) + gerber_code += "X{xform}Y{yform}D02*\n".format(xform=x_formatted, + yform=y_formatted) + else: + x_formatted, y_formatted = lz_format( + geo_coords[0][0], geo_coords[0][1], factor) + gerber_code += "X{xform}Y{yform}D02*\n".format(xform=x_formatted, + yform=y_formatted) + + prev_coord = geo_coords[0] + for coord in geo_coords[1:]: + if coord != prev_coord: + if g_zeros == 'T': + x_formatted, y_formatted = tz_format(coord[0], coord[1], factor) + gerber_code += "X{xform}Y{yform}D01*\n".format(xform=x_formatted, + yform=y_formatted) + else: + x_formatted, y_formatted = lz_format(coord[0], coord[1], factor) + gerber_code += "X{xform}Y{yform}D01*\n".format(xform=x_formatted, + yform=y_formatted) + prev_coord = coord + + # gerber_code += "D02*\n" + except Exception as e: + log.debug("FlatCAMObj.GerberObject.export_gerber() 'follow' --> %s" % str(e)) + + try: + if 'clear' in geo_elem: + gerber_code += '%LPC*%\n' + + geo = geo_elem['clear'] + if not geo.is_empty: + if isinstance(geo, Point): + if g_zeros == 'T': + x_formatted, y_formatted = tz_format(geo.x, geo.y, factor) + gerber_code += "X{xform}Y{yform}D03*\n".format(xform=x_formatted, + yform=y_formatted) + else: + x_formatted, y_formatted = lz_format(geo.x, geo.y, factor) + gerber_code += "X{xform}Y{yform}D03*\n".format(xform=x_formatted, + yform=y_formatted) + elif isinstance(geo, Polygon): + geo_coords = list(geo.exterior.coords) + # first command is a move with pen-up D02 at the beginning of the geo + if g_zeros == 'T': + x_formatted, y_formatted = tz_format( + geo_coords[0][0], geo_coords[0][1], factor) + gerber_code += "X{xform}Y{yform}D02*\n".format(xform=x_formatted, + yform=y_formatted) + else: + x_formatted, y_formatted = lz_format( + geo_coords[0][0], geo_coords[0][1], factor) + gerber_code += "X{xform}Y{yform}D02*\n".format(xform=x_formatted, + yform=y_formatted) + + prev_coord = geo_coords[0] + for coord in geo_coords[1:]: + if coord != prev_coord: + if g_zeros == 'T': + x_formatted, y_formatted = tz_format(coord[0], coord[1], factor) + gerber_code += "X{xform}Y{yform}D01*\n".format(xform=x_formatted, + yform=y_formatted) + else: + x_formatted, y_formatted = lz_format(coord[0], coord[1], factor) + gerber_code += "X{xform}Y{yform}D01*\n".format(xform=x_formatted, + yform=y_formatted) + + prev_coord = coord + + for geo_int in geo.interiors: + geo_coords = list(geo_int.coords) + # first command is a move with pen-up D02 at the beginning of the geo + if g_zeros == 'T': + x_formatted, y_formatted = tz_format( + geo_coords[0][0], geo_coords[0][1], factor) + gerber_code += "X{xform}Y{yform}D02*\n".format(xform=x_formatted, + yform=y_formatted) + else: + x_formatted, y_formatted = lz_format( + geo_coords[0][0], geo_coords[0][1], factor) + gerber_code += "X{xform}Y{yform}D02*\n".format(xform=x_formatted, + yform=y_formatted) + + prev_coord = geo_coords[0] + for coord in geo_coords[1:]: + if coord != prev_coord: + if g_zeros == 'T': + x_formatted, y_formatted = tz_format(coord[0], coord[1], factor) + gerber_code += "X{xform}Y{yform}D01*\n".format( + xform=x_formatted, + yform=y_formatted) + else: + x_formatted, y_formatted = lz_format(coord[0], coord[1], factor) + gerber_code += "X{xform}Y{yform}D01*\n".format( + xform=x_formatted, + yform=y_formatted) + + prev_coord = coord + else: + geo_coords = list(geo.coords) + # first command is a move with pen-up D02 at the beginning of the geo + if g_zeros == 'T': + x_formatted, y_formatted = tz_format( + geo_coords[0][0], geo_coords[0][1], factor) + gerber_code += "X{xform}Y{yform}D02*\n".format(xform=x_formatted, + yform=y_formatted) + else: + x_formatted, y_formatted = lz_format( + geo_coords[0][0], geo_coords[0][1], factor) + gerber_code += "X{xform}Y{yform}D02*\n".format(xform=x_formatted, + yform=y_formatted) + + prev_coord = geo_coords[0] + for coord in geo_coords[1:]: + if coord != prev_coord: + if g_zeros == 'T': + x_formatted, y_formatted = tz_format(coord[0], coord[1], factor) + gerber_code += "X{xform}Y{yform}D01*\n".format(xform=x_formatted, + yform=y_formatted) + else: + x_formatted, y_formatted = lz_format(coord[0], coord[1], factor) + gerber_code += "X{xform}Y{yform}D01*\n".format(xform=x_formatted, + yform=y_formatted) + + prev_coord = coord + # gerber_code += "D02*\n" + gerber_code += '%LPD*%\n' + except Exception as e: + log.debug("FlatCAMObj.GerberObject.export_gerber() 'clear' --> %s" % str(e)) + + if not self.apertures: + log.debug("FlatCAMObj.GerberObject.export_gerber() --> Gerber Object is empty: no apertures.") + return 'fail' + + return gerber_code + + def mirror(self, axis, point): + Gerber.mirror(self, axis=axis, point=point) + self.replotApertures.emit() + + def offset(self, vect): + Gerber.offset(self, vect=vect) + self.replotApertures.emit() + + def rotate(self, angle, point): + Gerber.rotate(self, angle=angle, point=point) + self.replotApertures.emit() + + def scale(self, xfactor, yfactor=None, point=None): + Gerber.scale(self, xfactor=xfactor, yfactor=yfactor, point=point) + self.replotApertures.emit() + + def skew(self, angle_x, angle_y, point): + Gerber.skew(self, angle_x=angle_x, angle_y=angle_y, point=point) + self.replotApertures.emit() + + def buffer(self, distance, join, factor=None): + Gerber.buffer(self, distance=distance, join=join, factor=factor) + self.replotApertures.emit() + + def serialize(self): + return { + "options": self.options, + "kind": self.kind + } diff --git a/flatcamObjects/FlatCAMObj.py b/flatcamObjects/FlatCAMObj.py new file mode 100644 index 00000000..f86fbfc9 --- /dev/null +++ b/flatcamObjects/FlatCAMObj.py @@ -0,0 +1,505 @@ +# ########################################################## +# FlatCAM: 2D Post-processing for Manufacturing # +# http://flatcam.org # +# Author: Juan Pablo Caram (c) # +# Date: 2/5/2014 # +# MIT Licence # +# ########################################################## + +# ########################################################## +# File modified by: Marius Stanciu # +# ########################################################## + +import inspect # TODO: For debugging only. + +from flatcamGUI.ObjectUI import * + +from FlatCAMCommon import LoudDict +from flatcamGUI.PlotCanvasLegacy import ShapeCollectionLegacy + +import sys + +import gettext +import FlatCAMTranslation as fcTranslate +import builtins + +fcTranslate.apply_language('strings') +if '_' not in builtins.__dict__: + _ = gettext.gettext + + +# Interrupts plotting process if FlatCAMObj has been deleted +class ObjectDeleted(Exception): + pass + + +class ValidationError(Exception): + def __init__(self, message, errors): + super().__init__(message) + + self.errors = errors + + +class FlatCAMObj(QtCore.QObject): + """ + Base type of objects handled in FlatCAM. These become interactive + in the GUI, can be plotted, and their options can be modified + by the user in their respective forms. + """ + + # Instance of the application to which these are related. + # The app should set this value. + app = None + + # signal to plot a single object + plot_single_object = QtCore.pyqtSignal() + + def __init__(self, name): + """ + Constructor. + + :param name: Name of the object given by the user. + :return: FlatCAMObj + """ + + QtCore.QObject.__init__(self) + + # View + self.ui = None + + self.options = LoudDict(name=name) + self.options.set_change_callback(self.on_options_change) + + self.form_fields = {} + + # store here the default data for Geometry Data + self.default_data = {} + + # 2D mode + # Axes must exist and be attached to canvas. + self.axes = None + self.kind = None # Override with proper name + + if self.app.is_legacy is False: + self.shapes = self.app.plotcanvas.new_shape_group() + # self.shapes = ShapeCollection(parent=self.app.plotcanvas.view.scene, pool=self.app.pool, layers=2) + else: + self.shapes = ShapeCollectionLegacy(obj=self, app=self.app, name=name) + + self.mark_shapes = {} + + self.item = None # Link with project view item + + self.muted_ui = False + self.deleted = False + + try: + self._drawing_tolerance = float(self.app.defaults["global_tolerance"]) if \ + self.app.defaults["global_tolerance"] else 0.01 + except ValueError: + self._drawing_tolerance = 0.01 + + self.isHovering = False + self.notHovering = True + + # Flag to show if a selection shape is drawn + self.selection_shape_drawn = False + + # self.units = 'IN' + self.units = self.app.defaults['units'] + + self.plot_single_object.connect(self.single_object_plot) + + def __del__(self): + pass + + def __str__(self): + return "".format(self.kind, self.options["name"]) + + def from_dict(self, d): + """ + This supersedes ``from_dict`` in derived classes. Derived classes + must inherit from FlatCAMObj first, then from derivatives of Geometry. + + ``self.options`` is only updated, not overwritten. This ensures that + options set by the app do not vanish when reading the objects + from a project file. + + :param d: Dictionary with attributes to set. + :return: None + """ + + for attr in self.ser_attrs: + + if attr == 'options': + self.options.update(d[attr]) + else: + try: + setattr(self, attr, d[attr]) + except KeyError: + log.debug("FlatCAMObj.from_dict() --> KeyError: %s. " + "Means that we are loading an old project that don't" + "have all attributes in the latest FlatCAM." % str(attr)) + pass + + def on_options_change(self, key): + # Update form on programmatically options change + self.set_form_item(key) + + # Set object visibility + if key == 'plot': + self.visible = self.options['plot'] + + self.optionChanged.emit(key) + + def set_ui(self, ui): + self.ui = ui + + self.form_fields = {"name": self.ui.name_entry} + + assert isinstance(self.ui, ObjectUI) + self.ui.name_entry.returnPressed.connect(self.on_name_activate) + + try: + # it will raise an exception for those FlatCAM objects that do not build UI with the common elements + self.ui.offset_button.clicked.connect(self.on_offset_button_click) + except (TypeError, AttributeError): + pass + + try: + self.ui.scale_button.clicked.connect(self.on_scale_button_click) + except (TypeError, AttributeError): + pass + + try: + self.ui.offsetvector_entry.returnPressed.connect(self.on_offset_button_click) + except (TypeError, AttributeError): + pass + + # Creates problems on focusOut + try: + self.ui.scale_entry.returnPressed.connect(self.on_scale_button_click) + except (TypeError, AttributeError): + pass + + # self.ui.skew_button.clicked.connect(self.on_skew_button_click) + + def build_ui(self): + """ + Sets up the UI/form for this object. Show the UI + in the App. + + :return: None + :rtype: None + """ + + self.muted_ui = True + log.debug(str(inspect.stack()[1][3]) + "--> FlatCAMObj.build_ui()") + + try: + # HACK: disconnect the scale entry signal since on focus out event will trigger an undesired scale() + # it seems that the takewidget() does generate a focus out event for the QDoubleSpinbox ... + # and reconnect after the takeWidget() is done + # self.ui.scale_entry.returnPressed.disconnect(self.on_scale_button_click) + self.app.ui.selected_scroll_area.takeWidget() + # self.ui.scale_entry.returnPressed.connect(self.on_scale_button_click) + except Exception as e: + self.app.log.debug("FlatCAMObj.build_ui() --> Nothing to remove: %s" % str(e)) + + self.app.ui.selected_scroll_area.setWidget(self.ui) + # self.ui.setMinimumWidth(100) + # self.ui.setMaximumWidth(self.app.ui.selected_tab.sizeHint().width()) + + self.muted_ui = False + + def on_name_activate(self, silent=None): + old_name = copy(self.options["name"]) + new_name = self.ui.name_entry.get_value() + + if new_name != old_name: + # update the SHELL auto-completer model data + try: + self.app.myKeywords.remove(old_name) + self.app.myKeywords.append(new_name) + self.app.shell._edit.set_model_data(self.app.myKeywords) + self.app.ui.code_editor.set_model_data(self.app.myKeywords) + except Exception: + log.debug("on_name_activate() --> Could not remove the old object name from auto-completer model list") + + self.options["name"] = self.ui.name_entry.get_value() + self.default_data["name"] = self.ui.name_entry.get_value() + self.app.collection.update_view() + if silent: + self.app.inform.emit('[success] %s: %s %s: %s' % ( + _("Name changed from"), str(old_name), _("to"), str(new_name) + ) + ) + + def on_offset_button_click(self): + self.app.report_usage("obj_on_offset_button") + + self.read_form() + vector_val = self.ui.offsetvector_entry.get_value() + + def worker_task(): + with self.app.proc_container.new(_("Offsetting...")): + self.offset(vector_val) + self.app.proc_container.update_view_text('') + with self.app.proc_container.new('%s...' % _("Plotting")): + self.plot() + self.app.object_changed.emit(self) + + self.app.worker_task.emit({'fcn': worker_task, 'params': []}) + + def on_scale_button_click(self): + self.read_form() + try: + factor = float(eval(self.ui.scale_entry.get_value())) + except Exception as e: + self.app.inform.emit('[ERROR_NOTCL] %s' % _("Scaling could not be executed.")) + log.debug("FlatCAMObj.on_scale_button_click() -- %s" % str(e)) + return + + if type(factor) != float: + self.app.inform.emit('[ERROR_NOTCL] %s' % _("Scaling could not be executed.")) + + # if factor is 1.0 do nothing, there is no point in scaling with a factor of 1.0 + if factor == 1.0: + self.app.inform.emit('[success] %s' % _("Scale done.")) + return + + log.debug("FlatCAMObj.on_scale_button_click()") + + def worker_task(): + with self.app.proc_container.new(_("Scaling...")): + self.scale(factor) + self.app.inform.emit('[success] %s' % _("Scale done.")) + + self.app.proc_container.update_view_text('') + with self.app.proc_container.new('%s...' % _("Plotting")): + self.plot() + self.app.object_changed.emit(self) + + self.app.worker_task.emit({'fcn': worker_task, 'params': []}) + + def on_skew_button_click(self): + self.app.report_usage("obj_on_skew_button") + self.read_form() + x_angle = self.ui.xangle_entry.get_value() + y_angle = self.ui.yangle_entry.get_value() + + def worker_task(): + with self.app.proc_container.new(_("Skewing...")): + self.skew(x_angle, y_angle) + self.app.proc_container.update_view_text('') + with self.app.proc_container.new('%s...' % _("Plotting")): + self.plot() + self.app.object_changed.emit(self) + + self.app.worker_task.emit({'fcn': worker_task, 'params': []}) + + def to_form(self): + """ + Copies options to the UI form. + + :return: None + """ + log.debug(str(inspect.stack()[1][3]) + " --> FlatCAMObj.to_form()") + for option in self.options: + try: + self.set_form_item(option) + except Exception: + self.app.log.warning("Unexpected error:", sys.exc_info()) + + def read_form(self): + """ + Reads form into ``self.options``. + + :return: None + :rtype: None + """ + log.debug(str(inspect.stack()[1][3]) + "--> FlatCAMObj.read_form()") + for option in self.options: + try: + self.read_form_item(option) + except Exception: + self.app.log.warning("Unexpected error:", sys.exc_info()) + + def set_form_item(self, option): + """ + Copies the specified option to the UI form. + + :param option: Name of the option (Key in ``self.options``). + :type option: str + :return: None + """ + + try: + self.form_fields[option].set_value(self.options[option]) + except KeyError: + # self.app.log.warn("Tried to set an option or field that does not exist: %s" % option) + pass + + def read_form_item(self, option): + """ + Reads the specified option from the UI form into ``self.options``. + + :param option: Name of the option. + :type option: str + :return: None + """ + try: + self.options[option] = self.form_fields[option].get_value() + except KeyError: + pass + # self.app.log.warning("Failed to read option from field: %s" % option) + + def plot(self, kind=None): + """ + Plot this object (Extend this method to implement the actual plotting). + Call this in descendants before doing the plotting. + + :param kind: Used by only some of the FlatCAM objects + :return: Whether to continue plotting or not depending on the "plot" option. Boolean + """ + log.debug(str(inspect.stack()[1][3]) + " --> FlatCAMObj.plot()") + + if self.deleted: + return False + + self.clear() + return True + + def single_object_plot(self): + def plot_task(): + with self.app.proc_container.new('%s...' % _("Plotting")): + self.plot() + self.app.object_changed.emit(self) + + self.app.worker_task.emit({'fcn': plot_task, 'params': []}) + + def serialize(self): + """ + Returns a representation of the object as a dictionary so + it can be later exported as JSON. Override this method. + + :return: Dictionary representing the object + :rtype: dict + """ + return + + def deserialize(self, obj_dict): + """ + Re-builds an object from its serialized version. + + :param obj_dict: Dictionary representing a FlatCAMObj + :type obj_dict: dict + :return: None + """ + return + + def add_shape(self, **kwargs): + if self.deleted: + raise ObjectDeleted() + else: + key = self.shapes.add(tolerance=self.drawing_tolerance, **kwargs) + return key + + def add_mark_shape(self, apid, **kwargs): + if self.deleted: + raise ObjectDeleted() + else: + key = self.mark_shapes[apid].add(tolerance=self.drawing_tolerance, layer=0, **kwargs) + return key + + def update_filters(self, last_ext, filter_string): + """ + Will modify the filter string that is used when saving a file (a list of file extensions) to have the last + used file extension as the first one in the special string + + :param last_ext: The file extension that was last used to save a file + :param filter_string: A key in self.app.defaults that holds a string with the filter from QFileDialog + used when saving a file + :return: None + """ + + filters = copy(self.app.defaults[filter_string]) + filter_list = filters.split(';;') + filter_list_enum_1 = enumerate(filter_list) + + # search for the last element in the filters which should always be "All Files (*.*)" + last_elem = '' + for elem in list(filter_list_enum_1): + if '(*.*)' in elem[1]: + last_elem = filter_list.pop(elem[0]) + + filter_list_enum = enumerate(filter_list) + for elem in list(filter_list_enum): + if '.' + last_ext in elem[1]: + used_ext = filter_list.pop(elem[0]) + + # sort the extensions back + filter_list.sort(key=lambda x: x.rpartition('.')[2]) + + # add as a first element the last used extension + filter_list.insert(0, used_ext) + # add back the element that should always be the last (All Files) + filter_list.append(last_elem) + + self.app.defaults[filter_string] = ';;'.join(filter_list) + return + + @staticmethod + def poly2rings(poly): + return [poly.exterior] + [interior for interior in poly.interiors] + + @property + def visible(self): + return self.shapes.visible + + @visible.setter + def visible(self, value, threaded=True): + log.debug("FlatCAMObj.visible()") + + def worker_task(app_obj): + self.shapes.visible = value + + if self.app.is_legacy is False: + # Not all object types has annotations + try: + self.annotation.visible = value + except Exception: + pass + + if threaded is False: + worker_task(app_obj=self.app) + else: + self.app.worker_task.emit({'fcn': worker_task, 'params': [self]}) + + @property + def drawing_tolerance(self): + self.units = self.app.defaults['units'].upper() + tol = self._drawing_tolerance if self.units == 'MM' or not self.units else self._drawing_tolerance / 25.4 + return tol + + @drawing_tolerance.setter + def drawing_tolerance(self, value): + self.units = self.app.defaults['units'].upper() + self._drawing_tolerance = value if self.units == 'MM' or not self.units else value / 25.4 + + def clear(self, update=False): + self.shapes.clear(update) + + # Not all object types has annotations + try: + self.annotation.clear(update) + except AttributeError: + pass + + def delete(self): + # Free resources + del self.ui + del self.options + + # Set flag + self.deleted = True \ No newline at end of file diff --git a/flatcamObjects/FlatCAMScript.py b/flatcamObjects/FlatCAMScript.py new file mode 100644 index 00000000..c81885dc --- /dev/null +++ b/flatcamObjects/FlatCAMScript.py @@ -0,0 +1,231 @@ +# ########################################################## +# FlatCAM: 2D Post-processing for Manufacturing # +# http://flatcam.org # +# Author: Juan Pablo Caram (c) # +# Date: 2/5/2014 # +# MIT Licence # +# ########################################################## + +# ########################################################## +# File modified by: Marius Stanciu # +# ########################################################## + +from flatcamEditors.FlatCAMTextEditor import TextEditor +from flatcamObjects.FlatCAMObj import * +from flatcamGUI.ObjectUI import * + +import tkinter as tk +import sys +from copy import deepcopy + +import gettext +import FlatCAMTranslation as fcTranslate +import builtins + +fcTranslate.apply_language('strings') +if '_' not in builtins.__dict__: + _ = gettext.gettext + + +class ScriptObject(FlatCAMObj): + """ + Represents a TCL script object. + """ + optionChanged = QtCore.pyqtSignal(str) + ui_type = ScriptObjectUI + + def __init__(self, name): + self.decimals = self.app.decimals + + log.debug("Creating a ScriptObject object...") + FlatCAMObj.__init__(self, name) + + self.kind = "script" + + self.options.update({ + "plot": True, + "type": 'Script', + "source_file": '', + }) + + self.units = '' + + self.ser_attrs = ['options', 'kind', 'source_file'] + self.source_file = '' + self.script_code = '' + + self.units_found = self.app.defaults['units'] + + # self.script_editor_tab = TextEditor(app=self.app, plain_text=True) + self.script_editor_tab = TextEditor(app=self.app, plain_text=True) + + def set_ui(self, ui): + """ + Sets the Object UI in Selected Tab for the FlatCAM Script type of object. + :param ui: + :return: + """ + FlatCAMObj.set_ui(self, ui) + log.debug("ScriptObject.set_ui()") + + assert isinstance(self.ui, ScriptObjectUI), \ + "Expected a ScriptObjectUI, got %s" % type(self.ui) + + self.units = self.app.defaults['units'].upper() + self.units_found = self.app.defaults['units'] + + # Fill form fields only on object create + self.to_form() + + # Show/Hide Advanced Options + if self.app.defaults["global_app_level"] == 'b': + self.ui.level.setText(_( + 'Basic' + )) + else: + self.ui.level.setText(_( + 'Advanced' + )) + + # tab_here = False + # # try to not add too many times a tab that it is already installed + # for idx in range(self.app.ui.plot_tab_area.count()): + # if self.app.ui.plot_tab_area.widget(idx).objectName() == self.options['name']: + # tab_here = True + # break + # + # # add the tab if it is not already added + # if tab_here is False: + # self.app.ui.plot_tab_area.addTab(self.script_editor_tab, '%s' % _("Script Editor")) + # self.script_editor_tab.setObjectName(self.options['name']) + + self.app.ui.plot_tab_area.addTab(self.script_editor_tab, '%s' % _("Script Editor")) + self.script_editor_tab.setObjectName(self.options['name']) + + # first clear previous text in text editor (if any) + # self.script_editor_tab.code_editor.clear() + # self.script_editor_tab.code_editor.setReadOnly(False) + + self.ui.autocomplete_cb.set_value(self.app.defaults['script_autocompleter']) + self.on_autocomplete_changed(state=self.app.defaults['script_autocompleter']) + + self.script_editor_tab.buttonRun.show() + + # Switch plot_area to CNCJob tab + self.app.ui.plot_tab_area.setCurrentWidget(self.script_editor_tab) + + flt = "FlatCAM Scripts (*.FlatScript);;All Files (*.*)" + self.script_editor_tab.buttonOpen.clicked.disconnect() + self.script_editor_tab.buttonOpen.clicked.connect(lambda: self.script_editor_tab.handleOpen(filt=flt)) + self.script_editor_tab.buttonSave.clicked.disconnect() + self.script_editor_tab.buttonSave.clicked.connect(lambda: self.script_editor_tab.handleSaveGCode(filt=flt)) + + self.script_editor_tab.buttonRun.clicked.connect(self.handle_run_code) + self.script_editor_tab.handleTextChanged() + + self.ui.autocomplete_cb.stateChanged.connect(self.on_autocomplete_changed) + + self.ser_attrs = ['options', 'kind', 'source_file'] + + # ---------------------------------------------------- # + # ----------- LOAD THE TEXT SOURCE FILE -------------- # + # ---------------------------------------------------- # + self.app.proc_container.view.set_busy(_("Loading...")) + self.script_editor_tab.t_frame.hide() + + try: + self.script_editor_tab.code_editor.setPlainText(self.source_file) + # for line in self.source_file.splitlines(): + # QtWidgets.QApplication.processEvents() + # self.script_editor_tab.code_editor.append(line) + except Exception as e: + log.debug("ScriptObject.set_ui() --> %s" % str(e)) + + self.script_editor_tab.code_editor.moveCursor(QtGui.QTextCursor.End) + self.script_editor_tab.t_frame.show() + + self.app.proc_container.view.set_idle() + self.build_ui() + + def build_ui(self): + FlatCAMObj.build_ui(self) + + def handle_run_code(self): + # trying to run a Tcl command without having the Shell open will create some warnings because the Tcl Shell + # tries to print on a hidden widget, therefore show the dock if hidden + if self.app.ui.shell_dock.isHidden(): + self.app.ui.shell_dock.show() + + self.script_code = deepcopy(self.script_editor_tab.code_editor.toPlainText()) + + old_line = '' + for tcl_command_line in self.script_code.splitlines(): + # do not process lines starting with '#' = comment and empty lines + if not tcl_command_line.startswith('#') and tcl_command_line != '': + # id FlatCAM is run in Windows then replace all the slashes with + # the UNIX style slash that TCL understands + if sys.platform == 'win32': + if "open" in tcl_command_line: + tcl_command_line = tcl_command_line.replace('\\', '/') + + if old_line != '': + new_command = old_line + tcl_command_line + '\n' + else: + new_command = tcl_command_line + + # execute the actual Tcl command + try: + self.app.shell.open_processing() # Disables input box. + + result = self.app.tcl.eval(str(new_command)) + if result != 'None': + self.app.shell.append_output(result + '\n') + + old_line = '' + except tk.TclError: + old_line = old_line + tcl_command_line + '\n' + except Exception as e: + log.debug("ScriptObject.handleRunCode() --> %s" % str(e)) + + if old_line != '': + # it means that the script finished with an error + result = self.app.tcl.eval("set errorInfo") + log.error("Exec command Exception: %s" % (result + '\n')) + self.app.shell.append_error('ERROR: ' + result + '\n') + + self.app.shell.close_processing() + + def on_autocomplete_changed(self, state): + if state: + self.script_editor_tab.code_editor.completer_enable = True + else: + self.script_editor_tab.code_editor.completer_enable = False + + def to_dict(self): + """ + Returns a representation of the object as a dictionary. + Attributes to include are listed in ``self.ser_attrs``. + + :return: A dictionary-encoded copy of the object. + :rtype: dict + """ + d = {} + for attr in self.ser_attrs: + d[attr] = getattr(self, attr) + return d + + def from_dict(self, d): + """ + Sets object's attributes from a dictionary. + Attributes to include are listed in ``self.ser_attrs``. + This method will look only for only and all the + attributes in ``self.ser_attrs``. They must all + be present. Use only for deserializing saved + objects. + + :param d: Dictionary of attributes to set in the object. + :type d: dict + :return: None + """ + for attr in self.ser_attrs: + setattr(self, attr, d[attr]) diff --git a/flatcamObjects/__init__.py b/flatcamObjects/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/flatcamParsers/ParseExcellon.py b/flatcamParsers/ParseExcellon.py index 406bbb16..ab52e44a 100644 --- a/flatcamParsers/ParseExcellon.py +++ b/flatcamParsers/ParseExcellon.py @@ -7,7 +7,6 @@ # ########################################################## ## from camlib import Geometry -import FlatCAMApp import shapely.affinity as affinity from shapely.geometry import Point, LineString @@ -19,6 +18,7 @@ import traceback from copy import deepcopy import FlatCAMTranslation as fcTranslate +from FlatCAMCommon import GracefulException as grace import gettext import builtins @@ -86,6 +86,7 @@ class Excellon(Geometry): :return: Excellon object. :rtype: Excellon """ + self.decimals = self.app.decimals if geo_steps_per_circle is None: @@ -241,12 +242,12 @@ class Excellon(Geometry): def parse_file(self, filename=None, file_obj=None): """ - Reads the specified file as array of lines as - passes it to ``parse_lines()``. + Reads the specified file as array of lines as passes it to ``parse_lines()``. - :param filename: The file to be read and parsed. - :type filename: str - :return: None + :param filename: The file to be read and parsed. + :param file_obj: + :type filename: str + :return: None """ if file_obj: estr = file_obj @@ -298,7 +299,7 @@ class Excellon(Geometry): for eline in elines: if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace line_num += 1 # log.debug("%3d %s" % (line_num, str(eline))) @@ -526,7 +527,7 @@ class Excellon(Geometry): slot_dia = 0.05 try: slot_dia = float(self.tools[current_tool]['C']) - except Exception as e: + except Exception: pass log.debug( 'Milling/Drilling slot with tool %s, diam=%f' % ( @@ -596,7 +597,7 @@ class Excellon(Geometry): slot_dia = 0.05 try: slot_dia = float(self.tools[current_tool]['C']) - except Exception as e: + except Exception: pass log.debug( 'Milling/Drilling slot with tool %s, diam=%f' % ( @@ -893,9 +894,8 @@ class Excellon(Geometry): log.info("Zeros: %s, Units %s." % (self.zeros, self.units)) except Exception: log.error("Excellon PARSING FAILED. Line %d: %s" % (line_num, eline)) - msg = '[ERROR_NOTCL] %s' % \ - _("An internal error has ocurred. See shell.\n") - msg += ('{e_code} {tx} {l_nr}: {line}\n').format( + msg = '[ERROR_NOTCL] %s' % _("An internal error has occurred. See shell.\n") + msg += '{e_code} {tx} {l_nr}: {line}\n'.format( e_code='[ERROR]', tx=_("Excellon Parser error.\nParsing Failed. Line"), l_nr=line_num, @@ -1010,13 +1010,13 @@ class Excellon(Geometry): "Excellon geometry creation failed due of ERROR: %s" % str(e)) return "fail" - def bounds(self): + def bounds(self, flatten=None): """ Returns coordinates of rectangular bounds of Excellon geometry: (xmin, ymin, xmax, ymax). + + :param flatten: No used """ - # fixed issue of getting bounds only for one level lists of objects - # now it can get bounds for nested lists of objects log.debug("flatcamParsers.ParseExcellon.Excellon.bounds()") @@ -1056,11 +1056,11 @@ class Excellon(Geometry): maxy_list = [] for tool in self.tools: - minx, miny, maxx, maxy = bounds_rec(self.tools[tool]['solid_geometry']) - minx_list.append(minx) - miny_list.append(miny) - maxx_list.append(maxx) - maxy_list.append(maxy) + eminx, eminy, emaxx, emaxy = bounds_rec(self.tools[tool]['solid_geometry']) + minx_list.append(eminx) + miny_list.append(eminy) + maxx_list.append(emaxx) + maxy_list.append(emaxy) return min(minx_list), min(miny_list), max(maxx_list), max(maxy_list) @@ -1075,8 +1075,9 @@ class Excellon(Geometry): Kind of convolute way to make the conversion and it is based on the assumption that the Excellon file will have detected the units before the tools are parsed and stored in self.tools - :param units: - :type str: IN or MM + + :param units: 'IN' or 'MM'. String + :return: """ @@ -1109,12 +1110,13 @@ class Excellon(Geometry): Scales geometry on the XY plane in the object by a given factor. Tool sizes, feedrates an Z-plane dimensions are untouched. - :param xfactor: Number by which to scale the object. - :type xfactor: float - :param yfactor: Number by which to scale the object. - :type yfactor: float - :return: None - :rtype: NOne + :param xfactor: Number by which to scale the object. + :type xfactor: float + :param yfactor: Number by which to scale the object. + :type yfactor: float + :param point: Origin point for scale + :return: None + :rtype: None """ log.debug("flatcamParsers.ParseExcellon.Excellon.scale()") @@ -1145,8 +1147,7 @@ class Excellon(Geometry): # variables to display the percentage of work done self.geo_len = 0 try: - for g in self.drills: - self.geo_len += 1 + self.geo_len = len(self.drills) except TypeError: self.geo_len = 1 self.old_disp_number = 0 @@ -1190,12 +1191,12 @@ class Excellon(Geometry): return def offset_geom(obj): - if type(obj) is list: + try: new_obj = [] - for g in obj: - new_obj.append(offset_geom(g)) + for geo in obj: + new_obj.append(offset_geom(geo)) return new_obj - else: + except TypeError: try: return affinity.translate(obj, xoff=dx, yoff=dy) except AttributeError: @@ -1204,8 +1205,7 @@ class Excellon(Geometry): # variables to display the percentage of work done self.geo_len = 0 try: - for g in self.drills: - self.geo_len += 1 + self.geo_len = len(self.drills) except TypeError: self.geo_len = 1 self.old_disp_number = 0 @@ -1237,11 +1237,11 @@ class Excellon(Geometry): def mirror(self, axis, point): """ - :param axis: "X" or "Y" indicates around which axis to mirror. - :type axis: str - :param point: [x, y] point belonging to the mirror axis. - :type point: list - :return: None + :param axis: "X" or "Y" indicates around which axis to mirror. + :type axis: str + :param point: [x, y] point belonging to the mirror axis. + :type point: list + :return: None """ log.debug("flatcamParsers.ParseExcellon.Excellon.mirror()") @@ -1249,12 +1249,12 @@ class Excellon(Geometry): xscale, yscale = {"X": (1.0, -1.0), "Y": (-1.0, 1.0)}[axis] def mirror_geom(obj): - if type(obj) is list: + try: new_obj = [] - for g in obj: - new_obj.append(mirror_geom(g)) + for geo in obj: + new_obj.append(mirror_geom(geo)) return new_obj - else: + except TypeError: try: return affinity.scale(obj, xscale, yscale, origin=(px, py)) except AttributeError: @@ -1265,8 +1265,7 @@ class Excellon(Geometry): # variables to display the percentage of work done self.geo_len = 0 try: - for g in self.drills: - self.geo_len += 1 + self.geo_len = len(self.drills) except TypeError: self.geo_len = 1 self.old_disp_number = 0 @@ -1300,12 +1299,12 @@ class Excellon(Geometry): Shear/Skew the geometries of an object by angles along x and y dimensions. Tool sizes, feedrates an Z-plane dimensions are untouched. - Parameters - ---------- - xs, ys : float, float + :param angle_x: + :param angle_y: The shear angle(s) for the x and y axes respectively. These can be specified in either degrees (default) or radians by setting use_radians=True. + :param point: Origin point for Skew See shapely manual for more information: http://toblerity.org/shapely/manual.html#affine-transformations @@ -1322,12 +1321,12 @@ class Excellon(Geometry): return def skew_geom(obj): - if type(obj) is list: + try: new_obj = [] for g in obj: new_obj.append(skew_geom(g)) return new_obj - else: + except TypeError: try: return affinity.skew(obj, angle_x, angle_y, origin=(px, py)) except AttributeError: @@ -1336,8 +1335,7 @@ class Excellon(Geometry): # variables to display the percentage of work done self.geo_len = 0 try: - for g in self.drills: - self.geo_len += 1 + self.geo_len = len(self.drills) except TypeError: self.geo_len = 1 self.old_disp_number = 0 @@ -1393,9 +1391,10 @@ class Excellon(Geometry): def rotate(self, angle, point=None): """ Rotate the geometry of an object by an angle around the 'point' coordinates + :param angle: - :param point: tuple of coordinates (x, y) - :return: + :param point: tuple of coordinates (x, y) + :return: None """ log.debug("flatcamParsers.ParseExcellon.Excellon.rotate()") @@ -1423,8 +1422,7 @@ class Excellon(Geometry): # variables to display the percentage of work done self.geo_len = 0 try: - for g in self.drills: - self.geo_len += 1 + self.geo_len = len(self.drills) except TypeError: self.geo_len = 1 self.old_disp_number = 0 @@ -1476,9 +1474,10 @@ class Excellon(Geometry): def buffer(self, distance, join, factor): """ - :param distance: if 'factor' is True then distance is the factor - :param factor: True or False (None) - :return: + :param distance: if 'factor' is True then distance is the factor + :param factor: True or False (None) + :param join: The type of line joint used by the shapely buffer method: round, square, bevel + :return: None """ log.debug("flatcamParsers.ParseExcellon.Excellon.buffer()") @@ -1486,12 +1485,12 @@ class Excellon(Geometry): return def buffer_geom(obj): - if type(obj) is list: + try: new_obj = [] for g in obj: new_obj.append(buffer_geom(g)) return new_obj - else: + except TypeError: try: if factor is None: return obj.buffer(distance, resolution=self.geo_steps_per_circle) diff --git a/flatcamParsers/ParseGerber.py b/flatcamParsers/ParseGerber.py index bad7b97d..404c92fc 100644 --- a/flatcamParsers/ParseGerber.py +++ b/flatcamParsers/ParseGerber.py @@ -1,6 +1,5 @@ from PyQt5 import QtWidgets from camlib import Geometry, arc, arc_angle, ApertureMacro -import FlatCAMApp import numpy as np import re @@ -9,15 +8,16 @@ import traceback from copy import deepcopy import sys -from shapely.ops import cascaded_union, unary_union -from shapely.geometry import Polygon, MultiPolygon, LineString, Point +from shapely.ops import cascaded_union +from shapely.affinity import scale, translate import shapely.affinity as affinity -from shapely.geometry import box as shply_box +from shapely.geometry import box as shply_box, Polygon, LineString, Point, MultiPolygon from lxml import etree as ET -from flatcamParsers.ParseSVG import * - +from flatcamParsers.ParseSVG import svgparselength, getsvggeo +from FlatCAMCommon import GracefulException as grace import FlatCAMTranslation as fcTranslate + import gettext import builtins @@ -255,7 +255,7 @@ class Gerber(Geometry): """ if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace # Found some Gerber with a leading zero in the aperture id and the # referenced it without the zero, so this is a hack to handle that. @@ -403,7 +403,7 @@ class Gerber(Geometry): # Absolute or Relative/Incremental coordinates # Not implemented - absolute = True + # absolute = True # How to interpret circular interpolation: SINGLE or MULTI quadrant_mode = None @@ -428,7 +428,7 @@ class Gerber(Geometry): for gline in glines: if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace line_num += 1 self.source_file += gline + '\n' @@ -986,7 +986,7 @@ class Gerber(Geometry): if 'geometry' not in self.apertures[current_aperture]: self.apertures[current_aperture]['geometry'] = [] self.apertures[current_aperture]['geometry'].append(deepcopy(geo_dict)) - except Exception as e: + except Exception: pass last_path_aperture = current_aperture # we do this for the case that a region is done without having defined any aperture @@ -1229,25 +1229,25 @@ class Gerber(Geometry): try: circular_x = parse_gerber_number(circular_x, self.int_digits, self.frac_digits, self.gerber_zeros) - except Exception as e: + except Exception: circular_x = current_x try: circular_y = parse_gerber_number(circular_y, self.int_digits, self.frac_digits, self.gerber_zeros) - except Exception as e: + except Exception: circular_y = current_y # According to Gerber specification i and j are not modal, which means that when i or j are missing, # they are to be interpreted as being zero try: i = parse_gerber_number(i, self.int_digits, self.frac_digits, self.gerber_zeros) - except Exception as e: + except Exception: i = 0 try: j = parse_gerber_number(j, self.int_digits, self.frac_digits, self.gerber_zeros) - except Exception as e: + except Exception: j = 0 if quadrant_mode is None: @@ -1668,13 +1668,14 @@ class Gerber(Geometry): bbox = bbox.envelope return bbox - def bounds(self): + def bounds(self, flatten=None): """ Returns coordinates of rectangular bounds of Gerber geometry: (xmin, ymin, xmax, ymax). + + :param flatten: Not used, it is here for compatibility with base class method + :return: None """ - # fixed issue of getting bounds only for one level lists of objects - # now it can get bounds for nested lists of objects log.debug("parseGerber.Gerber.bounds()") @@ -1999,8 +2000,7 @@ class Gerber(Geometry): # variables to display the percentage of work done self.geo_len = 0 try: - for __ in self.solid_geometry: - self.geo_len += 1 + self.geo_len = len(self.solid_geometry) except TypeError: self.geo_len = 1 @@ -2078,8 +2078,7 @@ class Gerber(Geometry): # variables to display the percentage of work done self.geo_len = 0 try: - for __ in self.solid_geometry: - self.geo_len += 1 + self.geo_len = len(self.solid_geometry) except TypeError: self.geo_len = 1 @@ -2217,8 +2216,7 @@ class Gerber(Geometry): # variables to display the percentage of work done self.geo_len = 0 try: - for __ in self.solid_geometry: - self.geo_len += 1 + self.geo_len = len(self.solid_geometry) except TypeError: self.geo_len = 1 @@ -2266,8 +2264,9 @@ class Gerber(Geometry): def buffer(self, distance, join, factor=None): """ - :param distance: if 'factor' is True then distance is the factor - :param factor: True or False (None) + :param distance: If 'factor' is True then distance is the factor + :param join: The type of joining used by the Shapely buffer method. Can be: round, square and bevel + :param factor: True or False (None) :return: """ log.debug("parseGerber.Gerber.buffer()") diff --git a/flatcamParsers/ParseHPGL2.py b/flatcamParsers/ParseHPGL2.py index ead2a67c..b612e7bb 100644 --- a/flatcamParsers/ParseHPGL2.py +++ b/flatcamParsers/ParseHPGL2.py @@ -7,7 +7,6 @@ # ############################################################ from camlib import arc, three_point_circle -import FlatCAMApp import numpy as np import re @@ -19,6 +18,7 @@ import sys from shapely.ops import unary_union from shapely.geometry import LineString, Point +from FlatCAMCommon import GracefulException as grace import FlatCAMTranslation as fcTranslate import gettext import builtins @@ -180,7 +180,7 @@ class HPGL2: for gline in glines: if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace line_num += 1 self.source_file += gline + '\n' @@ -304,7 +304,7 @@ class HPGL2: (_("Coordinates missing, line ignored"), str(gline))) if current_x is not None and current_y is not None: - radius = match.group(1) + radius = float(match.group(1)) geo = Point((current_x, current_y)).buffer(radius, int(self.steps_per_circle)) geo_line = geo.exterior self.tools[current_tool]['solid_geometry'].append(geo_line) diff --git a/flatcamTools/ToolAlignObjects.py b/flatcamTools/ToolAlignObjects.py index efb7e1b3..a4b825f7 100644 --- a/flatcamTools/ToolAlignObjects.py +++ b/flatcamTools/ToolAlignObjects.py @@ -382,7 +382,7 @@ class AlignObjects(FlatCAMTool): def check_points(self): if len(self.clicked_points) == 1: self.app.inform.emit('%s: %s. %s' % ( - _("First Point"), _("Click on the DESTINATION point."), _(" Or right click to cancel."))) + _("First Point"), _("Click on the DESTINATION point."), _("Or right click to cancel."))) self.target_obj = self.aligner_obj self.reset_color() self.set_color() @@ -397,14 +397,14 @@ class AlignObjects(FlatCAMTool): return else: self.app.inform.emit('%s: %s. %s' % ( - _("Second Point"), _("Click on the START point."), _(" Or right click to cancel."))) + _("Second Point"), _("Click on the START point."), _("Or right click to cancel."))) self.target_obj = self.aligned_obj self.reset_color() self.set_color() if len(self.clicked_points) == 3: self.app.inform.emit('%s: %s. %s' % ( - _("Second Point"), _("Click on the DESTINATION point."), _(" Or right click to cancel."))) + _("Second Point"), _("Click on the DESTINATION point."), _("Or right click to cancel."))) self.target_obj = self.aligner_obj self.reset_color() self.set_color() diff --git a/flatcamTools/ToolCopperThieving.py b/flatcamTools/ToolCopperThieving.py index 99c2a443..4b85a8b4 100644 --- a/flatcamTools/ToolCopperThieving.py +++ b/flatcamTools/ToolCopperThieving.py @@ -7,10 +7,9 @@ from PyQt5 import QtWidgets, QtCore -import FlatCAMApp +from FlatCAMCommon import GracefulException as grace from FlatCAMTool import FlatCAMTool from flatcamGUI.GUIElements import FCDoubleSpinner, RadioSet, FCEntry, FCComboBox -from FlatCAMObj import FlatCAMGerber, FlatCAMGeometry, FlatCAMExcellon import shapely.geometry.base as base from shapely.ops import cascaded_union, unary_union @@ -994,7 +993,7 @@ class ToolCopperThieving(FlatCAMTool): for pol in app_obj.grb_object.solid_geometry: if app_obj.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace clearance_geometry.append( pol.buffer(c_val, int(int(app_obj.geo_steps_per_circle) / 4)) @@ -1073,7 +1072,7 @@ class ToolCopperThieving(FlatCAMTool): for poly in working_obj: if app_obj.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace geo_buff_list.append(poly.buffer(distance=margin, join_style=base.JOIN_STYLE.mitre)) except TypeError: geo_buff_list.append(working_obj.buffer(distance=margin, join_style=base.JOIN_STYLE.mitre)) @@ -1082,7 +1081,7 @@ class ToolCopperThieving(FlatCAMTool): else: # ref_selected == 'box' geo_n = working_obj.solid_geometry - if isinstance(working_obj, FlatCAMGeometry): + if working_obj.kind == 'geometry': try: __ = iter(geo_n) except Exception as e: @@ -1093,11 +1092,11 @@ class ToolCopperThieving(FlatCAMTool): for poly in geo_n: if app_obj.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace geo_buff_list.append(poly.buffer(distance=margin, join_style=base.JOIN_STYLE.mitre)) bounding_box = cascaded_union(geo_buff_list) - elif isinstance(working_obj, FlatCAMGerber): + elif working_obj.kind == 'gerber': geo_n = cascaded_union(geo_n).convex_hull bounding_box = cascaded_union(thieving_obj.solid_geometry).convex_hull.intersection(geo_n) bounding_box = bounding_box.buffer(distance=margin, join_style=base.JOIN_STYLE.mitre) @@ -1192,7 +1191,7 @@ class ToolCopperThieving(FlatCAMTool): for pol in app_obj.grb_object.solid_geometry: if app_obj.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace outline_geometry.append( pol.buffer(c_val+half_thick_line, int(int(app_obj.geo_steps_per_circle) / 4)) diff --git a/flatcamTools/ToolCutOut.py b/flatcamTools/ToolCutOut.py index 86f750fb..f8ee8c28 100644 --- a/flatcamTools/ToolCutOut.py +++ b/flatcamTools/ToolCutOut.py @@ -8,7 +8,6 @@ from PyQt5 import QtWidgets, QtGui, QtCore from FlatCAMTool import FlatCAMTool from flatcamGUI.GUIElements import FCDoubleSpinner, FCCheckBox, RadioSet, FCComboBox, OptionalInputSection, FCButton -from FlatCAMObj import FlatCAMGerber from shapely.geometry import box, MultiPolygon, Polygon, LineString, LinearRing from shapely.ops import cascaded_union, unary_union @@ -270,7 +269,7 @@ class CutOut(FlatCAMTool): form_layout_2.addRow(gaps_label, self.gaps) # Buttons - self.ff_cutout_object_btn = QtWidgets.QPushButton(_("Generate Freeform Geometry")) + self.ff_cutout_object_btn = FCButton(_("Generate Freeform Geometry")) self.ff_cutout_object_btn.setToolTip( _("Cutout the selected object.\n" "The cutout shape can be of any shape.\n" @@ -284,7 +283,7 @@ class CutOut(FlatCAMTool): """) grid0.addWidget(self.ff_cutout_object_btn, 20, 0, 1, 2) - self.rect_cutout_object_btn = QtWidgets.QPushButton(_("Generate Rectangular Geometry")) + self.rect_cutout_object_btn = FCButton(_("Generate Rectangular Geometry")) self.rect_cutout_object_btn.setToolTip( _("Cutout the selected object.\n" "The resulting cutout shape is\n" @@ -335,7 +334,7 @@ class CutOut(FlatCAMTool): # form_layout_3.addRow(e_lab_0) - self.man_geo_creation_btn = QtWidgets.QPushButton(_("Generate Manual Geometry")) + self.man_geo_creation_btn = FCButton(_("Generate Manual Geometry")) self.man_geo_creation_btn.setToolTip( _("If the object to be cutout is a Gerber\n" "first create a Geometry that surrounds it,\n" @@ -350,7 +349,7 @@ class CutOut(FlatCAMTool): """) grid0.addWidget(self.man_geo_creation_btn, 24, 0, 1, 2) - self.man_gaps_creation_btn = QtWidgets.QPushButton(_("Manual Add Bridge Gaps")) + self.man_gaps_creation_btn = FCButton(_("Manual Add Bridge Gaps")) self.man_gaps_creation_btn.setToolTip( _("Use the left mouse button (LMB) click\n" "to create a bridge gap to separate the PCB from\n" @@ -369,7 +368,7 @@ class CutOut(FlatCAMTool): self.layout.addStretch() # ## Reset Tool - self.reset_button = QtWidgets.QPushButton(_("Reset Tool")) + self.reset_button = FCButton(_("Reset Tool")) self.reset_button.setToolTip( _("Will reset the tool parameters.") ) @@ -525,7 +524,7 @@ class CutOut(FlatCAMTool): def geo_init(geo_obj, app_obj): solid_geo = [] - if isinstance(cutout_obj, FlatCAMGerber): + if cutout_obj.kind == 'gerber': if isinstance(cutout_obj.solid_geometry, list): cutout_obj.solid_geometry = MultiPolygon(cutout_obj.solid_geometry) @@ -542,12 +541,12 @@ class CutOut(FlatCAMTool): def cutout_handler(geom): # Get min and max data for each object as we just cut rectangles across X or Y - xmin, ymin, xmax, ymax = recursive_bounds(geom) + xxmin, yymin, xxmax, yymax = recursive_bounds(geom) - px = 0.5 * (xmin + xmax) + margin - py = 0.5 * (ymin + ymax) + margin - lenx = (xmax - xmin) + (margin * 2) - leny = (ymax - ymin) + (margin * 2) + px = 0.5 * (xxmin + xxmax) + margin + py = 0.5 * (yymin + yymax) + margin + lenx = (xxmax - xxmin) + (margin * 2) + leny = (yymax - yymin) + (margin * 2) proc_geometry = [] if gaps == 'None': @@ -555,41 +554,41 @@ class CutOut(FlatCAMTool): else: if gaps == '8' or gaps == '2LR': geom = self.subtract_poly_from_geo(geom, - xmin - gapsize, # botleft_x + xxmin - gapsize, # botleft_x py - gapsize + leny / 4, # botleft_y - xmax + gapsize, # topright_x + xxmax + gapsize, # topright_x py + gapsize + leny / 4) # topright_y geom = self.subtract_poly_from_geo(geom, - xmin - gapsize, + xxmin - gapsize, py - gapsize - leny / 4, - xmax + gapsize, + xxmax + gapsize, py + gapsize - leny / 4) if gaps == '8' or gaps == '2TB': geom = self.subtract_poly_from_geo(geom, px - gapsize + lenx / 4, - ymin - gapsize, + yymin - gapsize, px + gapsize + lenx / 4, - ymax + gapsize) + yymax + gapsize) geom = self.subtract_poly_from_geo(geom, px - gapsize - lenx / 4, - ymin - gapsize, + yymin - gapsize, px + gapsize - lenx / 4, - ymax + gapsize) + yymax + gapsize) if gaps == '4' or gaps == 'LR': geom = self.subtract_poly_from_geo(geom, - xmin - gapsize, + xxmin - gapsize, py - gapsize, - xmax + gapsize, + xxmax + gapsize, py + gapsize) if gaps == '4' or gaps == 'TB': geom = self.subtract_poly_from_geo(geom, px - gapsize, - ymin - gapsize, + yymin - gapsize, px + gapsize, - ymax + gapsize) + yymax + gapsize) try: for g in geom: @@ -603,7 +602,7 @@ class CutOut(FlatCAMTool): object_geo = unary_union(object_geo) # for geo in object_geo: - if isinstance(cutout_obj, FlatCAMGerber): + if cutout_obj.kind == 'gerber': if isinstance(object_geo, MultiPolygon): x0, y0, x1, y1 = object_geo.bounds object_geo = box(x0, y0, x1, y1) @@ -623,7 +622,7 @@ class CutOut(FlatCAMTool): object_geo = [object_geo] for geom_struct in object_geo: - if isinstance(cutout_obj, FlatCAMGerber): + if cutout_obj.kind == 'gerber': if margin >= 0: geom_struct = (geom_struct.buffer(margin + abs(dia / 2))).exterior else: @@ -775,7 +774,7 @@ class CutOut(FlatCAMTool): # if Gerber create a buffer at a distance # if Geometry then cut through the geometry - if isinstance(cutout_obj, FlatCAMGerber): + if cutout_obj.kind == 'gerber': if margin >= 0: geo = geo.buffer(margin + abs(dia / 2)) else: @@ -909,7 +908,7 @@ class CutOut(FlatCAMTool): "Select one and try again.")) return - if not isinstance(cutout_obj, FlatCAMGerber): + if cutout_obj.kind != 'gerber': self.app.inform.emit('[ERROR_NOTCL] %s' % _("The selected object has to be of Gerber type.\n" "Select a Gerber file and try again.")) @@ -988,11 +987,11 @@ class CutOut(FlatCAMTool): if self.app.is_legacy is False: event_pos = event.pos - event_is_dragging = event.is_dragging + # event_is_dragging = event.is_dragging right_button = 2 else: event_pos = (event.xdata, event.ydata) - event_is_dragging = self.app.plotcanvas.is_dragging + # event_is_dragging = self.app.plotcanvas.is_dragging right_button = 3 try: @@ -1038,11 +1037,11 @@ class CutOut(FlatCAMTool): if self.app.is_legacy is False: event_pos = event.pos event_is_dragging = event.is_dragging - right_button = 2 + # right_button = 2 else: event_pos = (event.xdata, event.ydata) event_is_dragging = self.app.plotcanvas.is_dragging - right_button = 3 + # right_button = 3 try: x = float(event_pos[0]) @@ -1159,13 +1158,17 @@ class CutOut(FlatCAMTool): if '+' in key_string: mod, __, key_text = key_string.rpartition('+') if mod.lower() == 'ctrl': - modifiers = QtCore.Qt.ControlModifier + # modifiers = QtCore.Qt.ControlModifier + pass elif mod.lower() == 'alt': - modifiers = QtCore.Qt.AltModifier + # modifiers = QtCore.Qt.AltModifier + pass elif mod.lower() == 'shift': - modifiers = QtCore.Qt.ShiftModifier + # modifiers = QtCore.Qt.ShiftModifier + pass else: - modifiers = QtCore.Qt.NoModifier + # modifiers = QtCore.Qt.NoModifier + pass key = QtGui.QKeySequence(key_text) # events from Vispy are of type KeyEvent else: @@ -1203,7 +1206,8 @@ class CutOut(FlatCAMTool): geo = self.cutting_geo(pos=(l_x, l_y)) self.draw_utility_geometry(geo=geo) - def subtract_poly_from_geo(self, solid_geo, x0, y0, x1, y1): + @staticmethod + def subtract_poly_from_geo(solid_geo, x0, y0, x1, y1): """ Subtract polygon made from points from the given object. This only operates on the paths in the original geometry, @@ -1270,8 +1274,9 @@ def flatten(geometry): def recursive_bounds(geometry): """ - Returns coordinates of rectangular bounds - of geometry: (xmin, ymin, xmax, ymax). + + :param geometry: a iterable object that holds geometry + :return: Returns coordinates of rectangular bounds of geometry: (xmin, ymin, xmax, ymax). """ # now it can get bounds for nested lists of objects diff --git a/flatcamTools/ToolDblSided.py b/flatcamTools/ToolDblSided.py index 26aba20c..95654a41 100644 --- a/flatcamTools/ToolDblSided.py +++ b/flatcamTools/ToolDblSided.py @@ -3,7 +3,6 @@ from PyQt5 import QtWidgets, QtCore from FlatCAMTool import FlatCAMTool from flatcamGUI.GUIElements import RadioSet, FCDoubleSpinner, EvalEntry, FCEntry, FCButton, FCComboBox -from FlatCAMObj import FlatCAMGerber, FlatCAMExcellon, FlatCAMGeometry from numpy import Inf @@ -192,7 +191,7 @@ class DblSidedTool(FlatCAMTool): # Add a reference self.add_point_button = QtWidgets.QPushButton(_("Add")) self.add_point_button.setToolTip( - _("Add the coordinates in format (x, y) through which the mirroring axis \n " + _("Add the coordinates in format (x, y) through which the mirroring axis\n " "selected in 'MIRROR AXIS' pass.\n" "The (x, y) coordinates are captured by pressing SHIFT key\n" "and left mouse button click on canvas or you can enter the coordinates manually.") @@ -658,7 +657,7 @@ class DblSidedTool(FlatCAMTool): self.app.inform.emit('[WARNING_NOTCL] %s' % _("There is no Gerber object loaded ...")) return - if not isinstance(fcobj, FlatCAMGerber): + if fcobj.kind != 'gerber': self.app.inform.emit('[ERROR_NOTCL] %s' % _("Only Gerber, Excellon and Geometry objects can be mirrored.")) return @@ -701,7 +700,7 @@ class DblSidedTool(FlatCAMTool): self.app.inform.emit('[WARNING_NOTCL] %s' % _("There is no Excellon object loaded ...")) return - if not isinstance(fcobj, FlatCAMExcellon): + if fcobj.kind != 'excellon': self.app.inform.emit('[ERROR_NOTCL] %s' % _("Only Gerber, Excellon and Geometry objects can be mirrored.")) return @@ -745,7 +744,7 @@ class DblSidedTool(FlatCAMTool): self.app.inform.emit('[WARNING_NOTCL] %s' % _("There is no Geometry object loaded ...")) return - if not isinstance(fcobj, FlatCAMGeometry): + if fcobj.kind != 'geometry': self.app.inform.emit('[ERROR_NOTCL] %s' % _("Only Gerber, Excellon and Geometry objects can be mirrored.")) return diff --git a/flatcamTools/ToolMove.py b/flatcamTools/ToolMove.py index 0e89764c..fe398c53 100644 --- a/flatcamTools/ToolMove.py +++ b/flatcamTools/ToolMove.py @@ -8,7 +8,6 @@ from PyQt5 import QtWidgets, QtCore from FlatCAMTool import FlatCAMTool from flatcamGUI.VisPyVisuals import * -from FlatCAMObj import FlatCAMGerber from copy import copy import logging @@ -128,7 +127,7 @@ class ToolMove(FlatCAMTool): pos_canvas = self.app.plotcanvas.translate_coords(event_pos) # if GRID is active we need to get the snapped positions - if self.app.grid_status() == True: + if self.app.grid_status(): pos = self.app.geo_editor.snap(pos_canvas[0], pos_canvas[1]) else: pos = pos_canvas @@ -148,7 +147,7 @@ class ToolMove(FlatCAMTool): self.delete_shape() # if GRID is active we need to get the snapped positions - if self.app.grid_status() == True: + if self.app.grid_status(): pos = self.app.geo_editor.snap(pos_canvas[0], pos_canvas[1]) else: pos = pos_canvas @@ -171,7 +170,7 @@ class ToolMove(FlatCAMTool): # remove any mark aperture shape that may be displayed for sel_obj in obj_list: # if the Gerber mark shapes are enabled they need to be disabled before move - if isinstance(sel_obj, FlatCAMGerber): + if sel_obj.kind == 'gerber': sel_obj.ui.aperture_table_visibility_cb.setChecked(False) try: @@ -198,8 +197,8 @@ class ToolMove(FlatCAMTool): elif sel_obj.kind == 'excellon': sel_obj.source_file = self.app.export_excellon( obj_name=out_name, filename=None, local_use=sel_obj, use_thread=False) - except Exception as e: - log.debug('[ERROR_NOTCL] %s --> %s' % ('ToolMove.on_left_click()', str(e))) + except Exception as err: + log.debug('[ERROR_NOTCL] %s --> %s' % ('ToolMove.on_left_click()', str(err))) return "fail" # time to plot the moved objects @@ -249,7 +248,7 @@ class ToolMove(FlatCAMTool): pos_canvas = self.app.plotcanvas.translate_coords((x, y)) # if GRID is active we need to get the snapped positions - if self.app.grid_status() == True: + if self.app.grid_status(): pos = self.app.geo_editor.snap(pos_canvas[0], pos_canvas[1]) else: pos = pos_canvas diff --git a/flatcamTools/ToolNCC.py b/flatcamTools/ToolNCC.py index cfbeecaf..d1d4aa04 100644 --- a/flatcamTools/ToolNCC.py +++ b/flatcamTools/ToolNCC.py @@ -12,7 +12,7 @@ from flatcamGUI.GUIElements import FCCheckBox, FCDoubleSpinner, RadioSet, FCTabl FCComboBox, OptionalInputSection from flatcamParsers.ParseGerber import Gerber -import FlatCAMApp +from FlatCAMCommon import GracefulException as grace from copy import deepcopy @@ -1987,7 +1987,7 @@ class NonCopperClear(FlatCAMTool, Gerber): for poly in env_obj: if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace geo_buff_list.append(poly.buffer(distance=ncc_margin, join_style=base.JOIN_STYLE.mitre)) bounding_box = cascaded_union(geo_buff_list) elif ncc_select == _("Reference Object"): @@ -1996,7 +1996,7 @@ class NonCopperClear(FlatCAMTool, Gerber): for poly in env_obj: if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace geo_buff_list.append(poly.buffer(distance=ncc_margin, join_style=base.JOIN_STYLE.mitre)) bounding_box = cascaded_union(geo_buff_list) @@ -2090,7 +2090,7 @@ class NonCopperClear(FlatCAMTool, Gerber): if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace if isinstance(geo_elem, Polygon): for ring in self.poly2rings(geo_elem): @@ -2263,7 +2263,7 @@ class NonCopperClear(FlatCAMTool, Gerber): # ########################################################################################## def gen_clear_area(geo_obj, app_obj): assert geo_obj.kind == 'geometry', \ - "Initializer expected a FlatCAMGeometry, got %s" % type(geo_obj) + "Initializer expected a GeometryObject, got %s" % type(geo_obj) # provide the app with a way to process the GUI events when in a blocking loop if not run_threaded: @@ -2312,7 +2312,7 @@ class NonCopperClear(FlatCAMTool, Gerber): log.debug("Starting geometry processing for tool: %s" % str(tool)) if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace # provide the app with a way to process the GUI events when in a blocking loop QtWidgets.QApplication.processEvents() @@ -2377,7 +2377,7 @@ class NonCopperClear(FlatCAMTool, Gerber): if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace # clean the polygon p = p.buffer(0) @@ -2551,7 +2551,7 @@ class NonCopperClear(FlatCAMTool, Gerber): # ########################################################################################### def gen_clear_area_rest(geo_obj, app_obj): assert geo_obj.kind == 'geometry', \ - "Initializer expected a FlatCAMGeometry, got %s" % type(geo_obj) + "Initializer expected a GeometryObject, got %s" % type(geo_obj) log.debug("NCC Tool. Rest machining copper clearing task started.") app_obj.inform.emit('_(NCC Tool. Rest machining copper clearing task started.') @@ -2595,7 +2595,7 @@ class NonCopperClear(FlatCAMTool, Gerber): log.debug("Starting geometry processing for tool: %s" % str(tool)) if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace # provide the app with a way to process the GUI events when in a blocking loop QtWidgets.QApplication.processEvents() @@ -2644,7 +2644,7 @@ class NonCopperClear(FlatCAMTool, Gerber): if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace try: area = area.difference(poly) except Exception: @@ -2674,7 +2674,7 @@ class NonCopperClear(FlatCAMTool, Gerber): for p in area.geoms: if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace # clean the polygon p = p.buffer(0) @@ -2753,7 +2753,7 @@ class NonCopperClear(FlatCAMTool, Gerber): if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace # check if there is a geometry at all in the cleared geometry if cleared_geo: @@ -2771,7 +2771,7 @@ class NonCopperClear(FlatCAMTool, Gerber): for p in cleared_area: if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace poly = p.buffer(buffer_value) cleared_by_last_tool.append(poly) @@ -2836,7 +2836,7 @@ class NonCopperClear(FlatCAMTool, Gerber): app_obj.new_object("geometry", name, gen_clear_area_rest) else: app_obj.new_object("geometry", name, gen_clear_area) - except FlatCAMApp.GracefulException: + except grace: if run_threaded: proc.done() return @@ -2999,7 +2999,7 @@ class NonCopperClear(FlatCAMTool, Gerber): for poly in geo_n: if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace geo_buff_list.append(poly.buffer(distance=ncc_margin, join_style=base.JOIN_STYLE.mitre)) bounding_box = cascaded_union(geo_buff_list) @@ -3017,7 +3017,7 @@ class NonCopperClear(FlatCAMTool, Gerber): for poly in geo_n: if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace geo_buff_list.append(poly.buffer(distance=ncc_margin, join_style=base.JOIN_STYLE.mitre)) bounding_box = cascaded_union(geo_buff_list) @@ -3045,7 +3045,7 @@ class NonCopperClear(FlatCAMTool, Gerber): # ########################################################################################## def gen_clear_area(geo_obj, app_obj): assert geo_obj.kind == 'geometry', \ - "Initializer expected a FlatCAMGeometry, got %s" % type(geo_obj) + "Initializer expected a GeometryObject, got %s" % type(geo_obj) # provide the app with a way to process the GUI events when in a blocking loop if not run_threaded: @@ -3141,7 +3141,7 @@ class NonCopperClear(FlatCAMTool, Gerber): if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace if isinstance(geo_elem, Polygon): for ring in self.poly2rings(geo_elem): @@ -3242,7 +3242,7 @@ class NonCopperClear(FlatCAMTool, Gerber): log.debug("Starting geometry processing for tool: %s" % str(tool)) if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace # provide the app with a way to process the GUI events when in a blocking loop QtWidgets.QApplication.processEvents() @@ -3283,7 +3283,7 @@ class NonCopperClear(FlatCAMTool, Gerber): if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace # clean the polygon p = p.buffer(0) @@ -3446,7 +3446,7 @@ class NonCopperClear(FlatCAMTool, Gerber): # ########################################################################################### def gen_clear_area_rest(geo_obj, app_obj): assert geo_obj.kind == 'geometry', \ - "Initializer expected a FlatCAMGeometry, got %s" % type(geo_obj) + "Initializer expected a GeometryObject, got %s" % type(geo_obj) log.debug("NCC Tool. Rest machining copper clearing task started.") app_obj.inform.emit('_(NCC Tool. Rest machining copper clearing task started.') @@ -3520,7 +3520,7 @@ class NonCopperClear(FlatCAMTool, Gerber): if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace if isinstance(geo_elem, Polygon): for ring in self.poly2rings(geo_elem): @@ -3614,7 +3614,7 @@ class NonCopperClear(FlatCAMTool, Gerber): if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace if type(empty) is Polygon: empty = MultiPolygon([empty]) @@ -3628,7 +3628,7 @@ class NonCopperClear(FlatCAMTool, Gerber): while sorted_tools: if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace tool = sorted_tools.pop(0) log.debug("Starting geometry processing for tool: %s" % str(tool)) @@ -3648,7 +3648,7 @@ class NonCopperClear(FlatCAMTool, Gerber): if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace try: area = area.difference(poly_r) except Exception: @@ -3678,7 +3678,7 @@ class NonCopperClear(FlatCAMTool, Gerber): for p in area.geoms: if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace # clean the polygon p = p.buffer(0) @@ -3754,7 +3754,7 @@ class NonCopperClear(FlatCAMTool, Gerber): if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace # check if there is a geometry at all in the cleared geometry if cleared_geo: @@ -3772,7 +3772,7 @@ class NonCopperClear(FlatCAMTool, Gerber): for p in cleared_area: if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace r_poly = p.buffer(buffer_value) cleared_by_last_tool.append(r_poly) @@ -3833,7 +3833,7 @@ class NonCopperClear(FlatCAMTool, Gerber): app_obj.new_object("geometry", name, gen_clear_area_rest, plot=plot) else: app_obj.new_object("geometry", name, gen_clear_area, plot=plot) - except FlatCAMApp.GracefulException: + except grace: if run_threaded: proc.done() return @@ -3887,7 +3887,7 @@ class NonCopperClear(FlatCAMTool, Gerber): if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace boundary = boundary.difference(el) pol_nr += 1 disp_number = int(np.interp(pol_nr, [0, geo_len], [0, 100])) diff --git a/flatcamTools/ToolOptimal.py b/flatcamTools/ToolOptimal.py index f67d9941..5743d2ad 100644 --- a/flatcamTools/ToolOptimal.py +++ b/flatcamTools/ToolOptimal.py @@ -9,8 +9,7 @@ from PyQt5 import QtWidgets, QtCore, QtGui from FlatCAMTool import FlatCAMTool from flatcamGUI.GUIElements import OptionalHideInputSection, FCTextArea, FCEntry, FCSpinner, FCCheckBox, FCComboBox -from FlatCAMObj import FlatCAMGerber -import FlatCAMApp +from FlatCAMCommon import GracefulException as grace from shapely.geometry import MultiPolygon from shapely.ops import nearest_points @@ -343,7 +342,7 @@ class ToolOptimal(FlatCAMTool): self.app.inform.emit('[WARNING_NOTCL] %s' % _("There is no Gerber object loaded ...")) return - if not isinstance(fcobj, FlatCAMGerber): + if fcobj.kind != 'gerber': self.app.inform.emit('[ERROR_NOTCL] %s' % _("Only Gerber objects can be evaluated.")) return @@ -365,7 +364,7 @@ class ToolOptimal(FlatCAMTool): for geo_el in fcobj.apertures[ap]['geometry']: if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace if 'solid' in geo_el and geo_el['solid'] is not None and geo_el['solid'].is_valid: total_geo.append(geo_el['solid']) @@ -395,7 +394,7 @@ class ToolOptimal(FlatCAMTool): for s_geo in total_geo[idx:]: if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace # minimize the number of distances by not taking into considerations those that are too small dist = geo.distance(s_geo) @@ -459,7 +458,7 @@ class ToolOptimal(FlatCAMTool): log.debug("ToolOptimal.on_locate_position() --> first try %s" % str(e)) self.app.inform.emit("[ERROR_NOTCL] The selected text is no valid location in the format " "((x0, y0), (x1, y1)).") - return 'fail' + return try: loc_1 = loc[0] @@ -471,7 +470,7 @@ class ToolOptimal(FlatCAMTool): self.app.on_jump_to(custom_location=loc) except Exception as e: log.debug("ToolOptimal.on_locate_position() --> sec try %s" % str(e)) - return 'fail' + return def on_update_text(self, data): txt = '' @@ -567,12 +566,12 @@ class ToolOptimal(FlatCAMTool): if self.selected_locations_text != '': loc = eval(self.selected_locations_text) else: - return 'fail' + return except Exception as e: log.debug("ToolOptimal.on_locate_sec_position() --> first try %s" % str(e)) self.app.inform.emit("[ERROR_NOTCL] The selected text is no valid location in the format " "((x0, y0), (x1, y1)).") - return 'fail' + return try: loc_1 = loc[0] @@ -584,7 +583,7 @@ class ToolOptimal(FlatCAMTool): self.app.on_jump_to(custom_location=loc) except Exception as e: log.debug("ToolOptimal.on_locate_sec_position() --> sec try %s" % str(e)) - return 'fail' + return def reset_fields(self): self.gerber_object_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex())) diff --git a/flatcamTools/ToolPDF.py b/flatcamTools/ToolPDF.py index 9f91260f..c5b3626b 100644 --- a/flatcamTools/ToolPDF.py +++ b/flatcamTools/ToolPDF.py @@ -8,7 +8,7 @@ from PyQt5 import QtWidgets, QtCore from FlatCAMTool import FlatCAMTool -import FlatCAMApp +from FlatCAMCommon import GracefulException as grace from shapely.geometry import Point, Polygon, LineString, MultiPolygon from shapely.ops import unary_union @@ -190,7 +190,7 @@ class ToolPDF(FlatCAMTool): if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace with self.app.proc_container.new(_("Parsing PDF file ...")): with open(filename, "rb") as f: @@ -200,7 +200,7 @@ class ToolPDF(FlatCAMTool): for s in re.findall(self.stream_re, pdf): if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace stream_nr += 1 log.debug(" PDF STREAM: %d\n" % stream_nr) @@ -291,7 +291,7 @@ class ToolPDF(FlatCAMTool): def layer_rendering_as_gerber(self, filename, ap_dict, layer_nr): outname = filename.split('/')[-1].split('\\')[-1] + "_%s" % str(layer_nr) - def obj_init(grb_obj, app_obj): + def obj_init(grb_obj): grb_obj.apertures = ap_dict @@ -404,7 +404,7 @@ class ToolPDF(FlatCAMTool): for object_name in self.pdf_parsed: if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace filename = deepcopy(self.pdf_parsed[object_name]['filename']) pdf_content = deepcopy(self.pdf_parsed[object_name]['pdf']) @@ -412,7 +412,7 @@ class ToolPDF(FlatCAMTool): for k in pdf_content: if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace ap_dict = pdf_content[k] if ap_dict: @@ -493,7 +493,7 @@ class ToolPDF(FlatCAMTool): for pline in lines: if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace line_nr += 1 log.debug("line %d: %s" % (line_nr, pline)) @@ -868,7 +868,6 @@ class ToolPDF(FlatCAMTool): new_el['solid'] = pdf_geo new_el['follow'] = pdf_geo.exterior apertures_dict[copy(found_aperture)]['geometry'].append(deepcopy(new_el)) - found_aperture = None else: if str(aperture) in apertures_dict.keys(): aperture += 1 @@ -1231,7 +1230,6 @@ class ToolPDF(FlatCAMTool): new_el['solid'] = pdf_geo new_el['follow'] = pdf_geo.exterior apertures_dict[copy(found_aperture)]['geometry'].append(deepcopy(new_el)) - found_aperture = None else: if str(aperture) in apertures_dict.keys(): aperture += 1 @@ -1355,7 +1353,7 @@ class ToolPDF(FlatCAMTool): if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace return object_dict diff --git a/flatcamTools/ToolPaint.py b/flatcamTools/ToolPaint.py index d7b85ca7..8d157e9f 100644 --- a/flatcamTools/ToolPaint.py +++ b/flatcamTools/ToolPaint.py @@ -14,7 +14,7 @@ from copy import deepcopy from flatcamParsers.ParseGerber import Gerber from camlib import Geometry, FlatCAMRTreeStorage from flatcamGUI.GUIElements import FCTable, FCDoubleSpinner, FCCheckBox, FCInputDialog, RadioSet, FCButton, FCComboBox -import FlatCAMApp +from FlatCAMCommon import GracefulException as grace from shapely.geometry import base, Polygon, MultiPolygon, LinearRing, Point from shapely.ops import cascaded_union, unary_union, linemerge @@ -1836,7 +1836,7 @@ class ToolPaint(FlatCAMTool, Gerber): contour=cont, connect=conn, prog_plot=prog_plot) - except FlatCAMApp.GracefulException: + except grace: return "fail" except Exception as ee: log.debug("ToolPaint.paint_polygon_worker() Standard --> %s" % str(ee)) @@ -1850,7 +1850,7 @@ class ToolPaint(FlatCAMTool, Gerber): contour=cont, connect=conn, prog_plot=prog_plot) - except FlatCAMApp.GracefulException: + except grace: return "fail" except Exception as ee: log.debug("ToolPaint.paint_polygon_worker() Seed --> %s" % str(ee)) @@ -1864,7 +1864,7 @@ class ToolPaint(FlatCAMTool, Gerber): contour=cont, connect=conn, prog_plot=prog_plot) - except FlatCAMApp.GracefulException: + except grace: return "fail" except Exception as ee: log.debug("ToolPaint.paint_polygon_worker() Lines --> %s" % str(ee)) @@ -2015,7 +2015,7 @@ class ToolPaint(FlatCAMTool, Gerber): # contour=cont, # connect=conn, # prog_plot=prog_plot) - except FlatCAMApp.GracefulException: + except grace: return "fail" except Exception as ee: log.debug("ToolPaint.paint_polygon_worker() Laser Lines --> %s" % str(ee)) @@ -2052,7 +2052,7 @@ class ToolPaint(FlatCAMTool, Gerber): contour=cont, connect=conn, prog_plot=prog_plot) - except FlatCAMApp.GracefulException: + except grace: return "fail" except Exception as ee: log.debug("ToolPaint.paint_polygon_worker() Combo --> %s" % str(ee)) @@ -2199,7 +2199,7 @@ class ToolPaint(FlatCAMTool, Gerber): QtWidgets.QApplication.processEvents() if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace geo_res = self.paint_polygon_worker(pp, tooldiameter=tool_dia, over=over, conn=conn, cont=cont, paint_method=paint_method, obj=obj, prog_plot=prog_plot) @@ -2217,7 +2217,7 @@ class ToolPaint(FlatCAMTool, Gerber): QtWidgets.QApplication.processEvents() if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace geo_res = self.paint_polygon_worker(poly_buf, tooldiameter=tool_dia, over=over, conn=conn, cont=cont, paint_method=paint_method, obj=obj, @@ -2230,7 +2230,7 @@ class ToolPaint(FlatCAMTool, Gerber): for x in cp: total_geometry += list(x.get_objects()) final_solid_geometry += total_geometry - except FlatCAMApp.GracefulException: + except grace: return "fail" except Exception as e: log.debug("Could not Paint the polygons. %s" % str(e)) @@ -2305,7 +2305,7 @@ class ToolPaint(FlatCAMTool, Gerber): def job_thread(app_obj): try: ret = app_obj.new_object("geometry", name, job_init, plot=plot) - except FlatCAMApp.GracefulException: + except grace: proc.done() return except Exception as er: @@ -2376,7 +2376,7 @@ class ToolPaint(FlatCAMTool, Gerber): """ if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace if geometry is None: return @@ -2517,7 +2517,7 @@ class ToolPaint(FlatCAMTool, Gerber): QtWidgets.QApplication.processEvents() if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace geo_res = self.paint_polygon_worker(pp, tooldiameter=tool_dia, over=over, conn=conn, cont=cont, paint_method=paint_method, obj=obj, @@ -2542,7 +2542,7 @@ class ToolPaint(FlatCAMTool, Gerber): QtWidgets.QApplication.processEvents() if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace geo_res = self.paint_polygon_worker(poly_buf, tooldiameter=tool_dia, over=over, conn=conn, cont=cont, paint_method=paint_method, obj=obj, @@ -2705,7 +2705,7 @@ class ToolPaint(FlatCAMTool, Gerber): QtWidgets.QApplication.processEvents() if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace geo_res = self.paint_polygon_worker(pp, tooldiameter=tool_dia, over=over, conn=conn, cont=cont, paint_method=paint_method, obj=obj, prog_plot=prog_plot) @@ -2723,7 +2723,7 @@ class ToolPaint(FlatCAMTool, Gerber): QtWidgets.QApplication.processEvents() if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace geo_res = self.paint_polygon_worker(poly_buf, tooldiameter=tool_dia, over=over, conn=conn, cont=cont, paint_method=paint_method, obj=obj, @@ -2735,7 +2735,7 @@ class ToolPaint(FlatCAMTool, Gerber): for x in cp: cleared_geo += list(x.get_objects()) final_solid_geometry += cleared_geo - except FlatCAMApp.GracefulException: + except grace: return "fail" except Exception as e: log.debug("Could not Paint the polygons. %s" % str(e)) @@ -2815,7 +2815,7 @@ class ToolPaint(FlatCAMTool, Gerber): ret = app_obj.new_object("geometry", name, gen_paintarea_rest_machining, plot=plot) else: ret = app_obj.new_object("geometry", name, gen_paintarea, plot=plot) - except FlatCAMApp.GracefulException: + except grace: proc.done() return except Exception as err: @@ -2873,7 +2873,7 @@ class ToolPaint(FlatCAMTool, Gerber): """ if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace if geometry is None: return @@ -3015,7 +3015,7 @@ class ToolPaint(FlatCAMTool, Gerber): QtWidgets.QApplication.processEvents() if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace geo_res = self.paint_polygon_worker(pp, tooldiameter=tool_dia, over=over, conn=conn, cont=cont, paint_method=paint_method, obj=obj, @@ -3040,7 +3040,7 @@ class ToolPaint(FlatCAMTool, Gerber): QtWidgets.QApplication.processEvents() if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace geo_res = self.paint_polygon_worker(poly_buf, tooldiameter=tool_dia, over=over, conn=conn, cont=cont, paint_method=paint_method, obj=obj, @@ -3193,7 +3193,7 @@ class ToolPaint(FlatCAMTool, Gerber): QtWidgets.QApplication.processEvents() if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace geo_res = self.paint_polygon_worker(pp, tooldiameter=tool_dia, over=over, conn=conn, cont=cont, paint_method=paint_method, obj=obj, @@ -3218,7 +3218,7 @@ class ToolPaint(FlatCAMTool, Gerber): QtWidgets.QApplication.processEvents() if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace geo_res = self.paint_polygon_worker(poly_buf, tooldiameter=tool_dia, over=over, conn=conn, cont=cont, paint_method=paint_method, obj=obj, @@ -3312,7 +3312,7 @@ class ToolPaint(FlatCAMTool, Gerber): ret = app_obj.new_object("geometry", name, gen_paintarea_rest_machining, plot=plot) else: ret = app_obj.new_object("geometry", name, gen_paintarea, plot=plot) - except FlatCAMApp.GracefulException: + except grace: proc.done() return except Exception as err: diff --git a/flatcamTools/ToolPanelize.py b/flatcamTools/ToolPanelize.py index bbe57c18..1d5f538a 100644 --- a/flatcamTools/ToolPanelize.py +++ b/flatcamTools/ToolPanelize.py @@ -9,10 +9,8 @@ from PyQt5 import QtWidgets, QtGui, QtCore from FlatCAMTool import FlatCAMTool from flatcamGUI.GUIElements import FCSpinner, FCDoubleSpinner, RadioSet, FCCheckBox, OptionalInputSection, FCComboBox -from FlatCAMObj import FlatCAMGeometry, FlatCAMGerber, FlatCAMExcellon -import FlatCAMApp +from FlatCAMCommon import GracefulException as grace from copy import deepcopy -# from ObjectCollection import * import numpy as np import shapely.affinity as affinity @@ -480,13 +478,13 @@ class Panelize(FlatCAMTool): rows -= 1 panel_lengthy = ((ymax - ymin) * rows) + (spacing_rows * (rows - 1)) - if isinstance(panel_obj, FlatCAMExcellon) or isinstance(panel_obj, FlatCAMGeometry): + if panel_obj.kind == 'excellon' or panel_obj.kind == 'geometry': # make a copy of the panelized Excellon or Geometry tools copied_tools = {} for tt, tt_val in list(panel_obj.tools.items()): copied_tools[tt] = deepcopy(tt_val) - if isinstance(panel_obj, FlatCAMGerber): + if panel_obj.kind == 'gerber': # make a copy of the panelized Gerber apertures copied_apertures = {} for tt, tt_val in list(panel_obj.apertures.items()): @@ -525,7 +523,7 @@ class Panelize(FlatCAMTool): for tool_dict in panel_obj.drills: if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace point_offseted = affinity.translate(tool_dict['point'], currentx, currenty) obj_fin.drills.append( @@ -550,7 +548,7 @@ class Panelize(FlatCAMTool): for tool_dict in panel_obj.slots: if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace start_offseted = affinity.translate(tool_dict['start'], currentx, currenty) stop_offseted = affinity.translate(tool_dict['stop'], currentx, currenty) @@ -600,20 +598,20 @@ class Panelize(FlatCAMTool): obj_fin.solid_geometry = [] # create the initial structure on which to create the panel - if isinstance(panel_obj, FlatCAMGeometry): + if panel_obj.kind == 'geometry': obj_fin.multigeo = panel_obj.multigeo obj_fin.tools = copied_tools if panel_obj.multigeo is True: for tool in panel_obj.tools: obj_fin.tools[tool]['solid_geometry'][:] = [] - elif isinstance(panel_obj, FlatCAMGerber): + elif panel_obj.kind == 'gerber': obj_fin.apertures = copied_apertures for ap in obj_fin.apertures: obj_fin.apertures[ap]['geometry'] = [] # find the number of polygons in the source solid_geometry geo_len = 0 - if isinstance(panel_obj, FlatCAMGeometry): + if panel_obj.kind == 'geometry': if panel_obj.multigeo is True: for tool in panel_obj.tools: try: @@ -625,7 +623,7 @@ class Panelize(FlatCAMTool): geo_len = len(panel_obj.solid_geometry) except TypeError: geo_len = 1 - elif isinstance(panel_obj, FlatCAMGerber): + elif panel_obj.kind == 'gerber': for ap in panel_obj.apertures: if 'geometry' in panel_obj.apertures[ap]: try: @@ -641,12 +639,12 @@ class Panelize(FlatCAMTool): element += 1 old_disp_number = 0 - if isinstance(panel_obj, FlatCAMGeometry): + if panel_obj.kind == 'geometry': if panel_obj.multigeo is True: for tool in panel_obj.tools: if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace # geo = translate_recursion(panel_obj.tools[tool]['solid_geometry']) # if isinstance(geo, list): @@ -678,7 +676,7 @@ class Panelize(FlatCAMTool): # obj_fin.solid_geometry.append(geo) if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace try: # calculate the number of polygons @@ -690,7 +688,7 @@ class Panelize(FlatCAMTool): for geo_el in panel_obj.solid_geometry: if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace trans_geo = translate_recursion(geo_el) obj_fin.solid_geometry.append(trans_geo) @@ -715,13 +713,13 @@ class Panelize(FlatCAMTool): # obj_fin.solid_geometry.append(geo) if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace try: for geo_el in panel_obj.solid_geometry: if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace trans_geo = translate_recursion(geo_el) obj_fin.solid_geometry.append(trans_geo) @@ -732,7 +730,7 @@ class Panelize(FlatCAMTool): for apid in panel_obj.apertures: if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace if 'geometry' in panel_obj.apertures[apid]: try: # calculate the number of polygons @@ -743,7 +741,7 @@ class Panelize(FlatCAMTool): for el in panel_obj.apertures[apid]['geometry']: if self.app.abort_flag: # graceful abort requested by the user - raise FlatCAMApp.GracefulException + raise grace new_el = {} if 'solid' in el: @@ -786,7 +784,7 @@ class Panelize(FlatCAMTool): self.app.proc_container.update_view_text('') self.app.inform.emit('%s: %d' % (_("Generating panel... Spawning copies"), (int(rows * columns)))) - if isinstance(panel_obj, FlatCAMExcellon): + if panel_obj.kind == 'excellon': self.app.new_object("excellon", self.outname, job_init_excellon, plot=True, autoselected=True) else: self.app.new_object(panel_type, self.outname, job_init_geometry, plot=True, autoselected=True) diff --git a/flatcamTools/ToolPunchGerber.py b/flatcamTools/ToolPunchGerber.py index 2f984f5f..64250cee 100644 --- a/flatcamTools/ToolPunchGerber.py +++ b/flatcamTools/ToolPunchGerber.py @@ -142,7 +142,7 @@ class ToolPunchGerber(FlatCAMTool): "- Excellon Object-> the Excellon object drills center will serve as reference.\n" "- Fixed Diameter -> will try to use the pads center as reference adding fixed diameter holes.\n" "- Fixed Annular Ring -> will try to keep a set annular ring.\n" - "- Proportional -> will make a Gerber punch hole having the diameter a percentage of the pad diameter.\n") + "- Proportional -> will make a Gerber punch hole having the diameter a percentage of the pad diameter.") ) self.method_punch = RadioSet( [ @@ -604,8 +604,8 @@ class ToolPunchGerber(FlatCAMTool): if grb_obj.apertures[apid]['type'] == 'C' and self.circular_cb.get_value(): if punch_size >= float(grb_obj.apertures[apid]['size']): self.app.inform.emit('[ERROR_NOTCL] %s' % - _(" Could not generate punched hole Gerber because the punch hole size" - "is bigger than some of the apertures in the Gerber object.")) + _("Could not generate punched hole Gerber because the punch hole size" + " is bigger than some of the apertures in the Gerber object.")) return 'fail' else: for elem in grb_obj.apertures[apid]['geometry']: @@ -617,7 +617,7 @@ class ToolPunchGerber(FlatCAMTool): punch_size >= float(grb_obj.apertures[apid]['height']): self.app.inform.emit('[ERROR_NOTCL] %s' % _("Could not generate punched hole Gerber because the punch hole size" - "is bigger than some of the apertures in the Gerber object.")) + " is bigger than some of the apertures in the Gerber object.")) return 'fail' elif round(float(grb_obj.apertures[apid]['width']), self.decimals) == \ round(float(grb_obj.apertures[apid]['height']), self.decimals) and \ diff --git a/flatcamTools/ToolShell.py b/flatcamTools/ToolShell.py index edbb3c7d..c4ff2848 100644 --- a/flatcamTools/ToolShell.py +++ b/flatcamTools/ToolShell.py @@ -13,8 +13,10 @@ from PyQt5.QtWidgets import QVBoxLayout, QWidget from flatcamGUI.GUIElements import _BrowserTextEdit, _ExpandableTextEdit import html import sys +import traceback import tkinter as tk +import tclCommands import gettext import FlatCAMTranslation as fcTranslate @@ -110,7 +112,7 @@ class TermWidget(QWidget): elif style == 'err': text = '%s'\ '%s'\ - %(mtype, body) + % (mtype, body) elif style == 'warning': # text = '%s' % text text = '%s' \ @@ -253,15 +255,90 @@ class TermWidget(QWidget): class FCShell(TermWidget): - def __init__(self, sysShell, version, *args): + def __init__(self, app, version, *args): """ + Initialize the TCL Shell. A dock widget that holds the GUI interface to the FlatCAM command line. - :param sysShell: When instantiated the sysShell will be actually the FlatCAMApp.App() class + :param app: When instantiated the sysShell will be actually the FlatCAMApp.App() class :param version: FlatCAM version string :param args: Parameters passed to the TermWidget parent class """ - TermWidget.__init__(self, version, *args, app=sysShell) - self._sysShell = sysShell + TermWidget.__init__(self, version, *args, app=app) + self.app = app + + self.tcl_commands_storage = {} + + if hasattr(self, 'tcl') and self.tcl is not None: + # self.tcl = None + # new object cannot be used here as it will not remember values created for next passes, + # because tcl was executed in old instance of TCL + pass + else: + self.tcl = tk.Tcl() + self.setup_shell() + + self._edit.set_model_data(self.app.myKeywords) + self.setWindowIcon(self.app.ui.app_icon) + self.setWindowTitle("FlatCAM Shell") + self.resize(*self.app.defaults["global_shell_shape"]) + self._append_to_browser('in', "FlatCAM %s - " % version) + self.append_output('%s\n\n' % _("Type >help< to get started")) + + def setup_shell(self): + """ + Creates shell functions. Runs once at startup. + + :return: None + """ + + ''' + How to implement TCL shell commands: + + All parameters passed to command should be possible to set as None and test it afterwards. + This is because we need to see error caused in tcl, + if None value as default parameter is not allowed TCL will return empty error. + Use: + def mycommand(name=None,...): + + Test it like this: + if name is None: + + self.raise_tcl_error('Argument name is missing.') + + When error occurred, always use raise_tcl_error, never return "some text" on error, + otherwise we will miss it and processing will silently continue. + Method raise_tcl_error pass error into TCL interpreter, then raise python exception, + which is caught in exec_command and displayed in TCL shell console with red background. + Error in console is displayed with TCL trace. + + This behavior works only within main thread, + errors with promissed tasks can be catched and detected only with log. + TODO: this problem have to be addressed somehow, maybe rewrite promissing to be blocking somehow for + TCL shell. + + Kamil's comment: I will rewrite existing TCL commands from time to time to follow this rules. + + ''' + + # Import/overwrite tcl commands as objects of TclCommand descendants + # This modifies the variable 'self.tcl_commands_storage'. + tclCommands.register_all_commands(self.app, self.tcl_commands_storage) + + # Add commands to the tcl interpreter + for cmd in self.tcl_commands_storage: + self.tcl.createcommand(cmd, self.tcl_commands_storage[cmd]['fcn']) + + # Make the tcl puts function return instead of print to stdout + self.tcl.eval(''' + rename puts original_puts + proc puts {args} { + if {[llength $args] == 1} { + return "[lindex $args 0]" + } else { + eval original_puts $args + } + } + ''') def is_command_complete(self, text): def skipQuotes(txt): @@ -293,7 +370,7 @@ class FCShell(TermWidget): :return: output if there was any """ - self._sysShell.report_usage('exec_command') + self.app.report_usage('exec_command') return self.exec_command_test(text, False, no_echo=no_echo) @@ -315,15 +392,15 @@ class FCShell(TermWidget): if no_echo is False: self.open_processing() # Disables input box. - result = self._sysShell.tcl.eval(str(tcl_command_string)) + result = self.tcl.eval(str(tcl_command_string)) if result != 'None' and no_echo is False: self.append_output(result + '\n') except tk.TclError as e: # This will display more precise answer if something in TCL shell fails - result = self._sysShell.tcl.eval("set errorInfo") - self._sysShell.log.error("Exec command Exception: %s" % (result + '\n')) + result = self.tcl.eval("set errorInfo") + self.app.log.error("Exec command Exception: %s" % (result + '\n')) if no_echo is False: self.append_error('ERROR: ' + result + '\n') # Show error in console and just return or in test raise exception @@ -335,39 +412,101 @@ class FCShell(TermWidget): pass return result - # """ - # Code below is unsused. Saved for later. - # """ + def raise_tcl_unknown_error(self, unknownException): + """ + Raise exception if is different type than TclErrorException + this is here mainly to show unknown errors inside TCL shell console. - # parts = re.findall(r'([\w\\:\.]+|".*?")+', text) - # parts = [p.replace('\n', '').replace('"', '') for p in parts] - # self.log.debug(parts) - # try: - # if parts[0] not in commands: - # self.shell.append_error("Unknown command\n") - # return - # - # #import inspect - # #inspect.getargspec(someMethod) - # if (type(commands[parts[0]]["params"]) is not list and len(parts)-1 != commands[parts[0]]["params"]) or \ - # (type(commands[parts[0]]["params"]) is list and len(parts)-1 not in commands[parts[0]]["params"]): - # self.shell.append_error( - # "Command %s takes %d arguments. %d given.\n" % - # (parts[0], commands[parts[0]]["params"], len(parts)-1) - # ) - # return - # - # cmdfcn = commands[parts[0]]["fcn"] - # cmdconv = commands[parts[0]]["converters"] - # if len(parts) - 1 > 0: - # retval = cmdfcn(*[cmdconv[i](parts[i + 1]) for i in range(len(parts)-1)]) - # else: - # retval = cmdfcn() - # retfcn = commands[parts[0]]["retfcn"] - # if retval and retfcn(retval): - # self.shell.append_output(retfcn(retval) + "\n") - # - # except Exception as e: - # #self.shell.append_error(''.join(traceback.format_exc())) - # #self.shell.append_error("?\n") - # self.shell.append_error(str(e) + "\n") + :param unknownException: + :return: + """ + + if not isinstance(unknownException, self.TclErrorException): + self.raise_tcl_error("Unknown error: %s" % str(unknownException)) + else: + raise unknownException + + def display_tcl_error(self, error, error_info=None): + """ + Escape bracket [ with '\' otherwise there is error + "ERROR: missing close-bracket" instead of real error + + :param error: it may be text or exception + :param error_info: Some informations about the error + :return: None + """ + + if isinstance(error, Exception): + exc_type, exc_value, exc_traceback = error_info + if not isinstance(error, self.TclErrorException): + show_trace = 1 + else: + show_trace = int(self.app.defaults['global_verbose_error_level']) + + if show_trace > 0: + trc = traceback.format_list(traceback.extract_tb(exc_traceback)) + trc_formated = [] + for a in reversed(trc): + trc_formated.append(a.replace(" ", " > ").replace("\n", "")) + text = "%s\nPython traceback: %s\n%s" % (exc_value, exc_type, "\n".join(trc_formated)) + else: + text = "%s" % error + else: + text = error + + text = text.replace('[', '\\[').replace('"', '\\"') + self.tcl.eval('return -code error "%s"' % text) + + def raise_tcl_error(self, text): + """ + This method pass exception from python into TCL as error, so we get stacktrace and reason + + :param text: text of error + :return: raise exception + """ + + self.display_tcl_error(text) + raise self.TclErrorException(text) + + class TclErrorException(Exception): + """ + this exception is defined here, to be able catch it if we successfully handle all errors from shell command + """ + pass + + # """ + # Code below is unsused. Saved for later. + # """ + + # parts = re.findall(r'([\w\\:\.]+|".*?")+', text) + # parts = [p.replace('\n', '').replace('"', '') for p in parts] + # self.log.debug(parts) + # try: + # if parts[0] not in commands: + # self.shell.append_error("Unknown command\n") + # return + # + # #import inspect + # #inspect.getargspec(someMethod) + # if (type(commands[parts[0]]["params"]) is not list and len(parts)-1 != commands[parts[0]]["params"]) or \ + # (type(commands[parts[0]]["params"]) is list and len(parts)-1 not in commands[parts[0]]["params"]): + # self.shell.append_error( + # "Command %s takes %d arguments. %d given.\n" % + # (parts[0], commands[parts[0]]["params"], len(parts)-1) + # ) + # return + # + # cmdfcn = commands[parts[0]]["fcn"] + # cmdconv = commands[parts[0]]["converters"] + # if len(parts) - 1 > 0: + # retval = cmdfcn(*[cmdconv[i](parts[i + 1]) for i in range(len(parts)-1)]) + # else: + # retval = cmdfcn() + # retfcn = commands[parts[0]]["retfcn"] + # if retval and retfcn(retval): + # self.shell.append_output(retfcn(retval) + "\n") + # + # except Exception as e: + # #self.shell.append_error(''.join(traceback.format_exc())) + # #self.shell.append_error("?\n") + # self.shell.append_error(str(e) + "\n") diff --git a/flatcamTools/ToolSolderPaste.py b/flatcamTools/ToolSolderPaste.py index f471fd7f..590f57b1 100644 --- a/flatcamTools/ToolSolderPaste.py +++ b/flatcamTools/ToolSolderPaste.py @@ -11,7 +11,6 @@ from flatcamGUI.GUIElements import FCComboBox, FCEntry, FCTable, \ FCInputDialog, FCDoubleSpinner, FCSpinner, FCFileSaveDialog from FlatCAMApp import log from camlib import distance -from FlatCAMObj import FlatCAMCNCjob from flatcamEditors.FlatCAMTextEditor import TextEditor from PyQt5 import QtGui, QtCore, QtWidgets @@ -506,7 +505,8 @@ class SolderPaste(FlatCAMTool): self.flat_geometry = [] # action to be added in the combobox context menu - self.combo_context_del_action = QtWidgets.QAction(QtGui.QIcon(self.app.resource_location + '/trash16.png'), _("Delete Object")) + self.combo_context_del_action = QtWidgets.QAction(QtGui.QIcon(self.app.resource_location + '/trash16.png'), + _("Delete Object")) # ## Signals self.combo_context_del_action.triggered.connect(self.on_delete_object) @@ -966,6 +966,7 @@ class SolderPaste(FlatCAMTool): self.build_ui() return else: + old_tool_dia = '' # identify the old tool_dia and restore the text in tool table for k, v in self.tooltable_tools.items(): if k == tooluid: @@ -1332,9 +1333,9 @@ class SolderPaste(FlatCAMTool): # Object initialization function for app.new_object() # RUNNING ON SEPARATE THREAD! - def job_init(job_obj, app_obj): - assert isinstance(job_obj, FlatCAMCNCjob), \ - "Initializer expected a FlatCAMCNCjob, got %s" % type(job_obj) + def job_init(job_obj): + assert job_obj.kind == 'cncjob', \ + "Initializer expected a CNCJobObject, got %s" % type(job_obj) # this turn on the FlatCAMCNCJob plot for multiple tools job_obj.multitool = True @@ -1364,7 +1365,7 @@ class SolderPaste(FlatCAMTool): res = job_obj.generate_gcode_from_solderpaste_geo(**tooluid_value) if res == 'fail': - log.debug("FlatCAMGeometry.mtool_gen_cncjob() --> generate_from_geometry2() failed") + log.debug("GeometryObject.mtool_gen_cncjob() --> generate_from_geometry2() failed") return 'fail' else: tool_cnc_dict['gcode'] = res diff --git a/flatcamTools/ToolTransform.py b/flatcamTools/ToolTransform.py index 416de316..d9c988e7 100644 --- a/flatcamTools/ToolTransform.py +++ b/flatcamTools/ToolTransform.py @@ -8,7 +8,6 @@ from PyQt5 import QtWidgets from FlatCAMTool import FlatCAMTool from flatcamGUI.GUIElements import FCDoubleSpinner, FCCheckBox, FCButton, OptionalInputSection, EvalEntry2 -from FlatCAMObj import FlatCAMCNCjob import gettext import FlatCAMTranslation as fcTranslate @@ -681,7 +680,7 @@ class ToolTransform(FlatCAMTool): try: # first get a bounding box to fit all for obj in obj_list: - if isinstance(obj, FlatCAMCNCjob): + if obj.kind == 'cncjob': pass else: xmin, ymin, xmax, ymax = obj.bounds() @@ -699,7 +698,7 @@ class ToolTransform(FlatCAMTool): px = 0.5 * (xminimal + xmaximal) py = 0.5 * (yminimal + ymaximal) for sel_obj in obj_list: - if isinstance(sel_obj, FlatCAMCNCjob): + if sel_obj.kind == 'cncjob': self.app.inform.emit(_("CNCJob objects can't be rotated.")) else: sel_obj.rotate(-num, point=(px, py)) @@ -735,7 +734,7 @@ class ToolTransform(FlatCAMTool): else: # first get a bounding box to fit all for obj in obj_list: - if isinstance(obj, FlatCAMCNCjob): + if obj.kind == 'cncjob': pass else: xmin, ymin, xmax, ymax = obj.bounds() @@ -755,7 +754,7 @@ class ToolTransform(FlatCAMTool): # execute mirroring for sel_obj in obj_list: - if isinstance(sel_obj, FlatCAMCNCjob): + if sel_obj.kind == 'cncjob': self.app.inform.emit(_("CNCJob objects can't be mirrored/flipped.")) else: if axis == 'X': @@ -803,7 +802,7 @@ class ToolTransform(FlatCAMTool): try: # first get a bounding box to fit all for obj in obj_list: - if isinstance(obj, FlatCAMCNCjob): + if obj.kind == 'cncjob': pass else: xmin, ymin, xmax, ymax = obj.bounds() @@ -815,7 +814,7 @@ class ToolTransform(FlatCAMTool): yminimal = min(yminlist) for sel_obj in obj_list: - if isinstance(sel_obj, FlatCAMCNCjob): + if sel_obj.kind == 'cncjob': self.app.inform.emit(_("CNCJob objects can't be skewed.")) else: if axis == 'X': @@ -842,15 +841,14 @@ class ToolTransform(FlatCAMTool): ymaxlist = [] if not obj_list: - self.app.inform.emit('[WARNING_NOTCL] %s' % - _("No object selected. Please Select an object to scale!")) + self.app.inform.emit('[WARNING_NOTCL] %s' % _("No object selected. Please Select an object to scale!")) return else: with self.app.proc_container.new(_("Applying Scale")): try: # first get a bounding box to fit all for obj in obj_list: - if isinstance(obj, FlatCAMCNCjob): + if obj.kind == 'cncjob': pass else: xmin, ymin, xmax, ymax = obj.bounds() @@ -873,7 +871,7 @@ class ToolTransform(FlatCAMTool): py = 0 for sel_obj in obj_list: - if isinstance(sel_obj, FlatCAMCNCjob): + if sel_obj.kind == 'cncjob': self.app.inform.emit(_("CNCJob objects can't be scaled.")) else: sel_obj.scale(xfactor, yfactor, point=(px, py)) @@ -883,8 +881,7 @@ class ToolTransform(FlatCAMTool): self.app.object_changed.emit(sel_obj) sel_obj.plot() - self.app.inform.emit('[success] %s %s %s...' % - (_('Scale on the'), str(axis), _('axis done'))) + self.app.inform.emit('[success] %s %s %s...' % (_('Scale on the'), str(axis), _('axis done'))) except Exception as e: self.app.inform.emit('[ERROR_NOTCL] %s %s, %s.' % (_("Due of"), str(e), _("action was not executed."))) @@ -894,14 +891,13 @@ class ToolTransform(FlatCAMTool): obj_list = self.app.collection.get_selected() if not obj_list: - self.app.inform.emit('[WARNING_NOTCL] %s' % - _("No object selected. Please Select an object to offset!")) + self.app.inform.emit('[WARNING_NOTCL] %s' % _("No object selected. Please Select an object to offset!")) return else: with self.app.proc_container.new(_("Applying Offset")): try: for sel_obj in obj_list: - if isinstance(sel_obj, FlatCAMCNCjob): + if sel_obj.kind == 'cncjob': self.app.inform.emit(_("CNCJob objects can't be offset.")) else: if axis == 'X': @@ -915,8 +911,7 @@ class ToolTransform(FlatCAMTool): self.app.object_changed.emit(sel_obj) sel_obj.plot() - self.app.inform.emit('[success] %s %s %s...' % - (_('Offset on the'), str(axis), _('axis done'))) + self.app.inform.emit('[success] %s %s %s...' % (_('Offset on the'), str(axis), _('axis done'))) except Exception as e: self.app.inform.emit('[ERROR_NOTCL] %s %s, %s.' % (_("Due of"), str(e), _("action was not executed."))) @@ -932,7 +927,7 @@ class ToolTransform(FlatCAMTool): with self.app.proc_container.new(_("Applying Buffer")): try: for sel_obj in obj_list: - if isinstance(sel_obj, FlatCAMCNCjob): + if sel_obj.kind == 'cncjob': self.app.inform.emit(_("CNCJob objects can't be buffered.")) elif sel_obj.kind.lower() == 'gerber': sel_obj.buffer(value, join, factor) diff --git a/locale/de/LC_MESSAGES/strings.mo b/locale/de/LC_MESSAGES/strings.mo index eccc5899..bd65f29a 100644 Binary files a/locale/de/LC_MESSAGES/strings.mo and b/locale/de/LC_MESSAGES/strings.mo differ diff --git a/locale/de/LC_MESSAGES/strings.po b/locale/de/LC_MESSAGES/strings.po index 7341ac7f..2dd8ec4d 100644 --- a/locale/de/LC_MESSAGES/strings.po +++ b/locale/de/LC_MESSAGES/strings.po @@ -1,8 +1,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" -"POT-Creation-Date: 2019-12-28 20:20+0200\n" -"PO-Revision-Date: 2019-12-28 20:24+0200\n" +"POT-Creation-Date: 2020-04-27 01:19+0300\n" +"PO-Revision-Date: 2020-04-27 12:30+0300\n" "Last-Translator: \n" "Language-Team: \n" "Language: de\n" @@ -17,17 +17,45 @@ msgstr "" "X-Poedit-SearchPathExcluded-1: doc\n" "X-Poedit-SearchPathExcluded-2: tests\n" -#: FlatCAMApp.py:1040 +#: FlatCAMApp.py:789 FlatCAMApp.py:821 FlatCAMCommon.py:1925 +#: FlatCAMCommon.py:2040 flatcamEditors/FlatCAMGeoEditor.py:500 +#: flatcamEditors/FlatCAMGeoEditor.py:570 +#: flatcamEditors/FlatCAMGeoEditor.py:5152 flatcamGUI/PreferencesUI.py:5509 +#: flatcamGUI/PreferencesUI.py:6056 flatcamTools/ToolNCC.py:431 +#: flatcamTools/ToolNCC.py:2396 flatcamTools/ToolNCC.py:2424 +#: flatcamTools/ToolNCC.py:2694 flatcamTools/ToolNCC.py:2726 +#: flatcamTools/ToolPaint.py:390 flatcamTools/ToolPaint.py:1843 +#: tclCommands/TclCommandCopperClear.py:128 +#: tclCommands/TclCommandCopperClear.py:136 tclCommands/TclCommandPaint.py:127 +msgid "Seed" +msgstr "Keim" + +#: FlatCAMApp.py:795 flatcamGUI/PreferencesUI.py:5588 +#: flatcamGUI/PreferencesUI.py:7695 flatcamTools/ToolCopperThieving.py:126 +#: flatcamTools/ToolNCC.py:535 flatcamTools/ToolNCC.py:1301 +#: flatcamTools/ToolNCC.py:1629 flatcamTools/ToolNCC.py:1914 +#: flatcamTools/ToolNCC.py:1978 flatcamTools/ToolNCC.py:2962 +#: flatcamTools/ToolNCC.py:2971 tclCommands/TclCommandCopperClear.py:190 +msgid "Itself" +msgstr "Selbst" + +#: FlatCAMApp.py:822 flatcamGUI/PreferencesUI.py:6119 +#: flatcamTools/ToolPaint.py:486 flatcamTools/ToolPaint.py:1422 +#: tclCommands/TclCommandPaint.py:162 +msgid "All Polygons" +msgstr "Alle Polygone" + +#: FlatCAMApp.py:1129 msgid "FlatCAM is initializing ..." msgstr "FlatCAM wird initialisiert ..." -#: FlatCAMApp.py:1669 +#: FlatCAMApp.py:1823 msgid "Could not find the Language files. The App strings are missing." msgstr "" "Die Sprachdateien konnten nicht gefunden werden. Die App-Zeichenfolgen " "fehlen." -#: FlatCAMApp.py:1763 +#: FlatCAMApp.py:1917 msgid "" "FlatCAM is initializing ...\n" "Canvas initialization started." @@ -35,7 +63,7 @@ msgstr "" "FlatCAM wird initialisiert ...\n" "Die Canvas-Initialisierung wurde gestartet." -#: FlatCAMApp.py:1781 +#: FlatCAMApp.py:1937 msgid "" "FlatCAM is initializing ...\n" "Canvas initialization started.\n" @@ -45,70 +73,68 @@ msgstr "" "Die Canvas-Initialisierung wurde gestartet.\n" "Canvas-Initialisierung abgeschlossen in" -#: FlatCAMApp.py:2401 -msgid "" -"Type >help< to get started\n" -"\n" -msgstr "" -"Geben Sie> help help< to get started" +msgstr "Geben Sie> help
    Icons by FreepikoNline Web FontsoNline Web Fonts" -#: FlatCAMApp.py:4597 +#: FlatCAMApp.py:4685 msgid "Splash" msgstr "Begrüßungsbildschirm" -#: FlatCAMApp.py:4603 +#: FlatCAMApp.py:4691 msgid "Programmers" msgstr "Programmierer" -#: FlatCAMApp.py:4609 +#: FlatCAMApp.py:4697 msgid "Translators" msgstr "Übersetzer" -#: FlatCAMApp.py:4615 +#: FlatCAMApp.py:4703 msgid "License" msgstr "Lizenz" -#: FlatCAMApp.py:4621 +#: FlatCAMApp.py:4709 msgid "Attributions" msgstr "Zuschreibungen" -#: FlatCAMApp.py:4644 +#: FlatCAMApp.py:4732 msgid "Programmer" msgstr "Programmierer" -#: FlatCAMApp.py:4645 +#: FlatCAMApp.py:4733 msgid "Status" msgstr "Status" -#: FlatCAMApp.py:4646 FlatCAMApp.py:4724 +#: FlatCAMApp.py:4734 FlatCAMApp.py:4812 msgid "E-mail" msgstr "Email" -#: FlatCAMApp.py:4654 +#: FlatCAMApp.py:4742 msgid "BETA Maintainer >= 2019" msgstr "Betreuer >= 2019" -#: FlatCAMApp.py:4721 +#: FlatCAMApp.py:4809 msgid "Language" msgstr "Sprache" -#: FlatCAMApp.py:4722 +#: FlatCAMApp.py:4810 msgid "Translator" msgstr "Übersetzer" -#: FlatCAMApp.py:4723 +#: FlatCAMApp.py:4811 msgid "Corrections" msgstr "Korrekturen" -#: FlatCAMApp.py:4832 FlatCAMApp.py:4840 FlatCAMApp.py:7769 -#: flatcamGUI/FlatCAMGUI.py:473 +#: FlatCAMApp.py:4920 FlatCAMApp.py:4928 FlatCAMApp.py:8076 +#: flatcamGUI/FlatCAMGUI.py:512 msgid "Bookmarks Manager" msgstr "Lesezeichen verwalten" -#: FlatCAMApp.py:4851 +#: FlatCAMApp.py:4939 msgid "" "This entry will resolve to another website if:\n" "\n" @@ -467,27 +491,27 @@ msgstr "" "Wenn Sie keine Informationen zu FlatCAM beta erhalten können\n" "Verwenden Sie den Link zum YouTube-Kanal im Menü Hilfe." -#: FlatCAMApp.py:4858 +#: FlatCAMApp.py:4946 msgid "Alternative website" msgstr "Alternative Website" -#: FlatCAMApp.py:4989 FlatCAMApp.py:7733 +#: FlatCAMApp.py:5050 FlatCAMApp.py:8040 msgid "Preferences saved." msgstr "Einstellungen gespeichert." -#: FlatCAMApp.py:5043 +#: FlatCAMApp.py:5145 msgid "Failed to write factory defaults to file." msgstr "Fehler beim Schreiben der Werkseinstellungen in die Datei." -#: FlatCAMApp.py:5047 +#: FlatCAMApp.py:5149 msgid "Factory defaults saved." msgstr "Werkseinstellungen gespeichert." -#: FlatCAMApp.py:5057 flatcamGUI/FlatCAMGUI.py:3962 +#: FlatCAMApp.py:5159 flatcamGUI/FlatCAMGUI.py:4178 msgid "Application is saving the project. Please wait ..." msgstr "Anwendung speichert das Projekt. Warten Sie mal ..." -#: FlatCAMApp.py:5062 FlatCAMTranslation.py:188 +#: FlatCAMApp.py:5164 FlatCAMTranslation.py:194 msgid "" "There are files/objects modified in FlatCAM. \n" "Do you want to Save the project?" @@ -495,32 +519,32 @@ msgstr "" "In FlatCAM wurden Dateien / Objekte geändert.\n" "Möchten Sie das Projekt speichern?" -#: FlatCAMApp.py:5065 FlatCAMApp.py:8925 FlatCAMTranslation.py:191 +#: FlatCAMApp.py:5167 FlatCAMApp.py:9305 FlatCAMTranslation.py:197 msgid "Save changes" msgstr "Änderungen speichern" -#: FlatCAMApp.py:5306 +#: FlatCAMApp.py:5423 msgid "Selected Excellon file extensions registered with FlatCAM." msgstr "" "Ausgewählte Excellon-Dateierweiterungen, die bei FlatCAM registriert sind." -#: FlatCAMApp.py:5328 +#: FlatCAMApp.py:5445 msgid "Selected GCode file extensions registered with FlatCAM." msgstr "" "Ausgewählte GCode-Dateierweiterungen, die bei FlatCAM registriert sind." -#: FlatCAMApp.py:5350 +#: FlatCAMApp.py:5467 msgid "Selected Gerber file extensions registered with FlatCAM." msgstr "" "Ausgewählte Gerber-Dateierweiterungen, die bei FlatCAM registriert sind." -#: FlatCAMApp.py:5538 FlatCAMApp.py:5595 FlatCAMApp.py:5623 +#: FlatCAMApp.py:5655 FlatCAMApp.py:5714 FlatCAMApp.py:5742 msgid "At least two objects are required for join. Objects currently selected" msgstr "" "Zum Verbinden sind mindestens zwei Objekte erforderlich. Derzeit ausgewählte " "Objekte" -#: FlatCAMApp.py:5547 +#: FlatCAMApp.py:5664 msgid "" "Failed join. The Geometry objects are of different types.\n" "At least one is MultiGeo type and the other is SingleGeo type. A possibility " @@ -538,56 +562,52 @@ msgstr "" "und das Ergebnis entspricht möglicherweise nicht dem, was erwartet wurde.\n" "Überprüfen Sie den generierten GCODE." -#: FlatCAMApp.py:5559 -msgid "Multigeo. Geometry merging finished" -msgstr "Erledigt. Gerber-Bearbeitung beendet" - -#: FlatCAMApp.py:5568 +#: FlatCAMApp.py:5676 FlatCAMApp.py:5686 msgid "Geometry merging finished" msgstr "Zusammenführung der Geometrien beendet" -#: FlatCAMApp.py:5590 +#: FlatCAMApp.py:5709 msgid "Failed. Excellon joining works only on Excellon objects." msgstr "" "Gescheitert. Die Zusammenfügung von Excellon funktioniert nur bei Excellon-" "Objekten." -#: FlatCAMApp.py:5600 +#: FlatCAMApp.py:5719 msgid "Excellon merging finished" msgstr "Excellon-Bearbeitung abgeschlossen" -#: FlatCAMApp.py:5618 +#: FlatCAMApp.py:5737 msgid "Failed. Gerber joining works only on Gerber objects." msgstr "" "Gescheitert. Das Zusammenfügen für Gerber-Objekte funktioniert nur bei " "Gerber-Objekten." -#: FlatCAMApp.py:5628 +#: FlatCAMApp.py:5747 msgid "Gerber merging finished" msgstr "Erledigt. Gerber-Bearbeitung beendet" -#: FlatCAMApp.py:5648 FlatCAMApp.py:5683 +#: FlatCAMApp.py:5767 FlatCAMApp.py:5802 msgid "Failed. Select a Geometry Object and try again." msgstr "" "Gescheitert. Wählen Sie ein Geometrieobjekt aus und versuchen Sie es erneut." -#: FlatCAMApp.py:5652 FlatCAMApp.py:5688 +#: FlatCAMApp.py:5771 FlatCAMApp.py:5807 msgid "Expected a FlatCAMGeometry, got" msgstr "Erwartete eine FlatCAMGeometry, fand" -#: FlatCAMApp.py:5665 +#: FlatCAMApp.py:5784 msgid "A Geometry object was converted to MultiGeo type." msgstr "Ein Geometrieobjekt wurde in den MultiGeo-Typ konvertiert." -#: FlatCAMApp.py:5703 +#: FlatCAMApp.py:5822 msgid "A Geometry object was converted to SingleGeo type." msgstr "Ein Geometrieobjekt wurde in den SingleGeo-Typ konvertiert." -#: FlatCAMApp.py:5919 +#: FlatCAMApp.py:6049 msgid "Toggle Units" msgstr "Einheiten wechseln" -#: FlatCAMApp.py:5921 +#: FlatCAMApp.py:6051 msgid "" "Changing the units of the project\n" "will scale all objects.\n" @@ -599,45 +619,41 @@ msgstr "" "aller Objekte entsprechend skaliert.\n" "Wollen Sie Fortsetzen?" -#: FlatCAMApp.py:5924 FlatCAMApp.py:6929 FlatCAMApp.py:7005 FlatCAMApp.py:9290 -#: FlatCAMApp.py:9304 FlatCAMApp.py:9658 FlatCAMApp.py:9669 +#: FlatCAMApp.py:6054 FlatCAMApp.py:6929 FlatCAMApp.py:7006 FlatCAMApp.py:9680 +#: FlatCAMApp.py:9694 FlatCAMApp.py:10027 FlatCAMApp.py:10037 msgid "Ok" msgstr "Ok" -#: FlatCAMApp.py:5973 +#: FlatCAMApp.py:6103 msgid "Converted units to" msgstr "Einheiten wurden umgerechnet in" -#: FlatCAMApp.py:5987 -msgid "Units conversion cancelled." -msgstr " Einheitenumrechnung abgebrochen." - -#: FlatCAMApp.py:6613 +#: FlatCAMApp.py:6744 msgid "Detachable Tabs" msgstr "Abnehmbare Laschen" -#: FlatCAMApp.py:6828 FlatCAMApp.py:6889 FlatCAMApp.py:7560 FlatCAMApp.py:7622 -#: FlatCAMApp.py:7688 +#: FlatCAMApp.py:6818 FlatCAMApp.py:6862 FlatCAMApp.py:6890 FlatCAMApp.py:7823 +#: FlatCAMApp.py:7891 FlatCAMApp.py:7995 msgid "Preferences" msgstr "Einstellungen" -#: FlatCAMApp.py:6831 +#: FlatCAMApp.py:6824 msgid "Preferences applied." msgstr "Einstellungen werden angewendet." -#: FlatCAMApp.py:6894 +#: FlatCAMApp.py:6895 msgid "Preferences closed without saving." msgstr "Einstellungen geschlossen ohne zu speichern." -#: FlatCAMApp.py:6917 flatcamTools/ToolNonCopperClear.py:591 -#: flatcamTools/ToolNonCopperClear.py:987 flatcamTools/ToolPaint.py:502 -#: flatcamTools/ToolSolderPaste.py:562 flatcamTools/ToolSolderPaste.py:892 +#: FlatCAMApp.py:6918 flatcamTools/ToolNCC.py:932 flatcamTools/ToolNCC.py:1426 +#: flatcamTools/ToolPaint.py:858 flatcamTools/ToolSolderPaste.py:568 +#: flatcamTools/ToolSolderPaste.py:893 msgid "Please enter a tool diameter with non-zero value, in Float format." msgstr "" "Bitte geben Sie einen Werkzeugdurchmesser ungleich Null im Float-Format ein." -#: FlatCAMApp.py:6922 flatcamTools/ToolNonCopperClear.py:595 -#: flatcamTools/ToolPaint.py:506 flatcamTools/ToolSolderPaste.py:566 +#: FlatCAMApp.py:6922 flatcamTools/ToolNCC.py:936 flatcamTools/ToolPaint.py:862 +#: flatcamTools/ToolSolderPaste.py:572 msgid "Adding Tool cancelled" msgstr "Addierwerkzeug abgebrochen" @@ -650,11 +666,11 @@ msgstr "" "ist.\n" "Gehen Sie zu Einstellungen -> Allgemein - Erweiterte Optionen anzeigen." -#: FlatCAMApp.py:7000 +#: FlatCAMApp.py:7001 msgid "Delete objects" msgstr "Objekte löschen" -#: FlatCAMApp.py:7003 +#: FlatCAMApp.py:7004 msgid "" "Are you sure you want to permanently delete\n" "the selected objects?" @@ -662,108 +678,150 @@ msgstr "" "Möchten Sie die ausgewählten Objekte\n" "wirklich dauerhaft löschen?" -#: FlatCAMApp.py:7034 +#: FlatCAMApp.py:7042 msgid "Object(s) deleted" msgstr "Objekt (e) gelöscht" -#: FlatCAMApp.py:7038 flatcamTools/ToolDblSided.py:713 +#: FlatCAMApp.py:7046 FlatCAMApp.py:7201 flatcamTools/ToolDblSided.py:819 msgid "Failed. No object(s) selected..." msgstr "Gescheitert. Kein Objekt ausgewählt ..." -#: FlatCAMApp.py:7040 +#: FlatCAMApp.py:7048 msgid "Save the work in Editor and try again ..." msgstr "Speichern Sie den Editor und versuchen Sie es erneut ..." -#: FlatCAMApp.py:7070 +#: FlatCAMApp.py:7077 msgid "Object deleted" msgstr "Objekt (e) gelöscht" -#: FlatCAMApp.py:7097 +#: FlatCAMApp.py:7104 msgid "Click to set the origin ..." msgstr "Klicken Sie hier, um den Ursprung festzulegen ..." -#: FlatCAMApp.py:7119 +#: FlatCAMApp.py:7126 msgid "Setting Origin..." msgstr "Ursprung setzten ..." -#: FlatCAMApp.py:7131 +#: FlatCAMApp.py:7139 FlatCAMApp.py:7241 msgid "Origin set" msgstr "Ursprung gesetzt" -#: FlatCAMApp.py:7138 +#: FlatCAMApp.py:7156 msgid "Origin coordinates specified but incomplete." msgstr "Ursprungskoordinaten angegeben, aber unvollständig." #: FlatCAMApp.py:7197 +msgid "Moving to Origin..." +msgstr "Umzug zum Ursprung ..." + +#: FlatCAMApp.py:7278 msgid "Jump to ..." msgstr "Springen zu ..." -#: FlatCAMApp.py:7198 +#: FlatCAMApp.py:7279 msgid "Enter the coordinates in format X,Y:" msgstr "Geben Sie die Koordinaten im Format X, Y ein:" -#: FlatCAMApp.py:7208 +#: FlatCAMApp.py:7289 msgid "Wrong coordinates. Enter coordinates in format: X,Y" msgstr "Falsche Koordinaten. Koordinaten im Format eingeben: X, Y" -#: FlatCAMApp.py:7288 flatcamEditors/FlatCAMExcEditor.py:3599 -#: flatcamEditors/FlatCAMExcEditor.py:3607 -#: flatcamEditors/FlatCAMGeoEditor.py:4036 -#: flatcamEditors/FlatCAMGeoEditor.py:4051 -#: flatcamEditors/FlatCAMGrbEditor.py:1086 -#: flatcamEditors/FlatCAMGrbEditor.py:1203 -#: flatcamEditors/FlatCAMGrbEditor.py:1489 -#: flatcamEditors/FlatCAMGrbEditor.py:1758 -#: flatcamEditors/FlatCAMGrbEditor.py:4445 -#: flatcamEditors/FlatCAMGrbEditor.py:4460 flatcamGUI/FlatCAMGUI.py:3145 -#: flatcamGUI/FlatCAMGUI.py:3157 +#: FlatCAMApp.py:7367 FlatCAMApp.py:7516 +#: flatcamEditors/FlatCAMExcEditor.py:3622 +#: flatcamEditors/FlatCAMExcEditor.py:3630 +#: flatcamEditors/FlatCAMGeoEditor.py:4349 +#: flatcamEditors/FlatCAMGeoEditor.py:4363 +#: flatcamEditors/FlatCAMGrbEditor.py:1085 +#: flatcamEditors/FlatCAMGrbEditor.py:1202 +#: flatcamEditors/FlatCAMGrbEditor.py:1488 +#: flatcamEditors/FlatCAMGrbEditor.py:1757 +#: flatcamEditors/FlatCAMGrbEditor.py:4489 +#: flatcamEditors/FlatCAMGrbEditor.py:4504 flatcamGUI/FlatCAMGUI.py:3370 +#: flatcamGUI/FlatCAMGUI.py:3382 flatcamTools/ToolAlignObjects.py:393 +#: flatcamTools/ToolAlignObjects.py:415 msgid "Done." msgstr "Fertig." -#: FlatCAMApp.py:7440 FlatCAMApp.py:7511 +#: FlatCAMApp.py:7382 FlatCAMApp.py:9676 FlatCAMApp.py:9771 FlatCAMApp.py:9812 +#: FlatCAMApp.py:9853 FlatCAMApp.py:9894 FlatCAMApp.py:9935 FlatCAMApp.py:9979 +#: FlatCAMApp.py:10023 FlatCAMApp.py:10511 FlatCAMApp.py:10515 +#: flatcamTools/ToolProperties.py:116 +msgid "No object selected." +msgstr "Kein Objekt ausgewählt." + +#: FlatCAMApp.py:7401 +msgid "Bottom-Left" +msgstr "Unten links" + +#: FlatCAMApp.py:7402 flatcamGUI/PreferencesUI.py:8111 +#: flatcamTools/ToolCalibration.py:159 +msgid "Top-Left" +msgstr "Oben links" + +#: FlatCAMApp.py:7403 flatcamGUI/PreferencesUI.py:8112 +#: flatcamTools/ToolCalibration.py:160 +msgid "Bottom-Right" +msgstr "Unten rechts" + +#: FlatCAMApp.py:7404 +msgid "Top-Right" +msgstr "Oben rechts" + +#: FlatCAMApp.py:7405 flatcamGUI/ObjectUI.py:2624 +msgid "Center" +msgstr "Center" + +#: FlatCAMApp.py:7425 +msgid "Locate ..." +msgstr "Lokalisieren ..." + +#: FlatCAMApp.py:7686 FlatCAMApp.py:7763 msgid "No object is selected. Select an object and try again." msgstr "" "Es ist kein Objekt ausgewählt. Wählen Sie ein Objekt und versuchen Sie es " "erneut." -#: FlatCAMApp.py:7531 +#: FlatCAMApp.py:7789 msgid "" "Aborting. The current task will be gracefully closed as soon as possible..." msgstr "" "Abbrechen. Die aktuelle Aufgabe wird so schnell wie möglich ordnungsgemäß " "abgeschlossen ..." -#: FlatCAMApp.py:7537 +#: FlatCAMApp.py:7795 msgid "The current task was gracefully closed on user request..." msgstr "" "Die aktuelle Aufgabe wurde auf Benutzeranforderung ordnungsgemäß " "geschlossen ..." -#: FlatCAMApp.py:7619 +#: FlatCAMApp.py:7888 msgid "Preferences edited but not saved." msgstr "Einstellungen bearbeitet, aber nicht gespeichert." -#: FlatCAMApp.py:7633 FlatCAMApp.py:7645 FlatCAMApp.py:7662 FlatCAMApp.py:7679 -#: FlatCAMApp.py:7739 FlatCAMCommon.py:1181 FlatCAMCommon.py:1356 -#: FlatCAMObj.py:4256 +#: FlatCAMApp.py:7905 FlatCAMApp.py:7933 FlatCAMApp.py:7960 FlatCAMApp.py:7979 +#: FlatCAMApp.py:8046 FlatCAMCommon.py:1182 FlatCAMCommon.py:1357 +#: FlatCAMCommon.py:2612 FlatCAMCommon.py:2820 FlatCAMObj.py:4798 +#: flatcamTools/ToolNCC.py:3958 flatcamTools/ToolNCC.py:4042 +#: flatcamTools/ToolPaint.py:3548 flatcamTools/ToolPaint.py:3633 msgid "Tools Database" msgstr "Werkzeugdatenbank" -#: FlatCAMApp.py:7659 +#: FlatCAMApp.py:7957 msgid "Tools in Tools Database edited but not saved." msgstr "Werkzeugdatenbank geschlossen ohne zu speichern." -#: FlatCAMApp.py:7683 +#: FlatCAMApp.py:7983 flatcamTools/ToolNCC.py:3965 +#: flatcamTools/ToolPaint.py:3555 msgid "Tool from DB added in Tool Table." msgstr "Werkzeug aus Werkzeugdatenbank zur Werkzeugtabelle hinzugefügt." -#: FlatCAMApp.py:7685 +#: FlatCAMApp.py:7985 msgid "Adding tool from DB is not allowed for this object." msgstr "" "Das Hinzufügen von Werkzeugen aus der Datenbank ist für dieses Objekt nicht " "zulässig." -#: FlatCAMApp.py:7719 +#: FlatCAMApp.py:8026 msgid "" "One or more values are changed.\n" "Do you want to save the Preferences?" @@ -771,11 +829,11 @@ msgstr "" "Ein oder mehrere Werte werden geändert.\n" "Möchten Sie die Einstellungen speichern?" -#: FlatCAMApp.py:7721 flatcamGUI/FlatCAMGUI.py:222 +#: FlatCAMApp.py:8028 flatcamGUI/FlatCAMGUI.py:291 msgid "Save Preferences" msgstr "Einstellungen speichern" -#: FlatCAMApp.py:7745 +#: FlatCAMApp.py:8052 msgid "" "One or more Tools are edited.\n" "Do you want to update the Tools Database?" @@ -783,174 +841,176 @@ msgstr "" "Ein oder mehrere Werkzeuge wurden geändert.\n" "Möchten Sie die Werkzeugdatenbank aktualisieren?" -#: FlatCAMApp.py:7747 +#: FlatCAMApp.py:8054 msgid "Save Tools Database" msgstr "Werkzeugdatenbank speichern" -#: FlatCAMApp.py:7766 FlatCAMApp.py:9897 FlatCAMObj.py:6509 +#: FlatCAMApp.py:8073 FlatCAMApp.py:10261 FlatCAMObj.py:7089 msgid "Code Editor" msgstr "Code-Editor" -#: FlatCAMApp.py:7784 +#: FlatCAMApp.py:8095 msgid "No object selected to Flip on Y axis." msgstr "Kein Objekt ausgewählt, um auf der Y-Achse zu spiegeln." -#: FlatCAMApp.py:7810 +#: FlatCAMApp.py:8121 msgid "Flip on Y axis done." msgstr "Y-Achse spiegeln fertig." -#: FlatCAMApp.py:7812 FlatCAMApp.py:7854 -#: flatcamEditors/FlatCAMGrbEditor.py:5858 +#: FlatCAMApp.py:8123 FlatCAMApp.py:8171 +#: flatcamEditors/FlatCAMGrbEditor.py:5893 msgid "Flip action was not executed." msgstr "Flip-Aktion wurde nicht ausgeführt." -#: FlatCAMApp.py:7826 +#: FlatCAMApp.py:8143 msgid "No object selected to Flip on X axis." msgstr "Es wurde kein Objekt zum Spiegeln auf der X-Achse ausgewählt." -#: FlatCAMApp.py:7852 +#: FlatCAMApp.py:8169 msgid "Flip on X axis done." msgstr "Flip on X axis done." -#: FlatCAMApp.py:7868 +#: FlatCAMApp.py:8191 msgid "No object selected to Rotate." msgstr "Es wurde kein Objekt zum Drehen ausgewählt." -#: FlatCAMApp.py:7871 FlatCAMApp.py:7918 FlatCAMApp.py:7951 +#: FlatCAMApp.py:8194 FlatCAMApp.py:8247 FlatCAMApp.py:8286 msgid "Transform" msgstr "Verwandeln" -#: FlatCAMApp.py:7871 FlatCAMApp.py:7918 FlatCAMApp.py:7951 +#: FlatCAMApp.py:8194 FlatCAMApp.py:8247 FlatCAMApp.py:8286 msgid "Enter the Angle value:" msgstr "Geben Sie den Winkelwert ein:" -#: FlatCAMApp.py:7902 +#: FlatCAMApp.py:8225 msgid "Rotation done." msgstr "Rotation abgeschlossen." -#: FlatCAMApp.py:7904 +#: FlatCAMApp.py:8227 msgid "Rotation movement was not executed." msgstr "Drehbewegung wurde nicht ausgeführt." -#: FlatCAMApp.py:7916 +#: FlatCAMApp.py:8245 msgid "No object selected to Skew/Shear on X axis." msgstr "Auf der X-Achse wurde kein Objekt zum Neigen / Schneiden ausgewählt." -#: FlatCAMApp.py:7938 +#: FlatCAMApp.py:8267 msgid "Skew on X axis done." msgstr "Neigung auf der X-Achse." -#: FlatCAMApp.py:7949 +#: FlatCAMApp.py:8284 msgid "No object selected to Skew/Shear on Y axis." msgstr "Kein Objekt für Neigung / Schneiden auf der Y-Achse ausgewählt." -#: FlatCAMApp.py:7971 +#: FlatCAMApp.py:8306 msgid "Skew on Y axis done." msgstr "Neigung auf der Y-Achse." -#: FlatCAMApp.py:8119 FlatCAMApp.py:8166 flatcamGUI/FlatCAMGUI.py:449 -#: flatcamGUI/FlatCAMGUI.py:1612 +#: FlatCAMApp.py:8457 FlatCAMApp.py:8504 flatcamGUI/FlatCAMGUI.py:488 +#: flatcamGUI/FlatCAMGUI.py:1713 msgid "Select All" msgstr "Select All" -#: FlatCAMApp.py:8123 FlatCAMApp.py:8170 flatcamGUI/FlatCAMGUI.py:451 +#: FlatCAMApp.py:8461 FlatCAMApp.py:8508 flatcamGUI/FlatCAMGUI.py:490 msgid "Deselect All" msgstr "Alle abwählen" -#: FlatCAMApp.py:8186 +#: FlatCAMApp.py:8524 msgid "All objects are selected." msgstr "Alle Objekte werden ausgewählt." -#: FlatCAMApp.py:8196 +#: FlatCAMApp.py:8534 msgid "Objects selection is cleared." msgstr "Die Objektauswahl wird gelöscht." -#: FlatCAMApp.py:8216 flatcamGUI/FlatCAMGUI.py:1605 +#: FlatCAMApp.py:8554 flatcamGUI/FlatCAMGUI.py:1706 msgid "Grid On/Off" msgstr "Raster ein/aus" -#: FlatCAMApp.py:8228 flatcamEditors/FlatCAMGeoEditor.py:940 -#: flatcamEditors/FlatCAMGrbEditor.py:2574 -#: flatcamEditors/FlatCAMGrbEditor.py:5431 flatcamGUI/ObjectUI.py:1304 -#: flatcamTools/ToolDblSided.py:187 flatcamTools/ToolDblSided.py:245 -#: flatcamTools/ToolNonCopperClear.py:286 flatcamTools/ToolPaint.py:188 -#: flatcamTools/ToolSolderPaste.py:121 flatcamTools/ToolSolderPaste.py:591 -#: flatcamTools/ToolTransform.py:310 +#: FlatCAMApp.py:8566 flatcamEditors/FlatCAMGeoEditor.py:940 +#: flatcamEditors/FlatCAMGrbEditor.py:2580 +#: flatcamEditors/FlatCAMGrbEditor.py:5475 flatcamGUI/ObjectUI.py:1593 +#: flatcamTools/ToolDblSided.py:193 flatcamTools/ToolDblSided.py:426 +#: flatcamTools/ToolNCC.py:294 flatcamTools/ToolNCC.py:631 +#: flatcamTools/ToolPaint.py:277 flatcamTools/ToolPaint.py:676 +#: flatcamTools/ToolSolderPaste.py:123 flatcamTools/ToolSolderPaste.py:597 +#: flatcamTools/ToolTransform.py:479 msgid "Add" msgstr "Hinzufügen" -#: FlatCAMApp.py:8230 FlatCAMObj.py:3963 -#: flatcamEditors/FlatCAMGrbEditor.py:2579 -#: flatcamEditors/FlatCAMGrbEditor.py:2727 flatcamGUI/FlatCAMGUI.py:680 -#: flatcamGUI/FlatCAMGUI.py:991 flatcamGUI/FlatCAMGUI.py:2018 -#: flatcamGUI/FlatCAMGUI.py:2161 flatcamGUI/FlatCAMGUI.py:2559 -#: flatcamGUI/ObjectUI.py:1330 flatcamTools/ToolNonCopperClear.py:298 -#: flatcamTools/ToolPaint.py:200 flatcamTools/ToolSolderPaste.py:127 -#: flatcamTools/ToolSolderPaste.py:594 +#: FlatCAMApp.py:8568 FlatCAMObj.py:4416 +#: flatcamEditors/FlatCAMGrbEditor.py:2585 +#: flatcamEditors/FlatCAMGrbEditor.py:2733 flatcamGUI/FlatCAMGUI.py:736 +#: flatcamGUI/FlatCAMGUI.py:1059 flatcamGUI/FlatCAMGUI.py:2126 +#: flatcamGUI/FlatCAMGUI.py:2269 flatcamGUI/FlatCAMGUI.py:2733 +#: flatcamGUI/ObjectUI.py:1621 flatcamTools/ToolNCC.py:316 +#: flatcamTools/ToolNCC.py:637 flatcamTools/ToolPaint.py:299 +#: flatcamTools/ToolPaint.py:682 flatcamTools/ToolSolderPaste.py:129 +#: flatcamTools/ToolSolderPaste.py:600 msgid "Delete" msgstr "Löschen" -#: FlatCAMApp.py:8243 +#: FlatCAMApp.py:8584 msgid "New Grid ..." msgstr "Neues Raster ..." -#: FlatCAMApp.py:8244 +#: FlatCAMApp.py:8585 msgid "Enter a Grid Value:" msgstr "Geben Sie einen Rasterwert ein:" -#: FlatCAMApp.py:8252 FlatCAMApp.py:8279 +#: FlatCAMApp.py:8593 FlatCAMApp.py:8620 msgid "Please enter a grid value with non-zero value, in Float format." msgstr "" "Bitte geben Sie im Float-Format einen Rasterwert mit einem Wert ungleich " "Null ein." -#: FlatCAMApp.py:8258 +#: FlatCAMApp.py:8599 msgid "New Grid added" msgstr "Neues Raster" -#: FlatCAMApp.py:8261 +#: FlatCAMApp.py:8602 msgid "Grid already exists" msgstr "Netz existiert bereits" -#: FlatCAMApp.py:8264 +#: FlatCAMApp.py:8605 msgid "Adding New Grid cancelled" msgstr "Neues Netz wurde abgebrochen" -#: FlatCAMApp.py:8286 +#: FlatCAMApp.py:8627 msgid " Grid Value does not exist" msgstr " Rasterwert existiert nicht" -#: FlatCAMApp.py:8289 +#: FlatCAMApp.py:8630 msgid "Grid Value deleted" msgstr "Rasterwert gelöscht" -#: FlatCAMApp.py:8292 +#: FlatCAMApp.py:8633 msgid "Delete Grid value cancelled" msgstr "Rasterwert löschen abgebrochen" -#: FlatCAMApp.py:8298 +#: FlatCAMApp.py:8639 msgid "Key Shortcut List" msgstr "Tastenkürzel Liste" -#: FlatCAMApp.py:8332 +#: FlatCAMApp.py:8673 msgid " No object selected to copy it's name" msgstr " Kein Objekt zum Kopieren des Namens ausgewählt" -#: FlatCAMApp.py:8336 +#: FlatCAMApp.py:8677 msgid "Name copied on clipboard ..." msgstr "Name in Zwischenablage kopiert ..." -#: FlatCAMApp.py:8534 flatcamEditors/FlatCAMGrbEditor.py:4377 +#: FlatCAMApp.py:8890 flatcamEditors/FlatCAMGrbEditor.py:4421 msgid "Coordinates copied to clipboard." msgstr "Koordinaten in die Zwischenablage kopiert." -#: FlatCAMApp.py:8762 FlatCAMApp.py:8768 FlatCAMApp.py:8774 FlatCAMApp.py:8780 -#: ObjectCollection.py:797 ObjectCollection.py:803 ObjectCollection.py:809 -#: ObjectCollection.py:815 ObjectCollection.py:821 ObjectCollection.py:827 +#: FlatCAMApp.py:9129 FlatCAMApp.py:9135 FlatCAMApp.py:9141 FlatCAMApp.py:9147 +#: ObjectCollection.py:911 ObjectCollection.py:917 ObjectCollection.py:923 +#: ObjectCollection.py:929 ObjectCollection.py:935 ObjectCollection.py:941 msgid "selected" msgstr "ausgewählt" -#: FlatCAMApp.py:8922 +#: FlatCAMApp.py:9302 msgid "" "There are files/objects opened in FlatCAM.\n" "Creating a New project will delete them.\n" @@ -960,385 +1020,278 @@ msgstr "" "Wenn Sie ein neues Projekt erstellen, werden diese gelöscht.\n" "Möchten Sie das Projekt speichern?" -#: FlatCAMApp.py:8944 +#: FlatCAMApp.py:9323 msgid "New Project created" msgstr "Neues Projekt erstellt" -#: FlatCAMApp.py:9079 FlatCAMApp.py:9083 flatcamGUI/FlatCAMGUI.py:767 -#: flatcamGUI/FlatCAMGUI.py:2352 +#: FlatCAMApp.py:9471 FlatCAMApp.py:9475 flatcamGUI/FlatCAMGUI.py:821 +#: flatcamGUI/FlatCAMGUI.py:2504 msgid "Open Gerber" msgstr "Gerber öffnen" -#: FlatCAMApp.py:9090 +#: FlatCAMApp.py:9480 FlatCAMApp.py:9517 FlatCAMApp.py:9559 FlatCAMApp.py:9629 +#: FlatCAMApp.py:10380 FlatCAMApp.py:11552 FlatCAMApp.py:11613 +msgid "" +"Canvas initialization started.\n" +"Canvas initialization finished in" +msgstr "" +"Die Canvas-Initialisierung wurde gestartet.\n" +"Canvas-Initialisierung abgeschlossen in" + +#: FlatCAMApp.py:9482 msgid "Opening Gerber file." msgstr "Gerber-Datei öffnen." -#: FlatCAMApp.py:9096 -msgid "Open Gerber cancelled." -msgstr "Öffnen der Gerberdatei abgebrochen." - -#: FlatCAMApp.py:9117 FlatCAMApp.py:9121 flatcamGUI/FlatCAMGUI.py:769 -#: flatcamGUI/FlatCAMGUI.py:2354 +#: FlatCAMApp.py:9509 FlatCAMApp.py:9513 flatcamGUI/FlatCAMGUI.py:823 +#: flatcamGUI/FlatCAMGUI.py:2506 msgid "Open Excellon" msgstr "Excellon öffnen" -#: FlatCAMApp.py:9127 +#: FlatCAMApp.py:9519 msgid "Opening Excellon file." msgstr "Excellon-Datei öffnen." -#: FlatCAMApp.py:9133 -msgid " Open Excellon cancelled." -msgstr " Öffnen der Excellon-Datei abgebrochen." - -#: FlatCAMApp.py:9157 FlatCAMApp.py:9161 +#: FlatCAMApp.py:9550 FlatCAMApp.py:9554 msgid "Open G-Code" msgstr "G-Code öffnen" -#: FlatCAMApp.py:9168 +#: FlatCAMApp.py:9561 msgid "Opening G-Code file." msgstr "Öffnen der G-Code-Datei." -#: FlatCAMApp.py:9174 -msgid "Open G-Code cancelled." -msgstr "Öffnen der G-Code-Datei abgebrochen." - -#: FlatCAMApp.py:9192 FlatCAMApp.py:9195 flatcamGUI/FlatCAMGUI.py:1614 +#: FlatCAMApp.py:9584 FlatCAMApp.py:9587 flatcamGUI/FlatCAMGUI.py:1715 msgid "Open Project" msgstr "Projekt öffnen" -#: FlatCAMApp.py:9204 -msgid "Open Project cancelled." -msgstr "Projektdatei öffnen abgebrochen." - -#: FlatCAMApp.py:9228 FlatCAMApp.py:9232 +#: FlatCAMApp.py:9620 FlatCAMApp.py:9624 msgid "Open HPGL2" msgstr "HPGL2 öffnen" -#: FlatCAMApp.py:9239 +#: FlatCAMApp.py:9631 msgid "Opening HPGL2 file." msgstr "HPGL2-Datei öffnen." -#: FlatCAMApp.py:9244 -msgid "Open HPGL2 file cancelled." -msgstr "Öffnen der HPGL2-Datei abgebrochen." - -#: FlatCAMApp.py:9262 FlatCAMApp.py:9265 +#: FlatCAMApp.py:9654 FlatCAMApp.py:9657 msgid "Open Configuration File" msgstr "Einstellungsdatei öffne" -#: FlatCAMApp.py:9270 -msgid "Open Config cancelled." -msgstr "Öffnen der Konfigurationsdatei abgebrochen." - -#: FlatCAMApp.py:9286 FlatCAMApp.py:9654 FlatCAMApp.py:10124 -#: FlatCAMApp.py:10128 -msgid "No object selected." -msgstr "Kein Objekt ausgewählt." - -#: FlatCAMApp.py:9287 FlatCAMApp.py:9655 +#: FlatCAMApp.py:9677 FlatCAMApp.py:10024 msgid "Please Select a Geometry object to export" msgstr "Bitte wählen Sie ein Geometrieobjekt zum Exportieren aus" -#: FlatCAMApp.py:9301 +#: FlatCAMApp.py:9691 msgid "Only Geometry, Gerber and CNCJob objects can be used." msgstr "Es können nur Geometrie-, Gerber- und CNCJob-Objekte verwendet werden." -#: FlatCAMApp.py:9314 FlatCAMApp.py:9318 flatcamTools/ToolQRCode.py:827 -#: flatcamTools/ToolQRCode.py:831 +#: FlatCAMApp.py:9704 FlatCAMApp.py:9708 flatcamTools/ToolQRCode.py:829 +#: flatcamTools/ToolQRCode.py:833 msgid "Export SVG" msgstr "SVG exportieren" -#: FlatCAMApp.py:9324 flatcamTools/ToolQRCode.py:836 -msgid " Export SVG cancelled." -msgstr " Export von SVG abgebrochen." - -#: FlatCAMApp.py:9345 +#: FlatCAMApp.py:9733 msgid "Data must be a 3D array with last dimension 3 or 4" msgstr "Daten müssen ein 3D-Array mit der letzten Dimension 3 oder 4 sein" -#: FlatCAMApp.py:9351 FlatCAMApp.py:9355 +#: FlatCAMApp.py:9739 FlatCAMApp.py:9743 msgid "Export PNG Image" msgstr "PNG-Bild exportieren" -#: FlatCAMApp.py:9360 -msgid "Export PNG cancelled." -msgstr "Export PNG abgebrochen." - -#: FlatCAMApp.py:9384 -msgid "No object selected. Please select an Gerber object to export." -msgstr "" -"Kein Objekt ausgewählt. Bitte wählen Sie ein Gerber-Objekt aus, das Sie " -"exportieren möchten." - -#: FlatCAMApp.py:9390 FlatCAMApp.py:9613 +#: FlatCAMApp.py:9776 FlatCAMApp.py:9984 msgid "Failed. Only Gerber objects can be saved as Gerber files..." msgstr "" "Fehlgeschlagen. Nur Gerber-Objekte können als Gerber-Dateien gespeichert " "werden ..." -#: FlatCAMApp.py:9402 +#: FlatCAMApp.py:9788 msgid "Save Gerber source file" msgstr "Gerber-Quelldatei speichern" -#: FlatCAMApp.py:9408 -msgid "Save Gerber source file cancelled." -msgstr "Gerber Quelldatei speichern abgebrochen." - -#: FlatCAMApp.py:9428 -msgid "No object selected. Please select an Script object to export." -msgstr "" -"Kein Objekt ausgewählt. Bitte wählen Sie ein zu exportierendes Script-Objekt." - -#: FlatCAMApp.py:9434 +#: FlatCAMApp.py:9817 msgid "Failed. Only Script objects can be saved as TCL Script files..." msgstr "" "Gescheitert. Nur Skriptobjekte können als TCL-Skriptdateien gespeichert " "werden ..." -#: FlatCAMApp.py:9446 +#: FlatCAMApp.py:9829 msgid "Save Script source file" msgstr "Speichern Sie die Quelldatei des Skripts" -#: FlatCAMApp.py:9452 -msgid "Save Script source file cancelled." -msgstr "Speichern der Skript-Quelldatei abgebrochen." - -#: FlatCAMApp.py:9472 -msgid "No object selected. Please select an Document object to export." -msgstr "" -"Kein Objekt ausgewählt. Bitte wählen Sie ein zu exportierendes " -"Dokumentobjekt aus." - -#: FlatCAMApp.py:9478 +#: FlatCAMApp.py:9858 msgid "Failed. Only Document objects can be saved as Document files..." msgstr "" "Gescheitert. Nur Dokumentobjekte können als Dokumentdateien gespeichert " "werden ..." -#: FlatCAMApp.py:9490 +#: FlatCAMApp.py:9870 msgid "Save Document source file" msgstr "Speichern Sie die Quelldatei des Dokuments" -#: FlatCAMApp.py:9496 -msgid "Save Document source file cancelled." -msgstr "Quelldatei des Dokuments speichern abgebrochen." - -#: FlatCAMApp.py:9516 -msgid "No object selected. Please select an Excellon object to export." -msgstr "" -"Kein Objekt ausgewählt Bitte wählen Sie ein Excellon-Objekt zum Exportieren " -"aus." - -#: FlatCAMApp.py:9522 FlatCAMApp.py:9566 FlatCAMApp.py:10473 +#: FlatCAMApp.py:9899 FlatCAMApp.py:9940 FlatCAMApp.py:10863 msgid "Failed. Only Excellon objects can be saved as Excellon files..." msgstr "" "Fehlgeschlagen. Nur Excellon-Objekte können als Excellon-Dateien gespeichert " "werden ..." -#: FlatCAMApp.py:9530 FlatCAMApp.py:9534 +#: FlatCAMApp.py:9907 FlatCAMApp.py:9911 msgid "Save Excellon source file" msgstr "Speichern Sie die Excellon-Quelldatei" -#: FlatCAMApp.py:9540 -msgid "Saving Excellon source file cancelled." -msgstr "Speichern der Excellon-Quelldatei abgebrochen." - -#: FlatCAMApp.py:9560 -msgid "No object selected. Please Select an Excellon object to export." -msgstr "" -"Kein Objekt ausgewählt. Bitte wählen Sie ein Excellon-Objekt aus, das Sie " -"exportieren möchten." - -#: FlatCAMApp.py:9574 FlatCAMApp.py:9578 +#: FlatCAMApp.py:9948 FlatCAMApp.py:9952 msgid "Export Excellon" msgstr "Excellon exportieren" -#: FlatCAMApp.py:9584 -msgid "Export Excellon cancelled." -msgstr "Export der Excellon-Datei abgebrochen." - -#: FlatCAMApp.py:9607 -msgid "No object selected. Please Select an Gerber object to export." -msgstr "" -"Kein Objekt ausgewählt. Bitte wählen Sie ein Gerber-Objekt aus, das Sie " -"exportieren möchten." - -#: FlatCAMApp.py:9621 FlatCAMApp.py:9625 +#: FlatCAMApp.py:9992 FlatCAMApp.py:9996 msgid "Export Gerber" msgstr "Gerber exportieren" -#: FlatCAMApp.py:9631 -msgid "Export Gerber cancelled." -msgstr "Export der Gerberdatei abgebrochen." - -#: FlatCAMApp.py:9666 +#: FlatCAMApp.py:10034 msgid "Only Geometry objects can be used." msgstr "Es können nur Geometrieobjekte verwendet werden." -#: FlatCAMApp.py:9680 FlatCAMApp.py:9684 +#: FlatCAMApp.py:10048 FlatCAMApp.py:10052 msgid "Export DXF" msgstr "DXF exportieren" -#: FlatCAMApp.py:9691 -msgid "Export DXF cancelled." -msgstr "Export der DXF-Datei abgebrochen." - -#: FlatCAMApp.py:9711 FlatCAMApp.py:9714 +#: FlatCAMApp.py:10077 FlatCAMApp.py:10080 msgid "Import SVG" msgstr "SVG importieren" -#: FlatCAMApp.py:9724 -msgid "Open SVG cancelled." -msgstr "Öffnen der SVG-Datei abgebrochen." - -#: FlatCAMApp.py:9743 FlatCAMApp.py:9747 +#: FlatCAMApp.py:10108 FlatCAMApp.py:10112 msgid "Import DXF" msgstr "Importieren Sie DXF" -#: FlatCAMApp.py:9757 -msgid "Open DXF cancelled." -msgstr "Öffnen der DXF-Datei abgebrochen." - -#: FlatCAMApp.py:9799 +#: FlatCAMApp.py:10163 msgid "Viewing the source code of the selected object." msgstr "Anzeigen des Quellcodes des ausgewählten Objekts." -#: FlatCAMApp.py:9800 FlatCAMObj.py:6495 FlatCAMObj.py:7225 +#: FlatCAMApp.py:10164 FlatCAMObj.py:7075 FlatCAMObj.py:7852 msgid "Loading..." msgstr "Wird geladen..." -#: FlatCAMApp.py:9806 FlatCAMApp.py:9810 +#: FlatCAMApp.py:10170 FlatCAMApp.py:10174 msgid "Select an Gerber or Excellon file to view it's source file." msgstr "" "Wählen Sie eine Gerber- oder Excellon-Datei aus, um die Quelldatei " "anzuzeigen." -#: FlatCAMApp.py:9824 +#: FlatCAMApp.py:10188 msgid "Source Editor" msgstr "Quelleditor" -#: FlatCAMApp.py:9864 FlatCAMApp.py:9871 +#: FlatCAMApp.py:10228 FlatCAMApp.py:10235 msgid "There is no selected object for which to see it's source file code." msgstr "" "Es gibt kein ausgewähltes Objekt, für das man seinen Quelldateien sehen kann." -#: FlatCAMApp.py:9883 +#: FlatCAMApp.py:10247 msgid "Failed to load the source code for the selected object" msgstr "Fehler beim Laden des Quellcodes für das ausgewählte Objekt" -#: FlatCAMApp.py:9925 +#: FlatCAMApp.py:10283 +msgid "Go to Line ..." +msgstr "Gehe zur Linie ..." + +#: FlatCAMApp.py:10284 +msgid "Line:" +msgstr "Linie:" + +#: FlatCAMApp.py:10313 msgid "New TCL script file created in Code Editor." msgstr "Neue TCL-Skriptdatei, die im Code-Editor erstellt wurde." -#: FlatCAMApp.py:9963 FlatCAMApp.py:9965 +#: FlatCAMApp.py:10352 FlatCAMApp.py:10354 msgid "Open TCL script" msgstr "Öffnen Sie das TCL-Skript" -#: FlatCAMApp.py:9969 -msgid "Open TCL script cancelled." -msgstr "Öffnen der TCL-Skriptdatei abgebrochen." - -#: FlatCAMApp.py:9993 +#: FlatCAMApp.py:10382 msgid "Executing FlatCAMScript file." msgstr "FlatCAMScript-Datei wird ausgeführt." -#: FlatCAMApp.py:10000 FlatCAMApp.py:10003 +#: FlatCAMApp.py:10390 FlatCAMApp.py:10393 msgid "Run TCL script" msgstr "Führen Sie das TCL-Skript aus" -#: FlatCAMApp.py:10013 -msgid "Run TCL script cancelled." -msgstr "Ausführen der TCL-Skriptdatei abgebrochen." - -#: FlatCAMApp.py:10029 +#: FlatCAMApp.py:10416 msgid "TCL script file opened in Code Editor and executed." msgstr "TCL-Skriptdatei im Code-Editor geöffnet und ausgeführt." -#: FlatCAMApp.py:10080 FlatCAMApp.py:10086 +#: FlatCAMApp.py:10467 FlatCAMApp.py:10473 msgid "Save Project As ..." msgstr "Projekt speichern als ..." -#: FlatCAMApp.py:10082 flatcamGUI/FlatCAMGUI.py:1051 -#: flatcamGUI/FlatCAMGUI.py:2053 +#: FlatCAMApp.py:10469 flatcamGUI/FlatCAMGUI.py:1119 +#: flatcamGUI/FlatCAMGUI.py:2161 msgid "Project" msgstr "Projekt" -#: FlatCAMApp.py:10091 -msgid "Save Project cancelled." -msgstr "Projekt speichern abgebrochen." - -#: FlatCAMApp.py:10121 +#: FlatCAMApp.py:10508 msgid "FlatCAM objects print" msgstr "FlatCAM-Objekte werden gedruckt" -#: FlatCAMApp.py:10134 FlatCAMApp.py:10141 +#: FlatCAMApp.py:10521 FlatCAMApp.py:10528 msgid "Save Object as PDF ..." msgstr "Objekt als PDF speichern ..." -#: FlatCAMApp.py:10146 -msgid "Save Object PDF cancelled." -msgstr "Objekt speichern PDF abgebrochen." - -#: FlatCAMApp.py:10150 +#: FlatCAMApp.py:10537 msgid "Printing PDF ... Please wait." msgstr "PDF wird gedruckt ... Bitte warten." -#: FlatCAMApp.py:10329 +#: FlatCAMApp.py:10716 msgid "PDF file saved to" msgstr "PDF-Datei gespeichert in" -#: FlatCAMApp.py:10353 +#: FlatCAMApp.py:10741 msgid "Exporting SVG" msgstr "SVG exportieren" -#: FlatCAMApp.py:10397 +#: FlatCAMApp.py:10784 msgid "SVG file exported to" msgstr "SVG-Datei exportiert nach" -#: FlatCAMApp.py:10422 +#: FlatCAMApp.py:10810 msgid "" "Save cancelled because source file is empty. Try to export the Gerber file." msgstr "" "Speichern abgebrochen, da die Quelldatei leer ist. Versuchen Sie einen " "Export der Gerber Datei." -#: FlatCAMApp.py:10568 +#: FlatCAMApp.py:10957 msgid "Excellon file exported to" msgstr "Excellon-Datei exportiert nach" -#: FlatCAMApp.py:10577 +#: FlatCAMApp.py:10966 msgid "Exporting Excellon" msgstr "Excellon exportieren" -#: FlatCAMApp.py:10583 FlatCAMApp.py:10591 +#: FlatCAMApp.py:10971 FlatCAMApp.py:10978 msgid "Could not export Excellon file." msgstr "Excellon-Datei konnte nicht exportiert werden." -#: FlatCAMApp.py:10707 +#: FlatCAMApp.py:11093 msgid "Gerber file exported to" msgstr "Gerberdatei exportiert nach" -#: FlatCAMApp.py:10715 +#: FlatCAMApp.py:11101 msgid "Exporting Gerber" msgstr "Gerber exportieren" -#: FlatCAMApp.py:10721 FlatCAMApp.py:10729 +#: FlatCAMApp.py:11106 FlatCAMApp.py:11113 msgid "Could not export Gerber file." msgstr "Gerber-Datei konnte nicht exportiert werden." -#: FlatCAMApp.py:10763 +#: FlatCAMApp.py:11148 msgid "DXF file exported to" msgstr "DXF-Datei exportiert nach" -#: FlatCAMApp.py:10769 +#: FlatCAMApp.py:11154 msgid "Exporting DXF" msgstr "DXF exportieren" -#: FlatCAMApp.py:10774 FlatCAMApp.py:10781 +#: FlatCAMApp.py:11159 FlatCAMApp.py:11166 msgid "Could not export DXF file." msgstr "DXF-Datei konnte nicht exportiert werden." -#: FlatCAMApp.py:10804 FlatCAMApp.py:10847 flatcamTools/ToolImage.py:278 +#: FlatCAMApp.py:11189 FlatCAMApp.py:11231 flatcamTools/ToolImage.py:277 msgid "" "Not supported type is picked as parameter. Only Geometry and Gerber are " "supported" @@ -1346,82 +1299,82 @@ msgstr "" "Nicht unterstützte Art wird als Parameter ausgewählt. Nur Geometrie und " "Gerber werden unterstützt" -#: FlatCAMApp.py:10814 +#: FlatCAMApp.py:11199 msgid "Importing SVG" msgstr "SVG importieren" -#: FlatCAMApp.py:10825 FlatCAMApp.py:10867 FlatCAMApp.py:10926 -#: FlatCAMApp.py:10993 FlatCAMApp.py:11056 FlatCAMApp.py:11123 -#: FlatCAMApp.py:11161 flatcamTools/ToolImage.py:298 +#: FlatCAMApp.py:11210 FlatCAMApp.py:11250 FlatCAMApp.py:11308 +#: FlatCAMApp.py:11373 FlatCAMApp.py:11437 FlatCAMApp.py:11502 +#: FlatCAMApp.py:11539 flatcamTools/ToolImage.py:297 #: flatcamTools/ToolPDF.py:225 msgid "Opened" msgstr "Geöffnet" -#: FlatCAMApp.py:10856 +#: FlatCAMApp.py:11240 msgid "Importing DXF" msgstr "DXF importieren" -#: FlatCAMApp.py:10892 FlatCAMApp.py:11082 +#: FlatCAMApp.py:11274 FlatCAMApp.py:11461 msgid "Failed to open file" msgstr "Datei konnte nicht geöffnet werden" -#: FlatCAMApp.py:10895 FlatCAMApp.py:11085 +#: FlatCAMApp.py:11277 FlatCAMApp.py:11464 msgid "Failed to parse file" msgstr "Datei konnte nicht analysiert werden" -#: FlatCAMApp.py:10907 +#: FlatCAMApp.py:11289 msgid "Object is not Gerber file or empty. Aborting object creation." msgstr "" "Objekt ist keine Gerberdatei oder leer. Objekterstellung wird abgebrochen." -#: FlatCAMApp.py:10912 +#: FlatCAMApp.py:11294 msgid "Opening Gerber" msgstr "Gerber öffnen" -#: FlatCAMApp.py:10919 +#: FlatCAMApp.py:11301 msgid " Open Gerber failed. Probable not a Gerber file." msgstr " Gerber öffnen ist fehlgeschlagen. Wahrscheinlich keine Gerber-Datei." -#: FlatCAMApp.py:10951 flatcamTools/ToolPcbWizard.py:427 +#: FlatCAMApp.py:11332 flatcamTools/ToolPcbWizard.py:425 msgid "This is not Excellon file." msgstr "Dies ist keine Excellon-Datei." -#: FlatCAMApp.py:10955 +#: FlatCAMApp.py:11336 msgid "Cannot open file" msgstr "Kann Datei nicht öffnen" -#: FlatCAMApp.py:10975 flatcamTools/ToolPDF.py:275 -#: flatcamTools/ToolPcbWizard.py:451 +#: FlatCAMApp.py:11355 flatcamTools/ToolPDF.py:275 +#: flatcamTools/ToolPcbWizard.py:447 msgid "No geometry found in file" msgstr "Keine Geometrie in der Datei gefunden" -#: FlatCAMApp.py:10978 +#: FlatCAMApp.py:11358 msgid "Opening Excellon." msgstr "Eröffnung Excellon." -#: FlatCAMApp.py:10985 +#: FlatCAMApp.py:11365 msgid "Open Excellon file failed. Probable not an Excellon file." msgstr "" "Die Excellon-Datei konnte nicht geöffnet werden. Wahrscheinlich keine " "Excellon-Datei." -#: FlatCAMApp.py:11016 +#: FlatCAMApp.py:11397 msgid "Reading GCode file" msgstr "GCode-Datei wird gelesen" -#: FlatCAMApp.py:11023 +#: FlatCAMApp.py:11404 msgid "Failed to open" msgstr "Gescheitert zu öffnen" -#: FlatCAMApp.py:11031 +#: FlatCAMApp.py:11412 msgid "This is not GCODE" msgstr "Dies ist kein GCODE" -#: FlatCAMApp.py:11036 +#: FlatCAMApp.py:11417 msgid "Opening G-Code." msgstr "G-Code öffnen." -#: FlatCAMApp.py:11045 +#: FlatCAMApp.py:11426 msgid "" "Failed to create CNCJob Object. Probable not a GCode file. Try to load it " "from File menu.\n" @@ -1433,127 +1386,107 @@ msgstr "" "Der Versuch, ein FlatCAM CNCJob-Objekt aus einer G-Code-Datei zu erstellen, " "ist während der Verarbeitung fehlgeschlagen" -#: FlatCAMApp.py:11104 +#: FlatCAMApp.py:11483 msgid "Object is not HPGL2 file or empty. Aborting object creation." msgstr "" "Objekt ist keine HPGL2-Datei oder leer. Objekterstellung wird abgebrochen." -#: FlatCAMApp.py:11109 +#: FlatCAMApp.py:11488 msgid "Opening HPGL2" msgstr "HPGL2 öffnen" -#: FlatCAMApp.py:11116 +#: FlatCAMApp.py:11495 msgid " Open HPGL2 failed. Probable not a HPGL2 file." msgstr " HPGL2 öffnen ist fehlgeschlagen. Wahrscheinlich keine HPGL2-Datei." -#: FlatCAMApp.py:11137 +#: FlatCAMApp.py:11515 msgid "Opening TCL Script..." msgstr "TCL-Skript wird geöffnet ..." -#: FlatCAMApp.py:11145 +#: FlatCAMApp.py:11523 msgid "TCL script file opened in Code Editor." msgstr "TCL-Skriptdatei im Code-Editor geöffnet." -#: FlatCAMApp.py:11148 +#: FlatCAMApp.py:11526 msgid "Failed to open TCL Script." msgstr "TCL-Skript konnte nicht geöffnet werden." -#: FlatCAMApp.py:11176 +#: FlatCAMApp.py:11554 msgid "Opening FlatCAM Config file." msgstr "Öffnen der FlatCAM Config-Datei." -#: FlatCAMApp.py:11204 +#: FlatCAMApp.py:11582 msgid "Failed to open config file" msgstr "Fehler beim Öffnen der Konfigurationsdatei" -#: FlatCAMApp.py:11230 +#: FlatCAMApp.py:11610 msgid "Loading Project ... Please Wait ..." msgstr "Projekt wird geladen ... Bitte warten ..." -#: FlatCAMApp.py:11235 +#: FlatCAMApp.py:11615 msgid "Opening FlatCAM Project file." msgstr "Öffnen der FlatCAM-Projektdatei." -#: FlatCAMApp.py:11245 FlatCAMApp.py:11263 +#: FlatCAMApp.py:11625 FlatCAMApp.py:11643 msgid "Failed to open project file" msgstr "Projektdatei konnte nicht geöffnet werden" -#: FlatCAMApp.py:11300 +#: FlatCAMApp.py:11680 msgid "Loading Project ... restoring" msgstr "Projekt wird geladen ... wird wiederhergestellt" -#: FlatCAMApp.py:11310 +#: FlatCAMApp.py:11690 msgid "Project loaded from" msgstr "Projekt geladen von" -#: FlatCAMApp.py:11373 +#: FlatCAMApp.py:11759 msgid "Redrawing all objects" msgstr "Alle Objekte neu zeichnen" -#: FlatCAMApp.py:11405 -msgid "Available commands:\n" -msgstr "Verfügbare Befehle:\n" - -#: FlatCAMApp.py:11407 -msgid "" -"\n" -"\n" -"Type help for usage.\n" -" Example: help open_gerber" -msgstr "" -"\n" -"\n" -"Geben Sie help für die Verwendung ein.\n" -"Beispiel: help open_gerber" - -#: FlatCAMApp.py:11557 -msgid "Shows list of commands." -msgstr "Zeigt eine Liste von Befehlen an." - -#: FlatCAMApp.py:11619 +#: FlatCAMApp.py:11847 msgid "Failed to load recent item list." msgstr "Fehler beim Laden der letzten Elementliste." -#: FlatCAMApp.py:11627 +#: FlatCAMApp.py:11854 msgid "Failed to parse recent item list." msgstr "Liste der letzten Artikel konnte nicht analysiert werden." -#: FlatCAMApp.py:11638 +#: FlatCAMApp.py:11864 msgid "Failed to load recent projects item list." msgstr "Fehler beim Laden der Artikelliste der letzten Projekte." -#: FlatCAMApp.py:11646 +#: FlatCAMApp.py:11871 msgid "Failed to parse recent project item list." msgstr "" "Fehler beim Analysieren der Liste der zuletzt verwendeten Projektelemente." -#: FlatCAMApp.py:11706 +#: FlatCAMApp.py:11932 msgid "Clear Recent projects" msgstr "Letzte Projekte löschen" -#: FlatCAMApp.py:11730 +#: FlatCAMApp.py:11956 msgid "Clear Recent files" msgstr "Letzte Dateien löschen" -#: FlatCAMApp.py:11747 flatcamGUI/FlatCAMGUI.py:1276 +#: FlatCAMApp.py:11978 flatcamGUI/FlatCAMGUI.py:1348 msgid "Shortcut Key List" msgstr " Liste der Tastenkombinationen " -#: FlatCAMApp.py:11821 +#: FlatCAMApp.py:12058 msgid "Selected Tab - Choose an Item from Project Tab" msgstr "" "Ausgewählte Registerkarte - Wählen Sie ein Element auf der Registerkarte " "\"Projekt\" aus" -#: FlatCAMApp.py:11822 +#: FlatCAMApp.py:12059 msgid "Details" msgstr "Einzelheiten" -#: FlatCAMApp.py:11824 +#: FlatCAMApp.py:12061 msgid "The normal flow when working in FlatCAM is the following:" msgstr "Der normale Ablauf beim Arbeiten in FlatCAM ist der folgende:" -#: FlatCAMApp.py:11825 +#: FlatCAMApp.py:12062 msgid "" "Load/Import a Gerber, Excellon, Gcode, DXF, Raster Image or SVG file into " "FlatCAM using either the toolbars, key shortcuts or even dragging and " @@ -1563,7 +1496,7 @@ msgstr "" "oder SVG-Datei mithilfe der Symbolleisten, Tastenkombinationen oder durch " "Ziehen und Ablegen der Dateien auf der GUI in FlatCAM." -#: FlatCAMApp.py:11828 +#: FlatCAMApp.py:12065 msgid "" "You can also load a FlatCAM project by double clicking on the project file, " "drag and drop of the file into the FLATCAM GUI or through the menu (or " @@ -1573,7 +1506,7 @@ msgstr "" "doppelklicken, sie per Drag & Drop in die FLATCAM-Benutzeroberfläche ziehen " "oder über die in der App angebotenen Menü- (oder Symbolleisten-) Aktionen." -#: FlatCAMApp.py:11831 +#: FlatCAMApp.py:12068 msgid "" "Once an object is available in the Project Tab, by selecting it and then " "focusing on SELECTED TAB (more simpler is to double click the object name in " @@ -1586,7 +1519,7 @@ msgstr "" "AUSGEWÄHLTES TAB mit den Objekteigenschaften entsprechend der Art " "aktualisiert: Gerber, Excellon-, Geometrie- oder CNCJob-Objekt." -#: FlatCAMApp.py:11835 +#: FlatCAMApp.py:12072 msgid "" "If the selection of the object is done on the canvas by single click " "instead, and the SELECTED TAB is in focus, again the object properties will " @@ -1601,7 +1534,7 @@ msgstr "" "doppelklicken, um das Ausgewählte Registerkarte zu öffnen und es zu füllen, " "selbst wenn es unscharf war." -#: FlatCAMApp.py:11839 +#: FlatCAMApp.py:12076 msgid "" "You can change the parameters in this screen and the flow direction is like " "this:" @@ -1609,7 +1542,7 @@ msgstr "" "Sie können die Parameter in diesem Bildschirm ändern und die Flussrichtung " "ist wie folgt:" -#: FlatCAMApp.py:11840 +#: FlatCAMApp.py:12077 msgid "" "Gerber/Excellon Object --> Change Parameter --> Generate Geometry --> " "Geometry Object --> Add tools (change param in Selected Tab) --> Generate " @@ -1622,7 +1555,7 @@ msgstr "" "überprüfen (über CNC bearbeiten) Code) und / oder GCode anhängen / " "voranstellen (ebenfalls in Ausgewählte Registerkarte) -> GCode speichern." -#: FlatCAMApp.py:11844 +#: FlatCAMApp.py:12081 msgid "" "A list of key shortcuts is available through an menu entry in Help --> " "Shortcuts List or through its own key shortcut: F3." @@ -1631,107 +1564,171 @@ msgstr "" "der Hilfe -> Liste der Tastenkombinationen oder über eine eigene " "Tastenkombination: F3." -#: FlatCAMApp.py:11906 +#: FlatCAMApp.py:12145 msgid "Failed checking for latest version. Could not connect." msgstr "" "Fehler bei der Suche nach der neuesten Version. Konnte keine Verbindung " "herstellen." -#: FlatCAMApp.py:11914 +#: FlatCAMApp.py:12152 msgid "Could not parse information about latest version." msgstr "Informationen zur neuesten Version konnten nicht analysiert werden." -#: FlatCAMApp.py:11925 +#: FlatCAMApp.py:12162 msgid "FlatCAM is up to date!" msgstr "FlatCAM ist auf dem neuesten Version!" -#: FlatCAMApp.py:11930 +#: FlatCAMApp.py:12167 msgid "Newer Version Available" msgstr "Neuere Version verfügbar" -#: FlatCAMApp.py:11931 -msgid "" -"There is a newer version of FlatCAM available for download:\n" -"\n" -msgstr "" -"Es gibt eine neuere Version von FlatCAM zum Download:\n" -"\n" +#: FlatCAMApp.py:12169 +msgid "There is a newer version of FlatCAM available for download:" +msgstr "Es gibt eine neuere Version von FlatCAM zum Download:" -#: FlatCAMApp.py:11933 +#: FlatCAMApp.py:12173 msgid "info" msgstr "Info" -#: FlatCAMApp.py:12012 +#: FlatCAMApp.py:12201 +msgid "" +"OpenGL canvas initialization failed. HW or HW configuration not supported." +"Change the graphic engine to Legacy(2D) in Edit -> Preferences -> General " +"tab.\n" +"\n" +msgstr "" +"OpenGL-Canvas-Initialisierung fehlgeschlagen. HW- oder HW-Konfiguration wird " +"nicht unterstützt. Ändern Sie die Grafik-Engine unter Bearbeiten -> " +"Einstellungen -> Registerkarte Allgemein in Legacy (2D).\n" +"\n" + +#: FlatCAMApp.py:12280 msgid "All plots disabled." msgstr "Alle Diagramme sind deaktiviert." -#: FlatCAMApp.py:12019 +#: FlatCAMApp.py:12287 msgid "All non selected plots disabled." msgstr "Alle nicht ausgewählten Diagramme sind deaktiviert." -#: FlatCAMApp.py:12026 +#: FlatCAMApp.py:12294 msgid "All plots enabled." msgstr "Alle Diagramme aktiviert." -#: FlatCAMApp.py:12033 +#: FlatCAMApp.py:12300 msgid "Selected plots enabled..." msgstr "Ausgewählte Diagramme aktiviert ..." -#: FlatCAMApp.py:12042 +#: FlatCAMApp.py:12308 msgid "Selected plots disabled..." msgstr "Ausgewählte Diagramme deaktiviert ..." -#: FlatCAMApp.py:12061 +#: FlatCAMApp.py:12341 msgid "Enabling plots ..." msgstr "Diagramm aktivieren..." -#: FlatCAMApp.py:12101 +#: FlatCAMApp.py:12393 msgid "Disabling plots ..." msgstr "Diagramm deaktivieren..." -#: FlatCAMApp.py:12123 +#: FlatCAMApp.py:12416 msgid "Working ..." msgstr "Arbeiten ..." -#: FlatCAMApp.py:12224 +#: FlatCAMApp.py:12471 flatcamGUI/FlatCAMGUI.py:688 +msgid "Red" +msgstr "Rote" + +#: FlatCAMApp.py:12473 flatcamGUI/FlatCAMGUI.py:691 +msgid "Blue" +msgstr "Blau" + +#: FlatCAMApp.py:12476 flatcamGUI/FlatCAMGUI.py:694 +msgid "Yellow" +msgstr "Gelb" + +#: FlatCAMApp.py:12478 flatcamGUI/FlatCAMGUI.py:697 +msgid "Green" +msgstr "Grün" + +#: FlatCAMApp.py:12480 flatcamGUI/FlatCAMGUI.py:700 +msgid "Purple" +msgstr "Lila" + +#: FlatCAMApp.py:12482 flatcamGUI/FlatCAMGUI.py:703 +msgid "Brown" +msgstr "Braun" + +#: FlatCAMApp.py:12484 FlatCAMApp.py:12540 flatcamGUI/FlatCAMGUI.py:706 +msgid "White" +msgstr "Weiß" + +#: FlatCAMApp.py:12486 flatcamGUI/FlatCAMGUI.py:709 +msgid "Black" +msgstr "Schwarz" + +#: FlatCAMApp.py:12489 flatcamGUI/FlatCAMGUI.py:714 +msgid "Custom" +msgstr "Maßgeschn." + +#: FlatCAMApp.py:12499 flatcamGUI/FlatCAMGUI.py:722 +msgid "Default" +msgstr "Standard" + +#: FlatCAMApp.py:12523 flatcamGUI/FlatCAMGUI.py:719 +msgid "Opacity" +msgstr "Opazität" + +#: FlatCAMApp.py:12525 +msgid "Set alpha level ..." +msgstr "Alpha-Level einstellen ..." + +#: FlatCAMApp.py:12525 flatcamGUI/PreferencesUI.py:6900 +#: flatcamGUI/PreferencesUI.py:8230 flatcamGUI/PreferencesUI.py:8444 +#: flatcamTools/ToolExtractDrills.py:164 flatcamTools/ToolExtractDrills.py:285 +#: flatcamTools/ToolPunchGerber.py:192 flatcamTools/ToolPunchGerber.py:308 +#: flatcamTools/ToolTransform.py:358 +msgid "Value" +msgstr "Wert" + +#: FlatCAMApp.py:12601 msgid "Saving FlatCAM Project" msgstr "FlatCAM-Projekt speichern" -#: FlatCAMApp.py:12243 FlatCAMApp.py:12280 +#: FlatCAMApp.py:12622 FlatCAMApp.py:12658 msgid "Project saved to" msgstr "Projekt gespeichert in" -#: FlatCAMApp.py:12250 +#: FlatCAMApp.py:12629 msgid "The object is used by another application." msgstr "Das Objekt wird von einer anderen Anwendung verwendet." -#: FlatCAMApp.py:12264 +#: FlatCAMApp.py:12643 msgid "Failed to verify project file" msgstr "Fehler beim Überprüfen der Projektdatei" -#: FlatCAMApp.py:12264 FlatCAMApp.py:12272 FlatCAMApp.py:12283 +#: FlatCAMApp.py:12643 FlatCAMApp.py:12651 FlatCAMApp.py:12661 msgid "Retry to save it." msgstr "Versuchen Sie erneut, es zu speichern." -#: FlatCAMApp.py:12272 FlatCAMApp.py:12283 +#: FlatCAMApp.py:12651 FlatCAMApp.py:12661 msgid "Failed to parse saved project file" msgstr "Fehler beim Parsen der Projektdatei" -#: FlatCAMApp.py:12398 +#: FlatCAMApp.py:13145 msgid "The user requested a graceful exit of the current task." msgstr "" "Der Benutzer hat einen ordnungsgemäßen Abschluss der aktuellen Aufgabe " "angefordert." -#: FlatCAMCommon.py:136 FlatCAMCommon.py:163 +#: FlatCAMCommon.py:137 FlatCAMCommon.py:164 msgid "Title" msgstr "Titel" -#: FlatCAMCommon.py:137 FlatCAMCommon.py:167 +#: FlatCAMCommon.py:138 FlatCAMCommon.py:168 msgid "Web Link" msgstr "Weblink" -#: FlatCAMCommon.py:141 +#: FlatCAMCommon.py:142 msgid "" "Index.\n" "The rows in gray color will populate the Bookmarks menu.\n" @@ -1741,7 +1738,7 @@ msgstr "" "Die grauen Zeilen füllen das Lesezeichen-Menü.\n" "Die Anzahl der grauen Zeilen wird in den Einstellungen festgelegt." -#: FlatCAMCommon.py:145 +#: FlatCAMCommon.py:146 msgid "" "Description of the link that is set as an menu action.\n" "Try to keep it short because it is installed as a menu item." @@ -1749,96 +1746,88 @@ msgstr "" "Beschreibung des Links, der als Menüaktion festgelegt wird.\n" "Versuchen Sie es kurz zu halten, da es als Menüelement installiert ist." -#: FlatCAMCommon.py:148 +#: FlatCAMCommon.py:149 msgid "Web Link. E.g: https://your_website.org " msgstr "Weblink. ZB: https://your_website.org " -#: FlatCAMCommon.py:157 +#: FlatCAMCommon.py:158 msgid "New Bookmark" msgstr "Neues Lesezeichen" -#: FlatCAMCommon.py:176 +#: FlatCAMCommon.py:177 msgid "Add Entry" msgstr "Eintrag hinzufügen" -#: FlatCAMCommon.py:177 +#: FlatCAMCommon.py:178 msgid "Remove Entry" msgstr "Eintrag entfernen" -#: FlatCAMCommon.py:178 +#: FlatCAMCommon.py:179 msgid "Export List" msgstr "Liste exportieren" -#: FlatCAMCommon.py:179 +#: FlatCAMCommon.py:180 msgid "Import List" msgstr "Liste importieren" -#: FlatCAMCommon.py:260 +#: FlatCAMCommon.py:261 msgid "Title entry is empty." msgstr "Kein Titel eingegeben." -#: FlatCAMCommon.py:269 +#: FlatCAMCommon.py:270 msgid "Web link entry is empty." msgstr "Keine Internetadresse angegeben." -#: FlatCAMCommon.py:277 +#: FlatCAMCommon.py:278 msgid "Either the Title or the Weblink already in the table." msgstr "" "Entweder Titel oder Internetadresse sind bereits in der Tabelle vorhanden." -#: FlatCAMCommon.py:297 +#: FlatCAMCommon.py:298 msgid "Bookmark added." msgstr "Lesezeichen verwalten." -#: FlatCAMCommon.py:314 +#: FlatCAMCommon.py:315 msgid "This bookmark can not be removed" msgstr "Dieses Lesezeichen kann nicht entfernt werden" -#: FlatCAMCommon.py:345 +#: FlatCAMCommon.py:346 msgid "Bookmark removed." msgstr "Lesezeichen entfernt." -#: FlatCAMCommon.py:360 +#: FlatCAMCommon.py:361 msgid "Export FlatCAM Bookmarks" msgstr "Export der FlatCAM-Lesezeichen" -#: FlatCAMCommon.py:363 flatcamGUI/FlatCAMGUI.py:470 +#: FlatCAMCommon.py:364 flatcamGUI/FlatCAMGUI.py:509 msgid "Bookmarks" msgstr "Lesezeichen" -#: FlatCAMCommon.py:370 -msgid "FlatCAM bookmarks export cancelled." -msgstr "FlatCAM-Lesezeichen-Export abgebrochen." - -#: FlatCAMCommon.py:389 FlatCAMCommon.py:419 +#: FlatCAMCommon.py:390 FlatCAMCommon.py:420 msgid "Could not load bookmarks file." msgstr "Die Lesezeichen-Datei konnte nicht geladen werden." -#: FlatCAMCommon.py:399 +#: FlatCAMCommon.py:400 msgid "Failed to write bookmarks to file." msgstr "Fehler beim Schreiben der Lesezeichen in die Datei." -#: FlatCAMCommon.py:401 +#: FlatCAMCommon.py:402 msgid "Exported bookmarks to" msgstr "Exportierte Lesezeichen nach" -#: FlatCAMCommon.py:407 +#: FlatCAMCommon.py:408 msgid "Import FlatCAM Bookmarks" msgstr "Importieren Sie FlatCAM-Lesezeichen" -#: FlatCAMCommon.py:412 -msgid "FlatCAM bookmarks import cancelled." -msgstr "Import der FlatCAM-Lesezeichen abgebrochen." - -#: FlatCAMCommon.py:426 +#: FlatCAMCommon.py:427 msgid "Imported Bookmarks from" msgstr "Importierte Lesezeichen von" -#: FlatCAMCommon.py:529 +#: FlatCAMCommon.py:530 msgid "Add Geometry Tool in DB" msgstr "Geometriewerkzeug in DB hinzufügen" -#: FlatCAMCommon.py:531 +#: FlatCAMCommon.py:532 FlatCAMCommon.py:2087 msgid "" "Add a new tool in the Tools Database.\n" "It will be used in the Geometry UI.\n" @@ -1848,35 +1837,35 @@ msgstr "" "Es wird in der Geometrie-Benutzeroberfläche verwendet.\n" "Danach können Sie es modifizieren." -#: FlatCAMCommon.py:545 +#: FlatCAMCommon.py:546 FlatCAMCommon.py:2101 msgid "Delete Tool from DB" msgstr "Werkzeug aus DB löschen" -#: FlatCAMCommon.py:547 +#: FlatCAMCommon.py:548 FlatCAMCommon.py:2103 msgid "Remove a selection of tools in the Tools Database." msgstr "Eine Auswahl von Werkzeugen aus der Werkzeugdatenbank entfernen." -#: FlatCAMCommon.py:551 +#: FlatCAMCommon.py:552 FlatCAMCommon.py:2107 msgid "Export DB" msgstr "DB exportieren" -#: FlatCAMCommon.py:553 +#: FlatCAMCommon.py:554 FlatCAMCommon.py:2109 msgid "Save the Tools Database to a custom text file." msgstr "Werkzeugdatenbank als Textdatei speichern." -#: FlatCAMCommon.py:557 +#: FlatCAMCommon.py:558 FlatCAMCommon.py:2113 msgid "Import DB" msgstr "Importieren Sie DB" -#: FlatCAMCommon.py:559 +#: FlatCAMCommon.py:560 FlatCAMCommon.py:2115 msgid "Load the Tools Database information's from a custom text file." msgstr "Werkzeugdatenbank aus einer Textdatei importieren." -#: FlatCAMCommon.py:563 +#: FlatCAMCommon.py:564 FlatCAMCommon.py:2119 msgid "Add Tool from Tools DB" msgstr "Werkzeug aus Werkzeugdatenbank hinzufügen" -#: FlatCAMCommon.py:565 +#: FlatCAMCommon.py:566 FlatCAMCommon.py:2121 msgid "" "Add a new tool in the Tools Table of the\n" "active Geometry object after selecting a tool\n" @@ -1886,138 +1875,147 @@ msgstr "" "aktiven Geometrie hinzu, nachdem Sie das Werkzeug in\n" "der Werkzeugdatenbank ausgewählt haben." -#: FlatCAMCommon.py:601 FlatCAMCommon.py:1276 +#: FlatCAMCommon.py:602 FlatCAMCommon.py:1277 FlatCAMCommon.py:1531 msgid "Tool Name" msgstr "Werkzeugname" -#: FlatCAMCommon.py:602 FlatCAMCommon.py:1278 -#: flatcamEditors/FlatCAMExcEditor.py:1602 flatcamGUI/ObjectUI.py:1295 -#: flatcamTools/ToolNonCopperClear.py:271 flatcamTools/ToolPaint.py:176 +#: FlatCAMCommon.py:603 FlatCAMCommon.py:1279 FlatCAMCommon.py:1544 +#: flatcamEditors/FlatCAMExcEditor.py:1605 flatcamGUI/ObjectUI.py:1343 +#: flatcamGUI/ObjectUI.py:1581 flatcamGUI/PreferencesUI.py:5971 +#: flatcamTools/ToolNCC.py:278 flatcamTools/ToolNCC.py:287 +#: flatcamTools/ToolPaint.py:261 msgid "Tool Dia" msgstr "Werkzeugdurchm" -#: FlatCAMCommon.py:603 FlatCAMCommon.py:1280 flatcamGUI/ObjectUI.py:1278 +#: FlatCAMCommon.py:604 FlatCAMCommon.py:1281 FlatCAMCommon.py:1725 +#: flatcamGUI/ObjectUI.py:1556 msgid "Tool Offset" msgstr "Werkzeugversatz" -#: FlatCAMCommon.py:604 FlatCAMCommon.py:1282 +#: FlatCAMCommon.py:605 FlatCAMCommon.py:1283 FlatCAMCommon.py:1742 msgid "Custom Offset" msgstr "Selbstdefinierter Werkzeugversatz" -#: FlatCAMCommon.py:605 FlatCAMCommon.py:1284 flatcamGUI/ObjectUI.py:304 -#: flatcamGUI/PreferencesUI.py:2217 flatcamGUI/PreferencesUI.py:5036 -#: flatcamTools/ToolNonCopperClear.py:213 +#: FlatCAMCommon.py:606 FlatCAMCommon.py:1285 FlatCAMCommon.py:1709 +#: flatcamGUI/ObjectUI.py:308 flatcamGUI/PreferencesUI.py:2397 +#: flatcamGUI/PreferencesUI.py:5332 flatcamGUI/PreferencesUI.py:5901 +#: flatcamGUI/PreferencesUI.py:5911 flatcamTools/ToolNCC.py:213 +#: flatcamTools/ToolNCC.py:227 flatcamTools/ToolPaint.py:196 msgid "Tool Type" msgstr "Werkzeugtyp" -#: FlatCAMCommon.py:606 FlatCAMCommon.py:1286 +#: FlatCAMCommon.py:607 FlatCAMCommon.py:1287 FlatCAMCommon.py:1557 msgid "Tool Shape" msgstr "Werkzeugform" -#: FlatCAMCommon.py:607 FlatCAMCommon.py:1289 flatcamGUI/ObjectUI.py:345 -#: flatcamGUI/ObjectUI.py:820 flatcamGUI/ObjectUI.py:1405 -#: flatcamGUI/ObjectUI.py:1926 flatcamGUI/PreferencesUI.py:2257 -#: flatcamGUI/PreferencesUI.py:3082 flatcamGUI/PreferencesUI.py:3961 -#: flatcamGUI/PreferencesUI.py:5081 flatcamGUI/PreferencesUI.py:5327 -#: flatcamGUI/PreferencesUI.py:6145 flatcamTools/ToolCalculators.py:114 -#: flatcamTools/ToolCutOut.py:132 flatcamTools/ToolNonCopperClear.py:254 +#: FlatCAMCommon.py:608 FlatCAMCommon.py:1290 FlatCAMCommon.py:1573 +#: flatcamGUI/ObjectUI.py:349 flatcamGUI/ObjectUI.py:899 +#: flatcamGUI/ObjectUI.py:1701 flatcamGUI/ObjectUI.py:2254 +#: flatcamGUI/PreferencesUI.py:2437 flatcamGUI/PreferencesUI.py:3311 +#: flatcamGUI/PreferencesUI.py:4241 flatcamGUI/PreferencesUI.py:5377 +#: flatcamGUI/PreferencesUI.py:5666 flatcamGUI/PreferencesUI.py:5944 +#: flatcamGUI/PreferencesUI.py:5952 flatcamGUI/PreferencesUI.py:6635 +#: flatcamTools/ToolCalculators.py:114 flatcamTools/ToolCutOut.py:139 +#: flatcamTools/ToolNCC.py:260 flatcamTools/ToolNCC.py:268 +#: flatcamTools/ToolPaint.py:243 msgid "Cut Z" msgstr "Schnitttiefe Z" -#: FlatCAMCommon.py:608 FlatCAMCommon.py:1291 +#: FlatCAMCommon.py:609 FlatCAMCommon.py:1292 FlatCAMCommon.py:1587 msgid "MultiDepth" msgstr "Mehrfache Durchgänge" # Abbrev. unclear: Depth Per Pass? # Perhaps better not translate -#: FlatCAMCommon.py:609 FlatCAMCommon.py:1293 +#: FlatCAMCommon.py:610 FlatCAMCommon.py:1294 FlatCAMCommon.py:1600 msgid "DPP" msgstr "DPP" -#: FlatCAMCommon.py:610 FlatCAMCommon.py:1295 +#: FlatCAMCommon.py:611 FlatCAMCommon.py:1296 FlatCAMCommon.py:1756 msgid "V-Dia" msgstr "V-Durchm." -#: FlatCAMCommon.py:611 FlatCAMCommon.py:1297 +#: FlatCAMCommon.py:612 FlatCAMCommon.py:1298 FlatCAMCommon.py:1770 msgid "V-Angle" msgstr "Winkel der V-Form" -#: FlatCAMCommon.py:612 FlatCAMCommon.py:1299 flatcamGUI/ObjectUI.py:839 -#: flatcamGUI/ObjectUI.py:1452 flatcamGUI/PreferencesUI.py:3100 -#: flatcamGUI/PreferencesUI.py:4014 flatcamGUI/PreferencesUI.py:7535 +#: FlatCAMCommon.py:613 FlatCAMCommon.py:1300 FlatCAMCommon.py:1614 +#: FlatCAMObj.py:3661 FlatCAMObj.py:5486 flatcamGUI/ObjectUI.py:945 +#: flatcamGUI/ObjectUI.py:1748 flatcamGUI/PreferencesUI.py:3352 +#: flatcamGUI/PreferencesUI.py:4294 flatcamGUI/PreferencesUI.py:8041 #: flatcamTools/ToolCalibration.py:74 msgid "Travel Z" msgstr "Bewegungshöhe Z (Travel)" # I think this is FeedRate XY -#: FlatCAMCommon.py:613 FlatCAMCommon.py:1301 +#: FlatCAMCommon.py:614 FlatCAMCommon.py:1302 msgid "FR" msgstr "Vorschub (XY)" -#: FlatCAMCommon.py:614 FlatCAMCommon.py:1303 +#: FlatCAMCommon.py:615 FlatCAMCommon.py:1304 msgid "FR Z" msgstr "Vorschub (Z)" -#: FlatCAMCommon.py:615 FlatCAMCommon.py:1305 +#: FlatCAMCommon.py:616 FlatCAMCommon.py:1306 FlatCAMCommon.py:1784 msgid "FR Rapids" msgstr "Vorschub ohne Last" -#: FlatCAMCommon.py:616 FlatCAMCommon.py:1307 flatcamGUI/PreferencesUI.py:3173 +#: FlatCAMCommon.py:617 FlatCAMCommon.py:1308 FlatCAMCommon.py:1657 +#: flatcamGUI/PreferencesUI.py:3440 msgid "Spindle Speed" msgstr "Drehgeschwindigkeit" -#: FlatCAMCommon.py:617 FlatCAMCommon.py:1309 flatcamGUI/ObjectUI.py:963 -#: flatcamGUI/ObjectUI.py:1619 +#: FlatCAMCommon.py:618 FlatCAMCommon.py:1310 FlatCAMCommon.py:1672 +#: flatcamGUI/ObjectUI.py:1063 flatcamGUI/ObjectUI.py:1855 msgid "Dwell" msgstr "Warten zum Beschleunigen" -#: FlatCAMCommon.py:618 FlatCAMCommon.py:1311 +#: FlatCAMCommon.py:619 FlatCAMCommon.py:1312 FlatCAMCommon.py:1685 msgid "Dwelltime" msgstr "Wartezeit zum Beschleunigen" -#: FlatCAMCommon.py:619 FlatCAMCommon.py:1313 flatcamGUI/ObjectUI.py:982 -#: flatcamGUI/ObjectUI.py:1640 flatcamGUI/PreferencesUI.py:3204 -#: flatcamGUI/PreferencesUI.py:4155 flatcamGUI/PreferencesUI.py:6642 -#: flatcamTools/ToolSolderPaste.py:334 +#: FlatCAMCommon.py:620 FlatCAMCommon.py:1314 flatcamGUI/ObjectUI.py:2012 +#: flatcamGUI/PreferencesUI.py:3475 flatcamGUI/PreferencesUI.py:4447 +#: flatcamGUI/PreferencesUI.py:7148 flatcamTools/ToolSolderPaste.py:336 msgid "Preprocessor" msgstr "Postprozessor" -#: FlatCAMCommon.py:620 FlatCAMCommon.py:1315 +#: FlatCAMCommon.py:621 FlatCAMCommon.py:1316 FlatCAMCommon.py:1800 msgid "ExtraCut" msgstr "Zusätzlicher Schnitt" -#: FlatCAMCommon.py:621 FlatCAMCommon.py:1317 +#: FlatCAMCommon.py:622 FlatCAMCommon.py:1318 FlatCAMCommon.py:1815 msgid "E-Cut Length" msgstr "Extra Schnittlänge" -#: FlatCAMCommon.py:622 FlatCAMCommon.py:1319 +#: FlatCAMCommon.py:623 FlatCAMCommon.py:1320 msgid "Toolchange" msgstr "Werkzeugwechsel" -#: FlatCAMCommon.py:623 FlatCAMCommon.py:1321 +#: FlatCAMCommon.py:624 FlatCAMCommon.py:1322 msgid "Toolchange XY" msgstr "Werkzeugwechsel XY" -#: FlatCAMCommon.py:624 FlatCAMCommon.py:1323 flatcamGUI/PreferencesUI.py:3124 -#: flatcamGUI/PreferencesUI.py:4044 flatcamGUI/PreferencesUI.py:7572 +#: FlatCAMCommon.py:625 FlatCAMCommon.py:1324 flatcamGUI/PreferencesUI.py:3378 +#: flatcamGUI/PreferencesUI.py:4324 flatcamGUI/PreferencesUI.py:8078 #: flatcamTools/ToolCalibration.py:111 msgid "Toolchange Z" msgstr "Werkzeugwechsel Z" -#: FlatCAMCommon.py:625 FlatCAMCommon.py:1325 flatcamGUI/ObjectUI.py:886 -#: flatcamGUI/PreferencesUI.py:3309 flatcamGUI/PreferencesUI.py:4200 +#: FlatCAMCommon.py:626 FlatCAMCommon.py:1326 flatcamGUI/ObjectUI.py:1192 +#: flatcamGUI/PreferencesUI.py:3586 flatcamGUI/PreferencesUI.py:4493 msgid "Start Z" msgstr "Start Z" -#: FlatCAMCommon.py:626 FlatCAMCommon.py:1328 +#: FlatCAMCommon.py:627 FlatCAMCommon.py:1329 msgid "End Z" msgstr "Ende Z" -#: FlatCAMCommon.py:630 +#: FlatCAMCommon.py:631 msgid "Tool Index." msgstr "Werkzeugverzeichnis." -#: FlatCAMCommon.py:632 +#: FlatCAMCommon.py:633 FlatCAMCommon.py:1533 msgid "" "Tool name.\n" "This is not used in the app, it's function\n" @@ -2027,11 +2025,11 @@ msgstr "" "Wird in der App nicht verwendet,\n" "sondern dient als Kommentar für den Nutzer." -#: FlatCAMCommon.py:636 +#: FlatCAMCommon.py:637 FlatCAMCommon.py:1546 msgid "Tool Diameter." msgstr "Werkzeugdurchmesser." -#: FlatCAMCommon.py:638 +#: FlatCAMCommon.py:639 FlatCAMCommon.py:1727 msgid "" "Tool Offset.\n" "Can be of a few types:\n" @@ -2047,7 +2045,7 @@ msgstr "" "Out: Offset einen halben Werkzeugdurchmesser ausserhalb\n" "Custom: selbstdefinierter Wert im Feld \"Selbstdefinierter Offset\"" -#: FlatCAMCommon.py:645 +#: FlatCAMCommon.py:646 FlatCAMCommon.py:1744 msgid "" "Custom Offset.\n" "A value to be used as offset from the current path." @@ -2055,7 +2053,7 @@ msgstr "" "Selbstdefinierter Offset.\n" "Ein Wert der als Offset zum aktellen Pfad hinzugefügt wird." -#: FlatCAMCommon.py:648 +#: FlatCAMCommon.py:649 FlatCAMCommon.py:1711 msgid "" "Tool Type.\n" "Can be:\n" @@ -2070,7 +2068,7 @@ msgstr "" "Durchgänge\n" "Finish: Finishing, hoher Vorschub" -#: FlatCAMCommon.py:654 +#: FlatCAMCommon.py:655 FlatCAMCommon.py:1559 msgid "" "Tool Shape. \n" "Can be:\n" @@ -2084,7 +2082,7 @@ msgstr "" "B: Kugelförmig\n" "V: V-Förmig" -#: FlatCAMCommon.py:660 +#: FlatCAMCommon.py:661 FlatCAMCommon.py:1575 msgid "" "Cutting Depth.\n" "The depth at which to cut into material." @@ -2093,7 +2091,7 @@ msgstr "" "Eindringtiefe in das Material." # MultiDepth is hard to translate, cause it is somewhat artificial. If you need to abbreviate perhaps "MehrfDurchg" could suffice, but stays ugly. -#: FlatCAMCommon.py:663 +#: FlatCAMCommon.py:664 FlatCAMCommon.py:1589 msgid "" "Multi Depth.\n" "Selecting this will allow cutting in multiple passes,\n" @@ -2103,7 +2101,7 @@ msgstr "" "Wenn ausgewählt wird der Schnitt in mehreren Stufen\n" "durchgeführt. Die Schnitttiefe jedes Schnittes ist in DPP angegeben." -#: FlatCAMCommon.py:667 +#: FlatCAMCommon.py:668 FlatCAMCommon.py:1602 msgid "" "DPP. Depth per Pass.\n" "The value used to cut into material on each pass." @@ -2111,7 +2109,7 @@ msgstr "" "DPP: Tiefe pro Schnitt. Definiert die einzelne Schnitttiefe in mehrfachen " "Durchgängen." -#: FlatCAMCommon.py:670 +#: FlatCAMCommon.py:671 FlatCAMCommon.py:1758 msgid "" "V-Dia.\n" "Diameter of the tip for V-Shape Tools." @@ -2120,7 +2118,7 @@ msgstr "" "Durchmesser der Spitze eines V-Förmigen Werkzeugs." # Typo in english? V-Angle, missing n? -#: FlatCAMCommon.py:673 +#: FlatCAMCommon.py:674 FlatCAMCommon.py:1772 msgid "" "V-Agle.\n" "Angle at the tip for the V-Shape Tools." @@ -2128,7 +2126,7 @@ msgstr "" "V-Winkel.\n" "Öffnungswinkel an der Spitze eine V-Förmigen Werkzeugs." -#: FlatCAMCommon.py:676 +#: FlatCAMCommon.py:677 FlatCAMCommon.py:1616 msgid "" "Clearance Height.\n" "Height at which the milling bit will travel between cuts,\n" @@ -2138,7 +2136,7 @@ msgstr "" "Die Höhe in der das Fräswerkzeug sich zwischen den Schnitten \n" "frei bewegen kann ohne auf Hindernisse zu stossen." -#: FlatCAMCommon.py:680 +#: FlatCAMCommon.py:681 msgid "" "FR. Feedrate\n" "The speed on XY plane used while cutting into material." @@ -2146,7 +2144,7 @@ msgstr "" "FR: Feedrate\n" "Geschwindkeit beim fräsen. Angegeben in cm pro Minute." -#: FlatCAMCommon.py:683 +#: FlatCAMCommon.py:684 msgid "" "FR Z. Feedrate Z\n" "The speed on Z plane." @@ -2154,7 +2152,7 @@ msgstr "" "FR Z: Feedrate Z:\n" "Geschwindigkeit beim Fräsen in Z-Richtung." -#: FlatCAMCommon.py:686 +#: FlatCAMCommon.py:687 FlatCAMCommon.py:1786 msgid "" "FR Rapids. Feedrate Rapids\n" "Speed used while moving as fast as possible.\n" @@ -2166,7 +2164,7 @@ msgstr "" "Wird benutzt bei Geräten die das G0 Kommando nicht \n" "unterstützen (oft 3D Drucker)." -#: FlatCAMCommon.py:691 +#: FlatCAMCommon.py:692 FlatCAMCommon.py:1659 msgid "" "Spindle Speed.\n" "If it's left empty it will not be used.\n" @@ -2176,22 +2174,26 @@ msgstr "" "Drehzahl des Fräsmotors in U/min.\n" "Wird nicht benutzt, wenn leer." -#: FlatCAMCommon.py:695 +#: FlatCAMCommon.py:696 FlatCAMCommon.py:1674 msgid "" "Dwell.\n" "Check this if a delay is needed to allow\n" "the spindle motor to reach it's set speed." msgstr "" -"dwelltime = Pausezeit, damit die Spindel ihre eingestellte Drehzahl erreicht." +"Verweilen.\n" +"Überprüfen Sie dies, wenn eine Verzögerung erforderlich ist\n" +"Der Spindelmotor erreicht die eingestellte Drehzahl." -#: FlatCAMCommon.py:699 +#: FlatCAMCommon.py:700 FlatCAMCommon.py:1687 msgid "" "Dwell Time.\n" "A delay used to allow the motor spindle reach it's set speed." msgstr "" -"dwelltime = Pausezeit, damit die Spindel ihre eingestellte Drehzahl erreicht." +"Verweilzeit.\n" +"Eine Verzögerung, mit der die Motorspindel ihre eingestellte Drehzahl " +"erreicht." -#: FlatCAMCommon.py:702 +#: FlatCAMCommon.py:703 msgid "" "Preprocessor.\n" "A selection of files that will alter the generated G-code\n" @@ -2201,7 +2203,7 @@ msgstr "" "Diese Dateien werden den erzeugten G-Code modifizieren\n" "um eine große Anzahl Anwendungsmöglichkeiten zu unterstützen." -#: FlatCAMCommon.py:706 +#: FlatCAMCommon.py:707 FlatCAMCommon.py:1802 msgid "" "Extra Cut.\n" "If checked, after a isolation is finished an extra cut\n" @@ -2214,7 +2216,7 @@ msgstr "" "durchgeführt, um Start und Endpunkt definitiv zu verbinden und \n" "so eine vollständige Isolation zu gewährleisten." -#: FlatCAMCommon.py:712 +#: FlatCAMCommon.py:713 FlatCAMCommon.py:1817 msgid "" "Extra Cut length.\n" "If checked, after a isolation is finished an extra cut\n" @@ -2228,7 +2230,7 @@ msgstr "" "durchgeführt, um Start und Endpunkt definitiv zu verbinden und \n" "so eine vollständige Isolation zu gewährleisten." -#: FlatCAMCommon.py:719 +#: FlatCAMCommon.py:720 msgid "" "Toolchange.\n" "It will create a toolchange event.\n" @@ -2240,7 +2242,7 @@ msgstr "" "Die Art wie der Werkzeugwechsel durchgeführt wird\n" "hängt vom gewählten Präprozessor ab." -#: FlatCAMCommon.py:724 +#: FlatCAMCommon.py:725 msgid "" "Toolchange XY.\n" "A set of coordinates in the format (x, y).\n" @@ -2253,7 +2255,7 @@ msgstr "" "Werkzeugwechselereignis ausgelöst." # Is this really the height of where a toolchange event takes place or is it the position of where to go to for being able to change the tool? -#: FlatCAMCommon.py:729 +#: FlatCAMCommon.py:730 msgid "" "Toolchange Z.\n" "The position on Z plane where the tool change event take place." @@ -2262,7 +2264,7 @@ msgstr "" "Die Position in der Z Ebene an der ein Werkzeugwechselereignis ausgelöst " "wird." -#: FlatCAMCommon.py:732 +#: FlatCAMCommon.py:733 msgid "" "Start Z.\n" "If it's left empty it will not be used.\n" @@ -2272,7 +2274,7 @@ msgstr "" "Nicht benutzt wenn leer.\n" "Die Z-Position die zum Start angefahren wird." -#: FlatCAMCommon.py:736 +#: FlatCAMCommon.py:737 msgid "" "End Z.\n" "A position on Z plane to move immediately after job stop." @@ -2280,354 +2282,736 @@ msgstr "" "End Z.\n" "Die Z-Position die bei Beendigung des Jobs angefahren wird." -#: FlatCAMCommon.py:748 FlatCAMCommon.py:1125 FlatCAMCommon.py:1159 +#: FlatCAMCommon.py:749 FlatCAMCommon.py:1126 FlatCAMCommon.py:1160 +#: FlatCAMCommon.py:2335 FlatCAMCommon.py:2556 FlatCAMCommon.py:2590 msgid "Could not load Tools DB file." msgstr "Werkzeugdatenbank konnte nicht geladen werden." -#: FlatCAMCommon.py:756 FlatCAMCommon.py:1167 +#: FlatCAMCommon.py:757 FlatCAMCommon.py:1168 FlatCAMCommon.py:2343 +#: FlatCAMCommon.py:2598 msgid "Failed to parse Tools DB file." msgstr "Formatfehler beim Einlesen der Werkzeugdatenbank." -#: FlatCAMCommon.py:759 FlatCAMCommon.py:1170 +#: FlatCAMCommon.py:760 FlatCAMCommon.py:1171 FlatCAMCommon.py:2346 +#: FlatCAMCommon.py:2601 msgid "Loaded FlatCAM Tools DB from" -msgstr "FlatCAM Werkzeugdatenbank wurde gelesen aus:" +msgstr "Geladene FlatCAM Tools DB von" -#: FlatCAMCommon.py:765 +#: FlatCAMCommon.py:766 FlatCAMCommon.py:2260 msgid "Add to DB" msgstr "Hinzufügen" -#: FlatCAMCommon.py:767 +#: FlatCAMCommon.py:768 FlatCAMCommon.py:2263 msgid "Copy from DB" msgstr "Von Datenbank kopieren" -#: FlatCAMCommon.py:769 +#: FlatCAMCommon.py:770 FlatCAMCommon.py:2266 msgid "Delete from DB" msgstr "Aus Datenbank löschen" -#: FlatCAMCommon.py:1046 +#: FlatCAMCommon.py:1047 FlatCAMCommon.py:2473 msgid "Tool added to DB." msgstr "Werkzeug wurde zur Werkzeugdatenbank hinzugefügt." -#: FlatCAMCommon.py:1067 +#: FlatCAMCommon.py:1068 FlatCAMCommon.py:2497 msgid "Tool copied from Tools DB." msgstr "Das Werkzeug wurde aus der Werkzeugdatenbank kopiert." -#: FlatCAMCommon.py:1085 +#: FlatCAMCommon.py:1086 FlatCAMCommon.py:2516 msgid "Tool removed from Tools DB." msgstr "Werkzeug wurde aus der Werkzeugdatenbank gelöscht." -#: FlatCAMCommon.py:1096 +#: FlatCAMCommon.py:1097 FlatCAMCommon.py:2527 msgid "Export Tools Database" msgstr "Werkzeugdatenbank exportieren" -#: FlatCAMCommon.py:1099 +#: FlatCAMCommon.py:1100 FlatCAMCommon.py:2530 msgid "Tools_Database" msgstr "Werkzeugdatenbank" -#: FlatCAMCommon.py:1106 -msgid "FlatCAM Tools DB export cancelled." -msgstr "Export der FlatCAM Werkzeugdatenbank abgebrochen." - -#: FlatCAMCommon.py:1136 FlatCAMCommon.py:1139 FlatCAMCommon.py:1191 +#: FlatCAMCommon.py:1137 FlatCAMCommon.py:1140 FlatCAMCommon.py:1192 +#: FlatCAMCommon.py:2567 FlatCAMCommon.py:2570 FlatCAMCommon.py:2622 msgid "Failed to write Tools DB to file." msgstr "Fehler beim Schreiben der Werkzeugdatenbank in eine Datei." -#: FlatCAMCommon.py:1142 +#: FlatCAMCommon.py:1143 FlatCAMCommon.py:2573 msgid "Exported Tools DB to" msgstr "Werkzeugdatenbank wurde exportiert nach" -#: FlatCAMCommon.py:1149 +#: FlatCAMCommon.py:1150 FlatCAMCommon.py:2580 msgid "Import FlatCAM Tools DB" msgstr "Import der FlatCAM-Werkzeugdatenbank" -#: FlatCAMCommon.py:1152 -msgid "FlatCAM Tools DB import cancelled." -msgstr "Import der FlatCAM-Werkzeugdatenbank abgebrochen." - -#: FlatCAMCommon.py:1195 +#: FlatCAMCommon.py:1196 FlatCAMCommon.py:2626 msgid "Saved Tools DB." msgstr "Datenbank der gespeicherten Werkzeuge." -#: FlatCAMCommon.py:1342 +#: FlatCAMCommon.py:1343 FlatCAMCommon.py:2807 msgid "No Tool/row selected in the Tools Database table" msgstr "" "Gescheitert. Kein Werkzeug (keine Spalte) in der Werkzeugtabelle ausgewählt" -#: FlatCAMCommon.py:1360 +#: FlatCAMCommon.py:1361 FlatCAMCommon.py:2824 msgid "Cancelled adding tool from DB." msgstr "Hinzufügen aus der Datenbank wurde abgebrochen." -#: FlatCAMObj.py:257 +#: FlatCAMCommon.py:1462 +msgid "Basic Geo Parameters" +msgstr "Grundlegende Geoparameter" + +#: FlatCAMCommon.py:1474 +msgid "Advanced Geo Parameters" +msgstr "Erweiterte Geoparameter" + +#: FlatCAMCommon.py:1486 +msgid "NCC Parameters" +msgstr "NCC-Parameter" + +#: FlatCAMCommon.py:1498 +msgid "Paint Parameters" +msgstr "Lackparameter" + +#: FlatCAMCommon.py:1629 flatcamGUI/ObjectUI.py:966 flatcamGUI/ObjectUI.py:1767 +#: flatcamGUI/PreferencesUI.py:4378 flatcamGUI/PreferencesUI.py:7059 +#: flatcamTools/ToolSolderPaste.py:254 +msgid "Feedrate X-Y" +msgstr "Vorschub X-Y" + +#: FlatCAMCommon.py:1631 +msgid "" +"Feedrate X-Y. Feedrate\n" +"The speed on XY plane used while cutting into material." +msgstr "" +"Vorschub X-Y. Vorschubgeschwindigkeit\n" +"Die Geschwindigkeit in der XY-Ebene, die beim Schneiden in Material " +"verwendet wird." + +#: FlatCAMCommon.py:1643 flatcamGUI/ObjectUI.py:981 flatcamGUI/ObjectUI.py:1781 +#: flatcamGUI/PreferencesUI.py:3425 flatcamGUI/PreferencesUI.py:4393 +#: flatcamGUI/PreferencesUI.py:7072 flatcamTools/ToolSolderPaste.py:266 +msgid "Feedrate Z" +msgstr "Vorschub Z" + +#: FlatCAMCommon.py:1645 +msgid "" +"Feedrate Z\n" +"The speed on Z plane." +msgstr "" +"Vorschub Z.\n" +"Die Geschwindigkeit in der Z-Ebene." + +#: FlatCAMCommon.py:1843 flatcamGUI/ObjectUI.py:844 +#: flatcamGUI/PreferencesUI.py:3264 flatcamTools/ToolNCC.py:341 +msgid "Operation" +msgstr "Operation" + +#: FlatCAMCommon.py:1845 flatcamTools/ToolNCC.py:343 +msgid "" +"The 'Operation' can be:\n" +"- Isolation -> will ensure that the non-copper clearing is always complete.\n" +"If it's not successful then the non-copper clearing will fail, too.\n" +"- Clear -> the regular non-copper clearing." +msgstr "" +"Die 'Operation' kann sein:\n" +"- Isolierung-> stellt sicher, dass das Löschen ohne Kupfer immer " +"abgeschlossen ist.\n" +"Wenn dies nicht erfolgreich ist, schlägt auch das Löschen ohne Kupfer fehl.\n" +"- Klären-> das reguläre Nicht-Kupfer-löschen." + +#: FlatCAMCommon.py:1852 flatcamEditors/FlatCAMGrbEditor.py:2739 +#: flatcamGUI/GUIElements.py:2577 flatcamTools/ToolNCC.py:350 +msgid "Clear" +msgstr "Klären" + +#: FlatCAMCommon.py:1853 flatcamTools/ToolNCC.py:351 +#: flatcamTools/ToolNCC.py:1618 +msgid "Isolation" +msgstr "Isolation" + +#: FlatCAMCommon.py:1861 flatcamGUI/ObjectUI.py:408 flatcamGUI/ObjectUI.py:866 +#: flatcamGUI/PreferencesUI.py:2257 flatcamGUI/PreferencesUI.py:3280 +#: flatcamGUI/PreferencesUI.py:4665 flatcamGUI/PreferencesUI.py:5416 +#: flatcamTools/ToolNCC.py:359 +msgid "Milling Type" +msgstr "Fräsart" + +#: FlatCAMCommon.py:1863 FlatCAMCommon.py:1871 flatcamGUI/PreferencesUI.py:5418 +#: flatcamGUI/PreferencesUI.py:5426 flatcamTools/ToolNCC.py:361 +#: flatcamTools/ToolNCC.py:369 +msgid "" +"Milling type when the selected tool is of type: 'iso_op':\n" +"- climb / best for precision milling and to reduce tool usage\n" +"- conventional / useful when there is no backlash compensation" +msgstr "" +"Frästyp, wenn das ausgewählte Werkzeug vom Typ 'iso_op' ist:\n" +"- Besteigung / am besten zum Präzisionsfräsen und zur Reduzierung des " +"Werkzeugverbrauchs\n" +"- konventionell / nützlich, wenn kein Spielausgleich vorhanden ist" + +#: FlatCAMCommon.py:1868 flatcamGUI/ObjectUI.py:414 +#: flatcamGUI/PreferencesUI.py:2264 flatcamGUI/PreferencesUI.py:4671 +#: flatcamGUI/PreferencesUI.py:5423 flatcamTools/ToolNCC.py:366 +msgid "Climb" +msgstr "Steigen" + +# Cannot translate without context. +#: FlatCAMCommon.py:1869 flatcamGUI/ObjectUI.py:415 +#: flatcamGUI/PreferencesUI.py:2265 flatcamGUI/PreferencesUI.py:4672 +#: flatcamGUI/PreferencesUI.py:5424 flatcamTools/ToolNCC.py:367 +msgid "Conventional" +msgstr "Konventionell" + +#: FlatCAMCommon.py:1881 FlatCAMCommon.py:1990 +#: flatcamEditors/FlatCAMGeoEditor.py:452 flatcamGUI/PreferencesUI.py:5461 +#: flatcamGUI/PreferencesUI.py:6002 flatcamTools/ToolNCC.py:382 +#: flatcamTools/ToolPaint.py:329 +msgid "Overlap" +msgstr "Überlappung" + +# Double +#: FlatCAMCommon.py:1883 flatcamGUI/PreferencesUI.py:5463 +#: flatcamTools/ToolNCC.py:384 +msgid "" +"How much (percentage) of the tool width to overlap each tool pass.\n" +"Adjust the value starting with lower values\n" +"and increasing it if areas that should be cleared are still \n" +"not cleared.\n" +"Lower values = faster processing, faster execution on CNC.\n" +"Higher values = slow processing and slow execution on CNC\n" +"due of too many paths." +msgstr "" +"Wie viel (Prozent) der Werkzeugbreite, um jeden Werkzeugdurchlauf zu " +"überlappen.\n" +"Passen Sie den Wert beginnend mit niedrigeren Werten an\n" +"und es zu erhöhen, wenn noch Bereiche sind, die geräumt werden sollen\n" +"ungeklärt.\n" +"Niedrigere Werte = schnellere Verarbeitung, schnellere Ausführung auf CNC.\n" +"Höhere Werte = langsame Verarbeitung und langsame Ausführung auf CNC\n" +"wegen zu vieler Wege." + +#: FlatCAMCommon.py:1902 FlatCAMCommon.py:2011 +#: flatcamEditors/FlatCAMGeoEditor.py:472 flatcamGUI/PreferencesUI.py:5481 +#: flatcamGUI/PreferencesUI.py:5723 flatcamGUI/PreferencesUI.py:6022 +#: flatcamGUI/PreferencesUI.py:7681 flatcamGUI/PreferencesUI.py:7838 +#: flatcamGUI/PreferencesUI.py:7923 flatcamGUI/PreferencesUI.py:8570 +#: flatcamGUI/PreferencesUI.py:8578 flatcamTools/ToolCopperThieving.py:112 +#: flatcamTools/ToolCopperThieving.py:363 flatcamTools/ToolCutOut.py:191 +#: flatcamTools/ToolFiducials.py:172 flatcamTools/ToolInvertGerber.py:88 +#: flatcamTools/ToolInvertGerber.py:96 flatcamTools/ToolNCC.py:403 +#: flatcamTools/ToolPaint.py:350 +msgid "Margin" +msgstr "Marge" + +#: FlatCAMCommon.py:1904 flatcamGUI/PreferencesUI.py:5483 +#: flatcamGUI/PreferencesUI.py:7683 flatcamGUI/PreferencesUI.py:7925 +#: flatcamGUI/PreferencesUI.py:7989 flatcamTools/ToolCopperThieving.py:114 +#: flatcamTools/ToolFiducials.py:174 flatcamTools/ToolFiducials.py:237 +#: flatcamTools/ToolNCC.py:405 +msgid "Bounding box margin." +msgstr "Begrenzungsrahmenrand." + +#: FlatCAMCommon.py:1915 FlatCAMCommon.py:2026 +#: flatcamEditors/FlatCAMGeoEditor.py:486 flatcamGUI/PreferencesUI.py:5494 +#: flatcamGUI/PreferencesUI.py:6037 flatcamGUI/PreferencesUI.py:8204 +#: flatcamGUI/PreferencesUI.py:8417 flatcamTools/ToolExtractDrills.py:128 +#: flatcamTools/ToolNCC.py:416 flatcamTools/ToolPaint.py:365 +#: flatcamTools/ToolPunchGerber.py:139 +msgid "Method" +msgstr "Methode" + +#: FlatCAMCommon.py:1917 flatcamGUI/PreferencesUI.py:5496 +#: flatcamTools/ToolNCC.py:418 +msgid "" +"Algorithm for copper clearing:\n" +"- Standard: Fixed step inwards.\n" +"- Seed-based: Outwards from seed.\n" +"- Line-based: Parallel lines." +msgstr "" +"Algorithmus zur Kupferreinigung:\n" +"- Standard: Schritt nach innen behoben.\n" +"- Samenbasiert: Aus dem Samen heraus.\n" +"- Linienbasiert: Parallele Linien." + +#: FlatCAMCommon.py:1925 FlatCAMCommon.py:2040 +#: flatcamEditors/FlatCAMGeoEditor.py:500 flatcamGUI/PreferencesUI.py:5509 +#: flatcamGUI/PreferencesUI.py:6056 flatcamTools/ToolNCC.py:431 +#: flatcamTools/ToolNCC.py:2390 flatcamTools/ToolNCC.py:2419 +#: flatcamTools/ToolNCC.py:2688 flatcamTools/ToolNCC.py:2720 +#: flatcamTools/ToolPaint.py:390 flatcamTools/ToolPaint.py:1829 +#: tclCommands/TclCommandCopperClear.py:126 +#: tclCommands/TclCommandCopperClear.py:134 tclCommands/TclCommandPaint.py:125 +msgid "Standard" +msgstr "Standard" + +#: FlatCAMCommon.py:1925 FlatCAMCommon.py:2040 +#: flatcamEditors/FlatCAMGeoEditor.py:500 +#: flatcamEditors/FlatCAMGeoEditor.py:5156 flatcamGUI/PreferencesUI.py:5509 +#: flatcamGUI/PreferencesUI.py:6056 flatcamTools/ToolNCC.py:431 +#: flatcamTools/ToolPaint.py:390 flatcamTools/ToolPaint.py:699 +#: flatcamTools/ToolPaint.py:1857 tclCommands/TclCommandCopperClear.py:130 +#: tclCommands/TclCommandPaint.py:129 +msgid "Lines" +msgstr "Linien" + +#: FlatCAMCommon.py:1933 FlatCAMCommon.py:2051 flatcamGUI/PreferencesUI.py:5516 +#: flatcamGUI/PreferencesUI.py:6063 flatcamTools/ToolNCC.py:439 +#: flatcamTools/ToolPaint.py:401 +msgid "Connect" +msgstr "Verbinden" + +#: FlatCAMCommon.py:1937 FlatCAMCommon.py:2054 +#: flatcamEditors/FlatCAMGeoEditor.py:509 flatcamGUI/PreferencesUI.py:5518 +#: flatcamGUI/PreferencesUI.py:6065 flatcamTools/ToolNCC.py:443 +#: flatcamTools/ToolPaint.py:404 +msgid "" +"Draw lines between resulting\n" +"segments to minimize tool lifts." +msgstr "" +"Zeichnen Sie Linien zwischen den Ergebnissen\n" +"Segmente, um Werkzeuglifte zu minimieren." + +#: FlatCAMCommon.py:1943 FlatCAMCommon.py:2058 flatcamGUI/PreferencesUI.py:5525 +#: flatcamGUI/PreferencesUI.py:6071 flatcamTools/ToolNCC.py:449 +#: flatcamTools/ToolPaint.py:408 +msgid "Contour" +msgstr "Kontur" + +#: FlatCAMCommon.py:1947 FlatCAMCommon.py:2061 +#: flatcamEditors/FlatCAMGeoEditor.py:519 flatcamGUI/PreferencesUI.py:5527 +#: flatcamGUI/PreferencesUI.py:6073 flatcamTools/ToolNCC.py:453 +#: flatcamTools/ToolPaint.py:411 +msgid "" +"Cut around the perimeter of the polygon\n" +"to trim rough edges." +msgstr "" +"Schneiden Sie um den Umfang des Polygons herum\n" +"Ecken und Kanten schneiden." + +#: FlatCAMCommon.py:1953 flatcamEditors/FlatCAMGeoEditor.py:613 +#: flatcamEditors/FlatCAMGrbEditor.py:5145 flatcamGUI/ObjectUI.py:142 +#: flatcamGUI/ObjectUI.py:1495 flatcamGUI/ObjectUI.py:2244 +#: flatcamGUI/PreferencesUI.py:5534 flatcamGUI/PreferencesUI.py:6822 +#: flatcamTools/ToolNCC.py:459 flatcamTools/ToolTransform.py:29 +msgid "Offset" +msgstr "Versatz" + +#: FlatCAMCommon.py:1957 flatcamGUI/PreferencesUI.py:5536 +#: flatcamTools/ToolNCC.py:463 +msgid "" +"If used, it will add an offset to the copper features.\n" +"The copper clearing will finish to a distance\n" +"from the copper features.\n" +"The value can be between 0 and 10 FlatCAM units." +msgstr "" +"Bei Verwendung wird den Kupferelementen ein Offset hinzugefügt.\n" +"Die Kupferreinigung wird bis zu einer gewissen Entfernung enden\n" +"von den Kupfermerkmalen.\n" +"Der Wert kann zwischen 0 und 10 FlatCAM-Einheiten liegen." + +# 3rd Time +#: FlatCAMCommon.py:1992 flatcamEditors/FlatCAMGeoEditor.py:454 +#: flatcamGUI/PreferencesUI.py:6004 flatcamTools/ToolPaint.py:331 +msgid "" +"How much (percentage) of the tool width to overlap each tool pass.\n" +"Adjust the value starting with lower values\n" +"and increasing it if areas that should be painted are still \n" +"not painted.\n" +"Lower values = faster processing, faster execution on CNC.\n" +"Higher values = slow processing and slow execution on CNC\n" +"due of too many paths." +msgstr "" +"Wie viel (Prozent) der Werkzeugbreite, um jeden Werkzeugdurchlauf zu " +"überlappen.\n" +"Passen Sie den Wert beginnend mit niedrigeren Werten an\n" +"und erhöhen, wenn Bereiche, die gestrichen werden sollen, noch vorhanden " +"sind\n" +"nicht gemalt.\n" +"Niedrigere Werte = schnellere Verarbeitung, schnellere Ausführung auf CNC.\n" +"Höhere Werte = langsame Verarbeitung und langsame Ausführung auf CNC\n" +"wegen zu vieler Wege." + +#: FlatCAMCommon.py:2013 flatcamEditors/FlatCAMGeoEditor.py:474 +#: flatcamGUI/PreferencesUI.py:6024 flatcamTools/ToolPaint.py:352 +msgid "" +"Distance by which to avoid\n" +"the edges of the polygon to\n" +"be painted." +msgstr "" +"Entfernung, um die es zu vermeiden ist\n" +"die Kanten des Polygons bis\n" +"gemalt werden." + +#: FlatCAMCommon.py:2028 flatcamGUI/PreferencesUI.py:6039 +#: flatcamTools/ToolPaint.py:367 +msgid "" +"Algorithm for painting:\n" +"- Standard: Fixed step inwards.\n" +"- Seed-based: Outwards from seed.\n" +"- Line-based: Parallel lines.\n" +"- Laser-lines: Active only for Gerber objects.\n" +"Will create lines that follow the traces.\n" +"- Combo: In case of failure a new method will be picked from the above\n" +"in the order specified." +msgstr "" +"Algorithmus zum Malen:\n" +"- Standard: Schritt nach innen behoben.\n" +"- Samenbasiert: Aus dem Samen heraus.\n" +"- Linienbasiert: Parallele Linien.\n" +"- Laserlinien: Nur für Gerber-Objekte aktiv.\n" +"Erstellt Linien, die den Spuren folgen.\n" +"- Combo: Im Fehlerfall wird eine neue Methode aus den oben genannten " +"ausgewählt\n" +"in der angegebenen Reihenfolge." + +#: FlatCAMCommon.py:2040 FlatCAMCommon.py:2042 flatcamGUI/PreferencesUI.py:6056 +#: flatcamTools/ToolPaint.py:390 flatcamTools/ToolPaint.py:392 +#: flatcamTools/ToolPaint.py:693 flatcamTools/ToolPaint.py:698 +#: flatcamTools/ToolPaint.py:1871 tclCommands/TclCommandPaint.py:131 +msgid "Laser_lines" +msgstr "LaserlinienLinien" + +#: FlatCAMCommon.py:2040 flatcamGUI/PreferencesUI.py:6056 +#: flatcamTools/ToolPaint.py:390 flatcamTools/ToolPaint.py:2022 +#: tclCommands/TclCommandPaint.py:133 +msgid "Combo" +msgstr "Combo" + +#: FlatCAMCommon.py:2085 +msgid "Add Tool in DB" +msgstr "Werkzeug in DB hinzufügen" + +#: FlatCAMObj.py:264 msgid "Name changed from" msgstr "Name geändert von" -#: FlatCAMObj.py:257 +#: FlatCAMObj.py:264 msgid "to" msgstr "zu" -#: FlatCAMObj.py:268 +#: FlatCAMObj.py:275 msgid "Offsetting..." msgstr "Offset hinzufügen ..." -#: FlatCAMObj.py:282 FlatCAMObj.py:287 +#: FlatCAMObj.py:289 FlatCAMObj.py:294 msgid "Scaling could not be executed." msgstr "Skalierungsaktion wurde nicht ausgeführt." -#: FlatCAMObj.py:291 FlatCAMObj.py:299 +#: FlatCAMObj.py:298 FlatCAMObj.py:306 msgid "Scale done." msgstr "Skalieren Sie fertig." -#: FlatCAMObj.py:297 +#: FlatCAMObj.py:304 msgid "Scaling..." msgstr "Skalierung ..." -#: FlatCAMObj.py:315 +#: FlatCAMObj.py:322 msgid "Skewing..." msgstr "Verziehen..." -#: FlatCAMObj.py:736 FlatCAMObj.py:2746 FlatCAMObj.py:3968 -#: flatcamGUI/PreferencesUI.py:1470 flatcamGUI/PreferencesUI.py:2859 +#: FlatCAMObj.py:743 FlatCAMObj.py:831 flatcamGUI/ObjectUI.py:449 +#: flatcamGUI/PreferencesUI.py:6527 flatcamTools/ToolAlignObjects.py:73 +#: flatcamTools/ToolAlignObjects.py:109 flatcamTools/ToolCalibration.py:196 +#: flatcamTools/ToolCalibration.py:631 flatcamTools/ToolCalibration.py:648 +#: flatcamTools/ToolCalibration.py:807 flatcamTools/ToolCalibration.py:815 +#: flatcamTools/ToolCopperThieving.py:145 +#: flatcamTools/ToolCopperThieving.py:159 +#: flatcamTools/ToolCopperThieving.py:605 flatcamTools/ToolCutOut.py:92 +#: flatcamTools/ToolDblSided.py:225 flatcamTools/ToolFilm.py:69 +#: flatcamTools/ToolFilm.py:102 flatcamTools/ToolFilm.py:549 +#: flatcamTools/ToolFilm.py:557 flatcamTools/ToolImage.py:49 +#: flatcamTools/ToolImage.py:252 flatcamTools/ToolImage.py:273 +#: flatcamTools/ToolNCC.py:96 flatcamTools/ToolNCC.py:558 +#: flatcamTools/ToolNCC.py:1295 flatcamTools/ToolPaint.py:502 +#: flatcamTools/ToolPaint.py:706 flatcamTools/ToolPanelize.py:118 +#: flatcamTools/ToolPanelize.py:204 flatcamTools/ToolPanelize.py:374 +#: flatcamTools/ToolPanelize.py:391 +msgid "Gerber" +msgstr "Gerber" + +#: FlatCAMObj.py:743 FlatCAMObj.py:831 flatcamGUI/FlatCAMGUI.py:2154 +#: flatcamGUI/ObjectUI.py:449 flatcamTools/ToolCalibration.py:631 +#: flatcamTools/ToolCalibration.py:648 flatcamTools/ToolCalibration.py:815 +#: flatcamTools/ToolCopperThieving.py:145 +#: flatcamTools/ToolCopperThieving.py:159 +#: flatcamTools/ToolCopperThieving.py:605 flatcamTools/ToolCutOut.py:93 +#: flatcamTools/ToolDblSided.py:227 flatcamTools/ToolFilm.py:69 +#: flatcamTools/ToolFilm.py:102 flatcamTools/ToolFilm.py:549 +#: flatcamTools/ToolFilm.py:557 flatcamTools/ToolImage.py:49 +#: flatcamTools/ToolImage.py:271 flatcamTools/ToolNCC.py:95 +#: flatcamTools/ToolNCC.py:558 flatcamTools/ToolNCC.py:1295 +#: flatcamTools/ToolPaint.py:502 flatcamTools/ToolPaint.py:706 +#: flatcamTools/ToolPanelize.py:118 flatcamTools/ToolPanelize.py:374 +#: flatcamTools/ToolPanelize.py:391 +msgid "Geometry" +msgstr "Geometrie" + +#: FlatCAMObj.py:755 FlatCAMObj.py:2957 FlatCAMObj.py:4421 +#: flatcamGUI/PreferencesUI.py:1646 flatcamGUI/PreferencesUI.py:3041 msgid "Basic" msgstr "Basis" -#: FlatCAMObj.py:763 FlatCAMObj.py:2758 FlatCAMObj.py:3989 -#: flatcamGUI/PreferencesUI.py:1471 +#: FlatCAMObj.py:782 FlatCAMObj.py:2970 FlatCAMObj.py:4442 +#: flatcamGUI/PreferencesUI.py:1647 msgid "Advanced" msgstr "Erweitert" -#: FlatCAMObj.py:980 +#: FlatCAMObj.py:998 msgid "Buffering solid geometry" msgstr "Festkörpergeometrie puffern" -#: FlatCAMObj.py:983 camlib.py:965 flatcamGUI/PreferencesUI.py:2296 -#: flatcamTools/ToolCopperThieving.py:1011 -#: flatcamTools/ToolCopperThieving.py:1200 -#: flatcamTools/ToolCopperThieving.py:1212 -#: flatcamTools/ToolNonCopperClear.py:1624 -#: flatcamTools/ToolNonCopperClear.py:1721 -#: flatcamTools/ToolNonCopperClear.py:1732 -#: flatcamTools/ToolNonCopperClear.py:2015 -#: flatcamTools/ToolNonCopperClear.py:2111 -#: flatcamTools/ToolNonCopperClear.py:2123 +#: FlatCAMObj.py:1001 camlib.py:979 flatcamGUI/PreferencesUI.py:2476 +#: flatcamTools/ToolCopperThieving.py:1017 +#: flatcamTools/ToolCopperThieving.py:1206 +#: flatcamTools/ToolCopperThieving.py:1218 flatcamTools/ToolNCC.py:2045 +#: flatcamTools/ToolNCC.py:2153 flatcamTools/ToolNCC.py:2167 +#: flatcamTools/ToolNCC.py:3098 flatcamTools/ToolNCC.py:3203 +#: flatcamTools/ToolNCC.py:3218 flatcamTools/ToolNCC.py:3484 +#: flatcamTools/ToolNCC.py:3585 flatcamTools/ToolNCC.py:3600 msgid "Buffering" msgstr "Pufferung" -#: FlatCAMObj.py:989 +#: FlatCAMObj.py:1007 msgid "Done" msgstr "Fertig" -#: FlatCAMObj.py:1040 +#: FlatCAMObj.py:1032 FlatCAMObj.py:1058 +msgid "Operation could not be done." +msgstr "Operation konnte nicht durchgeführt werden." + +#: FlatCAMObj.py:1075 msgid "Isolating..." msgstr "Isolieren ..." -#: FlatCAMObj.py:1099 +#: FlatCAMObj.py:1134 msgid "Click on a polygon to isolate it." msgstr "Klicken Sie auf ein Plozgon um es zu isolieren." -#: FlatCAMObj.py:1138 FlatCAMObj.py:1243 flatcamTools/ToolPaint.py:1120 +#: FlatCAMObj.py:1173 FlatCAMObj.py:1277 flatcamTools/ToolPaint.py:1511 msgid "Added polygon" msgstr "Polygon hinzugefügt" -#: FlatCAMObj.py:1140 FlatCAMObj.py:1245 +#: FlatCAMObj.py:1174 FlatCAMObj.py:1279 msgid "Click to add next polygon or right click to start isolation." msgstr "" "Klicken Sie, um das nächste Polygon hinzuzufügen, oder klicken Sie mit der " "rechten Maustaste, um den Isolationsvorgang zu beginnen." -#: FlatCAMObj.py:1152 flatcamTools/ToolPaint.py:1134 +#: FlatCAMObj.py:1186 flatcamTools/ToolPaint.py:1525 msgid "Removed polygon" msgstr "Polygon entfernt" # nearly the same as before? What good is this? -#: FlatCAMObj.py:1153 +#: FlatCAMObj.py:1187 msgid "Click to add/remove next polygon or right click to start isolation." msgstr "" "Klicken Sie, um das nächste Polygon hinzuzufügen oder zu entfernen, oder " "klicken Sie mit der rechten Maustaste, um den Isolationsvorgang zu beginnen." -#: FlatCAMObj.py:1158 flatcamTools/ToolPaint.py:1140 +#: FlatCAMObj.py:1192 flatcamTools/ToolPaint.py:1531 msgid "No polygon detected under click position." msgstr "Kein Polygon an der Stelle an die geklickt wurde." -#: FlatCAMObj.py:1179 flatcamTools/ToolPaint.py:1169 +#: FlatCAMObj.py:1213 flatcamTools/ToolPaint.py:1560 msgid "List of single polygons is empty. Aborting." msgstr "Liste der Einzelpolygone ist leer. Vorgang wird abgebrochen." -#: FlatCAMObj.py:1248 +#: FlatCAMObj.py:1282 msgid "No polygon in selection." msgstr "Kein Polygon in der Auswahl." -#: FlatCAMObj.py:1324 FlatCAMObj.py:1457 -#: flatcamTools/ToolNonCopperClear.py:1653 -#: flatcamTools/ToolNonCopperClear.py:2039 -msgid "Isolation geometry could not be generated." -msgstr "Isolationsgeometrie konnte nicht generiert werden." - -#: FlatCAMObj.py:1374 FlatCAMObj.py:3637 FlatCAMObj.py:3922 FlatCAMObj.py:4221 +#: FlatCAMObj.py:1394 FlatCAMObj.py:1542 FlatCAMObj.py:4055 FlatCAMObj.py:4375 +#: FlatCAMObj.py:4762 msgid "Rough" msgstr "Rau" -#: FlatCAMObj.py:1400 FlatCAMObj.py:1480 +#: FlatCAMObj.py:1410 FlatCAMObj.py:1489 flatcamTools/ToolNCC.py:2081 +#: flatcamTools/ToolNCC.py:3132 flatcamTools/ToolNCC.py:3511 +msgid "Isolation geometry could not be generated." +msgstr "Isolationsgeometrie konnte nicht generiert werden." + +#: FlatCAMObj.py:1435 FlatCAMObj.py:1567 msgid "Isolation geometry created" msgstr "Isolationsgeometrie erstellt" -#: FlatCAMObj.py:1409 FlatCAMObj.py:1487 +#: FlatCAMObj.py:1444 FlatCAMObj.py:1574 msgid "Subtracting Geo" msgstr "Geo subtrahieren" -#: FlatCAMObj.py:1807 +#: FlatCAMObj.py:1899 msgid "Plotting Apertures" msgstr "Plotten Apertures" -#: FlatCAMObj.py:2573 flatcamEditors/FlatCAMExcEditor.py:2427 +#: FlatCAMObj.py:2753 flatcamEditors/FlatCAMExcEditor.py:2453 msgid "Total Drills" msgstr "Bohrungen insgesamt" -#: FlatCAMObj.py:2605 flatcamEditors/FlatCAMExcEditor.py:2459 +#: FlatCAMObj.py:2784 flatcamEditors/FlatCAMExcEditor.py:2485 msgid "Total Slots" msgstr "Schlitz insgesamt" -#: FlatCAMObj.py:3060 FlatCAMObj.py:3155 FlatCAMObj.py:3276 +#: FlatCAMObj.py:2857 FlatCAMObj.py:3069 FlatCAMObj.py:3085 FlatCAMObj.py:3089 +#: FlatCAMObj.py:4242 FlatCAMObj.py:4667 FlatCAMObj.py:4703 +#: flatcamGUI/ObjectUI.py:817 flatcamGUI/ObjectUI.py:1660 +#: flatcamTools/ToolNCC.py:331 flatcamTools/ToolNCC.py:797 +#: flatcamTools/ToolNCC.py:811 flatcamTools/ToolNCC.py:1191 +#: flatcamTools/ToolPaint.py:314 flatcamTools/ToolPaint.py:767 +#: flatcamTools/ToolPaint.py:779 flatcamTools/ToolPaint.py:1166 +msgid "Parameters for" +msgstr "Parameter für" + +#: FlatCAMObj.py:2857 FlatCAMObj.py:3089 FlatCAMObj.py:4242 FlatCAMObj.py:4703 +#: flatcamTools/ToolNCC.py:811 flatcamTools/ToolNCC.py:1191 +#: flatcamTools/ToolPaint.py:779 flatcamTools/ToolPaint.py:1166 +msgid "Multiple Tools" +msgstr "Mehrere Werkzeuge" + +#: FlatCAMObj.py:3069 +msgid "No Tool Selected" +msgstr "Kein Werkzeug ausgewählt" + +#: FlatCAMObj.py:3085 FlatCAMObj.py:3427 FlatCAMObj.py:4667 +#: flatcamEditors/FlatCAMGeoEditor.py:406 flatcamGUI/FlatCAMGUI.py:496 +#: flatcamGUI/FlatCAMGUI.py:1143 flatcamGUI/ObjectUI.py:817 +#: flatcamGUI/ObjectUI.py:1660 flatcamTools/ToolNCC.py:331 +#: flatcamTools/ToolNCC.py:797 flatcamTools/ToolPaint.py:314 +#: flatcamTools/ToolPaint.py:767 +msgid "Tool" +msgstr "Werkzeug" + +#: FlatCAMObj.py:3419 FlatCAMObj.py:3512 FlatCAMObj.py:3700 msgid "Please select one or more tools from the list and try again." msgstr "" "Bitte wählen Sie ein oder mehrere Werkzeuge aus der Liste aus und versuchen " "Sie es erneut." -#: FlatCAMObj.py:3067 +#: FlatCAMObj.py:3426 msgid "Milling tool for DRILLS is larger than hole size. Cancelled." msgstr "Das Fräswerkzeug für BOHRER ist größer als die Lochgröße. Abgebrochen." -#: FlatCAMObj.py:3068 FlatCAMObj.py:4533 flatcamEditors/FlatCAMGeoEditor.py:408 -#: flatcamGUI/FlatCAMGUI.py:457 flatcamGUI/FlatCAMGUI.py:1072 -#: flatcamGUI/ObjectUI.py:1353 -msgid "Tool" -msgstr "Werkzeug" - -#: FlatCAMObj.py:3084 FlatCAMObj.py:3177 FlatCAMObj.py:3295 +#: FlatCAMObj.py:3442 FlatCAMObj.py:3533 FlatCAMObj.py:3719 +#: tclCommands/TclCommandDrillcncjob.py:194 msgid "Tool_nr" msgstr "Werkzeugnummer" -#: FlatCAMObj.py:3084 FlatCAMObj.py:3177 FlatCAMObj.py:3295 -#: flatcamEditors/FlatCAMExcEditor.py:1582 -#: flatcamEditors/FlatCAMExcEditor.py:3048 flatcamGUI/ObjectUI.py:777 -#: flatcamTools/ToolNonCopperClear.py:120 flatcamTools/ToolPaint.py:123 -#: flatcamTools/ToolPcbWizard.py:76 flatcamTools/ToolProperties.py:396 -#: flatcamTools/ToolProperties.py:449 flatcamTools/ToolSolderPaste.py:84 +#: FlatCAMObj.py:3442 FlatCAMObj.py:3533 FlatCAMObj.py:3719 +#: flatcamEditors/FlatCAMExcEditor.py:1585 +#: flatcamEditors/FlatCAMExcEditor.py:3069 flatcamGUI/ObjectUI.py:780 +#: flatcamTools/ToolNCC.py:132 flatcamTools/ToolPaint.py:128 +#: flatcamTools/ToolPcbWizard.py:76 flatcamTools/ToolProperties.py:416 +#: flatcamTools/ToolProperties.py:476 flatcamTools/ToolSolderPaste.py:86 +#: tclCommands/TclCommandDrillcncjob.py:194 msgid "Diameter" msgstr "Durchmesser" -#: FlatCAMObj.py:3084 FlatCAMObj.py:3177 FlatCAMObj.py:3295 +#: FlatCAMObj.py:3442 FlatCAMObj.py:3533 FlatCAMObj.py:3719 +#: tclCommands/TclCommandDrillcncjob.py:194 msgid "Drills_Nr" msgstr "Bohrnummer" -#: FlatCAMObj.py:3084 FlatCAMObj.py:3177 FlatCAMObj.py:3295 +#: FlatCAMObj.py:3442 FlatCAMObj.py:3533 FlatCAMObj.py:3719 +#: tclCommands/TclCommandDrillcncjob.py:194 msgid "Slots_Nr" msgstr "Schlitznummer" -#: FlatCAMObj.py:3164 +#: FlatCAMObj.py:3521 msgid "Milling tool for SLOTS is larger than hole size. Cancelled." msgstr "" "Das Fräswerkzeug für SCHLITZ ist größer als die Lochgröße. Abgebrochen." -#: FlatCAMObj.py:3336 -msgid "" -"Wrong value format for self.defaults[\"z_pdepth\"] or self.options[\"z_pdepth" -"\"]" -msgstr "" -"Falsches Wertformat für self.defaults [\"z_pdepth\"] oder self.options " -"[\"z_pdepth\"]" +#: FlatCAMObj.py:3626 FlatCAMObj.py:5451 +msgid "Focus Z" +msgstr "Fokus Z" -#: FlatCAMObj.py:3347 -msgid "" -"Wrong value format for self.defaults[\"feedrate_probe\"] or self." -"options[\"feedrate_probe\"]" -msgstr "" -"Falsches Wertformat für self.defaults [\"feedrate_probe\"] oder self.options " -"[\"feedrate_probe\"]" +#: FlatCAMObj.py:3645 FlatCAMObj.py:5470 +msgid "Laser Power" +msgstr "Laserleistung" -#: FlatCAMObj.py:3377 FlatCAMObj.py:5354 FlatCAMObj.py:5358 FlatCAMObj.py:5493 +#: FlatCAMObj.py:3677 FlatCAMObj.py:5502 flatcamGUI/ObjectUI.py:1048 +#: flatcamGUI/ObjectUI.py:1839 flatcamGUI/PreferencesUI.py:4409 +msgid "Spindle speed" +msgstr "Spulengeschwindigkeit" + +#: FlatCAMObj.py:3776 FlatCAMObj.py:5911 FlatCAMObj.py:5915 FlatCAMObj.py:6060 msgid "Generating CNC Code" msgstr "CNC-Code generieren" -#: FlatCAMObj.py:3637 FlatCAMObj.py:4632 FlatCAMObj.py:4633 FlatCAMObj.py:4642 +#: FlatCAMObj.py:3966 flatcamTools/ToolNCC.py:918 flatcamTools/ToolPaint.py:844 +msgid "Current Tool parameters were applied to all tools." +msgstr "Aktuelle Werkzeugparameter wurden auf alle Werkzeuge angewendet." + +#: FlatCAMObj.py:4055 FlatCAMObj.py:5115 FlatCAMObj.py:5116 FlatCAMObj.py:5125 msgid "Iso" msgstr "Iso" -#: FlatCAMObj.py:3637 +#: FlatCAMObj.py:4055 msgid "Finish" msgstr "Oberfläche" -#: FlatCAMObj.py:3957 +#: FlatCAMObj.py:4410 msgid "Add from Tool DB" msgstr "Werkzeug aus Werkzeugdatenbank hinzufügen" -#: FlatCAMObj.py:3960 flatcamGUI/FlatCAMGUI.py:678 flatcamGUI/FlatCAMGUI.py:794 -#: flatcamGUI/FlatCAMGUI.py:989 flatcamGUI/FlatCAMGUI.py:2015 -#: flatcamGUI/FlatCAMGUI.py:2159 flatcamGUI/FlatCAMGUI.py:2378 -#: flatcamGUI/FlatCAMGUI.py:2557 flatcamGUI/ObjectUI.py:1324 -#: flatcamTools/ToolPanelize.py:534 flatcamTools/ToolPanelize.py:561 -#: flatcamTools/ToolPanelize.py:660 flatcamTools/ToolPanelize.py:694 -#: flatcamTools/ToolPanelize.py:759 +#: FlatCAMObj.py:4413 flatcamGUI/FlatCAMGUI.py:734 flatcamGUI/FlatCAMGUI.py:848 +#: flatcamGUI/FlatCAMGUI.py:1057 flatcamGUI/FlatCAMGUI.py:2123 +#: flatcamGUI/FlatCAMGUI.py:2267 flatcamGUI/FlatCAMGUI.py:2532 +#: flatcamGUI/FlatCAMGUI.py:2731 flatcamGUI/ObjectUI.py:1615 +#: flatcamTools/ToolPanelize.py:543 flatcamTools/ToolPanelize.py:570 +#: flatcamTools/ToolPanelize.py:669 flatcamTools/ToolPanelize.py:703 +#: flatcamTools/ToolPanelize.py:768 msgid "Copy" msgstr "Kopieren" -#: FlatCAMObj.py:4054 FlatCAMObj.py:4397 FlatCAMObj.py:5107 FlatCAMObj.py:5744 -#: flatcamEditors/FlatCAMExcEditor.py:2534 -#: flatcamEditors/FlatCAMGeoEditor.py:1078 -#: flatcamEditors/FlatCAMGeoEditor.py:1112 -#: flatcamEditors/FlatCAMGeoEditor.py:1133 -#: flatcamEditors/FlatCAMGeoEditor.py:1154 -#: flatcamEditors/FlatCAMGeoEditor.py:1191 -#: flatcamEditors/FlatCAMGeoEditor.py:1219 -#: flatcamEditors/FlatCAMGeoEditor.py:1240 -#: flatcamTools/ToolNonCopperClear.py:1052 -#: flatcamTools/ToolNonCopperClear.py:1461 flatcamTools/ToolPaint.py:835 -#: flatcamTools/ToolPaint.py:1019 flatcamTools/ToolPaint.py:2198 -#: flatcamTools/ToolSolderPaste.py:882 flatcamTools/ToolSolderPaste.py:957 +#: FlatCAMObj.py:4507 FlatCAMObj.py:4941 FlatCAMObj.py:5661 FlatCAMObj.py:6307 +#: flatcamEditors/FlatCAMExcEditor.py:2560 +#: flatcamEditors/FlatCAMGeoEditor.py:1077 +#: flatcamEditors/FlatCAMGeoEditor.py:1118 +#: flatcamEditors/FlatCAMGeoEditor.py:1146 +#: flatcamEditors/FlatCAMGeoEditor.py:1174 +#: flatcamEditors/FlatCAMGeoEditor.py:1218 +#: flatcamEditors/FlatCAMGeoEditor.py:1253 +#: flatcamEditors/FlatCAMGeoEditor.py:1281 flatcamTools/ToolNCC.py:1493 +#: flatcamTools/ToolPaint.py:1244 flatcamTools/ToolPaint.py:1415 +#: flatcamTools/ToolSolderPaste.py:883 flatcamTools/ToolSolderPaste.py:956 msgid "Wrong value format entered, use a number." msgstr "Falsches Wertformat eingegeben, eine Zahl verwenden." -#: FlatCAMObj.py:4240 +#: FlatCAMObj.py:4781 msgid "Tool added in Tool Table." msgstr "Werkzeug in der Werkzeugtabelle hinzugefügt." -#: FlatCAMObj.py:4347 FlatCAMObj.py:4356 +#: FlatCAMObj.py:4890 FlatCAMObj.py:4899 msgid "Failed. Select a tool to copy." msgstr "Fehlgeschlagen. Wählen Sie ein Werkzeug zum Kopieren aus." -#: FlatCAMObj.py:4383 +#: FlatCAMObj.py:4928 msgid "Tool was copied in Tool Table." msgstr "Das Werkzeug wurde in die Werkzeugtabelle kopiert." -#: FlatCAMObj.py:4411 +#: FlatCAMObj.py:4955 msgid "Tool was edited in Tool Table." msgstr "Das Werkzeug wurde in der Werkzeugtabelle bearbeitet." -#: FlatCAMObj.py:4440 FlatCAMObj.py:4449 +#: FlatCAMObj.py:4984 FlatCAMObj.py:4993 msgid "Failed. Select a tool to delete." msgstr "Gescheitert. Wählen Sie ein Werkzeug zum Löschen aus." -#: FlatCAMObj.py:4472 +#: FlatCAMObj.py:5017 msgid "Tool was deleted in Tool Table." msgstr "Werkzeug wurde in der Werkzeugtabelle gelöscht." -#: FlatCAMObj.py:4533 flatcamGUI/ObjectUI.py:1353 -msgid "Parameters for" -msgstr "Parameter für" - -#: FlatCAMObj.py:4967 +#: FlatCAMObj.py:5523 msgid "This Geometry can't be processed because it is" msgstr "Diese Geometrie kann nicht verarbeitet werden, da dies der Fall ist" -#: FlatCAMObj.py:4969 +#: FlatCAMObj.py:5523 msgid "geometry" msgstr "geometrie" -#: FlatCAMObj.py:5012 +#: FlatCAMObj.py:5564 msgid "Failed. No tool selected in the tool table ..." msgstr "Gescheitert. Kein Werkzeug in der Werkzeugtabelle ausgewählt ..." -#: FlatCAMObj.py:5112 FlatCAMObj.py:5264 +#: FlatCAMObj.py:5667 FlatCAMObj.py:5820 msgid "" "Tool Offset is selected in Tool Table but no value is provided.\n" "Add a Tool Offset or change the Offset Type." @@ -2636,45 +3020,45 @@ msgstr "" "Wert angegeben.\n" "Fügen Sie einen Werkzeugversatz hinzu oder ändern Sie den Versatztyp." -#: FlatCAMObj.py:5177 FlatCAMObj.py:5325 +#: FlatCAMObj.py:5733 FlatCAMObj.py:5882 msgid "G-Code parsing in progress..." msgstr "G-Code-Analyse läuft ..." -#: FlatCAMObj.py:5179 FlatCAMObj.py:5327 +#: FlatCAMObj.py:5735 FlatCAMObj.py:5884 msgid "G-Code parsing finished..." msgstr "G-Code-Analyse beendet ..." -#: FlatCAMObj.py:5187 +#: FlatCAMObj.py:5743 msgid "Finished G-Code processing" msgstr "G-Code-Verarbeitung abgeschlossen" -#: FlatCAMObj.py:5189 FlatCAMObj.py:5339 +#: FlatCAMObj.py:5745 FlatCAMObj.py:5896 msgid "G-Code processing failed with error" msgstr "G-Code-Verarbeitung fehlgeschlagen mit Fehler" -#: FlatCAMObj.py:5234 flatcamTools/ToolSolderPaste.py:1303 +#: FlatCAMObj.py:5790 flatcamTools/ToolSolderPaste.py:1300 msgid "Cancelled. Empty file, it has no geometry" msgstr "Abgebrochen. Leere Datei hat keine Geometrie" -#: FlatCAMObj.py:5337 FlatCAMObj.py:5486 +#: FlatCAMObj.py:5894 FlatCAMObj.py:6055 msgid "Finished G-Code processing..." msgstr "Fertige G-Code Verarbeitung ..." -#: FlatCAMObj.py:5356 FlatCAMObj.py:5360 FlatCAMObj.py:5496 +#: FlatCAMObj.py:5913 FlatCAMObj.py:5917 FlatCAMObj.py:6062 msgid "CNCjob created" msgstr "CNCjob erstellt" -#: FlatCAMObj.py:5527 FlatCAMObj.py:5536 flatcamParsers/ParseGerber.py:1794 -#: flatcamParsers/ParseGerber.py:1804 +#: FlatCAMObj.py:6092 FlatCAMObj.py:6101 flatcamParsers/ParseGerber.py:1866 +#: flatcamParsers/ParseGerber.py:1876 msgid "Scale factor has to be a number: integer or float." msgstr "" "Der Skalierungsfaktor muss eine Zahl sein: Ganzzahl oder Fließkommazahl." -#: FlatCAMObj.py:5600 +#: FlatCAMObj.py:6164 msgid "Geometry Scale done." msgstr "Geometrie Skalierung fertig." -#: FlatCAMObj.py:5617 flatcamParsers/ParseGerber.py:1920 +#: FlatCAMObj.py:6181 flatcamParsers/ParseGerber.py:1992 msgid "" "An (x,y) pair of values are needed. Probable you entered only one value in " "the Offset field." @@ -2682,11 +3066,11 @@ msgstr "" "Ein (x, y) Wertepaar wird benötigt. Wahrscheinlich haben Sie im Feld Offset " "nur einen Wert eingegeben." -#: FlatCAMObj.py:5674 +#: FlatCAMObj.py:6237 msgid "Geometry Offset done." msgstr "Geometrie Offset fertig." -#: FlatCAMObj.py:5703 +#: FlatCAMObj.py:6266 msgid "" "The Toolchange X,Y field in Edit -> Preferences has to be in the format (x, " "y)\n" @@ -2696,43 +3080,43 @@ msgstr "" "(x, y) sein\n" "Aber jetzt gibt es nur einen Wert, nicht zwei." -#: FlatCAMObj.py:6388 FlatCAMObj.py:7175 FlatCAMObj.py:7371 +#: FlatCAMObj.py:6956 FlatCAMObj.py:7802 FlatCAMObj.py:7999 msgid "Basic" msgstr "Basic" -#: FlatCAMObj.py:6394 FlatCAMObj.py:7179 FlatCAMObj.py:7375 +#: FlatCAMObj.py:6962 FlatCAMObj.py:7806 FlatCAMObj.py:8003 msgid "Advanced" msgstr "Erweitert" -#: FlatCAMObj.py:6437 +#: FlatCAMObj.py:7005 msgid "Plotting..." msgstr "Zeichnung..." -#: FlatCAMObj.py:6460 FlatCAMObj.py:6465 flatcamTools/ToolSolderPaste.py:1509 +#: FlatCAMObj.py:7034 FlatCAMObj.py:7039 flatcamTools/ToolSolderPaste.py:1498 msgid "Export Machine Code ..." msgstr "Maschinencode exportieren ..." -#: FlatCAMObj.py:6470 flatcamTools/ToolSolderPaste.py:1513 +#: FlatCAMObj.py:7044 flatcamTools/ToolSolderPaste.py:1502 msgid "Export Machine Code cancelled ..." msgstr "Maschinencode exportieren abgebrochen ..." -#: FlatCAMObj.py:6492 +#: FlatCAMObj.py:7065 msgid "Machine Code file saved to" msgstr "Maschinencode-Datei gespeichert in" -#: FlatCAMObj.py:6546 flatcamTools/ToolCalibration.py:1083 +#: FlatCAMObj.py:7126 flatcamTools/ToolCalibration.py:1097 msgid "Loaded Machine Code into Code Editor" msgstr "Maschinencode in den Code-Editor geladen" -#: FlatCAMObj.py:6684 +#: FlatCAMObj.py:7265 msgid "This CNCJob object can't be processed because it is a" msgstr "Dieses CNCJob-Objekt kann nicht verarbeitet werden, da es sich um ein" -#: FlatCAMObj.py:6686 +#: FlatCAMObj.py:7267 msgid "CNCJob object" msgstr "CNCJob-Objekt" -#: FlatCAMObj.py:6866 +#: FlatCAMObj.py:7447 msgid "" "G-code does not have a G94 code and we will not include the code in the " "'Prepend to GCode' text box" @@ -2740,43 +3124,43 @@ msgstr "" "G-Code hat keinen G94-Code und wir werden den Code nicht in das Textfeld " "\"Vor dem GCode\" aufnehmen" -#: FlatCAMObj.py:6877 +#: FlatCAMObj.py:7458 msgid "Cancelled. The Toolchange Custom code is enabled but it's empty." msgstr "" "Abgebrochen. Der benutzerdefinierte Code zum Ändern des Werkzeugs ist " "aktiviert, aber er ist leer." -#: FlatCAMObj.py:6882 +#: FlatCAMObj.py:7463 msgid "Toolchange G-code was replaced by a custom code." msgstr "" "Der Werkzeugwechsel-G-Code wurde durch einen benutzerdefinierten Code " "ersetzt." -#: FlatCAMObj.py:6899 flatcamEditors/FlatCAMTextEditor.py:270 -#: flatcamTools/ToolSolderPaste.py:1540 +#: FlatCAMObj.py:7480 flatcamEditors/FlatCAMTextEditor.py:272 +#: flatcamTools/ToolSolderPaste.py:1529 msgid "No such file or directory" msgstr "Keine solche Datei oder Ordner" -#: FlatCAMObj.py:6913 flatcamEditors/FlatCAMTextEditor.py:282 +#: FlatCAMObj.py:7494 flatcamEditors/FlatCAMTextEditor.py:284 msgid "Saved to" msgstr "Gespeichert in" -#: FlatCAMObj.py:6923 FlatCAMObj.py:6933 +#: FlatCAMObj.py:7511 FlatCAMObj.py:7521 msgid "" "The used preprocessor file has to have in it's name: 'toolchange_custom'" msgstr "" "Die verwendete Postprozessor-Datei muss im Namen enthalten sein: " "'toolchange_custom'" -#: FlatCAMObj.py:6937 +#: FlatCAMObj.py:7524 msgid "There is no preprocessor file." msgstr "Es gibt keine Postprozessor-Datei." -#: FlatCAMObj.py:7194 +#: FlatCAMObj.py:7821 msgid "Script Editor" msgstr "Script Editor" -#: FlatCAMObj.py:7475 +#: FlatCAMObj.py:8103 msgid "Document Editor" msgstr "Dokumenteditor" @@ -2784,6 +3168,16 @@ msgstr "Dokumenteditor" msgid "processes running." msgstr "laufende Prozesse." +#: FlatCAMTool.py:245 FlatCAMTool.py:252 flatcamGUI/ObjectUI.py:156 +#: flatcamGUI/ObjectUI.py:163 +msgid "Edited value is out of range" +msgstr "Der bearbeitete Wert liegt außerhalb des Bereichs" + +#: FlatCAMTool.py:247 FlatCAMTool.py:254 flatcamGUI/ObjectUI.py:158 +#: flatcamGUI/ObjectUI.py:165 +msgid "Edited value is within limits." +msgstr "Der bearbeitete Wert liegt innerhalb der Grenzen." + #: FlatCAMTranslation.py:103 msgid "The application will restart." msgstr "Die Anwendung wird neu gestartet." @@ -2796,68 +3190,68 @@ msgstr "Möchten Sie die aktuelle Sprache wirklich in ändern" msgid "Apply Language ..." msgstr "Sprache anwenden ..." -#: ObjectCollection.py:459 +#: ObjectCollection.py:506 #, python-brace-format msgid "Object renamed from {old} to {new}" msgstr "Objekt umbenannt von {old} zu {new}" -#: ObjectCollection.py:858 +#: ObjectCollection.py:972 msgid "Cause of error" msgstr "Fehlerursache" -#: camlib.py:590 +#: camlib.py:593 msgid "self.solid_geometry is neither BaseGeometry or list." msgstr "self.solid_geometry ist weder BaseGeometry noch eine Liste." -#: camlib.py:953 +#: camlib.py:968 msgid "Pass" msgstr "Pass" -#: camlib.py:974 +#: camlib.py:988 msgid "Get Exteriors" msgstr "Holen Sie sich das Äußere" -#: camlib.py:977 +#: camlib.py:991 msgid "Get Interiors" msgstr "Holen Sie sich Innenräume" -#: camlib.py:1964 +#: camlib.py:2172 msgid "Object was mirrored" msgstr "Objekt wurde gespiegelt" -#: camlib.py:1967 +#: camlib.py:2175 msgid "Failed to mirror. No object selected" msgstr "Spiegelung fehlgeschlagen Kein Objekt ausgewählt" -#: camlib.py:2036 +#: camlib.py:2244 msgid "Object was rotated" msgstr "Objekt wurde gedreht" -#: camlib.py:2039 +#: camlib.py:2247 msgid "Failed to rotate. No object selected" msgstr "Fehler beim Drehen. Kein Objekt ausgewählt" -#: camlib.py:2107 +#: camlib.py:2314 msgid "Object was skewed" msgstr "Objekt war schief" -#: camlib.py:2110 +#: camlib.py:2317 msgid "Failed to skew. No object selected" msgstr "Fehler beim Neigen Kein Objekt ausgewählt" -#: camlib.py:2179 +#: camlib.py:2392 msgid "Object was buffered" msgstr "Objekt wurde gepuffert" -#: camlib.py:2181 +#: camlib.py:2394 msgid "Failed to buffer. No object selected" msgstr "Fehler beim Puffern. Kein Objekt ausgewählt" -#: camlib.py:2378 +#: camlib.py:2599 msgid "There is no such parameter" msgstr "Es gibt keinen solchen Parameter" -#: camlib.py:2454 +#: camlib.py:2659 camlib.py:2892 camlib.py:3121 camlib.py:3343 msgid "" "The Cut Z parameter has positive value. It is the depth value to drill into " "material.\n" @@ -2872,13 +3266,14 @@ msgstr "" "einen negativen Wert. \n" "Überprüfen Sie den resultierenden CNC-Code (Gcode usw.)." -#: camlib.py:2462 camlib.py:3181 camlib.py:3539 +#: camlib.py:2667 camlib.py:2902 camlib.py:3131 camlib.py:3353 camlib.py:3639 +#: camlib.py:4008 msgid "The Cut Z parameter is zero. There will be no cut, skipping file" msgstr "" "Der Parameter Cut Z ist Null. Es wird kein Schnitt ausgeführt, und die Datei " "wird übersprungen" -#: camlib.py:2475 camlib.py:3512 +#: camlib.py:2678 camlib.py:3976 msgid "" "The Toolchange X,Y field in Edit -> Preferences has to be in the format (x, " "y) \n" @@ -2888,31 +3283,39 @@ msgstr "" "(x, y) sein\n" "Aber jetzt gibt es nur einen Wert, nicht zwei. " -#: camlib.py:2550 +#: camlib.py:2687 camlib.py:3590 camlib.py:3958 +msgid "" +"The End Move X,Y field in Edit -> Preferences has to be in the format (x, y) " +"but now there is only one value, not two." +msgstr "" +"Das Feld Endverschiebung X, Y unter Bearbeiten -> Einstellungen muss das " +"Format (x, y) haben, aber jetzt gibt es nur einen Wert, nicht zwei." + +#: camlib.py:2775 msgid "Creating a list of points to drill..." msgstr "Erstellen einer Liste von Punkten zum Bohren ..." -#: camlib.py:2632 +#: camlib.py:2865 camlib.py:3737 camlib.py:4112 msgid "Starting G-Code" msgstr "G-Code starten" -#: camlib.py:2727 camlib.py:2870 camlib.py:2972 camlib.py:3292 camlib.py:3653 +#: camlib.py:3006 camlib.py:3225 camlib.py:3389 camlib.py:3750 camlib.py:4123 msgid "Starting G-Code for tool with diameter" msgstr "Start-G-Code für Werkzeug mit Durchmesser" -#: camlib.py:2783 camlib.py:2926 camlib.py:3029 +#: camlib.py:3089 camlib.py:3307 camlib.py:3475 msgid "G91 coordinates not implemented" msgstr "G91 Koordinaten nicht implementiert" -#: camlib.py:2789 camlib.py:2933 camlib.py:3035 +#: camlib.py:3095 camlib.py:3314 camlib.py:3481 msgid "The loaded Excellon file has no drills" msgstr "Die geladene Excellon-Datei hat keine Bohrer" -#: camlib.py:3058 +#: camlib.py:3504 msgid "Finished G-Code generation..." msgstr "Fertige G-Code-Generierung ..." -#: camlib.py:3153 +#: camlib.py:3608 msgid "" "The Toolchange X,Y field in Edit -> Preferences has to be in the format (x, " "y) \n" @@ -2922,7 +3325,7 @@ msgstr "" "das Format (x, y) haben.\n" "Aber jetzt gibt es nur einen Wert, nicht zwei." -#: camlib.py:3166 camlib.py:3525 +#: camlib.py:3622 camlib.py:3991 msgid "" "Cut_Z parameter is None or zero. Most likely a bad combinations of other " "parameters." @@ -2930,7 +3333,7 @@ msgstr "" "Der Parameter Cut_Z ist None oder Null. Höchstwahrscheinlich eine schlechte " "Kombination anderer Parameter." -#: camlib.py:3173 camlib.py:3531 +#: camlib.py:3631 camlib.py:4000 msgid "" "The Cut Z parameter has positive value. It is the depth value to cut into " "material.\n" @@ -2945,11 +3348,11 @@ msgstr "" "einen negativen Wert. \n" "Überprüfen Sie den resultierenden CNC-Code (Gcode usw.)." -#: camlib.py:3186 camlib.py:3545 +#: camlib.py:3644 camlib.py:4014 msgid "Travel Z parameter is None or zero." msgstr "Der Parameter für den Travel Z ist Kein oder Null." -#: camlib.py:3191 camlib.py:3550 +#: camlib.py:3649 camlib.py:4019 msgid "" "The Travel Z parameter has negative value. It is the height value to travel " "between cuts.\n" @@ -2963,40 +3366,36 @@ msgstr "" "einen Tippfehler handelt, konvertiert die App den Wert in einen positiven " "Wert. Überprüfen Sie den resultierenden CNC-Code (Gcode usw.)." -#: camlib.py:3199 camlib.py:3558 +#: camlib.py:3657 camlib.py:4027 msgid "The Z Travel parameter is zero. This is dangerous, skipping file" msgstr "" "Der Parameter Z-Weg ist Null. Dies ist gefährlich, da die %s Datei " "übersprungen wird" -#: camlib.py:3218 camlib.py:3580 +#: camlib.py:3676 camlib.py:4050 msgid "Indexing geometry before generating G-Code..." msgstr "Indizierung der Geometrie vor dem Generieren von G-Code ..." -#: camlib.py:3279 camlib.py:3642 -msgid "Starting G-Code..." -msgstr "G-Code wird gestartet ..." - -#: camlib.py:3362 camlib.py:3724 +#: camlib.py:3820 camlib.py:4192 msgid "Finished G-Code generation" msgstr "Fertige G-Code-Generierung" -#: camlib.py:3364 +#: camlib.py:3820 msgid "paths traced" msgstr "Pfade verfolgt" -#: camlib.py:3399 +#: camlib.py:3853 msgid "Expected a Geometry, got" msgstr "Erwartet eine Geometrie, erhalten" -#: camlib.py:3406 +#: camlib.py:3860 msgid "" "Trying to generate a CNC Job from a Geometry object without solid_geometry." msgstr "" "Der Versuch, einen CNC-Auftrag aus einem Geometrieobjekt ohne solid_geometry " "zu generieren." -#: camlib.py:3446 +#: camlib.py:3901 msgid "" "The Tool Offset value is too negative to use for the current_geometry.\n" "Raise the value (in module) and try again." @@ -3005,35 +3404,35 @@ msgstr "" "Geometrie verwendet zu werden.\n" "Erhöhen Sie den Wert (im Modul) und versuchen Sie es erneut." -#: camlib.py:3724 +#: camlib.py:4192 msgid " paths traced." msgstr " Pfade verfolgt." -#: camlib.py:3752 +#: camlib.py:4220 msgid "There is no tool data in the SolderPaste geometry." msgstr "In der SolderPaste-Geometrie sind keine Werkzeugdaten vorhanden." -#: camlib.py:3839 +#: camlib.py:4306 msgid "Finished SolderPste G-Code generation" msgstr "Fertige G-Code-Generierung" -#: camlib.py:3841 +#: camlib.py:4306 msgid "paths traced." msgstr "paths traced." -#: camlib.py:4097 +#: camlib.py:4566 msgid "Parsing GCode file. Number of lines" msgstr "Analysieren der GCode-Datei. Anzahl der Zeilen" -#: camlib.py:4204 +#: camlib.py:4673 msgid "Creating Geometry from the parsed GCode file. " msgstr "Erstellen von Geometrie aus der analysierten GCode-Datei. " -#: camlib.py:4345 camlib.py:4629 camlib.py:4732 camlib.py:4801 +#: camlib.py:4816 camlib.py:5101 camlib.py:5204 camlib.py:5360 msgid "G91 coordinates not implemented ..." msgstr "G91 Koordinaten nicht implementiert ..." -#: camlib.py:4476 +#: camlib.py:4948 msgid "Unifying Geometry from parsed Geometry segments" msgstr "Vereinheitlichen von Geometrie aus analysierten Geometriesegmenten" @@ -3063,11 +3462,11 @@ msgstr "" #: flatcamEditors/FlatCAMExcEditor.py:193 #: flatcamEditors/FlatCAMExcEditor.py:416 #: flatcamEditors/FlatCAMExcEditor.py:637 -#: flatcamEditors/FlatCAMExcEditor.py:1155 -#: flatcamEditors/FlatCAMExcEditor.py:1182 +#: flatcamEditors/FlatCAMExcEditor.py:1152 +#: flatcamEditors/FlatCAMExcEditor.py:1179 #: flatcamEditors/FlatCAMGrbEditor.py:471 -#: flatcamEditors/FlatCAMGrbEditor.py:1936 -#: flatcamEditors/FlatCAMGrbEditor.py:1966 +#: flatcamEditors/FlatCAMGrbEditor.py:1935 +#: flatcamEditors/FlatCAMGrbEditor.py:1965 msgid "Click on target location ..." msgstr "Klicken Sie auf den Zielort ..." @@ -3100,8 +3499,8 @@ msgstr "Um einen Steckplatz hinzuzufügen, wählen Sie zunächst ein Werkzeug au #: flatcamEditors/FlatCAMExcEditor.py:455 #: flatcamEditors/FlatCAMExcEditor.py:462 -#: flatcamEditors/FlatCAMExcEditor.py:744 -#: flatcamEditors/FlatCAMExcEditor.py:751 +#: flatcamEditors/FlatCAMExcEditor.py:743 +#: flatcamEditors/FlatCAMExcEditor.py:750 msgid "Value is missing or wrong format. Add it and retry." msgstr "" "Wert fehlt oder falsches Format. Fügen Sie es hinzu und versuchen Sie es " @@ -3121,72 +3520,66 @@ msgstr "" msgid "Click on the Slot Circular Array Start position" msgstr "Klicken Sie auf die kreisförmige Startposition des Arrays" -#: flatcamEditors/FlatCAMExcEditor.py:682 -#: flatcamEditors/FlatCAMGrbEditor.py:520 +#: flatcamEditors/FlatCAMExcEditor.py:681 +#: flatcamEditors/FlatCAMGrbEditor.py:519 msgid "The value is mistyped. Check the value." msgstr "Der Wert ist falsch geschrieben. Überprüfen Sie den Wert." -#: flatcamEditors/FlatCAMExcEditor.py:861 +#: flatcamEditors/FlatCAMExcEditor.py:860 msgid "Too many Slots for the selected spacing angle." msgstr "Zu viele Slots für den ausgewählten Abstandswinkel." -#: flatcamEditors/FlatCAMExcEditor.py:884 +#: flatcamEditors/FlatCAMExcEditor.py:883 msgid "Done. Slot Array added." msgstr "Erledigt. Schlitze Array hinzugefügt." -#: flatcamEditors/FlatCAMExcEditor.py:906 +#: flatcamEditors/FlatCAMExcEditor.py:905 msgid "Click on the Drill(s) to resize ..." msgstr "Klicken Sie auf die Bohrer, um die Größe zu ändern ..." -#: flatcamEditors/FlatCAMExcEditor.py:936 +#: flatcamEditors/FlatCAMExcEditor.py:935 msgid "Resize drill(s) failed. Please enter a diameter for resize." msgstr "" "Die Größe der Bohrer ist fehlgeschlagen. Bitte geben Sie einen Durchmesser " "für die Größenänderung ein." -#: flatcamEditors/FlatCAMExcEditor.py:1026 -#: flatcamEditors/FlatCAMExcEditor.py:1095 flatcamGUI/FlatCAMGUI.py:3165 -#: flatcamGUI/FlatCAMGUI.py:3377 flatcamGUI/FlatCAMGUI.py:3591 -msgid "Cancelled." -msgstr "Abgebrochen." - -#: flatcamEditors/FlatCAMExcEditor.py:1116 +#: flatcamEditors/FlatCAMExcEditor.py:1113 msgid "Done. Drill/Slot Resize completed." msgstr "Getan. Bohrer / Schlitz Größenänderung abgeschlossen." -#: flatcamEditors/FlatCAMExcEditor.py:1119 +#: flatcamEditors/FlatCAMExcEditor.py:1116 msgid "Cancelled. No drills/slots selected for resize ..." msgstr "Abgebrochen. Keine Bohrer / Schlitze für Größenänderung ausgewählt ..." -#: flatcamEditors/FlatCAMExcEditor.py:1157 -#: flatcamEditors/FlatCAMGrbEditor.py:1938 +#: flatcamEditors/FlatCAMExcEditor.py:1154 +#: flatcamEditors/FlatCAMGrbEditor.py:1937 msgid "Click on reference location ..." msgstr "Klicken Sie auf die Referenzposition ..." -#: flatcamEditors/FlatCAMExcEditor.py:1214 +#: flatcamEditors/FlatCAMExcEditor.py:1211 msgid "Done. Drill(s) Move completed." msgstr "Erledigt. Bohrer Bewegen abgeschlossen." -#: flatcamEditors/FlatCAMExcEditor.py:1322 +#: flatcamEditors/FlatCAMExcEditor.py:1319 msgid "Done. Drill(s) copied." msgstr "Erledigt. Bohrer kopiert." -#: flatcamEditors/FlatCAMExcEditor.py:1555 flatcamGUI/PreferencesUI.py:3551 +#: flatcamEditors/FlatCAMExcEditor.py:1558 flatcamGUI/PreferencesUI.py:3829 msgid "Excellon Editor" msgstr "Excellon Editor" -#: flatcamEditors/FlatCAMExcEditor.py:1562 -#: flatcamEditors/FlatCAMGrbEditor.py:2454 +#: flatcamEditors/FlatCAMExcEditor.py:1565 +#: flatcamEditors/FlatCAMGrbEditor.py:2460 msgid "Name:" msgstr "Name:" -#: flatcamEditors/FlatCAMExcEditor.py:1568 flatcamGUI/ObjectUI.py:757 -#: flatcamGUI/ObjectUI.py:1184 flatcamTools/ToolNonCopperClear.py:109 -#: flatcamTools/ToolPaint.py:112 flatcamTools/ToolSolderPaste.py:73 +#: flatcamEditors/FlatCAMExcEditor.py:1571 flatcamGUI/ObjectUI.py:760 +#: flatcamGUI/ObjectUI.py:1463 flatcamTools/ToolNCC.py:120 +#: flatcamTools/ToolPaint.py:115 flatcamTools/ToolSolderPaste.py:75 msgid "Tools Table" msgstr "Werkzeugtabelle" -#: flatcamEditors/FlatCAMExcEditor.py:1570 flatcamGUI/ObjectUI.py:759 +#: flatcamEditors/FlatCAMExcEditor.py:1573 flatcamGUI/ObjectUI.py:762 msgid "" "Tools in this Excellon object\n" "when are used for drilling." @@ -3194,11 +3587,11 @@ msgstr "" "Werkzeuge in diesem Excellon-Objekt\n" "Wann werden zum Bohren verwendet." -#: flatcamEditors/FlatCAMExcEditor.py:1590 +#: flatcamEditors/FlatCAMExcEditor.py:1593 msgid "Add/Delete Tool" msgstr "Werkzeug hinzufügen / löschen" -#: flatcamEditors/FlatCAMExcEditor.py:1592 +#: flatcamEditors/FlatCAMExcEditor.py:1595 msgid "" "Add/Delete a tool to the tool list\n" "for this Excellon object." @@ -3206,16 +3599,16 @@ msgstr "" "Werkzeug zur Werkzeugliste hinzufügen / löschen\n" "für dieses Excellon-Objekt." -#: flatcamEditors/FlatCAMExcEditor.py:1604 flatcamGUI/ObjectUI.py:1297 -#: flatcamGUI/PreferencesUI.py:3582 +#: flatcamEditors/FlatCAMExcEditor.py:1607 flatcamGUI/ObjectUI.py:1583 +#: flatcamGUI/PreferencesUI.py:3860 msgid "Diameter for the new tool" msgstr "Durchmesser für das neue Werkzeug" -#: flatcamEditors/FlatCAMExcEditor.py:1614 +#: flatcamEditors/FlatCAMExcEditor.py:1617 msgid "Add Tool" msgstr "Werkzeug hinzufügen" -#: flatcamEditors/FlatCAMExcEditor.py:1616 +#: flatcamEditors/FlatCAMExcEditor.py:1619 msgid "" "Add a new tool to the tool list\n" "with the diameter specified above." @@ -3223,11 +3616,11 @@ msgstr "" "Fügen Sie der Werkzeugliste ein neues Werkzeug hinzu\n" "mit dem oben angegebenen Durchmesser." -#: flatcamEditors/FlatCAMExcEditor.py:1628 +#: flatcamEditors/FlatCAMExcEditor.py:1631 msgid "Delete Tool" msgstr "Werkzeug löschen" -#: flatcamEditors/FlatCAMExcEditor.py:1630 +#: flatcamEditors/FlatCAMExcEditor.py:1633 msgid "" "Delete a tool in the tool list\n" "by selecting a row in the tool table." @@ -3235,41 +3628,41 @@ msgstr "" "Löschen Sie ein Werkzeug in der Werkzeugliste\n" "indem Sie eine Zeile in der Werkzeugtabelle auswählen." -#: flatcamEditors/FlatCAMExcEditor.py:1648 flatcamGUI/FlatCAMGUI.py:1896 +#: flatcamEditors/FlatCAMExcEditor.py:1651 flatcamGUI/FlatCAMGUI.py:2004 msgid "Resize Drill(s)" msgstr "Größe der Bohrer ändern" -#: flatcamEditors/FlatCAMExcEditor.py:1650 +#: flatcamEditors/FlatCAMExcEditor.py:1653 msgid "Resize a drill or a selection of drills." msgstr "Ändern Sie die Größe eines Bohrers oder einer Auswahl von Bohrern." -#: flatcamEditors/FlatCAMExcEditor.py:1657 +#: flatcamEditors/FlatCAMExcEditor.py:1660 msgid "Resize Dia" msgstr "Durchmesser ändern" -#: flatcamEditors/FlatCAMExcEditor.py:1659 +#: flatcamEditors/FlatCAMExcEditor.py:1662 msgid "Diameter to resize to." msgstr "Durchmesser zur Größenänderung." -#: flatcamEditors/FlatCAMExcEditor.py:1670 +#: flatcamEditors/FlatCAMExcEditor.py:1673 msgid "Resize" msgstr "Größe ändern" -#: flatcamEditors/FlatCAMExcEditor.py:1672 +#: flatcamEditors/FlatCAMExcEditor.py:1675 msgid "Resize drill(s)" msgstr "Bohrer verkleinern" -#: flatcamEditors/FlatCAMExcEditor.py:1697 flatcamGUI/FlatCAMGUI.py:1895 -#: flatcamGUI/FlatCAMGUI.py:2147 +#: flatcamEditors/FlatCAMExcEditor.py:1700 flatcamGUI/FlatCAMGUI.py:2003 +#: flatcamGUI/FlatCAMGUI.py:2255 msgid "Add Drill Array" msgstr "Bohrer-Array hinzufügen" -#: flatcamEditors/FlatCAMExcEditor.py:1699 +#: flatcamEditors/FlatCAMExcEditor.py:1702 msgid "Add an array of drills (linear or circular array)" msgstr "" "Hinzufügen eines Arrays von Bohrern (lineares oder kreisförmiges Array)" -#: flatcamEditors/FlatCAMExcEditor.py:1705 +#: flatcamEditors/FlatCAMExcEditor.py:1708 msgid "" "Select the type of drills array to create.\n" "It can be Linear X(Y) or Circular" @@ -3277,43 +3670,48 @@ msgstr "" "Wählen Sie den Typ des zu erstellenden Bohrfelds aus.\n" "Es kann lineares X (Y) oder rund sein" -#: flatcamEditors/FlatCAMExcEditor.py:1708 -#: flatcamEditors/FlatCAMExcEditor.py:1922 -#: flatcamEditors/FlatCAMGrbEditor.py:2766 +#: flatcamEditors/FlatCAMExcEditor.py:1711 +#: flatcamEditors/FlatCAMExcEditor.py:1925 +#: flatcamEditors/FlatCAMGrbEditor.py:2772 msgid "Linear" msgstr "Linear" -#: flatcamEditors/FlatCAMExcEditor.py:1709 -#: flatcamEditors/FlatCAMExcEditor.py:1923 -#: flatcamEditors/FlatCAMGrbEditor.py:2767 flatcamGUI/ObjectUI.py:311 -#: flatcamGUI/PreferencesUI.py:5044 flatcamGUI/PreferencesUI.py:7465 -#: flatcamTools/ToolFiducials.py:220 flatcamTools/ToolNonCopperClear.py:221 +#: flatcamEditors/FlatCAMExcEditor.py:1712 +#: flatcamEditors/FlatCAMExcEditor.py:1926 +#: flatcamEditors/FlatCAMGrbEditor.py:2773 flatcamGUI/ObjectUI.py:315 +#: flatcamGUI/PreferencesUI.py:5340 flatcamGUI/PreferencesUI.py:5909 +#: flatcamGUI/PreferencesUI.py:7971 flatcamGUI/PreferencesUI.py:8151 +#: flatcamGUI/PreferencesUI.py:8248 flatcamGUI/PreferencesUI.py:8363 +#: flatcamGUI/PreferencesUI.py:8462 flatcamTools/ToolExtractDrills.py:78 +#: flatcamTools/ToolExtractDrills.py:201 flatcamTools/ToolFiducials.py:220 +#: flatcamTools/ToolNCC.py:221 flatcamTools/ToolPaint.py:204 +#: flatcamTools/ToolPunchGerber.py:89 flatcamTools/ToolPunchGerber.py:229 msgid "Circular" msgstr "Kreisförmig" -#: flatcamEditors/FlatCAMExcEditor.py:1717 flatcamGUI/PreferencesUI.py:3593 +#: flatcamEditors/FlatCAMExcEditor.py:1720 flatcamGUI/PreferencesUI.py:3871 msgid "Nr of drills" msgstr "Anzahl der Bohrer" -#: flatcamEditors/FlatCAMExcEditor.py:1718 flatcamGUI/PreferencesUI.py:3595 +#: flatcamEditors/FlatCAMExcEditor.py:1721 flatcamGUI/PreferencesUI.py:3873 msgid "Specify how many drills to be in the array." msgstr "Geben Sie an, wie viele Drills im Array enthalten sein sollen." -#: flatcamEditors/FlatCAMExcEditor.py:1736 -#: flatcamEditors/FlatCAMExcEditor.py:1786 -#: flatcamEditors/FlatCAMExcEditor.py:1858 -#: flatcamEditors/FlatCAMExcEditor.py:1951 -#: flatcamEditors/FlatCAMExcEditor.py:2002 -#: flatcamEditors/FlatCAMGrbEditor.py:1572 -#: flatcamEditors/FlatCAMGrbEditor.py:2795 -#: flatcamEditors/FlatCAMGrbEditor.py:2844 flatcamGUI/PreferencesUI.py:3703 +#: flatcamEditors/FlatCAMExcEditor.py:1739 +#: flatcamEditors/FlatCAMExcEditor.py:1789 +#: flatcamEditors/FlatCAMExcEditor.py:1861 +#: flatcamEditors/FlatCAMExcEditor.py:1954 +#: flatcamEditors/FlatCAMExcEditor.py:2005 +#: flatcamEditors/FlatCAMGrbEditor.py:1571 +#: flatcamEditors/FlatCAMGrbEditor.py:2801 +#: flatcamEditors/FlatCAMGrbEditor.py:2850 flatcamGUI/PreferencesUI.py:3981 msgid "Direction" msgstr "Richtung" -#: flatcamEditors/FlatCAMExcEditor.py:1738 -#: flatcamEditors/FlatCAMExcEditor.py:1953 -#: flatcamEditors/FlatCAMGrbEditor.py:2797 flatcamGUI/PreferencesUI.py:2536 -#: flatcamGUI/PreferencesUI.py:3611 flatcamGUI/PreferencesUI.py:3759 +#: flatcamEditors/FlatCAMExcEditor.py:1741 +#: flatcamEditors/FlatCAMExcEditor.py:1956 +#: flatcamEditors/FlatCAMGrbEditor.py:2803 flatcamGUI/PreferencesUI.py:2718 +#: flatcamGUI/PreferencesUI.py:3889 flatcamGUI/PreferencesUI.py:4037 msgid "" "Direction on which the linear array is oriented:\n" "- 'X' - horizontal axis \n" @@ -3325,62 +3723,62 @@ msgstr "" "- 'Y' - vertikale Achse oder\n" "- 'Winkel' - ein benutzerdefinierter Winkel für die Neigung des Arrays" -#: flatcamEditors/FlatCAMExcEditor.py:1745 -#: flatcamEditors/FlatCAMExcEditor.py:1867 -#: flatcamEditors/FlatCAMExcEditor.py:1960 -#: flatcamEditors/FlatCAMGrbEditor.py:2804 flatcamGUI/PreferencesUI.py:2542 -#: flatcamGUI/PreferencesUI.py:3617 flatcamGUI/PreferencesUI.py:3712 -#: flatcamGUI/PreferencesUI.py:3765 flatcamGUI/PreferencesUI.py:5853 +#: flatcamEditors/FlatCAMExcEditor.py:1748 +#: flatcamEditors/FlatCAMExcEditor.py:1870 +#: flatcamEditors/FlatCAMExcEditor.py:1963 +#: flatcamEditors/FlatCAMGrbEditor.py:2810 flatcamGUI/PreferencesUI.py:2724 +#: flatcamGUI/PreferencesUI.py:3895 flatcamGUI/PreferencesUI.py:3990 +#: flatcamGUI/PreferencesUI.py:4043 flatcamGUI/PreferencesUI.py:6341 #: flatcamTools/ToolFilm.py:256 msgid "X" msgstr "X" -#: flatcamEditors/FlatCAMExcEditor.py:1746 -#: flatcamEditors/FlatCAMExcEditor.py:1868 -#: flatcamEditors/FlatCAMExcEditor.py:1961 -#: flatcamEditors/FlatCAMGrbEditor.py:2805 flatcamGUI/PreferencesUI.py:2543 -#: flatcamGUI/PreferencesUI.py:3618 flatcamGUI/PreferencesUI.py:3713 -#: flatcamGUI/PreferencesUI.py:3766 flatcamGUI/PreferencesUI.py:5854 +#: flatcamEditors/FlatCAMExcEditor.py:1749 +#: flatcamEditors/FlatCAMExcEditor.py:1871 +#: flatcamEditors/FlatCAMExcEditor.py:1964 +#: flatcamEditors/FlatCAMGrbEditor.py:2811 flatcamGUI/PreferencesUI.py:2725 +#: flatcamGUI/PreferencesUI.py:3896 flatcamGUI/PreferencesUI.py:3991 +#: flatcamGUI/PreferencesUI.py:4044 flatcamGUI/PreferencesUI.py:6342 #: flatcamTools/ToolFilm.py:257 msgid "Y" msgstr "Y" -#: flatcamEditors/FlatCAMExcEditor.py:1747 -#: flatcamEditors/FlatCAMExcEditor.py:1764 -#: flatcamEditors/FlatCAMExcEditor.py:1798 -#: flatcamEditors/FlatCAMExcEditor.py:1869 -#: flatcamEditors/FlatCAMExcEditor.py:1873 -#: flatcamEditors/FlatCAMExcEditor.py:1962 -#: flatcamEditors/FlatCAMExcEditor.py:1980 -#: flatcamEditors/FlatCAMExcEditor.py:2014 -#: flatcamEditors/FlatCAMGrbEditor.py:2806 -#: flatcamEditors/FlatCAMGrbEditor.py:2823 -#: flatcamEditors/FlatCAMGrbEditor.py:2859 flatcamGUI/PreferencesUI.py:2544 -#: flatcamGUI/PreferencesUI.py:2562 flatcamGUI/PreferencesUI.py:3619 -#: flatcamGUI/PreferencesUI.py:3638 flatcamGUI/PreferencesUI.py:3714 -#: flatcamGUI/PreferencesUI.py:3719 flatcamGUI/PreferencesUI.py:3767 -#: flatcamGUI/PreferencesUI.py:3788 flatcamGUI/PreferencesUI.py:6246 -#: flatcamTools/ToolDistance.py:66 flatcamTools/ToolDistanceMin.py:68 -#: flatcamTools/ToolTransform.py:63 +#: flatcamEditors/FlatCAMExcEditor.py:1750 +#: flatcamEditors/FlatCAMExcEditor.py:1767 +#: flatcamEditors/FlatCAMExcEditor.py:1801 +#: flatcamEditors/FlatCAMExcEditor.py:1872 +#: flatcamEditors/FlatCAMExcEditor.py:1876 +#: flatcamEditors/FlatCAMExcEditor.py:1965 +#: flatcamEditors/FlatCAMExcEditor.py:1983 +#: flatcamEditors/FlatCAMExcEditor.py:2017 +#: flatcamEditors/FlatCAMGrbEditor.py:2812 +#: flatcamEditors/FlatCAMGrbEditor.py:2829 +#: flatcamEditors/FlatCAMGrbEditor.py:2865 flatcamGUI/PreferencesUI.py:2726 +#: flatcamGUI/PreferencesUI.py:2744 flatcamGUI/PreferencesUI.py:3897 +#: flatcamGUI/PreferencesUI.py:3916 flatcamGUI/PreferencesUI.py:3992 +#: flatcamGUI/PreferencesUI.py:3997 flatcamGUI/PreferencesUI.py:4045 +#: flatcamGUI/PreferencesUI.py:4066 flatcamGUI/PreferencesUI.py:6733 +#: flatcamTools/ToolDistance.py:120 flatcamTools/ToolDistanceMin.py:69 +#: flatcamTools/ToolTransform.py:61 msgid "Angle" msgstr "Winkel" -#: flatcamEditors/FlatCAMExcEditor.py:1751 -#: flatcamEditors/FlatCAMExcEditor.py:1966 -#: flatcamEditors/FlatCAMGrbEditor.py:2810 flatcamGUI/PreferencesUI.py:2550 -#: flatcamGUI/PreferencesUI.py:3625 flatcamGUI/PreferencesUI.py:3773 +#: flatcamEditors/FlatCAMExcEditor.py:1754 +#: flatcamEditors/FlatCAMExcEditor.py:1969 +#: flatcamEditors/FlatCAMGrbEditor.py:2816 flatcamGUI/PreferencesUI.py:2732 +#: flatcamGUI/PreferencesUI.py:3903 flatcamGUI/PreferencesUI.py:4051 msgid "Pitch" msgstr "Abstand" -#: flatcamEditors/FlatCAMExcEditor.py:1753 -#: flatcamEditors/FlatCAMExcEditor.py:1968 -#: flatcamEditors/FlatCAMGrbEditor.py:2812 flatcamGUI/PreferencesUI.py:2552 -#: flatcamGUI/PreferencesUI.py:3627 flatcamGUI/PreferencesUI.py:3775 +#: flatcamEditors/FlatCAMExcEditor.py:1756 +#: flatcamEditors/FlatCAMExcEditor.py:1971 +#: flatcamEditors/FlatCAMGrbEditor.py:2818 flatcamGUI/PreferencesUI.py:2734 +#: flatcamGUI/PreferencesUI.py:3905 flatcamGUI/PreferencesUI.py:4053 msgid "Pitch = Distance between elements of the array." msgstr "Abstand = Abstand zwischen Elementen des Arrays." -#: flatcamEditors/FlatCAMExcEditor.py:1766 -#: flatcamEditors/FlatCAMExcEditor.py:1982 +#: flatcamEditors/FlatCAMExcEditor.py:1769 +#: flatcamEditors/FlatCAMExcEditor.py:1985 msgid "" "Angle at which the linear array is placed.\n" "The precision is of max 2 decimals.\n" @@ -3392,9 +3790,9 @@ msgstr "" "Der Mindestwert beträgt -360 Grad.\n" "Maximalwert ist: 360.00 Grad." -#: flatcamEditors/FlatCAMExcEditor.py:1787 -#: flatcamEditors/FlatCAMExcEditor.py:2003 -#: flatcamEditors/FlatCAMGrbEditor.py:2846 +#: flatcamEditors/FlatCAMExcEditor.py:1790 +#: flatcamEditors/FlatCAMExcEditor.py:2006 +#: flatcamEditors/FlatCAMGrbEditor.py:2852 msgid "" "Direction for circular array.Can be CW = clockwise or CCW = counter " "clockwise." @@ -3402,37 +3800,37 @@ msgstr "" "Richtung für kreisförmige Anordnung. Kann CW = Uhrzeigersinn oder CCW = " "Gegenuhrzeigersinn sein." -#: flatcamEditors/FlatCAMExcEditor.py:1794 -#: flatcamEditors/FlatCAMExcEditor.py:2010 -#: flatcamEditors/FlatCAMGrbEditor.py:2854 flatcamGUI/PreferencesUI.py:2584 -#: flatcamGUI/PreferencesUI.py:3368 flatcamGUI/PreferencesUI.py:3661 -#: flatcamGUI/PreferencesUI.py:3811 flatcamGUI/PreferencesUI.py:4288 +#: flatcamEditors/FlatCAMExcEditor.py:1797 +#: flatcamEditors/FlatCAMExcEditor.py:2013 +#: flatcamEditors/FlatCAMGrbEditor.py:2860 flatcamGUI/PreferencesUI.py:2766 +#: flatcamGUI/PreferencesUI.py:3646 flatcamGUI/PreferencesUI.py:3939 +#: flatcamGUI/PreferencesUI.py:4089 flatcamGUI/PreferencesUI.py:4581 msgid "CW" msgstr "CW" -#: flatcamEditors/FlatCAMExcEditor.py:1795 -#: flatcamEditors/FlatCAMExcEditor.py:2011 -#: flatcamEditors/FlatCAMGrbEditor.py:2855 flatcamGUI/PreferencesUI.py:2585 -#: flatcamGUI/PreferencesUI.py:3369 flatcamGUI/PreferencesUI.py:3662 -#: flatcamGUI/PreferencesUI.py:3812 flatcamGUI/PreferencesUI.py:4289 +#: flatcamEditors/FlatCAMExcEditor.py:1798 +#: flatcamEditors/FlatCAMExcEditor.py:2014 +#: flatcamEditors/FlatCAMGrbEditor.py:2861 flatcamGUI/PreferencesUI.py:2767 +#: flatcamGUI/PreferencesUI.py:3647 flatcamGUI/PreferencesUI.py:3940 +#: flatcamGUI/PreferencesUI.py:4090 flatcamGUI/PreferencesUI.py:4582 msgid "CCW" msgstr "CCW" -#: flatcamEditors/FlatCAMExcEditor.py:1799 -#: flatcamEditors/FlatCAMExcEditor.py:2015 -#: flatcamEditors/FlatCAMGrbEditor.py:2861 flatcamGUI/PreferencesUI.py:2564 -#: flatcamGUI/PreferencesUI.py:2593 flatcamGUI/PreferencesUI.py:3640 -#: flatcamGUI/PreferencesUI.py:3670 flatcamGUI/PreferencesUI.py:3790 -#: flatcamGUI/PreferencesUI.py:3820 +#: flatcamEditors/FlatCAMExcEditor.py:1802 +#: flatcamEditors/FlatCAMExcEditor.py:2018 +#: flatcamEditors/FlatCAMGrbEditor.py:2867 flatcamGUI/PreferencesUI.py:2746 +#: flatcamGUI/PreferencesUI.py:2775 flatcamGUI/PreferencesUI.py:3918 +#: flatcamGUI/PreferencesUI.py:3948 flatcamGUI/PreferencesUI.py:4068 +#: flatcamGUI/PreferencesUI.py:4098 msgid "Angle at which each element in circular array is placed." msgstr "" "Winkel, um den jedes Element in einer kreisförmigen Anordnung platziert wird." -#: flatcamEditors/FlatCAMExcEditor.py:1833 +#: flatcamEditors/FlatCAMExcEditor.py:1836 msgid "Slot Parameters" msgstr "Schlitze-Parameter" -#: flatcamEditors/FlatCAMExcEditor.py:1835 +#: flatcamEditors/FlatCAMExcEditor.py:1838 msgid "" "Parameters for adding a slot (hole with oval shape)\n" "either single or as an part of an array." @@ -3440,16 +3838,16 @@ msgstr "" "Parameter zum Hinzufügen eines Schlitzes (Loch mit ovaler Form)\n" "entweder einzeln oder als Teil eines Arrays." -#: flatcamEditors/FlatCAMExcEditor.py:1844 flatcamGUI/PreferencesUI.py:3687 -#: flatcamTools/ToolProperties.py:555 +#: flatcamEditors/FlatCAMExcEditor.py:1847 flatcamGUI/PreferencesUI.py:3965 +#: flatcamTools/ToolProperties.py:559 msgid "Length" msgstr "Länge" -#: flatcamEditors/FlatCAMExcEditor.py:1846 flatcamGUI/PreferencesUI.py:3689 +#: flatcamEditors/FlatCAMExcEditor.py:1849 flatcamGUI/PreferencesUI.py:3967 msgid "Length = The length of the slot." msgstr "Länge = Die Länge des Schlitzes." -#: flatcamEditors/FlatCAMExcEditor.py:1860 flatcamGUI/PreferencesUI.py:3705 +#: flatcamEditors/FlatCAMExcEditor.py:1863 flatcamGUI/PreferencesUI.py:3983 msgid "" "Direction on which the slot is oriented:\n" "- 'X' - horizontal axis \n" @@ -3461,7 +3859,7 @@ msgstr "" "- 'Y' - vertikale Achse oder\n" "- 'Winkel' - Ein benutzerdefinierter Winkel für die Schlitzneigung" -#: flatcamEditors/FlatCAMExcEditor.py:1875 +#: flatcamEditors/FlatCAMExcEditor.py:1878 msgid "" "Angle at which the slot is placed.\n" "The precision is of max 2 decimals.\n" @@ -3473,16 +3871,16 @@ msgstr "" "Der Mindestwert beträgt: -360 Grad.\n" "Maximaler Wert ist: 360.00 Grad." -#: flatcamEditors/FlatCAMExcEditor.py:1908 +#: flatcamEditors/FlatCAMExcEditor.py:1911 msgid "Slot Array Parameters" msgstr "Schlitzes Array-Parameter" -#: flatcamEditors/FlatCAMExcEditor.py:1910 +#: flatcamEditors/FlatCAMExcEditor.py:1913 msgid "Parameters for the array of slots (linear or circular array)" msgstr "" "Parameter für das Array von Schlitzes (lineares oder kreisförmiges Array)" -#: flatcamEditors/FlatCAMExcEditor.py:1919 +#: flatcamEditors/FlatCAMExcEditor.py:1922 msgid "" "Select the type of slot array to create.\n" "It can be Linear X(Y) or Circular" @@ -3490,15 +3888,15 @@ msgstr "" "Wählen Sie den Typ des zu erstellenden Slot-Arrays.\n" "Es kann ein lineares X (Y) oder ein kreisförmiges sein" -#: flatcamEditors/FlatCAMExcEditor.py:1931 flatcamGUI/PreferencesUI.py:3744 +#: flatcamEditors/FlatCAMExcEditor.py:1934 flatcamGUI/PreferencesUI.py:4022 msgid "Nr of slots" msgstr "Anzahl der Slots" -#: flatcamEditors/FlatCAMExcEditor.py:1932 flatcamGUI/PreferencesUI.py:3746 +#: flatcamEditors/FlatCAMExcEditor.py:1935 flatcamGUI/PreferencesUI.py:4024 msgid "Specify how many slots to be in the array." msgstr "Geben Sie an, wie viele Steckplätze sich im Array befinden sollen." -#: flatcamEditors/FlatCAMExcEditor.py:2546 +#: flatcamEditors/FlatCAMExcEditor.py:2571 msgid "" "Tool already in the original or actual tool list.\n" "Save and reedit Excellon if you need to add this tool. " @@ -3507,53 +3905,53 @@ msgstr "" "Speichern Sie Excellon und bearbeiten Sie es erneut, wenn Sie dieses Tool " "hinzufügen müssen. " -#: flatcamEditors/FlatCAMExcEditor.py:2555 flatcamGUI/FlatCAMGUI.py:3792 +#: flatcamEditors/FlatCAMExcEditor.py:2580 flatcamGUI/FlatCAMGUI.py:4009 msgid "Added new tool with dia" msgstr "Neues Werkzeug mit Durchmesser hinzugefügt" -#: flatcamEditors/FlatCAMExcEditor.py:2589 +#: flatcamEditors/FlatCAMExcEditor.py:2613 msgid "Select a tool in Tool Table" msgstr "Wählen Sie ein Werkzeug in der Werkzeugtabelle aus" -#: flatcamEditors/FlatCAMExcEditor.py:2622 +#: flatcamEditors/FlatCAMExcEditor.py:2643 msgid "Deleted tool with diameter" msgstr "Gelöschtes Werkzeug mit Durchmesser" -#: flatcamEditors/FlatCAMExcEditor.py:2772 +#: flatcamEditors/FlatCAMExcEditor.py:2793 msgid "Done. Tool edit completed." msgstr "Erledigt. Werkzeugbearbeitung abgeschlossen." -#: flatcamEditors/FlatCAMExcEditor.py:3324 +#: flatcamEditors/FlatCAMExcEditor.py:3350 msgid "There are no Tools definitions in the file. Aborting Excellon creation." msgstr "" "Die Datei enthält keine Werkzeugdefinitionen. Abbruch der Excellon-" "Erstellung." -#: flatcamEditors/FlatCAMExcEditor.py:3328 +#: flatcamEditors/FlatCAMExcEditor.py:3354 msgid "An internal error has ocurred. See Shell.\n" msgstr "" "Ein interner Fehler ist aufgetreten. Siehe Shell.\n" "\n" -#: flatcamEditors/FlatCAMExcEditor.py:3333 +#: flatcamEditors/FlatCAMExcEditor.py:3359 msgid "Creating Excellon." msgstr "Excellon erstellen." -#: flatcamEditors/FlatCAMExcEditor.py:3347 +#: flatcamEditors/FlatCAMExcEditor.py:3371 msgid "Excellon editing finished." msgstr "Excellon-Bearbeitung abgeschlossen." -#: flatcamEditors/FlatCAMExcEditor.py:3365 +#: flatcamEditors/FlatCAMExcEditor.py:3388 msgid "Cancelled. There is no Tool/Drill selected" msgstr "Abgebrochen. Es ist kein Werkzeug / Bohrer ausgewählt" -#: flatcamEditors/FlatCAMExcEditor.py:3978 +#: flatcamEditors/FlatCAMExcEditor.py:4001 msgid "Done. Drill(s) deleted." msgstr "Erledigt. Bohrer gelöscht." -#: flatcamEditors/FlatCAMExcEditor.py:4051 -#: flatcamEditors/FlatCAMExcEditor.py:4061 -#: flatcamEditors/FlatCAMGrbEditor.py:4853 +#: flatcamEditors/FlatCAMExcEditor.py:4074 +#: flatcamEditors/FlatCAMExcEditor.py:4084 +#: flatcamEditors/FlatCAMGrbEditor.py:4897 msgid "Click on the circular array Center position" msgstr "Klicken Sie auf die kreisförmige Anordnung in der Mitte" @@ -3581,18 +3979,24 @@ msgstr "" "der Ecke treffen, direkt verbindet" #: flatcamEditors/FlatCAMGeoEditor.py:95 -#: flatcamEditors/FlatCAMGrbEditor.py:2622 +#: flatcamEditors/FlatCAMGrbEditor.py:2628 msgid "Round" msgstr "Runden" #: flatcamEditors/FlatCAMGeoEditor.py:96 -#: flatcamEditors/FlatCAMGrbEditor.py:2623 flatcamGUI/PreferencesUI.py:7058 +#: flatcamEditors/FlatCAMGrbEditor.py:2629 flatcamGUI/PreferencesUI.py:5606 +#: flatcamGUI/PreferencesUI.py:6130 flatcamGUI/PreferencesUI.py:7564 +#: flatcamGUI/PreferencesUI.py:8167 flatcamGUI/PreferencesUI.py:8274 +#: flatcamGUI/PreferencesUI.py:8379 flatcamGUI/PreferencesUI.py:8488 +#: flatcamTools/ToolExtractDrills.py:94 flatcamTools/ToolExtractDrills.py:227 +#: flatcamTools/ToolNCC.py:583 flatcamTools/ToolPaint.py:527 +#: flatcamTools/ToolPunchGerber.py:105 flatcamTools/ToolPunchGerber.py:255 #: flatcamTools/ToolQRCode.py:198 msgid "Square" msgstr "Quadrat" #: flatcamEditors/FlatCAMGeoEditor.py:97 -#: flatcamEditors/FlatCAMGrbEditor.py:2624 +#: flatcamEditors/FlatCAMGrbEditor.py:2630 msgid "Beveled" msgstr "Abgeschrägt" @@ -3609,18 +4013,18 @@ msgid "Full Buffer" msgstr "Voller Puffer" #: flatcamEditors/FlatCAMGeoEditor.py:133 -#: flatcamEditors/FlatCAMGeoEditor.py:2885 flatcamGUI/FlatCAMGUI.py:1805 -#: flatcamGUI/PreferencesUI.py:2604 +#: flatcamEditors/FlatCAMGeoEditor.py:3018 flatcamGUI/FlatCAMGUI.py:1913 +#: flatcamGUI/PreferencesUI.py:2786 msgid "Buffer Tool" msgstr "Pufferwerkzeug" #: flatcamEditors/FlatCAMGeoEditor.py:145 #: flatcamEditors/FlatCAMGeoEditor.py:162 #: flatcamEditors/FlatCAMGeoEditor.py:179 -#: flatcamEditors/FlatCAMGeoEditor.py:2904 -#: flatcamEditors/FlatCAMGeoEditor.py:2934 -#: flatcamEditors/FlatCAMGeoEditor.py:2964 -#: flatcamEditors/FlatCAMGrbEditor.py:4906 +#: flatcamEditors/FlatCAMGeoEditor.py:3037 +#: flatcamEditors/FlatCAMGeoEditor.py:3065 +#: flatcamEditors/FlatCAMGeoEditor.py:3093 +#: flatcamEditors/FlatCAMGrbEditor.py:4950 msgid "Buffer distance value is missing or wrong format. Add it and retry." msgstr "" "Pufferabstandswert fehlt oder falsches Format. Fügen Sie es hinzu und " @@ -3630,7 +4034,7 @@ msgstr "" msgid "Font" msgstr "Schrift" -#: flatcamEditors/FlatCAMGeoEditor.py:324 flatcamGUI/FlatCAMGUI.py:2085 +#: flatcamEditors/FlatCAMGeoEditor.py:324 flatcamGUI/FlatCAMGUI.py:2193 msgid "Text" msgstr "Text" @@ -3638,212 +4042,112 @@ msgstr "Text" msgid "Text Tool" msgstr "Textwerkzeug" -#: flatcamEditors/FlatCAMGeoEditor.py:442 flatcamGUI/ObjectUI.py:359 -#: flatcamGUI/PreferencesUI.py:2025 flatcamGUI/PreferencesUI.py:3875 -#: flatcamGUI/PreferencesUI.py:5535 +#: flatcamEditors/FlatCAMGeoEditor.py:440 flatcamGUI/ObjectUI.py:363 +#: flatcamGUI/PreferencesUI.py:2205 msgid "Tool dia" msgstr "Werkzeugdurchmesser" -#: flatcamEditors/FlatCAMGeoEditor.py:444 flatcamGUI/PreferencesUI.py:5537 +#: flatcamEditors/FlatCAMGeoEditor.py:442 +msgid "Diameter of the tool to be used in the operation." +msgstr "Durchmesser des im Betrieb zu verwendenden Werkzeugs." + +#: flatcamEditors/FlatCAMGeoEditor.py:488 msgid "" -"Diameter of the tool to\n" -"be used in the operation." +"Algorithm to paint the polygons:\n" +"- Standard: Fixed step inwards.\n" +"- Seed-based: Outwards from seed.\n" +"- Line-based: Parallel lines." msgstr "" -"Durchmesser des Werkzeugs bis\n" -"in der Operation verwendet werden." +"Algorithmus zum Malen der Polygone:\n" +"- Standard: Schritt nach innen behoben.\n" +"- Samenbasiert: Aus dem Samen heraus.\n" +"- Linienbasiert: Parallele Linien." -#: flatcamEditors/FlatCAMGeoEditor.py:455 flatcamGUI/PreferencesUI.py:5152 -#: flatcamGUI/PreferencesUI.py:5567 flatcamTools/ToolNonCopperClear.py:319 -#: flatcamTools/ToolPaint.py:219 -msgid "Overlap Rate" -msgstr "Überlappungsrate" - -# 3rd Time -#: flatcamEditors/FlatCAMGeoEditor.py:457 flatcamGUI/PreferencesUI.py:5569 -#: flatcamTools/ToolPaint.py:221 -msgid "" -"How much (fraction) of the tool width to overlap each tool pass.\n" -"Adjust the value starting with lower values\n" -"and increasing it if areas that should be painted are still \n" -"not painted.\n" -"Lower values = faster processing, faster execution on CNC.\n" -"Higher values = slow processing and slow execution on CNC\n" -"due of too many paths." -msgstr "" -"Wie viel (Prozent) der Werkzeugbreite überlappt jeden Werkzeugdurchgang.\n" -"Beispiel:\n" -"Ein Wert von 0,25 bedeutet hier 25%% vom oben gefundenen " -"Werkzeugdurchmesser.\n" -"\n" -"Passen Sie den Wert beginnend mit niedrigeren Werten an\n" -"und erhöhen Sie es, wenn nicht alle Bereiche ausgemalt sind.\n" -"Niedrigere Werte = schnellere Verarbeitung, schnellere Ausführung auf der " -"Leiterplatte.\n" -"Höhere Werte = langsame Bearbeitung und langsame Ausführung auf CNC\n" -"wegen zu vieler Pfade." - -#: flatcamEditors/FlatCAMGeoEditor.py:475 flatcamGUI/PreferencesUI.py:5171 -#: flatcamGUI/PreferencesUI.py:5384 flatcamGUI/PreferencesUI.py:5587 -#: flatcamGUI/PreferencesUI.py:7175 flatcamGUI/PreferencesUI.py:7332 -#: flatcamGUI/PreferencesUI.py:7417 flatcamTools/ToolCopperThieving.py:111 -#: flatcamTools/ToolCopperThieving.py:361 flatcamTools/ToolCutOut.py:184 -#: flatcamTools/ToolFiducials.py:172 flatcamTools/ToolNonCopperClear.py:337 -#: flatcamTools/ToolPaint.py:238 -msgid "Margin" -msgstr "Marge" - -#: flatcamEditors/FlatCAMGeoEditor.py:477 flatcamGUI/PreferencesUI.py:5589 -#: flatcamTools/ToolPaint.py:240 -msgid "" -"Distance by which to avoid\n" -"the edges of the polygon to\n" -"be painted." -msgstr "" -"Entfernung, um die es zu vermeiden ist\n" -"die Kanten des Polygons bis\n" -"gemalt werden." - -#: flatcamEditors/FlatCAMGeoEditor.py:489 flatcamGUI/PreferencesUI.py:5184 -#: flatcamGUI/PreferencesUI.py:5602 flatcamTools/ToolNonCopperClear.py:348 -#: flatcamTools/ToolPaint.py:251 -msgid "Method" -msgstr "Methode" - -#: flatcamEditors/FlatCAMGeoEditor.py:491 -msgid "" -"Algorithm to paint the polygon:
    Standard: Fixed step inwards." -"
    Seed-based: Outwards from seed." -msgstr "" -"Algorithmus zum Malen des Polygons:
    Standard: Feststehender " -"Schritt nach innen.
    Samenbasiert: Aus dem Samen heraus." - -#: flatcamEditors/FlatCAMGeoEditor.py:496 flatcamGUI/PreferencesUI.py:5193 -#: flatcamGUI/PreferencesUI.py:5611 flatcamTools/ToolNonCopperClear.py:357 -#: flatcamTools/ToolPaint.py:260 -msgid "Standard" -msgstr "Standard" - -#: flatcamEditors/FlatCAMGeoEditor.py:497 flatcamGUI/PreferencesUI.py:5194 -#: flatcamGUI/PreferencesUI.py:5612 flatcamTools/ToolNonCopperClear.py:358 -#: flatcamTools/ToolPaint.py:261 -msgid "Seed-based" -msgstr "Samenbasiert" - -#: flatcamEditors/FlatCAMGeoEditor.py:498 flatcamGUI/PreferencesUI.py:5195 -#: flatcamGUI/PreferencesUI.py:5613 flatcamTools/ToolNonCopperClear.py:359 -#: flatcamTools/ToolPaint.py:262 -msgid "Straight lines" -msgstr "Gerade Linien" - -#: flatcamEditors/FlatCAMGeoEditor.py:505 +#: flatcamEditors/FlatCAMGeoEditor.py:507 msgid "Connect:" msgstr "Verbinden:" -#: flatcamEditors/FlatCAMGeoEditor.py:507 flatcamGUI/PreferencesUI.py:5204 -#: flatcamGUI/PreferencesUI.py:5620 flatcamTools/ToolNonCopperClear.py:366 -#: flatcamTools/ToolPaint.py:269 -msgid "" -"Draw lines between resulting\n" -"segments to minimize tool lifts." -msgstr "" -"Zeichnen Sie Linien zwischen den Ergebnissen\n" -"Segmente, um Werkzeuglifte zu minimieren." - -#: flatcamEditors/FlatCAMGeoEditor.py:515 +#: flatcamEditors/FlatCAMGeoEditor.py:517 msgid "Contour:" msgstr "Kontur:" -#: flatcamEditors/FlatCAMGeoEditor.py:517 flatcamGUI/PreferencesUI.py:5213 -#: flatcamGUI/PreferencesUI.py:5628 flatcamTools/ToolNonCopperClear.py:373 -#: flatcamTools/ToolPaint.py:276 -msgid "" -"Cut around the perimeter of the polygon\n" -"to trim rough edges." -msgstr "" -"Schneiden Sie um den Umfang des Polygons herum\n" -"Ecken und Kanten schneiden." - -#: flatcamEditors/FlatCAMGeoEditor.py:529 flatcamGUI/FlatCAMGUI.py:2089 +#: flatcamEditors/FlatCAMGeoEditor.py:530 flatcamGUI/FlatCAMGUI.py:2197 msgid "Paint" msgstr "Malen" -#: flatcamEditors/FlatCAMGeoEditor.py:547 flatcamGUI/FlatCAMGUI.py:845 -#: flatcamGUI/FlatCAMGUI.py:2423 flatcamGUI/ObjectUI.py:1731 -#: flatcamTools/ToolPaint.py:41 flatcamTools/ToolPaint.py:533 +#: flatcamEditors/FlatCAMGeoEditor.py:548 flatcamGUI/FlatCAMGUI.py:909 +#: flatcamGUI/FlatCAMGUI.py:2588 flatcamGUI/ObjectUI.py:2057 +#: flatcamTools/ToolPaint.py:43 flatcamTools/ToolPaint.py:738 msgid "Paint Tool" msgstr "Werkzeug Malen" #: flatcamEditors/FlatCAMGeoEditor.py:584 -msgid "Paint cancelled. No shape selected." -msgstr "Malwerkzeug abgebrochen. Keine Form ausgewählt." +#: flatcamEditors/FlatCAMGeoEditor.py:1056 +#: flatcamEditors/FlatCAMGeoEditor.py:3025 +#: flatcamEditors/FlatCAMGeoEditor.py:3053 +#: flatcamEditors/FlatCAMGeoEditor.py:3081 +#: flatcamEditors/FlatCAMGeoEditor.py:4502 +#: flatcamEditors/FlatCAMGrbEditor.py:5601 +msgid "Cancelled. No shape selected." +msgstr "Abgebrochen. Keine Form ausgewählt." #: flatcamEditors/FlatCAMGeoEditor.py:597 -#: flatcamEditors/FlatCAMGeoEditor.py:2910 -#: flatcamEditors/FlatCAMGeoEditor.py:2940 -#: flatcamEditors/FlatCAMGeoEditor.py:2970 flatcamGUI/PreferencesUI.py:3871 -#: flatcamTools/ToolProperties.py:120 flatcamTools/ToolProperties.py:158 +#: flatcamEditors/FlatCAMGeoEditor.py:3043 +#: flatcamEditors/FlatCAMGeoEditor.py:3071 +#: flatcamEditors/FlatCAMGeoEditor.py:3099 flatcamGUI/PreferencesUI.py:4149 +#: flatcamTools/ToolProperties.py:117 flatcamTools/ToolProperties.py:162 msgid "Tools" msgstr "Werkzeuge" #: flatcamEditors/FlatCAMGeoEditor.py:608 #: flatcamEditors/FlatCAMGeoEditor.py:992 -#: flatcamEditors/FlatCAMGrbEditor.py:5096 -#: flatcamEditors/FlatCAMGrbEditor.py:5493 flatcamGUI/FlatCAMGUI.py:866 -#: flatcamGUI/FlatCAMGUI.py:2441 flatcamTools/ToolTransform.py:422 +#: flatcamEditors/FlatCAMGrbEditor.py:5140 +#: flatcamEditors/FlatCAMGrbEditor.py:5537 flatcamGUI/FlatCAMGUI.py:930 +#: flatcamGUI/FlatCAMGUI.py:2609 flatcamTools/ToolTransform.py:461 msgid "Transform Tool" msgstr "Werkzeug Umwandeln" #: flatcamEditors/FlatCAMGeoEditor.py:609 #: flatcamEditors/FlatCAMGeoEditor.py:674 -#: flatcamEditors/FlatCAMGrbEditor.py:5097 -#: flatcamEditors/FlatCAMGrbEditor.py:5162 flatcamGUI/PreferencesUI.py:6238 -#: flatcamTools/ToolTransform.py:25 flatcamTools/ToolTransform.py:80 +#: flatcamEditors/FlatCAMGrbEditor.py:5141 +#: flatcamEditors/FlatCAMGrbEditor.py:5206 flatcamGUI/PreferencesUI.py:6725 +#: flatcamTools/ToolTransform.py:25 flatcamTools/ToolTransform.py:467 msgid "Rotate" msgstr "Drehen" #: flatcamEditors/FlatCAMGeoEditor.py:610 -#: flatcamEditors/FlatCAMGrbEditor.py:5098 flatcamTools/ToolTransform.py:26 +#: flatcamEditors/FlatCAMGrbEditor.py:5142 flatcamTools/ToolTransform.py:26 msgid "Skew/Shear" msgstr "Neigung/Schere" #: flatcamEditors/FlatCAMGeoEditor.py:611 -#: flatcamEditors/FlatCAMGrbEditor.py:2671 -#: flatcamEditors/FlatCAMGrbEditor.py:5099 flatcamGUI/FlatCAMGUI.py:980 -#: flatcamGUI/FlatCAMGUI.py:2017 flatcamGUI/FlatCAMGUI.py:2132 -#: flatcamGUI/FlatCAMGUI.py:2549 flatcamGUI/ObjectUI.py:103 -#: flatcamGUI/ObjectUI.py:121 flatcamGUI/PreferencesUI.py:6288 -#: flatcamTools/ToolTransform.py:27 +#: flatcamEditors/FlatCAMGrbEditor.py:2677 +#: flatcamEditors/FlatCAMGrbEditor.py:5143 flatcamGUI/FlatCAMGUI.py:1048 +#: flatcamGUI/FlatCAMGUI.py:2125 flatcamGUI/FlatCAMGUI.py:2240 +#: flatcamGUI/FlatCAMGUI.py:2723 flatcamGUI/ObjectUI.py:124 +#: flatcamGUI/PreferencesUI.py:6775 flatcamTools/ToolTransform.py:27 msgid "Scale" msgstr "Skalieren" #: flatcamEditors/FlatCAMGeoEditor.py:612 -#: flatcamEditors/FlatCAMGrbEditor.py:5100 flatcamTools/ToolTransform.py:28 +#: flatcamEditors/FlatCAMGrbEditor.py:5144 flatcamTools/ToolTransform.py:28 msgid "Mirror (Flip)" msgstr "Spiegeln (Flip)" -#: flatcamEditors/FlatCAMGeoEditor.py:613 -#: flatcamEditors/FlatCAMGrbEditor.py:5101 flatcamGUI/ObjectUI.py:132 -#: flatcamGUI/ObjectUI.py:148 flatcamGUI/ObjectUI.py:1217 -#: flatcamGUI/ObjectUI.py:1916 flatcamGUI/PreferencesUI.py:5234 -#: flatcamGUI/PreferencesUI.py:6335 flatcamTools/ToolNonCopperClear.py:393 -#: flatcamTools/ToolTransform.py:29 -msgid "Offset" -msgstr "Versatz" - #: flatcamEditors/FlatCAMGeoEditor.py:626 -#: flatcamEditors/FlatCAMGrbEditor.py:5114 flatcamGUI/FlatCAMGUI.py:787 -#: flatcamGUI/FlatCAMGUI.py:2370 +#: flatcamEditors/FlatCAMGrbEditor.py:5158 flatcamGUI/FlatCAMGUI.py:841 +#: flatcamGUI/FlatCAMGUI.py:2524 msgid "Editor" msgstr "Editor" #: flatcamEditors/FlatCAMGeoEditor.py:658 -#: flatcamEditors/FlatCAMGrbEditor.py:5146 +#: flatcamEditors/FlatCAMGrbEditor.py:5190 msgid "Angle:" msgstr "Winkel:" #: flatcamEditors/FlatCAMGeoEditor.py:660 -#: flatcamEditors/FlatCAMGrbEditor.py:5148 flatcamGUI/PreferencesUI.py:6248 -#: flatcamTools/ToolTransform.py:65 +#: flatcamEditors/FlatCAMGrbEditor.py:5192 flatcamGUI/PreferencesUI.py:6735 +#: flatcamTools/ToolTransform.py:63 msgid "" "Angle for Rotation action, in degrees.\n" "Float number between -360 and 359.\n" @@ -3856,7 +4160,7 @@ msgstr "" "Negative Zahlen für CCW-Bewegung." #: flatcamEditors/FlatCAMGeoEditor.py:676 -#: flatcamEditors/FlatCAMGrbEditor.py:5164 +#: flatcamEditors/FlatCAMGrbEditor.py:5208 msgid "" "Rotate the selected shape(s).\n" "The point of reference is the middle of\n" @@ -3867,16 +4171,16 @@ msgstr "" "der Begrenzungsrahmen für alle ausgewählten Formen." #: flatcamEditors/FlatCAMGeoEditor.py:699 -#: flatcamEditors/FlatCAMGrbEditor.py:5187 +#: flatcamEditors/FlatCAMGrbEditor.py:5231 msgid "Angle X:" msgstr "Winkel X:" #: flatcamEditors/FlatCAMGeoEditor.py:701 #: flatcamEditors/FlatCAMGeoEditor.py:721 -#: flatcamEditors/FlatCAMGrbEditor.py:5189 -#: flatcamEditors/FlatCAMGrbEditor.py:5209 flatcamGUI/PreferencesUI.py:6267 -#: flatcamGUI/PreferencesUI.py:6281 flatcamTools/ToolCalibration.py:508 -#: flatcamTools/ToolCalibration.py:521 +#: flatcamEditors/FlatCAMGrbEditor.py:5233 +#: flatcamEditors/FlatCAMGrbEditor.py:5253 flatcamGUI/PreferencesUI.py:6754 +#: flatcamGUI/PreferencesUI.py:6768 flatcamTools/ToolCalibration.py:505 +#: flatcamTools/ToolCalibration.py:518 msgid "" "Angle for Skew action, in degrees.\n" "Float number between -360 and 359." @@ -3885,14 +4189,14 @@ msgstr "" "Float-Nummer zwischen -360 und 359." #: flatcamEditors/FlatCAMGeoEditor.py:712 -#: flatcamEditors/FlatCAMGrbEditor.py:5200 flatcamTools/ToolTransform.py:109 +#: flatcamEditors/FlatCAMGrbEditor.py:5244 flatcamTools/ToolTransform.py:468 msgid "Skew X" msgstr "Neigung X" #: flatcamEditors/FlatCAMGeoEditor.py:714 #: flatcamEditors/FlatCAMGeoEditor.py:734 -#: flatcamEditors/FlatCAMGrbEditor.py:5202 -#: flatcamEditors/FlatCAMGrbEditor.py:5222 +#: flatcamEditors/FlatCAMGrbEditor.py:5246 +#: flatcamEditors/FlatCAMGrbEditor.py:5266 msgid "" "Skew/shear the selected shape(s).\n" "The point of reference is the middle of\n" @@ -3903,34 +4207,34 @@ msgstr "" "der Begrenzungsrahmen für alle ausgewählten Formen." #: flatcamEditors/FlatCAMGeoEditor.py:719 -#: flatcamEditors/FlatCAMGrbEditor.py:5207 +#: flatcamEditors/FlatCAMGrbEditor.py:5251 msgid "Angle Y:" msgstr "Winkel Y:" #: flatcamEditors/FlatCAMGeoEditor.py:732 -#: flatcamEditors/FlatCAMGrbEditor.py:5220 flatcamTools/ToolTransform.py:131 +#: flatcamEditors/FlatCAMGrbEditor.py:5264 flatcamTools/ToolTransform.py:469 msgid "Skew Y" msgstr "Neigung Y" #: flatcamEditors/FlatCAMGeoEditor.py:760 -#: flatcamEditors/FlatCAMGrbEditor.py:5248 +#: flatcamEditors/FlatCAMGrbEditor.py:5292 msgid "Factor X:" msgstr "Faktor X:" #: flatcamEditors/FlatCAMGeoEditor.py:762 -#: flatcamEditors/FlatCAMGrbEditor.py:5250 flatcamTools/ToolCalibration.py:472 +#: flatcamEditors/FlatCAMGrbEditor.py:5294 flatcamTools/ToolCalibration.py:469 msgid "Factor for Scale action over X axis." msgstr "Faktor für die Skalierungsaktion über der X-Achse." #: flatcamEditors/FlatCAMGeoEditor.py:772 -#: flatcamEditors/FlatCAMGrbEditor.py:5260 flatcamTools/ToolTransform.py:158 +#: flatcamEditors/FlatCAMGrbEditor.py:5304 flatcamTools/ToolTransform.py:470 msgid "Scale X" msgstr "Maßstab X" #: flatcamEditors/FlatCAMGeoEditor.py:774 #: flatcamEditors/FlatCAMGeoEditor.py:793 -#: flatcamEditors/FlatCAMGrbEditor.py:5262 -#: flatcamEditors/FlatCAMGrbEditor.py:5281 +#: flatcamEditors/FlatCAMGrbEditor.py:5306 +#: flatcamEditors/FlatCAMGrbEditor.py:5325 msgid "" "Scale the selected shape(s).\n" "The point of reference depends on \n" @@ -3941,28 +4245,28 @@ msgstr "" "das Kontrollkästchen Skalenreferenz." #: flatcamEditors/FlatCAMGeoEditor.py:779 -#: flatcamEditors/FlatCAMGrbEditor.py:5267 +#: flatcamEditors/FlatCAMGrbEditor.py:5311 msgid "Factor Y:" msgstr "Faktor Y:" #: flatcamEditors/FlatCAMGeoEditor.py:781 -#: flatcamEditors/FlatCAMGrbEditor.py:5269 flatcamTools/ToolCalibration.py:484 +#: flatcamEditors/FlatCAMGrbEditor.py:5313 flatcamTools/ToolCalibration.py:481 msgid "Factor for Scale action over Y axis." msgstr "Faktor für die Skalierungsaktion über der Y-Achse." #: flatcamEditors/FlatCAMGeoEditor.py:791 -#: flatcamEditors/FlatCAMGrbEditor.py:5279 flatcamTools/ToolTransform.py:179 +#: flatcamEditors/FlatCAMGrbEditor.py:5323 flatcamTools/ToolTransform.py:471 msgid "Scale Y" msgstr "Maßstab Y" #: flatcamEditors/FlatCAMGeoEditor.py:800 -#: flatcamEditors/FlatCAMGrbEditor.py:5288 flatcamGUI/PreferencesUI.py:6317 -#: flatcamTools/ToolTransform.py:192 +#: flatcamEditors/FlatCAMGrbEditor.py:5332 flatcamGUI/PreferencesUI.py:6804 +#: flatcamTools/ToolTransform.py:190 msgid "Link" msgstr "Verknüpfung" #: flatcamEditors/FlatCAMGeoEditor.py:802 -#: flatcamEditors/FlatCAMGrbEditor.py:5290 +#: flatcamEditors/FlatCAMGrbEditor.py:5334 msgid "" "Scale the selected shape(s)\n" "using the Scale Factor X for both axis." @@ -3971,13 +4275,13 @@ msgstr "" "Verwenden des Skalierungsfaktors X für beide Achsen." #: flatcamEditors/FlatCAMGeoEditor.py:808 -#: flatcamEditors/FlatCAMGrbEditor.py:5296 flatcamGUI/PreferencesUI.py:6325 -#: flatcamTools/ToolTransform.py:200 +#: flatcamEditors/FlatCAMGrbEditor.py:5340 flatcamGUI/PreferencesUI.py:6812 +#: flatcamTools/ToolTransform.py:197 msgid "Scale Reference" msgstr "Skalenreferenz" #: flatcamEditors/FlatCAMGeoEditor.py:810 -#: flatcamEditors/FlatCAMGrbEditor.py:5298 +#: flatcamEditors/FlatCAMGrbEditor.py:5342 msgid "" "Scale the selected shape(s)\n" "using the origin reference when checked,\n" @@ -3990,24 +4294,24 @@ msgstr "" "der ausgewählten Formen, wenn nicht markiert." #: flatcamEditors/FlatCAMGeoEditor.py:838 -#: flatcamEditors/FlatCAMGrbEditor.py:5327 +#: flatcamEditors/FlatCAMGrbEditor.py:5371 msgid "Value X:" msgstr "Wert X:" #: flatcamEditors/FlatCAMGeoEditor.py:840 -#: flatcamEditors/FlatCAMGrbEditor.py:5329 +#: flatcamEditors/FlatCAMGrbEditor.py:5373 msgid "Value for Offset action on X axis." msgstr "Wert für die Offset-Aktion auf der X-Achse." #: flatcamEditors/FlatCAMGeoEditor.py:850 -#: flatcamEditors/FlatCAMGrbEditor.py:5339 flatcamTools/ToolTransform.py:227 +#: flatcamEditors/FlatCAMGrbEditor.py:5383 flatcamTools/ToolTransform.py:474 msgid "Offset X" msgstr "Versatz X" #: flatcamEditors/FlatCAMGeoEditor.py:852 #: flatcamEditors/FlatCAMGeoEditor.py:872 -#: flatcamEditors/FlatCAMGrbEditor.py:5341 -#: flatcamEditors/FlatCAMGrbEditor.py:5361 +#: flatcamEditors/FlatCAMGrbEditor.py:5385 +#: flatcamEditors/FlatCAMGrbEditor.py:5405 msgid "" "Offset the selected shape(s).\n" "The point of reference is the middle of\n" @@ -4018,29 +4322,29 @@ msgstr "" "der Begrenzungsrahmen für alle ausgewählten Formen.\n" #: flatcamEditors/FlatCAMGeoEditor.py:858 -#: flatcamEditors/FlatCAMGrbEditor.py:5347 +#: flatcamEditors/FlatCAMGrbEditor.py:5391 msgid "Value Y:" msgstr "Wert Y:" #: flatcamEditors/FlatCAMGeoEditor.py:860 -#: flatcamEditors/FlatCAMGrbEditor.py:5349 +#: flatcamEditors/FlatCAMGrbEditor.py:5393 msgid "Value for Offset action on Y axis." msgstr "Wert für die Offset-Aktion auf der Y-Achse." #: flatcamEditors/FlatCAMGeoEditor.py:870 -#: flatcamEditors/FlatCAMGrbEditor.py:5359 flatcamTools/ToolTransform.py:248 +#: flatcamEditors/FlatCAMGrbEditor.py:5403 flatcamTools/ToolTransform.py:475 msgid "Offset Y" msgstr "Versatz Y" #: flatcamEditors/FlatCAMGeoEditor.py:901 -#: flatcamEditors/FlatCAMGrbEditor.py:5390 flatcamTools/ToolTransform.py:266 +#: flatcamEditors/FlatCAMGrbEditor.py:5434 flatcamTools/ToolTransform.py:476 msgid "Flip on X" msgstr "Flip auf X" #: flatcamEditors/FlatCAMGeoEditor.py:903 #: flatcamEditors/FlatCAMGeoEditor.py:910 -#: flatcamEditors/FlatCAMGrbEditor.py:5392 -#: flatcamEditors/FlatCAMGrbEditor.py:5399 +#: flatcamEditors/FlatCAMGrbEditor.py:5436 +#: flatcamEditors/FlatCAMGrbEditor.py:5443 msgid "" "Flip the selected shape(s) over the X axis.\n" "Does not create a new shape." @@ -4049,17 +4353,17 @@ msgstr "" "Erzeugt keine neue Form." #: flatcamEditors/FlatCAMGeoEditor.py:908 -#: flatcamEditors/FlatCAMGrbEditor.py:5397 flatcamTools/ToolTransform.py:272 +#: flatcamEditors/FlatCAMGrbEditor.py:5441 flatcamTools/ToolTransform.py:477 msgid "Flip on Y" msgstr "Flip auf Y" #: flatcamEditors/FlatCAMGeoEditor.py:916 -#: flatcamEditors/FlatCAMGrbEditor.py:5405 +#: flatcamEditors/FlatCAMGrbEditor.py:5449 msgid "Ref Pt" msgstr "Ref. Pt" #: flatcamEditors/FlatCAMGeoEditor.py:918 -#: flatcamEditors/FlatCAMGrbEditor.py:5407 +#: flatcamEditors/FlatCAMGrbEditor.py:5451 msgid "" "Flip the selected shape(s)\n" "around the point in Point Entry Field.\n" @@ -4083,12 +4387,12 @@ msgstr "" "Punkt-Eingabefeld und klicken Sie auf X (Y) drehen" #: flatcamEditors/FlatCAMGeoEditor.py:930 -#: flatcamEditors/FlatCAMGrbEditor.py:5419 +#: flatcamEditors/FlatCAMGrbEditor.py:5463 msgid "Point:" msgstr "Punkt:" #: flatcamEditors/FlatCAMGeoEditor.py:932 -#: flatcamEditors/FlatCAMGrbEditor.py:5421 flatcamTools/ToolTransform.py:301 +#: flatcamEditors/FlatCAMGrbEditor.py:5465 flatcamTools/ToolTransform.py:300 msgid "" "Coordinates in format (x, y) used as reference for mirroring.\n" "The 'x' in (x, y) will be used when using Flip on X and\n" @@ -4100,7 +4404,7 @@ msgstr "" "Das 'y' in (x, y) wird verwendet, wenn Flip auf Y verwendet wird." #: flatcamEditors/FlatCAMGeoEditor.py:942 -#: flatcamEditors/FlatCAMGrbEditor.py:5433 flatcamTools/ToolTransform.py:312 +#: flatcamEditors/FlatCAMGrbEditor.py:5477 flatcamTools/ToolTransform.py:310 msgid "" "The point coordinates can be captured by\n" "left click on canvas together with pressing\n" @@ -4111,352 +4415,352 @@ msgstr "" "Shift Taste. Klicken Sie dann auf die Schaltfläche Hinzufügen, um sie " "einzufügen." -#: flatcamEditors/FlatCAMGeoEditor.py:1057 -#: flatcamEditors/FlatCAMGrbEditor.py:5558 -msgid "Transformation cancelled. No shape selected." -msgstr "Umwandlung abgebrochen. Keine Form ausgewählt." - -#: flatcamEditors/FlatCAMGeoEditor.py:1258 -#: flatcamEditors/FlatCAMGrbEditor.py:5742 +#: flatcamEditors/FlatCAMGeoEditor.py:1305 +#: flatcamEditors/FlatCAMGrbEditor.py:5785 msgid "No shape selected. Please Select a shape to rotate!" msgstr "Keine Form ausgewählt Bitte wählen Sie eine Form zum Drehen aus!" -#: flatcamEditors/FlatCAMGeoEditor.py:1261 -#: flatcamEditors/FlatCAMGrbEditor.py:5745 flatcamTools/ToolTransform.py:611 +#: flatcamEditors/FlatCAMGeoEditor.py:1308 +#: flatcamEditors/FlatCAMGrbEditor.py:5788 flatcamTools/ToolTransform.py:680 msgid "Appying Rotate" msgstr "Anwenden Drehen" -#: flatcamEditors/FlatCAMGeoEditor.py:1290 -#: flatcamEditors/FlatCAMGrbEditor.py:5779 +#: flatcamEditors/FlatCAMGeoEditor.py:1334 +#: flatcamEditors/FlatCAMGrbEditor.py:5820 msgid "Done. Rotate completed." msgstr "Erledigt. Drehen abgeschlossen." -#: flatcamEditors/FlatCAMGeoEditor.py:1295 +#: flatcamEditors/FlatCAMGeoEditor.py:1336 msgid "Rotation action was not executed" msgstr "Rotationsaktion wurde nicht ausgeführt" -#: flatcamEditors/FlatCAMGeoEditor.py:1307 -#: flatcamEditors/FlatCAMGrbEditor.py:5800 +#: flatcamEditors/FlatCAMGeoEditor.py:1355 +#: flatcamEditors/FlatCAMGrbEditor.py:5839 msgid "No shape selected. Please Select a shape to flip!" msgstr "Keine Form ausgewählt. Bitte wählen Sie eine Form zum Kippen!" -#: flatcamEditors/FlatCAMGeoEditor.py:1310 -#: flatcamEditors/FlatCAMGrbEditor.py:5803 flatcamTools/ToolTransform.py:664 +#: flatcamEditors/FlatCAMGeoEditor.py:1358 +#: flatcamEditors/FlatCAMGrbEditor.py:5842 flatcamTools/ToolTransform.py:729 msgid "Applying Flip" msgstr "Flip anwenden" -#: flatcamEditors/FlatCAMGeoEditor.py:1341 -#: flatcamEditors/FlatCAMGrbEditor.py:5843 flatcamTools/ToolTransform.py:707 +#: flatcamEditors/FlatCAMGeoEditor.py:1387 +#: flatcamEditors/FlatCAMGrbEditor.py:5880 flatcamTools/ToolTransform.py:770 msgid "Flip on the Y axis done" msgstr "Spiegeln Sie die Y-Achse bereit" -#: flatcamEditors/FlatCAMGeoEditor.py:1345 -#: flatcamEditors/FlatCAMGrbEditor.py:5852 flatcamTools/ToolTransform.py:717 +#: flatcamEditors/FlatCAMGeoEditor.py:1391 +#: flatcamEditors/FlatCAMGrbEditor.py:5889 flatcamTools/ToolTransform.py:779 msgid "Flip on the X axis done" msgstr "Spiegeln Sie die X-Achse bereit" -#: flatcamEditors/FlatCAMGeoEditor.py:1355 +#: flatcamEditors/FlatCAMGeoEditor.py:1399 msgid "Flip action was not executed" msgstr "Spiegeln-Aktion wurde nicht ausgeführt" -#: flatcamEditors/FlatCAMGeoEditor.py:1365 -#: flatcamEditors/FlatCAMGrbEditor.py:5874 +#: flatcamEditors/FlatCAMGeoEditor.py:1417 +#: flatcamEditors/FlatCAMGrbEditor.py:5909 msgid "No shape selected. Please Select a shape to shear/skew!" msgstr "" "Keine Form ausgewählt. Bitte wählen Sie eine Form zum Scheren / " "Schrägstellen!" -#: flatcamEditors/FlatCAMGeoEditor.py:1368 -#: flatcamEditors/FlatCAMGrbEditor.py:5877 flatcamTools/ToolTransform.py:742 +#: flatcamEditors/FlatCAMGeoEditor.py:1420 +#: flatcamEditors/FlatCAMGrbEditor.py:5912 flatcamTools/ToolTransform.py:802 msgid "Applying Skew" msgstr "Schräglauf anwenden" -#: flatcamEditors/FlatCAMGeoEditor.py:1394 -#: flatcamEditors/FlatCAMGrbEditor.py:5913 +#: flatcamEditors/FlatCAMGeoEditor.py:1443 +#: flatcamEditors/FlatCAMGrbEditor.py:5946 msgid "Skew on the X axis done" msgstr "Schrägstellung auf der X-Achse erfolgt" -#: flatcamEditors/FlatCAMGeoEditor.py:1397 -#: flatcamEditors/FlatCAMGrbEditor.py:5915 +#: flatcamEditors/FlatCAMGeoEditor.py:1445 +#: flatcamEditors/FlatCAMGrbEditor.py:5948 msgid "Skew on the Y axis done" msgstr "Schrägstellung auf der Y-Achse erfolgt" -#: flatcamEditors/FlatCAMGeoEditor.py:1401 +#: flatcamEditors/FlatCAMGeoEditor.py:1448 msgid "Skew action was not executed" msgstr "Die Versatzaktion wurde nicht ausgeführt" -#: flatcamEditors/FlatCAMGeoEditor.py:1413 -#: flatcamEditors/FlatCAMGrbEditor.py:5939 +#: flatcamEditors/FlatCAMGeoEditor.py:1470 +#: flatcamEditors/FlatCAMGrbEditor.py:5970 msgid "No shape selected. Please Select a shape to scale!" msgstr "Keine Form ausgewählt. Bitte wählen Sie eine zu skalierende Form!" -#: flatcamEditors/FlatCAMGeoEditor.py:1416 -#: flatcamEditors/FlatCAMGrbEditor.py:5942 flatcamTools/ToolTransform.py:794 +#: flatcamEditors/FlatCAMGeoEditor.py:1473 +#: flatcamEditors/FlatCAMGrbEditor.py:5973 flatcamTools/ToolTransform.py:849 msgid "Applying Scale" msgstr "Maßstab anwenden" -#: flatcamEditors/FlatCAMGeoEditor.py:1451 -#: flatcamEditors/FlatCAMGrbEditor.py:5981 +#: flatcamEditors/FlatCAMGeoEditor.py:1505 +#: flatcamEditors/FlatCAMGrbEditor.py:6010 msgid "Scale on the X axis done" msgstr "Skalieren auf der X-Achse erledigt" -#: flatcamEditors/FlatCAMGeoEditor.py:1454 -#: flatcamEditors/FlatCAMGrbEditor.py:5983 +#: flatcamEditors/FlatCAMGeoEditor.py:1507 +#: flatcamEditors/FlatCAMGrbEditor.py:6012 msgid "Scale on the Y axis done" msgstr "Skalieren auf der Y-Achse erledigt" -#: flatcamEditors/FlatCAMGeoEditor.py:1457 +#: flatcamEditors/FlatCAMGeoEditor.py:1509 msgid "Scale action was not executed" msgstr "Skalierungsaktion wurde nicht ausgeführt" -#: flatcamEditors/FlatCAMGeoEditor.py:1467 -#: flatcamEditors/FlatCAMGrbEditor.py:6000 +#: flatcamEditors/FlatCAMGeoEditor.py:1524 +#: flatcamEditors/FlatCAMGrbEditor.py:6029 msgid "No shape selected. Please Select a shape to offset!" msgstr "Keine Form ausgewählt. Bitte wählen Sie eine zu versetzende Form!" -#: flatcamEditors/FlatCAMGeoEditor.py:1470 -#: flatcamEditors/FlatCAMGrbEditor.py:6003 flatcamTools/ToolTransform.py:849 +#: flatcamEditors/FlatCAMGeoEditor.py:1527 +#: flatcamEditors/FlatCAMGrbEditor.py:6032 flatcamTools/ToolTransform.py:901 msgid "Applying Offset" msgstr "Offsetdruck anwenden" -#: flatcamEditors/FlatCAMGeoEditor.py:1483 -#: flatcamEditors/FlatCAMGrbEditor.py:6024 +#: flatcamEditors/FlatCAMGeoEditor.py:1537 +#: flatcamEditors/FlatCAMGrbEditor.py:6053 msgid "Offset on the X axis done" msgstr "Versatz auf der X-Achse erfolgt" -#: flatcamEditors/FlatCAMGeoEditor.py:1486 -#: flatcamEditors/FlatCAMGrbEditor.py:6026 +#: flatcamEditors/FlatCAMGeoEditor.py:1539 +#: flatcamEditors/FlatCAMGrbEditor.py:6055 msgid "Offset on the Y axis done" msgstr "Versatz auf der Y-Achse erfolgt" -#: flatcamEditors/FlatCAMGeoEditor.py:1490 +#: flatcamEditors/FlatCAMGeoEditor.py:1542 msgid "Offset action was not executed" msgstr "Offsetaktion wurde nicht ausgeführt" -#: flatcamEditors/FlatCAMGeoEditor.py:1494 -#: flatcamEditors/FlatCAMGrbEditor.py:6033 +#: flatcamEditors/FlatCAMGeoEditor.py:1546 +#: flatcamEditors/FlatCAMGrbEditor.py:6062 msgid "Rotate ..." msgstr "Drehen ..." -#: flatcamEditors/FlatCAMGeoEditor.py:1495 -#: flatcamEditors/FlatCAMGeoEditor.py:1550 -#: flatcamEditors/FlatCAMGeoEditor.py:1567 -#: flatcamEditors/FlatCAMGrbEditor.py:6034 -#: flatcamEditors/FlatCAMGrbEditor.py:6083 -#: flatcamEditors/FlatCAMGrbEditor.py:6098 +#: flatcamEditors/FlatCAMGeoEditor.py:1547 +#: flatcamEditors/FlatCAMGeoEditor.py:1602 +#: flatcamEditors/FlatCAMGeoEditor.py:1619 +#: flatcamEditors/FlatCAMGrbEditor.py:6063 +#: flatcamEditors/FlatCAMGrbEditor.py:6112 +#: flatcamEditors/FlatCAMGrbEditor.py:6127 msgid "Enter an Angle Value (degrees)" msgstr "Geben Sie einen Winkelwert (Grad) ein" -#: flatcamEditors/FlatCAMGeoEditor.py:1504 -#: flatcamEditors/FlatCAMGrbEditor.py:6042 +#: flatcamEditors/FlatCAMGeoEditor.py:1556 +#: flatcamEditors/FlatCAMGrbEditor.py:6071 msgid "Geometry shape rotate done" msgstr "Geometrieform drehen fertig" -#: flatcamEditors/FlatCAMGeoEditor.py:1508 -#: flatcamEditors/FlatCAMGrbEditor.py:6045 +#: flatcamEditors/FlatCAMGeoEditor.py:1560 +#: flatcamEditors/FlatCAMGrbEditor.py:6074 msgid "Geometry shape rotate cancelled" msgstr "Geometrieform drehen abgebrochen" -#: flatcamEditors/FlatCAMGeoEditor.py:1513 -#: flatcamEditors/FlatCAMGrbEditor.py:6050 +#: flatcamEditors/FlatCAMGeoEditor.py:1565 +#: flatcamEditors/FlatCAMGrbEditor.py:6079 msgid "Offset on X axis ..." msgstr "Versatz auf der X-Achse ..." -#: flatcamEditors/FlatCAMGeoEditor.py:1514 -#: flatcamEditors/FlatCAMGeoEditor.py:1533 -#: flatcamEditors/FlatCAMGrbEditor.py:6051 -#: flatcamEditors/FlatCAMGrbEditor.py:6068 +#: flatcamEditors/FlatCAMGeoEditor.py:1566 +#: flatcamEditors/FlatCAMGeoEditor.py:1585 +#: flatcamEditors/FlatCAMGrbEditor.py:6080 +#: flatcamEditors/FlatCAMGrbEditor.py:6097 msgid "Enter a distance Value" msgstr "Geben Sie einen Abstandswert ein" -#: flatcamEditors/FlatCAMGeoEditor.py:1523 -#: flatcamEditors/FlatCAMGrbEditor.py:6059 +#: flatcamEditors/FlatCAMGeoEditor.py:1575 +#: flatcamEditors/FlatCAMGrbEditor.py:6088 msgid "Geometry shape offset on X axis done" msgstr "Geometrieformversatz auf der X-Achse erfolgt" -#: flatcamEditors/FlatCAMGeoEditor.py:1527 -#: flatcamEditors/FlatCAMGrbEditor.py:6062 +#: flatcamEditors/FlatCAMGeoEditor.py:1579 +#: flatcamEditors/FlatCAMGrbEditor.py:6091 msgid "Geometry shape offset X cancelled" msgstr "[WARNING_NOTCL] Geometrieformversatz X abgebrochen" -#: flatcamEditors/FlatCAMGeoEditor.py:1532 -#: flatcamEditors/FlatCAMGrbEditor.py:6067 +#: flatcamEditors/FlatCAMGeoEditor.py:1584 +#: flatcamEditors/FlatCAMGrbEditor.py:6096 msgid "Offset on Y axis ..." msgstr "Versatz auf der Y-Achse ..." -#: flatcamEditors/FlatCAMGeoEditor.py:1542 -#: flatcamEditors/FlatCAMGrbEditor.py:6076 +#: flatcamEditors/FlatCAMGeoEditor.py:1594 +#: flatcamEditors/FlatCAMGrbEditor.py:6105 msgid "Geometry shape offset on Y axis done" msgstr "Geometrieformversatz auf Y-Achse erfolgt" -#: flatcamEditors/FlatCAMGeoEditor.py:1546 +#: flatcamEditors/FlatCAMGeoEditor.py:1598 msgid "Geometry shape offset on Y axis canceled" msgstr "Geometrieformversatz auf Y-Achse erfolgt" -#: flatcamEditors/FlatCAMGeoEditor.py:1549 -#: flatcamEditors/FlatCAMGrbEditor.py:6082 +#: flatcamEditors/FlatCAMGeoEditor.py:1601 +#: flatcamEditors/FlatCAMGrbEditor.py:6111 msgid "Skew on X axis ..." msgstr "Neigung auf der X-Achse ..." -#: flatcamEditors/FlatCAMGeoEditor.py:1559 -#: flatcamEditors/FlatCAMGrbEditor.py:6091 +#: flatcamEditors/FlatCAMGeoEditor.py:1611 +#: flatcamEditors/FlatCAMGrbEditor.py:6120 msgid "Geometry shape skew on X axis done" msgstr "Geometrieformversatz auf X-Achse" -#: flatcamEditors/FlatCAMGeoEditor.py:1563 +#: flatcamEditors/FlatCAMGeoEditor.py:1615 msgid "Geometry shape skew on X axis canceled" msgstr "Geometrieformversatz auf X-Achse" -#: flatcamEditors/FlatCAMGeoEditor.py:1566 -#: flatcamEditors/FlatCAMGrbEditor.py:6097 +#: flatcamEditors/FlatCAMGeoEditor.py:1618 +#: flatcamEditors/FlatCAMGrbEditor.py:6126 msgid "Skew on Y axis ..." msgstr "Neigung auf der Y-Achse ..." -#: flatcamEditors/FlatCAMGeoEditor.py:1576 -#: flatcamEditors/FlatCAMGrbEditor.py:6106 +#: flatcamEditors/FlatCAMGeoEditor.py:1628 +#: flatcamEditors/FlatCAMGrbEditor.py:6135 msgid "Geometry shape skew on Y axis done" msgstr "Geometrieformversatz auf Y-Achse erfolgt" -#: flatcamEditors/FlatCAMGeoEditor.py:1580 +#: flatcamEditors/FlatCAMGeoEditor.py:1632 msgid "Geometry shape skew on Y axis canceled" msgstr "Geometrieformversatz auf Y-Achse erfolgt" -#: flatcamEditors/FlatCAMGeoEditor.py:1951 -#: flatcamEditors/FlatCAMGeoEditor.py:2016 -#: flatcamEditors/FlatCAMGrbEditor.py:1436 -#: flatcamEditors/FlatCAMGrbEditor.py:1514 +#: flatcamEditors/FlatCAMGeoEditor.py:2009 +#: flatcamEditors/FlatCAMGeoEditor.py:2080 +#: flatcamEditors/FlatCAMGrbEditor.py:1435 +#: flatcamEditors/FlatCAMGrbEditor.py:1513 msgid "Click on Center point ..." msgstr "Klicken Sie auf Mittelpunkt." -#: flatcamEditors/FlatCAMGeoEditor.py:1958 -#: flatcamEditors/FlatCAMGrbEditor.py:1446 +#: flatcamEditors/FlatCAMGeoEditor.py:2022 +#: flatcamEditors/FlatCAMGrbEditor.py:1445 msgid "Click on Perimeter point to complete ..." msgstr "Klicken Sie auf Umfangspunkt, um den Vorgang abzuschließen." -#: flatcamEditors/FlatCAMGeoEditor.py:1990 +#: flatcamEditors/FlatCAMGeoEditor.py:2054 msgid "Done. Adding Circle completed." msgstr "Erledigt. Hinzufügen des Kreises abgeschlossen." -#: flatcamEditors/FlatCAMGeoEditor.py:2038 -#: flatcamEditors/FlatCAMGrbEditor.py:1547 +#: flatcamEditors/FlatCAMGeoEditor.py:2108 +#: flatcamEditors/FlatCAMGrbEditor.py:1546 msgid "Click on Start point ..." msgstr "Klicken Sie auf Startpunkt ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2040 -#: flatcamEditors/FlatCAMGrbEditor.py:1549 +#: flatcamEditors/FlatCAMGeoEditor.py:2110 +#: flatcamEditors/FlatCAMGrbEditor.py:1548 msgid "Click on Point3 ..." msgstr "Klicken Sie auf Punkt3 ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2042 -#: flatcamEditors/FlatCAMGrbEditor.py:1551 +#: flatcamEditors/FlatCAMGeoEditor.py:2112 +#: flatcamEditors/FlatCAMGrbEditor.py:1550 msgid "Click on Stop point ..." msgstr "Klicken Sie auf Haltepunkt ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2047 -#: flatcamEditors/FlatCAMGrbEditor.py:1556 +#: flatcamEditors/FlatCAMGeoEditor.py:2117 +#: flatcamEditors/FlatCAMGrbEditor.py:1555 msgid "Click on Stop point to complete ..." msgstr "Klicken Sie auf Stopp, um den Vorgang abzuschließen." -#: flatcamEditors/FlatCAMGeoEditor.py:2049 -#: flatcamEditors/FlatCAMGrbEditor.py:1558 +#: flatcamEditors/FlatCAMGeoEditor.py:2119 +#: flatcamEditors/FlatCAMGrbEditor.py:1557 msgid "Click on Point2 to complete ..." msgstr "Klicken Sie auf Punkt2, um den Vorgang abzuschließen." -#: flatcamEditors/FlatCAMGeoEditor.py:2051 -#: flatcamEditors/FlatCAMGrbEditor.py:1560 +#: flatcamEditors/FlatCAMGeoEditor.py:2121 +#: flatcamEditors/FlatCAMGrbEditor.py:1559 msgid "Click on Center point to complete ..." msgstr "Klicken Sie auf Mittelpunkt, um den Vorgang abzuschließen." -#: flatcamEditors/FlatCAMGeoEditor.py:2063 +#: flatcamEditors/FlatCAMGeoEditor.py:2133 #, python-format msgid "Direction: %s" msgstr "Richtung: %s" -#: flatcamEditors/FlatCAMGeoEditor.py:2077 -#: flatcamEditors/FlatCAMGrbEditor.py:1586 +#: flatcamEditors/FlatCAMGeoEditor.py:2147 +#: flatcamEditors/FlatCAMGrbEditor.py:1585 msgid "Mode: Start -> Stop -> Center. Click on Start point ..." msgstr "Modus: Start -> Stopp -> Zentrieren. Klicken Sie auf Startpunkt ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2080 -#: flatcamEditors/FlatCAMGrbEditor.py:1589 +#: flatcamEditors/FlatCAMGeoEditor.py:2150 +#: flatcamEditors/FlatCAMGrbEditor.py:1588 msgid "Mode: Point1 -> Point3 -> Point2. Click on Point1 ..." msgstr "Modus: Punkt 1 -> Punkt 3 -> Punkt 2. Klicken Sie auf Punkt1 ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2083 -#: flatcamEditors/FlatCAMGrbEditor.py:1592 +#: flatcamEditors/FlatCAMGeoEditor.py:2153 +#: flatcamEditors/FlatCAMGrbEditor.py:1591 msgid "Mode: Center -> Start -> Stop. Click on Center point ..." msgstr "Modus: Mitte -> Start -> Stopp. Klicken Sie auf Mittelpunkt." -#: flatcamEditors/FlatCAMGeoEditor.py:2224 +#: flatcamEditors/FlatCAMGeoEditor.py:2294 msgid "Done. Arc completed." msgstr "Erledigt. Arc abgeschlossen." -#: flatcamEditors/FlatCAMGeoEditor.py:2255 -#: flatcamEditors/FlatCAMGeoEditor.py:2322 +#: flatcamEditors/FlatCAMGeoEditor.py:2325 +#: flatcamEditors/FlatCAMGeoEditor.py:2398 msgid "Click on 1st corner ..." msgstr "Klicken Sie auf die 1. Ecke ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2261 +#: flatcamEditors/FlatCAMGeoEditor.py:2337 msgid "Click on opposite corner to complete ..." msgstr "" "Klicken Sie auf die gegenüberliegende Ecke, um den Vorgang abzuschließen." -#: flatcamEditors/FlatCAMGeoEditor.py:2291 +#: flatcamEditors/FlatCAMGeoEditor.py:2367 msgid "Done. Rectangle completed." msgstr "Erledigt. Rechteck fertiggestellt." -#: flatcamEditors/FlatCAMGeoEditor.py:2329 +#: flatcamEditors/FlatCAMGeoEditor.py:2411 flatcamTools/ToolNCC.py:1728 +#: flatcamTools/ToolPaint.py:1623 msgid "Click on next Point or click right mouse button to complete ..." msgstr "" "Klicken Sie auf den nächsten Punkt oder klicken Sie mit der rechten " "Maustaste, um den Vorgang abzuschließen." -#: flatcamEditors/FlatCAMGeoEditor.py:2360 +#: flatcamEditors/FlatCAMGeoEditor.py:2442 msgid "Done. Polygon completed." msgstr "Erledigt. Polygon fertiggestellt." -#: flatcamEditors/FlatCAMGeoEditor.py:2374 -#: flatcamEditors/FlatCAMGeoEditor.py:2439 -#: flatcamEditors/FlatCAMGrbEditor.py:1112 -#: flatcamEditors/FlatCAMGrbEditor.py:1323 +#: flatcamEditors/FlatCAMGeoEditor.py:2456 +#: flatcamEditors/FlatCAMGeoEditor.py:2521 +#: flatcamEditors/FlatCAMGrbEditor.py:1111 +#: flatcamEditors/FlatCAMGrbEditor.py:1322 msgid "Backtracked one point ..." msgstr "Einen Punkt zurückverfolgt ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2417 +#: flatcamEditors/FlatCAMGeoEditor.py:2499 msgid "Done. Path completed." msgstr "Getan. Pfad abgeschlossen." -#: flatcamEditors/FlatCAMGeoEditor.py:2580 +#: flatcamEditors/FlatCAMGeoEditor.py:2658 +msgid "No shape selected. Select a shape to explode" +msgstr "Keine Form ausgewählt. Wählen Sie eine Form zum Auflösen aus" + +#: flatcamEditors/FlatCAMGeoEditor.py:2691 msgid "Done. Polygons exploded into lines." msgstr "Getan. Polygone explodierten in Linien." -#: flatcamEditors/FlatCAMGeoEditor.py:2612 +#: flatcamEditors/FlatCAMGeoEditor.py:2723 msgid "MOVE: No shape selected. Select a shape to move" msgstr "Bewegen: Keine Form ausgewählt. Wähle eine Form zum Bewegen aus" -#: flatcamEditors/FlatCAMGeoEditor.py:2615 -#: flatcamEditors/FlatCAMGeoEditor.py:2628 +#: flatcamEditors/FlatCAMGeoEditor.py:2726 +#: flatcamEditors/FlatCAMGeoEditor.py:2746 msgid " MOVE: Click on reference point ..." msgstr " Bewegen: Referenzpunkt anklicken ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2619 +#: flatcamEditors/FlatCAMGeoEditor.py:2731 msgid " Click on destination point ..." msgstr " Klicken Sie auf den Zielpunkt ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2653 +#: flatcamEditors/FlatCAMGeoEditor.py:2771 msgid "Done. Geometry(s) Move completed." msgstr "Erledigt. Geometrie(n) Bewegung abgeschlossen." -#: flatcamEditors/FlatCAMGeoEditor.py:2783 +#: flatcamEditors/FlatCAMGeoEditor.py:2904 msgid "Done. Geometry(s) Copy completed." msgstr "Erledigt. Geometrie(n) Kopieren abgeschlossen." -#: flatcamEditors/FlatCAMGeoEditor.py:2811 -#: flatcamEditors/FlatCAMGrbEditor.py:898 +#: flatcamEditors/FlatCAMGeoEditor.py:2935 +#: flatcamEditors/FlatCAMGrbEditor.py:897 msgid "Click on 1st point ..." msgstr "Klicken Sie auf den 1. Punkt ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2829 +#: flatcamEditors/FlatCAMGeoEditor.py:2959 msgid "" "Font not supported. Only Regular, Bold, Italic and BoldItalic are supported. " "Error" @@ -4464,96 +4768,132 @@ msgstr "" "Schrift wird nicht unterstützt. Es werden nur Regular, Bold, Italic und " "BoldItalic unterstützt. Error" -#: flatcamEditors/FlatCAMGeoEditor.py:2837 +#: flatcamEditors/FlatCAMGeoEditor.py:2967 msgid "No text to add." msgstr "Kein Text zum Hinzufügen." -#: flatcamEditors/FlatCAMGeoEditor.py:2844 +#: flatcamEditors/FlatCAMGeoEditor.py:2977 msgid " Done. Adding Text completed." msgstr " Erledigt. Hinzufügen von Text abgeschlossen." -#: flatcamEditors/FlatCAMGeoEditor.py:2881 +#: flatcamEditors/FlatCAMGeoEditor.py:3014 msgid "Create buffer geometry ..." msgstr "Puffergeometrie erstellen ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2892 -#: flatcamEditors/FlatCAMGeoEditor.py:2922 -#: flatcamEditors/FlatCAMGeoEditor.py:2952 -msgid "Buffer cancelled. No shape selected." -msgstr "Puffer abgebrochen. Keine Form ausgewählt." - -#: flatcamEditors/FlatCAMGeoEditor.py:2917 -#: flatcamEditors/FlatCAMGrbEditor.py:4950 +#: flatcamEditors/FlatCAMGeoEditor.py:3049 +#: flatcamEditors/FlatCAMGrbEditor.py:4994 msgid "Done. Buffer Tool completed." msgstr "Erledigt. Pufferwerkzeug abgeschlossen." -#: flatcamEditors/FlatCAMGeoEditor.py:2947 +#: flatcamEditors/FlatCAMGeoEditor.py:3077 msgid "Done. Buffer Int Tool completed." msgstr "Erledigt. Innenpufferwerkzeug abgeschlossen." -#: flatcamEditors/FlatCAMGeoEditor.py:2977 +#: flatcamEditors/FlatCAMGeoEditor.py:3105 msgid "Done. Buffer Ext Tool completed." msgstr "Erledigt. Außenpufferwerkzeug abgeschlossen." -#: flatcamEditors/FlatCAMGeoEditor.py:3023 -#: flatcamEditors/FlatCAMGrbEditor.py:2152 +#: flatcamEditors/FlatCAMGeoEditor.py:3154 +#: flatcamEditors/FlatCAMGrbEditor.py:2151 msgid "Select a shape to act as deletion area ..." msgstr "Wählen Sie eine Form als Löschbereich aus ..." -#: flatcamEditors/FlatCAMGeoEditor.py:3025 -#: flatcamEditors/FlatCAMGeoEditor.py:3045 -#: flatcamEditors/FlatCAMGeoEditor.py:3051 -#: flatcamEditors/FlatCAMGrbEditor.py:2154 +#: flatcamEditors/FlatCAMGeoEditor.py:3156 +#: flatcamEditors/FlatCAMGeoEditor.py:3182 +#: flatcamEditors/FlatCAMGeoEditor.py:3188 +#: flatcamEditors/FlatCAMGrbEditor.py:2153 msgid "Click to pick-up the erase shape..." msgstr "Klicken Sie, um die Löschform aufzunehmen ..." -#: flatcamEditors/FlatCAMGeoEditor.py:3055 -#: flatcamEditors/FlatCAMGrbEditor.py:2213 +#: flatcamEditors/FlatCAMGeoEditor.py:3192 +#: flatcamEditors/FlatCAMGrbEditor.py:2212 msgid "Click to erase ..." msgstr "Klicken zum Löschen ..." -#: flatcamEditors/FlatCAMGeoEditor.py:3084 -#: flatcamEditors/FlatCAMGrbEditor.py:2246 +#: flatcamEditors/FlatCAMGeoEditor.py:3221 +#: flatcamEditors/FlatCAMGrbEditor.py:2245 msgid "Done. Eraser tool action completed." msgstr "Erledigt. Radiergummi-Aktion abgeschlossen." -#: flatcamEditors/FlatCAMGeoEditor.py:3131 +#: flatcamEditors/FlatCAMGeoEditor.py:3271 msgid "Create Paint geometry ..." msgstr "Malen geometrie erstellen ..." -#: flatcamEditors/FlatCAMGeoEditor.py:3144 -#: flatcamEditors/FlatCAMGrbEditor.py:2402 +#: flatcamEditors/FlatCAMGeoEditor.py:3284 +#: flatcamEditors/FlatCAMGrbEditor.py:2408 msgid "Shape transformations ..." msgstr "Formtransformationen ..." -#: flatcamEditors/FlatCAMGeoEditor.py:3763 +#: flatcamEditors/FlatCAMGeoEditor.py:3340 flatcamGUI/PreferencesUI.py:4636 +msgid "Geometry Editor" +msgstr "Geo-Editor" + +#: flatcamEditors/FlatCAMGeoEditor.py:3346 +#: flatcamEditors/FlatCAMGrbEditor.py:2486 +#: flatcamEditors/FlatCAMGrbEditor.py:3846 flatcamGUI/ObjectUI.py:262 +#: flatcamGUI/ObjectUI.py:1495 flatcamGUI/ObjectUI.py:2244 +#: flatcamTools/ToolCutOut.py:96 +msgid "Type" +msgstr "Typ" + +#: flatcamEditors/FlatCAMGeoEditor.py:3346 flatcamGUI/ObjectUI.py:217 +#: flatcamGUI/ObjectUI.py:741 flatcamGUI/ObjectUI.py:1431 +#: flatcamGUI/ObjectUI.py:2153 flatcamGUI/ObjectUI.py:2457 +#: flatcamGUI/ObjectUI.py:2524 flatcamTools/ToolCalibration.py:234 +#: flatcamTools/ToolFiducials.py:73 +msgid "Name" +msgstr "Name" + +#: flatcamEditors/FlatCAMGeoEditor.py:3588 +msgid "Ring" +msgstr "Ring" + +#: flatcamEditors/FlatCAMGeoEditor.py:3590 +msgid "Line" +msgstr "Linie" + +#: flatcamEditors/FlatCAMGeoEditor.py:3592 flatcamGUI/FlatCAMGUI.py:2187 +#: flatcamGUI/PreferencesUI.py:5607 flatcamGUI/PreferencesUI.py:6131 +#: flatcamTools/ToolNCC.py:584 flatcamTools/ToolPaint.py:528 +msgid "Polygon" +msgstr "Polygon" + +#: flatcamEditors/FlatCAMGeoEditor.py:3594 +msgid "Multi-Line" +msgstr "Mehrzeilig" + +#: flatcamEditors/FlatCAMGeoEditor.py:3596 +msgid "Multi-Polygon" +msgstr "Multi-Polygon" + +#: flatcamEditors/FlatCAMGeoEditor.py:3603 +msgid "Geo Elem" +msgstr "Geoelement" + +#: flatcamEditors/FlatCAMGeoEditor.py:4076 msgid "Editing MultiGeo Geometry, tool" msgstr "Bearbeiten von MultiGeo Geometry, Werkzeug" -#: flatcamEditors/FlatCAMGeoEditor.py:3765 +#: flatcamEditors/FlatCAMGeoEditor.py:4078 msgid "with diameter" msgstr "mit Durchmesser" -#: flatcamEditors/FlatCAMGeoEditor.py:4169 -msgid "Copy cancelled. No shape selected." -msgstr "Kopieren abgebrochen. Keine Form ausgewählt." - -#: flatcamEditors/FlatCAMGeoEditor.py:4176 flatcamGUI/FlatCAMGUI.py:3472 -#: flatcamGUI/FlatCAMGUI.py:3519 flatcamGUI/FlatCAMGUI.py:3538 -#: flatcamGUI/FlatCAMGUI.py:3679 flatcamGUI/FlatCAMGUI.py:3719 -#: flatcamGUI/FlatCAMGUI.py:3732 flatcamGUI/FlatCAMGUI.py:3749 +#: flatcamEditors/FlatCAMGeoEditor.py:4509 flatcamGUI/FlatCAMGUI.py:3695 +#: flatcamGUI/FlatCAMGUI.py:3741 flatcamGUI/FlatCAMGUI.py:3759 +#: flatcamGUI/FlatCAMGUI.py:3899 flatcamGUI/FlatCAMGUI.py:3938 +#: flatcamGUI/FlatCAMGUI.py:3950 flatcamGUI/FlatCAMGUI.py:3967 msgid "Click on target point." msgstr "Klicken Sie auf den Zielpunkt." -#: flatcamEditors/FlatCAMGeoEditor.py:4479 -#: flatcamEditors/FlatCAMGeoEditor.py:4514 +#: flatcamEditors/FlatCAMGeoEditor.py:4823 +#: flatcamEditors/FlatCAMGeoEditor.py:4858 msgid "A selection of at least 2 geo items is required to do Intersection." msgstr "" "Eine Auswahl von mindestens 2 Geo-Elementen ist erforderlich, um die " "Kreuzung durchzuführen." -#: flatcamEditors/FlatCAMGeoEditor.py:4600 -#: flatcamEditors/FlatCAMGeoEditor.py:4704 +#: flatcamEditors/FlatCAMGeoEditor.py:4944 +#: flatcamEditors/FlatCAMGeoEditor.py:5048 msgid "" "Negative buffer value is not accepted. Use Buffer interior to generate an " "'inside' shape" @@ -4561,60 +4901,59 @@ msgstr "" "Negativer Pufferwert wird nicht akzeptiert. Verwenden Sie den " "Pufferinnenraum, um eine Innenform zu erzeugen" -#: flatcamEditors/FlatCAMGeoEditor.py:4610 -#: flatcamEditors/FlatCAMGeoEditor.py:4663 -#: flatcamEditors/FlatCAMGeoEditor.py:4713 +#: flatcamEditors/FlatCAMGeoEditor.py:4954 +#: flatcamEditors/FlatCAMGeoEditor.py:5007 +#: flatcamEditors/FlatCAMGeoEditor.py:5057 msgid "Nothing selected for buffering." msgstr "Nichts ist für die Pufferung ausgewählt." -#: flatcamEditors/FlatCAMGeoEditor.py:4615 -#: flatcamEditors/FlatCAMGeoEditor.py:4667 -#: flatcamEditors/FlatCAMGeoEditor.py:4718 +#: flatcamEditors/FlatCAMGeoEditor.py:4959 +#: flatcamEditors/FlatCAMGeoEditor.py:5011 +#: flatcamEditors/FlatCAMGeoEditor.py:5062 msgid "Invalid distance for buffering." msgstr "Ungültige Entfernung zum Puffern." -#: flatcamEditors/FlatCAMGeoEditor.py:4639 -#: flatcamEditors/FlatCAMGeoEditor.py:4738 +#: flatcamEditors/FlatCAMGeoEditor.py:4983 +#: flatcamEditors/FlatCAMGeoEditor.py:5082 msgid "Failed, the result is empty. Choose a different buffer value." msgstr "" "Fehlgeschlagen, das Ergebnis ist leer. Wählen Sie einen anderen Pufferwert." -#: flatcamEditors/FlatCAMGeoEditor.py:4650 +#: flatcamEditors/FlatCAMGeoEditor.py:4994 msgid "Full buffer geometry created." msgstr "Volle Puffergeometrie erstellt." -#: flatcamEditors/FlatCAMGeoEditor.py:4656 +#: flatcamEditors/FlatCAMGeoEditor.py:5000 msgid "Negative buffer value is not accepted." msgstr "Negativer Pufferwert wird nicht akzeptiert." -#: flatcamEditors/FlatCAMGeoEditor.py:4687 +#: flatcamEditors/FlatCAMGeoEditor.py:5031 msgid "Failed, the result is empty. Choose a smaller buffer value." msgstr "" "Fehlgeschlagen, das Ergebnis ist leer. Wählen Sie einen kleineren Pufferwert." -#: flatcamEditors/FlatCAMGeoEditor.py:4697 +#: flatcamEditors/FlatCAMGeoEditor.py:5041 msgid "Interior buffer geometry created." msgstr "Innere Puffergeometrie erstellt." -#: flatcamEditors/FlatCAMGeoEditor.py:4748 +#: flatcamEditors/FlatCAMGeoEditor.py:5092 msgid "Exterior buffer geometry created." msgstr "Außenpuffergeometrie erstellt." -#: flatcamEditors/FlatCAMGeoEditor.py:4754 +#: flatcamEditors/FlatCAMGeoEditor.py:5098 #, python-format -msgid "Could not do Paint. Overlap value has to be less than 1.00 (100%%)." -msgstr "" -"Kann nicht Malen machen. Der Überlappungswert muss unter 1,00 (100%%) liegen." +msgid "Could not do Paint. Overlap value has to be less than 100%%." +msgstr "Konnte nicht Malen. Der Überlappungswert muss kleiner als 100 %% sein." -#: flatcamEditors/FlatCAMGeoEditor.py:4761 +#: flatcamEditors/FlatCAMGeoEditor.py:5105 msgid "Nothing selected for painting." msgstr "Nichts zum Malen ausgewählt." -#: flatcamEditors/FlatCAMGeoEditor.py:4767 +#: flatcamEditors/FlatCAMGeoEditor.py:5111 msgid "Invalid value for" msgstr "Ungültiger Wert für" -#: flatcamEditors/FlatCAMGeoEditor.py:4826 +#: flatcamEditors/FlatCAMGeoEditor.py:5170 msgid "" "Could not do Paint. Try a different combination of parameters. Or a " "different method of Paint" @@ -4622,7 +4961,7 @@ msgstr "" "Konnte nicht malen. Probieren Sie eine andere Kombination von Parametern " "aus. Oder eine andere Malmethode" -#: flatcamEditors/FlatCAMGeoEditor.py:4840 +#: flatcamEditors/FlatCAMGeoEditor.py:5181 msgid "Paint done." msgstr "Malen fertig." @@ -4638,7 +4977,7 @@ msgid "Aperture size is zero. It needs to be greater than zero." msgstr "Die Größe der Blende ist Null. Es muss größer als Null sein." #: flatcamEditors/FlatCAMGrbEditor.py:371 -#: flatcamEditors/FlatCAMGrbEditor.py:685 +#: flatcamEditors/FlatCAMGrbEditor.py:684 msgid "" "Incompatible aperture type. Select an aperture with type 'C', 'R' or 'O'." msgstr "" @@ -4659,173 +4998,167 @@ msgstr "" msgid "Click on the Pad Circular Array Start position" msgstr "Klicken Sie auf die Startposition des Pad-Kreis-Arrays" -#: flatcamEditors/FlatCAMGrbEditor.py:711 +#: flatcamEditors/FlatCAMGrbEditor.py:710 msgid "Too many Pads for the selected spacing angle." msgstr "Zu viele Pad für den ausgewählten Abstandswinkel." -#: flatcamEditors/FlatCAMGrbEditor.py:734 +#: flatcamEditors/FlatCAMGrbEditor.py:733 msgid "Done. Pad Array added." msgstr "Erledigt. Pad Array hinzugefügt." -#: flatcamEditors/FlatCAMGrbEditor.py:759 +#: flatcamEditors/FlatCAMGrbEditor.py:758 msgid "Select shape(s) and then click ..." msgstr "Wählen Sie die Form (en) aus und klicken Sie dann auf ..." -#: flatcamEditors/FlatCAMGrbEditor.py:771 +#: flatcamEditors/FlatCAMGrbEditor.py:770 msgid "Failed. Nothing selected." msgstr "Gescheitert. Nichts ausgewählt." -#: flatcamEditors/FlatCAMGrbEditor.py:787 +#: flatcamEditors/FlatCAMGrbEditor.py:786 msgid "" "Failed. Poligonize works only on geometries belonging to the same aperture." msgstr "" "Gescheitert. Poligonize funktioniert nur bei Geometrien, die zur selben " "Apertur gehören." -#: flatcamEditors/FlatCAMGrbEditor.py:841 +#: flatcamEditors/FlatCAMGrbEditor.py:840 msgid "Done. Poligonize completed." msgstr "Erledigt. Poligonize abgeschlossen." -#: flatcamEditors/FlatCAMGrbEditor.py:896 -#: flatcamEditors/FlatCAMGrbEditor.py:1129 -#: flatcamEditors/FlatCAMGrbEditor.py:1153 +#: flatcamEditors/FlatCAMGrbEditor.py:895 +#: flatcamEditors/FlatCAMGrbEditor.py:1128 +#: flatcamEditors/FlatCAMGrbEditor.py:1152 msgid "Corner Mode 1: 45 degrees ..." msgstr "Eckmodus 1: 45 Grad ..." -#: flatcamEditors/FlatCAMGrbEditor.py:908 -#: flatcamEditors/FlatCAMGrbEditor.py:1238 +#: flatcamEditors/FlatCAMGrbEditor.py:907 +#: flatcamEditors/FlatCAMGrbEditor.py:1237 msgid "Click on next Point or click Right mouse button to complete ..." msgstr "" "Klicken Sie auf den nächsten Punkt oder klicken Sie mit der rechten " "Maustaste, um den Vorgang abzuschließen." -#: flatcamEditors/FlatCAMGrbEditor.py:1117 -#: flatcamEditors/FlatCAMGrbEditor.py:1150 +#: flatcamEditors/FlatCAMGrbEditor.py:1116 +#: flatcamEditors/FlatCAMGrbEditor.py:1149 msgid "Corner Mode 2: Reverse 45 degrees ..." msgstr "Eckmodus 2: 45 Grad umkehren ..." -#: flatcamEditors/FlatCAMGrbEditor.py:1120 -#: flatcamEditors/FlatCAMGrbEditor.py:1147 +#: flatcamEditors/FlatCAMGrbEditor.py:1119 +#: flatcamEditors/FlatCAMGrbEditor.py:1146 msgid "Corner Mode 3: 90 degrees ..." msgstr "Eckmodus 3: 90 Grad ..." -#: flatcamEditors/FlatCAMGrbEditor.py:1123 -#: flatcamEditors/FlatCAMGrbEditor.py:1144 +#: flatcamEditors/FlatCAMGrbEditor.py:1122 +#: flatcamEditors/FlatCAMGrbEditor.py:1143 msgid "Corner Mode 4: Reverse 90 degrees ..." msgstr "Eckmodus 4: Um 90 Grad umkehren ..." -#: flatcamEditors/FlatCAMGrbEditor.py:1126 -#: flatcamEditors/FlatCAMGrbEditor.py:1141 +#: flatcamEditors/FlatCAMGrbEditor.py:1125 +#: flatcamEditors/FlatCAMGrbEditor.py:1140 msgid "Corner Mode 5: Free angle ..." msgstr "Eckmodus 5: Freiwinkel ..." -#: flatcamEditors/FlatCAMGrbEditor.py:1183 -#: flatcamEditors/FlatCAMGrbEditor.py:1359 -#: flatcamEditors/FlatCAMGrbEditor.py:1398 +#: flatcamEditors/FlatCAMGrbEditor.py:1182 +#: flatcamEditors/FlatCAMGrbEditor.py:1358 +#: flatcamEditors/FlatCAMGrbEditor.py:1397 msgid "Track Mode 1: 45 degrees ..." msgstr "Spurmodus 1: 45 Grad ..." -#: flatcamEditors/FlatCAMGrbEditor.py:1339 -#: flatcamEditors/FlatCAMGrbEditor.py:1393 +#: flatcamEditors/FlatCAMGrbEditor.py:1338 +#: flatcamEditors/FlatCAMGrbEditor.py:1392 msgid "Track Mode 2: Reverse 45 degrees ..." msgstr "Spurmodus 2: 45 Grad umkehren ..." -#: flatcamEditors/FlatCAMGrbEditor.py:1344 -#: flatcamEditors/FlatCAMGrbEditor.py:1388 +#: flatcamEditors/FlatCAMGrbEditor.py:1343 +#: flatcamEditors/FlatCAMGrbEditor.py:1387 msgid "Track Mode 3: 90 degrees ..." msgstr "Spurmodus 3: 90 Grad ..." -#: flatcamEditors/FlatCAMGrbEditor.py:1349 -#: flatcamEditors/FlatCAMGrbEditor.py:1383 +#: flatcamEditors/FlatCAMGrbEditor.py:1348 +#: flatcamEditors/FlatCAMGrbEditor.py:1382 msgid "Track Mode 4: Reverse 90 degrees ..." msgstr "Spurmodus 4: Um 90 Grad umkehren ..." -#: flatcamEditors/FlatCAMGrbEditor.py:1354 -#: flatcamEditors/FlatCAMGrbEditor.py:1378 +#: flatcamEditors/FlatCAMGrbEditor.py:1353 +#: flatcamEditors/FlatCAMGrbEditor.py:1377 msgid "Track Mode 5: Free angle ..." msgstr "Spurmodus 5: Freiwinkel ..." -#: flatcamEditors/FlatCAMGrbEditor.py:1779 +#: flatcamEditors/FlatCAMGrbEditor.py:1778 msgid "Scale the selected Gerber apertures ..." msgstr "Skalieren Sie die ausgewählten Gerber-Öffnungen ..." -#: flatcamEditors/FlatCAMGrbEditor.py:1821 +#: flatcamEditors/FlatCAMGrbEditor.py:1820 msgid "Buffer the selected apertures ..." msgstr "Die ausgewählten Öffnungen puffern ..." -#: flatcamEditors/FlatCAMGrbEditor.py:1863 +#: flatcamEditors/FlatCAMGrbEditor.py:1862 msgid "Mark polygon areas in the edited Gerber ..." msgstr "Markiere Polygonbereiche im bearbeiteten Gerber ..." -#: flatcamEditors/FlatCAMGrbEditor.py:1929 +#: flatcamEditors/FlatCAMGrbEditor.py:1928 msgid "Nothing selected to move" msgstr "Nichts zum Bewegen ausgewählt" -#: flatcamEditors/FlatCAMGrbEditor.py:2054 +#: flatcamEditors/FlatCAMGrbEditor.py:2053 msgid "Done. Apertures Move completed." msgstr "Erledigt. Öffnungsbewegung abgeschlossen." -#: flatcamEditors/FlatCAMGrbEditor.py:2136 +#: flatcamEditors/FlatCAMGrbEditor.py:2135 msgid "Done. Apertures copied." msgstr "Erledigt. Blende kopiert." -#: flatcamEditors/FlatCAMGrbEditor.py:2447 flatcamGUI/FlatCAMGUI.py:2110 -#: flatcamGUI/PreferencesUI.py:2443 +#: flatcamEditors/FlatCAMGrbEditor.py:2453 flatcamGUI/FlatCAMGUI.py:2218 +#: flatcamGUI/PreferencesUI.py:2623 msgid "Gerber Editor" msgstr "Gerber-Editor" -#: flatcamEditors/FlatCAMGrbEditor.py:2467 flatcamGUI/ObjectUI.py:223 -#: flatcamTools/ToolProperties.py:156 +#: flatcamEditors/FlatCAMGrbEditor.py:2473 flatcamGUI/ObjectUI.py:227 +#: flatcamTools/ToolProperties.py:159 msgid "Apertures" msgstr "Öffnungen" -#: flatcamEditors/FlatCAMGrbEditor.py:2469 flatcamGUI/ObjectUI.py:225 +#: flatcamEditors/FlatCAMGrbEditor.py:2475 flatcamGUI/ObjectUI.py:229 msgid "Apertures Table for the Gerber Object." msgstr "Blendentabelle für das Gerberobjekt." -#: flatcamEditors/FlatCAMGrbEditor.py:2480 -#: flatcamEditors/FlatCAMGrbEditor.py:3832 flatcamGUI/ObjectUI.py:258 +#: flatcamEditors/FlatCAMGrbEditor.py:2486 +#: flatcamEditors/FlatCAMGrbEditor.py:3846 flatcamGUI/ObjectUI.py:262 msgid "Code" msgstr "Code" -#: flatcamEditors/FlatCAMGrbEditor.py:2480 -#: flatcamEditors/FlatCAMGrbEditor.py:3832 flatcamGUI/ObjectUI.py:258 -#: flatcamGUI/ObjectUI.py:1217 flatcamGUI/ObjectUI.py:1916 -msgid "Type" -msgstr "Typ" - -#: flatcamEditors/FlatCAMGrbEditor.py:2480 -#: flatcamEditors/FlatCAMGrbEditor.py:3832 flatcamGUI/ObjectUI.py:258 -#: flatcamGUI/PreferencesUI.py:1009 flatcamGUI/PreferencesUI.py:7270 -#: flatcamGUI/PreferencesUI.py:7299 flatcamGUI/PreferencesUI.py:7401 -#: flatcamTools/ToolCopperThieving.py:260 -#: flatcamTools/ToolCopperThieving.py:300 flatcamTools/ToolFiducials.py:156 +#: flatcamEditors/FlatCAMGrbEditor.py:2486 +#: flatcamEditors/FlatCAMGrbEditor.py:3846 flatcamGUI/ObjectUI.py:262 +#: flatcamGUI/PreferencesUI.py:1184 flatcamGUI/PreferencesUI.py:7776 +#: flatcamGUI/PreferencesUI.py:7805 flatcamGUI/PreferencesUI.py:7907 +#: flatcamTools/ToolCopperThieving.py:262 +#: flatcamTools/ToolCopperThieving.py:302 flatcamTools/ToolFiducials.py:156 msgid "Size" msgstr "Größe" -#: flatcamEditors/FlatCAMGrbEditor.py:2480 -#: flatcamEditors/FlatCAMGrbEditor.py:3832 flatcamGUI/ObjectUI.py:258 +#: flatcamEditors/FlatCAMGrbEditor.py:2486 +#: flatcamEditors/FlatCAMGrbEditor.py:3846 flatcamGUI/ObjectUI.py:262 msgid "Dim" msgstr "Maße" -#: flatcamEditors/FlatCAMGrbEditor.py:2484 flatcamGUI/ObjectUI.py:262 +#: flatcamEditors/FlatCAMGrbEditor.py:2490 flatcamGUI/ObjectUI.py:266 msgid "Index" msgstr "Index" -#: flatcamEditors/FlatCAMGrbEditor.py:2486 -#: flatcamEditors/FlatCAMGrbEditor.py:2515 flatcamGUI/ObjectUI.py:264 +#: flatcamEditors/FlatCAMGrbEditor.py:2492 +#: flatcamEditors/FlatCAMGrbEditor.py:2521 flatcamGUI/ObjectUI.py:268 msgid "Aperture Code" msgstr "Öffnungscode" -#: flatcamEditors/FlatCAMGrbEditor.py:2488 flatcamGUI/ObjectUI.py:266 +#: flatcamEditors/FlatCAMGrbEditor.py:2494 flatcamGUI/ObjectUI.py:270 msgid "Type of aperture: circular, rectangle, macros etc" msgstr "Öffnungsart: kreisförmig, rechteckig, Makros usw" -#: flatcamEditors/FlatCAMGrbEditor.py:2490 flatcamGUI/ObjectUI.py:268 +#: flatcamEditors/FlatCAMGrbEditor.py:2496 flatcamGUI/ObjectUI.py:272 msgid "Aperture Size:" msgstr "Öffnungsgröße:" -#: flatcamEditors/FlatCAMGrbEditor.py:2492 flatcamGUI/ObjectUI.py:270 +#: flatcamEditors/FlatCAMGrbEditor.py:2498 flatcamGUI/ObjectUI.py:274 msgid "" "Aperture Dimensions:\n" " - (width, height) for R, O type.\n" @@ -4835,15 +5168,15 @@ msgstr "" "  - (Breite, Höhe) für R, O-Typ.\n" "  - (dia, nVertices) für P-Typ" -#: flatcamEditors/FlatCAMGrbEditor.py:2516 flatcamGUI/PreferencesUI.py:2474 +#: flatcamEditors/FlatCAMGrbEditor.py:2522 flatcamGUI/PreferencesUI.py:2654 msgid "Code for the new aperture" msgstr "Code für die neue Blende" -#: flatcamEditors/FlatCAMGrbEditor.py:2525 +#: flatcamEditors/FlatCAMGrbEditor.py:2531 msgid "Aperture Size" msgstr "Öffnungsgröße" -#: flatcamEditors/FlatCAMGrbEditor.py:2527 +#: flatcamEditors/FlatCAMGrbEditor.py:2533 msgid "" "Size for the new aperture.\n" "If aperture type is 'R' or 'O' then\n" @@ -4857,11 +5190,11 @@ msgstr "" "berechnet als:\n" "Quadrat (Breite ** 2 + Höhe ** 2)" -#: flatcamEditors/FlatCAMGrbEditor.py:2541 +#: flatcamEditors/FlatCAMGrbEditor.py:2547 msgid "Aperture Type" msgstr "Blendentyp" -#: flatcamEditors/FlatCAMGrbEditor.py:2543 +#: flatcamEditors/FlatCAMGrbEditor.py:2549 msgid "" "Select the type of new aperture. Can be:\n" "C = circular\n" @@ -4873,11 +5206,11 @@ msgstr "" "R = rechteckig\n" "O = länglich" -#: flatcamEditors/FlatCAMGrbEditor.py:2554 +#: flatcamEditors/FlatCAMGrbEditor.py:2560 msgid "Aperture Dim" msgstr "Öffnungsmaße" -#: flatcamEditors/FlatCAMGrbEditor.py:2556 +#: flatcamEditors/FlatCAMGrbEditor.py:2562 msgid "" "Dimensions for the new aperture.\n" "Active only for rectangular apertures (type R).\n" @@ -4887,39 +5220,39 @@ msgstr "" "Aktiv nur für rechteckige Öffnungen (Typ R).\n" "Das Format ist (Breite, Höhe)" -#: flatcamEditors/FlatCAMGrbEditor.py:2565 +#: flatcamEditors/FlatCAMGrbEditor.py:2571 msgid "Add/Delete Aperture" msgstr "Blende hinzufügen / löschen" -#: flatcamEditors/FlatCAMGrbEditor.py:2567 +#: flatcamEditors/FlatCAMGrbEditor.py:2573 msgid "Add/Delete an aperture in the aperture table" msgstr "Eine Blende in der Blendentabelle hinzufügen / löschen" -#: flatcamEditors/FlatCAMGrbEditor.py:2576 +#: flatcamEditors/FlatCAMGrbEditor.py:2582 msgid "Add a new aperture to the aperture list." msgstr "Fügen Sie der Blendenliste eine neue Blende hinzu." -#: flatcamEditors/FlatCAMGrbEditor.py:2581 +#: flatcamEditors/FlatCAMGrbEditor.py:2587 msgid "Delete a aperture in the aperture list" msgstr "Löschen Sie eine Blende in der Blendenliste" -#: flatcamEditors/FlatCAMGrbEditor.py:2598 +#: flatcamEditors/FlatCAMGrbEditor.py:2604 msgid "Buffer Aperture" msgstr "Pufferblende" -#: flatcamEditors/FlatCAMGrbEditor.py:2600 +#: flatcamEditors/FlatCAMGrbEditor.py:2606 msgid "Buffer a aperture in the aperture list" msgstr "Puffern Sie eine Blende in der Blendenliste" -#: flatcamEditors/FlatCAMGrbEditor.py:2613 flatcamGUI/PreferencesUI.py:2608 +#: flatcamEditors/FlatCAMGrbEditor.py:2619 flatcamGUI/PreferencesUI.py:2790 msgid "Buffer distance" msgstr "Pufferabstand" -#: flatcamEditors/FlatCAMGrbEditor.py:2614 +#: flatcamEditors/FlatCAMGrbEditor.py:2620 msgid "Buffer corner" msgstr "Pufferecke" -#: flatcamEditors/FlatCAMGrbEditor.py:2616 +#: flatcamEditors/FlatCAMGrbEditor.py:2622 msgid "" "There are 3 types of corners:\n" " - 'Round': the corner is rounded.\n" @@ -4933,27 +5266,26 @@ msgstr "" "  - 'Abgeschrägt:' Die Ecke ist eine Linie, die die Features, die sich in " "der Ecke treffen, direkt verbindet" -#: flatcamEditors/FlatCAMGrbEditor.py:2631 flatcamGUI/FlatCAMGUI.py:978 -#: flatcamGUI/FlatCAMGUI.py:2015 flatcamGUI/FlatCAMGUI.py:2087 -#: flatcamGUI/FlatCAMGUI.py:2130 flatcamGUI/FlatCAMGUI.py:2547 -#: flatcamGUI/PreferencesUI.py:6393 flatcamTools/ToolTransform.py:30 -#: flatcamTools/ToolTransform.py:349 +#: flatcamEditors/FlatCAMGrbEditor.py:2637 flatcamGUI/FlatCAMGUI.py:1046 +#: flatcamGUI/FlatCAMGUI.py:2123 flatcamGUI/FlatCAMGUI.py:2195 +#: flatcamGUI/FlatCAMGUI.py:2238 flatcamGUI/FlatCAMGUI.py:2721 +#: flatcamGUI/PreferencesUI.py:6880 flatcamTools/ToolTransform.py:30 msgid "Buffer" msgstr "Puffer" -#: flatcamEditors/FlatCAMGrbEditor.py:2646 +#: flatcamEditors/FlatCAMGrbEditor.py:2652 msgid "Scale Aperture" msgstr "Skalenöffnung" -#: flatcamEditors/FlatCAMGrbEditor.py:2648 +#: flatcamEditors/FlatCAMGrbEditor.py:2654 msgid "Scale a aperture in the aperture list" msgstr "Skalieren Sie eine Blende in der Blendenliste" -#: flatcamEditors/FlatCAMGrbEditor.py:2656 flatcamGUI/PreferencesUI.py:2623 +#: flatcamEditors/FlatCAMGrbEditor.py:2662 flatcamGUI/PreferencesUI.py:2805 msgid "Scale factor" msgstr "Skalierungsfaktor" -#: flatcamEditors/FlatCAMGrbEditor.py:2658 +#: flatcamEditors/FlatCAMGrbEditor.py:2664 msgid "" "The factor by which to scale the selected aperture.\n" "Values can be between 0.0000 and 999.9999" @@ -4961,19 +5293,19 @@ msgstr "" "Der Faktor, um den die ausgewählte Blende skaliert werden soll.\n" "Die Werte können zwischen 0,0000 und 999,9999 liegen" -#: flatcamEditors/FlatCAMGrbEditor.py:2686 +#: flatcamEditors/FlatCAMGrbEditor.py:2692 msgid "Mark polygons" msgstr "Polygone markieren" -#: flatcamEditors/FlatCAMGrbEditor.py:2688 +#: flatcamEditors/FlatCAMGrbEditor.py:2694 msgid "Mark the polygon areas." msgstr "Markieren Sie die Polygonbereiche." -#: flatcamEditors/FlatCAMGrbEditor.py:2696 +#: flatcamEditors/FlatCAMGrbEditor.py:2702 msgid "Area UPPER threshold" msgstr "Flächenobergrenze" -#: flatcamEditors/FlatCAMGrbEditor.py:2698 +#: flatcamEditors/FlatCAMGrbEditor.py:2704 msgid "" "The threshold value, all areas less than this are marked.\n" "Can have a value between 0.0000 and 9999.9999" @@ -4981,11 +5313,11 @@ msgstr "" "Der Schwellenwert, alle Bereiche, die darunter liegen, sind markiert.\n" "Kann einen Wert zwischen 0,0000 und 9999,9999 haben" -#: flatcamEditors/FlatCAMGrbEditor.py:2705 +#: flatcamEditors/FlatCAMGrbEditor.py:2711 msgid "Area LOWER threshold" msgstr "Bereichsuntergrenze" -#: flatcamEditors/FlatCAMGrbEditor.py:2707 +#: flatcamEditors/FlatCAMGrbEditor.py:2713 msgid "" "The threshold value, all areas more than this are marked.\n" "Can have a value between 0.0000 and 9999.9999" @@ -4994,36 +5326,32 @@ msgstr "" "hinausgehen.\n" "Kann einen Wert zwischen 0,0000 und 9999,9999 haben" -#: flatcamEditors/FlatCAMGrbEditor.py:2721 +#: flatcamEditors/FlatCAMGrbEditor.py:2727 msgid "Mark" msgstr "Kennzeichen" -#: flatcamEditors/FlatCAMGrbEditor.py:2723 +#: flatcamEditors/FlatCAMGrbEditor.py:2729 msgid "Mark the polygons that fit within limits." msgstr "Markieren Sie die Polygone, die in Grenzen passen." -#: flatcamEditors/FlatCAMGrbEditor.py:2729 +#: flatcamEditors/FlatCAMGrbEditor.py:2735 msgid "Delete all the marked polygons." msgstr "Löschen Sie alle markierten Polygone." -#: flatcamEditors/FlatCAMGrbEditor.py:2733 -msgid "Clear" -msgstr "Klären" - -#: flatcamEditors/FlatCAMGrbEditor.py:2735 +#: flatcamEditors/FlatCAMGrbEditor.py:2741 msgid "Clear all the markings." msgstr "Alle Markierungen entfernen." -#: flatcamEditors/FlatCAMGrbEditor.py:2755 flatcamGUI/FlatCAMGUI.py:963 -#: flatcamGUI/FlatCAMGUI.py:2015 flatcamGUI/FlatCAMGUI.py:2532 +#: flatcamEditors/FlatCAMGrbEditor.py:2761 flatcamGUI/FlatCAMGUI.py:1031 +#: flatcamGUI/FlatCAMGUI.py:2123 flatcamGUI/FlatCAMGUI.py:2706 msgid "Add Pad Array" msgstr "Pad-Array hinzufügen" -#: flatcamEditors/FlatCAMGrbEditor.py:2757 +#: flatcamEditors/FlatCAMGrbEditor.py:2763 msgid "Add an array of pads (linear or circular array)" msgstr "Hinzufügen eines Arrays von Pads (lineares oder kreisförmiges Array)" -#: flatcamEditors/FlatCAMGrbEditor.py:2763 +#: flatcamEditors/FlatCAMGrbEditor.py:2769 msgid "" "Select the type of pads array to create.\n" "It can be Linear X(Y) or Circular" @@ -5031,15 +5359,15 @@ msgstr "" "Wählen Sie den zu erstellenden Pad-Array-Typ aus.\n" "Es kann lineares X (Y) oder rund sein" -#: flatcamEditors/FlatCAMGrbEditor.py:2774 flatcamGUI/PreferencesUI.py:2511 +#: flatcamEditors/FlatCAMGrbEditor.py:2780 flatcamGUI/PreferencesUI.py:2691 msgid "Nr of pads" msgstr "Anzahl der Pads" -#: flatcamEditors/FlatCAMGrbEditor.py:2776 flatcamGUI/PreferencesUI.py:2513 +#: flatcamEditors/FlatCAMGrbEditor.py:2782 flatcamGUI/PreferencesUI.py:2693 msgid "Specify how many pads to be in the array." msgstr "Geben Sie an, wie viele Pads sich im Array befinden sollen." -#: flatcamEditors/FlatCAMGrbEditor.py:2825 +#: flatcamEditors/FlatCAMGrbEditor.py:2831 msgid "" "Angle at which the linear array is placed.\n" "The precision is of max 2 decimals.\n" @@ -5051,14 +5379,14 @@ msgstr "" "Der Mindestwert beträgt -359,99 Grad.\n" "Maximalwert ist: 360.00 Grad." -#: flatcamEditors/FlatCAMGrbEditor.py:3307 -#: flatcamEditors/FlatCAMGrbEditor.py:3311 +#: flatcamEditors/FlatCAMGrbEditor.py:3321 +#: flatcamEditors/FlatCAMGrbEditor.py:3325 msgid "Aperture code value is missing or wrong format. Add it and retry." msgstr "" "Blendencodewert fehlt oder falsches Format. Fügen Sie es hinzu und versuchen " "Sie es erneut." -#: flatcamEditors/FlatCAMGrbEditor.py:3347 +#: flatcamEditors/FlatCAMGrbEditor.py:3361 msgid "" "Aperture dimensions value is missing or wrong format. Add it in format " "(width, height) and retry." @@ -5066,191 +5394,191 @@ msgstr "" "Wert für Blendenmaße fehlt oder falsches Format. Fügen Sie es im Format " "(Breite, Höhe) hinzu und versuchen Sie es erneut." -#: flatcamEditors/FlatCAMGrbEditor.py:3360 +#: flatcamEditors/FlatCAMGrbEditor.py:3374 msgid "Aperture size value is missing or wrong format. Add it and retry." msgstr "" "Der Wert für die Blendengröße fehlt oder das Format ist falsch. Fügen Sie es " "hinzu und versuchen Sie es erneut." -#: flatcamEditors/FlatCAMGrbEditor.py:3371 +#: flatcamEditors/FlatCAMGrbEditor.py:3385 msgid "Aperture already in the aperture table." msgstr "Blende bereits in der Blendentabelle." -#: flatcamEditors/FlatCAMGrbEditor.py:3379 +#: flatcamEditors/FlatCAMGrbEditor.py:3393 msgid "Added new aperture with code" msgstr "Neue Blende mit Code hinzugefügt" -#: flatcamEditors/FlatCAMGrbEditor.py:3408 +#: flatcamEditors/FlatCAMGrbEditor.py:3422 msgid " Select an aperture in Aperture Table" msgstr " Wählen Sie in Blende Table eine Blende aus" -#: flatcamEditors/FlatCAMGrbEditor.py:3416 +#: flatcamEditors/FlatCAMGrbEditor.py:3430 msgid "Select an aperture in Aperture Table -->" msgstr "Wählen Sie in Blende Table eine Blende aus -->" -#: flatcamEditors/FlatCAMGrbEditor.py:3439 +#: flatcamEditors/FlatCAMGrbEditor.py:3453 msgid "Deleted aperture with code" msgstr "Blende mit Code gelöscht" -#: flatcamEditors/FlatCAMGrbEditor.py:3924 +#: flatcamEditors/FlatCAMGrbEditor.py:3950 msgid "Loading Gerber into Editor" msgstr "Gerber File wird in den Editor geladen" -#: flatcamEditors/FlatCAMGrbEditor.py:4034 +#: flatcamEditors/FlatCAMGrbEditor.py:4078 msgid "Setting up the UI" msgstr "UI wird initialisiert" -#: flatcamEditors/FlatCAMGrbEditor.py:4035 +#: flatcamEditors/FlatCAMGrbEditor.py:4079 msgid "Adding geometry finished. Preparing the GUI" msgstr "Geometrie wurde hinzugefügt. User Interface wird vorbereitet" -#: flatcamEditors/FlatCAMGrbEditor.py:4044 +#: flatcamEditors/FlatCAMGrbEditor.py:4088 msgid "Finished loading the Gerber object into the editor." msgstr "Gerber-Objekte wurde in den Editor geladen." -#: flatcamEditors/FlatCAMGrbEditor.py:4184 +#: flatcamEditors/FlatCAMGrbEditor.py:4228 msgid "" "There are no Aperture definitions in the file. Aborting Gerber creation." msgstr "" "Die Datei enthält keine Aperture-Definitionen. Abbruch der Gerber-Erstellung." -#: flatcamEditors/FlatCAMGrbEditor.py:4194 +#: flatcamEditors/FlatCAMGrbEditor.py:4238 msgid "Creating Gerber." msgstr "Gerber erstellen." -#: flatcamEditors/FlatCAMGrbEditor.py:4203 +#: flatcamEditors/FlatCAMGrbEditor.py:4247 msgid "Done. Gerber editing finished." msgstr "Erledigt. Gerber-Bearbeitung beendet." -#: flatcamEditors/FlatCAMGrbEditor.py:4222 +#: flatcamEditors/FlatCAMGrbEditor.py:4265 msgid "Cancelled. No aperture is selected" msgstr "Abgebrochen. Es ist keine Blende ausgewählt" -#: flatcamEditors/FlatCAMGrbEditor.py:4782 +#: flatcamEditors/FlatCAMGrbEditor.py:4826 msgid "Failed. No aperture geometry is selected." msgstr "Gescheitert. Es ist keine Aperturgeometrie ausgewählt." -#: flatcamEditors/FlatCAMGrbEditor.py:4791 -#: flatcamEditors/FlatCAMGrbEditor.py:5062 +#: flatcamEditors/FlatCAMGrbEditor.py:4835 +#: flatcamEditors/FlatCAMGrbEditor.py:5106 msgid "Done. Apertures geometry deleted." msgstr "Fertig. Blendengeometrie gelöscht." -#: flatcamEditors/FlatCAMGrbEditor.py:4934 +#: flatcamEditors/FlatCAMGrbEditor.py:4978 msgid "No aperture to buffer. Select at least one aperture and try again." msgstr "" "Keine Blende zum Puffern Wählen Sie mindestens eine Blende und versuchen Sie " "es erneut." -#: flatcamEditors/FlatCAMGrbEditor.py:4946 +#: flatcamEditors/FlatCAMGrbEditor.py:4990 msgid "Failed." msgstr "Gescheitert." -#: flatcamEditors/FlatCAMGrbEditor.py:4965 +#: flatcamEditors/FlatCAMGrbEditor.py:5009 msgid "Scale factor value is missing or wrong format. Add it and retry." msgstr "" "Der Skalierungsfaktor ist nicht vorhanden oder das Format ist falsch. Fügen " "Sie es hinzu und versuchen Sie es erneut." -#: flatcamEditors/FlatCAMGrbEditor.py:4997 +#: flatcamEditors/FlatCAMGrbEditor.py:5041 msgid "No aperture to scale. Select at least one aperture and try again." msgstr "" "Keine zu skalierende Blende Wählen Sie mindestens eine Blende und versuchen " "Sie es erneut." -#: flatcamEditors/FlatCAMGrbEditor.py:5013 +#: flatcamEditors/FlatCAMGrbEditor.py:5057 msgid "Done. Scale Tool completed." msgstr "Erledigt. Skalierungswerkzeug abgeschlossen." -#: flatcamEditors/FlatCAMGrbEditor.py:5051 +#: flatcamEditors/FlatCAMGrbEditor.py:5095 msgid "Polygons marked." msgstr "Polygone markiert." -#: flatcamEditors/FlatCAMGrbEditor.py:5054 +#: flatcamEditors/FlatCAMGrbEditor.py:5098 msgid "No polygons were marked. None fit within the limits." msgstr "Es wurden keine Polygone markiert. Keiner passt in die Grenzen." -#: flatcamEditors/FlatCAMGrbEditor.py:5783 +#: flatcamEditors/FlatCAMGrbEditor.py:5822 msgid "Rotation action was not executed." msgstr "Rotationsaktion wurde nicht ausgeführt." -#: flatcamEditors/FlatCAMGrbEditor.py:5919 +#: flatcamEditors/FlatCAMGrbEditor.py:5950 msgid "Skew action was not executed." msgstr "Die Versatzaktion wurde nicht ausgeführt." -#: flatcamEditors/FlatCAMGrbEditor.py:5986 +#: flatcamEditors/FlatCAMGrbEditor.py:6015 msgid "Scale action was not executed." msgstr "Skalierungsaktion wurde nicht ausgeführt." -#: flatcamEditors/FlatCAMGrbEditor.py:6029 +#: flatcamEditors/FlatCAMGrbEditor.py:6058 msgid "Offset action was not executed." msgstr "Offsetaktion wurde nicht ausgeführt." -#: flatcamEditors/FlatCAMGrbEditor.py:6079 +#: flatcamEditors/FlatCAMGrbEditor.py:6108 msgid "Geometry shape offset Y cancelled" msgstr "Geometrieform-Versatz Y abgebrochen" -#: flatcamEditors/FlatCAMGrbEditor.py:6094 +#: flatcamEditors/FlatCAMGrbEditor.py:6123 msgid "Geometry shape skew X cancelled" msgstr "Geometrieformverzerren X abgebrochen" -#: flatcamEditors/FlatCAMGrbEditor.py:6109 +#: flatcamEditors/FlatCAMGrbEditor.py:6138 msgid "Geometry shape skew Y cancelled" msgstr "Geometrieformverzerren Y abgebrochen" -#: flatcamEditors/FlatCAMTextEditor.py:72 +#: flatcamEditors/FlatCAMTextEditor.py:74 msgid "Print Preview" msgstr "Druckvorschau" -#: flatcamEditors/FlatCAMTextEditor.py:73 +#: flatcamEditors/FlatCAMTextEditor.py:75 msgid "Open a OS standard Preview Print window." msgstr "" "Öffnen Sie ein Standardfenster für die Druckvorschau des Betriebssystems." -#: flatcamEditors/FlatCAMTextEditor.py:76 +#: flatcamEditors/FlatCAMTextEditor.py:78 msgid "Print Code" msgstr "Code drucken" -#: flatcamEditors/FlatCAMTextEditor.py:77 +#: flatcamEditors/FlatCAMTextEditor.py:79 msgid "Open a OS standard Print window." msgstr "Öffnen Sie ein Betriebssystem-Standard-Druckfenster." -#: flatcamEditors/FlatCAMTextEditor.py:79 +#: flatcamEditors/FlatCAMTextEditor.py:81 msgid "Find in Code" msgstr "Im Code suchen" -#: flatcamEditors/FlatCAMTextEditor.py:80 +#: flatcamEditors/FlatCAMTextEditor.py:82 msgid "Will search and highlight in yellow the string in the Find box." msgstr "Sucht und hebt die Zeichenfolge im Feld Suchen gelb hervor." -#: flatcamEditors/FlatCAMTextEditor.py:84 +#: flatcamEditors/FlatCAMTextEditor.py:86 msgid "Find box. Enter here the strings to be searched in the text." msgstr "" "Suchfeld. Geben Sie hier die Zeichenfolgen ein, nach denen im Text gesucht " "werden soll." -#: flatcamEditors/FlatCAMTextEditor.py:86 +#: flatcamEditors/FlatCAMTextEditor.py:88 msgid "Replace With" msgstr "Ersetzen mit" -#: flatcamEditors/FlatCAMTextEditor.py:87 +#: flatcamEditors/FlatCAMTextEditor.py:89 msgid "" "Will replace the string from the Find box with the one in the Replace box." msgstr "" "Ersetzt die Zeichenfolge aus dem Feld Suchen durch die Zeichenfolge aus dem " "Feld Ersetzen." -#: flatcamEditors/FlatCAMTextEditor.py:91 +#: flatcamEditors/FlatCAMTextEditor.py:93 msgid "String to replace the one in the Find box throughout the text." msgstr "" "Zeichenfolge, die die Zeichenfolge im Feld Suchen im gesamten Text ersetzt." -#: flatcamEditors/FlatCAMTextEditor.py:93 flatcamGUI/ObjectUI.py:482 -#: flatcamGUI/ObjectUI.py:1809 flatcamGUI/PreferencesUI.py:2070 -#: flatcamGUI/PreferencesUI.py:4419 flatcamGUI/PreferencesUI.py:5647 +#: flatcamEditors/FlatCAMTextEditor.py:95 flatcamGUI/ObjectUI.py:485 +#: flatcamGUI/ObjectUI.py:2137 flatcamGUI/PreferencesUI.py:2250 +#: flatcamGUI/PreferencesUI.py:4712 msgid "All" msgstr "Alles" -#: flatcamEditors/FlatCAMTextEditor.py:94 +#: flatcamEditors/FlatCAMTextEditor.py:96 msgid "" "When checked it will replace all instances in the 'Find' box\n" "with the text in the 'Replace' box.." @@ -5259,161 +5587,170 @@ msgstr "" "ersetzt\n" "mit dem Text im Feld \"Ersetzen\" .." -#: flatcamEditors/FlatCAMTextEditor.py:97 +#: flatcamEditors/FlatCAMTextEditor.py:99 msgid "Copy All" msgstr "Kopiere alles" -#: flatcamEditors/FlatCAMTextEditor.py:98 +#: flatcamEditors/FlatCAMTextEditor.py:100 msgid "Will copy all the text in the Code Editor to the clipboard." msgstr "Kopiert den gesamten Text im Code-Editor in die Zwischenablage." -#: flatcamEditors/FlatCAMTextEditor.py:101 +#: flatcamEditors/FlatCAMTextEditor.py:103 msgid "Open Code" msgstr "Code öffnen" -#: flatcamEditors/FlatCAMTextEditor.py:102 +#: flatcamEditors/FlatCAMTextEditor.py:104 msgid "Will open a text file in the editor." msgstr "Öffnet eine Textdatei im Editor." -#: flatcamEditors/FlatCAMTextEditor.py:104 +#: flatcamEditors/FlatCAMTextEditor.py:106 msgid "Save Code" msgstr "Code speichern" -#: flatcamEditors/FlatCAMTextEditor.py:105 +#: flatcamEditors/FlatCAMTextEditor.py:107 msgid "Will save the text in the editor into a file." msgstr "Speichert den Text im Editor in einer Datei." -#: flatcamEditors/FlatCAMTextEditor.py:107 +#: flatcamEditors/FlatCAMTextEditor.py:109 msgid "Run Code" msgstr "Code ausführen" -#: flatcamEditors/FlatCAMTextEditor.py:108 +#: flatcamEditors/FlatCAMTextEditor.py:110 msgid "Will run the TCL commands found in the text file, one by one." msgstr "Führt die in der Textdatei enthaltenen TCL-Befehle nacheinander aus." -#: flatcamEditors/FlatCAMTextEditor.py:182 +#: flatcamEditors/FlatCAMTextEditor.py:184 msgid "Open file" msgstr "Datei öffnen" -#: flatcamEditors/FlatCAMTextEditor.py:213 -#: flatcamEditors/FlatCAMTextEditor.py:218 +#: flatcamEditors/FlatCAMTextEditor.py:215 +#: flatcamEditors/FlatCAMTextEditor.py:220 msgid "Export Code ..." msgstr "Code exportieren ..." -#: flatcamEditors/FlatCAMTextEditor.py:221 -msgid "Export Code cancelled." -msgstr "Exportcode abgebrochen." - -#: flatcamEditors/FlatCAMTextEditor.py:332 +#: flatcamEditors/FlatCAMTextEditor.py:334 msgid "Code Editor content copied to clipboard ..." msgstr "Code Editor Inhalt in die Zwischenablage kopiert ..." -#: flatcamGUI/FlatCAMGUI.py:52 flatcamGUI/FlatCAMGUI.py:54 -#: flatcamGUI/FlatCAMGUI.py:2040 +#: flatcamGUI/FlatCAMGUI.py:66 flatcamGUI/FlatCAMGUI.py:68 +#: flatcamGUI/FlatCAMGUI.py:2148 msgid "Toggle Panel" msgstr "Panel umschalten" -#: flatcamGUI/FlatCAMGUI.py:64 +#: flatcamGUI/FlatCAMGUI.py:78 msgid "File" msgstr "Datei" -#: flatcamGUI/FlatCAMGUI.py:69 +#: flatcamGUI/FlatCAMGUI.py:83 msgid "&New Project ...\tCtrl+N" msgstr "&Neues Projekt ...\\STRG+N" -#: flatcamGUI/FlatCAMGUI.py:71 +#: flatcamGUI/FlatCAMGUI.py:85 msgid "Will create a new, blank project" msgstr "Erzeugt ein neues leeres Projekt" -#: flatcamGUI/FlatCAMGUI.py:76 +#: flatcamGUI/FlatCAMGUI.py:90 msgid "&New" msgstr "&Neu" -#: flatcamGUI/FlatCAMGUI.py:80 +#: flatcamGUI/FlatCAMGUI.py:94 msgid "Geometry\tN" msgstr "Geometrie\tN" -#: flatcamGUI/FlatCAMGUI.py:82 +#: flatcamGUI/FlatCAMGUI.py:96 msgid "Will create a new, empty Geometry Object." msgstr "Erzeugt ein neues, leeres Geometrieobjekt." -#: flatcamGUI/FlatCAMGUI.py:84 +#: flatcamGUI/FlatCAMGUI.py:99 msgid "Gerber\tB" msgstr "Gerber\tB" -#: flatcamGUI/FlatCAMGUI.py:86 +#: flatcamGUI/FlatCAMGUI.py:101 msgid "Will create a new, empty Gerber Object." msgstr "Erzeugt ein neues, leeres Gerber-Objekt." -#: flatcamGUI/FlatCAMGUI.py:88 +#: flatcamGUI/FlatCAMGUI.py:104 msgid "Excellon\tL" msgstr "Excellon\tL" -#: flatcamGUI/FlatCAMGUI.py:90 +#: flatcamGUI/FlatCAMGUI.py:106 msgid "Will create a new, empty Excellon Object." msgstr "Erzeugt ein neues, leeres Excellon-Objekt." -#: flatcamGUI/FlatCAMGUI.py:94 +#: flatcamGUI/FlatCAMGUI.py:111 msgid "Document\tD" msgstr "Dokumentieren\tD" -#: flatcamGUI/FlatCAMGUI.py:96 +#: flatcamGUI/FlatCAMGUI.py:113 msgid "Will create a new, empty Document Object." msgstr "Erstellt ein neues, leeres Dokumentobjekt." -#: flatcamGUI/FlatCAMGUI.py:99 flatcamGUI/FlatCAMGUI.py:4111 +#: flatcamGUI/FlatCAMGUI.py:117 flatcamGUI/FlatCAMGUI.py:4327 #: flatcamTools/ToolPcbWizard.py:62 flatcamTools/ToolPcbWizard.py:69 msgid "Open" msgstr "Öffnen" -#: flatcamGUI/FlatCAMGUI.py:103 +#: flatcamGUI/FlatCAMGUI.py:122 msgid "Open &Project ..." msgstr "&Projekt öffnen..." -#: flatcamGUI/FlatCAMGUI.py:109 flatcamGUI/FlatCAMGUI.py:4121 +#: flatcamGUI/FlatCAMGUI.py:128 flatcamGUI/FlatCAMGUI.py:4337 msgid "Open &Gerber ...\tCtrl+G" msgstr "&Gerber öffnen...\\STRG+G" -#: flatcamGUI/FlatCAMGUI.py:114 flatcamGUI/FlatCAMGUI.py:4126 +#: flatcamGUI/FlatCAMGUI.py:133 flatcamGUI/FlatCAMGUI.py:4342 msgid "Open &Excellon ...\tCtrl+E" msgstr "&Excellon öffnen...\\STRG+E" -#: flatcamGUI/FlatCAMGUI.py:118 flatcamGUI/FlatCAMGUI.py:4131 +#: flatcamGUI/FlatCAMGUI.py:138 flatcamGUI/FlatCAMGUI.py:4347 msgid "Open G-&Code ..." msgstr "G-&Code öffnen..." -#: flatcamGUI/FlatCAMGUI.py:124 +#: flatcamGUI/FlatCAMGUI.py:145 msgid "Open Config ..." msgstr "Config öffnen..." -#: flatcamGUI/FlatCAMGUI.py:128 +#: flatcamGUI/FlatCAMGUI.py:150 msgid "Recent projects" msgstr "Letzte Projekte" -#: flatcamGUI/FlatCAMGUI.py:129 +#: flatcamGUI/FlatCAMGUI.py:152 msgid "Recent files" msgstr "Neueste Dateien" -#: flatcamGUI/FlatCAMGUI.py:135 +#: flatcamGUI/FlatCAMGUI.py:155 flatcamGUI/FlatCAMGUI.py:738 +#: flatcamGUI/FlatCAMGUI.py:1324 +msgid "Save" +msgstr "Speichern" + +#: flatcamGUI/FlatCAMGUI.py:159 +msgid "&Save Project ...\tCtrl+S" +msgstr "Projekt speichern ...\\STRG+S" + +#: flatcamGUI/FlatCAMGUI.py:164 +msgid "Save Project &As ...\tCtrl+Shift+S" +msgstr "Projekt speichern als ...\\STRG+Shift+S" + +#: flatcamGUI/FlatCAMGUI.py:179 msgid "Scripting" msgstr "Scripting" -#: flatcamGUI/FlatCAMGUI.py:138 flatcamGUI/FlatCAMGUI.py:829 -#: flatcamGUI/FlatCAMGUI.py:2409 +#: flatcamGUI/FlatCAMGUI.py:183 flatcamGUI/FlatCAMGUI.py:888 +#: flatcamGUI/FlatCAMGUI.py:2567 msgid "New Script ..." msgstr "Neues Skript ..." -#: flatcamGUI/FlatCAMGUI.py:139 flatcamGUI/FlatCAMGUI.py:831 -#: flatcamGUI/FlatCAMGUI.py:2411 +#: flatcamGUI/FlatCAMGUI.py:185 flatcamGUI/FlatCAMGUI.py:890 +#: flatcamGUI/FlatCAMGUI.py:2569 msgid "Open Script ..." msgstr "Skript öffnen ..." -#: flatcamGUI/FlatCAMGUI.py:141 flatcamGUI/FlatCAMGUI.py:833 -#: flatcamGUI/FlatCAMGUI.py:2413 flatcamGUI/FlatCAMGUI.py:4100 +#: flatcamGUI/FlatCAMGUI.py:187 flatcamGUI/FlatCAMGUI.py:892 +#: flatcamGUI/FlatCAMGUI.py:2571 flatcamGUI/FlatCAMGUI.py:4316 msgid "Run Script ..." msgstr "Skript ausführen ..." -#: flatcamGUI/FlatCAMGUI.py:143 flatcamGUI/FlatCAMGUI.py:4102 +#: flatcamGUI/FlatCAMGUI.py:189 flatcamGUI/FlatCAMGUI.py:4318 msgid "" "Will run the opened Tcl Script thus\n" "enabling the automation of certain\n" @@ -5423,47 +5760,47 @@ msgstr "" "Ermöglichung der Automatisierung bestimmter\n" "Funktionen von FlatCAM." -#: flatcamGUI/FlatCAMGUI.py:156 +#: flatcamGUI/FlatCAMGUI.py:203 msgid "Import" msgstr "Importieren" -#: flatcamGUI/FlatCAMGUI.py:158 +#: flatcamGUI/FlatCAMGUI.py:205 msgid "&SVG as Geometry Object ..." msgstr "&SVG als Geometrieobjekt ..." -#: flatcamGUI/FlatCAMGUI.py:161 +#: flatcamGUI/FlatCAMGUI.py:208 msgid "&SVG as Gerber Object ..." msgstr "&SVG als Gerberobjekt ..." -#: flatcamGUI/FlatCAMGUI.py:166 +#: flatcamGUI/FlatCAMGUI.py:213 msgid "&DXF as Geometry Object ..." msgstr "&DXF als Geometrieobjekt ..." -#: flatcamGUI/FlatCAMGUI.py:169 +#: flatcamGUI/FlatCAMGUI.py:216 msgid "&DXF as Gerber Object ..." msgstr "&DXF als Gerberobjekt ..." -#: flatcamGUI/FlatCAMGUI.py:173 +#: flatcamGUI/FlatCAMGUI.py:220 msgid "HPGL2 as Geometry Object ..." msgstr "HPGL2 als Geometrieobjekt ..." -#: flatcamGUI/FlatCAMGUI.py:178 +#: flatcamGUI/FlatCAMGUI.py:226 msgid "Export" msgstr "Exportieren" -#: flatcamGUI/FlatCAMGUI.py:181 +#: flatcamGUI/FlatCAMGUI.py:230 msgid "Export &SVG ..." msgstr "SVG exportieren ..." -#: flatcamGUI/FlatCAMGUI.py:184 +#: flatcamGUI/FlatCAMGUI.py:234 msgid "Export DXF ..." msgstr "DXF exportieren ..." -#: flatcamGUI/FlatCAMGUI.py:189 +#: flatcamGUI/FlatCAMGUI.py:240 msgid "Export &PNG ..." msgstr "PNG exportieren ..." -#: flatcamGUI/FlatCAMGUI.py:191 +#: flatcamGUI/FlatCAMGUI.py:242 msgid "" "Will export an image in PNG format,\n" "the saved image will contain the visual \n" @@ -5473,11 +5810,11 @@ msgstr "" "Das gespeicherte Bild enthält die\n" "Bildinformationen des FlatCAM-Plotbereiches." -#: flatcamGUI/FlatCAMGUI.py:200 +#: flatcamGUI/FlatCAMGUI.py:251 msgid "Export &Excellon ..." msgstr "Excellon exportieren ..." -#: flatcamGUI/FlatCAMGUI.py:202 +#: flatcamGUI/FlatCAMGUI.py:253 msgid "" "Will export an Excellon Object as Excellon file,\n" "the coordinates format, the file units and zeros\n" @@ -5487,11 +5824,11 @@ msgstr "" "Das Koordinatenformat, die Dateieinheiten und Nullen\n" "werden in den Einstellungen -> Excellon Export.Excellon eingestellt ..." -#: flatcamGUI/FlatCAMGUI.py:209 +#: flatcamGUI/FlatCAMGUI.py:260 msgid "Export &Gerber ..." msgstr "Gerber exportieren ..." -#: flatcamGUI/FlatCAMGUI.py:211 +#: flatcamGUI/FlatCAMGUI.py:262 msgid "" "Will export an Gerber Object as Gerber file,\n" "the coordinates format, the file units and zeros\n" @@ -5501,65 +5838,48 @@ msgstr "" "das Koordinatenformat, die Dateieinheiten und Nullen\n" "werden in den Einstellungen -> Gerber Export eingestellt." -#: flatcamGUI/FlatCAMGUI.py:229 +#: flatcamGUI/FlatCAMGUI.py:272 msgid "Backup" msgstr "Sicherungskopie" -#: flatcamGUI/FlatCAMGUI.py:233 +#: flatcamGUI/FlatCAMGUI.py:277 msgid "Import Preferences from file ..." msgstr "Einstellungen aus Datei importieren ..." -#: flatcamGUI/FlatCAMGUI.py:238 +#: flatcamGUI/FlatCAMGUI.py:283 msgid "Export Preferences to file ..." msgstr "Einstellungen in Datei exportieren ..." -#: flatcamGUI/FlatCAMGUI.py:244 flatcamGUI/FlatCAMGUI.py:1614 +#: flatcamGUI/FlatCAMGUI.py:297 flatcamGUI/FlatCAMGUI.py:1715 msgid "Print (PDF)" msgstr "Drucken (PDF)" -#: flatcamGUI/FlatCAMGUI.py:247 flatcamGUI/FlatCAMGUI.py:682 -#: flatcamGUI/FlatCAMGUI.py:1252 -msgid "Save" -msgstr "Speichern" - -#: flatcamGUI/FlatCAMGUI.py:251 -msgid "&Save Project ..." -msgstr "Projekt speichern ..." - -#: flatcamGUI/FlatCAMGUI.py:256 -msgid "Save Project &As ...\tCtrl+S" -msgstr "Projekt speichern als ...\\STRG+S" - -#: flatcamGUI/FlatCAMGUI.py:261 -msgid "Save Project C&opy ..." -msgstr "Projektkopie speichern ..." - -#: flatcamGUI/FlatCAMGUI.py:271 +#: flatcamGUI/FlatCAMGUI.py:305 msgid "E&xit" msgstr "Ausgang" -#: flatcamGUI/FlatCAMGUI.py:279 flatcamGUI/FlatCAMGUI.py:676 -#: flatcamGUI/FlatCAMGUI.py:2163 +#: flatcamGUI/FlatCAMGUI.py:313 flatcamGUI/FlatCAMGUI.py:732 +#: flatcamGUI/FlatCAMGUI.py:2271 msgid "Edit" msgstr "Bearbeiten" -#: flatcamGUI/FlatCAMGUI.py:283 +#: flatcamGUI/FlatCAMGUI.py:317 msgid "Edit Object\tE" msgstr "Objekt bearbeiten\tE" -#: flatcamGUI/FlatCAMGUI.py:285 +#: flatcamGUI/FlatCAMGUI.py:319 msgid "Close Editor\tCtrl+S" msgstr "Schließen Sie Editor\tSTRG+S" -#: flatcamGUI/FlatCAMGUI.py:294 +#: flatcamGUI/FlatCAMGUI.py:328 msgid "Conversion" msgstr "Umwandlung" -#: flatcamGUI/FlatCAMGUI.py:296 +#: flatcamGUI/FlatCAMGUI.py:330 msgid "&Join Geo/Gerber/Exc -> Geo" msgstr "Geo/Gerber/Exc -> Geo zusammenfassen" -#: flatcamGUI/FlatCAMGUI.py:298 +#: flatcamGUI/FlatCAMGUI.py:332 msgid "" "Merge a selection of objects, which can be of type:\n" "- Gerber\n" @@ -5573,31 +5893,31 @@ msgstr "" "- Geometrie\n" "in ein neues Geometrieobjekt kombinieren." -#: flatcamGUI/FlatCAMGUI.py:305 +#: flatcamGUI/FlatCAMGUI.py:339 msgid "Join Excellon(s) -> Excellon" msgstr "Excellon(s) -> Excellon zusammenfassen" -#: flatcamGUI/FlatCAMGUI.py:307 +#: flatcamGUI/FlatCAMGUI.py:341 msgid "Merge a selection of Excellon objects into a new combo Excellon object." msgstr "" "Fassen Sie eine Auswahl von Excellon-Objekten in einem neuen Excellon-Objekt " "zusammen." -#: flatcamGUI/FlatCAMGUI.py:310 +#: flatcamGUI/FlatCAMGUI.py:344 msgid "Join Gerber(s) -> Gerber" msgstr "Gerber(s) -> Gerber zusammenfassen" -#: flatcamGUI/FlatCAMGUI.py:312 +#: flatcamGUI/FlatCAMGUI.py:346 msgid "Merge a selection of Gerber objects into a new combo Gerber object." msgstr "" "Mischen Sie eine Auswahl von Gerber-Objekten in ein neues Gerber-" "Kombinationsobjekt." -#: flatcamGUI/FlatCAMGUI.py:317 +#: flatcamGUI/FlatCAMGUI.py:351 msgid "Convert Single to MultiGeo" msgstr "Konvertieren Sie Single in MultiGeo" -#: flatcamGUI/FlatCAMGUI.py:319 +#: flatcamGUI/FlatCAMGUI.py:353 msgid "" "Will convert a Geometry object from single_geometry type\n" "to a multi_geometry type." @@ -5605,11 +5925,11 @@ msgstr "" "Konvertiert ein Geometrieobjekt vom Typ single_geometry\n" "zu einem multi_geometry-Typ." -#: flatcamGUI/FlatCAMGUI.py:323 +#: flatcamGUI/FlatCAMGUI.py:357 msgid "Convert Multi to SingleGeo" msgstr "Konvertieren Sie Multi in SingleGeo" -#: flatcamGUI/FlatCAMGUI.py:325 +#: flatcamGUI/FlatCAMGUI.py:359 msgid "" "Will convert a Geometry object from multi_geometry type\n" "to a single_geometry type." @@ -5617,736 +5937,747 @@ msgstr "" "Konvertiert ein Geometrieobjekt vom Typ multi_geometry\n" "zu einem single_geometry-Typ." -#: flatcamGUI/FlatCAMGUI.py:332 +#: flatcamGUI/FlatCAMGUI.py:366 msgid "Convert Any to Geo" msgstr "Konvertieren Sie Any zu Geo" -#: flatcamGUI/FlatCAMGUI.py:335 +#: flatcamGUI/FlatCAMGUI.py:369 msgid "Convert Any to Gerber" msgstr "Konvertieren Sie Any zu Gerber" -#: flatcamGUI/FlatCAMGUI.py:341 +#: flatcamGUI/FlatCAMGUI.py:375 msgid "&Copy\tCtrl+C" msgstr "Kopieren\tSTRG+C" -#: flatcamGUI/FlatCAMGUI.py:346 +#: flatcamGUI/FlatCAMGUI.py:380 msgid "&Delete\tDEL" msgstr "Löschen\tDEL" -#: flatcamGUI/FlatCAMGUI.py:351 +#: flatcamGUI/FlatCAMGUI.py:385 msgid "Se&t Origin\tO" msgstr "Ursprung festlegen\tO" -#: flatcamGUI/FlatCAMGUI.py:353 +#: flatcamGUI/FlatCAMGUI.py:387 +#| msgid "Se&t Origin\tO" +msgid "Move to Origin\tShift+O" +msgstr "Zum Ursprung wechseln\tShift+O" + +#: flatcamGUI/FlatCAMGUI.py:390 msgid "Jump to Location\tJ" msgstr "Zum Ort springen\tJ" -#: flatcamGUI/FlatCAMGUI.py:358 +#: flatcamGUI/FlatCAMGUI.py:392 +msgid "Locate in Object\tShift+J" +msgstr "Suchen Sie im Objekt\tShift+J" + +#: flatcamGUI/FlatCAMGUI.py:397 msgid "Toggle Units\tQ" msgstr "Einheiten umschalten\tQ" -#: flatcamGUI/FlatCAMGUI.py:360 +#: flatcamGUI/FlatCAMGUI.py:399 msgid "&Select All\tCtrl+A" msgstr "Alles auswählen\tSTRG+A" -#: flatcamGUI/FlatCAMGUI.py:365 +#: flatcamGUI/FlatCAMGUI.py:404 msgid "&Preferences\tShift+P" msgstr "Einstellungen\tShift+P" -#: flatcamGUI/FlatCAMGUI.py:371 flatcamTools/ToolProperties.py:153 +#: flatcamGUI/FlatCAMGUI.py:410 flatcamTools/ToolProperties.py:155 msgid "Options" msgstr "Optionen" -#: flatcamGUI/FlatCAMGUI.py:373 +#: flatcamGUI/FlatCAMGUI.py:412 msgid "&Rotate Selection\tShift+(R)" msgstr "Auswahl drehen\tShift+(R)" -#: flatcamGUI/FlatCAMGUI.py:378 +#: flatcamGUI/FlatCAMGUI.py:417 msgid "&Skew on X axis\tShift+X" msgstr "Neigung auf der X-Achse\tShift+X" -#: flatcamGUI/FlatCAMGUI.py:380 +#: flatcamGUI/FlatCAMGUI.py:419 msgid "S&kew on Y axis\tShift+Y" msgstr "Neigung auf der Y-Achse\tShift+Y" -#: flatcamGUI/FlatCAMGUI.py:385 +#: flatcamGUI/FlatCAMGUI.py:424 msgid "Flip on &X axis\tX" msgstr "X-Achse kippen\tX" -#: flatcamGUI/FlatCAMGUI.py:387 +#: flatcamGUI/FlatCAMGUI.py:426 msgid "Flip on &Y axis\tY" msgstr "Y-Achse kippen\tY" -#: flatcamGUI/FlatCAMGUI.py:392 +#: flatcamGUI/FlatCAMGUI.py:431 msgid "View source\tAlt+S" msgstr "Quelltext anzeigen\tAlt+S" -#: flatcamGUI/FlatCAMGUI.py:394 +#: flatcamGUI/FlatCAMGUI.py:433 msgid "Tools DataBase\tCtrl+D" msgstr "Werkzeugdatenbank\tSTRG+D" -#: flatcamGUI/FlatCAMGUI.py:401 flatcamGUI/FlatCAMGUI.py:2060 +#: flatcamGUI/FlatCAMGUI.py:440 flatcamGUI/FlatCAMGUI.py:2168 msgid "View" msgstr "Aussicht" -#: flatcamGUI/FlatCAMGUI.py:403 +#: flatcamGUI/FlatCAMGUI.py:442 msgid "Enable all plots\tAlt+1" msgstr "Alle Diagramme aktivieren\tAlt+1" -#: flatcamGUI/FlatCAMGUI.py:405 +#: flatcamGUI/FlatCAMGUI.py:444 msgid "Disable all plots\tAlt+2" msgstr "Alle Diagramme deaktivieren\tAlt+2" -#: flatcamGUI/FlatCAMGUI.py:407 +#: flatcamGUI/FlatCAMGUI.py:446 msgid "Disable non-selected\tAlt+3" msgstr "Nicht ausgewählte Diagramme deaktivieren\tAlt+3" -#: flatcamGUI/FlatCAMGUI.py:411 +#: flatcamGUI/FlatCAMGUI.py:450 msgid "&Zoom Fit\tV" msgstr "Passed zoomen\tV" -#: flatcamGUI/FlatCAMGUI.py:413 +#: flatcamGUI/FlatCAMGUI.py:452 msgid "&Zoom In\t=" msgstr "Hineinzoomen\t=" -#: flatcamGUI/FlatCAMGUI.py:415 +#: flatcamGUI/FlatCAMGUI.py:454 msgid "&Zoom Out\t-" msgstr "Rauszoomen\t-" -#: flatcamGUI/FlatCAMGUI.py:420 +#: flatcamGUI/FlatCAMGUI.py:459 msgid "Redraw All\tF5" msgstr "Alles neu zeichnen\tF5" -#: flatcamGUI/FlatCAMGUI.py:424 +#: flatcamGUI/FlatCAMGUI.py:463 msgid "Toggle Code Editor\tShift+E" msgstr "Code-Editor umschalten\tShift+E" -#: flatcamGUI/FlatCAMGUI.py:427 +#: flatcamGUI/FlatCAMGUI.py:466 msgid "&Toggle FullScreen\tAlt+F10" msgstr "FullScreen umschalten\tAlt+F10" -#: flatcamGUI/FlatCAMGUI.py:429 +#: flatcamGUI/FlatCAMGUI.py:468 msgid "&Toggle Plot Area\tCtrl+F10" msgstr "Plotbereich umschalten\tSTRG+F10" -#: flatcamGUI/FlatCAMGUI.py:431 +#: flatcamGUI/FlatCAMGUI.py:470 msgid "&Toggle Project/Sel/Tool\t`" msgstr "Projekt/Auswahl/Werkzeug umschalten\t`" -#: flatcamGUI/FlatCAMGUI.py:435 +#: flatcamGUI/FlatCAMGUI.py:474 msgid "&Toggle Grid Snap\tG" msgstr "Schaltet den Rasterfang ein\tG" -#: flatcamGUI/FlatCAMGUI.py:437 +#: flatcamGUI/FlatCAMGUI.py:476 msgid "&Toggle Grid Lines\tAlt+G" msgstr "Gitterlinien umschalten\tAlt+G" -#: flatcamGUI/FlatCAMGUI.py:439 +#: flatcamGUI/FlatCAMGUI.py:478 msgid "&Toggle Axis\tShift+G" msgstr "Achse umschalten\tShift+G" -#: flatcamGUI/FlatCAMGUI.py:441 +#: flatcamGUI/FlatCAMGUI.py:480 msgid "Toggle Workspace\tShift+W" msgstr "Arbeitsbereich umschalten\tShift+W" -#: flatcamGUI/FlatCAMGUI.py:446 +#: flatcamGUI/FlatCAMGUI.py:485 msgid "Objects" msgstr "Objekte" -#: flatcamGUI/FlatCAMGUI.py:460 +#: flatcamGUI/FlatCAMGUI.py:499 msgid "&Command Line\tS" msgstr "Befehlszeile\tS" -#: flatcamGUI/FlatCAMGUI.py:465 +#: flatcamGUI/FlatCAMGUI.py:504 msgid "Help" msgstr "Hilfe" -#: flatcamGUI/FlatCAMGUI.py:467 +#: flatcamGUI/FlatCAMGUI.py:506 msgid "Online Help\tF1" msgstr "Onlinehilfe\tF1" -#: flatcamGUI/FlatCAMGUI.py:477 +#: flatcamGUI/FlatCAMGUI.py:516 msgid "Report a bug" msgstr "Einen Fehler melden" -#: flatcamGUI/FlatCAMGUI.py:480 +#: flatcamGUI/FlatCAMGUI.py:519 msgid "Excellon Specification" msgstr "Excellon-Spezifikation" -#: flatcamGUI/FlatCAMGUI.py:482 +#: flatcamGUI/FlatCAMGUI.py:521 msgid "Gerber Specification" msgstr "Gerber-Spezifikation" -#: flatcamGUI/FlatCAMGUI.py:487 +#: flatcamGUI/FlatCAMGUI.py:526 msgid "Shortcuts List\tF3" msgstr "Tastenkürzel Liste\tF3" -#: flatcamGUI/FlatCAMGUI.py:489 +#: flatcamGUI/FlatCAMGUI.py:528 msgid "YouTube Channel\tF4" msgstr "Youtube Kanal\tF4" -#: flatcamGUI/FlatCAMGUI.py:500 +#: flatcamGUI/FlatCAMGUI.py:539 msgid "Add Circle\tO" msgstr "Kreis hinzufügen\tO" -#: flatcamGUI/FlatCAMGUI.py:503 +#: flatcamGUI/FlatCAMGUI.py:542 msgid "Add Arc\tA" msgstr "Bogen hinzufügen\tA" -#: flatcamGUI/FlatCAMGUI.py:506 +#: flatcamGUI/FlatCAMGUI.py:545 msgid "Add Rectangle\tR" msgstr "Rechteck hinzufügen\tR" -#: flatcamGUI/FlatCAMGUI.py:509 +#: flatcamGUI/FlatCAMGUI.py:548 msgid "Add Polygon\tN" msgstr "Polygon hinzufügen\tN" -#: flatcamGUI/FlatCAMGUI.py:512 +#: flatcamGUI/FlatCAMGUI.py:551 msgid "Add Path\tP" msgstr "Pfad hinzufügen\tP" -#: flatcamGUI/FlatCAMGUI.py:515 +#: flatcamGUI/FlatCAMGUI.py:554 msgid "Add Text\tT" msgstr "Text hinzufügen\tT" -#: flatcamGUI/FlatCAMGUI.py:518 +#: flatcamGUI/FlatCAMGUI.py:557 msgid "Polygon Union\tU" msgstr "Polygon-Vereinigung\tU" -#: flatcamGUI/FlatCAMGUI.py:520 +#: flatcamGUI/FlatCAMGUI.py:559 msgid "Polygon Intersection\tE" msgstr "Polygonschnitt\tE" -#: flatcamGUI/FlatCAMGUI.py:522 +#: flatcamGUI/FlatCAMGUI.py:561 msgid "Polygon Subtraction\tS" msgstr "Polygon-Subtraktion\tS" -#: flatcamGUI/FlatCAMGUI.py:526 +#: flatcamGUI/FlatCAMGUI.py:565 msgid "Cut Path\tX" msgstr "Pfad ausschneiden\tX" -#: flatcamGUI/FlatCAMGUI.py:529 +#: flatcamGUI/FlatCAMGUI.py:569 msgid "Copy Geom\tC" msgstr "Geometrie kopieren\tC" -#: flatcamGUI/FlatCAMGUI.py:531 +#: flatcamGUI/FlatCAMGUI.py:571 msgid "Delete Shape\tDEL" msgstr "Form löschen\tDEL" -#: flatcamGUI/FlatCAMGUI.py:535 flatcamGUI/FlatCAMGUI.py:622 +#: flatcamGUI/FlatCAMGUI.py:575 flatcamGUI/FlatCAMGUI.py:662 msgid "Move\tM" msgstr "Bewegung\tM" -#: flatcamGUI/FlatCAMGUI.py:537 +#: flatcamGUI/FlatCAMGUI.py:577 msgid "Buffer Tool\tB" msgstr "Pufferwerkzeug\tB" -#: flatcamGUI/FlatCAMGUI.py:540 +#: flatcamGUI/FlatCAMGUI.py:580 msgid "Paint Tool\tI" msgstr "Malenwerkzeug\tI" -#: flatcamGUI/FlatCAMGUI.py:543 +#: flatcamGUI/FlatCAMGUI.py:583 msgid "Transform Tool\tAlt+R" msgstr "Transformationswerkzeug\tAlt+R" -#: flatcamGUI/FlatCAMGUI.py:547 +#: flatcamGUI/FlatCAMGUI.py:587 msgid "Toggle Corner Snap\tK" msgstr "Eckfang umschalten\tK" -#: flatcamGUI/FlatCAMGUI.py:553 +#: flatcamGUI/FlatCAMGUI.py:593 msgid ">Excellon Editor<" msgstr ">Excellon Editor<" -#: flatcamGUI/FlatCAMGUI.py:557 +#: flatcamGUI/FlatCAMGUI.py:597 msgid "Add Drill Array\tA" msgstr "Bohrfeld hinzufügen\tA" -#: flatcamGUI/FlatCAMGUI.py:559 +#: flatcamGUI/FlatCAMGUI.py:599 msgid "Add Drill\tD" msgstr "Bohrer hinzufügen\tD" -#: flatcamGUI/FlatCAMGUI.py:563 +#: flatcamGUI/FlatCAMGUI.py:603 msgid "Add Slot Array\tQ" msgstr "Steckplatz-Array hinzufügen\tQ" -#: flatcamGUI/FlatCAMGUI.py:565 +#: flatcamGUI/FlatCAMGUI.py:605 msgid "Add Slot\tW" msgstr "Slot hinzufügen\tW" -#: flatcamGUI/FlatCAMGUI.py:569 +#: flatcamGUI/FlatCAMGUI.py:609 msgid "Resize Drill(S)\tR" msgstr "Bohrer verkleinern\tR" -#: flatcamGUI/FlatCAMGUI.py:572 flatcamGUI/FlatCAMGUI.py:616 +#: flatcamGUI/FlatCAMGUI.py:612 flatcamGUI/FlatCAMGUI.py:656 msgid "Copy\tC" msgstr "Kopieren\tC" -#: flatcamGUI/FlatCAMGUI.py:574 flatcamGUI/FlatCAMGUI.py:618 +#: flatcamGUI/FlatCAMGUI.py:614 flatcamGUI/FlatCAMGUI.py:658 msgid "Delete\tDEL" msgstr "Löschen\tDEL" -#: flatcamGUI/FlatCAMGUI.py:579 +#: flatcamGUI/FlatCAMGUI.py:619 msgid "Move Drill(s)\tM" msgstr "Bohrer verschieben\tM" -#: flatcamGUI/FlatCAMGUI.py:584 +#: flatcamGUI/FlatCAMGUI.py:624 msgid ">Gerber Editor<" msgstr ">Gerber-Editor<" -#: flatcamGUI/FlatCAMGUI.py:588 +#: flatcamGUI/FlatCAMGUI.py:628 msgid "Add Pad\tP" msgstr "Pad hinzufügen\tP" -#: flatcamGUI/FlatCAMGUI.py:590 +#: flatcamGUI/FlatCAMGUI.py:630 msgid "Add Pad Array\tA" msgstr "Pad-Array hinzufügen\tA" -#: flatcamGUI/FlatCAMGUI.py:592 +#: flatcamGUI/FlatCAMGUI.py:632 msgid "Add Track\tT" msgstr "Track hinzufügen\tA" -#: flatcamGUI/FlatCAMGUI.py:594 +#: flatcamGUI/FlatCAMGUI.py:634 msgid "Add Region\tN" msgstr "Region hinzufügen\tN" -#: flatcamGUI/FlatCAMGUI.py:598 +#: flatcamGUI/FlatCAMGUI.py:638 msgid "Poligonize\tAlt+N" msgstr "Polygonisieren\tAlt+N" -#: flatcamGUI/FlatCAMGUI.py:600 +#: flatcamGUI/FlatCAMGUI.py:640 msgid "Add SemiDisc\tE" msgstr "Halbschibe hinzufügen\tE" -#: flatcamGUI/FlatCAMGUI.py:602 +#: flatcamGUI/FlatCAMGUI.py:642 msgid "Add Disc\tD" msgstr "Schibe hinzufügen\tD" -#: flatcamGUI/FlatCAMGUI.py:604 +#: flatcamGUI/FlatCAMGUI.py:644 msgid "Buffer\tB" msgstr "Puffer\tB" -#: flatcamGUI/FlatCAMGUI.py:606 +#: flatcamGUI/FlatCAMGUI.py:646 msgid "Scale\tS" msgstr "Skalieren\tS" -#: flatcamGUI/FlatCAMGUI.py:608 +#: flatcamGUI/FlatCAMGUI.py:648 msgid "Mark Area\tAlt+A" msgstr "Bereich markieren\tAlt+A" -#: flatcamGUI/FlatCAMGUI.py:610 +#: flatcamGUI/FlatCAMGUI.py:650 msgid "Eraser\tCtrl+E" msgstr "Radiergummi\tSTRG+E" -#: flatcamGUI/FlatCAMGUI.py:612 +#: flatcamGUI/FlatCAMGUI.py:652 msgid "Transform\tAlt+R" msgstr "Transformationswerkzeug\tSTRG+R" -#: flatcamGUI/FlatCAMGUI.py:639 +#: flatcamGUI/FlatCAMGUI.py:679 msgid "Enable Plot" msgstr "Diagramm aktivieren" -#: flatcamGUI/FlatCAMGUI.py:641 +#: flatcamGUI/FlatCAMGUI.py:681 msgid "Disable Plot" msgstr "Diagramm deaktivieren" -#: flatcamGUI/FlatCAMGUI.py:645 +#: flatcamGUI/FlatCAMGUI.py:685 msgid "Set Color" msgstr "Farbsatz" -#: flatcamGUI/FlatCAMGUI.py:648 -msgid "Red" -msgstr "Rote" - -#: flatcamGUI/FlatCAMGUI.py:651 -msgid "Blue" -msgstr "Blau" - -#: flatcamGUI/FlatCAMGUI.py:654 -msgid "Yellow" -msgstr "Gelb" - -#: flatcamGUI/FlatCAMGUI.py:657 -msgid "Green" -msgstr "Grün" - -#: flatcamGUI/FlatCAMGUI.py:660 -msgid "Purple" -msgstr "Lila" - -#: flatcamGUI/FlatCAMGUI.py:663 -msgid "Brown" -msgstr "Braun" - -#: flatcamGUI/FlatCAMGUI.py:666 -msgid "Custom" -msgstr "Maßgeschn." - -#: flatcamGUI/FlatCAMGUI.py:671 +#: flatcamGUI/FlatCAMGUI.py:727 msgid "Generate CNC" msgstr "CNC generieren" -#: flatcamGUI/FlatCAMGUI.py:673 +#: flatcamGUI/FlatCAMGUI.py:729 msgid "View Source" msgstr "Quelltext anzeigen" -#: flatcamGUI/FlatCAMGUI.py:686 flatcamGUI/FlatCAMGUI.py:2172 -#: flatcamTools/ToolProperties.py:30 +#: flatcamGUI/FlatCAMGUI.py:742 flatcamGUI/FlatCAMGUI.py:2280 +#: flatcamTools/ToolProperties.py:31 msgid "Properties" msgstr "Eigenschaften" -#: flatcamGUI/FlatCAMGUI.py:715 +#: flatcamGUI/FlatCAMGUI.py:771 msgid "File Toolbar" msgstr "Dateisymbolleiste" -#: flatcamGUI/FlatCAMGUI.py:719 +#: flatcamGUI/FlatCAMGUI.py:775 msgid "Edit Toolbar" msgstr "Symbolleiste bearbeiten" -#: flatcamGUI/FlatCAMGUI.py:723 +#: flatcamGUI/FlatCAMGUI.py:779 msgid "View Toolbar" msgstr "Symbolleiste anzeigen" -#: flatcamGUI/FlatCAMGUI.py:727 +#: flatcamGUI/FlatCAMGUI.py:783 msgid "Shell Toolbar" msgstr "Shell-Symbolleiste" -#: flatcamGUI/FlatCAMGUI.py:731 +#: flatcamGUI/FlatCAMGUI.py:787 msgid "Tools Toolbar" msgstr "Werkzeugleiste" -#: flatcamGUI/FlatCAMGUI.py:735 +#: flatcamGUI/FlatCAMGUI.py:791 msgid "Excellon Editor Toolbar" msgstr "Excellon Editor-Symbolleiste" -#: flatcamGUI/FlatCAMGUI.py:741 +#: flatcamGUI/FlatCAMGUI.py:797 msgid "Geometry Editor Toolbar" msgstr "Geometrie Editor-Symbolleiste" -#: flatcamGUI/FlatCAMGUI.py:745 +#: flatcamGUI/FlatCAMGUI.py:801 msgid "Gerber Editor Toolbar" msgstr "Gerber Editor-Symbolleiste" -#: flatcamGUI/FlatCAMGUI.py:749 +#: flatcamGUI/FlatCAMGUI.py:805 msgid "Grid Toolbar" msgstr "Raster-Symbolleiste" -#: flatcamGUI/FlatCAMGUI.py:772 flatcamGUI/FlatCAMGUI.py:2357 +#: flatcamGUI/FlatCAMGUI.py:826 flatcamGUI/FlatCAMGUI.py:2509 msgid "Open project" msgstr "Projekt öffnen" -#: flatcamGUI/FlatCAMGUI.py:774 flatcamGUI/FlatCAMGUI.py:2359 +#: flatcamGUI/FlatCAMGUI.py:828 flatcamGUI/FlatCAMGUI.py:2511 msgid "Save project" msgstr "Projekt speichern" -#: flatcamGUI/FlatCAMGUI.py:780 flatcamGUI/FlatCAMGUI.py:2363 +#: flatcamGUI/FlatCAMGUI.py:834 flatcamGUI/FlatCAMGUI.py:2517 msgid "New Blank Geometry" msgstr "Neue Geometrie erstellen" -#: flatcamGUI/FlatCAMGUI.py:782 flatcamGUI/FlatCAMGUI.py:2365 +#: flatcamGUI/FlatCAMGUI.py:836 flatcamGUI/FlatCAMGUI.py:2519 msgid "New Blank Gerber" msgstr "Neues Gerber erstellen" -#: flatcamGUI/FlatCAMGUI.py:784 flatcamGUI/FlatCAMGUI.py:2367 +#: flatcamGUI/FlatCAMGUI.py:838 flatcamGUI/FlatCAMGUI.py:2521 msgid "New Blank Excellon" msgstr "Neuen Excellon erstellen" -#: flatcamGUI/FlatCAMGUI.py:789 flatcamGUI/FlatCAMGUI.py:2373 +#: flatcamGUI/FlatCAMGUI.py:843 flatcamGUI/FlatCAMGUI.py:2527 msgid "Save Object and close the Editor" msgstr "Speichern Sie das Objekt und schließen Sie den Editor" -#: flatcamGUI/FlatCAMGUI.py:796 flatcamGUI/FlatCAMGUI.py:2380 +#: flatcamGUI/FlatCAMGUI.py:850 flatcamGUI/FlatCAMGUI.py:2534 msgid "&Delete" msgstr "&Löschen" -#: flatcamGUI/FlatCAMGUI.py:799 flatcamGUI/FlatCAMGUI.py:1613 -#: flatcamGUI/FlatCAMGUI.py:1812 flatcamGUI/FlatCAMGUI.py:2383 -#: flatcamTools/ToolDistance.py:30 flatcamTools/ToolDistance.py:160 +#: flatcamGUI/FlatCAMGUI.py:853 flatcamGUI/FlatCAMGUI.py:1714 +#: flatcamGUI/FlatCAMGUI.py:1920 flatcamGUI/FlatCAMGUI.py:2537 +#: flatcamTools/ToolDistance.py:35 flatcamTools/ToolDistance.py:195 msgid "Distance Tool" msgstr "Entfernungswerkzeug" -#: flatcamGUI/FlatCAMGUI.py:801 flatcamGUI/FlatCAMGUI.py:2385 +#: flatcamGUI/FlatCAMGUI.py:855 flatcamGUI/FlatCAMGUI.py:2539 msgid "Distance Min Tool" msgstr "Werkzeug für Mindestabstand" -#: flatcamGUI/FlatCAMGUI.py:803 flatcamGUI/FlatCAMGUI.py:1606 -#: flatcamGUI/FlatCAMGUI.py:2387 +#: flatcamGUI/FlatCAMGUI.py:857 flatcamGUI/FlatCAMGUI.py:1707 +#: flatcamGUI/FlatCAMGUI.py:2541 msgid "Set Origin" msgstr "Nullpunkt festlegen" -#: flatcamGUI/FlatCAMGUI.py:805 flatcamGUI/FlatCAMGUI.py:2389 +#: flatcamGUI/FlatCAMGUI.py:859 +msgid "Move to Origin" +msgstr "Zum Ursprung wechseln" + +#: flatcamGUI/FlatCAMGUI.py:862 flatcamGUI/FlatCAMGUI.py:2543 msgid "Jump to Location" msgstr "Zur Position springen\tJ" -#: flatcamGUI/FlatCAMGUI.py:811 flatcamGUI/FlatCAMGUI.py:2393 +#: flatcamGUI/FlatCAMGUI.py:864 flatcamGUI/FlatCAMGUI.py:1719 +#: flatcamGUI/FlatCAMGUI.py:2545 +msgid "Locate in Object" +msgstr "Suchen Sie im Objekt" + +#: flatcamGUI/FlatCAMGUI.py:870 flatcamGUI/FlatCAMGUI.py:2551 msgid "&Replot" msgstr "Neuzeichnen &R" -#: flatcamGUI/FlatCAMGUI.py:813 flatcamGUI/FlatCAMGUI.py:2395 +#: flatcamGUI/FlatCAMGUI.py:872 flatcamGUI/FlatCAMGUI.py:2553 msgid "&Clear plot" msgstr "Darstellung löschen &C" -#: flatcamGUI/FlatCAMGUI.py:815 flatcamGUI/FlatCAMGUI.py:1609 -#: flatcamGUI/FlatCAMGUI.py:2397 +#: flatcamGUI/FlatCAMGUI.py:874 flatcamGUI/FlatCAMGUI.py:1710 +#: flatcamGUI/FlatCAMGUI.py:2555 msgid "Zoom In" msgstr "Hineinzoomen" -#: flatcamGUI/FlatCAMGUI.py:817 flatcamGUI/FlatCAMGUI.py:1609 -#: flatcamGUI/FlatCAMGUI.py:2399 +#: flatcamGUI/FlatCAMGUI.py:876 flatcamGUI/FlatCAMGUI.py:1710 +#: flatcamGUI/FlatCAMGUI.py:2557 msgid "Zoom Out" msgstr "Rauszoomen" -#: flatcamGUI/FlatCAMGUI.py:819 flatcamGUI/FlatCAMGUI.py:1608 -#: flatcamGUI/FlatCAMGUI.py:2062 flatcamGUI/FlatCAMGUI.py:2401 +#: flatcamGUI/FlatCAMGUI.py:878 flatcamGUI/FlatCAMGUI.py:1709 +#: flatcamGUI/FlatCAMGUI.py:2170 flatcamGUI/FlatCAMGUI.py:2559 msgid "Zoom Fit" msgstr "Passend zoomen" -#: flatcamGUI/FlatCAMGUI.py:827 flatcamGUI/FlatCAMGUI.py:2407 +#: flatcamGUI/FlatCAMGUI.py:886 flatcamGUI/FlatCAMGUI.py:2565 msgid "&Command Line" msgstr "Befehlszeile" -#: flatcamGUI/FlatCAMGUI.py:839 flatcamGUI/FlatCAMGUI.py:2417 +#: flatcamGUI/FlatCAMGUI.py:898 flatcamGUI/FlatCAMGUI.py:2577 msgid "2Sided Tool" msgstr "2Seitiges Werkzeug" -#: flatcamGUI/FlatCAMGUI.py:841 flatcamGUI/ObjectUI.py:588 -#: flatcamTools/ToolCutOut.py:436 +#: flatcamGUI/FlatCAMGUI.py:900 flatcamGUI/FlatCAMGUI.py:1725 +#: flatcamGUI/FlatCAMGUI.py:2579 +msgid "Align Objects Tool" +msgstr "Werkzeug \"Objekte ausrichten\"" + +#: flatcamGUI/FlatCAMGUI.py:902 flatcamGUI/FlatCAMGUI.py:1726 +#: flatcamGUI/FlatCAMGUI.py:2581 flatcamTools/ToolExtractDrills.py:393 +msgid "Extract Drills Tool" +msgstr "Bohrer Extrahieren Werkzeug" + +#: flatcamGUI/FlatCAMGUI.py:905 flatcamGUI/ObjectUI.py:595 +#: flatcamTools/ToolCutOut.py:447 msgid "Cutout Tool" msgstr "Ausschnittwerkzeug" -#: flatcamGUI/FlatCAMGUI.py:843 flatcamGUI/FlatCAMGUI.py:2421 -#: flatcamGUI/ObjectUI.py:566 flatcamGUI/ObjectUI.py:1749 -#: flatcamTools/ToolNonCopperClear.py:632 +#: flatcamGUI/FlatCAMGUI.py:907 flatcamGUI/FlatCAMGUI.py:2586 +#: flatcamGUI/ObjectUI.py:573 flatcamGUI/ObjectUI.py:2075 +#: flatcamTools/ToolNCC.py:974 msgid "NCC Tool" msgstr "NCC Werkzeug" -#: flatcamGUI/FlatCAMGUI.py:849 flatcamGUI/FlatCAMGUI.py:2427 +#: flatcamGUI/FlatCAMGUI.py:913 flatcamGUI/FlatCAMGUI.py:2592 msgid "Panel Tool" msgstr "Platte Werkzeug" -#: flatcamGUI/FlatCAMGUI.py:851 flatcamGUI/FlatCAMGUI.py:2429 -#: flatcamTools/ToolFilm.py:578 +#: flatcamGUI/FlatCAMGUI.py:915 flatcamGUI/FlatCAMGUI.py:2594 +#: flatcamTools/ToolFilm.py:586 msgid "Film Tool" msgstr "Filmwerkzeug" -#: flatcamGUI/FlatCAMGUI.py:853 flatcamGUI/FlatCAMGUI.py:2432 -#: flatcamTools/ToolSolderPaste.py:547 +#: flatcamGUI/FlatCAMGUI.py:917 flatcamGUI/FlatCAMGUI.py:2596 +#: flatcamTools/ToolSolderPaste.py:553 msgid "SolderPaste Tool" msgstr "Lötpaste-Werkzeug" -#: flatcamGUI/FlatCAMGUI.py:855 flatcamGUI/FlatCAMGUI.py:2434 +#: flatcamGUI/FlatCAMGUI.py:919 flatcamGUI/FlatCAMGUI.py:2598 #: flatcamTools/ToolSub.py:35 msgid "Subtract Tool" msgstr "Subtraktionswerkzeug" -#: flatcamGUI/FlatCAMGUI.py:857 flatcamTools/ToolRulesCheck.py:607 +#: flatcamGUI/FlatCAMGUI.py:921 flatcamGUI/FlatCAMGUI.py:2600 +#: flatcamTools/ToolRulesCheck.py:616 msgid "Rules Tool" msgstr "Regelwerkzeug" -#: flatcamGUI/FlatCAMGUI.py:859 flatcamGUI/FlatCAMGUI.py:1624 -#: flatcamTools/ToolOptimal.py:34 flatcamTools/ToolOptimal.py:310 +#: flatcamGUI/FlatCAMGUI.py:923 flatcamGUI/FlatCAMGUI.py:1728 +#: flatcamGUI/FlatCAMGUI.py:2602 flatcamTools/ToolOptimal.py:34 +#: flatcamTools/ToolOptimal.py:308 msgid "Optimal Tool" msgstr "Optimierungswerkzeug" -#: flatcamGUI/FlatCAMGUI.py:864 flatcamGUI/FlatCAMGUI.py:1622 -#: flatcamGUI/FlatCAMGUI.py:2439 +#: flatcamGUI/FlatCAMGUI.py:928 flatcamGUI/FlatCAMGUI.py:1725 +#: flatcamGUI/FlatCAMGUI.py:2607 msgid "Calculators Tool" msgstr "Rechnerwerkzeug" -#: flatcamGUI/FlatCAMGUI.py:868 flatcamGUI/FlatCAMGUI.py:1625 -#: flatcamGUI/FlatCAMGUI.py:2443 flatcamTools/ToolQRCode.py:43 +#: flatcamGUI/FlatCAMGUI.py:932 flatcamGUI/FlatCAMGUI.py:1729 +#: flatcamGUI/FlatCAMGUI.py:2611 flatcamTools/ToolQRCode.py:43 #: flatcamTools/ToolQRCode.py:382 msgid "QRCode Tool" msgstr "QRCode Werkzeug" # Really don't know -#: flatcamGUI/FlatCAMGUI.py:870 flatcamGUI/FlatCAMGUI.py:2445 -#: flatcamTools/ToolCopperThieving.py:40 flatcamTools/ToolCopperThieving.py:566 +#: flatcamGUI/FlatCAMGUI.py:934 flatcamGUI/FlatCAMGUI.py:2613 +#: flatcamTools/ToolCopperThieving.py:40 flatcamTools/ToolCopperThieving.py:569 msgid "Copper Thieving Tool" msgstr "Copper Thieving Werkzeug" # Really don't know -#: flatcamGUI/FlatCAMGUI.py:873 flatcamGUI/FlatCAMGUI.py:1622 -#: flatcamGUI/FlatCAMGUI.py:2448 flatcamTools/ToolFiducials.py:33 -#: flatcamTools/ToolFiducials.py:393 +#: flatcamGUI/FlatCAMGUI.py:937 flatcamGUI/FlatCAMGUI.py:1726 +#: flatcamGUI/FlatCAMGUI.py:2616 flatcamTools/ToolFiducials.py:33 +#: flatcamTools/ToolFiducials.py:395 msgid "Fiducials Tool" msgstr "Passermarken-Tool" -#: flatcamGUI/FlatCAMGUI.py:875 flatcamGUI/FlatCAMGUI.py:2450 -#: flatcamTools/ToolCalibration.py:37 flatcamTools/ToolCalibration.py:762 +#: flatcamGUI/FlatCAMGUI.py:939 flatcamGUI/FlatCAMGUI.py:2618 +#: flatcamTools/ToolCalibration.py:37 flatcamTools/ToolCalibration.py:759 msgid "Calibration Tool" msgstr "Kalibierungswerkzeug" -#: flatcamGUI/FlatCAMGUI.py:881 flatcamGUI/FlatCAMGUI.py:907 -#: flatcamGUI/FlatCAMGUI.py:959 flatcamGUI/FlatCAMGUI.py:2454 -#: flatcamGUI/FlatCAMGUI.py:2528 +#: flatcamGUI/FlatCAMGUI.py:941 flatcamGUI/FlatCAMGUI.py:1726 +msgid "Punch Gerber Tool" +msgstr "Stanzen Sie das Gerber-Werkzeug" + +#: flatcamGUI/FlatCAMGUI.py:943 flatcamTools/ToolInvertGerber.py:31 +msgid "Invert Gerber Tool" +msgstr "Invertieren Sie das Gerber-Werkzeug" + +#: flatcamGUI/FlatCAMGUI.py:949 flatcamGUI/FlatCAMGUI.py:975 +#: flatcamGUI/FlatCAMGUI.py:1027 flatcamGUI/FlatCAMGUI.py:2624 +#: flatcamGUI/FlatCAMGUI.py:2702 msgid "Select" msgstr "Wählen" -#: flatcamGUI/FlatCAMGUI.py:883 flatcamGUI/FlatCAMGUI.py:2456 +#: flatcamGUI/FlatCAMGUI.py:951 flatcamGUI/FlatCAMGUI.py:2626 msgid "Add Drill Hole" msgstr "Bohrloch hinzufügen" -#: flatcamGUI/FlatCAMGUI.py:885 flatcamGUI/FlatCAMGUI.py:2458 +#: flatcamGUI/FlatCAMGUI.py:953 flatcamGUI/FlatCAMGUI.py:2628 msgid "Add Drill Hole Array" msgstr "Bohrlochfeld hinzufügen" -#: flatcamGUI/FlatCAMGUI.py:887 flatcamGUI/FlatCAMGUI.py:1897 -#: flatcamGUI/FlatCAMGUI.py:2150 flatcamGUI/FlatCAMGUI.py:2462 +#: flatcamGUI/FlatCAMGUI.py:955 flatcamGUI/FlatCAMGUI.py:2005 +#: flatcamGUI/FlatCAMGUI.py:2258 flatcamGUI/FlatCAMGUI.py:2632 msgid "Add Slot" msgstr "Steckplatz hinzufügen" -#: flatcamGUI/FlatCAMGUI.py:889 flatcamGUI/FlatCAMGUI.py:1896 -#: flatcamGUI/FlatCAMGUI.py:2152 flatcamGUI/FlatCAMGUI.py:2464 +#: flatcamGUI/FlatCAMGUI.py:957 flatcamGUI/FlatCAMGUI.py:2004 +#: flatcamGUI/FlatCAMGUI.py:2260 flatcamGUI/FlatCAMGUI.py:2634 msgid "Add Slot Array" msgstr "Steckplatz-Array hinzufügen" -#: flatcamGUI/FlatCAMGUI.py:891 flatcamGUI/FlatCAMGUI.py:2155 -#: flatcamGUI/FlatCAMGUI.py:2460 +#: flatcamGUI/FlatCAMGUI.py:959 flatcamGUI/FlatCAMGUI.py:2263 +#: flatcamGUI/FlatCAMGUI.py:2630 msgid "Resize Drill" msgstr "Bohrergröße ändern" -#: flatcamGUI/FlatCAMGUI.py:895 flatcamGUI/FlatCAMGUI.py:2468 +#: flatcamGUI/FlatCAMGUI.py:963 flatcamGUI/FlatCAMGUI.py:2638 msgid "Copy Drill" msgstr "Bohrer kopieren" -#: flatcamGUI/FlatCAMGUI.py:897 flatcamGUI/FlatCAMGUI.py:2470 +#: flatcamGUI/FlatCAMGUI.py:965 flatcamGUI/FlatCAMGUI.py:2640 msgid "Delete Drill" msgstr "Bohrer löschen" -#: flatcamGUI/FlatCAMGUI.py:901 flatcamGUI/FlatCAMGUI.py:2474 +#: flatcamGUI/FlatCAMGUI.py:969 flatcamGUI/FlatCAMGUI.py:2644 msgid "Move Drill" msgstr "Bohrer bewegen" -#: flatcamGUI/FlatCAMGUI.py:909 flatcamGUI/FlatCAMGUI.py:2480 +#: flatcamGUI/FlatCAMGUI.py:977 flatcamGUI/FlatCAMGUI.py:2652 msgid "Add Circle" msgstr "Kreis hinzufügen" -#: flatcamGUI/FlatCAMGUI.py:911 flatcamGUI/FlatCAMGUI.py:2482 +#: flatcamGUI/FlatCAMGUI.py:979 flatcamGUI/FlatCAMGUI.py:2654 msgid "Add Arc" msgstr "Bogen hinzufügen" -#: flatcamGUI/FlatCAMGUI.py:913 flatcamGUI/FlatCAMGUI.py:2484 +#: flatcamGUI/FlatCAMGUI.py:981 flatcamGUI/FlatCAMGUI.py:2656 msgid "Add Rectangle" msgstr "Rechteck hinzufügen" -#: flatcamGUI/FlatCAMGUI.py:917 flatcamGUI/FlatCAMGUI.py:2488 +#: flatcamGUI/FlatCAMGUI.py:985 flatcamGUI/FlatCAMGUI.py:2660 msgid "Add Path" msgstr "Pfad hinzufügen" -#: flatcamGUI/FlatCAMGUI.py:919 flatcamGUI/FlatCAMGUI.py:2490 +#: flatcamGUI/FlatCAMGUI.py:987 flatcamGUI/FlatCAMGUI.py:2662 msgid "Add Polygon" msgstr "Polygon hinzufügen" -#: flatcamGUI/FlatCAMGUI.py:922 flatcamGUI/FlatCAMGUI.py:2493 +#: flatcamGUI/FlatCAMGUI.py:990 flatcamGUI/FlatCAMGUI.py:2665 msgid "Add Text" msgstr "Text hinzufügen" -#: flatcamGUI/FlatCAMGUI.py:924 flatcamGUI/FlatCAMGUI.py:2495 +#: flatcamGUI/FlatCAMGUI.py:992 flatcamGUI/FlatCAMGUI.py:2667 msgid "Add Buffer" msgstr "Puffer hinzufügen" -#: flatcamGUI/FlatCAMGUI.py:926 flatcamGUI/FlatCAMGUI.py:2497 +#: flatcamGUI/FlatCAMGUI.py:994 flatcamGUI/FlatCAMGUI.py:2669 msgid "Paint Shape" msgstr "Malen Form" -#: flatcamGUI/FlatCAMGUI.py:928 flatcamGUI/FlatCAMGUI.py:985 -#: flatcamGUI/FlatCAMGUI.py:2091 flatcamGUI/FlatCAMGUI.py:2136 -#: flatcamGUI/FlatCAMGUI.py:2499 flatcamGUI/FlatCAMGUI.py:2553 +#: flatcamGUI/FlatCAMGUI.py:996 flatcamGUI/FlatCAMGUI.py:1053 +#: flatcamGUI/FlatCAMGUI.py:2199 flatcamGUI/FlatCAMGUI.py:2244 +#: flatcamGUI/FlatCAMGUI.py:2671 flatcamGUI/FlatCAMGUI.py:2727 msgid "Eraser" msgstr "Radiergummi" -#: flatcamGUI/FlatCAMGUI.py:932 flatcamGUI/FlatCAMGUI.py:2503 +#: flatcamGUI/FlatCAMGUI.py:1000 flatcamGUI/FlatCAMGUI.py:2675 msgid "Polygon Union" msgstr "Polygon-Vereinigung" -#: flatcamGUI/FlatCAMGUI.py:934 flatcamGUI/FlatCAMGUI.py:2505 +#: flatcamGUI/FlatCAMGUI.py:1002 flatcamGUI/FlatCAMGUI.py:2677 msgid "Polygon Explode" msgstr "Polygon explodieren" -#: flatcamGUI/FlatCAMGUI.py:937 flatcamGUI/FlatCAMGUI.py:2508 +#: flatcamGUI/FlatCAMGUI.py:1005 flatcamGUI/FlatCAMGUI.py:2680 msgid "Polygon Intersection" msgstr "Polygonschnitt" -#: flatcamGUI/FlatCAMGUI.py:939 flatcamGUI/FlatCAMGUI.py:2510 +#: flatcamGUI/FlatCAMGUI.py:1007 flatcamGUI/FlatCAMGUI.py:2682 msgid "Polygon Subtraction" msgstr "Polygon-Subtraktion" -#: flatcamGUI/FlatCAMGUI.py:943 flatcamGUI/FlatCAMGUI.py:2514 +#: flatcamGUI/FlatCAMGUI.py:1011 flatcamGUI/FlatCAMGUI.py:2686 msgid "Cut Path" msgstr "Pfad ausschneiden" -#: flatcamGUI/FlatCAMGUI.py:945 +#: flatcamGUI/FlatCAMGUI.py:1013 msgid "Copy Shape(s)" msgstr "Form kopieren" -#: flatcamGUI/FlatCAMGUI.py:948 +#: flatcamGUI/FlatCAMGUI.py:1016 msgid "Delete Shape '-'" msgstr "Form löschen" -#: flatcamGUI/FlatCAMGUI.py:950 flatcamGUI/FlatCAMGUI.py:993 -#: flatcamGUI/FlatCAMGUI.py:2103 flatcamGUI/FlatCAMGUI.py:2140 -#: flatcamGUI/FlatCAMGUI.py:2520 flatcamGUI/FlatCAMGUI.py:2561 +#: flatcamGUI/FlatCAMGUI.py:1018 flatcamGUI/FlatCAMGUI.py:1061 +#: flatcamGUI/FlatCAMGUI.py:2211 flatcamGUI/FlatCAMGUI.py:2248 +#: flatcamGUI/FlatCAMGUI.py:2692 flatcamGUI/FlatCAMGUI.py:2735 +#: flatcamGUI/ObjectUI.py:108 msgid "Transformations" msgstr "Transformationen" -#: flatcamGUI/FlatCAMGUI.py:953 +#: flatcamGUI/FlatCAMGUI.py:1021 msgid "Move Objects " msgstr "Objekte verschieben " -#: flatcamGUI/FlatCAMGUI.py:961 flatcamGUI/FlatCAMGUI.py:2016 -#: flatcamGUI/FlatCAMGUI.py:2530 +#: flatcamGUI/FlatCAMGUI.py:1029 flatcamGUI/FlatCAMGUI.py:2124 +#: flatcamGUI/FlatCAMGUI.py:2704 msgid "Add Pad" msgstr "Pad hinzufügen" -#: flatcamGUI/FlatCAMGUI.py:965 flatcamGUI/FlatCAMGUI.py:2017 -#: flatcamGUI/FlatCAMGUI.py:2534 +#: flatcamGUI/FlatCAMGUI.py:1033 flatcamGUI/FlatCAMGUI.py:2125 +#: flatcamGUI/FlatCAMGUI.py:2708 msgid "Add Track" msgstr "Track hinzufügen" -#: flatcamGUI/FlatCAMGUI.py:967 flatcamGUI/FlatCAMGUI.py:2016 -#: flatcamGUI/FlatCAMGUI.py:2536 +#: flatcamGUI/FlatCAMGUI.py:1035 flatcamGUI/FlatCAMGUI.py:2124 +#: flatcamGUI/FlatCAMGUI.py:2710 msgid "Add Region" msgstr "Region hinzufügen" -#: flatcamGUI/FlatCAMGUI.py:969 flatcamGUI/FlatCAMGUI.py:2122 -#: flatcamGUI/FlatCAMGUI.py:2538 +#: flatcamGUI/FlatCAMGUI.py:1037 flatcamGUI/FlatCAMGUI.py:2230 +#: flatcamGUI/FlatCAMGUI.py:2712 msgid "Poligonize" msgstr "Polygonisieren" -#: flatcamGUI/FlatCAMGUI.py:972 flatcamGUI/FlatCAMGUI.py:2124 -#: flatcamGUI/FlatCAMGUI.py:2541 +#: flatcamGUI/FlatCAMGUI.py:1040 flatcamGUI/FlatCAMGUI.py:2232 +#: flatcamGUI/FlatCAMGUI.py:2715 msgid "SemiDisc" msgstr "Halbscheibe" -#: flatcamGUI/FlatCAMGUI.py:974 flatcamGUI/FlatCAMGUI.py:2126 -#: flatcamGUI/FlatCAMGUI.py:2543 +#: flatcamGUI/FlatCAMGUI.py:1042 flatcamGUI/FlatCAMGUI.py:2234 +#: flatcamGUI/FlatCAMGUI.py:2717 msgid "Disc" msgstr "Scheibe" -#: flatcamGUI/FlatCAMGUI.py:982 flatcamGUI/FlatCAMGUI.py:2134 -#: flatcamGUI/FlatCAMGUI.py:2551 +#: flatcamGUI/FlatCAMGUI.py:1050 flatcamGUI/FlatCAMGUI.py:2242 +#: flatcamGUI/FlatCAMGUI.py:2725 msgid "Mark Area" msgstr "Bereich markieren" -#: flatcamGUI/FlatCAMGUI.py:996 flatcamGUI/FlatCAMGUI.py:2016 -#: flatcamGUI/FlatCAMGUI.py:2107 flatcamGUI/FlatCAMGUI.py:2170 -#: flatcamGUI/FlatCAMGUI.py:2564 flatcamTools/ToolMove.py:28 +#: flatcamGUI/FlatCAMGUI.py:1064 flatcamGUI/FlatCAMGUI.py:2124 +#: flatcamGUI/FlatCAMGUI.py:2215 flatcamGUI/FlatCAMGUI.py:2278 +#: flatcamGUI/FlatCAMGUI.py:2738 flatcamTools/ToolMove.py:28 msgid "Move" msgstr "Bewegung" -#: flatcamGUI/FlatCAMGUI.py:1004 flatcamGUI/FlatCAMGUI.py:2571 +#: flatcamGUI/FlatCAMGUI.py:1072 flatcamGUI/FlatCAMGUI.py:2747 msgid "Snap to grid" msgstr "Am Raster ausrichten" -#: flatcamGUI/FlatCAMGUI.py:1007 flatcamGUI/FlatCAMGUI.py:2574 +#: flatcamGUI/FlatCAMGUI.py:1075 flatcamGUI/FlatCAMGUI.py:2750 msgid "Grid X snapping distance" msgstr "Raster X Fangdistanz" -#: flatcamGUI/FlatCAMGUI.py:1012 flatcamGUI/FlatCAMGUI.py:2579 +#: flatcamGUI/FlatCAMGUI.py:1080 flatcamGUI/FlatCAMGUI.py:2755 msgid "Grid Y snapping distance" msgstr "Raster Y Fangdistanz" -#: flatcamGUI/FlatCAMGUI.py:1018 flatcamGUI/FlatCAMGUI.py:2585 +#: flatcamGUI/FlatCAMGUI.py:1086 flatcamGUI/FlatCAMGUI.py:2761 msgid "" "When active, value on Grid_X\n" "is copied to the Grid_Y value." @@ -6354,63 +6685,64 @@ msgstr "" "Wenn aktiv, Wert auf Grid_X\n" "wird in den Wert von Grid_Y kopiert." -#: flatcamGUI/FlatCAMGUI.py:1025 flatcamGUI/FlatCAMGUI.py:2592 +#: flatcamGUI/FlatCAMGUI.py:1093 flatcamGUI/FlatCAMGUI.py:2768 msgid "Snap to corner" msgstr "In der Ecke ausrichten" -#: flatcamGUI/FlatCAMGUI.py:1029 flatcamGUI/FlatCAMGUI.py:2596 -#: flatcamGUI/PreferencesUI.py:984 +#: flatcamGUI/FlatCAMGUI.py:1097 flatcamGUI/FlatCAMGUI.py:2772 +#: flatcamGUI/PreferencesUI.py:1159 msgid "Max. magnet distance" msgstr "Max. Magnetabstand" -#: flatcamGUI/FlatCAMGUI.py:1063 +#: flatcamGUI/FlatCAMGUI.py:1134 msgid "Selected" msgstr "Ausgewählt" -#: flatcamGUI/FlatCAMGUI.py:1090 flatcamGUI/FlatCAMGUI.py:1098 +#: flatcamGUI/FlatCAMGUI.py:1162 flatcamGUI/FlatCAMGUI.py:1170 msgid "Plot Area" msgstr "Grundstücksfläche" -#: flatcamGUI/FlatCAMGUI.py:1125 +#: flatcamGUI/FlatCAMGUI.py:1197 msgid "General" msgstr "Allgemeines" -#: flatcamGUI/FlatCAMGUI.py:1140 flatcamTools/ToolCopperThieving.py:74 -#: flatcamTools/ToolDblSided.py:59 flatcamTools/ToolOptimal.py:71 -#: flatcamTools/ToolQRCode.py:77 +#: flatcamGUI/FlatCAMGUI.py:1212 flatcamTools/ToolCopperThieving.py:75 +#: flatcamTools/ToolDblSided.py:65 flatcamTools/ToolExtractDrills.py:61 +#: flatcamTools/ToolInvertGerber.py:72 flatcamTools/ToolOptimal.py:72 +#: flatcamTools/ToolPunchGerber.py:64 msgid "GERBER" msgstr "GERBER" -#: flatcamGUI/FlatCAMGUI.py:1150 flatcamTools/ToolDblSided.py:87 +#: flatcamGUI/FlatCAMGUI.py:1222 flatcamTools/ToolDblSided.py:93 msgid "EXCELLON" msgstr "EXCELLON" -#: flatcamGUI/FlatCAMGUI.py:1160 flatcamTools/ToolDblSided.py:115 +#: flatcamGUI/FlatCAMGUI.py:1232 flatcamTools/ToolDblSided.py:121 msgid "GEOMETRY" msgstr "GEOMETRY" -#: flatcamGUI/FlatCAMGUI.py:1170 +#: flatcamGUI/FlatCAMGUI.py:1242 msgid "CNC-JOB" msgstr "CNC-Auftrag" -#: flatcamGUI/FlatCAMGUI.py:1179 flatcamGUI/ObjectUI.py:555 -#: flatcamGUI/ObjectUI.py:1724 +#: flatcamGUI/FlatCAMGUI.py:1251 flatcamGUI/ObjectUI.py:562 +#: flatcamGUI/ObjectUI.py:2050 msgid "TOOLS" msgstr "WERKZEUGE" -#: flatcamGUI/FlatCAMGUI.py:1188 +#: flatcamGUI/FlatCAMGUI.py:1260 msgid "TOOLS 2" msgstr "WERKZEUGE 2" -#: flatcamGUI/FlatCAMGUI.py:1198 +#: flatcamGUI/FlatCAMGUI.py:1270 msgid "UTILITIES" msgstr "NUTZEN" -#: flatcamGUI/FlatCAMGUI.py:1215 flatcamGUI/PreferencesUI.py:2833 +#: flatcamGUI/FlatCAMGUI.py:1287 flatcamGUI/PreferencesUI.py:3015 msgid "Restore Defaults" msgstr "Standard wiederherstellen" -#: flatcamGUI/FlatCAMGUI.py:1218 +#: flatcamGUI/FlatCAMGUI.py:1290 msgid "" "Restore the entire set of default values\n" "to the initial values loaded after first launch." @@ -6418,16 +6750,20 @@ msgstr "" "Stellen Sie den gesamten Satz von Standardwerten wieder her\n" "auf die nach dem ersten Start geladenen Anfangswerte." -#: flatcamGUI/FlatCAMGUI.py:1223 +#: flatcamGUI/FlatCAMGUI.py:1295 msgid "Open Pref Folder" msgstr "Öffnen Sie den Einstellungsordner" -#: flatcamGUI/FlatCAMGUI.py:1226 +#: flatcamGUI/FlatCAMGUI.py:1298 msgid "Open the folder where FlatCAM save the preferences files." msgstr "" "Öffnen Sie den Ordner, in dem FlatCAM die Voreinstellungsdateien speichert." -#: flatcamGUI/FlatCAMGUI.py:1234 +#: flatcamGUI/FlatCAMGUI.py:1302 flatcamGUI/FlatCAMGUI.py:2477 +msgid "Clear GUI Settings" +msgstr "Löschen Sie die GUI-Einstellungen" + +#: flatcamGUI/FlatCAMGUI.py:1306 msgid "" "Clear the GUI settings for FlatCAM,\n" "such as: layout, gui state, style, hdpi support etc." @@ -6435,15 +6771,15 @@ msgstr "" "Löschen Sie die GUI-Einstellungen für FlatCAM.\n" "wie zum Beispiel: Layout, GUI-Status, Stil, HDPI-Unterstützung usw." -#: flatcamGUI/FlatCAMGUI.py:1245 +#: flatcamGUI/FlatCAMGUI.py:1317 msgid "Apply" msgstr "Anwenden" -#: flatcamGUI/FlatCAMGUI.py:1248 +#: flatcamGUI/FlatCAMGUI.py:1320 msgid "Apply the current preferences without saving to a file." msgstr "Anwenden ohne zu speichern." -#: flatcamGUI/FlatCAMGUI.py:1255 +#: flatcamGUI/FlatCAMGUI.py:1327 msgid "" "Save the current settings in the 'current_defaults' file\n" "which is the file storing the working default preferences." @@ -6451,532 +6787,545 @@ msgstr "" "Speichern Sie die aktuellen Einstellungen in der Datei 'current_defaults'\n" "Dies ist die Datei, in der die Arbeitseinstellungen gespeichert sind." -#: flatcamGUI/FlatCAMGUI.py:1263 +#: flatcamGUI/FlatCAMGUI.py:1335 msgid "Will not save the changes and will close the preferences window." msgstr "Einstellungen werden geschlossen ohne die Änderungen zu speichern." -#: flatcamGUI/FlatCAMGUI.py:1603 +#: flatcamGUI/FlatCAMGUI.py:1704 msgid "SHOW SHORTCUT LIST" msgstr "Verknüpfungsliste anzeigen" -#: flatcamGUI/FlatCAMGUI.py:1603 +#: flatcamGUI/FlatCAMGUI.py:1704 msgid "Switch to Project Tab" msgstr "Wechseln Sie zur Registerkarte Projekt" -#: flatcamGUI/FlatCAMGUI.py:1603 +#: flatcamGUI/FlatCAMGUI.py:1704 msgid "Switch to Selected Tab" msgstr "Wechseln Sie zur ausgewählten Registerkarte" -#: flatcamGUI/FlatCAMGUI.py:1604 +#: flatcamGUI/FlatCAMGUI.py:1705 msgid "Switch to Tool Tab" msgstr "Wechseln Sie zur Werkzeugregisterkarte" -#: flatcamGUI/FlatCAMGUI.py:1605 +#: flatcamGUI/FlatCAMGUI.py:1706 msgid "New Gerber" msgstr "Neuer Gerber" -#: flatcamGUI/FlatCAMGUI.py:1605 +#: flatcamGUI/FlatCAMGUI.py:1706 msgid "Edit Object (if selected)" msgstr "Objekt bearbeiten (falls ausgewählt)" -#: flatcamGUI/FlatCAMGUI.py:1605 +#: flatcamGUI/FlatCAMGUI.py:1706 msgid "Jump to Coordinates" msgstr "Springe zu den Koordinaten" -#: flatcamGUI/FlatCAMGUI.py:1606 +#: flatcamGUI/FlatCAMGUI.py:1707 msgid "New Excellon" msgstr "Neuer Excellon" -#: flatcamGUI/FlatCAMGUI.py:1606 +#: flatcamGUI/FlatCAMGUI.py:1707 msgid "Move Obj" msgstr "Objekt verschieben" -#: flatcamGUI/FlatCAMGUI.py:1606 +#: flatcamGUI/FlatCAMGUI.py:1707 msgid "New Geometry" msgstr "Neue Geometrie" -#: flatcamGUI/FlatCAMGUI.py:1606 +#: flatcamGUI/FlatCAMGUI.py:1707 msgid "Change Units" msgstr "Einheiten ändern" -#: flatcamGUI/FlatCAMGUI.py:1607 +#: flatcamGUI/FlatCAMGUI.py:1708 msgid "Open Properties Tool" msgstr "Öffnen Sie das Eigenschaften-Tool" -#: flatcamGUI/FlatCAMGUI.py:1607 +#: flatcamGUI/FlatCAMGUI.py:1708 msgid "Rotate by 90 degree CW" msgstr "Um 90 Grad im Uhrzeigersinn drehen" -#: flatcamGUI/FlatCAMGUI.py:1607 +#: flatcamGUI/FlatCAMGUI.py:1708 msgid "Shell Toggle" msgstr "Shell umschalten" -#: flatcamGUI/FlatCAMGUI.py:1608 +#: flatcamGUI/FlatCAMGUI.py:1709 msgid "" "Add a Tool (when in Geometry Selected Tab or in Tools NCC or Tools Paint)" msgstr "" "Hinzufügen eines Werkzeugs (auf der Registerkarte \"Geometrie ausgewählt\" " "oder unter \"Werkzeuge\", \"NCC\" oder \"Werkzeuge\", \"Malen\")" -#: flatcamGUI/FlatCAMGUI.py:1609 +#: flatcamGUI/FlatCAMGUI.py:1710 msgid "Flip on X_axis" msgstr "Auf X-Achse spiegeln" -#: flatcamGUI/FlatCAMGUI.py:1609 +#: flatcamGUI/FlatCAMGUI.py:1710 msgid "Flip on Y_axis" msgstr "Auf Y-Achse spiegeln" -#: flatcamGUI/FlatCAMGUI.py:1612 +#: flatcamGUI/FlatCAMGUI.py:1713 msgid "Copy Obj" msgstr "Objekt kopieren" -#: flatcamGUI/FlatCAMGUI.py:1612 +#: flatcamGUI/FlatCAMGUI.py:1713 msgid "Open Tools Database" msgstr "Werkzeugdatenbank öffnen" -#: flatcamGUI/FlatCAMGUI.py:1613 +#: flatcamGUI/FlatCAMGUI.py:1714 msgid "Open Excellon File" msgstr "Öffnen Sie die Excellon-Datei" -#: flatcamGUI/FlatCAMGUI.py:1613 +#: flatcamGUI/FlatCAMGUI.py:1714 msgid "Open Gerber File" msgstr "Öffnen Sie die Gerber-Datei" -#: flatcamGUI/FlatCAMGUI.py:1613 +#: flatcamGUI/FlatCAMGUI.py:1714 msgid "New Project" msgstr "Neues Projekt" -#: flatcamGUI/FlatCAMGUI.py:1614 flatcamTools/ToolPDF.py:42 +#: flatcamGUI/FlatCAMGUI.py:1715 flatcamTools/ToolPDF.py:42 msgid "PDF Import Tool" msgstr "PDF-Importwerkzeug" -#: flatcamGUI/FlatCAMGUI.py:1614 -msgid "Save Project As" -msgstr "Projekt speichern als" +#: flatcamGUI/FlatCAMGUI.py:1715 +msgid "Save Project" +msgstr "Projekt speichern" -#: flatcamGUI/FlatCAMGUI.py:1614 +#: flatcamGUI/FlatCAMGUI.py:1715 msgid "Toggle Plot Area" msgstr "Zeichenbereich umschalten0" -#: flatcamGUI/FlatCAMGUI.py:1617 +#: flatcamGUI/FlatCAMGUI.py:1718 msgid "Copy Obj_Name" msgstr "Kopieren Sie den Namen des Objekts" -#: flatcamGUI/FlatCAMGUI.py:1618 +#: flatcamGUI/FlatCAMGUI.py:1719 msgid "Toggle Code Editor" msgstr "Code-Editor umschalten" -#: flatcamGUI/FlatCAMGUI.py:1618 +#: flatcamGUI/FlatCAMGUI.py:1719 msgid "Toggle the axis" msgstr "Achse umschalten" -#: flatcamGUI/FlatCAMGUI.py:1618 flatcamGUI/FlatCAMGUI.py:1810 -#: flatcamGUI/FlatCAMGUI.py:1897 flatcamGUI/FlatCAMGUI.py:2019 +#: flatcamGUI/FlatCAMGUI.py:1719 flatcamGUI/FlatCAMGUI.py:1918 +#: flatcamGUI/FlatCAMGUI.py:2005 flatcamGUI/FlatCAMGUI.py:2127 msgid "Distance Minimum Tool" msgstr "Mindestabstand Werkzeug" -#: flatcamGUI/FlatCAMGUI.py:1618 +#: flatcamGUI/FlatCAMGUI.py:1720 msgid "Open Preferences Window" msgstr "Öffnen Sie das Einstellungsfenster" -#: flatcamGUI/FlatCAMGUI.py:1619 +#: flatcamGUI/FlatCAMGUI.py:1721 msgid "Rotate by 90 degree CCW" msgstr "Um 90 Grad gegen den Uhrzeigersinn drehen" -#: flatcamGUI/FlatCAMGUI.py:1619 +#: flatcamGUI/FlatCAMGUI.py:1721 msgid "Run a Script" msgstr "Führen Sie ein Skript aus" -#: flatcamGUI/FlatCAMGUI.py:1619 +#: flatcamGUI/FlatCAMGUI.py:1721 msgid "Toggle the workspace" msgstr "Arbeitsbereich umschalten" -#: flatcamGUI/FlatCAMGUI.py:1619 +#: flatcamGUI/FlatCAMGUI.py:1721 msgid "Skew on X axis" msgstr "Neigung auf der X-Achse" -#: flatcamGUI/FlatCAMGUI.py:1620 +#: flatcamGUI/FlatCAMGUI.py:1722 msgid "Skew on Y axis" msgstr "Neigung auf der Y-Achse" -#: flatcamGUI/FlatCAMGUI.py:1622 +#: flatcamGUI/FlatCAMGUI.py:1725 msgid "2-Sided PCB Tool" msgstr "2-seitiges PCB Werkzeug" -#: flatcamGUI/FlatCAMGUI.py:1622 +#: flatcamGUI/FlatCAMGUI.py:1725 msgid "Transformations Tool" msgstr "Transformations-Tool" -#: flatcamGUI/FlatCAMGUI.py:1623 +#: flatcamGUI/FlatCAMGUI.py:1727 msgid "Solder Paste Dispensing Tool" msgstr "Lotpasten-Dosierwerkzeug" -#: flatcamGUI/FlatCAMGUI.py:1624 +#: flatcamGUI/FlatCAMGUI.py:1728 msgid "Film PCB Tool" msgstr "Film PCB Werkzeug" -#: flatcamGUI/FlatCAMGUI.py:1624 +#: flatcamGUI/FlatCAMGUI.py:1728 msgid "Non-Copper Clearing Tool" msgstr "Nicht-Kupfer-Räumwerkzeug" -#: flatcamGUI/FlatCAMGUI.py:1625 +#: flatcamGUI/FlatCAMGUI.py:1729 msgid "Paint Area Tool" msgstr "Malbereichswerkzeug" -#: flatcamGUI/FlatCAMGUI.py:1625 +#: flatcamGUI/FlatCAMGUI.py:1729 msgid "Rules Check Tool" msgstr "Regelprüfwerkzeug" -#: flatcamGUI/FlatCAMGUI.py:1626 +#: flatcamGUI/FlatCAMGUI.py:1730 msgid "View File Source" msgstr "Dateiquelle anzeigen" -#: flatcamGUI/FlatCAMGUI.py:1627 +#: flatcamGUI/FlatCAMGUI.py:1731 msgid "Cutout PCB Tool" msgstr "Ausschnitt PCB Tool" -#: flatcamGUI/FlatCAMGUI.py:1627 +#: flatcamGUI/FlatCAMGUI.py:1731 msgid "Enable all Plots" msgstr "Alle Zeichnungen aktivieren" -#: flatcamGUI/FlatCAMGUI.py:1627 +#: flatcamGUI/FlatCAMGUI.py:1731 msgid "Disable all Plots" msgstr "Alle Zeichnungen deaktivieren" -#: flatcamGUI/FlatCAMGUI.py:1627 +#: flatcamGUI/FlatCAMGUI.py:1731 msgid "Disable Non-selected Plots" msgstr "Nicht ausgewählte Zeichnungen deaktiv" -#: flatcamGUI/FlatCAMGUI.py:1628 +#: flatcamGUI/FlatCAMGUI.py:1732 msgid "Toggle Full Screen" msgstr "Vollbild umschalten" -#: flatcamGUI/FlatCAMGUI.py:1631 +#: flatcamGUI/FlatCAMGUI.py:1735 msgid "Abort current task (gracefully)" msgstr "Aktuelle Aufgabe abbrechen (ordnungsgemäß)" -#: flatcamGUI/FlatCAMGUI.py:1634 +#: flatcamGUI/FlatCAMGUI.py:1738 +msgid "Save Project As" +msgstr "Projekt speichern als" + +#: flatcamGUI/FlatCAMGUI.py:1739 +msgid "" +"Paste Special. Will convert a Windows path style to the one required in Tcl " +"Shell" +msgstr "" +"Paste Special. Konvertiert einen Windows-Pfadstil in den in Tcl Shell " +"erforderlichen" + +#: flatcamGUI/FlatCAMGUI.py:1742 msgid "Open Online Manual" msgstr "Online-Handbuch öffnen" -#: flatcamGUI/FlatCAMGUI.py:1635 +#: flatcamGUI/FlatCAMGUI.py:1743 msgid "Open Online Tutorials" msgstr "Öffnen Sie Online-Tutorials" -#: flatcamGUI/FlatCAMGUI.py:1635 +#: flatcamGUI/FlatCAMGUI.py:1743 msgid "Refresh Plots" msgstr "Zeichnungen aktualisieren" -#: flatcamGUI/FlatCAMGUI.py:1635 flatcamTools/ToolSolderPaste.py:503 +#: flatcamGUI/FlatCAMGUI.py:1743 flatcamTools/ToolSolderPaste.py:509 msgid "Delete Object" msgstr "Objekt löschen" -#: flatcamGUI/FlatCAMGUI.py:1635 +#: flatcamGUI/FlatCAMGUI.py:1743 msgid "Alternate: Delete Tool" msgstr "Alternative: Werkzeug löschen" -#: flatcamGUI/FlatCAMGUI.py:1636 +#: flatcamGUI/FlatCAMGUI.py:1744 msgid "(left to Key_1)Toogle Notebook Area (Left Side)" msgstr "(links neben Taste_1) Notebook-Bereich umschalten (linke Seite)" -#: flatcamGUI/FlatCAMGUI.py:1636 +#: flatcamGUI/FlatCAMGUI.py:1744 msgid "En(Dis)able Obj Plot" msgstr "Objektzeichnung (de)aktivieren" -#: flatcamGUI/FlatCAMGUI.py:1637 +#: flatcamGUI/FlatCAMGUI.py:1745 msgid "Deselects all objects" msgstr "Hebt die Auswahl aller Objekte auf" -#: flatcamGUI/FlatCAMGUI.py:1651 +#: flatcamGUI/FlatCAMGUI.py:1759 msgid "Editor Shortcut list" msgstr "Editor-Verknüpfungsliste" -#: flatcamGUI/FlatCAMGUI.py:1805 +#: flatcamGUI/FlatCAMGUI.py:1913 msgid "GEOMETRY EDITOR" msgstr "GEOMETRIE-EDITOR" -#: flatcamGUI/FlatCAMGUI.py:1805 +#: flatcamGUI/FlatCAMGUI.py:1913 msgid "Draw an Arc" msgstr "Zeichnen Sie einen Bogen" -#: flatcamGUI/FlatCAMGUI.py:1805 +#: flatcamGUI/FlatCAMGUI.py:1913 msgid "Copy Geo Item" msgstr "Geo-Objekt kopieren" -#: flatcamGUI/FlatCAMGUI.py:1806 +#: flatcamGUI/FlatCAMGUI.py:1914 msgid "Within Add Arc will toogle the ARC direction: CW or CCW" msgstr "" "Innerhalb von Bogen hinzufügen wird die ARC-Richtung getippt: CW oder CCW" -#: flatcamGUI/FlatCAMGUI.py:1806 +#: flatcamGUI/FlatCAMGUI.py:1914 msgid "Polygon Intersection Tool" msgstr "Werkzeug Polygonschnitt" -#: flatcamGUI/FlatCAMGUI.py:1807 +#: flatcamGUI/FlatCAMGUI.py:1915 msgid "Geo Paint Tool" msgstr "Geo-Malwerkzeug" -#: flatcamGUI/FlatCAMGUI.py:1807 flatcamGUI/FlatCAMGUI.py:1896 -#: flatcamGUI/FlatCAMGUI.py:2016 +#: flatcamGUI/FlatCAMGUI.py:1915 flatcamGUI/FlatCAMGUI.py:2004 +#: flatcamGUI/FlatCAMGUI.py:2124 msgid "Jump to Location (x, y)" msgstr "Zum Standort springen (x, y)" -#: flatcamGUI/FlatCAMGUI.py:1807 +#: flatcamGUI/FlatCAMGUI.py:1915 msgid "Toggle Corner Snap" msgstr "Eckfang umschalten" -#: flatcamGUI/FlatCAMGUI.py:1807 +#: flatcamGUI/FlatCAMGUI.py:1915 msgid "Move Geo Item" msgstr "Geo-Objekt verschieben" -#: flatcamGUI/FlatCAMGUI.py:1808 +#: flatcamGUI/FlatCAMGUI.py:1916 msgid "Within Add Arc will cycle through the ARC modes" msgstr "Innerhalb von Bogen hinzufügen werden die ARC-Modi durchlaufen" -#: flatcamGUI/FlatCAMGUI.py:1808 +#: flatcamGUI/FlatCAMGUI.py:1916 msgid "Draw a Polygon" msgstr "Zeichnen Sie ein Polygon" -#: flatcamGUI/FlatCAMGUI.py:1808 +#: flatcamGUI/FlatCAMGUI.py:1916 msgid "Draw a Circle" msgstr "Zeichne einen Kreis" -#: flatcamGUI/FlatCAMGUI.py:1809 +#: flatcamGUI/FlatCAMGUI.py:1917 msgid "Draw a Path" msgstr "Zeichne einen Pfad" -#: flatcamGUI/FlatCAMGUI.py:1809 +#: flatcamGUI/FlatCAMGUI.py:1917 msgid "Draw Rectangle" msgstr "Rechteck zeichnen" -#: flatcamGUI/FlatCAMGUI.py:1809 +#: flatcamGUI/FlatCAMGUI.py:1917 msgid "Polygon Subtraction Tool" msgstr "Polygon-Subtraktionswerkzeug" -#: flatcamGUI/FlatCAMGUI.py:1809 +#: flatcamGUI/FlatCAMGUI.py:1917 msgid "Add Text Tool" msgstr "Textwerkzeug hinzufügen" -#: flatcamGUI/FlatCAMGUI.py:1810 +#: flatcamGUI/FlatCAMGUI.py:1918 msgid "Polygon Union Tool" msgstr "Polygonverbindungswerkzeug" -#: flatcamGUI/FlatCAMGUI.py:1810 +#: flatcamGUI/FlatCAMGUI.py:1918 msgid "Flip shape on X axis" msgstr "Form auf der X-Achse spiegeln" -#: flatcamGUI/FlatCAMGUI.py:1810 +#: flatcamGUI/FlatCAMGUI.py:1918 msgid "Flip shape on Y axis" msgstr "Form auf der Y-Achse spiegeln" -#: flatcamGUI/FlatCAMGUI.py:1811 +#: flatcamGUI/FlatCAMGUI.py:1919 msgid "Skew shape on X axis" msgstr "Neigung auf der X-Achse" -#: flatcamGUI/FlatCAMGUI.py:1811 +#: flatcamGUI/FlatCAMGUI.py:1919 msgid "Skew shape on Y axis" msgstr "Neigung auf der Y-Achse" -#: flatcamGUI/FlatCAMGUI.py:1811 +#: flatcamGUI/FlatCAMGUI.py:1919 msgid "Editor Transformation Tool" msgstr "Editor-Transformationstool" -#: flatcamGUI/FlatCAMGUI.py:1812 +#: flatcamGUI/FlatCAMGUI.py:1920 msgid "Offset shape on X axis" msgstr "Versetzte Form auf der X-Achse" -#: flatcamGUI/FlatCAMGUI.py:1812 +#: flatcamGUI/FlatCAMGUI.py:1920 msgid "Offset shape on Y axis" msgstr "Versetzte Form auf der Y-Achse" -#: flatcamGUI/FlatCAMGUI.py:1813 flatcamGUI/FlatCAMGUI.py:1899 -#: flatcamGUI/FlatCAMGUI.py:2021 +#: flatcamGUI/FlatCAMGUI.py:1921 flatcamGUI/FlatCAMGUI.py:2007 +#: flatcamGUI/FlatCAMGUI.py:2129 msgid "Save Object and Exit Editor" msgstr "Objekt speichern und Editor beenden" -#: flatcamGUI/FlatCAMGUI.py:1813 +#: flatcamGUI/FlatCAMGUI.py:1921 msgid "Polygon Cut Tool" msgstr "Polygon-Schneidewerkzeug" -#: flatcamGUI/FlatCAMGUI.py:1814 +#: flatcamGUI/FlatCAMGUI.py:1922 msgid "Rotate Geometry" msgstr "Geometrie drehen" -#: flatcamGUI/FlatCAMGUI.py:1814 +#: flatcamGUI/FlatCAMGUI.py:1922 msgid "Finish drawing for certain tools" msgstr "Beenden Sie das Zeichnen für bestimmte Werkzeuge" -#: flatcamGUI/FlatCAMGUI.py:1814 flatcamGUI/FlatCAMGUI.py:1899 -#: flatcamGUI/FlatCAMGUI.py:2019 +#: flatcamGUI/FlatCAMGUI.py:1922 flatcamGUI/FlatCAMGUI.py:2007 +#: flatcamGUI/FlatCAMGUI.py:2127 msgid "Abort and return to Select" msgstr "Abbrechen und zurück zu Auswählen" -#: flatcamGUI/FlatCAMGUI.py:1815 flatcamGUI/FlatCAMGUI.py:2518 +#: flatcamGUI/FlatCAMGUI.py:1923 flatcamGUI/FlatCAMGUI.py:2690 msgid "Delete Shape" msgstr "Form löschen" -#: flatcamGUI/FlatCAMGUI.py:1895 +#: flatcamGUI/FlatCAMGUI.py:2003 msgid "EXCELLON EDITOR" msgstr "EXCELLON EDITOR" -#: flatcamGUI/FlatCAMGUI.py:1895 +#: flatcamGUI/FlatCAMGUI.py:2003 msgid "Copy Drill(s)" msgstr "Bohrer kopieren" -#: flatcamGUI/FlatCAMGUI.py:1895 flatcamGUI/FlatCAMGUI.py:2145 +#: flatcamGUI/FlatCAMGUI.py:2003 flatcamGUI/FlatCAMGUI.py:2253 msgid "Add Drill" msgstr "Bohrer hinzufügen" -#: flatcamGUI/FlatCAMGUI.py:1896 +#: flatcamGUI/FlatCAMGUI.py:2004 msgid "Move Drill(s)" msgstr "Bohrer verschieben" -#: flatcamGUI/FlatCAMGUI.py:1897 +#: flatcamGUI/FlatCAMGUI.py:2005 msgid "Add a new Tool" msgstr "Fügen Sie ein neues Werkzeug hinzu" -#: flatcamGUI/FlatCAMGUI.py:1898 +#: flatcamGUI/FlatCAMGUI.py:2006 msgid "Delete Drill(s)" msgstr "Bohrer löschen" -#: flatcamGUI/FlatCAMGUI.py:1898 +#: flatcamGUI/FlatCAMGUI.py:2006 msgid "Alternate: Delete Tool(s)" msgstr "Alternative: Werkzeug (e) löschen" -#: flatcamGUI/FlatCAMGUI.py:2015 +#: flatcamGUI/FlatCAMGUI.py:2123 msgid "GERBER EDITOR" msgstr "GERBER EDITOR" -#: flatcamGUI/FlatCAMGUI.py:2015 +#: flatcamGUI/FlatCAMGUI.py:2123 msgid "Add Disc" msgstr "Fügen Sie eine Scheiben hinzu" -#: flatcamGUI/FlatCAMGUI.py:2015 +#: flatcamGUI/FlatCAMGUI.py:2123 msgid "Add SemiDisc" msgstr "Halbschibe hinzufügen" -#: flatcamGUI/FlatCAMGUI.py:2017 +#: flatcamGUI/FlatCAMGUI.py:2125 msgid "Within Track & Region Tools will cycle in REVERSE the bend modes" msgstr "" "Innerhalb von Track- und Region-Werkzeugen werden die Biegemodi umgekehrt" -#: flatcamGUI/FlatCAMGUI.py:2018 +#: flatcamGUI/FlatCAMGUI.py:2126 msgid "Within Track & Region Tools will cycle FORWARD the bend modes" msgstr "" "Innerhalb von Track und Region werden mit Tools die Biegemodi vorwärts " "durchlaufen" -#: flatcamGUI/FlatCAMGUI.py:2019 +#: flatcamGUI/FlatCAMGUI.py:2127 msgid "Alternate: Delete Apertures" msgstr "Alternative: Löschen Sie die Blenden" -#: flatcamGUI/FlatCAMGUI.py:2020 +#: flatcamGUI/FlatCAMGUI.py:2128 msgid "Eraser Tool" msgstr "Radiergummi" -#: flatcamGUI/FlatCAMGUI.py:2021 flatcamGUI/PreferencesUI.py:2634 +#: flatcamGUI/FlatCAMGUI.py:2129 flatcamGUI/PreferencesUI.py:2816 msgid "Mark Area Tool" msgstr "Bereich markieren Werkzeug" -#: flatcamGUI/FlatCAMGUI.py:2021 +#: flatcamGUI/FlatCAMGUI.py:2129 msgid "Poligonize Tool" msgstr "Werkzeug Polygonisieren" -#: flatcamGUI/FlatCAMGUI.py:2021 +#: flatcamGUI/FlatCAMGUI.py:2129 msgid "Transformation Tool" msgstr "Transformationswerkzeug" -#: flatcamGUI/FlatCAMGUI.py:2038 +#: flatcamGUI/FlatCAMGUI.py:2146 msgid "Toggle Visibility" msgstr "Sichtbarkeit umschalten" -#: flatcamGUI/FlatCAMGUI.py:2044 +#: flatcamGUI/FlatCAMGUI.py:2152 msgid "New" msgstr "Neu" -#: flatcamGUI/FlatCAMGUI.py:2046 flatcamTools/ToolCalibration.py:634 -msgid "Geometry" -msgstr "Geometrie" - -#: flatcamGUI/FlatCAMGUI.py:2050 flatcamTools/ToolCalibration.py:197 -#: flatcamTools/ToolCalibration.py:634 flatcamTools/ToolFilm.py:359 +#: flatcamGUI/FlatCAMGUI.py:2158 flatcamGUI/PreferencesUI.py:8410 +#: flatcamTools/ToolAlignObjects.py:74 flatcamTools/ToolAlignObjects.py:110 +#: flatcamTools/ToolCalibration.py:197 flatcamTools/ToolCalibration.py:631 +#: flatcamTools/ToolCalibration.py:648 flatcamTools/ToolCalibration.py:807 +#: flatcamTools/ToolCalibration.py:815 flatcamTools/ToolCopperThieving.py:145 +#: flatcamTools/ToolCopperThieving.py:159 +#: flatcamTools/ToolCopperThieving.py:605 flatcamTools/ToolDblSided.py:226 +#: flatcamTools/ToolFilm.py:359 flatcamTools/ToolNCC.py:558 +#: flatcamTools/ToolNCC.py:1295 flatcamTools/ToolPaint.py:502 +#: flatcamTools/ToolPaint.py:706 flatcamTools/ToolPanelize.py:374 +#: flatcamTools/ToolPunchGerber.py:149 flatcamTools/ToolPunchGerber.py:164 msgid "Excellon" msgstr "Excellon" -#: flatcamGUI/FlatCAMGUI.py:2057 +#: flatcamGUI/FlatCAMGUI.py:2165 msgid "Grids" msgstr "Raster" -#: flatcamGUI/FlatCAMGUI.py:2064 +#: flatcamGUI/FlatCAMGUI.py:2172 msgid "Clear Plot" msgstr "Plot klar löschen" -#: flatcamGUI/FlatCAMGUI.py:2066 +#: flatcamGUI/FlatCAMGUI.py:2174 msgid "Replot" msgstr "Replotieren" -#: flatcamGUI/FlatCAMGUI.py:2070 +#: flatcamGUI/FlatCAMGUI.py:2178 msgid "Geo Editor" msgstr "Geo-Editor" -#: flatcamGUI/FlatCAMGUI.py:2072 +#: flatcamGUI/FlatCAMGUI.py:2180 msgid "Path" msgstr "Pfad" -#: flatcamGUI/FlatCAMGUI.py:2074 +#: flatcamGUI/FlatCAMGUI.py:2182 msgid "Rectangle" msgstr "Rechteck" -#: flatcamGUI/FlatCAMGUI.py:2077 +#: flatcamGUI/FlatCAMGUI.py:2185 msgid "Circle" msgstr "Kreis" -#: flatcamGUI/FlatCAMGUI.py:2079 -msgid "Polygon" -msgstr "Polygon" - -#: flatcamGUI/FlatCAMGUI.py:2081 +#: flatcamGUI/FlatCAMGUI.py:2189 msgid "Arc" msgstr "Bogen" -#: flatcamGUI/FlatCAMGUI.py:2095 +#: flatcamGUI/FlatCAMGUI.py:2203 msgid "Union" msgstr "Vereinigung" -#: flatcamGUI/FlatCAMGUI.py:2097 +#: flatcamGUI/FlatCAMGUI.py:2205 msgid "Intersection" msgstr "Überschneidung" -#: flatcamGUI/FlatCAMGUI.py:2099 +#: flatcamGUI/FlatCAMGUI.py:2207 msgid "Subtraction" msgstr "Subtraktion" -#: flatcamGUI/FlatCAMGUI.py:2101 flatcamGUI/ObjectUI.py:1811 -#: flatcamGUI/PreferencesUI.py:4421 +#: flatcamGUI/FlatCAMGUI.py:2209 flatcamGUI/ObjectUI.py:2139 +#: flatcamGUI/PreferencesUI.py:4714 msgid "Cut" msgstr "Schnitt" -#: flatcamGUI/FlatCAMGUI.py:2112 +#: flatcamGUI/FlatCAMGUI.py:2220 msgid "Pad" msgstr "Pad" -#: flatcamGUI/FlatCAMGUI.py:2114 +#: flatcamGUI/FlatCAMGUI.py:2222 msgid "Pad Array" msgstr "Pad-Array" -#: flatcamGUI/FlatCAMGUI.py:2118 +#: flatcamGUI/FlatCAMGUI.py:2226 msgid "Track" msgstr "Track" -#: flatcamGUI/FlatCAMGUI.py:2120 +#: flatcamGUI/FlatCAMGUI.py:2228 msgid "Region" msgstr "Region" -#: flatcamGUI/FlatCAMGUI.py:2143 +#: flatcamGUI/FlatCAMGUI.py:2251 msgid "Exc Editor" msgstr "Exc-Editor" -#: flatcamGUI/FlatCAMGUI.py:2188 +#: flatcamGUI/FlatCAMGUI.py:2296 msgid "" "Relative neasurement.\n" "Reference is last click position" @@ -6984,7 +7333,7 @@ msgstr "" "Relative Messung\n" "Referenz ist Position des letzten Klicks" -#: flatcamGUI/FlatCAMGUI.py:2194 +#: flatcamGUI/FlatCAMGUI.py:2302 msgid "" "Absolute neasurement.\n" "Reference is (X=0, Y= 0) position" @@ -6992,27 +7341,35 @@ msgstr "" "Absolute Messung.\n" "Referenz ist (X = 0, Y = 0)" -#: flatcamGUI/FlatCAMGUI.py:2301 +#: flatcamGUI/FlatCAMGUI.py:2406 msgid "Lock Toolbars" msgstr "Symbolleisten sperren" -#: flatcamGUI/FlatCAMGUI.py:2419 +#: flatcamGUI/FlatCAMGUI.py:2465 +msgid "FlatCAM Preferences Folder opened." +msgstr "FlatCAM-Einstellungsordner geöffnet." + +#: flatcamGUI/FlatCAMGUI.py:2476 +msgid "Are you sure you want to delete the GUI Settings? \n" +msgstr "Möchten Sie die GUI-Einstellungen wirklich löschen?\n" + +#: flatcamGUI/FlatCAMGUI.py:2584 msgid "&Cutout Tool" msgstr "Ausschnittwerkzeug" -#: flatcamGUI/FlatCAMGUI.py:2478 +#: flatcamGUI/FlatCAMGUI.py:2650 msgid "Select 'Esc'" msgstr "Wählen" -#: flatcamGUI/FlatCAMGUI.py:2516 +#: flatcamGUI/FlatCAMGUI.py:2688 msgid "Copy Objects" msgstr "Objekte kopieren" -#: flatcamGUI/FlatCAMGUI.py:2524 +#: flatcamGUI/FlatCAMGUI.py:2696 msgid "Move Objects" msgstr "Objekte verschieben" -#: flatcamGUI/FlatCAMGUI.py:3087 +#: flatcamGUI/FlatCAMGUI.py:3312 msgid "" "Please first select a geometry item to be cutted\n" "then select the geometry item that will be cutted\n" @@ -7024,12 +7381,12 @@ msgstr "" "aus dem ersten Artikel. Zum Schluss drücken Sie die Taste ~ X ~ oder\n" "die Symbolleisten-Schaltfläche." -#: flatcamGUI/FlatCAMGUI.py:3094 flatcamGUI/FlatCAMGUI.py:3254 -#: flatcamGUI/FlatCAMGUI.py:3299 flatcamGUI/FlatCAMGUI.py:3319 +#: flatcamGUI/FlatCAMGUI.py:3319 flatcamGUI/FlatCAMGUI.py:3478 +#: flatcamGUI/FlatCAMGUI.py:3523 flatcamGUI/FlatCAMGUI.py:3543 msgid "Warning" msgstr "Warnung" -#: flatcamGUI/FlatCAMGUI.py:3249 +#: flatcamGUI/FlatCAMGUI.py:3473 msgid "" "Please select geometry items \n" "on which to perform Intersection Tool." @@ -7037,7 +7394,7 @@ msgstr "" "Bitte wählen Sie Geometrieelemente aus\n" "auf dem das Verschneidungswerkzeug ausgeführt werden soll." -#: flatcamGUI/FlatCAMGUI.py:3294 +#: flatcamGUI/FlatCAMGUI.py:3518 msgid "" "Please select geometry items \n" "on which to perform Substraction Tool." @@ -7045,7 +7402,7 @@ msgstr "" "Bitte wählen Sie Geometrieelemente aus\n" "auf dem das Subtraktionswerkzeug ausgeführt werden soll." -#: flatcamGUI/FlatCAMGUI.py:3314 +#: flatcamGUI/FlatCAMGUI.py:3538 msgid "" "Please select geometry items \n" "on which to perform union." @@ -7053,61 +7410,62 @@ msgstr "" "Bitte wählen Sie Geometrieelemente aus\n" "auf dem die Polygonverbindung ausgeführt werden soll." -#: flatcamGUI/FlatCAMGUI.py:3394 flatcamGUI/FlatCAMGUI.py:3608 +#: flatcamGUI/FlatCAMGUI.py:3617 flatcamGUI/FlatCAMGUI.py:3828 msgid "Cancelled. Nothing selected to delete." msgstr "Abgebrochen. Nichts zum Löschen ausgewählt." -#: flatcamGUI/FlatCAMGUI.py:3479 flatcamGUI/FlatCAMGUI.py:3726 +#: flatcamGUI/FlatCAMGUI.py:3701 flatcamGUI/FlatCAMGUI.py:3944 msgid "Cancelled. Nothing selected to copy." msgstr "Abgebrochen. Nichts zum Kopieren ausgewählt." -#: flatcamGUI/FlatCAMGUI.py:3526 flatcamGUI/FlatCAMGUI.py:3756 +#: flatcamGUI/FlatCAMGUI.py:3747 flatcamGUI/FlatCAMGUI.py:3973 msgid "Cancelled. Nothing selected to move." msgstr "Abgebrochen. Nichts ausgewählt, um sich zu bewegen." -#: flatcamGUI/FlatCAMGUI.py:3782 +#: flatcamGUI/FlatCAMGUI.py:3999 msgid "New Tool ..." msgstr "Neues Werkzeug ..." -#: flatcamGUI/FlatCAMGUI.py:3783 flatcamTools/ToolNonCopperClear.py:583 -#: flatcamTools/ToolPaint.py:494 flatcamTools/ToolSolderPaste.py:554 +#: flatcamGUI/FlatCAMGUI.py:4000 flatcamTools/ToolNCC.py:924 +#: flatcamTools/ToolPaint.py:850 flatcamTools/ToolSolderPaste.py:560 msgid "Enter a Tool Diameter" msgstr "Geben Sie einen Werkzeugdurchmesser ein" -#: flatcamGUI/FlatCAMGUI.py:3795 +#: flatcamGUI/FlatCAMGUI.py:4012 msgid "Adding Tool cancelled ..." msgstr "Tool wird hinzugefügt abgebrochen ..." -#: flatcamGUI/FlatCAMGUI.py:3808 +#: flatcamGUI/FlatCAMGUI.py:4025 msgid "Distance Tool exit..." msgstr "Entfernungstool beenden ..." -#: flatcamGUI/FlatCAMGUI.py:4018 flatcamGUI/FlatCAMGUI.py:4025 +#: flatcamGUI/FlatCAMGUI.py:4234 flatcamGUI/FlatCAMGUI.py:4241 msgid "Idle." msgstr "Untätig." -#: flatcamGUI/FlatCAMGUI.py:4056 +#: flatcamGUI/FlatCAMGUI.py:4272 msgid "Application started ..." msgstr "Bewerbung gestartet ..." -#: flatcamGUI/FlatCAMGUI.py:4057 +#: flatcamGUI/FlatCAMGUI.py:4273 msgid "Hello!" msgstr "Hello!" -#: flatcamGUI/FlatCAMGUI.py:4115 +#: flatcamGUI/FlatCAMGUI.py:4331 msgid "Open Project ..." msgstr "Offenes Projekt ..." -#: flatcamGUI/FlatCAMGUI.py:4141 +#: flatcamGUI/FlatCAMGUI.py:4357 msgid "Exit" msgstr "Ausgang" -#: flatcamGUI/GUIElements.py:2261 flatcamGUI/PreferencesUI.py:5265 -#: flatcamGUI/PreferencesUI.py:5825 flatcamTools/ToolFilm.py:219 +#: flatcamGUI/GUIElements.py:2513 flatcamGUI/PreferencesUI.py:6313 +#: flatcamTools/ToolDblSided.py:174 flatcamTools/ToolDblSided.py:389 +#: flatcamTools/ToolFilm.py:219 msgid "Reference" msgstr "Referenz" -#: flatcamGUI/GUIElements.py:2263 +#: flatcamGUI/GUIElements.py:2515 msgid "" "The reference can be:\n" "- Absolute -> the reference point is point (0,0)\n" @@ -7117,19 +7475,19 @@ msgstr "" "- Absolut -> Der Bezugspunkt ist Punkt (0,0)\n" "- Relativ -> Der Referenzpunkt ist die Mausposition vor dem Sprung" -#: flatcamGUI/GUIElements.py:2268 +#: flatcamGUI/GUIElements.py:2520 msgid "Abs" msgstr "Abs" -#: flatcamGUI/GUIElements.py:2269 +#: flatcamGUI/GUIElements.py:2521 msgid "Relative" msgstr "Relativ" -#: flatcamGUI/GUIElements.py:2279 +#: flatcamGUI/GUIElements.py:2531 msgid "Location" msgstr "Ort" -#: flatcamGUI/GUIElements.py:2281 +#: flatcamGUI/GUIElements.py:2533 msgid "" "The Location value is a tuple (x,y).\n" "If the reference is Absolute then the Jump will be at the position (x,y).\n" @@ -7143,6 +7501,10 @@ msgstr "" "(x, y)\n" "vom aktuellen Mausstandort aus." +#: flatcamGUI/GUIElements.py:2573 +msgid "Save Log" +msgstr "Protokoll speichern" + #: flatcamGUI/ObjectUI.py:38 msgid "FlatCAM Object" msgstr "FlatCAM-Objekt" @@ -7165,15 +7527,11 @@ msgstr "" "Bearbeiten -> Einstellungen -> Allgemein und überprüfen Sie:\n" "Optionsfeld \"Anwendungsebene\"." -#: flatcamGUI/ObjectUI.py:105 -msgid "Change the size of the object." -msgstr "Ändern Sie die Größe des Objekts." +#: flatcamGUI/ObjectUI.py:110 +msgid "Geometrical transformations of the current object." +msgstr "Geometrische Transformationen des aktuellen Objekts." -#: flatcamGUI/ObjectUI.py:111 -msgid "Factor" -msgstr "Faktor" - -#: flatcamGUI/ObjectUI.py:113 +#: flatcamGUI/ObjectUI.py:119 msgid "" "Factor by which to multiply\n" "geometric features of this object.\n" @@ -7183,19 +7541,11 @@ msgstr "" "geometrische Merkmale dieses Objekts.\n" "Ausdrücke sind erlaubt. Zum Beispiel: 1 / 25.4" -#: flatcamGUI/ObjectUI.py:123 +#: flatcamGUI/ObjectUI.py:126 msgid "Perform scaling operation." msgstr "Führen Sie die Skalierung durch." -#: flatcamGUI/ObjectUI.py:134 -msgid "Change the position of this object." -msgstr "Ändern Sie die Position dieses Objekts." - -#: flatcamGUI/ObjectUI.py:139 -msgid "Vector" -msgstr "Vektor" - -#: flatcamGUI/ObjectUI.py:141 +#: flatcamGUI/ObjectUI.py:137 msgid "" "Amount by which to move the object\n" "in the x and y axes in (x, y) format.\n" @@ -7205,60 +7555,53 @@ msgstr "" "in der x- und y-Achse im (x, y) -Format.\n" "Ausdrücke sind erlaubt. Zum Beispiel: (1/3.2, 0.5*3)" -#: flatcamGUI/ObjectUI.py:150 +#: flatcamGUI/ObjectUI.py:144 msgid "Perform the offset operation." msgstr "Führen Sie den Versatzvorgang aus." -#: flatcamGUI/ObjectUI.py:167 +#: flatcamGUI/ObjectUI.py:177 msgid "Gerber Object" msgstr "Gerber-Objekt" -#: flatcamGUI/ObjectUI.py:182 flatcamGUI/ObjectUI.py:767 -#: flatcamGUI/ObjectUI.py:1205 flatcamGUI/ObjectUI.py:1905 -#: flatcamGUI/PreferencesUI.py:1783 flatcamGUI/PreferencesUI.py:3849 -#: flatcamGUI/PreferencesUI.py:4406 -msgid "Plot (show) this object." -msgstr "Plotten (zeigen) dieses Objekt." - -#: flatcamGUI/ObjectUI.py:184 flatcamGUI/ObjectUI.py:765 -#: flatcamGUI/PreferencesUI.py:1781 flatcamGUI/PreferencesUI.py:2680 -#: flatcamGUI/PreferencesUI.py:3847 -msgid "Plot" -msgstr "Zeichn" - -#: flatcamGUI/ObjectUI.py:189 flatcamGUI/ObjectUI.py:726 -#: flatcamGUI/ObjectUI.py:1159 flatcamGUI/ObjectUI.py:1795 -#: flatcamGUI/PreferencesUI.py:1760 flatcamGUI/PreferencesUI.py:2674 -#: flatcamGUI/PreferencesUI.py:3843 flatcamGUI/PreferencesUI.py:4395 +#: flatcamGUI/ObjectUI.py:186 flatcamGUI/ObjectUI.py:729 +#: flatcamGUI/ObjectUI.py:1424 flatcamGUI/ObjectUI.py:2123 +#: flatcamGUI/PreferencesUI.py:1940 flatcamGUI/PreferencesUI.py:2856 +#: flatcamGUI/PreferencesUI.py:4121 flatcamGUI/PreferencesUI.py:4688 msgid "Plot Options" msgstr "Diagrammoptionen" -#: flatcamGUI/ObjectUI.py:195 flatcamGUI/ObjectUI.py:727 -#: flatcamGUI/PreferencesUI.py:1767 flatcamGUI/PreferencesUI.py:2686 -#: flatcamGUI/PreferencesUI.py:7222 flatcamTools/ToolCopperThieving.py:190 +#: flatcamGUI/ObjectUI.py:192 flatcamGUI/ObjectUI.py:730 +#: flatcamGUI/PreferencesUI.py:1947 flatcamGUI/PreferencesUI.py:2868 +#: flatcamGUI/PreferencesUI.py:7728 flatcamTools/ToolCopperThieving.py:192 msgid "Solid" msgstr "Solide" -#: flatcamGUI/ObjectUI.py:197 flatcamGUI/PreferencesUI.py:1769 +#: flatcamGUI/ObjectUI.py:194 flatcamGUI/PreferencesUI.py:1949 msgid "Solid color polygons." msgstr "Einfarbige Polygone." -#: flatcamGUI/ObjectUI.py:203 +#: flatcamGUI/ObjectUI.py:200 msgid "Multi-Color" msgstr "M-farbig" -#: flatcamGUI/ObjectUI.py:205 flatcamGUI/PreferencesUI.py:1776 +#: flatcamGUI/ObjectUI.py:202 flatcamGUI/PreferencesUI.py:1956 msgid "Draw polygons in different colors." msgstr "Zeichnen Sie Polygone in verschiedenen Farben." -#: flatcamGUI/ObjectUI.py:213 flatcamGUI/ObjectUI.py:738 -#: flatcamGUI/ObjectUI.py:1165 flatcamGUI/ObjectUI.py:1825 -#: flatcamGUI/ObjectUI.py:2128 flatcamGUI/ObjectUI.py:2194 -#: flatcamTools/ToolCalibration.py:235 flatcamTools/ToolFiducials.py:73 -msgid "Name" -msgstr "Name" +#: flatcamGUI/ObjectUI.py:208 flatcamGUI/ObjectUI.py:768 +#: flatcamGUI/PreferencesUI.py:1961 flatcamGUI/PreferencesUI.py:2862 +#: flatcamGUI/PreferencesUI.py:4125 +msgid "Plot" +msgstr "Zeichn" -#: flatcamGUI/ObjectUI.py:234 +#: flatcamGUI/ObjectUI.py:210 flatcamGUI/ObjectUI.py:770 +#: flatcamGUI/ObjectUI.py:1484 flatcamGUI/ObjectUI.py:2233 +#: flatcamGUI/PreferencesUI.py:1963 flatcamGUI/PreferencesUI.py:4127 +#: flatcamGUI/PreferencesUI.py:4699 +msgid "Plot (show) this object." +msgstr "Plotten (zeigen) dieses Objekt." + +#: flatcamGUI/ObjectUI.py:238 msgid "" "Toggle the display of the Gerber Apertures Table.\n" "When unchecked, it will delete all mark shapes\n" @@ -7269,11 +7612,11 @@ msgstr "" "gelöscht\n" "das sind auf leinwand gezeichnet." -#: flatcamGUI/ObjectUI.py:244 +#: flatcamGUI/ObjectUI.py:248 msgid "Mark All" msgstr "Alles mark" -#: flatcamGUI/ObjectUI.py:246 +#: flatcamGUI/ObjectUI.py:250 msgid "" "When checked it will display all the apertures.\n" "When unchecked, it will delete all mark shapes\n" @@ -7284,15 +7627,15 @@ msgstr "" "gelöscht\n" "das sind auf leinwand gezeichnet." -#: flatcamGUI/ObjectUI.py:274 +#: flatcamGUI/ObjectUI.py:278 msgid "Mark the aperture instances on canvas." msgstr "Markieren Sie die Blendeninstanzen auf der Leinwand." -#: flatcamGUI/ObjectUI.py:286 flatcamGUI/PreferencesUI.py:2014 +#: flatcamGUI/ObjectUI.py:290 flatcamGUI/PreferencesUI.py:2194 msgid "Isolation Routing" msgstr "Isolierungsrouting" -#: flatcamGUI/ObjectUI.py:288 flatcamGUI/PreferencesUI.py:2016 +#: flatcamGUI/ObjectUI.py:292 flatcamGUI/PreferencesUI.py:2196 msgid "" "Create a Geometry object with\n" "toolpaths to cut outside polygons." @@ -7301,7 +7644,7 @@ msgstr "" "Werkzeugwege zum Schneiden von \n" "äußeren Polygonen." -#: flatcamGUI/ObjectUI.py:306 flatcamGUI/PreferencesUI.py:2219 +#: flatcamGUI/ObjectUI.py:310 flatcamGUI/PreferencesUI.py:2399 msgid "" "Choose what tool to use for Gerber isolation:\n" "'Circular' or 'V-shape'.\n" @@ -7314,31 +7657,37 @@ msgstr "" "Wenn die 'V-Form' ausgewählt ist, dann das Werkzeug\n" "Durchmesser hängt von der gewählten Schnitttiefe ab." -#: flatcamGUI/ObjectUI.py:312 +#: flatcamGUI/ObjectUI.py:316 msgid "V-Shape" msgstr "V-Form" -#: flatcamGUI/ObjectUI.py:318 flatcamGUI/ObjectUI.py:1374 -#: flatcamGUI/PreferencesUI.py:2231 flatcamGUI/PreferencesUI.py:5055 -#: flatcamTools/ToolNonCopperClear.py:231 +#: flatcamGUI/ObjectUI.py:322 flatcamGUI/ObjectUI.py:1670 +#: flatcamGUI/PreferencesUI.py:2411 flatcamGUI/PreferencesUI.py:5351 +#: flatcamGUI/PreferencesUI.py:5917 flatcamGUI/PreferencesUI.py:5924 +#: flatcamTools/ToolNCC.py:233 flatcamTools/ToolNCC.py:240 +#: flatcamTools/ToolPaint.py:216 msgid "V-Tip Dia" msgstr "Stichelspitzen-Durchm" -#: flatcamGUI/ObjectUI.py:320 flatcamGUI/ObjectUI.py:1377 -#: flatcamGUI/PreferencesUI.py:2233 flatcamGUI/PreferencesUI.py:5057 -#: flatcamTools/ToolNonCopperClear.py:233 +#: flatcamGUI/ObjectUI.py:324 flatcamGUI/ObjectUI.py:1673 +#: flatcamGUI/PreferencesUI.py:2413 flatcamGUI/PreferencesUI.py:5353 +#: flatcamGUI/PreferencesUI.py:5919 flatcamTools/ToolNCC.py:235 +#: flatcamTools/ToolPaint.py:218 msgid "The tip diameter for V-Shape Tool" msgstr "Der Spitzendurchmesser für das V-Shape-Werkzeug" -#: flatcamGUI/ObjectUI.py:331 flatcamGUI/ObjectUI.py:1389 -#: flatcamGUI/PreferencesUI.py:2244 flatcamGUI/PreferencesUI.py:5067 -#: flatcamTools/ToolNonCopperClear.py:242 +#: flatcamGUI/ObjectUI.py:335 flatcamGUI/ObjectUI.py:1685 +#: flatcamGUI/PreferencesUI.py:2424 flatcamGUI/PreferencesUI.py:5363 +#: flatcamGUI/PreferencesUI.py:5930 flatcamGUI/PreferencesUI.py:5938 +#: flatcamTools/ToolNCC.py:246 flatcamTools/ToolNCC.py:254 +#: flatcamTools/ToolPaint.py:229 msgid "V-Tip Angle" msgstr "Stichel-Winkel" -#: flatcamGUI/ObjectUI.py:333 flatcamGUI/ObjectUI.py:1392 -#: flatcamGUI/PreferencesUI.py:2246 flatcamGUI/PreferencesUI.py:5069 -#: flatcamTools/ToolNonCopperClear.py:244 +#: flatcamGUI/ObjectUI.py:337 flatcamGUI/ObjectUI.py:1688 +#: flatcamGUI/PreferencesUI.py:2426 flatcamGUI/PreferencesUI.py:5365 +#: flatcamGUI/PreferencesUI.py:5932 flatcamTools/ToolNCC.py:248 +#: flatcamTools/ToolPaint.py:231 msgid "" "The tip angle for V-Shape Tool.\n" "In degree." @@ -7346,9 +7695,9 @@ msgstr "" "Der Spitzenwinkel für das Stichel-Werkzeug.\n" "In grad." -#: flatcamGUI/ObjectUI.py:347 flatcamGUI/ObjectUI.py:1408 -#: flatcamGUI/PreferencesUI.py:2259 flatcamGUI/PreferencesUI.py:3963 -#: flatcamGUI/PreferencesUI.py:5330 flatcamTools/ToolCutOut.py:135 +#: flatcamGUI/ObjectUI.py:351 flatcamGUI/ObjectUI.py:1704 +#: flatcamGUI/PreferencesUI.py:2439 flatcamGUI/PreferencesUI.py:4243 +#: flatcamGUI/PreferencesUI.py:5669 flatcamTools/ToolCutOut.py:142 msgid "" "Cutting depth (negative)\n" "below the copper surface." @@ -7356,7 +7705,7 @@ msgstr "" "Schnitttiefe (negativ)\n" "unter der Kupferoberfläche." -#: flatcamGUI/ObjectUI.py:361 +#: flatcamGUI/ObjectUI.py:365 msgid "" "Diameter of the cutting tool.\n" "If you want to have an isolation path\n" @@ -7370,11 +7719,11 @@ msgstr "" "verwenden Sie einen negativen Wert für\n" "dieser Parameter." -#: flatcamGUI/ObjectUI.py:377 flatcamGUI/PreferencesUI.py:2038 +#: flatcamGUI/ObjectUI.py:381 flatcamGUI/PreferencesUI.py:2218 msgid "# Passes" msgstr "Durchgang" -#: flatcamGUI/ObjectUI.py:379 flatcamGUI/PreferencesUI.py:2040 +#: flatcamGUI/ObjectUI.py:383 flatcamGUI/PreferencesUI.py:2220 msgid "" "Width of the isolation gap in\n" "number (integer) of tool widths." @@ -7382,24 +7731,18 @@ msgstr "" "Breite der Isolationslücke in\n" "Anzahl (Ganzzahl) der Werkzeugbreiten." -#: flatcamGUI/ObjectUI.py:389 flatcamGUI/PreferencesUI.py:2050 +#: flatcamGUI/ObjectUI.py:394 flatcamGUI/PreferencesUI.py:2230 msgid "Pass overlap" msgstr "Passüberlappung" -#: flatcamGUI/ObjectUI.py:391 flatcamGUI/PreferencesUI.py:2052 -msgid "How much (fraction) of the tool width to overlap each tool pass." +#: flatcamGUI/ObjectUI.py:396 flatcamGUI/PreferencesUI.py:2232 +msgid "How much (percentage) of the tool width to overlap each tool pass." msgstr "" -"Wie viel (Prozent) der Breite des Werkzeugs\n" -"soll in jeden Werkzeugdurchgang überlappen." +"Wie viel (Prozent) der Werkzeugbreite, um jeden Werkzeugdurchlauf zu " +"überlappen." -#: flatcamGUI/ObjectUI.py:403 flatcamGUI/PreferencesUI.py:2077 -#: flatcamGUI/PreferencesUI.py:4372 flatcamGUI/PreferencesUI.py:5112 -#: flatcamTools/ToolNonCopperClear.py:162 -msgid "Milling Type" -msgstr "Fräsart" - -#: flatcamGUI/ObjectUI.py:405 flatcamGUI/PreferencesUI.py:2079 -#: flatcamGUI/PreferencesUI.py:4374 +#: flatcamGUI/ObjectUI.py:410 flatcamGUI/PreferencesUI.py:2259 +#: flatcamGUI/PreferencesUI.py:4667 msgid "" "Milling type:\n" "- climb / best for precision milling and to reduce tool usage\n" @@ -7410,30 +7753,19 @@ msgstr "" "Werkzeugverbrauchs\n" "- konventionell / nützlich, wenn kein Spielausgleich vorliegt" -#: flatcamGUI/ObjectUI.py:409 flatcamGUI/PreferencesUI.py:2084 -#: flatcamGUI/PreferencesUI.py:4378 flatcamGUI/PreferencesUI.py:5119 -#: flatcamTools/ToolNonCopperClear.py:169 -msgid "Climb" -msgstr "Steigen" - -# Cannot translate without context. -#: flatcamGUI/ObjectUI.py:410 -msgid "Conventional" -msgstr "Konventionell" - -#: flatcamGUI/ObjectUI.py:415 +#: flatcamGUI/ObjectUI.py:420 msgid "Combine" msgstr "Kombinieren" -#: flatcamGUI/ObjectUI.py:417 flatcamGUI/PreferencesUI.py:2091 +#: flatcamGUI/ObjectUI.py:422 flatcamGUI/PreferencesUI.py:2271 msgid "Combine all passes into one object" msgstr "Kombinieren Sie alle Durchgänge in einem Objekt" -#: flatcamGUI/ObjectUI.py:421 flatcamGUI/PreferencesUI.py:2193 +#: flatcamGUI/ObjectUI.py:426 flatcamGUI/PreferencesUI.py:2373 msgid "\"Follow\"" msgstr "\"Folgen\"" -#: flatcamGUI/ObjectUI.py:422 flatcamGUI/PreferencesUI.py:2195 +#: flatcamGUI/ObjectUI.py:427 flatcamGUI/PreferencesUI.py:2375 msgid "" "Generate a 'Follow' geometry.\n" "This means that it will cut through\n" @@ -7443,11 +7775,11 @@ msgstr "" "Dies bedeutet, dass es durchschneiden wird\n" "die Mitte der Spur." -#: flatcamGUI/ObjectUI.py:428 +#: flatcamGUI/ObjectUI.py:433 msgid "Except" msgstr "Außer" -#: flatcamGUI/ObjectUI.py:431 +#: flatcamGUI/ObjectUI.py:436 msgid "" "When the isolation geometry is generated,\n" "by checking this, the area of the object bellow\n" @@ -7457,12 +7789,12 @@ msgstr "" "indem Sie dies markieren, wird der Bereich des Objekts darunter angezeigt\n" "wird von der Isolationsgeometrie abgezogen." -#: flatcamGUI/ObjectUI.py:453 flatcamTools/ToolNonCopperClear.py:82 -#: flatcamTools/ToolPaint.py:85 +#: flatcamGUI/ObjectUI.py:456 flatcamTools/ToolNCC.py:86 +#: flatcamTools/ToolPaint.py:80 msgid "Obj Type" msgstr "Obj-Typ" -#: flatcamGUI/ObjectUI.py:455 +#: flatcamGUI/ObjectUI.py:458 msgid "" "Specify the type of object to be excepted from isolation.\n" "It can be of type: Gerber or Geometry.\n" @@ -7474,22 +7806,22 @@ msgstr "" "Was hier ausgewählt wird, bestimmt die Art\n" "von Objekten, die das Kombinationsfeld \"Objekt\" füllen." -#: flatcamGUI/ObjectUI.py:468 flatcamGUI/PreferencesUI.py:7522 -#: flatcamTools/ToolCalibration.py:186 flatcamTools/ToolNonCopperClear.py:100 -#: flatcamTools/ToolPaint.py:103 flatcamTools/ToolPanelize.py:81 -#: flatcamTools/ToolPanelize.py:94 +#: flatcamGUI/ObjectUI.py:471 flatcamGUI/PreferencesUI.py:8028 +#: flatcamTools/ToolCalibration.py:186 flatcamTools/ToolNCC.py:109 +#: flatcamTools/ToolPaint.py:103 flatcamTools/ToolPanelize.py:100 +#: flatcamTools/ToolQRCode.py:78 msgid "Object" msgstr "Objekt" -#: flatcamGUI/ObjectUI.py:469 +#: flatcamGUI/ObjectUI.py:472 msgid "Object whose area will be removed from isolation geometry." msgstr "Objekt, dessen Bereich aus der Isolationsgeometrie entfernt wird." -#: flatcamGUI/ObjectUI.py:476 flatcamGUI/PreferencesUI.py:2064 +#: flatcamGUI/ObjectUI.py:479 flatcamGUI/PreferencesUI.py:2244 msgid "Scope" msgstr "Wertebereich" -#: flatcamGUI/ObjectUI.py:478 flatcamGUI/PreferencesUI.py:2066 +#: flatcamGUI/ObjectUI.py:481 flatcamGUI/PreferencesUI.py:2246 msgid "" "Isolation scope. Choose what to isolate:\n" "- 'All' -> Isolate all the polygons in the object\n" @@ -7499,17 +7831,18 @@ msgstr "" "- 'Alles' -> Alle Polygone im Objekt isolieren\n" "- ' Auswahl' -> Eine Auswahl der polygone isolieren." -#: flatcamGUI/ObjectUI.py:483 flatcamGUI/PreferencesUI.py:602 -#: flatcamGUI/PreferencesUI.py:2071 flatcamGUI/PreferencesUI.py:5634 -#: flatcamTools/ToolPaint.py:294 +#: flatcamGUI/ObjectUI.py:486 flatcamGUI/PreferencesUI.py:624 +#: flatcamGUI/PreferencesUI.py:2251 flatcamGUI/PreferencesUI.py:5590 +#: flatcamGUI/PreferencesUI.py:6097 flatcamTools/ToolNCC.py:539 +#: flatcamTools/ToolPaint.py:456 msgid "Selection" msgstr "Auswahl" -#: flatcamGUI/ObjectUI.py:491 flatcamGUI/PreferencesUI.py:2272 +#: flatcamGUI/ObjectUI.py:494 flatcamGUI/PreferencesUI.py:2452 msgid "Isolation Type" msgstr "Isolierungsart" -#: flatcamGUI/ObjectUI.py:493 flatcamGUI/PreferencesUI.py:2274 +#: flatcamGUI/ObjectUI.py:496 flatcamGUI/PreferencesUI.py:2454 msgid "" "Choose how the isolation will be executed:\n" "- 'Full' -> complete isolation of polygons\n" @@ -7528,24 +7861,24 @@ msgstr "" "wohingegen \"Int\" Isolation nur möglich ist, wenn es ein Loch \n" "innerhalb des Polygons gibt (also z.B. ein Torus)" -#: flatcamGUI/ObjectUI.py:502 flatcamGUI/PreferencesUI.py:2283 -#: flatcamGUI/PreferencesUI.py:2304 +#: flatcamGUI/ObjectUI.py:505 flatcamGUI/PreferencesUI.py:2463 +#: flatcamGUI/PreferencesUI.py:2484 msgid "Full" msgstr "Voll" -#: flatcamGUI/ObjectUI.py:503 +#: flatcamGUI/ObjectUI.py:506 msgid "Ext" msgstr "Ausserhalb" -#: flatcamGUI/ObjectUI.py:504 +#: flatcamGUI/ObjectUI.py:507 msgid "Int" msgstr "Innerhalb" -#: flatcamGUI/ObjectUI.py:509 +#: flatcamGUI/ObjectUI.py:512 msgid "Generate Isolation Geometry" msgstr "Isolationsgeometrie erzeugen" -#: flatcamGUI/ObjectUI.py:517 +#: flatcamGUI/ObjectUI.py:520 msgid "" "Create a Geometry object with toolpaths to cut \n" "isolation outside, inside or on both sides of the\n" @@ -7567,11 +7900,11 @@ msgstr "" "Verwenden Sie in der Gerber-Funktion ein negatives Werkzeug\n" "Durchmesser oben." -#: flatcamGUI/ObjectUI.py:529 +#: flatcamGUI/ObjectUI.py:532 msgid "Buffer Solid Geometry" msgstr "Festkörpergeometrie puffern" -#: flatcamGUI/ObjectUI.py:531 +#: flatcamGUI/ObjectUI.py:534 msgid "" "This button is shown only when the Gerber file\n" "is loaded without buffering.\n" @@ -7583,11 +7916,11 @@ msgstr "" "Durch Klicken auf diese Schaltfläche wird die gepufferte Geometrie erstellt\n" "für die Isolierung erforderlich." -#: flatcamGUI/ObjectUI.py:559 +#: flatcamGUI/ObjectUI.py:566 msgid "Clear N-copper" msgstr "N-Kupfer löschen" -#: flatcamGUI/ObjectUI.py:561 flatcamGUI/PreferencesUI.py:5019 +#: flatcamGUI/ObjectUI.py:568 flatcamGUI/PreferencesUI.py:5312 msgid "" "Create a Geometry object with\n" "toolpaths to cut all non-copper regions." @@ -7595,8 +7928,8 @@ msgstr "" "Erstellen Sie ein Geometrieobjekt mit\n" "Werkzeugwege, um alle Nicht-Kupfer-Bereiche zu schneiden." -#: flatcamGUI/ObjectUI.py:568 flatcamGUI/ObjectUI.py:1751 -#: flatcamTools/ToolNonCopperClear.py:473 +#: flatcamGUI/ObjectUI.py:575 flatcamGUI/ObjectUI.py:2077 +#: flatcamTools/ToolNCC.py:599 msgid "" "Create the Geometry Object\n" "for non-copper routing." @@ -7604,11 +7937,11 @@ msgstr "" "Erstellen Sie das Geometrieobjekt\n" "für kupferfreies Routing." -#: flatcamGUI/ObjectUI.py:581 +#: flatcamGUI/ObjectUI.py:588 msgid "Board cutout" msgstr "Kartenausschnitt" -#: flatcamGUI/ObjectUI.py:583 flatcamGUI/PreferencesUI.py:5303 +#: flatcamGUI/ObjectUI.py:590 flatcamGUI/PreferencesUI.py:5642 msgid "" "Create toolpaths to cut around\n" "the PCB and separate it from\n" @@ -7618,7 +7951,7 @@ msgstr "" "die PCB und trennen Sie es von\n" "das ursprüngliche Brett." -#: flatcamGUI/ObjectUI.py:590 +#: flatcamGUI/ObjectUI.py:597 msgid "" "Generate the geometry for\n" "the board cutout." @@ -7626,11 +7959,11 @@ msgstr "" "Generieren Sie die Geometrie für\n" "der Brettausschnitt." -#: flatcamGUI/ObjectUI.py:608 flatcamGUI/PreferencesUI.py:2101 +#: flatcamGUI/ObjectUI.py:615 flatcamGUI/PreferencesUI.py:2281 msgid "Non-copper regions" msgstr "Regionen ohne Kupfer" -#: flatcamGUI/ObjectUI.py:610 flatcamGUI/PreferencesUI.py:2103 +#: flatcamGUI/ObjectUI.py:617 flatcamGUI/PreferencesUI.py:2283 msgid "" "Create polygons covering the\n" "areas without copper on the PCB.\n" @@ -7644,12 +7977,12 @@ msgstr "" "Objekt. Kann verwendet werden, um alle zu entfernen\n" "Kupfer aus einer bestimmten Region." -#: flatcamGUI/ObjectUI.py:620 flatcamGUI/ObjectUI.py:661 -#: flatcamGUI/PreferencesUI.py:2115 flatcamGUI/PreferencesUI.py:2148 +#: flatcamGUI/ObjectUI.py:627 flatcamGUI/ObjectUI.py:668 +#: flatcamGUI/PreferencesUI.py:2295 flatcamGUI/PreferencesUI.py:2328 msgid "Boundary Margin" msgstr "Grenzmarge" -#: flatcamGUI/ObjectUI.py:622 flatcamGUI/PreferencesUI.py:2117 +#: flatcamGUI/ObjectUI.py:629 flatcamGUI/PreferencesUI.py:2297 msgid "" "Specify the edge of the PCB\n" "by drawing a box around all\n" @@ -7661,27 +7994,27 @@ msgstr "" "Objekte mit diesem Minimum\n" "Entfernung." -#: flatcamGUI/ObjectUI.py:637 flatcamGUI/ObjectUI.py:675 -#: flatcamGUI/PreferencesUI.py:2130 flatcamGUI/PreferencesUI.py:2161 +#: flatcamGUI/ObjectUI.py:644 flatcamGUI/ObjectUI.py:682 +#: flatcamGUI/PreferencesUI.py:2310 flatcamGUI/PreferencesUI.py:2341 msgid "Rounded Geo" msgstr "Abgerundete Geo" -#: flatcamGUI/ObjectUI.py:639 flatcamGUI/PreferencesUI.py:2132 +#: flatcamGUI/ObjectUI.py:646 flatcamGUI/PreferencesUI.py:2312 msgid "Resulting geometry will have rounded corners." msgstr "Die resultierende Geometrie hat abgerundete Ecken." -#: flatcamGUI/ObjectUI.py:643 flatcamGUI/ObjectUI.py:684 -#: flatcamTools/ToolSolderPaste.py:133 +#: flatcamGUI/ObjectUI.py:650 flatcamGUI/ObjectUI.py:691 +#: flatcamTools/ToolSolderPaste.py:135 msgid "Generate Geo" msgstr "Geo erzeugen" -#: flatcamGUI/ObjectUI.py:653 flatcamGUI/PreferencesUI.py:2142 -#: flatcamGUI/PreferencesUI.py:7052 flatcamTools/ToolPanelize.py:95 +#: flatcamGUI/ObjectUI.py:660 flatcamGUI/PreferencesUI.py:2322 +#: flatcamGUI/PreferencesUI.py:7558 flatcamTools/ToolPanelize.py:101 #: flatcamTools/ToolQRCode.py:192 msgid "Bounding Box" msgstr "Begrenzungsrahmen" -#: flatcamGUI/ObjectUI.py:655 +#: flatcamGUI/ObjectUI.py:662 msgid "" "Create a geometry surrounding the Gerber object.\n" "Square shape." @@ -7689,7 +8022,7 @@ msgstr "" "Erstellen Sie eine Geometrie, die das Gerber-Objekt umgibt.\n" "Quadratische Form." -#: flatcamGUI/ObjectUI.py:663 flatcamGUI/PreferencesUI.py:2150 +#: flatcamGUI/ObjectUI.py:670 flatcamGUI/PreferencesUI.py:2330 msgid "" "Distance of the edges of the box\n" "to the nearest polygon." @@ -7697,7 +8030,7 @@ msgstr "" "Abstand der Kanten der Box\n" "zum nächsten Polygon." -#: flatcamGUI/ObjectUI.py:677 flatcamGUI/PreferencesUI.py:2163 +#: flatcamGUI/ObjectUI.py:684 flatcamGUI/PreferencesUI.py:2343 msgid "" "If the bounding box is \n" "to have rounded corners\n" @@ -7709,33 +8042,31 @@ msgstr "" "ihr Radius ist gleich\n" "der Abstand." -#: flatcamGUI/ObjectUI.py:686 +#: flatcamGUI/ObjectUI.py:693 msgid "Generate the Geometry object." msgstr "Generieren Sie das Geometrieobjekt." -#: flatcamGUI/ObjectUI.py:715 +#: flatcamGUI/ObjectUI.py:720 msgid "Excellon Object" msgstr "Excellon-Objekt" -#: flatcamGUI/ObjectUI.py:729 +#: flatcamGUI/ObjectUI.py:732 msgid "Solid circles." msgstr "Feste Kreise." -#: flatcamGUI/ObjectUI.py:777 flatcamGUI/ObjectUI.py:1926 -#: flatcamTools/ToolProperties.py:161 +#: flatcamGUI/ObjectUI.py:780 flatcamGUI/ObjectUI.py:875 +#: flatcamGUI/ObjectUI.py:2254 flatcamGUI/PreferencesUI.py:3289 +#: flatcamTools/ToolProperties.py:166 msgid "Drills" msgstr "Bohrer" -#: flatcamGUI/ObjectUI.py:777 flatcamGUI/ObjectUI.py:1926 -#: flatcamGUI/PreferencesUI.py:3683 flatcamTools/ToolProperties.py:162 +#: flatcamGUI/ObjectUI.py:780 flatcamGUI/ObjectUI.py:876 +#: flatcamGUI/ObjectUI.py:2254 flatcamGUI/PreferencesUI.py:3290 +#: flatcamGUI/PreferencesUI.py:3961 flatcamTools/ToolProperties.py:168 msgid "Slots" msgstr "Schlüssel" -#: flatcamGUI/ObjectUI.py:778 flatcamGUI/PreferencesUI.py:3289 -msgid "Offset Z" -msgstr "Versatz Z" - -#: flatcamGUI/ObjectUI.py:782 +#: flatcamGUI/ObjectUI.py:785 msgid "" "This is the Tool Number.\n" "When ToolChange is checked, on toolchange event this value\n" @@ -7750,8 +8081,8 @@ msgstr "" "\n" "Hier werden die Werkzeuge zur G-Code-Generierung ausgewählt." -#: flatcamGUI/ObjectUI.py:787 flatcamGUI/ObjectUI.py:1230 -#: flatcamTools/ToolPaint.py:137 +#: flatcamGUI/ObjectUI.py:790 flatcamGUI/ObjectUI.py:1508 +#: flatcamTools/ToolPaint.py:142 msgid "" "Tool Diameter. It's value (in current FlatCAM units) \n" "is the cut width into the material." @@ -7759,7 +8090,7 @@ msgstr "" "Werkzeugdurchmesser Der Wert (in aktuellen FlatCAM-Einheiten)\n" "ist die Schnittbreite in das Material." -#: flatcamGUI/ObjectUI.py:790 +#: flatcamGUI/ObjectUI.py:793 msgid "" "The number of Drill holes. Holes that are drilled with\n" "a drill bit." @@ -7767,7 +8098,7 @@ msgstr "" "Die Anzahl der Bohrlöcher. Löcher, mit denen gebohrt wird\n" "ein Bohrer." -#: flatcamGUI/ObjectUI.py:793 +#: flatcamGUI/ObjectUI.py:796 msgid "" "The number of Slot holes. Holes that are created by\n" "milling them with an endmill bit." @@ -7775,18 +8106,7 @@ msgstr "" "Die Anzahl der Langlöcher. Löcher, die von erstellt werden\n" "Fräsen mit einem Schaftfräser." -#: flatcamGUI/ObjectUI.py:796 flatcamGUI/PreferencesUI.py:3291 -msgid "" -"Some drill bits (the larger ones) need to drill deeper\n" -"to create the desired exit hole diameter due of the tip shape.\n" -"The value here can compensate the Cut Z parameter." -msgstr "" -"Einige Bohrer (die größeren) müssen tiefer bohren\n" -"um den gewünschten Austrittslochdurchmesser aufgrund der Spitzenform zu " -"erzeugen.\n" -"Der Wert hier kann den Parameter Cut Z ausgleichen." - -#: flatcamGUI/ObjectUI.py:800 +#: flatcamGUI/ObjectUI.py:799 msgid "" "Toggle display of the drills for the current tool.\n" "This does not select the tools for G-code generation." @@ -7794,20 +8114,60 @@ msgstr "" "Anzeige der Bohrer für das aktuelle Werkzeug umschalten.\n" "Hiermit werden die Tools für die G-Code-Generierung nicht ausgewählt." -#: flatcamGUI/ObjectUI.py:807 flatcamGUI/PreferencesUI.py:3069 -#: flatcamGUI/PreferencesUI.py:3947 -msgid "Create CNC Job" -msgstr "CNC-Job erstellen" - -#: flatcamGUI/ObjectUI.py:809 +#: flatcamGUI/ObjectUI.py:820 flatcamGUI/ObjectUI.py:1663 +#: flatcamTools/ToolNCC.py:334 flatcamTools/ToolPaint.py:317 msgid "" -"Create a CNC Job object\n" -"for this drill object." +"The data used for creating GCode.\n" +"Each tool store it's own set of such data." msgstr "" -"Erstellen Sie ein CNC-Auftragsobjekt\n" -"für dieses Bohrobjekt." +"Die Daten, die zum Erstellen von GCode verwendet werden.\n" +"Jedes Werkzeug speichert seinen eigenen Satz solcher Daten." -#: flatcamGUI/ObjectUI.py:822 flatcamGUI/PreferencesUI.py:3084 +#: flatcamGUI/ObjectUI.py:846 flatcamGUI/PreferencesUI.py:3266 +msgid "" +"Operation type:\n" +"- Drilling -> will drill the drills/slots associated with this tool\n" +"- Milling -> will mill the drills/slots" +msgstr "" +"Betriebsart:\n" +"- Bohren -> bohrt die mit diesem Werkzeug verbundenen Bohrer / Schlitze\n" +"- Fräsen -> fräst die Bohrer / Schlitze" + +#: flatcamGUI/ObjectUI.py:852 flatcamGUI/PreferencesUI.py:3272 +msgid "Drilling" +msgstr "Bohren" + +#: flatcamGUI/ObjectUI.py:853 flatcamGUI/PreferencesUI.py:3273 +msgid "Milling" +msgstr "Fräsprozess" + +#: flatcamGUI/ObjectUI.py:868 flatcamGUI/PreferencesUI.py:3282 +msgid "" +"Milling type:\n" +"- Drills -> will mill the drills associated with this tool\n" +"- Slots -> will mill the slots associated with this tool\n" +"- Both -> will mill both drills and mills or whatever is available" +msgstr "" +"Frästyp:\n" +"- Bohrer -> fräst die mit diesem Werkzeug verbundenen Bohrer\n" +"- Schlüssel-> fräst die diesem Tool zugeordneten Slots\n" +"- Beide -> fräsen sowohl Bohrer als auch Fräser oder was auch immer " +"verfügbar ist" + +#: flatcamGUI/ObjectUI.py:877 flatcamGUI/PreferencesUI.py:3291 +#: flatcamGUI/PreferencesUI.py:6343 flatcamTools/ToolFilm.py:258 +msgid "Both" +msgstr "Both" + +#: flatcamGUI/ObjectUI.py:885 flatcamGUI/PreferencesUI.py:3298 +msgid "Milling Diameter" +msgstr "Fräsdurchmesser" + +#: flatcamGUI/ObjectUI.py:887 flatcamGUI/PreferencesUI.py:3300 +msgid "The diameter of the tool who will do the milling" +msgstr "Der Durchmesser des Werkzeugs, das das Fräsen übernimmt" + +#: flatcamGUI/ObjectUI.py:901 flatcamGUI/PreferencesUI.py:3313 msgid "" "Drill depth (negative)\n" "below the copper surface." @@ -7815,7 +8175,33 @@ msgstr "" "Bohrtiefe (negativ)\n" "unter der Kupferoberfläche." -#: flatcamGUI/ObjectUI.py:841 flatcamGUI/PreferencesUI.py:3102 +#: flatcamGUI/ObjectUI.py:920 flatcamGUI/ObjectUI.py:1722 +#: flatcamGUI/PreferencesUI.py:3331 flatcamGUI/PreferencesUI.py:4261 +#: flatcamGUI/PreferencesUI.py:5687 flatcamTools/ToolCutOut.py:160 +msgid "Multi-Depth" +msgstr "Mehrfache Tiefe" + +#: flatcamGUI/ObjectUI.py:923 flatcamGUI/ObjectUI.py:1725 +#: flatcamGUI/PreferencesUI.py:3334 flatcamGUI/PreferencesUI.py:4264 +#: flatcamGUI/PreferencesUI.py:5690 flatcamTools/ToolCutOut.py:163 +msgid "" +"Use multiple passes to limit\n" +"the cut depth in each pass. Will\n" +"cut multiple times until Cut Z is\n" +"reached." +msgstr "" +"Verwenden Sie zum Begrenzen mehrere Durchgänge\n" +"die Schnitttiefe in jedem Durchgang. Wille\n" +"mehrmals schneiden, bis Schnitttiefe Z\n" +"erreicht ist." + +#: flatcamGUI/ObjectUI.py:936 flatcamGUI/ObjectUI.py:1739 +#: flatcamGUI/PreferencesUI.py:3346 flatcamGUI/PreferencesUI.py:5702 +#: flatcamTools/ToolCutOut.py:177 +msgid "Depth of each pass (positive)." +msgstr "Tiefe jedes Durchgangs (positiv)." + +#: flatcamGUI/ObjectUI.py:947 flatcamGUI/PreferencesUI.py:3354 msgid "" "Tool height when travelling\n" "across the XY plane." @@ -7823,61 +8209,16 @@ msgstr "" "Werkzeughöhe auf Reisen\n" "über die XY-Ebene." -#: flatcamGUI/ObjectUI.py:858 flatcamGUI/ObjectUI.py:1478 -#: flatcamGUI/PreferencesUI.py:3117 flatcamGUI/PreferencesUI.py:4034 -msgid "Tool change" -msgstr "Werkzeugwechsel" - -#: flatcamGUI/ObjectUI.py:860 flatcamGUI/PreferencesUI.py:3119 +#: flatcamGUI/ObjectUI.py:968 flatcamGUI/ObjectUI.py:1769 +#: flatcamGUI/PreferencesUI.py:4380 msgid "" -"Include tool-change sequence\n" -"in G-Code (Pause for tool change)." +"Cutting speed in the XY\n" +"plane in units per minute" msgstr "" -"Werkzeugwechselfolge einbeziehen\n" -"im G-Code (Pause für Werkzeugwechsel)." +"Schnittgeschwindigkeit im XY\n" +"Flugzeug in Einheiten pro Minute" -#: flatcamGUI/ObjectUI.py:866 flatcamGUI/ObjectUI.py:1471 -msgid "Tool change Z" -msgstr "Werkzeugwechsel Z" - -#: flatcamGUI/ObjectUI.py:868 flatcamGUI/ObjectUI.py:1474 -#: flatcamGUI/PreferencesUI.py:3126 flatcamGUI/PreferencesUI.py:4047 -msgid "" -"Z-axis position (height) for\n" -"tool change." -msgstr "" -"Z-Achsenposition (Höhe) für\n" -"Werkzeugwechsel." - -#: flatcamGUI/ObjectUI.py:888 flatcamGUI/PreferencesUI.py:3311 -msgid "" -"Height of the tool just after start.\n" -"Delete the value if you don't need this feature." -msgstr "" -"Höhe des Werkzeugs gleich nach dem Start.\n" -"Löschen Sie den Wert, wenn Sie diese Funktion nicht benötigen." - -#: flatcamGUI/ObjectUI.py:896 flatcamGUI/ObjectUI.py:1512 -#: flatcamGUI/PreferencesUI.py:3141 flatcamGUI/PreferencesUI.py:4066 -msgid "End move Z" -msgstr "Bewegung beenden Z" - -#: flatcamGUI/ObjectUI.py:898 flatcamGUI/ObjectUI.py:1514 -#: flatcamGUI/PreferencesUI.py:3143 flatcamGUI/PreferencesUI.py:4068 -msgid "" -"Height of the tool after\n" -"the last move at the end of the job." -msgstr "" -"Höhe des Werkzeugs nach\n" -"die letzte Bewegung am Ende des Jobs." - -#: flatcamGUI/ObjectUI.py:915 flatcamGUI/ObjectUI.py:1545 -#: flatcamGUI/PreferencesUI.py:3158 flatcamGUI/PreferencesUI.py:4101 -#: flatcamGUI/PreferencesUI.py:6566 flatcamTools/ToolSolderPaste.py:264 -msgid "Feedrate Z" -msgstr "Vorschub Z" - -#: flatcamGUI/ObjectUI.py:917 flatcamGUI/PreferencesUI.py:3160 +#: flatcamGUI/ObjectUI.py:983 flatcamGUI/PreferencesUI.py:3427 msgid "" "Tool speed while drilling\n" "(in units per minute).\n" @@ -7889,12 +8230,12 @@ msgstr "" "Sogenannter Eintauchvorschub.\n" "Dies ist für die lineare Bewegung G01." -#: flatcamGUI/ObjectUI.py:931 flatcamGUI/ObjectUI.py:1560 -#: flatcamGUI/PreferencesUI.py:3319 flatcamGUI/PreferencesUI.py:4210 +#: flatcamGUI/ObjectUI.py:998 flatcamGUI/ObjectUI.py:1796 +#: flatcamGUI/PreferencesUI.py:3597 flatcamGUI/PreferencesUI.py:4503 msgid "Feedrate Rapids" msgstr "Vorschubgeschwindigkeit" -#: flatcamGUI/ObjectUI.py:933 flatcamGUI/PreferencesUI.py:3321 +#: flatcamGUI/ObjectUI.py:1000 flatcamGUI/PreferencesUI.py:3599 msgid "" "Tool speed while drilling\n" "(in units per minute).\n" @@ -7908,12 +8249,26 @@ msgstr "" "Es ist nur für Marlin nützlich,\n" "für andere Fälle ignorieren." -#: flatcamGUI/ObjectUI.py:951 flatcamGUI/ObjectUI.py:1603 -#: flatcamGUI/PreferencesUI.py:4117 -msgid "Spindle speed" -msgstr "Spulengeschwindigkeit" +#: flatcamGUI/ObjectUI.py:1020 flatcamGUI/ObjectUI.py:1816 +#: flatcamGUI/PreferencesUI.py:4521 +msgid "Re-cut" +msgstr "Nachschneiden" -#: flatcamGUI/ObjectUI.py:953 flatcamGUI/PreferencesUI.py:3175 +#: flatcamGUI/ObjectUI.py:1022 flatcamGUI/ObjectUI.py:1035 +#: flatcamGUI/ObjectUI.py:1818 flatcamGUI/ObjectUI.py:1830 +#: flatcamGUI/PreferencesUI.py:4523 flatcamGUI/PreferencesUI.py:4535 +msgid "" +"In order to remove possible\n" +"copper leftovers where first cut\n" +"meet with last cut, we generate an\n" +"extended cut over the first cut section." +msgstr "" +"Um zu entfernen möglich\n" +"Kupferreste wurden zuerst geschnitten\n" +"Beim letzten Schnitt treffen wir einen\n" +"verlängerter Schnitt über dem ersten Schnittabschnitt." + +#: flatcamGUI/ObjectUI.py:1050 flatcamGUI/PreferencesUI.py:3442 msgid "" "Speed of the spindle\n" "in RPM (optional)" @@ -7921,8 +8276,8 @@ msgstr "" "Geschwindigkeit der Spindel\n" "in RPM (optional)" -#: flatcamGUI/ObjectUI.py:965 flatcamGUI/ObjectUI.py:1622 -#: flatcamGUI/PreferencesUI.py:3187 flatcamGUI/PreferencesUI.py:4135 +#: flatcamGUI/ObjectUI.py:1065 flatcamGUI/ObjectUI.py:1858 +#: flatcamGUI/PreferencesUI.py:3456 flatcamGUI/PreferencesUI.py:4427 msgid "" "Pause to allow the spindle to reach its\n" "speed before cutting." @@ -7930,26 +8285,116 @@ msgstr "" "Pause, damit die Spindel ihre erreichen kann\n" "Geschwindigkeit vor dem Schneiden." -#: flatcamGUI/ObjectUI.py:974 flatcamGUI/ObjectUI.py:1632 -#: flatcamGUI/PreferencesUI.py:3193 flatcamGUI/PreferencesUI.py:4140 +#: flatcamGUI/ObjectUI.py:1076 flatcamGUI/ObjectUI.py:1868 +#: flatcamGUI/PreferencesUI.py:3464 flatcamGUI/PreferencesUI.py:4432 msgid "Number of time units for spindle to dwell." msgstr "Anzahl der Zeiteinheiten, in denen die Spindel verweilen soll." -#: flatcamGUI/ObjectUI.py:984 flatcamGUI/PreferencesUI.py:3206 -msgid "" -"The preprocessor JSON file that dictates\n" -"Gcode output." -msgstr "" -"Die Postprozessor-JSON-Datei, die diktiert\n" -"Gcode-Ausgabe." +#: flatcamGUI/ObjectUI.py:1086 flatcamGUI/PreferencesUI.py:3563 +msgid "Offset Z" +msgstr "Versatz Z" -#: flatcamGUI/ObjectUI.py:993 flatcamGUI/ObjectUI.py:1652 -#: flatcamGUI/PreferencesUI.py:3335 flatcamGUI/PreferencesUI.py:4251 +#: flatcamGUI/ObjectUI.py:1088 flatcamGUI/PreferencesUI.py:3565 +msgid "" +"Some drill bits (the larger ones) need to drill deeper\n" +"to create the desired exit hole diameter due of the tip shape.\n" +"The value here can compensate the Cut Z parameter." +msgstr "" +"Einige Bohrer (die größeren) müssen tiefer bohren\n" +"um den gewünschten Austrittslochdurchmesser aufgrund der Spitzenform zu " +"erzeugen.\n" +"Der Wert hier kann den Parameter Cut Z ausgleichen." + +#: flatcamGUI/ObjectUI.py:1148 flatcamGUI/ObjectUI.py:1922 +#: flatcamTools/ToolNCC.py:492 flatcamTools/ToolPaint.py:423 +msgid "Apply parameters to all tools" +msgstr "Parameter auf alle Werkzeuge anwenden" + +#: flatcamGUI/ObjectUI.py:1150 flatcamGUI/ObjectUI.py:1924 +#: flatcamTools/ToolNCC.py:494 flatcamTools/ToolPaint.py:425 +msgid "" +"The parameters in the current form will be applied\n" +"on all the tools from the Tool Table." +msgstr "" +"Die aktuell angegebenen Parameter werden allen Werkzeugen der " +"Werkzeugtabelle zugeordnet." + +#: flatcamGUI/ObjectUI.py:1161 flatcamGUI/ObjectUI.py:1935 +#: flatcamTools/ToolNCC.py:505 flatcamTools/ToolPaint.py:436 +msgid "Common Parameters" +msgstr "Allgemeine Parameter" + +#: flatcamGUI/ObjectUI.py:1163 flatcamGUI/ObjectUI.py:1937 +#: flatcamTools/ToolNCC.py:507 flatcamTools/ToolPaint.py:438 +msgid "Parameters that are common for all tools." +msgstr "Parameter, die allen Werkzeugen gemeinsam sind." + +#: flatcamGUI/ObjectUI.py:1168 flatcamGUI/ObjectUI.py:1942 +msgid "Tool change Z" +msgstr "Werkzeugwechsel Z" + +#: flatcamGUI/ObjectUI.py:1170 flatcamGUI/PreferencesUI.py:3372 +msgid "" +"Include tool-change sequence\n" +"in G-Code (Pause for tool change)." +msgstr "" +"Werkzeugwechselfolge einbeziehen\n" +"im G-Code (Pause für Werkzeugwechsel)." + +#: flatcamGUI/ObjectUI.py:1177 flatcamGUI/ObjectUI.py:1953 +#: flatcamGUI/PreferencesUI.py:3380 flatcamGUI/PreferencesUI.py:4327 +msgid "" +"Z-axis position (height) for\n" +"tool change." +msgstr "" +"Z-Achsenposition (Höhe) für\n" +"Werkzeugwechsel." + +#: flatcamGUI/ObjectUI.py:1194 flatcamGUI/PreferencesUI.py:3588 +msgid "" +"Height of the tool just after start.\n" +"Delete the value if you don't need this feature." +msgstr "" +"Höhe des Werkzeugs gleich nach dem Start.\n" +"Löschen Sie den Wert, wenn Sie diese Funktion nicht benötigen." + +#: flatcamGUI/ObjectUI.py:1203 flatcamGUI/ObjectUI.py:1981 +#: flatcamGUI/PreferencesUI.py:3396 flatcamGUI/PreferencesUI.py:4346 +msgid "End move Z" +msgstr "Bewegung beenden Z" + +#: flatcamGUI/ObjectUI.py:1205 flatcamGUI/ObjectUI.py:1983 +#: flatcamGUI/PreferencesUI.py:3398 flatcamGUI/PreferencesUI.py:4348 +msgid "" +"Height of the tool after\n" +"the last move at the end of the job." +msgstr "" +"Höhe des Werkzeugs nach\n" +"die letzte Bewegung am Ende des Jobs." + +#: flatcamGUI/ObjectUI.py:1222 flatcamGUI/ObjectUI.py:2000 +#: flatcamGUI/PreferencesUI.py:3413 flatcamGUI/PreferencesUI.py:4366 +msgid "End move X,Y" +msgstr "Bewegung beenden X, Y" + +#: flatcamGUI/ObjectUI.py:1224 flatcamGUI/ObjectUI.py:2002 +#: flatcamGUI/PreferencesUI.py:3415 flatcamGUI/PreferencesUI.py:4368 +msgid "" +"End move X,Y position. In format (x,y).\n" +"If no value is entered then there is no move\n" +"on X,Y plane at the end of the job." +msgstr "" +"Beenden Sie die X-, Y-Position. Im Format (x, y).\n" +"Wenn kein Wert eingegeben wird, erfolgt keine Bewegung\n" +"auf der X, Y-Ebene am Ende des Jobs." + +#: flatcamGUI/ObjectUI.py:1234 flatcamGUI/ObjectUI.py:1876 +#: flatcamGUI/PreferencesUI.py:3613 flatcamGUI/PreferencesUI.py:4544 msgid "Probe Z depth" msgstr "Sonde Z Tiefe" -#: flatcamGUI/ObjectUI.py:995 flatcamGUI/ObjectUI.py:1654 -#: flatcamGUI/PreferencesUI.py:3337 flatcamGUI/PreferencesUI.py:4253 +#: flatcamGUI/ObjectUI.py:1236 flatcamGUI/ObjectUI.py:1878 +#: flatcamGUI/PreferencesUI.py:3615 flatcamGUI/PreferencesUI.py:4546 msgid "" "The maximum depth that the probe is allowed\n" "to probe. Negative value, in current units." @@ -7957,45 +8402,71 @@ msgstr "" "Die maximale Tiefe, in der die Sonde zulässig ist\n" "zu untersuchen. Negativer Wert in aktuellen Einheiten." -#: flatcamGUI/ObjectUI.py:1009 flatcamGUI/ObjectUI.py:1669 -#: flatcamGUI/PreferencesUI.py:3348 flatcamGUI/PreferencesUI.py:4266 +#: flatcamGUI/ObjectUI.py:1252 flatcamGUI/ObjectUI.py:1893 +#: flatcamGUI/PreferencesUI.py:3626 flatcamGUI/PreferencesUI.py:4559 msgid "Feedrate Probe" msgstr "Vorschubsonde" -#: flatcamGUI/ObjectUI.py:1011 flatcamGUI/ObjectUI.py:1671 -#: flatcamGUI/PreferencesUI.py:3350 flatcamGUI/PreferencesUI.py:4268 +#: flatcamGUI/ObjectUI.py:1254 flatcamGUI/ObjectUI.py:1895 +#: flatcamGUI/PreferencesUI.py:3628 flatcamGUI/PreferencesUI.py:4561 msgid "The feedrate used while the probe is probing." msgstr "Der Vorschub während der Sondenmessung." -#: flatcamGUI/ObjectUI.py:1037 flatcamGUI/PreferencesUI.py:3215 -msgid "Gcode" -msgstr "Gcode" +#: flatcamGUI/ObjectUI.py:1261 +msgid "e_fr_probe" +msgstr "e_fr_probe" -#: flatcamGUI/ObjectUI.py:1039 +#: flatcamGUI/ObjectUI.py:1270 +msgid "Preprocessor E" +msgstr "Postprozessor E" + +#: flatcamGUI/ObjectUI.py:1272 msgid "" -"Choose what to use for GCode generation:\n" -"'Drills', 'Slots' or 'Both'.\n" -"When choosing 'Slots' or 'Both', slots will be\n" -"converted to a series of drills." +"The preprocessor JSON file that dictates\n" +"Gcode output for Excellon Objects." msgstr "" -"Wählen Sie aus, was für die GCode-Generierung verwendet werden soll:\n" -"'Drills', 'Slots' oder 'Both'.\n" -"Wenn Sie \"Slots\" oder \"Both\" wählen, werden die Slots angezeigt\n" -"in eine Reihe von Bohrern umgewandelt." +"Die diktierende Präprozessor-JSON-Datei\n" +"Gcode-Ausgabe für Excellon-Objekte." -#: flatcamGUI/ObjectUI.py:1053 -msgid "Create Drills GCode" -msgstr "Erstellen Sie einen Drill-GCode" +#: flatcamGUI/ObjectUI.py:1282 +msgid "Preprocessor G" +msgstr "Postprozessor G" -#: flatcamGUI/ObjectUI.py:1055 -msgid "Generate the CNC Job." -msgstr "Generieren Sie den CNC-Job." +#: flatcamGUI/ObjectUI.py:1284 +msgid "" +"The preprocessor JSON file that dictates\n" +"Gcode output for Geometry (Milling) Objects." +msgstr "" +"Die diktierende Präprozessor-JSON-Datei\n" +"Gcode-Ausgabe für Geometrieobjekte (Fräsen)." -#: flatcamGUI/ObjectUI.py:1066 flatcamGUI/PreferencesUI.py:3233 -msgid "Mill Holes" -msgstr "Löcher bohren" +#: flatcamGUI/ObjectUI.py:1308 flatcamGUI/ObjectUI.py:2026 +msgid "" +"Add / Select at least one tool in the tool-table.\n" +"Click the # header to select all, or Ctrl + LMB\n" +"for custom selection of tools." +msgstr "" +"Hinzufügen / Auswählen mindestens eines Werkzeugs in der Werkzeugtabelle.\n" +"Klicken Sie auf die Überschrift #, um alle auszuwählen, oder auf Strg + LMB\n" +"zur benutzerdefinierten Auswahl von Werkzeugen." -#: flatcamGUI/ObjectUI.py:1068 +#: flatcamGUI/ObjectUI.py:1316 flatcamGUI/ObjectUI.py:2033 +msgid "Generate CNCJob object" +msgstr "Generieren des CNC-Job-Objekts" + +#: flatcamGUI/ObjectUI.py:1318 +msgid "" +"Generate the CNC Job.\n" +"If milling then an additional Geometry object will be created" +msgstr "" +"Generieren Sie den CNC-Auftrag.\n" +"Beim Fräsen wird ein zusätzliches Geometrieobjekt erstellt" + +#: flatcamGUI/ObjectUI.py:1335 +msgid "Milling Geometry" +msgstr "Fräsgeometrie" + +#: flatcamGUI/ObjectUI.py:1337 msgid "" "Create Geometry for milling holes.\n" "Select from the Tools Table above the hole dias to be\n" @@ -8006,20 +8477,16 @@ msgstr "" "die gefräst werden sollen. Verwenden Sie die Spalte #, um die Auswahl zu " "treffen." -#: flatcamGUI/ObjectUI.py:1074 flatcamGUI/PreferencesUI.py:3239 -msgid "Drill Tool dia" -msgstr "Bohrwerkzeugs Durchm" - -#: flatcamGUI/ObjectUI.py:1076 flatcamGUI/PreferencesUI.py:2027 -#: flatcamGUI/PreferencesUI.py:3241 +#: flatcamGUI/ObjectUI.py:1345 flatcamGUI/PreferencesUI.py:2207 +#: flatcamGUI/PreferencesUI.py:3514 msgid "Diameter of the cutting tool." msgstr "Durchmesser des Schneidewerkzeugs." -#: flatcamGUI/ObjectUI.py:1083 -msgid "Mill Drills Geo" -msgstr "Mühle bohrt Geo" +#: flatcamGUI/ObjectUI.py:1355 +msgid "Mill Drills" +msgstr "Mühlenbohrer" -#: flatcamGUI/ObjectUI.py:1085 +#: flatcamGUI/ObjectUI.py:1357 msgid "" "Create the Geometry Object\n" "for milling DRILLS toolpaths." @@ -8027,23 +8494,11 @@ msgstr "" "Erstellen Sie das Geometrieobjekt\n" "zum Fräsen von BOHRER-Werkzeugwegen." -#: flatcamGUI/ObjectUI.py:1099 flatcamGUI/PreferencesUI.py:3250 -msgid "Slot Tool dia" -msgstr "Schlitzwerkzeug Durchmesser" +#: flatcamGUI/ObjectUI.py:1375 +msgid "Mill Slots" +msgstr "Mühlenschlitze" -#: flatcamGUI/ObjectUI.py:1101 flatcamGUI/PreferencesUI.py:3252 -msgid "" -"Diameter of the cutting tool\n" -"when milling slots." -msgstr "" -"Durchmesser des Schneidewerkzeugs\n" -"beim Fräsen von Schlitzen." - -#: flatcamGUI/ObjectUI.py:1110 -msgid "Mill Slots Geo" -msgstr "Fräsen der Schlitze" - -#: flatcamGUI/ObjectUI.py:1112 +#: flatcamGUI/ObjectUI.py:1377 msgid "" "Create the Geometry Object\n" "for milling SLOTS toolpaths." @@ -8051,11 +8506,11 @@ msgstr "" "Erstellen Sie das Geometrieobjekt\n" "zum Fräsen von Werkzeugwegen." -#: flatcamGUI/ObjectUI.py:1152 flatcamTools/ToolCutOut.py:317 +#: flatcamGUI/ObjectUI.py:1419 flatcamTools/ToolCutOut.py:327 msgid "Geometry Object" msgstr "Geometrieobjekt" -#: flatcamGUI/ObjectUI.py:1186 +#: flatcamGUI/ObjectUI.py:1465 msgid "" "Tools in this Geometry object used for cutting.\n" "The 'Offset' entry will set an offset for the cut.\n" @@ -8084,23 +8539,23 @@ 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:1203 flatcamGUI/ObjectUI.py:1903 -#: flatcamGUI/PreferencesUI.py:4405 +#: flatcamGUI/ObjectUI.py:1482 flatcamGUI/ObjectUI.py:2231 +#: flatcamGUI/PreferencesUI.py:4698 msgid "Plot Object" msgstr "Plotobjekt" -#: flatcamGUI/ObjectUI.py:1217 flatcamGUI/ObjectUI.py:1916 -#: flatcamGUI/ObjectUI.py:1926 flatcamGUI/PreferencesUI.py:7241 -#: flatcamTools/ToolCopperThieving.py:220 +#: flatcamGUI/ObjectUI.py:1495 flatcamGUI/ObjectUI.py:2244 +#: flatcamGUI/ObjectUI.py:2254 flatcamGUI/PreferencesUI.py:7747 +#: flatcamTools/ToolCopperThieving.py:222 msgid "Dia" msgstr "Durchm" -#: flatcamGUI/ObjectUI.py:1217 flatcamGUI/ObjectUI.py:1916 -#: flatcamTools/ToolNonCopperClear.py:120 flatcamTools/ToolPaint.py:123 +#: flatcamGUI/ObjectUI.py:1495 flatcamGUI/ObjectUI.py:2244 +#: flatcamTools/ToolNCC.py:132 flatcamTools/ToolPaint.py:128 msgid "TT" msgstr "TT" -#: flatcamGUI/ObjectUI.py:1224 +#: flatcamGUI/ObjectUI.py:1502 msgid "" "This is the Tool Number.\n" "When ToolChange is checked, on toolchange event this value\n" @@ -8111,7 +8566,7 @@ msgstr "" "Werkzeugwechselereignis angezeigt\n" "wird als T1, T2 ... Tn angezeigt" -#: flatcamGUI/ObjectUI.py:1235 +#: flatcamGUI/ObjectUI.py:1513 msgid "" "The value for the Offset can be:\n" "- Path -> There is no offset, the tool cut will be done through the geometry " @@ -8128,7 +8583,7 @@ msgstr "" "- Out (Seite) -> Der Werkzeugschnitt folgt der Geometrielinie an der " "Außenseite." -#: flatcamGUI/ObjectUI.py:1242 +#: flatcamGUI/ObjectUI.py:1520 msgid "" "The (Operation) Type has only informative value. Usually the UI form " "values \n" @@ -8151,7 +8606,7 @@ msgstr "" "Für die Isolierung benötigen wir einen niedrigeren Vorschub, da ein Fräser " "mit einer feinen Spitze verwendet wird." -#: flatcamGUI/ObjectUI.py:1251 +#: flatcamGUI/ObjectUI.py:1529 msgid "" "The Tool Type (TT) can be:\n" "- Circular with 1 ... 4 teeth -> it is informative only. Being circular the " @@ -8182,7 +8637,7 @@ msgstr "" "Durch die Auswahl des V-Shape-Werkzeugtyps wird der Operationstyp " "automatisch als Isolation ausgewählt." -#: flatcamGUI/ObjectUI.py:1263 +#: flatcamGUI/ObjectUI.py:1541 msgid "" "Plot column. It is visible only for MultiGeo geometries, meaning geometries " "that holds the geometry\n" @@ -8200,7 +8655,7 @@ msgstr "" "der Leinwand aktiviert / deaktiviert werden\n" "für das entsprechende Werkzeug." -#: flatcamGUI/ObjectUI.py:1281 +#: flatcamGUI/ObjectUI.py:1559 msgid "" "The value to offset the cut when \n" "the Offset type selected is 'Offset'.\n" @@ -8212,7 +8667,13 @@ msgstr "" "Der Wert kann für \"außerhalb\" positiv sein\n" "Cut und Negativ für \"Inside\" Cut." -#: flatcamGUI/ObjectUI.py:1306 +#: flatcamGUI/ObjectUI.py:1578 flatcamTools/ToolNCC.py:209 +#: flatcamTools/ToolNCC.py:923 flatcamTools/ToolPaint.py:192 +#: flatcamTools/ToolPaint.py:849 flatcamTools/ToolSolderPaste.py:559 +msgid "New Tool" +msgstr "Neues Werkzeug" + +#: flatcamGUI/ObjectUI.py:1595 msgid "" "Add a new tool to the Tool Table\n" "with the specified diameter." @@ -8220,11 +8681,14 @@ msgstr "" "Fügen Sie der Werkzeugtabelle ein neues Werkzeug\n" "mit dem oben angegebenen Durchmesser hinzu." -#: flatcamGUI/ObjectUI.py:1314 -msgid "Add Tool from DataBase" -msgstr "Werkzeug aus Werkzeugdatenbank hinzufügen" +#: flatcamGUI/ObjectUI.py:1600 flatcamTools/ToolNCC.py:300 +#: flatcamTools/ToolNCC.py:634 flatcamTools/ToolPaint.py:283 +#: flatcamTools/ToolPaint.py:679 +msgid "Add from DB" +msgstr "Aus DB hinzufügen" -#: flatcamGUI/ObjectUI.py:1316 +#: flatcamGUI/ObjectUI.py:1602 flatcamTools/ToolNCC.py:302 +#: flatcamTools/ToolPaint.py:285 msgid "" "Add a new tool to the Tool Table\n" "from the Tool DataBase." @@ -8232,7 +8696,7 @@ msgstr "" "Fügen Sie der Werkzeugtabelle ein neues Werkzeug aus der\n" "aus der Werkzeugdatenbank hinzu." -#: flatcamGUI/ObjectUI.py:1326 +#: flatcamGUI/ObjectUI.py:1617 msgid "" "Copy a selection of tools in the Tool Table\n" "by first selecting a row in the Tool Table." @@ -8240,7 +8704,7 @@ msgstr "" "Kopieren Sie eine Auswahl von Werkzeugen in die Werkzeugtabelle\n" "indem Sie zuerst eine Zeile in der Werkzeugtabelle auswählen." -#: flatcamGUI/ObjectUI.py:1332 +#: flatcamGUI/ObjectUI.py:1623 msgid "" "Delete a selection of tools in the Tool Table\n" "by first selecting a row in the Tool Table." @@ -8248,38 +8712,7 @@ msgstr "" "Löschen Sie eine Auswahl von Werkzeugen in der Werkzeugtabelle\n" "indem Sie zuerst eine Zeile in der Werkzeugtabelle auswählen." -#: flatcamGUI/ObjectUI.py:1356 -msgid "" -"The data used for creating GCode.\n" -"Each tool store it's own set of such data." -msgstr "" -"Die Daten, die zum Erstellen von GCode verwendet werden.\n" -"Jedes Werkzeug speichert seinen eigenen Satz solcher Daten." - -#: flatcamGUI/ObjectUI.py:1426 flatcamGUI/PreferencesUI.py:3981 -#: flatcamGUI/PreferencesUI.py:5348 flatcamTools/ToolCutOut.py:153 -msgid "Multi-Depth" -msgstr "Mehrfache Tiefe" - -#: flatcamGUI/ObjectUI.py:1429 flatcamGUI/PreferencesUI.py:3984 -#: flatcamGUI/PreferencesUI.py:5351 flatcamTools/ToolCutOut.py:156 -msgid "" -"Use multiple passes to limit\n" -"the cut depth in each pass. Will\n" -"cut multiple times until Cut Z is\n" -"reached." -msgstr "" -"Verwenden Sie zum Begrenzen mehrere Durchgänge\n" -"die Schnitttiefe in jedem Durchgang. Wille\n" -"mehrmals schneiden, bis Schnitttiefe Z\n" -"erreicht ist." - -#: flatcamGUI/ObjectUI.py:1443 flatcamGUI/PreferencesUI.py:5363 -#: flatcamTools/ToolCutOut.py:170 -msgid "Depth of each pass (positive)." -msgstr "Tiefe jedes Durchgangs (positiv)." - -#: flatcamGUI/ObjectUI.py:1454 flatcamGUI/PreferencesUI.py:4016 +#: flatcamGUI/ObjectUI.py:1750 flatcamGUI/PreferencesUI.py:4296 msgid "" "Height of the tool when\n" "moving without cutting." @@ -8287,28 +8720,7 @@ msgstr "" "Höhe des Werkzeugs bei\n" "Bewegen ohne zu schneiden." -#: flatcamGUI/ObjectUI.py:1481 flatcamGUI/PreferencesUI.py:4037 -msgid "" -"Include tool-change sequence\n" -"in the Machine Code (Pause for tool change)." -msgstr "" -"Werkzeugwechselfolge einbeziehen\n" -"im Maschinencode (Pause für Werkzeugwechsel)." - -#: flatcamGUI/ObjectUI.py:1531 flatcamGUI/PreferencesUI.py:4086 -#: flatcamGUI/PreferencesUI.py:6553 flatcamTools/ToolSolderPaste.py:252 -msgid "Feedrate X-Y" -msgstr "Vorschub X-Y" - -#: flatcamGUI/ObjectUI.py:1533 flatcamGUI/PreferencesUI.py:4088 -msgid "" -"Cutting speed in the XY\n" -"plane in units per minute" -msgstr "" -"Schnittgeschwindigkeit im XY\n" -"Flugzeug in Einheiten pro Minute" - -#: flatcamGUI/ObjectUI.py:1547 flatcamGUI/PreferencesUI.py:4103 +#: flatcamGUI/ObjectUI.py:1783 flatcamGUI/PreferencesUI.py:4395 msgid "" "Cutting speed in the XY\n" "plane in units per minute.\n" @@ -8318,7 +8730,7 @@ msgstr "" "Flugzeug in Einheiten pro Minute.\n" "Es heißt auch Sturz." -#: flatcamGUI/ObjectUI.py:1562 flatcamGUI/PreferencesUI.py:4212 +#: flatcamGUI/ObjectUI.py:1798 flatcamGUI/PreferencesUI.py:4505 msgid "" "Cutting speed in the XY plane\n" "(in units per minute).\n" @@ -8332,24 +8744,7 @@ msgstr "" "Es ist nur für Marlin nützlich,\n" "für andere Fälle ignorieren." -#: flatcamGUI/ObjectUI.py:1580 flatcamGUI/PreferencesUI.py:4228 -msgid "Re-cut" -msgstr "Nachschneiden" - -#: flatcamGUI/ObjectUI.py:1582 flatcamGUI/ObjectUI.py:1594 -#: flatcamGUI/PreferencesUI.py:4230 flatcamGUI/PreferencesUI.py:4242 -msgid "" -"In order to remove possible\n" -"copper leftovers where first cut\n" -"meet with last cut, we generate an\n" -"extended cut over the first cut section." -msgstr "" -"Um zu entfernen möglich\n" -"Kupferreste wurden zuerst geschnitten\n" -"Beim letzten Schnitt treffen wir einen\n" -"verlängerter Schnitt über dem ersten Schnittabschnitt." - -#: flatcamGUI/ObjectUI.py:1606 flatcamGUI/PreferencesUI.py:4120 +#: flatcamGUI/ObjectUI.py:1842 flatcamGUI/PreferencesUI.py:4412 msgid "" "Speed of the spindle in RPM (optional).\n" "If LASER preprocessor is used,\n" @@ -8359,7 +8754,15 @@ msgstr "" "Wenn LASER-Postprozessor verwendet wird,\n" "Dieser Wert ist die Leistung des Lasers." -#: flatcamGUI/ObjectUI.py:1642 flatcamGUI/PreferencesUI.py:4157 +#: flatcamGUI/ObjectUI.py:1945 flatcamGUI/PreferencesUI.py:4317 +msgid "" +"Include tool-change sequence\n" +"in the Machine Code (Pause for tool change)." +msgstr "" +"Werkzeugwechselfolge einbeziehen\n" +"im Maschinencode (Pause für Werkzeugwechsel)." + +#: flatcamGUI/ObjectUI.py:2014 flatcamGUI/PreferencesUI.py:4449 msgid "" "The Preprocessor file that dictates\n" "the Machine Code (like GCode, RML, HPGL) output." @@ -8367,43 +8770,15 @@ msgstr "" "Die Postprozessor-Datei, die diktiert\n" "den Maschinencode (wie GCode, RML, HPGL)." -#: flatcamGUI/ObjectUI.py:1689 -msgid "Apply parameters to all tools" -msgstr "Parameter auf alle Werkzeuge anwenden" - -#: flatcamGUI/ObjectUI.py:1691 -msgid "" -"The parameters in the current form will be applied\n" -"on all the tools from the Tool Table." -msgstr "" -"Die aktuell angegebenen Parameter werden allen Werkzeugen der " -"Werkzeugtabelle zugeordnet." - -#: flatcamGUI/ObjectUI.py:1700 -msgid "" -"Add at least one tool in the tool-table.\n" -"Click the header to select all, or Ctrl + LMB\n" -"for custom selection of tools." -msgstr "" -"Fügen Sie mindestens ein Werkzeug in \n" -"der Werkzeugtabelle hinzu.\n" -"Klicken Sie auf die Kopfzeile, um alle auszuwählen, \n" -"oder drücken Sie Strg + LMB\n" -"zur benutzerdefinierten Auswahl von Werkzeugen." - -#: flatcamGUI/ObjectUI.py:1707 -msgid "Generate CNCJob object" -msgstr "Generieren des CNC-Job-Objekts" - -#: flatcamGUI/ObjectUI.py:1709 +#: flatcamGUI/ObjectUI.py:2035 msgid "Generate the CNC Job object." msgstr "Generieren Sie das CNC-Job-Objekt." -#: flatcamGUI/ObjectUI.py:1726 +#: flatcamGUI/ObjectUI.py:2052 msgid "Launch Paint Tool in Tools Tab." msgstr "Starten Sie das Paint Werkzeug in der Registerkarte \"Tools\"." -#: flatcamGUI/ObjectUI.py:1734 flatcamGUI/PreferencesUI.py:5524 +#: flatcamGUI/ObjectUI.py:2060 flatcamGUI/PreferencesUI.py:5874 msgid "" "Creates tool paths to cover the\n" "whole area of a polygon (remove\n" @@ -8415,15 +8790,15 @@ msgstr "" "alles Kupfer). Du wirst gefragt\n" "Klicken Sie auf das gewünschte Polygon." -#: flatcamGUI/ObjectUI.py:1786 +#: flatcamGUI/ObjectUI.py:2115 msgid "CNC Job Object" msgstr "CNC-Auftragsobjekt" -#: flatcamGUI/ObjectUI.py:1798 flatcamGUI/PreferencesUI.py:4410 +#: flatcamGUI/ObjectUI.py:2126 flatcamGUI/PreferencesUI.py:4703 msgid "Plot kind" msgstr "Darstellungsart" -#: flatcamGUI/ObjectUI.py:1801 flatcamGUI/PreferencesUI.py:4412 +#: flatcamGUI/ObjectUI.py:2129 flatcamGUI/PreferencesUI.py:4705 msgid "" "This selects the kind of geometries on the canvas to plot.\n" "Those can be either of type 'Travel' which means the moves\n" @@ -8436,15 +8811,15 @@ msgstr "" "über dem Werkstück oder es kann vom Typ 'Ausschneiden' sein,\n" "was bedeutet, dass die Bewegungen, die in das Material geschnitten werden." -#: flatcamGUI/ObjectUI.py:1810 flatcamGUI/PreferencesUI.py:4420 +#: flatcamGUI/ObjectUI.py:2138 flatcamGUI/PreferencesUI.py:4713 msgid "Travel" msgstr "Reise" -#: flatcamGUI/ObjectUI.py:1814 flatcamGUI/PreferencesUI.py:4429 +#: flatcamGUI/ObjectUI.py:2142 flatcamGUI/PreferencesUI.py:4722 msgid "Display Annotation" msgstr "Anmerkung anzeigen" -#: flatcamGUI/ObjectUI.py:1816 flatcamGUI/PreferencesUI.py:4431 +#: flatcamGUI/ObjectUI.py:2144 flatcamGUI/PreferencesUI.py:4724 msgid "" "This selects if to display text annotation on the plot.\n" "When checked it will display numbers in order for each end\n" @@ -8456,11 +8831,11 @@ msgstr "" "richtigen Reihenfolge angezeigt\n" "einer Reiseleitung." -#: flatcamGUI/ObjectUI.py:1831 +#: flatcamGUI/ObjectUI.py:2159 msgid "Travelled dist." msgstr "Zurückgelegte Strecke." -#: flatcamGUI/ObjectUI.py:1833 flatcamGUI/ObjectUI.py:1838 +#: flatcamGUI/ObjectUI.py:2161 flatcamGUI/ObjectUI.py:2166 msgid "" "This is the total travelled distance on X-Y plane.\n" "In current units." @@ -8468,11 +8843,11 @@ msgstr "" "Dies ist die Gesamtstrecke auf der X-Y-Ebene.\n" "In aktuellen Einheiten." -#: flatcamGUI/ObjectUI.py:1843 +#: flatcamGUI/ObjectUI.py:2171 msgid "Estimated time" msgstr "Geschätzte Zeit" -#: flatcamGUI/ObjectUI.py:1845 flatcamGUI/ObjectUI.py:1850 +#: flatcamGUI/ObjectUI.py:2173 flatcamGUI/ObjectUI.py:2178 msgid "" "This is the estimated time to do the routing/drilling,\n" "without the time spent in ToolChange events." @@ -8480,11 +8855,11 @@ 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:1885 +#: flatcamGUI/ObjectUI.py:2213 msgid "CNC Tools Table" msgstr "CNC Werkzeugtabelle" -#: flatcamGUI/ObjectUI.py:1888 +#: flatcamGUI/ObjectUI.py:2216 msgid "" "Tools in this CNCJob object used for cutting.\n" "The tool diameter is used for plotting on canvas.\n" @@ -8506,24 +8881,24 @@ 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:1916 flatcamGUI/ObjectUI.py:1927 +#: flatcamGUI/ObjectUI.py:2244 flatcamGUI/ObjectUI.py:2255 msgid "P" msgstr "P" -#: flatcamGUI/ObjectUI.py:1937 +#: flatcamGUI/ObjectUI.py:2265 msgid "Update Plot" msgstr "Plot aktualisieren" -#: flatcamGUI/ObjectUI.py:1939 +#: flatcamGUI/ObjectUI.py:2267 msgid "Update the plot." msgstr "Aktualisieren Sie die Darstellung." -#: flatcamGUI/ObjectUI.py:1946 flatcamGUI/PreferencesUI.py:4827 +#: flatcamGUI/ObjectUI.py:2274 flatcamGUI/PreferencesUI.py:5120 msgid "Export CNC Code" msgstr "CNC-Code exportieren" -#: flatcamGUI/ObjectUI.py:1948 flatcamGUI/PreferencesUI.py:4768 -#: flatcamGUI/PreferencesUI.py:4829 +#: flatcamGUI/ObjectUI.py:2276 flatcamGUI/PreferencesUI.py:5061 +#: flatcamGUI/PreferencesUI.py:5122 msgid "" "Export and save G-Code to\n" "make this object to a file." @@ -8531,12 +8906,12 @@ msgstr "" "Exportieren und speichern Sie den G-Code nach\n" "Machen Sie dieses Objekt in eine Datei." -#: flatcamGUI/ObjectUI.py:1954 +#: flatcamGUI/ObjectUI.py:2282 msgid "Prepend to CNC Code" msgstr "CNC-Code voranstellen" -#: flatcamGUI/ObjectUI.py:1956 flatcamGUI/ObjectUI.py:1963 -#: flatcamGUI/PreferencesUI.py:4784 +#: flatcamGUI/ObjectUI.py:2284 flatcamGUI/ObjectUI.py:2291 +#: flatcamGUI/PreferencesUI.py:5077 msgid "" "Type here any G-Code commands you would\n" "like to add at the beginning of the G-Code file." @@ -8544,12 +8919,12 @@ msgstr "" "Geben Sie hier alle G-Code-Befehle ein\n" "die Sie am Anfang der G-Code-Datei hinzufügen möchten." -#: flatcamGUI/ObjectUI.py:1969 +#: flatcamGUI/ObjectUI.py:2297 msgid "Append to CNC Code" msgstr "An CNC Code anhängen" -#: flatcamGUI/ObjectUI.py:1971 flatcamGUI/ObjectUI.py:1979 -#: flatcamGUI/PreferencesUI.py:4800 +#: flatcamGUI/ObjectUI.py:2299 flatcamGUI/ObjectUI.py:2307 +#: flatcamGUI/PreferencesUI.py:5093 msgid "" "Type here any G-Code commands you would\n" "like to append to the generated file.\n" @@ -8559,11 +8934,11 @@ msgstr "" "die Sie an die generierte Datei anhängen möchten.\n" "z.B.: M2 (Programmende)" -#: flatcamGUI/ObjectUI.py:1993 flatcamGUI/PreferencesUI.py:4835 +#: flatcamGUI/ObjectUI.py:2321 flatcamGUI/PreferencesUI.py:5128 msgid "Toolchange G-Code" msgstr "Werkzeugwechsel G-Code" -#: flatcamGUI/ObjectUI.py:1996 flatcamGUI/PreferencesUI.py:4838 +#: flatcamGUI/ObjectUI.py:2324 flatcamGUI/PreferencesUI.py:5131 msgid "" "Type here any G-Code commands you would\n" "like to be executed when Toolchange event is encountered.\n" @@ -8585,7 +8960,7 @@ msgstr "" "das hat \"toolchange_custom\" im Namen und das ist gebaut\n" "mit der \"Toolchange Custom\" -Prozessordatei als Vorlage." -#: flatcamGUI/ObjectUI.py:2011 +#: flatcamGUI/ObjectUI.py:2339 msgid "" "Type here any G-Code commands you would\n" "like to be executed when Toolchange event is encountered.\n" @@ -8606,11 +8981,11 @@ msgstr "" " \n" "\"Toolchange Custom\" -Prozessordatei erzeugt wurde." -#: flatcamGUI/ObjectUI.py:2026 flatcamGUI/PreferencesUI.py:4877 +#: flatcamGUI/ObjectUI.py:2354 flatcamGUI/PreferencesUI.py:5170 msgid "Use Toolchange Macro" msgstr "Benutze das Werkzeugwechselmakro" -#: flatcamGUI/ObjectUI.py:2028 flatcamGUI/PreferencesUI.py:4879 +#: flatcamGUI/ObjectUI.py:2356 flatcamGUI/PreferencesUI.py:5172 msgid "" "Check this box if you want to use\n" "a Custom Toolchange GCode (macro)." @@ -8618,7 +8993,7 @@ msgstr "" "Aktivieren Sie dieses Kontrollkästchen, wenn Sie verwenden möchten\n" "ein benutzerdefiniertes Werkzeug ändert GCode (Makro)." -#: flatcamGUI/ObjectUI.py:2036 flatcamGUI/PreferencesUI.py:4891 +#: flatcamGUI/ObjectUI.py:2364 flatcamGUI/PreferencesUI.py:5184 msgid "" "A list of the FlatCAM variables that can be used\n" "in the Toolchange event.\n" @@ -8628,74 +9003,76 @@ msgstr "" "im Werkzeugwechselereignis.\n" "Sie müssen mit dem \"%\" -Symbol umgeben sein" -#: flatcamGUI/ObjectUI.py:2043 flatcamGUI/PreferencesUI.py:2447 -#: flatcamGUI/PreferencesUI.py:3555 flatcamGUI/PreferencesUI.py:4347 -#: flatcamGUI/PreferencesUI.py:4898 flatcamGUI/PreferencesUI.py:5017 -#: flatcamGUI/PreferencesUI.py:5301 flatcamGUI/PreferencesUI.py:5458 -#: flatcamGUI/PreferencesUI.py:5676 flatcamGUI/PreferencesUI.py:5973 -#: flatcamGUI/PreferencesUI.py:6224 flatcamGUI/PreferencesUI.py:6438 -#: flatcamGUI/PreferencesUI.py:6663 flatcamGUI/PreferencesUI.py:6685 -#: flatcamGUI/PreferencesUI.py:6909 flatcamGUI/PreferencesUI.py:6946 -#: flatcamGUI/PreferencesUI.py:7140 flatcamGUI/PreferencesUI.py:7394 -#: flatcamGUI/PreferencesUI.py:7510 flatcamTools/ToolCopperThieving.py:89 -#: flatcamTools/ToolFiducials.py:149 flatcamTools/ToolNonCopperClear.py:315 +#: flatcamGUI/ObjectUI.py:2371 flatcamGUI/PreferencesUI.py:2627 +#: flatcamGUI/PreferencesUI.py:3833 flatcamGUI/PreferencesUI.py:4640 +#: flatcamGUI/PreferencesUI.py:5191 flatcamGUI/PreferencesUI.py:5310 +#: flatcamGUI/PreferencesUI.py:5640 flatcamGUI/PreferencesUI.py:5797 +#: flatcamGUI/PreferencesUI.py:6164 flatcamGUI/PreferencesUI.py:6461 +#: flatcamGUI/PreferencesUI.py:6711 flatcamGUI/PreferencesUI.py:6942 +#: flatcamGUI/PreferencesUI.py:7169 flatcamGUI/PreferencesUI.py:7191 +#: flatcamGUI/PreferencesUI.py:7415 flatcamGUI/PreferencesUI.py:7452 +#: flatcamGUI/PreferencesUI.py:7646 flatcamGUI/PreferencesUI.py:7900 +#: flatcamGUI/PreferencesUI.py:8016 flatcamGUI/PreferencesUI.py:8135 +#: flatcamGUI/PreferencesUI.py:8347 flatcamGUI/PreferencesUI.py:8556 +#: flatcamTools/ToolCopperThieving.py:90 flatcamTools/ToolFiducials.py:149 +#: flatcamTools/ToolInvertGerber.py:82 msgid "Parameters" msgstr "Parameters" -#: flatcamGUI/ObjectUI.py:2046 flatcamGUI/PreferencesUI.py:4903 +#: flatcamGUI/ObjectUI.py:2374 flatcamGUI/PreferencesUI.py:5196 msgid "FlatCAM CNC parameters" msgstr "FlatCAM CNC-Parameter" -#: flatcamGUI/ObjectUI.py:2047 flatcamGUI/PreferencesUI.py:4908 +#: flatcamGUI/ObjectUI.py:2375 flatcamGUI/PreferencesUI.py:5201 msgid "tool number" msgstr "Werkzeugnummer" -#: flatcamGUI/ObjectUI.py:2048 flatcamGUI/PreferencesUI.py:4909 +#: flatcamGUI/ObjectUI.py:2376 flatcamGUI/PreferencesUI.py:5202 msgid "tool diameter" msgstr "Werkzeugdurchmesser" -#: flatcamGUI/ObjectUI.py:2049 flatcamGUI/PreferencesUI.py:4910 +#: flatcamGUI/ObjectUI.py:2377 flatcamGUI/PreferencesUI.py:5203 msgid "for Excellon, total number of drills" msgstr "für Excellon die Gesamtzahl der Bohrer" -#: flatcamGUI/ObjectUI.py:2051 flatcamGUI/PreferencesUI.py:4912 +#: flatcamGUI/ObjectUI.py:2379 flatcamGUI/PreferencesUI.py:5205 msgid "X coord for Toolchange" msgstr "X-Koordinate für Werkzeugwechsel" -#: flatcamGUI/ObjectUI.py:2052 flatcamGUI/PreferencesUI.py:4913 +#: flatcamGUI/ObjectUI.py:2380 flatcamGUI/PreferencesUI.py:5206 msgid "Y coord for Toolchange" msgstr "Y-Koordinate für Werkzeugwechsel" -#: flatcamGUI/ObjectUI.py:2053 flatcamGUI/PreferencesUI.py:4915 +#: flatcamGUI/ObjectUI.py:2381 flatcamGUI/PreferencesUI.py:5208 msgid "Z coord for Toolchange" msgstr "Z-Koordinate für Werkzeugwechsel" -#: flatcamGUI/ObjectUI.py:2054 +#: flatcamGUI/ObjectUI.py:2382 msgid "depth where to cut" msgstr "tiefe wo zu schneiden" -#: flatcamGUI/ObjectUI.py:2055 +#: flatcamGUI/ObjectUI.py:2383 msgid "height where to travel" msgstr "Höhe, wohin man reist" -#: flatcamGUI/ObjectUI.py:2056 flatcamGUI/PreferencesUI.py:4918 +#: flatcamGUI/ObjectUI.py:2384 flatcamGUI/PreferencesUI.py:5211 msgid "the step value for multidepth cut" msgstr "der Schrittwert für den mehrstufigen Schnitt" -#: flatcamGUI/ObjectUI.py:2058 flatcamGUI/PreferencesUI.py:4920 +#: flatcamGUI/ObjectUI.py:2386 flatcamGUI/PreferencesUI.py:5213 msgid "the value for the spindle speed" msgstr "der Wert für die Spindeldrehzahl" -#: flatcamGUI/ObjectUI.py:2060 +#: flatcamGUI/ObjectUI.py:2388 msgid "time to dwell to allow the spindle to reach it's set RPM" msgstr "" "Zeit zum Verweilen, damit die Spindel die eingestellte Drehzahl erreicht" -#: flatcamGUI/ObjectUI.py:2076 +#: flatcamGUI/ObjectUI.py:2404 msgid "View CNC Code" msgstr "CNC-Code anzeigen" -#: flatcamGUI/ObjectUI.py:2078 +#: flatcamGUI/ObjectUI.py:2406 msgid "" "Opens TAB to view/modify/print G-Code\n" "file." @@ -8703,11 +9080,11 @@ msgstr "" "Öffnet die Registerkarte zum Anzeigen / Ändern / Drucken von G-Code\n" "Datei." -#: flatcamGUI/ObjectUI.py:2083 +#: flatcamGUI/ObjectUI.py:2411 msgid "Save CNC Code" msgstr "CNC-Code speichern" -#: flatcamGUI/ObjectUI.py:2085 +#: flatcamGUI/ObjectUI.py:2413 msgid "" "Opens dialog to save G-Code\n" "file." @@ -8715,85 +9092,81 @@ msgstr "" "Öffnet den Dialog zum Speichern des G-Codes\n" "Datei." -#: flatcamGUI/ObjectUI.py:2116 +#: flatcamGUI/ObjectUI.py:2447 msgid "Script Object" msgstr "Skriptobjekt" -#: flatcamGUI/ObjectUI.py:2138 flatcamGUI/ObjectUI.py:2211 +#: flatcamGUI/ObjectUI.py:2467 flatcamGUI/ObjectUI.py:2541 msgid "Auto Completer" msgstr "Auto-Vervollständiger" -#: flatcamGUI/ObjectUI.py:2140 +#: flatcamGUI/ObjectUI.py:2469 msgid "This selects if the auto completer is enabled in the Script Editor." msgstr "" "Hiermit wird ausgewählt, ob der automatische Vervollständiger im Skript-" "Editor aktiviert ist." -#: flatcamGUI/ObjectUI.py:2182 +#: flatcamGUI/ObjectUI.py:2514 msgid "Document Object" msgstr "Dokumentobjekt" -#: flatcamGUI/ObjectUI.py:2213 +#: flatcamGUI/ObjectUI.py:2543 msgid "This selects if the auto completer is enabled in the Document Editor." msgstr "" "Hiermit wird ausgewählt, ob der automatische Vervollständiger im " "Dokumenteditor aktiviert ist." -#: flatcamGUI/ObjectUI.py:2231 +#: flatcamGUI/ObjectUI.py:2561 msgid "Font Type" msgstr "Schriftart" -#: flatcamGUI/ObjectUI.py:2248 flatcamGUI/PreferencesUI.py:1103 +#: flatcamGUI/ObjectUI.py:2578 flatcamGUI/PreferencesUI.py:1278 msgid "Font Size" msgstr "Schriftgröße" -#: flatcamGUI/ObjectUI.py:2284 +#: flatcamGUI/ObjectUI.py:2614 msgid "Alignment" msgstr "Ausrichtung" -#: flatcamGUI/ObjectUI.py:2289 +#: flatcamGUI/ObjectUI.py:2619 msgid "Align Left" msgstr "Linksbündig" -#: flatcamGUI/ObjectUI.py:2294 -msgid "Center" -msgstr "Center" - -#: flatcamGUI/ObjectUI.py:2299 +#: flatcamGUI/ObjectUI.py:2629 msgid "Align Right" msgstr "Rechts ausrichten" -#: flatcamGUI/ObjectUI.py:2304 +#: flatcamGUI/ObjectUI.py:2634 msgid "Justify" msgstr "Rechtfertigen" -#: flatcamGUI/ObjectUI.py:2311 +#: flatcamGUI/ObjectUI.py:2641 msgid "Font Color" msgstr "Schriftfarbe" -#: flatcamGUI/ObjectUI.py:2313 +#: flatcamGUI/ObjectUI.py:2643 msgid "Set the font color for the selected text" msgstr "Stellen Sie die Schriftfarbe für den ausgewählten Text ein" -#: flatcamGUI/ObjectUI.py:2327 +#: flatcamGUI/ObjectUI.py:2657 msgid "Selection Color" msgstr "Auswahlfarbe" -#: flatcamGUI/ObjectUI.py:2329 +#: flatcamGUI/ObjectUI.py:2659 msgid "Set the selection color when doing text selection." msgstr "Stellen Sie die Auswahlfarbe bei der Textauswahl ein." -#: flatcamGUI/ObjectUI.py:2343 +#: flatcamGUI/ObjectUI.py:2673 msgid "Tab Size" msgstr "Tab-Größe" -#: flatcamGUI/ObjectUI.py:2345 +#: flatcamGUI/ObjectUI.py:2675 msgid "Set the tab size. In pixels. Default value is 80 pixels." msgstr "" "Stellen Sie die Größe der Registerkarte ein. In Pixeln. Der Standardwert " "beträgt 80 Pixel." -#: flatcamGUI/PlotCanvasLegacy.py:1254 +#: flatcamGUI/PlotCanvasLegacy.py:1301 msgid "" "Could not annotate due of a difference between the number of text elements " "and the number of text positions." @@ -8801,31 +9174,35 @@ msgstr "" "Aufgrund eines Unterschieds zwischen der Anzahl der Textelemente und der " "Anzahl der Textpositionen konnten keine Anmerkungen erstellt werden." -#: flatcamGUI/PreferencesUI.py:324 +#: flatcamGUI/PreferencesUI.py:343 msgid "GUI Preferences" msgstr "GUI-Einstellungen" -#: flatcamGUI/PreferencesUI.py:334 +#: flatcamGUI/PreferencesUI.py:353 msgid "Theme" msgstr "Thema" -#: flatcamGUI/PreferencesUI.py:336 -msgid "Select a theme for FlatCAM." -msgstr "Wählen Sie ein Thema für FlatCAM." +#: flatcamGUI/PreferencesUI.py:355 +msgid "" +"Select a theme for FlatCAM.\n" +"It will theme the plot area." +msgstr "" +"Wählen Sie ein Thema für FlatCAM.\n" +"Es wird den Handlungsbereich thematisieren." -#: flatcamGUI/PreferencesUI.py:340 +#: flatcamGUI/PreferencesUI.py:360 msgid "Light" msgstr "Licht" -#: flatcamGUI/PreferencesUI.py:341 +#: flatcamGUI/PreferencesUI.py:361 msgid "Dark" msgstr "Dunkel" -#: flatcamGUI/PreferencesUI.py:348 +#: flatcamGUI/PreferencesUI.py:368 msgid "Use Gray Icons" msgstr "Verwenden Sie graue Symbole" -#: flatcamGUI/PreferencesUI.py:350 +#: flatcamGUI/PreferencesUI.py:370 msgid "" "Check this box to use a set of icons with\n" "a lighter (gray) color. To be used when a\n" @@ -8836,23 +9213,25 @@ msgstr "" "eine hellere (graue) Farbe. Zu verwenden, wenn a\n" "Volldunkles Thema wird angewendet." -#: flatcamGUI/PreferencesUI.py:356 +#: flatcamGUI/PreferencesUI.py:376 msgid "Apply Theme" msgstr "Thema anwenden" -#: flatcamGUI/PreferencesUI.py:358 +#: flatcamGUI/PreferencesUI.py:378 msgid "" "Select a theme for FlatCAM.\n" +"It will theme the plot area.\n" "The application will restart after change." msgstr "" "Wählen Sie ein Thema für FlatCAM.\n" -"Die Anwendung wird nach einer Änderung neu gestartet." +"Es wird den Handlungsbereich thematisieren.\n" +"Die Anwendung wird nach der Änderung neu gestartet." -#: flatcamGUI/PreferencesUI.py:369 +#: flatcamGUI/PreferencesUI.py:390 msgid "Layout" msgstr "Layout" -#: flatcamGUI/PreferencesUI.py:371 +#: flatcamGUI/PreferencesUI.py:392 msgid "" "Select an layout for FlatCAM.\n" "It is applied immediately." @@ -8860,11 +9239,11 @@ msgstr "" "Wählen Sie ein Layout für FlatCAM.\n" "Es wird sofort angewendet." -#: flatcamGUI/PreferencesUI.py:390 +#: flatcamGUI/PreferencesUI.py:412 msgid "Style" msgstr "Stil" -#: flatcamGUI/PreferencesUI.py:392 +#: flatcamGUI/PreferencesUI.py:414 msgid "" "Select an style for FlatCAM.\n" "It will be applied at the next app start." @@ -8872,11 +9251,11 @@ msgstr "" "Wählen Sie einen Stil für FlatCAM.\n" "Es wird beim nächsten Start der App angewendet." -#: flatcamGUI/PreferencesUI.py:406 +#: flatcamGUI/PreferencesUI.py:428 msgid "Activate HDPI Support" msgstr "Aktivieren Sie die HDPI-Unterstützung" -#: flatcamGUI/PreferencesUI.py:408 +#: flatcamGUI/PreferencesUI.py:430 msgid "" "Enable High DPI support for FlatCAM.\n" "It will be applied at the next app start." @@ -8884,11 +9263,11 @@ msgstr "" "Aktivieren Sie die High DPI-Unterstützung für FlatCAM.\n" "Es wird beim nächsten Start der App angewendet." -#: flatcamGUI/PreferencesUI.py:422 +#: flatcamGUI/PreferencesUI.py:444 msgid "Display Hover Shape" msgstr "Schwebeflugform anzeigen" -#: flatcamGUI/PreferencesUI.py:424 +#: flatcamGUI/PreferencesUI.py:446 msgid "" "Enable display of a hover shape for FlatCAM objects.\n" "It is displayed whenever the mouse cursor is hovering\n" @@ -8898,11 +9277,11 @@ msgstr "" "Es wird angezeigt, wenn sich der Mauszeiger in der Maus befindet\n" "über jede Art von nicht ausgewähltem Objekt." -#: flatcamGUI/PreferencesUI.py:431 +#: flatcamGUI/PreferencesUI.py:453 msgid "Display Selection Shape" msgstr "Auswahlform anzeigen" -#: flatcamGUI/PreferencesUI.py:433 +#: flatcamGUI/PreferencesUI.py:455 msgid "" "Enable the display of a selection shape for FlatCAM objects.\n" "It is displayed whenever the mouse selects an object\n" @@ -8914,29 +9293,29 @@ msgstr "" "entweder durch Klicken oder Ziehen der Maus von links nach rechts oder\n" "rechts nach links." -#: flatcamGUI/PreferencesUI.py:446 +#: flatcamGUI/PreferencesUI.py:468 msgid "Left-Right Selection Color" msgstr "Links-Rechts-Auswahlfarbe" -#: flatcamGUI/PreferencesUI.py:449 flatcamGUI/PreferencesUI.py:515 -#: flatcamGUI/PreferencesUI.py:1882 flatcamGUI/PreferencesUI.py:2903 -#: flatcamGUI/PreferencesUI.py:3894 flatcamGUI/PreferencesUI.py:4534 -#: flatcamGUI/PreferencesUI.py:4600 flatcamTools/ToolRulesCheck.py:179 +#: flatcamGUI/PreferencesUI.py:471 flatcamGUI/PreferencesUI.py:537 +#: flatcamGUI/PreferencesUI.py:2062 flatcamGUI/PreferencesUI.py:3085 +#: flatcamGUI/PreferencesUI.py:4174 flatcamGUI/PreferencesUI.py:4827 +#: flatcamGUI/PreferencesUI.py:4893 flatcamTools/ToolRulesCheck.py:186 msgid "Outline" msgstr "Gliederung" -#: flatcamGUI/PreferencesUI.py:451 +#: flatcamGUI/PreferencesUI.py:473 msgid "Set the line color for the 'left to right' selection box." msgstr "" "Legen Sie die Linienfarbe für das Auswahlfeld \"von links nach rechts\" fest." -#: flatcamGUI/PreferencesUI.py:465 flatcamGUI/PreferencesUI.py:532 -#: flatcamGUI/PreferencesUI.py:1899 flatcamGUI/PreferencesUI.py:2920 -#: flatcamGUI/PreferencesUI.py:4551 flatcamGUI/PreferencesUI.py:4617 +#: flatcamGUI/PreferencesUI.py:487 flatcamGUI/PreferencesUI.py:554 +#: flatcamGUI/PreferencesUI.py:2079 flatcamGUI/PreferencesUI.py:3102 +#: flatcamGUI/PreferencesUI.py:4844 flatcamGUI/PreferencesUI.py:4910 msgid "Fill" msgstr "Füll" -#: flatcamGUI/PreferencesUI.py:467 +#: flatcamGUI/PreferencesUI.py:489 msgid "" "Set the fill color for the selection box\n" "in case that the selection is done from left to right.\n" @@ -8948,28 +9327,28 @@ msgstr "" "Die ersten 6 Ziffern sind die Farbe und die letzten 2\n" "Ziffern sind für Alpha (Transparenz)." -#: flatcamGUI/PreferencesUI.py:485 flatcamGUI/PreferencesUI.py:552 -#: flatcamGUI/PreferencesUI.py:1918 flatcamGUI/PreferencesUI.py:2939 -#: flatcamGUI/PreferencesUI.py:4570 +#: flatcamGUI/PreferencesUI.py:507 flatcamGUI/PreferencesUI.py:574 +#: flatcamGUI/PreferencesUI.py:2098 flatcamGUI/PreferencesUI.py:3121 +#: flatcamGUI/PreferencesUI.py:4863 msgid "Alpha" msgstr "Alpha" -#: flatcamGUI/PreferencesUI.py:487 +#: flatcamGUI/PreferencesUI.py:509 msgid "Set the fill transparency for the 'left to right' selection box." msgstr "" "Legen Sie die Füllungstransparenz für das Auswahlfeld \"von links nach rechts" "\" fest." -#: flatcamGUI/PreferencesUI.py:511 +#: flatcamGUI/PreferencesUI.py:533 msgid "Right-Left Selection Color" msgstr "Rechts-Links-Auswahlfarbe" -#: flatcamGUI/PreferencesUI.py:517 +#: flatcamGUI/PreferencesUI.py:539 msgid "Set the line color for the 'right to left' selection box." msgstr "" "Legen Sie die Linienfarbe für das Auswahlfeld 'von rechts nach links' fest." -#: flatcamGUI/PreferencesUI.py:534 +#: flatcamGUI/PreferencesUI.py:556 msgid "" "Set the fill color for the selection box\n" "in case that the selection is done from right to left.\n" @@ -8981,44 +9360,44 @@ msgstr "" "Die ersten 6 Ziffern sind die Farbe und die letzten 2\n" "Ziffern sind für Alpha (Transparenz)." -#: flatcamGUI/PreferencesUI.py:554 +#: flatcamGUI/PreferencesUI.py:576 msgid "Set the fill transparency for selection 'right to left' box." msgstr "" "Legen Sie die Füllungstransparenz für die Auswahl von rechts nach links fest." -#: flatcamGUI/PreferencesUI.py:581 +#: flatcamGUI/PreferencesUI.py:603 msgid "Editor Color" msgstr "Editorfarbe" -#: flatcamGUI/PreferencesUI.py:585 +#: flatcamGUI/PreferencesUI.py:607 msgid "Drawing" msgstr "Zeichnung" -#: flatcamGUI/PreferencesUI.py:587 +#: flatcamGUI/PreferencesUI.py:609 msgid "Set the color for the shape." msgstr "Legen Sie die Farbe für die Form fest." -#: flatcamGUI/PreferencesUI.py:604 +#: flatcamGUI/PreferencesUI.py:626 msgid "Set the color of the shape when selected." msgstr "Legt die Farbe der Form fest, wenn sie ausgewählt wird." -#: flatcamGUI/PreferencesUI.py:627 +#: flatcamGUI/PreferencesUI.py:649 msgid "Project Items Color" msgstr "Projektelemente Farbe" -#: flatcamGUI/PreferencesUI.py:631 +#: flatcamGUI/PreferencesUI.py:653 msgid "Enabled" msgstr "Aktiviert" -#: flatcamGUI/PreferencesUI.py:633 +#: flatcamGUI/PreferencesUI.py:655 msgid "Set the color of the items in Project Tab Tree." msgstr "Legen Sie die Farbe der Elemente im Projektregisterbaum fest." -#: flatcamGUI/PreferencesUI.py:647 +#: flatcamGUI/PreferencesUI.py:669 msgid "Disabled" msgstr "Deaktiviert" -#: flatcamGUI/PreferencesUI.py:649 +#: flatcamGUI/PreferencesUI.py:671 msgid "" "Set the color of the items in Project Tab Tree,\n" "for the case when the items are disabled." @@ -9026,7 +9405,11 @@ msgstr "" "Legen Sie die Farbe der Elemente in der Projektregisterkarte fest.\n" "für den Fall, wenn die Elemente deaktiviert sind." -#: flatcamGUI/PreferencesUI.py:667 +#: flatcamGUI/PreferencesUI.py:687 +msgid "Project AutoHide" +msgstr "Projekt autoausblenden" + +#: flatcamGUI/PreferencesUI.py:689 msgid "" "Check this box if you want the project/selected/tool tab area to\n" "hide automatically when there are no objects loaded and\n" @@ -9038,43 +9421,43 @@ msgstr "" "keine Objekte geladen sind und anzeigen, wenn ein \n" "neues Objekt erstellt wird." -#: flatcamGUI/PreferencesUI.py:934 +#: flatcamGUI/PreferencesUI.py:1109 msgid "App Settings" msgstr "App Einstellungen" -#: flatcamGUI/PreferencesUI.py:955 +#: flatcamGUI/PreferencesUI.py:1130 msgid "Grid Settings" msgstr "Rastereinstellungen" -#: flatcamGUI/PreferencesUI.py:959 +#: flatcamGUI/PreferencesUI.py:1134 msgid "X value" msgstr "X-Wert" -#: flatcamGUI/PreferencesUI.py:961 +#: flatcamGUI/PreferencesUI.py:1136 msgid "This is the Grid snap value on X axis." msgstr "Dies ist der Rasterfangwert auf der X-Achse." -#: flatcamGUI/PreferencesUI.py:971 +#: flatcamGUI/PreferencesUI.py:1146 msgid "Y value" msgstr "Y-Wert" -#: flatcamGUI/PreferencesUI.py:973 +#: flatcamGUI/PreferencesUI.py:1148 msgid "This is the Grid snap value on Y axis." msgstr "Dies ist der Rasterfangwert auf der Y-Achse." -#: flatcamGUI/PreferencesUI.py:983 +#: flatcamGUI/PreferencesUI.py:1158 msgid "Snap Max" msgstr "Fang Max" -#: flatcamGUI/PreferencesUI.py:998 +#: flatcamGUI/PreferencesUI.py:1173 msgid "Workspace Settings" msgstr "Arbeitsbereichseinstellungen" -#: flatcamGUI/PreferencesUI.py:1001 +#: flatcamGUI/PreferencesUI.py:1176 msgid "Active" msgstr "Aktiv" -#: flatcamGUI/PreferencesUI.py:1003 +#: flatcamGUI/PreferencesUI.py:1178 msgid "" "Draw a delimiting rectangle on canvas.\n" "The purpose is to illustrate the limits for our work." @@ -9082,7 +9465,7 @@ msgstr "" "Zeichnen Sie ein begrenzendes Rechteck auf die Leinwand.\n" "Ziel ist es, die Grenzen unserer Arbeit aufzuzeigen." -#: flatcamGUI/PreferencesUI.py:1011 +#: flatcamGUI/PreferencesUI.py:1186 msgid "" "Select the type of rectangle to be used on canvas,\n" "as valid workspace." @@ -9090,12 +9473,12 @@ msgstr "" "Wählen Sie den Typ des Rechtecks für die Leinwand aus.\n" "als gültiger Arbeitsbereich." -#: flatcamGUI/PreferencesUI.py:1077 +#: flatcamGUI/PreferencesUI.py:1252 msgid "Orientation" msgstr "Orientierung" -#: flatcamGUI/PreferencesUI.py:1078 flatcamGUI/PreferencesUI.py:5884 -#: flatcamTools/ToolFilm.py:420 +#: flatcamGUI/PreferencesUI.py:1253 flatcamGUI/PreferencesUI.py:6372 +#: flatcamTools/ToolFilm.py:422 msgid "" "Can be:\n" "- Portrait\n" @@ -9105,21 +9488,21 @@ msgstr "" "- Hochformat\n" "- Querformat" -#: flatcamGUI/PreferencesUI.py:1082 flatcamGUI/PreferencesUI.py:5888 -#: flatcamTools/ToolFilm.py:424 +#: flatcamGUI/PreferencesUI.py:1257 flatcamGUI/PreferencesUI.py:6376 +#: flatcamTools/ToolFilm.py:426 msgid "Portrait" msgstr "Hochformat" -#: flatcamGUI/PreferencesUI.py:1083 flatcamGUI/PreferencesUI.py:5889 -#: flatcamTools/ToolFilm.py:425 +#: flatcamGUI/PreferencesUI.py:1258 flatcamGUI/PreferencesUI.py:6377 +#: flatcamTools/ToolFilm.py:427 msgid "Landscape" msgstr "Querformat" -#: flatcamGUI/PreferencesUI.py:1107 +#: flatcamGUI/PreferencesUI.py:1282 msgid "Notebook" msgstr "Notizbuch" -#: flatcamGUI/PreferencesUI.py:1109 +#: flatcamGUI/PreferencesUI.py:1284 msgid "" "This sets the font size for the elements found in the Notebook.\n" "The notebook is the collapsible area in the left side of the GUI,\n" @@ -9131,19 +9514,19 @@ msgstr "" "Benutzeroberfläche.\n" "und schließen Sie die Registerkarten Projekt, Ausgewählt und Werkzeug ein." -#: flatcamGUI/PreferencesUI.py:1128 +#: flatcamGUI/PreferencesUI.py:1303 msgid "Axis" msgstr "Achse" -#: flatcamGUI/PreferencesUI.py:1130 +#: flatcamGUI/PreferencesUI.py:1305 msgid "This sets the font size for canvas axis." msgstr "Hiermit wird die Schriftgröße für die Zeichenbereichsachse festgelegt." -#: flatcamGUI/PreferencesUI.py:1147 +#: flatcamGUI/PreferencesUI.py:1322 msgid "Textbox" msgstr "Textfeld" -#: flatcamGUI/PreferencesUI.py:1149 +#: flatcamGUI/PreferencesUI.py:1324 msgid "" "This sets the font size for the Textbox GUI\n" "elements that are used in FlatCAM." @@ -9151,15 +9534,15 @@ msgstr "" "Hiermit wird die Schriftgröße für die Textbox-GUI festgelegt\n" "Elemente, die in FlatCAM verwendet werden." -#: flatcamGUI/PreferencesUI.py:1175 +#: flatcamGUI/PreferencesUI.py:1350 msgid "Mouse Settings" msgstr "Mauseinstellungen" -#: flatcamGUI/PreferencesUI.py:1179 +#: flatcamGUI/PreferencesUI.py:1354 msgid "Cursor Shape" msgstr "Mauszeiger Form" -#: flatcamGUI/PreferencesUI.py:1181 +#: flatcamGUI/PreferencesUI.py:1356 msgid "" "Choose a mouse cursor shape.\n" "- Small -> with a customizable size.\n" @@ -9169,47 +9552,47 @@ msgstr "" "- Klein -> mit einer anpassbaren Größe.\n" "- Groß -> Unendliche Linien" -#: flatcamGUI/PreferencesUI.py:1187 +#: flatcamGUI/PreferencesUI.py:1362 msgid "Small" msgstr "Klein" -#: flatcamGUI/PreferencesUI.py:1188 +#: flatcamGUI/PreferencesUI.py:1363 msgid "Big" msgstr "Groß" -#: flatcamGUI/PreferencesUI.py:1195 +#: flatcamGUI/PreferencesUI.py:1370 msgid "Cursor Size" msgstr "Mauszeigergröße" -#: flatcamGUI/PreferencesUI.py:1197 +#: flatcamGUI/PreferencesUI.py:1372 msgid "Set the size of the mouse cursor, in pixels." msgstr "Stellen Sie die Größe des Mauszeigers in Pixel ein." -#: flatcamGUI/PreferencesUI.py:1208 +#: flatcamGUI/PreferencesUI.py:1383 msgid "Cursor Width" msgstr "Mauszeiger Breite" -#: flatcamGUI/PreferencesUI.py:1210 +#: flatcamGUI/PreferencesUI.py:1385 msgid "Set the line width of the mouse cursor, in pixels." msgstr "Legen Sie die Linienbreite des Mauszeigers in Pixel fest." -#: flatcamGUI/PreferencesUI.py:1221 flatcamGUI/PreferencesUI.py:1228 +#: flatcamGUI/PreferencesUI.py:1396 flatcamGUI/PreferencesUI.py:1403 msgid "Cursor Color" msgstr "Mauszeigerfarbe" -#: flatcamGUI/PreferencesUI.py:1223 +#: flatcamGUI/PreferencesUI.py:1398 msgid "Check this box to color mouse cursor." msgstr "Aktivieren Sie dieses Kontrollkästchen, um den Mauszeiger einzufärben." -#: flatcamGUI/PreferencesUI.py:1230 +#: flatcamGUI/PreferencesUI.py:1405 msgid "Set the color of the mouse cursor." msgstr "Stellen Sie die Farbe des Mauszeigers ein." -#: flatcamGUI/PreferencesUI.py:1253 +#: flatcamGUI/PreferencesUI.py:1428 msgid "Pan Button" msgstr "Pan-Taste" -#: flatcamGUI/PreferencesUI.py:1255 +#: flatcamGUI/PreferencesUI.py:1430 msgid "" "Select the mouse button to use for panning:\n" "- MMB --> Middle Mouse Button\n" @@ -9219,35 +9602,35 @@ msgstr "" "- MMB -> Mittlere Maustaste\n" "- RMB -> Rechte Maustaste" -#: flatcamGUI/PreferencesUI.py:1259 +#: flatcamGUI/PreferencesUI.py:1434 msgid "MMB" msgstr "MMB" -#: flatcamGUI/PreferencesUI.py:1260 +#: flatcamGUI/PreferencesUI.py:1435 msgid "RMB" msgstr "RMB" -#: flatcamGUI/PreferencesUI.py:1266 +#: flatcamGUI/PreferencesUI.py:1441 msgid "Multiple Selection" msgstr "Mehrfachauswahl" -#: flatcamGUI/PreferencesUI.py:1268 +#: flatcamGUI/PreferencesUI.py:1443 msgid "Select the key used for multiple selection." msgstr "Wählen Sie den Schlüssel für die Mehrfachauswahl aus." -#: flatcamGUI/PreferencesUI.py:1270 +#: flatcamGUI/PreferencesUI.py:1445 msgid "CTRL" msgstr "STRG" -#: flatcamGUI/PreferencesUI.py:1271 +#: flatcamGUI/PreferencesUI.py:1446 msgid "SHIFT" msgstr "SHIFT" -#: flatcamGUI/PreferencesUI.py:1282 +#: flatcamGUI/PreferencesUI.py:1457 msgid "Delete object confirmation" msgstr "Objektbestätigung löschen" -#: flatcamGUI/PreferencesUI.py:1284 +#: flatcamGUI/PreferencesUI.py:1459 msgid "" "When checked the application will ask for user confirmation\n" "whenever the Delete object(s) event is triggered, either by\n" @@ -9258,11 +9641,11 @@ msgstr "" "löschen ausgelöst wird, entweder durch\n" "Menüverknüpfung oder Tastenkombination." -#: flatcamGUI/PreferencesUI.py:1291 +#: flatcamGUI/PreferencesUI.py:1466 msgid "\"Open\" behavior" msgstr "\"Offen\" -Verhalten" -#: flatcamGUI/PreferencesUI.py:1293 +#: flatcamGUI/PreferencesUI.py:1468 msgid "" "When checked the path for the last saved file is used when saving files,\n" "and the path for the last opened file is used when opening files.\n" @@ -9279,7 +9662,11 @@ msgstr "" "Dateien zuletzt verwendet: entweder der Pfad\n" "Pfad zum Speichern von Dateien oder Pfad zum Öffnen von Dateien." -#: flatcamGUI/PreferencesUI.py:1304 +#: flatcamGUI/PreferencesUI.py:1477 +msgid "Enable ToolTips" +msgstr "QuickInfos aktivieren" + +#: flatcamGUI/PreferencesUI.py:1479 msgid "" "Check this box if you want to have toolTips displayed\n" "when hovering with mouse over items throughout the App." @@ -9288,11 +9675,11 @@ msgstr "" "sollen\n" "wenn Sie mit der Maus über Elemente in der App fahren." -#: flatcamGUI/PreferencesUI.py:1311 +#: flatcamGUI/PreferencesUI.py:1486 msgid "Allow Machinist Unsafe Settings" msgstr "Unsichere Maschineneinstellungen erlauben" -#: flatcamGUI/PreferencesUI.py:1313 +#: flatcamGUI/PreferencesUI.py:1488 msgid "" "If checked, some of the application settings will be allowed\n" "to have values that are usually unsafe to use.\n" @@ -9307,11 +9694,11 @@ msgstr "" "Wird beim Nächsten Programmstart wirksam\n" " << ACHTUNG>>: Ändern Sie das nicht, wenn Sie nicht wissen was Sie tun!" -#: flatcamGUI/PreferencesUI.py:1324 +#: flatcamGUI/PreferencesUI.py:1500 msgid "Bookmarks limit" msgstr "Lesezeichenlimit" -#: flatcamGUI/PreferencesUI.py:1326 +#: flatcamGUI/PreferencesUI.py:1502 msgid "" "The maximum number of bookmarks that may be installed in the menu.\n" "The number of bookmarks in the bookmark manager may be greater\n" @@ -9321,28 +9708,28 @@ msgstr "" "Die Anzahl der Lesezeichen im Lesezeichen-Manager ist möglicherweise größer\n" "Aber das Menü wird nur so viel enthalten." -#: flatcamGUI/PreferencesUI.py:1335 +#: flatcamGUI/PreferencesUI.py:1511 msgid "Activity Icon" msgstr "Aktivitätssymbol" -#: flatcamGUI/PreferencesUI.py:1337 +#: flatcamGUI/PreferencesUI.py:1513 msgid "Select the GIF that show activity when FlatCAM is active." msgstr "" "Wählen Sie das GIF aus, das die Aktivität anzeigt, wenn FlatCAM aktiv ist." -#: flatcamGUI/PreferencesUI.py:1395 +#: flatcamGUI/PreferencesUI.py:1571 msgid "App Preferences" msgstr "App-Einstellungen" -#: flatcamGUI/PreferencesUI.py:1405 flatcamGUI/PreferencesUI.py:1811 -#: flatcamGUI/PreferencesUI.py:2359 flatcamGUI/PreferencesUI.py:2804 -#: flatcamGUI/PreferencesUI.py:3417 flatcamTools/ToolDistance.py:49 -#: flatcamTools/ToolDistanceMin.py:49 flatcamTools/ToolPcbWizard.py:127 -#: flatcamTools/ToolProperties.py:152 +#: flatcamGUI/PreferencesUI.py:1581 flatcamGUI/PreferencesUI.py:1991 +#: flatcamGUI/PreferencesUI.py:2539 flatcamGUI/PreferencesUI.py:2986 +#: flatcamGUI/PreferencesUI.py:3695 flatcamTools/ToolDistance.py:56 +#: flatcamTools/ToolDistanceMin.py:50 flatcamTools/ToolPcbWizard.py:127 +#: flatcamTools/ToolProperties.py:154 msgid "Units" msgstr "Einheiten" -#: flatcamGUI/PreferencesUI.py:1406 +#: flatcamGUI/PreferencesUI.py:1582 msgid "" "The default value for FlatCAM units.\n" "Whatever is selected here is set every time\n" @@ -9352,22 +9739,22 @@ msgstr "" "Was hier ausgewählt wird, wird jedes Mal eingestellt\n" "FLatCAM wird gestartet." -#: flatcamGUI/PreferencesUI.py:1409 flatcamGUI/PreferencesUI.py:1817 -#: flatcamGUI/PreferencesUI.py:2365 flatcamGUI/PreferencesUI.py:2815 -#: flatcamGUI/PreferencesUI.py:3423 flatcamTools/ToolCalculators.py:62 +#: flatcamGUI/PreferencesUI.py:1585 flatcamGUI/PreferencesUI.py:1997 +#: flatcamGUI/PreferencesUI.py:2545 flatcamGUI/PreferencesUI.py:2997 +#: flatcamGUI/PreferencesUI.py:3701 flatcamTools/ToolCalculators.py:62 #: flatcamTools/ToolPcbWizard.py:126 msgid "MM" msgstr "MM" -#: flatcamGUI/PreferencesUI.py:1410 +#: flatcamGUI/PreferencesUI.py:1586 msgid "IN" msgstr "ZOLL" -#: flatcamGUI/PreferencesUI.py:1416 +#: flatcamGUI/PreferencesUI.py:1592 msgid "Precision MM" msgstr "Präzision in mm" -#: flatcamGUI/PreferencesUI.py:1418 +#: flatcamGUI/PreferencesUI.py:1594 msgid "" "The number of decimals used throughout the application\n" "when the set units are in METRIC system.\n" @@ -9378,11 +9765,11 @@ msgstr "" "wenn das Metrische Einheitensystem verwendet wird.\n" "Jede Änderung erfordert einen Neustart der Applikation." -#: flatcamGUI/PreferencesUI.py:1430 +#: flatcamGUI/PreferencesUI.py:1606 msgid "Precision INCH" msgstr "Präzision (Zoll)" -#: flatcamGUI/PreferencesUI.py:1432 +#: flatcamGUI/PreferencesUI.py:1608 msgid "" "The number of decimals used throughout the application\n" "when the set units are in INCH system.\n" @@ -9393,11 +9780,11 @@ msgstr "" "wenn das Imperiale (Inches) Einheitensystem verwendet wird.\n" "Jede Änderung erfordert einen Neustart der Applikation." -#: flatcamGUI/PreferencesUI.py:1444 +#: flatcamGUI/PreferencesUI.py:1620 msgid "Graphic Engine" msgstr "Grafik-Engine" -#: flatcamGUI/PreferencesUI.py:1445 +#: flatcamGUI/PreferencesUI.py:1621 msgid "" "Choose what graphic engine to use in FlatCAM.\n" "Legacy(2D) -> reduced functionality, slow performance but enhanced " @@ -9416,19 +9803,19 @@ msgstr "" "Intel HD3000 oder älter. In diesem Fall ist der Plotbereich daher schwarz\n" "Verwenden Sie den Legacy (2D) -Modus." -#: flatcamGUI/PreferencesUI.py:1451 +#: flatcamGUI/PreferencesUI.py:1627 msgid "Legacy(2D)" msgstr "Legacy (2D)" -#: flatcamGUI/PreferencesUI.py:1452 +#: flatcamGUI/PreferencesUI.py:1628 msgid "OpenGL(3D)" msgstr "OpenGL (3D)" -#: flatcamGUI/PreferencesUI.py:1464 +#: flatcamGUI/PreferencesUI.py:1640 msgid "APP. LEVEL" msgstr "Darstellung" -#: flatcamGUI/PreferencesUI.py:1465 +#: flatcamGUI/PreferencesUI.py:1641 msgid "" "Choose the default level of usage for FlatCAM.\n" "BASIC level -> reduced functionality, best for beginner's.\n" @@ -9444,11 +9831,11 @@ msgstr "" "Die Auswahl hier beeinflusst die Parameter in\n" "Die Registerkarte Ausgewählt für alle Arten von FlatCAM-Objekten." -#: flatcamGUI/PreferencesUI.py:1477 +#: flatcamGUI/PreferencesUI.py:1653 msgid "Portable app" msgstr "Portable Anwendung" -#: flatcamGUI/PreferencesUI.py:1478 +#: flatcamGUI/PreferencesUI.py:1654 msgid "" "Choose if the application should run as portable.\n" "\n" @@ -9462,19 +9849,19 @@ msgstr "" "Dies bedeutet, dass die Voreinstellungsdateien gespeichert werden\n" "Im Anwendungsordner, im Unterordner lib \\ config." -#: flatcamGUI/PreferencesUI.py:1491 +#: flatcamGUI/PreferencesUI.py:1667 msgid "Languages" msgstr "Sprachen" -#: flatcamGUI/PreferencesUI.py:1492 +#: flatcamGUI/PreferencesUI.py:1668 msgid "Set the language used throughout FlatCAM." msgstr "Stellen Sie die Sprache ein, die in FlatCAM verwendet wird." -#: flatcamGUI/PreferencesUI.py:1498 +#: flatcamGUI/PreferencesUI.py:1674 msgid "Apply Language" msgstr "Sprache anwend" -#: flatcamGUI/PreferencesUI.py:1499 +#: flatcamGUI/PreferencesUI.py:1675 msgid "" "Set the language used throughout FlatCAM.\n" "The app will restart after click." @@ -9482,33 +9869,33 @@ msgstr "" "Stellen Sie die in FlatCAM verwendete Sprache ein.\n" "Die App wird nach dem Klicken neu gestartet." -#: flatcamGUI/PreferencesUI.py:1513 +#: flatcamGUI/PreferencesUI.py:1689 msgid "Startup Settings" msgstr "Starteinstellungen" -#: flatcamGUI/PreferencesUI.py:1517 +#: flatcamGUI/PreferencesUI.py:1693 msgid "Splash Screen" msgstr "Begrüßungsbildschirm" -#: flatcamGUI/PreferencesUI.py:1519 +#: flatcamGUI/PreferencesUI.py:1695 msgid "Enable display of the splash screen at application startup." msgstr "" "Aktivieren Sie die Anzeige des Begrüßungsbildschirms beim Start der " "Anwendung." -#: flatcamGUI/PreferencesUI.py:1531 +#: flatcamGUI/PreferencesUI.py:1707 msgid "Sys Tray Icon" msgstr "Systray-Symbol" -#: flatcamGUI/PreferencesUI.py:1533 +#: flatcamGUI/PreferencesUI.py:1709 msgid "Enable display of FlatCAM icon in Sys Tray." msgstr "Anzeige des FlatCAM-Symbols in Systray aktivieren." -#: flatcamGUI/PreferencesUI.py:1538 +#: flatcamGUI/PreferencesUI.py:1714 msgid "Show Shell" msgstr "Shell anzeigen" -#: flatcamGUI/PreferencesUI.py:1540 +#: flatcamGUI/PreferencesUI.py:1716 msgid "" "Check this box if you want the shell to\n" "start automatically at startup." @@ -9517,11 +9904,11 @@ msgstr "" "möchten\n" "Beim Start automatisch starten." -#: flatcamGUI/PreferencesUI.py:1547 +#: flatcamGUI/PreferencesUI.py:1723 msgid "Show Project" msgstr "Projekt anzeigen" -#: flatcamGUI/PreferencesUI.py:1549 +#: flatcamGUI/PreferencesUI.py:1725 msgid "" "Check this box if you want the project/selected/tool tab area to\n" "to be shown automatically at startup." @@ -9531,11 +9918,11 @@ msgstr "" "angezeigt werden soll\n" "beim Start automatisch angezeigt werden." -#: flatcamGUI/PreferencesUI.py:1555 +#: flatcamGUI/PreferencesUI.py:1731 msgid "Version Check" msgstr "Versionsprüfung" -#: flatcamGUI/PreferencesUI.py:1557 +#: flatcamGUI/PreferencesUI.py:1733 msgid "" "Check this box if you want to check\n" "for a new version automatically at startup." @@ -9544,11 +9931,11 @@ msgstr "" "wenn Sie das Kontrollkästchen aktivieren möchten\n" "für eine neue Version automatisch beim Start." -#: flatcamGUI/PreferencesUI.py:1564 +#: flatcamGUI/PreferencesUI.py:1740 msgid "Send Statistics" msgstr "Statistiken senden" -#: flatcamGUI/PreferencesUI.py:1566 +#: flatcamGUI/PreferencesUI.py:1742 msgid "" "Check this box if you agree to send anonymous\n" "stats automatically at startup, to help improve FlatCAM." @@ -9557,11 +9944,11 @@ msgstr "" "zustimmen\n" "wird beim Start automatisch aktualisiert, um FlatCAM zu verbessern." -#: flatcamGUI/PreferencesUI.py:1580 +#: flatcamGUI/PreferencesUI.py:1756 msgid "Workers number" msgstr "Thread Anzahl" -#: flatcamGUI/PreferencesUI.py:1582 flatcamGUI/PreferencesUI.py:1591 +#: flatcamGUI/PreferencesUI.py:1758 msgid "" "The number of Qthreads made available to the App.\n" "A bigger number may finish the jobs more quickly but\n" @@ -9577,35 +9964,35 @@ msgstr "" "Der Standardwert ist 2.\n" "Nach dem Ändern wird es beim nächsten Start der App angewendet." -#: flatcamGUI/PreferencesUI.py:1604 +#: flatcamGUI/PreferencesUI.py:1772 msgid "Geo Tolerance" msgstr "Geo-Toleranz" -#: flatcamGUI/PreferencesUI.py:1606 flatcamGUI/PreferencesUI.py:1615 +#: flatcamGUI/PreferencesUI.py:1774 msgid "" "This value can counter the effect of the Circle Steps\n" -"parameter. Default value is 0.01.\n" +"parameter. Default value is 0.005.\n" "A lower value will increase the detail both in image\n" "and in Gcode for the circles, with a higher cost in\n" "performance. Higher value will provide more\n" "performance at the expense of level of detail." msgstr "" -"Dieser Wert kann dem Effekt der Kreisschritte entgegenwirken\n" -"Parameter. Der Standardwert ist 0.01.\n" -"Ein niedrigerer Wert erhöht die Details in beiden Bildern\n" -"und in Gcode für die Kreise, mit höheren Kosten in\n" -"Performance. Ein höherer Wert bietet mehr\n" -"Leistung auf Kosten des Detaillierungsgrades." +"This value can counter the effect of the Circle Steps\n" +"parameter. Default value is 0.005.\n" +"A lower value will increase the detail both in image\n" +"and in Gcode for the circles, with a higher cost in\n" +"performance. Higher value will provide more\n" +"performance at the expense of level of detail." -#: flatcamGUI/PreferencesUI.py:1634 +#: flatcamGUI/PreferencesUI.py:1794 msgid "Save Settings" msgstr "Einstellungen speichern" -#: flatcamGUI/PreferencesUI.py:1638 +#: flatcamGUI/PreferencesUI.py:1798 msgid "Save Compressed Project" msgstr "Speichern Sie das komprimierte Projekt" -#: flatcamGUI/PreferencesUI.py:1640 +#: flatcamGUI/PreferencesUI.py:1800 msgid "" "Whether to save a compressed or uncompressed project.\n" "When checked it will save a compressed FlatCAM project." @@ -9615,11 +10002,11 @@ msgstr "" "Wenn diese Option aktiviert ist, wird ein komprimiertes FlatCAM-Projekt " "gespeichert." -#: flatcamGUI/PreferencesUI.py:1649 +#: flatcamGUI/PreferencesUI.py:1809 msgid "Compression" msgstr "Kompression" -#: flatcamGUI/PreferencesUI.py:1651 +#: flatcamGUI/PreferencesUI.py:1811 msgid "" "The level of compression used when saving\n" "a FlatCAM project. Higher value means better compression\n" @@ -9629,62 +10016,94 @@ msgstr "" "ein FlatCAM-Projekt. Ein höherer Wert bedeutet eine bessere Komprimierung\n" "erfordern jedoch mehr RAM-Auslastung und mehr Verarbeitungszeit." -#: flatcamGUI/PreferencesUI.py:1671 +#: flatcamGUI/PreferencesUI.py:1822 +msgid "Enable Auto Save" +msgstr "Aktiv. Sie die auto Speicherung" + +#: flatcamGUI/PreferencesUI.py:1824 +msgid "" +"Check to enable the autosave feature.\n" +"When enabled, the application will try to save a project\n" +"at the set interval." +msgstr "" +"Aktivieren Sie diese Option, um die automatische Speicherfunktion zu " +"aktivieren.\n" +"Wenn diese Option aktiviert ist, versucht die Anwendung, ein Projekt zu " +"speichern\n" +"im eingestellten Intervall." + +#: flatcamGUI/PreferencesUI.py:1834 +msgid "Interval" +msgstr "Intervall" + +#: flatcamGUI/PreferencesUI.py:1836 +msgid "" +"Time interval for autosaving. In milliseconds.\n" +"The application will try to save periodically but only\n" +"if the project was saved manually at least once.\n" +"While active, some operations may block this feature." +msgstr "" +"Zeitintervall für die automatische Speicherung. In Millisekunden.\n" +"Die Anwendung versucht regelmäßig, aber nur zu speichern\n" +"wenn das Projekt mindestens einmal manuell gespeichert wurde.\n" +"Während der Aktivierung können einige Vorgänge diese Funktion blockieren." + +#: flatcamGUI/PreferencesUI.py:1852 msgid "Text to PDF parameters" msgstr "Text zu PDF-Parametern" -#: flatcamGUI/PreferencesUI.py:1673 +#: flatcamGUI/PreferencesUI.py:1854 msgid "Used when saving text in Code Editor or in FlatCAM Document objects." msgstr "" "Wird beim Speichern von Text im Code-Editor oder in FlatCAM-Dokumentobjekten " "verwendet." -#: flatcamGUI/PreferencesUI.py:1682 +#: flatcamGUI/PreferencesUI.py:1863 msgid "Top Margin" msgstr "Oberer Rand" -#: flatcamGUI/PreferencesUI.py:1684 +#: flatcamGUI/PreferencesUI.py:1865 msgid "Distance between text body and the top of the PDF file." msgstr "Abstand zwischen Textkörper und dem oberen Rand der PDF-Datei." -#: flatcamGUI/PreferencesUI.py:1695 +#: flatcamGUI/PreferencesUI.py:1876 msgid "Bottom Margin" msgstr "Unterer Rand" -#: flatcamGUI/PreferencesUI.py:1697 +#: flatcamGUI/PreferencesUI.py:1878 msgid "Distance between text body and the bottom of the PDF file." msgstr "Abstand zwischen Textkörper und dem unteren Rand der PDF-Datei." -#: flatcamGUI/PreferencesUI.py:1708 +#: flatcamGUI/PreferencesUI.py:1889 msgid "Left Margin" msgstr "Linker Rand" -#: flatcamGUI/PreferencesUI.py:1710 +#: flatcamGUI/PreferencesUI.py:1891 msgid "Distance between text body and the left of the PDF file." msgstr "Abstand zwischen Textkörper und der linken Seite der PDF-Datei." -#: flatcamGUI/PreferencesUI.py:1721 +#: flatcamGUI/PreferencesUI.py:1902 msgid "Right Margin" msgstr "Rechter Rand" -#: flatcamGUI/PreferencesUI.py:1723 +#: flatcamGUI/PreferencesUI.py:1904 msgid "Distance between text body and the right of the PDF file." msgstr "Abstand zwischen Textkörper und der rechten Seite der PDF-Datei." -#: flatcamGUI/PreferencesUI.py:1756 +#: flatcamGUI/PreferencesUI.py:1936 msgid "Gerber General" msgstr "Geometrie Allgemein" -#: flatcamGUI/PreferencesUI.py:1774 +#: flatcamGUI/PreferencesUI.py:1954 msgid "M-Color" msgstr "M-farbig" -#: flatcamGUI/PreferencesUI.py:1788 flatcamGUI/PreferencesUI.py:3859 -#: flatcamGUI/PreferencesUI.py:4442 flatcamGUI/PreferencesUI.py:7148 +#: flatcamGUI/PreferencesUI.py:1968 flatcamGUI/PreferencesUI.py:4137 +#: flatcamGUI/PreferencesUI.py:4735 flatcamGUI/PreferencesUI.py:7654 msgid "Circle Steps" msgstr "Kreisschritte" -#: flatcamGUI/PreferencesUI.py:1790 +#: flatcamGUI/PreferencesUI.py:1970 msgid "" "The number of circle steps for Gerber \n" "circular aperture linear approximation." @@ -9692,11 +10111,11 @@ msgstr "" "Die Anzahl der Kreisschritte für Gerber\n" "lineare Approximation mit kreisförmiger Apertur." -#: flatcamGUI/PreferencesUI.py:1802 +#: flatcamGUI/PreferencesUI.py:1982 msgid "Default Values" msgstr "Standardwerte" -#: flatcamGUI/PreferencesUI.py:1804 +#: flatcamGUI/PreferencesUI.py:1984 msgid "" "Those values will be used as fallback values\n" "in case that they are not found in the Gerber file." @@ -9704,25 +10123,25 @@ msgstr "" "Diese Werte werden als Ersatzwerte verwendet\n" "für den Fall, dass sie nicht in der Gerber-Datei gefunden werden." -#: flatcamGUI/PreferencesUI.py:1813 flatcamGUI/PreferencesUI.py:1819 -#: flatcamGUI/PreferencesUI.py:2361 flatcamGUI/PreferencesUI.py:2367 +#: flatcamGUI/PreferencesUI.py:1993 flatcamGUI/PreferencesUI.py:1999 +#: flatcamGUI/PreferencesUI.py:2541 flatcamGUI/PreferencesUI.py:2547 msgid "The units used in the Gerber file." msgstr "Die in der Gerber-Datei verwendeten Einheiten." -#: flatcamGUI/PreferencesUI.py:1816 flatcamGUI/PreferencesUI.py:2364 -#: flatcamGUI/PreferencesUI.py:2728 flatcamGUI/PreferencesUI.py:2814 -#: flatcamGUI/PreferencesUI.py:3422 flatcamTools/ToolCalculators.py:61 +#: flatcamGUI/PreferencesUI.py:1996 flatcamGUI/PreferencesUI.py:2544 +#: flatcamGUI/PreferencesUI.py:2910 flatcamGUI/PreferencesUI.py:2996 +#: flatcamGUI/PreferencesUI.py:3700 flatcamTools/ToolCalculators.py:61 #: flatcamTools/ToolPcbWizard.py:125 msgid "INCH" msgstr "ZOLL" -#: flatcamGUI/PreferencesUI.py:1826 flatcamGUI/PreferencesUI.py:2413 -#: flatcamGUI/PreferencesUI.py:2786 flatcamGUI/PreferencesUI.py:3490 +#: flatcamGUI/PreferencesUI.py:2006 flatcamGUI/PreferencesUI.py:2593 +#: flatcamGUI/PreferencesUI.py:2968 flatcamGUI/PreferencesUI.py:3768 msgid "Zeros" msgstr "Nullen" -#: flatcamGUI/PreferencesUI.py:1829 flatcamGUI/PreferencesUI.py:1839 -#: flatcamGUI/PreferencesUI.py:2416 flatcamGUI/PreferencesUI.py:2426 +#: flatcamGUI/PreferencesUI.py:2009 flatcamGUI/PreferencesUI.py:2019 +#: flatcamGUI/PreferencesUI.py:2596 flatcamGUI/PreferencesUI.py:2606 msgid "" "This sets the type of Gerber zeros.\n" "If LZ then Leading Zeros are removed and\n" @@ -9736,23 +10155,23 @@ msgstr "" "Wenn TZ aktiviert ist, werden nachfolgende Nullen entfernt\n" "und führende Nullen werden beibehalten." -#: flatcamGUI/PreferencesUI.py:1836 flatcamGUI/PreferencesUI.py:2423 -#: flatcamGUI/PreferencesUI.py:2799 flatcamGUI/PreferencesUI.py:3500 +#: flatcamGUI/PreferencesUI.py:2016 flatcamGUI/PreferencesUI.py:2603 +#: flatcamGUI/PreferencesUI.py:2981 flatcamGUI/PreferencesUI.py:3778 #: flatcamTools/ToolPcbWizard.py:111 msgid "LZ" msgstr "LZ" -#: flatcamGUI/PreferencesUI.py:1837 flatcamGUI/PreferencesUI.py:2424 -#: flatcamGUI/PreferencesUI.py:2800 flatcamGUI/PreferencesUI.py:3501 +#: flatcamGUI/PreferencesUI.py:2017 flatcamGUI/PreferencesUI.py:2604 +#: flatcamGUI/PreferencesUI.py:2982 flatcamGUI/PreferencesUI.py:3779 #: flatcamTools/ToolPcbWizard.py:112 msgid "TZ" msgstr "TZ" -#: flatcamGUI/PreferencesUI.py:1855 +#: flatcamGUI/PreferencesUI.py:2035 msgid "Clean Apertures" msgstr "Reinigen Sie die Öffnungen" -#: flatcamGUI/PreferencesUI.py:1857 +#: flatcamGUI/PreferencesUI.py:2037 msgid "" "Will remove apertures that do not have geometry\n" "thus lowering the number of apertures in the Gerber object." @@ -9760,11 +10179,11 @@ msgstr "" "Entfernt Öffnungen ohne Geometrie\n" "Dadurch wird die Anzahl der Öffnungen im Gerber-Objekt verringert." -#: flatcamGUI/PreferencesUI.py:1863 +#: flatcamGUI/PreferencesUI.py:2043 msgid "Polarity change buffer" msgstr "Polaritätswechselpuffer" -#: flatcamGUI/PreferencesUI.py:1865 +#: flatcamGUI/PreferencesUI.py:2045 msgid "" "Will apply extra buffering for the\n" "solid geometry when we have polarity changes.\n" @@ -9776,17 +10195,17 @@ msgstr "" "Kann helfen, Gerber-Dateien zu laden, die sonst\n" "nicht richtig laden." -#: flatcamGUI/PreferencesUI.py:1878 +#: flatcamGUI/PreferencesUI.py:2058 msgid "Gerber Object Color" msgstr "Gerber-Objektfarbe" -#: flatcamGUI/PreferencesUI.py:1884 flatcamGUI/PreferencesUI.py:2905 -#: flatcamGUI/PreferencesUI.py:3896 +#: flatcamGUI/PreferencesUI.py:2064 flatcamGUI/PreferencesUI.py:3087 +#: flatcamGUI/PreferencesUI.py:4176 msgid "Set the line color for plotted objects." msgstr "Legen Sie die Linienfarbe für geplottete Objekte fest." -#: flatcamGUI/PreferencesUI.py:1901 flatcamGUI/PreferencesUI.py:2922 -#: flatcamGUI/PreferencesUI.py:4553 flatcamGUI/PreferencesUI.py:4619 +#: flatcamGUI/PreferencesUI.py:2081 flatcamGUI/PreferencesUI.py:3104 +#: flatcamGUI/PreferencesUI.py:4846 flatcamGUI/PreferencesUI.py:4912 msgid "" "Set the fill color for plotted objects.\n" "First 6 digits are the color and the last 2\n" @@ -9796,34 +10215,29 @@ msgstr "" "Die ersten 6 Ziffern sind die Farbe und die letzten 2\n" "Ziffern sind für Alpha (Transparenz)." -#: flatcamGUI/PreferencesUI.py:1920 flatcamGUI/PreferencesUI.py:2941 -#: flatcamGUI/PreferencesUI.py:4572 +#: flatcamGUI/PreferencesUI.py:2100 flatcamGUI/PreferencesUI.py:3123 +#: flatcamGUI/PreferencesUI.py:4865 msgid "Set the fill transparency for plotted objects." msgstr "Legen Sie die Füllungstransparenz für geplottete Objekte fest." -#: flatcamGUI/PreferencesUI.py:2011 +#: flatcamGUI/PreferencesUI.py:2191 msgid "Gerber Options" msgstr "Gerber-Optionen" -#: flatcamGUI/PreferencesUI.py:2085 flatcamGUI/PreferencesUI.py:4379 -#: flatcamGUI/PreferencesUI.py:5120 flatcamTools/ToolNonCopperClear.py:170 -msgid "Conv." -msgstr "Konv." - -#: flatcamGUI/PreferencesUI.py:2089 +#: flatcamGUI/PreferencesUI.py:2269 msgid "Combine Passes" msgstr "Kombinieren Sie Pässe" -#: flatcamGUI/PreferencesUI.py:2177 +#: flatcamGUI/PreferencesUI.py:2357 msgid "Gerber Adv. Options" msgstr "Erweiterte Optionen von Gerber" -#: flatcamGUI/PreferencesUI.py:2181 flatcamGUI/PreferencesUI.py:3278 -#: flatcamGUI/PreferencesUI.py:4179 +#: flatcamGUI/PreferencesUI.py:2361 flatcamGUI/PreferencesUI.py:3551 +#: flatcamGUI/PreferencesUI.py:4472 msgid "Advanced Options" msgstr "Erweiterte Optionen" -#: flatcamGUI/PreferencesUI.py:2183 +#: flatcamGUI/PreferencesUI.py:2363 msgid "" "A list of Gerber advanced parameters.\n" "Those parameters are available only for\n" @@ -9833,11 +10247,11 @@ msgstr "" "Diese Parameter sind nur für verfügbar\n" "Fortgeschrittene Anwendungsebene." -#: flatcamGUI/PreferencesUI.py:2202 +#: flatcamGUI/PreferencesUI.py:2382 msgid "Table Show/Hide" msgstr "Tabelle anzeigen / ausblenden" -#: flatcamGUI/PreferencesUI.py:2204 +#: flatcamGUI/PreferencesUI.py:2384 msgid "" "Toggle the display of the Gerber Apertures Table.\n" "Also, on hide, it will delete all mark shapes\n" @@ -9847,15 +10261,15 @@ msgstr "" "Beim Ausblenden werden auch alle Markierungsformen gelöscht\n" "das sind auf leinwand gezeichnet." -#: flatcamGUI/PreferencesUI.py:2284 +#: flatcamGUI/PreferencesUI.py:2464 msgid "Exterior" msgstr "Äußeres" -#: flatcamGUI/PreferencesUI.py:2285 +#: flatcamGUI/PreferencesUI.py:2465 msgid "Interior" msgstr "Inneres" -#: flatcamGUI/PreferencesUI.py:2298 +#: flatcamGUI/PreferencesUI.py:2478 msgid "" "Buffering type:\n" "- None --> best performance, fast file loading but no so good display\n" @@ -9869,19 +10283,19 @@ msgstr "" "Standardeinstellung.\n" "<< WARNUNG >>: Ändern Sie dies nur, wenn Sie wissen, was Sie tun !!!" -#: flatcamGUI/PreferencesUI.py:2303 flatcamGUI/PreferencesUI.py:5852 -#: flatcamGUI/PreferencesUI.py:7446 flatcamTools/ToolFiducials.py:201 -#: flatcamTools/ToolFilm.py:255 flatcamTools/ToolProperties.py:411 -#: flatcamTools/ToolProperties.py:426 flatcamTools/ToolProperties.py:429 -#: flatcamTools/ToolProperties.py:432 flatcamTools/ToolProperties.py:456 +#: flatcamGUI/PreferencesUI.py:2483 flatcamGUI/PreferencesUI.py:6340 +#: flatcamGUI/PreferencesUI.py:7952 flatcamTools/ToolFiducials.py:201 +#: flatcamTools/ToolFilm.py:255 flatcamTools/ToolProperties.py:452 +#: flatcamTools/ToolProperties.py:455 flatcamTools/ToolProperties.py:458 +#: flatcamTools/ToolProperties.py:483 msgid "None" msgstr "Keiner" -#: flatcamGUI/PreferencesUI.py:2309 +#: flatcamGUI/PreferencesUI.py:2489 msgid "Simplify" msgstr "Vereinfachen" -#: flatcamGUI/PreferencesUI.py:2311 +#: flatcamGUI/PreferencesUI.py:2491 msgid "" "When checked all the Gerber polygons will be\n" "loaded with simplification having a set tolerance.\n" @@ -9891,23 +10305,23 @@ msgstr "" "geladen mit Vereinfachung mit einer festgelegten Toleranz.\n" "<< WARNUNG >>: Ändern Sie dies nur, wenn Sie wissen, was Sie tun !!!" -#: flatcamGUI/PreferencesUI.py:2318 +#: flatcamGUI/PreferencesUI.py:2498 msgid "Tolerance" msgstr "Toleranz" -#: flatcamGUI/PreferencesUI.py:2319 +#: flatcamGUI/PreferencesUI.py:2499 msgid "Tolerance for polygon simplification." msgstr "Toleranz für Polygonvereinfachung." -#: flatcamGUI/PreferencesUI.py:2344 +#: flatcamGUI/PreferencesUI.py:2524 msgid "Gerber Export" msgstr "Gerber Export" -#: flatcamGUI/PreferencesUI.py:2348 flatcamGUI/PreferencesUI.py:3406 +#: flatcamGUI/PreferencesUI.py:2528 flatcamGUI/PreferencesUI.py:3684 msgid "Export Options" msgstr "Exportoptionen" -#: flatcamGUI/PreferencesUI.py:2350 +#: flatcamGUI/PreferencesUI.py:2530 msgid "" "The parameters set here are used in the file exported\n" "when using the File -> Export -> Export Gerber menu entry." @@ -9915,11 +10329,11 @@ msgstr "" "Die hier eingestellten Parameter werden in der exportierten Datei verwendet\n" "bei Verwendung des Menüeintrags Datei -> Exportieren -> Gerber exportieren." -#: flatcamGUI/PreferencesUI.py:2373 flatcamGUI/PreferencesUI.py:3431 +#: flatcamGUI/PreferencesUI.py:2553 flatcamGUI/PreferencesUI.py:3709 msgid "Int/Decimals" msgstr "Ganzzahl / Dezimalzahl" -#: flatcamGUI/PreferencesUI.py:2375 +#: flatcamGUI/PreferencesUI.py:2555 msgid "" "The number of digits in the whole part of the number\n" "and in the fractional part of the number." @@ -9927,7 +10341,7 @@ msgstr "" "Die Anzahl der Ziffern im gesamten Teil der Nummer\n" "und im Bruchteil der Zahl." -#: flatcamGUI/PreferencesUI.py:2388 +#: flatcamGUI/PreferencesUI.py:2568 msgid "" "This numbers signify the number of digits in\n" "the whole part of Gerber coordinates." @@ -9935,7 +10349,7 @@ msgstr "" "Diese Zahlen geben die Anzahl der Ziffern in an\n" "der ganze Teil von Gerber koordiniert." -#: flatcamGUI/PreferencesUI.py:2404 +#: flatcamGUI/PreferencesUI.py:2584 msgid "" "This numbers signify the number of digits in\n" "the decimal part of Gerber coordinates." @@ -9943,16 +10357,16 @@ msgstr "" "Diese Zahlen geben die Anzahl der Ziffern in an\n" "Der Dezimalteil der Gerber-Koordinaten." -#: flatcamGUI/PreferencesUI.py:2449 +#: flatcamGUI/PreferencesUI.py:2629 msgid "A list of Gerber Editor parameters." msgstr "Eine Liste der Gerber-Editor-Parameter." -#: flatcamGUI/PreferencesUI.py:2457 flatcamGUI/PreferencesUI.py:3565 -#: flatcamGUI/PreferencesUI.py:4357 flatcamGUI/PreferencesUI.py:7109 +#: flatcamGUI/PreferencesUI.py:2637 flatcamGUI/PreferencesUI.py:3843 +#: flatcamGUI/PreferencesUI.py:4650 flatcamGUI/PreferencesUI.py:7615 msgid "Selection limit" msgstr "Auswahllimit" -#: flatcamGUI/PreferencesUI.py:2459 +#: flatcamGUI/PreferencesUI.py:2639 msgid "" "Set the number of selected Gerber geometry\n" "items above which the utility geometry\n" @@ -9966,23 +10380,23 @@ msgstr "" "Erhöht die Leistung beim Bewegen von a\n" "große Anzahl von geometrischen Elementen." -#: flatcamGUI/PreferencesUI.py:2472 +#: flatcamGUI/PreferencesUI.py:2652 msgid "New Aperture code" msgstr "Neuer Blendencode" -#: flatcamGUI/PreferencesUI.py:2485 +#: flatcamGUI/PreferencesUI.py:2665 msgid "New Aperture size" msgstr "Standard Blendenöffnung" -#: flatcamGUI/PreferencesUI.py:2487 +#: flatcamGUI/PreferencesUI.py:2667 msgid "Size for the new aperture" msgstr "Wert für die neue Blende" -#: flatcamGUI/PreferencesUI.py:2498 +#: flatcamGUI/PreferencesUI.py:2678 msgid "New Aperture type" msgstr "Neuer Blendentyp" -#: flatcamGUI/PreferencesUI.py:2500 +#: flatcamGUI/PreferencesUI.py:2680 msgid "" "Type for the new aperture.\n" "Can be 'C', 'R' or 'O'." @@ -9990,35 +10404,42 @@ msgstr "" "Geben Sie für die neue Blende ein.\n" "Kann \"C\", \"R\" oder \"O\" sein." -#: flatcamGUI/PreferencesUI.py:2522 +#: flatcamGUI/PreferencesUI.py:2702 msgid "Aperture Dimensions" msgstr "Öffnungsmaße" -#: flatcamGUI/PreferencesUI.py:2524 flatcamGUI/PreferencesUI.py:3877 -#: flatcamGUI/PreferencesUI.py:5029 -msgid "Diameters of the cutting tools, separated by ','" -msgstr "Durchmesser der Schneidwerkzeuge, getrennt durch ','" +#: flatcamGUI/PreferencesUI.py:2704 flatcamGUI/PreferencesUI.py:4155 +#: flatcamGUI/PreferencesUI.py:5322 flatcamGUI/PreferencesUI.py:5889 +#: flatcamGUI/PreferencesUI.py:6955 +msgid "" +"Diameters of the tools, separated by comma.\n" +"The value of the diameter has to use the dot decimals separator.\n" +"Valid values: 0.3, 1.0" +msgstr "" +"Durchmesser der Werkzeuge, durch Komma getrennt.\n" +"Der Wert des Durchmessers muss das Punkt-Dezimal-Trennzeichen verwenden.\n" +"Gültige Werte: 0.3, 1.0" -#: flatcamGUI/PreferencesUI.py:2530 +#: flatcamGUI/PreferencesUI.py:2712 msgid "Linear Pad Array" msgstr "Lineares Pad-Array" -#: flatcamGUI/PreferencesUI.py:2534 flatcamGUI/PreferencesUI.py:3609 -#: flatcamGUI/PreferencesUI.py:3757 +#: flatcamGUI/PreferencesUI.py:2716 flatcamGUI/PreferencesUI.py:3887 +#: flatcamGUI/PreferencesUI.py:4035 msgid "Linear Direction" msgstr "Lineare Richtung" -#: flatcamGUI/PreferencesUI.py:2574 +#: flatcamGUI/PreferencesUI.py:2756 msgid "Circular Pad Array" msgstr "Kreisschlitz-Array" -#: flatcamGUI/PreferencesUI.py:2578 flatcamGUI/PreferencesUI.py:3655 -#: flatcamGUI/PreferencesUI.py:3805 +#: flatcamGUI/PreferencesUI.py:2760 flatcamGUI/PreferencesUI.py:3933 +#: flatcamGUI/PreferencesUI.py:4083 msgid "Circular Direction" msgstr "Kreisrichtung" -#: flatcamGUI/PreferencesUI.py:2580 flatcamGUI/PreferencesUI.py:3657 -#: flatcamGUI/PreferencesUI.py:3807 +#: flatcamGUI/PreferencesUI.py:2762 flatcamGUI/PreferencesUI.py:3935 +#: flatcamGUI/PreferencesUI.py:4085 msgid "" "Direction for circular array.\n" "Can be CW = clockwise or CCW = counter clockwise." @@ -10026,48 +10447,48 @@ msgstr "" "Richtung für kreisförmige Anordnung. \n" "Kann CW = Uhrzeigersinn oder CCW = Gegenuhrzeigersinn sein." -#: flatcamGUI/PreferencesUI.py:2591 flatcamGUI/PreferencesUI.py:3668 -#: flatcamGUI/PreferencesUI.py:3818 +#: flatcamGUI/PreferencesUI.py:2773 flatcamGUI/PreferencesUI.py:3946 +#: flatcamGUI/PreferencesUI.py:4096 msgid "Circular Angle" msgstr "Kreiswinkel" -#: flatcamGUI/PreferencesUI.py:2610 +#: flatcamGUI/PreferencesUI.py:2792 msgid "Distance at which to buffer the Gerber element." msgstr "Abstand, in dem das Gerber-Element gepuffert werden soll." -#: flatcamGUI/PreferencesUI.py:2619 +#: flatcamGUI/PreferencesUI.py:2801 msgid "Scale Tool" msgstr "Skalierungswerk" -#: flatcamGUI/PreferencesUI.py:2625 +#: flatcamGUI/PreferencesUI.py:2807 msgid "Factor to scale the Gerber element." msgstr "Faktor zum Skalieren des Gerber-Elements." -#: flatcamGUI/PreferencesUI.py:2638 +#: flatcamGUI/PreferencesUI.py:2820 msgid "Threshold low" msgstr "Schwelle niedrig" -#: flatcamGUI/PreferencesUI.py:2640 +#: flatcamGUI/PreferencesUI.py:2822 msgid "Threshold value under which the apertures are not marked." msgstr "Schwellenwert, unter dem die Blenden nicht markiert sind." -#: flatcamGUI/PreferencesUI.py:2650 +#: flatcamGUI/PreferencesUI.py:2832 msgid "Threshold high" msgstr "Schwelle hoch" -#: flatcamGUI/PreferencesUI.py:2652 +#: flatcamGUI/PreferencesUI.py:2834 msgid "Threshold value over which the apertures are not marked." msgstr "Schwellenwert, über dem die Blenden nicht markiert sind." -#: flatcamGUI/PreferencesUI.py:2670 +#: flatcamGUI/PreferencesUI.py:2852 msgid "Excellon General" msgstr "Excellon Allgemeines" -#: flatcamGUI/PreferencesUI.py:2703 +#: flatcamGUI/PreferencesUI.py:2885 msgid "Excellon Format" msgstr "Excellon Format" -#: flatcamGUI/PreferencesUI.py:2705 +#: flatcamGUI/PreferencesUI.py:2887 msgid "" "The NC drill files, usually named Excellon files\n" "are files that can be found in different formats.\n" @@ -10109,12 +10530,12 @@ msgstr "" "Sprint-Layout 2: 4 ZOLL LZ\n" "KiCAD 3: 5 ZOLL TZ" -#: flatcamGUI/PreferencesUI.py:2729 +#: flatcamGUI/PreferencesUI.py:2911 msgid "Default values for INCH are 2:4" msgstr "Die Standardwerte für ZOLL sind 2: 4" -#: flatcamGUI/PreferencesUI.py:2736 flatcamGUI/PreferencesUI.py:2765 -#: flatcamGUI/PreferencesUI.py:3445 +#: flatcamGUI/PreferencesUI.py:2918 flatcamGUI/PreferencesUI.py:2947 +#: flatcamGUI/PreferencesUI.py:3723 msgid "" "This numbers signify the number of digits in\n" "the whole part of Excellon coordinates." @@ -10122,8 +10543,8 @@ msgstr "" "Diese Zahlen geben die Anzahl der Ziffern in an\n" "der gesamte Teil der Excellon-Koordinaten." -#: flatcamGUI/PreferencesUI.py:2749 flatcamGUI/PreferencesUI.py:2778 -#: flatcamGUI/PreferencesUI.py:3458 +#: flatcamGUI/PreferencesUI.py:2931 flatcamGUI/PreferencesUI.py:2960 +#: flatcamGUI/PreferencesUI.py:3736 msgid "" "This numbers signify the number of digits in\n" "the decimal part of Excellon coordinates." @@ -10131,15 +10552,15 @@ msgstr "" "Diese Zahlen geben die Anzahl der Ziffern in an\n" "der Dezimalteil der Excellon-Koordinaten." -#: flatcamGUI/PreferencesUI.py:2757 +#: flatcamGUI/PreferencesUI.py:2939 msgid "METRIC" msgstr "METRISCH" -#: flatcamGUI/PreferencesUI.py:2758 +#: flatcamGUI/PreferencesUI.py:2940 msgid "Default values for METRIC are 3:3" msgstr "Die Standardwerte für METRISCH sind 3: 3" -#: flatcamGUI/PreferencesUI.py:2789 +#: flatcamGUI/PreferencesUI.py:2971 msgid "" "This sets the type of Excellon zeros.\n" "If LZ then Leading Zeros are kept and\n" @@ -10159,7 +10580,7 @@ msgstr "" "Dies wird verwendet, wenn keine Informationen vorliegen\n" "in der Excellon-Datei gespeichert." -#: flatcamGUI/PreferencesUI.py:2807 +#: flatcamGUI/PreferencesUI.py:2989 msgid "" "This sets the default units of Excellon files.\n" "If it is not detected in the parsed file the value here\n" @@ -10171,7 +10592,7 @@ msgstr "" "wird verwendet. Einige Excellon-Dateien haben keinen Header\n" "Daher wird dieser Parameter verwendet." -#: flatcamGUI/PreferencesUI.py:2817 +#: flatcamGUI/PreferencesUI.py:2999 msgid "" "This sets the units of Excellon files.\n" "Some Excellon files don't have an header\n" @@ -10181,19 +10602,19 @@ msgstr "" "Einige Excellon-Dateien haben keinen Header\n" "Daher wird dieser Parameter verwendet." -#: flatcamGUI/PreferencesUI.py:2825 +#: flatcamGUI/PreferencesUI.py:3007 msgid "Update Export settings" msgstr "Exporteinstellungen aktual" -#: flatcamGUI/PreferencesUI.py:2842 +#: flatcamGUI/PreferencesUI.py:3024 msgid "Excellon Optimization" msgstr "Optimierung der Excellons" -#: flatcamGUI/PreferencesUI.py:2845 +#: flatcamGUI/PreferencesUI.py:3027 msgid "Algorithm:" msgstr "Algorithmus:" -#: flatcamGUI/PreferencesUI.py:2847 flatcamGUI/PreferencesUI.py:2863 +#: flatcamGUI/PreferencesUI.py:3029 flatcamGUI/PreferencesUI.py:3045 msgid "" "This sets the optimization type for the Excellon drill path.\n" "If <> is checked then Google OR-Tools algorithm with\n" @@ -10220,20 +10641,20 @@ msgstr "" "und verwendet\n" "Travelling Salesman-Algorithmus zur Pfadoptimierung." -#: flatcamGUI/PreferencesUI.py:2858 +#: flatcamGUI/PreferencesUI.py:3040 msgid "MetaHeuristic" msgstr "MetaHeuristic" -#: flatcamGUI/PreferencesUI.py:2860 +#: flatcamGUI/PreferencesUI.py:3042 msgid "TSA" msgstr "TSA" -#: flatcamGUI/PreferencesUI.py:2877 flatcamGUI/PreferencesUI.py:3192 -#: flatcamGUI/PreferencesUI.py:4138 +#: flatcamGUI/PreferencesUI.py:3059 flatcamGUI/PreferencesUI.py:3463 +#: flatcamGUI/PreferencesUI.py:4430 msgid "Duration" msgstr "Dauer" -#: flatcamGUI/PreferencesUI.py:2880 +#: flatcamGUI/PreferencesUI.py:3062 msgid "" "When OR-Tools Metaheuristic (MH) is enabled there is a\n" "maximum threshold for how much time is spent doing the\n" @@ -10245,15 +10666,19 @@ msgstr "" "Pfadoptimierung. Diese maximale Dauer wird hier eingestellt.\n" "In Sekunden." -#: flatcamGUI/PreferencesUI.py:2899 +#: flatcamGUI/PreferencesUI.py:3081 msgid "Excellon Object Color" msgstr "Excellon-Objektfarbe" -#: flatcamGUI/PreferencesUI.py:3065 +#: flatcamGUI/PreferencesUI.py:3247 msgid "Excellon Options" msgstr "Excellon-Optionen" -#: flatcamGUI/PreferencesUI.py:3071 +#: flatcamGUI/PreferencesUI.py:3251 flatcamGUI/PreferencesUI.py:4227 +msgid "Create CNC Job" +msgstr "CNC-Job erstellen" + +#: flatcamGUI/PreferencesUI.py:3253 msgid "" "Parameters used to create a CNC Job object\n" "for this drill object." @@ -10261,11 +10686,27 @@ msgstr "" "Parameter, die zum Erstellen eines CNC-Auftragsobjekts verwendet werden\n" "für dieses Bohrobjekt." -#: flatcamGUI/PreferencesUI.py:3185 flatcamGUI/PreferencesUI.py:4133 +#: flatcamGUI/PreferencesUI.py:3370 flatcamGUI/PreferencesUI.py:4314 +msgid "Tool change" +msgstr "Werkzeugwechsel" + +#: flatcamGUI/PreferencesUI.py:3454 flatcamGUI/PreferencesUI.py:4425 msgid "Enable Dwell" msgstr "Verweilzeit aktivieren" -#: flatcamGUI/PreferencesUI.py:3217 +#: flatcamGUI/PreferencesUI.py:3477 +msgid "" +"The preprocessor JSON file that dictates\n" +"Gcode output." +msgstr "" +"Die Postprozessor-JSON-Datei, die diktiert\n" +"Gcode-Ausgabe." + +#: flatcamGUI/PreferencesUI.py:3488 +msgid "Gcode" +msgstr "Gcode" + +#: flatcamGUI/PreferencesUI.py:3490 msgid "" "Choose what to use for GCode generation:\n" "'Drills', 'Slots' or 'Both'.\n" @@ -10278,15 +10719,35 @@ msgstr "" "angezeigt\n" "in Bohrer umgewandelt." -#: flatcamGUI/PreferencesUI.py:3235 +#: flatcamGUI/PreferencesUI.py:3506 +msgid "Mill Holes" +msgstr "Löcher bohren" + +#: flatcamGUI/PreferencesUI.py:3508 msgid "Create Geometry for milling holes." msgstr "Erstellen Sie Geometrie zum Fräsen von Löchern." -#: flatcamGUI/PreferencesUI.py:3271 +#: flatcamGUI/PreferencesUI.py:3512 +msgid "Drill Tool dia" +msgstr "Bohrwerkzeugs Durchm" + +#: flatcamGUI/PreferencesUI.py:3523 +msgid "Slot Tool dia" +msgstr "Schlitzwerkzeug Durchmesser" + +#: flatcamGUI/PreferencesUI.py:3525 +msgid "" +"Diameter of the cutting tool\n" +"when milling slots." +msgstr "" +"Durchmesser des Schneidewerkzeugs\n" +"beim Fräsen von Schlitzen." + +#: flatcamGUI/PreferencesUI.py:3544 msgid "Excellon Adv. Options" msgstr "Excellon erweiterte Optionen" -#: flatcamGUI/PreferencesUI.py:3280 +#: flatcamGUI/PreferencesUI.py:3553 msgid "" "A list of Excellon advanced parameters.\n" "Those parameters are available only for\n" @@ -10296,19 +10757,19 @@ msgstr "" "Diese Parameter sind nur für verfügbar\n" "Erweiterte App. Niveau." -#: flatcamGUI/PreferencesUI.py:3301 +#: flatcamGUI/PreferencesUI.py:3576 msgid "Toolchange X,Y" msgstr "Werkzeugwechsel X, Y" -#: flatcamGUI/PreferencesUI.py:3303 flatcamGUI/PreferencesUI.py:4193 +#: flatcamGUI/PreferencesUI.py:3578 flatcamGUI/PreferencesUI.py:4486 msgid "Toolchange X,Y position." msgstr "Werkzeugwechsel X, Y Position." -#: flatcamGUI/PreferencesUI.py:3360 flatcamGUI/PreferencesUI.py:4280 +#: flatcamGUI/PreferencesUI.py:3638 flatcamGUI/PreferencesUI.py:4573 msgid "Spindle direction" msgstr "Drehrichtung" -#: flatcamGUI/PreferencesUI.py:3362 flatcamGUI/PreferencesUI.py:4282 +#: flatcamGUI/PreferencesUI.py:3640 flatcamGUI/PreferencesUI.py:4575 msgid "" "This sets the direction that the spindle is rotating.\n" "It can be either:\n" @@ -10320,11 +10781,11 @@ msgstr "" "- CW = im Uhrzeigersinn oder\n" "- CCW = gegen den Uhrzeigersinn" -#: flatcamGUI/PreferencesUI.py:3373 flatcamGUI/PreferencesUI.py:4294 +#: flatcamGUI/PreferencesUI.py:3651 flatcamGUI/PreferencesUI.py:4587 msgid "Fast Plunge" msgstr "Schneller Sprung" -#: flatcamGUI/PreferencesUI.py:3375 flatcamGUI/PreferencesUI.py:4296 +#: flatcamGUI/PreferencesUI.py:3653 flatcamGUI/PreferencesUI.py:4589 msgid "" "By checking this, the vertical move from\n" "Z_Toolchange to Z_move is done with G0,\n" @@ -10336,11 +10797,11 @@ msgstr "" "Das bedeutet die schnellste verfügbare Geschwindigkeit.\n" "WARNUNG: Die Verschiebung erfolgt bei Toolchange X, Y-Koordinaten." -#: flatcamGUI/PreferencesUI.py:3382 +#: flatcamGUI/PreferencesUI.py:3660 msgid "Fast Retract" msgstr "Schneller Rückzug" -#: flatcamGUI/PreferencesUI.py:3384 +#: flatcamGUI/PreferencesUI.py:3662 msgid "" "Exit hole strategy.\n" " - When uncheked, while exiting the drilled hole the drill bit\n" @@ -10356,11 +10817,11 @@ msgstr "" "  - Wenn Sie den Weg von Z-Schnitt (Schnitttiefe) nach Z_Move prüfen\n" "(Fahrhöhe) erfolgt so schnell wie möglich (G0) in einem Zug." -#: flatcamGUI/PreferencesUI.py:3402 +#: flatcamGUI/PreferencesUI.py:3680 msgid "Excellon Export" msgstr "Excellon Export" -#: flatcamGUI/PreferencesUI.py:3408 +#: flatcamGUI/PreferencesUI.py:3686 msgid "" "The parameters set here are used in the file exported\n" "when using the File -> Export -> Export Excellon menu entry." @@ -10369,11 +10830,11 @@ msgstr "" "bei Verwendung des Menüeintrags Datei -> Exportieren -> Exportieren von " "Excellon." -#: flatcamGUI/PreferencesUI.py:3419 flatcamGUI/PreferencesUI.py:3425 +#: flatcamGUI/PreferencesUI.py:3697 flatcamGUI/PreferencesUI.py:3703 msgid "The units used in the Excellon file." msgstr "Die in der Excellon-Datei verwendeten Einheiten." -#: flatcamGUI/PreferencesUI.py:3433 +#: flatcamGUI/PreferencesUI.py:3711 msgid "" "The NC drill files, usually named Excellon files\n" "are files that can be found in different formats.\n" @@ -10385,11 +10846,11 @@ msgstr "" "Hier legen wir das verwendete Format fest\n" "Koordinaten verwenden keine Periode." -#: flatcamGUI/PreferencesUI.py:3467 +#: flatcamGUI/PreferencesUI.py:3745 msgid "Format" msgstr "Format" -#: flatcamGUI/PreferencesUI.py:3469 flatcamGUI/PreferencesUI.py:3479 +#: flatcamGUI/PreferencesUI.py:3747 flatcamGUI/PreferencesUI.py:3757 msgid "" "Select the kind of coordinates format used.\n" "Coordinates can be saved with decimal point or without.\n" @@ -10406,15 +10867,15 @@ msgstr "" "Es muss auch angegeben werden, wenn LZ = führende Nullen beibehalten werden\n" "oder TZ = nachfolgende Nullen bleiben erhalten." -#: flatcamGUI/PreferencesUI.py:3476 +#: flatcamGUI/PreferencesUI.py:3754 msgid "Decimal" msgstr "Dezimal" -#: flatcamGUI/PreferencesUI.py:3477 +#: flatcamGUI/PreferencesUI.py:3755 msgid "No-Decimal" msgstr "Keine Dezimalzahl" -#: flatcamGUI/PreferencesUI.py:3493 +#: flatcamGUI/PreferencesUI.py:3771 msgid "" "This sets the type of Excellon zeros.\n" "If LZ then Leading Zeros are kept and\n" @@ -10428,7 +10889,7 @@ msgstr "" "Wenn TZ aktiviert ist, werden nachfolgende Nullen beibehalten\n" "und führende Nullen werden entfernt." -#: flatcamGUI/PreferencesUI.py:3503 +#: flatcamGUI/PreferencesUI.py:3781 msgid "" "This sets the default type of Excellon zeros.\n" "If LZ then Leading Zeros are kept and\n" @@ -10442,11 +10903,11 @@ msgstr "" "Wenn TZ aktiviert ist, werden nachfolgende Nullen beibehalten\n" "und führende Nullen werden entfernt." -#: flatcamGUI/PreferencesUI.py:3513 +#: flatcamGUI/PreferencesUI.py:3791 msgid "Slot type" msgstr "Schlitze-Typ" -#: flatcamGUI/PreferencesUI.py:3516 flatcamGUI/PreferencesUI.py:3526 +#: flatcamGUI/PreferencesUI.py:3794 flatcamGUI/PreferencesUI.py:3804 msgid "" "This sets how the slots will be exported.\n" "If ROUTED then the slots will be routed\n" @@ -10460,19 +10921,19 @@ msgstr "" "Beim Bohren (G85) werden die Steckplätze exportiert\n" "Verwenden Sie den Befehl Bohrschlitz (G85)." -#: flatcamGUI/PreferencesUI.py:3523 +#: flatcamGUI/PreferencesUI.py:3801 msgid "Routed" msgstr "Geroutet" -#: flatcamGUI/PreferencesUI.py:3524 +#: flatcamGUI/PreferencesUI.py:3802 msgid "Drilled(G85)" msgstr "Gebohrt (G85)" -#: flatcamGUI/PreferencesUI.py:3557 +#: flatcamGUI/PreferencesUI.py:3835 msgid "A list of Excellon Editor parameters." msgstr "Eine Liste der Excellon Editor-Parameter." -#: flatcamGUI/PreferencesUI.py:3567 +#: flatcamGUI/PreferencesUI.py:3845 msgid "" "Set the number of selected Excellon geometry\n" "items above which the utility geometry\n" @@ -10486,19 +10947,20 @@ msgstr "" "Erhöht die Leistung beim Bewegen von a\n" "große Anzahl von geometrischen Elementen." -#: flatcamGUI/PreferencesUI.py:3580 flatcamGUI/PreferencesUI.py:5100 -msgid "New Tool Dia" -msgstr "Neuer Werkzeugdurchm" +#: flatcamGUI/PreferencesUI.py:3858 flatcamGUI/PreferencesUI.py:5396 +#: flatcamGUI/PreferencesUI.py:5962 +msgid "New Dia" +msgstr "Neuer Durchmesser" -#: flatcamGUI/PreferencesUI.py:3605 +#: flatcamGUI/PreferencesUI.py:3883 msgid "Linear Drill Array" msgstr "Linearbohrer-Array" -#: flatcamGUI/PreferencesUI.py:3651 +#: flatcamGUI/PreferencesUI.py:3929 msgid "Circular Drill Array" msgstr "Rundbohrer-Array" -#: flatcamGUI/PreferencesUI.py:3721 +#: flatcamGUI/PreferencesUI.py:3999 msgid "" "Angle at which the slot is placed.\n" "The precision is of max 2 decimals.\n" @@ -10510,19 +10972,19 @@ msgstr "" "Der Mindestwert beträgt: -359,99 Grad.\n" "Maximaler Wert ist: 360.00 Grad." -#: flatcamGUI/PreferencesUI.py:3740 +#: flatcamGUI/PreferencesUI.py:4018 msgid "Linear Slot Array" msgstr "Lineare Schlitzanordnung" -#: flatcamGUI/PreferencesUI.py:3801 +#: flatcamGUI/PreferencesUI.py:4079 msgid "Circular Slot Array" msgstr "Kreisschlitz-Array" -#: flatcamGUI/PreferencesUI.py:3839 +#: flatcamGUI/PreferencesUI.py:4117 msgid "Geometry General" msgstr "Geometrie Allgemein" -#: flatcamGUI/PreferencesUI.py:3861 +#: flatcamGUI/PreferencesUI.py:4139 msgid "" "The number of circle steps for Geometry \n" "circle and arc shapes linear approximation." @@ -10530,15 +10992,20 @@ msgstr "" "Die Anzahl der Kreisschritte für die Geometrie\n" "Kreis- und Bogenformen lineare Annäherung." -#: flatcamGUI/PreferencesUI.py:3890 +#: flatcamGUI/PreferencesUI.py:4153 flatcamGUI/PreferencesUI.py:5320 +#: flatcamGUI/PreferencesUI.py:5887 flatcamGUI/PreferencesUI.py:6953 +msgid "Tools Dia" +msgstr "Werkzeugdurchmesser" + +#: flatcamGUI/PreferencesUI.py:4170 msgid "Geometry Object Color" msgstr "Geometrieobjekt Farbe" -#: flatcamGUI/PreferencesUI.py:3941 +#: flatcamGUI/PreferencesUI.py:4221 msgid "Geometry Options" msgstr "Geometrieoptionen" -#: flatcamGUI/PreferencesUI.py:3949 +#: flatcamGUI/PreferencesUI.py:4229 msgid "" "Create a CNC Job object\n" "tracing the contours of this\n" @@ -10548,11 +11015,11 @@ msgstr "" "die Konturen davon nachzeichnen\n" "Geometrieobjekt." -#: flatcamGUI/PreferencesUI.py:3993 +#: flatcamGUI/PreferencesUI.py:4273 msgid "Depth/Pass" msgstr "Tiefe / Pass" -#: flatcamGUI/PreferencesUI.py:3995 +#: flatcamGUI/PreferencesUI.py:4275 msgid "" "The depth to cut on each pass,\n" "when multidepth is enabled.\n" @@ -10566,11 +11033,11 @@ msgstr "" "es ist ein Bruch aus der Tiefe\n" "was einen negativen Wert hat." -#: flatcamGUI/PreferencesUI.py:4173 +#: flatcamGUI/PreferencesUI.py:4466 msgid "Geometry Adv. Options" msgstr "Geometrie Erw. Optionen" -#: flatcamGUI/PreferencesUI.py:4181 +#: flatcamGUI/PreferencesUI.py:4474 msgid "" "A list of Geometry advanced parameters.\n" "Those parameters are available only for\n" @@ -10580,13 +11047,13 @@ msgstr "" "Diese Parameter sind nur für verfügbar\n" "Erweiterte App. Niveau." -#: flatcamGUI/PreferencesUI.py:4191 flatcamGUI/PreferencesUI.py:6539 -#: flatcamGUI/PreferencesUI.py:7586 flatcamTools/ToolCalibration.py:125 -#: flatcamTools/ToolSolderPaste.py:239 +#: flatcamGUI/PreferencesUI.py:4484 flatcamGUI/PreferencesUI.py:7045 +#: flatcamGUI/PreferencesUI.py:8092 flatcamTools/ToolCalibration.py:125 +#: flatcamTools/ToolSolderPaste.py:241 msgid "Toolchange X-Y" msgstr "Werkzeugwechsel X, Y" -#: flatcamGUI/PreferencesUI.py:4202 +#: flatcamGUI/PreferencesUI.py:4495 msgid "" "Height of the tool just after starting the work.\n" "Delete the value if you don't need this feature." @@ -10594,11 +11061,11 @@ msgstr "" "Höhe des Werkzeugs unmittelbar nach Beginn der Arbeit.\n" "Löschen Sie den Wert, wenn Sie diese Funktion nicht benötigen." -#: flatcamGUI/PreferencesUI.py:4304 +#: flatcamGUI/PreferencesUI.py:4597 msgid "Segment X size" msgstr "Segment X Größe" -#: flatcamGUI/PreferencesUI.py:4306 +#: flatcamGUI/PreferencesUI.py:4599 msgid "" "The size of the trace segment on the X axis.\n" "Useful for auto-leveling.\n" @@ -10608,11 +11075,11 @@ msgstr "" "Nützlich für die automatische Nivellierung.\n" "Ein Wert von 0 bedeutet keine Segmentierung auf der X-Achse." -#: flatcamGUI/PreferencesUI.py:4320 +#: flatcamGUI/PreferencesUI.py:4613 msgid "Segment Y size" msgstr "Segment Y Größe" -#: flatcamGUI/PreferencesUI.py:4322 +#: flatcamGUI/PreferencesUI.py:4615 msgid "" "The size of the trace segment on the Y axis.\n" "Useful for auto-leveling.\n" @@ -10622,15 +11089,11 @@ msgstr "" "Nützlich für die automatische Nivellierung.\n" "Ein Wert von 0 bedeutet keine Segmentierung auf der Y-Achse." -#: flatcamGUI/PreferencesUI.py:4343 -msgid "Geometry Editor" -msgstr "Geo-Editor" - -#: flatcamGUI/PreferencesUI.py:4349 +#: flatcamGUI/PreferencesUI.py:4642 msgid "A list of Geometry Editor parameters." msgstr "Eine Liste der Geometry Editor-Parameter." -#: flatcamGUI/PreferencesUI.py:4359 flatcamGUI/PreferencesUI.py:7111 +#: flatcamGUI/PreferencesUI.py:4652 flatcamGUI/PreferencesUI.py:7617 msgid "" "Set the number of selected geometry\n" "items above which the utility geometry\n" @@ -10644,11 +11107,11 @@ msgstr "" "Erhöht die Leistung beim Bewegen von a\n" "große Anzahl von geometrischen Elementen." -#: flatcamGUI/PreferencesUI.py:4391 +#: flatcamGUI/PreferencesUI.py:4684 msgid "CNC Job General" msgstr "CNC-Job Allgemein" -#: flatcamGUI/PreferencesUI.py:4444 +#: flatcamGUI/PreferencesUI.py:4737 msgid "" "The number of circle steps for GCode \n" "circle and arc shapes linear approximation." @@ -10656,11 +11119,11 @@ msgstr "" "Die Anzahl der Kreisschritte für GCode\n" "Kreis- und Bogenformen lineare Annäherung." -#: flatcamGUI/PreferencesUI.py:4453 +#: flatcamGUI/PreferencesUI.py:4746 msgid "Travel dia" msgstr "Verfahrdurchm" -#: flatcamGUI/PreferencesUI.py:4455 +#: flatcamGUI/PreferencesUI.py:4748 msgid "" "The width of the travel lines to be\n" "rendered in the plot." @@ -10668,15 +11131,15 @@ msgstr "" "Die Breite der Fahrlinien soll sein\n" "in der Handlung gerendert." -#: flatcamGUI/PreferencesUI.py:4468 +#: flatcamGUI/PreferencesUI.py:4761 msgid "G-code Decimals" msgstr "G-Code-Dezimalstellen" -#: flatcamGUI/PreferencesUI.py:4471 flatcamTools/ToolFiducials.py:74 +#: flatcamGUI/PreferencesUI.py:4764 flatcamTools/ToolFiducials.py:74 msgid "Coordinates" msgstr "Koordinaten" -#: flatcamGUI/PreferencesUI.py:4473 +#: flatcamGUI/PreferencesUI.py:4766 msgid "" "The number of decimals to be used for \n" "the X, Y, Z coordinates in CNC code (GCODE, etc.)" @@ -10684,11 +11147,11 @@ msgstr "" "Die Anzahl der Dezimalstellen, für die verwendet werden soll\n" "die X-, Y-, Z-Koordinaten im CNC-Code (GCODE usw.)" -#: flatcamGUI/PreferencesUI.py:4484 flatcamTools/ToolProperties.py:492 +#: flatcamGUI/PreferencesUI.py:4777 flatcamTools/ToolProperties.py:519 msgid "Feedrate" msgstr "Vorschubgeschwindigkeit" -#: flatcamGUI/PreferencesUI.py:4486 +#: flatcamGUI/PreferencesUI.py:4779 msgid "" "The number of decimals to be used for \n" "the Feedrate parameter in CNC code (GCODE, etc.)" @@ -10696,11 +11159,11 @@ msgstr "" "Die Anzahl der Dezimalstellen, für die verwendet werden soll\n" "der Vorschubparameter im CNC-Code (GCODE usw.)" -#: flatcamGUI/PreferencesUI.py:4497 +#: flatcamGUI/PreferencesUI.py:4790 msgid "Coordinates type" msgstr "Koordinaten eingeben" -#: flatcamGUI/PreferencesUI.py:4499 +#: flatcamGUI/PreferencesUI.py:4792 msgid "" "The type of coordinates to be used in Gcode.\n" "Can be:\n" @@ -10712,19 +11175,19 @@ msgstr "" "- Absolut G90 -> die Referenz ist der Ursprung x = 0, y = 0\n" "- Inkrementell G91 -> Die Referenz ist die vorherige Position" -#: flatcamGUI/PreferencesUI.py:4505 +#: flatcamGUI/PreferencesUI.py:4798 msgid "Absolute G90" msgstr "Absolut G90" -#: flatcamGUI/PreferencesUI.py:4506 +#: flatcamGUI/PreferencesUI.py:4799 msgid "Incremental G91" msgstr "Inkrementelles G91" -#: flatcamGUI/PreferencesUI.py:4516 +#: flatcamGUI/PreferencesUI.py:4809 msgid "Force Windows style line-ending" msgstr "Windows Zeilenendemarkierung erzwingen" -#: flatcamGUI/PreferencesUI.py:4518 +#: flatcamGUI/PreferencesUI.py:4811 msgid "" "When checked will force a Windows style line-ending\n" "(\\r\\n) on non-Windows OS's." @@ -10732,35 +11195,35 @@ msgstr "" "Wenn ausgewählt werden Zeilenendungsmarkierungen von Windows (CRLF) auch auf " "anderen Betriebssystemen geschrieben." -#: flatcamGUI/PreferencesUI.py:4530 +#: flatcamGUI/PreferencesUI.py:4823 msgid "Travel Line Color" msgstr "Reiselinienfarbe" -#: flatcamGUI/PreferencesUI.py:4536 +#: flatcamGUI/PreferencesUI.py:4829 msgid "Set the travel line color for plotted objects." msgstr "Legen Sie die Reiselinienfarbe für geplottete Objekte fest." -#: flatcamGUI/PreferencesUI.py:4596 +#: flatcamGUI/PreferencesUI.py:4889 msgid "CNCJob Object Color" msgstr "CNCJob-Objektfarbe" -#: flatcamGUI/PreferencesUI.py:4602 +#: flatcamGUI/PreferencesUI.py:4895 msgid "Set the color for plotted objects." msgstr "Legen Sie die Farbe für geplottete Objekte fest." -#: flatcamGUI/PreferencesUI.py:4762 +#: flatcamGUI/PreferencesUI.py:5055 msgid "CNC Job Options" msgstr "CNC-Auftragsoptionen" -#: flatcamGUI/PreferencesUI.py:4766 +#: flatcamGUI/PreferencesUI.py:5059 msgid "Export G-Code" msgstr "G-Code exportieren" -#: flatcamGUI/PreferencesUI.py:4782 +#: flatcamGUI/PreferencesUI.py:5075 msgid "Prepend to G-Code" msgstr "Voranstellen an G-Code" -#: flatcamGUI/PreferencesUI.py:4791 +#: flatcamGUI/PreferencesUI.py:5084 msgid "" "Type here any G-Code commands you would like to add at the beginning of the " "G-Code file." @@ -10768,11 +11231,11 @@ msgstr "" "Geben Sie hier alle G-Code-Befehle ein\n" "die Sie zum Anfang der G-Code-Datei hinzufügen möchten." -#: flatcamGUI/PreferencesUI.py:4798 +#: flatcamGUI/PreferencesUI.py:5091 msgid "Append to G-Code" msgstr "An G-Code anhängen" -#: flatcamGUI/PreferencesUI.py:4808 +#: flatcamGUI/PreferencesUI.py:5101 msgid "" "Type here any G-Code commands you would like to append to the generated " "file.\n" @@ -10782,11 +11245,11 @@ msgstr "" "anhängen möchten.\n" "Zum Beispiel: M2 (Programmende)" -#: flatcamGUI/PreferencesUI.py:4824 +#: flatcamGUI/PreferencesUI.py:5117 msgid "CNC Job Adv. Options" msgstr "Erw. CNC-Joboptionen" -#: flatcamGUI/PreferencesUI.py:4861 +#: flatcamGUI/PreferencesUI.py:5154 msgid "" "Type here any G-Code commands you would like to be executed when Toolchange " "event is encountered.\n" @@ -10804,47 +11267,48 @@ msgstr "" "verwendet warden, die das Präfix \"toolchange_custom\" im Namen hat und nach " "Vorlage der \"Toolchange Custom\" -Prozessordatei erzeugt wurde." -#: flatcamGUI/PreferencesUI.py:4916 +#: flatcamGUI/PreferencesUI.py:5209 msgid "Z depth for the cut" msgstr "Z Tiefe für den Schnitt" -#: flatcamGUI/PreferencesUI.py:4917 +#: flatcamGUI/PreferencesUI.py:5210 msgid "Z height for travel" msgstr "Z Höhe für die Reise" -#: flatcamGUI/PreferencesUI.py:4923 +#: flatcamGUI/PreferencesUI.py:5216 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 " "erreicht" -#: flatcamGUI/PreferencesUI.py:4942 +#: flatcamGUI/PreferencesUI.py:5235 msgid "Annotation Size" msgstr "Anmerkungsgröße" -#: flatcamGUI/PreferencesUI.py:4944 +#: flatcamGUI/PreferencesUI.py:5237 msgid "The font size of the annotation text. In pixels." msgstr "Die Schriftgröße des Anmerkungstextes. In Pixeln." -#: flatcamGUI/PreferencesUI.py:4954 +#: flatcamGUI/PreferencesUI.py:5247 msgid "Annotation Color" msgstr "Anmerkungsfarbe" -#: flatcamGUI/PreferencesUI.py:4956 +#: flatcamGUI/PreferencesUI.py:5249 msgid "Set the font color for the annotation texts." msgstr "Legen Sie die Schriftfarbe für die Anmerkungstexte fest." -#: flatcamGUI/PreferencesUI.py:5013 +#: flatcamGUI/PreferencesUI.py:5306 msgid "NCC Tool Options" msgstr "NCC-Tooloptionen" -#: flatcamGUI/PreferencesUI.py:5027 flatcamGUI/PreferencesUI.py:6449 -msgid "Tools dia" -msgstr "Werkzeug durchmesser" +#: flatcamGUI/PreferencesUI.py:5328 flatcamGUI/PreferencesUI.py:5896 +msgid "Comma separated values" +msgstr "Komma-getrennte Werte" -#: flatcamGUI/PreferencesUI.py:5038 flatcamGUI/PreferencesUI.py:5046 -#: flatcamTools/ToolNonCopperClear.py:215 -#: flatcamTools/ToolNonCopperClear.py:223 +#: flatcamGUI/PreferencesUI.py:5334 flatcamGUI/PreferencesUI.py:5342 +#: flatcamGUI/PreferencesUI.py:5903 flatcamTools/ToolNCC.py:215 +#: flatcamTools/ToolNCC.py:223 flatcamTools/ToolPaint.py:198 +#: flatcamTools/ToolPaint.py:206 msgid "" "Default tool type:\n" "- 'V-shape'\n" @@ -10854,13 +11318,15 @@ msgstr "" "- \"V-Form\"\n" "- Rundschreiben" -#: flatcamGUI/PreferencesUI.py:5043 flatcamTools/ToolNonCopperClear.py:220 +#: flatcamGUI/PreferencesUI.py:5339 flatcamGUI/PreferencesUI.py:5908 +#: flatcamTools/ToolNCC.py:220 flatcamTools/ToolPaint.py:203 msgid "V-shape" msgstr "V-Form" -#: flatcamGUI/PreferencesUI.py:5083 flatcamGUI/PreferencesUI.py:5092 -#: flatcamTools/ToolNonCopperClear.py:256 -#: flatcamTools/ToolNonCopperClear.py:264 +#: flatcamGUI/PreferencesUI.py:5379 flatcamGUI/PreferencesUI.py:5388 +#: flatcamGUI/PreferencesUI.py:5946 flatcamGUI/PreferencesUI.py:5955 +#: flatcamTools/ToolNCC.py:262 flatcamTools/ToolNCC.py:271 +#: flatcamTools/ToolPaint.py:245 flatcamTools/ToolPaint.py:254 msgid "" "Depth of cut into material. Negative value.\n" "In FlatCAM units." @@ -10868,35 +11334,26 @@ msgstr "" "Schnitttiefe in Material. Negativer Wert.\n" "In FlatCAM-Einheiten." -#: flatcamGUI/PreferencesUI.py:5102 -msgid "The new tool diameter (cut width) to add in the tool table." -msgstr "" -"Durchmesser (Eindringtiefe) für das neue Werkzeug, das in der " -"Werkzeugtabelle hinzugefügt werden soll." - -#: flatcamGUI/PreferencesUI.py:5114 flatcamGUI/PreferencesUI.py:5122 -#: flatcamTools/ToolNonCopperClear.py:164 -#: flatcamTools/ToolNonCopperClear.py:172 +#: flatcamGUI/PreferencesUI.py:5398 flatcamGUI/PreferencesUI.py:5964 +#: flatcamTools/ToolNCC.py:280 flatcamTools/ToolPaint.py:263 msgid "" -"Milling type when the selected tool is of type: 'iso_op':\n" -"- climb / best for precision milling and to reduce tool usage\n" -"- conventional / useful when there is no backlash compensation" +"Diameter for the new tool to add in the Tool Table.\n" +"If the tool is V-shape type then this value is automatically\n" +"calculated from the other parameters." msgstr "" -"Frästyp, wenn das ausgewählte Werkzeug vom Typ 'iso_op' ist:\n" -"- Besteigung / am besten zum Präzisionsfräsen und zur Reduzierung des " -"Werkzeugverbrauchs\n" -"- konventionell / nützlich, wenn kein Spielausgleich vorhanden ist" +"Durchmesser des neuen Werkzeugs das in die Werkzeugtabelle\n" +"aufgenommen werden soll. Wenn das Tool V-Förmig ist, wird dieser\n" +"Wert aus den anderen Parametern berechnet." -#: flatcamGUI/PreferencesUI.py:5131 flatcamGUI/PreferencesUI.py:5546 -#: flatcamTools/ToolNonCopperClear.py:181 flatcamTools/ToolPaint.py:153 +#: flatcamGUI/PreferencesUI.py:5435 flatcamGUI/PreferencesUI.py:5981 +#: flatcamTools/ToolNCC.py:174 flatcamTools/ToolPaint.py:158 msgid "Tool order" msgstr "Werkzeugbestellung" -#: flatcamGUI/PreferencesUI.py:5132 flatcamGUI/PreferencesUI.py:5142 -#: flatcamGUI/PreferencesUI.py:5547 flatcamGUI/PreferencesUI.py:5557 -#: flatcamTools/ToolNonCopperClear.py:182 -#: flatcamTools/ToolNonCopperClear.py:192 flatcamTools/ToolPaint.py:154 -#: flatcamTools/ToolPaint.py:164 +#: flatcamGUI/PreferencesUI.py:5436 flatcamGUI/PreferencesUI.py:5446 +#: flatcamGUI/PreferencesUI.py:5982 flatcamTools/ToolNCC.py:175 +#: flatcamTools/ToolNCC.py:185 flatcamTools/ToolPaint.py:159 +#: flatcamTools/ToolPaint.py:169 msgid "" "This set the way that the tools in the tools table are used.\n" "'No' --> means that the used order is the one in the tool table\n" @@ -10918,73 +11375,40 @@ msgstr "" "festgelegt\n" "in umgekehrter Richtung und deaktivieren Sie diese Steuerung." -#: flatcamGUI/PreferencesUI.py:5140 flatcamGUI/PreferencesUI.py:5555 -#: flatcamTools/ToolNonCopperClear.py:190 flatcamTools/ToolPaint.py:162 +#: flatcamGUI/PreferencesUI.py:5444 flatcamGUI/PreferencesUI.py:5990 +#: flatcamTools/ToolNCC.py:183 flatcamTools/ToolPaint.py:167 msgid "Forward" msgstr "Vorwärts" -#: flatcamGUI/PreferencesUI.py:5141 flatcamGUI/PreferencesUI.py:5556 -#: flatcamTools/ToolNonCopperClear.py:191 flatcamTools/ToolPaint.py:163 +#: flatcamGUI/PreferencesUI.py:5445 flatcamGUI/PreferencesUI.py:5991 +#: flatcamTools/ToolNCC.py:184 flatcamTools/ToolPaint.py:168 msgid "Reverse" msgstr "Rückwärts" -# Double -#: flatcamGUI/PreferencesUI.py:5154 flatcamTools/ToolNonCopperClear.py:321 +#: flatcamGUI/PreferencesUI.py:5545 +msgid "Offset value" +msgstr "Offsetwert" + +# What the hack is a FlatCAM unit?? +#: flatcamGUI/PreferencesUI.py:5547 msgid "" -"How much (fraction) of the tool width to overlap each tool pass.\n" -"Adjust the value starting with lower values\n" -"and increasing it if areas that should be cleared are still \n" -"not cleared.\n" -"Lower values = faster processing, faster execution on CNC.\n" -"Higher values = slow processing and slow execution on CNC\n" -"due of too many paths." +"If used, it will add an offset to the copper features.\n" +"The copper clearing will finish to a distance\n" +"from the copper features.\n" +"The value can be between 0.0 and 9999.9 FlatCAM units." msgstr "" -"Wie viel (Prozent) der Werkzeugbreite überlappt jeden Werkzeugdurchgang.\n" -"Beispiel:\n" -"Ein Wert von 0,25 bedeutet hier 25%% vom oben gefundenen " -"Werkzeugdurchmesser.\n" -"\n" -"Passen Sie den Wert beginnend mit niedrigeren Werten an\n" -"und erhöhen Sie es, wenn nicht alle Bereiche ausgemalt sind.\n" -"Niedrigere Werte = schnellere Verarbeitung, schnellere Ausführung auf der " -"Leiterplatte.\n" -"Höhere Werte = langsame Bearbeitung und langsame Ausführung auf CNC\n" -"wegen zu vieler Pfade." +"Bei Verwendung wird den Kupferelementen ein Offset hinzugefügt.\n" +"Die Kupferreinigung wird bei einer gewissen Entfernung\n" +"zu den Kupferflächen enden.\n" +"Der Wert kann zwischen 0 und 10 FlatCAM-Einheiten liegen." -#: flatcamGUI/PreferencesUI.py:5173 flatcamGUI/PreferencesUI.py:7177 -#: flatcamGUI/PreferencesUI.py:7419 flatcamGUI/PreferencesUI.py:7483 -#: flatcamTools/ToolCopperThieving.py:113 flatcamTools/ToolFiducials.py:174 -#: flatcamTools/ToolFiducials.py:237 flatcamTools/ToolNonCopperClear.py:339 -msgid "Bounding box margin." -msgstr "Begrenzungsrahmenrand." - -#: flatcamGUI/PreferencesUI.py:5186 flatcamGUI/PreferencesUI.py:5604 -#: flatcamTools/ToolNonCopperClear.py:350 -msgid "" -"Algorithm for non-copper clearing:
    Standard: Fixed step inwards." -"
    Seed-based: Outwards from seed.
    Line-based: Parallel " -"lines." -msgstr "" -"Algorithmus für das Nicht-Kupfer-Clearing: Standard : Feststehender " -"Schritt nach innen. Seed-based : Ausgehend vom Saatgut.
    " -"Line-based: Parallele Linien." - -#: flatcamGUI/PreferencesUI.py:5202 flatcamGUI/PreferencesUI.py:5618 -#: flatcamTools/ToolNonCopperClear.py:364 flatcamTools/ToolPaint.py:267 -msgid "Connect" -msgstr "Verbinden" - -#: flatcamGUI/PreferencesUI.py:5211 flatcamGUI/PreferencesUI.py:5626 -#: flatcamTools/ToolNonCopperClear.py:371 flatcamTools/ToolPaint.py:274 -msgid "Contour" -msgstr "Kontur" - -#: flatcamGUI/PreferencesUI.py:5220 flatcamTools/ToolNonCopperClear.py:379 -#: flatcamTools/ToolPaint.py:281 +#: flatcamGUI/PreferencesUI.py:5567 flatcamGUI/PreferencesUI.py:6083 +#: flatcamGUI/PreferencesUI.py:6084 flatcamTools/ToolNCC.py:512 +#: flatcamTools/ToolPaint.py:442 msgid "Rest Machining" msgstr "Restbearbeitung" -#: flatcamGUI/PreferencesUI.py:5222 flatcamTools/ToolNonCopperClear.py:381 +#: flatcamGUI/PreferencesUI.py:5569 flatcamTools/ToolNCC.py:516 msgid "" "If checked, use 'rest machining'.\n" "Basically it will clear copper outside PCB features,\n" @@ -11002,83 +11426,67 @@ msgstr "" "kein kupfer mehr zum löschen oder es gibt keine werkzeuge mehr.\n" "Wenn nicht aktiviert, verwenden Sie den Standardalgorithmus." -#: flatcamGUI/PreferencesUI.py:5236 flatcamTools/ToolNonCopperClear.py:395 -#: flatcamTools/ToolNonCopperClear.py:405 +#: flatcamGUI/PreferencesUI.py:5588 flatcamGUI/PreferencesUI.py:6119 +#: flatcamGUI/PreferencesUI.py:7696 flatcamTools/ToolCopperThieving.py:127 +#: flatcamTools/ToolNCC.py:535 flatcamTools/ToolNCC.py:1311 +#: flatcamTools/ToolNCC.py:1642 flatcamTools/ToolNCC.py:1930 +#: flatcamTools/ToolNCC.py:1985 flatcamTools/ToolPaint.py:486 +#: flatcamTools/ToolPaint.py:946 flatcamTools/ToolPaint.py:1447 +msgid "Area Selection" +msgstr "Bereichsauswahl" + +#: flatcamGUI/PreferencesUI.py:5588 flatcamGUI/PreferencesUI.py:6119 +#: flatcamGUI/PreferencesUI.py:7697 flatcamTools/ToolCopperThieving.py:128 +#: flatcamTools/ToolDblSided.py:217 flatcamTools/ToolNCC.py:535 +#: flatcamTools/ToolNCC.py:1658 flatcamTools/ToolNCC.py:1936 +#: flatcamTools/ToolNCC.py:1993 flatcamTools/ToolNCC.py:2301 +#: flatcamTools/ToolNCC.py:2581 flatcamTools/ToolNCC.py:3007 +#: flatcamTools/ToolPaint.py:486 flatcamTools/ToolPaint.py:931 +#: flatcamTools/ToolPaint.py:1463 tclCommands/TclCommandCopperClear.py:192 +#: tclCommands/TclCommandPaint.py:166 +msgid "Reference Object" +msgstr "Ref. Objekt" + +#: flatcamGUI/PreferencesUI.py:5592 flatcamTools/ToolNCC.py:541 msgid "" -"If used, it will add an offset to the copper features.\n" -"The copper clearing will finish to a distance\n" -"from the copper features.\n" -"The value can be between 0 and 10 FlatCAM units." -msgstr "" -"Bei Verwendung wird den Kupferelementen ein Offset hinzugefügt.\n" -"Die Kupferreinigung wird bis zu einer gewissen Entfernung enden\n" -"von den Kupfermerkmalen.\n" -"Der Wert kann zwischen 0 und 10 FlatCAM-Einheiten liegen." - -#: flatcamGUI/PreferencesUI.py:5245 flatcamTools/ToolNonCopperClear.py:403 -msgid "Offset value" -msgstr "Offsetwert" - -# What the hack is a FlatCAM unit?? -#: flatcamGUI/PreferencesUI.py:5247 -msgid "" -"If used, it will add an offset to the copper features.\n" -"The copper clearing will finish to a distance\n" -"from the copper features.\n" -"The value can be between 0.0 and 9999.9 FlatCAM units." -msgstr "" -"Bei Verwendung wird den Kupferelementen ein Offset hinzugefügt.\n" -"Die Kupferreinigung wird bei einer gewissen Entfernung\n" -"zu den Kupferflächen enden.\n" -"Der Wert kann zwischen 0 und 10 FlatCAM-Einheiten liegen." - -#: flatcamGUI/PreferencesUI.py:5262 flatcamGUI/PreferencesUI.py:7189 -#: flatcamTools/ToolCopperThieving.py:125 -#: flatcamTools/ToolNonCopperClear.py:429 -msgid "Itself" -msgstr "Selbst" - -#: flatcamGUI/PreferencesUI.py:5263 flatcamGUI/PreferencesUI.py:5646 -msgid "Area" -msgstr "Bereich" - -#: flatcamGUI/PreferencesUI.py:5264 flatcamGUI/PreferencesUI.py:5648 -msgid "Ref" -msgstr "Ref" - -#: flatcamGUI/PreferencesUI.py:5267 -msgid "" -"- 'Itself' - the non copper clearing extent\n" -"is based on the object that is copper cleared.\n" +"Selection of area to be processed.\n" +"- 'Itself' - the processing extent is based on the object that is " +"processed.\n" " - 'Area Selection' - left mouse click to start selection of the area to be " -"painted.\n" -"Keeping a modifier key pressed (CTRL or SHIFT) will allow to add multiple " -"areas.\n" -"- 'Reference Object' - will do non copper clearing within the area\n" -"specified by another object." +"processed.\n" +"- 'Reference Object' - will process the area specified by another object." msgstr "" -"- \"Selbst\" - das nicht kupferhaltige Clearing-Ausmaß\n" -"basiert auf dem Objekt, das kupferfrei ist.\n" -"- 'Bereichsauswahl' - Klicken Sie mit der linken Maustaste, um den Bereich " -"auszuwählen, der gemalt werden soll.\n" -"Wenn Sie eine Änderungstaste gedrückt halten (STRG oder UMSCHALTTASTE), " -"können Sie mehrere Bereiche hinzufügen.\n" -"- 'Referenzobjekt' - löscht nicht kupferne Objekte innerhalb des Bereichs\n" -"von einem anderen Objekt angegeben." +"Auswahl des zu verarbeitenden Bereichs.\n" +"- 'Selbst' - Der Verarbeitungsumfang basiert auf dem Objekt, das verarbeitet " +"wird.\n" +"- 'Bereichsauswahl' - Klicken Sie mit der linken Maustaste, um die Auswahl " +"des zu verarbeitenden Bereichs zu starten.\n" +"- 'Referenzobjekt' - verarbeitet den von einem anderen Objekt angegebenen " +"Bereich." -#: flatcamGUI/PreferencesUI.py:5279 flatcamGUI/PreferencesUI.py:5654 +#: flatcamGUI/PreferencesUI.py:5601 flatcamGUI/PreferencesUI.py:6125 +#: flatcamTools/ToolNCC.py:578 flatcamTools/ToolPaint.py:522 +msgid "Shape" +msgstr "Form" + +#: flatcamGUI/PreferencesUI.py:5603 flatcamGUI/PreferencesUI.py:6127 +#: flatcamTools/ToolNCC.py:580 flatcamTools/ToolPaint.py:524 +msgid "The kind of selection shape used for area selection." +msgstr "Die Art der Auswahlform, die für die Bereichsauswahl verwendet wird." + +#: flatcamGUI/PreferencesUI.py:5618 flatcamGUI/PreferencesUI.py:6142 msgid "Normal" msgstr "NormalFormat" -#: flatcamGUI/PreferencesUI.py:5280 flatcamGUI/PreferencesUI.py:5655 +#: flatcamGUI/PreferencesUI.py:5619 flatcamGUI/PreferencesUI.py:6143 msgid "Progressive" msgstr "Progressiv" -#: flatcamGUI/PreferencesUI.py:5281 +#: flatcamGUI/PreferencesUI.py:5620 msgid "NCC Plotting" msgstr "NCC-Plotten" -#: flatcamGUI/PreferencesUI.py:5283 +#: flatcamGUI/PreferencesUI.py:5622 msgid "" "- 'Normal' - normal plotting, done at the end of the NCC job\n" "- 'Progressive' - after each shape is generated it will be plotted." @@ -11086,16 +11494,16 @@ msgstr "" "- 'Normal' - normales Plotten am Ende des NCC-Jobs\n" "- 'Progressiv' - Nachdem jede Form generiert wurde, wird sie geplottet." -#: flatcamGUI/PreferencesUI.py:5297 +#: flatcamGUI/PreferencesUI.py:5636 msgid "Cutout Tool Options" msgstr "Ausschnittwerkzeug-Optionen" -#: flatcamGUI/PreferencesUI.py:5312 flatcamTools/ToolCalculators.py:123 -#: flatcamTools/ToolCutOut.py:123 +#: flatcamGUI/PreferencesUI.py:5651 flatcamTools/ToolCalculators.py:123 +#: flatcamTools/ToolCutOut.py:130 msgid "Tool Diameter" msgstr "Werkzeugdurchm" -#: flatcamGUI/PreferencesUI.py:5314 flatcamTools/ToolCutOut.py:125 +#: flatcamGUI/PreferencesUI.py:5653 flatcamTools/ToolCutOut.py:132 msgid "" "Diameter of the tool used to cutout\n" "the PCB shape out of the surrounding material." @@ -11103,11 +11511,11 @@ msgstr "" "Durchmesser des zum Ausschneiden verwendeten Werkzeugs\n" "die PCB-Form aus dem umgebenden Material." -#: flatcamGUI/PreferencesUI.py:5369 flatcamTools/ToolCutOut.py:104 +#: flatcamGUI/PreferencesUI.py:5708 msgid "Object kind" msgstr "Objektart" -#: flatcamGUI/PreferencesUI.py:5371 flatcamTools/ToolCutOut.py:106 +#: flatcamGUI/PreferencesUI.py:5710 flatcamTools/ToolCutOut.py:78 msgid "" "Choice of what kind the object we want to cutout is.
    - Single: " "contain a single PCB Gerber outline object.
    - Panel: a panel PCB " @@ -11119,15 +11527,15 @@ msgstr "" "Ein Panel-PCB-Gerber Objekt, dass\n" "aus vielen einzelnen PCB-Konturen zusammengesetzt ist." -#: flatcamGUI/PreferencesUI.py:5378 flatcamTools/ToolCutOut.py:112 +#: flatcamGUI/PreferencesUI.py:5717 flatcamTools/ToolCutOut.py:84 msgid "Single" msgstr "Einzeln" -#: flatcamGUI/PreferencesUI.py:5379 flatcamTools/ToolCutOut.py:113 +#: flatcamGUI/PreferencesUI.py:5718 flatcamTools/ToolCutOut.py:85 msgid "Panel" msgstr "Platte" -#: flatcamGUI/PreferencesUI.py:5386 flatcamTools/ToolCutOut.py:186 +#: flatcamGUI/PreferencesUI.py:5725 flatcamTools/ToolCutOut.py:193 msgid "" "Margin over bounds. A positive value here\n" "will make the cutout of the PCB further from\n" @@ -11137,11 +11545,11 @@ msgstr "" "macht den Ausschnitt der Leiterplatte weiter aus\n" "die tatsächliche PCB-Grenze" -#: flatcamGUI/PreferencesUI.py:5399 flatcamTools/ToolCutOut.py:197 +#: flatcamGUI/PreferencesUI.py:5738 flatcamTools/ToolCutOut.py:204 msgid "Gap size" msgstr "Spaltgröße" -#: flatcamGUI/PreferencesUI.py:5401 flatcamTools/ToolCutOut.py:199 +#: flatcamGUI/PreferencesUI.py:5740 flatcamTools/ToolCutOut.py:206 msgid "" "The size of the bridge gaps in the cutout\n" "used to keep the board connected to\n" @@ -11153,11 +11561,11 @@ msgstr "" "das umgebende Material (das eine\n" "von denen die Leiterplatte ausgeschnitten ist)." -#: flatcamGUI/PreferencesUI.py:5415 flatcamTools/ToolCutOut.py:241 +#: flatcamGUI/PreferencesUI.py:5754 flatcamTools/ToolCutOut.py:250 msgid "Gaps" msgstr "Spalt" -#: flatcamGUI/PreferencesUI.py:5417 +#: flatcamGUI/PreferencesUI.py:5756 msgid "" "Number of gaps used for the cutout.\n" "There can be maximum 8 bridges/gaps.\n" @@ -11181,11 +11589,11 @@ msgstr "" "- 2 tb \t- 2 * oben + 2 * unten\n" "- 8 \t- 2 * links + 2 * rechts + 2 * oben + 2 * unten" -#: flatcamGUI/PreferencesUI.py:5439 flatcamTools/ToolCutOut.py:216 +#: flatcamGUI/PreferencesUI.py:5778 flatcamTools/ToolCutOut.py:223 msgid "Convex Shape" msgstr "Konvexe Form" -#: flatcamGUI/PreferencesUI.py:5441 flatcamTools/ToolCutOut.py:219 +#: flatcamGUI/PreferencesUI.py:5780 flatcamTools/ToolCutOut.py:226 msgid "" "Create a convex shape surrounding the entire PCB.\n" "Used only if the source object type is Gerber." @@ -11193,11 +11601,11 @@ msgstr "" "Erstellen Sie eine konvexe Form, die die gesamte Leiterplatte umgibt.\n" "Wird nur verwendet, wenn der Quellobjekttyp Gerber ist." -#: flatcamGUI/PreferencesUI.py:5454 +#: flatcamGUI/PreferencesUI.py:5793 msgid "2Sided Tool Options" msgstr "2Seitige Werkzeugoptionen" -#: flatcamGUI/PreferencesUI.py:5460 +#: flatcamGUI/PreferencesUI.py:5799 msgid "" "A tool to help in creating a double sided\n" "PCB using alignment holes." @@ -11205,36 +11613,41 @@ msgstr "" "Ein Werkzeug, das beim Erstellen eines doppelseitigen Dokuments hilft\n" "PCB mit Ausrichtungslöchern." -#: flatcamGUI/PreferencesUI.py:5474 +#: flatcamGUI/PreferencesUI.py:5813 msgid "Drill dia" msgstr "Bohrdurchmesser" -#: flatcamGUI/PreferencesUI.py:5476 flatcamTools/ToolDblSided.py:274 -#: flatcamTools/ToolDblSided.py:285 +#: flatcamGUI/PreferencesUI.py:5815 flatcamTools/ToolDblSided.py:364 +#: flatcamTools/ToolDblSided.py:369 msgid "Diameter of the drill for the alignment holes." msgstr "Durchmesser des Bohrers für die Ausrichtungslöcher." -#: flatcamGUI/PreferencesUI.py:5485 flatcamTools/ToolDblSided.py:146 -msgid "Mirror Axis:" -msgstr "Spiegelachse:" +#: flatcamGUI/PreferencesUI.py:5822 flatcamTools/ToolDblSided.py:378 +msgid "Align Axis" +msgstr "Achse ausrichten" -#: flatcamGUI/PreferencesUI.py:5487 flatcamTools/ToolDblSided.py:147 +#: flatcamGUI/PreferencesUI.py:5824 flatcamGUI/PreferencesUI.py:5837 +#: flatcamTools/ToolDblSided.py:166 flatcamTools/ToolDblSided.py:380 msgid "Mirror vertically (X) or horizontally (Y)." msgstr "Vertikal spiegeln (X) oder horizontal (Y)." -#: flatcamGUI/PreferencesUI.py:5496 flatcamTools/ToolDblSided.py:156 +#: flatcamGUI/PreferencesUI.py:5835 +msgid "Mirror Axis:" +msgstr "Spiegelachse:" + +#: flatcamGUI/PreferencesUI.py:5846 flatcamTools/ToolDblSided.py:182 msgid "Point" msgstr "Punkt" -#: flatcamGUI/PreferencesUI.py:5497 flatcamTools/ToolDblSided.py:157 +#: flatcamGUI/PreferencesUI.py:5847 flatcamTools/ToolDblSided.py:183 msgid "Box" msgstr "Box" -#: flatcamGUI/PreferencesUI.py:5498 flatcamTools/ToolDblSided.py:158 +#: flatcamGUI/PreferencesUI.py:5848 msgid "Axis Ref" msgstr "Achsenreferenz" -#: flatcamGUI/PreferencesUI.py:5500 flatcamTools/ToolDblSided.py:160 +#: flatcamGUI/PreferencesUI.py:5850 msgid "" "The axis should pass through a point or cut\n" " a specified box (in a FlatCAM object) through \n" @@ -11244,49 +11657,68 @@ msgstr "" "eine angegebene Box (in einem FlatCAM-Objekt) durch\n" "das Zentrum." -#: flatcamGUI/PreferencesUI.py:5516 +#: flatcamGUI/PreferencesUI.py:5866 msgid "Paint Tool Options" msgstr "Paint werkzeug-Optionen" -#: flatcamGUI/PreferencesUI.py:5522 +#: flatcamGUI/PreferencesUI.py:5872 msgid "Parameters:" msgstr "Parameter:" -#: flatcamGUI/PreferencesUI.py:5636 flatcamTools/ToolPaint.py:296 -#: flatcamTools/ToolPaint.py:313 +#: flatcamGUI/PreferencesUI.py:6086 flatcamTools/ToolPaint.py:445 msgid "" -"How to select Polygons to be painted.\n" +"If checked, use 'rest machining'.\n" +"Basically it will clear copper outside PCB features,\n" +"using the biggest tool and continue with the next tools,\n" +"from bigger to smaller, to clear areas of copper that\n" +"could not be cleared by previous tool, until there is\n" +"no more copper to clear or there are no more tools.\n" +"\n" +"If not checked, use the standard algorithm." +msgstr "" +"Wenn aktiviert, verwenden Sie \"Restbearbeitung\".\n" +"Grundsätzlich wird Kupfer außerhalb der PCB-Merkmale gelöscht.\n" +"das größte Werkzeug verwenden und mit den nächsten Werkzeugen fortfahren,\n" +"von größeren zu kleineren, um Kupferbereiche zu reinigen\n" +"konnte nicht durch vorheriges Werkzeug gelöscht werden, bis es gibt\n" +"kein kupfer mehr zum löschen oder es gibt keine werkzeuge mehr.\n" +"\n" +"Wenn nicht aktiviert, verwenden Sie den Standardalgorithmus." + +#: flatcamGUI/PreferencesUI.py:6099 flatcamTools/ToolPaint.py:458 +msgid "" +"Selection of area to be processed.\n" "- 'Polygon Selection' - left mouse click to add/remove polygons to be " -"painted.\n" +"processed.\n" "- 'Area Selection' - left mouse click to start selection of the area to be " -"painted.\n" +"processed.\n" "Keeping a modifier key pressed (CTRL or SHIFT) will allow to add multiple " "areas.\n" -"- 'All Polygons' - the Paint will start after click.\n" -"- 'Reference Object' - will do non copper clearing within the area\n" -"specified by another object." +"- 'All Polygons' - the process will start after click.\n" +"- 'Reference Object' - will process the area specified by another object." msgstr "" -"So wählen Sie zu malende Polygone aus.\n" -"\n" -"- 'Polygonauswahl' - Linker Mausklick um das Polygon das ausgemalt werden " -"soll hinzuzufügen oder zu löschen.\n" -"- 'Bereichsauswahl' - Klicken Sie mit der linken Maustaste, um den Bereich " -"auszuwählen, der ausgemalt werden soll.\n" -"Wenn Sie eine Änderungstaste gedrückt halten (STRG oder UMSCHALTTASTE), " -"können Sie mehrere Bereiche hinzufügen.\n" -"- 'Alle Polygone' - Der Malvorgang wird nach dem Klicken gestartet.\n" -"- 'Referenzobjekt' - löscht nicht kupferne Objekte innerhalb des Bereichs\n" -"von einem anderen Objekt angegeben." +"Auswahl des zu verarbeitenden Bereichs.\n" +"- 'Polygonauswahl' - Klicken Sie mit der linken Maustaste, um zu " +"verarbeitende Polygone hinzuzufügen / zu entfernen.\n" +"- 'Bereichsauswahl' - Klicken Sie mit der linken Maustaste, um die Auswahl " +"des zu verarbeitenden Bereichs zu starten.\n" +"Wenn Sie eine Modifizierertaste gedrückt halten (STRG oder SHIFT), können " +"Sie mehrere Bereiche hinzufügen.\n" +"- 'Alle Polygone' - Der Vorgang wird nach dem Klicken gestartet.\n" +"- 'Referenzobjekt' - verarbeitet den von einem anderen Objekt angegebenen " +"Bereich." -#: flatcamGUI/PreferencesUI.py:5645 -msgid "Sel" -msgstr "Wählen" +#: flatcamGUI/PreferencesUI.py:6119 flatcamTools/ToolPaint.py:486 +#: flatcamTools/ToolPaint.py:942 flatcamTools/ToolPaint.py:1427 +#: tclCommands/TclCommandPaint.py:164 +msgid "Polygon Selection" +msgstr "Polygon auswahl" -#: flatcamGUI/PreferencesUI.py:5656 +#: flatcamGUI/PreferencesUI.py:6144 msgid "Paint Plotting" msgstr "Malen Sie Plotten" -#: flatcamGUI/PreferencesUI.py:5658 +#: flatcamGUI/PreferencesUI.py:6146 msgid "" "- 'Normal' - normal plotting, done at the end of the Paint job\n" "- 'Progressive' - after each shape is generated it will be plotted." @@ -11294,11 +11726,11 @@ msgstr "" "- 'Normal' - normales Plotten am Ende des Malvorgangs\n" "- 'Progressiv' - Nachdem jede Form generiert wurde, wird sie geplottet." -#: flatcamGUI/PreferencesUI.py:5672 +#: flatcamGUI/PreferencesUI.py:6160 msgid "Film Tool Options" msgstr "Filmwerkzeugoptionen" -#: flatcamGUI/PreferencesUI.py:5678 +#: flatcamGUI/PreferencesUI.py:6166 msgid "" "Create a PCB film from a Gerber or Geometry\n" "FlatCAM object.\n" @@ -11308,11 +11740,11 @@ msgstr "" "FlatCAM-Objekt\n" "Die Datei wird im SVG-Format gespeichert." -#: flatcamGUI/PreferencesUI.py:5689 +#: flatcamGUI/PreferencesUI.py:6177 msgid "Film Type" msgstr "Filmtyp" -#: flatcamGUI/PreferencesUI.py:5691 flatcamTools/ToolFilm.py:300 +#: flatcamGUI/PreferencesUI.py:6179 flatcamTools/ToolFilm.py:300 msgid "" "Generate a Positive black film or a Negative film.\n" "Positive means that it will print the features\n" @@ -11328,19 +11760,19 @@ msgstr "" "mit weiß auf einer schwarzen leinwand.\n" "Das Filmformat ist SVG." -#: flatcamGUI/PreferencesUI.py:5702 +#: flatcamGUI/PreferencesUI.py:6190 msgid "Film Color" msgstr "Filmfarbe" -#: flatcamGUI/PreferencesUI.py:5704 +#: flatcamGUI/PreferencesUI.py:6192 msgid "Set the film color when positive film is selected." msgstr "Stellen Sie die Filmfarbe ein, wenn Positivfilm ausgewählt ist." -#: flatcamGUI/PreferencesUI.py:5727 flatcamTools/ToolFilm.py:316 +#: flatcamGUI/PreferencesUI.py:6215 flatcamTools/ToolFilm.py:316 msgid "Border" msgstr "Rand" -#: flatcamGUI/PreferencesUI.py:5729 flatcamTools/ToolFilm.py:318 +#: flatcamGUI/PreferencesUI.py:6217 flatcamTools/ToolFilm.py:318 msgid "" "Specify a border around the object.\n" "Only for negative film.\n" @@ -11360,11 +11792,11 @@ msgstr "" "weiße Farbe wie der Rest und die mit der verwechseln kann\n" "Umgebung, wenn nicht für diese Grenze." -#: flatcamGUI/PreferencesUI.py:5746 flatcamTools/ToolFilm.py:283 +#: flatcamGUI/PreferencesUI.py:6234 flatcamTools/ToolFilm.py:283 msgid "Scale Stroke" msgstr "Skalierungshub" -#: flatcamGUI/PreferencesUI.py:5748 flatcamTools/ToolFilm.py:285 +#: flatcamGUI/PreferencesUI.py:6236 flatcamTools/ToolFilm.py:285 msgid "" "Scale the line stroke thickness of each feature in the SVG file.\n" "It means that the line that envelope each SVG feature will be thicker or " @@ -11376,11 +11808,11 @@ msgstr "" "dünner ist.\n" "Daher können die Feinheiten von diesem Parameter stärker beeinflusst werden." -#: flatcamGUI/PreferencesUI.py:5755 flatcamTools/ToolFilm.py:141 +#: flatcamGUI/PreferencesUI.py:6243 flatcamTools/ToolFilm.py:141 msgid "Film Adjustments" msgstr "Filmeinstellungen" -#: flatcamGUI/PreferencesUI.py:5757 flatcamTools/ToolFilm.py:143 +#: flatcamGUI/PreferencesUI.py:6245 flatcamTools/ToolFilm.py:143 msgid "" "Sometime the printers will distort the print shape, especially the Laser " "types.\n" @@ -11390,11 +11822,11 @@ msgstr "" "In diesem Abschnitt finden Sie die Tools zum Ausgleichen der " "Druckverzerrungen." -#: flatcamGUI/PreferencesUI.py:5764 flatcamTools/ToolFilm.py:150 +#: flatcamGUI/PreferencesUI.py:6252 flatcamTools/ToolFilm.py:150 msgid "Scale Film geometry" msgstr "Filmgeometrie skalieren" -#: flatcamGUI/PreferencesUI.py:5766 flatcamTools/ToolFilm.py:152 +#: flatcamGUI/PreferencesUI.py:6254 flatcamTools/ToolFilm.py:152 msgid "" "A value greater than 1 will stretch the film\n" "while a value less than 1 will jolt it." @@ -11402,21 +11834,21 @@ msgstr "" "Ein Wert größer als 1 streckt den Film\n" "Ein Wert unter 1 ruckelt." -#: flatcamGUI/PreferencesUI.py:5776 flatcamGUI/PreferencesUI.py:6296 -#: flatcamTools/ToolFilm.py:162 flatcamTools/ToolTransform.py:148 +#: flatcamGUI/PreferencesUI.py:6264 flatcamGUI/PreferencesUI.py:6783 +#: flatcamTools/ToolFilm.py:162 flatcamTools/ToolTransform.py:149 msgid "X factor" msgstr "X Faktor" -#: flatcamGUI/PreferencesUI.py:5785 flatcamGUI/PreferencesUI.py:6309 +#: flatcamGUI/PreferencesUI.py:6273 flatcamGUI/PreferencesUI.py:6796 #: flatcamTools/ToolFilm.py:171 flatcamTools/ToolTransform.py:169 msgid "Y factor" msgstr "Y Faktor" -#: flatcamGUI/PreferencesUI.py:5795 flatcamTools/ToolFilm.py:189 +#: flatcamGUI/PreferencesUI.py:6283 flatcamTools/ToolFilm.py:189 msgid "Skew Film geometry" msgstr "Verzerren Sie die Filmgeometrie" -#: flatcamGUI/PreferencesUI.py:5797 flatcamTools/ToolFilm.py:191 +#: flatcamGUI/PreferencesUI.py:6285 flatcamTools/ToolFilm.py:191 msgid "" "Positive values will skew to the right\n" "while negative values will skew to the left." @@ -11424,17 +11856,17 @@ msgstr "" "Positive Werte werden nach rechts verschoben\n" "negative Werte werden nach links verschoben." -#: flatcamGUI/PreferencesUI.py:5807 flatcamGUI/PreferencesUI.py:6265 +#: flatcamGUI/PreferencesUI.py:6295 flatcamGUI/PreferencesUI.py:6752 #: flatcamTools/ToolFilm.py:201 flatcamTools/ToolTransform.py:98 msgid "X angle" msgstr "X Winkel" -#: flatcamGUI/PreferencesUI.py:5816 flatcamGUI/PreferencesUI.py:6279 -#: flatcamTools/ToolFilm.py:210 flatcamTools/ToolTransform.py:120 +#: flatcamGUI/PreferencesUI.py:6304 flatcamGUI/PreferencesUI.py:6766 +#: flatcamTools/ToolFilm.py:210 flatcamTools/ToolTransform.py:119 msgid "Y angle" msgstr "Y Winkel" -#: flatcamGUI/PreferencesUI.py:5827 flatcamTools/ToolFilm.py:221 +#: flatcamGUI/PreferencesUI.py:6315 flatcamTools/ToolFilm.py:221 msgid "" "The reference point to be used as origin for the skew.\n" "It can be one of the four points of the geometry bounding box." @@ -11442,58 +11874,54 @@ msgstr "" "Der Referenzpunkt, der als Ursprung für den Versatz verwendet werden soll.\n" "Dies kann einer der vier Punkte des Geometrie-Begrenzungsrahmens sein." -#: flatcamGUI/PreferencesUI.py:5830 flatcamTools/ToolFiducials.py:87 +#: flatcamGUI/PreferencesUI.py:6318 flatcamTools/ToolFiducials.py:87 #: flatcamTools/ToolFilm.py:224 msgid "Bottom Left" msgstr "Unten links" -#: flatcamGUI/PreferencesUI.py:5831 flatcamTools/ToolFilm.py:225 +#: flatcamGUI/PreferencesUI.py:6319 flatcamTools/ToolFilm.py:225 msgid "Top Left" msgstr "Oben links" -#: flatcamGUI/PreferencesUI.py:5832 flatcamTools/ToolFilm.py:226 +#: flatcamGUI/PreferencesUI.py:6320 flatcamTools/ToolFilm.py:226 msgid "Bottom Right" msgstr "Unten rechts" -#: flatcamGUI/PreferencesUI.py:5833 flatcamTools/ToolFilm.py:227 +#: flatcamGUI/PreferencesUI.py:6321 flatcamTools/ToolFilm.py:227 msgid "Top right" msgstr "Oben rechts" -#: flatcamGUI/PreferencesUI.py:5841 flatcamTools/ToolFilm.py:244 +#: flatcamGUI/PreferencesUI.py:6329 flatcamTools/ToolFilm.py:244 msgid "Mirror Film geometry" msgstr "Spiegeln Sie die Filmgeometrie" -#: flatcamGUI/PreferencesUI.py:5843 flatcamTools/ToolFilm.py:246 +#: flatcamGUI/PreferencesUI.py:6331 flatcamTools/ToolFilm.py:246 msgid "Mirror the film geometry on the selected axis or on both." msgstr "" "Spiegeln Sie die Filmgeometrie auf der ausgewählten Achse oder auf beiden." -#: flatcamGUI/PreferencesUI.py:5855 flatcamTools/ToolFilm.py:258 -msgid "Both" -msgstr "Both" - -#: flatcamGUI/PreferencesUI.py:5857 flatcamTools/ToolFilm.py:260 +#: flatcamGUI/PreferencesUI.py:6345 flatcamTools/ToolFilm.py:260 msgid "Mirror axis" msgstr "Achse spiegeln" -#: flatcamGUI/PreferencesUI.py:5867 flatcamTools/ToolFilm.py:403 +#: flatcamGUI/PreferencesUI.py:6355 flatcamTools/ToolFilm.py:405 msgid "SVG" msgstr "SVG" -#: flatcamGUI/PreferencesUI.py:5868 flatcamTools/ToolFilm.py:404 +#: flatcamGUI/PreferencesUI.py:6356 flatcamTools/ToolFilm.py:406 msgid "PNG" msgstr "PNG" -#: flatcamGUI/PreferencesUI.py:5869 flatcamTools/ToolFilm.py:405 +#: flatcamGUI/PreferencesUI.py:6357 flatcamTools/ToolFilm.py:407 msgid "PDF" msgstr "PDF" -#: flatcamGUI/PreferencesUI.py:5872 flatcamTools/ToolFilm.py:298 -#: flatcamTools/ToolFilm.py:408 +#: flatcamGUI/PreferencesUI.py:6360 flatcamTools/ToolFilm.py:298 +#: flatcamTools/ToolFilm.py:410 msgid "Film Type:" msgstr "Filmtyp:" -#: flatcamGUI/PreferencesUI.py:5874 flatcamTools/ToolFilm.py:410 +#: flatcamGUI/PreferencesUI.py:6362 flatcamTools/ToolFilm.py:412 msgid "" "The file type of the saved film. Can be:\n" "- 'SVG' -> open-source vectorial format\n" @@ -11505,23 +11933,23 @@ msgstr "" "- 'PNG' -> raster image\n" "- 'PDF' -> portable document format" -#: flatcamGUI/PreferencesUI.py:5883 flatcamTools/ToolFilm.py:419 +#: flatcamGUI/PreferencesUI.py:6371 flatcamTools/ToolFilm.py:421 msgid "Page Orientation" msgstr "Seitenausrichtung" -#: flatcamGUI/PreferencesUI.py:5896 flatcamTools/ToolFilm.py:432 +#: flatcamGUI/PreferencesUI.py:6384 flatcamTools/ToolFilm.py:434 msgid "Page Size" msgstr "Seitengröße" -#: flatcamGUI/PreferencesUI.py:5897 flatcamTools/ToolFilm.py:433 +#: flatcamGUI/PreferencesUI.py:6385 flatcamTools/ToolFilm.py:435 msgid "A selection of standard ISO 216 page sizes." msgstr "Eine Auswahl von Standard ISO 216 Seitengrößen." -#: flatcamGUI/PreferencesUI.py:5969 +#: flatcamGUI/PreferencesUI.py:6457 msgid "Panelize Tool Options" msgstr "Panelize Werkzeugoptionen" -#: flatcamGUI/PreferencesUI.py:5975 +#: flatcamGUI/PreferencesUI.py:6463 msgid "" "Create an object that contains an array of (x, y) elements,\n" "each element is a copy of the source object spaced\n" @@ -11531,11 +11959,11 @@ msgstr "" "Jedes Element ist eine Kopie des Quellobjekts\n" "in einem X-Abstand, Y-Abstand voneinander." -#: flatcamGUI/PreferencesUI.py:5992 flatcamTools/ToolPanelize.py:160 +#: flatcamGUI/PreferencesUI.py:6480 flatcamTools/ToolPanelize.py:163 msgid "Spacing cols" msgstr "Abstandspalten" -#: flatcamGUI/PreferencesUI.py:5994 flatcamTools/ToolPanelize.py:162 +#: flatcamGUI/PreferencesUI.py:6482 flatcamTools/ToolPanelize.py:165 msgid "" "Spacing between columns of the desired panel.\n" "In current units." @@ -11543,11 +11971,11 @@ msgstr "" "Abstand zwischen den Spalten des gewünschten Bereichs.\n" "In aktuellen Einheiten." -#: flatcamGUI/PreferencesUI.py:6006 flatcamTools/ToolPanelize.py:172 +#: flatcamGUI/PreferencesUI.py:6494 flatcamTools/ToolPanelize.py:175 msgid "Spacing rows" msgstr "Abstand Reihen" -#: flatcamGUI/PreferencesUI.py:6008 flatcamTools/ToolPanelize.py:174 +#: flatcamGUI/PreferencesUI.py:6496 flatcamTools/ToolPanelize.py:177 msgid "" "Spacing between rows of the desired panel.\n" "In current units." @@ -11555,36 +11983,31 @@ msgstr "" "Abstand zwischen den Reihen des gewünschten Feldes.\n" "In aktuellen Einheiten." -#: flatcamGUI/PreferencesUI.py:6019 flatcamTools/ToolPanelize.py:183 +#: flatcamGUI/PreferencesUI.py:6507 flatcamTools/ToolPanelize.py:186 msgid "Columns" msgstr "Säulen" -#: flatcamGUI/PreferencesUI.py:6021 flatcamTools/ToolPanelize.py:185 +#: flatcamGUI/PreferencesUI.py:6509 flatcamTools/ToolPanelize.py:188 msgid "Number of columns of the desired panel" msgstr "Anzahl der Spalten des gewünschten Bereichs" -#: flatcamGUI/PreferencesUI.py:6031 flatcamTools/ToolPanelize.py:193 +#: flatcamGUI/PreferencesUI.py:6519 flatcamTools/ToolPanelize.py:196 msgid "Rows" msgstr "Reihen" -#: flatcamGUI/PreferencesUI.py:6033 flatcamTools/ToolPanelize.py:195 +#: flatcamGUI/PreferencesUI.py:6521 flatcamTools/ToolPanelize.py:198 msgid "Number of rows of the desired panel" msgstr "Anzahl der Zeilen des gewünschten Panels" -#: flatcamGUI/PreferencesUI.py:6039 flatcamTools/ToolCalibration.py:196 -#: flatcamTools/ToolCalibration.py:634 flatcamTools/ToolPanelize.py:201 -msgid "Gerber" -msgstr "Gerber" - -#: flatcamGUI/PreferencesUI.py:6040 flatcamTools/ToolPanelize.py:202 +#: flatcamGUI/PreferencesUI.py:6528 flatcamTools/ToolPanelize.py:205 msgid "Geo" msgstr "Geo" -#: flatcamGUI/PreferencesUI.py:6041 flatcamTools/ToolPanelize.py:203 +#: flatcamGUI/PreferencesUI.py:6529 flatcamTools/ToolPanelize.py:206 msgid "Panel Type" msgstr "Panel-Typ" -#: flatcamGUI/PreferencesUI.py:6043 +#: flatcamGUI/PreferencesUI.py:6531 msgid "" "Choose the type of object for the panel object:\n" "- Gerber\n" @@ -11594,11 +12017,11 @@ msgstr "" "- Gerber\n" "- Geometrie" -#: flatcamGUI/PreferencesUI.py:6052 +#: flatcamGUI/PreferencesUI.py:6540 msgid "Constrain within" msgstr "Beschränkung innerhalb" -#: flatcamGUI/PreferencesUI.py:6054 flatcamTools/ToolPanelize.py:215 +#: flatcamGUI/PreferencesUI.py:6542 flatcamTools/ToolPanelize.py:218 msgid "" "Area define by DX and DY within to constrain the panel.\n" "DX and DY values are in current units.\n" @@ -11612,11 +12035,11 @@ msgstr "" "Das letzte Panel enthält so viele Spalten und Zeilen wie\n" "Sie passen vollständig in den ausgewählten Bereich." -#: flatcamGUI/PreferencesUI.py:6067 flatcamTools/ToolPanelize.py:227 +#: flatcamGUI/PreferencesUI.py:6555 flatcamTools/ToolPanelize.py:230 msgid "Width (DX)" msgstr "Breite (DX)" -#: flatcamGUI/PreferencesUI.py:6069 flatcamTools/ToolPanelize.py:229 +#: flatcamGUI/PreferencesUI.py:6557 flatcamTools/ToolPanelize.py:232 msgid "" "The width (DX) within which the panel must fit.\n" "In current units." @@ -11624,11 +12047,11 @@ msgstr "" "Die Breite (DX), in die das Panel passen muss.\n" "In aktuellen Einheiten." -#: flatcamGUI/PreferencesUI.py:6080 flatcamTools/ToolPanelize.py:238 +#: flatcamGUI/PreferencesUI.py:6568 flatcamTools/ToolPanelize.py:241 msgid "Height (DY)" msgstr "Höhe (DY)" -#: flatcamGUI/PreferencesUI.py:6082 flatcamTools/ToolPanelize.py:240 +#: flatcamGUI/PreferencesUI.py:6570 flatcamTools/ToolPanelize.py:243 msgid "" "The height (DY)within which the panel must fit.\n" "In current units." @@ -11636,15 +12059,15 @@ msgstr "" "Die Höhe (DY), in die die Platte passen muss.\n" "In aktuellen Einheiten." -#: flatcamGUI/PreferencesUI.py:6096 +#: flatcamGUI/PreferencesUI.py:6584 msgid "Calculators Tool Options" msgstr "Rechner-Tool-Optionen" -#: flatcamGUI/PreferencesUI.py:6100 flatcamTools/ToolCalculators.py:25 +#: flatcamGUI/PreferencesUI.py:6588 flatcamTools/ToolCalculators.py:25 msgid "V-Shape Tool Calculator" msgstr "V-Shape-Werkzeugrechner" -#: flatcamGUI/PreferencesUI.py:6102 +#: flatcamGUI/PreferencesUI.py:6590 msgid "" "Calculate the tool diameter for a given V-shape tool,\n" "having the tip diameter, tip angle and\n" @@ -11655,11 +12078,11 @@ msgstr "" "mit dem Spitzendurchmesser, Spitzenwinkel und\n" "Schnitttiefe als Parameter." -#: flatcamGUI/PreferencesUI.py:6117 flatcamTools/ToolCalculators.py:94 +#: flatcamGUI/PreferencesUI.py:6607 flatcamTools/ToolCalculators.py:94 msgid "Tip Diameter" msgstr "Spitzendurchmesser" -#: flatcamGUI/PreferencesUI.py:6119 flatcamTools/ToolCalculators.py:102 +#: flatcamGUI/PreferencesUI.py:6609 flatcamTools/ToolCalculators.py:102 msgid "" "This is the tool tip diameter.\n" "It is specified by manufacturer." @@ -11667,11 +12090,11 @@ msgstr "" "Dies ist der Werkzeugspitzendurchmesser.\n" "Es wird vom Hersteller angegeben." -#: flatcamGUI/PreferencesUI.py:6131 flatcamTools/ToolCalculators.py:105 +#: flatcamGUI/PreferencesUI.py:6621 flatcamTools/ToolCalculators.py:105 msgid "Tip Angle" msgstr "Spitzenwinkel" -#: flatcamGUI/PreferencesUI.py:6133 +#: flatcamGUI/PreferencesUI.py:6623 msgid "" "This is the angle on the tip of the tool.\n" "It is specified by manufacturer." @@ -11679,7 +12102,7 @@ msgstr "" "Dies ist der Winkel an der Spitze des Werkzeugs.\n" "Es wird vom Hersteller angegeben." -#: flatcamGUI/PreferencesUI.py:6147 +#: flatcamGUI/PreferencesUI.py:6637 msgid "" "This is depth to cut into material.\n" "In the CNCJob object it is the CutZ parameter." @@ -11687,11 +12110,11 @@ msgstr "" "Dies ist die Tiefe zum Schneiden in Material.\n" "Im CNCJob-Objekt ist dies der Parameter CutZ." -#: flatcamGUI/PreferencesUI.py:6154 flatcamTools/ToolCalculators.py:27 +#: flatcamGUI/PreferencesUI.py:6644 flatcamTools/ToolCalculators.py:27 msgid "ElectroPlating Calculator" msgstr "Galvanikrechner" -#: flatcamGUI/PreferencesUI.py:6156 flatcamTools/ToolCalculators.py:158 +#: flatcamGUI/PreferencesUI.py:6646 flatcamTools/ToolCalculators.py:158 msgid "" "This calculator is useful for those who plate the via/pad/drill holes,\n" "using a method like grahite ink or calcium hypophosphite ink or palladium " @@ -11702,27 +12125,27 @@ msgstr "" "unter Verwendung einer Methode wie Grahit-Tinte oder Calcium-Hypophosphit-" "Tinte oder Palladiumchlorid." -#: flatcamGUI/PreferencesUI.py:6170 flatcamTools/ToolCalculators.py:167 +#: flatcamGUI/PreferencesUI.py:6657 flatcamTools/ToolCalculators.py:167 msgid "Board Length" msgstr "PCB Länge" -#: flatcamGUI/PreferencesUI.py:6172 flatcamTools/ToolCalculators.py:173 +#: flatcamGUI/PreferencesUI.py:6659 flatcamTools/ToolCalculators.py:173 msgid "This is the board length. In centimeters." msgstr "Dies ist die Boardlänge. In Zentimeter." -#: flatcamGUI/PreferencesUI.py:6182 flatcamTools/ToolCalculators.py:175 +#: flatcamGUI/PreferencesUI.py:6669 flatcamTools/ToolCalculators.py:175 msgid "Board Width" msgstr "PCB Breite" -#: flatcamGUI/PreferencesUI.py:6184 flatcamTools/ToolCalculators.py:181 +#: flatcamGUI/PreferencesUI.py:6671 flatcamTools/ToolCalculators.py:181 msgid "This is the board width.In centimeters." msgstr "Dies ist die Breite der Platte in Zentimetern." -#: flatcamGUI/PreferencesUI.py:6189 flatcamTools/ToolCalculators.py:183 +#: flatcamGUI/PreferencesUI.py:6676 flatcamTools/ToolCalculators.py:183 msgid "Current Density" msgstr "Stromdichte" -#: flatcamGUI/PreferencesUI.py:6195 flatcamTools/ToolCalculators.py:190 +#: flatcamGUI/PreferencesUI.py:6682 flatcamTools/ToolCalculators.py:190 msgid "" "Current density to pass through the board. \n" "In Amps per Square Feet ASF." @@ -11730,11 +12153,11 @@ msgstr "" "Stromdichte durch die Platine.\n" "In Ampere pro Quadratfuß ASF." -#: flatcamGUI/PreferencesUI.py:6201 flatcamTools/ToolCalculators.py:193 +#: flatcamGUI/PreferencesUI.py:6688 flatcamTools/ToolCalculators.py:193 msgid "Copper Growth" msgstr "Kupferwachstum" -#: flatcamGUI/PreferencesUI.py:6207 flatcamTools/ToolCalculators.py:200 +#: flatcamGUI/PreferencesUI.py:6694 flatcamTools/ToolCalculators.py:200 msgid "" "How thick the copper growth is intended to be.\n" "In microns." @@ -11742,11 +12165,11 @@ msgstr "" "Wie dick soll das Kupferwachstum sein.\n" "In Mikrometern." -#: flatcamGUI/PreferencesUI.py:6220 +#: flatcamGUI/PreferencesUI.py:6707 msgid "Transform Tool Options" msgstr "Umwandlungswerkzeug-Optionen" -#: flatcamGUI/PreferencesUI.py:6226 +#: flatcamGUI/PreferencesUI.py:6713 msgid "" "Various transformations that can be applied\n" "on a FlatCAM object." @@ -11754,19 +12177,19 @@ msgstr "" "Verschiedene Transformationen, die angewendet werden können\n" "auf einem FlatCAM-Objekt." -#: flatcamGUI/PreferencesUI.py:6257 +#: flatcamGUI/PreferencesUI.py:6744 msgid "Skew" msgstr "Neigung" -#: flatcamGUI/PreferencesUI.py:6298 flatcamTools/ToolTransform.py:150 +#: flatcamGUI/PreferencesUI.py:6785 flatcamTools/ToolTransform.py:151 msgid "Factor for scaling on X axis." msgstr "Faktor für die Skalierung auf der X-Achse." -#: flatcamGUI/PreferencesUI.py:6311 flatcamTools/ToolTransform.py:171 +#: flatcamGUI/PreferencesUI.py:6798 flatcamTools/ToolTransform.py:171 msgid "Factor for scaling on Y axis." msgstr "Faktor für die Skalierung auf der Y-Achse." -#: flatcamGUI/PreferencesUI.py:6319 flatcamTools/ToolTransform.py:194 +#: flatcamGUI/PreferencesUI.py:6806 flatcamTools/ToolTransform.py:192 msgid "" "Scale the selected object(s)\n" "using the Scale_X factor for both axis." @@ -11774,7 +12197,7 @@ msgstr "" "Skalieren Sie die ausgewählten Objekte\n" "Verwenden des Skalierungsfaktors X für beide Achsen." -#: flatcamGUI/PreferencesUI.py:6327 flatcamTools/ToolTransform.py:202 +#: flatcamGUI/PreferencesUI.py:6814 flatcamTools/ToolTransform.py:199 msgid "" "Scale the selected object(s)\n" "using the origin reference when checked,\n" @@ -11786,32 +12209,32 @@ msgstr "" "und die Mitte der größten Begrenzungsbox\n" "der ausgewählten Objekte, wenn sie nicht markiert sind." -#: flatcamGUI/PreferencesUI.py:6343 flatcamTools/ToolTransform.py:217 +#: flatcamGUI/PreferencesUI.py:6830 flatcamTools/ToolTransform.py:218 msgid "X val" msgstr "X-Wert" -#: flatcamGUI/PreferencesUI.py:6345 flatcamTools/ToolTransform.py:219 +#: flatcamGUI/PreferencesUI.py:6832 flatcamTools/ToolTransform.py:220 msgid "Distance to offset on X axis. In current units." msgstr "Abstand zum Offset auf der X-Achse. In aktuellen Einheiten." -#: flatcamGUI/PreferencesUI.py:6356 flatcamTools/ToolTransform.py:238 +#: flatcamGUI/PreferencesUI.py:6843 flatcamTools/ToolTransform.py:238 msgid "Y val" msgstr "Y-Wert" -#: flatcamGUI/PreferencesUI.py:6358 flatcamTools/ToolTransform.py:240 +#: flatcamGUI/PreferencesUI.py:6845 flatcamTools/ToolTransform.py:240 msgid "Distance to offset on Y axis. In current units." msgstr "Abstand zum Offset auf der Y-Achse. In aktuellen Einheiten." -#: flatcamGUI/PreferencesUI.py:6364 flatcamTools/ToolDblSided.py:62 -#: flatcamTools/ToolDblSided.py:90 flatcamTools/ToolDblSided.py:120 +#: flatcamGUI/PreferencesUI.py:6851 flatcamTools/ToolDblSided.py:68 +#: flatcamTools/ToolDblSided.py:96 flatcamTools/ToolDblSided.py:126 msgid "Mirror" msgstr "Spiegeln" -#: flatcamGUI/PreferencesUI.py:6368 flatcamTools/ToolTransform.py:285 +#: flatcamGUI/PreferencesUI.py:6855 flatcamTools/ToolTransform.py:284 msgid "Mirror Reference" msgstr "Spiegelreferenz" -#: flatcamGUI/PreferencesUI.py:6370 flatcamTools/ToolTransform.py:287 +#: flatcamGUI/PreferencesUI.py:6857 flatcamTools/ToolTransform.py:286 msgid "" "Flip the selected object(s)\n" "around the point in Point Entry Field.\n" @@ -11834,11 +12257,11 @@ msgstr "" "Oder geben Sie die Koordinaten im Format (x, y) in ein\n" "Punkt-Eingabefeld und klicken Sie auf X (Y) drehen" -#: flatcamGUI/PreferencesUI.py:6381 +#: flatcamGUI/PreferencesUI.py:6868 msgid "Mirror Reference point" msgstr "Referenzpunkt spiegeln" -#: flatcamGUI/PreferencesUI.py:6383 +#: flatcamGUI/PreferencesUI.py:6870 msgid "" "Coordinates in format (x, y) used as reference for mirroring.\n" "The 'x' in (x, y) will be used when using Flip on X and\n" @@ -11849,12 +12272,12 @@ msgstr "" "Das 'x' in (x, y) wird verwendet, wenn Sie bei X und\n" "Das 'y' in (x, y) wird verwendet, wenn Flip auf Y und verwendet wird" -#: flatcamGUI/PreferencesUI.py:6396 flatcamTools/ToolDistance.py:355 -#: flatcamTools/ToolDistanceMin.py:284 flatcamTools/ToolTransform.py:332 +#: flatcamGUI/PreferencesUI.py:6883 flatcamTools/ToolDistance.py:496 +#: flatcamTools/ToolDistanceMin.py:287 flatcamTools/ToolTransform.py:333 msgid "Distance" msgstr "Entfernung" -#: flatcamGUI/PreferencesUI.py:6398 flatcamTools/ToolTransform.py:334 +#: flatcamGUI/PreferencesUI.py:6885 flatcamTools/ToolTransform.py:335 msgid "" "A positive value will create the effect of dilation,\n" "while a negative value will create the effect of erosion.\n" @@ -11866,12 +12289,26 @@ msgstr "" "Jedes Geometrieelement des Objekts wird vergrößert\n" "oder mit der \"Entfernung\" verringert." -#: flatcamGUI/PreferencesUI.py:6414 flatcamGUI/PreferencesUI.py:7057 -#: flatcamTools/ToolQRCode.py:197 flatcamTools/ToolTransform.py:361 +#: flatcamGUI/PreferencesUI.py:6902 flatcamTools/ToolTransform.py:360 +msgid "" +"A positive value will create the effect of dilation,\n" +"while a negative value will create the effect of erosion.\n" +"Each geometry element of the object will be increased\n" +"or decreased to fit the 'Value'. Value is a percentage\n" +"of the initial dimension." +msgstr "" +"Ein positiver Wert erzeugt den Effekt der Dilatation.\n" +"während ein negativer Wert den Effekt der Erosion erzeugt.\n" +"Jedes Geometrieelement des Objekts wird vergrößert\n" +"oder verringert, um dem 'Wert' zu entsprechen. Wert ist ein Prozentsatz\n" +"der ursprünglichen Dimension." + +#: flatcamGUI/PreferencesUI.py:6919 flatcamGUI/PreferencesUI.py:7563 +#: flatcamTools/ToolQRCode.py:197 flatcamTools/ToolTransform.py:384 msgid "Rounded" msgstr "Agberundet" -#: flatcamGUI/PreferencesUI.py:6416 flatcamTools/ToolTransform.py:363 +#: flatcamGUI/PreferencesUI.py:6921 flatcamTools/ToolTransform.py:386 msgid "" "If checked then the buffer will surround the buffered shape,\n" "every corner will be rounded.\n" @@ -11883,11 +12320,11 @@ msgstr "" "Wenn nicht markiert, folgt der Puffer der exakten Geometrie\n" "der gepufferten Form." -#: flatcamGUI/PreferencesUI.py:6434 +#: flatcamGUI/PreferencesUI.py:6938 msgid "SolderPaste Tool Options" msgstr "Lötpaste-Werkzeug-Optionen" -#: flatcamGUI/PreferencesUI.py:6440 +#: flatcamGUI/PreferencesUI.py:6944 msgid "" "A tool to create GCode for dispensing\n" "solder paste onto a PCB." @@ -11895,49 +12332,45 @@ msgstr "" "Ein Werkzeug zum Erstellen von GCode für die Ausgabe\n" "Lotpaste auf eine Leiterplatte." -#: flatcamGUI/PreferencesUI.py:6451 -msgid "Diameters of nozzle tools, separated by ','" -msgstr "Durchmesser der Düsenwerkzeuge, getrennt durch ','" - -#: flatcamGUI/PreferencesUI.py:6459 +#: flatcamGUI/PreferencesUI.py:6965 msgid "New Nozzle Dia" msgstr "Neuer Düsendurchmesser" -#: flatcamGUI/PreferencesUI.py:6461 flatcamTools/ToolSolderPaste.py:106 +#: flatcamGUI/PreferencesUI.py:6967 flatcamTools/ToolSolderPaste.py:108 msgid "Diameter for the new Nozzle tool to add in the Tool Table" msgstr "" "Durchmesser für das neue Düsenwerkzeug, das in die Werkzeugtabelle eingefügt " "werden soll" -#: flatcamGUI/PreferencesUI.py:6477 flatcamTools/ToolSolderPaste.py:182 +#: flatcamGUI/PreferencesUI.py:6983 flatcamTools/ToolSolderPaste.py:184 msgid "Z Dispense Start" msgstr "Z Dosierbeginn" -#: flatcamGUI/PreferencesUI.py:6479 flatcamTools/ToolSolderPaste.py:184 +#: flatcamGUI/PreferencesUI.py:6985 flatcamTools/ToolSolderPaste.py:186 msgid "The height (Z) when solder paste dispensing starts." msgstr "Die Höhe (Z) bei der Lotpastendosierung." -#: flatcamGUI/PreferencesUI.py:6490 flatcamTools/ToolSolderPaste.py:194 +#: flatcamGUI/PreferencesUI.py:6996 flatcamTools/ToolSolderPaste.py:196 msgid "Z Dispense" msgstr "Z-Abgabe" -#: flatcamGUI/PreferencesUI.py:6492 flatcamTools/ToolSolderPaste.py:196 +#: flatcamGUI/PreferencesUI.py:6998 flatcamTools/ToolSolderPaste.py:198 msgid "The height (Z) when doing solder paste dispensing." msgstr "Die Höhe (Z) bei der Lotpastendosierung." -#: flatcamGUI/PreferencesUI.py:6503 flatcamTools/ToolSolderPaste.py:206 +#: flatcamGUI/PreferencesUI.py:7009 flatcamTools/ToolSolderPaste.py:208 msgid "Z Dispense Stop" msgstr "Z Abgabestopp" -#: flatcamGUI/PreferencesUI.py:6505 flatcamTools/ToolSolderPaste.py:208 +#: flatcamGUI/PreferencesUI.py:7011 flatcamTools/ToolSolderPaste.py:210 msgid "The height (Z) when solder paste dispensing stops." msgstr "Die Höhe (Z) bei der Lotpastendosierung stoppt." -#: flatcamGUI/PreferencesUI.py:6516 flatcamTools/ToolSolderPaste.py:218 +#: flatcamGUI/PreferencesUI.py:7022 flatcamTools/ToolSolderPaste.py:220 msgid "Z Travel" msgstr "Z Reise" -#: flatcamGUI/PreferencesUI.py:6518 flatcamTools/ToolSolderPaste.py:220 +#: flatcamGUI/PreferencesUI.py:7024 flatcamTools/ToolSolderPaste.py:222 msgid "" "The height (Z) for travel between pads\n" "(without dispensing solder paste)." @@ -11945,15 +12378,15 @@ msgstr "" "Die Höhe (Z) für den Weg zwischen Pads\n" "(ohne Lotpaste zu dosieren)." -#: flatcamGUI/PreferencesUI.py:6530 flatcamTools/ToolSolderPaste.py:231 +#: flatcamGUI/PreferencesUI.py:7036 flatcamTools/ToolSolderPaste.py:233 msgid "Z Toolchange" msgstr "Z Werkzeugwechsel" -#: flatcamGUI/PreferencesUI.py:6532 flatcamTools/ToolSolderPaste.py:233 +#: flatcamGUI/PreferencesUI.py:7038 flatcamTools/ToolSolderPaste.py:235 msgid "The height (Z) for tool (nozzle) change." msgstr "Die Höhe (Z) für Werkzeug (Düse) ändert sich." -#: flatcamGUI/PreferencesUI.py:6541 flatcamTools/ToolSolderPaste.py:241 +#: flatcamGUI/PreferencesUI.py:7047 flatcamTools/ToolSolderPaste.py:243 msgid "" "The X,Y location for tool (nozzle) change.\n" "The format is (x, y) where x and y are real numbers." @@ -11961,11 +12394,11 @@ msgstr "" "Die X, Y-Position für Werkzeug (Düse) ändert sich.\n" "Das Format ist (x, y), wobei x und y reelle Zahlen sind." -#: flatcamGUI/PreferencesUI.py:6555 flatcamTools/ToolSolderPaste.py:254 +#: flatcamGUI/PreferencesUI.py:7061 flatcamTools/ToolSolderPaste.py:256 msgid "Feedrate (speed) while moving on the X-Y plane." msgstr "Vorschub (Geschwindigkeit) während der Bewegung auf der X-Y-Ebene." -#: flatcamGUI/PreferencesUI.py:6568 flatcamTools/ToolSolderPaste.py:266 +#: flatcamGUI/PreferencesUI.py:7074 flatcamTools/ToolSolderPaste.py:268 msgid "" "Feedrate (speed) while moving vertically\n" "(on Z plane)." @@ -11973,11 +12406,11 @@ msgstr "" "Vorschub (Geschwindigkeit) bei vertikaler Bewegung\n" "(auf der Z-Ebene)." -#: flatcamGUI/PreferencesUI.py:6580 flatcamTools/ToolSolderPaste.py:277 +#: flatcamGUI/PreferencesUI.py:7086 flatcamTools/ToolSolderPaste.py:279 msgid "Feedrate Z Dispense" msgstr "Vorschub Z Dosierung" -#: flatcamGUI/PreferencesUI.py:6582 +#: flatcamGUI/PreferencesUI.py:7088 msgid "" "Feedrate (speed) while moving up vertically\n" "to Dispense position (on Z plane)." @@ -11985,11 +12418,11 @@ msgstr "" "Vorschub (Geschwindigkeit) bei vertikaler Aufwärtsbewegung\n" "in Ausgabeposition (in der Z-Ebene)." -#: flatcamGUI/PreferencesUI.py:6593 flatcamTools/ToolSolderPaste.py:289 +#: flatcamGUI/PreferencesUI.py:7099 flatcamTools/ToolSolderPaste.py:291 msgid "Spindle Speed FWD" msgstr "Spindeldrehzahl FWD" -#: flatcamGUI/PreferencesUI.py:6595 flatcamTools/ToolSolderPaste.py:291 +#: flatcamGUI/PreferencesUI.py:7101 flatcamTools/ToolSolderPaste.py:293 msgid "" "The dispenser speed while pushing solder paste\n" "through the dispenser nozzle." @@ -11997,19 +12430,19 @@ msgstr "" "Die Spendergeschwindigkeit beim Schieben der Lötpaste\n" "durch die Spenderdüse." -#: flatcamGUI/PreferencesUI.py:6607 flatcamTools/ToolSolderPaste.py:302 +#: flatcamGUI/PreferencesUI.py:7113 flatcamTools/ToolSolderPaste.py:304 msgid "Dwell FWD" msgstr "Verweilzeit FWD" -#: flatcamGUI/PreferencesUI.py:6609 flatcamTools/ToolSolderPaste.py:304 +#: flatcamGUI/PreferencesUI.py:7115 flatcamTools/ToolSolderPaste.py:306 msgid "Pause after solder dispensing." msgstr "Pause nach dem Löten." -#: flatcamGUI/PreferencesUI.py:6619 flatcamTools/ToolSolderPaste.py:313 +#: flatcamGUI/PreferencesUI.py:7125 flatcamTools/ToolSolderPaste.py:315 msgid "Spindle Speed REV" msgstr "Spindeldrehzahl REV" -#: flatcamGUI/PreferencesUI.py:6621 flatcamTools/ToolSolderPaste.py:315 +#: flatcamGUI/PreferencesUI.py:7127 flatcamTools/ToolSolderPaste.py:317 msgid "" "The dispenser speed while retracting solder paste\n" "through the dispenser nozzle." @@ -12017,11 +12450,11 @@ msgstr "" "Die Spendergeschwindigkeit beim Einfahren der Lötpaste\n" "durch die Spenderdüse." -#: flatcamGUI/PreferencesUI.py:6633 flatcamTools/ToolSolderPaste.py:326 +#: flatcamGUI/PreferencesUI.py:7139 flatcamTools/ToolSolderPaste.py:328 msgid "Dwell REV" msgstr "Verweilen REV" -#: flatcamGUI/PreferencesUI.py:6635 flatcamTools/ToolSolderPaste.py:328 +#: flatcamGUI/PreferencesUI.py:7141 flatcamTools/ToolSolderPaste.py:330 msgid "" "Pause after solder paste dispenser retracted,\n" "to allow pressure equilibrium." @@ -12029,15 +12462,15 @@ msgstr "" "Pause nachdem Lotpastendispenser eingefahren wurde,\n" "das Druckgleichgewicht zu ermöglichen." -#: flatcamGUI/PreferencesUI.py:6644 flatcamTools/ToolSolderPaste.py:336 +#: flatcamGUI/PreferencesUI.py:7150 flatcamTools/ToolSolderPaste.py:338 msgid "Files that control the GCode generation." msgstr "Dateien, die die GCode-Generierung steuern." -#: flatcamGUI/PreferencesUI.py:6659 +#: flatcamGUI/PreferencesUI.py:7165 msgid "Substractor Tool Options" msgstr "Substractor-Werkzeug-Optionen" -#: flatcamGUI/PreferencesUI.py:6665 +#: flatcamGUI/PreferencesUI.py:7171 msgid "" "A tool to substract one Gerber or Geometry object\n" "from another of the same type." @@ -12045,22 +12478,22 @@ msgstr "" "Ein Werkzeug zum Subtrahieren eines Gerber- oder Geometrieobjekts\n" "von einem anderen des gleichen Typs." -#: flatcamGUI/PreferencesUI.py:6670 flatcamTools/ToolSub.py:149 +#: flatcamGUI/PreferencesUI.py:7176 flatcamTools/ToolSub.py:155 msgid "Close paths" msgstr "Wege schließen" -#: flatcamGUI/PreferencesUI.py:6671 +#: flatcamGUI/PreferencesUI.py:7177 msgid "" "Checking this will close the paths cut by the Geometry substractor object." msgstr "" "Wenn Sie dies aktivieren, werden die vom Geometry-Substractor-Objekt " "geschnittenen Pfade geschlossen." -#: flatcamGUI/PreferencesUI.py:6682 +#: flatcamGUI/PreferencesUI.py:7188 msgid "Check Rules Tool Options" msgstr "Optionen des Werkzeugs 'Regeln prüfen'" -#: flatcamGUI/PreferencesUI.py:6687 +#: flatcamGUI/PreferencesUI.py:7193 msgid "" "A tool to check if Gerber files are within a set\n" "of Manufacturing Rules." @@ -12069,38 +12502,38 @@ msgstr "" "befinden\n" "von Herstellungsregeln." -#: flatcamGUI/PreferencesUI.py:6697 flatcamTools/ToolRulesCheck.py:256 -#: flatcamTools/ToolRulesCheck.py:920 +#: flatcamGUI/PreferencesUI.py:7203 flatcamTools/ToolRulesCheck.py:265 +#: flatcamTools/ToolRulesCheck.py:929 msgid "Trace Size" msgstr "Spurengröße" -#: flatcamGUI/PreferencesUI.py:6699 flatcamTools/ToolRulesCheck.py:258 +#: flatcamGUI/PreferencesUI.py:7205 flatcamTools/ToolRulesCheck.py:267 msgid "This checks if the minimum size for traces is met." msgstr "Hiermit wird überprüft, ob die Mindestgröße für Traces erfüllt ist." -#: flatcamGUI/PreferencesUI.py:6709 flatcamGUI/PreferencesUI.py:6729 -#: flatcamGUI/PreferencesUI.py:6749 flatcamGUI/PreferencesUI.py:6769 -#: flatcamGUI/PreferencesUI.py:6789 flatcamGUI/PreferencesUI.py:6809 -#: flatcamGUI/PreferencesUI.py:6829 flatcamGUI/PreferencesUI.py:6849 -#: flatcamGUI/PreferencesUI.py:6871 flatcamGUI/PreferencesUI.py:6891 -#: flatcamTools/ToolRulesCheck.py:268 flatcamTools/ToolRulesCheck.py:290 -#: flatcamTools/ToolRulesCheck.py:313 flatcamTools/ToolRulesCheck.py:336 -#: flatcamTools/ToolRulesCheck.py:359 flatcamTools/ToolRulesCheck.py:382 -#: flatcamTools/ToolRulesCheck.py:405 flatcamTools/ToolRulesCheck.py:428 -#: flatcamTools/ToolRulesCheck.py:453 flatcamTools/ToolRulesCheck.py:476 +#: flatcamGUI/PreferencesUI.py:7215 flatcamGUI/PreferencesUI.py:7235 +#: flatcamGUI/PreferencesUI.py:7255 flatcamGUI/PreferencesUI.py:7275 +#: flatcamGUI/PreferencesUI.py:7295 flatcamGUI/PreferencesUI.py:7315 +#: flatcamGUI/PreferencesUI.py:7335 flatcamGUI/PreferencesUI.py:7355 +#: flatcamGUI/PreferencesUI.py:7377 flatcamGUI/PreferencesUI.py:7397 +#: flatcamTools/ToolRulesCheck.py:277 flatcamTools/ToolRulesCheck.py:299 +#: flatcamTools/ToolRulesCheck.py:322 flatcamTools/ToolRulesCheck.py:345 +#: flatcamTools/ToolRulesCheck.py:368 flatcamTools/ToolRulesCheck.py:391 +#: flatcamTools/ToolRulesCheck.py:414 flatcamTools/ToolRulesCheck.py:437 +#: flatcamTools/ToolRulesCheck.py:462 flatcamTools/ToolRulesCheck.py:485 msgid "Min value" msgstr "Min. Wert" -#: flatcamGUI/PreferencesUI.py:6711 flatcamTools/ToolRulesCheck.py:270 +#: flatcamGUI/PreferencesUI.py:7217 flatcamTools/ToolRulesCheck.py:279 msgid "Minimum acceptable trace size." msgstr "Minimale akzeptable Trace-Größe." -#: flatcamGUI/PreferencesUI.py:6716 flatcamTools/ToolRulesCheck.py:277 -#: flatcamTools/ToolRulesCheck.py:1148 flatcamTools/ToolRulesCheck.py:1178 +#: flatcamGUI/PreferencesUI.py:7222 flatcamTools/ToolRulesCheck.py:286 +#: flatcamTools/ToolRulesCheck.py:1157 flatcamTools/ToolRulesCheck.py:1187 msgid "Copper to Copper clearance" msgstr "Mininalabstand Kupfer zu Kupfer" -#: flatcamGUI/PreferencesUI.py:6718 flatcamTools/ToolRulesCheck.py:279 +#: flatcamGUI/PreferencesUI.py:7224 flatcamTools/ToolRulesCheck.py:288 msgid "" "This checks if the minimum clearance between copper\n" "features is met." @@ -12108,33 +12541,33 @@ msgstr "" "Dies überprüft, ob der Mindestabstand zwischen Kupfer\n" "Spuren ist erfüllt." -#: flatcamGUI/PreferencesUI.py:6731 flatcamGUI/PreferencesUI.py:6751 -#: flatcamGUI/PreferencesUI.py:6771 flatcamGUI/PreferencesUI.py:6791 -#: flatcamGUI/PreferencesUI.py:6811 flatcamGUI/PreferencesUI.py:6831 -#: flatcamGUI/PreferencesUI.py:6893 flatcamTools/ToolRulesCheck.py:292 -#: flatcamTools/ToolRulesCheck.py:315 flatcamTools/ToolRulesCheck.py:338 -#: flatcamTools/ToolRulesCheck.py:361 flatcamTools/ToolRulesCheck.py:384 -#: flatcamTools/ToolRulesCheck.py:407 flatcamTools/ToolRulesCheck.py:455 +#: flatcamGUI/PreferencesUI.py:7237 flatcamGUI/PreferencesUI.py:7257 +#: flatcamGUI/PreferencesUI.py:7277 flatcamGUI/PreferencesUI.py:7297 +#: flatcamGUI/PreferencesUI.py:7317 flatcamGUI/PreferencesUI.py:7337 +#: flatcamGUI/PreferencesUI.py:7399 flatcamTools/ToolRulesCheck.py:301 +#: flatcamTools/ToolRulesCheck.py:324 flatcamTools/ToolRulesCheck.py:347 +#: flatcamTools/ToolRulesCheck.py:370 flatcamTools/ToolRulesCheck.py:393 +#: flatcamTools/ToolRulesCheck.py:416 flatcamTools/ToolRulesCheck.py:464 msgid "Minimum acceptable clearance value." msgstr "Minimaler akzeptabler Abstandswert." -#: flatcamGUI/PreferencesUI.py:6736 flatcamTools/ToolRulesCheck.py:300 -#: flatcamTools/ToolRulesCheck.py:1208 flatcamTools/ToolRulesCheck.py:1214 -#: flatcamTools/ToolRulesCheck.py:1227 flatcamTools/ToolRulesCheck.py:1234 +#: flatcamGUI/PreferencesUI.py:7242 flatcamTools/ToolRulesCheck.py:309 +#: flatcamTools/ToolRulesCheck.py:1217 flatcamTools/ToolRulesCheck.py:1223 +#: flatcamTools/ToolRulesCheck.py:1236 flatcamTools/ToolRulesCheck.py:1243 msgid "Copper to Outline clearance" msgstr "Mininalabstand Kupfer zum Rahmen" -#: flatcamGUI/PreferencesUI.py:6738 flatcamTools/ToolRulesCheck.py:302 +#: flatcamGUI/PreferencesUI.py:7244 flatcamTools/ToolRulesCheck.py:311 msgid "" "This checks if the minimum clearance between copper\n" "features and the outline is met." msgstr "Überprüft den Minimalabstand zwischen Kupfer und Rand." -#: flatcamGUI/PreferencesUI.py:6756 flatcamTools/ToolRulesCheck.py:323 +#: flatcamGUI/PreferencesUI.py:7262 flatcamTools/ToolRulesCheck.py:332 msgid "Silk to Silk Clearance" msgstr "Siebdruck zu siebdruck Abstand" -#: flatcamGUI/PreferencesUI.py:6758 flatcamTools/ToolRulesCheck.py:325 +#: flatcamGUI/PreferencesUI.py:7264 flatcamTools/ToolRulesCheck.py:334 msgid "" "This checks if the minimum clearance between silkscreen\n" "features and silkscreen features is met." @@ -12142,13 +12575,13 @@ msgstr "" "Dies prüft, ob der Mindestabstand zwischen Siebdruck\n" "Objekte und Silkscreen-Objekte erfüllt ist." -#: flatcamGUI/PreferencesUI.py:6776 flatcamTools/ToolRulesCheck.py:346 -#: flatcamTools/ToolRulesCheck.py:1317 flatcamTools/ToolRulesCheck.py:1323 -#: flatcamTools/ToolRulesCheck.py:1341 +#: flatcamGUI/PreferencesUI.py:7282 flatcamTools/ToolRulesCheck.py:355 +#: flatcamTools/ToolRulesCheck.py:1326 flatcamTools/ToolRulesCheck.py:1332 +#: flatcamTools/ToolRulesCheck.py:1350 msgid "Silk to Solder Mask Clearance" msgstr "Siebdruck auf Lötmaske Clearance" -#: flatcamGUI/PreferencesUI.py:6778 flatcamTools/ToolRulesCheck.py:348 +#: flatcamGUI/PreferencesUI.py:7284 flatcamTools/ToolRulesCheck.py:357 msgid "" "This checks if the minimum clearance between silkscreen\n" "features and soldermask features is met." @@ -12156,13 +12589,13 @@ msgstr "" "Dies prüft, ob der Mindestabstand zwischen Siebdruck\n" "Spuren und Lötmaskenspuren werden eingehalten." -#: flatcamGUI/PreferencesUI.py:6796 flatcamTools/ToolRulesCheck.py:369 -#: flatcamTools/ToolRulesCheck.py:1371 flatcamTools/ToolRulesCheck.py:1377 -#: flatcamTools/ToolRulesCheck.py:1391 flatcamTools/ToolRulesCheck.py:1398 +#: flatcamGUI/PreferencesUI.py:7302 flatcamTools/ToolRulesCheck.py:378 +#: flatcamTools/ToolRulesCheck.py:1380 flatcamTools/ToolRulesCheck.py:1386 +#: flatcamTools/ToolRulesCheck.py:1400 flatcamTools/ToolRulesCheck.py:1407 msgid "Silk to Outline Clearance" msgstr "Siebdruck zur Gliederung Clearance" -#: flatcamGUI/PreferencesUI.py:6798 flatcamTools/ToolRulesCheck.py:371 +#: flatcamGUI/PreferencesUI.py:7304 flatcamTools/ToolRulesCheck.py:380 msgid "" "This checks if the minimum clearance between silk\n" "features and the outline is met." @@ -12170,12 +12603,12 @@ msgstr "" "Dies prüft, ob der Mindestabstand zwischen Siebdruck\n" "Spuren und der Umriss ist erfüllt." -#: flatcamGUI/PreferencesUI.py:6816 flatcamTools/ToolRulesCheck.py:392 -#: flatcamTools/ToolRulesCheck.py:1409 flatcamTools/ToolRulesCheck.py:1436 +#: flatcamGUI/PreferencesUI.py:7322 flatcamTools/ToolRulesCheck.py:401 +#: flatcamTools/ToolRulesCheck.py:1418 flatcamTools/ToolRulesCheck.py:1445 msgid "Minimum Solder Mask Sliver" msgstr "Minimum Lötmaskenband" -#: flatcamGUI/PreferencesUI.py:6818 flatcamTools/ToolRulesCheck.py:394 +#: flatcamGUI/PreferencesUI.py:7324 flatcamTools/ToolRulesCheck.py:403 msgid "" "This checks if the minimum clearance between soldermask\n" "features and soldermask features is met." @@ -12184,13 +12617,13 @@ msgstr "" "eingehalten wird\n" "Spuren und Soldermask-Merkmale sind erfüllt." -#: flatcamGUI/PreferencesUI.py:6836 flatcamTools/ToolRulesCheck.py:415 -#: flatcamTools/ToolRulesCheck.py:1474 flatcamTools/ToolRulesCheck.py:1480 -#: flatcamTools/ToolRulesCheck.py:1496 flatcamTools/ToolRulesCheck.py:1503 +#: flatcamGUI/PreferencesUI.py:7342 flatcamTools/ToolRulesCheck.py:424 +#: flatcamTools/ToolRulesCheck.py:1483 flatcamTools/ToolRulesCheck.py:1489 +#: flatcamTools/ToolRulesCheck.py:1505 flatcamTools/ToolRulesCheck.py:1512 msgid "Minimum Annular Ring" msgstr "Minimaler Ring" -#: flatcamGUI/PreferencesUI.py:6838 flatcamTools/ToolRulesCheck.py:417 +#: flatcamGUI/PreferencesUI.py:7344 flatcamTools/ToolRulesCheck.py:426 msgid "" "This checks if the minimum copper ring left by drilling\n" "a hole into a pad is met." @@ -12198,16 +12631,16 @@ msgstr "" "Dies überprüft, ob der minimale Kupferring durch Bohren übrig bleibt\n" "Ein Loch in einem Pad ist getroffen." -#: flatcamGUI/PreferencesUI.py:6851 flatcamTools/ToolRulesCheck.py:430 +#: flatcamGUI/PreferencesUI.py:7357 flatcamTools/ToolRulesCheck.py:439 msgid "Minimum acceptable ring value." msgstr "Minimaler akzeptabler Ringwert." -#: flatcamGUI/PreferencesUI.py:6858 flatcamTools/ToolRulesCheck.py:440 -#: flatcamTools/ToolRulesCheck.py:864 +#: flatcamGUI/PreferencesUI.py:7364 flatcamTools/ToolRulesCheck.py:449 +#: flatcamTools/ToolRulesCheck.py:873 msgid "Hole to Hole Clearance" msgstr "Loch zu Loch Abstand" -#: flatcamGUI/PreferencesUI.py:6860 flatcamTools/ToolRulesCheck.py:442 +#: flatcamGUI/PreferencesUI.py:7366 flatcamTools/ToolRulesCheck.py:451 msgid "" "This checks if the minimum clearance between a drill hole\n" "and another drill hole is met." @@ -12215,16 +12648,16 @@ msgstr "" "Dies überprüft, ob der Mindestabstand zwischen einem Bohrloch ist\n" "und ein weiteres Bohrloch ist getroffen." -#: flatcamGUI/PreferencesUI.py:6873 flatcamTools/ToolRulesCheck.py:478 +#: flatcamGUI/PreferencesUI.py:7379 flatcamTools/ToolRulesCheck.py:487 msgid "Minimum acceptable drill size." msgstr "Minimale zulässige Bohrergröße." -#: flatcamGUI/PreferencesUI.py:6878 flatcamTools/ToolRulesCheck.py:463 -#: flatcamTools/ToolRulesCheck.py:838 +#: flatcamGUI/PreferencesUI.py:7384 flatcamTools/ToolRulesCheck.py:472 +#: flatcamTools/ToolRulesCheck.py:847 msgid "Hole Size" msgstr "Lochgröße" -#: flatcamGUI/PreferencesUI.py:6880 flatcamTools/ToolRulesCheck.py:465 +#: flatcamGUI/PreferencesUI.py:7386 flatcamTools/ToolRulesCheck.py:474 msgid "" "This checks if the drill holes\n" "sizes are above the threshold." @@ -12232,11 +12665,11 @@ msgstr "" "Dadurch wird geprüft, ob die Bohrlöcher vorhanden sind\n" "Größen liegen über der Schwelle." -#: flatcamGUI/PreferencesUI.py:6905 +#: flatcamGUI/PreferencesUI.py:7411 msgid "Optimal Tool Options" msgstr "\"Optimale\" Werkzeugoptionen" -#: flatcamGUI/PreferencesUI.py:6911 +#: flatcamGUI/PreferencesUI.py:7417 msgid "" "A tool to find the minimum distance between\n" "every two Gerber geometric elements" @@ -12244,21 +12677,21 @@ msgstr "" "Ein Werkzeug, um den Mindestabstand zwischen zu finden\n" "jeweils zwei Gerber geometrische Elemente" -#: flatcamGUI/PreferencesUI.py:6926 flatcamTools/ToolOptimal.py:78 +#: flatcamGUI/PreferencesUI.py:7432 flatcamTools/ToolOptimal.py:79 msgid "Precision" msgstr "Präzision" -#: flatcamGUI/PreferencesUI.py:6928 +#: flatcamGUI/PreferencesUI.py:7434 msgid "Number of decimals for the distances and coordinates in this tool." msgstr "" "Anzahl der Dezimalstellen für die Abstände und Koordinaten in diesem " "Werkzeug." -#: flatcamGUI/PreferencesUI.py:6942 +#: flatcamGUI/PreferencesUI.py:7448 msgid "QRCode Tool Options" msgstr "QR Code-Tooloptionen" -#: flatcamGUI/PreferencesUI.py:6948 +#: flatcamGUI/PreferencesUI.py:7454 msgid "" "A tool to create a QRCode that can be inserted\n" "into a selected Gerber file, or it can be exported as a file." @@ -12266,11 +12699,11 @@ msgstr "" "Ein Werkzeug um QR Codes zu erzeugen, um diese\n" "in Gerber Dateien einzufügen oder als Datei zu exportieren." -#: flatcamGUI/PreferencesUI.py:6960 flatcamTools/ToolQRCode.py:99 +#: flatcamGUI/PreferencesUI.py:7466 flatcamTools/ToolQRCode.py:100 msgid "Version" msgstr "Version" -#: flatcamGUI/PreferencesUI.py:6962 flatcamTools/ToolQRCode.py:101 +#: flatcamGUI/PreferencesUI.py:7468 flatcamTools/ToolQRCode.py:102 msgid "" "QRCode version can have values from 1 (21x21 boxes)\n" "to 40 (177x177 boxes)." @@ -12278,12 +12711,12 @@ msgstr "" "Je nach QRCode Version kann 1 (21x21 Quadrate)\n" " bis 40 (177x177 Quadrate) angegeben werden." -#: flatcamGUI/PreferencesUI.py:6973 flatcamTools/ToolQRCode.py:112 +#: flatcamGUI/PreferencesUI.py:7479 flatcamTools/ToolQRCode.py:113 msgid "Error correction" msgstr "Fehlerausgleich" -#: flatcamGUI/PreferencesUI.py:6975 flatcamGUI/PreferencesUI.py:6986 -#: flatcamTools/ToolQRCode.py:114 flatcamTools/ToolQRCode.py:125 +#: flatcamGUI/PreferencesUI.py:7481 flatcamGUI/PreferencesUI.py:7492 +#: flatcamTools/ToolQRCode.py:115 flatcamTools/ToolQRCode.py:126 #, python-format msgid "" "Parameter that controls the error correction used for the QR Code.\n" @@ -12298,11 +12731,11 @@ msgstr "" "Q: max. 25%% Fehler können ausgeglichen werden\n" "H : max. 30%% Fehler können ausgeglichen warden." -#: flatcamGUI/PreferencesUI.py:6996 flatcamTools/ToolQRCode.py:135 +#: flatcamGUI/PreferencesUI.py:7502 flatcamTools/ToolQRCode.py:136 msgid "Box Size" msgstr "Quadratgröße" -#: flatcamGUI/PreferencesUI.py:6998 flatcamTools/ToolQRCode.py:137 +#: flatcamGUI/PreferencesUI.py:7504 flatcamTools/ToolQRCode.py:138 msgid "" "Box size control the overall size of the QRcode\n" "by adjusting the size of each box in the code." @@ -12311,11 +12744,11 @@ msgstr "" "des QRCodes beeinflusst, da sie die Größe jedes einzelnen Quadrats " "spezifiziert." -#: flatcamGUI/PreferencesUI.py:7009 flatcamTools/ToolQRCode.py:148 +#: flatcamGUI/PreferencesUI.py:7515 flatcamTools/ToolQRCode.py:149 msgid "Border Size" msgstr "Randdicke" -#: flatcamGUI/PreferencesUI.py:7011 flatcamTools/ToolQRCode.py:150 +#: flatcamGUI/PreferencesUI.py:7517 flatcamTools/ToolQRCode.py:151 msgid "" "Size of the QRCode border. How many boxes thick is the border.\n" "Default value is 4. The width of the clearance around the QRCode." @@ -12324,23 +12757,23 @@ msgstr "" "Standardwert is 4. Die Breite gibt den Raum der Freistellung um den QRCode " "an." -#: flatcamGUI/PreferencesUI.py:7022 flatcamTools/ToolQRCode.py:162 +#: flatcamGUI/PreferencesUI.py:7528 flatcamTools/ToolQRCode.py:162 msgid "QRCode Data" msgstr "QRCode Daten" -#: flatcamGUI/PreferencesUI.py:7024 flatcamTools/ToolQRCode.py:164 +#: flatcamGUI/PreferencesUI.py:7530 flatcamTools/ToolQRCode.py:164 msgid "QRCode Data. Alphanumeric text to be encoded in the QRCode." msgstr "Beliebiger Text der in den QRCode umgerechnet werden soll." -#: flatcamGUI/PreferencesUI.py:7028 flatcamTools/ToolQRCode.py:168 +#: flatcamGUI/PreferencesUI.py:7534 flatcamTools/ToolQRCode.py:168 msgid "Add here the text to be included in the QRCode..." msgstr "Geben Sie hier den Text in Ihrem QRCode an." -#: flatcamGUI/PreferencesUI.py:7034 flatcamTools/ToolQRCode.py:174 +#: flatcamGUI/PreferencesUI.py:7540 flatcamTools/ToolQRCode.py:174 msgid "Polarity" msgstr "Polarität" -#: flatcamGUI/PreferencesUI.py:7036 flatcamTools/ToolQRCode.py:176 +#: flatcamGUI/PreferencesUI.py:7542 flatcamTools/ToolQRCode.py:176 msgid "" "Choose the polarity of the QRCode.\n" "It can be drawn in a negative way (squares are clear)\n" @@ -12350,17 +12783,17 @@ msgstr "" "Es kann entweder Negativ sein (die Boxen sind durchsichtig)\n" "oder Positiv (die Boxen sind undurchsichtig)." -#: flatcamGUI/PreferencesUI.py:7040 flatcamTools/ToolFilm.py:296 +#: flatcamGUI/PreferencesUI.py:7546 flatcamTools/ToolFilm.py:296 #: flatcamTools/ToolQRCode.py:180 msgid "Negative" msgstr "Negativ" -#: flatcamGUI/PreferencesUI.py:7041 flatcamTools/ToolFilm.py:295 +#: flatcamGUI/PreferencesUI.py:7547 flatcamTools/ToolFilm.py:295 #: flatcamTools/ToolQRCode.py:181 msgid "Positive" msgstr "Positiv" -#: flatcamGUI/PreferencesUI.py:7043 flatcamTools/ToolQRCode.py:183 +#: flatcamGUI/PreferencesUI.py:7549 flatcamTools/ToolQRCode.py:183 msgid "" "Choose the type of QRCode to be created.\n" "If added on a Silkscreen Gerber file the QRCode may\n" @@ -12372,7 +12805,7 @@ msgstr "" "sollte er \"Positiv\" sein, wenn sie ihn zum Copper File hinzufügen\n" "wollen sollte er möglichst \"Negativ\" sein." -#: flatcamGUI/PreferencesUI.py:7054 flatcamGUI/PreferencesUI.py:7060 +#: flatcamGUI/PreferencesUI.py:7560 flatcamGUI/PreferencesUI.py:7566 #: flatcamTools/ToolQRCode.py:194 flatcamTools/ToolQRCode.py:200 msgid "" "The bounding box, meaning the empty space that surrounds\n" @@ -12381,28 +12814,28 @@ msgstr "" "Der Umriss um den QRCode, der die Freistellungsfläche definiert\n" "kann abgerundete oder scharfe Ecken haben." -#: flatcamGUI/PreferencesUI.py:7067 flatcamTools/ToolQRCode.py:228 +#: flatcamGUI/PreferencesUI.py:7573 flatcamTools/ToolQRCode.py:228 msgid "Fill Color" msgstr "Boxfarbe" -#: flatcamGUI/PreferencesUI.py:7069 flatcamTools/ToolQRCode.py:230 +#: flatcamGUI/PreferencesUI.py:7575 flatcamTools/ToolQRCode.py:230 msgid "Set the QRCode fill color (squares color)." msgstr "Wählen Sie die Farbe der Boxen." -#: flatcamGUI/PreferencesUI.py:7088 flatcamTools/ToolQRCode.py:252 +#: flatcamGUI/PreferencesUI.py:7594 flatcamTools/ToolQRCode.py:252 msgid "Back Color" msgstr "Hintergrundfarbe" -#: flatcamGUI/PreferencesUI.py:7090 flatcamTools/ToolQRCode.py:254 +#: flatcamGUI/PreferencesUI.py:7596 flatcamTools/ToolQRCode.py:254 msgid "Set the QRCode background color." msgstr "Wählen Sie die Farbe im QRCode, die nicht von einer Box bedeckt ist." # Don´t know Copper Thieving -#: flatcamGUI/PreferencesUI.py:7130 +#: flatcamGUI/PreferencesUI.py:7636 msgid "Copper Thieving Tool Options" msgstr "Copper Thieving Tool Optionen" -#: flatcamGUI/PreferencesUI.py:7142 +#: flatcamGUI/PreferencesUI.py:7648 msgid "" "A tool to generate a Copper Thieving that can be added\n" "to a selected Gerber file." @@ -12410,16 +12843,16 @@ msgstr "" "Ein Werkzeug um Copper Thieving durchzuführen, das auf\n" "ein ausgewähltes Gerber File angewendet werden kann." -#: flatcamGUI/PreferencesUI.py:7150 +#: flatcamGUI/PreferencesUI.py:7656 msgid "Number of steps (lines) used to interpolate circles." msgstr "Anzahl der Schritte (Linien) um Kreise zu interpolieren." -#: flatcamGUI/PreferencesUI.py:7160 flatcamGUI/PreferencesUI.py:7364 -#: flatcamTools/ToolCopperThieving.py:96 flatcamTools/ToolCopperThieving.py:429 +#: flatcamGUI/PreferencesUI.py:7666 flatcamGUI/PreferencesUI.py:7870 +#: flatcamTools/ToolCopperThieving.py:97 flatcamTools/ToolCopperThieving.py:432 msgid "Clearance" msgstr "Freistellung" -#: flatcamGUI/PreferencesUI.py:7162 +#: flatcamGUI/PreferencesUI.py:7668 msgid "" "This set the distance between the copper Thieving components\n" "(the polygon fill may be split in multiple polygons)\n" @@ -12431,22 +12864,11 @@ msgstr "" "Polygon\n" "in mehrere aufgeteilt." -#: flatcamGUI/PreferencesUI.py:7190 flatcamTools/ToolCopperThieving.py:126 -#: flatcamTools/ToolNonCopperClear.py:430 flatcamTools/ToolPaint.py:308 -msgid "Area Selection" -msgstr "Bereichsauswahl" - -#: flatcamGUI/PreferencesUI.py:7191 flatcamTools/ToolCopperThieving.py:127 -#: flatcamTools/ToolNonCopperClear.py:431 flatcamTools/ToolPaint.py:310 -msgid "Reference Object" -msgstr "Ref. Objekt" - -#: flatcamGUI/PreferencesUI.py:7193 flatcamTools/ToolCopperThieving.py:129 -#: flatcamTools/ToolNonCopperClear.py:433 +#: flatcamGUI/PreferencesUI.py:7699 flatcamTools/ToolCopperThieving.py:130 msgid "Reference:" msgstr "Referenz:" -#: flatcamGUI/PreferencesUI.py:7195 +#: flatcamGUI/PreferencesUI.py:7701 msgid "" "- 'Itself' - the copper Thieving extent is based on the object extent.\n" "- 'Area Selection' - left mouse click to start selection of the area to be " @@ -12460,21 +12882,25 @@ msgstr "" "- 'Referenzobjekt' - 'Copper Thieving' innerhalb des von einem anderen " "Objekt angegebenen Bereichs." -#: flatcamGUI/PreferencesUI.py:7204 flatcamTools/ToolCopperThieving.py:170 +#: flatcamGUI/PreferencesUI.py:7710 flatcamGUI/PreferencesUI.py:8175 +#: flatcamGUI/PreferencesUI.py:8287 flatcamGUI/PreferencesUI.py:8387 +#: flatcamGUI/PreferencesUI.py:8501 flatcamTools/ToolCopperThieving.py:172 +#: flatcamTools/ToolExtractDrills.py:102 flatcamTools/ToolExtractDrills.py:240 +#: flatcamTools/ToolPunchGerber.py:113 flatcamTools/ToolPunchGerber.py:268 msgid "Rectangular" msgstr "Rechteckig" -#: flatcamGUI/PreferencesUI.py:7205 flatcamTools/ToolCopperThieving.py:171 +#: flatcamGUI/PreferencesUI.py:7711 flatcamTools/ToolCopperThieving.py:173 msgid "Minimal" msgstr "Minimal" -#: flatcamGUI/PreferencesUI.py:7207 flatcamTools/ToolCopperThieving.py:173 +#: flatcamGUI/PreferencesUI.py:7713 flatcamTools/ToolCopperThieving.py:175 #: flatcamTools/ToolFilm.py:113 msgid "Box Type:" msgstr "Box-Typ:" # Double -#: flatcamGUI/PreferencesUI.py:7209 flatcamTools/ToolCopperThieving.py:175 +#: flatcamGUI/PreferencesUI.py:7715 flatcamTools/ToolCopperThieving.py:177 msgid "" "- 'Rectangular' - the bounding box will be of rectangular shape.\n" "- 'Minimal' - the bounding box will be the convex hull shape." @@ -12482,24 +12908,24 @@ msgstr "" "- 'Rechteckig' - Der Begrenzungsrahmen hat eine rechteckige Form.\n" "- 'Minimal' - Der Begrenzungsrahmen ist die konvexe Rumpfform." -#: flatcamGUI/PreferencesUI.py:7223 flatcamTools/ToolCopperThieving.py:191 +#: flatcamGUI/PreferencesUI.py:7729 flatcamTools/ToolCopperThieving.py:193 msgid "Dots Grid" msgstr "Punktmuster" -#: flatcamGUI/PreferencesUI.py:7224 flatcamTools/ToolCopperThieving.py:192 +#: flatcamGUI/PreferencesUI.py:7730 flatcamTools/ToolCopperThieving.py:194 msgid "Squares Grid" msgstr "Quadratraster" -#: flatcamGUI/PreferencesUI.py:7225 flatcamTools/ToolCopperThieving.py:193 +#: flatcamGUI/PreferencesUI.py:7731 flatcamTools/ToolCopperThieving.py:195 msgid "Lines Grid" msgstr "Linienraster" -#: flatcamGUI/PreferencesUI.py:7227 flatcamTools/ToolCopperThieving.py:195 +#: flatcamGUI/PreferencesUI.py:7733 flatcamTools/ToolCopperThieving.py:197 msgid "Fill Type:" msgstr "Füllart:" # Double -#: flatcamGUI/PreferencesUI.py:7229 flatcamTools/ToolCopperThieving.py:197 +#: flatcamGUI/PreferencesUI.py:7735 flatcamTools/ToolCopperThieving.py:199 msgid "" "- 'Solid' - copper thieving will be a solid polygon.\n" "- 'Dots Grid' - the empty area will be filled with a pattern of dots.\n" @@ -12512,55 +12938,55 @@ msgstr "" "gefüllt.\n" "- 'Linienraster' - Der leere Bereich wird mit einem Linienmuster gefüllt." -#: flatcamGUI/PreferencesUI.py:7237 flatcamTools/ToolCopperThieving.py:216 +#: flatcamGUI/PreferencesUI.py:7743 flatcamTools/ToolCopperThieving.py:218 msgid "Dots Grid Parameters" msgstr "Punktmuster Parameter" -#: flatcamGUI/PreferencesUI.py:7243 flatcamTools/ToolCopperThieving.py:222 +#: flatcamGUI/PreferencesUI.py:7749 flatcamTools/ToolCopperThieving.py:224 msgid "Dot diameter in Dots Grid." msgstr "Punktdurchmesser im Punktmuster." -#: flatcamGUI/PreferencesUI.py:7254 flatcamGUI/PreferencesUI.py:7283 -#: flatcamGUI/PreferencesUI.py:7312 flatcamTools/ToolCopperThieving.py:233 -#: flatcamTools/ToolCopperThieving.py:273 -#: flatcamTools/ToolCopperThieving.py:313 +#: flatcamGUI/PreferencesUI.py:7760 flatcamGUI/PreferencesUI.py:7789 +#: flatcamGUI/PreferencesUI.py:7818 flatcamTools/ToolCopperThieving.py:235 +#: flatcamTools/ToolCopperThieving.py:275 +#: flatcamTools/ToolCopperThieving.py:315 msgid "Spacing" msgstr "Abstand" -#: flatcamGUI/PreferencesUI.py:7256 flatcamTools/ToolCopperThieving.py:235 +#: flatcamGUI/PreferencesUI.py:7762 flatcamTools/ToolCopperThieving.py:237 msgid "Distance between each two dots in Dots Grid." msgstr "Abstand zwischen zwei Punkten im Punktmuster." -#: flatcamGUI/PreferencesUI.py:7266 flatcamTools/ToolCopperThieving.py:256 +#: flatcamGUI/PreferencesUI.py:7772 flatcamTools/ToolCopperThieving.py:258 msgid "Squares Grid Parameters" msgstr "Quadratraster Parameter" -#: flatcamGUI/PreferencesUI.py:7272 flatcamTools/ToolCopperThieving.py:262 +#: flatcamGUI/PreferencesUI.py:7778 flatcamTools/ToolCopperThieving.py:264 msgid "Square side size in Squares Grid." msgstr "Quadratlängen im Quadratraster." -#: flatcamGUI/PreferencesUI.py:7285 flatcamTools/ToolCopperThieving.py:275 +#: flatcamGUI/PreferencesUI.py:7791 flatcamTools/ToolCopperThieving.py:277 msgid "Distance between each two squares in Squares Grid." msgstr "Abstand zwischen zwei Quadraten im Quadratraster." -#: flatcamGUI/PreferencesUI.py:7295 flatcamTools/ToolCopperThieving.py:296 +#: flatcamGUI/PreferencesUI.py:7801 flatcamTools/ToolCopperThieving.py:298 msgid "Lines Grid Parameters" msgstr "Schraffurparameter" -#: flatcamGUI/PreferencesUI.py:7301 flatcamTools/ToolCopperThieving.py:302 +#: flatcamGUI/PreferencesUI.py:7807 flatcamTools/ToolCopperThieving.py:304 msgid "Line thickness size in Lines Grid." msgstr "Liniendicke." -#: flatcamGUI/PreferencesUI.py:7314 flatcamTools/ToolCopperThieving.py:315 +#: flatcamGUI/PreferencesUI.py:7820 flatcamTools/ToolCopperThieving.py:317 msgid "Distance between each two lines in Lines Grid." msgstr "Linienabstand." # What is a Robber Bar? -#: flatcamGUI/PreferencesUI.py:7324 flatcamTools/ToolCopperThieving.py:353 +#: flatcamGUI/PreferencesUI.py:7830 flatcamTools/ToolCopperThieving.py:355 msgid "Robber Bar Parameters" msgstr "Robber Bar-Parameter" -#: flatcamGUI/PreferencesUI.py:7326 flatcamTools/ToolCopperThieving.py:355 +#: flatcamGUI/PreferencesUI.py:7832 flatcamTools/ToolCopperThieving.py:357 msgid "" "Parameters used for the robber bar.\n" "Robber bar = copper border to help in pattern hole plating." @@ -12568,28 +12994,28 @@ msgstr "" "Parameter für die Robber Bar\n" "Eine Robber Bar ist ein Kupferrand bei Lochmustern." -#: flatcamGUI/PreferencesUI.py:7334 flatcamTools/ToolCopperThieving.py:363 +#: flatcamGUI/PreferencesUI.py:7840 flatcamTools/ToolCopperThieving.py:365 msgid "Bounding box margin for robber bar." msgstr "Begrenzungsrahmenrand der Robber Bar." -#: flatcamGUI/PreferencesUI.py:7345 flatcamTools/ToolCopperThieving.py:374 +#: flatcamGUI/PreferencesUI.py:7851 flatcamTools/ToolCopperThieving.py:376 msgid "Thickness" msgstr "Dicke" -#: flatcamGUI/PreferencesUI.py:7347 flatcamTools/ToolCopperThieving.py:376 +#: flatcamGUI/PreferencesUI.py:7853 flatcamTools/ToolCopperThieving.py:378 msgid "The robber bar thickness." msgstr "Dicke der Robber Bar." # What is pattern plating? -#: flatcamGUI/PreferencesUI.py:7357 flatcamTools/ToolCopperThieving.py:407 +#: flatcamGUI/PreferencesUI.py:7863 flatcamTools/ToolCopperThieving.py:409 msgid "Pattern Plating Mask" msgstr "Musterbeschichtungsmaske" -#: flatcamGUI/PreferencesUI.py:7359 flatcamTools/ToolCopperThieving.py:409 +#: flatcamGUI/PreferencesUI.py:7865 flatcamTools/ToolCopperThieving.py:411 msgid "Generate a mask for pattern plating." msgstr "Erzeugen Sie eine Maske für die Musterbeschichtung." -#: flatcamGUI/PreferencesUI.py:7366 flatcamTools/ToolCopperThieving.py:431 +#: flatcamGUI/PreferencesUI.py:7872 flatcamTools/ToolCopperThieving.py:434 msgid "" "The distance between the possible copper thieving elements\n" "and/or robber bar and the actual openings in the mask." @@ -12598,16 +13024,17 @@ msgstr "" "und/oder der Robber Bar und den tatsächlichen Öffnungen in der Maske." # I have no clue -#: flatcamGUI/PreferencesUI.py:7385 +#: flatcamGUI/PreferencesUI.py:7891 msgid "Fiducials Tool Options" msgstr "Passermarken-Werkzeugoptionen" -#: flatcamGUI/PreferencesUI.py:7396 flatcamGUI/PreferencesUI.py:7512 -#: flatcamTools/ToolCopperThieving.py:91 flatcamTools/ToolFiducials.py:151 +#: flatcamGUI/PreferencesUI.py:7902 flatcamGUI/PreferencesUI.py:8018 +#: flatcamGUI/PreferencesUI.py:8137 flatcamGUI/PreferencesUI.py:8349 +#: flatcamTools/ToolCopperThieving.py:92 flatcamTools/ToolFiducials.py:151 msgid "Parameters used for this tool." msgstr "Parameter für dieses Werkzeug." -#: flatcamGUI/PreferencesUI.py:7403 flatcamTools/ToolFiducials.py:158 +#: flatcamGUI/PreferencesUI.py:7909 flatcamTools/ToolFiducials.py:158 msgid "" "This set the fiducial diameter if fiducial type is circular,\n" "otherwise is the size of the fiducial.\n" @@ -12617,19 +13044,19 @@ msgstr "" "des Bezugspunktes kreisförmig ist, ansonsten die Größe des Bezugspunktes.\n" "Der Ausschnitt der Lötmaske ist doppelt so groß." -#: flatcamGUI/PreferencesUI.py:7431 flatcamTools/ToolFiducials.py:186 +#: flatcamGUI/PreferencesUI.py:7937 flatcamTools/ToolFiducials.py:186 msgid "Auto" msgstr "Auto" -#: flatcamGUI/PreferencesUI.py:7432 flatcamTools/ToolFiducials.py:187 +#: flatcamGUI/PreferencesUI.py:7938 flatcamTools/ToolFiducials.py:187 msgid "Manual" msgstr "Manuell" -#: flatcamGUI/PreferencesUI.py:7434 flatcamTools/ToolFiducials.py:189 +#: flatcamGUI/PreferencesUI.py:7940 flatcamTools/ToolFiducials.py:189 msgid "Mode:" msgstr "Modus:" -#: flatcamGUI/PreferencesUI.py:7436 +#: flatcamGUI/PreferencesUI.py:7942 msgid "" "- 'Auto' - automatic placement of fiducials in the corners of the bounding " "box.\n" @@ -12639,19 +13066,19 @@ msgstr "" "platziert.\n" "- \"Manuell\" Die Bezugspunkte werden manuell platziert." -#: flatcamGUI/PreferencesUI.py:7444 flatcamTools/ToolFiducials.py:199 +#: flatcamGUI/PreferencesUI.py:7950 flatcamTools/ToolFiducials.py:199 msgid "Up" msgstr "Hoch" -#: flatcamGUI/PreferencesUI.py:7445 flatcamTools/ToolFiducials.py:200 +#: flatcamGUI/PreferencesUI.py:7951 flatcamTools/ToolFiducials.py:200 msgid "Down" msgstr "Runter" -#: flatcamGUI/PreferencesUI.py:7448 flatcamTools/ToolFiducials.py:203 +#: flatcamGUI/PreferencesUI.py:7954 flatcamTools/ToolFiducials.py:203 msgid "Second fiducial" msgstr "Zweiter Bezugspunkt" -#: flatcamGUI/PreferencesUI.py:7450 flatcamTools/ToolFiducials.py:205 +#: flatcamGUI/PreferencesUI.py:7956 flatcamTools/ToolFiducials.py:205 msgid "" "The position for the second fiducial.\n" "- 'Up' - the order is: bottom-left, top-left, top-right.\n" @@ -12664,19 +13091,19 @@ msgstr "" "- \"Keine\" Es gibt keinen zweiten Bezugspunkt, die Reihenfolge ist: Unten-" "Links, Oben-Rechts." -#: flatcamGUI/PreferencesUI.py:7466 flatcamTools/ToolFiducials.py:221 +#: flatcamGUI/PreferencesUI.py:7972 flatcamTools/ToolFiducials.py:221 msgid "Cross" msgstr "Kreuzförmig" -#: flatcamGUI/PreferencesUI.py:7467 flatcamTools/ToolFiducials.py:222 +#: flatcamGUI/PreferencesUI.py:7973 flatcamTools/ToolFiducials.py:222 msgid "Chess" msgstr "Schachbrett" -#: flatcamGUI/PreferencesUI.py:7470 flatcamTools/ToolFiducials.py:224 +#: flatcamGUI/PreferencesUI.py:7976 flatcamTools/ToolFiducials.py:224 msgid "Fiducial Type" msgstr "Bezugspunktart" -#: flatcamGUI/PreferencesUI.py:7472 flatcamTools/ToolFiducials.py:226 +#: flatcamGUI/PreferencesUI.py:7978 flatcamTools/ToolFiducials.py:226 msgid "" "The type of fiducial.\n" "- 'Circular' - this is the regular fiducial.\n" @@ -12688,19 +13115,19 @@ msgstr "" "\"Kreuzförmig\" Kreuzlinienbezugspunkte\n" "\"Schachbrett\" Schachbrettförmige Bezugspunkte." -#: flatcamGUI/PreferencesUI.py:7481 flatcamTools/ToolFiducials.py:235 +#: flatcamGUI/PreferencesUI.py:7987 flatcamTools/ToolFiducials.py:235 msgid "Line thickness" msgstr "Liniendicke" -#: flatcamGUI/PreferencesUI.py:7501 +#: flatcamGUI/PreferencesUI.py:8007 msgid "Calibration Tool Options" msgstr "Kalibirierungs-Tool-Optionen" -#: flatcamGUI/PreferencesUI.py:7517 flatcamTools/ToolCalibration.py:181 +#: flatcamGUI/PreferencesUI.py:8023 flatcamTools/ToolCalibration.py:181 msgid "Source Type" msgstr "Quellenart" -#: flatcamGUI/PreferencesUI.py:7518 flatcamTools/ToolCalibration.py:182 +#: flatcamGUI/PreferencesUI.py:8024 flatcamTools/ToolCalibration.py:182 msgid "" "The source of calibration points.\n" "It can be:\n" @@ -12713,27 +13140,27 @@ msgstr "" "- \"Frei\" klicken Sie frei auf der Leinwand um einen Kalibierungspunkt zu " "setzen" -#: flatcamGUI/PreferencesUI.py:7523 flatcamTools/ToolCalibration.py:187 +#: flatcamGUI/PreferencesUI.py:8029 flatcamTools/ToolCalibration.py:187 msgid "Free" msgstr "Frei" -#: flatcamGUI/PreferencesUI.py:7537 flatcamTools/ToolCalibration.py:76 +#: flatcamGUI/PreferencesUI.py:8043 flatcamTools/ToolCalibration.py:76 msgid "Height (Z) for travelling between the points." msgstr "Die Höhe (Z) für den Weg zwischen Pads." -#: flatcamGUI/PreferencesUI.py:7549 flatcamTools/ToolCalibration.py:88 +#: flatcamGUI/PreferencesUI.py:8055 flatcamTools/ToolCalibration.py:88 msgid "Verification Z" msgstr "Z Überprüfung" -#: flatcamGUI/PreferencesUI.py:7551 flatcamTools/ToolCalibration.py:90 +#: flatcamGUI/PreferencesUI.py:8057 flatcamTools/ToolCalibration.py:90 msgid "Height (Z) for checking the point." msgstr "Höhe (Z) um den Punkt zu prüfen." -#: flatcamGUI/PreferencesUI.py:7563 flatcamTools/ToolCalibration.py:102 +#: flatcamGUI/PreferencesUI.py:8069 flatcamTools/ToolCalibration.py:102 msgid "Zero Z tool" msgstr "Z Höhen Werkzeug" -#: flatcamGUI/PreferencesUI.py:7565 flatcamTools/ToolCalibration.py:104 +#: flatcamGUI/PreferencesUI.py:8071 flatcamTools/ToolCalibration.py:104 msgid "" "Include a sequence to zero the height (Z)\n" "of the verification tool." @@ -12741,11 +13168,11 @@ msgstr "" "Fügen sie eine Sequenz ein um die Höhe (Z)\n" "des Überprüfungswerkzeugs zu nullen." -#: flatcamGUI/PreferencesUI.py:7574 flatcamTools/ToolCalibration.py:113 +#: flatcamGUI/PreferencesUI.py:8080 flatcamTools/ToolCalibration.py:113 msgid "Height (Z) for mounting the verification probe." msgstr "Höhe (Z) zur Installation der Überprüfungssonde." -#: flatcamGUI/PreferencesUI.py:7588 flatcamTools/ToolCalibration.py:127 +#: flatcamGUI/PreferencesUI.py:8094 flatcamTools/ToolCalibration.py:127 msgid "" "Toolchange X,Y position.\n" "If no value is entered then the current\n" @@ -12755,11 +13182,11 @@ msgstr "" "Wenn kein Wert eingegeben wird, wird der Strom angezeigt\n" "(x, y) Punkt wird verwendet," -#: flatcamGUI/PreferencesUI.py:7599 flatcamTools/ToolCalibration.py:153 +#: flatcamGUI/PreferencesUI.py:8105 flatcamTools/ToolCalibration.py:153 msgid "Second point" msgstr "Zweiter Punkt" -#: flatcamGUI/PreferencesUI.py:7601 flatcamTools/ToolCalibration.py:155 +#: flatcamGUI/PreferencesUI.py:8107 flatcamTools/ToolCalibration.py:155 msgid "" "Second point in the Gcode verification can be:\n" "- top-left -> the user will align the PCB vertically\n" @@ -12769,45 +13196,248 @@ msgstr "" "- oben links -> Der Benutzer richtet die Leiterplatte vertikal aus\n" "- rechts unten -> Der Benutzer richtet die Leiterplatte horizontal aus" -#: flatcamGUI/PreferencesUI.py:7605 flatcamTools/ToolCalibration.py:159 -msgid "Top-Left" -msgstr "Oben links" +#: flatcamGUI/PreferencesUI.py:8126 +msgid "Extract Drills Options" +msgstr "Optionen für Bohrer extrahieren" -#: flatcamGUI/PreferencesUI.py:7606 flatcamTools/ToolCalibration.py:160 -msgid "Bottom-Right" -msgstr "Unten rechts" +#: flatcamGUI/PreferencesUI.py:8141 flatcamGUI/PreferencesUI.py:8353 +#: flatcamTools/ToolExtractDrills.py:68 flatcamTools/ToolPunchGerber.py:75 +msgid "Processed Pads Type" +msgstr "Verarbeitete Pads Typ" -#: flatcamGUI/PreferencesUI.py:7620 +#: flatcamGUI/PreferencesUI.py:8143 flatcamGUI/PreferencesUI.py:8355 +#: flatcamTools/ToolExtractDrills.py:70 flatcamTools/ToolPunchGerber.py:77 +msgid "" +"The type of pads shape to be processed.\n" +"If the PCB has many SMD pads with rectangular pads,\n" +"disable the Rectangular aperture." +msgstr "" +"Die Art der zu verarbeitenden Pads.\n" +"Wenn die Leiterplatte viele SMD-Pads mit rechteckigen Pads hat,\n" +"Deaktivieren Sie die rechteckige Öffnung." + +#: flatcamGUI/PreferencesUI.py:8153 flatcamGUI/PreferencesUI.py:8365 +#: flatcamTools/ToolExtractDrills.py:80 flatcamTools/ToolPunchGerber.py:91 +msgid "Process Circular Pads." +msgstr "Prozessrunde Pads." + +#: flatcamGUI/PreferencesUI.py:8159 flatcamGUI/PreferencesUI.py:8261 +#: flatcamGUI/PreferencesUI.py:8371 flatcamGUI/PreferencesUI.py:8475 +#: flatcamTools/ToolExtractDrills.py:86 flatcamTools/ToolExtractDrills.py:214 +#: flatcamTools/ToolPunchGerber.py:97 flatcamTools/ToolPunchGerber.py:242 +msgid "Oblong" +msgstr "Länglich" + +#: flatcamGUI/PreferencesUI.py:8161 flatcamGUI/PreferencesUI.py:8373 +#: flatcamTools/ToolExtractDrills.py:88 flatcamTools/ToolPunchGerber.py:99 +msgid "Process Oblong Pads." +msgstr "Längliche Pads verarbeiten." + +#: flatcamGUI/PreferencesUI.py:8169 flatcamGUI/PreferencesUI.py:8381 +#: flatcamTools/ToolExtractDrills.py:96 flatcamTools/ToolPunchGerber.py:107 +msgid "Process Square Pads." +msgstr "Quadratische Pads verarbeiten." + +#: flatcamGUI/PreferencesUI.py:8177 flatcamGUI/PreferencesUI.py:8389 +#: flatcamTools/ToolExtractDrills.py:104 flatcamTools/ToolPunchGerber.py:115 +msgid "Process Rectangular Pads." +msgstr "Rechteckige Pads verarbeiten." + +#: flatcamGUI/PreferencesUI.py:8183 flatcamGUI/PreferencesUI.py:8300 +#: flatcamGUI/PreferencesUI.py:8395 flatcamGUI/PreferencesUI.py:8514 +#: flatcamTools/ToolExtractDrills.py:110 flatcamTools/ToolExtractDrills.py:253 +#: flatcamTools/ToolProperties.py:172 flatcamTools/ToolPunchGerber.py:121 +#: flatcamTools/ToolPunchGerber.py:281 +msgid "Others" +msgstr "Andere" + +#: flatcamGUI/PreferencesUI.py:8185 flatcamGUI/PreferencesUI.py:8397 +#: flatcamTools/ToolExtractDrills.py:112 flatcamTools/ToolPunchGerber.py:123 +msgid "Process pads not in the categories above." +msgstr "Prozess-Pads nicht in den oben genannten Kategorien." + +#: flatcamGUI/PreferencesUI.py:8198 flatcamGUI/PreferencesUI.py:8222 +#: flatcamGUI/PreferencesUI.py:8411 flatcamGUI/PreferencesUI.py:8436 +#: flatcamTools/ToolExtractDrills.py:139 flatcamTools/ToolExtractDrills.py:156 +#: flatcamTools/ToolPunchGerber.py:150 flatcamTools/ToolPunchGerber.py:184 +msgid "Fixed Diameter" +msgstr "Fester Durchmesser" + +#: flatcamGUI/PreferencesUI.py:8199 flatcamGUI/PreferencesUI.py:8239 +#: flatcamGUI/PreferencesUI.py:8412 flatcamGUI/PreferencesUI.py:8453 +#: flatcamTools/ToolExtractDrills.py:140 flatcamTools/ToolExtractDrills.py:192 +#: flatcamTools/ToolPunchGerber.py:151 flatcamTools/ToolPunchGerber.py:214 +msgid "Fixed Annular Ring" +msgstr "Fester Ring" + +#: flatcamGUI/PreferencesUI.py:8200 flatcamGUI/PreferencesUI.py:8413 +#: flatcamTools/ToolExtractDrills.py:141 flatcamTools/ToolPunchGerber.py:152 +msgid "Proportional" +msgstr "Proportional" + +#: flatcamGUI/PreferencesUI.py:8206 flatcamTools/ToolExtractDrills.py:130 +msgid "" +"The method for processing pads. Can be:\n" +"- Fixed Diameter -> all holes will have a set size\n" +"- Fixed Annular Ring -> all holes will have a set annular ring\n" +"- Proportional -> each hole size will be a fraction of the pad size" +msgstr "" +"Die Methode zur Verarbeitung von Pads. Kann sein:\n" +"- Fester Durchmesser -> Alle Löcher haben eine festgelegte Größe\n" +"- Fester Ring -> Alle Löcher haben einen festen Ring\n" +"- Proportional -> Jede Lochgröße ist ein Bruchteil der Padgröße" + +#: flatcamGUI/PreferencesUI.py:8232 flatcamGUI/PreferencesUI.py:8446 +#: flatcamTools/ToolExtractDrills.py:166 flatcamTools/ToolPunchGerber.py:194 +msgid "Fixed hole diameter." +msgstr "Fester Lochdurchmesser." + +#: flatcamGUI/PreferencesUI.py:8241 flatcamGUI/PreferencesUI.py:8455 +#: flatcamTools/ToolExtractDrills.py:194 flatcamTools/ToolPunchGerber.py:216 +msgid "" +"The size of annular ring.\n" +"The copper sliver between the hole exterior\n" +"and the margin of the copper pad." +msgstr "" +"Die Größe des Ringes.\n" +"Das Kupfersplitter zwischen dem Loch außen\n" +"und der Rand des Kupferkissens." + +#: flatcamGUI/PreferencesUI.py:8250 flatcamGUI/PreferencesUI.py:8464 +#: flatcamTools/ToolExtractDrills.py:203 flatcamTools/ToolPunchGerber.py:231 +msgid "The size of annular ring for circular pads." +msgstr "Die Größe des Ringes für kreisförmige Pads." + +#: flatcamGUI/PreferencesUI.py:8263 flatcamGUI/PreferencesUI.py:8477 +#: flatcamTools/ToolExtractDrills.py:216 flatcamTools/ToolPunchGerber.py:244 +msgid "The size of annular ring for oblong pads." +msgstr "Die Größe des Ringes für längliche Pads." + +#: flatcamGUI/PreferencesUI.py:8276 flatcamGUI/PreferencesUI.py:8490 +#: flatcamTools/ToolExtractDrills.py:229 flatcamTools/ToolPunchGerber.py:257 +msgid "The size of annular ring for square pads." +msgstr "Die Größe des Ringes für quadratische Pads." + +#: flatcamGUI/PreferencesUI.py:8289 flatcamGUI/PreferencesUI.py:8503 +#: flatcamTools/ToolExtractDrills.py:242 flatcamTools/ToolPunchGerber.py:270 +msgid "The size of annular ring for rectangular pads." +msgstr "Die Größe des Ringes für rechteckige Pads." + +#: flatcamGUI/PreferencesUI.py:8302 flatcamGUI/PreferencesUI.py:8516 +#: flatcamTools/ToolExtractDrills.py:255 flatcamTools/ToolPunchGerber.py:283 +msgid "The size of annular ring for other pads." +msgstr "Die Größe des Ringes für andere Pads." + +#: flatcamGUI/PreferencesUI.py:8312 flatcamGUI/PreferencesUI.py:8526 +#: flatcamTools/ToolExtractDrills.py:276 flatcamTools/ToolPunchGerber.py:299 +msgid "Proportional Diameter" +msgstr "Proportionaler Durchmesser" + +#: flatcamGUI/PreferencesUI.py:8321 flatcamGUI/PreferencesUI.py:8535 +msgid "Factor" +msgstr "Faktor" + +#: flatcamGUI/PreferencesUI.py:8323 flatcamGUI/PreferencesUI.py:8537 +#: flatcamTools/ToolExtractDrills.py:287 flatcamTools/ToolPunchGerber.py:310 +msgid "" +"Proportional Diameter.\n" +"The hole diameter will be a fraction of the pad size." +msgstr "" +"Proportionaler Durchmesser.\n" +"Der Lochdurchmesser beträgt einen Bruchteil der Padgröße." + +#: flatcamGUI/PreferencesUI.py:8338 +msgid "Punch Gerber Options" +msgstr "Stanzen Sie die Gerber-Optionen" + +#: flatcamGUI/PreferencesUI.py:8419 flatcamTools/ToolPunchGerber.py:141 +msgid "" +"The punch hole source can be:\n" +"- Excellon Object-> the Excellon object drills center will serve as " +"reference.\n" +"- Fixed Diameter -> will try to use the pads center as reference adding " +"fixed diameter holes.\n" +"- Fixed Annular Ring -> will try to keep a set annular ring.\n" +"- Proportional -> will make a Gerber punch hole having the diameter a " +"percentage of the pad diameter.\n" +msgstr "" +"Die Stanzlochquelle kann sein:\n" +"- Excellon-Objekt-> Das Excellon-Objektbohrzentrum dient als Referenz.\n" +"- Fester Durchmesser -> versucht, die Mitte der Pads als Referenz für Löcher " +"mit festem Durchmesser zu verwenden.\n" +"- Fixed Annular Ring -> versucht, einen festgelegten Ring zu behalten.\n" +"- Proportional -> macht ein Gerber-Stanzloch mit dem Durchmesser zu einem " +"Prozentsatz des Pad-Durchmessers.\n" + +#: flatcamGUI/PreferencesUI.py:8552 +msgid "Invert Gerber Tool Options" +msgstr "Invert. Sie die Gerber-Werkzeugoptionen" + +#: flatcamGUI/PreferencesUI.py:8558 +msgid "" +"A tool to invert Gerber geometry from positive to negative\n" +"and in revers." +msgstr "" +"Ein Werkzeug zum Konvertieren der Gerber-Geometrie von positiv nach negativ\n" +"und umgekehrt." + +#: flatcamGUI/PreferencesUI.py:8572 flatcamTools/ToolInvertGerber.py:90 +msgid "" +"Distance by which to avoid\n" +"the edges of the Gerber object." +msgstr "" +"Entfernung, um die vermieden werden muss\n" +"die Kanten des Gerber-Objekts." + +#: flatcamGUI/PreferencesUI.py:8583 flatcamTools/ToolInvertGerber.py:101 +msgid "Lines Join Style" +msgstr "Linien verbinden Stil" + +#: flatcamGUI/PreferencesUI.py:8585 flatcamTools/ToolInvertGerber.py:103 +msgid "" +"The way that the lines in the object outline will be joined.\n" +"Can be:\n" +"- rounded -> an arc is added between two joining lines\n" +"- square -> the lines meet in 90 degrees angle\n" +"- bevel -> the lines are joined by a third line" +msgstr "" +"Die Art und Weise, wie die Linien in der Objektkontur verbunden werden.\n" +"Kann sein:\n" +"- gerundet -> zwischen zwei Verbindungslinien wird ein Bogen eingefügt\n" +"- Quadrat -> Die Linien treffen sich in einem Winkel von 90 Grad\n" +"- Abschrägung -> Die Linien werden durch eine dritte Linie verbunden" + +#: flatcamGUI/PreferencesUI.py:8608 msgid "Excellon File associations" msgstr "Excellon-Dateizuordnungen" -#: flatcamGUI/PreferencesUI.py:7633 flatcamGUI/PreferencesUI.py:7706 -#: flatcamGUI/PreferencesUI.py:7776 flatcamGUI/PreferencesUI.py:7846 +#: flatcamGUI/PreferencesUI.py:8621 flatcamGUI/PreferencesUI.py:8694 +#: flatcamGUI/PreferencesUI.py:8764 flatcamGUI/PreferencesUI.py:8834 msgid "Restore" msgstr "Wiederherstellen" -#: flatcamGUI/PreferencesUI.py:7634 flatcamGUI/PreferencesUI.py:7707 -#: flatcamGUI/PreferencesUI.py:7777 +#: flatcamGUI/PreferencesUI.py:8622 flatcamGUI/PreferencesUI.py:8695 +#: flatcamGUI/PreferencesUI.py:8765 msgid "Restore the extension list to the default state." msgstr "Stellen Sie den Standardzustand der Erweiterungsliste wieder her." -#: flatcamGUI/PreferencesUI.py:7635 flatcamGUI/PreferencesUI.py:7708 -#: flatcamGUI/PreferencesUI.py:7778 flatcamGUI/PreferencesUI.py:7848 +#: flatcamGUI/PreferencesUI.py:8623 flatcamGUI/PreferencesUI.py:8696 +#: flatcamGUI/PreferencesUI.py:8766 flatcamGUI/PreferencesUI.py:8836 msgid "Delete All" msgstr "Alles löschen" -#: flatcamGUI/PreferencesUI.py:7636 flatcamGUI/PreferencesUI.py:7709 -#: flatcamGUI/PreferencesUI.py:7779 +#: flatcamGUI/PreferencesUI.py:8624 flatcamGUI/PreferencesUI.py:8697 +#: flatcamGUI/PreferencesUI.py:8767 msgid "Delete all extensions from the list." msgstr "Löschen Sie alle Erweiterungen aus der Liste." -#: flatcamGUI/PreferencesUI.py:7644 flatcamGUI/PreferencesUI.py:7717 -#: flatcamGUI/PreferencesUI.py:7787 +#: flatcamGUI/PreferencesUI.py:8632 flatcamGUI/PreferencesUI.py:8705 +#: flatcamGUI/PreferencesUI.py:8775 msgid "Extensions list" msgstr "Erweiterungsliste" -#: flatcamGUI/PreferencesUI.py:7646 flatcamGUI/PreferencesUI.py:7719 -#: flatcamGUI/PreferencesUI.py:7789 +#: flatcamGUI/PreferencesUI.py:8634 flatcamGUI/PreferencesUI.py:8707 +#: flatcamGUI/PreferencesUI.py:8777 msgid "" "List of file extensions to be\n" "associated with FlatCAM." @@ -12815,43 +13445,43 @@ msgstr "" "Liste der zu verwendenden Dateierweiterungen\n" "im Zusammenhang mit FlatCAM." -#: flatcamGUI/PreferencesUI.py:7666 flatcamGUI/PreferencesUI.py:7739 -#: flatcamGUI/PreferencesUI.py:7808 flatcamGUI/PreferencesUI.py:7880 +#: flatcamGUI/PreferencesUI.py:8654 flatcamGUI/PreferencesUI.py:8727 +#: flatcamGUI/PreferencesUI.py:8796 flatcamGUI/PreferencesUI.py:8868 msgid "Extension" msgstr "Erweiterung" -#: flatcamGUI/PreferencesUI.py:7667 flatcamGUI/PreferencesUI.py:7740 -#: flatcamGUI/PreferencesUI.py:7809 +#: flatcamGUI/PreferencesUI.py:8655 flatcamGUI/PreferencesUI.py:8728 +#: flatcamGUI/PreferencesUI.py:8797 msgid "A file extension to be added or deleted to the list." msgstr "A file extension to be added or deleted to the list." -#: flatcamGUI/PreferencesUI.py:7675 flatcamGUI/PreferencesUI.py:7748 -#: flatcamGUI/PreferencesUI.py:7817 +#: flatcamGUI/PreferencesUI.py:8663 flatcamGUI/PreferencesUI.py:8736 +#: flatcamGUI/PreferencesUI.py:8805 msgid "Add Extension" msgstr "Erweiterung hinzufügen" -#: flatcamGUI/PreferencesUI.py:7676 flatcamGUI/PreferencesUI.py:7749 -#: flatcamGUI/PreferencesUI.py:7818 +#: flatcamGUI/PreferencesUI.py:8664 flatcamGUI/PreferencesUI.py:8737 +#: flatcamGUI/PreferencesUI.py:8806 msgid "Add a file extension to the list" msgstr "Fügen Sie der Liste eine Dateierweiterung hinzu" -#: flatcamGUI/PreferencesUI.py:7677 flatcamGUI/PreferencesUI.py:7750 -#: flatcamGUI/PreferencesUI.py:7819 +#: flatcamGUI/PreferencesUI.py:8665 flatcamGUI/PreferencesUI.py:8738 +#: flatcamGUI/PreferencesUI.py:8807 msgid "Delete Extension" msgstr "Erweiterung löschen" -#: flatcamGUI/PreferencesUI.py:7678 flatcamGUI/PreferencesUI.py:7751 -#: flatcamGUI/PreferencesUI.py:7820 +#: flatcamGUI/PreferencesUI.py:8666 flatcamGUI/PreferencesUI.py:8739 +#: flatcamGUI/PreferencesUI.py:8808 msgid "Delete a file extension from the list" msgstr "Löschen Sie eine Dateierweiterung aus der Liste" -#: flatcamGUI/PreferencesUI.py:7685 flatcamGUI/PreferencesUI.py:7758 -#: flatcamGUI/PreferencesUI.py:7827 +#: flatcamGUI/PreferencesUI.py:8673 flatcamGUI/PreferencesUI.py:8746 +#: flatcamGUI/PreferencesUI.py:8815 msgid "Apply Association" msgstr "Assoziation anwenden" -#: flatcamGUI/PreferencesUI.py:7686 flatcamGUI/PreferencesUI.py:7759 -#: flatcamGUI/PreferencesUI.py:7828 +#: flatcamGUI/PreferencesUI.py:8674 flatcamGUI/PreferencesUI.py:8747 +#: flatcamGUI/PreferencesUI.py:8816 msgid "" "Apply the file associations between\n" "FlatCAM and the files with above extensions.\n" @@ -12863,33 +13493,33 @@ msgstr "" "Sie sind nach der nächsten Anmeldung aktiv.\n" "Dies funktioniert nur unter Windows." -#: flatcamGUI/PreferencesUI.py:7703 +#: flatcamGUI/PreferencesUI.py:8691 msgid "GCode File associations" msgstr "GCode-Dateizuordnungen" -#: flatcamGUI/PreferencesUI.py:7773 +#: flatcamGUI/PreferencesUI.py:8761 msgid "Gerber File associations" msgstr "Gerber Dateizuordnungen" -#: flatcamGUI/PreferencesUI.py:7843 +#: flatcamGUI/PreferencesUI.py:8831 msgid "Autocompleter Keywords" msgstr "Autocompleter-Schlüsselwörter" -#: flatcamGUI/PreferencesUI.py:7847 +#: flatcamGUI/PreferencesUI.py:8835 msgid "Restore the autocompleter keywords list to the default state." msgstr "" "Stellen Sie den Standardzustand der Autocompleter-Schlüsselwortliste wieder " "her." -#: flatcamGUI/PreferencesUI.py:7849 +#: flatcamGUI/PreferencesUI.py:8837 msgid "Delete all autocompleter keywords from the list." msgstr "Löschen Sie alle Autocompleter-Schlüsselwörter aus der Liste." -#: flatcamGUI/PreferencesUI.py:7857 +#: flatcamGUI/PreferencesUI.py:8845 msgid "Keywords list" msgstr "Liste der Stichwörter" -#: flatcamGUI/PreferencesUI.py:7859 +#: flatcamGUI/PreferencesUI.py:8847 msgid "" "List of keywords used by\n" "the autocompleter in FlatCAM.\n" @@ -12901,32 +13531,32 @@ msgstr "" "Der Autocompleter ist installiert\n" "im Code-Editor und für die Tcl-Shell." -#: flatcamGUI/PreferencesUI.py:7881 +#: flatcamGUI/PreferencesUI.py:8869 msgid "A keyword to be added or deleted to the list." msgstr "" "Ein Schlüsselwort, das der Liste hinzugefügt oder gelöscht werden soll." -#: flatcamGUI/PreferencesUI.py:7889 +#: flatcamGUI/PreferencesUI.py:8877 msgid "Add keyword" msgstr "Keyword hinzufügen" -#: flatcamGUI/PreferencesUI.py:7890 +#: flatcamGUI/PreferencesUI.py:8878 msgid "Add a keyword to the list" msgstr "Fügen Sie der Liste ein Schlüsselwort hinzu" -#: flatcamGUI/PreferencesUI.py:7891 +#: flatcamGUI/PreferencesUI.py:8879 msgid "Delete keyword" msgstr "Stichwort löschen" -#: flatcamGUI/PreferencesUI.py:7892 +#: flatcamGUI/PreferencesUI.py:8880 msgid "Delete a keyword from the list" msgstr "Löschen Sie ein Schlüsselwort aus der Liste" -#: flatcamParsers/ParseExcellon.py:314 +#: flatcamParsers/ParseExcellon.py:315 msgid "This is GCODE mark" msgstr "Dies ist die GCODE-Marke" -#: flatcamParsers/ParseExcellon.py:431 +#: flatcamParsers/ParseExcellon.py:432 msgid "" "No tool diameter info's. See shell.\n" "A tool change event: T" @@ -12934,7 +13564,7 @@ msgstr "" "Keine Angaben zum Werkzeugdurchmesser. Siehe Shell.\n" "Ein Werkzeugwechselereignis: T" -#: flatcamParsers/ParseExcellon.py:434 +#: flatcamParsers/ParseExcellon.py:435 msgid "" "was found but the Excellon file have no informations regarding the tool " "diameters therefore the application will try to load it by using some 'fake' " @@ -12948,11 +13578,11 @@ msgstr "" "Der Benutzer muss das resultierende Excellon-Objekt bearbeiten und die " "Durchmesser so ändern, dass sie den tatsächlichen Durchmessern entsprechen." -#: flatcamParsers/ParseExcellon.py:886 flatcamTools/ToolSolderPaste.py:1330 +#: flatcamParsers/ParseExcellon.py:897 flatcamTools/ToolSolderPaste.py:1327 msgid "An internal error has ocurred. See shell.\n" msgstr "Ein interner Fehler ist aufgetreten. Siehe Konsole.\n" -#: flatcamParsers/ParseExcellon.py:889 +#: flatcamParsers/ParseExcellon.py:900 msgid "" "Excellon Parser error.\n" "Parsing Failed. Line" @@ -12960,7 +13590,7 @@ msgstr "" "Excellon-Parser-Fehler.\n" "Analyse fehlgeschlagen. Linie" -#: flatcamParsers/ParseExcellon.py:973 +#: flatcamParsers/ParseExcellon.py:982 msgid "" "Excellon.create_geometry() -> a drill location was skipped due of not having " "a tool associated.\n" @@ -12978,22 +13608,22 @@ msgstr "Schriftart wird nicht unterstützt, versuchen Sie es mit einer anderen." msgid "Gerber processing. Parsing" msgstr "Gerber-Verarbeitung. Parsing" -#: flatcamParsers/ParseGerber.py:426 flatcamParsers/ParseHPGL2.py:176 +#: flatcamParsers/ParseGerber.py:426 flatcamParsers/ParseHPGL2.py:178 msgid "lines" msgstr "Linien" -#: flatcamParsers/ParseGerber.py:970 flatcamParsers/ParseGerber.py:1065 -#: flatcamParsers/ParseHPGL2.py:269 flatcamParsers/ParseHPGL2.py:283 -#: flatcamParsers/ParseHPGL2.py:302 flatcamParsers/ParseHPGL2.py:326 -#: flatcamParsers/ParseHPGL2.py:361 +#: flatcamParsers/ParseGerber.py:1002 flatcamParsers/ParseGerber.py:1102 +#: flatcamParsers/ParseHPGL2.py:271 flatcamParsers/ParseHPGL2.py:285 +#: flatcamParsers/ParseHPGL2.py:304 flatcamParsers/ParseHPGL2.py:328 +#: flatcamParsers/ParseHPGL2.py:363 msgid "Coordinates missing, line ignored" msgstr "Koordinaten fehlen, Zeile wird ignoriert" -#: flatcamParsers/ParseGerber.py:972 flatcamParsers/ParseGerber.py:1067 +#: flatcamParsers/ParseGerber.py:1004 flatcamParsers/ParseGerber.py:1104 msgid "GERBER file might be CORRUPT. Check the file !!!" msgstr "Die GERBER-Datei könnte CORRUPT sein. Überprüfen Sie die Datei !!!" -#: flatcamParsers/ParseGerber.py:1021 +#: flatcamParsers/ParseGerber.py:1058 msgid "" "Region does not have enough points. File will be processed but there are " "parser errors. Line number" @@ -13001,66 +13631,215 @@ msgstr "" "Region hat nicht genug Punkte. Die Datei wird verarbeitet, es treten jedoch " "Parserfehler auf. Linien Nummer" -#: flatcamParsers/ParseGerber.py:1421 flatcamParsers/ParseHPGL2.py:396 +#: flatcamParsers/ParseGerber.py:1488 flatcamParsers/ParseHPGL2.py:398 msgid "Gerber processing. Joining polygons" msgstr "Gerber-Verarbeitung. Polygone verbinden" -#: flatcamParsers/ParseGerber.py:1438 +#: flatcamParsers/ParseGerber.py:1505 msgid "Gerber processing. Applying Gerber polarity." msgstr "Gerber-Verarbeitung. Anwenden der Gerber-Polarität." -#: flatcamParsers/ParseGerber.py:1498 +#: flatcamParsers/ParseGerber.py:1565 msgid "Gerber Line" msgstr "Gerber Linie" -#: flatcamParsers/ParseGerber.py:1498 +#: flatcamParsers/ParseGerber.py:1565 msgid "Gerber Line Content" msgstr "Gerber-Zeileninhalt" -#: flatcamParsers/ParseGerber.py:1500 +#: flatcamParsers/ParseGerber.py:1567 msgid "Gerber Parser ERROR" msgstr "Gerber-Parser FEHLER" -#: flatcamParsers/ParseGerber.py:1884 +#: flatcamParsers/ParseGerber.py:1956 msgid "Gerber Scale done." msgstr "Gerber-Skalierung erfolgt." -#: flatcamParsers/ParseGerber.py:1977 +#: flatcamParsers/ParseGerber.py:2049 msgid "Gerber Offset done." msgstr "Gerber Offset fertig." -#: flatcamParsers/ParseGerber.py:2054 +#: flatcamParsers/ParseGerber.py:2126 msgid "Gerber Mirror done." msgstr "Gerber Spiegel fertig." -#: flatcamParsers/ParseGerber.py:2128 +#: flatcamParsers/ParseGerber.py:2200 msgid "Gerber Skew done." msgstr "Gerber-Versatz fertig." -#: flatcamParsers/ParseGerber.py:2192 +#: flatcamParsers/ParseGerber.py:2263 msgid "Gerber Rotate done." msgstr "Gerber drehen fertig." -#: flatcamParsers/ParseGerber.py:2273 +#: flatcamParsers/ParseGerber.py:2419 msgid "Gerber Buffer done." msgstr "Gerber Buffer fertig." -#: flatcamParsers/ParseHPGL2.py:176 +#: flatcamParsers/ParseHPGL2.py:178 msgid "HPGL2 processing. Parsing" msgstr "HPGL2 -Verarbeitung. Parsing" -#: flatcamParsers/ParseHPGL2.py:408 +#: flatcamParsers/ParseHPGL2.py:410 msgid "HPGL2 Line" msgstr "HPGL2-Linie" -#: flatcamParsers/ParseHPGL2.py:408 +#: flatcamParsers/ParseHPGL2.py:410 msgid "HPGL2 Line Content" msgstr "HPGL2-Zeileninhalt" -#: flatcamParsers/ParseHPGL2.py:409 +#: flatcamParsers/ParseHPGL2.py:411 msgid "HPGL2 Parser ERROR" msgstr "HPGL2 -Parser FEHLER" +#: flatcamTools/ToolAlignObjects.py:32 +msgid "Align Objects" +msgstr "Objekte ausrichten" + +#: flatcamTools/ToolAlignObjects.py:61 +msgid "MOVING object" +msgstr "BEWEGLICHES Objekt" + +#: flatcamTools/ToolAlignObjects.py:65 +msgid "" +"Specify the type of object to be aligned.\n" +"It can be of type: Gerber or Excellon.\n" +"The selection here decide the type of objects that will be\n" +"in the Object combobox." +msgstr "" +"Geben Sie den Objekttyp an, der ausgerichtet werden soll.\n" +"Es kann vom Typ sein: Gerber oder Excellon.\n" +"Die Auswahl hier entscheidet über die Art der Objekte, die sein werden\n" +"in der Objekt-Combobox." + +#: flatcamTools/ToolAlignObjects.py:86 +msgid "Object to be aligned." +msgstr "Zu ausrichtendes Objekt." + +#: flatcamTools/ToolAlignObjects.py:98 +msgid "TARGET object" +msgstr "ZIEL-Objekt" + +#: flatcamTools/ToolAlignObjects.py:100 +msgid "" +"Specify the type of object to be aligned to.\n" +"It can be of type: Gerber or Excellon.\n" +"The selection here decide the type of objects that will be\n" +"in the Object combobox." +msgstr "" +"Geben Sie den Objekttyp an, an dem ausgerichtet werden soll.\n" +"Es kann vom Typ sein: Gerber oder Excellon.\n" +"Die Auswahl hier entscheidet über die Art der Objekte, die sein werden\n" +"in der Objekt-Combobox." + +#: flatcamTools/ToolAlignObjects.py:122 +msgid "Object to be aligned to. Aligner." +msgstr "Objekt, an dem ausgerichtet werden soll. Aligner." + +#: flatcamTools/ToolAlignObjects.py:135 +msgid "Alignment Type" +msgstr "AusrichtungstypAusrichtung" + +#: flatcamTools/ToolAlignObjects.py:137 +msgid "" +"The type of alignment can be:\n" +"- Single Point -> it require a single point of sync, the action will be a " +"translation\n" +"- Dual Point -> it require two points of sync, the action will be " +"translation followed by rotation" +msgstr "" +"Die Art der Ausrichtung kann sein:\n" +"- Einzelpunkt -> Es ist ein einzelner Synchronisierungspunkt erforderlich. " +"Die Aktion ist eine Übersetzung\n" +"- Doppelpunkt -> Es sind zwei Synchronisierungspunkte erforderlich. Die " +"Aktion wird verschoben und anschließend gedreht" + +#: flatcamTools/ToolAlignObjects.py:143 +msgid "Single Point" +msgstr "Einziger Punkt" + +#: flatcamTools/ToolAlignObjects.py:144 +msgid "Dual Point" +msgstr "Doppelpunkt" + +#: flatcamTools/ToolAlignObjects.py:159 +msgid "Align Object" +msgstr "Objekt ausrichten" + +#: flatcamTools/ToolAlignObjects.py:161 +msgid "" +"Align the specified object to the aligner object.\n" +"If only one point is used then it assumes translation.\n" +"If tho points are used it assume translation and rotation." +msgstr "" +"Richten Sie das angegebene Objekt am Aligner-Objekt aus.\n" +"Wenn nur ein Punkt verwendet wird, wird eine Übersetzung vorausgesetzt.\n" +"Wenn diese Punkte verwendet werden, wird eine Translation und Rotation " +"angenommen." + +#: flatcamTools/ToolAlignObjects.py:176 flatcamTools/ToolCalculators.py:246 +#: flatcamTools/ToolCalibration.py:683 flatcamTools/ToolCopperThieving.py:485 +#: flatcamTools/ToolCutOut.py:372 flatcamTools/ToolDblSided.py:472 +#: flatcamTools/ToolExtractDrills.py:310 flatcamTools/ToolFiducials.py:318 +#: flatcamTools/ToolFilm.py:520 flatcamTools/ToolInvertGerber.py:140 +#: flatcamTools/ToolNCC.py:612 flatcamTools/ToolOptimal.py:238 +#: flatcamTools/ToolPaint.py:556 flatcamTools/ToolPanelize.py:269 +#: flatcamTools/ToolPunchGerber.py:339 flatcamTools/ToolQRCode.py:314 +#: flatcamTools/ToolRulesCheck.py:516 flatcamTools/ToolSolderPaste.py:474 +#: flatcamTools/ToolSub.py:176 flatcamTools/ToolTransform.py:399 +msgid "Reset Tool" +msgstr "Reset Werkzeug" + +#: flatcamTools/ToolAlignObjects.py:178 flatcamTools/ToolCalculators.py:248 +#: flatcamTools/ToolCalibration.py:685 flatcamTools/ToolCopperThieving.py:487 +#: flatcamTools/ToolCutOut.py:374 flatcamTools/ToolDblSided.py:474 +#: flatcamTools/ToolExtractDrills.py:312 flatcamTools/ToolFiducials.py:320 +#: flatcamTools/ToolFilm.py:522 flatcamTools/ToolInvertGerber.py:142 +#: flatcamTools/ToolNCC.py:614 flatcamTools/ToolOptimal.py:240 +#: flatcamTools/ToolPaint.py:558 flatcamTools/ToolPanelize.py:271 +#: flatcamTools/ToolPunchGerber.py:341 flatcamTools/ToolQRCode.py:316 +#: flatcamTools/ToolRulesCheck.py:518 flatcamTools/ToolSolderPaste.py:476 +#: flatcamTools/ToolSub.py:178 flatcamTools/ToolTransform.py:401 +msgid "Will reset the tool parameters." +msgstr "Wird die Werkzeugeinstellungen zurücksetzen." + +#: flatcamTools/ToolAlignObjects.py:244 +msgid "Align Tool" +msgstr "Ausrichten Werkzeug" + +#: flatcamTools/ToolAlignObjects.py:289 +msgid "There is no aligned FlatCAM object selected..." +msgstr "Es ist kein ausgerichtetes FlatCAM-Objekt ausgewählt ..." + +#: flatcamTools/ToolAlignObjects.py:299 +msgid "There is no aligner FlatCAM object selected..." +msgstr "Es ist kein Aligner FlatCAM-Objekt ausgewählt ..." + +#: flatcamTools/ToolAlignObjects.py:325 flatcamTools/ToolAlignObjects.py:385 +msgid "First Point" +msgstr "Erster Punkt" + +#: flatcamTools/ToolAlignObjects.py:325 flatcamTools/ToolAlignObjects.py:400 +msgid "Click on the START point." +msgstr "Klicken Sie auf den START-Punkt." + +#: flatcamTools/ToolAlignObjects.py:380 flatcamTools/ToolCalibration.py:920 +msgid "Cancelled by user request." +msgstr "Auf Benutzerwunsch storniert." + +#: flatcamTools/ToolAlignObjects.py:385 flatcamTools/ToolAlignObjects.py:407 +msgid "Click on the DESTINATION point." +msgstr "Klicken Sie auf den Punkt ZIEL." + +#: flatcamTools/ToolAlignObjects.py:385 flatcamTools/ToolAlignObjects.py:400 +#: flatcamTools/ToolAlignObjects.py:407 +msgid " Or right click to cancel." +msgstr " Oder klicken Sie mit der rechten Maustaste, um abzubrechen." + +#: flatcamTools/ToolAlignObjects.py:400 flatcamTools/ToolAlignObjects.py:407 +#: flatcamTools/ToolFiducials.py:111 +msgid "Second Point" +msgstr "Zweiter Punkt" + #: flatcamTools/ToolCalculators.py:24 msgid "Calculators" msgstr "Rechner" @@ -13150,7 +13929,7 @@ msgstr "" "Berechnen Sie den aktuellen Intensitätswert und die Eingriffszeit,\n" "abhängig von den obigen Parametern" -#: flatcamTools/ToolCalculators.py:285 +#: flatcamTools/ToolCalculators.py:299 msgid "Calc. Tool" msgstr "Rechner-Tool" @@ -13176,25 +13955,25 @@ msgstr "" "Diese vier Punkte sollten in den vier sein\n" "(so viel wie möglich) Ecken des Objekts." -#: flatcamTools/ToolCalibration.py:193 flatcamTools/ToolCutOut.py:80 -#: flatcamTools/ToolFilm.py:78 flatcamTools/ToolImage.py:55 -#: flatcamTools/ToolPanelize.py:66 flatcamTools/ToolProperties.py:169 +#: flatcamTools/ToolCalibration.py:193 flatcamTools/ToolFilm.py:76 +#: flatcamTools/ToolImage.py:54 flatcamTools/ToolPanelize.py:78 +#: flatcamTools/ToolProperties.py:177 msgid "Object Type" msgstr "Objekttyp" -#: flatcamTools/ToolCalibration.py:211 +#: flatcamTools/ToolCalibration.py:210 msgid "Source object selection" -msgstr "Auswahl des Quellobjektes." +msgstr "Auswahl des Quellobjekts" -#: flatcamTools/ToolCalibration.py:213 +#: flatcamTools/ToolCalibration.py:212 msgid "FlatCAM Object to be used as a source for reference points." msgstr "Das FlatCAM-Objekt, das als Referenzpunkt verwendet werden soll." -#: flatcamTools/ToolCalibration.py:219 +#: flatcamTools/ToolCalibration.py:218 msgid "Calibration Points" msgstr "Kalibrierungspunkte" -#: flatcamTools/ToolCalibration.py:221 +#: flatcamTools/ToolCalibration.py:220 msgid "" "Contain the expected calibration points and the\n" "ones measured." @@ -13202,56 +13981,52 @@ msgstr "" "Enthalten die erwarteten Kalibrierungspunkte sowie\n" "die gemessenen." -#: flatcamTools/ToolCalibration.py:236 flatcamTools/ToolSub.py:74 -#: flatcamTools/ToolSub.py:126 +#: flatcamTools/ToolCalibration.py:235 flatcamTools/ToolSub.py:76 +#: flatcamTools/ToolSub.py:131 msgid "Target" msgstr "Ziel" -#: flatcamTools/ToolCalibration.py:237 +#: flatcamTools/ToolCalibration.py:236 msgid "Found Delta" msgstr "Gefundener Unterschied" -#: flatcamTools/ToolCalibration.py:249 +#: flatcamTools/ToolCalibration.py:248 msgid "Bot Left X" msgstr "Unten links X" -#: flatcamTools/ToolCalibration.py:258 +#: flatcamTools/ToolCalibration.py:257 msgid "Bot Left Y" msgstr "Unten links Y" -#: flatcamTools/ToolCalibration.py:266 flatcamTools/ToolCalibration.py:267 -msgid "Origin" -msgstr "Ursprung" - -#: flatcamTools/ToolCalibration.py:278 +#: flatcamTools/ToolCalibration.py:275 msgid "Bot Right X" msgstr "Unten rechts X" -#: flatcamTools/ToolCalibration.py:288 +#: flatcamTools/ToolCalibration.py:285 msgid "Bot Right Y" msgstr "Unten rechts Y" -#: flatcamTools/ToolCalibration.py:303 +#: flatcamTools/ToolCalibration.py:300 msgid "Top Left X" msgstr "Oben links X" -#: flatcamTools/ToolCalibration.py:312 +#: flatcamTools/ToolCalibration.py:309 msgid "Top Left Y" msgstr "Oben links Y" -#: flatcamTools/ToolCalibration.py:327 +#: flatcamTools/ToolCalibration.py:324 msgid "Top Right X" msgstr "Oben rechts X" -#: flatcamTools/ToolCalibration.py:337 +#: flatcamTools/ToolCalibration.py:334 msgid "Top Right Y" msgstr "Oben rechts Y" -#: flatcamTools/ToolCalibration.py:370 +#: flatcamTools/ToolCalibration.py:367 msgid "Get Points" msgstr "Punkte einholen" -#: flatcamTools/ToolCalibration.py:372 +#: flatcamTools/ToolCalibration.py:369 msgid "" "Pick four points by clicking on canvas if the source choice\n" "is 'free' or inside the object geometry if the source is 'object'.\n" @@ -13263,11 +14038,11 @@ msgstr "" "Diese vier Punkte sollten in vier unterschiedlichen Quadranten des Objektes " "sein." -#: flatcamTools/ToolCalibration.py:393 +#: flatcamTools/ToolCalibration.py:390 msgid "STEP 2: Verification GCode" msgstr "Schritt 2: Überprüfung des GCodes" -#: flatcamTools/ToolCalibration.py:395 flatcamTools/ToolCalibration.py:408 +#: flatcamTools/ToolCalibration.py:392 flatcamTools/ToolCalibration.py:405 msgid "" "Generate GCode file to locate and align the PCB by using\n" "the four points acquired above.\n" @@ -13287,15 +14062,15 @@ msgstr "" "- dritter Punkt -> Kontrollpunkt. Kann sein: oben links oder unten rechts.\n" "- vierter Punkt -> letzter Verifizierungspunkt. Nur zur Bewertung." -#: flatcamTools/ToolCalibration.py:406 flatcamTools/ToolSolderPaste.py:347 +#: flatcamTools/ToolCalibration.py:403 flatcamTools/ToolSolderPaste.py:349 msgid "Generate GCode" msgstr "GCode generieren" -#: flatcamTools/ToolCalibration.py:432 +#: flatcamTools/ToolCalibration.py:429 msgid "STEP 3: Adjustments" msgstr "Schritt 3: Anpassungen" -#: flatcamTools/ToolCalibration.py:434 flatcamTools/ToolCalibration.py:443 +#: flatcamTools/ToolCalibration.py:431 flatcamTools/ToolCalibration.py:440 msgid "" "Calculate Scale and Skew factors based on the differences (delta)\n" "found when checking the PCB pattern. The differences must be filled\n" @@ -13306,15 +14081,15 @@ msgstr "" "Feldern\n" "eingetragen warden." -#: flatcamTools/ToolCalibration.py:441 +#: flatcamTools/ToolCalibration.py:438 msgid "Calculate Factors" msgstr "Berechne Faktoren" -#: flatcamTools/ToolCalibration.py:463 +#: flatcamTools/ToolCalibration.py:460 msgid "STEP 4: Adjusted GCode" msgstr "Schritt 4 Angepasster GCode" -#: flatcamTools/ToolCalibration.py:465 +#: flatcamTools/ToolCalibration.py:462 msgid "" "Generate verification GCode file adjusted with\n" "the factors above." @@ -13322,43 +14097,43 @@ msgstr "" "Erzeuge den GCode mit den zuvor gefundenen\n" "Faktoren." -#: flatcamTools/ToolCalibration.py:470 +#: flatcamTools/ToolCalibration.py:467 msgid "Scale Factor X:" msgstr "Skalierungsfaktor X:" -#: flatcamTools/ToolCalibration.py:482 +#: flatcamTools/ToolCalibration.py:479 msgid "Scale Factor Y:" msgstr "Skalierungsfaktor Y:" -#: flatcamTools/ToolCalibration.py:494 +#: flatcamTools/ToolCalibration.py:491 msgid "Apply Scale Factors" msgstr "Skalierungen anwenden" -#: flatcamTools/ToolCalibration.py:496 +#: flatcamTools/ToolCalibration.py:493 msgid "Apply Scale factors on the calibration points." msgstr "Anwenden der Skalierungsfaktoren auf die Kalibrierungspunkte." -#: flatcamTools/ToolCalibration.py:506 +#: flatcamTools/ToolCalibration.py:503 msgid "Skew Angle X:" msgstr "Verzerrungs-Winkel X:" -#: flatcamTools/ToolCalibration.py:519 +#: flatcamTools/ToolCalibration.py:516 msgid "Skew Angle Y:" msgstr "Verzerrungs-Winkel Y:" -#: flatcamTools/ToolCalibration.py:532 +#: flatcamTools/ToolCalibration.py:529 msgid "Apply Skew Factors" msgstr "Schrägstellung anwenden" -#: flatcamTools/ToolCalibration.py:534 +#: flatcamTools/ToolCalibration.py:531 msgid "Apply Skew factors on the calibration points." msgstr "Anwenden der Verzerrungswinkel auf die Bezugspunkte." -#: flatcamTools/ToolCalibration.py:603 +#: flatcamTools/ToolCalibration.py:600 msgid "Generate Adjusted GCode" msgstr "Angepassten Überprüfungs-GCode generieren" -#: flatcamTools/ToolCalibration.py:605 +#: flatcamTools/ToolCalibration.py:602 msgid "" "Generate verification GCode file adjusted with\n" "the factors set above.\n" @@ -13370,11 +14145,11 @@ msgstr "" "Die GCode-Parameter können neu eingestellt werden\n" "bevor Sie auf diese Schaltfläche klicken." -#: flatcamTools/ToolCalibration.py:626 +#: flatcamTools/ToolCalibration.py:623 msgid "STEP 5: Calibrate FlatCAM Objects" msgstr "Schritt 5: Kalibrieren der FlatCAM Objekte" -#: flatcamTools/ToolCalibration.py:628 +#: flatcamTools/ToolCalibration.py:625 msgid "" "Adjust the FlatCAM objects\n" "with the factors determined and verified above." @@ -13382,27 +14157,27 @@ msgstr "" "Anpassen der FlatCAM Objekte\n" "mit den zuvor bestimmten und überprüften Faktoren." -#: flatcamTools/ToolCalibration.py:641 +#: flatcamTools/ToolCalibration.py:637 msgid "Adjusted object type" msgstr "Angepasster Objekttyp" -#: flatcamTools/ToolCalibration.py:643 +#: flatcamTools/ToolCalibration.py:638 msgid "Type of the FlatCAM Object to be adjusted." msgstr "Art des FlatCAM Objektes das angepasst wird." -#: flatcamTools/ToolCalibration.py:654 +#: flatcamTools/ToolCalibration.py:651 msgid "Adjusted object selection" msgstr "Objektauswahl angepasst" -#: flatcamTools/ToolCalibration.py:656 +#: flatcamTools/ToolCalibration.py:653 msgid "The FlatCAM Object to be adjusted." msgstr "Das FlatCAM Objekt das angepasst werden muss." -#: flatcamTools/ToolCalibration.py:663 +#: flatcamTools/ToolCalibration.py:660 msgid "Calibrate" msgstr "Kalibrieren" -#: flatcamTools/ToolCalibration.py:665 +#: flatcamTools/ToolCalibration.py:662 msgid "" "Adjust (scale and/or skew) the objects\n" "with the factors determined above." @@ -13410,81 +14185,61 @@ msgstr "" "Anpassen (Skalieren und/oder Verzerren) der Objekte\n" "anhand der zuvor gefundenen Faktoren." -#: flatcamTools/ToolCalibration.py:686 flatcamTools/ToolCopperThieving.py:482 -#: flatcamTools/ToolCutOut.py:362 flatcamTools/ToolDblSided.py:405 -#: flatcamTools/ToolFiducials.py:316 flatcamTools/ToolFilm.py:518 -#: flatcamTools/ToolNonCopperClear.py:486 flatcamTools/ToolOptimal.py:237 -#: flatcamTools/ToolPaint.py:372 flatcamTools/ToolPanelize.py:266 -#: flatcamTools/ToolQRCode.py:314 flatcamTools/ToolRulesCheck.py:507 -#: flatcamTools/ToolSolderPaste.py:470 flatcamTools/ToolSub.py:170 -msgid "Reset Tool" -msgstr "Reset Werkzeug" +#: flatcamTools/ToolCalibration.py:770 flatcamTools/ToolCalibration.py:771 +msgid "Origin" +msgstr "Ursprung" -#: flatcamTools/ToolCalibration.py:688 flatcamTools/ToolCopperThieving.py:484 -#: flatcamTools/ToolCutOut.py:364 flatcamTools/ToolDblSided.py:407 -#: flatcamTools/ToolFiducials.py:318 flatcamTools/ToolFilm.py:520 -#: flatcamTools/ToolNonCopperClear.py:488 flatcamTools/ToolOptimal.py:239 -#: flatcamTools/ToolPaint.py:374 flatcamTools/ToolPanelize.py:268 -#: flatcamTools/ToolQRCode.py:316 flatcamTools/ToolRulesCheck.py:509 -#: flatcamTools/ToolSolderPaste.py:472 flatcamTools/ToolSub.py:172 -msgid "Will reset the tool parameters." -msgstr "Wird die Werkzeugeinstellungen zurücksetzen." - -#: flatcamTools/ToolCalibration.py:792 +#: flatcamTools/ToolCalibration.py:800 msgid "Tool initialized" msgstr "Werkzeug eingerichtet" -#: flatcamTools/ToolCalibration.py:824 +#: flatcamTools/ToolCalibration.py:838 msgid "There is no source FlatCAM object selected..." msgstr "Es is kein FlatCAM Objekt ausgewählt." -#: flatcamTools/ToolCalibration.py:845 +#: flatcamTools/ToolCalibration.py:859 msgid "Get First calibration point. Bottom Left..." msgstr "Lese ersten Kalibrierungspunkt (Unten Links)" -#: flatcamTools/ToolCalibration.py:906 -msgid "Cancelled by user request." -msgstr "Auf Benutzerwunsch storniert." - -#: flatcamTools/ToolCalibration.py:912 +#: flatcamTools/ToolCalibration.py:926 msgid "Get Second calibration point. Bottom Right (Top Left)..." msgstr "Zweiter Kalibrierungspunkt abrufen. Unten rechts (oben links) ..." -#: flatcamTools/ToolCalibration.py:916 +#: flatcamTools/ToolCalibration.py:930 msgid "Get Third calibration point. Top Left (Bottom Right)..." msgstr "" "Holen Sie sich den dritten Kalibrierungspunkt. Oben links unten rechts)..." -#: flatcamTools/ToolCalibration.py:920 +#: flatcamTools/ToolCalibration.py:934 msgid "Get Forth calibration point. Top Right..." msgstr "Lese vierten Kalibrierungspunkt (Oben Rechts)" -#: flatcamTools/ToolCalibration.py:924 +#: flatcamTools/ToolCalibration.py:938 msgid "Done. All four points have been acquired." msgstr "Erledigt, alle vier Punkte wurden gelesen." -#: flatcamTools/ToolCalibration.py:955 +#: flatcamTools/ToolCalibration.py:969 msgid "Verification GCode for FlatCAM Calibration Tool" msgstr "Überprüfungs GCode des FlatCAM Kalibrierungstools" -#: flatcamTools/ToolCalibration.py:967 flatcamTools/ToolCalibration.py:1053 +#: flatcamTools/ToolCalibration.py:981 flatcamTools/ToolCalibration.py:1067 msgid "Gcode Viewer" msgstr "GCode Anzeige" -#: flatcamTools/ToolCalibration.py:983 +#: flatcamTools/ToolCalibration.py:997 msgid "Cancelled. Four points are needed for GCode generation." msgstr "Abgebrochen. Es werden vier Punkte zur GCode Erzeugung benötigt." -#: flatcamTools/ToolCalibration.py:1239 flatcamTools/ToolCalibration.py:1335 +#: flatcamTools/ToolCalibration.py:1253 flatcamTools/ToolCalibration.py:1349 msgid "There is no FlatCAM object selected..." msgstr "Es ist kein FlatCAM Objekt ausgewählt." -#: flatcamTools/ToolCopperThieving.py:76 flatcamTools/ToolFiducials.py:260 +#: flatcamTools/ToolCopperThieving.py:77 flatcamTools/ToolFiducials.py:261 msgid "Gerber Object to which will be added a copper thieving." msgstr "Dem Gerber Objekt wird ein Copper Thieving hinzugefügt." # Double -#: flatcamTools/ToolCopperThieving.py:98 +#: flatcamTools/ToolCopperThieving.py:99 msgid "" "This set the distance between the copper thieving components\n" "(the polygon fill may be split in multiple polygons)\n" @@ -13497,7 +14252,7 @@ msgstr "" "in mehrere aufgeteilt." # Double -#: flatcamTools/ToolCopperThieving.py:131 +#: flatcamTools/ToolCopperThieving.py:132 msgid "" "- 'Itself' - the copper thieving extent is based on the object extent.\n" "- 'Area Selection' - left mouse click to start selection of the area to be " @@ -13512,12 +14267,12 @@ msgstr "" "- 'Referenzobjekt' - 'Copper Thieving' innerhalb des von einem anderen " "Objekt angegebenen Bereichs." -#: flatcamTools/ToolCopperThieving.py:138 -#: flatcamTools/ToolNonCopperClear.py:445 flatcamTools/ToolPaint.py:326 +#: flatcamTools/ToolCopperThieving.py:139 flatcamTools/ToolNCC.py:552 +#: flatcamTools/ToolPaint.py:496 msgid "Ref. Type" msgstr "Ref. Typ" -#: flatcamTools/ToolCopperThieving.py:140 +#: flatcamTools/ToolCopperThieving.py:141 msgid "" "The type of FlatCAM object to be used as copper thieving reference.\n" "It can be Gerber, Excellon or Geometry." @@ -13526,40 +14281,25 @@ msgstr "" "soll.\n" "Es kann Gerber, Excellon oder Geometry sein." -#: flatcamTools/ToolCopperThieving.py:144 flatcamTools/ToolDblSided.py:215 -#: flatcamTools/ToolNonCopperClear.py:451 flatcamTools/ToolPaint.py:332 -msgid "Reference Gerber" -msgstr "Gerber Referenz" - -#: flatcamTools/ToolCopperThieving.py:145 flatcamTools/ToolDblSided.py:216 -#: flatcamTools/ToolNonCopperClear.py:452 flatcamTools/ToolPaint.py:333 -msgid "Reference Excellon" -msgstr "Excellon Referenz" - -#: flatcamTools/ToolCopperThieving.py:146 flatcamTools/ToolDblSided.py:217 -#: flatcamTools/ToolNonCopperClear.py:453 flatcamTools/ToolPaint.py:334 -msgid "Reference Geometry" -msgstr "Geometrie Referenz" - -#: flatcamTools/ToolCopperThieving.py:151 -#: flatcamTools/ToolNonCopperClear.py:456 flatcamTools/ToolPaint.py:337 +#: flatcamTools/ToolCopperThieving.py:150 flatcamTools/ToolNCC.py:562 +#: flatcamTools/ToolPaint.py:506 msgid "Ref. Object" msgstr "Ref. Objekt" -#: flatcamTools/ToolCopperThieving.py:153 -#: flatcamTools/ToolNonCopperClear.py:458 flatcamTools/ToolPaint.py:339 +#: flatcamTools/ToolCopperThieving.py:152 flatcamTools/ToolNCC.py:564 +#: flatcamTools/ToolPaint.py:508 msgid "The FlatCAM object to be used as non copper clearing reference." msgstr "" "Das FlatCAM-Objekt, das als Nicht-Kupfer-Clearing-Referenz verwendet werden " "soll." # Double -#: flatcamTools/ToolCopperThieving.py:326 +#: flatcamTools/ToolCopperThieving.py:328 msgid "Insert Copper thieving" msgstr "'Coper Thieving' einsetzen" # Double -#: flatcamTools/ToolCopperThieving.py:328 +#: flatcamTools/ToolCopperThieving.py:330 msgid "" "Will add a polygon (may be split in multiple parts)\n" "that will surround the actual Gerber traces at a certain distance." @@ -13568,12 +14308,12 @@ msgstr "" "das wird die eigentlichen Gerber-Spuren in einem gewissen Abstand umgeben." # Double -#: flatcamTools/ToolCopperThieving.py:387 +#: flatcamTools/ToolCopperThieving.py:389 msgid "Insert Robber Bar" msgstr "'Robber Bar' einsetzen" # Double -#: flatcamTools/ToolCopperThieving.py:389 +#: flatcamTools/ToolCopperThieving.py:391 msgid "" "Will add a polygon with a defined thickness\n" "that will surround the actual Gerber object\n" @@ -13585,11 +14325,11 @@ msgstr "" "in einem bestimmten Abstand.\n" "Erforderlich für die Lochmusterbeschichtung." -#: flatcamTools/ToolCopperThieving.py:413 +#: flatcamTools/ToolCopperThieving.py:415 msgid "Select Soldermask object" msgstr "Lötmaskenobjekt auswählen" -#: flatcamTools/ToolCopperThieving.py:415 +#: flatcamTools/ToolCopperThieving.py:417 msgid "" "Gerber Object with the soldermask.\n" "It will be used as a base for\n" @@ -13598,11 +14338,11 @@ msgstr "" "Das Gerber Objekt mit der Lötmaske\n" "Wird als Basis verwendet." -#: flatcamTools/ToolCopperThieving.py:443 +#: flatcamTools/ToolCopperThieving.py:446 msgid "Plated area" msgstr "Beschichtetes Areal" -#: flatcamTools/ToolCopperThieving.py:445 +#: flatcamTools/ToolCopperThieving.py:448 msgid "" "The area to be plated by pattern plating.\n" "Basically is made from the openings in the plating mask.\n" @@ -13619,19 +14359,19 @@ msgstr "" "etwas größer als die Pads sind, und dieses Areal aus der Lötmaske berechnet " "wird." -#: flatcamTools/ToolCopperThieving.py:456 +#: flatcamTools/ToolCopperThieving.py:459 msgid "mm" msgstr "mm" -#: flatcamTools/ToolCopperThieving.py:458 +#: flatcamTools/ToolCopperThieving.py:461 msgid "in" msgstr "in" -#: flatcamTools/ToolCopperThieving.py:465 +#: flatcamTools/ToolCopperThieving.py:468 msgid "Generate pattern plating mask" msgstr "Generieren der Beschichtungsmaske" -#: flatcamTools/ToolCopperThieving.py:467 +#: flatcamTools/ToolCopperThieving.py:470 msgid "" "Will add to the soldermask gerber geometry\n" "the geometries of the copper thieving and/or\n" @@ -13641,136 +14381,137 @@ msgstr "" "Robber Bar zu der Gerber Geometrie hinzufügen, sofern\n" "diese erzeugt worden sind." -#: flatcamTools/ToolCopperThieving.py:620 -#: flatcamTools/ToolCopperThieving.py:645 +#: flatcamTools/ToolCopperThieving.py:626 +#: flatcamTools/ToolCopperThieving.py:651 msgid "Lines Grid works only for 'itself' reference ..." msgstr "Schraffur geht nur bei \"Selbst\" Referenz ..." -#: flatcamTools/ToolCopperThieving.py:631 +#: flatcamTools/ToolCopperThieving.py:637 msgid "Solid fill selected." msgstr "Vollständige Füllung gewählt." -#: flatcamTools/ToolCopperThieving.py:636 +#: flatcamTools/ToolCopperThieving.py:642 msgid "Dots grid fill selected." msgstr "Punktmusterfüllung gewählt." -#: flatcamTools/ToolCopperThieving.py:641 +#: flatcamTools/ToolCopperThieving.py:647 msgid "Squares grid fill selected." msgstr "Quadratfüllung gewählt." -#: flatcamTools/ToolCopperThieving.py:662 -#: flatcamTools/ToolCopperThieving.py:744 -#: flatcamTools/ToolCopperThieving.py:1340 flatcamTools/ToolDblSided.py:564 -#: flatcamTools/ToolFiducials.py:464 flatcamTools/ToolFiducials.py:741 -#: flatcamTools/ToolOptimal.py:342 flatcamTools/ToolQRCode.py:424 +#: flatcamTools/ToolCopperThieving.py:668 +#: flatcamTools/ToolCopperThieving.py:750 +#: flatcamTools/ToolCopperThieving.py:1346 flatcamTools/ToolDblSided.py:658 +#: flatcamTools/ToolExtractDrills.py:436 flatcamTools/ToolFiducials.py:466 +#: flatcamTools/ToolFiducials.py:743 flatcamTools/ToolOptimal.py:343 +#: flatcamTools/ToolPunchGerber.py:512 flatcamTools/ToolQRCode.py:426 msgid "There is no Gerber object loaded ..." msgstr "Es ist kein Gerber-Objekt geladen ..." -#: flatcamTools/ToolCopperThieving.py:675 -#: flatcamTools/ToolCopperThieving.py:1268 +#: flatcamTools/ToolCopperThieving.py:681 +#: flatcamTools/ToolCopperThieving.py:1274 msgid "Append geometry" msgstr "Geometrie angehängt" -#: flatcamTools/ToolCopperThieving.py:719 -#: flatcamTools/ToolCopperThieving.py:1301 -#: flatcamTools/ToolCopperThieving.py:1454 +#: flatcamTools/ToolCopperThieving.py:725 +#: flatcamTools/ToolCopperThieving.py:1307 +#: flatcamTools/ToolCopperThieving.py:1460 msgid "Append source file" msgstr "Fügen Sie die Quelldatei an" # Don`t know what a Copper Thieving Tool would do hence hard to translate -#: flatcamTools/ToolCopperThieving.py:727 -#: flatcamTools/ToolCopperThieving.py:1309 +#: flatcamTools/ToolCopperThieving.py:733 +#: flatcamTools/ToolCopperThieving.py:1315 msgid "Copper Thieving Tool done." msgstr "'Copper Thieving' Werkzeug fertig." -#: flatcamTools/ToolCopperThieving.py:754 -#: flatcamTools/ToolCopperThieving.py:787 flatcamTools/ToolCutOut.py:468 -#: flatcamTools/ToolCutOut.py:642 flatcamTools/ToolNonCopperClear.py:1151 -#: flatcamTools/ToolNonCopperClear.py:1192 -#: flatcamTools/ToolNonCopperClear.py:1224 flatcamTools/ToolPaint.py:1074 -#: flatcamTools/ToolPanelize.py:401 flatcamTools/ToolPanelize.py:416 -#: flatcamTools/ToolSub.py:288 flatcamTools/ToolSub.py:301 -#: flatcamTools/ToolSub.py:492 flatcamTools/ToolSub.py:507 -#: tclCommands/TclCommandCopperClear.py:97 -#: tclCommands/TclCommandCopperClear.py:146 tclCommands/TclCommandPaint.py:97 +#: flatcamTools/ToolCopperThieving.py:760 +#: flatcamTools/ToolCopperThieving.py:793 flatcamTools/ToolCutOut.py:480 +#: flatcamTools/ToolCutOut.py:667 flatcamTools/ToolInvertGerber.py:208 +#: flatcamTools/ToolNCC.py:1594 flatcamTools/ToolNCC.py:1635 +#: flatcamTools/ToolNCC.py:1664 flatcamTools/ToolPaint.py:1469 +#: flatcamTools/ToolPanelize.py:413 flatcamTools/ToolPanelize.py:428 +#: flatcamTools/ToolSub.py:294 flatcamTools/ToolSub.py:307 +#: flatcamTools/ToolSub.py:498 flatcamTools/ToolSub.py:513 +#: tclCommands/TclCommandCopperClear.py:97 tclCommands/TclCommandPaint.py:99 msgid "Could not retrieve object" msgstr "Objekt konnte nicht abgerufen werden" -#: flatcamTools/ToolCopperThieving.py:764 -#: flatcamTools/ToolNonCopperClear.py:1205 +#: flatcamTools/ToolCopperThieving.py:770 flatcamTools/ToolNCC.py:1643 msgid "Click the start point of the area." msgstr "Klicken Sie auf den Startpunkt des Bereichs." -#: flatcamTools/ToolCopperThieving.py:815 +#: flatcamTools/ToolCopperThieving.py:821 msgid "Click the end point of the filling area." msgstr "Klicken Sie auf den Endpunkt des Ausfüllbereichs." -#: flatcamTools/ToolCopperThieving.py:821 -#: flatcamTools/ToolNonCopperClear.py:1261 flatcamTools/ToolPaint.py:1201 +#: flatcamTools/ToolCopperThieving.py:827 flatcamTools/ToolNCC.py:1705 +#: flatcamTools/ToolNCC.py:1757 flatcamTools/ToolPaint.py:1601 +#: flatcamTools/ToolPaint.py:1652 msgid "Zone added. Click to start adding next zone or right click to finish." msgstr "" "Zone hinzugefügt. Klicken Sie, um die nächste Zone hinzuzufügen, oder " "klicken Sie mit der rechten Maustaste, um den Vorgang abzuschließen." -#: flatcamTools/ToolCopperThieving.py:937 -#: flatcamTools/ToolCopperThieving.py:941 -#: flatcamTools/ToolCopperThieving.py:1002 +#: flatcamTools/ToolCopperThieving.py:943 +#: flatcamTools/ToolCopperThieving.py:947 +#: flatcamTools/ToolCopperThieving.py:1008 msgid "Thieving" msgstr "Diebstahl" -#: flatcamTools/ToolCopperThieving.py:948 +#: flatcamTools/ToolCopperThieving.py:954 msgid "Copper Thieving Tool started. Reading parameters." msgstr "Copper Thieving Tool gestartet. Parameter lesen." -#: flatcamTools/ToolCopperThieving.py:973 +#: flatcamTools/ToolCopperThieving.py:979 msgid "Copper Thieving Tool. Preparing isolation polygons." msgstr "Copper Thieving-Tool. Vorbereitung von isolierenden Polygonen." -#: flatcamTools/ToolCopperThieving.py:1018 +#: flatcamTools/ToolCopperThieving.py:1024 msgid "Copper Thieving Tool. Preparing areas to fill with copper." msgstr "Copper Thieving Tool: Areale zur Kupferfüllung vorbereiten." -#: flatcamTools/ToolCopperThieving.py:1029 flatcamTools/ToolOptimal.py:349 -#: flatcamTools/ToolPanelize.py:793 flatcamTools/ToolRulesCheck.py:1118 +#: flatcamTools/ToolCopperThieving.py:1035 flatcamTools/ToolOptimal.py:350 +#: flatcamTools/ToolPanelize.py:802 flatcamTools/ToolRulesCheck.py:1127 msgid "Working..." msgstr "Arbeiten..." -#: flatcamTools/ToolCopperThieving.py:1056 +#: flatcamTools/ToolCopperThieving.py:1062 msgid "Geometry not supported for bounding box" msgstr "Geometrie für Umriss nicht unterstützt" -#: flatcamTools/ToolCopperThieving.py:1062 -#: flatcamTools/ToolNonCopperClear.py:1513 flatcamTools/ToolPaint.py:2673 +#: flatcamTools/ToolCopperThieving.py:1068 flatcamTools/ToolNCC.py:1928 +#: flatcamTools/ToolNCC.py:1983 flatcamTools/ToolNCC.py:2987 +#: flatcamTools/ToolPaint.py:3375 msgid "No object available." msgstr "Kein Objekt vorhanden." -#: flatcamTools/ToolCopperThieving.py:1099 -#: flatcamTools/ToolNonCopperClear.py:1555 +#: flatcamTools/ToolCopperThieving.py:1105 flatcamTools/ToolNCC.py:1953 +#: flatcamTools/ToolNCC.py:2006 flatcamTools/ToolNCC.py:3029 msgid "The reference object type is not supported." msgstr "Der Referenzobjekttyp wird nicht unterstützt." -#: flatcamTools/ToolCopperThieving.py:1104 +#: flatcamTools/ToolCopperThieving.py:1110 msgid "Copper Thieving Tool. Appending new geometry and buffering." msgstr "Copper Thieving Tool. Füge neue Geometrie an und puffere sie." -#: flatcamTools/ToolCopperThieving.py:1120 +#: flatcamTools/ToolCopperThieving.py:1126 msgid "Create geometry" msgstr "Geometrie erstellen" -#: flatcamTools/ToolCopperThieving.py:1320 -#: flatcamTools/ToolCopperThieving.py:1324 +#: flatcamTools/ToolCopperThieving.py:1326 +#: flatcamTools/ToolCopperThieving.py:1330 msgid "P-Plating Mask" msgstr "P-Beschichtungsmaske" -#: flatcamTools/ToolCopperThieving.py:1346 +#: flatcamTools/ToolCopperThieving.py:1352 msgid "Append PP-M geometry" msgstr "PPM Geometrie hinzufügen" -#: flatcamTools/ToolCopperThieving.py:1472 +#: flatcamTools/ToolCopperThieving.py:1478 msgid "Generating Pattern Plating Mask done." msgstr "Erzeugen der PPM abgeschlossen." -#: flatcamTools/ToolCopperThieving.py:1544 +#: flatcamTools/ToolCopperThieving.py:1550 msgid "Copper Thieving Tool exit." msgstr "Copper Thieving Tool verlassen." @@ -13778,7 +14519,19 @@ msgstr "Copper Thieving Tool verlassen." msgid "Cutout PCB" msgstr "Ausschnitt PCB" -#: flatcamTools/ToolCutOut.py:82 +#: flatcamTools/ToolCutOut.py:70 flatcamTools/ToolPanelize.py:54 +msgid "Source Object" +msgstr "Quellobjekt" + +#: flatcamTools/ToolCutOut.py:71 +msgid "Object to be cutout" +msgstr "Auszuschneidendes Objekt" + +#: flatcamTools/ToolCutOut.py:76 +msgid "Kind" +msgstr "Typ" + +#: flatcamTools/ToolCutOut.py:98 msgid "" "Specify the type of object to be cutout.\n" "It can be of type: Gerber or Geometry.\n" @@ -13790,19 +14543,19 @@ msgstr "" "Was hier ausgewählt wird, bestimmt die Art\n" "von Objekten, die die Combobox 'Object' füllen." -#: flatcamTools/ToolCutOut.py:91 flatcamTools/ToolCutOut.py:92 -msgid "Object to be cutout" -msgstr "Auszuschneidendes Objekt" +#: flatcamTools/ToolCutOut.py:122 +msgid "Tool Parameters" +msgstr "Werkzeugparameter" -#: flatcamTools/ToolCutOut.py:230 +#: flatcamTools/ToolCutOut.py:239 msgid "A. Automatic Bridge Gaps" msgstr "A. Automatische Brückenlücken" -#: flatcamTools/ToolCutOut.py:232 +#: flatcamTools/ToolCutOut.py:241 msgid "This section handle creation of automatic bridge gaps." msgstr "Dieser Abschnitt behandelt die Erstellung automatischer Brückenlücken." -#: flatcamTools/ToolCutOut.py:243 +#: flatcamTools/ToolCutOut.py:252 msgid "" "Number of gaps used for the Automatic cutout.\n" "There can be maximum 8 bridges/gaps.\n" @@ -13826,11 +14579,11 @@ msgstr "" "- 2 tb \t- 2 * oben + 2 * unten\n" "- 8 \t- 2 * links + 2 * rechts + 2 * oben + 2 * unten" -#: flatcamTools/ToolCutOut.py:264 +#: flatcamTools/ToolCutOut.py:273 msgid "Generate Freeform Geometry" msgstr "Freiform Geometrie erzeugen" -#: flatcamTools/ToolCutOut.py:266 +#: flatcamTools/ToolCutOut.py:275 msgid "" "Cutout the selected object.\n" "The cutout shape can be of any shape.\n" @@ -13840,11 +14593,11 @@ msgstr "" "Die Ausschnittform kann eine beliebige Form haben.\n" "Nützlich, wenn die Leiterplatte eine nicht rechteckige Form hat." -#: flatcamTools/ToolCutOut.py:278 +#: flatcamTools/ToolCutOut.py:287 msgid "Generate Rectangular Geometry" msgstr "Rechteck Geometrie erzeugen" -#: flatcamTools/ToolCutOut.py:280 +#: flatcamTools/ToolCutOut.py:289 msgid "" "Cutout the selected object.\n" "The resulting cutout shape is\n" @@ -13856,11 +14609,11 @@ msgstr "" "immer eine rechteckige Form und es wird sein\n" "der Begrenzungsrahmen des Objekts." -#: flatcamTools/ToolCutOut.py:299 +#: flatcamTools/ToolCutOut.py:308 msgid "B. Manual Bridge Gaps" msgstr "B. Manuelle Brückenlücken" -#: flatcamTools/ToolCutOut.py:301 +#: flatcamTools/ToolCutOut.py:310 msgid "" "This section handle creation of manual bridge gaps.\n" "This is done by mouse clicking on the perimeter of the\n" @@ -13870,15 +14623,15 @@ msgstr "" "Dies geschieht durch einen Mausklick auf den Umfang des\n" "Geometrieobjekt, das als Ausschnittobjekt verwendet wird. " -#: flatcamTools/ToolCutOut.py:319 +#: flatcamTools/ToolCutOut.py:329 msgid "Geometry object used to create the manual cutout." msgstr "Geometrieobjekt zum Erstellen des manuellen Ausschnitts." -#: flatcamTools/ToolCutOut.py:328 +#: flatcamTools/ToolCutOut.py:338 msgid "Generate Manual Geometry" msgstr "Manuelle Geometrie erzeugen" -#: flatcamTools/ToolCutOut.py:330 +#: flatcamTools/ToolCutOut.py:340 msgid "" "If the object to be cutout is a Gerber\n" "first create a Geometry that surrounds it,\n" @@ -13890,11 +14643,11 @@ msgstr "" "als Ausschnitt verwendet werden, falls noch nicht vorhanden.\n" "Wählen Sie in der oberen Objekt-Combobox die Quell-Gerber-Datei aus." -#: flatcamTools/ToolCutOut.py:343 +#: flatcamTools/ToolCutOut.py:353 msgid "Manual Add Bridge Gaps" msgstr "Manuelles Hinzufügen von Brückenlücken" -#: flatcamTools/ToolCutOut.py:345 +#: flatcamTools/ToolCutOut.py:355 msgid "" "Use the left mouse button (LMB) click\n" "to create a bridge gap to separate the PCB from\n" @@ -13908,7 +14661,7 @@ msgstr "" "Der LMB-Klick muss am Umfang von erfolgen\n" "das Geometrieobjekt, das als Ausschnittsgeometrie verwendet wird." -#: flatcamTools/ToolCutOut.py:473 +#: flatcamTools/ToolCutOut.py:485 msgid "" "There is no object selected for Cutout.\n" "Select one and try again." @@ -13916,19 +14669,20 @@ msgstr "" "Es ist kein Objekt für den Ausschnitt ausgewählt.\n" "Wählen Sie eine aus und versuchen Sie es erneut." -#: flatcamTools/ToolCutOut.py:479 flatcamTools/ToolCutOut.py:651 -#: flatcamTools/ToolCutOut.py:795 flatcamTools/ToolCutOut.py:877 +#: flatcamTools/ToolCutOut.py:491 flatcamTools/ToolCutOut.py:676 +#: flatcamTools/ToolCutOut.py:839 flatcamTools/ToolCutOut.py:921 +#: tclCommands/TclCommandGeoCutout.py:185 msgid "Tool Diameter is zero value. Change it to a positive real number." msgstr "" "Werkzeugdurchmesser ist Nullwert. Ändern Sie es in eine positive reelle Zahl." -#: flatcamTools/ToolCutOut.py:493 flatcamTools/ToolCutOut.py:666 +#: flatcamTools/ToolCutOut.py:505 flatcamTools/ToolCutOut.py:691 msgid "Number of gaps value is missing. Add it and retry." msgstr "" "Der Wert für die Anzahl der Lücken fehlt. Fügen Sie es hinzu und versuchen " "Sie es erneut." -#: flatcamTools/ToolCutOut.py:498 flatcamTools/ToolCutOut.py:670 +#: flatcamTools/ToolCutOut.py:510 flatcamTools/ToolCutOut.py:695 msgid "" "Gaps value can be only one of: 'None', 'lr', 'tb', '2lr', '2tb', 4 or 8. " "Fill in a correct value and retry. " @@ -13937,7 +14691,7 @@ msgstr "" "\"tb\", \"2lr\", \"2tb\", 4 oder 8. Geben Sie einen korrekten Wert ein und " "wiederholen Sie den Vorgang. " -#: flatcamTools/ToolCutOut.py:503 flatcamTools/ToolCutOut.py:676 +#: flatcamTools/ToolCutOut.py:515 flatcamTools/ToolCutOut.py:701 msgid "" "Cutout operation cannot be done on a multi-geo Geometry.\n" "Optionally, this Multi-geo Geometry can be converted to Single-geo " @@ -13949,40 +14703,45 @@ msgstr "" "werden.\n" "und danach Cutout durchführen." -#: flatcamTools/ToolCutOut.py:625 flatcamTools/ToolCutOut.py:784 +#: flatcamTools/ToolCutOut.py:650 flatcamTools/ToolCutOut.py:828 msgid "Any form CutOut operation finished." msgstr "Jede Form CutOut-Operation ist abgeschlossen." -#: flatcamTools/ToolCutOut.py:646 flatcamTools/ToolNonCopperClear.py:1155 -#: flatcamTools/ToolPaint.py:994 flatcamTools/ToolPanelize.py:406 -#: tclCommands/TclCommandBbox.py:70 tclCommands/TclCommandNregions.py:70 +#: flatcamTools/ToolCutOut.py:671 flatcamTools/ToolInvertGerber.py:214 +#: flatcamTools/ToolNCC.py:1598 flatcamTools/ToolPaint.py:1392 +#: flatcamTools/ToolPanelize.py:418 tclCommands/TclCommandBbox.py:72 +#: tclCommands/TclCommandNregions.py:72 msgid "Object not found" msgstr "Objekt nicht gefunden" -#: flatcamTools/ToolCutOut.py:789 +#: flatcamTools/ToolCutOut.py:814 +msgid "Rectangular cutout with negative margin is not possible." +msgstr "Ein rechteckiger Ausschnitt mit negativem Rand ist nicht möglich." + +#: flatcamTools/ToolCutOut.py:833 msgid "" "Click on the selected geometry object perimeter to create a bridge gap ..." msgstr "" "Klicken Sie auf den ausgewählten Umfang des Geometrieobjekts, um eine " "Brückenlücke zu erstellen ..." -#: flatcamTools/ToolCutOut.py:806 flatcamTools/ToolCutOut.py:832 +#: flatcamTools/ToolCutOut.py:850 flatcamTools/ToolCutOut.py:876 msgid "Could not retrieve Geometry object" msgstr "Geometrieobjekt konnte nicht abgerufen werden" -#: flatcamTools/ToolCutOut.py:837 +#: flatcamTools/ToolCutOut.py:881 msgid "Geometry object for manual cutout not found" msgstr "Geometrieobjekt für manuellen Ausschnitt nicht gefunden" -#: flatcamTools/ToolCutOut.py:847 +#: flatcamTools/ToolCutOut.py:891 msgid "Added manual Bridge Gap." msgstr "Manuelle Brückenlücke hinzugefügt." -#: flatcamTools/ToolCutOut.py:859 +#: flatcamTools/ToolCutOut.py:903 msgid "Could not retrieve Gerber object" msgstr "Gerber-Objekt konnte nicht abgerufen werden" -#: flatcamTools/ToolCutOut.py:864 +#: flatcamTools/ToolCutOut.py:908 msgid "" "There is no Gerber object selected for Cutout.\n" "Select one and try again." @@ -13990,7 +14749,7 @@ msgstr "" "Es ist kein Gerber-Objekt für den Ausschnitt ausgewählt.\n" "Wählen Sie eine aus und versuchen Sie es erneut." -#: flatcamTools/ToolCutOut.py:870 +#: flatcamTools/ToolCutOut.py:914 msgid "" "The selected object has to be of Gerber type.\n" "Select a Gerber file and try again." @@ -13998,11 +14757,11 @@ msgstr "" "Das ausgewählte Objekt muss vom Typ Gerber sein.\n" "Wählen Sie eine Gerber-Datei aus und versuchen Sie es erneut." -#: flatcamTools/ToolCutOut.py:905 +#: flatcamTools/ToolCutOut.py:949 msgid "Geometry not supported for cutout" msgstr "Geometrie für Ausschnitt nicht unterstützt" -#: flatcamTools/ToolCutOut.py:960 +#: flatcamTools/ToolCutOut.py:1007 msgid "Making manual bridge gap..." msgstr "Manuelle Brückenlücke herstellen ..." @@ -14010,12 +14769,20 @@ msgstr "Manuelle Brückenlücke herstellen ..." msgid "2-Sided PCB" msgstr "2-seitige PCB" -#: flatcamTools/ToolDblSided.py:60 +#: flatcamTools/ToolDblSided.py:53 +msgid "Mirror Operation" +msgstr "Spiegelbetrieb" + +#: flatcamTools/ToolDblSided.py:54 +msgid "Objects to be mirrored" +msgstr "Zu spiegelnde Objekte" + +#: flatcamTools/ToolDblSided.py:66 msgid "Gerber to be mirrored" msgstr "Zu spiegelndes Gerber" -#: flatcamTools/ToolDblSided.py:64 flatcamTools/ToolDblSided.py:92 -#: flatcamTools/ToolDblSided.py:122 +#: flatcamTools/ToolDblSided.py:70 flatcamTools/ToolDblSided.py:98 +#: flatcamTools/ToolDblSided.py:128 msgid "" "Mirrors (flips) the specified object around \n" "the specified axis. Does not create a new \n" @@ -14025,143 +14792,118 @@ msgstr "" "die angegebene Achse. Erstellt kein neues\n" "Objekt, ändert es aber." -#: flatcamTools/ToolDblSided.py:88 +#: flatcamTools/ToolDblSided.py:94 msgid "Excellon Object to be mirrored." msgstr "Zu spiegelndes Excellon-Objekt." -#: flatcamTools/ToolDblSided.py:117 +#: flatcamTools/ToolDblSided.py:123 msgid "Geometry Obj to be mirrored." msgstr "Geometrie-Objekt, das gespiegelt werden soll." -#: flatcamTools/ToolDblSided.py:179 -msgid "Point/Box Reference" -msgstr "Punkt / Box-Referenz" +#: flatcamTools/ToolDblSided.py:159 +msgid "Mirror Parameters" +msgstr "Spiegelparameter" -#: flatcamTools/ToolDblSided.py:181 +#: flatcamTools/ToolDblSided.py:160 +msgid "Parameters for the mirror operation" +msgstr "Parameter für die Spiegeloperation" + +#: flatcamTools/ToolDblSided.py:165 +msgid "Mirror Axis" +msgstr "Spiegelachse" + +#: flatcamTools/ToolDblSided.py:176 msgid "" -"If 'Point' is selected above it store the coordinates (x, y) through which\n" -"the mirroring axis passes.\n" -"If 'Box' is selected above, select here a FlatCAM object (Gerber, Exc or " -"Geo).\n" -"Through the center of this object pass the mirroring axis selected above." +"The coordinates used as reference for the mirror operation.\n" +"Can be:\n" +"- Point -> a set of coordinates (x,y) around which the object is mirrored\n" +"- Box -> a set of coordinates (x, y) obtained from the center of the\n" +"bounding box of another object selected below" msgstr "" -"Wenn oben \"Punkt\" ausgewählt ist, werden die Koordinaten (x, y) " -"gespeichert, durch die\n" -"die Spiegelachse vergeht.\n" -"Wenn oben 'Box' ausgewählt ist, wählen Sie hier ein FlatCAM-Objekt (Gerber, " -"Exc oder Geo) aus.\n" -"Durch die Mitte dieses Objekts fahren Sie die oben ausgewählte Spiegelachse." +"Die Koordinaten, die als Referenz für die Spiegeloperation verwendet " +"werden.\n" +"Kann sein:\n" +"- Punkt -> eine Reihe von Koordinaten (x, y), um die das Objekt gespiegelt " +"wird\n" +"- Box -> ein Satz von Koordinaten (x, y), die aus der Mitte des erhalten " +"werden\n" +"Begrenzungsrahmen eines anderen unten ausgewählten Objekts" -#: flatcamTools/ToolDblSided.py:189 +#: flatcamTools/ToolDblSided.py:190 +msgid "Point coordinates" +msgstr "Punktkoordinaten" + +#: flatcamTools/ToolDblSided.py:195 msgid "" "Add the coordinates in format (x, y) through which the mirroring " "axis \n" " selected in 'MIRROR AXIS' pass.\n" "The (x, y) coordinates are captured by pressing SHIFT key\n" -"and left mouse button click on canvas or you can enter the coords manually." +"and left mouse button click on canvas or you can enter the coordinates " +"manually." msgstr "" -"Fügen Sie die Koordinaten im Format (x, y) hinzu, durch das die " -"Spiegelachse verläuft\n" -"ausgewählt in 'SPIEGEL-ACHSE'.\n" -"Die (x, y) -Koordinaten werden durch Drücken der UMSCHALTTASTE erfasst\n" -"Klicken Sie mit der linken Maustaste auf die Leinwand oder geben Sie die " -"Koordinaten manuell ein." +"Fügen Sie die Koordinaten im Format (x, y) hinzu, durch die die " +"Spiegelungsachse verläuft\n" +"ausgewählt im Pass 'Spiegelachse'.\n" +"Die (x, y) -Koordinaten werden durch Drücken der SHIFT erfasst\n" +"und klicken Sie mit der linken Maustaste auf die Leinwand oder Sie können " +"die Koordinaten manuell eingeben." -#: flatcamTools/ToolDblSided.py:230 -msgid "Alignment Drill Coordinates" -msgstr "Ausrichtungsbohrkoordinaten" - -#: flatcamTools/ToolDblSided.py:232 +#: flatcamTools/ToolDblSided.py:219 msgid "" -"Alignment holes (x1, y1), (x2, y2), ... on one side of the mirror axis. For " -"each set of (x, y) coordinates\n" -"entered here, a pair of drills will be created:\n" -"\n" -"- one drill at the coordinates from the field\n" -"- one drill in mirror position over the axis selected above in the 'Mirror " -"Axis'." +"It can be of type: Gerber or Excellon or Geometry.\n" +"The coordinates of the center of the bounding box are used\n" +"as reference for mirror operation." msgstr "" -"Ausrichtungslöcher (x1, y1), (x2, y2), ... auf einer Seite der Spiegelachse. " -"Für jeden Satz von (x, y) -Koordinaten\n" -"Hier eingegeben, wird ein Paar Bohrer erstellt:\n" -"\n" -"- ein Bohrer an den Koordinaten vom Feld\n" -"- ein Bohrer in Spiegelposition über der oben in der 'Spiegelachse' " -"ausgewählten Achse." +"Es kann vom Typ sein: Gerber oder Excellon oder Geometrie.\n" +"Die Koordinaten der Mitte des Begrenzungsrahmens werden verwendet\n" +"als Referenz für den Spiegelbetrieb." -#: flatcamTools/ToolDblSided.py:247 +#: flatcamTools/ToolDblSided.py:253 +msgid "Bounds Values" +msgstr "Grenzen Werte" + +#: flatcamTools/ToolDblSided.py:255 msgid "" -"Add alignment drill holes coords in the format: (x1, y1), (x2, y2), ... \n" -"on one side of the mirror axis.\n" -"\n" -"The coordinates set can be obtained:\n" -"- press SHIFT key and left mouse clicking on canvas. Then click Add.\n" -"- press SHIFT key and left mouse clicking on canvas. Then Ctrl+V in the " -"field.\n" -"- press SHIFT key and left mouse clicking on canvas. Then RMB click in the " -"field and click Paste.\n" -"- by entering the coords manually in the format: (x1, y1), (x2, y2), ..." +"Select on canvas the object(s)\n" +"for which to calculate bounds values." msgstr "" -"Fügen Sie Ausrichtungsbohrungskoordinaten im Format hinzu: (x1, y1), (x2, " -"y2), ...\n" -"auf einer Seite der Spiegelachse.\n" -"\n" -"Die gesetzten Koordinaten können erhalten werden:\n" -"- Drücken Sie die SHIFT-Taste und klicken Sie mit der linken Maustaste auf " -"die Leinwand. Klicken Sie dann auf Hinzufügen.\n" -"- Drücken Sie die SHIFT-Taste und klicken Sie mit der linken Maustaste auf " -"die Leinwand. Dann STRG + V im Feld.\n" -"- Drücken Sie die SHIFT-Taste und klicken Sie mit der linken Maustaste auf " -"die Leinwand. Klicken Sie dann auf RMB, und klicken Sie auf Einfügen.\n" -"- durch manuelle Eingabe der Koordinaten im Format: (x1, y1), (x2, y2), ..." +"Wählen Sie auf der Leinwand die Objekte aus.\n" +"für die Grenzwerte berechnet werden sollen." -#: flatcamTools/ToolDblSided.py:272 -msgid "Alignment Drill Diameter" -msgstr "Durchmesser des Ausrichtungsbohrers" - -#: flatcamTools/ToolDblSided.py:292 -msgid "Create Excellon Object" -msgstr "Excellon-Objekt erstellen" - -#: flatcamTools/ToolDblSided.py:294 -msgid "" -"Creates an Excellon Object containing the\n" -"specified alignment holes and their mirror\n" -"images." -msgstr "" -"Erstellt ein Excellon-Objekt, das das enthält\n" -"spezifizierte Ausrichtungslöcher und deren Spiegel\n" -"Bilder." - -#: flatcamTools/ToolDblSided.py:323 +#: flatcamTools/ToolDblSided.py:265 msgid "X min" msgstr "X min" -#: flatcamTools/ToolDblSided.py:325 flatcamTools/ToolDblSided.py:339 +#: flatcamTools/ToolDblSided.py:267 flatcamTools/ToolDblSided.py:281 msgid "Minimum location." msgstr "Mindeststandort." -#: flatcamTools/ToolDblSided.py:337 +#: flatcamTools/ToolDblSided.py:279 msgid "Y min" msgstr "Y min" -#: flatcamTools/ToolDblSided.py:351 +#: flatcamTools/ToolDblSided.py:293 msgid "X max" msgstr "X max" -#: flatcamTools/ToolDblSided.py:353 flatcamTools/ToolDblSided.py:367 +#: flatcamTools/ToolDblSided.py:295 flatcamTools/ToolDblSided.py:309 msgid "Maximum location." msgstr "Maximaler Standort." -#: flatcamTools/ToolDblSided.py:365 +#: flatcamTools/ToolDblSided.py:307 msgid "Y max" msgstr "Y max" -#: flatcamTools/ToolDblSided.py:377 +#: flatcamTools/ToolDblSided.py:318 +msgid "Center point coordinates" +msgstr "Mittelpunktskoordinaten" + +#: flatcamTools/ToolDblSided.py:320 msgid "Centroid" msgstr "Schwerpunkt" -#: flatcamTools/ToolDblSided.py:379 +#: flatcamTools/ToolDblSided.py:322 msgid "" "The center point location for the rectangular\n" "bounding shape. Centroid. Format is (x, y)." @@ -14169,11 +14911,11 @@ msgstr "" "Die Mittelpunktposition für das Rechteck\n" "begrenzende Form. Centroid. Das Format ist (x, y)." -#: flatcamTools/ToolDblSided.py:388 +#: flatcamTools/ToolDblSided.py:331 msgid "Calculate Bounds Values" msgstr "Berechnen Sie Grenzwerte" -#: flatcamTools/ToolDblSided.py:390 +#: flatcamTools/ToolDblSided.py:333 msgid "" "Calculate the enveloping rectangular shape coordinates,\n" "for the selection of objects.\n" @@ -14183,11 +14925,105 @@ msgstr "" "zur Auswahl von Objekten.\n" "Die Hüllkurvenform verläuft parallel zur X- und Y-Achse." -#: flatcamTools/ToolDblSided.py:462 +#: flatcamTools/ToolDblSided.py:353 +msgid "PCB Alignment" +msgstr "PCB-Ausrichtung" + +#: flatcamTools/ToolDblSided.py:355 flatcamTools/ToolDblSided.py:457 +msgid "" +"Creates an Excellon Object containing the\n" +"specified alignment holes and their mirror\n" +"images." +msgstr "" +"Erstellt ein Excellon-Objekt, das das enthält\n" +"spezifizierte Ausrichtungslöcher und deren Spiegel\n" +"Bilder." + +#: flatcamTools/ToolDblSided.py:362 +msgid "Drill Diameter" +msgstr "Bohrdurchmesser" + +#: flatcamTools/ToolDblSided.py:391 flatcamTools/ToolDblSided.py:398 +msgid "" +"The reference point used to create the second alignment drill\n" +"from the first alignment drill, by doing mirror.\n" +"It can be modified in the Mirror Parameters -> Reference section" +msgstr "" +"Der Referenzpunkt, der zum Erstellen des zweiten Ausrichtungsbohrers " +"verwendet wird\n" +"vom ersten Ausrichtungsbohrer durch Spiegeln.\n" +"Sie kann im Abschnitt Spiegelparameter -> Referenz geändert werden" + +#: flatcamTools/ToolDblSided.py:411 +msgid "Alignment Drill Coordinates" +msgstr "Ausrichtungsbohrkoordinaten" + +#: flatcamTools/ToolDblSided.py:413 +msgid "" +"Alignment holes (x1, y1), (x2, y2), ... on one side of the mirror axis. For " +"each set of (x, y) coordinates\n" +"entered here, a pair of drills will be created:\n" +"\n" +"- one drill at the coordinates from the field\n" +"- one drill in mirror position over the axis selected above in the 'Align " +"Axis'." +msgstr "" +"Ausrichtungslöcher (x1, y1), (x2, y2), ... auf einer Seite der Spiegelachse. " +"Für jeden Satz von (x, y) Koordinaten\n" +"Hier wird ein Paar Bohrer erstellt:\n" +"\n" +"- Ein Bohrer an den Koordinaten vom Feld\n" +"- Ein Bohrer in Spiegelposition über der oben in 'Achse ausrichten' " +"ausgewählten Achse." + +#: flatcamTools/ToolDblSided.py:421 +msgid "Drill coordinates" +msgstr "Bohrkoordinaten" + +#: flatcamTools/ToolDblSided.py:428 +msgid "" +"Add alignment drill holes coordinates in the format: (x1, y1), (x2, " +"y2), ... \n" +"on one side of the alignment axis.\n" +"\n" +"The coordinates set can be obtained:\n" +"- press SHIFT key and left mouse clicking on canvas. Then click Add.\n" +"- press SHIFT key and left mouse clicking on canvas. Then Ctrl+V in the " +"field.\n" +"- press SHIFT key and left mouse clicking on canvas. Then RMB click in the " +"field and click Paste.\n" +"- by entering the coords manually in the format: (x1, y1), (x2, y2), ..." +msgstr "" +"Fügen Sie Koordinaten für Ausrichtungsbohrungen im folgenden Format hinzu: " +"(x1, y1), (x2, y2), ...\n" +"auf einer Seite der Ausrichtungsachse.\n" +"\n" +"Die eingestellten Koordinaten erhalten Sie:\n" +"- Drücken Sie die SHIFT-taste und klicken Sie mit der linken Maustaste auf " +"die Leinwand. Klicken Sie dann auf Hinzufügen.\n" +"- Drücken Sie die SHIFT-tasteund klicken Sie mit der linken Maustaste auf " +"die Leinwand. Dann Strg + V im Feld.\n" +"- Drücken Sie die SHIFT-tasteund klicken Sie mit der linken Maustaste auf " +"die Leinwand. Klicken Sie dann in das Feld und dann auf Einfügen.\n" +"- durch manuelle Eingabe der Koordinaten im Format: (x1, y1), (x2, y2), ..." + +#: flatcamTools/ToolDblSided.py:443 +msgid "Delete Last" +msgstr "Letzte löschen" + +#: flatcamTools/ToolDblSided.py:445 +msgid "Delete the last coordinates tuple in the list." +msgstr "Delete the last coordinates tuple in the list." + +#: flatcamTools/ToolDblSided.py:455 +msgid "Create Excellon Object" +msgstr "Excellon-Objekt erstellen" + +#: flatcamTools/ToolDblSided.py:542 msgid "2-Sided Tool" msgstr "2-seitiges Werkzeug" -#: flatcamTools/ToolDblSided.py:493 +#: flatcamTools/ToolDblSided.py:582 msgid "" "'Point' reference is selected and 'Point' coordinates are missing. Add them " "and retry." @@ -14195,54 +15031,34 @@ msgstr "" "'Point'-Referenz ist ausgewählt und' Point'-Koordinaten fehlen. Fügen Sie " "sie hinzu und versuchen Sie es erneut." -#: flatcamTools/ToolDblSided.py:512 +#: flatcamTools/ToolDblSided.py:601 msgid "There is no Box reference object loaded. Load one and retry." msgstr "" "Es ist kein Box-Referenzobjekt geladen. Laden Sie einen und versuchen Sie es " "erneut." -#: flatcamTools/ToolDblSided.py:524 +#: flatcamTools/ToolDblSided.py:613 msgid "No value or wrong format in Drill Dia entry. Add it and retry." msgstr "" "Kein Wert oder falsches Format im Eintrag Bohrdurchmesser. Fügen Sie es " "hinzu und versuchen Sie es erneut." -#: flatcamTools/ToolDblSided.py:532 +#: flatcamTools/ToolDblSided.py:624 msgid "There are no Alignment Drill Coordinates to use. Add them and retry." msgstr "" "Es sind keine Ausrichtungsbohrkoordinaten vorhanden. Fügen Sie sie hinzu und " "versuchen Sie es erneut." -#: flatcamTools/ToolDblSided.py:555 +#: flatcamTools/ToolDblSided.py:649 msgid "Excellon object with alignment drills created..." msgstr "Excellon-Objekt mit Ausrichtungsbohrern erstellt ..." -#: flatcamTools/ToolDblSided.py:568 flatcamTools/ToolDblSided.py:611 -#: flatcamTools/ToolDblSided.py:655 +#: flatcamTools/ToolDblSided.py:662 flatcamTools/ToolDblSided.py:705 +#: flatcamTools/ToolDblSided.py:749 msgid "Only Gerber, Excellon and Geometry objects can be mirrored." msgstr "Nur Gerber-, Excellon- und Geometrie-Objekte können gespiegelt werden." -#: flatcamTools/ToolDblSided.py:578 -msgid "" -"'Point' coordinates missing. Using Origin (0, 0) as mirroring reference." -msgstr "" -"'Point'-Koordinaten fehlen. Verwenden von Origin (0, 0) als Spiegelreferenz." - -#: flatcamTools/ToolDblSided.py:588 flatcamTools/ToolDblSided.py:632 -#: flatcamTools/ToolDblSided.py:669 -msgid "There is no Box object loaded ..." -msgstr "Es ist kein Box-Objekt geladen ..." - -#: flatcamTools/ToolDblSided.py:598 flatcamTools/ToolDblSided.py:642 -#: flatcamTools/ToolDblSided.py:679 -msgid "was mirrored" -msgstr "wurde gespiegelt" - -#: flatcamTools/ToolDblSided.py:607 -msgid "There is no Excellon object loaded ..." -msgstr "Es ist kein Excellon-Objekt geladen ..." - -#: flatcamTools/ToolDblSided.py:622 +#: flatcamTools/ToolDblSided.py:672 flatcamTools/ToolDblSided.py:716 msgid "" "There are no Point coordinates in the Point field. Add coords and try " "again ..." @@ -14250,98 +15066,137 @@ msgstr "" "Das Punktfeld enthält keine Punktkoordinaten. Fügen Sie Coords hinzu und " "versuchen Sie es erneut ..." -#: flatcamTools/ToolDblSided.py:651 +#: flatcamTools/ToolDblSided.py:682 flatcamTools/ToolDblSided.py:726 +#: flatcamTools/ToolDblSided.py:763 +msgid "There is no Box object loaded ..." +msgstr "Es ist kein Box-Objekt geladen ..." + +#: flatcamTools/ToolDblSided.py:692 flatcamTools/ToolDblSided.py:736 +#: flatcamTools/ToolDblSided.py:773 +msgid "was mirrored" +msgstr "wurde gespiegelt" + +#: flatcamTools/ToolDblSided.py:701 flatcamTools/ToolPunchGerber.py:533 +msgid "There is no Excellon object loaded ..." +msgstr "Es ist kein Excellon-Objekt geladen ..." + +#: flatcamTools/ToolDblSided.py:745 msgid "There is no Geometry object loaded ..." msgstr "Es wurde kein Geometrieobjekt geladen ..." -#: flatcamTools/ToolDistance.py:50 flatcamTools/ToolDistanceMin.py:50 +#: flatcamTools/ToolDistance.py:57 flatcamTools/ToolDistanceMin.py:51 msgid "Those are the units in which the distance is measured." msgstr "Dies sind die Einheiten, in denen die Entfernung gemessen wird." -#: flatcamTools/ToolDistance.py:51 flatcamTools/ToolDistanceMin.py:51 +#: flatcamTools/ToolDistance.py:58 flatcamTools/ToolDistanceMin.py:52 msgid "METRIC (mm)" msgstr "METRISCH (mm)" -#: flatcamTools/ToolDistance.py:51 flatcamTools/ToolDistanceMin.py:51 +#: flatcamTools/ToolDistance.py:58 flatcamTools/ToolDistanceMin.py:52 msgid "INCH (in)" msgstr "ZOLL (in)" -#: flatcamTools/ToolDistance.py:54 +#: flatcamTools/ToolDistance.py:64 +msgid "Snap to center" +msgstr "Zur Mitte einrasten" + +#: flatcamTools/ToolDistance.py:66 +msgid "" +"Mouse cursor will snap to the center of the pad/drill\n" +"when it is hovering over the geometry of the pad/drill." +msgstr "" +"Der Mauszeiger rastet in der Mitte des Pads / Bohrers ein\n" +"wenn es über der Geometrie des Pads / Bohrers schwebt." + +#: flatcamTools/ToolDistance.py:76 msgid "Start Coords" msgstr "Starten Sie Koords" -#: flatcamTools/ToolDistance.py:55 flatcamTools/ToolDistance.py:75 +#: flatcamTools/ToolDistance.py:77 flatcamTools/ToolDistance.py:82 msgid "This is measuring Start point coordinates." msgstr "Dies ist das Messen von Startpunktkoordinaten." -#: flatcamTools/ToolDistance.py:57 +#: flatcamTools/ToolDistance.py:87 msgid "Stop Coords" msgstr "Stoppen Sie Koords" -#: flatcamTools/ToolDistance.py:58 flatcamTools/ToolDistance.py:80 +#: flatcamTools/ToolDistance.py:88 flatcamTools/ToolDistance.py:93 msgid "This is the measuring Stop point coordinates." msgstr "Dies ist die Messpunkt-Koordinate." -#: flatcamTools/ToolDistance.py:60 flatcamTools/ToolDistanceMin.py:62 +#: flatcamTools/ToolDistance.py:98 flatcamTools/ToolDistanceMin.py:63 msgid "Dx" msgstr "Dx" -#: flatcamTools/ToolDistance.py:61 flatcamTools/ToolDistance.py:85 -#: flatcamTools/ToolDistanceMin.py:63 flatcamTools/ToolDistanceMin.py:92 +#: flatcamTools/ToolDistance.py:99 flatcamTools/ToolDistance.py:104 +#: flatcamTools/ToolDistanceMin.py:64 flatcamTools/ToolDistanceMin.py:93 msgid "This is the distance measured over the X axis." msgstr "Dies ist der Abstand, der über die X-Achse gemessen wird." -#: flatcamTools/ToolDistance.py:63 flatcamTools/ToolDistanceMin.py:65 +#: flatcamTools/ToolDistance.py:109 flatcamTools/ToolDistanceMin.py:66 msgid "Dy" msgstr "Dy" -#: flatcamTools/ToolDistance.py:64 flatcamTools/ToolDistance.py:90 -#: flatcamTools/ToolDistanceMin.py:66 flatcamTools/ToolDistanceMin.py:97 +#: flatcamTools/ToolDistance.py:110 flatcamTools/ToolDistance.py:115 +#: flatcamTools/ToolDistanceMin.py:67 flatcamTools/ToolDistanceMin.py:98 msgid "This is the distance measured over the Y axis." msgstr "Dies ist die über die Y-Achse gemessene Entfernung." -#: flatcamTools/ToolDistance.py:67 flatcamTools/ToolDistance.py:95 -#: flatcamTools/ToolDistanceMin.py:69 flatcamTools/ToolDistanceMin.py:102 +#: flatcamTools/ToolDistance.py:121 flatcamTools/ToolDistance.py:126 +#: flatcamTools/ToolDistanceMin.py:70 flatcamTools/ToolDistanceMin.py:103 msgid "This is orientation angle of the measuring line." msgstr "Dies ist der Orientierungswinkel der Messlinie." -#: flatcamTools/ToolDistance.py:69 flatcamTools/ToolDistanceMin.py:71 +#: flatcamTools/ToolDistance.py:131 flatcamTools/ToolDistanceMin.py:72 msgid "DISTANCE" msgstr "ENTFERNUNG" -#: flatcamTools/ToolDistance.py:70 flatcamTools/ToolDistance.py:100 +#: flatcamTools/ToolDistance.py:132 flatcamTools/ToolDistance.py:137 msgid "This is the point to point Euclidian distance." msgstr "Dies ist die Punkt-zu-Punkt-Euklidische Entfernung." -#: flatcamTools/ToolDistance.py:102 flatcamTools/ToolDistanceMin.py:114 +#: flatcamTools/ToolDistance.py:142 flatcamTools/ToolDistance.py:337 +#: flatcamTools/ToolDistanceMin.py:115 msgid "Measure" msgstr "Messen" -#: flatcamTools/ToolDistance.py:212 +#: flatcamTools/ToolDistance.py:272 +msgid "Working" +msgstr "Arbeiten" + +#: flatcamTools/ToolDistance.py:277 msgid "MEASURING: Click on the Start point ..." msgstr "MESSEN: Klicken Sie auf den Startpunkt ..." -#: flatcamTools/ToolDistance.py:345 +#: flatcamTools/ToolDistance.py:387 +msgid "Distance Tool finished." +msgstr "Distanzwerkzeug fertig." + +#: flatcamTools/ToolDistance.py:455 +msgid "Pads overlapped. Aborting." +msgstr "Pads überlappen sich. Abbruch." + +#: flatcamTools/ToolDistance.py:485 msgid "MEASURING: Click on the Destination point ..." msgstr "MESSEN: Klicken Sie auf den Zielpunkt ..." -#: flatcamTools/ToolDistance.py:353 flatcamTools/ToolDistanceMin.py:282 +#: flatcamTools/ToolDistance.py:494 flatcamTools/ToolDistanceMin.py:285 msgid "MEASURING" msgstr "MESSUNG" -#: flatcamTools/ToolDistance.py:354 flatcamTools/ToolDistanceMin.py:283 +#: flatcamTools/ToolDistance.py:495 flatcamTools/ToolDistanceMin.py:286 msgid "Result" msgstr "Ergebnis" -#: flatcamTools/ToolDistanceMin.py:31 flatcamTools/ToolDistanceMin.py:152 +#: flatcamTools/ToolDistanceMin.py:32 flatcamTools/ToolDistanceMin.py:144 msgid "Minimum Distance Tool" msgstr "Werkzeug für minimalen Abstand" -#: flatcamTools/ToolDistanceMin.py:54 +#: flatcamTools/ToolDistanceMin.py:55 msgid "First object point" msgstr "Erster Objektpunkt" -#: flatcamTools/ToolDistanceMin.py:55 flatcamTools/ToolDistanceMin.py:80 +#: flatcamTools/ToolDistanceMin.py:56 flatcamTools/ToolDistanceMin.py:81 msgid "" "This is first object point coordinates.\n" "This is the start point for measuring distance." @@ -14349,11 +15204,11 @@ msgstr "" "Dies sind erste Objektpunktkoordinaten.\n" "Dies ist der Startpunkt für die Entfernungsmessung." -#: flatcamTools/ToolDistanceMin.py:58 +#: flatcamTools/ToolDistanceMin.py:59 msgid "Second object point" msgstr "Zweiter Objektpunkt" -#: flatcamTools/ToolDistanceMin.py:59 flatcamTools/ToolDistanceMin.py:86 +#: flatcamTools/ToolDistanceMin.py:60 flatcamTools/ToolDistanceMin.py:87 msgid "" "This is second object point coordinates.\n" "This is the end point for measuring distance." @@ -14361,43 +15216,60 @@ msgstr "" "Dies sind die Koordinaten des zweiten Objektpunkts.\n" "Dies ist der Endpunkt für die Entfernungsmessung." -#: flatcamTools/ToolDistanceMin.py:72 flatcamTools/ToolDistanceMin.py:107 +#: flatcamTools/ToolDistanceMin.py:73 flatcamTools/ToolDistanceMin.py:108 msgid "This is the point to point Euclidean distance." msgstr "Dies ist die euklidische Distanz von Punkt zu Punkt." -#: flatcamTools/ToolDistanceMin.py:74 +#: flatcamTools/ToolDistanceMin.py:75 msgid "Half Point" msgstr "Halber Punkt" -#: flatcamTools/ToolDistanceMin.py:75 flatcamTools/ToolDistanceMin.py:112 +#: flatcamTools/ToolDistanceMin.py:76 flatcamTools/ToolDistanceMin.py:113 msgid "This is the middle point of the point to point Euclidean distance." msgstr "Dies ist der Mittelpunkt der euklidischen Distanz von Punkt zu Punkt." -#: flatcamTools/ToolDistanceMin.py:117 +#: flatcamTools/ToolDistanceMin.py:118 msgid "Jump to Half Point" msgstr "Springe zum halben Punkt" -#: flatcamTools/ToolDistanceMin.py:163 +#: flatcamTools/ToolDistanceMin.py:155 msgid "" "Select two objects and no more, to measure the distance between them ..." msgstr "" "Wählen Sie zwei und nicht mehr Objekte aus, um den Abstand zwischen ihnen zu " "messen ..." -#: flatcamTools/ToolDistanceMin.py:204 flatcamTools/ToolDistanceMin.py:214 -#: flatcamTools/ToolDistanceMin.py:223 flatcamTools/ToolDistanceMin.py:244 +#: flatcamTools/ToolDistanceMin.py:196 flatcamTools/ToolDistanceMin.py:217 +#: flatcamTools/ToolDistanceMin.py:226 flatcamTools/ToolDistanceMin.py:247 msgid "Select two objects and no more. Currently the selection has objects: " msgstr "" "Wählen Sie zwei Objekte und nicht mehr. Derzeit hat die Auswahl Objekte: " -#: flatcamTools/ToolDistanceMin.py:291 +#: flatcamTools/ToolDistanceMin.py:294 msgid "Objects intersects or touch at" msgstr "Objekte schneiden sich oder berühren sich" -#: flatcamTools/ToolDistanceMin.py:297 +#: flatcamTools/ToolDistanceMin.py:300 msgid "Jumped to the half point between the two selected objects" msgstr "Sprang zum halben Punkt zwischen den beiden ausgewählten Objekten" +#: flatcamTools/ToolExtractDrills.py:29 flatcamTools/ToolExtractDrills.py:295 +msgid "Extract Drills" +msgstr "Bohrer extrahieren" + +#: flatcamTools/ToolExtractDrills.py:62 +msgid "Gerber from which to extract drill holes" +msgstr "Gerber, aus dem Bohrlöcher gezogen werden sollen" + +#: flatcamTools/ToolExtractDrills.py:297 +msgid "Extract drills from a given Gerber file." +msgstr "Extrahieren Sie Bohrer aus einer bestimmten Gerber-Datei." + +#: flatcamTools/ToolExtractDrills.py:478 flatcamTools/ToolExtractDrills.py:563 +#: flatcamTools/ToolExtractDrills.py:648 +msgid "No drills extracted. Try different parameters." +msgstr "Keine Bohrer extrahiert. Probieren Sie verschiedene Parameter aus." + #: flatcamTools/ToolFiducials.py:56 msgid "Fiducials Coordinates" msgstr "Bezugspunktkoordinaten" @@ -14414,10 +15286,6 @@ msgstr "" msgid "Top Right" msgstr "Oben rechts" -#: flatcamTools/ToolFiducials.py:111 -msgid "Second Point" -msgstr "Zweiter Punkt" - #: flatcamTools/ToolFiducials.py:191 msgid "" "- 'Auto' - automatic placement of fiducials in the corners of the bounding " @@ -14428,31 +15296,31 @@ msgstr "" "platziert.\n" "\"Manuell\" Die Bezugspunkte werden manuell platziert." -#: flatcamTools/ToolFiducials.py:258 +#: flatcamTools/ToolFiducials.py:259 msgid "Copper Gerber" msgstr "Gerber (Kupfer) öffnen" -#: flatcamTools/ToolFiducials.py:267 +#: flatcamTools/ToolFiducials.py:268 msgid "Add Fiducial" msgstr "Bezugspunkt hinzufügen" -#: flatcamTools/ToolFiducials.py:269 +#: flatcamTools/ToolFiducials.py:270 msgid "Will add a polygon on the copper layer to serve as fiducial." msgstr "Fügt ein Polygon auf die Kupferschicht als Bezugspunkt hinzu." -#: flatcamTools/ToolFiducials.py:285 +#: flatcamTools/ToolFiducials.py:286 msgid "Soldermask Gerber" msgstr "Lötpastenmaske Gerber" -#: flatcamTools/ToolFiducials.py:287 +#: flatcamTools/ToolFiducials.py:288 msgid "The Soldermask Gerber object." msgstr "Lötpastenmaske Gerber-Objekt." -#: flatcamTools/ToolFiducials.py:298 +#: flatcamTools/ToolFiducials.py:300 msgid "Add Soldermask Opening" msgstr "Lotpastenmaske Öffnung hinzufügen" -#: flatcamTools/ToolFiducials.py:300 +#: flatcamTools/ToolFiducials.py:302 msgid "" "Will add a polygon on the soldermask layer\n" "to serve as fiducial opening.\n" @@ -14464,25 +15332,25 @@ msgstr "" "Der Durchmesser ist immer doppelt so groß\n" "wie der Kupfer Bezugspunkt." -#: flatcamTools/ToolFiducials.py:514 +#: flatcamTools/ToolFiducials.py:516 msgid "Click to add first Fiducial. Bottom Left..." msgstr "Klicken um den ersten Bezugspunkt unten links hinzuzufügen..." -#: flatcamTools/ToolFiducials.py:778 +#: flatcamTools/ToolFiducials.py:780 msgid "Click to add the last fiducial. Top Right..." msgstr "Klicken um den letzten Bezugspunkt oben rechts hinzuzufügen..." -#: flatcamTools/ToolFiducials.py:783 +#: flatcamTools/ToolFiducials.py:785 msgid "Click to add the second fiducial. Top Left or Bottom Right..." msgstr "" "Klicken um den zweiten Bezugspunkt oben links oder unten rechts " "hinzuzufügen..." -#: flatcamTools/ToolFiducials.py:786 flatcamTools/ToolFiducials.py:795 +#: flatcamTools/ToolFiducials.py:788 flatcamTools/ToolFiducials.py:797 msgid "Done. All fiducials have been added." msgstr "Fertig. Alle Bezugspunkte hinzugefügt." -#: flatcamTools/ToolFiducials.py:872 +#: flatcamTools/ToolFiducials.py:874 msgid "Fiducials Tool exit." msgstr "Bezugspunkttool beenden." @@ -14490,7 +15358,7 @@ msgstr "Bezugspunkttool beenden." msgid "Film PCB" msgstr "Film PCB" -#: flatcamTools/ToolFilm.py:80 +#: flatcamTools/ToolFilm.py:78 msgid "" "Specify the type of object for which to create the film.\n" "The object can be of type: Gerber or Geometry.\n" @@ -14502,11 +15370,11 @@ msgstr "" "Die Auswahl hier bestimmt den Objekttyp\n" "im Filmobjekt-Kombinationsfeld." -#: flatcamTools/ToolFilm.py:94 +#: flatcamTools/ToolFilm.py:92 msgid "Film Object" msgstr "Filmobjekt" -#: flatcamTools/ToolFilm.py:96 +#: flatcamTools/ToolFilm.py:94 msgid "Object for which to create the film." msgstr "Objekt, für das der Film erstellt werden soll." @@ -14522,7 +15390,7 @@ msgstr "" "bestimmt den Objekttyp\n" "im Kombinationsfeld Box-Objekt." -#: flatcamTools/ToolFilm.py:129 flatcamTools/ToolPanelize.py:136 +#: flatcamTools/ToolFilm.py:129 msgid "Box Object" msgstr "Box-Objekt" @@ -14587,19 +15455,19 @@ msgstr "" "Entfernen Sie die Geometrie von Excellon aus dem Film, um die Löcher in den " "Pads zu erzeugen." -#: flatcamTools/ToolFilm.py:379 +#: flatcamTools/ToolFilm.py:381 msgid "Punch Size" msgstr "Lochergröße" -#: flatcamTools/ToolFilm.py:380 +#: flatcamTools/ToolFilm.py:382 msgid "The value here will control how big is the punch hole in the pads." msgstr "Der Wert hier bestimmt, wie groß das Loch in den Pads ist." -#: flatcamTools/ToolFilm.py:500 +#: flatcamTools/ToolFilm.py:502 msgid "Save Film" msgstr "Film speichern" -#: flatcamTools/ToolFilm.py:502 +#: flatcamTools/ToolFilm.py:504 msgid "" "Create a Film for the selected object, within\n" "the specified box. Does not create a new \n" @@ -14611,7 +15479,7 @@ msgstr "" "  FlatCAM-Objekt, speichern Sie es jedoch direkt im \n" "gewähltem Format." -#: flatcamTools/ToolFilm.py:652 +#: flatcamTools/ToolFilm.py:664 msgid "" "Using the Pad center does not work on Geometry objects. Only a Gerber object " "has pads." @@ -14619,42 +15487,38 @@ msgstr "" "Die Verwendung der Pad-Mitte funktioniert nicht bei Geometrieobjekten. Nur " "ein Gerber-Objekt hat Pads." -#: flatcamTools/ToolFilm.py:662 +#: flatcamTools/ToolFilm.py:674 msgid "No FlatCAM object selected. Load an object for Film and retry." msgstr "" "Kein FlatCAM-Objekt ausgewählt. Laden Sie ein Objekt für Film und versuchen " "Sie es erneut." -#: flatcamTools/ToolFilm.py:669 +#: flatcamTools/ToolFilm.py:681 msgid "No FlatCAM object selected. Load an object for Box and retry." msgstr "" "Kein FlatCAM-Objekt ausgewählt. Laden Sie ein Objekt für Box und versuchen " "Sie es erneut." -#: flatcamTools/ToolFilm.py:673 +#: flatcamTools/ToolFilm.py:685 msgid "No FlatCAM object selected." msgstr "Kein FlatCAM-Objekt ausgewählt." -#: flatcamTools/ToolFilm.py:684 +#: flatcamTools/ToolFilm.py:696 msgid "Generating Film ..." msgstr "Film wird erstellt ..." -#: flatcamTools/ToolFilm.py:733 flatcamTools/ToolFilm.py:737 +#: flatcamTools/ToolFilm.py:745 flatcamTools/ToolFilm.py:749 msgid "Export positive film" msgstr "Film positiv exportieren" -#: flatcamTools/ToolFilm.py:742 -msgid "Export positive film cancelled." -msgstr "Export des Positivs wurde abgebrochen." - -#: flatcamTools/ToolFilm.py:770 +#: flatcamTools/ToolFilm.py:782 msgid "" "No Excellon object selected. Load an object for punching reference and retry." msgstr "" "Kein Excellon-Objekt ausgewählt. Laden Sie ein Objekt zum Stanzen der " "Referenz und versuchen Sie es erneut." -#: flatcamTools/ToolFilm.py:794 +#: flatcamTools/ToolFilm.py:806 msgid "" " Could not generate punched hole film because the punch hole sizeis bigger " "than some of the apertures in the Gerber object." @@ -14662,7 +15526,7 @@ msgstr "" " Es konnte kein Lochfilm erzeugt werden, da die Lochgröße größer ist als " "einige der Öffnungen im Gerber-Objekt." -#: flatcamTools/ToolFilm.py:806 +#: flatcamTools/ToolFilm.py:818 msgid "" "Could not generate punched hole film because the punch hole sizeis bigger " "than some of the apertures in the Gerber object." @@ -14670,7 +15534,7 @@ msgstr "" "Es konnte kein Lochfilm erzeugt werden, da die Lochgröße größer ist als " "einige der Öffnungen im Gerber-Objekt." -#: flatcamTools/ToolFilm.py:824 +#: flatcamTools/ToolFilm.py:836 msgid "" "Could not generate punched hole film because the newly created object " "geometry is the same as the one in the source object geometry..." @@ -14678,24 +15542,20 @@ msgstr "" "Lochfolie konnte nicht generiert werden, da die neu erstellte " "Objektgeometrie mit der in der Quellobjektgeometrie übereinstimmt ..." -#: flatcamTools/ToolFilm.py:879 flatcamTools/ToolFilm.py:883 +#: flatcamTools/ToolFilm.py:891 flatcamTools/ToolFilm.py:895 msgid "Export negative film" msgstr "Exportieren negativ Film" -#: flatcamTools/ToolFilm.py:888 -msgid "Export negative film cancelled." -msgstr "Export des Negativs wurde abgebrochen." - -#: flatcamTools/ToolFilm.py:944 flatcamTools/ToolFilm.py:1122 -#: flatcamTools/ToolPanelize.py:421 +#: flatcamTools/ToolFilm.py:956 flatcamTools/ToolFilm.py:1139 +#: flatcamTools/ToolPanelize.py:433 msgid "No object Box. Using instead" msgstr "Keine Objektbox. Verwenden Sie stattdessen" -#: flatcamTools/ToolFilm.py:1060 flatcamTools/ToolFilm.py:1235 +#: flatcamTools/ToolFilm.py:1072 flatcamTools/ToolFilm.py:1252 msgid "Film file exported to" msgstr "Film-Datei exportiert nach" -#: flatcamTools/ToolFilm.py:1063 flatcamTools/ToolFilm.py:1238 +#: flatcamTools/ToolFilm.py:1075 flatcamTools/ToolFilm.py:1255 msgid "Generating Film ... Please wait." msgstr "Film wird erstellt ... Bitte warten Sie." @@ -14707,7 +15567,7 @@ msgstr "Bild als Objekt" msgid "Image to PCB" msgstr "Bild auf PCB" -#: flatcamTools/ToolImage.py:57 +#: flatcamTools/ToolImage.py:56 msgid "" "Specify the type of object to create from the image.\n" "It can be of type: Gerber or Geometry." @@ -14715,23 +15575,23 @@ msgstr "" "Geben Sie den Objekttyp an, der aus dem Bild erstellt werden soll.\n" "Es kann vom Typ sein: Gerber oder Geometrie." -#: flatcamTools/ToolImage.py:66 +#: flatcamTools/ToolImage.py:65 msgid "DPI value" msgstr "DPI-Wert" -#: flatcamTools/ToolImage.py:67 +#: flatcamTools/ToolImage.py:66 msgid "Specify a DPI value for the image." msgstr "Geben Sie einen DPI-Wert für das Bild an." -#: flatcamTools/ToolImage.py:73 +#: flatcamTools/ToolImage.py:72 msgid "Level of detail" msgstr "Detaillierungsgrad" -#: flatcamTools/ToolImage.py:82 +#: flatcamTools/ToolImage.py:81 msgid "Image type" msgstr "Bildtyp" -#: flatcamTools/ToolImage.py:84 +#: flatcamTools/ToolImage.py:83 msgid "" "Choose a method for the image interpretation.\n" "B/W means a black & white image. Color means a colored image." @@ -14739,12 +15599,12 @@ msgstr "" "Wählen Sie eine Methode für die Bildinterpretation.\n" "B / W steht für ein Schwarzweißbild. Farbe bedeutet ein farbiges Bild." -#: flatcamTools/ToolImage.py:93 flatcamTools/ToolImage.py:108 -#: flatcamTools/ToolImage.py:121 flatcamTools/ToolImage.py:134 +#: flatcamTools/ToolImage.py:92 flatcamTools/ToolImage.py:107 +#: flatcamTools/ToolImage.py:120 flatcamTools/ToolImage.py:133 msgid "Mask value" msgstr "Maskenwert" -#: flatcamTools/ToolImage.py:95 +#: flatcamTools/ToolImage.py:94 msgid "" "Mask for monochrome image.\n" "Takes values between [0 ... 255].\n" @@ -14760,7 +15620,7 @@ msgstr "" "0 bedeutet kein Detail und 255 bedeutet alles\n" "(das ist total schwarz)." -#: flatcamTools/ToolImage.py:110 +#: flatcamTools/ToolImage.py:109 msgid "" "Mask for RED color.\n" "Takes values between [0 ... 255].\n" @@ -14772,7 +15632,7 @@ msgstr "" "Legt fest, wie viel Details enthalten sind\n" "in der resultierenden Geometrie." -#: flatcamTools/ToolImage.py:123 +#: flatcamTools/ToolImage.py:122 msgid "" "Mask for GREEN color.\n" "Takes values between [0 ... 255].\n" @@ -14784,7 +15644,7 @@ msgstr "" "Legt fest, wie viel Details enthalten sind\n" "in der resultierenden Geometrie." -#: flatcamTools/ToolImage.py:136 +#: flatcamTools/ToolImage.py:135 msgid "" "Mask for BLUE color.\n" "Takes values between [0 ... 255].\n" @@ -14796,33 +15656,59 @@ msgstr "" "Legt fest, wie viel Details enthalten sind\n" "in der resultierenden Geometrie." -#: flatcamTools/ToolImage.py:144 +#: flatcamTools/ToolImage.py:143 msgid "Import image" msgstr "Bild importieren" -#: flatcamTools/ToolImage.py:146 +#: flatcamTools/ToolImage.py:145 msgid "Open a image of raster type and then import it in FlatCAM." msgstr "Öffnen Sie ein Bild vom Raster-Typ und importieren Sie es in FlatCAM." -#: flatcamTools/ToolImage.py:183 +#: flatcamTools/ToolImage.py:182 msgid "Image Tool" msgstr "Bildwerkzeug" -#: flatcamTools/ToolImage.py:235 flatcamTools/ToolImage.py:238 +#: flatcamTools/ToolImage.py:234 flatcamTools/ToolImage.py:237 msgid "Import IMAGE" msgstr "BILD importieren" -#: flatcamTools/ToolImage.py:286 +#: flatcamTools/ToolImage.py:285 msgid "Importing Image" msgstr "Bild importieren" +#: flatcamTools/ToolInvertGerber.py:74 +msgid "Gerber object that will be inverted." +msgstr "Gerber-Objekt, das invertiert wird." + +#: flatcamTools/ToolInvertGerber.py:83 +msgid "Parameters for this tool" +msgstr "Parameter für dieses Werkzeug" + +#: flatcamTools/ToolInvertGerber.py:123 +msgid "Invert Gerber" +msgstr "Gerber umkehren" + +#: flatcamTools/ToolInvertGerber.py:125 +msgid "" +"Will invert the Gerber object: areas that have copper\n" +"will be empty of copper and previous empty area will be\n" +"filled with copper." +msgstr "" +"Invertiert das Gerber-Objekt: Bereiche mit Kupfer\n" +"wird leer von Kupfer sein und der vorherige leere Bereich wird leer sein\n" +"mit Kupfer gefüllt." + +#: flatcamTools/ToolInvertGerber.py:184 +msgid "Invert Tool" +msgstr "Invertiert Werkzeug" + #: flatcamTools/ToolMove.py:103 msgid "MOVE: Click on the Start point ..." msgstr "Verschieben: Klicke auf den Startpunkt ..." #: flatcamTools/ToolMove.py:114 -msgid "MOVE action cancelled. No object(s) to move." -msgstr "Bewegungsaktion abgebrochen. Keine Objekte zum Verschieben." +msgid "Cancelled. No object(s) to move." +msgstr "Abgebrochen. Keine Objekte zum Bewegen." #: flatcamTools/ToolMove.py:141 msgid "MOVE: Click on the Destination point ..." @@ -14836,19 +15722,15 @@ msgstr "Ziehen um..." msgid "No object(s) selected." msgstr "Keine Objekte ausgewählt." -#: flatcamTools/ToolMove.py:212 +#: flatcamTools/ToolMove.py:222 msgid "Error when mouse left click." msgstr "Fehler beim Klicken mit der linken Maustaste." -#: flatcamTools/ToolMove.py:260 -msgid "Move action cancelled." -msgstr "Bewegungsaktion abgebrochen." - -#: flatcamTools/ToolNonCopperClear.py:38 +#: flatcamTools/ToolNCC.py:42 msgid "Non-Copper Clearing" msgstr "Nicht-Kupfer-Clearing" -#: flatcamTools/ToolNonCopperClear.py:84 +#: flatcamTools/ToolNCC.py:88 msgid "" "Specify the type of object to be cleared of excess copper.\n" "It can be of type: Gerber or Geometry.\n" @@ -14861,11 +15743,11 @@ msgstr "" "Was hier ausgewählt wird, bestimmt die Art\n" "von Objekten, die das Kombinationsfeld \"Objekt\" füllen." -#: flatcamTools/ToolNonCopperClear.py:101 +#: flatcamTools/ToolNCC.py:110 msgid "Object to be cleared of excess copper." msgstr "Objekt, das von überschüssigem Kupfer befreit werden soll." -#: flatcamTools/ToolNonCopperClear.py:111 +#: flatcamTools/ToolNCC.py:122 msgid "" "Tools pool from which the algorithm\n" "will pick the ones used for copper clearing." @@ -14873,11 +15755,7 @@ msgstr "" "Toolspool aus dem der Algorithmus\n" "wählt die für die Kupferreinigung verwendeten aus." -#: flatcamTools/ToolNonCopperClear.py:120 -msgid "Operation" -msgstr "Operation" - -#: flatcamTools/ToolNonCopperClear.py:126 +#: flatcamTools/ToolNCC.py:138 msgid "" "This is the Tool Number.\n" "Non copper clearing will start with the tool with the biggest \n" @@ -14894,7 +15772,7 @@ msgstr "" "in der resultierenden Geometrie. Dies liegt daran, dass mit einigen Tools\n" "Diese Funktion kann keine Malgeometrie erstellen." -#: flatcamTools/ToolNonCopperClear.py:134 +#: flatcamTools/ToolNCC.py:146 msgid "" "Tool Diameter. It's value (in current FlatCAM units)\n" "is the cut width into the material." @@ -14902,7 +15780,7 @@ msgstr "" "Werkzeugdurchmesser. Wert (in aktuellen FlatCAM-Einheiten)\n" "ist die Schnittbreite in das Material." -#: flatcamTools/ToolNonCopperClear.py:138 +#: flatcamTools/ToolNCC.py:150 msgid "" "The Tool Type (TT) can be:\n" "- Circular with 1 ... 4 teeth -> it is informative only. Being circular,\n" @@ -14938,34 +15816,7 @@ msgstr "" "Operationstyp ausgewählt\n" "in der resultierenden Geometrie als Isolation." -#: flatcamTools/ToolNonCopperClear.py:151 -msgid "" -"The 'Operation' can be:\n" -"- Isolation -> will ensure that the non-copper clearing is always complete.\n" -"If it's not successful then the non-copper clearing will fail, too.\n" -"- Clear -> the regular non-copper clearing." -msgstr "" -"Die 'Operation' kann sein:\n" -"- Isolierung-> stellt sicher, dass das Löschen ohne Kupfer immer " -"abgeschlossen ist.\n" -"Wenn dies nicht erfolgreich ist, schlägt auch das Löschen ohne Kupfer fehl.\n" -"- Klären-> das reguläre Nicht-Kupfer-löschen." - -#: flatcamTools/ToolNonCopperClear.py:209 -msgid "Tool Selection" -msgstr "Werkzeugauswahl" - -#: flatcamTools/ToolNonCopperClear.py:273 -msgid "" -"Diameter for the new tool to add in the Tool Table.\n" -"If the tool is V-shape type then this value is automatically\n" -"calculated from the other parameters." -msgstr "" -"Durchmesser des neuen Werkzeugs das in die Werkzeugtabelle\n" -"aufgenommen werden soll. Wenn das Tool V-Förmig ist, wird dieser\n" -"Wert aus den anderen Parametern berechnet." - -#: flatcamTools/ToolNonCopperClear.py:288 flatcamTools/ToolPaint.py:190 +#: flatcamTools/ToolNCC.py:296 flatcamTools/ToolPaint.py:279 msgid "" "Add a new tool to the Tool Table\n" "with the diameter specified above." @@ -14973,8 +15824,8 @@ msgstr "" "Fügen Sie der Werkzeugtabelle ein neues Werkzeug hinzu\n" "mit dem oben angegebenen Durchmesser." -#: flatcamTools/ToolNonCopperClear.py:300 flatcamTools/ToolPaint.py:202 -#: flatcamTools/ToolSolderPaste.py:129 +#: flatcamTools/ToolNCC.py:318 flatcamTools/ToolPaint.py:301 +#: flatcamTools/ToolSolderPaste.py:131 msgid "" "Delete a selection of tools in the Tool Table\n" "by first selecting a row(s) in the Tool Table." @@ -14982,25 +15833,7 @@ msgstr "" "Löschen Sie eine Auswahl von Werkzeugen in der Werkzeugtabelle\n" "indem Sie zuerst eine oder mehrere Zeilen in der Werkzeugtabelle auswählen." -#: flatcamTools/ToolNonCopperClear.py:435 -msgid "" -"- 'Itself' - the non copper clearing extent is based on the object that is " -"copper cleared.\n" -" - 'Area Selection' - left mouse click to start selection of the area to be " -"painted.\n" -"- 'Reference Object' - will do non copper clearing within the area specified " -"by another object." -msgstr "" -"- \"Selbst\" - das nicht kupferhaltige Clearing-Ausmaß\n" -"basiert auf dem Objekt, das kupferfrei ist.\n" -"- 'Bereichsauswahl' - Klicken Sie mit der linken Maustaste, um den Bereich " -"auszuwählen, der gemalt werden soll.\n" -"Wenn Sie eine Änderungstaste gedrückt halten (STRG oder UMSCHALTTASTE), " -"können Sie mehrere Bereiche hinzufügen.\n" -"- 'Referenzobjekt' - löscht nicht kupferne Objekte innerhalb des Bereichs\n" -"von einem anderen Objekt angegeben." - -#: flatcamTools/ToolNonCopperClear.py:447 +#: flatcamTools/ToolNCC.py:554 msgid "" "The type of FlatCAM object to be used as non copper clearing reference.\n" "It can be Gerber, Excellon or Geometry." @@ -15009,123 +15842,128 @@ msgstr "" "Referenz verwendet werden soll.\n" "Es kann Gerber, Excellon oder Geometry sein." -#: flatcamTools/ToolNonCopperClear.py:471 +#: flatcamTools/ToolNCC.py:597 flatcamTools/ToolPaint.py:537 msgid "Generate Geometry" msgstr "Geometrie erzeugen" -#: flatcamTools/ToolNonCopperClear.py:582 flatcamTools/ToolPaint.py:493 -#: flatcamTools/ToolSolderPaste.py:553 -msgid "New Tool" -msgstr "Neues Werkzeug" - -#: flatcamTools/ToolNonCopperClear.py:981 flatcamTools/ToolPaint.py:766 -#: flatcamTools/ToolSolderPaste.py:887 +#: flatcamTools/ToolNCC.py:1420 flatcamTools/ToolPaint.py:1179 +#: flatcamTools/ToolSolderPaste.py:888 msgid "Please enter a tool diameter to add, in Float format." msgstr "" "Bitte geben Sie einen hinzuzufügenden Werkzeugdurchmesser im Float-Format " "ein." -#: flatcamTools/ToolNonCopperClear.py:1012 flatcamTools/ToolPaint.py:791 -msgid "Adding tool cancelled. Tool already in Tool Table." -msgstr "" -"Hinzufügen des Werkzeugs abgebrochen. Werkzeug bereits in der " -"Werkzeugtabelle." +#: flatcamTools/ToolNCC.py:1451 flatcamTools/ToolNCC.py:4008 +#: flatcamTools/ToolPaint.py:1203 flatcamTools/ToolPaint.py:3598 +#: flatcamTools/ToolSolderPaste.py:917 +msgid "Cancelled. Tool already in Tool Table." +msgstr "Abgebrochen. Werkzeug bereits in der Werkzeugtabelle." -#: flatcamTools/ToolNonCopperClear.py:1017 flatcamTools/ToolPaint.py:797 +#: flatcamTools/ToolNCC.py:1458 flatcamTools/ToolNCC.py:4025 +#: flatcamTools/ToolPaint.py:1208 flatcamTools/ToolPaint.py:3615 msgid "New tool added to Tool Table." msgstr "Neues Werkzeug zur Werkzeugtabelle hinzugefügt." -#: flatcamTools/ToolNonCopperClear.py:1061 flatcamTools/ToolPaint.py:843 +#: flatcamTools/ToolNCC.py:1502 flatcamTools/ToolPaint.py:1252 msgid "Tool from Tool Table was edited." msgstr "Werkzeug aus Werkzeugtabelle wurde bearbeitet." -#: flatcamTools/ToolNonCopperClear.py:1072 flatcamTools/ToolPaint.py:855 -#: flatcamTools/ToolSolderPaste.py:978 -msgid "Edit cancelled. New diameter value is already in the Tool Table." +#: flatcamTools/ToolNCC.py:1514 flatcamTools/ToolPaint.py:1264 +#: flatcamTools/ToolSolderPaste.py:977 +msgid "Cancelled. New diameter value is already in the Tool Table." msgstr "" -"Bearbeitung abgebrochen. Neuer Durchmesserwert befindet sich bereits in der " +"Abgebrochen. Der neue Durchmesserwert befindet sich bereits in der " "Werkzeugtabelle." -#: flatcamTools/ToolNonCopperClear.py:1119 flatcamTools/ToolPaint.py:953 +#: flatcamTools/ToolNCC.py:1566 flatcamTools/ToolPaint.py:1362 msgid "Delete failed. Select a tool to delete." msgstr "Löschen fehlgeschlagen. Wählen Sie ein Werkzeug zum Löschen aus." -#: flatcamTools/ToolNonCopperClear.py:1124 flatcamTools/ToolPaint.py:959 +#: flatcamTools/ToolNCC.py:1572 flatcamTools/ToolPaint.py:1368 msgid "Tool(s) deleted from Tool Table." msgstr "Werkzeug(e) aus der Werkzeugtabelle gelöscht." -#: flatcamTools/ToolNonCopperClear.py:1171 +#: flatcamTools/ToolNCC.py:1614 msgid "Wrong Tool Dia value format entered, use a number." msgstr "Falsches Werkzeug Dia-Wertformat eingegeben, verwenden Sie eine Zahl." -#: flatcamTools/ToolNonCopperClear.py:1180 flatcamTools/ToolPaint.py:1023 +#: flatcamTools/ToolNCC.py:1623 flatcamTools/ToolPaint.py:1419 msgid "No selected tools in Tool Table." msgstr "Keine ausgewählten Werkzeuge in der Werkzeugtabelle." -#: flatcamTools/ToolNonCopperClear.py:1255 flatcamTools/ToolPaint.py:1195 +#: flatcamTools/ToolNCC.py:1699 flatcamTools/ToolPaint.py:1595 msgid "Click the end point of the paint area." msgstr "Klicken Sie auf den Endpunkt des Malbereichs." -#: flatcamTools/ToolNonCopperClear.py:1410 -#: flatcamTools/ToolNonCopperClear.py:1412 -msgid "Non-Copper clearing ..." -msgstr "Nicht-Kupfer-Clearing ..." - -#: flatcamTools/ToolNonCopperClear.py:1422 -msgid "NCC Tool started. Reading parameters." -msgstr "NCC Tool gestartet. Parameter lesen." - -#: flatcamTools/ToolNonCopperClear.py:1485 +#: flatcamTools/ToolNCC.py:1971 flatcamTools/ToolNCC.py:2959 msgid "NCC Tool. Preparing non-copper polygons." msgstr "NCC-Tool. Vorbereitung von kupferfreien Polygonen." -#: flatcamTools/ToolNonCopperClear.py:1581 +#: flatcamTools/ToolNCC.py:2030 flatcamTools/ToolNCC.py:3087 +msgid "NCC Tool. Calculate 'empty' area." +msgstr "NCC-Tool. Berechnen Sie die \"leere\" Fläche." + +#: flatcamTools/ToolNCC.py:2049 flatcamTools/ToolNCC.py:2155 +#: flatcamTools/ToolNCC.py:2169 flatcamTools/ToolNCC.py:3100 +#: flatcamTools/ToolNCC.py:3205 flatcamTools/ToolNCC.py:3220 +#: flatcamTools/ToolNCC.py:3486 flatcamTools/ToolNCC.py:3587 +#: flatcamTools/ToolNCC.py:3602 +msgid "Buffering finished" +msgstr "Pufferung beendet" + +#: flatcamTools/ToolNCC.py:2057 flatcamTools/ToolNCC.py:2176 +#: flatcamTools/ToolNCC.py:3108 flatcamTools/ToolNCC.py:3227 +#: flatcamTools/ToolNCC.py:3493 flatcamTools/ToolNCC.py:3609 +msgid "Could not get the extent of the area to be non copper cleared." +msgstr "" +"Die Ausdehnung des nicht kupferhaltigen Bereichs konnte nicht gelöscht " +"werden." + +#: flatcamTools/ToolNCC.py:2084 flatcamTools/ToolNCC.py:2162 +#: flatcamTools/ToolNCC.py:3135 flatcamTools/ToolNCC.py:3212 +#: flatcamTools/ToolNCC.py:3513 flatcamTools/ToolNCC.py:3594 +msgid "" +"Isolation geometry is broken. Margin is less than isolation tool diameter." +msgstr "" +"Die Isolationsgeometrie ist gebrochen. Der Rand ist kleiner als der " +"Durchmesser des Isolationswerkzeugs." + +#: flatcamTools/ToolNCC.py:2179 flatcamTools/ToolNCC.py:3231 +#: flatcamTools/ToolNCC.py:3612 +msgid "The selected object is not suitable for copper clearing." +msgstr "Das ausgewählte Objekt ist nicht zum Löschen von Kupfer geeignet." + +#: flatcamTools/ToolNCC.py:2186 flatcamTools/ToolNCC.py:3238 +msgid "NCC Tool. Finished calculation of 'empty' area." +msgstr "NCC-Tool. Berechnung der 'leeren' Fläche beendet." + +#: flatcamTools/ToolNCC.py:2217 flatcamTools/ToolNCC.py:2219 +#: flatcamTools/ToolNCC.py:2911 flatcamTools/ToolNCC.py:2913 +msgid "Non-Copper clearing ..." +msgstr "Nicht-Kupfer-Clearing ..." + +#: flatcamTools/ToolNCC.py:2273 flatcamTools/ToolNCC.py:3055 msgid "" "NCC Tool. Finished non-copper polygons. Normal copper clearing task started." msgstr "" "NCC-Tool. Fertige kupferfreie Polygone. Normale Kupferentfernungsaufgabe " "gestartet." -#: flatcamTools/ToolNonCopperClear.py:1613 -msgid "NCC Tool. Calculate 'empty' area." -msgstr "NCC-Tool. Berechnen Sie die \"leere\" Fläche." +#: flatcamTools/ToolNCC.py:2307 flatcamTools/ToolNCC.py:2587 +msgid "NCC Tool failed creating bounding box." +msgstr "Das NCC-Tool konnte keinen Begrenzungsrahmen erstellen." -#: flatcamTools/ToolNonCopperClear.py:1626 -#: flatcamTools/ToolNonCopperClear.py:1723 -#: flatcamTools/ToolNonCopperClear.py:1735 -#: flatcamTools/ToolNonCopperClear.py:2018 -#: flatcamTools/ToolNonCopperClear.py:2114 -#: flatcamTools/ToolNonCopperClear.py:2126 -msgid "Buffering finished" -msgstr "Pufferung beendet" +#: flatcamTools/ToolNCC.py:2321 flatcamTools/ToolNCC.py:2604 +#: flatcamTools/ToolNCC.py:3251 flatcamTools/ToolNCC.py:3637 +msgid "NCC Tool clearing with tool diameter" +msgstr "Das NCC-Werkzeug wird mit dem Werkzeugdurchmesser gelöscht" -#: flatcamTools/ToolNonCopperClear.py:1742 -#: flatcamTools/ToolNonCopperClear.py:2132 -msgid "The selected object is not suitable for copper clearing." -msgstr "Das ausgewählte Objekt ist nicht zum Löschen von Kupfer geeignet." - -#: flatcamTools/ToolNonCopperClear.py:1747 -#: flatcamTools/ToolNonCopperClear.py:2137 -msgid "Could not get the extent of the area to be non copper cleared." -msgstr "" -"Die Ausdehnung des nicht kupferhaltigen Bereichs konnte nicht gelöscht " -"werden." - -#: flatcamTools/ToolNonCopperClear.py:1754 -msgid "NCC Tool. Finished calculation of 'empty' area." -msgstr "NCC-Tool. Berechnung der 'leeren' Fläche beendet." - -#: flatcamTools/ToolNonCopperClear.py:1768 -#: flatcamTools/ToolNonCopperClear.py:2162 -msgid "NCC Tool clearing with tool diameter = " -msgstr "NCC Werkzeugreinigung mit Werkzeugdurchmesser = " - -#: flatcamTools/ToolNonCopperClear.py:1771 -#: flatcamTools/ToolNonCopperClear.py:2165 +#: flatcamTools/ToolNCC.py:2321 flatcamTools/ToolNCC.py:2604 +#: flatcamTools/ToolNCC.py:3251 flatcamTools/ToolNCC.py:3637 msgid "started." msgstr "gestartet." -#: flatcamTools/ToolNonCopperClear.py:1947 +#: flatcamTools/ToolNCC.py:2513 flatcamTools/ToolNCC.py:3412 msgid "" "There is no NCC Geometry in the file.\n" "Usually it means that the tool diameter is too big for the painted " @@ -15137,26 +15975,26 @@ msgstr "" "Geometrie zu groß ist.\n" "Ändern Sie die Malparameter und versuchen Sie es erneut." -#: flatcamTools/ToolNonCopperClear.py:1967 +#: flatcamTools/ToolNCC.py:2522 flatcamTools/ToolNCC.py:3421 msgid "NCC Tool clear all done." msgstr "NCC Tool löschen alles erledigt." -#: flatcamTools/ToolNonCopperClear.py:1969 +#: flatcamTools/ToolNCC.py:2525 flatcamTools/ToolNCC.py:3424 msgid "NCC Tool clear all done but the copper features isolation is broken for" msgstr "" "Das NCC-Tool löscht alles, aber die Isolierung der Kupfermerkmale ist " "unterbrochen" -#: flatcamTools/ToolNonCopperClear.py:1972 -#: flatcamTools/ToolNonCopperClear.py:2341 +#: flatcamTools/ToolNCC.py:2527 flatcamTools/ToolNCC.py:2812 +#: flatcamTools/ToolNCC.py:3426 flatcamTools/ToolNCC.py:3809 msgid "tools" msgstr "Werkzeuge" -#: flatcamTools/ToolNonCopperClear.py:2337 +#: flatcamTools/ToolNCC.py:2808 flatcamTools/ToolNCC.py:3805 msgid "NCC Tool Rest Machining clear all done." msgstr "Die Bearbeitung der NCC-Werkzeugablagen ist abgeschlossen." -#: flatcamTools/ToolNonCopperClear.py:2340 +#: flatcamTools/ToolNCC.py:2811 flatcamTools/ToolNCC.py:3808 msgid "" "NCC Tool Rest Machining clear all done but the copper features isolation is " "broken for" @@ -15164,7 +16002,11 @@ msgstr "" "Die Bearbeitung der NCC-Werkzeugablagen ist abgeschlossen, die Isolierung " "der Kupferelemente ist jedoch unterbrochen" -#: flatcamTools/ToolNonCopperClear.py:2787 +#: flatcamTools/ToolNCC.py:2923 +msgid "NCC Tool started. Reading parameters." +msgstr "NCC Tool gestartet. Parameter lesen." + +#: flatcamTools/ToolNCC.py:3901 msgid "" "Try to use the Buffering Type = Full in Preferences -> Gerber General. " "Reload the Gerber file after this change." @@ -15172,43 +16014,43 @@ msgstr "" "Versuchen Sie, den Puffertyp = Voll in Einstellungen -> Allgemein zu " "verwenden. Laden Sie die Gerber-Datei nach dieser Änderung neu." -#: flatcamTools/ToolOptimal.py:79 +#: flatcamTools/ToolOptimal.py:80 msgid "Number of decimals kept for found distances." msgstr "Anzahl der Dezimalstellen für gefundene Entfernungen." -#: flatcamTools/ToolOptimal.py:87 +#: flatcamTools/ToolOptimal.py:88 msgid "Minimum distance" msgstr "Mindestabstand" -#: flatcamTools/ToolOptimal.py:88 +#: flatcamTools/ToolOptimal.py:89 msgid "Display minimum distance between copper features." msgstr "Zeigt den Mindestabstand zwischen Kupferelementen an." -#: flatcamTools/ToolOptimal.py:92 +#: flatcamTools/ToolOptimal.py:93 msgid "Determined" msgstr "Entschlossen" -#: flatcamTools/ToolOptimal.py:106 +#: flatcamTools/ToolOptimal.py:107 msgid "Occurring" msgstr "Vorkommen" -#: flatcamTools/ToolOptimal.py:107 +#: flatcamTools/ToolOptimal.py:108 msgid "How many times this minimum is found." msgstr "Wie oft wird dieses Minimum gefunden." -#: flatcamTools/ToolOptimal.py:113 +#: flatcamTools/ToolOptimal.py:114 msgid "Minimum points coordinates" msgstr "Minimale Punktkoordinaten" -#: flatcamTools/ToolOptimal.py:114 flatcamTools/ToolOptimal.py:120 +#: flatcamTools/ToolOptimal.py:115 flatcamTools/ToolOptimal.py:121 msgid "Coordinates for points where minimum distance was found." msgstr "Koordinaten für Punkte, an denen der Mindestabstand gefunden wurde." -#: flatcamTools/ToolOptimal.py:133 flatcamTools/ToolOptimal.py:209 +#: flatcamTools/ToolOptimal.py:134 flatcamTools/ToolOptimal.py:210 msgid "Jump to selected position" msgstr "Zur ausgewählten Position springen" -#: flatcamTools/ToolOptimal.py:135 flatcamTools/ToolOptimal.py:211 +#: flatcamTools/ToolOptimal.py:136 flatcamTools/ToolOptimal.py:212 msgid "" "Select a position in the Locations text box and then\n" "click this button." @@ -15216,11 +16058,11 @@ msgstr "" "Wählen Sie eine Position im Textfeld Standorte und dann\n" "Klicken Sie auf diese Schaltfläche." -#: flatcamTools/ToolOptimal.py:143 +#: flatcamTools/ToolOptimal.py:144 msgid "Other distances" msgstr "Andere Entfernungen" -#: flatcamTools/ToolOptimal.py:144 +#: flatcamTools/ToolOptimal.py:145 msgid "" "Will display other distances in the Gerber file ordered from\n" "the minimum to the maximum, not including the absolute minimum." @@ -15228,13 +16070,13 @@ msgstr "" "Zeigt andere Entfernungen in der von bestellten Gerber-Datei an\n" "das Minimum bis zum Maximum, ohne das absolute Minimum." -#: flatcamTools/ToolOptimal.py:149 +#: flatcamTools/ToolOptimal.py:150 msgid "Other distances points coordinates" msgstr "Andere Entfernungen Punkte Koordinaten" -#: flatcamTools/ToolOptimal.py:150 flatcamTools/ToolOptimal.py:164 -#: flatcamTools/ToolOptimal.py:171 flatcamTools/ToolOptimal.py:188 -#: flatcamTools/ToolOptimal.py:195 +#: flatcamTools/ToolOptimal.py:151 flatcamTools/ToolOptimal.py:165 +#: flatcamTools/ToolOptimal.py:172 flatcamTools/ToolOptimal.py:189 +#: flatcamTools/ToolOptimal.py:196 msgid "" "Other distances and the coordinates for points\n" "where the distance was found." @@ -15242,19 +16084,19 @@ msgstr "" "Andere Entfernungen und die Koordinaten für Punkte\n" "wo die Entfernung gefunden wurde." -#: flatcamTools/ToolOptimal.py:163 +#: flatcamTools/ToolOptimal.py:164 msgid "Gerber distances" msgstr "Gerber Entfernungen" -#: flatcamTools/ToolOptimal.py:187 +#: flatcamTools/ToolOptimal.py:188 msgid "Points coordinates" msgstr "Punktkoordinaten" -#: flatcamTools/ToolOptimal.py:219 +#: flatcamTools/ToolOptimal.py:220 msgid "Find Minimum" msgstr "Minimum finden" -#: flatcamTools/ToolOptimal.py:221 +#: flatcamTools/ToolOptimal.py:222 msgid "" "Calculate the minimum distance between copper features,\n" "this will allow the determination of the right tool to\n" @@ -15264,25 +16106,25 @@ msgstr "" "Dies ermöglicht die Bestimmung des richtigen Werkzeugs\n" "Verwendung zur Isolierung oder zum Löschen von Kupfer." -#: flatcamTools/ToolOptimal.py:346 +#: flatcamTools/ToolOptimal.py:347 msgid "Only Gerber objects can be evaluated." msgstr "Es können nur Gerber-Objekte ausgewertet werden." -#: flatcamTools/ToolOptimal.py:352 +#: flatcamTools/ToolOptimal.py:353 msgid "" "Optimal Tool. Started to search for the minimum distance between copper " "features." msgstr "Optimierer. Sucht Minimalabstand zwischen Kupferbereichen." -#: flatcamTools/ToolOptimal.py:362 +#: flatcamTools/ToolOptimal.py:363 msgid "Optimal Tool. Parsing geometry for aperture" msgstr "Optimales Werkzeug. Analysegeometrie für Blende" -#: flatcamTools/ToolOptimal.py:373 +#: flatcamTools/ToolOptimal.py:374 msgid "Optimal Tool. Creating a buffer for the object geometry." msgstr "Optimales Werkzeug. Erstellen eines Puffers für die Objektgeometrie." -#: flatcamTools/ToolOptimal.py:383 +#: flatcamTools/ToolOptimal.py:384 msgid "" "The Gerber object has one Polygon as geometry.\n" "There are no distances between geometry elements to be found." @@ -15290,18 +16132,18 @@ msgstr "" "Das Gerber-Objekt hat ein Polygon als Geometrie.\n" "Es sind keine Abstände zwischen Geometrieelementen zu finden." -#: flatcamTools/ToolOptimal.py:388 +#: flatcamTools/ToolOptimal.py:389 msgid "" "Optimal Tool. Finding the distances between each two elements. Iterations" msgstr "" "Optimales Werkzeug. Finden der Abstände zwischen jeweils zwei Elementen. " "Iterationen" -#: flatcamTools/ToolOptimal.py:423 +#: flatcamTools/ToolOptimal.py:424 msgid "Optimal Tool. Finding the minimum distance." msgstr "Optimales Werkzeug. Den Mindestabstand finden." -#: flatcamTools/ToolOptimal.py:439 +#: flatcamTools/ToolOptimal.py:440 msgid "Optimal Tool. Finished successfully." msgstr "Optimales Werkzeug. Erfolgreich beendet." @@ -15330,7 +16172,7 @@ msgstr "Öffnen der PDF-Datei fehlgeschlagen." msgid "Rendered" msgstr "Gerendert" -#: flatcamTools/ToolPaint.py:87 +#: flatcamTools/ToolPaint.py:82 msgid "" "Specify the type of object to be painted.\n" "It can be of type: Gerber or Geometry.\n" @@ -15346,7 +16188,7 @@ msgstr "" msgid "Object to be painted." msgstr "Gegenstand gemalt werden." -#: flatcamTools/ToolPaint.py:114 +#: flatcamTools/ToolPaint.py:117 msgid "" "Tools pool from which the algorithm\n" "will pick the ones used for painting." @@ -15354,7 +16196,7 @@ msgstr "" "Toolspool aus dem der Algorithmus\n" "wählt die zum Malen verwendeten aus." -#: flatcamTools/ToolPaint.py:129 +#: flatcamTools/ToolPaint.py:134 msgid "" "This is the Tool Number.\n" "Painting will start with the tool with the biggest diameter,\n" @@ -15370,7 +16212,7 @@ msgstr "" "in der resultierenden Geometrie. Dies liegt daran, dass mit einigen Tools\n" "Diese Funktion kann keine Malgeometrie erstellen." -#: flatcamTools/ToolPaint.py:141 +#: flatcamTools/ToolPaint.py:146 msgid "" "The Tool Type (TT) can be:
    - Circular with 1 ... 4 teeth -> it is " "informative only. Being circular,
    the cut width in material is exactly " @@ -15396,51 +16238,7 @@ msgstr "" "Werkzeugtyps wählt automatisch den Operationstyp in der resultierenden " "Geometrie als Isolation aus." -#: flatcamTools/ToolPaint.py:178 -msgid "Diameter for the new tool." -msgstr "Durchmesser für das neue Werkzeug." - -#: flatcamTools/ToolPaint.py:253 -msgid "" -"Algorithm for painting:\n" -"- Standard: Fixed step inwards.\n" -"- Seed-based: Outwards from seed.\n" -"- Line-based: Parallel lines." -msgstr "" -"Algorithmus zum Malen:\n" -"- Standard: Schritt nach innen fixiert.\n" -"- Saatgutbasiert: Nach außen vom Saatgut.\n" -"- Linienbasiert: Parallele Linien." - -#: flatcamTools/ToolPaint.py:283 -msgid "" -"If checked, use 'rest machining'.\n" -"Basically it will clear copper outside PCB features,\n" -"using the biggest tool and continue with the next tools,\n" -"from bigger to smaller, to clear areas of copper that\n" -"could not be cleared by previous tool, until there is\n" -"no more copper to clear or there are no more tools.\n" -"\n" -"If not checked, use the standard algorithm." -msgstr "" -"Wenn aktiviert, verwenden Sie \"Restbearbeitung\".\n" -"Grundsätzlich wird Kupfer außerhalb der PCB-Merkmale gelöscht.\n" -"das größte Werkzeug verwenden und mit den nächsten Werkzeugen fortfahren,\n" -"von größeren zu kleineren, um Kupferbereiche zu reinigen\n" -"konnte nicht durch vorheriges Werkzeug gelöscht werden, bis es gibt\n" -"kein kupfer mehr zum löschen oder es gibt keine werkzeuge mehr.\n" -"\n" -"Wenn nicht aktiviert, verwenden Sie den Standardalgorithmus." - -#: flatcamTools/ToolPaint.py:307 -msgid "Polygon Selection" -msgstr "Polygon auswahl" - -#: flatcamTools/ToolPaint.py:309 -msgid "All Polygons" -msgstr "Alle Polygone" - -#: flatcamTools/ToolPaint.py:328 +#: flatcamTools/ToolPaint.py:498 msgid "" "The type of FlatCAM object to be used as paint reference.\n" "It can be Gerber, Excellon or Geometry." @@ -15448,11 +16246,7 @@ msgstr "" "Der Typ des FlatCAM-Objekts, das als Malreferenz verwendet werden soll.\n" "Es kann Gerber, Excellon oder Geometry sein." -#: flatcamTools/ToolPaint.py:353 -msgid "Create Paint Geometry" -msgstr "Farbgeometrie erstellen" - -#: flatcamTools/ToolPaint.py:355 +#: flatcamTools/ToolPaint.py:539 msgid "" "- 'Area Selection' - left mouse click to start selection of the area to be " "painted.\n" @@ -15470,72 +16264,99 @@ msgstr "" "- 'Referenzobjekt' - löscht nicht kupferne Objekte innerhalb des Bereichs\n" "von einem anderen Objekt angegeben." -#: flatcamTools/ToolPaint.py:973 -msgid "Paint Tool. Reading parameters." -msgstr "Malwerkzeug. Parameter lesen." - -#: flatcamTools/ToolPaint.py:988 +#: flatcamTools/ToolPaint.py:1388 #, python-format msgid "Could not retrieve object: %s" msgstr "Objekt konnte nicht abgerufen werden: %s" -#: flatcamTools/ToolPaint.py:1002 +#: flatcamTools/ToolPaint.py:1398 msgid "Can't do Paint on MultiGeo geometries" msgstr "Auf MultiGeo-Geometrien kann nicht gemalt werden" -#: flatcamTools/ToolPaint.py:1035 +#: flatcamTools/ToolPaint.py:1428 msgid "Click on a polygon to paint it." msgstr "Klicken Sie auf ein Polygon um es auszufüllen." -#: flatcamTools/ToolPaint.py:1054 +#: flatcamTools/ToolPaint.py:1448 msgid "Click the start point of the paint area." msgstr "Klicken Sie auf den Startpunkt des Malbereichs." -#: flatcamTools/ToolPaint.py:1122 +#: flatcamTools/ToolPaint.py:1513 msgid "Click to add next polygon or right click to start painting." msgstr "" "Klicken Sie, um die nächste Zone hinzuzufügen, oder klicken Sie mit der " "rechten Maustaste um mit dem Ausfüllen zu beginnen." -#: flatcamTools/ToolPaint.py:1135 +#: flatcamTools/ToolPaint.py:1526 msgid "Click to add/remove next polygon or right click to start painting." msgstr "" "Klicken Sie, um die nächste Zone hinzuzufügen oder zu löschen, oder klicken " "Sie mit der rechten Maustaste, um den Vorgang abzuschließen." -#: flatcamTools/ToolPaint.py:1344 flatcamTools/ToolPaint.py:1347 -#: flatcamTools/ToolPaint.py:1349 flatcamTools/ToolPaint.py:1987 -#: flatcamTools/ToolPaint.py:1991 flatcamTools/ToolPaint.py:1994 -#: flatcamTools/ToolPaint.py:2276 flatcamTools/ToolPaint.py:2281 -#: flatcamTools/ToolPaint.py:2284 flatcamTools/ToolPaint.py:2458 -#: flatcamTools/ToolPaint.py:2465 -msgid "Paint Tool." -msgstr "Malwerkzeug." +#: flatcamTools/ToolPaint.py:2024 +msgid "Painting polygon with method: lines." +msgstr "Polygon mit Methode malen: Linien." -#: flatcamTools/ToolPaint.py:1344 flatcamTools/ToolPaint.py:1347 -#: flatcamTools/ToolPaint.py:1349 -msgid "Normal painting polygon task started." -msgstr "Normale Zeichenpolygonaufgabe gestartet." +#: flatcamTools/ToolPaint.py:2036 +msgid "Failed. Painting polygon with method: seed." +msgstr "Gescheitert. Polygon mit Methode malen: Same." -#: flatcamTools/ToolPaint.py:1345 flatcamTools/ToolPaint.py:1706 -#: flatcamTools/ToolPaint.py:1988 flatcamTools/ToolPaint.py:2278 -#: flatcamTools/ToolPaint.py:2460 -msgid "Buffering geometry..." -msgstr "Geometrie puffern..." +#: flatcamTools/ToolPaint.py:2047 +msgid "Failed. Painting polygon with method: standard." +msgstr "Gescheitert. Polygon mit Methode malen: Standard." -#: flatcamTools/ToolPaint.py:1367 -msgid "No polygon found." -msgstr "Kein Polygon gefunden." - -#: flatcamTools/ToolPaint.py:1401 -msgid "Painting polygon..." -msgstr "Polygon malen ..." - -#: flatcamTools/ToolPaint.py:1448 +#: flatcamTools/ToolPaint.py:2063 msgid "Geometry could not be painted completely" msgstr "Geometrie konnte nicht vollständig gemalt werden" -#: flatcamTools/ToolPaint.py:1481 +#: flatcamTools/ToolPaint.py:2092 flatcamTools/ToolPaint.py:2095 +#: flatcamTools/ToolPaint.py:2103 flatcamTools/ToolPaint.py:2406 +#: flatcamTools/ToolPaint.py:2409 flatcamTools/ToolPaint.py:2417 +#: flatcamTools/ToolPaint.py:2905 flatcamTools/ToolPaint.py:2908 +#: flatcamTools/ToolPaint.py:2914 +msgid "Paint Tool." +msgstr "Malwerkzeug." + +#: flatcamTools/ToolPaint.py:2092 flatcamTools/ToolPaint.py:2095 +#: flatcamTools/ToolPaint.py:2103 +msgid "Normal painting polygon task started." +msgstr "Normale Zeichenpolygonaufgabe gestartet." + +#: flatcamTools/ToolPaint.py:2093 flatcamTools/ToolPaint.py:2407 +#: flatcamTools/ToolPaint.py:2906 +msgid "Buffering geometry..." +msgstr "Geometrie puffern..." + +#: flatcamTools/ToolPaint.py:2115 flatcamTools/ToolPaint.py:2424 +#: flatcamTools/ToolPaint.py:2922 +msgid "No polygon found." +msgstr "Kein Polygon gefunden." + +#: flatcamTools/ToolPaint.py:2145 +msgid "Painting polygon..." +msgstr "Polygon malen ..." + +#: flatcamTools/ToolPaint.py:2155 flatcamTools/ToolPaint.py:2470 +#: flatcamTools/ToolPaint.py:2660 flatcamTools/ToolPaint.py:2968 +#: flatcamTools/ToolPaint.py:3147 +msgid "Painting with tool diameter = " +msgstr "Lackieren mit Werkzeugdurchmesser = " + +#: flatcamTools/ToolPaint.py:2156 flatcamTools/ToolPaint.py:2471 +#: flatcamTools/ToolPaint.py:2661 flatcamTools/ToolPaint.py:2969 +#: flatcamTools/ToolPaint.py:3148 +msgid "started" +msgstr "gestartet" + +#: flatcamTools/ToolPaint.py:2181 flatcamTools/ToolPaint.py:2497 +#: flatcamTools/ToolPaint.py:2687 flatcamTools/ToolPaint.py:2995 +#: flatcamTools/ToolPaint.py:3174 +msgid "Margin parameter too big. Tool is not used" +msgstr "Randparameter zu groß. Werkzeug wird nicht verwendet" + +#: flatcamTools/ToolPaint.py:2239 flatcamTools/ToolPaint.py:2566 +#: flatcamTools/ToolPaint.py:2744 flatcamTools/ToolPaint.py:3058 +#: flatcamTools/ToolPaint.py:3236 msgid "" "Could not do Paint. Try a different combination of parameters. Or a " "different strategy of paint" @@ -15543,9 +16364,9 @@ msgstr "" "Konnte nicht malen. Probieren Sie eine andere Kombination von Parametern " "aus. Oder eine andere Strategie der Farbe" -#: flatcamTools/ToolPaint.py:1533 flatcamTools/ToolPaint.py:1967 -#: flatcamTools/ToolPaint.py:2117 flatcamTools/ToolPaint.py:2438 -#: flatcamTools/ToolPaint.py:2592 +#: flatcamTools/ToolPaint.py:2296 flatcamTools/ToolPaint.py:2632 +#: flatcamTools/ToolPaint.py:2801 flatcamTools/ToolPaint.py:3119 +#: flatcamTools/ToolPaint.py:3298 msgid "" "There is no Painting Geometry in the file.\n" "Usually it means that the tool diameter is too big for the painted " @@ -15557,78 +16378,66 @@ msgstr "" "Geometrie zu groß ist.\n" "Ändern Sie die Malparameter und versuchen Sie es erneut." -#: flatcamTools/ToolPaint.py:1539 +#: flatcamTools/ToolPaint.py:2319 +msgid "Paint Single failed." +msgstr "Das Malen eines einzelnen Polygons ist fehlgeschlagen." + +#: flatcamTools/ToolPaint.py:2325 msgid "Paint Single Done." msgstr "Malen Sie Single Done." -#: flatcamTools/ToolPaint.py:1571 flatcamTools/ToolPaint.py:2145 -#: flatcamTools/ToolPaint.py:2620 +#: flatcamTools/ToolPaint.py:2327 flatcamTools/ToolPaint.py:2837 +#: flatcamTools/ToolPaint.py:3334 msgid "Polygon Paint started ..." msgstr "Polygonfarbe gestartet ..." -#: flatcamTools/ToolPaint.py:1623 flatcamTools/ToolPaint.py:2207 +#: flatcamTools/ToolPaint.py:2406 flatcamTools/ToolPaint.py:2409 +#: flatcamTools/ToolPaint.py:2417 +msgid "Paint all polygons task started." +msgstr "Malen Sie alle Polygone Aufgabe gestartet." + +#: flatcamTools/ToolPaint.py:2448 flatcamTools/ToolPaint.py:2946 msgid "Painting polygons..." msgstr "Polygone malen ..." -#: flatcamTools/ToolPaint.py:1705 flatcamTools/ToolPaint.py:1708 -#: flatcamTools/ToolPaint.py:1710 -msgid "Paint Tool. Normal painting all task started." -msgstr "Malwerkzeug. Normales Malen alle Aufgabe gestartet." - -#: flatcamTools/ToolPaint.py:1744 flatcamTools/ToolPaint.py:2023 -#: flatcamTools/ToolPaint.py:2325 flatcamTools/ToolPaint.py:2501 -msgid "Painting with tool diameter = " -msgstr "Lackieren mit Werkzeugdurchmesser = " - -#: flatcamTools/ToolPaint.py:1747 flatcamTools/ToolPaint.py:2026 -#: flatcamTools/ToolPaint.py:2328 flatcamTools/ToolPaint.py:2504 -msgid "started" -msgstr "gestartet" - -#: flatcamTools/ToolPaint.py:1976 +#: flatcamTools/ToolPaint.py:2641 msgid "Paint All Done." msgstr "Malen Sie alles fertig." -#: flatcamTools/ToolPaint.py:1987 flatcamTools/ToolPaint.py:1991 -#: flatcamTools/ToolPaint.py:1994 -msgid "Rest machining painting all task started." -msgstr "Restbearbeitung Lackieren alle Aufgabe gestartet." - -#: flatcamTools/ToolPaint.py:2072 flatcamTools/ToolPaint.py:2388 -#: flatcamTools/ToolPaint.py:2548 -msgid "" -"Could not do Paint All. Try a different combination of parameters. Or a " -"different Method of paint" -msgstr "" -"Paint All konnte nicht ausgeführt werden. Probieren Sie eine andere " -"Kombination von Parametern aus. Oder eine andere Farbmethode" - -#: flatcamTools/ToolPaint.py:2126 flatcamTools/ToolPaint.py:2601 +#: flatcamTools/ToolPaint.py:2810 flatcamTools/ToolPaint.py:3307 msgid "Paint All with Rest-Machining done." msgstr "Malen Sie alles mit Restbearbeitung." -#: flatcamTools/ToolPaint.py:2277 flatcamTools/ToolPaint.py:2281 -#: flatcamTools/ToolPaint.py:2284 -msgid "Normal painting area task started." -msgstr "Normale Malbereichsaufgabe gestartet." +#: flatcamTools/ToolPaint.py:2829 +msgid "Paint All failed." +msgstr "Malen Alle Polygone sind fehlgeschlagen." -#: flatcamTools/ToolPaint.py:2447 +#: flatcamTools/ToolPaint.py:2835 +msgid "Paint Poly All Done." +msgstr "Malen Sie alle Polygone fertig." + +#: flatcamTools/ToolPaint.py:2905 flatcamTools/ToolPaint.py:2908 +#: flatcamTools/ToolPaint.py:2914 +msgid "Painting area task started." +msgstr "Malbereichsaufgabe gestartet." + +#: flatcamTools/ToolPaint.py:3128 msgid "Paint Area Done." msgstr "Lackierbereich fertig." -#: flatcamTools/ToolPaint.py:2459 flatcamTools/ToolPaint.py:2465 -msgid "Rest machining painting area task started." -msgstr "Restbearbeitung Lackierbereich Aufgabe gestartet." +#: flatcamTools/ToolPaint.py:3326 +msgid "Paint Area failed." +msgstr "Lackierbereich fehlgeschlagen." -#: flatcamTools/ToolPaint.py:2462 -msgid "Paint Tool. Rest machining painting area task started." -msgstr "Malwerkzeug. Restbearbeitung Lackierbereich Aufgabe gestartet." +#: flatcamTools/ToolPaint.py:3332 +msgid "Paint Poly Area Done." +msgstr "Lackierbereich fertig." #: flatcamTools/ToolPanelize.py:34 msgid "Panelize PCB" msgstr "Panelisierung PCB" -#: flatcamTools/ToolPanelize.py:68 +#: flatcamTools/ToolPanelize.py:56 msgid "" "Specify the type of object to be panelized\n" "It can be of type: Gerber, Excellon or Geometry.\n" @@ -15640,7 +16449,7 @@ msgstr "" "Die Auswahl hier bestimmt den Objekttyp\n" "im Objekt-Kombinationsfeld." -#: flatcamTools/ToolPanelize.py:83 +#: flatcamTools/ToolPanelize.py:89 msgid "" "Object to be panelized. This means that it will\n" "be duplicated in an array of rows and columns." @@ -15648,11 +16457,11 @@ msgstr "" "Objekt, das in Panels gesetzt werden soll. Dies bedeutet, dass es wird\n" "in einem Array von Zeilen und Spalten dupliziert werden." -#: flatcamTools/ToolPanelize.py:96 +#: flatcamTools/ToolPanelize.py:102 msgid "Penelization Reference" msgstr "Penelisierungshinweis" -#: flatcamTools/ToolPanelize.py:98 +#: flatcamTools/ToolPanelize.py:104 msgid "" "Choose the reference for panelization:\n" "- Object = the bounding box of a different object\n" @@ -15672,11 +16481,11 @@ msgstr "" "Zu diesem Referenzobjekt gehört daher die Beibehaltung der getäfelten\n" "Objekte synchronisieren." -#: flatcamTools/ToolPanelize.py:121 +#: flatcamTools/ToolPanelize.py:125 msgid "Box Type" msgstr "Box-Typ" -#: flatcamTools/ToolPanelize.py:123 +#: flatcamTools/ToolPanelize.py:127 msgid "" "Specify the type of object to be used as an container for\n" "panelization. It can be: Gerber or Geometry type.\n" @@ -15688,7 +16497,7 @@ msgstr "" "Die Auswahl hier bestimmt den Objekttyp\n" "im Kombinationsfeld Box-Objekt." -#: flatcamTools/ToolPanelize.py:138 +#: flatcamTools/ToolPanelize.py:141 msgid "" "The actual object that is used a container for the\n" " selected object that is to be panelized." @@ -15696,11 +16505,11 @@ msgstr "" "Das eigentliche Objekt, für das ein Container verwendet wird\n" "ausgewähltes Objekt, das in Panelisiert werden soll." -#: flatcamTools/ToolPanelize.py:144 +#: flatcamTools/ToolPanelize.py:147 msgid "Panel Data" msgstr "Paneldaten" -#: flatcamTools/ToolPanelize.py:146 +#: flatcamTools/ToolPanelize.py:149 msgid "" "This informations will shape the resulting panel.\n" "The number of rows and columns will set how many\n" @@ -15716,7 +16525,7 @@ msgstr "" "Die Abstände bestimmen den Abstand zwischen zwei Elementen\n" "Elemente des Panel-Arrays." -#: flatcamTools/ToolPanelize.py:205 +#: flatcamTools/ToolPanelize.py:208 msgid "" "Choose the type of object for the panel object:\n" "- Geometry\n" @@ -15726,15 +16535,15 @@ msgstr "" "- Geometrie\n" "- Gerber" -#: flatcamTools/ToolPanelize.py:213 +#: flatcamTools/ToolPanelize.py:216 msgid "Constrain panel within" msgstr "Panel einschränken innerhalb" -#: flatcamTools/ToolPanelize.py:249 +#: flatcamTools/ToolPanelize.py:252 msgid "Panelize Object" msgstr "Panelize Objekt" -#: flatcamTools/ToolPanelize.py:251 flatcamTools/ToolRulesCheck.py:492 +#: flatcamTools/ToolPanelize.py:254 flatcamTools/ToolRulesCheck.py:501 msgid "" "Panelize the specified object around the specified box.\n" "In other words it creates multiple copies of the source object,\n" @@ -15744,33 +16553,33 @@ msgstr "" "Mit anderen Worten, es erstellt mehrere Kopien des Quellobjekts,\n" "in einem 2D-Array von Zeilen und Spalten angeordnet." -#: flatcamTools/ToolPanelize.py:319 +#: flatcamTools/ToolPanelize.py:322 msgid "Panel. Tool" msgstr "Platte Werkzeug" -#: flatcamTools/ToolPanelize.py:448 +#: flatcamTools/ToolPanelize.py:460 msgid "Columns or Rows are zero value. Change them to a positive integer." msgstr "" "Spalten oder Zeilen haben den Wert Null. Ändern Sie sie in eine positive " "Ganzzahl." -#: flatcamTools/ToolPanelize.py:485 +#: flatcamTools/ToolPanelize.py:497 msgid "Generating panel ... " msgstr "Panel wird erstellt ... " -#: flatcamTools/ToolPanelize.py:768 +#: flatcamTools/ToolPanelize.py:777 msgid "Generating panel ... Adding the Gerber code." msgstr "Panel wird generiert ... Hinzufügen des Gerber-Codes." -#: flatcamTools/ToolPanelize.py:779 +#: flatcamTools/ToolPanelize.py:788 msgid "Generating panel... Spawning copies" msgstr "Panel wird erstellt ... Kopien werden erstellt" -#: flatcamTools/ToolPanelize.py:786 +#: flatcamTools/ToolPanelize.py:795 msgid "Panel done..." msgstr "Panel fertig ..." -#: flatcamTools/ToolPanelize.py:789 +#: flatcamTools/ToolPanelize.py:798 #, python-brace-format msgid "" "{text} Too big for the constrain area. Final panel has {col} columns and " @@ -15779,7 +16588,7 @@ msgstr "" "{text} Zu groß für den Einschränkungsbereich. Das letzte Panel enthält {col} " "Spalten und {row} Zeilen" -#: flatcamTools/ToolPanelize.py:798 +#: flatcamTools/ToolPanelize.py:807 msgid "Panel created successfully." msgstr "Panel erfolgreich erstellt." @@ -15920,163 +16729,213 @@ msgstr "PcbWizard-INF-Datei wurde geladen." msgid "Main PcbWizard Excellon file loaded." msgstr "Haupt-PcbWizard Excellon-Datei geladen." -#: flatcamTools/ToolPcbWizard.py:431 +#: flatcamTools/ToolPcbWizard.py:428 msgid "Cannot parse file" msgstr "Datei kann nicht analysiert werden" -#: flatcamTools/ToolPcbWizard.py:456 +#: flatcamTools/ToolPcbWizard.py:452 msgid "Importing Excellon." msgstr "Excellon importieren." -#: flatcamTools/ToolPcbWizard.py:463 +#: flatcamTools/ToolPcbWizard.py:459 msgid "Import Excellon file failed." msgstr "Import der Excellon-Datei ist fehlgeschlagen." -#: flatcamTools/ToolPcbWizard.py:471 +#: flatcamTools/ToolPcbWizard.py:467 msgid "Imported" msgstr "Importiert" -#: flatcamTools/ToolPcbWizard.py:475 +#: flatcamTools/ToolPcbWizard.py:471 msgid "Excellon merging is in progress. Please wait..." msgstr "Das Zusammenführen von Excellons ist im Gange. Warten Sie mal..." -#: flatcamTools/ToolPcbWizard.py:478 +#: flatcamTools/ToolPcbWizard.py:474 msgid "The imported Excellon file is None." msgstr "Die importierte Excellon-Datei ist Keine." -#: flatcamTools/ToolProperties.py:119 -msgid "Properties Tool was not displayed. No object selected." -msgstr "Das Eigenschaften-Tool wurde nicht angezeigt. Kein Objekt ausgewählt." - -#: flatcamTools/ToolProperties.py:134 +#: flatcamTools/ToolProperties.py:131 msgid "Object Properties are displayed." msgstr "Objekteigenschaften werden angezeigt." -#: flatcamTools/ToolProperties.py:135 +#: flatcamTools/ToolProperties.py:136 msgid "Properties Tool" msgstr "Eigenschaftenwerkzeug" -#: flatcamTools/ToolProperties.py:149 +#: flatcamTools/ToolProperties.py:150 msgid "TYPE" msgstr "TYP" -#: flatcamTools/ToolProperties.py:150 +#: flatcamTools/ToolProperties.py:151 msgid "NAME" msgstr "NAME" -#: flatcamTools/ToolProperties.py:151 +#: flatcamTools/ToolProperties.py:153 msgid "Dimensions" msgstr "Dimensionen" -#: flatcamTools/ToolProperties.py:165 -msgid "Others" -msgstr "Andere" - -#: flatcamTools/ToolProperties.py:172 +#: flatcamTools/ToolProperties.py:181 msgid "Geo Type" msgstr "Geo-Typ" -#: flatcamTools/ToolProperties.py:173 +#: flatcamTools/ToolProperties.py:184 msgid "Single-Geo" msgstr "Einzehln Geo" -#: flatcamTools/ToolProperties.py:173 +#: flatcamTools/ToolProperties.py:185 msgid "Multi-Geo" msgstr "Mehrfache Geo" -#: flatcamTools/ToolProperties.py:181 +#: flatcamTools/ToolProperties.py:196 msgid "Calculating dimensions ... Please wait." msgstr "Bemaßung wird berechnet ... Bitte warten." -#: flatcamTools/ToolProperties.py:321 flatcamTools/ToolProperties.py:325 -#: flatcamTools/ToolProperties.py:327 +#: flatcamTools/ToolProperties.py:339 flatcamTools/ToolProperties.py:343 +#: flatcamTools/ToolProperties.py:345 msgid "Inch" msgstr "Zoll" -#: flatcamTools/ToolProperties.py:321 flatcamTools/ToolProperties.py:326 -#: flatcamTools/ToolProperties.py:328 +#: flatcamTools/ToolProperties.py:339 flatcamTools/ToolProperties.py:344 +#: flatcamTools/ToolProperties.py:346 msgid "Metric" msgstr "Metrisch" -#: flatcamTools/ToolProperties.py:401 flatcamTools/ToolProperties.py:459 +#: flatcamTools/ToolProperties.py:421 flatcamTools/ToolProperties.py:486 msgid "Drills number" msgstr "Bohrernummer" -#: flatcamTools/ToolProperties.py:402 flatcamTools/ToolProperties.py:461 +#: flatcamTools/ToolProperties.py:422 flatcamTools/ToolProperties.py:488 msgid "Slots number" msgstr "Slotnummer" -#: flatcamTools/ToolProperties.py:404 +#: flatcamTools/ToolProperties.py:424 msgid "Drills total number:" msgstr "Gesamtzahl Bohrer:" -#: flatcamTools/ToolProperties.py:405 +#: flatcamTools/ToolProperties.py:425 msgid "Slots total number:" msgstr "Gesamtzahl der slots:" -#: flatcamTools/ToolProperties.py:411 flatcamTools/ToolProperties.py:426 -#: flatcamTools/ToolProperties.py:429 flatcamTools/ToolProperties.py:432 -#: flatcamTools/ToolProperties.py:456 +#: flatcamTools/ToolProperties.py:452 flatcamTools/ToolProperties.py:455 +#: flatcamTools/ToolProperties.py:458 flatcamTools/ToolProperties.py:483 msgid "Present" msgstr "Vorhanden" -#: flatcamTools/ToolProperties.py:427 flatcamTools/ToolProperties.py:457 +#: flatcamTools/ToolProperties.py:453 flatcamTools/ToolProperties.py:484 msgid "Solid Geometry" msgstr "Festkörpergeometrie" -#: flatcamTools/ToolProperties.py:430 +#: flatcamTools/ToolProperties.py:456 msgid "GCode Text" msgstr "GCode Text" -#: flatcamTools/ToolProperties.py:433 +#: flatcamTools/ToolProperties.py:459 msgid "GCode Geometry" msgstr "GCode Geometrie" -#: flatcamTools/ToolProperties.py:435 +#: flatcamTools/ToolProperties.py:462 msgid "Data" msgstr "Daten" -#: flatcamTools/ToolProperties.py:468 +#: flatcamTools/ToolProperties.py:495 msgid "Depth of Cut" msgstr "Tiefe des Schnitts" -#: flatcamTools/ToolProperties.py:480 +#: flatcamTools/ToolProperties.py:507 msgid "Clearance Height" msgstr "Freilaufhöhe" -#: flatcamTools/ToolProperties.py:512 +#: flatcamTools/ToolProperties.py:539 msgid "Routing time" msgstr "Berechnungszeit" -#: flatcamTools/ToolProperties.py:519 +#: flatcamTools/ToolProperties.py:546 msgid "Travelled distance" msgstr "Zurückgelegte Strecke" -#: flatcamTools/ToolProperties.py:560 +#: flatcamTools/ToolProperties.py:564 msgid "Width" msgstr "Breite" -#: flatcamTools/ToolProperties.py:566 flatcamTools/ToolProperties.py:574 +#: flatcamTools/ToolProperties.py:570 flatcamTools/ToolProperties.py:578 msgid "Box Area" msgstr "Feld Bereich" -#: flatcamTools/ToolProperties.py:569 flatcamTools/ToolProperties.py:577 +#: flatcamTools/ToolProperties.py:573 flatcamTools/ToolProperties.py:581 msgid "Convex_Hull Area" msgstr "Konvexer Rumpfbereich" -#: flatcamTools/ToolProperties.py:583 flatcamTools/ToolProperties.py:585 +#: flatcamTools/ToolProperties.py:588 flatcamTools/ToolProperties.py:591 msgid "Copper Area" msgstr "Kupferareal" -#: flatcamTools/ToolQRCode.py:79 +#: flatcamTools/ToolPunchGerber.py:30 flatcamTools/ToolPunchGerber.py:323 +msgid "Punch Gerber" +msgstr "Schlag Gerber" + +#: flatcamTools/ToolPunchGerber.py:65 +msgid "Gerber into which to punch holes" +msgstr "Gerber, in den Löcher gestanzt werden können" + +#: flatcamTools/ToolPunchGerber.py:85 +msgid "ALL" +msgstr "ALLE" + +#: flatcamTools/ToolPunchGerber.py:166 +msgid "" +"Remove the geometry of Excellon from the Gerber to create the holes in pads." +msgstr "" +"Entfernen Sie die Geometrie von Excellon aus dem Gerber, um die Löcher in " +"den Pads zu erstellen." + +#: flatcamTools/ToolPunchGerber.py:325 +msgid "" +"Create a Gerber object from the selected object, within\n" +"the specified box." +msgstr "" +"Erstellen Sie innerhalb des ausgewählten Objekts ein Gerber-Objekt\n" +"das angegebene Feld." + +#: flatcamTools/ToolPunchGerber.py:425 +msgid "Punch Tool" +msgstr "Stanzwerkzeug" + +#: flatcamTools/ToolPunchGerber.py:599 +msgid "The value of the fixed diameter is 0.0. Aborting." +msgstr "Der Wert des festen Durchmessers beträgt 0,0. Abbruch." + +#: flatcamTools/ToolPunchGerber.py:607 +msgid "" +" Could not generate punched hole Gerber because the punch hole sizeis bigger " +"than some of the apertures in the Gerber object." +msgstr "" +"Stanzloch Gerber konnte nicht generiert werden, da die Stanzlochgröße größer " +"ist als einige der Öffnungen im Gerber-Objekt." + +#: flatcamTools/ToolPunchGerber.py:619 +msgid "" +"Could not generate punched hole Gerber because the punch hole sizeis bigger " +"than some of the apertures in the Gerber object." +msgstr "" +"Stanzloch Gerber konnte nicht generiert werden, da die Stanzlochgröße größer " +"ist als einige der Öffnungen im Gerber-Objekt." + +#: flatcamTools/ToolPunchGerber.py:656 +msgid "" +"Could not generate punched hole Gerber because the newly created object " +"geometry is the same as the one in the source object geometry..." +msgstr "" +"Stanzloch Gerber konnte nicht generiert werden, da die neu erstellte " +"Objektgeometrie mit der in der Quellobjektgeometrie übereinstimmt ..." + +#: flatcamTools/ToolQRCode.py:80 msgid "Gerber Object to which the QRCode will be added." msgstr "Gerber-Objekt zu dem der QRCode hinzugefügt wird." -#: flatcamTools/ToolQRCode.py:92 +#: flatcamTools/ToolQRCode.py:93 msgid "QRCode Parameters" msgstr "QRCode Parameter" -#: flatcamTools/ToolQRCode.py:94 +#: flatcamTools/ToolQRCode.py:95 msgid "The parameters used to shape the QRCode." msgstr "Parameter zum Aussehen des QRCodes." @@ -16120,31 +16979,27 @@ msgstr "QRCode einfügen" msgid "Create the QRCode object." msgstr "Erzeugen des QRCode Objektes." -#: flatcamTools/ToolQRCode.py:413 flatcamTools/ToolQRCode.py:748 -#: flatcamTools/ToolQRCode.py:797 +#: flatcamTools/ToolQRCode.py:415 flatcamTools/ToolQRCode.py:750 +#: flatcamTools/ToolQRCode.py:799 msgid "Cancelled. There is no QRCode Data in the text box." msgstr "Abgebrochen. Es befindet sich kein QRCode im Feld." -#: flatcamTools/ToolQRCode.py:432 +#: flatcamTools/ToolQRCode.py:434 msgid "Generating QRCode geometry" msgstr "QRCode Geometrie erzeugen" -#: flatcamTools/ToolQRCode.py:472 +#: flatcamTools/ToolQRCode.py:474 msgid "Click on the Destination point ..." msgstr "Klicken Sie auf den Zielpunkt ..." -#: flatcamTools/ToolQRCode.py:587 +#: flatcamTools/ToolQRCode.py:589 msgid "QRCode Tool done." msgstr "QRCode Tool fertig." -#: flatcamTools/ToolQRCode.py:780 flatcamTools/ToolQRCode.py:784 +#: flatcamTools/ToolQRCode.py:782 flatcamTools/ToolQRCode.py:786 msgid "Export PNG" msgstr "PNG exportieren" -#: flatcamTools/ToolQRCode.py:789 -msgid " Export PNG cancelled." -msgstr "Export zu PNG abgebrochen." - #: flatcamTools/ToolRulesCheck.py:33 msgid "Check Rules" msgstr "Überprüfen Sie die Regeln" @@ -16157,72 +17012,72 @@ msgstr "Gerber-Dateien" msgid "Gerber objects for which to check rules." msgstr "Gerber-Objekte, für die Regeln überprüft werden sollen." -#: flatcamTools/ToolRulesCheck.py:77 +#: flatcamTools/ToolRulesCheck.py:78 msgid "Top" msgstr "Oberst" -#: flatcamTools/ToolRulesCheck.py:79 +#: flatcamTools/ToolRulesCheck.py:80 msgid "The Top Gerber Copper object for which rules are checked." msgstr "Das Top Gerber Copper-Objekt, für das Regeln überprüft werden." -#: flatcamTools/ToolRulesCheck.py:94 +#: flatcamTools/ToolRulesCheck.py:96 msgid "Bottom" msgstr "Unterseite" -#: flatcamTools/ToolRulesCheck.py:96 +#: flatcamTools/ToolRulesCheck.py:98 msgid "The Bottom Gerber Copper object for which rules are checked." msgstr "Das untere Gerber Copper-Objekt, für das Regeln überprüft werden." -#: flatcamTools/ToolRulesCheck.py:111 +#: flatcamTools/ToolRulesCheck.py:114 msgid "SM Top" msgstr "SM Oberst" -#: flatcamTools/ToolRulesCheck.py:113 +#: flatcamTools/ToolRulesCheck.py:116 msgid "The Top Gerber Solder Mask object for which rules are checked." msgstr "Das oberste Gerber-Lötmaskenobjekt, für das Regeln überprüft werden." -#: flatcamTools/ToolRulesCheck.py:128 +#: flatcamTools/ToolRulesCheck.py:132 msgid "SM Bottom" msgstr "SM unten" -#: flatcamTools/ToolRulesCheck.py:130 +#: flatcamTools/ToolRulesCheck.py:134 msgid "The Bottom Gerber Solder Mask object for which rules are checked." msgstr "Das untere Gerber-Lötmaskenobjekt, für das Regeln überprüft werden." -#: flatcamTools/ToolRulesCheck.py:145 +#: flatcamTools/ToolRulesCheck.py:150 msgid "Silk Top" msgstr "Siebdruck Oben" -#: flatcamTools/ToolRulesCheck.py:147 +#: flatcamTools/ToolRulesCheck.py:152 msgid "The Top Gerber Silkscreen object for which rules are checked." msgstr "Das oberste Gerber-Siebdruck-Objekt, für das Regeln überprüft werden." -#: flatcamTools/ToolRulesCheck.py:162 +#: flatcamTools/ToolRulesCheck.py:168 msgid "Silk Bottom" msgstr "Siebdruck unten" -#: flatcamTools/ToolRulesCheck.py:164 +#: flatcamTools/ToolRulesCheck.py:170 msgid "The Bottom Gerber Silkscreen object for which rules are checked." msgstr "Das untere Gerber-Siebdruck-Objekt, für das Regeln überprüft werden." -#: flatcamTools/ToolRulesCheck.py:181 +#: flatcamTools/ToolRulesCheck.py:188 msgid "The Gerber Outline (Cutout) object for which rules are checked." msgstr "" "Das Gerber-Gliederungsobjekt (Ausschnitt), für das Regeln überprüft werden." -#: flatcamTools/ToolRulesCheck.py:192 +#: flatcamTools/ToolRulesCheck.py:199 msgid "Excellon Objects" msgstr "Excellon-Objekte" -#: flatcamTools/ToolRulesCheck.py:194 +#: flatcamTools/ToolRulesCheck.py:201 msgid "Excellon objects for which to check rules." msgstr "Excellon-Objekte, für die Regeln überprüft werden sollen." -#: flatcamTools/ToolRulesCheck.py:205 +#: flatcamTools/ToolRulesCheck.py:213 msgid "Excellon 1" msgstr "Excellon 1" -#: flatcamTools/ToolRulesCheck.py:207 +#: flatcamTools/ToolRulesCheck.py:215 msgid "" "Excellon object for which to check rules.\n" "Holds the plated holes or a general Excellon file content." @@ -16230,11 +17085,11 @@ msgstr "" "Excellon-Objekt, für das Regeln überprüft werden sollen.\n" "Enthält die plattierten Löcher oder einen allgemeinen Excellon-Dateiinhalt." -#: flatcamTools/ToolRulesCheck.py:223 +#: flatcamTools/ToolRulesCheck.py:232 msgid "Excellon 2" msgstr "Excellon 2" -#: flatcamTools/ToolRulesCheck.py:225 +#: flatcamTools/ToolRulesCheck.py:234 msgid "" "Excellon object for which to check rules.\n" "Holds the non-plated holes." @@ -16242,36 +17097,36 @@ msgstr "" "Excellon-Objekt, für das Regeln überprüft werden sollen.\n" "Hält die nicht plattierten Löcher." -#: flatcamTools/ToolRulesCheck.py:238 +#: flatcamTools/ToolRulesCheck.py:247 msgid "All Rules" msgstr "Alle Regeln" -#: flatcamTools/ToolRulesCheck.py:240 +#: flatcamTools/ToolRulesCheck.py:249 msgid "This check/uncheck all the rules below." msgstr "" "Hiermit können Sie alle unten aufgeführten Regeln aktivieren / deaktivieren." -#: flatcamTools/ToolRulesCheck.py:490 +#: flatcamTools/ToolRulesCheck.py:499 msgid "Run Rules Check" msgstr "Führen Sie die Regelprüfung durch" -#: flatcamTools/ToolRulesCheck.py:1149 flatcamTools/ToolRulesCheck.py:1209 -#: flatcamTools/ToolRulesCheck.py:1246 flatcamTools/ToolRulesCheck.py:1318 -#: flatcamTools/ToolRulesCheck.py:1372 flatcamTools/ToolRulesCheck.py:1410 -#: flatcamTools/ToolRulesCheck.py:1475 +#: flatcamTools/ToolRulesCheck.py:1158 flatcamTools/ToolRulesCheck.py:1218 +#: flatcamTools/ToolRulesCheck.py:1255 flatcamTools/ToolRulesCheck.py:1327 +#: flatcamTools/ToolRulesCheck.py:1381 flatcamTools/ToolRulesCheck.py:1419 +#: flatcamTools/ToolRulesCheck.py:1484 msgid "Value is not valid." msgstr "Wert ist ungültig." -#: flatcamTools/ToolRulesCheck.py:1163 +#: flatcamTools/ToolRulesCheck.py:1172 msgid "TOP -> Copper to Copper clearance" msgstr "TOP -> Kupfer zu Kupfer Abstand" -#: flatcamTools/ToolRulesCheck.py:1174 +#: flatcamTools/ToolRulesCheck.py:1183 msgid "BOTTOM -> Copper to Copper clearance" msgstr "UNTEN -> Kupfer zu Kupfer Abstand" -#: flatcamTools/ToolRulesCheck.py:1179 flatcamTools/ToolRulesCheck.py:1273 -#: flatcamTools/ToolRulesCheck.py:1437 +#: flatcamTools/ToolRulesCheck.py:1188 flatcamTools/ToolRulesCheck.py:1282 +#: flatcamTools/ToolRulesCheck.py:1446 msgid "" "At least one Gerber object has to be selected for this rule but none is " "selected." @@ -16279,13 +17134,13 @@ msgstr "" "Für diese Regel muss mindestens ein Gerber-Objekt ausgewählt sein, aber " "keines." -#: flatcamTools/ToolRulesCheck.py:1215 +#: flatcamTools/ToolRulesCheck.py:1224 msgid "" "One of the copper Gerber objects or the Outline Gerber object is not valid." msgstr "" "Eines der Kupfer-Gerber-Objekte oder das Umriss-Gerber-Objekt ist ungültig." -#: flatcamTools/ToolRulesCheck.py:1228 flatcamTools/ToolRulesCheck.py:1392 +#: flatcamTools/ToolRulesCheck.py:1237 flatcamTools/ToolRulesCheck.py:1401 msgid "" "Outline Gerber object presence is mandatory for this rule but it is not " "selected." @@ -16293,31 +17148,31 @@ msgstr "" "Das Vorhandensein von Gerber-Objekten ist für diese Regel obligatorisch, " "jedoch nicht ausgewählt." -#: flatcamTools/ToolRulesCheck.py:1245 flatcamTools/ToolRulesCheck.py:1272 +#: flatcamTools/ToolRulesCheck.py:1254 flatcamTools/ToolRulesCheck.py:1281 msgid "Silk to Silk clearance" msgstr "Siebdruck zu siebdruck freiheit" -#: flatcamTools/ToolRulesCheck.py:1258 +#: flatcamTools/ToolRulesCheck.py:1267 msgid "TOP -> Silk to Silk clearance" msgstr "TOP -> Siebdruck zu Siebdruck Abstand" -#: flatcamTools/ToolRulesCheck.py:1268 +#: flatcamTools/ToolRulesCheck.py:1277 msgid "BOTTOM -> Silk to Silk clearance" msgstr "UNTEN -> Abstand von Siebdruck zu Siebdruck" -#: flatcamTools/ToolRulesCheck.py:1324 +#: flatcamTools/ToolRulesCheck.py:1333 msgid "One or more of the Gerber objects is not valid." msgstr "Eines oder mehrere der Gerber-Objekte sind ungültig." -#: flatcamTools/ToolRulesCheck.py:1332 +#: flatcamTools/ToolRulesCheck.py:1341 msgid "TOP -> Silk to Solder Mask Clearance" msgstr "TOP -> Abstand von Siebdruck zu Lötmaske" -#: flatcamTools/ToolRulesCheck.py:1338 +#: flatcamTools/ToolRulesCheck.py:1347 msgid "BOTTOM -> Silk to Solder Mask Clearance" msgstr "UNTEN -> Abstand von Siebdruck zu Lötmaske" -#: flatcamTools/ToolRulesCheck.py:1342 +#: flatcamTools/ToolRulesCheck.py:1351 msgid "" "Both Silk and Solder Mask Gerber objects has to be either both Top or both " "Bottom." @@ -16325,63 +17180,63 @@ msgstr "" "Sowohl Siebdruck- als auch Lötmasken-Gerber-Objekte müssen entweder beide " "oben oder beide unten sein." -#: flatcamTools/ToolRulesCheck.py:1378 +#: flatcamTools/ToolRulesCheck.py:1387 msgid "" "One of the Silk Gerber objects or the Outline Gerber object is not valid." msgstr "" "Eines der Siebdruck-Gerber-Objekte oder das Gliederung-Gerber-Objekt ist " "ungültig." -#: flatcamTools/ToolRulesCheck.py:1422 +#: flatcamTools/ToolRulesCheck.py:1431 msgid "TOP -> Minimum Solder Mask Sliver" msgstr "TOP -> Minimum Lötmaskenband" -#: flatcamTools/ToolRulesCheck.py:1432 +#: flatcamTools/ToolRulesCheck.py:1441 msgid "BOTTOM -> Minimum Solder Mask Sliver" msgstr "UNTEN-> Minimum Lötmaskenband" -#: flatcamTools/ToolRulesCheck.py:1481 +#: flatcamTools/ToolRulesCheck.py:1490 msgid "One of the Copper Gerber objects or the Excellon objects is not valid." msgstr "" "Eines der Kupfer-Gerber-Objekte oder der Excellon-Objekte ist ungültig." -#: flatcamTools/ToolRulesCheck.py:1497 +#: flatcamTools/ToolRulesCheck.py:1506 msgid "" "Excellon object presence is mandatory for this rule but none is selected." msgstr "" "Das Vorhandensein von Excellon-Objekten ist für diese Regel obligatorisch, " "es ist jedoch keine ausgewählt." -#: flatcamTools/ToolRulesCheck.py:1570 flatcamTools/ToolRulesCheck.py:1583 -#: flatcamTools/ToolRulesCheck.py:1594 flatcamTools/ToolRulesCheck.py:1607 +#: flatcamTools/ToolRulesCheck.py:1579 flatcamTools/ToolRulesCheck.py:1592 +#: flatcamTools/ToolRulesCheck.py:1603 flatcamTools/ToolRulesCheck.py:1616 msgid "STATUS" msgstr "STATUS" -#: flatcamTools/ToolRulesCheck.py:1573 flatcamTools/ToolRulesCheck.py:1597 +#: flatcamTools/ToolRulesCheck.py:1582 flatcamTools/ToolRulesCheck.py:1606 msgid "FAILED" msgstr "GESCHEITERT" -#: flatcamTools/ToolRulesCheck.py:1586 flatcamTools/ToolRulesCheck.py:1610 +#: flatcamTools/ToolRulesCheck.py:1595 flatcamTools/ToolRulesCheck.py:1619 msgid "PASSED" msgstr "BESTANDEN" -#: flatcamTools/ToolRulesCheck.py:1587 flatcamTools/ToolRulesCheck.py:1611 +#: flatcamTools/ToolRulesCheck.py:1596 flatcamTools/ToolRulesCheck.py:1620 msgid "Violations: There are no violations for the current rule." msgstr "Verstöße: Für die aktuelle Regel gibt es keine Verstöße." -#: flatcamTools/ToolShell.py:70 flatcamTools/ToolShell.py:72 -msgid "...proccessing..." +#: flatcamTools/ToolShell.py:72 flatcamTools/ToolShell.py:74 +msgid "...processing..." msgstr "...wird bearbeitet..." -#: flatcamTools/ToolSolderPaste.py:37 +#: flatcamTools/ToolSolderPaste.py:38 msgid "Solder Paste Tool" msgstr "Lötpaste-Werkzeug" -#: flatcamTools/ToolSolderPaste.py:68 +#: flatcamTools/ToolSolderPaste.py:70 msgid "Gerber Solder paste object. " msgstr "Gerber Lötpastenobjekt. " -#: flatcamTools/ToolSolderPaste.py:75 +#: flatcamTools/ToolSolderPaste.py:77 msgid "" "Tools pool from which the algorithm\n" "will pick the ones used for dispensing solder paste." @@ -16389,7 +17244,7 @@ msgstr "" "Toolspool aus dem der Algorithmus\n" "wählt die für die Lotpaste verwendeten aus." -#: flatcamTools/ToolSolderPaste.py:90 +#: flatcamTools/ToolSolderPaste.py:92 msgid "" "This is the Tool Number.\n" "The solder dispensing will start with the tool with the biggest \n" @@ -16404,7 +17259,7 @@ msgstr "" "vorhanden\n" "Mit Lötpaste gibt die App eine Warnmeldung aus." -#: flatcamTools/ToolSolderPaste.py:97 +#: flatcamTools/ToolSolderPaste.py:99 msgid "" "Nozzle tool Diameter. It's value (in current FlatCAM units)\n" "is the width of the solder paste dispensed." @@ -16412,11 +17267,11 @@ msgstr "" "Düsenwerkzeug Durchmesser. Der Wert (in aktuellen FlatCAM-Einheiten)\n" "ist die Breite der Lotpaste." -#: flatcamTools/ToolSolderPaste.py:104 +#: flatcamTools/ToolSolderPaste.py:106 msgid "New Nozzle Tool" msgstr "Neues Düsenwerkzeug" -#: flatcamTools/ToolSolderPaste.py:123 +#: flatcamTools/ToolSolderPaste.py:125 msgid "" "Add a new nozzle tool to the Tool Table\n" "with the diameter specified above." @@ -16424,15 +17279,15 @@ msgstr "" "Fügen Sie der Werkzeugtabelle ein neues Düsenwerkzeug hinzu\n" "mit dem oben angegebenen Durchmesser." -#: flatcamTools/ToolSolderPaste.py:135 +#: flatcamTools/ToolSolderPaste.py:137 msgid "Generate solder paste dispensing geometry." msgstr "Generieren Sie Lotpastendispensiergeometrie." -#: flatcamTools/ToolSolderPaste.py:154 +#: flatcamTools/ToolSolderPaste.py:156 msgid "STEP 1" msgstr "SCHRITT 1" -#: flatcamTools/ToolSolderPaste.py:156 +#: flatcamTools/ToolSolderPaste.py:158 msgid "" "First step is to select a number of nozzle tools for usage\n" "and then optionally modify the GCode parameters bellow." @@ -16440,7 +17295,7 @@ msgstr "" "Zunächst müssen Sie eine Reihe von Düsenwerkzeugen auswählen\n" "und ändern Sie dann optional die GCode-Parameter." -#: flatcamTools/ToolSolderPaste.py:159 +#: flatcamTools/ToolSolderPaste.py:161 msgid "" "Select tools.\n" "Modify parameters." @@ -16448,7 +17303,7 @@ msgstr "" "Werkzeuge auswählen.\n" "Parameter ändern." -#: flatcamTools/ToolSolderPaste.py:279 +#: flatcamTools/ToolSolderPaste.py:281 msgid "" "Feedrate (speed) while moving up vertically\n" " to Dispense position (on Z plane)." @@ -16456,7 +17311,7 @@ msgstr "" "Vorschub (Geschwindigkeit) bei vertikaler Bewegung\n" "  zur Ausgabeposition (auf der Z-Ebene)." -#: flatcamTools/ToolSolderPaste.py:349 +#: flatcamTools/ToolSolderPaste.py:351 msgid "" "Generate GCode for Solder Paste dispensing\n" "on PCB pads." @@ -16464,11 +17319,11 @@ msgstr "" "Generieren Sie GCode für die Lotpastendosierung\n" "auf PCB-Pads." -#: flatcamTools/ToolSolderPaste.py:370 +#: flatcamTools/ToolSolderPaste.py:372 msgid "STEP 2" msgstr "SCHRITT 2" -#: flatcamTools/ToolSolderPaste.py:372 +#: flatcamTools/ToolSolderPaste.py:374 msgid "" "Second step is to create a solder paste dispensing\n" "geometry out of an Solder Paste Mask Gerber file." @@ -16476,11 +17331,11 @@ msgstr "" "Der zweite Schritt ist das Erstellen einer Lotpastendispensierung\n" "Geometrie aus einer Lotpastenmaske-Gerber-Datei." -#: flatcamTools/ToolSolderPaste.py:388 +#: flatcamTools/ToolSolderPaste.py:391 msgid "Geo Result" msgstr "Geo-Ergebnis" -#: flatcamTools/ToolSolderPaste.py:390 +#: flatcamTools/ToolSolderPaste.py:393 msgid "" "Geometry Solder Paste object.\n" "The name of the object has to end in:\n" @@ -16490,11 +17345,11 @@ msgstr "" "Der Name des Objekts muss auf enden:\n" "'_solderpaste' als Schutz." -#: flatcamTools/ToolSolderPaste.py:399 +#: flatcamTools/ToolSolderPaste.py:402 msgid "STEP 3" msgstr "SCHRITT 3" -#: flatcamTools/ToolSolderPaste.py:401 +#: flatcamTools/ToolSolderPaste.py:404 msgid "" "Third step is to select a solder paste dispensing geometry,\n" "and then generate a CNCJob object.\n" @@ -16510,11 +17365,11 @@ msgstr "" "Zuerst müssen Sie eine Geometrie mit diesen neuen Parametern generieren.\n" "und erst danach können Sie einen aktualisierten CNCJob erstellen." -#: flatcamTools/ToolSolderPaste.py:421 +#: flatcamTools/ToolSolderPaste.py:425 msgid "CNC Result" msgstr "CNC-Ergebnis" -#: flatcamTools/ToolSolderPaste.py:423 +#: flatcamTools/ToolSolderPaste.py:427 msgid "" "CNCJob Solder paste object.\n" "In order to enable the GCode save section,\n" @@ -16526,11 +17381,11 @@ msgstr "" "Der Name des Objekts muss auf enden:\n" "'_solderpaste' als Schutz." -#: flatcamTools/ToolSolderPaste.py:433 +#: flatcamTools/ToolSolderPaste.py:437 msgid "View GCode" msgstr "GCode anzeigen" -#: flatcamTools/ToolSolderPaste.py:435 +#: flatcamTools/ToolSolderPaste.py:439 msgid "" "View the generated GCode for Solder Paste dispensing\n" "on PCB pads." @@ -16538,11 +17393,11 @@ msgstr "" "Zeigen Sie den generierten GCode für die Lotpastendosierung an\n" "auf PCB-Pads." -#: flatcamTools/ToolSolderPaste.py:445 +#: flatcamTools/ToolSolderPaste.py:449 msgid "Save GCode" msgstr "Speichern Sie GCode" -#: flatcamTools/ToolSolderPaste.py:447 +#: flatcamTools/ToolSolderPaste.py:451 msgid "" "Save the generated GCode for Solder Paste dispensing\n" "on PCB pads, to a file." @@ -16550,11 +17405,11 @@ msgstr "" "Speichern Sie den generierten GCode für die Lotpastendosierung\n" "auf PCB-Pads zu einer Datei." -#: flatcamTools/ToolSolderPaste.py:457 +#: flatcamTools/ToolSolderPaste.py:461 msgid "STEP 4" msgstr "SCHRITT 4" -#: flatcamTools/ToolSolderPaste.py:459 +#: flatcamTools/ToolSolderPaste.py:463 msgid "" "Fourth step (and last) is to select a CNCJob made from \n" "a solder paste dispensing geometry, and then view/save it's GCode." @@ -16562,93 +17417,87 @@ msgstr "" "Vierter Schritt (und letzter Schritt) ist die Auswahl eines CNCJobs aus\n" "eine Lotpastendispensiergeometrie und dann den GCode anzeigen / speichern." -#: flatcamTools/ToolSolderPaste.py:917 -msgid "Adding Nozzle tool cancelled. Tool already in Tool Table." -msgstr "" -"Hinzufügen des Düsenwerkzeugs abgebrochen. Werkzeug bereits in der " -"Werkzeugtabelle." - -#: flatcamTools/ToolSolderPaste.py:923 +#: flatcamTools/ToolSolderPaste.py:922 msgid "New Nozzle tool added to Tool Table." msgstr "Neues Düsenwerkzeug zur Werkzeugtabelle hinzugefügt." -#: flatcamTools/ToolSolderPaste.py:966 +#: flatcamTools/ToolSolderPaste.py:965 msgid "Nozzle tool from Tool Table was edited." msgstr "Das Düsenwerkzeug aus der Werkzeugtabelle wurde bearbeitet." -#: flatcamTools/ToolSolderPaste.py:1024 +#: flatcamTools/ToolSolderPaste.py:1023 msgid "Delete failed. Select a Nozzle tool to delete." msgstr "Löschen fehlgeschlagen. Wählen Sie ein Düsenwerkzeug zum Löschen aus." -#: flatcamTools/ToolSolderPaste.py:1030 +#: flatcamTools/ToolSolderPaste.py:1029 msgid "Nozzle tool(s) deleted from Tool Table." msgstr "Düsenwerkzeug (e) aus der Werkzeugtabelle gelöscht." -#: flatcamTools/ToolSolderPaste.py:1086 +#: flatcamTools/ToolSolderPaste.py:1085 msgid "No SolderPaste mask Gerber object loaded." msgstr "Keine Lötpastenmaske Gerber-Objekt geladen." -#: flatcamTools/ToolSolderPaste.py:1104 +#: flatcamTools/ToolSolderPaste.py:1103 msgid "Creating Solder Paste dispensing geometry." msgstr "Erstellen einer Lotpastenspendergeometrie." -#: flatcamTools/ToolSolderPaste.py:1117 +#: flatcamTools/ToolSolderPaste.py:1116 msgid "No Nozzle tools in the tool table." msgstr "Nein Düsenwerkzeuge in der Werkzeugtabelle." -#: flatcamTools/ToolSolderPaste.py:1244 +#: flatcamTools/ToolSolderPaste.py:1242 msgid "Cancelled. Empty file, it has no geometry..." msgstr "Abgebrochen. Leere Datei hat keine Geometrie ..." -#: flatcamTools/ToolSolderPaste.py:1248 +#: flatcamTools/ToolSolderPaste.py:1245 msgid "Solder Paste geometry generated successfully" msgstr "Lotpastengeometrie erfolgreich generiert" -#: flatcamTools/ToolSolderPaste.py:1255 +#: flatcamTools/ToolSolderPaste.py:1252 msgid "Some or all pads have no solder due of inadequate nozzle diameters..." msgstr "" "Einige oder alle Pads haben wegen unzureichender Düsendurchmesser keine " "Lötstellen ..." -#: flatcamTools/ToolSolderPaste.py:1269 +#: flatcamTools/ToolSolderPaste.py:1266 msgid "Generating Solder Paste dispensing geometry..." msgstr "Lötpasten-Dosiergeometrie erzeugen ..." -#: flatcamTools/ToolSolderPaste.py:1289 +#: flatcamTools/ToolSolderPaste.py:1286 msgid "There is no Geometry object available." msgstr "Es ist kein Geometrieobjekt verfügbar." -#: flatcamTools/ToolSolderPaste.py:1294 +#: flatcamTools/ToolSolderPaste.py:1291 msgid "This Geometry can't be processed. NOT a solder_paste_tool geometry." msgstr "" "Diese Geometrie kann nicht verarbeitet werden. KEINE Geometrie " "\"Lötpaste_Tool\"." -#: flatcamTools/ToolSolderPaste.py:1401 +#: flatcamTools/ToolSolderPaste.py:1392 msgid "ToolSolderPaste CNCjob created" msgstr "Werkzeuglötpaste CNC-Auftrag erstellt" -#: flatcamTools/ToolSolderPaste.py:1422 +#: flatcamTools/ToolSolderPaste.py:1411 msgid "SP GCode Editor" msgstr "SP GCode-Editor" -#: flatcamTools/ToolSolderPaste.py:1434 flatcamTools/ToolSolderPaste.py:1439 -#: flatcamTools/ToolSolderPaste.py:1494 +#: flatcamTools/ToolSolderPaste.py:1423 flatcamTools/ToolSolderPaste.py:1428 +#: flatcamTools/ToolSolderPaste.py:1483 msgid "" "This CNCJob object can't be processed. NOT a solder_paste_tool CNCJob object." msgstr "" "Dieses CNCJob-Objekt kann nicht verarbeitet werden. KEIN lot_paste_tool " "CNCJob Objekt." -#: flatcamTools/ToolSolderPaste.py:1464 +#: flatcamTools/ToolSolderPaste.py:1453 msgid "No Gcode in the object" msgstr "Kein Gcode im Objekt" -#: flatcamTools/ToolSolderPaste.py:1504 +#: flatcamTools/ToolSolderPaste.py:1493 msgid "Export GCode ..." msgstr "GCode exportieren ..." -#: flatcamTools/ToolSolderPaste.py:1552 +#: flatcamTools/ToolSolderPaste.py:1541 msgid "Solder paste dispenser GCode file saved to" msgstr "Lotpastenspender GCode-Datei gespeichert in" @@ -16656,7 +17505,7 @@ msgstr "Lotpastenspender GCode-Datei gespeichert in" msgid "Gerber Objects" msgstr "Gerber-Objekte" -#: flatcamTools/ToolSub.py:76 +#: flatcamTools/ToolSub.py:78 msgid "" "Gerber object from which to subtract\n" "the subtractor Gerber object." @@ -16664,11 +17513,11 @@ msgstr "" "Gerber-Objekt, von dem subtrahiert werden soll\n" "der Subtrahierer Gerber Objekt." -#: flatcamTools/ToolSub.py:88 flatcamTools/ToolSub.py:140 +#: flatcamTools/ToolSub.py:91 flatcamTools/ToolSub.py:146 msgid "Subtractor" msgstr "Subtraktor" -#: flatcamTools/ToolSub.py:90 +#: flatcamTools/ToolSub.py:93 msgid "" "Gerber object that will be subtracted\n" "from the target Gerber object." @@ -16676,11 +17525,11 @@ msgstr "" "Gerber-Objekt, das abgezogen wird\n" "vom Zielobjekt Gerber." -#: flatcamTools/ToolSub.py:97 +#: flatcamTools/ToolSub.py:100 msgid "Substract Gerber" msgstr "Gerber abziehen" -#: flatcamTools/ToolSub.py:99 +#: flatcamTools/ToolSub.py:102 msgid "" "Will remove the area occupied by the subtractor\n" "Gerber from the Target Gerber.\n" @@ -16692,11 +17541,11 @@ msgstr "" "Kann verwendet werden, um den überlappenden Siebdruck zu entfernen\n" "über der Lötmaske." -#: flatcamTools/ToolSub.py:117 +#: flatcamTools/ToolSub.py:120 msgid "Geometry Objects" msgstr "Geometrieobjekte" -#: flatcamTools/ToolSub.py:128 +#: flatcamTools/ToolSub.py:133 msgid "" "Geometry object from which to subtract\n" "the subtractor Geometry object." @@ -16704,7 +17553,7 @@ msgstr "" "Geometrieobjekt, von dem subtrahiert werden soll\n" "das Subtrahierer-Geometrieobjekt." -#: flatcamTools/ToolSub.py:142 +#: flatcamTools/ToolSub.py:148 msgid "" "Geometry object that will be subtracted\n" "from the target Geometry object." @@ -16712,18 +17561,18 @@ msgstr "" "Geometrieobjekt, das subtrahiert wird\n" "aus dem Zielobjekt Geometrie." -#: flatcamTools/ToolSub.py:150 +#: flatcamTools/ToolSub.py:156 msgid "" "Checking this will close the paths cut by the Geometry subtractor object." msgstr "" "Wenn Sie dies aktivieren, werden die vom Geometrie-Subtrahierer-Objekt " "geschnittenen Pfade geschlossen." -#: flatcamTools/ToolSub.py:153 +#: flatcamTools/ToolSub.py:159 msgid "Subtract Geometry" msgstr "Geometrie subtrahieren" -#: flatcamTools/ToolSub.py:155 +#: flatcamTools/ToolSub.py:161 msgid "" "Will remove the area occupied by the subtractor\n" "Geometry from the Target Geometry." @@ -16731,58 +17580,58 @@ msgstr "" "Entfernt den vom Subtrahierer belegten Bereich\n" "Geometrie aus der Zielgeometrie." -#: flatcamTools/ToolSub.py:262 +#: flatcamTools/ToolSub.py:263 msgid "Sub Tool" msgstr "Sub. Werkzeug" -#: flatcamTools/ToolSub.py:278 flatcamTools/ToolSub.py:483 +#: flatcamTools/ToolSub.py:284 flatcamTools/ToolSub.py:489 msgid "No Target object loaded." msgstr "Kein Zielobjekt geladen." -#: flatcamTools/ToolSub.py:281 +#: flatcamTools/ToolSub.py:287 msgid "Loading geometry from Gerber objects." msgstr "Lade Geometrien aus Gerber Objekten." -#: flatcamTools/ToolSub.py:293 flatcamTools/ToolSub.py:498 +#: flatcamTools/ToolSub.py:299 flatcamTools/ToolSub.py:504 msgid "No Subtractor object loaded." msgstr "Es wurde kein Subtrahiererobjekt geladen." # Whatever a Subtractor Gerber is, could not translate -#: flatcamTools/ToolSub.py:325 +#: flatcamTools/ToolSub.py:331 msgid "Processing geometry from Subtractor Gerber object." msgstr "Verarbeite Geomtrie des Subtractor Gerber Objekts." -#: flatcamTools/ToolSub.py:346 +#: flatcamTools/ToolSub.py:352 msgid "Parsing geometry for aperture" msgstr "Analysegeometrie für Blende" # whatever aperture means here.... -#: flatcamTools/ToolSub.py:407 +#: flatcamTools/ToolSub.py:413 msgid "Finished parsing geometry for aperture" msgstr "Einlesen der aperture Geometrie fertiggestellt" -#: flatcamTools/ToolSub.py:452 flatcamTools/ToolSub.py:655 +#: flatcamTools/ToolSub.py:458 flatcamTools/ToolSub.py:661 msgid "Generating new object ..." msgstr "Neues Objekt erzeugen ..." -#: flatcamTools/ToolSub.py:456 flatcamTools/ToolSub.py:659 -#: flatcamTools/ToolSub.py:740 +#: flatcamTools/ToolSub.py:462 flatcamTools/ToolSub.py:665 +#: flatcamTools/ToolSub.py:746 msgid "Generating new object failed." msgstr "Das Generieren eines neuen Objekts ist fehlgeschlagen." -#: flatcamTools/ToolSub.py:461 flatcamTools/ToolSub.py:665 +#: flatcamTools/ToolSub.py:467 flatcamTools/ToolSub.py:671 msgid "Created" msgstr "Erstellt" -#: flatcamTools/ToolSub.py:512 +#: flatcamTools/ToolSub.py:518 msgid "Currently, the Subtractor geometry cannot be of type Multigeo." msgstr "Derzeit kann die Subtrahierergeometrie nicht vom Typ Multi-Geo sein." -#: flatcamTools/ToolSub.py:557 +#: flatcamTools/ToolSub.py:563 msgid "Parsing solid_geometry ..." msgstr "Analyse von solid_geometry ..." -#: flatcamTools/ToolSub.py:559 +#: flatcamTools/ToolSub.py:565 msgid "Parsing solid_geometry for tool" msgstr "Analysieren der solid_geometry für das Werkzeug" @@ -16790,7 +17639,7 @@ msgstr "Analysieren der solid_geometry für das Werkzeug" msgid "Object Transform" msgstr "Objekttransformation" -#: flatcamTools/ToolTransform.py:82 +#: flatcamTools/ToolTransform.py:79 msgid "" "Rotate the selected object(s).\n" "The point of reference is the middle of\n" @@ -16800,7 +17649,7 @@ msgstr "" "Der Bezugspunkt ist die Mitte von\n" "der Begrenzungsrahmen für alle ausgewählten Objekte." -#: flatcamTools/ToolTransform.py:100 flatcamTools/ToolTransform.py:122 +#: flatcamTools/ToolTransform.py:100 flatcamTools/ToolTransform.py:121 msgid "" "Angle for Skew action, in degrees.\n" "Float number between -360 and 360." @@ -16808,7 +17657,7 @@ msgstr "" "Winkel für Schrägstellung in Grad.\n" "Gleitkommazahl zwischen -360 und 360." -#: flatcamTools/ToolTransform.py:111 flatcamTools/ToolTransform.py:133 +#: flatcamTools/ToolTransform.py:110 flatcamTools/ToolTransform.py:131 msgid "" "Skew/shear the selected object(s).\n" "The point of reference is the middle of\n" @@ -16818,7 +17667,7 @@ msgstr "" "Der Bezugspunkt ist die Mitte von\n" "der Begrenzungsrahmen für alle ausgewählten Objekte." -#: flatcamTools/ToolTransform.py:160 flatcamTools/ToolTransform.py:181 +#: flatcamTools/ToolTransform.py:160 flatcamTools/ToolTransform.py:180 msgid "" "Scale the selected object(s).\n" "The point of reference depends on \n" @@ -16828,7 +17677,7 @@ msgstr "" "Der Bezugspunkt hängt von ab\n" "das Kontrollkästchen Skalenreferenz." -#: flatcamTools/ToolTransform.py:229 flatcamTools/ToolTransform.py:250 +#: flatcamTools/ToolTransform.py:229 flatcamTools/ToolTransform.py:249 msgid "" "Offset the selected object(s).\n" "The point of reference is the middle of\n" @@ -16838,199 +17687,610 @@ msgstr "" "Der Bezugspunkt ist die Mitte von\n" "der Begrenzungsrahmen für alle ausgewählten Objekte.\n" -#: flatcamTools/ToolTransform.py:268 flatcamTools/ToolTransform.py:274 +#: flatcamTools/ToolTransform.py:269 flatcamTools/ToolTransform.py:274 msgid "Flip the selected object(s) over the X axis." msgstr "Drehen Sie die ausgewählten Objekte über die X-Achse." -#: flatcamTools/ToolTransform.py:299 +#: flatcamTools/ToolTransform.py:298 msgid "Ref. Point" msgstr "Anhaltspunkt" -#: flatcamTools/ToolTransform.py:351 +#: flatcamTools/ToolTransform.py:349 msgid "" "Create the buffer effect on each geometry,\n" -"element from the selected object." +"element from the selected object, using the distance." msgstr "" "Erstellen Sie den Puffereffekt für jede Geometrie.\n" -"Element aus dem ausgewählten Objekt." +"Element aus dem ausgewählten Objekt unter Verwendung des Abstands." -#: flatcamTools/ToolTransform.py:498 +#: flatcamTools/ToolTransform.py:375 +msgid "" +"Create the buffer effect on each geometry,\n" +"element from the selected object, using the factor." +msgstr "" +"Erstellen Sie den Puffereffekt für jede Geometrie.\n" +"Element aus dem ausgewählten Objekt unter Verwendung des Faktors." + +#: flatcamTools/ToolTransform.py:480 +msgid "Buffer D" +msgstr "Puffer E" + +#: flatcamTools/ToolTransform.py:481 +msgid "Buffer F" +msgstr "Puffer F" + +#: flatcamTools/ToolTransform.py:558 msgid "Rotate transformation can not be done for a value of 0." msgstr "" "Bei einem Wert von 0 kann keine Rotationstransformation durchgeführt werden." -#: flatcamTools/ToolTransform.py:537 flatcamTools/ToolTransform.py:560 +#: flatcamTools/ToolTransform.py:597 flatcamTools/ToolTransform.py:620 msgid "Scale transformation can not be done for a factor of 0 or 1." msgstr "" "Eine Skalentransformation kann für einen Faktor von 0 oder 1 nicht " "durchgeführt werden." -#: flatcamTools/ToolTransform.py:575 flatcamTools/ToolTransform.py:585 +#: flatcamTools/ToolTransform.py:635 flatcamTools/ToolTransform.py:645 msgid "Offset transformation can not be done for a value of 0." msgstr "" "Bei einem Wert von 0 kann keine Offset-Transformation durchgeführt werden." -#: flatcamTools/ToolTransform.py:608 +#: flatcamTools/ToolTransform.py:677 msgid "No object selected. Please Select an object to rotate!" msgstr "Kein Objekt ausgewählt. Bitte wählen Sie ein Objekt zum Drehen aus!" -#: flatcamTools/ToolTransform.py:636 +#: flatcamTools/ToolTransform.py:703 msgid "CNCJob objects can't be rotated." msgstr "CNCJob-Objekte können nicht gedreht werden." -#: flatcamTools/ToolTransform.py:644 +#: flatcamTools/ToolTransform.py:711 msgid "Rotate done" msgstr "Fertig drehen" -#: flatcamTools/ToolTransform.py:649 flatcamTools/ToolTransform.py:724 -#: flatcamTools/ToolTransform.py:779 flatcamTools/ToolTransform.py:838 -#: flatcamTools/ToolTransform.py:874 flatcamTools/ToolTransform.py:910 +#: flatcamTools/ToolTransform.py:714 flatcamTools/ToolTransform.py:784 +#: flatcamTools/ToolTransform.py:834 flatcamTools/ToolTransform.py:890 +#: flatcamTools/ToolTransform.py:922 flatcamTools/ToolTransform.py:958 msgid "Due of" msgstr "Aufgrund von" -#: flatcamTools/ToolTransform.py:649 flatcamTools/ToolTransform.py:724 -#: flatcamTools/ToolTransform.py:779 flatcamTools/ToolTransform.py:838 -#: flatcamTools/ToolTransform.py:874 flatcamTools/ToolTransform.py:910 +#: flatcamTools/ToolTransform.py:714 flatcamTools/ToolTransform.py:784 +#: flatcamTools/ToolTransform.py:834 flatcamTools/ToolTransform.py:890 +#: flatcamTools/ToolTransform.py:922 flatcamTools/ToolTransform.py:958 msgid "action was not executed." msgstr "Aktion wurde nicht ausgeführt." -#: flatcamTools/ToolTransform.py:661 +#: flatcamTools/ToolTransform.py:726 msgid "No object selected. Please Select an object to flip" msgstr "Kein Objekt ausgewählt. Bitte wählen Sie ein Objekt aus" -#: flatcamTools/ToolTransform.py:696 +#: flatcamTools/ToolTransform.py:759 msgid "CNCJob objects can't be mirrored/flipped." msgstr "CNCJob-Objekte können nicht gespiegelt / gespiegelt werden." -#: flatcamTools/ToolTransform.py:734 +#: flatcamTools/ToolTransform.py:794 msgid "Skew transformation can not be done for 0, 90 and 180 degrees." msgstr "" "Die Neigungstransformation kann nicht für 0, 90 und 180 Grad durchgeführt " "werden." -#: flatcamTools/ToolTransform.py:739 +#: flatcamTools/ToolTransform.py:799 msgid "No object selected. Please Select an object to shear/skew!" msgstr "" "Kein Objekt ausgewählt. Bitte wählen Sie ein Objekt zum Scheren / Schrägen!" -#: flatcamTools/ToolTransform.py:761 +#: flatcamTools/ToolTransform.py:819 msgid "CNCJob objects can't be skewed." msgstr "CNCJob-Objekte können nicht verzerrt werden." -#: flatcamTools/ToolTransform.py:774 +#: flatcamTools/ToolTransform.py:831 msgid "Skew on the" msgstr "Schräg auf die" -#: flatcamTools/ToolTransform.py:774 flatcamTools/ToolTransform.py:834 -#: flatcamTools/ToolTransform.py:869 +#: flatcamTools/ToolTransform.py:831 flatcamTools/ToolTransform.py:887 +#: flatcamTools/ToolTransform.py:919 msgid "axis done" msgstr "Achse fertig" -#: flatcamTools/ToolTransform.py:791 +#: flatcamTools/ToolTransform.py:846 msgid "No object selected. Please Select an object to scale!" msgstr "Kein Objekt ausgewählt. Bitte wählen Sie ein Objekt zum Skalieren!" -#: flatcamTools/ToolTransform.py:824 +#: flatcamTools/ToolTransform.py:877 msgid "CNCJob objects can't be scaled." msgstr "CNCJob-Objekte können nicht skaliert werden." -#: flatcamTools/ToolTransform.py:834 +#: flatcamTools/ToolTransform.py:887 msgid "Scale on the" msgstr "Skalieren Sie auf der" -#: flatcamTools/ToolTransform.py:846 +#: flatcamTools/ToolTransform.py:898 msgid "No object selected. Please Select an object to offset!" msgstr "Kein Objekt ausgewählt. Bitte wählen Sie ein Objekt zum Versetzen aus!" -#: flatcamTools/ToolTransform.py:855 +#: flatcamTools/ToolTransform.py:905 msgid "CNCJob objects can't be offset." msgstr "CNCJob-Objekte können nicht versetzt werden." -#: flatcamTools/ToolTransform.py:869 +#: flatcamTools/ToolTransform.py:919 msgid "Offset on the" msgstr "Offset auf dem" -#: flatcamTools/ToolTransform.py:881 +#: flatcamTools/ToolTransform.py:929 msgid "No object selected. Please Select an object to buffer!" msgstr "Kein Objekt ausgewählt. Bitte wählen Sie ein Objekt zum Puffern aus!" -#: flatcamTools/ToolTransform.py:884 +#: flatcamTools/ToolTransform.py:932 msgid "Applying Buffer" msgstr "Anwenden von Puffer" -#: flatcamTools/ToolTransform.py:888 +#: flatcamTools/ToolTransform.py:936 msgid "CNCJob objects can't be buffered." msgstr "CNCJob-Objekte können nicht gepuffert werden." -#: flatcamTools/ToolTransform.py:905 +#: flatcamTools/ToolTransform.py:953 msgid "Buffer done" msgstr "Puffer fertig" -#: tclCommands/TclCommandBbox.py:74 tclCommands/TclCommandNregions.py:73 +#: tclCommands/TclCommandBbox.py:76 tclCommands/TclCommandNregions.py:75 msgid "Expected FlatCAMGerber or FlatCAMGeometry, got" msgstr "Erwartete FlatCAMGerber oder FlatCAMGeometrie, erhalten" -#: tclCommands/TclCommandBounds.py:64 tclCommands/TclCommandBounds.py:68 +#: tclCommands/TclCommandBounds.py:67 tclCommands/TclCommandBounds.py:71 msgid "Expected a list of objects names separated by comma. Got" msgstr "Erwartete eine Liste von durch Komma getrennten Objektnamen. Bekam" -#: tclCommands/TclCommandBounds.py:79 +#: tclCommands/TclCommandBounds.py:82 msgid "TclCommand Bounds done." msgstr "TclCommand Bounds getan." -#: tclCommands/TclCommandCopperClear.py:242 tclCommands/TclCommandPaint.py:240 -msgid "Expected -box ." -msgstr "Erwartete -box ." - -#: tclCommands/TclCommandCopperClear.py:251 tclCommands/TclCommandPaint.py:249 -#: tclCommands/TclCommandScale.py:75 +#: tclCommands/TclCommandCopperClear.py:276 tclCommands/TclCommandPaint.py:272 +#: tclCommands/TclCommandScale.py:81 msgid "Could not retrieve box object" msgstr "Box-Objekt konnte nicht abgerufen werden" -#: tclCommands/TclCommandCopperClear.py:273 -msgid "" -"None of the following args: 'ref', 'all' were found or none was set to 1.\n" -"Copper clearing failed." -msgstr "" -"Keine der folgenden Argumente: 'ref', 'all' wurde gefunden oder keine wurde " -"auf 1 gesetzt.\n" -"Kupferreinigung fehlgeschlagen." +#: tclCommands/TclCommandCopperClear.py:299 +msgid "Expected either -box or -all." +msgstr "Erwartet entweder -box oder -all." -#: tclCommands/TclCommandPaint.py:217 +#: tclCommands/TclCommandGeoCutout.py:148 +msgid "" +"The name of the object for which cutout is done is missing. Add it and retry." +msgstr "" +"Der Name des Objekts, für das der Ausschnitt erfolgt, fehlt. Fügen Sie es " +"hinzu und versuchen Sie es erneut." + +#: tclCommands/TclCommandGeoCutout.py:190 +msgid "Gaps value can be only one of: 'lr', 'tb', '2lr', '2tb', 4 or 8." +msgstr "" +"Der Lückenwert kann nur einer der folgenden Werte sein: \"Keine\", \"lr\", " +"\"tb\", \"2lr\", \"2tb\", 4 oder 8." + +#: tclCommands/TclCommandGeoCutout.py:302 +#: tclCommands/TclCommandGeoCutout.py:360 +msgid "Any-form Cutout operation finished." +msgstr "Alle Formularausschnitte sind abgeschlossen." + +#: tclCommands/TclCommandGeoCutout.py:366 +msgid "Cancelled. Object type is not supported." +msgstr "Abgebrochen. Der Objekttyp wird nicht unterstützt." + +#: tclCommands/TclCommandHelp.py:75 +msgid "Available commands:" +msgstr "Verfügbare Befehle:" + +#: tclCommands/TclCommandHelp.py:113 +msgid "Type help for usage." +msgstr "Geben Sie help für die Verwendung ein." + +#: tclCommands/TclCommandHelp.py:113 +msgid "Example: help open_gerber" +msgstr "Beispiel: help open_gerber" + +#: tclCommands/TclCommandPaint.py:244 msgid "Expected -x and -y ." msgstr "Erwartete -x und -y ." -#: tclCommands/TclCommandPaint.py:268 +#: tclCommands/TclCommandPaint.py:265 +msgid "Expected -box ." +msgstr "Erwartete -box ." + +#: tclCommands/TclCommandPaint.py:286 msgid "" -"There was none of the following args: 'ref', 'single', 'all'.\n" +"None of the following args: 'box', 'single', 'all' were used.\n" "Paint failed." msgstr "" -"Es gab keine der folgenden Argumente: 'ref', 'single', 'all'.\n" +"Keines der folgenden Argumente: 'box', 'single', 'all' wurden verwendet.\n" "Lackierung fehlgeschlagen." -#: tclCommands/TclCommandScale.py:95 -msgid "Expected -origin or -origin or -origin
    ." +#: tclCommands/TclCommandScale.py:106 +msgid "" +"Expected -origin or -origin or -origin
    or - " +"origin 3.0,4.2." msgstr "" -"Erwartete -Origin oder -Origin oder -Origin
    ." +"Erwartete -Origin oder -Origin oder -Origin
    " +"oder - origin 3.0,4.2." -#: tclCommands/TclCommandScale.py:104 +#: tclCommands/TclCommandScale.py:119 msgid "Expected -x -y ." msgstr "Erwartet -x -y ." -#: tclCommands/TclCommandSetOrigin.py:91 +#: tclCommands/TclCommandSetOrigin.py:95 msgid "Expected a pair of (x, y) coordinates. Got" msgstr "Paar (x, y) Koordinaten erwartet. Bekam" -#: tclCommands/TclCommandSetOrigin.py:98 +#: tclCommands/TclCommandSetOrigin.py:102 msgid "Origin set by offsetting all loaded objects with " msgstr "Ursprung wird durch Versetzen aller geladenen Objekte mit gesetzt " -#: tclCommands/TclCommandSubtractRectangle.py:58 +#: tclCommands/TclCommandSubtractRectangle.py:62 msgid "No Geometry name in args. Provide a name and try again." msgstr "" "Kein Geometriename in args. Geben Sie einen Namen ein und versuchen Sie es " "erneut." +#~ msgid "Executing Tcl Script ..." +#~ msgstr "Tcl-Skript wird ausgeführt ..." + +#~ msgid "Open cancelled." +#~ msgstr "Öffnen wurde abgebrochen." + +#~ msgid "Preferences default restore was cancelled." +#~ msgstr "Die Standardwiederherstellung der Einstellungen wurde abgebrochen." + +#~ msgid "FlatCAM preferences import cancelled." +#~ msgstr "Import der FlatCAM-Einstellungen wurde abgebrochen." + +#~ msgid "FlatCAM preferences export cancelled." +#~ msgstr "Export der FlatCAM-Einstellungen wurde abgebrochen." + +#~ msgid "Multigeo. Geometry merging finished" +#~ msgstr "Erledigt. Gerber-Bearbeitung beendet" + +#~ msgid "Units conversion cancelled." +#~ msgstr " Einheitenumrechnung abgebrochen." + +#~ msgid "Open Gerber cancelled." +#~ msgstr "Öffnen der Gerberdatei abgebrochen." + +#~ msgid " Open Excellon cancelled." +#~ msgstr " Öffnen der Excellon-Datei abgebrochen." + +#~ msgid "Open G-Code cancelled." +#~ msgstr "Öffnen der G-Code-Datei abgebrochen." + +#~ msgid "Open Project cancelled." +#~ msgstr "Projektdatei öffnen abgebrochen." + +#~ msgid "Open HPGL2 file cancelled." +#~ msgstr "Öffnen der HPGL2-Datei abgebrochen." + +#~ msgid "Open Config cancelled." +#~ msgstr "Öffnen der Konfigurationsdatei abgebrochen." + +#~ msgid " Export SVG cancelled." +#~ msgstr " Export von SVG abgebrochen." + +#~ msgid "Export PNG cancelled." +#~ msgstr "Export PNG abgebrochen." + +#~ msgid "No object selected. Please select an Gerber object to export." +#~ msgstr "" +#~ "Kein Objekt ausgewählt. Bitte wählen Sie ein Gerber-Objekt aus, das Sie " +#~ "exportieren möchten." + +#~ msgid "Save Gerber source file cancelled." +#~ msgstr "Gerber Quelldatei speichern abgebrochen." + +#~ msgid "No object selected. Please select an Script object to export." +#~ msgstr "" +#~ "Kein Objekt ausgewählt. Bitte wählen Sie ein zu exportierendes Script-" +#~ "Objekt." + +#~ msgid "Save Script source file cancelled." +#~ msgstr "Speichern der Skript-Quelldatei abgebrochen." + +#~ msgid "No object selected. Please select an Document object to export." +#~ msgstr "" +#~ "Kein Objekt ausgewählt. Bitte wählen Sie ein zu exportierendes " +#~ "Dokumentobjekt aus." + +#~ msgid "Save Document source file cancelled." +#~ msgstr "Quelldatei des Dokuments speichern abgebrochen." + +#~ msgid "No object selected. Please select an Excellon object to export." +#~ msgstr "" +#~ "Kein Objekt ausgewählt Bitte wählen Sie ein Excellon-Objekt zum " +#~ "Exportieren aus." + +#~ msgid "Saving Excellon source file cancelled." +#~ msgstr "Speichern der Excellon-Quelldatei abgebrochen." + +#~ msgid "No object selected. Please Select an Excellon object to export." +#~ msgstr "" +#~ "Kein Objekt ausgewählt. Bitte wählen Sie ein Excellon-Objekt aus, das Sie " +#~ "exportieren möchten." + +#~ msgid "Export Excellon cancelled." +#~ msgstr "Export der Excellon-Datei abgebrochen." + +#~ msgid "No object selected. Please Select an Gerber object to export." +#~ msgstr "" +#~ "Kein Objekt ausgewählt. Bitte wählen Sie ein Gerber-Objekt aus, das Sie " +#~ "exportieren möchten." + +#~ msgid "Export Gerber cancelled." +#~ msgstr "Export der Gerberdatei abgebrochen." + +#~ msgid "Export DXF cancelled." +#~ msgstr "Export der DXF-Datei abgebrochen." + +#~ msgid "Open SVG cancelled." +#~ msgstr "Öffnen der SVG-Datei abgebrochen." + +#~ msgid "Open DXF cancelled." +#~ msgstr "Öffnen der DXF-Datei abgebrochen." + +#~ msgid "Open TCL script cancelled." +#~ msgstr "Öffnen der TCL-Skriptdatei abgebrochen." + +#~ msgid "Run TCL script cancelled." +#~ msgstr "Ausführen der TCL-Skriptdatei abgebrochen." + +#~ msgid "Save Project cancelled." +#~ msgstr "Projekt speichern abgebrochen." + +#~ msgid "Save Object PDF cancelled." +#~ msgstr "Objekt speichern PDF abgebrochen." + +#~ msgid "Shows list of commands." +#~ msgstr "Zeigt eine Liste von Befehlen an." + +#~ msgid "FlatCAM bookmarks export cancelled." +#~ msgstr "FlatCAM-Lesezeichen-Export abgebrochen." + +#~ msgid "FlatCAM bookmarks import cancelled." +#~ msgstr "Import der FlatCAM-Lesezeichen abgebrochen." + +#~ msgid "FlatCAM Tools DB export cancelled." +#~ msgstr "Export der FlatCAM Werkzeugdatenbank abgebrochen." + +#~ msgid "FlatCAM Tools DB import cancelled." +#~ msgstr "Import der FlatCAM-Werkzeugdatenbank abgebrochen." + +#~ msgid "" +#~ "Wrong value format for self.defaults[\"z_pdepth\"] or self." +#~ "options[\"z_pdepth\"]" +#~ msgstr "" +#~ "Falsches Wertformat für self.defaults [\"z_pdepth\"] oder self.options " +#~ "[\"z_pdepth\"]" + +#~ msgid "" +#~ "Wrong value format for self.defaults[\"feedrate_probe\"] or self." +#~ "options[\"feedrate_probe\"]" +#~ msgstr "" +#~ "Falsches Wertformat für self.defaults [\"feedrate_probe\"] oder self." +#~ "options [\"feedrate_probe\"]" + +#~ msgid "Starting G-Code..." +#~ msgstr "G-Code wird gestartet ..." + +#~ msgid "" +#~ "Algorithm to paint the polygon:
    Standard: Fixed step inwards." +#~ "
    Seed-based: Outwards from seed." +#~ msgstr "" +#~ "Algorithmus zum Malen des Polygons:
    Standard: Feststehender " +#~ "Schritt nach innen.
    Samenbasiert: Aus dem Samen heraus." + +#~ msgid "Seed-based" +#~ msgstr "Samenbasiert" + +#~ msgid "Straight lines" +#~ msgstr "Gerade Linien" + +#~ msgid "Paint cancelled. No shape selected." +#~ msgstr "Malwerkzeug abgebrochen. Keine Form ausgewählt." + +#~ msgid "Transformation cancelled. No shape selected." +#~ msgstr "Umwandlung abgebrochen. Keine Form ausgewählt." + +#~ msgid "Buffer cancelled. No shape selected." +#~ msgstr "Puffer abgebrochen. Keine Form ausgewählt." + +#~ msgid "Export Code cancelled." +#~ msgstr "Exportcode abgebrochen." + +#~ msgid "&Save Project ..." +#~ msgstr "Projekt speichern ..." + +#~ msgid "Save Project C&opy ..." +#~ msgstr "Projektkopie speichern ..." + +#~ msgid "Change the size of the object." +#~ msgstr "Ändern Sie die Größe des Objekts." + +#~ msgid "Change the position of this object." +#~ msgstr "Ändern Sie die Position dieses Objekts." + +#~ msgid "Vector" +#~ msgstr "Vektor" + +#~ msgid "" +#~ "Create a CNC Job object\n" +#~ "for this drill object." +#~ msgstr "" +#~ "Erstellen Sie ein CNC-Auftragsobjekt\n" +#~ "für dieses Bohrobjekt." + +#~ msgid "" +#~ "Choose what to use for GCode generation:\n" +#~ "'Drills', 'Slots' or 'Both'.\n" +#~ "When choosing 'Slots' or 'Both', slots will be\n" +#~ "converted to a series of drills." +#~ msgstr "" +#~ "Wählen Sie aus, was für die GCode-Generierung verwendet werden soll:\n" +#~ "'Drills', 'Slots' oder 'Both'.\n" +#~ "Wenn Sie \"Slots\" oder \"Both\" wählen, werden die Slots angezeigt\n" +#~ "in eine Reihe von Bohrern umgewandelt." + +#~ msgid "Generate the CNC Job." +#~ msgstr "Generieren Sie den CNC-Job." + +#~ msgid "Add Tool from DataBase" +#~ msgstr "Werkzeug aus Werkzeugdatenbank hinzufügen" + +#~ msgid "Select a theme for FlatCAM." +#~ msgstr "Wählen Sie ein Thema für FlatCAM." + +#~ msgid "Conv." +#~ msgstr "Konv." + +#~ msgid "Diameters of the cutting tools, separated by ','" +#~ msgstr "Durchmesser der Schneidwerkzeuge, getrennt durch ','" + +#~ msgid "Tools dia" +#~ msgstr "Werkzeug durchmesser" + +#~ msgid "The new tool diameter (cut width) to add in the tool table." +#~ msgstr "" +#~ "Durchmesser (Eindringtiefe) für das neue Werkzeug, das in der " +#~ "Werkzeugtabelle hinzugefügt werden soll." + +#~ msgid "" +#~ "Algorithm for non-copper clearing:
    Standard: Fixed step inwards." +#~ "
    Seed-based: Outwards from seed.
    Line-based: Parallel " +#~ "lines." +#~ msgstr "" +#~ "Algorithmus für das Nicht-Kupfer-Clearing: Standard : " +#~ "Feststehender Schritt nach innen. Seed-based : Ausgehend vom " +#~ "Saatgut.
    Line-based: Parallele Linien." + +#~ msgid "Area" +#~ msgstr "Bereich" + +#~ msgid "Ref" +#~ msgstr "Ref" + +#~ msgid "" +#~ "- 'Itself' - the non copper clearing extent\n" +#~ "is based on the object that is copper cleared.\n" +#~ " - 'Area Selection' - left mouse click to start selection of the area to " +#~ "be painted.\n" +#~ "Keeping a modifier key pressed (CTRL or SHIFT) will allow to add multiple " +#~ "areas.\n" +#~ "- 'Reference Object' - will do non copper clearing within the area\n" +#~ "specified by another object." +#~ msgstr "" +#~ "- \"Selbst\" - das nicht kupferhaltige Clearing-Ausmaß\n" +#~ "basiert auf dem Objekt, das kupferfrei ist.\n" +#~ "- 'Bereichsauswahl' - Klicken Sie mit der linken Maustaste, um den " +#~ "Bereich auszuwählen, der gemalt werden soll.\n" +#~ "Wenn Sie eine Änderungstaste gedrückt halten (STRG oder UMSCHALTTASTE), " +#~ "können Sie mehrere Bereiche hinzufügen.\n" +#~ "- 'Referenzobjekt' - löscht nicht kupferne Objekte innerhalb des " +#~ "Bereichs\n" +#~ "von einem anderen Objekt angegeben." + +#~ msgid "Sel" +#~ msgstr "Wählen" + +#~ msgid "Diameters of nozzle tools, separated by ','" +#~ msgstr "Durchmesser der Düsenwerkzeuge, getrennt durch ','" + +#~ msgid "Reference Gerber" +#~ msgstr "Gerber Referenz" + +#~ msgid "Reference Excellon" +#~ msgstr "Excellon Referenz" + +#~ msgid "Reference Geometry" +#~ msgstr "Geometrie Referenz" + +#~ msgid "Point/Box Reference" +#~ msgstr "Punkt / Box-Referenz" + +#~ msgid "" +#~ "If 'Point' is selected above it store the coordinates (x, y) through " +#~ "which\n" +#~ "the mirroring axis passes.\n" +#~ "If 'Box' is selected above, select here a FlatCAM object (Gerber, Exc or " +#~ "Geo).\n" +#~ "Through the center of this object pass the mirroring axis selected above." +#~ msgstr "" +#~ "Wenn oben \"Punkt\" ausgewählt ist, werden die Koordinaten (x, y) " +#~ "gespeichert, durch die\n" +#~ "die Spiegelachse vergeht.\n" +#~ "Wenn oben 'Box' ausgewählt ist, wählen Sie hier ein FlatCAM-Objekt " +#~ "(Gerber, Exc oder Geo) aus.\n" +#~ "Durch die Mitte dieses Objekts fahren Sie die oben ausgewählte " +#~ "Spiegelachse." + +#~ msgid "Alignment Drill Diameter" +#~ msgstr "Durchmesser des Ausrichtungsbohrers" + +#~ msgid "" +#~ "'Point' coordinates missing. Using Origin (0, 0) as mirroring reference." +#~ msgstr "" +#~ "'Point'-Koordinaten fehlen. Verwenden von Origin (0, 0) als " +#~ "Spiegelreferenz." + +#~ msgid "Export positive film cancelled." +#~ msgstr "Export des Positivs wurde abgebrochen." + +#~ msgid "Export negative film cancelled." +#~ msgstr "Export des Negativs wurde abgebrochen." + +#~ msgid "Move action cancelled." +#~ msgstr "Bewegungsaktion abgebrochen." + +#~ msgid "Diameter for the new tool." +#~ msgstr "Durchmesser für das neue Werkzeug." + +#~ msgid "Create Paint Geometry" +#~ msgstr "Farbgeometrie erstellen" + +#~ msgid "Paint Tool. Reading parameters." +#~ msgstr "Malwerkzeug. Parameter lesen." + +#~ msgid "Paint Tool. Normal painting all task started." +#~ msgstr "Malwerkzeug. Normales Malen alle Aufgabe gestartet." + +#~ msgid "Rest machining painting all task started." +#~ msgstr "Restbearbeitung Lackieren alle Aufgabe gestartet." + +#~ msgid "" +#~ "Could not do Paint All. Try a different combination of parameters. Or a " +#~ "different Method of paint" +#~ msgstr "" +#~ "Paint All konnte nicht ausgeführt werden. Probieren Sie eine andere " +#~ "Kombination von Parametern aus. Oder eine andere Farbmethode" + +#~ msgid "Rest machining painting area task started." +#~ msgstr "Restbearbeitung Lackierbereich Aufgabe gestartet." + +#~ msgid "Paint Tool. Rest machining painting area task started." +#~ msgstr "Malwerkzeug. Restbearbeitung Lackierbereich Aufgabe gestartet." + +#~ msgid "Properties Tool was not displayed. No object selected." +#~ msgstr "" +#~ "Das Eigenschaften-Tool wurde nicht angezeigt. Kein Objekt ausgewählt." + +#~ msgid " Export PNG cancelled." +#~ msgstr "Export zu PNG abgebrochen." + +#~ msgid "Adding Nozzle tool cancelled. Tool already in Tool Table." +#~ msgstr "" +#~ "Hinzufügen des Düsenwerkzeugs abgebrochen. Werkzeug bereits in der " +#~ "Werkzeugtabelle." + +#~ msgid "" +#~ "None of the following args: 'ref', 'all' were found or none was set to " +#~ "1.\n" +#~ "Copper clearing failed." +#~ msgstr "" +#~ "Keine der folgenden Argumente: 'ref', 'all' wurde gefunden oder keine " +#~ "wurde auf 1 gesetzt.\n" +#~ "Kupferreinigung fehlgeschlagen." + #~ msgid "PostProcessor" #~ msgstr "Postprozessor" @@ -17058,9 +18318,6 @@ msgstr "" #~ msgid "Optimization Time" #~ msgstr "Optimierungszeit" -#~ msgid "Defaults" -#~ msgstr "Standardwerte" - #~ msgid "Coordinates decimals" #~ msgstr "Koordinate Dezimalzahlen" @@ -17132,9 +18389,6 @@ msgstr "" #~ msgid "Wk. size" #~ msgstr "Arbeitsgröße" -#~ msgid "Plot Line" -#~ msgstr "Handlungsstrang" - #~ msgid "Sel. Fill" #~ msgstr "Ausgewählte Füllung" @@ -17171,12 +18425,6 @@ msgstr "" #~ msgid "Project at StartUp" #~ msgstr "Projekt beim Start" -#~ msgid "Project AutoHide" -#~ msgstr "Projekt autoausblenden" - -#~ msgid "Enable ToolTips" -#~ msgstr "QuickInfos aktivieren" - #~ msgid "Mouse Cursor" #~ msgstr "Mauszeiger" @@ -17201,9 +18449,6 @@ msgstr "" #~ msgid "G-code does not have a units code: either G20 or G21" #~ msgstr "G-Code hat keinen Einheitencode: entweder G20 oder G21" -#~ msgid "No shape selected. Select a shape to explode" -#~ msgstr "Keine Form ausgewählt. Wählen Sie eine Form zum Auflösen aus" - #, python-brace-format #~ msgid "" #~ "[selected] {kind} created/selected: {name}" @@ -17514,9 +18759,6 @@ msgstr "" #~ "Der Überlappungswert muss zwischen 0 (einschließlich) und 1 " #~ "(ausschließlich) liegen. " -#~ msgid "Single Polygon" -#~ msgstr "Einzelnes Polygon" - #~ msgid "Overlap value must be between 0 (inclusive) and 1 (exclusive)" #~ msgstr "" #~ "Der Überlappungswert muss zwischen 0 (einschließlich) und 1 (exklusiv) " @@ -17525,9 +18767,6 @@ msgstr "" #~ msgid "Click inside the desired polygon." #~ msgstr "Klicken Sie in das gewünschte Polygon." -#~ msgid "Painting polygon at location" -#~ msgstr "Malen von Polygonen am Standort" - #, fuzzy #~| msgid "Could not load defaults file." #~ msgid "Could not load bookamrks file." @@ -17699,9 +18938,6 @@ msgstr "" #~ msgid "FILE ASSOCIATIONS" #~ msgstr "DATEIZUORDNUNGEN" -#~ msgid "Advanced Param." -#~ msgstr "Erweiterte Param." - #~ msgid "MH" #~ msgstr "MH" @@ -19601,9 +20837,6 @@ msgstr "" #~ msgid "[success] Rendered: %s" #~ msgstr "[success] Gerendert: %s" -#~ msgid "Zone added. Right click to finish." -#~ msgstr "Zone hinzugefügt. Rechtsklick zum Beenden." - #~ msgid "Painting polygon." #~ msgstr "Polygon malen." @@ -20104,9 +21337,6 @@ msgstr "" #~ msgid "Save &Defaults" #~ msgstr "Standardeinstellungen speichern" -#~ msgid "Line" -#~ msgstr "Linie" - #~ msgid "Tool dia: " #~ msgstr "Werkzeugdurchmesser:" diff --git a/locale/en/LC_MESSAGES/strings.mo b/locale/en/LC_MESSAGES/strings.mo index 7d01d578..e8f1af58 100644 Binary files a/locale/en/LC_MESSAGES/strings.mo and b/locale/en/LC_MESSAGES/strings.mo differ diff --git a/locale/en/LC_MESSAGES/strings.po b/locale/en/LC_MESSAGES/strings.po index 782a66c3..580a100c 100644 --- a/locale/en/LC_MESSAGES/strings.po +++ b/locale/en/LC_MESSAGES/strings.po @@ -5,8 +5,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" -"POT-Creation-Date: 2020-04-25 14:59+0300\n" -"PO-Revision-Date: 2020-04-25 14:59+0300\n" +"POT-Creation-Date: 2020-04-27 12:30+0300\n" +"PO-Revision-Date: 2020-04-27 12:31+0300\n" "Last-Translator: \n" "Language-Team: \n" "Language: en\n" @@ -22,9 +22,9 @@ msgstr "" "X-Poedit-SearchPathExcluded-1: doc\n" "X-Poedit-SearchPathExcluded-2: tests\n" -#: FlatCAMApp.py:789 FlatCAMApp.py:821 FlatCAMCommon.py:1925 -#: FlatCAMCommon.py:2040 flatcamEditors/FlatCAMGeoEditor.py:500 -#: flatcamEditors/FlatCAMGeoEditor.py:570 +#: FlatCAMApp.py:794 FlatCAMApp.py:826 FlatCAMDB.py:1481 FlatCAMDB.py:1596 +#: flatcamEditors/FlatCAMGeoEditor.py:499 +#: flatcamEditors/FlatCAMGeoEditor.py:569 #: flatcamEditors/FlatCAMGeoEditor.py:5152 flatcamGUI/PreferencesUI.py:5509 #: flatcamGUI/PreferencesUI.py:6056 flatcamTools/ToolNCC.py:431 #: flatcamTools/ToolNCC.py:2396 flatcamTools/ToolNCC.py:2424 @@ -35,8 +35,8 @@ msgstr "" msgid "Seed" msgstr "Seed" -#: FlatCAMApp.py:795 flatcamGUI/PreferencesUI.py:5588 -#: flatcamGUI/PreferencesUI.py:7695 flatcamTools/ToolCopperThieving.py:126 +#: FlatCAMApp.py:800 flatcamGUI/PreferencesUI.py:5588 +#: flatcamGUI/PreferencesUI.py:7695 flatcamTools/ToolCopperThieving.py:125 #: flatcamTools/ToolNCC.py:535 flatcamTools/ToolNCC.py:1301 #: flatcamTools/ToolNCC.py:1629 flatcamTools/ToolNCC.py:1914 #: flatcamTools/ToolNCC.py:1978 flatcamTools/ToolNCC.py:2962 @@ -44,21 +44,21 @@ msgstr "Seed" msgid "Itself" msgstr "Itself" -#: FlatCAMApp.py:822 flatcamGUI/PreferencesUI.py:6119 +#: FlatCAMApp.py:827 flatcamGUI/PreferencesUI.py:6119 #: flatcamTools/ToolPaint.py:486 flatcamTools/ToolPaint.py:1422 #: tclCommands/TclCommandPaint.py:162 msgid "All Polygons" msgstr "All Polygons" -#: FlatCAMApp.py:1129 +#: FlatCAMApp.py:1134 msgid "FlatCAM is initializing ..." msgstr "FlatCAM is initializing ..." -#: FlatCAMApp.py:1814 +#: FlatCAMApp.py:1828 msgid "Could not find the Language files. The App strings are missing." msgstr "Could not find the Language files. The App strings are missing." -#: FlatCAMApp.py:1908 +#: FlatCAMApp.py:1922 msgid "" "FlatCAM is initializing ...\n" "Canvas initialization started." @@ -66,7 +66,7 @@ msgstr "" "FlatCAM is initializing ...\n" "Canvas initialization started." -#: FlatCAMApp.py:1928 +#: FlatCAMApp.py:1942 msgid "" "FlatCAM is initializing ...\n" "Canvas initialization started.\n" @@ -76,66 +76,61 @@ msgstr "" "Canvas initialization started.\n" "Canvas initialization finished in" -#: FlatCAMApp.py:2570 flatcamGUI/GUIElements.py:2592 -msgid "Type >help< to get started" -msgstr "Type >help< to get started" - -#: FlatCAMApp.py:2822 FlatCAMApp.py:9400 +#: FlatCAMApp.py:2815 FlatCAMApp.py:9396 msgid "New Project - Not saved" msgstr "New Project - Not saved" -#: FlatCAMApp.py:2918 +#: FlatCAMApp.py:2911 msgid "" "Found old default preferences files. Please reboot the application to update." msgstr "" "Found old default preferences files. Please reboot the application to update." -#: FlatCAMApp.py:2969 FlatCAMApp.py:3889 FlatCAMApp.py:3938 FlatCAMApp.py:3993 -#: FlatCAMApp.py:4068 FlatCAMApp.py:6117 FlatCAMApp.py:9484 FlatCAMApp.py:9521 -#: FlatCAMApp.py:9563 FlatCAMApp.py:9592 FlatCAMApp.py:9632 FlatCAMApp.py:9657 -#: FlatCAMApp.py:9709 FlatCAMApp.py:9745 FlatCAMApp.py:9791 FlatCAMApp.py:9832 -#: FlatCAMApp.py:9873 FlatCAMApp.py:9914 FlatCAMApp.py:9955 FlatCAMApp.py:9999 -#: FlatCAMApp.py:10055 FlatCAMApp.py:10087 FlatCAMApp.py:10119 -#: FlatCAMApp.py:10356 FlatCAMApp.py:10400 FlatCAMApp.py:10477 -#: FlatCAMApp.py:10532 FlatCAMCommon.py:371 FlatCAMCommon.py:413 -#: FlatCAMCommon.py:1107 FlatCAMCommon.py:1153 FlatCAMCommon.py:2537 -#: FlatCAMCommon.py:2583 ObjectCollection.py:122 -#: flatcamEditors/FlatCAMExcEditor.py:1024 -#: flatcamEditors/FlatCAMExcEditor.py:1092 +#: FlatCAMApp.py:2962 FlatCAMApp.py:3882 FlatCAMApp.py:3931 FlatCAMApp.py:3986 +#: FlatCAMApp.py:4061 FlatCAMApp.py:6110 FlatCAMApp.py:9480 FlatCAMApp.py:9517 +#: FlatCAMApp.py:9559 FlatCAMApp.py:9588 FlatCAMApp.py:9629 FlatCAMApp.py:9654 +#: FlatCAMApp.py:9706 FlatCAMApp.py:9741 FlatCAMApp.py:9786 FlatCAMApp.py:9827 +#: FlatCAMApp.py:9868 FlatCAMApp.py:9909 FlatCAMApp.py:9950 FlatCAMApp.py:9994 +#: FlatCAMApp.py:10050 FlatCAMApp.py:10082 FlatCAMApp.py:10114 +#: FlatCAMApp.py:10351 FlatCAMApp.py:10394 FlatCAMApp.py:10471 +#: FlatCAMApp.py:10526 FlatCAMBookmark.py:291 FlatCAMBookmark.py:333 +#: FlatCAMDB.py:663 FlatCAMDB.py:709 FlatCAMDB.py:2093 FlatCAMDB.py:2139 +#: ObjectCollection.py:127 flatcamEditors/FlatCAMExcEditor.py:1023 +#: flatcamEditors/FlatCAMExcEditor.py:1091 #: flatcamEditors/FlatCAMTextEditor.py:223 flatcamGUI/FlatCAMGUI.py:3389 #: flatcamGUI/FlatCAMGUI.py:3601 flatcamGUI/FlatCAMGUI.py:3812 #: flatcamTools/ToolFilm.py:754 flatcamTools/ToolFilm.py:900 -#: flatcamTools/ToolImage.py:247 flatcamTools/ToolMove.py:270 +#: flatcamTools/ToolImage.py:247 flatcamTools/ToolMove.py:269 #: flatcamTools/ToolPcbWizard.py:301 flatcamTools/ToolPcbWizard.py:324 #: flatcamTools/ToolQRCode.py:791 flatcamTools/ToolQRCode.py:838 msgid "Cancelled." msgstr "Cancelled." -#: FlatCAMApp.py:2985 +#: FlatCAMApp.py:2978 msgid "Open Config file failed." msgstr "Open Config file failed." -#: FlatCAMApp.py:3000 +#: FlatCAMApp.py:2993 msgid "Open Script file failed." msgstr "Open Script file failed." -#: FlatCAMApp.py:3026 +#: FlatCAMApp.py:3019 msgid "Open Excellon file failed." msgstr "Open Excellon file failed." -#: FlatCAMApp.py:3039 +#: FlatCAMApp.py:3032 msgid "Open GCode file failed." msgstr "Open GCode file failed." -#: FlatCAMApp.py:3052 +#: FlatCAMApp.py:3045 msgid "Open Gerber file failed." msgstr "Open Gerber file failed." -#: FlatCAMApp.py:3429 +#: FlatCAMApp.py:3422 msgid "Select a Geometry, Gerber or Excellon Object to edit." msgstr "Select a Geometry, Gerber or Excellon Object to edit." -#: FlatCAMApp.py:3444 +#: FlatCAMApp.py:3437 msgid "" "Simultaneous editing of tools geometry in a MultiGeo Geometry is not " "possible.\n" @@ -145,96 +140,96 @@ msgstr "" "possible.\n" "Edit only one geometry at a time." -#: FlatCAMApp.py:3502 +#: FlatCAMApp.py:3495 msgid "Editor is activated ..." msgstr "Editor is activated ..." -#: FlatCAMApp.py:3523 +#: FlatCAMApp.py:3516 msgid "Do you want to save the edited object?" msgstr "Do you want to save the edited object?" -#: FlatCAMApp.py:3524 flatcamGUI/FlatCAMGUI.py:2273 +#: FlatCAMApp.py:3517 flatcamGUI/FlatCAMGUI.py:2273 msgid "Close Editor" msgstr "Close Editor" -#: FlatCAMApp.py:3527 FlatCAMApp.py:5169 FlatCAMApp.py:8030 FlatCAMApp.py:8056 -#: FlatCAMApp.py:9305 FlatCAMTranslation.py:108 FlatCAMTranslation.py:199 +#: FlatCAMApp.py:3520 FlatCAMApp.py:5162 FlatCAMApp.py:8024 FlatCAMApp.py:8050 +#: FlatCAMApp.py:9300 FlatCAMTranslation.py:108 FlatCAMTranslation.py:199 #: flatcamGUI/FlatCAMGUI.py:2479 msgid "Yes" msgstr "Yes" -#: FlatCAMApp.py:3528 FlatCAMApp.py:5170 FlatCAMApp.py:8031 FlatCAMApp.py:8057 -#: FlatCAMApp.py:9306 FlatCAMTranslation.py:109 FlatCAMTranslation.py:200 +#: FlatCAMApp.py:3521 FlatCAMApp.py:5163 FlatCAMApp.py:8025 FlatCAMApp.py:8051 +#: FlatCAMApp.py:9301 FlatCAMTranslation.py:109 FlatCAMTranslation.py:200 #: flatcamGUI/FlatCAMGUI.py:2480 flatcamGUI/PreferencesUI.py:5443 #: flatcamGUI/PreferencesUI.py:5989 flatcamTools/ToolNCC.py:182 #: flatcamTools/ToolPaint.py:166 msgid "No" msgstr "No" -#: FlatCAMApp.py:3529 FlatCAMApp.py:5171 FlatCAMApp.py:6055 FlatCAMApp.py:7006 -#: FlatCAMApp.py:9307 FlatCAMCommon.py:572 FlatCAMCommon.py:2127 +#: FlatCAMApp.py:3522 FlatCAMApp.py:5164 FlatCAMApp.py:6048 FlatCAMApp.py:7000 +#: FlatCAMApp.py:9302 FlatCAMDB.py:128 FlatCAMDB.py:1683 #: flatcamGUI/FlatCAMGUI.py:1332 msgid "Cancel" msgstr "Cancel" -#: FlatCAMApp.py:3561 +#: FlatCAMApp.py:3554 msgid "Object empty after edit." msgstr "Object empty after edit." -#: FlatCAMApp.py:3565 FlatCAMApp.py:3586 FlatCAMApp.py:3608 +#: FlatCAMApp.py:3558 FlatCAMApp.py:3579 FlatCAMApp.py:3601 msgid "Editor exited. Editor content saved." msgstr "Editor exited. Editor content saved." -#: FlatCAMApp.py:3612 FlatCAMApp.py:3635 FlatCAMApp.py:3653 +#: FlatCAMApp.py:3605 FlatCAMApp.py:3628 FlatCAMApp.py:3646 msgid "Select a Gerber, Geometry or Excellon Object to update." msgstr "Select a Gerber, Geometry or Excellon Object to update." -#: FlatCAMApp.py:3615 +#: FlatCAMApp.py:3608 msgid "is updated, returning to App..." msgstr "is updated, returning to App..." -#: FlatCAMApp.py:3622 +#: FlatCAMApp.py:3615 msgid "Editor exited. Editor content was not saved." msgstr "Editor exited. Editor content was not saved." -#: FlatCAMApp.py:3815 FlatCAMApp.py:3946 FlatCAMApp.py:5018 +#: FlatCAMApp.py:3808 FlatCAMApp.py:3939 FlatCAMApp.py:5011 msgid "Could not load defaults file." msgstr "Could not load defaults file." -#: FlatCAMApp.py:3827 FlatCAMApp.py:3954 FlatCAMApp.py:5027 +#: FlatCAMApp.py:3820 FlatCAMApp.py:3947 FlatCAMApp.py:5020 msgid "Failed to parse defaults file." msgstr "Failed to parse defaults file." -#: FlatCAMApp.py:3897 FlatCAMApp.py:5119 +#: FlatCAMApp.py:3890 FlatCAMApp.py:5112 msgid "Could not load factory defaults file." msgstr "Could not load factory defaults file." -#: FlatCAMApp.py:3905 FlatCAMApp.py:5129 +#: FlatCAMApp.py:3898 FlatCAMApp.py:5122 msgid "Failed to parse factory defaults file." msgstr "Failed to parse factory defaults file." -#: FlatCAMApp.py:3913 +#: FlatCAMApp.py:3906 msgid "Preferences default values are restored." msgstr "Preferences default values are restored." -#: FlatCAMApp.py:3928 FlatCAMApp.py:3932 +#: FlatCAMApp.py:3921 FlatCAMApp.py:3925 msgid "Import FlatCAM Preferences" msgstr "Import FlatCAM Preferences" -#: FlatCAMApp.py:3962 +#: FlatCAMApp.py:3955 msgid "Imported Defaults from" msgstr "Imported Defaults from" -#: FlatCAMApp.py:3982 FlatCAMApp.py:3987 +#: FlatCAMApp.py:3975 FlatCAMApp.py:3980 msgid "Export FlatCAM Preferences" msgstr "Export FlatCAM Preferences" -#: FlatCAMApp.py:4002 FlatCAMApp.py:4076 FlatCAMApp.py:10776 -#: FlatCAMApp.py:10824 FlatCAMApp.py:10950 FlatCAMApp.py:11087 -#: FlatCAMCommon.py:379 FlatCAMCommon.py:1115 FlatCAMCommon.py:2545 -#: FlatCAMObj.py:7484 flatcamEditors/FlatCAMTextEditor.py:276 +#: FlatCAMApp.py:3995 FlatCAMApp.py:4069 FlatCAMApp.py:10770 +#: FlatCAMApp.py:10818 FlatCAMApp.py:10943 FlatCAMApp.py:11079 +#: FlatCAMBookmark.py:299 FlatCAMDB.py:671 FlatCAMDB.py:2101 +#: flatcamEditors/FlatCAMTextEditor.py:276 flatcamObjects/FlatCAMCNCJob.py:958 #: flatcamTools/ToolFilm.py:1031 flatcamTools/ToolFilm.py:1212 -#: flatcamTools/ToolSolderPaste.py:1533 +#: flatcamTools/ToolSolderPaste.py:1534 msgid "" "Permission denied, saving not possible.\n" "Most likely another app is holding the file open and not accessible." @@ -242,45 +237,47 @@ msgstr "" "Permission denied, saving not possible.\n" "Most likely another app is holding the file open and not accessible." -#: FlatCAMApp.py:4014 +#: FlatCAMApp.py:4007 msgid "Could not load preferences file." msgstr "Could not load preferences file." -#: FlatCAMApp.py:4033 FlatCAMApp.py:4100 FlatCAMApp.py:5046 +#: FlatCAMApp.py:4026 FlatCAMApp.py:4093 FlatCAMApp.py:5039 msgid "Failed to write defaults to file." msgstr "Failed to write defaults to file." -#: FlatCAMApp.py:4038 +#: FlatCAMApp.py:4031 msgid "Exported preferences to" msgstr "Exported preferences to" -#: FlatCAMApp.py:4058 FlatCAMApp.py:4063 +#: FlatCAMApp.py:4051 FlatCAMApp.py:4056 msgid "Save to file" msgstr "Save to file" -#: FlatCAMApp.py:4087 +#: FlatCAMApp.py:4080 msgid "Could not load the file." msgstr "Could not load the file." -#: FlatCAMApp.py:4103 +#: FlatCAMApp.py:4096 msgid "Exported file to" msgstr "Exported file to" -#: FlatCAMApp.py:4186 +#: FlatCAMApp.py:4179 msgid "Failed to open recent files file for writing." msgstr "Failed to open recent files file for writing." -#: FlatCAMApp.py:4197 +#: FlatCAMApp.py:4190 msgid "Failed to open recent projects file for writing." msgstr "Failed to open recent projects file for writing." -#: FlatCAMApp.py:4282 FlatCAMApp.py:11283 FlatCAMApp.py:11342 -#: FlatCAMApp.py:11470 FlatCAMApp.py:12196 FlatCAMObj.py:5605 -#: flatcamEditors/FlatCAMGrbEditor.py:4231 flatcamTools/ToolPcbWizard.py:433 +#: FlatCAMApp.py:4275 FlatCAMApp.py:11275 FlatCAMApp.py:11334 +#: FlatCAMApp.py:11462 FlatCAMApp.py:12193 +#: flatcamEditors/FlatCAMGrbEditor.py:4231 +#: flatcamObjects/FlatCAMGeometry.py:1671 flatcamParsers/ParseExcellon.py:897 +#: flatcamTools/ToolPcbWizard.py:433 msgid "An internal error has occurred. See shell.\n" msgstr "An internal error has occurred. See shell.\n" -#: FlatCAMApp.py:4283 +#: FlatCAMApp.py:4276 #, python-brace-format msgid "" "Object ({kind}) failed because: {error} \n" @@ -289,63 +286,64 @@ msgstr "" "Object ({kind}) failed because: {error} \n" "\n" -#: FlatCAMApp.py:4298 +#: FlatCAMApp.py:4291 msgid "Converting units to " msgstr "Converting units to " -#: FlatCAMApp.py:4411 +#: FlatCAMApp.py:4404 msgid "CREATE A NEW FLATCAM TCL SCRIPT" msgstr "CREATE A NEW FLATCAM TCL SCRIPT" -#: FlatCAMApp.py:4412 +#: FlatCAMApp.py:4405 msgid "TCL Tutorial is here" msgstr "TCL Tutorial is here" -#: FlatCAMApp.py:4414 +#: FlatCAMApp.py:4407 msgid "FlatCAM commands list" msgstr "FlatCAM commands list" -#: FlatCAMApp.py:4465 FlatCAMApp.py:4471 FlatCAMApp.py:4477 FlatCAMApp.py:4483 -#: FlatCAMApp.py:4489 FlatCAMApp.py:4495 +#: FlatCAMApp.py:4458 FlatCAMApp.py:4464 FlatCAMApp.py:4470 FlatCAMApp.py:4476 +#: FlatCAMApp.py:4482 FlatCAMApp.py:4488 msgid "created/selected" msgstr "created/selected" -#: FlatCAMApp.py:4510 FlatCAMApp.py:7092 FlatCAMObj.py:278 FlatCAMObj.py:309 -#: FlatCAMObj.py:325 FlatCAMObj.py:405 flatcamTools/ToolCopperThieving.py:1482 -#: flatcamTools/ToolFiducials.py:809 flatcamTools/ToolMove.py:230 +#: FlatCAMApp.py:4503 FlatCAMApp.py:7086 flatcamObjects/FlatCAMObj.py:248 +#: flatcamObjects/FlatCAMObj.py:279 flatcamObjects/FlatCAMObj.py:295 +#: flatcamObjects/FlatCAMObj.py:375 flatcamTools/ToolCopperThieving.py:1481 +#: flatcamTools/ToolFiducials.py:809 flatcamTools/ToolMove.py:229 #: flatcamTools/ToolQRCode.py:728 msgid "Plotting" msgstr "Plotting" -#: FlatCAMApp.py:4573 flatcamGUI/FlatCAMGUI.py:530 +#: FlatCAMApp.py:4566 flatcamGUI/FlatCAMGUI.py:530 msgid "About FlatCAM" msgstr "About FlatCAM" -#: FlatCAMApp.py:4599 +#: FlatCAMApp.py:4592 msgid "2D Computer-Aided Printed Circuit Board Manufacturing" msgstr "2D Computer-Aided Printed Circuit Board Manufacturing" -#: FlatCAMApp.py:4600 +#: FlatCAMApp.py:4593 msgid "Development" msgstr "Development" -#: FlatCAMApp.py:4601 +#: FlatCAMApp.py:4594 msgid "DOWNLOAD" msgstr "DOWNLOAD" -#: FlatCAMApp.py:4602 +#: FlatCAMApp.py:4595 msgid "Issue tracker" msgstr "Issue tracker" -#: FlatCAMApp.py:4606 FlatCAMApp.py:4948 flatcamGUI/GUIElements.py:2583 +#: FlatCAMApp.py:4599 FlatCAMApp.py:4941 flatcamGUI/GUIElements.py:2583 msgid "Close" msgstr "Close" -#: FlatCAMApp.py:4621 +#: FlatCAMApp.py:4614 msgid "Licensed under the MIT license" msgstr "Licensed under the MIT license" -#: FlatCAMApp.py:4630 +#: FlatCAMApp.py:4623 msgid "" "Permission is hereby granted, free of charge, to any person obtaining a " "copy\n" @@ -393,7 +391,7 @@ msgstr "" "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n" "THE SOFTWARE." -#: FlatCAMApp.py:4652 +#: FlatCAMApp.py:4645 msgid "" "Some of the icons used are from the following sources:
    Icons by FreepikIcons8
    Icons by oNline Web Fonts" -#: FlatCAMApp.py:4685 +#: FlatCAMApp.py:4678 msgid "Splash" msgstr "Splash" -#: FlatCAMApp.py:4691 +#: FlatCAMApp.py:4684 msgid "Programmers" msgstr "Programmers" -#: FlatCAMApp.py:4697 +#: FlatCAMApp.py:4690 msgid "Translators" msgstr "Translators" -#: FlatCAMApp.py:4703 +#: FlatCAMApp.py:4696 msgid "License" msgstr "License" -#: FlatCAMApp.py:4709 +#: FlatCAMApp.py:4702 msgid "Attributions" msgstr "Attributions" -#: FlatCAMApp.py:4732 +#: FlatCAMApp.py:4725 msgid "Programmer" msgstr "Programmer" -#: FlatCAMApp.py:4733 +#: FlatCAMApp.py:4726 msgid "Status" msgstr "Status" -#: FlatCAMApp.py:4734 FlatCAMApp.py:4812 +#: FlatCAMApp.py:4727 FlatCAMApp.py:4805 msgid "E-mail" msgstr "E-mail" -#: FlatCAMApp.py:4742 +#: FlatCAMApp.py:4735 msgid "BETA Maintainer >= 2019" msgstr "BETA Maintainer >= 2019" -#: FlatCAMApp.py:4809 +#: FlatCAMApp.py:4802 msgid "Language" msgstr "Language" -#: FlatCAMApp.py:4810 +#: FlatCAMApp.py:4803 msgid "Translator" msgstr "Translator" -#: FlatCAMApp.py:4811 +#: FlatCAMApp.py:4804 msgid "Corrections" msgstr "Corrections" -#: FlatCAMApp.py:4920 FlatCAMApp.py:4928 FlatCAMApp.py:8075 +#: FlatCAMApp.py:4913 FlatCAMApp.py:4921 FlatCAMApp.py:8069 #: flatcamGUI/FlatCAMGUI.py:512 msgid "Bookmarks Manager" msgstr "Bookmarks Manager" -#: FlatCAMApp.py:4939 +#: FlatCAMApp.py:4932 msgid "" "This entry will resolve to another website if:\n" "\n" @@ -482,27 +480,27 @@ msgstr "" "If you can't get any informations about FlatCAM beta\n" "use the YouTube channel link from the Help menu." -#: FlatCAMApp.py:4946 +#: FlatCAMApp.py:4939 msgid "Alternative website" msgstr "Alternative website" -#: FlatCAMApp.py:5050 FlatCAMApp.py:8039 +#: FlatCAMApp.py:5043 FlatCAMApp.py:8033 msgid "Preferences saved." msgstr "Preferences saved." -#: FlatCAMApp.py:5145 +#: FlatCAMApp.py:5138 msgid "Failed to write factory defaults to file." msgstr "Failed to write factory defaults to file." -#: FlatCAMApp.py:5149 +#: FlatCAMApp.py:5142 msgid "Factory defaults saved." msgstr "Factory defaults saved." -#: FlatCAMApp.py:5159 flatcamGUI/FlatCAMGUI.py:4178 +#: FlatCAMApp.py:5152 flatcamGUI/FlatCAMGUI.py:4178 msgid "Application is saving the project. Please wait ..." msgstr "Application is saving the project. Please wait ..." -#: FlatCAMApp.py:5164 FlatCAMTranslation.py:194 +#: FlatCAMApp.py:5157 FlatCAMTranslation.py:194 msgid "" "There are files/objects modified in FlatCAM. \n" "Do you want to Save the project?" @@ -510,27 +508,27 @@ msgstr "" "There are files/objects modified in FlatCAM. \n" "Do you want to Save the project?" -#: FlatCAMApp.py:5167 FlatCAMApp.py:9303 FlatCAMTranslation.py:197 +#: FlatCAMApp.py:5160 FlatCAMApp.py:9298 FlatCAMTranslation.py:197 msgid "Save changes" msgstr "Save changes" -#: FlatCAMApp.py:5423 +#: FlatCAMApp.py:5416 msgid "Selected Excellon file extensions registered with FlatCAM." msgstr "Selected Excellon file extensions registered with FlatCAM." -#: FlatCAMApp.py:5445 +#: FlatCAMApp.py:5438 msgid "Selected GCode file extensions registered with FlatCAM." msgstr "Selected GCode file extensions registered with FlatCAM." -#: FlatCAMApp.py:5467 +#: FlatCAMApp.py:5460 msgid "Selected Gerber file extensions registered with FlatCAM." msgstr "Selected Gerber file extensions registered with FlatCAM." -#: FlatCAMApp.py:5655 FlatCAMApp.py:5714 FlatCAMApp.py:5742 +#: FlatCAMApp.py:5648 FlatCAMApp.py:5707 FlatCAMApp.py:5735 msgid "At least two objects are required for join. Objects currently selected" msgstr "At least two objects are required for join. Objects currently selected" -#: FlatCAMApp.py:5664 +#: FlatCAMApp.py:5657 msgid "" "Failed join. The Geometry objects are of different types.\n" "At least one is MultiGeo type and the other is SingleGeo type. A possibility " @@ -546,47 +544,47 @@ msgstr "" "be lost and the result may not be what was expected. \n" "Check the generated GCODE." -#: FlatCAMApp.py:5676 FlatCAMApp.py:5686 +#: FlatCAMApp.py:5669 FlatCAMApp.py:5679 msgid "Geometry merging finished" msgstr "Geometry merging finished" -#: FlatCAMApp.py:5709 +#: FlatCAMApp.py:5702 msgid "Failed. Excellon joining works only on Excellon objects." msgstr "Failed. Excellon joining works only on Excellon objects." -#: FlatCAMApp.py:5719 +#: FlatCAMApp.py:5712 msgid "Excellon merging finished" msgstr "Excellon merging finished" -#: FlatCAMApp.py:5737 +#: FlatCAMApp.py:5730 msgid "Failed. Gerber joining works only on Gerber objects." msgstr "Failed. Gerber joining works only on Gerber objects." -#: FlatCAMApp.py:5747 +#: FlatCAMApp.py:5740 msgid "Gerber merging finished" msgstr "Gerber merging finished" -#: FlatCAMApp.py:5767 FlatCAMApp.py:5802 +#: FlatCAMApp.py:5760 FlatCAMApp.py:5795 msgid "Failed. Select a Geometry Object and try again." msgstr "Failed. Select a Geometry Object and try again." -#: FlatCAMApp.py:5771 FlatCAMApp.py:5807 -msgid "Expected a FlatCAMGeometry, got" -msgstr "Expected a FlatCAMGeometry, got" +#: FlatCAMApp.py:5764 FlatCAMApp.py:5800 +msgid "Expected a GeometryObject, got" +msgstr "Expected a GeometryObject, got" -#: FlatCAMApp.py:5784 +#: FlatCAMApp.py:5777 msgid "A Geometry object was converted to MultiGeo type." msgstr "A Geometry object was converted to MultiGeo type." -#: FlatCAMApp.py:5822 +#: FlatCAMApp.py:5815 msgid "A Geometry object was converted to SingleGeo type." msgstr "A Geometry object was converted to SingleGeo type." -#: FlatCAMApp.py:6049 +#: FlatCAMApp.py:6042 msgid "Toggle Units" msgstr "Toggle Units" -#: FlatCAMApp.py:6051 +#: FlatCAMApp.py:6044 msgid "" "Changing the units of the project\n" "will scale all objects.\n" @@ -598,44 +596,44 @@ msgstr "" "\n" "Do you want to continue?" -#: FlatCAMApp.py:6054 FlatCAMApp.py:6928 FlatCAMApp.py:7005 FlatCAMApp.py:9676 -#: FlatCAMApp.py:9690 FlatCAMApp.py:10025 FlatCAMApp.py:10035 +#: FlatCAMApp.py:6047 FlatCAMApp.py:6922 FlatCAMApp.py:6999 FlatCAMApp.py:9673 +#: FlatCAMApp.py:9687 FlatCAMApp.py:10020 FlatCAMApp.py:10030 msgid "Ok" msgstr "Ok" -#: FlatCAMApp.py:6103 +#: FlatCAMApp.py:6096 msgid "Converted units to" msgstr "Converted units to" -#: FlatCAMApp.py:6743 +#: FlatCAMApp.py:6737 msgid "Detachable Tabs" msgstr "Detachable Tabs" -#: FlatCAMApp.py:6817 FlatCAMApp.py:6861 FlatCAMApp.py:6889 FlatCAMApp.py:7822 -#: FlatCAMApp.py:7890 FlatCAMApp.py:7994 +#: FlatCAMApp.py:6811 FlatCAMApp.py:6855 FlatCAMApp.py:6883 FlatCAMApp.py:7816 +#: FlatCAMApp.py:7884 FlatCAMApp.py:7988 msgid "Preferences" msgstr "Preferences" -#: FlatCAMApp.py:6823 +#: FlatCAMApp.py:6817 msgid "Preferences applied." msgstr "Preferences applied." -#: FlatCAMApp.py:6894 +#: FlatCAMApp.py:6888 msgid "Preferences closed without saving." msgstr "Preferences closed without saving." -#: FlatCAMApp.py:6917 flatcamTools/ToolNCC.py:932 flatcamTools/ToolNCC.py:1426 +#: FlatCAMApp.py:6911 flatcamTools/ToolNCC.py:932 flatcamTools/ToolNCC.py:1426 #: flatcamTools/ToolPaint.py:858 flatcamTools/ToolSolderPaste.py:568 #: flatcamTools/ToolSolderPaste.py:893 msgid "Please enter a tool diameter with non-zero value, in Float format." msgstr "Please enter a tool diameter with non-zero value, in Float format." -#: FlatCAMApp.py:6921 flatcamTools/ToolNCC.py:936 flatcamTools/ToolPaint.py:862 +#: FlatCAMApp.py:6915 flatcamTools/ToolNCC.py:936 flatcamTools/ToolPaint.py:862 #: flatcamTools/ToolSolderPaste.py:572 msgid "Adding Tool cancelled" msgstr "Adding Tool cancelled" -#: FlatCAMApp.py:6924 +#: FlatCAMApp.py:6918 msgid "" "Adding Tool works only when Advanced is checked.\n" "Go to Preferences -> General - Show Advanced Options." @@ -643,11 +641,11 @@ msgstr "" "Adding Tool works only when Advanced is checked.\n" "Go to Preferences -> General - Show Advanced Options." -#: FlatCAMApp.py:7000 +#: FlatCAMApp.py:6994 msgid "Delete objects" msgstr "Delete objects" -#: FlatCAMApp.py:7003 +#: FlatCAMApp.py:6997 msgid "" "Are you sure you want to permanently delete\n" "the selected objects?" @@ -655,57 +653,57 @@ msgstr "" "Are you sure you want to permanently delete\n" "the selected objects?" -#: FlatCAMApp.py:7041 +#: FlatCAMApp.py:7035 msgid "Object(s) deleted" msgstr "Object(s) deleted" -#: FlatCAMApp.py:7045 FlatCAMApp.py:7200 flatcamTools/ToolDblSided.py:819 +#: FlatCAMApp.py:7039 FlatCAMApp.py:7194 flatcamTools/ToolDblSided.py:818 msgid "Failed. No object(s) selected..." msgstr "Failed. No object(s) selected..." -#: FlatCAMApp.py:7047 +#: FlatCAMApp.py:7041 msgid "Save the work in Editor and try again ..." msgstr "Save the work in Editor and try again ..." -#: FlatCAMApp.py:7076 +#: FlatCAMApp.py:7070 msgid "Object deleted" msgstr "Object deleted" -#: FlatCAMApp.py:7103 +#: FlatCAMApp.py:7097 msgid "Click to set the origin ..." msgstr "Click to set the origin ..." -#: FlatCAMApp.py:7125 +#: FlatCAMApp.py:7119 msgid "Setting Origin..." msgstr "Setting Origin..." -#: FlatCAMApp.py:7138 FlatCAMApp.py:7240 +#: FlatCAMApp.py:7132 FlatCAMApp.py:7234 msgid "Origin set" msgstr "Origin set" -#: FlatCAMApp.py:7155 +#: FlatCAMApp.py:7149 msgid "Origin coordinates specified but incomplete." msgstr "Origin coordinates specified but incomplete." -#: FlatCAMApp.py:7196 +#: FlatCAMApp.py:7190 msgid "Moving to Origin..." msgstr "Moving to Origin..." -#: FlatCAMApp.py:7277 +#: FlatCAMApp.py:7271 msgid "Jump to ..." msgstr "Jump to ..." -#: FlatCAMApp.py:7278 +#: FlatCAMApp.py:7272 msgid "Enter the coordinates in format X,Y:" msgstr "Enter the coordinates in format X,Y:" -#: FlatCAMApp.py:7288 +#: FlatCAMApp.py:7282 msgid "Wrong coordinates. Enter coordinates in format: X,Y" msgstr "Wrong coordinates. Enter coordinates in format: X,Y" -#: FlatCAMApp.py:7366 FlatCAMApp.py:7515 -#: flatcamEditors/FlatCAMExcEditor.py:3622 -#: flatcamEditors/FlatCAMExcEditor.py:3630 +#: FlatCAMApp.py:7360 FlatCAMApp.py:7509 +#: flatcamEditors/FlatCAMExcEditor.py:3624 +#: flatcamEditors/FlatCAMExcEditor.py:3632 #: flatcamEditors/FlatCAMGeoEditor.py:4349 #: flatcamEditors/FlatCAMGeoEditor.py:4363 #: flatcamEditors/FlatCAMGrbEditor.py:1085 @@ -719,79 +717,79 @@ msgstr "Wrong coordinates. Enter coordinates in format: X,Y" msgid "Done." msgstr "Done." -#: FlatCAMApp.py:7381 FlatCAMApp.py:9672 FlatCAMApp.py:9768 FlatCAMApp.py:9810 -#: FlatCAMApp.py:9851 FlatCAMApp.py:9892 FlatCAMApp.py:9933 FlatCAMApp.py:9977 -#: FlatCAMApp.py:10021 FlatCAMApp.py:10510 FlatCAMApp.py:10514 +#: FlatCAMApp.py:7375 FlatCAMApp.py:9669 FlatCAMApp.py:9764 FlatCAMApp.py:9805 +#: FlatCAMApp.py:9846 FlatCAMApp.py:9887 FlatCAMApp.py:9928 FlatCAMApp.py:9972 +#: FlatCAMApp.py:10016 FlatCAMApp.py:10504 FlatCAMApp.py:10508 #: flatcamTools/ToolProperties.py:116 msgid "No object selected." msgstr "No object selected." -#: FlatCAMApp.py:7400 +#: FlatCAMApp.py:7394 msgid "Bottom-Left" msgstr "Bottom-Left" -#: FlatCAMApp.py:7401 flatcamGUI/PreferencesUI.py:8111 +#: FlatCAMApp.py:7395 flatcamGUI/PreferencesUI.py:8111 #: flatcamTools/ToolCalibration.py:159 msgid "Top-Left" msgstr "Top-Left" -#: FlatCAMApp.py:7402 flatcamGUI/PreferencesUI.py:8112 +#: FlatCAMApp.py:7396 flatcamGUI/PreferencesUI.py:8112 #: flatcamTools/ToolCalibration.py:160 msgid "Bottom-Right" msgstr "Bottom-Right" -#: FlatCAMApp.py:7403 +#: FlatCAMApp.py:7397 msgid "Top-Right" msgstr "Top-Right" -#: FlatCAMApp.py:7404 flatcamGUI/ObjectUI.py:2624 +#: FlatCAMApp.py:7398 flatcamGUI/ObjectUI.py:2625 msgid "Center" msgstr "Center" -#: FlatCAMApp.py:7424 +#: FlatCAMApp.py:7418 msgid "Locate ..." msgstr "Locate ..." -#: FlatCAMApp.py:7685 FlatCAMApp.py:7762 +#: FlatCAMApp.py:7679 FlatCAMApp.py:7756 msgid "No object is selected. Select an object and try again." msgstr "No object is selected. Select an object and try again." -#: FlatCAMApp.py:7788 +#: FlatCAMApp.py:7782 msgid "" "Aborting. The current task will be gracefully closed as soon as possible..." msgstr "" "Aborting. The current task will be gracefully closed as soon as possible..." -#: FlatCAMApp.py:7794 +#: FlatCAMApp.py:7788 msgid "The current task was gracefully closed on user request..." msgstr "The current task was gracefully closed on user request..." -#: FlatCAMApp.py:7887 +#: FlatCAMApp.py:7881 msgid "Preferences edited but not saved." msgstr "Preferences edited but not saved." -#: FlatCAMApp.py:7904 FlatCAMApp.py:7932 FlatCAMApp.py:7959 FlatCAMApp.py:7978 -#: FlatCAMApp.py:8045 FlatCAMCommon.py:1182 FlatCAMCommon.py:1357 -#: FlatCAMCommon.py:2612 FlatCAMCommon.py:2820 FlatCAMObj.py:4798 +#: FlatCAMApp.py:7898 FlatCAMApp.py:7926 FlatCAMApp.py:7953 FlatCAMApp.py:7972 +#: FlatCAMApp.py:8039 FlatCAMDB.py:738 FlatCAMDB.py:913 FlatCAMDB.py:2168 +#: FlatCAMDB.py:2378 flatcamObjects/FlatCAMGeometry.py:862 #: flatcamTools/ToolNCC.py:3958 flatcamTools/ToolNCC.py:4042 #: flatcamTools/ToolPaint.py:3548 flatcamTools/ToolPaint.py:3633 msgid "Tools Database" msgstr "Tools Database" -#: FlatCAMApp.py:7956 +#: FlatCAMApp.py:7950 msgid "Tools in Tools Database edited but not saved." msgstr "Tools in Tools Database edited but not saved." -#: FlatCAMApp.py:7982 flatcamTools/ToolNCC.py:3965 +#: FlatCAMApp.py:7976 flatcamTools/ToolNCC.py:3965 #: flatcamTools/ToolPaint.py:3555 msgid "Tool from DB added in Tool Table." msgstr "Tool from DB added in Tool Table." -#: FlatCAMApp.py:7984 +#: FlatCAMApp.py:7978 msgid "Adding tool from DB is not allowed for this object." msgstr "Adding tool from DB is not allowed for this object." -#: FlatCAMApp.py:8025 +#: FlatCAMApp.py:8019 msgid "" "One or more values are changed.\n" "Do you want to save the Preferences?" @@ -799,11 +797,11 @@ msgstr "" "One or more values are changed.\n" "Do you want to save the Preferences?" -#: FlatCAMApp.py:8027 flatcamGUI/FlatCAMGUI.py:291 +#: FlatCAMApp.py:8021 flatcamGUI/FlatCAMGUI.py:291 msgid "Save Preferences" msgstr "Save Preferences" -#: FlatCAMApp.py:8051 +#: FlatCAMApp.py:8045 msgid "" "One or more Tools are edited.\n" "Do you want to update the Tools Database?" @@ -811,174 +809,173 @@ msgstr "" "One or more Tools are edited.\n" "Do you want to update the Tools Database?" -#: FlatCAMApp.py:8053 +#: FlatCAMApp.py:8047 msgid "Save Tools Database" msgstr "Save Tools Database" -#: FlatCAMApp.py:8072 FlatCAMApp.py:10259 FlatCAMObj.py:7089 +#: FlatCAMApp.py:8066 FlatCAMApp.py:10254 flatcamObjects/FlatCAMCNCJob.py:562 msgid "Code Editor" msgstr "Code Editor" -#: FlatCAMApp.py:8094 +#: FlatCAMApp.py:8088 msgid "No object selected to Flip on Y axis." msgstr "No object selected to Flip on Y axis." -#: FlatCAMApp.py:8120 +#: FlatCAMApp.py:8114 msgid "Flip on Y axis done." msgstr "Flip on Y axis done." -#: FlatCAMApp.py:8122 FlatCAMApp.py:8170 +#: FlatCAMApp.py:8116 FlatCAMApp.py:8164 #: flatcamEditors/FlatCAMGrbEditor.py:5893 msgid "Flip action was not executed." msgstr "Flip action was not executed." -#: FlatCAMApp.py:8142 +#: FlatCAMApp.py:8136 msgid "No object selected to Flip on X axis." msgstr "No object selected to Flip on X axis." -#: FlatCAMApp.py:8168 +#: FlatCAMApp.py:8162 msgid "Flip on X axis done." msgstr "Flip on X axis done." -#: FlatCAMApp.py:8190 +#: FlatCAMApp.py:8184 msgid "No object selected to Rotate." msgstr "No object selected to Rotate." -#: FlatCAMApp.py:8193 FlatCAMApp.py:8246 FlatCAMApp.py:8285 +#: FlatCAMApp.py:8187 FlatCAMApp.py:8240 FlatCAMApp.py:8279 msgid "Transform" msgstr "Transform" -#: FlatCAMApp.py:8193 FlatCAMApp.py:8246 FlatCAMApp.py:8285 +#: FlatCAMApp.py:8187 FlatCAMApp.py:8240 FlatCAMApp.py:8279 msgid "Enter the Angle value:" msgstr "Enter the Angle value:" -#: FlatCAMApp.py:8224 +#: FlatCAMApp.py:8218 msgid "Rotation done." msgstr "Rotation done." -#: FlatCAMApp.py:8226 +#: FlatCAMApp.py:8220 msgid "Rotation movement was not executed." msgstr "Rotation movement was not executed." -#: FlatCAMApp.py:8244 +#: FlatCAMApp.py:8238 msgid "No object selected to Skew/Shear on X axis." msgstr "No object selected to Skew/Shear on X axis." -#: FlatCAMApp.py:8266 +#: FlatCAMApp.py:8260 msgid "Skew on X axis done." msgstr "Skew on X axis done." -#: FlatCAMApp.py:8283 +#: FlatCAMApp.py:8277 msgid "No object selected to Skew/Shear on Y axis." msgstr "No object selected to Skew/Shear on Y axis." -#: FlatCAMApp.py:8305 +#: FlatCAMApp.py:8299 msgid "Skew on Y axis done." msgstr "Skew on Y axis done." -#: FlatCAMApp.py:8458 FlatCAMApp.py:8505 flatcamGUI/FlatCAMGUI.py:488 +#: FlatCAMApp.py:8450 FlatCAMApp.py:8497 flatcamGUI/FlatCAMGUI.py:488 #: flatcamGUI/FlatCAMGUI.py:1713 msgid "Select All" msgstr "Select All" -#: FlatCAMApp.py:8462 FlatCAMApp.py:8509 flatcamGUI/FlatCAMGUI.py:490 +#: FlatCAMApp.py:8454 FlatCAMApp.py:8501 flatcamGUI/FlatCAMGUI.py:490 msgid "Deselect All" msgstr "Deselect All" -#: FlatCAMApp.py:8525 +#: FlatCAMApp.py:8517 msgid "All objects are selected." msgstr "All objects are selected." -#: FlatCAMApp.py:8535 +#: FlatCAMApp.py:8527 msgid "Objects selection is cleared." msgstr "Objects selection is cleared." -#: FlatCAMApp.py:8555 flatcamGUI/FlatCAMGUI.py:1706 +#: FlatCAMApp.py:8547 flatcamGUI/FlatCAMGUI.py:1706 msgid "Grid On/Off" msgstr "Grid On/Off" -#: FlatCAMApp.py:8567 flatcamEditors/FlatCAMGeoEditor.py:940 +#: FlatCAMApp.py:8559 flatcamEditors/FlatCAMGeoEditor.py:939 #: flatcamEditors/FlatCAMGrbEditor.py:2580 -#: flatcamEditors/FlatCAMGrbEditor.py:5475 flatcamGUI/ObjectUI.py:1593 -#: flatcamTools/ToolDblSided.py:193 flatcamTools/ToolDblSided.py:426 +#: flatcamEditors/FlatCAMGrbEditor.py:5475 flatcamGUI/ObjectUI.py:1594 +#: flatcamTools/ToolDblSided.py:192 flatcamTools/ToolDblSided.py:425 #: flatcamTools/ToolNCC.py:294 flatcamTools/ToolNCC.py:631 #: flatcamTools/ToolPaint.py:277 flatcamTools/ToolPaint.py:676 -#: flatcamTools/ToolSolderPaste.py:123 flatcamTools/ToolSolderPaste.py:597 -#: flatcamTools/ToolTransform.py:479 +#: flatcamTools/ToolSolderPaste.py:122 flatcamTools/ToolSolderPaste.py:597 +#: flatcamTools/ToolTransform.py:478 msgid "Add" msgstr "Add" -#: FlatCAMApp.py:8569 FlatCAMObj.py:4416 -#: flatcamEditors/FlatCAMGrbEditor.py:2585 +#: FlatCAMApp.py:8561 flatcamEditors/FlatCAMGrbEditor.py:2585 #: flatcamEditors/FlatCAMGrbEditor.py:2733 flatcamGUI/FlatCAMGUI.py:736 #: flatcamGUI/FlatCAMGUI.py:1059 flatcamGUI/FlatCAMGUI.py:2126 #: flatcamGUI/FlatCAMGUI.py:2269 flatcamGUI/FlatCAMGUI.py:2733 -#: flatcamGUI/ObjectUI.py:1621 flatcamTools/ToolNCC.py:316 -#: flatcamTools/ToolNCC.py:637 flatcamTools/ToolPaint.py:299 -#: flatcamTools/ToolPaint.py:682 flatcamTools/ToolSolderPaste.py:129 -#: flatcamTools/ToolSolderPaste.py:600 +#: flatcamGUI/ObjectUI.py:1622 flatcamObjects/FlatCAMGeometry.py:480 +#: flatcamTools/ToolNCC.py:316 flatcamTools/ToolNCC.py:637 +#: flatcamTools/ToolPaint.py:299 flatcamTools/ToolPaint.py:682 +#: flatcamTools/ToolSolderPaste.py:128 flatcamTools/ToolSolderPaste.py:600 msgid "Delete" msgstr "Delete" -#: FlatCAMApp.py:8582 +#: FlatCAMApp.py:8577 msgid "New Grid ..." msgstr "New Grid ..." -#: FlatCAMApp.py:8583 +#: FlatCAMApp.py:8578 msgid "Enter a Grid Value:" msgstr "Enter a Grid Value:" -#: FlatCAMApp.py:8591 FlatCAMApp.py:8618 +#: FlatCAMApp.py:8586 FlatCAMApp.py:8613 msgid "Please enter a grid value with non-zero value, in Float format." msgstr "Please enter a grid value with non-zero value, in Float format." -#: FlatCAMApp.py:8597 +#: FlatCAMApp.py:8592 msgid "New Grid added" msgstr "New Grid added" -#: FlatCAMApp.py:8600 +#: FlatCAMApp.py:8595 msgid "Grid already exists" msgstr "Grid already exists" -#: FlatCAMApp.py:8603 +#: FlatCAMApp.py:8598 msgid "Adding New Grid cancelled" msgstr "Adding New Grid cancelled" -#: FlatCAMApp.py:8625 +#: FlatCAMApp.py:8620 msgid " Grid Value does not exist" msgstr " Grid Value does not exist" -#: FlatCAMApp.py:8628 +#: FlatCAMApp.py:8623 msgid "Grid Value deleted" msgstr "Grid Value deleted" -#: FlatCAMApp.py:8631 +#: FlatCAMApp.py:8626 msgid "Delete Grid value cancelled" msgstr "Delete Grid value cancelled" -#: FlatCAMApp.py:8637 +#: FlatCAMApp.py:8632 msgid "Key Shortcut List" msgstr "Key Shortcut List" -#: FlatCAMApp.py:8671 +#: FlatCAMApp.py:8666 msgid " No object selected to copy it's name" msgstr " No object selected to copy it's name" -#: FlatCAMApp.py:8675 +#: FlatCAMApp.py:8670 msgid "Name copied on clipboard ..." msgstr "Name copied on clipboard ..." -#: FlatCAMApp.py:8888 flatcamEditors/FlatCAMGrbEditor.py:4421 +#: FlatCAMApp.py:8883 flatcamEditors/FlatCAMGrbEditor.py:4421 msgid "Coordinates copied to clipboard." msgstr "Coordinates copied to clipboard." -#: FlatCAMApp.py:9127 FlatCAMApp.py:9133 FlatCAMApp.py:9139 FlatCAMApp.py:9145 -#: ObjectCollection.py:911 ObjectCollection.py:917 ObjectCollection.py:923 -#: ObjectCollection.py:929 ObjectCollection.py:935 ObjectCollection.py:941 +#: FlatCAMApp.py:9122 FlatCAMApp.py:9128 FlatCAMApp.py:9134 FlatCAMApp.py:9140 +#: ObjectCollection.py:923 ObjectCollection.py:929 ObjectCollection.py:935 +#: ObjectCollection.py:941 ObjectCollection.py:947 ObjectCollection.py:953 msgid "selected" msgstr "selected" -#: FlatCAMApp.py:9300 +#: FlatCAMApp.py:9295 msgid "" "There are files/objects opened in FlatCAM.\n" "Creating a New project will delete them.\n" @@ -988,17 +985,17 @@ msgstr "" "Creating a New project will delete them.\n" "Do you want to Save the project?" -#: FlatCAMApp.py:9321 +#: FlatCAMApp.py:9316 msgid "New Project created" msgstr "New Project created" -#: FlatCAMApp.py:9468 FlatCAMApp.py:9472 flatcamGUI/FlatCAMGUI.py:821 +#: FlatCAMApp.py:9464 FlatCAMApp.py:9468 flatcamGUI/FlatCAMGUI.py:821 #: flatcamGUI/FlatCAMGUI.py:2504 msgid "Open Gerber" msgstr "Open Gerber" -#: FlatCAMApp.py:9477 FlatCAMApp.py:9514 FlatCAMApp.py:9556 FlatCAMApp.py:9625 -#: FlatCAMApp.py:10378 FlatCAMApp.py:11553 FlatCAMApp.py:11614 +#: FlatCAMApp.py:9473 FlatCAMApp.py:9510 FlatCAMApp.py:9552 FlatCAMApp.py:9622 +#: FlatCAMApp.py:10373 FlatCAMApp.py:11545 FlatCAMApp.py:11606 msgid "" "Canvas initialization started.\n" "Canvas initialization finished in" @@ -1006,248 +1003,249 @@ msgstr "" "Canvas initialization started.\n" "Canvas initialization finished in" -#: FlatCAMApp.py:9479 +#: FlatCAMApp.py:9475 msgid "Opening Gerber file." msgstr "Opening Gerber file." -#: FlatCAMApp.py:9506 FlatCAMApp.py:9510 flatcamGUI/FlatCAMGUI.py:823 +#: FlatCAMApp.py:9502 FlatCAMApp.py:9506 flatcamGUI/FlatCAMGUI.py:823 #: flatcamGUI/FlatCAMGUI.py:2506 msgid "Open Excellon" msgstr "Open Excellon" -#: FlatCAMApp.py:9516 +#: FlatCAMApp.py:9512 msgid "Opening Excellon file." msgstr "Opening Excellon file." -#: FlatCAMApp.py:9547 FlatCAMApp.py:9551 +#: FlatCAMApp.py:9543 FlatCAMApp.py:9547 msgid "Open G-Code" msgstr "Open G-Code" -#: FlatCAMApp.py:9558 +#: FlatCAMApp.py:9554 msgid "Opening G-Code file." msgstr "Opening G-Code file." -#: FlatCAMApp.py:9581 FlatCAMApp.py:9584 flatcamGUI/FlatCAMGUI.py:1715 +#: FlatCAMApp.py:9577 FlatCAMApp.py:9580 flatcamGUI/FlatCAMGUI.py:1715 msgid "Open Project" msgstr "Open Project" -#: FlatCAMApp.py:9616 FlatCAMApp.py:9620 +#: FlatCAMApp.py:9613 FlatCAMApp.py:9617 msgid "Open HPGL2" msgstr "Open HPGL2" -#: FlatCAMApp.py:9627 +#: FlatCAMApp.py:9624 msgid "Opening HPGL2 file." msgstr "Opening HPGL2 file." -#: FlatCAMApp.py:9650 FlatCAMApp.py:9653 +#: FlatCAMApp.py:9647 FlatCAMApp.py:9650 msgid "Open Configuration File" msgstr "Open Configuration File" -#: FlatCAMApp.py:9673 FlatCAMApp.py:10022 +#: FlatCAMApp.py:9670 FlatCAMApp.py:10017 msgid "Please Select a Geometry object to export" msgstr "Please Select a Geometry object to export" -#: FlatCAMApp.py:9687 +#: FlatCAMApp.py:9684 msgid "Only Geometry, Gerber and CNCJob objects can be used." msgstr "Only Geometry, Gerber and CNCJob objects can be used." -#: FlatCAMApp.py:9700 FlatCAMApp.py:9704 flatcamTools/ToolQRCode.py:829 +#: FlatCAMApp.py:9697 FlatCAMApp.py:9701 flatcamTools/ToolQRCode.py:829 #: flatcamTools/ToolQRCode.py:833 msgid "Export SVG" msgstr "Export SVG" -#: FlatCAMApp.py:9730 +#: FlatCAMApp.py:9726 msgid "Data must be a 3D array with last dimension 3 or 4" msgstr "Data must be a 3D array with last dimension 3 or 4" -#: FlatCAMApp.py:9736 FlatCAMApp.py:9740 +#: FlatCAMApp.py:9732 FlatCAMApp.py:9736 msgid "Export PNG Image" msgstr "Export PNG Image" -#: FlatCAMApp.py:9774 FlatCAMApp.py:9982 +#: FlatCAMApp.py:9769 FlatCAMApp.py:9977 msgid "Failed. Only Gerber objects can be saved as Gerber files..." msgstr "Failed. Only Gerber objects can be saved as Gerber files..." -#: FlatCAMApp.py:9786 +#: FlatCAMApp.py:9781 msgid "Save Gerber source file" msgstr "Save Gerber source file" -#: FlatCAMApp.py:9815 +#: FlatCAMApp.py:9810 msgid "Failed. Only Script objects can be saved as TCL Script files..." msgstr "Failed. Only Script objects can be saved as TCL Script files..." -#: FlatCAMApp.py:9827 +#: FlatCAMApp.py:9822 msgid "Save Script source file" msgstr "Save Script source file" -#: FlatCAMApp.py:9856 +#: FlatCAMApp.py:9851 msgid "Failed. Only Document objects can be saved as Document files..." msgstr "Failed. Only Document objects can be saved as Document files..." -#: FlatCAMApp.py:9868 +#: FlatCAMApp.py:9863 msgid "Save Document source file" msgstr "Save Document source file" -#: FlatCAMApp.py:9897 FlatCAMApp.py:9938 FlatCAMApp.py:10863 +#: FlatCAMApp.py:9892 FlatCAMApp.py:9933 FlatCAMApp.py:10856 msgid "Failed. Only Excellon objects can be saved as Excellon files..." msgstr "Failed. Only Excellon objects can be saved as Excellon files..." -#: FlatCAMApp.py:9905 FlatCAMApp.py:9909 +#: FlatCAMApp.py:9900 FlatCAMApp.py:9904 msgid "Save Excellon source file" msgstr "Save Excellon source file" -#: FlatCAMApp.py:9946 FlatCAMApp.py:9950 +#: FlatCAMApp.py:9941 FlatCAMApp.py:9945 msgid "Export Excellon" msgstr "Export Excellon" -#: FlatCAMApp.py:9990 FlatCAMApp.py:9994 +#: FlatCAMApp.py:9985 FlatCAMApp.py:9989 msgid "Export Gerber" msgstr "Export Gerber" -#: FlatCAMApp.py:10032 +#: FlatCAMApp.py:10027 msgid "Only Geometry objects can be used." msgstr "Only Geometry objects can be used." -#: FlatCAMApp.py:10046 FlatCAMApp.py:10050 +#: FlatCAMApp.py:10041 FlatCAMApp.py:10045 msgid "Export DXF" msgstr "Export DXF" -#: FlatCAMApp.py:10075 FlatCAMApp.py:10078 +#: FlatCAMApp.py:10070 FlatCAMApp.py:10073 msgid "Import SVG" msgstr "Import SVG" -#: FlatCAMApp.py:10106 FlatCAMApp.py:10110 +#: FlatCAMApp.py:10101 FlatCAMApp.py:10105 msgid "Import DXF" msgstr "Import DXF" -#: FlatCAMApp.py:10161 +#: FlatCAMApp.py:10156 msgid "Viewing the source code of the selected object." msgstr "Viewing the source code of the selected object." -#: FlatCAMApp.py:10162 FlatCAMObj.py:7075 FlatCAMObj.py:7852 +#: FlatCAMApp.py:10157 flatcamObjects/FlatCAMCNCJob.py:548 +#: flatcamObjects/FlatCAMScript.py:133 msgid "Loading..." msgstr "Loading..." -#: FlatCAMApp.py:10168 FlatCAMApp.py:10172 +#: FlatCAMApp.py:10163 FlatCAMApp.py:10167 msgid "Select an Gerber or Excellon file to view it's source file." msgstr "Select an Gerber or Excellon file to view it's source file." -#: FlatCAMApp.py:10186 +#: FlatCAMApp.py:10181 msgid "Source Editor" msgstr "Source Editor" -#: FlatCAMApp.py:10226 FlatCAMApp.py:10233 +#: FlatCAMApp.py:10221 FlatCAMApp.py:10228 msgid "There is no selected object for which to see it's source file code." msgstr "There is no selected object for which to see it's source file code." -#: FlatCAMApp.py:10245 +#: FlatCAMApp.py:10240 msgid "Failed to load the source code for the selected object" msgstr "Failed to load the source code for the selected object" -#: FlatCAMApp.py:10281 +#: FlatCAMApp.py:10276 msgid "Go to Line ..." msgstr "Go to Line ..." -#: FlatCAMApp.py:10282 +#: FlatCAMApp.py:10277 msgid "Line:" msgstr "Line:" -#: FlatCAMApp.py:10311 +#: FlatCAMApp.py:10306 msgid "New TCL script file created in Code Editor." msgstr "New TCL script file created in Code Editor." -#: FlatCAMApp.py:10350 FlatCAMApp.py:10352 +#: FlatCAMApp.py:10345 FlatCAMApp.py:10347 msgid "Open TCL script" msgstr "Open TCL script" -#: FlatCAMApp.py:10380 -msgid "Executing FlatCAMScript file." -msgstr "Executing FlatCAMScript file." +#: FlatCAMApp.py:10375 +msgid "Executing ScriptObject file." +msgstr "Executing ScriptObject file." -#: FlatCAMApp.py:10388 FlatCAMApp.py:10391 +#: FlatCAMApp.py:10383 FlatCAMApp.py:10386 msgid "Run TCL script" msgstr "Run TCL script" -#: FlatCAMApp.py:10415 +#: FlatCAMApp.py:10409 msgid "TCL script file opened in Code Editor and executed." msgstr "TCL script file opened in Code Editor and executed." -#: FlatCAMApp.py:10466 FlatCAMApp.py:10472 +#: FlatCAMApp.py:10460 FlatCAMApp.py:10466 msgid "Save Project As ..." msgstr "Save Project As ..." -#: FlatCAMApp.py:10468 flatcamGUI/FlatCAMGUI.py:1119 +#: FlatCAMApp.py:10462 flatcamGUI/FlatCAMGUI.py:1119 #: flatcamGUI/FlatCAMGUI.py:2161 msgid "Project" msgstr "Project" -#: FlatCAMApp.py:10507 +#: FlatCAMApp.py:10501 msgid "FlatCAM objects print" msgstr "FlatCAM objects print" -#: FlatCAMApp.py:10520 FlatCAMApp.py:10527 +#: FlatCAMApp.py:10514 FlatCAMApp.py:10521 msgid "Save Object as PDF ..." msgstr "Save Object as PDF ..." -#: FlatCAMApp.py:10536 +#: FlatCAMApp.py:10530 msgid "Printing PDF ... Please wait." msgstr "Printing PDF ... Please wait." -#: FlatCAMApp.py:10715 +#: FlatCAMApp.py:10709 msgid "PDF file saved to" msgstr "PDF file saved to" -#: FlatCAMApp.py:10740 +#: FlatCAMApp.py:10734 msgid "Exporting SVG" msgstr "Exporting SVG" -#: FlatCAMApp.py:10783 +#: FlatCAMApp.py:10777 msgid "SVG file exported to" msgstr "SVG file exported to" -#: FlatCAMApp.py:10809 +#: FlatCAMApp.py:10803 msgid "" "Save cancelled because source file is empty. Try to export the Gerber file." msgstr "" "Save cancelled because source file is empty. Try to export the Gerber file." -#: FlatCAMApp.py:10957 +#: FlatCAMApp.py:10950 msgid "Excellon file exported to" msgstr "Excellon file exported to" -#: FlatCAMApp.py:10966 +#: FlatCAMApp.py:10959 msgid "Exporting Excellon" msgstr "Exporting Excellon" -#: FlatCAMApp.py:10971 FlatCAMApp.py:10978 +#: FlatCAMApp.py:10964 FlatCAMApp.py:10971 msgid "Could not export Excellon file." msgstr "Could not export Excellon file." -#: FlatCAMApp.py:11094 +#: FlatCAMApp.py:11086 msgid "Gerber file exported to" msgstr "Gerber file exported to" -#: FlatCAMApp.py:11102 +#: FlatCAMApp.py:11094 msgid "Exporting Gerber" msgstr "Exporting Gerber" -#: FlatCAMApp.py:11107 FlatCAMApp.py:11114 +#: FlatCAMApp.py:11099 FlatCAMApp.py:11106 msgid "Could not export Gerber file." msgstr "Could not export Gerber file." -#: FlatCAMApp.py:11149 +#: FlatCAMApp.py:11141 msgid "DXF file exported to" msgstr "DXF file exported to" -#: FlatCAMApp.py:11155 +#: FlatCAMApp.py:11147 msgid "Exporting DXF" msgstr "Exporting DXF" -#: FlatCAMApp.py:11160 FlatCAMApp.py:11167 +#: FlatCAMApp.py:11152 FlatCAMApp.py:11159 msgid "Could not export DXF file." msgstr "Could not export DXF file." -#: FlatCAMApp.py:11190 FlatCAMApp.py:11232 flatcamTools/ToolImage.py:277 +#: FlatCAMApp.py:11182 FlatCAMApp.py:11224 flatcamTools/ToolImage.py:277 msgid "" "Not supported type is picked as parameter. Only Geometry and Gerber are " "supported" @@ -1255,79 +1253,79 @@ msgstr "" "Not supported type is picked as parameter. Only Geometry and Gerber are " "supported" -#: FlatCAMApp.py:11200 +#: FlatCAMApp.py:11192 msgid "Importing SVG" msgstr "Importing SVG" -#: FlatCAMApp.py:11211 FlatCAMApp.py:11251 FlatCAMApp.py:11309 -#: FlatCAMApp.py:11374 FlatCAMApp.py:11438 FlatCAMApp.py:11503 -#: FlatCAMApp.py:11540 flatcamTools/ToolImage.py:297 +#: FlatCAMApp.py:11203 FlatCAMApp.py:11243 FlatCAMApp.py:11301 +#: FlatCAMApp.py:11366 FlatCAMApp.py:11430 FlatCAMApp.py:11495 +#: FlatCAMApp.py:11532 flatcamTools/ToolImage.py:297 #: flatcamTools/ToolPDF.py:225 msgid "Opened" msgstr "Opened" -#: FlatCAMApp.py:11241 +#: FlatCAMApp.py:11233 msgid "Importing DXF" msgstr "Importing DXF" -#: FlatCAMApp.py:11275 FlatCAMApp.py:11462 +#: FlatCAMApp.py:11267 FlatCAMApp.py:11454 msgid "Failed to open file" msgstr "Failed to open file" -#: FlatCAMApp.py:11278 FlatCAMApp.py:11465 +#: FlatCAMApp.py:11270 FlatCAMApp.py:11457 msgid "Failed to parse file" msgstr "Failed to parse file" -#: FlatCAMApp.py:11290 +#: FlatCAMApp.py:11282 msgid "Object is not Gerber file or empty. Aborting object creation." msgstr "Object is not Gerber file or empty. Aborting object creation." -#: FlatCAMApp.py:11295 +#: FlatCAMApp.py:11287 msgid "Opening Gerber" msgstr "Opening Gerber" -#: FlatCAMApp.py:11302 +#: FlatCAMApp.py:11294 msgid " Open Gerber failed. Probable not a Gerber file." msgstr " Open Gerber failed. Probable not a Gerber file." -#: FlatCAMApp.py:11333 flatcamTools/ToolPcbWizard.py:425 +#: FlatCAMApp.py:11325 flatcamTools/ToolPcbWizard.py:425 msgid "This is not Excellon file." msgstr "This is not Excellon file." -#: FlatCAMApp.py:11337 +#: FlatCAMApp.py:11329 msgid "Cannot open file" msgstr "Cannot open file" -#: FlatCAMApp.py:11356 flatcamTools/ToolPDF.py:275 +#: FlatCAMApp.py:11348 flatcamTools/ToolPDF.py:275 #: flatcamTools/ToolPcbWizard.py:447 msgid "No geometry found in file" msgstr "No geometry found in file" -#: FlatCAMApp.py:11359 +#: FlatCAMApp.py:11351 msgid "Opening Excellon." msgstr "Opening Excellon." -#: FlatCAMApp.py:11366 +#: FlatCAMApp.py:11358 msgid "Open Excellon file failed. Probable not an Excellon file." msgstr "Open Excellon file failed. Probable not an Excellon file." -#: FlatCAMApp.py:11398 +#: FlatCAMApp.py:11390 msgid "Reading GCode file" msgstr "Reading GCode file" -#: FlatCAMApp.py:11405 +#: FlatCAMApp.py:11397 msgid "Failed to open" msgstr "Failed to open" -#: FlatCAMApp.py:11413 +#: FlatCAMApp.py:11405 msgid "This is not GCODE" msgstr "This is not GCODE" -#: FlatCAMApp.py:11418 +#: FlatCAMApp.py:11410 msgid "Opening G-Code." msgstr "Opening G-Code." -#: FlatCAMApp.py:11427 +#: FlatCAMApp.py:11419 msgid "" "Failed to create CNCJob Object. Probable not a GCode file. Try to load it " "from File menu.\n" @@ -1339,103 +1337,103 @@ msgstr "" " Attempting to create a FlatCAM CNCJob Object from G-Code file failed during " "processing" -#: FlatCAMApp.py:11484 +#: FlatCAMApp.py:11476 msgid "Object is not HPGL2 file or empty. Aborting object creation." msgstr "Object is not HPGL2 file or empty. Aborting object creation." -#: FlatCAMApp.py:11489 +#: FlatCAMApp.py:11481 msgid "Opening HPGL2" msgstr "Opening HPGL2" -#: FlatCAMApp.py:11496 +#: FlatCAMApp.py:11488 msgid " Open HPGL2 failed. Probable not a HPGL2 file." msgstr " Open HPGL2 failed. Probable not a HPGL2 file." -#: FlatCAMApp.py:11516 +#: FlatCAMApp.py:11508 msgid "Opening TCL Script..." msgstr "Opening TCL Script..." -#: FlatCAMApp.py:11524 +#: FlatCAMApp.py:11516 msgid "TCL script file opened in Code Editor." msgstr "TCL script file opened in Code Editor." -#: FlatCAMApp.py:11527 +#: FlatCAMApp.py:11519 msgid "Failed to open TCL Script." msgstr "Failed to open TCL Script." -#: FlatCAMApp.py:11555 +#: FlatCAMApp.py:11547 msgid "Opening FlatCAM Config file." msgstr "Opening FlatCAM Config file." -#: FlatCAMApp.py:11583 +#: FlatCAMApp.py:11575 msgid "Failed to open config file" msgstr "Failed to open config file" -#: FlatCAMApp.py:11611 +#: FlatCAMApp.py:11603 msgid "Loading Project ... Please Wait ..." msgstr "Loading Project ... Please Wait ..." -#: FlatCAMApp.py:11616 +#: FlatCAMApp.py:11608 msgid "Opening FlatCAM Project file." msgstr "Opening FlatCAM Project file." -#: FlatCAMApp.py:11626 FlatCAMApp.py:11644 +#: FlatCAMApp.py:11618 FlatCAMApp.py:11636 msgid "Failed to open project file" msgstr "Failed to open project file" -#: FlatCAMApp.py:11681 +#: FlatCAMApp.py:11673 msgid "Loading Project ... restoring" msgstr "Loading Project ... restoring" -#: FlatCAMApp.py:11691 +#: FlatCAMApp.py:11683 msgid "Project loaded from" msgstr "Project loaded from" -#: FlatCAMApp.py:11760 +#: FlatCAMApp.py:11752 msgid "Redrawing all objects" msgstr "Redrawing all objects" -#: FlatCAMApp.py:11849 +#: FlatCAMApp.py:11840 msgid "Failed to load recent item list." msgstr "Failed to load recent item list." -#: FlatCAMApp.py:11856 +#: FlatCAMApp.py:11847 msgid "Failed to parse recent item list." msgstr "Failed to parse recent item list." -#: FlatCAMApp.py:11866 +#: FlatCAMApp.py:11857 msgid "Failed to load recent projects item list." msgstr "Failed to load recent projects item list." -#: FlatCAMApp.py:11873 +#: FlatCAMApp.py:11864 msgid "Failed to parse recent project item list." msgstr "Failed to parse recent project item list." -#: FlatCAMApp.py:11934 +#: FlatCAMApp.py:11925 msgid "Clear Recent projects" msgstr "Clear Recent projects" -#: FlatCAMApp.py:11958 +#: FlatCAMApp.py:11949 msgid "Clear Recent files" msgstr "Clear Recent files" -#: FlatCAMApp.py:11980 flatcamGUI/FlatCAMGUI.py:1348 +#: FlatCAMApp.py:11971 flatcamGUI/FlatCAMGUI.py:1348 msgid "Shortcut Key List" msgstr "Shortcut Key List" -#: FlatCAMApp.py:12054 +#: FlatCAMApp.py:12051 msgid "Selected Tab - Choose an Item from Project Tab" msgstr "Selected Tab - Choose an Item from Project Tab" -#: FlatCAMApp.py:12055 +#: FlatCAMApp.py:12052 msgid "Details" msgstr "Details" -#: FlatCAMApp.py:12057 +#: FlatCAMApp.py:12054 msgid "The normal flow when working in FlatCAM is the following:" msgstr "The normal flow when working in FlatCAM is the following:" -#: FlatCAMApp.py:12058 +#: FlatCAMApp.py:12055 msgid "" "Load/Import a Gerber, Excellon, Gcode, DXF, Raster Image or SVG file into " "FlatCAM using either the toolbars, key shortcuts or even dragging and " @@ -1445,18 +1443,18 @@ msgstr "" "FlatCAM using either the toolbars, key shortcuts or even dragging and " "dropping the files on the GUI." +#: FlatCAMApp.py:12058 +msgid "" +"You can also load a FlatCAM project by double clicking on the project file, " +"drag and drop of the file into the FLATCAM GUI or through the menu (or " +"toolbar) actions offered within the app." +msgstr "" +"You can also load a FlatCAM project by double clicking on the project file, " +"drag and drop of the file into the FLATCAM GUI or through the menu (or " +"toolbar) actions offered within the app." + #: FlatCAMApp.py:12061 msgid "" -"You can also load a FlatCAM project by double clicking on the project file, " -"drag and drop of the file into the FLATCAM GUI or through the menu (or " -"toolbar) actions offered within the app." -msgstr "" -"You can also load a FlatCAM project by double clicking on the project file, " -"drag and drop of the file into the FLATCAM GUI or through the menu (or " -"toolbar) actions offered within the app." - -#: FlatCAMApp.py:12064 -msgid "" "Once an object is available in the Project Tab, by selecting it and then " "focusing on SELECTED TAB (more simpler is to double click the object name in " "the Project Tab, SELECTED TAB will be updated with the object properties " @@ -1467,7 +1465,7 @@ msgstr "" "the Project Tab, SELECTED TAB will be updated with the object properties " "according to its kind: Gerber, Excellon, Geometry or CNCJob object." -#: FlatCAMApp.py:12068 +#: FlatCAMApp.py:12065 msgid "" "If the selection of the object is done on the canvas by single click " "instead, and the SELECTED TAB is in focus, again the object properties will " @@ -1481,7 +1479,7 @@ msgstr "" "object on the canvas will bring the SELECTED TAB and populate it even if it " "was out of focus." -#: FlatCAMApp.py:12072 +#: FlatCAMApp.py:12069 msgid "" "You can change the parameters in this screen and the flow direction is like " "this:" @@ -1489,7 +1487,7 @@ msgstr "" "You can change the parameters in this screen and the flow direction is like " "this:" -#: FlatCAMApp.py:12073 +#: FlatCAMApp.py:12070 msgid "" "Gerber/Excellon Object --> Change Parameter --> Generate Geometry --> " "Geometry Object --> Add tools (change param in Selected Tab) --> Generate " @@ -1501,7 +1499,7 @@ msgstr "" "CNCJob --> CNCJob Object --> Verify GCode (through Edit CNC Code) and/or " "append/prepend to GCode (again, done in SELECTED TAB) --> Save GCode." -#: FlatCAMApp.py:12077 +#: FlatCAMApp.py:12074 msgid "" "A list of key shortcuts is available through an menu entry in Help --> " "Shortcuts List or through its own key shortcut: F3." @@ -1509,31 +1507,31 @@ msgstr "" "A list of key shortcuts is available through an menu entry in Help --> " "Shortcuts List or through its own key shortcut: F3." -#: FlatCAMApp.py:12141 +#: FlatCAMApp.py:12138 msgid "Failed checking for latest version. Could not connect." msgstr "Failed checking for latest version. Could not connect." -#: FlatCAMApp.py:12148 +#: FlatCAMApp.py:12145 msgid "Could not parse information about latest version." msgstr "Could not parse information about latest version." -#: FlatCAMApp.py:12158 +#: FlatCAMApp.py:12155 msgid "FlatCAM is up to date!" msgstr "FlatCAM is up to date!" -#: FlatCAMApp.py:12163 +#: FlatCAMApp.py:12160 msgid "Newer Version Available" msgstr "Newer Version Available" -#: FlatCAMApp.py:12165 +#: FlatCAMApp.py:12162 msgid "There is a newer version of FlatCAM available for download:" msgstr "There is a newer version of FlatCAM available for download:" -#: FlatCAMApp.py:12169 +#: FlatCAMApp.py:12166 msgid "info" msgstr "info" -#: FlatCAMApp.py:12197 +#: FlatCAMApp.py:12194 msgid "" "OpenGL canvas initialization failed. HW or HW configuration not supported." "Change the graphic engine to Legacy(2D) in Edit -> Preferences -> General " @@ -1545,131 +1543,127 @@ msgstr "" "tab.\n" "\n" -#: FlatCAMApp.py:12276 +#: FlatCAMApp.py:12273 msgid "All plots disabled." msgstr "All plots disabled." -#: FlatCAMApp.py:12283 +#: FlatCAMApp.py:12280 msgid "All non selected plots disabled." msgstr "All non selected plots disabled." -#: FlatCAMApp.py:12290 +#: FlatCAMApp.py:12287 msgid "All plots enabled." msgstr "All plots enabled." -#: FlatCAMApp.py:12296 +#: FlatCAMApp.py:12293 msgid "Selected plots enabled..." msgstr "Selected plots enabled..." -#: FlatCAMApp.py:12304 +#: FlatCAMApp.py:12301 msgid "Selected plots disabled..." msgstr "Selected plots disabled..." -#: FlatCAMApp.py:12337 +#: FlatCAMApp.py:12334 msgid "Enabling plots ..." msgstr "Enabling plots ..." -#: FlatCAMApp.py:12389 +#: FlatCAMApp.py:12386 msgid "Disabling plots ..." msgstr "Disabling plots ..." -#: FlatCAMApp.py:12412 +#: FlatCAMApp.py:12409 msgid "Working ..." msgstr "Working ..." -#: FlatCAMApp.py:12467 flatcamGUI/FlatCAMGUI.py:688 +#: FlatCAMApp.py:12464 flatcamGUI/FlatCAMGUI.py:688 msgid "Red" msgstr "Red" -#: FlatCAMApp.py:12469 flatcamGUI/FlatCAMGUI.py:691 +#: FlatCAMApp.py:12466 flatcamGUI/FlatCAMGUI.py:691 msgid "Blue" msgstr "Blue" -#: FlatCAMApp.py:12472 flatcamGUI/FlatCAMGUI.py:694 +#: FlatCAMApp.py:12469 flatcamGUI/FlatCAMGUI.py:694 msgid "Yellow" msgstr "Yellow" -#: FlatCAMApp.py:12474 flatcamGUI/FlatCAMGUI.py:697 +#: FlatCAMApp.py:12471 flatcamGUI/FlatCAMGUI.py:697 msgid "Green" msgstr "Green" -#: FlatCAMApp.py:12476 flatcamGUI/FlatCAMGUI.py:700 +#: FlatCAMApp.py:12473 flatcamGUI/FlatCAMGUI.py:700 msgid "Purple" msgstr "Purple" -#: FlatCAMApp.py:12478 flatcamGUI/FlatCAMGUI.py:703 +#: FlatCAMApp.py:12475 flatcamGUI/FlatCAMGUI.py:703 msgid "Brown" msgstr "Brown" -#: FlatCAMApp.py:12480 FlatCAMApp.py:12536 flatcamGUI/FlatCAMGUI.py:706 +#: FlatCAMApp.py:12477 FlatCAMApp.py:12533 flatcamGUI/FlatCAMGUI.py:706 msgid "White" msgstr "White" -#: FlatCAMApp.py:12482 flatcamGUI/FlatCAMGUI.py:709 +#: FlatCAMApp.py:12479 flatcamGUI/FlatCAMGUI.py:709 msgid "Black" msgstr "Black" -#: FlatCAMApp.py:12485 flatcamGUI/FlatCAMGUI.py:714 +#: FlatCAMApp.py:12482 flatcamGUI/FlatCAMGUI.py:714 msgid "Custom" msgstr "Custom" -#: FlatCAMApp.py:12495 flatcamGUI/FlatCAMGUI.py:722 +#: FlatCAMApp.py:12492 flatcamGUI/FlatCAMGUI.py:722 msgid "Default" msgstr "Default" -#: FlatCAMApp.py:12519 flatcamGUI/FlatCAMGUI.py:719 +#: FlatCAMApp.py:12516 flatcamGUI/FlatCAMGUI.py:719 msgid "Opacity" msgstr "Opacity" -#: FlatCAMApp.py:12521 +#: FlatCAMApp.py:12518 msgid "Set alpha level ..." msgstr "Set alpha level ..." -#: FlatCAMApp.py:12521 flatcamGUI/PreferencesUI.py:6900 +#: FlatCAMApp.py:12518 flatcamGUI/PreferencesUI.py:6900 #: flatcamGUI/PreferencesUI.py:8230 flatcamGUI/PreferencesUI.py:8444 #: flatcamTools/ToolExtractDrills.py:164 flatcamTools/ToolExtractDrills.py:285 #: flatcamTools/ToolPunchGerber.py:192 flatcamTools/ToolPunchGerber.py:308 -#: flatcamTools/ToolTransform.py:358 +#: flatcamTools/ToolTransform.py:357 msgid "Value" msgstr "Value" -#: FlatCAMApp.py:12597 +#: FlatCAMApp.py:12594 msgid "Saving FlatCAM Project" msgstr "Saving FlatCAM Project" -#: FlatCAMApp.py:12618 FlatCAMApp.py:12654 +#: FlatCAMApp.py:12615 FlatCAMApp.py:12651 msgid "Project saved to" msgstr "Project saved to" -#: FlatCAMApp.py:12625 +#: FlatCAMApp.py:12622 msgid "The object is used by another application." msgstr "The object is used by another application." -#: FlatCAMApp.py:12639 +#: FlatCAMApp.py:12636 msgid "Failed to verify project file" msgstr "Failed to verify project file" -#: FlatCAMApp.py:12639 FlatCAMApp.py:12647 FlatCAMApp.py:12657 +#: FlatCAMApp.py:12636 FlatCAMApp.py:12644 FlatCAMApp.py:12654 msgid "Retry to save it." msgstr "Retry to save it." -#: FlatCAMApp.py:12647 FlatCAMApp.py:12657 +#: FlatCAMApp.py:12644 FlatCAMApp.py:12654 msgid "Failed to parse saved project file" msgstr "Failed to parse saved project file" -#: FlatCAMApp.py:13139 -msgid "The user requested a graceful exit of the current task." -msgstr "The user requested a graceful exit of the current task." - -#: FlatCAMCommon.py:137 FlatCAMCommon.py:164 +#: FlatCAMBookmark.py:57 FlatCAMBookmark.py:84 msgid "Title" msgstr "Title" -#: FlatCAMCommon.py:138 FlatCAMCommon.py:168 +#: FlatCAMBookmark.py:58 FlatCAMBookmark.py:88 msgid "Web Link" msgstr "Web Link" -#: FlatCAMCommon.py:142 +#: FlatCAMBookmark.py:62 msgid "" "Index.\n" "The rows in gray color will populate the Bookmarks menu.\n" @@ -1679,7 +1673,7 @@ msgstr "" "The rows in gray color will populate the Bookmarks menu.\n" "The number of gray colored rows is set in Preferences." -#: FlatCAMCommon.py:146 +#: FlatCAMBookmark.py:66 msgid "" "Description of the link that is set as an menu action.\n" "Try to keep it short because it is installed as a menu item." @@ -1687,87 +1681,91 @@ msgstr "" "Description of the link that is set as an menu action.\n" "Try to keep it short because it is installed as a menu item." -#: FlatCAMCommon.py:149 +#: FlatCAMBookmark.py:69 msgid "Web Link. E.g: https://your_website.org " msgstr "Web Link. E.g: https://your_website.org " -#: FlatCAMCommon.py:158 +#: FlatCAMBookmark.py:78 msgid "New Bookmark" msgstr "New Bookmark" -#: FlatCAMCommon.py:177 +#: FlatCAMBookmark.py:97 msgid "Add Entry" msgstr "Add Entry" -#: FlatCAMCommon.py:178 +#: FlatCAMBookmark.py:98 msgid "Remove Entry" msgstr "Remove Entry" -#: FlatCAMCommon.py:179 +#: FlatCAMBookmark.py:99 msgid "Export List" msgstr "Export List" -#: FlatCAMCommon.py:180 +#: FlatCAMBookmark.py:100 msgid "Import List" msgstr "Import List" -#: FlatCAMCommon.py:261 +#: FlatCAMBookmark.py:181 msgid "Title entry is empty." msgstr "Title entry is empty." -#: FlatCAMCommon.py:270 +#: FlatCAMBookmark.py:190 msgid "Web link entry is empty." msgstr "Web link entry is empty." -#: FlatCAMCommon.py:278 +#: FlatCAMBookmark.py:198 msgid "Either the Title or the Weblink already in the table." msgstr "Either the Title or the Weblink already in the table." -#: FlatCAMCommon.py:298 +#: FlatCAMBookmark.py:218 msgid "Bookmark added." msgstr "Bookmark added." -#: FlatCAMCommon.py:315 +#: FlatCAMBookmark.py:235 msgid "This bookmark can not be removed" msgstr "This bookmark can not be removed" -#: FlatCAMCommon.py:346 +#: FlatCAMBookmark.py:266 msgid "Bookmark removed." msgstr "Bookmark removed." -#: FlatCAMCommon.py:361 +#: FlatCAMBookmark.py:281 msgid "Export FlatCAM Bookmarks" msgstr "Export FlatCAM Bookmarks" -#: FlatCAMCommon.py:364 flatcamGUI/FlatCAMGUI.py:509 +#: FlatCAMBookmark.py:284 flatcamGUI/FlatCAMGUI.py:509 msgid "Bookmarks" msgstr "Bookmarks" -#: FlatCAMCommon.py:390 FlatCAMCommon.py:420 +#: FlatCAMBookmark.py:310 FlatCAMBookmark.py:340 msgid "Could not load bookmarks file." msgstr "Could not load bookmarks file." -#: FlatCAMCommon.py:400 +#: FlatCAMBookmark.py:320 msgid "Failed to write bookmarks to file." msgstr "Failed to write bookmarks to file." -#: FlatCAMCommon.py:402 +#: FlatCAMBookmark.py:322 msgid "Exported bookmarks to" msgstr "Exported bookmarks to" -#: FlatCAMCommon.py:408 +#: FlatCAMBookmark.py:328 msgid "Import FlatCAM Bookmarks" msgstr "Import FlatCAM Bookmarks" -#: FlatCAMCommon.py:427 +#: FlatCAMBookmark.py:347 msgid "Imported Bookmarks from" msgstr "Imported Bookmarks from" -#: FlatCAMCommon.py:530 +#: FlatCAMCommon.py:29 +msgid "The user requested a graceful exit of the current task." +msgstr "The user requested a graceful exit of the current task." + +#: FlatCAMDB.py:86 msgid "Add Geometry Tool in DB" msgstr "Add Geometry Tool in DB" -#: FlatCAMCommon.py:532 FlatCAMCommon.py:2087 +#: FlatCAMDB.py:88 FlatCAMDB.py:1643 msgid "" "Add a new tool in the Tools Database.\n" "It will be used in the Geometry UI.\n" @@ -1777,35 +1775,35 @@ msgstr "" "It will be used in the Geometry UI.\n" "You can edit it after it is added." -#: FlatCAMCommon.py:546 FlatCAMCommon.py:2101 +#: FlatCAMDB.py:102 FlatCAMDB.py:1657 msgid "Delete Tool from DB" msgstr "Delete Tool from DB" -#: FlatCAMCommon.py:548 FlatCAMCommon.py:2103 +#: FlatCAMDB.py:104 FlatCAMDB.py:1659 msgid "Remove a selection of tools in the Tools Database." msgstr "Remove a selection of tools in the Tools Database." -#: FlatCAMCommon.py:552 FlatCAMCommon.py:2107 +#: FlatCAMDB.py:108 FlatCAMDB.py:1663 msgid "Export DB" msgstr "Export DB" -#: FlatCAMCommon.py:554 FlatCAMCommon.py:2109 +#: FlatCAMDB.py:110 FlatCAMDB.py:1665 msgid "Save the Tools Database to a custom text file." msgstr "Save the Tools Database to a custom text file." -#: FlatCAMCommon.py:558 FlatCAMCommon.py:2113 +#: FlatCAMDB.py:114 FlatCAMDB.py:1669 msgid "Import DB" msgstr "Import DB" -#: FlatCAMCommon.py:560 FlatCAMCommon.py:2115 +#: FlatCAMDB.py:116 FlatCAMDB.py:1671 msgid "Load the Tools Database information's from a custom text file." msgstr "Load the Tools Database information's from a custom text file." -#: FlatCAMCommon.py:564 FlatCAMCommon.py:2119 +#: FlatCAMDB.py:120 FlatCAMDB.py:1675 msgid "Add Tool from Tools DB" msgstr "Add Tool from Tools DB" -#: FlatCAMCommon.py:566 FlatCAMCommon.py:2121 +#: FlatCAMDB.py:122 FlatCAMDB.py:1677 msgid "" "Add a new tool in the Tools Table of the\n" "active Geometry object after selecting a tool\n" @@ -1815,28 +1813,28 @@ msgstr "" "active Geometry object after selecting a tool\n" "in the Tools Database." -#: FlatCAMCommon.py:602 FlatCAMCommon.py:1277 FlatCAMCommon.py:1531 +#: FlatCAMDB.py:158 FlatCAMDB.py:833 FlatCAMDB.py:1087 msgid "Tool Name" msgstr "Tool Name" -#: FlatCAMCommon.py:603 FlatCAMCommon.py:1279 FlatCAMCommon.py:1544 -#: flatcamEditors/FlatCAMExcEditor.py:1605 flatcamGUI/ObjectUI.py:1343 -#: flatcamGUI/ObjectUI.py:1581 flatcamGUI/PreferencesUI.py:5971 +#: FlatCAMDB.py:159 FlatCAMDB.py:835 FlatCAMDB.py:1100 +#: flatcamEditors/FlatCAMExcEditor.py:1604 flatcamGUI/ObjectUI.py:1344 +#: flatcamGUI/ObjectUI.py:1582 flatcamGUI/PreferencesUI.py:5971 #: flatcamTools/ToolNCC.py:278 flatcamTools/ToolNCC.py:287 #: flatcamTools/ToolPaint.py:261 msgid "Tool Dia" msgstr "Tool Dia" -#: FlatCAMCommon.py:604 FlatCAMCommon.py:1281 FlatCAMCommon.py:1725 -#: flatcamGUI/ObjectUI.py:1556 +#: FlatCAMDB.py:160 FlatCAMDB.py:837 FlatCAMDB.py:1281 +#: flatcamGUI/ObjectUI.py:1557 msgid "Tool Offset" msgstr "Tool Offset" -#: FlatCAMCommon.py:605 FlatCAMCommon.py:1283 FlatCAMCommon.py:1742 +#: FlatCAMDB.py:161 FlatCAMDB.py:839 FlatCAMDB.py:1298 msgid "Custom Offset" msgstr "Custom Offset" -#: FlatCAMCommon.py:606 FlatCAMCommon.py:1285 FlatCAMCommon.py:1709 +#: FlatCAMDB.py:162 FlatCAMDB.py:841 FlatCAMDB.py:1265 #: flatcamGUI/ObjectUI.py:308 flatcamGUI/PreferencesUI.py:2397 #: flatcamGUI/PreferencesUI.py:5332 flatcamGUI/PreferencesUI.py:5901 #: flatcamGUI/PreferencesUI.py:5911 flatcamTools/ToolNCC.py:213 @@ -1844,115 +1842,115 @@ msgstr "Custom Offset" msgid "Tool Type" msgstr "Tool Type" -#: FlatCAMCommon.py:607 FlatCAMCommon.py:1287 FlatCAMCommon.py:1557 +#: FlatCAMDB.py:163 FlatCAMDB.py:843 FlatCAMDB.py:1113 msgid "Tool Shape" msgstr "Tool Shape" -#: FlatCAMCommon.py:608 FlatCAMCommon.py:1290 FlatCAMCommon.py:1573 +#: FlatCAMDB.py:164 FlatCAMDB.py:846 FlatCAMDB.py:1129 #: flatcamGUI/ObjectUI.py:349 flatcamGUI/ObjectUI.py:899 -#: flatcamGUI/ObjectUI.py:1701 flatcamGUI/ObjectUI.py:2254 +#: flatcamGUI/ObjectUI.py:1702 flatcamGUI/ObjectUI.py:2255 #: flatcamGUI/PreferencesUI.py:2437 flatcamGUI/PreferencesUI.py:3311 #: flatcamGUI/PreferencesUI.py:4241 flatcamGUI/PreferencesUI.py:5377 #: flatcamGUI/PreferencesUI.py:5666 flatcamGUI/PreferencesUI.py:5944 #: flatcamGUI/PreferencesUI.py:5952 flatcamGUI/PreferencesUI.py:6635 -#: flatcamTools/ToolCalculators.py:114 flatcamTools/ToolCutOut.py:139 +#: flatcamTools/ToolCalculators.py:114 flatcamTools/ToolCutOut.py:138 #: flatcamTools/ToolNCC.py:260 flatcamTools/ToolNCC.py:268 #: flatcamTools/ToolPaint.py:243 msgid "Cut Z" msgstr "Cut Z" -#: FlatCAMCommon.py:609 FlatCAMCommon.py:1292 FlatCAMCommon.py:1587 +#: FlatCAMDB.py:165 FlatCAMDB.py:848 FlatCAMDB.py:1143 msgid "MultiDepth" msgstr "MultiDepth" -#: FlatCAMCommon.py:610 FlatCAMCommon.py:1294 FlatCAMCommon.py:1600 +#: FlatCAMDB.py:166 FlatCAMDB.py:850 FlatCAMDB.py:1156 msgid "DPP" msgstr "DPP" -#: FlatCAMCommon.py:611 FlatCAMCommon.py:1296 FlatCAMCommon.py:1756 +#: FlatCAMDB.py:167 FlatCAMDB.py:852 FlatCAMDB.py:1312 msgid "V-Dia" msgstr "V-Dia" -#: FlatCAMCommon.py:612 FlatCAMCommon.py:1298 FlatCAMCommon.py:1770 +#: FlatCAMDB.py:168 FlatCAMDB.py:854 FlatCAMDB.py:1326 msgid "V-Angle" msgstr "V-Angle" -#: FlatCAMCommon.py:613 FlatCAMCommon.py:1300 FlatCAMCommon.py:1614 -#: FlatCAMObj.py:3661 FlatCAMObj.py:5486 flatcamGUI/ObjectUI.py:945 -#: flatcamGUI/ObjectUI.py:1748 flatcamGUI/PreferencesUI.py:3352 -#: flatcamGUI/PreferencesUI.py:4294 flatcamGUI/PreferencesUI.py:8041 -#: flatcamTools/ToolCalibration.py:74 +#: FlatCAMDB.py:169 FlatCAMDB.py:856 FlatCAMDB.py:1170 +#: flatcamGUI/ObjectUI.py:945 flatcamGUI/ObjectUI.py:1749 +#: flatcamGUI/PreferencesUI.py:3352 flatcamGUI/PreferencesUI.py:4294 +#: flatcamGUI/PreferencesUI.py:8041 flatcamObjects/FlatCAMExcellon.py:1316 +#: flatcamObjects/FlatCAMGeometry.py:1552 flatcamTools/ToolCalibration.py:74 msgid "Travel Z" msgstr "Travel Z" -#: FlatCAMCommon.py:614 FlatCAMCommon.py:1302 +#: FlatCAMDB.py:170 FlatCAMDB.py:858 msgid "FR" msgstr "FR" -#: FlatCAMCommon.py:615 FlatCAMCommon.py:1304 +#: FlatCAMDB.py:171 FlatCAMDB.py:860 msgid "FR Z" msgstr "FR Z" -#: FlatCAMCommon.py:616 FlatCAMCommon.py:1306 FlatCAMCommon.py:1784 +#: FlatCAMDB.py:172 FlatCAMDB.py:862 FlatCAMDB.py:1340 msgid "FR Rapids" msgstr "FR Rapids" -#: FlatCAMCommon.py:617 FlatCAMCommon.py:1308 FlatCAMCommon.py:1657 +#: FlatCAMDB.py:173 FlatCAMDB.py:864 FlatCAMDB.py:1213 #: flatcamGUI/PreferencesUI.py:3440 msgid "Spindle Speed" msgstr "Spindle Speed" -#: FlatCAMCommon.py:618 FlatCAMCommon.py:1310 FlatCAMCommon.py:1672 -#: flatcamGUI/ObjectUI.py:1063 flatcamGUI/ObjectUI.py:1855 +#: FlatCAMDB.py:174 FlatCAMDB.py:866 FlatCAMDB.py:1228 +#: flatcamGUI/ObjectUI.py:1063 flatcamGUI/ObjectUI.py:1856 msgid "Dwell" msgstr "Dwell" -#: FlatCAMCommon.py:619 FlatCAMCommon.py:1312 FlatCAMCommon.py:1685 +#: FlatCAMDB.py:175 FlatCAMDB.py:868 FlatCAMDB.py:1241 msgid "Dwelltime" msgstr "Dwelltime" -#: FlatCAMCommon.py:620 FlatCAMCommon.py:1314 flatcamGUI/ObjectUI.py:2012 +#: FlatCAMDB.py:176 FlatCAMDB.py:870 flatcamGUI/ObjectUI.py:2013 #: flatcamGUI/PreferencesUI.py:3475 flatcamGUI/PreferencesUI.py:4447 -#: flatcamGUI/PreferencesUI.py:7148 flatcamTools/ToolSolderPaste.py:336 +#: flatcamGUI/PreferencesUI.py:7148 flatcamTools/ToolSolderPaste.py:335 msgid "Preprocessor" msgstr "Preprocessor" -#: FlatCAMCommon.py:621 FlatCAMCommon.py:1316 FlatCAMCommon.py:1800 +#: FlatCAMDB.py:177 FlatCAMDB.py:872 FlatCAMDB.py:1356 msgid "ExtraCut" msgstr "ExtraCut" -#: FlatCAMCommon.py:622 FlatCAMCommon.py:1318 FlatCAMCommon.py:1815 +#: FlatCAMDB.py:178 FlatCAMDB.py:874 FlatCAMDB.py:1371 msgid "E-Cut Length" msgstr "E-Cut Length" -#: FlatCAMCommon.py:623 FlatCAMCommon.py:1320 +#: FlatCAMDB.py:179 FlatCAMDB.py:876 msgid "Toolchange" msgstr "Toolchange" -#: FlatCAMCommon.py:624 FlatCAMCommon.py:1322 +#: FlatCAMDB.py:180 FlatCAMDB.py:878 msgid "Toolchange XY" msgstr "Toolchange XY" -#: FlatCAMCommon.py:625 FlatCAMCommon.py:1324 flatcamGUI/PreferencesUI.py:3378 +#: FlatCAMDB.py:181 FlatCAMDB.py:880 flatcamGUI/PreferencesUI.py:3378 #: flatcamGUI/PreferencesUI.py:4324 flatcamGUI/PreferencesUI.py:8078 #: flatcamTools/ToolCalibration.py:111 msgid "Toolchange Z" msgstr "Toolchange Z" -#: FlatCAMCommon.py:626 FlatCAMCommon.py:1326 flatcamGUI/ObjectUI.py:1192 +#: FlatCAMDB.py:182 FlatCAMDB.py:882 flatcamGUI/ObjectUI.py:1192 #: flatcamGUI/PreferencesUI.py:3586 flatcamGUI/PreferencesUI.py:4493 msgid "Start Z" msgstr "Start Z" -#: FlatCAMCommon.py:627 FlatCAMCommon.py:1329 +#: FlatCAMDB.py:183 FlatCAMDB.py:885 msgid "End Z" msgstr "End Z" -#: FlatCAMCommon.py:631 +#: FlatCAMDB.py:187 msgid "Tool Index." msgstr "Tool Index." -#: FlatCAMCommon.py:633 FlatCAMCommon.py:1533 +#: FlatCAMDB.py:189 FlatCAMDB.py:1089 msgid "" "Tool name.\n" "This is not used in the app, it's function\n" @@ -1962,11 +1960,11 @@ msgstr "" "This is not used in the app, it's function\n" "is to serve as a note for the user." -#: FlatCAMCommon.py:637 FlatCAMCommon.py:1546 +#: FlatCAMDB.py:193 FlatCAMDB.py:1102 msgid "Tool Diameter." msgstr "Tool Diameter." -#: FlatCAMCommon.py:639 FlatCAMCommon.py:1727 +#: FlatCAMDB.py:195 FlatCAMDB.py:1283 msgid "" "Tool Offset.\n" "Can be of a few types:\n" @@ -1982,7 +1980,7 @@ msgstr "" "Out = offset outside by half of tool diameter\n" "Custom = custom offset using the Custom Offset value" -#: FlatCAMCommon.py:646 FlatCAMCommon.py:1744 +#: FlatCAMDB.py:202 FlatCAMDB.py:1300 msgid "" "Custom Offset.\n" "A value to be used as offset from the current path." @@ -1990,7 +1988,7 @@ msgstr "" "Custom Offset.\n" "A value to be used as offset from the current path." -#: FlatCAMCommon.py:649 FlatCAMCommon.py:1711 +#: FlatCAMDB.py:205 FlatCAMDB.py:1267 msgid "" "Tool Type.\n" "Can be:\n" @@ -2004,7 +2002,7 @@ msgstr "" "Rough = rough cut, low feedrate, multiple passes\n" "Finish = finishing cut, high feedrate" -#: FlatCAMCommon.py:655 FlatCAMCommon.py:1559 +#: FlatCAMDB.py:211 FlatCAMDB.py:1115 msgid "" "Tool Shape. \n" "Can be:\n" @@ -2018,7 +2016,7 @@ msgstr "" "B = ball tip milling tool\n" "V = v-shape milling tool" -#: FlatCAMCommon.py:661 FlatCAMCommon.py:1575 +#: FlatCAMDB.py:217 FlatCAMDB.py:1131 msgid "" "Cutting Depth.\n" "The depth at which to cut into material." @@ -2026,7 +2024,7 @@ msgstr "" "Cutting Depth.\n" "The depth at which to cut into material." -#: FlatCAMCommon.py:664 FlatCAMCommon.py:1589 +#: FlatCAMDB.py:220 FlatCAMDB.py:1145 msgid "" "Multi Depth.\n" "Selecting this will allow cutting in multiple passes,\n" @@ -2036,7 +2034,7 @@ msgstr "" "Selecting this will allow cutting in multiple passes,\n" "each pass adding a DPP parameter depth." -#: FlatCAMCommon.py:668 FlatCAMCommon.py:1602 +#: FlatCAMDB.py:224 FlatCAMDB.py:1158 msgid "" "DPP. Depth per Pass.\n" "The value used to cut into material on each pass." @@ -2044,7 +2042,7 @@ msgstr "" "DPP. Depth per Pass.\n" "The value used to cut into material on each pass." -#: FlatCAMCommon.py:671 FlatCAMCommon.py:1758 +#: FlatCAMDB.py:227 FlatCAMDB.py:1314 msgid "" "V-Dia.\n" "Diameter of the tip for V-Shape Tools." @@ -2052,7 +2050,7 @@ msgstr "" "V-Dia.\n" "Diameter of the tip for V-Shape Tools." -#: FlatCAMCommon.py:674 FlatCAMCommon.py:1772 +#: FlatCAMDB.py:230 FlatCAMDB.py:1328 msgid "" "V-Agle.\n" "Angle at the tip for the V-Shape Tools." @@ -2060,7 +2058,7 @@ msgstr "" "V-Agle.\n" "Angle at the tip for the V-Shape Tools." -#: FlatCAMCommon.py:677 FlatCAMCommon.py:1616 +#: FlatCAMDB.py:233 FlatCAMDB.py:1172 msgid "" "Clearance Height.\n" "Height at which the milling bit will travel between cuts,\n" @@ -2070,7 +2068,7 @@ msgstr "" "Height at which the milling bit will travel between cuts,\n" "above the surface of the material, avoiding all fixtures." -#: FlatCAMCommon.py:681 +#: FlatCAMDB.py:237 msgid "" "FR. Feedrate\n" "The speed on XY plane used while cutting into material." @@ -2078,7 +2076,7 @@ msgstr "" "FR. Feedrate\n" "The speed on XY plane used while cutting into material." -#: FlatCAMCommon.py:684 +#: FlatCAMDB.py:240 msgid "" "FR Z. Feedrate Z\n" "The speed on Z plane." @@ -2086,7 +2084,7 @@ msgstr "" "FR Z. Feedrate Z\n" "The speed on Z plane." -#: FlatCAMCommon.py:687 FlatCAMCommon.py:1786 +#: FlatCAMDB.py:243 FlatCAMDB.py:1342 msgid "" "FR Rapids. Feedrate Rapids\n" "Speed used while moving as fast as possible.\n" @@ -2098,7 +2096,7 @@ msgstr "" "This is used only by some devices that can't use\n" "the G0 g-code command. Mostly 3D printers." -#: FlatCAMCommon.py:692 FlatCAMCommon.py:1659 +#: FlatCAMDB.py:248 FlatCAMDB.py:1215 msgid "" "Spindle Speed.\n" "If it's left empty it will not be used.\n" @@ -2108,7 +2106,7 @@ msgstr "" "If it's left empty it will not be used.\n" "The speed of the spindle in RPM." -#: FlatCAMCommon.py:696 FlatCAMCommon.py:1674 +#: FlatCAMDB.py:252 FlatCAMDB.py:1230 msgid "" "Dwell.\n" "Check this if a delay is needed to allow\n" @@ -2118,7 +2116,7 @@ msgstr "" "Check this if a delay is needed to allow\n" "the spindle motor to reach it's set speed." -#: FlatCAMCommon.py:700 FlatCAMCommon.py:1687 +#: FlatCAMDB.py:256 FlatCAMDB.py:1243 msgid "" "Dwell Time.\n" "A delay used to allow the motor spindle reach it's set speed." @@ -2126,7 +2124,7 @@ msgstr "" "Dwell Time.\n" "A delay used to allow the motor spindle reach it's set speed." -#: FlatCAMCommon.py:703 +#: FlatCAMDB.py:259 msgid "" "Preprocessor.\n" "A selection of files that will alter the generated G-code\n" @@ -2136,7 +2134,7 @@ msgstr "" "A selection of files that will alter the generated G-code\n" "to fit for a number of use cases." -#: FlatCAMCommon.py:707 FlatCAMCommon.py:1802 +#: FlatCAMDB.py:263 FlatCAMDB.py:1358 msgid "" "Extra Cut.\n" "If checked, after a isolation is finished an extra cut\n" @@ -2150,7 +2148,7 @@ msgstr "" "such as that this point is covered by this extra cut to\n" "ensure a complete isolation." -#: FlatCAMCommon.py:713 FlatCAMCommon.py:1817 +#: FlatCAMDB.py:269 FlatCAMDB.py:1373 msgid "" "Extra Cut length.\n" "If checked, after a isolation is finished an extra cut\n" @@ -2166,7 +2164,7 @@ msgstr "" "ensure a complete isolation. This is the length of\n" "the extra cut." -#: FlatCAMCommon.py:720 +#: FlatCAMDB.py:276 msgid "" "Toolchange.\n" "It will create a toolchange event.\n" @@ -2178,7 +2176,7 @@ msgstr "" "The kind of toolchange is determined by\n" "the preprocessor file." -#: FlatCAMCommon.py:725 +#: FlatCAMDB.py:281 msgid "" "Toolchange XY.\n" "A set of coordinates in the format (x, y).\n" @@ -2190,7 +2188,7 @@ msgstr "" "Will determine the cartesian position of the point\n" "where the tool change event take place." -#: FlatCAMCommon.py:730 +#: FlatCAMDB.py:286 msgid "" "Toolchange Z.\n" "The position on Z plane where the tool change event take place." @@ -2198,7 +2196,7 @@ msgstr "" "Toolchange Z.\n" "The position on Z plane where the tool change event take place." -#: FlatCAMCommon.py:733 +#: FlatCAMDB.py:289 msgid "" "Start Z.\n" "If it's left empty it will not be used.\n" @@ -2208,7 +2206,7 @@ msgstr "" "If it's left empty it will not be used.\n" "A position on Z plane to move immediately after job start." -#: FlatCAMCommon.py:737 +#: FlatCAMDB.py:293 msgid "" "End Z.\n" "A position on Z plane to move immediately after job stop." @@ -2216,101 +2214,99 @@ msgstr "" "End Z.\n" "A position on Z plane to move immediately after job stop." -#: FlatCAMCommon.py:749 FlatCAMCommon.py:1126 FlatCAMCommon.py:1160 -#: FlatCAMCommon.py:2335 FlatCAMCommon.py:2556 FlatCAMCommon.py:2590 +#: FlatCAMDB.py:305 FlatCAMDB.py:682 FlatCAMDB.py:716 FlatCAMDB.py:1891 +#: FlatCAMDB.py:2112 FlatCAMDB.py:2146 msgid "Could not load Tools DB file." msgstr "Could not load Tools DB file." -#: FlatCAMCommon.py:757 FlatCAMCommon.py:1168 FlatCAMCommon.py:2343 -#: FlatCAMCommon.py:2598 +#: FlatCAMDB.py:313 FlatCAMDB.py:724 FlatCAMDB.py:1899 FlatCAMDB.py:2154 msgid "Failed to parse Tools DB file." msgstr "Failed to parse Tools DB file." -#: FlatCAMCommon.py:760 FlatCAMCommon.py:1171 FlatCAMCommon.py:2346 -#: FlatCAMCommon.py:2601 +#: FlatCAMDB.py:316 FlatCAMDB.py:727 FlatCAMDB.py:1902 FlatCAMDB.py:2157 msgid "Loaded FlatCAM Tools DB from" msgstr "Loaded FlatCAM Tools DB from" -#: FlatCAMCommon.py:766 FlatCAMCommon.py:2260 +#: FlatCAMDB.py:322 FlatCAMDB.py:1816 msgid "Add to DB" msgstr "Add to DB" -#: FlatCAMCommon.py:768 FlatCAMCommon.py:2263 +#: FlatCAMDB.py:324 FlatCAMDB.py:1819 msgid "Copy from DB" msgstr "Copy from DB" -#: FlatCAMCommon.py:770 FlatCAMCommon.py:2266 +#: FlatCAMDB.py:326 FlatCAMDB.py:1822 msgid "Delete from DB" msgstr "Delete from DB" -#: FlatCAMCommon.py:1047 FlatCAMCommon.py:2473 +#: FlatCAMDB.py:603 FlatCAMDB.py:2029 msgid "Tool added to DB." msgstr "Tool added to DB." -#: FlatCAMCommon.py:1068 FlatCAMCommon.py:2497 +#: FlatCAMDB.py:624 FlatCAMDB.py:2053 msgid "Tool copied from Tools DB." msgstr "Tool copied from Tools DB." -#: FlatCAMCommon.py:1086 FlatCAMCommon.py:2516 +#: FlatCAMDB.py:642 FlatCAMDB.py:2072 msgid "Tool removed from Tools DB." msgstr "Tool removed from Tools DB." -#: FlatCAMCommon.py:1097 FlatCAMCommon.py:2527 +#: FlatCAMDB.py:653 FlatCAMDB.py:2083 msgid "Export Tools Database" msgstr "Export Tools Database" -#: FlatCAMCommon.py:1100 FlatCAMCommon.py:2530 +#: FlatCAMDB.py:656 FlatCAMDB.py:2086 msgid "Tools_Database" msgstr "Tools_Database" -#: FlatCAMCommon.py:1137 FlatCAMCommon.py:1140 FlatCAMCommon.py:1192 -#: FlatCAMCommon.py:2567 FlatCAMCommon.py:2570 FlatCAMCommon.py:2622 +#: FlatCAMDB.py:693 FlatCAMDB.py:696 FlatCAMDB.py:748 FlatCAMDB.py:2123 +#: FlatCAMDB.py:2126 FlatCAMDB.py:2178 msgid "Failed to write Tools DB to file." msgstr "Failed to write Tools DB to file." -#: FlatCAMCommon.py:1143 FlatCAMCommon.py:2573 +#: FlatCAMDB.py:699 FlatCAMDB.py:2129 msgid "Exported Tools DB to" msgstr "Exported Tools DB to" -#: FlatCAMCommon.py:1150 FlatCAMCommon.py:2580 +#: FlatCAMDB.py:706 FlatCAMDB.py:2136 msgid "Import FlatCAM Tools DB" msgstr "Import FlatCAM Tools DB" -#: FlatCAMCommon.py:1196 FlatCAMCommon.py:2626 +#: FlatCAMDB.py:752 FlatCAMDB.py:2182 msgid "Saved Tools DB." msgstr "Saved Tools DB." -#: FlatCAMCommon.py:1343 FlatCAMCommon.py:2807 +#: FlatCAMDB.py:899 FlatCAMDB.py:2365 msgid "No Tool/row selected in the Tools Database table" msgstr "No Tool/row selected in the Tools Database table" -#: FlatCAMCommon.py:1361 FlatCAMCommon.py:2824 +#: FlatCAMDB.py:917 FlatCAMDB.py:2382 msgid "Cancelled adding tool from DB." msgstr "Cancelled adding tool from DB." -#: FlatCAMCommon.py:1462 +#: FlatCAMDB.py:1018 msgid "Basic Geo Parameters" msgstr "Basic Geo Parameters" -#: FlatCAMCommon.py:1474 +#: FlatCAMDB.py:1030 msgid "Advanced Geo Parameters" msgstr "Advanced Geo Parameters" -#: FlatCAMCommon.py:1486 +#: FlatCAMDB.py:1042 msgid "NCC Parameters" msgstr "NCC Parameters" -#: FlatCAMCommon.py:1498 +#: FlatCAMDB.py:1054 msgid "Paint Parameters" msgstr "Paint Parameters" -#: FlatCAMCommon.py:1629 flatcamGUI/ObjectUI.py:966 flatcamGUI/ObjectUI.py:1767 +#: FlatCAMDB.py:1185 flatcamGUI/ObjectUI.py:966 flatcamGUI/ObjectUI.py:1768 #: flatcamGUI/PreferencesUI.py:4378 flatcamGUI/PreferencesUI.py:7059 -#: flatcamTools/ToolSolderPaste.py:254 +#: flatcamTools/ToolSolderPaste.py:253 msgid "Feedrate X-Y" msgstr "Feedrate X-Y" -#: FlatCAMCommon.py:1631 +#: FlatCAMDB.py:1187 msgid "" "Feedrate X-Y. Feedrate\n" "The speed on XY plane used while cutting into material." @@ -2318,13 +2314,13 @@ msgstr "" "Feedrate X-Y. Feedrate\n" "The speed on XY plane used while cutting into material." -#: FlatCAMCommon.py:1643 flatcamGUI/ObjectUI.py:981 flatcamGUI/ObjectUI.py:1781 +#: FlatCAMDB.py:1199 flatcamGUI/ObjectUI.py:981 flatcamGUI/ObjectUI.py:1782 #: flatcamGUI/PreferencesUI.py:3425 flatcamGUI/PreferencesUI.py:4393 -#: flatcamGUI/PreferencesUI.py:7072 flatcamTools/ToolSolderPaste.py:266 +#: flatcamGUI/PreferencesUI.py:7072 flatcamTools/ToolSolderPaste.py:265 msgid "Feedrate Z" msgstr "Feedrate Z" -#: FlatCAMCommon.py:1645 +#: FlatCAMDB.py:1201 msgid "" "Feedrate Z\n" "The speed on Z plane." @@ -2332,12 +2328,12 @@ msgstr "" "Feedrate Z\n" "The speed on Z plane." -#: FlatCAMCommon.py:1843 flatcamGUI/ObjectUI.py:844 +#: FlatCAMDB.py:1399 flatcamGUI/ObjectUI.py:844 #: flatcamGUI/PreferencesUI.py:3264 flatcamTools/ToolNCC.py:341 msgid "Operation" msgstr "Operation" -#: FlatCAMCommon.py:1845 flatcamTools/ToolNCC.py:343 +#: FlatCAMDB.py:1401 flatcamTools/ToolNCC.py:343 msgid "" "The 'Operation' can be:\n" "- Isolation -> will ensure that the non-copper clearing is always complete.\n" @@ -2349,24 +2345,23 @@ msgstr "" "If it's not successful then the non-copper clearing will fail, too.\n" "- Clear -> the regular non-copper clearing." -#: FlatCAMCommon.py:1852 flatcamEditors/FlatCAMGrbEditor.py:2739 +#: FlatCAMDB.py:1408 flatcamEditors/FlatCAMGrbEditor.py:2739 #: flatcamGUI/GUIElements.py:2577 flatcamTools/ToolNCC.py:350 msgid "Clear" msgstr "Clear" -#: FlatCAMCommon.py:1853 flatcamTools/ToolNCC.py:351 -#: flatcamTools/ToolNCC.py:1618 +#: FlatCAMDB.py:1409 flatcamTools/ToolNCC.py:351 flatcamTools/ToolNCC.py:1618 msgid "Isolation" msgstr "Isolation" -#: FlatCAMCommon.py:1861 flatcamGUI/ObjectUI.py:408 flatcamGUI/ObjectUI.py:866 +#: FlatCAMDB.py:1417 flatcamGUI/ObjectUI.py:408 flatcamGUI/ObjectUI.py:866 #: flatcamGUI/PreferencesUI.py:2257 flatcamGUI/PreferencesUI.py:3280 #: flatcamGUI/PreferencesUI.py:4665 flatcamGUI/PreferencesUI.py:5416 #: flatcamTools/ToolNCC.py:359 msgid "Milling Type" msgstr "Milling Type" -#: FlatCAMCommon.py:1863 FlatCAMCommon.py:1871 flatcamGUI/PreferencesUI.py:5418 +#: FlatCAMDB.py:1419 FlatCAMDB.py:1427 flatcamGUI/PreferencesUI.py:5418 #: flatcamGUI/PreferencesUI.py:5426 flatcamTools/ToolNCC.py:361 #: flatcamTools/ToolNCC.py:369 msgid "" @@ -2378,26 +2373,25 @@ msgstr "" "- climb / best for precision milling and to reduce tool usage\n" "- conventional / useful when there is no backlash compensation" -#: FlatCAMCommon.py:1868 flatcamGUI/ObjectUI.py:414 +#: FlatCAMDB.py:1424 flatcamGUI/ObjectUI.py:414 #: flatcamGUI/PreferencesUI.py:2264 flatcamGUI/PreferencesUI.py:4671 #: flatcamGUI/PreferencesUI.py:5423 flatcamTools/ToolNCC.py:366 msgid "Climb" msgstr "Climb" -#: FlatCAMCommon.py:1869 flatcamGUI/ObjectUI.py:415 +#: FlatCAMDB.py:1425 flatcamGUI/ObjectUI.py:415 #: flatcamGUI/PreferencesUI.py:2265 flatcamGUI/PreferencesUI.py:4672 #: flatcamGUI/PreferencesUI.py:5424 flatcamTools/ToolNCC.py:367 msgid "Conventional" msgstr "Conventional" -#: FlatCAMCommon.py:1881 FlatCAMCommon.py:1990 -#: flatcamEditors/FlatCAMGeoEditor.py:452 flatcamGUI/PreferencesUI.py:5461 -#: flatcamGUI/PreferencesUI.py:6002 flatcamTools/ToolNCC.py:382 -#: flatcamTools/ToolPaint.py:329 +#: FlatCAMDB.py:1437 FlatCAMDB.py:1546 flatcamEditors/FlatCAMGeoEditor.py:451 +#: flatcamGUI/PreferencesUI.py:5461 flatcamGUI/PreferencesUI.py:6002 +#: flatcamTools/ToolNCC.py:382 flatcamTools/ToolPaint.py:329 msgid "Overlap" msgstr "Overlap" -#: FlatCAMCommon.py:1883 flatcamGUI/PreferencesUI.py:5463 +#: FlatCAMDB.py:1439 flatcamGUI/PreferencesUI.py:5463 #: flatcamTools/ToolNCC.py:384 msgid "" "How much (percentage) of the tool width to overlap each tool pass.\n" @@ -2416,37 +2410,36 @@ msgstr "" "Higher values = slow processing and slow execution on CNC\n" "due of too many paths." -#: FlatCAMCommon.py:1902 FlatCAMCommon.py:2011 -#: flatcamEditors/FlatCAMGeoEditor.py:472 flatcamGUI/PreferencesUI.py:5481 -#: flatcamGUI/PreferencesUI.py:5723 flatcamGUI/PreferencesUI.py:6022 -#: flatcamGUI/PreferencesUI.py:7681 flatcamGUI/PreferencesUI.py:7838 -#: flatcamGUI/PreferencesUI.py:7923 flatcamGUI/PreferencesUI.py:8570 -#: flatcamGUI/PreferencesUI.py:8578 flatcamTools/ToolCopperThieving.py:112 -#: flatcamTools/ToolCopperThieving.py:363 flatcamTools/ToolCutOut.py:191 +#: FlatCAMDB.py:1458 FlatCAMDB.py:1567 flatcamEditors/FlatCAMGeoEditor.py:471 +#: flatcamGUI/PreferencesUI.py:5481 flatcamGUI/PreferencesUI.py:5723 +#: flatcamGUI/PreferencesUI.py:6022 flatcamGUI/PreferencesUI.py:7681 +#: flatcamGUI/PreferencesUI.py:7838 flatcamGUI/PreferencesUI.py:7923 +#: flatcamGUI/PreferencesUI.py:8570 flatcamGUI/PreferencesUI.py:8578 +#: flatcamTools/ToolCopperThieving.py:111 +#: flatcamTools/ToolCopperThieving.py:362 flatcamTools/ToolCutOut.py:190 #: flatcamTools/ToolFiducials.py:172 flatcamTools/ToolInvertGerber.py:88 #: flatcamTools/ToolInvertGerber.py:96 flatcamTools/ToolNCC.py:403 #: flatcamTools/ToolPaint.py:350 msgid "Margin" msgstr "Margin" -#: FlatCAMCommon.py:1904 flatcamGUI/PreferencesUI.py:5483 +#: FlatCAMDB.py:1460 flatcamGUI/PreferencesUI.py:5483 #: flatcamGUI/PreferencesUI.py:7683 flatcamGUI/PreferencesUI.py:7925 -#: flatcamGUI/PreferencesUI.py:7989 flatcamTools/ToolCopperThieving.py:114 +#: flatcamGUI/PreferencesUI.py:7989 flatcamTools/ToolCopperThieving.py:113 #: flatcamTools/ToolFiducials.py:174 flatcamTools/ToolFiducials.py:237 #: flatcamTools/ToolNCC.py:405 msgid "Bounding box margin." msgstr "Bounding box margin." -#: FlatCAMCommon.py:1915 FlatCAMCommon.py:2026 -#: flatcamEditors/FlatCAMGeoEditor.py:486 flatcamGUI/PreferencesUI.py:5494 -#: flatcamGUI/PreferencesUI.py:6037 flatcamGUI/PreferencesUI.py:8204 -#: flatcamGUI/PreferencesUI.py:8417 flatcamTools/ToolExtractDrills.py:128 -#: flatcamTools/ToolNCC.py:416 flatcamTools/ToolPaint.py:365 -#: flatcamTools/ToolPunchGerber.py:139 +#: FlatCAMDB.py:1471 FlatCAMDB.py:1582 flatcamEditors/FlatCAMGeoEditor.py:485 +#: flatcamGUI/PreferencesUI.py:5494 flatcamGUI/PreferencesUI.py:6037 +#: flatcamGUI/PreferencesUI.py:8204 flatcamGUI/PreferencesUI.py:8417 +#: flatcamTools/ToolExtractDrills.py:128 flatcamTools/ToolNCC.py:416 +#: flatcamTools/ToolPaint.py:365 flatcamTools/ToolPunchGerber.py:139 msgid "Method" msgstr "Method" -#: FlatCAMCommon.py:1917 flatcamGUI/PreferencesUI.py:5496 +#: FlatCAMDB.py:1473 flatcamGUI/PreferencesUI.py:5496 #: flatcamTools/ToolNCC.py:418 msgid "" "Algorithm for copper clearing:\n" @@ -2459,19 +2452,17 @@ msgstr "" "- Seed-based: Outwards from seed.\n" "- Line-based: Parallel lines." -#: FlatCAMCommon.py:1925 FlatCAMCommon.py:2040 -#: flatcamEditors/FlatCAMGeoEditor.py:500 flatcamGUI/PreferencesUI.py:5509 -#: flatcamGUI/PreferencesUI.py:6056 flatcamTools/ToolNCC.py:431 -#: flatcamTools/ToolNCC.py:2390 flatcamTools/ToolNCC.py:2419 -#: flatcamTools/ToolNCC.py:2688 flatcamTools/ToolNCC.py:2720 -#: flatcamTools/ToolPaint.py:390 flatcamTools/ToolPaint.py:1829 -#: tclCommands/TclCommandCopperClear.py:126 +#: FlatCAMDB.py:1481 FlatCAMDB.py:1596 flatcamEditors/FlatCAMGeoEditor.py:499 +#: flatcamGUI/PreferencesUI.py:5509 flatcamGUI/PreferencesUI.py:6056 +#: flatcamTools/ToolNCC.py:431 flatcamTools/ToolNCC.py:2390 +#: flatcamTools/ToolNCC.py:2419 flatcamTools/ToolNCC.py:2688 +#: flatcamTools/ToolNCC.py:2720 flatcamTools/ToolPaint.py:390 +#: flatcamTools/ToolPaint.py:1829 tclCommands/TclCommandCopperClear.py:126 #: tclCommands/TclCommandCopperClear.py:134 tclCommands/TclCommandPaint.py:125 msgid "Standard" msgstr "Standard" -#: FlatCAMCommon.py:1925 FlatCAMCommon.py:2040 -#: flatcamEditors/FlatCAMGeoEditor.py:500 +#: FlatCAMDB.py:1481 FlatCAMDB.py:1596 flatcamEditors/FlatCAMGeoEditor.py:499 #: flatcamEditors/FlatCAMGeoEditor.py:5156 flatcamGUI/PreferencesUI.py:5509 #: flatcamGUI/PreferencesUI.py:6056 flatcamTools/ToolNCC.py:431 #: flatcamTools/ToolPaint.py:390 flatcamTools/ToolPaint.py:699 @@ -2480,16 +2471,15 @@ msgstr "Standard" msgid "Lines" msgstr "Lines" -#: FlatCAMCommon.py:1933 FlatCAMCommon.py:2051 flatcamGUI/PreferencesUI.py:5516 +#: FlatCAMDB.py:1489 FlatCAMDB.py:1607 flatcamGUI/PreferencesUI.py:5516 #: flatcamGUI/PreferencesUI.py:6063 flatcamTools/ToolNCC.py:439 #: flatcamTools/ToolPaint.py:401 msgid "Connect" msgstr "Connect" -#: FlatCAMCommon.py:1937 FlatCAMCommon.py:2054 -#: flatcamEditors/FlatCAMGeoEditor.py:509 flatcamGUI/PreferencesUI.py:5518 -#: flatcamGUI/PreferencesUI.py:6065 flatcamTools/ToolNCC.py:443 -#: flatcamTools/ToolPaint.py:404 +#: FlatCAMDB.py:1493 FlatCAMDB.py:1610 flatcamEditors/FlatCAMGeoEditor.py:508 +#: flatcamGUI/PreferencesUI.py:5518 flatcamGUI/PreferencesUI.py:6065 +#: flatcamTools/ToolNCC.py:443 flatcamTools/ToolPaint.py:404 msgid "" "Draw lines between resulting\n" "segments to minimize tool lifts." @@ -2497,16 +2487,15 @@ msgstr "" "Draw lines between resulting\n" "segments to minimize tool lifts." -#: FlatCAMCommon.py:1943 FlatCAMCommon.py:2058 flatcamGUI/PreferencesUI.py:5525 +#: FlatCAMDB.py:1499 FlatCAMDB.py:1614 flatcamGUI/PreferencesUI.py:5525 #: flatcamGUI/PreferencesUI.py:6071 flatcamTools/ToolNCC.py:449 #: flatcamTools/ToolPaint.py:408 msgid "Contour" msgstr "Contour" -#: FlatCAMCommon.py:1947 FlatCAMCommon.py:2061 -#: flatcamEditors/FlatCAMGeoEditor.py:519 flatcamGUI/PreferencesUI.py:5527 -#: flatcamGUI/PreferencesUI.py:6073 flatcamTools/ToolNCC.py:453 -#: flatcamTools/ToolPaint.py:411 +#: FlatCAMDB.py:1503 FlatCAMDB.py:1617 flatcamEditors/FlatCAMGeoEditor.py:518 +#: flatcamGUI/PreferencesUI.py:5527 flatcamGUI/PreferencesUI.py:6073 +#: flatcamTools/ToolNCC.py:453 flatcamTools/ToolPaint.py:411 msgid "" "Cut around the perimeter of the polygon\n" "to trim rough edges." @@ -2514,15 +2503,15 @@ msgstr "" "Cut around the perimeter of the polygon\n" "to trim rough edges." -#: FlatCAMCommon.py:1953 flatcamEditors/FlatCAMGeoEditor.py:613 +#: FlatCAMDB.py:1509 flatcamEditors/FlatCAMGeoEditor.py:612 #: flatcamEditors/FlatCAMGrbEditor.py:5145 flatcamGUI/ObjectUI.py:142 -#: flatcamGUI/ObjectUI.py:1495 flatcamGUI/ObjectUI.py:2244 +#: flatcamGUI/ObjectUI.py:1496 flatcamGUI/ObjectUI.py:2245 #: flatcamGUI/PreferencesUI.py:5534 flatcamGUI/PreferencesUI.py:6822 -#: flatcamTools/ToolNCC.py:459 flatcamTools/ToolTransform.py:29 +#: flatcamTools/ToolNCC.py:459 flatcamTools/ToolTransform.py:28 msgid "Offset" msgstr "Offset" -#: FlatCAMCommon.py:1957 flatcamGUI/PreferencesUI.py:5536 +#: FlatCAMDB.py:1513 flatcamGUI/PreferencesUI.py:5536 #: flatcamTools/ToolNCC.py:463 msgid "" "If used, it will add an offset to the copper features.\n" @@ -2535,7 +2524,7 @@ msgstr "" "from the copper features.\n" "The value can be between 0 and 10 FlatCAM units." -#: FlatCAMCommon.py:1992 flatcamEditors/FlatCAMGeoEditor.py:454 +#: FlatCAMDB.py:1548 flatcamEditors/FlatCAMGeoEditor.py:453 #: flatcamGUI/PreferencesUI.py:6004 flatcamTools/ToolPaint.py:331 msgid "" "How much (percentage) of the tool width to overlap each tool pass.\n" @@ -2554,7 +2543,7 @@ msgstr "" "Higher values = slow processing and slow execution on CNC\n" "due of too many paths." -#: FlatCAMCommon.py:2013 flatcamEditors/FlatCAMGeoEditor.py:474 +#: FlatCAMDB.py:1569 flatcamEditors/FlatCAMGeoEditor.py:473 #: flatcamGUI/PreferencesUI.py:6024 flatcamTools/ToolPaint.py:352 msgid "" "Distance by which to avoid\n" @@ -2565,7 +2554,7 @@ msgstr "" "the edges of the polygon to\n" "be painted." -#: FlatCAMCommon.py:2028 flatcamGUI/PreferencesUI.py:6039 +#: FlatCAMDB.py:1584 flatcamGUI/PreferencesUI.py:6039 #: flatcamTools/ToolPaint.py:367 msgid "" "Algorithm for painting:\n" @@ -2586,492 +2575,23 @@ msgstr "" "- Combo: In case of failure a new method will be picked from the above\n" "in the order specified." -#: FlatCAMCommon.py:2040 FlatCAMCommon.py:2042 flatcamGUI/PreferencesUI.py:6056 +#: FlatCAMDB.py:1596 FlatCAMDB.py:1598 flatcamGUI/PreferencesUI.py:6056 #: flatcamTools/ToolPaint.py:390 flatcamTools/ToolPaint.py:392 #: flatcamTools/ToolPaint.py:693 flatcamTools/ToolPaint.py:698 #: flatcamTools/ToolPaint.py:1871 tclCommands/TclCommandPaint.py:131 msgid "Laser_lines" msgstr "Laser_lines" -#: FlatCAMCommon.py:2040 flatcamGUI/PreferencesUI.py:6056 +#: FlatCAMDB.py:1596 flatcamGUI/PreferencesUI.py:6056 #: flatcamTools/ToolPaint.py:390 flatcamTools/ToolPaint.py:2022 #: tclCommands/TclCommandPaint.py:133 msgid "Combo" msgstr "Combo" -#: FlatCAMCommon.py:2085 +#: FlatCAMDB.py:1641 msgid "Add Tool in DB" msgstr "Add Tool in DB" -#: FlatCAMObj.py:264 -msgid "Name changed from" -msgstr "Name changed from" - -#: FlatCAMObj.py:264 -msgid "to" -msgstr "to" - -#: FlatCAMObj.py:275 -msgid "Offsetting..." -msgstr "Offsetting..." - -#: FlatCAMObj.py:289 FlatCAMObj.py:294 -msgid "Scaling could not be executed." -msgstr "Scaling could not be executed." - -#: FlatCAMObj.py:298 FlatCAMObj.py:306 -msgid "Scale done." -msgstr "Scale done." - -#: FlatCAMObj.py:304 -msgid "Scaling..." -msgstr "Scaling..." - -#: FlatCAMObj.py:322 -msgid "Skewing..." -msgstr "Skewing..." - -#: FlatCAMObj.py:743 FlatCAMObj.py:831 flatcamGUI/ObjectUI.py:449 -#: flatcamGUI/PreferencesUI.py:6527 flatcamTools/ToolAlignObjects.py:73 -#: flatcamTools/ToolAlignObjects.py:109 flatcamTools/ToolCalibration.py:196 -#: flatcamTools/ToolCalibration.py:631 flatcamTools/ToolCalibration.py:648 -#: flatcamTools/ToolCalibration.py:807 flatcamTools/ToolCalibration.py:815 -#: flatcamTools/ToolCopperThieving.py:145 -#: flatcamTools/ToolCopperThieving.py:159 -#: flatcamTools/ToolCopperThieving.py:605 flatcamTools/ToolCutOut.py:92 -#: flatcamTools/ToolDblSided.py:225 flatcamTools/ToolFilm.py:69 -#: flatcamTools/ToolFilm.py:102 flatcamTools/ToolFilm.py:549 -#: flatcamTools/ToolFilm.py:557 flatcamTools/ToolImage.py:49 -#: flatcamTools/ToolImage.py:252 flatcamTools/ToolImage.py:273 -#: flatcamTools/ToolNCC.py:96 flatcamTools/ToolNCC.py:558 -#: flatcamTools/ToolNCC.py:1295 flatcamTools/ToolPaint.py:502 -#: flatcamTools/ToolPaint.py:706 flatcamTools/ToolPanelize.py:118 -#: flatcamTools/ToolPanelize.py:204 flatcamTools/ToolPanelize.py:374 -#: flatcamTools/ToolPanelize.py:391 -msgid "Gerber" -msgstr "Gerber" - -#: FlatCAMObj.py:743 FlatCAMObj.py:831 flatcamGUI/FlatCAMGUI.py:2154 -#: flatcamGUI/ObjectUI.py:449 flatcamTools/ToolCalibration.py:631 -#: flatcamTools/ToolCalibration.py:648 flatcamTools/ToolCalibration.py:815 -#: flatcamTools/ToolCopperThieving.py:145 -#: flatcamTools/ToolCopperThieving.py:159 -#: flatcamTools/ToolCopperThieving.py:605 flatcamTools/ToolCutOut.py:93 -#: flatcamTools/ToolDblSided.py:227 flatcamTools/ToolFilm.py:69 -#: flatcamTools/ToolFilm.py:102 flatcamTools/ToolFilm.py:549 -#: flatcamTools/ToolFilm.py:557 flatcamTools/ToolImage.py:49 -#: flatcamTools/ToolImage.py:271 flatcamTools/ToolNCC.py:95 -#: flatcamTools/ToolNCC.py:558 flatcamTools/ToolNCC.py:1295 -#: flatcamTools/ToolPaint.py:502 flatcamTools/ToolPaint.py:706 -#: flatcamTools/ToolPanelize.py:118 flatcamTools/ToolPanelize.py:374 -#: flatcamTools/ToolPanelize.py:391 -msgid "Geometry" -msgstr "Geometry" - -#: FlatCAMObj.py:755 FlatCAMObj.py:2957 FlatCAMObj.py:4421 -#: flatcamGUI/PreferencesUI.py:1646 flatcamGUI/PreferencesUI.py:3041 -msgid "Basic" -msgstr "Basic" - -#: FlatCAMObj.py:782 FlatCAMObj.py:2970 FlatCAMObj.py:4442 -#: flatcamGUI/PreferencesUI.py:1647 -msgid "Advanced" -msgstr "Advanced" - -#: FlatCAMObj.py:998 -msgid "Buffering solid geometry" -msgstr "Buffering solid geometry" - -#: FlatCAMObj.py:1001 camlib.py:979 flatcamGUI/PreferencesUI.py:2476 -#: flatcamTools/ToolCopperThieving.py:1017 -#: flatcamTools/ToolCopperThieving.py:1206 -#: flatcamTools/ToolCopperThieving.py:1218 flatcamTools/ToolNCC.py:2045 -#: flatcamTools/ToolNCC.py:2153 flatcamTools/ToolNCC.py:2167 -#: flatcamTools/ToolNCC.py:3098 flatcamTools/ToolNCC.py:3203 -#: flatcamTools/ToolNCC.py:3218 flatcamTools/ToolNCC.py:3484 -#: flatcamTools/ToolNCC.py:3585 flatcamTools/ToolNCC.py:3600 -msgid "Buffering" -msgstr "Buffering" - -#: FlatCAMObj.py:1007 -msgid "Done" -msgstr "Done" - -#: FlatCAMObj.py:1032 FlatCAMObj.py:1058 -msgid "Operation could not be done." -msgstr "Operation could not be done." - -#: FlatCAMObj.py:1075 -msgid "Isolating..." -msgstr "Isolating..." - -#: FlatCAMObj.py:1134 -msgid "Click on a polygon to isolate it." -msgstr "Click on a polygon to isolate it." - -#: FlatCAMObj.py:1173 FlatCAMObj.py:1277 flatcamTools/ToolPaint.py:1511 -msgid "Added polygon" -msgstr "Added polygon" - -#: FlatCAMObj.py:1174 FlatCAMObj.py:1279 -msgid "Click to add next polygon or right click to start isolation." -msgstr "Click to add next polygon or right click to start isolation." - -#: FlatCAMObj.py:1186 flatcamTools/ToolPaint.py:1525 -msgid "Removed polygon" -msgstr "Removed polygon" - -#: FlatCAMObj.py:1187 -msgid "Click to add/remove next polygon or right click to start isolation." -msgstr "Click to add/remove next polygon or right click to start isolation." - -#: FlatCAMObj.py:1192 flatcamTools/ToolPaint.py:1531 -msgid "No polygon detected under click position." -msgstr "No polygon detected under click position." - -#: FlatCAMObj.py:1213 flatcamTools/ToolPaint.py:1560 -msgid "List of single polygons is empty. Aborting." -msgstr "List of single polygons is empty. Aborting." - -#: FlatCAMObj.py:1282 -msgid "No polygon in selection." -msgstr "No polygon in selection." - -#: FlatCAMObj.py:1394 FlatCAMObj.py:1542 FlatCAMObj.py:4055 FlatCAMObj.py:4375 -#: FlatCAMObj.py:4762 -msgid "Rough" -msgstr "Rough" - -#: FlatCAMObj.py:1410 FlatCAMObj.py:1489 flatcamTools/ToolNCC.py:2081 -#: flatcamTools/ToolNCC.py:3132 flatcamTools/ToolNCC.py:3511 -msgid "Isolation geometry could not be generated." -msgstr "Isolation geometry could not be generated." - -#: FlatCAMObj.py:1435 FlatCAMObj.py:1567 -msgid "Isolation geometry created" -msgstr "Isolation geometry created" - -#: FlatCAMObj.py:1444 FlatCAMObj.py:1574 -msgid "Subtracting Geo" -msgstr "Subtracting Geo" - -#: FlatCAMObj.py:1899 -msgid "Plotting Apertures" -msgstr "Plotting Apertures" - -#: FlatCAMObj.py:2753 flatcamEditors/FlatCAMExcEditor.py:2453 -msgid "Total Drills" -msgstr "Total Drills" - -#: FlatCAMObj.py:2784 flatcamEditors/FlatCAMExcEditor.py:2485 -msgid "Total Slots" -msgstr "Total Slots" - -#: FlatCAMObj.py:2857 FlatCAMObj.py:3069 FlatCAMObj.py:3085 FlatCAMObj.py:3089 -#: FlatCAMObj.py:4242 FlatCAMObj.py:4667 FlatCAMObj.py:4703 -#: flatcamGUI/ObjectUI.py:817 flatcamGUI/ObjectUI.py:1660 -#: flatcamTools/ToolNCC.py:331 flatcamTools/ToolNCC.py:797 -#: flatcamTools/ToolNCC.py:811 flatcamTools/ToolNCC.py:1191 -#: flatcamTools/ToolPaint.py:314 flatcamTools/ToolPaint.py:767 -#: flatcamTools/ToolPaint.py:779 flatcamTools/ToolPaint.py:1166 -msgid "Parameters for" -msgstr "Parameters for" - -#: FlatCAMObj.py:2857 FlatCAMObj.py:3089 FlatCAMObj.py:4242 FlatCAMObj.py:4703 -#: flatcamTools/ToolNCC.py:811 flatcamTools/ToolNCC.py:1191 -#: flatcamTools/ToolPaint.py:779 flatcamTools/ToolPaint.py:1166 -msgid "Multiple Tools" -msgstr "Multiple Tools" - -#: FlatCAMObj.py:3069 -msgid "No Tool Selected" -msgstr "No Tool Selected" - -#: FlatCAMObj.py:3085 FlatCAMObj.py:3427 FlatCAMObj.py:4667 -#: flatcamEditors/FlatCAMGeoEditor.py:406 flatcamGUI/FlatCAMGUI.py:496 -#: flatcamGUI/FlatCAMGUI.py:1143 flatcamGUI/ObjectUI.py:817 -#: flatcamGUI/ObjectUI.py:1660 flatcamTools/ToolNCC.py:331 -#: flatcamTools/ToolNCC.py:797 flatcamTools/ToolPaint.py:314 -#: flatcamTools/ToolPaint.py:767 -msgid "Tool" -msgstr "Tool" - -#: FlatCAMObj.py:3419 FlatCAMObj.py:3512 FlatCAMObj.py:3700 -msgid "Please select one or more tools from the list and try again." -msgstr "Please select one or more tools from the list and try again." - -#: FlatCAMObj.py:3426 -msgid "Milling tool for DRILLS is larger than hole size. Cancelled." -msgstr "Milling tool for DRILLS is larger than hole size. Cancelled." - -#: FlatCAMObj.py:3442 FlatCAMObj.py:3533 FlatCAMObj.py:3719 -#: tclCommands/TclCommandDrillcncjob.py:194 -msgid "Tool_nr" -msgstr "Tool_nr" - -#: FlatCAMObj.py:3442 FlatCAMObj.py:3533 FlatCAMObj.py:3719 -#: flatcamEditors/FlatCAMExcEditor.py:1585 -#: flatcamEditors/FlatCAMExcEditor.py:3069 flatcamGUI/ObjectUI.py:780 -#: flatcamTools/ToolNCC.py:132 flatcamTools/ToolPaint.py:128 -#: flatcamTools/ToolPcbWizard.py:76 flatcamTools/ToolProperties.py:416 -#: flatcamTools/ToolProperties.py:476 flatcamTools/ToolSolderPaste.py:86 -#: tclCommands/TclCommandDrillcncjob.py:194 -msgid "Diameter" -msgstr "Diameter" - -#: FlatCAMObj.py:3442 FlatCAMObj.py:3533 FlatCAMObj.py:3719 -#: tclCommands/TclCommandDrillcncjob.py:194 -msgid "Drills_Nr" -msgstr "Drills_Nr" - -#: FlatCAMObj.py:3442 FlatCAMObj.py:3533 FlatCAMObj.py:3719 -#: tclCommands/TclCommandDrillcncjob.py:194 -msgid "Slots_Nr" -msgstr "Slots_Nr" - -#: FlatCAMObj.py:3521 -msgid "Milling tool for SLOTS is larger than hole size. Cancelled." -msgstr "Milling tool for SLOTS is larger than hole size. Cancelled." - -#: FlatCAMObj.py:3626 FlatCAMObj.py:5451 -msgid "Focus Z" -msgstr "Focus Z" - -#: FlatCAMObj.py:3645 FlatCAMObj.py:5470 -msgid "Laser Power" -msgstr "Laser Power" - -#: FlatCAMObj.py:3677 FlatCAMObj.py:5502 flatcamGUI/ObjectUI.py:1048 -#: flatcamGUI/ObjectUI.py:1839 flatcamGUI/PreferencesUI.py:4409 -msgid "Spindle speed" -msgstr "Spindle speed" - -#: FlatCAMObj.py:3776 FlatCAMObj.py:5911 FlatCAMObj.py:5915 FlatCAMObj.py:6060 -msgid "Generating CNC Code" -msgstr "Generating CNC Code" - -#: FlatCAMObj.py:3966 flatcamTools/ToolNCC.py:918 flatcamTools/ToolPaint.py:844 -msgid "Current Tool parameters were applied to all tools." -msgstr "Current Tool parameters were applied to all tools." - -#: FlatCAMObj.py:4055 FlatCAMObj.py:5115 FlatCAMObj.py:5116 FlatCAMObj.py:5125 -msgid "Iso" -msgstr "Iso" - -#: FlatCAMObj.py:4055 -msgid "Finish" -msgstr "Finish" - -#: FlatCAMObj.py:4410 -msgid "Add from Tool DB" -msgstr "Add from Tool DB" - -#: FlatCAMObj.py:4413 flatcamGUI/FlatCAMGUI.py:734 flatcamGUI/FlatCAMGUI.py:848 -#: flatcamGUI/FlatCAMGUI.py:1057 flatcamGUI/FlatCAMGUI.py:2123 -#: flatcamGUI/FlatCAMGUI.py:2267 flatcamGUI/FlatCAMGUI.py:2532 -#: flatcamGUI/FlatCAMGUI.py:2731 flatcamGUI/ObjectUI.py:1615 -#: flatcamTools/ToolPanelize.py:543 flatcamTools/ToolPanelize.py:570 -#: flatcamTools/ToolPanelize.py:669 flatcamTools/ToolPanelize.py:703 -#: flatcamTools/ToolPanelize.py:768 -msgid "Copy" -msgstr "Copy" - -#: FlatCAMObj.py:4507 FlatCAMObj.py:4941 FlatCAMObj.py:5661 FlatCAMObj.py:6307 -#: flatcamEditors/FlatCAMExcEditor.py:2560 -#: flatcamEditors/FlatCAMGeoEditor.py:1077 -#: flatcamEditors/FlatCAMGeoEditor.py:1118 -#: flatcamEditors/FlatCAMGeoEditor.py:1146 -#: flatcamEditors/FlatCAMGeoEditor.py:1174 -#: flatcamEditors/FlatCAMGeoEditor.py:1218 -#: flatcamEditors/FlatCAMGeoEditor.py:1253 -#: flatcamEditors/FlatCAMGeoEditor.py:1281 flatcamTools/ToolNCC.py:1493 -#: flatcamTools/ToolPaint.py:1244 flatcamTools/ToolPaint.py:1415 -#: flatcamTools/ToolSolderPaste.py:883 flatcamTools/ToolSolderPaste.py:956 -msgid "Wrong value format entered, use a number." -msgstr "Wrong value format entered, use a number." - -#: FlatCAMObj.py:4781 -msgid "Tool added in Tool Table." -msgstr "Tool added in Tool Table." - -#: FlatCAMObj.py:4890 FlatCAMObj.py:4899 -msgid "Failed. Select a tool to copy." -msgstr "Failed. Select a tool to copy." - -#: FlatCAMObj.py:4928 -msgid "Tool was copied in Tool Table." -msgstr "Tool was copied in Tool Table." - -#: FlatCAMObj.py:4955 -msgid "Tool was edited in Tool Table." -msgstr "Tool was edited in Tool Table." - -#: FlatCAMObj.py:4984 FlatCAMObj.py:4993 -msgid "Failed. Select a tool to delete." -msgstr "Failed. Select a tool to delete." - -#: FlatCAMObj.py:5017 -msgid "Tool was deleted in Tool Table." -msgstr "Tool was deleted in Tool Table." - -#: FlatCAMObj.py:5523 -msgid "This Geometry can't be processed because it is" -msgstr "This Geometry can't be processed because it is" - -#: FlatCAMObj.py:5523 -msgid "geometry" -msgstr "geometry" - -#: FlatCAMObj.py:5564 -msgid "Failed. No tool selected in the tool table ..." -msgstr "Failed. No tool selected in the tool table ..." - -#: FlatCAMObj.py:5667 FlatCAMObj.py:5820 -msgid "" -"Tool Offset is selected in Tool Table but no value is provided.\n" -"Add a Tool Offset or change the Offset Type." -msgstr "" -"Tool Offset is selected in Tool Table but no value is provided.\n" -"Add a Tool Offset or change the Offset Type." - -#: FlatCAMObj.py:5733 FlatCAMObj.py:5882 -msgid "G-Code parsing in progress..." -msgstr "G-Code parsing in progress..." - -#: FlatCAMObj.py:5735 FlatCAMObj.py:5884 -msgid "G-Code parsing finished..." -msgstr "G-Code parsing finished..." - -#: FlatCAMObj.py:5743 -msgid "Finished G-Code processing" -msgstr "Finished G-Code processing" - -#: FlatCAMObj.py:5745 FlatCAMObj.py:5896 -msgid "G-Code processing failed with error" -msgstr "G-Code processing failed with error" - -#: FlatCAMObj.py:5790 flatcamTools/ToolSolderPaste.py:1300 -msgid "Cancelled. Empty file, it has no geometry" -msgstr "Cancelled. Empty file, it has no geometry" - -#: FlatCAMObj.py:5894 FlatCAMObj.py:6055 -msgid "Finished G-Code processing..." -msgstr "Finished G-Code processing..." - -#: FlatCAMObj.py:5913 FlatCAMObj.py:5917 FlatCAMObj.py:6062 -msgid "CNCjob created" -msgstr "CNCjob created" - -#: FlatCAMObj.py:6092 FlatCAMObj.py:6101 flatcamParsers/ParseGerber.py:1866 -#: flatcamParsers/ParseGerber.py:1876 -msgid "Scale factor has to be a number: integer or float." -msgstr "Scale factor has to be a number: integer or float." - -#: FlatCAMObj.py:6164 -msgid "Geometry Scale done." -msgstr "Geometry Scale done." - -#: FlatCAMObj.py:6181 flatcamParsers/ParseGerber.py:1992 -msgid "" -"An (x,y) pair of values are needed. Probable you entered only one value in " -"the Offset field." -msgstr "" -"An (x,y) pair of values are needed. Probable you entered only one value in " -"the Offset field." - -#: FlatCAMObj.py:6237 -msgid "Geometry Offset done." -msgstr "Geometry Offset done." - -#: FlatCAMObj.py:6266 -msgid "" -"The Toolchange X,Y field in Edit -> Preferences has to be in the format (x, " -"y)\n" -"but now there is only one value, not two." -msgstr "" -"The Toolchange X,Y field in Edit -> Preferences has to be in the format (x, " -"y)\n" -"but now there is only one value, not two." - -#: FlatCAMObj.py:6956 FlatCAMObj.py:7802 FlatCAMObj.py:7999 -msgid "Basic" -msgstr "Basic" - -#: FlatCAMObj.py:6962 FlatCAMObj.py:7806 FlatCAMObj.py:8003 -msgid "Advanced" -msgstr "Advanced" - -#: FlatCAMObj.py:7005 -msgid "Plotting..." -msgstr "Plotting..." - -#: FlatCAMObj.py:7034 FlatCAMObj.py:7039 flatcamTools/ToolSolderPaste.py:1498 -msgid "Export Machine Code ..." -msgstr "Export Machine Code ..." - -#: FlatCAMObj.py:7044 flatcamTools/ToolSolderPaste.py:1502 -msgid "Export Machine Code cancelled ..." -msgstr "Export Machine Code cancelled ..." - -#: FlatCAMObj.py:7065 -msgid "Machine Code file saved to" -msgstr "Machine Code file saved to" - -#: FlatCAMObj.py:7126 flatcamTools/ToolCalibration.py:1097 -msgid "Loaded Machine Code into Code Editor" -msgstr "Loaded Machine Code into Code Editor" - -#: FlatCAMObj.py:7265 -msgid "This CNCJob object can't be processed because it is a" -msgstr "This CNCJob object can't be processed because it is a" - -#: FlatCAMObj.py:7267 -msgid "CNCJob object" -msgstr "CNCJob object" - -#: FlatCAMObj.py:7447 -msgid "" -"G-code does not have a G94 code and we will not include the code in the " -"'Prepend to GCode' text box" -msgstr "" -"G-code does not have a G94 code and we will not include the code in the " -"'Prepend to GCode' text box" - -#: FlatCAMObj.py:7458 -msgid "Cancelled. The Toolchange Custom code is enabled but it's empty." -msgstr "Cancelled. The Toolchange Custom code is enabled but it's empty." - -#: FlatCAMObj.py:7463 -msgid "Toolchange G-code was replaced by a custom code." -msgstr "Toolchange G-code was replaced by a custom code." - -#: FlatCAMObj.py:7480 flatcamEditors/FlatCAMTextEditor.py:272 -#: flatcamTools/ToolSolderPaste.py:1529 -msgid "No such file or directory" -msgstr "No such file or directory" - -#: FlatCAMObj.py:7494 flatcamEditors/FlatCAMTextEditor.py:284 -msgid "Saved to" -msgstr "Saved to" - -#: FlatCAMObj.py:7511 FlatCAMObj.py:7521 -msgid "" -"The used preprocessor file has to have in it's name: 'toolchange_custom'" -msgstr "" -"The used preprocessor file has to have in it's name: 'toolchange_custom'" - -#: FlatCAMObj.py:7524 -msgid "There is no preprocessor file." -msgstr "There is no preprocessor file." - -#: FlatCAMObj.py:7821 -msgid "Script Editor" -msgstr "Script Editor" - -#: FlatCAMObj.py:8103 -msgid "Document Editor" -msgstr "Document Editor" - #: FlatCAMProcess.py:172 msgid "processes running." msgstr "processes running." @@ -3098,28 +2618,39 @@ msgstr "Are you sure do you want to change the current language to" msgid "Apply Language ..." msgstr "Apply Language ..." -#: ObjectCollection.py:506 +#: ObjectCollection.py:511 #, python-brace-format msgid "Object renamed from {old} to {new}" msgstr "Object renamed from {old} to {new}" -#: ObjectCollection.py:972 +#: ObjectCollection.py:984 msgid "Cause of error" msgstr "Cause of error" -#: camlib.py:593 +#: camlib.py:597 msgid "self.solid_geometry is neither BaseGeometry or list." msgstr "self.solid_geometry is neither BaseGeometry or list." -#: camlib.py:968 +#: camlib.py:970 msgid "Pass" msgstr "Pass" -#: camlib.py:988 +#: camlib.py:981 flatcamGUI/PreferencesUI.py:2476 +#: flatcamObjects/FlatCAMGerber.py:496 flatcamTools/ToolCopperThieving.py:1016 +#: flatcamTools/ToolCopperThieving.py:1205 +#: flatcamTools/ToolCopperThieving.py:1217 flatcamTools/ToolNCC.py:2045 +#: flatcamTools/ToolNCC.py:2153 flatcamTools/ToolNCC.py:2167 +#: flatcamTools/ToolNCC.py:3098 flatcamTools/ToolNCC.py:3203 +#: flatcamTools/ToolNCC.py:3218 flatcamTools/ToolNCC.py:3484 +#: flatcamTools/ToolNCC.py:3585 flatcamTools/ToolNCC.py:3600 +msgid "Buffering" +msgstr "Buffering" + +#: camlib.py:990 msgid "Get Exteriors" msgstr "Get Exteriors" -#: camlib.py:991 +#: camlib.py:993 msgid "Get Interiors" msgstr "Get Interiors" @@ -3127,39 +2658,39 @@ msgstr "Get Interiors" msgid "Object was mirrored" msgstr "Object was mirrored" -#: camlib.py:2175 +#: camlib.py:2174 msgid "Failed to mirror. No object selected" msgstr "Failed to mirror. No object selected" -#: camlib.py:2244 +#: camlib.py:2239 msgid "Object was rotated" msgstr "Object was rotated" -#: camlib.py:2247 +#: camlib.py:2241 msgid "Failed to rotate. No object selected" msgstr "Failed to rotate. No object selected" -#: camlib.py:2314 +#: camlib.py:2307 msgid "Object was skewed" msgstr "Object was skewed" -#: camlib.py:2317 +#: camlib.py:2309 msgid "Failed to skew. No object selected" msgstr "Failed to skew. No object selected" -#: camlib.py:2392 +#: camlib.py:2385 msgid "Object was buffered" msgstr "Object was buffered" -#: camlib.py:2394 +#: camlib.py:2387 msgid "Failed to buffer. No object selected" msgstr "Failed to buffer. No object selected" -#: camlib.py:2599 +#: camlib.py:2594 msgid "There is no such parameter" msgstr "There is no such parameter" -#: camlib.py:2659 camlib.py:2892 camlib.py:3121 camlib.py:3343 +#: camlib.py:2654 camlib.py:2887 camlib.py:3116 camlib.py:3338 msgid "" "The Cut Z parameter has positive value. It is the depth value to drill into " "material.\n" @@ -3173,12 +2704,12 @@ msgstr "" "therefore the app will convert the value to negative. Check the resulting " "CNC code (Gcode etc)." -#: camlib.py:2667 camlib.py:2902 camlib.py:3131 camlib.py:3353 camlib.py:3639 -#: camlib.py:4008 +#: camlib.py:2662 camlib.py:2897 camlib.py:3126 camlib.py:3348 camlib.py:3634 +#: camlib.py:4020 msgid "The Cut Z parameter is zero. There will be no cut, skipping file" msgstr "The Cut Z parameter is zero. There will be no cut, skipping file" -#: camlib.py:2678 camlib.py:3976 +#: camlib.py:2673 camlib.py:3988 msgid "" "The Toolchange X,Y field in Edit -> Preferences has to be in the format (x, " "y) \n" @@ -3188,7 +2719,7 @@ msgstr "" "y) \n" "but now there is only one value, not two. " -#: camlib.py:2687 camlib.py:3590 camlib.py:3958 +#: camlib.py:2682 camlib.py:3585 camlib.py:3970 msgid "" "The End Move X,Y field in Edit -> Preferences has to be in the format (x, y) " "but now there is only one value, not two." @@ -3196,31 +2727,31 @@ msgstr "" "The End Move X,Y field in Edit -> Preferences has to be in the format (x, y) " "but now there is only one value, not two." -#: camlib.py:2775 +#: camlib.py:2770 msgid "Creating a list of points to drill..." msgstr "Creating a list of points to drill..." -#: camlib.py:2865 camlib.py:3737 camlib.py:4112 +#: camlib.py:2860 camlib.py:3732 camlib.py:4124 msgid "Starting G-Code" msgstr "Starting G-Code" -#: camlib.py:3006 camlib.py:3225 camlib.py:3389 camlib.py:3750 camlib.py:4123 +#: camlib.py:3001 camlib.py:3220 camlib.py:3384 camlib.py:3745 camlib.py:4135 msgid "Starting G-Code for tool with diameter" msgstr "Starting G-Code for tool with diameter" -#: camlib.py:3089 camlib.py:3307 camlib.py:3475 +#: camlib.py:3084 camlib.py:3302 camlib.py:3470 msgid "G91 coordinates not implemented" msgstr "G91 coordinates not implemented" -#: camlib.py:3095 camlib.py:3314 camlib.py:3481 +#: camlib.py:3090 camlib.py:3309 camlib.py:3476 msgid "The loaded Excellon file has no drills" msgstr "The loaded Excellon file has no drills" -#: camlib.py:3504 +#: camlib.py:3499 msgid "Finished G-Code generation..." msgstr "Finished G-Code generation..." -#: camlib.py:3608 +#: camlib.py:3603 msgid "" "The Toolchange X,Y field in Edit -> Preferences has to be in the format (x, " "y) \n" @@ -3230,7 +2761,7 @@ msgstr "" "y) \n" "but now there is only one value, not two." -#: camlib.py:3622 camlib.py:3991 +#: camlib.py:3617 camlib.py:4003 msgid "" "Cut_Z parameter is None or zero. Most likely a bad combinations of other " "parameters." @@ -3238,7 +2769,7 @@ msgstr "" "Cut_Z parameter is None or zero. Most likely a bad combinations of other " "parameters." -#: camlib.py:3631 camlib.py:4000 +#: camlib.py:3626 camlib.py:4012 msgid "" "The Cut Z parameter has positive value. It is the depth value to cut into " "material.\n" @@ -3252,11 +2783,11 @@ msgstr "" "therefore the app will convert the value to negative.Check the resulting CNC " "code (Gcode etc)." -#: camlib.py:3644 camlib.py:4014 +#: camlib.py:3639 camlib.py:4026 msgid "Travel Z parameter is None or zero." msgstr "Travel Z parameter is None or zero." -#: camlib.py:3649 camlib.py:4019 +#: camlib.py:3644 camlib.py:4031 msgid "" "The Travel Z parameter has negative value. It is the height value to travel " "between cuts.\n" @@ -3270,33 +2801,33 @@ msgstr "" "therefore the app will convert the value to positive.Check the resulting CNC " "code (Gcode etc)." -#: camlib.py:3657 camlib.py:4027 +#: camlib.py:3652 camlib.py:4039 msgid "The Z Travel parameter is zero. This is dangerous, skipping file" msgstr "The Z Travel parameter is zero. This is dangerous, skipping file" -#: camlib.py:3676 camlib.py:4050 +#: camlib.py:3671 camlib.py:4062 msgid "Indexing geometry before generating G-Code..." msgstr "Indexing geometry before generating G-Code..." -#: camlib.py:3820 camlib.py:4192 +#: camlib.py:3815 camlib.py:4204 msgid "Finished G-Code generation" msgstr "Finished G-Code generation" -#: camlib.py:3820 +#: camlib.py:3815 msgid "paths traced" msgstr "paths traced" -#: camlib.py:3853 +#: camlib.py:3865 msgid "Expected a Geometry, got" msgstr "Expected a Geometry, got" -#: camlib.py:3860 +#: camlib.py:3872 msgid "" "Trying to generate a CNC Job from a Geometry object without solid_geometry." msgstr "" "Trying to generate a CNC Job from a Geometry object without solid_geometry." -#: camlib.py:3901 +#: camlib.py:3913 msgid "" "The Tool Offset value is too negative to use for the current_geometry.\n" "Raise the value (in module) and try again." @@ -3304,173 +2835,174 @@ msgstr "" "The Tool Offset value is too negative to use for the current_geometry.\n" "Raise the value (in module) and try again." -#: camlib.py:4192 +#: camlib.py:4204 msgid " paths traced." msgstr " paths traced." -#: camlib.py:4220 +#: camlib.py:4232 msgid "There is no tool data in the SolderPaste geometry." msgstr "There is no tool data in the SolderPaste geometry." -#: camlib.py:4306 -msgid "Finished SolderPste G-Code generation" -msgstr "Finished SolderPste G-Code generation" +#: camlib.py:4321 +#| msgid "Finished SolderPste G-Code generation" +msgid "Finished SolderPaste G-Code generation" +msgstr "Finished SolderPaste G-Code generation" -#: camlib.py:4306 +#: camlib.py:4321 msgid "paths traced." msgstr "paths traced." -#: camlib.py:4566 +#: camlib.py:4581 msgid "Parsing GCode file. Number of lines" msgstr "Parsing GCode file. Number of lines" -#: camlib.py:4673 +#: camlib.py:4688 msgid "Creating Geometry from the parsed GCode file. " msgstr "Creating Geometry from the parsed GCode file. " -#: camlib.py:4816 camlib.py:5101 camlib.py:5204 camlib.py:5360 +#: camlib.py:4831 camlib.py:5123 camlib.py:5234 camlib.py:5390 msgid "G91 coordinates not implemented ..." msgstr "G91 coordinates not implemented ..." -#: camlib.py:4948 +#: camlib.py:4963 msgid "Unifying Geometry from parsed Geometry segments" msgstr "Unifying Geometry from parsed Geometry segments" -#: flatcamEditors/FlatCAMExcEditor.py:51 flatcamEditors/FlatCAMExcEditor.py:75 -#: flatcamEditors/FlatCAMExcEditor.py:169 -#: flatcamEditors/FlatCAMExcEditor.py:386 -#: flatcamEditors/FlatCAMExcEditor.py:590 +#: flatcamEditors/FlatCAMExcEditor.py:50 flatcamEditors/FlatCAMExcEditor.py:74 +#: flatcamEditors/FlatCAMExcEditor.py:168 +#: flatcamEditors/FlatCAMExcEditor.py:385 +#: flatcamEditors/FlatCAMExcEditor.py:589 #: flatcamEditors/FlatCAMGrbEditor.py:241 #: flatcamEditors/FlatCAMGrbEditor.py:248 msgid "Click to place ..." msgstr "Click to place ..." -#: flatcamEditors/FlatCAMExcEditor.py:59 +#: flatcamEditors/FlatCAMExcEditor.py:58 msgid "To add a drill first select a tool" msgstr "To add a drill first select a tool" -#: flatcamEditors/FlatCAMExcEditor.py:123 +#: flatcamEditors/FlatCAMExcEditor.py:122 msgid "Done. Drill added." msgstr "Done. Drill added." -#: flatcamEditors/FlatCAMExcEditor.py:177 +#: flatcamEditors/FlatCAMExcEditor.py:176 msgid "To add an Drill Array first select a tool in Tool Table" msgstr "To add an Drill Array first select a tool in Tool Table" -#: flatcamEditors/FlatCAMExcEditor.py:193 -#: flatcamEditors/FlatCAMExcEditor.py:416 -#: flatcamEditors/FlatCAMExcEditor.py:637 -#: flatcamEditors/FlatCAMExcEditor.py:1152 -#: flatcamEditors/FlatCAMExcEditor.py:1179 +#: flatcamEditors/FlatCAMExcEditor.py:192 +#: flatcamEditors/FlatCAMExcEditor.py:415 +#: flatcamEditors/FlatCAMExcEditor.py:636 +#: flatcamEditors/FlatCAMExcEditor.py:1151 +#: flatcamEditors/FlatCAMExcEditor.py:1178 #: flatcamEditors/FlatCAMGrbEditor.py:471 #: flatcamEditors/FlatCAMGrbEditor.py:1935 #: flatcamEditors/FlatCAMGrbEditor.py:1965 msgid "Click on target location ..." msgstr "Click on target location ..." -#: flatcamEditors/FlatCAMExcEditor.py:212 +#: flatcamEditors/FlatCAMExcEditor.py:211 msgid "Click on the Drill Circular Array Start position" msgstr "Click on the Drill Circular Array Start position" -#: flatcamEditors/FlatCAMExcEditor.py:234 -#: flatcamEditors/FlatCAMExcEditor.py:678 +#: flatcamEditors/FlatCAMExcEditor.py:233 +#: flatcamEditors/FlatCAMExcEditor.py:677 #: flatcamEditors/FlatCAMGrbEditor.py:516 msgid "The value is not Float. Check for comma instead of dot separator." msgstr "The value is not Float. Check for comma instead of dot separator." -#: flatcamEditors/FlatCAMExcEditor.py:238 +#: flatcamEditors/FlatCAMExcEditor.py:237 msgid "The value is mistyped. Check the value" msgstr "The value is mistyped. Check the value" -#: flatcamEditors/FlatCAMExcEditor.py:337 +#: flatcamEditors/FlatCAMExcEditor.py:336 msgid "Too many drills for the selected spacing angle." msgstr "Too many drills for the selected spacing angle." -#: flatcamEditors/FlatCAMExcEditor.py:355 +#: flatcamEditors/FlatCAMExcEditor.py:354 msgid "Done. Drill Array added." msgstr "Done. Drill Array added." -#: flatcamEditors/FlatCAMExcEditor.py:395 +#: flatcamEditors/FlatCAMExcEditor.py:394 msgid "To add a slot first select a tool" msgstr "To add a slot first select a tool" -#: flatcamEditors/FlatCAMExcEditor.py:455 -#: flatcamEditors/FlatCAMExcEditor.py:462 -#: flatcamEditors/FlatCAMExcEditor.py:743 -#: flatcamEditors/FlatCAMExcEditor.py:750 +#: flatcamEditors/FlatCAMExcEditor.py:454 +#: flatcamEditors/FlatCAMExcEditor.py:461 +#: flatcamEditors/FlatCAMExcEditor.py:742 +#: flatcamEditors/FlatCAMExcEditor.py:749 msgid "Value is missing or wrong format. Add it and retry." msgstr "Value is missing or wrong format. Add it and retry." -#: flatcamEditors/FlatCAMExcEditor.py:560 +#: flatcamEditors/FlatCAMExcEditor.py:559 msgid "Done. Adding Slot completed." msgstr "Done. Adding Slot completed." -#: flatcamEditors/FlatCAMExcEditor.py:598 +#: flatcamEditors/FlatCAMExcEditor.py:597 msgid "To add an Slot Array first select a tool in Tool Table" msgstr "To add an Slot Array first select a tool in Tool Table" -#: flatcamEditors/FlatCAMExcEditor.py:656 +#: flatcamEditors/FlatCAMExcEditor.py:655 msgid "Click on the Slot Circular Array Start position" msgstr "Click on the Slot Circular Array Start position" -#: flatcamEditors/FlatCAMExcEditor.py:681 +#: flatcamEditors/FlatCAMExcEditor.py:680 #: flatcamEditors/FlatCAMGrbEditor.py:519 msgid "The value is mistyped. Check the value." msgstr "The value is mistyped. Check the value." -#: flatcamEditors/FlatCAMExcEditor.py:860 +#: flatcamEditors/FlatCAMExcEditor.py:859 msgid "Too many Slots for the selected spacing angle." msgstr "Too many Slots for the selected spacing angle." -#: flatcamEditors/FlatCAMExcEditor.py:883 +#: flatcamEditors/FlatCAMExcEditor.py:882 msgid "Done. Slot Array added." msgstr "Done. Slot Array added." -#: flatcamEditors/FlatCAMExcEditor.py:905 +#: flatcamEditors/FlatCAMExcEditor.py:904 msgid "Click on the Drill(s) to resize ..." msgstr "Click on the Drill(s) to resize ..." -#: flatcamEditors/FlatCAMExcEditor.py:935 +#: flatcamEditors/FlatCAMExcEditor.py:934 msgid "Resize drill(s) failed. Please enter a diameter for resize." msgstr "Resize drill(s) failed. Please enter a diameter for resize." -#: flatcamEditors/FlatCAMExcEditor.py:1113 +#: flatcamEditors/FlatCAMExcEditor.py:1112 msgid "Done. Drill/Slot Resize completed." msgstr "Done. Drill/Slot Resize completed." -#: flatcamEditors/FlatCAMExcEditor.py:1116 +#: flatcamEditors/FlatCAMExcEditor.py:1115 msgid "Cancelled. No drills/slots selected for resize ..." msgstr "Cancelled. No drills/slots selected for resize ..." -#: flatcamEditors/FlatCAMExcEditor.py:1154 +#: flatcamEditors/FlatCAMExcEditor.py:1153 #: flatcamEditors/FlatCAMGrbEditor.py:1937 msgid "Click on reference location ..." msgstr "Click on reference location ..." -#: flatcamEditors/FlatCAMExcEditor.py:1211 +#: flatcamEditors/FlatCAMExcEditor.py:1210 msgid "Done. Drill(s) Move completed." msgstr "Done. Drill(s) Move completed." -#: flatcamEditors/FlatCAMExcEditor.py:1319 +#: flatcamEditors/FlatCAMExcEditor.py:1318 msgid "Done. Drill(s) copied." msgstr "Done. Drill(s) copied." -#: flatcamEditors/FlatCAMExcEditor.py:1558 flatcamGUI/PreferencesUI.py:3829 +#: flatcamEditors/FlatCAMExcEditor.py:1557 flatcamGUI/PreferencesUI.py:3829 msgid "Excellon Editor" msgstr "Excellon Editor" -#: flatcamEditors/FlatCAMExcEditor.py:1565 +#: flatcamEditors/FlatCAMExcEditor.py:1564 #: flatcamEditors/FlatCAMGrbEditor.py:2460 msgid "Name:" msgstr "Name:" -#: flatcamEditors/FlatCAMExcEditor.py:1571 flatcamGUI/ObjectUI.py:760 -#: flatcamGUI/ObjectUI.py:1463 flatcamTools/ToolNCC.py:120 -#: flatcamTools/ToolPaint.py:115 flatcamTools/ToolSolderPaste.py:75 +#: flatcamEditors/FlatCAMExcEditor.py:1570 flatcamGUI/ObjectUI.py:760 +#: flatcamGUI/ObjectUI.py:1464 flatcamTools/ToolNCC.py:120 +#: flatcamTools/ToolPaint.py:115 flatcamTools/ToolSolderPaste.py:74 msgid "Tools Table" msgstr "Tools Table" -#: flatcamEditors/FlatCAMExcEditor.py:1573 flatcamGUI/ObjectUI.py:762 +#: flatcamEditors/FlatCAMExcEditor.py:1572 flatcamGUI/ObjectUI.py:762 msgid "" "Tools in this Excellon object\n" "when are used for drilling." @@ -3478,11 +3010,22 @@ msgstr "" "Tools in this Excellon object\n" "when are used for drilling." -#: flatcamEditors/FlatCAMExcEditor.py:1593 +#: flatcamEditors/FlatCAMExcEditor.py:1584 +#: flatcamEditors/FlatCAMExcEditor.py:3066 flatcamGUI/ObjectUI.py:780 +#: flatcamObjects/FlatCAMExcellon.py:1098 +#: flatcamObjects/FlatCAMExcellon.py:1188 +#: flatcamObjects/FlatCAMExcellon.py:1373 flatcamTools/ToolNCC.py:132 +#: flatcamTools/ToolPaint.py:128 flatcamTools/ToolPcbWizard.py:76 +#: flatcamTools/ToolProperties.py:416 flatcamTools/ToolProperties.py:476 +#: flatcamTools/ToolSolderPaste.py:85 tclCommands/TclCommandDrillcncjob.py:193 +msgid "Diameter" +msgstr "Diameter" + +#: flatcamEditors/FlatCAMExcEditor.py:1592 msgid "Add/Delete Tool" msgstr "Add/Delete Tool" -#: flatcamEditors/FlatCAMExcEditor.py:1595 +#: flatcamEditors/FlatCAMExcEditor.py:1594 msgid "" "Add/Delete a tool to the tool list\n" "for this Excellon object." @@ -3490,16 +3033,16 @@ msgstr "" "Add/Delete a tool to the tool list\n" "for this Excellon object." -#: flatcamEditors/FlatCAMExcEditor.py:1607 flatcamGUI/ObjectUI.py:1583 +#: flatcamEditors/FlatCAMExcEditor.py:1606 flatcamGUI/ObjectUI.py:1584 #: flatcamGUI/PreferencesUI.py:3860 msgid "Diameter for the new tool" msgstr "Diameter for the new tool" -#: flatcamEditors/FlatCAMExcEditor.py:1617 +#: flatcamEditors/FlatCAMExcEditor.py:1616 msgid "Add Tool" msgstr "Add Tool" -#: flatcamEditors/FlatCAMExcEditor.py:1619 +#: flatcamEditors/FlatCAMExcEditor.py:1618 msgid "" "Add a new tool to the tool list\n" "with the diameter specified above." @@ -3507,11 +3050,11 @@ msgstr "" "Add a new tool to the tool list\n" "with the diameter specified above." -#: flatcamEditors/FlatCAMExcEditor.py:1631 +#: flatcamEditors/FlatCAMExcEditor.py:1630 msgid "Delete Tool" msgstr "Delete Tool" -#: flatcamEditors/FlatCAMExcEditor.py:1633 +#: flatcamEditors/FlatCAMExcEditor.py:1632 msgid "" "Delete a tool in the tool list\n" "by selecting a row in the tool table." @@ -3519,40 +3062,40 @@ msgstr "" "Delete a tool in the tool list\n" "by selecting a row in the tool table." -#: flatcamEditors/FlatCAMExcEditor.py:1651 flatcamGUI/FlatCAMGUI.py:2004 +#: flatcamEditors/FlatCAMExcEditor.py:1650 flatcamGUI/FlatCAMGUI.py:2004 msgid "Resize Drill(s)" msgstr "Resize Drill(s)" -#: flatcamEditors/FlatCAMExcEditor.py:1653 +#: flatcamEditors/FlatCAMExcEditor.py:1652 msgid "Resize a drill or a selection of drills." msgstr "Resize a drill or a selection of drills." -#: flatcamEditors/FlatCAMExcEditor.py:1660 +#: flatcamEditors/FlatCAMExcEditor.py:1659 msgid "Resize Dia" msgstr "Resize Dia" -#: flatcamEditors/FlatCAMExcEditor.py:1662 +#: flatcamEditors/FlatCAMExcEditor.py:1661 msgid "Diameter to resize to." msgstr "Diameter to resize to." -#: flatcamEditors/FlatCAMExcEditor.py:1673 +#: flatcamEditors/FlatCAMExcEditor.py:1672 msgid "Resize" msgstr "Resize" -#: flatcamEditors/FlatCAMExcEditor.py:1675 +#: flatcamEditors/FlatCAMExcEditor.py:1674 msgid "Resize drill(s)" msgstr "Resize drill(s)" -#: flatcamEditors/FlatCAMExcEditor.py:1700 flatcamGUI/FlatCAMGUI.py:2003 +#: flatcamEditors/FlatCAMExcEditor.py:1699 flatcamGUI/FlatCAMGUI.py:2003 #: flatcamGUI/FlatCAMGUI.py:2255 msgid "Add Drill Array" msgstr "Add Drill Array" -#: flatcamEditors/FlatCAMExcEditor.py:1702 +#: flatcamEditors/FlatCAMExcEditor.py:1701 msgid "Add an array of drills (linear or circular array)" msgstr "Add an array of drills (linear or circular array)" -#: flatcamEditors/FlatCAMExcEditor.py:1708 +#: flatcamEditors/FlatCAMExcEditor.py:1707 msgid "" "Select the type of drills array to create.\n" "It can be Linear X(Y) or Circular" @@ -3560,14 +3103,14 @@ msgstr "" "Select the type of drills array to create.\n" "It can be Linear X(Y) or Circular" -#: flatcamEditors/FlatCAMExcEditor.py:1711 -#: flatcamEditors/FlatCAMExcEditor.py:1925 +#: flatcamEditors/FlatCAMExcEditor.py:1710 +#: flatcamEditors/FlatCAMExcEditor.py:1924 #: flatcamEditors/FlatCAMGrbEditor.py:2772 msgid "Linear" msgstr "Linear" -#: flatcamEditors/FlatCAMExcEditor.py:1712 -#: flatcamEditors/FlatCAMExcEditor.py:1926 +#: flatcamEditors/FlatCAMExcEditor.py:1711 +#: flatcamEditors/FlatCAMExcEditor.py:1925 #: flatcamEditors/FlatCAMGrbEditor.py:2773 flatcamGUI/ObjectUI.py:315 #: flatcamGUI/PreferencesUI.py:5340 flatcamGUI/PreferencesUI.py:5909 #: flatcamGUI/PreferencesUI.py:7971 flatcamGUI/PreferencesUI.py:8151 @@ -3579,27 +3122,27 @@ msgstr "Linear" msgid "Circular" msgstr "Circular" -#: flatcamEditors/FlatCAMExcEditor.py:1720 flatcamGUI/PreferencesUI.py:3871 +#: flatcamEditors/FlatCAMExcEditor.py:1719 flatcamGUI/PreferencesUI.py:3871 msgid "Nr of drills" msgstr "Nr of drills" -#: flatcamEditors/FlatCAMExcEditor.py:1721 flatcamGUI/PreferencesUI.py:3873 +#: flatcamEditors/FlatCAMExcEditor.py:1720 flatcamGUI/PreferencesUI.py:3873 msgid "Specify how many drills to be in the array." msgstr "Specify how many drills to be in the array." -#: flatcamEditors/FlatCAMExcEditor.py:1739 -#: flatcamEditors/FlatCAMExcEditor.py:1789 -#: flatcamEditors/FlatCAMExcEditor.py:1861 -#: flatcamEditors/FlatCAMExcEditor.py:1954 -#: flatcamEditors/FlatCAMExcEditor.py:2005 +#: flatcamEditors/FlatCAMExcEditor.py:1738 +#: flatcamEditors/FlatCAMExcEditor.py:1788 +#: flatcamEditors/FlatCAMExcEditor.py:1860 +#: flatcamEditors/FlatCAMExcEditor.py:1953 +#: flatcamEditors/FlatCAMExcEditor.py:2004 #: flatcamEditors/FlatCAMGrbEditor.py:1571 #: flatcamEditors/FlatCAMGrbEditor.py:2801 #: flatcamEditors/FlatCAMGrbEditor.py:2850 flatcamGUI/PreferencesUI.py:3981 msgid "Direction" msgstr "Direction" -#: flatcamEditors/FlatCAMExcEditor.py:1741 -#: flatcamEditors/FlatCAMExcEditor.py:1956 +#: flatcamEditors/FlatCAMExcEditor.py:1740 +#: flatcamEditors/FlatCAMExcEditor.py:1955 #: flatcamEditors/FlatCAMGrbEditor.py:2803 flatcamGUI/PreferencesUI.py:2718 #: flatcamGUI/PreferencesUI.py:3889 flatcamGUI/PreferencesUI.py:4037 msgid "" @@ -3613,9 +3156,9 @@ msgstr "" "- 'Y' - vertical axis or \n" "- 'Angle' - a custom angle for the array inclination" -#: flatcamEditors/FlatCAMExcEditor.py:1748 -#: flatcamEditors/FlatCAMExcEditor.py:1870 -#: flatcamEditors/FlatCAMExcEditor.py:1963 +#: flatcamEditors/FlatCAMExcEditor.py:1747 +#: flatcamEditors/FlatCAMExcEditor.py:1869 +#: flatcamEditors/FlatCAMExcEditor.py:1962 #: flatcamEditors/FlatCAMGrbEditor.py:2810 flatcamGUI/PreferencesUI.py:2724 #: flatcamGUI/PreferencesUI.py:3895 flatcamGUI/PreferencesUI.py:3990 #: flatcamGUI/PreferencesUI.py:4043 flatcamGUI/PreferencesUI.py:6341 @@ -3623,9 +3166,9 @@ msgstr "" msgid "X" msgstr "X" -#: flatcamEditors/FlatCAMExcEditor.py:1749 -#: flatcamEditors/FlatCAMExcEditor.py:1871 -#: flatcamEditors/FlatCAMExcEditor.py:1964 +#: flatcamEditors/FlatCAMExcEditor.py:1748 +#: flatcamEditors/FlatCAMExcEditor.py:1870 +#: flatcamEditors/FlatCAMExcEditor.py:1963 #: flatcamEditors/FlatCAMGrbEditor.py:2811 flatcamGUI/PreferencesUI.py:2725 #: flatcamGUI/PreferencesUI.py:3896 flatcamGUI/PreferencesUI.py:3991 #: flatcamGUI/PreferencesUI.py:4044 flatcamGUI/PreferencesUI.py:6342 @@ -3633,14 +3176,14 @@ msgstr "X" msgid "Y" msgstr "Y" -#: flatcamEditors/FlatCAMExcEditor.py:1750 -#: flatcamEditors/FlatCAMExcEditor.py:1767 -#: flatcamEditors/FlatCAMExcEditor.py:1801 -#: flatcamEditors/FlatCAMExcEditor.py:1872 -#: flatcamEditors/FlatCAMExcEditor.py:1876 -#: flatcamEditors/FlatCAMExcEditor.py:1965 -#: flatcamEditors/FlatCAMExcEditor.py:1983 -#: flatcamEditors/FlatCAMExcEditor.py:2017 +#: flatcamEditors/FlatCAMExcEditor.py:1749 +#: flatcamEditors/FlatCAMExcEditor.py:1766 +#: flatcamEditors/FlatCAMExcEditor.py:1800 +#: flatcamEditors/FlatCAMExcEditor.py:1871 +#: flatcamEditors/FlatCAMExcEditor.py:1875 +#: flatcamEditors/FlatCAMExcEditor.py:1964 +#: flatcamEditors/FlatCAMExcEditor.py:1982 +#: flatcamEditors/FlatCAMExcEditor.py:2016 #: flatcamEditors/FlatCAMGrbEditor.py:2812 #: flatcamEditors/FlatCAMGrbEditor.py:2829 #: flatcamEditors/FlatCAMGrbEditor.py:2865 flatcamGUI/PreferencesUI.py:2726 @@ -3649,26 +3192,26 @@ msgstr "Y" #: flatcamGUI/PreferencesUI.py:3997 flatcamGUI/PreferencesUI.py:4045 #: flatcamGUI/PreferencesUI.py:4066 flatcamGUI/PreferencesUI.py:6733 #: flatcamTools/ToolDistance.py:120 flatcamTools/ToolDistanceMin.py:69 -#: flatcamTools/ToolTransform.py:61 +#: flatcamTools/ToolTransform.py:60 msgid "Angle" msgstr "Angle" -#: flatcamEditors/FlatCAMExcEditor.py:1754 -#: flatcamEditors/FlatCAMExcEditor.py:1969 +#: flatcamEditors/FlatCAMExcEditor.py:1753 +#: flatcamEditors/FlatCAMExcEditor.py:1968 #: flatcamEditors/FlatCAMGrbEditor.py:2816 flatcamGUI/PreferencesUI.py:2732 #: flatcamGUI/PreferencesUI.py:3903 flatcamGUI/PreferencesUI.py:4051 msgid "Pitch" msgstr "Pitch" -#: flatcamEditors/FlatCAMExcEditor.py:1756 -#: flatcamEditors/FlatCAMExcEditor.py:1971 +#: flatcamEditors/FlatCAMExcEditor.py:1755 +#: flatcamEditors/FlatCAMExcEditor.py:1970 #: flatcamEditors/FlatCAMGrbEditor.py:2818 flatcamGUI/PreferencesUI.py:2734 #: flatcamGUI/PreferencesUI.py:3905 flatcamGUI/PreferencesUI.py:4053 msgid "Pitch = Distance between elements of the array." msgstr "Pitch = Distance between elements of the array." -#: flatcamEditors/FlatCAMExcEditor.py:1769 -#: flatcamEditors/FlatCAMExcEditor.py:1985 +#: flatcamEditors/FlatCAMExcEditor.py:1768 +#: flatcamEditors/FlatCAMExcEditor.py:1984 msgid "" "Angle at which the linear array is placed.\n" "The precision is of max 2 decimals.\n" @@ -3680,8 +3223,8 @@ msgstr "" "Min value is: -360 degrees.\n" "Max value is: 360.00 degrees." -#: flatcamEditors/FlatCAMExcEditor.py:1790 -#: flatcamEditors/FlatCAMExcEditor.py:2006 +#: flatcamEditors/FlatCAMExcEditor.py:1789 +#: flatcamEditors/FlatCAMExcEditor.py:2005 #: flatcamEditors/FlatCAMGrbEditor.py:2852 msgid "" "Direction for circular array.Can be CW = clockwise or CCW = counter " @@ -3690,24 +3233,24 @@ msgstr "" "Direction for circular array.Can be CW = clockwise or CCW = counter " "clockwise." -#: flatcamEditors/FlatCAMExcEditor.py:1797 -#: flatcamEditors/FlatCAMExcEditor.py:2013 +#: flatcamEditors/FlatCAMExcEditor.py:1796 +#: flatcamEditors/FlatCAMExcEditor.py:2012 #: flatcamEditors/FlatCAMGrbEditor.py:2860 flatcamGUI/PreferencesUI.py:2766 #: flatcamGUI/PreferencesUI.py:3646 flatcamGUI/PreferencesUI.py:3939 #: flatcamGUI/PreferencesUI.py:4089 flatcamGUI/PreferencesUI.py:4581 msgid "CW" msgstr "CW" -#: flatcamEditors/FlatCAMExcEditor.py:1798 -#: flatcamEditors/FlatCAMExcEditor.py:2014 +#: flatcamEditors/FlatCAMExcEditor.py:1797 +#: flatcamEditors/FlatCAMExcEditor.py:2013 #: flatcamEditors/FlatCAMGrbEditor.py:2861 flatcamGUI/PreferencesUI.py:2767 #: flatcamGUI/PreferencesUI.py:3647 flatcamGUI/PreferencesUI.py:3940 #: flatcamGUI/PreferencesUI.py:4090 flatcamGUI/PreferencesUI.py:4582 msgid "CCW" msgstr "CCW" -#: flatcamEditors/FlatCAMExcEditor.py:1802 -#: flatcamEditors/FlatCAMExcEditor.py:2018 +#: flatcamEditors/FlatCAMExcEditor.py:1801 +#: flatcamEditors/FlatCAMExcEditor.py:2017 #: flatcamEditors/FlatCAMGrbEditor.py:2867 flatcamGUI/PreferencesUI.py:2746 #: flatcamGUI/PreferencesUI.py:2775 flatcamGUI/PreferencesUI.py:3918 #: flatcamGUI/PreferencesUI.py:3948 flatcamGUI/PreferencesUI.py:4068 @@ -3715,11 +3258,11 @@ msgstr "CCW" msgid "Angle at which each element in circular array is placed." msgstr "Angle at which each element in circular array is placed." -#: flatcamEditors/FlatCAMExcEditor.py:1836 +#: flatcamEditors/FlatCAMExcEditor.py:1835 msgid "Slot Parameters" msgstr "Slot Parameters" -#: flatcamEditors/FlatCAMExcEditor.py:1838 +#: flatcamEditors/FlatCAMExcEditor.py:1837 msgid "" "Parameters for adding a slot (hole with oval shape)\n" "either single or as an part of an array." @@ -3727,16 +3270,16 @@ msgstr "" "Parameters for adding a slot (hole with oval shape)\n" "either single or as an part of an array." -#: flatcamEditors/FlatCAMExcEditor.py:1847 flatcamGUI/PreferencesUI.py:3965 +#: flatcamEditors/FlatCAMExcEditor.py:1846 flatcamGUI/PreferencesUI.py:3965 #: flatcamTools/ToolProperties.py:559 msgid "Length" msgstr "Length" -#: flatcamEditors/FlatCAMExcEditor.py:1849 flatcamGUI/PreferencesUI.py:3967 +#: flatcamEditors/FlatCAMExcEditor.py:1848 flatcamGUI/PreferencesUI.py:3967 msgid "Length = The length of the slot." msgstr "Length = The length of the slot." -#: flatcamEditors/FlatCAMExcEditor.py:1863 flatcamGUI/PreferencesUI.py:3983 +#: flatcamEditors/FlatCAMExcEditor.py:1862 flatcamGUI/PreferencesUI.py:3983 msgid "" "Direction on which the slot is oriented:\n" "- 'X' - horizontal axis \n" @@ -3748,7 +3291,7 @@ msgstr "" "- 'Y' - vertical axis or \n" "- 'Angle' - a custom angle for the slot inclination" -#: flatcamEditors/FlatCAMExcEditor.py:1878 +#: flatcamEditors/FlatCAMExcEditor.py:1877 msgid "" "Angle at which the slot is placed.\n" "The precision is of max 2 decimals.\n" @@ -3760,15 +3303,15 @@ msgstr "" "Min value is: -360 degrees.\n" "Max value is: 360.00 degrees." -#: flatcamEditors/FlatCAMExcEditor.py:1911 +#: flatcamEditors/FlatCAMExcEditor.py:1910 msgid "Slot Array Parameters" msgstr "Slot Array Parameters" -#: flatcamEditors/FlatCAMExcEditor.py:1913 +#: flatcamEditors/FlatCAMExcEditor.py:1912 msgid "Parameters for the array of slots (linear or circular array)" msgstr "Parameters for the array of slots (linear or circular array)" -#: flatcamEditors/FlatCAMExcEditor.py:1922 +#: flatcamEditors/FlatCAMExcEditor.py:1921 msgid "" "Select the type of slot array to create.\n" "It can be Linear X(Y) or Circular" @@ -3776,15 +3319,41 @@ msgstr "" "Select the type of slot array to create.\n" "It can be Linear X(Y) or Circular" -#: flatcamEditors/FlatCAMExcEditor.py:1934 flatcamGUI/PreferencesUI.py:4022 +#: flatcamEditors/FlatCAMExcEditor.py:1933 flatcamGUI/PreferencesUI.py:4022 msgid "Nr of slots" msgstr "Nr of slots" -#: flatcamEditors/FlatCAMExcEditor.py:1935 flatcamGUI/PreferencesUI.py:4024 +#: flatcamEditors/FlatCAMExcEditor.py:1934 flatcamGUI/PreferencesUI.py:4024 msgid "Specify how many slots to be in the array." msgstr "Specify how many slots to be in the array." -#: flatcamEditors/FlatCAMExcEditor.py:2571 +#: flatcamEditors/FlatCAMExcEditor.py:2452 +#: flatcamObjects/FlatCAMExcellon.py:410 +msgid "Total Drills" +msgstr "Total Drills" + +#: flatcamEditors/FlatCAMExcEditor.py:2484 +#: flatcamObjects/FlatCAMExcellon.py:441 +msgid "Total Slots" +msgstr "Total Slots" + +#: flatcamEditors/FlatCAMExcEditor.py:2559 +#: flatcamEditors/FlatCAMGeoEditor.py:1076 +#: flatcamEditors/FlatCAMGeoEditor.py:1117 +#: flatcamEditors/FlatCAMGeoEditor.py:1145 +#: flatcamEditors/FlatCAMGeoEditor.py:1173 +#: flatcamEditors/FlatCAMGeoEditor.py:1217 +#: flatcamEditors/FlatCAMGeoEditor.py:1252 +#: flatcamEditors/FlatCAMGeoEditor.py:1280 +#: flatcamObjects/FlatCAMGeometry.py:571 flatcamObjects/FlatCAMGeometry.py:1005 +#: flatcamObjects/FlatCAMGeometry.py:1726 +#: flatcamObjects/FlatCAMGeometry.py:2370 flatcamTools/ToolNCC.py:1493 +#: flatcamTools/ToolPaint.py:1244 flatcamTools/ToolPaint.py:1415 +#: flatcamTools/ToolSolderPaste.py:883 flatcamTools/ToolSolderPaste.py:956 +msgid "Wrong value format entered, use a number." +msgstr "Wrong value format entered, use a number." + +#: flatcamEditors/FlatCAMExcEditor.py:2570 msgid "" "Tool already in the original or actual tool list.\n" "Save and reedit Excellon if you need to add this tool. " @@ -3792,81 +3361,87 @@ msgstr "" "Tool already in the original or actual tool list.\n" "Save and reedit Excellon if you need to add this tool. " -#: flatcamEditors/FlatCAMExcEditor.py:2580 flatcamGUI/FlatCAMGUI.py:4009 +#: flatcamEditors/FlatCAMExcEditor.py:2579 flatcamGUI/FlatCAMGUI.py:4009 msgid "Added new tool with dia" msgstr "Added new tool with dia" -#: flatcamEditors/FlatCAMExcEditor.py:2613 +#: flatcamEditors/FlatCAMExcEditor.py:2612 msgid "Select a tool in Tool Table" msgstr "Select a tool in Tool Table" -#: flatcamEditors/FlatCAMExcEditor.py:2643 +#: flatcamEditors/FlatCAMExcEditor.py:2642 msgid "Deleted tool with diameter" msgstr "Deleted tool with diameter" -#: flatcamEditors/FlatCAMExcEditor.py:2793 +#: flatcamEditors/FlatCAMExcEditor.py:2790 msgid "Done. Tool edit completed." msgstr "Done. Tool edit completed." -#: flatcamEditors/FlatCAMExcEditor.py:3350 +#: flatcamEditors/FlatCAMExcEditor.py:3352 msgid "There are no Tools definitions in the file. Aborting Excellon creation." msgstr "" "There are no Tools definitions in the file. Aborting Excellon creation." -#: flatcamEditors/FlatCAMExcEditor.py:3354 +#: flatcamEditors/FlatCAMExcEditor.py:3356 msgid "An internal error has ocurred. See Shell.\n" msgstr "An internal error has ocurred. See Shell.\n" -#: flatcamEditors/FlatCAMExcEditor.py:3359 +#: flatcamEditors/FlatCAMExcEditor.py:3361 msgid "Creating Excellon." msgstr "Creating Excellon." -#: flatcamEditors/FlatCAMExcEditor.py:3371 +#: flatcamEditors/FlatCAMExcEditor.py:3373 msgid "Excellon editing finished." msgstr "Excellon editing finished." -#: flatcamEditors/FlatCAMExcEditor.py:3388 +#: flatcamEditors/FlatCAMExcEditor.py:3390 msgid "Cancelled. There is no Tool/Drill selected" msgstr "Cancelled. There is no Tool/Drill selected" -#: flatcamEditors/FlatCAMExcEditor.py:4001 +#: flatcamEditors/FlatCAMExcEditor.py:4003 msgid "Done. Drill(s) deleted." msgstr "Done. Drill(s) deleted." -#: flatcamEditors/FlatCAMExcEditor.py:4074 -#: flatcamEditors/FlatCAMExcEditor.py:4084 +#: flatcamEditors/FlatCAMExcEditor.py:4076 +#: flatcamEditors/FlatCAMExcEditor.py:4086 #: flatcamEditors/FlatCAMGrbEditor.py:4897 msgid "Click on the circular array Center position" msgstr "Click on the circular array Center position" -#: flatcamEditors/FlatCAMGeoEditor.py:86 +#: flatcamEditors/FlatCAMGeoEditor.py:85 msgid "Buffer distance:" msgstr "Buffer distance:" -#: flatcamEditors/FlatCAMGeoEditor.py:87 +#: flatcamEditors/FlatCAMGeoEditor.py:86 msgid "Buffer corner:" msgstr "Buffer corner:" -#: flatcamEditors/FlatCAMGeoEditor.py:89 +#: flatcamEditors/FlatCAMGeoEditor.py:88 +#| msgid "" +#| "There are 3 types of corners:\n" +#| " - 'Round': the corner is rounded for exterior buffer.\n" +#| " - 'Square:' the corner is met in a sharp angle for exterior buffer.\n" +#| " - 'Beveled:' the corner is a line that directly connects the features " +#| "meeting in the corner" msgid "" "There are 3 types of corners:\n" " - 'Round': the corner is rounded for exterior buffer.\n" -" - 'Square:' the corner is met in a sharp angle for exterior buffer.\n" -" - 'Beveled:' the corner is a line that directly connects the features " +" - 'Square': the corner is met in a sharp angle for exterior buffer.\n" +" - 'Beveled': the corner is a line that directly connects the features " "meeting in the corner" msgstr "" "There are 3 types of corners:\n" " - 'Round': the corner is rounded for exterior buffer.\n" -" - 'Square:' the corner is met in a sharp angle for exterior buffer.\n" -" - 'Beveled:' the corner is a line that directly connects the features " +" - 'Square': the corner is met in a sharp angle for exterior buffer.\n" +" - 'Beveled': the corner is a line that directly connects the features " "meeting in the corner" -#: flatcamEditors/FlatCAMGeoEditor.py:95 +#: flatcamEditors/FlatCAMGeoEditor.py:94 #: flatcamEditors/FlatCAMGrbEditor.py:2628 msgid "Round" msgstr "Round" -#: flatcamEditors/FlatCAMGeoEditor.py:96 +#: flatcamEditors/FlatCAMGeoEditor.py:95 #: flatcamEditors/FlatCAMGrbEditor.py:2629 flatcamGUI/PreferencesUI.py:5606 #: flatcamGUI/PreferencesUI.py:6130 flatcamGUI/PreferencesUI.py:7564 #: flatcamGUI/PreferencesUI.py:8167 flatcamGUI/PreferencesUI.py:8274 @@ -3878,61 +3453,70 @@ msgstr "Round" msgid "Square" msgstr "Square" -#: flatcamEditors/FlatCAMGeoEditor.py:97 +#: flatcamEditors/FlatCAMGeoEditor.py:96 #: flatcamEditors/FlatCAMGrbEditor.py:2630 msgid "Beveled" msgstr "Beveled" -#: flatcamEditors/FlatCAMGeoEditor.py:104 +#: flatcamEditors/FlatCAMGeoEditor.py:103 msgid "Buffer Interior" msgstr "Buffer Interior" -#: flatcamEditors/FlatCAMGeoEditor.py:106 +#: flatcamEditors/FlatCAMGeoEditor.py:105 msgid "Buffer Exterior" msgstr "Buffer Exterior" -#: flatcamEditors/FlatCAMGeoEditor.py:112 +#: flatcamEditors/FlatCAMGeoEditor.py:111 msgid "Full Buffer" msgstr "Full Buffer" -#: flatcamEditors/FlatCAMGeoEditor.py:133 -#: flatcamEditors/FlatCAMGeoEditor.py:3018 flatcamGUI/FlatCAMGUI.py:1913 +#: flatcamEditors/FlatCAMGeoEditor.py:132 +#: flatcamEditors/FlatCAMGeoEditor.py:3017 flatcamGUI/FlatCAMGUI.py:1913 #: flatcamGUI/PreferencesUI.py:2786 msgid "Buffer Tool" msgstr "Buffer Tool" -#: flatcamEditors/FlatCAMGeoEditor.py:145 -#: flatcamEditors/FlatCAMGeoEditor.py:162 -#: flatcamEditors/FlatCAMGeoEditor.py:179 -#: flatcamEditors/FlatCAMGeoEditor.py:3037 -#: flatcamEditors/FlatCAMGeoEditor.py:3065 -#: flatcamEditors/FlatCAMGeoEditor.py:3093 +#: flatcamEditors/FlatCAMGeoEditor.py:144 +#: flatcamEditors/FlatCAMGeoEditor.py:161 +#: flatcamEditors/FlatCAMGeoEditor.py:178 +#: flatcamEditors/FlatCAMGeoEditor.py:3036 +#: flatcamEditors/FlatCAMGeoEditor.py:3064 +#: flatcamEditors/FlatCAMGeoEditor.py:3092 #: flatcamEditors/FlatCAMGrbEditor.py:4950 msgid "Buffer distance value is missing or wrong format. Add it and retry." msgstr "Buffer distance value is missing or wrong format. Add it and retry." -#: flatcamEditors/FlatCAMGeoEditor.py:243 +#: flatcamEditors/FlatCAMGeoEditor.py:242 msgid "Font" msgstr "Font" -#: flatcamEditors/FlatCAMGeoEditor.py:324 flatcamGUI/FlatCAMGUI.py:2193 +#: flatcamEditors/FlatCAMGeoEditor.py:323 flatcamGUI/FlatCAMGUI.py:2193 msgid "Text" msgstr "Text" -#: flatcamEditors/FlatCAMGeoEditor.py:350 +#: flatcamEditors/FlatCAMGeoEditor.py:349 msgid "Text Tool" msgstr "Text Tool" -#: flatcamEditors/FlatCAMGeoEditor.py:440 flatcamGUI/ObjectUI.py:363 +#: flatcamEditors/FlatCAMGeoEditor.py:405 flatcamGUI/FlatCAMGUI.py:496 +#: flatcamGUI/FlatCAMGUI.py:1143 flatcamGUI/ObjectUI.py:817 +#: flatcamGUI/ObjectUI.py:1661 flatcamObjects/FlatCAMExcellon.py:742 +#: flatcamObjects/FlatCAMExcellon.py:1084 flatcamObjects/FlatCAMGeometry.py:731 +#: flatcamTools/ToolNCC.py:331 flatcamTools/ToolNCC.py:797 +#: flatcamTools/ToolPaint.py:314 flatcamTools/ToolPaint.py:767 +msgid "Tool" +msgstr "Tool" + +#: flatcamEditors/FlatCAMGeoEditor.py:439 flatcamGUI/ObjectUI.py:363 #: flatcamGUI/PreferencesUI.py:2205 msgid "Tool dia" msgstr "Tool dia" -#: flatcamEditors/FlatCAMGeoEditor.py:442 +#: flatcamEditors/FlatCAMGeoEditor.py:441 msgid "Diameter of the tool to be used in the operation." msgstr "Diameter of the tool to be used in the operation." -#: flatcamEditors/FlatCAMGeoEditor.py:488 +#: flatcamEditors/FlatCAMGeoEditor.py:487 msgid "" "Algorithm to paint the polygons:\n" "- Standard: Fixed step inwards.\n" @@ -3944,91 +3528,91 @@ msgstr "" "- Seed-based: Outwards from seed.\n" "- Line-based: Parallel lines." -#: flatcamEditors/FlatCAMGeoEditor.py:507 +#: flatcamEditors/FlatCAMGeoEditor.py:506 msgid "Connect:" msgstr "Connect:" -#: flatcamEditors/FlatCAMGeoEditor.py:517 +#: flatcamEditors/FlatCAMGeoEditor.py:516 msgid "Contour:" msgstr "Contour:" -#: flatcamEditors/FlatCAMGeoEditor.py:530 flatcamGUI/FlatCAMGUI.py:2197 +#: flatcamEditors/FlatCAMGeoEditor.py:529 flatcamGUI/FlatCAMGUI.py:2197 msgid "Paint" msgstr "Paint" -#: flatcamEditors/FlatCAMGeoEditor.py:548 flatcamGUI/FlatCAMGUI.py:909 -#: flatcamGUI/FlatCAMGUI.py:2588 flatcamGUI/ObjectUI.py:2057 +#: flatcamEditors/FlatCAMGeoEditor.py:547 flatcamGUI/FlatCAMGUI.py:909 +#: flatcamGUI/FlatCAMGUI.py:2588 flatcamGUI/ObjectUI.py:2058 #: flatcamTools/ToolPaint.py:43 flatcamTools/ToolPaint.py:738 msgid "Paint Tool" msgstr "Paint Tool" -#: flatcamEditors/FlatCAMGeoEditor.py:584 -#: flatcamEditors/FlatCAMGeoEditor.py:1056 -#: flatcamEditors/FlatCAMGeoEditor.py:3025 -#: flatcamEditors/FlatCAMGeoEditor.py:3053 -#: flatcamEditors/FlatCAMGeoEditor.py:3081 +#: flatcamEditors/FlatCAMGeoEditor.py:583 +#: flatcamEditors/FlatCAMGeoEditor.py:1055 +#: flatcamEditors/FlatCAMGeoEditor.py:3024 +#: flatcamEditors/FlatCAMGeoEditor.py:3052 +#: flatcamEditors/FlatCAMGeoEditor.py:3080 #: flatcamEditors/FlatCAMGeoEditor.py:4502 #: flatcamEditors/FlatCAMGrbEditor.py:5601 msgid "Cancelled. No shape selected." msgstr "Cancelled. No shape selected." -#: flatcamEditors/FlatCAMGeoEditor.py:597 -#: flatcamEditors/FlatCAMGeoEditor.py:3043 -#: flatcamEditors/FlatCAMGeoEditor.py:3071 -#: flatcamEditors/FlatCAMGeoEditor.py:3099 flatcamGUI/PreferencesUI.py:4149 +#: flatcamEditors/FlatCAMGeoEditor.py:596 +#: flatcamEditors/FlatCAMGeoEditor.py:3042 +#: flatcamEditors/FlatCAMGeoEditor.py:3070 +#: flatcamEditors/FlatCAMGeoEditor.py:3098 flatcamGUI/PreferencesUI.py:4149 #: flatcamTools/ToolProperties.py:117 flatcamTools/ToolProperties.py:162 msgid "Tools" msgstr "Tools" -#: flatcamEditors/FlatCAMGeoEditor.py:608 -#: flatcamEditors/FlatCAMGeoEditor.py:992 +#: flatcamEditors/FlatCAMGeoEditor.py:607 +#: flatcamEditors/FlatCAMGeoEditor.py:991 #: flatcamEditors/FlatCAMGrbEditor.py:5140 #: flatcamEditors/FlatCAMGrbEditor.py:5537 flatcamGUI/FlatCAMGUI.py:930 -#: flatcamGUI/FlatCAMGUI.py:2609 flatcamTools/ToolTransform.py:461 +#: flatcamGUI/FlatCAMGUI.py:2609 flatcamTools/ToolTransform.py:460 msgid "Transform Tool" msgstr "Transform Tool" -#: flatcamEditors/FlatCAMGeoEditor.py:609 -#: flatcamEditors/FlatCAMGeoEditor.py:674 +#: flatcamEditors/FlatCAMGeoEditor.py:608 +#: flatcamEditors/FlatCAMGeoEditor.py:673 #: flatcamEditors/FlatCAMGrbEditor.py:5141 #: flatcamEditors/FlatCAMGrbEditor.py:5206 flatcamGUI/PreferencesUI.py:6725 -#: flatcamTools/ToolTransform.py:25 flatcamTools/ToolTransform.py:467 +#: flatcamTools/ToolTransform.py:24 flatcamTools/ToolTransform.py:466 msgid "Rotate" msgstr "Rotate" -#: flatcamEditors/FlatCAMGeoEditor.py:610 -#: flatcamEditors/FlatCAMGrbEditor.py:5142 flatcamTools/ToolTransform.py:26 +#: flatcamEditors/FlatCAMGeoEditor.py:609 +#: flatcamEditors/FlatCAMGrbEditor.py:5142 flatcamTools/ToolTransform.py:25 msgid "Skew/Shear" msgstr "Skew/Shear" -#: flatcamEditors/FlatCAMGeoEditor.py:611 +#: flatcamEditors/FlatCAMGeoEditor.py:610 #: flatcamEditors/FlatCAMGrbEditor.py:2677 #: flatcamEditors/FlatCAMGrbEditor.py:5143 flatcamGUI/FlatCAMGUI.py:1048 #: flatcamGUI/FlatCAMGUI.py:2125 flatcamGUI/FlatCAMGUI.py:2240 #: flatcamGUI/FlatCAMGUI.py:2723 flatcamGUI/ObjectUI.py:124 -#: flatcamGUI/PreferencesUI.py:6775 flatcamTools/ToolTransform.py:27 +#: flatcamGUI/PreferencesUI.py:6775 flatcamTools/ToolTransform.py:26 msgid "Scale" msgstr "Scale" -#: flatcamEditors/FlatCAMGeoEditor.py:612 -#: flatcamEditors/FlatCAMGrbEditor.py:5144 flatcamTools/ToolTransform.py:28 +#: flatcamEditors/FlatCAMGeoEditor.py:611 +#: flatcamEditors/FlatCAMGrbEditor.py:5144 flatcamTools/ToolTransform.py:27 msgid "Mirror (Flip)" msgstr "Mirror (Flip)" -#: flatcamEditors/FlatCAMGeoEditor.py:626 +#: flatcamEditors/FlatCAMGeoEditor.py:625 #: flatcamEditors/FlatCAMGrbEditor.py:5158 flatcamGUI/FlatCAMGUI.py:841 #: flatcamGUI/FlatCAMGUI.py:2524 msgid "Editor" msgstr "Editor" -#: flatcamEditors/FlatCAMGeoEditor.py:658 +#: flatcamEditors/FlatCAMGeoEditor.py:657 #: flatcamEditors/FlatCAMGrbEditor.py:5190 msgid "Angle:" msgstr "Angle:" -#: flatcamEditors/FlatCAMGeoEditor.py:660 +#: flatcamEditors/FlatCAMGeoEditor.py:659 #: flatcamEditors/FlatCAMGrbEditor.py:5192 flatcamGUI/PreferencesUI.py:6735 -#: flatcamTools/ToolTransform.py:63 +#: flatcamTools/ToolTransform.py:62 msgid "" "Angle for Rotation action, in degrees.\n" "Float number between -360 and 359.\n" @@ -4040,7 +3624,7 @@ msgstr "" "Positive numbers for CW motion.\n" "Negative numbers for CCW motion." -#: flatcamEditors/FlatCAMGeoEditor.py:676 +#: flatcamEditors/FlatCAMGeoEditor.py:675 #: flatcamEditors/FlatCAMGrbEditor.py:5208 msgid "" "Rotate the selected shape(s).\n" @@ -4051,13 +3635,13 @@ msgstr "" "The point of reference is the middle of\n" "the bounding box for all selected shapes." -#: flatcamEditors/FlatCAMGeoEditor.py:699 +#: flatcamEditors/FlatCAMGeoEditor.py:698 #: flatcamEditors/FlatCAMGrbEditor.py:5231 msgid "Angle X:" msgstr "Angle X:" -#: flatcamEditors/FlatCAMGeoEditor.py:701 -#: flatcamEditors/FlatCAMGeoEditor.py:721 +#: flatcamEditors/FlatCAMGeoEditor.py:700 +#: flatcamEditors/FlatCAMGeoEditor.py:720 #: flatcamEditors/FlatCAMGrbEditor.py:5233 #: flatcamEditors/FlatCAMGrbEditor.py:5253 flatcamGUI/PreferencesUI.py:6754 #: flatcamGUI/PreferencesUI.py:6768 flatcamTools/ToolCalibration.py:505 @@ -4069,13 +3653,13 @@ msgstr "" "Angle for Skew action, in degrees.\n" "Float number between -360 and 359." -#: flatcamEditors/FlatCAMGeoEditor.py:712 -#: flatcamEditors/FlatCAMGrbEditor.py:5244 flatcamTools/ToolTransform.py:468 +#: flatcamEditors/FlatCAMGeoEditor.py:711 +#: flatcamEditors/FlatCAMGrbEditor.py:5244 flatcamTools/ToolTransform.py:467 msgid "Skew X" msgstr "Skew X" -#: flatcamEditors/FlatCAMGeoEditor.py:714 -#: flatcamEditors/FlatCAMGeoEditor.py:734 +#: flatcamEditors/FlatCAMGeoEditor.py:713 +#: flatcamEditors/FlatCAMGeoEditor.py:733 #: flatcamEditors/FlatCAMGrbEditor.py:5246 #: flatcamEditors/FlatCAMGrbEditor.py:5266 msgid "" @@ -4087,33 +3671,33 @@ msgstr "" "The point of reference is the middle of\n" "the bounding box for all selected shapes." -#: flatcamEditors/FlatCAMGeoEditor.py:719 +#: flatcamEditors/FlatCAMGeoEditor.py:718 #: flatcamEditors/FlatCAMGrbEditor.py:5251 msgid "Angle Y:" msgstr "Angle Y:" -#: flatcamEditors/FlatCAMGeoEditor.py:732 -#: flatcamEditors/FlatCAMGrbEditor.py:5264 flatcamTools/ToolTransform.py:469 +#: flatcamEditors/FlatCAMGeoEditor.py:731 +#: flatcamEditors/FlatCAMGrbEditor.py:5264 flatcamTools/ToolTransform.py:468 msgid "Skew Y" msgstr "Skew Y" -#: flatcamEditors/FlatCAMGeoEditor.py:760 +#: flatcamEditors/FlatCAMGeoEditor.py:759 #: flatcamEditors/FlatCAMGrbEditor.py:5292 msgid "Factor X:" msgstr "Factor X:" -#: flatcamEditors/FlatCAMGeoEditor.py:762 +#: flatcamEditors/FlatCAMGeoEditor.py:761 #: flatcamEditors/FlatCAMGrbEditor.py:5294 flatcamTools/ToolCalibration.py:469 msgid "Factor for Scale action over X axis." msgstr "Factor for Scale action over X axis." -#: flatcamEditors/FlatCAMGeoEditor.py:772 -#: flatcamEditors/FlatCAMGrbEditor.py:5304 flatcamTools/ToolTransform.py:470 +#: flatcamEditors/FlatCAMGeoEditor.py:771 +#: flatcamEditors/FlatCAMGrbEditor.py:5304 flatcamTools/ToolTransform.py:469 msgid "Scale X" msgstr "Scale X" -#: flatcamEditors/FlatCAMGeoEditor.py:774 -#: flatcamEditors/FlatCAMGeoEditor.py:793 +#: flatcamEditors/FlatCAMGeoEditor.py:773 +#: flatcamEditors/FlatCAMGeoEditor.py:792 #: flatcamEditors/FlatCAMGrbEditor.py:5306 #: flatcamEditors/FlatCAMGrbEditor.py:5325 msgid "" @@ -4125,28 +3709,28 @@ msgstr "" "The point of reference depends on \n" "the Scale reference checkbox state." -#: flatcamEditors/FlatCAMGeoEditor.py:779 +#: flatcamEditors/FlatCAMGeoEditor.py:778 #: flatcamEditors/FlatCAMGrbEditor.py:5311 msgid "Factor Y:" msgstr "Factor Y:" -#: flatcamEditors/FlatCAMGeoEditor.py:781 +#: flatcamEditors/FlatCAMGeoEditor.py:780 #: flatcamEditors/FlatCAMGrbEditor.py:5313 flatcamTools/ToolCalibration.py:481 msgid "Factor for Scale action over Y axis." msgstr "Factor for Scale action over Y axis." -#: flatcamEditors/FlatCAMGeoEditor.py:791 -#: flatcamEditors/FlatCAMGrbEditor.py:5323 flatcamTools/ToolTransform.py:471 +#: flatcamEditors/FlatCAMGeoEditor.py:790 +#: flatcamEditors/FlatCAMGrbEditor.py:5323 flatcamTools/ToolTransform.py:470 msgid "Scale Y" msgstr "Scale Y" -#: flatcamEditors/FlatCAMGeoEditor.py:800 +#: flatcamEditors/FlatCAMGeoEditor.py:799 #: flatcamEditors/FlatCAMGrbEditor.py:5332 flatcamGUI/PreferencesUI.py:6804 -#: flatcamTools/ToolTransform.py:190 +#: flatcamTools/ToolTransform.py:189 msgid "Link" msgstr "Link" -#: flatcamEditors/FlatCAMGeoEditor.py:802 +#: flatcamEditors/FlatCAMGeoEditor.py:801 #: flatcamEditors/FlatCAMGrbEditor.py:5334 msgid "" "Scale the selected shape(s)\n" @@ -4155,13 +3739,13 @@ msgstr "" "Scale the selected shape(s)\n" "using the Scale Factor X for both axis." -#: flatcamEditors/FlatCAMGeoEditor.py:808 +#: flatcamEditors/FlatCAMGeoEditor.py:807 #: flatcamEditors/FlatCAMGrbEditor.py:5340 flatcamGUI/PreferencesUI.py:6812 -#: flatcamTools/ToolTransform.py:197 +#: flatcamTools/ToolTransform.py:196 msgid "Scale Reference" msgstr "Scale Reference" -#: flatcamEditors/FlatCAMGeoEditor.py:810 +#: flatcamEditors/FlatCAMGeoEditor.py:809 #: flatcamEditors/FlatCAMGrbEditor.py:5342 msgid "" "Scale the selected shape(s)\n" @@ -4174,23 +3758,23 @@ msgstr "" "and the center of the biggest bounding box\n" "of the selected shapes when unchecked." -#: flatcamEditors/FlatCAMGeoEditor.py:838 +#: flatcamEditors/FlatCAMGeoEditor.py:837 #: flatcamEditors/FlatCAMGrbEditor.py:5371 msgid "Value X:" msgstr "Value X:" -#: flatcamEditors/FlatCAMGeoEditor.py:840 +#: flatcamEditors/FlatCAMGeoEditor.py:839 #: flatcamEditors/FlatCAMGrbEditor.py:5373 msgid "Value for Offset action on X axis." msgstr "Value for Offset action on X axis." -#: flatcamEditors/FlatCAMGeoEditor.py:850 -#: flatcamEditors/FlatCAMGrbEditor.py:5383 flatcamTools/ToolTransform.py:474 +#: flatcamEditors/FlatCAMGeoEditor.py:849 +#: flatcamEditors/FlatCAMGrbEditor.py:5383 flatcamTools/ToolTransform.py:473 msgid "Offset X" msgstr "Offset X" -#: flatcamEditors/FlatCAMGeoEditor.py:852 -#: flatcamEditors/FlatCAMGeoEditor.py:872 +#: flatcamEditors/FlatCAMGeoEditor.py:851 +#: flatcamEditors/FlatCAMGeoEditor.py:871 #: flatcamEditors/FlatCAMGrbEditor.py:5385 #: flatcamEditors/FlatCAMGrbEditor.py:5405 msgid "" @@ -4202,28 +3786,28 @@ msgstr "" "The point of reference is the middle of\n" "the bounding box for all selected shapes.\n" -#: flatcamEditors/FlatCAMGeoEditor.py:858 +#: flatcamEditors/FlatCAMGeoEditor.py:857 #: flatcamEditors/FlatCAMGrbEditor.py:5391 msgid "Value Y:" msgstr "Value Y:" -#: flatcamEditors/FlatCAMGeoEditor.py:860 +#: flatcamEditors/FlatCAMGeoEditor.py:859 #: flatcamEditors/FlatCAMGrbEditor.py:5393 msgid "Value for Offset action on Y axis." msgstr "Value for Offset action on Y axis." -#: flatcamEditors/FlatCAMGeoEditor.py:870 -#: flatcamEditors/FlatCAMGrbEditor.py:5403 flatcamTools/ToolTransform.py:475 +#: flatcamEditors/FlatCAMGeoEditor.py:869 +#: flatcamEditors/FlatCAMGrbEditor.py:5403 flatcamTools/ToolTransform.py:474 msgid "Offset Y" msgstr "Offset Y" -#: flatcamEditors/FlatCAMGeoEditor.py:901 -#: flatcamEditors/FlatCAMGrbEditor.py:5434 flatcamTools/ToolTransform.py:476 +#: flatcamEditors/FlatCAMGeoEditor.py:900 +#: flatcamEditors/FlatCAMGrbEditor.py:5434 flatcamTools/ToolTransform.py:475 msgid "Flip on X" msgstr "Flip on X" -#: flatcamEditors/FlatCAMGeoEditor.py:903 -#: flatcamEditors/FlatCAMGeoEditor.py:910 +#: flatcamEditors/FlatCAMGeoEditor.py:902 +#: flatcamEditors/FlatCAMGeoEditor.py:909 #: flatcamEditors/FlatCAMGrbEditor.py:5436 #: flatcamEditors/FlatCAMGrbEditor.py:5443 msgid "" @@ -4233,17 +3817,17 @@ msgstr "" "Flip the selected shape(s) over the X axis.\n" "Does not create a new shape." -#: flatcamEditors/FlatCAMGeoEditor.py:908 -#: flatcamEditors/FlatCAMGrbEditor.py:5441 flatcamTools/ToolTransform.py:477 +#: flatcamEditors/FlatCAMGeoEditor.py:907 +#: flatcamEditors/FlatCAMGrbEditor.py:5441 flatcamTools/ToolTransform.py:476 msgid "Flip on Y" msgstr "Flip on Y" -#: flatcamEditors/FlatCAMGeoEditor.py:916 +#: flatcamEditors/FlatCAMGeoEditor.py:915 #: flatcamEditors/FlatCAMGrbEditor.py:5449 msgid "Ref Pt" msgstr "Ref Pt" -#: flatcamEditors/FlatCAMGeoEditor.py:918 +#: flatcamEditors/FlatCAMGeoEditor.py:917 #: flatcamEditors/FlatCAMGrbEditor.py:5451 msgid "" "Flip the selected shape(s)\n" @@ -4266,13 +3850,13 @@ msgstr "" "Or enter the coords in format (x, y) in the\n" "Point Entry field and click Flip on X(Y)" -#: flatcamEditors/FlatCAMGeoEditor.py:930 +#: flatcamEditors/FlatCAMGeoEditor.py:929 #: flatcamEditors/FlatCAMGrbEditor.py:5463 msgid "Point:" msgstr "Point:" -#: flatcamEditors/FlatCAMGeoEditor.py:932 -#: flatcamEditors/FlatCAMGrbEditor.py:5465 flatcamTools/ToolTransform.py:300 +#: flatcamEditors/FlatCAMGeoEditor.py:931 +#: flatcamEditors/FlatCAMGrbEditor.py:5465 flatcamTools/ToolTransform.py:299 msgid "" "Coordinates in format (x, y) used as reference for mirroring.\n" "The 'x' in (x, y) will be used when using Flip on X and\n" @@ -4282,8 +3866,8 @@ msgstr "" "The 'x' in (x, y) will be used when using Flip on X and\n" "the 'y' in (x, y) will be used when using Flip on Y." -#: flatcamEditors/FlatCAMGeoEditor.py:942 -#: flatcamEditors/FlatCAMGrbEditor.py:5477 flatcamTools/ToolTransform.py:310 +#: flatcamEditors/FlatCAMGeoEditor.py:941 +#: flatcamEditors/FlatCAMGrbEditor.py:5477 flatcamTools/ToolTransform.py:309 msgid "" "The point coordinates can be captured by\n" "left click on canvas together with pressing\n" @@ -4293,347 +3877,347 @@ msgstr "" "left click on canvas together with pressing\n" "SHIFT key. Then click Add button to insert." -#: flatcamEditors/FlatCAMGeoEditor.py:1305 +#: flatcamEditors/FlatCAMGeoEditor.py:1304 #: flatcamEditors/FlatCAMGrbEditor.py:5785 msgid "No shape selected. Please Select a shape to rotate!" msgstr "No shape selected. Please Select a shape to rotate!" -#: flatcamEditors/FlatCAMGeoEditor.py:1308 -#: flatcamEditors/FlatCAMGrbEditor.py:5788 flatcamTools/ToolTransform.py:680 +#: flatcamEditors/FlatCAMGeoEditor.py:1307 +#: flatcamEditors/FlatCAMGrbEditor.py:5788 flatcamTools/ToolTransform.py:679 msgid "Appying Rotate" msgstr "Appying Rotate" -#: flatcamEditors/FlatCAMGeoEditor.py:1334 +#: flatcamEditors/FlatCAMGeoEditor.py:1333 #: flatcamEditors/FlatCAMGrbEditor.py:5820 msgid "Done. Rotate completed." msgstr "Done. Rotate completed." -#: flatcamEditors/FlatCAMGeoEditor.py:1336 +#: flatcamEditors/FlatCAMGeoEditor.py:1335 msgid "Rotation action was not executed" msgstr "Rotation action was not executed" -#: flatcamEditors/FlatCAMGeoEditor.py:1355 +#: flatcamEditors/FlatCAMGeoEditor.py:1354 #: flatcamEditors/FlatCAMGrbEditor.py:5839 msgid "No shape selected. Please Select a shape to flip!" msgstr "No shape selected. Please Select a shape to flip!" -#: flatcamEditors/FlatCAMGeoEditor.py:1358 -#: flatcamEditors/FlatCAMGrbEditor.py:5842 flatcamTools/ToolTransform.py:729 +#: flatcamEditors/FlatCAMGeoEditor.py:1357 +#: flatcamEditors/FlatCAMGrbEditor.py:5842 flatcamTools/ToolTransform.py:728 msgid "Applying Flip" msgstr "Applying Flip" -#: flatcamEditors/FlatCAMGeoEditor.py:1387 -#: flatcamEditors/FlatCAMGrbEditor.py:5880 flatcamTools/ToolTransform.py:770 +#: flatcamEditors/FlatCAMGeoEditor.py:1386 +#: flatcamEditors/FlatCAMGrbEditor.py:5880 flatcamTools/ToolTransform.py:769 msgid "Flip on the Y axis done" msgstr "Flip on the Y axis done" -#: flatcamEditors/FlatCAMGeoEditor.py:1391 -#: flatcamEditors/FlatCAMGrbEditor.py:5889 flatcamTools/ToolTransform.py:779 +#: flatcamEditors/FlatCAMGeoEditor.py:1390 +#: flatcamEditors/FlatCAMGrbEditor.py:5889 flatcamTools/ToolTransform.py:778 msgid "Flip on the X axis done" msgstr "Flip on the X axis done" -#: flatcamEditors/FlatCAMGeoEditor.py:1399 +#: flatcamEditors/FlatCAMGeoEditor.py:1398 msgid "Flip action was not executed" msgstr "Flip action was not executed" -#: flatcamEditors/FlatCAMGeoEditor.py:1417 +#: flatcamEditors/FlatCAMGeoEditor.py:1416 #: flatcamEditors/FlatCAMGrbEditor.py:5909 msgid "No shape selected. Please Select a shape to shear/skew!" msgstr "No shape selected. Please Select a shape to shear/skew!" -#: flatcamEditors/FlatCAMGeoEditor.py:1420 -#: flatcamEditors/FlatCAMGrbEditor.py:5912 flatcamTools/ToolTransform.py:802 +#: flatcamEditors/FlatCAMGeoEditor.py:1419 +#: flatcamEditors/FlatCAMGrbEditor.py:5912 flatcamTools/ToolTransform.py:801 msgid "Applying Skew" msgstr "Applying Skew" -#: flatcamEditors/FlatCAMGeoEditor.py:1443 +#: flatcamEditors/FlatCAMGeoEditor.py:1442 #: flatcamEditors/FlatCAMGrbEditor.py:5946 msgid "Skew on the X axis done" msgstr "Skew on the X axis done" -#: flatcamEditors/FlatCAMGeoEditor.py:1445 +#: flatcamEditors/FlatCAMGeoEditor.py:1444 #: flatcamEditors/FlatCAMGrbEditor.py:5948 msgid "Skew on the Y axis done" msgstr "Skew on the Y axis done" -#: flatcamEditors/FlatCAMGeoEditor.py:1448 +#: flatcamEditors/FlatCAMGeoEditor.py:1447 msgid "Skew action was not executed" msgstr "Skew action was not executed" -#: flatcamEditors/FlatCAMGeoEditor.py:1470 +#: flatcamEditors/FlatCAMGeoEditor.py:1469 #: flatcamEditors/FlatCAMGrbEditor.py:5970 msgid "No shape selected. Please Select a shape to scale!" msgstr "No shape selected. Please Select a shape to scale!" -#: flatcamEditors/FlatCAMGeoEditor.py:1473 -#: flatcamEditors/FlatCAMGrbEditor.py:5973 flatcamTools/ToolTransform.py:849 +#: flatcamEditors/FlatCAMGeoEditor.py:1472 +#: flatcamEditors/FlatCAMGrbEditor.py:5973 flatcamTools/ToolTransform.py:847 msgid "Applying Scale" msgstr "Applying Scale" -#: flatcamEditors/FlatCAMGeoEditor.py:1505 +#: flatcamEditors/FlatCAMGeoEditor.py:1504 #: flatcamEditors/FlatCAMGrbEditor.py:6010 msgid "Scale on the X axis done" msgstr "Scale on the X axis done" -#: flatcamEditors/FlatCAMGeoEditor.py:1507 +#: flatcamEditors/FlatCAMGeoEditor.py:1506 #: flatcamEditors/FlatCAMGrbEditor.py:6012 msgid "Scale on the Y axis done" msgstr "Scale on the Y axis done" -#: flatcamEditors/FlatCAMGeoEditor.py:1509 +#: flatcamEditors/FlatCAMGeoEditor.py:1508 msgid "Scale action was not executed" msgstr "Scale action was not executed" -#: flatcamEditors/FlatCAMGeoEditor.py:1524 +#: flatcamEditors/FlatCAMGeoEditor.py:1523 #: flatcamEditors/FlatCAMGrbEditor.py:6029 msgid "No shape selected. Please Select a shape to offset!" msgstr "No shape selected. Please Select a shape to offset!" -#: flatcamEditors/FlatCAMGeoEditor.py:1527 -#: flatcamEditors/FlatCAMGrbEditor.py:6032 flatcamTools/ToolTransform.py:901 +#: flatcamEditors/FlatCAMGeoEditor.py:1526 +#: flatcamEditors/FlatCAMGrbEditor.py:6032 flatcamTools/ToolTransform.py:897 msgid "Applying Offset" msgstr "Applying Offset" -#: flatcamEditors/FlatCAMGeoEditor.py:1537 +#: flatcamEditors/FlatCAMGeoEditor.py:1536 #: flatcamEditors/FlatCAMGrbEditor.py:6053 msgid "Offset on the X axis done" msgstr "Offset on the X axis done" -#: flatcamEditors/FlatCAMGeoEditor.py:1539 +#: flatcamEditors/FlatCAMGeoEditor.py:1538 #: flatcamEditors/FlatCAMGrbEditor.py:6055 msgid "Offset on the Y axis done" msgstr "Offset on the Y axis done" -#: flatcamEditors/FlatCAMGeoEditor.py:1542 +#: flatcamEditors/FlatCAMGeoEditor.py:1541 msgid "Offset action was not executed" msgstr "Offset action was not executed" -#: flatcamEditors/FlatCAMGeoEditor.py:1546 +#: flatcamEditors/FlatCAMGeoEditor.py:1545 #: flatcamEditors/FlatCAMGrbEditor.py:6062 msgid "Rotate ..." msgstr "Rotate ..." -#: flatcamEditors/FlatCAMGeoEditor.py:1547 -#: flatcamEditors/FlatCAMGeoEditor.py:1602 -#: flatcamEditors/FlatCAMGeoEditor.py:1619 +#: flatcamEditors/FlatCAMGeoEditor.py:1546 +#: flatcamEditors/FlatCAMGeoEditor.py:1601 +#: flatcamEditors/FlatCAMGeoEditor.py:1618 #: flatcamEditors/FlatCAMGrbEditor.py:6063 #: flatcamEditors/FlatCAMGrbEditor.py:6112 #: flatcamEditors/FlatCAMGrbEditor.py:6127 msgid "Enter an Angle Value (degrees)" msgstr "Enter an Angle Value (degrees)" -#: flatcamEditors/FlatCAMGeoEditor.py:1556 +#: flatcamEditors/FlatCAMGeoEditor.py:1555 #: flatcamEditors/FlatCAMGrbEditor.py:6071 msgid "Geometry shape rotate done" msgstr "Geometry shape rotate done" -#: flatcamEditors/FlatCAMGeoEditor.py:1560 +#: flatcamEditors/FlatCAMGeoEditor.py:1559 #: flatcamEditors/FlatCAMGrbEditor.py:6074 msgid "Geometry shape rotate cancelled" msgstr "Geometry shape rotate cancelled" -#: flatcamEditors/FlatCAMGeoEditor.py:1565 +#: flatcamEditors/FlatCAMGeoEditor.py:1564 #: flatcamEditors/FlatCAMGrbEditor.py:6079 msgid "Offset on X axis ..." msgstr "Offset on X axis ..." -#: flatcamEditors/FlatCAMGeoEditor.py:1566 -#: flatcamEditors/FlatCAMGeoEditor.py:1585 +#: flatcamEditors/FlatCAMGeoEditor.py:1565 +#: flatcamEditors/FlatCAMGeoEditor.py:1584 #: flatcamEditors/FlatCAMGrbEditor.py:6080 #: flatcamEditors/FlatCAMGrbEditor.py:6097 msgid "Enter a distance Value" msgstr "Enter a distance Value" -#: flatcamEditors/FlatCAMGeoEditor.py:1575 +#: flatcamEditors/FlatCAMGeoEditor.py:1574 #: flatcamEditors/FlatCAMGrbEditor.py:6088 msgid "Geometry shape offset on X axis done" msgstr "Geometry shape offset on X axis done" -#: flatcamEditors/FlatCAMGeoEditor.py:1579 +#: flatcamEditors/FlatCAMGeoEditor.py:1578 #: flatcamEditors/FlatCAMGrbEditor.py:6091 msgid "Geometry shape offset X cancelled" msgstr "Geometry shape offset X cancelled" -#: flatcamEditors/FlatCAMGeoEditor.py:1584 +#: flatcamEditors/FlatCAMGeoEditor.py:1583 #: flatcamEditors/FlatCAMGrbEditor.py:6096 msgid "Offset on Y axis ..." msgstr "Offset on Y axis ..." -#: flatcamEditors/FlatCAMGeoEditor.py:1594 +#: flatcamEditors/FlatCAMGeoEditor.py:1593 #: flatcamEditors/FlatCAMGrbEditor.py:6105 msgid "Geometry shape offset on Y axis done" msgstr "Geometry shape offset on Y axis done" -#: flatcamEditors/FlatCAMGeoEditor.py:1598 +#: flatcamEditors/FlatCAMGeoEditor.py:1597 msgid "Geometry shape offset on Y axis canceled" msgstr "Geometry shape offset on Y axis canceled" -#: flatcamEditors/FlatCAMGeoEditor.py:1601 +#: flatcamEditors/FlatCAMGeoEditor.py:1600 #: flatcamEditors/FlatCAMGrbEditor.py:6111 msgid "Skew on X axis ..." msgstr "Skew on X axis ..." -#: flatcamEditors/FlatCAMGeoEditor.py:1611 +#: flatcamEditors/FlatCAMGeoEditor.py:1610 #: flatcamEditors/FlatCAMGrbEditor.py:6120 msgid "Geometry shape skew on X axis done" msgstr "Geometry shape skew on X axis done" -#: flatcamEditors/FlatCAMGeoEditor.py:1615 +#: flatcamEditors/FlatCAMGeoEditor.py:1614 msgid "Geometry shape skew on X axis canceled" msgstr "Geometry shape skew on X axis canceled" -#: flatcamEditors/FlatCAMGeoEditor.py:1618 +#: flatcamEditors/FlatCAMGeoEditor.py:1617 #: flatcamEditors/FlatCAMGrbEditor.py:6126 msgid "Skew on Y axis ..." msgstr "Skew on Y axis ..." -#: flatcamEditors/FlatCAMGeoEditor.py:1628 +#: flatcamEditors/FlatCAMGeoEditor.py:1627 #: flatcamEditors/FlatCAMGrbEditor.py:6135 msgid "Geometry shape skew on Y axis done" msgstr "Geometry shape skew on Y axis done" -#: flatcamEditors/FlatCAMGeoEditor.py:1632 +#: flatcamEditors/FlatCAMGeoEditor.py:1631 msgid "Geometry shape skew on Y axis canceled" msgstr "Geometry shape skew on Y axis canceled" -#: flatcamEditors/FlatCAMGeoEditor.py:2009 -#: flatcamEditors/FlatCAMGeoEditor.py:2080 +#: flatcamEditors/FlatCAMGeoEditor.py:2008 +#: flatcamEditors/FlatCAMGeoEditor.py:2079 #: flatcamEditors/FlatCAMGrbEditor.py:1435 #: flatcamEditors/FlatCAMGrbEditor.py:1513 msgid "Click on Center point ..." msgstr "Click on Center point ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2022 +#: flatcamEditors/FlatCAMGeoEditor.py:2021 #: flatcamEditors/FlatCAMGrbEditor.py:1445 msgid "Click on Perimeter point to complete ..." msgstr "Click on Perimeter point to complete ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2054 +#: flatcamEditors/FlatCAMGeoEditor.py:2053 msgid "Done. Adding Circle completed." msgstr "Done. Adding Circle completed." -#: flatcamEditors/FlatCAMGeoEditor.py:2108 +#: flatcamEditors/FlatCAMGeoEditor.py:2107 #: flatcamEditors/FlatCAMGrbEditor.py:1546 msgid "Click on Start point ..." msgstr "Click on Start point ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2110 +#: flatcamEditors/FlatCAMGeoEditor.py:2109 #: flatcamEditors/FlatCAMGrbEditor.py:1548 msgid "Click on Point3 ..." msgstr "Click on Point3 ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2112 +#: flatcamEditors/FlatCAMGeoEditor.py:2111 #: flatcamEditors/FlatCAMGrbEditor.py:1550 msgid "Click on Stop point ..." msgstr "Click on Stop point ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2117 +#: flatcamEditors/FlatCAMGeoEditor.py:2116 #: flatcamEditors/FlatCAMGrbEditor.py:1555 msgid "Click on Stop point to complete ..." msgstr "Click on Stop point to complete ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2119 +#: flatcamEditors/FlatCAMGeoEditor.py:2118 #: flatcamEditors/FlatCAMGrbEditor.py:1557 msgid "Click on Point2 to complete ..." msgstr "Click on Point2 to complete ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2121 +#: flatcamEditors/FlatCAMGeoEditor.py:2120 #: flatcamEditors/FlatCAMGrbEditor.py:1559 msgid "Click on Center point to complete ..." msgstr "Click on Center point to complete ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2133 +#: flatcamEditors/FlatCAMGeoEditor.py:2132 #, python-format msgid "Direction: %s" msgstr "Direction: %s" -#: flatcamEditors/FlatCAMGeoEditor.py:2147 +#: flatcamEditors/FlatCAMGeoEditor.py:2146 #: flatcamEditors/FlatCAMGrbEditor.py:1585 msgid "Mode: Start -> Stop -> Center. Click on Start point ..." msgstr "Mode: Start -> Stop -> Center. Click on Start point ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2150 +#: flatcamEditors/FlatCAMGeoEditor.py:2149 #: flatcamEditors/FlatCAMGrbEditor.py:1588 msgid "Mode: Point1 -> Point3 -> Point2. Click on Point1 ..." msgstr "Mode: Point1 -> Point3 -> Point2. Click on Point1 ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2153 +#: flatcamEditors/FlatCAMGeoEditor.py:2152 #: flatcamEditors/FlatCAMGrbEditor.py:1591 msgid "Mode: Center -> Start -> Stop. Click on Center point ..." msgstr "Mode: Center -> Start -> Stop. Click on Center point ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2294 +#: flatcamEditors/FlatCAMGeoEditor.py:2293 msgid "Done. Arc completed." msgstr "Done. Arc completed." -#: flatcamEditors/FlatCAMGeoEditor.py:2325 -#: flatcamEditors/FlatCAMGeoEditor.py:2398 +#: flatcamEditors/FlatCAMGeoEditor.py:2324 +#: flatcamEditors/FlatCAMGeoEditor.py:2397 msgid "Click on 1st corner ..." msgstr "Click on 1st corner ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2337 +#: flatcamEditors/FlatCAMGeoEditor.py:2336 msgid "Click on opposite corner to complete ..." msgstr "Click on opposite corner to complete ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2367 +#: flatcamEditors/FlatCAMGeoEditor.py:2366 msgid "Done. Rectangle completed." msgstr "Done. Rectangle completed." -#: flatcamEditors/FlatCAMGeoEditor.py:2411 flatcamTools/ToolNCC.py:1728 +#: flatcamEditors/FlatCAMGeoEditor.py:2410 flatcamTools/ToolNCC.py:1728 #: flatcamTools/ToolPaint.py:1623 msgid "Click on next Point or click right mouse button to complete ..." msgstr "Click on next Point or click right mouse button to complete ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2442 +#: flatcamEditors/FlatCAMGeoEditor.py:2441 msgid "Done. Polygon completed." msgstr "Done. Polygon completed." -#: flatcamEditors/FlatCAMGeoEditor.py:2456 -#: flatcamEditors/FlatCAMGeoEditor.py:2521 +#: flatcamEditors/FlatCAMGeoEditor.py:2455 +#: flatcamEditors/FlatCAMGeoEditor.py:2520 #: flatcamEditors/FlatCAMGrbEditor.py:1111 #: flatcamEditors/FlatCAMGrbEditor.py:1322 msgid "Backtracked one point ..." msgstr "Backtracked one point ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2499 +#: flatcamEditors/FlatCAMGeoEditor.py:2498 msgid "Done. Path completed." msgstr "Done. Path completed." -#: flatcamEditors/FlatCAMGeoEditor.py:2658 +#: flatcamEditors/FlatCAMGeoEditor.py:2657 msgid "No shape selected. Select a shape to explode" msgstr "No shape selected. Select a shape to explode" -#: flatcamEditors/FlatCAMGeoEditor.py:2691 +#: flatcamEditors/FlatCAMGeoEditor.py:2690 msgid "Done. Polygons exploded into lines." msgstr "Done. Polygons exploded into lines." -#: flatcamEditors/FlatCAMGeoEditor.py:2723 +#: flatcamEditors/FlatCAMGeoEditor.py:2722 msgid "MOVE: No shape selected. Select a shape to move" msgstr "MOVE: No shape selected. Select a shape to move" -#: flatcamEditors/FlatCAMGeoEditor.py:2726 -#: flatcamEditors/FlatCAMGeoEditor.py:2746 +#: flatcamEditors/FlatCAMGeoEditor.py:2725 +#: flatcamEditors/FlatCAMGeoEditor.py:2745 msgid " MOVE: Click on reference point ..." msgstr " MOVE: Click on reference point ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2731 +#: flatcamEditors/FlatCAMGeoEditor.py:2730 msgid " Click on destination point ..." msgstr " Click on destination point ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2771 +#: flatcamEditors/FlatCAMGeoEditor.py:2770 msgid "Done. Geometry(s) Move completed." msgstr "Done. Geometry(s) Move completed." -#: flatcamEditors/FlatCAMGeoEditor.py:2904 +#: flatcamEditors/FlatCAMGeoEditor.py:2903 msgid "Done. Geometry(s) Copy completed." msgstr "Done. Geometry(s) Copy completed." -#: flatcamEditors/FlatCAMGeoEditor.py:2935 +#: flatcamEditors/FlatCAMGeoEditor.py:2934 #: flatcamEditors/FlatCAMGrbEditor.py:897 msgid "Click on 1st point ..." msgstr "Click on 1st point ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2959 +#: flatcamEditors/FlatCAMGeoEditor.py:2958 msgid "" "Font not supported. Only Regular, Bold, Italic and BoldItalic are supported. " "Error" @@ -4641,105 +4225,105 @@ msgstr "" "Font not supported. Only Regular, Bold, Italic and BoldItalic are supported. " "Error" -#: flatcamEditors/FlatCAMGeoEditor.py:2967 +#: flatcamEditors/FlatCAMGeoEditor.py:2966 msgid "No text to add." msgstr "No text to add." -#: flatcamEditors/FlatCAMGeoEditor.py:2977 +#: flatcamEditors/FlatCAMGeoEditor.py:2976 msgid " Done. Adding Text completed." msgstr " Done. Adding Text completed." -#: flatcamEditors/FlatCAMGeoEditor.py:3014 +#: flatcamEditors/FlatCAMGeoEditor.py:3013 msgid "Create buffer geometry ..." msgstr "Create buffer geometry ..." -#: flatcamEditors/FlatCAMGeoEditor.py:3049 +#: flatcamEditors/FlatCAMGeoEditor.py:3048 #: flatcamEditors/FlatCAMGrbEditor.py:4994 msgid "Done. Buffer Tool completed." msgstr "Done. Buffer Tool completed." -#: flatcamEditors/FlatCAMGeoEditor.py:3077 +#: flatcamEditors/FlatCAMGeoEditor.py:3076 msgid "Done. Buffer Int Tool completed." msgstr "Done. Buffer Int Tool completed." -#: flatcamEditors/FlatCAMGeoEditor.py:3105 +#: flatcamEditors/FlatCAMGeoEditor.py:3104 msgid "Done. Buffer Ext Tool completed." msgstr "Done. Buffer Ext Tool completed." -#: flatcamEditors/FlatCAMGeoEditor.py:3154 +#: flatcamEditors/FlatCAMGeoEditor.py:3153 #: flatcamEditors/FlatCAMGrbEditor.py:2151 msgid "Select a shape to act as deletion area ..." msgstr "Select a shape to act as deletion area ..." -#: flatcamEditors/FlatCAMGeoEditor.py:3156 -#: flatcamEditors/FlatCAMGeoEditor.py:3182 -#: flatcamEditors/FlatCAMGeoEditor.py:3188 +#: flatcamEditors/FlatCAMGeoEditor.py:3155 +#: flatcamEditors/FlatCAMGeoEditor.py:3181 +#: flatcamEditors/FlatCAMGeoEditor.py:3187 #: flatcamEditors/FlatCAMGrbEditor.py:2153 msgid "Click to pick-up the erase shape..." msgstr "Click to pick-up the erase shape..." -#: flatcamEditors/FlatCAMGeoEditor.py:3192 +#: flatcamEditors/FlatCAMGeoEditor.py:3191 #: flatcamEditors/FlatCAMGrbEditor.py:2212 msgid "Click to erase ..." msgstr "Click to erase ..." -#: flatcamEditors/FlatCAMGeoEditor.py:3221 +#: flatcamEditors/FlatCAMGeoEditor.py:3220 #: flatcamEditors/FlatCAMGrbEditor.py:2245 msgid "Done. Eraser tool action completed." msgstr "Done. Eraser tool action completed." -#: flatcamEditors/FlatCAMGeoEditor.py:3271 +#: flatcamEditors/FlatCAMGeoEditor.py:3270 msgid "Create Paint geometry ..." msgstr "Create Paint geometry ..." -#: flatcamEditors/FlatCAMGeoEditor.py:3284 +#: flatcamEditors/FlatCAMGeoEditor.py:3283 #: flatcamEditors/FlatCAMGrbEditor.py:2408 msgid "Shape transformations ..." msgstr "Shape transformations ..." -#: flatcamEditors/FlatCAMGeoEditor.py:3340 flatcamGUI/PreferencesUI.py:4636 +#: flatcamEditors/FlatCAMGeoEditor.py:3339 flatcamGUI/PreferencesUI.py:4636 msgid "Geometry Editor" msgstr "Geometry Editor" -#: flatcamEditors/FlatCAMGeoEditor.py:3346 +#: flatcamEditors/FlatCAMGeoEditor.py:3345 #: flatcamEditors/FlatCAMGrbEditor.py:2486 #: flatcamEditors/FlatCAMGrbEditor.py:3846 flatcamGUI/ObjectUI.py:262 -#: flatcamGUI/ObjectUI.py:1495 flatcamGUI/ObjectUI.py:2244 -#: flatcamTools/ToolCutOut.py:96 +#: flatcamGUI/ObjectUI.py:1496 flatcamGUI/ObjectUI.py:2245 +#: flatcamTools/ToolCutOut.py:95 msgid "Type" msgstr "Type" -#: flatcamEditors/FlatCAMGeoEditor.py:3346 flatcamGUI/ObjectUI.py:217 -#: flatcamGUI/ObjectUI.py:741 flatcamGUI/ObjectUI.py:1431 -#: flatcamGUI/ObjectUI.py:2153 flatcamGUI/ObjectUI.py:2457 -#: flatcamGUI/ObjectUI.py:2524 flatcamTools/ToolCalibration.py:234 +#: flatcamEditors/FlatCAMGeoEditor.py:3345 flatcamGUI/ObjectUI.py:217 +#: flatcamGUI/ObjectUI.py:741 flatcamGUI/ObjectUI.py:1432 +#: flatcamGUI/ObjectUI.py:2154 flatcamGUI/ObjectUI.py:2458 +#: flatcamGUI/ObjectUI.py:2525 flatcamTools/ToolCalibration.py:234 #: flatcamTools/ToolFiducials.py:73 msgid "Name" msgstr "Name" -#: flatcamEditors/FlatCAMGeoEditor.py:3588 +#: flatcamEditors/FlatCAMGeoEditor.py:3587 msgid "Ring" msgstr "Ring" -#: flatcamEditors/FlatCAMGeoEditor.py:3590 +#: flatcamEditors/FlatCAMGeoEditor.py:3589 msgid "Line" msgstr "Line" -#: flatcamEditors/FlatCAMGeoEditor.py:3592 flatcamGUI/FlatCAMGUI.py:2187 +#: flatcamEditors/FlatCAMGeoEditor.py:3591 flatcamGUI/FlatCAMGUI.py:2187 #: flatcamGUI/PreferencesUI.py:5607 flatcamGUI/PreferencesUI.py:6131 #: flatcamTools/ToolNCC.py:584 flatcamTools/ToolPaint.py:528 msgid "Polygon" msgstr "Polygon" -#: flatcamEditors/FlatCAMGeoEditor.py:3594 +#: flatcamEditors/FlatCAMGeoEditor.py:3593 msgid "Multi-Line" msgstr "Multi-Line" -#: flatcamEditors/FlatCAMGeoEditor.py:3596 +#: flatcamEditors/FlatCAMGeoEditor.py:3595 msgid "Multi-Polygon" msgstr "Multi-Polygon" -#: flatcamEditors/FlatCAMGeoEditor.py:3603 +#: flatcamEditors/FlatCAMGeoEditor.py:3602 msgid "Geo Elem" msgstr "Geo Elem" @@ -4992,8 +4576,8 @@ msgstr "Code" #: flatcamEditors/FlatCAMGrbEditor.py:3846 flatcamGUI/ObjectUI.py:262 #: flatcamGUI/PreferencesUI.py:1184 flatcamGUI/PreferencesUI.py:7776 #: flatcamGUI/PreferencesUI.py:7805 flatcamGUI/PreferencesUI.py:7907 -#: flatcamTools/ToolCopperThieving.py:262 -#: flatcamTools/ToolCopperThieving.py:302 flatcamTools/ToolFiducials.py:156 +#: flatcamTools/ToolCopperThieving.py:261 +#: flatcamTools/ToolCopperThieving.py:301 flatcamTools/ToolFiducials.py:156 msgid "Size" msgstr "Size" @@ -5114,23 +4698,29 @@ msgid "Buffer corner" msgstr "Buffer corner" #: flatcamEditors/FlatCAMGrbEditor.py:2622 +#| msgid "" +#| "There are 3 types of corners:\n" +#| " - 'Round': the corner is rounded.\n" +#| " - 'Square:' the corner is met in a sharp angle.\n" +#| " - 'Beveled:' the corner is a line that directly connects the features " +#| "meeting in the corner" msgid "" "There are 3 types of corners:\n" " - 'Round': the corner is rounded.\n" -" - 'Square:' the corner is met in a sharp angle.\n" -" - 'Beveled:' the corner is a line that directly connects the features " +" - 'Square': the corner is met in a sharp angle.\n" +" - 'Beveled': the corner is a line that directly connects the features " "meeting in the corner" msgstr "" "There are 3 types of corners:\n" " - 'Round': the corner is rounded.\n" -" - 'Square:' the corner is met in a sharp angle.\n" -" - 'Beveled:' the corner is a line that directly connects the features " +" - 'Square': the corner is met in a sharp angle.\n" +" - 'Beveled': the corner is a line that directly connects the features " "meeting in the corner" #: flatcamEditors/FlatCAMGrbEditor.py:2637 flatcamGUI/FlatCAMGUI.py:1046 #: flatcamGUI/FlatCAMGUI.py:2123 flatcamGUI/FlatCAMGUI.py:2195 #: flatcamGUI/FlatCAMGUI.py:2238 flatcamGUI/FlatCAMGUI.py:2721 -#: flatcamGUI/PreferencesUI.py:6880 flatcamTools/ToolTransform.py:30 +#: flatcamGUI/PreferencesUI.py:6880 flatcamTools/ToolTransform.py:29 msgid "Buffer" msgstr "Buffer" @@ -5418,7 +5008,7 @@ msgid "String to replace the one in the Find box throughout the text." msgstr "String to replace the one in the Find box throughout the text." #: flatcamEditors/FlatCAMTextEditor.py:95 flatcamGUI/ObjectUI.py:485 -#: flatcamGUI/ObjectUI.py:2137 flatcamGUI/PreferencesUI.py:2250 +#: flatcamGUI/ObjectUI.py:2138 flatcamGUI/PreferencesUI.py:2250 #: flatcamGUI/PreferencesUI.py:4712 msgid "All" msgstr "All" @@ -5472,6 +5062,15 @@ msgstr "Open file" msgid "Export Code ..." msgstr "Export Code ..." +#: flatcamEditors/FlatCAMTextEditor.py:272 flatcamObjects/FlatCAMCNCJob.py:954 +#: flatcamTools/ToolSolderPaste.py:1530 +msgid "No such file or directory" +msgstr "No such file or directory" + +#: flatcamEditors/FlatCAMTextEditor.py:284 flatcamObjects/FlatCAMCNCJob.py:968 +msgid "Saved to" +msgstr "Saved to" + #: flatcamEditors/FlatCAMTextEditor.py:334 msgid "Code Editor content copied to clipboard ..." msgstr "Code Editor content copied to clipboard ..." @@ -6130,6 +5729,16 @@ msgstr "Generate CNC" msgid "View Source" msgstr "View Source" +#: flatcamGUI/FlatCAMGUI.py:734 flatcamGUI/FlatCAMGUI.py:848 +#: flatcamGUI/FlatCAMGUI.py:1057 flatcamGUI/FlatCAMGUI.py:2123 +#: flatcamGUI/FlatCAMGUI.py:2267 flatcamGUI/FlatCAMGUI.py:2532 +#: flatcamGUI/FlatCAMGUI.py:2731 flatcamGUI/ObjectUI.py:1616 +#: flatcamObjects/FlatCAMGeometry.py:477 flatcamTools/ToolPanelize.py:541 +#: flatcamTools/ToolPanelize.py:568 flatcamTools/ToolPanelize.py:667 +#: flatcamTools/ToolPanelize.py:701 flatcamTools/ToolPanelize.py:766 +msgid "Copy" +msgstr "Copy" + #: flatcamGUI/FlatCAMGUI.py:742 flatcamGUI/FlatCAMGUI.py:2280 #: flatcamTools/ToolProperties.py:31 msgid "Properties" @@ -6269,12 +5878,12 @@ msgid "Extract Drills Tool" msgstr "Extract Drills Tool" #: flatcamGUI/FlatCAMGUI.py:905 flatcamGUI/ObjectUI.py:595 -#: flatcamTools/ToolCutOut.py:447 +#: flatcamTools/ToolCutOut.py:446 msgid "Cutout Tool" msgstr "Cutout Tool" #: flatcamGUI/FlatCAMGUI.py:907 flatcamGUI/FlatCAMGUI.py:2586 -#: flatcamGUI/ObjectUI.py:573 flatcamGUI/ObjectUI.py:2075 +#: flatcamGUI/ObjectUI.py:573 flatcamGUI/ObjectUI.py:2076 #: flatcamTools/ToolNCC.py:974 msgid "NCC Tool" msgstr "NCC Tool" @@ -6304,8 +5913,8 @@ msgid "Rules Tool" msgstr "Rules Tool" #: flatcamGUI/FlatCAMGUI.py:923 flatcamGUI/FlatCAMGUI.py:1728 -#: flatcamGUI/FlatCAMGUI.py:2602 flatcamTools/ToolOptimal.py:34 -#: flatcamTools/ToolOptimal.py:308 +#: flatcamGUI/FlatCAMGUI.py:2602 flatcamTools/ToolOptimal.py:33 +#: flatcamTools/ToolOptimal.py:307 msgid "Optimal Tool" msgstr "Optimal Tool" @@ -6321,7 +5930,7 @@ msgid "QRCode Tool" msgstr "QRCode Tool" #: flatcamGUI/FlatCAMGUI.py:934 flatcamGUI/FlatCAMGUI.py:2613 -#: flatcamTools/ToolCopperThieving.py:40 flatcamTools/ToolCopperThieving.py:569 +#: flatcamTools/ToolCopperThieving.py:39 flatcamTools/ToolCopperThieving.py:568 msgid "Copper Thieving Tool" msgstr "Copper Thieving Tool" @@ -6499,7 +6108,7 @@ msgstr "Mark Area" #: flatcamGUI/FlatCAMGUI.py:1064 flatcamGUI/FlatCAMGUI.py:2124 #: flatcamGUI/FlatCAMGUI.py:2215 flatcamGUI/FlatCAMGUI.py:2278 -#: flatcamGUI/FlatCAMGUI.py:2738 flatcamTools/ToolMove.py:28 +#: flatcamGUI/FlatCAMGUI.py:2738 flatcamTools/ToolMove.py:27 msgid "Move" msgstr "Move" @@ -6544,18 +6153,18 @@ msgstr "Plot Area" msgid "General" msgstr "General" -#: flatcamGUI/FlatCAMGUI.py:1212 flatcamTools/ToolCopperThieving.py:75 -#: flatcamTools/ToolDblSided.py:65 flatcamTools/ToolExtractDrills.py:61 -#: flatcamTools/ToolInvertGerber.py:72 flatcamTools/ToolOptimal.py:72 +#: flatcamGUI/FlatCAMGUI.py:1212 flatcamTools/ToolCopperThieving.py:74 +#: flatcamTools/ToolDblSided.py:64 flatcamTools/ToolExtractDrills.py:61 +#: flatcamTools/ToolInvertGerber.py:72 flatcamTools/ToolOptimal.py:71 #: flatcamTools/ToolPunchGerber.py:64 msgid "GERBER" msgstr "GERBER" -#: flatcamGUI/FlatCAMGUI.py:1222 flatcamTools/ToolDblSided.py:93 +#: flatcamGUI/FlatCAMGUI.py:1222 flatcamTools/ToolDblSided.py:92 msgid "EXCELLON" msgstr "EXCELLON" -#: flatcamGUI/FlatCAMGUI.py:1232 flatcamTools/ToolDblSided.py:121 +#: flatcamGUI/FlatCAMGUI.py:1232 flatcamTools/ToolDblSided.py:120 msgid "GEOMETRY" msgstr "GEOMETRY" @@ -6564,7 +6173,7 @@ msgid "CNC-JOB" msgstr "CNC-JOB" #: flatcamGUI/FlatCAMGUI.py:1251 flatcamGUI/ObjectUI.py:562 -#: flatcamGUI/ObjectUI.py:2050 +#: flatcamGUI/ObjectUI.py:2051 msgid "TOOLS" msgstr "TOOLS" @@ -7074,16 +6683,33 @@ msgstr "Toggle Visibility" msgid "New" msgstr "New" +#: flatcamGUI/FlatCAMGUI.py:2154 flatcamGUI/ObjectUI.py:449 +#: flatcamObjects/FlatCAMGerber.py:238 flatcamObjects/FlatCAMGerber.py:326 +#: flatcamTools/ToolCalibration.py:631 flatcamTools/ToolCalibration.py:648 +#: flatcamTools/ToolCalibration.py:815 flatcamTools/ToolCopperThieving.py:144 +#: flatcamTools/ToolCopperThieving.py:158 +#: flatcamTools/ToolCopperThieving.py:604 flatcamTools/ToolCutOut.py:92 +#: flatcamTools/ToolDblSided.py:226 flatcamTools/ToolFilm.py:69 +#: flatcamTools/ToolFilm.py:102 flatcamTools/ToolFilm.py:549 +#: flatcamTools/ToolFilm.py:557 flatcamTools/ToolImage.py:49 +#: flatcamTools/ToolImage.py:271 flatcamTools/ToolNCC.py:95 +#: flatcamTools/ToolNCC.py:558 flatcamTools/ToolNCC.py:1295 +#: flatcamTools/ToolPaint.py:502 flatcamTools/ToolPaint.py:706 +#: flatcamTools/ToolPanelize.py:116 flatcamTools/ToolPanelize.py:372 +#: flatcamTools/ToolPanelize.py:389 +msgid "Geometry" +msgstr "Geometry" + #: flatcamGUI/FlatCAMGUI.py:2158 flatcamGUI/PreferencesUI.py:8410 #: flatcamTools/ToolAlignObjects.py:74 flatcamTools/ToolAlignObjects.py:110 #: flatcamTools/ToolCalibration.py:197 flatcamTools/ToolCalibration.py:631 #: flatcamTools/ToolCalibration.py:648 flatcamTools/ToolCalibration.py:807 -#: flatcamTools/ToolCalibration.py:815 flatcamTools/ToolCopperThieving.py:145 -#: flatcamTools/ToolCopperThieving.py:159 -#: flatcamTools/ToolCopperThieving.py:605 flatcamTools/ToolDblSided.py:226 +#: flatcamTools/ToolCalibration.py:815 flatcamTools/ToolCopperThieving.py:144 +#: flatcamTools/ToolCopperThieving.py:158 +#: flatcamTools/ToolCopperThieving.py:604 flatcamTools/ToolDblSided.py:225 #: flatcamTools/ToolFilm.py:359 flatcamTools/ToolNCC.py:558 #: flatcamTools/ToolNCC.py:1295 flatcamTools/ToolPaint.py:502 -#: flatcamTools/ToolPaint.py:706 flatcamTools/ToolPanelize.py:374 +#: flatcamTools/ToolPaint.py:706 flatcamTools/ToolPanelize.py:372 #: flatcamTools/ToolPunchGerber.py:149 flatcamTools/ToolPunchGerber.py:164 msgid "Excellon" msgstr "Excellon" @@ -7132,7 +6758,7 @@ msgstr "Intersection" msgid "Subtraction" msgstr "Subtraction" -#: flatcamGUI/FlatCAMGUI.py:2209 flatcamGUI/ObjectUI.py:2139 +#: flatcamGUI/FlatCAMGUI.py:2209 flatcamGUI/ObjectUI.py:2140 #: flatcamGUI/PreferencesUI.py:4714 msgid "Cut" msgstr "Cut" @@ -7292,7 +6918,7 @@ msgid "Exit" msgstr "Exit" #: flatcamGUI/GUIElements.py:2513 flatcamGUI/PreferencesUI.py:6313 -#: flatcamTools/ToolDblSided.py:174 flatcamTools/ToolDblSided.py:389 +#: flatcamTools/ToolDblSided.py:173 flatcamTools/ToolDblSided.py:388 #: flatcamTools/ToolFilm.py:219 msgid "Reference" msgstr "Reference" @@ -7335,6 +6961,10 @@ msgstr "" msgid "Save Log" msgstr "Save Log" +#: flatcamGUI/GUIElements.py:2592 flatcamTools/ToolShell.py:285 +msgid "Type >help< to get started" +msgstr "Type >help< to get started" + #: flatcamGUI/ObjectUI.py:38 msgid "FlatCAM Object" msgstr "FlatCAM Object" @@ -7394,7 +7024,7 @@ msgid "Gerber Object" msgstr "Gerber Object" #: flatcamGUI/ObjectUI.py:186 flatcamGUI/ObjectUI.py:729 -#: flatcamGUI/ObjectUI.py:1424 flatcamGUI/ObjectUI.py:2123 +#: flatcamGUI/ObjectUI.py:1425 flatcamGUI/ObjectUI.py:2124 #: flatcamGUI/PreferencesUI.py:1940 flatcamGUI/PreferencesUI.py:2856 #: flatcamGUI/PreferencesUI.py:4121 flatcamGUI/PreferencesUI.py:4688 msgid "Plot Options" @@ -7402,7 +7032,7 @@ msgstr "Plot Options" #: flatcamGUI/ObjectUI.py:192 flatcamGUI/ObjectUI.py:730 #: flatcamGUI/PreferencesUI.py:1947 flatcamGUI/PreferencesUI.py:2868 -#: flatcamGUI/PreferencesUI.py:7728 flatcamTools/ToolCopperThieving.py:192 +#: flatcamGUI/PreferencesUI.py:7728 flatcamTools/ToolCopperThieving.py:191 msgid "Solid" msgstr "Solid" @@ -7425,7 +7055,7 @@ msgid "Plot" msgstr "Plot" #: flatcamGUI/ObjectUI.py:210 flatcamGUI/ObjectUI.py:770 -#: flatcamGUI/ObjectUI.py:1484 flatcamGUI/ObjectUI.py:2233 +#: flatcamGUI/ObjectUI.py:1485 flatcamGUI/ObjectUI.py:2234 #: flatcamGUI/PreferencesUI.py:1963 flatcamGUI/PreferencesUI.py:4127 #: flatcamGUI/PreferencesUI.py:4699 msgid "Plot (show) this object." @@ -7487,7 +7117,7 @@ msgstr "" msgid "V-Shape" msgstr "V-Shape" -#: flatcamGUI/ObjectUI.py:322 flatcamGUI/ObjectUI.py:1670 +#: flatcamGUI/ObjectUI.py:322 flatcamGUI/ObjectUI.py:1671 #: flatcamGUI/PreferencesUI.py:2411 flatcamGUI/PreferencesUI.py:5351 #: flatcamGUI/PreferencesUI.py:5917 flatcamGUI/PreferencesUI.py:5924 #: flatcamTools/ToolNCC.py:233 flatcamTools/ToolNCC.py:240 @@ -7495,14 +7125,14 @@ msgstr "V-Shape" msgid "V-Tip Dia" msgstr "V-Tip Dia" -#: flatcamGUI/ObjectUI.py:324 flatcamGUI/ObjectUI.py:1673 +#: flatcamGUI/ObjectUI.py:324 flatcamGUI/ObjectUI.py:1674 #: flatcamGUI/PreferencesUI.py:2413 flatcamGUI/PreferencesUI.py:5353 #: flatcamGUI/PreferencesUI.py:5919 flatcamTools/ToolNCC.py:235 #: flatcamTools/ToolPaint.py:218 msgid "The tip diameter for V-Shape Tool" msgstr "The tip diameter for V-Shape Tool" -#: flatcamGUI/ObjectUI.py:335 flatcamGUI/ObjectUI.py:1685 +#: flatcamGUI/ObjectUI.py:335 flatcamGUI/ObjectUI.py:1686 #: flatcamGUI/PreferencesUI.py:2424 flatcamGUI/PreferencesUI.py:5363 #: flatcamGUI/PreferencesUI.py:5930 flatcamGUI/PreferencesUI.py:5938 #: flatcamTools/ToolNCC.py:246 flatcamTools/ToolNCC.py:254 @@ -7510,7 +7140,7 @@ msgstr "The tip diameter for V-Shape Tool" msgid "V-Tip Angle" msgstr "V-Tip Angle" -#: flatcamGUI/ObjectUI.py:337 flatcamGUI/ObjectUI.py:1688 +#: flatcamGUI/ObjectUI.py:337 flatcamGUI/ObjectUI.py:1689 #: flatcamGUI/PreferencesUI.py:2426 flatcamGUI/PreferencesUI.py:5365 #: flatcamGUI/PreferencesUI.py:5932 flatcamTools/ToolNCC.py:248 #: flatcamTools/ToolPaint.py:231 @@ -7521,9 +7151,9 @@ msgstr "" "The tip angle for V-Shape Tool.\n" "In degree." -#: flatcamGUI/ObjectUI.py:351 flatcamGUI/ObjectUI.py:1704 +#: flatcamGUI/ObjectUI.py:351 flatcamGUI/ObjectUI.py:1705 #: flatcamGUI/PreferencesUI.py:2439 flatcamGUI/PreferencesUI.py:4243 -#: flatcamGUI/PreferencesUI.py:5669 flatcamTools/ToolCutOut.py:142 +#: flatcamGUI/PreferencesUI.py:5669 flatcamTools/ToolCutOut.py:141 msgid "" "Cutting depth (negative)\n" "below the copper surface." @@ -7612,6 +7242,26 @@ msgstr "" "by checking this, the area of the object bellow\n" "will be subtracted from the isolation geometry." +#: flatcamGUI/ObjectUI.py:449 flatcamGUI/PreferencesUI.py:6527 +#: flatcamObjects/FlatCAMGerber.py:238 flatcamObjects/FlatCAMGerber.py:326 +#: flatcamTools/ToolAlignObjects.py:73 flatcamTools/ToolAlignObjects.py:109 +#: flatcamTools/ToolCalibration.py:196 flatcamTools/ToolCalibration.py:631 +#: flatcamTools/ToolCalibration.py:648 flatcamTools/ToolCalibration.py:807 +#: flatcamTools/ToolCalibration.py:815 flatcamTools/ToolCopperThieving.py:144 +#: flatcamTools/ToolCopperThieving.py:158 +#: flatcamTools/ToolCopperThieving.py:604 flatcamTools/ToolCutOut.py:91 +#: flatcamTools/ToolDblSided.py:224 flatcamTools/ToolFilm.py:69 +#: flatcamTools/ToolFilm.py:102 flatcamTools/ToolFilm.py:549 +#: flatcamTools/ToolFilm.py:557 flatcamTools/ToolImage.py:49 +#: flatcamTools/ToolImage.py:252 flatcamTools/ToolImage.py:273 +#: flatcamTools/ToolNCC.py:96 flatcamTools/ToolNCC.py:558 +#: flatcamTools/ToolNCC.py:1295 flatcamTools/ToolPaint.py:502 +#: flatcamTools/ToolPaint.py:706 flatcamTools/ToolPanelize.py:116 +#: flatcamTools/ToolPanelize.py:202 flatcamTools/ToolPanelize.py:372 +#: flatcamTools/ToolPanelize.py:389 +msgid "Gerber" +msgstr "Gerber" + #: flatcamGUI/ObjectUI.py:456 flatcamTools/ToolNCC.py:86 #: flatcamTools/ToolPaint.py:80 msgid "Obj Type" @@ -7631,7 +7281,7 @@ msgstr "" #: flatcamGUI/ObjectUI.py:471 flatcamGUI/PreferencesUI.py:8028 #: flatcamTools/ToolCalibration.py:186 flatcamTools/ToolNCC.py:109 -#: flatcamTools/ToolPaint.py:103 flatcamTools/ToolPanelize.py:100 +#: flatcamTools/ToolPaint.py:103 flatcamTools/ToolPanelize.py:98 #: flatcamTools/ToolQRCode.py:78 msgid "Object" msgstr "Object" @@ -7752,7 +7402,7 @@ msgstr "" "Create a Geometry object with\n" "toolpaths to cut all non-copper regions." -#: flatcamGUI/ObjectUI.py:575 flatcamGUI/ObjectUI.py:2077 +#: flatcamGUI/ObjectUI.py:575 flatcamGUI/ObjectUI.py:2078 #: flatcamTools/ToolNCC.py:599 msgid "" "Create the Geometry Object\n" @@ -7828,12 +7478,12 @@ msgid "Resulting geometry will have rounded corners." msgstr "Resulting geometry will have rounded corners." #: flatcamGUI/ObjectUI.py:650 flatcamGUI/ObjectUI.py:691 -#: flatcamTools/ToolSolderPaste.py:135 +#: flatcamTools/ToolSolderPaste.py:134 msgid "Generate Geo" msgstr "Generate Geo" #: flatcamGUI/ObjectUI.py:660 flatcamGUI/PreferencesUI.py:2322 -#: flatcamGUI/PreferencesUI.py:7558 flatcamTools/ToolPanelize.py:101 +#: flatcamGUI/PreferencesUI.py:7558 flatcamTools/ToolPanelize.py:99 #: flatcamTools/ToolQRCode.py:192 msgid "Bounding Box" msgstr "Bounding Box" @@ -7879,13 +7529,13 @@ msgid "Solid circles." msgstr "Solid circles." #: flatcamGUI/ObjectUI.py:780 flatcamGUI/ObjectUI.py:875 -#: flatcamGUI/ObjectUI.py:2254 flatcamGUI/PreferencesUI.py:3289 +#: flatcamGUI/ObjectUI.py:2255 flatcamGUI/PreferencesUI.py:3289 #: flatcamTools/ToolProperties.py:166 msgid "Drills" msgstr "Drills" #: flatcamGUI/ObjectUI.py:780 flatcamGUI/ObjectUI.py:876 -#: flatcamGUI/ObjectUI.py:2254 flatcamGUI/PreferencesUI.py:3290 +#: flatcamGUI/ObjectUI.py:2255 flatcamGUI/PreferencesUI.py:3290 #: flatcamGUI/PreferencesUI.py:3961 flatcamTools/ToolProperties.py:168 msgid "Slots" msgstr "Slots" @@ -7904,7 +7554,7 @@ msgstr "" "\n" "Here the tools are selected for G-code generation." -#: flatcamGUI/ObjectUI.py:790 flatcamGUI/ObjectUI.py:1508 +#: flatcamGUI/ObjectUI.py:790 flatcamGUI/ObjectUI.py:1509 #: flatcamTools/ToolPaint.py:142 msgid "" "Tool Diameter. It's value (in current FlatCAM units) \n" @@ -7937,7 +7587,19 @@ msgstr "" "Toggle display of the drills for the current tool.\n" "This does not select the tools for G-code generation." -#: flatcamGUI/ObjectUI.py:820 flatcamGUI/ObjectUI.py:1663 +#: flatcamGUI/ObjectUI.py:817 flatcamGUI/ObjectUI.py:1661 +#: flatcamObjects/FlatCAMExcellon.py:514 flatcamObjects/FlatCAMExcellon.py:726 +#: flatcamObjects/FlatCAMExcellon.py:742 flatcamObjects/FlatCAMExcellon.py:746 +#: flatcamObjects/FlatCAMGeometry.py:306 flatcamObjects/FlatCAMGeometry.py:731 +#: flatcamObjects/FlatCAMGeometry.py:767 flatcamTools/ToolNCC.py:331 +#: flatcamTools/ToolNCC.py:797 flatcamTools/ToolNCC.py:811 +#: flatcamTools/ToolNCC.py:1191 flatcamTools/ToolPaint.py:314 +#: flatcamTools/ToolPaint.py:767 flatcamTools/ToolPaint.py:779 +#: flatcamTools/ToolPaint.py:1166 +msgid "Parameters for" +msgstr "Parameters for" + +#: flatcamGUI/ObjectUI.py:820 flatcamGUI/ObjectUI.py:1664 #: flatcamTools/ToolNCC.py:334 flatcamTools/ToolPaint.py:317 msgid "" "The data used for creating GCode.\n" @@ -7997,15 +7659,15 @@ msgstr "" "Drill depth (negative)\n" "below the copper surface." -#: flatcamGUI/ObjectUI.py:920 flatcamGUI/ObjectUI.py:1722 +#: flatcamGUI/ObjectUI.py:920 flatcamGUI/ObjectUI.py:1723 #: flatcamGUI/PreferencesUI.py:3331 flatcamGUI/PreferencesUI.py:4261 -#: flatcamGUI/PreferencesUI.py:5687 flatcamTools/ToolCutOut.py:160 +#: flatcamGUI/PreferencesUI.py:5687 flatcamTools/ToolCutOut.py:159 msgid "Multi-Depth" msgstr "Multi-Depth" -#: flatcamGUI/ObjectUI.py:923 flatcamGUI/ObjectUI.py:1725 +#: flatcamGUI/ObjectUI.py:923 flatcamGUI/ObjectUI.py:1726 #: flatcamGUI/PreferencesUI.py:3334 flatcamGUI/PreferencesUI.py:4264 -#: flatcamGUI/PreferencesUI.py:5690 flatcamTools/ToolCutOut.py:163 +#: flatcamGUI/PreferencesUI.py:5690 flatcamTools/ToolCutOut.py:162 msgid "" "Use multiple passes to limit\n" "the cut depth in each pass. Will\n" @@ -8017,9 +7679,9 @@ msgstr "" "cut multiple times until Cut Z is\n" "reached." -#: flatcamGUI/ObjectUI.py:936 flatcamGUI/ObjectUI.py:1739 +#: flatcamGUI/ObjectUI.py:936 flatcamGUI/ObjectUI.py:1740 #: flatcamGUI/PreferencesUI.py:3346 flatcamGUI/PreferencesUI.py:5702 -#: flatcamTools/ToolCutOut.py:177 +#: flatcamTools/ToolCutOut.py:176 msgid "Depth of each pass (positive)." msgstr "Depth of each pass (positive)." @@ -8031,7 +7693,7 @@ msgstr "" "Tool height when travelling\n" "across the XY plane." -#: flatcamGUI/ObjectUI.py:968 flatcamGUI/ObjectUI.py:1769 +#: flatcamGUI/ObjectUI.py:968 flatcamGUI/ObjectUI.py:1770 #: flatcamGUI/PreferencesUI.py:4380 msgid "" "Cutting speed in the XY\n" @@ -8052,7 +7714,7 @@ msgstr "" "So called 'Plunge' feedrate.\n" "This is for linear move G01." -#: flatcamGUI/ObjectUI.py:998 flatcamGUI/ObjectUI.py:1796 +#: flatcamGUI/ObjectUI.py:998 flatcamGUI/ObjectUI.py:1797 #: flatcamGUI/PreferencesUI.py:3597 flatcamGUI/PreferencesUI.py:4503 msgid "Feedrate Rapids" msgstr "Feedrate Rapids" @@ -8071,13 +7733,13 @@ msgstr "" "It is useful only for Marlin,\n" "ignore for any other cases." -#: flatcamGUI/ObjectUI.py:1020 flatcamGUI/ObjectUI.py:1816 +#: flatcamGUI/ObjectUI.py:1020 flatcamGUI/ObjectUI.py:1817 #: flatcamGUI/PreferencesUI.py:4521 msgid "Re-cut" msgstr "Re-cut" #: flatcamGUI/ObjectUI.py:1022 flatcamGUI/ObjectUI.py:1035 -#: flatcamGUI/ObjectUI.py:1818 flatcamGUI/ObjectUI.py:1830 +#: flatcamGUI/ObjectUI.py:1819 flatcamGUI/ObjectUI.py:1831 #: flatcamGUI/PreferencesUI.py:4523 flatcamGUI/PreferencesUI.py:4535 msgid "" "In order to remove possible\n" @@ -8090,6 +7752,12 @@ msgstr "" "meet with last cut, we generate an\n" "extended cut over the first cut section." +#: flatcamGUI/ObjectUI.py:1048 flatcamGUI/ObjectUI.py:1840 +#: flatcamGUI/PreferencesUI.py:4409 flatcamObjects/FlatCAMExcellon.py:1332 +#: flatcamObjects/FlatCAMGeometry.py:1568 +msgid "Spindle speed" +msgstr "Spindle speed" + #: flatcamGUI/ObjectUI.py:1050 flatcamGUI/PreferencesUI.py:3442 msgid "" "Speed of the spindle\n" @@ -8098,7 +7766,7 @@ msgstr "" "Speed of the spindle\n" "in RPM (optional)" -#: flatcamGUI/ObjectUI.py:1065 flatcamGUI/ObjectUI.py:1858 +#: flatcamGUI/ObjectUI.py:1065 flatcamGUI/ObjectUI.py:1859 #: flatcamGUI/PreferencesUI.py:3456 flatcamGUI/PreferencesUI.py:4427 msgid "" "Pause to allow the spindle to reach its\n" @@ -8107,7 +7775,7 @@ msgstr "" "Pause to allow the spindle to reach its\n" "speed before cutting." -#: flatcamGUI/ObjectUI.py:1076 flatcamGUI/ObjectUI.py:1868 +#: flatcamGUI/ObjectUI.py:1076 flatcamGUI/ObjectUI.py:1869 #: flatcamGUI/PreferencesUI.py:3464 flatcamGUI/PreferencesUI.py:4432 msgid "Number of time units for spindle to dwell." msgstr "Number of time units for spindle to dwell." @@ -8126,12 +7794,12 @@ msgstr "" "to create the desired exit hole diameter due of the tip shape.\n" "The value here can compensate the Cut Z parameter." -#: flatcamGUI/ObjectUI.py:1148 flatcamGUI/ObjectUI.py:1922 +#: flatcamGUI/ObjectUI.py:1148 flatcamGUI/ObjectUI.py:1923 #: flatcamTools/ToolNCC.py:492 flatcamTools/ToolPaint.py:423 msgid "Apply parameters to all tools" msgstr "Apply parameters to all tools" -#: flatcamGUI/ObjectUI.py:1150 flatcamGUI/ObjectUI.py:1924 +#: flatcamGUI/ObjectUI.py:1150 flatcamGUI/ObjectUI.py:1925 #: flatcamTools/ToolNCC.py:494 flatcamTools/ToolPaint.py:425 msgid "" "The parameters in the current form will be applied\n" @@ -8140,17 +7808,17 @@ msgstr "" "The parameters in the current form will be applied\n" "on all the tools from the Tool Table." -#: flatcamGUI/ObjectUI.py:1161 flatcamGUI/ObjectUI.py:1935 +#: flatcamGUI/ObjectUI.py:1161 flatcamGUI/ObjectUI.py:1936 #: flatcamTools/ToolNCC.py:505 flatcamTools/ToolPaint.py:436 msgid "Common Parameters" msgstr "Common Parameters" -#: flatcamGUI/ObjectUI.py:1163 flatcamGUI/ObjectUI.py:1937 +#: flatcamGUI/ObjectUI.py:1163 flatcamGUI/ObjectUI.py:1938 #: flatcamTools/ToolNCC.py:507 flatcamTools/ToolPaint.py:438 msgid "Parameters that are common for all tools." msgstr "Parameters that are common for all tools." -#: flatcamGUI/ObjectUI.py:1168 flatcamGUI/ObjectUI.py:1942 +#: flatcamGUI/ObjectUI.py:1168 flatcamGUI/ObjectUI.py:1943 msgid "Tool change Z" msgstr "Tool change Z" @@ -8162,7 +7830,7 @@ msgstr "" "Include tool-change sequence\n" "in G-Code (Pause for tool change)." -#: flatcamGUI/ObjectUI.py:1177 flatcamGUI/ObjectUI.py:1953 +#: flatcamGUI/ObjectUI.py:1177 flatcamGUI/ObjectUI.py:1954 #: flatcamGUI/PreferencesUI.py:3380 flatcamGUI/PreferencesUI.py:4327 msgid "" "Z-axis position (height) for\n" @@ -8179,12 +7847,12 @@ msgstr "" "Height of the tool just after start.\n" "Delete the value if you don't need this feature." -#: flatcamGUI/ObjectUI.py:1203 flatcamGUI/ObjectUI.py:1981 +#: flatcamGUI/ObjectUI.py:1203 flatcamGUI/ObjectUI.py:1982 #: flatcamGUI/PreferencesUI.py:3396 flatcamGUI/PreferencesUI.py:4346 msgid "End move Z" msgstr "End move Z" -#: flatcamGUI/ObjectUI.py:1205 flatcamGUI/ObjectUI.py:1983 +#: flatcamGUI/ObjectUI.py:1205 flatcamGUI/ObjectUI.py:1984 #: flatcamGUI/PreferencesUI.py:3398 flatcamGUI/PreferencesUI.py:4348 msgid "" "Height of the tool after\n" @@ -8193,12 +7861,12 @@ msgstr "" "Height of the tool after\n" "the last move at the end of the job." -#: flatcamGUI/ObjectUI.py:1222 flatcamGUI/ObjectUI.py:2000 +#: flatcamGUI/ObjectUI.py:1222 flatcamGUI/ObjectUI.py:2001 #: flatcamGUI/PreferencesUI.py:3413 flatcamGUI/PreferencesUI.py:4366 msgid "End move X,Y" msgstr "End move X,Y" -#: flatcamGUI/ObjectUI.py:1224 flatcamGUI/ObjectUI.py:2002 +#: flatcamGUI/ObjectUI.py:1224 flatcamGUI/ObjectUI.py:2003 #: flatcamGUI/PreferencesUI.py:3415 flatcamGUI/PreferencesUI.py:4368 msgid "" "End move X,Y position. In format (x,y).\n" @@ -8209,12 +7877,12 @@ msgstr "" "If no value is entered then there is no move\n" "on X,Y plane at the end of the job." -#: flatcamGUI/ObjectUI.py:1234 flatcamGUI/ObjectUI.py:1876 +#: flatcamGUI/ObjectUI.py:1234 flatcamGUI/ObjectUI.py:1877 #: flatcamGUI/PreferencesUI.py:3613 flatcamGUI/PreferencesUI.py:4544 msgid "Probe Z depth" msgstr "Probe Z depth" -#: flatcamGUI/ObjectUI.py:1236 flatcamGUI/ObjectUI.py:1878 +#: flatcamGUI/ObjectUI.py:1236 flatcamGUI/ObjectUI.py:1879 #: flatcamGUI/PreferencesUI.py:3615 flatcamGUI/PreferencesUI.py:4546 msgid "" "The maximum depth that the probe is allowed\n" @@ -8223,25 +7891,21 @@ msgstr "" "The maximum depth that the probe is allowed\n" "to probe. Negative value, in current units." -#: flatcamGUI/ObjectUI.py:1252 flatcamGUI/ObjectUI.py:1893 +#: flatcamGUI/ObjectUI.py:1253 flatcamGUI/ObjectUI.py:1894 #: flatcamGUI/PreferencesUI.py:3626 flatcamGUI/PreferencesUI.py:4559 msgid "Feedrate Probe" msgstr "Feedrate Probe" -#: flatcamGUI/ObjectUI.py:1254 flatcamGUI/ObjectUI.py:1895 +#: flatcamGUI/ObjectUI.py:1255 flatcamGUI/ObjectUI.py:1896 #: flatcamGUI/PreferencesUI.py:3628 flatcamGUI/PreferencesUI.py:4561 msgid "The feedrate used while the probe is probing." msgstr "The feedrate used while the probe is probing." -#: flatcamGUI/ObjectUI.py:1261 -msgid "e_fr_probe" -msgstr "e_fr_probe" - -#: flatcamGUI/ObjectUI.py:1270 +#: flatcamGUI/ObjectUI.py:1271 msgid "Preprocessor E" msgstr "Preprocessor E" -#: flatcamGUI/ObjectUI.py:1272 +#: flatcamGUI/ObjectUI.py:1273 msgid "" "The preprocessor JSON file that dictates\n" "Gcode output for Excellon Objects." @@ -8249,11 +7913,11 @@ msgstr "" "The preprocessor JSON file that dictates\n" "Gcode output for Excellon Objects." -#: flatcamGUI/ObjectUI.py:1282 +#: flatcamGUI/ObjectUI.py:1283 msgid "Preprocessor G" msgstr "Preprocessor G" -#: flatcamGUI/ObjectUI.py:1284 +#: flatcamGUI/ObjectUI.py:1285 msgid "" "The preprocessor JSON file that dictates\n" "Gcode output for Geometry (Milling) Objects." @@ -8261,7 +7925,7 @@ msgstr "" "The preprocessor JSON file that dictates\n" "Gcode output for Geometry (Milling) Objects." -#: flatcamGUI/ObjectUI.py:1308 flatcamGUI/ObjectUI.py:2026 +#: flatcamGUI/ObjectUI.py:1309 flatcamGUI/ObjectUI.py:2027 msgid "" "Add / Select at least one tool in the tool-table.\n" "Click the # header to select all, or Ctrl + LMB\n" @@ -8271,11 +7935,11 @@ msgstr "" "Click the # header to select all, or Ctrl + LMB\n" "for custom selection of tools." -#: flatcamGUI/ObjectUI.py:1316 flatcamGUI/ObjectUI.py:2033 +#: flatcamGUI/ObjectUI.py:1317 flatcamGUI/ObjectUI.py:2034 msgid "Generate CNCJob object" msgstr "Generate CNCJob object" -#: flatcamGUI/ObjectUI.py:1318 +#: flatcamGUI/ObjectUI.py:1319 msgid "" "Generate the CNC Job.\n" "If milling then an additional Geometry object will be created" @@ -8283,11 +7947,11 @@ msgstr "" "Generate the CNC Job.\n" "If milling then an additional Geometry object will be created" -#: flatcamGUI/ObjectUI.py:1335 +#: flatcamGUI/ObjectUI.py:1336 msgid "Milling Geometry" msgstr "Milling Geometry" -#: flatcamGUI/ObjectUI.py:1337 +#: flatcamGUI/ObjectUI.py:1338 msgid "" "Create Geometry for milling holes.\n" "Select from the Tools Table above the hole dias to be\n" @@ -8297,16 +7961,16 @@ msgstr "" "Select from the Tools Table above the hole dias to be\n" "milled. Use the # column to make the selection." -#: flatcamGUI/ObjectUI.py:1345 flatcamGUI/PreferencesUI.py:2207 +#: flatcamGUI/ObjectUI.py:1346 flatcamGUI/PreferencesUI.py:2207 #: flatcamGUI/PreferencesUI.py:3514 msgid "Diameter of the cutting tool." msgstr "Diameter of the cutting tool." -#: flatcamGUI/ObjectUI.py:1355 +#: flatcamGUI/ObjectUI.py:1356 msgid "Mill Drills" msgstr "Mill Drills" -#: flatcamGUI/ObjectUI.py:1357 +#: flatcamGUI/ObjectUI.py:1358 msgid "" "Create the Geometry Object\n" "for milling DRILLS toolpaths." @@ -8314,11 +7978,11 @@ msgstr "" "Create the Geometry Object\n" "for milling DRILLS toolpaths." -#: flatcamGUI/ObjectUI.py:1375 +#: flatcamGUI/ObjectUI.py:1376 msgid "Mill Slots" msgstr "Mill Slots" -#: flatcamGUI/ObjectUI.py:1377 +#: flatcamGUI/ObjectUI.py:1378 msgid "" "Create the Geometry Object\n" "for milling SLOTS toolpaths." @@ -8326,11 +7990,11 @@ msgstr "" "Create the Geometry Object\n" "for milling SLOTS toolpaths." -#: flatcamGUI/ObjectUI.py:1419 flatcamTools/ToolCutOut.py:327 +#: flatcamGUI/ObjectUI.py:1420 flatcamTools/ToolCutOut.py:326 msgid "Geometry Object" msgstr "Geometry Object" -#: flatcamGUI/ObjectUI.py:1465 +#: flatcamGUI/ObjectUI.py:1466 msgid "" "Tools in this Geometry object used for cutting.\n" "The 'Offset' entry will set an offset for the cut.\n" @@ -8358,23 +8022,23 @@ msgstr "" "grayed out and Cut Z is automatically calculated from the newly \n" "showed UI form entries named V-Tip Dia and V-Tip Angle." -#: flatcamGUI/ObjectUI.py:1482 flatcamGUI/ObjectUI.py:2231 +#: flatcamGUI/ObjectUI.py:1483 flatcamGUI/ObjectUI.py:2232 #: flatcamGUI/PreferencesUI.py:4698 msgid "Plot Object" msgstr "Plot Object" -#: flatcamGUI/ObjectUI.py:1495 flatcamGUI/ObjectUI.py:2244 -#: flatcamGUI/ObjectUI.py:2254 flatcamGUI/PreferencesUI.py:7747 -#: flatcamTools/ToolCopperThieving.py:222 +#: flatcamGUI/ObjectUI.py:1496 flatcamGUI/ObjectUI.py:2245 +#: flatcamGUI/ObjectUI.py:2255 flatcamGUI/PreferencesUI.py:7747 +#: flatcamTools/ToolCopperThieving.py:221 msgid "Dia" msgstr "Dia" -#: flatcamGUI/ObjectUI.py:1495 flatcamGUI/ObjectUI.py:2244 +#: flatcamGUI/ObjectUI.py:1496 flatcamGUI/ObjectUI.py:2245 #: flatcamTools/ToolNCC.py:132 flatcamTools/ToolPaint.py:128 msgid "TT" msgstr "TT" -#: flatcamGUI/ObjectUI.py:1502 +#: flatcamGUI/ObjectUI.py:1503 msgid "" "This is the Tool Number.\n" "When ToolChange is checked, on toolchange event this value\n" @@ -8384,7 +8048,7 @@ msgstr "" "When ToolChange is checked, on toolchange event this value\n" "will be showed as a T1, T2 ... Tn" -#: flatcamGUI/ObjectUI.py:1513 +#: flatcamGUI/ObjectUI.py:1514 msgid "" "The value for the Offset can be:\n" "- Path -> There is no offset, the tool cut will be done through the geometry " @@ -8400,7 +8064,7 @@ msgstr "" "'pocket'.\n" "- Out(side) -> The tool cut will follow the geometry line on the outside." -#: flatcamGUI/ObjectUI.py:1520 +#: flatcamGUI/ObjectUI.py:1521 msgid "" "The (Operation) Type has only informative value. Usually the UI form " "values \n" @@ -8420,7 +8084,7 @@ msgstr "" "For Isolation we need a lower Feedrate as it use a milling bit with a fine " "tip." -#: flatcamGUI/ObjectUI.py:1529 +#: flatcamGUI/ObjectUI.py:1530 msgid "" "The Tool Type (TT) can be:\n" "- Circular with 1 ... 4 teeth -> it is informative only. Being circular the " @@ -8450,7 +8114,7 @@ msgstr "" "Choosing the V-Shape Tool Type automatically will select the Operation Type " "as Isolation." -#: flatcamGUI/ObjectUI.py:1541 +#: flatcamGUI/ObjectUI.py:1542 msgid "" "Plot column. It is visible only for MultiGeo geometries, meaning geometries " "that holds the geometry\n" @@ -8468,7 +8132,7 @@ msgstr "" "plot on canvas\n" "for the corresponding tool." -#: flatcamGUI/ObjectUI.py:1559 +#: flatcamGUI/ObjectUI.py:1560 msgid "" "The value to offset the cut when \n" "the Offset type selected is 'Offset'.\n" @@ -8480,13 +8144,13 @@ msgstr "" "The value can be positive for 'outside'\n" "cut and negative for 'inside' cut." -#: flatcamGUI/ObjectUI.py:1578 flatcamTools/ToolNCC.py:209 +#: flatcamGUI/ObjectUI.py:1579 flatcamTools/ToolNCC.py:209 #: flatcamTools/ToolNCC.py:923 flatcamTools/ToolPaint.py:192 #: flatcamTools/ToolPaint.py:849 flatcamTools/ToolSolderPaste.py:559 msgid "New Tool" msgstr "New Tool" -#: flatcamGUI/ObjectUI.py:1595 +#: flatcamGUI/ObjectUI.py:1596 msgid "" "Add a new tool to the Tool Table\n" "with the specified diameter." @@ -8494,13 +8158,13 @@ msgstr "" "Add a new tool to the Tool Table\n" "with the specified diameter." -#: flatcamGUI/ObjectUI.py:1600 flatcamTools/ToolNCC.py:300 +#: flatcamGUI/ObjectUI.py:1601 flatcamTools/ToolNCC.py:300 #: flatcamTools/ToolNCC.py:634 flatcamTools/ToolPaint.py:283 #: flatcamTools/ToolPaint.py:679 msgid "Add from DB" msgstr "Add from DB" -#: flatcamGUI/ObjectUI.py:1602 flatcamTools/ToolNCC.py:302 +#: flatcamGUI/ObjectUI.py:1603 flatcamTools/ToolNCC.py:302 #: flatcamTools/ToolPaint.py:285 msgid "" "Add a new tool to the Tool Table\n" @@ -8509,7 +8173,7 @@ msgstr "" "Add a new tool to the Tool Table\n" "from the Tool DataBase." -#: flatcamGUI/ObjectUI.py:1617 +#: flatcamGUI/ObjectUI.py:1618 msgid "" "Copy a selection of tools in the Tool Table\n" "by first selecting a row in the Tool Table." @@ -8517,7 +8181,7 @@ msgstr "" "Copy a selection of tools in the Tool Table\n" "by first selecting a row in the Tool Table." -#: flatcamGUI/ObjectUI.py:1623 +#: flatcamGUI/ObjectUI.py:1624 msgid "" "Delete a selection of tools in the Tool Table\n" "by first selecting a row in the Tool Table." @@ -8525,7 +8189,7 @@ msgstr "" "Delete a selection of tools in the Tool Table\n" "by first selecting a row in the Tool Table." -#: flatcamGUI/ObjectUI.py:1750 flatcamGUI/PreferencesUI.py:4296 +#: flatcamGUI/ObjectUI.py:1751 flatcamGUI/PreferencesUI.py:4296 msgid "" "Height of the tool when\n" "moving without cutting." @@ -8533,7 +8197,7 @@ msgstr "" "Height of the tool when\n" "moving without cutting." -#: flatcamGUI/ObjectUI.py:1783 flatcamGUI/PreferencesUI.py:4395 +#: flatcamGUI/ObjectUI.py:1784 flatcamGUI/PreferencesUI.py:4395 msgid "" "Cutting speed in the XY\n" "plane in units per minute.\n" @@ -8543,7 +8207,7 @@ msgstr "" "plane in units per minute.\n" "It is called also Plunge." -#: flatcamGUI/ObjectUI.py:1798 flatcamGUI/PreferencesUI.py:4505 +#: flatcamGUI/ObjectUI.py:1799 flatcamGUI/PreferencesUI.py:4505 msgid "" "Cutting speed in the XY plane\n" "(in units per minute).\n" @@ -8557,7 +8221,7 @@ msgstr "" "It is useful only for Marlin,\n" "ignore for any other cases." -#: flatcamGUI/ObjectUI.py:1842 flatcamGUI/PreferencesUI.py:4412 +#: flatcamGUI/ObjectUI.py:1843 flatcamGUI/PreferencesUI.py:4412 msgid "" "Speed of the spindle in RPM (optional).\n" "If LASER preprocessor is used,\n" @@ -8567,7 +8231,7 @@ msgstr "" "If LASER preprocessor is used,\n" "this value is the power of laser." -#: flatcamGUI/ObjectUI.py:1945 flatcamGUI/PreferencesUI.py:4317 +#: flatcamGUI/ObjectUI.py:1946 flatcamGUI/PreferencesUI.py:4317 msgid "" "Include tool-change sequence\n" "in the Machine Code (Pause for tool change)." @@ -8575,7 +8239,7 @@ msgstr "" "Include tool-change sequence\n" "in the Machine Code (Pause for tool change)." -#: flatcamGUI/ObjectUI.py:2014 flatcamGUI/PreferencesUI.py:4449 +#: flatcamGUI/ObjectUI.py:2015 flatcamGUI/PreferencesUI.py:4449 msgid "" "The Preprocessor file that dictates\n" "the Machine Code (like GCode, RML, HPGL) output." @@ -8583,15 +8247,15 @@ msgstr "" "The Preprocessor file that dictates\n" "the Machine Code (like GCode, RML, HPGL) output." -#: flatcamGUI/ObjectUI.py:2035 +#: flatcamGUI/ObjectUI.py:2036 msgid "Generate the CNC Job object." msgstr "Generate the CNC Job object." -#: flatcamGUI/ObjectUI.py:2052 +#: flatcamGUI/ObjectUI.py:2053 msgid "Launch Paint Tool in Tools Tab." msgstr "Launch Paint Tool in Tools Tab." -#: flatcamGUI/ObjectUI.py:2060 flatcamGUI/PreferencesUI.py:5874 +#: flatcamGUI/ObjectUI.py:2061 flatcamGUI/PreferencesUI.py:5874 msgid "" "Creates tool paths to cover the\n" "whole area of a polygon (remove\n" @@ -8603,15 +8267,15 @@ msgstr "" "all copper). You will be asked\n" "to click on the desired polygon." -#: flatcamGUI/ObjectUI.py:2115 +#: flatcamGUI/ObjectUI.py:2116 msgid "CNC Job Object" msgstr "CNC Job Object" -#: flatcamGUI/ObjectUI.py:2126 flatcamGUI/PreferencesUI.py:4703 +#: flatcamGUI/ObjectUI.py:2127 flatcamGUI/PreferencesUI.py:4703 msgid "Plot kind" msgstr "Plot kind" -#: flatcamGUI/ObjectUI.py:2129 flatcamGUI/PreferencesUI.py:4705 +#: flatcamGUI/ObjectUI.py:2130 flatcamGUI/PreferencesUI.py:4705 msgid "" "This selects the kind of geometries on the canvas to plot.\n" "Those can be either of type 'Travel' which means the moves\n" @@ -8623,15 +8287,15 @@ msgstr "" "above the work piece or it can be of type 'Cut',\n" "which means the moves that cut into the material." -#: flatcamGUI/ObjectUI.py:2138 flatcamGUI/PreferencesUI.py:4713 +#: flatcamGUI/ObjectUI.py:2139 flatcamGUI/PreferencesUI.py:4713 msgid "Travel" msgstr "Travel" -#: flatcamGUI/ObjectUI.py:2142 flatcamGUI/PreferencesUI.py:4722 +#: flatcamGUI/ObjectUI.py:2143 flatcamGUI/PreferencesUI.py:4722 msgid "Display Annotation" msgstr "Display Annotation" -#: flatcamGUI/ObjectUI.py:2144 flatcamGUI/PreferencesUI.py:4724 +#: flatcamGUI/ObjectUI.py:2145 flatcamGUI/PreferencesUI.py:4724 msgid "" "This selects if to display text annotation on the plot.\n" "When checked it will display numbers in order for each end\n" @@ -8641,11 +8305,11 @@ msgstr "" "When checked it will display numbers in order for each end\n" "of a travel line." -#: flatcamGUI/ObjectUI.py:2159 +#: flatcamGUI/ObjectUI.py:2160 msgid "Travelled dist." msgstr "Travelled dist." -#: flatcamGUI/ObjectUI.py:2161 flatcamGUI/ObjectUI.py:2166 +#: flatcamGUI/ObjectUI.py:2162 flatcamGUI/ObjectUI.py:2167 msgid "" "This is the total travelled distance on X-Y plane.\n" "In current units." @@ -8653,11 +8317,11 @@ msgstr "" "This is the total travelled distance on X-Y plane.\n" "In current units." -#: flatcamGUI/ObjectUI.py:2171 +#: flatcamGUI/ObjectUI.py:2172 msgid "Estimated time" msgstr "Estimated time" -#: flatcamGUI/ObjectUI.py:2173 flatcamGUI/ObjectUI.py:2178 +#: flatcamGUI/ObjectUI.py:2174 flatcamGUI/ObjectUI.py:2179 msgid "" "This is the estimated time to do the routing/drilling,\n" "without the time spent in ToolChange events." @@ -8665,11 +8329,11 @@ msgstr "" "This is the estimated time to do the routing/drilling,\n" "without the time spent in ToolChange events." -#: flatcamGUI/ObjectUI.py:2213 +#: flatcamGUI/ObjectUI.py:2214 msgid "CNC Tools Table" msgstr "CNC Tools Table" -#: flatcamGUI/ObjectUI.py:2216 +#: flatcamGUI/ObjectUI.py:2217 msgid "" "Tools in this CNCJob object used for cutting.\n" "The tool diameter is used for plotting on canvas.\n" @@ -8691,23 +8355,23 @@ msgstr "" "The 'Tool type'(TT) can be circular with 1 to 4 teeths(C1..C4),\n" "ball(B), or V-Shaped(V)." -#: flatcamGUI/ObjectUI.py:2244 flatcamGUI/ObjectUI.py:2255 +#: flatcamGUI/ObjectUI.py:2245 flatcamGUI/ObjectUI.py:2256 msgid "P" msgstr "P" -#: flatcamGUI/ObjectUI.py:2265 +#: flatcamGUI/ObjectUI.py:2266 msgid "Update Plot" msgstr "Update Plot" -#: flatcamGUI/ObjectUI.py:2267 +#: flatcamGUI/ObjectUI.py:2268 msgid "Update the plot." msgstr "Update the plot." -#: flatcamGUI/ObjectUI.py:2274 flatcamGUI/PreferencesUI.py:5120 +#: flatcamGUI/ObjectUI.py:2275 flatcamGUI/PreferencesUI.py:5120 msgid "Export CNC Code" msgstr "Export CNC Code" -#: flatcamGUI/ObjectUI.py:2276 flatcamGUI/PreferencesUI.py:5061 +#: flatcamGUI/ObjectUI.py:2277 flatcamGUI/PreferencesUI.py:5061 #: flatcamGUI/PreferencesUI.py:5122 msgid "" "Export and save G-Code to\n" @@ -8716,11 +8380,11 @@ msgstr "" "Export and save G-Code to\n" "make this object to a file." -#: flatcamGUI/ObjectUI.py:2282 +#: flatcamGUI/ObjectUI.py:2283 msgid "Prepend to CNC Code" msgstr "Prepend to CNC Code" -#: flatcamGUI/ObjectUI.py:2284 flatcamGUI/ObjectUI.py:2291 +#: flatcamGUI/ObjectUI.py:2285 flatcamGUI/ObjectUI.py:2292 #: flatcamGUI/PreferencesUI.py:5077 msgid "" "Type here any G-Code commands you would\n" @@ -8729,11 +8393,11 @@ msgstr "" "Type here any G-Code commands you would\n" "like to add at the beginning of the G-Code file." -#: flatcamGUI/ObjectUI.py:2297 +#: flatcamGUI/ObjectUI.py:2298 msgid "Append to CNC Code" msgstr "Append to CNC Code" -#: flatcamGUI/ObjectUI.py:2299 flatcamGUI/ObjectUI.py:2307 +#: flatcamGUI/ObjectUI.py:2300 flatcamGUI/ObjectUI.py:2308 #: flatcamGUI/PreferencesUI.py:5093 msgid "" "Type here any G-Code commands you would\n" @@ -8744,11 +8408,11 @@ msgstr "" "like to append to the generated file.\n" "I.e.: M2 (End of program)" -#: flatcamGUI/ObjectUI.py:2321 flatcamGUI/PreferencesUI.py:5128 +#: flatcamGUI/ObjectUI.py:2322 flatcamGUI/PreferencesUI.py:5128 msgid "Toolchange G-Code" msgstr "Toolchange G-Code" -#: flatcamGUI/ObjectUI.py:2324 flatcamGUI/PreferencesUI.py:5131 +#: flatcamGUI/ObjectUI.py:2325 flatcamGUI/PreferencesUI.py:5131 msgid "" "Type here any G-Code commands you would\n" "like to be executed when Toolchange event is encountered.\n" @@ -8770,7 +8434,7 @@ msgstr "" "that has 'toolchange_custom' in it's name and this is built\n" "having as template the 'Toolchange Custom' posprocessor file." -#: flatcamGUI/ObjectUI.py:2339 +#: flatcamGUI/ObjectUI.py:2340 msgid "" "Type here any G-Code commands you would\n" "like to be executed when Toolchange event is encountered.\n" @@ -8788,11 +8452,11 @@ msgstr "" "WARNING: it can be used only with a preprocessor file\n" "that has 'toolchange_custom' in it's name." -#: flatcamGUI/ObjectUI.py:2354 flatcamGUI/PreferencesUI.py:5170 +#: flatcamGUI/ObjectUI.py:2355 flatcamGUI/PreferencesUI.py:5170 msgid "Use Toolchange Macro" msgstr "Use Toolchange Macro" -#: flatcamGUI/ObjectUI.py:2356 flatcamGUI/PreferencesUI.py:5172 +#: flatcamGUI/ObjectUI.py:2357 flatcamGUI/PreferencesUI.py:5172 msgid "" "Check this box if you want to use\n" "a Custom Toolchange GCode (macro)." @@ -8800,7 +8464,7 @@ msgstr "" "Check this box if you want to use\n" "a Custom Toolchange GCode (macro)." -#: flatcamGUI/ObjectUI.py:2364 flatcamGUI/PreferencesUI.py:5184 +#: flatcamGUI/ObjectUI.py:2365 flatcamGUI/PreferencesUI.py:5184 msgid "" "A list of the FlatCAM variables that can be used\n" "in the Toolchange event.\n" @@ -8810,7 +8474,7 @@ msgstr "" "in the Toolchange event.\n" "They have to be surrounded by the '%' symbol" -#: flatcamGUI/ObjectUI.py:2371 flatcamGUI/PreferencesUI.py:2627 +#: flatcamGUI/ObjectUI.py:2372 flatcamGUI/PreferencesUI.py:2627 #: flatcamGUI/PreferencesUI.py:3833 flatcamGUI/PreferencesUI.py:4640 #: flatcamGUI/PreferencesUI.py:5191 flatcamGUI/PreferencesUI.py:5310 #: flatcamGUI/PreferencesUI.py:5640 flatcamGUI/PreferencesUI.py:5797 @@ -8821,64 +8485,64 @@ msgstr "" #: flatcamGUI/PreferencesUI.py:7646 flatcamGUI/PreferencesUI.py:7900 #: flatcamGUI/PreferencesUI.py:8016 flatcamGUI/PreferencesUI.py:8135 #: flatcamGUI/PreferencesUI.py:8347 flatcamGUI/PreferencesUI.py:8556 -#: flatcamTools/ToolCopperThieving.py:90 flatcamTools/ToolFiducials.py:149 +#: flatcamTools/ToolCopperThieving.py:89 flatcamTools/ToolFiducials.py:149 #: flatcamTools/ToolInvertGerber.py:82 msgid "Parameters" msgstr "Parameters" -#: flatcamGUI/ObjectUI.py:2374 flatcamGUI/PreferencesUI.py:5196 +#: flatcamGUI/ObjectUI.py:2375 flatcamGUI/PreferencesUI.py:5196 msgid "FlatCAM CNC parameters" msgstr "FlatCAM CNC parameters" -#: flatcamGUI/ObjectUI.py:2375 flatcamGUI/PreferencesUI.py:5201 +#: flatcamGUI/ObjectUI.py:2376 flatcamGUI/PreferencesUI.py:5201 msgid "tool number" msgstr "tool number" -#: flatcamGUI/ObjectUI.py:2376 flatcamGUI/PreferencesUI.py:5202 +#: flatcamGUI/ObjectUI.py:2377 flatcamGUI/PreferencesUI.py:5202 msgid "tool diameter" msgstr "tool diameter" -#: flatcamGUI/ObjectUI.py:2377 flatcamGUI/PreferencesUI.py:5203 +#: flatcamGUI/ObjectUI.py:2378 flatcamGUI/PreferencesUI.py:5203 msgid "for Excellon, total number of drills" msgstr "for Excellon, total number of drills" -#: flatcamGUI/ObjectUI.py:2379 flatcamGUI/PreferencesUI.py:5205 +#: flatcamGUI/ObjectUI.py:2380 flatcamGUI/PreferencesUI.py:5205 msgid "X coord for Toolchange" msgstr "X coord for Toolchange" -#: flatcamGUI/ObjectUI.py:2380 flatcamGUI/PreferencesUI.py:5206 +#: flatcamGUI/ObjectUI.py:2381 flatcamGUI/PreferencesUI.py:5206 msgid "Y coord for Toolchange" msgstr "Y coord for Toolchange" -#: flatcamGUI/ObjectUI.py:2381 flatcamGUI/PreferencesUI.py:5208 +#: flatcamGUI/ObjectUI.py:2382 flatcamGUI/PreferencesUI.py:5208 msgid "Z coord for Toolchange" msgstr "Z coord for Toolchange" -#: flatcamGUI/ObjectUI.py:2382 +#: flatcamGUI/ObjectUI.py:2383 msgid "depth where to cut" msgstr "depth where to cut" -#: flatcamGUI/ObjectUI.py:2383 +#: flatcamGUI/ObjectUI.py:2384 msgid "height where to travel" msgstr "height where to travel" -#: flatcamGUI/ObjectUI.py:2384 flatcamGUI/PreferencesUI.py:5211 +#: flatcamGUI/ObjectUI.py:2385 flatcamGUI/PreferencesUI.py:5211 msgid "the step value for multidepth cut" msgstr "the step value for multidepth cut" -#: flatcamGUI/ObjectUI.py:2386 flatcamGUI/PreferencesUI.py:5213 +#: flatcamGUI/ObjectUI.py:2387 flatcamGUI/PreferencesUI.py:5213 msgid "the value for the spindle speed" msgstr "the value for the spindle speed" -#: flatcamGUI/ObjectUI.py:2388 +#: flatcamGUI/ObjectUI.py:2389 msgid "time to dwell to allow the spindle to reach it's set RPM" msgstr "time to dwell to allow the spindle to reach it's set RPM" -#: flatcamGUI/ObjectUI.py:2404 +#: flatcamGUI/ObjectUI.py:2405 msgid "View CNC Code" msgstr "View CNC Code" -#: flatcamGUI/ObjectUI.py:2406 +#: flatcamGUI/ObjectUI.py:2407 msgid "" "Opens TAB to view/modify/print G-Code\n" "file." @@ -8886,11 +8550,11 @@ msgstr "" "Opens TAB to view/modify/print G-Code\n" "file." -#: flatcamGUI/ObjectUI.py:2411 +#: flatcamGUI/ObjectUI.py:2412 msgid "Save CNC Code" msgstr "Save CNC Code" -#: flatcamGUI/ObjectUI.py:2413 +#: flatcamGUI/ObjectUI.py:2414 msgid "" "Opens dialog to save G-Code\n" "file." @@ -8898,75 +8562,75 @@ msgstr "" "Opens dialog to save G-Code\n" "file." -#: flatcamGUI/ObjectUI.py:2447 +#: flatcamGUI/ObjectUI.py:2448 msgid "Script Object" msgstr "Script Object" -#: flatcamGUI/ObjectUI.py:2467 flatcamGUI/ObjectUI.py:2541 +#: flatcamGUI/ObjectUI.py:2468 flatcamGUI/ObjectUI.py:2542 msgid "Auto Completer" msgstr "Auto Completer" -#: flatcamGUI/ObjectUI.py:2469 +#: flatcamGUI/ObjectUI.py:2470 msgid "This selects if the auto completer is enabled in the Script Editor." msgstr "This selects if the auto completer is enabled in the Script Editor." -#: flatcamGUI/ObjectUI.py:2514 +#: flatcamGUI/ObjectUI.py:2515 msgid "Document Object" msgstr "Document Object" -#: flatcamGUI/ObjectUI.py:2543 +#: flatcamGUI/ObjectUI.py:2544 msgid "This selects if the auto completer is enabled in the Document Editor." msgstr "This selects if the auto completer is enabled in the Document Editor." -#: flatcamGUI/ObjectUI.py:2561 +#: flatcamGUI/ObjectUI.py:2562 msgid "Font Type" msgstr "Font Type" -#: flatcamGUI/ObjectUI.py:2578 flatcamGUI/PreferencesUI.py:1278 +#: flatcamGUI/ObjectUI.py:2579 flatcamGUI/PreferencesUI.py:1278 msgid "Font Size" msgstr "Font Size" -#: flatcamGUI/ObjectUI.py:2614 +#: flatcamGUI/ObjectUI.py:2615 msgid "Alignment" msgstr "Alignment" -#: flatcamGUI/ObjectUI.py:2619 +#: flatcamGUI/ObjectUI.py:2620 msgid "Align Left" msgstr "Align Left" -#: flatcamGUI/ObjectUI.py:2629 +#: flatcamGUI/ObjectUI.py:2630 msgid "Align Right" msgstr "Align Right" -#: flatcamGUI/ObjectUI.py:2634 +#: flatcamGUI/ObjectUI.py:2635 msgid "Justify" msgstr "Justify" -#: flatcamGUI/ObjectUI.py:2641 +#: flatcamGUI/ObjectUI.py:2642 msgid "Font Color" msgstr "Font Color" -#: flatcamGUI/ObjectUI.py:2643 +#: flatcamGUI/ObjectUI.py:2644 msgid "Set the font color for the selected text" msgstr "Set the font color for the selected text" -#: flatcamGUI/ObjectUI.py:2657 +#: flatcamGUI/ObjectUI.py:2658 msgid "Selection Color" msgstr "Selection Color" -#: flatcamGUI/ObjectUI.py:2659 +#: flatcamGUI/ObjectUI.py:2660 msgid "Set the selection color when doing text selection." msgstr "Set the selection color when doing text selection." -#: flatcamGUI/ObjectUI.py:2673 +#: flatcamGUI/ObjectUI.py:2674 msgid "Tab Size" msgstr "Tab Size" -#: flatcamGUI/ObjectUI.py:2675 +#: flatcamGUI/ObjectUI.py:2676 msgid "Set the tab size. In pixels. Default value is 80 pixels." msgstr "Set the tab size. In pixels. Default value is 80 pixels." -#: flatcamGUI/PlotCanvasLegacy.py:1301 +#: flatcamGUI/PlotCanvasLegacy.py:1299 msgid "" "Could not annotate due of a difference between the number of text elements " "and the number of text positions." @@ -9611,6 +9275,17 @@ msgstr "" "The choice here will influence the parameters in\n" "the Selected Tab for all kinds of FlatCAM objects." +#: flatcamGUI/PreferencesUI.py:1646 flatcamGUI/PreferencesUI.py:3041 +#: flatcamObjects/FlatCAMExcellon.py:614 flatcamObjects/FlatCAMGeometry.py:485 +#: flatcamObjects/FlatCAMGerber.py:250 +msgid "Basic" +msgstr "Basic" + +#: flatcamGUI/PreferencesUI.py:1647 flatcamObjects/FlatCAMExcellon.py:627 +#: flatcamObjects/FlatCAMGeometry.py:506 flatcamObjects/FlatCAMGerber.py:277 +msgid "Advanced" +msgstr "Advanced" + #: flatcamGUI/PreferencesUI.py:1653 msgid "Portable app" msgstr "Portable app" @@ -10806,7 +10481,7 @@ msgstr "" #: flatcamGUI/PreferencesUI.py:4484 flatcamGUI/PreferencesUI.py:7045 #: flatcamGUI/PreferencesUI.py:8092 flatcamTools/ToolCalibration.py:125 -#: flatcamTools/ToolSolderPaste.py:241 +#: flatcamTools/ToolSolderPaste.py:240 msgid "Toolchange X-Y" msgstr "Toolchange X-Y" @@ -11175,7 +10850,7 @@ msgstr "" "If not checked, use the standard algorithm." #: flatcamGUI/PreferencesUI.py:5588 flatcamGUI/PreferencesUI.py:6119 -#: flatcamGUI/PreferencesUI.py:7696 flatcamTools/ToolCopperThieving.py:127 +#: flatcamGUI/PreferencesUI.py:7696 flatcamTools/ToolCopperThieving.py:126 #: flatcamTools/ToolNCC.py:535 flatcamTools/ToolNCC.py:1311 #: flatcamTools/ToolNCC.py:1642 flatcamTools/ToolNCC.py:1930 #: flatcamTools/ToolNCC.py:1985 flatcamTools/ToolPaint.py:486 @@ -11184,8 +10859,8 @@ msgid "Area Selection" msgstr "Area Selection" #: flatcamGUI/PreferencesUI.py:5588 flatcamGUI/PreferencesUI.py:6119 -#: flatcamGUI/PreferencesUI.py:7697 flatcamTools/ToolCopperThieving.py:128 -#: flatcamTools/ToolDblSided.py:217 flatcamTools/ToolNCC.py:535 +#: flatcamGUI/PreferencesUI.py:7697 flatcamTools/ToolCopperThieving.py:127 +#: flatcamTools/ToolDblSided.py:216 flatcamTools/ToolNCC.py:535 #: flatcamTools/ToolNCC.py:1658 flatcamTools/ToolNCC.py:1936 #: flatcamTools/ToolNCC.py:1993 flatcamTools/ToolNCC.py:2301 #: flatcamTools/ToolNCC.py:2581 flatcamTools/ToolNCC.py:3007 @@ -11246,11 +10921,11 @@ msgid "Cutout Tool Options" msgstr "Cutout Tool Options" #: flatcamGUI/PreferencesUI.py:5651 flatcamTools/ToolCalculators.py:123 -#: flatcamTools/ToolCutOut.py:130 +#: flatcamTools/ToolCutOut.py:129 msgid "Tool Diameter" msgstr "Tool Diameter" -#: flatcamGUI/PreferencesUI.py:5653 flatcamTools/ToolCutOut.py:132 +#: flatcamGUI/PreferencesUI.py:5653 flatcamTools/ToolCutOut.py:131 msgid "" "Diameter of the tool used to cutout\n" "the PCB shape out of the surrounding material." @@ -11262,7 +10937,7 @@ msgstr "" msgid "Object kind" msgstr "Object kind" -#: flatcamGUI/PreferencesUI.py:5710 flatcamTools/ToolCutOut.py:78 +#: flatcamGUI/PreferencesUI.py:5710 flatcamTools/ToolCutOut.py:77 msgid "" "Choice of what kind the object we want to cutout is.
    - Single: " "contain a single PCB Gerber outline object.
    - Panel: a panel PCB " @@ -11274,15 +10949,15 @@ msgstr "" "Gerber object, which is made\n" "out of many individual PCB outlines." -#: flatcamGUI/PreferencesUI.py:5717 flatcamTools/ToolCutOut.py:84 +#: flatcamGUI/PreferencesUI.py:5717 flatcamTools/ToolCutOut.py:83 msgid "Single" msgstr "Single" -#: flatcamGUI/PreferencesUI.py:5718 flatcamTools/ToolCutOut.py:85 +#: flatcamGUI/PreferencesUI.py:5718 flatcamTools/ToolCutOut.py:84 msgid "Panel" msgstr "Panel" -#: flatcamGUI/PreferencesUI.py:5725 flatcamTools/ToolCutOut.py:193 +#: flatcamGUI/PreferencesUI.py:5725 flatcamTools/ToolCutOut.py:192 msgid "" "Margin over bounds. A positive value here\n" "will make the cutout of the PCB further from\n" @@ -11292,11 +10967,11 @@ msgstr "" "will make the cutout of the PCB further from\n" "the actual PCB border" -#: flatcamGUI/PreferencesUI.py:5738 flatcamTools/ToolCutOut.py:204 +#: flatcamGUI/PreferencesUI.py:5738 flatcamTools/ToolCutOut.py:203 msgid "Gap size" msgstr "Gap size" -#: flatcamGUI/PreferencesUI.py:5740 flatcamTools/ToolCutOut.py:206 +#: flatcamGUI/PreferencesUI.py:5740 flatcamTools/ToolCutOut.py:205 msgid "" "The size of the bridge gaps in the cutout\n" "used to keep the board connected to\n" @@ -11308,7 +10983,7 @@ msgstr "" "the surrounding material (the one \n" "from which the PCB is cutout)." -#: flatcamGUI/PreferencesUI.py:5754 flatcamTools/ToolCutOut.py:250 +#: flatcamGUI/PreferencesUI.py:5754 flatcamTools/ToolCutOut.py:249 msgid "Gaps" msgstr "Gaps" @@ -11336,11 +11011,11 @@ msgstr "" "- 2tb - 2*top + 2*bottom\n" "- 8 - 2*left + 2*right +2*top + 2*bottom" -#: flatcamGUI/PreferencesUI.py:5778 flatcamTools/ToolCutOut.py:223 +#: flatcamGUI/PreferencesUI.py:5778 flatcamTools/ToolCutOut.py:222 msgid "Convex Shape" msgstr "Convex Shape" -#: flatcamGUI/PreferencesUI.py:5780 flatcamTools/ToolCutOut.py:226 +#: flatcamGUI/PreferencesUI.py:5780 flatcamTools/ToolCutOut.py:225 msgid "" "Create a convex shape surrounding the entire PCB.\n" "Used only if the source object type is Gerber." @@ -11364,17 +11039,17 @@ msgstr "" msgid "Drill dia" msgstr "Drill dia" -#: flatcamGUI/PreferencesUI.py:5815 flatcamTools/ToolDblSided.py:364 -#: flatcamTools/ToolDblSided.py:369 +#: flatcamGUI/PreferencesUI.py:5815 flatcamTools/ToolDblSided.py:363 +#: flatcamTools/ToolDblSided.py:368 msgid "Diameter of the drill for the alignment holes." msgstr "Diameter of the drill for the alignment holes." -#: flatcamGUI/PreferencesUI.py:5822 flatcamTools/ToolDblSided.py:378 +#: flatcamGUI/PreferencesUI.py:5822 flatcamTools/ToolDblSided.py:377 msgid "Align Axis" msgstr "Align Axis" #: flatcamGUI/PreferencesUI.py:5824 flatcamGUI/PreferencesUI.py:5837 -#: flatcamTools/ToolDblSided.py:166 flatcamTools/ToolDblSided.py:380 +#: flatcamTools/ToolDblSided.py:165 flatcamTools/ToolDblSided.py:379 msgid "Mirror vertically (X) or horizontally (Y)." msgstr "Mirror vertically (X) or horizontally (Y)." @@ -11382,11 +11057,11 @@ msgstr "Mirror vertically (X) or horizontally (Y)." msgid "Mirror Axis:" msgstr "Mirror Axis:" -#: flatcamGUI/PreferencesUI.py:5846 flatcamTools/ToolDblSided.py:182 +#: flatcamGUI/PreferencesUI.py:5846 flatcamTools/ToolDblSided.py:181 msgid "Point" msgstr "Point" -#: flatcamGUI/PreferencesUI.py:5847 flatcamTools/ToolDblSided.py:183 +#: flatcamGUI/PreferencesUI.py:5847 flatcamTools/ToolDblSided.py:182 msgid "Box" msgstr "Box" @@ -11581,12 +11256,12 @@ msgstr "" "while a value less than 1 will jolt it." #: flatcamGUI/PreferencesUI.py:6264 flatcamGUI/PreferencesUI.py:6783 -#: flatcamTools/ToolFilm.py:162 flatcamTools/ToolTransform.py:149 +#: flatcamTools/ToolFilm.py:162 flatcamTools/ToolTransform.py:148 msgid "X factor" msgstr "X factor" #: flatcamGUI/PreferencesUI.py:6273 flatcamGUI/PreferencesUI.py:6796 -#: flatcamTools/ToolFilm.py:171 flatcamTools/ToolTransform.py:169 +#: flatcamTools/ToolFilm.py:171 flatcamTools/ToolTransform.py:168 msgid "Y factor" msgstr "Y factor" @@ -11603,12 +11278,12 @@ msgstr "" "while negative values will skew to the left." #: flatcamGUI/PreferencesUI.py:6295 flatcamGUI/PreferencesUI.py:6752 -#: flatcamTools/ToolFilm.py:201 flatcamTools/ToolTransform.py:98 +#: flatcamTools/ToolFilm.py:201 flatcamTools/ToolTransform.py:97 msgid "X angle" msgstr "X angle" #: flatcamGUI/PreferencesUI.py:6304 flatcamGUI/PreferencesUI.py:6766 -#: flatcamTools/ToolFilm.py:210 flatcamTools/ToolTransform.py:119 +#: flatcamTools/ToolFilm.py:210 flatcamTools/ToolTransform.py:118 msgid "Y angle" msgstr "Y angle" @@ -11704,11 +11379,11 @@ msgstr "" "each element is a copy of the source object spaced\n" "at a X distance, Y distance of each other." -#: flatcamGUI/PreferencesUI.py:6480 flatcamTools/ToolPanelize.py:163 +#: flatcamGUI/PreferencesUI.py:6480 flatcamTools/ToolPanelize.py:161 msgid "Spacing cols" msgstr "Spacing cols" -#: flatcamGUI/PreferencesUI.py:6482 flatcamTools/ToolPanelize.py:165 +#: flatcamGUI/PreferencesUI.py:6482 flatcamTools/ToolPanelize.py:163 msgid "" "Spacing between columns of the desired panel.\n" "In current units." @@ -11716,11 +11391,11 @@ msgstr "" "Spacing between columns of the desired panel.\n" "In current units." -#: flatcamGUI/PreferencesUI.py:6494 flatcamTools/ToolPanelize.py:175 +#: flatcamGUI/PreferencesUI.py:6494 flatcamTools/ToolPanelize.py:173 msgid "Spacing rows" msgstr "Spacing rows" -#: flatcamGUI/PreferencesUI.py:6496 flatcamTools/ToolPanelize.py:177 +#: flatcamGUI/PreferencesUI.py:6496 flatcamTools/ToolPanelize.py:175 msgid "" "Spacing between rows of the desired panel.\n" "In current units." @@ -11728,27 +11403,27 @@ msgstr "" "Spacing between rows of the desired panel.\n" "In current units." -#: flatcamGUI/PreferencesUI.py:6507 flatcamTools/ToolPanelize.py:186 +#: flatcamGUI/PreferencesUI.py:6507 flatcamTools/ToolPanelize.py:184 msgid "Columns" msgstr "Columns" -#: flatcamGUI/PreferencesUI.py:6509 flatcamTools/ToolPanelize.py:188 +#: flatcamGUI/PreferencesUI.py:6509 flatcamTools/ToolPanelize.py:186 msgid "Number of columns of the desired panel" msgstr "Number of columns of the desired panel" -#: flatcamGUI/PreferencesUI.py:6519 flatcamTools/ToolPanelize.py:196 +#: flatcamGUI/PreferencesUI.py:6519 flatcamTools/ToolPanelize.py:194 msgid "Rows" msgstr "Rows" -#: flatcamGUI/PreferencesUI.py:6521 flatcamTools/ToolPanelize.py:198 +#: flatcamGUI/PreferencesUI.py:6521 flatcamTools/ToolPanelize.py:196 msgid "Number of rows of the desired panel" msgstr "Number of rows of the desired panel" -#: flatcamGUI/PreferencesUI.py:6528 flatcamTools/ToolPanelize.py:205 +#: flatcamGUI/PreferencesUI.py:6528 flatcamTools/ToolPanelize.py:203 msgid "Geo" msgstr "Geo" -#: flatcamGUI/PreferencesUI.py:6529 flatcamTools/ToolPanelize.py:206 +#: flatcamGUI/PreferencesUI.py:6529 flatcamTools/ToolPanelize.py:204 msgid "Panel Type" msgstr "Panel Type" @@ -11766,7 +11441,7 @@ msgstr "" msgid "Constrain within" msgstr "Constrain within" -#: flatcamGUI/PreferencesUI.py:6542 flatcamTools/ToolPanelize.py:218 +#: flatcamGUI/PreferencesUI.py:6542 flatcamTools/ToolPanelize.py:216 msgid "" "Area define by DX and DY within to constrain the panel.\n" "DX and DY values are in current units.\n" @@ -11780,11 +11455,11 @@ msgstr "" "the final panel will have as many columns and rows as\n" "they fit completely within selected area." -#: flatcamGUI/PreferencesUI.py:6555 flatcamTools/ToolPanelize.py:230 +#: flatcamGUI/PreferencesUI.py:6555 flatcamTools/ToolPanelize.py:228 msgid "Width (DX)" msgstr "Width (DX)" -#: flatcamGUI/PreferencesUI.py:6557 flatcamTools/ToolPanelize.py:232 +#: flatcamGUI/PreferencesUI.py:6557 flatcamTools/ToolPanelize.py:230 msgid "" "The width (DX) within which the panel must fit.\n" "In current units." @@ -11792,11 +11467,11 @@ msgstr "" "The width (DX) within which the panel must fit.\n" "In current units." -#: flatcamGUI/PreferencesUI.py:6568 flatcamTools/ToolPanelize.py:241 +#: flatcamGUI/PreferencesUI.py:6568 flatcamTools/ToolPanelize.py:239 msgid "Height (DY)" msgstr "Height (DY)" -#: flatcamGUI/PreferencesUI.py:6570 flatcamTools/ToolPanelize.py:243 +#: flatcamGUI/PreferencesUI.py:6570 flatcamTools/ToolPanelize.py:241 msgid "" "The height (DY)within which the panel must fit.\n" "In current units." @@ -11924,15 +11599,15 @@ msgstr "" msgid "Skew" msgstr "Skew" -#: flatcamGUI/PreferencesUI.py:6785 flatcamTools/ToolTransform.py:151 +#: flatcamGUI/PreferencesUI.py:6785 flatcamTools/ToolTransform.py:150 msgid "Factor for scaling on X axis." msgstr "Factor for scaling on X axis." -#: flatcamGUI/PreferencesUI.py:6798 flatcamTools/ToolTransform.py:171 +#: flatcamGUI/PreferencesUI.py:6798 flatcamTools/ToolTransform.py:170 msgid "Factor for scaling on Y axis." msgstr "Factor for scaling on Y axis." -#: flatcamGUI/PreferencesUI.py:6806 flatcamTools/ToolTransform.py:192 +#: flatcamGUI/PreferencesUI.py:6806 flatcamTools/ToolTransform.py:191 msgid "" "Scale the selected object(s)\n" "using the Scale_X factor for both axis." @@ -11940,7 +11615,7 @@ msgstr "" "Scale the selected object(s)\n" "using the Scale_X factor for both axis." -#: flatcamGUI/PreferencesUI.py:6814 flatcamTools/ToolTransform.py:199 +#: flatcamGUI/PreferencesUI.py:6814 flatcamTools/ToolTransform.py:198 msgid "" "Scale the selected object(s)\n" "using the origin reference when checked,\n" @@ -11952,32 +11627,32 @@ msgstr "" "and the center of the biggest bounding box\n" "of the selected objects when unchecked." -#: flatcamGUI/PreferencesUI.py:6830 flatcamTools/ToolTransform.py:218 +#: flatcamGUI/PreferencesUI.py:6830 flatcamTools/ToolTransform.py:217 msgid "X val" msgstr "X val" -#: flatcamGUI/PreferencesUI.py:6832 flatcamTools/ToolTransform.py:220 +#: flatcamGUI/PreferencesUI.py:6832 flatcamTools/ToolTransform.py:219 msgid "Distance to offset on X axis. In current units." msgstr "Distance to offset on X axis. In current units." -#: flatcamGUI/PreferencesUI.py:6843 flatcamTools/ToolTransform.py:238 +#: flatcamGUI/PreferencesUI.py:6843 flatcamTools/ToolTransform.py:237 msgid "Y val" msgstr "Y val" -#: flatcamGUI/PreferencesUI.py:6845 flatcamTools/ToolTransform.py:240 +#: flatcamGUI/PreferencesUI.py:6845 flatcamTools/ToolTransform.py:239 msgid "Distance to offset on Y axis. In current units." msgstr "Distance to offset on Y axis. In current units." -#: flatcamGUI/PreferencesUI.py:6851 flatcamTools/ToolDblSided.py:68 -#: flatcamTools/ToolDblSided.py:96 flatcamTools/ToolDblSided.py:126 +#: flatcamGUI/PreferencesUI.py:6851 flatcamTools/ToolDblSided.py:67 +#: flatcamTools/ToolDblSided.py:95 flatcamTools/ToolDblSided.py:125 msgid "Mirror" msgstr "Mirror" -#: flatcamGUI/PreferencesUI.py:6855 flatcamTools/ToolTransform.py:284 +#: flatcamGUI/PreferencesUI.py:6855 flatcamTools/ToolTransform.py:283 msgid "Mirror Reference" msgstr "Mirror Reference" -#: flatcamGUI/PreferencesUI.py:6857 flatcamTools/ToolTransform.py:286 +#: flatcamGUI/PreferencesUI.py:6857 flatcamTools/ToolTransform.py:285 msgid "" "Flip the selected object(s)\n" "around the point in Point Entry Field.\n" @@ -12014,11 +11689,11 @@ msgstr "" "the 'y' in (x, y) will be used when using Flip on Y and" #: flatcamGUI/PreferencesUI.py:6883 flatcamTools/ToolDistance.py:496 -#: flatcamTools/ToolDistanceMin.py:287 flatcamTools/ToolTransform.py:333 +#: flatcamTools/ToolDistanceMin.py:287 flatcamTools/ToolTransform.py:332 msgid "Distance" msgstr "Distance" -#: flatcamGUI/PreferencesUI.py:6885 flatcamTools/ToolTransform.py:335 +#: flatcamGUI/PreferencesUI.py:6885 flatcamTools/ToolTransform.py:334 msgid "" "A positive value will create the effect of dilation,\n" "while a negative value will create the effect of erosion.\n" @@ -12030,7 +11705,7 @@ msgstr "" "Each geometry element of the object will be increased\n" "or decreased with the 'distance'." -#: flatcamGUI/PreferencesUI.py:6902 flatcamTools/ToolTransform.py:360 +#: flatcamGUI/PreferencesUI.py:6902 flatcamTools/ToolTransform.py:359 msgid "" "A positive value will create the effect of dilation,\n" "while a negative value will create the effect of erosion.\n" @@ -12045,11 +11720,11 @@ msgstr "" "of the initial dimension." #: flatcamGUI/PreferencesUI.py:6919 flatcamGUI/PreferencesUI.py:7563 -#: flatcamTools/ToolQRCode.py:197 flatcamTools/ToolTransform.py:384 +#: flatcamTools/ToolQRCode.py:197 flatcamTools/ToolTransform.py:383 msgid "Rounded" msgstr "Rounded" -#: flatcamGUI/PreferencesUI.py:6921 flatcamTools/ToolTransform.py:386 +#: flatcamGUI/PreferencesUI.py:6921 flatcamTools/ToolTransform.py:385 msgid "" "If checked then the buffer will surround the buffered shape,\n" "every corner will be rounded.\n" @@ -12077,39 +11752,39 @@ msgstr "" msgid "New Nozzle Dia" msgstr "New Nozzle Dia" -#: flatcamGUI/PreferencesUI.py:6967 flatcamTools/ToolSolderPaste.py:108 +#: flatcamGUI/PreferencesUI.py:6967 flatcamTools/ToolSolderPaste.py:107 msgid "Diameter for the new Nozzle tool to add in the Tool Table" msgstr "Diameter for the new Nozzle tool to add in the Tool Table" -#: flatcamGUI/PreferencesUI.py:6983 flatcamTools/ToolSolderPaste.py:184 +#: flatcamGUI/PreferencesUI.py:6983 flatcamTools/ToolSolderPaste.py:183 msgid "Z Dispense Start" msgstr "Z Dispense Start" -#: flatcamGUI/PreferencesUI.py:6985 flatcamTools/ToolSolderPaste.py:186 +#: flatcamGUI/PreferencesUI.py:6985 flatcamTools/ToolSolderPaste.py:185 msgid "The height (Z) when solder paste dispensing starts." msgstr "The height (Z) when solder paste dispensing starts." -#: flatcamGUI/PreferencesUI.py:6996 flatcamTools/ToolSolderPaste.py:196 +#: flatcamGUI/PreferencesUI.py:6996 flatcamTools/ToolSolderPaste.py:195 msgid "Z Dispense" msgstr "Z Dispense" -#: flatcamGUI/PreferencesUI.py:6998 flatcamTools/ToolSolderPaste.py:198 +#: flatcamGUI/PreferencesUI.py:6998 flatcamTools/ToolSolderPaste.py:197 msgid "The height (Z) when doing solder paste dispensing." msgstr "The height (Z) when doing solder paste dispensing." -#: flatcamGUI/PreferencesUI.py:7009 flatcamTools/ToolSolderPaste.py:208 +#: flatcamGUI/PreferencesUI.py:7009 flatcamTools/ToolSolderPaste.py:207 msgid "Z Dispense Stop" msgstr "Z Dispense Stop" -#: flatcamGUI/PreferencesUI.py:7011 flatcamTools/ToolSolderPaste.py:210 +#: flatcamGUI/PreferencesUI.py:7011 flatcamTools/ToolSolderPaste.py:209 msgid "The height (Z) when solder paste dispensing stops." msgstr "The height (Z) when solder paste dispensing stops." -#: flatcamGUI/PreferencesUI.py:7022 flatcamTools/ToolSolderPaste.py:220 +#: flatcamGUI/PreferencesUI.py:7022 flatcamTools/ToolSolderPaste.py:219 msgid "Z Travel" msgstr "Z Travel" -#: flatcamGUI/PreferencesUI.py:7024 flatcamTools/ToolSolderPaste.py:222 +#: flatcamGUI/PreferencesUI.py:7024 flatcamTools/ToolSolderPaste.py:221 msgid "" "The height (Z) for travel between pads\n" "(without dispensing solder paste)." @@ -12117,15 +11792,15 @@ msgstr "" "The height (Z) for travel between pads\n" "(without dispensing solder paste)." -#: flatcamGUI/PreferencesUI.py:7036 flatcamTools/ToolSolderPaste.py:233 +#: flatcamGUI/PreferencesUI.py:7036 flatcamTools/ToolSolderPaste.py:232 msgid "Z Toolchange" msgstr "Z Toolchange" -#: flatcamGUI/PreferencesUI.py:7038 flatcamTools/ToolSolderPaste.py:235 +#: flatcamGUI/PreferencesUI.py:7038 flatcamTools/ToolSolderPaste.py:234 msgid "The height (Z) for tool (nozzle) change." msgstr "The height (Z) for tool (nozzle) change." -#: flatcamGUI/PreferencesUI.py:7047 flatcamTools/ToolSolderPaste.py:243 +#: flatcamGUI/PreferencesUI.py:7047 flatcamTools/ToolSolderPaste.py:242 msgid "" "The X,Y location for tool (nozzle) change.\n" "The format is (x, y) where x and y are real numbers." @@ -12133,11 +11808,11 @@ msgstr "" "The X,Y location for tool (nozzle) change.\n" "The format is (x, y) where x and y are real numbers." -#: flatcamGUI/PreferencesUI.py:7061 flatcamTools/ToolSolderPaste.py:256 +#: flatcamGUI/PreferencesUI.py:7061 flatcamTools/ToolSolderPaste.py:255 msgid "Feedrate (speed) while moving on the X-Y plane." msgstr "Feedrate (speed) while moving on the X-Y plane." -#: flatcamGUI/PreferencesUI.py:7074 flatcamTools/ToolSolderPaste.py:268 +#: flatcamGUI/PreferencesUI.py:7074 flatcamTools/ToolSolderPaste.py:267 msgid "" "Feedrate (speed) while moving vertically\n" "(on Z plane)." @@ -12145,7 +11820,7 @@ msgstr "" "Feedrate (speed) while moving vertically\n" "(on Z plane)." -#: flatcamGUI/PreferencesUI.py:7086 flatcamTools/ToolSolderPaste.py:279 +#: flatcamGUI/PreferencesUI.py:7086 flatcamTools/ToolSolderPaste.py:278 msgid "Feedrate Z Dispense" msgstr "Feedrate Z Dispense" @@ -12157,11 +11832,11 @@ msgstr "" "Feedrate (speed) while moving up vertically\n" "to Dispense position (on Z plane)." -#: flatcamGUI/PreferencesUI.py:7099 flatcamTools/ToolSolderPaste.py:291 +#: flatcamGUI/PreferencesUI.py:7099 flatcamTools/ToolSolderPaste.py:290 msgid "Spindle Speed FWD" msgstr "Spindle Speed FWD" -#: flatcamGUI/PreferencesUI.py:7101 flatcamTools/ToolSolderPaste.py:293 +#: flatcamGUI/PreferencesUI.py:7101 flatcamTools/ToolSolderPaste.py:292 msgid "" "The dispenser speed while pushing solder paste\n" "through the dispenser nozzle." @@ -12169,19 +11844,19 @@ msgstr "" "The dispenser speed while pushing solder paste\n" "through the dispenser nozzle." -#: flatcamGUI/PreferencesUI.py:7113 flatcamTools/ToolSolderPaste.py:304 +#: flatcamGUI/PreferencesUI.py:7113 flatcamTools/ToolSolderPaste.py:303 msgid "Dwell FWD" msgstr "Dwell FWD" -#: flatcamGUI/PreferencesUI.py:7115 flatcamTools/ToolSolderPaste.py:306 +#: flatcamGUI/PreferencesUI.py:7115 flatcamTools/ToolSolderPaste.py:305 msgid "Pause after solder dispensing." msgstr "Pause after solder dispensing." -#: flatcamGUI/PreferencesUI.py:7125 flatcamTools/ToolSolderPaste.py:315 +#: flatcamGUI/PreferencesUI.py:7125 flatcamTools/ToolSolderPaste.py:314 msgid "Spindle Speed REV" msgstr "Spindle Speed REV" -#: flatcamGUI/PreferencesUI.py:7127 flatcamTools/ToolSolderPaste.py:317 +#: flatcamGUI/PreferencesUI.py:7127 flatcamTools/ToolSolderPaste.py:316 msgid "" "The dispenser speed while retracting solder paste\n" "through the dispenser nozzle." @@ -12189,11 +11864,11 @@ msgstr "" "The dispenser speed while retracting solder paste\n" "through the dispenser nozzle." -#: flatcamGUI/PreferencesUI.py:7139 flatcamTools/ToolSolderPaste.py:328 +#: flatcamGUI/PreferencesUI.py:7139 flatcamTools/ToolSolderPaste.py:327 msgid "Dwell REV" msgstr "Dwell REV" -#: flatcamGUI/PreferencesUI.py:7141 flatcamTools/ToolSolderPaste.py:330 +#: flatcamGUI/PreferencesUI.py:7141 flatcamTools/ToolSolderPaste.py:329 msgid "" "Pause after solder paste dispenser retracted,\n" "to allow pressure equilibrium." @@ -12201,7 +11876,7 @@ msgstr "" "Pause after solder paste dispenser retracted,\n" "to allow pressure equilibrium." -#: flatcamGUI/PreferencesUI.py:7150 flatcamTools/ToolSolderPaste.py:338 +#: flatcamGUI/PreferencesUI.py:7150 flatcamTools/ToolSolderPaste.py:337 msgid "Files that control the GCode generation." msgstr "Files that control the GCode generation." @@ -12415,7 +12090,7 @@ msgstr "" "A tool to find the minimum distance between\n" "every two Gerber geometric elements" -#: flatcamGUI/PreferencesUI.py:7432 flatcamTools/ToolOptimal.py:79 +#: flatcamGUI/PreferencesUI.py:7432 flatcamTools/ToolOptimal.py:78 msgid "Precision" msgstr "Precision" @@ -12581,7 +12256,7 @@ msgid "Number of steps (lines) used to interpolate circles." msgstr "Number of steps (lines) used to interpolate circles." #: flatcamGUI/PreferencesUI.py:7666 flatcamGUI/PreferencesUI.py:7870 -#: flatcamTools/ToolCopperThieving.py:97 flatcamTools/ToolCopperThieving.py:432 +#: flatcamTools/ToolCopperThieving.py:96 flatcamTools/ToolCopperThieving.py:431 msgid "Clearance" msgstr "Clearance" @@ -12595,7 +12270,7 @@ msgstr "" "(the polygon fill may be split in multiple polygons)\n" "and the copper traces in the Gerber file." -#: flatcamGUI/PreferencesUI.py:7699 flatcamTools/ToolCopperThieving.py:130 +#: flatcamGUI/PreferencesUI.py:7699 flatcamTools/ToolCopperThieving.py:129 msgid "Reference:" msgstr "Reference:" @@ -12615,22 +12290,22 @@ msgstr "" #: flatcamGUI/PreferencesUI.py:7710 flatcamGUI/PreferencesUI.py:8175 #: flatcamGUI/PreferencesUI.py:8287 flatcamGUI/PreferencesUI.py:8387 -#: flatcamGUI/PreferencesUI.py:8501 flatcamTools/ToolCopperThieving.py:172 +#: flatcamGUI/PreferencesUI.py:8501 flatcamTools/ToolCopperThieving.py:171 #: flatcamTools/ToolExtractDrills.py:102 flatcamTools/ToolExtractDrills.py:240 #: flatcamTools/ToolPunchGerber.py:113 flatcamTools/ToolPunchGerber.py:268 msgid "Rectangular" msgstr "Rectangular" -#: flatcamGUI/PreferencesUI.py:7711 flatcamTools/ToolCopperThieving.py:173 +#: flatcamGUI/PreferencesUI.py:7711 flatcamTools/ToolCopperThieving.py:172 msgid "Minimal" msgstr "Minimal" -#: flatcamGUI/PreferencesUI.py:7713 flatcamTools/ToolCopperThieving.py:175 +#: flatcamGUI/PreferencesUI.py:7713 flatcamTools/ToolCopperThieving.py:174 #: flatcamTools/ToolFilm.py:113 msgid "Box Type:" msgstr "Box Type:" -#: flatcamGUI/PreferencesUI.py:7715 flatcamTools/ToolCopperThieving.py:177 +#: flatcamGUI/PreferencesUI.py:7715 flatcamTools/ToolCopperThieving.py:176 msgid "" "- 'Rectangular' - the bounding box will be of rectangular shape.\n" "- 'Minimal' - the bounding box will be the convex hull shape." @@ -12638,23 +12313,23 @@ msgstr "" "- 'Rectangular' - the bounding box will be of rectangular shape.\n" "- 'Minimal' - the bounding box will be the convex hull shape." -#: flatcamGUI/PreferencesUI.py:7729 flatcamTools/ToolCopperThieving.py:193 +#: flatcamGUI/PreferencesUI.py:7729 flatcamTools/ToolCopperThieving.py:192 msgid "Dots Grid" msgstr "Dots Grid" -#: flatcamGUI/PreferencesUI.py:7730 flatcamTools/ToolCopperThieving.py:194 +#: flatcamGUI/PreferencesUI.py:7730 flatcamTools/ToolCopperThieving.py:193 msgid "Squares Grid" msgstr "Squares Grid" -#: flatcamGUI/PreferencesUI.py:7731 flatcamTools/ToolCopperThieving.py:195 +#: flatcamGUI/PreferencesUI.py:7731 flatcamTools/ToolCopperThieving.py:194 msgid "Lines Grid" msgstr "Lines Grid" -#: flatcamGUI/PreferencesUI.py:7733 flatcamTools/ToolCopperThieving.py:197 +#: flatcamGUI/PreferencesUI.py:7733 flatcamTools/ToolCopperThieving.py:196 msgid "Fill Type:" msgstr "Fill Type:" -#: flatcamGUI/PreferencesUI.py:7735 flatcamTools/ToolCopperThieving.py:199 +#: flatcamGUI/PreferencesUI.py:7735 flatcamTools/ToolCopperThieving.py:198 msgid "" "- 'Solid' - copper thieving will be a solid polygon.\n" "- 'Dots Grid' - the empty area will be filled with a pattern of dots.\n" @@ -12666,54 +12341,54 @@ msgstr "" "- 'Squares Grid' - the empty area will be filled with a pattern of squares.\n" "- 'Lines Grid' - the empty area will be filled with a pattern of lines." -#: flatcamGUI/PreferencesUI.py:7743 flatcamTools/ToolCopperThieving.py:218 +#: flatcamGUI/PreferencesUI.py:7743 flatcamTools/ToolCopperThieving.py:217 msgid "Dots Grid Parameters" msgstr "Dots Grid Parameters" -#: flatcamGUI/PreferencesUI.py:7749 flatcamTools/ToolCopperThieving.py:224 +#: flatcamGUI/PreferencesUI.py:7749 flatcamTools/ToolCopperThieving.py:223 msgid "Dot diameter in Dots Grid." msgstr "Dot diameter in Dots Grid." #: flatcamGUI/PreferencesUI.py:7760 flatcamGUI/PreferencesUI.py:7789 -#: flatcamGUI/PreferencesUI.py:7818 flatcamTools/ToolCopperThieving.py:235 -#: flatcamTools/ToolCopperThieving.py:275 -#: flatcamTools/ToolCopperThieving.py:315 +#: flatcamGUI/PreferencesUI.py:7818 flatcamTools/ToolCopperThieving.py:234 +#: flatcamTools/ToolCopperThieving.py:274 +#: flatcamTools/ToolCopperThieving.py:314 msgid "Spacing" msgstr "Spacing" -#: flatcamGUI/PreferencesUI.py:7762 flatcamTools/ToolCopperThieving.py:237 +#: flatcamGUI/PreferencesUI.py:7762 flatcamTools/ToolCopperThieving.py:236 msgid "Distance between each two dots in Dots Grid." msgstr "Distance between each two dots in Dots Grid." -#: flatcamGUI/PreferencesUI.py:7772 flatcamTools/ToolCopperThieving.py:258 +#: flatcamGUI/PreferencesUI.py:7772 flatcamTools/ToolCopperThieving.py:257 msgid "Squares Grid Parameters" msgstr "Squares Grid Parameters" -#: flatcamGUI/PreferencesUI.py:7778 flatcamTools/ToolCopperThieving.py:264 +#: flatcamGUI/PreferencesUI.py:7778 flatcamTools/ToolCopperThieving.py:263 msgid "Square side size in Squares Grid." msgstr "Square side size in Squares Grid." -#: flatcamGUI/PreferencesUI.py:7791 flatcamTools/ToolCopperThieving.py:277 +#: flatcamGUI/PreferencesUI.py:7791 flatcamTools/ToolCopperThieving.py:276 msgid "Distance between each two squares in Squares Grid." msgstr "Distance between each two squares in Squares Grid." -#: flatcamGUI/PreferencesUI.py:7801 flatcamTools/ToolCopperThieving.py:298 +#: flatcamGUI/PreferencesUI.py:7801 flatcamTools/ToolCopperThieving.py:297 msgid "Lines Grid Parameters" msgstr "Lines Grid Parameters" -#: flatcamGUI/PreferencesUI.py:7807 flatcamTools/ToolCopperThieving.py:304 +#: flatcamGUI/PreferencesUI.py:7807 flatcamTools/ToolCopperThieving.py:303 msgid "Line thickness size in Lines Grid." msgstr "Line thickness size in Lines Grid." -#: flatcamGUI/PreferencesUI.py:7820 flatcamTools/ToolCopperThieving.py:317 +#: flatcamGUI/PreferencesUI.py:7820 flatcamTools/ToolCopperThieving.py:316 msgid "Distance between each two lines in Lines Grid." msgstr "Distance between each two lines in Lines Grid." -#: flatcamGUI/PreferencesUI.py:7830 flatcamTools/ToolCopperThieving.py:355 +#: flatcamGUI/PreferencesUI.py:7830 flatcamTools/ToolCopperThieving.py:354 msgid "Robber Bar Parameters" msgstr "Robber Bar Parameters" -#: flatcamGUI/PreferencesUI.py:7832 flatcamTools/ToolCopperThieving.py:357 +#: flatcamGUI/PreferencesUI.py:7832 flatcamTools/ToolCopperThieving.py:356 msgid "" "Parameters used for the robber bar.\n" "Robber bar = copper border to help in pattern hole plating." @@ -12721,27 +12396,27 @@ msgstr "" "Parameters used for the robber bar.\n" "Robber bar = copper border to help in pattern hole plating." -#: flatcamGUI/PreferencesUI.py:7840 flatcamTools/ToolCopperThieving.py:365 +#: flatcamGUI/PreferencesUI.py:7840 flatcamTools/ToolCopperThieving.py:364 msgid "Bounding box margin for robber bar." msgstr "Bounding box margin for robber bar." -#: flatcamGUI/PreferencesUI.py:7851 flatcamTools/ToolCopperThieving.py:376 +#: flatcamGUI/PreferencesUI.py:7851 flatcamTools/ToolCopperThieving.py:375 msgid "Thickness" msgstr "Thickness" -#: flatcamGUI/PreferencesUI.py:7853 flatcamTools/ToolCopperThieving.py:378 +#: flatcamGUI/PreferencesUI.py:7853 flatcamTools/ToolCopperThieving.py:377 msgid "The robber bar thickness." msgstr "The robber bar thickness." -#: flatcamGUI/PreferencesUI.py:7863 flatcamTools/ToolCopperThieving.py:409 +#: flatcamGUI/PreferencesUI.py:7863 flatcamTools/ToolCopperThieving.py:408 msgid "Pattern Plating Mask" msgstr "Pattern Plating Mask" -#: flatcamGUI/PreferencesUI.py:7865 flatcamTools/ToolCopperThieving.py:411 +#: flatcamGUI/PreferencesUI.py:7865 flatcamTools/ToolCopperThieving.py:410 msgid "Generate a mask for pattern plating." msgstr "Generate a mask for pattern plating." -#: flatcamGUI/PreferencesUI.py:7872 flatcamTools/ToolCopperThieving.py:434 +#: flatcamGUI/PreferencesUI.py:7872 flatcamTools/ToolCopperThieving.py:433 msgid "" "The distance between the possible copper thieving elements\n" "and/or robber bar and the actual openings in the mask." @@ -12755,7 +12430,7 @@ msgstr "Fiducials Tool Options" #: flatcamGUI/PreferencesUI.py:7902 flatcamGUI/PreferencesUI.py:8018 #: flatcamGUI/PreferencesUI.py:8137 flatcamGUI/PreferencesUI.py:8349 -#: flatcamTools/ToolCopperThieving.py:92 flatcamTools/ToolFiducials.py:151 +#: flatcamTools/ToolCopperThieving.py:91 flatcamTools/ToolFiducials.py:151 msgid "Parameters used for this tool." msgstr "Parameters used for this tool." @@ -13074,6 +12749,15 @@ msgid "Punch Gerber Options" msgstr "Punch Gerber Options" #: flatcamGUI/PreferencesUI.py:8419 flatcamTools/ToolPunchGerber.py:141 +#| msgid "" +#| "The punch hole source can be:\n" +#| "- Excellon Object-> the Excellon object drills center will serve as " +#| "reference.\n" +#| "- Fixed Diameter -> will try to use the pads center as reference adding " +#| "fixed diameter holes.\n" +#| "- Fixed Annular Ring -> will try to keep a set annular ring.\n" +#| "- Proportional -> will make a Gerber punch hole having the diameter a " +#| "percentage of the pad diameter.\n" msgid "" "The punch hole source can be:\n" "- Excellon Object-> the Excellon object drills center will serve as " @@ -13082,7 +12766,7 @@ msgid "" "fixed diameter holes.\n" "- Fixed Annular Ring -> will try to keep a set annular ring.\n" "- Proportional -> will make a Gerber punch hole having the diameter a " -"percentage of the pad diameter.\n" +"percentage of the pad diameter." msgstr "" "The punch hole source can be:\n" "- Excellon Object-> the Excellon object drills center will serve as " @@ -13091,7 +12775,7 @@ msgstr "" "fixed diameter holes.\n" "- Fixed Annular Ring -> will try to keep a set annular ring.\n" "- Proportional -> will make a Gerber punch hole having the diameter a " -"percentage of the pad diameter.\n" +"percentage of the pad diameter." #: flatcamGUI/PreferencesUI.py:8552 msgid "Invert Gerber Tool Options" @@ -13273,11 +12957,379 @@ msgstr "Delete keyword" msgid "Delete a keyword from the list" msgstr "Delete a keyword from the list" -#: flatcamParsers/ParseExcellon.py:315 +#: flatcamObjects/FlatCAMCNCJob.py:429 flatcamObjects/FlatCAMDocument.py:71 +#: flatcamObjects/FlatCAMScript.py:83 +msgid "Basic" +msgstr "Basic" + +#: flatcamObjects/FlatCAMCNCJob.py:435 flatcamObjects/FlatCAMDocument.py:75 +#: flatcamObjects/FlatCAMScript.py:87 +msgid "Advanced" +msgstr "Advanced" + +#: flatcamObjects/FlatCAMCNCJob.py:478 +msgid "Plotting..." +msgstr "Plotting..." + +#: flatcamObjects/FlatCAMCNCJob.py:507 flatcamObjects/FlatCAMCNCJob.py:512 +#: flatcamTools/ToolSolderPaste.py:1499 +msgid "Export Machine Code ..." +msgstr "Export Machine Code ..." + +#: flatcamObjects/FlatCAMCNCJob.py:517 flatcamTools/ToolSolderPaste.py:1503 +msgid "Export Machine Code cancelled ..." +msgstr "Export Machine Code cancelled ..." + +#: flatcamObjects/FlatCAMCNCJob.py:538 +msgid "Machine Code file saved to" +msgstr "Machine Code file saved to" + +#: flatcamObjects/FlatCAMCNCJob.py:599 flatcamTools/ToolCalibration.py:1097 +msgid "Loaded Machine Code into Code Editor" +msgstr "Loaded Machine Code into Code Editor" + +#: flatcamObjects/FlatCAMCNCJob.py:739 +msgid "This CNCJob object can't be processed because it is a" +msgstr "This CNCJob object can't be processed because it is a" + +#: flatcamObjects/FlatCAMCNCJob.py:741 +msgid "CNCJob object" +msgstr "CNCJob object" + +#: flatcamObjects/FlatCAMCNCJob.py:921 +msgid "" +"G-code does not have a G94 code and we will not include the code in the " +"'Prepend to GCode' text box" +msgstr "" +"G-code does not have a G94 code and we will not include the code in the " +"'Prepend to GCode' text box" + +#: flatcamObjects/FlatCAMCNCJob.py:932 +msgid "Cancelled. The Toolchange Custom code is enabled but it's empty." +msgstr "Cancelled. The Toolchange Custom code is enabled but it's empty." + +#: flatcamObjects/FlatCAMCNCJob.py:937 +msgid "Toolchange G-code was replaced by a custom code." +msgstr "Toolchange G-code was replaced by a custom code." + +#: flatcamObjects/FlatCAMCNCJob.py:985 flatcamObjects/FlatCAMCNCJob.py:995 +msgid "" +"The used preprocessor file has to have in it's name: 'toolchange_custom'" +msgstr "" +"The used preprocessor file has to have in it's name: 'toolchange_custom'" + +#: flatcamObjects/FlatCAMCNCJob.py:998 +msgid "There is no preprocessor file." +msgstr "There is no preprocessor file." + +#: flatcamObjects/FlatCAMDocument.py:175 +msgid "Document Editor" +msgstr "Document Editor" + +#: flatcamObjects/FlatCAMExcellon.py:514 flatcamObjects/FlatCAMExcellon.py:746 +#: flatcamObjects/FlatCAMGeometry.py:306 flatcamObjects/FlatCAMGeometry.py:767 +#: flatcamTools/ToolNCC.py:811 flatcamTools/ToolNCC.py:1191 +#: flatcamTools/ToolPaint.py:779 flatcamTools/ToolPaint.py:1166 +msgid "Multiple Tools" +msgstr "Multiple Tools" + +#: flatcamObjects/FlatCAMExcellon.py:726 +msgid "No Tool Selected" +msgstr "No Tool Selected" + +#: flatcamObjects/FlatCAMExcellon.py:1076 +#: flatcamObjects/FlatCAMExcellon.py:1168 +#: flatcamObjects/FlatCAMExcellon.py:1355 +msgid "Please select one or more tools from the list and try again." +msgstr "Please select one or more tools from the list and try again." + +#: flatcamObjects/FlatCAMExcellon.py:1083 +msgid "Milling tool for DRILLS is larger than hole size. Cancelled." +msgstr "Milling tool for DRILLS is larger than hole size. Cancelled." + +#: flatcamObjects/FlatCAMExcellon.py:1098 +#: flatcamObjects/FlatCAMExcellon.py:1188 +#: flatcamObjects/FlatCAMExcellon.py:1373 +#: tclCommands/TclCommandDrillcncjob.py:193 +msgid "Tool_nr" +msgstr "Tool_nr" + +#: flatcamObjects/FlatCAMExcellon.py:1098 +#: flatcamObjects/FlatCAMExcellon.py:1188 +#: flatcamObjects/FlatCAMExcellon.py:1373 +#: tclCommands/TclCommandDrillcncjob.py:193 +msgid "Drills_Nr" +msgstr "Drills_Nr" + +#: flatcamObjects/FlatCAMExcellon.py:1098 +#: flatcamObjects/FlatCAMExcellon.py:1188 +#: flatcamObjects/FlatCAMExcellon.py:1373 +#: tclCommands/TclCommandDrillcncjob.py:193 +msgid "Slots_Nr" +msgstr "Slots_Nr" + +#: flatcamObjects/FlatCAMExcellon.py:1177 +msgid "Milling tool for SLOTS is larger than hole size. Cancelled." +msgstr "Milling tool for SLOTS is larger than hole size. Cancelled." + +#: flatcamObjects/FlatCAMExcellon.py:1281 +#: flatcamObjects/FlatCAMGeometry.py:1517 +msgid "Focus Z" +msgstr "Focus Z" + +#: flatcamObjects/FlatCAMExcellon.py:1300 +#: flatcamObjects/FlatCAMGeometry.py:1536 +msgid "Laser Power" +msgstr "Laser Power" + +#: flatcamObjects/FlatCAMExcellon.py:1430 +#: flatcamObjects/FlatCAMGeometry.py:1973 +#: flatcamObjects/FlatCAMGeometry.py:1977 +#: flatcamObjects/FlatCAMGeometry.py:2122 +msgid "Generating CNC Code" +msgstr "Generating CNC Code" + +#: flatcamObjects/FlatCAMExcellon.py:1620 flatcamTools/ToolNCC.py:918 +#: flatcamTools/ToolPaint.py:844 +msgid "Current Tool parameters were applied to all tools." +msgstr "Current Tool parameters were applied to all tools." + +#: flatcamObjects/FlatCAMGeometry.py:119 flatcamObjects/FlatCAMGeometry.py:1181 +#: flatcamObjects/FlatCAMGeometry.py:1182 +#: flatcamObjects/FlatCAMGeometry.py:1191 +msgid "Iso" +msgstr "Iso" + +#: flatcamObjects/FlatCAMGeometry.py:119 flatcamObjects/FlatCAMGeometry.py:439 +#: flatcamObjects/FlatCAMGeometry.py:826 flatcamObjects/FlatCAMGerber.py:890 +#: flatcamObjects/FlatCAMGerber.py:1038 +msgid "Rough" +msgstr "Rough" + +#: flatcamObjects/FlatCAMGeometry.py:119 +msgid "Finish" +msgstr "Finish" + +#: flatcamObjects/FlatCAMGeometry.py:474 +msgid "Add from Tool DB" +msgstr "Add from Tool DB" + +#: flatcamObjects/FlatCAMGeometry.py:845 +msgid "Tool added in Tool Table." +msgstr "Tool added in Tool Table." + +#: flatcamObjects/FlatCAMGeometry.py:954 flatcamObjects/FlatCAMGeometry.py:963 +msgid "Failed. Select a tool to copy." +msgstr "Failed. Select a tool to copy." + +#: flatcamObjects/FlatCAMGeometry.py:992 +msgid "Tool was copied in Tool Table." +msgstr "Tool was copied in Tool Table." + +#: flatcamObjects/FlatCAMGeometry.py:1019 +msgid "Tool was edited in Tool Table." +msgstr "Tool was edited in Tool Table." + +#: flatcamObjects/FlatCAMGeometry.py:1048 +#: flatcamObjects/FlatCAMGeometry.py:1057 +msgid "Failed. Select a tool to delete." +msgstr "Failed. Select a tool to delete." + +#: flatcamObjects/FlatCAMGeometry.py:1081 +msgid "Tool was deleted in Tool Table." +msgstr "Tool was deleted in Tool Table." + +#: flatcamObjects/FlatCAMGeometry.py:1589 +msgid "This Geometry can't be processed because it is" +msgstr "This Geometry can't be processed because it is" + +#: flatcamObjects/FlatCAMGeometry.py:1589 +msgid "geometry" +msgstr "geometry" + +#: flatcamObjects/FlatCAMGeometry.py:1630 +msgid "Failed. No tool selected in the tool table ..." +msgstr "Failed. No tool selected in the tool table ..." + +#: flatcamObjects/FlatCAMGeometry.py:1732 +#: flatcamObjects/FlatCAMGeometry.py:1882 +msgid "" +"Tool Offset is selected in Tool Table but no value is provided.\n" +"Add a Tool Offset or change the Offset Type." +msgstr "" +"Tool Offset is selected in Tool Table but no value is provided.\n" +"Add a Tool Offset or change the Offset Type." + +#: flatcamObjects/FlatCAMGeometry.py:1798 +#: flatcamObjects/FlatCAMGeometry.py:1944 +msgid "G-Code parsing in progress..." +msgstr "G-Code parsing in progress..." + +#: flatcamObjects/FlatCAMGeometry.py:1800 +#: flatcamObjects/FlatCAMGeometry.py:1946 +msgid "G-Code parsing finished..." +msgstr "G-Code parsing finished..." + +#: flatcamObjects/FlatCAMGeometry.py:1808 +msgid "Finished G-Code processing" +msgstr "Finished G-Code processing" + +#: flatcamObjects/FlatCAMGeometry.py:1810 +#: flatcamObjects/FlatCAMGeometry.py:1958 +msgid "G-Code processing failed with error" +msgstr "G-Code processing failed with error" + +#: flatcamObjects/FlatCAMGeometry.py:1852 flatcamTools/ToolSolderPaste.py:1301 +msgid "Cancelled. Empty file, it has no geometry" +msgstr "Cancelled. Empty file, it has no geometry" + +#: flatcamObjects/FlatCAMGeometry.py:1956 +#: flatcamObjects/FlatCAMGeometry.py:2117 +msgid "Finished G-Code processing..." +msgstr "Finished G-Code processing..." + +#: flatcamObjects/FlatCAMGeometry.py:1975 +#: flatcamObjects/FlatCAMGeometry.py:1979 +#: flatcamObjects/FlatCAMGeometry.py:2124 +msgid "CNCjob created" +msgstr "CNCjob created" + +#: flatcamObjects/FlatCAMGeometry.py:2155 +#: flatcamObjects/FlatCAMGeometry.py:2164 flatcamParsers/ParseGerber.py:1867 +#: flatcamParsers/ParseGerber.py:1877 +msgid "Scale factor has to be a number: integer or float." +msgstr "Scale factor has to be a number: integer or float." + +#: flatcamObjects/FlatCAMGeometry.py:2227 +msgid "Geometry Scale done." +msgstr "Geometry Scale done." + +#: flatcamObjects/FlatCAMGeometry.py:2244 flatcamParsers/ParseGerber.py:1993 +msgid "" +"An (x,y) pair of values are needed. Probable you entered only one value in " +"the Offset field." +msgstr "" +"An (x,y) pair of values are needed. Probable you entered only one value in " +"the Offset field." + +#: flatcamObjects/FlatCAMGeometry.py:2300 +msgid "Geometry Offset done." +msgstr "Geometry Offset done." + +#: flatcamObjects/FlatCAMGeometry.py:2329 +msgid "" +"The Toolchange X,Y field in Edit -> Preferences has to be in the format (x, " +"y)\n" +"but now there is only one value, not two." +msgstr "" +"The Toolchange X,Y field in Edit -> Preferences has to be in the format (x, " +"y)\n" +"but now there is only one value, not two." + +#: flatcamObjects/FlatCAMGerber.py:493 +msgid "Buffering solid geometry" +msgstr "Buffering solid geometry" + +#: flatcamObjects/FlatCAMGerber.py:502 +msgid "Done" +msgstr "Done" + +#: flatcamObjects/FlatCAMGerber.py:528 flatcamObjects/FlatCAMGerber.py:554 +msgid "Operation could not be done." +msgstr "Operation could not be done." + +#: flatcamObjects/FlatCAMGerber.py:571 +msgid "Isolating..." +msgstr "Isolating..." + +#: flatcamObjects/FlatCAMGerber.py:630 +msgid "Click on a polygon to isolate it." +msgstr "Click on a polygon to isolate it." + +#: flatcamObjects/FlatCAMGerber.py:669 flatcamObjects/FlatCAMGerber.py:773 +#: flatcamTools/ToolPaint.py:1511 +msgid "Added polygon" +msgstr "Added polygon" + +#: flatcamObjects/FlatCAMGerber.py:670 flatcamObjects/FlatCAMGerber.py:775 +msgid "Click to add next polygon or right click to start isolation." +msgstr "Click to add next polygon or right click to start isolation." + +#: flatcamObjects/FlatCAMGerber.py:682 flatcamTools/ToolPaint.py:1525 +msgid "Removed polygon" +msgstr "Removed polygon" + +#: flatcamObjects/FlatCAMGerber.py:683 +msgid "Click to add/remove next polygon or right click to start isolation." +msgstr "Click to add/remove next polygon or right click to start isolation." + +#: flatcamObjects/FlatCAMGerber.py:688 flatcamTools/ToolPaint.py:1531 +msgid "No polygon detected under click position." +msgstr "No polygon detected under click position." + +#: flatcamObjects/FlatCAMGerber.py:709 flatcamTools/ToolPaint.py:1560 +msgid "List of single polygons is empty. Aborting." +msgstr "List of single polygons is empty. Aborting." + +#: flatcamObjects/FlatCAMGerber.py:778 +msgid "No polygon in selection." +msgstr "No polygon in selection." + +#: flatcamObjects/FlatCAMGerber.py:906 flatcamObjects/FlatCAMGerber.py:985 +#: flatcamTools/ToolNCC.py:2081 flatcamTools/ToolNCC.py:3132 +#: flatcamTools/ToolNCC.py:3511 +msgid "Isolation geometry could not be generated." +msgstr "Isolation geometry could not be generated." + +#: flatcamObjects/FlatCAMGerber.py:931 flatcamObjects/FlatCAMGerber.py:1063 +msgid "Isolation geometry created" +msgstr "Isolation geometry created" + +#: flatcamObjects/FlatCAMGerber.py:940 flatcamObjects/FlatCAMGerber.py:1070 +msgid "Subtracting Geo" +msgstr "Subtracting Geo" + +#: flatcamObjects/FlatCAMGerber.py:1395 +msgid "Plotting Apertures" +msgstr "Plotting Apertures" + +#: flatcamObjects/FlatCAMObj.py:234 +msgid "Name changed from" +msgstr "Name changed from" + +#: flatcamObjects/FlatCAMObj.py:234 +msgid "to" +msgstr "to" + +#: flatcamObjects/FlatCAMObj.py:245 +msgid "Offsetting..." +msgstr "Offsetting..." + +#: flatcamObjects/FlatCAMObj.py:259 flatcamObjects/FlatCAMObj.py:264 +msgid "Scaling could not be executed." +msgstr "Scaling could not be executed." + +#: flatcamObjects/FlatCAMObj.py:268 flatcamObjects/FlatCAMObj.py:276 +msgid "Scale done." +msgstr "Scale done." + +#: flatcamObjects/FlatCAMObj.py:274 +msgid "Scaling..." +msgstr "Scaling..." + +#: flatcamObjects/FlatCAMObj.py:292 +msgid "Skewing..." +msgstr "Skewing..." + +#: flatcamObjects/FlatCAMScript.py:102 +msgid "Script Editor" +msgstr "Script Editor" + +#: flatcamParsers/ParseExcellon.py:316 msgid "This is GCODE mark" msgstr "This is GCODE mark" -#: flatcamParsers/ParseExcellon.py:432 +#: flatcamParsers/ParseExcellon.py:433 msgid "" "No tool diameter info's. See shell.\n" "A tool change event: T" @@ -13285,7 +13337,7 @@ msgstr "" "No tool diameter info's. See shell.\n" "A tool change event: T" -#: flatcamParsers/ParseExcellon.py:435 +#: flatcamParsers/ParseExcellon.py:436 msgid "" "was found but the Excellon file have no informations regarding the tool " "diameters therefore the application will try to load it by using some 'fake' " @@ -13299,10 +13351,6 @@ msgstr "" "The user needs to edit the resulting Excellon object and change the " "diameters to reflect the real diameters." -#: flatcamParsers/ParseExcellon.py:897 flatcamTools/ToolSolderPaste.py:1327 -msgid "An internal error has ocurred. See shell.\n" -msgstr "An internal error has ocurred. See shell.\n" - #: flatcamParsers/ParseExcellon.py:900 msgid "" "Excellon Parser error.\n" @@ -13372,7 +13420,7 @@ msgstr "Gerber Line Content" msgid "Gerber Parser ERROR" msgstr "Gerber Parser ERROR" -#: flatcamParsers/ParseGerber.py:1956 +#: flatcamParsers/ParseGerber.py:1957 msgid "Gerber Scale done." msgstr "Gerber Scale done." @@ -13380,19 +13428,19 @@ msgstr "Gerber Scale done." msgid "Gerber Offset done." msgstr "Gerber Offset done." -#: flatcamParsers/ParseGerber.py:2126 +#: flatcamParsers/ParseGerber.py:2125 msgid "Gerber Mirror done." msgstr "Gerber Mirror done." -#: flatcamParsers/ParseGerber.py:2200 +#: flatcamParsers/ParseGerber.py:2199 msgid "Gerber Skew done." msgstr "Gerber Skew done." -#: flatcamParsers/ParseGerber.py:2263 +#: flatcamParsers/ParseGerber.py:2261 msgid "Gerber Rotate done." msgstr "Gerber Rotate done." -#: flatcamParsers/ParseGerber.py:2419 +#: flatcamParsers/ParseGerber.py:2418 msgid "Gerber Buffer done." msgstr "Gerber Buffer done." @@ -13497,28 +13545,28 @@ msgstr "" "If tho points are used it assume translation and rotation." #: flatcamTools/ToolAlignObjects.py:176 flatcamTools/ToolCalculators.py:246 -#: flatcamTools/ToolCalibration.py:683 flatcamTools/ToolCopperThieving.py:485 -#: flatcamTools/ToolCutOut.py:372 flatcamTools/ToolDblSided.py:472 +#: flatcamTools/ToolCalibration.py:683 flatcamTools/ToolCopperThieving.py:484 +#: flatcamTools/ToolCutOut.py:371 flatcamTools/ToolDblSided.py:471 #: flatcamTools/ToolExtractDrills.py:310 flatcamTools/ToolFiducials.py:318 #: flatcamTools/ToolFilm.py:520 flatcamTools/ToolInvertGerber.py:140 -#: flatcamTools/ToolNCC.py:612 flatcamTools/ToolOptimal.py:238 -#: flatcamTools/ToolPaint.py:556 flatcamTools/ToolPanelize.py:269 +#: flatcamTools/ToolNCC.py:612 flatcamTools/ToolOptimal.py:237 +#: flatcamTools/ToolPaint.py:556 flatcamTools/ToolPanelize.py:267 #: flatcamTools/ToolPunchGerber.py:339 flatcamTools/ToolQRCode.py:314 -#: flatcamTools/ToolRulesCheck.py:516 flatcamTools/ToolSolderPaste.py:474 -#: flatcamTools/ToolSub.py:176 flatcamTools/ToolTransform.py:399 +#: flatcamTools/ToolRulesCheck.py:516 flatcamTools/ToolSolderPaste.py:473 +#: flatcamTools/ToolSub.py:176 flatcamTools/ToolTransform.py:398 msgid "Reset Tool" msgstr "Reset Tool" #: flatcamTools/ToolAlignObjects.py:178 flatcamTools/ToolCalculators.py:248 -#: flatcamTools/ToolCalibration.py:685 flatcamTools/ToolCopperThieving.py:487 -#: flatcamTools/ToolCutOut.py:374 flatcamTools/ToolDblSided.py:474 +#: flatcamTools/ToolCalibration.py:685 flatcamTools/ToolCopperThieving.py:486 +#: flatcamTools/ToolCutOut.py:373 flatcamTools/ToolDblSided.py:473 #: flatcamTools/ToolExtractDrills.py:312 flatcamTools/ToolFiducials.py:320 #: flatcamTools/ToolFilm.py:522 flatcamTools/ToolInvertGerber.py:142 -#: flatcamTools/ToolNCC.py:614 flatcamTools/ToolOptimal.py:240 -#: flatcamTools/ToolPaint.py:558 flatcamTools/ToolPanelize.py:271 +#: flatcamTools/ToolNCC.py:614 flatcamTools/ToolOptimal.py:239 +#: flatcamTools/ToolPaint.py:558 flatcamTools/ToolPanelize.py:269 #: flatcamTools/ToolPunchGerber.py:341 flatcamTools/ToolQRCode.py:316 -#: flatcamTools/ToolRulesCheck.py:518 flatcamTools/ToolSolderPaste.py:476 -#: flatcamTools/ToolSub.py:178 flatcamTools/ToolTransform.py:401 +#: flatcamTools/ToolRulesCheck.py:518 flatcamTools/ToolSolderPaste.py:475 +#: flatcamTools/ToolSub.py:178 flatcamTools/ToolTransform.py:400 msgid "Will reset the tool parameters." msgstr "Will reset the tool parameters." @@ -13552,8 +13600,9 @@ msgstr "Click on the DESTINATION point." #: flatcamTools/ToolAlignObjects.py:385 flatcamTools/ToolAlignObjects.py:400 #: flatcamTools/ToolAlignObjects.py:407 -msgid " Or right click to cancel." -msgstr " Or right click to cancel." +#| msgid " Or right click to cancel." +msgid "Or right click to cancel." +msgstr "Or right click to cancel." #: flatcamTools/ToolAlignObjects.py:400 flatcamTools/ToolAlignObjects.py:407 #: flatcamTools/ToolFiducials.py:111 @@ -13673,7 +13722,7 @@ msgstr "" "(as much as possible) corners of the object." #: flatcamTools/ToolCalibration.py:193 flatcamTools/ToolFilm.py:76 -#: flatcamTools/ToolImage.py:54 flatcamTools/ToolPanelize.py:78 +#: flatcamTools/ToolImage.py:54 flatcamTools/ToolPanelize.py:76 #: flatcamTools/ToolProperties.py:177 msgid "Object Type" msgstr "Object Type" @@ -13777,7 +13826,7 @@ msgstr "" "- third point -> check point. Can be: top-left or bottom-right.\n" "- forth point -> final verification point. Just for evaluation." -#: flatcamTools/ToolCalibration.py:403 flatcamTools/ToolSolderPaste.py:349 +#: flatcamTools/ToolCalibration.py:403 flatcamTools/ToolSolderPaste.py:348 msgid "Generate GCode" msgstr "Generate GCode" @@ -13947,11 +13996,11 @@ msgstr "Cancelled. Four points are needed for GCode generation." msgid "There is no FlatCAM object selected..." msgstr "There is no FlatCAM object selected..." -#: flatcamTools/ToolCopperThieving.py:77 flatcamTools/ToolFiducials.py:261 +#: flatcamTools/ToolCopperThieving.py:76 flatcamTools/ToolFiducials.py:261 msgid "Gerber Object to which will be added a copper thieving." msgstr "Gerber Object to which will be added a copper thieving." -#: flatcamTools/ToolCopperThieving.py:99 +#: flatcamTools/ToolCopperThieving.py:98 msgid "" "This set the distance between the copper thieving components\n" "(the polygon fill may be split in multiple polygons)\n" @@ -13961,7 +14010,7 @@ msgstr "" "(the polygon fill may be split in multiple polygons)\n" "and the copper traces in the Gerber file." -#: flatcamTools/ToolCopperThieving.py:132 +#: flatcamTools/ToolCopperThieving.py:131 msgid "" "- 'Itself' - the copper thieving extent is based on the object extent.\n" "- 'Area Selection' - left mouse click to start selection of the area to be " @@ -13975,12 +14024,12 @@ msgstr "" "- 'Reference Object' - will do copper thieving within the area specified by " "another object." -#: flatcamTools/ToolCopperThieving.py:139 flatcamTools/ToolNCC.py:552 +#: flatcamTools/ToolCopperThieving.py:138 flatcamTools/ToolNCC.py:552 #: flatcamTools/ToolPaint.py:496 msgid "Ref. Type" msgstr "Ref. Type" -#: flatcamTools/ToolCopperThieving.py:141 +#: flatcamTools/ToolCopperThieving.py:140 msgid "" "The type of FlatCAM object to be used as copper thieving reference.\n" "It can be Gerber, Excellon or Geometry." @@ -13988,21 +14037,21 @@ msgstr "" "The type of FlatCAM object to be used as copper thieving reference.\n" "It can be Gerber, Excellon or Geometry." -#: flatcamTools/ToolCopperThieving.py:150 flatcamTools/ToolNCC.py:562 +#: flatcamTools/ToolCopperThieving.py:149 flatcamTools/ToolNCC.py:562 #: flatcamTools/ToolPaint.py:506 msgid "Ref. Object" msgstr "Ref. Object" -#: flatcamTools/ToolCopperThieving.py:152 flatcamTools/ToolNCC.py:564 +#: flatcamTools/ToolCopperThieving.py:151 flatcamTools/ToolNCC.py:564 #: flatcamTools/ToolPaint.py:508 msgid "The FlatCAM object to be used as non copper clearing reference." msgstr "The FlatCAM object to be used as non copper clearing reference." -#: flatcamTools/ToolCopperThieving.py:328 +#: flatcamTools/ToolCopperThieving.py:327 msgid "Insert Copper thieving" msgstr "Insert Copper thieving" -#: flatcamTools/ToolCopperThieving.py:330 +#: flatcamTools/ToolCopperThieving.py:329 msgid "" "Will add a polygon (may be split in multiple parts)\n" "that will surround the actual Gerber traces at a certain distance." @@ -14010,11 +14059,11 @@ msgstr "" "Will add a polygon (may be split in multiple parts)\n" "that will surround the actual Gerber traces at a certain distance." -#: flatcamTools/ToolCopperThieving.py:389 +#: flatcamTools/ToolCopperThieving.py:388 msgid "Insert Robber Bar" msgstr "Insert Robber Bar" -#: flatcamTools/ToolCopperThieving.py:391 +#: flatcamTools/ToolCopperThieving.py:390 msgid "" "Will add a polygon with a defined thickness\n" "that will surround the actual Gerber object\n" @@ -14026,11 +14075,11 @@ msgstr "" "at a certain distance.\n" "Required when doing holes pattern plating." -#: flatcamTools/ToolCopperThieving.py:415 +#: flatcamTools/ToolCopperThieving.py:414 msgid "Select Soldermask object" msgstr "Select Soldermask object" -#: flatcamTools/ToolCopperThieving.py:417 +#: flatcamTools/ToolCopperThieving.py:416 msgid "" "Gerber Object with the soldermask.\n" "It will be used as a base for\n" @@ -14040,11 +14089,11 @@ msgstr "" "It will be used as a base for\n" "the pattern plating mask." -#: flatcamTools/ToolCopperThieving.py:446 +#: flatcamTools/ToolCopperThieving.py:445 msgid "Plated area" msgstr "Plated area" -#: flatcamTools/ToolCopperThieving.py:448 +#: flatcamTools/ToolCopperThieving.py:447 msgid "" "The area to be plated by pattern plating.\n" "Basically is made from the openings in the plating mask.\n" @@ -14062,19 +14111,19 @@ msgstr "" "a bit larger than the copper pads, and this area is\n" "calculated from the soldermask openings." -#: flatcamTools/ToolCopperThieving.py:459 +#: flatcamTools/ToolCopperThieving.py:458 msgid "mm" msgstr "mm" -#: flatcamTools/ToolCopperThieving.py:461 +#: flatcamTools/ToolCopperThieving.py:460 msgid "in" msgstr "in" -#: flatcamTools/ToolCopperThieving.py:468 +#: flatcamTools/ToolCopperThieving.py:467 msgid "Generate pattern plating mask" msgstr "Generate pattern plating mask" -#: flatcamTools/ToolCopperThieving.py:470 +#: flatcamTools/ToolCopperThieving.py:469 msgid "" "Will add to the soldermask gerber geometry\n" "the geometries of the copper thieving and/or\n" @@ -14084,154 +14133,154 @@ msgstr "" "the geometries of the copper thieving and/or\n" "the robber bar if those were generated." -#: flatcamTools/ToolCopperThieving.py:626 -#: flatcamTools/ToolCopperThieving.py:651 +#: flatcamTools/ToolCopperThieving.py:625 +#: flatcamTools/ToolCopperThieving.py:650 msgid "Lines Grid works only for 'itself' reference ..." msgstr "Lines Grid works only for 'itself' reference ..." -#: flatcamTools/ToolCopperThieving.py:637 +#: flatcamTools/ToolCopperThieving.py:636 msgid "Solid fill selected." msgstr "Solid fill selected." -#: flatcamTools/ToolCopperThieving.py:642 +#: flatcamTools/ToolCopperThieving.py:641 msgid "Dots grid fill selected." msgstr "Dots grid fill selected." -#: flatcamTools/ToolCopperThieving.py:647 +#: flatcamTools/ToolCopperThieving.py:646 msgid "Squares grid fill selected." msgstr "Squares grid fill selected." -#: flatcamTools/ToolCopperThieving.py:668 -#: flatcamTools/ToolCopperThieving.py:750 -#: flatcamTools/ToolCopperThieving.py:1346 flatcamTools/ToolDblSided.py:658 +#: flatcamTools/ToolCopperThieving.py:667 +#: flatcamTools/ToolCopperThieving.py:749 +#: flatcamTools/ToolCopperThieving.py:1345 flatcamTools/ToolDblSided.py:657 #: flatcamTools/ToolExtractDrills.py:436 flatcamTools/ToolFiducials.py:466 -#: flatcamTools/ToolFiducials.py:743 flatcamTools/ToolOptimal.py:343 +#: flatcamTools/ToolFiducials.py:743 flatcamTools/ToolOptimal.py:342 #: flatcamTools/ToolPunchGerber.py:512 flatcamTools/ToolQRCode.py:426 msgid "There is no Gerber object loaded ..." msgstr "There is no Gerber object loaded ..." -#: flatcamTools/ToolCopperThieving.py:681 -#: flatcamTools/ToolCopperThieving.py:1274 +#: flatcamTools/ToolCopperThieving.py:680 +#: flatcamTools/ToolCopperThieving.py:1273 msgid "Append geometry" msgstr "Append geometry" -#: flatcamTools/ToolCopperThieving.py:725 -#: flatcamTools/ToolCopperThieving.py:1307 -#: flatcamTools/ToolCopperThieving.py:1460 +#: flatcamTools/ToolCopperThieving.py:724 +#: flatcamTools/ToolCopperThieving.py:1306 +#: flatcamTools/ToolCopperThieving.py:1459 msgid "Append source file" msgstr "Append source file" -#: flatcamTools/ToolCopperThieving.py:733 -#: flatcamTools/ToolCopperThieving.py:1315 +#: flatcamTools/ToolCopperThieving.py:732 +#: flatcamTools/ToolCopperThieving.py:1314 msgid "Copper Thieving Tool done." msgstr "Copper Thieving Tool done." -#: flatcamTools/ToolCopperThieving.py:760 -#: flatcamTools/ToolCopperThieving.py:793 flatcamTools/ToolCutOut.py:480 -#: flatcamTools/ToolCutOut.py:667 flatcamTools/ToolInvertGerber.py:208 +#: flatcamTools/ToolCopperThieving.py:759 +#: flatcamTools/ToolCopperThieving.py:792 flatcamTools/ToolCutOut.py:479 +#: flatcamTools/ToolCutOut.py:666 flatcamTools/ToolInvertGerber.py:208 #: flatcamTools/ToolNCC.py:1594 flatcamTools/ToolNCC.py:1635 #: flatcamTools/ToolNCC.py:1664 flatcamTools/ToolPaint.py:1469 -#: flatcamTools/ToolPanelize.py:413 flatcamTools/ToolPanelize.py:428 +#: flatcamTools/ToolPanelize.py:411 flatcamTools/ToolPanelize.py:426 #: flatcamTools/ToolSub.py:294 flatcamTools/ToolSub.py:307 #: flatcamTools/ToolSub.py:498 flatcamTools/ToolSub.py:513 #: tclCommands/TclCommandCopperClear.py:97 tclCommands/TclCommandPaint.py:99 msgid "Could not retrieve object" msgstr "Could not retrieve object" -#: flatcamTools/ToolCopperThieving.py:770 flatcamTools/ToolNCC.py:1643 +#: flatcamTools/ToolCopperThieving.py:769 flatcamTools/ToolNCC.py:1643 msgid "Click the start point of the area." msgstr "Click the start point of the area." -#: flatcamTools/ToolCopperThieving.py:821 +#: flatcamTools/ToolCopperThieving.py:820 msgid "Click the end point of the filling area." msgstr "Click the end point of the filling area." -#: flatcamTools/ToolCopperThieving.py:827 flatcamTools/ToolNCC.py:1705 +#: flatcamTools/ToolCopperThieving.py:826 flatcamTools/ToolNCC.py:1705 #: flatcamTools/ToolNCC.py:1757 flatcamTools/ToolPaint.py:1601 #: flatcamTools/ToolPaint.py:1652 msgid "Zone added. Click to start adding next zone or right click to finish." msgstr "Zone added. Click to start adding next zone or right click to finish." -#: flatcamTools/ToolCopperThieving.py:943 -#: flatcamTools/ToolCopperThieving.py:947 -#: flatcamTools/ToolCopperThieving.py:1008 +#: flatcamTools/ToolCopperThieving.py:942 +#: flatcamTools/ToolCopperThieving.py:946 +#: flatcamTools/ToolCopperThieving.py:1007 msgid "Thieving" msgstr "Thieving" -#: flatcamTools/ToolCopperThieving.py:954 +#: flatcamTools/ToolCopperThieving.py:953 msgid "Copper Thieving Tool started. Reading parameters." msgstr "Copper Thieving Tool started. Reading parameters." -#: flatcamTools/ToolCopperThieving.py:979 +#: flatcamTools/ToolCopperThieving.py:978 msgid "Copper Thieving Tool. Preparing isolation polygons." msgstr "Copper Thieving Tool. Preparing isolation polygons." -#: flatcamTools/ToolCopperThieving.py:1024 +#: flatcamTools/ToolCopperThieving.py:1023 msgid "Copper Thieving Tool. Preparing areas to fill with copper." msgstr "Copper Thieving Tool. Preparing areas to fill with copper." -#: flatcamTools/ToolCopperThieving.py:1035 flatcamTools/ToolOptimal.py:350 -#: flatcamTools/ToolPanelize.py:802 flatcamTools/ToolRulesCheck.py:1127 +#: flatcamTools/ToolCopperThieving.py:1034 flatcamTools/ToolOptimal.py:349 +#: flatcamTools/ToolPanelize.py:800 flatcamTools/ToolRulesCheck.py:1127 msgid "Working..." msgstr "Working..." -#: flatcamTools/ToolCopperThieving.py:1062 +#: flatcamTools/ToolCopperThieving.py:1061 msgid "Geometry not supported for bounding box" msgstr "Geometry not supported for bounding box" -#: flatcamTools/ToolCopperThieving.py:1068 flatcamTools/ToolNCC.py:1928 +#: flatcamTools/ToolCopperThieving.py:1067 flatcamTools/ToolNCC.py:1928 #: flatcamTools/ToolNCC.py:1983 flatcamTools/ToolNCC.py:2987 #: flatcamTools/ToolPaint.py:3375 msgid "No object available." msgstr "No object available." -#: flatcamTools/ToolCopperThieving.py:1105 flatcamTools/ToolNCC.py:1953 +#: flatcamTools/ToolCopperThieving.py:1104 flatcamTools/ToolNCC.py:1953 #: flatcamTools/ToolNCC.py:2006 flatcamTools/ToolNCC.py:3029 msgid "The reference object type is not supported." msgstr "The reference object type is not supported." -#: flatcamTools/ToolCopperThieving.py:1110 +#: flatcamTools/ToolCopperThieving.py:1109 msgid "Copper Thieving Tool. Appending new geometry and buffering." msgstr "Copper Thieving Tool. Appending new geometry and buffering." -#: flatcamTools/ToolCopperThieving.py:1126 +#: flatcamTools/ToolCopperThieving.py:1125 msgid "Create geometry" msgstr "Create geometry" -#: flatcamTools/ToolCopperThieving.py:1326 -#: flatcamTools/ToolCopperThieving.py:1330 +#: flatcamTools/ToolCopperThieving.py:1325 +#: flatcamTools/ToolCopperThieving.py:1329 msgid "P-Plating Mask" msgstr "P-Plating Mask" -#: flatcamTools/ToolCopperThieving.py:1352 +#: flatcamTools/ToolCopperThieving.py:1351 msgid "Append PP-M geometry" msgstr "Append PP-M geometry" -#: flatcamTools/ToolCopperThieving.py:1478 +#: flatcamTools/ToolCopperThieving.py:1477 msgid "Generating Pattern Plating Mask done." msgstr "Generating Pattern Plating Mask done." -#: flatcamTools/ToolCopperThieving.py:1550 +#: flatcamTools/ToolCopperThieving.py:1549 msgid "Copper Thieving Tool exit." msgstr "Copper Thieving Tool exit." -#: flatcamTools/ToolCutOut.py:42 +#: flatcamTools/ToolCutOut.py:41 msgid "Cutout PCB" msgstr "Cutout PCB" -#: flatcamTools/ToolCutOut.py:70 flatcamTools/ToolPanelize.py:54 +#: flatcamTools/ToolCutOut.py:69 flatcamTools/ToolPanelize.py:52 msgid "Source Object" msgstr "Source Object" -#: flatcamTools/ToolCutOut.py:71 +#: flatcamTools/ToolCutOut.py:70 msgid "Object to be cutout" msgstr "Object to be cutout" -#: flatcamTools/ToolCutOut.py:76 +#: flatcamTools/ToolCutOut.py:75 msgid "Kind" msgstr "Kind" -#: flatcamTools/ToolCutOut.py:98 +#: flatcamTools/ToolCutOut.py:97 msgid "" "Specify the type of object to be cutout.\n" "It can be of type: Gerber or Geometry.\n" @@ -14243,19 +14292,19 @@ msgstr "" "What is selected here will dictate the kind\n" "of objects that will populate the 'Object' combobox." -#: flatcamTools/ToolCutOut.py:122 +#: flatcamTools/ToolCutOut.py:121 msgid "Tool Parameters" msgstr "Tool Parameters" -#: flatcamTools/ToolCutOut.py:239 +#: flatcamTools/ToolCutOut.py:238 msgid "A. Automatic Bridge Gaps" msgstr "A. Automatic Bridge Gaps" -#: flatcamTools/ToolCutOut.py:241 +#: flatcamTools/ToolCutOut.py:240 msgid "This section handle creation of automatic bridge gaps." msgstr "This section handle creation of automatic bridge gaps." -#: flatcamTools/ToolCutOut.py:252 +#: flatcamTools/ToolCutOut.py:251 msgid "" "Number of gaps used for the Automatic cutout.\n" "There can be maximum 8 bridges/gaps.\n" @@ -14279,11 +14328,11 @@ msgstr "" "- 2tb - 2*top + 2*bottom\n" "- 8 - 2*left + 2*right +2*top + 2*bottom" -#: flatcamTools/ToolCutOut.py:273 +#: flatcamTools/ToolCutOut.py:272 msgid "Generate Freeform Geometry" msgstr "Generate Freeform Geometry" -#: flatcamTools/ToolCutOut.py:275 +#: flatcamTools/ToolCutOut.py:274 msgid "" "Cutout the selected object.\n" "The cutout shape can be of any shape.\n" @@ -14293,11 +14342,11 @@ msgstr "" "The cutout shape can be of any shape.\n" "Useful when the PCB has a non-rectangular shape." -#: flatcamTools/ToolCutOut.py:287 +#: flatcamTools/ToolCutOut.py:286 msgid "Generate Rectangular Geometry" msgstr "Generate Rectangular Geometry" -#: flatcamTools/ToolCutOut.py:289 +#: flatcamTools/ToolCutOut.py:288 msgid "" "Cutout the selected object.\n" "The resulting cutout shape is\n" @@ -14309,11 +14358,11 @@ msgstr "" "always a rectangle shape and it will be\n" "the bounding box of the Object." -#: flatcamTools/ToolCutOut.py:308 +#: flatcamTools/ToolCutOut.py:307 msgid "B. Manual Bridge Gaps" msgstr "B. Manual Bridge Gaps" -#: flatcamTools/ToolCutOut.py:310 +#: flatcamTools/ToolCutOut.py:309 msgid "" "This section handle creation of manual bridge gaps.\n" "This is done by mouse clicking on the perimeter of the\n" @@ -14323,15 +14372,15 @@ msgstr "" "This is done by mouse clicking on the perimeter of the\n" "Geometry object that is used as a cutout object. " -#: flatcamTools/ToolCutOut.py:329 +#: flatcamTools/ToolCutOut.py:328 msgid "Geometry object used to create the manual cutout." msgstr "Geometry object used to create the manual cutout." -#: flatcamTools/ToolCutOut.py:338 +#: flatcamTools/ToolCutOut.py:337 msgid "Generate Manual Geometry" msgstr "Generate Manual Geometry" -#: flatcamTools/ToolCutOut.py:340 +#: flatcamTools/ToolCutOut.py:339 msgid "" "If the object to be cutout is a Gerber\n" "first create a Geometry that surrounds it,\n" @@ -14343,11 +14392,11 @@ msgstr "" "to be used as the cutout, if one doesn't exist yet.\n" "Select the source Gerber file in the top object combobox." -#: flatcamTools/ToolCutOut.py:353 +#: flatcamTools/ToolCutOut.py:352 msgid "Manual Add Bridge Gaps" msgstr "Manual Add Bridge Gaps" -#: flatcamTools/ToolCutOut.py:355 +#: flatcamTools/ToolCutOut.py:354 msgid "" "Use the left mouse button (LMB) click\n" "to create a bridge gap to separate the PCB from\n" @@ -14361,7 +14410,7 @@ msgstr "" "The LMB click has to be done on the perimeter of\n" "the Geometry object used as a cutout geometry." -#: flatcamTools/ToolCutOut.py:485 +#: flatcamTools/ToolCutOut.py:484 msgid "" "There is no object selected for Cutout.\n" "Select one and try again." @@ -14369,17 +14418,17 @@ msgstr "" "There is no object selected for Cutout.\n" "Select one and try again." -#: flatcamTools/ToolCutOut.py:491 flatcamTools/ToolCutOut.py:676 -#: flatcamTools/ToolCutOut.py:839 flatcamTools/ToolCutOut.py:921 -#: tclCommands/TclCommandGeoCutout.py:185 +#: flatcamTools/ToolCutOut.py:490 flatcamTools/ToolCutOut.py:675 +#: flatcamTools/ToolCutOut.py:838 flatcamTools/ToolCutOut.py:920 +#: tclCommands/TclCommandGeoCutout.py:184 msgid "Tool Diameter is zero value. Change it to a positive real number." msgstr "Tool Diameter is zero value. Change it to a positive real number." -#: flatcamTools/ToolCutOut.py:505 flatcamTools/ToolCutOut.py:691 +#: flatcamTools/ToolCutOut.py:504 flatcamTools/ToolCutOut.py:690 msgid "Number of gaps value is missing. Add it and retry." msgstr "Number of gaps value is missing. Add it and retry." -#: flatcamTools/ToolCutOut.py:510 flatcamTools/ToolCutOut.py:695 +#: flatcamTools/ToolCutOut.py:509 flatcamTools/ToolCutOut.py:694 msgid "" "Gaps value can be only one of: 'None', 'lr', 'tb', '2lr', '2tb', 4 or 8. " "Fill in a correct value and retry. " @@ -14387,7 +14436,7 @@ msgstr "" "Gaps value can be only one of: 'None', 'lr', 'tb', '2lr', '2tb', 4 or 8. " "Fill in a correct value and retry. " -#: flatcamTools/ToolCutOut.py:515 flatcamTools/ToolCutOut.py:701 +#: flatcamTools/ToolCutOut.py:514 flatcamTools/ToolCutOut.py:700 msgid "" "Cutout operation cannot be done on a multi-geo Geometry.\n" "Optionally, this Multi-geo Geometry can be converted to Single-geo " @@ -14399,44 +14448,44 @@ msgstr "" "Geometry,\n" "and after that perform Cutout." -#: flatcamTools/ToolCutOut.py:650 flatcamTools/ToolCutOut.py:828 +#: flatcamTools/ToolCutOut.py:649 flatcamTools/ToolCutOut.py:827 msgid "Any form CutOut operation finished." msgstr "Any form CutOut operation finished." -#: flatcamTools/ToolCutOut.py:671 flatcamTools/ToolInvertGerber.py:214 +#: flatcamTools/ToolCutOut.py:670 flatcamTools/ToolInvertGerber.py:214 #: flatcamTools/ToolNCC.py:1598 flatcamTools/ToolPaint.py:1392 -#: flatcamTools/ToolPanelize.py:418 tclCommands/TclCommandBbox.py:72 -#: tclCommands/TclCommandNregions.py:72 +#: flatcamTools/ToolPanelize.py:416 tclCommands/TclCommandBbox.py:71 +#: tclCommands/TclCommandNregions.py:71 msgid "Object not found" msgstr "Object not found" -#: flatcamTools/ToolCutOut.py:814 +#: flatcamTools/ToolCutOut.py:813 msgid "Rectangular cutout with negative margin is not possible." msgstr "Rectangular cutout with negative margin is not possible." -#: flatcamTools/ToolCutOut.py:833 +#: flatcamTools/ToolCutOut.py:832 msgid "" "Click on the selected geometry object perimeter to create a bridge gap ..." msgstr "" "Click on the selected geometry object perimeter to create a bridge gap ..." -#: flatcamTools/ToolCutOut.py:850 flatcamTools/ToolCutOut.py:876 +#: flatcamTools/ToolCutOut.py:849 flatcamTools/ToolCutOut.py:875 msgid "Could not retrieve Geometry object" msgstr "Could not retrieve Geometry object" -#: flatcamTools/ToolCutOut.py:881 +#: flatcamTools/ToolCutOut.py:880 msgid "Geometry object for manual cutout not found" msgstr "Geometry object for manual cutout not found" -#: flatcamTools/ToolCutOut.py:891 +#: flatcamTools/ToolCutOut.py:890 msgid "Added manual Bridge Gap." msgstr "Added manual Bridge Gap." -#: flatcamTools/ToolCutOut.py:903 +#: flatcamTools/ToolCutOut.py:902 msgid "Could not retrieve Gerber object" msgstr "Could not retrieve Gerber object" -#: flatcamTools/ToolCutOut.py:908 +#: flatcamTools/ToolCutOut.py:907 msgid "" "There is no Gerber object selected for Cutout.\n" "Select one and try again." @@ -14444,7 +14493,7 @@ msgstr "" "There is no Gerber object selected for Cutout.\n" "Select one and try again." -#: flatcamTools/ToolCutOut.py:914 +#: flatcamTools/ToolCutOut.py:913 msgid "" "The selected object has to be of Gerber type.\n" "Select a Gerber file and try again." @@ -14452,32 +14501,32 @@ msgstr "" "The selected object has to be of Gerber type.\n" "Select a Gerber file and try again." -#: flatcamTools/ToolCutOut.py:949 +#: flatcamTools/ToolCutOut.py:948 msgid "Geometry not supported for cutout" msgstr "Geometry not supported for cutout" -#: flatcamTools/ToolCutOut.py:1007 +#: flatcamTools/ToolCutOut.py:1006 msgid "Making manual bridge gap..." msgstr "Making manual bridge gap..." -#: flatcamTools/ToolDblSided.py:27 +#: flatcamTools/ToolDblSided.py:26 msgid "2-Sided PCB" msgstr "2-Sided PCB" -#: flatcamTools/ToolDblSided.py:53 +#: flatcamTools/ToolDblSided.py:52 msgid "Mirror Operation" msgstr "Mirror Operation" -#: flatcamTools/ToolDblSided.py:54 +#: flatcamTools/ToolDblSided.py:53 msgid "Objects to be mirrored" msgstr "Objects to be mirrored" -#: flatcamTools/ToolDblSided.py:66 +#: flatcamTools/ToolDblSided.py:65 msgid "Gerber to be mirrored" msgstr "Gerber to be mirrored" -#: flatcamTools/ToolDblSided.py:70 flatcamTools/ToolDblSided.py:98 -#: flatcamTools/ToolDblSided.py:128 +#: flatcamTools/ToolDblSided.py:69 flatcamTools/ToolDblSided.py:97 +#: flatcamTools/ToolDblSided.py:127 msgid "" "Mirrors (flips) the specified object around \n" "the specified axis. Does not create a new \n" @@ -14487,27 +14536,27 @@ msgstr "" "the specified axis. Does not create a new \n" "object, but modifies it." -#: flatcamTools/ToolDblSided.py:94 +#: flatcamTools/ToolDblSided.py:93 msgid "Excellon Object to be mirrored." msgstr "Excellon Object to be mirrored." -#: flatcamTools/ToolDblSided.py:123 +#: flatcamTools/ToolDblSided.py:122 msgid "Geometry Obj to be mirrored." msgstr "Geometry Obj to be mirrored." -#: flatcamTools/ToolDblSided.py:159 +#: flatcamTools/ToolDblSided.py:158 msgid "Mirror Parameters" msgstr "Mirror Parameters" -#: flatcamTools/ToolDblSided.py:160 +#: flatcamTools/ToolDblSided.py:159 msgid "Parameters for the mirror operation" msgstr "Parameters for the mirror operation" -#: flatcamTools/ToolDblSided.py:165 +#: flatcamTools/ToolDblSided.py:164 msgid "Mirror Axis" msgstr "Mirror Axis" -#: flatcamTools/ToolDblSided.py:176 +#: flatcamTools/ToolDblSided.py:175 msgid "" "The coordinates used as reference for the mirror operation.\n" "Can be:\n" @@ -14521,27 +14570,34 @@ msgstr "" "- Box -> a set of coordinates (x, y) obtained from the center of the\n" "bounding box of another object selected below" -#: flatcamTools/ToolDblSided.py:190 +#: flatcamTools/ToolDblSided.py:189 msgid "Point coordinates" msgstr "Point coordinates" -#: flatcamTools/ToolDblSided.py:195 +#: flatcamTools/ToolDblSided.py:194 +#| msgid "" +#| "Add the coordinates in format (x, y) through which the mirroring " +#| "axis \n" +#| " selected in 'MIRROR AXIS' pass.\n" +#| "The (x, y) coordinates are captured by pressing SHIFT key\n" +#| "and left mouse button click on canvas or you can enter the coordinates " +#| "manually." msgid "" "Add the coordinates in format (x, y) through which the mirroring " -"axis \n" +"axis\n" " selected in 'MIRROR AXIS' pass.\n" "The (x, y) coordinates are captured by pressing SHIFT key\n" "and left mouse button click on canvas or you can enter the coordinates " "manually." msgstr "" "Add the coordinates in format (x, y) through which the mirroring " -"axis \n" +"axis\n" " selected in 'MIRROR AXIS' pass.\n" "The (x, y) coordinates are captured by pressing SHIFT key\n" "and left mouse button click on canvas or you can enter the coordinates " "manually." -#: flatcamTools/ToolDblSided.py:219 +#: flatcamTools/ToolDblSided.py:218 msgid "" "It can be of type: Gerber or Excellon or Geometry.\n" "The coordinates of the center of the bounding box are used\n" @@ -14551,11 +14607,11 @@ msgstr "" "The coordinates of the center of the bounding box are used\n" "as reference for mirror operation." -#: flatcamTools/ToolDblSided.py:253 +#: flatcamTools/ToolDblSided.py:252 msgid "Bounds Values" msgstr "Bounds Values" -#: flatcamTools/ToolDblSided.py:255 +#: flatcamTools/ToolDblSided.py:254 msgid "" "Select on canvas the object(s)\n" "for which to calculate bounds values." @@ -14563,39 +14619,39 @@ msgstr "" "Select on canvas the object(s)\n" "for which to calculate bounds values." -#: flatcamTools/ToolDblSided.py:265 +#: flatcamTools/ToolDblSided.py:264 msgid "X min" msgstr "X min" -#: flatcamTools/ToolDblSided.py:267 flatcamTools/ToolDblSided.py:281 +#: flatcamTools/ToolDblSided.py:266 flatcamTools/ToolDblSided.py:280 msgid "Minimum location." msgstr "Minimum location." -#: flatcamTools/ToolDblSided.py:279 +#: flatcamTools/ToolDblSided.py:278 msgid "Y min" msgstr "Y min" -#: flatcamTools/ToolDblSided.py:293 +#: flatcamTools/ToolDblSided.py:292 msgid "X max" msgstr "X max" -#: flatcamTools/ToolDblSided.py:295 flatcamTools/ToolDblSided.py:309 +#: flatcamTools/ToolDblSided.py:294 flatcamTools/ToolDblSided.py:308 msgid "Maximum location." msgstr "Maximum location." -#: flatcamTools/ToolDblSided.py:307 +#: flatcamTools/ToolDblSided.py:306 msgid "Y max" msgstr "Y max" -#: flatcamTools/ToolDblSided.py:318 +#: flatcamTools/ToolDblSided.py:317 msgid "Center point coordinates" msgstr "Center point coordinates" -#: flatcamTools/ToolDblSided.py:320 +#: flatcamTools/ToolDblSided.py:319 msgid "Centroid" msgstr "Centroid" -#: flatcamTools/ToolDblSided.py:322 +#: flatcamTools/ToolDblSided.py:321 msgid "" "The center point location for the rectangular\n" "bounding shape. Centroid. Format is (x, y)." @@ -14603,11 +14659,11 @@ msgstr "" "The center point location for the rectangular\n" "bounding shape. Centroid. Format is (x, y)." -#: flatcamTools/ToolDblSided.py:331 +#: flatcamTools/ToolDblSided.py:330 msgid "Calculate Bounds Values" msgstr "Calculate Bounds Values" -#: flatcamTools/ToolDblSided.py:333 +#: flatcamTools/ToolDblSided.py:332 msgid "" "Calculate the enveloping rectangular shape coordinates,\n" "for the selection of objects.\n" @@ -14617,11 +14673,11 @@ msgstr "" "for the selection of objects.\n" "The envelope shape is parallel with the X, Y axis." -#: flatcamTools/ToolDblSided.py:353 +#: flatcamTools/ToolDblSided.py:352 msgid "PCB Alignment" msgstr "PCB Alignment" -#: flatcamTools/ToolDblSided.py:355 flatcamTools/ToolDblSided.py:457 +#: flatcamTools/ToolDblSided.py:354 flatcamTools/ToolDblSided.py:456 msgid "" "Creates an Excellon Object containing the\n" "specified alignment holes and their mirror\n" @@ -14631,11 +14687,11 @@ msgstr "" "specified alignment holes and their mirror\n" "images." -#: flatcamTools/ToolDblSided.py:362 +#: flatcamTools/ToolDblSided.py:361 msgid "Drill Diameter" msgstr "Drill Diameter" -#: flatcamTools/ToolDblSided.py:391 flatcamTools/ToolDblSided.py:398 +#: flatcamTools/ToolDblSided.py:390 flatcamTools/ToolDblSided.py:397 msgid "" "The reference point used to create the second alignment drill\n" "from the first alignment drill, by doing mirror.\n" @@ -14645,11 +14701,11 @@ msgstr "" "from the first alignment drill, by doing mirror.\n" "It can be modified in the Mirror Parameters -> Reference section" -#: flatcamTools/ToolDblSided.py:411 +#: flatcamTools/ToolDblSided.py:410 msgid "Alignment Drill Coordinates" msgstr "Alignment Drill Coordinates" -#: flatcamTools/ToolDblSided.py:413 +#: flatcamTools/ToolDblSided.py:412 msgid "" "Alignment holes (x1, y1), (x2, y2), ... on one side of the mirror axis. For " "each set of (x, y) coordinates\n" @@ -14667,11 +14723,11 @@ msgstr "" "- one drill in mirror position over the axis selected above in the 'Align " "Axis'." -#: flatcamTools/ToolDblSided.py:421 +#: flatcamTools/ToolDblSided.py:420 msgid "Drill coordinates" msgstr "Drill coordinates" -#: flatcamTools/ToolDblSided.py:428 +#: flatcamTools/ToolDblSided.py:427 msgid "" "Add alignment drill holes coordinates in the format: (x1, y1), (x2, " "y2), ... \n" @@ -14697,23 +14753,23 @@ msgstr "" "field and click Paste.\n" "- by entering the coords manually in the format: (x1, y1), (x2, y2), ..." -#: flatcamTools/ToolDblSided.py:443 +#: flatcamTools/ToolDblSided.py:442 msgid "Delete Last" msgstr "Delete Last" -#: flatcamTools/ToolDblSided.py:445 +#: flatcamTools/ToolDblSided.py:444 msgid "Delete the last coordinates tuple in the list." msgstr "Delete the last coordinates tuple in the list." -#: flatcamTools/ToolDblSided.py:455 +#: flatcamTools/ToolDblSided.py:454 msgid "Create Excellon Object" msgstr "Create Excellon Object" -#: flatcamTools/ToolDblSided.py:542 +#: flatcamTools/ToolDblSided.py:541 msgid "2-Sided Tool" msgstr "2-Sided Tool" -#: flatcamTools/ToolDblSided.py:582 +#: flatcamTools/ToolDblSided.py:581 msgid "" "'Point' reference is selected and 'Point' coordinates are missing. Add them " "and retry." @@ -14721,28 +14777,28 @@ msgstr "" "'Point' reference is selected and 'Point' coordinates are missing. Add them " "and retry." -#: flatcamTools/ToolDblSided.py:601 +#: flatcamTools/ToolDblSided.py:600 msgid "There is no Box reference object loaded. Load one and retry." msgstr "There is no Box reference object loaded. Load one and retry." -#: flatcamTools/ToolDblSided.py:613 +#: flatcamTools/ToolDblSided.py:612 msgid "No value or wrong format in Drill Dia entry. Add it and retry." msgstr "No value or wrong format in Drill Dia entry. Add it and retry." -#: flatcamTools/ToolDblSided.py:624 +#: flatcamTools/ToolDblSided.py:623 msgid "There are no Alignment Drill Coordinates to use. Add them and retry." msgstr "There are no Alignment Drill Coordinates to use. Add them and retry." -#: flatcamTools/ToolDblSided.py:649 +#: flatcamTools/ToolDblSided.py:648 msgid "Excellon object with alignment drills created..." msgstr "Excellon object with alignment drills created..." -#: flatcamTools/ToolDblSided.py:662 flatcamTools/ToolDblSided.py:705 -#: flatcamTools/ToolDblSided.py:749 +#: flatcamTools/ToolDblSided.py:661 flatcamTools/ToolDblSided.py:704 +#: flatcamTools/ToolDblSided.py:748 msgid "Only Gerber, Excellon and Geometry objects can be mirrored." msgstr "Only Gerber, Excellon and Geometry objects can be mirrored." -#: flatcamTools/ToolDblSided.py:672 flatcamTools/ToolDblSided.py:716 +#: flatcamTools/ToolDblSided.py:671 flatcamTools/ToolDblSided.py:715 msgid "" "There are no Point coordinates in the Point field. Add coords and try " "again ..." @@ -14750,21 +14806,21 @@ msgstr "" "There are no Point coordinates in the Point field. Add coords and try " "again ..." -#: flatcamTools/ToolDblSided.py:682 flatcamTools/ToolDblSided.py:726 -#: flatcamTools/ToolDblSided.py:763 +#: flatcamTools/ToolDblSided.py:681 flatcamTools/ToolDblSided.py:725 +#: flatcamTools/ToolDblSided.py:762 msgid "There is no Box object loaded ..." msgstr "There is no Box object loaded ..." -#: flatcamTools/ToolDblSided.py:692 flatcamTools/ToolDblSided.py:736 -#: flatcamTools/ToolDblSided.py:773 +#: flatcamTools/ToolDblSided.py:691 flatcamTools/ToolDblSided.py:735 +#: flatcamTools/ToolDblSided.py:772 msgid "was mirrored" msgstr "was mirrored" -#: flatcamTools/ToolDblSided.py:701 flatcamTools/ToolPunchGerber.py:533 +#: flatcamTools/ToolDblSided.py:700 flatcamTools/ToolPunchGerber.py:533 msgid "There is no Excellon object loaded ..." msgstr "There is no Excellon object loaded ..." -#: flatcamTools/ToolDblSided.py:745 +#: flatcamTools/ToolDblSided.py:744 msgid "There is no Geometry object loaded ..." msgstr "There is no Geometry object loaded ..." @@ -15219,7 +15275,7 @@ msgid "Export negative film" msgstr "Export negative film" #: flatcamTools/ToolFilm.py:956 flatcamTools/ToolFilm.py:1139 -#: flatcamTools/ToolPanelize.py:433 +#: flatcamTools/ToolPanelize.py:431 msgid "No object Box. Using instead" msgstr "No object Box. Using instead" @@ -15374,27 +15430,27 @@ msgstr "" msgid "Invert Tool" msgstr "Invert Tool" -#: flatcamTools/ToolMove.py:103 +#: flatcamTools/ToolMove.py:102 msgid "MOVE: Click on the Start point ..." msgstr "MOVE: Click on the Start point ..." -#: flatcamTools/ToolMove.py:114 +#: flatcamTools/ToolMove.py:113 msgid "Cancelled. No object(s) to move." msgstr "Cancelled. No object(s) to move." -#: flatcamTools/ToolMove.py:141 +#: flatcamTools/ToolMove.py:140 msgid "MOVE: Click on the Destination point ..." msgstr "MOVE: Click on the Destination point ..." -#: flatcamTools/ToolMove.py:164 +#: flatcamTools/ToolMove.py:163 msgid "Moving..." msgstr "Moving..." -#: flatcamTools/ToolMove.py:167 +#: flatcamTools/ToolMove.py:166 msgid "No object(s) selected." msgstr "No object(s) selected." -#: flatcamTools/ToolMove.py:222 +#: flatcamTools/ToolMove.py:221 msgid "Error when mouse left click." msgstr "Error when mouse left click." @@ -15495,7 +15551,7 @@ msgstr "" "with the diameter specified above." #: flatcamTools/ToolNCC.py:318 flatcamTools/ToolPaint.py:301 -#: flatcamTools/ToolSolderPaste.py:131 +#: flatcamTools/ToolSolderPaste.py:130 msgid "" "Delete a selection of tools in the Tool Table\n" "by first selecting a row(s) in the Tool Table." @@ -15536,7 +15592,7 @@ msgid "Tool from Tool Table was edited." msgstr "Tool from Tool Table was edited." #: flatcamTools/ToolNCC.py:1514 flatcamTools/ToolPaint.py:1264 -#: flatcamTools/ToolSolderPaste.py:977 +#: flatcamTools/ToolSolderPaste.py:978 msgid "Cancelled. New diameter value is already in the Tool Table." msgstr "Cancelled. New diameter value is already in the Tool Table." @@ -15674,43 +15730,43 @@ msgstr "" "Try to use the Buffering Type = Full in Preferences -> Gerber General. " "Reload the Gerber file after this change." -#: flatcamTools/ToolOptimal.py:80 +#: flatcamTools/ToolOptimal.py:79 msgid "Number of decimals kept for found distances." msgstr "Number of decimals kept for found distances." -#: flatcamTools/ToolOptimal.py:88 +#: flatcamTools/ToolOptimal.py:87 msgid "Minimum distance" msgstr "Minimum distance" -#: flatcamTools/ToolOptimal.py:89 +#: flatcamTools/ToolOptimal.py:88 msgid "Display minimum distance between copper features." msgstr "Display minimum distance between copper features." -#: flatcamTools/ToolOptimal.py:93 +#: flatcamTools/ToolOptimal.py:92 msgid "Determined" msgstr "Determined" -#: flatcamTools/ToolOptimal.py:107 +#: flatcamTools/ToolOptimal.py:106 msgid "Occurring" msgstr "Occurring" -#: flatcamTools/ToolOptimal.py:108 +#: flatcamTools/ToolOptimal.py:107 msgid "How many times this minimum is found." msgstr "How many times this minimum is found." -#: flatcamTools/ToolOptimal.py:114 +#: flatcamTools/ToolOptimal.py:113 msgid "Minimum points coordinates" msgstr "Minimum points coordinates" -#: flatcamTools/ToolOptimal.py:115 flatcamTools/ToolOptimal.py:121 +#: flatcamTools/ToolOptimal.py:114 flatcamTools/ToolOptimal.py:120 msgid "Coordinates for points where minimum distance was found." msgstr "Coordinates for points where minimum distance was found." -#: flatcamTools/ToolOptimal.py:134 flatcamTools/ToolOptimal.py:210 +#: flatcamTools/ToolOptimal.py:133 flatcamTools/ToolOptimal.py:209 msgid "Jump to selected position" msgstr "Jump to selected position" -#: flatcamTools/ToolOptimal.py:136 flatcamTools/ToolOptimal.py:212 +#: flatcamTools/ToolOptimal.py:135 flatcamTools/ToolOptimal.py:211 msgid "" "Select a position in the Locations text box and then\n" "click this button." @@ -15718,11 +15774,11 @@ msgstr "" "Select a position in the Locations text box and then\n" "click this button." -#: flatcamTools/ToolOptimal.py:144 +#: flatcamTools/ToolOptimal.py:143 msgid "Other distances" msgstr "Other distances" -#: flatcamTools/ToolOptimal.py:145 +#: flatcamTools/ToolOptimal.py:144 msgid "" "Will display other distances in the Gerber file ordered from\n" "the minimum to the maximum, not including the absolute minimum." @@ -15730,13 +15786,13 @@ msgstr "" "Will display other distances in the Gerber file ordered from\n" "the minimum to the maximum, not including the absolute minimum." -#: flatcamTools/ToolOptimal.py:150 +#: flatcamTools/ToolOptimal.py:149 msgid "Other distances points coordinates" msgstr "Other distances points coordinates" -#: flatcamTools/ToolOptimal.py:151 flatcamTools/ToolOptimal.py:165 -#: flatcamTools/ToolOptimal.py:172 flatcamTools/ToolOptimal.py:189 -#: flatcamTools/ToolOptimal.py:196 +#: flatcamTools/ToolOptimal.py:150 flatcamTools/ToolOptimal.py:164 +#: flatcamTools/ToolOptimal.py:171 flatcamTools/ToolOptimal.py:188 +#: flatcamTools/ToolOptimal.py:195 msgid "" "Other distances and the coordinates for points\n" "where the distance was found." @@ -15744,19 +15800,19 @@ msgstr "" "Other distances and the coordinates for points\n" "where the distance was found." -#: flatcamTools/ToolOptimal.py:164 +#: flatcamTools/ToolOptimal.py:163 msgid "Gerber distances" msgstr "Gerber distances" -#: flatcamTools/ToolOptimal.py:188 +#: flatcamTools/ToolOptimal.py:187 msgid "Points coordinates" msgstr "Points coordinates" -#: flatcamTools/ToolOptimal.py:220 +#: flatcamTools/ToolOptimal.py:219 msgid "Find Minimum" msgstr "Find Minimum" -#: flatcamTools/ToolOptimal.py:222 +#: flatcamTools/ToolOptimal.py:221 msgid "" "Calculate the minimum distance between copper features,\n" "this will allow the determination of the right tool to\n" @@ -15766,11 +15822,11 @@ msgstr "" "this will allow the determination of the right tool to\n" "use for isolation or copper clearing." -#: flatcamTools/ToolOptimal.py:347 +#: flatcamTools/ToolOptimal.py:346 msgid "Only Gerber objects can be evaluated." msgstr "Only Gerber objects can be evaluated." -#: flatcamTools/ToolOptimal.py:353 +#: flatcamTools/ToolOptimal.py:352 msgid "" "Optimal Tool. Started to search for the minimum distance between copper " "features." @@ -15778,15 +15834,15 @@ msgstr "" "Optimal Tool. Started to search for the minimum distance between copper " "features." -#: flatcamTools/ToolOptimal.py:363 +#: flatcamTools/ToolOptimal.py:362 msgid "Optimal Tool. Parsing geometry for aperture" msgstr "Optimal Tool. Parsing geometry for aperture" -#: flatcamTools/ToolOptimal.py:374 +#: flatcamTools/ToolOptimal.py:373 msgid "Optimal Tool. Creating a buffer for the object geometry." msgstr "Optimal Tool. Creating a buffer for the object geometry." -#: flatcamTools/ToolOptimal.py:384 +#: flatcamTools/ToolOptimal.py:383 msgid "" "The Gerber object has one Polygon as geometry.\n" "There are no distances between geometry elements to be found." @@ -15794,17 +15850,17 @@ msgstr "" "The Gerber object has one Polygon as geometry.\n" "There are no distances between geometry elements to be found." -#: flatcamTools/ToolOptimal.py:389 +#: flatcamTools/ToolOptimal.py:388 msgid "" "Optimal Tool. Finding the distances between each two elements. Iterations" msgstr "" "Optimal Tool. Finding the distances between each two elements. Iterations" -#: flatcamTools/ToolOptimal.py:424 +#: flatcamTools/ToolOptimal.py:423 msgid "Optimal Tool. Finding the minimum distance." msgstr "Optimal Tool. Finding the minimum distance." -#: flatcamTools/ToolOptimal.py:440 +#: flatcamTools/ToolOptimal.py:439 msgid "Optimal Tool. Finished successfully." msgstr "Optimal Tool. Finished successfully." @@ -16088,11 +16144,11 @@ msgstr "Paint Area failed." msgid "Paint Poly Area Done." msgstr "Paint Poly Area Done." -#: flatcamTools/ToolPanelize.py:34 +#: flatcamTools/ToolPanelize.py:32 msgid "Panelize PCB" msgstr "Panelize PCB" -#: flatcamTools/ToolPanelize.py:56 +#: flatcamTools/ToolPanelize.py:54 msgid "" "Specify the type of object to be panelized\n" "It can be of type: Gerber, Excellon or Geometry.\n" @@ -16104,7 +16160,7 @@ msgstr "" "The selection here decide the type of objects that will be\n" "in the Object combobox." -#: flatcamTools/ToolPanelize.py:89 +#: flatcamTools/ToolPanelize.py:87 msgid "" "Object to be panelized. This means that it will\n" "be duplicated in an array of rows and columns." @@ -16112,11 +16168,11 @@ msgstr "" "Object to be panelized. This means that it will\n" "be duplicated in an array of rows and columns." -#: flatcamTools/ToolPanelize.py:102 +#: flatcamTools/ToolPanelize.py:100 msgid "Penelization Reference" msgstr "Penelization Reference" -#: flatcamTools/ToolPanelize.py:104 +#: flatcamTools/ToolPanelize.py:102 msgid "" "Choose the reference for panelization:\n" "- Object = the bounding box of a different object\n" @@ -16136,11 +16192,11 @@ msgstr "" "to this reference object therefore maintaining the panelized\n" "objects in sync." -#: flatcamTools/ToolPanelize.py:125 +#: flatcamTools/ToolPanelize.py:123 msgid "Box Type" msgstr "Box Type" -#: flatcamTools/ToolPanelize.py:127 +#: flatcamTools/ToolPanelize.py:125 msgid "" "Specify the type of object to be used as an container for\n" "panelization. It can be: Gerber or Geometry type.\n" @@ -16152,7 +16208,7 @@ msgstr "" "The selection here decide the type of objects that will be\n" "in the Box Object combobox." -#: flatcamTools/ToolPanelize.py:141 +#: flatcamTools/ToolPanelize.py:139 msgid "" "The actual object that is used a container for the\n" " selected object that is to be panelized." @@ -16160,11 +16216,11 @@ msgstr "" "The actual object that is used a container for the\n" " selected object that is to be panelized." -#: flatcamTools/ToolPanelize.py:147 +#: flatcamTools/ToolPanelize.py:145 msgid "Panel Data" msgstr "Panel Data" -#: flatcamTools/ToolPanelize.py:149 +#: flatcamTools/ToolPanelize.py:147 msgid "" "This informations will shape the resulting panel.\n" "The number of rows and columns will set how many\n" @@ -16180,7 +16236,7 @@ msgstr "" "The spacings will set the distance between any two\n" "elements of the panel array." -#: flatcamTools/ToolPanelize.py:208 +#: flatcamTools/ToolPanelize.py:206 msgid "" "Choose the type of object for the panel object:\n" "- Geometry\n" @@ -16190,15 +16246,15 @@ msgstr "" "- Geometry\n" "- Gerber" -#: flatcamTools/ToolPanelize.py:216 +#: flatcamTools/ToolPanelize.py:214 msgid "Constrain panel within" msgstr "Constrain panel within" -#: flatcamTools/ToolPanelize.py:252 +#: flatcamTools/ToolPanelize.py:250 msgid "Panelize Object" msgstr "Panelize Object" -#: flatcamTools/ToolPanelize.py:254 flatcamTools/ToolRulesCheck.py:501 +#: flatcamTools/ToolPanelize.py:252 flatcamTools/ToolRulesCheck.py:501 msgid "" "Panelize the specified object around the specified box.\n" "In other words it creates multiple copies of the source object,\n" @@ -16208,31 +16264,31 @@ msgstr "" "In other words it creates multiple copies of the source object,\n" "arranged in a 2D array of rows and columns." -#: flatcamTools/ToolPanelize.py:322 +#: flatcamTools/ToolPanelize.py:320 msgid "Panel. Tool" msgstr "Panel. Tool" -#: flatcamTools/ToolPanelize.py:460 +#: flatcamTools/ToolPanelize.py:458 msgid "Columns or Rows are zero value. Change them to a positive integer." msgstr "Columns or Rows are zero value. Change them to a positive integer." -#: flatcamTools/ToolPanelize.py:497 +#: flatcamTools/ToolPanelize.py:495 msgid "Generating panel ... " msgstr "Generating panel ... " -#: flatcamTools/ToolPanelize.py:777 +#: flatcamTools/ToolPanelize.py:775 msgid "Generating panel ... Adding the Gerber code." msgstr "Generating panel ... Adding the Gerber code." -#: flatcamTools/ToolPanelize.py:788 +#: flatcamTools/ToolPanelize.py:786 msgid "Generating panel... Spawning copies" msgstr "Generating panel... Spawning copies" -#: flatcamTools/ToolPanelize.py:795 +#: flatcamTools/ToolPanelize.py:793 msgid "Panel done..." msgstr "Panel done..." -#: flatcamTools/ToolPanelize.py:798 +#: flatcamTools/ToolPanelize.py:796 #, python-brace-format msgid "" "{text} Too big for the constrain area. Final panel has {col} columns and " @@ -16241,7 +16297,7 @@ msgstr "" "{text} Too big for the constrain area. Final panel has {col} columns and " "{row} rows" -#: flatcamTools/ToolPanelize.py:807 +#: flatcamTools/ToolPanelize.py:805 msgid "Panel created successfully." msgstr "Panel created successfully." @@ -16554,20 +16610,15 @@ msgstr "Punch Tool" msgid "The value of the fixed diameter is 0.0. Aborting." msgstr "The value of the fixed diameter is 0.0. Aborting." -#: flatcamTools/ToolPunchGerber.py:607 +#: flatcamTools/ToolPunchGerber.py:607 flatcamTools/ToolPunchGerber.py:619 +#| msgid "" +#| "Could not generate punched hole Gerber because the punch hole sizeis " +#| "bigger than some of the apertures in the Gerber object." msgid "" -" Could not generate punched hole Gerber because the punch hole sizeis bigger " +"Could not generate punched hole Gerber because the punch hole size is bigger " "than some of the apertures in the Gerber object." msgstr "" -" Could not generate punched hole Gerber because the punch hole sizeis bigger " -"than some of the apertures in the Gerber object." - -#: flatcamTools/ToolPunchGerber.py:619 -msgid "" -"Could not generate punched hole Gerber because the punch hole sizeis bigger " -"than some of the apertures in the Gerber object." -msgstr "" -"Could not generate punched hole Gerber because the punch hole sizeis bigger " +"Could not generate punched hole Gerber because the punch hole size is bigger " "than some of the apertures in the Gerber object." #: flatcamTools/ToolPunchGerber.py:656 @@ -16870,19 +16921,19 @@ msgstr "PASSED" msgid "Violations: There are no violations for the current rule." msgstr "Violations: There are no violations for the current rule." -#: flatcamTools/ToolShell.py:72 flatcamTools/ToolShell.py:74 +#: flatcamTools/ToolShell.py:74 flatcamTools/ToolShell.py:76 msgid "...processing..." msgstr "...processing..." -#: flatcamTools/ToolSolderPaste.py:38 +#: flatcamTools/ToolSolderPaste.py:37 msgid "Solder Paste Tool" msgstr "Solder Paste Tool" -#: flatcamTools/ToolSolderPaste.py:70 +#: flatcamTools/ToolSolderPaste.py:69 msgid "Gerber Solder paste object. " msgstr "Gerber Solder paste object. " -#: flatcamTools/ToolSolderPaste.py:77 +#: flatcamTools/ToolSolderPaste.py:76 msgid "" "Tools pool from which the algorithm\n" "will pick the ones used for dispensing solder paste." @@ -16890,7 +16941,7 @@ msgstr "" "Tools pool from which the algorithm\n" "will pick the ones used for dispensing solder paste." -#: flatcamTools/ToolSolderPaste.py:92 +#: flatcamTools/ToolSolderPaste.py:91 msgid "" "This is the Tool Number.\n" "The solder dispensing will start with the tool with the biggest \n" @@ -16904,7 +16955,7 @@ msgstr "" "If there are no longer tools but there are still pads not covered\n" " with solder paste, the app will issue a warning message box." -#: flatcamTools/ToolSolderPaste.py:99 +#: flatcamTools/ToolSolderPaste.py:98 msgid "" "Nozzle tool Diameter. It's value (in current FlatCAM units)\n" "is the width of the solder paste dispensed." @@ -16912,11 +16963,11 @@ msgstr "" "Nozzle tool Diameter. It's value (in current FlatCAM units)\n" "is the width of the solder paste dispensed." -#: flatcamTools/ToolSolderPaste.py:106 +#: flatcamTools/ToolSolderPaste.py:105 msgid "New Nozzle Tool" msgstr "New Nozzle Tool" -#: flatcamTools/ToolSolderPaste.py:125 +#: flatcamTools/ToolSolderPaste.py:124 msgid "" "Add a new nozzle tool to the Tool Table\n" "with the diameter specified above." @@ -16924,15 +16975,15 @@ msgstr "" "Add a new nozzle tool to the Tool Table\n" "with the diameter specified above." -#: flatcamTools/ToolSolderPaste.py:137 +#: flatcamTools/ToolSolderPaste.py:136 msgid "Generate solder paste dispensing geometry." msgstr "Generate solder paste dispensing geometry." -#: flatcamTools/ToolSolderPaste.py:156 +#: flatcamTools/ToolSolderPaste.py:155 msgid "STEP 1" msgstr "STEP 1" -#: flatcamTools/ToolSolderPaste.py:158 +#: flatcamTools/ToolSolderPaste.py:157 msgid "" "First step is to select a number of nozzle tools for usage\n" "and then optionally modify the GCode parameters bellow." @@ -16940,7 +16991,7 @@ msgstr "" "First step is to select a number of nozzle tools for usage\n" "and then optionally modify the GCode parameters bellow." -#: flatcamTools/ToolSolderPaste.py:161 +#: flatcamTools/ToolSolderPaste.py:160 msgid "" "Select tools.\n" "Modify parameters." @@ -16948,7 +16999,7 @@ msgstr "" "Select tools.\n" "Modify parameters." -#: flatcamTools/ToolSolderPaste.py:281 +#: flatcamTools/ToolSolderPaste.py:280 msgid "" "Feedrate (speed) while moving up vertically\n" " to Dispense position (on Z plane)." @@ -16956,7 +17007,7 @@ msgstr "" "Feedrate (speed) while moving up vertically\n" " to Dispense position (on Z plane)." -#: flatcamTools/ToolSolderPaste.py:351 +#: flatcamTools/ToolSolderPaste.py:350 msgid "" "Generate GCode for Solder Paste dispensing\n" "on PCB pads." @@ -16964,11 +17015,11 @@ msgstr "" "Generate GCode for Solder Paste dispensing\n" "on PCB pads." -#: flatcamTools/ToolSolderPaste.py:372 +#: flatcamTools/ToolSolderPaste.py:371 msgid "STEP 2" msgstr "STEP 2" -#: flatcamTools/ToolSolderPaste.py:374 +#: flatcamTools/ToolSolderPaste.py:373 msgid "" "Second step is to create a solder paste dispensing\n" "geometry out of an Solder Paste Mask Gerber file." @@ -16976,11 +17027,11 @@ msgstr "" "Second step is to create a solder paste dispensing\n" "geometry out of an Solder Paste Mask Gerber file." -#: flatcamTools/ToolSolderPaste.py:391 +#: flatcamTools/ToolSolderPaste.py:390 msgid "Geo Result" msgstr "Geo Result" -#: flatcamTools/ToolSolderPaste.py:393 +#: flatcamTools/ToolSolderPaste.py:392 msgid "" "Geometry Solder Paste object.\n" "The name of the object has to end in:\n" @@ -16990,11 +17041,11 @@ msgstr "" "The name of the object has to end in:\n" "'_solderpaste' as a protection." -#: flatcamTools/ToolSolderPaste.py:402 +#: flatcamTools/ToolSolderPaste.py:401 msgid "STEP 3" msgstr "STEP 3" -#: flatcamTools/ToolSolderPaste.py:404 +#: flatcamTools/ToolSolderPaste.py:403 msgid "" "Third step is to select a solder paste dispensing geometry,\n" "and then generate a CNCJob object.\n" @@ -17010,11 +17061,11 @@ msgstr "" "first you need to generate a geometry with those new params,\n" "and only after that you can generate an updated CNCJob." -#: flatcamTools/ToolSolderPaste.py:425 +#: flatcamTools/ToolSolderPaste.py:424 msgid "CNC Result" msgstr "CNC Result" -#: flatcamTools/ToolSolderPaste.py:427 +#: flatcamTools/ToolSolderPaste.py:426 msgid "" "CNCJob Solder paste object.\n" "In order to enable the GCode save section,\n" @@ -17026,11 +17077,11 @@ msgstr "" "the name of the object has to end in:\n" "'_solderpaste' as a protection." -#: flatcamTools/ToolSolderPaste.py:437 +#: flatcamTools/ToolSolderPaste.py:436 msgid "View GCode" msgstr "View GCode" -#: flatcamTools/ToolSolderPaste.py:439 +#: flatcamTools/ToolSolderPaste.py:438 msgid "" "View the generated GCode for Solder Paste dispensing\n" "on PCB pads." @@ -17038,11 +17089,11 @@ msgstr "" "View the generated GCode for Solder Paste dispensing\n" "on PCB pads." -#: flatcamTools/ToolSolderPaste.py:449 +#: flatcamTools/ToolSolderPaste.py:448 msgid "Save GCode" msgstr "Save GCode" -#: flatcamTools/ToolSolderPaste.py:451 +#: flatcamTools/ToolSolderPaste.py:450 msgid "" "Save the generated GCode for Solder Paste dispensing\n" "on PCB pads, to a file." @@ -17050,11 +17101,11 @@ msgstr "" "Save the generated GCode for Solder Paste dispensing\n" "on PCB pads, to a file." -#: flatcamTools/ToolSolderPaste.py:461 +#: flatcamTools/ToolSolderPaste.py:460 msgid "STEP 4" msgstr "STEP 4" -#: flatcamTools/ToolSolderPaste.py:463 +#: flatcamTools/ToolSolderPaste.py:462 msgid "" "Fourth step (and last) is to select a CNCJob made from \n" "a solder paste dispensing geometry, and then view/save it's GCode." @@ -17070,74 +17121,78 @@ msgstr "New Nozzle tool added to Tool Table." msgid "Nozzle tool from Tool Table was edited." msgstr "Nozzle tool from Tool Table was edited." -#: flatcamTools/ToolSolderPaste.py:1023 +#: flatcamTools/ToolSolderPaste.py:1024 msgid "Delete failed. Select a Nozzle tool to delete." msgstr "Delete failed. Select a Nozzle tool to delete." -#: flatcamTools/ToolSolderPaste.py:1029 +#: flatcamTools/ToolSolderPaste.py:1030 msgid "Nozzle tool(s) deleted from Tool Table." msgstr "Nozzle tool(s) deleted from Tool Table." -#: flatcamTools/ToolSolderPaste.py:1085 +#: flatcamTools/ToolSolderPaste.py:1086 msgid "No SolderPaste mask Gerber object loaded." msgstr "No SolderPaste mask Gerber object loaded." -#: flatcamTools/ToolSolderPaste.py:1103 +#: flatcamTools/ToolSolderPaste.py:1104 msgid "Creating Solder Paste dispensing geometry." msgstr "Creating Solder Paste dispensing geometry." -#: flatcamTools/ToolSolderPaste.py:1116 +#: flatcamTools/ToolSolderPaste.py:1117 msgid "No Nozzle tools in the tool table." msgstr "No Nozzle tools in the tool table." -#: flatcamTools/ToolSolderPaste.py:1242 +#: flatcamTools/ToolSolderPaste.py:1243 msgid "Cancelled. Empty file, it has no geometry..." msgstr "Cancelled. Empty file, it has no geometry..." -#: flatcamTools/ToolSolderPaste.py:1245 +#: flatcamTools/ToolSolderPaste.py:1246 msgid "Solder Paste geometry generated successfully" msgstr "Solder Paste geometry generated successfully" -#: flatcamTools/ToolSolderPaste.py:1252 +#: flatcamTools/ToolSolderPaste.py:1253 msgid "Some or all pads have no solder due of inadequate nozzle diameters..." msgstr "Some or all pads have no solder due of inadequate nozzle diameters..." -#: flatcamTools/ToolSolderPaste.py:1266 +#: flatcamTools/ToolSolderPaste.py:1267 msgid "Generating Solder Paste dispensing geometry..." msgstr "Generating Solder Paste dispensing geometry..." -#: flatcamTools/ToolSolderPaste.py:1286 +#: flatcamTools/ToolSolderPaste.py:1287 msgid "There is no Geometry object available." msgstr "There is no Geometry object available." -#: flatcamTools/ToolSolderPaste.py:1291 +#: flatcamTools/ToolSolderPaste.py:1292 msgid "This Geometry can't be processed. NOT a solder_paste_tool geometry." msgstr "This Geometry can't be processed. NOT a solder_paste_tool geometry." -#: flatcamTools/ToolSolderPaste.py:1392 +#: flatcamTools/ToolSolderPaste.py:1328 +msgid "An internal error has ocurred. See shell.\n" +msgstr "An internal error has ocurred. See shell.\n" + +#: flatcamTools/ToolSolderPaste.py:1393 msgid "ToolSolderPaste CNCjob created" msgstr "ToolSolderPaste CNCjob created" -#: flatcamTools/ToolSolderPaste.py:1411 +#: flatcamTools/ToolSolderPaste.py:1412 msgid "SP GCode Editor" msgstr "SP GCode Editor" -#: flatcamTools/ToolSolderPaste.py:1423 flatcamTools/ToolSolderPaste.py:1428 -#: flatcamTools/ToolSolderPaste.py:1483 +#: flatcamTools/ToolSolderPaste.py:1424 flatcamTools/ToolSolderPaste.py:1429 +#: flatcamTools/ToolSolderPaste.py:1484 msgid "" "This CNCJob object can't be processed. NOT a solder_paste_tool CNCJob object." msgstr "" "This CNCJob object can't be processed. NOT a solder_paste_tool CNCJob object." -#: flatcamTools/ToolSolderPaste.py:1453 +#: flatcamTools/ToolSolderPaste.py:1454 msgid "No Gcode in the object" msgstr "No Gcode in the object" -#: flatcamTools/ToolSolderPaste.py:1493 +#: flatcamTools/ToolSolderPaste.py:1494 msgid "Export GCode ..." msgstr "Export GCode ..." -#: flatcamTools/ToolSolderPaste.py:1541 +#: flatcamTools/ToolSolderPaste.py:1542 msgid "Solder paste dispenser GCode file saved to" msgstr "Solder paste dispenser GCode file saved to" @@ -17272,11 +17327,11 @@ msgstr "Parsing solid_geometry ..." msgid "Parsing solid_geometry for tool" msgstr "Parsing solid_geometry for tool" -#: flatcamTools/ToolTransform.py:24 +#: flatcamTools/ToolTransform.py:23 msgid "Object Transform" msgstr "Object Transform" -#: flatcamTools/ToolTransform.py:79 +#: flatcamTools/ToolTransform.py:78 msgid "" "Rotate the selected object(s).\n" "The point of reference is the middle of\n" @@ -17286,7 +17341,7 @@ msgstr "" "The point of reference is the middle of\n" "the bounding box for all selected objects." -#: flatcamTools/ToolTransform.py:100 flatcamTools/ToolTransform.py:121 +#: flatcamTools/ToolTransform.py:99 flatcamTools/ToolTransform.py:120 msgid "" "Angle for Skew action, in degrees.\n" "Float number between -360 and 360." @@ -17294,7 +17349,7 @@ msgstr "" "Angle for Skew action, in degrees.\n" "Float number between -360 and 360." -#: flatcamTools/ToolTransform.py:110 flatcamTools/ToolTransform.py:131 +#: flatcamTools/ToolTransform.py:109 flatcamTools/ToolTransform.py:130 msgid "" "Skew/shear the selected object(s).\n" "The point of reference is the middle of\n" @@ -17304,7 +17359,7 @@ msgstr "" "The point of reference is the middle of\n" "the bounding box for all selected objects." -#: flatcamTools/ToolTransform.py:160 flatcamTools/ToolTransform.py:180 +#: flatcamTools/ToolTransform.py:159 flatcamTools/ToolTransform.py:179 msgid "" "Scale the selected object(s).\n" "The point of reference depends on \n" @@ -17314,7 +17369,7 @@ msgstr "" "The point of reference depends on \n" "the Scale reference checkbox state." -#: flatcamTools/ToolTransform.py:229 flatcamTools/ToolTransform.py:249 +#: flatcamTools/ToolTransform.py:228 flatcamTools/ToolTransform.py:248 msgid "" "Offset the selected object(s).\n" "The point of reference is the middle of\n" @@ -17324,15 +17379,15 @@ msgstr "" "The point of reference is the middle of\n" "the bounding box for all selected objects.\n" -#: flatcamTools/ToolTransform.py:269 flatcamTools/ToolTransform.py:274 +#: flatcamTools/ToolTransform.py:268 flatcamTools/ToolTransform.py:273 msgid "Flip the selected object(s) over the X axis." msgstr "Flip the selected object(s) over the X axis." -#: flatcamTools/ToolTransform.py:298 +#: flatcamTools/ToolTransform.py:297 msgid "Ref. Point" msgstr "Ref. Point" -#: flatcamTools/ToolTransform.py:349 +#: flatcamTools/ToolTransform.py:348 msgid "" "Create the buffer effect on each geometry,\n" "element from the selected object, using the distance." @@ -17340,7 +17395,7 @@ msgstr "" "Create the buffer effect on each geometry,\n" "element from the selected object, using the distance." -#: flatcamTools/ToolTransform.py:375 +#: flatcamTools/ToolTransform.py:374 msgid "" "Create the buffer effect on each geometry,\n" "element from the selected object, using the factor." @@ -17348,122 +17403,122 @@ msgstr "" "Create the buffer effect on each geometry,\n" "element from the selected object, using the factor." -#: flatcamTools/ToolTransform.py:480 +#: flatcamTools/ToolTransform.py:479 msgid "Buffer D" msgstr "Buffer D" -#: flatcamTools/ToolTransform.py:481 +#: flatcamTools/ToolTransform.py:480 msgid "Buffer F" msgstr "Buffer F" -#: flatcamTools/ToolTransform.py:558 +#: flatcamTools/ToolTransform.py:557 msgid "Rotate transformation can not be done for a value of 0." msgstr "Rotate transformation can not be done for a value of 0." -#: flatcamTools/ToolTransform.py:597 flatcamTools/ToolTransform.py:620 +#: flatcamTools/ToolTransform.py:596 flatcamTools/ToolTransform.py:619 msgid "Scale transformation can not be done for a factor of 0 or 1." msgstr "Scale transformation can not be done for a factor of 0 or 1." -#: flatcamTools/ToolTransform.py:635 flatcamTools/ToolTransform.py:645 +#: flatcamTools/ToolTransform.py:634 flatcamTools/ToolTransform.py:644 msgid "Offset transformation can not be done for a value of 0." msgstr "Offset transformation can not be done for a value of 0." -#: flatcamTools/ToolTransform.py:677 +#: flatcamTools/ToolTransform.py:676 msgid "No object selected. Please Select an object to rotate!" msgstr "No object selected. Please Select an object to rotate!" -#: flatcamTools/ToolTransform.py:703 +#: flatcamTools/ToolTransform.py:702 msgid "CNCJob objects can't be rotated." msgstr "CNCJob objects can't be rotated." -#: flatcamTools/ToolTransform.py:711 +#: flatcamTools/ToolTransform.py:710 msgid "Rotate done" msgstr "Rotate done" -#: flatcamTools/ToolTransform.py:714 flatcamTools/ToolTransform.py:784 -#: flatcamTools/ToolTransform.py:834 flatcamTools/ToolTransform.py:890 -#: flatcamTools/ToolTransform.py:922 flatcamTools/ToolTransform.py:958 +#: flatcamTools/ToolTransform.py:713 flatcamTools/ToolTransform.py:783 +#: flatcamTools/ToolTransform.py:833 flatcamTools/ToolTransform.py:887 +#: flatcamTools/ToolTransform.py:917 flatcamTools/ToolTransform.py:953 msgid "Due of" msgstr "Due of" -#: flatcamTools/ToolTransform.py:714 flatcamTools/ToolTransform.py:784 -#: flatcamTools/ToolTransform.py:834 flatcamTools/ToolTransform.py:890 -#: flatcamTools/ToolTransform.py:922 flatcamTools/ToolTransform.py:958 +#: flatcamTools/ToolTransform.py:713 flatcamTools/ToolTransform.py:783 +#: flatcamTools/ToolTransform.py:833 flatcamTools/ToolTransform.py:887 +#: flatcamTools/ToolTransform.py:917 flatcamTools/ToolTransform.py:953 msgid "action was not executed." msgstr "action was not executed." -#: flatcamTools/ToolTransform.py:726 +#: flatcamTools/ToolTransform.py:725 msgid "No object selected. Please Select an object to flip" msgstr "No object selected. Please Select an object to flip" -#: flatcamTools/ToolTransform.py:759 +#: flatcamTools/ToolTransform.py:758 msgid "CNCJob objects can't be mirrored/flipped." msgstr "CNCJob objects can't be mirrored/flipped." -#: flatcamTools/ToolTransform.py:794 +#: flatcamTools/ToolTransform.py:793 msgid "Skew transformation can not be done for 0, 90 and 180 degrees." msgstr "Skew transformation can not be done for 0, 90 and 180 degrees." -#: flatcamTools/ToolTransform.py:799 +#: flatcamTools/ToolTransform.py:798 msgid "No object selected. Please Select an object to shear/skew!" msgstr "No object selected. Please Select an object to shear/skew!" -#: flatcamTools/ToolTransform.py:819 +#: flatcamTools/ToolTransform.py:818 msgid "CNCJob objects can't be skewed." msgstr "CNCJob objects can't be skewed." -#: flatcamTools/ToolTransform.py:831 +#: flatcamTools/ToolTransform.py:830 msgid "Skew on the" msgstr "Skew on the" -#: flatcamTools/ToolTransform.py:831 flatcamTools/ToolTransform.py:887 -#: flatcamTools/ToolTransform.py:919 +#: flatcamTools/ToolTransform.py:830 flatcamTools/ToolTransform.py:884 +#: flatcamTools/ToolTransform.py:914 msgid "axis done" msgstr "axis done" -#: flatcamTools/ToolTransform.py:846 +#: flatcamTools/ToolTransform.py:844 msgid "No object selected. Please Select an object to scale!" msgstr "No object selected. Please Select an object to scale!" -#: flatcamTools/ToolTransform.py:877 +#: flatcamTools/ToolTransform.py:875 msgid "CNCJob objects can't be scaled." msgstr "CNCJob objects can't be scaled." -#: flatcamTools/ToolTransform.py:887 +#: flatcamTools/ToolTransform.py:884 msgid "Scale on the" msgstr "Scale on the" -#: flatcamTools/ToolTransform.py:898 +#: flatcamTools/ToolTransform.py:894 msgid "No object selected. Please Select an object to offset!" msgstr "No object selected. Please Select an object to offset!" -#: flatcamTools/ToolTransform.py:905 +#: flatcamTools/ToolTransform.py:901 msgid "CNCJob objects can't be offset." msgstr "CNCJob objects can't be offset." -#: flatcamTools/ToolTransform.py:919 +#: flatcamTools/ToolTransform.py:914 msgid "Offset on the" msgstr "Offset on the" -#: flatcamTools/ToolTransform.py:929 +#: flatcamTools/ToolTransform.py:924 msgid "No object selected. Please Select an object to buffer!" msgstr "No object selected. Please Select an object to buffer!" -#: flatcamTools/ToolTransform.py:932 +#: flatcamTools/ToolTransform.py:927 msgid "Applying Buffer" msgstr "Applying Buffer" -#: flatcamTools/ToolTransform.py:936 +#: flatcamTools/ToolTransform.py:931 msgid "CNCJob objects can't be buffered." msgstr "CNCJob objects can't be buffered." -#: flatcamTools/ToolTransform.py:953 +#: flatcamTools/ToolTransform.py:948 msgid "Buffer done" msgstr "Buffer done" -#: tclCommands/TclCommandBbox.py:76 tclCommands/TclCommandNregions.py:75 -msgid "Expected FlatCAMGerber or FlatCAMGeometry, got" -msgstr "Expected FlatCAMGerber or FlatCAMGeometry, got" +#: tclCommands/TclCommandBbox.py:75 tclCommands/TclCommandNregions.py:74 +msgid "Expected GerberObject or GeometryObject, got" +msgstr "Expected GerberObject or GeometryObject, got" #: tclCommands/TclCommandBounds.py:67 tclCommands/TclCommandBounds.py:71 msgid "Expected a list of objects names separated by comma. Got" @@ -17482,34 +17537,34 @@ msgstr "Could not retrieve box object" msgid "Expected either -box or -all." msgstr "Expected either -box or -all." -#: tclCommands/TclCommandGeoCutout.py:148 +#: tclCommands/TclCommandGeoCutout.py:147 msgid "" "The name of the object for which cutout is done is missing. Add it and retry." msgstr "" "The name of the object for which cutout is done is missing. Add it and retry." -#: tclCommands/TclCommandGeoCutout.py:190 +#: tclCommands/TclCommandGeoCutout.py:189 msgid "Gaps value can be only one of: 'lr', 'tb', '2lr', '2tb', 4 or 8." msgstr "Gaps value can be only one of: 'lr', 'tb', '2lr', '2tb', 4 or 8." -#: tclCommands/TclCommandGeoCutout.py:302 -#: tclCommands/TclCommandGeoCutout.py:360 +#: tclCommands/TclCommandGeoCutout.py:301 +#: tclCommands/TclCommandGeoCutout.py:359 msgid "Any-form Cutout operation finished." msgstr "Any-form Cutout operation finished." -#: tclCommands/TclCommandGeoCutout.py:366 +#: tclCommands/TclCommandGeoCutout.py:365 msgid "Cancelled. Object type is not supported." msgstr "Cancelled. Object type is not supported." -#: tclCommands/TclCommandHelp.py:74 +#: tclCommands/TclCommandHelp.py:75 msgid "Available commands:" msgstr "Available commands:" -#: tclCommands/TclCommandHelp.py:112 +#: tclCommands/TclCommandHelp.py:115 msgid "Type help for usage." msgstr "Type help for usage." -#: tclCommands/TclCommandHelp.py:112 +#: tclCommands/TclCommandHelp.py:115 msgid "Example: help open_gerber" msgstr "Example: help open_gerber" @@ -17553,6 +17608,16 @@ msgstr "Origin set by offsetting all loaded objects with " msgid "No Geometry name in args. Provide a name and try again." msgstr "No Geometry name in args. Provide a name and try again." +#~ msgid "e_fr_probe" +#~ msgstr "e_fr_probe" + +#~ msgid "" +#~ " Could not generate punched hole Gerber because the punch hole sizeis " +#~ "bigger than some of the apertures in the Gerber object." +#~ msgstr "" +#~ " Could not generate punched hole Gerber because the punch hole sizeis " +#~ "bigger than some of the apertures in the Gerber object." + #~ msgid "Paint Tool. Normal painting all task started." #~ msgstr "Paint Tool. Normal painting all task started." @@ -18511,8 +18576,8 @@ msgstr "No Geometry name in args. Provide a name and try again." #~ msgid "%s" #~ msgstr "%s" -#~ msgid "FlatCAMObj.FlatCAMGeometry.mtool_gen_cncjob() -->" -#~ msgstr "FlatCAMObj.FlatCAMGeometry.mtool_gen_cncjob() -->" +#~ msgid "FlatCAMObj.GeometryObject.mtool_gen_cncjob() -->" +#~ msgstr "FlatCAMObj.GeometryObject.mtool_gen_cncjob() -->" #~ msgid "FlatCAMCNNJob.on_edit_code_click() -->" #~ msgstr "FlatCAMCNNJob.on_edit_code_click() -->" @@ -18786,9 +18851,9 @@ msgstr "No Geometry name in args. Provide a name and try again." #~ "a>
    DOWNLOAD area here.
    " -#~| msgid "[ERROR_NOTCL] Expected a FlatCAMGeometry, got %s" -#~ msgid "Expected a FlatCAMGeometry, got %s" -#~ msgstr "Expected a FlatCAMGeometry, got %s" +#~| msgid "[ERROR_NOTCL] Expected a GeometryObject, got %s" +#~ msgid "Expected a GeometryObject, got %s" +#~ msgstr "Expected a GeometryObject, got %s" #~ msgid "Saved to: %s" #~ msgstr "Saved to: %s" diff --git a/locale/es/LC_MESSAGES/strings.mo b/locale/es/LC_MESSAGES/strings.mo index 8750d6f2..538c794a 100644 Binary files a/locale/es/LC_MESSAGES/strings.mo and b/locale/es/LC_MESSAGES/strings.mo differ diff --git a/locale/es/LC_MESSAGES/strings.po b/locale/es/LC_MESSAGES/strings.po index 859328da..9b26d420 100644 --- a/locale/es/LC_MESSAGES/strings.po +++ b/locale/es/LC_MESSAGES/strings.po @@ -5,8 +5,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" -"POT-Creation-Date: 2020-04-25 15:46+0300\n" -"PO-Revision-Date: 2020-04-25 17:44+0300\n" +"POT-Creation-Date: 2020-04-27 12:31+0300\n" +"PO-Revision-Date: 2020-04-27 12:32+0300\n" "Last-Translator: Marius Stanciu - Google Translate\n" "Language-Team: \n" "Language: es\n" @@ -22,9 +22,9 @@ msgstr "" "X-Poedit-SearchPathExcluded-1: doc\n" "X-Poedit-SearchPathExcluded-2: tests\n" -#: FlatCAMApp.py:789 FlatCAMApp.py:821 FlatCAMCommon.py:1925 -#: FlatCAMCommon.py:2040 flatcamEditors/FlatCAMGeoEditor.py:500 -#: flatcamEditors/FlatCAMGeoEditor.py:570 +#: FlatCAMApp.py:794 FlatCAMApp.py:826 FlatCAMDB.py:1481 FlatCAMDB.py:1596 +#: flatcamEditors/FlatCAMGeoEditor.py:499 +#: flatcamEditors/FlatCAMGeoEditor.py:569 #: flatcamEditors/FlatCAMGeoEditor.py:5152 flatcamGUI/PreferencesUI.py:5509 #: flatcamGUI/PreferencesUI.py:6056 flatcamTools/ToolNCC.py:431 #: flatcamTools/ToolNCC.py:2396 flatcamTools/ToolNCC.py:2424 @@ -35,8 +35,8 @@ msgstr "" msgid "Seed" msgstr "Semilla" -#: FlatCAMApp.py:795 flatcamGUI/PreferencesUI.py:5588 -#: flatcamGUI/PreferencesUI.py:7695 flatcamTools/ToolCopperThieving.py:126 +#: FlatCAMApp.py:800 flatcamGUI/PreferencesUI.py:5588 +#: flatcamGUI/PreferencesUI.py:7695 flatcamTools/ToolCopperThieving.py:125 #: flatcamTools/ToolNCC.py:535 flatcamTools/ToolNCC.py:1301 #: flatcamTools/ToolNCC.py:1629 flatcamTools/ToolNCC.py:1914 #: flatcamTools/ToolNCC.py:1978 flatcamTools/ToolNCC.py:2962 @@ -44,23 +44,23 @@ msgstr "Semilla" msgid "Itself" msgstr "Sí mismo" -#: FlatCAMApp.py:822 flatcamGUI/PreferencesUI.py:6119 +#: FlatCAMApp.py:827 flatcamGUI/PreferencesUI.py:6119 #: flatcamTools/ToolPaint.py:486 flatcamTools/ToolPaint.py:1422 #: tclCommands/TclCommandPaint.py:162 msgid "All Polygons" msgstr "Todos los polígonos" -#: FlatCAMApp.py:1129 +#: FlatCAMApp.py:1134 msgid "FlatCAM is initializing ..." msgstr "FlatCAM se está inicializando ..." -#: FlatCAMApp.py:1814 +#: FlatCAMApp.py:1828 msgid "Could not find the Language files. The App strings are missing." msgstr "" "No se pudieron encontrar los archivos de idioma. Las cadenas de aplicación " "faltan." -#: FlatCAMApp.py:1908 +#: FlatCAMApp.py:1922 msgid "" "FlatCAM is initializing ...\n" "Canvas initialization started." @@ -68,7 +68,7 @@ msgstr "" "FlatCAM se está inicializando ...\n" "Se inició la inicialización del lienzo." -#: FlatCAMApp.py:1928 +#: FlatCAMApp.py:1942 msgid "" "FlatCAM is initializing ...\n" "Canvas initialization started.\n" @@ -78,67 +78,62 @@ msgstr "" "Se inició la inicialización del lienzo.\n" "La inicialización del lienzo terminó en" -#: FlatCAMApp.py:2570 flatcamGUI/GUIElements.py:2592 -msgid "Type >help< to get started" -msgstr "Escriba >help< para comenzar" - -#: FlatCAMApp.py:2822 FlatCAMApp.py:9400 +#: FlatCAMApp.py:2815 FlatCAMApp.py:9396 msgid "New Project - Not saved" msgstr "Proyecto nuevo: no guardado" -#: FlatCAMApp.py:2918 +#: FlatCAMApp.py:2911 msgid "" "Found old default preferences files. Please reboot the application to update." msgstr "" "Se encontraron archivos de preferencias predeterminados antiguos. Reinicie " "la aplicación para actualizar." -#: FlatCAMApp.py:2969 FlatCAMApp.py:3889 FlatCAMApp.py:3938 FlatCAMApp.py:3993 -#: FlatCAMApp.py:4068 FlatCAMApp.py:6117 FlatCAMApp.py:9484 FlatCAMApp.py:9521 -#: FlatCAMApp.py:9563 FlatCAMApp.py:9592 FlatCAMApp.py:9632 FlatCAMApp.py:9657 -#: FlatCAMApp.py:9709 FlatCAMApp.py:9745 FlatCAMApp.py:9791 FlatCAMApp.py:9832 -#: FlatCAMApp.py:9873 FlatCAMApp.py:9914 FlatCAMApp.py:9955 FlatCAMApp.py:9999 -#: FlatCAMApp.py:10055 FlatCAMApp.py:10087 FlatCAMApp.py:10119 -#: FlatCAMApp.py:10356 FlatCAMApp.py:10400 FlatCAMApp.py:10477 -#: FlatCAMApp.py:10532 FlatCAMCommon.py:371 FlatCAMCommon.py:413 -#: FlatCAMCommon.py:1107 FlatCAMCommon.py:1153 FlatCAMCommon.py:2537 -#: FlatCAMCommon.py:2583 ObjectCollection.py:122 -#: flatcamEditors/FlatCAMExcEditor.py:1024 -#: flatcamEditors/FlatCAMExcEditor.py:1092 +#: FlatCAMApp.py:2962 FlatCAMApp.py:3882 FlatCAMApp.py:3931 FlatCAMApp.py:3986 +#: FlatCAMApp.py:4061 FlatCAMApp.py:6110 FlatCAMApp.py:9480 FlatCAMApp.py:9517 +#: FlatCAMApp.py:9559 FlatCAMApp.py:9588 FlatCAMApp.py:9629 FlatCAMApp.py:9654 +#: FlatCAMApp.py:9706 FlatCAMApp.py:9741 FlatCAMApp.py:9786 FlatCAMApp.py:9827 +#: FlatCAMApp.py:9868 FlatCAMApp.py:9909 FlatCAMApp.py:9950 FlatCAMApp.py:9994 +#: FlatCAMApp.py:10050 FlatCAMApp.py:10082 FlatCAMApp.py:10114 +#: FlatCAMApp.py:10351 FlatCAMApp.py:10394 FlatCAMApp.py:10471 +#: FlatCAMApp.py:10526 FlatCAMBookmark.py:291 FlatCAMBookmark.py:333 +#: FlatCAMDB.py:663 FlatCAMDB.py:709 FlatCAMDB.py:2093 FlatCAMDB.py:2139 +#: ObjectCollection.py:127 flatcamEditors/FlatCAMExcEditor.py:1023 +#: flatcamEditors/FlatCAMExcEditor.py:1091 #: flatcamEditors/FlatCAMTextEditor.py:223 flatcamGUI/FlatCAMGUI.py:3389 #: flatcamGUI/FlatCAMGUI.py:3601 flatcamGUI/FlatCAMGUI.py:3812 #: flatcamTools/ToolFilm.py:754 flatcamTools/ToolFilm.py:900 -#: flatcamTools/ToolImage.py:247 flatcamTools/ToolMove.py:270 +#: flatcamTools/ToolImage.py:247 flatcamTools/ToolMove.py:269 #: flatcamTools/ToolPcbWizard.py:301 flatcamTools/ToolPcbWizard.py:324 #: flatcamTools/ToolQRCode.py:791 flatcamTools/ToolQRCode.py:838 msgid "Cancelled." msgstr "Cancelado." -#: FlatCAMApp.py:2985 +#: FlatCAMApp.py:2978 msgid "Open Config file failed." msgstr "El archivo de configuración abierto falló." -#: FlatCAMApp.py:3000 +#: FlatCAMApp.py:2993 msgid "Open Script file failed." msgstr "Error al abrir el archivo de script." -#: FlatCAMApp.py:3026 +#: FlatCAMApp.py:3019 msgid "Open Excellon file failed." msgstr "Abrir archivo Excellon falló." -#: FlatCAMApp.py:3039 +#: FlatCAMApp.py:3032 msgid "Open GCode file failed." msgstr "Error al abrir el archivo GCode." -#: FlatCAMApp.py:3052 +#: FlatCAMApp.py:3045 msgid "Open Gerber file failed." msgstr "Error al abrir el archivo Gerber." -#: FlatCAMApp.py:3429 +#: FlatCAMApp.py:3422 msgid "Select a Geometry, Gerber or Excellon Object to edit." msgstr "Seleccione un objeto Geometry, Gerber o Excellon para editar." -#: FlatCAMApp.py:3444 +#: FlatCAMApp.py:3437 msgid "" "Simultaneous editing of tools geometry in a MultiGeo Geometry is not " "possible.\n" @@ -148,96 +143,96 @@ msgstr "" "MultiGeo no es posible.\n" "Edite solo una geometría a la vez." -#: FlatCAMApp.py:3502 +#: FlatCAMApp.py:3495 msgid "Editor is activated ..." msgstr "Editor está activado ..." -#: FlatCAMApp.py:3523 +#: FlatCAMApp.py:3516 msgid "Do you want to save the edited object?" msgstr "Quieres guardar el objeto editado?" -#: FlatCAMApp.py:3524 flatcamGUI/FlatCAMGUI.py:2273 +#: FlatCAMApp.py:3517 flatcamGUI/FlatCAMGUI.py:2273 msgid "Close Editor" msgstr "Cerrar Editor" -#: FlatCAMApp.py:3527 FlatCAMApp.py:5169 FlatCAMApp.py:8030 FlatCAMApp.py:8056 -#: FlatCAMApp.py:9305 FlatCAMTranslation.py:108 FlatCAMTranslation.py:199 +#: FlatCAMApp.py:3520 FlatCAMApp.py:5162 FlatCAMApp.py:8024 FlatCAMApp.py:8050 +#: FlatCAMApp.py:9300 FlatCAMTranslation.py:108 FlatCAMTranslation.py:199 #: flatcamGUI/FlatCAMGUI.py:2479 msgid "Yes" msgstr "Sí" -#: FlatCAMApp.py:3528 FlatCAMApp.py:5170 FlatCAMApp.py:8031 FlatCAMApp.py:8057 -#: FlatCAMApp.py:9306 FlatCAMTranslation.py:109 FlatCAMTranslation.py:200 +#: FlatCAMApp.py:3521 FlatCAMApp.py:5163 FlatCAMApp.py:8025 FlatCAMApp.py:8051 +#: FlatCAMApp.py:9301 FlatCAMTranslation.py:109 FlatCAMTranslation.py:200 #: flatcamGUI/FlatCAMGUI.py:2480 flatcamGUI/PreferencesUI.py:5443 #: flatcamGUI/PreferencesUI.py:5989 flatcamTools/ToolNCC.py:182 #: flatcamTools/ToolPaint.py:166 msgid "No" msgstr "No" -#: FlatCAMApp.py:3529 FlatCAMApp.py:5171 FlatCAMApp.py:6055 FlatCAMApp.py:7006 -#: FlatCAMApp.py:9307 FlatCAMCommon.py:572 FlatCAMCommon.py:2127 +#: FlatCAMApp.py:3522 FlatCAMApp.py:5164 FlatCAMApp.py:6048 FlatCAMApp.py:7000 +#: FlatCAMApp.py:9302 FlatCAMDB.py:128 FlatCAMDB.py:1683 #: flatcamGUI/FlatCAMGUI.py:1332 msgid "Cancel" msgstr "Cancelar" -#: FlatCAMApp.py:3561 +#: FlatCAMApp.py:3554 msgid "Object empty after edit." msgstr "Objeto vacío después de editar." -#: FlatCAMApp.py:3565 FlatCAMApp.py:3586 FlatCAMApp.py:3608 +#: FlatCAMApp.py:3558 FlatCAMApp.py:3579 FlatCAMApp.py:3601 msgid "Editor exited. Editor content saved." msgstr "Editor salido. Contenido del editor guardado." -#: FlatCAMApp.py:3612 FlatCAMApp.py:3635 FlatCAMApp.py:3653 +#: FlatCAMApp.py:3605 FlatCAMApp.py:3628 FlatCAMApp.py:3646 msgid "Select a Gerber, Geometry or Excellon Object to update." msgstr "Seleccione un objeto Gerber, Geometry o Excellon para actualizar." -#: FlatCAMApp.py:3615 +#: FlatCAMApp.py:3608 msgid "is updated, returning to App..." msgstr "se actualiza, volviendo a la aplicación ..." -#: FlatCAMApp.py:3622 +#: FlatCAMApp.py:3615 msgid "Editor exited. Editor content was not saved." msgstr "Editor salido. El contenido del editor no se guardó." -#: FlatCAMApp.py:3815 FlatCAMApp.py:3946 FlatCAMApp.py:5018 +#: FlatCAMApp.py:3808 FlatCAMApp.py:3939 FlatCAMApp.py:5011 msgid "Could not load defaults file." msgstr "No se pudo cargar el archivo predeterminado." -#: FlatCAMApp.py:3827 FlatCAMApp.py:3954 FlatCAMApp.py:5027 +#: FlatCAMApp.py:3820 FlatCAMApp.py:3947 FlatCAMApp.py:5020 msgid "Failed to parse defaults file." msgstr "Error al analizar el archivo predeterminado." -#: FlatCAMApp.py:3897 FlatCAMApp.py:5119 +#: FlatCAMApp.py:3890 FlatCAMApp.py:5112 msgid "Could not load factory defaults file." msgstr "No se pudo cargar el archivo de valores predeterminados de fábrica." -#: FlatCAMApp.py:3905 FlatCAMApp.py:5129 +#: FlatCAMApp.py:3898 FlatCAMApp.py:5122 msgid "Failed to parse factory defaults file." msgstr "Error al analizar el archivo de valores predeterminados de fábrica." -#: FlatCAMApp.py:3913 +#: FlatCAMApp.py:3906 msgid "Preferences default values are restored." msgstr "Se restauran los valores predeterminados de las preferencias." -#: FlatCAMApp.py:3928 FlatCAMApp.py:3932 +#: FlatCAMApp.py:3921 FlatCAMApp.py:3925 msgid "Import FlatCAM Preferences" msgstr "Importar preferencias de FlatCAM" -#: FlatCAMApp.py:3962 +#: FlatCAMApp.py:3955 msgid "Imported Defaults from" msgstr "Valores predeterminados importados de" -#: FlatCAMApp.py:3982 FlatCAMApp.py:3987 +#: FlatCAMApp.py:3975 FlatCAMApp.py:3980 msgid "Export FlatCAM Preferences" msgstr "Exportar preferencias de FlatCAM" -#: FlatCAMApp.py:4002 FlatCAMApp.py:4076 FlatCAMApp.py:10776 -#: FlatCAMApp.py:10824 FlatCAMApp.py:10950 FlatCAMApp.py:11087 -#: FlatCAMCommon.py:379 FlatCAMCommon.py:1115 FlatCAMCommon.py:2545 -#: FlatCAMObj.py:7484 flatcamEditors/FlatCAMTextEditor.py:276 +#: FlatCAMApp.py:3995 FlatCAMApp.py:4069 FlatCAMApp.py:10770 +#: FlatCAMApp.py:10818 FlatCAMApp.py:10943 FlatCAMApp.py:11079 +#: FlatCAMBookmark.py:299 FlatCAMDB.py:671 FlatCAMDB.py:2101 +#: flatcamEditors/FlatCAMTextEditor.py:276 flatcamObjects/FlatCAMCNCJob.py:958 #: flatcamTools/ToolFilm.py:1031 flatcamTools/ToolFilm.py:1212 -#: flatcamTools/ToolSolderPaste.py:1533 +#: flatcamTools/ToolSolderPaste.py:1534 msgid "" "Permission denied, saving not possible.\n" "Most likely another app is holding the file open and not accessible." @@ -246,108 +241,111 @@ msgstr "" "Lo más probable es que otra aplicación mantenga el archivo abierto y no " "accesible." -#: FlatCAMApp.py:4014 +#: FlatCAMApp.py:4007 msgid "Could not load preferences file." msgstr "No se pudo cargar el archivo de preferencias." -#: FlatCAMApp.py:4033 FlatCAMApp.py:4100 FlatCAMApp.py:5046 +#: FlatCAMApp.py:4026 FlatCAMApp.py:4093 FlatCAMApp.py:5039 msgid "Failed to write defaults to file." msgstr "Error al escribir los valores predeterminados en el archivo." -#: FlatCAMApp.py:4038 +#: FlatCAMApp.py:4031 msgid "Exported preferences to" msgstr "Preferencias exportadas a" -#: FlatCAMApp.py:4058 FlatCAMApp.py:4063 +#: FlatCAMApp.py:4051 FlatCAMApp.py:4056 msgid "Save to file" msgstr "Guardar en archivo" -#: FlatCAMApp.py:4087 +#: FlatCAMApp.py:4080 msgid "Could not load the file." msgstr "No se pudo cargar el archivo." -#: FlatCAMApp.py:4103 +#: FlatCAMApp.py:4096 msgid "Exported file to" msgstr "Exported file to" -#: FlatCAMApp.py:4186 +#: FlatCAMApp.py:4179 msgid "Failed to open recent files file for writing." msgstr "Error al abrir archivos recientes para escritura." -#: FlatCAMApp.py:4197 +#: FlatCAMApp.py:4190 msgid "Failed to open recent projects file for writing." msgstr "Error al abrir el archivo de proyectos recientes para escribir." -#: FlatCAMApp.py:4282 FlatCAMApp.py:11283 FlatCAMApp.py:11342 -#: FlatCAMApp.py:11470 FlatCAMApp.py:12196 FlatCAMObj.py:5605 -#: flatcamEditors/FlatCAMGrbEditor.py:4231 flatcamTools/ToolPcbWizard.py:433 +#: FlatCAMApp.py:4275 FlatCAMApp.py:11275 FlatCAMApp.py:11334 +#: FlatCAMApp.py:11462 FlatCAMApp.py:12193 +#: flatcamEditors/FlatCAMGrbEditor.py:4231 +#: flatcamObjects/FlatCAMGeometry.py:1671 flatcamParsers/ParseExcellon.py:897 +#: flatcamTools/ToolPcbWizard.py:433 msgid "An internal error has occurred. See shell.\n" msgstr "Ha ocurrido un error interno. Ver concha\n" -#: FlatCAMApp.py:4283 +#: FlatCAMApp.py:4276 #, python-brace-format msgid "" "Object ({kind}) failed because: {error} \n" "\n" msgstr "El objeto ({kind}) falló porque: {error}\n" -#: FlatCAMApp.py:4298 +#: FlatCAMApp.py:4291 msgid "Converting units to " msgstr "Convertir unidades a " -#: FlatCAMApp.py:4411 +#: FlatCAMApp.py:4404 msgid "CREATE A NEW FLATCAM TCL SCRIPT" msgstr "CREA UN NUEVO SCRIPT FLATCAM TCL" -#: FlatCAMApp.py:4412 +#: FlatCAMApp.py:4405 msgid "TCL Tutorial is here" msgstr "TCL Tutorial está aquí" -#: FlatCAMApp.py:4414 +#: FlatCAMApp.py:4407 msgid "FlatCAM commands list" msgstr "Lista de comandos de FlatCAM" -#: FlatCAMApp.py:4465 FlatCAMApp.py:4471 FlatCAMApp.py:4477 FlatCAMApp.py:4483 -#: FlatCAMApp.py:4489 FlatCAMApp.py:4495 +#: FlatCAMApp.py:4458 FlatCAMApp.py:4464 FlatCAMApp.py:4470 FlatCAMApp.py:4476 +#: FlatCAMApp.py:4482 FlatCAMApp.py:4488 msgid "created/selected" msgstr "creado / seleccionado" -#: FlatCAMApp.py:4510 FlatCAMApp.py:7092 FlatCAMObj.py:278 FlatCAMObj.py:309 -#: FlatCAMObj.py:325 FlatCAMObj.py:405 flatcamTools/ToolCopperThieving.py:1482 -#: flatcamTools/ToolFiducials.py:809 flatcamTools/ToolMove.py:230 +#: FlatCAMApp.py:4503 FlatCAMApp.py:7086 flatcamObjects/FlatCAMObj.py:248 +#: flatcamObjects/FlatCAMObj.py:279 flatcamObjects/FlatCAMObj.py:295 +#: flatcamObjects/FlatCAMObj.py:375 flatcamTools/ToolCopperThieving.py:1481 +#: flatcamTools/ToolFiducials.py:809 flatcamTools/ToolMove.py:229 #: flatcamTools/ToolQRCode.py:728 msgid "Plotting" msgstr "Trazado" -#: FlatCAMApp.py:4573 flatcamGUI/FlatCAMGUI.py:530 +#: FlatCAMApp.py:4566 flatcamGUI/FlatCAMGUI.py:530 msgid "About FlatCAM" msgstr "Sobre FlatCAM" -#: FlatCAMApp.py:4599 +#: FlatCAMApp.py:4592 msgid "2D Computer-Aided Printed Circuit Board Manufacturing" msgstr "Fabricación de placa de circuito impreso asistida por computadora 2D" -#: FlatCAMApp.py:4600 +#: FlatCAMApp.py:4593 msgid "Development" msgstr "Desarrollo" -#: FlatCAMApp.py:4601 +#: FlatCAMApp.py:4594 msgid "DOWNLOAD" msgstr "DESCARGAR" -#: FlatCAMApp.py:4602 +#: FlatCAMApp.py:4595 msgid "Issue tracker" msgstr "Rastreador de problemas" -#: FlatCAMApp.py:4606 FlatCAMApp.py:4948 flatcamGUI/GUIElements.py:2583 +#: FlatCAMApp.py:4599 FlatCAMApp.py:4941 flatcamGUI/GUIElements.py:2583 msgid "Close" msgstr "Cerca" -#: FlatCAMApp.py:4621 +#: FlatCAMApp.py:4614 msgid "Licensed under the MIT license" msgstr "Licenciado bajo la licencia MIT" -#: FlatCAMApp.py:4630 +#: FlatCAMApp.py:4623 msgid "" "Permission is hereby granted, free of charge, to any person obtaining a " "copy\n" @@ -397,7 +395,7 @@ msgstr "" "FUERA DE O EN CONEXIÓN CON EL SOFTWARE O EL USO U OTRAS OFERTAS EN\n" "EL SOFTWARE." -#: FlatCAMApp.py:4652 +#: FlatCAMApp.py:4645 msgid "" "Some of the icons used are from the following sources:
    Icons by FreepikIcons8
    Iconos de oNline Web Fonts" -#: FlatCAMApp.py:4685 +#: FlatCAMApp.py:4678 msgid "Splash" msgstr "Pantalla de bienvenida" -#: FlatCAMApp.py:4691 +#: FlatCAMApp.py:4684 msgid "Programmers" msgstr "Programadores" -#: FlatCAMApp.py:4697 +#: FlatCAMApp.py:4690 msgid "Translators" msgstr "Traductores" -#: FlatCAMApp.py:4703 +#: FlatCAMApp.py:4696 msgid "License" msgstr "Licencia" -#: FlatCAMApp.py:4709 +#: FlatCAMApp.py:4702 msgid "Attributions" msgstr "Atribuciones" -#: FlatCAMApp.py:4732 +#: FlatCAMApp.py:4725 msgid "Programmer" msgstr "Programador" -#: FlatCAMApp.py:4733 +#: FlatCAMApp.py:4726 msgid "Status" msgstr "Estado" -#: FlatCAMApp.py:4734 FlatCAMApp.py:4812 +#: FlatCAMApp.py:4727 FlatCAMApp.py:4805 msgid "E-mail" msgstr "Email" -#: FlatCAMApp.py:4742 +#: FlatCAMApp.py:4735 msgid "BETA Maintainer >= 2019" msgstr "BETA Mantenedor >= 2019" -#: FlatCAMApp.py:4809 +#: FlatCAMApp.py:4802 msgid "Language" msgstr "Idioma" -#: FlatCAMApp.py:4810 +#: FlatCAMApp.py:4803 msgid "Translator" msgstr "Traductor" -#: FlatCAMApp.py:4811 +#: FlatCAMApp.py:4804 msgid "Corrections" msgstr "Correcciones" -#: FlatCAMApp.py:4920 FlatCAMApp.py:4928 FlatCAMApp.py:8075 +#: FlatCAMApp.py:4913 FlatCAMApp.py:4921 FlatCAMApp.py:8069 #: flatcamGUI/FlatCAMGUI.py:512 msgid "Bookmarks Manager" msgstr "Administrador de Marcadores" -#: FlatCAMApp.py:4939 +#: FlatCAMApp.py:4932 msgid "" "This entry will resolve to another website if:\n" "\n" @@ -486,28 +484,28 @@ msgstr "" "Si no puede obtener información sobre FlatCAM beta\n" "use el enlace del canal de YouTube desde el menú Ayuda." -#: FlatCAMApp.py:4946 +#: FlatCAMApp.py:4939 msgid "Alternative website" msgstr "Sitio web alternativo" -#: FlatCAMApp.py:5050 FlatCAMApp.py:8039 +#: FlatCAMApp.py:5043 FlatCAMApp.py:8033 msgid "Preferences saved." msgstr "Preferencias guardadas." -#: FlatCAMApp.py:5145 +#: FlatCAMApp.py:5138 msgid "Failed to write factory defaults to file." msgstr "" "Error al escribir los valores predeterminados de fábrica en el archivo." -#: FlatCAMApp.py:5149 +#: FlatCAMApp.py:5142 msgid "Factory defaults saved." msgstr "Valores predeterminados de fábrica guardados." -#: FlatCAMApp.py:5159 flatcamGUI/FlatCAMGUI.py:4178 +#: FlatCAMApp.py:5152 flatcamGUI/FlatCAMGUI.py:4178 msgid "Application is saving the project. Please wait ..." msgstr "La aplicación es guardar el proyecto. Por favor espera ..." -#: FlatCAMApp.py:5164 FlatCAMTranslation.py:194 +#: FlatCAMApp.py:5157 FlatCAMTranslation.py:194 msgid "" "There are files/objects modified in FlatCAM. \n" "Do you want to Save the project?" @@ -515,29 +513,29 @@ msgstr "" "Hay archivos / objetos modificados en FlatCAM.\n" "¿Quieres guardar el proyecto?" -#: FlatCAMApp.py:5167 FlatCAMApp.py:9303 FlatCAMTranslation.py:197 +#: FlatCAMApp.py:5160 FlatCAMApp.py:9298 FlatCAMTranslation.py:197 msgid "Save changes" msgstr "Guardar cambios" -#: FlatCAMApp.py:5423 +#: FlatCAMApp.py:5416 msgid "Selected Excellon file extensions registered with FlatCAM." msgstr "Extensiones de archivo Excellon seleccionadas registradas con FlatCAM." -#: FlatCAMApp.py:5445 +#: FlatCAMApp.py:5438 msgid "Selected GCode file extensions registered with FlatCAM." msgstr "Extensiones de archivo GCode seleccionadas registradas con FlatCAM." -#: FlatCAMApp.py:5467 +#: FlatCAMApp.py:5460 msgid "Selected Gerber file extensions registered with FlatCAM." msgstr "Extensiones de archivo Gerber seleccionadas registradas con FlatCAM." -#: FlatCAMApp.py:5655 FlatCAMApp.py:5714 FlatCAMApp.py:5742 +#: FlatCAMApp.py:5648 FlatCAMApp.py:5707 FlatCAMApp.py:5735 msgid "At least two objects are required for join. Objects currently selected" msgstr "" "Se requieren al menos dos objetos para unirse. Objetos actualmente " "seleccionados" -#: FlatCAMApp.py:5664 +#: FlatCAMApp.py:5657 msgid "" "Failed join. The Geometry objects are of different types.\n" "At least one is MultiGeo type and the other is SingleGeo type. A possibility " @@ -553,47 +551,47 @@ msgstr "" "pueden perderse y el resultado puede no ser el esperado.\n" "Compruebe el GCODE generado." -#: FlatCAMApp.py:5676 FlatCAMApp.py:5686 +#: FlatCAMApp.py:5669 FlatCAMApp.py:5679 msgid "Geometry merging finished" msgstr "Geometría fusionada terminada" -#: FlatCAMApp.py:5709 +#: FlatCAMApp.py:5702 msgid "Failed. Excellon joining works only on Excellon objects." msgstr "Ha fallado. La unión de Excellon funciona solo en objetos de Excellon." -#: FlatCAMApp.py:5719 +#: FlatCAMApp.py:5712 msgid "Excellon merging finished" msgstr "Excellon fusión finalizada" -#: FlatCAMApp.py:5737 +#: FlatCAMApp.py:5730 msgid "Failed. Gerber joining works only on Gerber objects." msgstr "Ha fallado. La unión de Gerber funciona solo en objetos de Gerber." -#: FlatCAMApp.py:5747 +#: FlatCAMApp.py:5740 msgid "Gerber merging finished" msgstr "Gerber fusión finalizada" -#: FlatCAMApp.py:5767 FlatCAMApp.py:5802 +#: FlatCAMApp.py:5760 FlatCAMApp.py:5795 msgid "Failed. Select a Geometry Object and try again." msgstr "Ha fallado. Seleccione un objeto de Geometría y vuelva a intentarlo." -#: FlatCAMApp.py:5771 FlatCAMApp.py:5807 -msgid "Expected a FlatCAMGeometry, got" -msgstr "Se esperaba un FlatCAMGeometry, se obtuvo" +#: FlatCAMApp.py:5764 FlatCAMApp.py:5800 +msgid "Expected a GeometryObject, got" +msgstr "Se esperaba un GeometryObject, se obtuvo" -#: FlatCAMApp.py:5784 +#: FlatCAMApp.py:5777 msgid "A Geometry object was converted to MultiGeo type." msgstr "Un objeto Geometry fue convertido al tipo MultiGeo." -#: FlatCAMApp.py:5822 +#: FlatCAMApp.py:5815 msgid "A Geometry object was converted to SingleGeo type." msgstr "Un objeto Geometry fue convertido al tipo SingleGeo." -#: FlatCAMApp.py:6049 +#: FlatCAMApp.py:6042 msgid "Toggle Units" msgstr "(Escriba ayuda para empezar)" -#: FlatCAMApp.py:6051 +#: FlatCAMApp.py:6044 msgid "" "Changing the units of the project\n" "will scale all objects.\n" @@ -605,33 +603,33 @@ msgstr "" "\n" "¿Quieres continuar?" -#: FlatCAMApp.py:6054 FlatCAMApp.py:6928 FlatCAMApp.py:7005 FlatCAMApp.py:9676 -#: FlatCAMApp.py:9690 FlatCAMApp.py:10025 FlatCAMApp.py:10035 +#: FlatCAMApp.py:6047 FlatCAMApp.py:6922 FlatCAMApp.py:6999 FlatCAMApp.py:9673 +#: FlatCAMApp.py:9687 FlatCAMApp.py:10020 FlatCAMApp.py:10030 msgid "Ok" msgstr "De acuerdo" -#: FlatCAMApp.py:6103 +#: FlatCAMApp.py:6096 msgid "Converted units to" msgstr "Convertir unidades a" -#: FlatCAMApp.py:6743 +#: FlatCAMApp.py:6737 msgid "Detachable Tabs" msgstr "Tabulacion desmontables" -#: FlatCAMApp.py:6817 FlatCAMApp.py:6861 FlatCAMApp.py:6889 FlatCAMApp.py:7822 -#: FlatCAMApp.py:7890 FlatCAMApp.py:7994 +#: FlatCAMApp.py:6811 FlatCAMApp.py:6855 FlatCAMApp.py:6883 FlatCAMApp.py:7816 +#: FlatCAMApp.py:7884 FlatCAMApp.py:7988 msgid "Preferences" msgstr "Preferencias" -#: FlatCAMApp.py:6823 +#: FlatCAMApp.py:6817 msgid "Preferences applied." msgstr "Preferencias aplicadas." -#: FlatCAMApp.py:6894 +#: FlatCAMApp.py:6888 msgid "Preferences closed without saving." msgstr "Preferencias cerradas sin guardar." -#: FlatCAMApp.py:6917 flatcamTools/ToolNCC.py:932 flatcamTools/ToolNCC.py:1426 +#: FlatCAMApp.py:6911 flatcamTools/ToolNCC.py:932 flatcamTools/ToolNCC.py:1426 #: flatcamTools/ToolPaint.py:858 flatcamTools/ToolSolderPaste.py:568 #: flatcamTools/ToolSolderPaste.py:893 msgid "Please enter a tool diameter with non-zero value, in Float format." @@ -639,12 +637,12 @@ msgstr "" "Introduzca un diámetro de herramienta con valor distinto de cero, en formato " "Float." -#: FlatCAMApp.py:6921 flatcamTools/ToolNCC.py:936 flatcamTools/ToolPaint.py:862 +#: FlatCAMApp.py:6915 flatcamTools/ToolNCC.py:936 flatcamTools/ToolPaint.py:862 #: flatcamTools/ToolSolderPaste.py:572 msgid "Adding Tool cancelled" msgstr "Añadiendo herramienta cancelada" -#: FlatCAMApp.py:6924 +#: FlatCAMApp.py:6918 msgid "" "Adding Tool works only when Advanced is checked.\n" "Go to Preferences -> General - Show Advanced Options." @@ -652,11 +650,11 @@ msgstr "" "Agregar herramienta solo funciona cuando se selecciona Avanzado.\n" "Vaya a Preferencias -> General - Mostrar opciones avanzadas." -#: FlatCAMApp.py:7000 +#: FlatCAMApp.py:6994 msgid "Delete objects" msgstr "Eliminar objetos" -#: FlatCAMApp.py:7003 +#: FlatCAMApp.py:6997 msgid "" "Are you sure you want to permanently delete\n" "the selected objects?" @@ -664,57 +662,57 @@ msgstr "" "¿Estás seguro de que deseas eliminarlo permanentemente?\n" "los objetos seleccionados?" -#: FlatCAMApp.py:7041 +#: FlatCAMApp.py:7035 msgid "Object(s) deleted" msgstr "Objeto (s) eliminado" -#: FlatCAMApp.py:7045 FlatCAMApp.py:7200 flatcamTools/ToolDblSided.py:819 +#: FlatCAMApp.py:7039 FlatCAMApp.py:7194 flatcamTools/ToolDblSided.py:818 msgid "Failed. No object(s) selected..." msgstr "Ha fallado. Ningún objeto (s) seleccionado ..." -#: FlatCAMApp.py:7047 +#: FlatCAMApp.py:7041 msgid "Save the work in Editor and try again ..." msgstr "Guarda el trabajo en el Editor y vuelve a intentarlo ..." -#: FlatCAMApp.py:7076 +#: FlatCAMApp.py:7070 msgid "Object deleted" msgstr "Objeto eliminado" -#: FlatCAMApp.py:7103 +#: FlatCAMApp.py:7097 msgid "Click to set the origin ..." msgstr "Haga clic para establecer el origen ..." -#: FlatCAMApp.py:7125 +#: FlatCAMApp.py:7119 msgid "Setting Origin..." msgstr "Establecer Origen ..." -#: FlatCAMApp.py:7138 FlatCAMApp.py:7240 +#: FlatCAMApp.py:7132 FlatCAMApp.py:7234 msgid "Origin set" msgstr "Conjunto de origen" -#: FlatCAMApp.py:7155 +#: FlatCAMApp.py:7149 msgid "Origin coordinates specified but incomplete." msgstr "Origin coordinates specified but incomplete." -#: FlatCAMApp.py:7196 +#: FlatCAMApp.py:7190 msgid "Moving to Origin..." msgstr "Mudarse al origen ..." -#: FlatCAMApp.py:7277 +#: FlatCAMApp.py:7271 msgid "Jump to ..." msgstr "Salta a ..." -#: FlatCAMApp.py:7278 +#: FlatCAMApp.py:7272 msgid "Enter the coordinates in format X,Y:" msgstr "Introduzca las coordenadas en formato X, Y:" -#: FlatCAMApp.py:7288 +#: FlatCAMApp.py:7282 msgid "Wrong coordinates. Enter coordinates in format: X,Y" msgstr "Coordenadas erróneas. Introduzca las coordenadas en formato: X, Y" -#: FlatCAMApp.py:7366 FlatCAMApp.py:7515 -#: flatcamEditors/FlatCAMExcEditor.py:3622 -#: flatcamEditors/FlatCAMExcEditor.py:3630 +#: FlatCAMApp.py:7360 FlatCAMApp.py:7509 +#: flatcamEditors/FlatCAMExcEditor.py:3624 +#: flatcamEditors/FlatCAMExcEditor.py:3632 #: flatcamEditors/FlatCAMGeoEditor.py:4349 #: flatcamEditors/FlatCAMGeoEditor.py:4363 #: flatcamEditors/FlatCAMGrbEditor.py:1085 @@ -728,80 +726,80 @@ msgstr "Coordenadas erróneas. Introduzca las coordenadas en formato: X, Y" msgid "Done." msgstr "Hecho." -#: FlatCAMApp.py:7381 FlatCAMApp.py:9672 FlatCAMApp.py:9768 FlatCAMApp.py:9810 -#: FlatCAMApp.py:9851 FlatCAMApp.py:9892 FlatCAMApp.py:9933 FlatCAMApp.py:9977 -#: FlatCAMApp.py:10021 FlatCAMApp.py:10510 FlatCAMApp.py:10514 +#: FlatCAMApp.py:7375 FlatCAMApp.py:9669 FlatCAMApp.py:9764 FlatCAMApp.py:9805 +#: FlatCAMApp.py:9846 FlatCAMApp.py:9887 FlatCAMApp.py:9928 FlatCAMApp.py:9972 +#: FlatCAMApp.py:10016 FlatCAMApp.py:10504 FlatCAMApp.py:10508 #: flatcamTools/ToolProperties.py:116 msgid "No object selected." msgstr "Ningún objeto seleccionado." -#: FlatCAMApp.py:7400 +#: FlatCAMApp.py:7394 msgid "Bottom-Left" msgstr "Abajo-izquierda" -#: FlatCAMApp.py:7401 flatcamGUI/PreferencesUI.py:8111 +#: FlatCAMApp.py:7395 flatcamGUI/PreferencesUI.py:8111 #: flatcamTools/ToolCalibration.py:159 msgid "Top-Left" msgstr "Arriba a la izquierda" -#: FlatCAMApp.py:7402 flatcamGUI/PreferencesUI.py:8112 +#: FlatCAMApp.py:7396 flatcamGUI/PreferencesUI.py:8112 #: flatcamTools/ToolCalibration.py:160 msgid "Bottom-Right" msgstr "Abajo a la derecha" -#: FlatCAMApp.py:7403 +#: FlatCAMApp.py:7397 msgid "Top-Right" msgstr "Top-Derecha" -#: FlatCAMApp.py:7404 flatcamGUI/ObjectUI.py:2624 +#: FlatCAMApp.py:7398 flatcamGUI/ObjectUI.py:2625 msgid "Center" msgstr "Centrar" -#: FlatCAMApp.py:7424 +#: FlatCAMApp.py:7418 msgid "Locate ..." msgstr "Localizar ..." -#: FlatCAMApp.py:7685 FlatCAMApp.py:7762 +#: FlatCAMApp.py:7679 FlatCAMApp.py:7756 msgid "No object is selected. Select an object and try again." msgstr "" "Ningún objeto está seleccionado. Seleccione un objeto y vuelva a intentarlo." -#: FlatCAMApp.py:7788 +#: FlatCAMApp.py:7782 msgid "" "Aborting. The current task will be gracefully closed as soon as possible..." msgstr "Abortar La tarea actual se cerrará con gracia lo antes posible ..." -#: FlatCAMApp.py:7794 +#: FlatCAMApp.py:7788 msgid "The current task was gracefully closed on user request..." msgstr "La tarea actual se cerró correctamente a petición del usuario ..." -#: FlatCAMApp.py:7887 +#: FlatCAMApp.py:7881 msgid "Preferences edited but not saved." msgstr "Preferencias editadas pero no guardadas." -#: FlatCAMApp.py:7904 FlatCAMApp.py:7932 FlatCAMApp.py:7959 FlatCAMApp.py:7978 -#: FlatCAMApp.py:8045 FlatCAMCommon.py:1182 FlatCAMCommon.py:1357 -#: FlatCAMCommon.py:2612 FlatCAMCommon.py:2820 FlatCAMObj.py:4798 +#: FlatCAMApp.py:7898 FlatCAMApp.py:7926 FlatCAMApp.py:7953 FlatCAMApp.py:7972 +#: FlatCAMApp.py:8039 FlatCAMDB.py:738 FlatCAMDB.py:913 FlatCAMDB.py:2168 +#: FlatCAMDB.py:2378 flatcamObjects/FlatCAMGeometry.py:862 #: flatcamTools/ToolNCC.py:3958 flatcamTools/ToolNCC.py:4042 #: flatcamTools/ToolPaint.py:3548 flatcamTools/ToolPaint.py:3633 msgid "Tools Database" msgstr "Base de Datos de Herramientas" -#: FlatCAMApp.py:7956 +#: FlatCAMApp.py:7950 msgid "Tools in Tools Database edited but not saved." msgstr "" "Herramientas en la base de datos de herramientas editadas pero no guardadas." -#: FlatCAMApp.py:7982 flatcamTools/ToolNCC.py:3965 +#: FlatCAMApp.py:7976 flatcamTools/ToolNCC.py:3965 #: flatcamTools/ToolPaint.py:3555 msgid "Tool from DB added in Tool Table." msgstr "Herramienta de DB agregada en la Tabla de herramientas." -#: FlatCAMApp.py:7984 +#: FlatCAMApp.py:7978 msgid "Adding tool from DB is not allowed for this object." msgstr "No se permite agregar herramientas desde DB para este objeto." -#: FlatCAMApp.py:8025 +#: FlatCAMApp.py:8019 msgid "" "One or more values are changed.\n" "Do you want to save the Preferences?" @@ -809,11 +807,11 @@ msgstr "" "Uno o más valores son cambiados.\n" "¿Quieres guardar las preferencias?" -#: FlatCAMApp.py:8027 flatcamGUI/FlatCAMGUI.py:291 +#: FlatCAMApp.py:8021 flatcamGUI/FlatCAMGUI.py:291 msgid "Save Preferences" msgstr "Guardar Preferencias" -#: FlatCAMApp.py:8051 +#: FlatCAMApp.py:8045 msgid "" "One or more Tools are edited.\n" "Do you want to update the Tools Database?" @@ -821,176 +819,175 @@ msgstr "" "Se editan una o más herramientas.\n" "¿Desea actualizar la base de datos de herramientas?" -#: FlatCAMApp.py:8053 +#: FlatCAMApp.py:8047 msgid "Save Tools Database" msgstr "Guardar base de datos de herramientas" -#: FlatCAMApp.py:8072 FlatCAMApp.py:10259 FlatCAMObj.py:7089 +#: FlatCAMApp.py:8066 FlatCAMApp.py:10254 flatcamObjects/FlatCAMCNCJob.py:562 msgid "Code Editor" msgstr "Editor de código" -#: FlatCAMApp.py:8094 +#: FlatCAMApp.py:8088 msgid "No object selected to Flip on Y axis." msgstr "Ningún objeto seleccionado para Voltear en el eje Y." -#: FlatCAMApp.py:8120 +#: FlatCAMApp.py:8114 msgid "Flip on Y axis done." msgstr "Voltear sobre el eje Y hecho." -#: FlatCAMApp.py:8122 FlatCAMApp.py:8170 +#: FlatCAMApp.py:8116 FlatCAMApp.py:8164 #: flatcamEditors/FlatCAMGrbEditor.py:5893 msgid "Flip action was not executed." msgstr "La acción de voltear no se ejecutó." -#: FlatCAMApp.py:8142 +#: FlatCAMApp.py:8136 msgid "No object selected to Flip on X axis." msgstr "Ningún objeto seleccionado para Voltear en el eje X." -#: FlatCAMApp.py:8168 +#: FlatCAMApp.py:8162 msgid "Flip on X axis done." msgstr "Voltear sobre el eje X hecho." -#: FlatCAMApp.py:8190 +#: FlatCAMApp.py:8184 msgid "No object selected to Rotate." msgstr "Ningún objeto seleccionado para rotar." -#: FlatCAMApp.py:8193 FlatCAMApp.py:8246 FlatCAMApp.py:8285 +#: FlatCAMApp.py:8187 FlatCAMApp.py:8240 FlatCAMApp.py:8279 msgid "Transform" msgstr "Transformar" -#: FlatCAMApp.py:8193 FlatCAMApp.py:8246 FlatCAMApp.py:8285 +#: FlatCAMApp.py:8187 FlatCAMApp.py:8240 FlatCAMApp.py:8279 msgid "Enter the Angle value:" msgstr "Ingrese el valor del ángulo:" -#: FlatCAMApp.py:8224 +#: FlatCAMApp.py:8218 msgid "Rotation done." msgstr "Rotación hecha." -#: FlatCAMApp.py:8226 +#: FlatCAMApp.py:8220 msgid "Rotation movement was not executed." msgstr "El movimiento de rotación no se ejecutó." -#: FlatCAMApp.py:8244 +#: FlatCAMApp.py:8238 msgid "No object selected to Skew/Shear on X axis." msgstr "Ningún objeto seleccionado para sesgar / cortar en el eje X." -#: FlatCAMApp.py:8266 +#: FlatCAMApp.py:8260 msgid "Skew on X axis done." msgstr "Sesgar en el eje X hecho." -#: FlatCAMApp.py:8283 +#: FlatCAMApp.py:8277 msgid "No object selected to Skew/Shear on Y axis." msgstr "Ningún objeto seleccionado para sesgar / cortar en el eje Y." -#: FlatCAMApp.py:8305 +#: FlatCAMApp.py:8299 msgid "Skew on Y axis done." msgstr "Sesgar en el eje Y hecho." -#: FlatCAMApp.py:8458 FlatCAMApp.py:8505 flatcamGUI/FlatCAMGUI.py:488 +#: FlatCAMApp.py:8450 FlatCAMApp.py:8497 flatcamGUI/FlatCAMGUI.py:488 #: flatcamGUI/FlatCAMGUI.py:1713 msgid "Select All" msgstr "Seleccionar todo" -#: FlatCAMApp.py:8462 FlatCAMApp.py:8509 flatcamGUI/FlatCAMGUI.py:490 +#: FlatCAMApp.py:8454 FlatCAMApp.py:8501 flatcamGUI/FlatCAMGUI.py:490 msgid "Deselect All" msgstr "Deseleccionar todo" -#: FlatCAMApp.py:8525 +#: FlatCAMApp.py:8517 msgid "All objects are selected." msgstr "Todos los objetos están seleccionados." -#: FlatCAMApp.py:8535 +#: FlatCAMApp.py:8527 msgid "Objects selection is cleared." msgstr "La selección de objetos se borra." -#: FlatCAMApp.py:8555 flatcamGUI/FlatCAMGUI.py:1706 +#: FlatCAMApp.py:8547 flatcamGUI/FlatCAMGUI.py:1706 msgid "Grid On/Off" msgstr "Grid On/Off" -#: FlatCAMApp.py:8567 flatcamEditors/FlatCAMGeoEditor.py:940 +#: FlatCAMApp.py:8559 flatcamEditors/FlatCAMGeoEditor.py:939 #: flatcamEditors/FlatCAMGrbEditor.py:2580 -#: flatcamEditors/FlatCAMGrbEditor.py:5475 flatcamGUI/ObjectUI.py:1593 -#: flatcamTools/ToolDblSided.py:193 flatcamTools/ToolDblSided.py:426 +#: flatcamEditors/FlatCAMGrbEditor.py:5475 flatcamGUI/ObjectUI.py:1594 +#: flatcamTools/ToolDblSided.py:192 flatcamTools/ToolDblSided.py:425 #: flatcamTools/ToolNCC.py:294 flatcamTools/ToolNCC.py:631 #: flatcamTools/ToolPaint.py:277 flatcamTools/ToolPaint.py:676 -#: flatcamTools/ToolSolderPaste.py:123 flatcamTools/ToolSolderPaste.py:597 -#: flatcamTools/ToolTransform.py:479 +#: flatcamTools/ToolSolderPaste.py:122 flatcamTools/ToolSolderPaste.py:597 +#: flatcamTools/ToolTransform.py:478 msgid "Add" msgstr "Añadir" -#: FlatCAMApp.py:8569 FlatCAMObj.py:4416 -#: flatcamEditors/FlatCAMGrbEditor.py:2585 +#: FlatCAMApp.py:8561 flatcamEditors/FlatCAMGrbEditor.py:2585 #: flatcamEditors/FlatCAMGrbEditor.py:2733 flatcamGUI/FlatCAMGUI.py:736 #: flatcamGUI/FlatCAMGUI.py:1059 flatcamGUI/FlatCAMGUI.py:2126 #: flatcamGUI/FlatCAMGUI.py:2269 flatcamGUI/FlatCAMGUI.py:2733 -#: flatcamGUI/ObjectUI.py:1621 flatcamTools/ToolNCC.py:316 -#: flatcamTools/ToolNCC.py:637 flatcamTools/ToolPaint.py:299 -#: flatcamTools/ToolPaint.py:682 flatcamTools/ToolSolderPaste.py:129 -#: flatcamTools/ToolSolderPaste.py:600 +#: flatcamGUI/ObjectUI.py:1622 flatcamObjects/FlatCAMGeometry.py:480 +#: flatcamTools/ToolNCC.py:316 flatcamTools/ToolNCC.py:637 +#: flatcamTools/ToolPaint.py:299 flatcamTools/ToolPaint.py:682 +#: flatcamTools/ToolSolderPaste.py:128 flatcamTools/ToolSolderPaste.py:600 msgid "Delete" msgstr "Borrar" -#: FlatCAMApp.py:8582 +#: FlatCAMApp.py:8577 msgid "New Grid ..." msgstr "Nueva rejilla ..." -#: FlatCAMApp.py:8583 +#: FlatCAMApp.py:8578 msgid "Enter a Grid Value:" msgstr "Introduzca un valor de cuadrícula:" -#: FlatCAMApp.py:8591 FlatCAMApp.py:8618 +#: FlatCAMApp.py:8586 FlatCAMApp.py:8613 msgid "Please enter a grid value with non-zero value, in Float format." msgstr "" "Introduzca un valor de cuadrícula con un valor distinto de cero, en formato " "Float." -#: FlatCAMApp.py:8597 +#: FlatCAMApp.py:8592 msgid "New Grid added" msgstr "Nueva rejilla" -#: FlatCAMApp.py:8600 +#: FlatCAMApp.py:8595 msgid "Grid already exists" msgstr "La rejilla ya existe" -#: FlatCAMApp.py:8603 +#: FlatCAMApp.py:8598 msgid "Adding New Grid cancelled" msgstr "Agregar nueva cuadrícula cancelado" -#: FlatCAMApp.py:8625 +#: FlatCAMApp.py:8620 msgid " Grid Value does not exist" msgstr " El valor de cuadrícula no existe" -#: FlatCAMApp.py:8628 +#: FlatCAMApp.py:8623 msgid "Grid Value deleted" msgstr "Valor de cuadrícula eliminado" -#: FlatCAMApp.py:8631 +#: FlatCAMApp.py:8626 msgid "Delete Grid value cancelled" msgstr "Eliminar el valor de cuadrícula cancelado" -#: FlatCAMApp.py:8637 +#: FlatCAMApp.py:8632 msgid "Key Shortcut List" msgstr "Lista de atajos de teclas" -#: FlatCAMApp.py:8671 +#: FlatCAMApp.py:8666 msgid " No object selected to copy it's name" msgstr " Ningún objeto seleccionado para copiar su nombre" -#: FlatCAMApp.py:8675 +#: FlatCAMApp.py:8670 msgid "Name copied on clipboard ..." msgstr "Nombre copiado en el portapapeles ..." -#: FlatCAMApp.py:8888 flatcamEditors/FlatCAMGrbEditor.py:4421 +#: FlatCAMApp.py:8883 flatcamEditors/FlatCAMGrbEditor.py:4421 msgid "Coordinates copied to clipboard." msgstr "Coordenadas copiadas al portapapeles." -#: FlatCAMApp.py:9127 FlatCAMApp.py:9133 FlatCAMApp.py:9139 FlatCAMApp.py:9145 -#: ObjectCollection.py:911 ObjectCollection.py:917 ObjectCollection.py:923 -#: ObjectCollection.py:929 ObjectCollection.py:935 ObjectCollection.py:941 +#: FlatCAMApp.py:9122 FlatCAMApp.py:9128 FlatCAMApp.py:9134 FlatCAMApp.py:9140 +#: ObjectCollection.py:923 ObjectCollection.py:929 ObjectCollection.py:935 +#: ObjectCollection.py:941 ObjectCollection.py:947 ObjectCollection.py:953 msgid "selected" msgstr "seleccionado" -#: FlatCAMApp.py:9300 +#: FlatCAMApp.py:9295 msgid "" "There are files/objects opened in FlatCAM.\n" "Creating a New project will delete them.\n" @@ -1000,17 +997,17 @@ msgstr "" "Crear un nuevo proyecto los borrará.\n" "¿Quieres guardar el proyecto?" -#: FlatCAMApp.py:9321 +#: FlatCAMApp.py:9316 msgid "New Project created" msgstr "Nuevo proyecto creado" -#: FlatCAMApp.py:9468 FlatCAMApp.py:9472 flatcamGUI/FlatCAMGUI.py:821 +#: FlatCAMApp.py:9464 FlatCAMApp.py:9468 flatcamGUI/FlatCAMGUI.py:821 #: flatcamGUI/FlatCAMGUI.py:2504 msgid "Open Gerber" msgstr "Abrir gerber" -#: FlatCAMApp.py:9477 FlatCAMApp.py:9514 FlatCAMApp.py:9556 FlatCAMApp.py:9625 -#: FlatCAMApp.py:10378 FlatCAMApp.py:11553 FlatCAMApp.py:11614 +#: FlatCAMApp.py:9473 FlatCAMApp.py:9510 FlatCAMApp.py:9552 FlatCAMApp.py:9622 +#: FlatCAMApp.py:10373 FlatCAMApp.py:11545 FlatCAMApp.py:11606 msgid "" "Canvas initialization started.\n" "Canvas initialization finished in" @@ -1018,257 +1015,258 @@ msgstr "" "Se inició la inicialización del lienzo.\n" "La inicialización del lienzo terminó en" -#: FlatCAMApp.py:9479 +#: FlatCAMApp.py:9475 msgid "Opening Gerber file." msgstr "Abriendo el archivo Gerber." -#: FlatCAMApp.py:9506 FlatCAMApp.py:9510 flatcamGUI/FlatCAMGUI.py:823 +#: FlatCAMApp.py:9502 FlatCAMApp.py:9506 flatcamGUI/FlatCAMGUI.py:823 #: flatcamGUI/FlatCAMGUI.py:2506 msgid "Open Excellon" msgstr "Abierto Excellon" -#: FlatCAMApp.py:9516 +#: FlatCAMApp.py:9512 msgid "Opening Excellon file." msgstr "Abriendo el archivo Excellon." -#: FlatCAMApp.py:9547 FlatCAMApp.py:9551 +#: FlatCAMApp.py:9543 FlatCAMApp.py:9547 msgid "Open G-Code" msgstr "Código G abierto" -#: FlatCAMApp.py:9558 +#: FlatCAMApp.py:9554 msgid "Opening G-Code file." msgstr "Abriendo el archivo G-code." -#: FlatCAMApp.py:9581 FlatCAMApp.py:9584 flatcamGUI/FlatCAMGUI.py:1715 +#: FlatCAMApp.py:9577 FlatCAMApp.py:9580 flatcamGUI/FlatCAMGUI.py:1715 msgid "Open Project" msgstr "Proyecto abierto" -#: FlatCAMApp.py:9616 FlatCAMApp.py:9620 +#: FlatCAMApp.py:9613 FlatCAMApp.py:9617 msgid "Open HPGL2" msgstr "Abra HPGL2" -#: FlatCAMApp.py:9627 +#: FlatCAMApp.py:9624 msgid "Opening HPGL2 file." msgstr "Abrir el archivo HPGL2." -#: FlatCAMApp.py:9650 FlatCAMApp.py:9653 +#: FlatCAMApp.py:9647 FlatCAMApp.py:9650 msgid "Open Configuration File" msgstr "Abrir archivo de configuración" -#: FlatCAMApp.py:9673 FlatCAMApp.py:10022 +#: FlatCAMApp.py:9670 FlatCAMApp.py:10017 msgid "Please Select a Geometry object to export" msgstr "Seleccione un objeto de geometría para exportar" -#: FlatCAMApp.py:9687 +#: FlatCAMApp.py:9684 msgid "Only Geometry, Gerber and CNCJob objects can be used." msgstr "Solo se pueden utilizar objetos Geometry, Gerber y CNCJob." -#: FlatCAMApp.py:9700 FlatCAMApp.py:9704 flatcamTools/ToolQRCode.py:829 +#: FlatCAMApp.py:9697 FlatCAMApp.py:9701 flatcamTools/ToolQRCode.py:829 #: flatcamTools/ToolQRCode.py:833 msgid "Export SVG" msgstr "Exportar SVG" -#: FlatCAMApp.py:9730 +#: FlatCAMApp.py:9726 msgid "Data must be a 3D array with last dimension 3 or 4" msgstr "Los datos deben ser una matriz 3D con la última dimensión 3 o 4" -#: FlatCAMApp.py:9736 FlatCAMApp.py:9740 +#: FlatCAMApp.py:9732 FlatCAMApp.py:9736 msgid "Export PNG Image" msgstr "Exportar imagen PNG" -#: FlatCAMApp.py:9774 FlatCAMApp.py:9982 +#: FlatCAMApp.py:9769 FlatCAMApp.py:9977 msgid "Failed. Only Gerber objects can be saved as Gerber files..." msgstr "" "Ha fallado. Solo los objetos Gerber se pueden guardar como archivos " "Gerber ..." -#: FlatCAMApp.py:9786 +#: FlatCAMApp.py:9781 msgid "Save Gerber source file" msgstr "Guardar el archivo fuente de Gerber" -#: FlatCAMApp.py:9815 +#: FlatCAMApp.py:9810 msgid "Failed. Only Script objects can be saved as TCL Script files..." msgstr "" "Ha fallado. Solo los objetos Script se pueden guardar como archivos TCL " "Script ..." -#: FlatCAMApp.py:9827 +#: FlatCAMApp.py:9822 msgid "Save Script source file" msgstr "Guardar archivo fuente de script" -#: FlatCAMApp.py:9856 +#: FlatCAMApp.py:9851 msgid "Failed. Only Document objects can be saved as Document files..." msgstr "" "Ha fallado. Solo los objetos de documento se pueden guardar como archivos de " "documento ..." -#: FlatCAMApp.py:9868 +#: FlatCAMApp.py:9863 msgid "Save Document source file" msgstr "Guardar archivo fuente del Documento" -#: FlatCAMApp.py:9897 FlatCAMApp.py:9938 FlatCAMApp.py:10863 +#: FlatCAMApp.py:9892 FlatCAMApp.py:9933 FlatCAMApp.py:10856 msgid "Failed. Only Excellon objects can be saved as Excellon files..." msgstr "" "Ha fallado. Solo los objetos Excellon se pueden guardar como archivos " "Excellon ..." -#: FlatCAMApp.py:9905 FlatCAMApp.py:9909 +#: FlatCAMApp.py:9900 FlatCAMApp.py:9904 msgid "Save Excellon source file" msgstr "Guardar el archivo fuente de Excellon" -#: FlatCAMApp.py:9946 FlatCAMApp.py:9950 +#: FlatCAMApp.py:9941 FlatCAMApp.py:9945 msgid "Export Excellon" msgstr "Exportar Excellon" -#: FlatCAMApp.py:9990 FlatCAMApp.py:9994 +#: FlatCAMApp.py:9985 FlatCAMApp.py:9989 msgid "Export Gerber" msgstr "Gerber Exportación" -#: FlatCAMApp.py:10032 +#: FlatCAMApp.py:10027 msgid "Only Geometry objects can be used." msgstr "Solo se pueden utilizar objetos de Geometría." -#: FlatCAMApp.py:10046 FlatCAMApp.py:10050 +#: FlatCAMApp.py:10041 FlatCAMApp.py:10045 msgid "Export DXF" msgstr "Exportar DXF" -#: FlatCAMApp.py:10075 FlatCAMApp.py:10078 +#: FlatCAMApp.py:10070 FlatCAMApp.py:10073 msgid "Import SVG" msgstr "Importar SVG" -#: FlatCAMApp.py:10106 FlatCAMApp.py:10110 +#: FlatCAMApp.py:10101 FlatCAMApp.py:10105 msgid "Import DXF" msgstr "Importar DXF" -#: FlatCAMApp.py:10161 +#: FlatCAMApp.py:10156 msgid "Viewing the source code of the selected object." msgstr "Ver el código fuente del objeto seleccionado." -#: FlatCAMApp.py:10162 FlatCAMObj.py:7075 FlatCAMObj.py:7852 +#: FlatCAMApp.py:10157 flatcamObjects/FlatCAMCNCJob.py:548 +#: flatcamObjects/FlatCAMScript.py:133 msgid "Loading..." msgstr "Cargando..." -#: FlatCAMApp.py:10168 FlatCAMApp.py:10172 +#: FlatCAMApp.py:10163 FlatCAMApp.py:10167 msgid "Select an Gerber or Excellon file to view it's source file." msgstr "Seleccione un archivo Gerber o Excellon para ver su archivo fuente." -#: FlatCAMApp.py:10186 +#: FlatCAMApp.py:10181 msgid "Source Editor" msgstr "Editor de fuente" -#: FlatCAMApp.py:10226 FlatCAMApp.py:10233 +#: FlatCAMApp.py:10221 FlatCAMApp.py:10228 msgid "There is no selected object for which to see it's source file code." msgstr "No hay ningún objeto seleccionado para el cual ver su código fuente." -#: FlatCAMApp.py:10245 +#: FlatCAMApp.py:10240 msgid "Failed to load the source code for the selected object" msgstr "Error al cargar el código fuente para el objeto seleccionado" -#: FlatCAMApp.py:10281 +#: FlatCAMApp.py:10276 msgid "Go to Line ..." msgstr "Ir a la línea ..." -#: FlatCAMApp.py:10282 +#: FlatCAMApp.py:10277 msgid "Line:" msgstr "Línea:" -#: FlatCAMApp.py:10311 +#: FlatCAMApp.py:10306 msgid "New TCL script file created in Code Editor." msgstr "Nuevo archivo de script TCL creado en Code Editor." -#: FlatCAMApp.py:10350 FlatCAMApp.py:10352 +#: FlatCAMApp.py:10345 FlatCAMApp.py:10347 msgid "Open TCL script" msgstr "Abrir script TCL" -#: FlatCAMApp.py:10380 -msgid "Executing FlatCAMScript file." -msgstr "Ejecutando archivo FlatCAMScript." +#: FlatCAMApp.py:10375 +msgid "Executing ScriptObject file." +msgstr "Ejecutando archivo ScriptObject." -#: FlatCAMApp.py:10388 FlatCAMApp.py:10391 +#: FlatCAMApp.py:10383 FlatCAMApp.py:10386 msgid "Run TCL script" msgstr "Ejecutar script TCL" -#: FlatCAMApp.py:10415 +#: FlatCAMApp.py:10409 msgid "TCL script file opened in Code Editor and executed." msgstr "El archivo de script TCL se abrió en el Editor de código y se ejecutó." -#: FlatCAMApp.py:10466 FlatCAMApp.py:10472 +#: FlatCAMApp.py:10460 FlatCAMApp.py:10466 msgid "Save Project As ..." msgstr "Guardar proyecto como ..." -#: FlatCAMApp.py:10468 flatcamGUI/FlatCAMGUI.py:1119 +#: FlatCAMApp.py:10462 flatcamGUI/FlatCAMGUI.py:1119 #: flatcamGUI/FlatCAMGUI.py:2161 msgid "Project" msgstr "Proyecto" -#: FlatCAMApp.py:10507 +#: FlatCAMApp.py:10501 msgid "FlatCAM objects print" msgstr "Impresión de objetos FlatCAM" -#: FlatCAMApp.py:10520 FlatCAMApp.py:10527 +#: FlatCAMApp.py:10514 FlatCAMApp.py:10521 msgid "Save Object as PDF ..." msgstr "Guardar objeto como PDF ..." -#: FlatCAMApp.py:10536 +#: FlatCAMApp.py:10530 msgid "Printing PDF ... Please wait." msgstr "Imprimiendo PDF ... Por favor espere." -#: FlatCAMApp.py:10715 +#: FlatCAMApp.py:10709 msgid "PDF file saved to" msgstr "Archivo PDF guardado en" -#: FlatCAMApp.py:10740 +#: FlatCAMApp.py:10734 msgid "Exporting SVG" msgstr "Exportando SVG" -#: FlatCAMApp.py:10783 +#: FlatCAMApp.py:10777 msgid "SVG file exported to" msgstr "Archivo SVG exportado a" -#: FlatCAMApp.py:10809 +#: FlatCAMApp.py:10803 msgid "" "Save cancelled because source file is empty. Try to export the Gerber file." msgstr "" "Guardar cancelado porque el archivo fuente está vacío. Intenta exportar el " "archivo Gerber." -#: FlatCAMApp.py:10957 +#: FlatCAMApp.py:10950 msgid "Excellon file exported to" msgstr "Archivo Excellon exportado a" -#: FlatCAMApp.py:10966 +#: FlatCAMApp.py:10959 msgid "Exporting Excellon" msgstr "Exportando excellon" -#: FlatCAMApp.py:10971 FlatCAMApp.py:10978 +#: FlatCAMApp.py:10964 FlatCAMApp.py:10971 msgid "Could not export Excellon file." msgstr "No se pudo exportar el archivo Excellon." -#: FlatCAMApp.py:11094 +#: FlatCAMApp.py:11086 msgid "Gerber file exported to" msgstr "Archivo Gerber exportado a" -#: FlatCAMApp.py:11102 +#: FlatCAMApp.py:11094 msgid "Exporting Gerber" msgstr "Gerber exportador" -#: FlatCAMApp.py:11107 FlatCAMApp.py:11114 +#: FlatCAMApp.py:11099 FlatCAMApp.py:11106 msgid "Could not export Gerber file." msgstr "No se pudo exportar el archivo Gerber." -#: FlatCAMApp.py:11149 +#: FlatCAMApp.py:11141 msgid "DXF file exported to" msgstr "Archivo DXF exportado a" -#: FlatCAMApp.py:11155 +#: FlatCAMApp.py:11147 msgid "Exporting DXF" msgstr "Exportando DXF" -#: FlatCAMApp.py:11160 FlatCAMApp.py:11167 +#: FlatCAMApp.py:11152 FlatCAMApp.py:11159 msgid "Could not export DXF file." msgstr "No se pudo exportar el archivo DXF." -#: FlatCAMApp.py:11190 FlatCAMApp.py:11232 flatcamTools/ToolImage.py:277 +#: FlatCAMApp.py:11182 FlatCAMApp.py:11224 flatcamTools/ToolImage.py:277 msgid "" "Not supported type is picked as parameter. Only Geometry and Gerber are " "supported" @@ -1276,83 +1274,83 @@ msgstr "" "El tipo no soportado se elige como parámetro. Solo Geometría y Gerber son " "compatibles" -#: FlatCAMApp.py:11200 +#: FlatCAMApp.py:11192 msgid "Importing SVG" msgstr "Importando SVG" -#: FlatCAMApp.py:11211 FlatCAMApp.py:11251 FlatCAMApp.py:11309 -#: FlatCAMApp.py:11374 FlatCAMApp.py:11438 FlatCAMApp.py:11503 -#: FlatCAMApp.py:11540 flatcamTools/ToolImage.py:297 +#: FlatCAMApp.py:11203 FlatCAMApp.py:11243 FlatCAMApp.py:11301 +#: FlatCAMApp.py:11366 FlatCAMApp.py:11430 FlatCAMApp.py:11495 +#: FlatCAMApp.py:11532 flatcamTools/ToolImage.py:297 #: flatcamTools/ToolPDF.py:225 msgid "Opened" msgstr "Abierto" -#: FlatCAMApp.py:11241 +#: FlatCAMApp.py:11233 msgid "Importing DXF" msgstr "Importando DXF" -#: FlatCAMApp.py:11275 FlatCAMApp.py:11462 +#: FlatCAMApp.py:11267 FlatCAMApp.py:11454 msgid "Failed to open file" msgstr "Fallo al abrir el archivo" -#: FlatCAMApp.py:11278 FlatCAMApp.py:11465 +#: FlatCAMApp.py:11270 FlatCAMApp.py:11457 msgid "Failed to parse file" msgstr "Error al analizar el archivo" -#: FlatCAMApp.py:11290 +#: FlatCAMApp.py:11282 msgid "Object is not Gerber file or empty. Aborting object creation." msgstr "" "El objeto no es un archivo Gerber o está vacío. Anulando la creación de " "objetos." -#: FlatCAMApp.py:11295 +#: FlatCAMApp.py:11287 msgid "Opening Gerber" msgstr "Apertura de gerber" -#: FlatCAMApp.py:11302 +#: FlatCAMApp.py:11294 msgid " Open Gerber failed. Probable not a Gerber file." msgstr " Gerber abierto fracasó. Probablemente no sea un archivo de Gerber." -#: FlatCAMApp.py:11333 flatcamTools/ToolPcbWizard.py:425 +#: FlatCAMApp.py:11325 flatcamTools/ToolPcbWizard.py:425 msgid "This is not Excellon file." msgstr "Este no es un archivo de Excellon." -#: FlatCAMApp.py:11337 +#: FlatCAMApp.py:11329 msgid "Cannot open file" msgstr "No se puede abrir el archivo" -#: FlatCAMApp.py:11356 flatcamTools/ToolPDF.py:275 +#: FlatCAMApp.py:11348 flatcamTools/ToolPDF.py:275 #: flatcamTools/ToolPcbWizard.py:447 msgid "No geometry found in file" msgstr "No se encontró geometría en el archivo" -#: FlatCAMApp.py:11359 +#: FlatCAMApp.py:11351 msgid "Opening Excellon." msgstr "Apertura Excellon." -#: FlatCAMApp.py:11366 +#: FlatCAMApp.py:11358 msgid "Open Excellon file failed. Probable not an Excellon file." msgstr "" "Error al abrir el archivo Excellon. Probablemente no sea un archivo de " "Excellon." -#: FlatCAMApp.py:11398 +#: FlatCAMApp.py:11390 msgid "Reading GCode file" msgstr "Lectura de archivo GCode" -#: FlatCAMApp.py:11405 +#: FlatCAMApp.py:11397 msgid "Failed to open" msgstr "Falló al abrir" -#: FlatCAMApp.py:11413 +#: FlatCAMApp.py:11405 msgid "This is not GCODE" msgstr "Esto no es GCODE" -#: FlatCAMApp.py:11418 +#: FlatCAMApp.py:11410 msgid "Opening G-Code." msgstr "Apertura del código G." -#: FlatCAMApp.py:11427 +#: FlatCAMApp.py:11419 msgid "" "Failed to create CNCJob Object. Probable not a GCode file. Try to load it " "from File menu.\n" @@ -1364,105 +1362,105 @@ msgstr "" "Intento de crear un objeto FlatCAM CNCJob desde el archivo G-Code falló " "durante el procesamiento" -#: FlatCAMApp.py:11484 +#: FlatCAMApp.py:11476 msgid "Object is not HPGL2 file or empty. Aborting object creation." msgstr "" "El objeto no es un archivo HPGL2 o está vacío. Anulando la creación de " "objetos." -#: FlatCAMApp.py:11489 +#: FlatCAMApp.py:11481 msgid "Opening HPGL2" msgstr "Apertura de HPGL2" -#: FlatCAMApp.py:11496 +#: FlatCAMApp.py:11488 msgid " Open HPGL2 failed. Probable not a HPGL2 file." msgstr " Abrir HPGL2 falló. Probablemente no sea un archivo HPGL2." -#: FlatCAMApp.py:11516 +#: FlatCAMApp.py:11508 msgid "Opening TCL Script..." msgstr "Abriendo TCL Script ..." -#: FlatCAMApp.py:11524 +#: FlatCAMApp.py:11516 msgid "TCL script file opened in Code Editor." msgstr "Archivo de script TCL abierto en Code Editor." -#: FlatCAMApp.py:11527 +#: FlatCAMApp.py:11519 msgid "Failed to open TCL Script." msgstr "Error al abrir la secuencia de comandos TCL." -#: FlatCAMApp.py:11555 +#: FlatCAMApp.py:11547 msgid "Opening FlatCAM Config file." msgstr "Abrir el archivo de configuración de FlatCAM." -#: FlatCAMApp.py:11583 +#: FlatCAMApp.py:11575 msgid "Failed to open config file" msgstr "Error al abrir el archivo de configuración" -#: FlatCAMApp.py:11611 +#: FlatCAMApp.py:11603 msgid "Loading Project ... Please Wait ..." msgstr "Cargando proyecto ... Espere ..." -#: FlatCAMApp.py:11616 +#: FlatCAMApp.py:11608 msgid "Opening FlatCAM Project file." msgstr "Apertura del archivo del proyecto FlatCAM." -#: FlatCAMApp.py:11626 FlatCAMApp.py:11644 +#: FlatCAMApp.py:11618 FlatCAMApp.py:11636 msgid "Failed to open project file" msgstr "Error al abrir el archivo del proyecto" -#: FlatCAMApp.py:11681 +#: FlatCAMApp.py:11673 msgid "Loading Project ... restoring" msgstr "Cargando Proyecto ... restaurando" -#: FlatCAMApp.py:11691 +#: FlatCAMApp.py:11683 msgid "Project loaded from" msgstr "Proyecto cargado desde" -#: FlatCAMApp.py:11760 +#: FlatCAMApp.py:11752 msgid "Redrawing all objects" msgstr "Redibujando todos los objetos" -#: FlatCAMApp.py:11849 +#: FlatCAMApp.py:11840 msgid "Failed to load recent item list." msgstr "Error al cargar la lista de elementos recientes." -#: FlatCAMApp.py:11856 +#: FlatCAMApp.py:11847 msgid "Failed to parse recent item list." msgstr "Error al analizar la lista de elementos recientes." -#: FlatCAMApp.py:11866 +#: FlatCAMApp.py:11857 msgid "Failed to load recent projects item list." msgstr "Error al cargar la lista de elementos de proyectos recientes." -#: FlatCAMApp.py:11873 +#: FlatCAMApp.py:11864 msgid "Failed to parse recent project item list." msgstr "Error al analizar la lista de elementos del proyecto reciente." -#: FlatCAMApp.py:11934 +#: FlatCAMApp.py:11925 msgid "Clear Recent projects" msgstr "Borrar proyectos recientes" -#: FlatCAMApp.py:11958 +#: FlatCAMApp.py:11949 msgid "Clear Recent files" msgstr "Borrar archivos recientes" -#: FlatCAMApp.py:11980 flatcamGUI/FlatCAMGUI.py:1348 +#: FlatCAMApp.py:11971 flatcamGUI/FlatCAMGUI.py:1348 msgid "Shortcut Key List" msgstr " Lista de teclas de acceso directo " -#: FlatCAMApp.py:12054 +#: FlatCAMApp.py:12051 msgid "Selected Tab - Choose an Item from Project Tab" msgstr "Pestaña Seleccionada: elija un elemento de la pestaña Proyecto" -#: FlatCAMApp.py:12055 +#: FlatCAMApp.py:12052 msgid "Details" msgstr "Detalles" -#: FlatCAMApp.py:12057 +#: FlatCAMApp.py:12054 msgid "The normal flow when working in FlatCAM is the following:" msgstr "El flujo normal cuando se trabaja en FlatCAM es el siguiente:" -#: FlatCAMApp.py:12058 +#: FlatCAMApp.py:12055 msgid "" "Load/Import a Gerber, Excellon, Gcode, DXF, Raster Image or SVG file into " "FlatCAM using either the toolbars, key shortcuts or even dragging and " @@ -1472,7 +1470,7 @@ msgstr "" "en FlatCAM usando las barras de herramientas, atajos de teclado o incluso " "arrastrando y soltando los archivos en la GUI." -#: FlatCAMApp.py:12061 +#: FlatCAMApp.py:12058 msgid "" "You can also load a FlatCAM project by double clicking on the project file, " "drag and drop of the file into the FLATCAM GUI or through the menu (or " @@ -1483,7 +1481,7 @@ msgstr "" "mediante las acciones del menú (o barra de herramientas) que se ofrecen " "dentro de la aplicación." -#: FlatCAMApp.py:12064 +#: FlatCAMApp.py:12061 msgid "" "Once an object is available in the Project Tab, by selecting it and then " "focusing on SELECTED TAB (more simpler is to double click the object name in " @@ -1496,7 +1494,7 @@ msgstr "" "SELECCIONADA se actualizará con las propiedades del objeto según su tipo: " "Gerber, Objeto Excellon, Geometry o CNCJob." -#: FlatCAMApp.py:12068 +#: FlatCAMApp.py:12065 msgid "" "If the selection of the object is done on the canvas by single click " "instead, and the SELECTED TAB is in focus, again the object properties will " @@ -1510,7 +1508,7 @@ msgstr "" "el objeto en el lienzo traerá la PESTAÑA SELECCIONADA y la completará " "incluso si estaba fuera de foco." -#: FlatCAMApp.py:12072 +#: FlatCAMApp.py:12069 msgid "" "You can change the parameters in this screen and the flow direction is like " "this:" @@ -1518,7 +1516,7 @@ msgstr "" "Puede cambiar los parámetros en esta pantalla y la dirección del flujo es " "así:" -#: FlatCAMApp.py:12073 +#: FlatCAMApp.py:12070 msgid "" "Gerber/Excellon Object --> Change Parameter --> Generate Geometry --> " "Geometry Object --> Add tools (change param in Selected Tab) --> Generate " @@ -1531,7 +1529,7 @@ msgstr "" "(mediante Edit CNC Código) y / o anexar / anteponer a GCode (nuevamente, " "hecho en la PESTAÑA SELECCIONADA) -> Guardar GCode." -#: FlatCAMApp.py:12077 +#: FlatCAMApp.py:12074 msgid "" "A list of key shortcuts is available through an menu entry in Help --> " "Shortcuts List or through its own key shortcut: F3." @@ -1540,31 +1538,31 @@ msgstr "" "menú en Ayuda -> Lista de atajos o mediante su propio atajo de teclado: " "F3 ." -#: FlatCAMApp.py:12141 +#: FlatCAMApp.py:12138 msgid "Failed checking for latest version. Could not connect." msgstr "Falló la comprobación de la última versión. No pudo conectar." -#: FlatCAMApp.py:12148 +#: FlatCAMApp.py:12145 msgid "Could not parse information about latest version." msgstr "No se pudo analizar la información sobre la última versión." -#: FlatCAMApp.py:12158 +#: FlatCAMApp.py:12155 msgid "FlatCAM is up to date!" msgstr "FlatCAM está al día!" -#: FlatCAMApp.py:12163 +#: FlatCAMApp.py:12160 msgid "Newer Version Available" msgstr "Nueva versión disponible" -#: FlatCAMApp.py:12165 +#: FlatCAMApp.py:12162 msgid "There is a newer version of FlatCAM available for download:" msgstr "Hay una versión más nueva de FlatCAM disponible para descargar:" -#: FlatCAMApp.py:12169 +#: FlatCAMApp.py:12166 msgid "info" msgstr "info" -#: FlatCAMApp.py:12197 +#: FlatCAMApp.py:12194 msgid "" "OpenGL canvas initialization failed. HW or HW configuration not supported." "Change the graphic engine to Legacy(2D) in Edit -> Preferences -> General " @@ -1576,131 +1574,127 @@ msgstr "" "pestaña General.\n" "\n" -#: FlatCAMApp.py:12276 +#: FlatCAMApp.py:12273 msgid "All plots disabled." msgstr "Todas las parcelas con discapacidad." -#: FlatCAMApp.py:12283 +#: FlatCAMApp.py:12280 msgid "All non selected plots disabled." msgstr "Todas las parcelas no seleccionadas deshabilitadas." -#: FlatCAMApp.py:12290 +#: FlatCAMApp.py:12287 msgid "All plots enabled." msgstr "Todas las parcelas habilitadas." -#: FlatCAMApp.py:12296 +#: FlatCAMApp.py:12293 msgid "Selected plots enabled..." msgstr "Parcelas seleccionadas habilitadas ..." -#: FlatCAMApp.py:12304 +#: FlatCAMApp.py:12301 msgid "Selected plots disabled..." msgstr "Parcelas seleccionadas deshabilitadas ..." -#: FlatCAMApp.py:12337 +#: FlatCAMApp.py:12334 msgid "Enabling plots ..." msgstr "Habilitación de parcelas ..." -#: FlatCAMApp.py:12389 +#: FlatCAMApp.py:12386 msgid "Disabling plots ..." msgstr "Inhabilitando parcelas ..." -#: FlatCAMApp.py:12412 +#: FlatCAMApp.py:12409 msgid "Working ..." msgstr "Trabajando ..." -#: FlatCAMApp.py:12467 flatcamGUI/FlatCAMGUI.py:688 +#: FlatCAMApp.py:12464 flatcamGUI/FlatCAMGUI.py:688 msgid "Red" msgstr "Rojo" -#: FlatCAMApp.py:12469 flatcamGUI/FlatCAMGUI.py:691 +#: FlatCAMApp.py:12466 flatcamGUI/FlatCAMGUI.py:691 msgid "Blue" msgstr "Azul" -#: FlatCAMApp.py:12472 flatcamGUI/FlatCAMGUI.py:694 +#: FlatCAMApp.py:12469 flatcamGUI/FlatCAMGUI.py:694 msgid "Yellow" msgstr "Amarillo" -#: FlatCAMApp.py:12474 flatcamGUI/FlatCAMGUI.py:697 +#: FlatCAMApp.py:12471 flatcamGUI/FlatCAMGUI.py:697 msgid "Green" msgstr "Verde" -#: FlatCAMApp.py:12476 flatcamGUI/FlatCAMGUI.py:700 +#: FlatCAMApp.py:12473 flatcamGUI/FlatCAMGUI.py:700 msgid "Purple" msgstr "Púrpura" -#: FlatCAMApp.py:12478 flatcamGUI/FlatCAMGUI.py:703 +#: FlatCAMApp.py:12475 flatcamGUI/FlatCAMGUI.py:703 msgid "Brown" msgstr "Marrón" -#: FlatCAMApp.py:12480 FlatCAMApp.py:12536 flatcamGUI/FlatCAMGUI.py:706 +#: FlatCAMApp.py:12477 FlatCAMApp.py:12533 flatcamGUI/FlatCAMGUI.py:706 msgid "White" msgstr "Blanca" -#: FlatCAMApp.py:12482 flatcamGUI/FlatCAMGUI.py:709 +#: FlatCAMApp.py:12479 flatcamGUI/FlatCAMGUI.py:709 msgid "Black" msgstr "Negra" -#: FlatCAMApp.py:12485 flatcamGUI/FlatCAMGUI.py:714 +#: FlatCAMApp.py:12482 flatcamGUI/FlatCAMGUI.py:714 msgid "Custom" msgstr "Personalizado" -#: FlatCAMApp.py:12495 flatcamGUI/FlatCAMGUI.py:722 +#: FlatCAMApp.py:12492 flatcamGUI/FlatCAMGUI.py:722 msgid "Default" msgstr "Predeterminado" -#: FlatCAMApp.py:12519 flatcamGUI/FlatCAMGUI.py:719 +#: FlatCAMApp.py:12516 flatcamGUI/FlatCAMGUI.py:719 msgid "Opacity" msgstr "Opacidad" -#: FlatCAMApp.py:12521 +#: FlatCAMApp.py:12518 msgid "Set alpha level ..." msgstr "Establecer nivel alfa ..." -#: FlatCAMApp.py:12521 flatcamGUI/PreferencesUI.py:6900 +#: FlatCAMApp.py:12518 flatcamGUI/PreferencesUI.py:6900 #: flatcamGUI/PreferencesUI.py:8230 flatcamGUI/PreferencesUI.py:8444 #: flatcamTools/ToolExtractDrills.py:164 flatcamTools/ToolExtractDrills.py:285 #: flatcamTools/ToolPunchGerber.py:192 flatcamTools/ToolPunchGerber.py:308 -#: flatcamTools/ToolTransform.py:358 +#: flatcamTools/ToolTransform.py:357 msgid "Value" msgstr "Valor" -#: FlatCAMApp.py:12597 +#: FlatCAMApp.py:12594 msgid "Saving FlatCAM Project" msgstr "Proyecto FlatCAM de ahorro" -#: FlatCAMApp.py:12618 FlatCAMApp.py:12654 +#: FlatCAMApp.py:12615 FlatCAMApp.py:12651 msgid "Project saved to" msgstr "Proyecto guardado en" -#: FlatCAMApp.py:12625 +#: FlatCAMApp.py:12622 msgid "The object is used by another application." msgstr "El objeto es utilizado por otra aplicación." -#: FlatCAMApp.py:12639 +#: FlatCAMApp.py:12636 msgid "Failed to verify project file" msgstr "Error al abrir el archivo de proyecto" -#: FlatCAMApp.py:12639 FlatCAMApp.py:12647 FlatCAMApp.py:12657 +#: FlatCAMApp.py:12636 FlatCAMApp.py:12644 FlatCAMApp.py:12654 msgid "Retry to save it." msgstr "Vuelva a intentar guardarlo." -#: FlatCAMApp.py:12647 FlatCAMApp.py:12657 +#: FlatCAMApp.py:12644 FlatCAMApp.py:12654 msgid "Failed to parse saved project file" msgstr "Error al analizar el archivo por defecto" -#: FlatCAMApp.py:13139 -msgid "The user requested a graceful exit of the current task." -msgstr "El usuario solicitó una salida elegante de la tarea actual." - -#: FlatCAMCommon.py:137 FlatCAMCommon.py:164 +#: FlatCAMBookmark.py:57 FlatCAMBookmark.py:84 msgid "Title" msgstr "Título" -#: FlatCAMCommon.py:138 FlatCAMCommon.py:168 +#: FlatCAMBookmark.py:58 FlatCAMBookmark.py:88 msgid "Web Link" msgstr "Enlace Web" -#: FlatCAMCommon.py:142 +#: FlatCAMBookmark.py:62 msgid "" "Index.\n" "The rows in gray color will populate the Bookmarks menu.\n" @@ -1710,7 +1704,7 @@ msgstr "" "Las filas en color gris llenarán el menú Marcadores.\n" "El número de filas de color gris se establece en Preferencias." -#: FlatCAMCommon.py:146 +#: FlatCAMBookmark.py:66 msgid "" "Description of the link that is set as an menu action.\n" "Try to keep it short because it is installed as a menu item." @@ -1718,87 +1712,91 @@ msgstr "" "Descripción del enlace que se establece como una acción de menú.\n" "Intenta mantenerlo corto porque está instalado como un elemento del menú." -#: FlatCAMCommon.py:149 +#: FlatCAMBookmark.py:69 msgid "Web Link. E.g: https://your_website.org " msgstr "Enlace web. P.ej: https://your_website.org " -#: FlatCAMCommon.py:158 +#: FlatCAMBookmark.py:78 msgid "New Bookmark" msgstr "Nuevo Marcador" -#: FlatCAMCommon.py:177 +#: FlatCAMBookmark.py:97 msgid "Add Entry" msgstr "Añadir entrada" -#: FlatCAMCommon.py:178 +#: FlatCAMBookmark.py:98 msgid "Remove Entry" msgstr "Remueva la entrada" -#: FlatCAMCommon.py:179 +#: FlatCAMBookmark.py:99 msgid "Export List" msgstr "Exportar la lista" -#: FlatCAMCommon.py:180 +#: FlatCAMBookmark.py:100 msgid "Import List" msgstr "Importar la lista" -#: FlatCAMCommon.py:261 +#: FlatCAMBookmark.py:181 msgid "Title entry is empty." msgstr "La entrada del título está vacía." -#: FlatCAMCommon.py:270 +#: FlatCAMBookmark.py:190 msgid "Web link entry is empty." msgstr "La entrada del enlace web está vacía." -#: FlatCAMCommon.py:278 +#: FlatCAMBookmark.py:198 msgid "Either the Title or the Weblink already in the table." msgstr "Ya sea el Título o el Enlace web ya en la tabla." -#: FlatCAMCommon.py:298 +#: FlatCAMBookmark.py:218 msgid "Bookmark added." msgstr "Marcador agregado." -#: FlatCAMCommon.py:315 +#: FlatCAMBookmark.py:235 msgid "This bookmark can not be removed" msgstr "Este marcador no se puede eliminar" -#: FlatCAMCommon.py:346 +#: FlatCAMBookmark.py:266 msgid "Bookmark removed." msgstr "Marcador eliminado." -#: FlatCAMCommon.py:361 +#: FlatCAMBookmark.py:281 msgid "Export FlatCAM Bookmarks" msgstr "Exportar marcadores de FlatCAM" -#: FlatCAMCommon.py:364 flatcamGUI/FlatCAMGUI.py:509 +#: FlatCAMBookmark.py:284 flatcamGUI/FlatCAMGUI.py:509 msgid "Bookmarks" msgstr "Marcadores" -#: FlatCAMCommon.py:390 FlatCAMCommon.py:420 +#: FlatCAMBookmark.py:310 FlatCAMBookmark.py:340 msgid "Could not load bookmarks file." msgstr "No se pudo cargar el archivo de marcadores." -#: FlatCAMCommon.py:400 +#: FlatCAMBookmark.py:320 msgid "Failed to write bookmarks to file." msgstr "Error al escribir marcadores en el archivo." -#: FlatCAMCommon.py:402 +#: FlatCAMBookmark.py:322 msgid "Exported bookmarks to" msgstr "Marcadores exportados a" -#: FlatCAMCommon.py:408 +#: FlatCAMBookmark.py:328 msgid "Import FlatCAM Bookmarks" msgstr "Importar marcadores de FlatCAM" -#: FlatCAMCommon.py:427 +#: FlatCAMBookmark.py:347 msgid "Imported Bookmarks from" msgstr "Marcadores importados de" -#: FlatCAMCommon.py:530 +#: FlatCAMCommon.py:29 +msgid "The user requested a graceful exit of the current task." +msgstr "El usuario solicitó una salida elegante de la tarea actual." + +#: FlatCAMDB.py:86 msgid "Add Geometry Tool in DB" msgstr "Agregar herramienta de geo. en DB" -#: FlatCAMCommon.py:532 FlatCAMCommon.py:2087 +#: FlatCAMDB.py:88 FlatCAMDB.py:1643 msgid "" "Add a new tool in the Tools Database.\n" "It will be used in the Geometry UI.\n" @@ -1808,38 +1806,38 @@ msgstr "" "Se utilizará en la interfaz de usuario de geometría.\n" "Puede editarlo después de agregarlo." -#: FlatCAMCommon.py:546 FlatCAMCommon.py:2101 +#: FlatCAMDB.py:102 FlatCAMDB.py:1657 msgid "Delete Tool from DB" msgstr "Eliminar herram. de la BD" -#: FlatCAMCommon.py:548 FlatCAMCommon.py:2103 +#: FlatCAMDB.py:104 FlatCAMDB.py:1659 msgid "Remove a selection of tools in the Tools Database." msgstr "Eliminar una selección de herramientas en la DB de herramientas." -#: FlatCAMCommon.py:552 FlatCAMCommon.py:2107 +#: FlatCAMDB.py:108 FlatCAMDB.py:1663 msgid "Export DB" msgstr "Exportar DB" -#: FlatCAMCommon.py:554 FlatCAMCommon.py:2109 +#: FlatCAMDB.py:110 FlatCAMDB.py:1665 msgid "Save the Tools Database to a custom text file." msgstr "" "Guarde la base de datos de herramientas en un archivo de texto personalizado." -#: FlatCAMCommon.py:558 FlatCAMCommon.py:2113 +#: FlatCAMDB.py:114 FlatCAMDB.py:1669 msgid "Import DB" msgstr "Importar DB" -#: FlatCAMCommon.py:560 FlatCAMCommon.py:2115 +#: FlatCAMDB.py:116 FlatCAMDB.py:1671 msgid "Load the Tools Database information's from a custom text file." msgstr "" "Cargue la información de la DB de herramientas desde un archivo de texto " "personalizado." -#: FlatCAMCommon.py:564 FlatCAMCommon.py:2119 +#: FlatCAMDB.py:120 FlatCAMDB.py:1675 msgid "Add Tool from Tools DB" msgstr "Agregar herramienta desde DB de herramientas" -#: FlatCAMCommon.py:566 FlatCAMCommon.py:2121 +#: FlatCAMDB.py:122 FlatCAMDB.py:1677 msgid "" "Add a new tool in the Tools Table of the\n" "active Geometry object after selecting a tool\n" @@ -1849,28 +1847,28 @@ msgstr "" "objeto de geometría activo después de seleccionar una herramienta\n" "en la base de datos de herramientas." -#: FlatCAMCommon.py:602 FlatCAMCommon.py:1277 FlatCAMCommon.py:1531 +#: FlatCAMDB.py:158 FlatCAMDB.py:833 FlatCAMDB.py:1087 msgid "Tool Name" msgstr "Nombre de Herram" -#: FlatCAMCommon.py:603 FlatCAMCommon.py:1279 FlatCAMCommon.py:1544 -#: flatcamEditors/FlatCAMExcEditor.py:1605 flatcamGUI/ObjectUI.py:1343 -#: flatcamGUI/ObjectUI.py:1581 flatcamGUI/PreferencesUI.py:5971 +#: FlatCAMDB.py:159 FlatCAMDB.py:835 FlatCAMDB.py:1100 +#: flatcamEditors/FlatCAMExcEditor.py:1604 flatcamGUI/ObjectUI.py:1344 +#: flatcamGUI/ObjectUI.py:1582 flatcamGUI/PreferencesUI.py:5971 #: flatcamTools/ToolNCC.py:278 flatcamTools/ToolNCC.py:287 #: flatcamTools/ToolPaint.py:261 msgid "Tool Dia" msgstr "Diá. de Herram" -#: FlatCAMCommon.py:604 FlatCAMCommon.py:1281 FlatCAMCommon.py:1725 -#: flatcamGUI/ObjectUI.py:1556 +#: FlatCAMDB.py:160 FlatCAMDB.py:837 FlatCAMDB.py:1281 +#: flatcamGUI/ObjectUI.py:1557 msgid "Tool Offset" msgstr "Offset de Herram" -#: FlatCAMCommon.py:605 FlatCAMCommon.py:1283 FlatCAMCommon.py:1742 +#: FlatCAMDB.py:161 FlatCAMDB.py:839 FlatCAMDB.py:1298 msgid "Custom Offset" msgstr "Desplazamiento personalizado" -#: FlatCAMCommon.py:606 FlatCAMCommon.py:1285 FlatCAMCommon.py:1709 +#: FlatCAMDB.py:162 FlatCAMDB.py:841 FlatCAMDB.py:1265 #: flatcamGUI/ObjectUI.py:308 flatcamGUI/PreferencesUI.py:2397 #: flatcamGUI/PreferencesUI.py:5332 flatcamGUI/PreferencesUI.py:5901 #: flatcamGUI/PreferencesUI.py:5911 flatcamTools/ToolNCC.py:213 @@ -1878,115 +1876,115 @@ msgstr "Desplazamiento personalizado" msgid "Tool Type" msgstr "Tipo de herram" -#: FlatCAMCommon.py:607 FlatCAMCommon.py:1287 FlatCAMCommon.py:1557 +#: FlatCAMDB.py:163 FlatCAMDB.py:843 FlatCAMDB.py:1113 msgid "Tool Shape" msgstr "Forma de la herram" -#: FlatCAMCommon.py:608 FlatCAMCommon.py:1290 FlatCAMCommon.py:1573 +#: FlatCAMDB.py:164 FlatCAMDB.py:846 FlatCAMDB.py:1129 #: flatcamGUI/ObjectUI.py:349 flatcamGUI/ObjectUI.py:899 -#: flatcamGUI/ObjectUI.py:1701 flatcamGUI/ObjectUI.py:2254 +#: flatcamGUI/ObjectUI.py:1702 flatcamGUI/ObjectUI.py:2255 #: flatcamGUI/PreferencesUI.py:2437 flatcamGUI/PreferencesUI.py:3311 #: flatcamGUI/PreferencesUI.py:4241 flatcamGUI/PreferencesUI.py:5377 #: flatcamGUI/PreferencesUI.py:5666 flatcamGUI/PreferencesUI.py:5944 #: flatcamGUI/PreferencesUI.py:5952 flatcamGUI/PreferencesUI.py:6635 -#: flatcamTools/ToolCalculators.py:114 flatcamTools/ToolCutOut.py:139 +#: flatcamTools/ToolCalculators.py:114 flatcamTools/ToolCutOut.py:138 #: flatcamTools/ToolNCC.py:260 flatcamTools/ToolNCC.py:268 #: flatcamTools/ToolPaint.py:243 msgid "Cut Z" msgstr "Corte Z" -#: FlatCAMCommon.py:609 FlatCAMCommon.py:1292 FlatCAMCommon.py:1587 +#: FlatCAMDB.py:165 FlatCAMDB.py:848 FlatCAMDB.py:1143 msgid "MultiDepth" msgstr "Profund. Múlti" -#: FlatCAMCommon.py:610 FlatCAMCommon.py:1294 FlatCAMCommon.py:1600 +#: FlatCAMDB.py:166 FlatCAMDB.py:850 FlatCAMDB.py:1156 msgid "DPP" msgstr "PPP" -#: FlatCAMCommon.py:611 FlatCAMCommon.py:1296 FlatCAMCommon.py:1756 +#: FlatCAMDB.py:167 FlatCAMDB.py:852 FlatCAMDB.py:1312 msgid "V-Dia" msgstr "V-Dia" -#: FlatCAMCommon.py:612 FlatCAMCommon.py:1298 FlatCAMCommon.py:1770 +#: FlatCAMDB.py:168 FlatCAMDB.py:854 FlatCAMDB.py:1326 msgid "V-Angle" msgstr "V-Ángulo" -#: FlatCAMCommon.py:613 FlatCAMCommon.py:1300 FlatCAMCommon.py:1614 -#: FlatCAMObj.py:3661 FlatCAMObj.py:5486 flatcamGUI/ObjectUI.py:945 -#: flatcamGUI/ObjectUI.py:1748 flatcamGUI/PreferencesUI.py:3352 -#: flatcamGUI/PreferencesUI.py:4294 flatcamGUI/PreferencesUI.py:8041 -#: flatcamTools/ToolCalibration.py:74 +#: FlatCAMDB.py:169 FlatCAMDB.py:856 FlatCAMDB.py:1170 +#: flatcamGUI/ObjectUI.py:945 flatcamGUI/ObjectUI.py:1749 +#: flatcamGUI/PreferencesUI.py:3352 flatcamGUI/PreferencesUI.py:4294 +#: flatcamGUI/PreferencesUI.py:8041 flatcamObjects/FlatCAMExcellon.py:1316 +#: flatcamObjects/FlatCAMGeometry.py:1552 flatcamTools/ToolCalibration.py:74 msgid "Travel Z" msgstr "Viaje Z" -#: FlatCAMCommon.py:614 FlatCAMCommon.py:1302 +#: FlatCAMDB.py:170 FlatCAMDB.py:858 msgid "FR" msgstr "FR" -#: FlatCAMCommon.py:615 FlatCAMCommon.py:1304 +#: FlatCAMDB.py:171 FlatCAMDB.py:860 msgid "FR Z" msgstr "FR Z" -#: FlatCAMCommon.py:616 FlatCAMCommon.py:1306 FlatCAMCommon.py:1784 +#: FlatCAMDB.py:172 FlatCAMDB.py:862 FlatCAMDB.py:1340 msgid "FR Rapids" msgstr "Avance rápido" -#: FlatCAMCommon.py:617 FlatCAMCommon.py:1308 FlatCAMCommon.py:1657 +#: FlatCAMDB.py:173 FlatCAMDB.py:864 FlatCAMDB.py:1213 #: flatcamGUI/PreferencesUI.py:3440 msgid "Spindle Speed" msgstr "Eje de velocidad" -#: FlatCAMCommon.py:618 FlatCAMCommon.py:1310 FlatCAMCommon.py:1672 -#: flatcamGUI/ObjectUI.py:1063 flatcamGUI/ObjectUI.py:1855 +#: FlatCAMDB.py:174 FlatCAMDB.py:866 FlatCAMDB.py:1228 +#: flatcamGUI/ObjectUI.py:1063 flatcamGUI/ObjectUI.py:1856 msgid "Dwell" msgstr "Habitar" -#: FlatCAMCommon.py:619 FlatCAMCommon.py:1312 FlatCAMCommon.py:1685 +#: FlatCAMDB.py:175 FlatCAMDB.py:868 FlatCAMDB.py:1241 msgid "Dwelltime" msgstr "Tiempo de permanencia" -#: FlatCAMCommon.py:620 FlatCAMCommon.py:1314 flatcamGUI/ObjectUI.py:2012 +#: FlatCAMDB.py:176 FlatCAMDB.py:870 flatcamGUI/ObjectUI.py:2013 #: flatcamGUI/PreferencesUI.py:3475 flatcamGUI/PreferencesUI.py:4447 -#: flatcamGUI/PreferencesUI.py:7148 flatcamTools/ToolSolderPaste.py:336 +#: flatcamGUI/PreferencesUI.py:7148 flatcamTools/ToolSolderPaste.py:335 msgid "Preprocessor" msgstr "Postprocesador" -#: FlatCAMCommon.py:621 FlatCAMCommon.py:1316 FlatCAMCommon.py:1800 +#: FlatCAMDB.py:177 FlatCAMDB.py:872 FlatCAMDB.py:1356 msgid "ExtraCut" msgstr "Corte extra" -#: FlatCAMCommon.py:622 FlatCAMCommon.py:1318 FlatCAMCommon.py:1815 +#: FlatCAMDB.py:178 FlatCAMDB.py:874 FlatCAMDB.py:1371 msgid "E-Cut Length" msgstr "Longitud de Corte extra" -#: FlatCAMCommon.py:623 FlatCAMCommon.py:1320 +#: FlatCAMDB.py:179 FlatCAMDB.py:876 msgid "Toolchange" msgstr "Cambio de herram" -#: FlatCAMCommon.py:624 FlatCAMCommon.py:1322 +#: FlatCAMDB.py:180 FlatCAMDB.py:878 msgid "Toolchange XY" msgstr "Cambio de herra X, Y" -#: FlatCAMCommon.py:625 FlatCAMCommon.py:1324 flatcamGUI/PreferencesUI.py:3378 +#: FlatCAMDB.py:181 FlatCAMDB.py:880 flatcamGUI/PreferencesUI.py:3378 #: flatcamGUI/PreferencesUI.py:4324 flatcamGUI/PreferencesUI.py:8078 #: flatcamTools/ToolCalibration.py:111 msgid "Toolchange Z" msgstr "Cambio de herramienta Z" -#: FlatCAMCommon.py:626 FlatCAMCommon.py:1326 flatcamGUI/ObjectUI.py:1192 +#: FlatCAMDB.py:182 FlatCAMDB.py:882 flatcamGUI/ObjectUI.py:1192 #: flatcamGUI/PreferencesUI.py:3586 flatcamGUI/PreferencesUI.py:4493 msgid "Start Z" msgstr "Comience Z" -#: FlatCAMCommon.py:627 FlatCAMCommon.py:1329 +#: FlatCAMDB.py:183 FlatCAMDB.py:885 msgid "End Z" msgstr "Fin Z" -#: FlatCAMCommon.py:631 +#: FlatCAMDB.py:187 msgid "Tool Index." msgstr "Índice de herramientas." -#: FlatCAMCommon.py:633 FlatCAMCommon.py:1533 +#: FlatCAMDB.py:189 FlatCAMDB.py:1089 msgid "" "Tool name.\n" "This is not used in the app, it's function\n" @@ -1996,11 +1994,11 @@ msgstr "" "Esto no se usa en la aplicación, es función\n" "es servir como una nota para el usuario." -#: FlatCAMCommon.py:637 FlatCAMCommon.py:1546 +#: FlatCAMDB.py:193 FlatCAMDB.py:1102 msgid "Tool Diameter." msgstr "Diá. de Herram." -#: FlatCAMCommon.py:639 FlatCAMCommon.py:1727 +#: FlatCAMDB.py:195 FlatCAMDB.py:1283 msgid "" "Tool Offset.\n" "Can be of a few types:\n" @@ -2017,7 +2015,7 @@ msgstr "" "Personalizado = desplazamiento personalizado utilizando el valor de " "desplazamiento personalizado" -#: FlatCAMCommon.py:646 FlatCAMCommon.py:1744 +#: FlatCAMDB.py:202 FlatCAMDB.py:1300 msgid "" "Custom Offset.\n" "A value to be used as offset from the current path." @@ -2025,7 +2023,7 @@ msgstr "" "Desplazamiento personalizado.\n" "Un valor que se utilizará como desplazamiento de la ruta actual." -#: FlatCAMCommon.py:649 FlatCAMCommon.py:1711 +#: FlatCAMDB.py:205 FlatCAMDB.py:1267 msgid "" "Tool Type.\n" "Can be:\n" @@ -2039,7 +2037,7 @@ msgstr "" "Áspero = corte rugoso, baja velocidad de avance, múltiples pasadas\n" "Acabado = corte de acabado, alto avance" -#: FlatCAMCommon.py:655 FlatCAMCommon.py:1559 +#: FlatCAMDB.py:211 FlatCAMDB.py:1115 msgid "" "Tool Shape. \n" "Can be:\n" @@ -2053,7 +2051,7 @@ msgstr "" "B = herramienta de fresado de punta esférica\n" "V = herramienta de fresado en forma de V" -#: FlatCAMCommon.py:661 FlatCAMCommon.py:1575 +#: FlatCAMDB.py:217 FlatCAMDB.py:1131 msgid "" "Cutting Depth.\n" "The depth at which to cut into material." @@ -2061,7 +2059,7 @@ msgstr "" "Profundidad de corte.\n" "La profundidad a la cual cortar en material." -#: FlatCAMCommon.py:664 FlatCAMCommon.py:1589 +#: FlatCAMDB.py:220 FlatCAMDB.py:1145 msgid "" "Multi Depth.\n" "Selecting this will allow cutting in multiple passes,\n" @@ -2071,7 +2069,7 @@ msgstr "" "Seleccionar esto permitirá cortar en múltiples pasadas,\n" "cada pasada agrega una profundidad de parámetro PPP." -#: FlatCAMCommon.py:668 FlatCAMCommon.py:1602 +#: FlatCAMDB.py:224 FlatCAMDB.py:1158 msgid "" "DPP. Depth per Pass.\n" "The value used to cut into material on each pass." @@ -2079,7 +2077,7 @@ msgstr "" "PPP. Profundidad por pase.\n" "El valor utilizado para cortar en material en cada pasada." -#: FlatCAMCommon.py:671 FlatCAMCommon.py:1758 +#: FlatCAMDB.py:227 FlatCAMDB.py:1314 msgid "" "V-Dia.\n" "Diameter of the tip for V-Shape Tools." @@ -2087,7 +2085,7 @@ msgstr "" "V-Dia.\n" "Diámetro de la punta para herramientas en forma de V." -#: FlatCAMCommon.py:674 FlatCAMCommon.py:1772 +#: FlatCAMDB.py:230 FlatCAMDB.py:1328 msgid "" "V-Agle.\n" "Angle at the tip for the V-Shape Tools." @@ -2095,7 +2093,7 @@ msgstr "" "Ángulo en V.\n" "Ángulo en la punta para las herramientas en forma de V." -#: FlatCAMCommon.py:677 FlatCAMCommon.py:1616 +#: FlatCAMDB.py:233 FlatCAMDB.py:1172 msgid "" "Clearance Height.\n" "Height at which the milling bit will travel between cuts,\n" @@ -2105,7 +2103,7 @@ msgstr "" "Altura a la que viajará la broca entre cortes,\n" "sobre la superficie del material, evitando todos los accesorios." -#: FlatCAMCommon.py:681 +#: FlatCAMDB.py:237 msgid "" "FR. Feedrate\n" "The speed on XY plane used while cutting into material." @@ -2113,7 +2111,7 @@ msgstr "" "FR. Avance\n" "La velocidad en el plano XY utilizada al cortar material." -#: FlatCAMCommon.py:684 +#: FlatCAMDB.py:240 msgid "" "FR Z. Feedrate Z\n" "The speed on Z plane." @@ -2121,7 +2119,7 @@ msgstr "" "FR Z. Avance Z\n" "La velocidad en el plano Z." -#: FlatCAMCommon.py:687 FlatCAMCommon.py:1786 +#: FlatCAMDB.py:243 FlatCAMDB.py:1342 msgid "" "FR Rapids. Feedrate Rapids\n" "Speed used while moving as fast as possible.\n" @@ -2133,7 +2131,7 @@ msgstr "" "Esto solo lo usan algunos dispositivos que no pueden usar\n" "el comando G0 g-code. Mayormente impresoras 3D." -#: FlatCAMCommon.py:692 FlatCAMCommon.py:1659 +#: FlatCAMDB.py:248 FlatCAMDB.py:1215 msgid "" "Spindle Speed.\n" "If it's left empty it will not be used.\n" @@ -2143,7 +2141,7 @@ msgstr "" "Si se deja vacío, no se usará.\n" "La velocidad del husillo en RPM." -#: FlatCAMCommon.py:696 FlatCAMCommon.py:1674 +#: FlatCAMDB.py:252 FlatCAMDB.py:1230 msgid "" "Dwell.\n" "Check this if a delay is needed to allow\n" @@ -2153,7 +2151,7 @@ msgstr "" "Marque esto si se necesita un retraso para permitir\n" "el motor del husillo para alcanzar su velocidad establecida." -#: FlatCAMCommon.py:700 FlatCAMCommon.py:1687 +#: FlatCAMDB.py:256 FlatCAMDB.py:1243 msgid "" "Dwell Time.\n" "A delay used to allow the motor spindle reach it's set speed." @@ -2162,7 +2160,7 @@ msgstr "" "Un retraso utilizado para permitir que el eje del motor alcance su velocidad " "establecida." -#: FlatCAMCommon.py:703 +#: FlatCAMDB.py:259 msgid "" "Preprocessor.\n" "A selection of files that will alter the generated G-code\n" @@ -2172,7 +2170,7 @@ msgstr "" "Una selección de archivos que alterarán el código G generado\n" "para adaptarse a una serie de casos de uso." -#: FlatCAMCommon.py:707 FlatCAMCommon.py:1802 +#: FlatCAMDB.py:263 FlatCAMDB.py:1358 msgid "" "Extra Cut.\n" "If checked, after a isolation is finished an extra cut\n" @@ -2186,7 +2184,7 @@ msgstr "" "como que este punto está cubierto por este corte adicional para\n" "Garantizar un aislamiento completo." -#: FlatCAMCommon.py:713 FlatCAMCommon.py:1817 +#: FlatCAMDB.py:269 FlatCAMDB.py:1373 msgid "" "Extra Cut length.\n" "If checked, after a isolation is finished an extra cut\n" @@ -2202,7 +2200,7 @@ msgstr "" "Garantizar un aislamiento completo. Esta es la longitud de\n" "El corte extra." -#: FlatCAMCommon.py:720 +#: FlatCAMDB.py:276 msgid "" "Toolchange.\n" "It will create a toolchange event.\n" @@ -2214,7 +2212,7 @@ msgstr "" "El tipo de cambio de herramienta está determinado por\n" "El archivo del preprocesador." -#: FlatCAMCommon.py:725 +#: FlatCAMDB.py:281 msgid "" "Toolchange XY.\n" "A set of coordinates in the format (x, y).\n" @@ -2226,7 +2224,7 @@ msgstr "" "Determinará la posición cartesiana del punto.\n" "donde tiene lugar el evento de cambio de herramienta." -#: FlatCAMCommon.py:730 +#: FlatCAMDB.py:286 msgid "" "Toolchange Z.\n" "The position on Z plane where the tool change event take place." @@ -2235,7 +2233,7 @@ msgstr "" "La posición en el plano Z donde tiene lugar el evento de cambio de " "herramienta." -#: FlatCAMCommon.py:733 +#: FlatCAMDB.py:289 msgid "" "Start Z.\n" "If it's left empty it will not be used.\n" @@ -2246,7 +2244,7 @@ msgstr "" "Una posición en el plano Z para moverse inmediatamente después del inicio " "del trabajo." -#: FlatCAMCommon.py:737 +#: FlatCAMDB.py:293 msgid "" "End Z.\n" "A position on Z plane to move immediately after job stop." @@ -2255,103 +2253,101 @@ msgstr "" "Una posición en el plano Z para moverse inmediatamente después de la " "detención del trabajo." -#: FlatCAMCommon.py:749 FlatCAMCommon.py:1126 FlatCAMCommon.py:1160 -#: FlatCAMCommon.py:2335 FlatCAMCommon.py:2556 FlatCAMCommon.py:2590 +#: FlatCAMDB.py:305 FlatCAMDB.py:682 FlatCAMDB.py:716 FlatCAMDB.py:1891 +#: FlatCAMDB.py:2112 FlatCAMDB.py:2146 msgid "Could not load Tools DB file." msgstr "No se pudo cargar el archivo de herramientas DB." -#: FlatCAMCommon.py:757 FlatCAMCommon.py:1168 FlatCAMCommon.py:2343 -#: FlatCAMCommon.py:2598 +#: FlatCAMDB.py:313 FlatCAMDB.py:724 FlatCAMDB.py:1899 FlatCAMDB.py:2154 msgid "Failed to parse Tools DB file." msgstr "Error al analizar el archivo DB de Herramientas." -#: FlatCAMCommon.py:760 FlatCAMCommon.py:1171 FlatCAMCommon.py:2346 -#: FlatCAMCommon.py:2601 +#: FlatCAMDB.py:316 FlatCAMDB.py:727 FlatCAMDB.py:1902 FlatCAMDB.py:2157 msgid "Loaded FlatCAM Tools DB from" msgstr "Base de datos de herramientas FlatCAM cargada de" -#: FlatCAMCommon.py:766 FlatCAMCommon.py:2260 +#: FlatCAMDB.py:322 FlatCAMDB.py:1816 msgid "Add to DB" msgstr "Añadir a DB" -#: FlatCAMCommon.py:768 FlatCAMCommon.py:2263 +#: FlatCAMDB.py:324 FlatCAMDB.py:1819 msgid "Copy from DB" msgstr "Copiar de DB" -#: FlatCAMCommon.py:770 FlatCAMCommon.py:2266 +#: FlatCAMDB.py:326 FlatCAMDB.py:1822 msgid "Delete from DB" msgstr "Eliminar de la DB" -#: FlatCAMCommon.py:1047 FlatCAMCommon.py:2473 +#: FlatCAMDB.py:603 FlatCAMDB.py:2029 msgid "Tool added to DB." msgstr "Herramienta agregada a la base de datos." -#: FlatCAMCommon.py:1068 FlatCAMCommon.py:2497 +#: FlatCAMDB.py:624 FlatCAMDB.py:2053 msgid "Tool copied from Tools DB." msgstr "Herramienta copiada de Herramientas DB." -#: FlatCAMCommon.py:1086 FlatCAMCommon.py:2516 +#: FlatCAMDB.py:642 FlatCAMDB.py:2072 msgid "Tool removed from Tools DB." msgstr "Herramienta eliminada de Herramientas DB." -#: FlatCAMCommon.py:1097 FlatCAMCommon.py:2527 +#: FlatCAMDB.py:653 FlatCAMDB.py:2083 msgid "Export Tools Database" msgstr "Exportar la DB de herramientas" -#: FlatCAMCommon.py:1100 FlatCAMCommon.py:2530 +#: FlatCAMDB.py:656 FlatCAMDB.py:2086 msgid "Tools_Database" msgstr "DB de herramientasram" -#: FlatCAMCommon.py:1137 FlatCAMCommon.py:1140 FlatCAMCommon.py:1192 -#: FlatCAMCommon.py:2567 FlatCAMCommon.py:2570 FlatCAMCommon.py:2622 +#: FlatCAMDB.py:693 FlatCAMDB.py:696 FlatCAMDB.py:748 FlatCAMDB.py:2123 +#: FlatCAMDB.py:2126 FlatCAMDB.py:2178 msgid "Failed to write Tools DB to file." msgstr "Error al escribir Herramientas DB en el archivo." -#: FlatCAMCommon.py:1143 FlatCAMCommon.py:2573 +#: FlatCAMDB.py:699 FlatCAMDB.py:2129 msgid "Exported Tools DB to" msgstr "Exportó la base de datos de herramientas a" -#: FlatCAMCommon.py:1150 FlatCAMCommon.py:2580 +#: FlatCAMDB.py:706 FlatCAMDB.py:2136 msgid "Import FlatCAM Tools DB" msgstr "Importe la base de datos de herramientas FlatCAM" -#: FlatCAMCommon.py:1196 FlatCAMCommon.py:2626 +#: FlatCAMDB.py:752 FlatCAMDB.py:2182 msgid "Saved Tools DB." msgstr "Guardado el DB de herramientas." -#: FlatCAMCommon.py:1343 FlatCAMCommon.py:2807 +#: FlatCAMDB.py:899 FlatCAMDB.py:2365 msgid "No Tool/row selected in the Tools Database table" msgstr "" "No se seleccionó ninguna herramienta / fila en la tabla Base de datos de " "herramientas" -#: FlatCAMCommon.py:1361 FlatCAMCommon.py:2824 +#: FlatCAMDB.py:917 FlatCAMDB.py:2382 msgid "Cancelled adding tool from DB." msgstr "Se canceló la herramienta de agregar de la DB." -#: FlatCAMCommon.py:1462 +#: FlatCAMDB.py:1018 msgid "Basic Geo Parameters" msgstr "Parámetros básicos de Geo" -#: FlatCAMCommon.py:1474 +#: FlatCAMDB.py:1030 msgid "Advanced Geo Parameters" msgstr "Parámetros avanzados de Geo" -#: FlatCAMCommon.py:1486 +#: FlatCAMDB.py:1042 msgid "NCC Parameters" msgstr "NCC Parameters" -#: FlatCAMCommon.py:1498 +#: FlatCAMDB.py:1054 msgid "Paint Parameters" msgstr "Parámetros de Pintura" -#: FlatCAMCommon.py:1629 flatcamGUI/ObjectUI.py:966 flatcamGUI/ObjectUI.py:1767 +#: FlatCAMDB.py:1185 flatcamGUI/ObjectUI.py:966 flatcamGUI/ObjectUI.py:1768 #: flatcamGUI/PreferencesUI.py:4378 flatcamGUI/PreferencesUI.py:7059 -#: flatcamTools/ToolSolderPaste.py:254 +#: flatcamTools/ToolSolderPaste.py:253 msgid "Feedrate X-Y" msgstr "Avance X-Y" -#: FlatCAMCommon.py:1631 +#: FlatCAMDB.py:1187 msgid "" "Feedrate X-Y. Feedrate\n" "The speed on XY plane used while cutting into material." @@ -2359,13 +2355,13 @@ msgstr "" "Avance X-Y. Avance\n" "La velocidad en el plano XY utilizada mientras se corta en material." -#: FlatCAMCommon.py:1643 flatcamGUI/ObjectUI.py:981 flatcamGUI/ObjectUI.py:1781 +#: FlatCAMDB.py:1199 flatcamGUI/ObjectUI.py:981 flatcamGUI/ObjectUI.py:1782 #: flatcamGUI/PreferencesUI.py:3425 flatcamGUI/PreferencesUI.py:4393 -#: flatcamGUI/PreferencesUI.py:7072 flatcamTools/ToolSolderPaste.py:266 +#: flatcamGUI/PreferencesUI.py:7072 flatcamTools/ToolSolderPaste.py:265 msgid "Feedrate Z" msgstr "Avance Z" -#: FlatCAMCommon.py:1645 +#: FlatCAMDB.py:1201 msgid "" "Feedrate Z\n" "The speed on Z plane." @@ -2373,12 +2369,12 @@ msgstr "" "Avance Z\n" "La velocidad en el plano Z." -#: FlatCAMCommon.py:1843 flatcamGUI/ObjectUI.py:844 +#: FlatCAMDB.py:1399 flatcamGUI/ObjectUI.py:844 #: flatcamGUI/PreferencesUI.py:3264 flatcamTools/ToolNCC.py:341 msgid "Operation" msgstr "Operación" -#: FlatCAMCommon.py:1845 flatcamTools/ToolNCC.py:343 +#: FlatCAMDB.py:1401 flatcamTools/ToolNCC.py:343 msgid "" "The 'Operation' can be:\n" "- Isolation -> will ensure that the non-copper clearing is always complete.\n" @@ -2390,24 +2386,23 @@ msgstr "" "Si no tiene éxito, la limpieza sin cobre también fallará.\n" "- Borrar -> la limpieza regular sin cobre." -#: FlatCAMCommon.py:1852 flatcamEditors/FlatCAMGrbEditor.py:2739 +#: FlatCAMDB.py:1408 flatcamEditors/FlatCAMGrbEditor.py:2739 #: flatcamGUI/GUIElements.py:2577 flatcamTools/ToolNCC.py:350 msgid "Clear" msgstr "Limpiar" -#: FlatCAMCommon.py:1853 flatcamTools/ToolNCC.py:351 -#: flatcamTools/ToolNCC.py:1618 +#: FlatCAMDB.py:1409 flatcamTools/ToolNCC.py:351 flatcamTools/ToolNCC.py:1618 msgid "Isolation" msgstr "Aislamiento" -#: FlatCAMCommon.py:1861 flatcamGUI/ObjectUI.py:408 flatcamGUI/ObjectUI.py:866 +#: FlatCAMDB.py:1417 flatcamGUI/ObjectUI.py:408 flatcamGUI/ObjectUI.py:866 #: flatcamGUI/PreferencesUI.py:2257 flatcamGUI/PreferencesUI.py:3280 #: flatcamGUI/PreferencesUI.py:4665 flatcamGUI/PreferencesUI.py:5416 #: flatcamTools/ToolNCC.py:359 msgid "Milling Type" msgstr "Tipo de fresado" -#: FlatCAMCommon.py:1863 FlatCAMCommon.py:1871 flatcamGUI/PreferencesUI.py:5418 +#: FlatCAMDB.py:1419 FlatCAMDB.py:1427 flatcamGUI/PreferencesUI.py:5418 #: flatcamGUI/PreferencesUI.py:5426 flatcamTools/ToolNCC.py:361 #: flatcamTools/ToolNCC.py:369 msgid "" @@ -2420,26 +2415,25 @@ msgstr "" "herramientas\n" "- convencional / útil cuando no hay compensación de reacción" -#: FlatCAMCommon.py:1868 flatcamGUI/ObjectUI.py:414 +#: FlatCAMDB.py:1424 flatcamGUI/ObjectUI.py:414 #: flatcamGUI/PreferencesUI.py:2264 flatcamGUI/PreferencesUI.py:4671 #: flatcamGUI/PreferencesUI.py:5423 flatcamTools/ToolNCC.py:366 msgid "Climb" msgstr "Subida" -#: FlatCAMCommon.py:1869 flatcamGUI/ObjectUI.py:415 +#: FlatCAMDB.py:1425 flatcamGUI/ObjectUI.py:415 #: flatcamGUI/PreferencesUI.py:2265 flatcamGUI/PreferencesUI.py:4672 #: flatcamGUI/PreferencesUI.py:5424 flatcamTools/ToolNCC.py:367 msgid "Conventional" msgstr "Convencional" -#: FlatCAMCommon.py:1881 FlatCAMCommon.py:1990 -#: flatcamEditors/FlatCAMGeoEditor.py:452 flatcamGUI/PreferencesUI.py:5461 -#: flatcamGUI/PreferencesUI.py:6002 flatcamTools/ToolNCC.py:382 -#: flatcamTools/ToolPaint.py:329 +#: FlatCAMDB.py:1437 FlatCAMDB.py:1546 flatcamEditors/FlatCAMGeoEditor.py:451 +#: flatcamGUI/PreferencesUI.py:5461 flatcamGUI/PreferencesUI.py:6002 +#: flatcamTools/ToolNCC.py:382 flatcamTools/ToolPaint.py:329 msgid "Overlap" msgstr "Superposición" -#: FlatCAMCommon.py:1883 flatcamGUI/PreferencesUI.py:5463 +#: FlatCAMDB.py:1439 flatcamGUI/PreferencesUI.py:5463 #: flatcamTools/ToolNCC.py:384 msgid "" "How much (percentage) of the tool width to overlap each tool pass.\n" @@ -2459,37 +2453,36 @@ msgstr "" "Valores más altos = procesamiento lento y ejecución lenta en CNC\n" "debido a demasiados caminos." -#: FlatCAMCommon.py:1902 FlatCAMCommon.py:2011 -#: flatcamEditors/FlatCAMGeoEditor.py:472 flatcamGUI/PreferencesUI.py:5481 -#: flatcamGUI/PreferencesUI.py:5723 flatcamGUI/PreferencesUI.py:6022 -#: flatcamGUI/PreferencesUI.py:7681 flatcamGUI/PreferencesUI.py:7838 -#: flatcamGUI/PreferencesUI.py:7923 flatcamGUI/PreferencesUI.py:8570 -#: flatcamGUI/PreferencesUI.py:8578 flatcamTools/ToolCopperThieving.py:112 -#: flatcamTools/ToolCopperThieving.py:363 flatcamTools/ToolCutOut.py:191 +#: FlatCAMDB.py:1458 FlatCAMDB.py:1567 flatcamEditors/FlatCAMGeoEditor.py:471 +#: flatcamGUI/PreferencesUI.py:5481 flatcamGUI/PreferencesUI.py:5723 +#: flatcamGUI/PreferencesUI.py:6022 flatcamGUI/PreferencesUI.py:7681 +#: flatcamGUI/PreferencesUI.py:7838 flatcamGUI/PreferencesUI.py:7923 +#: flatcamGUI/PreferencesUI.py:8570 flatcamGUI/PreferencesUI.py:8578 +#: flatcamTools/ToolCopperThieving.py:111 +#: flatcamTools/ToolCopperThieving.py:362 flatcamTools/ToolCutOut.py:190 #: flatcamTools/ToolFiducials.py:172 flatcamTools/ToolInvertGerber.py:88 #: flatcamTools/ToolInvertGerber.py:96 flatcamTools/ToolNCC.py:403 #: flatcamTools/ToolPaint.py:350 msgid "Margin" msgstr "Margen" -#: FlatCAMCommon.py:1904 flatcamGUI/PreferencesUI.py:5483 +#: FlatCAMDB.py:1460 flatcamGUI/PreferencesUI.py:5483 #: flatcamGUI/PreferencesUI.py:7683 flatcamGUI/PreferencesUI.py:7925 -#: flatcamGUI/PreferencesUI.py:7989 flatcamTools/ToolCopperThieving.py:114 +#: flatcamGUI/PreferencesUI.py:7989 flatcamTools/ToolCopperThieving.py:113 #: flatcamTools/ToolFiducials.py:174 flatcamTools/ToolFiducials.py:237 #: flatcamTools/ToolNCC.py:405 msgid "Bounding box margin." msgstr "Margen de cuadro delimitador." -#: FlatCAMCommon.py:1915 FlatCAMCommon.py:2026 -#: flatcamEditors/FlatCAMGeoEditor.py:486 flatcamGUI/PreferencesUI.py:5494 -#: flatcamGUI/PreferencesUI.py:6037 flatcamGUI/PreferencesUI.py:8204 -#: flatcamGUI/PreferencesUI.py:8417 flatcamTools/ToolExtractDrills.py:128 -#: flatcamTools/ToolNCC.py:416 flatcamTools/ToolPaint.py:365 -#: flatcamTools/ToolPunchGerber.py:139 +#: FlatCAMDB.py:1471 FlatCAMDB.py:1582 flatcamEditors/FlatCAMGeoEditor.py:485 +#: flatcamGUI/PreferencesUI.py:5494 flatcamGUI/PreferencesUI.py:6037 +#: flatcamGUI/PreferencesUI.py:8204 flatcamGUI/PreferencesUI.py:8417 +#: flatcamTools/ToolExtractDrills.py:128 flatcamTools/ToolNCC.py:416 +#: flatcamTools/ToolPaint.py:365 flatcamTools/ToolPunchGerber.py:139 msgid "Method" msgstr "Método" -#: FlatCAMCommon.py:1917 flatcamGUI/PreferencesUI.py:5496 +#: FlatCAMDB.py:1473 flatcamGUI/PreferencesUI.py:5496 #: flatcamTools/ToolNCC.py:418 msgid "" "Algorithm for copper clearing:\n" @@ -2502,19 +2495,17 @@ msgstr "" "- Basado en semillas: hacia afuera de la semilla.\n" "- Basado en líneas: líneas paralelas." -#: FlatCAMCommon.py:1925 FlatCAMCommon.py:2040 -#: flatcamEditors/FlatCAMGeoEditor.py:500 flatcamGUI/PreferencesUI.py:5509 -#: flatcamGUI/PreferencesUI.py:6056 flatcamTools/ToolNCC.py:431 -#: flatcamTools/ToolNCC.py:2390 flatcamTools/ToolNCC.py:2419 -#: flatcamTools/ToolNCC.py:2688 flatcamTools/ToolNCC.py:2720 -#: flatcamTools/ToolPaint.py:390 flatcamTools/ToolPaint.py:1829 -#: tclCommands/TclCommandCopperClear.py:126 +#: FlatCAMDB.py:1481 FlatCAMDB.py:1596 flatcamEditors/FlatCAMGeoEditor.py:499 +#: flatcamGUI/PreferencesUI.py:5509 flatcamGUI/PreferencesUI.py:6056 +#: flatcamTools/ToolNCC.py:431 flatcamTools/ToolNCC.py:2390 +#: flatcamTools/ToolNCC.py:2419 flatcamTools/ToolNCC.py:2688 +#: flatcamTools/ToolNCC.py:2720 flatcamTools/ToolPaint.py:390 +#: flatcamTools/ToolPaint.py:1829 tclCommands/TclCommandCopperClear.py:126 #: tclCommands/TclCommandCopperClear.py:134 tclCommands/TclCommandPaint.py:125 msgid "Standard" msgstr "Estándar" -#: FlatCAMCommon.py:1925 FlatCAMCommon.py:2040 -#: flatcamEditors/FlatCAMGeoEditor.py:500 +#: FlatCAMDB.py:1481 FlatCAMDB.py:1596 flatcamEditors/FlatCAMGeoEditor.py:499 #: flatcamEditors/FlatCAMGeoEditor.py:5156 flatcamGUI/PreferencesUI.py:5509 #: flatcamGUI/PreferencesUI.py:6056 flatcamTools/ToolNCC.py:431 #: flatcamTools/ToolPaint.py:390 flatcamTools/ToolPaint.py:699 @@ -2523,16 +2514,15 @@ msgstr "Estándar" msgid "Lines" msgstr "Líneas" -#: FlatCAMCommon.py:1933 FlatCAMCommon.py:2051 flatcamGUI/PreferencesUI.py:5516 +#: FlatCAMDB.py:1489 FlatCAMDB.py:1607 flatcamGUI/PreferencesUI.py:5516 #: flatcamGUI/PreferencesUI.py:6063 flatcamTools/ToolNCC.py:439 #: flatcamTools/ToolPaint.py:401 msgid "Connect" msgstr "Conectar" -#: FlatCAMCommon.py:1937 FlatCAMCommon.py:2054 -#: flatcamEditors/FlatCAMGeoEditor.py:509 flatcamGUI/PreferencesUI.py:5518 -#: flatcamGUI/PreferencesUI.py:6065 flatcamTools/ToolNCC.py:443 -#: flatcamTools/ToolPaint.py:404 +#: FlatCAMDB.py:1493 FlatCAMDB.py:1610 flatcamEditors/FlatCAMGeoEditor.py:508 +#: flatcamGUI/PreferencesUI.py:5518 flatcamGUI/PreferencesUI.py:6065 +#: flatcamTools/ToolNCC.py:443 flatcamTools/ToolPaint.py:404 msgid "" "Draw lines between resulting\n" "segments to minimize tool lifts." @@ -2540,16 +2530,15 @@ msgstr "" "Dibuja líneas entre el resultado\n" "Segmentos para minimizar elevaciones de herramientas." -#: FlatCAMCommon.py:1943 FlatCAMCommon.py:2058 flatcamGUI/PreferencesUI.py:5525 +#: FlatCAMDB.py:1499 FlatCAMDB.py:1614 flatcamGUI/PreferencesUI.py:5525 #: flatcamGUI/PreferencesUI.py:6071 flatcamTools/ToolNCC.py:449 #: flatcamTools/ToolPaint.py:408 msgid "Contour" msgstr "Contorno" -#: FlatCAMCommon.py:1947 FlatCAMCommon.py:2061 -#: flatcamEditors/FlatCAMGeoEditor.py:519 flatcamGUI/PreferencesUI.py:5527 -#: flatcamGUI/PreferencesUI.py:6073 flatcamTools/ToolNCC.py:453 -#: flatcamTools/ToolPaint.py:411 +#: FlatCAMDB.py:1503 FlatCAMDB.py:1617 flatcamEditors/FlatCAMGeoEditor.py:518 +#: flatcamGUI/PreferencesUI.py:5527 flatcamGUI/PreferencesUI.py:6073 +#: flatcamTools/ToolNCC.py:453 flatcamTools/ToolPaint.py:411 msgid "" "Cut around the perimeter of the polygon\n" "to trim rough edges." @@ -2557,15 +2546,15 @@ msgstr "" "Corta todo el perímetro del polígono.\n" "Para recortar los bordes ásperos." -#: FlatCAMCommon.py:1953 flatcamEditors/FlatCAMGeoEditor.py:613 +#: FlatCAMDB.py:1509 flatcamEditors/FlatCAMGeoEditor.py:612 #: flatcamEditors/FlatCAMGrbEditor.py:5145 flatcamGUI/ObjectUI.py:142 -#: flatcamGUI/ObjectUI.py:1495 flatcamGUI/ObjectUI.py:2244 +#: flatcamGUI/ObjectUI.py:1496 flatcamGUI/ObjectUI.py:2245 #: flatcamGUI/PreferencesUI.py:5534 flatcamGUI/PreferencesUI.py:6822 -#: flatcamTools/ToolNCC.py:459 flatcamTools/ToolTransform.py:29 +#: flatcamTools/ToolNCC.py:459 flatcamTools/ToolTransform.py:28 msgid "Offset" msgstr "Compensar" -#: FlatCAMCommon.py:1957 flatcamGUI/PreferencesUI.py:5536 +#: FlatCAMDB.py:1513 flatcamGUI/PreferencesUI.py:5536 #: flatcamTools/ToolNCC.py:463 msgid "" "If used, it will add an offset to the copper features.\n" @@ -2578,7 +2567,7 @@ msgstr "" "de las características de cobre.\n" "El valor puede estar entre 0 y 10 unidades FlatCAM." -#: FlatCAMCommon.py:1992 flatcamEditors/FlatCAMGeoEditor.py:454 +#: FlatCAMDB.py:1548 flatcamEditors/FlatCAMGeoEditor.py:453 #: flatcamGUI/PreferencesUI.py:6004 flatcamTools/ToolPaint.py:331 msgid "" "How much (percentage) of the tool width to overlap each tool pass.\n" @@ -2598,7 +2587,7 @@ msgstr "" "Valores más altos = procesamiento lento y ejecución lenta en CNC\n" "debido a demasiados caminos." -#: FlatCAMCommon.py:2013 flatcamEditors/FlatCAMGeoEditor.py:474 +#: FlatCAMDB.py:1569 flatcamEditors/FlatCAMGeoEditor.py:473 #: flatcamGUI/PreferencesUI.py:6024 flatcamTools/ToolPaint.py:352 msgid "" "Distance by which to avoid\n" @@ -2609,7 +2598,7 @@ msgstr "" "los bordes del polígono a\n" "ser pintado." -#: FlatCAMCommon.py:2028 flatcamGUI/PreferencesUI.py:6039 +#: FlatCAMDB.py:1584 flatcamGUI/PreferencesUI.py:6039 #: flatcamTools/ToolPaint.py:367 msgid "" "Algorithm for painting:\n" @@ -2630,507 +2619,23 @@ msgstr "" "- Combo: en caso de falla, se elegirá un nuevo método de los anteriores\n" "en el orden especificado." -#: FlatCAMCommon.py:2040 FlatCAMCommon.py:2042 flatcamGUI/PreferencesUI.py:6056 +#: FlatCAMDB.py:1596 FlatCAMDB.py:1598 flatcamGUI/PreferencesUI.py:6056 #: flatcamTools/ToolPaint.py:390 flatcamTools/ToolPaint.py:392 #: flatcamTools/ToolPaint.py:693 flatcamTools/ToolPaint.py:698 #: flatcamTools/ToolPaint.py:1871 tclCommands/TclCommandPaint.py:131 msgid "Laser_lines" msgstr "Lineas laser" -#: FlatCAMCommon.py:2040 flatcamGUI/PreferencesUI.py:6056 +#: FlatCAMDB.py:1596 flatcamGUI/PreferencesUI.py:6056 #: flatcamTools/ToolPaint.py:390 flatcamTools/ToolPaint.py:2022 #: tclCommands/TclCommandPaint.py:133 msgid "Combo" msgstr "Combo" -#: FlatCAMCommon.py:2085 +#: FlatCAMDB.py:1641 msgid "Add Tool in DB" msgstr "Agregar herramienta en DB" -#: FlatCAMObj.py:264 -msgid "Name changed from" -msgstr "Nombre cambiado de" - -#: FlatCAMObj.py:264 -msgid "to" -msgstr "a" - -#: FlatCAMObj.py:275 -msgid "Offsetting..." -msgstr "Compensación ..." - -#: FlatCAMObj.py:289 FlatCAMObj.py:294 -msgid "Scaling could not be executed." -msgstr "No se pudo ejecutar el escalado." - -#: FlatCAMObj.py:298 FlatCAMObj.py:306 -msgid "Scale done." -msgstr "Escala hecha." - -#: FlatCAMObj.py:304 -msgid "Scaling..." -msgstr "Escalando..." - -#: FlatCAMObj.py:322 -msgid "Skewing..." -msgstr "Sesgar..." - -#: FlatCAMObj.py:743 FlatCAMObj.py:831 flatcamGUI/ObjectUI.py:449 -#: flatcamGUI/PreferencesUI.py:6527 flatcamTools/ToolAlignObjects.py:73 -#: flatcamTools/ToolAlignObjects.py:109 flatcamTools/ToolCalibration.py:196 -#: flatcamTools/ToolCalibration.py:631 flatcamTools/ToolCalibration.py:648 -#: flatcamTools/ToolCalibration.py:807 flatcamTools/ToolCalibration.py:815 -#: flatcamTools/ToolCopperThieving.py:145 -#: flatcamTools/ToolCopperThieving.py:159 -#: flatcamTools/ToolCopperThieving.py:605 flatcamTools/ToolCutOut.py:92 -#: flatcamTools/ToolDblSided.py:225 flatcamTools/ToolFilm.py:69 -#: flatcamTools/ToolFilm.py:102 flatcamTools/ToolFilm.py:549 -#: flatcamTools/ToolFilm.py:557 flatcamTools/ToolImage.py:49 -#: flatcamTools/ToolImage.py:252 flatcamTools/ToolImage.py:273 -#: flatcamTools/ToolNCC.py:96 flatcamTools/ToolNCC.py:558 -#: flatcamTools/ToolNCC.py:1295 flatcamTools/ToolPaint.py:502 -#: flatcamTools/ToolPaint.py:706 flatcamTools/ToolPanelize.py:118 -#: flatcamTools/ToolPanelize.py:204 flatcamTools/ToolPanelize.py:374 -#: flatcamTools/ToolPanelize.py:391 -msgid "Gerber" -msgstr "Gerber" - -#: FlatCAMObj.py:743 FlatCAMObj.py:831 flatcamGUI/FlatCAMGUI.py:2154 -#: flatcamGUI/ObjectUI.py:449 flatcamTools/ToolCalibration.py:631 -#: flatcamTools/ToolCalibration.py:648 flatcamTools/ToolCalibration.py:815 -#: flatcamTools/ToolCopperThieving.py:145 -#: flatcamTools/ToolCopperThieving.py:159 -#: flatcamTools/ToolCopperThieving.py:605 flatcamTools/ToolCutOut.py:93 -#: flatcamTools/ToolDblSided.py:227 flatcamTools/ToolFilm.py:69 -#: flatcamTools/ToolFilm.py:102 flatcamTools/ToolFilm.py:549 -#: flatcamTools/ToolFilm.py:557 flatcamTools/ToolImage.py:49 -#: flatcamTools/ToolImage.py:271 flatcamTools/ToolNCC.py:95 -#: flatcamTools/ToolNCC.py:558 flatcamTools/ToolNCC.py:1295 -#: flatcamTools/ToolPaint.py:502 flatcamTools/ToolPaint.py:706 -#: flatcamTools/ToolPanelize.py:118 flatcamTools/ToolPanelize.py:374 -#: flatcamTools/ToolPanelize.py:391 -msgid "Geometry" -msgstr "Geometría" - -#: FlatCAMObj.py:755 FlatCAMObj.py:2957 FlatCAMObj.py:4421 -#: flatcamGUI/PreferencesUI.py:1646 flatcamGUI/PreferencesUI.py:3041 -msgid "Basic" -msgstr "BASIC" - -#: FlatCAMObj.py:782 FlatCAMObj.py:2970 FlatCAMObj.py:4442 -#: flatcamGUI/PreferencesUI.py:1647 -msgid "Advanced" -msgstr "Avanzado" - -#: FlatCAMObj.py:998 -msgid "Buffering solid geometry" -msgstr "Amortiguación de geometría sólida" - -#: FlatCAMObj.py:1001 camlib.py:979 flatcamGUI/PreferencesUI.py:2476 -#: flatcamTools/ToolCopperThieving.py:1017 -#: flatcamTools/ToolCopperThieving.py:1206 -#: flatcamTools/ToolCopperThieving.py:1218 flatcamTools/ToolNCC.py:2045 -#: flatcamTools/ToolNCC.py:2153 flatcamTools/ToolNCC.py:2167 -#: flatcamTools/ToolNCC.py:3098 flatcamTools/ToolNCC.py:3203 -#: flatcamTools/ToolNCC.py:3218 flatcamTools/ToolNCC.py:3484 -#: flatcamTools/ToolNCC.py:3585 flatcamTools/ToolNCC.py:3600 -msgid "Buffering" -msgstr "Tamponamiento" - -#: FlatCAMObj.py:1007 -msgid "Done" -msgstr "Hecho" - -#: FlatCAMObj.py:1032 FlatCAMObj.py:1058 -msgid "Operation could not be done." -msgstr "La operación no se pudo hacer." - -#: FlatCAMObj.py:1075 -msgid "Isolating..." -msgstr "Aislando ..." - -#: FlatCAMObj.py:1134 -msgid "Click on a polygon to isolate it." -msgstr "Haga clic en un polígono para aislarlo." - -#: FlatCAMObj.py:1173 FlatCAMObj.py:1277 flatcamTools/ToolPaint.py:1511 -msgid "Added polygon" -msgstr "Polígono agregado" - -#: FlatCAMObj.py:1174 FlatCAMObj.py:1279 -msgid "Click to add next polygon or right click to start isolation." -msgstr "" -"Haga clic para agregar el siguiente polígono o haga clic con el botón " -"derecho para iniciar el aislamiento." - -#: FlatCAMObj.py:1186 flatcamTools/ToolPaint.py:1525 -msgid "Removed polygon" -msgstr "Polígono eliminado" - -#: FlatCAMObj.py:1187 -msgid "Click to add/remove next polygon or right click to start isolation." -msgstr "" -"Haga clic para agregar / eliminar el siguiente polígono o haga clic con el " -"botón derecho para iniciar el aislamiento." - -#: FlatCAMObj.py:1192 flatcamTools/ToolPaint.py:1531 -msgid "No polygon detected under click position." -msgstr "No se detectó ningún polígono bajo la posición de clic." - -#: FlatCAMObj.py:1213 flatcamTools/ToolPaint.py:1560 -msgid "List of single polygons is empty. Aborting." -msgstr "La lista de polígonos individuales está vacía. Abortar." - -#: FlatCAMObj.py:1282 -msgid "No polygon in selection." -msgstr "No hay polígono en la selección." - -#: FlatCAMObj.py:1394 FlatCAMObj.py:1542 FlatCAMObj.py:4055 FlatCAMObj.py:4375 -#: FlatCAMObj.py:4762 -msgid "Rough" -msgstr "Áspero" - -#: FlatCAMObj.py:1410 FlatCAMObj.py:1489 flatcamTools/ToolNCC.py:2081 -#: flatcamTools/ToolNCC.py:3132 flatcamTools/ToolNCC.py:3511 -msgid "Isolation geometry could not be generated." -msgstr "La geometría de aislamiento no se pudo generar." - -#: FlatCAMObj.py:1435 FlatCAMObj.py:1567 -msgid "Isolation geometry created" -msgstr "Geometría de aislamiento creada" - -#: FlatCAMObj.py:1444 FlatCAMObj.py:1574 -msgid "Subtracting Geo" -msgstr "Restando Geo" - -#: FlatCAMObj.py:1899 -msgid "Plotting Apertures" -msgstr "Aperturas de trazado" - -#: FlatCAMObj.py:2753 flatcamEditors/FlatCAMExcEditor.py:2453 -msgid "Total Drills" -msgstr "Taladros totales" - -#: FlatCAMObj.py:2784 flatcamEditors/FlatCAMExcEditor.py:2485 -msgid "Total Slots" -msgstr "Ranuras totales" - -#: FlatCAMObj.py:2857 FlatCAMObj.py:3069 FlatCAMObj.py:3085 FlatCAMObj.py:3089 -#: FlatCAMObj.py:4242 FlatCAMObj.py:4667 FlatCAMObj.py:4703 -#: flatcamGUI/ObjectUI.py:817 flatcamGUI/ObjectUI.py:1660 -#: flatcamTools/ToolNCC.py:331 flatcamTools/ToolNCC.py:797 -#: flatcamTools/ToolNCC.py:811 flatcamTools/ToolNCC.py:1191 -#: flatcamTools/ToolPaint.py:314 flatcamTools/ToolPaint.py:767 -#: flatcamTools/ToolPaint.py:779 flatcamTools/ToolPaint.py:1166 -msgid "Parameters for" -msgstr "Parámetros para" - -#: FlatCAMObj.py:2857 FlatCAMObj.py:3089 FlatCAMObj.py:4242 FlatCAMObj.py:4703 -#: flatcamTools/ToolNCC.py:811 flatcamTools/ToolNCC.py:1191 -#: flatcamTools/ToolPaint.py:779 flatcamTools/ToolPaint.py:1166 -msgid "Multiple Tools" -msgstr "Herramientas múltiples" - -#: FlatCAMObj.py:3069 -msgid "No Tool Selected" -msgstr "Ninguna herramienta seleccionada" - -#: FlatCAMObj.py:3085 FlatCAMObj.py:3427 FlatCAMObj.py:4667 -#: flatcamEditors/FlatCAMGeoEditor.py:406 flatcamGUI/FlatCAMGUI.py:496 -#: flatcamGUI/FlatCAMGUI.py:1143 flatcamGUI/ObjectUI.py:817 -#: flatcamGUI/ObjectUI.py:1660 flatcamTools/ToolNCC.py:331 -#: flatcamTools/ToolNCC.py:797 flatcamTools/ToolPaint.py:314 -#: flatcamTools/ToolPaint.py:767 -msgid "Tool" -msgstr "Herramienta" - -#: FlatCAMObj.py:3419 FlatCAMObj.py:3512 FlatCAMObj.py:3700 -msgid "Please select one or more tools from the list and try again." -msgstr "" -"Por favor seleccione una o más herramientas de la lista e intente nuevamente." - -#: FlatCAMObj.py:3426 -msgid "Milling tool for DRILLS is larger than hole size. Cancelled." -msgstr "" -"La herramienta de fresado para TALADRO es más grande que el tamaño del " -"orificio. Cancelado." - -#: FlatCAMObj.py:3442 FlatCAMObj.py:3533 FlatCAMObj.py:3719 -#: tclCommands/TclCommandDrillcncjob.py:194 -msgid "Tool_nr" -msgstr "Herramienta_nu" - -#: FlatCAMObj.py:3442 FlatCAMObj.py:3533 FlatCAMObj.py:3719 -#: flatcamEditors/FlatCAMExcEditor.py:1585 -#: flatcamEditors/FlatCAMExcEditor.py:3069 flatcamGUI/ObjectUI.py:780 -#: flatcamTools/ToolNCC.py:132 flatcamTools/ToolPaint.py:128 -#: flatcamTools/ToolPcbWizard.py:76 flatcamTools/ToolProperties.py:416 -#: flatcamTools/ToolProperties.py:476 flatcamTools/ToolSolderPaste.py:86 -#: tclCommands/TclCommandDrillcncjob.py:194 -msgid "Diameter" -msgstr "Diámetro" - -#: FlatCAMObj.py:3442 FlatCAMObj.py:3533 FlatCAMObj.py:3719 -#: tclCommands/TclCommandDrillcncjob.py:194 -msgid "Drills_Nr" -msgstr "Taladros_nu" - -#: FlatCAMObj.py:3442 FlatCAMObj.py:3533 FlatCAMObj.py:3719 -#: tclCommands/TclCommandDrillcncjob.py:194 -msgid "Slots_Nr" -msgstr "Ranuras_nu" - -#: FlatCAMObj.py:3521 -msgid "Milling tool for SLOTS is larger than hole size. Cancelled." -msgstr "" -"La herramienta de fresado para SLOTS es más grande que el tamaño del " -"orificio. Cancelado." - -#: FlatCAMObj.py:3626 FlatCAMObj.py:5451 -msgid "Focus Z" -msgstr "Enfoque Z" - -#: FlatCAMObj.py:3645 FlatCAMObj.py:5470 -msgid "Laser Power" -msgstr "Poder del laser" - -#: FlatCAMObj.py:3677 FlatCAMObj.py:5502 flatcamGUI/ObjectUI.py:1048 -#: flatcamGUI/ObjectUI.py:1839 flatcamGUI/PreferencesUI.py:4409 -msgid "Spindle speed" -msgstr "Eje de velocidad" - -#: FlatCAMObj.py:3776 FlatCAMObj.py:5911 FlatCAMObj.py:5915 FlatCAMObj.py:6060 -msgid "Generating CNC Code" -msgstr "Generando Código CNC" - -#: FlatCAMObj.py:3966 flatcamTools/ToolNCC.py:918 flatcamTools/ToolPaint.py:844 -msgid "Current Tool parameters were applied to all tools." -msgstr "" -"Los parámetros actuales de la herramienta se aplicaron a todas las " -"herramientas." - -#: FlatCAMObj.py:4055 FlatCAMObj.py:5115 FlatCAMObj.py:5116 FlatCAMObj.py:5125 -msgid "Iso" -msgstr "Aisl" - -#: FlatCAMObj.py:4055 -msgid "Finish" -msgstr "Terminar" - -#: FlatCAMObj.py:4410 -msgid "Add from Tool DB" -msgstr "Agregar desde la DB de herramientas" - -#: FlatCAMObj.py:4413 flatcamGUI/FlatCAMGUI.py:734 flatcamGUI/FlatCAMGUI.py:848 -#: flatcamGUI/FlatCAMGUI.py:1057 flatcamGUI/FlatCAMGUI.py:2123 -#: flatcamGUI/FlatCAMGUI.py:2267 flatcamGUI/FlatCAMGUI.py:2532 -#: flatcamGUI/FlatCAMGUI.py:2731 flatcamGUI/ObjectUI.py:1615 -#: flatcamTools/ToolPanelize.py:543 flatcamTools/ToolPanelize.py:570 -#: flatcamTools/ToolPanelize.py:669 flatcamTools/ToolPanelize.py:703 -#: flatcamTools/ToolPanelize.py:768 -msgid "Copy" -msgstr "Dupdo" - -#: FlatCAMObj.py:4507 FlatCAMObj.py:4941 FlatCAMObj.py:5661 FlatCAMObj.py:6307 -#: flatcamEditors/FlatCAMExcEditor.py:2560 -#: flatcamEditors/FlatCAMGeoEditor.py:1077 -#: flatcamEditors/FlatCAMGeoEditor.py:1118 -#: flatcamEditors/FlatCAMGeoEditor.py:1146 -#: flatcamEditors/FlatCAMGeoEditor.py:1174 -#: flatcamEditors/FlatCAMGeoEditor.py:1218 -#: flatcamEditors/FlatCAMGeoEditor.py:1253 -#: flatcamEditors/FlatCAMGeoEditor.py:1281 flatcamTools/ToolNCC.py:1493 -#: flatcamTools/ToolPaint.py:1244 flatcamTools/ToolPaint.py:1415 -#: flatcamTools/ToolSolderPaste.py:883 flatcamTools/ToolSolderPaste.py:956 -msgid "Wrong value format entered, use a number." -msgstr "Formato de valor incorrecto introducido, use un número." - -#: FlatCAMObj.py:4781 -msgid "Tool added in Tool Table." -msgstr "Herramienta añadida en la tabla de herramientas." - -#: FlatCAMObj.py:4890 FlatCAMObj.py:4899 -msgid "Failed. Select a tool to copy." -msgstr "Ha fallado. Seleccione una herramienta para copiar." - -#: FlatCAMObj.py:4928 -msgid "Tool was copied in Tool Table." -msgstr "La herramienta se copió en la tabla de herramientas." - -#: FlatCAMObj.py:4955 -msgid "Tool was edited in Tool Table." -msgstr "La herramienta fue editada en la tabla de herramientas." - -#: FlatCAMObj.py:4984 FlatCAMObj.py:4993 -msgid "Failed. Select a tool to delete." -msgstr "Ha fallado. Seleccione una herramienta para eliminar." - -#: FlatCAMObj.py:5017 -msgid "Tool was deleted in Tool Table." -msgstr "La herramienta se eliminó en la tabla de herramientas." - -#: FlatCAMObj.py:5523 -msgid "This Geometry can't be processed because it is" -msgstr "Esta geometría no se puede procesar porque es" - -#: FlatCAMObj.py:5523 -msgid "geometry" -msgstr "geometría" - -#: FlatCAMObj.py:5564 -msgid "Failed. No tool selected in the tool table ..." -msgstr "" -"Ha fallado. Ninguna herramienta seleccionada en la tabla de herramientas ..." - -#: FlatCAMObj.py:5667 FlatCAMObj.py:5820 -msgid "" -"Tool Offset is selected in Tool Table but no value is provided.\n" -"Add a Tool Offset or change the Offset Type." -msgstr "" -"La Herramienta de desplazamiento se selecciona en la Tabla de herramientas " -"pero no se proporciona ningún valor.\n" -"Agregue una Herramienta de compensación o cambie el Tipo de compensación." - -#: FlatCAMObj.py:5733 FlatCAMObj.py:5882 -msgid "G-Code parsing in progress..." -msgstr "Análisis de código G en progreso ..." - -#: FlatCAMObj.py:5735 FlatCAMObj.py:5884 -msgid "G-Code parsing finished..." -msgstr "Análisis de código G terminado ..." - -#: FlatCAMObj.py:5743 -msgid "Finished G-Code processing" -msgstr "Procesamiento de código G terminado" - -#: FlatCAMObj.py:5745 FlatCAMObj.py:5896 -msgid "G-Code processing failed with error" -msgstr "El procesamiento del código G falló con error" - -#: FlatCAMObj.py:5790 flatcamTools/ToolSolderPaste.py:1300 -msgid "Cancelled. Empty file, it has no geometry" -msgstr "Cancelado. Archivo vacío, no tiene geometría" - -#: FlatCAMObj.py:5894 FlatCAMObj.py:6055 -msgid "Finished G-Code processing..." -msgstr "Procesamiento de código G terminado ..." - -#: FlatCAMObj.py:5913 FlatCAMObj.py:5917 FlatCAMObj.py:6062 -msgid "CNCjob created" -msgstr "CNCjob creado" - -#: FlatCAMObj.py:6092 FlatCAMObj.py:6101 flatcamParsers/ParseGerber.py:1866 -#: flatcamParsers/ParseGerber.py:1876 -msgid "Scale factor has to be a number: integer or float." -msgstr "El factor de escala debe ser un número: entero o Real." - -#: FlatCAMObj.py:6164 -msgid "Geometry Scale done." -msgstr "Escala de geometría realizada." - -#: FlatCAMObj.py:6181 flatcamParsers/ParseGerber.py:1992 -msgid "" -"An (x,y) pair of values are needed. Probable you entered only one value in " -"the Offset field." -msgstr "" -"Se necesita un par de valores (x, y). Probablemente haya ingresado un solo " -"valor en el campo Desplazamiento." - -#: FlatCAMObj.py:6237 -msgid "Geometry Offset done." -msgstr "Desplazamiento de geometría realizado." - -#: FlatCAMObj.py:6266 -msgid "" -"The Toolchange X,Y field in Edit -> Preferences has to be in the format (x, " -"y)\n" -"but now there is only one value, not two." -msgstr "" -"El campo Toolchange X, Y en Editar -> Preferencias tiene que estar en el " -"formato (x, y)\n" -"pero ahora solo hay un valor, no dos." - -#: FlatCAMObj.py:6956 FlatCAMObj.py:7802 FlatCAMObj.py:7999 -msgid "Basic" -msgstr "Basic" - -#: FlatCAMObj.py:6962 FlatCAMObj.py:7806 FlatCAMObj.py:8003 -msgid "Advanced" -msgstr "Avanzado" - -#: FlatCAMObj.py:7005 -msgid "Plotting..." -msgstr "Trazando ..." - -#: FlatCAMObj.py:7034 FlatCAMObj.py:7039 flatcamTools/ToolSolderPaste.py:1498 -msgid "Export Machine Code ..." -msgstr "Exportar código de máquina ..." - -#: FlatCAMObj.py:7044 flatcamTools/ToolSolderPaste.py:1502 -msgid "Export Machine Code cancelled ..." -msgstr "Exportar código de máquina cancelado ..." - -#: FlatCAMObj.py:7065 -msgid "Machine Code file saved to" -msgstr "Archivo de código de máquina guardado en" - -#: FlatCAMObj.py:7126 flatcamTools/ToolCalibration.py:1097 -msgid "Loaded Machine Code into Code Editor" -msgstr "Código de máquina cargado en el editor de código" - -#: FlatCAMObj.py:7265 -msgid "This CNCJob object can't be processed because it is a" -msgstr "Este objeto CNCJob no se puede procesar porque es un" - -#: FlatCAMObj.py:7267 -msgid "CNCJob object" -msgstr "Objeto CNCJob" - -#: FlatCAMObj.py:7447 -msgid "" -"G-code does not have a G94 code and we will not include the code in the " -"'Prepend to GCode' text box" -msgstr "" -"El código G no tiene un código G94 y no incluiremos el código en el cuadro " -"de texto 'Anteponer al código GC'" - -#: FlatCAMObj.py:7458 -msgid "Cancelled. The Toolchange Custom code is enabled but it's empty." -msgstr "" -"Cancelado. El código personalizado de Toolchange está habilitado pero está " -"vacío." - -#: FlatCAMObj.py:7463 -msgid "Toolchange G-code was replaced by a custom code." -msgstr "El código G de Toolchange fue reemplazado por un código personalizado." - -#: FlatCAMObj.py:7480 flatcamEditors/FlatCAMTextEditor.py:272 -#: flatcamTools/ToolSolderPaste.py:1529 -msgid "No such file or directory" -msgstr "El fichero o directorio no existe" - -#: FlatCAMObj.py:7494 flatcamEditors/FlatCAMTextEditor.py:284 -msgid "Saved to" -msgstr "Guardado en" - -#: FlatCAMObj.py:7511 FlatCAMObj.py:7521 -msgid "" -"The used preprocessor file has to have in it's name: 'toolchange_custom'" -msgstr "" -"El archivo de postprocesador usado debe tener su nombre: 'toolchange_custom'" - -#: FlatCAMObj.py:7524 -msgid "There is no preprocessor file." -msgstr "No hay archivo de postprocesador." - -#: FlatCAMObj.py:7821 -msgid "Script Editor" -msgstr "Editor de guiones" - -#: FlatCAMObj.py:8103 -msgid "Document Editor" -msgstr "Editor de Documentos" - #: FlatCAMProcess.py:172 msgid "processes running." msgstr "procesos en ejecución." @@ -3157,28 +2662,39 @@ msgstr "¿Está seguro de que desea cambiar el idioma actual a" msgid "Apply Language ..." msgstr "Aplicar Idioma ..." -#: ObjectCollection.py:506 +#: ObjectCollection.py:511 #, python-brace-format msgid "Object renamed from {old} to {new}" msgstr "Objeto renombrado de {old} a {new}" -#: ObjectCollection.py:972 +#: ObjectCollection.py:984 msgid "Cause of error" msgstr "Causa del error" -#: camlib.py:593 +#: camlib.py:597 msgid "self.solid_geometry is neither BaseGeometry or list." msgstr "self.solid_geometry no es ni BaseGeometry ni lista." -#: camlib.py:968 +#: camlib.py:970 msgid "Pass" msgstr "Pases" -#: camlib.py:988 +#: camlib.py:981 flatcamGUI/PreferencesUI.py:2476 +#: flatcamObjects/FlatCAMGerber.py:496 flatcamTools/ToolCopperThieving.py:1016 +#: flatcamTools/ToolCopperThieving.py:1205 +#: flatcamTools/ToolCopperThieving.py:1217 flatcamTools/ToolNCC.py:2045 +#: flatcamTools/ToolNCC.py:2153 flatcamTools/ToolNCC.py:2167 +#: flatcamTools/ToolNCC.py:3098 flatcamTools/ToolNCC.py:3203 +#: flatcamTools/ToolNCC.py:3218 flatcamTools/ToolNCC.py:3484 +#: flatcamTools/ToolNCC.py:3585 flatcamTools/ToolNCC.py:3600 +msgid "Buffering" +msgstr "Tamponamiento" + +#: camlib.py:990 msgid "Get Exteriors" msgstr "Obtener exteriores" -#: camlib.py:991 +#: camlib.py:993 msgid "Get Interiors" msgstr "Obtener interiores" @@ -3186,39 +2702,39 @@ msgstr "Obtener interiores" msgid "Object was mirrored" msgstr "El objeto fue reflejado" -#: camlib.py:2175 +#: camlib.py:2174 msgid "Failed to mirror. No object selected" msgstr "No se pudo reflejar. Ningún objeto seleccionado" -#: camlib.py:2244 +#: camlib.py:2239 msgid "Object was rotated" msgstr "El objeto fue girado" -#: camlib.py:2247 +#: camlib.py:2241 msgid "Failed to rotate. No object selected" msgstr "No se pudo rotar. Ningún objeto seleccionado" -#: camlib.py:2314 +#: camlib.py:2307 msgid "Object was skewed" msgstr "El objeto fue sesgado" -#: camlib.py:2317 +#: camlib.py:2309 msgid "Failed to skew. No object selected" msgstr "Error al sesgar. Ningún objeto seleccionado" -#: camlib.py:2392 +#: camlib.py:2385 msgid "Object was buffered" msgstr "El objeto fue almacenado" -#: camlib.py:2394 +#: camlib.py:2387 msgid "Failed to buffer. No object selected" msgstr "Error al almacenar en búfer. Ningún objeto seleccionado" -#: camlib.py:2599 +#: camlib.py:2594 msgid "There is no such parameter" msgstr "No hay tal parámetro" -#: camlib.py:2659 camlib.py:2892 camlib.py:3121 camlib.py:3343 +#: camlib.py:2654 camlib.py:2887 camlib.py:3116 camlib.py:3338 msgid "" "The Cut Z parameter has positive value. It is the depth value to drill into " "material.\n" @@ -3232,12 +2748,12 @@ msgstr "" "tipográfico, por lo tanto, la aplicación convertirá el valor a negativo. " "Compruebe el código CNC resultante (Gcode, etc.)." -#: camlib.py:2667 camlib.py:2902 camlib.py:3131 camlib.py:3353 camlib.py:3639 -#: camlib.py:4008 +#: camlib.py:2662 camlib.py:2897 camlib.py:3126 camlib.py:3348 camlib.py:3634 +#: camlib.py:4020 msgid "The Cut Z parameter is zero. There will be no cut, skipping file" msgstr "El parámetro Cut Z es cero. No habrá corte, saltando archivo" -#: camlib.py:2678 camlib.py:3976 +#: camlib.py:2673 camlib.py:3988 msgid "" "The Toolchange X,Y field in Edit -> Preferences has to be in the format (x, " "y) \n" @@ -3247,7 +2763,7 @@ msgstr "" "formato (x, y)\n" "pero ahora solo hay un valor, no dos. " -#: camlib.py:2687 camlib.py:3590 camlib.py:3958 +#: camlib.py:2682 camlib.py:3585 camlib.py:3970 msgid "" "The End Move X,Y field in Edit -> Preferences has to be in the format (x, y) " "but now there is only one value, not two." @@ -3255,31 +2771,31 @@ msgstr "" "El campo de movimiento final X, Y en Editar -> Preferencias debe estar en el " "formato (x, y) pero ahora solo hay un valor, no dos." -#: camlib.py:2775 +#: camlib.py:2770 msgid "Creating a list of points to drill..." msgstr "Crear una lista de puntos para explorar ..." -#: camlib.py:2865 camlib.py:3737 camlib.py:4112 +#: camlib.py:2860 camlib.py:3732 camlib.py:4124 msgid "Starting G-Code" msgstr "Iniciando el código G" -#: camlib.py:3006 camlib.py:3225 camlib.py:3389 camlib.py:3750 camlib.py:4123 +#: camlib.py:3001 camlib.py:3220 camlib.py:3384 camlib.py:3745 camlib.py:4135 msgid "Starting G-Code for tool with diameter" msgstr "Código G inicial para herramienta con diámetro" -#: camlib.py:3089 camlib.py:3307 camlib.py:3475 +#: camlib.py:3084 camlib.py:3302 camlib.py:3470 msgid "G91 coordinates not implemented" msgstr "Coordenadas G91 no implementadas" -#: camlib.py:3095 camlib.py:3314 camlib.py:3481 +#: camlib.py:3090 camlib.py:3309 camlib.py:3476 msgid "The loaded Excellon file has no drills" msgstr "El archivo Excellon cargado no tiene perforaciones" -#: camlib.py:3504 +#: camlib.py:3499 msgid "Finished G-Code generation..." msgstr "Generación de código G finalizada ..." -#: camlib.py:3608 +#: camlib.py:3603 msgid "" "The Toolchange X,Y field in Edit -> Preferences has to be in the format (x, " "y) \n" @@ -3289,7 +2805,7 @@ msgstr "" "formato (x, y)\n" "pero ahora solo hay un valor, no dos." -#: camlib.py:3622 camlib.py:3991 +#: camlib.py:3617 camlib.py:4003 msgid "" "Cut_Z parameter is None or zero. Most likely a bad combinations of other " "parameters." @@ -3297,7 +2813,7 @@ msgstr "" "El parámetro Cut_Z es Ninguno o cero. Lo más probable es una mala " "combinación de otros parámetros." -#: camlib.py:3631 camlib.py:4000 +#: camlib.py:3626 camlib.py:4012 msgid "" "The Cut Z parameter has positive value. It is the depth value to cut into " "material.\n" @@ -3311,11 +2827,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:3644 camlib.py:4014 +#: camlib.py:3639 camlib.py:4026 msgid "Travel Z parameter is None or zero." msgstr "El parámetro Travel Z des Ninguno o cero." -#: camlib.py:3649 camlib.py:4019 +#: camlib.py:3644 camlib.py:4031 msgid "" "The Travel Z parameter has negative value. It is the height value to travel " "between cuts.\n" @@ -3329,35 +2845,35 @@ 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:3657 camlib.py:4027 +#: camlib.py:3652 camlib.py:4039 msgid "The Z Travel parameter is zero. This is dangerous, skipping file" msgstr "" "El parámetro Z Travel es cero. Esto es peligroso, saltando el archive %s" -#: camlib.py:3676 camlib.py:4050 +#: camlib.py:3671 camlib.py:4062 msgid "Indexing geometry before generating G-Code..." msgstr "Indexación de la geometría antes de generar código G ..." -#: camlib.py:3820 camlib.py:4192 +#: camlib.py:3815 camlib.py:4204 msgid "Finished G-Code generation" msgstr "Generación de código G terminada" -#: camlib.py:3820 +#: camlib.py:3815 msgid "paths traced" msgstr "caminos trazados" -#: camlib.py:3853 +#: camlib.py:3865 msgid "Expected a Geometry, got" msgstr "Se esperaba una Geometría, se obtuvo" -#: camlib.py:3860 +#: camlib.py:3872 msgid "" "Trying to generate a CNC Job from a Geometry object without solid_geometry." msgstr "" "Intentando generar un trabajo de CNC desde un objeto de geometría sin " "solid_geometry." -#: camlib.py:3901 +#: camlib.py:3913 msgid "" "The Tool Offset value is too negative to use for the current_geometry.\n" "Raise the value (in module) and try again." @@ -3366,183 +2882,183 @@ msgstr "" "en current_geometry.\n" "Aumente el valor (en el módulo) e intente nuevamente." -#: camlib.py:4192 +#: camlib.py:4204 msgid " paths traced." msgstr " caminos trazados." -#: camlib.py:4220 +#: camlib.py:4232 msgid "There is no tool data in the SolderPaste geometry." msgstr "No hay datos de herramientas en la geometría SolderPaste." -#: camlib.py:4306 -msgid "Finished SolderPste G-Code generation" +#: camlib.py:4321 +msgid "Finished SolderPaste G-Code generation" msgstr "Generación de código G de soldadura soldada terminada" -#: camlib.py:4306 +#: camlib.py:4321 msgid "paths traced." msgstr "caminos trazados." -#: camlib.py:4566 +#: camlib.py:4581 msgid "Parsing GCode file. Number of lines" msgstr "Analizando el archivo GCode. Número de líneas" -#: camlib.py:4673 +#: camlib.py:4688 msgid "Creating Geometry from the parsed GCode file. " msgstr "Crear geometría a partir del archivo GCode analizado. " -#: camlib.py:4816 camlib.py:5101 camlib.py:5204 camlib.py:5360 +#: camlib.py:4831 camlib.py:5123 camlib.py:5234 camlib.py:5390 msgid "G91 coordinates not implemented ..." msgstr "Coordenadas G91 no implementadas ..." -#: camlib.py:4948 +#: camlib.py:4963 msgid "Unifying Geometry from parsed Geometry segments" msgstr "Geometría unificadora de segmentos de geometría analizados" -#: flatcamEditors/FlatCAMExcEditor.py:51 flatcamEditors/FlatCAMExcEditor.py:75 -#: flatcamEditors/FlatCAMExcEditor.py:169 -#: flatcamEditors/FlatCAMExcEditor.py:386 -#: flatcamEditors/FlatCAMExcEditor.py:590 +#: flatcamEditors/FlatCAMExcEditor.py:50 flatcamEditors/FlatCAMExcEditor.py:74 +#: flatcamEditors/FlatCAMExcEditor.py:168 +#: flatcamEditors/FlatCAMExcEditor.py:385 +#: flatcamEditors/FlatCAMExcEditor.py:589 #: flatcamEditors/FlatCAMGrbEditor.py:241 #: flatcamEditors/FlatCAMGrbEditor.py:248 msgid "Click to place ..." msgstr "Haga clic para colocar ..." -#: flatcamEditors/FlatCAMExcEditor.py:59 +#: flatcamEditors/FlatCAMExcEditor.py:58 msgid "To add a drill first select a tool" msgstr "Para agregar un taladro primero seleccione una herramienta" -#: flatcamEditors/FlatCAMExcEditor.py:123 +#: flatcamEditors/FlatCAMExcEditor.py:122 msgid "Done. Drill added." msgstr "Hecho. Taladro agregado." -#: flatcamEditors/FlatCAMExcEditor.py:177 +#: flatcamEditors/FlatCAMExcEditor.py:176 msgid "To add an Drill Array first select a tool in Tool Table" msgstr "" "Para agregar una matriz de perforación, primero seleccione una herramienta " "en la Tabla de herramientas" -#: flatcamEditors/FlatCAMExcEditor.py:193 -#: flatcamEditors/FlatCAMExcEditor.py:416 -#: flatcamEditors/FlatCAMExcEditor.py:637 -#: flatcamEditors/FlatCAMExcEditor.py:1152 -#: flatcamEditors/FlatCAMExcEditor.py:1179 +#: flatcamEditors/FlatCAMExcEditor.py:192 +#: flatcamEditors/FlatCAMExcEditor.py:415 +#: flatcamEditors/FlatCAMExcEditor.py:636 +#: flatcamEditors/FlatCAMExcEditor.py:1151 +#: flatcamEditors/FlatCAMExcEditor.py:1178 #: flatcamEditors/FlatCAMGrbEditor.py:471 #: flatcamEditors/FlatCAMGrbEditor.py:1935 #: flatcamEditors/FlatCAMGrbEditor.py:1965 msgid "Click on target location ..." msgstr "Haga clic en la ubicación de destino ..." -#: flatcamEditors/FlatCAMExcEditor.py:212 +#: flatcamEditors/FlatCAMExcEditor.py:211 msgid "Click on the Drill Circular Array Start position" msgstr "" "Haga clic en la posición de inicio de la matriz circular de perforación" -#: flatcamEditors/FlatCAMExcEditor.py:234 -#: flatcamEditors/FlatCAMExcEditor.py:678 +#: flatcamEditors/FlatCAMExcEditor.py:233 +#: flatcamEditors/FlatCAMExcEditor.py:677 #: flatcamEditors/FlatCAMGrbEditor.py:516 msgid "The value is not Float. Check for comma instead of dot separator." msgstr "" "El valor no es Real. Compruebe si hay coma en lugar de separador de puntos." -#: flatcamEditors/FlatCAMExcEditor.py:238 +#: flatcamEditors/FlatCAMExcEditor.py:237 msgid "The value is mistyped. Check the value" msgstr "El valor está mal escrito. Comprueba el valor" -#: flatcamEditors/FlatCAMExcEditor.py:337 +#: flatcamEditors/FlatCAMExcEditor.py:336 msgid "Too many drills for the selected spacing angle." msgstr "Demasiados taladros para el ángulo de separación seleccionado." -#: flatcamEditors/FlatCAMExcEditor.py:355 +#: flatcamEditors/FlatCAMExcEditor.py:354 msgid "Done. Drill Array added." msgstr "Hecho. Drill Array agregado." -#: flatcamEditors/FlatCAMExcEditor.py:395 +#: flatcamEditors/FlatCAMExcEditor.py:394 msgid "To add a slot first select a tool" msgstr "Para agregar un espacio primero seleccione una herramienta" -#: flatcamEditors/FlatCAMExcEditor.py:455 -#: flatcamEditors/FlatCAMExcEditor.py:462 -#: flatcamEditors/FlatCAMExcEditor.py:743 -#: flatcamEditors/FlatCAMExcEditor.py:750 +#: flatcamEditors/FlatCAMExcEditor.py:454 +#: flatcamEditors/FlatCAMExcEditor.py:461 +#: flatcamEditors/FlatCAMExcEditor.py:742 +#: flatcamEditors/FlatCAMExcEditor.py:749 msgid "Value is missing or wrong format. Add it and retry." msgstr "" "Falta el formato del formato o es incorrecto Añádelo y vuelve a intentarlo." -#: flatcamEditors/FlatCAMExcEditor.py:560 +#: flatcamEditors/FlatCAMExcEditor.py:559 msgid "Done. Adding Slot completed." msgstr "Hecho. Agregar de Ranura completado." -#: flatcamEditors/FlatCAMExcEditor.py:598 +#: flatcamEditors/FlatCAMExcEditor.py:597 msgid "To add an Slot Array first select a tool in Tool Table" msgstr "" "Para agregar una matriz de ranuras, primero seleccione una herramienta en la " "tabla de herramientas" -#: flatcamEditors/FlatCAMExcEditor.py:656 +#: flatcamEditors/FlatCAMExcEditor.py:655 msgid "Click on the Slot Circular Array Start position" msgstr "Haga clic en la posición de inicio de la matriz circular de ranura" -#: flatcamEditors/FlatCAMExcEditor.py:681 +#: flatcamEditors/FlatCAMExcEditor.py:680 #: flatcamEditors/FlatCAMGrbEditor.py:519 msgid "The value is mistyped. Check the value." msgstr "El valor está mal escrito. Compruebe el valor." -#: flatcamEditors/FlatCAMExcEditor.py:860 +#: flatcamEditors/FlatCAMExcEditor.py:859 msgid "Too many Slots for the selected spacing angle." msgstr "Demasiadas ranuras para el ángulo de separación seleccionado." -#: flatcamEditors/FlatCAMExcEditor.py:883 +#: flatcamEditors/FlatCAMExcEditor.py:882 msgid "Done. Slot Array added." msgstr "Hecho. Matriz de ranuras agregada." -#: flatcamEditors/FlatCAMExcEditor.py:905 +#: flatcamEditors/FlatCAMExcEditor.py:904 msgid "Click on the Drill(s) to resize ..." msgstr "Haga clic en el taladro(s) para cambiar el tamaño ..." -#: flatcamEditors/FlatCAMExcEditor.py:935 +#: flatcamEditors/FlatCAMExcEditor.py:934 msgid "Resize drill(s) failed. Please enter a diameter for resize." msgstr "" "Falló el tamaño de los taladros. Por favor, introduzca un diámetro para " "cambiar el tamaño." -#: flatcamEditors/FlatCAMExcEditor.py:1113 +#: flatcamEditors/FlatCAMExcEditor.py:1112 msgid "Done. Drill/Slot Resize completed." msgstr "Hecho. Tamaño de taladro / ranura completado." -#: flatcamEditors/FlatCAMExcEditor.py:1116 +#: flatcamEditors/FlatCAMExcEditor.py:1115 msgid "Cancelled. No drills/slots selected for resize ..." msgstr "" "Cancelado. No hay taladros / ranuras seleccionados para cambiar el tamaño ..." -#: flatcamEditors/FlatCAMExcEditor.py:1154 +#: flatcamEditors/FlatCAMExcEditor.py:1153 #: flatcamEditors/FlatCAMGrbEditor.py:1937 msgid "Click on reference location ..." msgstr "Haga clic en la ubicación de referencia ..." -#: flatcamEditors/FlatCAMExcEditor.py:1211 +#: flatcamEditors/FlatCAMExcEditor.py:1210 msgid "Done. Drill(s) Move completed." msgstr "Hecho. Taladro (s) Movimiento completado." -#: flatcamEditors/FlatCAMExcEditor.py:1319 +#: flatcamEditors/FlatCAMExcEditor.py:1318 msgid "Done. Drill(s) copied." msgstr "Hecho. Taladro (s) copiado." -#: flatcamEditors/FlatCAMExcEditor.py:1558 flatcamGUI/PreferencesUI.py:3829 +#: flatcamEditors/FlatCAMExcEditor.py:1557 flatcamGUI/PreferencesUI.py:3829 msgid "Excellon Editor" msgstr "Excellon Editor" -#: flatcamEditors/FlatCAMExcEditor.py:1565 +#: flatcamEditors/FlatCAMExcEditor.py:1564 #: flatcamEditors/FlatCAMGrbEditor.py:2460 msgid "Name:" msgstr "Nombre:" -#: flatcamEditors/FlatCAMExcEditor.py:1571 flatcamGUI/ObjectUI.py:760 -#: flatcamGUI/ObjectUI.py:1463 flatcamTools/ToolNCC.py:120 -#: flatcamTools/ToolPaint.py:115 flatcamTools/ToolSolderPaste.py:75 +#: flatcamEditors/FlatCAMExcEditor.py:1570 flatcamGUI/ObjectUI.py:760 +#: flatcamGUI/ObjectUI.py:1464 flatcamTools/ToolNCC.py:120 +#: flatcamTools/ToolPaint.py:115 flatcamTools/ToolSolderPaste.py:74 msgid "Tools Table" msgstr "Tabla de herramientas" -#: flatcamEditors/FlatCAMExcEditor.py:1573 flatcamGUI/ObjectUI.py:762 +#: flatcamEditors/FlatCAMExcEditor.py:1572 flatcamGUI/ObjectUI.py:762 msgid "" "Tools in this Excellon object\n" "when are used for drilling." @@ -3550,11 +3066,22 @@ msgstr "" "Herramientas en este objeto Excellon.\n" "Cuando se utilizan para la perforación." -#: flatcamEditors/FlatCAMExcEditor.py:1593 +#: flatcamEditors/FlatCAMExcEditor.py:1584 +#: flatcamEditors/FlatCAMExcEditor.py:3066 flatcamGUI/ObjectUI.py:780 +#: flatcamObjects/FlatCAMExcellon.py:1098 +#: flatcamObjects/FlatCAMExcellon.py:1188 +#: flatcamObjects/FlatCAMExcellon.py:1373 flatcamTools/ToolNCC.py:132 +#: flatcamTools/ToolPaint.py:128 flatcamTools/ToolPcbWizard.py:76 +#: flatcamTools/ToolProperties.py:416 flatcamTools/ToolProperties.py:476 +#: flatcamTools/ToolSolderPaste.py:85 tclCommands/TclCommandDrillcncjob.py:193 +msgid "Diameter" +msgstr "Diámetro" + +#: flatcamEditors/FlatCAMExcEditor.py:1592 msgid "Add/Delete Tool" msgstr "Añadir / Eliminar herramienta" -#: flatcamEditors/FlatCAMExcEditor.py:1595 +#: flatcamEditors/FlatCAMExcEditor.py:1594 msgid "" "Add/Delete a tool to the tool list\n" "for this Excellon object." @@ -3562,16 +3089,16 @@ msgstr "" "Agregar / Eliminar una herramienta a la lista de herramientas\n" "para este objeto Excellon." -#: flatcamEditors/FlatCAMExcEditor.py:1607 flatcamGUI/ObjectUI.py:1583 +#: flatcamEditors/FlatCAMExcEditor.py:1606 flatcamGUI/ObjectUI.py:1584 #: flatcamGUI/PreferencesUI.py:3860 msgid "Diameter for the new tool" msgstr "Diámetro para la nueva herramienta" -#: flatcamEditors/FlatCAMExcEditor.py:1617 +#: flatcamEditors/FlatCAMExcEditor.py:1616 msgid "Add Tool" msgstr "Añadir herramienta" -#: flatcamEditors/FlatCAMExcEditor.py:1619 +#: flatcamEditors/FlatCAMExcEditor.py:1618 msgid "" "Add a new tool to the tool list\n" "with the diameter specified above." @@ -3579,11 +3106,11 @@ msgstr "" "Agregar una nueva herramienta a la lista de herramientas\n" "con el diámetro especificado anteriormente." -#: flatcamEditors/FlatCAMExcEditor.py:1631 +#: flatcamEditors/FlatCAMExcEditor.py:1630 msgid "Delete Tool" msgstr "Eliminar herramienta" -#: flatcamEditors/FlatCAMExcEditor.py:1633 +#: flatcamEditors/FlatCAMExcEditor.py:1632 msgid "" "Delete a tool in the tool list\n" "by selecting a row in the tool table." @@ -3591,40 +3118,40 @@ msgstr "" "Eliminar una herramienta en la lista de herramientas\n" "seleccionando una fila en la tabla de herramientas." -#: flatcamEditors/FlatCAMExcEditor.py:1651 flatcamGUI/FlatCAMGUI.py:2004 +#: flatcamEditors/FlatCAMExcEditor.py:1650 flatcamGUI/FlatCAMGUI.py:2004 msgid "Resize Drill(s)" msgstr "Cambiar el tamaño de taladro (s)" -#: flatcamEditors/FlatCAMExcEditor.py:1653 +#: flatcamEditors/FlatCAMExcEditor.py:1652 msgid "Resize a drill or a selection of drills." msgstr "Cambiar el tamaño de un ejercicio o una selección de ejercicios." -#: flatcamEditors/FlatCAMExcEditor.py:1660 +#: flatcamEditors/FlatCAMExcEditor.py:1659 msgid "Resize Dia" msgstr "Cambiar el diá" -#: flatcamEditors/FlatCAMExcEditor.py:1662 +#: flatcamEditors/FlatCAMExcEditor.py:1661 msgid "Diameter to resize to." msgstr "Diámetro para redimensionar a." -#: flatcamEditors/FlatCAMExcEditor.py:1673 +#: flatcamEditors/FlatCAMExcEditor.py:1672 msgid "Resize" msgstr "Redimensionar" -#: flatcamEditors/FlatCAMExcEditor.py:1675 +#: flatcamEditors/FlatCAMExcEditor.py:1674 msgid "Resize drill(s)" msgstr "Cambiar el tamaño de taladro" -#: flatcamEditors/FlatCAMExcEditor.py:1700 flatcamGUI/FlatCAMGUI.py:2003 +#: flatcamEditors/FlatCAMExcEditor.py:1699 flatcamGUI/FlatCAMGUI.py:2003 #: flatcamGUI/FlatCAMGUI.py:2255 msgid "Add Drill Array" msgstr "Añadir Drill Array" -#: flatcamEditors/FlatCAMExcEditor.py:1702 +#: flatcamEditors/FlatCAMExcEditor.py:1701 msgid "Add an array of drills (linear or circular array)" msgstr "Agregar una matriz de taladros (lineal o circular)" -#: flatcamEditors/FlatCAMExcEditor.py:1708 +#: flatcamEditors/FlatCAMExcEditor.py:1707 msgid "" "Select the type of drills array to create.\n" "It can be Linear X(Y) or Circular" @@ -3632,14 +3159,14 @@ msgstr "" "Seleccione el tipo de matriz de ejercicios para crear.\n" "Puede ser lineal X (Y) o circular" -#: flatcamEditors/FlatCAMExcEditor.py:1711 -#: flatcamEditors/FlatCAMExcEditor.py:1925 +#: flatcamEditors/FlatCAMExcEditor.py:1710 +#: flatcamEditors/FlatCAMExcEditor.py:1924 #: flatcamEditors/FlatCAMGrbEditor.py:2772 msgid "Linear" msgstr "Lineal" -#: flatcamEditors/FlatCAMExcEditor.py:1712 -#: flatcamEditors/FlatCAMExcEditor.py:1926 +#: flatcamEditors/FlatCAMExcEditor.py:1711 +#: flatcamEditors/FlatCAMExcEditor.py:1925 #: flatcamEditors/FlatCAMGrbEditor.py:2773 flatcamGUI/ObjectUI.py:315 #: flatcamGUI/PreferencesUI.py:5340 flatcamGUI/PreferencesUI.py:5909 #: flatcamGUI/PreferencesUI.py:7971 flatcamGUI/PreferencesUI.py:8151 @@ -3651,27 +3178,27 @@ msgstr "Lineal" msgid "Circular" msgstr "Circular" -#: flatcamEditors/FlatCAMExcEditor.py:1720 flatcamGUI/PreferencesUI.py:3871 +#: flatcamEditors/FlatCAMExcEditor.py:1719 flatcamGUI/PreferencesUI.py:3871 msgid "Nr of drills" msgstr "Nu. de ejercicios" -#: flatcamEditors/FlatCAMExcEditor.py:1721 flatcamGUI/PreferencesUI.py:3873 +#: flatcamEditors/FlatCAMExcEditor.py:1720 flatcamGUI/PreferencesUI.py:3873 msgid "Specify how many drills to be in the array." msgstr "Especifique cuántos ejercicios debe estar en la matriz." -#: flatcamEditors/FlatCAMExcEditor.py:1739 -#: flatcamEditors/FlatCAMExcEditor.py:1789 -#: flatcamEditors/FlatCAMExcEditor.py:1861 -#: flatcamEditors/FlatCAMExcEditor.py:1954 -#: flatcamEditors/FlatCAMExcEditor.py:2005 +#: flatcamEditors/FlatCAMExcEditor.py:1738 +#: flatcamEditors/FlatCAMExcEditor.py:1788 +#: flatcamEditors/FlatCAMExcEditor.py:1860 +#: flatcamEditors/FlatCAMExcEditor.py:1953 +#: flatcamEditors/FlatCAMExcEditor.py:2004 #: flatcamEditors/FlatCAMGrbEditor.py:1571 #: flatcamEditors/FlatCAMGrbEditor.py:2801 #: flatcamEditors/FlatCAMGrbEditor.py:2850 flatcamGUI/PreferencesUI.py:3981 msgid "Direction" msgstr "Dirección" -#: flatcamEditors/FlatCAMExcEditor.py:1741 -#: flatcamEditors/FlatCAMExcEditor.py:1956 +#: flatcamEditors/FlatCAMExcEditor.py:1740 +#: flatcamEditors/FlatCAMExcEditor.py:1955 #: flatcamEditors/FlatCAMGrbEditor.py:2803 flatcamGUI/PreferencesUI.py:2718 #: flatcamGUI/PreferencesUI.py:3889 flatcamGUI/PreferencesUI.py:4037 msgid "" @@ -3685,9 +3212,9 @@ msgstr "" "- 'Y' - eje vertical o\n" "- 'Ángulo': un ángulo personalizado para la inclinación de la matriz" -#: flatcamEditors/FlatCAMExcEditor.py:1748 -#: flatcamEditors/FlatCAMExcEditor.py:1870 -#: flatcamEditors/FlatCAMExcEditor.py:1963 +#: flatcamEditors/FlatCAMExcEditor.py:1747 +#: flatcamEditors/FlatCAMExcEditor.py:1869 +#: flatcamEditors/FlatCAMExcEditor.py:1962 #: flatcamEditors/FlatCAMGrbEditor.py:2810 flatcamGUI/PreferencesUI.py:2724 #: flatcamGUI/PreferencesUI.py:3895 flatcamGUI/PreferencesUI.py:3990 #: flatcamGUI/PreferencesUI.py:4043 flatcamGUI/PreferencesUI.py:6341 @@ -3695,9 +3222,9 @@ msgstr "" msgid "X" msgstr "X" -#: flatcamEditors/FlatCAMExcEditor.py:1749 -#: flatcamEditors/FlatCAMExcEditor.py:1871 -#: flatcamEditors/FlatCAMExcEditor.py:1964 +#: flatcamEditors/FlatCAMExcEditor.py:1748 +#: flatcamEditors/FlatCAMExcEditor.py:1870 +#: flatcamEditors/FlatCAMExcEditor.py:1963 #: flatcamEditors/FlatCAMGrbEditor.py:2811 flatcamGUI/PreferencesUI.py:2725 #: flatcamGUI/PreferencesUI.py:3896 flatcamGUI/PreferencesUI.py:3991 #: flatcamGUI/PreferencesUI.py:4044 flatcamGUI/PreferencesUI.py:6342 @@ -3705,14 +3232,14 @@ msgstr "X" msgid "Y" msgstr "Y" -#: flatcamEditors/FlatCAMExcEditor.py:1750 -#: flatcamEditors/FlatCAMExcEditor.py:1767 -#: flatcamEditors/FlatCAMExcEditor.py:1801 -#: flatcamEditors/FlatCAMExcEditor.py:1872 -#: flatcamEditors/FlatCAMExcEditor.py:1876 -#: flatcamEditors/FlatCAMExcEditor.py:1965 -#: flatcamEditors/FlatCAMExcEditor.py:1983 -#: flatcamEditors/FlatCAMExcEditor.py:2017 +#: flatcamEditors/FlatCAMExcEditor.py:1749 +#: flatcamEditors/FlatCAMExcEditor.py:1766 +#: flatcamEditors/FlatCAMExcEditor.py:1800 +#: flatcamEditors/FlatCAMExcEditor.py:1871 +#: flatcamEditors/FlatCAMExcEditor.py:1875 +#: flatcamEditors/FlatCAMExcEditor.py:1964 +#: flatcamEditors/FlatCAMExcEditor.py:1982 +#: flatcamEditors/FlatCAMExcEditor.py:2016 #: flatcamEditors/FlatCAMGrbEditor.py:2812 #: flatcamEditors/FlatCAMGrbEditor.py:2829 #: flatcamEditors/FlatCAMGrbEditor.py:2865 flatcamGUI/PreferencesUI.py:2726 @@ -3721,26 +3248,26 @@ msgstr "Y" #: flatcamGUI/PreferencesUI.py:3997 flatcamGUI/PreferencesUI.py:4045 #: flatcamGUI/PreferencesUI.py:4066 flatcamGUI/PreferencesUI.py:6733 #: flatcamTools/ToolDistance.py:120 flatcamTools/ToolDistanceMin.py:69 -#: flatcamTools/ToolTransform.py:61 +#: flatcamTools/ToolTransform.py:60 msgid "Angle" msgstr "Ángulo" -#: flatcamEditors/FlatCAMExcEditor.py:1754 -#: flatcamEditors/FlatCAMExcEditor.py:1969 +#: flatcamEditors/FlatCAMExcEditor.py:1753 +#: flatcamEditors/FlatCAMExcEditor.py:1968 #: flatcamEditors/FlatCAMGrbEditor.py:2816 flatcamGUI/PreferencesUI.py:2732 #: flatcamGUI/PreferencesUI.py:3903 flatcamGUI/PreferencesUI.py:4051 msgid "Pitch" msgstr "Paso" -#: flatcamEditors/FlatCAMExcEditor.py:1756 -#: flatcamEditors/FlatCAMExcEditor.py:1971 +#: flatcamEditors/FlatCAMExcEditor.py:1755 +#: flatcamEditors/FlatCAMExcEditor.py:1970 #: flatcamEditors/FlatCAMGrbEditor.py:2818 flatcamGUI/PreferencesUI.py:2734 #: flatcamGUI/PreferencesUI.py:3905 flatcamGUI/PreferencesUI.py:4053 msgid "Pitch = Distance between elements of the array." msgstr "Paso = Distancia entre elementos de la matriz." -#: flatcamEditors/FlatCAMExcEditor.py:1769 -#: flatcamEditors/FlatCAMExcEditor.py:1985 +#: flatcamEditors/FlatCAMExcEditor.py:1768 +#: flatcamEditors/FlatCAMExcEditor.py:1984 msgid "" "Angle at which the linear array is placed.\n" "The precision is of max 2 decimals.\n" @@ -3752,8 +3279,8 @@ msgstr "" "El valor mínimo es: -360 grados.\n" "El valor máximo es: 360.00 grados." -#: flatcamEditors/FlatCAMExcEditor.py:1790 -#: flatcamEditors/FlatCAMExcEditor.py:2006 +#: flatcamEditors/FlatCAMExcEditor.py:1789 +#: flatcamEditors/FlatCAMExcEditor.py:2005 #: flatcamEditors/FlatCAMGrbEditor.py:2852 msgid "" "Direction for circular array.Can be CW = clockwise or CCW = counter " @@ -3762,24 +3289,24 @@ msgstr "" "Dirección de la matriz circular. Puede ser CW = en sentido horario o CCW = " "en sentido antihorario." -#: flatcamEditors/FlatCAMExcEditor.py:1797 -#: flatcamEditors/FlatCAMExcEditor.py:2013 +#: flatcamEditors/FlatCAMExcEditor.py:1796 +#: flatcamEditors/FlatCAMExcEditor.py:2012 #: flatcamEditors/FlatCAMGrbEditor.py:2860 flatcamGUI/PreferencesUI.py:2766 #: flatcamGUI/PreferencesUI.py:3646 flatcamGUI/PreferencesUI.py:3939 #: flatcamGUI/PreferencesUI.py:4089 flatcamGUI/PreferencesUI.py:4581 msgid "CW" msgstr "CW" -#: flatcamEditors/FlatCAMExcEditor.py:1798 -#: flatcamEditors/FlatCAMExcEditor.py:2014 +#: flatcamEditors/FlatCAMExcEditor.py:1797 +#: flatcamEditors/FlatCAMExcEditor.py:2013 #: flatcamEditors/FlatCAMGrbEditor.py:2861 flatcamGUI/PreferencesUI.py:2767 #: flatcamGUI/PreferencesUI.py:3647 flatcamGUI/PreferencesUI.py:3940 #: flatcamGUI/PreferencesUI.py:4090 flatcamGUI/PreferencesUI.py:4582 msgid "CCW" msgstr "CCW" -#: flatcamEditors/FlatCAMExcEditor.py:1802 -#: flatcamEditors/FlatCAMExcEditor.py:2018 +#: flatcamEditors/FlatCAMExcEditor.py:1801 +#: flatcamEditors/FlatCAMExcEditor.py:2017 #: flatcamEditors/FlatCAMGrbEditor.py:2867 flatcamGUI/PreferencesUI.py:2746 #: flatcamGUI/PreferencesUI.py:2775 flatcamGUI/PreferencesUI.py:3918 #: flatcamGUI/PreferencesUI.py:3948 flatcamGUI/PreferencesUI.py:4068 @@ -3787,11 +3314,11 @@ msgstr "CCW" msgid "Angle at which each element in circular array is placed." msgstr "Ángulo en el que se coloca cada elemento de la matriz circular." -#: flatcamEditors/FlatCAMExcEditor.py:1836 +#: flatcamEditors/FlatCAMExcEditor.py:1835 msgid "Slot Parameters" msgstr "Parámetros de ranura" -#: flatcamEditors/FlatCAMExcEditor.py:1838 +#: flatcamEditors/FlatCAMExcEditor.py:1837 msgid "" "Parameters for adding a slot (hole with oval shape)\n" "either single or as an part of an array." @@ -3799,16 +3326,16 @@ msgstr "" "Parámetros para agregar una ranura (agujero con forma ovalada)\n" "ya sea solo o como parte de una matriz." -#: flatcamEditors/FlatCAMExcEditor.py:1847 flatcamGUI/PreferencesUI.py:3965 +#: flatcamEditors/FlatCAMExcEditor.py:1846 flatcamGUI/PreferencesUI.py:3965 #: flatcamTools/ToolProperties.py:559 msgid "Length" msgstr "Longitud" -#: flatcamEditors/FlatCAMExcEditor.py:1849 flatcamGUI/PreferencesUI.py:3967 +#: flatcamEditors/FlatCAMExcEditor.py:1848 flatcamGUI/PreferencesUI.py:3967 msgid "Length = The length of the slot." msgstr "Longitud = La longitud de la ranura." -#: flatcamEditors/FlatCAMExcEditor.py:1863 flatcamGUI/PreferencesUI.py:3983 +#: flatcamEditors/FlatCAMExcEditor.py:1862 flatcamGUI/PreferencesUI.py:3983 msgid "" "Direction on which the slot is oriented:\n" "- 'X' - horizontal axis \n" @@ -3820,7 +3347,7 @@ msgstr "" "- 'Y' - eje vertical o\n" "- 'Ángulo': un ángulo personalizado para la inclinación de la ranura" -#: flatcamEditors/FlatCAMExcEditor.py:1878 +#: flatcamEditors/FlatCAMExcEditor.py:1877 msgid "" "Angle at which the slot is placed.\n" "The precision is of max 2 decimals.\n" @@ -3832,15 +3359,15 @@ msgstr "" "El valor mínimo es: -360 grados.\n" "El valor máximo es: 360.00 grados." -#: flatcamEditors/FlatCAMExcEditor.py:1911 +#: flatcamEditors/FlatCAMExcEditor.py:1910 msgid "Slot Array Parameters" msgstr "Parámetros de matriz de ranuras" -#: flatcamEditors/FlatCAMExcEditor.py:1913 +#: flatcamEditors/FlatCAMExcEditor.py:1912 msgid "Parameters for the array of slots (linear or circular array)" msgstr "Parámetros para la matriz de ranuras (matriz lineal o circular)" -#: flatcamEditors/FlatCAMExcEditor.py:1922 +#: flatcamEditors/FlatCAMExcEditor.py:1921 msgid "" "Select the type of slot array to create.\n" "It can be Linear X(Y) or Circular" @@ -3848,15 +3375,41 @@ msgstr "" "Seleccione el tipo de matriz de ranuras para crear.\n" "Puede ser lineal X (Y) o circular" -#: flatcamEditors/FlatCAMExcEditor.py:1934 flatcamGUI/PreferencesUI.py:4022 +#: flatcamEditors/FlatCAMExcEditor.py:1933 flatcamGUI/PreferencesUI.py:4022 msgid "Nr of slots" msgstr "Nro. De ranuras" -#: flatcamEditors/FlatCAMExcEditor.py:1935 flatcamGUI/PreferencesUI.py:4024 +#: flatcamEditors/FlatCAMExcEditor.py:1934 flatcamGUI/PreferencesUI.py:4024 msgid "Specify how many slots to be in the array." msgstr "Especifique cuántas ranuras debe haber en la matriz." -#: flatcamEditors/FlatCAMExcEditor.py:2571 +#: flatcamEditors/FlatCAMExcEditor.py:2452 +#: flatcamObjects/FlatCAMExcellon.py:410 +msgid "Total Drills" +msgstr "Taladros totales" + +#: flatcamEditors/FlatCAMExcEditor.py:2484 +#: flatcamObjects/FlatCAMExcellon.py:441 +msgid "Total Slots" +msgstr "Ranuras totales" + +#: flatcamEditors/FlatCAMExcEditor.py:2559 +#: flatcamEditors/FlatCAMGeoEditor.py:1076 +#: flatcamEditors/FlatCAMGeoEditor.py:1117 +#: flatcamEditors/FlatCAMGeoEditor.py:1145 +#: flatcamEditors/FlatCAMGeoEditor.py:1173 +#: flatcamEditors/FlatCAMGeoEditor.py:1217 +#: flatcamEditors/FlatCAMGeoEditor.py:1252 +#: flatcamEditors/FlatCAMGeoEditor.py:1280 +#: flatcamObjects/FlatCAMGeometry.py:571 flatcamObjects/FlatCAMGeometry.py:1005 +#: flatcamObjects/FlatCAMGeometry.py:1726 +#: flatcamObjects/FlatCAMGeometry.py:2370 flatcamTools/ToolNCC.py:1493 +#: flatcamTools/ToolPaint.py:1244 flatcamTools/ToolPaint.py:1415 +#: flatcamTools/ToolSolderPaste.py:883 flatcamTools/ToolSolderPaste.py:956 +msgid "Wrong value format entered, use a number." +msgstr "Formato de valor incorrecto introducido, use un número." + +#: flatcamEditors/FlatCAMExcEditor.py:2570 msgid "" "Tool already in the original or actual tool list.\n" "Save and reedit Excellon if you need to add this tool. " @@ -3864,83 +3417,83 @@ msgstr "" "Herramienta ya en la lista de herramientas original o real.\n" "Guarde y reedite Excellon si necesita agregar esta herramienta. " -#: flatcamEditors/FlatCAMExcEditor.py:2580 flatcamGUI/FlatCAMGUI.py:4009 +#: flatcamEditors/FlatCAMExcEditor.py:2579 flatcamGUI/FlatCAMGUI.py:4009 msgid "Added new tool with dia" msgstr "Nueva herramienta agregada con dia" -#: flatcamEditors/FlatCAMExcEditor.py:2613 +#: flatcamEditors/FlatCAMExcEditor.py:2612 msgid "Select a tool in Tool Table" msgstr "Seleccione una herramienta en la tabla de herramientas" -#: flatcamEditors/FlatCAMExcEditor.py:2643 +#: flatcamEditors/FlatCAMExcEditor.py:2642 msgid "Deleted tool with diameter" msgstr "Herramienta eliminada con diámetro" -#: flatcamEditors/FlatCAMExcEditor.py:2793 +#: flatcamEditors/FlatCAMExcEditor.py:2790 msgid "Done. Tool edit completed." msgstr "Hecho. Edición de herramienta completada." -#: flatcamEditors/FlatCAMExcEditor.py:3350 +#: flatcamEditors/FlatCAMExcEditor.py:3352 msgid "There are no Tools definitions in the file. Aborting Excellon creation." msgstr "" "No hay definiciones de herramientas en el archivo. Anulando la creación de " "Excellon." -#: flatcamEditors/FlatCAMExcEditor.py:3354 +#: flatcamEditors/FlatCAMExcEditor.py:3356 msgid "An internal error has ocurred. See Shell.\n" msgstr "Ha ocurrido un error interno. Ver concha.\n" -#: flatcamEditors/FlatCAMExcEditor.py:3359 +#: flatcamEditors/FlatCAMExcEditor.py:3361 msgid "Creating Excellon." msgstr "Creación de Excellon." -#: flatcamEditors/FlatCAMExcEditor.py:3371 +#: flatcamEditors/FlatCAMExcEditor.py:3373 msgid "Excellon editing finished." msgstr "Excelente edición terminada." -#: flatcamEditors/FlatCAMExcEditor.py:3388 +#: flatcamEditors/FlatCAMExcEditor.py:3390 msgid "Cancelled. There is no Tool/Drill selected" msgstr "Cancelado. No hay herramienta / taladro seleccionado" -#: flatcamEditors/FlatCAMExcEditor.py:4001 +#: flatcamEditors/FlatCAMExcEditor.py:4003 msgid "Done. Drill(s) deleted." msgstr "Hecho. Taladro (s) eliminado (s)." -#: flatcamEditors/FlatCAMExcEditor.py:4074 -#: flatcamEditors/FlatCAMExcEditor.py:4084 +#: flatcamEditors/FlatCAMExcEditor.py:4076 +#: flatcamEditors/FlatCAMExcEditor.py:4086 #: flatcamEditors/FlatCAMGrbEditor.py:4897 msgid "Click on the circular array Center position" msgstr "Haga clic en la posición del centro matriz circular" -#: flatcamEditors/FlatCAMGeoEditor.py:86 +#: flatcamEditors/FlatCAMGeoEditor.py:85 msgid "Buffer distance:" msgstr "Dist. de amortiguación:" -#: flatcamEditors/FlatCAMGeoEditor.py:87 +#: flatcamEditors/FlatCAMGeoEditor.py:86 msgid "Buffer corner:" msgstr "Rincón del búfer:" -#: flatcamEditors/FlatCAMGeoEditor.py:89 +#: flatcamEditors/FlatCAMGeoEditor.py:88 msgid "" "There are 3 types of corners:\n" " - 'Round': the corner is rounded for exterior buffer.\n" -" - 'Square:' the corner is met in a sharp angle for exterior buffer.\n" -" - 'Beveled:' the corner is a line that directly connects the features " +" - 'Square': the corner is met in a sharp angle for exterior buffer.\n" +" - 'Beveled': the corner is a line that directly connects the features " "meeting in the corner" msgstr "" "Hay 3 tipos de esquinas:\n" -"  - 'Redondo': la esquina está redondeada para el búfer exterior.\n" -"  - 'Cuadrado:' la esquina se encuentra en un ángulo agudo para el búfer " +" - 'Redondo': la esquina está redondeada para el búfer exterior.\n" +" - 'Cuadrado:' la esquina se encuentra en un ángulo agudo para el búfer " "exterior.\n" -"  - 'Biselado:' la esquina es una línea que conecta directamente las " +" - 'Biselado:' la esquina es una línea que conecta directamente las " "funciones que se encuentran en la esquina" -#: flatcamEditors/FlatCAMGeoEditor.py:95 +#: flatcamEditors/FlatCAMGeoEditor.py:94 #: flatcamEditors/FlatCAMGrbEditor.py:2628 msgid "Round" msgstr "Redondo" -#: flatcamEditors/FlatCAMGeoEditor.py:96 +#: flatcamEditors/FlatCAMGeoEditor.py:95 #: flatcamEditors/FlatCAMGrbEditor.py:2629 flatcamGUI/PreferencesUI.py:5606 #: flatcamGUI/PreferencesUI.py:6130 flatcamGUI/PreferencesUI.py:7564 #: flatcamGUI/PreferencesUI.py:8167 flatcamGUI/PreferencesUI.py:8274 @@ -3952,63 +3505,72 @@ msgstr "Redondo" msgid "Square" msgstr "Cuadrado" -#: flatcamEditors/FlatCAMGeoEditor.py:97 +#: flatcamEditors/FlatCAMGeoEditor.py:96 #: flatcamEditors/FlatCAMGrbEditor.py:2630 msgid "Beveled" msgstr "Biselado" -#: flatcamEditors/FlatCAMGeoEditor.py:104 +#: flatcamEditors/FlatCAMGeoEditor.py:103 msgid "Buffer Interior" msgstr "Interior del amortiguador" -#: flatcamEditors/FlatCAMGeoEditor.py:106 +#: flatcamEditors/FlatCAMGeoEditor.py:105 msgid "Buffer Exterior" msgstr "Amortiguador exterior" -#: flatcamEditors/FlatCAMGeoEditor.py:112 +#: flatcamEditors/FlatCAMGeoEditor.py:111 msgid "Full Buffer" msgstr "Buffer lleno" -#: flatcamEditors/FlatCAMGeoEditor.py:133 -#: flatcamEditors/FlatCAMGeoEditor.py:3018 flatcamGUI/FlatCAMGUI.py:1913 +#: flatcamEditors/FlatCAMGeoEditor.py:132 +#: flatcamEditors/FlatCAMGeoEditor.py:3017 flatcamGUI/FlatCAMGUI.py:1913 #: flatcamGUI/PreferencesUI.py:2786 msgid "Buffer Tool" msgstr "Herramienta Buffer" -#: flatcamEditors/FlatCAMGeoEditor.py:145 -#: flatcamEditors/FlatCAMGeoEditor.py:162 -#: flatcamEditors/FlatCAMGeoEditor.py:179 -#: flatcamEditors/FlatCAMGeoEditor.py:3037 -#: flatcamEditors/FlatCAMGeoEditor.py:3065 -#: flatcamEditors/FlatCAMGeoEditor.py:3093 +#: flatcamEditors/FlatCAMGeoEditor.py:144 +#: flatcamEditors/FlatCAMGeoEditor.py:161 +#: flatcamEditors/FlatCAMGeoEditor.py:178 +#: flatcamEditors/FlatCAMGeoEditor.py:3036 +#: flatcamEditors/FlatCAMGeoEditor.py:3064 +#: flatcamEditors/FlatCAMGeoEditor.py:3092 #: flatcamEditors/FlatCAMGrbEditor.py:4950 msgid "Buffer distance value is missing or wrong format. Add it and retry." msgstr "" "Falta el valor de la distancia del búfer o el formato es incorrecto. " "Agrégalo y vuelve a intentarlo." -#: flatcamEditors/FlatCAMGeoEditor.py:243 +#: flatcamEditors/FlatCAMGeoEditor.py:242 msgid "Font" msgstr "Font" -#: flatcamEditors/FlatCAMGeoEditor.py:324 flatcamGUI/FlatCAMGUI.py:2193 +#: flatcamEditors/FlatCAMGeoEditor.py:323 flatcamGUI/FlatCAMGUI.py:2193 msgid "Text" msgstr "Texto" -#: flatcamEditors/FlatCAMGeoEditor.py:350 +#: flatcamEditors/FlatCAMGeoEditor.py:349 msgid "Text Tool" msgstr "Herramienta de texto" -#: flatcamEditors/FlatCAMGeoEditor.py:440 flatcamGUI/ObjectUI.py:363 +#: flatcamEditors/FlatCAMGeoEditor.py:405 flatcamGUI/FlatCAMGUI.py:496 +#: flatcamGUI/FlatCAMGUI.py:1143 flatcamGUI/ObjectUI.py:817 +#: flatcamGUI/ObjectUI.py:1661 flatcamObjects/FlatCAMExcellon.py:742 +#: flatcamObjects/FlatCAMExcellon.py:1084 flatcamObjects/FlatCAMGeometry.py:731 +#: flatcamTools/ToolNCC.py:331 flatcamTools/ToolNCC.py:797 +#: flatcamTools/ToolPaint.py:314 flatcamTools/ToolPaint.py:767 +msgid "Tool" +msgstr "Herramienta" + +#: flatcamEditors/FlatCAMGeoEditor.py:439 flatcamGUI/ObjectUI.py:363 #: flatcamGUI/PreferencesUI.py:2205 msgid "Tool dia" msgstr "Diá. de la herramienta" -#: flatcamEditors/FlatCAMGeoEditor.py:442 +#: flatcamEditors/FlatCAMGeoEditor.py:441 msgid "Diameter of the tool to be used in the operation." msgstr "Diámetro de la herramienta a utilizar en la operación." -#: flatcamEditors/FlatCAMGeoEditor.py:488 +#: flatcamEditors/FlatCAMGeoEditor.py:487 msgid "" "Algorithm to paint the polygons:\n" "- Standard: Fixed step inwards.\n" @@ -4020,91 +3582,91 @@ msgstr "" "- Basado en semillas: hacia afuera de la semilla.\n" "- Basado en líneas: líneas paralelas." -#: flatcamEditors/FlatCAMGeoEditor.py:507 +#: flatcamEditors/FlatCAMGeoEditor.py:506 msgid "Connect:" msgstr "Conectar:" -#: flatcamEditors/FlatCAMGeoEditor.py:517 +#: flatcamEditors/FlatCAMGeoEditor.py:516 msgid "Contour:" msgstr "Contorno:" -#: flatcamEditors/FlatCAMGeoEditor.py:530 flatcamGUI/FlatCAMGUI.py:2197 +#: flatcamEditors/FlatCAMGeoEditor.py:529 flatcamGUI/FlatCAMGUI.py:2197 msgid "Paint" msgstr "Pintar" -#: flatcamEditors/FlatCAMGeoEditor.py:548 flatcamGUI/FlatCAMGUI.py:909 -#: flatcamGUI/FlatCAMGUI.py:2588 flatcamGUI/ObjectUI.py:2057 +#: flatcamEditors/FlatCAMGeoEditor.py:547 flatcamGUI/FlatCAMGUI.py:909 +#: flatcamGUI/FlatCAMGUI.py:2588 flatcamGUI/ObjectUI.py:2058 #: flatcamTools/ToolPaint.py:43 flatcamTools/ToolPaint.py:738 msgid "Paint Tool" msgstr "Herramienta de pintura" -#: flatcamEditors/FlatCAMGeoEditor.py:584 -#: flatcamEditors/FlatCAMGeoEditor.py:1056 -#: flatcamEditors/FlatCAMGeoEditor.py:3025 -#: flatcamEditors/FlatCAMGeoEditor.py:3053 -#: flatcamEditors/FlatCAMGeoEditor.py:3081 +#: flatcamEditors/FlatCAMGeoEditor.py:583 +#: flatcamEditors/FlatCAMGeoEditor.py:1055 +#: flatcamEditors/FlatCAMGeoEditor.py:3024 +#: flatcamEditors/FlatCAMGeoEditor.py:3052 +#: flatcamEditors/FlatCAMGeoEditor.py:3080 #: flatcamEditors/FlatCAMGeoEditor.py:4502 #: flatcamEditors/FlatCAMGrbEditor.py:5601 msgid "Cancelled. No shape selected." msgstr "Cancelado. Ninguna forma seleccionada." -#: flatcamEditors/FlatCAMGeoEditor.py:597 -#: flatcamEditors/FlatCAMGeoEditor.py:3043 -#: flatcamEditors/FlatCAMGeoEditor.py:3071 -#: flatcamEditors/FlatCAMGeoEditor.py:3099 flatcamGUI/PreferencesUI.py:4149 +#: flatcamEditors/FlatCAMGeoEditor.py:596 +#: flatcamEditors/FlatCAMGeoEditor.py:3042 +#: flatcamEditors/FlatCAMGeoEditor.py:3070 +#: flatcamEditors/FlatCAMGeoEditor.py:3098 flatcamGUI/PreferencesUI.py:4149 #: flatcamTools/ToolProperties.py:117 flatcamTools/ToolProperties.py:162 msgid "Tools" msgstr "Herramientas" -#: flatcamEditors/FlatCAMGeoEditor.py:608 -#: flatcamEditors/FlatCAMGeoEditor.py:992 +#: flatcamEditors/FlatCAMGeoEditor.py:607 +#: flatcamEditors/FlatCAMGeoEditor.py:991 #: flatcamEditors/FlatCAMGrbEditor.py:5140 #: flatcamEditors/FlatCAMGrbEditor.py:5537 flatcamGUI/FlatCAMGUI.py:930 -#: flatcamGUI/FlatCAMGUI.py:2609 flatcamTools/ToolTransform.py:461 +#: flatcamGUI/FlatCAMGUI.py:2609 flatcamTools/ToolTransform.py:460 msgid "Transform Tool" msgstr "Herramienta de transformación" -#: flatcamEditors/FlatCAMGeoEditor.py:609 -#: flatcamEditors/FlatCAMGeoEditor.py:674 +#: flatcamEditors/FlatCAMGeoEditor.py:608 +#: flatcamEditors/FlatCAMGeoEditor.py:673 #: flatcamEditors/FlatCAMGrbEditor.py:5141 #: flatcamEditors/FlatCAMGrbEditor.py:5206 flatcamGUI/PreferencesUI.py:6725 -#: flatcamTools/ToolTransform.py:25 flatcamTools/ToolTransform.py:467 +#: flatcamTools/ToolTransform.py:24 flatcamTools/ToolTransform.py:466 msgid "Rotate" msgstr "Girar" -#: flatcamEditors/FlatCAMGeoEditor.py:610 -#: flatcamEditors/FlatCAMGrbEditor.py:5142 flatcamTools/ToolTransform.py:26 +#: flatcamEditors/FlatCAMGeoEditor.py:609 +#: flatcamEditors/FlatCAMGrbEditor.py:5142 flatcamTools/ToolTransform.py:25 msgid "Skew/Shear" msgstr "Sesgo / cizalla" -#: flatcamEditors/FlatCAMGeoEditor.py:611 +#: flatcamEditors/FlatCAMGeoEditor.py:610 #: flatcamEditors/FlatCAMGrbEditor.py:2677 #: flatcamEditors/FlatCAMGrbEditor.py:5143 flatcamGUI/FlatCAMGUI.py:1048 #: flatcamGUI/FlatCAMGUI.py:2125 flatcamGUI/FlatCAMGUI.py:2240 #: flatcamGUI/FlatCAMGUI.py:2723 flatcamGUI/ObjectUI.py:124 -#: flatcamGUI/PreferencesUI.py:6775 flatcamTools/ToolTransform.py:27 +#: flatcamGUI/PreferencesUI.py:6775 flatcamTools/ToolTransform.py:26 msgid "Scale" msgstr "Escala" -#: flatcamEditors/FlatCAMGeoEditor.py:612 -#: flatcamEditors/FlatCAMGrbEditor.py:5144 flatcamTools/ToolTransform.py:28 +#: flatcamEditors/FlatCAMGeoEditor.py:611 +#: flatcamEditors/FlatCAMGrbEditor.py:5144 flatcamTools/ToolTransform.py:27 msgid "Mirror (Flip)" msgstr "Espejo (Flip)" -#: flatcamEditors/FlatCAMGeoEditor.py:626 +#: flatcamEditors/FlatCAMGeoEditor.py:625 #: flatcamEditors/FlatCAMGrbEditor.py:5158 flatcamGUI/FlatCAMGUI.py:841 #: flatcamGUI/FlatCAMGUI.py:2524 msgid "Editor" msgstr "Editor" -#: flatcamEditors/FlatCAMGeoEditor.py:658 +#: flatcamEditors/FlatCAMGeoEditor.py:657 #: flatcamEditors/FlatCAMGrbEditor.py:5190 msgid "Angle:" msgstr "Ángulo:" -#: flatcamEditors/FlatCAMGeoEditor.py:660 +#: flatcamEditors/FlatCAMGeoEditor.py:659 #: flatcamEditors/FlatCAMGrbEditor.py:5192 flatcamGUI/PreferencesUI.py:6735 -#: flatcamTools/ToolTransform.py:63 +#: flatcamTools/ToolTransform.py:62 msgid "" "Angle for Rotation action, in degrees.\n" "Float number between -360 and 359.\n" @@ -4116,7 +3678,7 @@ msgstr "" "Números positivos para movimiento CW.\n" "Números negativos para movimiento CCW." -#: flatcamEditors/FlatCAMGeoEditor.py:676 +#: flatcamEditors/FlatCAMGeoEditor.py:675 #: flatcamEditors/FlatCAMGrbEditor.py:5208 msgid "" "Rotate the selected shape(s).\n" @@ -4127,13 +3689,13 @@ msgstr "" "El punto de referencia es el centro de\n" "El cuadro delimitador para todas las formas seleccionadas." -#: flatcamEditors/FlatCAMGeoEditor.py:699 +#: flatcamEditors/FlatCAMGeoEditor.py:698 #: flatcamEditors/FlatCAMGrbEditor.py:5231 msgid "Angle X:" msgstr "Ángulo X:" -#: flatcamEditors/FlatCAMGeoEditor.py:701 -#: flatcamEditors/FlatCAMGeoEditor.py:721 +#: flatcamEditors/FlatCAMGeoEditor.py:700 +#: flatcamEditors/FlatCAMGeoEditor.py:720 #: flatcamEditors/FlatCAMGrbEditor.py:5233 #: flatcamEditors/FlatCAMGrbEditor.py:5253 flatcamGUI/PreferencesUI.py:6754 #: flatcamGUI/PreferencesUI.py:6768 flatcamTools/ToolCalibration.py:505 @@ -4145,13 +3707,13 @@ msgstr "" "Ángulo para sesgo de acción, en grados.\n" "Número de flotación entre -360 y 359." -#: flatcamEditors/FlatCAMGeoEditor.py:712 -#: flatcamEditors/FlatCAMGrbEditor.py:5244 flatcamTools/ToolTransform.py:468 +#: flatcamEditors/FlatCAMGeoEditor.py:711 +#: flatcamEditors/FlatCAMGrbEditor.py:5244 flatcamTools/ToolTransform.py:467 msgid "Skew X" msgstr "Sesgo x" -#: flatcamEditors/FlatCAMGeoEditor.py:714 -#: flatcamEditors/FlatCAMGeoEditor.py:734 +#: flatcamEditors/FlatCAMGeoEditor.py:713 +#: flatcamEditors/FlatCAMGeoEditor.py:733 #: flatcamEditors/FlatCAMGrbEditor.py:5246 #: flatcamEditors/FlatCAMGrbEditor.py:5266 msgid "" @@ -4163,33 +3725,33 @@ msgstr "" "El punto de referencia es el centro de\n" "El cuadro delimitador para todas las formas seleccionadas." -#: flatcamEditors/FlatCAMGeoEditor.py:719 +#: flatcamEditors/FlatCAMGeoEditor.py:718 #: flatcamEditors/FlatCAMGrbEditor.py:5251 msgid "Angle Y:" msgstr "Ángulo Y:" -#: flatcamEditors/FlatCAMGeoEditor.py:732 -#: flatcamEditors/FlatCAMGrbEditor.py:5264 flatcamTools/ToolTransform.py:469 +#: flatcamEditors/FlatCAMGeoEditor.py:731 +#: flatcamEditors/FlatCAMGrbEditor.py:5264 flatcamTools/ToolTransform.py:468 msgid "Skew Y" msgstr "Sesgo y" -#: flatcamEditors/FlatCAMGeoEditor.py:760 +#: flatcamEditors/FlatCAMGeoEditor.py:759 #: flatcamEditors/FlatCAMGrbEditor.py:5292 msgid "Factor X:" msgstr "Factor X:" -#: flatcamEditors/FlatCAMGeoEditor.py:762 +#: flatcamEditors/FlatCAMGeoEditor.py:761 #: flatcamEditors/FlatCAMGrbEditor.py:5294 flatcamTools/ToolCalibration.py:469 msgid "Factor for Scale action over X axis." msgstr "Factor para la acción de escala sobre el eje X." -#: flatcamEditors/FlatCAMGeoEditor.py:772 -#: flatcamEditors/FlatCAMGrbEditor.py:5304 flatcamTools/ToolTransform.py:470 +#: flatcamEditors/FlatCAMGeoEditor.py:771 +#: flatcamEditors/FlatCAMGrbEditor.py:5304 flatcamTools/ToolTransform.py:469 msgid "Scale X" msgstr "Escala x" -#: flatcamEditors/FlatCAMGeoEditor.py:774 -#: flatcamEditors/FlatCAMGeoEditor.py:793 +#: flatcamEditors/FlatCAMGeoEditor.py:773 +#: flatcamEditors/FlatCAMGeoEditor.py:792 #: flatcamEditors/FlatCAMGrbEditor.py:5306 #: flatcamEditors/FlatCAMGrbEditor.py:5325 msgid "" @@ -4201,28 +3763,28 @@ msgstr "" "El punto de referencia depende de\n" "El estado de la casilla de verificación Escala de referencia." -#: flatcamEditors/FlatCAMGeoEditor.py:779 +#: flatcamEditors/FlatCAMGeoEditor.py:778 #: flatcamEditors/FlatCAMGrbEditor.py:5311 msgid "Factor Y:" msgstr "Factor Y:" -#: flatcamEditors/FlatCAMGeoEditor.py:781 +#: flatcamEditors/FlatCAMGeoEditor.py:780 #: flatcamEditors/FlatCAMGrbEditor.py:5313 flatcamTools/ToolCalibration.py:481 msgid "Factor for Scale action over Y axis." msgstr "Factor de acción de escala sobre eje Y." -#: flatcamEditors/FlatCAMGeoEditor.py:791 -#: flatcamEditors/FlatCAMGrbEditor.py:5323 flatcamTools/ToolTransform.py:471 +#: flatcamEditors/FlatCAMGeoEditor.py:790 +#: flatcamEditors/FlatCAMGrbEditor.py:5323 flatcamTools/ToolTransform.py:470 msgid "Scale Y" msgstr "Escala Y" -#: flatcamEditors/FlatCAMGeoEditor.py:800 +#: flatcamEditors/FlatCAMGeoEditor.py:799 #: flatcamEditors/FlatCAMGrbEditor.py:5332 flatcamGUI/PreferencesUI.py:6804 -#: flatcamTools/ToolTransform.py:190 +#: flatcamTools/ToolTransform.py:189 msgid "Link" msgstr "Enlazar" -#: flatcamEditors/FlatCAMGeoEditor.py:802 +#: flatcamEditors/FlatCAMGeoEditor.py:801 #: flatcamEditors/FlatCAMGrbEditor.py:5334 msgid "" "Scale the selected shape(s)\n" @@ -4231,13 +3793,13 @@ msgstr "" "Escala las formas seleccionadas\n" "Utilizando el Scale Factor X para ambos ejes." -#: flatcamEditors/FlatCAMGeoEditor.py:808 +#: flatcamEditors/FlatCAMGeoEditor.py:807 #: flatcamEditors/FlatCAMGrbEditor.py:5340 flatcamGUI/PreferencesUI.py:6812 -#: flatcamTools/ToolTransform.py:197 +#: flatcamTools/ToolTransform.py:196 msgid "Scale Reference" msgstr "Referencia de escala" -#: flatcamEditors/FlatCAMGeoEditor.py:810 +#: flatcamEditors/FlatCAMGeoEditor.py:809 #: flatcamEditors/FlatCAMGrbEditor.py:5342 msgid "" "Scale the selected shape(s)\n" @@ -4250,23 +3812,23 @@ msgstr "" "y el centro del cuadro delimitador más grande.\n" "de las formas seleccionadas cuando no está marcada." -#: flatcamEditors/FlatCAMGeoEditor.py:838 +#: flatcamEditors/FlatCAMGeoEditor.py:837 #: flatcamEditors/FlatCAMGrbEditor.py:5371 msgid "Value X:" msgstr "Valor X:" -#: flatcamEditors/FlatCAMGeoEditor.py:840 +#: flatcamEditors/FlatCAMGeoEditor.py:839 #: flatcamEditors/FlatCAMGrbEditor.py:5373 msgid "Value for Offset action on X axis." msgstr "Valor para la acción Offset en el eje X." -#: flatcamEditors/FlatCAMGeoEditor.py:850 -#: flatcamEditors/FlatCAMGrbEditor.py:5383 flatcamTools/ToolTransform.py:474 +#: flatcamEditors/FlatCAMGeoEditor.py:849 +#: flatcamEditors/FlatCAMGrbEditor.py:5383 flatcamTools/ToolTransform.py:473 msgid "Offset X" msgstr "Offset X" -#: flatcamEditors/FlatCAMGeoEditor.py:852 -#: flatcamEditors/FlatCAMGeoEditor.py:872 +#: flatcamEditors/FlatCAMGeoEditor.py:851 +#: flatcamEditors/FlatCAMGeoEditor.py:871 #: flatcamEditors/FlatCAMGrbEditor.py:5385 #: flatcamEditors/FlatCAMGrbEditor.py:5405 msgid "" @@ -4278,28 +3840,28 @@ msgstr "" "El punto de referencia es el centro de\n" "El cuadro delimitador para todas las formas seleccionadas.\n" -#: flatcamEditors/FlatCAMGeoEditor.py:858 +#: flatcamEditors/FlatCAMGeoEditor.py:857 #: flatcamEditors/FlatCAMGrbEditor.py:5391 msgid "Value Y:" msgstr "Valor Y:" -#: flatcamEditors/FlatCAMGeoEditor.py:860 +#: flatcamEditors/FlatCAMGeoEditor.py:859 #: flatcamEditors/FlatCAMGrbEditor.py:5393 msgid "Value for Offset action on Y axis." msgstr "Valor para la acción Offset en el eje Y." -#: flatcamEditors/FlatCAMGeoEditor.py:870 -#: flatcamEditors/FlatCAMGrbEditor.py:5403 flatcamTools/ToolTransform.py:475 +#: flatcamEditors/FlatCAMGeoEditor.py:869 +#: flatcamEditors/FlatCAMGrbEditor.py:5403 flatcamTools/ToolTransform.py:474 msgid "Offset Y" msgstr "Offset Y" -#: flatcamEditors/FlatCAMGeoEditor.py:901 -#: flatcamEditors/FlatCAMGrbEditor.py:5434 flatcamTools/ToolTransform.py:476 +#: flatcamEditors/FlatCAMGeoEditor.py:900 +#: flatcamEditors/FlatCAMGrbEditor.py:5434 flatcamTools/ToolTransform.py:475 msgid "Flip on X" msgstr "Voltear en X" -#: flatcamEditors/FlatCAMGeoEditor.py:903 -#: flatcamEditors/FlatCAMGeoEditor.py:910 +#: flatcamEditors/FlatCAMGeoEditor.py:902 +#: flatcamEditors/FlatCAMGeoEditor.py:909 #: flatcamEditors/FlatCAMGrbEditor.py:5436 #: flatcamEditors/FlatCAMGrbEditor.py:5443 msgid "" @@ -4309,17 +3871,17 @@ msgstr "" "Voltea la (s) forma (s) seleccionada (s) sobre el eje X.\n" "No crea una nueva forma." -#: flatcamEditors/FlatCAMGeoEditor.py:908 -#: flatcamEditors/FlatCAMGrbEditor.py:5441 flatcamTools/ToolTransform.py:477 +#: flatcamEditors/FlatCAMGeoEditor.py:907 +#: flatcamEditors/FlatCAMGrbEditor.py:5441 flatcamTools/ToolTransform.py:476 msgid "Flip on Y" msgstr "Voltear en Y" -#: flatcamEditors/FlatCAMGeoEditor.py:916 +#: flatcamEditors/FlatCAMGeoEditor.py:915 #: flatcamEditors/FlatCAMGrbEditor.py:5449 msgid "Ref Pt" msgstr "Punto de Ref" -#: flatcamEditors/FlatCAMGeoEditor.py:918 +#: flatcamEditors/FlatCAMGeoEditor.py:917 #: flatcamEditors/FlatCAMGrbEditor.py:5451 msgid "" "Flip the selected shape(s)\n" @@ -4342,13 +3904,13 @@ msgstr "" "O ingrese las coords en formato (x, y) en el\n" "Campo de entrada de puntos y haga clic en Girar en X (Y)" -#: flatcamEditors/FlatCAMGeoEditor.py:930 +#: flatcamEditors/FlatCAMGeoEditor.py:929 #: flatcamEditors/FlatCAMGrbEditor.py:5463 msgid "Point:" msgstr "Punto:" -#: flatcamEditors/FlatCAMGeoEditor.py:932 -#: flatcamEditors/FlatCAMGrbEditor.py:5465 flatcamTools/ToolTransform.py:300 +#: flatcamEditors/FlatCAMGeoEditor.py:931 +#: flatcamEditors/FlatCAMGrbEditor.py:5465 flatcamTools/ToolTransform.py:299 msgid "" "Coordinates in format (x, y) used as reference for mirroring.\n" "The 'x' in (x, y) will be used when using Flip on X and\n" @@ -4359,8 +3921,8 @@ msgstr "" "La 'x' en (x, y) se usará cuando se usa Flip en X y\n" "la 'y' en (x, y) se usará cuando se use Flip en Y." -#: flatcamEditors/FlatCAMGeoEditor.py:942 -#: flatcamEditors/FlatCAMGrbEditor.py:5477 flatcamTools/ToolTransform.py:310 +#: flatcamEditors/FlatCAMGeoEditor.py:941 +#: flatcamEditors/FlatCAMGrbEditor.py:5477 flatcamTools/ToolTransform.py:309 msgid "" "The point coordinates can be captured by\n" "left click on canvas together with pressing\n" @@ -4370,354 +3932,354 @@ msgstr "" "Haga clic izquierdo en el lienzo junto con la presión\n" "Tecla Shift. Luego haga clic en el botón Agregar para insertar." -#: flatcamEditors/FlatCAMGeoEditor.py:1305 +#: flatcamEditors/FlatCAMGeoEditor.py:1304 #: flatcamEditors/FlatCAMGrbEditor.py:5785 msgid "No shape selected. Please Select a shape to rotate!" msgstr "" "Ninguna forma seleccionada. Por favor, seleccione una forma para rotar!" -#: flatcamEditors/FlatCAMGeoEditor.py:1308 -#: flatcamEditors/FlatCAMGrbEditor.py:5788 flatcamTools/ToolTransform.py:680 +#: flatcamEditors/FlatCAMGeoEditor.py:1307 +#: flatcamEditors/FlatCAMGrbEditor.py:5788 flatcamTools/ToolTransform.py:679 msgid "Appying Rotate" msgstr "Aplicando rotar" -#: flatcamEditors/FlatCAMGeoEditor.py:1334 +#: flatcamEditors/FlatCAMGeoEditor.py:1333 #: flatcamEditors/FlatCAMGrbEditor.py:5820 msgid "Done. Rotate completed." msgstr "Hecho. Rotación completada." -#: flatcamEditors/FlatCAMGeoEditor.py:1336 +#: flatcamEditors/FlatCAMGeoEditor.py:1335 msgid "Rotation action was not executed" msgstr "La acción de rotación no se ejecutó" -#: flatcamEditors/FlatCAMGeoEditor.py:1355 +#: flatcamEditors/FlatCAMGeoEditor.py:1354 #: flatcamEditors/FlatCAMGrbEditor.py:5839 msgid "No shape selected. Please Select a shape to flip!" msgstr "" "Ninguna forma seleccionada. Por favor, seleccione una forma para voltear!" -#: flatcamEditors/FlatCAMGeoEditor.py:1358 -#: flatcamEditors/FlatCAMGrbEditor.py:5842 flatcamTools/ToolTransform.py:729 +#: flatcamEditors/FlatCAMGeoEditor.py:1357 +#: flatcamEditors/FlatCAMGrbEditor.py:5842 flatcamTools/ToolTransform.py:728 msgid "Applying Flip" msgstr "Aplicando Voltear" -#: flatcamEditors/FlatCAMGeoEditor.py:1387 -#: flatcamEditors/FlatCAMGrbEditor.py:5880 flatcamTools/ToolTransform.py:770 +#: flatcamEditors/FlatCAMGeoEditor.py:1386 +#: flatcamEditors/FlatCAMGrbEditor.py:5880 flatcamTools/ToolTransform.py:769 msgid "Flip on the Y axis done" msgstr "Voltear sobre el eje Y hecho" -#: flatcamEditors/FlatCAMGeoEditor.py:1391 -#: flatcamEditors/FlatCAMGrbEditor.py:5889 flatcamTools/ToolTransform.py:779 +#: flatcamEditors/FlatCAMGeoEditor.py:1390 +#: flatcamEditors/FlatCAMGrbEditor.py:5889 flatcamTools/ToolTransform.py:778 msgid "Flip on the X axis done" msgstr "Voltear en el eje X hecho" -#: flatcamEditors/FlatCAMGeoEditor.py:1399 +#: flatcamEditors/FlatCAMGeoEditor.py:1398 msgid "Flip action was not executed" msgstr "La acción de voltear no se ejecutó" -#: flatcamEditors/FlatCAMGeoEditor.py:1417 +#: flatcamEditors/FlatCAMGeoEditor.py:1416 #: flatcamEditors/FlatCAMGrbEditor.py:5909 msgid "No shape selected. Please Select a shape to shear/skew!" msgstr "" "Ninguna forma seleccionada. Por favor, seleccione una forma para esquilar / " "sesgar!" -#: flatcamEditors/FlatCAMGeoEditor.py:1420 -#: flatcamEditors/FlatCAMGrbEditor.py:5912 flatcamTools/ToolTransform.py:802 +#: flatcamEditors/FlatCAMGeoEditor.py:1419 +#: flatcamEditors/FlatCAMGrbEditor.py:5912 flatcamTools/ToolTransform.py:801 msgid "Applying Skew" msgstr "Aplicando Sesgo" -#: flatcamEditors/FlatCAMGeoEditor.py:1443 +#: flatcamEditors/FlatCAMGeoEditor.py:1442 #: flatcamEditors/FlatCAMGrbEditor.py:5946 msgid "Skew on the X axis done" msgstr "Sesgar sobre el eje X hecho" -#: flatcamEditors/FlatCAMGeoEditor.py:1445 +#: flatcamEditors/FlatCAMGeoEditor.py:1444 #: flatcamEditors/FlatCAMGrbEditor.py:5948 msgid "Skew on the Y axis done" msgstr "Sesgar sobre el eje Y hecho" -#: flatcamEditors/FlatCAMGeoEditor.py:1448 +#: flatcamEditors/FlatCAMGeoEditor.py:1447 msgid "Skew action was not executed" msgstr "La acción sesgada no se ejecutó" -#: flatcamEditors/FlatCAMGeoEditor.py:1470 +#: flatcamEditors/FlatCAMGeoEditor.py:1469 #: flatcamEditors/FlatCAMGrbEditor.py:5970 msgid "No shape selected. Please Select a shape to scale!" msgstr "Ninguna forma seleccionada. Por favor, seleccione una forma a escala!" -#: flatcamEditors/FlatCAMGeoEditor.py:1473 -#: flatcamEditors/FlatCAMGrbEditor.py:5973 flatcamTools/ToolTransform.py:849 +#: flatcamEditors/FlatCAMGeoEditor.py:1472 +#: flatcamEditors/FlatCAMGrbEditor.py:5973 flatcamTools/ToolTransform.py:847 msgid "Applying Scale" msgstr "Aplicando la escala" -#: flatcamEditors/FlatCAMGeoEditor.py:1505 +#: flatcamEditors/FlatCAMGeoEditor.py:1504 #: flatcamEditors/FlatCAMGrbEditor.py:6010 msgid "Scale on the X axis done" msgstr "Escala en el eje X hecho" -#: flatcamEditors/FlatCAMGeoEditor.py:1507 +#: flatcamEditors/FlatCAMGeoEditor.py:1506 #: flatcamEditors/FlatCAMGrbEditor.py:6012 msgid "Scale on the Y axis done" msgstr "Escala en el eje Y hecho" -#: flatcamEditors/FlatCAMGeoEditor.py:1509 +#: flatcamEditors/FlatCAMGeoEditor.py:1508 msgid "Scale action was not executed" msgstr "La acción de escala no se ejecutó" -#: flatcamEditors/FlatCAMGeoEditor.py:1524 +#: flatcamEditors/FlatCAMGeoEditor.py:1523 #: flatcamEditors/FlatCAMGrbEditor.py:6029 msgid "No shape selected. Please Select a shape to offset!" msgstr "" "Ninguna forma seleccionada. Por favor, seleccione una forma para compensar!" -#: flatcamEditors/FlatCAMGeoEditor.py:1527 -#: flatcamEditors/FlatCAMGrbEditor.py:6032 flatcamTools/ToolTransform.py:901 +#: flatcamEditors/FlatCAMGeoEditor.py:1526 +#: flatcamEditors/FlatCAMGrbEditor.py:6032 flatcamTools/ToolTransform.py:897 msgid "Applying Offset" msgstr "Aplicando Offset" -#: flatcamEditors/FlatCAMGeoEditor.py:1537 +#: flatcamEditors/FlatCAMGeoEditor.py:1536 #: flatcamEditors/FlatCAMGrbEditor.py:6053 msgid "Offset on the X axis done" msgstr "Offset en el eje X hecho" -#: flatcamEditors/FlatCAMGeoEditor.py:1539 +#: flatcamEditors/FlatCAMGeoEditor.py:1538 #: flatcamEditors/FlatCAMGrbEditor.py:6055 msgid "Offset on the Y axis done" msgstr "Offset en el eje Y hecho" -#: flatcamEditors/FlatCAMGeoEditor.py:1542 +#: flatcamEditors/FlatCAMGeoEditor.py:1541 msgid "Offset action was not executed" msgstr "La acción de desplazamiento no se ejecutó" -#: flatcamEditors/FlatCAMGeoEditor.py:1546 +#: flatcamEditors/FlatCAMGeoEditor.py:1545 #: flatcamEditors/FlatCAMGrbEditor.py:6062 msgid "Rotate ..." msgstr "Girar ..." -#: flatcamEditors/FlatCAMGeoEditor.py:1547 -#: flatcamEditors/FlatCAMGeoEditor.py:1602 -#: flatcamEditors/FlatCAMGeoEditor.py:1619 +#: flatcamEditors/FlatCAMGeoEditor.py:1546 +#: flatcamEditors/FlatCAMGeoEditor.py:1601 +#: flatcamEditors/FlatCAMGeoEditor.py:1618 #: flatcamEditors/FlatCAMGrbEditor.py:6063 #: flatcamEditors/FlatCAMGrbEditor.py:6112 #: flatcamEditors/FlatCAMGrbEditor.py:6127 msgid "Enter an Angle Value (degrees)" msgstr "Ingrese un valor de ángulo (grados)" -#: flatcamEditors/FlatCAMGeoEditor.py:1556 +#: flatcamEditors/FlatCAMGeoEditor.py:1555 #: flatcamEditors/FlatCAMGrbEditor.py:6071 msgid "Geometry shape rotate done" msgstr "Forma de geometría rotar hecho" -#: flatcamEditors/FlatCAMGeoEditor.py:1560 +#: flatcamEditors/FlatCAMGeoEditor.py:1559 #: flatcamEditors/FlatCAMGrbEditor.py:6074 msgid "Geometry shape rotate cancelled" msgstr "Rotación de forma de geometría cancelada" -#: flatcamEditors/FlatCAMGeoEditor.py:1565 +#: flatcamEditors/FlatCAMGeoEditor.py:1564 #: flatcamEditors/FlatCAMGrbEditor.py:6079 msgid "Offset on X axis ..." msgstr "Offset en el eje X ..." -#: flatcamEditors/FlatCAMGeoEditor.py:1566 -#: flatcamEditors/FlatCAMGeoEditor.py:1585 +#: flatcamEditors/FlatCAMGeoEditor.py:1565 +#: flatcamEditors/FlatCAMGeoEditor.py:1584 #: flatcamEditors/FlatCAMGrbEditor.py:6080 #: flatcamEditors/FlatCAMGrbEditor.py:6097 msgid "Enter a distance Value" msgstr "Ingrese un valor de distancia" -#: flatcamEditors/FlatCAMGeoEditor.py:1575 +#: flatcamEditors/FlatCAMGeoEditor.py:1574 #: flatcamEditors/FlatCAMGrbEditor.py:6088 msgid "Geometry shape offset on X axis done" msgstr "Forma de geometría compensada en el eje X hecho" -#: flatcamEditors/FlatCAMGeoEditor.py:1579 +#: flatcamEditors/FlatCAMGeoEditor.py:1578 #: flatcamEditors/FlatCAMGrbEditor.py:6091 msgid "Geometry shape offset X cancelled" msgstr "Desplazamiento de forma de geometría X cancelado" -#: flatcamEditors/FlatCAMGeoEditor.py:1584 +#: flatcamEditors/FlatCAMGeoEditor.py:1583 #: flatcamEditors/FlatCAMGrbEditor.py:6096 msgid "Offset on Y axis ..." msgstr "Offset en eje Y ..." -#: flatcamEditors/FlatCAMGeoEditor.py:1594 +#: flatcamEditors/FlatCAMGeoEditor.py:1593 #: flatcamEditors/FlatCAMGrbEditor.py:6105 msgid "Geometry shape offset on Y axis done" msgstr "Desplazamiento de forma de geometría en el eje Y hecho" -#: flatcamEditors/FlatCAMGeoEditor.py:1598 +#: flatcamEditors/FlatCAMGeoEditor.py:1597 msgid "Geometry shape offset on Y axis canceled" msgstr "Desplazamiento de forma de geometría en eje Y cancelado" -#: flatcamEditors/FlatCAMGeoEditor.py:1601 +#: flatcamEditors/FlatCAMGeoEditor.py:1600 #: flatcamEditors/FlatCAMGrbEditor.py:6111 msgid "Skew on X axis ..." msgstr "Sesgar en el eje X ..." -#: flatcamEditors/FlatCAMGeoEditor.py:1611 +#: flatcamEditors/FlatCAMGeoEditor.py:1610 #: flatcamEditors/FlatCAMGrbEditor.py:6120 msgid "Geometry shape skew on X axis done" msgstr "Forma de geometría sesgada en el eje X hecho" -#: flatcamEditors/FlatCAMGeoEditor.py:1615 +#: flatcamEditors/FlatCAMGeoEditor.py:1614 msgid "Geometry shape skew on X axis canceled" msgstr "Forma geométrica sesgada en el eje X cancelada" -#: flatcamEditors/FlatCAMGeoEditor.py:1618 +#: flatcamEditors/FlatCAMGeoEditor.py:1617 #: flatcamEditors/FlatCAMGrbEditor.py:6126 msgid "Skew on Y axis ..." msgstr "Sesgar en el eje Y ..." -#: flatcamEditors/FlatCAMGeoEditor.py:1628 +#: flatcamEditors/FlatCAMGeoEditor.py:1627 #: flatcamEditors/FlatCAMGrbEditor.py:6135 msgid "Geometry shape skew on Y axis done" msgstr "Forma de geometría sesgada en el eje Y hecho" -#: flatcamEditors/FlatCAMGeoEditor.py:1632 +#: flatcamEditors/FlatCAMGeoEditor.py:1631 msgid "Geometry shape skew on Y axis canceled" msgstr "Forma geométrica sesgada en el eje Y cancelada" -#: flatcamEditors/FlatCAMGeoEditor.py:2009 -#: flatcamEditors/FlatCAMGeoEditor.py:2080 +#: flatcamEditors/FlatCAMGeoEditor.py:2008 +#: flatcamEditors/FlatCAMGeoEditor.py:2079 #: flatcamEditors/FlatCAMGrbEditor.py:1435 #: flatcamEditors/FlatCAMGrbEditor.py:1513 msgid "Click on Center point ..." msgstr "Haga clic en el punto central ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2022 +#: flatcamEditors/FlatCAMGeoEditor.py:2021 #: flatcamEditors/FlatCAMGrbEditor.py:1445 msgid "Click on Perimeter point to complete ..." msgstr "Haga clic en el punto del perímetro para completar ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2054 +#: flatcamEditors/FlatCAMGeoEditor.py:2053 msgid "Done. Adding Circle completed." msgstr "Hecho. Añadiendo círculo completado." -#: flatcamEditors/FlatCAMGeoEditor.py:2108 +#: flatcamEditors/FlatCAMGeoEditor.py:2107 #: flatcamEditors/FlatCAMGrbEditor.py:1546 msgid "Click on Start point ..." msgstr "Haga clic en el punto de inicio ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2110 +#: flatcamEditors/FlatCAMGeoEditor.py:2109 #: flatcamEditors/FlatCAMGrbEditor.py:1548 msgid "Click on Point3 ..." msgstr "Haga clic en el punto 3 ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2112 +#: flatcamEditors/FlatCAMGeoEditor.py:2111 #: flatcamEditors/FlatCAMGrbEditor.py:1550 msgid "Click on Stop point ..." msgstr "Haga clic en el punto de parada ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2117 +#: flatcamEditors/FlatCAMGeoEditor.py:2116 #: flatcamEditors/FlatCAMGrbEditor.py:1555 msgid "Click on Stop point to complete ..." msgstr "Haga clic en el punto de parada para completar ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2119 +#: flatcamEditors/FlatCAMGeoEditor.py:2118 #: flatcamEditors/FlatCAMGrbEditor.py:1557 msgid "Click on Point2 to complete ..." msgstr "Haga clic en el punto 2 para completar ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2121 +#: flatcamEditors/FlatCAMGeoEditor.py:2120 #: flatcamEditors/FlatCAMGrbEditor.py:1559 msgid "Click on Center point to complete ..." msgstr "Haga clic en el punto central para completar ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2133 +#: flatcamEditors/FlatCAMGeoEditor.py:2132 #, python-format msgid "Direction: %s" msgstr "Direccion: %s" -#: flatcamEditors/FlatCAMGeoEditor.py:2147 +#: flatcamEditors/FlatCAMGeoEditor.py:2146 #: flatcamEditors/FlatCAMGrbEditor.py:1585 msgid "Mode: Start -> Stop -> Center. Click on Start point ..." msgstr "Modo: Inicio -> Detener -> Centro. Haga clic en el punto de inicio ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2150 +#: flatcamEditors/FlatCAMGeoEditor.py:2149 #: flatcamEditors/FlatCAMGrbEditor.py:1588 msgid "Mode: Point1 -> Point3 -> Point2. Click on Point1 ..." msgstr "Modo: Punto1 -> Punto3 -> Punto2. Haga clic en el punto 1 ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2153 +#: flatcamEditors/FlatCAMGeoEditor.py:2152 #: flatcamEditors/FlatCAMGrbEditor.py:1591 msgid "Mode: Center -> Start -> Stop. Click on Center point ..." msgstr "Modo: Centro -> Iniciar -> Detener. Haga clic en el punto central ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2294 +#: flatcamEditors/FlatCAMGeoEditor.py:2293 msgid "Done. Arc completed." msgstr "Hecho. Arco completado." -#: flatcamEditors/FlatCAMGeoEditor.py:2325 -#: flatcamEditors/FlatCAMGeoEditor.py:2398 +#: flatcamEditors/FlatCAMGeoEditor.py:2324 +#: flatcamEditors/FlatCAMGeoEditor.py:2397 msgid "Click on 1st corner ..." msgstr "Haga clic en la primera esquina ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2337 +#: flatcamEditors/FlatCAMGeoEditor.py:2336 msgid "Click on opposite corner to complete ..." msgstr "Haga clic en la esquina opuesta para completar ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2367 +#: flatcamEditors/FlatCAMGeoEditor.py:2366 msgid "Done. Rectangle completed." msgstr "Hecho. Rectángulo completado." -#: flatcamEditors/FlatCAMGeoEditor.py:2411 flatcamTools/ToolNCC.py:1728 +#: flatcamEditors/FlatCAMGeoEditor.py:2410 flatcamTools/ToolNCC.py:1728 #: flatcamTools/ToolPaint.py:1623 msgid "Click on next Point or click right mouse button to complete ..." msgstr "" "Haga clic en el siguiente punto o haga clic con el botón derecho del ratón " "para completar ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2442 +#: flatcamEditors/FlatCAMGeoEditor.py:2441 msgid "Done. Polygon completed." msgstr "Hecho. Polígono completado." -#: flatcamEditors/FlatCAMGeoEditor.py:2456 -#: flatcamEditors/FlatCAMGeoEditor.py:2521 +#: flatcamEditors/FlatCAMGeoEditor.py:2455 +#: flatcamEditors/FlatCAMGeoEditor.py:2520 #: flatcamEditors/FlatCAMGrbEditor.py:1111 #: flatcamEditors/FlatCAMGrbEditor.py:1322 msgid "Backtracked one point ..." msgstr "Retrocedido un punto ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2499 +#: flatcamEditors/FlatCAMGeoEditor.py:2498 msgid "Done. Path completed." msgstr "Hecho. Camino completado." -#: flatcamEditors/FlatCAMGeoEditor.py:2658 +#: flatcamEditors/FlatCAMGeoEditor.py:2657 msgid "No shape selected. Select a shape to explode" msgstr "Ninguna forma seleccionada. Selecciona una forma para explotar" -#: flatcamEditors/FlatCAMGeoEditor.py:2691 +#: flatcamEditors/FlatCAMGeoEditor.py:2690 msgid "Done. Polygons exploded into lines." msgstr "Hecho. Los polígonos explotaron en líneas." -#: flatcamEditors/FlatCAMGeoEditor.py:2723 +#: flatcamEditors/FlatCAMGeoEditor.py:2722 msgid "MOVE: No shape selected. Select a shape to move" msgstr "MOVER: No se seleccionó la forma. Selecciona una forma para mover" -#: flatcamEditors/FlatCAMGeoEditor.py:2726 -#: flatcamEditors/FlatCAMGeoEditor.py:2746 +#: flatcamEditors/FlatCAMGeoEditor.py:2725 +#: flatcamEditors/FlatCAMGeoEditor.py:2745 msgid " MOVE: Click on reference point ..." msgstr " MOVER: haga clic en el punto de referencia ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2731 +#: flatcamEditors/FlatCAMGeoEditor.py:2730 msgid " Click on destination point ..." msgstr " Haga clic en el punto de destino ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2771 +#: flatcamEditors/FlatCAMGeoEditor.py:2770 msgid "Done. Geometry(s) Move completed." msgstr "Hecho. Geometría (s) Movimiento completado." -#: flatcamEditors/FlatCAMGeoEditor.py:2904 +#: flatcamEditors/FlatCAMGeoEditor.py:2903 msgid "Done. Geometry(s) Copy completed." msgstr "Hecho. Geometría (s) Copia completada." -#: flatcamEditors/FlatCAMGeoEditor.py:2935 +#: flatcamEditors/FlatCAMGeoEditor.py:2934 #: flatcamEditors/FlatCAMGrbEditor.py:897 msgid "Click on 1st point ..." msgstr "Haga clic en el primer punto ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2959 +#: flatcamEditors/FlatCAMGeoEditor.py:2958 msgid "" "Font not supported. Only Regular, Bold, Italic and BoldItalic are supported. " "Error" @@ -4725,105 +4287,105 @@ msgstr "" "Fuente no soportada. Solo se admiten las versiones Regular, Bold, Italic y " "BoldItalic. Error" -#: flatcamEditors/FlatCAMGeoEditor.py:2967 +#: flatcamEditors/FlatCAMGeoEditor.py:2966 msgid "No text to add." msgstr "No hay texto para agregar." -#: flatcamEditors/FlatCAMGeoEditor.py:2977 +#: flatcamEditors/FlatCAMGeoEditor.py:2976 msgid " Done. Adding Text completed." msgstr " Hecho. Agregando texto completado." -#: flatcamEditors/FlatCAMGeoEditor.py:3014 +#: flatcamEditors/FlatCAMGeoEditor.py:3013 msgid "Create buffer geometry ..." msgstr "Crear geometría de búfer ..." -#: flatcamEditors/FlatCAMGeoEditor.py:3049 +#: flatcamEditors/FlatCAMGeoEditor.py:3048 #: flatcamEditors/FlatCAMGrbEditor.py:4994 msgid "Done. Buffer Tool completed." msgstr "Hecho. Herramienta de amortiguación completada." -#: flatcamEditors/FlatCAMGeoEditor.py:3077 +#: flatcamEditors/FlatCAMGeoEditor.py:3076 msgid "Done. Buffer Int Tool completed." msgstr "Hecho. Herramienta interna de búfer completada." -#: flatcamEditors/FlatCAMGeoEditor.py:3105 +#: flatcamEditors/FlatCAMGeoEditor.py:3104 msgid "Done. Buffer Ext Tool completed." msgstr "Hecho. Herramienta externa de búfer completada." -#: flatcamEditors/FlatCAMGeoEditor.py:3154 +#: flatcamEditors/FlatCAMGeoEditor.py:3153 #: flatcamEditors/FlatCAMGrbEditor.py:2151 msgid "Select a shape to act as deletion area ..." msgstr "Seleccione una forma para que actúe como área de eliminación ..." -#: flatcamEditors/FlatCAMGeoEditor.py:3156 -#: flatcamEditors/FlatCAMGeoEditor.py:3182 -#: flatcamEditors/FlatCAMGeoEditor.py:3188 +#: flatcamEditors/FlatCAMGeoEditor.py:3155 +#: flatcamEditors/FlatCAMGeoEditor.py:3181 +#: flatcamEditors/FlatCAMGeoEditor.py:3187 #: flatcamEditors/FlatCAMGrbEditor.py:2153 msgid "Click to pick-up the erase shape..." msgstr "Haga clic para recoger la forma de borrar ..." -#: flatcamEditors/FlatCAMGeoEditor.py:3192 +#: flatcamEditors/FlatCAMGeoEditor.py:3191 #: flatcamEditors/FlatCAMGrbEditor.py:2212 msgid "Click to erase ..." msgstr "Haga clic para borrar ..." -#: flatcamEditors/FlatCAMGeoEditor.py:3221 +#: flatcamEditors/FlatCAMGeoEditor.py:3220 #: flatcamEditors/FlatCAMGrbEditor.py:2245 msgid "Done. Eraser tool action completed." msgstr "Hecho. Se ha completado la acción de la herramienta de borrador." -#: flatcamEditors/FlatCAMGeoEditor.py:3271 +#: flatcamEditors/FlatCAMGeoEditor.py:3270 msgid "Create Paint geometry ..." msgstr "Crear geometría de pintura ..." -#: flatcamEditors/FlatCAMGeoEditor.py:3284 +#: flatcamEditors/FlatCAMGeoEditor.py:3283 #: flatcamEditors/FlatCAMGrbEditor.py:2408 msgid "Shape transformations ..." msgstr "Transformaciones de formas ..." -#: flatcamEditors/FlatCAMGeoEditor.py:3340 flatcamGUI/PreferencesUI.py:4636 +#: flatcamEditors/FlatCAMGeoEditor.py:3339 flatcamGUI/PreferencesUI.py:4636 msgid "Geometry Editor" msgstr "Editor de geometría" -#: flatcamEditors/FlatCAMGeoEditor.py:3346 +#: flatcamEditors/FlatCAMGeoEditor.py:3345 #: flatcamEditors/FlatCAMGrbEditor.py:2486 #: flatcamEditors/FlatCAMGrbEditor.py:3846 flatcamGUI/ObjectUI.py:262 -#: flatcamGUI/ObjectUI.py:1495 flatcamGUI/ObjectUI.py:2244 -#: flatcamTools/ToolCutOut.py:96 +#: flatcamGUI/ObjectUI.py:1496 flatcamGUI/ObjectUI.py:2245 +#: flatcamTools/ToolCutOut.py:95 msgid "Type" msgstr "Tipo" -#: flatcamEditors/FlatCAMGeoEditor.py:3346 flatcamGUI/ObjectUI.py:217 -#: flatcamGUI/ObjectUI.py:741 flatcamGUI/ObjectUI.py:1431 -#: flatcamGUI/ObjectUI.py:2153 flatcamGUI/ObjectUI.py:2457 -#: flatcamGUI/ObjectUI.py:2524 flatcamTools/ToolCalibration.py:234 +#: flatcamEditors/FlatCAMGeoEditor.py:3345 flatcamGUI/ObjectUI.py:217 +#: flatcamGUI/ObjectUI.py:741 flatcamGUI/ObjectUI.py:1432 +#: flatcamGUI/ObjectUI.py:2154 flatcamGUI/ObjectUI.py:2458 +#: flatcamGUI/ObjectUI.py:2525 flatcamTools/ToolCalibration.py:234 #: flatcamTools/ToolFiducials.py:73 msgid "Name" msgstr "Nombre" -#: flatcamEditors/FlatCAMGeoEditor.py:3588 +#: flatcamEditors/FlatCAMGeoEditor.py:3587 msgid "Ring" msgstr "Anillo" -#: flatcamEditors/FlatCAMGeoEditor.py:3590 +#: flatcamEditors/FlatCAMGeoEditor.py:3589 msgid "Line" msgstr "Línea" -#: flatcamEditors/FlatCAMGeoEditor.py:3592 flatcamGUI/FlatCAMGUI.py:2187 +#: flatcamEditors/FlatCAMGeoEditor.py:3591 flatcamGUI/FlatCAMGUI.py:2187 #: flatcamGUI/PreferencesUI.py:5607 flatcamGUI/PreferencesUI.py:6131 #: flatcamTools/ToolNCC.py:584 flatcamTools/ToolPaint.py:528 msgid "Polygon" msgstr "Polígono" -#: flatcamEditors/FlatCAMGeoEditor.py:3594 +#: flatcamEditors/FlatCAMGeoEditor.py:3593 msgid "Multi-Line" msgstr "Multilínea" -#: flatcamEditors/FlatCAMGeoEditor.py:3596 +#: flatcamEditors/FlatCAMGeoEditor.py:3595 msgid "Multi-Polygon" msgstr "Multi-polígono" -#: flatcamEditors/FlatCAMGeoEditor.py:3603 +#: flatcamEditors/FlatCAMGeoEditor.py:3602 msgid "Geo Elem" msgstr "Elemento de Geo" @@ -5086,8 +4648,8 @@ msgstr "Código" #: flatcamEditors/FlatCAMGrbEditor.py:3846 flatcamGUI/ObjectUI.py:262 #: flatcamGUI/PreferencesUI.py:1184 flatcamGUI/PreferencesUI.py:7776 #: flatcamGUI/PreferencesUI.py:7805 flatcamGUI/PreferencesUI.py:7907 -#: flatcamTools/ToolCopperThieving.py:262 -#: flatcamTools/ToolCopperThieving.py:302 flatcamTools/ToolFiducials.py:156 +#: flatcamTools/ToolCopperThieving.py:261 +#: flatcamTools/ToolCopperThieving.py:301 flatcamTools/ToolFiducials.py:156 msgid "Size" msgstr "Tamaño" @@ -5211,20 +4773,20 @@ msgstr "Rincón del búfer" msgid "" "There are 3 types of corners:\n" " - 'Round': the corner is rounded.\n" -" - 'Square:' the corner is met in a sharp angle.\n" -" - 'Beveled:' the corner is a line that directly connects the features " +" - 'Square': the corner is met in a sharp angle.\n" +" - 'Beveled': the corner is a line that directly connects the features " "meeting in the corner" msgstr "" "Hay 3 tipos de esquinas:\n" -"  - 'Redondo': la esquina es redondeada.\n" -"  - 'Cuadrado:' la esquina se encuentra en un ángulo agudo.\n" -"  - 'Biselado:' la esquina es una línea que conecta directamente las " +" - 'Redondo': la esquina es redondeada.\n" +" - 'Cuadrado:' la esquina se encuentra en un ángulo agudo.\n" +" - 'Biselado:' la esquina es una línea que conecta directamente las " "funciones que se encuentran en la esquina" #: flatcamEditors/FlatCAMGrbEditor.py:2637 flatcamGUI/FlatCAMGUI.py:1046 #: flatcamGUI/FlatCAMGUI.py:2123 flatcamGUI/FlatCAMGUI.py:2195 #: flatcamGUI/FlatCAMGUI.py:2238 flatcamGUI/FlatCAMGUI.py:2721 -#: flatcamGUI/PreferencesUI.py:6880 flatcamTools/ToolTransform.py:30 +#: flatcamGUI/PreferencesUI.py:6880 flatcamTools/ToolTransform.py:29 msgid "Buffer" msgstr "Buffer" @@ -5522,7 +5084,7 @@ msgid "String to replace the one in the Find box throughout the text." msgstr "Cadena para reemplazar la del cuadro Buscar en todo el texto." #: flatcamEditors/FlatCAMTextEditor.py:95 flatcamGUI/ObjectUI.py:485 -#: flatcamGUI/ObjectUI.py:2137 flatcamGUI/PreferencesUI.py:2250 +#: flatcamGUI/ObjectUI.py:2138 flatcamGUI/PreferencesUI.py:2250 #: flatcamGUI/PreferencesUI.py:4712 msgid "All" msgstr "Todos" @@ -5577,6 +5139,15 @@ msgstr "Abrir documento" msgid "Export Code ..." msgstr "Exportar el código ..." +#: flatcamEditors/FlatCAMTextEditor.py:272 flatcamObjects/FlatCAMCNCJob.py:954 +#: flatcamTools/ToolSolderPaste.py:1530 +msgid "No such file or directory" +msgstr "El fichero o directorio no existe" + +#: flatcamEditors/FlatCAMTextEditor.py:284 flatcamObjects/FlatCAMCNCJob.py:968 +msgid "Saved to" +msgstr "Guardado en" + #: flatcamEditors/FlatCAMTextEditor.py:334 msgid "Code Editor content copied to clipboard ..." msgstr "Contenido del editor de código copiado al portapapeles ..." @@ -6237,6 +5808,16 @@ msgstr "Generar CNC" msgid "View Source" msgstr "Ver fuente" +#: flatcamGUI/FlatCAMGUI.py:734 flatcamGUI/FlatCAMGUI.py:848 +#: flatcamGUI/FlatCAMGUI.py:1057 flatcamGUI/FlatCAMGUI.py:2123 +#: flatcamGUI/FlatCAMGUI.py:2267 flatcamGUI/FlatCAMGUI.py:2532 +#: flatcamGUI/FlatCAMGUI.py:2731 flatcamGUI/ObjectUI.py:1616 +#: flatcamObjects/FlatCAMGeometry.py:477 flatcamTools/ToolPanelize.py:541 +#: flatcamTools/ToolPanelize.py:568 flatcamTools/ToolPanelize.py:667 +#: flatcamTools/ToolPanelize.py:701 flatcamTools/ToolPanelize.py:766 +msgid "Copy" +msgstr "Dupdo" + #: flatcamGUI/FlatCAMGUI.py:742 flatcamGUI/FlatCAMGUI.py:2280 #: flatcamTools/ToolProperties.py:31 msgid "Properties" @@ -6376,12 +5957,12 @@ msgid "Extract Drills Tool" msgstr "Herram. de Extracción de Taladros" #: flatcamGUI/FlatCAMGUI.py:905 flatcamGUI/ObjectUI.py:595 -#: flatcamTools/ToolCutOut.py:447 +#: flatcamTools/ToolCutOut.py:446 msgid "Cutout Tool" msgstr "Herramienta de Corte" #: flatcamGUI/FlatCAMGUI.py:907 flatcamGUI/FlatCAMGUI.py:2586 -#: flatcamGUI/ObjectUI.py:573 flatcamGUI/ObjectUI.py:2075 +#: flatcamGUI/ObjectUI.py:573 flatcamGUI/ObjectUI.py:2076 #: flatcamTools/ToolNCC.py:974 msgid "NCC Tool" msgstr "Herramienta NCC" @@ -6411,8 +5992,8 @@ msgid "Rules Tool" msgstr "Herramienta de Reglas" #: flatcamGUI/FlatCAMGUI.py:923 flatcamGUI/FlatCAMGUI.py:1728 -#: flatcamGUI/FlatCAMGUI.py:2602 flatcamTools/ToolOptimal.py:34 -#: flatcamTools/ToolOptimal.py:308 +#: flatcamGUI/FlatCAMGUI.py:2602 flatcamTools/ToolOptimal.py:33 +#: flatcamTools/ToolOptimal.py:307 msgid "Optimal Tool" msgstr "Herramienta de Óptima" @@ -6428,7 +6009,7 @@ msgid "QRCode Tool" msgstr "Herramienta QRCode" #: flatcamGUI/FlatCAMGUI.py:934 flatcamGUI/FlatCAMGUI.py:2613 -#: flatcamTools/ToolCopperThieving.py:40 flatcamTools/ToolCopperThieving.py:569 +#: flatcamTools/ToolCopperThieving.py:39 flatcamTools/ToolCopperThieving.py:568 msgid "Copper Thieving Tool" msgstr "Herramienta Thieving Tool" @@ -6606,7 +6187,7 @@ msgstr "Marcar area" #: flatcamGUI/FlatCAMGUI.py:1064 flatcamGUI/FlatCAMGUI.py:2124 #: flatcamGUI/FlatCAMGUI.py:2215 flatcamGUI/FlatCAMGUI.py:2278 -#: flatcamGUI/FlatCAMGUI.py:2738 flatcamTools/ToolMove.py:28 +#: flatcamGUI/FlatCAMGUI.py:2738 flatcamTools/ToolMove.py:27 msgid "Move" msgstr "Movimiento" @@ -6651,18 +6232,18 @@ msgstr "Área de la parcela" msgid "General" msgstr "General" -#: flatcamGUI/FlatCAMGUI.py:1212 flatcamTools/ToolCopperThieving.py:75 -#: flatcamTools/ToolDblSided.py:65 flatcamTools/ToolExtractDrills.py:61 -#: flatcamTools/ToolInvertGerber.py:72 flatcamTools/ToolOptimal.py:72 +#: flatcamGUI/FlatCAMGUI.py:1212 flatcamTools/ToolCopperThieving.py:74 +#: flatcamTools/ToolDblSided.py:64 flatcamTools/ToolExtractDrills.py:61 +#: flatcamTools/ToolInvertGerber.py:72 flatcamTools/ToolOptimal.py:71 #: flatcamTools/ToolPunchGerber.py:64 msgid "GERBER" msgstr "GERBER" -#: flatcamGUI/FlatCAMGUI.py:1222 flatcamTools/ToolDblSided.py:93 +#: flatcamGUI/FlatCAMGUI.py:1222 flatcamTools/ToolDblSided.py:92 msgid "EXCELLON" msgstr "EXCELLON" -#: flatcamGUI/FlatCAMGUI.py:1232 flatcamTools/ToolDblSided.py:121 +#: flatcamGUI/FlatCAMGUI.py:1232 flatcamTools/ToolDblSided.py:120 msgid "GEOMETRY" msgstr "GEOMETRÍA" @@ -6671,7 +6252,7 @@ msgid "CNC-JOB" msgstr "CNC-JOB" #: flatcamGUI/FlatCAMGUI.py:1251 flatcamGUI/ObjectUI.py:562 -#: flatcamGUI/ObjectUI.py:2050 +#: flatcamGUI/ObjectUI.py:2051 msgid "TOOLS" msgstr "HERRAMIENTAS" @@ -7186,16 +6767,33 @@ msgstr "Alternar visibilidad" msgid "New" msgstr "Nueva" +#: flatcamGUI/FlatCAMGUI.py:2154 flatcamGUI/ObjectUI.py:449 +#: flatcamObjects/FlatCAMGerber.py:238 flatcamObjects/FlatCAMGerber.py:326 +#: flatcamTools/ToolCalibration.py:631 flatcamTools/ToolCalibration.py:648 +#: flatcamTools/ToolCalibration.py:815 flatcamTools/ToolCopperThieving.py:144 +#: flatcamTools/ToolCopperThieving.py:158 +#: flatcamTools/ToolCopperThieving.py:604 flatcamTools/ToolCutOut.py:92 +#: flatcamTools/ToolDblSided.py:226 flatcamTools/ToolFilm.py:69 +#: flatcamTools/ToolFilm.py:102 flatcamTools/ToolFilm.py:549 +#: flatcamTools/ToolFilm.py:557 flatcamTools/ToolImage.py:49 +#: flatcamTools/ToolImage.py:271 flatcamTools/ToolNCC.py:95 +#: flatcamTools/ToolNCC.py:558 flatcamTools/ToolNCC.py:1295 +#: flatcamTools/ToolPaint.py:502 flatcamTools/ToolPaint.py:706 +#: flatcamTools/ToolPanelize.py:116 flatcamTools/ToolPanelize.py:372 +#: flatcamTools/ToolPanelize.py:389 +msgid "Geometry" +msgstr "Geometría" + #: flatcamGUI/FlatCAMGUI.py:2158 flatcamGUI/PreferencesUI.py:8410 #: flatcamTools/ToolAlignObjects.py:74 flatcamTools/ToolAlignObjects.py:110 #: flatcamTools/ToolCalibration.py:197 flatcamTools/ToolCalibration.py:631 #: flatcamTools/ToolCalibration.py:648 flatcamTools/ToolCalibration.py:807 -#: flatcamTools/ToolCalibration.py:815 flatcamTools/ToolCopperThieving.py:145 -#: flatcamTools/ToolCopperThieving.py:159 -#: flatcamTools/ToolCopperThieving.py:605 flatcamTools/ToolDblSided.py:226 +#: flatcamTools/ToolCalibration.py:815 flatcamTools/ToolCopperThieving.py:144 +#: flatcamTools/ToolCopperThieving.py:158 +#: flatcamTools/ToolCopperThieving.py:604 flatcamTools/ToolDblSided.py:225 #: flatcamTools/ToolFilm.py:359 flatcamTools/ToolNCC.py:558 #: flatcamTools/ToolNCC.py:1295 flatcamTools/ToolPaint.py:502 -#: flatcamTools/ToolPaint.py:706 flatcamTools/ToolPanelize.py:374 +#: flatcamTools/ToolPaint.py:706 flatcamTools/ToolPanelize.py:372 #: flatcamTools/ToolPunchGerber.py:149 flatcamTools/ToolPunchGerber.py:164 msgid "Excellon" msgstr "Excellon" @@ -7244,7 +6842,7 @@ msgstr "Intersección" msgid "Subtraction" msgstr "Sustracción" -#: flatcamGUI/FlatCAMGUI.py:2209 flatcamGUI/ObjectUI.py:2139 +#: flatcamGUI/FlatCAMGUI.py:2209 flatcamGUI/ObjectUI.py:2140 #: flatcamGUI/PreferencesUI.py:4714 msgid "Cut" msgstr "Cortar" @@ -7404,7 +7002,7 @@ msgid "Exit" msgstr "Salida" #: flatcamGUI/GUIElements.py:2513 flatcamGUI/PreferencesUI.py:6313 -#: flatcamTools/ToolDblSided.py:174 flatcamTools/ToolDblSided.py:389 +#: flatcamTools/ToolDblSided.py:173 flatcamTools/ToolDblSided.py:388 #: flatcamTools/ToolFilm.py:219 msgid "Reference" msgstr "Referencia" @@ -7449,6 +7047,10 @@ msgstr "" msgid "Save Log" msgstr "Guardar Registro" +#: flatcamGUI/GUIElements.py:2592 flatcamTools/ToolShell.py:285 +msgid "Type >help< to get started" +msgstr "Escriba >help< para comenzar" + #: flatcamGUI/ObjectUI.py:38 msgid "FlatCAM Object" msgstr "Objeto FlatCAM" @@ -7508,7 +7110,7 @@ msgid "Gerber Object" msgstr "Objeto Gerber" #: flatcamGUI/ObjectUI.py:186 flatcamGUI/ObjectUI.py:729 -#: flatcamGUI/ObjectUI.py:1424 flatcamGUI/ObjectUI.py:2123 +#: flatcamGUI/ObjectUI.py:1425 flatcamGUI/ObjectUI.py:2124 #: flatcamGUI/PreferencesUI.py:1940 flatcamGUI/PreferencesUI.py:2856 #: flatcamGUI/PreferencesUI.py:4121 flatcamGUI/PreferencesUI.py:4688 msgid "Plot Options" @@ -7516,7 +7118,7 @@ msgstr "Opciones de parcela" #: flatcamGUI/ObjectUI.py:192 flatcamGUI/ObjectUI.py:730 #: flatcamGUI/PreferencesUI.py:1947 flatcamGUI/PreferencesUI.py:2868 -#: flatcamGUI/PreferencesUI.py:7728 flatcamTools/ToolCopperThieving.py:192 +#: flatcamGUI/PreferencesUI.py:7728 flatcamTools/ToolCopperThieving.py:191 msgid "Solid" msgstr "Sólido" @@ -7539,7 +7141,7 @@ msgid "Plot" msgstr "Gráfico" #: flatcamGUI/ObjectUI.py:210 flatcamGUI/ObjectUI.py:770 -#: flatcamGUI/ObjectUI.py:1484 flatcamGUI/ObjectUI.py:2233 +#: flatcamGUI/ObjectUI.py:1485 flatcamGUI/ObjectUI.py:2234 #: flatcamGUI/PreferencesUI.py:1963 flatcamGUI/PreferencesUI.py:4127 #: flatcamGUI/PreferencesUI.py:4699 msgid "Plot (show) this object." @@ -7601,7 +7203,7 @@ msgstr "" msgid "V-Shape" msgstr "Forma V" -#: flatcamGUI/ObjectUI.py:322 flatcamGUI/ObjectUI.py:1670 +#: flatcamGUI/ObjectUI.py:322 flatcamGUI/ObjectUI.py:1671 #: flatcamGUI/PreferencesUI.py:2411 flatcamGUI/PreferencesUI.py:5351 #: flatcamGUI/PreferencesUI.py:5917 flatcamGUI/PreferencesUI.py:5924 #: flatcamTools/ToolNCC.py:233 flatcamTools/ToolNCC.py:240 @@ -7609,14 +7211,14 @@ msgstr "Forma V" msgid "V-Tip Dia" msgstr "V-Tipo Dia" -#: flatcamGUI/ObjectUI.py:324 flatcamGUI/ObjectUI.py:1673 +#: flatcamGUI/ObjectUI.py:324 flatcamGUI/ObjectUI.py:1674 #: flatcamGUI/PreferencesUI.py:2413 flatcamGUI/PreferencesUI.py:5353 #: flatcamGUI/PreferencesUI.py:5919 flatcamTools/ToolNCC.py:235 #: flatcamTools/ToolPaint.py:218 msgid "The tip diameter for V-Shape Tool" msgstr "El diámetro de la punta para la herramienta en forma de V" -#: flatcamGUI/ObjectUI.py:335 flatcamGUI/ObjectUI.py:1685 +#: flatcamGUI/ObjectUI.py:335 flatcamGUI/ObjectUI.py:1686 #: flatcamGUI/PreferencesUI.py:2424 flatcamGUI/PreferencesUI.py:5363 #: flatcamGUI/PreferencesUI.py:5930 flatcamGUI/PreferencesUI.py:5938 #: flatcamTools/ToolNCC.py:246 flatcamTools/ToolNCC.py:254 @@ -7624,7 +7226,7 @@ msgstr "El diámetro de la punta para la herramienta en forma de V" msgid "V-Tip Angle" msgstr "V-Tipo Ángulo" -#: flatcamGUI/ObjectUI.py:337 flatcamGUI/ObjectUI.py:1688 +#: flatcamGUI/ObjectUI.py:337 flatcamGUI/ObjectUI.py:1689 #: flatcamGUI/PreferencesUI.py:2426 flatcamGUI/PreferencesUI.py:5365 #: flatcamGUI/PreferencesUI.py:5932 flatcamTools/ToolNCC.py:248 #: flatcamTools/ToolPaint.py:231 @@ -7635,9 +7237,9 @@ msgstr "" "El ángulo de punta para la herramienta en forma de V.\n" "En grado." -#: flatcamGUI/ObjectUI.py:351 flatcamGUI/ObjectUI.py:1704 +#: flatcamGUI/ObjectUI.py:351 flatcamGUI/ObjectUI.py:1705 #: flatcamGUI/PreferencesUI.py:2439 flatcamGUI/PreferencesUI.py:4243 -#: flatcamGUI/PreferencesUI.py:5669 flatcamTools/ToolCutOut.py:142 +#: flatcamGUI/PreferencesUI.py:5669 flatcamTools/ToolCutOut.py:141 msgid "" "Cutting depth (negative)\n" "below the copper surface." @@ -7729,6 +7331,26 @@ msgstr "" "marcando esto, el área del objeto a continuación\n" "será restado de la geometría de aislamiento." +#: flatcamGUI/ObjectUI.py:449 flatcamGUI/PreferencesUI.py:6527 +#: flatcamObjects/FlatCAMGerber.py:238 flatcamObjects/FlatCAMGerber.py:326 +#: flatcamTools/ToolAlignObjects.py:73 flatcamTools/ToolAlignObjects.py:109 +#: flatcamTools/ToolCalibration.py:196 flatcamTools/ToolCalibration.py:631 +#: flatcamTools/ToolCalibration.py:648 flatcamTools/ToolCalibration.py:807 +#: flatcamTools/ToolCalibration.py:815 flatcamTools/ToolCopperThieving.py:144 +#: flatcamTools/ToolCopperThieving.py:158 +#: flatcamTools/ToolCopperThieving.py:604 flatcamTools/ToolCutOut.py:91 +#: flatcamTools/ToolDblSided.py:224 flatcamTools/ToolFilm.py:69 +#: flatcamTools/ToolFilm.py:102 flatcamTools/ToolFilm.py:549 +#: flatcamTools/ToolFilm.py:557 flatcamTools/ToolImage.py:49 +#: flatcamTools/ToolImage.py:252 flatcamTools/ToolImage.py:273 +#: flatcamTools/ToolNCC.py:96 flatcamTools/ToolNCC.py:558 +#: flatcamTools/ToolNCC.py:1295 flatcamTools/ToolPaint.py:502 +#: flatcamTools/ToolPaint.py:706 flatcamTools/ToolPanelize.py:116 +#: flatcamTools/ToolPanelize.py:202 flatcamTools/ToolPanelize.py:372 +#: flatcamTools/ToolPanelize.py:389 +msgid "Gerber" +msgstr "Gerber" + #: flatcamGUI/ObjectUI.py:456 flatcamTools/ToolNCC.py:86 #: flatcamTools/ToolPaint.py:80 msgid "Obj Type" @@ -7748,7 +7370,7 @@ msgstr "" #: flatcamGUI/ObjectUI.py:471 flatcamGUI/PreferencesUI.py:8028 #: flatcamTools/ToolCalibration.py:186 flatcamTools/ToolNCC.py:109 -#: flatcamTools/ToolPaint.py:103 flatcamTools/ToolPanelize.py:100 +#: flatcamTools/ToolPaint.py:103 flatcamTools/ToolPanelize.py:98 #: flatcamTools/ToolQRCode.py:78 msgid "Object" msgstr "Objeto" @@ -7869,7 +7491,7 @@ msgstr "" "Crear un objeto de geometría con\n" "Trayectorias para cortar todas las regiones sin cobre." -#: flatcamGUI/ObjectUI.py:575 flatcamGUI/ObjectUI.py:2077 +#: flatcamGUI/ObjectUI.py:575 flatcamGUI/ObjectUI.py:2078 #: flatcamTools/ToolNCC.py:599 msgid "" "Create the Geometry Object\n" @@ -7945,12 +7567,12 @@ msgid "Resulting geometry will have rounded corners." msgstr "La geometría resultante tendrá esquinas redondeadas." #: flatcamGUI/ObjectUI.py:650 flatcamGUI/ObjectUI.py:691 -#: flatcamTools/ToolSolderPaste.py:135 +#: flatcamTools/ToolSolderPaste.py:134 msgid "Generate Geo" msgstr "Generar Geo" #: flatcamGUI/ObjectUI.py:660 flatcamGUI/PreferencesUI.py:2322 -#: flatcamGUI/PreferencesUI.py:7558 flatcamTools/ToolPanelize.py:101 +#: flatcamGUI/PreferencesUI.py:7558 flatcamTools/ToolPanelize.py:99 #: flatcamTools/ToolQRCode.py:192 msgid "Bounding Box" msgstr "Cuadro delimitador" @@ -7996,13 +7618,13 @@ msgid "Solid circles." msgstr "Círculos sólidos." #: flatcamGUI/ObjectUI.py:780 flatcamGUI/ObjectUI.py:875 -#: flatcamGUI/ObjectUI.py:2254 flatcamGUI/PreferencesUI.py:3289 +#: flatcamGUI/ObjectUI.py:2255 flatcamGUI/PreferencesUI.py:3289 #: flatcamTools/ToolProperties.py:166 msgid "Drills" msgstr "Taladros" #: flatcamGUI/ObjectUI.py:780 flatcamGUI/ObjectUI.py:876 -#: flatcamGUI/ObjectUI.py:2254 flatcamGUI/PreferencesUI.py:3290 +#: flatcamGUI/ObjectUI.py:2255 flatcamGUI/PreferencesUI.py:3290 #: flatcamGUI/PreferencesUI.py:3961 flatcamTools/ToolProperties.py:168 msgid "Slots" msgstr "Muesca" @@ -8022,7 +7644,7 @@ msgstr "" "\n" "Aquí se seleccionan las herramientas para la generación de código G." -#: flatcamGUI/ObjectUI.py:790 flatcamGUI/ObjectUI.py:1508 +#: flatcamGUI/ObjectUI.py:790 flatcamGUI/ObjectUI.py:1509 #: flatcamTools/ToolPaint.py:142 msgid "" "Tool Diameter. It's value (in current FlatCAM units) \n" @@ -8055,7 +7677,19 @@ msgstr "" "Alternar la visualización de los ejercicios para la herramienta actual.\n" "Esto no selecciona las herramientas para la generación de código G." -#: flatcamGUI/ObjectUI.py:820 flatcamGUI/ObjectUI.py:1663 +#: flatcamGUI/ObjectUI.py:817 flatcamGUI/ObjectUI.py:1661 +#: flatcamObjects/FlatCAMExcellon.py:514 flatcamObjects/FlatCAMExcellon.py:726 +#: flatcamObjects/FlatCAMExcellon.py:742 flatcamObjects/FlatCAMExcellon.py:746 +#: flatcamObjects/FlatCAMGeometry.py:306 flatcamObjects/FlatCAMGeometry.py:731 +#: flatcamObjects/FlatCAMGeometry.py:767 flatcamTools/ToolNCC.py:331 +#: flatcamTools/ToolNCC.py:797 flatcamTools/ToolNCC.py:811 +#: flatcamTools/ToolNCC.py:1191 flatcamTools/ToolPaint.py:314 +#: flatcamTools/ToolPaint.py:767 flatcamTools/ToolPaint.py:779 +#: flatcamTools/ToolPaint.py:1166 +msgid "Parameters for" +msgstr "Parámetros para" + +#: flatcamGUI/ObjectUI.py:820 flatcamGUI/ObjectUI.py:1664 #: flatcamTools/ToolNCC.py:334 flatcamTools/ToolPaint.py:317 msgid "" "The data used for creating GCode.\n" @@ -8116,15 +7750,15 @@ msgstr "" "Profundidad de perforación (negativo)\n" "debajo de la superficie de cobre." -#: flatcamGUI/ObjectUI.py:920 flatcamGUI/ObjectUI.py:1722 +#: flatcamGUI/ObjectUI.py:920 flatcamGUI/ObjectUI.py:1723 #: flatcamGUI/PreferencesUI.py:3331 flatcamGUI/PreferencesUI.py:4261 -#: flatcamGUI/PreferencesUI.py:5687 flatcamTools/ToolCutOut.py:160 +#: flatcamGUI/PreferencesUI.py:5687 flatcamTools/ToolCutOut.py:159 msgid "Multi-Depth" msgstr "Profund. Múlti" -#: flatcamGUI/ObjectUI.py:923 flatcamGUI/ObjectUI.py:1725 +#: flatcamGUI/ObjectUI.py:923 flatcamGUI/ObjectUI.py:1726 #: flatcamGUI/PreferencesUI.py:3334 flatcamGUI/PreferencesUI.py:4264 -#: flatcamGUI/PreferencesUI.py:5690 flatcamTools/ToolCutOut.py:163 +#: flatcamGUI/PreferencesUI.py:5690 flatcamTools/ToolCutOut.py:162 msgid "" "Use multiple passes to limit\n" "the cut depth in each pass. Will\n" @@ -8136,9 +7770,9 @@ msgstr "" "cortar varias veces hasta que el Corte Z sea\n" "alcanzado." -#: flatcamGUI/ObjectUI.py:936 flatcamGUI/ObjectUI.py:1739 +#: flatcamGUI/ObjectUI.py:936 flatcamGUI/ObjectUI.py:1740 #: flatcamGUI/PreferencesUI.py:3346 flatcamGUI/PreferencesUI.py:5702 -#: flatcamTools/ToolCutOut.py:177 +#: flatcamTools/ToolCutOut.py:176 msgid "Depth of each pass (positive)." msgstr "Profundidad de cada pase (positivo)." @@ -8150,7 +7784,7 @@ msgstr "" "Altura de herramienta al viajar\n" "A través del plano XY." -#: flatcamGUI/ObjectUI.py:968 flatcamGUI/ObjectUI.py:1769 +#: flatcamGUI/ObjectUI.py:968 flatcamGUI/ObjectUI.py:1770 #: flatcamGUI/PreferencesUI.py:4380 msgid "" "Cutting speed in the XY\n" @@ -8171,7 +7805,7 @@ msgstr "" "La llamada velocidad de avance 'Plunge'.\n" "Esto es para el movimiento lineal G01." -#: flatcamGUI/ObjectUI.py:998 flatcamGUI/ObjectUI.py:1796 +#: flatcamGUI/ObjectUI.py:998 flatcamGUI/ObjectUI.py:1797 #: flatcamGUI/PreferencesUI.py:3597 flatcamGUI/PreferencesUI.py:4503 msgid "Feedrate Rapids" msgstr "Rápidos de avance" @@ -8190,13 +7824,13 @@ msgstr "" "Es útil solo para Marlin,\n" "Ignorar para cualquier otro caso." -#: flatcamGUI/ObjectUI.py:1020 flatcamGUI/ObjectUI.py:1816 +#: flatcamGUI/ObjectUI.py:1020 flatcamGUI/ObjectUI.py:1817 #: flatcamGUI/PreferencesUI.py:4521 msgid "Re-cut" msgstr "Recortar" #: flatcamGUI/ObjectUI.py:1022 flatcamGUI/ObjectUI.py:1035 -#: flatcamGUI/ObjectUI.py:1818 flatcamGUI/ObjectUI.py:1830 +#: flatcamGUI/ObjectUI.py:1819 flatcamGUI/ObjectUI.py:1831 #: flatcamGUI/PreferencesUI.py:4523 flatcamGUI/PreferencesUI.py:4535 msgid "" "In order to remove possible\n" @@ -8209,6 +7843,12 @@ msgstr "" "Nos reunimos con el último corte, generamos un\n" "Corte extendido sobre la primera sección de corte." +#: flatcamGUI/ObjectUI.py:1048 flatcamGUI/ObjectUI.py:1840 +#: flatcamGUI/PreferencesUI.py:4409 flatcamObjects/FlatCAMExcellon.py:1332 +#: flatcamObjects/FlatCAMGeometry.py:1568 +msgid "Spindle speed" +msgstr "Eje de velocidad" + #: flatcamGUI/ObjectUI.py:1050 flatcamGUI/PreferencesUI.py:3442 msgid "" "Speed of the spindle\n" @@ -8217,7 +7857,7 @@ msgstr "" "Velocidad del husillo\n" "en RPM (opcional)" -#: flatcamGUI/ObjectUI.py:1065 flatcamGUI/ObjectUI.py:1858 +#: flatcamGUI/ObjectUI.py:1065 flatcamGUI/ObjectUI.py:1859 #: flatcamGUI/PreferencesUI.py:3456 flatcamGUI/PreferencesUI.py:4427 msgid "" "Pause to allow the spindle to reach its\n" @@ -8226,7 +7866,7 @@ msgstr "" "Pausa para permitir que el husillo alcance su\n" "Velocidad antes del corte." -#: flatcamGUI/ObjectUI.py:1076 flatcamGUI/ObjectUI.py:1868 +#: flatcamGUI/ObjectUI.py:1076 flatcamGUI/ObjectUI.py:1869 #: flatcamGUI/PreferencesUI.py:3464 flatcamGUI/PreferencesUI.py:4432 msgid "Number of time units for spindle to dwell." msgstr "Número de unidades de tiempo para que el husillo permanezca." @@ -8246,12 +7886,12 @@ msgstr "" "la punta.\n" "El valor aquí puede compensar el parámetro Z de corte." -#: flatcamGUI/ObjectUI.py:1148 flatcamGUI/ObjectUI.py:1922 +#: flatcamGUI/ObjectUI.py:1148 flatcamGUI/ObjectUI.py:1923 #: flatcamTools/ToolNCC.py:492 flatcamTools/ToolPaint.py:423 msgid "Apply parameters to all tools" msgstr "Aplicar Parám. a todas las herramientas" -#: flatcamGUI/ObjectUI.py:1150 flatcamGUI/ObjectUI.py:1924 +#: flatcamGUI/ObjectUI.py:1150 flatcamGUI/ObjectUI.py:1925 #: flatcamTools/ToolNCC.py:494 flatcamTools/ToolPaint.py:425 msgid "" "The parameters in the current form will be applied\n" @@ -8260,17 +7900,17 @@ msgstr "" "Se aplicarán los parámetros en el formulario actual\n" "en todas las herramientas de la tabla de herramientas." -#: flatcamGUI/ObjectUI.py:1161 flatcamGUI/ObjectUI.py:1935 +#: flatcamGUI/ObjectUI.py:1161 flatcamGUI/ObjectUI.py:1936 #: flatcamTools/ToolNCC.py:505 flatcamTools/ToolPaint.py:436 msgid "Common Parameters" msgstr "Parámetros comunes" -#: flatcamGUI/ObjectUI.py:1163 flatcamGUI/ObjectUI.py:1937 +#: flatcamGUI/ObjectUI.py:1163 flatcamGUI/ObjectUI.py:1938 #: flatcamTools/ToolNCC.py:507 flatcamTools/ToolPaint.py:438 msgid "Parameters that are common for all tools." msgstr "Parámetros que son comunes para todas las herramientas." -#: flatcamGUI/ObjectUI.py:1168 flatcamGUI/ObjectUI.py:1942 +#: flatcamGUI/ObjectUI.py:1168 flatcamGUI/ObjectUI.py:1943 msgid "Tool change Z" msgstr "Cambio de herra. Z" @@ -8282,7 +7922,7 @@ msgstr "" "Incluir secuencia de cambio de herramienta\n" "en G-Code (Pausa para cambio de herramienta)." -#: flatcamGUI/ObjectUI.py:1177 flatcamGUI/ObjectUI.py:1953 +#: flatcamGUI/ObjectUI.py:1177 flatcamGUI/ObjectUI.py:1954 #: flatcamGUI/PreferencesUI.py:3380 flatcamGUI/PreferencesUI.py:4327 msgid "" "Z-axis position (height) for\n" @@ -8299,12 +7939,12 @@ msgstr "" "Altura de la herramienta justo después del arranque.\n" "Elimine el valor si no necesita esta característica." -#: flatcamGUI/ObjectUI.py:1203 flatcamGUI/ObjectUI.py:1981 +#: flatcamGUI/ObjectUI.py:1203 flatcamGUI/ObjectUI.py:1982 #: flatcamGUI/PreferencesUI.py:3396 flatcamGUI/PreferencesUI.py:4346 msgid "End move Z" msgstr "Fin del movi. Z" -#: flatcamGUI/ObjectUI.py:1205 flatcamGUI/ObjectUI.py:1983 +#: flatcamGUI/ObjectUI.py:1205 flatcamGUI/ObjectUI.py:1984 #: flatcamGUI/PreferencesUI.py:3398 flatcamGUI/PreferencesUI.py:4348 msgid "" "Height of the tool after\n" @@ -8313,12 +7953,12 @@ msgstr "" "Altura de la herramienta después de\n" "El último movimiento al final del trabajo." -#: flatcamGUI/ObjectUI.py:1222 flatcamGUI/ObjectUI.py:2000 +#: flatcamGUI/ObjectUI.py:1222 flatcamGUI/ObjectUI.py:2001 #: flatcamGUI/PreferencesUI.py:3413 flatcamGUI/PreferencesUI.py:4366 msgid "End move X,Y" msgstr "X, Y Fin del movimiento" -#: flatcamGUI/ObjectUI.py:1224 flatcamGUI/ObjectUI.py:2002 +#: flatcamGUI/ObjectUI.py:1224 flatcamGUI/ObjectUI.py:2003 #: flatcamGUI/PreferencesUI.py:3415 flatcamGUI/PreferencesUI.py:4368 msgid "" "End move X,Y position. In format (x,y).\n" @@ -8329,12 +7969,12 @@ msgstr "" "Si no se ingresa ningún valor, entonces no hay movimiento\n" "en el plano X, Y al final del trabajo." -#: flatcamGUI/ObjectUI.py:1234 flatcamGUI/ObjectUI.py:1876 +#: flatcamGUI/ObjectUI.py:1234 flatcamGUI/ObjectUI.py:1877 #: flatcamGUI/PreferencesUI.py:3613 flatcamGUI/PreferencesUI.py:4544 msgid "Probe Z depth" msgstr "Profundidad de la sonda Z" -#: flatcamGUI/ObjectUI.py:1236 flatcamGUI/ObjectUI.py:1878 +#: flatcamGUI/ObjectUI.py:1236 flatcamGUI/ObjectUI.py:1879 #: flatcamGUI/PreferencesUI.py:3615 flatcamGUI/PreferencesUI.py:4546 msgid "" "The maximum depth that the probe is allowed\n" @@ -8343,25 +7983,21 @@ msgstr "" "The maximum depth that the probe is allowed\n" "to probe. Negative value, in current units." -#: flatcamGUI/ObjectUI.py:1252 flatcamGUI/ObjectUI.py:1893 +#: flatcamGUI/ObjectUI.py:1253 flatcamGUI/ObjectUI.py:1894 #: flatcamGUI/PreferencesUI.py:3626 flatcamGUI/PreferencesUI.py:4559 msgid "Feedrate Probe" msgstr "Sonda de avance" -#: flatcamGUI/ObjectUI.py:1254 flatcamGUI/ObjectUI.py:1895 +#: flatcamGUI/ObjectUI.py:1255 flatcamGUI/ObjectUI.py:1896 #: flatcamGUI/PreferencesUI.py:3628 flatcamGUI/PreferencesUI.py:4561 msgid "The feedrate used while the probe is probing." msgstr "La velocidad de avance utilizada mientras la sonda está sondeando." -#: flatcamGUI/ObjectUI.py:1261 -msgid "e_fr_probe" -msgstr "e_fr_probe" - -#: flatcamGUI/ObjectUI.py:1270 +#: flatcamGUI/ObjectUI.py:1271 msgid "Preprocessor E" msgstr "Postprocesador E" -#: flatcamGUI/ObjectUI.py:1272 +#: flatcamGUI/ObjectUI.py:1273 msgid "" "The preprocessor JSON file that dictates\n" "Gcode output for Excellon Objects." @@ -8369,11 +8005,11 @@ msgstr "" "El archivo JSON del preprocesador que dicta\n" "Salida de Gcode para objetos Excellon." -#: flatcamGUI/ObjectUI.py:1282 +#: flatcamGUI/ObjectUI.py:1283 msgid "Preprocessor G" msgstr "Postprocesador G" -#: flatcamGUI/ObjectUI.py:1284 +#: flatcamGUI/ObjectUI.py:1285 msgid "" "The preprocessor JSON file that dictates\n" "Gcode output for Geometry (Milling) Objects." @@ -8381,7 +8017,7 @@ msgstr "" "El archivo JSON del preprocesador que dicta\n" "Salida de Gcode para objetos de geometría (fresado)." -#: flatcamGUI/ObjectUI.py:1308 flatcamGUI/ObjectUI.py:2026 +#: flatcamGUI/ObjectUI.py:1309 flatcamGUI/ObjectUI.py:2027 msgid "" "Add / Select at least one tool in the tool-table.\n" "Click the # header to select all, or Ctrl + LMB\n" @@ -8391,11 +8027,11 @@ msgstr "" "Haga clic en el encabezado # para seleccionar todo, o Ctrl + LMB\n" "para la selección personalizada de herramientas." -#: flatcamGUI/ObjectUI.py:1316 flatcamGUI/ObjectUI.py:2033 +#: flatcamGUI/ObjectUI.py:1317 flatcamGUI/ObjectUI.py:2034 msgid "Generate CNCJob object" msgstr "Generar objeto CNCJob" -#: flatcamGUI/ObjectUI.py:1318 +#: flatcamGUI/ObjectUI.py:1319 msgid "" "Generate the CNC Job.\n" "If milling then an additional Geometry object will be created" @@ -8403,11 +8039,11 @@ msgstr "" "Generar el trabajo del CNC.\n" "Si se fresa, se creará un objeto Geometry adicional" -#: flatcamGUI/ObjectUI.py:1335 +#: flatcamGUI/ObjectUI.py:1336 msgid "Milling Geometry" msgstr "Geometría de fresado" -#: flatcamGUI/ObjectUI.py:1337 +#: flatcamGUI/ObjectUI.py:1338 msgid "" "Create Geometry for milling holes.\n" "Select from the Tools Table above the hole dias to be\n" @@ -8418,16 +8054,16 @@ msgstr "" "para\n" "molido. Use la columna # para hacer la selección." -#: flatcamGUI/ObjectUI.py:1345 flatcamGUI/PreferencesUI.py:2207 +#: flatcamGUI/ObjectUI.py:1346 flatcamGUI/PreferencesUI.py:2207 #: flatcamGUI/PreferencesUI.py:3514 msgid "Diameter of the cutting tool." msgstr "Diá. de la herramienta de corte." -#: flatcamGUI/ObjectUI.py:1355 +#: flatcamGUI/ObjectUI.py:1356 msgid "Mill Drills" msgstr "Fresar los Taladros" -#: flatcamGUI/ObjectUI.py:1357 +#: flatcamGUI/ObjectUI.py:1358 msgid "" "Create the Geometry Object\n" "for milling DRILLS toolpaths." @@ -8435,11 +8071,11 @@ msgstr "" "Crear el objeto de geometría\n" "para fresar trayectorias de taladros." -#: flatcamGUI/ObjectUI.py:1375 +#: flatcamGUI/ObjectUI.py:1376 msgid "Mill Slots" msgstr "Fresar las Ranuras" -#: flatcamGUI/ObjectUI.py:1377 +#: flatcamGUI/ObjectUI.py:1378 msgid "" "Create the Geometry Object\n" "for milling SLOTS toolpaths." @@ -8447,11 +8083,11 @@ msgstr "" "Crear el objeto de geometría\n" "para fresar recorridos de herramientas muesca." -#: flatcamGUI/ObjectUI.py:1419 flatcamTools/ToolCutOut.py:327 +#: flatcamGUI/ObjectUI.py:1420 flatcamTools/ToolCutOut.py:326 msgid "Geometry Object" msgstr "Objeto de geometría" -#: flatcamGUI/ObjectUI.py:1465 +#: flatcamGUI/ObjectUI.py:1466 msgid "" "Tools in this Geometry object used for cutting.\n" "The 'Offset' entry will set an offset for the cut.\n" @@ -8480,23 +8116,23 @@ 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:1482 flatcamGUI/ObjectUI.py:2231 +#: flatcamGUI/ObjectUI.py:1483 flatcamGUI/ObjectUI.py:2232 #: flatcamGUI/PreferencesUI.py:4698 msgid "Plot Object" msgstr "Trazar objeto" -#: flatcamGUI/ObjectUI.py:1495 flatcamGUI/ObjectUI.py:2244 -#: flatcamGUI/ObjectUI.py:2254 flatcamGUI/PreferencesUI.py:7747 -#: flatcamTools/ToolCopperThieving.py:222 +#: flatcamGUI/ObjectUI.py:1496 flatcamGUI/ObjectUI.py:2245 +#: flatcamGUI/ObjectUI.py:2255 flatcamGUI/PreferencesUI.py:7747 +#: flatcamTools/ToolCopperThieving.py:221 msgid "Dia" msgstr "Dia" -#: flatcamGUI/ObjectUI.py:1495 flatcamGUI/ObjectUI.py:2244 +#: flatcamGUI/ObjectUI.py:1496 flatcamGUI/ObjectUI.py:2245 #: flatcamTools/ToolNCC.py:132 flatcamTools/ToolPaint.py:128 msgid "TT" msgstr "TT" -#: flatcamGUI/ObjectUI.py:1502 +#: flatcamGUI/ObjectUI.py:1503 msgid "" "This is the Tool Number.\n" "When ToolChange is checked, on toolchange event this value\n" @@ -8507,7 +8143,7 @@ msgstr "" "este valor\n" "se mostrará como un T1, T2 ... Tn" -#: flatcamGUI/ObjectUI.py:1513 +#: flatcamGUI/ObjectUI.py:1514 msgid "" "The value for the Offset can be:\n" "- Path -> There is no offset, the tool cut will be done through the geometry " @@ -8524,7 +8160,7 @@ msgstr "" "- Fuera (lado) -> El corte de la herramienta seguirá la línea de geometría " "en el exterior." -#: flatcamGUI/ObjectUI.py:1520 +#: flatcamGUI/ObjectUI.py:1521 msgid "" "The (Operation) Type has only informative value. Usually the UI form " "values \n" @@ -8547,7 +8183,7 @@ msgstr "" "Para el aislamiento, necesitamos un avance más bajo, ya que utiliza una " "broca de fresado con una punta fina." -#: flatcamGUI/ObjectUI.py:1529 +#: flatcamGUI/ObjectUI.py:1530 msgid "" "The Tool Type (TT) can be:\n" "- Circular with 1 ... 4 teeth -> it is informative only. Being circular the " @@ -8578,7 +8214,7 @@ msgstr "" "Elegir el tipo de herramienta en forma de V automáticamente seleccionará el " "tipo de operación como aislamiento." -#: flatcamGUI/ObjectUI.py:1541 +#: flatcamGUI/ObjectUI.py:1542 msgid "" "Plot column. It is visible only for MultiGeo geometries, meaning geometries " "that holds the geometry\n" @@ -8596,7 +8232,7 @@ msgstr "" "puede habilitar / deshabilitar la trama en el lienzo\n" "para la herramienta correspondiente." -#: flatcamGUI/ObjectUI.py:1559 +#: flatcamGUI/ObjectUI.py:1560 msgid "" "The value to offset the cut when \n" "the Offset type selected is 'Offset'.\n" @@ -8608,13 +8244,13 @@ msgstr "" "El valor puede ser positivo para 'afuera'\n" "corte y negativo para corte 'interior'." -#: flatcamGUI/ObjectUI.py:1578 flatcamTools/ToolNCC.py:209 +#: flatcamGUI/ObjectUI.py:1579 flatcamTools/ToolNCC.py:209 #: flatcamTools/ToolNCC.py:923 flatcamTools/ToolPaint.py:192 #: flatcamTools/ToolPaint.py:849 flatcamTools/ToolSolderPaste.py:559 msgid "New Tool" msgstr "Nueva Herram" -#: flatcamGUI/ObjectUI.py:1595 +#: flatcamGUI/ObjectUI.py:1596 msgid "" "Add a new tool to the Tool Table\n" "with the specified diameter." @@ -8622,13 +8258,13 @@ msgstr "" "Agregar una nueva herramienta a la tabla de herramientas\n" "con el diámetro especificado." -#: flatcamGUI/ObjectUI.py:1600 flatcamTools/ToolNCC.py:300 +#: flatcamGUI/ObjectUI.py:1601 flatcamTools/ToolNCC.py:300 #: flatcamTools/ToolNCC.py:634 flatcamTools/ToolPaint.py:283 #: flatcamTools/ToolPaint.py:679 msgid "Add from DB" msgstr "Agregar desde DB" -#: flatcamGUI/ObjectUI.py:1602 flatcamTools/ToolNCC.py:302 +#: flatcamGUI/ObjectUI.py:1603 flatcamTools/ToolNCC.py:302 #: flatcamTools/ToolPaint.py:285 msgid "" "Add a new tool to the Tool Table\n" @@ -8637,7 +8273,7 @@ msgstr "" "Agregar una nueva herramienta a la tabla de herramientas\n" "de la base de datos de herramientas." -#: flatcamGUI/ObjectUI.py:1617 +#: flatcamGUI/ObjectUI.py:1618 msgid "" "Copy a selection of tools in the Tool Table\n" "by first selecting a row in the Tool Table." @@ -8645,7 +8281,7 @@ msgstr "" "Copie una selección de herramientas en la tabla de herramientas\n" "seleccionando primero una fila en la Tabla de herramientas." -#: flatcamGUI/ObjectUI.py:1623 +#: flatcamGUI/ObjectUI.py:1624 msgid "" "Delete a selection of tools in the Tool Table\n" "by first selecting a row in the Tool Table." @@ -8653,7 +8289,7 @@ msgstr "" "Eliminar una selección de herramientas en la tabla de herramientas\n" "seleccionando primero una fila en la Tabla de herramientas." -#: flatcamGUI/ObjectUI.py:1750 flatcamGUI/PreferencesUI.py:4296 +#: flatcamGUI/ObjectUI.py:1751 flatcamGUI/PreferencesUI.py:4296 msgid "" "Height of the tool when\n" "moving without cutting." @@ -8661,7 +8297,7 @@ msgstr "" "Altura de la herramienta cuando\n" "Moviéndose sin cortar." -#: flatcamGUI/ObjectUI.py:1783 flatcamGUI/PreferencesUI.py:4395 +#: flatcamGUI/ObjectUI.py:1784 flatcamGUI/PreferencesUI.py:4395 msgid "" "Cutting speed in the XY\n" "plane in units per minute.\n" @@ -8671,7 +8307,7 @@ msgstr "" "Plano en unidades por minuto.\n" "Se llama también Plunge." -#: flatcamGUI/ObjectUI.py:1798 flatcamGUI/PreferencesUI.py:4505 +#: flatcamGUI/ObjectUI.py:1799 flatcamGUI/PreferencesUI.py:4505 msgid "" "Cutting speed in the XY plane\n" "(in units per minute).\n" @@ -8685,7 +8321,7 @@ msgstr "" "Es útil solo para Marlin,\n" "Ignorar para cualquier otro caso." -#: flatcamGUI/ObjectUI.py:1842 flatcamGUI/PreferencesUI.py:4412 +#: flatcamGUI/ObjectUI.py:1843 flatcamGUI/PreferencesUI.py:4412 msgid "" "Speed of the spindle in RPM (optional).\n" "If LASER preprocessor is used,\n" @@ -8695,7 +8331,7 @@ msgstr "" "Si se utiliza el postprocesador LÁSER,\n" "Este valor es el poder del láser." -#: flatcamGUI/ObjectUI.py:1945 flatcamGUI/PreferencesUI.py:4317 +#: flatcamGUI/ObjectUI.py:1946 flatcamGUI/PreferencesUI.py:4317 msgid "" "Include tool-change sequence\n" "in the Machine Code (Pause for tool change)." @@ -8703,7 +8339,7 @@ msgstr "" "Incluir secuencia de cambio de herramienta\n" "en el código de máquina (pausa para cambio de herramienta)." -#: flatcamGUI/ObjectUI.py:2014 flatcamGUI/PreferencesUI.py:4449 +#: flatcamGUI/ObjectUI.py:2015 flatcamGUI/PreferencesUI.py:4449 msgid "" "The Preprocessor file that dictates\n" "the Machine Code (like GCode, RML, HPGL) output." @@ -8711,15 +8347,15 @@ msgstr "" "El archivo de postprocesador que dicta\n" "la salida del código de máquina (como GCode, RML, HPGL)." -#: flatcamGUI/ObjectUI.py:2035 +#: flatcamGUI/ObjectUI.py:2036 msgid "Generate the CNC Job object." msgstr "Genere el objeto de trabajo CNC." -#: flatcamGUI/ObjectUI.py:2052 +#: flatcamGUI/ObjectUI.py:2053 msgid "Launch Paint Tool in Tools Tab." msgstr "Inicie la herramienta Pintura en la pestaña Herramientas." -#: flatcamGUI/ObjectUI.py:2060 flatcamGUI/PreferencesUI.py:5874 +#: flatcamGUI/ObjectUI.py:2061 flatcamGUI/PreferencesUI.py:5874 msgid "" "Creates tool paths to cover the\n" "whole area of a polygon (remove\n" @@ -8731,15 +8367,15 @@ msgstr "" "todo el cobre). Te harán preguntas\n" "Para hacer clic en el polígono deseado." -#: flatcamGUI/ObjectUI.py:2115 +#: flatcamGUI/ObjectUI.py:2116 msgid "CNC Job Object" msgstr "Objeto de trabajo CNC" -#: flatcamGUI/ObjectUI.py:2126 flatcamGUI/PreferencesUI.py:4703 +#: flatcamGUI/ObjectUI.py:2127 flatcamGUI/PreferencesUI.py:4703 msgid "Plot kind" msgstr "Tipo de trazado" -#: flatcamGUI/ObjectUI.py:2129 flatcamGUI/PreferencesUI.py:4705 +#: flatcamGUI/ObjectUI.py:2130 flatcamGUI/PreferencesUI.py:4705 msgid "" "This selects the kind of geometries on the canvas to plot.\n" "Those can be either of type 'Travel' which means the moves\n" @@ -8751,15 +8387,15 @@ msgstr "" "Por encima de la pieza de trabajo o puede ser de tipo 'Corte',\n" "Lo que significa los movimientos que cortan en el material." -#: flatcamGUI/ObjectUI.py:2138 flatcamGUI/PreferencesUI.py:4713 +#: flatcamGUI/ObjectUI.py:2139 flatcamGUI/PreferencesUI.py:4713 msgid "Travel" msgstr "Viajar" -#: flatcamGUI/ObjectUI.py:2142 flatcamGUI/PreferencesUI.py:4722 +#: flatcamGUI/ObjectUI.py:2143 flatcamGUI/PreferencesUI.py:4722 msgid "Display Annotation" msgstr "Mostrar anotación" -#: flatcamGUI/ObjectUI.py:2144 flatcamGUI/PreferencesUI.py:4724 +#: flatcamGUI/ObjectUI.py:2145 flatcamGUI/PreferencesUI.py:4724 msgid "" "This selects if to display text annotation on the plot.\n" "When checked it will display numbers in order for each end\n" @@ -8769,11 +8405,11 @@ msgstr "" "Cuando está marcado, mostrará números en orden para cada final.\n" "de una linea de viaje." -#: flatcamGUI/ObjectUI.py:2159 +#: flatcamGUI/ObjectUI.py:2160 msgid "Travelled dist." msgstr "Dist. recorrida" -#: flatcamGUI/ObjectUI.py:2161 flatcamGUI/ObjectUI.py:2166 +#: flatcamGUI/ObjectUI.py:2162 flatcamGUI/ObjectUI.py:2167 msgid "" "This is the total travelled distance on X-Y plane.\n" "In current units." @@ -8781,11 +8417,11 @@ msgstr "" "Esta es la distancia total recorrida en el plano X-Y.\n" "En unidades actuales." -#: flatcamGUI/ObjectUI.py:2171 +#: flatcamGUI/ObjectUI.py:2172 msgid "Estimated time" msgstr "Duración estimada" -#: flatcamGUI/ObjectUI.py:2173 flatcamGUI/ObjectUI.py:2178 +#: flatcamGUI/ObjectUI.py:2174 flatcamGUI/ObjectUI.py:2179 msgid "" "This is the estimated time to do the routing/drilling,\n" "without the time spent in ToolChange events." @@ -8793,11 +8429,11 @@ 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:2213 +#: flatcamGUI/ObjectUI.py:2214 msgid "CNC Tools Table" msgstr "Tabla de herramientas CNC" -#: flatcamGUI/ObjectUI.py:2216 +#: flatcamGUI/ObjectUI.py:2217 msgid "" "Tools in this CNCJob object used for cutting.\n" "The tool diameter is used for plotting on canvas.\n" @@ -8820,23 +8456,23 @@ msgstr "" "C4),\n" "bola (B) o en forma de V (V)." -#: flatcamGUI/ObjectUI.py:2244 flatcamGUI/ObjectUI.py:2255 +#: flatcamGUI/ObjectUI.py:2245 flatcamGUI/ObjectUI.py:2256 msgid "P" msgstr "P" -#: flatcamGUI/ObjectUI.py:2265 +#: flatcamGUI/ObjectUI.py:2266 msgid "Update Plot" msgstr "Actualizar Trama" -#: flatcamGUI/ObjectUI.py:2267 +#: flatcamGUI/ObjectUI.py:2268 msgid "Update the plot." msgstr "Actualiza la trama." -#: flatcamGUI/ObjectUI.py:2274 flatcamGUI/PreferencesUI.py:5120 +#: flatcamGUI/ObjectUI.py:2275 flatcamGUI/PreferencesUI.py:5120 msgid "Export CNC Code" msgstr "Exportar código CNC" -#: flatcamGUI/ObjectUI.py:2276 flatcamGUI/PreferencesUI.py:5061 +#: flatcamGUI/ObjectUI.py:2277 flatcamGUI/PreferencesUI.py:5061 #: flatcamGUI/PreferencesUI.py:5122 msgid "" "Export and save G-Code to\n" @@ -8845,11 +8481,11 @@ msgstr "" "Exportar y guardar código G a\n" "Hacer este objeto a un archivo." -#: flatcamGUI/ObjectUI.py:2282 +#: flatcamGUI/ObjectUI.py:2283 msgid "Prepend to CNC Code" msgstr "Anteponer al código del CNC" -#: flatcamGUI/ObjectUI.py:2284 flatcamGUI/ObjectUI.py:2291 +#: flatcamGUI/ObjectUI.py:2285 flatcamGUI/ObjectUI.py:2292 #: flatcamGUI/PreferencesUI.py:5077 msgid "" "Type here any G-Code commands you would\n" @@ -8858,11 +8494,11 @@ msgstr "" "Escribe aquí cualquier comando de G-Code que quieras\n" "Me gusta agregar al principio del archivo G-Code." -#: flatcamGUI/ObjectUI.py:2297 +#: flatcamGUI/ObjectUI.py:2298 msgid "Append to CNC Code" msgstr "Añadir al código CNC" -#: flatcamGUI/ObjectUI.py:2299 flatcamGUI/ObjectUI.py:2307 +#: flatcamGUI/ObjectUI.py:2300 flatcamGUI/ObjectUI.py:2308 #: flatcamGUI/PreferencesUI.py:5093 msgid "" "Type here any G-Code commands you would\n" @@ -8873,11 +8509,11 @@ msgstr "" "Me gusta adjuntar al archivo generado.\n" "Es decir: M2 (Fin del programa)" -#: flatcamGUI/ObjectUI.py:2321 flatcamGUI/PreferencesUI.py:5128 +#: flatcamGUI/ObjectUI.py:2322 flatcamGUI/PreferencesUI.py:5128 msgid "Toolchange G-Code" msgstr "Cambio de herra. G-Code" -#: flatcamGUI/ObjectUI.py:2324 flatcamGUI/PreferencesUI.py:5131 +#: flatcamGUI/ObjectUI.py:2325 flatcamGUI/PreferencesUI.py:5131 msgid "" "Type here any G-Code commands you would\n" "like to be executed when Toolchange event is encountered.\n" @@ -8899,7 +8535,7 @@ msgstr "" "que tiene 'toolchange_custom' en su nombre y esto está construido\n" "teniendo como plantilla el archivo posprocesador 'Toolchange Custom'." -#: flatcamGUI/ObjectUI.py:2339 +#: flatcamGUI/ObjectUI.py:2340 msgid "" "Type here any G-Code commands you would\n" "like to be executed when Toolchange event is encountered.\n" @@ -8917,11 +8553,11 @@ msgstr "" "ADVERTENCIA: solo se puede usar con un archivo de preprocesador\n" "que tiene 'toolchange_custom' en su nombre." -#: flatcamGUI/ObjectUI.py:2354 flatcamGUI/PreferencesUI.py:5170 +#: flatcamGUI/ObjectUI.py:2355 flatcamGUI/PreferencesUI.py:5170 msgid "Use Toolchange Macro" msgstr "Util. la herra. de cambio de macro" -#: flatcamGUI/ObjectUI.py:2356 flatcamGUI/PreferencesUI.py:5172 +#: flatcamGUI/ObjectUI.py:2357 flatcamGUI/PreferencesUI.py:5172 msgid "" "Check this box if you want to use\n" "a Custom Toolchange GCode (macro)." @@ -8929,7 +8565,7 @@ msgstr "" "Marque esta casilla si desea utilizar\n" "una herramienta personalizada para cambiar GCode (macro)." -#: flatcamGUI/ObjectUI.py:2364 flatcamGUI/PreferencesUI.py:5184 +#: flatcamGUI/ObjectUI.py:2365 flatcamGUI/PreferencesUI.py:5184 msgid "" "A list of the FlatCAM variables that can be used\n" "in the Toolchange event.\n" @@ -8939,7 +8575,7 @@ msgstr "" "en el evento Cambio de herramienta.\n" "Deben estar rodeados por el símbolo '%'" -#: flatcamGUI/ObjectUI.py:2371 flatcamGUI/PreferencesUI.py:2627 +#: flatcamGUI/ObjectUI.py:2372 flatcamGUI/PreferencesUI.py:2627 #: flatcamGUI/PreferencesUI.py:3833 flatcamGUI/PreferencesUI.py:4640 #: flatcamGUI/PreferencesUI.py:5191 flatcamGUI/PreferencesUI.py:5310 #: flatcamGUI/PreferencesUI.py:5640 flatcamGUI/PreferencesUI.py:5797 @@ -8950,65 +8586,65 @@ msgstr "" #: flatcamGUI/PreferencesUI.py:7646 flatcamGUI/PreferencesUI.py:7900 #: flatcamGUI/PreferencesUI.py:8016 flatcamGUI/PreferencesUI.py:8135 #: flatcamGUI/PreferencesUI.py:8347 flatcamGUI/PreferencesUI.py:8556 -#: flatcamTools/ToolCopperThieving.py:90 flatcamTools/ToolFiducials.py:149 +#: flatcamTools/ToolCopperThieving.py:89 flatcamTools/ToolFiducials.py:149 #: flatcamTools/ToolInvertGerber.py:82 msgid "Parameters" msgstr "Parámetros" -#: flatcamGUI/ObjectUI.py:2374 flatcamGUI/PreferencesUI.py:5196 +#: flatcamGUI/ObjectUI.py:2375 flatcamGUI/PreferencesUI.py:5196 msgid "FlatCAM CNC parameters" msgstr "Parámetros de FlatCAM CNC" -#: flatcamGUI/ObjectUI.py:2375 flatcamGUI/PreferencesUI.py:5201 +#: flatcamGUI/ObjectUI.py:2376 flatcamGUI/PreferencesUI.py:5201 msgid "tool number" msgstr "número de herramienta" -#: flatcamGUI/ObjectUI.py:2376 flatcamGUI/PreferencesUI.py:5202 +#: flatcamGUI/ObjectUI.py:2377 flatcamGUI/PreferencesUI.py:5202 msgid "tool diameter" msgstr "diámetro de herramienta" -#: flatcamGUI/ObjectUI.py:2377 flatcamGUI/PreferencesUI.py:5203 +#: flatcamGUI/ObjectUI.py:2378 flatcamGUI/PreferencesUI.py:5203 msgid "for Excellon, total number of drills" msgstr "para Excellon, núm. total de taladros" -#: flatcamGUI/ObjectUI.py:2379 flatcamGUI/PreferencesUI.py:5205 +#: flatcamGUI/ObjectUI.py:2380 flatcamGUI/PreferencesUI.py:5205 msgid "X coord for Toolchange" msgstr "Coord. X para Cambio de Herramienta" -#: flatcamGUI/ObjectUI.py:2380 flatcamGUI/PreferencesUI.py:5206 +#: flatcamGUI/ObjectUI.py:2381 flatcamGUI/PreferencesUI.py:5206 msgid "Y coord for Toolchange" msgstr "Coord. Y para Cambio de Herramienta" -#: flatcamGUI/ObjectUI.py:2381 flatcamGUI/PreferencesUI.py:5208 +#: flatcamGUI/ObjectUI.py:2382 flatcamGUI/PreferencesUI.py:5208 msgid "Z coord for Toolchange" msgstr "Coord Z para cambio de herramientas" -#: flatcamGUI/ObjectUI.py:2382 +#: flatcamGUI/ObjectUI.py:2383 msgid "depth where to cut" msgstr "profundidad donde cortar" -#: flatcamGUI/ObjectUI.py:2383 +#: flatcamGUI/ObjectUI.py:2384 msgid "height where to travel" msgstr "altura donde viajar" -#: flatcamGUI/ObjectUI.py:2384 flatcamGUI/PreferencesUI.py:5211 +#: flatcamGUI/ObjectUI.py:2385 flatcamGUI/PreferencesUI.py:5211 msgid "the step value for multidepth cut" msgstr "el valor del paso para corte de profundidad múltiple" -#: flatcamGUI/ObjectUI.py:2386 flatcamGUI/PreferencesUI.py:5213 +#: flatcamGUI/ObjectUI.py:2387 flatcamGUI/PreferencesUI.py:5213 msgid "the value for the spindle speed" msgstr "el valor de la velocidad del husillo" -#: flatcamGUI/ObjectUI.py:2388 +#: flatcamGUI/ObjectUI.py:2389 msgid "time to dwell to allow the spindle to reach it's set RPM" msgstr "" "tiempo de espera para permitir que el husillo alcance su RPM establecido" -#: flatcamGUI/ObjectUI.py:2404 +#: flatcamGUI/ObjectUI.py:2405 msgid "View CNC Code" msgstr "Ver código CNC" -#: flatcamGUI/ObjectUI.py:2406 +#: flatcamGUI/ObjectUI.py:2407 msgid "" "Opens TAB to view/modify/print G-Code\n" "file." @@ -9016,11 +8652,11 @@ msgstr "" "Abre la pestaña para ver / modificar / imprimir el código G\n" "expediente." -#: flatcamGUI/ObjectUI.py:2411 +#: flatcamGUI/ObjectUI.py:2412 msgid "Save CNC Code" msgstr "Guardar código CNC" -#: flatcamGUI/ObjectUI.py:2413 +#: flatcamGUI/ObjectUI.py:2414 msgid "" "Opens dialog to save G-Code\n" "file." @@ -9028,81 +8664,81 @@ msgstr "" "Abre el diálogo para guardar el código G\n" "expediente." -#: flatcamGUI/ObjectUI.py:2447 +#: flatcamGUI/ObjectUI.py:2448 msgid "Script Object" msgstr "Objeto de script" -#: flatcamGUI/ObjectUI.py:2467 flatcamGUI/ObjectUI.py:2541 +#: flatcamGUI/ObjectUI.py:2468 flatcamGUI/ObjectUI.py:2542 msgid "Auto Completer" msgstr "Autocompletador" -#: flatcamGUI/ObjectUI.py:2469 +#: flatcamGUI/ObjectUI.py:2470 msgid "This selects if the auto completer is enabled in the Script Editor." msgstr "" "Esto selecciona si el autocompletador está habilitado en el Editor de " "secuencias de comandos." -#: flatcamGUI/ObjectUI.py:2514 +#: flatcamGUI/ObjectUI.py:2515 msgid "Document Object" msgstr "Objeto de Documento" -#: flatcamGUI/ObjectUI.py:2543 +#: flatcamGUI/ObjectUI.py:2544 msgid "This selects if the auto completer is enabled in the Document Editor." msgstr "" "Esto selecciona si el autocompletador está habilitado en el Editor de " "Documentos." -#: flatcamGUI/ObjectUI.py:2561 +#: flatcamGUI/ObjectUI.py:2562 msgid "Font Type" msgstr "Tipo de Fuente" -#: flatcamGUI/ObjectUI.py:2578 flatcamGUI/PreferencesUI.py:1278 +#: flatcamGUI/ObjectUI.py:2579 flatcamGUI/PreferencesUI.py:1278 msgid "Font Size" msgstr "Tamaño de Fuente" -#: flatcamGUI/ObjectUI.py:2614 +#: flatcamGUI/ObjectUI.py:2615 msgid "Alignment" msgstr "Alineación" -#: flatcamGUI/ObjectUI.py:2619 +#: flatcamGUI/ObjectUI.py:2620 msgid "Align Left" msgstr "Alinear a la izquierda" -#: flatcamGUI/ObjectUI.py:2629 +#: flatcamGUI/ObjectUI.py:2630 msgid "Align Right" msgstr "Alinear a la derecha" -#: flatcamGUI/ObjectUI.py:2634 +#: flatcamGUI/ObjectUI.py:2635 msgid "Justify" msgstr "Alinear Justificar" -#: flatcamGUI/ObjectUI.py:2641 +#: flatcamGUI/ObjectUI.py:2642 msgid "Font Color" msgstr "Color de Fuente" -#: flatcamGUI/ObjectUI.py:2643 +#: flatcamGUI/ObjectUI.py:2644 msgid "Set the font color for the selected text" msgstr "Establecer el color de fuente para el texto seleccionado" -#: flatcamGUI/ObjectUI.py:2657 +#: flatcamGUI/ObjectUI.py:2658 msgid "Selection Color" msgstr "Color de seleccion" -#: flatcamGUI/ObjectUI.py:2659 +#: flatcamGUI/ObjectUI.py:2660 msgid "Set the selection color when doing text selection." msgstr "Establezca el color de selección al hacer la selección de texto." -#: flatcamGUI/ObjectUI.py:2673 +#: flatcamGUI/ObjectUI.py:2674 msgid "Tab Size" msgstr "Tamaño de Pestaña" -#: flatcamGUI/ObjectUI.py:2675 +#: flatcamGUI/ObjectUI.py:2676 msgid "Set the tab size. In pixels. Default value is 80 pixels." msgstr "" "Establece el tamaño de la pestaña. En píxeles El valor predeterminado es 80 " "píxeles." -#: flatcamGUI/PlotCanvasLegacy.py:1301 +#: flatcamGUI/PlotCanvasLegacy.py:1299 msgid "" "Could not annotate due of a difference between the number of text elements " "and the number of text positions." @@ -9763,6 +9399,17 @@ msgstr "" "La elección aquí influirá en los parámetros en\n" "La pestaña seleccionada para todo tipo de objetos FlatCAM." +#: flatcamGUI/PreferencesUI.py:1646 flatcamGUI/PreferencesUI.py:3041 +#: flatcamObjects/FlatCAMExcellon.py:614 flatcamObjects/FlatCAMGeometry.py:485 +#: flatcamObjects/FlatCAMGerber.py:250 +msgid "Basic" +msgstr "BASIC" + +#: flatcamGUI/PreferencesUI.py:1647 flatcamObjects/FlatCAMExcellon.py:627 +#: flatcamObjects/FlatCAMGeometry.py:506 flatcamObjects/FlatCAMGerber.py:277 +msgid "Advanced" +msgstr "Avanzado" + #: flatcamGUI/PreferencesUI.py:1653 msgid "Portable app" msgstr "Aplicación portátil" @@ -10975,7 +10622,7 @@ msgstr "" #: flatcamGUI/PreferencesUI.py:4484 flatcamGUI/PreferencesUI.py:7045 #: flatcamGUI/PreferencesUI.py:8092 flatcamTools/ToolCalibration.py:125 -#: flatcamTools/ToolSolderPaste.py:241 +#: flatcamTools/ToolSolderPaste.py:240 msgid "Toolchange X-Y" msgstr "Cambio de herra X, Y" @@ -11350,7 +10997,7 @@ msgstr "" "Si no está marcado, use el algoritmo estándar." #: flatcamGUI/PreferencesUI.py:5588 flatcamGUI/PreferencesUI.py:6119 -#: flatcamGUI/PreferencesUI.py:7696 flatcamTools/ToolCopperThieving.py:127 +#: flatcamGUI/PreferencesUI.py:7696 flatcamTools/ToolCopperThieving.py:126 #: flatcamTools/ToolNCC.py:535 flatcamTools/ToolNCC.py:1311 #: flatcamTools/ToolNCC.py:1642 flatcamTools/ToolNCC.py:1930 #: flatcamTools/ToolNCC.py:1985 flatcamTools/ToolPaint.py:486 @@ -11359,8 +11006,8 @@ msgid "Area Selection" msgstr "Selección de área" #: flatcamGUI/PreferencesUI.py:5588 flatcamGUI/PreferencesUI.py:6119 -#: flatcamGUI/PreferencesUI.py:7697 flatcamTools/ToolCopperThieving.py:128 -#: flatcamTools/ToolDblSided.py:217 flatcamTools/ToolNCC.py:535 +#: flatcamGUI/PreferencesUI.py:7697 flatcamTools/ToolCopperThieving.py:127 +#: flatcamTools/ToolDblSided.py:216 flatcamTools/ToolNCC.py:535 #: flatcamTools/ToolNCC.py:1658 flatcamTools/ToolNCC.py:1936 #: flatcamTools/ToolNCC.py:1993 flatcamTools/ToolNCC.py:2301 #: flatcamTools/ToolNCC.py:2581 flatcamTools/ToolNCC.py:3007 @@ -11421,11 +11068,11 @@ msgid "Cutout Tool Options" msgstr "Opc. de herra. de recorte" #: flatcamGUI/PreferencesUI.py:5651 flatcamTools/ToolCalculators.py:123 -#: flatcamTools/ToolCutOut.py:130 +#: flatcamTools/ToolCutOut.py:129 msgid "Tool Diameter" msgstr "Diá. de Herram" -#: flatcamGUI/PreferencesUI.py:5653 flatcamTools/ToolCutOut.py:132 +#: flatcamGUI/PreferencesUI.py:5653 flatcamTools/ToolCutOut.py:131 msgid "" "Diameter of the tool used to cutout\n" "the PCB shape out of the surrounding material." @@ -11437,7 +11084,7 @@ msgstr "" msgid "Object kind" msgstr "Tipo de objeto" -#: flatcamGUI/PreferencesUI.py:5710 flatcamTools/ToolCutOut.py:78 +#: flatcamGUI/PreferencesUI.py:5710 flatcamTools/ToolCutOut.py:77 msgid "" "Choice of what kind the object we want to cutout is.
    - Single: " "contain a single PCB Gerber outline object.
    - Panel: a panel PCB " @@ -11449,15 +11096,15 @@ msgstr "" "un panel de PCB Gerber objeto, que se hace\n" "de muchos esquemas de PCB individuales." -#: flatcamGUI/PreferencesUI.py:5717 flatcamTools/ToolCutOut.py:84 +#: flatcamGUI/PreferencesUI.py:5717 flatcamTools/ToolCutOut.py:83 msgid "Single" msgstr "Soltero" -#: flatcamGUI/PreferencesUI.py:5718 flatcamTools/ToolCutOut.py:85 +#: flatcamGUI/PreferencesUI.py:5718 flatcamTools/ToolCutOut.py:84 msgid "Panel" msgstr "Panel" -#: flatcamGUI/PreferencesUI.py:5725 flatcamTools/ToolCutOut.py:193 +#: flatcamGUI/PreferencesUI.py:5725 flatcamTools/ToolCutOut.py:192 msgid "" "Margin over bounds. A positive value here\n" "will make the cutout of the PCB further from\n" @@ -11467,11 +11114,11 @@ msgstr "" "hará que el corte de la PCB esté más alejado de\n" "el borde real de PCB" -#: flatcamGUI/PreferencesUI.py:5738 flatcamTools/ToolCutOut.py:204 +#: flatcamGUI/PreferencesUI.py:5738 flatcamTools/ToolCutOut.py:203 msgid "Gap size" msgstr "Tamaño de la brecha" -#: flatcamGUI/PreferencesUI.py:5740 flatcamTools/ToolCutOut.py:206 +#: flatcamGUI/PreferencesUI.py:5740 flatcamTools/ToolCutOut.py:205 msgid "" "The size of the bridge gaps in the cutout\n" "used to keep the board connected to\n" @@ -11483,7 +11130,7 @@ msgstr "" "el material circundante (el\n" "de la cual se corta el PCB)." -#: flatcamGUI/PreferencesUI.py:5754 flatcamTools/ToolCutOut.py:250 +#: flatcamGUI/PreferencesUI.py:5754 flatcamTools/ToolCutOut.py:249 msgid "Gaps" msgstr "Brechas" @@ -11511,11 +11158,11 @@ msgstr "" "- 2tb - 2 * top + 2 * bottom\n" "- 8 - 2 * izquierda + 2 * derecha + 2 * arriba + 2 * abajo" -#: flatcamGUI/PreferencesUI.py:5778 flatcamTools/ToolCutOut.py:223 +#: flatcamGUI/PreferencesUI.py:5778 flatcamTools/ToolCutOut.py:222 msgid "Convex Shape" msgstr "Forma convexa" -#: flatcamGUI/PreferencesUI.py:5780 flatcamTools/ToolCutOut.py:226 +#: flatcamGUI/PreferencesUI.py:5780 flatcamTools/ToolCutOut.py:225 msgid "" "Create a convex shape surrounding the entire PCB.\n" "Used only if the source object type is Gerber." @@ -11539,17 +11186,17 @@ msgstr "" msgid "Drill dia" msgstr "Diá. del taladro" -#: flatcamGUI/PreferencesUI.py:5815 flatcamTools/ToolDblSided.py:364 -#: flatcamTools/ToolDblSided.py:369 +#: flatcamGUI/PreferencesUI.py:5815 flatcamTools/ToolDblSided.py:363 +#: flatcamTools/ToolDblSided.py:368 msgid "Diameter of the drill for the alignment holes." msgstr "Diámetro del taladro para los orificios de alineación." -#: flatcamGUI/PreferencesUI.py:5822 flatcamTools/ToolDblSided.py:378 +#: flatcamGUI/PreferencesUI.py:5822 flatcamTools/ToolDblSided.py:377 msgid "Align Axis" msgstr "Alinear eje" #: flatcamGUI/PreferencesUI.py:5824 flatcamGUI/PreferencesUI.py:5837 -#: flatcamTools/ToolDblSided.py:166 flatcamTools/ToolDblSided.py:380 +#: flatcamTools/ToolDblSided.py:165 flatcamTools/ToolDblSided.py:379 msgid "Mirror vertically (X) or horizontally (Y)." msgstr "Espejo verticalmente (X) u horizontal (Y)." @@ -11557,11 +11204,11 @@ msgstr "Espejo verticalmente (X) u horizontal (Y)." msgid "Mirror Axis:" msgstr "Eje del espejo:" -#: flatcamGUI/PreferencesUI.py:5846 flatcamTools/ToolDblSided.py:182 +#: flatcamGUI/PreferencesUI.py:5846 flatcamTools/ToolDblSided.py:181 msgid "Point" msgstr "Punto" -#: flatcamGUI/PreferencesUI.py:5847 flatcamTools/ToolDblSided.py:183 +#: flatcamGUI/PreferencesUI.py:5847 flatcamTools/ToolDblSided.py:182 msgid "Box" msgstr "Caja" @@ -11760,12 +11407,12 @@ msgstr "" "mientras que un valor menor que 1 lo sacudirá." #: flatcamGUI/PreferencesUI.py:6264 flatcamGUI/PreferencesUI.py:6783 -#: flatcamTools/ToolFilm.py:162 flatcamTools/ToolTransform.py:149 +#: flatcamTools/ToolFilm.py:162 flatcamTools/ToolTransform.py:148 msgid "X factor" msgstr "Factor X" #: flatcamGUI/PreferencesUI.py:6273 flatcamGUI/PreferencesUI.py:6796 -#: flatcamTools/ToolFilm.py:171 flatcamTools/ToolTransform.py:169 +#: flatcamTools/ToolFilm.py:171 flatcamTools/ToolTransform.py:168 msgid "Y factor" msgstr "Factor Y" @@ -11782,12 +11429,12 @@ msgstr "" "mientras que los valores negativos se desviarán a la izquierda." #: flatcamGUI/PreferencesUI.py:6295 flatcamGUI/PreferencesUI.py:6752 -#: flatcamTools/ToolFilm.py:201 flatcamTools/ToolTransform.py:98 +#: flatcamTools/ToolFilm.py:201 flatcamTools/ToolTransform.py:97 msgid "X angle" msgstr "Ángulo X" #: flatcamGUI/PreferencesUI.py:6304 flatcamGUI/PreferencesUI.py:6766 -#: flatcamTools/ToolFilm.py:210 flatcamTools/ToolTransform.py:119 +#: flatcamTools/ToolFilm.py:210 flatcamTools/ToolTransform.py:118 msgid "Y angle" msgstr "Ángulo Y" @@ -11883,11 +11530,11 @@ msgstr "" "Cada elemento es una copia del objeto fuente espaciado.\n" "a una distancia X, distancia Y entre sí." -#: flatcamGUI/PreferencesUI.py:6480 flatcamTools/ToolPanelize.py:163 +#: flatcamGUI/PreferencesUI.py:6480 flatcamTools/ToolPanelize.py:161 msgid "Spacing cols" msgstr "Col. de espaciado" -#: flatcamGUI/PreferencesUI.py:6482 flatcamTools/ToolPanelize.py:165 +#: flatcamGUI/PreferencesUI.py:6482 flatcamTools/ToolPanelize.py:163 msgid "" "Spacing between columns of the desired panel.\n" "In current units." @@ -11895,11 +11542,11 @@ msgstr "" "Espaciado entre columnas del panel deseado.\n" "En unidades actuales." -#: flatcamGUI/PreferencesUI.py:6494 flatcamTools/ToolPanelize.py:175 +#: flatcamGUI/PreferencesUI.py:6494 flatcamTools/ToolPanelize.py:173 msgid "Spacing rows" msgstr "Separación de filas" -#: flatcamGUI/PreferencesUI.py:6496 flatcamTools/ToolPanelize.py:177 +#: flatcamGUI/PreferencesUI.py:6496 flatcamTools/ToolPanelize.py:175 msgid "" "Spacing between rows of the desired panel.\n" "In current units." @@ -11907,27 +11554,27 @@ msgstr "" "Espaciado entre filas del panel deseado.\n" "En unidades actuales." -#: flatcamGUI/PreferencesUI.py:6507 flatcamTools/ToolPanelize.py:186 +#: flatcamGUI/PreferencesUI.py:6507 flatcamTools/ToolPanelize.py:184 msgid "Columns" msgstr "Columnas" -#: flatcamGUI/PreferencesUI.py:6509 flatcamTools/ToolPanelize.py:188 +#: flatcamGUI/PreferencesUI.py:6509 flatcamTools/ToolPanelize.py:186 msgid "Number of columns of the desired panel" msgstr "Número de columnas del panel deseado" -#: flatcamGUI/PreferencesUI.py:6519 flatcamTools/ToolPanelize.py:196 +#: flatcamGUI/PreferencesUI.py:6519 flatcamTools/ToolPanelize.py:194 msgid "Rows" msgstr "Filas" -#: flatcamGUI/PreferencesUI.py:6521 flatcamTools/ToolPanelize.py:198 +#: flatcamGUI/PreferencesUI.py:6521 flatcamTools/ToolPanelize.py:196 msgid "Number of rows of the desired panel" msgstr "Número de filas del panel deseado" -#: flatcamGUI/PreferencesUI.py:6528 flatcamTools/ToolPanelize.py:205 +#: flatcamGUI/PreferencesUI.py:6528 flatcamTools/ToolPanelize.py:203 msgid "Geo" msgstr "Geo" -#: flatcamGUI/PreferencesUI.py:6529 flatcamTools/ToolPanelize.py:206 +#: flatcamGUI/PreferencesUI.py:6529 flatcamTools/ToolPanelize.py:204 msgid "Panel Type" msgstr "Tipo de panel" @@ -11945,7 +11592,7 @@ msgstr "" msgid "Constrain within" msgstr "Restringir dentro de" -#: flatcamGUI/PreferencesUI.py:6542 flatcamTools/ToolPanelize.py:218 +#: flatcamGUI/PreferencesUI.py:6542 flatcamTools/ToolPanelize.py:216 msgid "" "Area define by DX and DY within to constrain the panel.\n" "DX and DY values are in current units.\n" @@ -11959,11 +11606,11 @@ msgstr "" "El panel final tendrá tantas columnas y filas como\n" "encajan completamente dentro del área seleccionada." -#: flatcamGUI/PreferencesUI.py:6555 flatcamTools/ToolPanelize.py:230 +#: flatcamGUI/PreferencesUI.py:6555 flatcamTools/ToolPanelize.py:228 msgid "Width (DX)" msgstr "Ancho (DX)" -#: flatcamGUI/PreferencesUI.py:6557 flatcamTools/ToolPanelize.py:232 +#: flatcamGUI/PreferencesUI.py:6557 flatcamTools/ToolPanelize.py:230 msgid "" "The width (DX) within which the panel must fit.\n" "In current units." @@ -11971,11 +11618,11 @@ msgstr "" "El ancho (DX) dentro del cual debe caber el panel.\n" "En unidades actuales." -#: flatcamGUI/PreferencesUI.py:6568 flatcamTools/ToolPanelize.py:241 +#: flatcamGUI/PreferencesUI.py:6568 flatcamTools/ToolPanelize.py:239 msgid "Height (DY)" msgstr "Altura (DY)" -#: flatcamGUI/PreferencesUI.py:6570 flatcamTools/ToolPanelize.py:243 +#: flatcamGUI/PreferencesUI.py:6570 flatcamTools/ToolPanelize.py:241 msgid "" "The height (DY)within which the panel must fit.\n" "In current units." @@ -12105,15 +11752,15 @@ msgstr "" msgid "Skew" msgstr "Sesgar" -#: flatcamGUI/PreferencesUI.py:6785 flatcamTools/ToolTransform.py:151 +#: flatcamGUI/PreferencesUI.py:6785 flatcamTools/ToolTransform.py:150 msgid "Factor for scaling on X axis." msgstr "Factor de escalado en eje X." -#: flatcamGUI/PreferencesUI.py:6798 flatcamTools/ToolTransform.py:171 +#: flatcamGUI/PreferencesUI.py:6798 flatcamTools/ToolTransform.py:170 msgid "Factor for scaling on Y axis." msgstr "Factor de escalado en eje Y." -#: flatcamGUI/PreferencesUI.py:6806 flatcamTools/ToolTransform.py:192 +#: flatcamGUI/PreferencesUI.py:6806 flatcamTools/ToolTransform.py:191 msgid "" "Scale the selected object(s)\n" "using the Scale_X factor for both axis." @@ -12121,7 +11768,7 @@ msgstr "" "Escala el (los) objeto (s) seleccionado (s)\n" "utilizando el factor de escala X para ambos ejes." -#: flatcamGUI/PreferencesUI.py:6814 flatcamTools/ToolTransform.py:199 +#: flatcamGUI/PreferencesUI.py:6814 flatcamTools/ToolTransform.py:198 msgid "" "Scale the selected object(s)\n" "using the origin reference when checked,\n" @@ -12133,32 +11780,32 @@ msgstr "" "y el centro del cuadro delimitador más grande.\n" "de los objetos seleccionados cuando no está marcada." -#: flatcamGUI/PreferencesUI.py:6830 flatcamTools/ToolTransform.py:218 +#: flatcamGUI/PreferencesUI.py:6830 flatcamTools/ToolTransform.py:217 msgid "X val" msgstr "Valor X" -#: flatcamGUI/PreferencesUI.py:6832 flatcamTools/ToolTransform.py:220 +#: flatcamGUI/PreferencesUI.py:6832 flatcamTools/ToolTransform.py:219 msgid "Distance to offset on X axis. In current units." msgstr "Distancia a desplazamiento en el eje X. En unidades actuales." -#: flatcamGUI/PreferencesUI.py:6843 flatcamTools/ToolTransform.py:238 +#: flatcamGUI/PreferencesUI.py:6843 flatcamTools/ToolTransform.py:237 msgid "Y val" msgstr "Valor Y" -#: flatcamGUI/PreferencesUI.py:6845 flatcamTools/ToolTransform.py:240 +#: flatcamGUI/PreferencesUI.py:6845 flatcamTools/ToolTransform.py:239 msgid "Distance to offset on Y axis. In current units." msgstr "Distancia a desplazamiento en el eje Y. En unidades actuales." -#: flatcamGUI/PreferencesUI.py:6851 flatcamTools/ToolDblSided.py:68 -#: flatcamTools/ToolDblSided.py:96 flatcamTools/ToolDblSided.py:126 +#: flatcamGUI/PreferencesUI.py:6851 flatcamTools/ToolDblSided.py:67 +#: flatcamTools/ToolDblSided.py:95 flatcamTools/ToolDblSided.py:125 msgid "Mirror" msgstr "Espejo" -#: flatcamGUI/PreferencesUI.py:6855 flatcamTools/ToolTransform.py:284 +#: flatcamGUI/PreferencesUI.py:6855 flatcamTools/ToolTransform.py:283 msgid "Mirror Reference" msgstr "Espejo de referencia" -#: flatcamGUI/PreferencesUI.py:6857 flatcamTools/ToolTransform.py:286 +#: flatcamGUI/PreferencesUI.py:6857 flatcamTools/ToolTransform.py:285 msgid "" "Flip the selected object(s)\n" "around the point in Point Entry Field.\n" @@ -12196,11 +11843,11 @@ msgstr "" "la 'y' en (x, y) se usará cuando se use voltear en Y y" #: flatcamGUI/PreferencesUI.py:6883 flatcamTools/ToolDistance.py:496 -#: flatcamTools/ToolDistanceMin.py:287 flatcamTools/ToolTransform.py:333 +#: flatcamTools/ToolDistanceMin.py:287 flatcamTools/ToolTransform.py:332 msgid "Distance" msgstr "Distancia" -#: flatcamGUI/PreferencesUI.py:6885 flatcamTools/ToolTransform.py:335 +#: flatcamGUI/PreferencesUI.py:6885 flatcamTools/ToolTransform.py:334 msgid "" "A positive value will create the effect of dilation,\n" "while a negative value will create the effect of erosion.\n" @@ -12212,7 +11859,7 @@ msgstr "" "Cada elemento de geometría del objeto se incrementará\n" "o disminuido con la 'distancia'." -#: flatcamGUI/PreferencesUI.py:6902 flatcamTools/ToolTransform.py:360 +#: flatcamGUI/PreferencesUI.py:6902 flatcamTools/ToolTransform.py:359 msgid "" "A positive value will create the effect of dilation,\n" "while a negative value will create the effect of erosion.\n" @@ -12227,11 +11874,11 @@ msgstr "" "de la dimensión inicial." #: flatcamGUI/PreferencesUI.py:6919 flatcamGUI/PreferencesUI.py:7563 -#: flatcamTools/ToolQRCode.py:197 flatcamTools/ToolTransform.py:384 +#: flatcamTools/ToolQRCode.py:197 flatcamTools/ToolTransform.py:383 msgid "Rounded" msgstr "Redondeado" -#: flatcamGUI/PreferencesUI.py:6921 flatcamTools/ToolTransform.py:386 +#: flatcamGUI/PreferencesUI.py:6921 flatcamTools/ToolTransform.py:385 msgid "" "If checked then the buffer will surround the buffered shape,\n" "every corner will be rounded.\n" @@ -12259,41 +11906,41 @@ msgstr "" msgid "New Nozzle Dia" msgstr "Nuevo diá de boquilla" -#: flatcamGUI/PreferencesUI.py:6967 flatcamTools/ToolSolderPaste.py:108 +#: flatcamGUI/PreferencesUI.py:6967 flatcamTools/ToolSolderPaste.py:107 msgid "Diameter for the new Nozzle tool to add in the Tool Table" msgstr "" "Diámetro para la nueva herramienta de boquillas para agregar en la tabla de " "herramientas" -#: flatcamGUI/PreferencesUI.py:6983 flatcamTools/ToolSolderPaste.py:184 +#: flatcamGUI/PreferencesUI.py:6983 flatcamTools/ToolSolderPaste.py:183 msgid "Z Dispense Start" msgstr "Inicio de dispen. Z" -#: flatcamGUI/PreferencesUI.py:6985 flatcamTools/ToolSolderPaste.py:186 +#: flatcamGUI/PreferencesUI.py:6985 flatcamTools/ToolSolderPaste.py:185 msgid "The height (Z) when solder paste dispensing starts." msgstr "La altura (Z) cuando comienza la dispensación de pasta de soldadura." -#: flatcamGUI/PreferencesUI.py:6996 flatcamTools/ToolSolderPaste.py:196 +#: flatcamGUI/PreferencesUI.py:6996 flatcamTools/ToolSolderPaste.py:195 msgid "Z Dispense" msgstr "Dispensación Z" -#: flatcamGUI/PreferencesUI.py:6998 flatcamTools/ToolSolderPaste.py:198 +#: flatcamGUI/PreferencesUI.py:6998 flatcamTools/ToolSolderPaste.py:197 msgid "The height (Z) when doing solder paste dispensing." msgstr "La altura (Z) al dispensar pasta de soldadura." -#: flatcamGUI/PreferencesUI.py:7009 flatcamTools/ToolSolderPaste.py:208 +#: flatcamGUI/PreferencesUI.py:7009 flatcamTools/ToolSolderPaste.py:207 msgid "Z Dispense Stop" msgstr "Parada de dispen. Z" -#: flatcamGUI/PreferencesUI.py:7011 flatcamTools/ToolSolderPaste.py:210 +#: flatcamGUI/PreferencesUI.py:7011 flatcamTools/ToolSolderPaste.py:209 msgid "The height (Z) when solder paste dispensing stops." msgstr "La altura (Z) cuando se detiene la dispensación de pasta de soldadura." -#: flatcamGUI/PreferencesUI.py:7022 flatcamTools/ToolSolderPaste.py:220 +#: flatcamGUI/PreferencesUI.py:7022 flatcamTools/ToolSolderPaste.py:219 msgid "Z Travel" msgstr "Viajar Z" -#: flatcamGUI/PreferencesUI.py:7024 flatcamTools/ToolSolderPaste.py:222 +#: flatcamGUI/PreferencesUI.py:7024 flatcamTools/ToolSolderPaste.py:221 msgid "" "The height (Z) for travel between pads\n" "(without dispensing solder paste)." @@ -12301,15 +11948,15 @@ msgstr "" "La altura (Z) para viajar entre almohadillas\n" "(sin dispensar pasta de soldadura)." -#: flatcamGUI/PreferencesUI.py:7036 flatcamTools/ToolSolderPaste.py:233 +#: flatcamGUI/PreferencesUI.py:7036 flatcamTools/ToolSolderPaste.py:232 msgid "Z Toolchange" msgstr "Cambio de herra. Z" -#: flatcamGUI/PreferencesUI.py:7038 flatcamTools/ToolSolderPaste.py:235 +#: flatcamGUI/PreferencesUI.py:7038 flatcamTools/ToolSolderPaste.py:234 msgid "The height (Z) for tool (nozzle) change." msgstr "La altura (Z) para el cambio de herramienta (boquilla)." -#: flatcamGUI/PreferencesUI.py:7047 flatcamTools/ToolSolderPaste.py:243 +#: flatcamGUI/PreferencesUI.py:7047 flatcamTools/ToolSolderPaste.py:242 msgid "" "The X,Y location for tool (nozzle) change.\n" "The format is (x, y) where x and y are real numbers." @@ -12317,11 +11964,11 @@ msgstr "" "La ubicación X, Y para el cambio de herramienta (boquilla).\n" "El formato es (x, y) donde x e y son números reales." -#: flatcamGUI/PreferencesUI.py:7061 flatcamTools/ToolSolderPaste.py:256 +#: flatcamGUI/PreferencesUI.py:7061 flatcamTools/ToolSolderPaste.py:255 msgid "Feedrate (speed) while moving on the X-Y plane." msgstr "Avance (velocidad) mientras se mueve en el plano X-Y." -#: flatcamGUI/PreferencesUI.py:7074 flatcamTools/ToolSolderPaste.py:268 +#: flatcamGUI/PreferencesUI.py:7074 flatcamTools/ToolSolderPaste.py:267 msgid "" "Feedrate (speed) while moving vertically\n" "(on Z plane)." @@ -12329,7 +11976,7 @@ msgstr "" "Avance (velocidad) mientras se mueve verticalmente\n" "(en el plano Z)." -#: flatcamGUI/PreferencesUI.py:7086 flatcamTools/ToolSolderPaste.py:279 +#: flatcamGUI/PreferencesUI.py:7086 flatcamTools/ToolSolderPaste.py:278 msgid "Feedrate Z Dispense" msgstr "Avance de Dispens. Z" @@ -12341,11 +11988,11 @@ msgstr "" "Avance (velocidad) mientras se mueve verticalmente\n" "para dispensar la posición (en el plano Z)." -#: flatcamGUI/PreferencesUI.py:7099 flatcamTools/ToolSolderPaste.py:291 +#: flatcamGUI/PreferencesUI.py:7099 flatcamTools/ToolSolderPaste.py:290 msgid "Spindle Speed FWD" msgstr "Veloc. del husillo FWD" -#: flatcamGUI/PreferencesUI.py:7101 flatcamTools/ToolSolderPaste.py:293 +#: flatcamGUI/PreferencesUI.py:7101 flatcamTools/ToolSolderPaste.py:292 msgid "" "The dispenser speed while pushing solder paste\n" "through the dispenser nozzle." @@ -12353,19 +12000,19 @@ msgstr "" "La velocidad del dispensador mientras empuja la pasta de soldadura\n" "a través de la boquilla dispensadora." -#: flatcamGUI/PreferencesUI.py:7113 flatcamTools/ToolSolderPaste.py:304 +#: flatcamGUI/PreferencesUI.py:7113 flatcamTools/ToolSolderPaste.py:303 msgid "Dwell FWD" msgstr "Morar FWD" -#: flatcamGUI/PreferencesUI.py:7115 flatcamTools/ToolSolderPaste.py:306 +#: flatcamGUI/PreferencesUI.py:7115 flatcamTools/ToolSolderPaste.py:305 msgid "Pause after solder dispensing." msgstr "Pausa después de la dispensación de soldadura." -#: flatcamGUI/PreferencesUI.py:7125 flatcamTools/ToolSolderPaste.py:315 +#: flatcamGUI/PreferencesUI.py:7125 flatcamTools/ToolSolderPaste.py:314 msgid "Spindle Speed REV" msgstr "Veloc. del husillo REV" -#: flatcamGUI/PreferencesUI.py:7127 flatcamTools/ToolSolderPaste.py:317 +#: flatcamGUI/PreferencesUI.py:7127 flatcamTools/ToolSolderPaste.py:316 msgid "" "The dispenser speed while retracting solder paste\n" "through the dispenser nozzle." @@ -12373,11 +12020,11 @@ msgstr "" "La velocidad del dispensador mientras se retrae la pasta de soldadura\n" "a través de la boquilla dispensadora." -#: flatcamGUI/PreferencesUI.py:7139 flatcamTools/ToolSolderPaste.py:328 +#: flatcamGUI/PreferencesUI.py:7139 flatcamTools/ToolSolderPaste.py:327 msgid "Dwell REV" msgstr "Morar REV" -#: flatcamGUI/PreferencesUI.py:7141 flatcamTools/ToolSolderPaste.py:330 +#: flatcamGUI/PreferencesUI.py:7141 flatcamTools/ToolSolderPaste.py:329 msgid "" "Pause after solder paste dispenser retracted,\n" "to allow pressure equilibrium." @@ -12385,7 +12032,7 @@ msgstr "" "Pausa después de que el dispensador de pasta de soldadura se retraiga,\n" "para permitir el equilibrio de presión." -#: flatcamGUI/PreferencesUI.py:7150 flatcamTools/ToolSolderPaste.py:338 +#: flatcamGUI/PreferencesUI.py:7150 flatcamTools/ToolSolderPaste.py:337 msgid "Files that control the GCode generation." msgstr "Archivos que controlan la generación de GCode." @@ -12600,7 +12247,7 @@ msgstr "" "Una herramienta para encontrar la distancia mínima entre\n" "cada dos elementos geométricos de Gerber" -#: flatcamGUI/PreferencesUI.py:7432 flatcamTools/ToolOptimal.py:79 +#: flatcamGUI/PreferencesUI.py:7432 flatcamTools/ToolOptimal.py:78 msgid "Precision" msgstr "Precisión" @@ -12771,7 +12418,7 @@ msgid "Number of steps (lines) used to interpolate circles." msgstr "Número de pasos (líneas) utilizados para interpolar círculos." #: flatcamGUI/PreferencesUI.py:7666 flatcamGUI/PreferencesUI.py:7870 -#: flatcamTools/ToolCopperThieving.py:97 flatcamTools/ToolCopperThieving.py:432 +#: flatcamTools/ToolCopperThieving.py:96 flatcamTools/ToolCopperThieving.py:431 msgid "Clearance" msgstr "Despeje" @@ -12785,7 +12432,7 @@ msgstr "" "(el relleno de polígono puede dividirse en múltiples polígonos)\n" "y las huellas de cobre en el archivo Gerber." -#: flatcamGUI/PreferencesUI.py:7699 flatcamTools/ToolCopperThieving.py:130 +#: flatcamGUI/PreferencesUI.py:7699 flatcamTools/ToolCopperThieving.py:129 msgid "Reference:" msgstr "Referencia:" @@ -12806,22 +12453,22 @@ msgstr "" #: flatcamGUI/PreferencesUI.py:7710 flatcamGUI/PreferencesUI.py:8175 #: flatcamGUI/PreferencesUI.py:8287 flatcamGUI/PreferencesUI.py:8387 -#: flatcamGUI/PreferencesUI.py:8501 flatcamTools/ToolCopperThieving.py:172 +#: flatcamGUI/PreferencesUI.py:8501 flatcamTools/ToolCopperThieving.py:171 #: flatcamTools/ToolExtractDrills.py:102 flatcamTools/ToolExtractDrills.py:240 #: flatcamTools/ToolPunchGerber.py:113 flatcamTools/ToolPunchGerber.py:268 msgid "Rectangular" msgstr "Rectangular" -#: flatcamGUI/PreferencesUI.py:7711 flatcamTools/ToolCopperThieving.py:173 +#: flatcamGUI/PreferencesUI.py:7711 flatcamTools/ToolCopperThieving.py:172 msgid "Minimal" msgstr "Mínimo" -#: flatcamGUI/PreferencesUI.py:7713 flatcamTools/ToolCopperThieving.py:175 +#: flatcamGUI/PreferencesUI.py:7713 flatcamTools/ToolCopperThieving.py:174 #: flatcamTools/ToolFilm.py:113 msgid "Box Type:" msgstr "Tipo de cercado:" -#: flatcamGUI/PreferencesUI.py:7715 flatcamTools/ToolCopperThieving.py:177 +#: flatcamGUI/PreferencesUI.py:7715 flatcamTools/ToolCopperThieving.py:176 msgid "" "- 'Rectangular' - the bounding box will be of rectangular shape.\n" "- 'Minimal' - the bounding box will be the convex hull shape." @@ -12829,23 +12476,23 @@ msgstr "" "- 'Rectangular': el cuadro delimitador tendrá forma rectangular.\n" "- 'Mínimo': el cuadro delimitador tendrá forma de casco convexo." -#: flatcamGUI/PreferencesUI.py:7729 flatcamTools/ToolCopperThieving.py:193 +#: flatcamGUI/PreferencesUI.py:7729 flatcamTools/ToolCopperThieving.py:192 msgid "Dots Grid" msgstr "Cuadrícula de puntos" -#: flatcamGUI/PreferencesUI.py:7730 flatcamTools/ToolCopperThieving.py:194 +#: flatcamGUI/PreferencesUI.py:7730 flatcamTools/ToolCopperThieving.py:193 msgid "Squares Grid" msgstr "Cuadrícula de cuadrados" -#: flatcamGUI/PreferencesUI.py:7731 flatcamTools/ToolCopperThieving.py:195 +#: flatcamGUI/PreferencesUI.py:7731 flatcamTools/ToolCopperThieving.py:194 msgid "Lines Grid" msgstr "Cuadrícula de líneas" -#: flatcamGUI/PreferencesUI.py:7733 flatcamTools/ToolCopperThieving.py:197 +#: flatcamGUI/PreferencesUI.py:7733 flatcamTools/ToolCopperThieving.py:196 msgid "Fill Type:" msgstr "Tipo de relleno:" -#: flatcamGUI/PreferencesUI.py:7735 flatcamTools/ToolCopperThieving.py:199 +#: flatcamGUI/PreferencesUI.py:7735 flatcamTools/ToolCopperThieving.py:198 msgid "" "- 'Solid' - copper thieving will be a solid polygon.\n" "- 'Dots Grid' - the empty area will be filled with a pattern of dots.\n" @@ -12859,54 +12506,54 @@ msgstr "" "cuadrados.\n" "- 'Cuadrícula de líneas': el área vacía se rellenará con un patrón de líneas." -#: flatcamGUI/PreferencesUI.py:7743 flatcamTools/ToolCopperThieving.py:218 +#: flatcamGUI/PreferencesUI.py:7743 flatcamTools/ToolCopperThieving.py:217 msgid "Dots Grid Parameters" msgstr "Parámetros de cuadrícula de puntos" -#: flatcamGUI/PreferencesUI.py:7749 flatcamTools/ToolCopperThieving.py:224 +#: flatcamGUI/PreferencesUI.py:7749 flatcamTools/ToolCopperThieving.py:223 msgid "Dot diameter in Dots Grid." msgstr "Diámetro de punto en cuadrícula de puntos." #: flatcamGUI/PreferencesUI.py:7760 flatcamGUI/PreferencesUI.py:7789 -#: flatcamGUI/PreferencesUI.py:7818 flatcamTools/ToolCopperThieving.py:235 -#: flatcamTools/ToolCopperThieving.py:275 -#: flatcamTools/ToolCopperThieving.py:315 +#: flatcamGUI/PreferencesUI.py:7818 flatcamTools/ToolCopperThieving.py:234 +#: flatcamTools/ToolCopperThieving.py:274 +#: flatcamTools/ToolCopperThieving.py:314 msgid "Spacing" msgstr "Spacing" -#: flatcamGUI/PreferencesUI.py:7762 flatcamTools/ToolCopperThieving.py:237 +#: flatcamGUI/PreferencesUI.py:7762 flatcamTools/ToolCopperThieving.py:236 msgid "Distance between each two dots in Dots Grid." msgstr "Distancia entre cada dos puntos en la cuadrícula de puntos." -#: flatcamGUI/PreferencesUI.py:7772 flatcamTools/ToolCopperThieving.py:258 +#: flatcamGUI/PreferencesUI.py:7772 flatcamTools/ToolCopperThieving.py:257 msgid "Squares Grid Parameters" msgstr "Parámetros de la cuadrícula de cuadrados" -#: flatcamGUI/PreferencesUI.py:7778 flatcamTools/ToolCopperThieving.py:264 +#: flatcamGUI/PreferencesUI.py:7778 flatcamTools/ToolCopperThieving.py:263 msgid "Square side size in Squares Grid." msgstr "Tamaño del lado cuadrado en cuadrícula de cuadrados." -#: flatcamGUI/PreferencesUI.py:7791 flatcamTools/ToolCopperThieving.py:277 +#: flatcamGUI/PreferencesUI.py:7791 flatcamTools/ToolCopperThieving.py:276 msgid "Distance between each two squares in Squares Grid." msgstr "Distancia entre cada dos cuadrados en la cuadrícula de cuadrados." -#: flatcamGUI/PreferencesUI.py:7801 flatcamTools/ToolCopperThieving.py:298 +#: flatcamGUI/PreferencesUI.py:7801 flatcamTools/ToolCopperThieving.py:297 msgid "Lines Grid Parameters" msgstr "Parámetros de cuadrícula de líneas" -#: flatcamGUI/PreferencesUI.py:7807 flatcamTools/ToolCopperThieving.py:304 +#: flatcamGUI/PreferencesUI.py:7807 flatcamTools/ToolCopperThieving.py:303 msgid "Line thickness size in Lines Grid." msgstr "Tamaño del grosor de línea en la cuadrícula de líneas." -#: flatcamGUI/PreferencesUI.py:7820 flatcamTools/ToolCopperThieving.py:317 +#: flatcamGUI/PreferencesUI.py:7820 flatcamTools/ToolCopperThieving.py:316 msgid "Distance between each two lines in Lines Grid." msgstr "Distancia entre cada dos líneas en la cuadrícula de líneas." -#: flatcamGUI/PreferencesUI.py:7830 flatcamTools/ToolCopperThieving.py:355 +#: flatcamGUI/PreferencesUI.py:7830 flatcamTools/ToolCopperThieving.py:354 msgid "Robber Bar Parameters" msgstr "Parámetros de la Robber Bar" -#: flatcamGUI/PreferencesUI.py:7832 flatcamTools/ToolCopperThieving.py:357 +#: flatcamGUI/PreferencesUI.py:7832 flatcamTools/ToolCopperThieving.py:356 msgid "" "Parameters used for the robber bar.\n" "Robber bar = copper border to help in pattern hole plating." @@ -12914,27 +12561,27 @@ msgstr "" "Parámetros utilizados para la Robber Bar.\n" "Robber Bar = borde de cobre para ayudar en el enchapado de agujeros." -#: flatcamGUI/PreferencesUI.py:7840 flatcamTools/ToolCopperThieving.py:365 +#: flatcamGUI/PreferencesUI.py:7840 flatcamTools/ToolCopperThieving.py:364 msgid "Bounding box margin for robber bar." msgstr "Margen límite del recinto para Robber Bar." -#: flatcamGUI/PreferencesUI.py:7851 flatcamTools/ToolCopperThieving.py:376 +#: flatcamGUI/PreferencesUI.py:7851 flatcamTools/ToolCopperThieving.py:375 msgid "Thickness" msgstr "Espesor" -#: flatcamGUI/PreferencesUI.py:7853 flatcamTools/ToolCopperThieving.py:378 +#: flatcamGUI/PreferencesUI.py:7853 flatcamTools/ToolCopperThieving.py:377 msgid "The robber bar thickness." msgstr "El grosor de la Robber Bar." -#: flatcamGUI/PreferencesUI.py:7863 flatcamTools/ToolCopperThieving.py:409 +#: flatcamGUI/PreferencesUI.py:7863 flatcamTools/ToolCopperThieving.py:408 msgid "Pattern Plating Mask" msgstr "Máscara de baño de patrones" -#: flatcamGUI/PreferencesUI.py:7865 flatcamTools/ToolCopperThieving.py:411 +#: flatcamGUI/PreferencesUI.py:7865 flatcamTools/ToolCopperThieving.py:410 msgid "Generate a mask for pattern plating." msgstr "Genere una máscara para el enchapado de patrones." -#: flatcamGUI/PreferencesUI.py:7872 flatcamTools/ToolCopperThieving.py:434 +#: flatcamGUI/PreferencesUI.py:7872 flatcamTools/ToolCopperThieving.py:433 msgid "" "The distance between the possible copper thieving elements\n" "and/or robber bar and the actual openings in the mask." @@ -12948,7 +12595,7 @@ msgstr "Opc. de Herram. Fiduciales" #: flatcamGUI/PreferencesUI.py:7902 flatcamGUI/PreferencesUI.py:8018 #: flatcamGUI/PreferencesUI.py:8137 flatcamGUI/PreferencesUI.py:8349 -#: flatcamTools/ToolCopperThieving.py:92 flatcamTools/ToolFiducials.py:151 +#: flatcamTools/ToolCopperThieving.py:91 flatcamTools/ToolFiducials.py:151 msgid "Parameters used for this tool." msgstr "Parámetros utilizados para esta herramienta." @@ -13282,7 +12929,7 @@ msgid "" "fixed diameter holes.\n" "- Fixed Annular Ring -> will try to keep a set annular ring.\n" "- Proportional -> will make a Gerber punch hole having the diameter a " -"percentage of the pad diameter.\n" +"percentage of the pad diameter." msgstr "" "La fuente del orificio de perforación puede ser:\n" "- Objeto Excellon-> el centro de perforación de objetos Excellon servirá " @@ -13291,7 +12938,7 @@ msgstr "" "referencia agregando agujeros de diámetro fijo.\n" "- Anillo anular fijo -> intentará mantener un anillo anular establecido.\n" "- Proporcional -> hará un orificio de perforación Gerber con un diámetro del " -"porcentaje del diámetro de la almohadilla.\n" +"porcentaje del diámetro de la almohadilla." #: flatcamGUI/PreferencesUI.py:8552 msgid "Invert Gerber Tool Options" @@ -13475,11 +13122,394 @@ msgstr "Eliminar palabra clave" msgid "Delete a keyword from the list" msgstr "Eliminar una palabra clave de la lista" -#: flatcamParsers/ParseExcellon.py:315 +#: flatcamObjects/FlatCAMCNCJob.py:429 flatcamObjects/FlatCAMDocument.py:71 +#: flatcamObjects/FlatCAMScript.py:83 +msgid "Basic" +msgstr "Basic" + +#: flatcamObjects/FlatCAMCNCJob.py:435 flatcamObjects/FlatCAMDocument.py:75 +#: flatcamObjects/FlatCAMScript.py:87 +msgid "Advanced" +msgstr "Avanzado" + +#: flatcamObjects/FlatCAMCNCJob.py:478 +msgid "Plotting..." +msgstr "Trazando ..." + +#: flatcamObjects/FlatCAMCNCJob.py:507 flatcamObjects/FlatCAMCNCJob.py:512 +#: flatcamTools/ToolSolderPaste.py:1499 +msgid "Export Machine Code ..." +msgstr "Exportar código de máquina ..." + +#: flatcamObjects/FlatCAMCNCJob.py:517 flatcamTools/ToolSolderPaste.py:1503 +msgid "Export Machine Code cancelled ..." +msgstr "Exportar código de máquina cancelado ..." + +#: flatcamObjects/FlatCAMCNCJob.py:538 +msgid "Machine Code file saved to" +msgstr "Archivo de código de máquina guardado en" + +#: flatcamObjects/FlatCAMCNCJob.py:599 flatcamTools/ToolCalibration.py:1097 +msgid "Loaded Machine Code into Code Editor" +msgstr "Código de máquina cargado en el editor de código" + +#: flatcamObjects/FlatCAMCNCJob.py:739 +msgid "This CNCJob object can't be processed because it is a" +msgstr "Este objeto CNCJob no se puede procesar porque es un" + +#: flatcamObjects/FlatCAMCNCJob.py:741 +msgid "CNCJob object" +msgstr "Objeto CNCJob" + +#: flatcamObjects/FlatCAMCNCJob.py:921 +msgid "" +"G-code does not have a G94 code and we will not include the code in the " +"'Prepend to GCode' text box" +msgstr "" +"El código G no tiene un código G94 y no incluiremos el código en el cuadro " +"de texto 'Anteponer al código GC'" + +#: flatcamObjects/FlatCAMCNCJob.py:932 +msgid "Cancelled. The Toolchange Custom code is enabled but it's empty." +msgstr "" +"Cancelado. El código personalizado de Toolchange está habilitado pero está " +"vacío." + +#: flatcamObjects/FlatCAMCNCJob.py:937 +msgid "Toolchange G-code was replaced by a custom code." +msgstr "El código G de Toolchange fue reemplazado por un código personalizado." + +#: flatcamObjects/FlatCAMCNCJob.py:985 flatcamObjects/FlatCAMCNCJob.py:995 +msgid "" +"The used preprocessor file has to have in it's name: 'toolchange_custom'" +msgstr "" +"El archivo de postprocesador usado debe tener su nombre: 'toolchange_custom'" + +#: flatcamObjects/FlatCAMCNCJob.py:998 +msgid "There is no preprocessor file." +msgstr "No hay archivo de postprocesador." + +#: flatcamObjects/FlatCAMDocument.py:175 +msgid "Document Editor" +msgstr "Editor de Documentos" + +#: flatcamObjects/FlatCAMExcellon.py:514 flatcamObjects/FlatCAMExcellon.py:746 +#: flatcamObjects/FlatCAMGeometry.py:306 flatcamObjects/FlatCAMGeometry.py:767 +#: flatcamTools/ToolNCC.py:811 flatcamTools/ToolNCC.py:1191 +#: flatcamTools/ToolPaint.py:779 flatcamTools/ToolPaint.py:1166 +msgid "Multiple Tools" +msgstr "Herramientas múltiples" + +#: flatcamObjects/FlatCAMExcellon.py:726 +msgid "No Tool Selected" +msgstr "Ninguna herramienta seleccionada" + +#: flatcamObjects/FlatCAMExcellon.py:1076 +#: flatcamObjects/FlatCAMExcellon.py:1168 +#: flatcamObjects/FlatCAMExcellon.py:1355 +msgid "Please select one or more tools from the list and try again." +msgstr "" +"Por favor seleccione una o más herramientas de la lista e intente nuevamente." + +#: flatcamObjects/FlatCAMExcellon.py:1083 +msgid "Milling tool for DRILLS is larger than hole size. Cancelled." +msgstr "" +"La herramienta de fresado para TALADRO es más grande que el tamaño del " +"orificio. Cancelado." + +#: flatcamObjects/FlatCAMExcellon.py:1098 +#: flatcamObjects/FlatCAMExcellon.py:1188 +#: flatcamObjects/FlatCAMExcellon.py:1373 +#: tclCommands/TclCommandDrillcncjob.py:193 +msgid "Tool_nr" +msgstr "Herramienta_nu" + +#: flatcamObjects/FlatCAMExcellon.py:1098 +#: flatcamObjects/FlatCAMExcellon.py:1188 +#: flatcamObjects/FlatCAMExcellon.py:1373 +#: tclCommands/TclCommandDrillcncjob.py:193 +msgid "Drills_Nr" +msgstr "Taladros_nu" + +#: flatcamObjects/FlatCAMExcellon.py:1098 +#: flatcamObjects/FlatCAMExcellon.py:1188 +#: flatcamObjects/FlatCAMExcellon.py:1373 +#: tclCommands/TclCommandDrillcncjob.py:193 +msgid "Slots_Nr" +msgstr "Ranuras_nu" + +#: flatcamObjects/FlatCAMExcellon.py:1177 +msgid "Milling tool for SLOTS is larger than hole size. Cancelled." +msgstr "" +"La herramienta de fresado para SLOTS es más grande que el tamaño del " +"orificio. Cancelado." + +#: flatcamObjects/FlatCAMExcellon.py:1281 +#: flatcamObjects/FlatCAMGeometry.py:1517 +msgid "Focus Z" +msgstr "Enfoque Z" + +#: flatcamObjects/FlatCAMExcellon.py:1300 +#: flatcamObjects/FlatCAMGeometry.py:1536 +msgid "Laser Power" +msgstr "Poder del laser" + +#: flatcamObjects/FlatCAMExcellon.py:1430 +#: flatcamObjects/FlatCAMGeometry.py:1973 +#: flatcamObjects/FlatCAMGeometry.py:1977 +#: flatcamObjects/FlatCAMGeometry.py:2122 +msgid "Generating CNC Code" +msgstr "Generando Código CNC" + +#: flatcamObjects/FlatCAMExcellon.py:1620 flatcamTools/ToolNCC.py:918 +#: flatcamTools/ToolPaint.py:844 +msgid "Current Tool parameters were applied to all tools." +msgstr "" +"Los parámetros actuales de la herramienta se aplicaron a todas las " +"herramientas." + +#: flatcamObjects/FlatCAMGeometry.py:119 flatcamObjects/FlatCAMGeometry.py:1181 +#: flatcamObjects/FlatCAMGeometry.py:1182 +#: flatcamObjects/FlatCAMGeometry.py:1191 +msgid "Iso" +msgstr "Aisl" + +#: flatcamObjects/FlatCAMGeometry.py:119 flatcamObjects/FlatCAMGeometry.py:439 +#: flatcamObjects/FlatCAMGeometry.py:826 flatcamObjects/FlatCAMGerber.py:890 +#: flatcamObjects/FlatCAMGerber.py:1038 +msgid "Rough" +msgstr "Áspero" + +#: flatcamObjects/FlatCAMGeometry.py:119 +msgid "Finish" +msgstr "Terminar" + +#: flatcamObjects/FlatCAMGeometry.py:474 +msgid "Add from Tool DB" +msgstr "Agregar desde la DB de herramientas" + +#: flatcamObjects/FlatCAMGeometry.py:845 +msgid "Tool added in Tool Table." +msgstr "Herramienta añadida en la tabla de herramientas." + +#: flatcamObjects/FlatCAMGeometry.py:954 flatcamObjects/FlatCAMGeometry.py:963 +msgid "Failed. Select a tool to copy." +msgstr "Ha fallado. Seleccione una herramienta para copiar." + +#: flatcamObjects/FlatCAMGeometry.py:992 +msgid "Tool was copied in Tool Table." +msgstr "La herramienta se copió en la tabla de herramientas." + +#: flatcamObjects/FlatCAMGeometry.py:1019 +msgid "Tool was edited in Tool Table." +msgstr "La herramienta fue editada en la tabla de herramientas." + +#: flatcamObjects/FlatCAMGeometry.py:1048 +#: flatcamObjects/FlatCAMGeometry.py:1057 +msgid "Failed. Select a tool to delete." +msgstr "Ha fallado. Seleccione una herramienta para eliminar." + +#: flatcamObjects/FlatCAMGeometry.py:1081 +msgid "Tool was deleted in Tool Table." +msgstr "La herramienta se eliminó en la tabla de herramientas." + +#: flatcamObjects/FlatCAMGeometry.py:1589 +msgid "This Geometry can't be processed because it is" +msgstr "Esta geometría no se puede procesar porque es" + +#: flatcamObjects/FlatCAMGeometry.py:1589 +msgid "geometry" +msgstr "geometría" + +#: flatcamObjects/FlatCAMGeometry.py:1630 +msgid "Failed. No tool selected in the tool table ..." +msgstr "" +"Ha fallado. Ninguna herramienta seleccionada en la tabla de herramientas ..." + +#: flatcamObjects/FlatCAMGeometry.py:1732 +#: flatcamObjects/FlatCAMGeometry.py:1882 +msgid "" +"Tool Offset is selected in Tool Table but no value is provided.\n" +"Add a Tool Offset or change the Offset Type." +msgstr "" +"La Herramienta de desplazamiento se selecciona en la Tabla de herramientas " +"pero no se proporciona ningún valor.\n" +"Agregue una Herramienta de compensación o cambie el Tipo de compensación." + +#: flatcamObjects/FlatCAMGeometry.py:1798 +#: flatcamObjects/FlatCAMGeometry.py:1944 +msgid "G-Code parsing in progress..." +msgstr "Análisis de código G en progreso ..." + +#: flatcamObjects/FlatCAMGeometry.py:1800 +#: flatcamObjects/FlatCAMGeometry.py:1946 +msgid "G-Code parsing finished..." +msgstr "Análisis de código G terminado ..." + +#: flatcamObjects/FlatCAMGeometry.py:1808 +msgid "Finished G-Code processing" +msgstr "Procesamiento de código G terminado" + +#: flatcamObjects/FlatCAMGeometry.py:1810 +#: flatcamObjects/FlatCAMGeometry.py:1958 +msgid "G-Code processing failed with error" +msgstr "El procesamiento del código G falló con error" + +#: flatcamObjects/FlatCAMGeometry.py:1852 flatcamTools/ToolSolderPaste.py:1301 +msgid "Cancelled. Empty file, it has no geometry" +msgstr "Cancelado. Archivo vacío, no tiene geometría" + +#: flatcamObjects/FlatCAMGeometry.py:1956 +#: flatcamObjects/FlatCAMGeometry.py:2117 +msgid "Finished G-Code processing..." +msgstr "Procesamiento de código G terminado ..." + +#: flatcamObjects/FlatCAMGeometry.py:1975 +#: flatcamObjects/FlatCAMGeometry.py:1979 +#: flatcamObjects/FlatCAMGeometry.py:2124 +msgid "CNCjob created" +msgstr "CNCjob creado" + +#: flatcamObjects/FlatCAMGeometry.py:2155 +#: flatcamObjects/FlatCAMGeometry.py:2164 flatcamParsers/ParseGerber.py:1867 +#: flatcamParsers/ParseGerber.py:1877 +msgid "Scale factor has to be a number: integer or float." +msgstr "El factor de escala debe ser un número: entero o Real." + +#: flatcamObjects/FlatCAMGeometry.py:2227 +msgid "Geometry Scale done." +msgstr "Escala de geometría realizada." + +#: flatcamObjects/FlatCAMGeometry.py:2244 flatcamParsers/ParseGerber.py:1993 +msgid "" +"An (x,y) pair of values are needed. Probable you entered only one value in " +"the Offset field." +msgstr "" +"Se necesita un par de valores (x, y). Probablemente haya ingresado un solo " +"valor en el campo Desplazamiento." + +#: flatcamObjects/FlatCAMGeometry.py:2300 +msgid "Geometry Offset done." +msgstr "Desplazamiento de geometría realizado." + +#: flatcamObjects/FlatCAMGeometry.py:2329 +msgid "" +"The Toolchange X,Y field in Edit -> Preferences has to be in the format (x, " +"y)\n" +"but now there is only one value, not two." +msgstr "" +"El campo Toolchange X, Y en Editar -> Preferencias tiene que estar en el " +"formato (x, y)\n" +"pero ahora solo hay un valor, no dos." + +#: flatcamObjects/FlatCAMGerber.py:493 +msgid "Buffering solid geometry" +msgstr "Amortiguación de geometría sólida" + +#: flatcamObjects/FlatCAMGerber.py:502 +msgid "Done" +msgstr "Hecho" + +#: flatcamObjects/FlatCAMGerber.py:528 flatcamObjects/FlatCAMGerber.py:554 +msgid "Operation could not be done." +msgstr "La operación no se pudo hacer." + +#: flatcamObjects/FlatCAMGerber.py:571 +msgid "Isolating..." +msgstr "Aislando ..." + +#: flatcamObjects/FlatCAMGerber.py:630 +msgid "Click on a polygon to isolate it." +msgstr "Haga clic en un polígono para aislarlo." + +#: flatcamObjects/FlatCAMGerber.py:669 flatcamObjects/FlatCAMGerber.py:773 +#: flatcamTools/ToolPaint.py:1511 +msgid "Added polygon" +msgstr "Polígono agregado" + +#: flatcamObjects/FlatCAMGerber.py:670 flatcamObjects/FlatCAMGerber.py:775 +msgid "Click to add next polygon or right click to start isolation." +msgstr "" +"Haga clic para agregar el siguiente polígono o haga clic con el botón " +"derecho para iniciar el aislamiento." + +#: flatcamObjects/FlatCAMGerber.py:682 flatcamTools/ToolPaint.py:1525 +msgid "Removed polygon" +msgstr "Polígono eliminado" + +#: flatcamObjects/FlatCAMGerber.py:683 +msgid "Click to add/remove next polygon or right click to start isolation." +msgstr "" +"Haga clic para agregar / eliminar el siguiente polígono o haga clic con el " +"botón derecho para iniciar el aislamiento." + +#: flatcamObjects/FlatCAMGerber.py:688 flatcamTools/ToolPaint.py:1531 +msgid "No polygon detected under click position." +msgstr "No se detectó ningún polígono bajo la posición de clic." + +#: flatcamObjects/FlatCAMGerber.py:709 flatcamTools/ToolPaint.py:1560 +msgid "List of single polygons is empty. Aborting." +msgstr "La lista de polígonos individuales está vacía. Abortar." + +#: flatcamObjects/FlatCAMGerber.py:778 +msgid "No polygon in selection." +msgstr "No hay polígono en la selección." + +#: flatcamObjects/FlatCAMGerber.py:906 flatcamObjects/FlatCAMGerber.py:985 +#: flatcamTools/ToolNCC.py:2081 flatcamTools/ToolNCC.py:3132 +#: flatcamTools/ToolNCC.py:3511 +msgid "Isolation geometry could not be generated." +msgstr "La geometría de aislamiento no se pudo generar." + +#: flatcamObjects/FlatCAMGerber.py:931 flatcamObjects/FlatCAMGerber.py:1063 +msgid "Isolation geometry created" +msgstr "Geometría de aislamiento creada" + +#: flatcamObjects/FlatCAMGerber.py:940 flatcamObjects/FlatCAMGerber.py:1070 +msgid "Subtracting Geo" +msgstr "Restando Geo" + +#: flatcamObjects/FlatCAMGerber.py:1395 +msgid "Plotting Apertures" +msgstr "Aperturas de trazado" + +#: flatcamObjects/FlatCAMObj.py:234 +msgid "Name changed from" +msgstr "Nombre cambiado de" + +#: flatcamObjects/FlatCAMObj.py:234 +msgid "to" +msgstr "a" + +#: flatcamObjects/FlatCAMObj.py:245 +msgid "Offsetting..." +msgstr "Compensación ..." + +#: flatcamObjects/FlatCAMObj.py:259 flatcamObjects/FlatCAMObj.py:264 +msgid "Scaling could not be executed." +msgstr "No se pudo ejecutar el escalado." + +#: flatcamObjects/FlatCAMObj.py:268 flatcamObjects/FlatCAMObj.py:276 +msgid "Scale done." +msgstr "Escala hecha." + +#: flatcamObjects/FlatCAMObj.py:274 +msgid "Scaling..." +msgstr "Escalando..." + +#: flatcamObjects/FlatCAMObj.py:292 +msgid "Skewing..." +msgstr "Sesgar..." + +#: flatcamObjects/FlatCAMScript.py:102 +msgid "Script Editor" +msgstr "Editor de guiones" + +#: flatcamParsers/ParseExcellon.py:316 msgid "This is GCODE mark" msgstr "Esta es la marca GCODE" -#: flatcamParsers/ParseExcellon.py:432 +#: flatcamParsers/ParseExcellon.py:433 msgid "" "No tool diameter info's. See shell.\n" "A tool change event: T" @@ -13487,7 +13517,7 @@ msgstr "" "No hay información de diámetro de herramienta. Ver caparazón.\n" "Un evento de cambio de herramienta: T" -#: flatcamParsers/ParseExcellon.py:435 +#: flatcamParsers/ParseExcellon.py:436 msgid "" "was found but the Excellon file have no informations regarding the tool " "diameters therefore the application will try to load it by using some 'fake' " @@ -13501,12 +13531,6 @@ msgstr "" "El usuario necesita editar el objeto Excellon resultante y cambiar los " "diámetros para reflejar los diámetros reales." -#: flatcamParsers/ParseExcellon.py:897 flatcamTools/ToolSolderPaste.py:1327 -msgid "An internal error has ocurred. See shell.\n" -msgstr "" -"Ha ocurrido un error interno. Ver caparazón.\n" -"\n" - #: flatcamParsers/ParseExcellon.py:900 msgid "" "Excellon Parser error.\n" @@ -13576,7 +13600,7 @@ msgstr "Contenido de la línea Gerber" msgid "Gerber Parser ERROR" msgstr "Analizador Gerber ERROR" -#: flatcamParsers/ParseGerber.py:1956 +#: flatcamParsers/ParseGerber.py:1957 msgid "Gerber Scale done." msgstr "Escala de Gerber hecha." @@ -13584,19 +13608,19 @@ msgstr "Escala de Gerber hecha." msgid "Gerber Offset done." msgstr "Gerber Offset hecho." -#: flatcamParsers/ParseGerber.py:2126 +#: flatcamParsers/ParseGerber.py:2125 msgid "Gerber Mirror done." msgstr "Espejo Gerber hecho." -#: flatcamParsers/ParseGerber.py:2200 +#: flatcamParsers/ParseGerber.py:2199 msgid "Gerber Skew done." msgstr "Gerber Sesgo hecho." -#: flatcamParsers/ParseGerber.py:2263 +#: flatcamParsers/ParseGerber.py:2261 msgid "Gerber Rotate done." msgstr "Rotar Gerber hecho." -#: flatcamParsers/ParseGerber.py:2419 +#: flatcamParsers/ParseGerber.py:2418 msgid "Gerber Buffer done." msgstr "Gerber Buffer hecho." @@ -13701,28 +13725,28 @@ msgstr "" "Si se utilizan estos puntos, se supone traslación y rotación." #: flatcamTools/ToolAlignObjects.py:176 flatcamTools/ToolCalculators.py:246 -#: flatcamTools/ToolCalibration.py:683 flatcamTools/ToolCopperThieving.py:485 -#: flatcamTools/ToolCutOut.py:372 flatcamTools/ToolDblSided.py:472 +#: flatcamTools/ToolCalibration.py:683 flatcamTools/ToolCopperThieving.py:484 +#: flatcamTools/ToolCutOut.py:371 flatcamTools/ToolDblSided.py:471 #: flatcamTools/ToolExtractDrills.py:310 flatcamTools/ToolFiducials.py:318 #: flatcamTools/ToolFilm.py:520 flatcamTools/ToolInvertGerber.py:140 -#: flatcamTools/ToolNCC.py:612 flatcamTools/ToolOptimal.py:238 -#: flatcamTools/ToolPaint.py:556 flatcamTools/ToolPanelize.py:269 +#: flatcamTools/ToolNCC.py:612 flatcamTools/ToolOptimal.py:237 +#: flatcamTools/ToolPaint.py:556 flatcamTools/ToolPanelize.py:267 #: flatcamTools/ToolPunchGerber.py:339 flatcamTools/ToolQRCode.py:314 -#: flatcamTools/ToolRulesCheck.py:516 flatcamTools/ToolSolderPaste.py:474 -#: flatcamTools/ToolSub.py:176 flatcamTools/ToolTransform.py:399 +#: flatcamTools/ToolRulesCheck.py:516 flatcamTools/ToolSolderPaste.py:473 +#: flatcamTools/ToolSub.py:176 flatcamTools/ToolTransform.py:398 msgid "Reset Tool" msgstr "Restablecer la Herramienta" #: flatcamTools/ToolAlignObjects.py:178 flatcamTools/ToolCalculators.py:248 -#: flatcamTools/ToolCalibration.py:685 flatcamTools/ToolCopperThieving.py:487 -#: flatcamTools/ToolCutOut.py:374 flatcamTools/ToolDblSided.py:474 +#: flatcamTools/ToolCalibration.py:685 flatcamTools/ToolCopperThieving.py:486 +#: flatcamTools/ToolCutOut.py:373 flatcamTools/ToolDblSided.py:473 #: flatcamTools/ToolExtractDrills.py:312 flatcamTools/ToolFiducials.py:320 #: flatcamTools/ToolFilm.py:522 flatcamTools/ToolInvertGerber.py:142 -#: flatcamTools/ToolNCC.py:614 flatcamTools/ToolOptimal.py:240 -#: flatcamTools/ToolPaint.py:558 flatcamTools/ToolPanelize.py:271 +#: flatcamTools/ToolNCC.py:614 flatcamTools/ToolOptimal.py:239 +#: flatcamTools/ToolPaint.py:558 flatcamTools/ToolPanelize.py:269 #: flatcamTools/ToolPunchGerber.py:341 flatcamTools/ToolQRCode.py:316 -#: flatcamTools/ToolRulesCheck.py:518 flatcamTools/ToolSolderPaste.py:476 -#: flatcamTools/ToolSub.py:178 flatcamTools/ToolTransform.py:401 +#: flatcamTools/ToolRulesCheck.py:518 flatcamTools/ToolSolderPaste.py:475 +#: flatcamTools/ToolSub.py:178 flatcamTools/ToolTransform.py:400 msgid "Will reset the tool parameters." msgstr "Restablecerá los parámetros de la herramienta." @@ -13756,8 +13780,8 @@ msgstr "Haga clic en el punto DESTINO." #: flatcamTools/ToolAlignObjects.py:385 flatcamTools/ToolAlignObjects.py:400 #: flatcamTools/ToolAlignObjects.py:407 -msgid " Or right click to cancel." -msgstr " O haga clic derecho para cancelar." +msgid "Or right click to cancel." +msgstr "O haga clic derecho para cancelar." #: flatcamTools/ToolAlignObjects.py:400 flatcamTools/ToolAlignObjects.py:407 #: flatcamTools/ToolFiducials.py:111 @@ -13877,7 +13901,7 @@ msgstr "" "(tanto como sea posible) esquinas del objeto." #: flatcamTools/ToolCalibration.py:193 flatcamTools/ToolFilm.py:76 -#: flatcamTools/ToolImage.py:54 flatcamTools/ToolPanelize.py:78 +#: flatcamTools/ToolImage.py:54 flatcamTools/ToolPanelize.py:76 #: flatcamTools/ToolProperties.py:177 msgid "Object Type" msgstr "Tipo de objeto" @@ -13984,7 +14008,7 @@ msgstr "" "a la derecha.\n" "- cuarto punto -> punto de verificación final. Solo para evaluación." -#: flatcamTools/ToolCalibration.py:403 flatcamTools/ToolSolderPaste.py:349 +#: flatcamTools/ToolCalibration.py:403 flatcamTools/ToolSolderPaste.py:348 msgid "Generate GCode" msgstr "Generar GCode" @@ -14158,11 +14182,11 @@ msgstr "Cancelado. Se necesitan cuatro puntos para la generación de GCode." msgid "There is no FlatCAM object selected..." msgstr "No hay ningún objeto FlatCAM seleccionado ..." -#: flatcamTools/ToolCopperThieving.py:77 flatcamTools/ToolFiducials.py:261 +#: flatcamTools/ToolCopperThieving.py:76 flatcamTools/ToolFiducials.py:261 msgid "Gerber Object to which will be added a copper thieving." msgstr "Gerber Objeto al que se agregará un Copper Thieving." -#: flatcamTools/ToolCopperThieving.py:99 +#: flatcamTools/ToolCopperThieving.py:98 msgid "" "This set the distance between the copper thieving components\n" "(the polygon fill may be split in multiple polygons)\n" @@ -14172,7 +14196,7 @@ msgstr "" "(el relleno de polígono puede dividirse en múltiples polígonos)\n" "y las rastros de cobre en el archivo Gerber." -#: flatcamTools/ToolCopperThieving.py:132 +#: flatcamTools/ToolCopperThieving.py:131 msgid "" "- 'Itself' - the copper thieving extent is based on the object extent.\n" "- 'Area Selection' - left mouse click to start selection of the area to be " @@ -14187,12 +14211,12 @@ msgstr "" "- 'Objeto de referencia': 'Copper Thieving' dentro del área especificada por " "otro objeto." -#: flatcamTools/ToolCopperThieving.py:139 flatcamTools/ToolNCC.py:552 +#: flatcamTools/ToolCopperThieving.py:138 flatcamTools/ToolNCC.py:552 #: flatcamTools/ToolPaint.py:496 msgid "Ref. Type" msgstr "Tipo de Ref" -#: flatcamTools/ToolCopperThieving.py:141 +#: flatcamTools/ToolCopperThieving.py:140 msgid "" "The type of FlatCAM object to be used as copper thieving reference.\n" "It can be Gerber, Excellon or Geometry." @@ -14201,22 +14225,22 @@ msgstr "" "Thieving'.\n" "Puede ser Gerber, Excellon o Geometry." -#: flatcamTools/ToolCopperThieving.py:150 flatcamTools/ToolNCC.py:562 +#: flatcamTools/ToolCopperThieving.py:149 flatcamTools/ToolNCC.py:562 #: flatcamTools/ToolPaint.py:506 msgid "Ref. Object" msgstr "Objeto de Ref" -#: flatcamTools/ToolCopperThieving.py:152 flatcamTools/ToolNCC.py:564 +#: flatcamTools/ToolCopperThieving.py:151 flatcamTools/ToolNCC.py:564 #: flatcamTools/ToolPaint.py:508 msgid "The FlatCAM object to be used as non copper clearing reference." msgstr "" "El objeto FlatCAM que se utilizará como referencia de compensación sin cobre." -#: flatcamTools/ToolCopperThieving.py:328 +#: flatcamTools/ToolCopperThieving.py:327 msgid "Insert Copper thieving" msgstr "Insertar Copper thieving" -#: flatcamTools/ToolCopperThieving.py:330 +#: flatcamTools/ToolCopperThieving.py:329 msgid "" "Will add a polygon (may be split in multiple parts)\n" "that will surround the actual Gerber traces at a certain distance." @@ -14224,11 +14248,11 @@ msgstr "" "Agregará un polígono (puede dividirse en varias partes)\n" "eso rodeará las huellas reales de Gerber a cierta distancia." -#: flatcamTools/ToolCopperThieving.py:389 +#: flatcamTools/ToolCopperThieving.py:388 msgid "Insert Robber Bar" msgstr "Insertar Robber Bar" -#: flatcamTools/ToolCopperThieving.py:391 +#: flatcamTools/ToolCopperThieving.py:390 msgid "" "Will add a polygon with a defined thickness\n" "that will surround the actual Gerber object\n" @@ -14240,11 +14264,11 @@ msgstr "" "a cierta distancia.\n" "Se requiere cuando se hace un patrón de agujeros." -#: flatcamTools/ToolCopperThieving.py:415 +#: flatcamTools/ToolCopperThieving.py:414 msgid "Select Soldermask object" msgstr "Seleccionar objeto Soldermask" -#: flatcamTools/ToolCopperThieving.py:417 +#: flatcamTools/ToolCopperThieving.py:416 msgid "" "Gerber Object with the soldermask.\n" "It will be used as a base for\n" @@ -14254,11 +14278,11 @@ msgstr "" "Se utilizará como base para\n" "El patrón de la máscara de recubrimiento." -#: flatcamTools/ToolCopperThieving.py:446 +#: flatcamTools/ToolCopperThieving.py:445 msgid "Plated area" msgstr "Área chapada" -#: flatcamTools/ToolCopperThieving.py:448 +#: flatcamTools/ToolCopperThieving.py:447 msgid "" "The area to be plated by pattern plating.\n" "Basically is made from the openings in the plating mask.\n" @@ -14277,19 +14301,19 @@ msgstr "" "un poco más grande que las almohadillas de cobre, y esta área es\n" "calculado a partir de las aberturas de la máscara de soldadura." -#: flatcamTools/ToolCopperThieving.py:459 +#: flatcamTools/ToolCopperThieving.py:458 msgid "mm" msgstr "mm" -#: flatcamTools/ToolCopperThieving.py:461 +#: flatcamTools/ToolCopperThieving.py:460 msgid "in" msgstr "in" -#: flatcamTools/ToolCopperThieving.py:468 +#: flatcamTools/ToolCopperThieving.py:467 msgid "Generate pattern plating mask" msgstr "Generar máscara de recubrimiento de patrón" -#: flatcamTools/ToolCopperThieving.py:470 +#: flatcamTools/ToolCopperThieving.py:469 msgid "" "Will add to the soldermask gerber geometry\n" "the geometries of the copper thieving and/or\n" @@ -14299,69 +14323,69 @@ msgstr "" "Las geometrías de Copper Thieving y / o\n" "la Robber Bar si esos fueron generados." -#: flatcamTools/ToolCopperThieving.py:626 -#: flatcamTools/ToolCopperThieving.py:651 +#: flatcamTools/ToolCopperThieving.py:625 +#: flatcamTools/ToolCopperThieving.py:650 msgid "Lines Grid works only for 'itself' reference ..." msgstr "La cuadrícula de líneas funciona solo para referencia 'sí mismo' ..." -#: flatcamTools/ToolCopperThieving.py:637 +#: flatcamTools/ToolCopperThieving.py:636 msgid "Solid fill selected." msgstr "Relleno sólido seleccionado." -#: flatcamTools/ToolCopperThieving.py:642 +#: flatcamTools/ToolCopperThieving.py:641 msgid "Dots grid fill selected." msgstr "Relleno de cuadrícula de puntos seleccionado." -#: flatcamTools/ToolCopperThieving.py:647 +#: flatcamTools/ToolCopperThieving.py:646 msgid "Squares grid fill selected." msgstr "Rellenar cuadrícula de cuadrados seleccionados." -#: flatcamTools/ToolCopperThieving.py:668 -#: flatcamTools/ToolCopperThieving.py:750 -#: flatcamTools/ToolCopperThieving.py:1346 flatcamTools/ToolDblSided.py:658 +#: flatcamTools/ToolCopperThieving.py:667 +#: flatcamTools/ToolCopperThieving.py:749 +#: flatcamTools/ToolCopperThieving.py:1345 flatcamTools/ToolDblSided.py:657 #: flatcamTools/ToolExtractDrills.py:436 flatcamTools/ToolFiducials.py:466 -#: flatcamTools/ToolFiducials.py:743 flatcamTools/ToolOptimal.py:343 +#: flatcamTools/ToolFiducials.py:743 flatcamTools/ToolOptimal.py:342 #: flatcamTools/ToolPunchGerber.py:512 flatcamTools/ToolQRCode.py:426 msgid "There is no Gerber object loaded ..." msgstr "No hay ningún objeto Gerber cargado ..." -#: flatcamTools/ToolCopperThieving.py:681 -#: flatcamTools/ToolCopperThieving.py:1274 +#: flatcamTools/ToolCopperThieving.py:680 +#: flatcamTools/ToolCopperThieving.py:1273 msgid "Append geometry" msgstr "Añadir geometría" -#: flatcamTools/ToolCopperThieving.py:725 -#: flatcamTools/ToolCopperThieving.py:1307 -#: flatcamTools/ToolCopperThieving.py:1460 +#: flatcamTools/ToolCopperThieving.py:724 +#: flatcamTools/ToolCopperThieving.py:1306 +#: flatcamTools/ToolCopperThieving.py:1459 msgid "Append source file" msgstr "Agregar archivo fuente" -#: flatcamTools/ToolCopperThieving.py:733 -#: flatcamTools/ToolCopperThieving.py:1315 +#: flatcamTools/ToolCopperThieving.py:732 +#: flatcamTools/ToolCopperThieving.py:1314 msgid "Copper Thieving Tool done." msgstr "Herramienta Copper Thieving hecha." -#: flatcamTools/ToolCopperThieving.py:760 -#: flatcamTools/ToolCopperThieving.py:793 flatcamTools/ToolCutOut.py:480 -#: flatcamTools/ToolCutOut.py:667 flatcamTools/ToolInvertGerber.py:208 +#: flatcamTools/ToolCopperThieving.py:759 +#: flatcamTools/ToolCopperThieving.py:792 flatcamTools/ToolCutOut.py:479 +#: flatcamTools/ToolCutOut.py:666 flatcamTools/ToolInvertGerber.py:208 #: flatcamTools/ToolNCC.py:1594 flatcamTools/ToolNCC.py:1635 #: flatcamTools/ToolNCC.py:1664 flatcamTools/ToolPaint.py:1469 -#: flatcamTools/ToolPanelize.py:413 flatcamTools/ToolPanelize.py:428 +#: flatcamTools/ToolPanelize.py:411 flatcamTools/ToolPanelize.py:426 #: flatcamTools/ToolSub.py:294 flatcamTools/ToolSub.py:307 #: flatcamTools/ToolSub.py:498 flatcamTools/ToolSub.py:513 #: tclCommands/TclCommandCopperClear.py:97 tclCommands/TclCommandPaint.py:99 msgid "Could not retrieve object" msgstr "No se pudo recuperar el objeto" -#: flatcamTools/ToolCopperThieving.py:770 flatcamTools/ToolNCC.py:1643 +#: flatcamTools/ToolCopperThieving.py:769 flatcamTools/ToolNCC.py:1643 msgid "Click the start point of the area." msgstr "Haga clic en el punto de inicio del área." -#: flatcamTools/ToolCopperThieving.py:821 +#: flatcamTools/ToolCopperThieving.py:820 msgid "Click the end point of the filling area." msgstr "Haga clic en el punto final del área de relleno." -#: flatcamTools/ToolCopperThieving.py:827 flatcamTools/ToolNCC.py:1705 +#: flatcamTools/ToolCopperThieving.py:826 flatcamTools/ToolNCC.py:1705 #: flatcamTools/ToolNCC.py:1757 flatcamTools/ToolPaint.py:1601 #: flatcamTools/ToolPaint.py:1652 msgid "Zone added. Click to start adding next zone or right click to finish." @@ -14369,88 +14393,88 @@ msgstr "" "Zona agregada. Haga clic para comenzar a agregar la siguiente zona o haga " "clic con el botón derecho para finalizar." -#: flatcamTools/ToolCopperThieving.py:943 -#: flatcamTools/ToolCopperThieving.py:947 -#: flatcamTools/ToolCopperThieving.py:1008 +#: flatcamTools/ToolCopperThieving.py:942 +#: flatcamTools/ToolCopperThieving.py:946 +#: flatcamTools/ToolCopperThieving.py:1007 msgid "Thieving" msgstr "Ladrón" -#: flatcamTools/ToolCopperThieving.py:954 +#: flatcamTools/ToolCopperThieving.py:953 msgid "Copper Thieving Tool started. Reading parameters." msgstr "Herramienta de Copper Thieving iniciada. Parámetros de lectura." -#: flatcamTools/ToolCopperThieving.py:979 +#: flatcamTools/ToolCopperThieving.py:978 msgid "Copper Thieving Tool. Preparing isolation polygons." msgstr "Herramienta Copper Thieving. Preparación de polígonos de aislamiento." -#: flatcamTools/ToolCopperThieving.py:1024 +#: flatcamTools/ToolCopperThieving.py:1023 msgid "Copper Thieving Tool. Preparing areas to fill with copper." msgstr "" "Herramienta Copper Thieving. Preparación de áreas para rellenar con cobre." -#: flatcamTools/ToolCopperThieving.py:1035 flatcamTools/ToolOptimal.py:350 -#: flatcamTools/ToolPanelize.py:802 flatcamTools/ToolRulesCheck.py:1127 +#: flatcamTools/ToolCopperThieving.py:1034 flatcamTools/ToolOptimal.py:349 +#: flatcamTools/ToolPanelize.py:800 flatcamTools/ToolRulesCheck.py:1127 msgid "Working..." msgstr "Trabajando..." -#: flatcamTools/ToolCopperThieving.py:1062 +#: flatcamTools/ToolCopperThieving.py:1061 msgid "Geometry not supported for bounding box" msgstr "Geometría no admitida para cuadro delimitador" -#: flatcamTools/ToolCopperThieving.py:1068 flatcamTools/ToolNCC.py:1928 +#: flatcamTools/ToolCopperThieving.py:1067 flatcamTools/ToolNCC.py:1928 #: flatcamTools/ToolNCC.py:1983 flatcamTools/ToolNCC.py:2987 #: flatcamTools/ToolPaint.py:3375 msgid "No object available." msgstr "No hay objeto disponible." -#: flatcamTools/ToolCopperThieving.py:1105 flatcamTools/ToolNCC.py:1953 +#: flatcamTools/ToolCopperThieving.py:1104 flatcamTools/ToolNCC.py:1953 #: flatcamTools/ToolNCC.py:2006 flatcamTools/ToolNCC.py:3029 msgid "The reference object type is not supported." msgstr "El tipo de objeto de referencia no es compatible." -#: flatcamTools/ToolCopperThieving.py:1110 +#: flatcamTools/ToolCopperThieving.py:1109 msgid "Copper Thieving Tool. Appending new geometry and buffering." msgstr "" "Herramienta Coppe Thieving. Anexar nueva geometría y almacenamiento en búfer." -#: flatcamTools/ToolCopperThieving.py:1126 +#: flatcamTools/ToolCopperThieving.py:1125 msgid "Create geometry" msgstr "Crear geometría" -#: flatcamTools/ToolCopperThieving.py:1326 -#: flatcamTools/ToolCopperThieving.py:1330 +#: flatcamTools/ToolCopperThieving.py:1325 +#: flatcamTools/ToolCopperThieving.py:1329 msgid "P-Plating Mask" msgstr "Mascarilla P" -#: flatcamTools/ToolCopperThieving.py:1352 +#: flatcamTools/ToolCopperThieving.py:1351 msgid "Append PP-M geometry" msgstr "Añadir geometría de máscara de recubrimiento P" -#: flatcamTools/ToolCopperThieving.py:1478 +#: flatcamTools/ToolCopperThieving.py:1477 msgid "Generating Pattern Plating Mask done." msgstr "Generando patrón de recubrimiento de máscara hecho." -#: flatcamTools/ToolCopperThieving.py:1550 +#: flatcamTools/ToolCopperThieving.py:1549 msgid "Copper Thieving Tool exit." msgstr "Salida de herramienta de Copper Thieving." -#: flatcamTools/ToolCutOut.py:42 +#: flatcamTools/ToolCutOut.py:41 msgid "Cutout PCB" msgstr "PCB de corte" -#: flatcamTools/ToolCutOut.py:70 flatcamTools/ToolPanelize.py:54 +#: flatcamTools/ToolCutOut.py:69 flatcamTools/ToolPanelize.py:52 msgid "Source Object" msgstr "Objeto fuente" -#: flatcamTools/ToolCutOut.py:71 +#: flatcamTools/ToolCutOut.py:70 msgid "Object to be cutout" msgstr "Objeto a recortar" -#: flatcamTools/ToolCutOut.py:76 +#: flatcamTools/ToolCutOut.py:75 msgid "Kind" msgstr "Tipo" -#: flatcamTools/ToolCutOut.py:98 +#: flatcamTools/ToolCutOut.py:97 msgid "" "Specify the type of object to be cutout.\n" "It can be of type: Gerber or Geometry.\n" @@ -14462,19 +14486,19 @@ msgstr "" "Lo que se seleccione aquí dictará el tipo\n" "de objetos que llenarán el cuadro combinado 'Objeto'." -#: flatcamTools/ToolCutOut.py:122 +#: flatcamTools/ToolCutOut.py:121 msgid "Tool Parameters" msgstr "Parámetros de Herram." -#: flatcamTools/ToolCutOut.py:239 +#: flatcamTools/ToolCutOut.py:238 msgid "A. Automatic Bridge Gaps" msgstr "A. Brechas automáticas del puente" -#: flatcamTools/ToolCutOut.py:241 +#: flatcamTools/ToolCutOut.py:240 msgid "This section handle creation of automatic bridge gaps." msgstr "Esta sección maneja la creación de espacios de puente automáticos." -#: flatcamTools/ToolCutOut.py:252 +#: flatcamTools/ToolCutOut.py:251 msgid "" "Number of gaps used for the Automatic cutout.\n" "There can be maximum 8 bridges/gaps.\n" @@ -14498,11 +14522,11 @@ msgstr "" "- 2tb - 2 * arriba + 2 * abajo\n" "- 8 - 2 * izquierda + 2 * derecha + 2 * arriba + 2 * abajo" -#: flatcamTools/ToolCutOut.py:273 +#: flatcamTools/ToolCutOut.py:272 msgid "Generate Freeform Geometry" msgstr "Generar geometría de forma libre" -#: flatcamTools/ToolCutOut.py:275 +#: flatcamTools/ToolCutOut.py:274 msgid "" "Cutout the selected object.\n" "The cutout shape can be of any shape.\n" @@ -14512,11 +14536,11 @@ msgstr "" "La forma recortada puede ser de cualquier forma.\n" "Útil cuando la PCB tiene una forma no rectangular." -#: flatcamTools/ToolCutOut.py:287 +#: flatcamTools/ToolCutOut.py:286 msgid "Generate Rectangular Geometry" msgstr "Generar geometría rectangular" -#: flatcamTools/ToolCutOut.py:289 +#: flatcamTools/ToolCutOut.py:288 msgid "" "Cutout the selected object.\n" "The resulting cutout shape is\n" @@ -14528,11 +14552,11 @@ msgstr "" "siempre una forma rectangular y será\n" "El cuadro delimitador del objeto." -#: flatcamTools/ToolCutOut.py:308 +#: flatcamTools/ToolCutOut.py:307 msgid "B. Manual Bridge Gaps" msgstr "B. Brechas manuales del puente" -#: flatcamTools/ToolCutOut.py:310 +#: flatcamTools/ToolCutOut.py:309 msgid "" "This section handle creation of manual bridge gaps.\n" "This is done by mouse clicking on the perimeter of the\n" @@ -14542,15 +14566,15 @@ msgstr "" "Esto se hace haciendo clic con el mouse en el perímetro del\n" "Objeto de geometría que se utiliza como objeto recortado. " -#: flatcamTools/ToolCutOut.py:329 +#: flatcamTools/ToolCutOut.py:328 msgid "Geometry object used to create the manual cutout." msgstr "Objeto de geometría utilizado para crear el recorte manual." -#: flatcamTools/ToolCutOut.py:338 +#: flatcamTools/ToolCutOut.py:337 msgid "Generate Manual Geometry" msgstr "Generar geometría manual" -#: flatcamTools/ToolCutOut.py:340 +#: flatcamTools/ToolCutOut.py:339 msgid "" "If the object to be cutout is a Gerber\n" "first create a Geometry that surrounds it,\n" @@ -14563,11 +14587,11 @@ msgstr "" "Seleccione el archivo fuente de Gerber en el cuadro combinado de objeto " "superior." -#: flatcamTools/ToolCutOut.py:353 +#: flatcamTools/ToolCutOut.py:352 msgid "Manual Add Bridge Gaps" msgstr "Agregar huecos de puente manuales" -#: flatcamTools/ToolCutOut.py:355 +#: flatcamTools/ToolCutOut.py:354 msgid "" "Use the left mouse button (LMB) click\n" "to create a bridge gap to separate the PCB from\n" @@ -14581,7 +14605,7 @@ msgstr "" "El clic LMB debe hacerse en el perímetro de\n" "El objeto Geometry utilizado como geometría de recorte." -#: flatcamTools/ToolCutOut.py:485 +#: flatcamTools/ToolCutOut.py:484 msgid "" "There is no object selected for Cutout.\n" "Select one and try again." @@ -14589,17 +14613,17 @@ msgstr "" "No hay ningún objeto seleccionado para Recorte.\n" "Seleccione uno e intente nuevamente." -#: flatcamTools/ToolCutOut.py:491 flatcamTools/ToolCutOut.py:676 -#: flatcamTools/ToolCutOut.py:839 flatcamTools/ToolCutOut.py:921 -#: tclCommands/TclCommandGeoCutout.py:185 +#: flatcamTools/ToolCutOut.py:490 flatcamTools/ToolCutOut.py:675 +#: flatcamTools/ToolCutOut.py:838 flatcamTools/ToolCutOut.py:920 +#: tclCommands/TclCommandGeoCutout.py:184 msgid "Tool Diameter is zero value. Change it to a positive real number." msgstr "Diá. de herramienta es valor cero. Cámbielo a un número real positivo." -#: flatcamTools/ToolCutOut.py:505 flatcamTools/ToolCutOut.py:691 +#: flatcamTools/ToolCutOut.py:504 flatcamTools/ToolCutOut.py:690 msgid "Number of gaps value is missing. Add it and retry." msgstr "Falta el valor del número de huecos. Añádelo y vuelve a intentarlo." -#: flatcamTools/ToolCutOut.py:510 flatcamTools/ToolCutOut.py:695 +#: flatcamTools/ToolCutOut.py:509 flatcamTools/ToolCutOut.py:694 msgid "" "Gaps value can be only one of: 'None', 'lr', 'tb', '2lr', '2tb', 4 or 8. " "Fill in a correct value and retry. " @@ -14607,7 +14631,7 @@ msgstr "" "El valor de las brechas solo puede ser uno de: 'Ninguno', 'lr', 'tb', '2lr', " "'2tb', 4 u 8. Complete un valor correcto y vuelva a intentarlo. " -#: flatcamTools/ToolCutOut.py:515 flatcamTools/ToolCutOut.py:701 +#: flatcamTools/ToolCutOut.py:514 flatcamTools/ToolCutOut.py:700 msgid "" "Cutout operation cannot be done on a multi-geo Geometry.\n" "Optionally, this Multi-geo Geometry can be converted to Single-geo " @@ -14619,45 +14643,45 @@ msgstr "" "Single-Geo,\n" "y después de eso realiza el recorte." -#: flatcamTools/ToolCutOut.py:650 flatcamTools/ToolCutOut.py:828 +#: flatcamTools/ToolCutOut.py:649 flatcamTools/ToolCutOut.py:827 msgid "Any form CutOut operation finished." msgstr "Cualquier forma de operación de corte finalizada." -#: flatcamTools/ToolCutOut.py:671 flatcamTools/ToolInvertGerber.py:214 +#: flatcamTools/ToolCutOut.py:670 flatcamTools/ToolInvertGerber.py:214 #: flatcamTools/ToolNCC.py:1598 flatcamTools/ToolPaint.py:1392 -#: flatcamTools/ToolPanelize.py:418 tclCommands/TclCommandBbox.py:72 -#: tclCommands/TclCommandNregions.py:72 +#: flatcamTools/ToolPanelize.py:416 tclCommands/TclCommandBbox.py:71 +#: tclCommands/TclCommandNregions.py:71 msgid "Object not found" msgstr "Objeto no encontrado" -#: flatcamTools/ToolCutOut.py:814 +#: flatcamTools/ToolCutOut.py:813 msgid "Rectangular cutout with negative margin is not possible." msgstr "El corte rectangular con margen negativo no es posible." -#: flatcamTools/ToolCutOut.py:833 +#: flatcamTools/ToolCutOut.py:832 msgid "" "Click on the selected geometry object perimeter to create a bridge gap ..." msgstr "" "Haga clic en el perímetro del objeto de geometría seleccionado para crear un " "espacio de puente ..." -#: flatcamTools/ToolCutOut.py:850 flatcamTools/ToolCutOut.py:876 +#: flatcamTools/ToolCutOut.py:849 flatcamTools/ToolCutOut.py:875 msgid "Could not retrieve Geometry object" msgstr "No se pudo recuperar el objeto Geometry" -#: flatcamTools/ToolCutOut.py:881 +#: flatcamTools/ToolCutOut.py:880 msgid "Geometry object for manual cutout not found" msgstr "Objeto de geometría para corte manual no encontrado" -#: flatcamTools/ToolCutOut.py:891 +#: flatcamTools/ToolCutOut.py:890 msgid "Added manual Bridge Gap." msgstr "Se agregó brecha de puente manual." -#: flatcamTools/ToolCutOut.py:903 +#: flatcamTools/ToolCutOut.py:902 msgid "Could not retrieve Gerber object" msgstr "No se pudo recuperar el objeto Gerber" -#: flatcamTools/ToolCutOut.py:908 +#: flatcamTools/ToolCutOut.py:907 msgid "" "There is no Gerber object selected for Cutout.\n" "Select one and try again." @@ -14665,7 +14689,7 @@ msgstr "" "No hay ningún objeto Gerber seleccionado para Recorte.\n" "Seleccione uno e intente nuevamente." -#: flatcamTools/ToolCutOut.py:914 +#: flatcamTools/ToolCutOut.py:913 msgid "" "The selected object has to be of Gerber type.\n" "Select a Gerber file and try again." @@ -14673,32 +14697,32 @@ msgstr "" "El objeto seleccionado debe ser del tipo Gerber.\n" "Seleccione un archivo Gerber e intente nuevamente." -#: flatcamTools/ToolCutOut.py:949 +#: flatcamTools/ToolCutOut.py:948 msgid "Geometry not supported for cutout" msgstr "Geometría no admitida para recorte" -#: flatcamTools/ToolCutOut.py:1007 +#: flatcamTools/ToolCutOut.py:1006 msgid "Making manual bridge gap..." msgstr "Hacer un puente manual ..." -#: flatcamTools/ToolDblSided.py:27 +#: flatcamTools/ToolDblSided.py:26 msgid "2-Sided PCB" msgstr "PCB a 2 caras" -#: flatcamTools/ToolDblSided.py:53 +#: flatcamTools/ToolDblSided.py:52 msgid "Mirror Operation" msgstr "Operación Espejo" -#: flatcamTools/ToolDblSided.py:54 +#: flatcamTools/ToolDblSided.py:53 msgid "Objects to be mirrored" msgstr "Objetos a ser reflejados" -#: flatcamTools/ToolDblSided.py:66 +#: flatcamTools/ToolDblSided.py:65 msgid "Gerber to be mirrored" msgstr "Gerber para ser reflejado" -#: flatcamTools/ToolDblSided.py:70 flatcamTools/ToolDblSided.py:98 -#: flatcamTools/ToolDblSided.py:128 +#: flatcamTools/ToolDblSided.py:69 flatcamTools/ToolDblSided.py:97 +#: flatcamTools/ToolDblSided.py:127 msgid "" "Mirrors (flips) the specified object around \n" "the specified axis. Does not create a new \n" @@ -14708,27 +14732,27 @@ msgstr "" "El eje especificado. No crea un nuevo\n" "objeto, pero lo modifica." -#: flatcamTools/ToolDblSided.py:94 +#: flatcamTools/ToolDblSided.py:93 msgid "Excellon Object to be mirrored." msgstr "Excellon Objeto a ser reflejado." -#: flatcamTools/ToolDblSided.py:123 +#: flatcamTools/ToolDblSided.py:122 msgid "Geometry Obj to be mirrored." msgstr "Obj de geometría para ser reflejado." -#: flatcamTools/ToolDblSided.py:159 +#: flatcamTools/ToolDblSided.py:158 msgid "Mirror Parameters" msgstr "Parámetros de Espejo" -#: flatcamTools/ToolDblSided.py:160 +#: flatcamTools/ToolDblSided.py:159 msgid "Parameters for the mirror operation" msgstr "Parámetros para la operación Reflejar" -#: flatcamTools/ToolDblSided.py:165 +#: flatcamTools/ToolDblSided.py:164 msgid "Mirror Axis" msgstr "Eje espejo" -#: flatcamTools/ToolDblSided.py:176 +#: flatcamTools/ToolDblSided.py:175 msgid "" "The coordinates used as reference for the mirror operation.\n" "Can be:\n" @@ -14743,14 +14767,14 @@ msgstr "" "- Cuadro -> un conjunto de coordenadas (x, y) obtenidas del centro de la\n" "cuadro delimitador de otro objeto seleccionado a continuación" -#: flatcamTools/ToolDblSided.py:190 +#: flatcamTools/ToolDblSided.py:189 msgid "Point coordinates" msgstr "Coordenadas de puntos" -#: flatcamTools/ToolDblSided.py:195 +#: flatcamTools/ToolDblSided.py:194 msgid "" "Add the coordinates in format (x, y) through which the mirroring " -"axis \n" +"axis\n" " selected in 'MIRROR AXIS' pass.\n" "The (x, y) coordinates are captured by pressing SHIFT key\n" "and left mouse button click on canvas or you can enter the coordinates " @@ -14763,7 +14787,7 @@ msgstr "" "y haga clic con el botón izquierdo del mouse en el lienzo o puede ingresar " "las coordenadas manualmente." -#: flatcamTools/ToolDblSided.py:219 +#: flatcamTools/ToolDblSided.py:218 msgid "" "It can be of type: Gerber or Excellon or Geometry.\n" "The coordinates of the center of the bounding box are used\n" @@ -14773,11 +14797,11 @@ msgstr "" "Se utilizan las coordenadas del centro del cuadro delimitador.\n" "como referencia para la operación del espejo." -#: flatcamTools/ToolDblSided.py:253 +#: flatcamTools/ToolDblSided.py:252 msgid "Bounds Values" msgstr "Valores de límites" -#: flatcamTools/ToolDblSided.py:255 +#: flatcamTools/ToolDblSided.py:254 msgid "" "Select on canvas the object(s)\n" "for which to calculate bounds values." @@ -14785,39 +14809,39 @@ msgstr "" "Seleccione en lienzo los objetos\n" "para el cual calcular valores de límites." -#: flatcamTools/ToolDblSided.py:265 +#: flatcamTools/ToolDblSided.py:264 msgid "X min" msgstr "X min" -#: flatcamTools/ToolDblSided.py:267 flatcamTools/ToolDblSided.py:281 +#: flatcamTools/ToolDblSided.py:266 flatcamTools/ToolDblSided.py:280 msgid "Minimum location." msgstr "Ubicacion minima." -#: flatcamTools/ToolDblSided.py:279 +#: flatcamTools/ToolDblSided.py:278 msgid "Y min" msgstr "Y min" -#: flatcamTools/ToolDblSided.py:293 +#: flatcamTools/ToolDblSided.py:292 msgid "X max" msgstr "X max" -#: flatcamTools/ToolDblSided.py:295 flatcamTools/ToolDblSided.py:309 +#: flatcamTools/ToolDblSided.py:294 flatcamTools/ToolDblSided.py:308 msgid "Maximum location." msgstr "Máxima ubicación." -#: flatcamTools/ToolDblSided.py:307 +#: flatcamTools/ToolDblSided.py:306 msgid "Y max" msgstr "Y max" -#: flatcamTools/ToolDblSided.py:318 +#: flatcamTools/ToolDblSided.py:317 msgid "Center point coordinates" msgstr "Coords del punto central" -#: flatcamTools/ToolDblSided.py:320 +#: flatcamTools/ToolDblSided.py:319 msgid "Centroid" msgstr "Centroide" -#: flatcamTools/ToolDblSided.py:322 +#: flatcamTools/ToolDblSided.py:321 msgid "" "The center point location for the rectangular\n" "bounding shape. Centroid. Format is (x, y)." @@ -14825,11 +14849,11 @@ msgstr "" "La ubicación del punto central para el rectangular\n" "forma delimitadora. Centroide. El formato es (x, y)." -#: flatcamTools/ToolDblSided.py:331 +#: flatcamTools/ToolDblSided.py:330 msgid "Calculate Bounds Values" msgstr "Calcular valores de límites" -#: flatcamTools/ToolDblSided.py:333 +#: flatcamTools/ToolDblSided.py:332 msgid "" "Calculate the enveloping rectangular shape coordinates,\n" "for the selection of objects.\n" @@ -14839,11 +14863,11 @@ msgstr "" "para la selección de objetos.\n" "La forma de la envoltura es paralela al eje X, Y." -#: flatcamTools/ToolDblSided.py:353 +#: flatcamTools/ToolDblSided.py:352 msgid "PCB Alignment" msgstr "Alineación de PCB" -#: flatcamTools/ToolDblSided.py:355 flatcamTools/ToolDblSided.py:457 +#: flatcamTools/ToolDblSided.py:354 flatcamTools/ToolDblSided.py:456 msgid "" "Creates an Excellon Object containing the\n" "specified alignment holes and their mirror\n" @@ -14853,11 +14877,11 @@ msgstr "" "agujeros de alineación especificados y su espejo\n" "imágenes." -#: flatcamTools/ToolDblSided.py:362 +#: flatcamTools/ToolDblSided.py:361 msgid "Drill Diameter" msgstr "Diá del Taladro" -#: flatcamTools/ToolDblSided.py:391 flatcamTools/ToolDblSided.py:398 +#: flatcamTools/ToolDblSided.py:390 flatcamTools/ToolDblSided.py:397 msgid "" "The reference point used to create the second alignment drill\n" "from the first alignment drill, by doing mirror.\n" @@ -14868,11 +14892,11 @@ msgstr "" "desde el primer ejercicio de alineación, haciendo espejo.\n" "Se puede modificar en la sección Parámetros Espejo -> Referencia" -#: flatcamTools/ToolDblSided.py:411 +#: flatcamTools/ToolDblSided.py:410 msgid "Alignment Drill Coordinates" msgstr "Taladro de alineación Coords" -#: flatcamTools/ToolDblSided.py:413 +#: flatcamTools/ToolDblSided.py:412 msgid "" "Alignment holes (x1, y1), (x2, y2), ... on one side of the mirror axis. For " "each set of (x, y) coordinates\n" @@ -14890,11 +14914,11 @@ msgstr "" "- un taladro en posición de espejo sobre el eje seleccionado arriba en " "'Alinear eje'." -#: flatcamTools/ToolDblSided.py:421 +#: flatcamTools/ToolDblSided.py:420 msgid "Drill coordinates" msgstr "Coords de Perforación" -#: flatcamTools/ToolDblSided.py:428 +#: flatcamTools/ToolDblSided.py:427 msgid "" "Add alignment drill holes coordinates in the format: (x1, y1), (x2, " "y2), ... \n" @@ -14922,23 +14946,23 @@ msgstr "" "- ingresando las coordenadas manualmente en el formato: (x1, y1), (x2, " "y2), ..." -#: flatcamTools/ToolDblSided.py:443 +#: flatcamTools/ToolDblSided.py:442 msgid "Delete Last" msgstr "Eliminar último" -#: flatcamTools/ToolDblSided.py:445 +#: flatcamTools/ToolDblSided.py:444 msgid "Delete the last coordinates tuple in the list." msgstr "Eliminar la última tupla de coordenadas en la lista." -#: flatcamTools/ToolDblSided.py:455 +#: flatcamTools/ToolDblSided.py:454 msgid "Create Excellon Object" msgstr "Crear objeto Excellon" -#: flatcamTools/ToolDblSided.py:542 +#: flatcamTools/ToolDblSided.py:541 msgid "2-Sided Tool" msgstr "Herra. de 2 lados" -#: flatcamTools/ToolDblSided.py:582 +#: flatcamTools/ToolDblSided.py:581 msgid "" "'Point' reference is selected and 'Point' coordinates are missing. Add them " "and retry." @@ -14946,34 +14970,34 @@ msgstr "" "Se selecciona la referencia 'Punto' y faltan las coordenadas 'Punto'. " "Añádelos y vuelve a intentarlo." -#: flatcamTools/ToolDblSided.py:601 +#: flatcamTools/ToolDblSided.py:600 msgid "There is no Box reference object loaded. Load one and retry." msgstr "" "No hay ningún objeto de referencia de cuadro cargado. Cargue uno y vuelva a " "intentarlo." -#: flatcamTools/ToolDblSided.py:613 +#: flatcamTools/ToolDblSided.py:612 msgid "No value or wrong format in Drill Dia entry. Add it and retry." msgstr "" "Sin valor o formato incorrecto en la entrada de diá. de perforación. Añádelo " "y vuelve a intentarlo." -#: flatcamTools/ToolDblSided.py:624 +#: flatcamTools/ToolDblSided.py:623 msgid "There are no Alignment Drill Coordinates to use. Add them and retry." msgstr "" "No hay coordenadas de taladro de alineación para usar. Añádelos y vuelve a " "intentarlo." -#: flatcamTools/ToolDblSided.py:649 +#: flatcamTools/ToolDblSided.py:648 msgid "Excellon object with alignment drills created..." msgstr "Objeto Excellon con taladros de alineación creados ..." -#: flatcamTools/ToolDblSided.py:662 flatcamTools/ToolDblSided.py:705 -#: flatcamTools/ToolDblSided.py:749 +#: flatcamTools/ToolDblSided.py:661 flatcamTools/ToolDblSided.py:704 +#: flatcamTools/ToolDblSided.py:748 msgid "Only Gerber, Excellon and Geometry objects can be mirrored." msgstr "Solo los objetos Gerber, Excellon y Geometry se pueden reflejar." -#: flatcamTools/ToolDblSided.py:672 flatcamTools/ToolDblSided.py:716 +#: flatcamTools/ToolDblSided.py:671 flatcamTools/ToolDblSided.py:715 msgid "" "There are no Point coordinates in the Point field. Add coords and try " "again ..." @@ -14981,21 +15005,21 @@ msgstr "" "No hay coordenadas de punto en el campo Punto. Agregue coords e intente " "nuevamente ..." -#: flatcamTools/ToolDblSided.py:682 flatcamTools/ToolDblSided.py:726 -#: flatcamTools/ToolDblSided.py:763 +#: flatcamTools/ToolDblSided.py:681 flatcamTools/ToolDblSided.py:725 +#: flatcamTools/ToolDblSided.py:762 msgid "There is no Box object loaded ..." msgstr "No hay ningún objeto caja cargado ..." -#: flatcamTools/ToolDblSided.py:692 flatcamTools/ToolDblSided.py:736 -#: flatcamTools/ToolDblSided.py:773 +#: flatcamTools/ToolDblSided.py:691 flatcamTools/ToolDblSided.py:735 +#: flatcamTools/ToolDblSided.py:772 msgid "was mirrored" msgstr "fue reflejado" -#: flatcamTools/ToolDblSided.py:701 flatcamTools/ToolPunchGerber.py:533 +#: flatcamTools/ToolDblSided.py:700 flatcamTools/ToolPunchGerber.py:533 msgid "There is no Excellon object loaded ..." msgstr "No hay ningún objeto Excellon cargado ..." -#: flatcamTools/ToolDblSided.py:745 +#: flatcamTools/ToolDblSided.py:744 msgid "There is no Geometry object loaded ..." msgstr "No hay ningún objeto de geometría cargado ..." @@ -15466,7 +15490,7 @@ msgid "Export negative film" msgstr "Exportar película negativa" #: flatcamTools/ToolFilm.py:956 flatcamTools/ToolFilm.py:1139 -#: flatcamTools/ToolPanelize.py:433 +#: flatcamTools/ToolPanelize.py:431 msgid "No object Box. Using instead" msgstr "Sin objeto Caja. Usando en su lugar" @@ -15622,27 +15646,27 @@ msgstr "" msgid "Invert Tool" msgstr "Herram. de Inversión" -#: flatcamTools/ToolMove.py:103 +#: flatcamTools/ToolMove.py:102 msgid "MOVE: Click on the Start point ..." msgstr "MOVER: haga clic en el punto de inicio ..." -#: flatcamTools/ToolMove.py:114 +#: flatcamTools/ToolMove.py:113 msgid "Cancelled. No object(s) to move." msgstr "Cancelado. Ningún objeto (s) para mover." -#: flatcamTools/ToolMove.py:141 +#: flatcamTools/ToolMove.py:140 msgid "MOVE: Click on the Destination point ..." msgstr "MOVER: haga clic en el punto de destino ..." -#: flatcamTools/ToolMove.py:164 +#: flatcamTools/ToolMove.py:163 msgid "Moving..." msgstr "Movedizo..." -#: flatcamTools/ToolMove.py:167 +#: flatcamTools/ToolMove.py:166 msgid "No object(s) selected." msgstr "No hay objetos seleccionados." -#: flatcamTools/ToolMove.py:222 +#: flatcamTools/ToolMove.py:221 msgid "Error when mouse left click." msgstr "Error al hacer clic con el botón izquierdo del mouse." @@ -15746,7 +15770,7 @@ msgstr "" "con el diámetro especificado anteriormente." #: flatcamTools/ToolNCC.py:318 flatcamTools/ToolPaint.py:301 -#: flatcamTools/ToolSolderPaste.py:131 +#: flatcamTools/ToolSolderPaste.py:130 msgid "" "Delete a selection of tools in the Tool Table\n" "by first selecting a row(s) in the Tool Table." @@ -15788,7 +15812,7 @@ msgid "Tool from Tool Table was edited." msgstr "Se editó la herramienta de la tabla de herramientas." #: flatcamTools/ToolNCC.py:1514 flatcamTools/ToolPaint.py:1264 -#: flatcamTools/ToolSolderPaste.py:977 +#: flatcamTools/ToolSolderPaste.py:978 msgid "Cancelled. New diameter value is already in the Tool Table." msgstr "" "Cancelado. El nuevo valor del diámetro ya está en la Tabla de herramientas." @@ -15934,43 +15958,43 @@ msgstr "" "Preferencias -> Gerber General. Vuelva a cargar el archivo Gerber después de " "este cambio." -#: flatcamTools/ToolOptimal.py:80 +#: flatcamTools/ToolOptimal.py:79 msgid "Number of decimals kept for found distances." msgstr "Número de decimales guardados para distancias encontradas." -#: flatcamTools/ToolOptimal.py:88 +#: flatcamTools/ToolOptimal.py:87 msgid "Minimum distance" msgstr "Distancia minima" -#: flatcamTools/ToolOptimal.py:89 +#: flatcamTools/ToolOptimal.py:88 msgid "Display minimum distance between copper features." msgstr "Mostrar la distancia mínima entre las características de cobre." -#: flatcamTools/ToolOptimal.py:93 +#: flatcamTools/ToolOptimal.py:92 msgid "Determined" msgstr "Determinado" -#: flatcamTools/ToolOptimal.py:107 +#: flatcamTools/ToolOptimal.py:106 msgid "Occurring" msgstr "Ocurriendo" -#: flatcamTools/ToolOptimal.py:108 +#: flatcamTools/ToolOptimal.py:107 msgid "How many times this minimum is found." msgstr "Cuántas veces se encuentra este mínimo." -#: flatcamTools/ToolOptimal.py:114 +#: flatcamTools/ToolOptimal.py:113 msgid "Minimum points coordinates" msgstr "Coordenadas de puntos mínimos" -#: flatcamTools/ToolOptimal.py:115 flatcamTools/ToolOptimal.py:121 +#: flatcamTools/ToolOptimal.py:114 flatcamTools/ToolOptimal.py:120 msgid "Coordinates for points where minimum distance was found." msgstr "Coordenadas para los puntos donde se encontró la distancia mínima." -#: flatcamTools/ToolOptimal.py:134 flatcamTools/ToolOptimal.py:210 +#: flatcamTools/ToolOptimal.py:133 flatcamTools/ToolOptimal.py:209 msgid "Jump to selected position" msgstr "Saltar a la posición seleccionada" -#: flatcamTools/ToolOptimal.py:136 flatcamTools/ToolOptimal.py:212 +#: flatcamTools/ToolOptimal.py:135 flatcamTools/ToolOptimal.py:211 msgid "" "Select a position in the Locations text box and then\n" "click this button." @@ -15978,11 +16002,11 @@ msgstr "" "Seleccione una posición en el cuadro de texto Ubicaciones y luego\n" "haga clic en este botón." -#: flatcamTools/ToolOptimal.py:144 +#: flatcamTools/ToolOptimal.py:143 msgid "Other distances" msgstr "Otras distancias" -#: flatcamTools/ToolOptimal.py:145 +#: flatcamTools/ToolOptimal.py:144 msgid "" "Will display other distances in the Gerber file ordered from\n" "the minimum to the maximum, not including the absolute minimum." @@ -15990,13 +16014,13 @@ msgstr "" "Mostrará otras distancias en el archivo Gerber ordenado a\n" "el mínimo al máximo, sin incluir el mínimo absoluto." -#: flatcamTools/ToolOptimal.py:150 +#: flatcamTools/ToolOptimal.py:149 msgid "Other distances points coordinates" msgstr "Otras distancias puntos coordenadas" -#: flatcamTools/ToolOptimal.py:151 flatcamTools/ToolOptimal.py:165 -#: flatcamTools/ToolOptimal.py:172 flatcamTools/ToolOptimal.py:189 -#: flatcamTools/ToolOptimal.py:196 +#: flatcamTools/ToolOptimal.py:150 flatcamTools/ToolOptimal.py:164 +#: flatcamTools/ToolOptimal.py:171 flatcamTools/ToolOptimal.py:188 +#: flatcamTools/ToolOptimal.py:195 msgid "" "Other distances and the coordinates for points\n" "where the distance was found." @@ -16004,19 +16028,19 @@ msgstr "" "Otras distancias y las coordenadas de los puntos.\n" "donde se encontró la distancia." -#: flatcamTools/ToolOptimal.py:164 +#: flatcamTools/ToolOptimal.py:163 msgid "Gerber distances" msgstr "Distancias de Gerber" -#: flatcamTools/ToolOptimal.py:188 +#: flatcamTools/ToolOptimal.py:187 msgid "Points coordinates" msgstr "Coordenadas de puntos" -#: flatcamTools/ToolOptimal.py:220 +#: flatcamTools/ToolOptimal.py:219 msgid "Find Minimum" msgstr "Encuentra mínimo" -#: flatcamTools/ToolOptimal.py:222 +#: flatcamTools/ToolOptimal.py:221 msgid "" "Calculate the minimum distance between copper features,\n" "this will allow the determination of the right tool to\n" @@ -16026,11 +16050,11 @@ msgstr "" "esto permitirá determinar la herramienta adecuada para\n" "utilizar para aislamiento o limpieza de cobre." -#: flatcamTools/ToolOptimal.py:347 +#: flatcamTools/ToolOptimal.py:346 msgid "Only Gerber objects can be evaluated." msgstr "Solo se pueden evaluar los objetos de Gerber." -#: flatcamTools/ToolOptimal.py:353 +#: flatcamTools/ToolOptimal.py:352 msgid "" "Optimal Tool. Started to search for the minimum distance between copper " "features." @@ -16038,15 +16062,15 @@ msgstr "" "Herramienta óptima. Comenzó a buscar la distancia mínima entre las " "características de cobre." -#: flatcamTools/ToolOptimal.py:363 +#: flatcamTools/ToolOptimal.py:362 msgid "Optimal Tool. Parsing geometry for aperture" msgstr "Herramienta óptima. Análisis de geometría para apertura" -#: flatcamTools/ToolOptimal.py:374 +#: flatcamTools/ToolOptimal.py:373 msgid "Optimal Tool. Creating a buffer for the object geometry." msgstr "Herramienta óptima. Crear un búfer para la geometría del objeto." -#: flatcamTools/ToolOptimal.py:384 +#: flatcamTools/ToolOptimal.py:383 msgid "" "The Gerber object has one Polygon as geometry.\n" "There are no distances between geometry elements to be found." @@ -16054,18 +16078,18 @@ msgstr "" "El objeto Gerber tiene un Polígono como geometría.\n" "No hay distancias entre los elementos de geometría que se encuentran." -#: flatcamTools/ToolOptimal.py:389 +#: flatcamTools/ToolOptimal.py:388 msgid "" "Optimal Tool. Finding the distances between each two elements. Iterations" msgstr "" "Herramienta óptima. Encontrar las distancias entre cada dos elementos. " "Iteraciones" -#: flatcamTools/ToolOptimal.py:424 +#: flatcamTools/ToolOptimal.py:423 msgid "Optimal Tool. Finding the minimum distance." msgstr "Herramienta óptima. Encontrar la distancia mínima." -#: flatcamTools/ToolOptimal.py:440 +#: flatcamTools/ToolOptimal.py:439 msgid "Optimal Tool. Finished successfully." msgstr "Herramienta óptima. Terminado con éxito." @@ -16355,11 +16379,11 @@ msgstr "Pintar el área falló." msgid "Paint Poly Area Done." msgstr "Pintar el área de polígonos está hecho." -#: flatcamTools/ToolPanelize.py:34 +#: flatcamTools/ToolPanelize.py:32 msgid "Panelize PCB" msgstr "Panelizar PCB" -#: flatcamTools/ToolPanelize.py:56 +#: flatcamTools/ToolPanelize.py:54 msgid "" "Specify the type of object to be panelized\n" "It can be of type: Gerber, Excellon or Geometry.\n" @@ -16371,7 +16395,7 @@ msgstr "" "La selección aquí decide el tipo de objetos que serán\n" "en el cuadro combinado Objeto." -#: flatcamTools/ToolPanelize.py:89 +#: flatcamTools/ToolPanelize.py:87 msgid "" "Object to be panelized. This means that it will\n" "be duplicated in an array of rows and columns." @@ -16379,11 +16403,11 @@ msgstr "" "Objeto a ser panelizado. Esto significa que lo hará\n" "ser duplicado en una matriz de filas y columnas." -#: flatcamTools/ToolPanelize.py:102 +#: flatcamTools/ToolPanelize.py:100 msgid "Penelization Reference" msgstr "Ref. de penelización" -#: flatcamTools/ToolPanelize.py:104 +#: flatcamTools/ToolPanelize.py:102 msgid "" "Choose the reference for panelization:\n" "- Object = the bounding box of a different object\n" @@ -16403,11 +16427,11 @@ msgstr "" "a este objeto de referencia, por lo tanto, manteniendo el panelizado\n" "objetos sincronizados." -#: flatcamTools/ToolPanelize.py:125 +#: flatcamTools/ToolPanelize.py:123 msgid "Box Type" msgstr "Tipo de caja" -#: flatcamTools/ToolPanelize.py:127 +#: flatcamTools/ToolPanelize.py:125 msgid "" "Specify the type of object to be used as an container for\n" "panelization. It can be: Gerber or Geometry type.\n" @@ -16419,7 +16443,7 @@ msgstr "" "La selección aquí decide el tipo de objetos que serán\n" "en el cuadro combinado Objeto de caja." -#: flatcamTools/ToolPanelize.py:141 +#: flatcamTools/ToolPanelize.py:139 msgid "" "The actual object that is used a container for the\n" " selected object that is to be panelized." @@ -16427,11 +16451,11 @@ msgstr "" "El objeto real que se utiliza como contenedor para\n" " objeto seleccionado que se va a panelizar." -#: flatcamTools/ToolPanelize.py:147 +#: flatcamTools/ToolPanelize.py:145 msgid "Panel Data" msgstr "Datos del panel" -#: flatcamTools/ToolPanelize.py:149 +#: flatcamTools/ToolPanelize.py:147 msgid "" "This informations will shape the resulting panel.\n" "The number of rows and columns will set how many\n" @@ -16447,7 +16471,7 @@ msgstr "" "Los espacios establecerán la distancia entre dos\n" "elementos de la matriz de paneles." -#: flatcamTools/ToolPanelize.py:208 +#: flatcamTools/ToolPanelize.py:206 msgid "" "Choose the type of object for the panel object:\n" "- Geometry\n" @@ -16457,15 +16481,15 @@ msgstr "" "- Geometría\n" "- Gerber" -#: flatcamTools/ToolPanelize.py:216 +#: flatcamTools/ToolPanelize.py:214 msgid "Constrain panel within" msgstr "Restrinja el panel dentro de" -#: flatcamTools/ToolPanelize.py:252 +#: flatcamTools/ToolPanelize.py:250 msgid "Panelize Object" msgstr "Panelizar objeto" -#: flatcamTools/ToolPanelize.py:254 flatcamTools/ToolRulesCheck.py:501 +#: flatcamTools/ToolPanelize.py:252 flatcamTools/ToolRulesCheck.py:501 msgid "" "Panelize the specified object around the specified box.\n" "In other words it creates multiple copies of the source object,\n" @@ -16475,32 +16499,32 @@ msgstr "" "En otras palabras, crea múltiples copias del objeto fuente,\n" "dispuestos en una matriz 2D de filas y columnas." -#: flatcamTools/ToolPanelize.py:322 +#: flatcamTools/ToolPanelize.py:320 msgid "Panel. Tool" msgstr "Herra. de Panel" -#: flatcamTools/ToolPanelize.py:460 +#: flatcamTools/ToolPanelize.py:458 msgid "Columns or Rows are zero value. Change them to a positive integer." msgstr "" "Las columnas o filas son de valor cero. Cámbialos a un entero positivo." -#: flatcamTools/ToolPanelize.py:497 +#: flatcamTools/ToolPanelize.py:495 msgid "Generating panel ... " msgstr "Panel generador … " -#: flatcamTools/ToolPanelize.py:777 +#: flatcamTools/ToolPanelize.py:775 msgid "Generating panel ... Adding the Gerber code." msgstr "Generando panel ... Agregando el código Gerber." -#: flatcamTools/ToolPanelize.py:788 +#: flatcamTools/ToolPanelize.py:786 msgid "Generating panel... Spawning copies" msgstr "Generando panel ... Generando copias" -#: flatcamTools/ToolPanelize.py:795 +#: flatcamTools/ToolPanelize.py:793 msgid "Panel done..." msgstr "Panel hecho ..." -#: flatcamTools/ToolPanelize.py:798 +#: flatcamTools/ToolPanelize.py:796 #, python-brace-format msgid "" "{text} Too big for the constrain area. Final panel has {col} columns and " @@ -16509,7 +16533,7 @@ msgstr "" "{text} Demasiado grande para el área de restricción. El panel final tiene " "{col} columnas y {row} filas" -#: flatcamTools/ToolPanelize.py:807 +#: flatcamTools/ToolPanelize.py:805 msgid "Panel created successfully." msgstr "Panel creado con éxito." @@ -16823,17 +16847,9 @@ msgstr "Herram. de Perforación" msgid "The value of the fixed diameter is 0.0. Aborting." msgstr "El valor del diámetro fijo es 0.0. Abortar." -#: flatcamTools/ToolPunchGerber.py:607 +#: flatcamTools/ToolPunchGerber.py:607 flatcamTools/ToolPunchGerber.py:619 msgid "" -" Could not generate punched hole Gerber because the punch hole sizeis bigger " -"than some of the apertures in the Gerber object." -msgstr "" -" No se pudo generar el agujero perforado Gerber porque el tamaño del agujero " -"perforado es más grande que algunas de las aberturas en el objeto Gerber." - -#: flatcamTools/ToolPunchGerber.py:619 -msgid "" -"Could not generate punched hole Gerber because the punch hole sizeis bigger " +"Could not generate punched hole Gerber because the punch hole size is bigger " "than some of the apertures in the Gerber object." msgstr "" "No se pudo generar el agujero perforado Gerber porque el tamaño del agujero " @@ -17151,19 +17167,19 @@ msgstr "PASADO" msgid "Violations: There are no violations for the current rule." msgstr "Infracciones: no hay infracciones para la regla actual." -#: flatcamTools/ToolShell.py:72 flatcamTools/ToolShell.py:74 +#: flatcamTools/ToolShell.py:74 flatcamTools/ToolShell.py:76 msgid "...processing..." msgstr "…procesando..." -#: flatcamTools/ToolSolderPaste.py:38 +#: flatcamTools/ToolSolderPaste.py:37 msgid "Solder Paste Tool" msgstr "Herra. de Pasta de Soldadura" -#: flatcamTools/ToolSolderPaste.py:70 +#: flatcamTools/ToolSolderPaste.py:69 msgid "Gerber Solder paste object. " msgstr "Gerber Soldadura pegar objeto. " -#: flatcamTools/ToolSolderPaste.py:77 +#: flatcamTools/ToolSolderPaste.py:76 msgid "" "Tools pool from which the algorithm\n" "will pick the ones used for dispensing solder paste." @@ -17171,7 +17187,7 @@ msgstr "" "Conjunto de herramientas desde el cual el algoritmo\n" "elegirá los que se usan para dispensar pasta de soldadura." -#: flatcamTools/ToolSolderPaste.py:92 +#: flatcamTools/ToolSolderPaste.py:91 msgid "" "This is the Tool Number.\n" "The solder dispensing will start with the tool with the biggest \n" @@ -17186,7 +17202,7 @@ msgstr "" "  con soldadura en pasta, la aplicación emitirá un cuadro de mensaje de " "advertencia." -#: flatcamTools/ToolSolderPaste.py:99 +#: flatcamTools/ToolSolderPaste.py:98 msgid "" "Nozzle tool Diameter. It's value (in current FlatCAM units)\n" "is the width of the solder paste dispensed." @@ -17195,11 +17211,11 @@ msgstr "" "FlatCAM)\n" "es el ancho de la pasta de soldadura dispensada." -#: flatcamTools/ToolSolderPaste.py:106 +#: flatcamTools/ToolSolderPaste.py:105 msgid "New Nozzle Tool" msgstr "Nueva herra. de boquilla" -#: flatcamTools/ToolSolderPaste.py:125 +#: flatcamTools/ToolSolderPaste.py:124 msgid "" "Add a new nozzle tool to the Tool Table\n" "with the diameter specified above." @@ -17207,15 +17223,15 @@ msgstr "" "Agregue una nueva herramienta de boquilla a la tabla de herramientas\n" "con el diámetro especificado anteriormente." -#: flatcamTools/ToolSolderPaste.py:137 +#: flatcamTools/ToolSolderPaste.py:136 msgid "Generate solder paste dispensing geometry." msgstr "Generar geometría de dispensación de pasta de soldadura." -#: flatcamTools/ToolSolderPaste.py:156 +#: flatcamTools/ToolSolderPaste.py:155 msgid "STEP 1" msgstr "PASO 1" -#: flatcamTools/ToolSolderPaste.py:158 +#: flatcamTools/ToolSolderPaste.py:157 msgid "" "First step is to select a number of nozzle tools for usage\n" "and then optionally modify the GCode parameters bellow." @@ -17224,7 +17240,7 @@ msgstr "" "uso\n" "y luego opcionalmente modificar los parámetros GCode a continuación." -#: flatcamTools/ToolSolderPaste.py:161 +#: flatcamTools/ToolSolderPaste.py:160 msgid "" "Select tools.\n" "Modify parameters." @@ -17232,7 +17248,7 @@ msgstr "" "Seleccionar herramientas.\n" "Modificar parámetros." -#: flatcamTools/ToolSolderPaste.py:281 +#: flatcamTools/ToolSolderPaste.py:280 msgid "" "Feedrate (speed) while moving up vertically\n" " to Dispense position (on Z plane)." @@ -17240,7 +17256,7 @@ msgstr "" "Avance (velocidad) mientras se mueve verticalmente\n" "  para dispensar la posición (en el plano Z)." -#: flatcamTools/ToolSolderPaste.py:351 +#: flatcamTools/ToolSolderPaste.py:350 msgid "" "Generate GCode for Solder Paste dispensing\n" "on PCB pads." @@ -17248,11 +17264,11 @@ msgstr "" "Generar GCodelo para dispensar pasta de soldadura\n" "en almohadillas de PCB." -#: flatcamTools/ToolSolderPaste.py:372 +#: flatcamTools/ToolSolderPaste.py:371 msgid "STEP 2" msgstr "PASO 2" -#: flatcamTools/ToolSolderPaste.py:374 +#: flatcamTools/ToolSolderPaste.py:373 msgid "" "Second step is to create a solder paste dispensing\n" "geometry out of an Solder Paste Mask Gerber file." @@ -17260,11 +17276,11 @@ msgstr "" "El segundo paso es crear una dispensación de pasta de soldadura\n" "geometría de un archivo Gerber de máscara de pasta de soldadura." -#: flatcamTools/ToolSolderPaste.py:391 +#: flatcamTools/ToolSolderPaste.py:390 msgid "Geo Result" msgstr "Resultado Geo" -#: flatcamTools/ToolSolderPaste.py:393 +#: flatcamTools/ToolSolderPaste.py:392 msgid "" "Geometry Solder Paste object.\n" "The name of the object has to end in:\n" @@ -17274,11 +17290,11 @@ msgstr "" "El nombre del objeto tiene que terminar en:\n" "'_solderpaste' como protección." -#: flatcamTools/ToolSolderPaste.py:402 +#: flatcamTools/ToolSolderPaste.py:401 msgid "STEP 3" msgstr "PASO 3" -#: flatcamTools/ToolSolderPaste.py:404 +#: flatcamTools/ToolSolderPaste.py:403 msgid "" "Third step is to select a solder paste dispensing geometry,\n" "and then generate a CNCJob object.\n" @@ -17295,11 +17311,11 @@ msgstr "" "primero necesitas generar una geometría con esos nuevos parámetros,\n" "y solo después de eso puede generar un CNCJob actualizado." -#: flatcamTools/ToolSolderPaste.py:425 +#: flatcamTools/ToolSolderPaste.py:424 msgid "CNC Result" msgstr "Resultado del CNC" -#: flatcamTools/ToolSolderPaste.py:427 +#: flatcamTools/ToolSolderPaste.py:426 msgid "" "CNCJob Solder paste object.\n" "In order to enable the GCode save section,\n" @@ -17311,11 +17327,11 @@ msgstr "" "el nombre del objeto debe terminar en:\n" "'_solderpaste' como protección." -#: flatcamTools/ToolSolderPaste.py:437 +#: flatcamTools/ToolSolderPaste.py:436 msgid "View GCode" msgstr "Ver GCode" -#: flatcamTools/ToolSolderPaste.py:439 +#: flatcamTools/ToolSolderPaste.py:438 msgid "" "View the generated GCode for Solder Paste dispensing\n" "on PCB pads." @@ -17323,11 +17339,11 @@ msgstr "" "Ver el GCode generado para la dispensación de pasta de soldadura\n" "en almohadillas de PCB." -#: flatcamTools/ToolSolderPaste.py:449 +#: flatcamTools/ToolSolderPaste.py:448 msgid "Save GCode" msgstr "Guardar GCode" -#: flatcamTools/ToolSolderPaste.py:451 +#: flatcamTools/ToolSolderPaste.py:450 msgid "" "Save the generated GCode for Solder Paste dispensing\n" "on PCB pads, to a file." @@ -17335,11 +17351,11 @@ msgstr "" "Guarde el GCode generado para la dispensación de pasta de soldadura\n" "en almohadillas de PCB, a un archivo." -#: flatcamTools/ToolSolderPaste.py:461 +#: flatcamTools/ToolSolderPaste.py:460 msgid "STEP 4" msgstr "PASO 4" -#: flatcamTools/ToolSolderPaste.py:463 +#: flatcamTools/ToolSolderPaste.py:462 msgid "" "Fourth step (and last) is to select a CNCJob made from \n" "a solder paste dispensing geometry, and then view/save it's GCode." @@ -17356,79 +17372,85 @@ msgstr "Nueva herramienta de boquillas agregada a la tabla de herramientas." msgid "Nozzle tool from Tool Table was edited." msgstr "Nueva herramienta de boquillas agregada a la tabla de herramientas." -#: flatcamTools/ToolSolderPaste.py:1023 +#: flatcamTools/ToolSolderPaste.py:1024 msgid "Delete failed. Select a Nozzle tool to delete." msgstr "" "Eliminar falló. Seleccione una herramienta de inyectores para eliminar." -#: flatcamTools/ToolSolderPaste.py:1029 +#: flatcamTools/ToolSolderPaste.py:1030 msgid "Nozzle tool(s) deleted from Tool Table." msgstr "Herramienta de boquilla (s) eliminada de la tabla de herramientas." -#: flatcamTools/ToolSolderPaste.py:1085 +#: flatcamTools/ToolSolderPaste.py:1086 msgid "No SolderPaste mask Gerber object loaded." msgstr "No se ha cargado el objeto Gerber de máscara de pasta de soldadura." -#: flatcamTools/ToolSolderPaste.py:1103 +#: flatcamTools/ToolSolderPaste.py:1104 msgid "Creating Solder Paste dispensing geometry." msgstr "Creación de geometría de dispensación de pasta de soldadura." -#: flatcamTools/ToolSolderPaste.py:1116 +#: flatcamTools/ToolSolderPaste.py:1117 msgid "No Nozzle tools in the tool table." msgstr "No hay herramientas de boquilla en la mesa de herramientas." -#: flatcamTools/ToolSolderPaste.py:1242 +#: flatcamTools/ToolSolderPaste.py:1243 msgid "Cancelled. Empty file, it has no geometry..." msgstr "Cancelado. Archivo vacío, no tiene geometría ..." -#: flatcamTools/ToolSolderPaste.py:1245 +#: flatcamTools/ToolSolderPaste.py:1246 msgid "Solder Paste geometry generated successfully" msgstr "Geometría de pasta de soldadura generada con éxito" -#: flatcamTools/ToolSolderPaste.py:1252 +#: flatcamTools/ToolSolderPaste.py:1253 msgid "Some or all pads have no solder due of inadequate nozzle diameters..." msgstr "" "Algunas o todas las almohadillas no tienen soldadura debido a los diámetros " "de boquilla inadecuados ..." -#: flatcamTools/ToolSolderPaste.py:1266 +#: flatcamTools/ToolSolderPaste.py:1267 msgid "Generating Solder Paste dispensing geometry..." msgstr "Generando geometría de dispensación de pasta de soldadura ..." -#: flatcamTools/ToolSolderPaste.py:1286 +#: flatcamTools/ToolSolderPaste.py:1287 msgid "There is no Geometry object available." msgstr "No hay ningún objeto de Geometría disponible." -#: flatcamTools/ToolSolderPaste.py:1291 +#: flatcamTools/ToolSolderPaste.py:1292 msgid "This Geometry can't be processed. NOT a solder_paste_tool geometry." msgstr "" "Esta Geometría no se puede procesar. NO es una geometría solder_paste_tool." -#: flatcamTools/ToolSolderPaste.py:1392 +#: flatcamTools/ToolSolderPaste.py:1328 +msgid "An internal error has ocurred. See shell.\n" +msgstr "" +"Ha ocurrido un error interno. Ver caparazón.\n" +"\n" + +#: flatcamTools/ToolSolderPaste.py:1393 msgid "ToolSolderPaste CNCjob created" msgstr "Herramienta soldar pegar CNCjob creado" -#: flatcamTools/ToolSolderPaste.py:1411 +#: flatcamTools/ToolSolderPaste.py:1412 msgid "SP GCode Editor" msgstr "SP GCode editor" -#: flatcamTools/ToolSolderPaste.py:1423 flatcamTools/ToolSolderPaste.py:1428 -#: flatcamTools/ToolSolderPaste.py:1483 +#: flatcamTools/ToolSolderPaste.py:1424 flatcamTools/ToolSolderPaste.py:1429 +#: flatcamTools/ToolSolderPaste.py:1484 msgid "" "This CNCJob object can't be processed. NOT a solder_paste_tool CNCJob object." msgstr "" "Este objeto CNCJob no se puede procesar. NO es un objeto CNCJob de " "herramienta de pasta de soldadura." -#: flatcamTools/ToolSolderPaste.py:1453 +#: flatcamTools/ToolSolderPaste.py:1454 msgid "No Gcode in the object" msgstr "No Gcode en el objeto" -#: flatcamTools/ToolSolderPaste.py:1493 +#: flatcamTools/ToolSolderPaste.py:1494 msgid "Export GCode ..." msgstr "Exportar GCode ..." -#: flatcamTools/ToolSolderPaste.py:1541 +#: flatcamTools/ToolSolderPaste.py:1542 msgid "Solder paste dispenser GCode file saved to" msgstr "Dispensador de pasta de soldadura Archivo GCode guardado en: %s" @@ -17564,11 +17586,11 @@ msgstr "Analizando solid_geometry ..." msgid "Parsing solid_geometry for tool" msgstr "Análisis de geometría para herramienta" -#: flatcamTools/ToolTransform.py:24 +#: flatcamTools/ToolTransform.py:23 msgid "Object Transform" msgstr "Transform. de objetos" -#: flatcamTools/ToolTransform.py:79 +#: flatcamTools/ToolTransform.py:78 msgid "" "Rotate the selected object(s).\n" "The point of reference is the middle of\n" @@ -17578,7 +17600,7 @@ msgstr "" "El punto de referencia es el medio de\n" "el cuadro delimitador para todos los objetos seleccionados." -#: flatcamTools/ToolTransform.py:100 flatcamTools/ToolTransform.py:121 +#: flatcamTools/ToolTransform.py:99 flatcamTools/ToolTransform.py:120 msgid "" "Angle for Skew action, in degrees.\n" "Float number between -360 and 360." @@ -17586,7 +17608,7 @@ msgstr "" "Ángulo para sesgo de acción, en grados.\n" "Número de flotación entre -360 y 360." -#: flatcamTools/ToolTransform.py:110 flatcamTools/ToolTransform.py:131 +#: flatcamTools/ToolTransform.py:109 flatcamTools/ToolTransform.py:130 msgid "" "Skew/shear the selected object(s).\n" "The point of reference is the middle of\n" @@ -17596,7 +17618,7 @@ msgstr "" "El punto de referencia es el medio de\n" "el cuadro delimitador para todos los objetos seleccionados." -#: flatcamTools/ToolTransform.py:160 flatcamTools/ToolTransform.py:180 +#: flatcamTools/ToolTransform.py:159 flatcamTools/ToolTransform.py:179 msgid "" "Scale the selected object(s).\n" "The point of reference depends on \n" @@ -17606,7 +17628,7 @@ msgstr "" "El punto de referencia depende de\n" "el estado de la casilla de verificación Escalar referencia." -#: flatcamTools/ToolTransform.py:229 flatcamTools/ToolTransform.py:249 +#: flatcamTools/ToolTransform.py:228 flatcamTools/ToolTransform.py:248 msgid "" "Offset the selected object(s).\n" "The point of reference is the middle of\n" @@ -17616,15 +17638,15 @@ msgstr "" "El punto de referencia es el medio de\n" "el cuadro delimitador para todos los objetos seleccionados.\n" -#: flatcamTools/ToolTransform.py:269 flatcamTools/ToolTransform.py:274 +#: flatcamTools/ToolTransform.py:268 flatcamTools/ToolTransform.py:273 msgid "Flip the selected object(s) over the X axis." msgstr "Voltee los objetos seleccionados sobre el eje X." -#: flatcamTools/ToolTransform.py:298 +#: flatcamTools/ToolTransform.py:297 msgid "Ref. Point" msgstr "Punto de Ref" -#: flatcamTools/ToolTransform.py:349 +#: flatcamTools/ToolTransform.py:348 msgid "" "Create the buffer effect on each geometry,\n" "element from the selected object, using the distance." @@ -17632,7 +17654,7 @@ msgstr "" "Crea el efecto de amortiguación en cada geometría,\n" "elemento del objeto seleccionado, utilizando la distancia." -#: flatcamTools/ToolTransform.py:375 +#: flatcamTools/ToolTransform.py:374 msgid "" "Create the buffer effect on each geometry,\n" "element from the selected object, using the factor." @@ -17640,128 +17662,128 @@ msgstr "" "Crea el efecto de amortiguación en cada geometría,\n" "elemento del objeto seleccionado, utilizando el factor." -#: flatcamTools/ToolTransform.py:480 +#: flatcamTools/ToolTransform.py:479 msgid "Buffer D" msgstr "Buffer D" -#: flatcamTools/ToolTransform.py:481 +#: flatcamTools/ToolTransform.py:480 msgid "Buffer F" msgstr "Buffer F" -#: flatcamTools/ToolTransform.py:558 +#: flatcamTools/ToolTransform.py:557 msgid "Rotate transformation can not be done for a value of 0." msgstr "La transformación de rotación no se puede hacer para un valor de 0." -#: flatcamTools/ToolTransform.py:597 flatcamTools/ToolTransform.py:620 +#: flatcamTools/ToolTransform.py:596 flatcamTools/ToolTransform.py:619 msgid "Scale transformation can not be done for a factor of 0 or 1." msgstr "La transformación de escala no se puede hacer para un factor de 0 o 1." -#: flatcamTools/ToolTransform.py:635 flatcamTools/ToolTransform.py:645 +#: flatcamTools/ToolTransform.py:634 flatcamTools/ToolTransform.py:644 msgid "Offset transformation can not be done for a value of 0." msgstr "" "La transformación de compensación no se puede hacer para un valor de 0." -#: flatcamTools/ToolTransform.py:677 +#: flatcamTools/ToolTransform.py:676 msgid "No object selected. Please Select an object to rotate!" msgstr "" "Ningún objeto seleccionado. Por favor, seleccione un objeto para rotar!" -#: flatcamTools/ToolTransform.py:703 +#: flatcamTools/ToolTransform.py:702 msgid "CNCJob objects can't be rotated." msgstr "Los objetos de CNCJob no se pueden girar." -#: flatcamTools/ToolTransform.py:711 +#: flatcamTools/ToolTransform.py:710 msgid "Rotate done" msgstr "Rotar hecho" -#: flatcamTools/ToolTransform.py:714 flatcamTools/ToolTransform.py:784 -#: flatcamTools/ToolTransform.py:834 flatcamTools/ToolTransform.py:890 -#: flatcamTools/ToolTransform.py:922 flatcamTools/ToolTransform.py:958 +#: flatcamTools/ToolTransform.py:713 flatcamTools/ToolTransform.py:783 +#: flatcamTools/ToolTransform.py:833 flatcamTools/ToolTransform.py:887 +#: flatcamTools/ToolTransform.py:917 flatcamTools/ToolTransform.py:953 msgid "Due of" msgstr "Debido a" -#: flatcamTools/ToolTransform.py:714 flatcamTools/ToolTransform.py:784 -#: flatcamTools/ToolTransform.py:834 flatcamTools/ToolTransform.py:890 -#: flatcamTools/ToolTransform.py:922 flatcamTools/ToolTransform.py:958 +#: flatcamTools/ToolTransform.py:713 flatcamTools/ToolTransform.py:783 +#: flatcamTools/ToolTransform.py:833 flatcamTools/ToolTransform.py:887 +#: flatcamTools/ToolTransform.py:917 flatcamTools/ToolTransform.py:953 msgid "action was not executed." msgstr "la acción no se ejecutó." -#: flatcamTools/ToolTransform.py:726 +#: flatcamTools/ToolTransform.py:725 msgid "No object selected. Please Select an object to flip" msgstr "Ningún objeto seleccionado. Seleccione un objeto para voltear" -#: flatcamTools/ToolTransform.py:759 +#: flatcamTools/ToolTransform.py:758 msgid "CNCJob objects can't be mirrored/flipped." msgstr "Los objetos de CNCJob no se pueden reflejar / voltear." -#: flatcamTools/ToolTransform.py:794 +#: flatcamTools/ToolTransform.py:793 msgid "Skew transformation can not be done for 0, 90 and 180 degrees." msgstr "La transformación oblicua no se puede hacer para 0, 90 y 180 grados." -#: flatcamTools/ToolTransform.py:799 +#: flatcamTools/ToolTransform.py:798 msgid "No object selected. Please Select an object to shear/skew!" msgstr "" "Ningún objeto seleccionado. ¡Seleccione un objeto para cortar / sesgar!" -#: flatcamTools/ToolTransform.py:819 +#: flatcamTools/ToolTransform.py:818 msgid "CNCJob objects can't be skewed." msgstr "Los objetos de CNCJob no se pueden sesgar." -#: flatcamTools/ToolTransform.py:831 +#: flatcamTools/ToolTransform.py:830 msgid "Skew on the" msgstr "Sesgar en el" -#: flatcamTools/ToolTransform.py:831 flatcamTools/ToolTransform.py:887 -#: flatcamTools/ToolTransform.py:919 +#: flatcamTools/ToolTransform.py:830 flatcamTools/ToolTransform.py:884 +#: flatcamTools/ToolTransform.py:914 msgid "axis done" msgstr "eje hecho" -#: flatcamTools/ToolTransform.py:846 +#: flatcamTools/ToolTransform.py:844 msgid "No object selected. Please Select an object to scale!" msgstr "" "Ningún objeto seleccionado. Por favor, seleccione un objeto para escalar!" -#: flatcamTools/ToolTransform.py:877 +#: flatcamTools/ToolTransform.py:875 msgid "CNCJob objects can't be scaled." msgstr "Los objetos de CNCJob no se pueden escalar." -#: flatcamTools/ToolTransform.py:887 +#: flatcamTools/ToolTransform.py:884 msgid "Scale on the" msgstr "Escala en el" -#: flatcamTools/ToolTransform.py:898 +#: flatcamTools/ToolTransform.py:894 msgid "No object selected. Please Select an object to offset!" msgstr "" "Ningún objeto seleccionado. Por favor, seleccione un objeto para compensar!" -#: flatcamTools/ToolTransform.py:905 +#: flatcamTools/ToolTransform.py:901 msgid "CNCJob objects can't be offset." msgstr "Los objetos CNCJob no se pueden compensar." -#: flatcamTools/ToolTransform.py:919 +#: flatcamTools/ToolTransform.py:914 msgid "Offset on the" msgstr "Offset en el" -#: flatcamTools/ToolTransform.py:929 +#: flatcamTools/ToolTransform.py:924 msgid "No object selected. Please Select an object to buffer!" msgstr "" "Ningún objeto seleccionado. Por favor, seleccione un objeto para almacenar!" -#: flatcamTools/ToolTransform.py:932 +#: flatcamTools/ToolTransform.py:927 msgid "Applying Buffer" msgstr "Aplicando Tampón" -#: flatcamTools/ToolTransform.py:936 +#: flatcamTools/ToolTransform.py:931 msgid "CNCJob objects can't be buffered." msgstr "Los objetos CNCJob no se pueden almacenar en búfer." -#: flatcamTools/ToolTransform.py:953 +#: flatcamTools/ToolTransform.py:948 msgid "Buffer done" msgstr "Tampón hecho" -#: tclCommands/TclCommandBbox.py:76 tclCommands/TclCommandNregions.py:75 -msgid "Expected FlatCAMGerber or FlatCAMGeometry, got" -msgstr "FlatCAMGerber o FlatCAMGeometry esperado, obtuve" +#: tclCommands/TclCommandBbox.py:75 tclCommands/TclCommandNregions.py:74 +msgid "Expected GerberObject or GeometryObject, got" +msgstr "GerberObject o GeometryObject esperado, obtuve" #: tclCommands/TclCommandBounds.py:67 tclCommands/TclCommandBounds.py:71 msgid "Expected a list of objects names separated by comma. Got" @@ -17780,37 +17802,37 @@ msgstr "No se pudo recuperar el objeto" msgid "Expected either -box or -all." msgstr "Se esperaba -box o -all." -#: tclCommands/TclCommandGeoCutout.py:148 +#: tclCommands/TclCommandGeoCutout.py:147 msgid "" "The name of the object for which cutout is done is missing. Add it and retry." msgstr "" "Falta el nombre del objeto para el que se realiza el recorte. Añádelo y " "vuelve a intentarlo." -#: tclCommands/TclCommandGeoCutout.py:190 +#: tclCommands/TclCommandGeoCutout.py:189 msgid "Gaps value can be only one of: 'lr', 'tb', '2lr', '2tb', 4 or 8." msgstr "" "El valor de las brechas solo puede ser uno de: 'Ninguno', 'lr', 'tb', '2lr', " "'2tb', 4 u 8." -#: tclCommands/TclCommandGeoCutout.py:302 -#: tclCommands/TclCommandGeoCutout.py:360 +#: tclCommands/TclCommandGeoCutout.py:301 +#: tclCommands/TclCommandGeoCutout.py:359 msgid "Any-form Cutout operation finished." msgstr "Operación de recorte de cualquier forma finalizada." -#: tclCommands/TclCommandGeoCutout.py:366 +#: tclCommands/TclCommandGeoCutout.py:365 msgid "Cancelled. Object type is not supported." msgstr "Cancelado. El tipo de objeto no es compatible." -#: tclCommands/TclCommandHelp.py:74 +#: tclCommands/TclCommandHelp.py:75 msgid "Available commands:" msgstr "Comandos disponibles:" -#: tclCommands/TclCommandHelp.py:112 +#: tclCommands/TclCommandHelp.py:115 msgid "Type help for usage." msgstr "Escriba help para su uso." -#: tclCommands/TclCommandHelp.py:112 +#: tclCommands/TclCommandHelp.py:115 msgid "Example: help open_gerber" msgstr "Ejemplo: help open_gerber" @@ -17856,6 +17878,17 @@ msgid "No Geometry name in args. Provide a name and try again." msgstr "" "Sin nombre de geometría en args. Proporcione un nombre e intente nuevamente." +#~ msgid "e_fr_probe" +#~ msgstr "e_fr_probe" + +#~ msgid "" +#~ " Could not generate punched hole Gerber because the punch hole sizeis " +#~ "bigger than some of the apertures in the Gerber object." +#~ msgstr "" +#~ " No se pudo generar el agujero perforado Gerber porque el tamaño del " +#~ "agujero perforado es más grande que algunas de las aberturas en el objeto " +#~ "Gerber." + #~ msgid "Executing Tcl Script ..." #~ msgstr "Ejecutando Tcl Script ..." @@ -18792,8 +18825,8 @@ msgstr "" #~ msgid "%s" #~ msgstr "%s" -#~ msgid "FlatCAMObj.FlatCAMGeometry.mtool_gen_cncjob() -->" -#~ msgstr "FlatCAMObj.FlatCAMGeometry.mtool_gen_cncjob() -->" +#~ msgid "FlatCAMObj.GeometryObject.mtool_gen_cncjob() -->" +#~ msgstr "FlatCAMObj.GeometryObject.mtool_gen_cncjob() -->" #~ msgid "FlatCAMCNNJob.on_edit_code_click() -->" #~ msgstr "FlatCAMCNNJob.on_edit_code_click() -->" @@ -19053,8 +19086,8 @@ msgstr "" #~ "org/jpcgt/flatcam/src/Beta/\">aquí.
    DESCARGAR área aquí.
    " -#~ msgid "Expected a FlatCAMGeometry, got %s" -#~ msgstr "Esperaba una FlatCAMGeometry, obtuve %s" +#~ msgid "Expected a GeometryObject, got %s" +#~ msgstr "Esperaba una GeometryObject, obtuve %s" #~ msgid "Saved to: %s" #~ msgstr "Guardado en:%s" diff --git a/locale/fr/LC_MESSAGES/strings.mo b/locale/fr/LC_MESSAGES/strings.mo index 6679be5f..abd9b748 100644 Binary files a/locale/fr/LC_MESSAGES/strings.mo and b/locale/fr/LC_MESSAGES/strings.mo differ diff --git a/locale/fr/LC_MESSAGES/strings.po b/locale/fr/LC_MESSAGES/strings.po index 9af1318e..b1218039 100644 --- a/locale/fr/LC_MESSAGES/strings.po +++ b/locale/fr/LC_MESSAGES/strings.po @@ -5,8 +5,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" -"POT-Creation-Date: 2020-04-25 15:00+0300\n" -"PO-Revision-Date: 2020-04-25 15:45+0300\n" +"POT-Creation-Date: 2020-04-27 12:32+0300\n" +"PO-Revision-Date: 2020-04-27 12:33+0300\n" "Last-Translator: \n" "Language-Team: \n" "Language: fr\n" @@ -22,9 +22,9 @@ msgstr "" "X-Poedit-SearchPathExcluded-1: doc\n" "X-Poedit-SearchPathExcluded-2: tests\n" -#: FlatCAMApp.py:789 FlatCAMApp.py:821 FlatCAMCommon.py:1925 -#: FlatCAMCommon.py:2040 flatcamEditors/FlatCAMGeoEditor.py:500 -#: flatcamEditors/FlatCAMGeoEditor.py:570 +#: FlatCAMApp.py:794 FlatCAMApp.py:826 FlatCAMDB.py:1481 FlatCAMDB.py:1596 +#: flatcamEditors/FlatCAMGeoEditor.py:499 +#: flatcamEditors/FlatCAMGeoEditor.py:569 #: flatcamEditors/FlatCAMGeoEditor.py:5152 flatcamGUI/PreferencesUI.py:5509 #: flatcamGUI/PreferencesUI.py:6056 flatcamTools/ToolNCC.py:431 #: flatcamTools/ToolNCC.py:2396 flatcamTools/ToolNCC.py:2424 @@ -35,8 +35,8 @@ msgstr "" msgid "Seed" msgstr "La graine" -#: FlatCAMApp.py:795 flatcamGUI/PreferencesUI.py:5588 -#: flatcamGUI/PreferencesUI.py:7695 flatcamTools/ToolCopperThieving.py:126 +#: FlatCAMApp.py:800 flatcamGUI/PreferencesUI.py:5588 +#: flatcamGUI/PreferencesUI.py:7695 flatcamTools/ToolCopperThieving.py:125 #: flatcamTools/ToolNCC.py:535 flatcamTools/ToolNCC.py:1301 #: flatcamTools/ToolNCC.py:1629 flatcamTools/ToolNCC.py:1914 #: flatcamTools/ToolNCC.py:1978 flatcamTools/ToolNCC.py:2962 @@ -44,23 +44,23 @@ msgstr "La graine" msgid "Itself" msgstr "Lui-même" -#: FlatCAMApp.py:822 flatcamGUI/PreferencesUI.py:6119 +#: FlatCAMApp.py:827 flatcamGUI/PreferencesUI.py:6119 #: flatcamTools/ToolPaint.py:486 flatcamTools/ToolPaint.py:1422 #: tclCommands/TclCommandPaint.py:162 msgid "All Polygons" msgstr "Tous les polygones" -#: FlatCAMApp.py:1129 +#: FlatCAMApp.py:1134 msgid "FlatCAM is initializing ..." msgstr "FlatCAM est en cours d'initialisation ..." -#: FlatCAMApp.py:1814 +#: FlatCAMApp.py:1828 msgid "Could not find the Language files. The App strings are missing." msgstr "" "Impossible de trouver les fichiers de langue. Les chaînes de l'application " "sont manquantes." -#: FlatCAMApp.py:1908 +#: FlatCAMApp.py:1922 msgid "" "FlatCAM is initializing ...\n" "Canvas initialization started." @@ -68,7 +68,7 @@ msgstr "" "FlatCAM est en cours d'initialisation ...\n" "L'initialisation de la toile a commencé." -#: FlatCAMApp.py:1928 +#: FlatCAMApp.py:1942 msgid "" "FlatCAM is initializing ...\n" "Canvas initialization started.\n" @@ -78,67 +78,62 @@ msgstr "" "L'initialisation de la toile a commencé.\n" "Initialisation de la toile terminée en" -#: FlatCAMApp.py:2570 flatcamGUI/GUIElements.py:2592 -msgid "Type >help< to get started" -msgstr "Tapez >help< pour commencer" - -#: FlatCAMApp.py:2822 FlatCAMApp.py:9400 +#: FlatCAMApp.py:2815 FlatCAMApp.py:9396 msgid "New Project - Not saved" msgstr "Nouveau projet - Non enregistré" -#: FlatCAMApp.py:2918 +#: FlatCAMApp.py:2911 msgid "" "Found old default preferences files. Please reboot the application to update." msgstr "" "Anciens fichiers de préférences par défaut trouvés. Veuillez redémarrer " "l'application pour la mettre à jour." -#: FlatCAMApp.py:2969 FlatCAMApp.py:3889 FlatCAMApp.py:3938 FlatCAMApp.py:3993 -#: FlatCAMApp.py:4068 FlatCAMApp.py:6117 FlatCAMApp.py:9484 FlatCAMApp.py:9521 -#: FlatCAMApp.py:9563 FlatCAMApp.py:9592 FlatCAMApp.py:9632 FlatCAMApp.py:9657 -#: FlatCAMApp.py:9709 FlatCAMApp.py:9745 FlatCAMApp.py:9791 FlatCAMApp.py:9832 -#: FlatCAMApp.py:9873 FlatCAMApp.py:9914 FlatCAMApp.py:9955 FlatCAMApp.py:9999 -#: FlatCAMApp.py:10055 FlatCAMApp.py:10087 FlatCAMApp.py:10119 -#: FlatCAMApp.py:10356 FlatCAMApp.py:10400 FlatCAMApp.py:10477 -#: FlatCAMApp.py:10532 FlatCAMCommon.py:371 FlatCAMCommon.py:413 -#: FlatCAMCommon.py:1107 FlatCAMCommon.py:1153 FlatCAMCommon.py:2537 -#: FlatCAMCommon.py:2583 ObjectCollection.py:122 -#: flatcamEditors/FlatCAMExcEditor.py:1024 -#: flatcamEditors/FlatCAMExcEditor.py:1092 +#: FlatCAMApp.py:2962 FlatCAMApp.py:3882 FlatCAMApp.py:3931 FlatCAMApp.py:3986 +#: FlatCAMApp.py:4061 FlatCAMApp.py:6110 FlatCAMApp.py:9480 FlatCAMApp.py:9517 +#: FlatCAMApp.py:9559 FlatCAMApp.py:9588 FlatCAMApp.py:9629 FlatCAMApp.py:9654 +#: FlatCAMApp.py:9706 FlatCAMApp.py:9741 FlatCAMApp.py:9786 FlatCAMApp.py:9827 +#: FlatCAMApp.py:9868 FlatCAMApp.py:9909 FlatCAMApp.py:9950 FlatCAMApp.py:9994 +#: FlatCAMApp.py:10050 FlatCAMApp.py:10082 FlatCAMApp.py:10114 +#: FlatCAMApp.py:10351 FlatCAMApp.py:10394 FlatCAMApp.py:10471 +#: FlatCAMApp.py:10526 FlatCAMBookmark.py:291 FlatCAMBookmark.py:333 +#: FlatCAMDB.py:663 FlatCAMDB.py:709 FlatCAMDB.py:2093 FlatCAMDB.py:2139 +#: ObjectCollection.py:127 flatcamEditors/FlatCAMExcEditor.py:1023 +#: flatcamEditors/FlatCAMExcEditor.py:1091 #: flatcamEditors/FlatCAMTextEditor.py:223 flatcamGUI/FlatCAMGUI.py:3389 #: flatcamGUI/FlatCAMGUI.py:3601 flatcamGUI/FlatCAMGUI.py:3812 #: flatcamTools/ToolFilm.py:754 flatcamTools/ToolFilm.py:900 -#: flatcamTools/ToolImage.py:247 flatcamTools/ToolMove.py:270 +#: flatcamTools/ToolImage.py:247 flatcamTools/ToolMove.py:269 #: flatcamTools/ToolPcbWizard.py:301 flatcamTools/ToolPcbWizard.py:324 #: flatcamTools/ToolQRCode.py:791 flatcamTools/ToolQRCode.py:838 msgid "Cancelled." msgstr "Annulé." -#: FlatCAMApp.py:2985 +#: FlatCAMApp.py:2978 msgid "Open Config file failed." msgstr "Le fichier de configuration ouvert a échoué." -#: FlatCAMApp.py:3000 +#: FlatCAMApp.py:2993 msgid "Open Script file failed." msgstr "Le fichier de script ouvert a échoué." -#: FlatCAMApp.py:3026 +#: FlatCAMApp.py:3019 msgid "Open Excellon file failed." msgstr "Le fichier de Excellon ouvert a échoué." -#: FlatCAMApp.py:3039 +#: FlatCAMApp.py:3032 msgid "Open GCode file failed." msgstr "Le fichier de G-code ouvert a échoué." -#: FlatCAMApp.py:3052 +#: FlatCAMApp.py:3045 msgid "Open Gerber file failed." msgstr "Le fichier de Gerber ouvert a échoué." -#: FlatCAMApp.py:3429 +#: FlatCAMApp.py:3422 msgid "Select a Geometry, Gerber or Excellon Object to edit." msgstr "Sélectionnez un objet Geometry, Gerber ou Excellon à modifier." -#: FlatCAMApp.py:3444 +#: FlatCAMApp.py:3437 msgid "" "Simultaneous editing of tools geometry in a MultiGeo Geometry is not " "possible.\n" @@ -148,96 +143,96 @@ msgstr "" "n'est pas possible.\n" "Modifiez une seule géométrie à la fois." -#: FlatCAMApp.py:3502 +#: FlatCAMApp.py:3495 msgid "Editor is activated ..." msgstr "L'éditeur est activé ..." -#: FlatCAMApp.py:3523 +#: FlatCAMApp.py:3516 msgid "Do you want to save the edited object?" msgstr "Voulez-vous enregistrer l'objet édité?" -#: FlatCAMApp.py:3524 flatcamGUI/FlatCAMGUI.py:2273 +#: FlatCAMApp.py:3517 flatcamGUI/FlatCAMGUI.py:2273 msgid "Close Editor" msgstr "Fermer l'éditeur" -#: FlatCAMApp.py:3527 FlatCAMApp.py:5169 FlatCAMApp.py:8030 FlatCAMApp.py:8056 -#: FlatCAMApp.py:9305 FlatCAMTranslation.py:108 FlatCAMTranslation.py:199 +#: FlatCAMApp.py:3520 FlatCAMApp.py:5162 FlatCAMApp.py:8024 FlatCAMApp.py:8050 +#: FlatCAMApp.py:9300 FlatCAMTranslation.py:108 FlatCAMTranslation.py:199 #: flatcamGUI/FlatCAMGUI.py:2479 msgid "Yes" msgstr "Oui" -#: FlatCAMApp.py:3528 FlatCAMApp.py:5170 FlatCAMApp.py:8031 FlatCAMApp.py:8057 -#: FlatCAMApp.py:9306 FlatCAMTranslation.py:109 FlatCAMTranslation.py:200 +#: FlatCAMApp.py:3521 FlatCAMApp.py:5163 FlatCAMApp.py:8025 FlatCAMApp.py:8051 +#: FlatCAMApp.py:9301 FlatCAMTranslation.py:109 FlatCAMTranslation.py:200 #: flatcamGUI/FlatCAMGUI.py:2480 flatcamGUI/PreferencesUI.py:5443 #: flatcamGUI/PreferencesUI.py:5989 flatcamTools/ToolNCC.py:182 #: flatcamTools/ToolPaint.py:166 msgid "No" msgstr "Non" -#: FlatCAMApp.py:3529 FlatCAMApp.py:5171 FlatCAMApp.py:6055 FlatCAMApp.py:7006 -#: FlatCAMApp.py:9307 FlatCAMCommon.py:572 FlatCAMCommon.py:2127 +#: FlatCAMApp.py:3522 FlatCAMApp.py:5164 FlatCAMApp.py:6048 FlatCAMApp.py:7000 +#: FlatCAMApp.py:9302 FlatCAMDB.py:128 FlatCAMDB.py:1683 #: flatcamGUI/FlatCAMGUI.py:1332 msgid "Cancel" msgstr "Annuler" -#: FlatCAMApp.py:3561 +#: FlatCAMApp.py:3554 msgid "Object empty after edit." msgstr "Objet vide après édition." -#: FlatCAMApp.py:3565 FlatCAMApp.py:3586 FlatCAMApp.py:3608 +#: FlatCAMApp.py:3558 FlatCAMApp.py:3579 FlatCAMApp.py:3601 msgid "Editor exited. Editor content saved." msgstr "L'éditeur est sorti. Contenu de l'éditeur enregistré." -#: FlatCAMApp.py:3612 FlatCAMApp.py:3635 FlatCAMApp.py:3653 +#: FlatCAMApp.py:3605 FlatCAMApp.py:3628 FlatCAMApp.py:3646 msgid "Select a Gerber, Geometry or Excellon Object to update." msgstr "Sélectionnez un objet Gerber, Geometry ou Excellon à mettre à jour." -#: FlatCAMApp.py:3615 +#: FlatCAMApp.py:3608 msgid "is updated, returning to App..." msgstr "est mis à jour, revenant à l'App ..." -#: FlatCAMApp.py:3622 +#: FlatCAMApp.py:3615 msgid "Editor exited. Editor content was not saved." msgstr "L'éditeur est sorti. Le contenu de l'éditeur n'a pas été enregistré." -#: FlatCAMApp.py:3815 FlatCAMApp.py:3946 FlatCAMApp.py:5018 +#: FlatCAMApp.py:3808 FlatCAMApp.py:3939 FlatCAMApp.py:5011 msgid "Could not load defaults file." msgstr "Impossible de charger le fichier par défaut." -#: FlatCAMApp.py:3827 FlatCAMApp.py:3954 FlatCAMApp.py:5027 +#: FlatCAMApp.py:3820 FlatCAMApp.py:3947 FlatCAMApp.py:5020 msgid "Failed to parse defaults file." msgstr "Échec de l'analyse du fichier par défaut." -#: FlatCAMApp.py:3897 FlatCAMApp.py:5119 +#: FlatCAMApp.py:3890 FlatCAMApp.py:5112 msgid "Could not load factory defaults file." msgstr "Impossible de charger le fichier de paramètres d'usine." -#: FlatCAMApp.py:3905 FlatCAMApp.py:5129 +#: FlatCAMApp.py:3898 FlatCAMApp.py:5122 msgid "Failed to parse factory defaults file." msgstr "Échec de l'analyse du fichier des paramètres d'usine." -#: FlatCAMApp.py:3913 +#: FlatCAMApp.py:3906 msgid "Preferences default values are restored." msgstr "Les valeurs par défaut des préférences sont restaurées." -#: FlatCAMApp.py:3928 FlatCAMApp.py:3932 +#: FlatCAMApp.py:3921 FlatCAMApp.py:3925 msgid "Import FlatCAM Preferences" msgstr "Importer les préférences FlatCAM" -#: FlatCAMApp.py:3962 +#: FlatCAMApp.py:3955 msgid "Imported Defaults from" msgstr "Valeurs par défaut importées de" -#: FlatCAMApp.py:3982 FlatCAMApp.py:3987 +#: FlatCAMApp.py:3975 FlatCAMApp.py:3980 msgid "Export FlatCAM Preferences" msgstr "Exporter les préférences FlatCAM" -#: FlatCAMApp.py:4002 FlatCAMApp.py:4076 FlatCAMApp.py:10776 -#: FlatCAMApp.py:10824 FlatCAMApp.py:10950 FlatCAMApp.py:11087 -#: FlatCAMCommon.py:379 FlatCAMCommon.py:1115 FlatCAMCommon.py:2545 -#: FlatCAMObj.py:7484 flatcamEditors/FlatCAMTextEditor.py:276 +#: FlatCAMApp.py:3995 FlatCAMApp.py:4069 FlatCAMApp.py:10770 +#: FlatCAMApp.py:10818 FlatCAMApp.py:10943 FlatCAMApp.py:11079 +#: FlatCAMBookmark.py:299 FlatCAMDB.py:671 FlatCAMDB.py:2101 +#: flatcamEditors/FlatCAMTextEditor.py:276 flatcamObjects/FlatCAMCNCJob.py:958 #: flatcamTools/ToolFilm.py:1031 flatcamTools/ToolFilm.py:1212 -#: flatcamTools/ToolSolderPaste.py:1533 +#: flatcamTools/ToolSolderPaste.py:1534 msgid "" "Permission denied, saving not possible.\n" "Most likely another app is holding the file open and not accessible." @@ -246,108 +241,111 @@ msgstr "" "Très probablement, une autre application tient le fichier ouvert et n'est " "pas accessible." -#: FlatCAMApp.py:4014 +#: FlatCAMApp.py:4007 msgid "Could not load preferences file." msgstr "Impossible de charger le fichier de préférences." -#: FlatCAMApp.py:4033 FlatCAMApp.py:4100 FlatCAMApp.py:5046 +#: FlatCAMApp.py:4026 FlatCAMApp.py:4093 FlatCAMApp.py:5039 msgid "Failed to write defaults to file." msgstr "Échec d'écriture par défaut dans le fichier." -#: FlatCAMApp.py:4038 +#: FlatCAMApp.py:4031 msgid "Exported preferences to" msgstr "Préférences exportées vers" -#: FlatCAMApp.py:4058 FlatCAMApp.py:4063 +#: FlatCAMApp.py:4051 FlatCAMApp.py:4056 msgid "Save to file" msgstr "Enregistrer dans un fichier" -#: FlatCAMApp.py:4087 +#: FlatCAMApp.py:4080 msgid "Could not load the file." msgstr "Impossible de charger le fichier." -#: FlatCAMApp.py:4103 +#: FlatCAMApp.py:4096 msgid "Exported file to" msgstr "Fichier exporté vers" -#: FlatCAMApp.py:4186 +#: FlatCAMApp.py:4179 msgid "Failed to open recent files file for writing." msgstr "Échec d'ouverture du fichier récent en écriture." -#: FlatCAMApp.py:4197 +#: FlatCAMApp.py:4190 msgid "Failed to open recent projects file for writing." msgstr "Échec d'ouverture du fichier de projets récents en écriture." -#: FlatCAMApp.py:4282 FlatCAMApp.py:11283 FlatCAMApp.py:11342 -#: FlatCAMApp.py:11470 FlatCAMApp.py:12196 FlatCAMObj.py:5605 -#: flatcamEditors/FlatCAMGrbEditor.py:4231 flatcamTools/ToolPcbWizard.py:433 +#: FlatCAMApp.py:4275 FlatCAMApp.py:11275 FlatCAMApp.py:11334 +#: FlatCAMApp.py:11462 FlatCAMApp.py:12193 +#: flatcamEditors/FlatCAMGrbEditor.py:4231 +#: flatcamObjects/FlatCAMGeometry.py:1671 flatcamParsers/ParseExcellon.py:897 +#: flatcamTools/ToolPcbWizard.py:433 msgid "An internal error has occurred. See shell.\n" msgstr "Une erreur interne s'est produite. Voir shell.\n" -#: FlatCAMApp.py:4283 +#: FlatCAMApp.py:4276 #, python-brace-format msgid "" "Object ({kind}) failed because: {error} \n" "\n" msgstr "L'objet ({kind}) a échoué car: {error}\n" -#: FlatCAMApp.py:4298 +#: FlatCAMApp.py:4291 msgid "Converting units to " msgstr "Conversion d'unités en " -#: FlatCAMApp.py:4411 +#: FlatCAMApp.py:4404 msgid "CREATE A NEW FLATCAM TCL SCRIPT" msgstr "CRÉER UN NOUVEAU SCRIPT FLATCAM TCL" -#: FlatCAMApp.py:4412 +#: FlatCAMApp.py:4405 msgid "TCL Tutorial is here" msgstr "Le didacticiel TCL est ici" -#: FlatCAMApp.py:4414 +#: FlatCAMApp.py:4407 msgid "FlatCAM commands list" msgstr "Liste des commandes FlatCAM" -#: FlatCAMApp.py:4465 FlatCAMApp.py:4471 FlatCAMApp.py:4477 FlatCAMApp.py:4483 -#: FlatCAMApp.py:4489 FlatCAMApp.py:4495 +#: FlatCAMApp.py:4458 FlatCAMApp.py:4464 FlatCAMApp.py:4470 FlatCAMApp.py:4476 +#: FlatCAMApp.py:4482 FlatCAMApp.py:4488 msgid "created/selected" msgstr "créé / sélectionné" -#: FlatCAMApp.py:4510 FlatCAMApp.py:7092 FlatCAMObj.py:278 FlatCAMObj.py:309 -#: FlatCAMObj.py:325 FlatCAMObj.py:405 flatcamTools/ToolCopperThieving.py:1482 -#: flatcamTools/ToolFiducials.py:809 flatcamTools/ToolMove.py:230 +#: FlatCAMApp.py:4503 FlatCAMApp.py:7086 flatcamObjects/FlatCAMObj.py:248 +#: flatcamObjects/FlatCAMObj.py:279 flatcamObjects/FlatCAMObj.py:295 +#: flatcamObjects/FlatCAMObj.py:375 flatcamTools/ToolCopperThieving.py:1481 +#: flatcamTools/ToolFiducials.py:809 flatcamTools/ToolMove.py:229 #: flatcamTools/ToolQRCode.py:728 msgid "Plotting" msgstr "Traçage" -#: FlatCAMApp.py:4573 flatcamGUI/FlatCAMGUI.py:530 +#: FlatCAMApp.py:4566 flatcamGUI/FlatCAMGUI.py:530 msgid "About FlatCAM" msgstr "À propos de FlatCAM" -#: FlatCAMApp.py:4599 +#: FlatCAMApp.py:4592 msgid "2D Computer-Aided Printed Circuit Board Manufacturing" msgstr "Fabrication de cartes de circuits imprimés 2D assistées par ordinateur" -#: FlatCAMApp.py:4600 +#: FlatCAMApp.py:4593 msgid "Development" msgstr "Développement" -#: FlatCAMApp.py:4601 +#: FlatCAMApp.py:4594 msgid "DOWNLOAD" msgstr "TÉLÉCHARGER" -#: FlatCAMApp.py:4602 +#: FlatCAMApp.py:4595 msgid "Issue tracker" msgstr "Traqueur d'incidents" -#: FlatCAMApp.py:4606 FlatCAMApp.py:4948 flatcamGUI/GUIElements.py:2583 +#: FlatCAMApp.py:4599 FlatCAMApp.py:4941 flatcamGUI/GUIElements.py:2583 msgid "Close" msgstr "Proche" -#: FlatCAMApp.py:4621 +#: FlatCAMApp.py:4614 msgid "Licensed under the MIT license" msgstr "Sous licence MIT" -#: FlatCAMApp.py:4630 +#: FlatCAMApp.py:4623 msgid "" "Permission is hereby granted, free of charge, to any person obtaining a " "copy\n" @@ -399,7 +397,7 @@ msgstr "" "DANS\n" "LES LOGICIELS." -#: FlatCAMApp.py:4652 +#: FlatCAMApp.py:4645 msgid "" "Some of the icons used are from the following sources:
    Icônes de " "oNline Web Fonts" -#: FlatCAMApp.py:4685 +#: FlatCAMApp.py:4678 msgid "Splash" msgstr "Éclaboussure" -#: FlatCAMApp.py:4691 +#: FlatCAMApp.py:4684 msgid "Programmers" msgstr "Programmeurs" -#: FlatCAMApp.py:4697 +#: FlatCAMApp.py:4690 msgid "Translators" msgstr "Traducteurs" -#: FlatCAMApp.py:4703 +#: FlatCAMApp.py:4696 msgid "License" msgstr "Licence" -#: FlatCAMApp.py:4709 +#: FlatCAMApp.py:4702 msgid "Attributions" msgstr "Attributions" -#: FlatCAMApp.py:4732 +#: FlatCAMApp.py:4725 msgid "Programmer" msgstr "Programmeur" -#: FlatCAMApp.py:4733 +#: FlatCAMApp.py:4726 msgid "Status" msgstr "Statut" -#: FlatCAMApp.py:4734 FlatCAMApp.py:4812 +#: FlatCAMApp.py:4727 FlatCAMApp.py:4805 msgid "E-mail" msgstr "Email" -#: FlatCAMApp.py:4742 +#: FlatCAMApp.py:4735 msgid "BETA Maintainer >= 2019" msgstr "Mainteneur BETA> = 2019" -#: FlatCAMApp.py:4809 +#: FlatCAMApp.py:4802 msgid "Language" msgstr "La langue" -#: FlatCAMApp.py:4810 +#: FlatCAMApp.py:4803 msgid "Translator" msgstr "Traducteur" -#: FlatCAMApp.py:4811 +#: FlatCAMApp.py:4804 msgid "Corrections" msgstr "Les corrections" -#: FlatCAMApp.py:4920 FlatCAMApp.py:4928 FlatCAMApp.py:8075 +#: FlatCAMApp.py:4913 FlatCAMApp.py:4921 FlatCAMApp.py:8069 #: flatcamGUI/FlatCAMGUI.py:512 msgid "Bookmarks Manager" msgstr "Gestionnaire de favoris" -#: FlatCAMApp.py:4939 +#: FlatCAMApp.py:4932 msgid "" "This entry will resolve to another website if:\n" "\n" @@ -488,27 +486,27 @@ msgstr "" "Si vous ne pouvez pas obtenir d'informations sur FlatCAM beta\n" "utilisez le lien de chaîne YouTube dans le menu Aide." -#: FlatCAMApp.py:4946 +#: FlatCAMApp.py:4939 msgid "Alternative website" msgstr "Site alternatif" -#: FlatCAMApp.py:5050 FlatCAMApp.py:8039 +#: FlatCAMApp.py:5043 FlatCAMApp.py:8033 msgid "Preferences saved." msgstr "Préférences enregistrées." -#: FlatCAMApp.py:5145 +#: FlatCAMApp.py:5138 msgid "Failed to write factory defaults to file." msgstr "Échec de l'écriture des paramètres d'usine par défaut dans le fichier." -#: FlatCAMApp.py:5149 +#: FlatCAMApp.py:5142 msgid "Factory defaults saved." msgstr "Les paramètres d'usine par défaut ont été enregistrés." -#: FlatCAMApp.py:5159 flatcamGUI/FlatCAMGUI.py:4178 +#: FlatCAMApp.py:5152 flatcamGUI/FlatCAMGUI.py:4178 msgid "Application is saving the project. Please wait ..." msgstr "L'application enregistre le projet. S'il vous plaît, attendez ..." -#: FlatCAMApp.py:5164 FlatCAMTranslation.py:194 +#: FlatCAMApp.py:5157 FlatCAMTranslation.py:194 msgid "" "There are files/objects modified in FlatCAM. \n" "Do you want to Save the project?" @@ -516,30 +514,30 @@ msgstr "" "Il y a des fichiers / objets modifiés dans FlatCAM.\n" "Voulez-vous enregistrer le projet?" -#: FlatCAMApp.py:5167 FlatCAMApp.py:9303 FlatCAMTranslation.py:197 +#: FlatCAMApp.py:5160 FlatCAMApp.py:9298 FlatCAMTranslation.py:197 msgid "Save changes" msgstr "Sauvegarder les modifications" -#: FlatCAMApp.py:5423 +#: FlatCAMApp.py:5416 msgid "Selected Excellon file extensions registered with FlatCAM." msgstr "" "Extensions de fichier Excellon sélectionnées enregistrées avec FlatCAM." -#: FlatCAMApp.py:5445 +#: FlatCAMApp.py:5438 msgid "Selected GCode file extensions registered with FlatCAM." msgstr "Extensions de fichier GCode sélectionnées enregistrées avec FlatCAM." -#: FlatCAMApp.py:5467 +#: FlatCAMApp.py:5460 msgid "Selected Gerber file extensions registered with FlatCAM." msgstr "Extensions de fichiers Gerber sélectionnées enregistrées avec FlatCAM." -#: FlatCAMApp.py:5655 FlatCAMApp.py:5714 FlatCAMApp.py:5742 +#: FlatCAMApp.py:5648 FlatCAMApp.py:5707 FlatCAMApp.py:5735 msgid "At least two objects are required for join. Objects currently selected" msgstr "" "Au moins deux objets sont requis pour la jointure. Objets actuellement " "sélectionnés" -#: FlatCAMApp.py:5664 +#: FlatCAMApp.py:5657 msgid "" "Failed join. The Geometry objects are of different types.\n" "At least one is MultiGeo type and the other is SingleGeo type. A possibility " @@ -556,47 +554,47 @@ msgstr "" "attendu.\n" "Vérifiez le GCODE généré." -#: FlatCAMApp.py:5676 FlatCAMApp.py:5686 +#: FlatCAMApp.py:5669 FlatCAMApp.py:5679 msgid "Geometry merging finished" msgstr "Fusion de la géométrie terminée" -#: FlatCAMApp.py:5709 +#: FlatCAMApp.py:5702 msgid "Failed. Excellon joining works only on Excellon objects." msgstr "Échoué. Excellon rejoindre ne travaille que sur des objets Excellon." -#: FlatCAMApp.py:5719 +#: FlatCAMApp.py:5712 msgid "Excellon merging finished" msgstr "Fusion de la Excellon terminée" -#: FlatCAMApp.py:5737 +#: FlatCAMApp.py:5730 msgid "Failed. Gerber joining works only on Gerber objects." msgstr "Échoué. La jonction de Gerber ne fonctionne que sur des objets Gerber." -#: FlatCAMApp.py:5747 +#: FlatCAMApp.py:5740 msgid "Gerber merging finished" msgstr "Fusion de Gerber terminée" -#: FlatCAMApp.py:5767 FlatCAMApp.py:5802 +#: FlatCAMApp.py:5760 FlatCAMApp.py:5795 msgid "Failed. Select a Geometry Object and try again." msgstr "Échoué. Sélectionnez un objet de géométrie et réessayez." -#: FlatCAMApp.py:5771 FlatCAMApp.py:5807 -msgid "Expected a FlatCAMGeometry, got" +#: FlatCAMApp.py:5764 FlatCAMApp.py:5800 +msgid "Expected a GeometryObject, got" msgstr "Échoué. Sélectionnez un objet de géométrie et réessayez" -#: FlatCAMApp.py:5784 +#: FlatCAMApp.py:5777 msgid "A Geometry object was converted to MultiGeo type." msgstr "Un objet Geometry a été converti en type MultiGeo." -#: FlatCAMApp.py:5822 +#: FlatCAMApp.py:5815 msgid "A Geometry object was converted to SingleGeo type." msgstr "Un objet Geometry a été converti en type SingleGeo." -#: FlatCAMApp.py:6049 +#: FlatCAMApp.py:6042 msgid "Toggle Units" msgstr "Basculer les Unités" -#: FlatCAMApp.py:6051 +#: FlatCAMApp.py:6044 msgid "" "Changing the units of the project\n" "will scale all objects.\n" @@ -608,33 +606,33 @@ msgstr "" "\n" "Voulez-vous continuer?" -#: FlatCAMApp.py:6054 FlatCAMApp.py:6928 FlatCAMApp.py:7005 FlatCAMApp.py:9676 -#: FlatCAMApp.py:9690 FlatCAMApp.py:10025 FlatCAMApp.py:10035 +#: FlatCAMApp.py:6047 FlatCAMApp.py:6922 FlatCAMApp.py:6999 FlatCAMApp.py:9673 +#: FlatCAMApp.py:9687 FlatCAMApp.py:10020 FlatCAMApp.py:10030 msgid "Ok" msgstr "D'accord" -#: FlatCAMApp.py:6103 +#: FlatCAMApp.py:6096 msgid "Converted units to" msgstr "Unités converties en" -#: FlatCAMApp.py:6743 +#: FlatCAMApp.py:6737 msgid "Detachable Tabs" msgstr "Onglets détachables" -#: FlatCAMApp.py:6817 FlatCAMApp.py:6861 FlatCAMApp.py:6889 FlatCAMApp.py:7822 -#: FlatCAMApp.py:7890 FlatCAMApp.py:7994 +#: FlatCAMApp.py:6811 FlatCAMApp.py:6855 FlatCAMApp.py:6883 FlatCAMApp.py:7816 +#: FlatCAMApp.py:7884 FlatCAMApp.py:7988 msgid "Preferences" msgstr "Préférences" -#: FlatCAMApp.py:6823 +#: FlatCAMApp.py:6817 msgid "Preferences applied." msgstr "Préférences appliquées." -#: FlatCAMApp.py:6894 +#: FlatCAMApp.py:6888 msgid "Preferences closed without saving." msgstr "Les préférences se sont fermées sans enregistrer." -#: FlatCAMApp.py:6917 flatcamTools/ToolNCC.py:932 flatcamTools/ToolNCC.py:1426 +#: FlatCAMApp.py:6911 flatcamTools/ToolNCC.py:932 flatcamTools/ToolNCC.py:1426 #: flatcamTools/ToolPaint.py:858 flatcamTools/ToolSolderPaste.py:568 #: flatcamTools/ToolSolderPaste.py:893 msgid "Please enter a tool diameter with non-zero value, in Float format." @@ -642,12 +640,12 @@ msgstr "" "Veuillez saisir un diamètre d’outil avec une valeur non nulle, au format " "réel." -#: FlatCAMApp.py:6921 flatcamTools/ToolNCC.py:936 flatcamTools/ToolPaint.py:862 +#: FlatCAMApp.py:6915 flatcamTools/ToolNCC.py:936 flatcamTools/ToolPaint.py:862 #: flatcamTools/ToolSolderPaste.py:572 msgid "Adding Tool cancelled" msgstr "Outil d'ajout annulé" -#: FlatCAMApp.py:6924 +#: FlatCAMApp.py:6918 msgid "" "Adding Tool works only when Advanced is checked.\n" "Go to Preferences -> General - Show Advanced Options." @@ -655,11 +653,11 @@ msgstr "" "L'ajout d'outil ne fonctionne que lorsque l'option Avancé est cochée.\n" "Allez dans Préférences -> Général - Afficher les options avancées." -#: FlatCAMApp.py:7000 +#: FlatCAMApp.py:6994 msgid "Delete objects" msgstr "Supprimer des objets" -#: FlatCAMApp.py:7003 +#: FlatCAMApp.py:6997 msgid "" "Are you sure you want to permanently delete\n" "the selected objects?" @@ -667,57 +665,57 @@ msgstr "" "Êtes-vous sûr de vouloir supprimer définitivement\n" "les objets sélectionnés?" -#: FlatCAMApp.py:7041 +#: FlatCAMApp.py:7035 msgid "Object(s) deleted" msgstr "Objet (s) supprimé (s)" -#: FlatCAMApp.py:7045 FlatCAMApp.py:7200 flatcamTools/ToolDblSided.py:819 +#: FlatCAMApp.py:7039 FlatCAMApp.py:7194 flatcamTools/ToolDblSided.py:818 msgid "Failed. No object(s) selected..." msgstr "Échoué. Aucun objet sélectionné ..." -#: FlatCAMApp.py:7047 +#: FlatCAMApp.py:7041 msgid "Save the work in Editor and try again ..." msgstr "Enregistrez le travail dans l'éditeur et réessayez ..." -#: FlatCAMApp.py:7076 +#: FlatCAMApp.py:7070 msgid "Object deleted" msgstr "Objet supprimé" -#: FlatCAMApp.py:7103 +#: FlatCAMApp.py:7097 msgid "Click to set the origin ..." msgstr "Cliquez pour définir l'origine ..." -#: FlatCAMApp.py:7125 +#: FlatCAMApp.py:7119 msgid "Setting Origin..." msgstr "Réglage de l'Origine ..." -#: FlatCAMApp.py:7138 FlatCAMApp.py:7240 +#: FlatCAMApp.py:7132 FlatCAMApp.py:7234 msgid "Origin set" msgstr "Ensemble d'origine" -#: FlatCAMApp.py:7155 +#: FlatCAMApp.py:7149 msgid "Origin coordinates specified but incomplete." msgstr "Coordonnées d'origine spécifiées mais incomplètes." -#: FlatCAMApp.py:7196 +#: FlatCAMApp.py:7190 msgid "Moving to Origin..." msgstr "Déplacement vers l'origine ..." -#: FlatCAMApp.py:7277 +#: FlatCAMApp.py:7271 msgid "Jump to ..." msgstr "Sauter à ..." -#: FlatCAMApp.py:7278 +#: FlatCAMApp.py:7272 msgid "Enter the coordinates in format X,Y:" msgstr "Entrez les coordonnées au format X, Y:" -#: FlatCAMApp.py:7288 +#: FlatCAMApp.py:7282 msgid "Wrong coordinates. Enter coordinates in format: X,Y" msgstr "Mauvaises coordonnées. Entrez les coordonnées au format: X, Y" -#: FlatCAMApp.py:7366 FlatCAMApp.py:7515 -#: flatcamEditors/FlatCAMExcEditor.py:3622 -#: flatcamEditors/FlatCAMExcEditor.py:3630 +#: FlatCAMApp.py:7360 FlatCAMApp.py:7509 +#: flatcamEditors/FlatCAMExcEditor.py:3624 +#: flatcamEditors/FlatCAMExcEditor.py:3632 #: flatcamEditors/FlatCAMGeoEditor.py:4349 #: flatcamEditors/FlatCAMGeoEditor.py:4363 #: flatcamEditors/FlatCAMGrbEditor.py:1085 @@ -731,85 +729,85 @@ msgstr "Mauvaises coordonnées. Entrez les coordonnées au format: X, Y" msgid "Done." msgstr "Terminé." -#: FlatCAMApp.py:7381 FlatCAMApp.py:9672 FlatCAMApp.py:9768 FlatCAMApp.py:9810 -#: FlatCAMApp.py:9851 FlatCAMApp.py:9892 FlatCAMApp.py:9933 FlatCAMApp.py:9977 -#: FlatCAMApp.py:10021 FlatCAMApp.py:10510 FlatCAMApp.py:10514 +#: FlatCAMApp.py:7375 FlatCAMApp.py:9669 FlatCAMApp.py:9764 FlatCAMApp.py:9805 +#: FlatCAMApp.py:9846 FlatCAMApp.py:9887 FlatCAMApp.py:9928 FlatCAMApp.py:9972 +#: FlatCAMApp.py:10016 FlatCAMApp.py:10504 FlatCAMApp.py:10508 #: flatcamTools/ToolProperties.py:116 msgid "No object selected." msgstr "Aucun objet sélectionné." -#: FlatCAMApp.py:7400 +#: FlatCAMApp.py:7394 msgid "Bottom-Left" msgstr "En bas à gauche" -#: FlatCAMApp.py:7401 flatcamGUI/PreferencesUI.py:8111 +#: FlatCAMApp.py:7395 flatcamGUI/PreferencesUI.py:8111 #: flatcamTools/ToolCalibration.py:159 msgid "Top-Left" msgstr "En haut à gauche" -#: FlatCAMApp.py:7402 flatcamGUI/PreferencesUI.py:8112 +#: FlatCAMApp.py:7396 flatcamGUI/PreferencesUI.py:8112 #: flatcamTools/ToolCalibration.py:160 msgid "Bottom-Right" msgstr "En bas à droite" -#: FlatCAMApp.py:7403 +#: FlatCAMApp.py:7397 msgid "Top-Right" msgstr "En haut à droite" -#: FlatCAMApp.py:7404 flatcamGUI/ObjectUI.py:2624 +#: FlatCAMApp.py:7398 flatcamGUI/ObjectUI.py:2625 msgid "Center" msgstr "Centre" -#: FlatCAMApp.py:7424 +#: FlatCAMApp.py:7418 msgid "Locate ..." msgstr "Localiser ..." -#: FlatCAMApp.py:7685 FlatCAMApp.py:7762 +#: FlatCAMApp.py:7679 FlatCAMApp.py:7756 msgid "No object is selected. Select an object and try again." msgstr "Aucun objet n'est sélectionné. Sélectionnez un objet et réessayez." -#: FlatCAMApp.py:7788 +#: FlatCAMApp.py:7782 msgid "" "Aborting. The current task will be gracefully closed as soon as possible..." msgstr "" "Abandonner La tâche en cours sera clôturée dans les meilleurs délais ..." -#: FlatCAMApp.py:7794 +#: FlatCAMApp.py:7788 msgid "The current task was gracefully closed on user request..." msgstr "" "La tâche en cours a été fermée avec élégance à la demande de " "l'utilisateur ..." -#: FlatCAMApp.py:7887 +#: FlatCAMApp.py:7881 msgid "Preferences edited but not saved." msgstr "Préférences modifiées mais non enregistrées." -#: FlatCAMApp.py:7904 FlatCAMApp.py:7932 FlatCAMApp.py:7959 FlatCAMApp.py:7978 -#: FlatCAMApp.py:8045 FlatCAMCommon.py:1182 FlatCAMCommon.py:1357 -#: FlatCAMCommon.py:2612 FlatCAMCommon.py:2820 FlatCAMObj.py:4798 +#: FlatCAMApp.py:7898 FlatCAMApp.py:7926 FlatCAMApp.py:7953 FlatCAMApp.py:7972 +#: FlatCAMApp.py:8039 FlatCAMDB.py:738 FlatCAMDB.py:913 FlatCAMDB.py:2168 +#: FlatCAMDB.py:2378 flatcamObjects/FlatCAMGeometry.py:862 #: flatcamTools/ToolNCC.py:3958 flatcamTools/ToolNCC.py:4042 #: flatcamTools/ToolPaint.py:3548 flatcamTools/ToolPaint.py:3633 msgid "Tools Database" msgstr "Base de données d'outils" -#: FlatCAMApp.py:7956 +#: FlatCAMApp.py:7950 msgid "Tools in Tools Database edited but not saved." msgstr "" "Les outils de la base de données d'outils ont été modifiés mais pas " "enregistrés." -#: FlatCAMApp.py:7982 flatcamTools/ToolNCC.py:3965 +#: FlatCAMApp.py:7976 flatcamTools/ToolNCC.py:3965 #: flatcamTools/ToolPaint.py:3555 msgid "Tool from DB added in Tool Table." msgstr "Outil de la base de données ajouté dans la table d'outils." -#: FlatCAMApp.py:7984 +#: FlatCAMApp.py:7978 msgid "Adding tool from DB is not allowed for this object." msgstr "" "L'ajout d'outil à partir de la base de données n'est pas autorisé pour cet " "objet." -#: FlatCAMApp.py:8025 +#: FlatCAMApp.py:8019 msgid "" "One or more values are changed.\n" "Do you want to save the Preferences?" @@ -817,11 +815,11 @@ msgstr "" "Une ou plusieurs valeurs sont modifiées.\n" "Voulez-vous enregistrer les préférences?" -#: FlatCAMApp.py:8027 flatcamGUI/FlatCAMGUI.py:291 +#: FlatCAMApp.py:8021 flatcamGUI/FlatCAMGUI.py:291 msgid "Save Preferences" msgstr "Enregistrer les préf" -#: FlatCAMApp.py:8051 +#: FlatCAMApp.py:8045 msgid "" "One or more Tools are edited.\n" "Do you want to update the Tools Database?" @@ -829,177 +827,176 @@ msgstr "" "Un ou plusieurs outils sont modifiés.\n" "Voulez-vous mettre à jour la base de données d'outils?" -#: FlatCAMApp.py:8053 +#: FlatCAMApp.py:8047 msgid "Save Tools Database" msgstr "Enregistrer la base de données d'outils" -#: FlatCAMApp.py:8072 FlatCAMApp.py:10259 FlatCAMObj.py:7089 +#: FlatCAMApp.py:8066 FlatCAMApp.py:10254 flatcamObjects/FlatCAMCNCJob.py:562 msgid "Code Editor" msgstr "Éditeur de code" -#: FlatCAMApp.py:8094 +#: FlatCAMApp.py:8088 msgid "No object selected to Flip on Y axis." msgstr "Aucun objet sélectionné pour basculer sur l’axe Y." -#: FlatCAMApp.py:8120 +#: FlatCAMApp.py:8114 msgid "Flip on Y axis done." msgstr "Tournez sur l'axe des Y fait." -#: FlatCAMApp.py:8122 FlatCAMApp.py:8170 +#: FlatCAMApp.py:8116 FlatCAMApp.py:8164 #: flatcamEditors/FlatCAMGrbEditor.py:5893 msgid "Flip action was not executed." msgstr "L'Action de retournement n'a pas été exécutée." -#: FlatCAMApp.py:8142 +#: FlatCAMApp.py:8136 msgid "No object selected to Flip on X axis." msgstr "Aucun objet sélectionné pour basculer sur l’axe X." -#: FlatCAMApp.py:8168 +#: FlatCAMApp.py:8162 msgid "Flip on X axis done." msgstr "Tournez sur l'axe X fait." -#: FlatCAMApp.py:8190 +#: FlatCAMApp.py:8184 msgid "No object selected to Rotate." msgstr "Aucun objet sélectionné pour faire pivoter." -#: FlatCAMApp.py:8193 FlatCAMApp.py:8246 FlatCAMApp.py:8285 +#: FlatCAMApp.py:8187 FlatCAMApp.py:8240 FlatCAMApp.py:8279 msgid "Transform" msgstr "Transformer" -#: FlatCAMApp.py:8193 FlatCAMApp.py:8246 FlatCAMApp.py:8285 +#: FlatCAMApp.py:8187 FlatCAMApp.py:8240 FlatCAMApp.py:8279 msgid "Enter the Angle value:" msgstr "Entrez la valeur de l'angle:" -#: FlatCAMApp.py:8224 +#: FlatCAMApp.py:8218 msgid "Rotation done." msgstr "Rotation effectuée." -#: FlatCAMApp.py:8226 +#: FlatCAMApp.py:8220 msgid "Rotation movement was not executed." msgstr "Le mouvement de rotation n'a pas été exécuté." -#: FlatCAMApp.py:8244 +#: FlatCAMApp.py:8238 msgid "No object selected to Skew/Shear on X axis." msgstr "Aucun objet sélectionné pour incliner / cisailler sur l'axe X." -#: FlatCAMApp.py:8266 +#: FlatCAMApp.py:8260 msgid "Skew on X axis done." msgstr "Inclinaison sur l'axe X terminée." -#: FlatCAMApp.py:8283 +#: FlatCAMApp.py:8277 msgid "No object selected to Skew/Shear on Y axis." msgstr "" "Aucun objet sélectionné pour incliner / cisailler sur l'axe des ordonnées." -#: FlatCAMApp.py:8305 +#: FlatCAMApp.py:8299 msgid "Skew on Y axis done." msgstr "Inclinaison sur l'axe des Y faite." -#: FlatCAMApp.py:8458 FlatCAMApp.py:8505 flatcamGUI/FlatCAMGUI.py:488 +#: FlatCAMApp.py:8450 FlatCAMApp.py:8497 flatcamGUI/FlatCAMGUI.py:488 #: flatcamGUI/FlatCAMGUI.py:1713 msgid "Select All" msgstr "Tout sélectionner" -#: FlatCAMApp.py:8462 FlatCAMApp.py:8509 flatcamGUI/FlatCAMGUI.py:490 +#: FlatCAMApp.py:8454 FlatCAMApp.py:8501 flatcamGUI/FlatCAMGUI.py:490 msgid "Deselect All" msgstr "Tout déselectionner" -#: FlatCAMApp.py:8525 +#: FlatCAMApp.py:8517 msgid "All objects are selected." msgstr "Tous les objets sont sélectionnés." -#: FlatCAMApp.py:8535 +#: FlatCAMApp.py:8527 msgid "Objects selection is cleared." msgstr "La sélection des objets est effacée." -#: FlatCAMApp.py:8555 flatcamGUI/FlatCAMGUI.py:1706 +#: FlatCAMApp.py:8547 flatcamGUI/FlatCAMGUI.py:1706 msgid "Grid On/Off" msgstr "Grille On/Off" -#: FlatCAMApp.py:8567 flatcamEditors/FlatCAMGeoEditor.py:940 +#: FlatCAMApp.py:8559 flatcamEditors/FlatCAMGeoEditor.py:939 #: flatcamEditors/FlatCAMGrbEditor.py:2580 -#: flatcamEditors/FlatCAMGrbEditor.py:5475 flatcamGUI/ObjectUI.py:1593 -#: flatcamTools/ToolDblSided.py:193 flatcamTools/ToolDblSided.py:426 +#: flatcamEditors/FlatCAMGrbEditor.py:5475 flatcamGUI/ObjectUI.py:1594 +#: flatcamTools/ToolDblSided.py:192 flatcamTools/ToolDblSided.py:425 #: flatcamTools/ToolNCC.py:294 flatcamTools/ToolNCC.py:631 #: flatcamTools/ToolPaint.py:277 flatcamTools/ToolPaint.py:676 -#: flatcamTools/ToolSolderPaste.py:123 flatcamTools/ToolSolderPaste.py:597 -#: flatcamTools/ToolTransform.py:479 +#: flatcamTools/ToolSolderPaste.py:122 flatcamTools/ToolSolderPaste.py:597 +#: flatcamTools/ToolTransform.py:478 msgid "Add" msgstr "Ajouter" -#: FlatCAMApp.py:8569 FlatCAMObj.py:4416 -#: flatcamEditors/FlatCAMGrbEditor.py:2585 +#: FlatCAMApp.py:8561 flatcamEditors/FlatCAMGrbEditor.py:2585 #: flatcamEditors/FlatCAMGrbEditor.py:2733 flatcamGUI/FlatCAMGUI.py:736 #: flatcamGUI/FlatCAMGUI.py:1059 flatcamGUI/FlatCAMGUI.py:2126 #: flatcamGUI/FlatCAMGUI.py:2269 flatcamGUI/FlatCAMGUI.py:2733 -#: flatcamGUI/ObjectUI.py:1621 flatcamTools/ToolNCC.py:316 -#: flatcamTools/ToolNCC.py:637 flatcamTools/ToolPaint.py:299 -#: flatcamTools/ToolPaint.py:682 flatcamTools/ToolSolderPaste.py:129 -#: flatcamTools/ToolSolderPaste.py:600 +#: flatcamGUI/ObjectUI.py:1622 flatcamObjects/FlatCAMGeometry.py:480 +#: flatcamTools/ToolNCC.py:316 flatcamTools/ToolNCC.py:637 +#: flatcamTools/ToolPaint.py:299 flatcamTools/ToolPaint.py:682 +#: flatcamTools/ToolSolderPaste.py:128 flatcamTools/ToolSolderPaste.py:600 msgid "Delete" msgstr "Effacer" -#: FlatCAMApp.py:8582 +#: FlatCAMApp.py:8577 msgid "New Grid ..." msgstr "Nouvelle grille ..." -#: FlatCAMApp.py:8583 +#: FlatCAMApp.py:8578 msgid "Enter a Grid Value:" msgstr "Entrez une valeur de grille:" -#: FlatCAMApp.py:8591 FlatCAMApp.py:8618 +#: FlatCAMApp.py:8586 FlatCAMApp.py:8613 msgid "Please enter a grid value with non-zero value, in Float format." msgstr "" "Veuillez entrer une valeur de grille avec une valeur non nulle, au format " "réel." -#: FlatCAMApp.py:8597 +#: FlatCAMApp.py:8592 msgid "New Grid added" msgstr "Nouvelle grille ajoutée" -#: FlatCAMApp.py:8600 +#: FlatCAMApp.py:8595 msgid "Grid already exists" msgstr "La grille existe déjà" -#: FlatCAMApp.py:8603 +#: FlatCAMApp.py:8598 msgid "Adding New Grid cancelled" msgstr "Ajout d'une nouvelle grille annulée" -#: FlatCAMApp.py:8625 +#: FlatCAMApp.py:8620 msgid " Grid Value does not exist" msgstr " Grid Value does not exist" -#: FlatCAMApp.py:8628 +#: FlatCAMApp.py:8623 msgid "Grid Value deleted" msgstr "Valeur de grille supprimée" -#: FlatCAMApp.py:8631 +#: FlatCAMApp.py:8626 msgid "Delete Grid value cancelled" msgstr "Supprimer la valeur de grille annulée" -#: FlatCAMApp.py:8637 +#: FlatCAMApp.py:8632 msgid "Key Shortcut List" msgstr "Liste de raccourcis clavier" -#: FlatCAMApp.py:8671 +#: FlatCAMApp.py:8666 msgid " No object selected to copy it's name" msgstr " Aucun objet sélectionné pour copier son nom" -#: FlatCAMApp.py:8675 +#: FlatCAMApp.py:8670 msgid "Name copied on clipboard ..." msgstr "Nom copié dans le presse-papiers ..." -#: FlatCAMApp.py:8888 flatcamEditors/FlatCAMGrbEditor.py:4421 +#: FlatCAMApp.py:8883 flatcamEditors/FlatCAMGrbEditor.py:4421 msgid "Coordinates copied to clipboard." msgstr "Coordonnées copiées dans le presse-papier." -#: FlatCAMApp.py:9127 FlatCAMApp.py:9133 FlatCAMApp.py:9139 FlatCAMApp.py:9145 -#: ObjectCollection.py:911 ObjectCollection.py:917 ObjectCollection.py:923 -#: ObjectCollection.py:929 ObjectCollection.py:935 ObjectCollection.py:941 +#: FlatCAMApp.py:9122 FlatCAMApp.py:9128 FlatCAMApp.py:9134 FlatCAMApp.py:9140 +#: ObjectCollection.py:923 ObjectCollection.py:929 ObjectCollection.py:935 +#: ObjectCollection.py:941 ObjectCollection.py:947 ObjectCollection.py:953 msgid "selected" msgstr "choisi" -#: FlatCAMApp.py:9300 +#: FlatCAMApp.py:9295 msgid "" "There are files/objects opened in FlatCAM.\n" "Creating a New project will delete them.\n" @@ -1009,17 +1006,17 @@ msgstr "" "La création d'un nouveau projet les supprimera.\n" "Voulez-vous enregistrer le projet?" -#: FlatCAMApp.py:9321 +#: FlatCAMApp.py:9316 msgid "New Project created" msgstr "Nouveau projet créé" -#: FlatCAMApp.py:9468 FlatCAMApp.py:9472 flatcamGUI/FlatCAMGUI.py:821 +#: FlatCAMApp.py:9464 FlatCAMApp.py:9468 flatcamGUI/FlatCAMGUI.py:821 #: flatcamGUI/FlatCAMGUI.py:2504 msgid "Open Gerber" msgstr "Gerber ouvert" -#: FlatCAMApp.py:9477 FlatCAMApp.py:9514 FlatCAMApp.py:9556 FlatCAMApp.py:9625 -#: FlatCAMApp.py:10378 FlatCAMApp.py:11553 FlatCAMApp.py:11614 +#: FlatCAMApp.py:9473 FlatCAMApp.py:9510 FlatCAMApp.py:9552 FlatCAMApp.py:9622 +#: FlatCAMApp.py:10373 FlatCAMApp.py:11545 FlatCAMApp.py:11606 msgid "" "Canvas initialization started.\n" "Canvas initialization finished in" @@ -1027,260 +1024,261 @@ msgstr "" "L'initialisation de la toile a commencé.\n" "Initialisation de la toile terminée en" -#: FlatCAMApp.py:9479 +#: FlatCAMApp.py:9475 msgid "Opening Gerber file." msgstr "Ouvrir le fichier Gerber." -#: FlatCAMApp.py:9506 FlatCAMApp.py:9510 flatcamGUI/FlatCAMGUI.py:823 +#: FlatCAMApp.py:9502 FlatCAMApp.py:9506 flatcamGUI/FlatCAMGUI.py:823 #: flatcamGUI/FlatCAMGUI.py:2506 msgid "Open Excellon" msgstr "Excellon ouvert" -#: FlatCAMApp.py:9516 +#: FlatCAMApp.py:9512 msgid "Opening Excellon file." msgstr "Ouverture du fichier Excellon." -#: FlatCAMApp.py:9547 FlatCAMApp.py:9551 +#: FlatCAMApp.py:9543 FlatCAMApp.py:9547 msgid "Open G-Code" msgstr "G-code ouvert" -#: FlatCAMApp.py:9558 +#: FlatCAMApp.py:9554 msgid "Opening G-Code file." msgstr "Ouverture du fichier G-Code." -#: FlatCAMApp.py:9581 FlatCAMApp.py:9584 flatcamGUI/FlatCAMGUI.py:1715 +#: FlatCAMApp.py:9577 FlatCAMApp.py:9580 flatcamGUI/FlatCAMGUI.py:1715 msgid "Open Project" msgstr "Projet ouvert" -#: FlatCAMApp.py:9616 FlatCAMApp.py:9620 +#: FlatCAMApp.py:9613 FlatCAMApp.py:9617 msgid "Open HPGL2" msgstr "Ouvrir le HPGL2" -#: FlatCAMApp.py:9627 +#: FlatCAMApp.py:9624 msgid "Opening HPGL2 file." msgstr "Ouvrir le fichier HPGL2." -#: FlatCAMApp.py:9650 FlatCAMApp.py:9653 +#: FlatCAMApp.py:9647 FlatCAMApp.py:9650 msgid "Open Configuration File" msgstr "Ouvrir le fichier de configuration" -#: FlatCAMApp.py:9673 FlatCAMApp.py:10022 +#: FlatCAMApp.py:9670 FlatCAMApp.py:10017 msgid "Please Select a Geometry object to export" msgstr "Veuillez sélectionner un objet de géométrie à exporter" -#: FlatCAMApp.py:9687 +#: FlatCAMApp.py:9684 msgid "Only Geometry, Gerber and CNCJob objects can be used." msgstr "Seuls les objets Geometry, Gerber et CNCJob peuvent être utilisés." -#: FlatCAMApp.py:9700 FlatCAMApp.py:9704 flatcamTools/ToolQRCode.py:829 +#: FlatCAMApp.py:9697 FlatCAMApp.py:9701 flatcamTools/ToolQRCode.py:829 #: flatcamTools/ToolQRCode.py:833 msgid "Export SVG" msgstr "Exporter en SVG" -#: FlatCAMApp.py:9730 +#: FlatCAMApp.py:9726 msgid "Data must be a 3D array with last dimension 3 or 4" msgstr "" "Les données doivent être un tableau 3D avec la dernière dimension 3 ou 4" -#: FlatCAMApp.py:9736 FlatCAMApp.py:9740 +#: FlatCAMApp.py:9732 FlatCAMApp.py:9736 msgid "Export PNG Image" msgstr "Exporter une image PNG" -#: FlatCAMApp.py:9774 FlatCAMApp.py:9982 +#: FlatCAMApp.py:9769 FlatCAMApp.py:9977 msgid "Failed. Only Gerber objects can be saved as Gerber files..." msgstr "" "Échoué. Seuls les objets Gerber peuvent être enregistrés en tant que " "fichiers Gerber ..." -#: FlatCAMApp.py:9786 +#: FlatCAMApp.py:9781 msgid "Save Gerber source file" msgstr "Enregistrer le fichier source Gerber" -#: FlatCAMApp.py:9815 +#: FlatCAMApp.py:9810 msgid "Failed. Only Script objects can be saved as TCL Script files..." msgstr "" "Échoué. Seuls les objets de script peuvent être enregistrés en tant que " "fichiers de script TCL ..." -#: FlatCAMApp.py:9827 +#: FlatCAMApp.py:9822 msgid "Save Script source file" msgstr "Enregistrer le fichier source du script" -#: FlatCAMApp.py:9856 +#: FlatCAMApp.py:9851 msgid "Failed. Only Document objects can be saved as Document files..." msgstr "" "Échoué. Seuls les objets Document peuvent être enregistrés en tant que " "fichiers Document ..." -#: FlatCAMApp.py:9868 +#: FlatCAMApp.py:9863 msgid "Save Document source file" msgstr "Enregistrer le fichier source du document" -#: FlatCAMApp.py:9897 FlatCAMApp.py:9938 FlatCAMApp.py:10863 +#: FlatCAMApp.py:9892 FlatCAMApp.py:9933 FlatCAMApp.py:10856 msgid "Failed. Only Excellon objects can be saved as Excellon files..." msgstr "" "Échoué. Seuls les objets Excellon peuvent être enregistrés en tant que " "fichiers Excellon ..." -#: FlatCAMApp.py:9905 FlatCAMApp.py:9909 +#: FlatCAMApp.py:9900 FlatCAMApp.py:9904 msgid "Save Excellon source file" msgstr "Enregistrer le fichier source Excellon" -#: FlatCAMApp.py:9946 FlatCAMApp.py:9950 +#: FlatCAMApp.py:9941 FlatCAMApp.py:9945 msgid "Export Excellon" msgstr "Exporter Excellon" -#: FlatCAMApp.py:9990 FlatCAMApp.py:9994 +#: FlatCAMApp.py:9985 FlatCAMApp.py:9989 msgid "Export Gerber" msgstr "Export Gerber" -#: FlatCAMApp.py:10032 +#: FlatCAMApp.py:10027 msgid "Only Geometry objects can be used." msgstr "Seuls les objets de géométrie peuvent être utilisés." -#: FlatCAMApp.py:10046 FlatCAMApp.py:10050 +#: FlatCAMApp.py:10041 FlatCAMApp.py:10045 msgid "Export DXF" msgstr "Exportation DXF" -#: FlatCAMApp.py:10075 FlatCAMApp.py:10078 +#: FlatCAMApp.py:10070 FlatCAMApp.py:10073 msgid "Import SVG" msgstr "Importer SVG" -#: FlatCAMApp.py:10106 FlatCAMApp.py:10110 +#: FlatCAMApp.py:10101 FlatCAMApp.py:10105 msgid "Import DXF" msgstr "Importation DXF" -#: FlatCAMApp.py:10161 +#: FlatCAMApp.py:10156 msgid "Viewing the source code of the selected object." msgstr "Affichage du code source de l'objet sélectionné." -#: FlatCAMApp.py:10162 FlatCAMObj.py:7075 FlatCAMObj.py:7852 +#: FlatCAMApp.py:10157 flatcamObjects/FlatCAMCNCJob.py:548 +#: flatcamObjects/FlatCAMScript.py:133 msgid "Loading..." msgstr "Chargement..." -#: FlatCAMApp.py:10168 FlatCAMApp.py:10172 +#: FlatCAMApp.py:10163 FlatCAMApp.py:10167 msgid "Select an Gerber or Excellon file to view it's source file." msgstr "" "Sélectionnez un fichier Gerber ou Excellon pour afficher son fichier source." -#: FlatCAMApp.py:10186 +#: FlatCAMApp.py:10181 msgid "Source Editor" msgstr "Éditeur de source" -#: FlatCAMApp.py:10226 FlatCAMApp.py:10233 +#: FlatCAMApp.py:10221 FlatCAMApp.py:10228 msgid "There is no selected object for which to see it's source file code." msgstr "" "Il n'y a pas d'objet sélectionné pour lequel voir son code de fichier source." -#: FlatCAMApp.py:10245 +#: FlatCAMApp.py:10240 msgid "Failed to load the source code for the selected object" msgstr "Échec du chargement du code source pour l'objet sélectionné" -#: FlatCAMApp.py:10281 +#: FlatCAMApp.py:10276 msgid "Go to Line ..." msgstr "Aller à la ligne ..." -#: FlatCAMApp.py:10282 +#: FlatCAMApp.py:10277 msgid "Line:" msgstr "Ligne:" -#: FlatCAMApp.py:10311 +#: FlatCAMApp.py:10306 msgid "New TCL script file created in Code Editor." msgstr "Nouveau fichier de script TCL créé dans l'éditeur de code." -#: FlatCAMApp.py:10350 FlatCAMApp.py:10352 +#: FlatCAMApp.py:10345 FlatCAMApp.py:10347 msgid "Open TCL script" msgstr "Ouvrir le script TCL" -#: FlatCAMApp.py:10380 -msgid "Executing FlatCAMScript file." -msgstr "Exécution du fichier FlatCAMScript." +#: FlatCAMApp.py:10375 +msgid "Executing ScriptObject file." +msgstr "Exécution du fichier ScriptObject." -#: FlatCAMApp.py:10388 FlatCAMApp.py:10391 +#: FlatCAMApp.py:10383 FlatCAMApp.py:10386 msgid "Run TCL script" msgstr "Exécuter le script TCL" -#: FlatCAMApp.py:10415 +#: FlatCAMApp.py:10409 msgid "TCL script file opened in Code Editor and executed." msgstr "Fichier de script TCL ouvert dans l'éditeur de code et exécuté." -#: FlatCAMApp.py:10466 FlatCAMApp.py:10472 +#: FlatCAMApp.py:10460 FlatCAMApp.py:10466 msgid "Save Project As ..." msgstr "Enregistrer le projet sous ..." -#: FlatCAMApp.py:10468 flatcamGUI/FlatCAMGUI.py:1119 +#: FlatCAMApp.py:10462 flatcamGUI/FlatCAMGUI.py:1119 #: flatcamGUI/FlatCAMGUI.py:2161 msgid "Project" msgstr "Projet" -#: FlatCAMApp.py:10507 +#: FlatCAMApp.py:10501 msgid "FlatCAM objects print" msgstr "Impression d'objets FlatCAM" -#: FlatCAMApp.py:10520 FlatCAMApp.py:10527 +#: FlatCAMApp.py:10514 FlatCAMApp.py:10521 msgid "Save Object as PDF ..." msgstr "Enregistrer l'objet au format PDF ...Enregistrer le projet sous ..." -#: FlatCAMApp.py:10536 +#: FlatCAMApp.py:10530 msgid "Printing PDF ... Please wait." msgstr "Impression du PDF ... Veuillez patienter." -#: FlatCAMApp.py:10715 +#: FlatCAMApp.py:10709 msgid "PDF file saved to" msgstr "Fichier PDF enregistré dans" -#: FlatCAMApp.py:10740 +#: FlatCAMApp.py:10734 msgid "Exporting SVG" msgstr "Exporter du SVG" -#: FlatCAMApp.py:10783 +#: FlatCAMApp.py:10777 msgid "SVG file exported to" msgstr "Fichier SVG exporté vers" -#: FlatCAMApp.py:10809 +#: FlatCAMApp.py:10803 msgid "" "Save cancelled because source file is empty. Try to export the Gerber file." msgstr "" "Enregistrement annulé car le fichier source est vide. Essayez d'exporter le " "fichier Gerber." -#: FlatCAMApp.py:10957 +#: FlatCAMApp.py:10950 msgid "Excellon file exported to" msgstr "Fichier Excellon exporté vers" -#: FlatCAMApp.py:10966 +#: FlatCAMApp.py:10959 msgid "Exporting Excellon" msgstr "Exporter Excellon" -#: FlatCAMApp.py:10971 FlatCAMApp.py:10978 +#: FlatCAMApp.py:10964 FlatCAMApp.py:10971 msgid "Could not export Excellon file." msgstr "Impossible d'exporter le fichier Excellon." -#: FlatCAMApp.py:11094 +#: FlatCAMApp.py:11086 msgid "Gerber file exported to" msgstr "Fichier Gerber exporté vers" -#: FlatCAMApp.py:11102 +#: FlatCAMApp.py:11094 msgid "Exporting Gerber" msgstr "Exporter Gerber" -#: FlatCAMApp.py:11107 FlatCAMApp.py:11114 +#: FlatCAMApp.py:11099 FlatCAMApp.py:11106 msgid "Could not export Gerber file." msgstr "Impossible d'exporter le fichier Gerber." -#: FlatCAMApp.py:11149 +#: FlatCAMApp.py:11141 msgid "DXF file exported to" msgstr "Fichier DXF exporté vers" -#: FlatCAMApp.py:11155 +#: FlatCAMApp.py:11147 msgid "Exporting DXF" msgstr "Exportation DXF" -#: FlatCAMApp.py:11160 FlatCAMApp.py:11167 +#: FlatCAMApp.py:11152 FlatCAMApp.py:11159 msgid "Could not export DXF file." msgstr "Impossible d'exporter le fichier DXF." -#: FlatCAMApp.py:11190 FlatCAMApp.py:11232 flatcamTools/ToolImage.py:277 +#: FlatCAMApp.py:11182 FlatCAMApp.py:11224 flatcamTools/ToolImage.py:277 msgid "" "Not supported type is picked as parameter. Only Geometry and Gerber are " "supported" @@ -1288,81 +1286,81 @@ msgstr "" "Le type non pris en charge est sélectionné en tant que paramètre. Seuls " "Geometry et Gerber sont supportés" -#: FlatCAMApp.py:11200 +#: FlatCAMApp.py:11192 msgid "Importing SVG" msgstr "Importer du SVG" -#: FlatCAMApp.py:11211 FlatCAMApp.py:11251 FlatCAMApp.py:11309 -#: FlatCAMApp.py:11374 FlatCAMApp.py:11438 FlatCAMApp.py:11503 -#: FlatCAMApp.py:11540 flatcamTools/ToolImage.py:297 +#: FlatCAMApp.py:11203 FlatCAMApp.py:11243 FlatCAMApp.py:11301 +#: FlatCAMApp.py:11366 FlatCAMApp.py:11430 FlatCAMApp.py:11495 +#: FlatCAMApp.py:11532 flatcamTools/ToolImage.py:297 #: flatcamTools/ToolPDF.py:225 msgid "Opened" msgstr "Ouvert" -#: FlatCAMApp.py:11241 +#: FlatCAMApp.py:11233 msgid "Importing DXF" msgstr "Importation de DXF" -#: FlatCAMApp.py:11275 FlatCAMApp.py:11462 +#: FlatCAMApp.py:11267 FlatCAMApp.py:11454 msgid "Failed to open file" msgstr "Échec de l'ouverture du fichier" -#: FlatCAMApp.py:11278 FlatCAMApp.py:11465 +#: FlatCAMApp.py:11270 FlatCAMApp.py:11457 msgid "Failed to parse file" msgstr "Échec de l'analyse du fichier" -#: FlatCAMApp.py:11290 +#: FlatCAMApp.py:11282 msgid "Object is not Gerber file or empty. Aborting object creation." msgstr "" "L'objet n'est pas un fichier Gerber ou vide. Abandon de la création d'objet." -#: FlatCAMApp.py:11295 +#: FlatCAMApp.py:11287 msgid "Opening Gerber" msgstr "Ouverture Gerber" -#: FlatCAMApp.py:11302 +#: FlatCAMApp.py:11294 msgid " Open Gerber failed. Probable not a Gerber file." msgstr " Open Gerber a échoué. Probablement pas un fichier Gerber." -#: FlatCAMApp.py:11333 flatcamTools/ToolPcbWizard.py:425 +#: FlatCAMApp.py:11325 flatcamTools/ToolPcbWizard.py:425 msgid "This is not Excellon file." msgstr "Ce n'est pas un fichier Excellon." -#: FlatCAMApp.py:11337 +#: FlatCAMApp.py:11329 msgid "Cannot open file" msgstr "Ne peut pas ouvrir le fichier" -#: FlatCAMApp.py:11356 flatcamTools/ToolPDF.py:275 +#: FlatCAMApp.py:11348 flatcamTools/ToolPDF.py:275 #: flatcamTools/ToolPcbWizard.py:447 msgid "No geometry found in file" msgstr "Aucune géométrie trouvée dans le fichier" -#: FlatCAMApp.py:11359 +#: FlatCAMApp.py:11351 msgid "Opening Excellon." msgstr "Ouverture Excellon." -#: FlatCAMApp.py:11366 +#: FlatCAMApp.py:11358 msgid "Open Excellon file failed. Probable not an Excellon file." msgstr "" "Le fichier Open Excellon a échoué. Probablement pas un fichier Excellon." -#: FlatCAMApp.py:11398 +#: FlatCAMApp.py:11390 msgid "Reading GCode file" msgstr "Lecture du fichier GCode" -#: FlatCAMApp.py:11405 +#: FlatCAMApp.py:11397 msgid "Failed to open" msgstr "Impossible d'ouvrir" -#: FlatCAMApp.py:11413 +#: FlatCAMApp.py:11405 msgid "This is not GCODE" msgstr "Ce n'est pas GCODE" -#: FlatCAMApp.py:11418 +#: FlatCAMApp.py:11410 msgid "Opening G-Code." msgstr "Ouverture G-Code." -#: FlatCAMApp.py:11427 +#: FlatCAMApp.py:11419 msgid "" "Failed to create CNCJob Object. Probable not a GCode file. Try to load it " "from File menu.\n" @@ -1374,104 +1372,104 @@ msgstr "" "La tentative de création d'un objet FlatCAM CNCJob à partir d'un fichier G-" "Code a échoué pendant le traitement" -#: FlatCAMApp.py:11484 +#: FlatCAMApp.py:11476 msgid "Object is not HPGL2 file or empty. Aborting object creation." msgstr "" "L'objet n'est pas un fichier HPGL2 ou vide. Abandon de la création d'objet." -#: FlatCAMApp.py:11489 +#: FlatCAMApp.py:11481 msgid "Opening HPGL2" msgstr "Ouverture HPGL2" -#: FlatCAMApp.py:11496 +#: FlatCAMApp.py:11488 msgid " Open HPGL2 failed. Probable not a HPGL2 file." msgstr " Open HPGL2 a échoué. Probablement pas un fichier HPGL2 ." -#: FlatCAMApp.py:11516 +#: FlatCAMApp.py:11508 msgid "Opening TCL Script..." msgstr "Ouverture du script TCL ..." -#: FlatCAMApp.py:11524 +#: FlatCAMApp.py:11516 msgid "TCL script file opened in Code Editor." msgstr "Fichier de script TCL ouvert dans l'éditeur de code." -#: FlatCAMApp.py:11527 +#: FlatCAMApp.py:11519 msgid "Failed to open TCL Script." msgstr "Impossible d'ouvrir le script TCL." -#: FlatCAMApp.py:11555 +#: FlatCAMApp.py:11547 msgid "Opening FlatCAM Config file." msgstr "Ouverture du fichier FlatCAM Config." -#: FlatCAMApp.py:11583 +#: FlatCAMApp.py:11575 msgid "Failed to open config file" msgstr "Impossible d'ouvrir le fichier de configuration" -#: FlatCAMApp.py:11611 +#: FlatCAMApp.py:11603 msgid "Loading Project ... Please Wait ..." msgstr "Chargement du projet ... Veuillez patienter ..." -#: FlatCAMApp.py:11616 +#: FlatCAMApp.py:11608 msgid "Opening FlatCAM Project file." msgstr "Ouverture du fichier de projet FlatCAM." -#: FlatCAMApp.py:11626 FlatCAMApp.py:11644 +#: FlatCAMApp.py:11618 FlatCAMApp.py:11636 msgid "Failed to open project file" msgstr "Impossible d'ouvrir le fichier de projet" -#: FlatCAMApp.py:11681 +#: FlatCAMApp.py:11673 msgid "Loading Project ... restoring" msgstr "Chargement du projet ... en cours de restauration" -#: FlatCAMApp.py:11691 +#: FlatCAMApp.py:11683 msgid "Project loaded from" msgstr "Projet chargé à partir de" -#: FlatCAMApp.py:11760 +#: FlatCAMApp.py:11752 msgid "Redrawing all objects" msgstr "Redessiner tous les objets" -#: FlatCAMApp.py:11849 +#: FlatCAMApp.py:11840 msgid "Failed to load recent item list." msgstr "Échec du chargement de la liste des éléments récents." -#: FlatCAMApp.py:11856 +#: FlatCAMApp.py:11847 msgid "Failed to parse recent item list." msgstr "Échec de l'analyse de la liste des éléments récents." -#: FlatCAMApp.py:11866 +#: FlatCAMApp.py:11857 msgid "Failed to load recent projects item list." msgstr "Échec du chargement de la liste d'éléments des projets récents." -#: FlatCAMApp.py:11873 +#: FlatCAMApp.py:11864 msgid "Failed to parse recent project item list." msgstr "Échec de l'analyse de la liste des éléments de projet récents." -#: FlatCAMApp.py:11934 +#: FlatCAMApp.py:11925 msgid "Clear Recent projects" msgstr "Effacer les projets récents" -#: FlatCAMApp.py:11958 +#: FlatCAMApp.py:11949 msgid "Clear Recent files" msgstr "Effacer les fichiers récents" -#: FlatCAMApp.py:11980 flatcamGUI/FlatCAMGUI.py:1348 +#: FlatCAMApp.py:11971 flatcamGUI/FlatCAMGUI.py:1348 msgid "Shortcut Key List" msgstr "Liste des touches de raccourci" -#: FlatCAMApp.py:12054 +#: FlatCAMApp.py:12051 msgid "Selected Tab - Choose an Item from Project Tab" msgstr "Onglet sélectionné - Choisissez un élément dans l'onglet Projet" -#: FlatCAMApp.py:12055 +#: FlatCAMApp.py:12052 msgid "Details" msgstr "Détails" -#: FlatCAMApp.py:12057 +#: FlatCAMApp.py:12054 msgid "The normal flow when working in FlatCAM is the following:" msgstr "Le flux normal lorsque vous travaillez dans FlatCAM est le suivant:" -#: FlatCAMApp.py:12058 +#: FlatCAMApp.py:12055 msgid "" "Load/Import a Gerber, Excellon, Gcode, DXF, Raster Image or SVG file into " "FlatCAM using either the toolbars, key shortcuts or even dragging and " @@ -1481,7 +1479,7 @@ msgstr "" "SVG dans FlatCAM à l'aide des barres d'outils, des raccourcis clavier ou " "même en glissant-déposant les fichiers sur l'interface graphique." -#: FlatCAMApp.py:12061 +#: FlatCAMApp.py:12058 msgid "" "You can also load a FlatCAM project by double clicking on the project file, " "drag and drop of the file into the FLATCAM GUI or through the menu (or " @@ -1492,7 +1490,7 @@ msgstr "" "FLATCAM ou par le biais du menu (ou de la barre d’outils) proposé dans " "l’application." -#: FlatCAMApp.py:12064 +#: FlatCAMApp.py:12061 msgid "" "Once an object is available in the Project Tab, by selecting it and then " "focusing on SELECTED TAB (more simpler is to double click the object name in " @@ -1505,7 +1503,7 @@ msgstr "" "TAB sera mis à jour avec les propriétés de l'objet en fonction de son type: " "Gerber, Excellon, géométrie ou objet CNCJob." -#: FlatCAMApp.py:12068 +#: FlatCAMApp.py:12065 msgid "" "If the selection of the object is done on the canvas by single click " "instead, and the SELECTED TAB is in focus, again the object properties will " @@ -1519,7 +1517,7 @@ msgstr "" "l'objet sur la toile pour amener l'onglet sélectionné et le renseigner même " "s'il n'était pas net." -#: FlatCAMApp.py:12072 +#: FlatCAMApp.py:12069 msgid "" "You can change the parameters in this screen and the flow direction is like " "this:" @@ -1527,7 +1525,7 @@ msgstr "" "Vous pouvez modifier les paramètres dans cet écran et le sens du flux est le " "suivant:" -#: FlatCAMApp.py:12073 +#: FlatCAMApp.py:12070 msgid "" "Gerber/Excellon Object --> Change Parameter --> Generate Geometry --> " "Geometry Object --> Add tools (change param in Selected Tab) --> Generate " @@ -1540,7 +1538,7 @@ msgstr "" "Vérifier le GCode (via Edition CNC Code) et / ou ajouter / ajouter au code " "GCode (à nouveau dans l’onglet SÉLECTIONNÉ) -> Enregistrer le code GC." -#: FlatCAMApp.py:12077 +#: FlatCAMApp.py:12074 msgid "" "A list of key shortcuts is available through an menu entry in Help --> " "Shortcuts List or through its own key shortcut: F3." @@ -1548,32 +1546,32 @@ msgstr "" "Une liste des raccourcis clavier est disponible via une entrée de menu dans " "Aide -> Liste des raccourcis ou via son propre raccourci clavier: F3." -#: FlatCAMApp.py:12141 +#: FlatCAMApp.py:12138 msgid "Failed checking for latest version. Could not connect." msgstr "" "Échec de la vérification de la dernière version. N'a pas pu se connecter." -#: FlatCAMApp.py:12148 +#: FlatCAMApp.py:12145 msgid "Could not parse information about latest version." msgstr "Impossible d'analyser les informations sur la dernière version." -#: FlatCAMApp.py:12158 +#: FlatCAMApp.py:12155 msgid "FlatCAM is up to date!" msgstr "FlatCAM est à jour!" -#: FlatCAMApp.py:12163 +#: FlatCAMApp.py:12160 msgid "Newer Version Available" msgstr "Nouvelle version disponible" -#: FlatCAMApp.py:12165 +#: FlatCAMApp.py:12162 msgid "There is a newer version of FlatCAM available for download:" msgstr "Une version plus récente de FlatCAM est disponible au téléchargement:" -#: FlatCAMApp.py:12169 +#: FlatCAMApp.py:12166 msgid "info" msgstr "info" -#: FlatCAMApp.py:12197 +#: FlatCAMApp.py:12194 msgid "" "OpenGL canvas initialization failed. HW or HW configuration not supported." "Change the graphic engine to Legacy(2D) in Edit -> Preferences -> General " @@ -1585,131 +1583,127 @@ msgstr "" "(2D) dans Edition -> Préférences -> onglet Général.\n" "\n" -#: FlatCAMApp.py:12276 +#: FlatCAMApp.py:12273 msgid "All plots disabled." msgstr "Toutes les parcelles désactivées." -#: FlatCAMApp.py:12283 +#: FlatCAMApp.py:12280 msgid "All non selected plots disabled." msgstr "Toutes les parcelles non sélectionnées sont désactivées." -#: FlatCAMApp.py:12290 +#: FlatCAMApp.py:12287 msgid "All plots enabled." msgstr "Toutes les parcelles activées." -#: FlatCAMApp.py:12296 +#: FlatCAMApp.py:12293 msgid "Selected plots enabled..." msgstr "Parcelles sélectionnées activées ..." -#: FlatCAMApp.py:12304 +#: FlatCAMApp.py:12301 msgid "Selected plots disabled..." msgstr "Parcelles sélectionnées désactivées ..." -#: FlatCAMApp.py:12337 +#: FlatCAMApp.py:12334 msgid "Enabling plots ..." msgstr "Activation des parcelles ..." -#: FlatCAMApp.py:12389 +#: FlatCAMApp.py:12386 msgid "Disabling plots ..." msgstr "Désactiver les parcelles ..." -#: FlatCAMApp.py:12412 +#: FlatCAMApp.py:12409 msgid "Working ..." msgstr "Travail ..." -#: FlatCAMApp.py:12467 flatcamGUI/FlatCAMGUI.py:688 +#: FlatCAMApp.py:12464 flatcamGUI/FlatCAMGUI.py:688 msgid "Red" msgstr "Rouge" -#: FlatCAMApp.py:12469 flatcamGUI/FlatCAMGUI.py:691 +#: FlatCAMApp.py:12466 flatcamGUI/FlatCAMGUI.py:691 msgid "Blue" msgstr "Bleu" -#: FlatCAMApp.py:12472 flatcamGUI/FlatCAMGUI.py:694 +#: FlatCAMApp.py:12469 flatcamGUI/FlatCAMGUI.py:694 msgid "Yellow" msgstr "Jaune" -#: FlatCAMApp.py:12474 flatcamGUI/FlatCAMGUI.py:697 +#: FlatCAMApp.py:12471 flatcamGUI/FlatCAMGUI.py:697 msgid "Green" msgstr "Vert" -#: FlatCAMApp.py:12476 flatcamGUI/FlatCAMGUI.py:700 +#: FlatCAMApp.py:12473 flatcamGUI/FlatCAMGUI.py:700 msgid "Purple" msgstr "Violet" -#: FlatCAMApp.py:12478 flatcamGUI/FlatCAMGUI.py:703 +#: FlatCAMApp.py:12475 flatcamGUI/FlatCAMGUI.py:703 msgid "Brown" msgstr "Marron" -#: FlatCAMApp.py:12480 FlatCAMApp.py:12536 flatcamGUI/FlatCAMGUI.py:706 +#: FlatCAMApp.py:12477 FlatCAMApp.py:12533 flatcamGUI/FlatCAMGUI.py:706 msgid "White" msgstr "Blanche" -#: FlatCAMApp.py:12482 flatcamGUI/FlatCAMGUI.py:709 +#: FlatCAMApp.py:12479 flatcamGUI/FlatCAMGUI.py:709 msgid "Black" msgstr "Noire" -#: FlatCAMApp.py:12485 flatcamGUI/FlatCAMGUI.py:714 +#: FlatCAMApp.py:12482 flatcamGUI/FlatCAMGUI.py:714 msgid "Custom" msgstr "Personnalisé" -#: FlatCAMApp.py:12495 flatcamGUI/FlatCAMGUI.py:722 +#: FlatCAMApp.py:12492 flatcamGUI/FlatCAMGUI.py:722 msgid "Default" msgstr "Défaut" -#: FlatCAMApp.py:12519 flatcamGUI/FlatCAMGUI.py:719 +#: FlatCAMApp.py:12516 flatcamGUI/FlatCAMGUI.py:719 msgid "Opacity" msgstr "Opacité" -#: FlatCAMApp.py:12521 +#: FlatCAMApp.py:12518 msgid "Set alpha level ..." msgstr "Définir le niveau alpha ..." -#: FlatCAMApp.py:12521 flatcamGUI/PreferencesUI.py:6900 +#: FlatCAMApp.py:12518 flatcamGUI/PreferencesUI.py:6900 #: flatcamGUI/PreferencesUI.py:8230 flatcamGUI/PreferencesUI.py:8444 #: flatcamTools/ToolExtractDrills.py:164 flatcamTools/ToolExtractDrills.py:285 #: flatcamTools/ToolPunchGerber.py:192 flatcamTools/ToolPunchGerber.py:308 -#: flatcamTools/ToolTransform.py:358 +#: flatcamTools/ToolTransform.py:357 msgid "Value" msgstr "Valeur" -#: FlatCAMApp.py:12597 +#: FlatCAMApp.py:12594 msgid "Saving FlatCAM Project" msgstr "Enregistrement du projet FlatCAM" -#: FlatCAMApp.py:12618 FlatCAMApp.py:12654 +#: FlatCAMApp.py:12615 FlatCAMApp.py:12651 msgid "Project saved to" msgstr "Projet enregistré dans" -#: FlatCAMApp.py:12625 +#: FlatCAMApp.py:12622 msgid "The object is used by another application." msgstr "L'objet est utilisé par une autre application." -#: FlatCAMApp.py:12639 +#: FlatCAMApp.py:12636 msgid "Failed to verify project file" msgstr "Échec de la vérification du fichier de projet" -#: FlatCAMApp.py:12639 FlatCAMApp.py:12647 FlatCAMApp.py:12657 +#: FlatCAMApp.py:12636 FlatCAMApp.py:12644 FlatCAMApp.py:12654 msgid "Retry to save it." msgstr "Réessayez de le sauvegarder." -#: FlatCAMApp.py:12647 FlatCAMApp.py:12657 +#: FlatCAMApp.py:12644 FlatCAMApp.py:12654 msgid "Failed to parse saved project file" msgstr "Échec de l'analyse du fichier de projet enregistré" -#: FlatCAMApp.py:13139 -msgid "The user requested a graceful exit of the current task." -msgstr "L'utilisateur a demandé une sortie en douceur de la tâche en cours." - -#: FlatCAMCommon.py:137 FlatCAMCommon.py:164 +#: FlatCAMBookmark.py:57 FlatCAMBookmark.py:84 msgid "Title" msgstr "Titre" -#: FlatCAMCommon.py:138 FlatCAMCommon.py:168 +#: FlatCAMBookmark.py:58 FlatCAMBookmark.py:88 msgid "Web Link" msgstr "Lien Web" -#: FlatCAMCommon.py:142 +#: FlatCAMBookmark.py:62 msgid "" "Index.\n" "The rows in gray color will populate the Bookmarks menu.\n" @@ -1719,7 +1713,7 @@ msgstr "" "Les lignes de couleur grise rempliront le menu Favoris.\n" "Le nombre de lignes de couleur grises est défini dans Préférences." -#: FlatCAMCommon.py:146 +#: FlatCAMBookmark.py:66 msgid "" "Description of the link that is set as an menu action.\n" "Try to keep it short because it is installed as a menu item." @@ -1727,87 +1721,91 @@ msgstr "" "Description du lien défini en tant qu'action de menu.\n" "Essayez de rester bref car il est installé en tant qu'élément de menu." -#: FlatCAMCommon.py:149 +#: FlatCAMBookmark.py:69 msgid "Web Link. E.g: https://your_website.org " msgstr "Lien Web. Par exemple: https://your_website.org " -#: FlatCAMCommon.py:158 +#: FlatCAMBookmark.py:78 msgid "New Bookmark" msgstr "Nouveau Favori" -#: FlatCAMCommon.py:177 +#: FlatCAMBookmark.py:97 msgid "Add Entry" msgstr "Ajouter une entrée" -#: FlatCAMCommon.py:178 +#: FlatCAMBookmark.py:98 msgid "Remove Entry" msgstr "Supprimer l'entrée" -#: FlatCAMCommon.py:179 +#: FlatCAMBookmark.py:99 msgid "Export List" msgstr "Exporter la liste" -#: FlatCAMCommon.py:180 +#: FlatCAMBookmark.py:100 msgid "Import List" msgstr "Importer la liste" -#: FlatCAMCommon.py:261 +#: FlatCAMBookmark.py:181 msgid "Title entry is empty." msgstr "L'entrée de titre est vide." -#: FlatCAMCommon.py:270 +#: FlatCAMBookmark.py:190 msgid "Web link entry is empty." msgstr "L'entrée du lien Web est vide." -#: FlatCAMCommon.py:278 +#: FlatCAMBookmark.py:198 msgid "Either the Title or the Weblink already in the table." msgstr "Soit le titre ou le lien Web déjà dans le tableau." -#: FlatCAMCommon.py:298 +#: FlatCAMBookmark.py:218 msgid "Bookmark added." msgstr "Signet ajouté." -#: FlatCAMCommon.py:315 +#: FlatCAMBookmark.py:235 msgid "This bookmark can not be removed" msgstr "Ce marque-page ne peut être supprimé" -#: FlatCAMCommon.py:346 +#: FlatCAMBookmark.py:266 msgid "Bookmark removed." msgstr "Signet supprimé." -#: FlatCAMCommon.py:361 +#: FlatCAMBookmark.py:281 msgid "Export FlatCAM Bookmarks" msgstr "Exporter les signets FlatCAM" -#: FlatCAMCommon.py:364 flatcamGUI/FlatCAMGUI.py:509 +#: FlatCAMBookmark.py:284 flatcamGUI/FlatCAMGUI.py:509 msgid "Bookmarks" msgstr "Favoris" -#: FlatCAMCommon.py:390 FlatCAMCommon.py:420 +#: FlatCAMBookmark.py:310 FlatCAMBookmark.py:340 msgid "Could not load bookmarks file." msgstr "Impossible de charger le fichier de favoris." -#: FlatCAMCommon.py:400 +#: FlatCAMBookmark.py:320 msgid "Failed to write bookmarks to file." msgstr "Échec de l'écriture des favoris dans le fichier." -#: FlatCAMCommon.py:402 +#: FlatCAMBookmark.py:322 msgid "Exported bookmarks to" msgstr "Favoris exportés vers" -#: FlatCAMCommon.py:408 +#: FlatCAMBookmark.py:328 msgid "Import FlatCAM Bookmarks" msgstr "Importer des favoris FlatCAM" -#: FlatCAMCommon.py:427 +#: FlatCAMBookmark.py:347 msgid "Imported Bookmarks from" msgstr "Favoris importés de" -#: FlatCAMCommon.py:530 +#: FlatCAMCommon.py:29 +msgid "The user requested a graceful exit of the current task." +msgstr "L'utilisateur a demandé une sortie en douceur de la tâche en cours." + +#: FlatCAMDB.py:86 msgid "Add Geometry Tool in DB" msgstr "Ajouter un outil de géométrie dans la BD" -#: FlatCAMCommon.py:532 FlatCAMCommon.py:2087 +#: FlatCAMDB.py:88 FlatCAMDB.py:1643 msgid "" "Add a new tool in the Tools Database.\n" "It will be used in the Geometry UI.\n" @@ -1817,38 +1815,38 @@ msgstr "" "Il sera utilisé dans l'interface utilisateur de géométrie.\n" "Vous pouvez le modifier après l'avoir ajouté." -#: FlatCAMCommon.py:546 FlatCAMCommon.py:2101 +#: FlatCAMDB.py:102 FlatCAMDB.py:1657 msgid "Delete Tool from DB" msgstr "Supprimer l'outil de la BD" -#: FlatCAMCommon.py:548 FlatCAMCommon.py:2103 +#: FlatCAMDB.py:104 FlatCAMDB.py:1659 msgid "Remove a selection of tools in the Tools Database." msgstr "Supprimez une sélection d'outils dans la base de données d'outils." -#: FlatCAMCommon.py:552 FlatCAMCommon.py:2107 +#: FlatCAMDB.py:108 FlatCAMDB.py:1663 msgid "Export DB" msgstr "Exporter la BD" -#: FlatCAMCommon.py:554 FlatCAMCommon.py:2109 +#: FlatCAMDB.py:110 FlatCAMDB.py:1665 msgid "Save the Tools Database to a custom text file." msgstr "" "Enregistrez la base de données d'outils dans un fichier texte personnalisé." -#: FlatCAMCommon.py:558 FlatCAMCommon.py:2113 +#: FlatCAMDB.py:114 FlatCAMDB.py:1669 msgid "Import DB" msgstr "Importer une BD" -#: FlatCAMCommon.py:560 FlatCAMCommon.py:2115 +#: FlatCAMDB.py:116 FlatCAMDB.py:1671 msgid "Load the Tools Database information's from a custom text file." msgstr "" "Chargez les informations de la base de données d'outils à partir d'un " "fichier texte personnalisé." -#: FlatCAMCommon.py:564 FlatCAMCommon.py:2119 +#: FlatCAMDB.py:120 FlatCAMDB.py:1675 msgid "Add Tool from Tools DB" msgstr "Ajouter un outil à partir de la base de données d'outils" -#: FlatCAMCommon.py:566 FlatCAMCommon.py:2121 +#: FlatCAMDB.py:122 FlatCAMDB.py:1677 msgid "" "Add a new tool in the Tools Table of the\n" "active Geometry object after selecting a tool\n" @@ -1858,28 +1856,28 @@ msgstr "" "objet Geometry actif après avoir sélectionné un outil\n" "dans la base de données des outils." -#: FlatCAMCommon.py:602 FlatCAMCommon.py:1277 FlatCAMCommon.py:1531 +#: FlatCAMDB.py:158 FlatCAMDB.py:833 FlatCAMDB.py:1087 msgid "Tool Name" msgstr "Nom de l'outil" -#: FlatCAMCommon.py:603 FlatCAMCommon.py:1279 FlatCAMCommon.py:1544 -#: flatcamEditors/FlatCAMExcEditor.py:1605 flatcamGUI/ObjectUI.py:1343 -#: flatcamGUI/ObjectUI.py:1581 flatcamGUI/PreferencesUI.py:5971 +#: FlatCAMDB.py:159 FlatCAMDB.py:835 FlatCAMDB.py:1100 +#: flatcamEditors/FlatCAMExcEditor.py:1604 flatcamGUI/ObjectUI.py:1344 +#: flatcamGUI/ObjectUI.py:1582 flatcamGUI/PreferencesUI.py:5971 #: flatcamTools/ToolNCC.py:278 flatcamTools/ToolNCC.py:287 #: flatcamTools/ToolPaint.py:261 msgid "Tool Dia" msgstr "Dia. de l'outil" -#: FlatCAMCommon.py:604 FlatCAMCommon.py:1281 FlatCAMCommon.py:1725 -#: flatcamGUI/ObjectUI.py:1556 +#: FlatCAMDB.py:160 FlatCAMDB.py:837 FlatCAMDB.py:1281 +#: flatcamGUI/ObjectUI.py:1557 msgid "Tool Offset" msgstr "Décalage d'outil" -#: FlatCAMCommon.py:605 FlatCAMCommon.py:1283 FlatCAMCommon.py:1742 +#: FlatCAMDB.py:161 FlatCAMDB.py:839 FlatCAMDB.py:1298 msgid "Custom Offset" msgstr "Décalage personnalisé" -#: FlatCAMCommon.py:606 FlatCAMCommon.py:1285 FlatCAMCommon.py:1709 +#: FlatCAMDB.py:162 FlatCAMDB.py:841 FlatCAMDB.py:1265 #: flatcamGUI/ObjectUI.py:308 flatcamGUI/PreferencesUI.py:2397 #: flatcamGUI/PreferencesUI.py:5332 flatcamGUI/PreferencesUI.py:5901 #: flatcamGUI/PreferencesUI.py:5911 flatcamTools/ToolNCC.py:213 @@ -1887,115 +1885,115 @@ msgstr "Décalage personnalisé" msgid "Tool Type" msgstr "Type d'outil" -#: FlatCAMCommon.py:607 FlatCAMCommon.py:1287 FlatCAMCommon.py:1557 +#: FlatCAMDB.py:163 FlatCAMDB.py:843 FlatCAMDB.py:1113 msgid "Tool Shape" msgstr "Forme d'outil" -#: FlatCAMCommon.py:608 FlatCAMCommon.py:1290 FlatCAMCommon.py:1573 +#: FlatCAMDB.py:164 FlatCAMDB.py:846 FlatCAMDB.py:1129 #: flatcamGUI/ObjectUI.py:349 flatcamGUI/ObjectUI.py:899 -#: flatcamGUI/ObjectUI.py:1701 flatcamGUI/ObjectUI.py:2254 +#: flatcamGUI/ObjectUI.py:1702 flatcamGUI/ObjectUI.py:2255 #: flatcamGUI/PreferencesUI.py:2437 flatcamGUI/PreferencesUI.py:3311 #: flatcamGUI/PreferencesUI.py:4241 flatcamGUI/PreferencesUI.py:5377 #: flatcamGUI/PreferencesUI.py:5666 flatcamGUI/PreferencesUI.py:5944 #: flatcamGUI/PreferencesUI.py:5952 flatcamGUI/PreferencesUI.py:6635 -#: flatcamTools/ToolCalculators.py:114 flatcamTools/ToolCutOut.py:139 +#: flatcamTools/ToolCalculators.py:114 flatcamTools/ToolCutOut.py:138 #: flatcamTools/ToolNCC.py:260 flatcamTools/ToolNCC.py:268 #: flatcamTools/ToolPaint.py:243 msgid "Cut Z" msgstr "Couper Z" -#: FlatCAMCommon.py:609 FlatCAMCommon.py:1292 FlatCAMCommon.py:1587 +#: FlatCAMDB.py:165 FlatCAMDB.py:848 FlatCAMDB.py:1143 msgid "MultiDepth" msgstr "Multi-profondeur" -#: FlatCAMCommon.py:610 FlatCAMCommon.py:1294 FlatCAMCommon.py:1600 +#: FlatCAMDB.py:166 FlatCAMDB.py:850 FlatCAMDB.py:1156 msgid "DPP" msgstr "DPP" -#: FlatCAMCommon.py:611 FlatCAMCommon.py:1296 FlatCAMCommon.py:1756 +#: FlatCAMDB.py:167 FlatCAMDB.py:852 FlatCAMDB.py:1312 msgid "V-Dia" msgstr "Dia. en V" -#: FlatCAMCommon.py:612 FlatCAMCommon.py:1298 FlatCAMCommon.py:1770 +#: FlatCAMDB.py:168 FlatCAMDB.py:854 FlatCAMDB.py:1326 msgid "V-Angle" msgstr "Angle en V" -#: FlatCAMCommon.py:613 FlatCAMCommon.py:1300 FlatCAMCommon.py:1614 -#: FlatCAMObj.py:3661 FlatCAMObj.py:5486 flatcamGUI/ObjectUI.py:945 -#: flatcamGUI/ObjectUI.py:1748 flatcamGUI/PreferencesUI.py:3352 -#: flatcamGUI/PreferencesUI.py:4294 flatcamGUI/PreferencesUI.py:8041 -#: flatcamTools/ToolCalibration.py:74 +#: FlatCAMDB.py:169 FlatCAMDB.py:856 FlatCAMDB.py:1170 +#: flatcamGUI/ObjectUI.py:945 flatcamGUI/ObjectUI.py:1749 +#: flatcamGUI/PreferencesUI.py:3352 flatcamGUI/PreferencesUI.py:4294 +#: flatcamGUI/PreferencesUI.py:8041 flatcamObjects/FlatCAMExcellon.py:1316 +#: flatcamObjects/FlatCAMGeometry.py:1552 flatcamTools/ToolCalibration.py:74 msgid "Travel Z" msgstr "Voyage Z" -#: FlatCAMCommon.py:614 FlatCAMCommon.py:1302 +#: FlatCAMDB.py:170 FlatCAMDB.py:858 msgid "FR" msgstr "Avance" -#: FlatCAMCommon.py:615 FlatCAMCommon.py:1304 +#: FlatCAMDB.py:171 FlatCAMDB.py:860 msgid "FR Z" msgstr "Avance Z" -#: FlatCAMCommon.py:616 FlatCAMCommon.py:1306 FlatCAMCommon.py:1784 +#: FlatCAMDB.py:172 FlatCAMDB.py:862 FlatCAMDB.py:1340 msgid "FR Rapids" msgstr "Avance Rapides" -#: FlatCAMCommon.py:617 FlatCAMCommon.py:1308 FlatCAMCommon.py:1657 +#: FlatCAMDB.py:173 FlatCAMDB.py:864 FlatCAMDB.py:1213 #: flatcamGUI/PreferencesUI.py:3440 msgid "Spindle Speed" msgstr "Vitesse de broche" -#: FlatCAMCommon.py:618 FlatCAMCommon.py:1310 FlatCAMCommon.py:1672 -#: flatcamGUI/ObjectUI.py:1063 flatcamGUI/ObjectUI.py:1855 +#: FlatCAMDB.py:174 FlatCAMDB.py:866 FlatCAMDB.py:1228 +#: flatcamGUI/ObjectUI.py:1063 flatcamGUI/ObjectUI.py:1856 msgid "Dwell" msgstr "Habiter" -#: FlatCAMCommon.py:619 FlatCAMCommon.py:1312 FlatCAMCommon.py:1685 +#: FlatCAMDB.py:175 FlatCAMDB.py:868 FlatCAMDB.py:1241 msgid "Dwelltime" msgstr "Temps d'attente" -#: FlatCAMCommon.py:620 FlatCAMCommon.py:1314 flatcamGUI/ObjectUI.py:2012 +#: FlatCAMDB.py:176 FlatCAMDB.py:870 flatcamGUI/ObjectUI.py:2013 #: flatcamGUI/PreferencesUI.py:3475 flatcamGUI/PreferencesUI.py:4447 -#: flatcamGUI/PreferencesUI.py:7148 flatcamTools/ToolSolderPaste.py:336 +#: flatcamGUI/PreferencesUI.py:7148 flatcamTools/ToolSolderPaste.py:335 msgid "Preprocessor" msgstr "Post-processeur" -#: FlatCAMCommon.py:621 FlatCAMCommon.py:1316 FlatCAMCommon.py:1800 +#: FlatCAMDB.py:177 FlatCAMDB.py:872 FlatCAMDB.py:1356 msgid "ExtraCut" msgstr "Coupe supp." -#: FlatCAMCommon.py:622 FlatCAMCommon.py:1318 FlatCAMCommon.py:1815 +#: FlatCAMDB.py:178 FlatCAMDB.py:874 FlatCAMDB.py:1371 msgid "E-Cut Length" msgstr "L-Coupe supp." -#: FlatCAMCommon.py:623 FlatCAMCommon.py:1320 +#: FlatCAMDB.py:179 FlatCAMDB.py:876 msgid "Toolchange" msgstr "Changement d'outil" -#: FlatCAMCommon.py:624 FlatCAMCommon.py:1322 +#: FlatCAMDB.py:180 FlatCAMDB.py:878 msgid "Toolchange XY" msgstr "Changement d'outils X, Y" -#: FlatCAMCommon.py:625 FlatCAMCommon.py:1324 flatcamGUI/PreferencesUI.py:3378 +#: FlatCAMDB.py:181 FlatCAMDB.py:880 flatcamGUI/PreferencesUI.py:3378 #: flatcamGUI/PreferencesUI.py:4324 flatcamGUI/PreferencesUI.py:8078 #: flatcamTools/ToolCalibration.py:111 msgid "Toolchange Z" msgstr "Changement d'outil Z" -#: FlatCAMCommon.py:626 FlatCAMCommon.py:1326 flatcamGUI/ObjectUI.py:1192 +#: FlatCAMDB.py:182 FlatCAMDB.py:882 flatcamGUI/ObjectUI.py:1192 #: flatcamGUI/PreferencesUI.py:3586 flatcamGUI/PreferencesUI.py:4493 msgid "Start Z" msgstr "Démarrer Z" -#: FlatCAMCommon.py:627 FlatCAMCommon.py:1329 +#: FlatCAMDB.py:183 FlatCAMDB.py:885 msgid "End Z" msgstr "Fin Z" -#: FlatCAMCommon.py:631 +#: FlatCAMDB.py:187 msgid "Tool Index." msgstr "Index d'outils." -#: FlatCAMCommon.py:633 FlatCAMCommon.py:1533 +#: FlatCAMDB.py:189 FlatCAMDB.py:1089 msgid "" "Tool name.\n" "This is not used in the app, it's function\n" @@ -2005,11 +2003,11 @@ msgstr "" "Ce n'est pas utilisé dans l'application, c'est la fonction\n" "est de servir de note pour le u." -#: FlatCAMCommon.py:637 FlatCAMCommon.py:1546 +#: FlatCAMDB.py:193 FlatCAMDB.py:1102 msgid "Tool Diameter." msgstr "Diamètre de l'outil." -#: FlatCAMCommon.py:639 FlatCAMCommon.py:1727 +#: FlatCAMDB.py:195 FlatCAMDB.py:1283 msgid "" "Tool Offset.\n" "Can be of a few types:\n" @@ -2026,7 +2024,7 @@ msgstr "" "Personnalisé = décalage personnalisé à l'aide de la valeur de décalage " "personnalisé" -#: FlatCAMCommon.py:646 FlatCAMCommon.py:1744 +#: FlatCAMDB.py:202 FlatCAMDB.py:1300 msgid "" "Custom Offset.\n" "A value to be used as offset from the current path." @@ -2034,7 +2032,7 @@ msgstr "" "Décalage personnalisé.\n" "Une valeur à utiliser comme décalage par rapport au chemin actuel." -#: FlatCAMCommon.py:649 FlatCAMCommon.py:1711 +#: FlatCAMDB.py:205 FlatCAMDB.py:1267 msgid "" "Tool Type.\n" "Can be:\n" @@ -2048,7 +2046,7 @@ msgstr "" "Rugueux = coupe grossière, faible avance, passes multiples\n" "Finition = coupe de finition, avance élevée" -#: FlatCAMCommon.py:655 FlatCAMCommon.py:1559 +#: FlatCAMDB.py:211 FlatCAMDB.py:1115 msgid "" "Tool Shape. \n" "Can be:\n" @@ -2062,7 +2060,7 @@ msgstr "" "B = outil de fraisage à pointe sphérique\n" "V = outil de fraisage en forme de V" -#: FlatCAMCommon.py:661 FlatCAMCommon.py:1575 +#: FlatCAMDB.py:217 FlatCAMDB.py:1131 msgid "" "Cutting Depth.\n" "The depth at which to cut into material." @@ -2070,7 +2068,7 @@ msgstr "" "Profondeur de coupe.\n" "La profondeur à laquelle couper en matériau." -#: FlatCAMCommon.py:664 FlatCAMCommon.py:1589 +#: FlatCAMDB.py:220 FlatCAMDB.py:1145 msgid "" "Multi Depth.\n" "Selecting this will allow cutting in multiple passes,\n" @@ -2081,7 +2079,7 @@ msgstr "" "chaque passe en ajoutant une profondeur de paramètre DPP (profondeur par " "passe)." -#: FlatCAMCommon.py:668 FlatCAMCommon.py:1602 +#: FlatCAMDB.py:224 FlatCAMDB.py:1158 msgid "" "DPP. Depth per Pass.\n" "The value used to cut into material on each pass." @@ -2089,7 +2087,7 @@ msgstr "" "DPP. Profondeur par passe.\n" "La valeur utilisée pour couper le matériau à chaque passage." -#: FlatCAMCommon.py:671 FlatCAMCommon.py:1758 +#: FlatCAMDB.py:227 FlatCAMDB.py:1314 msgid "" "V-Dia.\n" "Diameter of the tip for V-Shape Tools." @@ -2097,7 +2095,7 @@ msgstr "" "Diamètre en V.\n" "Diamètre de la pointe pour les outils en forme de V." -#: FlatCAMCommon.py:674 FlatCAMCommon.py:1772 +#: FlatCAMDB.py:230 FlatCAMDB.py:1328 msgid "" "V-Agle.\n" "Angle at the tip for the V-Shape Tools." @@ -2105,7 +2103,7 @@ msgstr "" "V-Agle.\n" "Angle à la pointe pour les outils en forme de V." -#: FlatCAMCommon.py:677 FlatCAMCommon.py:1616 +#: FlatCAMDB.py:233 FlatCAMDB.py:1172 msgid "" "Clearance Height.\n" "Height at which the milling bit will travel between cuts,\n" @@ -2115,7 +2113,7 @@ msgstr "" "Hauteur à laquelle la fraise se déplacera entre les coupes,\n" "au-dessus de la surface du matériau, en évitant tous les luminaires." -#: FlatCAMCommon.py:681 +#: FlatCAMDB.py:237 msgid "" "FR. Feedrate\n" "The speed on XY plane used while cutting into material." @@ -2123,7 +2121,7 @@ msgstr "" "FR. Vitesse d'avance\n" "La vitesse sur le plan XY utilisée lors de la découpe du matériau." -#: FlatCAMCommon.py:684 +#: FlatCAMDB.py:240 msgid "" "FR Z. Feedrate Z\n" "The speed on Z plane." @@ -2131,7 +2129,7 @@ msgstr "" "FR Z. Avance Z\n" "La vitesse sur le plan Z." -#: FlatCAMCommon.py:687 FlatCAMCommon.py:1786 +#: FlatCAMDB.py:243 FlatCAMDB.py:1342 msgid "" "FR Rapids. Feedrate Rapids\n" "Speed used while moving as fast as possible.\n" @@ -2144,7 +2142,7 @@ msgstr "" "utiliser\n" "la commande G0 g-code. Principalement des imprimantes 3D." -#: FlatCAMCommon.py:692 FlatCAMCommon.py:1659 +#: FlatCAMDB.py:248 FlatCAMDB.py:1215 msgid "" "Spindle Speed.\n" "If it's left empty it will not be used.\n" @@ -2154,7 +2152,7 @@ msgstr "" "S'il est laissé vide, il ne sera pas utilisé.\n" "La vitesse du moteur en tr / min." -#: FlatCAMCommon.py:696 FlatCAMCommon.py:1674 +#: FlatCAMDB.py:252 FlatCAMDB.py:1230 msgid "" "Dwell.\n" "Check this if a delay is needed to allow\n" @@ -2164,7 +2162,7 @@ msgstr "" "Cochez cette case si un délai est nécessaire pour permettre\n" "le moteur pour atteindre sa vitesse définie." -#: FlatCAMCommon.py:700 FlatCAMCommon.py:1687 +#: FlatCAMDB.py:256 FlatCAMDB.py:1243 msgid "" "Dwell Time.\n" "A delay used to allow the motor spindle reach it's set speed." @@ -2172,7 +2170,7 @@ msgstr "" "Temps d'attente.\n" "Un délai utilisé pour permettre au moteur d'atteindre sa vitesse définie." -#: FlatCAMCommon.py:703 +#: FlatCAMDB.py:259 msgid "" "Preprocessor.\n" "A selection of files that will alter the generated G-code\n" @@ -2182,7 +2180,7 @@ msgstr "" "Une sélection de fichiers qui modifieront le G-code généré\n" "pour s'adapter à un certain nombre de cas d'utilisation." -#: FlatCAMCommon.py:707 FlatCAMCommon.py:1802 +#: FlatCAMDB.py:263 FlatCAMDB.py:1358 msgid "" "Extra Cut.\n" "If checked, after a isolation is finished an extra cut\n" @@ -2196,7 +2194,7 @@ msgstr "" "tel que ce point est couvert par cette coupe supplémentaire\n" "assurer une isolation complète." -#: FlatCAMCommon.py:713 FlatCAMCommon.py:1817 +#: FlatCAMDB.py:269 FlatCAMDB.py:1373 msgid "" "Extra Cut length.\n" "If checked, after a isolation is finished an extra cut\n" @@ -2212,7 +2210,7 @@ msgstr "" "assurer une isolation complète. C'est la longueur de\n" "la coupe supplémentaire." -#: FlatCAMCommon.py:720 +#: FlatCAMDB.py:276 msgid "" "Toolchange.\n" "It will create a toolchange event.\n" @@ -2224,7 +2222,7 @@ msgstr "" "Le type de changement d'outils est déterminé par\n" "le fichier du préprocesseur." -#: FlatCAMCommon.py:725 +#: FlatCAMDB.py:281 msgid "" "Toolchange XY.\n" "A set of coordinates in the format (x, y).\n" @@ -2236,7 +2234,7 @@ msgstr "" "Déterminera la position cartésienne du point\n" "où l'événement de changement d'outil a lieu." -#: FlatCAMCommon.py:730 +#: FlatCAMDB.py:286 msgid "" "Toolchange Z.\n" "The position on Z plane where the tool change event take place." @@ -2244,7 +2242,7 @@ msgstr "" "Changement d'outil Z.\n" "La position sur le plan Z où l'événement de changement d'outil a lieu." -#: FlatCAMCommon.py:733 +#: FlatCAMDB.py:289 msgid "" "Start Z.\n" "If it's left empty it will not be used.\n" @@ -2255,7 +2253,7 @@ msgstr "" "Une position sur le plan Z pour se déplacer immédiatement après le début du " "travail." -#: FlatCAMCommon.py:737 +#: FlatCAMDB.py:293 msgid "" "End Z.\n" "A position on Z plane to move immediately after job stop." @@ -2264,101 +2262,99 @@ msgstr "" "Une position sur le plan Z pour se déplacer immédiatement après l'arrêt du " "travail." -#: FlatCAMCommon.py:749 FlatCAMCommon.py:1126 FlatCAMCommon.py:1160 -#: FlatCAMCommon.py:2335 FlatCAMCommon.py:2556 FlatCAMCommon.py:2590 +#: FlatCAMDB.py:305 FlatCAMDB.py:682 FlatCAMDB.py:716 FlatCAMDB.py:1891 +#: FlatCAMDB.py:2112 FlatCAMDB.py:2146 msgid "Could not load Tools DB file." msgstr "Impossible de charger le fichier BD des outils." -#: FlatCAMCommon.py:757 FlatCAMCommon.py:1168 FlatCAMCommon.py:2343 -#: FlatCAMCommon.py:2598 +#: FlatCAMDB.py:313 FlatCAMDB.py:724 FlatCAMDB.py:1899 FlatCAMDB.py:2154 msgid "Failed to parse Tools DB file." msgstr "Échec de l'analyse du fichier BD des outils." -#: FlatCAMCommon.py:760 FlatCAMCommon.py:1171 FlatCAMCommon.py:2346 -#: FlatCAMCommon.py:2601 +#: FlatCAMDB.py:316 FlatCAMDB.py:727 FlatCAMDB.py:1902 FlatCAMDB.py:2157 msgid "Loaded FlatCAM Tools DB from" msgstr "Base de données des outils FlatCAM chargée depuis" -#: FlatCAMCommon.py:766 FlatCAMCommon.py:2260 +#: FlatCAMDB.py:322 FlatCAMDB.py:1816 msgid "Add to DB" msgstr "Ajouter à la BD" -#: FlatCAMCommon.py:768 FlatCAMCommon.py:2263 +#: FlatCAMDB.py:324 FlatCAMDB.py:1819 msgid "Copy from DB" msgstr "Copier depuis BD" -#: FlatCAMCommon.py:770 FlatCAMCommon.py:2266 +#: FlatCAMDB.py:326 FlatCAMDB.py:1822 msgid "Delete from DB" msgstr "Supprimer de la BD" -#: FlatCAMCommon.py:1047 FlatCAMCommon.py:2473 +#: FlatCAMDB.py:603 FlatCAMDB.py:2029 msgid "Tool added to DB." msgstr "Outil ajouté à BD." -#: FlatCAMCommon.py:1068 FlatCAMCommon.py:2497 +#: FlatCAMDB.py:624 FlatCAMDB.py:2053 msgid "Tool copied from Tools DB." msgstr "Outil copié à partir de la BD d'outils." -#: FlatCAMCommon.py:1086 FlatCAMCommon.py:2516 +#: FlatCAMDB.py:642 FlatCAMDB.py:2072 msgid "Tool removed from Tools DB." msgstr "Outil supprimé de la BD d'outils." -#: FlatCAMCommon.py:1097 FlatCAMCommon.py:2527 +#: FlatCAMDB.py:653 FlatCAMDB.py:2083 msgid "Export Tools Database" msgstr "Exporter la BD des outils" -#: FlatCAMCommon.py:1100 FlatCAMCommon.py:2530 +#: FlatCAMDB.py:656 FlatCAMDB.py:2086 msgid "Tools_Database" msgstr "Base de données d'outils" -#: FlatCAMCommon.py:1137 FlatCAMCommon.py:1140 FlatCAMCommon.py:1192 -#: FlatCAMCommon.py:2567 FlatCAMCommon.py:2570 FlatCAMCommon.py:2622 +#: FlatCAMDB.py:693 FlatCAMDB.py:696 FlatCAMDB.py:748 FlatCAMDB.py:2123 +#: FlatCAMDB.py:2126 FlatCAMDB.py:2178 msgid "Failed to write Tools DB to file." msgstr "Échec de l'écriture de la base de données des outils dans le fichier." -#: FlatCAMCommon.py:1143 FlatCAMCommon.py:2573 +#: FlatCAMDB.py:699 FlatCAMDB.py:2129 msgid "Exported Tools DB to" msgstr "Base de données d'outils exportée vers" -#: FlatCAMCommon.py:1150 FlatCAMCommon.py:2580 +#: FlatCAMDB.py:706 FlatCAMDB.py:2136 msgid "Import FlatCAM Tools DB" msgstr "Importer la BD des outils FlatCAM" -#: FlatCAMCommon.py:1196 FlatCAMCommon.py:2626 +#: FlatCAMDB.py:752 FlatCAMDB.py:2182 msgid "Saved Tools DB." msgstr "Sauvegarde de la BD des outils." -#: FlatCAMCommon.py:1343 FlatCAMCommon.py:2807 +#: FlatCAMDB.py:899 FlatCAMDB.py:2365 msgid "No Tool/row selected in the Tools Database table" msgstr "Aucun outil / ligne sélectionné dans le tableau de la BD d'outils" -#: FlatCAMCommon.py:1361 FlatCAMCommon.py:2824 +#: FlatCAMDB.py:917 FlatCAMDB.py:2382 msgid "Cancelled adding tool from DB." msgstr "Outil d'ajout de la BD annulé." -#: FlatCAMCommon.py:1462 +#: FlatCAMDB.py:1018 msgid "Basic Geo Parameters" msgstr "Paramètres Geo de base" -#: FlatCAMCommon.py:1474 +#: FlatCAMDB.py:1030 msgid "Advanced Geo Parameters" msgstr "Paramètres Geo avancés" -#: FlatCAMCommon.py:1486 +#: FlatCAMDB.py:1042 msgid "NCC Parameters" msgstr "Paramètres NCC" -#: FlatCAMCommon.py:1498 +#: FlatCAMDB.py:1054 msgid "Paint Parameters" msgstr "Paramètres de Peindre" -#: FlatCAMCommon.py:1629 flatcamGUI/ObjectUI.py:966 flatcamGUI/ObjectUI.py:1767 +#: FlatCAMDB.py:1185 flatcamGUI/ObjectUI.py:966 flatcamGUI/ObjectUI.py:1768 #: flatcamGUI/PreferencesUI.py:4378 flatcamGUI/PreferencesUI.py:7059 -#: flatcamTools/ToolSolderPaste.py:254 +#: flatcamTools/ToolSolderPaste.py:253 msgid "Feedrate X-Y" msgstr "Avance X-Y" -#: FlatCAMCommon.py:1631 +#: FlatCAMDB.py:1187 msgid "" "Feedrate X-Y. Feedrate\n" "The speed on XY plane used while cutting into material." @@ -2366,13 +2362,13 @@ msgstr "" "Avance X-Y. Vitesse d'avance\n" "La vitesse sur le plan XY utilisée lors de la découpe du matériau." -#: FlatCAMCommon.py:1643 flatcamGUI/ObjectUI.py:981 flatcamGUI/ObjectUI.py:1781 +#: FlatCAMDB.py:1199 flatcamGUI/ObjectUI.py:981 flatcamGUI/ObjectUI.py:1782 #: flatcamGUI/PreferencesUI.py:3425 flatcamGUI/PreferencesUI.py:4393 -#: flatcamGUI/PreferencesUI.py:7072 flatcamTools/ToolSolderPaste.py:266 +#: flatcamGUI/PreferencesUI.py:7072 flatcamTools/ToolSolderPaste.py:265 msgid "Feedrate Z" msgstr "Avance Z" -#: FlatCAMCommon.py:1645 +#: FlatCAMDB.py:1201 msgid "" "Feedrate Z\n" "The speed on Z plane." @@ -2380,12 +2376,12 @@ msgstr "" "Avance Z\n" "La vitesse sur l'avion Z." -#: FlatCAMCommon.py:1843 flatcamGUI/ObjectUI.py:844 +#: FlatCAMDB.py:1399 flatcamGUI/ObjectUI.py:844 #: flatcamGUI/PreferencesUI.py:3264 flatcamTools/ToolNCC.py:341 msgid "Operation" msgstr "Opération" -#: FlatCAMCommon.py:1845 flatcamTools/ToolNCC.py:343 +#: FlatCAMDB.py:1401 flatcamTools/ToolNCC.py:343 msgid "" "The 'Operation' can be:\n" "- Isolation -> will ensure that the non-copper clearing is always complete.\n" @@ -2398,24 +2394,23 @@ msgstr "" "Si cela ne réussit pas, alors le clearing sans cuivre échouera aussi.\n" "- Clair -> le clearing régulier sans cuivre." -#: FlatCAMCommon.py:1852 flatcamEditors/FlatCAMGrbEditor.py:2739 +#: FlatCAMDB.py:1408 flatcamEditors/FlatCAMGrbEditor.py:2739 #: flatcamGUI/GUIElements.py:2577 flatcamTools/ToolNCC.py:350 msgid "Clear" msgstr "Effacer" -#: FlatCAMCommon.py:1853 flatcamTools/ToolNCC.py:351 -#: flatcamTools/ToolNCC.py:1618 +#: FlatCAMDB.py:1409 flatcamTools/ToolNCC.py:351 flatcamTools/ToolNCC.py:1618 msgid "Isolation" msgstr "Isolement" -#: FlatCAMCommon.py:1861 flatcamGUI/ObjectUI.py:408 flatcamGUI/ObjectUI.py:866 +#: FlatCAMDB.py:1417 flatcamGUI/ObjectUI.py:408 flatcamGUI/ObjectUI.py:866 #: flatcamGUI/PreferencesUI.py:2257 flatcamGUI/PreferencesUI.py:3280 #: flatcamGUI/PreferencesUI.py:4665 flatcamGUI/PreferencesUI.py:5416 #: flatcamTools/ToolNCC.py:359 msgid "Milling Type" msgstr "Type de fraisage" -#: FlatCAMCommon.py:1863 FlatCAMCommon.py:1871 flatcamGUI/PreferencesUI.py:5418 +#: FlatCAMDB.py:1419 FlatCAMDB.py:1427 flatcamGUI/PreferencesUI.py:5418 #: flatcamGUI/PreferencesUI.py:5426 flatcamTools/ToolNCC.py:361 #: flatcamTools/ToolNCC.py:369 msgid "" @@ -2428,26 +2423,25 @@ msgstr "" "d'outils\n" "- conventionnel / utile quand il n'y a pas de compensation de jeu" -#: FlatCAMCommon.py:1868 flatcamGUI/ObjectUI.py:414 +#: FlatCAMDB.py:1424 flatcamGUI/ObjectUI.py:414 #: flatcamGUI/PreferencesUI.py:2264 flatcamGUI/PreferencesUI.py:4671 #: flatcamGUI/PreferencesUI.py:5423 flatcamTools/ToolNCC.py:366 msgid "Climb" msgstr "Monté" -#: FlatCAMCommon.py:1869 flatcamGUI/ObjectUI.py:415 +#: FlatCAMDB.py:1425 flatcamGUI/ObjectUI.py:415 #: flatcamGUI/PreferencesUI.py:2265 flatcamGUI/PreferencesUI.py:4672 #: flatcamGUI/PreferencesUI.py:5424 flatcamTools/ToolNCC.py:367 msgid "Conventional" msgstr "Conventionnel" -#: FlatCAMCommon.py:1881 FlatCAMCommon.py:1990 -#: flatcamEditors/FlatCAMGeoEditor.py:452 flatcamGUI/PreferencesUI.py:5461 -#: flatcamGUI/PreferencesUI.py:6002 flatcamTools/ToolNCC.py:382 -#: flatcamTools/ToolPaint.py:329 +#: FlatCAMDB.py:1437 FlatCAMDB.py:1546 flatcamEditors/FlatCAMGeoEditor.py:451 +#: flatcamGUI/PreferencesUI.py:5461 flatcamGUI/PreferencesUI.py:6002 +#: flatcamTools/ToolNCC.py:382 flatcamTools/ToolPaint.py:329 msgid "Overlap" msgstr "Chevauchement" -#: FlatCAMCommon.py:1883 flatcamGUI/PreferencesUI.py:5463 +#: FlatCAMDB.py:1439 flatcamGUI/PreferencesUI.py:5463 #: flatcamTools/ToolNCC.py:384 msgid "" "How much (percentage) of the tool width to overlap each tool pass.\n" @@ -2468,37 +2462,36 @@ msgstr "" "Valeurs supérieures = traitement lent et exécution lente sur CNC\n" "en raison de trop de chemins." -#: FlatCAMCommon.py:1902 FlatCAMCommon.py:2011 -#: flatcamEditors/FlatCAMGeoEditor.py:472 flatcamGUI/PreferencesUI.py:5481 -#: flatcamGUI/PreferencesUI.py:5723 flatcamGUI/PreferencesUI.py:6022 -#: flatcamGUI/PreferencesUI.py:7681 flatcamGUI/PreferencesUI.py:7838 -#: flatcamGUI/PreferencesUI.py:7923 flatcamGUI/PreferencesUI.py:8570 -#: flatcamGUI/PreferencesUI.py:8578 flatcamTools/ToolCopperThieving.py:112 -#: flatcamTools/ToolCopperThieving.py:363 flatcamTools/ToolCutOut.py:191 +#: FlatCAMDB.py:1458 FlatCAMDB.py:1567 flatcamEditors/FlatCAMGeoEditor.py:471 +#: flatcamGUI/PreferencesUI.py:5481 flatcamGUI/PreferencesUI.py:5723 +#: flatcamGUI/PreferencesUI.py:6022 flatcamGUI/PreferencesUI.py:7681 +#: flatcamGUI/PreferencesUI.py:7838 flatcamGUI/PreferencesUI.py:7923 +#: flatcamGUI/PreferencesUI.py:8570 flatcamGUI/PreferencesUI.py:8578 +#: flatcamTools/ToolCopperThieving.py:111 +#: flatcamTools/ToolCopperThieving.py:362 flatcamTools/ToolCutOut.py:190 #: flatcamTools/ToolFiducials.py:172 flatcamTools/ToolInvertGerber.py:88 #: flatcamTools/ToolInvertGerber.py:96 flatcamTools/ToolNCC.py:403 #: flatcamTools/ToolPaint.py:350 msgid "Margin" msgstr "Marge" -#: FlatCAMCommon.py:1904 flatcamGUI/PreferencesUI.py:5483 +#: FlatCAMDB.py:1460 flatcamGUI/PreferencesUI.py:5483 #: flatcamGUI/PreferencesUI.py:7683 flatcamGUI/PreferencesUI.py:7925 -#: flatcamGUI/PreferencesUI.py:7989 flatcamTools/ToolCopperThieving.py:114 +#: flatcamGUI/PreferencesUI.py:7989 flatcamTools/ToolCopperThieving.py:113 #: flatcamTools/ToolFiducials.py:174 flatcamTools/ToolFiducials.py:237 #: flatcamTools/ToolNCC.py:405 msgid "Bounding box margin." msgstr "Marge du cadre de sélection." -#: FlatCAMCommon.py:1915 FlatCAMCommon.py:2026 -#: flatcamEditors/FlatCAMGeoEditor.py:486 flatcamGUI/PreferencesUI.py:5494 -#: flatcamGUI/PreferencesUI.py:6037 flatcamGUI/PreferencesUI.py:8204 -#: flatcamGUI/PreferencesUI.py:8417 flatcamTools/ToolExtractDrills.py:128 -#: flatcamTools/ToolNCC.py:416 flatcamTools/ToolPaint.py:365 -#: flatcamTools/ToolPunchGerber.py:139 +#: FlatCAMDB.py:1471 FlatCAMDB.py:1582 flatcamEditors/FlatCAMGeoEditor.py:485 +#: flatcamGUI/PreferencesUI.py:5494 flatcamGUI/PreferencesUI.py:6037 +#: flatcamGUI/PreferencesUI.py:8204 flatcamGUI/PreferencesUI.py:8417 +#: flatcamTools/ToolExtractDrills.py:128 flatcamTools/ToolNCC.py:416 +#: flatcamTools/ToolPaint.py:365 flatcamTools/ToolPunchGerber.py:139 msgid "Method" msgstr "Méthode" -#: FlatCAMCommon.py:1917 flatcamGUI/PreferencesUI.py:5496 +#: FlatCAMDB.py:1473 flatcamGUI/PreferencesUI.py:5496 #: flatcamTools/ToolNCC.py:418 msgid "" "Algorithm for copper clearing:\n" @@ -2511,19 +2504,17 @@ msgstr "" "- À base de graines: à l'extérieur des graines.\n" "- Ligne: lignes parallèles." -#: FlatCAMCommon.py:1925 FlatCAMCommon.py:2040 -#: flatcamEditors/FlatCAMGeoEditor.py:500 flatcamGUI/PreferencesUI.py:5509 -#: flatcamGUI/PreferencesUI.py:6056 flatcamTools/ToolNCC.py:431 -#: flatcamTools/ToolNCC.py:2390 flatcamTools/ToolNCC.py:2419 -#: flatcamTools/ToolNCC.py:2688 flatcamTools/ToolNCC.py:2720 -#: flatcamTools/ToolPaint.py:390 flatcamTools/ToolPaint.py:1829 -#: tclCommands/TclCommandCopperClear.py:126 +#: FlatCAMDB.py:1481 FlatCAMDB.py:1596 flatcamEditors/FlatCAMGeoEditor.py:499 +#: flatcamGUI/PreferencesUI.py:5509 flatcamGUI/PreferencesUI.py:6056 +#: flatcamTools/ToolNCC.py:431 flatcamTools/ToolNCC.py:2390 +#: flatcamTools/ToolNCC.py:2419 flatcamTools/ToolNCC.py:2688 +#: flatcamTools/ToolNCC.py:2720 flatcamTools/ToolPaint.py:390 +#: flatcamTools/ToolPaint.py:1829 tclCommands/TclCommandCopperClear.py:126 #: tclCommands/TclCommandCopperClear.py:134 tclCommands/TclCommandPaint.py:125 msgid "Standard" msgstr "La norme" -#: FlatCAMCommon.py:1925 FlatCAMCommon.py:2040 -#: flatcamEditors/FlatCAMGeoEditor.py:500 +#: FlatCAMDB.py:1481 FlatCAMDB.py:1596 flatcamEditors/FlatCAMGeoEditor.py:499 #: flatcamEditors/FlatCAMGeoEditor.py:5156 flatcamGUI/PreferencesUI.py:5509 #: flatcamGUI/PreferencesUI.py:6056 flatcamTools/ToolNCC.py:431 #: flatcamTools/ToolPaint.py:390 flatcamTools/ToolPaint.py:699 @@ -2532,16 +2523,15 @@ msgstr "La norme" msgid "Lines" msgstr "Lignes" -#: FlatCAMCommon.py:1933 FlatCAMCommon.py:2051 flatcamGUI/PreferencesUI.py:5516 +#: FlatCAMDB.py:1489 FlatCAMDB.py:1607 flatcamGUI/PreferencesUI.py:5516 #: flatcamGUI/PreferencesUI.py:6063 flatcamTools/ToolNCC.py:439 #: flatcamTools/ToolPaint.py:401 msgid "Connect" msgstr "Relier" -#: FlatCAMCommon.py:1937 FlatCAMCommon.py:2054 -#: flatcamEditors/FlatCAMGeoEditor.py:509 flatcamGUI/PreferencesUI.py:5518 -#: flatcamGUI/PreferencesUI.py:6065 flatcamTools/ToolNCC.py:443 -#: flatcamTools/ToolPaint.py:404 +#: FlatCAMDB.py:1493 FlatCAMDB.py:1610 flatcamEditors/FlatCAMGeoEditor.py:508 +#: flatcamGUI/PreferencesUI.py:5518 flatcamGUI/PreferencesUI.py:6065 +#: flatcamTools/ToolNCC.py:443 flatcamTools/ToolPaint.py:404 msgid "" "Draw lines between resulting\n" "segments to minimize tool lifts." @@ -2549,16 +2539,15 @@ msgstr "" "Tracez des lignes entre les résultats\n" "segments pour minimiser les montées d’outil." -#: FlatCAMCommon.py:1943 FlatCAMCommon.py:2058 flatcamGUI/PreferencesUI.py:5525 +#: FlatCAMDB.py:1499 FlatCAMDB.py:1614 flatcamGUI/PreferencesUI.py:5525 #: flatcamGUI/PreferencesUI.py:6071 flatcamTools/ToolNCC.py:449 #: flatcamTools/ToolPaint.py:408 msgid "Contour" msgstr "Contour" -#: FlatCAMCommon.py:1947 FlatCAMCommon.py:2061 -#: flatcamEditors/FlatCAMGeoEditor.py:519 flatcamGUI/PreferencesUI.py:5527 -#: flatcamGUI/PreferencesUI.py:6073 flatcamTools/ToolNCC.py:453 -#: flatcamTools/ToolPaint.py:411 +#: FlatCAMDB.py:1503 FlatCAMDB.py:1617 flatcamEditors/FlatCAMGeoEditor.py:518 +#: flatcamGUI/PreferencesUI.py:5527 flatcamGUI/PreferencesUI.py:6073 +#: flatcamTools/ToolNCC.py:453 flatcamTools/ToolPaint.py:411 msgid "" "Cut around the perimeter of the polygon\n" "to trim rough edges." @@ -2566,15 +2555,15 @@ msgstr "" "Couper autour du périmètre du polygone\n" "pour couper les bords rugueux." -#: FlatCAMCommon.py:1953 flatcamEditors/FlatCAMGeoEditor.py:613 +#: FlatCAMDB.py:1509 flatcamEditors/FlatCAMGeoEditor.py:612 #: flatcamEditors/FlatCAMGrbEditor.py:5145 flatcamGUI/ObjectUI.py:142 -#: flatcamGUI/ObjectUI.py:1495 flatcamGUI/ObjectUI.py:2244 +#: flatcamGUI/ObjectUI.py:1496 flatcamGUI/ObjectUI.py:2245 #: flatcamGUI/PreferencesUI.py:5534 flatcamGUI/PreferencesUI.py:6822 -#: flatcamTools/ToolNCC.py:459 flatcamTools/ToolTransform.py:29 +#: flatcamTools/ToolNCC.py:459 flatcamTools/ToolTransform.py:28 msgid "Offset" msgstr "Décalage" -#: FlatCAMCommon.py:1957 flatcamGUI/PreferencesUI.py:5536 +#: FlatCAMDB.py:1513 flatcamGUI/PreferencesUI.py:5536 #: flatcamTools/ToolNCC.py:463 msgid "" "If used, it will add an offset to the copper features.\n" @@ -2587,7 +2576,7 @@ msgstr "" "des caractéristiques de cuivre.\n" "La valeur peut être comprise entre 0 et 10 unités FlatCAM." -#: FlatCAMCommon.py:1992 flatcamEditors/FlatCAMGeoEditor.py:454 +#: FlatCAMDB.py:1548 flatcamEditors/FlatCAMGeoEditor.py:453 #: flatcamGUI/PreferencesUI.py:6004 flatcamTools/ToolPaint.py:331 msgid "" "How much (percentage) of the tool width to overlap each tool pass.\n" @@ -2608,7 +2597,7 @@ msgstr "" "Valeurs supérieures = traitement lent et exécution lente sur CNC\n" "en raison de trop de chemins." -#: FlatCAMCommon.py:2013 flatcamEditors/FlatCAMGeoEditor.py:474 +#: FlatCAMDB.py:1569 flatcamEditors/FlatCAMGeoEditor.py:473 #: flatcamGUI/PreferencesUI.py:6024 flatcamTools/ToolPaint.py:352 msgid "" "Distance by which to avoid\n" @@ -2619,7 +2608,7 @@ msgstr "" "les bords du polygone à\n" "être peint." -#: FlatCAMCommon.py:2028 flatcamGUI/PreferencesUI.py:6039 +#: FlatCAMDB.py:1584 flatcamGUI/PreferencesUI.py:6039 #: flatcamTools/ToolPaint.py:367 msgid "" "Algorithm for painting:\n" @@ -2641,501 +2630,23 @@ msgstr "" "précédentes\n" "dans l'ordre spécifié." -#: FlatCAMCommon.py:2040 FlatCAMCommon.py:2042 flatcamGUI/PreferencesUI.py:6056 +#: FlatCAMDB.py:1596 FlatCAMDB.py:1598 flatcamGUI/PreferencesUI.py:6056 #: flatcamTools/ToolPaint.py:390 flatcamTools/ToolPaint.py:392 #: flatcamTools/ToolPaint.py:693 flatcamTools/ToolPaint.py:698 #: flatcamTools/ToolPaint.py:1871 tclCommands/TclCommandPaint.py:131 msgid "Laser_lines" msgstr "Lignes_laser" -#: FlatCAMCommon.py:2040 flatcamGUI/PreferencesUI.py:6056 +#: FlatCAMDB.py:1596 flatcamGUI/PreferencesUI.py:6056 #: flatcamTools/ToolPaint.py:390 flatcamTools/ToolPaint.py:2022 #: tclCommands/TclCommandPaint.py:133 msgid "Combo" msgstr "Combo" -#: FlatCAMCommon.py:2085 +#: FlatCAMDB.py:1641 msgid "Add Tool in DB" msgstr "Ajouter un Outil dans la BD" -#: FlatCAMObj.py:264 -msgid "Name changed from" -msgstr "Nom changé de" - -#: FlatCAMObj.py:264 -msgid "to" -msgstr "à" - -#: FlatCAMObj.py:275 -msgid "Offsetting..." -msgstr "Compenser ..." - -#: FlatCAMObj.py:289 FlatCAMObj.py:294 -msgid "Scaling could not be executed." -msgstr "La mise à l'échelle n'a pas pu être exécutée." - -#: FlatCAMObj.py:298 FlatCAMObj.py:306 -msgid "Scale done." -msgstr "Échelle terminée." - -#: FlatCAMObj.py:304 -msgid "Scaling..." -msgstr "Mise à l'échelle..." - -#: FlatCAMObj.py:322 -msgid "Skewing..." -msgstr "Fausser..." - -#: FlatCAMObj.py:743 FlatCAMObj.py:831 flatcamGUI/ObjectUI.py:449 -#: flatcamGUI/PreferencesUI.py:6527 flatcamTools/ToolAlignObjects.py:73 -#: flatcamTools/ToolAlignObjects.py:109 flatcamTools/ToolCalibration.py:196 -#: flatcamTools/ToolCalibration.py:631 flatcamTools/ToolCalibration.py:648 -#: flatcamTools/ToolCalibration.py:807 flatcamTools/ToolCalibration.py:815 -#: flatcamTools/ToolCopperThieving.py:145 -#: flatcamTools/ToolCopperThieving.py:159 -#: flatcamTools/ToolCopperThieving.py:605 flatcamTools/ToolCutOut.py:92 -#: flatcamTools/ToolDblSided.py:225 flatcamTools/ToolFilm.py:69 -#: flatcamTools/ToolFilm.py:102 flatcamTools/ToolFilm.py:549 -#: flatcamTools/ToolFilm.py:557 flatcamTools/ToolImage.py:49 -#: flatcamTools/ToolImage.py:252 flatcamTools/ToolImage.py:273 -#: flatcamTools/ToolNCC.py:96 flatcamTools/ToolNCC.py:558 -#: flatcamTools/ToolNCC.py:1295 flatcamTools/ToolPaint.py:502 -#: flatcamTools/ToolPaint.py:706 flatcamTools/ToolPanelize.py:118 -#: flatcamTools/ToolPanelize.py:204 flatcamTools/ToolPanelize.py:374 -#: flatcamTools/ToolPanelize.py:391 -msgid "Gerber" -msgstr "Gerber" - -#: FlatCAMObj.py:743 FlatCAMObj.py:831 flatcamGUI/FlatCAMGUI.py:2154 -#: flatcamGUI/ObjectUI.py:449 flatcamTools/ToolCalibration.py:631 -#: flatcamTools/ToolCalibration.py:648 flatcamTools/ToolCalibration.py:815 -#: flatcamTools/ToolCopperThieving.py:145 -#: flatcamTools/ToolCopperThieving.py:159 -#: flatcamTools/ToolCopperThieving.py:605 flatcamTools/ToolCutOut.py:93 -#: flatcamTools/ToolDblSided.py:227 flatcamTools/ToolFilm.py:69 -#: flatcamTools/ToolFilm.py:102 flatcamTools/ToolFilm.py:549 -#: flatcamTools/ToolFilm.py:557 flatcamTools/ToolImage.py:49 -#: flatcamTools/ToolImage.py:271 flatcamTools/ToolNCC.py:95 -#: flatcamTools/ToolNCC.py:558 flatcamTools/ToolNCC.py:1295 -#: flatcamTools/ToolPaint.py:502 flatcamTools/ToolPaint.py:706 -#: flatcamTools/ToolPanelize.py:118 flatcamTools/ToolPanelize.py:374 -#: flatcamTools/ToolPanelize.py:391 -msgid "Geometry" -msgstr "Géométrie" - -#: FlatCAMObj.py:755 FlatCAMObj.py:2957 FlatCAMObj.py:4421 -#: flatcamGUI/PreferencesUI.py:1646 flatcamGUI/PreferencesUI.py:3041 -msgid "Basic" -msgstr "De base" - -#: FlatCAMObj.py:782 FlatCAMObj.py:2970 FlatCAMObj.py:4442 -#: flatcamGUI/PreferencesUI.py:1647 -msgid "Advanced" -msgstr "Avancé" - -#: FlatCAMObj.py:998 -msgid "Buffering solid geometry" -msgstr "Mise en tampon de la géométrie solide" - -#: FlatCAMObj.py:1001 camlib.py:979 flatcamGUI/PreferencesUI.py:2476 -#: flatcamTools/ToolCopperThieving.py:1017 -#: flatcamTools/ToolCopperThieving.py:1206 -#: flatcamTools/ToolCopperThieving.py:1218 flatcamTools/ToolNCC.py:2045 -#: flatcamTools/ToolNCC.py:2153 flatcamTools/ToolNCC.py:2167 -#: flatcamTools/ToolNCC.py:3098 flatcamTools/ToolNCC.py:3203 -#: flatcamTools/ToolNCC.py:3218 flatcamTools/ToolNCC.py:3484 -#: flatcamTools/ToolNCC.py:3585 flatcamTools/ToolNCC.py:3600 -msgid "Buffering" -msgstr "Mise en mémoire tampon" - -#: FlatCAMObj.py:1007 -msgid "Done" -msgstr "Terminé" - -#: FlatCAMObj.py:1032 FlatCAMObj.py:1058 -msgid "Operation could not be done." -msgstr "L'opération n'a pas pu être effectuée." - -#: FlatCAMObj.py:1075 -msgid "Isolating..." -msgstr "Isoler ..." - -#: FlatCAMObj.py:1134 -msgid "Click on a polygon to isolate it." -msgstr "Cliquez sur un polygone pour l'isoler." - -#: FlatCAMObj.py:1173 FlatCAMObj.py:1277 flatcamTools/ToolPaint.py:1511 -msgid "Added polygon" -msgstr "Polygone ajouté" - -#: FlatCAMObj.py:1174 FlatCAMObj.py:1279 -msgid "Click to add next polygon or right click to start isolation." -msgstr "" -"Cliquez pour ajouter le polygone suivant ou cliquez avec le bouton droit " -"pour démarrer l'isolement." - -#: FlatCAMObj.py:1186 flatcamTools/ToolPaint.py:1525 -msgid "Removed polygon" -msgstr "Polygone supprimé" - -#: FlatCAMObj.py:1187 -msgid "Click to add/remove next polygon or right click to start isolation." -msgstr "" -"Cliquez pour ajouter / supprimer le polygone suivant ou cliquez avec le " -"bouton droit pour démarrer l'isolement." - -#: FlatCAMObj.py:1192 flatcamTools/ToolPaint.py:1531 -msgid "No polygon detected under click position." -msgstr "Aucun polygone détecté sous la position du clic." - -#: FlatCAMObj.py:1213 flatcamTools/ToolPaint.py:1560 -msgid "List of single polygons is empty. Aborting." -msgstr "La liste des polygones simples est vide. Abandon." - -#: FlatCAMObj.py:1282 -msgid "No polygon in selection." -msgstr "Aucun polygone dans la sélection." - -#: FlatCAMObj.py:1394 FlatCAMObj.py:1542 FlatCAMObj.py:4055 FlatCAMObj.py:4375 -#: FlatCAMObj.py:4762 -msgid "Rough" -msgstr "Rugueux" - -#: FlatCAMObj.py:1410 FlatCAMObj.py:1489 flatcamTools/ToolNCC.py:2081 -#: flatcamTools/ToolNCC.py:3132 flatcamTools/ToolNCC.py:3511 -msgid "Isolation geometry could not be generated." -msgstr "La géométrie d'isolation n'a pas pu être générée." - -#: FlatCAMObj.py:1435 FlatCAMObj.py:1567 -msgid "Isolation geometry created" -msgstr "Géométrie d'isolement créée" - -#: FlatCAMObj.py:1444 FlatCAMObj.py:1574 -msgid "Subtracting Geo" -msgstr "Soustraction Geo" - -#: FlatCAMObj.py:1899 -msgid "Plotting Apertures" -msgstr "Traçage des ouvertures" - -#: FlatCAMObj.py:2753 flatcamEditors/FlatCAMExcEditor.py:2453 -msgid "Total Drills" -msgstr "Total Forage" - -#: FlatCAMObj.py:2784 flatcamEditors/FlatCAMExcEditor.py:2485 -msgid "Total Slots" -msgstr "Total de Fentes" - -#: FlatCAMObj.py:2857 FlatCAMObj.py:3069 FlatCAMObj.py:3085 FlatCAMObj.py:3089 -#: FlatCAMObj.py:4242 FlatCAMObj.py:4667 FlatCAMObj.py:4703 -#: flatcamGUI/ObjectUI.py:817 flatcamGUI/ObjectUI.py:1660 -#: flatcamTools/ToolNCC.py:331 flatcamTools/ToolNCC.py:797 -#: flatcamTools/ToolNCC.py:811 flatcamTools/ToolNCC.py:1191 -#: flatcamTools/ToolPaint.py:314 flatcamTools/ToolPaint.py:767 -#: flatcamTools/ToolPaint.py:779 flatcamTools/ToolPaint.py:1166 -msgid "Parameters for" -msgstr "Paramètres pour" - -#: FlatCAMObj.py:2857 FlatCAMObj.py:3089 FlatCAMObj.py:4242 FlatCAMObj.py:4703 -#: flatcamTools/ToolNCC.py:811 flatcamTools/ToolNCC.py:1191 -#: flatcamTools/ToolPaint.py:779 flatcamTools/ToolPaint.py:1166 -msgid "Multiple Tools" -msgstr "Outils multiples" - -#: FlatCAMObj.py:3069 -msgid "No Tool Selected" -msgstr "Aucun Outil sélectionné" - -#: FlatCAMObj.py:3085 FlatCAMObj.py:3427 FlatCAMObj.py:4667 -#: flatcamEditors/FlatCAMGeoEditor.py:406 flatcamGUI/FlatCAMGUI.py:496 -#: flatcamGUI/FlatCAMGUI.py:1143 flatcamGUI/ObjectUI.py:817 -#: flatcamGUI/ObjectUI.py:1660 flatcamTools/ToolNCC.py:331 -#: flatcamTools/ToolNCC.py:797 flatcamTools/ToolPaint.py:314 -#: flatcamTools/ToolPaint.py:767 -msgid "Tool" -msgstr "Outil" - -#: FlatCAMObj.py:3419 FlatCAMObj.py:3512 FlatCAMObj.py:3700 -msgid "Please select one or more tools from the list and try again." -msgstr "" -"Veuillez sélectionner un ou plusieurs outils dans la liste et réessayer." - -#: FlatCAMObj.py:3426 -msgid "Milling tool for DRILLS is larger than hole size. Cancelled." -msgstr "" -"L'outil de fraisage pour PERÇAGES est supérieur à la taille du trou. Annulé." - -#: FlatCAMObj.py:3442 FlatCAMObj.py:3533 FlatCAMObj.py:3719 -#: tclCommands/TclCommandDrillcncjob.py:194 -msgid "Tool_nr" -msgstr "Numéro d'outil" - -#: FlatCAMObj.py:3442 FlatCAMObj.py:3533 FlatCAMObj.py:3719 -#: flatcamEditors/FlatCAMExcEditor.py:1585 -#: flatcamEditors/FlatCAMExcEditor.py:3069 flatcamGUI/ObjectUI.py:780 -#: flatcamTools/ToolNCC.py:132 flatcamTools/ToolPaint.py:128 -#: flatcamTools/ToolPcbWizard.py:76 flatcamTools/ToolProperties.py:416 -#: flatcamTools/ToolProperties.py:476 flatcamTools/ToolSolderPaste.py:86 -#: tclCommands/TclCommandDrillcncjob.py:194 -msgid "Diameter" -msgstr "Diamètre" - -#: FlatCAMObj.py:3442 FlatCAMObj.py:3533 FlatCAMObj.py:3719 -#: tclCommands/TclCommandDrillcncjob.py:194 -msgid "Drills_Nr" -msgstr "Forets Nr" - -#: FlatCAMObj.py:3442 FlatCAMObj.py:3533 FlatCAMObj.py:3719 -#: tclCommands/TclCommandDrillcncjob.py:194 -msgid "Slots_Nr" -msgstr "Fentes Nr" - -#: FlatCAMObj.py:3521 -msgid "Milling tool for SLOTS is larger than hole size. Cancelled." -msgstr "" -"L'outil de fraisage pour FENTES est supérieur à la taille du trou. Annulé." - -#: FlatCAMObj.py:3626 FlatCAMObj.py:5451 -msgid "Focus Z" -msgstr "Focus Z" - -#: FlatCAMObj.py:3645 FlatCAMObj.py:5470 -msgid "Laser Power" -msgstr "Puissance laser" - -#: FlatCAMObj.py:3677 FlatCAMObj.py:5502 flatcamGUI/ObjectUI.py:1048 -#: flatcamGUI/ObjectUI.py:1839 flatcamGUI/PreferencesUI.py:4409 -msgid "Spindle speed" -msgstr "Vitesse de broche" - -#: FlatCAMObj.py:3776 FlatCAMObj.py:5911 FlatCAMObj.py:5915 FlatCAMObj.py:6060 -msgid "Generating CNC Code" -msgstr "Génération de code CNC" - -#: FlatCAMObj.py:3966 flatcamTools/ToolNCC.py:918 flatcamTools/ToolPaint.py:844 -msgid "Current Tool parameters were applied to all tools." -msgstr "Les paramètres d'outil actuels ont été appliqués à tous les outils." - -#: FlatCAMObj.py:4055 FlatCAMObj.py:5115 FlatCAMObj.py:5116 FlatCAMObj.py:5125 -msgid "Iso" -msgstr "Iso" - -#: FlatCAMObj.py:4055 -msgid "Finish" -msgstr "Finition" - -#: FlatCAMObj.py:4410 -msgid "Add from Tool DB" -msgstr "Ajouter à partir de la BD d'outils" - -#: FlatCAMObj.py:4413 flatcamGUI/FlatCAMGUI.py:734 flatcamGUI/FlatCAMGUI.py:848 -#: flatcamGUI/FlatCAMGUI.py:1057 flatcamGUI/FlatCAMGUI.py:2123 -#: flatcamGUI/FlatCAMGUI.py:2267 flatcamGUI/FlatCAMGUI.py:2532 -#: flatcamGUI/FlatCAMGUI.py:2731 flatcamGUI/ObjectUI.py:1615 -#: flatcamTools/ToolPanelize.py:543 flatcamTools/ToolPanelize.py:570 -#: flatcamTools/ToolPanelize.py:669 flatcamTools/ToolPanelize.py:703 -#: flatcamTools/ToolPanelize.py:768 -msgid "Copy" -msgstr "Copie" - -#: FlatCAMObj.py:4507 FlatCAMObj.py:4941 FlatCAMObj.py:5661 FlatCAMObj.py:6307 -#: flatcamEditors/FlatCAMExcEditor.py:2560 -#: flatcamEditors/FlatCAMGeoEditor.py:1077 -#: flatcamEditors/FlatCAMGeoEditor.py:1118 -#: flatcamEditors/FlatCAMGeoEditor.py:1146 -#: flatcamEditors/FlatCAMGeoEditor.py:1174 -#: flatcamEditors/FlatCAMGeoEditor.py:1218 -#: flatcamEditors/FlatCAMGeoEditor.py:1253 -#: flatcamEditors/FlatCAMGeoEditor.py:1281 flatcamTools/ToolNCC.py:1493 -#: flatcamTools/ToolPaint.py:1244 flatcamTools/ToolPaint.py:1415 -#: flatcamTools/ToolSolderPaste.py:883 flatcamTools/ToolSolderPaste.py:956 -msgid "Wrong value format entered, use a number." -msgstr "Mauvais format de valeur entré, utilisez un nombre." - -#: FlatCAMObj.py:4781 -msgid "Tool added in Tool Table." -msgstr "Outil ajouté dans la table d'outils." - -#: FlatCAMObj.py:4890 FlatCAMObj.py:4899 -msgid "Failed. Select a tool to copy." -msgstr "Échoué. Sélectionnez un outil à copier." - -#: FlatCAMObj.py:4928 -msgid "Tool was copied in Tool Table." -msgstr "L'outil a été copié dans la table d'outils." - -#: FlatCAMObj.py:4955 -msgid "Tool was edited in Tool Table." -msgstr "L'outil a été édité dans Tool Table." - -#: FlatCAMObj.py:4984 FlatCAMObj.py:4993 -msgid "Failed. Select a tool to delete." -msgstr "Échoué. Sélectionnez un outil à supprimer." - -#: FlatCAMObj.py:5017 -msgid "Tool was deleted in Tool Table." -msgstr "L'outil a été supprimé dans la table d'outils." - -#: FlatCAMObj.py:5523 -msgid "This Geometry can't be processed because it is" -msgstr "Cette géométrie ne peut pas être traitée car elle est" - -#: FlatCAMObj.py:5523 -msgid "geometry" -msgstr "geometry" - -#: FlatCAMObj.py:5564 -msgid "Failed. No tool selected in the tool table ..." -msgstr "Échoué. Aucun outil sélectionné dans la table d'outils ..." - -#: FlatCAMObj.py:5667 FlatCAMObj.py:5820 -msgid "" -"Tool Offset is selected in Tool Table but no value is provided.\n" -"Add a Tool Offset or change the Offset Type." -msgstr "" -"Le décalage d’outil est sélectionné dans Tableau d’outils mais aucune valeur " -"n’est fournie.\n" -"Ajoutez un décalage d'outil ou changez le type de décalage." - -#: FlatCAMObj.py:5733 FlatCAMObj.py:5882 -msgid "G-Code parsing in progress..." -msgstr "Analyse du code G en cours ..." - -#: FlatCAMObj.py:5735 FlatCAMObj.py:5884 -msgid "G-Code parsing finished..." -msgstr "L'analyse du code G est terminée ..." - -#: FlatCAMObj.py:5743 -msgid "Finished G-Code processing" -msgstr "Traitement du code G terminé" - -#: FlatCAMObj.py:5745 FlatCAMObj.py:5896 -msgid "G-Code processing failed with error" -msgstr "Le traitement du code G a échoué avec une erreur" - -#: FlatCAMObj.py:5790 flatcamTools/ToolSolderPaste.py:1300 -msgid "Cancelled. Empty file, it has no geometry" -msgstr "Annulé. Fichier vide, il n'a pas de géométrie" - -#: FlatCAMObj.py:5894 FlatCAMObj.py:6055 -msgid "Finished G-Code processing..." -msgstr "Traitement terminé du code G ..." - -#: FlatCAMObj.py:5913 FlatCAMObj.py:5917 FlatCAMObj.py:6062 -msgid "CNCjob created" -msgstr "CNCjob créé" - -#: FlatCAMObj.py:6092 FlatCAMObj.py:6101 flatcamParsers/ParseGerber.py:1866 -#: flatcamParsers/ParseGerber.py:1876 -msgid "Scale factor has to be a number: integer or float." -msgstr "Le facteur d'échelle doit être un nombre: entier ou réel." - -#: FlatCAMObj.py:6164 -msgid "Geometry Scale done." -msgstr "Échelle de géométrie terminée." - -#: FlatCAMObj.py:6181 flatcamParsers/ParseGerber.py:1992 -msgid "" -"An (x,y) pair of values are needed. Probable you entered only one value in " -"the Offset field." -msgstr "" -"Une paire de valeurs (x, y) est nécessaire. Vous avez probablement entré une " -"seule valeur dans le champ Décalage." - -#: FlatCAMObj.py:6237 -msgid "Geometry Offset done." -msgstr "Décalage de géométrie effectué." - -#: FlatCAMObj.py:6266 -msgid "" -"The Toolchange X,Y field in Edit -> Preferences has to be in the format (x, " -"y)\n" -"but now there is only one value, not two." -msgstr "" -"Le champ Toolchange X, Y dans Edition -> Préférences doit être au format (x, " -"y)\n" -"mais maintenant il n'y a qu'une seule valeur, pas deux." - -#: FlatCAMObj.py:6956 FlatCAMObj.py:7802 FlatCAMObj.py:7999 -msgid "Basic" -msgstr "De base" - -#: FlatCAMObj.py:6962 FlatCAMObj.py:7806 FlatCAMObj.py:8003 -msgid "Advanced" -msgstr "Avancé" - -#: FlatCAMObj.py:7005 -msgid "Plotting..." -msgstr "Traçage..." - -#: FlatCAMObj.py:7034 FlatCAMObj.py:7039 flatcamTools/ToolSolderPaste.py:1498 -msgid "Export Machine Code ..." -msgstr "Exporter le code machine ..." - -#: FlatCAMObj.py:7044 flatcamTools/ToolSolderPaste.py:1502 -msgid "Export Machine Code cancelled ..." -msgstr "Exporter le code machine annulé ..." - -#: FlatCAMObj.py:7065 -msgid "Machine Code file saved to" -msgstr "Fichier de code machine enregistré dans" - -#: FlatCAMObj.py:7126 flatcamTools/ToolCalibration.py:1097 -msgid "Loaded Machine Code into Code Editor" -msgstr "Code machine chargé dans l'éditeur de code" - -#: FlatCAMObj.py:7265 -msgid "This CNCJob object can't be processed because it is a" -msgstr "Cet objet CNCJob ne peut pas être traité car il est" - -#: FlatCAMObj.py:7267 -msgid "CNCJob object" -msgstr "Objet CNCJob" - -#: FlatCAMObj.py:7447 -msgid "" -"G-code does not have a G94 code and we will not include the code in the " -"'Prepend to GCode' text box" -msgstr "" -"Le code G n'a pas de code G94 et nous n'inclurons pas le code dans la zone " -"de texte 'Prepend to GCode'" - -#: FlatCAMObj.py:7458 -msgid "Cancelled. The Toolchange Custom code is enabled but it's empty." -msgstr "Annulé. Le code personnalisé Toolchange est activé mais vide." - -#: FlatCAMObj.py:7463 -msgid "Toolchange G-code was replaced by a custom code." -msgstr "Toolchange G-code a été remplacé par un code personnalisé." - -#: FlatCAMObj.py:7480 flatcamEditors/FlatCAMTextEditor.py:272 -#: flatcamTools/ToolSolderPaste.py:1529 -msgid "No such file or directory" -msgstr "Aucun fichier ou répertoire de ce nom" - -#: FlatCAMObj.py:7494 flatcamEditors/FlatCAMTextEditor.py:284 -msgid "Saved to" -msgstr "Enregistré dans" - -#: FlatCAMObj.py:7511 FlatCAMObj.py:7521 -msgid "" -"The used preprocessor file has to have in it's name: 'toolchange_custom'" -msgstr "" -"Le fichier de post-traitement utilisé doit avoir pour nom: " -"'toolchange_custom'" - -#: FlatCAMObj.py:7524 -msgid "There is no preprocessor file." -msgstr "Il n'y a pas de fichier de post-processeur." - -#: FlatCAMObj.py:7821 -msgid "Script Editor" -msgstr "Éditeur de script" - -#: FlatCAMObj.py:8103 -msgid "Document Editor" -msgstr "Éditeur de Document" - #: FlatCAMProcess.py:172 msgid "processes running." msgstr "processus en cours d'exécution." @@ -3162,28 +2673,39 @@ msgstr "Etes-vous sûr de vouloir changer la langue actuelle en" msgid "Apply Language ..." msgstr "Appliquer la langue ..." -#: ObjectCollection.py:506 +#: ObjectCollection.py:511 #, python-brace-format msgid "Object renamed from {old} to {new}" msgstr "Objet renommé de {old} à {new}" -#: ObjectCollection.py:972 +#: ObjectCollection.py:984 msgid "Cause of error" msgstr "Cause d'erreur" -#: camlib.py:593 +#: camlib.py:597 msgid "self.solid_geometry is neither BaseGeometry or list." msgstr "self.solid_geometry n'est ni BaseGeometry ni une liste." -#: camlib.py:968 +#: camlib.py:970 msgid "Pass" msgstr "Passer" -#: camlib.py:988 +#: camlib.py:981 flatcamGUI/PreferencesUI.py:2476 +#: flatcamObjects/FlatCAMGerber.py:496 flatcamTools/ToolCopperThieving.py:1016 +#: flatcamTools/ToolCopperThieving.py:1205 +#: flatcamTools/ToolCopperThieving.py:1217 flatcamTools/ToolNCC.py:2045 +#: flatcamTools/ToolNCC.py:2153 flatcamTools/ToolNCC.py:2167 +#: flatcamTools/ToolNCC.py:3098 flatcamTools/ToolNCC.py:3203 +#: flatcamTools/ToolNCC.py:3218 flatcamTools/ToolNCC.py:3484 +#: flatcamTools/ToolNCC.py:3585 flatcamTools/ToolNCC.py:3600 +msgid "Buffering" +msgstr "Mise en mémoire tampon" + +#: camlib.py:990 msgid "Get Exteriors" msgstr "Obtenez des extérieurs" -#: camlib.py:991 +#: camlib.py:993 msgid "Get Interiors" msgstr "Obtenez des intérieurs" @@ -3191,39 +2713,39 @@ msgstr "Obtenez des intérieurs" msgid "Object was mirrored" msgstr "L'objet a été reflété" -#: camlib.py:2175 +#: camlib.py:2174 msgid "Failed to mirror. No object selected" msgstr "Impossible de refléter. Aucun objet sélectionné" -#: camlib.py:2244 +#: camlib.py:2239 msgid "Object was rotated" msgstr "L'objet a été tourné" -#: camlib.py:2247 +#: camlib.py:2241 msgid "Failed to rotate. No object selected" msgstr "Échec de la rotation. Aucun objet sélectionné" -#: camlib.py:2314 +#: camlib.py:2307 msgid "Object was skewed" msgstr "L'objet était de biaiser" -#: camlib.py:2317 +#: camlib.py:2309 msgid "Failed to skew. No object selected" msgstr "Impossible de biaiser. Aucun objet sélectionné" -#: camlib.py:2392 +#: camlib.py:2385 msgid "Object was buffered" msgstr "L'objet a été tamponnées" -#: camlib.py:2394 +#: camlib.py:2387 msgid "Failed to buffer. No object selected" msgstr "Échec de la mise en buffer. Aucun objet sélectionné" -#: camlib.py:2599 +#: camlib.py:2594 msgid "There is no such parameter" msgstr "Il n'y a pas de tel paramètre" -#: camlib.py:2659 camlib.py:2892 camlib.py:3121 camlib.py:3343 +#: camlib.py:2654 camlib.py:2887 camlib.py:3116 camlib.py:3338 msgid "" "The Cut Z parameter has positive value. It is the depth value to drill into " "material.\n" @@ -3237,12 +2759,12 @@ msgstr "" "s'agisse d'une faute de frappe; par conséquent, l'application convertira la " "valeur en valeur négative. Vérifiez le code CNC résultant (Gcode, etc.)." -#: camlib.py:2667 camlib.py:2902 camlib.py:3131 camlib.py:3353 camlib.py:3639 -#: camlib.py:4008 +#: camlib.py:2662 camlib.py:2897 camlib.py:3126 camlib.py:3348 camlib.py:3634 +#: camlib.py:4020 msgid "The Cut Z parameter is zero. There will be no cut, skipping file" msgstr "Le paramètre Cut Z est zéro. Il n'y aura pas de fichier coupé, sautant" -#: camlib.py:2678 camlib.py:3976 +#: camlib.py:2673 camlib.py:3988 msgid "" "The Toolchange X,Y field in Edit -> Preferences has to be in the format (x, " "y) \n" @@ -3252,7 +2774,7 @@ msgstr "" "y)\n" "mais maintenant il n'y a qu'une seule valeur, pas deux. " -#: camlib.py:2687 camlib.py:3590 camlib.py:3958 +#: camlib.py:2682 camlib.py:3585 camlib.py:3970 msgid "" "The End Move X,Y field in Edit -> Preferences has to be in the format (x, y) " "but now there is only one value, not two." @@ -3260,31 +2782,31 @@ msgstr "" "Le champ Fin du déplacement X, Y dans Edition -> Préférences doit être au " "format (x, y) mais maintenant il n'y a qu'une seule valeur, pas deux." -#: camlib.py:2775 +#: camlib.py:2770 msgid "Creating a list of points to drill..." msgstr "Création d'une liste de points à explorer ..." -#: camlib.py:2865 camlib.py:3737 camlib.py:4112 +#: camlib.py:2860 camlib.py:3732 camlib.py:4124 msgid "Starting G-Code" msgstr "Démarrer le GCode" -#: camlib.py:3006 camlib.py:3225 camlib.py:3389 camlib.py:3750 camlib.py:4123 +#: camlib.py:3001 camlib.py:3220 camlib.py:3384 camlib.py:3745 camlib.py:4135 msgid "Starting G-Code for tool with diameter" msgstr "Code G de départ pour outil avec diamètre" -#: camlib.py:3089 camlib.py:3307 camlib.py:3475 +#: camlib.py:3084 camlib.py:3302 camlib.py:3470 msgid "G91 coordinates not implemented" msgstr "Coordonnées G91 non implémentées" -#: camlib.py:3095 camlib.py:3314 camlib.py:3481 +#: camlib.py:3090 camlib.py:3309 camlib.py:3476 msgid "The loaded Excellon file has no drills" msgstr "Le fichier Excellon chargé n'a pas d'exercices" -#: camlib.py:3504 +#: camlib.py:3499 msgid "Finished G-Code generation..." msgstr "Fini la génération de code G ..." -#: camlib.py:3608 +#: camlib.py:3603 msgid "" "The Toolchange X,Y field in Edit -> Preferences has to be in the format (x, " "y) \n" @@ -3294,7 +2816,7 @@ msgstr "" "y)\n" "mais maintenant il n'y a qu'une seule valeur, pas deux." -#: camlib.py:3622 camlib.py:3991 +#: camlib.py:3617 camlib.py:4003 msgid "" "Cut_Z parameter is None or zero. Most likely a bad combinations of other " "parameters." @@ -3302,7 +2824,7 @@ msgstr "" "Le paramètre Cut_Z est Aucun ou zéro. Très probablement une mauvaise " "combinaison d'autres paramètres." -#: camlib.py:3631 camlib.py:4000 +#: camlib.py:3626 camlib.py:4012 msgid "" "The Cut Z parameter has positive value. It is the depth value to cut into " "material.\n" @@ -3316,11 +2838,11 @@ msgstr "" "s'agisse d'une faute de frappe. Par conséquent, l'application convertira la " "valeur en valeur négative. Vérifiez le code CNC résultant (Gcode, etc.)." -#: camlib.py:3644 camlib.py:4014 +#: camlib.py:3639 camlib.py:4026 msgid "Travel Z parameter is None or zero." msgstr "Le paramètre Voyage Z est Aucun ou zéro." -#: camlib.py:3649 camlib.py:4019 +#: camlib.py:3644 camlib.py:4031 msgid "" "The Travel Z parameter has negative value. It is the height value to travel " "between cuts.\n" @@ -3334,34 +2856,34 @@ msgstr "" "s'agisse d'une faute de frappe. Par conséquent, l'application convertira la " "valeur en valeur positive. Vérifiez le code CNC résultant (Gcode, etc.)." -#: camlib.py:3657 camlib.py:4027 +#: camlib.py:3652 camlib.py:4039 msgid "The Z Travel parameter is zero. This is dangerous, skipping file" msgstr "Le paramètre Z voyage est zéro. Ceci est dangereux, ignorer le fichier" -#: camlib.py:3676 camlib.py:4050 +#: camlib.py:3671 camlib.py:4062 msgid "Indexing geometry before generating G-Code..." msgstr "Indexer la géométrie avant de générer le code G ..." -#: camlib.py:3820 camlib.py:4192 +#: camlib.py:3815 camlib.py:4204 msgid "Finished G-Code generation" msgstr "Génération de code G terminée" -#: camlib.py:3820 +#: camlib.py:3815 msgid "paths traced" msgstr "chemins tracés" -#: camlib.py:3853 +#: camlib.py:3865 msgid "Expected a Geometry, got" msgstr "Attendait une géométrie, eu" -#: camlib.py:3860 +#: camlib.py:3872 msgid "" "Trying to generate a CNC Job from a Geometry object without solid_geometry." msgstr "" "Essayer de générer un travail CNC à partir d'un objet de géométrie sans " "solid_geometry." -#: camlib.py:3901 +#: camlib.py:3913 msgid "" "The Tool Offset value is too negative to use for the current_geometry.\n" "Raise the value (in module) and try again." @@ -3370,185 +2892,185 @@ msgstr "" "utilisée pour current_geometry.\n" "Augmentez la valeur (dans le module) et essayez à nouveau." -#: camlib.py:4192 +#: camlib.py:4204 msgid " paths traced." msgstr " chemins tracés." -#: camlib.py:4220 +#: camlib.py:4232 msgid "There is no tool data in the SolderPaste geometry." msgstr "Il n'y a pas de données d'outil dans la géométrie SolderPaste." -#: camlib.py:4306 -msgid "Finished SolderPste G-Code generation" +#: camlib.py:4321 +msgid "Finished SolderPaste G-Code generation" msgstr "Génération de G-Code SolderPaste fini" -#: camlib.py:4306 +#: camlib.py:4321 msgid "paths traced." msgstr "chemins tracés." -#: camlib.py:4566 +#: camlib.py:4581 msgid "Parsing GCode file. Number of lines" msgstr "Analyse du fichier GCode. Nombre de lignes" -#: camlib.py:4673 +#: camlib.py:4688 msgid "Creating Geometry from the parsed GCode file. " msgstr "Création d'une géométrie à partir du fichier GCode analysé. " -#: camlib.py:4816 camlib.py:5101 camlib.py:5204 camlib.py:5360 +#: camlib.py:4831 camlib.py:5123 camlib.py:5234 camlib.py:5390 msgid "G91 coordinates not implemented ..." msgstr "Coordonnées G91 non implémentées ..." -#: camlib.py:4948 +#: camlib.py:4963 msgid "Unifying Geometry from parsed Geometry segments" msgstr "Unifier la géométrie à partir de segments de géométrie analysés" -#: flatcamEditors/FlatCAMExcEditor.py:51 flatcamEditors/FlatCAMExcEditor.py:75 -#: flatcamEditors/FlatCAMExcEditor.py:169 -#: flatcamEditors/FlatCAMExcEditor.py:386 -#: flatcamEditors/FlatCAMExcEditor.py:590 +#: flatcamEditors/FlatCAMExcEditor.py:50 flatcamEditors/FlatCAMExcEditor.py:74 +#: flatcamEditors/FlatCAMExcEditor.py:168 +#: flatcamEditors/FlatCAMExcEditor.py:385 +#: flatcamEditors/FlatCAMExcEditor.py:589 #: flatcamEditors/FlatCAMGrbEditor.py:241 #: flatcamEditors/FlatCAMGrbEditor.py:248 msgid "Click to place ..." msgstr "Cliquez pour placer ..." -#: flatcamEditors/FlatCAMExcEditor.py:59 +#: flatcamEditors/FlatCAMExcEditor.py:58 msgid "To add a drill first select a tool" msgstr "Pour ajouter une perceuse, sélectionnez d'abord un outil" -#: flatcamEditors/FlatCAMExcEditor.py:123 +#: flatcamEditors/FlatCAMExcEditor.py:122 msgid "Done. Drill added." msgstr "Terminé. Drill ajouté." -#: flatcamEditors/FlatCAMExcEditor.py:177 +#: flatcamEditors/FlatCAMExcEditor.py:176 msgid "To add an Drill Array first select a tool in Tool Table" msgstr "" "Pour ajouter une matrice de forage, sélectionnez d'abord un outil dans la " "Table d'Outils" -#: flatcamEditors/FlatCAMExcEditor.py:193 -#: flatcamEditors/FlatCAMExcEditor.py:416 -#: flatcamEditors/FlatCAMExcEditor.py:637 -#: flatcamEditors/FlatCAMExcEditor.py:1152 -#: flatcamEditors/FlatCAMExcEditor.py:1179 +#: flatcamEditors/FlatCAMExcEditor.py:192 +#: flatcamEditors/FlatCAMExcEditor.py:415 +#: flatcamEditors/FlatCAMExcEditor.py:636 +#: flatcamEditors/FlatCAMExcEditor.py:1151 +#: flatcamEditors/FlatCAMExcEditor.py:1178 #: flatcamEditors/FlatCAMGrbEditor.py:471 #: flatcamEditors/FlatCAMGrbEditor.py:1935 #: flatcamEditors/FlatCAMGrbEditor.py:1965 msgid "Click on target location ..." msgstr "Cliquez sur l'emplacement cible ..." -#: flatcamEditors/FlatCAMExcEditor.py:212 +#: flatcamEditors/FlatCAMExcEditor.py:211 msgid "Click on the Drill Circular Array Start position" msgstr "Cliquez sur la position de départ du tableau de forage circulaire" -#: flatcamEditors/FlatCAMExcEditor.py:234 -#: flatcamEditors/FlatCAMExcEditor.py:678 +#: flatcamEditors/FlatCAMExcEditor.py:233 +#: flatcamEditors/FlatCAMExcEditor.py:677 #: flatcamEditors/FlatCAMGrbEditor.py:516 msgid "The value is not Float. Check for comma instead of dot separator." msgstr "" "La valeur n'est pas réelle. Vérifiez la virgule au lieu du séparateur de " "points." -#: flatcamEditors/FlatCAMExcEditor.py:238 +#: flatcamEditors/FlatCAMExcEditor.py:237 msgid "The value is mistyped. Check the value" msgstr "La valeur est mal typée. Vérifiez la valeur" -#: flatcamEditors/FlatCAMExcEditor.py:337 +#: flatcamEditors/FlatCAMExcEditor.py:336 msgid "Too many drills for the selected spacing angle." msgstr "Trop de forages pour l'angle d'espacement sélectionné." -#: flatcamEditors/FlatCAMExcEditor.py:355 +#: flatcamEditors/FlatCAMExcEditor.py:354 msgid "Done. Drill Array added." msgstr "Terminé. Tableau de forage ajouté." -#: flatcamEditors/FlatCAMExcEditor.py:395 +#: flatcamEditors/FlatCAMExcEditor.py:394 msgid "To add a slot first select a tool" msgstr "Pour ajouter un trou de fente, sélectionnez d'abord un outil" -#: flatcamEditors/FlatCAMExcEditor.py:455 -#: flatcamEditors/FlatCAMExcEditor.py:462 -#: flatcamEditors/FlatCAMExcEditor.py:743 -#: flatcamEditors/FlatCAMExcEditor.py:750 +#: flatcamEditors/FlatCAMExcEditor.py:454 +#: flatcamEditors/FlatCAMExcEditor.py:461 +#: flatcamEditors/FlatCAMExcEditor.py:742 +#: flatcamEditors/FlatCAMExcEditor.py:749 msgid "Value is missing or wrong format. Add it and retry." msgstr "Valeur manquante ou format incorrect. Ajoutez-le et réessayez." -#: flatcamEditors/FlatCAMExcEditor.py:560 +#: flatcamEditors/FlatCAMExcEditor.py:559 msgid "Done. Adding Slot completed." msgstr "Terminé. Ajout de la fente terminée." -#: flatcamEditors/FlatCAMExcEditor.py:598 +#: flatcamEditors/FlatCAMExcEditor.py:597 msgid "To add an Slot Array first select a tool in Tool Table" msgstr "" "Pour ajouter un tableau de trous de fente, sélectionnez d'abord un outil " "dans la table d'outils" -#: flatcamEditors/FlatCAMExcEditor.py:656 +#: flatcamEditors/FlatCAMExcEditor.py:655 msgid "Click on the Slot Circular Array Start position" msgstr "" "Cliquez sur la position de départ de la matrice circulaire du trou de fente" -#: flatcamEditors/FlatCAMExcEditor.py:681 +#: flatcamEditors/FlatCAMExcEditor.py:680 #: flatcamEditors/FlatCAMGrbEditor.py:519 msgid "The value is mistyped. Check the value." msgstr "La valeur est mal typée. Vérifiez la valeur." -#: flatcamEditors/FlatCAMExcEditor.py:860 +#: flatcamEditors/FlatCAMExcEditor.py:859 msgid "Too many Slots for the selected spacing angle." msgstr "Trop de trous de fente pour l'angle d'espacement sélectionné." -#: flatcamEditors/FlatCAMExcEditor.py:883 +#: flatcamEditors/FlatCAMExcEditor.py:882 msgid "Done. Slot Array added." msgstr "Terminé. Tableau de trous de fente ajouté." -#: flatcamEditors/FlatCAMExcEditor.py:905 +#: flatcamEditors/FlatCAMExcEditor.py:904 msgid "Click on the Drill(s) to resize ..." msgstr "Cliquez sur les forets pour redimensionner ..." -#: flatcamEditors/FlatCAMExcEditor.py:935 +#: flatcamEditors/FlatCAMExcEditor.py:934 msgid "Resize drill(s) failed. Please enter a diameter for resize." msgstr "" "Redimensionner les trous de forage a échoué. Veuillez entrer un diamètre " "pour le redimensionner." -#: flatcamEditors/FlatCAMExcEditor.py:1113 +#: flatcamEditors/FlatCAMExcEditor.py:1112 msgid "Done. Drill/Slot Resize completed." msgstr "" "Terminé. Le redimensionnement des trous de forage / rainure est terminé." -#: flatcamEditors/FlatCAMExcEditor.py:1116 +#: flatcamEditors/FlatCAMExcEditor.py:1115 msgid "Cancelled. No drills/slots selected for resize ..." msgstr "" "Annulé. Aucun trou de perçage / rainure sélectionné pour le " "redimensionnement ..." -#: flatcamEditors/FlatCAMExcEditor.py:1154 +#: flatcamEditors/FlatCAMExcEditor.py:1153 #: flatcamEditors/FlatCAMGrbEditor.py:1937 msgid "Click on reference location ..." msgstr "Cliquez sur l'emplacement de référence ..." -#: flatcamEditors/FlatCAMExcEditor.py:1211 +#: flatcamEditors/FlatCAMExcEditor.py:1210 msgid "Done. Drill(s) Move completed." msgstr "Terminé. Foret (s) Déplacement terminé." -#: flatcamEditors/FlatCAMExcEditor.py:1319 +#: flatcamEditors/FlatCAMExcEditor.py:1318 msgid "Done. Drill(s) copied." msgstr "Terminé. Percer des trous copiés." -#: flatcamEditors/FlatCAMExcEditor.py:1558 flatcamGUI/PreferencesUI.py:3829 +#: flatcamEditors/FlatCAMExcEditor.py:1557 flatcamGUI/PreferencesUI.py:3829 msgid "Excellon Editor" msgstr "Excellent éditeur" -#: flatcamEditors/FlatCAMExcEditor.py:1565 +#: flatcamEditors/FlatCAMExcEditor.py:1564 #: flatcamEditors/FlatCAMGrbEditor.py:2460 msgid "Name:" msgstr "Nom:" -#: flatcamEditors/FlatCAMExcEditor.py:1571 flatcamGUI/ObjectUI.py:760 -#: flatcamGUI/ObjectUI.py:1463 flatcamTools/ToolNCC.py:120 -#: flatcamTools/ToolPaint.py:115 flatcamTools/ToolSolderPaste.py:75 +#: flatcamEditors/FlatCAMExcEditor.py:1570 flatcamGUI/ObjectUI.py:760 +#: flatcamGUI/ObjectUI.py:1464 flatcamTools/ToolNCC.py:120 +#: flatcamTools/ToolPaint.py:115 flatcamTools/ToolSolderPaste.py:74 msgid "Tools Table" msgstr "Tableau des outils" -#: flatcamEditors/FlatCAMExcEditor.py:1573 flatcamGUI/ObjectUI.py:762 +#: flatcamEditors/FlatCAMExcEditor.py:1572 flatcamGUI/ObjectUI.py:762 msgid "" "Tools in this Excellon object\n" "when are used for drilling." @@ -3556,11 +3078,22 @@ msgstr "" "Outils dans cet objet Excellon\n" "quand sont utilisés pour le forage." -#: flatcamEditors/FlatCAMExcEditor.py:1593 +#: flatcamEditors/FlatCAMExcEditor.py:1584 +#: flatcamEditors/FlatCAMExcEditor.py:3066 flatcamGUI/ObjectUI.py:780 +#: flatcamObjects/FlatCAMExcellon.py:1098 +#: flatcamObjects/FlatCAMExcellon.py:1188 +#: flatcamObjects/FlatCAMExcellon.py:1373 flatcamTools/ToolNCC.py:132 +#: flatcamTools/ToolPaint.py:128 flatcamTools/ToolPcbWizard.py:76 +#: flatcamTools/ToolProperties.py:416 flatcamTools/ToolProperties.py:476 +#: flatcamTools/ToolSolderPaste.py:85 tclCommands/TclCommandDrillcncjob.py:193 +msgid "Diameter" +msgstr "Diamètre" + +#: flatcamEditors/FlatCAMExcEditor.py:1592 msgid "Add/Delete Tool" msgstr "Ajouter / Supprimer un outil" -#: flatcamEditors/FlatCAMExcEditor.py:1595 +#: flatcamEditors/FlatCAMExcEditor.py:1594 msgid "" "Add/Delete a tool to the tool list\n" "for this Excellon object." @@ -3568,16 +3101,16 @@ msgstr "" "Ajouter / Supprimer un outil à la liste d'outils\n" "pour cet objet Excellon." -#: flatcamEditors/FlatCAMExcEditor.py:1607 flatcamGUI/ObjectUI.py:1583 +#: flatcamEditors/FlatCAMExcEditor.py:1606 flatcamGUI/ObjectUI.py:1584 #: flatcamGUI/PreferencesUI.py:3860 msgid "Diameter for the new tool" msgstr "Diamètre pour le nouvel outil" -#: flatcamEditors/FlatCAMExcEditor.py:1617 +#: flatcamEditors/FlatCAMExcEditor.py:1616 msgid "Add Tool" msgstr "Ajouter un Outil" -#: flatcamEditors/FlatCAMExcEditor.py:1619 +#: flatcamEditors/FlatCAMExcEditor.py:1618 msgid "" "Add a new tool to the tool list\n" "with the diameter specified above." @@ -3585,11 +3118,11 @@ msgstr "" "Ajouter un nouvel outil à la liste d'outils\n" "avec le diamètre spécifié ci-dessus." -#: flatcamEditors/FlatCAMExcEditor.py:1631 +#: flatcamEditors/FlatCAMExcEditor.py:1630 msgid "Delete Tool" msgstr "Supprimer l'outil" -#: flatcamEditors/FlatCAMExcEditor.py:1633 +#: flatcamEditors/FlatCAMExcEditor.py:1632 msgid "" "Delete a tool in the tool list\n" "by selecting a row in the tool table." @@ -3597,40 +3130,40 @@ msgstr "" "Supprimer un outil dans la liste des outils\n" "en sélectionnant une ligne dans la table d'outils." -#: flatcamEditors/FlatCAMExcEditor.py:1651 flatcamGUI/FlatCAMGUI.py:2004 +#: flatcamEditors/FlatCAMExcEditor.py:1650 flatcamGUI/FlatCAMGUI.py:2004 msgid "Resize Drill(s)" msgstr "Redim. les Forets" -#: flatcamEditors/FlatCAMExcEditor.py:1653 +#: flatcamEditors/FlatCAMExcEditor.py:1652 msgid "Resize a drill or a selection of drills." msgstr "Redimensionnez une perceuse ou une sélection d'exercices." -#: flatcamEditors/FlatCAMExcEditor.py:1660 +#: flatcamEditors/FlatCAMExcEditor.py:1659 msgid "Resize Dia" msgstr "Redim. le dia" -#: flatcamEditors/FlatCAMExcEditor.py:1662 +#: flatcamEditors/FlatCAMExcEditor.py:1661 msgid "Diameter to resize to." msgstr "Diamètre à redimensionner." -#: flatcamEditors/FlatCAMExcEditor.py:1673 +#: flatcamEditors/FlatCAMExcEditor.py:1672 msgid "Resize" msgstr "Redimensionner" -#: flatcamEditors/FlatCAMExcEditor.py:1675 +#: flatcamEditors/FlatCAMExcEditor.py:1674 msgid "Resize drill(s)" msgstr "Redimensionner les forets" -#: flatcamEditors/FlatCAMExcEditor.py:1700 flatcamGUI/FlatCAMGUI.py:2003 +#: flatcamEditors/FlatCAMExcEditor.py:1699 flatcamGUI/FlatCAMGUI.py:2003 #: flatcamGUI/FlatCAMGUI.py:2255 msgid "Add Drill Array" msgstr "Ajouter un Tableau de Forage" -#: flatcamEditors/FlatCAMExcEditor.py:1702 +#: flatcamEditors/FlatCAMExcEditor.py:1701 msgid "Add an array of drills (linear or circular array)" msgstr "Ajouter un tableau de trous de forage (tableau linéaire ou circulaire)" -#: flatcamEditors/FlatCAMExcEditor.py:1708 +#: flatcamEditors/FlatCAMExcEditor.py:1707 msgid "" "Select the type of drills array to create.\n" "It can be Linear X(Y) or Circular" @@ -3638,14 +3171,14 @@ msgstr "" "Sélectionnez le type de matrice de trous à créer.\n" "Il peut être Linéaire X (Y) ou Circulaire" -#: flatcamEditors/FlatCAMExcEditor.py:1711 -#: flatcamEditors/FlatCAMExcEditor.py:1925 +#: flatcamEditors/FlatCAMExcEditor.py:1710 +#: flatcamEditors/FlatCAMExcEditor.py:1924 #: flatcamEditors/FlatCAMGrbEditor.py:2772 msgid "Linear" msgstr "Linéaire" -#: flatcamEditors/FlatCAMExcEditor.py:1712 -#: flatcamEditors/FlatCAMExcEditor.py:1926 +#: flatcamEditors/FlatCAMExcEditor.py:1711 +#: flatcamEditors/FlatCAMExcEditor.py:1925 #: flatcamEditors/FlatCAMGrbEditor.py:2773 flatcamGUI/ObjectUI.py:315 #: flatcamGUI/PreferencesUI.py:5340 flatcamGUI/PreferencesUI.py:5909 #: flatcamGUI/PreferencesUI.py:7971 flatcamGUI/PreferencesUI.py:8151 @@ -3657,27 +3190,27 @@ msgstr "Linéaire" msgid "Circular" msgstr "Circulaire" -#: flatcamEditors/FlatCAMExcEditor.py:1720 flatcamGUI/PreferencesUI.py:3871 +#: flatcamEditors/FlatCAMExcEditor.py:1719 flatcamGUI/PreferencesUI.py:3871 msgid "Nr of drills" msgstr "Nb de Forages" -#: flatcamEditors/FlatCAMExcEditor.py:1721 flatcamGUI/PreferencesUI.py:3873 +#: flatcamEditors/FlatCAMExcEditor.py:1720 flatcamGUI/PreferencesUI.py:3873 msgid "Specify how many drills to be in the array." msgstr "Spécifiez combien d'exercices doivent figurer dans le tableau." -#: flatcamEditors/FlatCAMExcEditor.py:1739 -#: flatcamEditors/FlatCAMExcEditor.py:1789 -#: flatcamEditors/FlatCAMExcEditor.py:1861 -#: flatcamEditors/FlatCAMExcEditor.py:1954 -#: flatcamEditors/FlatCAMExcEditor.py:2005 +#: flatcamEditors/FlatCAMExcEditor.py:1738 +#: flatcamEditors/FlatCAMExcEditor.py:1788 +#: flatcamEditors/FlatCAMExcEditor.py:1860 +#: flatcamEditors/FlatCAMExcEditor.py:1953 +#: flatcamEditors/FlatCAMExcEditor.py:2004 #: flatcamEditors/FlatCAMGrbEditor.py:1571 #: flatcamEditors/FlatCAMGrbEditor.py:2801 #: flatcamEditors/FlatCAMGrbEditor.py:2850 flatcamGUI/PreferencesUI.py:3981 msgid "Direction" msgstr "Direction" -#: flatcamEditors/FlatCAMExcEditor.py:1741 -#: flatcamEditors/FlatCAMExcEditor.py:1956 +#: flatcamEditors/FlatCAMExcEditor.py:1740 +#: flatcamEditors/FlatCAMExcEditor.py:1955 #: flatcamEditors/FlatCAMGrbEditor.py:2803 flatcamGUI/PreferencesUI.py:2718 #: flatcamGUI/PreferencesUI.py:3889 flatcamGUI/PreferencesUI.py:4037 msgid "" @@ -3691,9 +3224,9 @@ msgstr "" "- 'Y' - axe vertical ou\n" "- 'Angle' - un angle personnalisé pour l'inclinaison du tableau" -#: flatcamEditors/FlatCAMExcEditor.py:1748 -#: flatcamEditors/FlatCAMExcEditor.py:1870 -#: flatcamEditors/FlatCAMExcEditor.py:1963 +#: flatcamEditors/FlatCAMExcEditor.py:1747 +#: flatcamEditors/FlatCAMExcEditor.py:1869 +#: flatcamEditors/FlatCAMExcEditor.py:1962 #: flatcamEditors/FlatCAMGrbEditor.py:2810 flatcamGUI/PreferencesUI.py:2724 #: flatcamGUI/PreferencesUI.py:3895 flatcamGUI/PreferencesUI.py:3990 #: flatcamGUI/PreferencesUI.py:4043 flatcamGUI/PreferencesUI.py:6341 @@ -3701,9 +3234,9 @@ msgstr "" msgid "X" msgstr "X" -#: flatcamEditors/FlatCAMExcEditor.py:1749 -#: flatcamEditors/FlatCAMExcEditor.py:1871 -#: flatcamEditors/FlatCAMExcEditor.py:1964 +#: flatcamEditors/FlatCAMExcEditor.py:1748 +#: flatcamEditors/FlatCAMExcEditor.py:1870 +#: flatcamEditors/FlatCAMExcEditor.py:1963 #: flatcamEditors/FlatCAMGrbEditor.py:2811 flatcamGUI/PreferencesUI.py:2725 #: flatcamGUI/PreferencesUI.py:3896 flatcamGUI/PreferencesUI.py:3991 #: flatcamGUI/PreferencesUI.py:4044 flatcamGUI/PreferencesUI.py:6342 @@ -3711,14 +3244,14 @@ msgstr "X" msgid "Y" msgstr "Y" -#: flatcamEditors/FlatCAMExcEditor.py:1750 -#: flatcamEditors/FlatCAMExcEditor.py:1767 -#: flatcamEditors/FlatCAMExcEditor.py:1801 -#: flatcamEditors/FlatCAMExcEditor.py:1872 -#: flatcamEditors/FlatCAMExcEditor.py:1876 -#: flatcamEditors/FlatCAMExcEditor.py:1965 -#: flatcamEditors/FlatCAMExcEditor.py:1983 -#: flatcamEditors/FlatCAMExcEditor.py:2017 +#: flatcamEditors/FlatCAMExcEditor.py:1749 +#: flatcamEditors/FlatCAMExcEditor.py:1766 +#: flatcamEditors/FlatCAMExcEditor.py:1800 +#: flatcamEditors/FlatCAMExcEditor.py:1871 +#: flatcamEditors/FlatCAMExcEditor.py:1875 +#: flatcamEditors/FlatCAMExcEditor.py:1964 +#: flatcamEditors/FlatCAMExcEditor.py:1982 +#: flatcamEditors/FlatCAMExcEditor.py:2016 #: flatcamEditors/FlatCAMGrbEditor.py:2812 #: flatcamEditors/FlatCAMGrbEditor.py:2829 #: flatcamEditors/FlatCAMGrbEditor.py:2865 flatcamGUI/PreferencesUI.py:2726 @@ -3727,26 +3260,26 @@ msgstr "Y" #: flatcamGUI/PreferencesUI.py:3997 flatcamGUI/PreferencesUI.py:4045 #: flatcamGUI/PreferencesUI.py:4066 flatcamGUI/PreferencesUI.py:6733 #: flatcamTools/ToolDistance.py:120 flatcamTools/ToolDistanceMin.py:69 -#: flatcamTools/ToolTransform.py:61 +#: flatcamTools/ToolTransform.py:60 msgid "Angle" msgstr "Angle" -#: flatcamEditors/FlatCAMExcEditor.py:1754 -#: flatcamEditors/FlatCAMExcEditor.py:1969 +#: flatcamEditors/FlatCAMExcEditor.py:1753 +#: flatcamEditors/FlatCAMExcEditor.py:1968 #: flatcamEditors/FlatCAMGrbEditor.py:2816 flatcamGUI/PreferencesUI.py:2732 #: flatcamGUI/PreferencesUI.py:3903 flatcamGUI/PreferencesUI.py:4051 msgid "Pitch" msgstr "Pas" -#: flatcamEditors/FlatCAMExcEditor.py:1756 -#: flatcamEditors/FlatCAMExcEditor.py:1971 +#: flatcamEditors/FlatCAMExcEditor.py:1755 +#: flatcamEditors/FlatCAMExcEditor.py:1970 #: flatcamEditors/FlatCAMGrbEditor.py:2818 flatcamGUI/PreferencesUI.py:2734 #: flatcamGUI/PreferencesUI.py:3905 flatcamGUI/PreferencesUI.py:4053 msgid "Pitch = Distance between elements of the array." msgstr "Pas = Distance entre les éléments du tableau." -#: flatcamEditors/FlatCAMExcEditor.py:1769 -#: flatcamEditors/FlatCAMExcEditor.py:1985 +#: flatcamEditors/FlatCAMExcEditor.py:1768 +#: flatcamEditors/FlatCAMExcEditor.py:1984 msgid "" "Angle at which the linear array is placed.\n" "The precision is of max 2 decimals.\n" @@ -3758,8 +3291,8 @@ msgstr "" "La valeur minimale est: -360 degrés.\n" "La valeur maximale est: 360,00 degrés." -#: flatcamEditors/FlatCAMExcEditor.py:1790 -#: flatcamEditors/FlatCAMExcEditor.py:2006 +#: flatcamEditors/FlatCAMExcEditor.py:1789 +#: flatcamEditors/FlatCAMExcEditor.py:2005 #: flatcamEditors/FlatCAMGrbEditor.py:2852 msgid "" "Direction for circular array.Can be CW = clockwise or CCW = counter " @@ -3768,24 +3301,24 @@ msgstr "" "Direction pour tableau circulaire. Peut être CW = sens horaire ou CCW = sens " "antihoraire." -#: flatcamEditors/FlatCAMExcEditor.py:1797 -#: flatcamEditors/FlatCAMExcEditor.py:2013 +#: flatcamEditors/FlatCAMExcEditor.py:1796 +#: flatcamEditors/FlatCAMExcEditor.py:2012 #: flatcamEditors/FlatCAMGrbEditor.py:2860 flatcamGUI/PreferencesUI.py:2766 #: flatcamGUI/PreferencesUI.py:3646 flatcamGUI/PreferencesUI.py:3939 #: flatcamGUI/PreferencesUI.py:4089 flatcamGUI/PreferencesUI.py:4581 msgid "CW" msgstr "CW" -#: flatcamEditors/FlatCAMExcEditor.py:1798 -#: flatcamEditors/FlatCAMExcEditor.py:2014 +#: flatcamEditors/FlatCAMExcEditor.py:1797 +#: flatcamEditors/FlatCAMExcEditor.py:2013 #: flatcamEditors/FlatCAMGrbEditor.py:2861 flatcamGUI/PreferencesUI.py:2767 #: flatcamGUI/PreferencesUI.py:3647 flatcamGUI/PreferencesUI.py:3940 #: flatcamGUI/PreferencesUI.py:4090 flatcamGUI/PreferencesUI.py:4582 msgid "CCW" msgstr "CCW" -#: flatcamEditors/FlatCAMExcEditor.py:1802 -#: flatcamEditors/FlatCAMExcEditor.py:2018 +#: flatcamEditors/FlatCAMExcEditor.py:1801 +#: flatcamEditors/FlatCAMExcEditor.py:2017 #: flatcamEditors/FlatCAMGrbEditor.py:2867 flatcamGUI/PreferencesUI.py:2746 #: flatcamGUI/PreferencesUI.py:2775 flatcamGUI/PreferencesUI.py:3918 #: flatcamGUI/PreferencesUI.py:3948 flatcamGUI/PreferencesUI.py:4068 @@ -3793,11 +3326,11 @@ msgstr "CCW" msgid "Angle at which each element in circular array is placed." msgstr "Angle auquel chaque élément du tableau circulaire est placé." -#: flatcamEditors/FlatCAMExcEditor.py:1836 +#: flatcamEditors/FlatCAMExcEditor.py:1835 msgid "Slot Parameters" msgstr "Paramètres de Fente" -#: flatcamEditors/FlatCAMExcEditor.py:1838 +#: flatcamEditors/FlatCAMExcEditor.py:1837 msgid "" "Parameters for adding a slot (hole with oval shape)\n" "either single or as an part of an array." @@ -3805,16 +3338,16 @@ msgstr "" "Paramètres pour l'ajout d'une fente (trou de forme ovale)\n" "soit seul, soit faisant partie d'un tableau." -#: flatcamEditors/FlatCAMExcEditor.py:1847 flatcamGUI/PreferencesUI.py:3965 +#: flatcamEditors/FlatCAMExcEditor.py:1846 flatcamGUI/PreferencesUI.py:3965 #: flatcamTools/ToolProperties.py:559 msgid "Length" msgstr "Longueur" -#: flatcamEditors/FlatCAMExcEditor.py:1849 flatcamGUI/PreferencesUI.py:3967 +#: flatcamEditors/FlatCAMExcEditor.py:1848 flatcamGUI/PreferencesUI.py:3967 msgid "Length = The length of the slot." msgstr "Longueur = La longueur de la fente." -#: flatcamEditors/FlatCAMExcEditor.py:1863 flatcamGUI/PreferencesUI.py:3983 +#: flatcamEditors/FlatCAMExcEditor.py:1862 flatcamGUI/PreferencesUI.py:3983 msgid "" "Direction on which the slot is oriented:\n" "- 'X' - horizontal axis \n" @@ -3826,7 +3359,7 @@ msgstr "" "- 'Y' - axe vertical ou\n" "- 'Angle' - un angle personnalisé pour l'inclinaison de la fente" -#: flatcamEditors/FlatCAMExcEditor.py:1878 +#: flatcamEditors/FlatCAMExcEditor.py:1877 msgid "" "Angle at which the slot is placed.\n" "The precision is of max 2 decimals.\n" @@ -3838,15 +3371,15 @@ msgstr "" "La valeur minimale est: -360 degrés.\n" "La valeur maximale est: 360,00 degrés." -#: flatcamEditors/FlatCAMExcEditor.py:1911 +#: flatcamEditors/FlatCAMExcEditor.py:1910 msgid "Slot Array Parameters" msgstr "Param. de la Matrice de Fentes" -#: flatcamEditors/FlatCAMExcEditor.py:1913 +#: flatcamEditors/FlatCAMExcEditor.py:1912 msgid "Parameters for the array of slots (linear or circular array)" msgstr "Paramètres pour la Matrice de Fente (matrice linéaire ou circulaire)" -#: flatcamEditors/FlatCAMExcEditor.py:1922 +#: flatcamEditors/FlatCAMExcEditor.py:1921 msgid "" "Select the type of slot array to create.\n" "It can be Linear X(Y) or Circular" @@ -3854,15 +3387,41 @@ msgstr "" "Sélectionnez le type de matrice à percer.\n" "Il peut être linéaire X (Y) ou circulaire" -#: flatcamEditors/FlatCAMExcEditor.py:1934 flatcamGUI/PreferencesUI.py:4022 +#: flatcamEditors/FlatCAMExcEditor.py:1933 flatcamGUI/PreferencesUI.py:4022 msgid "Nr of slots" msgstr "Nb de Fentes" -#: flatcamEditors/FlatCAMExcEditor.py:1935 flatcamGUI/PreferencesUI.py:4024 +#: flatcamEditors/FlatCAMExcEditor.py:1934 flatcamGUI/PreferencesUI.py:4024 msgid "Specify how many slots to be in the array." msgstr "Spécifiez le nombre de Fente dans le Tableau." -#: flatcamEditors/FlatCAMExcEditor.py:2571 +#: flatcamEditors/FlatCAMExcEditor.py:2452 +#: flatcamObjects/FlatCAMExcellon.py:410 +msgid "Total Drills" +msgstr "Total Forage" + +#: flatcamEditors/FlatCAMExcEditor.py:2484 +#: flatcamObjects/FlatCAMExcellon.py:441 +msgid "Total Slots" +msgstr "Total de Fentes" + +#: flatcamEditors/FlatCAMExcEditor.py:2559 +#: flatcamEditors/FlatCAMGeoEditor.py:1076 +#: flatcamEditors/FlatCAMGeoEditor.py:1117 +#: flatcamEditors/FlatCAMGeoEditor.py:1145 +#: flatcamEditors/FlatCAMGeoEditor.py:1173 +#: flatcamEditors/FlatCAMGeoEditor.py:1217 +#: flatcamEditors/FlatCAMGeoEditor.py:1252 +#: flatcamEditors/FlatCAMGeoEditor.py:1280 +#: flatcamObjects/FlatCAMGeometry.py:571 flatcamObjects/FlatCAMGeometry.py:1005 +#: flatcamObjects/FlatCAMGeometry.py:1726 +#: flatcamObjects/FlatCAMGeometry.py:2370 flatcamTools/ToolNCC.py:1493 +#: flatcamTools/ToolPaint.py:1244 flatcamTools/ToolPaint.py:1415 +#: flatcamTools/ToolSolderPaste.py:883 flatcamTools/ToolSolderPaste.py:956 +msgid "Wrong value format entered, use a number." +msgstr "Mauvais format de valeur entré, utilisez un nombre." + +#: flatcamEditors/FlatCAMExcEditor.py:2570 msgid "" "Tool already in the original or actual tool list.\n" "Save and reedit Excellon if you need to add this tool. " @@ -3870,82 +3429,82 @@ msgstr "" "Outil déjà dans la liste d'outils d'origine ou réelle.\n" "Enregistrez et rééditez Excellon si vous devez ajouter cet outil. " -#: flatcamEditors/FlatCAMExcEditor.py:2580 flatcamGUI/FlatCAMGUI.py:4009 +#: flatcamEditors/FlatCAMExcEditor.py:2579 flatcamGUI/FlatCAMGUI.py:4009 msgid "Added new tool with dia" msgstr "Ajout d'un nouvel outil avec dia" -#: flatcamEditors/FlatCAMExcEditor.py:2613 +#: flatcamEditors/FlatCAMExcEditor.py:2612 msgid "Select a tool in Tool Table" msgstr "Sélectionner un outil dans la table d'outils" -#: flatcamEditors/FlatCAMExcEditor.py:2643 +#: flatcamEditors/FlatCAMExcEditor.py:2642 msgid "Deleted tool with diameter" msgstr "Outil supprimé avec diamètre" -#: flatcamEditors/FlatCAMExcEditor.py:2793 +#: flatcamEditors/FlatCAMExcEditor.py:2790 msgid "Done. Tool edit completed." msgstr "Terminé. L'édition de l'outil est terminée." -#: flatcamEditors/FlatCAMExcEditor.py:3350 +#: flatcamEditors/FlatCAMExcEditor.py:3352 msgid "There are no Tools definitions in the file. Aborting Excellon creation." msgstr "" "Il n'y a pas de définition d'outils dans le fichier. Abandon de la création " "Excellon." -#: flatcamEditors/FlatCAMExcEditor.py:3354 +#: flatcamEditors/FlatCAMExcEditor.py:3356 msgid "An internal error has ocurred. See Shell.\n" msgstr "Une erreur interne s'est produite. Voir Shell.\n" -#: flatcamEditors/FlatCAMExcEditor.py:3359 +#: flatcamEditors/FlatCAMExcEditor.py:3361 msgid "Creating Excellon." msgstr "Créer Excellon." -#: flatcamEditors/FlatCAMExcEditor.py:3371 +#: flatcamEditors/FlatCAMExcEditor.py:3373 msgid "Excellon editing finished." msgstr "Excellon édition terminée." -#: flatcamEditors/FlatCAMExcEditor.py:3388 +#: flatcamEditors/FlatCAMExcEditor.py:3390 msgid "Cancelled. There is no Tool/Drill selected" msgstr "Annulé. Aucun Outil/Foret sélectionné" -#: flatcamEditors/FlatCAMExcEditor.py:4001 +#: flatcamEditors/FlatCAMExcEditor.py:4003 msgid "Done. Drill(s) deleted." msgstr "Terminé. Percer des trous supprimés." -#: flatcamEditors/FlatCAMExcEditor.py:4074 -#: flatcamEditors/FlatCAMExcEditor.py:4084 +#: flatcamEditors/FlatCAMExcEditor.py:4076 +#: flatcamEditors/FlatCAMExcEditor.py:4086 #: flatcamEditors/FlatCAMGrbEditor.py:4897 msgid "Click on the circular array Center position" msgstr "Cliquez sur le tableau circulaire Position centrale" -#: flatcamEditors/FlatCAMGeoEditor.py:86 +#: flatcamEditors/FlatCAMGeoEditor.py:85 msgid "Buffer distance:" msgstr "Distance tampon:" -#: flatcamEditors/FlatCAMGeoEditor.py:87 +#: flatcamEditors/FlatCAMGeoEditor.py:86 msgid "Buffer corner:" msgstr "Coin tampon:" -#: flatcamEditors/FlatCAMGeoEditor.py:89 +#: flatcamEditors/FlatCAMGeoEditor.py:88 msgid "" "There are 3 types of corners:\n" " - 'Round': the corner is rounded for exterior buffer.\n" -" - 'Square:' the corner is met in a sharp angle for exterior buffer.\n" -" - 'Beveled:' the corner is a line that directly connects the features " +" - 'Square': the corner is met in a sharp angle for exterior buffer.\n" +" - 'Beveled': the corner is a line that directly connects the features " "meeting in the corner" msgstr "" "Il existe 3 types de coins:\n" -"  - 'Rond': le coin est arrondi pour le tampon extérieur.\n" -"  - 'Carré': le coin est formé d'un angle vif pour le tampon extérieur.\n" -"  - \"Biseauté:\" le coin est une ligne qui relie directement les " +" - 'Rond': le coin est arrondi pour le tampon extérieur.\n" +" - 'Carré': le coin est formé d'un angle vif pour le tampon extérieur.\n" +" - \"Biseauté:\" le coin est une ligne qui relie directement les " "fonctionnalités réunies dans le coin" -#: flatcamEditors/FlatCAMGeoEditor.py:95 +#: flatcamEditors/FlatCAMGeoEditor.py:94 #: flatcamEditors/FlatCAMGrbEditor.py:2628 msgid "Round" msgstr "Rond" -#: flatcamEditors/FlatCAMGeoEditor.py:96 +#: flatcamEditors/FlatCAMGeoEditor.py:95 #: flatcamEditors/FlatCAMGrbEditor.py:2629 flatcamGUI/PreferencesUI.py:5606 #: flatcamGUI/PreferencesUI.py:6130 flatcamGUI/PreferencesUI.py:7564 #: flatcamGUI/PreferencesUI.py:8167 flatcamGUI/PreferencesUI.py:8274 @@ -3957,63 +3516,72 @@ msgstr "Rond" msgid "Square" msgstr "Carré" -#: flatcamEditors/FlatCAMGeoEditor.py:97 +#: flatcamEditors/FlatCAMGeoEditor.py:96 #: flatcamEditors/FlatCAMGrbEditor.py:2630 msgid "Beveled" msgstr "Biseauté" -#: flatcamEditors/FlatCAMGeoEditor.py:104 +#: flatcamEditors/FlatCAMGeoEditor.py:103 msgid "Buffer Interior" msgstr "Tampon Intérieur" -#: flatcamEditors/FlatCAMGeoEditor.py:106 +#: flatcamEditors/FlatCAMGeoEditor.py:105 msgid "Buffer Exterior" msgstr "Tampon Extérieur" -#: flatcamEditors/FlatCAMGeoEditor.py:112 +#: flatcamEditors/FlatCAMGeoEditor.py:111 msgid "Full Buffer" msgstr "Plein tampon" -#: flatcamEditors/FlatCAMGeoEditor.py:133 -#: flatcamEditors/FlatCAMGeoEditor.py:3018 flatcamGUI/FlatCAMGUI.py:1913 +#: flatcamEditors/FlatCAMGeoEditor.py:132 +#: flatcamEditors/FlatCAMGeoEditor.py:3017 flatcamGUI/FlatCAMGUI.py:1913 #: flatcamGUI/PreferencesUI.py:2786 msgid "Buffer Tool" msgstr "Outil Tampon" -#: flatcamEditors/FlatCAMGeoEditor.py:145 -#: flatcamEditors/FlatCAMGeoEditor.py:162 -#: flatcamEditors/FlatCAMGeoEditor.py:179 -#: flatcamEditors/FlatCAMGeoEditor.py:3037 -#: flatcamEditors/FlatCAMGeoEditor.py:3065 -#: flatcamEditors/FlatCAMGeoEditor.py:3093 +#: flatcamEditors/FlatCAMGeoEditor.py:144 +#: flatcamEditors/FlatCAMGeoEditor.py:161 +#: flatcamEditors/FlatCAMGeoEditor.py:178 +#: flatcamEditors/FlatCAMGeoEditor.py:3036 +#: flatcamEditors/FlatCAMGeoEditor.py:3064 +#: flatcamEditors/FlatCAMGeoEditor.py:3092 #: flatcamEditors/FlatCAMGrbEditor.py:4950 msgid "Buffer distance value is missing or wrong format. Add it and retry." msgstr "" "La valeur de la distance tampon est un format manquant ou incorrect. Ajoutez-" "le et réessayez." -#: flatcamEditors/FlatCAMGeoEditor.py:243 +#: flatcamEditors/FlatCAMGeoEditor.py:242 msgid "Font" msgstr "Police" -#: flatcamEditors/FlatCAMGeoEditor.py:324 flatcamGUI/FlatCAMGUI.py:2193 +#: flatcamEditors/FlatCAMGeoEditor.py:323 flatcamGUI/FlatCAMGUI.py:2193 msgid "Text" msgstr "Texte" -#: flatcamEditors/FlatCAMGeoEditor.py:350 +#: flatcamEditors/FlatCAMGeoEditor.py:349 msgid "Text Tool" msgstr "Outil Texte" -#: flatcamEditors/FlatCAMGeoEditor.py:440 flatcamGUI/ObjectUI.py:363 +#: flatcamEditors/FlatCAMGeoEditor.py:405 flatcamGUI/FlatCAMGUI.py:496 +#: flatcamGUI/FlatCAMGUI.py:1143 flatcamGUI/ObjectUI.py:817 +#: flatcamGUI/ObjectUI.py:1661 flatcamObjects/FlatCAMExcellon.py:742 +#: flatcamObjects/FlatCAMExcellon.py:1084 flatcamObjects/FlatCAMGeometry.py:731 +#: flatcamTools/ToolNCC.py:331 flatcamTools/ToolNCC.py:797 +#: flatcamTools/ToolPaint.py:314 flatcamTools/ToolPaint.py:767 +msgid "Tool" +msgstr "Outil" + +#: flatcamEditors/FlatCAMGeoEditor.py:439 flatcamGUI/ObjectUI.py:363 #: flatcamGUI/PreferencesUI.py:2205 msgid "Tool dia" msgstr "Outil dia" -#: flatcamEditors/FlatCAMGeoEditor.py:442 +#: flatcamEditors/FlatCAMGeoEditor.py:441 msgid "Diameter of the tool to be used in the operation." msgstr "Diamètre de l'outil à utiliser dans l'opération." -#: flatcamEditors/FlatCAMGeoEditor.py:488 +#: flatcamEditors/FlatCAMGeoEditor.py:487 msgid "" "Algorithm to paint the polygons:\n" "- Standard: Fixed step inwards.\n" @@ -4025,91 +3593,91 @@ msgstr "" "- À base de graines: à l'extérieur des graines.\n" "- Ligne: lignes parallèles." -#: flatcamEditors/FlatCAMGeoEditor.py:507 +#: flatcamEditors/FlatCAMGeoEditor.py:506 msgid "Connect:" msgstr "Relier:" -#: flatcamEditors/FlatCAMGeoEditor.py:517 +#: flatcamEditors/FlatCAMGeoEditor.py:516 msgid "Contour:" msgstr "Contour:" -#: flatcamEditors/FlatCAMGeoEditor.py:530 flatcamGUI/FlatCAMGUI.py:2197 +#: flatcamEditors/FlatCAMGeoEditor.py:529 flatcamGUI/FlatCAMGUI.py:2197 msgid "Paint" msgstr "Peindre" -#: flatcamEditors/FlatCAMGeoEditor.py:548 flatcamGUI/FlatCAMGUI.py:909 -#: flatcamGUI/FlatCAMGUI.py:2588 flatcamGUI/ObjectUI.py:2057 +#: flatcamEditors/FlatCAMGeoEditor.py:547 flatcamGUI/FlatCAMGUI.py:909 +#: flatcamGUI/FlatCAMGUI.py:2588 flatcamGUI/ObjectUI.py:2058 #: flatcamTools/ToolPaint.py:43 flatcamTools/ToolPaint.py:738 msgid "Paint Tool" msgstr "Outil de Peinture" -#: flatcamEditors/FlatCAMGeoEditor.py:584 -#: flatcamEditors/FlatCAMGeoEditor.py:1056 -#: flatcamEditors/FlatCAMGeoEditor.py:3025 -#: flatcamEditors/FlatCAMGeoEditor.py:3053 -#: flatcamEditors/FlatCAMGeoEditor.py:3081 +#: flatcamEditors/FlatCAMGeoEditor.py:583 +#: flatcamEditors/FlatCAMGeoEditor.py:1055 +#: flatcamEditors/FlatCAMGeoEditor.py:3024 +#: flatcamEditors/FlatCAMGeoEditor.py:3052 +#: flatcamEditors/FlatCAMGeoEditor.py:3080 #: flatcamEditors/FlatCAMGeoEditor.py:4502 #: flatcamEditors/FlatCAMGrbEditor.py:5601 msgid "Cancelled. No shape selected." msgstr "Annulé. Aucune forme sélectionnée." -#: flatcamEditors/FlatCAMGeoEditor.py:597 -#: flatcamEditors/FlatCAMGeoEditor.py:3043 -#: flatcamEditors/FlatCAMGeoEditor.py:3071 -#: flatcamEditors/FlatCAMGeoEditor.py:3099 flatcamGUI/PreferencesUI.py:4149 +#: flatcamEditors/FlatCAMGeoEditor.py:596 +#: flatcamEditors/FlatCAMGeoEditor.py:3042 +#: flatcamEditors/FlatCAMGeoEditor.py:3070 +#: flatcamEditors/FlatCAMGeoEditor.py:3098 flatcamGUI/PreferencesUI.py:4149 #: flatcamTools/ToolProperties.py:117 flatcamTools/ToolProperties.py:162 msgid "Tools" msgstr "Outils" -#: flatcamEditors/FlatCAMGeoEditor.py:608 -#: flatcamEditors/FlatCAMGeoEditor.py:992 +#: flatcamEditors/FlatCAMGeoEditor.py:607 +#: flatcamEditors/FlatCAMGeoEditor.py:991 #: flatcamEditors/FlatCAMGrbEditor.py:5140 #: flatcamEditors/FlatCAMGrbEditor.py:5537 flatcamGUI/FlatCAMGUI.py:930 -#: flatcamGUI/FlatCAMGUI.py:2609 flatcamTools/ToolTransform.py:461 +#: flatcamGUI/FlatCAMGUI.py:2609 flatcamTools/ToolTransform.py:460 msgid "Transform Tool" msgstr "Outil de Transformation" -#: flatcamEditors/FlatCAMGeoEditor.py:609 -#: flatcamEditors/FlatCAMGeoEditor.py:674 +#: flatcamEditors/FlatCAMGeoEditor.py:608 +#: flatcamEditors/FlatCAMGeoEditor.py:673 #: flatcamEditors/FlatCAMGrbEditor.py:5141 #: flatcamEditors/FlatCAMGrbEditor.py:5206 flatcamGUI/PreferencesUI.py:6725 -#: flatcamTools/ToolTransform.py:25 flatcamTools/ToolTransform.py:467 +#: flatcamTools/ToolTransform.py:24 flatcamTools/ToolTransform.py:466 msgid "Rotate" msgstr "Tourner" -#: flatcamEditors/FlatCAMGeoEditor.py:610 -#: flatcamEditors/FlatCAMGrbEditor.py:5142 flatcamTools/ToolTransform.py:26 +#: flatcamEditors/FlatCAMGeoEditor.py:609 +#: flatcamEditors/FlatCAMGrbEditor.py:5142 flatcamTools/ToolTransform.py:25 msgid "Skew/Shear" msgstr "Inclinaison/Cisaillement" -#: flatcamEditors/FlatCAMGeoEditor.py:611 +#: flatcamEditors/FlatCAMGeoEditor.py:610 #: flatcamEditors/FlatCAMGrbEditor.py:2677 #: flatcamEditors/FlatCAMGrbEditor.py:5143 flatcamGUI/FlatCAMGUI.py:1048 #: flatcamGUI/FlatCAMGUI.py:2125 flatcamGUI/FlatCAMGUI.py:2240 #: flatcamGUI/FlatCAMGUI.py:2723 flatcamGUI/ObjectUI.py:124 -#: flatcamGUI/PreferencesUI.py:6775 flatcamTools/ToolTransform.py:27 +#: flatcamGUI/PreferencesUI.py:6775 flatcamTools/ToolTransform.py:26 msgid "Scale" msgstr "Mise à l'échelle" -#: flatcamEditors/FlatCAMGeoEditor.py:612 -#: flatcamEditors/FlatCAMGrbEditor.py:5144 flatcamTools/ToolTransform.py:28 +#: flatcamEditors/FlatCAMGeoEditor.py:611 +#: flatcamEditors/FlatCAMGrbEditor.py:5144 flatcamTools/ToolTransform.py:27 msgid "Mirror (Flip)" msgstr "Miroir (flip)" -#: flatcamEditors/FlatCAMGeoEditor.py:626 +#: flatcamEditors/FlatCAMGeoEditor.py:625 #: flatcamEditors/FlatCAMGrbEditor.py:5158 flatcamGUI/FlatCAMGUI.py:841 #: flatcamGUI/FlatCAMGUI.py:2524 msgid "Editor" msgstr "Éditeur" -#: flatcamEditors/FlatCAMGeoEditor.py:658 +#: flatcamEditors/FlatCAMGeoEditor.py:657 #: flatcamEditors/FlatCAMGrbEditor.py:5190 msgid "Angle:" msgstr "Angle:" -#: flatcamEditors/FlatCAMGeoEditor.py:660 +#: flatcamEditors/FlatCAMGeoEditor.py:659 #: flatcamEditors/FlatCAMGrbEditor.py:5192 flatcamGUI/PreferencesUI.py:6735 -#: flatcamTools/ToolTransform.py:63 +#: flatcamTools/ToolTransform.py:62 msgid "" "Angle for Rotation action, in degrees.\n" "Float number between -360 and 359.\n" @@ -4121,7 +3689,7 @@ msgstr "" "Nombres positifs pour le mouvement en CW.\n" "Nombres négatifs pour le mouvement CCW." -#: flatcamEditors/FlatCAMGeoEditor.py:676 +#: flatcamEditors/FlatCAMGeoEditor.py:675 #: flatcamEditors/FlatCAMGrbEditor.py:5208 msgid "" "Rotate the selected shape(s).\n" @@ -4132,13 +3700,13 @@ msgstr "" "Le point de référence est le milieu de\n" "le cadre de sélection pour toutes les formes sélectionnées." -#: flatcamEditors/FlatCAMGeoEditor.py:699 +#: flatcamEditors/FlatCAMGeoEditor.py:698 #: flatcamEditors/FlatCAMGrbEditor.py:5231 msgid "Angle X:" msgstr "Angle X:" -#: flatcamEditors/FlatCAMGeoEditor.py:701 -#: flatcamEditors/FlatCAMGeoEditor.py:721 +#: flatcamEditors/FlatCAMGeoEditor.py:700 +#: flatcamEditors/FlatCAMGeoEditor.py:720 #: flatcamEditors/FlatCAMGrbEditor.py:5233 #: flatcamEditors/FlatCAMGrbEditor.py:5253 flatcamGUI/PreferencesUI.py:6754 #: flatcamGUI/PreferencesUI.py:6768 flatcamTools/ToolCalibration.py:505 @@ -4150,13 +3718,13 @@ msgstr "" "Angle pour l'action asymétrique, en degrés.\n" "Nombre flottant entre -360 et 359." -#: flatcamEditors/FlatCAMGeoEditor.py:712 -#: flatcamEditors/FlatCAMGrbEditor.py:5244 flatcamTools/ToolTransform.py:468 +#: flatcamEditors/FlatCAMGeoEditor.py:711 +#: flatcamEditors/FlatCAMGrbEditor.py:5244 flatcamTools/ToolTransform.py:467 msgid "Skew X" msgstr "Fausser X" -#: flatcamEditors/FlatCAMGeoEditor.py:714 -#: flatcamEditors/FlatCAMGeoEditor.py:734 +#: flatcamEditors/FlatCAMGeoEditor.py:713 +#: flatcamEditors/FlatCAMGeoEditor.py:733 #: flatcamEditors/FlatCAMGrbEditor.py:5246 #: flatcamEditors/FlatCAMGrbEditor.py:5266 msgid "" @@ -4168,33 +3736,33 @@ msgstr "" "Le point de référence est le milieu de\n" "le cadre de sélection pour toutes les formes sélectionnées." -#: flatcamEditors/FlatCAMGeoEditor.py:719 +#: flatcamEditors/FlatCAMGeoEditor.py:718 #: flatcamEditors/FlatCAMGrbEditor.py:5251 msgid "Angle Y:" msgstr "Angle Y:" -#: flatcamEditors/FlatCAMGeoEditor.py:732 -#: flatcamEditors/FlatCAMGrbEditor.py:5264 flatcamTools/ToolTransform.py:469 +#: flatcamEditors/FlatCAMGeoEditor.py:731 +#: flatcamEditors/FlatCAMGrbEditor.py:5264 flatcamTools/ToolTransform.py:468 msgid "Skew Y" msgstr "Fausser Y" -#: flatcamEditors/FlatCAMGeoEditor.py:760 +#: flatcamEditors/FlatCAMGeoEditor.py:759 #: flatcamEditors/FlatCAMGrbEditor.py:5292 msgid "Factor X:" msgstr "Facteur X:" -#: flatcamEditors/FlatCAMGeoEditor.py:762 +#: flatcamEditors/FlatCAMGeoEditor.py:761 #: flatcamEditors/FlatCAMGrbEditor.py:5294 flatcamTools/ToolCalibration.py:469 msgid "Factor for Scale action over X axis." msgstr "Facteur pour l'action de mise à l'échelle sur l'axe X." -#: flatcamEditors/FlatCAMGeoEditor.py:772 -#: flatcamEditors/FlatCAMGrbEditor.py:5304 flatcamTools/ToolTransform.py:470 +#: flatcamEditors/FlatCAMGeoEditor.py:771 +#: flatcamEditors/FlatCAMGrbEditor.py:5304 flatcamTools/ToolTransform.py:469 msgid "Scale X" msgstr "Mise à l'échelle X" -#: flatcamEditors/FlatCAMGeoEditor.py:774 -#: flatcamEditors/FlatCAMGeoEditor.py:793 +#: flatcamEditors/FlatCAMGeoEditor.py:773 +#: flatcamEditors/FlatCAMGeoEditor.py:792 #: flatcamEditors/FlatCAMGrbEditor.py:5306 #: flatcamEditors/FlatCAMGrbEditor.py:5325 msgid "" @@ -4206,28 +3774,28 @@ msgstr "" "Le point de référence dépend de\n" "l'état de la case à cocher référence d'échelle." -#: flatcamEditors/FlatCAMGeoEditor.py:779 +#: flatcamEditors/FlatCAMGeoEditor.py:778 #: flatcamEditors/FlatCAMGrbEditor.py:5311 msgid "Factor Y:" msgstr "Facteur Y:" -#: flatcamEditors/FlatCAMGeoEditor.py:781 +#: flatcamEditors/FlatCAMGeoEditor.py:780 #: flatcamEditors/FlatCAMGrbEditor.py:5313 flatcamTools/ToolCalibration.py:481 msgid "Factor for Scale action over Y axis." msgstr "Facteur de Mise à l'échelle de l'action sur l'axe des ordonnées." -#: flatcamEditors/FlatCAMGeoEditor.py:791 -#: flatcamEditors/FlatCAMGrbEditor.py:5323 flatcamTools/ToolTransform.py:471 +#: flatcamEditors/FlatCAMGeoEditor.py:790 +#: flatcamEditors/FlatCAMGrbEditor.py:5323 flatcamTools/ToolTransform.py:470 msgid "Scale Y" msgstr "Mise à l'échelle Y" -#: flatcamEditors/FlatCAMGeoEditor.py:800 +#: flatcamEditors/FlatCAMGeoEditor.py:799 #: flatcamEditors/FlatCAMGrbEditor.py:5332 flatcamGUI/PreferencesUI.py:6804 -#: flatcamTools/ToolTransform.py:190 +#: flatcamTools/ToolTransform.py:189 msgid "Link" msgstr "Lien" -#: flatcamEditors/FlatCAMGeoEditor.py:802 +#: flatcamEditors/FlatCAMGeoEditor.py:801 #: flatcamEditors/FlatCAMGrbEditor.py:5334 msgid "" "Scale the selected shape(s)\n" @@ -4236,13 +3804,13 @@ msgstr "" "Mettre à l'échelle les formes sélectionnées\n" "en utilisant le facteur d'échelle X pour les deux axes." -#: flatcamEditors/FlatCAMGeoEditor.py:808 +#: flatcamEditors/FlatCAMGeoEditor.py:807 #: flatcamEditors/FlatCAMGrbEditor.py:5340 flatcamGUI/PreferencesUI.py:6812 -#: flatcamTools/ToolTransform.py:197 +#: flatcamTools/ToolTransform.py:196 msgid "Scale Reference" msgstr "Référence d'échelle" -#: flatcamEditors/FlatCAMGeoEditor.py:810 +#: flatcamEditors/FlatCAMGeoEditor.py:809 #: flatcamEditors/FlatCAMGrbEditor.py:5342 msgid "" "Scale the selected shape(s)\n" @@ -4255,23 +3823,23 @@ msgstr "" "et le centre de la plus grande boîte englobante\n" "des formes sélectionnées quand elle est décochée." -#: flatcamEditors/FlatCAMGeoEditor.py:838 +#: flatcamEditors/FlatCAMGeoEditor.py:837 #: flatcamEditors/FlatCAMGrbEditor.py:5371 msgid "Value X:" msgstr "Valeur X:" -#: flatcamEditors/FlatCAMGeoEditor.py:840 +#: flatcamEditors/FlatCAMGeoEditor.py:839 #: flatcamEditors/FlatCAMGrbEditor.py:5373 msgid "Value for Offset action on X axis." msgstr "Valeur pour l'action de décalage sur l'axe X." -#: flatcamEditors/FlatCAMGeoEditor.py:850 -#: flatcamEditors/FlatCAMGrbEditor.py:5383 flatcamTools/ToolTransform.py:474 +#: flatcamEditors/FlatCAMGeoEditor.py:849 +#: flatcamEditors/FlatCAMGrbEditor.py:5383 flatcamTools/ToolTransform.py:473 msgid "Offset X" msgstr "Décalage X" -#: flatcamEditors/FlatCAMGeoEditor.py:852 -#: flatcamEditors/FlatCAMGeoEditor.py:872 +#: flatcamEditors/FlatCAMGeoEditor.py:851 +#: flatcamEditors/FlatCAMGeoEditor.py:871 #: flatcamEditors/FlatCAMGrbEditor.py:5385 #: flatcamEditors/FlatCAMGrbEditor.py:5405 msgid "" @@ -4283,28 +3851,28 @@ msgstr "" "Le point de référence est le milieu de\n" "le cadre de sélection pour toutes les formes sélectionnées.\n" -#: flatcamEditors/FlatCAMGeoEditor.py:858 +#: flatcamEditors/FlatCAMGeoEditor.py:857 #: flatcamEditors/FlatCAMGrbEditor.py:5391 msgid "Value Y:" msgstr "Valeur Y:" -#: flatcamEditors/FlatCAMGeoEditor.py:860 +#: flatcamEditors/FlatCAMGeoEditor.py:859 #: flatcamEditors/FlatCAMGrbEditor.py:5393 msgid "Value for Offset action on Y axis." msgstr "Valeur pour l'action de décalage sur l'axe Y." -#: flatcamEditors/FlatCAMGeoEditor.py:870 -#: flatcamEditors/FlatCAMGrbEditor.py:5403 flatcamTools/ToolTransform.py:475 +#: flatcamEditors/FlatCAMGeoEditor.py:869 +#: flatcamEditors/FlatCAMGrbEditor.py:5403 flatcamTools/ToolTransform.py:474 msgid "Offset Y" msgstr "Décalage Y" -#: flatcamEditors/FlatCAMGeoEditor.py:901 -#: flatcamEditors/FlatCAMGrbEditor.py:5434 flatcamTools/ToolTransform.py:476 +#: flatcamEditors/FlatCAMGeoEditor.py:900 +#: flatcamEditors/FlatCAMGrbEditor.py:5434 flatcamTools/ToolTransform.py:475 msgid "Flip on X" msgstr "Miroir sur X" -#: flatcamEditors/FlatCAMGeoEditor.py:903 -#: flatcamEditors/FlatCAMGeoEditor.py:910 +#: flatcamEditors/FlatCAMGeoEditor.py:902 +#: flatcamEditors/FlatCAMGeoEditor.py:909 #: flatcamEditors/FlatCAMGrbEditor.py:5436 #: flatcamEditors/FlatCAMGrbEditor.py:5443 msgid "" @@ -4314,17 +3882,17 @@ msgstr "" "Retournez la ou les formes sélectionnées sur l’axe X.\n" "Ne crée pas une nouvelle forme." -#: flatcamEditors/FlatCAMGeoEditor.py:908 -#: flatcamEditors/FlatCAMGrbEditor.py:5441 flatcamTools/ToolTransform.py:477 +#: flatcamEditors/FlatCAMGeoEditor.py:907 +#: flatcamEditors/FlatCAMGrbEditor.py:5441 flatcamTools/ToolTransform.py:476 msgid "Flip on Y" msgstr "Miroir sur Y" -#: flatcamEditors/FlatCAMGeoEditor.py:916 +#: flatcamEditors/FlatCAMGeoEditor.py:915 #: flatcamEditors/FlatCAMGrbEditor.py:5449 msgid "Ref Pt" msgstr "Point de réf" -#: flatcamEditors/FlatCAMGeoEditor.py:918 +#: flatcamEditors/FlatCAMGeoEditor.py:917 #: flatcamEditors/FlatCAMGrbEditor.py:5451 msgid "" "Flip the selected shape(s)\n" @@ -4347,13 +3915,13 @@ msgstr "" "Ou entrez les coordonnées au format (x, y) dans le champ\n" "Pointez sur le champ Entrée et cliquez sur Basculer sur X (Y)." -#: flatcamEditors/FlatCAMGeoEditor.py:930 +#: flatcamEditors/FlatCAMGeoEditor.py:929 #: flatcamEditors/FlatCAMGrbEditor.py:5463 msgid "Point:" msgstr "Point:" -#: flatcamEditors/FlatCAMGeoEditor.py:932 -#: flatcamEditors/FlatCAMGrbEditor.py:5465 flatcamTools/ToolTransform.py:300 +#: flatcamEditors/FlatCAMGeoEditor.py:931 +#: flatcamEditors/FlatCAMGrbEditor.py:5465 flatcamTools/ToolTransform.py:299 msgid "" "Coordinates in format (x, y) used as reference for mirroring.\n" "The 'x' in (x, y) will be used when using Flip on X and\n" @@ -4364,8 +3932,8 @@ msgstr "" "Le \"x\" dans (x, y) sera utilisé lors de l'utilisation de Flip sur X et\n" "le 'y' dans (x, y) sera utilisé lors de l'utilisation de Flip sur Y." -#: flatcamEditors/FlatCAMGeoEditor.py:942 -#: flatcamEditors/FlatCAMGrbEditor.py:5477 flatcamTools/ToolTransform.py:310 +#: flatcamEditors/FlatCAMGeoEditor.py:941 +#: flatcamEditors/FlatCAMGrbEditor.py:5477 flatcamTools/ToolTransform.py:309 msgid "" "The point coordinates can be captured by\n" "left click on canvas together with pressing\n" @@ -4375,357 +3943,357 @@ msgstr "" "clic gauche sur la toile avec appui\n" "Touche Majuscule. Puis cliquez sur le bouton Ajouter pour insérer." -#: flatcamEditors/FlatCAMGeoEditor.py:1305 +#: flatcamEditors/FlatCAMGeoEditor.py:1304 #: flatcamEditors/FlatCAMGrbEditor.py:5785 msgid "No shape selected. Please Select a shape to rotate!" msgstr "" "Aucune forme sélectionnée. Veuillez sélectionner une forme à faire pivoter!" -#: flatcamEditors/FlatCAMGeoEditor.py:1308 -#: flatcamEditors/FlatCAMGrbEditor.py:5788 flatcamTools/ToolTransform.py:680 +#: flatcamEditors/FlatCAMGeoEditor.py:1307 +#: flatcamEditors/FlatCAMGrbEditor.py:5788 flatcamTools/ToolTransform.py:679 msgid "Appying Rotate" msgstr "Appliquer la Rotation" -#: flatcamEditors/FlatCAMGeoEditor.py:1334 +#: flatcamEditors/FlatCAMGeoEditor.py:1333 #: flatcamEditors/FlatCAMGrbEditor.py:5820 msgid "Done. Rotate completed." msgstr "Terminé. Rotation terminée." -#: flatcamEditors/FlatCAMGeoEditor.py:1336 +#: flatcamEditors/FlatCAMGeoEditor.py:1335 msgid "Rotation action was not executed" msgstr "L'action de rotation n'a pas été exécutée" -#: flatcamEditors/FlatCAMGeoEditor.py:1355 +#: flatcamEditors/FlatCAMGeoEditor.py:1354 #: flatcamEditors/FlatCAMGrbEditor.py:5839 msgid "No shape selected. Please Select a shape to flip!" msgstr "" "Aucune forme sélectionnée. Veuillez sélectionner une forme à retourner!" -#: flatcamEditors/FlatCAMGeoEditor.py:1358 -#: flatcamEditors/FlatCAMGrbEditor.py:5842 flatcamTools/ToolTransform.py:729 +#: flatcamEditors/FlatCAMGeoEditor.py:1357 +#: flatcamEditors/FlatCAMGrbEditor.py:5842 flatcamTools/ToolTransform.py:728 msgid "Applying Flip" msgstr "Appliquer Flip" -#: flatcamEditors/FlatCAMGeoEditor.py:1387 -#: flatcamEditors/FlatCAMGrbEditor.py:5880 flatcamTools/ToolTransform.py:770 +#: flatcamEditors/FlatCAMGeoEditor.py:1386 +#: flatcamEditors/FlatCAMGrbEditor.py:5880 flatcamTools/ToolTransform.py:769 msgid "Flip on the Y axis done" msgstr "Tournez sur l'axe des Y fait" -#: flatcamEditors/FlatCAMGeoEditor.py:1391 -#: flatcamEditors/FlatCAMGrbEditor.py:5889 flatcamTools/ToolTransform.py:779 +#: flatcamEditors/FlatCAMGeoEditor.py:1390 +#: flatcamEditors/FlatCAMGrbEditor.py:5889 flatcamTools/ToolTransform.py:778 msgid "Flip on the X axis done" msgstr "Tournez sur l'axe X terminé" -#: flatcamEditors/FlatCAMGeoEditor.py:1399 +#: flatcamEditors/FlatCAMGeoEditor.py:1398 msgid "Flip action was not executed" msgstr "L'action Flip n'a pas été exécutée" -#: flatcamEditors/FlatCAMGeoEditor.py:1417 +#: flatcamEditors/FlatCAMGeoEditor.py:1416 #: flatcamEditors/FlatCAMGrbEditor.py:5909 msgid "No shape selected. Please Select a shape to shear/skew!" msgstr "" "Aucune forme sélectionnée. Veuillez sélectionner une forme pour cisailler / " "incliner!" -#: flatcamEditors/FlatCAMGeoEditor.py:1420 -#: flatcamEditors/FlatCAMGrbEditor.py:5912 flatcamTools/ToolTransform.py:802 +#: flatcamEditors/FlatCAMGeoEditor.py:1419 +#: flatcamEditors/FlatCAMGrbEditor.py:5912 flatcamTools/ToolTransform.py:801 msgid "Applying Skew" msgstr "Application de l'inclinaison" -#: flatcamEditors/FlatCAMGeoEditor.py:1443 +#: flatcamEditors/FlatCAMGeoEditor.py:1442 #: flatcamEditors/FlatCAMGrbEditor.py:5946 msgid "Skew on the X axis done" msgstr "Inclinaison sur l'axe X terminée" -#: flatcamEditors/FlatCAMGeoEditor.py:1445 +#: flatcamEditors/FlatCAMGeoEditor.py:1444 #: flatcamEditors/FlatCAMGrbEditor.py:5948 msgid "Skew on the Y axis done" msgstr "Inclinaison sur l'axe des Y faite" -#: flatcamEditors/FlatCAMGeoEditor.py:1448 +#: flatcamEditors/FlatCAMGeoEditor.py:1447 msgid "Skew action was not executed" msgstr "L'action de biais n'a pas été exécutée" -#: flatcamEditors/FlatCAMGeoEditor.py:1470 +#: flatcamEditors/FlatCAMGeoEditor.py:1469 #: flatcamEditors/FlatCAMGrbEditor.py:5970 msgid "No shape selected. Please Select a shape to scale!" msgstr "" "Aucune forme sélectionnée. Veuillez sélectionner une forme à mettre à " "l'échelle!" -#: flatcamEditors/FlatCAMGeoEditor.py:1473 -#: flatcamEditors/FlatCAMGrbEditor.py:5973 flatcamTools/ToolTransform.py:849 +#: flatcamEditors/FlatCAMGeoEditor.py:1472 +#: flatcamEditors/FlatCAMGrbEditor.py:5973 flatcamTools/ToolTransform.py:847 msgid "Applying Scale" msgstr "Échelle d'application" -#: flatcamEditors/FlatCAMGeoEditor.py:1505 +#: flatcamEditors/FlatCAMGeoEditor.py:1504 #: flatcamEditors/FlatCAMGrbEditor.py:6010 msgid "Scale on the X axis done" msgstr "Échelle terminée sur l'axe X" -#: flatcamEditors/FlatCAMGeoEditor.py:1507 +#: flatcamEditors/FlatCAMGeoEditor.py:1506 #: flatcamEditors/FlatCAMGrbEditor.py:6012 msgid "Scale on the Y axis done" msgstr "Echelle terminée sur l'axe des Y" -#: flatcamEditors/FlatCAMGeoEditor.py:1509 +#: flatcamEditors/FlatCAMGeoEditor.py:1508 msgid "Scale action was not executed" msgstr "L'action d'échelle n'a pas été exécutée" -#: flatcamEditors/FlatCAMGeoEditor.py:1524 +#: flatcamEditors/FlatCAMGeoEditor.py:1523 #: flatcamEditors/FlatCAMGrbEditor.py:6029 msgid "No shape selected. Please Select a shape to offset!" msgstr "" "Aucune forme sélectionnée. Veuillez sélectionner une forme à compenser!" -#: flatcamEditors/FlatCAMGeoEditor.py:1527 -#: flatcamEditors/FlatCAMGrbEditor.py:6032 flatcamTools/ToolTransform.py:901 +#: flatcamEditors/FlatCAMGeoEditor.py:1526 +#: flatcamEditors/FlatCAMGrbEditor.py:6032 flatcamTools/ToolTransform.py:897 msgid "Applying Offset" msgstr "Appliquer un Décalage" -#: flatcamEditors/FlatCAMGeoEditor.py:1537 +#: flatcamEditors/FlatCAMGeoEditor.py:1536 #: flatcamEditors/FlatCAMGrbEditor.py:6053 msgid "Offset on the X axis done" msgstr "Décalage sur l'axe X terminé" -#: flatcamEditors/FlatCAMGeoEditor.py:1539 +#: flatcamEditors/FlatCAMGeoEditor.py:1538 #: flatcamEditors/FlatCAMGrbEditor.py:6055 msgid "Offset on the Y axis done" msgstr "Décalage sur l'axe Y terminé" -#: flatcamEditors/FlatCAMGeoEditor.py:1542 +#: flatcamEditors/FlatCAMGeoEditor.py:1541 msgid "Offset action was not executed" msgstr "L'action offset n'a pas été exécutée" -#: flatcamEditors/FlatCAMGeoEditor.py:1546 +#: flatcamEditors/FlatCAMGeoEditor.py:1545 #: flatcamEditors/FlatCAMGrbEditor.py:6062 msgid "Rotate ..." msgstr "Tourner ..." -#: flatcamEditors/FlatCAMGeoEditor.py:1547 -#: flatcamEditors/FlatCAMGeoEditor.py:1602 -#: flatcamEditors/FlatCAMGeoEditor.py:1619 +#: flatcamEditors/FlatCAMGeoEditor.py:1546 +#: flatcamEditors/FlatCAMGeoEditor.py:1601 +#: flatcamEditors/FlatCAMGeoEditor.py:1618 #: flatcamEditors/FlatCAMGrbEditor.py:6063 #: flatcamEditors/FlatCAMGrbEditor.py:6112 #: flatcamEditors/FlatCAMGrbEditor.py:6127 msgid "Enter an Angle Value (degrees)" msgstr "Entrer une valeur d'angle (degrés)" -#: flatcamEditors/FlatCAMGeoEditor.py:1556 +#: flatcamEditors/FlatCAMGeoEditor.py:1555 #: flatcamEditors/FlatCAMGrbEditor.py:6071 msgid "Geometry shape rotate done" msgstr "Rotation de la forme géométrique effectuée" -#: flatcamEditors/FlatCAMGeoEditor.py:1560 +#: flatcamEditors/FlatCAMGeoEditor.py:1559 #: flatcamEditors/FlatCAMGrbEditor.py:6074 msgid "Geometry shape rotate cancelled" msgstr "Rotation de la forme géométrique annulée" -#: flatcamEditors/FlatCAMGeoEditor.py:1565 +#: flatcamEditors/FlatCAMGeoEditor.py:1564 #: flatcamEditors/FlatCAMGrbEditor.py:6079 msgid "Offset on X axis ..." msgstr "Décalage sur l'axe des X ..." -#: flatcamEditors/FlatCAMGeoEditor.py:1566 -#: flatcamEditors/FlatCAMGeoEditor.py:1585 +#: flatcamEditors/FlatCAMGeoEditor.py:1565 +#: flatcamEditors/FlatCAMGeoEditor.py:1584 #: flatcamEditors/FlatCAMGrbEditor.py:6080 #: flatcamEditors/FlatCAMGrbEditor.py:6097 msgid "Enter a distance Value" msgstr "Entrez une valeur de distance" -#: flatcamEditors/FlatCAMGeoEditor.py:1575 +#: flatcamEditors/FlatCAMGeoEditor.py:1574 #: flatcamEditors/FlatCAMGrbEditor.py:6088 msgid "Geometry shape offset on X axis done" msgstr "Géométrie décalée sur l'axe des X effectuée" -#: flatcamEditors/FlatCAMGeoEditor.py:1579 +#: flatcamEditors/FlatCAMGeoEditor.py:1578 #: flatcamEditors/FlatCAMGrbEditor.py:6091 msgid "Geometry shape offset X cancelled" msgstr "Décalage géométrique X annulé" -#: flatcamEditors/FlatCAMGeoEditor.py:1584 +#: flatcamEditors/FlatCAMGeoEditor.py:1583 #: flatcamEditors/FlatCAMGrbEditor.py:6096 msgid "Offset on Y axis ..." msgstr "Décalage sur l'axe Y ..." -#: flatcamEditors/FlatCAMGeoEditor.py:1594 +#: flatcamEditors/FlatCAMGeoEditor.py:1593 #: flatcamEditors/FlatCAMGrbEditor.py:6105 msgid "Geometry shape offset on Y axis done" msgstr "Géométrie décalée sur l'axe des Y effectuée" -#: flatcamEditors/FlatCAMGeoEditor.py:1598 +#: flatcamEditors/FlatCAMGeoEditor.py:1597 msgid "Geometry shape offset on Y axis canceled" msgstr "Décalage de la forme de la géométrie sur l'axe des Y" -#: flatcamEditors/FlatCAMGeoEditor.py:1601 +#: flatcamEditors/FlatCAMGeoEditor.py:1600 #: flatcamEditors/FlatCAMGrbEditor.py:6111 msgid "Skew on X axis ..." msgstr "Skew on X axis ..." -#: flatcamEditors/FlatCAMGeoEditor.py:1611 +#: flatcamEditors/FlatCAMGeoEditor.py:1610 #: flatcamEditors/FlatCAMGrbEditor.py:6120 msgid "Geometry shape skew on X axis done" msgstr "Forme de la géométrie inclinée sur l'axe X terminée" -#: flatcamEditors/FlatCAMGeoEditor.py:1615 +#: flatcamEditors/FlatCAMGeoEditor.py:1614 msgid "Geometry shape skew on X axis canceled" msgstr "Géométrie inclinée sur l'axe X annulée" -#: flatcamEditors/FlatCAMGeoEditor.py:1618 +#: flatcamEditors/FlatCAMGeoEditor.py:1617 #: flatcamEditors/FlatCAMGrbEditor.py:6126 msgid "Skew on Y axis ..." msgstr "Inclinez sur l'axe Y ..." -#: flatcamEditors/FlatCAMGeoEditor.py:1628 +#: flatcamEditors/FlatCAMGeoEditor.py:1627 #: flatcamEditors/FlatCAMGrbEditor.py:6135 msgid "Geometry shape skew on Y axis done" msgstr "Géométrie inclinée sur l'axe des Y" -#: flatcamEditors/FlatCAMGeoEditor.py:1632 +#: flatcamEditors/FlatCAMGeoEditor.py:1631 msgid "Geometry shape skew on Y axis canceled" msgstr "Géométrie inclinée sur l'axe des Y oblitérée" -#: flatcamEditors/FlatCAMGeoEditor.py:2009 -#: flatcamEditors/FlatCAMGeoEditor.py:2080 +#: flatcamEditors/FlatCAMGeoEditor.py:2008 +#: flatcamEditors/FlatCAMGeoEditor.py:2079 #: flatcamEditors/FlatCAMGrbEditor.py:1435 #: flatcamEditors/FlatCAMGrbEditor.py:1513 msgid "Click on Center point ..." msgstr "Cliquez sur Point central ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2022 +#: flatcamEditors/FlatCAMGeoEditor.py:2021 #: flatcamEditors/FlatCAMGrbEditor.py:1445 msgid "Click on Perimeter point to complete ..." msgstr "Cliquez sur le point du périmètre pour terminer ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2054 +#: flatcamEditors/FlatCAMGeoEditor.py:2053 msgid "Done. Adding Circle completed." msgstr "Terminé. Ajout du cercle terminé." -#: flatcamEditors/FlatCAMGeoEditor.py:2108 +#: flatcamEditors/FlatCAMGeoEditor.py:2107 #: flatcamEditors/FlatCAMGrbEditor.py:1546 msgid "Click on Start point ..." msgstr "Cliquez sur le point de départ ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2110 +#: flatcamEditors/FlatCAMGeoEditor.py:2109 #: flatcamEditors/FlatCAMGrbEditor.py:1548 msgid "Click on Point3 ..." msgstr "Cliquez sur le point 3 ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2112 +#: flatcamEditors/FlatCAMGeoEditor.py:2111 #: flatcamEditors/FlatCAMGrbEditor.py:1550 msgid "Click on Stop point ..." msgstr "Cliquez sur le point d'arrêt ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2117 +#: flatcamEditors/FlatCAMGeoEditor.py:2116 #: flatcamEditors/FlatCAMGrbEditor.py:1555 msgid "Click on Stop point to complete ..." msgstr "Cliquez sur le point d'arrêt pour terminer ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2119 +#: flatcamEditors/FlatCAMGeoEditor.py:2118 #: flatcamEditors/FlatCAMGrbEditor.py:1557 msgid "Click on Point2 to complete ..." msgstr "Cliquez sur le point 2 pour compléter ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2121 +#: flatcamEditors/FlatCAMGeoEditor.py:2120 #: flatcamEditors/FlatCAMGrbEditor.py:1559 msgid "Click on Center point to complete ..." msgstr "Cliquez sur le point central pour terminer ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2133 +#: flatcamEditors/FlatCAMGeoEditor.py:2132 #, python-format msgid "Direction: %s" msgstr "Direction: %s" -#: flatcamEditors/FlatCAMGeoEditor.py:2147 +#: flatcamEditors/FlatCAMGeoEditor.py:2146 #: flatcamEditors/FlatCAMGrbEditor.py:1585 msgid "Mode: Start -> Stop -> Center. Click on Start point ..." msgstr "" "Mode: Démarrer -> Arrêter -> Centre. Cliquez sur le point de départ ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2150 +#: flatcamEditors/FlatCAMGeoEditor.py:2149 #: flatcamEditors/FlatCAMGrbEditor.py:1588 msgid "Mode: Point1 -> Point3 -> Point2. Click on Point1 ..." msgstr "Mode: Point 1 -> Point 3 -> Point 2. Cliquez sur Point 1 ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2153 +#: flatcamEditors/FlatCAMGeoEditor.py:2152 #: flatcamEditors/FlatCAMGrbEditor.py:1591 msgid "Mode: Center -> Start -> Stop. Click on Center point ..." msgstr "Mode: Centre -> Démarrer -> Arrêter. Cliquez sur Point central ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2294 +#: flatcamEditors/FlatCAMGeoEditor.py:2293 msgid "Done. Arc completed." msgstr "Terminé. Arc terminé." -#: flatcamEditors/FlatCAMGeoEditor.py:2325 -#: flatcamEditors/FlatCAMGeoEditor.py:2398 +#: flatcamEditors/FlatCAMGeoEditor.py:2324 +#: flatcamEditors/FlatCAMGeoEditor.py:2397 msgid "Click on 1st corner ..." msgstr "Cliquez sur le 1er coin ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2337 +#: flatcamEditors/FlatCAMGeoEditor.py:2336 msgid "Click on opposite corner to complete ..." msgstr "Cliquez sur le coin opposé pour terminer ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2367 +#: flatcamEditors/FlatCAMGeoEditor.py:2366 msgid "Done. Rectangle completed." msgstr "Terminé. Rectangle complété." -#: flatcamEditors/FlatCAMGeoEditor.py:2411 flatcamTools/ToolNCC.py:1728 +#: flatcamEditors/FlatCAMGeoEditor.py:2410 flatcamTools/ToolNCC.py:1728 #: flatcamTools/ToolPaint.py:1623 msgid "Click on next Point or click right mouse button to complete ..." msgstr "" "Cliquez sur le point suivant ou cliquez avec le bouton droit de la souris " "pour terminer ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2442 +#: flatcamEditors/FlatCAMGeoEditor.py:2441 msgid "Done. Polygon completed." msgstr "Terminé. Le polygone est terminé." -#: flatcamEditors/FlatCAMGeoEditor.py:2456 -#: flatcamEditors/FlatCAMGeoEditor.py:2521 +#: flatcamEditors/FlatCAMGeoEditor.py:2455 +#: flatcamEditors/FlatCAMGeoEditor.py:2520 #: flatcamEditors/FlatCAMGrbEditor.py:1111 #: flatcamEditors/FlatCAMGrbEditor.py:1322 msgid "Backtracked one point ..." msgstr "Retracé un point ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2499 +#: flatcamEditors/FlatCAMGeoEditor.py:2498 msgid "Done. Path completed." msgstr "Terminé. Chemin complété." -#: flatcamEditors/FlatCAMGeoEditor.py:2658 +#: flatcamEditors/FlatCAMGeoEditor.py:2657 msgid "No shape selected. Select a shape to explode" msgstr "Aucune forme sélectionnée. Sélectionnez une forme à exploser" -#: flatcamEditors/FlatCAMGeoEditor.py:2691 +#: flatcamEditors/FlatCAMGeoEditor.py:2690 msgid "Done. Polygons exploded into lines." msgstr "Terminé. Les polygones ont explosé en lignes." -#: flatcamEditors/FlatCAMGeoEditor.py:2723 +#: flatcamEditors/FlatCAMGeoEditor.py:2722 msgid "MOVE: No shape selected. Select a shape to move" msgstr "Déplacer: Aucune forme sélectionnée. Sélectionnez une forme à déplacer" -#: flatcamEditors/FlatCAMGeoEditor.py:2726 -#: flatcamEditors/FlatCAMGeoEditor.py:2746 +#: flatcamEditors/FlatCAMGeoEditor.py:2725 +#: flatcamEditors/FlatCAMGeoEditor.py:2745 msgid " MOVE: Click on reference point ..." msgstr " Déplacer: Cliquez sur le point de référence ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2731 +#: flatcamEditors/FlatCAMGeoEditor.py:2730 msgid " Click on destination point ..." msgstr " Cliquez sur le point de destination ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2771 +#: flatcamEditors/FlatCAMGeoEditor.py:2770 msgid "Done. Geometry(s) Move completed." msgstr "Terminé. Géométrie (s) Déplacement terminé." -#: flatcamEditors/FlatCAMGeoEditor.py:2904 +#: flatcamEditors/FlatCAMGeoEditor.py:2903 msgid "Done. Geometry(s) Copy completed." msgstr "Terminé. Géométrie (s) Copie terminée." -#: flatcamEditors/FlatCAMGeoEditor.py:2935 +#: flatcamEditors/FlatCAMGeoEditor.py:2934 #: flatcamEditors/FlatCAMGrbEditor.py:897 msgid "Click on 1st point ..." msgstr "Cliquez sur le 1er point ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2959 +#: flatcamEditors/FlatCAMGeoEditor.py:2958 msgid "" "Font not supported. Only Regular, Bold, Italic and BoldItalic are supported. " "Error" @@ -4733,105 +4301,105 @@ msgstr "" "Police non supportée. Seuls les formats Normal, Gras, Italique et " "GrasItalique sont pris en charge. Erreur" -#: flatcamEditors/FlatCAMGeoEditor.py:2967 +#: flatcamEditors/FlatCAMGeoEditor.py:2966 msgid "No text to add." msgstr "Pas de texte à ajouter." -#: flatcamEditors/FlatCAMGeoEditor.py:2977 +#: flatcamEditors/FlatCAMGeoEditor.py:2976 msgid " Done. Adding Text completed." msgstr " Terminé. Ajout de texte terminé." -#: flatcamEditors/FlatCAMGeoEditor.py:3014 +#: flatcamEditors/FlatCAMGeoEditor.py:3013 msgid "Create buffer geometry ..." msgstr "Créer une géométrie tampon ..." -#: flatcamEditors/FlatCAMGeoEditor.py:3049 +#: flatcamEditors/FlatCAMGeoEditor.py:3048 #: flatcamEditors/FlatCAMGrbEditor.py:4994 msgid "Done. Buffer Tool completed." msgstr "Terminé. L'outil Tampon est terminé." -#: flatcamEditors/FlatCAMGeoEditor.py:3077 +#: flatcamEditors/FlatCAMGeoEditor.py:3076 msgid "Done. Buffer Int Tool completed." msgstr "Terminé. L'outil Intérieur du Tampon est terminé." -#: flatcamEditors/FlatCAMGeoEditor.py:3105 +#: flatcamEditors/FlatCAMGeoEditor.py:3104 msgid "Done. Buffer Ext Tool completed." msgstr "Terminé. L'outil Extérieur du Tampon est terminé." -#: flatcamEditors/FlatCAMGeoEditor.py:3154 +#: flatcamEditors/FlatCAMGeoEditor.py:3153 #: flatcamEditors/FlatCAMGrbEditor.py:2151 msgid "Select a shape to act as deletion area ..." msgstr "Sélectionnez une forme pour agir comme zone de suppression ..." -#: flatcamEditors/FlatCAMGeoEditor.py:3156 -#: flatcamEditors/FlatCAMGeoEditor.py:3182 -#: flatcamEditors/FlatCAMGeoEditor.py:3188 +#: flatcamEditors/FlatCAMGeoEditor.py:3155 +#: flatcamEditors/FlatCAMGeoEditor.py:3181 +#: flatcamEditors/FlatCAMGeoEditor.py:3187 #: flatcamEditors/FlatCAMGrbEditor.py:2153 msgid "Click to pick-up the erase shape..." msgstr "Cliquez pour récupérer la forme à effacer ..." -#: flatcamEditors/FlatCAMGeoEditor.py:3192 +#: flatcamEditors/FlatCAMGeoEditor.py:3191 #: flatcamEditors/FlatCAMGrbEditor.py:2212 msgid "Click to erase ..." msgstr "Cliquez pour effacer ..." -#: flatcamEditors/FlatCAMGeoEditor.py:3221 +#: flatcamEditors/FlatCAMGeoEditor.py:3220 #: flatcamEditors/FlatCAMGrbEditor.py:2245 msgid "Done. Eraser tool action completed." msgstr "Terminé. Action de l’outil gomme terminée." -#: flatcamEditors/FlatCAMGeoEditor.py:3271 +#: flatcamEditors/FlatCAMGeoEditor.py:3270 msgid "Create Paint geometry ..." msgstr "Créer une géométrie de peinture ..." -#: flatcamEditors/FlatCAMGeoEditor.py:3284 +#: flatcamEditors/FlatCAMGeoEditor.py:3283 #: flatcamEditors/FlatCAMGrbEditor.py:2408 msgid "Shape transformations ..." msgstr "Transformations de forme ..." -#: flatcamEditors/FlatCAMGeoEditor.py:3340 flatcamGUI/PreferencesUI.py:4636 +#: flatcamEditors/FlatCAMGeoEditor.py:3339 flatcamGUI/PreferencesUI.py:4636 msgid "Geometry Editor" msgstr "Éditeur de Géométrie" -#: flatcamEditors/FlatCAMGeoEditor.py:3346 +#: flatcamEditors/FlatCAMGeoEditor.py:3345 #: flatcamEditors/FlatCAMGrbEditor.py:2486 #: flatcamEditors/FlatCAMGrbEditor.py:3846 flatcamGUI/ObjectUI.py:262 -#: flatcamGUI/ObjectUI.py:1495 flatcamGUI/ObjectUI.py:2244 -#: flatcamTools/ToolCutOut.py:96 +#: flatcamGUI/ObjectUI.py:1496 flatcamGUI/ObjectUI.py:2245 +#: flatcamTools/ToolCutOut.py:95 msgid "Type" msgstr "Type" -#: flatcamEditors/FlatCAMGeoEditor.py:3346 flatcamGUI/ObjectUI.py:217 -#: flatcamGUI/ObjectUI.py:741 flatcamGUI/ObjectUI.py:1431 -#: flatcamGUI/ObjectUI.py:2153 flatcamGUI/ObjectUI.py:2457 -#: flatcamGUI/ObjectUI.py:2524 flatcamTools/ToolCalibration.py:234 +#: flatcamEditors/FlatCAMGeoEditor.py:3345 flatcamGUI/ObjectUI.py:217 +#: flatcamGUI/ObjectUI.py:741 flatcamGUI/ObjectUI.py:1432 +#: flatcamGUI/ObjectUI.py:2154 flatcamGUI/ObjectUI.py:2458 +#: flatcamGUI/ObjectUI.py:2525 flatcamTools/ToolCalibration.py:234 #: flatcamTools/ToolFiducials.py:73 msgid "Name" msgstr "Nom" -#: flatcamEditors/FlatCAMGeoEditor.py:3588 +#: flatcamEditors/FlatCAMGeoEditor.py:3587 msgid "Ring" msgstr "L'anneau" -#: flatcamEditors/FlatCAMGeoEditor.py:3590 +#: flatcamEditors/FlatCAMGeoEditor.py:3589 msgid "Line" msgstr "Ligne" -#: flatcamEditors/FlatCAMGeoEditor.py:3592 flatcamGUI/FlatCAMGUI.py:2187 +#: flatcamEditors/FlatCAMGeoEditor.py:3591 flatcamGUI/FlatCAMGUI.py:2187 #: flatcamGUI/PreferencesUI.py:5607 flatcamGUI/PreferencesUI.py:6131 #: flatcamTools/ToolNCC.py:584 flatcamTools/ToolPaint.py:528 msgid "Polygon" msgstr "Polygone" -#: flatcamEditors/FlatCAMGeoEditor.py:3594 +#: flatcamEditors/FlatCAMGeoEditor.py:3593 msgid "Multi-Line" msgstr "Multi-ligne" -#: flatcamEditors/FlatCAMGeoEditor.py:3596 +#: flatcamEditors/FlatCAMGeoEditor.py:3595 msgid "Multi-Polygon" msgstr "Multi-polygone" -#: flatcamEditors/FlatCAMGeoEditor.py:3603 +#: flatcamEditors/FlatCAMGeoEditor.py:3602 msgid "Geo Elem" msgstr "Élém. de Géo" @@ -5098,8 +4666,8 @@ msgstr "Code" #: flatcamEditors/FlatCAMGrbEditor.py:3846 flatcamGUI/ObjectUI.py:262 #: flatcamGUI/PreferencesUI.py:1184 flatcamGUI/PreferencesUI.py:7776 #: flatcamGUI/PreferencesUI.py:7805 flatcamGUI/PreferencesUI.py:7907 -#: flatcamTools/ToolCopperThieving.py:262 -#: flatcamTools/ToolCopperThieving.py:302 flatcamTools/ToolFiducials.py:156 +#: flatcamTools/ToolCopperThieving.py:261 +#: flatcamTools/ToolCopperThieving.py:301 flatcamTools/ToolFiducials.py:156 msgid "Size" msgstr "Taille" @@ -5223,20 +4791,20 @@ msgstr "Coin Tampon" msgid "" "There are 3 types of corners:\n" " - 'Round': the corner is rounded.\n" -" - 'Square:' the corner is met in a sharp angle.\n" -" - 'Beveled:' the corner is a line that directly connects the features " +" - 'Square': the corner is met in a sharp angle.\n" +" - 'Beveled': the corner is a line that directly connects the features " "meeting in the corner" msgstr "" "Il existe 3 types de coins:\n" -"  - 'Round': le coin est arrondi.\n" -"  - 'Carré': le coin se rencontre dans un angle aigu.\n" -"  - \"Biseauté:\" le coin est une ligne qui relie directement les " +" - 'Round': le coin est arrondi.\n" +" - 'Carré': le coin se rencontre dans un angle aigu.\n" +" - \"Biseauté:\" le coin est une ligne qui relie directement les " "fonctionnalités réunies dans le coin" #: flatcamEditors/FlatCAMGrbEditor.py:2637 flatcamGUI/FlatCAMGUI.py:1046 #: flatcamGUI/FlatCAMGUI.py:2123 flatcamGUI/FlatCAMGUI.py:2195 #: flatcamGUI/FlatCAMGUI.py:2238 flatcamGUI/FlatCAMGUI.py:2721 -#: flatcamGUI/PreferencesUI.py:6880 flatcamTools/ToolTransform.py:30 +#: flatcamGUI/PreferencesUI.py:6880 flatcamTools/ToolTransform.py:29 msgid "Buffer" msgstr "Tampon" @@ -5537,7 +5105,7 @@ msgid "String to replace the one in the Find box throughout the text." msgstr "Chaîne pour remplacer celle de la zone Rechercher dans tout le texte." #: flatcamEditors/FlatCAMTextEditor.py:95 flatcamGUI/ObjectUI.py:485 -#: flatcamGUI/ObjectUI.py:2137 flatcamGUI/PreferencesUI.py:2250 +#: flatcamGUI/ObjectUI.py:2138 flatcamGUI/PreferencesUI.py:2250 #: flatcamGUI/PreferencesUI.py:4712 msgid "All" msgstr "Tout" @@ -5593,6 +5161,15 @@ msgstr "Fichier ouvert" msgid "Export Code ..." msgstr "Exporter le code ..." +#: flatcamEditors/FlatCAMTextEditor.py:272 flatcamObjects/FlatCAMCNCJob.py:954 +#: flatcamTools/ToolSolderPaste.py:1530 +msgid "No such file or directory" +msgstr "Aucun fichier ou répertoire de ce nom" + +#: flatcamEditors/FlatCAMTextEditor.py:284 flatcamObjects/FlatCAMCNCJob.py:968 +msgid "Saved to" +msgstr "Enregistré dans" + #: flatcamEditors/FlatCAMTextEditor.py:334 msgid "Code Editor content copied to clipboard ..." msgstr "Contenu de l'éditeur de code copié dans le Presse-papiers ..." @@ -6253,6 +5830,16 @@ msgstr "Générer CNC" msgid "View Source" msgstr "Voir la source" +#: flatcamGUI/FlatCAMGUI.py:734 flatcamGUI/FlatCAMGUI.py:848 +#: flatcamGUI/FlatCAMGUI.py:1057 flatcamGUI/FlatCAMGUI.py:2123 +#: flatcamGUI/FlatCAMGUI.py:2267 flatcamGUI/FlatCAMGUI.py:2532 +#: flatcamGUI/FlatCAMGUI.py:2731 flatcamGUI/ObjectUI.py:1616 +#: flatcamObjects/FlatCAMGeometry.py:477 flatcamTools/ToolPanelize.py:541 +#: flatcamTools/ToolPanelize.py:568 flatcamTools/ToolPanelize.py:667 +#: flatcamTools/ToolPanelize.py:701 flatcamTools/ToolPanelize.py:766 +msgid "Copy" +msgstr "Copie" + #: flatcamGUI/FlatCAMGUI.py:742 flatcamGUI/FlatCAMGUI.py:2280 #: flatcamTools/ToolProperties.py:31 msgid "Properties" @@ -6392,12 +5979,12 @@ msgid "Extract Drills Tool" msgstr "Outil d'extraction de forets" #: flatcamGUI/FlatCAMGUI.py:905 flatcamGUI/ObjectUI.py:595 -#: flatcamTools/ToolCutOut.py:447 +#: flatcamTools/ToolCutOut.py:446 msgid "Cutout Tool" msgstr "Outil de Découpe" #: flatcamGUI/FlatCAMGUI.py:907 flatcamGUI/FlatCAMGUI.py:2586 -#: flatcamGUI/ObjectUI.py:573 flatcamGUI/ObjectUI.py:2075 +#: flatcamGUI/ObjectUI.py:573 flatcamGUI/ObjectUI.py:2076 #: flatcamTools/ToolNCC.py:974 msgid "NCC Tool" msgstr "Outil de la NCC" @@ -6427,8 +6014,8 @@ msgid "Rules Tool" msgstr "Outil de Règles" #: flatcamGUI/FlatCAMGUI.py:923 flatcamGUI/FlatCAMGUI.py:1728 -#: flatcamGUI/FlatCAMGUI.py:2602 flatcamTools/ToolOptimal.py:34 -#: flatcamTools/ToolOptimal.py:308 +#: flatcamGUI/FlatCAMGUI.py:2602 flatcamTools/ToolOptimal.py:33 +#: flatcamTools/ToolOptimal.py:307 msgid "Optimal Tool" msgstr "Outil de Optimal" @@ -6444,7 +6031,7 @@ msgid "QRCode Tool" msgstr "Outil QRCode" #: flatcamGUI/FlatCAMGUI.py:934 flatcamGUI/FlatCAMGUI.py:2613 -#: flatcamTools/ToolCopperThieving.py:40 flatcamTools/ToolCopperThieving.py:569 +#: flatcamTools/ToolCopperThieving.py:39 flatcamTools/ToolCopperThieving.py:568 msgid "Copper Thieving Tool" msgstr "Outil de Copper Thieving" @@ -6622,7 +6209,7 @@ msgstr "Zone de Marque" #: flatcamGUI/FlatCAMGUI.py:1064 flatcamGUI/FlatCAMGUI.py:2124 #: flatcamGUI/FlatCAMGUI.py:2215 flatcamGUI/FlatCAMGUI.py:2278 -#: flatcamGUI/FlatCAMGUI.py:2738 flatcamTools/ToolMove.py:28 +#: flatcamGUI/FlatCAMGUI.py:2738 flatcamTools/ToolMove.py:27 msgid "Move" msgstr "Déplacer" @@ -6667,18 +6254,18 @@ msgstr "Zone de Dessin" msgid "General" msgstr "Général" -#: flatcamGUI/FlatCAMGUI.py:1212 flatcamTools/ToolCopperThieving.py:75 -#: flatcamTools/ToolDblSided.py:65 flatcamTools/ToolExtractDrills.py:61 -#: flatcamTools/ToolInvertGerber.py:72 flatcamTools/ToolOptimal.py:72 +#: flatcamGUI/FlatCAMGUI.py:1212 flatcamTools/ToolCopperThieving.py:74 +#: flatcamTools/ToolDblSided.py:64 flatcamTools/ToolExtractDrills.py:61 +#: flatcamTools/ToolInvertGerber.py:72 flatcamTools/ToolOptimal.py:71 #: flatcamTools/ToolPunchGerber.py:64 msgid "GERBER" msgstr "GERBER" -#: flatcamGUI/FlatCAMGUI.py:1222 flatcamTools/ToolDblSided.py:93 +#: flatcamGUI/FlatCAMGUI.py:1222 flatcamTools/ToolDblSided.py:92 msgid "EXCELLON" msgstr "EXCELLON" -#: flatcamGUI/FlatCAMGUI.py:1232 flatcamTools/ToolDblSided.py:121 +#: flatcamGUI/FlatCAMGUI.py:1232 flatcamTools/ToolDblSided.py:120 msgid "GEOMETRY" msgstr "GÉOMÉTRIE" @@ -6687,7 +6274,7 @@ msgid "CNC-JOB" msgstr "CNC-JOB" #: flatcamGUI/FlatCAMGUI.py:1251 flatcamGUI/ObjectUI.py:562 -#: flatcamGUI/ObjectUI.py:2050 +#: flatcamGUI/ObjectUI.py:2051 msgid "TOOLS" msgstr "OUTILS" @@ -7202,16 +6789,33 @@ msgstr "Basculer la Visibilité" msgid "New" msgstr "Nouveau" +#: flatcamGUI/FlatCAMGUI.py:2154 flatcamGUI/ObjectUI.py:449 +#: flatcamObjects/FlatCAMGerber.py:238 flatcamObjects/FlatCAMGerber.py:326 +#: flatcamTools/ToolCalibration.py:631 flatcamTools/ToolCalibration.py:648 +#: flatcamTools/ToolCalibration.py:815 flatcamTools/ToolCopperThieving.py:144 +#: flatcamTools/ToolCopperThieving.py:158 +#: flatcamTools/ToolCopperThieving.py:604 flatcamTools/ToolCutOut.py:92 +#: flatcamTools/ToolDblSided.py:226 flatcamTools/ToolFilm.py:69 +#: flatcamTools/ToolFilm.py:102 flatcamTools/ToolFilm.py:549 +#: flatcamTools/ToolFilm.py:557 flatcamTools/ToolImage.py:49 +#: flatcamTools/ToolImage.py:271 flatcamTools/ToolNCC.py:95 +#: flatcamTools/ToolNCC.py:558 flatcamTools/ToolNCC.py:1295 +#: flatcamTools/ToolPaint.py:502 flatcamTools/ToolPaint.py:706 +#: flatcamTools/ToolPanelize.py:116 flatcamTools/ToolPanelize.py:372 +#: flatcamTools/ToolPanelize.py:389 +msgid "Geometry" +msgstr "Géométrie" + #: flatcamGUI/FlatCAMGUI.py:2158 flatcamGUI/PreferencesUI.py:8410 #: flatcamTools/ToolAlignObjects.py:74 flatcamTools/ToolAlignObjects.py:110 #: flatcamTools/ToolCalibration.py:197 flatcamTools/ToolCalibration.py:631 #: flatcamTools/ToolCalibration.py:648 flatcamTools/ToolCalibration.py:807 -#: flatcamTools/ToolCalibration.py:815 flatcamTools/ToolCopperThieving.py:145 -#: flatcamTools/ToolCopperThieving.py:159 -#: flatcamTools/ToolCopperThieving.py:605 flatcamTools/ToolDblSided.py:226 +#: flatcamTools/ToolCalibration.py:815 flatcamTools/ToolCopperThieving.py:144 +#: flatcamTools/ToolCopperThieving.py:158 +#: flatcamTools/ToolCopperThieving.py:604 flatcamTools/ToolDblSided.py:225 #: flatcamTools/ToolFilm.py:359 flatcamTools/ToolNCC.py:558 #: flatcamTools/ToolNCC.py:1295 flatcamTools/ToolPaint.py:502 -#: flatcamTools/ToolPaint.py:706 flatcamTools/ToolPanelize.py:374 +#: flatcamTools/ToolPaint.py:706 flatcamTools/ToolPanelize.py:372 #: flatcamTools/ToolPunchGerber.py:149 flatcamTools/ToolPunchGerber.py:164 msgid "Excellon" msgstr "Excellon" @@ -7260,7 +6864,7 @@ msgstr "Intersection" msgid "Subtraction" msgstr "Soustraction" -#: flatcamGUI/FlatCAMGUI.py:2209 flatcamGUI/ObjectUI.py:2139 +#: flatcamGUI/FlatCAMGUI.py:2209 flatcamGUI/ObjectUI.py:2140 #: flatcamGUI/PreferencesUI.py:4714 msgid "Cut" msgstr "Couper" @@ -7420,7 +7024,7 @@ msgid "Exit" msgstr "Sortie" #: flatcamGUI/GUIElements.py:2513 flatcamGUI/PreferencesUI.py:6313 -#: flatcamTools/ToolDblSided.py:174 flatcamTools/ToolDblSided.py:389 +#: flatcamTools/ToolDblSided.py:173 flatcamTools/ToolDblSided.py:388 #: flatcamTools/ToolFilm.py:219 msgid "Reference" msgstr "Référence" @@ -7463,6 +7067,10 @@ msgstr "" msgid "Save Log" msgstr "Enregistrer le journal" +#: flatcamGUI/GUIElements.py:2592 flatcamTools/ToolShell.py:285 +msgid "Type >help< to get started" +msgstr "Tapez >help< pour commencer" + #: flatcamGUI/ObjectUI.py:38 msgid "FlatCAM Object" msgstr "Objet FlatCAM" @@ -7522,7 +7130,7 @@ msgid "Gerber Object" msgstr "Objet de Gerber" #: flatcamGUI/ObjectUI.py:186 flatcamGUI/ObjectUI.py:729 -#: flatcamGUI/ObjectUI.py:1424 flatcamGUI/ObjectUI.py:2123 +#: flatcamGUI/ObjectUI.py:1425 flatcamGUI/ObjectUI.py:2124 #: flatcamGUI/PreferencesUI.py:1940 flatcamGUI/PreferencesUI.py:2856 #: flatcamGUI/PreferencesUI.py:4121 flatcamGUI/PreferencesUI.py:4688 msgid "Plot Options" @@ -7530,7 +7138,7 @@ msgstr "Options de Tracé" #: flatcamGUI/ObjectUI.py:192 flatcamGUI/ObjectUI.py:730 #: flatcamGUI/PreferencesUI.py:1947 flatcamGUI/PreferencesUI.py:2868 -#: flatcamGUI/PreferencesUI.py:7728 flatcamTools/ToolCopperThieving.py:192 +#: flatcamGUI/PreferencesUI.py:7728 flatcamTools/ToolCopperThieving.py:191 msgid "Solid" msgstr "Solide" @@ -7553,7 +7161,7 @@ msgid "Plot" msgstr "Dessin" #: flatcamGUI/ObjectUI.py:210 flatcamGUI/ObjectUI.py:770 -#: flatcamGUI/ObjectUI.py:1484 flatcamGUI/ObjectUI.py:2233 +#: flatcamGUI/ObjectUI.py:1485 flatcamGUI/ObjectUI.py:2234 #: flatcamGUI/PreferencesUI.py:1963 flatcamGUI/PreferencesUI.py:4127 #: flatcamGUI/PreferencesUI.py:4699 msgid "Plot (show) this object." @@ -7617,7 +7225,7 @@ msgstr "" msgid "V-Shape" msgstr "Forme en V" -#: flatcamGUI/ObjectUI.py:322 flatcamGUI/ObjectUI.py:1670 +#: flatcamGUI/ObjectUI.py:322 flatcamGUI/ObjectUI.py:1671 #: flatcamGUI/PreferencesUI.py:2411 flatcamGUI/PreferencesUI.py:5351 #: flatcamGUI/PreferencesUI.py:5917 flatcamGUI/PreferencesUI.py:5924 #: flatcamTools/ToolNCC.py:233 flatcamTools/ToolNCC.py:240 @@ -7625,14 +7233,14 @@ msgstr "Forme en V" msgid "V-Tip Dia" msgstr "Dia V-Tip" -#: flatcamGUI/ObjectUI.py:324 flatcamGUI/ObjectUI.py:1673 +#: flatcamGUI/ObjectUI.py:324 flatcamGUI/ObjectUI.py:1674 #: flatcamGUI/PreferencesUI.py:2413 flatcamGUI/PreferencesUI.py:5353 #: flatcamGUI/PreferencesUI.py:5919 flatcamTools/ToolNCC.py:235 #: flatcamTools/ToolPaint.py:218 msgid "The tip diameter for V-Shape Tool" msgstr "Le diamètre de la pointe pour l'outil en forme de V" -#: flatcamGUI/ObjectUI.py:335 flatcamGUI/ObjectUI.py:1685 +#: flatcamGUI/ObjectUI.py:335 flatcamGUI/ObjectUI.py:1686 #: flatcamGUI/PreferencesUI.py:2424 flatcamGUI/PreferencesUI.py:5363 #: flatcamGUI/PreferencesUI.py:5930 flatcamGUI/PreferencesUI.py:5938 #: flatcamTools/ToolNCC.py:246 flatcamTools/ToolNCC.py:254 @@ -7640,7 +7248,7 @@ msgstr "Le diamètre de la pointe pour l'outil en forme de V" msgid "V-Tip Angle" msgstr "Angle en V-tip" -#: flatcamGUI/ObjectUI.py:337 flatcamGUI/ObjectUI.py:1688 +#: flatcamGUI/ObjectUI.py:337 flatcamGUI/ObjectUI.py:1689 #: flatcamGUI/PreferencesUI.py:2426 flatcamGUI/PreferencesUI.py:5365 #: flatcamGUI/PreferencesUI.py:5932 flatcamTools/ToolNCC.py:248 #: flatcamTools/ToolPaint.py:231 @@ -7651,9 +7259,9 @@ msgstr "" "L'angle de pointe pour l'outil en forme de V\n" "En degré." -#: flatcamGUI/ObjectUI.py:351 flatcamGUI/ObjectUI.py:1704 +#: flatcamGUI/ObjectUI.py:351 flatcamGUI/ObjectUI.py:1705 #: flatcamGUI/PreferencesUI.py:2439 flatcamGUI/PreferencesUI.py:4243 -#: flatcamGUI/PreferencesUI.py:5669 flatcamTools/ToolCutOut.py:142 +#: flatcamGUI/PreferencesUI.py:5669 flatcamTools/ToolCutOut.py:141 msgid "" "Cutting depth (negative)\n" "below the copper surface." @@ -7745,6 +7353,26 @@ msgstr "" "en cochant cela, la zone de l'objet ci-dessous\n" "sera soustrait de la géométrie d'isolation." +#: flatcamGUI/ObjectUI.py:449 flatcamGUI/PreferencesUI.py:6527 +#: flatcamObjects/FlatCAMGerber.py:238 flatcamObjects/FlatCAMGerber.py:326 +#: flatcamTools/ToolAlignObjects.py:73 flatcamTools/ToolAlignObjects.py:109 +#: flatcamTools/ToolCalibration.py:196 flatcamTools/ToolCalibration.py:631 +#: flatcamTools/ToolCalibration.py:648 flatcamTools/ToolCalibration.py:807 +#: flatcamTools/ToolCalibration.py:815 flatcamTools/ToolCopperThieving.py:144 +#: flatcamTools/ToolCopperThieving.py:158 +#: flatcamTools/ToolCopperThieving.py:604 flatcamTools/ToolCutOut.py:91 +#: flatcamTools/ToolDblSided.py:224 flatcamTools/ToolFilm.py:69 +#: flatcamTools/ToolFilm.py:102 flatcamTools/ToolFilm.py:549 +#: flatcamTools/ToolFilm.py:557 flatcamTools/ToolImage.py:49 +#: flatcamTools/ToolImage.py:252 flatcamTools/ToolImage.py:273 +#: flatcamTools/ToolNCC.py:96 flatcamTools/ToolNCC.py:558 +#: flatcamTools/ToolNCC.py:1295 flatcamTools/ToolPaint.py:502 +#: flatcamTools/ToolPaint.py:706 flatcamTools/ToolPanelize.py:116 +#: flatcamTools/ToolPanelize.py:202 flatcamTools/ToolPanelize.py:372 +#: flatcamTools/ToolPanelize.py:389 +msgid "Gerber" +msgstr "Gerber" + #: flatcamGUI/ObjectUI.py:456 flatcamTools/ToolNCC.py:86 #: flatcamTools/ToolPaint.py:80 msgid "Obj Type" @@ -7764,7 +7392,7 @@ msgstr "" #: flatcamGUI/ObjectUI.py:471 flatcamGUI/PreferencesUI.py:8028 #: flatcamTools/ToolCalibration.py:186 flatcamTools/ToolNCC.py:109 -#: flatcamTools/ToolPaint.py:103 flatcamTools/ToolPanelize.py:100 +#: flatcamTools/ToolPaint.py:103 flatcamTools/ToolPanelize.py:98 #: flatcamTools/ToolQRCode.py:78 msgid "Object" msgstr "Objet" @@ -7886,7 +7514,7 @@ msgstr "" "Créez un objet de géométrie avec\n" "des parcours pour couper toutes les régions non-cuivre." -#: flatcamGUI/ObjectUI.py:575 flatcamGUI/ObjectUI.py:2077 +#: flatcamGUI/ObjectUI.py:575 flatcamGUI/ObjectUI.py:2078 #: flatcamTools/ToolNCC.py:599 msgid "" "Create the Geometry Object\n" @@ -7962,12 +7590,12 @@ msgid "Resulting geometry will have rounded corners." msgstr "La géométrie résultante aura des coins arrondis." #: flatcamGUI/ObjectUI.py:650 flatcamGUI/ObjectUI.py:691 -#: flatcamTools/ToolSolderPaste.py:135 +#: flatcamTools/ToolSolderPaste.py:134 msgid "Generate Geo" msgstr "Générer de la Géo" #: flatcamGUI/ObjectUI.py:660 flatcamGUI/PreferencesUI.py:2322 -#: flatcamGUI/PreferencesUI.py:7558 flatcamTools/ToolPanelize.py:101 +#: flatcamGUI/PreferencesUI.py:7558 flatcamTools/ToolPanelize.py:99 #: flatcamTools/ToolQRCode.py:192 msgid "Bounding Box" msgstr "Cadre de sélection" @@ -8013,13 +7641,13 @@ msgid "Solid circles." msgstr "Cercles pleins." #: flatcamGUI/ObjectUI.py:780 flatcamGUI/ObjectUI.py:875 -#: flatcamGUI/ObjectUI.py:2254 flatcamGUI/PreferencesUI.py:3289 +#: flatcamGUI/ObjectUI.py:2255 flatcamGUI/PreferencesUI.py:3289 #: flatcamTools/ToolProperties.py:166 msgid "Drills" msgstr "Forage" #: flatcamGUI/ObjectUI.py:780 flatcamGUI/ObjectUI.py:876 -#: flatcamGUI/ObjectUI.py:2254 flatcamGUI/PreferencesUI.py:3290 +#: flatcamGUI/ObjectUI.py:2255 flatcamGUI/PreferencesUI.py:3290 #: flatcamGUI/PreferencesUI.py:3961 flatcamTools/ToolProperties.py:168 msgid "Slots" msgstr "Fentes" @@ -8039,7 +7667,7 @@ msgstr "" "\n" "Ici, les outils sont sélectionnés pour la génération de code G." -#: flatcamGUI/ObjectUI.py:790 flatcamGUI/ObjectUI.py:1508 +#: flatcamGUI/ObjectUI.py:790 flatcamGUI/ObjectUI.py:1509 #: flatcamTools/ToolPaint.py:142 msgid "" "Tool Diameter. It's value (in current FlatCAM units) \n" @@ -8072,7 +7700,19 @@ msgstr "" "Basculer l'affichage des exercices pour l'outil actuel.\n" "Cela ne sélectionne pas les outils pour la génération de G-code." -#: flatcamGUI/ObjectUI.py:820 flatcamGUI/ObjectUI.py:1663 +#: flatcamGUI/ObjectUI.py:817 flatcamGUI/ObjectUI.py:1661 +#: flatcamObjects/FlatCAMExcellon.py:514 flatcamObjects/FlatCAMExcellon.py:726 +#: flatcamObjects/FlatCAMExcellon.py:742 flatcamObjects/FlatCAMExcellon.py:746 +#: flatcamObjects/FlatCAMGeometry.py:306 flatcamObjects/FlatCAMGeometry.py:731 +#: flatcamObjects/FlatCAMGeometry.py:767 flatcamTools/ToolNCC.py:331 +#: flatcamTools/ToolNCC.py:797 flatcamTools/ToolNCC.py:811 +#: flatcamTools/ToolNCC.py:1191 flatcamTools/ToolPaint.py:314 +#: flatcamTools/ToolPaint.py:767 flatcamTools/ToolPaint.py:779 +#: flatcamTools/ToolPaint.py:1166 +msgid "Parameters for" +msgstr "Paramètres pour" + +#: flatcamGUI/ObjectUI.py:820 flatcamGUI/ObjectUI.py:1664 #: flatcamTools/ToolNCC.py:334 flatcamTools/ToolPaint.py:317 msgid "" "The data used for creating GCode.\n" @@ -8133,15 +7773,15 @@ msgstr "" "Profondeur de forage (négatif)\n" "sous la surface de cuivre." -#: flatcamGUI/ObjectUI.py:920 flatcamGUI/ObjectUI.py:1722 +#: flatcamGUI/ObjectUI.py:920 flatcamGUI/ObjectUI.py:1723 #: flatcamGUI/PreferencesUI.py:3331 flatcamGUI/PreferencesUI.py:4261 -#: flatcamGUI/PreferencesUI.py:5687 flatcamTools/ToolCutOut.py:160 +#: flatcamGUI/PreferencesUI.py:5687 flatcamTools/ToolCutOut.py:159 msgid "Multi-Depth" msgstr "Multi-profondeur" -#: flatcamGUI/ObjectUI.py:923 flatcamGUI/ObjectUI.py:1725 +#: flatcamGUI/ObjectUI.py:923 flatcamGUI/ObjectUI.py:1726 #: flatcamGUI/PreferencesUI.py:3334 flatcamGUI/PreferencesUI.py:4264 -#: flatcamGUI/PreferencesUI.py:5690 flatcamTools/ToolCutOut.py:163 +#: flatcamGUI/PreferencesUI.py:5690 flatcamTools/ToolCutOut.py:162 msgid "" "Use multiple passes to limit\n" "the cut depth in each pass. Will\n" @@ -8153,9 +7793,9 @@ msgstr "" "couper plusieurs fois jusqu'à ce que Cut Z soit\n" "atteint." -#: flatcamGUI/ObjectUI.py:936 flatcamGUI/ObjectUI.py:1739 +#: flatcamGUI/ObjectUI.py:936 flatcamGUI/ObjectUI.py:1740 #: flatcamGUI/PreferencesUI.py:3346 flatcamGUI/PreferencesUI.py:5702 -#: flatcamTools/ToolCutOut.py:177 +#: flatcamTools/ToolCutOut.py:176 msgid "Depth of each pass (positive)." msgstr "Profondeur de chaque passage (positif)." @@ -8167,7 +7807,7 @@ msgstr "" "Hauteur de l'outil en voyage\n" "à travers le plan XY." -#: flatcamGUI/ObjectUI.py:968 flatcamGUI/ObjectUI.py:1769 +#: flatcamGUI/ObjectUI.py:968 flatcamGUI/ObjectUI.py:1770 #: flatcamGUI/PreferencesUI.py:4380 msgid "" "Cutting speed in the XY\n" @@ -8188,7 +7828,7 @@ msgstr "" "Ce qu'on appelle \"avance\".\n" "Ceci est pour le mouvement linéaire G01." -#: flatcamGUI/ObjectUI.py:998 flatcamGUI/ObjectUI.py:1796 +#: flatcamGUI/ObjectUI.py:998 flatcamGUI/ObjectUI.py:1797 #: flatcamGUI/PreferencesUI.py:3597 flatcamGUI/PreferencesUI.py:4503 msgid "Feedrate Rapids" msgstr "Avance rapide" @@ -8207,13 +7847,13 @@ msgstr "" "C'est utile seulement pour Marlin,\n" "ignorer pour les autres cas." -#: flatcamGUI/ObjectUI.py:1020 flatcamGUI/ObjectUI.py:1816 +#: flatcamGUI/ObjectUI.py:1020 flatcamGUI/ObjectUI.py:1817 #: flatcamGUI/PreferencesUI.py:4521 msgid "Re-cut" msgstr "Re-coupé" #: flatcamGUI/ObjectUI.py:1022 flatcamGUI/ObjectUI.py:1035 -#: flatcamGUI/ObjectUI.py:1818 flatcamGUI/ObjectUI.py:1830 +#: flatcamGUI/ObjectUI.py:1819 flatcamGUI/ObjectUI.py:1831 #: flatcamGUI/PreferencesUI.py:4523 flatcamGUI/PreferencesUI.py:4535 msgid "" "In order to remove possible\n" @@ -8226,6 +7866,12 @@ msgstr "" "rencontre avec la dernière coupe, nous générons un\n" "coupe étendue sur la première section coupée." +#: flatcamGUI/ObjectUI.py:1048 flatcamGUI/ObjectUI.py:1840 +#: flatcamGUI/PreferencesUI.py:4409 flatcamObjects/FlatCAMExcellon.py:1332 +#: flatcamObjects/FlatCAMGeometry.py:1568 +msgid "Spindle speed" +msgstr "Vitesse de broche" + #: flatcamGUI/ObjectUI.py:1050 flatcamGUI/PreferencesUI.py:3442 msgid "" "Speed of the spindle\n" @@ -8234,7 +7880,7 @@ msgstr "" "Vitesse de la broche\n" "en tours / minute (optionnel)" -#: flatcamGUI/ObjectUI.py:1065 flatcamGUI/ObjectUI.py:1858 +#: flatcamGUI/ObjectUI.py:1065 flatcamGUI/ObjectUI.py:1859 #: flatcamGUI/PreferencesUI.py:3456 flatcamGUI/PreferencesUI.py:4427 msgid "" "Pause to allow the spindle to reach its\n" @@ -8243,7 +7889,7 @@ msgstr "" "Pause pour permettre à la broche d’atteindre son\n" "vitesse avant de couper." -#: flatcamGUI/ObjectUI.py:1076 flatcamGUI/ObjectUI.py:1868 +#: flatcamGUI/ObjectUI.py:1076 flatcamGUI/ObjectUI.py:1869 #: flatcamGUI/PreferencesUI.py:3464 flatcamGUI/PreferencesUI.py:4432 msgid "Number of time units for spindle to dwell." msgstr "Nombre d'unités de temps pendant lesquelles la broche s'arrête." @@ -8263,12 +7909,12 @@ msgstr "" "la pointe.\n" "La valeur ici peut compenser le paramètre Cut Z." -#: flatcamGUI/ObjectUI.py:1148 flatcamGUI/ObjectUI.py:1922 +#: flatcamGUI/ObjectUI.py:1148 flatcamGUI/ObjectUI.py:1923 #: flatcamTools/ToolNCC.py:492 flatcamTools/ToolPaint.py:423 msgid "Apply parameters to all tools" msgstr "Appliquer des paramètres à tous les outils" -#: flatcamGUI/ObjectUI.py:1150 flatcamGUI/ObjectUI.py:1924 +#: flatcamGUI/ObjectUI.py:1150 flatcamGUI/ObjectUI.py:1925 #: flatcamTools/ToolNCC.py:494 flatcamTools/ToolPaint.py:425 msgid "" "The parameters in the current form will be applied\n" @@ -8277,17 +7923,17 @@ msgstr "" "Les paramètres du formulaire actuel seront appliqués\n" "sur tous les outils de la table d'outils." -#: flatcamGUI/ObjectUI.py:1161 flatcamGUI/ObjectUI.py:1935 +#: flatcamGUI/ObjectUI.py:1161 flatcamGUI/ObjectUI.py:1936 #: flatcamTools/ToolNCC.py:505 flatcamTools/ToolPaint.py:436 msgid "Common Parameters" msgstr "Paramètres communs" -#: flatcamGUI/ObjectUI.py:1163 flatcamGUI/ObjectUI.py:1937 +#: flatcamGUI/ObjectUI.py:1163 flatcamGUI/ObjectUI.py:1938 #: flatcamTools/ToolNCC.py:507 flatcamTools/ToolPaint.py:438 msgid "Parameters that are common for all tools." msgstr "Paramètres communs à tous les outils." -#: flatcamGUI/ObjectUI.py:1168 flatcamGUI/ObjectUI.py:1942 +#: flatcamGUI/ObjectUI.py:1168 flatcamGUI/ObjectUI.py:1943 msgid "Tool change Z" msgstr "Changement d'outil Z" @@ -8299,7 +7945,7 @@ msgstr "" "Inclure la séquence de changement d'outil\n" "dans G-Code (Pause pour changement d’outil)." -#: flatcamGUI/ObjectUI.py:1177 flatcamGUI/ObjectUI.py:1953 +#: flatcamGUI/ObjectUI.py:1177 flatcamGUI/ObjectUI.py:1954 #: flatcamGUI/PreferencesUI.py:3380 flatcamGUI/PreferencesUI.py:4327 msgid "" "Z-axis position (height) for\n" @@ -8316,12 +7962,12 @@ msgstr "" "Hauteur de l'outil juste après le démarrage.\n" "Supprimez la valeur si vous n'avez pas besoin de cette fonctionnalité." -#: flatcamGUI/ObjectUI.py:1203 flatcamGUI/ObjectUI.py:1981 +#: flatcamGUI/ObjectUI.py:1203 flatcamGUI/ObjectUI.py:1982 #: flatcamGUI/PreferencesUI.py:3396 flatcamGUI/PreferencesUI.py:4346 msgid "End move Z" msgstr "Fin du mouve. Z" -#: flatcamGUI/ObjectUI.py:1205 flatcamGUI/ObjectUI.py:1983 +#: flatcamGUI/ObjectUI.py:1205 flatcamGUI/ObjectUI.py:1984 #: flatcamGUI/PreferencesUI.py:3398 flatcamGUI/PreferencesUI.py:4348 msgid "" "Height of the tool after\n" @@ -8330,12 +7976,12 @@ msgstr "" "Hauteur de l'outil après\n" "le dernier mouvement à la fin du travail." -#: flatcamGUI/ObjectUI.py:1222 flatcamGUI/ObjectUI.py:2000 +#: flatcamGUI/ObjectUI.py:1222 flatcamGUI/ObjectUI.py:2001 #: flatcamGUI/PreferencesUI.py:3413 flatcamGUI/PreferencesUI.py:4366 msgid "End move X,Y" msgstr "Fin de coup X, Y" -#: flatcamGUI/ObjectUI.py:1224 flatcamGUI/ObjectUI.py:2002 +#: flatcamGUI/ObjectUI.py:1224 flatcamGUI/ObjectUI.py:2003 #: flatcamGUI/PreferencesUI.py:3415 flatcamGUI/PreferencesUI.py:4368 msgid "" "End move X,Y position. In format (x,y).\n" @@ -8346,12 +7992,12 @@ msgstr "" "Si aucune valeur n'est entrée, il n'y a pas de mouvement\n" "sur l'avion X, Y à la fin du travail." -#: flatcamGUI/ObjectUI.py:1234 flatcamGUI/ObjectUI.py:1876 +#: flatcamGUI/ObjectUI.py:1234 flatcamGUI/ObjectUI.py:1877 #: flatcamGUI/PreferencesUI.py:3613 flatcamGUI/PreferencesUI.py:4544 msgid "Probe Z depth" msgstr "Prof.r de la sonde Z" -#: flatcamGUI/ObjectUI.py:1236 flatcamGUI/ObjectUI.py:1878 +#: flatcamGUI/ObjectUI.py:1236 flatcamGUI/ObjectUI.py:1879 #: flatcamGUI/PreferencesUI.py:3615 flatcamGUI/PreferencesUI.py:4546 msgid "" "The maximum depth that the probe is allowed\n" @@ -8360,25 +8006,21 @@ msgstr "" "La profondeur maximale autorisée pour la sonde\n" "sonder. Valeur négative, en unités actuelles." -#: flatcamGUI/ObjectUI.py:1252 flatcamGUI/ObjectUI.py:1893 +#: flatcamGUI/ObjectUI.py:1253 flatcamGUI/ObjectUI.py:1894 #: flatcamGUI/PreferencesUI.py:3626 flatcamGUI/PreferencesUI.py:4559 msgid "Feedrate Probe" msgstr "Sonde d'avance" -#: flatcamGUI/ObjectUI.py:1254 flatcamGUI/ObjectUI.py:1895 +#: flatcamGUI/ObjectUI.py:1255 flatcamGUI/ObjectUI.py:1896 #: flatcamGUI/PreferencesUI.py:3628 flatcamGUI/PreferencesUI.py:4561 msgid "The feedrate used while the probe is probing." msgstr "L'avance utilisée pendant le sondage." -#: flatcamGUI/ObjectUI.py:1261 -msgid "e_fr_probe" -msgstr "e_fr_probe" - -#: flatcamGUI/ObjectUI.py:1270 +#: flatcamGUI/ObjectUI.py:1271 msgid "Preprocessor E" msgstr "Post-processeur E" -#: flatcamGUI/ObjectUI.py:1272 +#: flatcamGUI/ObjectUI.py:1273 msgid "" "The preprocessor JSON file that dictates\n" "Gcode output for Excellon Objects." @@ -8386,11 +8028,11 @@ msgstr "" "Le fichier JSON du préprocesseur qui dicte\n" "Sortie Gcode pour Excellon Objects." -#: flatcamGUI/ObjectUI.py:1282 +#: flatcamGUI/ObjectUI.py:1283 msgid "Preprocessor G" msgstr "Post-processeur G" -#: flatcamGUI/ObjectUI.py:1284 +#: flatcamGUI/ObjectUI.py:1285 msgid "" "The preprocessor JSON file that dictates\n" "Gcode output for Geometry (Milling) Objects." @@ -8398,7 +8040,7 @@ msgstr "" "Le fichier JSON du préprocesseur qui dicte\n" "Sortie Gcode pour les objets de géométrie (fraisage)." -#: flatcamGUI/ObjectUI.py:1308 flatcamGUI/ObjectUI.py:2026 +#: flatcamGUI/ObjectUI.py:1309 flatcamGUI/ObjectUI.py:2027 msgid "" "Add / Select at least one tool in the tool-table.\n" "Click the # header to select all, or Ctrl + LMB\n" @@ -8408,11 +8050,11 @@ msgstr "" "Cliquez sur l'en-tête # pour tout sélectionner ou sur Ctrl + LMB\n" "pour une sélection personnalisée d'outils." -#: flatcamGUI/ObjectUI.py:1316 flatcamGUI/ObjectUI.py:2033 +#: flatcamGUI/ObjectUI.py:1317 flatcamGUI/ObjectUI.py:2034 msgid "Generate CNCJob object" msgstr "Générer un objet CNCJob" -#: flatcamGUI/ObjectUI.py:1318 +#: flatcamGUI/ObjectUI.py:1319 msgid "" "Generate the CNC Job.\n" "If milling then an additional Geometry object will be created" @@ -8420,11 +8062,11 @@ msgstr "" "Générez le travail CNC.\n" "En cas de fraisage, un objet Geometry supplémentaire sera créé" -#: flatcamGUI/ObjectUI.py:1335 +#: flatcamGUI/ObjectUI.py:1336 msgid "Milling Geometry" msgstr "Géo. de fraisage" -#: flatcamGUI/ObjectUI.py:1337 +#: flatcamGUI/ObjectUI.py:1338 msgid "" "Create Geometry for milling holes.\n" "Select from the Tools Table above the hole dias to be\n" @@ -8434,16 +8076,16 @@ msgstr "" "Sélectionnez dans le tableau des outils au-dessus du diamètre du trou à\n" "fraisé. Utilisez la colonne # pour effectuer la sélection." -#: flatcamGUI/ObjectUI.py:1345 flatcamGUI/PreferencesUI.py:2207 +#: flatcamGUI/ObjectUI.py:1346 flatcamGUI/PreferencesUI.py:2207 #: flatcamGUI/PreferencesUI.py:3514 msgid "Diameter of the cutting tool." msgstr "Diamètre de l'outil de coupe." -#: flatcamGUI/ObjectUI.py:1355 +#: flatcamGUI/ObjectUI.py:1356 msgid "Mill Drills" msgstr "Fraiser les Forets" -#: flatcamGUI/ObjectUI.py:1357 +#: flatcamGUI/ObjectUI.py:1358 msgid "" "Create the Geometry Object\n" "for milling DRILLS toolpaths." @@ -8451,11 +8093,11 @@ msgstr "" "Créer l'objet de géométrie\n" "pour fraiser des parcours d’outils." -#: flatcamGUI/ObjectUI.py:1375 +#: flatcamGUI/ObjectUI.py:1376 msgid "Mill Slots" msgstr "Fraiser les Fentes" -#: flatcamGUI/ObjectUI.py:1377 +#: flatcamGUI/ObjectUI.py:1378 msgid "" "Create the Geometry Object\n" "for milling SLOTS toolpaths." @@ -8463,11 +8105,11 @@ msgstr "" "Créer l'objet de géométrie\n" "pour fraiser des parcours d’outils." -#: flatcamGUI/ObjectUI.py:1419 flatcamTools/ToolCutOut.py:327 +#: flatcamGUI/ObjectUI.py:1420 flatcamTools/ToolCutOut.py:326 msgid "Geometry Object" msgstr "Objet de géométrie" -#: flatcamGUI/ObjectUI.py:1465 +#: flatcamGUI/ObjectUI.py:1466 msgid "" "Tools in this Geometry object used for cutting.\n" "The 'Offset' entry will set an offset for the cut.\n" @@ -8498,23 +8140,23 @@ msgstr "" "a montré des entrées de formulaire d’interface utilisateur nommées V-Tip Dia " "et V-Tip Angle." -#: flatcamGUI/ObjectUI.py:1482 flatcamGUI/ObjectUI.py:2231 +#: flatcamGUI/ObjectUI.py:1483 flatcamGUI/ObjectUI.py:2232 #: flatcamGUI/PreferencesUI.py:4698 msgid "Plot Object" msgstr "Dessiner un objet" -#: flatcamGUI/ObjectUI.py:1495 flatcamGUI/ObjectUI.py:2244 -#: flatcamGUI/ObjectUI.py:2254 flatcamGUI/PreferencesUI.py:7747 -#: flatcamTools/ToolCopperThieving.py:222 +#: flatcamGUI/ObjectUI.py:1496 flatcamGUI/ObjectUI.py:2245 +#: flatcamGUI/ObjectUI.py:2255 flatcamGUI/PreferencesUI.py:7747 +#: flatcamTools/ToolCopperThieving.py:221 msgid "Dia" msgstr "Dia" -#: flatcamGUI/ObjectUI.py:1495 flatcamGUI/ObjectUI.py:2244 +#: flatcamGUI/ObjectUI.py:1496 flatcamGUI/ObjectUI.py:2245 #: flatcamTools/ToolNCC.py:132 flatcamTools/ToolPaint.py:128 msgid "TT" msgstr "TT" -#: flatcamGUI/ObjectUI.py:1502 +#: flatcamGUI/ObjectUI.py:1503 msgid "" "This is the Tool Number.\n" "When ToolChange is checked, on toolchange event this value\n" @@ -8525,7 +8167,7 @@ msgstr "" "cette valeur\n" "sera montré comme un T1, T2 ... Tn" -#: flatcamGUI/ObjectUI.py:1513 +#: flatcamGUI/ObjectUI.py:1514 msgid "" "The value for the Offset can be:\n" "- Path -> There is no offset, the tool cut will be done through the geometry " @@ -8541,7 +8183,7 @@ msgstr "" "créer une \"poche\".\n" "- Extérieur -> L'outil coupé suivra la ligne géométrique à l'extérieur." -#: flatcamGUI/ObjectUI.py:1520 +#: flatcamGUI/ObjectUI.py:1521 msgid "" "The (Operation) Type has only informative value. Usually the UI form " "values \n" @@ -8563,7 +8205,7 @@ msgstr "" "Pour l'isolation, nous avons besoin d'une vitesse d'avance plus faible car " "elle utilise un foret à pointe fine." -#: flatcamGUI/ObjectUI.py:1529 +#: flatcamGUI/ObjectUI.py:1530 msgid "" "The Tool Type (TT) can be:\n" "- Circular with 1 ... 4 teeth -> it is informative only. Being circular the " @@ -8593,7 +8235,7 @@ msgstr "" "Le choix du type d'outil en forme de V sélectionne automatiquement le type " "d'opération comme isolement." -#: flatcamGUI/ObjectUI.py:1541 +#: flatcamGUI/ObjectUI.py:1542 msgid "" "Plot column. It is visible only for MultiGeo geometries, meaning geometries " "that holds the geometry\n" @@ -8611,7 +8253,7 @@ msgstr "" "activer / désactiver le tracé sur le canevas.\n" "pour l'outil correspondant." -#: flatcamGUI/ObjectUI.py:1559 +#: flatcamGUI/ObjectUI.py:1560 msgid "" "The value to offset the cut when \n" "the Offset type selected is 'Offset'.\n" @@ -8623,13 +8265,13 @@ msgstr "" "La valeur peut être positive pour 'dehors'\n" "coupé et négatif pour «à l'intérieur» coupé." -#: flatcamGUI/ObjectUI.py:1578 flatcamTools/ToolNCC.py:209 +#: flatcamGUI/ObjectUI.py:1579 flatcamTools/ToolNCC.py:209 #: flatcamTools/ToolNCC.py:923 flatcamTools/ToolPaint.py:192 #: flatcamTools/ToolPaint.py:849 flatcamTools/ToolSolderPaste.py:559 msgid "New Tool" msgstr "Nouvel Outil" -#: flatcamGUI/ObjectUI.py:1595 +#: flatcamGUI/ObjectUI.py:1596 msgid "" "Add a new tool to the Tool Table\n" "with the specified diameter." @@ -8637,13 +8279,13 @@ msgstr "" "Ajouter un nouvel outil à la table d'outils\n" "avec le diamètre spécifié." -#: flatcamGUI/ObjectUI.py:1600 flatcamTools/ToolNCC.py:300 +#: flatcamGUI/ObjectUI.py:1601 flatcamTools/ToolNCC.py:300 #: flatcamTools/ToolNCC.py:634 flatcamTools/ToolPaint.py:283 #: flatcamTools/ToolPaint.py:679 msgid "Add from DB" msgstr "Ajouter depuis la BD" -#: flatcamGUI/ObjectUI.py:1602 flatcamTools/ToolNCC.py:302 +#: flatcamGUI/ObjectUI.py:1603 flatcamTools/ToolNCC.py:302 #: flatcamTools/ToolPaint.py:285 msgid "" "Add a new tool to the Tool Table\n" @@ -8652,7 +8294,7 @@ msgstr "" "Ajouter un nouvel outil à la table d'outils\n" "à partir de la base de données d'outils." -#: flatcamGUI/ObjectUI.py:1617 +#: flatcamGUI/ObjectUI.py:1618 msgid "" "Copy a selection of tools in the Tool Table\n" "by first selecting a row in the Tool Table." @@ -8660,7 +8302,7 @@ msgstr "" "Copier une sélection d'outils dans la table d'outils\n" "en sélectionnant d'abord une ligne dans la table d'outils." -#: flatcamGUI/ObjectUI.py:1623 +#: flatcamGUI/ObjectUI.py:1624 msgid "" "Delete a selection of tools in the Tool Table\n" "by first selecting a row in the Tool Table." @@ -8668,7 +8310,7 @@ msgstr "" "Supprimer une sélection d'outils dans la table d'outils\n" "en sélectionnant d'abord une ligne dans la table d'outils." -#: flatcamGUI/ObjectUI.py:1750 flatcamGUI/PreferencesUI.py:4296 +#: flatcamGUI/ObjectUI.py:1751 flatcamGUI/PreferencesUI.py:4296 msgid "" "Height of the tool when\n" "moving without cutting." @@ -8676,7 +8318,7 @@ msgstr "" "Hauteur de l'outil quand\n" "se déplacer sans couper." -#: flatcamGUI/ObjectUI.py:1783 flatcamGUI/PreferencesUI.py:4395 +#: flatcamGUI/ObjectUI.py:1784 flatcamGUI/PreferencesUI.py:4395 msgid "" "Cutting speed in the XY\n" "plane in units per minute.\n" @@ -8686,7 +8328,7 @@ msgstr "" "avion en unités par minute.\n" "Cela s'appelle aussi plonger." -#: flatcamGUI/ObjectUI.py:1798 flatcamGUI/PreferencesUI.py:4505 +#: flatcamGUI/ObjectUI.py:1799 flatcamGUI/PreferencesUI.py:4505 msgid "" "Cutting speed in the XY plane\n" "(in units per minute).\n" @@ -8700,7 +8342,7 @@ msgstr "" "C'est utile seulement pour Marlin,\n" "ignorer pour les autres cas." -#: flatcamGUI/ObjectUI.py:1842 flatcamGUI/PreferencesUI.py:4412 +#: flatcamGUI/ObjectUI.py:1843 flatcamGUI/PreferencesUI.py:4412 msgid "" "Speed of the spindle in RPM (optional).\n" "If LASER preprocessor is used,\n" @@ -8710,7 +8352,7 @@ msgstr "" "Si le post-processeur LASER est utilisé,\n" "cette valeur est la puissance du laser." -#: flatcamGUI/ObjectUI.py:1945 flatcamGUI/PreferencesUI.py:4317 +#: flatcamGUI/ObjectUI.py:1946 flatcamGUI/PreferencesUI.py:4317 msgid "" "Include tool-change sequence\n" "in the Machine Code (Pause for tool change)." @@ -8718,7 +8360,7 @@ msgstr "" "Inclure la séquence de changement d'outil\n" "dans le code machine (pause pour changement d'outil)." -#: flatcamGUI/ObjectUI.py:2014 flatcamGUI/PreferencesUI.py:4449 +#: flatcamGUI/ObjectUI.py:2015 flatcamGUI/PreferencesUI.py:4449 msgid "" "The Preprocessor file that dictates\n" "the Machine Code (like GCode, RML, HPGL) output." @@ -8726,15 +8368,15 @@ msgstr "" "Le fichier post-processeur qui dicte\n" "le code machine (comme GCode, RML, HPGL." -#: flatcamGUI/ObjectUI.py:2035 +#: flatcamGUI/ObjectUI.py:2036 msgid "Generate the CNC Job object." msgstr "Générez l'objet Travail CNC." -#: flatcamGUI/ObjectUI.py:2052 +#: flatcamGUI/ObjectUI.py:2053 msgid "Launch Paint Tool in Tools Tab." msgstr "Lancer L'outil de Peinture dans l'onglet Outils." -#: flatcamGUI/ObjectUI.py:2060 flatcamGUI/PreferencesUI.py:5874 +#: flatcamGUI/ObjectUI.py:2061 flatcamGUI/PreferencesUI.py:5874 msgid "" "Creates tool paths to cover the\n" "whole area of a polygon (remove\n" @@ -8746,15 +8388,15 @@ msgstr "" "tout en cuivre). Tu vas être interrogé\n" "cliquer sur le polygone désiré." -#: flatcamGUI/ObjectUI.py:2115 +#: flatcamGUI/ObjectUI.py:2116 msgid "CNC Job Object" msgstr "Objet de travail CNC" -#: flatcamGUI/ObjectUI.py:2126 flatcamGUI/PreferencesUI.py:4703 +#: flatcamGUI/ObjectUI.py:2127 flatcamGUI/PreferencesUI.py:4703 msgid "Plot kind" msgstr "Dessiner genre" -#: flatcamGUI/ObjectUI.py:2129 flatcamGUI/PreferencesUI.py:4705 +#: flatcamGUI/ObjectUI.py:2130 flatcamGUI/PreferencesUI.py:4705 msgid "" "This selects the kind of geometries on the canvas to plot.\n" "Those can be either of type 'Travel' which means the moves\n" @@ -8766,15 +8408,15 @@ msgstr "" "au-dessus de la pièce ou il peut être de type 'Couper',\n" "ce qui signifie les mouvements qui coupent dans le matériau." -#: flatcamGUI/ObjectUI.py:2138 flatcamGUI/PreferencesUI.py:4713 +#: flatcamGUI/ObjectUI.py:2139 flatcamGUI/PreferencesUI.py:4713 msgid "Travel" msgstr "Voyage" -#: flatcamGUI/ObjectUI.py:2142 flatcamGUI/PreferencesUI.py:4722 +#: flatcamGUI/ObjectUI.py:2143 flatcamGUI/PreferencesUI.py:4722 msgid "Display Annotation" msgstr "Afficher l'annotation" -#: flatcamGUI/ObjectUI.py:2144 flatcamGUI/PreferencesUI.py:4724 +#: flatcamGUI/ObjectUI.py:2145 flatcamGUI/PreferencesUI.py:4724 msgid "" "This selects if to display text annotation on the plot.\n" "When checked it will display numbers in order for each end\n" @@ -8784,11 +8426,11 @@ msgstr "" "Lorsque coché, il affichera les numéros dans l'ordre pour chaque extrémité\n" "d'une ligne de voyage." -#: flatcamGUI/ObjectUI.py:2159 +#: flatcamGUI/ObjectUI.py:2160 msgid "Travelled dist." msgstr "Dist. parcourue" -#: flatcamGUI/ObjectUI.py:2161 flatcamGUI/ObjectUI.py:2166 +#: flatcamGUI/ObjectUI.py:2162 flatcamGUI/ObjectUI.py:2167 msgid "" "This is the total travelled distance on X-Y plane.\n" "In current units." @@ -8796,11 +8438,11 @@ msgstr "" "C’est la distance totale parcourue sur l’avion X-Y.\n" "En unités actuelles." -#: flatcamGUI/ObjectUI.py:2171 +#: flatcamGUI/ObjectUI.py:2172 msgid "Estimated time" msgstr "Temps estimé" -#: flatcamGUI/ObjectUI.py:2173 flatcamGUI/ObjectUI.py:2178 +#: flatcamGUI/ObjectUI.py:2174 flatcamGUI/ObjectUI.py:2179 msgid "" "This is the estimated time to do the routing/drilling,\n" "without the time spent in ToolChange events." @@ -8808,11 +8450,11 @@ msgstr "" "Ceci est le temps estimé pour faire le routage / forage,\n" "sans le temps passé dans les événements ToolChange." -#: flatcamGUI/ObjectUI.py:2213 +#: flatcamGUI/ObjectUI.py:2214 msgid "CNC Tools Table" msgstr "Table d'outils CNC" -#: flatcamGUI/ObjectUI.py:2216 +#: flatcamGUI/ObjectUI.py:2217 msgid "" "Tools in this CNCJob object used for cutting.\n" "The tool diameter is used for plotting on canvas.\n" @@ -8835,23 +8477,23 @@ msgstr "" "Le 'type d'outil' (TT) peut être circulaire avec 1 à 4 dents (C1..C4),\n" "balle (B) ou en forme de V (V)." -#: flatcamGUI/ObjectUI.py:2244 flatcamGUI/ObjectUI.py:2255 +#: flatcamGUI/ObjectUI.py:2245 flatcamGUI/ObjectUI.py:2256 msgid "P" msgstr "P" -#: flatcamGUI/ObjectUI.py:2265 +#: flatcamGUI/ObjectUI.py:2266 msgid "Update Plot" msgstr "Mise à jour du Tracé" -#: flatcamGUI/ObjectUI.py:2267 +#: flatcamGUI/ObjectUI.py:2268 msgid "Update the plot." msgstr "Mettre à jour le dessin." -#: flatcamGUI/ObjectUI.py:2274 flatcamGUI/PreferencesUI.py:5120 +#: flatcamGUI/ObjectUI.py:2275 flatcamGUI/PreferencesUI.py:5120 msgid "Export CNC Code" msgstr "Exporter le code CNC" -#: flatcamGUI/ObjectUI.py:2276 flatcamGUI/PreferencesUI.py:5061 +#: flatcamGUI/ObjectUI.py:2277 flatcamGUI/PreferencesUI.py:5061 #: flatcamGUI/PreferencesUI.py:5122 msgid "" "Export and save G-Code to\n" @@ -8860,11 +8502,11 @@ msgstr "" "Exporter et sauvegarder le code G dans\n" "transformez cet objet en fichier." -#: flatcamGUI/ObjectUI.py:2282 +#: flatcamGUI/ObjectUI.py:2283 msgid "Prepend to CNC Code" msgstr "Ajouter au début un code CNC" -#: flatcamGUI/ObjectUI.py:2284 flatcamGUI/ObjectUI.py:2291 +#: flatcamGUI/ObjectUI.py:2285 flatcamGUI/ObjectUI.py:2292 #: flatcamGUI/PreferencesUI.py:5077 msgid "" "Type here any G-Code commands you would\n" @@ -8873,11 +8515,11 @@ msgstr "" "Tapez ici toutes les commandes G-Code que vous feriez\n" "souhaite ajouter au début du fichier G-Code." -#: flatcamGUI/ObjectUI.py:2297 +#: flatcamGUI/ObjectUI.py:2298 msgid "Append to CNC Code" msgstr "Ajouter au code CNC final" -#: flatcamGUI/ObjectUI.py:2299 flatcamGUI/ObjectUI.py:2307 +#: flatcamGUI/ObjectUI.py:2300 flatcamGUI/ObjectUI.py:2308 #: flatcamGUI/PreferencesUI.py:5093 msgid "" "Type here any G-Code commands you would\n" @@ -8888,11 +8530,11 @@ msgstr "" "tiens à ajouter à la fin du fichier généré.\n" "I.e .: M2 (fin du programme)" -#: flatcamGUI/ObjectUI.py:2321 flatcamGUI/PreferencesUI.py:5128 +#: flatcamGUI/ObjectUI.py:2322 flatcamGUI/PreferencesUI.py:5128 msgid "Toolchange G-Code" msgstr "Code de changement d'outils" -#: flatcamGUI/ObjectUI.py:2324 flatcamGUI/PreferencesUI.py:5131 +#: flatcamGUI/ObjectUI.py:2325 flatcamGUI/PreferencesUI.py:5131 msgid "" "Type here any G-Code commands you would\n" "like to be executed when Toolchange event is encountered.\n" @@ -8914,7 +8556,7 @@ msgstr "" "qui a 'toolchange_custom' dans son nom et qui est construit\n" "ayant comme modèle le fichier posprocessor 'Toolchange Custom'." -#: flatcamGUI/ObjectUI.py:2339 +#: flatcamGUI/ObjectUI.py:2340 msgid "" "Type here any G-Code commands you would\n" "like to be executed when Toolchange event is encountered.\n" @@ -8932,11 +8574,11 @@ msgstr "" "WARNING: it can be used only with a preprocessor file\n" "that has 'toolchange_custom' in it's name." -#: flatcamGUI/ObjectUI.py:2354 flatcamGUI/PreferencesUI.py:5170 +#: flatcamGUI/ObjectUI.py:2355 flatcamGUI/PreferencesUI.py:5170 msgid "Use Toolchange Macro" msgstr "Utiliser la macro Toolchange" -#: flatcamGUI/ObjectUI.py:2356 flatcamGUI/PreferencesUI.py:5172 +#: flatcamGUI/ObjectUI.py:2357 flatcamGUI/PreferencesUI.py:5172 msgid "" "Check this box if you want to use\n" "a Custom Toolchange GCode (macro)." @@ -8944,7 +8586,7 @@ msgstr "" "Cochez cette case si vous souhaitez utiliser\n" "un GCode personnalisé Toolchange (macro)." -#: flatcamGUI/ObjectUI.py:2364 flatcamGUI/PreferencesUI.py:5184 +#: flatcamGUI/ObjectUI.py:2365 flatcamGUI/PreferencesUI.py:5184 msgid "" "A list of the FlatCAM variables that can be used\n" "in the Toolchange event.\n" @@ -8954,7 +8596,7 @@ msgstr "" "dans l'événement Toolchange.\n" "Ils doivent être entourés du symbole '%%'" -#: flatcamGUI/ObjectUI.py:2371 flatcamGUI/PreferencesUI.py:2627 +#: flatcamGUI/ObjectUI.py:2372 flatcamGUI/PreferencesUI.py:2627 #: flatcamGUI/PreferencesUI.py:3833 flatcamGUI/PreferencesUI.py:4640 #: flatcamGUI/PreferencesUI.py:5191 flatcamGUI/PreferencesUI.py:5310 #: flatcamGUI/PreferencesUI.py:5640 flatcamGUI/PreferencesUI.py:5797 @@ -8965,65 +8607,65 @@ msgstr "" #: flatcamGUI/PreferencesUI.py:7646 flatcamGUI/PreferencesUI.py:7900 #: flatcamGUI/PreferencesUI.py:8016 flatcamGUI/PreferencesUI.py:8135 #: flatcamGUI/PreferencesUI.py:8347 flatcamGUI/PreferencesUI.py:8556 -#: flatcamTools/ToolCopperThieving.py:90 flatcamTools/ToolFiducials.py:149 +#: flatcamTools/ToolCopperThieving.py:89 flatcamTools/ToolFiducials.py:149 #: flatcamTools/ToolInvertGerber.py:82 msgid "Parameters" msgstr "Paramètres" -#: flatcamGUI/ObjectUI.py:2374 flatcamGUI/PreferencesUI.py:5196 +#: flatcamGUI/ObjectUI.py:2375 flatcamGUI/PreferencesUI.py:5196 msgid "FlatCAM CNC parameters" msgstr "Paramètres CNC FlatCAM" -#: flatcamGUI/ObjectUI.py:2375 flatcamGUI/PreferencesUI.py:5201 +#: flatcamGUI/ObjectUI.py:2376 flatcamGUI/PreferencesUI.py:5201 msgid "tool number" msgstr "numéro d'outil" -#: flatcamGUI/ObjectUI.py:2376 flatcamGUI/PreferencesUI.py:5202 +#: flatcamGUI/ObjectUI.py:2377 flatcamGUI/PreferencesUI.py:5202 msgid "tool diameter" msgstr "diamètre de l'outil" -#: flatcamGUI/ObjectUI.py:2377 flatcamGUI/PreferencesUI.py:5203 +#: flatcamGUI/ObjectUI.py:2378 flatcamGUI/PreferencesUI.py:5203 msgid "for Excellon, total number of drills" msgstr "pour Excellon, nombre total de trous de forage" -#: flatcamGUI/ObjectUI.py:2379 flatcamGUI/PreferencesUI.py:5205 +#: flatcamGUI/ObjectUI.py:2380 flatcamGUI/PreferencesUI.py:5205 msgid "X coord for Toolchange" msgstr "Coord X pour changement d'outil" -#: flatcamGUI/ObjectUI.py:2380 flatcamGUI/PreferencesUI.py:5206 +#: flatcamGUI/ObjectUI.py:2381 flatcamGUI/PreferencesUI.py:5206 msgid "Y coord for Toolchange" msgstr "Coord Y pour changement d'outil" -#: flatcamGUI/ObjectUI.py:2381 flatcamGUI/PreferencesUI.py:5208 +#: flatcamGUI/ObjectUI.py:2382 flatcamGUI/PreferencesUI.py:5208 msgid "Z coord for Toolchange" msgstr "Coords Z pour le Changement d'Outil" -#: flatcamGUI/ObjectUI.py:2382 +#: flatcamGUI/ObjectUI.py:2383 msgid "depth where to cut" msgstr "profondeur où couper" -#: flatcamGUI/ObjectUI.py:2383 +#: flatcamGUI/ObjectUI.py:2384 msgid "height where to travel" msgstr "hauteur où voyager" -#: flatcamGUI/ObjectUI.py:2384 flatcamGUI/PreferencesUI.py:5211 +#: flatcamGUI/ObjectUI.py:2385 flatcamGUI/PreferencesUI.py:5211 msgid "the step value for multidepth cut" msgstr "la valeur de pas pour la coupe multiple" -#: flatcamGUI/ObjectUI.py:2386 flatcamGUI/PreferencesUI.py:5213 +#: flatcamGUI/ObjectUI.py:2387 flatcamGUI/PreferencesUI.py:5213 msgid "the value for the spindle speed" msgstr "la valeur de la vitesse de broche" -#: flatcamGUI/ObjectUI.py:2388 +#: flatcamGUI/ObjectUI.py:2389 msgid "time to dwell to allow the spindle to reach it's set RPM" msgstr "" "temps de repos pour permettre à la broche d'atteindre son régime défini" -#: flatcamGUI/ObjectUI.py:2404 +#: flatcamGUI/ObjectUI.py:2405 msgid "View CNC Code" msgstr "Voir le code CNC" -#: flatcamGUI/ObjectUI.py:2406 +#: flatcamGUI/ObjectUI.py:2407 msgid "" "Opens TAB to view/modify/print G-Code\n" "file." @@ -9031,11 +8673,11 @@ msgstr "" "Ouvre l'onglet pour afficher / modifier / imprimer le code G\n" "fichier." -#: flatcamGUI/ObjectUI.py:2411 +#: flatcamGUI/ObjectUI.py:2412 msgid "Save CNC Code" msgstr "Enregistrer le code CNC" -#: flatcamGUI/ObjectUI.py:2413 +#: flatcamGUI/ObjectUI.py:2414 msgid "" "Opens dialog to save G-Code\n" "file." @@ -9043,81 +8685,81 @@ msgstr "" "Ouvre la boîte de dialogue pour enregistrer le code G\n" "fichier." -#: flatcamGUI/ObjectUI.py:2447 +#: flatcamGUI/ObjectUI.py:2448 msgid "Script Object" msgstr "Objet de script" -#: flatcamGUI/ObjectUI.py:2467 flatcamGUI/ObjectUI.py:2541 +#: flatcamGUI/ObjectUI.py:2468 flatcamGUI/ObjectUI.py:2542 msgid "Auto Completer" msgstr "Compléteur automatique" -#: flatcamGUI/ObjectUI.py:2469 +#: flatcamGUI/ObjectUI.py:2470 msgid "This selects if the auto completer is enabled in the Script Editor." msgstr "" "Ceci sélectionne si le compléteur automatique est activé dans l'éditeur de " "script." -#: flatcamGUI/ObjectUI.py:2514 +#: flatcamGUI/ObjectUI.py:2515 msgid "Document Object" msgstr "Objet de Document" -#: flatcamGUI/ObjectUI.py:2543 +#: flatcamGUI/ObjectUI.py:2544 msgid "This selects if the auto completer is enabled in the Document Editor." msgstr "" "Ceci sélectionne si le compléteur automatique est activé dans l'éditeur de " "document." -#: flatcamGUI/ObjectUI.py:2561 +#: flatcamGUI/ObjectUI.py:2562 msgid "Font Type" msgstr "Type de Police" -#: flatcamGUI/ObjectUI.py:2578 flatcamGUI/PreferencesUI.py:1278 +#: flatcamGUI/ObjectUI.py:2579 flatcamGUI/PreferencesUI.py:1278 msgid "Font Size" msgstr "Taille de Police" -#: flatcamGUI/ObjectUI.py:2614 +#: flatcamGUI/ObjectUI.py:2615 msgid "Alignment" msgstr "Alignement" -#: flatcamGUI/ObjectUI.py:2619 +#: flatcamGUI/ObjectUI.py:2620 msgid "Align Left" msgstr "Alignez à gauche" -#: flatcamGUI/ObjectUI.py:2629 +#: flatcamGUI/ObjectUI.py:2630 msgid "Align Right" msgstr "Aligner à droite" -#: flatcamGUI/ObjectUI.py:2634 +#: flatcamGUI/ObjectUI.py:2635 msgid "Justify" msgstr "Aligner à justifier" -#: flatcamGUI/ObjectUI.py:2641 +#: flatcamGUI/ObjectUI.py:2642 msgid "Font Color" msgstr "Couleur de la Police" -#: flatcamGUI/ObjectUI.py:2643 +#: flatcamGUI/ObjectUI.py:2644 msgid "Set the font color for the selected text" msgstr "Définir la couleur de la police pour le texte sélectionné" -#: flatcamGUI/ObjectUI.py:2657 +#: flatcamGUI/ObjectUI.py:2658 msgid "Selection Color" msgstr "Couleur de sélection" -#: flatcamGUI/ObjectUI.py:2659 +#: flatcamGUI/ObjectUI.py:2660 msgid "Set the selection color when doing text selection." msgstr "Définissez la couleur de sélection lors de la sélection du texte." -#: flatcamGUI/ObjectUI.py:2673 +#: flatcamGUI/ObjectUI.py:2674 msgid "Tab Size" msgstr "Taille de l'onglet" -#: flatcamGUI/ObjectUI.py:2675 +#: flatcamGUI/ObjectUI.py:2676 msgid "Set the tab size. In pixels. Default value is 80 pixels." msgstr "" "Définissez la taille de l'onglet. En pixels. La valeur par défaut est 80 " "pixels." -#: flatcamGUI/PlotCanvasLegacy.py:1301 +#: flatcamGUI/PlotCanvasLegacy.py:1299 msgid "" "Could not annotate due of a difference between the number of text elements " "and the number of text positions." @@ -9782,6 +9424,17 @@ msgstr "" "Le choix ici influencera les paramètres dans\n" "l'onglet Sélectionné pour toutes sortes d'objets FlatCAM." +#: flatcamGUI/PreferencesUI.py:1646 flatcamGUI/PreferencesUI.py:3041 +#: flatcamObjects/FlatCAMExcellon.py:614 flatcamObjects/FlatCAMGeometry.py:485 +#: flatcamObjects/FlatCAMGerber.py:250 +msgid "Basic" +msgstr "De base" + +#: flatcamGUI/PreferencesUI.py:1647 flatcamObjects/FlatCAMExcellon.py:627 +#: flatcamObjects/FlatCAMGeometry.py:506 flatcamObjects/FlatCAMGerber.py:277 +msgid "Advanced" +msgstr "Avancé" + #: flatcamGUI/PreferencesUI.py:1653 msgid "Portable app" msgstr "App. portable" @@ -10992,7 +10645,7 @@ msgstr "" #: flatcamGUI/PreferencesUI.py:4484 flatcamGUI/PreferencesUI.py:7045 #: flatcamGUI/PreferencesUI.py:8092 flatcamTools/ToolCalibration.py:125 -#: flatcamTools/ToolSolderPaste.py:241 +#: flatcamTools/ToolSolderPaste.py:240 msgid "Toolchange X-Y" msgstr "Changement d'outils X-Y" @@ -11369,7 +11022,7 @@ msgstr "" "Si non coché, utilisez l'algorithme standard." #: flatcamGUI/PreferencesUI.py:5588 flatcamGUI/PreferencesUI.py:6119 -#: flatcamGUI/PreferencesUI.py:7696 flatcamTools/ToolCopperThieving.py:127 +#: flatcamGUI/PreferencesUI.py:7696 flatcamTools/ToolCopperThieving.py:126 #: flatcamTools/ToolNCC.py:535 flatcamTools/ToolNCC.py:1311 #: flatcamTools/ToolNCC.py:1642 flatcamTools/ToolNCC.py:1930 #: flatcamTools/ToolNCC.py:1985 flatcamTools/ToolPaint.py:486 @@ -11378,8 +11031,8 @@ msgid "Area Selection" msgstr "Sélection de zone" #: flatcamGUI/PreferencesUI.py:5588 flatcamGUI/PreferencesUI.py:6119 -#: flatcamGUI/PreferencesUI.py:7697 flatcamTools/ToolCopperThieving.py:128 -#: flatcamTools/ToolDblSided.py:217 flatcamTools/ToolNCC.py:535 +#: flatcamGUI/PreferencesUI.py:7697 flatcamTools/ToolCopperThieving.py:127 +#: flatcamTools/ToolDblSided.py:216 flatcamTools/ToolNCC.py:535 #: flatcamTools/ToolNCC.py:1658 flatcamTools/ToolNCC.py:1936 #: flatcamTools/ToolNCC.py:1993 flatcamTools/ToolNCC.py:2301 #: flatcamTools/ToolNCC.py:2581 flatcamTools/ToolNCC.py:3007 @@ -11439,11 +11092,11 @@ msgid "Cutout Tool Options" msgstr "Options de l'Outil de Découpe" #: flatcamGUI/PreferencesUI.py:5651 flatcamTools/ToolCalculators.py:123 -#: flatcamTools/ToolCutOut.py:130 +#: flatcamTools/ToolCutOut.py:129 msgid "Tool Diameter" msgstr "Dia de l'outil" -#: flatcamGUI/PreferencesUI.py:5653 flatcamTools/ToolCutOut.py:132 +#: flatcamGUI/PreferencesUI.py:5653 flatcamTools/ToolCutOut.py:131 msgid "" "Diameter of the tool used to cutout\n" "the PCB shape out of the surrounding material." @@ -11455,7 +11108,7 @@ msgstr "" msgid "Object kind" msgstr "Type d'objet" -#: flatcamGUI/PreferencesUI.py:5710 flatcamTools/ToolCutOut.py:78 +#: flatcamGUI/PreferencesUI.py:5710 flatcamTools/ToolCutOut.py:77 msgid "" "Choice of what kind the object we want to cutout is.
    - Single: " "contain a single PCB Gerber outline object.
    - Panel: a panel PCB " @@ -11467,15 +11120,15 @@ msgstr "" "est fait\n" "sur beaucoup de contours individuels de PCB." -#: flatcamGUI/PreferencesUI.py:5717 flatcamTools/ToolCutOut.py:84 +#: flatcamGUI/PreferencesUI.py:5717 flatcamTools/ToolCutOut.py:83 msgid "Single" msgstr "Seul" -#: flatcamGUI/PreferencesUI.py:5718 flatcamTools/ToolCutOut.py:85 +#: flatcamGUI/PreferencesUI.py:5718 flatcamTools/ToolCutOut.py:84 msgid "Panel" msgstr "Panneau" -#: flatcamGUI/PreferencesUI.py:5725 flatcamTools/ToolCutOut.py:193 +#: flatcamGUI/PreferencesUI.py:5725 flatcamTools/ToolCutOut.py:192 msgid "" "Margin over bounds. A positive value here\n" "will make the cutout of the PCB further from\n" @@ -11485,11 +11138,11 @@ msgstr "" "fera la découpe du PCB plus loin de\n" "la frontière de PCB" -#: flatcamGUI/PreferencesUI.py:5738 flatcamTools/ToolCutOut.py:204 +#: flatcamGUI/PreferencesUI.py:5738 flatcamTools/ToolCutOut.py:203 msgid "Gap size" msgstr "Taille de l'espace" -#: flatcamGUI/PreferencesUI.py:5740 flatcamTools/ToolCutOut.py:206 +#: flatcamGUI/PreferencesUI.py:5740 flatcamTools/ToolCutOut.py:205 msgid "" "The size of the bridge gaps in the cutout\n" "used to keep the board connected to\n" @@ -11501,7 +11154,7 @@ msgstr "" "le matériau environnant (celui\n" "à partir duquel le circuit imprimé est découpé)." -#: flatcamGUI/PreferencesUI.py:5754 flatcamTools/ToolCutOut.py:250 +#: flatcamGUI/PreferencesUI.py:5754 flatcamTools/ToolCutOut.py:249 msgid "Gaps" msgstr "Lacunes" @@ -11529,11 +11182,11 @@ msgstr "" "- 2tb - 2 * Haut + 2 * Bas\n" "- 8 - 2 * gauche + 2 * droite + 2 * en haut + 2 * en bas" -#: flatcamGUI/PreferencesUI.py:5778 flatcamTools/ToolCutOut.py:223 +#: flatcamGUI/PreferencesUI.py:5778 flatcamTools/ToolCutOut.py:222 msgid "Convex Shape" msgstr "Forme convexe" -#: flatcamGUI/PreferencesUI.py:5780 flatcamTools/ToolCutOut.py:226 +#: flatcamGUI/PreferencesUI.py:5780 flatcamTools/ToolCutOut.py:225 msgid "" "Create a convex shape surrounding the entire PCB.\n" "Used only if the source object type is Gerber." @@ -11557,17 +11210,17 @@ msgstr "" msgid "Drill dia" msgstr "Forage dia" -#: flatcamGUI/PreferencesUI.py:5815 flatcamTools/ToolDblSided.py:364 -#: flatcamTools/ToolDblSided.py:369 +#: flatcamGUI/PreferencesUI.py:5815 flatcamTools/ToolDblSided.py:363 +#: flatcamTools/ToolDblSided.py:368 msgid "Diameter of the drill for the alignment holes." msgstr "Diamètre du foret pour les trous d'alignement." -#: flatcamGUI/PreferencesUI.py:5822 flatcamTools/ToolDblSided.py:378 +#: flatcamGUI/PreferencesUI.py:5822 flatcamTools/ToolDblSided.py:377 msgid "Align Axis" msgstr "Aligner l'axe" #: flatcamGUI/PreferencesUI.py:5824 flatcamGUI/PreferencesUI.py:5837 -#: flatcamTools/ToolDblSided.py:166 flatcamTools/ToolDblSided.py:380 +#: flatcamTools/ToolDblSided.py:165 flatcamTools/ToolDblSided.py:379 msgid "Mirror vertically (X) or horizontally (Y)." msgstr "Miroir verticalement (X) ou horizontalement (Y)." @@ -11575,11 +11228,11 @@ msgstr "Miroir verticalement (X) ou horizontalement (Y)." msgid "Mirror Axis:" msgstr "Axe du miroir:" -#: flatcamGUI/PreferencesUI.py:5846 flatcamTools/ToolDblSided.py:182 +#: flatcamGUI/PreferencesUI.py:5846 flatcamTools/ToolDblSided.py:181 msgid "Point" msgstr "Point" -#: flatcamGUI/PreferencesUI.py:5847 flatcamTools/ToolDblSided.py:183 +#: flatcamGUI/PreferencesUI.py:5847 flatcamTools/ToolDblSided.py:182 msgid "Box" msgstr "Box" @@ -11776,12 +11429,12 @@ msgstr "" "alors qu'une valeur inférieure à 1 la secouera." #: flatcamGUI/PreferencesUI.py:6264 flatcamGUI/PreferencesUI.py:6783 -#: flatcamTools/ToolFilm.py:162 flatcamTools/ToolTransform.py:149 +#: flatcamTools/ToolFilm.py:162 flatcamTools/ToolTransform.py:148 msgid "X factor" msgstr "Facteur X" #: flatcamGUI/PreferencesUI.py:6273 flatcamGUI/PreferencesUI.py:6796 -#: flatcamTools/ToolFilm.py:171 flatcamTools/ToolTransform.py:169 +#: flatcamTools/ToolFilm.py:171 flatcamTools/ToolTransform.py:168 msgid "Y factor" msgstr "Facteur Y" @@ -11798,12 +11451,12 @@ msgstr "" "tandis que les valeurs négatives inclineront vers la gauche." #: flatcamGUI/PreferencesUI.py:6295 flatcamGUI/PreferencesUI.py:6752 -#: flatcamTools/ToolFilm.py:201 flatcamTools/ToolTransform.py:98 +#: flatcamTools/ToolFilm.py:201 flatcamTools/ToolTransform.py:97 msgid "X angle" msgstr "Angle X" #: flatcamGUI/PreferencesUI.py:6304 flatcamGUI/PreferencesUI.py:6766 -#: flatcamTools/ToolFilm.py:210 flatcamTools/ToolTransform.py:119 +#: flatcamTools/ToolFilm.py:210 flatcamTools/ToolTransform.py:118 msgid "Y angle" msgstr "Angle Y" @@ -11899,11 +11552,11 @@ msgstr "" "chaque élément est une copie de l'objet source espacé\n" "à une distance X, Y distance les uns des autres." -#: flatcamGUI/PreferencesUI.py:6480 flatcamTools/ToolPanelize.py:163 +#: flatcamGUI/PreferencesUI.py:6480 flatcamTools/ToolPanelize.py:161 msgid "Spacing cols" msgstr "Colonnes d'espacement" -#: flatcamGUI/PreferencesUI.py:6482 flatcamTools/ToolPanelize.py:165 +#: flatcamGUI/PreferencesUI.py:6482 flatcamTools/ToolPanelize.py:163 msgid "" "Spacing between columns of the desired panel.\n" "In current units." @@ -11911,11 +11564,11 @@ msgstr "" "Espacement entre les colonnes du panneau souhaité.\n" "En unités actuelles." -#: flatcamGUI/PreferencesUI.py:6494 flatcamTools/ToolPanelize.py:175 +#: flatcamGUI/PreferencesUI.py:6494 flatcamTools/ToolPanelize.py:173 msgid "Spacing rows" msgstr "Lignes d'espacement" -#: flatcamGUI/PreferencesUI.py:6496 flatcamTools/ToolPanelize.py:177 +#: flatcamGUI/PreferencesUI.py:6496 flatcamTools/ToolPanelize.py:175 msgid "" "Spacing between rows of the desired panel.\n" "In current units." @@ -11923,27 +11576,27 @@ msgstr "" "Espacement entre les lignes du panneau souhaité.\n" "En unités actuelles." -#: flatcamGUI/PreferencesUI.py:6507 flatcamTools/ToolPanelize.py:186 +#: flatcamGUI/PreferencesUI.py:6507 flatcamTools/ToolPanelize.py:184 msgid "Columns" msgstr "Colonnes" -#: flatcamGUI/PreferencesUI.py:6509 flatcamTools/ToolPanelize.py:188 +#: flatcamGUI/PreferencesUI.py:6509 flatcamTools/ToolPanelize.py:186 msgid "Number of columns of the desired panel" msgstr "Nombre de colonnes du panneau désiré" -#: flatcamGUI/PreferencesUI.py:6519 flatcamTools/ToolPanelize.py:196 +#: flatcamGUI/PreferencesUI.py:6519 flatcamTools/ToolPanelize.py:194 msgid "Rows" msgstr "Lignes" -#: flatcamGUI/PreferencesUI.py:6521 flatcamTools/ToolPanelize.py:198 +#: flatcamGUI/PreferencesUI.py:6521 flatcamTools/ToolPanelize.py:196 msgid "Number of rows of the desired panel" msgstr "Nombre de lignes du panneau désiré" -#: flatcamGUI/PreferencesUI.py:6528 flatcamTools/ToolPanelize.py:205 +#: flatcamGUI/PreferencesUI.py:6528 flatcamTools/ToolPanelize.py:203 msgid "Geo" msgstr "Géo" -#: flatcamGUI/PreferencesUI.py:6529 flatcamTools/ToolPanelize.py:206 +#: flatcamGUI/PreferencesUI.py:6529 flatcamTools/ToolPanelize.py:204 msgid "Panel Type" msgstr "Type de Panneau" @@ -11961,7 +11614,7 @@ msgstr "" msgid "Constrain within" msgstr "Contraindre à l'intérieur" -#: flatcamGUI/PreferencesUI.py:6542 flatcamTools/ToolPanelize.py:218 +#: flatcamGUI/PreferencesUI.py:6542 flatcamTools/ToolPanelize.py:216 msgid "" "Area define by DX and DY within to constrain the panel.\n" "DX and DY values are in current units.\n" @@ -11975,11 +11628,11 @@ msgstr "" "le panneau final aura autant de colonnes et de lignes que\n" "ils correspondent parfaitement à la zone sélectionnée." -#: flatcamGUI/PreferencesUI.py:6555 flatcamTools/ToolPanelize.py:230 +#: flatcamGUI/PreferencesUI.py:6555 flatcamTools/ToolPanelize.py:228 msgid "Width (DX)" msgstr "Largeur (DX)" -#: flatcamGUI/PreferencesUI.py:6557 flatcamTools/ToolPanelize.py:232 +#: flatcamGUI/PreferencesUI.py:6557 flatcamTools/ToolPanelize.py:230 msgid "" "The width (DX) within which the panel must fit.\n" "In current units." @@ -11987,11 +11640,11 @@ msgstr "" "La largeur (DX) dans laquelle le panneau doit tenir.\n" "En unités actuelles." -#: flatcamGUI/PreferencesUI.py:6568 flatcamTools/ToolPanelize.py:241 +#: flatcamGUI/PreferencesUI.py:6568 flatcamTools/ToolPanelize.py:239 msgid "Height (DY)" msgstr "Hauteur (DY)" -#: flatcamGUI/PreferencesUI.py:6570 flatcamTools/ToolPanelize.py:243 +#: flatcamGUI/PreferencesUI.py:6570 flatcamTools/ToolPanelize.py:241 msgid "" "The height (DY)within which the panel must fit.\n" "In current units." @@ -12120,15 +11773,15 @@ msgstr "" msgid "Skew" msgstr "Fausser" -#: flatcamGUI/PreferencesUI.py:6785 flatcamTools/ToolTransform.py:151 +#: flatcamGUI/PreferencesUI.py:6785 flatcamTools/ToolTransform.py:150 msgid "Factor for scaling on X axis." msgstr "Facteur de mise à l'échelle sur l'axe X." -#: flatcamGUI/PreferencesUI.py:6798 flatcamTools/ToolTransform.py:171 +#: flatcamGUI/PreferencesUI.py:6798 flatcamTools/ToolTransform.py:170 msgid "Factor for scaling on Y axis." msgstr "Facteur de mise à l'échelle sur l'axe Y." -#: flatcamGUI/PreferencesUI.py:6806 flatcamTools/ToolTransform.py:192 +#: flatcamGUI/PreferencesUI.py:6806 flatcamTools/ToolTransform.py:191 msgid "" "Scale the selected object(s)\n" "using the Scale_X factor for both axis." @@ -12136,7 +11789,7 @@ msgstr "" "Mettre à l'échelle le ou les objets sélectionnés\n" "en utilisant le facteur d'échelle X pour les deux axes." -#: flatcamGUI/PreferencesUI.py:6814 flatcamTools/ToolTransform.py:199 +#: flatcamGUI/PreferencesUI.py:6814 flatcamTools/ToolTransform.py:198 msgid "" "Scale the selected object(s)\n" "using the origin reference when checked,\n" @@ -12148,32 +11801,32 @@ msgstr "" "et le centre de la plus grande boîte englobante\n" "des objets sélectionnés lorsqu'il est décoché." -#: flatcamGUI/PreferencesUI.py:6830 flatcamTools/ToolTransform.py:218 +#: flatcamGUI/PreferencesUI.py:6830 flatcamTools/ToolTransform.py:217 msgid "X val" msgstr "Valeur X" -#: flatcamGUI/PreferencesUI.py:6832 flatcamTools/ToolTransform.py:220 +#: flatcamGUI/PreferencesUI.py:6832 flatcamTools/ToolTransform.py:219 msgid "Distance to offset on X axis. In current units." msgstr "Distance à compenser sur l'axe X. En unités actuelles." -#: flatcamGUI/PreferencesUI.py:6843 flatcamTools/ToolTransform.py:238 +#: flatcamGUI/PreferencesUI.py:6843 flatcamTools/ToolTransform.py:237 msgid "Y val" msgstr "Valeur Y" -#: flatcamGUI/PreferencesUI.py:6845 flatcamTools/ToolTransform.py:240 +#: flatcamGUI/PreferencesUI.py:6845 flatcamTools/ToolTransform.py:239 msgid "Distance to offset on Y axis. In current units." msgstr "Distance à compenser sur l'axe X. En unités actuelles." -#: flatcamGUI/PreferencesUI.py:6851 flatcamTools/ToolDblSided.py:68 -#: flatcamTools/ToolDblSided.py:96 flatcamTools/ToolDblSided.py:126 +#: flatcamGUI/PreferencesUI.py:6851 flatcamTools/ToolDblSided.py:67 +#: flatcamTools/ToolDblSided.py:95 flatcamTools/ToolDblSided.py:125 msgid "Mirror" msgstr "Miroir" -#: flatcamGUI/PreferencesUI.py:6855 flatcamTools/ToolTransform.py:284 +#: flatcamGUI/PreferencesUI.py:6855 flatcamTools/ToolTransform.py:283 msgid "Mirror Reference" msgstr "Référence du miroir" -#: flatcamGUI/PreferencesUI.py:6857 flatcamTools/ToolTransform.py:286 +#: flatcamGUI/PreferencesUI.py:6857 flatcamTools/ToolTransform.py:285 msgid "" "Flip the selected object(s)\n" "around the point in Point Entry Field.\n" @@ -12211,11 +11864,11 @@ msgstr "" "le 'y' dans (x, y) sera utilisé lors de l'utilisation de Flip sur Y et" #: flatcamGUI/PreferencesUI.py:6883 flatcamTools/ToolDistance.py:496 -#: flatcamTools/ToolDistanceMin.py:287 flatcamTools/ToolTransform.py:333 +#: flatcamTools/ToolDistanceMin.py:287 flatcamTools/ToolTransform.py:332 msgid "Distance" msgstr "Distance" -#: flatcamGUI/PreferencesUI.py:6885 flatcamTools/ToolTransform.py:335 +#: flatcamGUI/PreferencesUI.py:6885 flatcamTools/ToolTransform.py:334 msgid "" "A positive value will create the effect of dilation,\n" "while a negative value will create the effect of erosion.\n" @@ -12227,7 +11880,7 @@ msgstr "" "Chaque élément de géométrie de l'objet sera augmenté\n" "ou diminué avec la «distance»." -#: flatcamGUI/PreferencesUI.py:6902 flatcamTools/ToolTransform.py:360 +#: flatcamGUI/PreferencesUI.py:6902 flatcamTools/ToolTransform.py:359 msgid "" "A positive value will create the effect of dilation,\n" "while a negative value will create the effect of erosion.\n" @@ -12242,11 +11895,11 @@ msgstr "" "de la dimension initiale." #: flatcamGUI/PreferencesUI.py:6919 flatcamGUI/PreferencesUI.py:7563 -#: flatcamTools/ToolQRCode.py:197 flatcamTools/ToolTransform.py:384 +#: flatcamTools/ToolQRCode.py:197 flatcamTools/ToolTransform.py:383 msgid "Rounded" msgstr "Arrondi" -#: flatcamGUI/PreferencesUI.py:6921 flatcamTools/ToolTransform.py:386 +#: flatcamGUI/PreferencesUI.py:6921 flatcamTools/ToolTransform.py:385 msgid "" "If checked then the buffer will surround the buffered shape,\n" "every corner will be rounded.\n" @@ -12274,39 +11927,39 @@ msgstr "" msgid "New Nozzle Dia" msgstr "Nouvelle Buse Dia" -#: flatcamGUI/PreferencesUI.py:6967 flatcamTools/ToolSolderPaste.py:108 +#: flatcamGUI/PreferencesUI.py:6967 flatcamTools/ToolSolderPaste.py:107 msgid "Diameter for the new Nozzle tool to add in the Tool Table" msgstr "Diamètre du nouvel outil Buse à ajouter dans le tableau des outils" -#: flatcamGUI/PreferencesUI.py:6983 flatcamTools/ToolSolderPaste.py:184 +#: flatcamGUI/PreferencesUI.py:6983 flatcamTools/ToolSolderPaste.py:183 msgid "Z Dispense Start" msgstr "Z début de la distribution" -#: flatcamGUI/PreferencesUI.py:6985 flatcamTools/ToolSolderPaste.py:186 +#: flatcamGUI/PreferencesUI.py:6985 flatcamTools/ToolSolderPaste.py:185 msgid "The height (Z) when solder paste dispensing starts." msgstr "La hauteur (Z) au début de la distribution de la pâte à braser." -#: flatcamGUI/PreferencesUI.py:6996 flatcamTools/ToolSolderPaste.py:196 +#: flatcamGUI/PreferencesUI.py:6996 flatcamTools/ToolSolderPaste.py:195 msgid "Z Dispense" msgstr "Z dispenser" -#: flatcamGUI/PreferencesUI.py:6998 flatcamTools/ToolSolderPaste.py:198 +#: flatcamGUI/PreferencesUI.py:6998 flatcamTools/ToolSolderPaste.py:197 msgid "The height (Z) when doing solder paste dispensing." msgstr "La hauteur (Z) lors de la distribution de la pâte à braser." -#: flatcamGUI/PreferencesUI.py:7009 flatcamTools/ToolSolderPaste.py:208 +#: flatcamGUI/PreferencesUI.py:7009 flatcamTools/ToolSolderPaste.py:207 msgid "Z Dispense Stop" msgstr "Z arrêt de distribution" -#: flatcamGUI/PreferencesUI.py:7011 flatcamTools/ToolSolderPaste.py:210 +#: flatcamGUI/PreferencesUI.py:7011 flatcamTools/ToolSolderPaste.py:209 msgid "The height (Z) when solder paste dispensing stops." msgstr "La hauteur (Z) lorsque la distribution de la pâte à braser s’arrête." -#: flatcamGUI/PreferencesUI.py:7022 flatcamTools/ToolSolderPaste.py:220 +#: flatcamGUI/PreferencesUI.py:7022 flatcamTools/ToolSolderPaste.py:219 msgid "Z Travel" msgstr "Z Voyage" -#: flatcamGUI/PreferencesUI.py:7024 flatcamTools/ToolSolderPaste.py:222 +#: flatcamGUI/PreferencesUI.py:7024 flatcamTools/ToolSolderPaste.py:221 msgid "" "The height (Z) for travel between pads\n" "(without dispensing solder paste)." @@ -12314,15 +11967,15 @@ msgstr "" "La hauteur (Z) pour le déplacement entre les patins\n" "(sans distribution de pâte à braser)." -#: flatcamGUI/PreferencesUI.py:7036 flatcamTools/ToolSolderPaste.py:233 +#: flatcamGUI/PreferencesUI.py:7036 flatcamTools/ToolSolderPaste.py:232 msgid "Z Toolchange" msgstr "Changement d'outil Z" -#: flatcamGUI/PreferencesUI.py:7038 flatcamTools/ToolSolderPaste.py:235 +#: flatcamGUI/PreferencesUI.py:7038 flatcamTools/ToolSolderPaste.py:234 msgid "The height (Z) for tool (nozzle) change." msgstr "La hauteur (Z) de l'outil (buse) change." -#: flatcamGUI/PreferencesUI.py:7047 flatcamTools/ToolSolderPaste.py:243 +#: flatcamGUI/PreferencesUI.py:7047 flatcamTools/ToolSolderPaste.py:242 msgid "" "The X,Y location for tool (nozzle) change.\n" "The format is (x, y) where x and y are real numbers." @@ -12330,11 +11983,11 @@ msgstr "" "L'emplacement X, Y de l'outil (buse) change.\n" "Le format est (x, y) où x et y sont des nombres réels." -#: flatcamGUI/PreferencesUI.py:7061 flatcamTools/ToolSolderPaste.py:256 +#: flatcamGUI/PreferencesUI.py:7061 flatcamTools/ToolSolderPaste.py:255 msgid "Feedrate (speed) while moving on the X-Y plane." msgstr "Avance (vitesse) en se déplaçant sur le plan X-Y." -#: flatcamGUI/PreferencesUI.py:7074 flatcamTools/ToolSolderPaste.py:268 +#: flatcamGUI/PreferencesUI.py:7074 flatcamTools/ToolSolderPaste.py:267 msgid "" "Feedrate (speed) while moving vertically\n" "(on Z plane)." @@ -12342,7 +11995,7 @@ msgstr "" "Avance (vitesse) en se déplaçant verticalement\n" "(sur le plan Z)." -#: flatcamGUI/PreferencesUI.py:7086 flatcamTools/ToolSolderPaste.py:279 +#: flatcamGUI/PreferencesUI.py:7086 flatcamTools/ToolSolderPaste.py:278 msgid "Feedrate Z Dispense" msgstr "Avance Z Distribution" @@ -12354,11 +12007,11 @@ msgstr "" "Avance (vitesse) en montant verticalement\n" "position de distribution (sur le plan Z)." -#: flatcamGUI/PreferencesUI.py:7099 flatcamTools/ToolSolderPaste.py:291 +#: flatcamGUI/PreferencesUI.py:7099 flatcamTools/ToolSolderPaste.py:290 msgid "Spindle Speed FWD" msgstr "Vitesse de Rot FWD" -#: flatcamGUI/PreferencesUI.py:7101 flatcamTools/ToolSolderPaste.py:293 +#: flatcamGUI/PreferencesUI.py:7101 flatcamTools/ToolSolderPaste.py:292 msgid "" "The dispenser speed while pushing solder paste\n" "through the dispenser nozzle." @@ -12366,19 +12019,19 @@ msgstr "" "La vitesse du distributeur en poussant la pâte à souder\n" "à travers la buse du distributeur." -#: flatcamGUI/PreferencesUI.py:7113 flatcamTools/ToolSolderPaste.py:304 +#: flatcamGUI/PreferencesUI.py:7113 flatcamTools/ToolSolderPaste.py:303 msgid "Dwell FWD" msgstr "Habiter AVANT" -#: flatcamGUI/PreferencesUI.py:7115 flatcamTools/ToolSolderPaste.py:306 +#: flatcamGUI/PreferencesUI.py:7115 flatcamTools/ToolSolderPaste.py:305 msgid "Pause after solder dispensing." msgstr "Pause après la distribution de la brasure." -#: flatcamGUI/PreferencesUI.py:7125 flatcamTools/ToolSolderPaste.py:315 +#: flatcamGUI/PreferencesUI.py:7125 flatcamTools/ToolSolderPaste.py:314 msgid "Spindle Speed REV" msgstr "Vitesse du moteur en REV" -#: flatcamGUI/PreferencesUI.py:7127 flatcamTools/ToolSolderPaste.py:317 +#: flatcamGUI/PreferencesUI.py:7127 flatcamTools/ToolSolderPaste.py:316 msgid "" "The dispenser speed while retracting solder paste\n" "through the dispenser nozzle." @@ -12386,11 +12039,11 @@ msgstr "" "La vitesse du distributeur lors du retrait de la pâte à souder\n" "à travers la buse du distributeur." -#: flatcamGUI/PreferencesUI.py:7139 flatcamTools/ToolSolderPaste.py:328 +#: flatcamGUI/PreferencesUI.py:7139 flatcamTools/ToolSolderPaste.py:327 msgid "Dwell REV" msgstr "Habiter INVERSE" -#: flatcamGUI/PreferencesUI.py:7141 flatcamTools/ToolSolderPaste.py:330 +#: flatcamGUI/PreferencesUI.py:7141 flatcamTools/ToolSolderPaste.py:329 msgid "" "Pause after solder paste dispenser retracted,\n" "to allow pressure equilibrium." @@ -12398,7 +12051,7 @@ msgstr "" "Pause après rétraction du distributeur de pâte à souder,\n" "permettre l'équilibre de la pression." -#: flatcamGUI/PreferencesUI.py:7150 flatcamTools/ToolSolderPaste.py:338 +#: flatcamGUI/PreferencesUI.py:7150 flatcamTools/ToolSolderPaste.py:337 msgid "Files that control the GCode generation." msgstr "Fichiers qui contrôlent la génération de GCode." @@ -12613,7 +12266,7 @@ msgstr "" "Un outil pour trouver la distance minimale entre\n" "tous les deux éléments géométriques de Gerber" -#: flatcamGUI/PreferencesUI.py:7432 flatcamTools/ToolOptimal.py:79 +#: flatcamGUI/PreferencesUI.py:7432 flatcamTools/ToolOptimal.py:78 msgid "Precision" msgstr "Précision" @@ -12781,7 +12434,7 @@ msgid "Number of steps (lines) used to interpolate circles." msgstr "Nombre d'étapes (lignes) utilisées pour interpoler les cercles." #: flatcamGUI/PreferencesUI.py:7666 flatcamGUI/PreferencesUI.py:7870 -#: flatcamTools/ToolCopperThieving.py:97 flatcamTools/ToolCopperThieving.py:432 +#: flatcamTools/ToolCopperThieving.py:96 flatcamTools/ToolCopperThieving.py:431 msgid "Clearance" msgstr "Dégagement" @@ -12795,7 +12448,7 @@ msgstr "" "(le remplissage du polygone peut être divisé en plusieurs polygones)\n" "et les traces de cuivre dans le fichier Gerber." -#: flatcamGUI/PreferencesUI.py:7699 flatcamTools/ToolCopperThieving.py:130 +#: flatcamGUI/PreferencesUI.py:7699 flatcamTools/ToolCopperThieving.py:129 msgid "Reference:" msgstr "Référence:" @@ -12816,22 +12469,22 @@ msgstr "" #: flatcamGUI/PreferencesUI.py:7710 flatcamGUI/PreferencesUI.py:8175 #: flatcamGUI/PreferencesUI.py:8287 flatcamGUI/PreferencesUI.py:8387 -#: flatcamGUI/PreferencesUI.py:8501 flatcamTools/ToolCopperThieving.py:172 +#: flatcamGUI/PreferencesUI.py:8501 flatcamTools/ToolCopperThieving.py:171 #: flatcamTools/ToolExtractDrills.py:102 flatcamTools/ToolExtractDrills.py:240 #: flatcamTools/ToolPunchGerber.py:113 flatcamTools/ToolPunchGerber.py:268 msgid "Rectangular" msgstr "Rectangulaire" -#: flatcamGUI/PreferencesUI.py:7711 flatcamTools/ToolCopperThieving.py:173 +#: flatcamGUI/PreferencesUI.py:7711 flatcamTools/ToolCopperThieving.py:172 msgid "Minimal" msgstr "Minimal" -#: flatcamGUI/PreferencesUI.py:7713 flatcamTools/ToolCopperThieving.py:175 +#: flatcamGUI/PreferencesUI.py:7713 flatcamTools/ToolCopperThieving.py:174 #: flatcamTools/ToolFilm.py:113 msgid "Box Type:" msgstr "Type de Box:" -#: flatcamGUI/PreferencesUI.py:7715 flatcamTools/ToolCopperThieving.py:177 +#: flatcamGUI/PreferencesUI.py:7715 flatcamTools/ToolCopperThieving.py:176 msgid "" "- 'Rectangular' - the bounding box will be of rectangular shape.\n" "- 'Minimal' - the bounding box will be the convex hull shape." @@ -12839,23 +12492,23 @@ msgstr "" "- 'Rectangulaire' - le cadre de délimitation sera de forme rectangulaire.\n" "- 'Minimal' - le cadre de délimitation aura la forme d'une coque convexe." -#: flatcamGUI/PreferencesUI.py:7729 flatcamTools/ToolCopperThieving.py:193 +#: flatcamGUI/PreferencesUI.py:7729 flatcamTools/ToolCopperThieving.py:192 msgid "Dots Grid" msgstr "Grille de points" -#: flatcamGUI/PreferencesUI.py:7730 flatcamTools/ToolCopperThieving.py:194 +#: flatcamGUI/PreferencesUI.py:7730 flatcamTools/ToolCopperThieving.py:193 msgid "Squares Grid" msgstr "Grille de carrés" -#: flatcamGUI/PreferencesUI.py:7731 flatcamTools/ToolCopperThieving.py:195 +#: flatcamGUI/PreferencesUI.py:7731 flatcamTools/ToolCopperThieving.py:194 msgid "Lines Grid" msgstr "Grille de lignes" -#: flatcamGUI/PreferencesUI.py:7733 flatcamTools/ToolCopperThieving.py:197 +#: flatcamGUI/PreferencesUI.py:7733 flatcamTools/ToolCopperThieving.py:196 msgid "Fill Type:" msgstr "Type de remplissage:" -#: flatcamGUI/PreferencesUI.py:7735 flatcamTools/ToolCopperThieving.py:199 +#: flatcamGUI/PreferencesUI.py:7735 flatcamTools/ToolCopperThieving.py:198 msgid "" "- 'Solid' - copper thieving will be a solid polygon.\n" "- 'Dots Grid' - the empty area will be filled with a pattern of dots.\n" @@ -12867,54 +12520,54 @@ msgstr "" "- 'Grille de carrés' - la zone vide sera remplie d'un motif de carrés.\n" "- 'Grille de lignes' - la zone vide sera remplie d'un motif de lignes." -#: flatcamGUI/PreferencesUI.py:7743 flatcamTools/ToolCopperThieving.py:218 +#: flatcamGUI/PreferencesUI.py:7743 flatcamTools/ToolCopperThieving.py:217 msgid "Dots Grid Parameters" msgstr "Paramètres de la grille de points" -#: flatcamGUI/PreferencesUI.py:7749 flatcamTools/ToolCopperThieving.py:224 +#: flatcamGUI/PreferencesUI.py:7749 flatcamTools/ToolCopperThieving.py:223 msgid "Dot diameter in Dots Grid." msgstr "Diamètre des points dans la grille des points." #: flatcamGUI/PreferencesUI.py:7760 flatcamGUI/PreferencesUI.py:7789 -#: flatcamGUI/PreferencesUI.py:7818 flatcamTools/ToolCopperThieving.py:235 -#: flatcamTools/ToolCopperThieving.py:275 -#: flatcamTools/ToolCopperThieving.py:315 +#: flatcamGUI/PreferencesUI.py:7818 flatcamTools/ToolCopperThieving.py:234 +#: flatcamTools/ToolCopperThieving.py:274 +#: flatcamTools/ToolCopperThieving.py:314 msgid "Spacing" msgstr "Espacement" -#: flatcamGUI/PreferencesUI.py:7762 flatcamTools/ToolCopperThieving.py:237 +#: flatcamGUI/PreferencesUI.py:7762 flatcamTools/ToolCopperThieving.py:236 msgid "Distance between each two dots in Dots Grid." msgstr "Distance entre deux points dans la grille de points." -#: flatcamGUI/PreferencesUI.py:7772 flatcamTools/ToolCopperThieving.py:258 +#: flatcamGUI/PreferencesUI.py:7772 flatcamTools/ToolCopperThieving.py:257 msgid "Squares Grid Parameters" msgstr "Paramètres de la grille des carrés" -#: flatcamGUI/PreferencesUI.py:7778 flatcamTools/ToolCopperThieving.py:264 +#: flatcamGUI/PreferencesUI.py:7778 flatcamTools/ToolCopperThieving.py:263 msgid "Square side size in Squares Grid." msgstr "Taille du côté carré dans la grille des carrés." -#: flatcamGUI/PreferencesUI.py:7791 flatcamTools/ToolCopperThieving.py:277 +#: flatcamGUI/PreferencesUI.py:7791 flatcamTools/ToolCopperThieving.py:276 msgid "Distance between each two squares in Squares Grid." msgstr "Distance entre deux carrés dans la grille des carrés." -#: flatcamGUI/PreferencesUI.py:7801 flatcamTools/ToolCopperThieving.py:298 +#: flatcamGUI/PreferencesUI.py:7801 flatcamTools/ToolCopperThieving.py:297 msgid "Lines Grid Parameters" msgstr "Paramètres de grille de lignes" -#: flatcamGUI/PreferencesUI.py:7807 flatcamTools/ToolCopperThieving.py:304 +#: flatcamGUI/PreferencesUI.py:7807 flatcamTools/ToolCopperThieving.py:303 msgid "Line thickness size in Lines Grid." msgstr "Taille d'épaisseur de ligne dans la grille de lignes." -#: flatcamGUI/PreferencesUI.py:7820 flatcamTools/ToolCopperThieving.py:317 +#: flatcamGUI/PreferencesUI.py:7820 flatcamTools/ToolCopperThieving.py:316 msgid "Distance between each two lines in Lines Grid." msgstr "Distance entre deux lignes dans la grille de lignes." -#: flatcamGUI/PreferencesUI.py:7830 flatcamTools/ToolCopperThieving.py:355 +#: flatcamGUI/PreferencesUI.py:7830 flatcamTools/ToolCopperThieving.py:354 msgid "Robber Bar Parameters" msgstr "Paramètres de la Robber Bar" -#: flatcamGUI/PreferencesUI.py:7832 flatcamTools/ToolCopperThieving.py:357 +#: flatcamGUI/PreferencesUI.py:7832 flatcamTools/ToolCopperThieving.py:356 msgid "" "Parameters used for the robber bar.\n" "Robber bar = copper border to help in pattern hole plating." @@ -12922,27 +12575,27 @@ msgstr "" "Paramètres utilisés pour la Robber Bar.\n" "Robber Bar = bordure en cuivre pour faciliter le placage des trous." -#: flatcamGUI/PreferencesUI.py:7840 flatcamTools/ToolCopperThieving.py:365 +#: flatcamGUI/PreferencesUI.py:7840 flatcamTools/ToolCopperThieving.py:364 msgid "Bounding box margin for robber bar." msgstr "Marge de la zone de délimitation pour la Robber Bar." -#: flatcamGUI/PreferencesUI.py:7851 flatcamTools/ToolCopperThieving.py:376 +#: flatcamGUI/PreferencesUI.py:7851 flatcamTools/ToolCopperThieving.py:375 msgid "Thickness" msgstr "Épaisseur" -#: flatcamGUI/PreferencesUI.py:7853 flatcamTools/ToolCopperThieving.py:378 +#: flatcamGUI/PreferencesUI.py:7853 flatcamTools/ToolCopperThieving.py:377 msgid "The robber bar thickness." msgstr "L'épaisseur de la Robber Bar." -#: flatcamGUI/PreferencesUI.py:7863 flatcamTools/ToolCopperThieving.py:409 +#: flatcamGUI/PreferencesUI.py:7863 flatcamTools/ToolCopperThieving.py:408 msgid "Pattern Plating Mask" msgstr "Masque de placage de motifs" -#: flatcamGUI/PreferencesUI.py:7865 flatcamTools/ToolCopperThieving.py:411 +#: flatcamGUI/PreferencesUI.py:7865 flatcamTools/ToolCopperThieving.py:410 msgid "Generate a mask for pattern plating." msgstr "Générez un masque pour le placage de motifs." -#: flatcamGUI/PreferencesUI.py:7872 flatcamTools/ToolCopperThieving.py:434 +#: flatcamGUI/PreferencesUI.py:7872 flatcamTools/ToolCopperThieving.py:433 msgid "" "The distance between the possible copper thieving elements\n" "and/or robber bar and the actual openings in the mask." @@ -12956,7 +12609,7 @@ msgstr "Options de l'outil Fiducials" #: flatcamGUI/PreferencesUI.py:7902 flatcamGUI/PreferencesUI.py:8018 #: flatcamGUI/PreferencesUI.py:8137 flatcamGUI/PreferencesUI.py:8349 -#: flatcamTools/ToolCopperThieving.py:92 flatcamTools/ToolFiducials.py:151 +#: flatcamTools/ToolCopperThieving.py:91 flatcamTools/ToolFiducials.py:151 msgid "Parameters used for this tool." msgstr "Paramètres utilisés pour cet outil." @@ -13287,7 +12940,7 @@ msgid "" "fixed diameter holes.\n" "- Fixed Annular Ring -> will try to keep a set annular ring.\n" "- Proportional -> will make a Gerber punch hole having the diameter a " -"percentage of the pad diameter.\n" +"percentage of the pad diameter." msgstr "" "La source du trou de perforation peut être:\n" "- Excellon Object-> le centre d'Excellons Object Drills servira de " @@ -13296,7 +12949,7 @@ msgstr "" "référence en ajoutant des trous de diamètre fixe.\n" "- Anneau fixe annulaire -> essaiera de garder un anneau annulaire fixe.\n" "- Proportionnel -> fera un trou de poinçon Gerber ayant le diamètre un " -"pourcentage du diamètre du tampon.\n" +"pourcentage du diamètre du tampon." #: flatcamGUI/PreferencesUI.py:8552 msgid "Invert Gerber Tool Options" @@ -13478,11 +13131,388 @@ msgstr "Supprimer le mot clé" msgid "Delete a keyword from the list" msgstr "Supprimer un mot clé de la liste" -#: flatcamParsers/ParseExcellon.py:315 +#: flatcamObjects/FlatCAMCNCJob.py:429 flatcamObjects/FlatCAMDocument.py:71 +#: flatcamObjects/FlatCAMScript.py:83 +msgid "Basic" +msgstr "De base" + +#: flatcamObjects/FlatCAMCNCJob.py:435 flatcamObjects/FlatCAMDocument.py:75 +#: flatcamObjects/FlatCAMScript.py:87 +msgid "Advanced" +msgstr "Avancé" + +#: flatcamObjects/FlatCAMCNCJob.py:478 +msgid "Plotting..." +msgstr "Traçage..." + +#: flatcamObjects/FlatCAMCNCJob.py:507 flatcamObjects/FlatCAMCNCJob.py:512 +#: flatcamTools/ToolSolderPaste.py:1499 +msgid "Export Machine Code ..." +msgstr "Exporter le code machine ..." + +#: flatcamObjects/FlatCAMCNCJob.py:517 flatcamTools/ToolSolderPaste.py:1503 +msgid "Export Machine Code cancelled ..." +msgstr "Exporter le code machine annulé ..." + +#: flatcamObjects/FlatCAMCNCJob.py:538 +msgid "Machine Code file saved to" +msgstr "Fichier de code machine enregistré dans" + +#: flatcamObjects/FlatCAMCNCJob.py:599 flatcamTools/ToolCalibration.py:1097 +msgid "Loaded Machine Code into Code Editor" +msgstr "Code machine chargé dans l'éditeur de code" + +#: flatcamObjects/FlatCAMCNCJob.py:739 +msgid "This CNCJob object can't be processed because it is a" +msgstr "Cet objet CNCJob ne peut pas être traité car il est" + +#: flatcamObjects/FlatCAMCNCJob.py:741 +msgid "CNCJob object" +msgstr "Objet CNCJob" + +#: flatcamObjects/FlatCAMCNCJob.py:921 +msgid "" +"G-code does not have a G94 code and we will not include the code in the " +"'Prepend to GCode' text box" +msgstr "" +"Le code G n'a pas de code G94 et nous n'inclurons pas le code dans la zone " +"de texte 'Prepend to GCode'" + +#: flatcamObjects/FlatCAMCNCJob.py:932 +msgid "Cancelled. The Toolchange Custom code is enabled but it's empty." +msgstr "Annulé. Le code personnalisé Toolchange est activé mais vide." + +#: flatcamObjects/FlatCAMCNCJob.py:937 +msgid "Toolchange G-code was replaced by a custom code." +msgstr "Toolchange G-code a été remplacé par un code personnalisé." + +#: flatcamObjects/FlatCAMCNCJob.py:985 flatcamObjects/FlatCAMCNCJob.py:995 +msgid "" +"The used preprocessor file has to have in it's name: 'toolchange_custom'" +msgstr "" +"Le fichier de post-traitement utilisé doit avoir pour nom: " +"'toolchange_custom'" + +#: flatcamObjects/FlatCAMCNCJob.py:998 +msgid "There is no preprocessor file." +msgstr "Il n'y a pas de fichier de post-processeur." + +#: flatcamObjects/FlatCAMDocument.py:175 +msgid "Document Editor" +msgstr "Éditeur de Document" + +#: flatcamObjects/FlatCAMExcellon.py:514 flatcamObjects/FlatCAMExcellon.py:746 +#: flatcamObjects/FlatCAMGeometry.py:306 flatcamObjects/FlatCAMGeometry.py:767 +#: flatcamTools/ToolNCC.py:811 flatcamTools/ToolNCC.py:1191 +#: flatcamTools/ToolPaint.py:779 flatcamTools/ToolPaint.py:1166 +msgid "Multiple Tools" +msgstr "Outils multiples" + +#: flatcamObjects/FlatCAMExcellon.py:726 +msgid "No Tool Selected" +msgstr "Aucun Outil sélectionné" + +#: flatcamObjects/FlatCAMExcellon.py:1076 +#: flatcamObjects/FlatCAMExcellon.py:1168 +#: flatcamObjects/FlatCAMExcellon.py:1355 +msgid "Please select one or more tools from the list and try again." +msgstr "" +"Veuillez sélectionner un ou plusieurs outils dans la liste et réessayer." + +#: flatcamObjects/FlatCAMExcellon.py:1083 +msgid "Milling tool for DRILLS is larger than hole size. Cancelled." +msgstr "" +"L'outil de fraisage pour PERÇAGES est supérieur à la taille du trou. Annulé." + +#: flatcamObjects/FlatCAMExcellon.py:1098 +#: flatcamObjects/FlatCAMExcellon.py:1188 +#: flatcamObjects/FlatCAMExcellon.py:1373 +#: tclCommands/TclCommandDrillcncjob.py:193 +msgid "Tool_nr" +msgstr "Numéro d'outil" + +#: flatcamObjects/FlatCAMExcellon.py:1098 +#: flatcamObjects/FlatCAMExcellon.py:1188 +#: flatcamObjects/FlatCAMExcellon.py:1373 +#: tclCommands/TclCommandDrillcncjob.py:193 +msgid "Drills_Nr" +msgstr "Forets Nr" + +#: flatcamObjects/FlatCAMExcellon.py:1098 +#: flatcamObjects/FlatCAMExcellon.py:1188 +#: flatcamObjects/FlatCAMExcellon.py:1373 +#: tclCommands/TclCommandDrillcncjob.py:193 +msgid "Slots_Nr" +msgstr "Fentes Nr" + +#: flatcamObjects/FlatCAMExcellon.py:1177 +msgid "Milling tool for SLOTS is larger than hole size. Cancelled." +msgstr "" +"L'outil de fraisage pour FENTES est supérieur à la taille du trou. Annulé." + +#: flatcamObjects/FlatCAMExcellon.py:1281 +#: flatcamObjects/FlatCAMGeometry.py:1517 +msgid "Focus Z" +msgstr "Focus Z" + +#: flatcamObjects/FlatCAMExcellon.py:1300 +#: flatcamObjects/FlatCAMGeometry.py:1536 +msgid "Laser Power" +msgstr "Puissance laser" + +#: flatcamObjects/FlatCAMExcellon.py:1430 +#: flatcamObjects/FlatCAMGeometry.py:1973 +#: flatcamObjects/FlatCAMGeometry.py:1977 +#: flatcamObjects/FlatCAMGeometry.py:2122 +msgid "Generating CNC Code" +msgstr "Génération de code CNC" + +#: flatcamObjects/FlatCAMExcellon.py:1620 flatcamTools/ToolNCC.py:918 +#: flatcamTools/ToolPaint.py:844 +msgid "Current Tool parameters were applied to all tools." +msgstr "Les paramètres d'outil actuels ont été appliqués à tous les outils." + +#: flatcamObjects/FlatCAMGeometry.py:119 flatcamObjects/FlatCAMGeometry.py:1181 +#: flatcamObjects/FlatCAMGeometry.py:1182 +#: flatcamObjects/FlatCAMGeometry.py:1191 +msgid "Iso" +msgstr "Iso" + +#: flatcamObjects/FlatCAMGeometry.py:119 flatcamObjects/FlatCAMGeometry.py:439 +#: flatcamObjects/FlatCAMGeometry.py:826 flatcamObjects/FlatCAMGerber.py:890 +#: flatcamObjects/FlatCAMGerber.py:1038 +msgid "Rough" +msgstr "Rugueux" + +#: flatcamObjects/FlatCAMGeometry.py:119 +msgid "Finish" +msgstr "Finition" + +#: flatcamObjects/FlatCAMGeometry.py:474 +msgid "Add from Tool DB" +msgstr "Ajouter à partir de la BD d'outils" + +#: flatcamObjects/FlatCAMGeometry.py:845 +msgid "Tool added in Tool Table." +msgstr "Outil ajouté dans la table d'outils." + +#: flatcamObjects/FlatCAMGeometry.py:954 flatcamObjects/FlatCAMGeometry.py:963 +msgid "Failed. Select a tool to copy." +msgstr "Échoué. Sélectionnez un outil à copier." + +#: flatcamObjects/FlatCAMGeometry.py:992 +msgid "Tool was copied in Tool Table." +msgstr "L'outil a été copié dans la table d'outils." + +#: flatcamObjects/FlatCAMGeometry.py:1019 +msgid "Tool was edited in Tool Table." +msgstr "L'outil a été édité dans Tool Table." + +#: flatcamObjects/FlatCAMGeometry.py:1048 +#: flatcamObjects/FlatCAMGeometry.py:1057 +msgid "Failed. Select a tool to delete." +msgstr "Échoué. Sélectionnez un outil à supprimer." + +#: flatcamObjects/FlatCAMGeometry.py:1081 +msgid "Tool was deleted in Tool Table." +msgstr "L'outil a été supprimé dans la table d'outils." + +#: flatcamObjects/FlatCAMGeometry.py:1589 +msgid "This Geometry can't be processed because it is" +msgstr "Cette géométrie ne peut pas être traitée car elle est" + +#: flatcamObjects/FlatCAMGeometry.py:1589 +msgid "geometry" +msgstr "geometry" + +#: flatcamObjects/FlatCAMGeometry.py:1630 +msgid "Failed. No tool selected in the tool table ..." +msgstr "Échoué. Aucun outil sélectionné dans la table d'outils ..." + +#: flatcamObjects/FlatCAMGeometry.py:1732 +#: flatcamObjects/FlatCAMGeometry.py:1882 +msgid "" +"Tool Offset is selected in Tool Table but no value is provided.\n" +"Add a Tool Offset or change the Offset Type." +msgstr "" +"Le décalage d’outil est sélectionné dans Tableau d’outils mais aucune valeur " +"n’est fournie.\n" +"Ajoutez un décalage d'outil ou changez le type de décalage." + +#: flatcamObjects/FlatCAMGeometry.py:1798 +#: flatcamObjects/FlatCAMGeometry.py:1944 +msgid "G-Code parsing in progress..." +msgstr "Analyse du code G en cours ..." + +#: flatcamObjects/FlatCAMGeometry.py:1800 +#: flatcamObjects/FlatCAMGeometry.py:1946 +msgid "G-Code parsing finished..." +msgstr "L'analyse du code G est terminée ..." + +#: flatcamObjects/FlatCAMGeometry.py:1808 +msgid "Finished G-Code processing" +msgstr "Traitement du code G terminé" + +#: flatcamObjects/FlatCAMGeometry.py:1810 +#: flatcamObjects/FlatCAMGeometry.py:1958 +msgid "G-Code processing failed with error" +msgstr "Le traitement du code G a échoué avec une erreur" + +#: flatcamObjects/FlatCAMGeometry.py:1852 flatcamTools/ToolSolderPaste.py:1301 +msgid "Cancelled. Empty file, it has no geometry" +msgstr "Annulé. Fichier vide, il n'a pas de géométrie" + +#: flatcamObjects/FlatCAMGeometry.py:1956 +#: flatcamObjects/FlatCAMGeometry.py:2117 +msgid "Finished G-Code processing..." +msgstr "Traitement terminé du code G ..." + +#: flatcamObjects/FlatCAMGeometry.py:1975 +#: flatcamObjects/FlatCAMGeometry.py:1979 +#: flatcamObjects/FlatCAMGeometry.py:2124 +msgid "CNCjob created" +msgstr "CNCjob créé" + +#: flatcamObjects/FlatCAMGeometry.py:2155 +#: flatcamObjects/FlatCAMGeometry.py:2164 flatcamParsers/ParseGerber.py:1867 +#: flatcamParsers/ParseGerber.py:1877 +msgid "Scale factor has to be a number: integer or float." +msgstr "Le facteur d'échelle doit être un nombre: entier ou réel." + +#: flatcamObjects/FlatCAMGeometry.py:2227 +msgid "Geometry Scale done." +msgstr "Échelle de géométrie terminée." + +#: flatcamObjects/FlatCAMGeometry.py:2244 flatcamParsers/ParseGerber.py:1993 +msgid "" +"An (x,y) pair of values are needed. Probable you entered only one value in " +"the Offset field." +msgstr "" +"Une paire de valeurs (x, y) est nécessaire. Vous avez probablement entré une " +"seule valeur dans le champ Décalage." + +#: flatcamObjects/FlatCAMGeometry.py:2300 +msgid "Geometry Offset done." +msgstr "Décalage de géométrie effectué." + +#: flatcamObjects/FlatCAMGeometry.py:2329 +msgid "" +"The Toolchange X,Y field in Edit -> Preferences has to be in the format (x, " +"y)\n" +"but now there is only one value, not two." +msgstr "" +"Le champ Toolchange X, Y dans Edition -> Préférences doit être au format (x, " +"y)\n" +"mais maintenant il n'y a qu'une seule valeur, pas deux." + +#: flatcamObjects/FlatCAMGerber.py:493 +msgid "Buffering solid geometry" +msgstr "Mise en tampon de la géométrie solide" + +#: flatcamObjects/FlatCAMGerber.py:502 +msgid "Done" +msgstr "Terminé" + +#: flatcamObjects/FlatCAMGerber.py:528 flatcamObjects/FlatCAMGerber.py:554 +msgid "Operation could not be done." +msgstr "L'opération n'a pas pu être effectuée." + +#: flatcamObjects/FlatCAMGerber.py:571 +msgid "Isolating..." +msgstr "Isoler ..." + +#: flatcamObjects/FlatCAMGerber.py:630 +msgid "Click on a polygon to isolate it." +msgstr "Cliquez sur un polygone pour l'isoler." + +#: flatcamObjects/FlatCAMGerber.py:669 flatcamObjects/FlatCAMGerber.py:773 +#: flatcamTools/ToolPaint.py:1511 +msgid "Added polygon" +msgstr "Polygone ajouté" + +#: flatcamObjects/FlatCAMGerber.py:670 flatcamObjects/FlatCAMGerber.py:775 +msgid "Click to add next polygon or right click to start isolation." +msgstr "" +"Cliquez pour ajouter le polygone suivant ou cliquez avec le bouton droit " +"pour démarrer l'isolement." + +#: flatcamObjects/FlatCAMGerber.py:682 flatcamTools/ToolPaint.py:1525 +msgid "Removed polygon" +msgstr "Polygone supprimé" + +#: flatcamObjects/FlatCAMGerber.py:683 +msgid "Click to add/remove next polygon or right click to start isolation." +msgstr "" +"Cliquez pour ajouter / supprimer le polygone suivant ou cliquez avec le " +"bouton droit pour démarrer l'isolement." + +#: flatcamObjects/FlatCAMGerber.py:688 flatcamTools/ToolPaint.py:1531 +msgid "No polygon detected under click position." +msgstr "Aucun polygone détecté sous la position du clic." + +#: flatcamObjects/FlatCAMGerber.py:709 flatcamTools/ToolPaint.py:1560 +msgid "List of single polygons is empty. Aborting." +msgstr "La liste des polygones simples est vide. Abandon." + +#: flatcamObjects/FlatCAMGerber.py:778 +msgid "No polygon in selection." +msgstr "Aucun polygone dans la sélection." + +#: flatcamObjects/FlatCAMGerber.py:906 flatcamObjects/FlatCAMGerber.py:985 +#: flatcamTools/ToolNCC.py:2081 flatcamTools/ToolNCC.py:3132 +#: flatcamTools/ToolNCC.py:3511 +msgid "Isolation geometry could not be generated." +msgstr "La géométrie d'isolation n'a pas pu être générée." + +#: flatcamObjects/FlatCAMGerber.py:931 flatcamObjects/FlatCAMGerber.py:1063 +msgid "Isolation geometry created" +msgstr "Géométrie d'isolement créée" + +#: flatcamObjects/FlatCAMGerber.py:940 flatcamObjects/FlatCAMGerber.py:1070 +msgid "Subtracting Geo" +msgstr "Soustraction Geo" + +#: flatcamObjects/FlatCAMGerber.py:1395 +msgid "Plotting Apertures" +msgstr "Traçage des ouvertures" + +#: flatcamObjects/FlatCAMObj.py:234 +msgid "Name changed from" +msgstr "Nom changé de" + +#: flatcamObjects/FlatCAMObj.py:234 +msgid "to" +msgstr "à" + +#: flatcamObjects/FlatCAMObj.py:245 +msgid "Offsetting..." +msgstr "Compenser ..." + +#: flatcamObjects/FlatCAMObj.py:259 flatcamObjects/FlatCAMObj.py:264 +msgid "Scaling could not be executed." +msgstr "La mise à l'échelle n'a pas pu être exécutée." + +#: flatcamObjects/FlatCAMObj.py:268 flatcamObjects/FlatCAMObj.py:276 +msgid "Scale done." +msgstr "Échelle terminée." + +#: flatcamObjects/FlatCAMObj.py:274 +msgid "Scaling..." +msgstr "Mise à l'échelle..." + +#: flatcamObjects/FlatCAMObj.py:292 +msgid "Skewing..." +msgstr "Fausser..." + +#: flatcamObjects/FlatCAMScript.py:102 +msgid "Script Editor" +msgstr "Éditeur de script" + +#: flatcamParsers/ParseExcellon.py:316 msgid "This is GCODE mark" msgstr "C'est la marque GCODE" -#: flatcamParsers/ParseExcellon.py:432 +#: flatcamParsers/ParseExcellon.py:433 msgid "" "No tool diameter info's. See shell.\n" "A tool change event: T" @@ -13490,7 +13520,7 @@ msgstr "" "Aucune information sur le diamètre de l'outil. Voir shell.\n" "Un événement de changement d'outil: T" -#: flatcamParsers/ParseExcellon.py:435 +#: flatcamParsers/ParseExcellon.py:436 msgid "" "was found but the Excellon file have no informations regarding the tool " "diameters therefore the application will try to load it by using some 'fake' " @@ -13504,10 +13534,6 @@ msgstr "" "L'utilisateur doit modifier l'objet Excellon résultant et modifier les " "diamètres pour refléter les diamètres réels." -#: flatcamParsers/ParseExcellon.py:897 flatcamTools/ToolSolderPaste.py:1327 -msgid "An internal error has ocurred. See shell.\n" -msgstr "Une erreur interne s'est produite. Voir shell.\n" - #: flatcamParsers/ParseExcellon.py:900 msgid "" "Excellon Parser error.\n" @@ -13577,7 +13603,7 @@ msgstr "Contenu de la ligne Gerber" msgid "Gerber Parser ERROR" msgstr "Gerber Parser ERREUR" -#: flatcamParsers/ParseGerber.py:1956 +#: flatcamParsers/ParseGerber.py:1957 msgid "Gerber Scale done." msgstr "Échelle de Gerber fait." @@ -13585,19 +13611,19 @@ msgstr "Échelle de Gerber fait." msgid "Gerber Offset done." msgstr "Gerber offset fait." -#: flatcamParsers/ParseGerber.py:2126 +#: flatcamParsers/ParseGerber.py:2125 msgid "Gerber Mirror done." msgstr "Le miroir de Gerber est fait." -#: flatcamParsers/ParseGerber.py:2200 +#: flatcamParsers/ParseGerber.py:2199 msgid "Gerber Skew done." msgstr "Gerber incline fait." -#: flatcamParsers/ParseGerber.py:2263 +#: flatcamParsers/ParseGerber.py:2261 msgid "Gerber Rotate done." msgstr "La rotation de Gerber est fait." -#: flatcamParsers/ParseGerber.py:2419 +#: flatcamParsers/ParseGerber.py:2418 msgid "Gerber Buffer done." msgstr "Gerber Buffer fait." @@ -13702,28 +13728,28 @@ msgstr "" "Si ces points sont utilisés, cela suppose une translation et une rotation." #: flatcamTools/ToolAlignObjects.py:176 flatcamTools/ToolCalculators.py:246 -#: flatcamTools/ToolCalibration.py:683 flatcamTools/ToolCopperThieving.py:485 -#: flatcamTools/ToolCutOut.py:372 flatcamTools/ToolDblSided.py:472 +#: flatcamTools/ToolCalibration.py:683 flatcamTools/ToolCopperThieving.py:484 +#: flatcamTools/ToolCutOut.py:371 flatcamTools/ToolDblSided.py:471 #: flatcamTools/ToolExtractDrills.py:310 flatcamTools/ToolFiducials.py:318 #: flatcamTools/ToolFilm.py:520 flatcamTools/ToolInvertGerber.py:140 -#: flatcamTools/ToolNCC.py:612 flatcamTools/ToolOptimal.py:238 -#: flatcamTools/ToolPaint.py:556 flatcamTools/ToolPanelize.py:269 +#: flatcamTools/ToolNCC.py:612 flatcamTools/ToolOptimal.py:237 +#: flatcamTools/ToolPaint.py:556 flatcamTools/ToolPanelize.py:267 #: flatcamTools/ToolPunchGerber.py:339 flatcamTools/ToolQRCode.py:314 -#: flatcamTools/ToolRulesCheck.py:516 flatcamTools/ToolSolderPaste.py:474 -#: flatcamTools/ToolSub.py:176 flatcamTools/ToolTransform.py:399 +#: flatcamTools/ToolRulesCheck.py:516 flatcamTools/ToolSolderPaste.py:473 +#: flatcamTools/ToolSub.py:176 flatcamTools/ToolTransform.py:398 msgid "Reset Tool" msgstr "Réinitialiser l'outil" #: flatcamTools/ToolAlignObjects.py:178 flatcamTools/ToolCalculators.py:248 -#: flatcamTools/ToolCalibration.py:685 flatcamTools/ToolCopperThieving.py:487 -#: flatcamTools/ToolCutOut.py:374 flatcamTools/ToolDblSided.py:474 +#: flatcamTools/ToolCalibration.py:685 flatcamTools/ToolCopperThieving.py:486 +#: flatcamTools/ToolCutOut.py:373 flatcamTools/ToolDblSided.py:473 #: flatcamTools/ToolExtractDrills.py:312 flatcamTools/ToolFiducials.py:320 #: flatcamTools/ToolFilm.py:522 flatcamTools/ToolInvertGerber.py:142 -#: flatcamTools/ToolNCC.py:614 flatcamTools/ToolOptimal.py:240 -#: flatcamTools/ToolPaint.py:558 flatcamTools/ToolPanelize.py:271 +#: flatcamTools/ToolNCC.py:614 flatcamTools/ToolOptimal.py:239 +#: flatcamTools/ToolPaint.py:558 flatcamTools/ToolPanelize.py:269 #: flatcamTools/ToolPunchGerber.py:341 flatcamTools/ToolQRCode.py:316 -#: flatcamTools/ToolRulesCheck.py:518 flatcamTools/ToolSolderPaste.py:476 -#: flatcamTools/ToolSub.py:178 flatcamTools/ToolTransform.py:401 +#: flatcamTools/ToolRulesCheck.py:518 flatcamTools/ToolSolderPaste.py:475 +#: flatcamTools/ToolSub.py:178 flatcamTools/ToolTransform.py:400 msgid "Will reset the tool parameters." msgstr "Réinitialise les paramètres de l'outil." @@ -13757,8 +13783,8 @@ msgstr "Cliquez sur le point de Destination." #: flatcamTools/ToolAlignObjects.py:385 flatcamTools/ToolAlignObjects.py:400 #: flatcamTools/ToolAlignObjects.py:407 -msgid " Or right click to cancel." -msgstr " Ou cliquez avec le bouton droit pour annuler." +msgid "Or right click to cancel." +msgstr "Ou cliquez avec le bouton droit pour annuler." #: flatcamTools/ToolAlignObjects.py:400 flatcamTools/ToolAlignObjects.py:407 #: flatcamTools/ToolFiducials.py:111 @@ -13878,7 +13904,7 @@ msgstr "" "(autant que possible) coins de l'objet." #: flatcamTools/ToolCalibration.py:193 flatcamTools/ToolFilm.py:76 -#: flatcamTools/ToolImage.py:54 flatcamTools/ToolPanelize.py:78 +#: flatcamTools/ToolImage.py:54 flatcamTools/ToolPanelize.py:76 #: flatcamTools/ToolProperties.py:177 msgid "Object Type" msgstr "Type d'objet" @@ -13986,7 +14012,7 @@ msgstr "" "bas à droite.\n" "- quatrième point -> point de vérification final. Juste pour évaluation." -#: flatcamTools/ToolCalibration.py:403 flatcamTools/ToolSolderPaste.py:349 +#: flatcamTools/ToolCalibration.py:403 flatcamTools/ToolSolderPaste.py:348 msgid "Generate GCode" msgstr "Générer du GCode" @@ -14162,11 +14188,11 @@ msgstr "Annulé. Quatre points sont nécessaires pour la génération de GCode." msgid "There is no FlatCAM object selected..." msgstr "Aucun objet FlatCAM n'est sélectionné ..." -#: flatcamTools/ToolCopperThieving.py:77 flatcamTools/ToolFiducials.py:261 +#: flatcamTools/ToolCopperThieving.py:76 flatcamTools/ToolFiducials.py:261 msgid "Gerber Object to which will be added a copper thieving." msgstr "Objet Gerber auquel sera ajouté un voleur de cuivre." -#: flatcamTools/ToolCopperThieving.py:99 +#: flatcamTools/ToolCopperThieving.py:98 msgid "" "This set the distance between the copper thieving components\n" "(the polygon fill may be split in multiple polygons)\n" @@ -14176,7 +14202,7 @@ msgstr "" "(le remplissage du polygone peut être divisé en plusieurs polygones)\n" "et les traces de cuivre dans le fichier Gerber." -#: flatcamTools/ToolCopperThieving.py:132 +#: flatcamTools/ToolCopperThieving.py:131 msgid "" "- 'Itself' - the copper thieving extent is based on the object extent.\n" "- 'Area Selection' - left mouse click to start selection of the area to be " @@ -14191,12 +14217,12 @@ msgstr "" "- «Objet de référence» - effectuera un Copper Thieving dans la zone " "spécifiée par un autre objet." -#: flatcamTools/ToolCopperThieving.py:139 flatcamTools/ToolNCC.py:552 +#: flatcamTools/ToolCopperThieving.py:138 flatcamTools/ToolNCC.py:552 #: flatcamTools/ToolPaint.py:496 msgid "Ref. Type" msgstr "Type de Réf" -#: flatcamTools/ToolCopperThieving.py:141 +#: flatcamTools/ToolCopperThieving.py:140 msgid "" "The type of FlatCAM object to be used as copper thieving reference.\n" "It can be Gerber, Excellon or Geometry." @@ -14204,21 +14230,21 @@ msgstr "" "Type d'objet FlatCAM à utiliser comme référence de Copper Thieving.\n" "Il peut s'agir de Gerber, Excellon ou Geometry." -#: flatcamTools/ToolCopperThieving.py:150 flatcamTools/ToolNCC.py:562 +#: flatcamTools/ToolCopperThieving.py:149 flatcamTools/ToolNCC.py:562 #: flatcamTools/ToolPaint.py:506 msgid "Ref. Object" msgstr "Réf. Objet" -#: flatcamTools/ToolCopperThieving.py:152 flatcamTools/ToolNCC.py:564 +#: flatcamTools/ToolCopperThieving.py:151 flatcamTools/ToolNCC.py:564 #: flatcamTools/ToolPaint.py:508 msgid "The FlatCAM object to be used as non copper clearing reference." msgstr "L'objet FlatCAM à utiliser comme référence d'effacement non en cuivre." -#: flatcamTools/ToolCopperThieving.py:328 +#: flatcamTools/ToolCopperThieving.py:327 msgid "Insert Copper thieving" msgstr "Insérer Copper Thieving" -#: flatcamTools/ToolCopperThieving.py:330 +#: flatcamTools/ToolCopperThieving.py:329 msgid "" "Will add a polygon (may be split in multiple parts)\n" "that will surround the actual Gerber traces at a certain distance." @@ -14226,11 +14252,11 @@ msgstr "" "Ajoutera un polygone (peut être divisé en plusieurs parties)\n" "qui entourera les traces réelles de Gerber à une certaine distance." -#: flatcamTools/ToolCopperThieving.py:389 +#: flatcamTools/ToolCopperThieving.py:388 msgid "Insert Robber Bar" msgstr "Insérer une Robber Bar" -#: flatcamTools/ToolCopperThieving.py:391 +#: flatcamTools/ToolCopperThieving.py:390 msgid "" "Will add a polygon with a defined thickness\n" "that will surround the actual Gerber object\n" @@ -14242,11 +14268,11 @@ msgstr "" "à une certaine distance.\n" "Requis lors du placage des trous." -#: flatcamTools/ToolCopperThieving.py:415 +#: flatcamTools/ToolCopperThieving.py:414 msgid "Select Soldermask object" msgstr "Sélectionner un objet Soldermask" -#: flatcamTools/ToolCopperThieving.py:417 +#: flatcamTools/ToolCopperThieving.py:416 msgid "" "Gerber Object with the soldermask.\n" "It will be used as a base for\n" @@ -14256,11 +14282,11 @@ msgstr "" "Il sera utilisé comme base pour\n" "le masque de placage de motifs." -#: flatcamTools/ToolCopperThieving.py:446 +#: flatcamTools/ToolCopperThieving.py:445 msgid "Plated area" msgstr "Zone plaquée" -#: flatcamTools/ToolCopperThieving.py:448 +#: flatcamTools/ToolCopperThieving.py:447 msgid "" "The area to be plated by pattern plating.\n" "Basically is made from the openings in the plating mask.\n" @@ -14279,19 +14305,19 @@ msgstr "" "un peu plus grand que les tampons en cuivre, et cette zone est\n" "calculé à partir des ouvertures du masque de soldat." -#: flatcamTools/ToolCopperThieving.py:459 +#: flatcamTools/ToolCopperThieving.py:458 msgid "mm" msgstr "mm" -#: flatcamTools/ToolCopperThieving.py:461 +#: flatcamTools/ToolCopperThieving.py:460 msgid "in" msgstr "in" -#: flatcamTools/ToolCopperThieving.py:468 +#: flatcamTools/ToolCopperThieving.py:467 msgid "Generate pattern plating mask" msgstr "Générer un masque de placage de motifs" -#: flatcamTools/ToolCopperThieving.py:470 +#: flatcamTools/ToolCopperThieving.py:469 msgid "" "Will add to the soldermask gerber geometry\n" "the geometries of the copper thieving and/or\n" @@ -14301,70 +14327,70 @@ msgstr "" "les géométries du Copper Thieving et / ou\n" "la Robber Bar si ceux-ci ont été générés." -#: flatcamTools/ToolCopperThieving.py:626 -#: flatcamTools/ToolCopperThieving.py:651 +#: flatcamTools/ToolCopperThieving.py:625 +#: flatcamTools/ToolCopperThieving.py:650 msgid "Lines Grid works only for 'itself' reference ..." msgstr "" "La grille de lignes fonctionne uniquement pour la référence «elle-même» ..." -#: flatcamTools/ToolCopperThieving.py:637 +#: flatcamTools/ToolCopperThieving.py:636 msgid "Solid fill selected." msgstr "Remplissage solide sélectionné." -#: flatcamTools/ToolCopperThieving.py:642 +#: flatcamTools/ToolCopperThieving.py:641 msgid "Dots grid fill selected." msgstr "Remplissage de la grille de points sélectionné." -#: flatcamTools/ToolCopperThieving.py:647 +#: flatcamTools/ToolCopperThieving.py:646 msgid "Squares grid fill selected." msgstr "Remplissage de la grille des carrés sélectionné." -#: flatcamTools/ToolCopperThieving.py:668 -#: flatcamTools/ToolCopperThieving.py:750 -#: flatcamTools/ToolCopperThieving.py:1346 flatcamTools/ToolDblSided.py:658 +#: flatcamTools/ToolCopperThieving.py:667 +#: flatcamTools/ToolCopperThieving.py:749 +#: flatcamTools/ToolCopperThieving.py:1345 flatcamTools/ToolDblSided.py:657 #: flatcamTools/ToolExtractDrills.py:436 flatcamTools/ToolFiducials.py:466 -#: flatcamTools/ToolFiducials.py:743 flatcamTools/ToolOptimal.py:343 +#: flatcamTools/ToolFiducials.py:743 flatcamTools/ToolOptimal.py:342 #: flatcamTools/ToolPunchGerber.py:512 flatcamTools/ToolQRCode.py:426 msgid "There is no Gerber object loaded ..." msgstr "Il n'y a pas d'objet Gerber chargé ..." -#: flatcamTools/ToolCopperThieving.py:681 -#: flatcamTools/ToolCopperThieving.py:1274 +#: flatcamTools/ToolCopperThieving.py:680 +#: flatcamTools/ToolCopperThieving.py:1273 msgid "Append geometry" msgstr "Ajouter une géométrie" -#: flatcamTools/ToolCopperThieving.py:725 -#: flatcamTools/ToolCopperThieving.py:1307 -#: flatcamTools/ToolCopperThieving.py:1460 +#: flatcamTools/ToolCopperThieving.py:724 +#: flatcamTools/ToolCopperThieving.py:1306 +#: flatcamTools/ToolCopperThieving.py:1459 msgid "Append source file" msgstr "Ajouter un fichier source" -#: flatcamTools/ToolCopperThieving.py:733 -#: flatcamTools/ToolCopperThieving.py:1315 +#: flatcamTools/ToolCopperThieving.py:732 +#: flatcamTools/ToolCopperThieving.py:1314 msgid "Copper Thieving Tool done." msgstr "Outil de Copper Thieving fait." -#: flatcamTools/ToolCopperThieving.py:760 -#: flatcamTools/ToolCopperThieving.py:793 flatcamTools/ToolCutOut.py:480 -#: flatcamTools/ToolCutOut.py:667 flatcamTools/ToolInvertGerber.py:208 +#: flatcamTools/ToolCopperThieving.py:759 +#: flatcamTools/ToolCopperThieving.py:792 flatcamTools/ToolCutOut.py:479 +#: flatcamTools/ToolCutOut.py:666 flatcamTools/ToolInvertGerber.py:208 #: flatcamTools/ToolNCC.py:1594 flatcamTools/ToolNCC.py:1635 #: flatcamTools/ToolNCC.py:1664 flatcamTools/ToolPaint.py:1469 -#: flatcamTools/ToolPanelize.py:413 flatcamTools/ToolPanelize.py:428 +#: flatcamTools/ToolPanelize.py:411 flatcamTools/ToolPanelize.py:426 #: flatcamTools/ToolSub.py:294 flatcamTools/ToolSub.py:307 #: flatcamTools/ToolSub.py:498 flatcamTools/ToolSub.py:513 #: tclCommands/TclCommandCopperClear.py:97 tclCommands/TclCommandPaint.py:99 msgid "Could not retrieve object" msgstr "Impossible de récupérer l'objet" -#: flatcamTools/ToolCopperThieving.py:770 flatcamTools/ToolNCC.py:1643 +#: flatcamTools/ToolCopperThieving.py:769 flatcamTools/ToolNCC.py:1643 msgid "Click the start point of the area." msgstr "Cliquez sur le point de départ de la zone." -#: flatcamTools/ToolCopperThieving.py:821 +#: flatcamTools/ToolCopperThieving.py:820 msgid "Click the end point of the filling area." msgstr "Cliquez sur le point final de la zone de remplissage." -#: flatcamTools/ToolCopperThieving.py:827 flatcamTools/ToolNCC.py:1705 +#: flatcamTools/ToolCopperThieving.py:826 flatcamTools/ToolNCC.py:1705 #: flatcamTools/ToolNCC.py:1757 flatcamTools/ToolPaint.py:1601 #: flatcamTools/ToolPaint.py:1652 msgid "Zone added. Click to start adding next zone or right click to finish." @@ -14372,88 +14398,88 @@ msgstr "" "Zone ajoutée. Cliquez pour commencer à ajouter la zone suivante ou faites un " "clic droit pour terminer." -#: flatcamTools/ToolCopperThieving.py:943 -#: flatcamTools/ToolCopperThieving.py:947 -#: flatcamTools/ToolCopperThieving.py:1008 +#: flatcamTools/ToolCopperThieving.py:942 +#: flatcamTools/ToolCopperThieving.py:946 +#: flatcamTools/ToolCopperThieving.py:1007 msgid "Thieving" msgstr "Voleur" -#: flatcamTools/ToolCopperThieving.py:954 +#: flatcamTools/ToolCopperThieving.py:953 msgid "Copper Thieving Tool started. Reading parameters." msgstr "L'outil de Copper Thieving a démarré. Lecture des paramètres." -#: flatcamTools/ToolCopperThieving.py:979 +#: flatcamTools/ToolCopperThieving.py:978 msgid "Copper Thieving Tool. Preparing isolation polygons." msgstr "Outil de Copper Thieving. Préparation des polygones d'isolement." -#: flatcamTools/ToolCopperThieving.py:1024 +#: flatcamTools/ToolCopperThieving.py:1023 msgid "Copper Thieving Tool. Preparing areas to fill with copper." msgstr "Outil de Copper Thieving. Préparer les zones à remplir de cuivre." -#: flatcamTools/ToolCopperThieving.py:1035 flatcamTools/ToolOptimal.py:350 -#: flatcamTools/ToolPanelize.py:802 flatcamTools/ToolRulesCheck.py:1127 +#: flatcamTools/ToolCopperThieving.py:1034 flatcamTools/ToolOptimal.py:349 +#: flatcamTools/ToolPanelize.py:800 flatcamTools/ToolRulesCheck.py:1127 msgid "Working..." msgstr "Travail..." -#: flatcamTools/ToolCopperThieving.py:1062 +#: flatcamTools/ToolCopperThieving.py:1061 msgid "Geometry not supported for bounding box" msgstr "Géométrie non prise en charge pour le cadre de sélection" -#: flatcamTools/ToolCopperThieving.py:1068 flatcamTools/ToolNCC.py:1928 +#: flatcamTools/ToolCopperThieving.py:1067 flatcamTools/ToolNCC.py:1928 #: flatcamTools/ToolNCC.py:1983 flatcamTools/ToolNCC.py:2987 #: flatcamTools/ToolPaint.py:3375 msgid "No object available." msgstr "Aucun objet disponible." -#: flatcamTools/ToolCopperThieving.py:1105 flatcamTools/ToolNCC.py:1953 +#: flatcamTools/ToolCopperThieving.py:1104 flatcamTools/ToolNCC.py:1953 #: flatcamTools/ToolNCC.py:2006 flatcamTools/ToolNCC.py:3029 msgid "The reference object type is not supported." msgstr "Le type d'objet de référence n'est pas pris en charge." -#: flatcamTools/ToolCopperThieving.py:1110 +#: flatcamTools/ToolCopperThieving.py:1109 msgid "Copper Thieving Tool. Appending new geometry and buffering." msgstr "" "Outil de Copper Thieving. Ajout d'une nouvelle géométrie et mise en mémoire " "tampon." -#: flatcamTools/ToolCopperThieving.py:1126 +#: flatcamTools/ToolCopperThieving.py:1125 msgid "Create geometry" msgstr "Créer une géométrie" -#: flatcamTools/ToolCopperThieving.py:1326 -#: flatcamTools/ToolCopperThieving.py:1330 +#: flatcamTools/ToolCopperThieving.py:1325 +#: flatcamTools/ToolCopperThieving.py:1329 msgid "P-Plating Mask" msgstr "Masque de placage P" -#: flatcamTools/ToolCopperThieving.py:1352 +#: flatcamTools/ToolCopperThieving.py:1351 msgid "Append PP-M geometry" msgstr "Ajouter la géométrie du masque P de placage" -#: flatcamTools/ToolCopperThieving.py:1478 +#: flatcamTools/ToolCopperThieving.py:1477 msgid "Generating Pattern Plating Mask done." msgstr "Génération du masque de placage de motif terminée." -#: flatcamTools/ToolCopperThieving.py:1550 +#: flatcamTools/ToolCopperThieving.py:1549 msgid "Copper Thieving Tool exit." msgstr "Sortie de l'outil de Copper Thieving." -#: flatcamTools/ToolCutOut.py:42 +#: flatcamTools/ToolCutOut.py:41 msgid "Cutout PCB" msgstr "Découpe de PCB" -#: flatcamTools/ToolCutOut.py:70 flatcamTools/ToolPanelize.py:54 +#: flatcamTools/ToolCutOut.py:69 flatcamTools/ToolPanelize.py:52 msgid "Source Object" msgstr "Objet source" -#: flatcamTools/ToolCutOut.py:71 +#: flatcamTools/ToolCutOut.py:70 msgid "Object to be cutout" msgstr "Objet à découper" -#: flatcamTools/ToolCutOut.py:76 +#: flatcamTools/ToolCutOut.py:75 msgid "Kind" msgstr "Sorte" -#: flatcamTools/ToolCutOut.py:98 +#: flatcamTools/ToolCutOut.py:97 msgid "" "Specify the type of object to be cutout.\n" "It can be of type: Gerber or Geometry.\n" @@ -14465,19 +14491,19 @@ msgstr "" "Ce qui est sélectionné ici dictera le genre\n" "des objets qui vont remplir la liste déroulante 'Object'." -#: flatcamTools/ToolCutOut.py:122 +#: flatcamTools/ToolCutOut.py:121 msgid "Tool Parameters" msgstr "Paramètres d'outil" -#: flatcamTools/ToolCutOut.py:239 +#: flatcamTools/ToolCutOut.py:238 msgid "A. Automatic Bridge Gaps" msgstr "A. Lacunes automatiques des ponts" -#: flatcamTools/ToolCutOut.py:241 +#: flatcamTools/ToolCutOut.py:240 msgid "This section handle creation of automatic bridge gaps." msgstr "Cette section gère la création d'espaces de pontage automatiques." -#: flatcamTools/ToolCutOut.py:252 +#: flatcamTools/ToolCutOut.py:251 msgid "" "Number of gaps used for the Automatic cutout.\n" "There can be maximum 8 bridges/gaps.\n" @@ -14501,11 +14527,11 @@ msgstr "" "- 2tb - 2 * Haut + 2 * Bas\n" "- 8 - 2 * gauche + 2 * droite + 2 * en haut + 2 * en bas" -#: flatcamTools/ToolCutOut.py:273 +#: flatcamTools/ToolCutOut.py:272 msgid "Generate Freeform Geometry" msgstr "Générer une géométrie de forme libre" -#: flatcamTools/ToolCutOut.py:275 +#: flatcamTools/ToolCutOut.py:274 msgid "" "Cutout the selected object.\n" "The cutout shape can be of any shape.\n" @@ -14515,11 +14541,11 @@ msgstr "" "La forme de la découpe peut être de n'importe quelle forme.\n" "Utile lorsque le circuit imprimé a une forme non rectangulaire." -#: flatcamTools/ToolCutOut.py:287 +#: flatcamTools/ToolCutOut.py:286 msgid "Generate Rectangular Geometry" msgstr "Générer une géométrie rectangulaire" -#: flatcamTools/ToolCutOut.py:289 +#: flatcamTools/ToolCutOut.py:288 msgid "" "Cutout the selected object.\n" "The resulting cutout shape is\n" @@ -14531,11 +14557,11 @@ msgstr "" "toujours une forme de rectangle et ce sera\n" "la boîte englobante de l'objet." -#: flatcamTools/ToolCutOut.py:308 +#: flatcamTools/ToolCutOut.py:307 msgid "B. Manual Bridge Gaps" msgstr "B. Lacunes manuelles du pont" -#: flatcamTools/ToolCutOut.py:310 +#: flatcamTools/ToolCutOut.py:309 msgid "" "This section handle creation of manual bridge gaps.\n" "This is done by mouse clicking on the perimeter of the\n" @@ -14545,15 +14571,15 @@ msgstr "" "Cela se fait en cliquant avec la souris sur le périmètre de la\n" "Objet de géométrie utilisé comme objet de découpe. " -#: flatcamTools/ToolCutOut.py:329 +#: flatcamTools/ToolCutOut.py:328 msgid "Geometry object used to create the manual cutout." msgstr "Objet de géométrie utilisé pour créer la découpe manuelle." -#: flatcamTools/ToolCutOut.py:338 +#: flatcamTools/ToolCutOut.py:337 msgid "Generate Manual Geometry" msgstr "Générer une géométrie manuelle" -#: flatcamTools/ToolCutOut.py:340 +#: flatcamTools/ToolCutOut.py:339 msgid "" "If the object to be cutout is a Gerber\n" "first create a Geometry that surrounds it,\n" @@ -14566,11 +14592,11 @@ msgstr "" "Sélectionnez le fichier Gerber source dans la liste déroulante d'objets " "supérieure." -#: flatcamTools/ToolCutOut.py:353 +#: flatcamTools/ToolCutOut.py:352 msgid "Manual Add Bridge Gaps" msgstr "Ajout manuel de lacunes dans les ponts" -#: flatcamTools/ToolCutOut.py:355 +#: flatcamTools/ToolCutOut.py:354 msgid "" "Use the left mouse button (LMB) click\n" "to create a bridge gap to separate the PCB from\n" @@ -14584,7 +14610,7 @@ msgstr "" "Le clic LMB doit être fait sur le périmètre de\n" "l'objet Geometry utilisé en tant que géométrie de découpe." -#: flatcamTools/ToolCutOut.py:485 +#: flatcamTools/ToolCutOut.py:484 msgid "" "There is no object selected for Cutout.\n" "Select one and try again." @@ -14592,18 +14618,18 @@ msgstr "" "Aucun objet n'est sélectionné pour la découpe.\n" "Sélectionnez-en un et réessayez." -#: flatcamTools/ToolCutOut.py:491 flatcamTools/ToolCutOut.py:676 -#: flatcamTools/ToolCutOut.py:839 flatcamTools/ToolCutOut.py:921 -#: tclCommands/TclCommandGeoCutout.py:185 +#: flatcamTools/ToolCutOut.py:490 flatcamTools/ToolCutOut.py:675 +#: flatcamTools/ToolCutOut.py:838 flatcamTools/ToolCutOut.py:920 +#: tclCommands/TclCommandGeoCutout.py:184 msgid "Tool Diameter is zero value. Change it to a positive real number." msgstr "" "Le diamètre de l'outil est égal à zéro. Changez-le en un nombre réel positif." -#: flatcamTools/ToolCutOut.py:505 flatcamTools/ToolCutOut.py:691 +#: flatcamTools/ToolCutOut.py:504 flatcamTools/ToolCutOut.py:690 msgid "Number of gaps value is missing. Add it and retry." msgstr "Le nombre de lacunes est manquant. Ajoutez-le et réessayez." -#: flatcamTools/ToolCutOut.py:510 flatcamTools/ToolCutOut.py:695 +#: flatcamTools/ToolCutOut.py:509 flatcamTools/ToolCutOut.py:694 msgid "" "Gaps value can be only one of: 'None', 'lr', 'tb', '2lr', '2tb', 4 or 8. " "Fill in a correct value and retry. " @@ -14612,7 +14638,7 @@ msgstr "" "'Aucune', 'lr', 'tb', '2lr', '2tb', 4 ou 8. Saisissez une valeur correcte, " "puis réessayez. " -#: flatcamTools/ToolCutOut.py:515 flatcamTools/ToolCutOut.py:701 +#: flatcamTools/ToolCutOut.py:514 flatcamTools/ToolCutOut.py:700 msgid "" "Cutout operation cannot be done on a multi-geo Geometry.\n" "Optionally, this Multi-geo Geometry can be converted to Single-geo " @@ -14625,45 +14651,45 @@ msgstr "" "géo,\n" "et après cela effectuer la découpe." -#: flatcamTools/ToolCutOut.py:650 flatcamTools/ToolCutOut.py:828 +#: flatcamTools/ToolCutOut.py:649 flatcamTools/ToolCutOut.py:827 msgid "Any form CutOut operation finished." msgstr "Opération de découpe Forme Libre terminée." -#: flatcamTools/ToolCutOut.py:671 flatcamTools/ToolInvertGerber.py:214 +#: flatcamTools/ToolCutOut.py:670 flatcamTools/ToolInvertGerber.py:214 #: flatcamTools/ToolNCC.py:1598 flatcamTools/ToolPaint.py:1392 -#: flatcamTools/ToolPanelize.py:418 tclCommands/TclCommandBbox.py:72 -#: tclCommands/TclCommandNregions.py:72 +#: flatcamTools/ToolPanelize.py:416 tclCommands/TclCommandBbox.py:71 +#: tclCommands/TclCommandNregions.py:71 msgid "Object not found" msgstr "Objet non trouvé" -#: flatcamTools/ToolCutOut.py:814 +#: flatcamTools/ToolCutOut.py:813 msgid "Rectangular cutout with negative margin is not possible." msgstr "Une découpe rectangulaire avec une marge négative n'est pas possible." -#: flatcamTools/ToolCutOut.py:833 +#: flatcamTools/ToolCutOut.py:832 msgid "" "Click on the selected geometry object perimeter to create a bridge gap ..." msgstr "" "Cliquez sur le périmètre de l'objet géométrique sélectionné pour créer un " "intervalle de pont ..." -#: flatcamTools/ToolCutOut.py:850 flatcamTools/ToolCutOut.py:876 +#: flatcamTools/ToolCutOut.py:849 flatcamTools/ToolCutOut.py:875 msgid "Could not retrieve Geometry object" msgstr "Impossible de récupérer l'objet de géométrie" -#: flatcamTools/ToolCutOut.py:881 +#: flatcamTools/ToolCutOut.py:880 msgid "Geometry object for manual cutout not found" msgstr "Objet de géométrie pour découpe manuelle introuvable" -#: flatcamTools/ToolCutOut.py:891 +#: flatcamTools/ToolCutOut.py:890 msgid "Added manual Bridge Gap." msgstr "Ajout d'un écart de pont manuel." -#: flatcamTools/ToolCutOut.py:903 +#: flatcamTools/ToolCutOut.py:902 msgid "Could not retrieve Gerber object" msgstr "Impossible de récupérer l'objet Gerber" -#: flatcamTools/ToolCutOut.py:908 +#: flatcamTools/ToolCutOut.py:907 msgid "" "There is no Gerber object selected for Cutout.\n" "Select one and try again." @@ -14671,7 +14697,7 @@ msgstr "" "Aucun objet Gerber n'a été sélectionné pour la découpe.\n" "Sélectionnez-en un et réessayez." -#: flatcamTools/ToolCutOut.py:914 +#: flatcamTools/ToolCutOut.py:913 msgid "" "The selected object has to be of Gerber type.\n" "Select a Gerber file and try again." @@ -14679,32 +14705,32 @@ msgstr "" "L'objet sélectionné doit être de type Gerber.\n" "Sélectionnez un fichier Gerber et réessayez." -#: flatcamTools/ToolCutOut.py:949 +#: flatcamTools/ToolCutOut.py:948 msgid "Geometry not supported for cutout" msgstr "Géométrie non prise en charge pour la découpe" -#: flatcamTools/ToolCutOut.py:1007 +#: flatcamTools/ToolCutOut.py:1006 msgid "Making manual bridge gap..." msgstr "Faire un pont manuel ..." -#: flatcamTools/ToolDblSided.py:27 +#: flatcamTools/ToolDblSided.py:26 msgid "2-Sided PCB" msgstr "PCB double face" -#: flatcamTools/ToolDblSided.py:53 +#: flatcamTools/ToolDblSided.py:52 msgid "Mirror Operation" msgstr "Miroir Opération" -#: flatcamTools/ToolDblSided.py:54 +#: flatcamTools/ToolDblSided.py:53 msgid "Objects to be mirrored" msgstr "Objets à mettre en miroir" -#: flatcamTools/ToolDblSided.py:66 +#: flatcamTools/ToolDblSided.py:65 msgid "Gerber to be mirrored" msgstr "Gerber en miroir" -#: flatcamTools/ToolDblSided.py:70 flatcamTools/ToolDblSided.py:98 -#: flatcamTools/ToolDblSided.py:128 +#: flatcamTools/ToolDblSided.py:69 flatcamTools/ToolDblSided.py:97 +#: flatcamTools/ToolDblSided.py:127 msgid "" "Mirrors (flips) the specified object around \n" "the specified axis. Does not create a new \n" @@ -14714,27 +14740,27 @@ msgstr "" "l'axe spécifié. Ne crée pas de nouveau\n" "objet, mais le modifie." -#: flatcamTools/ToolDblSided.py:94 +#: flatcamTools/ToolDblSided.py:93 msgid "Excellon Object to be mirrored." msgstr "Excellon Objet à refléter." -#: flatcamTools/ToolDblSided.py:123 +#: flatcamTools/ToolDblSided.py:122 msgid "Geometry Obj to be mirrored." msgstr "Objet de géométrie à refléter." -#: flatcamTools/ToolDblSided.py:159 +#: flatcamTools/ToolDblSided.py:158 msgid "Mirror Parameters" msgstr "Paramètres de Miroir" -#: flatcamTools/ToolDblSided.py:160 +#: flatcamTools/ToolDblSided.py:159 msgid "Parameters for the mirror operation" msgstr "Paramètres de l'opération Miroir" -#: flatcamTools/ToolDblSided.py:165 +#: flatcamTools/ToolDblSided.py:164 msgid "Mirror Axis" msgstr "Axe de Miroir" -#: flatcamTools/ToolDblSided.py:176 +#: flatcamTools/ToolDblSided.py:175 msgid "" "The coordinates used as reference for the mirror operation.\n" "Can be:\n" @@ -14750,14 +14776,14 @@ msgstr "" "la\n" "cadre de délimitation d'un autre objet sélectionné ci-dessous" -#: flatcamTools/ToolDblSided.py:190 +#: flatcamTools/ToolDblSided.py:189 msgid "Point coordinates" msgstr "Coordonnées du point" -#: flatcamTools/ToolDblSided.py:195 +#: flatcamTools/ToolDblSided.py:194 msgid "" "Add the coordinates in format (x, y) through which the mirroring " -"axis \n" +"axis\n" " selected in 'MIRROR AXIS' pass.\n" "The (x, y) coordinates are captured by pressing SHIFT key\n" "and left mouse button click on canvas or you can enter the coordinates " @@ -14765,12 +14791,12 @@ msgid "" msgstr "" "Ajoutez les coordonnées au format (x, y) à travers lesquelles l'axe " "de symétrie\n" -"  sélectionné dans la passe 'AXE MIROIR'.\n" +"sélectionné dans la passe 'AXE MIROIR'.\n" "Les coordonnées (x, y) sont capturées en appuyant sur la touche MAJ\n" "et cliquez avec le bouton gauche de la souris sur la toile ou vous pouvez " "entrer les coordonnées manuellement." -#: flatcamTools/ToolDblSided.py:219 +#: flatcamTools/ToolDblSided.py:218 msgid "" "It can be of type: Gerber or Excellon or Geometry.\n" "The coordinates of the center of the bounding box are used\n" @@ -14780,11 +14806,11 @@ msgstr "" "Les coordonnées du centre du cadre de sélection sont utilisées\n" "comme référence pour le fonctionnement du miroir." -#: flatcamTools/ToolDblSided.py:253 +#: flatcamTools/ToolDblSided.py:252 msgid "Bounds Values" msgstr "Valeurs limites" -#: flatcamTools/ToolDblSided.py:255 +#: flatcamTools/ToolDblSided.py:254 msgid "" "Select on canvas the object(s)\n" "for which to calculate bounds values." @@ -14792,39 +14818,39 @@ msgstr "" "Sélectionnez sur le canevas le ou les objets\n" "pour lequel calculer les valeurs limites." -#: flatcamTools/ToolDblSided.py:265 +#: flatcamTools/ToolDblSided.py:264 msgid "X min" msgstr "X min" -#: flatcamTools/ToolDblSided.py:267 flatcamTools/ToolDblSided.py:281 +#: flatcamTools/ToolDblSided.py:266 flatcamTools/ToolDblSided.py:280 msgid "Minimum location." msgstr "Emplacement minimum." -#: flatcamTools/ToolDblSided.py:279 +#: flatcamTools/ToolDblSided.py:278 msgid "Y min" msgstr "Y min" -#: flatcamTools/ToolDblSided.py:293 +#: flatcamTools/ToolDblSided.py:292 msgid "X max" msgstr "X max" -#: flatcamTools/ToolDblSided.py:295 flatcamTools/ToolDblSided.py:309 +#: flatcamTools/ToolDblSided.py:294 flatcamTools/ToolDblSided.py:308 msgid "Maximum location." msgstr "Emplacement maximum." -#: flatcamTools/ToolDblSided.py:307 +#: flatcamTools/ToolDblSided.py:306 msgid "Y max" msgstr "Y max" -#: flatcamTools/ToolDblSided.py:318 +#: flatcamTools/ToolDblSided.py:317 msgid "Center point coordinates" msgstr "Coordonnées du point central" -#: flatcamTools/ToolDblSided.py:320 +#: flatcamTools/ToolDblSided.py:319 msgid "Centroid" msgstr "Centroïde" -#: flatcamTools/ToolDblSided.py:322 +#: flatcamTools/ToolDblSided.py:321 msgid "" "The center point location for the rectangular\n" "bounding shape. Centroid. Format is (x, y)." @@ -14832,11 +14858,11 @@ msgstr "" "L'emplacement du point central pour le rectangulaire\n" "forme de délimitation. Centroïde. Le format est (x, y)." -#: flatcamTools/ToolDblSided.py:331 +#: flatcamTools/ToolDblSided.py:330 msgid "Calculate Bounds Values" msgstr "Calculer les valeurs limites" -#: flatcamTools/ToolDblSided.py:333 +#: flatcamTools/ToolDblSided.py:332 msgid "" "Calculate the enveloping rectangular shape coordinates,\n" "for the selection of objects.\n" @@ -14846,11 +14872,11 @@ msgstr "" "pour la sélection d'objets.\n" "La forme de l'enveloppe est parallèle à l'axe X, Y." -#: flatcamTools/ToolDblSided.py:353 +#: flatcamTools/ToolDblSided.py:352 msgid "PCB Alignment" msgstr "Alignement PCB" -#: flatcamTools/ToolDblSided.py:355 flatcamTools/ToolDblSided.py:457 +#: flatcamTools/ToolDblSided.py:354 flatcamTools/ToolDblSided.py:456 msgid "" "Creates an Excellon Object containing the\n" "specified alignment holes and their mirror\n" @@ -14860,11 +14886,11 @@ msgstr "" "trous d'alignement spécifiés et leur miroir\n" "images." -#: flatcamTools/ToolDblSided.py:362 +#: flatcamTools/ToolDblSided.py:361 msgid "Drill Diameter" msgstr "Dia. de perçage" -#: flatcamTools/ToolDblSided.py:391 flatcamTools/ToolDblSided.py:398 +#: flatcamTools/ToolDblSided.py:390 flatcamTools/ToolDblSided.py:397 msgid "" "The reference point used to create the second alignment drill\n" "from the first alignment drill, by doing mirror.\n" @@ -14874,11 +14900,11 @@ msgstr "" "du premier foret d'alignement, en faisant miroir.\n" "Il peut être modifié dans la section Paramètres miroir -> Référence" -#: flatcamTools/ToolDblSided.py:411 +#: flatcamTools/ToolDblSided.py:410 msgid "Alignment Drill Coordinates" msgstr "Coordonnées du foret d'alignement" -#: flatcamTools/ToolDblSided.py:413 +#: flatcamTools/ToolDblSided.py:412 msgid "" "Alignment holes (x1, y1), (x2, y2), ... on one side of the mirror axis. For " "each set of (x, y) coordinates\n" @@ -14896,11 +14922,11 @@ msgstr "" "- un foret en position miroir sur l'axe sélectionné ci-dessus dans 'Aligner " "l'axe'." -#: flatcamTools/ToolDblSided.py:421 +#: flatcamTools/ToolDblSided.py:420 msgid "Drill coordinates" msgstr "Coordonnées de forage" -#: flatcamTools/ToolDblSided.py:428 +#: flatcamTools/ToolDblSided.py:427 msgid "" "Add alignment drill holes coordinates in the format: (x1, y1), (x2, " "y2), ... \n" @@ -14928,23 +14954,23 @@ msgstr "" "- en saisissant manuellement les coordonnées au format: (x1, y1), (x2, " "y2), ..." -#: flatcamTools/ToolDblSided.py:443 +#: flatcamTools/ToolDblSided.py:442 msgid "Delete Last" msgstr "Supprimer le dernier" -#: flatcamTools/ToolDblSided.py:445 +#: flatcamTools/ToolDblSided.py:444 msgid "Delete the last coordinates tuple in the list." msgstr "Supprimez le dernier tuple de coordonnées de la liste." -#: flatcamTools/ToolDblSided.py:455 +#: flatcamTools/ToolDblSided.py:454 msgid "Create Excellon Object" msgstr "Créer un objet Excellon" -#: flatcamTools/ToolDblSided.py:542 +#: flatcamTools/ToolDblSided.py:541 msgid "2-Sided Tool" msgstr "Outil de PCB double face" -#: flatcamTools/ToolDblSided.py:582 +#: flatcamTools/ToolDblSided.py:581 msgid "" "'Point' reference is selected and 'Point' coordinates are missing. Add them " "and retry." @@ -14952,34 +14978,34 @@ msgstr "" "La référence 'Point' est sélectionnée et les coordonnées 'Point' sont " "manquantes. Ajoutez-les et réessayez." -#: flatcamTools/ToolDblSided.py:601 +#: flatcamTools/ToolDblSided.py:600 msgid "There is no Box reference object loaded. Load one and retry." msgstr "" "Il n'y a pas d'objet de référence Box chargé. Chargez-en un et réessayez." -#: flatcamTools/ToolDblSided.py:613 +#: flatcamTools/ToolDblSided.py:612 msgid "No value or wrong format in Drill Dia entry. Add it and retry." msgstr "" "Aucune valeur ou format incorrect dans l'entrée du diamètre du Forage. " "Ajoutez-le et réessayez." -#: flatcamTools/ToolDblSided.py:624 +#: flatcamTools/ToolDblSided.py:623 msgid "There are no Alignment Drill Coordinates to use. Add them and retry." msgstr "" "Il n’ya pas de coordonnées de perceuse d’alignement à utiliser. Ajoutez-les " "et réessayez." -#: flatcamTools/ToolDblSided.py:649 +#: flatcamTools/ToolDblSided.py:648 msgid "Excellon object with alignment drills created..." msgstr "Excellon objet avec des exercices d'alignement créé ..." -#: flatcamTools/ToolDblSided.py:662 flatcamTools/ToolDblSided.py:705 -#: flatcamTools/ToolDblSided.py:749 +#: flatcamTools/ToolDblSided.py:661 flatcamTools/ToolDblSided.py:704 +#: flatcamTools/ToolDblSided.py:748 msgid "Only Gerber, Excellon and Geometry objects can be mirrored." msgstr "" "Seuls les objets Gerber, Excellon et Geometry peuvent être mis en miroir." -#: flatcamTools/ToolDblSided.py:672 flatcamTools/ToolDblSided.py:716 +#: flatcamTools/ToolDblSided.py:671 flatcamTools/ToolDblSided.py:715 msgid "" "There are no Point coordinates in the Point field. Add coords and try " "again ..." @@ -14987,21 +15013,21 @@ msgstr "" "Il n'y a pas de coordonnées de point dans le champ Point. Ajoutez des " "coordonnées et réessayez ..." -#: flatcamTools/ToolDblSided.py:682 flatcamTools/ToolDblSided.py:726 -#: flatcamTools/ToolDblSided.py:763 +#: flatcamTools/ToolDblSided.py:681 flatcamTools/ToolDblSided.py:725 +#: flatcamTools/ToolDblSided.py:762 msgid "There is no Box object loaded ..." msgstr "Il n'y a pas d'objet Box chargé ..." -#: flatcamTools/ToolDblSided.py:692 flatcamTools/ToolDblSided.py:736 -#: flatcamTools/ToolDblSided.py:773 +#: flatcamTools/ToolDblSided.py:691 flatcamTools/ToolDblSided.py:735 +#: flatcamTools/ToolDblSided.py:772 msgid "was mirrored" msgstr "a été mis en miroir" -#: flatcamTools/ToolDblSided.py:701 flatcamTools/ToolPunchGerber.py:533 +#: flatcamTools/ToolDblSided.py:700 flatcamTools/ToolPunchGerber.py:533 msgid "There is no Excellon object loaded ..." msgstr "Il n'y a pas d'objet Excellon chargé ..." -#: flatcamTools/ToolDblSided.py:745 +#: flatcamTools/ToolDblSided.py:744 msgid "There is no Geometry object loaded ..." msgstr "Il n'y a pas d'objet Geometry chargé ..." @@ -15465,7 +15491,7 @@ msgid "Export negative film" msgstr "Exporter un film négatif" #: flatcamTools/ToolFilm.py:956 flatcamTools/ToolFilm.py:1139 -#: flatcamTools/ToolPanelize.py:433 +#: flatcamTools/ToolPanelize.py:431 msgid "No object Box. Using instead" msgstr "Aucune Boîte d'objet. Utiliser à la place" @@ -15621,27 +15647,27 @@ msgstr "" msgid "Invert Tool" msgstr "Outil Inverser" -#: flatcamTools/ToolMove.py:103 +#: flatcamTools/ToolMove.py:102 msgid "MOVE: Click on the Start point ..." msgstr "Déplacer: Cliquez sur le point de départ ..." -#: flatcamTools/ToolMove.py:114 +#: flatcamTools/ToolMove.py:113 msgid "Cancelled. No object(s) to move." msgstr "Annulé. Aucun objet à déplacer." -#: flatcamTools/ToolMove.py:141 +#: flatcamTools/ToolMove.py:140 msgid "MOVE: Click on the Destination point ..." msgstr "Déplacer: Cliquez sur le point de destination ..." -#: flatcamTools/ToolMove.py:164 +#: flatcamTools/ToolMove.py:163 msgid "Moving..." msgstr "En mouvement..." -#: flatcamTools/ToolMove.py:167 +#: flatcamTools/ToolMove.py:166 msgid "No object(s) selected." msgstr "Aucun objet sélectionné." -#: flatcamTools/ToolMove.py:222 +#: flatcamTools/ToolMove.py:221 msgid "Error when mouse left click." msgstr "Erreur lorsque le clic gauche de la souris." @@ -15745,7 +15771,7 @@ msgstr "" "avec le diamètre spécifié ci-dessus." #: flatcamTools/ToolNCC.py:318 flatcamTools/ToolPaint.py:301 -#: flatcamTools/ToolSolderPaste.py:131 +#: flatcamTools/ToolSolderPaste.py:130 msgid "" "Delete a selection of tools in the Tool Table\n" "by first selecting a row(s) in the Tool Table." @@ -15786,7 +15812,7 @@ msgid "Tool from Tool Table was edited." msgstr "L'outil de la table d'outils a été modifié." #: flatcamTools/ToolNCC.py:1514 flatcamTools/ToolPaint.py:1264 -#: flatcamTools/ToolSolderPaste.py:977 +#: flatcamTools/ToolSolderPaste.py:978 msgid "Cancelled. New diameter value is already in the Tool Table." msgstr "" "Annulé. La nouvelle valeur de diamètre est déjà dans la table d'outils." @@ -15928,43 +15954,43 @@ msgstr "" "Essayez d'utiliser le type de mise en tampon = Plein dans Préférences -> " "Général Gerber. Rechargez le fichier Gerber après cette modification." -#: flatcamTools/ToolOptimal.py:80 +#: flatcamTools/ToolOptimal.py:79 msgid "Number of decimals kept for found distances." msgstr "Nombre de décimales conservées pour les distances trouvées." -#: flatcamTools/ToolOptimal.py:88 +#: flatcamTools/ToolOptimal.py:87 msgid "Minimum distance" msgstr "Distance minimale" -#: flatcamTools/ToolOptimal.py:89 +#: flatcamTools/ToolOptimal.py:88 msgid "Display minimum distance between copper features." msgstr "Afficher la distance minimale entre les entités en cuivre." -#: flatcamTools/ToolOptimal.py:93 +#: flatcamTools/ToolOptimal.py:92 msgid "Determined" msgstr "Déterminé" -#: flatcamTools/ToolOptimal.py:107 +#: flatcamTools/ToolOptimal.py:106 msgid "Occurring" msgstr "Se produisant" -#: flatcamTools/ToolOptimal.py:108 +#: flatcamTools/ToolOptimal.py:107 msgid "How many times this minimum is found." msgstr "Combien de fois ce minimum est trouvé." -#: flatcamTools/ToolOptimal.py:114 +#: flatcamTools/ToolOptimal.py:113 msgid "Minimum points coordinates" msgstr "Coordonnées des points minimum" -#: flatcamTools/ToolOptimal.py:115 flatcamTools/ToolOptimal.py:121 +#: flatcamTools/ToolOptimal.py:114 flatcamTools/ToolOptimal.py:120 msgid "Coordinates for points where minimum distance was found." msgstr "Coordonnées des points où une distance minimale a été trouvée." -#: flatcamTools/ToolOptimal.py:134 flatcamTools/ToolOptimal.py:210 +#: flatcamTools/ToolOptimal.py:133 flatcamTools/ToolOptimal.py:209 msgid "Jump to selected position" msgstr "Aller à la position sélectionnée" -#: flatcamTools/ToolOptimal.py:136 flatcamTools/ToolOptimal.py:212 +#: flatcamTools/ToolOptimal.py:135 flatcamTools/ToolOptimal.py:211 msgid "" "Select a position in the Locations text box and then\n" "click this button." @@ -15972,11 +15998,11 @@ msgstr "" "Sélectionnez une position dans la zone de texte Emplacements, puis\n" "cliquez sur ce bouton." -#: flatcamTools/ToolOptimal.py:144 +#: flatcamTools/ToolOptimal.py:143 msgid "Other distances" msgstr "Autres distances" -#: flatcamTools/ToolOptimal.py:145 +#: flatcamTools/ToolOptimal.py:144 msgid "" "Will display other distances in the Gerber file ordered from\n" "the minimum to the maximum, not including the absolute minimum." @@ -15984,13 +16010,13 @@ msgstr "" "Affiche les autres distances dans le fichier Gerber commandé à\n" "le minimum au maximum, sans compter le minimum absolu." -#: flatcamTools/ToolOptimal.py:150 +#: flatcamTools/ToolOptimal.py:149 msgid "Other distances points coordinates" msgstr "Autres points de coordonnées" -#: flatcamTools/ToolOptimal.py:151 flatcamTools/ToolOptimal.py:165 -#: flatcamTools/ToolOptimal.py:172 flatcamTools/ToolOptimal.py:189 -#: flatcamTools/ToolOptimal.py:196 +#: flatcamTools/ToolOptimal.py:150 flatcamTools/ToolOptimal.py:164 +#: flatcamTools/ToolOptimal.py:171 flatcamTools/ToolOptimal.py:188 +#: flatcamTools/ToolOptimal.py:195 msgid "" "Other distances and the coordinates for points\n" "where the distance was found." @@ -15998,19 +16024,19 @@ msgstr "" "Autres distances et coordonnées des points\n" "où la distance a été trouvée." -#: flatcamTools/ToolOptimal.py:164 +#: flatcamTools/ToolOptimal.py:163 msgid "Gerber distances" msgstr "Distances de Gerber" -#: flatcamTools/ToolOptimal.py:188 +#: flatcamTools/ToolOptimal.py:187 msgid "Points coordinates" msgstr "Coords des points" -#: flatcamTools/ToolOptimal.py:220 +#: flatcamTools/ToolOptimal.py:219 msgid "Find Minimum" msgstr "Trouver le minimum" -#: flatcamTools/ToolOptimal.py:222 +#: flatcamTools/ToolOptimal.py:221 msgid "" "Calculate the minimum distance between copper features,\n" "this will allow the determination of the right tool to\n" @@ -16020,11 +16046,11 @@ msgstr "" "cela permettra de déterminer le bon outil pour\n" "utiliser pour l'isolation ou le nettoyage du cuivre." -#: flatcamTools/ToolOptimal.py:347 +#: flatcamTools/ToolOptimal.py:346 msgid "Only Gerber objects can be evaluated." msgstr "Seuls les objets de Gerber peuvent être évalués." -#: flatcamTools/ToolOptimal.py:353 +#: flatcamTools/ToolOptimal.py:352 msgid "" "Optimal Tool. Started to search for the minimum distance between copper " "features." @@ -16032,15 +16058,15 @@ msgstr "" "Outil Optimal. Commencé à rechercher la distance minimale entre les entités " "en cuivre." -#: flatcamTools/ToolOptimal.py:363 +#: flatcamTools/ToolOptimal.py:362 msgid "Optimal Tool. Parsing geometry for aperture" msgstr "Outil Optimal. Analyser la géométrie pour l'ouverture" -#: flatcamTools/ToolOptimal.py:374 +#: flatcamTools/ToolOptimal.py:373 msgid "Optimal Tool. Creating a buffer for the object geometry." msgstr "Outil Optimal. Création d'un tampon pour la géométrie de l'objet." -#: flatcamTools/ToolOptimal.py:384 +#: flatcamTools/ToolOptimal.py:383 msgid "" "The Gerber object has one Polygon as geometry.\n" "There are no distances between geometry elements to be found." @@ -16048,18 +16074,18 @@ msgstr "" "L'objet Gerber a un polygone comme géométrie.\n" "Il n'y a pas de distance entre les éléments géométriques à trouver." -#: flatcamTools/ToolOptimal.py:389 +#: flatcamTools/ToolOptimal.py:388 msgid "" "Optimal Tool. Finding the distances between each two elements. Iterations" msgstr "" "Outil Optimal. Trouver les distances entre chacun des deux éléments. " "Itérations" -#: flatcamTools/ToolOptimal.py:424 +#: flatcamTools/ToolOptimal.py:423 msgid "Optimal Tool. Finding the minimum distance." msgstr "Outil Optimal. Trouver la distance minimale." -#: flatcamTools/ToolOptimal.py:440 +#: flatcamTools/ToolOptimal.py:439 msgid "Optimal Tool. Finished successfully." msgstr "Outil Optimal. Terminé avec succès." @@ -16350,11 +16376,11 @@ msgstr "Échec de la peinture de la Zone." msgid "Paint Poly Area Done." msgstr "La peinture 'Poly Zone' est terminée." -#: flatcamTools/ToolPanelize.py:34 +#: flatcamTools/ToolPanelize.py:32 msgid "Panelize PCB" msgstr "Panéliser PCB" -#: flatcamTools/ToolPanelize.py:56 +#: flatcamTools/ToolPanelize.py:54 msgid "" "Specify the type of object to be panelized\n" "It can be of type: Gerber, Excellon or Geometry.\n" @@ -16366,7 +16392,7 @@ msgstr "" "La sélection ici décide du type d’objets qui seront\n" "dans la liste déroulante d'objets." -#: flatcamTools/ToolPanelize.py:89 +#: flatcamTools/ToolPanelize.py:87 msgid "" "Object to be panelized. This means that it will\n" "be duplicated in an array of rows and columns." @@ -16374,11 +16400,11 @@ msgstr "" "Objet à paramétrer. Cela signifie qu'il sera\n" "être dupliqué dans un tableau de lignes et de colonnes." -#: flatcamTools/ToolPanelize.py:102 +#: flatcamTools/ToolPanelize.py:100 msgid "Penelization Reference" msgstr "Référence de pénalisation" -#: flatcamTools/ToolPanelize.py:104 +#: flatcamTools/ToolPanelize.py:102 msgid "" "Choose the reference for panelization:\n" "- Object = the bounding box of a different object\n" @@ -16398,11 +16424,11 @@ msgstr "" "à cet objet de référence maintenant donc le panneau\n" "objets synchronisés." -#: flatcamTools/ToolPanelize.py:125 +#: flatcamTools/ToolPanelize.py:123 msgid "Box Type" msgstr "Type de Box" -#: flatcamTools/ToolPanelize.py:127 +#: flatcamTools/ToolPanelize.py:125 msgid "" "Specify the type of object to be used as an container for\n" "panelization. It can be: Gerber or Geometry type.\n" @@ -16414,7 +16440,7 @@ msgstr "" "La sélection ici décide du type d’objets qui seront\n" "dans la liste déroulante Objet de Box." -#: flatcamTools/ToolPanelize.py:141 +#: flatcamTools/ToolPanelize.py:139 msgid "" "The actual object that is used a container for the\n" " selected object that is to be panelized." @@ -16422,11 +16448,11 @@ msgstr "" "L'objet réel qui utilise un conteneur pour la\n" "objet sélectionné à panéliser." -#: flatcamTools/ToolPanelize.py:147 +#: flatcamTools/ToolPanelize.py:145 msgid "Panel Data" msgstr "Données du Panneau" -#: flatcamTools/ToolPanelize.py:149 +#: flatcamTools/ToolPanelize.py:147 msgid "" "This informations will shape the resulting panel.\n" "The number of rows and columns will set how many\n" @@ -16442,7 +16468,7 @@ msgstr "" "Les espacements détermineront la distance entre deux\n" "éléments du tableau de panneaux." -#: flatcamTools/ToolPanelize.py:208 +#: flatcamTools/ToolPanelize.py:206 msgid "" "Choose the type of object for the panel object:\n" "- Geometry\n" @@ -16452,15 +16478,15 @@ msgstr "" "- Géométrie\n" "- Gerber" -#: flatcamTools/ToolPanelize.py:216 +#: flatcamTools/ToolPanelize.py:214 msgid "Constrain panel within" msgstr "Contraindre le panneau dans" -#: flatcamTools/ToolPanelize.py:252 +#: flatcamTools/ToolPanelize.py:250 msgid "Panelize Object" msgstr "Objet Panelize" -#: flatcamTools/ToolPanelize.py:254 flatcamTools/ToolRulesCheck.py:501 +#: flatcamTools/ToolPanelize.py:252 flatcamTools/ToolRulesCheck.py:501 msgid "" "Panelize the specified object around the specified box.\n" "In other words it creates multiple copies of the source object,\n" @@ -16470,33 +16496,33 @@ msgstr "" "En d'autres termes, il crée plusieurs copies de l'objet source,\n" "disposés dans un tableau 2D de lignes et de colonnes." -#: flatcamTools/ToolPanelize.py:322 +#: flatcamTools/ToolPanelize.py:320 msgid "Panel. Tool" msgstr "Panneau. Outil" -#: flatcamTools/ToolPanelize.py:460 +#: flatcamTools/ToolPanelize.py:458 msgid "Columns or Rows are zero value. Change them to a positive integer." msgstr "" "Les colonnes ou les lignes ont une valeur zéro. Changez-les en un entier " "positif." -#: flatcamTools/ToolPanelize.py:497 +#: flatcamTools/ToolPanelize.py:495 msgid "Generating panel ... " msgstr "Panneau de génération ... " -#: flatcamTools/ToolPanelize.py:777 +#: flatcamTools/ToolPanelize.py:775 msgid "Generating panel ... Adding the Gerber code." msgstr "Panneau de génération ... Ajout du code Gerber." -#: flatcamTools/ToolPanelize.py:788 +#: flatcamTools/ToolPanelize.py:786 msgid "Generating panel... Spawning copies" msgstr "Génération de panneau ... Création de copies" -#: flatcamTools/ToolPanelize.py:795 +#: flatcamTools/ToolPanelize.py:793 msgid "Panel done..." msgstr "Panel terminé ..." -#: flatcamTools/ToolPanelize.py:798 +#: flatcamTools/ToolPanelize.py:796 #, python-brace-format msgid "" "{text} Too big for the constrain area. Final panel has {col} columns and " @@ -16505,7 +16531,7 @@ msgstr "" "{text} Trop grand pour la zone contrainte. Le panneau final contient {col} " "colonnes et {row}" -#: flatcamTools/ToolPanelize.py:807 +#: flatcamTools/ToolPanelize.py:805 msgid "Panel created successfully." msgstr "Panneau créé avec succès." @@ -16820,17 +16846,9 @@ msgstr "Outil de Poinçonnage" msgid "The value of the fixed diameter is 0.0. Aborting." msgstr "La valeur du diamètre fixe est de 0,0. Abandon." -#: flatcamTools/ToolPunchGerber.py:607 +#: flatcamTools/ToolPunchGerber.py:607 flatcamTools/ToolPunchGerber.py:619 msgid "" -" Could not generate punched hole Gerber because the punch hole sizeis bigger " -"than some of the apertures in the Gerber object." -msgstr "" -" Impossible de générer le trou perforé Gerber car la taille du trou " -"poinçonné est plus grande que certaines des ouvertures de l'objet Gerber." - -#: flatcamTools/ToolPunchGerber.py:619 -msgid "" -"Could not generate punched hole Gerber because the punch hole sizeis bigger " +"Could not generate punched hole Gerber because the punch hole size is bigger " "than some of the apertures in the Gerber object." msgstr "" "Impossible de générer le trou perforé Gerber car la taille du trou poinçonné " @@ -17147,19 +17165,19 @@ msgstr "PASSÉ" msgid "Violations: There are no violations for the current rule." msgstr "Violations: Il n'y a pas de violations pour la règle actuelle." -#: flatcamTools/ToolShell.py:72 flatcamTools/ToolShell.py:74 +#: flatcamTools/ToolShell.py:74 flatcamTools/ToolShell.py:76 msgid "...processing..." msgstr "...En traitement..." -#: flatcamTools/ToolSolderPaste.py:38 +#: flatcamTools/ToolSolderPaste.py:37 msgid "Solder Paste Tool" msgstr "Outil de Pâte à souder" -#: flatcamTools/ToolSolderPaste.py:70 +#: flatcamTools/ToolSolderPaste.py:69 msgid "Gerber Solder paste object. " msgstr "Objet de pâte à souder Gerber. " -#: flatcamTools/ToolSolderPaste.py:77 +#: flatcamTools/ToolSolderPaste.py:76 msgid "" "Tools pool from which the algorithm\n" "will pick the ones used for dispensing solder paste." @@ -17167,7 +17185,7 @@ msgstr "" "Pool d'outils à partir duquel l'algorithme\n" "choisira ceux utilisés pour la distribution de la pâte à souder." -#: flatcamTools/ToolSolderPaste.py:92 +#: flatcamTools/ToolSolderPaste.py:91 msgid "" "This is the Tool Number.\n" "The solder dispensing will start with the tool with the biggest \n" @@ -17182,7 +17200,7 @@ msgstr "" "  avec la pâte à souder, l'application émettra une boîte de message " "d'avertissement." -#: flatcamTools/ToolSolderPaste.py:99 +#: flatcamTools/ToolSolderPaste.py:98 msgid "" "Nozzle tool Diameter. It's value (in current FlatCAM units)\n" "is the width of the solder paste dispensed." @@ -17190,11 +17208,11 @@ msgstr "" "Diamètre de l'outil de buse. C'est sa valeur (en unités FlatCAM actuelles)\n" "est la largeur de la pâte à braser distribuée." -#: flatcamTools/ToolSolderPaste.py:106 +#: flatcamTools/ToolSolderPaste.py:105 msgid "New Nozzle Tool" msgstr "Nouvel Outil de Buse" -#: flatcamTools/ToolSolderPaste.py:125 +#: flatcamTools/ToolSolderPaste.py:124 msgid "" "Add a new nozzle tool to the Tool Table\n" "with the diameter specified above." @@ -17202,15 +17220,15 @@ msgstr "" "Ajouter un nouvel outil de buse à la table d'outils\n" "avec le diamètre spécifié ci-dessus." -#: flatcamTools/ToolSolderPaste.py:137 +#: flatcamTools/ToolSolderPaste.py:136 msgid "Generate solder paste dispensing geometry." msgstr "Générer la géométrie de distribution de la pâte à souder." -#: flatcamTools/ToolSolderPaste.py:156 +#: flatcamTools/ToolSolderPaste.py:155 msgid "STEP 1" msgstr "ÉTAPE 1" -#: flatcamTools/ToolSolderPaste.py:158 +#: flatcamTools/ToolSolderPaste.py:157 msgid "" "First step is to select a number of nozzle tools for usage\n" "and then optionally modify the GCode parameters bellow." @@ -17219,7 +17237,7 @@ msgstr "" "à utiliser.\n" "et éventuellement modifier les paramètres GCode ci-dessous." -#: flatcamTools/ToolSolderPaste.py:161 +#: flatcamTools/ToolSolderPaste.py:160 msgid "" "Select tools.\n" "Modify parameters." @@ -17227,7 +17245,7 @@ msgstr "" "Sélectionnez des outils.\n" "Modifier les paramètres." -#: flatcamTools/ToolSolderPaste.py:281 +#: flatcamTools/ToolSolderPaste.py:280 msgid "" "Feedrate (speed) while moving up vertically\n" " to Dispense position (on Z plane)." @@ -17235,7 +17253,7 @@ msgstr "" "Avance (vitesse) en montant verticalement\n" "position de distribution (sur le plan Z)." -#: flatcamTools/ToolSolderPaste.py:351 +#: flatcamTools/ToolSolderPaste.py:350 msgid "" "Generate GCode for Solder Paste dispensing\n" "on PCB pads." @@ -17243,11 +17261,11 @@ msgstr "" "Générer GCode pour la distribution de pâte à souder\n" "sur les PCB pads." -#: flatcamTools/ToolSolderPaste.py:372 +#: flatcamTools/ToolSolderPaste.py:371 msgid "STEP 2" msgstr "ÉTAPE 2" -#: flatcamTools/ToolSolderPaste.py:374 +#: flatcamTools/ToolSolderPaste.py:373 msgid "" "Second step is to create a solder paste dispensing\n" "geometry out of an Solder Paste Mask Gerber file." @@ -17255,11 +17273,11 @@ msgstr "" "La deuxième étape consiste à créer une distribution de pâte à braser\n" "géométrie d'un fichier Gerber de masque de collage de soudure." -#: flatcamTools/ToolSolderPaste.py:391 +#: flatcamTools/ToolSolderPaste.py:390 msgid "Geo Result" msgstr "Résultat de la Géo" -#: flatcamTools/ToolSolderPaste.py:393 +#: flatcamTools/ToolSolderPaste.py:392 msgid "" "Geometry Solder Paste object.\n" "The name of the object has to end in:\n" @@ -17269,11 +17287,11 @@ msgstr "" "Le nom de l'objet doit se terminer par:\n" "'_solderpaste' comme protection." -#: flatcamTools/ToolSolderPaste.py:402 +#: flatcamTools/ToolSolderPaste.py:401 msgid "STEP 3" msgstr "ÉTAPE 3" -#: flatcamTools/ToolSolderPaste.py:404 +#: flatcamTools/ToolSolderPaste.py:403 msgid "" "Third step is to select a solder paste dispensing geometry,\n" "and then generate a CNCJob object.\n" @@ -17290,11 +17308,11 @@ msgstr "" "vous devez d’abord générer une géométrie avec ces nouveaux paramètres,\n" "et seulement après cela, vous pouvez générer un CNCJob mis à jour." -#: flatcamTools/ToolSolderPaste.py:425 +#: flatcamTools/ToolSolderPaste.py:424 msgid "CNC Result" msgstr "Résultat CNC" -#: flatcamTools/ToolSolderPaste.py:427 +#: flatcamTools/ToolSolderPaste.py:426 msgid "" "CNCJob Solder paste object.\n" "In order to enable the GCode save section,\n" @@ -17306,11 +17324,11 @@ msgstr "" "le nom de l'objet doit se terminer par:\n" "'_solderpaste' comme protection." -#: flatcamTools/ToolSolderPaste.py:437 +#: flatcamTools/ToolSolderPaste.py:436 msgid "View GCode" msgstr "Voir le GCode" -#: flatcamTools/ToolSolderPaste.py:439 +#: flatcamTools/ToolSolderPaste.py:438 msgid "" "View the generated GCode for Solder Paste dispensing\n" "on PCB pads." @@ -17318,11 +17336,11 @@ msgstr "" "Afficher le GCode généré pour la distribution de pâte à souder\n" "sur les plaquettes de circuits imprimés." -#: flatcamTools/ToolSolderPaste.py:449 +#: flatcamTools/ToolSolderPaste.py:448 msgid "Save GCode" msgstr "Enregistrer le GCode" -#: flatcamTools/ToolSolderPaste.py:451 +#: flatcamTools/ToolSolderPaste.py:450 msgid "" "Save the generated GCode for Solder Paste dispensing\n" "on PCB pads, to a file." @@ -17330,11 +17348,11 @@ msgstr "" "Sauvegarder le GCode généré pour la distribution de pâte à souder\n" "sur des plaquettes de circuits imprimés, dans un fichier." -#: flatcamTools/ToolSolderPaste.py:461 +#: flatcamTools/ToolSolderPaste.py:460 msgid "STEP 4" msgstr "ÉTAPE 4" -#: flatcamTools/ToolSolderPaste.py:463 +#: flatcamTools/ToolSolderPaste.py:462 msgid "" "Fourth step (and last) is to select a CNCJob made from \n" "a solder paste dispensing geometry, and then view/save it's GCode." @@ -17352,79 +17370,83 @@ msgstr "Nouvel Outil de Buse ajouté à la table d'outils." msgid "Nozzle tool from Tool Table was edited." msgstr "L'outil de buse de la table d'outils a été modifié." -#: flatcamTools/ToolSolderPaste.py:1023 +#: flatcamTools/ToolSolderPaste.py:1024 msgid "Delete failed. Select a Nozzle tool to delete." msgstr "La suppression a échoué. Sélectionnez un outil de buse à supprimer." -#: flatcamTools/ToolSolderPaste.py:1029 +#: flatcamTools/ToolSolderPaste.py:1030 msgid "Nozzle tool(s) deleted from Tool Table." msgstr "Outil (s) de buse supprimé (s) de la table d'outils." -#: flatcamTools/ToolSolderPaste.py:1085 +#: flatcamTools/ToolSolderPaste.py:1086 msgid "No SolderPaste mask Gerber object loaded." msgstr "Aucun objet Gerber de masque de pâte à souder chargé." -#: flatcamTools/ToolSolderPaste.py:1103 +#: flatcamTools/ToolSolderPaste.py:1104 msgid "Creating Solder Paste dispensing geometry." msgstr "Création de la géométrie de distribution de pâte à souder." -#: flatcamTools/ToolSolderPaste.py:1116 +#: flatcamTools/ToolSolderPaste.py:1117 msgid "No Nozzle tools in the tool table." msgstr "Aucun outil de buse dans la table à outils." -#: flatcamTools/ToolSolderPaste.py:1242 +#: flatcamTools/ToolSolderPaste.py:1243 msgid "Cancelled. Empty file, it has no geometry..." msgstr "Annulé. Fichier vide, il n'a pas de géométrie ..." -#: flatcamTools/ToolSolderPaste.py:1245 +#: flatcamTools/ToolSolderPaste.py:1246 msgid "Solder Paste geometry generated successfully" msgstr "Géométrie de pâte à souder générée avec succès" -#: flatcamTools/ToolSolderPaste.py:1252 +#: flatcamTools/ToolSolderPaste.py:1253 msgid "Some or all pads have no solder due of inadequate nozzle diameters..." msgstr "" "Certains ou tous les tampons n'ont pas de soudure en raison de diamètres de " "buse inadéquats ..." -#: flatcamTools/ToolSolderPaste.py:1266 +#: flatcamTools/ToolSolderPaste.py:1267 msgid "Generating Solder Paste dispensing geometry..." msgstr "Génération de géométrie de distribution de pâte à souder ..." -#: flatcamTools/ToolSolderPaste.py:1286 +#: flatcamTools/ToolSolderPaste.py:1287 msgid "There is no Geometry object available." msgstr "Il n'y a pas d'objet Géométrie disponible." -#: flatcamTools/ToolSolderPaste.py:1291 +#: flatcamTools/ToolSolderPaste.py:1292 msgid "This Geometry can't be processed. NOT a solder_paste_tool geometry." msgstr "" "Cette géométrie ne peut pas être traitée. PAS une géométrie " "solder_paste_tool." -#: flatcamTools/ToolSolderPaste.py:1392 +#: flatcamTools/ToolSolderPaste.py:1328 +msgid "An internal error has ocurred. See shell.\n" +msgstr "Une erreur interne s'est produite. Voir shell.\n" + +#: flatcamTools/ToolSolderPaste.py:1393 msgid "ToolSolderPaste CNCjob created" msgstr "Outil de Pâte à Souder CNCjob créé" -#: flatcamTools/ToolSolderPaste.py:1411 +#: flatcamTools/ToolSolderPaste.py:1412 msgid "SP GCode Editor" msgstr "Éditeur SP GCode" -#: flatcamTools/ToolSolderPaste.py:1423 flatcamTools/ToolSolderPaste.py:1428 -#: flatcamTools/ToolSolderPaste.py:1483 +#: flatcamTools/ToolSolderPaste.py:1424 flatcamTools/ToolSolderPaste.py:1429 +#: flatcamTools/ToolSolderPaste.py:1484 msgid "" "This CNCJob object can't be processed. NOT a solder_paste_tool CNCJob object." msgstr "" "Cet objet CNCJob ne peut pas être traité. PAS un objet CNCJob " "solder_paste_tool." -#: flatcamTools/ToolSolderPaste.py:1453 +#: flatcamTools/ToolSolderPaste.py:1454 msgid "No Gcode in the object" msgstr "Pas de Gcode dans l'objet" -#: flatcamTools/ToolSolderPaste.py:1493 +#: flatcamTools/ToolSolderPaste.py:1494 msgid "Export GCode ..." msgstr "Exporter le GCode ..." -#: flatcamTools/ToolSolderPaste.py:1541 +#: flatcamTools/ToolSolderPaste.py:1542 msgid "Solder paste dispenser GCode file saved to" msgstr "Fichier GCode du distributeur de pâte à souder enregistré dans" @@ -17562,11 +17584,11 @@ msgstr "Analyse de solid_geometry ..." msgid "Parsing solid_geometry for tool" msgstr "Analyse de solid_geometry pour l'outil" -#: flatcamTools/ToolTransform.py:24 +#: flatcamTools/ToolTransform.py:23 msgid "Object Transform" msgstr "Transformation d'objet" -#: flatcamTools/ToolTransform.py:79 +#: flatcamTools/ToolTransform.py:78 msgid "" "Rotate the selected object(s).\n" "The point of reference is the middle of\n" @@ -17576,7 +17598,7 @@ msgstr "" "Le point de référence est le milieu de\n" "le cadre de sélection pour tous les objets sélectionnés." -#: flatcamTools/ToolTransform.py:100 flatcamTools/ToolTransform.py:121 +#: flatcamTools/ToolTransform.py:99 flatcamTools/ToolTransform.py:120 msgid "" "Angle for Skew action, in degrees.\n" "Float number between -360 and 360." @@ -17584,7 +17606,7 @@ msgstr "" "Angle pour l'action asymétrique, en degrés.\n" "Nombre flottant entre -360 et 360." -#: flatcamTools/ToolTransform.py:110 flatcamTools/ToolTransform.py:131 +#: flatcamTools/ToolTransform.py:109 flatcamTools/ToolTransform.py:130 msgid "" "Skew/shear the selected object(s).\n" "The point of reference is the middle of\n" @@ -17594,7 +17616,7 @@ msgstr "" "Le point de référence est le milieu de\n" "le cadre de sélection pour tous les objets sélectionnés." -#: flatcamTools/ToolTransform.py:160 flatcamTools/ToolTransform.py:180 +#: flatcamTools/ToolTransform.py:159 flatcamTools/ToolTransform.py:179 msgid "" "Scale the selected object(s).\n" "The point of reference depends on \n" @@ -17604,7 +17626,7 @@ msgstr "" "Le point de référence dépend de\n" "l'état de la case à cocher référence d'échelle." -#: flatcamTools/ToolTransform.py:229 flatcamTools/ToolTransform.py:249 +#: flatcamTools/ToolTransform.py:228 flatcamTools/ToolTransform.py:248 msgid "" "Offset the selected object(s).\n" "The point of reference is the middle of\n" @@ -17614,15 +17636,15 @@ msgstr "" "Le point de référence est le milieu de\n" "le cadre de sélection pour tous les objets sélectionnés.\n" -#: flatcamTools/ToolTransform.py:269 flatcamTools/ToolTransform.py:274 +#: flatcamTools/ToolTransform.py:268 flatcamTools/ToolTransform.py:273 msgid "Flip the selected object(s) over the X axis." msgstr "Retournez le ou les objets sélectionnés sur l’axe X." -#: flatcamTools/ToolTransform.py:298 +#: flatcamTools/ToolTransform.py:297 msgid "Ref. Point" msgstr "Miroir Réf. Point" -#: flatcamTools/ToolTransform.py:349 +#: flatcamTools/ToolTransform.py:348 msgid "" "Create the buffer effect on each geometry,\n" "element from the selected object, using the distance." @@ -17630,7 +17652,7 @@ msgstr "" "Créez l'effet tampon sur chaque géométrie,\n" "élément de l'objet sélectionné, en utilisant la distance." -#: flatcamTools/ToolTransform.py:375 +#: flatcamTools/ToolTransform.py:374 msgid "" "Create the buffer effect on each geometry,\n" "element from the selected object, using the factor." @@ -17638,134 +17660,134 @@ msgstr "" "Créez l'effet tampon sur chaque géométrie,\n" "élément de l'objet sélectionné, en utilisant le facteur." -#: flatcamTools/ToolTransform.py:480 +#: flatcamTools/ToolTransform.py:479 msgid "Buffer D" msgstr "Tampon D" -#: flatcamTools/ToolTransform.py:481 +#: flatcamTools/ToolTransform.py:480 msgid "Buffer F" msgstr "Tampon F" -#: flatcamTools/ToolTransform.py:558 +#: flatcamTools/ToolTransform.py:557 msgid "Rotate transformation can not be done for a value of 0." msgstr "" "La transformation par rotation ne peut pas être effectuée pour une valeur de " "0." -#: flatcamTools/ToolTransform.py:597 flatcamTools/ToolTransform.py:620 +#: flatcamTools/ToolTransform.py:596 flatcamTools/ToolTransform.py:619 msgid "Scale transformation can not be done for a factor of 0 or 1." msgstr "" "La transformation d'échelle ne peut pas être effectuée pour un facteur de 0 " "ou 1." -#: flatcamTools/ToolTransform.py:635 flatcamTools/ToolTransform.py:645 +#: flatcamTools/ToolTransform.py:634 flatcamTools/ToolTransform.py:644 msgid "Offset transformation can not be done for a value of 0." msgstr "" "La transformation de décalage ne peut pas être effectuée pour une valeur de " "0." -#: flatcamTools/ToolTransform.py:677 +#: flatcamTools/ToolTransform.py:676 msgid "No object selected. Please Select an object to rotate!" msgstr "" "Aucun objet sélectionné. Veuillez sélectionner un objet à faire pivoter!" -#: flatcamTools/ToolTransform.py:703 +#: flatcamTools/ToolTransform.py:702 msgid "CNCJob objects can't be rotated." msgstr "Les objets CNCJob ne peuvent pas être pivotés." -#: flatcamTools/ToolTransform.py:711 +#: flatcamTools/ToolTransform.py:710 msgid "Rotate done" msgstr "Faire pivoter" -#: flatcamTools/ToolTransform.py:714 flatcamTools/ToolTransform.py:784 -#: flatcamTools/ToolTransform.py:834 flatcamTools/ToolTransform.py:890 -#: flatcamTools/ToolTransform.py:922 flatcamTools/ToolTransform.py:958 +#: flatcamTools/ToolTransform.py:713 flatcamTools/ToolTransform.py:783 +#: flatcamTools/ToolTransform.py:833 flatcamTools/ToolTransform.py:887 +#: flatcamTools/ToolTransform.py:917 flatcamTools/ToolTransform.py:953 msgid "Due of" msgstr "À cause de" -#: flatcamTools/ToolTransform.py:714 flatcamTools/ToolTransform.py:784 -#: flatcamTools/ToolTransform.py:834 flatcamTools/ToolTransform.py:890 -#: flatcamTools/ToolTransform.py:922 flatcamTools/ToolTransform.py:958 +#: flatcamTools/ToolTransform.py:713 flatcamTools/ToolTransform.py:783 +#: flatcamTools/ToolTransform.py:833 flatcamTools/ToolTransform.py:887 +#: flatcamTools/ToolTransform.py:917 flatcamTools/ToolTransform.py:953 msgid "action was not executed." msgstr "l'action n'a pas été exécutée." -#: flatcamTools/ToolTransform.py:726 +#: flatcamTools/ToolTransform.py:725 msgid "No object selected. Please Select an object to flip" msgstr "Aucun objet sélectionné. Veuillez sélectionner un objet à refléter" -#: flatcamTools/ToolTransform.py:759 +#: flatcamTools/ToolTransform.py:758 msgid "CNCJob objects can't be mirrored/flipped." msgstr "Les objets CNCJob ne peuvent pas être inversés / inversés." -#: flatcamTools/ToolTransform.py:794 +#: flatcamTools/ToolTransform.py:793 msgid "Skew transformation can not be done for 0, 90 and 180 degrees." msgstr "" "La transformation asymétrique ne peut pas être effectuée pour 0, 90 et 180 " "degrés." -#: flatcamTools/ToolTransform.py:799 +#: flatcamTools/ToolTransform.py:798 msgid "No object selected. Please Select an object to shear/skew!" msgstr "" "Aucun objet sélectionné. Veuillez sélectionner un objet à cisailler / " "incliner!" -#: flatcamTools/ToolTransform.py:819 +#: flatcamTools/ToolTransform.py:818 msgid "CNCJob objects can't be skewed." msgstr "Les objets CNCJob ne peuvent pas être biaisés." -#: flatcamTools/ToolTransform.py:831 +#: flatcamTools/ToolTransform.py:830 msgid "Skew on the" msgstr "Biais sur le" -#: flatcamTools/ToolTransform.py:831 flatcamTools/ToolTransform.py:887 -#: flatcamTools/ToolTransform.py:919 +#: flatcamTools/ToolTransform.py:830 flatcamTools/ToolTransform.py:884 +#: flatcamTools/ToolTransform.py:914 msgid "axis done" msgstr "axe fait" -#: flatcamTools/ToolTransform.py:846 +#: flatcamTools/ToolTransform.py:844 msgid "No object selected. Please Select an object to scale!" msgstr "" "Aucun objet sélectionné. Veuillez sélectionner un objet à mettre à l'échelle!" -#: flatcamTools/ToolTransform.py:877 +#: flatcamTools/ToolTransform.py:875 msgid "CNCJob objects can't be scaled." msgstr "Les objets CNCJob ne peuvent pas être mis à l'échelle." -#: flatcamTools/ToolTransform.py:887 +#: flatcamTools/ToolTransform.py:884 msgid "Scale on the" msgstr "Échelle sur le" -#: flatcamTools/ToolTransform.py:898 +#: flatcamTools/ToolTransform.py:894 msgid "No object selected. Please Select an object to offset!" msgstr "Aucun objet sélectionné. Veuillez sélectionner un objet à compenser!" -#: flatcamTools/ToolTransform.py:905 +#: flatcamTools/ToolTransform.py:901 msgid "CNCJob objects can't be offset." msgstr "CNCJob objects can't be offset." -#: flatcamTools/ToolTransform.py:919 +#: flatcamTools/ToolTransform.py:914 msgid "Offset on the" msgstr "Compenser sur le" -#: flatcamTools/ToolTransform.py:929 +#: flatcamTools/ToolTransform.py:924 msgid "No object selected. Please Select an object to buffer!" msgstr "Aucun objet sélectionné. Veuillez sélectionner un objet à tamponner!" -#: flatcamTools/ToolTransform.py:932 +#: flatcamTools/ToolTransform.py:927 msgid "Applying Buffer" msgstr "Application du tampon" -#: flatcamTools/ToolTransform.py:936 +#: flatcamTools/ToolTransform.py:931 msgid "CNCJob objects can't be buffered." msgstr "Les objets CNCJob ne peuvent pas être mis en mémoire tampon." -#: flatcamTools/ToolTransform.py:953 +#: flatcamTools/ToolTransform.py:948 msgid "Buffer done" msgstr "Tampon terminé" -#: tclCommands/TclCommandBbox.py:76 tclCommands/TclCommandNregions.py:75 -msgid "Expected FlatCAMGerber or FlatCAMGeometry, got" -msgstr "FlatCAMGerber ou FlatCAMGeometry attendu, obtenu" +#: tclCommands/TclCommandBbox.py:75 tclCommands/TclCommandNregions.py:74 +msgid "Expected GerberObject or GeometryObject, got" +msgstr "GerberObject ou GeometryObject attendu, obtenu" #: tclCommands/TclCommandBounds.py:67 tclCommands/TclCommandBounds.py:71 msgid "Expected a list of objects names separated by comma. Got" @@ -17784,37 +17806,37 @@ msgstr "Impossible de récupérer l'objet boîte" msgid "Expected either -box or -all." msgstr "Attend soit -box ou -all." -#: tclCommands/TclCommandGeoCutout.py:148 +#: tclCommands/TclCommandGeoCutout.py:147 msgid "" "The name of the object for which cutout is done is missing. Add it and retry." msgstr "" "Le nom de l'objet pour lequel la découpe est effectuée est manquant. Ajoutez-" "le et réessayez." -#: tclCommands/TclCommandGeoCutout.py:190 +#: tclCommands/TclCommandGeoCutout.py:189 msgid "Gaps value can be only one of: 'lr', 'tb', '2lr', '2tb', 4 or 8." msgstr "" "La valeur d'espacement ne peut être que l'une des valeurs suivantes: " "'Aucune', 'lr', 'tb', '2lr', '2tb', 4 ou 8." -#: tclCommands/TclCommandGeoCutout.py:302 -#: tclCommands/TclCommandGeoCutout.py:360 +#: tclCommands/TclCommandGeoCutout.py:301 +#: tclCommands/TclCommandGeoCutout.py:359 msgid "Any-form Cutout operation finished." msgstr "L'opération de découpe sous n'importe quelle forme est terminée." -#: tclCommands/TclCommandGeoCutout.py:366 +#: tclCommands/TclCommandGeoCutout.py:365 msgid "Cancelled. Object type is not supported." msgstr "Annulé. Le type d'objet n'est pas pris en charge." -#: tclCommands/TclCommandHelp.py:74 +#: tclCommands/TclCommandHelp.py:75 msgid "Available commands:" msgstr "Commandes disponibles:" -#: tclCommands/TclCommandHelp.py:112 +#: tclCommands/TclCommandHelp.py:115 msgid "Type help for usage." msgstr "Tapez help pour l'utiliser." -#: tclCommands/TclCommandHelp.py:112 +#: tclCommands/TclCommandHelp.py:115 msgid "Example: help open_gerber" msgstr "Exemple: help open_gerber" @@ -17859,6 +17881,16 @@ msgid "No Geometry name in args. Provide a name and try again." msgstr "" "Aucun nom de géométrie dans les arguments. Indiquez un nom et réessayez." +#~ msgid "e_fr_probe" +#~ msgstr "e_fr_probe" + +#~ msgid "" +#~ " Could not generate punched hole Gerber because the punch hole sizeis " +#~ "bigger than some of the apertures in the Gerber object." +#~ msgstr "" +#~ " Impossible de générer le trou perforé Gerber car la taille du trou " +#~ "poinçonné est plus grande que certaines des ouvertures de l'objet Gerber." + #~ msgid "Executing Tcl Script ..." #~ msgstr "Exécution du script Tcl ..." @@ -18759,8 +18791,8 @@ msgstr "" #~ msgid "ToolMove.on_left_click()" #~ msgstr "ToolMove.on_left_click()" -#~ msgid "FlatCAMObj.FlatCAMGeometry.mtool_gen_cncjob() -->" -#~ msgstr "FlatCAMObj.FlatCAMGeometry.mtool_gen_cncjob() -->" +#~ msgid "FlatCAMObj.GeometryObject.mtool_gen_cncjob() -->" +#~ msgstr "FlatCAMObj.GeometryObject.mtool_gen_cncjob() -->" #~ msgid "App.on_fileopenscript() -->" #~ msgstr "App.on_fileopenscript() -->" diff --git a/locale/hu/LC_MESSAGES/strings.mo b/locale/hu/LC_MESSAGES/strings.mo new file mode 100644 index 00000000..e8f1af58 Binary files /dev/null and b/locale/hu/LC_MESSAGES/strings.mo differ diff --git a/locale/hu/LC_MESSAGES/strings.po b/locale/hu/LC_MESSAGES/strings.po new file mode 100644 index 00000000..580a100c --- /dev/null +++ b/locale/hu/LC_MESSAGES/strings.po @@ -0,0 +1,21717 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR ORGANIZATION +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: \n" +"POT-Creation-Date: 2020-04-27 12:30+0300\n" +"PO-Revision-Date: 2020-04-27 12:31+0300\n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: en\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: pygettext.py 1.5\n" +"X-Generator: Poedit 2.2.4\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Poedit-Basepath: ../../..\n" +"X-Poedit-SearchPath-0: .\n" +"X-Poedit-SearchPathExcluded-0: build\n" +"X-Poedit-SearchPathExcluded-1: doc\n" +"X-Poedit-SearchPathExcluded-2: tests\n" + +#: FlatCAMApp.py:794 FlatCAMApp.py:826 FlatCAMDB.py:1481 FlatCAMDB.py:1596 +#: flatcamEditors/FlatCAMGeoEditor.py:499 +#: flatcamEditors/FlatCAMGeoEditor.py:569 +#: flatcamEditors/FlatCAMGeoEditor.py:5152 flatcamGUI/PreferencesUI.py:5509 +#: flatcamGUI/PreferencesUI.py:6056 flatcamTools/ToolNCC.py:431 +#: flatcamTools/ToolNCC.py:2396 flatcamTools/ToolNCC.py:2424 +#: flatcamTools/ToolNCC.py:2694 flatcamTools/ToolNCC.py:2726 +#: flatcamTools/ToolPaint.py:390 flatcamTools/ToolPaint.py:1843 +#: tclCommands/TclCommandCopperClear.py:128 +#: tclCommands/TclCommandCopperClear.py:136 tclCommands/TclCommandPaint.py:127 +msgid "Seed" +msgstr "Seed" + +#: FlatCAMApp.py:800 flatcamGUI/PreferencesUI.py:5588 +#: flatcamGUI/PreferencesUI.py:7695 flatcamTools/ToolCopperThieving.py:125 +#: flatcamTools/ToolNCC.py:535 flatcamTools/ToolNCC.py:1301 +#: flatcamTools/ToolNCC.py:1629 flatcamTools/ToolNCC.py:1914 +#: flatcamTools/ToolNCC.py:1978 flatcamTools/ToolNCC.py:2962 +#: flatcamTools/ToolNCC.py:2971 tclCommands/TclCommandCopperClear.py:190 +msgid "Itself" +msgstr "Itself" + +#: FlatCAMApp.py:827 flatcamGUI/PreferencesUI.py:6119 +#: flatcamTools/ToolPaint.py:486 flatcamTools/ToolPaint.py:1422 +#: tclCommands/TclCommandPaint.py:162 +msgid "All Polygons" +msgstr "All Polygons" + +#: FlatCAMApp.py:1134 +msgid "FlatCAM is initializing ..." +msgstr "FlatCAM is initializing ..." + +#: FlatCAMApp.py:1828 +msgid "Could not find the Language files. The App strings are missing." +msgstr "Could not find the Language files. The App strings are missing." + +#: FlatCAMApp.py:1922 +msgid "" +"FlatCAM is initializing ...\n" +"Canvas initialization started." +msgstr "" +"FlatCAM is initializing ...\n" +"Canvas initialization started." + +#: FlatCAMApp.py:1942 +msgid "" +"FlatCAM is initializing ...\n" +"Canvas initialization started.\n" +"Canvas initialization finished in" +msgstr "" +"FlatCAM is initializing ...\n" +"Canvas initialization started.\n" +"Canvas initialization finished in" + +#: FlatCAMApp.py:2815 FlatCAMApp.py:9396 +msgid "New Project - Not saved" +msgstr "New Project - Not saved" + +#: FlatCAMApp.py:2911 +msgid "" +"Found old default preferences files. Please reboot the application to update." +msgstr "" +"Found old default preferences files. Please reboot the application to update." + +#: FlatCAMApp.py:2962 FlatCAMApp.py:3882 FlatCAMApp.py:3931 FlatCAMApp.py:3986 +#: FlatCAMApp.py:4061 FlatCAMApp.py:6110 FlatCAMApp.py:9480 FlatCAMApp.py:9517 +#: FlatCAMApp.py:9559 FlatCAMApp.py:9588 FlatCAMApp.py:9629 FlatCAMApp.py:9654 +#: FlatCAMApp.py:9706 FlatCAMApp.py:9741 FlatCAMApp.py:9786 FlatCAMApp.py:9827 +#: FlatCAMApp.py:9868 FlatCAMApp.py:9909 FlatCAMApp.py:9950 FlatCAMApp.py:9994 +#: FlatCAMApp.py:10050 FlatCAMApp.py:10082 FlatCAMApp.py:10114 +#: FlatCAMApp.py:10351 FlatCAMApp.py:10394 FlatCAMApp.py:10471 +#: FlatCAMApp.py:10526 FlatCAMBookmark.py:291 FlatCAMBookmark.py:333 +#: FlatCAMDB.py:663 FlatCAMDB.py:709 FlatCAMDB.py:2093 FlatCAMDB.py:2139 +#: ObjectCollection.py:127 flatcamEditors/FlatCAMExcEditor.py:1023 +#: flatcamEditors/FlatCAMExcEditor.py:1091 +#: flatcamEditors/FlatCAMTextEditor.py:223 flatcamGUI/FlatCAMGUI.py:3389 +#: flatcamGUI/FlatCAMGUI.py:3601 flatcamGUI/FlatCAMGUI.py:3812 +#: flatcamTools/ToolFilm.py:754 flatcamTools/ToolFilm.py:900 +#: flatcamTools/ToolImage.py:247 flatcamTools/ToolMove.py:269 +#: flatcamTools/ToolPcbWizard.py:301 flatcamTools/ToolPcbWizard.py:324 +#: flatcamTools/ToolQRCode.py:791 flatcamTools/ToolQRCode.py:838 +msgid "Cancelled." +msgstr "Cancelled." + +#: FlatCAMApp.py:2978 +msgid "Open Config file failed." +msgstr "Open Config file failed." + +#: FlatCAMApp.py:2993 +msgid "Open Script file failed." +msgstr "Open Script file failed." + +#: FlatCAMApp.py:3019 +msgid "Open Excellon file failed." +msgstr "Open Excellon file failed." + +#: FlatCAMApp.py:3032 +msgid "Open GCode file failed." +msgstr "Open GCode file failed." + +#: FlatCAMApp.py:3045 +msgid "Open Gerber file failed." +msgstr "Open Gerber file failed." + +#: FlatCAMApp.py:3422 +msgid "Select a Geometry, Gerber or Excellon Object to edit." +msgstr "Select a Geometry, Gerber or Excellon Object to edit." + +#: FlatCAMApp.py:3437 +msgid "" +"Simultaneous editing of tools geometry in a MultiGeo Geometry is not " +"possible.\n" +"Edit only one geometry at a time." +msgstr "" +"Simultaneous editing of tools geometry in a MultiGeo Geometry is not " +"possible.\n" +"Edit only one geometry at a time." + +#: FlatCAMApp.py:3495 +msgid "Editor is activated ..." +msgstr "Editor is activated ..." + +#: FlatCAMApp.py:3516 +msgid "Do you want to save the edited object?" +msgstr "Do you want to save the edited object?" + +#: FlatCAMApp.py:3517 flatcamGUI/FlatCAMGUI.py:2273 +msgid "Close Editor" +msgstr "Close Editor" + +#: FlatCAMApp.py:3520 FlatCAMApp.py:5162 FlatCAMApp.py:8024 FlatCAMApp.py:8050 +#: FlatCAMApp.py:9300 FlatCAMTranslation.py:108 FlatCAMTranslation.py:199 +#: flatcamGUI/FlatCAMGUI.py:2479 +msgid "Yes" +msgstr "Yes" + +#: FlatCAMApp.py:3521 FlatCAMApp.py:5163 FlatCAMApp.py:8025 FlatCAMApp.py:8051 +#: FlatCAMApp.py:9301 FlatCAMTranslation.py:109 FlatCAMTranslation.py:200 +#: flatcamGUI/FlatCAMGUI.py:2480 flatcamGUI/PreferencesUI.py:5443 +#: flatcamGUI/PreferencesUI.py:5989 flatcamTools/ToolNCC.py:182 +#: flatcamTools/ToolPaint.py:166 +msgid "No" +msgstr "No" + +#: FlatCAMApp.py:3522 FlatCAMApp.py:5164 FlatCAMApp.py:6048 FlatCAMApp.py:7000 +#: FlatCAMApp.py:9302 FlatCAMDB.py:128 FlatCAMDB.py:1683 +#: flatcamGUI/FlatCAMGUI.py:1332 +msgid "Cancel" +msgstr "Cancel" + +#: FlatCAMApp.py:3554 +msgid "Object empty after edit." +msgstr "Object empty after edit." + +#: FlatCAMApp.py:3558 FlatCAMApp.py:3579 FlatCAMApp.py:3601 +msgid "Editor exited. Editor content saved." +msgstr "Editor exited. Editor content saved." + +#: FlatCAMApp.py:3605 FlatCAMApp.py:3628 FlatCAMApp.py:3646 +msgid "Select a Gerber, Geometry or Excellon Object to update." +msgstr "Select a Gerber, Geometry or Excellon Object to update." + +#: FlatCAMApp.py:3608 +msgid "is updated, returning to App..." +msgstr "is updated, returning to App..." + +#: FlatCAMApp.py:3615 +msgid "Editor exited. Editor content was not saved." +msgstr "Editor exited. Editor content was not saved." + +#: FlatCAMApp.py:3808 FlatCAMApp.py:3939 FlatCAMApp.py:5011 +msgid "Could not load defaults file." +msgstr "Could not load defaults file." + +#: FlatCAMApp.py:3820 FlatCAMApp.py:3947 FlatCAMApp.py:5020 +msgid "Failed to parse defaults file." +msgstr "Failed to parse defaults file." + +#: FlatCAMApp.py:3890 FlatCAMApp.py:5112 +msgid "Could not load factory defaults file." +msgstr "Could not load factory defaults file." + +#: FlatCAMApp.py:3898 FlatCAMApp.py:5122 +msgid "Failed to parse factory defaults file." +msgstr "Failed to parse factory defaults file." + +#: FlatCAMApp.py:3906 +msgid "Preferences default values are restored." +msgstr "Preferences default values are restored." + +#: FlatCAMApp.py:3921 FlatCAMApp.py:3925 +msgid "Import FlatCAM Preferences" +msgstr "Import FlatCAM Preferences" + +#: FlatCAMApp.py:3955 +msgid "Imported Defaults from" +msgstr "Imported Defaults from" + +#: FlatCAMApp.py:3975 FlatCAMApp.py:3980 +msgid "Export FlatCAM Preferences" +msgstr "Export FlatCAM Preferences" + +#: FlatCAMApp.py:3995 FlatCAMApp.py:4069 FlatCAMApp.py:10770 +#: FlatCAMApp.py:10818 FlatCAMApp.py:10943 FlatCAMApp.py:11079 +#: FlatCAMBookmark.py:299 FlatCAMDB.py:671 FlatCAMDB.py:2101 +#: flatcamEditors/FlatCAMTextEditor.py:276 flatcamObjects/FlatCAMCNCJob.py:958 +#: flatcamTools/ToolFilm.py:1031 flatcamTools/ToolFilm.py:1212 +#: flatcamTools/ToolSolderPaste.py:1534 +msgid "" +"Permission denied, saving not possible.\n" +"Most likely another app is holding the file open and not accessible." +msgstr "" +"Permission denied, saving not possible.\n" +"Most likely another app is holding the file open and not accessible." + +#: FlatCAMApp.py:4007 +msgid "Could not load preferences file." +msgstr "Could not load preferences file." + +#: FlatCAMApp.py:4026 FlatCAMApp.py:4093 FlatCAMApp.py:5039 +msgid "Failed to write defaults to file." +msgstr "Failed to write defaults to file." + +#: FlatCAMApp.py:4031 +msgid "Exported preferences to" +msgstr "Exported preferences to" + +#: FlatCAMApp.py:4051 FlatCAMApp.py:4056 +msgid "Save to file" +msgstr "Save to file" + +#: FlatCAMApp.py:4080 +msgid "Could not load the file." +msgstr "Could not load the file." + +#: FlatCAMApp.py:4096 +msgid "Exported file to" +msgstr "Exported file to" + +#: FlatCAMApp.py:4179 +msgid "Failed to open recent files file for writing." +msgstr "Failed to open recent files file for writing." + +#: FlatCAMApp.py:4190 +msgid "Failed to open recent projects file for writing." +msgstr "Failed to open recent projects file for writing." + +#: FlatCAMApp.py:4275 FlatCAMApp.py:11275 FlatCAMApp.py:11334 +#: FlatCAMApp.py:11462 FlatCAMApp.py:12193 +#: flatcamEditors/FlatCAMGrbEditor.py:4231 +#: flatcamObjects/FlatCAMGeometry.py:1671 flatcamParsers/ParseExcellon.py:897 +#: flatcamTools/ToolPcbWizard.py:433 +msgid "An internal error has occurred. See shell.\n" +msgstr "An internal error has occurred. See shell.\n" + +#: FlatCAMApp.py:4276 +#, python-brace-format +msgid "" +"Object ({kind}) failed because: {error} \n" +"\n" +msgstr "" +"Object ({kind}) failed because: {error} \n" +"\n" + +#: FlatCAMApp.py:4291 +msgid "Converting units to " +msgstr "Converting units to " + +#: FlatCAMApp.py:4404 +msgid "CREATE A NEW FLATCAM TCL SCRIPT" +msgstr "CREATE A NEW FLATCAM TCL SCRIPT" + +#: FlatCAMApp.py:4405 +msgid "TCL Tutorial is here" +msgstr "TCL Tutorial is here" + +#: FlatCAMApp.py:4407 +msgid "FlatCAM commands list" +msgstr "FlatCAM commands list" + +#: FlatCAMApp.py:4458 FlatCAMApp.py:4464 FlatCAMApp.py:4470 FlatCAMApp.py:4476 +#: FlatCAMApp.py:4482 FlatCAMApp.py:4488 +msgid "created/selected" +msgstr "created/selected" + +#: FlatCAMApp.py:4503 FlatCAMApp.py:7086 flatcamObjects/FlatCAMObj.py:248 +#: flatcamObjects/FlatCAMObj.py:279 flatcamObjects/FlatCAMObj.py:295 +#: flatcamObjects/FlatCAMObj.py:375 flatcamTools/ToolCopperThieving.py:1481 +#: flatcamTools/ToolFiducials.py:809 flatcamTools/ToolMove.py:229 +#: flatcamTools/ToolQRCode.py:728 +msgid "Plotting" +msgstr "Plotting" + +#: FlatCAMApp.py:4566 flatcamGUI/FlatCAMGUI.py:530 +msgid "About FlatCAM" +msgstr "About FlatCAM" + +#: FlatCAMApp.py:4592 +msgid "2D Computer-Aided Printed Circuit Board Manufacturing" +msgstr "2D Computer-Aided Printed Circuit Board Manufacturing" + +#: FlatCAMApp.py:4593 +msgid "Development" +msgstr "Development" + +#: FlatCAMApp.py:4594 +msgid "DOWNLOAD" +msgstr "DOWNLOAD" + +#: FlatCAMApp.py:4595 +msgid "Issue tracker" +msgstr "Issue tracker" + +#: FlatCAMApp.py:4599 FlatCAMApp.py:4941 flatcamGUI/GUIElements.py:2583 +msgid "Close" +msgstr "Close" + +#: FlatCAMApp.py:4614 +msgid "Licensed under the MIT license" +msgstr "Licensed under the MIT license" + +#: FlatCAMApp.py:4623 +msgid "" +"Permission is hereby granted, free of charge, to any person obtaining a " +"copy\n" +"of this software and associated documentation files (the \"Software\"), to " +"deal\n" +"in the Software without restriction, including without limitation the " +"rights\n" +"to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n" +"copies of the Software, and to permit persons to whom the Software is\n" +"furnished to do so, subject to the following conditions:\n" +"\n" +"The above copyright notice and this permission notice shall be included in\n" +"all copies or substantial portions of the Software.\n" +"\n" +"THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS " +"OR\n" +"IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n" +"FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n" +"AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n" +"LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING " +"FROM,\n" +"OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n" +"THE SOFTWARE." +msgstr "" +"Permission is hereby granted, free of charge, to any person obtaining a " +"copy\n" +"of this software and associated documentation files (the \"Software\"), to " +"deal\n" +"in the Software without restriction, including without limitation the " +"rights\n" +"to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n" +"copies of the Software, and to permit persons to whom the Software is\n" +"furnished to do so, subject to the following conditions:\n" +"\n" +"The above copyright notice and this permission notice shall be included in\n" +"all copies or substantial portions of the Software.\n" +"\n" +"THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS " +"OR\n" +"IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n" +"FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n" +"AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n" +"LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING " +"FROM,\n" +"OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n" +"THE SOFTWARE." + +#: FlatCAMApp.py:4645 +msgid "" +"Some of the icons used are from the following sources:
    Icons by Icons8
    Icons by oNline Web Fonts" +msgstr "" +"Some of the icons used are from the following sources:
    Icons by Icons8
    Icons by oNline Web Fonts" + +#: FlatCAMApp.py:4678 +msgid "Splash" +msgstr "Splash" + +#: FlatCAMApp.py:4684 +msgid "Programmers" +msgstr "Programmers" + +#: FlatCAMApp.py:4690 +msgid "Translators" +msgstr "Translators" + +#: FlatCAMApp.py:4696 +msgid "License" +msgstr "License" + +#: FlatCAMApp.py:4702 +msgid "Attributions" +msgstr "Attributions" + +#: FlatCAMApp.py:4725 +msgid "Programmer" +msgstr "Programmer" + +#: FlatCAMApp.py:4726 +msgid "Status" +msgstr "Status" + +#: FlatCAMApp.py:4727 FlatCAMApp.py:4805 +msgid "E-mail" +msgstr "E-mail" + +#: FlatCAMApp.py:4735 +msgid "BETA Maintainer >= 2019" +msgstr "BETA Maintainer >= 2019" + +#: FlatCAMApp.py:4802 +msgid "Language" +msgstr "Language" + +#: FlatCAMApp.py:4803 +msgid "Translator" +msgstr "Translator" + +#: FlatCAMApp.py:4804 +msgid "Corrections" +msgstr "Corrections" + +#: FlatCAMApp.py:4913 FlatCAMApp.py:4921 FlatCAMApp.py:8069 +#: flatcamGUI/FlatCAMGUI.py:512 +msgid "Bookmarks Manager" +msgstr "Bookmarks Manager" + +#: FlatCAMApp.py:4932 +msgid "" +"This entry will resolve to another website if:\n" +"\n" +"1. FlatCAM.org website is down\n" +"2. Someone forked FlatCAM project and wants to point\n" +"to his own website\n" +"\n" +"If you can't get any informations about FlatCAM beta\n" +"use the YouTube channel link from the Help menu." +msgstr "" +"This entry will resolve to another website if:\n" +"\n" +"1. FlatCAM.org website is down\n" +"2. Someone forked FlatCAM project and wants to point\n" +"to his own website\n" +"\n" +"If you can't get any informations about FlatCAM beta\n" +"use the YouTube channel link from the Help menu." + +#: FlatCAMApp.py:4939 +msgid "Alternative website" +msgstr "Alternative website" + +#: FlatCAMApp.py:5043 FlatCAMApp.py:8033 +msgid "Preferences saved." +msgstr "Preferences saved." + +#: FlatCAMApp.py:5138 +msgid "Failed to write factory defaults to file." +msgstr "Failed to write factory defaults to file." + +#: FlatCAMApp.py:5142 +msgid "Factory defaults saved." +msgstr "Factory defaults saved." + +#: FlatCAMApp.py:5152 flatcamGUI/FlatCAMGUI.py:4178 +msgid "Application is saving the project. Please wait ..." +msgstr "Application is saving the project. Please wait ..." + +#: FlatCAMApp.py:5157 FlatCAMTranslation.py:194 +msgid "" +"There are files/objects modified in FlatCAM. \n" +"Do you want to Save the project?" +msgstr "" +"There are files/objects modified in FlatCAM. \n" +"Do you want to Save the project?" + +#: FlatCAMApp.py:5160 FlatCAMApp.py:9298 FlatCAMTranslation.py:197 +msgid "Save changes" +msgstr "Save changes" + +#: FlatCAMApp.py:5416 +msgid "Selected Excellon file extensions registered with FlatCAM." +msgstr "Selected Excellon file extensions registered with FlatCAM." + +#: FlatCAMApp.py:5438 +msgid "Selected GCode file extensions registered with FlatCAM." +msgstr "Selected GCode file extensions registered with FlatCAM." + +#: FlatCAMApp.py:5460 +msgid "Selected Gerber file extensions registered with FlatCAM." +msgstr "Selected Gerber file extensions registered with FlatCAM." + +#: FlatCAMApp.py:5648 FlatCAMApp.py:5707 FlatCAMApp.py:5735 +msgid "At least two objects are required for join. Objects currently selected" +msgstr "At least two objects are required for join. Objects currently selected" + +#: FlatCAMApp.py:5657 +msgid "" +"Failed join. The Geometry objects are of different types.\n" +"At least one is MultiGeo type and the other is SingleGeo type. A possibility " +"is to convert from one to another and retry joining \n" +"but in the case of converting from MultiGeo to SingleGeo, informations may " +"be lost and the result may not be what was expected. \n" +"Check the generated GCODE." +msgstr "" +"Failed join. The Geometry objects are of different types.\n" +"At least one is MultiGeo type and the other is SingleGeo type. A possibility " +"is to convert from one to another and retry joining \n" +"but in the case of converting from MultiGeo to SingleGeo, informations may " +"be lost and the result may not be what was expected. \n" +"Check the generated GCODE." + +#: FlatCAMApp.py:5669 FlatCAMApp.py:5679 +msgid "Geometry merging finished" +msgstr "Geometry merging finished" + +#: FlatCAMApp.py:5702 +msgid "Failed. Excellon joining works only on Excellon objects." +msgstr "Failed. Excellon joining works only on Excellon objects." + +#: FlatCAMApp.py:5712 +msgid "Excellon merging finished" +msgstr "Excellon merging finished" + +#: FlatCAMApp.py:5730 +msgid "Failed. Gerber joining works only on Gerber objects." +msgstr "Failed. Gerber joining works only on Gerber objects." + +#: FlatCAMApp.py:5740 +msgid "Gerber merging finished" +msgstr "Gerber merging finished" + +#: FlatCAMApp.py:5760 FlatCAMApp.py:5795 +msgid "Failed. Select a Geometry Object and try again." +msgstr "Failed. Select a Geometry Object and try again." + +#: FlatCAMApp.py:5764 FlatCAMApp.py:5800 +msgid "Expected a GeometryObject, got" +msgstr "Expected a GeometryObject, got" + +#: FlatCAMApp.py:5777 +msgid "A Geometry object was converted to MultiGeo type." +msgstr "A Geometry object was converted to MultiGeo type." + +#: FlatCAMApp.py:5815 +msgid "A Geometry object was converted to SingleGeo type." +msgstr "A Geometry object was converted to SingleGeo type." + +#: FlatCAMApp.py:6042 +msgid "Toggle Units" +msgstr "Toggle Units" + +#: FlatCAMApp.py:6044 +msgid "" +"Changing the units of the project\n" +"will scale all objects.\n" +"\n" +"Do you want to continue?" +msgstr "" +"Changing the units of the project\n" +"will scale all objects.\n" +"\n" +"Do you want to continue?" + +#: FlatCAMApp.py:6047 FlatCAMApp.py:6922 FlatCAMApp.py:6999 FlatCAMApp.py:9673 +#: FlatCAMApp.py:9687 FlatCAMApp.py:10020 FlatCAMApp.py:10030 +msgid "Ok" +msgstr "Ok" + +#: FlatCAMApp.py:6096 +msgid "Converted units to" +msgstr "Converted units to" + +#: FlatCAMApp.py:6737 +msgid "Detachable Tabs" +msgstr "Detachable Tabs" + +#: FlatCAMApp.py:6811 FlatCAMApp.py:6855 FlatCAMApp.py:6883 FlatCAMApp.py:7816 +#: FlatCAMApp.py:7884 FlatCAMApp.py:7988 +msgid "Preferences" +msgstr "Preferences" + +#: FlatCAMApp.py:6817 +msgid "Preferences applied." +msgstr "Preferences applied." + +#: FlatCAMApp.py:6888 +msgid "Preferences closed without saving." +msgstr "Preferences closed without saving." + +#: FlatCAMApp.py:6911 flatcamTools/ToolNCC.py:932 flatcamTools/ToolNCC.py:1426 +#: flatcamTools/ToolPaint.py:858 flatcamTools/ToolSolderPaste.py:568 +#: flatcamTools/ToolSolderPaste.py:893 +msgid "Please enter a tool diameter with non-zero value, in Float format." +msgstr "Please enter a tool diameter with non-zero value, in Float format." + +#: FlatCAMApp.py:6915 flatcamTools/ToolNCC.py:936 flatcamTools/ToolPaint.py:862 +#: flatcamTools/ToolSolderPaste.py:572 +msgid "Adding Tool cancelled" +msgstr "Adding Tool cancelled" + +#: FlatCAMApp.py:6918 +msgid "" +"Adding Tool works only when Advanced is checked.\n" +"Go to Preferences -> General - Show Advanced Options." +msgstr "" +"Adding Tool works only when Advanced is checked.\n" +"Go to Preferences -> General - Show Advanced Options." + +#: FlatCAMApp.py:6994 +msgid "Delete objects" +msgstr "Delete objects" + +#: FlatCAMApp.py:6997 +msgid "" +"Are you sure you want to permanently delete\n" +"the selected objects?" +msgstr "" +"Are you sure you want to permanently delete\n" +"the selected objects?" + +#: FlatCAMApp.py:7035 +msgid "Object(s) deleted" +msgstr "Object(s) deleted" + +#: FlatCAMApp.py:7039 FlatCAMApp.py:7194 flatcamTools/ToolDblSided.py:818 +msgid "Failed. No object(s) selected..." +msgstr "Failed. No object(s) selected..." + +#: FlatCAMApp.py:7041 +msgid "Save the work in Editor and try again ..." +msgstr "Save the work in Editor and try again ..." + +#: FlatCAMApp.py:7070 +msgid "Object deleted" +msgstr "Object deleted" + +#: FlatCAMApp.py:7097 +msgid "Click to set the origin ..." +msgstr "Click to set the origin ..." + +#: FlatCAMApp.py:7119 +msgid "Setting Origin..." +msgstr "Setting Origin..." + +#: FlatCAMApp.py:7132 FlatCAMApp.py:7234 +msgid "Origin set" +msgstr "Origin set" + +#: FlatCAMApp.py:7149 +msgid "Origin coordinates specified but incomplete." +msgstr "Origin coordinates specified but incomplete." + +#: FlatCAMApp.py:7190 +msgid "Moving to Origin..." +msgstr "Moving to Origin..." + +#: FlatCAMApp.py:7271 +msgid "Jump to ..." +msgstr "Jump to ..." + +#: FlatCAMApp.py:7272 +msgid "Enter the coordinates in format X,Y:" +msgstr "Enter the coordinates in format X,Y:" + +#: FlatCAMApp.py:7282 +msgid "Wrong coordinates. Enter coordinates in format: X,Y" +msgstr "Wrong coordinates. Enter coordinates in format: X,Y" + +#: FlatCAMApp.py:7360 FlatCAMApp.py:7509 +#: flatcamEditors/FlatCAMExcEditor.py:3624 +#: flatcamEditors/FlatCAMExcEditor.py:3632 +#: flatcamEditors/FlatCAMGeoEditor.py:4349 +#: flatcamEditors/FlatCAMGeoEditor.py:4363 +#: flatcamEditors/FlatCAMGrbEditor.py:1085 +#: flatcamEditors/FlatCAMGrbEditor.py:1202 +#: flatcamEditors/FlatCAMGrbEditor.py:1488 +#: flatcamEditors/FlatCAMGrbEditor.py:1757 +#: flatcamEditors/FlatCAMGrbEditor.py:4489 +#: flatcamEditors/FlatCAMGrbEditor.py:4504 flatcamGUI/FlatCAMGUI.py:3370 +#: flatcamGUI/FlatCAMGUI.py:3382 flatcamTools/ToolAlignObjects.py:393 +#: flatcamTools/ToolAlignObjects.py:415 +msgid "Done." +msgstr "Done." + +#: FlatCAMApp.py:7375 FlatCAMApp.py:9669 FlatCAMApp.py:9764 FlatCAMApp.py:9805 +#: FlatCAMApp.py:9846 FlatCAMApp.py:9887 FlatCAMApp.py:9928 FlatCAMApp.py:9972 +#: FlatCAMApp.py:10016 FlatCAMApp.py:10504 FlatCAMApp.py:10508 +#: flatcamTools/ToolProperties.py:116 +msgid "No object selected." +msgstr "No object selected." + +#: FlatCAMApp.py:7394 +msgid "Bottom-Left" +msgstr "Bottom-Left" + +#: FlatCAMApp.py:7395 flatcamGUI/PreferencesUI.py:8111 +#: flatcamTools/ToolCalibration.py:159 +msgid "Top-Left" +msgstr "Top-Left" + +#: FlatCAMApp.py:7396 flatcamGUI/PreferencesUI.py:8112 +#: flatcamTools/ToolCalibration.py:160 +msgid "Bottom-Right" +msgstr "Bottom-Right" + +#: FlatCAMApp.py:7397 +msgid "Top-Right" +msgstr "Top-Right" + +#: FlatCAMApp.py:7398 flatcamGUI/ObjectUI.py:2625 +msgid "Center" +msgstr "Center" + +#: FlatCAMApp.py:7418 +msgid "Locate ..." +msgstr "Locate ..." + +#: FlatCAMApp.py:7679 FlatCAMApp.py:7756 +msgid "No object is selected. Select an object and try again." +msgstr "No object is selected. Select an object and try again." + +#: FlatCAMApp.py:7782 +msgid "" +"Aborting. The current task will be gracefully closed as soon as possible..." +msgstr "" +"Aborting. The current task will be gracefully closed as soon as possible..." + +#: FlatCAMApp.py:7788 +msgid "The current task was gracefully closed on user request..." +msgstr "The current task was gracefully closed on user request..." + +#: FlatCAMApp.py:7881 +msgid "Preferences edited but not saved." +msgstr "Preferences edited but not saved." + +#: FlatCAMApp.py:7898 FlatCAMApp.py:7926 FlatCAMApp.py:7953 FlatCAMApp.py:7972 +#: FlatCAMApp.py:8039 FlatCAMDB.py:738 FlatCAMDB.py:913 FlatCAMDB.py:2168 +#: FlatCAMDB.py:2378 flatcamObjects/FlatCAMGeometry.py:862 +#: flatcamTools/ToolNCC.py:3958 flatcamTools/ToolNCC.py:4042 +#: flatcamTools/ToolPaint.py:3548 flatcamTools/ToolPaint.py:3633 +msgid "Tools Database" +msgstr "Tools Database" + +#: FlatCAMApp.py:7950 +msgid "Tools in Tools Database edited but not saved." +msgstr "Tools in Tools Database edited but not saved." + +#: FlatCAMApp.py:7976 flatcamTools/ToolNCC.py:3965 +#: flatcamTools/ToolPaint.py:3555 +msgid "Tool from DB added in Tool Table." +msgstr "Tool from DB added in Tool Table." + +#: FlatCAMApp.py:7978 +msgid "Adding tool from DB is not allowed for this object." +msgstr "Adding tool from DB is not allowed for this object." + +#: FlatCAMApp.py:8019 +msgid "" +"One or more values are changed.\n" +"Do you want to save the Preferences?" +msgstr "" +"One or more values are changed.\n" +"Do you want to save the Preferences?" + +#: FlatCAMApp.py:8021 flatcamGUI/FlatCAMGUI.py:291 +msgid "Save Preferences" +msgstr "Save Preferences" + +#: FlatCAMApp.py:8045 +msgid "" +"One or more Tools are edited.\n" +"Do you want to update the Tools Database?" +msgstr "" +"One or more Tools are edited.\n" +"Do you want to update the Tools Database?" + +#: FlatCAMApp.py:8047 +msgid "Save Tools Database" +msgstr "Save Tools Database" + +#: FlatCAMApp.py:8066 FlatCAMApp.py:10254 flatcamObjects/FlatCAMCNCJob.py:562 +msgid "Code Editor" +msgstr "Code Editor" + +#: FlatCAMApp.py:8088 +msgid "No object selected to Flip on Y axis." +msgstr "No object selected to Flip on Y axis." + +#: FlatCAMApp.py:8114 +msgid "Flip on Y axis done." +msgstr "Flip on Y axis done." + +#: FlatCAMApp.py:8116 FlatCAMApp.py:8164 +#: flatcamEditors/FlatCAMGrbEditor.py:5893 +msgid "Flip action was not executed." +msgstr "Flip action was not executed." + +#: FlatCAMApp.py:8136 +msgid "No object selected to Flip on X axis." +msgstr "No object selected to Flip on X axis." + +#: FlatCAMApp.py:8162 +msgid "Flip on X axis done." +msgstr "Flip on X axis done." + +#: FlatCAMApp.py:8184 +msgid "No object selected to Rotate." +msgstr "No object selected to Rotate." + +#: FlatCAMApp.py:8187 FlatCAMApp.py:8240 FlatCAMApp.py:8279 +msgid "Transform" +msgstr "Transform" + +#: FlatCAMApp.py:8187 FlatCAMApp.py:8240 FlatCAMApp.py:8279 +msgid "Enter the Angle value:" +msgstr "Enter the Angle value:" + +#: FlatCAMApp.py:8218 +msgid "Rotation done." +msgstr "Rotation done." + +#: FlatCAMApp.py:8220 +msgid "Rotation movement was not executed." +msgstr "Rotation movement was not executed." + +#: FlatCAMApp.py:8238 +msgid "No object selected to Skew/Shear on X axis." +msgstr "No object selected to Skew/Shear on X axis." + +#: FlatCAMApp.py:8260 +msgid "Skew on X axis done." +msgstr "Skew on X axis done." + +#: FlatCAMApp.py:8277 +msgid "No object selected to Skew/Shear on Y axis." +msgstr "No object selected to Skew/Shear on Y axis." + +#: FlatCAMApp.py:8299 +msgid "Skew on Y axis done." +msgstr "Skew on Y axis done." + +#: FlatCAMApp.py:8450 FlatCAMApp.py:8497 flatcamGUI/FlatCAMGUI.py:488 +#: flatcamGUI/FlatCAMGUI.py:1713 +msgid "Select All" +msgstr "Select All" + +#: FlatCAMApp.py:8454 FlatCAMApp.py:8501 flatcamGUI/FlatCAMGUI.py:490 +msgid "Deselect All" +msgstr "Deselect All" + +#: FlatCAMApp.py:8517 +msgid "All objects are selected." +msgstr "All objects are selected." + +#: FlatCAMApp.py:8527 +msgid "Objects selection is cleared." +msgstr "Objects selection is cleared." + +#: FlatCAMApp.py:8547 flatcamGUI/FlatCAMGUI.py:1706 +msgid "Grid On/Off" +msgstr "Grid On/Off" + +#: FlatCAMApp.py:8559 flatcamEditors/FlatCAMGeoEditor.py:939 +#: flatcamEditors/FlatCAMGrbEditor.py:2580 +#: flatcamEditors/FlatCAMGrbEditor.py:5475 flatcamGUI/ObjectUI.py:1594 +#: flatcamTools/ToolDblSided.py:192 flatcamTools/ToolDblSided.py:425 +#: flatcamTools/ToolNCC.py:294 flatcamTools/ToolNCC.py:631 +#: flatcamTools/ToolPaint.py:277 flatcamTools/ToolPaint.py:676 +#: flatcamTools/ToolSolderPaste.py:122 flatcamTools/ToolSolderPaste.py:597 +#: flatcamTools/ToolTransform.py:478 +msgid "Add" +msgstr "Add" + +#: FlatCAMApp.py:8561 flatcamEditors/FlatCAMGrbEditor.py:2585 +#: flatcamEditors/FlatCAMGrbEditor.py:2733 flatcamGUI/FlatCAMGUI.py:736 +#: flatcamGUI/FlatCAMGUI.py:1059 flatcamGUI/FlatCAMGUI.py:2126 +#: flatcamGUI/FlatCAMGUI.py:2269 flatcamGUI/FlatCAMGUI.py:2733 +#: flatcamGUI/ObjectUI.py:1622 flatcamObjects/FlatCAMGeometry.py:480 +#: flatcamTools/ToolNCC.py:316 flatcamTools/ToolNCC.py:637 +#: flatcamTools/ToolPaint.py:299 flatcamTools/ToolPaint.py:682 +#: flatcamTools/ToolSolderPaste.py:128 flatcamTools/ToolSolderPaste.py:600 +msgid "Delete" +msgstr "Delete" + +#: FlatCAMApp.py:8577 +msgid "New Grid ..." +msgstr "New Grid ..." + +#: FlatCAMApp.py:8578 +msgid "Enter a Grid Value:" +msgstr "Enter a Grid Value:" + +#: FlatCAMApp.py:8586 FlatCAMApp.py:8613 +msgid "Please enter a grid value with non-zero value, in Float format." +msgstr "Please enter a grid value with non-zero value, in Float format." + +#: FlatCAMApp.py:8592 +msgid "New Grid added" +msgstr "New Grid added" + +#: FlatCAMApp.py:8595 +msgid "Grid already exists" +msgstr "Grid already exists" + +#: FlatCAMApp.py:8598 +msgid "Adding New Grid cancelled" +msgstr "Adding New Grid cancelled" + +#: FlatCAMApp.py:8620 +msgid " Grid Value does not exist" +msgstr " Grid Value does not exist" + +#: FlatCAMApp.py:8623 +msgid "Grid Value deleted" +msgstr "Grid Value deleted" + +#: FlatCAMApp.py:8626 +msgid "Delete Grid value cancelled" +msgstr "Delete Grid value cancelled" + +#: FlatCAMApp.py:8632 +msgid "Key Shortcut List" +msgstr "Key Shortcut List" + +#: FlatCAMApp.py:8666 +msgid " No object selected to copy it's name" +msgstr " No object selected to copy it's name" + +#: FlatCAMApp.py:8670 +msgid "Name copied on clipboard ..." +msgstr "Name copied on clipboard ..." + +#: FlatCAMApp.py:8883 flatcamEditors/FlatCAMGrbEditor.py:4421 +msgid "Coordinates copied to clipboard." +msgstr "Coordinates copied to clipboard." + +#: FlatCAMApp.py:9122 FlatCAMApp.py:9128 FlatCAMApp.py:9134 FlatCAMApp.py:9140 +#: ObjectCollection.py:923 ObjectCollection.py:929 ObjectCollection.py:935 +#: ObjectCollection.py:941 ObjectCollection.py:947 ObjectCollection.py:953 +msgid "selected" +msgstr "selected" + +#: FlatCAMApp.py:9295 +msgid "" +"There are files/objects opened in FlatCAM.\n" +"Creating a New project will delete them.\n" +"Do you want to Save the project?" +msgstr "" +"There are files/objects opened in FlatCAM.\n" +"Creating a New project will delete them.\n" +"Do you want to Save the project?" + +#: FlatCAMApp.py:9316 +msgid "New Project created" +msgstr "New Project created" + +#: FlatCAMApp.py:9464 FlatCAMApp.py:9468 flatcamGUI/FlatCAMGUI.py:821 +#: flatcamGUI/FlatCAMGUI.py:2504 +msgid "Open Gerber" +msgstr "Open Gerber" + +#: FlatCAMApp.py:9473 FlatCAMApp.py:9510 FlatCAMApp.py:9552 FlatCAMApp.py:9622 +#: FlatCAMApp.py:10373 FlatCAMApp.py:11545 FlatCAMApp.py:11606 +msgid "" +"Canvas initialization started.\n" +"Canvas initialization finished in" +msgstr "" +"Canvas initialization started.\n" +"Canvas initialization finished in" + +#: FlatCAMApp.py:9475 +msgid "Opening Gerber file." +msgstr "Opening Gerber file." + +#: FlatCAMApp.py:9502 FlatCAMApp.py:9506 flatcamGUI/FlatCAMGUI.py:823 +#: flatcamGUI/FlatCAMGUI.py:2506 +msgid "Open Excellon" +msgstr "Open Excellon" + +#: FlatCAMApp.py:9512 +msgid "Opening Excellon file." +msgstr "Opening Excellon file." + +#: FlatCAMApp.py:9543 FlatCAMApp.py:9547 +msgid "Open G-Code" +msgstr "Open G-Code" + +#: FlatCAMApp.py:9554 +msgid "Opening G-Code file." +msgstr "Opening G-Code file." + +#: FlatCAMApp.py:9577 FlatCAMApp.py:9580 flatcamGUI/FlatCAMGUI.py:1715 +msgid "Open Project" +msgstr "Open Project" + +#: FlatCAMApp.py:9613 FlatCAMApp.py:9617 +msgid "Open HPGL2" +msgstr "Open HPGL2" + +#: FlatCAMApp.py:9624 +msgid "Opening HPGL2 file." +msgstr "Opening HPGL2 file." + +#: FlatCAMApp.py:9647 FlatCAMApp.py:9650 +msgid "Open Configuration File" +msgstr "Open Configuration File" + +#: FlatCAMApp.py:9670 FlatCAMApp.py:10017 +msgid "Please Select a Geometry object to export" +msgstr "Please Select a Geometry object to export" + +#: FlatCAMApp.py:9684 +msgid "Only Geometry, Gerber and CNCJob objects can be used." +msgstr "Only Geometry, Gerber and CNCJob objects can be used." + +#: FlatCAMApp.py:9697 FlatCAMApp.py:9701 flatcamTools/ToolQRCode.py:829 +#: flatcamTools/ToolQRCode.py:833 +msgid "Export SVG" +msgstr "Export SVG" + +#: FlatCAMApp.py:9726 +msgid "Data must be a 3D array with last dimension 3 or 4" +msgstr "Data must be a 3D array with last dimension 3 or 4" + +#: FlatCAMApp.py:9732 FlatCAMApp.py:9736 +msgid "Export PNG Image" +msgstr "Export PNG Image" + +#: FlatCAMApp.py:9769 FlatCAMApp.py:9977 +msgid "Failed. Only Gerber objects can be saved as Gerber files..." +msgstr "Failed. Only Gerber objects can be saved as Gerber files..." + +#: FlatCAMApp.py:9781 +msgid "Save Gerber source file" +msgstr "Save Gerber source file" + +#: FlatCAMApp.py:9810 +msgid "Failed. Only Script objects can be saved as TCL Script files..." +msgstr "Failed. Only Script objects can be saved as TCL Script files..." + +#: FlatCAMApp.py:9822 +msgid "Save Script source file" +msgstr "Save Script source file" + +#: FlatCAMApp.py:9851 +msgid "Failed. Only Document objects can be saved as Document files..." +msgstr "Failed. Only Document objects can be saved as Document files..." + +#: FlatCAMApp.py:9863 +msgid "Save Document source file" +msgstr "Save Document source file" + +#: FlatCAMApp.py:9892 FlatCAMApp.py:9933 FlatCAMApp.py:10856 +msgid "Failed. Only Excellon objects can be saved as Excellon files..." +msgstr "Failed. Only Excellon objects can be saved as Excellon files..." + +#: FlatCAMApp.py:9900 FlatCAMApp.py:9904 +msgid "Save Excellon source file" +msgstr "Save Excellon source file" + +#: FlatCAMApp.py:9941 FlatCAMApp.py:9945 +msgid "Export Excellon" +msgstr "Export Excellon" + +#: FlatCAMApp.py:9985 FlatCAMApp.py:9989 +msgid "Export Gerber" +msgstr "Export Gerber" + +#: FlatCAMApp.py:10027 +msgid "Only Geometry objects can be used." +msgstr "Only Geometry objects can be used." + +#: FlatCAMApp.py:10041 FlatCAMApp.py:10045 +msgid "Export DXF" +msgstr "Export DXF" + +#: FlatCAMApp.py:10070 FlatCAMApp.py:10073 +msgid "Import SVG" +msgstr "Import SVG" + +#: FlatCAMApp.py:10101 FlatCAMApp.py:10105 +msgid "Import DXF" +msgstr "Import DXF" + +#: FlatCAMApp.py:10156 +msgid "Viewing the source code of the selected object." +msgstr "Viewing the source code of the selected object." + +#: FlatCAMApp.py:10157 flatcamObjects/FlatCAMCNCJob.py:548 +#: flatcamObjects/FlatCAMScript.py:133 +msgid "Loading..." +msgstr "Loading..." + +#: FlatCAMApp.py:10163 FlatCAMApp.py:10167 +msgid "Select an Gerber or Excellon file to view it's source file." +msgstr "Select an Gerber or Excellon file to view it's source file." + +#: FlatCAMApp.py:10181 +msgid "Source Editor" +msgstr "Source Editor" + +#: FlatCAMApp.py:10221 FlatCAMApp.py:10228 +msgid "There is no selected object for which to see it's source file code." +msgstr "There is no selected object for which to see it's source file code." + +#: FlatCAMApp.py:10240 +msgid "Failed to load the source code for the selected object" +msgstr "Failed to load the source code for the selected object" + +#: FlatCAMApp.py:10276 +msgid "Go to Line ..." +msgstr "Go to Line ..." + +#: FlatCAMApp.py:10277 +msgid "Line:" +msgstr "Line:" + +#: FlatCAMApp.py:10306 +msgid "New TCL script file created in Code Editor." +msgstr "New TCL script file created in Code Editor." + +#: FlatCAMApp.py:10345 FlatCAMApp.py:10347 +msgid "Open TCL script" +msgstr "Open TCL script" + +#: FlatCAMApp.py:10375 +msgid "Executing ScriptObject file." +msgstr "Executing ScriptObject file." + +#: FlatCAMApp.py:10383 FlatCAMApp.py:10386 +msgid "Run TCL script" +msgstr "Run TCL script" + +#: FlatCAMApp.py:10409 +msgid "TCL script file opened in Code Editor and executed." +msgstr "TCL script file opened in Code Editor and executed." + +#: FlatCAMApp.py:10460 FlatCAMApp.py:10466 +msgid "Save Project As ..." +msgstr "Save Project As ..." + +#: FlatCAMApp.py:10462 flatcamGUI/FlatCAMGUI.py:1119 +#: flatcamGUI/FlatCAMGUI.py:2161 +msgid "Project" +msgstr "Project" + +#: FlatCAMApp.py:10501 +msgid "FlatCAM objects print" +msgstr "FlatCAM objects print" + +#: FlatCAMApp.py:10514 FlatCAMApp.py:10521 +msgid "Save Object as PDF ..." +msgstr "Save Object as PDF ..." + +#: FlatCAMApp.py:10530 +msgid "Printing PDF ... Please wait." +msgstr "Printing PDF ... Please wait." + +#: FlatCAMApp.py:10709 +msgid "PDF file saved to" +msgstr "PDF file saved to" + +#: FlatCAMApp.py:10734 +msgid "Exporting SVG" +msgstr "Exporting SVG" + +#: FlatCAMApp.py:10777 +msgid "SVG file exported to" +msgstr "SVG file exported to" + +#: FlatCAMApp.py:10803 +msgid "" +"Save cancelled because source file is empty. Try to export the Gerber file." +msgstr "" +"Save cancelled because source file is empty. Try to export the Gerber file." + +#: FlatCAMApp.py:10950 +msgid "Excellon file exported to" +msgstr "Excellon file exported to" + +#: FlatCAMApp.py:10959 +msgid "Exporting Excellon" +msgstr "Exporting Excellon" + +#: FlatCAMApp.py:10964 FlatCAMApp.py:10971 +msgid "Could not export Excellon file." +msgstr "Could not export Excellon file." + +#: FlatCAMApp.py:11086 +msgid "Gerber file exported to" +msgstr "Gerber file exported to" + +#: FlatCAMApp.py:11094 +msgid "Exporting Gerber" +msgstr "Exporting Gerber" + +#: FlatCAMApp.py:11099 FlatCAMApp.py:11106 +msgid "Could not export Gerber file." +msgstr "Could not export Gerber file." + +#: FlatCAMApp.py:11141 +msgid "DXF file exported to" +msgstr "DXF file exported to" + +#: FlatCAMApp.py:11147 +msgid "Exporting DXF" +msgstr "Exporting DXF" + +#: FlatCAMApp.py:11152 FlatCAMApp.py:11159 +msgid "Could not export DXF file." +msgstr "Could not export DXF file." + +#: FlatCAMApp.py:11182 FlatCAMApp.py:11224 flatcamTools/ToolImage.py:277 +msgid "" +"Not supported type is picked as parameter. Only Geometry and Gerber are " +"supported" +msgstr "" +"Not supported type is picked as parameter. Only Geometry and Gerber are " +"supported" + +#: FlatCAMApp.py:11192 +msgid "Importing SVG" +msgstr "Importing SVG" + +#: FlatCAMApp.py:11203 FlatCAMApp.py:11243 FlatCAMApp.py:11301 +#: FlatCAMApp.py:11366 FlatCAMApp.py:11430 FlatCAMApp.py:11495 +#: FlatCAMApp.py:11532 flatcamTools/ToolImage.py:297 +#: flatcamTools/ToolPDF.py:225 +msgid "Opened" +msgstr "Opened" + +#: FlatCAMApp.py:11233 +msgid "Importing DXF" +msgstr "Importing DXF" + +#: FlatCAMApp.py:11267 FlatCAMApp.py:11454 +msgid "Failed to open file" +msgstr "Failed to open file" + +#: FlatCAMApp.py:11270 FlatCAMApp.py:11457 +msgid "Failed to parse file" +msgstr "Failed to parse file" + +#: FlatCAMApp.py:11282 +msgid "Object is not Gerber file or empty. Aborting object creation." +msgstr "Object is not Gerber file or empty. Aborting object creation." + +#: FlatCAMApp.py:11287 +msgid "Opening Gerber" +msgstr "Opening Gerber" + +#: FlatCAMApp.py:11294 +msgid " Open Gerber failed. Probable not a Gerber file." +msgstr " Open Gerber failed. Probable not a Gerber file." + +#: FlatCAMApp.py:11325 flatcamTools/ToolPcbWizard.py:425 +msgid "This is not Excellon file." +msgstr "This is not Excellon file." + +#: FlatCAMApp.py:11329 +msgid "Cannot open file" +msgstr "Cannot open file" + +#: FlatCAMApp.py:11348 flatcamTools/ToolPDF.py:275 +#: flatcamTools/ToolPcbWizard.py:447 +msgid "No geometry found in file" +msgstr "No geometry found in file" + +#: FlatCAMApp.py:11351 +msgid "Opening Excellon." +msgstr "Opening Excellon." + +#: FlatCAMApp.py:11358 +msgid "Open Excellon file failed. Probable not an Excellon file." +msgstr "Open Excellon file failed. Probable not an Excellon file." + +#: FlatCAMApp.py:11390 +msgid "Reading GCode file" +msgstr "Reading GCode file" + +#: FlatCAMApp.py:11397 +msgid "Failed to open" +msgstr "Failed to open" + +#: FlatCAMApp.py:11405 +msgid "This is not GCODE" +msgstr "This is not GCODE" + +#: FlatCAMApp.py:11410 +msgid "Opening G-Code." +msgstr "Opening G-Code." + +#: FlatCAMApp.py:11419 +msgid "" +"Failed to create CNCJob Object. Probable not a GCode file. Try to load it " +"from File menu.\n" +" Attempting to create a FlatCAM CNCJob Object from G-Code file failed during " +"processing" +msgstr "" +"Failed to create CNCJob Object. Probable not a GCode file. Try to load it " +"from File menu.\n" +" Attempting to create a FlatCAM CNCJob Object from G-Code file failed during " +"processing" + +#: FlatCAMApp.py:11476 +msgid "Object is not HPGL2 file or empty. Aborting object creation." +msgstr "Object is not HPGL2 file or empty. Aborting object creation." + +#: FlatCAMApp.py:11481 +msgid "Opening HPGL2" +msgstr "Opening HPGL2" + +#: FlatCAMApp.py:11488 +msgid " Open HPGL2 failed. Probable not a HPGL2 file." +msgstr " Open HPGL2 failed. Probable not a HPGL2 file." + +#: FlatCAMApp.py:11508 +msgid "Opening TCL Script..." +msgstr "Opening TCL Script..." + +#: FlatCAMApp.py:11516 +msgid "TCL script file opened in Code Editor." +msgstr "TCL script file opened in Code Editor." + +#: FlatCAMApp.py:11519 +msgid "Failed to open TCL Script." +msgstr "Failed to open TCL Script." + +#: FlatCAMApp.py:11547 +msgid "Opening FlatCAM Config file." +msgstr "Opening FlatCAM Config file." + +#: FlatCAMApp.py:11575 +msgid "Failed to open config file" +msgstr "Failed to open config file" + +#: FlatCAMApp.py:11603 +msgid "Loading Project ... Please Wait ..." +msgstr "Loading Project ... Please Wait ..." + +#: FlatCAMApp.py:11608 +msgid "Opening FlatCAM Project file." +msgstr "Opening FlatCAM Project file." + +#: FlatCAMApp.py:11618 FlatCAMApp.py:11636 +msgid "Failed to open project file" +msgstr "Failed to open project file" + +#: FlatCAMApp.py:11673 +msgid "Loading Project ... restoring" +msgstr "Loading Project ... restoring" + +#: FlatCAMApp.py:11683 +msgid "Project loaded from" +msgstr "Project loaded from" + +#: FlatCAMApp.py:11752 +msgid "Redrawing all objects" +msgstr "Redrawing all objects" + +#: FlatCAMApp.py:11840 +msgid "Failed to load recent item list." +msgstr "Failed to load recent item list." + +#: FlatCAMApp.py:11847 +msgid "Failed to parse recent item list." +msgstr "Failed to parse recent item list." + +#: FlatCAMApp.py:11857 +msgid "Failed to load recent projects item list." +msgstr "Failed to load recent projects item list." + +#: FlatCAMApp.py:11864 +msgid "Failed to parse recent project item list." +msgstr "Failed to parse recent project item list." + +#: FlatCAMApp.py:11925 +msgid "Clear Recent projects" +msgstr "Clear Recent projects" + +#: FlatCAMApp.py:11949 +msgid "Clear Recent files" +msgstr "Clear Recent files" + +#: FlatCAMApp.py:11971 flatcamGUI/FlatCAMGUI.py:1348 +msgid "Shortcut Key List" +msgstr "Shortcut Key List" + +#: FlatCAMApp.py:12051 +msgid "Selected Tab - Choose an Item from Project Tab" +msgstr "Selected Tab - Choose an Item from Project Tab" + +#: FlatCAMApp.py:12052 +msgid "Details" +msgstr "Details" + +#: FlatCAMApp.py:12054 +msgid "The normal flow when working in FlatCAM is the following:" +msgstr "The normal flow when working in FlatCAM is the following:" + +#: FlatCAMApp.py:12055 +msgid "" +"Load/Import a Gerber, Excellon, Gcode, DXF, Raster Image or SVG file into " +"FlatCAM using either the toolbars, key shortcuts or even dragging and " +"dropping the files on the GUI." +msgstr "" +"Load/Import a Gerber, Excellon, Gcode, DXF, Raster Image or SVG file into " +"FlatCAM using either the toolbars, key shortcuts or even dragging and " +"dropping the files on the GUI." + +#: FlatCAMApp.py:12058 +msgid "" +"You can also load a FlatCAM project by double clicking on the project file, " +"drag and drop of the file into the FLATCAM GUI or through the menu (or " +"toolbar) actions offered within the app." +msgstr "" +"You can also load a FlatCAM project by double clicking on the project file, " +"drag and drop of the file into the FLATCAM GUI or through the menu (or " +"toolbar) actions offered within the app." + +#: FlatCAMApp.py:12061 +msgid "" +"Once an object is available in the Project Tab, by selecting it and then " +"focusing on SELECTED TAB (more simpler is to double click the object name in " +"the Project Tab, SELECTED TAB will be updated with the object properties " +"according to its kind: Gerber, Excellon, Geometry or CNCJob object." +msgstr "" +"Once an object is available in the Project Tab, by selecting it and then " +"focusing on SELECTED TAB (more simpler is to double click the object name in " +"the Project Tab, SELECTED TAB will be updated with the object properties " +"according to its kind: Gerber, Excellon, Geometry or CNCJob object." + +#: FlatCAMApp.py:12065 +msgid "" +"If the selection of the object is done on the canvas by single click " +"instead, and the SELECTED TAB is in focus, again the object properties will " +"be displayed into the Selected Tab. Alternatively, double clicking on the " +"object on the canvas will bring the SELECTED TAB and populate it even if it " +"was out of focus." +msgstr "" +"If the selection of the object is done on the canvas by single click " +"instead, and the SELECTED TAB is in focus, again the object properties will " +"be displayed into the Selected Tab. Alternatively, double clicking on the " +"object on the canvas will bring the SELECTED TAB and populate it even if it " +"was out of focus." + +#: FlatCAMApp.py:12069 +msgid "" +"You can change the parameters in this screen and the flow direction is like " +"this:" +msgstr "" +"You can change the parameters in this screen and the flow direction is like " +"this:" + +#: FlatCAMApp.py:12070 +msgid "" +"Gerber/Excellon Object --> Change Parameter --> Generate Geometry --> " +"Geometry Object --> Add tools (change param in Selected Tab) --> Generate " +"CNCJob --> CNCJob Object --> Verify GCode (through Edit CNC Code) and/or " +"append/prepend to GCode (again, done in SELECTED TAB) --> Save GCode." +msgstr "" +"Gerber/Excellon Object --> Change Parameter --> Generate Geometry --> " +"Geometry Object --> Add tools (change param in Selected Tab) --> Generate " +"CNCJob --> CNCJob Object --> Verify GCode (through Edit CNC Code) and/or " +"append/prepend to GCode (again, done in SELECTED TAB) --> Save GCode." + +#: FlatCAMApp.py:12074 +msgid "" +"A list of key shortcuts is available through an menu entry in Help --> " +"Shortcuts List or through its own key shortcut: F3." +msgstr "" +"A list of key shortcuts is available through an menu entry in Help --> " +"Shortcuts List or through its own key shortcut: F3." + +#: FlatCAMApp.py:12138 +msgid "Failed checking for latest version. Could not connect." +msgstr "Failed checking for latest version. Could not connect." + +#: FlatCAMApp.py:12145 +msgid "Could not parse information about latest version." +msgstr "Could not parse information about latest version." + +#: FlatCAMApp.py:12155 +msgid "FlatCAM is up to date!" +msgstr "FlatCAM is up to date!" + +#: FlatCAMApp.py:12160 +msgid "Newer Version Available" +msgstr "Newer Version Available" + +#: FlatCAMApp.py:12162 +msgid "There is a newer version of FlatCAM available for download:" +msgstr "There is a newer version of FlatCAM available for download:" + +#: FlatCAMApp.py:12166 +msgid "info" +msgstr "info" + +#: FlatCAMApp.py:12194 +msgid "" +"OpenGL canvas initialization failed. HW or HW configuration not supported." +"Change the graphic engine to Legacy(2D) in Edit -> Preferences -> General " +"tab.\n" +"\n" +msgstr "" +"OpenGL canvas initialization failed. HW or HW configuration not supported." +"Change the graphic engine to Legacy(2D) in Edit -> Preferences -> General " +"tab.\n" +"\n" + +#: FlatCAMApp.py:12273 +msgid "All plots disabled." +msgstr "All plots disabled." + +#: FlatCAMApp.py:12280 +msgid "All non selected plots disabled." +msgstr "All non selected plots disabled." + +#: FlatCAMApp.py:12287 +msgid "All plots enabled." +msgstr "All plots enabled." + +#: FlatCAMApp.py:12293 +msgid "Selected plots enabled..." +msgstr "Selected plots enabled..." + +#: FlatCAMApp.py:12301 +msgid "Selected plots disabled..." +msgstr "Selected plots disabled..." + +#: FlatCAMApp.py:12334 +msgid "Enabling plots ..." +msgstr "Enabling plots ..." + +#: FlatCAMApp.py:12386 +msgid "Disabling plots ..." +msgstr "Disabling plots ..." + +#: FlatCAMApp.py:12409 +msgid "Working ..." +msgstr "Working ..." + +#: FlatCAMApp.py:12464 flatcamGUI/FlatCAMGUI.py:688 +msgid "Red" +msgstr "Red" + +#: FlatCAMApp.py:12466 flatcamGUI/FlatCAMGUI.py:691 +msgid "Blue" +msgstr "Blue" + +#: FlatCAMApp.py:12469 flatcamGUI/FlatCAMGUI.py:694 +msgid "Yellow" +msgstr "Yellow" + +#: FlatCAMApp.py:12471 flatcamGUI/FlatCAMGUI.py:697 +msgid "Green" +msgstr "Green" + +#: FlatCAMApp.py:12473 flatcamGUI/FlatCAMGUI.py:700 +msgid "Purple" +msgstr "Purple" + +#: FlatCAMApp.py:12475 flatcamGUI/FlatCAMGUI.py:703 +msgid "Brown" +msgstr "Brown" + +#: FlatCAMApp.py:12477 FlatCAMApp.py:12533 flatcamGUI/FlatCAMGUI.py:706 +msgid "White" +msgstr "White" + +#: FlatCAMApp.py:12479 flatcamGUI/FlatCAMGUI.py:709 +msgid "Black" +msgstr "Black" + +#: FlatCAMApp.py:12482 flatcamGUI/FlatCAMGUI.py:714 +msgid "Custom" +msgstr "Custom" + +#: FlatCAMApp.py:12492 flatcamGUI/FlatCAMGUI.py:722 +msgid "Default" +msgstr "Default" + +#: FlatCAMApp.py:12516 flatcamGUI/FlatCAMGUI.py:719 +msgid "Opacity" +msgstr "Opacity" + +#: FlatCAMApp.py:12518 +msgid "Set alpha level ..." +msgstr "Set alpha level ..." + +#: FlatCAMApp.py:12518 flatcamGUI/PreferencesUI.py:6900 +#: flatcamGUI/PreferencesUI.py:8230 flatcamGUI/PreferencesUI.py:8444 +#: flatcamTools/ToolExtractDrills.py:164 flatcamTools/ToolExtractDrills.py:285 +#: flatcamTools/ToolPunchGerber.py:192 flatcamTools/ToolPunchGerber.py:308 +#: flatcamTools/ToolTransform.py:357 +msgid "Value" +msgstr "Value" + +#: FlatCAMApp.py:12594 +msgid "Saving FlatCAM Project" +msgstr "Saving FlatCAM Project" + +#: FlatCAMApp.py:12615 FlatCAMApp.py:12651 +msgid "Project saved to" +msgstr "Project saved to" + +#: FlatCAMApp.py:12622 +msgid "The object is used by another application." +msgstr "The object is used by another application." + +#: FlatCAMApp.py:12636 +msgid "Failed to verify project file" +msgstr "Failed to verify project file" + +#: FlatCAMApp.py:12636 FlatCAMApp.py:12644 FlatCAMApp.py:12654 +msgid "Retry to save it." +msgstr "Retry to save it." + +#: FlatCAMApp.py:12644 FlatCAMApp.py:12654 +msgid "Failed to parse saved project file" +msgstr "Failed to parse saved project file" + +#: FlatCAMBookmark.py:57 FlatCAMBookmark.py:84 +msgid "Title" +msgstr "Title" + +#: FlatCAMBookmark.py:58 FlatCAMBookmark.py:88 +msgid "Web Link" +msgstr "Web Link" + +#: FlatCAMBookmark.py:62 +msgid "" +"Index.\n" +"The rows in gray color will populate the Bookmarks menu.\n" +"The number of gray colored rows is set in Preferences." +msgstr "" +"Index.\n" +"The rows in gray color will populate the Bookmarks menu.\n" +"The number of gray colored rows is set in Preferences." + +#: FlatCAMBookmark.py:66 +msgid "" +"Description of the link that is set as an menu action.\n" +"Try to keep it short because it is installed as a menu item." +msgstr "" +"Description of the link that is set as an menu action.\n" +"Try to keep it short because it is installed as a menu item." + +#: FlatCAMBookmark.py:69 +msgid "Web Link. E.g: https://your_website.org " +msgstr "Web Link. E.g: https://your_website.org " + +#: FlatCAMBookmark.py:78 +msgid "New Bookmark" +msgstr "New Bookmark" + +#: FlatCAMBookmark.py:97 +msgid "Add Entry" +msgstr "Add Entry" + +#: FlatCAMBookmark.py:98 +msgid "Remove Entry" +msgstr "Remove Entry" + +#: FlatCAMBookmark.py:99 +msgid "Export List" +msgstr "Export List" + +#: FlatCAMBookmark.py:100 +msgid "Import List" +msgstr "Import List" + +#: FlatCAMBookmark.py:181 +msgid "Title entry is empty." +msgstr "Title entry is empty." + +#: FlatCAMBookmark.py:190 +msgid "Web link entry is empty." +msgstr "Web link entry is empty." + +#: FlatCAMBookmark.py:198 +msgid "Either the Title or the Weblink already in the table." +msgstr "Either the Title or the Weblink already in the table." + +#: FlatCAMBookmark.py:218 +msgid "Bookmark added." +msgstr "Bookmark added." + +#: FlatCAMBookmark.py:235 +msgid "This bookmark can not be removed" +msgstr "This bookmark can not be removed" + +#: FlatCAMBookmark.py:266 +msgid "Bookmark removed." +msgstr "Bookmark removed." + +#: FlatCAMBookmark.py:281 +msgid "Export FlatCAM Bookmarks" +msgstr "Export FlatCAM Bookmarks" + +#: FlatCAMBookmark.py:284 flatcamGUI/FlatCAMGUI.py:509 +msgid "Bookmarks" +msgstr "Bookmarks" + +#: FlatCAMBookmark.py:310 FlatCAMBookmark.py:340 +msgid "Could not load bookmarks file." +msgstr "Could not load bookmarks file." + +#: FlatCAMBookmark.py:320 +msgid "Failed to write bookmarks to file." +msgstr "Failed to write bookmarks to file." + +#: FlatCAMBookmark.py:322 +msgid "Exported bookmarks to" +msgstr "Exported bookmarks to" + +#: FlatCAMBookmark.py:328 +msgid "Import FlatCAM Bookmarks" +msgstr "Import FlatCAM Bookmarks" + +#: FlatCAMBookmark.py:347 +msgid "Imported Bookmarks from" +msgstr "Imported Bookmarks from" + +#: FlatCAMCommon.py:29 +msgid "The user requested a graceful exit of the current task." +msgstr "The user requested a graceful exit of the current task." + +#: FlatCAMDB.py:86 +msgid "Add Geometry Tool in DB" +msgstr "Add Geometry Tool in DB" + +#: FlatCAMDB.py:88 FlatCAMDB.py:1643 +msgid "" +"Add a new tool in the Tools Database.\n" +"It will be used in the Geometry UI.\n" +"You can edit it after it is added." +msgstr "" +"Add a new tool in the Tools Database.\n" +"It will be used in the Geometry UI.\n" +"You can edit it after it is added." + +#: FlatCAMDB.py:102 FlatCAMDB.py:1657 +msgid "Delete Tool from DB" +msgstr "Delete Tool from DB" + +#: FlatCAMDB.py:104 FlatCAMDB.py:1659 +msgid "Remove a selection of tools in the Tools Database." +msgstr "Remove a selection of tools in the Tools Database." + +#: FlatCAMDB.py:108 FlatCAMDB.py:1663 +msgid "Export DB" +msgstr "Export DB" + +#: FlatCAMDB.py:110 FlatCAMDB.py:1665 +msgid "Save the Tools Database to a custom text file." +msgstr "Save the Tools Database to a custom text file." + +#: FlatCAMDB.py:114 FlatCAMDB.py:1669 +msgid "Import DB" +msgstr "Import DB" + +#: FlatCAMDB.py:116 FlatCAMDB.py:1671 +msgid "Load the Tools Database information's from a custom text file." +msgstr "Load the Tools Database information's from a custom text file." + +#: FlatCAMDB.py:120 FlatCAMDB.py:1675 +msgid "Add Tool from Tools DB" +msgstr "Add Tool from Tools DB" + +#: FlatCAMDB.py:122 FlatCAMDB.py:1677 +msgid "" +"Add a new tool in the Tools Table of the\n" +"active Geometry object after selecting a tool\n" +"in the Tools Database." +msgstr "" +"Add a new tool in the Tools Table of the\n" +"active Geometry object after selecting a tool\n" +"in the Tools Database." + +#: FlatCAMDB.py:158 FlatCAMDB.py:833 FlatCAMDB.py:1087 +msgid "Tool Name" +msgstr "Tool Name" + +#: FlatCAMDB.py:159 FlatCAMDB.py:835 FlatCAMDB.py:1100 +#: flatcamEditors/FlatCAMExcEditor.py:1604 flatcamGUI/ObjectUI.py:1344 +#: flatcamGUI/ObjectUI.py:1582 flatcamGUI/PreferencesUI.py:5971 +#: flatcamTools/ToolNCC.py:278 flatcamTools/ToolNCC.py:287 +#: flatcamTools/ToolPaint.py:261 +msgid "Tool Dia" +msgstr "Tool Dia" + +#: FlatCAMDB.py:160 FlatCAMDB.py:837 FlatCAMDB.py:1281 +#: flatcamGUI/ObjectUI.py:1557 +msgid "Tool Offset" +msgstr "Tool Offset" + +#: FlatCAMDB.py:161 FlatCAMDB.py:839 FlatCAMDB.py:1298 +msgid "Custom Offset" +msgstr "Custom Offset" + +#: FlatCAMDB.py:162 FlatCAMDB.py:841 FlatCAMDB.py:1265 +#: flatcamGUI/ObjectUI.py:308 flatcamGUI/PreferencesUI.py:2397 +#: flatcamGUI/PreferencesUI.py:5332 flatcamGUI/PreferencesUI.py:5901 +#: flatcamGUI/PreferencesUI.py:5911 flatcamTools/ToolNCC.py:213 +#: flatcamTools/ToolNCC.py:227 flatcamTools/ToolPaint.py:196 +msgid "Tool Type" +msgstr "Tool Type" + +#: FlatCAMDB.py:163 FlatCAMDB.py:843 FlatCAMDB.py:1113 +msgid "Tool Shape" +msgstr "Tool Shape" + +#: FlatCAMDB.py:164 FlatCAMDB.py:846 FlatCAMDB.py:1129 +#: flatcamGUI/ObjectUI.py:349 flatcamGUI/ObjectUI.py:899 +#: flatcamGUI/ObjectUI.py:1702 flatcamGUI/ObjectUI.py:2255 +#: flatcamGUI/PreferencesUI.py:2437 flatcamGUI/PreferencesUI.py:3311 +#: flatcamGUI/PreferencesUI.py:4241 flatcamGUI/PreferencesUI.py:5377 +#: flatcamGUI/PreferencesUI.py:5666 flatcamGUI/PreferencesUI.py:5944 +#: flatcamGUI/PreferencesUI.py:5952 flatcamGUI/PreferencesUI.py:6635 +#: flatcamTools/ToolCalculators.py:114 flatcamTools/ToolCutOut.py:138 +#: flatcamTools/ToolNCC.py:260 flatcamTools/ToolNCC.py:268 +#: flatcamTools/ToolPaint.py:243 +msgid "Cut Z" +msgstr "Cut Z" + +#: FlatCAMDB.py:165 FlatCAMDB.py:848 FlatCAMDB.py:1143 +msgid "MultiDepth" +msgstr "MultiDepth" + +#: FlatCAMDB.py:166 FlatCAMDB.py:850 FlatCAMDB.py:1156 +msgid "DPP" +msgstr "DPP" + +#: FlatCAMDB.py:167 FlatCAMDB.py:852 FlatCAMDB.py:1312 +msgid "V-Dia" +msgstr "V-Dia" + +#: FlatCAMDB.py:168 FlatCAMDB.py:854 FlatCAMDB.py:1326 +msgid "V-Angle" +msgstr "V-Angle" + +#: FlatCAMDB.py:169 FlatCAMDB.py:856 FlatCAMDB.py:1170 +#: flatcamGUI/ObjectUI.py:945 flatcamGUI/ObjectUI.py:1749 +#: flatcamGUI/PreferencesUI.py:3352 flatcamGUI/PreferencesUI.py:4294 +#: flatcamGUI/PreferencesUI.py:8041 flatcamObjects/FlatCAMExcellon.py:1316 +#: flatcamObjects/FlatCAMGeometry.py:1552 flatcamTools/ToolCalibration.py:74 +msgid "Travel Z" +msgstr "Travel Z" + +#: FlatCAMDB.py:170 FlatCAMDB.py:858 +msgid "FR" +msgstr "FR" + +#: FlatCAMDB.py:171 FlatCAMDB.py:860 +msgid "FR Z" +msgstr "FR Z" + +#: FlatCAMDB.py:172 FlatCAMDB.py:862 FlatCAMDB.py:1340 +msgid "FR Rapids" +msgstr "FR Rapids" + +#: FlatCAMDB.py:173 FlatCAMDB.py:864 FlatCAMDB.py:1213 +#: flatcamGUI/PreferencesUI.py:3440 +msgid "Spindle Speed" +msgstr "Spindle Speed" + +#: FlatCAMDB.py:174 FlatCAMDB.py:866 FlatCAMDB.py:1228 +#: flatcamGUI/ObjectUI.py:1063 flatcamGUI/ObjectUI.py:1856 +msgid "Dwell" +msgstr "Dwell" + +#: FlatCAMDB.py:175 FlatCAMDB.py:868 FlatCAMDB.py:1241 +msgid "Dwelltime" +msgstr "Dwelltime" + +#: FlatCAMDB.py:176 FlatCAMDB.py:870 flatcamGUI/ObjectUI.py:2013 +#: flatcamGUI/PreferencesUI.py:3475 flatcamGUI/PreferencesUI.py:4447 +#: flatcamGUI/PreferencesUI.py:7148 flatcamTools/ToolSolderPaste.py:335 +msgid "Preprocessor" +msgstr "Preprocessor" + +#: FlatCAMDB.py:177 FlatCAMDB.py:872 FlatCAMDB.py:1356 +msgid "ExtraCut" +msgstr "ExtraCut" + +#: FlatCAMDB.py:178 FlatCAMDB.py:874 FlatCAMDB.py:1371 +msgid "E-Cut Length" +msgstr "E-Cut Length" + +#: FlatCAMDB.py:179 FlatCAMDB.py:876 +msgid "Toolchange" +msgstr "Toolchange" + +#: FlatCAMDB.py:180 FlatCAMDB.py:878 +msgid "Toolchange XY" +msgstr "Toolchange XY" + +#: FlatCAMDB.py:181 FlatCAMDB.py:880 flatcamGUI/PreferencesUI.py:3378 +#: flatcamGUI/PreferencesUI.py:4324 flatcamGUI/PreferencesUI.py:8078 +#: flatcamTools/ToolCalibration.py:111 +msgid "Toolchange Z" +msgstr "Toolchange Z" + +#: FlatCAMDB.py:182 FlatCAMDB.py:882 flatcamGUI/ObjectUI.py:1192 +#: flatcamGUI/PreferencesUI.py:3586 flatcamGUI/PreferencesUI.py:4493 +msgid "Start Z" +msgstr "Start Z" + +#: FlatCAMDB.py:183 FlatCAMDB.py:885 +msgid "End Z" +msgstr "End Z" + +#: FlatCAMDB.py:187 +msgid "Tool Index." +msgstr "Tool Index." + +#: FlatCAMDB.py:189 FlatCAMDB.py:1089 +msgid "" +"Tool name.\n" +"This is not used in the app, it's function\n" +"is to serve as a note for the user." +msgstr "" +"Tool name.\n" +"This is not used in the app, it's function\n" +"is to serve as a note for the user." + +#: FlatCAMDB.py:193 FlatCAMDB.py:1102 +msgid "Tool Diameter." +msgstr "Tool Diameter." + +#: FlatCAMDB.py:195 FlatCAMDB.py:1283 +msgid "" +"Tool Offset.\n" +"Can be of a few types:\n" +"Path = zero offset\n" +"In = offset inside by half of tool diameter\n" +"Out = offset outside by half of tool diameter\n" +"Custom = custom offset using the Custom Offset value" +msgstr "" +"Tool Offset.\n" +"Can be of a few types:\n" +"Path = zero offset\n" +"In = offset inside by half of tool diameter\n" +"Out = offset outside by half of tool diameter\n" +"Custom = custom offset using the Custom Offset value" + +#: FlatCAMDB.py:202 FlatCAMDB.py:1300 +msgid "" +"Custom Offset.\n" +"A value to be used as offset from the current path." +msgstr "" +"Custom Offset.\n" +"A value to be used as offset from the current path." + +#: FlatCAMDB.py:205 FlatCAMDB.py:1267 +msgid "" +"Tool Type.\n" +"Can be:\n" +"Iso = isolation cut\n" +"Rough = rough cut, low feedrate, multiple passes\n" +"Finish = finishing cut, high feedrate" +msgstr "" +"Tool Type.\n" +"Can be:\n" +"Iso = isolation cut\n" +"Rough = rough cut, low feedrate, multiple passes\n" +"Finish = finishing cut, high feedrate" + +#: FlatCAMDB.py:211 FlatCAMDB.py:1115 +msgid "" +"Tool Shape. \n" +"Can be:\n" +"C1 ... C4 = circular tool with x flutes\n" +"B = ball tip milling tool\n" +"V = v-shape milling tool" +msgstr "" +"Tool Shape. \n" +"Can be:\n" +"C1 ... C4 = circular tool with x flutes\n" +"B = ball tip milling tool\n" +"V = v-shape milling tool" + +#: FlatCAMDB.py:217 FlatCAMDB.py:1131 +msgid "" +"Cutting Depth.\n" +"The depth at which to cut into material." +msgstr "" +"Cutting Depth.\n" +"The depth at which to cut into material." + +#: FlatCAMDB.py:220 FlatCAMDB.py:1145 +msgid "" +"Multi Depth.\n" +"Selecting this will allow cutting in multiple passes,\n" +"each pass adding a DPP parameter depth." +msgstr "" +"Multi Depth.\n" +"Selecting this will allow cutting in multiple passes,\n" +"each pass adding a DPP parameter depth." + +#: FlatCAMDB.py:224 FlatCAMDB.py:1158 +msgid "" +"DPP. Depth per Pass.\n" +"The value used to cut into material on each pass." +msgstr "" +"DPP. Depth per Pass.\n" +"The value used to cut into material on each pass." + +#: FlatCAMDB.py:227 FlatCAMDB.py:1314 +msgid "" +"V-Dia.\n" +"Diameter of the tip for V-Shape Tools." +msgstr "" +"V-Dia.\n" +"Diameter of the tip for V-Shape Tools." + +#: FlatCAMDB.py:230 FlatCAMDB.py:1328 +msgid "" +"V-Agle.\n" +"Angle at the tip for the V-Shape Tools." +msgstr "" +"V-Agle.\n" +"Angle at the tip for the V-Shape Tools." + +#: FlatCAMDB.py:233 FlatCAMDB.py:1172 +msgid "" +"Clearance Height.\n" +"Height at which the milling bit will travel between cuts,\n" +"above the surface of the material, avoiding all fixtures." +msgstr "" +"Clearance Height.\n" +"Height at which the milling bit will travel between cuts,\n" +"above the surface of the material, avoiding all fixtures." + +#: FlatCAMDB.py:237 +msgid "" +"FR. Feedrate\n" +"The speed on XY plane used while cutting into material." +msgstr "" +"FR. Feedrate\n" +"The speed on XY plane used while cutting into material." + +#: FlatCAMDB.py:240 +msgid "" +"FR Z. Feedrate Z\n" +"The speed on Z plane." +msgstr "" +"FR Z. Feedrate Z\n" +"The speed on Z plane." + +#: FlatCAMDB.py:243 FlatCAMDB.py:1342 +msgid "" +"FR Rapids. Feedrate Rapids\n" +"Speed used while moving as fast as possible.\n" +"This is used only by some devices that can't use\n" +"the G0 g-code command. Mostly 3D printers." +msgstr "" +"FR Rapids. Feedrate Rapids\n" +"Speed used while moving as fast as possible.\n" +"This is used only by some devices that can't use\n" +"the G0 g-code command. Mostly 3D printers." + +#: FlatCAMDB.py:248 FlatCAMDB.py:1215 +msgid "" +"Spindle Speed.\n" +"If it's left empty it will not be used.\n" +"The speed of the spindle in RPM." +msgstr "" +"Spindle Speed.\n" +"If it's left empty it will not be used.\n" +"The speed of the spindle in RPM." + +#: FlatCAMDB.py:252 FlatCAMDB.py:1230 +msgid "" +"Dwell.\n" +"Check this if a delay is needed to allow\n" +"the spindle motor to reach it's set speed." +msgstr "" +"Dwell.\n" +"Check this if a delay is needed to allow\n" +"the spindle motor to reach it's set speed." + +#: FlatCAMDB.py:256 FlatCAMDB.py:1243 +msgid "" +"Dwell Time.\n" +"A delay used to allow the motor spindle reach it's set speed." +msgstr "" +"Dwell Time.\n" +"A delay used to allow the motor spindle reach it's set speed." + +#: FlatCAMDB.py:259 +msgid "" +"Preprocessor.\n" +"A selection of files that will alter the generated G-code\n" +"to fit for a number of use cases." +msgstr "" +"Preprocessor.\n" +"A selection of files that will alter the generated G-code\n" +"to fit for a number of use cases." + +#: FlatCAMDB.py:263 FlatCAMDB.py:1358 +msgid "" +"Extra Cut.\n" +"If checked, after a isolation is finished an extra cut\n" +"will be added where the start and end of isolation meet\n" +"such as that this point is covered by this extra cut to\n" +"ensure a complete isolation." +msgstr "" +"Extra Cut.\n" +"If checked, after a isolation is finished an extra cut\n" +"will be added where the start and end of isolation meet\n" +"such as that this point is covered by this extra cut to\n" +"ensure a complete isolation." + +#: FlatCAMDB.py:269 FlatCAMDB.py:1373 +msgid "" +"Extra Cut length.\n" +"If checked, after a isolation is finished an extra cut\n" +"will be added where the start and end of isolation meet\n" +"such as that this point is covered by this extra cut to\n" +"ensure a complete isolation. This is the length of\n" +"the extra cut." +msgstr "" +"Extra Cut length.\n" +"If checked, after a isolation is finished an extra cut\n" +"will be added where the start and end of isolation meet\n" +"such as that this point is covered by this extra cut to\n" +"ensure a complete isolation. This is the length of\n" +"the extra cut." + +#: FlatCAMDB.py:276 +msgid "" +"Toolchange.\n" +"It will create a toolchange event.\n" +"The kind of toolchange is determined by\n" +"the preprocessor file." +msgstr "" +"Toolchange.\n" +"It will create a toolchange event.\n" +"The kind of toolchange is determined by\n" +"the preprocessor file." + +#: FlatCAMDB.py:281 +msgid "" +"Toolchange XY.\n" +"A set of coordinates in the format (x, y).\n" +"Will determine the cartesian position of the point\n" +"where the tool change event take place." +msgstr "" +"Toolchange XY.\n" +"A set of coordinates in the format (x, y).\n" +"Will determine the cartesian position of the point\n" +"where the tool change event take place." + +#: FlatCAMDB.py:286 +msgid "" +"Toolchange Z.\n" +"The position on Z plane where the tool change event take place." +msgstr "" +"Toolchange Z.\n" +"The position on Z plane where the tool change event take place." + +#: FlatCAMDB.py:289 +msgid "" +"Start Z.\n" +"If it's left empty it will not be used.\n" +"A position on Z plane to move immediately after job start." +msgstr "" +"Start Z.\n" +"If it's left empty it will not be used.\n" +"A position on Z plane to move immediately after job start." + +#: FlatCAMDB.py:293 +msgid "" +"End Z.\n" +"A position on Z plane to move immediately after job stop." +msgstr "" +"End Z.\n" +"A position on Z plane to move immediately after job stop." + +#: FlatCAMDB.py:305 FlatCAMDB.py:682 FlatCAMDB.py:716 FlatCAMDB.py:1891 +#: FlatCAMDB.py:2112 FlatCAMDB.py:2146 +msgid "Could not load Tools DB file." +msgstr "Could not load Tools DB file." + +#: FlatCAMDB.py:313 FlatCAMDB.py:724 FlatCAMDB.py:1899 FlatCAMDB.py:2154 +msgid "Failed to parse Tools DB file." +msgstr "Failed to parse Tools DB file." + +#: FlatCAMDB.py:316 FlatCAMDB.py:727 FlatCAMDB.py:1902 FlatCAMDB.py:2157 +msgid "Loaded FlatCAM Tools DB from" +msgstr "Loaded FlatCAM Tools DB from" + +#: FlatCAMDB.py:322 FlatCAMDB.py:1816 +msgid "Add to DB" +msgstr "Add to DB" + +#: FlatCAMDB.py:324 FlatCAMDB.py:1819 +msgid "Copy from DB" +msgstr "Copy from DB" + +#: FlatCAMDB.py:326 FlatCAMDB.py:1822 +msgid "Delete from DB" +msgstr "Delete from DB" + +#: FlatCAMDB.py:603 FlatCAMDB.py:2029 +msgid "Tool added to DB." +msgstr "Tool added to DB." + +#: FlatCAMDB.py:624 FlatCAMDB.py:2053 +msgid "Tool copied from Tools DB." +msgstr "Tool copied from Tools DB." + +#: FlatCAMDB.py:642 FlatCAMDB.py:2072 +msgid "Tool removed from Tools DB." +msgstr "Tool removed from Tools DB." + +#: FlatCAMDB.py:653 FlatCAMDB.py:2083 +msgid "Export Tools Database" +msgstr "Export Tools Database" + +#: FlatCAMDB.py:656 FlatCAMDB.py:2086 +msgid "Tools_Database" +msgstr "Tools_Database" + +#: FlatCAMDB.py:693 FlatCAMDB.py:696 FlatCAMDB.py:748 FlatCAMDB.py:2123 +#: FlatCAMDB.py:2126 FlatCAMDB.py:2178 +msgid "Failed to write Tools DB to file." +msgstr "Failed to write Tools DB to file." + +#: FlatCAMDB.py:699 FlatCAMDB.py:2129 +msgid "Exported Tools DB to" +msgstr "Exported Tools DB to" + +#: FlatCAMDB.py:706 FlatCAMDB.py:2136 +msgid "Import FlatCAM Tools DB" +msgstr "Import FlatCAM Tools DB" + +#: FlatCAMDB.py:752 FlatCAMDB.py:2182 +msgid "Saved Tools DB." +msgstr "Saved Tools DB." + +#: FlatCAMDB.py:899 FlatCAMDB.py:2365 +msgid "No Tool/row selected in the Tools Database table" +msgstr "No Tool/row selected in the Tools Database table" + +#: FlatCAMDB.py:917 FlatCAMDB.py:2382 +msgid "Cancelled adding tool from DB." +msgstr "Cancelled adding tool from DB." + +#: FlatCAMDB.py:1018 +msgid "Basic Geo Parameters" +msgstr "Basic Geo Parameters" + +#: FlatCAMDB.py:1030 +msgid "Advanced Geo Parameters" +msgstr "Advanced Geo Parameters" + +#: FlatCAMDB.py:1042 +msgid "NCC Parameters" +msgstr "NCC Parameters" + +#: FlatCAMDB.py:1054 +msgid "Paint Parameters" +msgstr "Paint Parameters" + +#: FlatCAMDB.py:1185 flatcamGUI/ObjectUI.py:966 flatcamGUI/ObjectUI.py:1768 +#: flatcamGUI/PreferencesUI.py:4378 flatcamGUI/PreferencesUI.py:7059 +#: flatcamTools/ToolSolderPaste.py:253 +msgid "Feedrate X-Y" +msgstr "Feedrate X-Y" + +#: FlatCAMDB.py:1187 +msgid "" +"Feedrate X-Y. Feedrate\n" +"The speed on XY plane used while cutting into material." +msgstr "" +"Feedrate X-Y. Feedrate\n" +"The speed on XY plane used while cutting into material." + +#: FlatCAMDB.py:1199 flatcamGUI/ObjectUI.py:981 flatcamGUI/ObjectUI.py:1782 +#: flatcamGUI/PreferencesUI.py:3425 flatcamGUI/PreferencesUI.py:4393 +#: flatcamGUI/PreferencesUI.py:7072 flatcamTools/ToolSolderPaste.py:265 +msgid "Feedrate Z" +msgstr "Feedrate Z" + +#: FlatCAMDB.py:1201 +msgid "" +"Feedrate Z\n" +"The speed on Z plane." +msgstr "" +"Feedrate Z\n" +"The speed on Z plane." + +#: FlatCAMDB.py:1399 flatcamGUI/ObjectUI.py:844 +#: flatcamGUI/PreferencesUI.py:3264 flatcamTools/ToolNCC.py:341 +msgid "Operation" +msgstr "Operation" + +#: FlatCAMDB.py:1401 flatcamTools/ToolNCC.py:343 +msgid "" +"The 'Operation' can be:\n" +"- Isolation -> will ensure that the non-copper clearing is always complete.\n" +"If it's not successful then the non-copper clearing will fail, too.\n" +"- Clear -> the regular non-copper clearing." +msgstr "" +"The 'Operation' can be:\n" +"- Isolation -> will ensure that the non-copper clearing is always complete.\n" +"If it's not successful then the non-copper clearing will fail, too.\n" +"- Clear -> the regular non-copper clearing." + +#: FlatCAMDB.py:1408 flatcamEditors/FlatCAMGrbEditor.py:2739 +#: flatcamGUI/GUIElements.py:2577 flatcamTools/ToolNCC.py:350 +msgid "Clear" +msgstr "Clear" + +#: FlatCAMDB.py:1409 flatcamTools/ToolNCC.py:351 flatcamTools/ToolNCC.py:1618 +msgid "Isolation" +msgstr "Isolation" + +#: FlatCAMDB.py:1417 flatcamGUI/ObjectUI.py:408 flatcamGUI/ObjectUI.py:866 +#: flatcamGUI/PreferencesUI.py:2257 flatcamGUI/PreferencesUI.py:3280 +#: flatcamGUI/PreferencesUI.py:4665 flatcamGUI/PreferencesUI.py:5416 +#: flatcamTools/ToolNCC.py:359 +msgid "Milling Type" +msgstr "Milling Type" + +#: FlatCAMDB.py:1419 FlatCAMDB.py:1427 flatcamGUI/PreferencesUI.py:5418 +#: flatcamGUI/PreferencesUI.py:5426 flatcamTools/ToolNCC.py:361 +#: flatcamTools/ToolNCC.py:369 +msgid "" +"Milling type when the selected tool is of type: 'iso_op':\n" +"- climb / best for precision milling and to reduce tool usage\n" +"- conventional / useful when there is no backlash compensation" +msgstr "" +"Milling type when the selected tool is of type: 'iso_op':\n" +"- climb / best for precision milling and to reduce tool usage\n" +"- conventional / useful when there is no backlash compensation" + +#: FlatCAMDB.py:1424 flatcamGUI/ObjectUI.py:414 +#: flatcamGUI/PreferencesUI.py:2264 flatcamGUI/PreferencesUI.py:4671 +#: flatcamGUI/PreferencesUI.py:5423 flatcamTools/ToolNCC.py:366 +msgid "Climb" +msgstr "Climb" + +#: FlatCAMDB.py:1425 flatcamGUI/ObjectUI.py:415 +#: flatcamGUI/PreferencesUI.py:2265 flatcamGUI/PreferencesUI.py:4672 +#: flatcamGUI/PreferencesUI.py:5424 flatcamTools/ToolNCC.py:367 +msgid "Conventional" +msgstr "Conventional" + +#: FlatCAMDB.py:1437 FlatCAMDB.py:1546 flatcamEditors/FlatCAMGeoEditor.py:451 +#: flatcamGUI/PreferencesUI.py:5461 flatcamGUI/PreferencesUI.py:6002 +#: flatcamTools/ToolNCC.py:382 flatcamTools/ToolPaint.py:329 +msgid "Overlap" +msgstr "Overlap" + +#: FlatCAMDB.py:1439 flatcamGUI/PreferencesUI.py:5463 +#: flatcamTools/ToolNCC.py:384 +msgid "" +"How much (percentage) of the tool width to overlap each tool pass.\n" +"Adjust the value starting with lower values\n" +"and increasing it if areas that should be cleared are still \n" +"not cleared.\n" +"Lower values = faster processing, faster execution on CNC.\n" +"Higher values = slow processing and slow execution on CNC\n" +"due of too many paths." +msgstr "" +"How much (percentage) of the tool width to overlap each tool pass.\n" +"Adjust the value starting with lower values\n" +"and increasing it if areas that should be cleared are still \n" +"not cleared.\n" +"Lower values = faster processing, faster execution on CNC.\n" +"Higher values = slow processing and slow execution on CNC\n" +"due of too many paths." + +#: FlatCAMDB.py:1458 FlatCAMDB.py:1567 flatcamEditors/FlatCAMGeoEditor.py:471 +#: flatcamGUI/PreferencesUI.py:5481 flatcamGUI/PreferencesUI.py:5723 +#: flatcamGUI/PreferencesUI.py:6022 flatcamGUI/PreferencesUI.py:7681 +#: flatcamGUI/PreferencesUI.py:7838 flatcamGUI/PreferencesUI.py:7923 +#: flatcamGUI/PreferencesUI.py:8570 flatcamGUI/PreferencesUI.py:8578 +#: flatcamTools/ToolCopperThieving.py:111 +#: flatcamTools/ToolCopperThieving.py:362 flatcamTools/ToolCutOut.py:190 +#: flatcamTools/ToolFiducials.py:172 flatcamTools/ToolInvertGerber.py:88 +#: flatcamTools/ToolInvertGerber.py:96 flatcamTools/ToolNCC.py:403 +#: flatcamTools/ToolPaint.py:350 +msgid "Margin" +msgstr "Margin" + +#: FlatCAMDB.py:1460 flatcamGUI/PreferencesUI.py:5483 +#: flatcamGUI/PreferencesUI.py:7683 flatcamGUI/PreferencesUI.py:7925 +#: flatcamGUI/PreferencesUI.py:7989 flatcamTools/ToolCopperThieving.py:113 +#: flatcamTools/ToolFiducials.py:174 flatcamTools/ToolFiducials.py:237 +#: flatcamTools/ToolNCC.py:405 +msgid "Bounding box margin." +msgstr "Bounding box margin." + +#: FlatCAMDB.py:1471 FlatCAMDB.py:1582 flatcamEditors/FlatCAMGeoEditor.py:485 +#: flatcamGUI/PreferencesUI.py:5494 flatcamGUI/PreferencesUI.py:6037 +#: flatcamGUI/PreferencesUI.py:8204 flatcamGUI/PreferencesUI.py:8417 +#: flatcamTools/ToolExtractDrills.py:128 flatcamTools/ToolNCC.py:416 +#: flatcamTools/ToolPaint.py:365 flatcamTools/ToolPunchGerber.py:139 +msgid "Method" +msgstr "Method" + +#: FlatCAMDB.py:1473 flatcamGUI/PreferencesUI.py:5496 +#: flatcamTools/ToolNCC.py:418 +msgid "" +"Algorithm for copper clearing:\n" +"- Standard: Fixed step inwards.\n" +"- Seed-based: Outwards from seed.\n" +"- Line-based: Parallel lines." +msgstr "" +"Algorithm for copper clearing:\n" +"- Standard: Fixed step inwards.\n" +"- Seed-based: Outwards from seed.\n" +"- Line-based: Parallel lines." + +#: FlatCAMDB.py:1481 FlatCAMDB.py:1596 flatcamEditors/FlatCAMGeoEditor.py:499 +#: flatcamGUI/PreferencesUI.py:5509 flatcamGUI/PreferencesUI.py:6056 +#: flatcamTools/ToolNCC.py:431 flatcamTools/ToolNCC.py:2390 +#: flatcamTools/ToolNCC.py:2419 flatcamTools/ToolNCC.py:2688 +#: flatcamTools/ToolNCC.py:2720 flatcamTools/ToolPaint.py:390 +#: flatcamTools/ToolPaint.py:1829 tclCommands/TclCommandCopperClear.py:126 +#: tclCommands/TclCommandCopperClear.py:134 tclCommands/TclCommandPaint.py:125 +msgid "Standard" +msgstr "Standard" + +#: FlatCAMDB.py:1481 FlatCAMDB.py:1596 flatcamEditors/FlatCAMGeoEditor.py:499 +#: flatcamEditors/FlatCAMGeoEditor.py:5156 flatcamGUI/PreferencesUI.py:5509 +#: flatcamGUI/PreferencesUI.py:6056 flatcamTools/ToolNCC.py:431 +#: flatcamTools/ToolPaint.py:390 flatcamTools/ToolPaint.py:699 +#: flatcamTools/ToolPaint.py:1857 tclCommands/TclCommandCopperClear.py:130 +#: tclCommands/TclCommandPaint.py:129 +msgid "Lines" +msgstr "Lines" + +#: FlatCAMDB.py:1489 FlatCAMDB.py:1607 flatcamGUI/PreferencesUI.py:5516 +#: flatcamGUI/PreferencesUI.py:6063 flatcamTools/ToolNCC.py:439 +#: flatcamTools/ToolPaint.py:401 +msgid "Connect" +msgstr "Connect" + +#: FlatCAMDB.py:1493 FlatCAMDB.py:1610 flatcamEditors/FlatCAMGeoEditor.py:508 +#: flatcamGUI/PreferencesUI.py:5518 flatcamGUI/PreferencesUI.py:6065 +#: flatcamTools/ToolNCC.py:443 flatcamTools/ToolPaint.py:404 +msgid "" +"Draw lines between resulting\n" +"segments to minimize tool lifts." +msgstr "" +"Draw lines between resulting\n" +"segments to minimize tool lifts." + +#: FlatCAMDB.py:1499 FlatCAMDB.py:1614 flatcamGUI/PreferencesUI.py:5525 +#: flatcamGUI/PreferencesUI.py:6071 flatcamTools/ToolNCC.py:449 +#: flatcamTools/ToolPaint.py:408 +msgid "Contour" +msgstr "Contour" + +#: FlatCAMDB.py:1503 FlatCAMDB.py:1617 flatcamEditors/FlatCAMGeoEditor.py:518 +#: flatcamGUI/PreferencesUI.py:5527 flatcamGUI/PreferencesUI.py:6073 +#: flatcamTools/ToolNCC.py:453 flatcamTools/ToolPaint.py:411 +msgid "" +"Cut around the perimeter of the polygon\n" +"to trim rough edges." +msgstr "" +"Cut around the perimeter of the polygon\n" +"to trim rough edges." + +#: FlatCAMDB.py:1509 flatcamEditors/FlatCAMGeoEditor.py:612 +#: flatcamEditors/FlatCAMGrbEditor.py:5145 flatcamGUI/ObjectUI.py:142 +#: flatcamGUI/ObjectUI.py:1496 flatcamGUI/ObjectUI.py:2245 +#: flatcamGUI/PreferencesUI.py:5534 flatcamGUI/PreferencesUI.py:6822 +#: flatcamTools/ToolNCC.py:459 flatcamTools/ToolTransform.py:28 +msgid "Offset" +msgstr "Offset" + +#: FlatCAMDB.py:1513 flatcamGUI/PreferencesUI.py:5536 +#: flatcamTools/ToolNCC.py:463 +msgid "" +"If used, it will add an offset to the copper features.\n" +"The copper clearing will finish to a distance\n" +"from the copper features.\n" +"The value can be between 0 and 10 FlatCAM units." +msgstr "" +"If used, it will add an offset to the copper features.\n" +"The copper clearing will finish to a distance\n" +"from the copper features.\n" +"The value can be between 0 and 10 FlatCAM units." + +#: FlatCAMDB.py:1548 flatcamEditors/FlatCAMGeoEditor.py:453 +#: flatcamGUI/PreferencesUI.py:6004 flatcamTools/ToolPaint.py:331 +msgid "" +"How much (percentage) of the tool width to overlap each tool pass.\n" +"Adjust the value starting with lower values\n" +"and increasing it if areas that should be painted are still \n" +"not painted.\n" +"Lower values = faster processing, faster execution on CNC.\n" +"Higher values = slow processing and slow execution on CNC\n" +"due of too many paths." +msgstr "" +"How much (percentage) of the tool width to overlap each tool pass.\n" +"Adjust the value starting with lower values\n" +"and increasing it if areas that should be painted are still \n" +"not painted.\n" +"Lower values = faster processing, faster execution on CNC.\n" +"Higher values = slow processing and slow execution on CNC\n" +"due of too many paths." + +#: FlatCAMDB.py:1569 flatcamEditors/FlatCAMGeoEditor.py:473 +#: flatcamGUI/PreferencesUI.py:6024 flatcamTools/ToolPaint.py:352 +msgid "" +"Distance by which to avoid\n" +"the edges of the polygon to\n" +"be painted." +msgstr "" +"Distance by which to avoid\n" +"the edges of the polygon to\n" +"be painted." + +#: FlatCAMDB.py:1584 flatcamGUI/PreferencesUI.py:6039 +#: flatcamTools/ToolPaint.py:367 +msgid "" +"Algorithm for painting:\n" +"- Standard: Fixed step inwards.\n" +"- Seed-based: Outwards from seed.\n" +"- Line-based: Parallel lines.\n" +"- Laser-lines: Active only for Gerber objects.\n" +"Will create lines that follow the traces.\n" +"- Combo: In case of failure a new method will be picked from the above\n" +"in the order specified." +msgstr "" +"Algorithm for painting:\n" +"- Standard: Fixed step inwards.\n" +"- Seed-based: Outwards from seed.\n" +"- Line-based: Parallel lines.\n" +"- Laser-lines: Active only for Gerber objects.\n" +"Will create lines that follow the traces.\n" +"- Combo: In case of failure a new method will be picked from the above\n" +"in the order specified." + +#: FlatCAMDB.py:1596 FlatCAMDB.py:1598 flatcamGUI/PreferencesUI.py:6056 +#: flatcamTools/ToolPaint.py:390 flatcamTools/ToolPaint.py:392 +#: flatcamTools/ToolPaint.py:693 flatcamTools/ToolPaint.py:698 +#: flatcamTools/ToolPaint.py:1871 tclCommands/TclCommandPaint.py:131 +msgid "Laser_lines" +msgstr "Laser_lines" + +#: FlatCAMDB.py:1596 flatcamGUI/PreferencesUI.py:6056 +#: flatcamTools/ToolPaint.py:390 flatcamTools/ToolPaint.py:2022 +#: tclCommands/TclCommandPaint.py:133 +msgid "Combo" +msgstr "Combo" + +#: FlatCAMDB.py:1641 +msgid "Add Tool in DB" +msgstr "Add Tool in DB" + +#: FlatCAMProcess.py:172 +msgid "processes running." +msgstr "processes running." + +#: FlatCAMTool.py:245 FlatCAMTool.py:252 flatcamGUI/ObjectUI.py:156 +#: flatcamGUI/ObjectUI.py:163 +msgid "Edited value is out of range" +msgstr "Edited value is out of range" + +#: FlatCAMTool.py:247 FlatCAMTool.py:254 flatcamGUI/ObjectUI.py:158 +#: flatcamGUI/ObjectUI.py:165 +msgid "Edited value is within limits." +msgstr "Edited value is within limits." + +#: FlatCAMTranslation.py:103 +msgid "The application will restart." +msgstr "The application will restart." + +#: FlatCAMTranslation.py:105 +msgid "Are you sure do you want to change the current language to" +msgstr "Are you sure do you want to change the current language to" + +#: FlatCAMTranslation.py:106 +msgid "Apply Language ..." +msgstr "Apply Language ..." + +#: ObjectCollection.py:511 +#, python-brace-format +msgid "Object renamed from {old} to {new}" +msgstr "Object renamed from {old} to {new}" + +#: ObjectCollection.py:984 +msgid "Cause of error" +msgstr "Cause of error" + +#: camlib.py:597 +msgid "self.solid_geometry is neither BaseGeometry or list." +msgstr "self.solid_geometry is neither BaseGeometry or list." + +#: camlib.py:970 +msgid "Pass" +msgstr "Pass" + +#: camlib.py:981 flatcamGUI/PreferencesUI.py:2476 +#: flatcamObjects/FlatCAMGerber.py:496 flatcamTools/ToolCopperThieving.py:1016 +#: flatcamTools/ToolCopperThieving.py:1205 +#: flatcamTools/ToolCopperThieving.py:1217 flatcamTools/ToolNCC.py:2045 +#: flatcamTools/ToolNCC.py:2153 flatcamTools/ToolNCC.py:2167 +#: flatcamTools/ToolNCC.py:3098 flatcamTools/ToolNCC.py:3203 +#: flatcamTools/ToolNCC.py:3218 flatcamTools/ToolNCC.py:3484 +#: flatcamTools/ToolNCC.py:3585 flatcamTools/ToolNCC.py:3600 +msgid "Buffering" +msgstr "Buffering" + +#: camlib.py:990 +msgid "Get Exteriors" +msgstr "Get Exteriors" + +#: camlib.py:993 +msgid "Get Interiors" +msgstr "Get Interiors" + +#: camlib.py:2172 +msgid "Object was mirrored" +msgstr "Object was mirrored" + +#: camlib.py:2174 +msgid "Failed to mirror. No object selected" +msgstr "Failed to mirror. No object selected" + +#: camlib.py:2239 +msgid "Object was rotated" +msgstr "Object was rotated" + +#: camlib.py:2241 +msgid "Failed to rotate. No object selected" +msgstr "Failed to rotate. No object selected" + +#: camlib.py:2307 +msgid "Object was skewed" +msgstr "Object was skewed" + +#: camlib.py:2309 +msgid "Failed to skew. No object selected" +msgstr "Failed to skew. No object selected" + +#: camlib.py:2385 +msgid "Object was buffered" +msgstr "Object was buffered" + +#: camlib.py:2387 +msgid "Failed to buffer. No object selected" +msgstr "Failed to buffer. No object selected" + +#: camlib.py:2594 +msgid "There is no such parameter" +msgstr "There is no such parameter" + +#: camlib.py:2654 camlib.py:2887 camlib.py:3116 camlib.py:3338 +msgid "" +"The Cut Z parameter has positive value. It is the depth value to drill into " +"material.\n" +"The Cut Z parameter needs to have a negative value, assuming it is a typo " +"therefore the app will convert the value to negative. Check the resulting " +"CNC code (Gcode etc)." +msgstr "" +"The Cut Z parameter has positive value. It is the depth value to drill into " +"material.\n" +"The Cut Z parameter needs to have a negative value, assuming it is a typo " +"therefore the app will convert the value to negative. Check the resulting " +"CNC code (Gcode etc)." + +#: camlib.py:2662 camlib.py:2897 camlib.py:3126 camlib.py:3348 camlib.py:3634 +#: camlib.py:4020 +msgid "The Cut Z parameter is zero. There will be no cut, skipping file" +msgstr "The Cut Z parameter is zero. There will be no cut, skipping file" + +#: camlib.py:2673 camlib.py:3988 +msgid "" +"The Toolchange X,Y field in Edit -> Preferences has to be in the format (x, " +"y) \n" +"but now there is only one value, not two. " +msgstr "" +"The Toolchange X,Y field in Edit -> Preferences has to be in the format (x, " +"y) \n" +"but now there is only one value, not two. " + +#: camlib.py:2682 camlib.py:3585 camlib.py:3970 +msgid "" +"The End Move X,Y field in Edit -> Preferences has to be in the format (x, y) " +"but now there is only one value, not two." +msgstr "" +"The End Move X,Y field in Edit -> Preferences has to be in the format (x, y) " +"but now there is only one value, not two." + +#: camlib.py:2770 +msgid "Creating a list of points to drill..." +msgstr "Creating a list of points to drill..." + +#: camlib.py:2860 camlib.py:3732 camlib.py:4124 +msgid "Starting G-Code" +msgstr "Starting G-Code" + +#: camlib.py:3001 camlib.py:3220 camlib.py:3384 camlib.py:3745 camlib.py:4135 +msgid "Starting G-Code for tool with diameter" +msgstr "Starting G-Code for tool with diameter" + +#: camlib.py:3084 camlib.py:3302 camlib.py:3470 +msgid "G91 coordinates not implemented" +msgstr "G91 coordinates not implemented" + +#: camlib.py:3090 camlib.py:3309 camlib.py:3476 +msgid "The loaded Excellon file has no drills" +msgstr "The loaded Excellon file has no drills" + +#: camlib.py:3499 +msgid "Finished G-Code generation..." +msgstr "Finished G-Code generation..." + +#: camlib.py:3603 +msgid "" +"The Toolchange X,Y field in Edit -> Preferences has to be in the format (x, " +"y) \n" +"but now there is only one value, not two." +msgstr "" +"The Toolchange X,Y field in Edit -> Preferences has to be in the format (x, " +"y) \n" +"but now there is only one value, not two." + +#: camlib.py:3617 camlib.py:4003 +msgid "" +"Cut_Z parameter is None or zero. Most likely a bad combinations of other " +"parameters." +msgstr "" +"Cut_Z parameter is None or zero. Most likely a bad combinations of other " +"parameters." + +#: camlib.py:3626 camlib.py:4012 +msgid "" +"The Cut Z parameter has positive value. It is the depth value to cut into " +"material.\n" +"The Cut Z parameter needs to have a negative value, assuming it is a typo " +"therefore the app will convert the value to negative.Check the resulting CNC " +"code (Gcode etc)." +msgstr "" +"The Cut Z parameter has positive value. It is the depth value to cut into " +"material.\n" +"The Cut Z parameter needs to have a negative value, assuming it is a typo " +"therefore the app will convert the value to negative.Check the resulting CNC " +"code (Gcode etc)." + +#: camlib.py:3639 camlib.py:4026 +msgid "Travel Z parameter is None or zero." +msgstr "Travel Z parameter is None or zero." + +#: camlib.py:3644 camlib.py:4031 +msgid "" +"The Travel Z parameter has negative value. It is the height value to travel " +"between cuts.\n" +"The Z Travel parameter needs to have a positive value, assuming it is a typo " +"therefore the app will convert the value to positive.Check the resulting CNC " +"code (Gcode etc)." +msgstr "" +"The Travel Z parameter has negative value. It is the height value to travel " +"between cuts.\n" +"The Z Travel parameter needs to have a positive value, assuming it is a typo " +"therefore the app will convert the value to positive.Check the resulting CNC " +"code (Gcode etc)." + +#: camlib.py:3652 camlib.py:4039 +msgid "The Z Travel parameter is zero. This is dangerous, skipping file" +msgstr "The Z Travel parameter is zero. This is dangerous, skipping file" + +#: camlib.py:3671 camlib.py:4062 +msgid "Indexing geometry before generating G-Code..." +msgstr "Indexing geometry before generating G-Code..." + +#: camlib.py:3815 camlib.py:4204 +msgid "Finished G-Code generation" +msgstr "Finished G-Code generation" + +#: camlib.py:3815 +msgid "paths traced" +msgstr "paths traced" + +#: camlib.py:3865 +msgid "Expected a Geometry, got" +msgstr "Expected a Geometry, got" + +#: camlib.py:3872 +msgid "" +"Trying to generate a CNC Job from a Geometry object without solid_geometry." +msgstr "" +"Trying to generate a CNC Job from a Geometry object without solid_geometry." + +#: camlib.py:3913 +msgid "" +"The Tool Offset value is too negative to use for the current_geometry.\n" +"Raise the value (in module) and try again." +msgstr "" +"The Tool Offset value is too negative to use for the current_geometry.\n" +"Raise the value (in module) and try again." + +#: camlib.py:4204 +msgid " paths traced." +msgstr " paths traced." + +#: camlib.py:4232 +msgid "There is no tool data in the SolderPaste geometry." +msgstr "There is no tool data in the SolderPaste geometry." + +#: camlib.py:4321 +#| msgid "Finished SolderPste G-Code generation" +msgid "Finished SolderPaste G-Code generation" +msgstr "Finished SolderPaste G-Code generation" + +#: camlib.py:4321 +msgid "paths traced." +msgstr "paths traced." + +#: camlib.py:4581 +msgid "Parsing GCode file. Number of lines" +msgstr "Parsing GCode file. Number of lines" + +#: camlib.py:4688 +msgid "Creating Geometry from the parsed GCode file. " +msgstr "Creating Geometry from the parsed GCode file. " + +#: camlib.py:4831 camlib.py:5123 camlib.py:5234 camlib.py:5390 +msgid "G91 coordinates not implemented ..." +msgstr "G91 coordinates not implemented ..." + +#: camlib.py:4963 +msgid "Unifying Geometry from parsed Geometry segments" +msgstr "Unifying Geometry from parsed Geometry segments" + +#: flatcamEditors/FlatCAMExcEditor.py:50 flatcamEditors/FlatCAMExcEditor.py:74 +#: flatcamEditors/FlatCAMExcEditor.py:168 +#: flatcamEditors/FlatCAMExcEditor.py:385 +#: flatcamEditors/FlatCAMExcEditor.py:589 +#: flatcamEditors/FlatCAMGrbEditor.py:241 +#: flatcamEditors/FlatCAMGrbEditor.py:248 +msgid "Click to place ..." +msgstr "Click to place ..." + +#: flatcamEditors/FlatCAMExcEditor.py:58 +msgid "To add a drill first select a tool" +msgstr "To add a drill first select a tool" + +#: flatcamEditors/FlatCAMExcEditor.py:122 +msgid "Done. Drill added." +msgstr "Done. Drill added." + +#: flatcamEditors/FlatCAMExcEditor.py:176 +msgid "To add an Drill Array first select a tool in Tool Table" +msgstr "To add an Drill Array first select a tool in Tool Table" + +#: flatcamEditors/FlatCAMExcEditor.py:192 +#: flatcamEditors/FlatCAMExcEditor.py:415 +#: flatcamEditors/FlatCAMExcEditor.py:636 +#: flatcamEditors/FlatCAMExcEditor.py:1151 +#: flatcamEditors/FlatCAMExcEditor.py:1178 +#: flatcamEditors/FlatCAMGrbEditor.py:471 +#: flatcamEditors/FlatCAMGrbEditor.py:1935 +#: flatcamEditors/FlatCAMGrbEditor.py:1965 +msgid "Click on target location ..." +msgstr "Click on target location ..." + +#: flatcamEditors/FlatCAMExcEditor.py:211 +msgid "Click on the Drill Circular Array Start position" +msgstr "Click on the Drill Circular Array Start position" + +#: flatcamEditors/FlatCAMExcEditor.py:233 +#: flatcamEditors/FlatCAMExcEditor.py:677 +#: flatcamEditors/FlatCAMGrbEditor.py:516 +msgid "The value is not Float. Check for comma instead of dot separator." +msgstr "The value is not Float. Check for comma instead of dot separator." + +#: flatcamEditors/FlatCAMExcEditor.py:237 +msgid "The value is mistyped. Check the value" +msgstr "The value is mistyped. Check the value" + +#: flatcamEditors/FlatCAMExcEditor.py:336 +msgid "Too many drills for the selected spacing angle." +msgstr "Too many drills for the selected spacing angle." + +#: flatcamEditors/FlatCAMExcEditor.py:354 +msgid "Done. Drill Array added." +msgstr "Done. Drill Array added." + +#: flatcamEditors/FlatCAMExcEditor.py:394 +msgid "To add a slot first select a tool" +msgstr "To add a slot first select a tool" + +#: flatcamEditors/FlatCAMExcEditor.py:454 +#: flatcamEditors/FlatCAMExcEditor.py:461 +#: flatcamEditors/FlatCAMExcEditor.py:742 +#: flatcamEditors/FlatCAMExcEditor.py:749 +msgid "Value is missing or wrong format. Add it and retry." +msgstr "Value is missing or wrong format. Add it and retry." + +#: flatcamEditors/FlatCAMExcEditor.py:559 +msgid "Done. Adding Slot completed." +msgstr "Done. Adding Slot completed." + +#: flatcamEditors/FlatCAMExcEditor.py:597 +msgid "To add an Slot Array first select a tool in Tool Table" +msgstr "To add an Slot Array first select a tool in Tool Table" + +#: flatcamEditors/FlatCAMExcEditor.py:655 +msgid "Click on the Slot Circular Array Start position" +msgstr "Click on the Slot Circular Array Start position" + +#: flatcamEditors/FlatCAMExcEditor.py:680 +#: flatcamEditors/FlatCAMGrbEditor.py:519 +msgid "The value is mistyped. Check the value." +msgstr "The value is mistyped. Check the value." + +#: flatcamEditors/FlatCAMExcEditor.py:859 +msgid "Too many Slots for the selected spacing angle." +msgstr "Too many Slots for the selected spacing angle." + +#: flatcamEditors/FlatCAMExcEditor.py:882 +msgid "Done. Slot Array added." +msgstr "Done. Slot Array added." + +#: flatcamEditors/FlatCAMExcEditor.py:904 +msgid "Click on the Drill(s) to resize ..." +msgstr "Click on the Drill(s) to resize ..." + +#: flatcamEditors/FlatCAMExcEditor.py:934 +msgid "Resize drill(s) failed. Please enter a diameter for resize." +msgstr "Resize drill(s) failed. Please enter a diameter for resize." + +#: flatcamEditors/FlatCAMExcEditor.py:1112 +msgid "Done. Drill/Slot Resize completed." +msgstr "Done. Drill/Slot Resize completed." + +#: flatcamEditors/FlatCAMExcEditor.py:1115 +msgid "Cancelled. No drills/slots selected for resize ..." +msgstr "Cancelled. No drills/slots selected for resize ..." + +#: flatcamEditors/FlatCAMExcEditor.py:1153 +#: flatcamEditors/FlatCAMGrbEditor.py:1937 +msgid "Click on reference location ..." +msgstr "Click on reference location ..." + +#: flatcamEditors/FlatCAMExcEditor.py:1210 +msgid "Done. Drill(s) Move completed." +msgstr "Done. Drill(s) Move completed." + +#: flatcamEditors/FlatCAMExcEditor.py:1318 +msgid "Done. Drill(s) copied." +msgstr "Done. Drill(s) copied." + +#: flatcamEditors/FlatCAMExcEditor.py:1557 flatcamGUI/PreferencesUI.py:3829 +msgid "Excellon Editor" +msgstr "Excellon Editor" + +#: flatcamEditors/FlatCAMExcEditor.py:1564 +#: flatcamEditors/FlatCAMGrbEditor.py:2460 +msgid "Name:" +msgstr "Name:" + +#: flatcamEditors/FlatCAMExcEditor.py:1570 flatcamGUI/ObjectUI.py:760 +#: flatcamGUI/ObjectUI.py:1464 flatcamTools/ToolNCC.py:120 +#: flatcamTools/ToolPaint.py:115 flatcamTools/ToolSolderPaste.py:74 +msgid "Tools Table" +msgstr "Tools Table" + +#: flatcamEditors/FlatCAMExcEditor.py:1572 flatcamGUI/ObjectUI.py:762 +msgid "" +"Tools in this Excellon object\n" +"when are used for drilling." +msgstr "" +"Tools in this Excellon object\n" +"when are used for drilling." + +#: flatcamEditors/FlatCAMExcEditor.py:1584 +#: flatcamEditors/FlatCAMExcEditor.py:3066 flatcamGUI/ObjectUI.py:780 +#: flatcamObjects/FlatCAMExcellon.py:1098 +#: flatcamObjects/FlatCAMExcellon.py:1188 +#: flatcamObjects/FlatCAMExcellon.py:1373 flatcamTools/ToolNCC.py:132 +#: flatcamTools/ToolPaint.py:128 flatcamTools/ToolPcbWizard.py:76 +#: flatcamTools/ToolProperties.py:416 flatcamTools/ToolProperties.py:476 +#: flatcamTools/ToolSolderPaste.py:85 tclCommands/TclCommandDrillcncjob.py:193 +msgid "Diameter" +msgstr "Diameter" + +#: flatcamEditors/FlatCAMExcEditor.py:1592 +msgid "Add/Delete Tool" +msgstr "Add/Delete Tool" + +#: flatcamEditors/FlatCAMExcEditor.py:1594 +msgid "" +"Add/Delete a tool to the tool list\n" +"for this Excellon object." +msgstr "" +"Add/Delete a tool to the tool list\n" +"for this Excellon object." + +#: flatcamEditors/FlatCAMExcEditor.py:1606 flatcamGUI/ObjectUI.py:1584 +#: flatcamGUI/PreferencesUI.py:3860 +msgid "Diameter for the new tool" +msgstr "Diameter for the new tool" + +#: flatcamEditors/FlatCAMExcEditor.py:1616 +msgid "Add Tool" +msgstr "Add Tool" + +#: flatcamEditors/FlatCAMExcEditor.py:1618 +msgid "" +"Add a new tool to the tool list\n" +"with the diameter specified above." +msgstr "" +"Add a new tool to the tool list\n" +"with the diameter specified above." + +#: flatcamEditors/FlatCAMExcEditor.py:1630 +msgid "Delete Tool" +msgstr "Delete Tool" + +#: flatcamEditors/FlatCAMExcEditor.py:1632 +msgid "" +"Delete a tool in the tool list\n" +"by selecting a row in the tool table." +msgstr "" +"Delete a tool in the tool list\n" +"by selecting a row in the tool table." + +#: flatcamEditors/FlatCAMExcEditor.py:1650 flatcamGUI/FlatCAMGUI.py:2004 +msgid "Resize Drill(s)" +msgstr "Resize Drill(s)" + +#: flatcamEditors/FlatCAMExcEditor.py:1652 +msgid "Resize a drill or a selection of drills." +msgstr "Resize a drill or a selection of drills." + +#: flatcamEditors/FlatCAMExcEditor.py:1659 +msgid "Resize Dia" +msgstr "Resize Dia" + +#: flatcamEditors/FlatCAMExcEditor.py:1661 +msgid "Diameter to resize to." +msgstr "Diameter to resize to." + +#: flatcamEditors/FlatCAMExcEditor.py:1672 +msgid "Resize" +msgstr "Resize" + +#: flatcamEditors/FlatCAMExcEditor.py:1674 +msgid "Resize drill(s)" +msgstr "Resize drill(s)" + +#: flatcamEditors/FlatCAMExcEditor.py:1699 flatcamGUI/FlatCAMGUI.py:2003 +#: flatcamGUI/FlatCAMGUI.py:2255 +msgid "Add Drill Array" +msgstr "Add Drill Array" + +#: flatcamEditors/FlatCAMExcEditor.py:1701 +msgid "Add an array of drills (linear or circular array)" +msgstr "Add an array of drills (linear or circular array)" + +#: flatcamEditors/FlatCAMExcEditor.py:1707 +msgid "" +"Select the type of drills array to create.\n" +"It can be Linear X(Y) or Circular" +msgstr "" +"Select the type of drills array to create.\n" +"It can be Linear X(Y) or Circular" + +#: flatcamEditors/FlatCAMExcEditor.py:1710 +#: flatcamEditors/FlatCAMExcEditor.py:1924 +#: flatcamEditors/FlatCAMGrbEditor.py:2772 +msgid "Linear" +msgstr "Linear" + +#: flatcamEditors/FlatCAMExcEditor.py:1711 +#: flatcamEditors/FlatCAMExcEditor.py:1925 +#: flatcamEditors/FlatCAMGrbEditor.py:2773 flatcamGUI/ObjectUI.py:315 +#: flatcamGUI/PreferencesUI.py:5340 flatcamGUI/PreferencesUI.py:5909 +#: flatcamGUI/PreferencesUI.py:7971 flatcamGUI/PreferencesUI.py:8151 +#: flatcamGUI/PreferencesUI.py:8248 flatcamGUI/PreferencesUI.py:8363 +#: flatcamGUI/PreferencesUI.py:8462 flatcamTools/ToolExtractDrills.py:78 +#: flatcamTools/ToolExtractDrills.py:201 flatcamTools/ToolFiducials.py:220 +#: flatcamTools/ToolNCC.py:221 flatcamTools/ToolPaint.py:204 +#: flatcamTools/ToolPunchGerber.py:89 flatcamTools/ToolPunchGerber.py:229 +msgid "Circular" +msgstr "Circular" + +#: flatcamEditors/FlatCAMExcEditor.py:1719 flatcamGUI/PreferencesUI.py:3871 +msgid "Nr of drills" +msgstr "Nr of drills" + +#: flatcamEditors/FlatCAMExcEditor.py:1720 flatcamGUI/PreferencesUI.py:3873 +msgid "Specify how many drills to be in the array." +msgstr "Specify how many drills to be in the array." + +#: flatcamEditors/FlatCAMExcEditor.py:1738 +#: flatcamEditors/FlatCAMExcEditor.py:1788 +#: flatcamEditors/FlatCAMExcEditor.py:1860 +#: flatcamEditors/FlatCAMExcEditor.py:1953 +#: flatcamEditors/FlatCAMExcEditor.py:2004 +#: flatcamEditors/FlatCAMGrbEditor.py:1571 +#: flatcamEditors/FlatCAMGrbEditor.py:2801 +#: flatcamEditors/FlatCAMGrbEditor.py:2850 flatcamGUI/PreferencesUI.py:3981 +msgid "Direction" +msgstr "Direction" + +#: flatcamEditors/FlatCAMExcEditor.py:1740 +#: flatcamEditors/FlatCAMExcEditor.py:1955 +#: flatcamEditors/FlatCAMGrbEditor.py:2803 flatcamGUI/PreferencesUI.py:2718 +#: flatcamGUI/PreferencesUI.py:3889 flatcamGUI/PreferencesUI.py:4037 +msgid "" +"Direction on which the linear array is oriented:\n" +"- 'X' - horizontal axis \n" +"- 'Y' - vertical axis or \n" +"- 'Angle' - a custom angle for the array inclination" +msgstr "" +"Direction on which the linear array is oriented:\n" +"- 'X' - horizontal axis \n" +"- 'Y' - vertical axis or \n" +"- 'Angle' - a custom angle for the array inclination" + +#: flatcamEditors/FlatCAMExcEditor.py:1747 +#: flatcamEditors/FlatCAMExcEditor.py:1869 +#: flatcamEditors/FlatCAMExcEditor.py:1962 +#: flatcamEditors/FlatCAMGrbEditor.py:2810 flatcamGUI/PreferencesUI.py:2724 +#: flatcamGUI/PreferencesUI.py:3895 flatcamGUI/PreferencesUI.py:3990 +#: flatcamGUI/PreferencesUI.py:4043 flatcamGUI/PreferencesUI.py:6341 +#: flatcamTools/ToolFilm.py:256 +msgid "X" +msgstr "X" + +#: flatcamEditors/FlatCAMExcEditor.py:1748 +#: flatcamEditors/FlatCAMExcEditor.py:1870 +#: flatcamEditors/FlatCAMExcEditor.py:1963 +#: flatcamEditors/FlatCAMGrbEditor.py:2811 flatcamGUI/PreferencesUI.py:2725 +#: flatcamGUI/PreferencesUI.py:3896 flatcamGUI/PreferencesUI.py:3991 +#: flatcamGUI/PreferencesUI.py:4044 flatcamGUI/PreferencesUI.py:6342 +#: flatcamTools/ToolFilm.py:257 +msgid "Y" +msgstr "Y" + +#: flatcamEditors/FlatCAMExcEditor.py:1749 +#: flatcamEditors/FlatCAMExcEditor.py:1766 +#: flatcamEditors/FlatCAMExcEditor.py:1800 +#: flatcamEditors/FlatCAMExcEditor.py:1871 +#: flatcamEditors/FlatCAMExcEditor.py:1875 +#: flatcamEditors/FlatCAMExcEditor.py:1964 +#: flatcamEditors/FlatCAMExcEditor.py:1982 +#: flatcamEditors/FlatCAMExcEditor.py:2016 +#: flatcamEditors/FlatCAMGrbEditor.py:2812 +#: flatcamEditors/FlatCAMGrbEditor.py:2829 +#: flatcamEditors/FlatCAMGrbEditor.py:2865 flatcamGUI/PreferencesUI.py:2726 +#: flatcamGUI/PreferencesUI.py:2744 flatcamGUI/PreferencesUI.py:3897 +#: flatcamGUI/PreferencesUI.py:3916 flatcamGUI/PreferencesUI.py:3992 +#: flatcamGUI/PreferencesUI.py:3997 flatcamGUI/PreferencesUI.py:4045 +#: flatcamGUI/PreferencesUI.py:4066 flatcamGUI/PreferencesUI.py:6733 +#: flatcamTools/ToolDistance.py:120 flatcamTools/ToolDistanceMin.py:69 +#: flatcamTools/ToolTransform.py:60 +msgid "Angle" +msgstr "Angle" + +#: flatcamEditors/FlatCAMExcEditor.py:1753 +#: flatcamEditors/FlatCAMExcEditor.py:1968 +#: flatcamEditors/FlatCAMGrbEditor.py:2816 flatcamGUI/PreferencesUI.py:2732 +#: flatcamGUI/PreferencesUI.py:3903 flatcamGUI/PreferencesUI.py:4051 +msgid "Pitch" +msgstr "Pitch" + +#: flatcamEditors/FlatCAMExcEditor.py:1755 +#: flatcamEditors/FlatCAMExcEditor.py:1970 +#: flatcamEditors/FlatCAMGrbEditor.py:2818 flatcamGUI/PreferencesUI.py:2734 +#: flatcamGUI/PreferencesUI.py:3905 flatcamGUI/PreferencesUI.py:4053 +msgid "Pitch = Distance between elements of the array." +msgstr "Pitch = Distance between elements of the array." + +#: flatcamEditors/FlatCAMExcEditor.py:1768 +#: flatcamEditors/FlatCAMExcEditor.py:1984 +msgid "" +"Angle at which the linear array is placed.\n" +"The precision is of max 2 decimals.\n" +"Min value is: -360 degrees.\n" +"Max value is: 360.00 degrees." +msgstr "" +"Angle at which the linear array is placed.\n" +"The precision is of max 2 decimals.\n" +"Min value is: -360 degrees.\n" +"Max value is: 360.00 degrees." + +#: flatcamEditors/FlatCAMExcEditor.py:1789 +#: flatcamEditors/FlatCAMExcEditor.py:2005 +#: flatcamEditors/FlatCAMGrbEditor.py:2852 +msgid "" +"Direction for circular array.Can be CW = clockwise or CCW = counter " +"clockwise." +msgstr "" +"Direction for circular array.Can be CW = clockwise or CCW = counter " +"clockwise." + +#: flatcamEditors/FlatCAMExcEditor.py:1796 +#: flatcamEditors/FlatCAMExcEditor.py:2012 +#: flatcamEditors/FlatCAMGrbEditor.py:2860 flatcamGUI/PreferencesUI.py:2766 +#: flatcamGUI/PreferencesUI.py:3646 flatcamGUI/PreferencesUI.py:3939 +#: flatcamGUI/PreferencesUI.py:4089 flatcamGUI/PreferencesUI.py:4581 +msgid "CW" +msgstr "CW" + +#: flatcamEditors/FlatCAMExcEditor.py:1797 +#: flatcamEditors/FlatCAMExcEditor.py:2013 +#: flatcamEditors/FlatCAMGrbEditor.py:2861 flatcamGUI/PreferencesUI.py:2767 +#: flatcamGUI/PreferencesUI.py:3647 flatcamGUI/PreferencesUI.py:3940 +#: flatcamGUI/PreferencesUI.py:4090 flatcamGUI/PreferencesUI.py:4582 +msgid "CCW" +msgstr "CCW" + +#: flatcamEditors/FlatCAMExcEditor.py:1801 +#: flatcamEditors/FlatCAMExcEditor.py:2017 +#: flatcamEditors/FlatCAMGrbEditor.py:2867 flatcamGUI/PreferencesUI.py:2746 +#: flatcamGUI/PreferencesUI.py:2775 flatcamGUI/PreferencesUI.py:3918 +#: flatcamGUI/PreferencesUI.py:3948 flatcamGUI/PreferencesUI.py:4068 +#: flatcamGUI/PreferencesUI.py:4098 +msgid "Angle at which each element in circular array is placed." +msgstr "Angle at which each element in circular array is placed." + +#: flatcamEditors/FlatCAMExcEditor.py:1835 +msgid "Slot Parameters" +msgstr "Slot Parameters" + +#: flatcamEditors/FlatCAMExcEditor.py:1837 +msgid "" +"Parameters for adding a slot (hole with oval shape)\n" +"either single or as an part of an array." +msgstr "" +"Parameters for adding a slot (hole with oval shape)\n" +"either single or as an part of an array." + +#: flatcamEditors/FlatCAMExcEditor.py:1846 flatcamGUI/PreferencesUI.py:3965 +#: flatcamTools/ToolProperties.py:559 +msgid "Length" +msgstr "Length" + +#: flatcamEditors/FlatCAMExcEditor.py:1848 flatcamGUI/PreferencesUI.py:3967 +msgid "Length = The length of the slot." +msgstr "Length = The length of the slot." + +#: flatcamEditors/FlatCAMExcEditor.py:1862 flatcamGUI/PreferencesUI.py:3983 +msgid "" +"Direction on which the slot is oriented:\n" +"- 'X' - horizontal axis \n" +"- 'Y' - vertical axis or \n" +"- 'Angle' - a custom angle for the slot inclination" +msgstr "" +"Direction on which the slot is oriented:\n" +"- 'X' - horizontal axis \n" +"- 'Y' - vertical axis or \n" +"- 'Angle' - a custom angle for the slot inclination" + +#: flatcamEditors/FlatCAMExcEditor.py:1877 +msgid "" +"Angle at which the slot is placed.\n" +"The precision is of max 2 decimals.\n" +"Min value is: -360 degrees.\n" +"Max value is: 360.00 degrees." +msgstr "" +"Angle at which the slot is placed.\n" +"The precision is of max 2 decimals.\n" +"Min value is: -360 degrees.\n" +"Max value is: 360.00 degrees." + +#: flatcamEditors/FlatCAMExcEditor.py:1910 +msgid "Slot Array Parameters" +msgstr "Slot Array Parameters" + +#: flatcamEditors/FlatCAMExcEditor.py:1912 +msgid "Parameters for the array of slots (linear or circular array)" +msgstr "Parameters for the array of slots (linear or circular array)" + +#: flatcamEditors/FlatCAMExcEditor.py:1921 +msgid "" +"Select the type of slot array to create.\n" +"It can be Linear X(Y) or Circular" +msgstr "" +"Select the type of slot array to create.\n" +"It can be Linear X(Y) or Circular" + +#: flatcamEditors/FlatCAMExcEditor.py:1933 flatcamGUI/PreferencesUI.py:4022 +msgid "Nr of slots" +msgstr "Nr of slots" + +#: flatcamEditors/FlatCAMExcEditor.py:1934 flatcamGUI/PreferencesUI.py:4024 +msgid "Specify how many slots to be in the array." +msgstr "Specify how many slots to be in the array." + +#: flatcamEditors/FlatCAMExcEditor.py:2452 +#: flatcamObjects/FlatCAMExcellon.py:410 +msgid "Total Drills" +msgstr "Total Drills" + +#: flatcamEditors/FlatCAMExcEditor.py:2484 +#: flatcamObjects/FlatCAMExcellon.py:441 +msgid "Total Slots" +msgstr "Total Slots" + +#: flatcamEditors/FlatCAMExcEditor.py:2559 +#: flatcamEditors/FlatCAMGeoEditor.py:1076 +#: flatcamEditors/FlatCAMGeoEditor.py:1117 +#: flatcamEditors/FlatCAMGeoEditor.py:1145 +#: flatcamEditors/FlatCAMGeoEditor.py:1173 +#: flatcamEditors/FlatCAMGeoEditor.py:1217 +#: flatcamEditors/FlatCAMGeoEditor.py:1252 +#: flatcamEditors/FlatCAMGeoEditor.py:1280 +#: flatcamObjects/FlatCAMGeometry.py:571 flatcamObjects/FlatCAMGeometry.py:1005 +#: flatcamObjects/FlatCAMGeometry.py:1726 +#: flatcamObjects/FlatCAMGeometry.py:2370 flatcamTools/ToolNCC.py:1493 +#: flatcamTools/ToolPaint.py:1244 flatcamTools/ToolPaint.py:1415 +#: flatcamTools/ToolSolderPaste.py:883 flatcamTools/ToolSolderPaste.py:956 +msgid "Wrong value format entered, use a number." +msgstr "Wrong value format entered, use a number." + +#: flatcamEditors/FlatCAMExcEditor.py:2570 +msgid "" +"Tool already in the original or actual tool list.\n" +"Save and reedit Excellon if you need to add this tool. " +msgstr "" +"Tool already in the original or actual tool list.\n" +"Save and reedit Excellon if you need to add this tool. " + +#: flatcamEditors/FlatCAMExcEditor.py:2579 flatcamGUI/FlatCAMGUI.py:4009 +msgid "Added new tool with dia" +msgstr "Added new tool with dia" + +#: flatcamEditors/FlatCAMExcEditor.py:2612 +msgid "Select a tool in Tool Table" +msgstr "Select a tool in Tool Table" + +#: flatcamEditors/FlatCAMExcEditor.py:2642 +msgid "Deleted tool with diameter" +msgstr "Deleted tool with diameter" + +#: flatcamEditors/FlatCAMExcEditor.py:2790 +msgid "Done. Tool edit completed." +msgstr "Done. Tool edit completed." + +#: flatcamEditors/FlatCAMExcEditor.py:3352 +msgid "There are no Tools definitions in the file. Aborting Excellon creation." +msgstr "" +"There are no Tools definitions in the file. Aborting Excellon creation." + +#: flatcamEditors/FlatCAMExcEditor.py:3356 +msgid "An internal error has ocurred. See Shell.\n" +msgstr "An internal error has ocurred. See Shell.\n" + +#: flatcamEditors/FlatCAMExcEditor.py:3361 +msgid "Creating Excellon." +msgstr "Creating Excellon." + +#: flatcamEditors/FlatCAMExcEditor.py:3373 +msgid "Excellon editing finished." +msgstr "Excellon editing finished." + +#: flatcamEditors/FlatCAMExcEditor.py:3390 +msgid "Cancelled. There is no Tool/Drill selected" +msgstr "Cancelled. There is no Tool/Drill selected" + +#: flatcamEditors/FlatCAMExcEditor.py:4003 +msgid "Done. Drill(s) deleted." +msgstr "Done. Drill(s) deleted." + +#: flatcamEditors/FlatCAMExcEditor.py:4076 +#: flatcamEditors/FlatCAMExcEditor.py:4086 +#: flatcamEditors/FlatCAMGrbEditor.py:4897 +msgid "Click on the circular array Center position" +msgstr "Click on the circular array Center position" + +#: flatcamEditors/FlatCAMGeoEditor.py:85 +msgid "Buffer distance:" +msgstr "Buffer distance:" + +#: flatcamEditors/FlatCAMGeoEditor.py:86 +msgid "Buffer corner:" +msgstr "Buffer corner:" + +#: flatcamEditors/FlatCAMGeoEditor.py:88 +#| msgid "" +#| "There are 3 types of corners:\n" +#| " - 'Round': the corner is rounded for exterior buffer.\n" +#| " - 'Square:' the corner is met in a sharp angle for exterior buffer.\n" +#| " - 'Beveled:' the corner is a line that directly connects the features " +#| "meeting in the corner" +msgid "" +"There are 3 types of corners:\n" +" - 'Round': the corner is rounded for exterior buffer.\n" +" - 'Square': the corner is met in a sharp angle for exterior buffer.\n" +" - 'Beveled': the corner is a line that directly connects the features " +"meeting in the corner" +msgstr "" +"There are 3 types of corners:\n" +" - 'Round': the corner is rounded for exterior buffer.\n" +" - 'Square': the corner is met in a sharp angle for exterior buffer.\n" +" - 'Beveled': the corner is a line that directly connects the features " +"meeting in the corner" + +#: flatcamEditors/FlatCAMGeoEditor.py:94 +#: flatcamEditors/FlatCAMGrbEditor.py:2628 +msgid "Round" +msgstr "Round" + +#: flatcamEditors/FlatCAMGeoEditor.py:95 +#: flatcamEditors/FlatCAMGrbEditor.py:2629 flatcamGUI/PreferencesUI.py:5606 +#: flatcamGUI/PreferencesUI.py:6130 flatcamGUI/PreferencesUI.py:7564 +#: flatcamGUI/PreferencesUI.py:8167 flatcamGUI/PreferencesUI.py:8274 +#: flatcamGUI/PreferencesUI.py:8379 flatcamGUI/PreferencesUI.py:8488 +#: flatcamTools/ToolExtractDrills.py:94 flatcamTools/ToolExtractDrills.py:227 +#: flatcamTools/ToolNCC.py:583 flatcamTools/ToolPaint.py:527 +#: flatcamTools/ToolPunchGerber.py:105 flatcamTools/ToolPunchGerber.py:255 +#: flatcamTools/ToolQRCode.py:198 +msgid "Square" +msgstr "Square" + +#: flatcamEditors/FlatCAMGeoEditor.py:96 +#: flatcamEditors/FlatCAMGrbEditor.py:2630 +msgid "Beveled" +msgstr "Beveled" + +#: flatcamEditors/FlatCAMGeoEditor.py:103 +msgid "Buffer Interior" +msgstr "Buffer Interior" + +#: flatcamEditors/FlatCAMGeoEditor.py:105 +msgid "Buffer Exterior" +msgstr "Buffer Exterior" + +#: flatcamEditors/FlatCAMGeoEditor.py:111 +msgid "Full Buffer" +msgstr "Full Buffer" + +#: flatcamEditors/FlatCAMGeoEditor.py:132 +#: flatcamEditors/FlatCAMGeoEditor.py:3017 flatcamGUI/FlatCAMGUI.py:1913 +#: flatcamGUI/PreferencesUI.py:2786 +msgid "Buffer Tool" +msgstr "Buffer Tool" + +#: flatcamEditors/FlatCAMGeoEditor.py:144 +#: flatcamEditors/FlatCAMGeoEditor.py:161 +#: flatcamEditors/FlatCAMGeoEditor.py:178 +#: flatcamEditors/FlatCAMGeoEditor.py:3036 +#: flatcamEditors/FlatCAMGeoEditor.py:3064 +#: flatcamEditors/FlatCAMGeoEditor.py:3092 +#: flatcamEditors/FlatCAMGrbEditor.py:4950 +msgid "Buffer distance value is missing or wrong format. Add it and retry." +msgstr "Buffer distance value is missing or wrong format. Add it and retry." + +#: flatcamEditors/FlatCAMGeoEditor.py:242 +msgid "Font" +msgstr "Font" + +#: flatcamEditors/FlatCAMGeoEditor.py:323 flatcamGUI/FlatCAMGUI.py:2193 +msgid "Text" +msgstr "Text" + +#: flatcamEditors/FlatCAMGeoEditor.py:349 +msgid "Text Tool" +msgstr "Text Tool" + +#: flatcamEditors/FlatCAMGeoEditor.py:405 flatcamGUI/FlatCAMGUI.py:496 +#: flatcamGUI/FlatCAMGUI.py:1143 flatcamGUI/ObjectUI.py:817 +#: flatcamGUI/ObjectUI.py:1661 flatcamObjects/FlatCAMExcellon.py:742 +#: flatcamObjects/FlatCAMExcellon.py:1084 flatcamObjects/FlatCAMGeometry.py:731 +#: flatcamTools/ToolNCC.py:331 flatcamTools/ToolNCC.py:797 +#: flatcamTools/ToolPaint.py:314 flatcamTools/ToolPaint.py:767 +msgid "Tool" +msgstr "Tool" + +#: flatcamEditors/FlatCAMGeoEditor.py:439 flatcamGUI/ObjectUI.py:363 +#: flatcamGUI/PreferencesUI.py:2205 +msgid "Tool dia" +msgstr "Tool dia" + +#: flatcamEditors/FlatCAMGeoEditor.py:441 +msgid "Diameter of the tool to be used in the operation." +msgstr "Diameter of the tool to be used in the operation." + +#: flatcamEditors/FlatCAMGeoEditor.py:487 +msgid "" +"Algorithm to paint the polygons:\n" +"- Standard: Fixed step inwards.\n" +"- Seed-based: Outwards from seed.\n" +"- Line-based: Parallel lines." +msgstr "" +"Algorithm to paint the polygons:\n" +"- Standard: Fixed step inwards.\n" +"- Seed-based: Outwards from seed.\n" +"- Line-based: Parallel lines." + +#: flatcamEditors/FlatCAMGeoEditor.py:506 +msgid "Connect:" +msgstr "Connect:" + +#: flatcamEditors/FlatCAMGeoEditor.py:516 +msgid "Contour:" +msgstr "Contour:" + +#: flatcamEditors/FlatCAMGeoEditor.py:529 flatcamGUI/FlatCAMGUI.py:2197 +msgid "Paint" +msgstr "Paint" + +#: flatcamEditors/FlatCAMGeoEditor.py:547 flatcamGUI/FlatCAMGUI.py:909 +#: flatcamGUI/FlatCAMGUI.py:2588 flatcamGUI/ObjectUI.py:2058 +#: flatcamTools/ToolPaint.py:43 flatcamTools/ToolPaint.py:738 +msgid "Paint Tool" +msgstr "Paint Tool" + +#: flatcamEditors/FlatCAMGeoEditor.py:583 +#: flatcamEditors/FlatCAMGeoEditor.py:1055 +#: flatcamEditors/FlatCAMGeoEditor.py:3024 +#: flatcamEditors/FlatCAMGeoEditor.py:3052 +#: flatcamEditors/FlatCAMGeoEditor.py:3080 +#: flatcamEditors/FlatCAMGeoEditor.py:4502 +#: flatcamEditors/FlatCAMGrbEditor.py:5601 +msgid "Cancelled. No shape selected." +msgstr "Cancelled. No shape selected." + +#: flatcamEditors/FlatCAMGeoEditor.py:596 +#: flatcamEditors/FlatCAMGeoEditor.py:3042 +#: flatcamEditors/FlatCAMGeoEditor.py:3070 +#: flatcamEditors/FlatCAMGeoEditor.py:3098 flatcamGUI/PreferencesUI.py:4149 +#: flatcamTools/ToolProperties.py:117 flatcamTools/ToolProperties.py:162 +msgid "Tools" +msgstr "Tools" + +#: flatcamEditors/FlatCAMGeoEditor.py:607 +#: flatcamEditors/FlatCAMGeoEditor.py:991 +#: flatcamEditors/FlatCAMGrbEditor.py:5140 +#: flatcamEditors/FlatCAMGrbEditor.py:5537 flatcamGUI/FlatCAMGUI.py:930 +#: flatcamGUI/FlatCAMGUI.py:2609 flatcamTools/ToolTransform.py:460 +msgid "Transform Tool" +msgstr "Transform Tool" + +#: flatcamEditors/FlatCAMGeoEditor.py:608 +#: flatcamEditors/FlatCAMGeoEditor.py:673 +#: flatcamEditors/FlatCAMGrbEditor.py:5141 +#: flatcamEditors/FlatCAMGrbEditor.py:5206 flatcamGUI/PreferencesUI.py:6725 +#: flatcamTools/ToolTransform.py:24 flatcamTools/ToolTransform.py:466 +msgid "Rotate" +msgstr "Rotate" + +#: flatcamEditors/FlatCAMGeoEditor.py:609 +#: flatcamEditors/FlatCAMGrbEditor.py:5142 flatcamTools/ToolTransform.py:25 +msgid "Skew/Shear" +msgstr "Skew/Shear" + +#: flatcamEditors/FlatCAMGeoEditor.py:610 +#: flatcamEditors/FlatCAMGrbEditor.py:2677 +#: flatcamEditors/FlatCAMGrbEditor.py:5143 flatcamGUI/FlatCAMGUI.py:1048 +#: flatcamGUI/FlatCAMGUI.py:2125 flatcamGUI/FlatCAMGUI.py:2240 +#: flatcamGUI/FlatCAMGUI.py:2723 flatcamGUI/ObjectUI.py:124 +#: flatcamGUI/PreferencesUI.py:6775 flatcamTools/ToolTransform.py:26 +msgid "Scale" +msgstr "Scale" + +#: flatcamEditors/FlatCAMGeoEditor.py:611 +#: flatcamEditors/FlatCAMGrbEditor.py:5144 flatcamTools/ToolTransform.py:27 +msgid "Mirror (Flip)" +msgstr "Mirror (Flip)" + +#: flatcamEditors/FlatCAMGeoEditor.py:625 +#: flatcamEditors/FlatCAMGrbEditor.py:5158 flatcamGUI/FlatCAMGUI.py:841 +#: flatcamGUI/FlatCAMGUI.py:2524 +msgid "Editor" +msgstr "Editor" + +#: flatcamEditors/FlatCAMGeoEditor.py:657 +#: flatcamEditors/FlatCAMGrbEditor.py:5190 +msgid "Angle:" +msgstr "Angle:" + +#: flatcamEditors/FlatCAMGeoEditor.py:659 +#: flatcamEditors/FlatCAMGrbEditor.py:5192 flatcamGUI/PreferencesUI.py:6735 +#: flatcamTools/ToolTransform.py:62 +msgid "" +"Angle for Rotation action, in degrees.\n" +"Float number between -360 and 359.\n" +"Positive numbers for CW motion.\n" +"Negative numbers for CCW motion." +msgstr "" +"Angle for Rotation action, in degrees.\n" +"Float number between -360 and 359.\n" +"Positive numbers for CW motion.\n" +"Negative numbers for CCW motion." + +#: flatcamEditors/FlatCAMGeoEditor.py:675 +#: flatcamEditors/FlatCAMGrbEditor.py:5208 +msgid "" +"Rotate the selected shape(s).\n" +"The point of reference is the middle of\n" +"the bounding box for all selected shapes." +msgstr "" +"Rotate the selected shape(s).\n" +"The point of reference is the middle of\n" +"the bounding box for all selected shapes." + +#: flatcamEditors/FlatCAMGeoEditor.py:698 +#: flatcamEditors/FlatCAMGrbEditor.py:5231 +msgid "Angle X:" +msgstr "Angle X:" + +#: flatcamEditors/FlatCAMGeoEditor.py:700 +#: flatcamEditors/FlatCAMGeoEditor.py:720 +#: flatcamEditors/FlatCAMGrbEditor.py:5233 +#: flatcamEditors/FlatCAMGrbEditor.py:5253 flatcamGUI/PreferencesUI.py:6754 +#: flatcamGUI/PreferencesUI.py:6768 flatcamTools/ToolCalibration.py:505 +#: flatcamTools/ToolCalibration.py:518 +msgid "" +"Angle for Skew action, in degrees.\n" +"Float number between -360 and 359." +msgstr "" +"Angle for Skew action, in degrees.\n" +"Float number between -360 and 359." + +#: flatcamEditors/FlatCAMGeoEditor.py:711 +#: flatcamEditors/FlatCAMGrbEditor.py:5244 flatcamTools/ToolTransform.py:467 +msgid "Skew X" +msgstr "Skew X" + +#: flatcamEditors/FlatCAMGeoEditor.py:713 +#: flatcamEditors/FlatCAMGeoEditor.py:733 +#: flatcamEditors/FlatCAMGrbEditor.py:5246 +#: flatcamEditors/FlatCAMGrbEditor.py:5266 +msgid "" +"Skew/shear the selected shape(s).\n" +"The point of reference is the middle of\n" +"the bounding box for all selected shapes." +msgstr "" +"Skew/shear the selected shape(s).\n" +"The point of reference is the middle of\n" +"the bounding box for all selected shapes." + +#: flatcamEditors/FlatCAMGeoEditor.py:718 +#: flatcamEditors/FlatCAMGrbEditor.py:5251 +msgid "Angle Y:" +msgstr "Angle Y:" + +#: flatcamEditors/FlatCAMGeoEditor.py:731 +#: flatcamEditors/FlatCAMGrbEditor.py:5264 flatcamTools/ToolTransform.py:468 +msgid "Skew Y" +msgstr "Skew Y" + +#: flatcamEditors/FlatCAMGeoEditor.py:759 +#: flatcamEditors/FlatCAMGrbEditor.py:5292 +msgid "Factor X:" +msgstr "Factor X:" + +#: flatcamEditors/FlatCAMGeoEditor.py:761 +#: flatcamEditors/FlatCAMGrbEditor.py:5294 flatcamTools/ToolCalibration.py:469 +msgid "Factor for Scale action over X axis." +msgstr "Factor for Scale action over X axis." + +#: flatcamEditors/FlatCAMGeoEditor.py:771 +#: flatcamEditors/FlatCAMGrbEditor.py:5304 flatcamTools/ToolTransform.py:469 +msgid "Scale X" +msgstr "Scale X" + +#: flatcamEditors/FlatCAMGeoEditor.py:773 +#: flatcamEditors/FlatCAMGeoEditor.py:792 +#: flatcamEditors/FlatCAMGrbEditor.py:5306 +#: flatcamEditors/FlatCAMGrbEditor.py:5325 +msgid "" +"Scale the selected shape(s).\n" +"The point of reference depends on \n" +"the Scale reference checkbox state." +msgstr "" +"Scale the selected shape(s).\n" +"The point of reference depends on \n" +"the Scale reference checkbox state." + +#: flatcamEditors/FlatCAMGeoEditor.py:778 +#: flatcamEditors/FlatCAMGrbEditor.py:5311 +msgid "Factor Y:" +msgstr "Factor Y:" + +#: flatcamEditors/FlatCAMGeoEditor.py:780 +#: flatcamEditors/FlatCAMGrbEditor.py:5313 flatcamTools/ToolCalibration.py:481 +msgid "Factor for Scale action over Y axis." +msgstr "Factor for Scale action over Y axis." + +#: flatcamEditors/FlatCAMGeoEditor.py:790 +#: flatcamEditors/FlatCAMGrbEditor.py:5323 flatcamTools/ToolTransform.py:470 +msgid "Scale Y" +msgstr "Scale Y" + +#: flatcamEditors/FlatCAMGeoEditor.py:799 +#: flatcamEditors/FlatCAMGrbEditor.py:5332 flatcamGUI/PreferencesUI.py:6804 +#: flatcamTools/ToolTransform.py:189 +msgid "Link" +msgstr "Link" + +#: flatcamEditors/FlatCAMGeoEditor.py:801 +#: flatcamEditors/FlatCAMGrbEditor.py:5334 +msgid "" +"Scale the selected shape(s)\n" +"using the Scale Factor X for both axis." +msgstr "" +"Scale the selected shape(s)\n" +"using the Scale Factor X for both axis." + +#: flatcamEditors/FlatCAMGeoEditor.py:807 +#: flatcamEditors/FlatCAMGrbEditor.py:5340 flatcamGUI/PreferencesUI.py:6812 +#: flatcamTools/ToolTransform.py:196 +msgid "Scale Reference" +msgstr "Scale Reference" + +#: flatcamEditors/FlatCAMGeoEditor.py:809 +#: flatcamEditors/FlatCAMGrbEditor.py:5342 +msgid "" +"Scale the selected shape(s)\n" +"using the origin reference when checked,\n" +"and the center of the biggest bounding box\n" +"of the selected shapes when unchecked." +msgstr "" +"Scale the selected shape(s)\n" +"using the origin reference when checked,\n" +"and the center of the biggest bounding box\n" +"of the selected shapes when unchecked." + +#: flatcamEditors/FlatCAMGeoEditor.py:837 +#: flatcamEditors/FlatCAMGrbEditor.py:5371 +msgid "Value X:" +msgstr "Value X:" + +#: flatcamEditors/FlatCAMGeoEditor.py:839 +#: flatcamEditors/FlatCAMGrbEditor.py:5373 +msgid "Value for Offset action on X axis." +msgstr "Value for Offset action on X axis." + +#: flatcamEditors/FlatCAMGeoEditor.py:849 +#: flatcamEditors/FlatCAMGrbEditor.py:5383 flatcamTools/ToolTransform.py:473 +msgid "Offset X" +msgstr "Offset X" + +#: flatcamEditors/FlatCAMGeoEditor.py:851 +#: flatcamEditors/FlatCAMGeoEditor.py:871 +#: flatcamEditors/FlatCAMGrbEditor.py:5385 +#: flatcamEditors/FlatCAMGrbEditor.py:5405 +msgid "" +"Offset the selected shape(s).\n" +"The point of reference is the middle of\n" +"the bounding box for all selected shapes.\n" +msgstr "" +"Offset the selected shape(s).\n" +"The point of reference is the middle of\n" +"the bounding box for all selected shapes.\n" + +#: flatcamEditors/FlatCAMGeoEditor.py:857 +#: flatcamEditors/FlatCAMGrbEditor.py:5391 +msgid "Value Y:" +msgstr "Value Y:" + +#: flatcamEditors/FlatCAMGeoEditor.py:859 +#: flatcamEditors/FlatCAMGrbEditor.py:5393 +msgid "Value for Offset action on Y axis." +msgstr "Value for Offset action on Y axis." + +#: flatcamEditors/FlatCAMGeoEditor.py:869 +#: flatcamEditors/FlatCAMGrbEditor.py:5403 flatcamTools/ToolTransform.py:474 +msgid "Offset Y" +msgstr "Offset Y" + +#: flatcamEditors/FlatCAMGeoEditor.py:900 +#: flatcamEditors/FlatCAMGrbEditor.py:5434 flatcamTools/ToolTransform.py:475 +msgid "Flip on X" +msgstr "Flip on X" + +#: flatcamEditors/FlatCAMGeoEditor.py:902 +#: flatcamEditors/FlatCAMGeoEditor.py:909 +#: flatcamEditors/FlatCAMGrbEditor.py:5436 +#: flatcamEditors/FlatCAMGrbEditor.py:5443 +msgid "" +"Flip the selected shape(s) over the X axis.\n" +"Does not create a new shape." +msgstr "" +"Flip the selected shape(s) over the X axis.\n" +"Does not create a new shape." + +#: flatcamEditors/FlatCAMGeoEditor.py:907 +#: flatcamEditors/FlatCAMGrbEditor.py:5441 flatcamTools/ToolTransform.py:476 +msgid "Flip on Y" +msgstr "Flip on Y" + +#: flatcamEditors/FlatCAMGeoEditor.py:915 +#: flatcamEditors/FlatCAMGrbEditor.py:5449 +msgid "Ref Pt" +msgstr "Ref Pt" + +#: flatcamEditors/FlatCAMGeoEditor.py:917 +#: flatcamEditors/FlatCAMGrbEditor.py:5451 +msgid "" +"Flip the selected shape(s)\n" +"around the point in Point Entry Field.\n" +"\n" +"The point coordinates can be captured by\n" +"left click on canvas together with pressing\n" +"SHIFT key. \n" +"Then click Add button to insert coordinates.\n" +"Or enter the coords in format (x, y) in the\n" +"Point Entry field and click Flip on X(Y)" +msgstr "" +"Flip the selected shape(s)\n" +"around the point in Point Entry Field.\n" +"\n" +"The point coordinates can be captured by\n" +"left click on canvas together with pressing\n" +"SHIFT key. \n" +"Then click Add button to insert coordinates.\n" +"Or enter the coords in format (x, y) in the\n" +"Point Entry field and click Flip on X(Y)" + +#: flatcamEditors/FlatCAMGeoEditor.py:929 +#: flatcamEditors/FlatCAMGrbEditor.py:5463 +msgid "Point:" +msgstr "Point:" + +#: flatcamEditors/FlatCAMGeoEditor.py:931 +#: flatcamEditors/FlatCAMGrbEditor.py:5465 flatcamTools/ToolTransform.py:299 +msgid "" +"Coordinates in format (x, y) used as reference for mirroring.\n" +"The 'x' in (x, y) will be used when using Flip on X and\n" +"the 'y' in (x, y) will be used when using Flip on Y." +msgstr "" +"Coordinates in format (x, y) used as reference for mirroring.\n" +"The 'x' in (x, y) will be used when using Flip on X and\n" +"the 'y' in (x, y) will be used when using Flip on Y." + +#: flatcamEditors/FlatCAMGeoEditor.py:941 +#: flatcamEditors/FlatCAMGrbEditor.py:5477 flatcamTools/ToolTransform.py:309 +msgid "" +"The point coordinates can be captured by\n" +"left click on canvas together with pressing\n" +"SHIFT key. Then click Add button to insert." +msgstr "" +"The point coordinates can be captured by\n" +"left click on canvas together with pressing\n" +"SHIFT key. Then click Add button to insert." + +#: flatcamEditors/FlatCAMGeoEditor.py:1304 +#: flatcamEditors/FlatCAMGrbEditor.py:5785 +msgid "No shape selected. Please Select a shape to rotate!" +msgstr "No shape selected. Please Select a shape to rotate!" + +#: flatcamEditors/FlatCAMGeoEditor.py:1307 +#: flatcamEditors/FlatCAMGrbEditor.py:5788 flatcamTools/ToolTransform.py:679 +msgid "Appying Rotate" +msgstr "Appying Rotate" + +#: flatcamEditors/FlatCAMGeoEditor.py:1333 +#: flatcamEditors/FlatCAMGrbEditor.py:5820 +msgid "Done. Rotate completed." +msgstr "Done. Rotate completed." + +#: flatcamEditors/FlatCAMGeoEditor.py:1335 +msgid "Rotation action was not executed" +msgstr "Rotation action was not executed" + +#: flatcamEditors/FlatCAMGeoEditor.py:1354 +#: flatcamEditors/FlatCAMGrbEditor.py:5839 +msgid "No shape selected. Please Select a shape to flip!" +msgstr "No shape selected. Please Select a shape to flip!" + +#: flatcamEditors/FlatCAMGeoEditor.py:1357 +#: flatcamEditors/FlatCAMGrbEditor.py:5842 flatcamTools/ToolTransform.py:728 +msgid "Applying Flip" +msgstr "Applying Flip" + +#: flatcamEditors/FlatCAMGeoEditor.py:1386 +#: flatcamEditors/FlatCAMGrbEditor.py:5880 flatcamTools/ToolTransform.py:769 +msgid "Flip on the Y axis done" +msgstr "Flip on the Y axis done" + +#: flatcamEditors/FlatCAMGeoEditor.py:1390 +#: flatcamEditors/FlatCAMGrbEditor.py:5889 flatcamTools/ToolTransform.py:778 +msgid "Flip on the X axis done" +msgstr "Flip on the X axis done" + +#: flatcamEditors/FlatCAMGeoEditor.py:1398 +msgid "Flip action was not executed" +msgstr "Flip action was not executed" + +#: flatcamEditors/FlatCAMGeoEditor.py:1416 +#: flatcamEditors/FlatCAMGrbEditor.py:5909 +msgid "No shape selected. Please Select a shape to shear/skew!" +msgstr "No shape selected. Please Select a shape to shear/skew!" + +#: flatcamEditors/FlatCAMGeoEditor.py:1419 +#: flatcamEditors/FlatCAMGrbEditor.py:5912 flatcamTools/ToolTransform.py:801 +msgid "Applying Skew" +msgstr "Applying Skew" + +#: flatcamEditors/FlatCAMGeoEditor.py:1442 +#: flatcamEditors/FlatCAMGrbEditor.py:5946 +msgid "Skew on the X axis done" +msgstr "Skew on the X axis done" + +#: flatcamEditors/FlatCAMGeoEditor.py:1444 +#: flatcamEditors/FlatCAMGrbEditor.py:5948 +msgid "Skew on the Y axis done" +msgstr "Skew on the Y axis done" + +#: flatcamEditors/FlatCAMGeoEditor.py:1447 +msgid "Skew action was not executed" +msgstr "Skew action was not executed" + +#: flatcamEditors/FlatCAMGeoEditor.py:1469 +#: flatcamEditors/FlatCAMGrbEditor.py:5970 +msgid "No shape selected. Please Select a shape to scale!" +msgstr "No shape selected. Please Select a shape to scale!" + +#: flatcamEditors/FlatCAMGeoEditor.py:1472 +#: flatcamEditors/FlatCAMGrbEditor.py:5973 flatcamTools/ToolTransform.py:847 +msgid "Applying Scale" +msgstr "Applying Scale" + +#: flatcamEditors/FlatCAMGeoEditor.py:1504 +#: flatcamEditors/FlatCAMGrbEditor.py:6010 +msgid "Scale on the X axis done" +msgstr "Scale on the X axis done" + +#: flatcamEditors/FlatCAMGeoEditor.py:1506 +#: flatcamEditors/FlatCAMGrbEditor.py:6012 +msgid "Scale on the Y axis done" +msgstr "Scale on the Y axis done" + +#: flatcamEditors/FlatCAMGeoEditor.py:1508 +msgid "Scale action was not executed" +msgstr "Scale action was not executed" + +#: flatcamEditors/FlatCAMGeoEditor.py:1523 +#: flatcamEditors/FlatCAMGrbEditor.py:6029 +msgid "No shape selected. Please Select a shape to offset!" +msgstr "No shape selected. Please Select a shape to offset!" + +#: flatcamEditors/FlatCAMGeoEditor.py:1526 +#: flatcamEditors/FlatCAMGrbEditor.py:6032 flatcamTools/ToolTransform.py:897 +msgid "Applying Offset" +msgstr "Applying Offset" + +#: flatcamEditors/FlatCAMGeoEditor.py:1536 +#: flatcamEditors/FlatCAMGrbEditor.py:6053 +msgid "Offset on the X axis done" +msgstr "Offset on the X axis done" + +#: flatcamEditors/FlatCAMGeoEditor.py:1538 +#: flatcamEditors/FlatCAMGrbEditor.py:6055 +msgid "Offset on the Y axis done" +msgstr "Offset on the Y axis done" + +#: flatcamEditors/FlatCAMGeoEditor.py:1541 +msgid "Offset action was not executed" +msgstr "Offset action was not executed" + +#: flatcamEditors/FlatCAMGeoEditor.py:1545 +#: flatcamEditors/FlatCAMGrbEditor.py:6062 +msgid "Rotate ..." +msgstr "Rotate ..." + +#: flatcamEditors/FlatCAMGeoEditor.py:1546 +#: flatcamEditors/FlatCAMGeoEditor.py:1601 +#: flatcamEditors/FlatCAMGeoEditor.py:1618 +#: flatcamEditors/FlatCAMGrbEditor.py:6063 +#: flatcamEditors/FlatCAMGrbEditor.py:6112 +#: flatcamEditors/FlatCAMGrbEditor.py:6127 +msgid "Enter an Angle Value (degrees)" +msgstr "Enter an Angle Value (degrees)" + +#: flatcamEditors/FlatCAMGeoEditor.py:1555 +#: flatcamEditors/FlatCAMGrbEditor.py:6071 +msgid "Geometry shape rotate done" +msgstr "Geometry shape rotate done" + +#: flatcamEditors/FlatCAMGeoEditor.py:1559 +#: flatcamEditors/FlatCAMGrbEditor.py:6074 +msgid "Geometry shape rotate cancelled" +msgstr "Geometry shape rotate cancelled" + +#: flatcamEditors/FlatCAMGeoEditor.py:1564 +#: flatcamEditors/FlatCAMGrbEditor.py:6079 +msgid "Offset on X axis ..." +msgstr "Offset on X axis ..." + +#: flatcamEditors/FlatCAMGeoEditor.py:1565 +#: flatcamEditors/FlatCAMGeoEditor.py:1584 +#: flatcamEditors/FlatCAMGrbEditor.py:6080 +#: flatcamEditors/FlatCAMGrbEditor.py:6097 +msgid "Enter a distance Value" +msgstr "Enter a distance Value" + +#: flatcamEditors/FlatCAMGeoEditor.py:1574 +#: flatcamEditors/FlatCAMGrbEditor.py:6088 +msgid "Geometry shape offset on X axis done" +msgstr "Geometry shape offset on X axis done" + +#: flatcamEditors/FlatCAMGeoEditor.py:1578 +#: flatcamEditors/FlatCAMGrbEditor.py:6091 +msgid "Geometry shape offset X cancelled" +msgstr "Geometry shape offset X cancelled" + +#: flatcamEditors/FlatCAMGeoEditor.py:1583 +#: flatcamEditors/FlatCAMGrbEditor.py:6096 +msgid "Offset on Y axis ..." +msgstr "Offset on Y axis ..." + +#: flatcamEditors/FlatCAMGeoEditor.py:1593 +#: flatcamEditors/FlatCAMGrbEditor.py:6105 +msgid "Geometry shape offset on Y axis done" +msgstr "Geometry shape offset on Y axis done" + +#: flatcamEditors/FlatCAMGeoEditor.py:1597 +msgid "Geometry shape offset on Y axis canceled" +msgstr "Geometry shape offset on Y axis canceled" + +#: flatcamEditors/FlatCAMGeoEditor.py:1600 +#: flatcamEditors/FlatCAMGrbEditor.py:6111 +msgid "Skew on X axis ..." +msgstr "Skew on X axis ..." + +#: flatcamEditors/FlatCAMGeoEditor.py:1610 +#: flatcamEditors/FlatCAMGrbEditor.py:6120 +msgid "Geometry shape skew on X axis done" +msgstr "Geometry shape skew on X axis done" + +#: flatcamEditors/FlatCAMGeoEditor.py:1614 +msgid "Geometry shape skew on X axis canceled" +msgstr "Geometry shape skew on X axis canceled" + +#: flatcamEditors/FlatCAMGeoEditor.py:1617 +#: flatcamEditors/FlatCAMGrbEditor.py:6126 +msgid "Skew on Y axis ..." +msgstr "Skew on Y axis ..." + +#: flatcamEditors/FlatCAMGeoEditor.py:1627 +#: flatcamEditors/FlatCAMGrbEditor.py:6135 +msgid "Geometry shape skew on Y axis done" +msgstr "Geometry shape skew on Y axis done" + +#: flatcamEditors/FlatCAMGeoEditor.py:1631 +msgid "Geometry shape skew on Y axis canceled" +msgstr "Geometry shape skew on Y axis canceled" + +#: flatcamEditors/FlatCAMGeoEditor.py:2008 +#: flatcamEditors/FlatCAMGeoEditor.py:2079 +#: flatcamEditors/FlatCAMGrbEditor.py:1435 +#: flatcamEditors/FlatCAMGrbEditor.py:1513 +msgid "Click on Center point ..." +msgstr "Click on Center point ..." + +#: flatcamEditors/FlatCAMGeoEditor.py:2021 +#: flatcamEditors/FlatCAMGrbEditor.py:1445 +msgid "Click on Perimeter point to complete ..." +msgstr "Click on Perimeter point to complete ..." + +#: flatcamEditors/FlatCAMGeoEditor.py:2053 +msgid "Done. Adding Circle completed." +msgstr "Done. Adding Circle completed." + +#: flatcamEditors/FlatCAMGeoEditor.py:2107 +#: flatcamEditors/FlatCAMGrbEditor.py:1546 +msgid "Click on Start point ..." +msgstr "Click on Start point ..." + +#: flatcamEditors/FlatCAMGeoEditor.py:2109 +#: flatcamEditors/FlatCAMGrbEditor.py:1548 +msgid "Click on Point3 ..." +msgstr "Click on Point3 ..." + +#: flatcamEditors/FlatCAMGeoEditor.py:2111 +#: flatcamEditors/FlatCAMGrbEditor.py:1550 +msgid "Click on Stop point ..." +msgstr "Click on Stop point ..." + +#: flatcamEditors/FlatCAMGeoEditor.py:2116 +#: flatcamEditors/FlatCAMGrbEditor.py:1555 +msgid "Click on Stop point to complete ..." +msgstr "Click on Stop point to complete ..." + +#: flatcamEditors/FlatCAMGeoEditor.py:2118 +#: flatcamEditors/FlatCAMGrbEditor.py:1557 +msgid "Click on Point2 to complete ..." +msgstr "Click on Point2 to complete ..." + +#: flatcamEditors/FlatCAMGeoEditor.py:2120 +#: flatcamEditors/FlatCAMGrbEditor.py:1559 +msgid "Click on Center point to complete ..." +msgstr "Click on Center point to complete ..." + +#: flatcamEditors/FlatCAMGeoEditor.py:2132 +#, python-format +msgid "Direction: %s" +msgstr "Direction: %s" + +#: flatcamEditors/FlatCAMGeoEditor.py:2146 +#: flatcamEditors/FlatCAMGrbEditor.py:1585 +msgid "Mode: Start -> Stop -> Center. Click on Start point ..." +msgstr "Mode: Start -> Stop -> Center. Click on Start point ..." + +#: flatcamEditors/FlatCAMGeoEditor.py:2149 +#: flatcamEditors/FlatCAMGrbEditor.py:1588 +msgid "Mode: Point1 -> Point3 -> Point2. Click on Point1 ..." +msgstr "Mode: Point1 -> Point3 -> Point2. Click on Point1 ..." + +#: flatcamEditors/FlatCAMGeoEditor.py:2152 +#: flatcamEditors/FlatCAMGrbEditor.py:1591 +msgid "Mode: Center -> Start -> Stop. Click on Center point ..." +msgstr "Mode: Center -> Start -> Stop. Click on Center point ..." + +#: flatcamEditors/FlatCAMGeoEditor.py:2293 +msgid "Done. Arc completed." +msgstr "Done. Arc completed." + +#: flatcamEditors/FlatCAMGeoEditor.py:2324 +#: flatcamEditors/FlatCAMGeoEditor.py:2397 +msgid "Click on 1st corner ..." +msgstr "Click on 1st corner ..." + +#: flatcamEditors/FlatCAMGeoEditor.py:2336 +msgid "Click on opposite corner to complete ..." +msgstr "Click on opposite corner to complete ..." + +#: flatcamEditors/FlatCAMGeoEditor.py:2366 +msgid "Done. Rectangle completed." +msgstr "Done. Rectangle completed." + +#: flatcamEditors/FlatCAMGeoEditor.py:2410 flatcamTools/ToolNCC.py:1728 +#: flatcamTools/ToolPaint.py:1623 +msgid "Click on next Point or click right mouse button to complete ..." +msgstr "Click on next Point or click right mouse button to complete ..." + +#: flatcamEditors/FlatCAMGeoEditor.py:2441 +msgid "Done. Polygon completed." +msgstr "Done. Polygon completed." + +#: flatcamEditors/FlatCAMGeoEditor.py:2455 +#: flatcamEditors/FlatCAMGeoEditor.py:2520 +#: flatcamEditors/FlatCAMGrbEditor.py:1111 +#: flatcamEditors/FlatCAMGrbEditor.py:1322 +msgid "Backtracked one point ..." +msgstr "Backtracked one point ..." + +#: flatcamEditors/FlatCAMGeoEditor.py:2498 +msgid "Done. Path completed." +msgstr "Done. Path completed." + +#: flatcamEditors/FlatCAMGeoEditor.py:2657 +msgid "No shape selected. Select a shape to explode" +msgstr "No shape selected. Select a shape to explode" + +#: flatcamEditors/FlatCAMGeoEditor.py:2690 +msgid "Done. Polygons exploded into lines." +msgstr "Done. Polygons exploded into lines." + +#: flatcamEditors/FlatCAMGeoEditor.py:2722 +msgid "MOVE: No shape selected. Select a shape to move" +msgstr "MOVE: No shape selected. Select a shape to move" + +#: flatcamEditors/FlatCAMGeoEditor.py:2725 +#: flatcamEditors/FlatCAMGeoEditor.py:2745 +msgid " MOVE: Click on reference point ..." +msgstr " MOVE: Click on reference point ..." + +#: flatcamEditors/FlatCAMGeoEditor.py:2730 +msgid " Click on destination point ..." +msgstr " Click on destination point ..." + +#: flatcamEditors/FlatCAMGeoEditor.py:2770 +msgid "Done. Geometry(s) Move completed." +msgstr "Done. Geometry(s) Move completed." + +#: flatcamEditors/FlatCAMGeoEditor.py:2903 +msgid "Done. Geometry(s) Copy completed." +msgstr "Done. Geometry(s) Copy completed." + +#: flatcamEditors/FlatCAMGeoEditor.py:2934 +#: flatcamEditors/FlatCAMGrbEditor.py:897 +msgid "Click on 1st point ..." +msgstr "Click on 1st point ..." + +#: flatcamEditors/FlatCAMGeoEditor.py:2958 +msgid "" +"Font not supported. Only Regular, Bold, Italic and BoldItalic are supported. " +"Error" +msgstr "" +"Font not supported. Only Regular, Bold, Italic and BoldItalic are supported. " +"Error" + +#: flatcamEditors/FlatCAMGeoEditor.py:2966 +msgid "No text to add." +msgstr "No text to add." + +#: flatcamEditors/FlatCAMGeoEditor.py:2976 +msgid " Done. Adding Text completed." +msgstr " Done. Adding Text completed." + +#: flatcamEditors/FlatCAMGeoEditor.py:3013 +msgid "Create buffer geometry ..." +msgstr "Create buffer geometry ..." + +#: flatcamEditors/FlatCAMGeoEditor.py:3048 +#: flatcamEditors/FlatCAMGrbEditor.py:4994 +msgid "Done. Buffer Tool completed." +msgstr "Done. Buffer Tool completed." + +#: flatcamEditors/FlatCAMGeoEditor.py:3076 +msgid "Done. Buffer Int Tool completed." +msgstr "Done. Buffer Int Tool completed." + +#: flatcamEditors/FlatCAMGeoEditor.py:3104 +msgid "Done. Buffer Ext Tool completed." +msgstr "Done. Buffer Ext Tool completed." + +#: flatcamEditors/FlatCAMGeoEditor.py:3153 +#: flatcamEditors/FlatCAMGrbEditor.py:2151 +msgid "Select a shape to act as deletion area ..." +msgstr "Select a shape to act as deletion area ..." + +#: flatcamEditors/FlatCAMGeoEditor.py:3155 +#: flatcamEditors/FlatCAMGeoEditor.py:3181 +#: flatcamEditors/FlatCAMGeoEditor.py:3187 +#: flatcamEditors/FlatCAMGrbEditor.py:2153 +msgid "Click to pick-up the erase shape..." +msgstr "Click to pick-up the erase shape..." + +#: flatcamEditors/FlatCAMGeoEditor.py:3191 +#: flatcamEditors/FlatCAMGrbEditor.py:2212 +msgid "Click to erase ..." +msgstr "Click to erase ..." + +#: flatcamEditors/FlatCAMGeoEditor.py:3220 +#: flatcamEditors/FlatCAMGrbEditor.py:2245 +msgid "Done. Eraser tool action completed." +msgstr "Done. Eraser tool action completed." + +#: flatcamEditors/FlatCAMGeoEditor.py:3270 +msgid "Create Paint geometry ..." +msgstr "Create Paint geometry ..." + +#: flatcamEditors/FlatCAMGeoEditor.py:3283 +#: flatcamEditors/FlatCAMGrbEditor.py:2408 +msgid "Shape transformations ..." +msgstr "Shape transformations ..." + +#: flatcamEditors/FlatCAMGeoEditor.py:3339 flatcamGUI/PreferencesUI.py:4636 +msgid "Geometry Editor" +msgstr "Geometry Editor" + +#: flatcamEditors/FlatCAMGeoEditor.py:3345 +#: flatcamEditors/FlatCAMGrbEditor.py:2486 +#: flatcamEditors/FlatCAMGrbEditor.py:3846 flatcamGUI/ObjectUI.py:262 +#: flatcamGUI/ObjectUI.py:1496 flatcamGUI/ObjectUI.py:2245 +#: flatcamTools/ToolCutOut.py:95 +msgid "Type" +msgstr "Type" + +#: flatcamEditors/FlatCAMGeoEditor.py:3345 flatcamGUI/ObjectUI.py:217 +#: flatcamGUI/ObjectUI.py:741 flatcamGUI/ObjectUI.py:1432 +#: flatcamGUI/ObjectUI.py:2154 flatcamGUI/ObjectUI.py:2458 +#: flatcamGUI/ObjectUI.py:2525 flatcamTools/ToolCalibration.py:234 +#: flatcamTools/ToolFiducials.py:73 +msgid "Name" +msgstr "Name" + +#: flatcamEditors/FlatCAMGeoEditor.py:3587 +msgid "Ring" +msgstr "Ring" + +#: flatcamEditors/FlatCAMGeoEditor.py:3589 +msgid "Line" +msgstr "Line" + +#: flatcamEditors/FlatCAMGeoEditor.py:3591 flatcamGUI/FlatCAMGUI.py:2187 +#: flatcamGUI/PreferencesUI.py:5607 flatcamGUI/PreferencesUI.py:6131 +#: flatcamTools/ToolNCC.py:584 flatcamTools/ToolPaint.py:528 +msgid "Polygon" +msgstr "Polygon" + +#: flatcamEditors/FlatCAMGeoEditor.py:3593 +msgid "Multi-Line" +msgstr "Multi-Line" + +#: flatcamEditors/FlatCAMGeoEditor.py:3595 +msgid "Multi-Polygon" +msgstr "Multi-Polygon" + +#: flatcamEditors/FlatCAMGeoEditor.py:3602 +msgid "Geo Elem" +msgstr "Geo Elem" + +#: flatcamEditors/FlatCAMGeoEditor.py:4076 +msgid "Editing MultiGeo Geometry, tool" +msgstr "Editing MultiGeo Geometry, tool" + +#: flatcamEditors/FlatCAMGeoEditor.py:4078 +msgid "with diameter" +msgstr "with diameter" + +#: flatcamEditors/FlatCAMGeoEditor.py:4509 flatcamGUI/FlatCAMGUI.py:3695 +#: flatcamGUI/FlatCAMGUI.py:3741 flatcamGUI/FlatCAMGUI.py:3759 +#: flatcamGUI/FlatCAMGUI.py:3899 flatcamGUI/FlatCAMGUI.py:3938 +#: flatcamGUI/FlatCAMGUI.py:3950 flatcamGUI/FlatCAMGUI.py:3967 +msgid "Click on target point." +msgstr "Click on target point." + +#: flatcamEditors/FlatCAMGeoEditor.py:4823 +#: flatcamEditors/FlatCAMGeoEditor.py:4858 +msgid "A selection of at least 2 geo items is required to do Intersection." +msgstr "A selection of at least 2 geo items is required to do Intersection." + +#: flatcamEditors/FlatCAMGeoEditor.py:4944 +#: flatcamEditors/FlatCAMGeoEditor.py:5048 +msgid "" +"Negative buffer value is not accepted. Use Buffer interior to generate an " +"'inside' shape" +msgstr "" +"Negative buffer value is not accepted. Use Buffer interior to generate an " +"'inside' shape" + +#: flatcamEditors/FlatCAMGeoEditor.py:4954 +#: flatcamEditors/FlatCAMGeoEditor.py:5007 +#: flatcamEditors/FlatCAMGeoEditor.py:5057 +msgid "Nothing selected for buffering." +msgstr "Nothing selected for buffering." + +#: flatcamEditors/FlatCAMGeoEditor.py:4959 +#: flatcamEditors/FlatCAMGeoEditor.py:5011 +#: flatcamEditors/FlatCAMGeoEditor.py:5062 +msgid "Invalid distance for buffering." +msgstr "Invalid distance for buffering." + +#: flatcamEditors/FlatCAMGeoEditor.py:4983 +#: flatcamEditors/FlatCAMGeoEditor.py:5082 +msgid "Failed, the result is empty. Choose a different buffer value." +msgstr "Failed, the result is empty. Choose a different buffer value." + +#: flatcamEditors/FlatCAMGeoEditor.py:4994 +msgid "Full buffer geometry created." +msgstr "Full buffer geometry created." + +#: flatcamEditors/FlatCAMGeoEditor.py:5000 +msgid "Negative buffer value is not accepted." +msgstr "Negative buffer value is not accepted." + +#: flatcamEditors/FlatCAMGeoEditor.py:5031 +msgid "Failed, the result is empty. Choose a smaller buffer value." +msgstr "Failed, the result is empty. Choose a smaller buffer value." + +#: flatcamEditors/FlatCAMGeoEditor.py:5041 +msgid "Interior buffer geometry created." +msgstr "Interior buffer geometry created." + +#: flatcamEditors/FlatCAMGeoEditor.py:5092 +msgid "Exterior buffer geometry created." +msgstr "Exterior buffer geometry created." + +#: flatcamEditors/FlatCAMGeoEditor.py:5098 +#, python-format +msgid "Could not do Paint. Overlap value has to be less than 100%%." +msgstr "Could not do Paint. Overlap value has to be less than 100%%." + +#: flatcamEditors/FlatCAMGeoEditor.py:5105 +msgid "Nothing selected for painting." +msgstr "Nothing selected for painting." + +#: flatcamEditors/FlatCAMGeoEditor.py:5111 +msgid "Invalid value for" +msgstr "Invalid value for" + +#: flatcamEditors/FlatCAMGeoEditor.py:5170 +msgid "" +"Could not do Paint. Try a different combination of parameters. Or a " +"different method of Paint" +msgstr "" +"Could not do Paint. Try a different combination of parameters. Or a " +"different method of Paint" + +#: flatcamEditors/FlatCAMGeoEditor.py:5181 +msgid "Paint done." +msgstr "Paint done." + +#: flatcamEditors/FlatCAMGrbEditor.py:211 +msgid "To add an Pad first select a aperture in Aperture Table" +msgstr "To add an Pad first select a aperture in Aperture Table" + +#: flatcamEditors/FlatCAMGrbEditor.py:218 +#: flatcamEditors/FlatCAMGrbEditor.py:418 +msgid "Aperture size is zero. It needs to be greater than zero." +msgstr "Aperture size is zero. It needs to be greater than zero." + +#: flatcamEditors/FlatCAMGrbEditor.py:371 +#: flatcamEditors/FlatCAMGrbEditor.py:684 +msgid "" +"Incompatible aperture type. Select an aperture with type 'C', 'R' or 'O'." +msgstr "" +"Incompatible aperture type. Select an aperture with type 'C', 'R' or 'O'." + +#: flatcamEditors/FlatCAMGrbEditor.py:383 +msgid "Done. Adding Pad completed." +msgstr "Done. Adding Pad completed." + +#: flatcamEditors/FlatCAMGrbEditor.py:410 +msgid "To add an Pad Array first select a aperture in Aperture Table" +msgstr "To add an Pad Array first select a aperture in Aperture Table" + +#: flatcamEditors/FlatCAMGrbEditor.py:490 +msgid "Click on the Pad Circular Array Start position" +msgstr "Click on the Pad Circular Array Start position" + +#: flatcamEditors/FlatCAMGrbEditor.py:710 +msgid "Too many Pads for the selected spacing angle." +msgstr "Too many Pads for the selected spacing angle." + +#: flatcamEditors/FlatCAMGrbEditor.py:733 +msgid "Done. Pad Array added." +msgstr "Done. Pad Array added." + +#: flatcamEditors/FlatCAMGrbEditor.py:758 +msgid "Select shape(s) and then click ..." +msgstr "Select shape(s) and then click ..." + +#: flatcamEditors/FlatCAMGrbEditor.py:770 +msgid "Failed. Nothing selected." +msgstr "Failed. Nothing selected." + +#: flatcamEditors/FlatCAMGrbEditor.py:786 +msgid "" +"Failed. Poligonize works only on geometries belonging to the same aperture." +msgstr "" +"Failed. Poligonize works only on geometries belonging to the same aperture." + +#: flatcamEditors/FlatCAMGrbEditor.py:840 +msgid "Done. Poligonize completed." +msgstr "Done. Poligonize completed." + +#: flatcamEditors/FlatCAMGrbEditor.py:895 +#: flatcamEditors/FlatCAMGrbEditor.py:1128 +#: flatcamEditors/FlatCAMGrbEditor.py:1152 +msgid "Corner Mode 1: 45 degrees ..." +msgstr "Corner Mode 1: 45 degrees ..." + +#: flatcamEditors/FlatCAMGrbEditor.py:907 +#: flatcamEditors/FlatCAMGrbEditor.py:1237 +msgid "Click on next Point or click Right mouse button to complete ..." +msgstr "Click on next Point or click Right mouse button to complete ..." + +#: flatcamEditors/FlatCAMGrbEditor.py:1116 +#: flatcamEditors/FlatCAMGrbEditor.py:1149 +msgid "Corner Mode 2: Reverse 45 degrees ..." +msgstr "Corner Mode 2: Reverse 45 degrees ..." + +#: flatcamEditors/FlatCAMGrbEditor.py:1119 +#: flatcamEditors/FlatCAMGrbEditor.py:1146 +msgid "Corner Mode 3: 90 degrees ..." +msgstr "Corner Mode 3: 90 degrees ..." + +#: flatcamEditors/FlatCAMGrbEditor.py:1122 +#: flatcamEditors/FlatCAMGrbEditor.py:1143 +msgid "Corner Mode 4: Reverse 90 degrees ..." +msgstr "Corner Mode 4: Reverse 90 degrees ..." + +#: flatcamEditors/FlatCAMGrbEditor.py:1125 +#: flatcamEditors/FlatCAMGrbEditor.py:1140 +msgid "Corner Mode 5: Free angle ..." +msgstr "Corner Mode 5: Free angle ..." + +#: flatcamEditors/FlatCAMGrbEditor.py:1182 +#: flatcamEditors/FlatCAMGrbEditor.py:1358 +#: flatcamEditors/FlatCAMGrbEditor.py:1397 +msgid "Track Mode 1: 45 degrees ..." +msgstr "Track Mode 1: 45 degrees ..." + +#: flatcamEditors/FlatCAMGrbEditor.py:1338 +#: flatcamEditors/FlatCAMGrbEditor.py:1392 +msgid "Track Mode 2: Reverse 45 degrees ..." +msgstr "Track Mode 2: Reverse 45 degrees ..." + +#: flatcamEditors/FlatCAMGrbEditor.py:1343 +#: flatcamEditors/FlatCAMGrbEditor.py:1387 +msgid "Track Mode 3: 90 degrees ..." +msgstr "Track Mode 3: 90 degrees ..." + +#: flatcamEditors/FlatCAMGrbEditor.py:1348 +#: flatcamEditors/FlatCAMGrbEditor.py:1382 +msgid "Track Mode 4: Reverse 90 degrees ..." +msgstr "Track Mode 4: Reverse 90 degrees ..." + +#: flatcamEditors/FlatCAMGrbEditor.py:1353 +#: flatcamEditors/FlatCAMGrbEditor.py:1377 +msgid "Track Mode 5: Free angle ..." +msgstr "Track Mode 5: Free angle ..." + +#: flatcamEditors/FlatCAMGrbEditor.py:1778 +msgid "Scale the selected Gerber apertures ..." +msgstr "Scale the selected Gerber apertures ..." + +#: flatcamEditors/FlatCAMGrbEditor.py:1820 +msgid "Buffer the selected apertures ..." +msgstr "Buffer the selected apertures ..." + +#: flatcamEditors/FlatCAMGrbEditor.py:1862 +msgid "Mark polygon areas in the edited Gerber ..." +msgstr "Mark polygon areas in the edited Gerber ..." + +#: flatcamEditors/FlatCAMGrbEditor.py:1928 +msgid "Nothing selected to move" +msgstr "Nothing selected to move" + +#: flatcamEditors/FlatCAMGrbEditor.py:2053 +msgid "Done. Apertures Move completed." +msgstr "Done. Apertures Move completed." + +#: flatcamEditors/FlatCAMGrbEditor.py:2135 +msgid "Done. Apertures copied." +msgstr "Done. Apertures copied." + +#: flatcamEditors/FlatCAMGrbEditor.py:2453 flatcamGUI/FlatCAMGUI.py:2218 +#: flatcamGUI/PreferencesUI.py:2623 +msgid "Gerber Editor" +msgstr "Gerber Editor" + +#: flatcamEditors/FlatCAMGrbEditor.py:2473 flatcamGUI/ObjectUI.py:227 +#: flatcamTools/ToolProperties.py:159 +msgid "Apertures" +msgstr "Apertures" + +#: flatcamEditors/FlatCAMGrbEditor.py:2475 flatcamGUI/ObjectUI.py:229 +msgid "Apertures Table for the Gerber Object." +msgstr "Apertures Table for the Gerber Object." + +#: flatcamEditors/FlatCAMGrbEditor.py:2486 +#: flatcamEditors/FlatCAMGrbEditor.py:3846 flatcamGUI/ObjectUI.py:262 +msgid "Code" +msgstr "Code" + +#: flatcamEditors/FlatCAMGrbEditor.py:2486 +#: flatcamEditors/FlatCAMGrbEditor.py:3846 flatcamGUI/ObjectUI.py:262 +#: flatcamGUI/PreferencesUI.py:1184 flatcamGUI/PreferencesUI.py:7776 +#: flatcamGUI/PreferencesUI.py:7805 flatcamGUI/PreferencesUI.py:7907 +#: flatcamTools/ToolCopperThieving.py:261 +#: flatcamTools/ToolCopperThieving.py:301 flatcamTools/ToolFiducials.py:156 +msgid "Size" +msgstr "Size" + +#: flatcamEditors/FlatCAMGrbEditor.py:2486 +#: flatcamEditors/FlatCAMGrbEditor.py:3846 flatcamGUI/ObjectUI.py:262 +msgid "Dim" +msgstr "Dim" + +#: flatcamEditors/FlatCAMGrbEditor.py:2490 flatcamGUI/ObjectUI.py:266 +msgid "Index" +msgstr "Index" + +#: flatcamEditors/FlatCAMGrbEditor.py:2492 +#: flatcamEditors/FlatCAMGrbEditor.py:2521 flatcamGUI/ObjectUI.py:268 +msgid "Aperture Code" +msgstr "Aperture Code" + +#: flatcamEditors/FlatCAMGrbEditor.py:2494 flatcamGUI/ObjectUI.py:270 +msgid "Type of aperture: circular, rectangle, macros etc" +msgstr "Type of aperture: circular, rectangle, macros etc" + +#: flatcamEditors/FlatCAMGrbEditor.py:2496 flatcamGUI/ObjectUI.py:272 +msgid "Aperture Size:" +msgstr "Aperture Size:" + +#: flatcamEditors/FlatCAMGrbEditor.py:2498 flatcamGUI/ObjectUI.py:274 +msgid "" +"Aperture Dimensions:\n" +" - (width, height) for R, O type.\n" +" - (dia, nVertices) for P type" +msgstr "" +"Aperture Dimensions:\n" +" - (width, height) for R, O type.\n" +" - (dia, nVertices) for P type" + +#: flatcamEditors/FlatCAMGrbEditor.py:2522 flatcamGUI/PreferencesUI.py:2654 +msgid "Code for the new aperture" +msgstr "Code for the new aperture" + +#: flatcamEditors/FlatCAMGrbEditor.py:2531 +msgid "Aperture Size" +msgstr "Aperture Size" + +#: flatcamEditors/FlatCAMGrbEditor.py:2533 +msgid "" +"Size for the new aperture.\n" +"If aperture type is 'R' or 'O' then\n" +"this value is automatically\n" +"calculated as:\n" +"sqrt(width**2 + height**2)" +msgstr "" +"Size for the new aperture.\n" +"If aperture type is 'R' or 'O' then\n" +"this value is automatically\n" +"calculated as:\n" +"sqrt(width**2 + height**2)" + +#: flatcamEditors/FlatCAMGrbEditor.py:2547 +msgid "Aperture Type" +msgstr "Aperture Type" + +#: flatcamEditors/FlatCAMGrbEditor.py:2549 +msgid "" +"Select the type of new aperture. Can be:\n" +"C = circular\n" +"R = rectangular\n" +"O = oblong" +msgstr "" +"Select the type of new aperture. Can be:\n" +"C = circular\n" +"R = rectangular\n" +"O = oblong" + +#: flatcamEditors/FlatCAMGrbEditor.py:2560 +msgid "Aperture Dim" +msgstr "Aperture Dim" + +#: flatcamEditors/FlatCAMGrbEditor.py:2562 +msgid "" +"Dimensions for the new aperture.\n" +"Active only for rectangular apertures (type R).\n" +"The format is (width, height)" +msgstr "" +"Dimensions for the new aperture.\n" +"Active only for rectangular apertures (type R).\n" +"The format is (width, height)" + +#: flatcamEditors/FlatCAMGrbEditor.py:2571 +msgid "Add/Delete Aperture" +msgstr "Add/Delete Aperture" + +#: flatcamEditors/FlatCAMGrbEditor.py:2573 +msgid "Add/Delete an aperture in the aperture table" +msgstr "Add/Delete an aperture in the aperture table" + +#: flatcamEditors/FlatCAMGrbEditor.py:2582 +msgid "Add a new aperture to the aperture list." +msgstr "Add a new aperture to the aperture list." + +#: flatcamEditors/FlatCAMGrbEditor.py:2587 +msgid "Delete a aperture in the aperture list" +msgstr "Delete a aperture in the aperture list" + +#: flatcamEditors/FlatCAMGrbEditor.py:2604 +msgid "Buffer Aperture" +msgstr "Buffer Aperture" + +#: flatcamEditors/FlatCAMGrbEditor.py:2606 +msgid "Buffer a aperture in the aperture list" +msgstr "Buffer a aperture in the aperture list" + +#: flatcamEditors/FlatCAMGrbEditor.py:2619 flatcamGUI/PreferencesUI.py:2790 +msgid "Buffer distance" +msgstr "Buffer distance" + +#: flatcamEditors/FlatCAMGrbEditor.py:2620 +msgid "Buffer corner" +msgstr "Buffer corner" + +#: flatcamEditors/FlatCAMGrbEditor.py:2622 +#| msgid "" +#| "There are 3 types of corners:\n" +#| " - 'Round': the corner is rounded.\n" +#| " - 'Square:' the corner is met in a sharp angle.\n" +#| " - 'Beveled:' the corner is a line that directly connects the features " +#| "meeting in the corner" +msgid "" +"There are 3 types of corners:\n" +" - 'Round': the corner is rounded.\n" +" - 'Square': the corner is met in a sharp angle.\n" +" - 'Beveled': the corner is a line that directly connects the features " +"meeting in the corner" +msgstr "" +"There are 3 types of corners:\n" +" - 'Round': the corner is rounded.\n" +" - 'Square': the corner is met in a sharp angle.\n" +" - 'Beveled': the corner is a line that directly connects the features " +"meeting in the corner" + +#: flatcamEditors/FlatCAMGrbEditor.py:2637 flatcamGUI/FlatCAMGUI.py:1046 +#: flatcamGUI/FlatCAMGUI.py:2123 flatcamGUI/FlatCAMGUI.py:2195 +#: flatcamGUI/FlatCAMGUI.py:2238 flatcamGUI/FlatCAMGUI.py:2721 +#: flatcamGUI/PreferencesUI.py:6880 flatcamTools/ToolTransform.py:29 +msgid "Buffer" +msgstr "Buffer" + +#: flatcamEditors/FlatCAMGrbEditor.py:2652 +msgid "Scale Aperture" +msgstr "Scale Aperture" + +#: flatcamEditors/FlatCAMGrbEditor.py:2654 +msgid "Scale a aperture in the aperture list" +msgstr "Scale a aperture in the aperture list" + +#: flatcamEditors/FlatCAMGrbEditor.py:2662 flatcamGUI/PreferencesUI.py:2805 +msgid "Scale factor" +msgstr "Scale factor" + +#: flatcamEditors/FlatCAMGrbEditor.py:2664 +msgid "" +"The factor by which to scale the selected aperture.\n" +"Values can be between 0.0000 and 999.9999" +msgstr "" +"The factor by which to scale the selected aperture.\n" +"Values can be between 0.0000 and 999.9999" + +#: flatcamEditors/FlatCAMGrbEditor.py:2692 +msgid "Mark polygons" +msgstr "Mark polygons" + +#: flatcamEditors/FlatCAMGrbEditor.py:2694 +msgid "Mark the polygon areas." +msgstr "Mark the polygon areas." + +#: flatcamEditors/FlatCAMGrbEditor.py:2702 +msgid "Area UPPER threshold" +msgstr "Area UPPER threshold" + +#: flatcamEditors/FlatCAMGrbEditor.py:2704 +msgid "" +"The threshold value, all areas less than this are marked.\n" +"Can have a value between 0.0000 and 9999.9999" +msgstr "" +"The threshold value, all areas less than this are marked.\n" +"Can have a value between 0.0000 and 9999.9999" + +#: flatcamEditors/FlatCAMGrbEditor.py:2711 +msgid "Area LOWER threshold" +msgstr "Area LOWER threshold" + +#: flatcamEditors/FlatCAMGrbEditor.py:2713 +msgid "" +"The threshold value, all areas more than this are marked.\n" +"Can have a value between 0.0000 and 9999.9999" +msgstr "" +"The threshold value, all areas more than this are marked.\n" +"Can have a value between 0.0000 and 9999.9999" + +#: flatcamEditors/FlatCAMGrbEditor.py:2727 +msgid "Mark" +msgstr "Mark" + +#: flatcamEditors/FlatCAMGrbEditor.py:2729 +msgid "Mark the polygons that fit within limits." +msgstr "Mark the polygons that fit within limits." + +#: flatcamEditors/FlatCAMGrbEditor.py:2735 +msgid "Delete all the marked polygons." +msgstr "Delete all the marked polygons." + +#: flatcamEditors/FlatCAMGrbEditor.py:2741 +msgid "Clear all the markings." +msgstr "Clear all the markings." + +#: flatcamEditors/FlatCAMGrbEditor.py:2761 flatcamGUI/FlatCAMGUI.py:1031 +#: flatcamGUI/FlatCAMGUI.py:2123 flatcamGUI/FlatCAMGUI.py:2706 +msgid "Add Pad Array" +msgstr "Add Pad Array" + +#: flatcamEditors/FlatCAMGrbEditor.py:2763 +msgid "Add an array of pads (linear or circular array)" +msgstr "Add an array of pads (linear or circular array)" + +#: flatcamEditors/FlatCAMGrbEditor.py:2769 +msgid "" +"Select the type of pads array to create.\n" +"It can be Linear X(Y) or Circular" +msgstr "" +"Select the type of pads array to create.\n" +"It can be Linear X(Y) or Circular" + +#: flatcamEditors/FlatCAMGrbEditor.py:2780 flatcamGUI/PreferencesUI.py:2691 +msgid "Nr of pads" +msgstr "Nr of pads" + +#: flatcamEditors/FlatCAMGrbEditor.py:2782 flatcamGUI/PreferencesUI.py:2693 +msgid "Specify how many pads to be in the array." +msgstr "Specify how many pads to be in the array." + +#: flatcamEditors/FlatCAMGrbEditor.py:2831 +msgid "" +"Angle at which the linear array is placed.\n" +"The precision is of max 2 decimals.\n" +"Min value is: -359.99 degrees.\n" +"Max value is: 360.00 degrees." +msgstr "" +"Angle at which the linear array is placed.\n" +"The precision is of max 2 decimals.\n" +"Min value is: -359.99 degrees.\n" +"Max value is: 360.00 degrees." + +#: flatcamEditors/FlatCAMGrbEditor.py:3321 +#: flatcamEditors/FlatCAMGrbEditor.py:3325 +msgid "Aperture code value is missing or wrong format. Add it and retry." +msgstr "Aperture code value is missing or wrong format. Add it and retry." + +#: flatcamEditors/FlatCAMGrbEditor.py:3361 +msgid "" +"Aperture dimensions value is missing or wrong format. Add it in format " +"(width, height) and retry." +msgstr "" +"Aperture dimensions value is missing or wrong format. Add it in format " +"(width, height) and retry." + +#: flatcamEditors/FlatCAMGrbEditor.py:3374 +msgid "Aperture size value is missing or wrong format. Add it and retry." +msgstr "Aperture size value is missing or wrong format. Add it and retry." + +#: flatcamEditors/FlatCAMGrbEditor.py:3385 +msgid "Aperture already in the aperture table." +msgstr "Aperture already in the aperture table." + +#: flatcamEditors/FlatCAMGrbEditor.py:3393 +msgid "Added new aperture with code" +msgstr "Added new aperture with code" + +#: flatcamEditors/FlatCAMGrbEditor.py:3422 +msgid " Select an aperture in Aperture Table" +msgstr " Select an aperture in Aperture Table" + +#: flatcamEditors/FlatCAMGrbEditor.py:3430 +msgid "Select an aperture in Aperture Table -->" +msgstr "Select an aperture in Aperture Table -->" + +#: flatcamEditors/FlatCAMGrbEditor.py:3453 +msgid "Deleted aperture with code" +msgstr "Deleted aperture with code" + +#: flatcamEditors/FlatCAMGrbEditor.py:3950 +msgid "Loading Gerber into Editor" +msgstr "Loading Gerber into Editor" + +#: flatcamEditors/FlatCAMGrbEditor.py:4078 +msgid "Setting up the UI" +msgstr "Setting up the UI" + +#: flatcamEditors/FlatCAMGrbEditor.py:4079 +msgid "Adding geometry finished. Preparing the GUI" +msgstr "Adding geometry finished. Preparing the GUI" + +#: flatcamEditors/FlatCAMGrbEditor.py:4088 +msgid "Finished loading the Gerber object into the editor." +msgstr "Finished loading the Gerber object into the editor." + +#: flatcamEditors/FlatCAMGrbEditor.py:4228 +msgid "" +"There are no Aperture definitions in the file. Aborting Gerber creation." +msgstr "" +"There are no Aperture definitions in the file. Aborting Gerber creation." + +#: flatcamEditors/FlatCAMGrbEditor.py:4238 +msgid "Creating Gerber." +msgstr "Creating Gerber." + +#: flatcamEditors/FlatCAMGrbEditor.py:4247 +msgid "Done. Gerber editing finished." +msgstr "Done. Gerber editing finished." + +#: flatcamEditors/FlatCAMGrbEditor.py:4265 +msgid "Cancelled. No aperture is selected" +msgstr "Cancelled. No aperture is selected" + +#: flatcamEditors/FlatCAMGrbEditor.py:4826 +msgid "Failed. No aperture geometry is selected." +msgstr "Failed. No aperture geometry is selected." + +#: flatcamEditors/FlatCAMGrbEditor.py:4835 +#: flatcamEditors/FlatCAMGrbEditor.py:5106 +msgid "Done. Apertures geometry deleted." +msgstr "Done. Apertures geometry deleted." + +#: flatcamEditors/FlatCAMGrbEditor.py:4978 +msgid "No aperture to buffer. Select at least one aperture and try again." +msgstr "No aperture to buffer. Select at least one aperture and try again." + +#: flatcamEditors/FlatCAMGrbEditor.py:4990 +msgid "Failed." +msgstr "Failed." + +#: flatcamEditors/FlatCAMGrbEditor.py:5009 +msgid "Scale factor value is missing or wrong format. Add it and retry." +msgstr "Scale factor value is missing or wrong format. Add it and retry." + +#: flatcamEditors/FlatCAMGrbEditor.py:5041 +msgid "No aperture to scale. Select at least one aperture and try again." +msgstr "No aperture to scale. Select at least one aperture and try again." + +#: flatcamEditors/FlatCAMGrbEditor.py:5057 +msgid "Done. Scale Tool completed." +msgstr "Done. Scale Tool completed." + +#: flatcamEditors/FlatCAMGrbEditor.py:5095 +msgid "Polygons marked." +msgstr "Polygons marked." + +#: flatcamEditors/FlatCAMGrbEditor.py:5098 +msgid "No polygons were marked. None fit within the limits." +msgstr "No polygons were marked. None fit within the limits." + +#: flatcamEditors/FlatCAMGrbEditor.py:5822 +msgid "Rotation action was not executed." +msgstr "Rotation action was not executed." + +#: flatcamEditors/FlatCAMGrbEditor.py:5950 +msgid "Skew action was not executed." +msgstr "Skew action was not executed." + +#: flatcamEditors/FlatCAMGrbEditor.py:6015 +msgid "Scale action was not executed." +msgstr "Scale action was not executed." + +#: flatcamEditors/FlatCAMGrbEditor.py:6058 +msgid "Offset action was not executed." +msgstr "Offset action was not executed." + +#: flatcamEditors/FlatCAMGrbEditor.py:6108 +msgid "Geometry shape offset Y cancelled" +msgstr "Geometry shape offset Y cancelled" + +#: flatcamEditors/FlatCAMGrbEditor.py:6123 +msgid "Geometry shape skew X cancelled" +msgstr "Geometry shape skew X cancelled" + +#: flatcamEditors/FlatCAMGrbEditor.py:6138 +msgid "Geometry shape skew Y cancelled" +msgstr "Geometry shape skew Y cancelled" + +#: flatcamEditors/FlatCAMTextEditor.py:74 +msgid "Print Preview" +msgstr "Print Preview" + +#: flatcamEditors/FlatCAMTextEditor.py:75 +msgid "Open a OS standard Preview Print window." +msgstr "Open a OS standard Preview Print window." + +#: flatcamEditors/FlatCAMTextEditor.py:78 +msgid "Print Code" +msgstr "Print Code" + +#: flatcamEditors/FlatCAMTextEditor.py:79 +msgid "Open a OS standard Print window." +msgstr "Open a OS standard Print window." + +#: flatcamEditors/FlatCAMTextEditor.py:81 +msgid "Find in Code" +msgstr "Find in Code" + +#: flatcamEditors/FlatCAMTextEditor.py:82 +msgid "Will search and highlight in yellow the string in the Find box." +msgstr "Will search and highlight in yellow the string in the Find box." + +#: flatcamEditors/FlatCAMTextEditor.py:86 +msgid "Find box. Enter here the strings to be searched in the text." +msgstr "Find box. Enter here the strings to be searched in the text." + +#: flatcamEditors/FlatCAMTextEditor.py:88 +msgid "Replace With" +msgstr "Replace With" + +#: flatcamEditors/FlatCAMTextEditor.py:89 +msgid "" +"Will replace the string from the Find box with the one in the Replace box." +msgstr "" +"Will replace the string from the Find box with the one in the Replace box." + +#: flatcamEditors/FlatCAMTextEditor.py:93 +msgid "String to replace the one in the Find box throughout the text." +msgstr "String to replace the one in the Find box throughout the text." + +#: flatcamEditors/FlatCAMTextEditor.py:95 flatcamGUI/ObjectUI.py:485 +#: flatcamGUI/ObjectUI.py:2138 flatcamGUI/PreferencesUI.py:2250 +#: flatcamGUI/PreferencesUI.py:4712 +msgid "All" +msgstr "All" + +#: flatcamEditors/FlatCAMTextEditor.py:96 +msgid "" +"When checked it will replace all instances in the 'Find' box\n" +"with the text in the 'Replace' box.." +msgstr "" +"When checked it will replace all instances in the 'Find' box\n" +"with the text in the 'Replace' box.." + +#: flatcamEditors/FlatCAMTextEditor.py:99 +msgid "Copy All" +msgstr "Copy All" + +#: flatcamEditors/FlatCAMTextEditor.py:100 +msgid "Will copy all the text in the Code Editor to the clipboard." +msgstr "Will copy all the text in the Code Editor to the clipboard." + +#: flatcamEditors/FlatCAMTextEditor.py:103 +msgid "Open Code" +msgstr "Open Code" + +#: flatcamEditors/FlatCAMTextEditor.py:104 +msgid "Will open a text file in the editor." +msgstr "Will open a text file in the editor." + +#: flatcamEditors/FlatCAMTextEditor.py:106 +msgid "Save Code" +msgstr "Save Code" + +#: flatcamEditors/FlatCAMTextEditor.py:107 +msgid "Will save the text in the editor into a file." +msgstr "Will save the text in the editor into a file." + +#: flatcamEditors/FlatCAMTextEditor.py:109 +msgid "Run Code" +msgstr "Run Code" + +#: flatcamEditors/FlatCAMTextEditor.py:110 +msgid "Will run the TCL commands found in the text file, one by one." +msgstr "Will run the TCL commands found in the text file, one by one." + +#: flatcamEditors/FlatCAMTextEditor.py:184 +msgid "Open file" +msgstr "Open file" + +#: flatcamEditors/FlatCAMTextEditor.py:215 +#: flatcamEditors/FlatCAMTextEditor.py:220 +msgid "Export Code ..." +msgstr "Export Code ..." + +#: flatcamEditors/FlatCAMTextEditor.py:272 flatcamObjects/FlatCAMCNCJob.py:954 +#: flatcamTools/ToolSolderPaste.py:1530 +msgid "No such file or directory" +msgstr "No such file or directory" + +#: flatcamEditors/FlatCAMTextEditor.py:284 flatcamObjects/FlatCAMCNCJob.py:968 +msgid "Saved to" +msgstr "Saved to" + +#: flatcamEditors/FlatCAMTextEditor.py:334 +msgid "Code Editor content copied to clipboard ..." +msgstr "Code Editor content copied to clipboard ..." + +#: flatcamGUI/FlatCAMGUI.py:66 flatcamGUI/FlatCAMGUI.py:68 +#: flatcamGUI/FlatCAMGUI.py:2148 +msgid "Toggle Panel" +msgstr "Toggle Panel" + +#: flatcamGUI/FlatCAMGUI.py:78 +msgid "File" +msgstr "File" + +#: flatcamGUI/FlatCAMGUI.py:83 +msgid "&New Project ...\tCtrl+N" +msgstr "&New Project ...\tCtrl+N" + +#: flatcamGUI/FlatCAMGUI.py:85 +msgid "Will create a new, blank project" +msgstr "Will create a new, blank project" + +#: flatcamGUI/FlatCAMGUI.py:90 +msgid "&New" +msgstr "&New" + +#: flatcamGUI/FlatCAMGUI.py:94 +msgid "Geometry\tN" +msgstr "Geometry\tN" + +#: flatcamGUI/FlatCAMGUI.py:96 +msgid "Will create a new, empty Geometry Object." +msgstr "Will create a new, empty Geometry Object." + +#: flatcamGUI/FlatCAMGUI.py:99 +msgid "Gerber\tB" +msgstr "Gerber\tB" + +#: flatcamGUI/FlatCAMGUI.py:101 +msgid "Will create a new, empty Gerber Object." +msgstr "Will create a new, empty Gerber Object." + +#: flatcamGUI/FlatCAMGUI.py:104 +msgid "Excellon\tL" +msgstr "Excellon\tL" + +#: flatcamGUI/FlatCAMGUI.py:106 +msgid "Will create a new, empty Excellon Object." +msgstr "Will create a new, empty Excellon Object." + +#: flatcamGUI/FlatCAMGUI.py:111 +msgid "Document\tD" +msgstr "Document\tD" + +#: flatcamGUI/FlatCAMGUI.py:113 +msgid "Will create a new, empty Document Object." +msgstr "Will create a new, empty Document Object." + +#: flatcamGUI/FlatCAMGUI.py:117 flatcamGUI/FlatCAMGUI.py:4327 +#: flatcamTools/ToolPcbWizard.py:62 flatcamTools/ToolPcbWizard.py:69 +msgid "Open" +msgstr "Open" + +#: flatcamGUI/FlatCAMGUI.py:122 +msgid "Open &Project ..." +msgstr "Open &Project ..." + +#: flatcamGUI/FlatCAMGUI.py:128 flatcamGUI/FlatCAMGUI.py:4337 +msgid "Open &Gerber ...\tCtrl+G" +msgstr "Open &Gerber ...\tCtrl+G" + +#: flatcamGUI/FlatCAMGUI.py:133 flatcamGUI/FlatCAMGUI.py:4342 +msgid "Open &Excellon ...\tCtrl+E" +msgstr "Open &Excellon ...\tCtrl+E" + +#: flatcamGUI/FlatCAMGUI.py:138 flatcamGUI/FlatCAMGUI.py:4347 +msgid "Open G-&Code ..." +msgstr "Open G-&Code ..." + +#: flatcamGUI/FlatCAMGUI.py:145 +msgid "Open Config ..." +msgstr "Open Config ..." + +#: flatcamGUI/FlatCAMGUI.py:150 +msgid "Recent projects" +msgstr "Recent projects" + +#: flatcamGUI/FlatCAMGUI.py:152 +msgid "Recent files" +msgstr "Recent files" + +#: flatcamGUI/FlatCAMGUI.py:155 flatcamGUI/FlatCAMGUI.py:738 +#: flatcamGUI/FlatCAMGUI.py:1324 +msgid "Save" +msgstr "Save" + +#: flatcamGUI/FlatCAMGUI.py:159 +msgid "&Save Project ...\tCtrl+S" +msgstr "&Save Project ...\tCtrl+S" + +#: flatcamGUI/FlatCAMGUI.py:164 +msgid "Save Project &As ...\tCtrl+Shift+S" +msgstr "Save Project &As ...\tCtrl+Shift+S" + +#: flatcamGUI/FlatCAMGUI.py:179 +msgid "Scripting" +msgstr "Scripting" + +#: flatcamGUI/FlatCAMGUI.py:183 flatcamGUI/FlatCAMGUI.py:888 +#: flatcamGUI/FlatCAMGUI.py:2567 +msgid "New Script ..." +msgstr "New Script ..." + +#: flatcamGUI/FlatCAMGUI.py:185 flatcamGUI/FlatCAMGUI.py:890 +#: flatcamGUI/FlatCAMGUI.py:2569 +msgid "Open Script ..." +msgstr "Open Script ..." + +#: flatcamGUI/FlatCAMGUI.py:187 flatcamGUI/FlatCAMGUI.py:892 +#: flatcamGUI/FlatCAMGUI.py:2571 flatcamGUI/FlatCAMGUI.py:4316 +msgid "Run Script ..." +msgstr "Run Script ..." + +#: flatcamGUI/FlatCAMGUI.py:189 flatcamGUI/FlatCAMGUI.py:4318 +msgid "" +"Will run the opened Tcl Script thus\n" +"enabling the automation of certain\n" +"functions of FlatCAM." +msgstr "" +"Will run the opened Tcl Script thus\n" +"enabling the automation of certain\n" +"functions of FlatCAM." + +#: flatcamGUI/FlatCAMGUI.py:203 +msgid "Import" +msgstr "Import" + +#: flatcamGUI/FlatCAMGUI.py:205 +msgid "&SVG as Geometry Object ..." +msgstr "&SVG as Geometry Object ..." + +#: flatcamGUI/FlatCAMGUI.py:208 +msgid "&SVG as Gerber Object ..." +msgstr "&SVG as Gerber Object ..." + +#: flatcamGUI/FlatCAMGUI.py:213 +msgid "&DXF as Geometry Object ..." +msgstr "&DXF as Geometry Object ..." + +#: flatcamGUI/FlatCAMGUI.py:216 +msgid "&DXF as Gerber Object ..." +msgstr "&DXF as Gerber Object ..." + +#: flatcamGUI/FlatCAMGUI.py:220 +msgid "HPGL2 as Geometry Object ..." +msgstr "HPGL2 as Geometry Object ..." + +#: flatcamGUI/FlatCAMGUI.py:226 +msgid "Export" +msgstr "Export" + +#: flatcamGUI/FlatCAMGUI.py:230 +msgid "Export &SVG ..." +msgstr "Export &SVG ..." + +#: flatcamGUI/FlatCAMGUI.py:234 +msgid "Export DXF ..." +msgstr "Export DXF ..." + +#: flatcamGUI/FlatCAMGUI.py:240 +msgid "Export &PNG ..." +msgstr "Export &PNG ..." + +#: flatcamGUI/FlatCAMGUI.py:242 +msgid "" +"Will export an image in PNG format,\n" +"the saved image will contain the visual \n" +"information currently in FlatCAM Plot Area." +msgstr "" +"Will export an image in PNG format,\n" +"the saved image will contain the visual \n" +"information currently in FlatCAM Plot Area." + +#: flatcamGUI/FlatCAMGUI.py:251 +msgid "Export &Excellon ..." +msgstr "Export &Excellon ..." + +#: flatcamGUI/FlatCAMGUI.py:253 +msgid "" +"Will export an Excellon Object as Excellon file,\n" +"the coordinates format, the file units and zeros\n" +"are set in Preferences -> Excellon Export." +msgstr "" +"Will export an Excellon Object as Excellon file,\n" +"the coordinates format, the file units and zeros\n" +"are set in Preferences -> Excellon Export." + +#: flatcamGUI/FlatCAMGUI.py:260 +msgid "Export &Gerber ..." +msgstr "Export &Gerber ..." + +#: flatcamGUI/FlatCAMGUI.py:262 +msgid "" +"Will export an Gerber Object as Gerber file,\n" +"the coordinates format, the file units and zeros\n" +"are set in Preferences -> Gerber Export." +msgstr "" +"Will export an Gerber Object as Gerber file,\n" +"the coordinates format, the file units and zeros\n" +"are set in Preferences -> Gerber Export." + +#: flatcamGUI/FlatCAMGUI.py:272 +msgid "Backup" +msgstr "Backup" + +#: flatcamGUI/FlatCAMGUI.py:277 +msgid "Import Preferences from file ..." +msgstr "Import Preferences from file ..." + +#: flatcamGUI/FlatCAMGUI.py:283 +msgid "Export Preferences to file ..." +msgstr "Export Preferences to file ..." + +#: flatcamGUI/FlatCAMGUI.py:297 flatcamGUI/FlatCAMGUI.py:1715 +msgid "Print (PDF)" +msgstr "Print (PDF)" + +#: flatcamGUI/FlatCAMGUI.py:305 +msgid "E&xit" +msgstr "E&xit" + +#: flatcamGUI/FlatCAMGUI.py:313 flatcamGUI/FlatCAMGUI.py:732 +#: flatcamGUI/FlatCAMGUI.py:2271 +msgid "Edit" +msgstr "Edit" + +#: flatcamGUI/FlatCAMGUI.py:317 +msgid "Edit Object\tE" +msgstr "Edit Object\tE" + +#: flatcamGUI/FlatCAMGUI.py:319 +msgid "Close Editor\tCtrl+S" +msgstr "Close Editor\tCtrl+S" + +#: flatcamGUI/FlatCAMGUI.py:328 +msgid "Conversion" +msgstr "Conversion" + +#: flatcamGUI/FlatCAMGUI.py:330 +msgid "&Join Geo/Gerber/Exc -> Geo" +msgstr "&Join Geo/Gerber/Exc -> Geo" + +#: flatcamGUI/FlatCAMGUI.py:332 +msgid "" +"Merge a selection of objects, which can be of type:\n" +"- Gerber\n" +"- Excellon\n" +"- Geometry\n" +"into a new combo Geometry object." +msgstr "" +"Merge a selection of objects, which can be of type:\n" +"- Gerber\n" +"- Excellon\n" +"- Geometry\n" +"into a new combo Geometry object." + +#: flatcamGUI/FlatCAMGUI.py:339 +msgid "Join Excellon(s) -> Excellon" +msgstr "Join Excellon(s) -> Excellon" + +#: flatcamGUI/FlatCAMGUI.py:341 +msgid "Merge a selection of Excellon objects into a new combo Excellon object." +msgstr "" +"Merge a selection of Excellon objects into a new combo Excellon object." + +#: flatcamGUI/FlatCAMGUI.py:344 +msgid "Join Gerber(s) -> Gerber" +msgstr "Join Gerber(s) -> Gerber" + +#: flatcamGUI/FlatCAMGUI.py:346 +msgid "Merge a selection of Gerber objects into a new combo Gerber object." +msgstr "Merge a selection of Gerber objects into a new combo Gerber object." + +#: flatcamGUI/FlatCAMGUI.py:351 +msgid "Convert Single to MultiGeo" +msgstr "Convert Single to MultiGeo" + +#: flatcamGUI/FlatCAMGUI.py:353 +msgid "" +"Will convert a Geometry object from single_geometry type\n" +"to a multi_geometry type." +msgstr "" +"Will convert a Geometry object from single_geometry type\n" +"to a multi_geometry type." + +#: flatcamGUI/FlatCAMGUI.py:357 +msgid "Convert Multi to SingleGeo" +msgstr "Convert Multi to SingleGeo" + +#: flatcamGUI/FlatCAMGUI.py:359 +msgid "" +"Will convert a Geometry object from multi_geometry type\n" +"to a single_geometry type." +msgstr "" +"Will convert a Geometry object from multi_geometry type\n" +"to a single_geometry type." + +#: flatcamGUI/FlatCAMGUI.py:366 +msgid "Convert Any to Geo" +msgstr "Convert Any to Geo" + +#: flatcamGUI/FlatCAMGUI.py:369 +msgid "Convert Any to Gerber" +msgstr "Convert Any to Gerber" + +#: flatcamGUI/FlatCAMGUI.py:375 +msgid "&Copy\tCtrl+C" +msgstr "&Copy\tCtrl+C" + +#: flatcamGUI/FlatCAMGUI.py:380 +msgid "&Delete\tDEL" +msgstr "&Delete\tDEL" + +#: flatcamGUI/FlatCAMGUI.py:385 +msgid "Se&t Origin\tO" +msgstr "Se&t Origin\tO" + +#: flatcamGUI/FlatCAMGUI.py:387 +msgid "Move to Origin\tShift+O" +msgstr "Move to Origin\tShift+O" + +#: flatcamGUI/FlatCAMGUI.py:390 +msgid "Jump to Location\tJ" +msgstr "Jump to Location\tJ" + +#: flatcamGUI/FlatCAMGUI.py:392 +msgid "Locate in Object\tShift+J" +msgstr "Locate in Object\tShift+J" + +#: flatcamGUI/FlatCAMGUI.py:397 +msgid "Toggle Units\tQ" +msgstr "Toggle Units\tQ" + +#: flatcamGUI/FlatCAMGUI.py:399 +msgid "&Select All\tCtrl+A" +msgstr "&Select All\tCtrl+A" + +#: flatcamGUI/FlatCAMGUI.py:404 +msgid "&Preferences\tShift+P" +msgstr "&Preferences\tShift+P" + +#: flatcamGUI/FlatCAMGUI.py:410 flatcamTools/ToolProperties.py:155 +msgid "Options" +msgstr "Options" + +#: flatcamGUI/FlatCAMGUI.py:412 +msgid "&Rotate Selection\tShift+(R)" +msgstr "&Rotate Selection\tShift+(R)" + +#: flatcamGUI/FlatCAMGUI.py:417 +msgid "&Skew on X axis\tShift+X" +msgstr "&Skew on X axis\tShift+X" + +#: flatcamGUI/FlatCAMGUI.py:419 +msgid "S&kew on Y axis\tShift+Y" +msgstr "S&kew on Y axis\tShift+Y" + +#: flatcamGUI/FlatCAMGUI.py:424 +msgid "Flip on &X axis\tX" +msgstr "Flip on &X axis\tX" + +#: flatcamGUI/FlatCAMGUI.py:426 +msgid "Flip on &Y axis\tY" +msgstr "Flip on &Y axis\tY" + +#: flatcamGUI/FlatCAMGUI.py:431 +msgid "View source\tAlt+S" +msgstr "View source\tAlt+S" + +#: flatcamGUI/FlatCAMGUI.py:433 +msgid "Tools DataBase\tCtrl+D" +msgstr "Tools DataBase\tCtrl+D" + +#: flatcamGUI/FlatCAMGUI.py:440 flatcamGUI/FlatCAMGUI.py:2168 +msgid "View" +msgstr "View" + +#: flatcamGUI/FlatCAMGUI.py:442 +msgid "Enable all plots\tAlt+1" +msgstr "Enable all plots\tAlt+1" + +#: flatcamGUI/FlatCAMGUI.py:444 +msgid "Disable all plots\tAlt+2" +msgstr "Disable all plots\tAlt+2" + +#: flatcamGUI/FlatCAMGUI.py:446 +msgid "Disable non-selected\tAlt+3" +msgstr "Disable non-selected\tAlt+3" + +#: flatcamGUI/FlatCAMGUI.py:450 +msgid "&Zoom Fit\tV" +msgstr "&Zoom Fit\tV" + +#: flatcamGUI/FlatCAMGUI.py:452 +msgid "&Zoom In\t=" +msgstr "&Zoom In\t=" + +#: flatcamGUI/FlatCAMGUI.py:454 +msgid "&Zoom Out\t-" +msgstr "&Zoom Out\t-" + +#: flatcamGUI/FlatCAMGUI.py:459 +msgid "Redraw All\tF5" +msgstr "Redraw All\tF5" + +#: flatcamGUI/FlatCAMGUI.py:463 +msgid "Toggle Code Editor\tShift+E" +msgstr "Toggle Code Editor\tShift+E" + +#: flatcamGUI/FlatCAMGUI.py:466 +msgid "&Toggle FullScreen\tAlt+F10" +msgstr "&Toggle FullScreen\tAlt+F10" + +#: flatcamGUI/FlatCAMGUI.py:468 +msgid "&Toggle Plot Area\tCtrl+F10" +msgstr "&Toggle Plot Area\tCtrl+F10" + +#: flatcamGUI/FlatCAMGUI.py:470 +msgid "&Toggle Project/Sel/Tool\t`" +msgstr "&Toggle Project/Sel/Tool\t`" + +#: flatcamGUI/FlatCAMGUI.py:474 +msgid "&Toggle Grid Snap\tG" +msgstr "&Toggle Grid Snap\tG" + +#: flatcamGUI/FlatCAMGUI.py:476 +msgid "&Toggle Grid Lines\tAlt+G" +msgstr "&Toggle Grid Lines\tAlt+G" + +#: flatcamGUI/FlatCAMGUI.py:478 +msgid "&Toggle Axis\tShift+G" +msgstr "&Toggle Axis\tShift+G" + +#: flatcamGUI/FlatCAMGUI.py:480 +msgid "Toggle Workspace\tShift+W" +msgstr "Toggle Workspace\tShift+W" + +#: flatcamGUI/FlatCAMGUI.py:485 +msgid "Objects" +msgstr "Objects" + +#: flatcamGUI/FlatCAMGUI.py:499 +msgid "&Command Line\tS" +msgstr "&Command Line\tS" + +#: flatcamGUI/FlatCAMGUI.py:504 +msgid "Help" +msgstr "Help" + +#: flatcamGUI/FlatCAMGUI.py:506 +msgid "Online Help\tF1" +msgstr "Online Help\tF1" + +#: flatcamGUI/FlatCAMGUI.py:516 +msgid "Report a bug" +msgstr "Report a bug" + +#: flatcamGUI/FlatCAMGUI.py:519 +msgid "Excellon Specification" +msgstr "Excellon Specification" + +#: flatcamGUI/FlatCAMGUI.py:521 +msgid "Gerber Specification" +msgstr "Gerber Specification" + +#: flatcamGUI/FlatCAMGUI.py:526 +msgid "Shortcuts List\tF3" +msgstr "Shortcuts List\tF3" + +#: flatcamGUI/FlatCAMGUI.py:528 +msgid "YouTube Channel\tF4" +msgstr "YouTube Channel\tF4" + +#: flatcamGUI/FlatCAMGUI.py:539 +msgid "Add Circle\tO" +msgstr "Add Circle\tO" + +#: flatcamGUI/FlatCAMGUI.py:542 +msgid "Add Arc\tA" +msgstr "Add Arc\tA" + +#: flatcamGUI/FlatCAMGUI.py:545 +msgid "Add Rectangle\tR" +msgstr "Add Rectangle\tR" + +#: flatcamGUI/FlatCAMGUI.py:548 +msgid "Add Polygon\tN" +msgstr "Add Polygon\tN" + +#: flatcamGUI/FlatCAMGUI.py:551 +msgid "Add Path\tP" +msgstr "Add Path\tP" + +#: flatcamGUI/FlatCAMGUI.py:554 +msgid "Add Text\tT" +msgstr "Add Text\tT" + +#: flatcamGUI/FlatCAMGUI.py:557 +msgid "Polygon Union\tU" +msgstr "Polygon Union\tU" + +#: flatcamGUI/FlatCAMGUI.py:559 +msgid "Polygon Intersection\tE" +msgstr "Polygon Intersection\tE" + +#: flatcamGUI/FlatCAMGUI.py:561 +msgid "Polygon Subtraction\tS" +msgstr "Polygon Subtraction\tS" + +#: flatcamGUI/FlatCAMGUI.py:565 +msgid "Cut Path\tX" +msgstr "Cut Path\tX" + +#: flatcamGUI/FlatCAMGUI.py:569 +msgid "Copy Geom\tC" +msgstr "Copy Geom\tC" + +#: flatcamGUI/FlatCAMGUI.py:571 +msgid "Delete Shape\tDEL" +msgstr "Delete Shape\tDEL" + +#: flatcamGUI/FlatCAMGUI.py:575 flatcamGUI/FlatCAMGUI.py:662 +msgid "Move\tM" +msgstr "Move\tM" + +#: flatcamGUI/FlatCAMGUI.py:577 +msgid "Buffer Tool\tB" +msgstr "Buffer Tool\tB" + +#: flatcamGUI/FlatCAMGUI.py:580 +msgid "Paint Tool\tI" +msgstr "Paint Tool\tI" + +#: flatcamGUI/FlatCAMGUI.py:583 +msgid "Transform Tool\tAlt+R" +msgstr "Transform Tool\tAlt+R" + +#: flatcamGUI/FlatCAMGUI.py:587 +msgid "Toggle Corner Snap\tK" +msgstr "Toggle Corner Snap\tK" + +#: flatcamGUI/FlatCAMGUI.py:593 +msgid ">Excellon Editor<" +msgstr ">Excellon Editor<" + +#: flatcamGUI/FlatCAMGUI.py:597 +msgid "Add Drill Array\tA" +msgstr "Add Drill Array\tA" + +#: flatcamGUI/FlatCAMGUI.py:599 +msgid "Add Drill\tD" +msgstr "Add Drill\tD" + +#: flatcamGUI/FlatCAMGUI.py:603 +msgid "Add Slot Array\tQ" +msgstr "Add Slot Array\tQ" + +#: flatcamGUI/FlatCAMGUI.py:605 +msgid "Add Slot\tW" +msgstr "Add Slot\tW" + +#: flatcamGUI/FlatCAMGUI.py:609 +msgid "Resize Drill(S)\tR" +msgstr "Resize Drill(S)\tR" + +#: flatcamGUI/FlatCAMGUI.py:612 flatcamGUI/FlatCAMGUI.py:656 +msgid "Copy\tC" +msgstr "Copy\tC" + +#: flatcamGUI/FlatCAMGUI.py:614 flatcamGUI/FlatCAMGUI.py:658 +msgid "Delete\tDEL" +msgstr "Delete\tDEL" + +#: flatcamGUI/FlatCAMGUI.py:619 +msgid "Move Drill(s)\tM" +msgstr "Move Drill(s)\tM" + +#: flatcamGUI/FlatCAMGUI.py:624 +msgid ">Gerber Editor<" +msgstr ">Gerber Editor<" + +#: flatcamGUI/FlatCAMGUI.py:628 +msgid "Add Pad\tP" +msgstr "Add Pad\tP" + +#: flatcamGUI/FlatCAMGUI.py:630 +msgid "Add Pad Array\tA" +msgstr "Add Pad Array\tA" + +#: flatcamGUI/FlatCAMGUI.py:632 +msgid "Add Track\tT" +msgstr "Add Track\tT" + +#: flatcamGUI/FlatCAMGUI.py:634 +msgid "Add Region\tN" +msgstr "Add Region\tN" + +#: flatcamGUI/FlatCAMGUI.py:638 +msgid "Poligonize\tAlt+N" +msgstr "Poligonize\tAlt+N" + +#: flatcamGUI/FlatCAMGUI.py:640 +msgid "Add SemiDisc\tE" +msgstr "Add SemiDisc\tE" + +#: flatcamGUI/FlatCAMGUI.py:642 +msgid "Add Disc\tD" +msgstr "Add Disc\tD" + +#: flatcamGUI/FlatCAMGUI.py:644 +msgid "Buffer\tB" +msgstr "Buffer\tB" + +#: flatcamGUI/FlatCAMGUI.py:646 +msgid "Scale\tS" +msgstr "Scale\tS" + +#: flatcamGUI/FlatCAMGUI.py:648 +msgid "Mark Area\tAlt+A" +msgstr "Mark Area\tAlt+A" + +#: flatcamGUI/FlatCAMGUI.py:650 +msgid "Eraser\tCtrl+E" +msgstr "Eraser\tCtrl+E" + +#: flatcamGUI/FlatCAMGUI.py:652 +msgid "Transform\tAlt+R" +msgstr "Transform\tAlt+R" + +#: flatcamGUI/FlatCAMGUI.py:679 +msgid "Enable Plot" +msgstr "Enable Plot" + +#: flatcamGUI/FlatCAMGUI.py:681 +msgid "Disable Plot" +msgstr "Disable Plot" + +#: flatcamGUI/FlatCAMGUI.py:685 +msgid "Set Color" +msgstr "Set Color" + +#: flatcamGUI/FlatCAMGUI.py:727 +msgid "Generate CNC" +msgstr "Generate CNC" + +#: flatcamGUI/FlatCAMGUI.py:729 +msgid "View Source" +msgstr "View Source" + +#: flatcamGUI/FlatCAMGUI.py:734 flatcamGUI/FlatCAMGUI.py:848 +#: flatcamGUI/FlatCAMGUI.py:1057 flatcamGUI/FlatCAMGUI.py:2123 +#: flatcamGUI/FlatCAMGUI.py:2267 flatcamGUI/FlatCAMGUI.py:2532 +#: flatcamGUI/FlatCAMGUI.py:2731 flatcamGUI/ObjectUI.py:1616 +#: flatcamObjects/FlatCAMGeometry.py:477 flatcamTools/ToolPanelize.py:541 +#: flatcamTools/ToolPanelize.py:568 flatcamTools/ToolPanelize.py:667 +#: flatcamTools/ToolPanelize.py:701 flatcamTools/ToolPanelize.py:766 +msgid "Copy" +msgstr "Copy" + +#: flatcamGUI/FlatCAMGUI.py:742 flatcamGUI/FlatCAMGUI.py:2280 +#: flatcamTools/ToolProperties.py:31 +msgid "Properties" +msgstr "Properties" + +#: flatcamGUI/FlatCAMGUI.py:771 +msgid "File Toolbar" +msgstr "File Toolbar" + +#: flatcamGUI/FlatCAMGUI.py:775 +msgid "Edit Toolbar" +msgstr "Edit Toolbar" + +#: flatcamGUI/FlatCAMGUI.py:779 +msgid "View Toolbar" +msgstr "View Toolbar" + +#: flatcamGUI/FlatCAMGUI.py:783 +msgid "Shell Toolbar" +msgstr "Shell Toolbar" + +#: flatcamGUI/FlatCAMGUI.py:787 +msgid "Tools Toolbar" +msgstr "Tools Toolbar" + +#: flatcamGUI/FlatCAMGUI.py:791 +msgid "Excellon Editor Toolbar" +msgstr "Excellon Editor Toolbar" + +#: flatcamGUI/FlatCAMGUI.py:797 +msgid "Geometry Editor Toolbar" +msgstr "Geometry Editor Toolbar" + +#: flatcamGUI/FlatCAMGUI.py:801 +msgid "Gerber Editor Toolbar" +msgstr "Gerber Editor Toolbar" + +#: flatcamGUI/FlatCAMGUI.py:805 +msgid "Grid Toolbar" +msgstr "Grid Toolbar" + +#: flatcamGUI/FlatCAMGUI.py:826 flatcamGUI/FlatCAMGUI.py:2509 +msgid "Open project" +msgstr "Open project" + +#: flatcamGUI/FlatCAMGUI.py:828 flatcamGUI/FlatCAMGUI.py:2511 +msgid "Save project" +msgstr "Save project" + +#: flatcamGUI/FlatCAMGUI.py:834 flatcamGUI/FlatCAMGUI.py:2517 +msgid "New Blank Geometry" +msgstr "New Blank Geometry" + +#: flatcamGUI/FlatCAMGUI.py:836 flatcamGUI/FlatCAMGUI.py:2519 +msgid "New Blank Gerber" +msgstr "New Blank Gerber" + +#: flatcamGUI/FlatCAMGUI.py:838 flatcamGUI/FlatCAMGUI.py:2521 +msgid "New Blank Excellon" +msgstr "New Blank Excellon" + +#: flatcamGUI/FlatCAMGUI.py:843 flatcamGUI/FlatCAMGUI.py:2527 +msgid "Save Object and close the Editor" +msgstr "Save Object and close the Editor" + +#: flatcamGUI/FlatCAMGUI.py:850 flatcamGUI/FlatCAMGUI.py:2534 +msgid "&Delete" +msgstr "&Delete" + +#: flatcamGUI/FlatCAMGUI.py:853 flatcamGUI/FlatCAMGUI.py:1714 +#: flatcamGUI/FlatCAMGUI.py:1920 flatcamGUI/FlatCAMGUI.py:2537 +#: flatcamTools/ToolDistance.py:35 flatcamTools/ToolDistance.py:195 +msgid "Distance Tool" +msgstr "Distance Tool" + +#: flatcamGUI/FlatCAMGUI.py:855 flatcamGUI/FlatCAMGUI.py:2539 +msgid "Distance Min Tool" +msgstr "Distance Min Tool" + +#: flatcamGUI/FlatCAMGUI.py:857 flatcamGUI/FlatCAMGUI.py:1707 +#: flatcamGUI/FlatCAMGUI.py:2541 +msgid "Set Origin" +msgstr "Set Origin" + +#: flatcamGUI/FlatCAMGUI.py:859 +msgid "Move to Origin" +msgstr "Move to Origin" + +#: flatcamGUI/FlatCAMGUI.py:862 flatcamGUI/FlatCAMGUI.py:2543 +msgid "Jump to Location" +msgstr "Jump to Location" + +#: flatcamGUI/FlatCAMGUI.py:864 flatcamGUI/FlatCAMGUI.py:1719 +#: flatcamGUI/FlatCAMGUI.py:2545 +msgid "Locate in Object" +msgstr "Locate in Object" + +#: flatcamGUI/FlatCAMGUI.py:870 flatcamGUI/FlatCAMGUI.py:2551 +msgid "&Replot" +msgstr "&Replot" + +#: flatcamGUI/FlatCAMGUI.py:872 flatcamGUI/FlatCAMGUI.py:2553 +msgid "&Clear plot" +msgstr "&Clear plot" + +#: flatcamGUI/FlatCAMGUI.py:874 flatcamGUI/FlatCAMGUI.py:1710 +#: flatcamGUI/FlatCAMGUI.py:2555 +msgid "Zoom In" +msgstr "Zoom In" + +#: flatcamGUI/FlatCAMGUI.py:876 flatcamGUI/FlatCAMGUI.py:1710 +#: flatcamGUI/FlatCAMGUI.py:2557 +msgid "Zoom Out" +msgstr "Zoom Out" + +#: flatcamGUI/FlatCAMGUI.py:878 flatcamGUI/FlatCAMGUI.py:1709 +#: flatcamGUI/FlatCAMGUI.py:2170 flatcamGUI/FlatCAMGUI.py:2559 +msgid "Zoom Fit" +msgstr "Zoom Fit" + +#: flatcamGUI/FlatCAMGUI.py:886 flatcamGUI/FlatCAMGUI.py:2565 +msgid "&Command Line" +msgstr "&Command Line" + +#: flatcamGUI/FlatCAMGUI.py:898 flatcamGUI/FlatCAMGUI.py:2577 +msgid "2Sided Tool" +msgstr "2Sided Tool" + +#: flatcamGUI/FlatCAMGUI.py:900 flatcamGUI/FlatCAMGUI.py:1725 +#: flatcamGUI/FlatCAMGUI.py:2579 +msgid "Align Objects Tool" +msgstr "Align Objects Tool" + +#: flatcamGUI/FlatCAMGUI.py:902 flatcamGUI/FlatCAMGUI.py:1726 +#: flatcamGUI/FlatCAMGUI.py:2581 flatcamTools/ToolExtractDrills.py:393 +msgid "Extract Drills Tool" +msgstr "Extract Drills Tool" + +#: flatcamGUI/FlatCAMGUI.py:905 flatcamGUI/ObjectUI.py:595 +#: flatcamTools/ToolCutOut.py:446 +msgid "Cutout Tool" +msgstr "Cutout Tool" + +#: flatcamGUI/FlatCAMGUI.py:907 flatcamGUI/FlatCAMGUI.py:2586 +#: flatcamGUI/ObjectUI.py:573 flatcamGUI/ObjectUI.py:2076 +#: flatcamTools/ToolNCC.py:974 +msgid "NCC Tool" +msgstr "NCC Tool" + +#: flatcamGUI/FlatCAMGUI.py:913 flatcamGUI/FlatCAMGUI.py:2592 +msgid "Panel Tool" +msgstr "Panel Tool" + +#: flatcamGUI/FlatCAMGUI.py:915 flatcamGUI/FlatCAMGUI.py:2594 +#: flatcamTools/ToolFilm.py:586 +msgid "Film Tool" +msgstr "Film Tool" + +#: flatcamGUI/FlatCAMGUI.py:917 flatcamGUI/FlatCAMGUI.py:2596 +#: flatcamTools/ToolSolderPaste.py:553 +msgid "SolderPaste Tool" +msgstr "SolderPaste Tool" + +#: flatcamGUI/FlatCAMGUI.py:919 flatcamGUI/FlatCAMGUI.py:2598 +#: flatcamTools/ToolSub.py:35 +msgid "Subtract Tool" +msgstr "Subtract Tool" + +#: flatcamGUI/FlatCAMGUI.py:921 flatcamGUI/FlatCAMGUI.py:2600 +#: flatcamTools/ToolRulesCheck.py:616 +msgid "Rules Tool" +msgstr "Rules Tool" + +#: flatcamGUI/FlatCAMGUI.py:923 flatcamGUI/FlatCAMGUI.py:1728 +#: flatcamGUI/FlatCAMGUI.py:2602 flatcamTools/ToolOptimal.py:33 +#: flatcamTools/ToolOptimal.py:307 +msgid "Optimal Tool" +msgstr "Optimal Tool" + +#: flatcamGUI/FlatCAMGUI.py:928 flatcamGUI/FlatCAMGUI.py:1725 +#: flatcamGUI/FlatCAMGUI.py:2607 +msgid "Calculators Tool" +msgstr "Calculators Tool" + +#: flatcamGUI/FlatCAMGUI.py:932 flatcamGUI/FlatCAMGUI.py:1729 +#: flatcamGUI/FlatCAMGUI.py:2611 flatcamTools/ToolQRCode.py:43 +#: flatcamTools/ToolQRCode.py:382 +msgid "QRCode Tool" +msgstr "QRCode Tool" + +#: flatcamGUI/FlatCAMGUI.py:934 flatcamGUI/FlatCAMGUI.py:2613 +#: flatcamTools/ToolCopperThieving.py:39 flatcamTools/ToolCopperThieving.py:568 +msgid "Copper Thieving Tool" +msgstr "Copper Thieving Tool" + +#: flatcamGUI/FlatCAMGUI.py:937 flatcamGUI/FlatCAMGUI.py:1726 +#: flatcamGUI/FlatCAMGUI.py:2616 flatcamTools/ToolFiducials.py:33 +#: flatcamTools/ToolFiducials.py:395 +msgid "Fiducials Tool" +msgstr "Fiducials Tool" + +#: flatcamGUI/FlatCAMGUI.py:939 flatcamGUI/FlatCAMGUI.py:2618 +#: flatcamTools/ToolCalibration.py:37 flatcamTools/ToolCalibration.py:759 +msgid "Calibration Tool" +msgstr "Calibration Tool" + +#: flatcamGUI/FlatCAMGUI.py:941 flatcamGUI/FlatCAMGUI.py:1726 +msgid "Punch Gerber Tool" +msgstr "Punch Gerber Tool" + +#: flatcamGUI/FlatCAMGUI.py:943 flatcamTools/ToolInvertGerber.py:31 +msgid "Invert Gerber Tool" +msgstr "Invert Gerber Tool" + +#: flatcamGUI/FlatCAMGUI.py:949 flatcamGUI/FlatCAMGUI.py:975 +#: flatcamGUI/FlatCAMGUI.py:1027 flatcamGUI/FlatCAMGUI.py:2624 +#: flatcamGUI/FlatCAMGUI.py:2702 +msgid "Select" +msgstr "Select" + +#: flatcamGUI/FlatCAMGUI.py:951 flatcamGUI/FlatCAMGUI.py:2626 +msgid "Add Drill Hole" +msgstr "Add Drill Hole" + +#: flatcamGUI/FlatCAMGUI.py:953 flatcamGUI/FlatCAMGUI.py:2628 +msgid "Add Drill Hole Array" +msgstr "Add Drill Hole Array" + +#: flatcamGUI/FlatCAMGUI.py:955 flatcamGUI/FlatCAMGUI.py:2005 +#: flatcamGUI/FlatCAMGUI.py:2258 flatcamGUI/FlatCAMGUI.py:2632 +msgid "Add Slot" +msgstr "Add Slot" + +#: flatcamGUI/FlatCAMGUI.py:957 flatcamGUI/FlatCAMGUI.py:2004 +#: flatcamGUI/FlatCAMGUI.py:2260 flatcamGUI/FlatCAMGUI.py:2634 +msgid "Add Slot Array" +msgstr "Add Slot Array" + +#: flatcamGUI/FlatCAMGUI.py:959 flatcamGUI/FlatCAMGUI.py:2263 +#: flatcamGUI/FlatCAMGUI.py:2630 +msgid "Resize Drill" +msgstr "Resize Drill" + +#: flatcamGUI/FlatCAMGUI.py:963 flatcamGUI/FlatCAMGUI.py:2638 +msgid "Copy Drill" +msgstr "Copy Drill" + +#: flatcamGUI/FlatCAMGUI.py:965 flatcamGUI/FlatCAMGUI.py:2640 +msgid "Delete Drill" +msgstr "Delete Drill" + +#: flatcamGUI/FlatCAMGUI.py:969 flatcamGUI/FlatCAMGUI.py:2644 +msgid "Move Drill" +msgstr "Move Drill" + +#: flatcamGUI/FlatCAMGUI.py:977 flatcamGUI/FlatCAMGUI.py:2652 +msgid "Add Circle" +msgstr "Add Circle" + +#: flatcamGUI/FlatCAMGUI.py:979 flatcamGUI/FlatCAMGUI.py:2654 +msgid "Add Arc" +msgstr "Add Arc" + +#: flatcamGUI/FlatCAMGUI.py:981 flatcamGUI/FlatCAMGUI.py:2656 +msgid "Add Rectangle" +msgstr "Add Rectangle" + +#: flatcamGUI/FlatCAMGUI.py:985 flatcamGUI/FlatCAMGUI.py:2660 +msgid "Add Path" +msgstr "Add Path" + +#: flatcamGUI/FlatCAMGUI.py:987 flatcamGUI/FlatCAMGUI.py:2662 +msgid "Add Polygon" +msgstr "Add Polygon" + +#: flatcamGUI/FlatCAMGUI.py:990 flatcamGUI/FlatCAMGUI.py:2665 +msgid "Add Text" +msgstr "Add Text" + +#: flatcamGUI/FlatCAMGUI.py:992 flatcamGUI/FlatCAMGUI.py:2667 +msgid "Add Buffer" +msgstr "Add Buffer" + +#: flatcamGUI/FlatCAMGUI.py:994 flatcamGUI/FlatCAMGUI.py:2669 +msgid "Paint Shape" +msgstr "Paint Shape" + +#: flatcamGUI/FlatCAMGUI.py:996 flatcamGUI/FlatCAMGUI.py:1053 +#: flatcamGUI/FlatCAMGUI.py:2199 flatcamGUI/FlatCAMGUI.py:2244 +#: flatcamGUI/FlatCAMGUI.py:2671 flatcamGUI/FlatCAMGUI.py:2727 +msgid "Eraser" +msgstr "Eraser" + +#: flatcamGUI/FlatCAMGUI.py:1000 flatcamGUI/FlatCAMGUI.py:2675 +msgid "Polygon Union" +msgstr "Polygon Union" + +#: flatcamGUI/FlatCAMGUI.py:1002 flatcamGUI/FlatCAMGUI.py:2677 +msgid "Polygon Explode" +msgstr "Polygon Explode" + +#: flatcamGUI/FlatCAMGUI.py:1005 flatcamGUI/FlatCAMGUI.py:2680 +msgid "Polygon Intersection" +msgstr "Polygon Intersection" + +#: flatcamGUI/FlatCAMGUI.py:1007 flatcamGUI/FlatCAMGUI.py:2682 +msgid "Polygon Subtraction" +msgstr "Polygon Subtraction" + +#: flatcamGUI/FlatCAMGUI.py:1011 flatcamGUI/FlatCAMGUI.py:2686 +msgid "Cut Path" +msgstr "Cut Path" + +#: flatcamGUI/FlatCAMGUI.py:1013 +msgid "Copy Shape(s)" +msgstr "Copy Shape(s)" + +#: flatcamGUI/FlatCAMGUI.py:1016 +msgid "Delete Shape '-'" +msgstr "Delete Shape '-'" + +#: flatcamGUI/FlatCAMGUI.py:1018 flatcamGUI/FlatCAMGUI.py:1061 +#: flatcamGUI/FlatCAMGUI.py:2211 flatcamGUI/FlatCAMGUI.py:2248 +#: flatcamGUI/FlatCAMGUI.py:2692 flatcamGUI/FlatCAMGUI.py:2735 +#: flatcamGUI/ObjectUI.py:108 +msgid "Transformations" +msgstr "Transformations" + +#: flatcamGUI/FlatCAMGUI.py:1021 +msgid "Move Objects " +msgstr "Move Objects " + +#: flatcamGUI/FlatCAMGUI.py:1029 flatcamGUI/FlatCAMGUI.py:2124 +#: flatcamGUI/FlatCAMGUI.py:2704 +msgid "Add Pad" +msgstr "Add Pad" + +#: flatcamGUI/FlatCAMGUI.py:1033 flatcamGUI/FlatCAMGUI.py:2125 +#: flatcamGUI/FlatCAMGUI.py:2708 +msgid "Add Track" +msgstr "Add Track" + +#: flatcamGUI/FlatCAMGUI.py:1035 flatcamGUI/FlatCAMGUI.py:2124 +#: flatcamGUI/FlatCAMGUI.py:2710 +msgid "Add Region" +msgstr "Add Region" + +#: flatcamGUI/FlatCAMGUI.py:1037 flatcamGUI/FlatCAMGUI.py:2230 +#: flatcamGUI/FlatCAMGUI.py:2712 +msgid "Poligonize" +msgstr "Poligonize" + +#: flatcamGUI/FlatCAMGUI.py:1040 flatcamGUI/FlatCAMGUI.py:2232 +#: flatcamGUI/FlatCAMGUI.py:2715 +msgid "SemiDisc" +msgstr "SemiDisc" + +#: flatcamGUI/FlatCAMGUI.py:1042 flatcamGUI/FlatCAMGUI.py:2234 +#: flatcamGUI/FlatCAMGUI.py:2717 +msgid "Disc" +msgstr "Disc" + +#: flatcamGUI/FlatCAMGUI.py:1050 flatcamGUI/FlatCAMGUI.py:2242 +#: flatcamGUI/FlatCAMGUI.py:2725 +msgid "Mark Area" +msgstr "Mark Area" + +#: flatcamGUI/FlatCAMGUI.py:1064 flatcamGUI/FlatCAMGUI.py:2124 +#: flatcamGUI/FlatCAMGUI.py:2215 flatcamGUI/FlatCAMGUI.py:2278 +#: flatcamGUI/FlatCAMGUI.py:2738 flatcamTools/ToolMove.py:27 +msgid "Move" +msgstr "Move" + +#: flatcamGUI/FlatCAMGUI.py:1072 flatcamGUI/FlatCAMGUI.py:2747 +msgid "Snap to grid" +msgstr "Snap to grid" + +#: flatcamGUI/FlatCAMGUI.py:1075 flatcamGUI/FlatCAMGUI.py:2750 +msgid "Grid X snapping distance" +msgstr "Grid X snapping distance" + +#: flatcamGUI/FlatCAMGUI.py:1080 flatcamGUI/FlatCAMGUI.py:2755 +msgid "Grid Y snapping distance" +msgstr "Grid Y snapping distance" + +#: flatcamGUI/FlatCAMGUI.py:1086 flatcamGUI/FlatCAMGUI.py:2761 +msgid "" +"When active, value on Grid_X\n" +"is copied to the Grid_Y value." +msgstr "" +"When active, value on Grid_X\n" +"is copied to the Grid_Y value." + +#: flatcamGUI/FlatCAMGUI.py:1093 flatcamGUI/FlatCAMGUI.py:2768 +msgid "Snap to corner" +msgstr "Snap to corner" + +#: flatcamGUI/FlatCAMGUI.py:1097 flatcamGUI/FlatCAMGUI.py:2772 +#: flatcamGUI/PreferencesUI.py:1159 +msgid "Max. magnet distance" +msgstr "Max. magnet distance" + +#: flatcamGUI/FlatCAMGUI.py:1134 +msgid "Selected" +msgstr "Selected" + +#: flatcamGUI/FlatCAMGUI.py:1162 flatcamGUI/FlatCAMGUI.py:1170 +msgid "Plot Area" +msgstr "Plot Area" + +#: flatcamGUI/FlatCAMGUI.py:1197 +msgid "General" +msgstr "General" + +#: flatcamGUI/FlatCAMGUI.py:1212 flatcamTools/ToolCopperThieving.py:74 +#: flatcamTools/ToolDblSided.py:64 flatcamTools/ToolExtractDrills.py:61 +#: flatcamTools/ToolInvertGerber.py:72 flatcamTools/ToolOptimal.py:71 +#: flatcamTools/ToolPunchGerber.py:64 +msgid "GERBER" +msgstr "GERBER" + +#: flatcamGUI/FlatCAMGUI.py:1222 flatcamTools/ToolDblSided.py:92 +msgid "EXCELLON" +msgstr "EXCELLON" + +#: flatcamGUI/FlatCAMGUI.py:1232 flatcamTools/ToolDblSided.py:120 +msgid "GEOMETRY" +msgstr "GEOMETRY" + +#: flatcamGUI/FlatCAMGUI.py:1242 +msgid "CNC-JOB" +msgstr "CNC-JOB" + +#: flatcamGUI/FlatCAMGUI.py:1251 flatcamGUI/ObjectUI.py:562 +#: flatcamGUI/ObjectUI.py:2051 +msgid "TOOLS" +msgstr "TOOLS" + +#: flatcamGUI/FlatCAMGUI.py:1260 +msgid "TOOLS 2" +msgstr "TOOLS 2" + +#: flatcamGUI/FlatCAMGUI.py:1270 +msgid "UTILITIES" +msgstr "UTILITIES" + +#: flatcamGUI/FlatCAMGUI.py:1287 flatcamGUI/PreferencesUI.py:3015 +msgid "Restore Defaults" +msgstr "Restore Defaults" + +#: flatcamGUI/FlatCAMGUI.py:1290 +msgid "" +"Restore the entire set of default values\n" +"to the initial values loaded after first launch." +msgstr "" +"Restore the entire set of default values\n" +"to the initial values loaded after first launch." + +#: flatcamGUI/FlatCAMGUI.py:1295 +msgid "Open Pref Folder" +msgstr "Open Pref Folder" + +#: flatcamGUI/FlatCAMGUI.py:1298 +msgid "Open the folder where FlatCAM save the preferences files." +msgstr "Open the folder where FlatCAM save the preferences files." + +#: flatcamGUI/FlatCAMGUI.py:1302 flatcamGUI/FlatCAMGUI.py:2477 +msgid "Clear GUI Settings" +msgstr "Clear GUI Settings" + +#: flatcamGUI/FlatCAMGUI.py:1306 +msgid "" +"Clear the GUI settings for FlatCAM,\n" +"such as: layout, gui state, style, hdpi support etc." +msgstr "" +"Clear the GUI settings for FlatCAM,\n" +"such as: layout, gui state, style, hdpi support etc." + +#: flatcamGUI/FlatCAMGUI.py:1317 +msgid "Apply" +msgstr "Apply" + +#: flatcamGUI/FlatCAMGUI.py:1320 +msgid "Apply the current preferences without saving to a file." +msgstr "Apply the current preferences without saving to a file." + +#: flatcamGUI/FlatCAMGUI.py:1327 +msgid "" +"Save the current settings in the 'current_defaults' file\n" +"which is the file storing the working default preferences." +msgstr "" +"Save the current settings in the 'current_defaults' file\n" +"which is the file storing the working default preferences." + +#: flatcamGUI/FlatCAMGUI.py:1335 +msgid "Will not save the changes and will close the preferences window." +msgstr "Will not save the changes and will close the preferences window." + +#: flatcamGUI/FlatCAMGUI.py:1704 +msgid "SHOW SHORTCUT LIST" +msgstr "SHOW SHORTCUT LIST" + +#: flatcamGUI/FlatCAMGUI.py:1704 +msgid "Switch to Project Tab" +msgstr "Switch to Project Tab" + +#: flatcamGUI/FlatCAMGUI.py:1704 +msgid "Switch to Selected Tab" +msgstr "Switch to Selected Tab" + +#: flatcamGUI/FlatCAMGUI.py:1705 +msgid "Switch to Tool Tab" +msgstr "Switch to Tool Tab" + +#: flatcamGUI/FlatCAMGUI.py:1706 +msgid "New Gerber" +msgstr "New Gerber" + +#: flatcamGUI/FlatCAMGUI.py:1706 +msgid "Edit Object (if selected)" +msgstr "Edit Object (if selected)" + +#: flatcamGUI/FlatCAMGUI.py:1706 +msgid "Jump to Coordinates" +msgstr "Jump to Coordinates" + +#: flatcamGUI/FlatCAMGUI.py:1707 +msgid "New Excellon" +msgstr "New Excellon" + +#: flatcamGUI/FlatCAMGUI.py:1707 +msgid "Move Obj" +msgstr "Move Obj" + +#: flatcamGUI/FlatCAMGUI.py:1707 +msgid "New Geometry" +msgstr "New Geometry" + +#: flatcamGUI/FlatCAMGUI.py:1707 +msgid "Change Units" +msgstr "Change Units" + +#: flatcamGUI/FlatCAMGUI.py:1708 +msgid "Open Properties Tool" +msgstr "Open Properties Tool" + +#: flatcamGUI/FlatCAMGUI.py:1708 +msgid "Rotate by 90 degree CW" +msgstr "Rotate by 90 degree CW" + +#: flatcamGUI/FlatCAMGUI.py:1708 +msgid "Shell Toggle" +msgstr "Shell Toggle" + +#: flatcamGUI/FlatCAMGUI.py:1709 +msgid "" +"Add a Tool (when in Geometry Selected Tab or in Tools NCC or Tools Paint)" +msgstr "" +"Add a Tool (when in Geometry Selected Tab or in Tools NCC or Tools Paint)" + +#: flatcamGUI/FlatCAMGUI.py:1710 +msgid "Flip on X_axis" +msgstr "Flip on X_axis" + +#: flatcamGUI/FlatCAMGUI.py:1710 +msgid "Flip on Y_axis" +msgstr "Flip on Y_axis" + +#: flatcamGUI/FlatCAMGUI.py:1713 +msgid "Copy Obj" +msgstr "Copy Obj" + +#: flatcamGUI/FlatCAMGUI.py:1713 +msgid "Open Tools Database" +msgstr "Open Tools Database" + +#: flatcamGUI/FlatCAMGUI.py:1714 +msgid "Open Excellon File" +msgstr "Open Excellon File" + +#: flatcamGUI/FlatCAMGUI.py:1714 +msgid "Open Gerber File" +msgstr "Open Gerber File" + +#: flatcamGUI/FlatCAMGUI.py:1714 +msgid "New Project" +msgstr "New Project" + +#: flatcamGUI/FlatCAMGUI.py:1715 flatcamTools/ToolPDF.py:42 +msgid "PDF Import Tool" +msgstr "PDF Import Tool" + +#: flatcamGUI/FlatCAMGUI.py:1715 +msgid "Save Project" +msgstr "Save Project" + +#: flatcamGUI/FlatCAMGUI.py:1715 +msgid "Toggle Plot Area" +msgstr "Toggle Plot Area" + +#: flatcamGUI/FlatCAMGUI.py:1718 +msgid "Copy Obj_Name" +msgstr "Copy Obj_Name" + +#: flatcamGUI/FlatCAMGUI.py:1719 +msgid "Toggle Code Editor" +msgstr "Toggle Code Editor" + +#: flatcamGUI/FlatCAMGUI.py:1719 +msgid "Toggle the axis" +msgstr "Toggle the axis" + +#: flatcamGUI/FlatCAMGUI.py:1719 flatcamGUI/FlatCAMGUI.py:1918 +#: flatcamGUI/FlatCAMGUI.py:2005 flatcamGUI/FlatCAMGUI.py:2127 +msgid "Distance Minimum Tool" +msgstr "Distance Minimum Tool" + +#: flatcamGUI/FlatCAMGUI.py:1720 +msgid "Open Preferences Window" +msgstr "Open Preferences Window" + +#: flatcamGUI/FlatCAMGUI.py:1721 +msgid "Rotate by 90 degree CCW" +msgstr "Rotate by 90 degree CCW" + +#: flatcamGUI/FlatCAMGUI.py:1721 +msgid "Run a Script" +msgstr "Run a Script" + +#: flatcamGUI/FlatCAMGUI.py:1721 +msgid "Toggle the workspace" +msgstr "Toggle the workspace" + +#: flatcamGUI/FlatCAMGUI.py:1721 +msgid "Skew on X axis" +msgstr "Skew on X axis" + +#: flatcamGUI/FlatCAMGUI.py:1722 +msgid "Skew on Y axis" +msgstr "Skew on Y axis" + +#: flatcamGUI/FlatCAMGUI.py:1725 +msgid "2-Sided PCB Tool" +msgstr "2-Sided PCB Tool" + +#: flatcamGUI/FlatCAMGUI.py:1725 +msgid "Transformations Tool" +msgstr "Transformations Tool" + +#: flatcamGUI/FlatCAMGUI.py:1727 +msgid "Solder Paste Dispensing Tool" +msgstr "Solder Paste Dispensing Tool" + +#: flatcamGUI/FlatCAMGUI.py:1728 +msgid "Film PCB Tool" +msgstr "Film PCB Tool" + +#: flatcamGUI/FlatCAMGUI.py:1728 +msgid "Non-Copper Clearing Tool" +msgstr "Non-Copper Clearing Tool" + +#: flatcamGUI/FlatCAMGUI.py:1729 +msgid "Paint Area Tool" +msgstr "Paint Area Tool" + +#: flatcamGUI/FlatCAMGUI.py:1729 +msgid "Rules Check Tool" +msgstr "Rules Check Tool" + +#: flatcamGUI/FlatCAMGUI.py:1730 +msgid "View File Source" +msgstr "View File Source" + +#: flatcamGUI/FlatCAMGUI.py:1731 +msgid "Cutout PCB Tool" +msgstr "Cutout PCB Tool" + +#: flatcamGUI/FlatCAMGUI.py:1731 +msgid "Enable all Plots" +msgstr "Enable all Plots" + +#: flatcamGUI/FlatCAMGUI.py:1731 +msgid "Disable all Plots" +msgstr "Disable all Plots" + +#: flatcamGUI/FlatCAMGUI.py:1731 +msgid "Disable Non-selected Plots" +msgstr "Disable Non-selected Plots" + +#: flatcamGUI/FlatCAMGUI.py:1732 +msgid "Toggle Full Screen" +msgstr "Toggle Full Screen" + +#: flatcamGUI/FlatCAMGUI.py:1735 +msgid "Abort current task (gracefully)" +msgstr "Abort current task (gracefully)" + +#: flatcamGUI/FlatCAMGUI.py:1738 +msgid "Save Project As" +msgstr "Save Project As" + +#: flatcamGUI/FlatCAMGUI.py:1739 +msgid "" +"Paste Special. Will convert a Windows path style to the one required in Tcl " +"Shell" +msgstr "" +"Paste Special. Will convert a Windows path style to the one required in Tcl " +"Shell" + +#: flatcamGUI/FlatCAMGUI.py:1742 +msgid "Open Online Manual" +msgstr "Open Online Manual" + +#: flatcamGUI/FlatCAMGUI.py:1743 +msgid "Open Online Tutorials" +msgstr "Open Online Tutorials" + +#: flatcamGUI/FlatCAMGUI.py:1743 +msgid "Refresh Plots" +msgstr "Refresh Plots" + +#: flatcamGUI/FlatCAMGUI.py:1743 flatcamTools/ToolSolderPaste.py:509 +msgid "Delete Object" +msgstr "Delete Object" + +#: flatcamGUI/FlatCAMGUI.py:1743 +msgid "Alternate: Delete Tool" +msgstr "Alternate: Delete Tool" + +#: flatcamGUI/FlatCAMGUI.py:1744 +msgid "(left to Key_1)Toogle Notebook Area (Left Side)" +msgstr "(left to Key_1)Toogle Notebook Area (Left Side)" + +#: flatcamGUI/FlatCAMGUI.py:1744 +msgid "En(Dis)able Obj Plot" +msgstr "En(Dis)able Obj Plot" + +#: flatcamGUI/FlatCAMGUI.py:1745 +msgid "Deselects all objects" +msgstr "Deselects all objects" + +#: flatcamGUI/FlatCAMGUI.py:1759 +msgid "Editor Shortcut list" +msgstr "Editor Shortcut list" + +#: flatcamGUI/FlatCAMGUI.py:1913 +msgid "GEOMETRY EDITOR" +msgstr "GEOMETRY EDITOR" + +#: flatcamGUI/FlatCAMGUI.py:1913 +msgid "Draw an Arc" +msgstr "Draw an Arc" + +#: flatcamGUI/FlatCAMGUI.py:1913 +msgid "Copy Geo Item" +msgstr "Copy Geo Item" + +#: flatcamGUI/FlatCAMGUI.py:1914 +msgid "Within Add Arc will toogle the ARC direction: CW or CCW" +msgstr "Within Add Arc will toogle the ARC direction: CW or CCW" + +#: flatcamGUI/FlatCAMGUI.py:1914 +msgid "Polygon Intersection Tool" +msgstr "Polygon Intersection Tool" + +#: flatcamGUI/FlatCAMGUI.py:1915 +msgid "Geo Paint Tool" +msgstr "Geo Paint Tool" + +#: flatcamGUI/FlatCAMGUI.py:1915 flatcamGUI/FlatCAMGUI.py:2004 +#: flatcamGUI/FlatCAMGUI.py:2124 +msgid "Jump to Location (x, y)" +msgstr "Jump to Location (x, y)" + +#: flatcamGUI/FlatCAMGUI.py:1915 +msgid "Toggle Corner Snap" +msgstr "Toggle Corner Snap" + +#: flatcamGUI/FlatCAMGUI.py:1915 +msgid "Move Geo Item" +msgstr "Move Geo Item" + +#: flatcamGUI/FlatCAMGUI.py:1916 +msgid "Within Add Arc will cycle through the ARC modes" +msgstr "Within Add Arc will cycle through the ARC modes" + +#: flatcamGUI/FlatCAMGUI.py:1916 +msgid "Draw a Polygon" +msgstr "Draw a Polygon" + +#: flatcamGUI/FlatCAMGUI.py:1916 +msgid "Draw a Circle" +msgstr "Draw a Circle" + +#: flatcamGUI/FlatCAMGUI.py:1917 +msgid "Draw a Path" +msgstr "Draw a Path" + +#: flatcamGUI/FlatCAMGUI.py:1917 +msgid "Draw Rectangle" +msgstr "Draw Rectangle" + +#: flatcamGUI/FlatCAMGUI.py:1917 +msgid "Polygon Subtraction Tool" +msgstr "Polygon Subtraction Tool" + +#: flatcamGUI/FlatCAMGUI.py:1917 +msgid "Add Text Tool" +msgstr "Add Text Tool" + +#: flatcamGUI/FlatCAMGUI.py:1918 +msgid "Polygon Union Tool" +msgstr "Polygon Union Tool" + +#: flatcamGUI/FlatCAMGUI.py:1918 +msgid "Flip shape on X axis" +msgstr "Flip shape on X axis" + +#: flatcamGUI/FlatCAMGUI.py:1918 +msgid "Flip shape on Y axis" +msgstr "Flip shape on Y axis" + +#: flatcamGUI/FlatCAMGUI.py:1919 +msgid "Skew shape on X axis" +msgstr "Skew shape on X axis" + +#: flatcamGUI/FlatCAMGUI.py:1919 +msgid "Skew shape on Y axis" +msgstr "Skew shape on Y axis" + +#: flatcamGUI/FlatCAMGUI.py:1919 +msgid "Editor Transformation Tool" +msgstr "Editor Transformation Tool" + +#: flatcamGUI/FlatCAMGUI.py:1920 +msgid "Offset shape on X axis" +msgstr "Offset shape on X axis" + +#: flatcamGUI/FlatCAMGUI.py:1920 +msgid "Offset shape on Y axis" +msgstr "Offset shape on Y axis" + +#: flatcamGUI/FlatCAMGUI.py:1921 flatcamGUI/FlatCAMGUI.py:2007 +#: flatcamGUI/FlatCAMGUI.py:2129 +msgid "Save Object and Exit Editor" +msgstr "Save Object and Exit Editor" + +#: flatcamGUI/FlatCAMGUI.py:1921 +msgid "Polygon Cut Tool" +msgstr "Polygon Cut Tool" + +#: flatcamGUI/FlatCAMGUI.py:1922 +msgid "Rotate Geometry" +msgstr "Rotate Geometry" + +#: flatcamGUI/FlatCAMGUI.py:1922 +msgid "Finish drawing for certain tools" +msgstr "Finish drawing for certain tools" + +#: flatcamGUI/FlatCAMGUI.py:1922 flatcamGUI/FlatCAMGUI.py:2007 +#: flatcamGUI/FlatCAMGUI.py:2127 +msgid "Abort and return to Select" +msgstr "Abort and return to Select" + +#: flatcamGUI/FlatCAMGUI.py:1923 flatcamGUI/FlatCAMGUI.py:2690 +msgid "Delete Shape" +msgstr "Delete Shape" + +#: flatcamGUI/FlatCAMGUI.py:2003 +msgid "EXCELLON EDITOR" +msgstr "EXCELLON EDITOR" + +#: flatcamGUI/FlatCAMGUI.py:2003 +msgid "Copy Drill(s)" +msgstr "Copy Drill(s)" + +#: flatcamGUI/FlatCAMGUI.py:2003 flatcamGUI/FlatCAMGUI.py:2253 +msgid "Add Drill" +msgstr "Add Drill" + +#: flatcamGUI/FlatCAMGUI.py:2004 +msgid "Move Drill(s)" +msgstr "Move Drill(s)" + +#: flatcamGUI/FlatCAMGUI.py:2005 +msgid "Add a new Tool" +msgstr "Add a new Tool" + +#: flatcamGUI/FlatCAMGUI.py:2006 +msgid "Delete Drill(s)" +msgstr "Delete Drill(s)" + +#: flatcamGUI/FlatCAMGUI.py:2006 +msgid "Alternate: Delete Tool(s)" +msgstr "Alternate: Delete Tool(s)" + +#: flatcamGUI/FlatCAMGUI.py:2123 +msgid "GERBER EDITOR" +msgstr "GERBER EDITOR" + +#: flatcamGUI/FlatCAMGUI.py:2123 +msgid "Add Disc" +msgstr "Add Disc" + +#: flatcamGUI/FlatCAMGUI.py:2123 +msgid "Add SemiDisc" +msgstr "Add SemiDisc" + +#: flatcamGUI/FlatCAMGUI.py:2125 +msgid "Within Track & Region Tools will cycle in REVERSE the bend modes" +msgstr "Within Track & Region Tools will cycle in REVERSE the bend modes" + +#: flatcamGUI/FlatCAMGUI.py:2126 +msgid "Within Track & Region Tools will cycle FORWARD the bend modes" +msgstr "Within Track & Region Tools will cycle FORWARD the bend modes" + +#: flatcamGUI/FlatCAMGUI.py:2127 +msgid "Alternate: Delete Apertures" +msgstr "Alternate: Delete Apertures" + +#: flatcamGUI/FlatCAMGUI.py:2128 +msgid "Eraser Tool" +msgstr "Eraser Tool" + +#: flatcamGUI/FlatCAMGUI.py:2129 flatcamGUI/PreferencesUI.py:2816 +msgid "Mark Area Tool" +msgstr "Mark Area Tool" + +#: flatcamGUI/FlatCAMGUI.py:2129 +msgid "Poligonize Tool" +msgstr "Poligonize Tool" + +#: flatcamGUI/FlatCAMGUI.py:2129 +msgid "Transformation Tool" +msgstr "Transformation Tool" + +#: flatcamGUI/FlatCAMGUI.py:2146 +msgid "Toggle Visibility" +msgstr "Toggle Visibility" + +#: flatcamGUI/FlatCAMGUI.py:2152 +msgid "New" +msgstr "New" + +#: flatcamGUI/FlatCAMGUI.py:2154 flatcamGUI/ObjectUI.py:449 +#: flatcamObjects/FlatCAMGerber.py:238 flatcamObjects/FlatCAMGerber.py:326 +#: flatcamTools/ToolCalibration.py:631 flatcamTools/ToolCalibration.py:648 +#: flatcamTools/ToolCalibration.py:815 flatcamTools/ToolCopperThieving.py:144 +#: flatcamTools/ToolCopperThieving.py:158 +#: flatcamTools/ToolCopperThieving.py:604 flatcamTools/ToolCutOut.py:92 +#: flatcamTools/ToolDblSided.py:226 flatcamTools/ToolFilm.py:69 +#: flatcamTools/ToolFilm.py:102 flatcamTools/ToolFilm.py:549 +#: flatcamTools/ToolFilm.py:557 flatcamTools/ToolImage.py:49 +#: flatcamTools/ToolImage.py:271 flatcamTools/ToolNCC.py:95 +#: flatcamTools/ToolNCC.py:558 flatcamTools/ToolNCC.py:1295 +#: flatcamTools/ToolPaint.py:502 flatcamTools/ToolPaint.py:706 +#: flatcamTools/ToolPanelize.py:116 flatcamTools/ToolPanelize.py:372 +#: flatcamTools/ToolPanelize.py:389 +msgid "Geometry" +msgstr "Geometry" + +#: flatcamGUI/FlatCAMGUI.py:2158 flatcamGUI/PreferencesUI.py:8410 +#: flatcamTools/ToolAlignObjects.py:74 flatcamTools/ToolAlignObjects.py:110 +#: flatcamTools/ToolCalibration.py:197 flatcamTools/ToolCalibration.py:631 +#: flatcamTools/ToolCalibration.py:648 flatcamTools/ToolCalibration.py:807 +#: flatcamTools/ToolCalibration.py:815 flatcamTools/ToolCopperThieving.py:144 +#: flatcamTools/ToolCopperThieving.py:158 +#: flatcamTools/ToolCopperThieving.py:604 flatcamTools/ToolDblSided.py:225 +#: flatcamTools/ToolFilm.py:359 flatcamTools/ToolNCC.py:558 +#: flatcamTools/ToolNCC.py:1295 flatcamTools/ToolPaint.py:502 +#: flatcamTools/ToolPaint.py:706 flatcamTools/ToolPanelize.py:372 +#: flatcamTools/ToolPunchGerber.py:149 flatcamTools/ToolPunchGerber.py:164 +msgid "Excellon" +msgstr "Excellon" + +#: flatcamGUI/FlatCAMGUI.py:2165 +msgid "Grids" +msgstr "Grids" + +#: flatcamGUI/FlatCAMGUI.py:2172 +msgid "Clear Plot" +msgstr "Clear Plot" + +#: flatcamGUI/FlatCAMGUI.py:2174 +msgid "Replot" +msgstr "Replot" + +#: flatcamGUI/FlatCAMGUI.py:2178 +msgid "Geo Editor" +msgstr "Geo Editor" + +#: flatcamGUI/FlatCAMGUI.py:2180 +msgid "Path" +msgstr "Path" + +#: flatcamGUI/FlatCAMGUI.py:2182 +msgid "Rectangle" +msgstr "Rectangle" + +#: flatcamGUI/FlatCAMGUI.py:2185 +msgid "Circle" +msgstr "Circle" + +#: flatcamGUI/FlatCAMGUI.py:2189 +msgid "Arc" +msgstr "Arc" + +#: flatcamGUI/FlatCAMGUI.py:2203 +msgid "Union" +msgstr "Union" + +#: flatcamGUI/FlatCAMGUI.py:2205 +msgid "Intersection" +msgstr "Intersection" + +#: flatcamGUI/FlatCAMGUI.py:2207 +msgid "Subtraction" +msgstr "Subtraction" + +#: flatcamGUI/FlatCAMGUI.py:2209 flatcamGUI/ObjectUI.py:2140 +#: flatcamGUI/PreferencesUI.py:4714 +msgid "Cut" +msgstr "Cut" + +#: flatcamGUI/FlatCAMGUI.py:2220 +msgid "Pad" +msgstr "Pad" + +#: flatcamGUI/FlatCAMGUI.py:2222 +msgid "Pad Array" +msgstr "Pad Array" + +#: flatcamGUI/FlatCAMGUI.py:2226 +msgid "Track" +msgstr "Track" + +#: flatcamGUI/FlatCAMGUI.py:2228 +msgid "Region" +msgstr "Region" + +#: flatcamGUI/FlatCAMGUI.py:2251 +msgid "Exc Editor" +msgstr "Exc Editor" + +#: flatcamGUI/FlatCAMGUI.py:2296 +msgid "" +"Relative neasurement.\n" +"Reference is last click position" +msgstr "" +"Relative neasurement.\n" +"Reference is last click position" + +#: flatcamGUI/FlatCAMGUI.py:2302 +msgid "" +"Absolute neasurement.\n" +"Reference is (X=0, Y= 0) position" +msgstr "" +"Absolute neasurement.\n" +"Reference is (X=0, Y= 0) position" + +#: flatcamGUI/FlatCAMGUI.py:2406 +msgid "Lock Toolbars" +msgstr "Lock Toolbars" + +#: flatcamGUI/FlatCAMGUI.py:2465 +msgid "FlatCAM Preferences Folder opened." +msgstr "FlatCAM Preferences Folder opened." + +#: flatcamGUI/FlatCAMGUI.py:2476 +msgid "Are you sure you want to delete the GUI Settings? \n" +msgstr "Are you sure you want to delete the GUI Settings? \n" + +#: flatcamGUI/FlatCAMGUI.py:2584 +msgid "&Cutout Tool" +msgstr "&Cutout Tool" + +#: flatcamGUI/FlatCAMGUI.py:2650 +msgid "Select 'Esc'" +msgstr "Select 'Esc'" + +#: flatcamGUI/FlatCAMGUI.py:2688 +msgid "Copy Objects" +msgstr "Copy Objects" + +#: flatcamGUI/FlatCAMGUI.py:2696 +msgid "Move Objects" +msgstr "Move Objects" + +#: flatcamGUI/FlatCAMGUI.py:3312 +msgid "" +"Please first select a geometry item to be cutted\n" +"then select the geometry item that will be cutted\n" +"out of the first item. In the end press ~X~ key or\n" +"the toolbar button." +msgstr "" +"Please first select a geometry item to be cutted\n" +"then select the geometry item that will be cutted\n" +"out of the first item. In the end press ~X~ key or\n" +"the toolbar button." + +#: flatcamGUI/FlatCAMGUI.py:3319 flatcamGUI/FlatCAMGUI.py:3478 +#: flatcamGUI/FlatCAMGUI.py:3523 flatcamGUI/FlatCAMGUI.py:3543 +msgid "Warning" +msgstr "Warning" + +#: flatcamGUI/FlatCAMGUI.py:3473 +msgid "" +"Please select geometry items \n" +"on which to perform Intersection Tool." +msgstr "" +"Please select geometry items \n" +"on which to perform Intersection Tool." + +#: flatcamGUI/FlatCAMGUI.py:3518 +msgid "" +"Please select geometry items \n" +"on which to perform Substraction Tool." +msgstr "" +"Please select geometry items \n" +"on which to perform Substraction Tool." + +#: flatcamGUI/FlatCAMGUI.py:3538 +msgid "" +"Please select geometry items \n" +"on which to perform union." +msgstr "" +"Please select geometry items \n" +"on which to perform union." + +#: flatcamGUI/FlatCAMGUI.py:3617 flatcamGUI/FlatCAMGUI.py:3828 +msgid "Cancelled. Nothing selected to delete." +msgstr "Cancelled. Nothing selected to delete." + +#: flatcamGUI/FlatCAMGUI.py:3701 flatcamGUI/FlatCAMGUI.py:3944 +msgid "Cancelled. Nothing selected to copy." +msgstr "Cancelled. Nothing selected to copy." + +#: flatcamGUI/FlatCAMGUI.py:3747 flatcamGUI/FlatCAMGUI.py:3973 +msgid "Cancelled. Nothing selected to move." +msgstr "Cancelled. Nothing selected to move." + +#: flatcamGUI/FlatCAMGUI.py:3999 +msgid "New Tool ..." +msgstr "New Tool ..." + +#: flatcamGUI/FlatCAMGUI.py:4000 flatcamTools/ToolNCC.py:924 +#: flatcamTools/ToolPaint.py:850 flatcamTools/ToolSolderPaste.py:560 +msgid "Enter a Tool Diameter" +msgstr "Enter a Tool Diameter" + +#: flatcamGUI/FlatCAMGUI.py:4012 +msgid "Adding Tool cancelled ..." +msgstr "Adding Tool cancelled ..." + +#: flatcamGUI/FlatCAMGUI.py:4025 +msgid "Distance Tool exit..." +msgstr "Distance Tool exit..." + +#: flatcamGUI/FlatCAMGUI.py:4234 flatcamGUI/FlatCAMGUI.py:4241 +msgid "Idle." +msgstr "Idle." + +#: flatcamGUI/FlatCAMGUI.py:4272 +msgid "Application started ..." +msgstr "Application started ..." + +#: flatcamGUI/FlatCAMGUI.py:4273 +msgid "Hello!" +msgstr "Hello!" + +#: flatcamGUI/FlatCAMGUI.py:4331 +msgid "Open Project ..." +msgstr "Open Project ..." + +#: flatcamGUI/FlatCAMGUI.py:4357 +msgid "Exit" +msgstr "Exit" + +#: flatcamGUI/GUIElements.py:2513 flatcamGUI/PreferencesUI.py:6313 +#: flatcamTools/ToolDblSided.py:173 flatcamTools/ToolDblSided.py:388 +#: flatcamTools/ToolFilm.py:219 +msgid "Reference" +msgstr "Reference" + +#: flatcamGUI/GUIElements.py:2515 +msgid "" +"The reference can be:\n" +"- Absolute -> the reference point is point (0,0)\n" +"- Relative -> the reference point is the mouse position before Jump" +msgstr "" +"The reference can be:\n" +"- Absolute -> the reference point is point (0,0)\n" +"- Relative -> the reference point is the mouse position before Jump" + +#: flatcamGUI/GUIElements.py:2520 +msgid "Abs" +msgstr "Abs" + +#: flatcamGUI/GUIElements.py:2521 +msgid "Relative" +msgstr "Relative" + +#: flatcamGUI/GUIElements.py:2531 +msgid "Location" +msgstr "Location" + +#: flatcamGUI/GUIElements.py:2533 +msgid "" +"The Location value is a tuple (x,y).\n" +"If the reference is Absolute then the Jump will be at the position (x,y).\n" +"If the reference is Relative then the Jump will be at the (x,y) distance\n" +"from the current mouse location point." +msgstr "" +"The Location value is a tuple (x,y).\n" +"If the reference is Absolute then the Jump will be at the position (x,y).\n" +"If the reference is Relative then the Jump will be at the (x,y) distance\n" +"from the current mouse location point." + +#: flatcamGUI/GUIElements.py:2573 +msgid "Save Log" +msgstr "Save Log" + +#: flatcamGUI/GUIElements.py:2592 flatcamTools/ToolShell.py:285 +msgid "Type >help< to get started" +msgstr "Type >help< to get started" + +#: flatcamGUI/ObjectUI.py:38 +msgid "FlatCAM Object" +msgstr "FlatCAM Object" + +#: flatcamGUI/ObjectUI.py:77 +msgid "" +"BASIC is suitable for a beginner. Many parameters\n" +"are hidden from the user in this mode.\n" +"ADVANCED mode will make available all parameters.\n" +"\n" +"To change the application LEVEL, go to:\n" +"Edit -> Preferences -> General and check:\n" +"'APP. LEVEL' radio button." +msgstr "" +"BASIC is suitable for a beginner. Many parameters\n" +"are hidden from the user in this mode.\n" +"ADVANCED mode will make available all parameters.\n" +"\n" +"To change the application LEVEL, go to:\n" +"Edit -> Preferences -> General and check:\n" +"'APP. LEVEL' radio button." + +#: flatcamGUI/ObjectUI.py:110 +msgid "Geometrical transformations of the current object." +msgstr "Geometrical transformations of the current object." + +#: flatcamGUI/ObjectUI.py:119 +msgid "" +"Factor by which to multiply\n" +"geometric features of this object.\n" +"Expressions are allowed. E.g: 1/25.4" +msgstr "" +"Factor by which to multiply\n" +"geometric features of this object.\n" +"Expressions are allowed. E.g: 1/25.4" + +#: flatcamGUI/ObjectUI.py:126 +msgid "Perform scaling operation." +msgstr "Perform scaling operation." + +#: flatcamGUI/ObjectUI.py:137 +msgid "" +"Amount by which to move the object\n" +"in the x and y axes in (x, y) format.\n" +"Expressions are allowed. E.g: (1/3.2, 0.5*3)" +msgstr "" +"Amount by which to move the object\n" +"in the x and y axes in (x, y) format.\n" +"Expressions are allowed. E.g: (1/3.2, 0.5*3)" + +#: flatcamGUI/ObjectUI.py:144 +msgid "Perform the offset operation." +msgstr "Perform the offset operation." + +#: flatcamGUI/ObjectUI.py:177 +msgid "Gerber Object" +msgstr "Gerber Object" + +#: flatcamGUI/ObjectUI.py:186 flatcamGUI/ObjectUI.py:729 +#: flatcamGUI/ObjectUI.py:1425 flatcamGUI/ObjectUI.py:2124 +#: flatcamGUI/PreferencesUI.py:1940 flatcamGUI/PreferencesUI.py:2856 +#: flatcamGUI/PreferencesUI.py:4121 flatcamGUI/PreferencesUI.py:4688 +msgid "Plot Options" +msgstr "Plot Options" + +#: flatcamGUI/ObjectUI.py:192 flatcamGUI/ObjectUI.py:730 +#: flatcamGUI/PreferencesUI.py:1947 flatcamGUI/PreferencesUI.py:2868 +#: flatcamGUI/PreferencesUI.py:7728 flatcamTools/ToolCopperThieving.py:191 +msgid "Solid" +msgstr "Solid" + +#: flatcamGUI/ObjectUI.py:194 flatcamGUI/PreferencesUI.py:1949 +msgid "Solid color polygons." +msgstr "Solid color polygons." + +#: flatcamGUI/ObjectUI.py:200 +msgid "Multi-Color" +msgstr "Multi-Color" + +#: flatcamGUI/ObjectUI.py:202 flatcamGUI/PreferencesUI.py:1956 +msgid "Draw polygons in different colors." +msgstr "Draw polygons in different colors." + +#: flatcamGUI/ObjectUI.py:208 flatcamGUI/ObjectUI.py:768 +#: flatcamGUI/PreferencesUI.py:1961 flatcamGUI/PreferencesUI.py:2862 +#: flatcamGUI/PreferencesUI.py:4125 +msgid "Plot" +msgstr "Plot" + +#: flatcamGUI/ObjectUI.py:210 flatcamGUI/ObjectUI.py:770 +#: flatcamGUI/ObjectUI.py:1485 flatcamGUI/ObjectUI.py:2234 +#: flatcamGUI/PreferencesUI.py:1963 flatcamGUI/PreferencesUI.py:4127 +#: flatcamGUI/PreferencesUI.py:4699 +msgid "Plot (show) this object." +msgstr "Plot (show) this object." + +#: flatcamGUI/ObjectUI.py:238 +msgid "" +"Toggle the display of the Gerber Apertures Table.\n" +"When unchecked, it will delete all mark shapes\n" +"that are drawn on canvas." +msgstr "" +"Toggle the display of the Gerber Apertures Table.\n" +"When unchecked, it will delete all mark shapes\n" +"that are drawn on canvas." + +#: flatcamGUI/ObjectUI.py:248 +msgid "Mark All" +msgstr "Mark All" + +#: flatcamGUI/ObjectUI.py:250 +msgid "" +"When checked it will display all the apertures.\n" +"When unchecked, it will delete all mark shapes\n" +"that are drawn on canvas." +msgstr "" +"When checked it will display all the apertures.\n" +"When unchecked, it will delete all mark shapes\n" +"that are drawn on canvas." + +#: flatcamGUI/ObjectUI.py:278 +msgid "Mark the aperture instances on canvas." +msgstr "Mark the aperture instances on canvas." + +#: flatcamGUI/ObjectUI.py:290 flatcamGUI/PreferencesUI.py:2194 +msgid "Isolation Routing" +msgstr "Isolation Routing" + +#: flatcamGUI/ObjectUI.py:292 flatcamGUI/PreferencesUI.py:2196 +msgid "" +"Create a Geometry object with\n" +"toolpaths to cut outside polygons." +msgstr "" +"Create a Geometry object with\n" +"toolpaths to cut outside polygons." + +#: flatcamGUI/ObjectUI.py:310 flatcamGUI/PreferencesUI.py:2399 +msgid "" +"Choose what tool to use for Gerber isolation:\n" +"'Circular' or 'V-shape'.\n" +"When the 'V-shape' is selected then the tool\n" +"diameter will depend on the chosen cut depth." +msgstr "" +"Choose what tool to use for Gerber isolation:\n" +"'Circular' or 'V-shape'.\n" +"When the 'V-shape' is selected then the tool\n" +"diameter will depend on the chosen cut depth." + +#: flatcamGUI/ObjectUI.py:316 +msgid "V-Shape" +msgstr "V-Shape" + +#: flatcamGUI/ObjectUI.py:322 flatcamGUI/ObjectUI.py:1671 +#: flatcamGUI/PreferencesUI.py:2411 flatcamGUI/PreferencesUI.py:5351 +#: flatcamGUI/PreferencesUI.py:5917 flatcamGUI/PreferencesUI.py:5924 +#: flatcamTools/ToolNCC.py:233 flatcamTools/ToolNCC.py:240 +#: flatcamTools/ToolPaint.py:216 +msgid "V-Tip Dia" +msgstr "V-Tip Dia" + +#: flatcamGUI/ObjectUI.py:324 flatcamGUI/ObjectUI.py:1674 +#: flatcamGUI/PreferencesUI.py:2413 flatcamGUI/PreferencesUI.py:5353 +#: flatcamGUI/PreferencesUI.py:5919 flatcamTools/ToolNCC.py:235 +#: flatcamTools/ToolPaint.py:218 +msgid "The tip diameter for V-Shape Tool" +msgstr "The tip diameter for V-Shape Tool" + +#: flatcamGUI/ObjectUI.py:335 flatcamGUI/ObjectUI.py:1686 +#: flatcamGUI/PreferencesUI.py:2424 flatcamGUI/PreferencesUI.py:5363 +#: flatcamGUI/PreferencesUI.py:5930 flatcamGUI/PreferencesUI.py:5938 +#: flatcamTools/ToolNCC.py:246 flatcamTools/ToolNCC.py:254 +#: flatcamTools/ToolPaint.py:229 +msgid "V-Tip Angle" +msgstr "V-Tip Angle" + +#: flatcamGUI/ObjectUI.py:337 flatcamGUI/ObjectUI.py:1689 +#: flatcamGUI/PreferencesUI.py:2426 flatcamGUI/PreferencesUI.py:5365 +#: flatcamGUI/PreferencesUI.py:5932 flatcamTools/ToolNCC.py:248 +#: flatcamTools/ToolPaint.py:231 +msgid "" +"The tip angle for V-Shape Tool.\n" +"In degree." +msgstr "" +"The tip angle for V-Shape Tool.\n" +"In degree." + +#: flatcamGUI/ObjectUI.py:351 flatcamGUI/ObjectUI.py:1705 +#: flatcamGUI/PreferencesUI.py:2439 flatcamGUI/PreferencesUI.py:4243 +#: flatcamGUI/PreferencesUI.py:5669 flatcamTools/ToolCutOut.py:141 +msgid "" +"Cutting depth (negative)\n" +"below the copper surface." +msgstr "" +"Cutting depth (negative)\n" +"below the copper surface." + +#: flatcamGUI/ObjectUI.py:365 +msgid "" +"Diameter of the cutting tool.\n" +"If you want to have an isolation path\n" +"inside the actual shape of the Gerber\n" +"feature, use a negative value for\n" +"this parameter." +msgstr "" +"Diameter of the cutting tool.\n" +"If you want to have an isolation path\n" +"inside the actual shape of the Gerber\n" +"feature, use a negative value for\n" +"this parameter." + +#: flatcamGUI/ObjectUI.py:381 flatcamGUI/PreferencesUI.py:2218 +msgid "# Passes" +msgstr "# Passes" + +#: flatcamGUI/ObjectUI.py:383 flatcamGUI/PreferencesUI.py:2220 +msgid "" +"Width of the isolation gap in\n" +"number (integer) of tool widths." +msgstr "" +"Width of the isolation gap in\n" +"number (integer) of tool widths." + +#: flatcamGUI/ObjectUI.py:394 flatcamGUI/PreferencesUI.py:2230 +msgid "Pass overlap" +msgstr "Pass overlap" + +#: flatcamGUI/ObjectUI.py:396 flatcamGUI/PreferencesUI.py:2232 +msgid "How much (percentage) of the tool width to overlap each tool pass." +msgstr "How much (percentage) of the tool width to overlap each tool pass." + +#: flatcamGUI/ObjectUI.py:410 flatcamGUI/PreferencesUI.py:2259 +#: flatcamGUI/PreferencesUI.py:4667 +msgid "" +"Milling type:\n" +"- climb / best for precision milling and to reduce tool usage\n" +"- conventional / useful when there is no backlash compensation" +msgstr "" +"Milling type:\n" +"- climb / best for precision milling and to reduce tool usage\n" +"- conventional / useful when there is no backlash compensation" + +#: flatcamGUI/ObjectUI.py:420 +msgid "Combine" +msgstr "Combine" + +#: flatcamGUI/ObjectUI.py:422 flatcamGUI/PreferencesUI.py:2271 +msgid "Combine all passes into one object" +msgstr "Combine all passes into one object" + +#: flatcamGUI/ObjectUI.py:426 flatcamGUI/PreferencesUI.py:2373 +msgid "\"Follow\"" +msgstr "\"Follow\"" + +#: flatcamGUI/ObjectUI.py:427 flatcamGUI/PreferencesUI.py:2375 +msgid "" +"Generate a 'Follow' geometry.\n" +"This means that it will cut through\n" +"the middle of the trace." +msgstr "" +"Generate a 'Follow' geometry.\n" +"This means that it will cut through\n" +"the middle of the trace." + +#: flatcamGUI/ObjectUI.py:433 +msgid "Except" +msgstr "Except" + +#: flatcamGUI/ObjectUI.py:436 +msgid "" +"When the isolation geometry is generated,\n" +"by checking this, the area of the object bellow\n" +"will be subtracted from the isolation geometry." +msgstr "" +"When the isolation geometry is generated,\n" +"by checking this, the area of the object bellow\n" +"will be subtracted from the isolation geometry." + +#: flatcamGUI/ObjectUI.py:449 flatcamGUI/PreferencesUI.py:6527 +#: flatcamObjects/FlatCAMGerber.py:238 flatcamObjects/FlatCAMGerber.py:326 +#: flatcamTools/ToolAlignObjects.py:73 flatcamTools/ToolAlignObjects.py:109 +#: flatcamTools/ToolCalibration.py:196 flatcamTools/ToolCalibration.py:631 +#: flatcamTools/ToolCalibration.py:648 flatcamTools/ToolCalibration.py:807 +#: flatcamTools/ToolCalibration.py:815 flatcamTools/ToolCopperThieving.py:144 +#: flatcamTools/ToolCopperThieving.py:158 +#: flatcamTools/ToolCopperThieving.py:604 flatcamTools/ToolCutOut.py:91 +#: flatcamTools/ToolDblSided.py:224 flatcamTools/ToolFilm.py:69 +#: flatcamTools/ToolFilm.py:102 flatcamTools/ToolFilm.py:549 +#: flatcamTools/ToolFilm.py:557 flatcamTools/ToolImage.py:49 +#: flatcamTools/ToolImage.py:252 flatcamTools/ToolImage.py:273 +#: flatcamTools/ToolNCC.py:96 flatcamTools/ToolNCC.py:558 +#: flatcamTools/ToolNCC.py:1295 flatcamTools/ToolPaint.py:502 +#: flatcamTools/ToolPaint.py:706 flatcamTools/ToolPanelize.py:116 +#: flatcamTools/ToolPanelize.py:202 flatcamTools/ToolPanelize.py:372 +#: flatcamTools/ToolPanelize.py:389 +msgid "Gerber" +msgstr "Gerber" + +#: flatcamGUI/ObjectUI.py:456 flatcamTools/ToolNCC.py:86 +#: flatcamTools/ToolPaint.py:80 +msgid "Obj Type" +msgstr "Obj Type" + +#: flatcamGUI/ObjectUI.py:458 +msgid "" +"Specify the type of object to be excepted from isolation.\n" +"It can be of type: Gerber or Geometry.\n" +"What is selected here will dictate the kind\n" +"of objects that will populate the 'Object' combobox." +msgstr "" +"Specify the type of object to be excepted from isolation.\n" +"It can be of type: Gerber or Geometry.\n" +"What is selected here will dictate the kind\n" +"of objects that will populate the 'Object' combobox." + +#: flatcamGUI/ObjectUI.py:471 flatcamGUI/PreferencesUI.py:8028 +#: flatcamTools/ToolCalibration.py:186 flatcamTools/ToolNCC.py:109 +#: flatcamTools/ToolPaint.py:103 flatcamTools/ToolPanelize.py:98 +#: flatcamTools/ToolQRCode.py:78 +msgid "Object" +msgstr "Object" + +#: flatcamGUI/ObjectUI.py:472 +msgid "Object whose area will be removed from isolation geometry." +msgstr "Object whose area will be removed from isolation geometry." + +#: flatcamGUI/ObjectUI.py:479 flatcamGUI/PreferencesUI.py:2244 +msgid "Scope" +msgstr "Scope" + +#: flatcamGUI/ObjectUI.py:481 flatcamGUI/PreferencesUI.py:2246 +msgid "" +"Isolation scope. Choose what to isolate:\n" +"- 'All' -> Isolate all the polygons in the object\n" +"- 'Selection' -> Isolate a selection of polygons." +msgstr "" +"Isolation scope. Choose what to isolate:\n" +"- 'All' -> Isolate all the polygons in the object\n" +"- 'Selection' -> Isolate a selection of polygons." + +#: flatcamGUI/ObjectUI.py:486 flatcamGUI/PreferencesUI.py:624 +#: flatcamGUI/PreferencesUI.py:2251 flatcamGUI/PreferencesUI.py:5590 +#: flatcamGUI/PreferencesUI.py:6097 flatcamTools/ToolNCC.py:539 +#: flatcamTools/ToolPaint.py:456 +msgid "Selection" +msgstr "Selection" + +#: flatcamGUI/ObjectUI.py:494 flatcamGUI/PreferencesUI.py:2452 +msgid "Isolation Type" +msgstr "Isolation Type" + +#: flatcamGUI/ObjectUI.py:496 flatcamGUI/PreferencesUI.py:2454 +msgid "" +"Choose how the isolation will be executed:\n" +"- 'Full' -> complete isolation of polygons\n" +"- 'Ext' -> will isolate only on the outside\n" +"- 'Int' -> will isolate only on the inside\n" +"'Exterior' isolation is almost always possible\n" +"(with the right tool) but 'Interior'\n" +"isolation can be done only when there is an opening\n" +"inside of the polygon (e.g polygon is a 'doughnut' shape)." +msgstr "" +"Choose how the isolation will be executed:\n" +"- 'Full' -> complete isolation of polygons\n" +"- 'Ext' -> will isolate only on the outside\n" +"- 'Int' -> will isolate only on the inside\n" +"'Exterior' isolation is almost always possible\n" +"(with the right tool) but 'Interior'\n" +"isolation can be done only when there is an opening\n" +"inside of the polygon (e.g polygon is a 'doughnut' shape)." + +#: flatcamGUI/ObjectUI.py:505 flatcamGUI/PreferencesUI.py:2463 +#: flatcamGUI/PreferencesUI.py:2484 +msgid "Full" +msgstr "Full" + +#: flatcamGUI/ObjectUI.py:506 +msgid "Ext" +msgstr "Ext" + +#: flatcamGUI/ObjectUI.py:507 +msgid "Int" +msgstr "Int" + +#: flatcamGUI/ObjectUI.py:512 +msgid "Generate Isolation Geometry" +msgstr "Generate Isolation Geometry" + +#: flatcamGUI/ObjectUI.py:520 +msgid "" +"Create a Geometry object with toolpaths to cut \n" +"isolation outside, inside or on both sides of the\n" +"object. For a Gerber object outside means outside\n" +"of the Gerber feature and inside means inside of\n" +"the Gerber feature, if possible at all. This means\n" +"that only if the Gerber feature has openings inside, they\n" +"will be isolated. If what is wanted is to cut isolation\n" +"inside the actual Gerber feature, use a negative tool\n" +"diameter above." +msgstr "" +"Create a Geometry object with toolpaths to cut \n" +"isolation outside, inside or on both sides of the\n" +"object. For a Gerber object outside means outside\n" +"of the Gerber feature and inside means inside of\n" +"the Gerber feature, if possible at all. This means\n" +"that only if the Gerber feature has openings inside, they\n" +"will be isolated. If what is wanted is to cut isolation\n" +"inside the actual Gerber feature, use a negative tool\n" +"diameter above." + +#: flatcamGUI/ObjectUI.py:532 +msgid "Buffer Solid Geometry" +msgstr "Buffer Solid Geometry" + +#: flatcamGUI/ObjectUI.py:534 +msgid "" +"This button is shown only when the Gerber file\n" +"is loaded without buffering.\n" +"Clicking this will create the buffered geometry\n" +"required for isolation." +msgstr "" +"This button is shown only when the Gerber file\n" +"is loaded without buffering.\n" +"Clicking this will create the buffered geometry\n" +"required for isolation." + +#: flatcamGUI/ObjectUI.py:566 +msgid "Clear N-copper" +msgstr "Clear N-copper" + +#: flatcamGUI/ObjectUI.py:568 flatcamGUI/PreferencesUI.py:5312 +msgid "" +"Create a Geometry object with\n" +"toolpaths to cut all non-copper regions." +msgstr "" +"Create a Geometry object with\n" +"toolpaths to cut all non-copper regions." + +#: flatcamGUI/ObjectUI.py:575 flatcamGUI/ObjectUI.py:2078 +#: flatcamTools/ToolNCC.py:599 +msgid "" +"Create the Geometry Object\n" +"for non-copper routing." +msgstr "" +"Create the Geometry Object\n" +"for non-copper routing." + +#: flatcamGUI/ObjectUI.py:588 +msgid "Board cutout" +msgstr "Board cutout" + +#: flatcamGUI/ObjectUI.py:590 flatcamGUI/PreferencesUI.py:5642 +msgid "" +"Create toolpaths to cut around\n" +"the PCB and separate it from\n" +"the original board." +msgstr "" +"Create toolpaths to cut around\n" +"the PCB and separate it from\n" +"the original board." + +#: flatcamGUI/ObjectUI.py:597 +msgid "" +"Generate the geometry for\n" +"the board cutout." +msgstr "" +"Generate the geometry for\n" +"the board cutout." + +#: flatcamGUI/ObjectUI.py:615 flatcamGUI/PreferencesUI.py:2281 +msgid "Non-copper regions" +msgstr "Non-copper regions" + +#: flatcamGUI/ObjectUI.py:617 flatcamGUI/PreferencesUI.py:2283 +msgid "" +"Create polygons covering the\n" +"areas without copper on the PCB.\n" +"Equivalent to the inverse of this\n" +"object. Can be used to remove all\n" +"copper from a specified region." +msgstr "" +"Create polygons covering the\n" +"areas without copper on the PCB.\n" +"Equivalent to the inverse of this\n" +"object. Can be used to remove all\n" +"copper from a specified region." + +#: flatcamGUI/ObjectUI.py:627 flatcamGUI/ObjectUI.py:668 +#: flatcamGUI/PreferencesUI.py:2295 flatcamGUI/PreferencesUI.py:2328 +msgid "Boundary Margin" +msgstr "Boundary Margin" + +#: flatcamGUI/ObjectUI.py:629 flatcamGUI/PreferencesUI.py:2297 +msgid "" +"Specify the edge of the PCB\n" +"by drawing a box around all\n" +"objects with this minimum\n" +"distance." +msgstr "" +"Specify the edge of the PCB\n" +"by drawing a box around all\n" +"objects with this minimum\n" +"distance." + +#: flatcamGUI/ObjectUI.py:644 flatcamGUI/ObjectUI.py:682 +#: flatcamGUI/PreferencesUI.py:2310 flatcamGUI/PreferencesUI.py:2341 +msgid "Rounded Geo" +msgstr "Rounded Geo" + +#: flatcamGUI/ObjectUI.py:646 flatcamGUI/PreferencesUI.py:2312 +msgid "Resulting geometry will have rounded corners." +msgstr "Resulting geometry will have rounded corners." + +#: flatcamGUI/ObjectUI.py:650 flatcamGUI/ObjectUI.py:691 +#: flatcamTools/ToolSolderPaste.py:134 +msgid "Generate Geo" +msgstr "Generate Geo" + +#: flatcamGUI/ObjectUI.py:660 flatcamGUI/PreferencesUI.py:2322 +#: flatcamGUI/PreferencesUI.py:7558 flatcamTools/ToolPanelize.py:99 +#: flatcamTools/ToolQRCode.py:192 +msgid "Bounding Box" +msgstr "Bounding Box" + +#: flatcamGUI/ObjectUI.py:662 +msgid "" +"Create a geometry surrounding the Gerber object.\n" +"Square shape." +msgstr "" +"Create a geometry surrounding the Gerber object.\n" +"Square shape." + +#: flatcamGUI/ObjectUI.py:670 flatcamGUI/PreferencesUI.py:2330 +msgid "" +"Distance of the edges of the box\n" +"to the nearest polygon." +msgstr "" +"Distance of the edges of the box\n" +"to the nearest polygon." + +#: flatcamGUI/ObjectUI.py:684 flatcamGUI/PreferencesUI.py:2343 +msgid "" +"If the bounding box is \n" +"to have rounded corners\n" +"their radius is equal to\n" +"the margin." +msgstr "" +"If the bounding box is \n" +"to have rounded corners\n" +"their radius is equal to\n" +"the margin." + +#: flatcamGUI/ObjectUI.py:693 +msgid "Generate the Geometry object." +msgstr "Generate the Geometry object." + +#: flatcamGUI/ObjectUI.py:720 +msgid "Excellon Object" +msgstr "Excellon Object" + +#: flatcamGUI/ObjectUI.py:732 +msgid "Solid circles." +msgstr "Solid circles." + +#: flatcamGUI/ObjectUI.py:780 flatcamGUI/ObjectUI.py:875 +#: flatcamGUI/ObjectUI.py:2255 flatcamGUI/PreferencesUI.py:3289 +#: flatcamTools/ToolProperties.py:166 +msgid "Drills" +msgstr "Drills" + +#: flatcamGUI/ObjectUI.py:780 flatcamGUI/ObjectUI.py:876 +#: flatcamGUI/ObjectUI.py:2255 flatcamGUI/PreferencesUI.py:3290 +#: flatcamGUI/PreferencesUI.py:3961 flatcamTools/ToolProperties.py:168 +msgid "Slots" +msgstr "Slots" + +#: flatcamGUI/ObjectUI.py:785 +msgid "" +"This is the Tool Number.\n" +"When ToolChange is checked, on toolchange event this value\n" +"will be showed as a T1, T2 ... Tn in the Machine Code.\n" +"\n" +"Here the tools are selected for G-code generation." +msgstr "" +"This is the Tool Number.\n" +"When ToolChange is checked, on toolchange event this value\n" +"will be showed as a T1, T2 ... Tn in the Machine Code.\n" +"\n" +"Here the tools are selected for G-code generation." + +#: flatcamGUI/ObjectUI.py:790 flatcamGUI/ObjectUI.py:1509 +#: flatcamTools/ToolPaint.py:142 +msgid "" +"Tool Diameter. It's value (in current FlatCAM units) \n" +"is the cut width into the material." +msgstr "" +"Tool Diameter. It's value (in current FlatCAM units) \n" +"is the cut width into the material." + +#: flatcamGUI/ObjectUI.py:793 +msgid "" +"The number of Drill holes. Holes that are drilled with\n" +"a drill bit." +msgstr "" +"The number of Drill holes. Holes that are drilled with\n" +"a drill bit." + +#: flatcamGUI/ObjectUI.py:796 +msgid "" +"The number of Slot holes. Holes that are created by\n" +"milling them with an endmill bit." +msgstr "" +"The number of Slot holes. Holes that are created by\n" +"milling them with an endmill bit." + +#: flatcamGUI/ObjectUI.py:799 +msgid "" +"Toggle display of the drills for the current tool.\n" +"This does not select the tools for G-code generation." +msgstr "" +"Toggle display of the drills for the current tool.\n" +"This does not select the tools for G-code generation." + +#: flatcamGUI/ObjectUI.py:817 flatcamGUI/ObjectUI.py:1661 +#: flatcamObjects/FlatCAMExcellon.py:514 flatcamObjects/FlatCAMExcellon.py:726 +#: flatcamObjects/FlatCAMExcellon.py:742 flatcamObjects/FlatCAMExcellon.py:746 +#: flatcamObjects/FlatCAMGeometry.py:306 flatcamObjects/FlatCAMGeometry.py:731 +#: flatcamObjects/FlatCAMGeometry.py:767 flatcamTools/ToolNCC.py:331 +#: flatcamTools/ToolNCC.py:797 flatcamTools/ToolNCC.py:811 +#: flatcamTools/ToolNCC.py:1191 flatcamTools/ToolPaint.py:314 +#: flatcamTools/ToolPaint.py:767 flatcamTools/ToolPaint.py:779 +#: flatcamTools/ToolPaint.py:1166 +msgid "Parameters for" +msgstr "Parameters for" + +#: flatcamGUI/ObjectUI.py:820 flatcamGUI/ObjectUI.py:1664 +#: flatcamTools/ToolNCC.py:334 flatcamTools/ToolPaint.py:317 +msgid "" +"The data used for creating GCode.\n" +"Each tool store it's own set of such data." +msgstr "" +"The data used for creating GCode.\n" +"Each tool store it's own set of such data." + +#: flatcamGUI/ObjectUI.py:846 flatcamGUI/PreferencesUI.py:3266 +msgid "" +"Operation type:\n" +"- Drilling -> will drill the drills/slots associated with this tool\n" +"- Milling -> will mill the drills/slots" +msgstr "" +"Operation type:\n" +"- Drilling -> will drill the drills/slots associated with this tool\n" +"- Milling -> will mill the drills/slots" + +#: flatcamGUI/ObjectUI.py:852 flatcamGUI/PreferencesUI.py:3272 +msgid "Drilling" +msgstr "Drilling" + +#: flatcamGUI/ObjectUI.py:853 flatcamGUI/PreferencesUI.py:3273 +msgid "Milling" +msgstr "Milling" + +#: flatcamGUI/ObjectUI.py:868 flatcamGUI/PreferencesUI.py:3282 +msgid "" +"Milling type:\n" +"- Drills -> will mill the drills associated with this tool\n" +"- Slots -> will mill the slots associated with this tool\n" +"- Both -> will mill both drills and mills or whatever is available" +msgstr "" +"Milling type:\n" +"- Drills -> will mill the drills associated with this tool\n" +"- Slots -> will mill the slots associated with this tool\n" +"- Both -> will mill both drills and mills or whatever is available" + +#: flatcamGUI/ObjectUI.py:877 flatcamGUI/PreferencesUI.py:3291 +#: flatcamGUI/PreferencesUI.py:6343 flatcamTools/ToolFilm.py:258 +msgid "Both" +msgstr "Both" + +#: flatcamGUI/ObjectUI.py:885 flatcamGUI/PreferencesUI.py:3298 +msgid "Milling Diameter" +msgstr "Milling Diameter" + +#: flatcamGUI/ObjectUI.py:887 flatcamGUI/PreferencesUI.py:3300 +msgid "The diameter of the tool who will do the milling" +msgstr "The diameter of the tool who will do the milling" + +#: flatcamGUI/ObjectUI.py:901 flatcamGUI/PreferencesUI.py:3313 +msgid "" +"Drill depth (negative)\n" +"below the copper surface." +msgstr "" +"Drill depth (negative)\n" +"below the copper surface." + +#: flatcamGUI/ObjectUI.py:920 flatcamGUI/ObjectUI.py:1723 +#: flatcamGUI/PreferencesUI.py:3331 flatcamGUI/PreferencesUI.py:4261 +#: flatcamGUI/PreferencesUI.py:5687 flatcamTools/ToolCutOut.py:159 +msgid "Multi-Depth" +msgstr "Multi-Depth" + +#: flatcamGUI/ObjectUI.py:923 flatcamGUI/ObjectUI.py:1726 +#: flatcamGUI/PreferencesUI.py:3334 flatcamGUI/PreferencesUI.py:4264 +#: flatcamGUI/PreferencesUI.py:5690 flatcamTools/ToolCutOut.py:162 +msgid "" +"Use multiple passes to limit\n" +"the cut depth in each pass. Will\n" +"cut multiple times until Cut Z is\n" +"reached." +msgstr "" +"Use multiple passes to limit\n" +"the cut depth in each pass. Will\n" +"cut multiple times until Cut Z is\n" +"reached." + +#: flatcamGUI/ObjectUI.py:936 flatcamGUI/ObjectUI.py:1740 +#: flatcamGUI/PreferencesUI.py:3346 flatcamGUI/PreferencesUI.py:5702 +#: flatcamTools/ToolCutOut.py:176 +msgid "Depth of each pass (positive)." +msgstr "Depth of each pass (positive)." + +#: flatcamGUI/ObjectUI.py:947 flatcamGUI/PreferencesUI.py:3354 +msgid "" +"Tool height when travelling\n" +"across the XY plane." +msgstr "" +"Tool height when travelling\n" +"across the XY plane." + +#: flatcamGUI/ObjectUI.py:968 flatcamGUI/ObjectUI.py:1770 +#: flatcamGUI/PreferencesUI.py:4380 +msgid "" +"Cutting speed in the XY\n" +"plane in units per minute" +msgstr "" +"Cutting speed in the XY\n" +"plane in units per minute" + +#: flatcamGUI/ObjectUI.py:983 flatcamGUI/PreferencesUI.py:3427 +msgid "" +"Tool speed while drilling\n" +"(in units per minute).\n" +"So called 'Plunge' feedrate.\n" +"This is for linear move G01." +msgstr "" +"Tool speed while drilling\n" +"(in units per minute).\n" +"So called 'Plunge' feedrate.\n" +"This is for linear move G01." + +#: flatcamGUI/ObjectUI.py:998 flatcamGUI/ObjectUI.py:1797 +#: flatcamGUI/PreferencesUI.py:3597 flatcamGUI/PreferencesUI.py:4503 +msgid "Feedrate Rapids" +msgstr "Feedrate Rapids" + +#: flatcamGUI/ObjectUI.py:1000 flatcamGUI/PreferencesUI.py:3599 +msgid "" +"Tool speed while drilling\n" +"(in units per minute).\n" +"This is for the rapid move G00.\n" +"It is useful only for Marlin,\n" +"ignore for any other cases." +msgstr "" +"Tool speed while drilling\n" +"(in units per minute).\n" +"This is for the rapid move G00.\n" +"It is useful only for Marlin,\n" +"ignore for any other cases." + +#: flatcamGUI/ObjectUI.py:1020 flatcamGUI/ObjectUI.py:1817 +#: flatcamGUI/PreferencesUI.py:4521 +msgid "Re-cut" +msgstr "Re-cut" + +#: flatcamGUI/ObjectUI.py:1022 flatcamGUI/ObjectUI.py:1035 +#: flatcamGUI/ObjectUI.py:1819 flatcamGUI/ObjectUI.py:1831 +#: flatcamGUI/PreferencesUI.py:4523 flatcamGUI/PreferencesUI.py:4535 +msgid "" +"In order to remove possible\n" +"copper leftovers where first cut\n" +"meet with last cut, we generate an\n" +"extended cut over the first cut section." +msgstr "" +"In order to remove possible\n" +"copper leftovers where first cut\n" +"meet with last cut, we generate an\n" +"extended cut over the first cut section." + +#: flatcamGUI/ObjectUI.py:1048 flatcamGUI/ObjectUI.py:1840 +#: flatcamGUI/PreferencesUI.py:4409 flatcamObjects/FlatCAMExcellon.py:1332 +#: flatcamObjects/FlatCAMGeometry.py:1568 +msgid "Spindle speed" +msgstr "Spindle speed" + +#: flatcamGUI/ObjectUI.py:1050 flatcamGUI/PreferencesUI.py:3442 +msgid "" +"Speed of the spindle\n" +"in RPM (optional)" +msgstr "" +"Speed of the spindle\n" +"in RPM (optional)" + +#: flatcamGUI/ObjectUI.py:1065 flatcamGUI/ObjectUI.py:1859 +#: flatcamGUI/PreferencesUI.py:3456 flatcamGUI/PreferencesUI.py:4427 +msgid "" +"Pause to allow the spindle to reach its\n" +"speed before cutting." +msgstr "" +"Pause to allow the spindle to reach its\n" +"speed before cutting." + +#: flatcamGUI/ObjectUI.py:1076 flatcamGUI/ObjectUI.py:1869 +#: flatcamGUI/PreferencesUI.py:3464 flatcamGUI/PreferencesUI.py:4432 +msgid "Number of time units for spindle to dwell." +msgstr "Number of time units for spindle to dwell." + +#: flatcamGUI/ObjectUI.py:1086 flatcamGUI/PreferencesUI.py:3563 +msgid "Offset Z" +msgstr "Offset Z" + +#: flatcamGUI/ObjectUI.py:1088 flatcamGUI/PreferencesUI.py:3565 +msgid "" +"Some drill bits (the larger ones) need to drill deeper\n" +"to create the desired exit hole diameter due of the tip shape.\n" +"The value here can compensate the Cut Z parameter." +msgstr "" +"Some drill bits (the larger ones) need to drill deeper\n" +"to create the desired exit hole diameter due of the tip shape.\n" +"The value here can compensate the Cut Z parameter." + +#: flatcamGUI/ObjectUI.py:1148 flatcamGUI/ObjectUI.py:1923 +#: flatcamTools/ToolNCC.py:492 flatcamTools/ToolPaint.py:423 +msgid "Apply parameters to all tools" +msgstr "Apply parameters to all tools" + +#: flatcamGUI/ObjectUI.py:1150 flatcamGUI/ObjectUI.py:1925 +#: flatcamTools/ToolNCC.py:494 flatcamTools/ToolPaint.py:425 +msgid "" +"The parameters in the current form will be applied\n" +"on all the tools from the Tool Table." +msgstr "" +"The parameters in the current form will be applied\n" +"on all the tools from the Tool Table." + +#: flatcamGUI/ObjectUI.py:1161 flatcamGUI/ObjectUI.py:1936 +#: flatcamTools/ToolNCC.py:505 flatcamTools/ToolPaint.py:436 +msgid "Common Parameters" +msgstr "Common Parameters" + +#: flatcamGUI/ObjectUI.py:1163 flatcamGUI/ObjectUI.py:1938 +#: flatcamTools/ToolNCC.py:507 flatcamTools/ToolPaint.py:438 +msgid "Parameters that are common for all tools." +msgstr "Parameters that are common for all tools." + +#: flatcamGUI/ObjectUI.py:1168 flatcamGUI/ObjectUI.py:1943 +msgid "Tool change Z" +msgstr "Tool change Z" + +#: flatcamGUI/ObjectUI.py:1170 flatcamGUI/PreferencesUI.py:3372 +msgid "" +"Include tool-change sequence\n" +"in G-Code (Pause for tool change)." +msgstr "" +"Include tool-change sequence\n" +"in G-Code (Pause for tool change)." + +#: flatcamGUI/ObjectUI.py:1177 flatcamGUI/ObjectUI.py:1954 +#: flatcamGUI/PreferencesUI.py:3380 flatcamGUI/PreferencesUI.py:4327 +msgid "" +"Z-axis position (height) for\n" +"tool change." +msgstr "" +"Z-axis position (height) for\n" +"tool change." + +#: flatcamGUI/ObjectUI.py:1194 flatcamGUI/PreferencesUI.py:3588 +msgid "" +"Height of the tool just after start.\n" +"Delete the value if you don't need this feature." +msgstr "" +"Height of the tool just after start.\n" +"Delete the value if you don't need this feature." + +#: flatcamGUI/ObjectUI.py:1203 flatcamGUI/ObjectUI.py:1982 +#: flatcamGUI/PreferencesUI.py:3396 flatcamGUI/PreferencesUI.py:4346 +msgid "End move Z" +msgstr "End move Z" + +#: flatcamGUI/ObjectUI.py:1205 flatcamGUI/ObjectUI.py:1984 +#: flatcamGUI/PreferencesUI.py:3398 flatcamGUI/PreferencesUI.py:4348 +msgid "" +"Height of the tool after\n" +"the last move at the end of the job." +msgstr "" +"Height of the tool after\n" +"the last move at the end of the job." + +#: flatcamGUI/ObjectUI.py:1222 flatcamGUI/ObjectUI.py:2001 +#: flatcamGUI/PreferencesUI.py:3413 flatcamGUI/PreferencesUI.py:4366 +msgid "End move X,Y" +msgstr "End move X,Y" + +#: flatcamGUI/ObjectUI.py:1224 flatcamGUI/ObjectUI.py:2003 +#: flatcamGUI/PreferencesUI.py:3415 flatcamGUI/PreferencesUI.py:4368 +msgid "" +"End move X,Y position. In format (x,y).\n" +"If no value is entered then there is no move\n" +"on X,Y plane at the end of the job." +msgstr "" +"End move X,Y position. In format (x,y).\n" +"If no value is entered then there is no move\n" +"on X,Y plane at the end of the job." + +#: flatcamGUI/ObjectUI.py:1234 flatcamGUI/ObjectUI.py:1877 +#: flatcamGUI/PreferencesUI.py:3613 flatcamGUI/PreferencesUI.py:4544 +msgid "Probe Z depth" +msgstr "Probe Z depth" + +#: flatcamGUI/ObjectUI.py:1236 flatcamGUI/ObjectUI.py:1879 +#: flatcamGUI/PreferencesUI.py:3615 flatcamGUI/PreferencesUI.py:4546 +msgid "" +"The maximum depth that the probe is allowed\n" +"to probe. Negative value, in current units." +msgstr "" +"The maximum depth that the probe is allowed\n" +"to probe. Negative value, in current units." + +#: flatcamGUI/ObjectUI.py:1253 flatcamGUI/ObjectUI.py:1894 +#: flatcamGUI/PreferencesUI.py:3626 flatcamGUI/PreferencesUI.py:4559 +msgid "Feedrate Probe" +msgstr "Feedrate Probe" + +#: flatcamGUI/ObjectUI.py:1255 flatcamGUI/ObjectUI.py:1896 +#: flatcamGUI/PreferencesUI.py:3628 flatcamGUI/PreferencesUI.py:4561 +msgid "The feedrate used while the probe is probing." +msgstr "The feedrate used while the probe is probing." + +#: flatcamGUI/ObjectUI.py:1271 +msgid "Preprocessor E" +msgstr "Preprocessor E" + +#: flatcamGUI/ObjectUI.py:1273 +msgid "" +"The preprocessor JSON file that dictates\n" +"Gcode output for Excellon Objects." +msgstr "" +"The preprocessor JSON file that dictates\n" +"Gcode output for Excellon Objects." + +#: flatcamGUI/ObjectUI.py:1283 +msgid "Preprocessor G" +msgstr "Preprocessor G" + +#: flatcamGUI/ObjectUI.py:1285 +msgid "" +"The preprocessor JSON file that dictates\n" +"Gcode output for Geometry (Milling) Objects." +msgstr "" +"The preprocessor JSON file that dictates\n" +"Gcode output for Geometry (Milling) Objects." + +#: flatcamGUI/ObjectUI.py:1309 flatcamGUI/ObjectUI.py:2027 +msgid "" +"Add / Select at least one tool in the tool-table.\n" +"Click the # header to select all, or Ctrl + LMB\n" +"for custom selection of tools." +msgstr "" +"Add / Select at least one tool in the tool-table.\n" +"Click the # header to select all, or Ctrl + LMB\n" +"for custom selection of tools." + +#: flatcamGUI/ObjectUI.py:1317 flatcamGUI/ObjectUI.py:2034 +msgid "Generate CNCJob object" +msgstr "Generate CNCJob object" + +#: flatcamGUI/ObjectUI.py:1319 +msgid "" +"Generate the CNC Job.\n" +"If milling then an additional Geometry object will be created" +msgstr "" +"Generate the CNC Job.\n" +"If milling then an additional Geometry object will be created" + +#: flatcamGUI/ObjectUI.py:1336 +msgid "Milling Geometry" +msgstr "Milling Geometry" + +#: flatcamGUI/ObjectUI.py:1338 +msgid "" +"Create Geometry for milling holes.\n" +"Select from the Tools Table above the hole dias to be\n" +"milled. Use the # column to make the selection." +msgstr "" +"Create Geometry for milling holes.\n" +"Select from the Tools Table above the hole dias to be\n" +"milled. Use the # column to make the selection." + +#: flatcamGUI/ObjectUI.py:1346 flatcamGUI/PreferencesUI.py:2207 +#: flatcamGUI/PreferencesUI.py:3514 +msgid "Diameter of the cutting tool." +msgstr "Diameter of the cutting tool." + +#: flatcamGUI/ObjectUI.py:1356 +msgid "Mill Drills" +msgstr "Mill Drills" + +#: flatcamGUI/ObjectUI.py:1358 +msgid "" +"Create the Geometry Object\n" +"for milling DRILLS toolpaths." +msgstr "" +"Create the Geometry Object\n" +"for milling DRILLS toolpaths." + +#: flatcamGUI/ObjectUI.py:1376 +msgid "Mill Slots" +msgstr "Mill Slots" + +#: flatcamGUI/ObjectUI.py:1378 +msgid "" +"Create the Geometry Object\n" +"for milling SLOTS toolpaths." +msgstr "" +"Create the Geometry Object\n" +"for milling SLOTS toolpaths." + +#: flatcamGUI/ObjectUI.py:1420 flatcamTools/ToolCutOut.py:326 +msgid "Geometry Object" +msgstr "Geometry Object" + +#: flatcamGUI/ObjectUI.py:1466 +msgid "" +"Tools in this Geometry object used for cutting.\n" +"The 'Offset' entry will set an offset for the cut.\n" +"'Offset' can be inside, outside, on path (none) and custom.\n" +"'Type' entry is only informative and it allow to know the \n" +"intent of using the current tool. \n" +"It can be Rough(ing), Finish(ing) or Iso(lation).\n" +"The 'Tool type'(TT) can be circular with 1 to 4 teeths(C1..C4),\n" +"ball(B), or V-Shaped(V). \n" +"When V-shaped is selected the 'Type' entry is automatically \n" +"set to Isolation, the CutZ parameter in the UI form is\n" +"grayed out and Cut Z is automatically calculated from the newly \n" +"showed UI form entries named V-Tip Dia and V-Tip Angle." +msgstr "" +"Tools in this Geometry object used for cutting.\n" +"The 'Offset' entry will set an offset for the cut.\n" +"'Offset' can be inside, outside, on path (none) and custom.\n" +"'Type' entry is only informative and it allow to know the \n" +"intent of using the current tool. \n" +"It can be Rough(ing), Finish(ing) or Iso(lation).\n" +"The 'Tool type'(TT) can be circular with 1 to 4 teeths(C1..C4),\n" +"ball(B), or V-Shaped(V). \n" +"When V-shaped is selected the 'Type' entry is automatically \n" +"set to Isolation, the CutZ parameter in the UI form is\n" +"grayed out and Cut Z is automatically calculated from the newly \n" +"showed UI form entries named V-Tip Dia and V-Tip Angle." + +#: flatcamGUI/ObjectUI.py:1483 flatcamGUI/ObjectUI.py:2232 +#: flatcamGUI/PreferencesUI.py:4698 +msgid "Plot Object" +msgstr "Plot Object" + +#: flatcamGUI/ObjectUI.py:1496 flatcamGUI/ObjectUI.py:2245 +#: flatcamGUI/ObjectUI.py:2255 flatcamGUI/PreferencesUI.py:7747 +#: flatcamTools/ToolCopperThieving.py:221 +msgid "Dia" +msgstr "Dia" + +#: flatcamGUI/ObjectUI.py:1496 flatcamGUI/ObjectUI.py:2245 +#: flatcamTools/ToolNCC.py:132 flatcamTools/ToolPaint.py:128 +msgid "TT" +msgstr "TT" + +#: flatcamGUI/ObjectUI.py:1503 +msgid "" +"This is the Tool Number.\n" +"When ToolChange is checked, on toolchange event this value\n" +"will be showed as a T1, T2 ... Tn" +msgstr "" +"This is the Tool Number.\n" +"When ToolChange is checked, on toolchange event this value\n" +"will be showed as a T1, T2 ... Tn" + +#: flatcamGUI/ObjectUI.py:1514 +msgid "" +"The value for the Offset can be:\n" +"- Path -> There is no offset, the tool cut will be done through the geometry " +"line.\n" +"- In(side) -> The tool cut will follow the geometry inside. It will create a " +"'pocket'.\n" +"- Out(side) -> The tool cut will follow the geometry line on the outside." +msgstr "" +"The value for the Offset can be:\n" +"- Path -> There is no offset, the tool cut will be done through the geometry " +"line.\n" +"- In(side) -> The tool cut will follow the geometry inside. It will create a " +"'pocket'.\n" +"- Out(side) -> The tool cut will follow the geometry line on the outside." + +#: flatcamGUI/ObjectUI.py:1521 +msgid "" +"The (Operation) Type has only informative value. Usually the UI form " +"values \n" +"are choose based on the operation type and this will serve as a reminder.\n" +"Can be 'Roughing', 'Finishing' or 'Isolation'.\n" +"For Roughing we may choose a lower Feedrate and multiDepth cut.\n" +"For Finishing we may choose a higher Feedrate, without multiDepth.\n" +"For Isolation we need a lower Feedrate as it use a milling bit with a fine " +"tip." +msgstr "" +"The (Operation) Type has only informative value. Usually the UI form " +"values \n" +"are choose based on the operation type and this will serve as a reminder.\n" +"Can be 'Roughing', 'Finishing' or 'Isolation'.\n" +"For Roughing we may choose a lower Feedrate and multiDepth cut.\n" +"For Finishing we may choose a higher Feedrate, without multiDepth.\n" +"For Isolation we need a lower Feedrate as it use a milling bit with a fine " +"tip." + +#: flatcamGUI/ObjectUI.py:1530 +msgid "" +"The Tool Type (TT) can be:\n" +"- Circular with 1 ... 4 teeth -> it is informative only. Being circular the " +"cut width in material\n" +"is exactly the tool diameter.\n" +"- Ball -> informative only and make reference to the Ball type endmill.\n" +"- V-Shape -> it will disable de Z-Cut parameter in the UI form and enable " +"two additional UI form\n" +"fields: V-Tip Dia and V-Tip Angle. Adjusting those two values will adjust " +"the Z-Cut parameter such\n" +"as the cut width into material will be equal with the value in the Tool " +"Diameter column of this table.\n" +"Choosing the V-Shape Tool Type automatically will select the Operation Type " +"as Isolation." +msgstr "" +"The Tool Type (TT) can be:\n" +"- Circular with 1 ... 4 teeth -> it is informative only. Being circular the " +"cut width in material\n" +"is exactly the tool diameter.\n" +"- Ball -> informative only and make reference to the Ball type endmill.\n" +"- V-Shape -> it will disable de Z-Cut parameter in the UI form and enable " +"two additional UI form\n" +"fields: V-Tip Dia and V-Tip Angle. Adjusting those two values will adjust " +"the Z-Cut parameter such\n" +"as the cut width into material will be equal with the value in the Tool " +"Diameter column of this table.\n" +"Choosing the V-Shape Tool Type automatically will select the Operation Type " +"as Isolation." + +#: flatcamGUI/ObjectUI.py:1542 +msgid "" +"Plot column. It is visible only for MultiGeo geometries, meaning geometries " +"that holds the geometry\n" +"data into the tools. For those geometries, deleting the tool will delete the " +"geometry data also,\n" +"so be WARNED. From the checkboxes on each row it can be enabled/disabled the " +"plot on canvas\n" +"for the corresponding tool." +msgstr "" +"Plot column. It is visible only for MultiGeo geometries, meaning geometries " +"that holds the geometry\n" +"data into the tools. For those geometries, deleting the tool will delete the " +"geometry data also,\n" +"so be WARNED. From the checkboxes on each row it can be enabled/disabled the " +"plot on canvas\n" +"for the corresponding tool." + +#: flatcamGUI/ObjectUI.py:1560 +msgid "" +"The value to offset the cut when \n" +"the Offset type selected is 'Offset'.\n" +"The value can be positive for 'outside'\n" +"cut and negative for 'inside' cut." +msgstr "" +"The value to offset the cut when \n" +"the Offset type selected is 'Offset'.\n" +"The value can be positive for 'outside'\n" +"cut and negative for 'inside' cut." + +#: flatcamGUI/ObjectUI.py:1579 flatcamTools/ToolNCC.py:209 +#: flatcamTools/ToolNCC.py:923 flatcamTools/ToolPaint.py:192 +#: flatcamTools/ToolPaint.py:849 flatcamTools/ToolSolderPaste.py:559 +msgid "New Tool" +msgstr "New Tool" + +#: flatcamGUI/ObjectUI.py:1596 +msgid "" +"Add a new tool to the Tool Table\n" +"with the specified diameter." +msgstr "" +"Add a new tool to the Tool Table\n" +"with the specified diameter." + +#: flatcamGUI/ObjectUI.py:1601 flatcamTools/ToolNCC.py:300 +#: flatcamTools/ToolNCC.py:634 flatcamTools/ToolPaint.py:283 +#: flatcamTools/ToolPaint.py:679 +msgid "Add from DB" +msgstr "Add from DB" + +#: flatcamGUI/ObjectUI.py:1603 flatcamTools/ToolNCC.py:302 +#: flatcamTools/ToolPaint.py:285 +msgid "" +"Add a new tool to the Tool Table\n" +"from the Tool DataBase." +msgstr "" +"Add a new tool to the Tool Table\n" +"from the Tool DataBase." + +#: flatcamGUI/ObjectUI.py:1618 +msgid "" +"Copy a selection of tools in the Tool Table\n" +"by first selecting a row in the Tool Table." +msgstr "" +"Copy a selection of tools in the Tool Table\n" +"by first selecting a row in the Tool Table." + +#: flatcamGUI/ObjectUI.py:1624 +msgid "" +"Delete a selection of tools in the Tool Table\n" +"by first selecting a row in the Tool Table." +msgstr "" +"Delete a selection of tools in the Tool Table\n" +"by first selecting a row in the Tool Table." + +#: flatcamGUI/ObjectUI.py:1751 flatcamGUI/PreferencesUI.py:4296 +msgid "" +"Height of the tool when\n" +"moving without cutting." +msgstr "" +"Height of the tool when\n" +"moving without cutting." + +#: flatcamGUI/ObjectUI.py:1784 flatcamGUI/PreferencesUI.py:4395 +msgid "" +"Cutting speed in the XY\n" +"plane in units per minute.\n" +"It is called also Plunge." +msgstr "" +"Cutting speed in the XY\n" +"plane in units per minute.\n" +"It is called also Plunge." + +#: flatcamGUI/ObjectUI.py:1799 flatcamGUI/PreferencesUI.py:4505 +msgid "" +"Cutting speed in the XY plane\n" +"(in units per minute).\n" +"This is for the rapid move G00.\n" +"It is useful only for Marlin,\n" +"ignore for any other cases." +msgstr "" +"Cutting speed in the XY plane\n" +"(in units per minute).\n" +"This is for the rapid move G00.\n" +"It is useful only for Marlin,\n" +"ignore for any other cases." + +#: flatcamGUI/ObjectUI.py:1843 flatcamGUI/PreferencesUI.py:4412 +msgid "" +"Speed of the spindle in RPM (optional).\n" +"If LASER preprocessor is used,\n" +"this value is the power of laser." +msgstr "" +"Speed of the spindle in RPM (optional).\n" +"If LASER preprocessor is used,\n" +"this value is the power of laser." + +#: flatcamGUI/ObjectUI.py:1946 flatcamGUI/PreferencesUI.py:4317 +msgid "" +"Include tool-change sequence\n" +"in the Machine Code (Pause for tool change)." +msgstr "" +"Include tool-change sequence\n" +"in the Machine Code (Pause for tool change)." + +#: flatcamGUI/ObjectUI.py:2015 flatcamGUI/PreferencesUI.py:4449 +msgid "" +"The Preprocessor file that dictates\n" +"the Machine Code (like GCode, RML, HPGL) output." +msgstr "" +"The Preprocessor file that dictates\n" +"the Machine Code (like GCode, RML, HPGL) output." + +#: flatcamGUI/ObjectUI.py:2036 +msgid "Generate the CNC Job object." +msgstr "Generate the CNC Job object." + +#: flatcamGUI/ObjectUI.py:2053 +msgid "Launch Paint Tool in Tools Tab." +msgstr "Launch Paint Tool in Tools Tab." + +#: flatcamGUI/ObjectUI.py:2061 flatcamGUI/PreferencesUI.py:5874 +msgid "" +"Creates tool paths to cover the\n" +"whole area of a polygon (remove\n" +"all copper). You will be asked\n" +"to click on the desired polygon." +msgstr "" +"Creates tool paths to cover the\n" +"whole area of a polygon (remove\n" +"all copper). You will be asked\n" +"to click on the desired polygon." + +#: flatcamGUI/ObjectUI.py:2116 +msgid "CNC Job Object" +msgstr "CNC Job Object" + +#: flatcamGUI/ObjectUI.py:2127 flatcamGUI/PreferencesUI.py:4703 +msgid "Plot kind" +msgstr "Plot kind" + +#: flatcamGUI/ObjectUI.py:2130 flatcamGUI/PreferencesUI.py:4705 +msgid "" +"This selects the kind of geometries on the canvas to plot.\n" +"Those can be either of type 'Travel' which means the moves\n" +"above the work piece or it can be of type 'Cut',\n" +"which means the moves that cut into the material." +msgstr "" +"This selects the kind of geometries on the canvas to plot.\n" +"Those can be either of type 'Travel' which means the moves\n" +"above the work piece or it can be of type 'Cut',\n" +"which means the moves that cut into the material." + +#: flatcamGUI/ObjectUI.py:2139 flatcamGUI/PreferencesUI.py:4713 +msgid "Travel" +msgstr "Travel" + +#: flatcamGUI/ObjectUI.py:2143 flatcamGUI/PreferencesUI.py:4722 +msgid "Display Annotation" +msgstr "Display Annotation" + +#: flatcamGUI/ObjectUI.py:2145 flatcamGUI/PreferencesUI.py:4724 +msgid "" +"This selects if to display text annotation on the plot.\n" +"When checked it will display numbers in order for each end\n" +"of a travel line." +msgstr "" +"This selects if to display text annotation on the plot.\n" +"When checked it will display numbers in order for each end\n" +"of a travel line." + +#: flatcamGUI/ObjectUI.py:2160 +msgid "Travelled dist." +msgstr "Travelled dist." + +#: flatcamGUI/ObjectUI.py:2162 flatcamGUI/ObjectUI.py:2167 +msgid "" +"This is the total travelled distance on X-Y plane.\n" +"In current units." +msgstr "" +"This is the total travelled distance on X-Y plane.\n" +"In current units." + +#: flatcamGUI/ObjectUI.py:2172 +msgid "Estimated time" +msgstr "Estimated time" + +#: flatcamGUI/ObjectUI.py:2174 flatcamGUI/ObjectUI.py:2179 +msgid "" +"This is the estimated time to do the routing/drilling,\n" +"without the time spent in ToolChange events." +msgstr "" +"This is the estimated time to do the routing/drilling,\n" +"without the time spent in ToolChange events." + +#: flatcamGUI/ObjectUI.py:2214 +msgid "CNC Tools Table" +msgstr "CNC Tools Table" + +#: flatcamGUI/ObjectUI.py:2217 +msgid "" +"Tools in this CNCJob object used for cutting.\n" +"The tool diameter is used for plotting on canvas.\n" +"The 'Offset' entry will set an offset for the cut.\n" +"'Offset' can be inside, outside, on path (none) and custom.\n" +"'Type' entry is only informative and it allow to know the \n" +"intent of using the current tool. \n" +"It can be Rough(ing), Finish(ing) or Iso(lation).\n" +"The 'Tool type'(TT) can be circular with 1 to 4 teeths(C1..C4),\n" +"ball(B), or V-Shaped(V)." +msgstr "" +"Tools in this CNCJob object used for cutting.\n" +"The tool diameter is used for plotting on canvas.\n" +"The 'Offset' entry will set an offset for the cut.\n" +"'Offset' can be inside, outside, on path (none) and custom.\n" +"'Type' entry is only informative and it allow to know the \n" +"intent of using the current tool. \n" +"It can be Rough(ing), Finish(ing) or Iso(lation).\n" +"The 'Tool type'(TT) can be circular with 1 to 4 teeths(C1..C4),\n" +"ball(B), or V-Shaped(V)." + +#: flatcamGUI/ObjectUI.py:2245 flatcamGUI/ObjectUI.py:2256 +msgid "P" +msgstr "P" + +#: flatcamGUI/ObjectUI.py:2266 +msgid "Update Plot" +msgstr "Update Plot" + +#: flatcamGUI/ObjectUI.py:2268 +msgid "Update the plot." +msgstr "Update the plot." + +#: flatcamGUI/ObjectUI.py:2275 flatcamGUI/PreferencesUI.py:5120 +msgid "Export CNC Code" +msgstr "Export CNC Code" + +#: flatcamGUI/ObjectUI.py:2277 flatcamGUI/PreferencesUI.py:5061 +#: flatcamGUI/PreferencesUI.py:5122 +msgid "" +"Export and save G-Code to\n" +"make this object to a file." +msgstr "" +"Export and save G-Code to\n" +"make this object to a file." + +#: flatcamGUI/ObjectUI.py:2283 +msgid "Prepend to CNC Code" +msgstr "Prepend to CNC Code" + +#: flatcamGUI/ObjectUI.py:2285 flatcamGUI/ObjectUI.py:2292 +#: flatcamGUI/PreferencesUI.py:5077 +msgid "" +"Type here any G-Code commands you would\n" +"like to add at the beginning of the G-Code file." +msgstr "" +"Type here any G-Code commands you would\n" +"like to add at the beginning of the G-Code file." + +#: flatcamGUI/ObjectUI.py:2298 +msgid "Append to CNC Code" +msgstr "Append to CNC Code" + +#: flatcamGUI/ObjectUI.py:2300 flatcamGUI/ObjectUI.py:2308 +#: flatcamGUI/PreferencesUI.py:5093 +msgid "" +"Type here any G-Code commands you would\n" +"like to append to the generated file.\n" +"I.e.: M2 (End of program)" +msgstr "" +"Type here any G-Code commands you would\n" +"like to append to the generated file.\n" +"I.e.: M2 (End of program)" + +#: flatcamGUI/ObjectUI.py:2322 flatcamGUI/PreferencesUI.py:5128 +msgid "Toolchange G-Code" +msgstr "Toolchange G-Code" + +#: flatcamGUI/ObjectUI.py:2325 flatcamGUI/PreferencesUI.py:5131 +msgid "" +"Type here any G-Code commands you would\n" +"like to be executed when Toolchange event is encountered.\n" +"This will constitute a Custom Toolchange GCode,\n" +"or a Toolchange Macro.\n" +"The FlatCAM variables are surrounded by '%' symbol.\n" +"\n" +"WARNING: it can be used only with a preprocessor file\n" +"that has 'toolchange_custom' in it's name and this is built\n" +"having as template the 'Toolchange Custom' posprocessor file." +msgstr "" +"Type here any G-Code commands you would\n" +"like to be executed when Toolchange event is encountered.\n" +"This will constitute a Custom Toolchange GCode,\n" +"or a Toolchange Macro.\n" +"The FlatCAM variables are surrounded by '%' symbol.\n" +"\n" +"WARNING: it can be used only with a preprocessor file\n" +"that has 'toolchange_custom' in it's name and this is built\n" +"having as template the 'Toolchange Custom' posprocessor file." + +#: flatcamGUI/ObjectUI.py:2340 +msgid "" +"Type here any G-Code commands you would\n" +"like to be executed when Toolchange event is encountered.\n" +"This will constitute a Custom Toolchange GCode,\n" +"or a Toolchange Macro.\n" +"The FlatCAM variables are surrounded by '%' symbol.\n" +"WARNING: it can be used only with a preprocessor file\n" +"that has 'toolchange_custom' in it's name." +msgstr "" +"Type here any G-Code commands you would\n" +"like to be executed when Toolchange event is encountered.\n" +"This will constitute a Custom Toolchange GCode,\n" +"or a Toolchange Macro.\n" +"The FlatCAM variables are surrounded by '%' symbol.\n" +"WARNING: it can be used only with a preprocessor file\n" +"that has 'toolchange_custom' in it's name." + +#: flatcamGUI/ObjectUI.py:2355 flatcamGUI/PreferencesUI.py:5170 +msgid "Use Toolchange Macro" +msgstr "Use Toolchange Macro" + +#: flatcamGUI/ObjectUI.py:2357 flatcamGUI/PreferencesUI.py:5172 +msgid "" +"Check this box if you want to use\n" +"a Custom Toolchange GCode (macro)." +msgstr "" +"Check this box if you want to use\n" +"a Custom Toolchange GCode (macro)." + +#: flatcamGUI/ObjectUI.py:2365 flatcamGUI/PreferencesUI.py:5184 +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 "" +"A list of the FlatCAM variables that can be used\n" +"in the Toolchange event.\n" +"They have to be surrounded by the '%' symbol" + +#: flatcamGUI/ObjectUI.py:2372 flatcamGUI/PreferencesUI.py:2627 +#: flatcamGUI/PreferencesUI.py:3833 flatcamGUI/PreferencesUI.py:4640 +#: flatcamGUI/PreferencesUI.py:5191 flatcamGUI/PreferencesUI.py:5310 +#: flatcamGUI/PreferencesUI.py:5640 flatcamGUI/PreferencesUI.py:5797 +#: flatcamGUI/PreferencesUI.py:6164 flatcamGUI/PreferencesUI.py:6461 +#: flatcamGUI/PreferencesUI.py:6711 flatcamGUI/PreferencesUI.py:6942 +#: flatcamGUI/PreferencesUI.py:7169 flatcamGUI/PreferencesUI.py:7191 +#: flatcamGUI/PreferencesUI.py:7415 flatcamGUI/PreferencesUI.py:7452 +#: flatcamGUI/PreferencesUI.py:7646 flatcamGUI/PreferencesUI.py:7900 +#: flatcamGUI/PreferencesUI.py:8016 flatcamGUI/PreferencesUI.py:8135 +#: flatcamGUI/PreferencesUI.py:8347 flatcamGUI/PreferencesUI.py:8556 +#: flatcamTools/ToolCopperThieving.py:89 flatcamTools/ToolFiducials.py:149 +#: flatcamTools/ToolInvertGerber.py:82 +msgid "Parameters" +msgstr "Parameters" + +#: flatcamGUI/ObjectUI.py:2375 flatcamGUI/PreferencesUI.py:5196 +msgid "FlatCAM CNC parameters" +msgstr "FlatCAM CNC parameters" + +#: flatcamGUI/ObjectUI.py:2376 flatcamGUI/PreferencesUI.py:5201 +msgid "tool number" +msgstr "tool number" + +#: flatcamGUI/ObjectUI.py:2377 flatcamGUI/PreferencesUI.py:5202 +msgid "tool diameter" +msgstr "tool diameter" + +#: flatcamGUI/ObjectUI.py:2378 flatcamGUI/PreferencesUI.py:5203 +msgid "for Excellon, total number of drills" +msgstr "for Excellon, total number of drills" + +#: flatcamGUI/ObjectUI.py:2380 flatcamGUI/PreferencesUI.py:5205 +msgid "X coord for Toolchange" +msgstr "X coord for Toolchange" + +#: flatcamGUI/ObjectUI.py:2381 flatcamGUI/PreferencesUI.py:5206 +msgid "Y coord for Toolchange" +msgstr "Y coord for Toolchange" + +#: flatcamGUI/ObjectUI.py:2382 flatcamGUI/PreferencesUI.py:5208 +msgid "Z coord for Toolchange" +msgstr "Z coord for Toolchange" + +#: flatcamGUI/ObjectUI.py:2383 +msgid "depth where to cut" +msgstr "depth where to cut" + +#: flatcamGUI/ObjectUI.py:2384 +msgid "height where to travel" +msgstr "height where to travel" + +#: flatcamGUI/ObjectUI.py:2385 flatcamGUI/PreferencesUI.py:5211 +msgid "the step value for multidepth cut" +msgstr "the step value for multidepth cut" + +#: flatcamGUI/ObjectUI.py:2387 flatcamGUI/PreferencesUI.py:5213 +msgid "the value for the spindle speed" +msgstr "the value for the spindle speed" + +#: flatcamGUI/ObjectUI.py:2389 +msgid "time to dwell to allow the spindle to reach it's set RPM" +msgstr "time to dwell to allow the spindle to reach it's set RPM" + +#: flatcamGUI/ObjectUI.py:2405 +msgid "View CNC Code" +msgstr "View CNC Code" + +#: flatcamGUI/ObjectUI.py:2407 +msgid "" +"Opens TAB to view/modify/print G-Code\n" +"file." +msgstr "" +"Opens TAB to view/modify/print G-Code\n" +"file." + +#: flatcamGUI/ObjectUI.py:2412 +msgid "Save CNC Code" +msgstr "Save CNC Code" + +#: flatcamGUI/ObjectUI.py:2414 +msgid "" +"Opens dialog to save G-Code\n" +"file." +msgstr "" +"Opens dialog to save G-Code\n" +"file." + +#: flatcamGUI/ObjectUI.py:2448 +msgid "Script Object" +msgstr "Script Object" + +#: flatcamGUI/ObjectUI.py:2468 flatcamGUI/ObjectUI.py:2542 +msgid "Auto Completer" +msgstr "Auto Completer" + +#: flatcamGUI/ObjectUI.py:2470 +msgid "This selects if the auto completer is enabled in the Script Editor." +msgstr "This selects if the auto completer is enabled in the Script Editor." + +#: flatcamGUI/ObjectUI.py:2515 +msgid "Document Object" +msgstr "Document Object" + +#: flatcamGUI/ObjectUI.py:2544 +msgid "This selects if the auto completer is enabled in the Document Editor." +msgstr "This selects if the auto completer is enabled in the Document Editor." + +#: flatcamGUI/ObjectUI.py:2562 +msgid "Font Type" +msgstr "Font Type" + +#: flatcamGUI/ObjectUI.py:2579 flatcamGUI/PreferencesUI.py:1278 +msgid "Font Size" +msgstr "Font Size" + +#: flatcamGUI/ObjectUI.py:2615 +msgid "Alignment" +msgstr "Alignment" + +#: flatcamGUI/ObjectUI.py:2620 +msgid "Align Left" +msgstr "Align Left" + +#: flatcamGUI/ObjectUI.py:2630 +msgid "Align Right" +msgstr "Align Right" + +#: flatcamGUI/ObjectUI.py:2635 +msgid "Justify" +msgstr "Justify" + +#: flatcamGUI/ObjectUI.py:2642 +msgid "Font Color" +msgstr "Font Color" + +#: flatcamGUI/ObjectUI.py:2644 +msgid "Set the font color for the selected text" +msgstr "Set the font color for the selected text" + +#: flatcamGUI/ObjectUI.py:2658 +msgid "Selection Color" +msgstr "Selection Color" + +#: flatcamGUI/ObjectUI.py:2660 +msgid "Set the selection color when doing text selection." +msgstr "Set the selection color when doing text selection." + +#: flatcamGUI/ObjectUI.py:2674 +msgid "Tab Size" +msgstr "Tab Size" + +#: flatcamGUI/ObjectUI.py:2676 +msgid "Set the tab size. In pixels. Default value is 80 pixels." +msgstr "Set the tab size. In pixels. Default value is 80 pixels." + +#: flatcamGUI/PlotCanvasLegacy.py:1299 +msgid "" +"Could not annotate due of a difference between the number of text elements " +"and the number of text positions." +msgstr "" +"Could not annotate due of a difference between the number of text elements " +"and the number of text positions." + +#: flatcamGUI/PreferencesUI.py:343 +msgid "GUI Preferences" +msgstr "GUI Preferences" + +#: flatcamGUI/PreferencesUI.py:353 +msgid "Theme" +msgstr "Theme" + +#: flatcamGUI/PreferencesUI.py:355 +msgid "" +"Select a theme for FlatCAM.\n" +"It will theme the plot area." +msgstr "" +"Select a theme for FlatCAM.\n" +"It will theme the plot area." + +#: flatcamGUI/PreferencesUI.py:360 +msgid "Light" +msgstr "Light" + +#: flatcamGUI/PreferencesUI.py:361 +msgid "Dark" +msgstr "Dark" + +#: flatcamGUI/PreferencesUI.py:368 +msgid "Use Gray Icons" +msgstr "Use Gray Icons" + +#: flatcamGUI/PreferencesUI.py:370 +msgid "" +"Check this box to use a set of icons with\n" +"a lighter (gray) color. To be used when a\n" +"full dark theme is applied." +msgstr "" +"Check this box to use a set of icons with\n" +"a lighter (gray) color. To be used when a\n" +"full dark theme is applied." + +#: flatcamGUI/PreferencesUI.py:376 +msgid "Apply Theme" +msgstr "Apply Theme" + +#: flatcamGUI/PreferencesUI.py:378 +msgid "" +"Select a theme for FlatCAM.\n" +"It will theme the plot area.\n" +"The application will restart after change." +msgstr "" +"Select a theme for FlatCAM.\n" +"It will theme the plot area.\n" +"The application will restart after change." + +#: flatcamGUI/PreferencesUI.py:390 +msgid "Layout" +msgstr "Layout" + +#: flatcamGUI/PreferencesUI.py:392 +msgid "" +"Select an layout for FlatCAM.\n" +"It is applied immediately." +msgstr "" +"Select an layout for FlatCAM.\n" +"It is applied immediately." + +#: flatcamGUI/PreferencesUI.py:412 +msgid "Style" +msgstr "Style" + +#: flatcamGUI/PreferencesUI.py:414 +msgid "" +"Select an style for FlatCAM.\n" +"It will be applied at the next app start." +msgstr "" +"Select an style for FlatCAM.\n" +"It will be applied at the next app start." + +#: flatcamGUI/PreferencesUI.py:428 +msgid "Activate HDPI Support" +msgstr "Activate HDPI Support" + +#: flatcamGUI/PreferencesUI.py:430 +msgid "" +"Enable High DPI support for FlatCAM.\n" +"It will be applied at the next app start." +msgstr "" +"Enable High DPI support for FlatCAM.\n" +"It will be applied at the next app start." + +#: flatcamGUI/PreferencesUI.py:444 +msgid "Display Hover Shape" +msgstr "Display Hover Shape" + +#: flatcamGUI/PreferencesUI.py:446 +msgid "" +"Enable display of a hover shape for FlatCAM objects.\n" +"It is displayed whenever the mouse cursor is hovering\n" +"over any kind of not-selected object." +msgstr "" +"Enable display of a hover shape for FlatCAM objects.\n" +"It is displayed whenever the mouse cursor is hovering\n" +"over any kind of not-selected object." + +#: flatcamGUI/PreferencesUI.py:453 +msgid "Display Selection Shape" +msgstr "Display Selection Shape" + +#: flatcamGUI/PreferencesUI.py:455 +msgid "" +"Enable the display of a selection shape for FlatCAM objects.\n" +"It is displayed whenever the mouse selects an object\n" +"either by clicking or dragging mouse from left to right or\n" +"right to left." +msgstr "" +"Enable the display of a selection shape for FlatCAM objects.\n" +"It is displayed whenever the mouse selects an object\n" +"either by clicking or dragging mouse from left to right or\n" +"right to left." + +#: flatcamGUI/PreferencesUI.py:468 +msgid "Left-Right Selection Color" +msgstr "Left-Right Selection Color" + +#: flatcamGUI/PreferencesUI.py:471 flatcamGUI/PreferencesUI.py:537 +#: flatcamGUI/PreferencesUI.py:2062 flatcamGUI/PreferencesUI.py:3085 +#: flatcamGUI/PreferencesUI.py:4174 flatcamGUI/PreferencesUI.py:4827 +#: flatcamGUI/PreferencesUI.py:4893 flatcamTools/ToolRulesCheck.py:186 +msgid "Outline" +msgstr "Outline" + +#: flatcamGUI/PreferencesUI.py:473 +msgid "Set the line color for the 'left to right' selection box." +msgstr "Set the line color for the 'left to right' selection box." + +#: flatcamGUI/PreferencesUI.py:487 flatcamGUI/PreferencesUI.py:554 +#: flatcamGUI/PreferencesUI.py:2079 flatcamGUI/PreferencesUI.py:3102 +#: flatcamGUI/PreferencesUI.py:4844 flatcamGUI/PreferencesUI.py:4910 +msgid "Fill" +msgstr "Fill" + +#: flatcamGUI/PreferencesUI.py:489 +msgid "" +"Set the fill color for the selection box\n" +"in case that the selection is done from left to right.\n" +"First 6 digits are the color and the last 2\n" +"digits are for alpha (transparency) level." +msgstr "" +"Set the fill color for the selection box\n" +"in case that the selection is done from left to right.\n" +"First 6 digits are the color and the last 2\n" +"digits are for alpha (transparency) level." + +#: flatcamGUI/PreferencesUI.py:507 flatcamGUI/PreferencesUI.py:574 +#: flatcamGUI/PreferencesUI.py:2098 flatcamGUI/PreferencesUI.py:3121 +#: flatcamGUI/PreferencesUI.py:4863 +msgid "Alpha" +msgstr "Alpha" + +#: flatcamGUI/PreferencesUI.py:509 +msgid "Set the fill transparency for the 'left to right' selection box." +msgstr "Set the fill transparency for the 'left to right' selection box." + +#: flatcamGUI/PreferencesUI.py:533 +msgid "Right-Left Selection Color" +msgstr "Right-Left Selection Color" + +#: flatcamGUI/PreferencesUI.py:539 +msgid "Set the line color for the 'right to left' selection box." +msgstr "Set the line color for the 'right to left' selection box." + +#: flatcamGUI/PreferencesUI.py:556 +msgid "" +"Set the fill color for the selection box\n" +"in case that the selection is done from right to left.\n" +"First 6 digits are the color and the last 2\n" +"digits are for alpha (transparency) level." +msgstr "" +"Set the fill color for the selection box\n" +"in case that the selection is done from right to left.\n" +"First 6 digits are the color and the last 2\n" +"digits are for alpha (transparency) level." + +#: flatcamGUI/PreferencesUI.py:576 +msgid "Set the fill transparency for selection 'right to left' box." +msgstr "Set the fill transparency for selection 'right to left' box." + +#: flatcamGUI/PreferencesUI.py:603 +msgid "Editor Color" +msgstr "Editor Color" + +#: flatcamGUI/PreferencesUI.py:607 +msgid "Drawing" +msgstr "Drawing" + +#: flatcamGUI/PreferencesUI.py:609 +msgid "Set the color for the shape." +msgstr "Set the color for the shape." + +#: flatcamGUI/PreferencesUI.py:626 +msgid "Set the color of the shape when selected." +msgstr "Set the color of the shape when selected." + +#: flatcamGUI/PreferencesUI.py:649 +msgid "Project Items Color" +msgstr "Project Items Color" + +#: flatcamGUI/PreferencesUI.py:653 +msgid "Enabled" +msgstr "Enabled" + +#: flatcamGUI/PreferencesUI.py:655 +msgid "Set the color of the items in Project Tab Tree." +msgstr "Set the color of the items in Project Tab Tree." + +#: flatcamGUI/PreferencesUI.py:669 +msgid "Disabled" +msgstr "Disabled" + +#: flatcamGUI/PreferencesUI.py:671 +msgid "" +"Set the color of the items in Project Tab Tree,\n" +"for the case when the items are disabled." +msgstr "" +"Set the color of the items in Project Tab Tree,\n" +"for the case when the items are disabled." + +#: flatcamGUI/PreferencesUI.py:687 +msgid "Project AutoHide" +msgstr "Project AutoHide" + +#: flatcamGUI/PreferencesUI.py:689 +msgid "" +"Check this box if you want the project/selected/tool tab area to\n" +"hide automatically when there are no objects loaded and\n" +"to show whenever a new object is created." +msgstr "" +"Check this box if you want the project/selected/tool tab area to\n" +"hide automatically when there are no objects loaded and\n" +"to show whenever a new object is created." + +#: flatcamGUI/PreferencesUI.py:1109 +msgid "App Settings" +msgstr "App Settings" + +#: flatcamGUI/PreferencesUI.py:1130 +msgid "Grid Settings" +msgstr "Grid Settings" + +#: flatcamGUI/PreferencesUI.py:1134 +msgid "X value" +msgstr "X value" + +#: flatcamGUI/PreferencesUI.py:1136 +msgid "This is the Grid snap value on X axis." +msgstr "This is the Grid snap value on X axis." + +#: flatcamGUI/PreferencesUI.py:1146 +msgid "Y value" +msgstr "Y value" + +#: flatcamGUI/PreferencesUI.py:1148 +msgid "This is the Grid snap value on Y axis." +msgstr "This is the Grid snap value on Y axis." + +#: flatcamGUI/PreferencesUI.py:1158 +msgid "Snap Max" +msgstr "Snap Max" + +#: flatcamGUI/PreferencesUI.py:1173 +msgid "Workspace Settings" +msgstr "Workspace Settings" + +#: flatcamGUI/PreferencesUI.py:1176 +msgid "Active" +msgstr "Active" + +#: flatcamGUI/PreferencesUI.py:1178 +msgid "" +"Draw a delimiting rectangle on canvas.\n" +"The purpose is to illustrate the limits for our work." +msgstr "" +"Draw a delimiting rectangle on canvas.\n" +"The purpose is to illustrate the limits for our work." + +#: flatcamGUI/PreferencesUI.py:1186 +msgid "" +"Select the type of rectangle to be used on canvas,\n" +"as valid workspace." +msgstr "" +"Select the type of rectangle to be used on canvas,\n" +"as valid workspace." + +#: flatcamGUI/PreferencesUI.py:1252 +msgid "Orientation" +msgstr "Orientation" + +#: flatcamGUI/PreferencesUI.py:1253 flatcamGUI/PreferencesUI.py:6372 +#: flatcamTools/ToolFilm.py:422 +msgid "" +"Can be:\n" +"- Portrait\n" +"- Landscape" +msgstr "" +"Can be:\n" +"- Portrait\n" +"- Landscape" + +#: flatcamGUI/PreferencesUI.py:1257 flatcamGUI/PreferencesUI.py:6376 +#: flatcamTools/ToolFilm.py:426 +msgid "Portrait" +msgstr "Portrait" + +#: flatcamGUI/PreferencesUI.py:1258 flatcamGUI/PreferencesUI.py:6377 +#: flatcamTools/ToolFilm.py:427 +msgid "Landscape" +msgstr "Landscape" + +#: flatcamGUI/PreferencesUI.py:1282 +msgid "Notebook" +msgstr "Notebook" + +#: flatcamGUI/PreferencesUI.py:1284 +msgid "" +"This sets the font size for the elements found in the Notebook.\n" +"The notebook is the collapsible area in the left side of the GUI,\n" +"and include the Project, Selected and Tool tabs." +msgstr "" +"This sets the font size for the elements found in the Notebook.\n" +"The notebook is the collapsible area in the left side of the GUI,\n" +"and include the Project, Selected and Tool tabs." + +#: flatcamGUI/PreferencesUI.py:1303 +msgid "Axis" +msgstr "Axis" + +#: flatcamGUI/PreferencesUI.py:1305 +msgid "This sets the font size for canvas axis." +msgstr "This sets the font size for canvas axis." + +#: flatcamGUI/PreferencesUI.py:1322 +msgid "Textbox" +msgstr "Textbox" + +#: flatcamGUI/PreferencesUI.py:1324 +msgid "" +"This sets the font size for the Textbox GUI\n" +"elements that are used in FlatCAM." +msgstr "" +"This sets the font size for the Textbox GUI\n" +"elements that are used in FlatCAM." + +#: flatcamGUI/PreferencesUI.py:1350 +msgid "Mouse Settings" +msgstr "Mouse Settings" + +#: flatcamGUI/PreferencesUI.py:1354 +msgid "Cursor Shape" +msgstr "Cursor Shape" + +#: flatcamGUI/PreferencesUI.py:1356 +msgid "" +"Choose a mouse cursor shape.\n" +"- Small -> with a customizable size.\n" +"- Big -> Infinite lines" +msgstr "" +"Choose a mouse cursor shape.\n" +"- Small -> with a customizable size.\n" +"- Big -> Infinite lines" + +#: flatcamGUI/PreferencesUI.py:1362 +msgid "Small" +msgstr "Small" + +#: flatcamGUI/PreferencesUI.py:1363 +msgid "Big" +msgstr "Big" + +#: flatcamGUI/PreferencesUI.py:1370 +msgid "Cursor Size" +msgstr "Cursor Size" + +#: flatcamGUI/PreferencesUI.py:1372 +msgid "Set the size of the mouse cursor, in pixels." +msgstr "Set the size of the mouse cursor, in pixels." + +#: flatcamGUI/PreferencesUI.py:1383 +msgid "Cursor Width" +msgstr "Cursor Width" + +#: flatcamGUI/PreferencesUI.py:1385 +msgid "Set the line width of the mouse cursor, in pixels." +msgstr "Set the line width of the mouse cursor, in pixels." + +#: flatcamGUI/PreferencesUI.py:1396 flatcamGUI/PreferencesUI.py:1403 +msgid "Cursor Color" +msgstr "Cursor Color" + +#: flatcamGUI/PreferencesUI.py:1398 +msgid "Check this box to color mouse cursor." +msgstr "Check this box to color mouse cursor." + +#: flatcamGUI/PreferencesUI.py:1405 +msgid "Set the color of the mouse cursor." +msgstr "Set the color of the mouse cursor." + +#: flatcamGUI/PreferencesUI.py:1428 +msgid "Pan Button" +msgstr "Pan Button" + +#: flatcamGUI/PreferencesUI.py:1430 +msgid "" +"Select the mouse button to use for panning:\n" +"- MMB --> Middle Mouse Button\n" +"- RMB --> Right Mouse Button" +msgstr "" +"Select the mouse button to use for panning:\n" +"- MMB --> Middle Mouse Button\n" +"- RMB --> Right Mouse Button" + +#: flatcamGUI/PreferencesUI.py:1434 +msgid "MMB" +msgstr "MMB" + +#: flatcamGUI/PreferencesUI.py:1435 +msgid "RMB" +msgstr "RMB" + +#: flatcamGUI/PreferencesUI.py:1441 +msgid "Multiple Selection" +msgstr "Multiple Selection" + +#: flatcamGUI/PreferencesUI.py:1443 +msgid "Select the key used for multiple selection." +msgstr "Select the key used for multiple selection." + +#: flatcamGUI/PreferencesUI.py:1445 +msgid "CTRL" +msgstr "CTRL" + +#: flatcamGUI/PreferencesUI.py:1446 +msgid "SHIFT" +msgstr "SHIFT" + +#: flatcamGUI/PreferencesUI.py:1457 +msgid "Delete object confirmation" +msgstr "Delete object confirmation" + +#: flatcamGUI/PreferencesUI.py:1459 +msgid "" +"When checked the application will ask for user confirmation\n" +"whenever the Delete object(s) event is triggered, either by\n" +"menu shortcut or key shortcut." +msgstr "" +"When checked the application will ask for user confirmation\n" +"whenever the Delete object(s) event is triggered, either by\n" +"menu shortcut or key shortcut." + +#: flatcamGUI/PreferencesUI.py:1466 +msgid "\"Open\" behavior" +msgstr "\"Open\" behavior" + +#: flatcamGUI/PreferencesUI.py:1468 +msgid "" +"When checked the path for the last saved file is used when saving files,\n" +"and the path for the last opened file is used when opening files.\n" +"\n" +"When unchecked the path for opening files is the one used last: either the\n" +"path for saving files or the path for opening files." +msgstr "" +"When checked the path for the last saved file is used when saving files,\n" +"and the path for the last opened file is used when opening files.\n" +"\n" +"When unchecked the path for opening files is the one used last: either the\n" +"path for saving files or the path for opening files." + +#: flatcamGUI/PreferencesUI.py:1477 +msgid "Enable ToolTips" +msgstr "Enable ToolTips" + +#: flatcamGUI/PreferencesUI.py:1479 +msgid "" +"Check this box if you want to have toolTips displayed\n" +"when hovering with mouse over items throughout the App." +msgstr "" +"Check this box if you want to have toolTips displayed\n" +"when hovering with mouse over items throughout the App." + +#: flatcamGUI/PreferencesUI.py:1486 +msgid "Allow Machinist Unsafe Settings" +msgstr "Allow Machinist Unsafe Settings" + +#: flatcamGUI/PreferencesUI.py:1488 +msgid "" +"If checked, some of the application settings will be allowed\n" +"to have values that are usually unsafe to use.\n" +"Like Z travel negative values or Z Cut positive values.\n" +"It will applied at the next application start.\n" +"<>: Don't change this unless you know what you are doing !!!" +msgstr "" +"If checked, some of the application settings will be allowed\n" +"to have values that are usually unsafe to use.\n" +"Like Z travel negative values or Z Cut positive values.\n" +"It will applied at the next application start.\n" +"<>: Don't change this unless you know what you are doing !!!" + +#: flatcamGUI/PreferencesUI.py:1500 +msgid "Bookmarks limit" +msgstr "Bookmarks limit" + +#: flatcamGUI/PreferencesUI.py:1502 +msgid "" +"The maximum number of bookmarks that may be installed in the menu.\n" +"The number of bookmarks in the bookmark manager may be greater\n" +"but the menu will hold only so much." +msgstr "" +"The maximum number of bookmarks that may be installed in the menu.\n" +"The number of bookmarks in the bookmark manager may be greater\n" +"but the menu will hold only so much." + +#: flatcamGUI/PreferencesUI.py:1511 +msgid "Activity Icon" +msgstr "Activity Icon" + +#: flatcamGUI/PreferencesUI.py:1513 +msgid "Select the GIF that show activity when FlatCAM is active." +msgstr "Select the GIF that show activity when FlatCAM is active." + +#: flatcamGUI/PreferencesUI.py:1571 +msgid "App Preferences" +msgstr "App Preferences" + +#: flatcamGUI/PreferencesUI.py:1581 flatcamGUI/PreferencesUI.py:1991 +#: flatcamGUI/PreferencesUI.py:2539 flatcamGUI/PreferencesUI.py:2986 +#: flatcamGUI/PreferencesUI.py:3695 flatcamTools/ToolDistance.py:56 +#: flatcamTools/ToolDistanceMin.py:50 flatcamTools/ToolPcbWizard.py:127 +#: flatcamTools/ToolProperties.py:154 +msgid "Units" +msgstr "Units" + +#: flatcamGUI/PreferencesUI.py:1582 +msgid "" +"The default value for FlatCAM units.\n" +"Whatever is selected here is set every time\n" +"FLatCAM is started." +msgstr "" +"The default value for FlatCAM units.\n" +"Whatever is selected here is set every time\n" +"FLatCAM is started." + +#: flatcamGUI/PreferencesUI.py:1585 flatcamGUI/PreferencesUI.py:1997 +#: flatcamGUI/PreferencesUI.py:2545 flatcamGUI/PreferencesUI.py:2997 +#: flatcamGUI/PreferencesUI.py:3701 flatcamTools/ToolCalculators.py:62 +#: flatcamTools/ToolPcbWizard.py:126 +msgid "MM" +msgstr "MM" + +#: flatcamGUI/PreferencesUI.py:1586 +msgid "IN" +msgstr "IN" + +#: flatcamGUI/PreferencesUI.py:1592 +msgid "Precision MM" +msgstr "Precision MM" + +#: flatcamGUI/PreferencesUI.py:1594 +msgid "" +"The number of decimals used throughout the application\n" +"when the set units are in METRIC system.\n" +"Any change here require an application restart." +msgstr "" +"The number of decimals used throughout the application\n" +"when the set units are in METRIC system.\n" +"Any change here require an application restart." + +#: flatcamGUI/PreferencesUI.py:1606 +msgid "Precision INCH" +msgstr "Precision INCH" + +#: flatcamGUI/PreferencesUI.py:1608 +msgid "" +"The number of decimals used throughout the application\n" +"when the set units are in INCH system.\n" +"Any change here require an application restart." +msgstr "" +"The number of decimals used throughout the application\n" +"when the set units are in INCH system.\n" +"Any change here require an application restart." + +#: flatcamGUI/PreferencesUI.py:1620 +msgid "Graphic Engine" +msgstr "Graphic Engine" + +#: flatcamGUI/PreferencesUI.py:1621 +msgid "" +"Choose what graphic engine to use in FlatCAM.\n" +"Legacy(2D) -> reduced functionality, slow performance but enhanced " +"compatibility.\n" +"OpenGL(3D) -> full functionality, high performance\n" +"Some graphic cards are too old and do not work in OpenGL(3D) mode, like:\n" +"Intel HD3000 or older. In this case the plot area will be black therefore\n" +"use the Legacy(2D) mode." +msgstr "" +"Choose what graphic engine to use in FlatCAM.\n" +"Legacy(2D) -> reduced functionality, slow performance but enhanced " +"compatibility.\n" +"OpenGL(3D) -> full functionality, high performance\n" +"Some graphic cards are too old and do not work in OpenGL(3D) mode, like:\n" +"Intel HD3000 or older. In this case the plot area will be black therefore\n" +"use the Legacy(2D) mode." + +#: flatcamGUI/PreferencesUI.py:1627 +msgid "Legacy(2D)" +msgstr "Legacy(2D)" + +#: flatcamGUI/PreferencesUI.py:1628 +msgid "OpenGL(3D)" +msgstr "OpenGL(3D)" + +#: flatcamGUI/PreferencesUI.py:1640 +msgid "APP. LEVEL" +msgstr "APP. LEVEL" + +#: flatcamGUI/PreferencesUI.py:1641 +msgid "" +"Choose the default level of usage for FlatCAM.\n" +"BASIC level -> reduced functionality, best for beginner's.\n" +"ADVANCED level -> full functionality.\n" +"\n" +"The choice here will influence the parameters in\n" +"the Selected Tab for all kinds of FlatCAM objects." +msgstr "" +"Choose the default level of usage for FlatCAM.\n" +"BASIC level -> reduced functionality, best for beginner's.\n" +"ADVANCED level -> full functionality.\n" +"\n" +"The choice here will influence the parameters in\n" +"the Selected Tab for all kinds of FlatCAM objects." + +#: flatcamGUI/PreferencesUI.py:1646 flatcamGUI/PreferencesUI.py:3041 +#: flatcamObjects/FlatCAMExcellon.py:614 flatcamObjects/FlatCAMGeometry.py:485 +#: flatcamObjects/FlatCAMGerber.py:250 +msgid "Basic" +msgstr "Basic" + +#: flatcamGUI/PreferencesUI.py:1647 flatcamObjects/FlatCAMExcellon.py:627 +#: flatcamObjects/FlatCAMGeometry.py:506 flatcamObjects/FlatCAMGerber.py:277 +msgid "Advanced" +msgstr "Advanced" + +#: flatcamGUI/PreferencesUI.py:1653 +msgid "Portable app" +msgstr "Portable app" + +#: flatcamGUI/PreferencesUI.py:1654 +msgid "" +"Choose if the application should run as portable.\n" +"\n" +"If Checked the application will run portable,\n" +"which means that the preferences files will be saved\n" +"in the application folder, in the lib\\config subfolder." +msgstr "" +"Choose if the application should run as portable.\n" +"\n" +"If Checked the application will run portable,\n" +"which means that the preferences files will be saved\n" +"in the application folder, in the lib\\config subfolder." + +#: flatcamGUI/PreferencesUI.py:1667 +msgid "Languages" +msgstr "Languages" + +#: flatcamGUI/PreferencesUI.py:1668 +msgid "Set the language used throughout FlatCAM." +msgstr "Set the language used throughout FlatCAM." + +#: flatcamGUI/PreferencesUI.py:1674 +msgid "Apply Language" +msgstr "Apply Language" + +#: flatcamGUI/PreferencesUI.py:1675 +msgid "" +"Set the language used throughout FlatCAM.\n" +"The app will restart after click." +msgstr "" +"Set the language used throughout FlatCAM.\n" +"The app will restart after click." + +#: flatcamGUI/PreferencesUI.py:1689 +msgid "Startup Settings" +msgstr "Startup Settings" + +#: flatcamGUI/PreferencesUI.py:1693 +msgid "Splash Screen" +msgstr "Splash Screen" + +#: flatcamGUI/PreferencesUI.py:1695 +msgid "Enable display of the splash screen at application startup." +msgstr "Enable display of the splash screen at application startup." + +#: flatcamGUI/PreferencesUI.py:1707 +msgid "Sys Tray Icon" +msgstr "Sys Tray Icon" + +#: flatcamGUI/PreferencesUI.py:1709 +msgid "Enable display of FlatCAM icon in Sys Tray." +msgstr "Enable display of FlatCAM icon in Sys Tray." + +#: flatcamGUI/PreferencesUI.py:1714 +msgid "Show Shell" +msgstr "Show Shell" + +#: flatcamGUI/PreferencesUI.py:1716 +msgid "" +"Check this box if you want the shell to\n" +"start automatically at startup." +msgstr "" +"Check this box if you want the shell to\n" +"start automatically at startup." + +#: flatcamGUI/PreferencesUI.py:1723 +msgid "Show Project" +msgstr "Show Project" + +#: flatcamGUI/PreferencesUI.py:1725 +msgid "" +"Check this box if you want the project/selected/tool tab area to\n" +"to be shown automatically at startup." +msgstr "" +"Check this box if you want the project/selected/tool tab area to\n" +"to be shown automatically at startup." + +#: flatcamGUI/PreferencesUI.py:1731 +msgid "Version Check" +msgstr "Version Check" + +#: flatcamGUI/PreferencesUI.py:1733 +msgid "" +"Check this box if you want to check\n" +"for a new version automatically at startup." +msgstr "" +"Check this box if you want to check\n" +"for a new version automatically at startup." + +#: flatcamGUI/PreferencesUI.py:1740 +msgid "Send Statistics" +msgstr "Send Statistics" + +#: flatcamGUI/PreferencesUI.py:1742 +msgid "" +"Check this box if you agree to send anonymous\n" +"stats automatically at startup, to help improve FlatCAM." +msgstr "" +"Check this box if you agree to send anonymous\n" +"stats automatically at startup, to help improve FlatCAM." + +#: flatcamGUI/PreferencesUI.py:1756 +msgid "Workers number" +msgstr "Workers number" + +#: flatcamGUI/PreferencesUI.py:1758 +msgid "" +"The number of Qthreads made available to the App.\n" +"A bigger number may finish the jobs more quickly but\n" +"depending on your computer speed, may make the App\n" +"unresponsive. Can have a value between 2 and 16.\n" +"Default value is 2.\n" +"After change, it will be applied at next App start." +msgstr "" +"The number of Qthreads made available to the App.\n" +"A bigger number may finish the jobs more quickly but\n" +"depending on your computer speed, may make the App\n" +"unresponsive. Can have a value between 2 and 16.\n" +"Default value is 2.\n" +"After change, it will be applied at next App start." + +#: flatcamGUI/PreferencesUI.py:1772 +msgid "Geo Tolerance" +msgstr "Geo Tolerance" + +#: flatcamGUI/PreferencesUI.py:1774 +msgid "" +"This value can counter the effect of the Circle Steps\n" +"parameter. Default value is 0.005.\n" +"A lower value will increase the detail both in image\n" +"and in Gcode for the circles, with a higher cost in\n" +"performance. Higher value will provide more\n" +"performance at the expense of level of detail." +msgstr "" +"This value can counter the effect of the Circle Steps\n" +"parameter. Default value is 0.005.\n" +"A lower value will increase the detail both in image\n" +"and in Gcode for the circles, with a higher cost in\n" +"performance. Higher value will provide more\n" +"performance at the expense of level of detail." + +#: flatcamGUI/PreferencesUI.py:1794 +msgid "Save Settings" +msgstr "Save Settings" + +#: flatcamGUI/PreferencesUI.py:1798 +msgid "Save Compressed Project" +msgstr "Save Compressed Project" + +#: flatcamGUI/PreferencesUI.py:1800 +msgid "" +"Whether to save a compressed or uncompressed project.\n" +"When checked it will save a compressed FlatCAM project." +msgstr "" +"Whether to save a compressed or uncompressed project.\n" +"When checked it will save a compressed FlatCAM project." + +#: flatcamGUI/PreferencesUI.py:1809 +msgid "Compression" +msgstr "Compression" + +#: flatcamGUI/PreferencesUI.py:1811 +msgid "" +"The level of compression used when saving\n" +"a FlatCAM project. Higher value means better compression\n" +"but require more RAM usage and more processing time." +msgstr "" +"The level of compression used when saving\n" +"a FlatCAM project. Higher value means better compression\n" +"but require more RAM usage and more processing time." + +#: flatcamGUI/PreferencesUI.py:1822 +msgid "Enable Auto Save" +msgstr "Enable Auto Save" + +#: flatcamGUI/PreferencesUI.py:1824 +msgid "" +"Check to enable the autosave feature.\n" +"When enabled, the application will try to save a project\n" +"at the set interval." +msgstr "" +"Check to enable the autosave feature.\n" +"When enabled, the application will try to save a project\n" +"at the set interval." + +#: flatcamGUI/PreferencesUI.py:1834 +msgid "Interval" +msgstr "Interval" + +#: flatcamGUI/PreferencesUI.py:1836 +msgid "" +"Time interval for autosaving. In milliseconds.\n" +"The application will try to save periodically but only\n" +"if the project was saved manually at least once.\n" +"While active, some operations may block this feature." +msgstr "" +"Time interval for autosaving. In milliseconds.\n" +"The application will try to save periodically but only\n" +"if the project was saved manually at least once.\n" +"While active, some operations may block this feature." + +#: flatcamGUI/PreferencesUI.py:1852 +msgid "Text to PDF parameters" +msgstr "Text to PDF parameters" + +#: flatcamGUI/PreferencesUI.py:1854 +msgid "Used when saving text in Code Editor or in FlatCAM Document objects." +msgstr "Used when saving text in Code Editor or in FlatCAM Document objects." + +#: flatcamGUI/PreferencesUI.py:1863 +msgid "Top Margin" +msgstr "Top Margin" + +#: flatcamGUI/PreferencesUI.py:1865 +msgid "Distance between text body and the top of the PDF file." +msgstr "Distance between text body and the top of the PDF file." + +#: flatcamGUI/PreferencesUI.py:1876 +msgid "Bottom Margin" +msgstr "Bottom Margin" + +#: flatcamGUI/PreferencesUI.py:1878 +msgid "Distance between text body and the bottom of the PDF file." +msgstr "Distance between text body and the bottom of the PDF file." + +#: flatcamGUI/PreferencesUI.py:1889 +msgid "Left Margin" +msgstr "Left Margin" + +#: flatcamGUI/PreferencesUI.py:1891 +msgid "Distance between text body and the left of the PDF file." +msgstr "Distance between text body and the left of the PDF file." + +#: flatcamGUI/PreferencesUI.py:1902 +msgid "Right Margin" +msgstr "Right Margin" + +#: flatcamGUI/PreferencesUI.py:1904 +msgid "Distance between text body and the right of the PDF file." +msgstr "Distance between text body and the right of the PDF file." + +#: flatcamGUI/PreferencesUI.py:1936 +msgid "Gerber General" +msgstr "Gerber General" + +#: flatcamGUI/PreferencesUI.py:1954 +msgid "M-Color" +msgstr "M-Color" + +#: flatcamGUI/PreferencesUI.py:1968 flatcamGUI/PreferencesUI.py:4137 +#: flatcamGUI/PreferencesUI.py:4735 flatcamGUI/PreferencesUI.py:7654 +msgid "Circle Steps" +msgstr "Circle Steps" + +#: flatcamGUI/PreferencesUI.py:1970 +msgid "" +"The number of circle steps for Gerber \n" +"circular aperture linear approximation." +msgstr "" +"The number of circle steps for Gerber \n" +"circular aperture linear approximation." + +#: flatcamGUI/PreferencesUI.py:1982 +msgid "Default Values" +msgstr "Default Values" + +#: flatcamGUI/PreferencesUI.py:1984 +msgid "" +"Those values will be used as fallback values\n" +"in case that they are not found in the Gerber file." +msgstr "" +"Those values will be used as fallback values\n" +"in case that they are not found in the Gerber file." + +#: flatcamGUI/PreferencesUI.py:1993 flatcamGUI/PreferencesUI.py:1999 +#: flatcamGUI/PreferencesUI.py:2541 flatcamGUI/PreferencesUI.py:2547 +msgid "The units used in the Gerber file." +msgstr "The units used in the Gerber file." + +#: flatcamGUI/PreferencesUI.py:1996 flatcamGUI/PreferencesUI.py:2544 +#: flatcamGUI/PreferencesUI.py:2910 flatcamGUI/PreferencesUI.py:2996 +#: flatcamGUI/PreferencesUI.py:3700 flatcamTools/ToolCalculators.py:61 +#: flatcamTools/ToolPcbWizard.py:125 +msgid "INCH" +msgstr "INCH" + +#: flatcamGUI/PreferencesUI.py:2006 flatcamGUI/PreferencesUI.py:2593 +#: flatcamGUI/PreferencesUI.py:2968 flatcamGUI/PreferencesUI.py:3768 +msgid "Zeros" +msgstr "Zeros" + +#: flatcamGUI/PreferencesUI.py:2009 flatcamGUI/PreferencesUI.py:2019 +#: flatcamGUI/PreferencesUI.py:2596 flatcamGUI/PreferencesUI.py:2606 +msgid "" +"This sets the type of Gerber zeros.\n" +"If LZ then Leading Zeros are removed and\n" +"Trailing Zeros are kept.\n" +"If TZ is checked then Trailing Zeros are removed\n" +"and Leading Zeros are kept." +msgstr "" +"This sets the type of Gerber zeros.\n" +"If LZ then Leading Zeros are removed and\n" +"Trailing Zeros are kept.\n" +"If TZ is checked then Trailing Zeros are removed\n" +"and Leading Zeros are kept." + +#: flatcamGUI/PreferencesUI.py:2016 flatcamGUI/PreferencesUI.py:2603 +#: flatcamGUI/PreferencesUI.py:2981 flatcamGUI/PreferencesUI.py:3778 +#: flatcamTools/ToolPcbWizard.py:111 +msgid "LZ" +msgstr "LZ" + +#: flatcamGUI/PreferencesUI.py:2017 flatcamGUI/PreferencesUI.py:2604 +#: flatcamGUI/PreferencesUI.py:2982 flatcamGUI/PreferencesUI.py:3779 +#: flatcamTools/ToolPcbWizard.py:112 +msgid "TZ" +msgstr "TZ" + +#: flatcamGUI/PreferencesUI.py:2035 +msgid "Clean Apertures" +msgstr "Clean Apertures" + +#: flatcamGUI/PreferencesUI.py:2037 +msgid "" +"Will remove apertures that do not have geometry\n" +"thus lowering the number of apertures in the Gerber object." +msgstr "" +"Will remove apertures that do not have geometry\n" +"thus lowering the number of apertures in the Gerber object." + +#: flatcamGUI/PreferencesUI.py:2043 +msgid "Polarity change buffer" +msgstr "Polarity change buffer" + +#: flatcamGUI/PreferencesUI.py:2045 +msgid "" +"Will apply extra buffering for the\n" +"solid geometry when we have polarity changes.\n" +"May help loading Gerber files that otherwise\n" +"do not load correctly." +msgstr "" +"Will apply extra buffering for the\n" +"solid geometry when we have polarity changes.\n" +"May help loading Gerber files that otherwise\n" +"do not load correctly." + +#: flatcamGUI/PreferencesUI.py:2058 +msgid "Gerber Object Color" +msgstr "Gerber Object Color" + +#: flatcamGUI/PreferencesUI.py:2064 flatcamGUI/PreferencesUI.py:3087 +#: flatcamGUI/PreferencesUI.py:4176 +msgid "Set the line color for plotted objects." +msgstr "Set the line color for plotted objects." + +#: flatcamGUI/PreferencesUI.py:2081 flatcamGUI/PreferencesUI.py:3104 +#: flatcamGUI/PreferencesUI.py:4846 flatcamGUI/PreferencesUI.py:4912 +msgid "" +"Set the fill color for plotted objects.\n" +"First 6 digits are the color and the last 2\n" +"digits are for alpha (transparency) level." +msgstr "" +"Set the fill color for plotted objects.\n" +"First 6 digits are the color and the last 2\n" +"digits are for alpha (transparency) level." + +#: flatcamGUI/PreferencesUI.py:2100 flatcamGUI/PreferencesUI.py:3123 +#: flatcamGUI/PreferencesUI.py:4865 +msgid "Set the fill transparency for plotted objects." +msgstr "Set the fill transparency for plotted objects." + +#: flatcamGUI/PreferencesUI.py:2191 +msgid "Gerber Options" +msgstr "Gerber Options" + +#: flatcamGUI/PreferencesUI.py:2269 +msgid "Combine Passes" +msgstr "Combine Passes" + +#: flatcamGUI/PreferencesUI.py:2357 +msgid "Gerber Adv. Options" +msgstr "Gerber Adv. Options" + +#: flatcamGUI/PreferencesUI.py:2361 flatcamGUI/PreferencesUI.py:3551 +#: flatcamGUI/PreferencesUI.py:4472 +msgid "Advanced Options" +msgstr "Advanced Options" + +#: flatcamGUI/PreferencesUI.py:2363 +msgid "" +"A list of Gerber advanced parameters.\n" +"Those parameters are available only for\n" +"Advanced App. Level." +msgstr "" +"A list of Gerber advanced parameters.\n" +"Those parameters are available only for\n" +"Advanced App. Level." + +#: flatcamGUI/PreferencesUI.py:2382 +msgid "Table Show/Hide" +msgstr "Table Show/Hide" + +#: flatcamGUI/PreferencesUI.py:2384 +msgid "" +"Toggle the display of the Gerber Apertures Table.\n" +"Also, on hide, it will delete all mark shapes\n" +"that are drawn on canvas." +msgstr "" +"Toggle the display of the Gerber Apertures Table.\n" +"Also, on hide, it will delete all mark shapes\n" +"that are drawn on canvas." + +#: flatcamGUI/PreferencesUI.py:2464 +msgid "Exterior" +msgstr "Exterior" + +#: flatcamGUI/PreferencesUI.py:2465 +msgid "Interior" +msgstr "Interior" + +#: flatcamGUI/PreferencesUI.py:2478 +msgid "" +"Buffering type:\n" +"- None --> best performance, fast file loading but no so good display\n" +"- Full --> slow file loading but good visuals. This is the default.\n" +"<>: Don't change this unless you know what you are doing !!!" +msgstr "" +"Buffering type:\n" +"- None --> best performance, fast file loading but no so good display\n" +"- Full --> slow file loading but good visuals. This is the default.\n" +"<>: Don't change this unless you know what you are doing !!!" + +#: flatcamGUI/PreferencesUI.py:2483 flatcamGUI/PreferencesUI.py:6340 +#: flatcamGUI/PreferencesUI.py:7952 flatcamTools/ToolFiducials.py:201 +#: flatcamTools/ToolFilm.py:255 flatcamTools/ToolProperties.py:452 +#: flatcamTools/ToolProperties.py:455 flatcamTools/ToolProperties.py:458 +#: flatcamTools/ToolProperties.py:483 +msgid "None" +msgstr "None" + +#: flatcamGUI/PreferencesUI.py:2489 +msgid "Simplify" +msgstr "Simplify" + +#: flatcamGUI/PreferencesUI.py:2491 +msgid "" +"When checked all the Gerber polygons will be\n" +"loaded with simplification having a set tolerance.\n" +"<>: Don't change this unless you know what you are doing !!!" +msgstr "" +"When checked all the Gerber polygons will be\n" +"loaded with simplification having a set tolerance.\n" +"<>: Don't change this unless you know what you are doing !!!" + +#: flatcamGUI/PreferencesUI.py:2498 +msgid "Tolerance" +msgstr "Tolerance" + +#: flatcamGUI/PreferencesUI.py:2499 +msgid "Tolerance for polygon simplification." +msgstr "Tolerance for polygon simplification." + +#: flatcamGUI/PreferencesUI.py:2524 +msgid "Gerber Export" +msgstr "Gerber Export" + +#: flatcamGUI/PreferencesUI.py:2528 flatcamGUI/PreferencesUI.py:3684 +msgid "Export Options" +msgstr "Export Options" + +#: flatcamGUI/PreferencesUI.py:2530 +msgid "" +"The parameters set here are used in the file exported\n" +"when using the File -> Export -> Export Gerber menu entry." +msgstr "" +"The parameters set here are used in the file exported\n" +"when using the File -> Export -> Export Gerber menu entry." + +#: flatcamGUI/PreferencesUI.py:2553 flatcamGUI/PreferencesUI.py:3709 +msgid "Int/Decimals" +msgstr "Int/Decimals" + +#: flatcamGUI/PreferencesUI.py:2555 +msgid "" +"The number of digits in the whole part of the number\n" +"and in the fractional part of the number." +msgstr "" +"The number of digits in the whole part of the number\n" +"and in the fractional part of the number." + +#: flatcamGUI/PreferencesUI.py:2568 +msgid "" +"This numbers signify the number of digits in\n" +"the whole part of Gerber coordinates." +msgstr "" +"This numbers signify the number of digits in\n" +"the whole part of Gerber coordinates." + +#: flatcamGUI/PreferencesUI.py:2584 +msgid "" +"This numbers signify the number of digits in\n" +"the decimal part of Gerber coordinates." +msgstr "" +"This numbers signify the number of digits in\n" +"the decimal part of Gerber coordinates." + +#: flatcamGUI/PreferencesUI.py:2629 +msgid "A list of Gerber Editor parameters." +msgstr "A list of Gerber Editor parameters." + +#: flatcamGUI/PreferencesUI.py:2637 flatcamGUI/PreferencesUI.py:3843 +#: flatcamGUI/PreferencesUI.py:4650 flatcamGUI/PreferencesUI.py:7615 +msgid "Selection limit" +msgstr "Selection limit" + +#: flatcamGUI/PreferencesUI.py:2639 +msgid "" +"Set the number of selected Gerber geometry\n" +"items above which the utility geometry\n" +"becomes just a selection rectangle.\n" +"Increases the performance when moving a\n" +"large number of geometric elements." +msgstr "" +"Set the number of selected Gerber geometry\n" +"items above which the utility geometry\n" +"becomes just a selection rectangle.\n" +"Increases the performance when moving a\n" +"large number of geometric elements." + +#: flatcamGUI/PreferencesUI.py:2652 +msgid "New Aperture code" +msgstr "New Aperture code" + +#: flatcamGUI/PreferencesUI.py:2665 +msgid "New Aperture size" +msgstr "New Aperture size" + +#: flatcamGUI/PreferencesUI.py:2667 +msgid "Size for the new aperture" +msgstr "Size for the new aperture" + +#: flatcamGUI/PreferencesUI.py:2678 +msgid "New Aperture type" +msgstr "New Aperture type" + +#: flatcamGUI/PreferencesUI.py:2680 +msgid "" +"Type for the new aperture.\n" +"Can be 'C', 'R' or 'O'." +msgstr "" +"Type for the new aperture.\n" +"Can be 'C', 'R' or 'O'." + +#: flatcamGUI/PreferencesUI.py:2702 +msgid "Aperture Dimensions" +msgstr "Aperture Dimensions" + +#: flatcamGUI/PreferencesUI.py:2704 flatcamGUI/PreferencesUI.py:4155 +#: flatcamGUI/PreferencesUI.py:5322 flatcamGUI/PreferencesUI.py:5889 +#: flatcamGUI/PreferencesUI.py:6955 +msgid "" +"Diameters of the tools, separated by comma.\n" +"The value of the diameter has to use the dot decimals separator.\n" +"Valid values: 0.3, 1.0" +msgstr "" +"Diameters of the tools, separated by comma.\n" +"The value of the diameter has to use the dot decimals separator.\n" +"Valid values: 0.3, 1.0" + +#: flatcamGUI/PreferencesUI.py:2712 +msgid "Linear Pad Array" +msgstr "Linear Pad Array" + +#: flatcamGUI/PreferencesUI.py:2716 flatcamGUI/PreferencesUI.py:3887 +#: flatcamGUI/PreferencesUI.py:4035 +msgid "Linear Direction" +msgstr "Linear Direction" + +#: flatcamGUI/PreferencesUI.py:2756 +msgid "Circular Pad Array" +msgstr "Circular Pad Array" + +#: flatcamGUI/PreferencesUI.py:2760 flatcamGUI/PreferencesUI.py:3933 +#: flatcamGUI/PreferencesUI.py:4083 +msgid "Circular Direction" +msgstr "Circular Direction" + +#: flatcamGUI/PreferencesUI.py:2762 flatcamGUI/PreferencesUI.py:3935 +#: flatcamGUI/PreferencesUI.py:4085 +msgid "" +"Direction for circular array.\n" +"Can be CW = clockwise or CCW = counter clockwise." +msgstr "" +"Direction for circular array.\n" +"Can be CW = clockwise or CCW = counter clockwise." + +#: flatcamGUI/PreferencesUI.py:2773 flatcamGUI/PreferencesUI.py:3946 +#: flatcamGUI/PreferencesUI.py:4096 +msgid "Circular Angle" +msgstr "Circular Angle" + +#: flatcamGUI/PreferencesUI.py:2792 +msgid "Distance at which to buffer the Gerber element." +msgstr "Distance at which to buffer the Gerber element." + +#: flatcamGUI/PreferencesUI.py:2801 +msgid "Scale Tool" +msgstr "Scale Tool" + +#: flatcamGUI/PreferencesUI.py:2807 +msgid "Factor to scale the Gerber element." +msgstr "Factor to scale the Gerber element." + +#: flatcamGUI/PreferencesUI.py:2820 +msgid "Threshold low" +msgstr "Threshold low" + +#: flatcamGUI/PreferencesUI.py:2822 +msgid "Threshold value under which the apertures are not marked." +msgstr "Threshold value under which the apertures are not marked." + +#: flatcamGUI/PreferencesUI.py:2832 +msgid "Threshold high" +msgstr "Threshold high" + +#: flatcamGUI/PreferencesUI.py:2834 +msgid "Threshold value over which the apertures are not marked." +msgstr "Threshold value over which the apertures are not marked." + +#: flatcamGUI/PreferencesUI.py:2852 +msgid "Excellon General" +msgstr "Excellon General" + +#: flatcamGUI/PreferencesUI.py:2885 +msgid "Excellon Format" +msgstr "Excellon Format" + +#: flatcamGUI/PreferencesUI.py:2887 +msgid "" +"The NC drill files, usually named Excellon files\n" +"are files that can be found in different formats.\n" +"Here we set the format used when the provided\n" +"coordinates are not using period.\n" +"\n" +"Possible presets:\n" +"\n" +"PROTEUS 3:3 MM LZ\n" +"DipTrace 5:2 MM TZ\n" +"DipTrace 4:3 MM LZ\n" +"\n" +"EAGLE 3:3 MM TZ\n" +"EAGLE 4:3 MM TZ\n" +"EAGLE 2:5 INCH TZ\n" +"EAGLE 3:5 INCH TZ\n" +"\n" +"ALTIUM 2:4 INCH LZ\n" +"Sprint Layout 2:4 INCH LZ\n" +"KiCAD 3:5 INCH TZ" +msgstr "" +"The NC drill files, usually named Excellon files\n" +"are files that can be found in different formats.\n" +"Here we set the format used when the provided\n" +"coordinates are not using period.\n" +"\n" +"Possible presets:\n" +"\n" +"PROTEUS 3:3 MM LZ\n" +"DipTrace 5:2 MM TZ\n" +"DipTrace 4:3 MM LZ\n" +"\n" +"EAGLE 3:3 MM TZ\n" +"EAGLE 4:3 MM TZ\n" +"EAGLE 2:5 INCH TZ\n" +"EAGLE 3:5 INCH TZ\n" +"\n" +"ALTIUM 2:4 INCH LZ\n" +"Sprint Layout 2:4 INCH LZ\n" +"KiCAD 3:5 INCH TZ" + +#: flatcamGUI/PreferencesUI.py:2911 +msgid "Default values for INCH are 2:4" +msgstr "Default values for INCH are 2:4" + +#: flatcamGUI/PreferencesUI.py:2918 flatcamGUI/PreferencesUI.py:2947 +#: flatcamGUI/PreferencesUI.py:3723 +msgid "" +"This numbers signify the number of digits in\n" +"the whole part of Excellon coordinates." +msgstr "" +"This numbers signify the number of digits in\n" +"the whole part of Excellon coordinates." + +#: flatcamGUI/PreferencesUI.py:2931 flatcamGUI/PreferencesUI.py:2960 +#: flatcamGUI/PreferencesUI.py:3736 +msgid "" +"This numbers signify the number of digits in\n" +"the decimal part of Excellon coordinates." +msgstr "" +"This numbers signify the number of digits in\n" +"the decimal part of Excellon coordinates." + +#: flatcamGUI/PreferencesUI.py:2939 +msgid "METRIC" +msgstr "METRIC" + +#: flatcamGUI/PreferencesUI.py:2940 +msgid "Default values for METRIC are 3:3" +msgstr "Default values for METRIC are 3:3" + +#: flatcamGUI/PreferencesUI.py:2971 +msgid "" +"This sets the type of Excellon zeros.\n" +"If LZ then Leading Zeros are kept and\n" +"Trailing Zeros are removed.\n" +"If TZ is checked then Trailing Zeros are kept\n" +"and Leading Zeros are removed.\n" +"\n" +"This is used when there is no information\n" +"stored in the Excellon file." +msgstr "" +"This sets the type of Excellon zeros.\n" +"If LZ then Leading Zeros are kept and\n" +"Trailing Zeros are removed.\n" +"If TZ is checked then Trailing Zeros are kept\n" +"and Leading Zeros are removed.\n" +"\n" +"This is used when there is no information\n" +"stored in the Excellon file." + +#: flatcamGUI/PreferencesUI.py:2989 +msgid "" +"This sets the default units of Excellon files.\n" +"If it is not detected in the parsed file the value here\n" +"will be used.Some Excellon files don't have an header\n" +"therefore this parameter will be used." +msgstr "" +"This sets the default units of Excellon files.\n" +"If it is not detected in the parsed file the value here\n" +"will be used.Some Excellon files don't have an header\n" +"therefore this parameter will be used." + +#: flatcamGUI/PreferencesUI.py:2999 +msgid "" +"This sets the units of Excellon files.\n" +"Some Excellon files don't have an header\n" +"therefore this parameter will be used." +msgstr "" +"This sets the units of Excellon files.\n" +"Some Excellon files don't have an header\n" +"therefore this parameter will be used." + +#: flatcamGUI/PreferencesUI.py:3007 +msgid "Update Export settings" +msgstr "Update Export settings" + +#: flatcamGUI/PreferencesUI.py:3024 +msgid "Excellon Optimization" +msgstr "Excellon Optimization" + +#: flatcamGUI/PreferencesUI.py:3027 +msgid "Algorithm:" +msgstr "Algorithm:" + +#: flatcamGUI/PreferencesUI.py:3029 flatcamGUI/PreferencesUI.py:3045 +msgid "" +"This sets the optimization type for the Excellon drill path.\n" +"If <> is checked then Google OR-Tools algorithm with\n" +"MetaHeuristic Guided Local Path is used. Default search time is 3sec.\n" +"If <> is checked then Google OR-Tools Basic algorithm is used.\n" +"If <> is checked then Travelling Salesman algorithm is used for\n" +"drill path optimization.\n" +"\n" +"If this control is disabled, then FlatCAM works in 32bit mode and it uses\n" +"Travelling Salesman algorithm for path optimization." +msgstr "" +"This sets the optimization type for the Excellon drill path.\n" +"If <> is checked then Google OR-Tools algorithm with\n" +"MetaHeuristic Guided Local Path is used. Default search time is 3sec.\n" +"If <> is checked then Google OR-Tools Basic algorithm is used.\n" +"If <> is checked then Travelling Salesman algorithm is used for\n" +"drill path optimization.\n" +"\n" +"If this control is disabled, then FlatCAM works in 32bit mode and it uses\n" +"Travelling Salesman algorithm for path optimization." + +#: flatcamGUI/PreferencesUI.py:3040 +msgid "MetaHeuristic" +msgstr "MetaHeuristic" + +#: flatcamGUI/PreferencesUI.py:3042 +msgid "TSA" +msgstr "TSA" + +#: flatcamGUI/PreferencesUI.py:3059 flatcamGUI/PreferencesUI.py:3463 +#: flatcamGUI/PreferencesUI.py:4430 +msgid "Duration" +msgstr "Duration" + +#: flatcamGUI/PreferencesUI.py:3062 +msgid "" +"When OR-Tools Metaheuristic (MH) is enabled there is a\n" +"maximum threshold for how much time is spent doing the\n" +"path optimization. This max duration is set here.\n" +"In seconds." +msgstr "" +"When OR-Tools Metaheuristic (MH) is enabled there is a\n" +"maximum threshold for how much time is spent doing the\n" +"path optimization. This max duration is set here.\n" +"In seconds." + +#: flatcamGUI/PreferencesUI.py:3081 +msgid "Excellon Object Color" +msgstr "Excellon Object Color" + +#: flatcamGUI/PreferencesUI.py:3247 +msgid "Excellon Options" +msgstr "Excellon Options" + +#: flatcamGUI/PreferencesUI.py:3251 flatcamGUI/PreferencesUI.py:4227 +msgid "Create CNC Job" +msgstr "Create CNC Job" + +#: flatcamGUI/PreferencesUI.py:3253 +msgid "" +"Parameters used to create a CNC Job object\n" +"for this drill object." +msgstr "" +"Parameters used to create a CNC Job object\n" +"for this drill object." + +#: flatcamGUI/PreferencesUI.py:3370 flatcamGUI/PreferencesUI.py:4314 +msgid "Tool change" +msgstr "Tool change" + +#: flatcamGUI/PreferencesUI.py:3454 flatcamGUI/PreferencesUI.py:4425 +msgid "Enable Dwell" +msgstr "Enable Dwell" + +#: flatcamGUI/PreferencesUI.py:3477 +msgid "" +"The preprocessor JSON file that dictates\n" +"Gcode output." +msgstr "" +"The preprocessor JSON file that dictates\n" +"Gcode output." + +#: flatcamGUI/PreferencesUI.py:3488 +msgid "Gcode" +msgstr "Gcode" + +#: flatcamGUI/PreferencesUI.py:3490 +msgid "" +"Choose what to use for GCode generation:\n" +"'Drills', 'Slots' or 'Both'.\n" +"When choosing 'Slots' or 'Both', slots will be\n" +"converted to drills." +msgstr "" +"Choose what to use for GCode generation:\n" +"'Drills', 'Slots' or 'Both'.\n" +"When choosing 'Slots' or 'Both', slots will be\n" +"converted to drills." + +#: flatcamGUI/PreferencesUI.py:3506 +msgid "Mill Holes" +msgstr "Mill Holes" + +#: flatcamGUI/PreferencesUI.py:3508 +msgid "Create Geometry for milling holes." +msgstr "Create Geometry for milling holes." + +#: flatcamGUI/PreferencesUI.py:3512 +msgid "Drill Tool dia" +msgstr "Drill Tool dia" + +#: flatcamGUI/PreferencesUI.py:3523 +msgid "Slot Tool dia" +msgstr "Slot Tool dia" + +#: flatcamGUI/PreferencesUI.py:3525 +msgid "" +"Diameter of the cutting tool\n" +"when milling slots." +msgstr "" +"Diameter of the cutting tool\n" +"when milling slots." + +#: flatcamGUI/PreferencesUI.py:3544 +msgid "Excellon Adv. Options" +msgstr "Excellon Adv. Options" + +#: flatcamGUI/PreferencesUI.py:3553 +msgid "" +"A list of Excellon advanced parameters.\n" +"Those parameters are available only for\n" +"Advanced App. Level." +msgstr "" +"A list of Excellon advanced parameters.\n" +"Those parameters are available only for\n" +"Advanced App. Level." + +#: flatcamGUI/PreferencesUI.py:3576 +msgid "Toolchange X,Y" +msgstr "Toolchange X,Y" + +#: flatcamGUI/PreferencesUI.py:3578 flatcamGUI/PreferencesUI.py:4486 +msgid "Toolchange X,Y position." +msgstr "Toolchange X,Y position." + +#: flatcamGUI/PreferencesUI.py:3638 flatcamGUI/PreferencesUI.py:4573 +msgid "Spindle direction" +msgstr "Spindle direction" + +#: flatcamGUI/PreferencesUI.py:3640 flatcamGUI/PreferencesUI.py:4575 +msgid "" +"This sets the direction that the spindle is rotating.\n" +"It can be either:\n" +"- CW = clockwise or\n" +"- CCW = counter clockwise" +msgstr "" +"This sets the direction that the spindle is rotating.\n" +"It can be either:\n" +"- CW = clockwise or\n" +"- CCW = counter clockwise" + +#: flatcamGUI/PreferencesUI.py:3651 flatcamGUI/PreferencesUI.py:4587 +msgid "Fast Plunge" +msgstr "Fast Plunge" + +#: flatcamGUI/PreferencesUI.py:3653 flatcamGUI/PreferencesUI.py:4589 +msgid "" +"By checking this, the vertical move from\n" +"Z_Toolchange to Z_move is done with G0,\n" +"meaning the fastest speed available.\n" +"WARNING: the move is done at Toolchange X,Y coords." +msgstr "" +"By checking this, the vertical move from\n" +"Z_Toolchange to Z_move is done with G0,\n" +"meaning the fastest speed available.\n" +"WARNING: the move is done at Toolchange X,Y coords." + +#: flatcamGUI/PreferencesUI.py:3660 +msgid "Fast Retract" +msgstr "Fast Retract" + +#: flatcamGUI/PreferencesUI.py:3662 +msgid "" +"Exit hole strategy.\n" +" - When uncheked, while exiting the drilled hole the drill bit\n" +"will travel slow, with set feedrate (G1), up to zero depth and then\n" +"travel as fast as possible (G0) to the Z Move (travel height).\n" +" - When checked the travel from Z cut (cut depth) to Z_move\n" +"(travel height) is done as fast as possible (G0) in one move." +msgstr "" +"Exit hole strategy.\n" +" - When uncheked, while exiting the drilled hole the drill bit\n" +"will travel slow, with set feedrate (G1), up to zero depth and then\n" +"travel as fast as possible (G0) to the Z Move (travel height).\n" +" - When checked the travel from Z cut (cut depth) to Z_move\n" +"(travel height) is done as fast as possible (G0) in one move." + +#: flatcamGUI/PreferencesUI.py:3680 +msgid "Excellon Export" +msgstr "Excellon Export" + +#: flatcamGUI/PreferencesUI.py:3686 +msgid "" +"The parameters set here are used in the file exported\n" +"when using the File -> Export -> Export Excellon menu entry." +msgstr "" +"The parameters set here are used in the file exported\n" +"when using the File -> Export -> Export Excellon menu entry." + +#: flatcamGUI/PreferencesUI.py:3697 flatcamGUI/PreferencesUI.py:3703 +msgid "The units used in the Excellon file." +msgstr "The units used in the Excellon file." + +#: flatcamGUI/PreferencesUI.py:3711 +msgid "" +"The NC drill files, usually named Excellon files\n" +"are files that can be found in different formats.\n" +"Here we set the format used when the provided\n" +"coordinates are not using period." +msgstr "" +"The NC drill files, usually named Excellon files\n" +"are files that can be found in different formats.\n" +"Here we set the format used when the provided\n" +"coordinates are not using period." + +#: flatcamGUI/PreferencesUI.py:3745 +msgid "Format" +msgstr "Format" + +#: flatcamGUI/PreferencesUI.py:3747 flatcamGUI/PreferencesUI.py:3757 +msgid "" +"Select the kind of coordinates format used.\n" +"Coordinates can be saved with decimal point or without.\n" +"When there is no decimal point, it is required to specify\n" +"the number of digits for integer part and the number of decimals.\n" +"Also it will have to be specified if LZ = leading zeros are kept\n" +"or TZ = trailing zeros are kept." +msgstr "" +"Select the kind of coordinates format used.\n" +"Coordinates can be saved with decimal point or without.\n" +"When there is no decimal point, it is required to specify\n" +"the number of digits for integer part and the number of decimals.\n" +"Also it will have to be specified if LZ = leading zeros are kept\n" +"or TZ = trailing zeros are kept." + +#: flatcamGUI/PreferencesUI.py:3754 +msgid "Decimal" +msgstr "Decimal" + +#: flatcamGUI/PreferencesUI.py:3755 +msgid "No-Decimal" +msgstr "No-Decimal" + +#: flatcamGUI/PreferencesUI.py:3771 +msgid "" +"This sets the type of Excellon zeros.\n" +"If LZ then Leading Zeros are kept and\n" +"Trailing Zeros are removed.\n" +"If TZ is checked then Trailing Zeros are kept\n" +"and Leading Zeros are removed." +msgstr "" +"This sets the type of Excellon zeros.\n" +"If LZ then Leading Zeros are kept and\n" +"Trailing Zeros are removed.\n" +"If TZ is checked then Trailing Zeros are kept\n" +"and Leading Zeros are removed." + +#: flatcamGUI/PreferencesUI.py:3781 +msgid "" +"This sets the default type of Excellon zeros.\n" +"If LZ then Leading Zeros are kept and\n" +"Trailing Zeros are removed.\n" +"If TZ is checked then Trailing Zeros are kept\n" +"and Leading Zeros are removed." +msgstr "" +"This sets the default type of Excellon zeros.\n" +"If LZ then Leading Zeros are kept and\n" +"Trailing Zeros are removed.\n" +"If TZ is checked then Trailing Zeros are kept\n" +"and Leading Zeros are removed." + +#: flatcamGUI/PreferencesUI.py:3791 +msgid "Slot type" +msgstr "Slot type" + +#: flatcamGUI/PreferencesUI.py:3794 flatcamGUI/PreferencesUI.py:3804 +msgid "" +"This sets how the slots will be exported.\n" +"If ROUTED then the slots will be routed\n" +"using M15/M16 commands.\n" +"If DRILLED(G85) the slots will be exported\n" +"using the Drilled slot command (G85)." +msgstr "" +"This sets how the slots will be exported.\n" +"If ROUTED then the slots will be routed\n" +"using M15/M16 commands.\n" +"If DRILLED(G85) the slots will be exported\n" +"using the Drilled slot command (G85)." + +#: flatcamGUI/PreferencesUI.py:3801 +msgid "Routed" +msgstr "Routed" + +#: flatcamGUI/PreferencesUI.py:3802 +msgid "Drilled(G85)" +msgstr "Drilled(G85)" + +#: flatcamGUI/PreferencesUI.py:3835 +msgid "A list of Excellon Editor parameters." +msgstr "A list of Excellon Editor parameters." + +#: flatcamGUI/PreferencesUI.py:3845 +msgid "" +"Set the number of selected Excellon geometry\n" +"items above which the utility geometry\n" +"becomes just a selection rectangle.\n" +"Increases the performance when moving a\n" +"large number of geometric elements." +msgstr "" +"Set the number of selected Excellon geometry\n" +"items above which the utility geometry\n" +"becomes just a selection rectangle.\n" +"Increases the performance when moving a\n" +"large number of geometric elements." + +#: flatcamGUI/PreferencesUI.py:3858 flatcamGUI/PreferencesUI.py:5396 +#: flatcamGUI/PreferencesUI.py:5962 +msgid "New Dia" +msgstr "New Dia" + +#: flatcamGUI/PreferencesUI.py:3883 +msgid "Linear Drill Array" +msgstr "Linear Drill Array" + +#: flatcamGUI/PreferencesUI.py:3929 +msgid "Circular Drill Array" +msgstr "Circular Drill Array" + +#: flatcamGUI/PreferencesUI.py:3999 +msgid "" +"Angle at which the slot is placed.\n" +"The precision is of max 2 decimals.\n" +"Min value is: -359.99 degrees.\n" +"Max value is: 360.00 degrees." +msgstr "" +"Angle at which the slot is placed.\n" +"The precision is of max 2 decimals.\n" +"Min value is: -359.99 degrees.\n" +"Max value is: 360.00 degrees." + +#: flatcamGUI/PreferencesUI.py:4018 +msgid "Linear Slot Array" +msgstr "Linear Slot Array" + +#: flatcamGUI/PreferencesUI.py:4079 +msgid "Circular Slot Array" +msgstr "Circular Slot Array" + +#: flatcamGUI/PreferencesUI.py:4117 +msgid "Geometry General" +msgstr "Geometry General" + +#: flatcamGUI/PreferencesUI.py:4139 +msgid "" +"The number of circle steps for Geometry \n" +"circle and arc shapes linear approximation." +msgstr "" +"The number of circle steps for Geometry \n" +"circle and arc shapes linear approximation." + +#: flatcamGUI/PreferencesUI.py:4153 flatcamGUI/PreferencesUI.py:5320 +#: flatcamGUI/PreferencesUI.py:5887 flatcamGUI/PreferencesUI.py:6953 +msgid "Tools Dia" +msgstr "Tools Dia" + +#: flatcamGUI/PreferencesUI.py:4170 +msgid "Geometry Object Color" +msgstr "Geometry Object Color" + +#: flatcamGUI/PreferencesUI.py:4221 +msgid "Geometry Options" +msgstr "Geometry Options" + +#: flatcamGUI/PreferencesUI.py:4229 +msgid "" +"Create a CNC Job object\n" +"tracing the contours of this\n" +"Geometry object." +msgstr "" +"Create a CNC Job object\n" +"tracing the contours of this\n" +"Geometry object." + +#: flatcamGUI/PreferencesUI.py:4273 +msgid "Depth/Pass" +msgstr "Depth/Pass" + +#: flatcamGUI/PreferencesUI.py:4275 +msgid "" +"The depth to cut on each pass,\n" +"when multidepth is enabled.\n" +"It has positive value although\n" +"it is a fraction from the depth\n" +"which has negative value." +msgstr "" +"The depth to cut on each pass,\n" +"when multidepth is enabled.\n" +"It has positive value although\n" +"it is a fraction from the depth\n" +"which has negative value." + +#: flatcamGUI/PreferencesUI.py:4466 +msgid "Geometry Adv. Options" +msgstr "Geometry Adv. Options" + +#: flatcamGUI/PreferencesUI.py:4474 +msgid "" +"A list of Geometry advanced parameters.\n" +"Those parameters are available only for\n" +"Advanced App. Level." +msgstr "" +"A list of Geometry advanced parameters.\n" +"Those parameters are available only for\n" +"Advanced App. Level." + +#: flatcamGUI/PreferencesUI.py:4484 flatcamGUI/PreferencesUI.py:7045 +#: flatcamGUI/PreferencesUI.py:8092 flatcamTools/ToolCalibration.py:125 +#: flatcamTools/ToolSolderPaste.py:240 +msgid "Toolchange X-Y" +msgstr "Toolchange X-Y" + +#: flatcamGUI/PreferencesUI.py:4495 +msgid "" +"Height of the tool just after starting the work.\n" +"Delete the value if you don't need this feature." +msgstr "" +"Height of the tool just after starting the work.\n" +"Delete the value if you don't need this feature." + +#: flatcamGUI/PreferencesUI.py:4597 +msgid "Segment X size" +msgstr "Segment X size" + +#: flatcamGUI/PreferencesUI.py:4599 +msgid "" +"The size of the trace segment on the X axis.\n" +"Useful for auto-leveling.\n" +"A value of 0 means no segmentation on the X axis." +msgstr "" +"The size of the trace segment on the X axis.\n" +"Useful for auto-leveling.\n" +"A value of 0 means no segmentation on the X axis." + +#: flatcamGUI/PreferencesUI.py:4613 +msgid "Segment Y size" +msgstr "Segment Y size" + +#: flatcamGUI/PreferencesUI.py:4615 +msgid "" +"The size of the trace segment on the Y axis.\n" +"Useful for auto-leveling.\n" +"A value of 0 means no segmentation on the Y axis." +msgstr "" +"The size of the trace segment on the Y axis.\n" +"Useful for auto-leveling.\n" +"A value of 0 means no segmentation on the Y axis." + +#: flatcamGUI/PreferencesUI.py:4642 +msgid "A list of Geometry Editor parameters." +msgstr "A list of Geometry Editor parameters." + +#: flatcamGUI/PreferencesUI.py:4652 flatcamGUI/PreferencesUI.py:7617 +msgid "" +"Set the number of selected geometry\n" +"items above which the utility geometry\n" +"becomes just a selection rectangle.\n" +"Increases the performance when moving a\n" +"large number of geometric elements." +msgstr "" +"Set the number of selected geometry\n" +"items above which the utility geometry\n" +"becomes just a selection rectangle.\n" +"Increases the performance when moving a\n" +"large number of geometric elements." + +#: flatcamGUI/PreferencesUI.py:4684 +msgid "CNC Job General" +msgstr "CNC Job General" + +#: flatcamGUI/PreferencesUI.py:4737 +msgid "" +"The number of circle steps for GCode \n" +"circle and arc shapes linear approximation." +msgstr "" +"The number of circle steps for GCode \n" +"circle and arc shapes linear approximation." + +#: flatcamGUI/PreferencesUI.py:4746 +msgid "Travel dia" +msgstr "Travel dia" + +#: flatcamGUI/PreferencesUI.py:4748 +msgid "" +"The width of the travel lines to be\n" +"rendered in the plot." +msgstr "" +"The width of the travel lines to be\n" +"rendered in the plot." + +#: flatcamGUI/PreferencesUI.py:4761 +msgid "G-code Decimals" +msgstr "G-code Decimals" + +#: flatcamGUI/PreferencesUI.py:4764 flatcamTools/ToolFiducials.py:74 +msgid "Coordinates" +msgstr "Coordinates" + +#: flatcamGUI/PreferencesUI.py:4766 +msgid "" +"The number of decimals to be used for \n" +"the X, Y, Z coordinates in CNC code (GCODE, etc.)" +msgstr "" +"The number of decimals to be used for \n" +"the X, Y, Z coordinates in CNC code (GCODE, etc.)" + +#: flatcamGUI/PreferencesUI.py:4777 flatcamTools/ToolProperties.py:519 +msgid "Feedrate" +msgstr "Feedrate" + +#: flatcamGUI/PreferencesUI.py:4779 +msgid "" +"The number of decimals to be used for \n" +"the Feedrate parameter in CNC code (GCODE, etc.)" +msgstr "" +"The number of decimals to be used for \n" +"the Feedrate parameter in CNC code (GCODE, etc.)" + +#: flatcamGUI/PreferencesUI.py:4790 +msgid "Coordinates type" +msgstr "Coordinates type" + +#: flatcamGUI/PreferencesUI.py:4792 +msgid "" +"The type of coordinates to be used in Gcode.\n" +"Can be:\n" +"- Absolute G90 -> the reference is the origin x=0, y=0\n" +"- Incremental G91 -> the reference is the previous position" +msgstr "" +"The type of coordinates to be used in Gcode.\n" +"Can be:\n" +"- Absolute G90 -> the reference is the origin x=0, y=0\n" +"- Incremental G91 -> the reference is the previous position" + +#: flatcamGUI/PreferencesUI.py:4798 +msgid "Absolute G90" +msgstr "Absolute G90" + +#: flatcamGUI/PreferencesUI.py:4799 +msgid "Incremental G91" +msgstr "Incremental G91" + +#: flatcamGUI/PreferencesUI.py:4809 +msgid "Force Windows style line-ending" +msgstr "Force Windows style line-ending" + +#: flatcamGUI/PreferencesUI.py:4811 +msgid "" +"When checked will force a Windows style line-ending\n" +"(\\r\\n) on non-Windows OS's." +msgstr "" +"When checked will force a Windows style line-ending\n" +"(\\r\\n) on non-Windows OS's." + +#: flatcamGUI/PreferencesUI.py:4823 +msgid "Travel Line Color" +msgstr "Travel Line Color" + +#: flatcamGUI/PreferencesUI.py:4829 +msgid "Set the travel line color for plotted objects." +msgstr "Set the travel line color for plotted objects." + +#: flatcamGUI/PreferencesUI.py:4889 +msgid "CNCJob Object Color" +msgstr "CNCJob Object Color" + +#: flatcamGUI/PreferencesUI.py:4895 +msgid "Set the color for plotted objects." +msgstr "Set the color for plotted objects." + +#: flatcamGUI/PreferencesUI.py:5055 +msgid "CNC Job Options" +msgstr "CNC Job Options" + +#: flatcamGUI/PreferencesUI.py:5059 +msgid "Export G-Code" +msgstr "Export G-Code" + +#: flatcamGUI/PreferencesUI.py:5075 +msgid "Prepend to G-Code" +msgstr "Prepend to G-Code" + +#: flatcamGUI/PreferencesUI.py:5084 +msgid "" +"Type here any G-Code commands you would like to add at the beginning of the " +"G-Code file." +msgstr "" +"Type here any G-Code commands you would like to add at the beginning of the " +"G-Code file." + +#: flatcamGUI/PreferencesUI.py:5091 +msgid "Append to G-Code" +msgstr "Append to G-Code" + +#: flatcamGUI/PreferencesUI.py:5101 +msgid "" +"Type here any G-Code commands you would like to append to the generated " +"file.\n" +"I.e.: M2 (End of program)" +msgstr "" +"Type here any G-Code commands you would like to append to the generated " +"file.\n" +"I.e.: M2 (End of program)" + +#: flatcamGUI/PreferencesUI.py:5117 +msgid "CNC Job Adv. Options" +msgstr "CNC Job Adv. Options" + +#: flatcamGUI/PreferencesUI.py:5154 +msgid "" +"Type here any G-Code commands you would like to be executed when Toolchange " +"event is encountered.\n" +"This will constitute a Custom Toolchange GCode, or a Toolchange Macro.\n" +"The FlatCAM variables are surrounded by '%' symbol.\n" +"WARNING: it can be used only with a preprocessor file that has " +"'toolchange_custom' in it's name." +msgstr "" +"Type here any G-Code commands you would like to be executed when Toolchange " +"event is encountered.\n" +"This will constitute a Custom Toolchange GCode, or a Toolchange Macro.\n" +"The FlatCAM variables are surrounded by '%' symbol.\n" +"WARNING: it can be used only with a preprocessor file that has " +"'toolchange_custom' in it's name." + +#: flatcamGUI/PreferencesUI.py:5209 +msgid "Z depth for the cut" +msgstr "Z depth for the cut" + +#: flatcamGUI/PreferencesUI.py:5210 +msgid "Z height for travel" +msgstr "Z height for travel" + +#: flatcamGUI/PreferencesUI.py:5216 +msgid "dwelltime = time to dwell to allow the spindle to reach it's set RPM" +msgstr "dwelltime = time to dwell to allow the spindle to reach it's set RPM" + +#: flatcamGUI/PreferencesUI.py:5235 +msgid "Annotation Size" +msgstr "Annotation Size" + +#: flatcamGUI/PreferencesUI.py:5237 +msgid "The font size of the annotation text. In pixels." +msgstr "The font size of the annotation text. In pixels." + +#: flatcamGUI/PreferencesUI.py:5247 +msgid "Annotation Color" +msgstr "Annotation Color" + +#: flatcamGUI/PreferencesUI.py:5249 +msgid "Set the font color for the annotation texts." +msgstr "Set the font color for the annotation texts." + +#: flatcamGUI/PreferencesUI.py:5306 +msgid "NCC Tool Options" +msgstr "NCC Tool Options" + +#: flatcamGUI/PreferencesUI.py:5328 flatcamGUI/PreferencesUI.py:5896 +msgid "Comma separated values" +msgstr "Comma separated values" + +#: flatcamGUI/PreferencesUI.py:5334 flatcamGUI/PreferencesUI.py:5342 +#: flatcamGUI/PreferencesUI.py:5903 flatcamTools/ToolNCC.py:215 +#: flatcamTools/ToolNCC.py:223 flatcamTools/ToolPaint.py:198 +#: flatcamTools/ToolPaint.py:206 +msgid "" +"Default tool type:\n" +"- 'V-shape'\n" +"- Circular" +msgstr "" +"Default tool type:\n" +"- 'V-shape'\n" +"- Circular" + +#: flatcamGUI/PreferencesUI.py:5339 flatcamGUI/PreferencesUI.py:5908 +#: flatcamTools/ToolNCC.py:220 flatcamTools/ToolPaint.py:203 +msgid "V-shape" +msgstr "V-shape" + +#: flatcamGUI/PreferencesUI.py:5379 flatcamGUI/PreferencesUI.py:5388 +#: flatcamGUI/PreferencesUI.py:5946 flatcamGUI/PreferencesUI.py:5955 +#: flatcamTools/ToolNCC.py:262 flatcamTools/ToolNCC.py:271 +#: flatcamTools/ToolPaint.py:245 flatcamTools/ToolPaint.py:254 +msgid "" +"Depth of cut into material. Negative value.\n" +"In FlatCAM units." +msgstr "" +"Depth of cut into material. Negative value.\n" +"In FlatCAM units." + +#: flatcamGUI/PreferencesUI.py:5398 flatcamGUI/PreferencesUI.py:5964 +#: flatcamTools/ToolNCC.py:280 flatcamTools/ToolPaint.py:263 +msgid "" +"Diameter for the new tool to add in the Tool Table.\n" +"If the tool is V-shape type then this value is automatically\n" +"calculated from the other parameters." +msgstr "" +"Diameter for the new tool to add in the Tool Table.\n" +"If the tool is V-shape type then this value is automatically\n" +"calculated from the other parameters." + +#: flatcamGUI/PreferencesUI.py:5435 flatcamGUI/PreferencesUI.py:5981 +#: flatcamTools/ToolNCC.py:174 flatcamTools/ToolPaint.py:158 +msgid "Tool order" +msgstr "Tool order" + +#: flatcamGUI/PreferencesUI.py:5436 flatcamGUI/PreferencesUI.py:5446 +#: flatcamGUI/PreferencesUI.py:5982 flatcamTools/ToolNCC.py:175 +#: flatcamTools/ToolNCC.py:185 flatcamTools/ToolPaint.py:159 +#: flatcamTools/ToolPaint.py:169 +msgid "" +"This set the way that the tools in the tools table are used.\n" +"'No' --> means that the used order is the one in the tool table\n" +"'Forward' --> means that the tools will be ordered from small to big\n" +"'Reverse' --> menas that the tools will ordered from big to small\n" +"\n" +"WARNING: using rest machining will automatically set the order\n" +"in reverse and disable this control." +msgstr "" +"This set the way that the tools in the tools table are used.\n" +"'No' --> means that the used order is the one in the tool table\n" +"'Forward' --> means that the tools will be ordered from small to big\n" +"'Reverse' --> menas that the tools will ordered from big to small\n" +"\n" +"WARNING: using rest machining will automatically set the order\n" +"in reverse and disable this control." + +#: flatcamGUI/PreferencesUI.py:5444 flatcamGUI/PreferencesUI.py:5990 +#: flatcamTools/ToolNCC.py:183 flatcamTools/ToolPaint.py:167 +msgid "Forward" +msgstr "Forward" + +#: flatcamGUI/PreferencesUI.py:5445 flatcamGUI/PreferencesUI.py:5991 +#: flatcamTools/ToolNCC.py:184 flatcamTools/ToolPaint.py:168 +msgid "Reverse" +msgstr "Reverse" + +#: flatcamGUI/PreferencesUI.py:5545 +msgid "Offset value" +msgstr "Offset value" + +#: flatcamGUI/PreferencesUI.py:5547 +msgid "" +"If used, it will add an offset to the copper features.\n" +"The copper clearing will finish to a distance\n" +"from the copper features.\n" +"The value can be between 0.0 and 9999.9 FlatCAM units." +msgstr "" +"If used, it will add an offset to the copper features.\n" +"The copper clearing will finish to a distance\n" +"from the copper features.\n" +"The value can be between 0.0 and 9999.9 FlatCAM units." + +#: flatcamGUI/PreferencesUI.py:5567 flatcamGUI/PreferencesUI.py:6083 +#: flatcamGUI/PreferencesUI.py:6084 flatcamTools/ToolNCC.py:512 +#: flatcamTools/ToolPaint.py:442 +msgid "Rest Machining" +msgstr "Rest Machining" + +#: flatcamGUI/PreferencesUI.py:5569 flatcamTools/ToolNCC.py:516 +msgid "" +"If checked, use 'rest machining'.\n" +"Basically it will clear copper outside PCB features,\n" +"using the biggest tool and continue with the next tools,\n" +"from bigger to smaller, to clear areas of copper that\n" +"could not be cleared by previous tool, until there is\n" +"no more copper to clear or there are no more tools.\n" +"If not checked, use the standard algorithm." +msgstr "" +"If checked, use 'rest machining'.\n" +"Basically it will clear copper outside PCB features,\n" +"using the biggest tool and continue with the next tools,\n" +"from bigger to smaller, to clear areas of copper that\n" +"could not be cleared by previous tool, until there is\n" +"no more copper to clear or there are no more tools.\n" +"If not checked, use the standard algorithm." + +#: flatcamGUI/PreferencesUI.py:5588 flatcamGUI/PreferencesUI.py:6119 +#: flatcamGUI/PreferencesUI.py:7696 flatcamTools/ToolCopperThieving.py:126 +#: flatcamTools/ToolNCC.py:535 flatcamTools/ToolNCC.py:1311 +#: flatcamTools/ToolNCC.py:1642 flatcamTools/ToolNCC.py:1930 +#: flatcamTools/ToolNCC.py:1985 flatcamTools/ToolPaint.py:486 +#: flatcamTools/ToolPaint.py:946 flatcamTools/ToolPaint.py:1447 +msgid "Area Selection" +msgstr "Area Selection" + +#: flatcamGUI/PreferencesUI.py:5588 flatcamGUI/PreferencesUI.py:6119 +#: flatcamGUI/PreferencesUI.py:7697 flatcamTools/ToolCopperThieving.py:127 +#: flatcamTools/ToolDblSided.py:216 flatcamTools/ToolNCC.py:535 +#: flatcamTools/ToolNCC.py:1658 flatcamTools/ToolNCC.py:1936 +#: flatcamTools/ToolNCC.py:1993 flatcamTools/ToolNCC.py:2301 +#: flatcamTools/ToolNCC.py:2581 flatcamTools/ToolNCC.py:3007 +#: flatcamTools/ToolPaint.py:486 flatcamTools/ToolPaint.py:931 +#: flatcamTools/ToolPaint.py:1463 tclCommands/TclCommandCopperClear.py:192 +#: tclCommands/TclCommandPaint.py:166 +msgid "Reference Object" +msgstr "Reference Object" + +#: flatcamGUI/PreferencesUI.py:5592 flatcamTools/ToolNCC.py:541 +msgid "" +"Selection of area to be processed.\n" +"- 'Itself' - the processing extent is based on the object that is " +"processed.\n" +" - 'Area Selection' - left mouse click to start selection of the area to be " +"processed.\n" +"- 'Reference Object' - will process the area specified by another object." +msgstr "" +"Selection of area to be processed.\n" +"- 'Itself' - the processing extent is based on the object that is " +"processed.\n" +" - 'Area Selection' - left mouse click to start selection of the area to be " +"processed.\n" +"- 'Reference Object' - will process the area specified by another object." + +#: flatcamGUI/PreferencesUI.py:5601 flatcamGUI/PreferencesUI.py:6125 +#: flatcamTools/ToolNCC.py:578 flatcamTools/ToolPaint.py:522 +msgid "Shape" +msgstr "Shape" + +#: flatcamGUI/PreferencesUI.py:5603 flatcamGUI/PreferencesUI.py:6127 +#: flatcamTools/ToolNCC.py:580 flatcamTools/ToolPaint.py:524 +msgid "The kind of selection shape used for area selection." +msgstr "The kind of selection shape used for area selection." + +#: flatcamGUI/PreferencesUI.py:5618 flatcamGUI/PreferencesUI.py:6142 +msgid "Normal" +msgstr "Normal" + +#: flatcamGUI/PreferencesUI.py:5619 flatcamGUI/PreferencesUI.py:6143 +msgid "Progressive" +msgstr "Progressive" + +#: flatcamGUI/PreferencesUI.py:5620 +msgid "NCC Plotting" +msgstr "NCC Plotting" + +#: flatcamGUI/PreferencesUI.py:5622 +msgid "" +"- 'Normal' - normal plotting, done at the end of the NCC job\n" +"- 'Progressive' - after each shape is generated it will be plotted." +msgstr "" +"- 'Normal' - normal plotting, done at the end of the NCC job\n" +"- 'Progressive' - after each shape is generated it will be plotted." + +#: flatcamGUI/PreferencesUI.py:5636 +msgid "Cutout Tool Options" +msgstr "Cutout Tool Options" + +#: flatcamGUI/PreferencesUI.py:5651 flatcamTools/ToolCalculators.py:123 +#: flatcamTools/ToolCutOut.py:129 +msgid "Tool Diameter" +msgstr "Tool Diameter" + +#: flatcamGUI/PreferencesUI.py:5653 flatcamTools/ToolCutOut.py:131 +msgid "" +"Diameter of the tool used to cutout\n" +"the PCB shape out of the surrounding material." +msgstr "" +"Diameter of the tool used to cutout\n" +"the PCB shape out of the surrounding material." + +#: flatcamGUI/PreferencesUI.py:5708 +msgid "Object kind" +msgstr "Object kind" + +#: flatcamGUI/PreferencesUI.py:5710 flatcamTools/ToolCutOut.py:77 +msgid "" +"Choice of what kind the object we want to cutout is.
    - Single: " +"contain a single PCB Gerber outline object.
    - Panel: a panel PCB " +"Gerber object, which is made\n" +"out of many individual PCB outlines." +msgstr "" +"Choice of what kind the object we want to cutout is.
    - Single: " +"contain a single PCB Gerber outline object.
    - Panel: a panel PCB " +"Gerber object, which is made\n" +"out of many individual PCB outlines." + +#: flatcamGUI/PreferencesUI.py:5717 flatcamTools/ToolCutOut.py:83 +msgid "Single" +msgstr "Single" + +#: flatcamGUI/PreferencesUI.py:5718 flatcamTools/ToolCutOut.py:84 +msgid "Panel" +msgstr "Panel" + +#: flatcamGUI/PreferencesUI.py:5725 flatcamTools/ToolCutOut.py:192 +msgid "" +"Margin over bounds. A positive value here\n" +"will make the cutout of the PCB further from\n" +"the actual PCB border" +msgstr "" +"Margin over bounds. A positive value here\n" +"will make the cutout of the PCB further from\n" +"the actual PCB border" + +#: flatcamGUI/PreferencesUI.py:5738 flatcamTools/ToolCutOut.py:203 +msgid "Gap size" +msgstr "Gap size" + +#: flatcamGUI/PreferencesUI.py:5740 flatcamTools/ToolCutOut.py:205 +msgid "" +"The size of the bridge gaps in the cutout\n" +"used to keep the board connected to\n" +"the surrounding material (the one \n" +"from which the PCB is cutout)." +msgstr "" +"The size of the bridge gaps in the cutout\n" +"used to keep the board connected to\n" +"the surrounding material (the one \n" +"from which the PCB is cutout)." + +#: flatcamGUI/PreferencesUI.py:5754 flatcamTools/ToolCutOut.py:249 +msgid "Gaps" +msgstr "Gaps" + +#: flatcamGUI/PreferencesUI.py:5756 +msgid "" +"Number of gaps used for the cutout.\n" +"There can be maximum 8 bridges/gaps.\n" +"The choices are:\n" +"- None - no gaps\n" +"- lr - left + right\n" +"- tb - top + bottom\n" +"- 4 - left + right +top + bottom\n" +"- 2lr - 2*left + 2*right\n" +"- 2tb - 2*top + 2*bottom\n" +"- 8 - 2*left + 2*right +2*top + 2*bottom" +msgstr "" +"Number of gaps used for the cutout.\n" +"There can be maximum 8 bridges/gaps.\n" +"The choices are:\n" +"- None - no gaps\n" +"- lr - left + right\n" +"- tb - top + bottom\n" +"- 4 - left + right +top + bottom\n" +"- 2lr - 2*left + 2*right\n" +"- 2tb - 2*top + 2*bottom\n" +"- 8 - 2*left + 2*right +2*top + 2*bottom" + +#: flatcamGUI/PreferencesUI.py:5778 flatcamTools/ToolCutOut.py:222 +msgid "Convex Shape" +msgstr "Convex Shape" + +#: flatcamGUI/PreferencesUI.py:5780 flatcamTools/ToolCutOut.py:225 +msgid "" +"Create a convex shape surrounding the entire PCB.\n" +"Used only if the source object type is Gerber." +msgstr "" +"Create a convex shape surrounding the entire PCB.\n" +"Used only if the source object type is Gerber." + +#: flatcamGUI/PreferencesUI.py:5793 +msgid "2Sided Tool Options" +msgstr "2Sided Tool Options" + +#: flatcamGUI/PreferencesUI.py:5799 +msgid "" +"A tool to help in creating a double sided\n" +"PCB using alignment holes." +msgstr "" +"A tool to help in creating a double sided\n" +"PCB using alignment holes." + +#: flatcamGUI/PreferencesUI.py:5813 +msgid "Drill dia" +msgstr "Drill dia" + +#: flatcamGUI/PreferencesUI.py:5815 flatcamTools/ToolDblSided.py:363 +#: flatcamTools/ToolDblSided.py:368 +msgid "Diameter of the drill for the alignment holes." +msgstr "Diameter of the drill for the alignment holes." + +#: flatcamGUI/PreferencesUI.py:5822 flatcamTools/ToolDblSided.py:377 +msgid "Align Axis" +msgstr "Align Axis" + +#: flatcamGUI/PreferencesUI.py:5824 flatcamGUI/PreferencesUI.py:5837 +#: flatcamTools/ToolDblSided.py:165 flatcamTools/ToolDblSided.py:379 +msgid "Mirror vertically (X) or horizontally (Y)." +msgstr "Mirror vertically (X) or horizontally (Y)." + +#: flatcamGUI/PreferencesUI.py:5835 +msgid "Mirror Axis:" +msgstr "Mirror Axis:" + +#: flatcamGUI/PreferencesUI.py:5846 flatcamTools/ToolDblSided.py:181 +msgid "Point" +msgstr "Point" + +#: flatcamGUI/PreferencesUI.py:5847 flatcamTools/ToolDblSided.py:182 +msgid "Box" +msgstr "Box" + +#: flatcamGUI/PreferencesUI.py:5848 +msgid "Axis Ref" +msgstr "Axis Ref" + +#: flatcamGUI/PreferencesUI.py:5850 +msgid "" +"The axis should pass through a point or cut\n" +" a specified box (in a FlatCAM object) through \n" +"the center." +msgstr "" +"The axis should pass through a point or cut\n" +" a specified box (in a FlatCAM object) through \n" +"the center." + +#: flatcamGUI/PreferencesUI.py:5866 +msgid "Paint Tool Options" +msgstr "Paint Tool Options" + +#: flatcamGUI/PreferencesUI.py:5872 +msgid "Parameters:" +msgstr "Parameters:" + +#: flatcamGUI/PreferencesUI.py:6086 flatcamTools/ToolPaint.py:445 +msgid "" +"If checked, use 'rest machining'.\n" +"Basically it will clear copper outside PCB features,\n" +"using the biggest tool and continue with the next tools,\n" +"from bigger to smaller, to clear areas of copper that\n" +"could not be cleared by previous tool, until there is\n" +"no more copper to clear or there are no more tools.\n" +"\n" +"If not checked, use the standard algorithm." +msgstr "" +"If checked, use 'rest machining'.\n" +"Basically it will clear copper outside PCB features,\n" +"using the biggest tool and continue with the next tools,\n" +"from bigger to smaller, to clear areas of copper that\n" +"could not be cleared by previous tool, until there is\n" +"no more copper to clear or there are no more tools.\n" +"\n" +"If not checked, use the standard algorithm." + +#: flatcamGUI/PreferencesUI.py:6099 flatcamTools/ToolPaint.py:458 +msgid "" +"Selection of area to be processed.\n" +"- 'Polygon Selection' - left mouse click to add/remove polygons to be " +"processed.\n" +"- 'Area Selection' - left mouse click to start selection of the area to be " +"processed.\n" +"Keeping a modifier key pressed (CTRL or SHIFT) will allow to add multiple " +"areas.\n" +"- 'All Polygons' - the process will start after click.\n" +"- 'Reference Object' - will process the area specified by another object." +msgstr "" +"Selection of area to be processed.\n" +"- 'Polygon Selection' - left mouse click to add/remove polygons to be " +"processed.\n" +"- 'Area Selection' - left mouse click to start selection of the area to be " +"processed.\n" +"Keeping a modifier key pressed (CTRL or SHIFT) will allow to add multiple " +"areas.\n" +"- 'All Polygons' - the process will start after click.\n" +"- 'Reference Object' - will process the area specified by another object." + +#: flatcamGUI/PreferencesUI.py:6119 flatcamTools/ToolPaint.py:486 +#: flatcamTools/ToolPaint.py:942 flatcamTools/ToolPaint.py:1427 +#: tclCommands/TclCommandPaint.py:164 +msgid "Polygon Selection" +msgstr "Polygon Selection" + +#: flatcamGUI/PreferencesUI.py:6144 +msgid "Paint Plotting" +msgstr "Paint Plotting" + +#: flatcamGUI/PreferencesUI.py:6146 +msgid "" +"- 'Normal' - normal plotting, done at the end of the Paint job\n" +"- 'Progressive' - after each shape is generated it will be plotted." +msgstr "" +"- 'Normal' - normal plotting, done at the end of the Paint job\n" +"- 'Progressive' - after each shape is generated it will be plotted." + +#: flatcamGUI/PreferencesUI.py:6160 +msgid "Film Tool Options" +msgstr "Film Tool Options" + +#: flatcamGUI/PreferencesUI.py:6166 +msgid "" +"Create a PCB film from a Gerber or Geometry\n" +"FlatCAM object.\n" +"The file is saved in SVG format." +msgstr "" +"Create a PCB film from a Gerber or Geometry\n" +"FlatCAM object.\n" +"The file is saved in SVG format." + +#: flatcamGUI/PreferencesUI.py:6177 +msgid "Film Type" +msgstr "Film Type" + +#: flatcamGUI/PreferencesUI.py:6179 flatcamTools/ToolFilm.py:300 +msgid "" +"Generate a Positive black film or a Negative film.\n" +"Positive means that it will print the features\n" +"with black on a white canvas.\n" +"Negative means that it will print the features\n" +"with white on a black canvas.\n" +"The Film format is SVG." +msgstr "" +"Generate a Positive black film or a Negative film.\n" +"Positive means that it will print the features\n" +"with black on a white canvas.\n" +"Negative means that it will print the features\n" +"with white on a black canvas.\n" +"The Film format is SVG." + +#: flatcamGUI/PreferencesUI.py:6190 +msgid "Film Color" +msgstr "Film Color" + +#: flatcamGUI/PreferencesUI.py:6192 +msgid "Set the film color when positive film is selected." +msgstr "Set the film color when positive film is selected." + +#: flatcamGUI/PreferencesUI.py:6215 flatcamTools/ToolFilm.py:316 +msgid "Border" +msgstr "Border" + +#: flatcamGUI/PreferencesUI.py:6217 flatcamTools/ToolFilm.py:318 +msgid "" +"Specify a border around the object.\n" +"Only for negative film.\n" +"It helps if we use as a Box Object the same \n" +"object as in Film Object. It will create a thick\n" +"black bar around the actual print allowing for a\n" +"better delimitation of the outline features which are of\n" +"white color like the rest and which may confound with the\n" +"surroundings if not for this border." +msgstr "" +"Specify a border around the object.\n" +"Only for negative film.\n" +"It helps if we use as a Box Object the same \n" +"object as in Film Object. It will create a thick\n" +"black bar around the actual print allowing for a\n" +"better delimitation of the outline features which are of\n" +"white color like the rest and which may confound with the\n" +"surroundings if not for this border." + +#: flatcamGUI/PreferencesUI.py:6234 flatcamTools/ToolFilm.py:283 +msgid "Scale Stroke" +msgstr "Scale Stroke" + +#: flatcamGUI/PreferencesUI.py:6236 flatcamTools/ToolFilm.py:285 +msgid "" +"Scale the line stroke thickness of each feature in the SVG file.\n" +"It means that the line that envelope each SVG feature will be thicker or " +"thinner,\n" +"therefore the fine features may be more affected by this parameter." +msgstr "" +"Scale the line stroke thickness of each feature in the SVG file.\n" +"It means that the line that envelope each SVG feature will be thicker or " +"thinner,\n" +"therefore the fine features may be more affected by this parameter." + +#: flatcamGUI/PreferencesUI.py:6243 flatcamTools/ToolFilm.py:141 +msgid "Film Adjustments" +msgstr "Film Adjustments" + +#: flatcamGUI/PreferencesUI.py:6245 flatcamTools/ToolFilm.py:143 +msgid "" +"Sometime the printers will distort the print shape, especially the Laser " +"types.\n" +"This section provide the tools to compensate for the print distortions." +msgstr "" +"Sometime the printers will distort the print shape, especially the Laser " +"types.\n" +"This section provide the tools to compensate for the print distortions." + +#: flatcamGUI/PreferencesUI.py:6252 flatcamTools/ToolFilm.py:150 +msgid "Scale Film geometry" +msgstr "Scale Film geometry" + +#: flatcamGUI/PreferencesUI.py:6254 flatcamTools/ToolFilm.py:152 +msgid "" +"A value greater than 1 will stretch the film\n" +"while a value less than 1 will jolt it." +msgstr "" +"A value greater than 1 will stretch the film\n" +"while a value less than 1 will jolt it." + +#: flatcamGUI/PreferencesUI.py:6264 flatcamGUI/PreferencesUI.py:6783 +#: flatcamTools/ToolFilm.py:162 flatcamTools/ToolTransform.py:148 +msgid "X factor" +msgstr "X factor" + +#: flatcamGUI/PreferencesUI.py:6273 flatcamGUI/PreferencesUI.py:6796 +#: flatcamTools/ToolFilm.py:171 flatcamTools/ToolTransform.py:168 +msgid "Y factor" +msgstr "Y factor" + +#: flatcamGUI/PreferencesUI.py:6283 flatcamTools/ToolFilm.py:189 +msgid "Skew Film geometry" +msgstr "Skew Film geometry" + +#: flatcamGUI/PreferencesUI.py:6285 flatcamTools/ToolFilm.py:191 +msgid "" +"Positive values will skew to the right\n" +"while negative values will skew to the left." +msgstr "" +"Positive values will skew to the right\n" +"while negative values will skew to the left." + +#: flatcamGUI/PreferencesUI.py:6295 flatcamGUI/PreferencesUI.py:6752 +#: flatcamTools/ToolFilm.py:201 flatcamTools/ToolTransform.py:97 +msgid "X angle" +msgstr "X angle" + +#: flatcamGUI/PreferencesUI.py:6304 flatcamGUI/PreferencesUI.py:6766 +#: flatcamTools/ToolFilm.py:210 flatcamTools/ToolTransform.py:118 +msgid "Y angle" +msgstr "Y angle" + +#: flatcamGUI/PreferencesUI.py:6315 flatcamTools/ToolFilm.py:221 +msgid "" +"The reference point to be used as origin for the skew.\n" +"It can be one of the four points of the geometry bounding box." +msgstr "" +"The reference point to be used as origin for the skew.\n" +"It can be one of the four points of the geometry bounding box." + +#: flatcamGUI/PreferencesUI.py:6318 flatcamTools/ToolFiducials.py:87 +#: flatcamTools/ToolFilm.py:224 +msgid "Bottom Left" +msgstr "Bottom Left" + +#: flatcamGUI/PreferencesUI.py:6319 flatcamTools/ToolFilm.py:225 +msgid "Top Left" +msgstr "Top Left" + +#: flatcamGUI/PreferencesUI.py:6320 flatcamTools/ToolFilm.py:226 +msgid "Bottom Right" +msgstr "Bottom Right" + +#: flatcamGUI/PreferencesUI.py:6321 flatcamTools/ToolFilm.py:227 +msgid "Top right" +msgstr "Top right" + +#: flatcamGUI/PreferencesUI.py:6329 flatcamTools/ToolFilm.py:244 +msgid "Mirror Film geometry" +msgstr "Mirror Film geometry" + +#: flatcamGUI/PreferencesUI.py:6331 flatcamTools/ToolFilm.py:246 +msgid "Mirror the film geometry on the selected axis or on both." +msgstr "Mirror the film geometry on the selected axis or on both." + +#: flatcamGUI/PreferencesUI.py:6345 flatcamTools/ToolFilm.py:260 +msgid "Mirror axis" +msgstr "Mirror axis" + +#: flatcamGUI/PreferencesUI.py:6355 flatcamTools/ToolFilm.py:405 +msgid "SVG" +msgstr "SVG" + +#: flatcamGUI/PreferencesUI.py:6356 flatcamTools/ToolFilm.py:406 +msgid "PNG" +msgstr "PNG" + +#: flatcamGUI/PreferencesUI.py:6357 flatcamTools/ToolFilm.py:407 +msgid "PDF" +msgstr "PDF" + +#: flatcamGUI/PreferencesUI.py:6360 flatcamTools/ToolFilm.py:298 +#: flatcamTools/ToolFilm.py:410 +msgid "Film Type:" +msgstr "Film Type:" + +#: flatcamGUI/PreferencesUI.py:6362 flatcamTools/ToolFilm.py:412 +msgid "" +"The file type of the saved film. Can be:\n" +"- 'SVG' -> open-source vectorial format\n" +"- 'PNG' -> raster image\n" +"- 'PDF' -> portable document format" +msgstr "" +"The file type of the saved film. Can be:\n" +"- 'SVG' -> open-source vectorial format\n" +"- 'PNG' -> raster image\n" +"- 'PDF' -> portable document format" + +#: flatcamGUI/PreferencesUI.py:6371 flatcamTools/ToolFilm.py:421 +msgid "Page Orientation" +msgstr "Page Orientation" + +#: flatcamGUI/PreferencesUI.py:6384 flatcamTools/ToolFilm.py:434 +msgid "Page Size" +msgstr "Page Size" + +#: flatcamGUI/PreferencesUI.py:6385 flatcamTools/ToolFilm.py:435 +msgid "A selection of standard ISO 216 page sizes." +msgstr "A selection of standard ISO 216 page sizes." + +#: flatcamGUI/PreferencesUI.py:6457 +msgid "Panelize Tool Options" +msgstr "Panelize Tool Options" + +#: flatcamGUI/PreferencesUI.py:6463 +msgid "" +"Create an object that contains an array of (x, y) elements,\n" +"each element is a copy of the source object spaced\n" +"at a X distance, Y distance of each other." +msgstr "" +"Create an object that contains an array of (x, y) elements,\n" +"each element is a copy of the source object spaced\n" +"at a X distance, Y distance of each other." + +#: flatcamGUI/PreferencesUI.py:6480 flatcamTools/ToolPanelize.py:161 +msgid "Spacing cols" +msgstr "Spacing cols" + +#: flatcamGUI/PreferencesUI.py:6482 flatcamTools/ToolPanelize.py:163 +msgid "" +"Spacing between columns of the desired panel.\n" +"In current units." +msgstr "" +"Spacing between columns of the desired panel.\n" +"In current units." + +#: flatcamGUI/PreferencesUI.py:6494 flatcamTools/ToolPanelize.py:173 +msgid "Spacing rows" +msgstr "Spacing rows" + +#: flatcamGUI/PreferencesUI.py:6496 flatcamTools/ToolPanelize.py:175 +msgid "" +"Spacing between rows of the desired panel.\n" +"In current units." +msgstr "" +"Spacing between rows of the desired panel.\n" +"In current units." + +#: flatcamGUI/PreferencesUI.py:6507 flatcamTools/ToolPanelize.py:184 +msgid "Columns" +msgstr "Columns" + +#: flatcamGUI/PreferencesUI.py:6509 flatcamTools/ToolPanelize.py:186 +msgid "Number of columns of the desired panel" +msgstr "Number of columns of the desired panel" + +#: flatcamGUI/PreferencesUI.py:6519 flatcamTools/ToolPanelize.py:194 +msgid "Rows" +msgstr "Rows" + +#: flatcamGUI/PreferencesUI.py:6521 flatcamTools/ToolPanelize.py:196 +msgid "Number of rows of the desired panel" +msgstr "Number of rows of the desired panel" + +#: flatcamGUI/PreferencesUI.py:6528 flatcamTools/ToolPanelize.py:203 +msgid "Geo" +msgstr "Geo" + +#: flatcamGUI/PreferencesUI.py:6529 flatcamTools/ToolPanelize.py:204 +msgid "Panel Type" +msgstr "Panel Type" + +#: flatcamGUI/PreferencesUI.py:6531 +msgid "" +"Choose the type of object for the panel object:\n" +"- Gerber\n" +"- Geometry" +msgstr "" +"Choose the type of object for the panel object:\n" +"- Gerber\n" +"- Geometry" + +#: flatcamGUI/PreferencesUI.py:6540 +msgid "Constrain within" +msgstr "Constrain within" + +#: flatcamGUI/PreferencesUI.py:6542 flatcamTools/ToolPanelize.py:216 +msgid "" +"Area define by DX and DY within to constrain the panel.\n" +"DX and DY values are in current units.\n" +"Regardless of how many columns and rows are desired,\n" +"the final panel will have as many columns and rows as\n" +"they fit completely within selected area." +msgstr "" +"Area define by DX and DY within to constrain the panel.\n" +"DX and DY values are in current units.\n" +"Regardless of how many columns and rows are desired,\n" +"the final panel will have as many columns and rows as\n" +"they fit completely within selected area." + +#: flatcamGUI/PreferencesUI.py:6555 flatcamTools/ToolPanelize.py:228 +msgid "Width (DX)" +msgstr "Width (DX)" + +#: flatcamGUI/PreferencesUI.py:6557 flatcamTools/ToolPanelize.py:230 +msgid "" +"The width (DX) within which the panel must fit.\n" +"In current units." +msgstr "" +"The width (DX) within which the panel must fit.\n" +"In current units." + +#: flatcamGUI/PreferencesUI.py:6568 flatcamTools/ToolPanelize.py:239 +msgid "Height (DY)" +msgstr "Height (DY)" + +#: flatcamGUI/PreferencesUI.py:6570 flatcamTools/ToolPanelize.py:241 +msgid "" +"The height (DY)within which the panel must fit.\n" +"In current units." +msgstr "" +"The height (DY)within which the panel must fit.\n" +"In current units." + +#: flatcamGUI/PreferencesUI.py:6584 +msgid "Calculators Tool Options" +msgstr "Calculators Tool Options" + +#: flatcamGUI/PreferencesUI.py:6588 flatcamTools/ToolCalculators.py:25 +msgid "V-Shape Tool Calculator" +msgstr "V-Shape Tool Calculator" + +#: flatcamGUI/PreferencesUI.py:6590 +msgid "" +"Calculate the tool diameter for a given V-shape tool,\n" +"having the tip diameter, tip angle and\n" +"depth-of-cut as parameters." +msgstr "" +"Calculate the tool diameter for a given V-shape tool,\n" +"having the tip diameter, tip angle and\n" +"depth-of-cut as parameters." + +#: flatcamGUI/PreferencesUI.py:6607 flatcamTools/ToolCalculators.py:94 +msgid "Tip Diameter" +msgstr "Tip Diameter" + +#: flatcamGUI/PreferencesUI.py:6609 flatcamTools/ToolCalculators.py:102 +msgid "" +"This is the tool tip diameter.\n" +"It is specified by manufacturer." +msgstr "" +"This is the tool tip diameter.\n" +"It is specified by manufacturer." + +#: flatcamGUI/PreferencesUI.py:6621 flatcamTools/ToolCalculators.py:105 +msgid "Tip Angle" +msgstr "Tip Angle" + +#: flatcamGUI/PreferencesUI.py:6623 +msgid "" +"This is the angle on the tip of the tool.\n" +"It is specified by manufacturer." +msgstr "" +"This is the angle on the tip of the tool.\n" +"It is specified by manufacturer." + +#: flatcamGUI/PreferencesUI.py:6637 +msgid "" +"This is depth to cut into material.\n" +"In the CNCJob object it is the CutZ parameter." +msgstr "" +"This is depth to cut into material.\n" +"In the CNCJob object it is the CutZ parameter." + +#: flatcamGUI/PreferencesUI.py:6644 flatcamTools/ToolCalculators.py:27 +msgid "ElectroPlating Calculator" +msgstr "ElectroPlating Calculator" + +#: flatcamGUI/PreferencesUI.py:6646 flatcamTools/ToolCalculators.py:158 +msgid "" +"This calculator is useful for those who plate the via/pad/drill holes,\n" +"using a method like grahite ink or calcium hypophosphite ink or palladium " +"chloride." +msgstr "" +"This calculator is useful for those who plate the via/pad/drill holes,\n" +"using a method like grahite ink or calcium hypophosphite ink or palladium " +"chloride." + +#: flatcamGUI/PreferencesUI.py:6657 flatcamTools/ToolCalculators.py:167 +msgid "Board Length" +msgstr "Board Length" + +#: flatcamGUI/PreferencesUI.py:6659 flatcamTools/ToolCalculators.py:173 +msgid "This is the board length. In centimeters." +msgstr "This is the board length. In centimeters." + +#: flatcamGUI/PreferencesUI.py:6669 flatcamTools/ToolCalculators.py:175 +msgid "Board Width" +msgstr "Board Width" + +#: flatcamGUI/PreferencesUI.py:6671 flatcamTools/ToolCalculators.py:181 +msgid "This is the board width.In centimeters." +msgstr "This is the board width.In centimeters." + +#: flatcamGUI/PreferencesUI.py:6676 flatcamTools/ToolCalculators.py:183 +msgid "Current Density" +msgstr "Current Density" + +#: flatcamGUI/PreferencesUI.py:6682 flatcamTools/ToolCalculators.py:190 +msgid "" +"Current density to pass through the board. \n" +"In Amps per Square Feet ASF." +msgstr "" +"Current density to pass through the board. \n" +"In Amps per Square Feet ASF." + +#: flatcamGUI/PreferencesUI.py:6688 flatcamTools/ToolCalculators.py:193 +msgid "Copper Growth" +msgstr "Copper Growth" + +#: flatcamGUI/PreferencesUI.py:6694 flatcamTools/ToolCalculators.py:200 +msgid "" +"How thick the copper growth is intended to be.\n" +"In microns." +msgstr "" +"How thick the copper growth is intended to be.\n" +"In microns." + +#: flatcamGUI/PreferencesUI.py:6707 +msgid "Transform Tool Options" +msgstr "Transform Tool Options" + +#: flatcamGUI/PreferencesUI.py:6713 +msgid "" +"Various transformations that can be applied\n" +"on a FlatCAM object." +msgstr "" +"Various transformations that can be applied\n" +"on a FlatCAM object." + +#: flatcamGUI/PreferencesUI.py:6744 +msgid "Skew" +msgstr "Skew" + +#: flatcamGUI/PreferencesUI.py:6785 flatcamTools/ToolTransform.py:150 +msgid "Factor for scaling on X axis." +msgstr "Factor for scaling on X axis." + +#: flatcamGUI/PreferencesUI.py:6798 flatcamTools/ToolTransform.py:170 +msgid "Factor for scaling on Y axis." +msgstr "Factor for scaling on Y axis." + +#: flatcamGUI/PreferencesUI.py:6806 flatcamTools/ToolTransform.py:191 +msgid "" +"Scale the selected object(s)\n" +"using the Scale_X factor for both axis." +msgstr "" +"Scale the selected object(s)\n" +"using the Scale_X factor for both axis." + +#: flatcamGUI/PreferencesUI.py:6814 flatcamTools/ToolTransform.py:198 +msgid "" +"Scale the selected object(s)\n" +"using the origin reference when checked,\n" +"and the center of the biggest bounding box\n" +"of the selected objects when unchecked." +msgstr "" +"Scale the selected object(s)\n" +"using the origin reference when checked,\n" +"and the center of the biggest bounding box\n" +"of the selected objects when unchecked." + +#: flatcamGUI/PreferencesUI.py:6830 flatcamTools/ToolTransform.py:217 +msgid "X val" +msgstr "X val" + +#: flatcamGUI/PreferencesUI.py:6832 flatcamTools/ToolTransform.py:219 +msgid "Distance to offset on X axis. In current units." +msgstr "Distance to offset on X axis. In current units." + +#: flatcamGUI/PreferencesUI.py:6843 flatcamTools/ToolTransform.py:237 +msgid "Y val" +msgstr "Y val" + +#: flatcamGUI/PreferencesUI.py:6845 flatcamTools/ToolTransform.py:239 +msgid "Distance to offset on Y axis. In current units." +msgstr "Distance to offset on Y axis. In current units." + +#: flatcamGUI/PreferencesUI.py:6851 flatcamTools/ToolDblSided.py:67 +#: flatcamTools/ToolDblSided.py:95 flatcamTools/ToolDblSided.py:125 +msgid "Mirror" +msgstr "Mirror" + +#: flatcamGUI/PreferencesUI.py:6855 flatcamTools/ToolTransform.py:283 +msgid "Mirror Reference" +msgstr "Mirror Reference" + +#: flatcamGUI/PreferencesUI.py:6857 flatcamTools/ToolTransform.py:285 +msgid "" +"Flip the selected object(s)\n" +"around the point in Point Entry Field.\n" +"\n" +"The point coordinates can be captured by\n" +"left click on canvas together with pressing\n" +"SHIFT key. \n" +"Then click Add button to insert coordinates.\n" +"Or enter the coords in format (x, y) in the\n" +"Point Entry field and click Flip on X(Y)" +msgstr "" +"Flip the selected object(s)\n" +"around the point in Point Entry Field.\n" +"\n" +"The point coordinates can be captured by\n" +"left click on canvas together with pressing\n" +"SHIFT key. \n" +"Then click Add button to insert coordinates.\n" +"Or enter the coords in format (x, y) in the\n" +"Point Entry field and click Flip on X(Y)" + +#: flatcamGUI/PreferencesUI.py:6868 +msgid "Mirror Reference point" +msgstr "Mirror Reference point" + +#: flatcamGUI/PreferencesUI.py:6870 +msgid "" +"Coordinates in format (x, y) used as reference for mirroring.\n" +"The 'x' in (x, y) will be used when using Flip on X and\n" +"the 'y' in (x, y) will be used when using Flip on Y and" +msgstr "" +"Coordinates in format (x, y) used as reference for mirroring.\n" +"The 'x' in (x, y) will be used when using Flip on X and\n" +"the 'y' in (x, y) will be used when using Flip on Y and" + +#: flatcamGUI/PreferencesUI.py:6883 flatcamTools/ToolDistance.py:496 +#: flatcamTools/ToolDistanceMin.py:287 flatcamTools/ToolTransform.py:332 +msgid "Distance" +msgstr "Distance" + +#: flatcamGUI/PreferencesUI.py:6885 flatcamTools/ToolTransform.py:334 +msgid "" +"A positive value will create the effect of dilation,\n" +"while a negative value will create the effect of erosion.\n" +"Each geometry element of the object will be increased\n" +"or decreased with the 'distance'." +msgstr "" +"A positive value will create the effect of dilation,\n" +"while a negative value will create the effect of erosion.\n" +"Each geometry element of the object will be increased\n" +"or decreased with the 'distance'." + +#: flatcamGUI/PreferencesUI.py:6902 flatcamTools/ToolTransform.py:359 +msgid "" +"A positive value will create the effect of dilation,\n" +"while a negative value will create the effect of erosion.\n" +"Each geometry element of the object will be increased\n" +"or decreased to fit the 'Value'. Value is a percentage\n" +"of the initial dimension." +msgstr "" +"A positive value will create the effect of dilation,\n" +"while a negative value will create the effect of erosion.\n" +"Each geometry element of the object will be increased\n" +"or decreased to fit the 'Value'. Value is a percentage\n" +"of the initial dimension." + +#: flatcamGUI/PreferencesUI.py:6919 flatcamGUI/PreferencesUI.py:7563 +#: flatcamTools/ToolQRCode.py:197 flatcamTools/ToolTransform.py:383 +msgid "Rounded" +msgstr "Rounded" + +#: flatcamGUI/PreferencesUI.py:6921 flatcamTools/ToolTransform.py:385 +msgid "" +"If checked then the buffer will surround the buffered shape,\n" +"every corner will be rounded.\n" +"If not checked then the buffer will follow the exact geometry\n" +"of the buffered shape." +msgstr "" +"If checked then the buffer will surround the buffered shape,\n" +"every corner will be rounded.\n" +"If not checked then the buffer will follow the exact geometry\n" +"of the buffered shape." + +#: flatcamGUI/PreferencesUI.py:6938 +msgid "SolderPaste Tool Options" +msgstr "SolderPaste Tool Options" + +#: flatcamGUI/PreferencesUI.py:6944 +msgid "" +"A tool to create GCode for dispensing\n" +"solder paste onto a PCB." +msgstr "" +"A tool to create GCode for dispensing\n" +"solder paste onto a PCB." + +#: flatcamGUI/PreferencesUI.py:6965 +msgid "New Nozzle Dia" +msgstr "New Nozzle Dia" + +#: flatcamGUI/PreferencesUI.py:6967 flatcamTools/ToolSolderPaste.py:107 +msgid "Diameter for the new Nozzle tool to add in the Tool Table" +msgstr "Diameter for the new Nozzle tool to add in the Tool Table" + +#: flatcamGUI/PreferencesUI.py:6983 flatcamTools/ToolSolderPaste.py:183 +msgid "Z Dispense Start" +msgstr "Z Dispense Start" + +#: flatcamGUI/PreferencesUI.py:6985 flatcamTools/ToolSolderPaste.py:185 +msgid "The height (Z) when solder paste dispensing starts." +msgstr "The height (Z) when solder paste dispensing starts." + +#: flatcamGUI/PreferencesUI.py:6996 flatcamTools/ToolSolderPaste.py:195 +msgid "Z Dispense" +msgstr "Z Dispense" + +#: flatcamGUI/PreferencesUI.py:6998 flatcamTools/ToolSolderPaste.py:197 +msgid "The height (Z) when doing solder paste dispensing." +msgstr "The height (Z) when doing solder paste dispensing." + +#: flatcamGUI/PreferencesUI.py:7009 flatcamTools/ToolSolderPaste.py:207 +msgid "Z Dispense Stop" +msgstr "Z Dispense Stop" + +#: flatcamGUI/PreferencesUI.py:7011 flatcamTools/ToolSolderPaste.py:209 +msgid "The height (Z) when solder paste dispensing stops." +msgstr "The height (Z) when solder paste dispensing stops." + +#: flatcamGUI/PreferencesUI.py:7022 flatcamTools/ToolSolderPaste.py:219 +msgid "Z Travel" +msgstr "Z Travel" + +#: flatcamGUI/PreferencesUI.py:7024 flatcamTools/ToolSolderPaste.py:221 +msgid "" +"The height (Z) for travel between pads\n" +"(without dispensing solder paste)." +msgstr "" +"The height (Z) for travel between pads\n" +"(without dispensing solder paste)." + +#: flatcamGUI/PreferencesUI.py:7036 flatcamTools/ToolSolderPaste.py:232 +msgid "Z Toolchange" +msgstr "Z Toolchange" + +#: flatcamGUI/PreferencesUI.py:7038 flatcamTools/ToolSolderPaste.py:234 +msgid "The height (Z) for tool (nozzle) change." +msgstr "The height (Z) for tool (nozzle) change." + +#: flatcamGUI/PreferencesUI.py:7047 flatcamTools/ToolSolderPaste.py:242 +msgid "" +"The X,Y location for tool (nozzle) change.\n" +"The format is (x, y) where x and y are real numbers." +msgstr "" +"The X,Y location for tool (nozzle) change.\n" +"The format is (x, y) where x and y are real numbers." + +#: flatcamGUI/PreferencesUI.py:7061 flatcamTools/ToolSolderPaste.py:255 +msgid "Feedrate (speed) while moving on the X-Y plane." +msgstr "Feedrate (speed) while moving on the X-Y plane." + +#: flatcamGUI/PreferencesUI.py:7074 flatcamTools/ToolSolderPaste.py:267 +msgid "" +"Feedrate (speed) while moving vertically\n" +"(on Z plane)." +msgstr "" +"Feedrate (speed) while moving vertically\n" +"(on Z plane)." + +#: flatcamGUI/PreferencesUI.py:7086 flatcamTools/ToolSolderPaste.py:278 +msgid "Feedrate Z Dispense" +msgstr "Feedrate Z Dispense" + +#: flatcamGUI/PreferencesUI.py:7088 +msgid "" +"Feedrate (speed) while moving up vertically\n" +"to Dispense position (on Z plane)." +msgstr "" +"Feedrate (speed) while moving up vertically\n" +"to Dispense position (on Z plane)." + +#: flatcamGUI/PreferencesUI.py:7099 flatcamTools/ToolSolderPaste.py:290 +msgid "Spindle Speed FWD" +msgstr "Spindle Speed FWD" + +#: flatcamGUI/PreferencesUI.py:7101 flatcamTools/ToolSolderPaste.py:292 +msgid "" +"The dispenser speed while pushing solder paste\n" +"through the dispenser nozzle." +msgstr "" +"The dispenser speed while pushing solder paste\n" +"through the dispenser nozzle." + +#: flatcamGUI/PreferencesUI.py:7113 flatcamTools/ToolSolderPaste.py:303 +msgid "Dwell FWD" +msgstr "Dwell FWD" + +#: flatcamGUI/PreferencesUI.py:7115 flatcamTools/ToolSolderPaste.py:305 +msgid "Pause after solder dispensing." +msgstr "Pause after solder dispensing." + +#: flatcamGUI/PreferencesUI.py:7125 flatcamTools/ToolSolderPaste.py:314 +msgid "Spindle Speed REV" +msgstr "Spindle Speed REV" + +#: flatcamGUI/PreferencesUI.py:7127 flatcamTools/ToolSolderPaste.py:316 +msgid "" +"The dispenser speed while retracting solder paste\n" +"through the dispenser nozzle." +msgstr "" +"The dispenser speed while retracting solder paste\n" +"through the dispenser nozzle." + +#: flatcamGUI/PreferencesUI.py:7139 flatcamTools/ToolSolderPaste.py:327 +msgid "Dwell REV" +msgstr "Dwell REV" + +#: flatcamGUI/PreferencesUI.py:7141 flatcamTools/ToolSolderPaste.py:329 +msgid "" +"Pause after solder paste dispenser retracted,\n" +"to allow pressure equilibrium." +msgstr "" +"Pause after solder paste dispenser retracted,\n" +"to allow pressure equilibrium." + +#: flatcamGUI/PreferencesUI.py:7150 flatcamTools/ToolSolderPaste.py:337 +msgid "Files that control the GCode generation." +msgstr "Files that control the GCode generation." + +#: flatcamGUI/PreferencesUI.py:7165 +msgid "Substractor Tool Options" +msgstr "Substractor Tool Options" + +#: flatcamGUI/PreferencesUI.py:7171 +msgid "" +"A tool to substract one Gerber or Geometry object\n" +"from another of the same type." +msgstr "" +"A tool to substract one Gerber or Geometry object\n" +"from another of the same type." + +#: flatcamGUI/PreferencesUI.py:7176 flatcamTools/ToolSub.py:155 +msgid "Close paths" +msgstr "Close paths" + +#: flatcamGUI/PreferencesUI.py:7177 +msgid "" +"Checking this will close the paths cut by the Geometry substractor object." +msgstr "" +"Checking this will close the paths cut by the Geometry substractor object." + +#: flatcamGUI/PreferencesUI.py:7188 +msgid "Check Rules Tool Options" +msgstr "Check Rules Tool Options" + +#: flatcamGUI/PreferencesUI.py:7193 +msgid "" +"A tool to check if Gerber files are within a set\n" +"of Manufacturing Rules." +msgstr "" +"A tool to check if Gerber files are within a set\n" +"of Manufacturing Rules." + +#: flatcamGUI/PreferencesUI.py:7203 flatcamTools/ToolRulesCheck.py:265 +#: flatcamTools/ToolRulesCheck.py:929 +msgid "Trace Size" +msgstr "Trace Size" + +#: flatcamGUI/PreferencesUI.py:7205 flatcamTools/ToolRulesCheck.py:267 +msgid "This checks if the minimum size for traces is met." +msgstr "This checks if the minimum size for traces is met." + +#: flatcamGUI/PreferencesUI.py:7215 flatcamGUI/PreferencesUI.py:7235 +#: flatcamGUI/PreferencesUI.py:7255 flatcamGUI/PreferencesUI.py:7275 +#: flatcamGUI/PreferencesUI.py:7295 flatcamGUI/PreferencesUI.py:7315 +#: flatcamGUI/PreferencesUI.py:7335 flatcamGUI/PreferencesUI.py:7355 +#: flatcamGUI/PreferencesUI.py:7377 flatcamGUI/PreferencesUI.py:7397 +#: flatcamTools/ToolRulesCheck.py:277 flatcamTools/ToolRulesCheck.py:299 +#: flatcamTools/ToolRulesCheck.py:322 flatcamTools/ToolRulesCheck.py:345 +#: flatcamTools/ToolRulesCheck.py:368 flatcamTools/ToolRulesCheck.py:391 +#: flatcamTools/ToolRulesCheck.py:414 flatcamTools/ToolRulesCheck.py:437 +#: flatcamTools/ToolRulesCheck.py:462 flatcamTools/ToolRulesCheck.py:485 +msgid "Min value" +msgstr "Min value" + +#: flatcamGUI/PreferencesUI.py:7217 flatcamTools/ToolRulesCheck.py:279 +msgid "Minimum acceptable trace size." +msgstr "Minimum acceptable trace size." + +#: flatcamGUI/PreferencesUI.py:7222 flatcamTools/ToolRulesCheck.py:286 +#: flatcamTools/ToolRulesCheck.py:1157 flatcamTools/ToolRulesCheck.py:1187 +msgid "Copper to Copper clearance" +msgstr "Copper to Copper clearance" + +#: flatcamGUI/PreferencesUI.py:7224 flatcamTools/ToolRulesCheck.py:288 +msgid "" +"This checks if the minimum clearance between copper\n" +"features is met." +msgstr "" +"This checks if the minimum clearance between copper\n" +"features is met." + +#: flatcamGUI/PreferencesUI.py:7237 flatcamGUI/PreferencesUI.py:7257 +#: flatcamGUI/PreferencesUI.py:7277 flatcamGUI/PreferencesUI.py:7297 +#: flatcamGUI/PreferencesUI.py:7317 flatcamGUI/PreferencesUI.py:7337 +#: flatcamGUI/PreferencesUI.py:7399 flatcamTools/ToolRulesCheck.py:301 +#: flatcamTools/ToolRulesCheck.py:324 flatcamTools/ToolRulesCheck.py:347 +#: flatcamTools/ToolRulesCheck.py:370 flatcamTools/ToolRulesCheck.py:393 +#: flatcamTools/ToolRulesCheck.py:416 flatcamTools/ToolRulesCheck.py:464 +msgid "Minimum acceptable clearance value." +msgstr "Minimum acceptable clearance value." + +#: flatcamGUI/PreferencesUI.py:7242 flatcamTools/ToolRulesCheck.py:309 +#: flatcamTools/ToolRulesCheck.py:1217 flatcamTools/ToolRulesCheck.py:1223 +#: flatcamTools/ToolRulesCheck.py:1236 flatcamTools/ToolRulesCheck.py:1243 +msgid "Copper to Outline clearance" +msgstr "Copper to Outline clearance" + +#: flatcamGUI/PreferencesUI.py:7244 flatcamTools/ToolRulesCheck.py:311 +msgid "" +"This checks if the minimum clearance between copper\n" +"features and the outline is met." +msgstr "" +"This checks if the minimum clearance between copper\n" +"features and the outline is met." + +#: flatcamGUI/PreferencesUI.py:7262 flatcamTools/ToolRulesCheck.py:332 +msgid "Silk to Silk Clearance" +msgstr "Silk to Silk Clearance" + +#: flatcamGUI/PreferencesUI.py:7264 flatcamTools/ToolRulesCheck.py:334 +msgid "" +"This checks if the minimum clearance between silkscreen\n" +"features and silkscreen features is met." +msgstr "" +"This checks if the minimum clearance between silkscreen\n" +"features and silkscreen features is met." + +#: flatcamGUI/PreferencesUI.py:7282 flatcamTools/ToolRulesCheck.py:355 +#: flatcamTools/ToolRulesCheck.py:1326 flatcamTools/ToolRulesCheck.py:1332 +#: flatcamTools/ToolRulesCheck.py:1350 +msgid "Silk to Solder Mask Clearance" +msgstr "Silk to Solder Mask Clearance" + +#: flatcamGUI/PreferencesUI.py:7284 flatcamTools/ToolRulesCheck.py:357 +msgid "" +"This checks if the minimum clearance between silkscreen\n" +"features and soldermask features is met." +msgstr "" +"This checks if the minimum clearance between silkscreen\n" +"features and soldermask features is met." + +#: flatcamGUI/PreferencesUI.py:7302 flatcamTools/ToolRulesCheck.py:378 +#: flatcamTools/ToolRulesCheck.py:1380 flatcamTools/ToolRulesCheck.py:1386 +#: flatcamTools/ToolRulesCheck.py:1400 flatcamTools/ToolRulesCheck.py:1407 +msgid "Silk to Outline Clearance" +msgstr "Silk to Outline Clearance" + +#: flatcamGUI/PreferencesUI.py:7304 flatcamTools/ToolRulesCheck.py:380 +msgid "" +"This checks if the minimum clearance between silk\n" +"features and the outline is met." +msgstr "" +"This checks if the minimum clearance between silk\n" +"features and the outline is met." + +#: flatcamGUI/PreferencesUI.py:7322 flatcamTools/ToolRulesCheck.py:401 +#: flatcamTools/ToolRulesCheck.py:1418 flatcamTools/ToolRulesCheck.py:1445 +msgid "Minimum Solder Mask Sliver" +msgstr "Minimum Solder Mask Sliver" + +#: flatcamGUI/PreferencesUI.py:7324 flatcamTools/ToolRulesCheck.py:403 +msgid "" +"This checks if the minimum clearance between soldermask\n" +"features and soldermask features is met." +msgstr "" +"This checks if the minimum clearance between soldermask\n" +"features and soldermask features is met." + +#: flatcamGUI/PreferencesUI.py:7342 flatcamTools/ToolRulesCheck.py:424 +#: flatcamTools/ToolRulesCheck.py:1483 flatcamTools/ToolRulesCheck.py:1489 +#: flatcamTools/ToolRulesCheck.py:1505 flatcamTools/ToolRulesCheck.py:1512 +msgid "Minimum Annular Ring" +msgstr "Minimum Annular Ring" + +#: flatcamGUI/PreferencesUI.py:7344 flatcamTools/ToolRulesCheck.py:426 +msgid "" +"This checks if the minimum copper ring left by drilling\n" +"a hole into a pad is met." +msgstr "" +"This checks if the minimum copper ring left by drilling\n" +"a hole into a pad is met." + +#: flatcamGUI/PreferencesUI.py:7357 flatcamTools/ToolRulesCheck.py:439 +msgid "Minimum acceptable ring value." +msgstr "Minimum acceptable ring value." + +#: flatcamGUI/PreferencesUI.py:7364 flatcamTools/ToolRulesCheck.py:449 +#: flatcamTools/ToolRulesCheck.py:873 +msgid "Hole to Hole Clearance" +msgstr "Hole to Hole Clearance" + +#: flatcamGUI/PreferencesUI.py:7366 flatcamTools/ToolRulesCheck.py:451 +msgid "" +"This checks if the minimum clearance between a drill hole\n" +"and another drill hole is met." +msgstr "" +"This checks if the minimum clearance between a drill hole\n" +"and another drill hole is met." + +#: flatcamGUI/PreferencesUI.py:7379 flatcamTools/ToolRulesCheck.py:487 +msgid "Minimum acceptable drill size." +msgstr "Minimum acceptable drill size." + +#: flatcamGUI/PreferencesUI.py:7384 flatcamTools/ToolRulesCheck.py:472 +#: flatcamTools/ToolRulesCheck.py:847 +msgid "Hole Size" +msgstr "Hole Size" + +#: flatcamGUI/PreferencesUI.py:7386 flatcamTools/ToolRulesCheck.py:474 +msgid "" +"This checks if the drill holes\n" +"sizes are above the threshold." +msgstr "" +"This checks if the drill holes\n" +"sizes are above the threshold." + +#: flatcamGUI/PreferencesUI.py:7411 +msgid "Optimal Tool Options" +msgstr "Optimal Tool Options" + +#: flatcamGUI/PreferencesUI.py:7417 +msgid "" +"A tool to find the minimum distance between\n" +"every two Gerber geometric elements" +msgstr "" +"A tool to find the minimum distance between\n" +"every two Gerber geometric elements" + +#: flatcamGUI/PreferencesUI.py:7432 flatcamTools/ToolOptimal.py:78 +msgid "Precision" +msgstr "Precision" + +#: flatcamGUI/PreferencesUI.py:7434 +msgid "Number of decimals for the distances and coordinates in this tool." +msgstr "Number of decimals for the distances and coordinates in this tool." + +#: flatcamGUI/PreferencesUI.py:7448 +msgid "QRCode Tool Options" +msgstr "QRCode Tool Options" + +#: flatcamGUI/PreferencesUI.py:7454 +msgid "" +"A tool to create a QRCode that can be inserted\n" +"into a selected Gerber file, or it can be exported as a file." +msgstr "" +"A tool to create a QRCode that can be inserted\n" +"into a selected Gerber file, or it can be exported as a file." + +#: flatcamGUI/PreferencesUI.py:7466 flatcamTools/ToolQRCode.py:100 +msgid "Version" +msgstr "Version" + +#: flatcamGUI/PreferencesUI.py:7468 flatcamTools/ToolQRCode.py:102 +msgid "" +"QRCode version can have values from 1 (21x21 boxes)\n" +"to 40 (177x177 boxes)." +msgstr "" +"QRCode version can have values from 1 (21x21 boxes)\n" +"to 40 (177x177 boxes)." + +#: flatcamGUI/PreferencesUI.py:7479 flatcamTools/ToolQRCode.py:113 +msgid "Error correction" +msgstr "Error correction" + +#: flatcamGUI/PreferencesUI.py:7481 flatcamGUI/PreferencesUI.py:7492 +#: flatcamTools/ToolQRCode.py:115 flatcamTools/ToolQRCode.py:126 +#, python-format +msgid "" +"Parameter that controls the error correction used for the QR Code.\n" +"L = maximum 7%% errors can be corrected\n" +"M = maximum 15%% errors can be corrected\n" +"Q = maximum 25%% errors can be corrected\n" +"H = maximum 30%% errors can be corrected." +msgstr "" +"Parameter that controls the error correction used for the QR Code.\n" +"L = maximum 7%% errors can be corrected\n" +"M = maximum 15%% errors can be corrected\n" +"Q = maximum 25%% errors can be corrected\n" +"H = maximum 30%% errors can be corrected." + +#: flatcamGUI/PreferencesUI.py:7502 flatcamTools/ToolQRCode.py:136 +msgid "Box Size" +msgstr "Box Size" + +#: flatcamGUI/PreferencesUI.py:7504 flatcamTools/ToolQRCode.py:138 +msgid "" +"Box size control the overall size of the QRcode\n" +"by adjusting the size of each box in the code." +msgstr "" +"Box size control the overall size of the QRcode\n" +"by adjusting the size of each box in the code." + +#: flatcamGUI/PreferencesUI.py:7515 flatcamTools/ToolQRCode.py:149 +msgid "Border Size" +msgstr "Border Size" + +#: flatcamGUI/PreferencesUI.py:7517 flatcamTools/ToolQRCode.py:151 +msgid "" +"Size of the QRCode border. How many boxes thick is the border.\n" +"Default value is 4. The width of the clearance around the QRCode." +msgstr "" +"Size of the QRCode border. How many boxes thick is the border.\n" +"Default value is 4. The width of the clearance around the QRCode." + +#: flatcamGUI/PreferencesUI.py:7528 flatcamTools/ToolQRCode.py:162 +msgid "QRCode Data" +msgstr "QRCode Data" + +#: flatcamGUI/PreferencesUI.py:7530 flatcamTools/ToolQRCode.py:164 +msgid "QRCode Data. Alphanumeric text to be encoded in the QRCode." +msgstr "QRCode Data. Alphanumeric text to be encoded in the QRCode." + +#: flatcamGUI/PreferencesUI.py:7534 flatcamTools/ToolQRCode.py:168 +msgid "Add here the text to be included in the QRCode..." +msgstr "Add here the text to be included in the QRCode..." + +#: flatcamGUI/PreferencesUI.py:7540 flatcamTools/ToolQRCode.py:174 +msgid "Polarity" +msgstr "Polarity" + +#: flatcamGUI/PreferencesUI.py:7542 flatcamTools/ToolQRCode.py:176 +msgid "" +"Choose the polarity of the QRCode.\n" +"It can be drawn in a negative way (squares are clear)\n" +"or in a positive way (squares are opaque)." +msgstr "" +"Choose the polarity of the QRCode.\n" +"It can be drawn in a negative way (squares are clear)\n" +"or in a positive way (squares are opaque)." + +#: flatcamGUI/PreferencesUI.py:7546 flatcamTools/ToolFilm.py:296 +#: flatcamTools/ToolQRCode.py:180 +msgid "Negative" +msgstr "Negative" + +#: flatcamGUI/PreferencesUI.py:7547 flatcamTools/ToolFilm.py:295 +#: flatcamTools/ToolQRCode.py:181 +msgid "Positive" +msgstr "Positive" + +#: flatcamGUI/PreferencesUI.py:7549 flatcamTools/ToolQRCode.py:183 +msgid "" +"Choose the type of QRCode to be created.\n" +"If added on a Silkscreen Gerber file the QRCode may\n" +"be added as positive. If it is added to a Copper Gerber\n" +"file then perhaps the QRCode can be added as negative." +msgstr "" +"Choose the type of QRCode to be created.\n" +"If added on a Silkscreen Gerber file the QRCode may\n" +"be added as positive. If it is added to a Copper Gerber\n" +"file then perhaps the QRCode can be added as negative." + +#: flatcamGUI/PreferencesUI.py:7560 flatcamGUI/PreferencesUI.py:7566 +#: flatcamTools/ToolQRCode.py:194 flatcamTools/ToolQRCode.py:200 +msgid "" +"The bounding box, meaning the empty space that surrounds\n" +"the QRCode geometry, can have a rounded or a square shape." +msgstr "" +"The bounding box, meaning the empty space that surrounds\n" +"the QRCode geometry, can have a rounded or a square shape." + +#: flatcamGUI/PreferencesUI.py:7573 flatcamTools/ToolQRCode.py:228 +msgid "Fill Color" +msgstr "Fill Color" + +#: flatcamGUI/PreferencesUI.py:7575 flatcamTools/ToolQRCode.py:230 +msgid "Set the QRCode fill color (squares color)." +msgstr "Set the QRCode fill color (squares color)." + +#: flatcamGUI/PreferencesUI.py:7594 flatcamTools/ToolQRCode.py:252 +msgid "Back Color" +msgstr "Back Color" + +#: flatcamGUI/PreferencesUI.py:7596 flatcamTools/ToolQRCode.py:254 +msgid "Set the QRCode background color." +msgstr "Set the QRCode background color." + +#: flatcamGUI/PreferencesUI.py:7636 +msgid "Copper Thieving Tool Options" +msgstr "Copper Thieving Tool Options" + +#: flatcamGUI/PreferencesUI.py:7648 +msgid "" +"A tool to generate a Copper Thieving that can be added\n" +"to a selected Gerber file." +msgstr "" +"A tool to generate a Copper Thieving that can be added\n" +"to a selected Gerber file." + +#: flatcamGUI/PreferencesUI.py:7656 +msgid "Number of steps (lines) used to interpolate circles." +msgstr "Number of steps (lines) used to interpolate circles." + +#: flatcamGUI/PreferencesUI.py:7666 flatcamGUI/PreferencesUI.py:7870 +#: flatcamTools/ToolCopperThieving.py:96 flatcamTools/ToolCopperThieving.py:431 +msgid "Clearance" +msgstr "Clearance" + +#: flatcamGUI/PreferencesUI.py:7668 +msgid "" +"This set the distance between the copper Thieving components\n" +"(the polygon fill may be split in multiple polygons)\n" +"and the copper traces in the Gerber file." +msgstr "" +"This set the distance between the copper Thieving components\n" +"(the polygon fill may be split in multiple polygons)\n" +"and the copper traces in the Gerber file." + +#: flatcamGUI/PreferencesUI.py:7699 flatcamTools/ToolCopperThieving.py:129 +msgid "Reference:" +msgstr "Reference:" + +#: flatcamGUI/PreferencesUI.py:7701 +msgid "" +"- 'Itself' - the copper Thieving extent is based on the object extent.\n" +"- 'Area Selection' - left mouse click to start selection of the area to be " +"filled.\n" +"- 'Reference Object' - will do copper thieving within the area specified by " +"another object." +msgstr "" +"- 'Itself' - the copper Thieving extent is based on the object extent.\n" +"- 'Area Selection' - left mouse click to start selection of the area to be " +"filled.\n" +"- 'Reference Object' - will do copper thieving within the area specified by " +"another object." + +#: flatcamGUI/PreferencesUI.py:7710 flatcamGUI/PreferencesUI.py:8175 +#: flatcamGUI/PreferencesUI.py:8287 flatcamGUI/PreferencesUI.py:8387 +#: flatcamGUI/PreferencesUI.py:8501 flatcamTools/ToolCopperThieving.py:171 +#: flatcamTools/ToolExtractDrills.py:102 flatcamTools/ToolExtractDrills.py:240 +#: flatcamTools/ToolPunchGerber.py:113 flatcamTools/ToolPunchGerber.py:268 +msgid "Rectangular" +msgstr "Rectangular" + +#: flatcamGUI/PreferencesUI.py:7711 flatcamTools/ToolCopperThieving.py:172 +msgid "Minimal" +msgstr "Minimal" + +#: flatcamGUI/PreferencesUI.py:7713 flatcamTools/ToolCopperThieving.py:174 +#: flatcamTools/ToolFilm.py:113 +msgid "Box Type:" +msgstr "Box Type:" + +#: flatcamGUI/PreferencesUI.py:7715 flatcamTools/ToolCopperThieving.py:176 +msgid "" +"- 'Rectangular' - the bounding box will be of rectangular shape.\n" +"- 'Minimal' - the bounding box will be the convex hull shape." +msgstr "" +"- 'Rectangular' - the bounding box will be of rectangular shape.\n" +"- 'Minimal' - the bounding box will be the convex hull shape." + +#: flatcamGUI/PreferencesUI.py:7729 flatcamTools/ToolCopperThieving.py:192 +msgid "Dots Grid" +msgstr "Dots Grid" + +#: flatcamGUI/PreferencesUI.py:7730 flatcamTools/ToolCopperThieving.py:193 +msgid "Squares Grid" +msgstr "Squares Grid" + +#: flatcamGUI/PreferencesUI.py:7731 flatcamTools/ToolCopperThieving.py:194 +msgid "Lines Grid" +msgstr "Lines Grid" + +#: flatcamGUI/PreferencesUI.py:7733 flatcamTools/ToolCopperThieving.py:196 +msgid "Fill Type:" +msgstr "Fill Type:" + +#: flatcamGUI/PreferencesUI.py:7735 flatcamTools/ToolCopperThieving.py:198 +msgid "" +"- 'Solid' - copper thieving will be a solid polygon.\n" +"- 'Dots Grid' - the empty area will be filled with a pattern of dots.\n" +"- 'Squares Grid' - the empty area will be filled with a pattern of squares.\n" +"- 'Lines Grid' - the empty area will be filled with a pattern of lines." +msgstr "" +"- 'Solid' - copper thieving will be a solid polygon.\n" +"- 'Dots Grid' - the empty area will be filled with a pattern of dots.\n" +"- 'Squares Grid' - the empty area will be filled with a pattern of squares.\n" +"- 'Lines Grid' - the empty area will be filled with a pattern of lines." + +#: flatcamGUI/PreferencesUI.py:7743 flatcamTools/ToolCopperThieving.py:217 +msgid "Dots Grid Parameters" +msgstr "Dots Grid Parameters" + +#: flatcamGUI/PreferencesUI.py:7749 flatcamTools/ToolCopperThieving.py:223 +msgid "Dot diameter in Dots Grid." +msgstr "Dot diameter in Dots Grid." + +#: flatcamGUI/PreferencesUI.py:7760 flatcamGUI/PreferencesUI.py:7789 +#: flatcamGUI/PreferencesUI.py:7818 flatcamTools/ToolCopperThieving.py:234 +#: flatcamTools/ToolCopperThieving.py:274 +#: flatcamTools/ToolCopperThieving.py:314 +msgid "Spacing" +msgstr "Spacing" + +#: flatcamGUI/PreferencesUI.py:7762 flatcamTools/ToolCopperThieving.py:236 +msgid "Distance between each two dots in Dots Grid." +msgstr "Distance between each two dots in Dots Grid." + +#: flatcamGUI/PreferencesUI.py:7772 flatcamTools/ToolCopperThieving.py:257 +msgid "Squares Grid Parameters" +msgstr "Squares Grid Parameters" + +#: flatcamGUI/PreferencesUI.py:7778 flatcamTools/ToolCopperThieving.py:263 +msgid "Square side size in Squares Grid." +msgstr "Square side size in Squares Grid." + +#: flatcamGUI/PreferencesUI.py:7791 flatcamTools/ToolCopperThieving.py:276 +msgid "Distance between each two squares in Squares Grid." +msgstr "Distance between each two squares in Squares Grid." + +#: flatcamGUI/PreferencesUI.py:7801 flatcamTools/ToolCopperThieving.py:297 +msgid "Lines Grid Parameters" +msgstr "Lines Grid Parameters" + +#: flatcamGUI/PreferencesUI.py:7807 flatcamTools/ToolCopperThieving.py:303 +msgid "Line thickness size in Lines Grid." +msgstr "Line thickness size in Lines Grid." + +#: flatcamGUI/PreferencesUI.py:7820 flatcamTools/ToolCopperThieving.py:316 +msgid "Distance between each two lines in Lines Grid." +msgstr "Distance between each two lines in Lines Grid." + +#: flatcamGUI/PreferencesUI.py:7830 flatcamTools/ToolCopperThieving.py:354 +msgid "Robber Bar Parameters" +msgstr "Robber Bar Parameters" + +#: flatcamGUI/PreferencesUI.py:7832 flatcamTools/ToolCopperThieving.py:356 +msgid "" +"Parameters used for the robber bar.\n" +"Robber bar = copper border to help in pattern hole plating." +msgstr "" +"Parameters used for the robber bar.\n" +"Robber bar = copper border to help in pattern hole plating." + +#: flatcamGUI/PreferencesUI.py:7840 flatcamTools/ToolCopperThieving.py:364 +msgid "Bounding box margin for robber bar." +msgstr "Bounding box margin for robber bar." + +#: flatcamGUI/PreferencesUI.py:7851 flatcamTools/ToolCopperThieving.py:375 +msgid "Thickness" +msgstr "Thickness" + +#: flatcamGUI/PreferencesUI.py:7853 flatcamTools/ToolCopperThieving.py:377 +msgid "The robber bar thickness." +msgstr "The robber bar thickness." + +#: flatcamGUI/PreferencesUI.py:7863 flatcamTools/ToolCopperThieving.py:408 +msgid "Pattern Plating Mask" +msgstr "Pattern Plating Mask" + +#: flatcamGUI/PreferencesUI.py:7865 flatcamTools/ToolCopperThieving.py:410 +msgid "Generate a mask for pattern plating." +msgstr "Generate a mask for pattern plating." + +#: flatcamGUI/PreferencesUI.py:7872 flatcamTools/ToolCopperThieving.py:433 +msgid "" +"The distance between the possible copper thieving elements\n" +"and/or robber bar and the actual openings in the mask." +msgstr "" +"The distance between the possible copper thieving elements\n" +"and/or robber bar and the actual openings in the mask." + +#: flatcamGUI/PreferencesUI.py:7891 +msgid "Fiducials Tool Options" +msgstr "Fiducials Tool Options" + +#: flatcamGUI/PreferencesUI.py:7902 flatcamGUI/PreferencesUI.py:8018 +#: flatcamGUI/PreferencesUI.py:8137 flatcamGUI/PreferencesUI.py:8349 +#: flatcamTools/ToolCopperThieving.py:91 flatcamTools/ToolFiducials.py:151 +msgid "Parameters used for this tool." +msgstr "Parameters used for this tool." + +#: flatcamGUI/PreferencesUI.py:7909 flatcamTools/ToolFiducials.py:158 +msgid "" +"This set the fiducial diameter if fiducial type is circular,\n" +"otherwise is the size of the fiducial.\n" +"The soldermask opening is double than that." +msgstr "" +"This set the fiducial diameter if fiducial type is circular,\n" +"otherwise is the size of the fiducial.\n" +"The soldermask opening is double than that." + +#: flatcamGUI/PreferencesUI.py:7937 flatcamTools/ToolFiducials.py:186 +msgid "Auto" +msgstr "Auto" + +#: flatcamGUI/PreferencesUI.py:7938 flatcamTools/ToolFiducials.py:187 +msgid "Manual" +msgstr "Manual" + +#: flatcamGUI/PreferencesUI.py:7940 flatcamTools/ToolFiducials.py:189 +msgid "Mode:" +msgstr "Mode:" + +#: flatcamGUI/PreferencesUI.py:7942 +msgid "" +"- 'Auto' - automatic placement of fiducials in the corners of the bounding " +"box.\n" +"- 'Manual' - manual placement of fiducials." +msgstr "" +"- 'Auto' - automatic placement of fiducials in the corners of the bounding " +"box.\n" +"- 'Manual' - manual placement of fiducials." + +#: flatcamGUI/PreferencesUI.py:7950 flatcamTools/ToolFiducials.py:199 +msgid "Up" +msgstr "Up" + +#: flatcamGUI/PreferencesUI.py:7951 flatcamTools/ToolFiducials.py:200 +msgid "Down" +msgstr "Down" + +#: flatcamGUI/PreferencesUI.py:7954 flatcamTools/ToolFiducials.py:203 +msgid "Second fiducial" +msgstr "Second fiducial" + +#: flatcamGUI/PreferencesUI.py:7956 flatcamTools/ToolFiducials.py:205 +msgid "" +"The position for the second fiducial.\n" +"- 'Up' - the order is: bottom-left, top-left, top-right.\n" +"- 'Down' - the order is: bottom-left, bottom-right, top-right.\n" +"- 'None' - there is no second fiducial. The order is: bottom-left, top-right." +msgstr "" +"The position for the second fiducial.\n" +"- 'Up' - the order is: bottom-left, top-left, top-right.\n" +"- 'Down' - the order is: bottom-left, bottom-right, top-right.\n" +"- 'None' - there is no second fiducial. The order is: bottom-left, top-right." + +#: flatcamGUI/PreferencesUI.py:7972 flatcamTools/ToolFiducials.py:221 +msgid "Cross" +msgstr "Cross" + +#: flatcamGUI/PreferencesUI.py:7973 flatcamTools/ToolFiducials.py:222 +msgid "Chess" +msgstr "Chess" + +#: flatcamGUI/PreferencesUI.py:7976 flatcamTools/ToolFiducials.py:224 +msgid "Fiducial Type" +msgstr "Fiducial Type" + +#: flatcamGUI/PreferencesUI.py:7978 flatcamTools/ToolFiducials.py:226 +msgid "" +"The type of fiducial.\n" +"- 'Circular' - this is the regular fiducial.\n" +"- 'Cross' - cross lines fiducial.\n" +"- 'Chess' - chess pattern fiducial." +msgstr "" +"The type of fiducial.\n" +"- 'Circular' - this is the regular fiducial.\n" +"- 'Cross' - cross lines fiducial.\n" +"- 'Chess' - chess pattern fiducial." + +#: flatcamGUI/PreferencesUI.py:7987 flatcamTools/ToolFiducials.py:235 +msgid "Line thickness" +msgstr "Line thickness" + +#: flatcamGUI/PreferencesUI.py:8007 +msgid "Calibration Tool Options" +msgstr "Calibration Tool Options" + +#: flatcamGUI/PreferencesUI.py:8023 flatcamTools/ToolCalibration.py:181 +msgid "Source Type" +msgstr "Source Type" + +#: flatcamGUI/PreferencesUI.py:8024 flatcamTools/ToolCalibration.py:182 +msgid "" +"The source of calibration points.\n" +"It can be:\n" +"- Object -> click a hole geo for Excellon or a pad for Gerber\n" +"- Free -> click freely on canvas to acquire the calibration points" +msgstr "" +"The source of calibration points.\n" +"It can be:\n" +"- Object -> click a hole geo for Excellon or a pad for Gerber\n" +"- Free -> click freely on canvas to acquire the calibration points" + +#: flatcamGUI/PreferencesUI.py:8029 flatcamTools/ToolCalibration.py:187 +msgid "Free" +msgstr "Free" + +#: flatcamGUI/PreferencesUI.py:8043 flatcamTools/ToolCalibration.py:76 +msgid "Height (Z) for travelling between the points." +msgstr "Height (Z) for travelling between the points." + +#: flatcamGUI/PreferencesUI.py:8055 flatcamTools/ToolCalibration.py:88 +msgid "Verification Z" +msgstr "Verification Z" + +#: flatcamGUI/PreferencesUI.py:8057 flatcamTools/ToolCalibration.py:90 +msgid "Height (Z) for checking the point." +msgstr "Height (Z) for checking the point." + +#: flatcamGUI/PreferencesUI.py:8069 flatcamTools/ToolCalibration.py:102 +msgid "Zero Z tool" +msgstr "Zero Z tool" + +#: flatcamGUI/PreferencesUI.py:8071 flatcamTools/ToolCalibration.py:104 +msgid "" +"Include a sequence to zero the height (Z)\n" +"of the verification tool." +msgstr "" +"Include a sequence to zero the height (Z)\n" +"of the verification tool." + +#: flatcamGUI/PreferencesUI.py:8080 flatcamTools/ToolCalibration.py:113 +msgid "Height (Z) for mounting the verification probe." +msgstr "Height (Z) for mounting the verification probe." + +#: flatcamGUI/PreferencesUI.py:8094 flatcamTools/ToolCalibration.py:127 +msgid "" +"Toolchange X,Y position.\n" +"If no value is entered then the current\n" +"(x, y) point will be used," +msgstr "" +"Toolchange X,Y position.\n" +"If no value is entered then the current\n" +"(x, y) point will be used," + +#: flatcamGUI/PreferencesUI.py:8105 flatcamTools/ToolCalibration.py:153 +msgid "Second point" +msgstr "Second point" + +#: flatcamGUI/PreferencesUI.py:8107 flatcamTools/ToolCalibration.py:155 +msgid "" +"Second point in the Gcode verification can be:\n" +"- top-left -> the user will align the PCB vertically\n" +"- bottom-right -> the user will align the PCB horizontally" +msgstr "" +"Second point in the Gcode verification can be:\n" +"- top-left -> the user will align the PCB vertically\n" +"- bottom-right -> the user will align the PCB horizontally" + +#: flatcamGUI/PreferencesUI.py:8126 +msgid "Extract Drills Options" +msgstr "Extract Drills Options" + +#: flatcamGUI/PreferencesUI.py:8141 flatcamGUI/PreferencesUI.py:8353 +#: flatcamTools/ToolExtractDrills.py:68 flatcamTools/ToolPunchGerber.py:75 +msgid "Processed Pads Type" +msgstr "Processed Pads Type" + +#: flatcamGUI/PreferencesUI.py:8143 flatcamGUI/PreferencesUI.py:8355 +#: flatcamTools/ToolExtractDrills.py:70 flatcamTools/ToolPunchGerber.py:77 +msgid "" +"The type of pads shape to be processed.\n" +"If the PCB has many SMD pads with rectangular pads,\n" +"disable the Rectangular aperture." +msgstr "" +"The type of pads shape to be processed.\n" +"If the PCB has many SMD pads with rectangular pads,\n" +"disable the Rectangular aperture." + +#: flatcamGUI/PreferencesUI.py:8153 flatcamGUI/PreferencesUI.py:8365 +#: flatcamTools/ToolExtractDrills.py:80 flatcamTools/ToolPunchGerber.py:91 +msgid "Process Circular Pads." +msgstr "Process Circular Pads." + +#: flatcamGUI/PreferencesUI.py:8159 flatcamGUI/PreferencesUI.py:8261 +#: flatcamGUI/PreferencesUI.py:8371 flatcamGUI/PreferencesUI.py:8475 +#: flatcamTools/ToolExtractDrills.py:86 flatcamTools/ToolExtractDrills.py:214 +#: flatcamTools/ToolPunchGerber.py:97 flatcamTools/ToolPunchGerber.py:242 +msgid "Oblong" +msgstr "Oblong" + +#: flatcamGUI/PreferencesUI.py:8161 flatcamGUI/PreferencesUI.py:8373 +#: flatcamTools/ToolExtractDrills.py:88 flatcamTools/ToolPunchGerber.py:99 +msgid "Process Oblong Pads." +msgstr "Process Oblong Pads." + +#: flatcamGUI/PreferencesUI.py:8169 flatcamGUI/PreferencesUI.py:8381 +#: flatcamTools/ToolExtractDrills.py:96 flatcamTools/ToolPunchGerber.py:107 +msgid "Process Square Pads." +msgstr "Process Square Pads." + +#: flatcamGUI/PreferencesUI.py:8177 flatcamGUI/PreferencesUI.py:8389 +#: flatcamTools/ToolExtractDrills.py:104 flatcamTools/ToolPunchGerber.py:115 +msgid "Process Rectangular Pads." +msgstr "Process Rectangular Pads." + +#: flatcamGUI/PreferencesUI.py:8183 flatcamGUI/PreferencesUI.py:8300 +#: flatcamGUI/PreferencesUI.py:8395 flatcamGUI/PreferencesUI.py:8514 +#: flatcamTools/ToolExtractDrills.py:110 flatcamTools/ToolExtractDrills.py:253 +#: flatcamTools/ToolProperties.py:172 flatcamTools/ToolPunchGerber.py:121 +#: flatcamTools/ToolPunchGerber.py:281 +msgid "Others" +msgstr "Others" + +#: flatcamGUI/PreferencesUI.py:8185 flatcamGUI/PreferencesUI.py:8397 +#: flatcamTools/ToolExtractDrills.py:112 flatcamTools/ToolPunchGerber.py:123 +msgid "Process pads not in the categories above." +msgstr "Process pads not in the categories above." + +#: flatcamGUI/PreferencesUI.py:8198 flatcamGUI/PreferencesUI.py:8222 +#: flatcamGUI/PreferencesUI.py:8411 flatcamGUI/PreferencesUI.py:8436 +#: flatcamTools/ToolExtractDrills.py:139 flatcamTools/ToolExtractDrills.py:156 +#: flatcamTools/ToolPunchGerber.py:150 flatcamTools/ToolPunchGerber.py:184 +msgid "Fixed Diameter" +msgstr "Fixed Diameter" + +#: flatcamGUI/PreferencesUI.py:8199 flatcamGUI/PreferencesUI.py:8239 +#: flatcamGUI/PreferencesUI.py:8412 flatcamGUI/PreferencesUI.py:8453 +#: flatcamTools/ToolExtractDrills.py:140 flatcamTools/ToolExtractDrills.py:192 +#: flatcamTools/ToolPunchGerber.py:151 flatcamTools/ToolPunchGerber.py:214 +msgid "Fixed Annular Ring" +msgstr "Fixed Annular Ring" + +#: flatcamGUI/PreferencesUI.py:8200 flatcamGUI/PreferencesUI.py:8413 +#: flatcamTools/ToolExtractDrills.py:141 flatcamTools/ToolPunchGerber.py:152 +msgid "Proportional" +msgstr "Proportional" + +#: flatcamGUI/PreferencesUI.py:8206 flatcamTools/ToolExtractDrills.py:130 +msgid "" +"The method for processing pads. Can be:\n" +"- Fixed Diameter -> all holes will have a set size\n" +"- Fixed Annular Ring -> all holes will have a set annular ring\n" +"- Proportional -> each hole size will be a fraction of the pad size" +msgstr "" +"The method for processing pads. Can be:\n" +"- Fixed Diameter -> all holes will have a set size\n" +"- Fixed Annular Ring -> all holes will have a set annular ring\n" +"- Proportional -> each hole size will be a fraction of the pad size" + +#: flatcamGUI/PreferencesUI.py:8232 flatcamGUI/PreferencesUI.py:8446 +#: flatcamTools/ToolExtractDrills.py:166 flatcamTools/ToolPunchGerber.py:194 +msgid "Fixed hole diameter." +msgstr "Fixed hole diameter." + +#: flatcamGUI/PreferencesUI.py:8241 flatcamGUI/PreferencesUI.py:8455 +#: flatcamTools/ToolExtractDrills.py:194 flatcamTools/ToolPunchGerber.py:216 +msgid "" +"The size of annular ring.\n" +"The copper sliver between the hole exterior\n" +"and the margin of the copper pad." +msgstr "" +"The size of annular ring.\n" +"The copper sliver between the hole exterior\n" +"and the margin of the copper pad." + +#: flatcamGUI/PreferencesUI.py:8250 flatcamGUI/PreferencesUI.py:8464 +#: flatcamTools/ToolExtractDrills.py:203 flatcamTools/ToolPunchGerber.py:231 +msgid "The size of annular ring for circular pads." +msgstr "The size of annular ring for circular pads." + +#: flatcamGUI/PreferencesUI.py:8263 flatcamGUI/PreferencesUI.py:8477 +#: flatcamTools/ToolExtractDrills.py:216 flatcamTools/ToolPunchGerber.py:244 +msgid "The size of annular ring for oblong pads." +msgstr "The size of annular ring for oblong pads." + +#: flatcamGUI/PreferencesUI.py:8276 flatcamGUI/PreferencesUI.py:8490 +#: flatcamTools/ToolExtractDrills.py:229 flatcamTools/ToolPunchGerber.py:257 +msgid "The size of annular ring for square pads." +msgstr "The size of annular ring for square pads." + +#: flatcamGUI/PreferencesUI.py:8289 flatcamGUI/PreferencesUI.py:8503 +#: flatcamTools/ToolExtractDrills.py:242 flatcamTools/ToolPunchGerber.py:270 +msgid "The size of annular ring for rectangular pads." +msgstr "The size of annular ring for rectangular pads." + +#: flatcamGUI/PreferencesUI.py:8302 flatcamGUI/PreferencesUI.py:8516 +#: flatcamTools/ToolExtractDrills.py:255 flatcamTools/ToolPunchGerber.py:283 +msgid "The size of annular ring for other pads." +msgstr "The size of annular ring for other pads." + +#: flatcamGUI/PreferencesUI.py:8312 flatcamGUI/PreferencesUI.py:8526 +#: flatcamTools/ToolExtractDrills.py:276 flatcamTools/ToolPunchGerber.py:299 +msgid "Proportional Diameter" +msgstr "Proportional Diameter" + +#: flatcamGUI/PreferencesUI.py:8321 flatcamGUI/PreferencesUI.py:8535 +msgid "Factor" +msgstr "Factor" + +#: flatcamGUI/PreferencesUI.py:8323 flatcamGUI/PreferencesUI.py:8537 +#: flatcamTools/ToolExtractDrills.py:287 flatcamTools/ToolPunchGerber.py:310 +msgid "" +"Proportional Diameter.\n" +"The hole diameter will be a fraction of the pad size." +msgstr "" +"Proportional Diameter.\n" +"The hole diameter will be a fraction of the pad size." + +#: flatcamGUI/PreferencesUI.py:8338 +msgid "Punch Gerber Options" +msgstr "Punch Gerber Options" + +#: flatcamGUI/PreferencesUI.py:8419 flatcamTools/ToolPunchGerber.py:141 +#| msgid "" +#| "The punch hole source can be:\n" +#| "- Excellon Object-> the Excellon object drills center will serve as " +#| "reference.\n" +#| "- Fixed Diameter -> will try to use the pads center as reference adding " +#| "fixed diameter holes.\n" +#| "- Fixed Annular Ring -> will try to keep a set annular ring.\n" +#| "- Proportional -> will make a Gerber punch hole having the diameter a " +#| "percentage of the pad diameter.\n" +msgid "" +"The punch hole source can be:\n" +"- Excellon Object-> the Excellon object drills center will serve as " +"reference.\n" +"- Fixed Diameter -> will try to use the pads center as reference adding " +"fixed diameter holes.\n" +"- Fixed Annular Ring -> will try to keep a set annular ring.\n" +"- Proportional -> will make a Gerber punch hole having the diameter a " +"percentage of the pad diameter." +msgstr "" +"The punch hole source can be:\n" +"- Excellon Object-> the Excellon object drills center will serve as " +"reference.\n" +"- Fixed Diameter -> will try to use the pads center as reference adding " +"fixed diameter holes.\n" +"- Fixed Annular Ring -> will try to keep a set annular ring.\n" +"- Proportional -> will make a Gerber punch hole having the diameter a " +"percentage of the pad diameter." + +#: flatcamGUI/PreferencesUI.py:8552 +msgid "Invert Gerber Tool Options" +msgstr "Invert Gerber Tool Options" + +#: flatcamGUI/PreferencesUI.py:8558 +msgid "" +"A tool to invert Gerber geometry from positive to negative\n" +"and in revers." +msgstr "" +"A tool to invert Gerber geometry from positive to negative\n" +"and in revers." + +#: flatcamGUI/PreferencesUI.py:8572 flatcamTools/ToolInvertGerber.py:90 +msgid "" +"Distance by which to avoid\n" +"the edges of the Gerber object." +msgstr "" +"Distance by which to avoid\n" +"the edges of the Gerber object." + +#: flatcamGUI/PreferencesUI.py:8583 flatcamTools/ToolInvertGerber.py:101 +msgid "Lines Join Style" +msgstr "Lines Join Style" + +#: flatcamGUI/PreferencesUI.py:8585 flatcamTools/ToolInvertGerber.py:103 +msgid "" +"The way that the lines in the object outline will be joined.\n" +"Can be:\n" +"- rounded -> an arc is added between two joining lines\n" +"- square -> the lines meet in 90 degrees angle\n" +"- bevel -> the lines are joined by a third line" +msgstr "" +"The way that the lines in the object outline will be joined.\n" +"Can be:\n" +"- rounded -> an arc is added between two joining lines\n" +"- square -> the lines meet in 90 degrees angle\n" +"- bevel -> the lines are joined by a third line" + +#: flatcamGUI/PreferencesUI.py:8608 +msgid "Excellon File associations" +msgstr "Excellon File associations" + +#: flatcamGUI/PreferencesUI.py:8621 flatcamGUI/PreferencesUI.py:8694 +#: flatcamGUI/PreferencesUI.py:8764 flatcamGUI/PreferencesUI.py:8834 +msgid "Restore" +msgstr "Restore" + +#: flatcamGUI/PreferencesUI.py:8622 flatcamGUI/PreferencesUI.py:8695 +#: flatcamGUI/PreferencesUI.py:8765 +msgid "Restore the extension list to the default state." +msgstr "Restore the extension list to the default state." + +#: flatcamGUI/PreferencesUI.py:8623 flatcamGUI/PreferencesUI.py:8696 +#: flatcamGUI/PreferencesUI.py:8766 flatcamGUI/PreferencesUI.py:8836 +msgid "Delete All" +msgstr "Delete All" + +#: flatcamGUI/PreferencesUI.py:8624 flatcamGUI/PreferencesUI.py:8697 +#: flatcamGUI/PreferencesUI.py:8767 +msgid "Delete all extensions from the list." +msgstr "Delete all extensions from the list." + +#: flatcamGUI/PreferencesUI.py:8632 flatcamGUI/PreferencesUI.py:8705 +#: flatcamGUI/PreferencesUI.py:8775 +msgid "Extensions list" +msgstr "Extensions list" + +#: flatcamGUI/PreferencesUI.py:8634 flatcamGUI/PreferencesUI.py:8707 +#: flatcamGUI/PreferencesUI.py:8777 +msgid "" +"List of file extensions to be\n" +"associated with FlatCAM." +msgstr "" +"List of file extensions to be\n" +"associated with FlatCAM." + +#: flatcamGUI/PreferencesUI.py:8654 flatcamGUI/PreferencesUI.py:8727 +#: flatcamGUI/PreferencesUI.py:8796 flatcamGUI/PreferencesUI.py:8868 +msgid "Extension" +msgstr "Extension" + +#: flatcamGUI/PreferencesUI.py:8655 flatcamGUI/PreferencesUI.py:8728 +#: flatcamGUI/PreferencesUI.py:8797 +msgid "A file extension to be added or deleted to the list." +msgstr "A file extension to be added or deleted to the list." + +#: flatcamGUI/PreferencesUI.py:8663 flatcamGUI/PreferencesUI.py:8736 +#: flatcamGUI/PreferencesUI.py:8805 +msgid "Add Extension" +msgstr "Add Extension" + +#: flatcamGUI/PreferencesUI.py:8664 flatcamGUI/PreferencesUI.py:8737 +#: flatcamGUI/PreferencesUI.py:8806 +msgid "Add a file extension to the list" +msgstr "Add a file extension to the list" + +#: flatcamGUI/PreferencesUI.py:8665 flatcamGUI/PreferencesUI.py:8738 +#: flatcamGUI/PreferencesUI.py:8807 +msgid "Delete Extension" +msgstr "Delete Extension" + +#: flatcamGUI/PreferencesUI.py:8666 flatcamGUI/PreferencesUI.py:8739 +#: flatcamGUI/PreferencesUI.py:8808 +msgid "Delete a file extension from the list" +msgstr "Delete a file extension from the list" + +#: flatcamGUI/PreferencesUI.py:8673 flatcamGUI/PreferencesUI.py:8746 +#: flatcamGUI/PreferencesUI.py:8815 +msgid "Apply Association" +msgstr "Apply Association" + +#: flatcamGUI/PreferencesUI.py:8674 flatcamGUI/PreferencesUI.py:8747 +#: flatcamGUI/PreferencesUI.py:8816 +msgid "" +"Apply the file associations between\n" +"FlatCAM and the files with above extensions.\n" +"They will be active after next logon.\n" +"This work only in Windows." +msgstr "" +"Apply the file associations between\n" +"FlatCAM and the files with above extensions.\n" +"They will be active after next logon.\n" +"This work only in Windows." + +#: flatcamGUI/PreferencesUI.py:8691 +msgid "GCode File associations" +msgstr "GCode File associations" + +#: flatcamGUI/PreferencesUI.py:8761 +msgid "Gerber File associations" +msgstr "Gerber File associations" + +#: flatcamGUI/PreferencesUI.py:8831 +msgid "Autocompleter Keywords" +msgstr "Autocompleter Keywords" + +#: flatcamGUI/PreferencesUI.py:8835 +msgid "Restore the autocompleter keywords list to the default state." +msgstr "Restore the autocompleter keywords list to the default state." + +#: flatcamGUI/PreferencesUI.py:8837 +msgid "Delete all autocompleter keywords from the list." +msgstr "Delete all autocompleter keywords from the list." + +#: flatcamGUI/PreferencesUI.py:8845 +msgid "Keywords list" +msgstr "Keywords list" + +#: flatcamGUI/PreferencesUI.py:8847 +msgid "" +"List of keywords used by\n" +"the autocompleter in FlatCAM.\n" +"The autocompleter is installed\n" +"in the Code Editor and for the Tcl Shell." +msgstr "" +"List of keywords used by\n" +"the autocompleter in FlatCAM.\n" +"The autocompleter is installed\n" +"in the Code Editor and for the Tcl Shell." + +#: flatcamGUI/PreferencesUI.py:8869 +msgid "A keyword to be added or deleted to the list." +msgstr "A keyword to be added or deleted to the list." + +#: flatcamGUI/PreferencesUI.py:8877 +msgid "Add keyword" +msgstr "Add keyword" + +#: flatcamGUI/PreferencesUI.py:8878 +msgid "Add a keyword to the list" +msgstr "Add a keyword to the list" + +#: flatcamGUI/PreferencesUI.py:8879 +msgid "Delete keyword" +msgstr "Delete keyword" + +#: flatcamGUI/PreferencesUI.py:8880 +msgid "Delete a keyword from the list" +msgstr "Delete a keyword from the list" + +#: flatcamObjects/FlatCAMCNCJob.py:429 flatcamObjects/FlatCAMDocument.py:71 +#: flatcamObjects/FlatCAMScript.py:83 +msgid "Basic" +msgstr "Basic" + +#: flatcamObjects/FlatCAMCNCJob.py:435 flatcamObjects/FlatCAMDocument.py:75 +#: flatcamObjects/FlatCAMScript.py:87 +msgid "Advanced" +msgstr "Advanced" + +#: flatcamObjects/FlatCAMCNCJob.py:478 +msgid "Plotting..." +msgstr "Plotting..." + +#: flatcamObjects/FlatCAMCNCJob.py:507 flatcamObjects/FlatCAMCNCJob.py:512 +#: flatcamTools/ToolSolderPaste.py:1499 +msgid "Export Machine Code ..." +msgstr "Export Machine Code ..." + +#: flatcamObjects/FlatCAMCNCJob.py:517 flatcamTools/ToolSolderPaste.py:1503 +msgid "Export Machine Code cancelled ..." +msgstr "Export Machine Code cancelled ..." + +#: flatcamObjects/FlatCAMCNCJob.py:538 +msgid "Machine Code file saved to" +msgstr "Machine Code file saved to" + +#: flatcamObjects/FlatCAMCNCJob.py:599 flatcamTools/ToolCalibration.py:1097 +msgid "Loaded Machine Code into Code Editor" +msgstr "Loaded Machine Code into Code Editor" + +#: flatcamObjects/FlatCAMCNCJob.py:739 +msgid "This CNCJob object can't be processed because it is a" +msgstr "This CNCJob object can't be processed because it is a" + +#: flatcamObjects/FlatCAMCNCJob.py:741 +msgid "CNCJob object" +msgstr "CNCJob object" + +#: flatcamObjects/FlatCAMCNCJob.py:921 +msgid "" +"G-code does not have a G94 code and we will not include the code in the " +"'Prepend to GCode' text box" +msgstr "" +"G-code does not have a G94 code and we will not include the code in the " +"'Prepend to GCode' text box" + +#: flatcamObjects/FlatCAMCNCJob.py:932 +msgid "Cancelled. The Toolchange Custom code is enabled but it's empty." +msgstr "Cancelled. The Toolchange Custom code is enabled but it's empty." + +#: flatcamObjects/FlatCAMCNCJob.py:937 +msgid "Toolchange G-code was replaced by a custom code." +msgstr "Toolchange G-code was replaced by a custom code." + +#: flatcamObjects/FlatCAMCNCJob.py:985 flatcamObjects/FlatCAMCNCJob.py:995 +msgid "" +"The used preprocessor file has to have in it's name: 'toolchange_custom'" +msgstr "" +"The used preprocessor file has to have in it's name: 'toolchange_custom'" + +#: flatcamObjects/FlatCAMCNCJob.py:998 +msgid "There is no preprocessor file." +msgstr "There is no preprocessor file." + +#: flatcamObjects/FlatCAMDocument.py:175 +msgid "Document Editor" +msgstr "Document Editor" + +#: flatcamObjects/FlatCAMExcellon.py:514 flatcamObjects/FlatCAMExcellon.py:746 +#: flatcamObjects/FlatCAMGeometry.py:306 flatcamObjects/FlatCAMGeometry.py:767 +#: flatcamTools/ToolNCC.py:811 flatcamTools/ToolNCC.py:1191 +#: flatcamTools/ToolPaint.py:779 flatcamTools/ToolPaint.py:1166 +msgid "Multiple Tools" +msgstr "Multiple Tools" + +#: flatcamObjects/FlatCAMExcellon.py:726 +msgid "No Tool Selected" +msgstr "No Tool Selected" + +#: flatcamObjects/FlatCAMExcellon.py:1076 +#: flatcamObjects/FlatCAMExcellon.py:1168 +#: flatcamObjects/FlatCAMExcellon.py:1355 +msgid "Please select one or more tools from the list and try again." +msgstr "Please select one or more tools from the list and try again." + +#: flatcamObjects/FlatCAMExcellon.py:1083 +msgid "Milling tool for DRILLS is larger than hole size. Cancelled." +msgstr "Milling tool for DRILLS is larger than hole size. Cancelled." + +#: flatcamObjects/FlatCAMExcellon.py:1098 +#: flatcamObjects/FlatCAMExcellon.py:1188 +#: flatcamObjects/FlatCAMExcellon.py:1373 +#: tclCommands/TclCommandDrillcncjob.py:193 +msgid "Tool_nr" +msgstr "Tool_nr" + +#: flatcamObjects/FlatCAMExcellon.py:1098 +#: flatcamObjects/FlatCAMExcellon.py:1188 +#: flatcamObjects/FlatCAMExcellon.py:1373 +#: tclCommands/TclCommandDrillcncjob.py:193 +msgid "Drills_Nr" +msgstr "Drills_Nr" + +#: flatcamObjects/FlatCAMExcellon.py:1098 +#: flatcamObjects/FlatCAMExcellon.py:1188 +#: flatcamObjects/FlatCAMExcellon.py:1373 +#: tclCommands/TclCommandDrillcncjob.py:193 +msgid "Slots_Nr" +msgstr "Slots_Nr" + +#: flatcamObjects/FlatCAMExcellon.py:1177 +msgid "Milling tool for SLOTS is larger than hole size. Cancelled." +msgstr "Milling tool for SLOTS is larger than hole size. Cancelled." + +#: flatcamObjects/FlatCAMExcellon.py:1281 +#: flatcamObjects/FlatCAMGeometry.py:1517 +msgid "Focus Z" +msgstr "Focus Z" + +#: flatcamObjects/FlatCAMExcellon.py:1300 +#: flatcamObjects/FlatCAMGeometry.py:1536 +msgid "Laser Power" +msgstr "Laser Power" + +#: flatcamObjects/FlatCAMExcellon.py:1430 +#: flatcamObjects/FlatCAMGeometry.py:1973 +#: flatcamObjects/FlatCAMGeometry.py:1977 +#: flatcamObjects/FlatCAMGeometry.py:2122 +msgid "Generating CNC Code" +msgstr "Generating CNC Code" + +#: flatcamObjects/FlatCAMExcellon.py:1620 flatcamTools/ToolNCC.py:918 +#: flatcamTools/ToolPaint.py:844 +msgid "Current Tool parameters were applied to all tools." +msgstr "Current Tool parameters were applied to all tools." + +#: flatcamObjects/FlatCAMGeometry.py:119 flatcamObjects/FlatCAMGeometry.py:1181 +#: flatcamObjects/FlatCAMGeometry.py:1182 +#: flatcamObjects/FlatCAMGeometry.py:1191 +msgid "Iso" +msgstr "Iso" + +#: flatcamObjects/FlatCAMGeometry.py:119 flatcamObjects/FlatCAMGeometry.py:439 +#: flatcamObjects/FlatCAMGeometry.py:826 flatcamObjects/FlatCAMGerber.py:890 +#: flatcamObjects/FlatCAMGerber.py:1038 +msgid "Rough" +msgstr "Rough" + +#: flatcamObjects/FlatCAMGeometry.py:119 +msgid "Finish" +msgstr "Finish" + +#: flatcamObjects/FlatCAMGeometry.py:474 +msgid "Add from Tool DB" +msgstr "Add from Tool DB" + +#: flatcamObjects/FlatCAMGeometry.py:845 +msgid "Tool added in Tool Table." +msgstr "Tool added in Tool Table." + +#: flatcamObjects/FlatCAMGeometry.py:954 flatcamObjects/FlatCAMGeometry.py:963 +msgid "Failed. Select a tool to copy." +msgstr "Failed. Select a tool to copy." + +#: flatcamObjects/FlatCAMGeometry.py:992 +msgid "Tool was copied in Tool Table." +msgstr "Tool was copied in Tool Table." + +#: flatcamObjects/FlatCAMGeometry.py:1019 +msgid "Tool was edited in Tool Table." +msgstr "Tool was edited in Tool Table." + +#: flatcamObjects/FlatCAMGeometry.py:1048 +#: flatcamObjects/FlatCAMGeometry.py:1057 +msgid "Failed. Select a tool to delete." +msgstr "Failed. Select a tool to delete." + +#: flatcamObjects/FlatCAMGeometry.py:1081 +msgid "Tool was deleted in Tool Table." +msgstr "Tool was deleted in Tool Table." + +#: flatcamObjects/FlatCAMGeometry.py:1589 +msgid "This Geometry can't be processed because it is" +msgstr "This Geometry can't be processed because it is" + +#: flatcamObjects/FlatCAMGeometry.py:1589 +msgid "geometry" +msgstr "geometry" + +#: flatcamObjects/FlatCAMGeometry.py:1630 +msgid "Failed. No tool selected in the tool table ..." +msgstr "Failed. No tool selected in the tool table ..." + +#: flatcamObjects/FlatCAMGeometry.py:1732 +#: flatcamObjects/FlatCAMGeometry.py:1882 +msgid "" +"Tool Offset is selected in Tool Table but no value is provided.\n" +"Add a Tool Offset or change the Offset Type." +msgstr "" +"Tool Offset is selected in Tool Table but no value is provided.\n" +"Add a Tool Offset or change the Offset Type." + +#: flatcamObjects/FlatCAMGeometry.py:1798 +#: flatcamObjects/FlatCAMGeometry.py:1944 +msgid "G-Code parsing in progress..." +msgstr "G-Code parsing in progress..." + +#: flatcamObjects/FlatCAMGeometry.py:1800 +#: flatcamObjects/FlatCAMGeometry.py:1946 +msgid "G-Code parsing finished..." +msgstr "G-Code parsing finished..." + +#: flatcamObjects/FlatCAMGeometry.py:1808 +msgid "Finished G-Code processing" +msgstr "Finished G-Code processing" + +#: flatcamObjects/FlatCAMGeometry.py:1810 +#: flatcamObjects/FlatCAMGeometry.py:1958 +msgid "G-Code processing failed with error" +msgstr "G-Code processing failed with error" + +#: flatcamObjects/FlatCAMGeometry.py:1852 flatcamTools/ToolSolderPaste.py:1301 +msgid "Cancelled. Empty file, it has no geometry" +msgstr "Cancelled. Empty file, it has no geometry" + +#: flatcamObjects/FlatCAMGeometry.py:1956 +#: flatcamObjects/FlatCAMGeometry.py:2117 +msgid "Finished G-Code processing..." +msgstr "Finished G-Code processing..." + +#: flatcamObjects/FlatCAMGeometry.py:1975 +#: flatcamObjects/FlatCAMGeometry.py:1979 +#: flatcamObjects/FlatCAMGeometry.py:2124 +msgid "CNCjob created" +msgstr "CNCjob created" + +#: flatcamObjects/FlatCAMGeometry.py:2155 +#: flatcamObjects/FlatCAMGeometry.py:2164 flatcamParsers/ParseGerber.py:1867 +#: flatcamParsers/ParseGerber.py:1877 +msgid "Scale factor has to be a number: integer or float." +msgstr "Scale factor has to be a number: integer or float." + +#: flatcamObjects/FlatCAMGeometry.py:2227 +msgid "Geometry Scale done." +msgstr "Geometry Scale done." + +#: flatcamObjects/FlatCAMGeometry.py:2244 flatcamParsers/ParseGerber.py:1993 +msgid "" +"An (x,y) pair of values are needed. Probable you entered only one value in " +"the Offset field." +msgstr "" +"An (x,y) pair of values are needed. Probable you entered only one value in " +"the Offset field." + +#: flatcamObjects/FlatCAMGeometry.py:2300 +msgid "Geometry Offset done." +msgstr "Geometry Offset done." + +#: flatcamObjects/FlatCAMGeometry.py:2329 +msgid "" +"The Toolchange X,Y field in Edit -> Preferences has to be in the format (x, " +"y)\n" +"but now there is only one value, not two." +msgstr "" +"The Toolchange X,Y field in Edit -> Preferences has to be in the format (x, " +"y)\n" +"but now there is only one value, not two." + +#: flatcamObjects/FlatCAMGerber.py:493 +msgid "Buffering solid geometry" +msgstr "Buffering solid geometry" + +#: flatcamObjects/FlatCAMGerber.py:502 +msgid "Done" +msgstr "Done" + +#: flatcamObjects/FlatCAMGerber.py:528 flatcamObjects/FlatCAMGerber.py:554 +msgid "Operation could not be done." +msgstr "Operation could not be done." + +#: flatcamObjects/FlatCAMGerber.py:571 +msgid "Isolating..." +msgstr "Isolating..." + +#: flatcamObjects/FlatCAMGerber.py:630 +msgid "Click on a polygon to isolate it." +msgstr "Click on a polygon to isolate it." + +#: flatcamObjects/FlatCAMGerber.py:669 flatcamObjects/FlatCAMGerber.py:773 +#: flatcamTools/ToolPaint.py:1511 +msgid "Added polygon" +msgstr "Added polygon" + +#: flatcamObjects/FlatCAMGerber.py:670 flatcamObjects/FlatCAMGerber.py:775 +msgid "Click to add next polygon or right click to start isolation." +msgstr "Click to add next polygon or right click to start isolation." + +#: flatcamObjects/FlatCAMGerber.py:682 flatcamTools/ToolPaint.py:1525 +msgid "Removed polygon" +msgstr "Removed polygon" + +#: flatcamObjects/FlatCAMGerber.py:683 +msgid "Click to add/remove next polygon or right click to start isolation." +msgstr "Click to add/remove next polygon or right click to start isolation." + +#: flatcamObjects/FlatCAMGerber.py:688 flatcamTools/ToolPaint.py:1531 +msgid "No polygon detected under click position." +msgstr "No polygon detected under click position." + +#: flatcamObjects/FlatCAMGerber.py:709 flatcamTools/ToolPaint.py:1560 +msgid "List of single polygons is empty. Aborting." +msgstr "List of single polygons is empty. Aborting." + +#: flatcamObjects/FlatCAMGerber.py:778 +msgid "No polygon in selection." +msgstr "No polygon in selection." + +#: flatcamObjects/FlatCAMGerber.py:906 flatcamObjects/FlatCAMGerber.py:985 +#: flatcamTools/ToolNCC.py:2081 flatcamTools/ToolNCC.py:3132 +#: flatcamTools/ToolNCC.py:3511 +msgid "Isolation geometry could not be generated." +msgstr "Isolation geometry could not be generated." + +#: flatcamObjects/FlatCAMGerber.py:931 flatcamObjects/FlatCAMGerber.py:1063 +msgid "Isolation geometry created" +msgstr "Isolation geometry created" + +#: flatcamObjects/FlatCAMGerber.py:940 flatcamObjects/FlatCAMGerber.py:1070 +msgid "Subtracting Geo" +msgstr "Subtracting Geo" + +#: flatcamObjects/FlatCAMGerber.py:1395 +msgid "Plotting Apertures" +msgstr "Plotting Apertures" + +#: flatcamObjects/FlatCAMObj.py:234 +msgid "Name changed from" +msgstr "Name changed from" + +#: flatcamObjects/FlatCAMObj.py:234 +msgid "to" +msgstr "to" + +#: flatcamObjects/FlatCAMObj.py:245 +msgid "Offsetting..." +msgstr "Offsetting..." + +#: flatcamObjects/FlatCAMObj.py:259 flatcamObjects/FlatCAMObj.py:264 +msgid "Scaling could not be executed." +msgstr "Scaling could not be executed." + +#: flatcamObjects/FlatCAMObj.py:268 flatcamObjects/FlatCAMObj.py:276 +msgid "Scale done." +msgstr "Scale done." + +#: flatcamObjects/FlatCAMObj.py:274 +msgid "Scaling..." +msgstr "Scaling..." + +#: flatcamObjects/FlatCAMObj.py:292 +msgid "Skewing..." +msgstr "Skewing..." + +#: flatcamObjects/FlatCAMScript.py:102 +msgid "Script Editor" +msgstr "Script Editor" + +#: flatcamParsers/ParseExcellon.py:316 +msgid "This is GCODE mark" +msgstr "This is GCODE mark" + +#: flatcamParsers/ParseExcellon.py:433 +msgid "" +"No tool diameter info's. See shell.\n" +"A tool change event: T" +msgstr "" +"No tool diameter info's. See shell.\n" +"A tool change event: T" + +#: flatcamParsers/ParseExcellon.py:436 +msgid "" +"was found but the Excellon file have no informations regarding the tool " +"diameters therefore the application will try to load it by using some 'fake' " +"diameters.\n" +"The user needs to edit the resulting Excellon object and change the " +"diameters to reflect the real diameters." +msgstr "" +"was found but the Excellon file have no informations regarding the tool " +"diameters therefore the application will try to load it by using some 'fake' " +"diameters.\n" +"The user needs to edit the resulting Excellon object and change the " +"diameters to reflect the real diameters." + +#: flatcamParsers/ParseExcellon.py:900 +msgid "" +"Excellon Parser error.\n" +"Parsing Failed. Line" +msgstr "" +"Excellon Parser error.\n" +"Parsing Failed. Line" + +#: flatcamParsers/ParseExcellon.py:982 +msgid "" +"Excellon.create_geometry() -> a drill location was skipped due of not having " +"a tool associated.\n" +"Check the resulting GCode." +msgstr "" +"Excellon.create_geometry() -> a drill location was skipped due of not having " +"a tool associated.\n" +"Check the resulting GCode." + +#: flatcamParsers/ParseFont.py:303 +msgid "Font not supported, try another one." +msgstr "Font not supported, try another one." + +#: flatcamParsers/ParseGerber.py:426 +msgid "Gerber processing. Parsing" +msgstr "Gerber processing. Parsing" + +#: flatcamParsers/ParseGerber.py:426 flatcamParsers/ParseHPGL2.py:178 +msgid "lines" +msgstr "lines" + +#: flatcamParsers/ParseGerber.py:1002 flatcamParsers/ParseGerber.py:1102 +#: flatcamParsers/ParseHPGL2.py:271 flatcamParsers/ParseHPGL2.py:285 +#: flatcamParsers/ParseHPGL2.py:304 flatcamParsers/ParseHPGL2.py:328 +#: flatcamParsers/ParseHPGL2.py:363 +msgid "Coordinates missing, line ignored" +msgstr "Coordinates missing, line ignored" + +#: flatcamParsers/ParseGerber.py:1004 flatcamParsers/ParseGerber.py:1104 +msgid "GERBER file might be CORRUPT. Check the file !!!" +msgstr "GERBER file might be CORRUPT. Check the file !!!" + +#: flatcamParsers/ParseGerber.py:1058 +msgid "" +"Region does not have enough points. File will be processed but there are " +"parser errors. Line number" +msgstr "" +"Region does not have enough points. File will be processed but there are " +"parser errors. Line number" + +#: flatcamParsers/ParseGerber.py:1488 flatcamParsers/ParseHPGL2.py:398 +msgid "Gerber processing. Joining polygons" +msgstr "Gerber processing. Joining polygons" + +#: flatcamParsers/ParseGerber.py:1505 +msgid "Gerber processing. Applying Gerber polarity." +msgstr "Gerber processing. Applying Gerber polarity." + +#: flatcamParsers/ParseGerber.py:1565 +msgid "Gerber Line" +msgstr "Gerber Line" + +#: flatcamParsers/ParseGerber.py:1565 +msgid "Gerber Line Content" +msgstr "Gerber Line Content" + +#: flatcamParsers/ParseGerber.py:1567 +msgid "Gerber Parser ERROR" +msgstr "Gerber Parser ERROR" + +#: flatcamParsers/ParseGerber.py:1957 +msgid "Gerber Scale done." +msgstr "Gerber Scale done." + +#: flatcamParsers/ParseGerber.py:2049 +msgid "Gerber Offset done." +msgstr "Gerber Offset done." + +#: flatcamParsers/ParseGerber.py:2125 +msgid "Gerber Mirror done." +msgstr "Gerber Mirror done." + +#: flatcamParsers/ParseGerber.py:2199 +msgid "Gerber Skew done." +msgstr "Gerber Skew done." + +#: flatcamParsers/ParseGerber.py:2261 +msgid "Gerber Rotate done." +msgstr "Gerber Rotate done." + +#: flatcamParsers/ParseGerber.py:2418 +msgid "Gerber Buffer done." +msgstr "Gerber Buffer done." + +#: flatcamParsers/ParseHPGL2.py:178 +msgid "HPGL2 processing. Parsing" +msgstr "HPGL2 processing. Parsing" + +#: flatcamParsers/ParseHPGL2.py:410 +msgid "HPGL2 Line" +msgstr "HPGL2 Line" + +#: flatcamParsers/ParseHPGL2.py:410 +msgid "HPGL2 Line Content" +msgstr "HPGL2 Line Content" + +#: flatcamParsers/ParseHPGL2.py:411 +msgid "HPGL2 Parser ERROR" +msgstr "HPGL2 Parser ERROR" + +#: flatcamTools/ToolAlignObjects.py:32 +msgid "Align Objects" +msgstr "Align Objects" + +#: flatcamTools/ToolAlignObjects.py:61 +msgid "MOVING object" +msgstr "MOVING object" + +#: flatcamTools/ToolAlignObjects.py:65 +msgid "" +"Specify the type of object to be aligned.\n" +"It can be of type: Gerber or Excellon.\n" +"The selection here decide the type of objects that will be\n" +"in the Object combobox." +msgstr "" +"Specify the type of object to be aligned.\n" +"It can be of type: Gerber or Excellon.\n" +"The selection here decide the type of objects that will be\n" +"in the Object combobox." + +#: flatcamTools/ToolAlignObjects.py:86 +msgid "Object to be aligned." +msgstr "Object to be aligned." + +#: flatcamTools/ToolAlignObjects.py:98 +msgid "TARGET object" +msgstr "TARGET object" + +#: flatcamTools/ToolAlignObjects.py:100 +msgid "" +"Specify the type of object to be aligned to.\n" +"It can be of type: Gerber or Excellon.\n" +"The selection here decide the type of objects that will be\n" +"in the Object combobox." +msgstr "" +"Specify the type of object to be aligned to.\n" +"It can be of type: Gerber or Excellon.\n" +"The selection here decide the type of objects that will be\n" +"in the Object combobox." + +#: flatcamTools/ToolAlignObjects.py:122 +msgid "Object to be aligned to. Aligner." +msgstr "Object to be aligned to. Aligner." + +#: flatcamTools/ToolAlignObjects.py:135 +msgid "Alignment Type" +msgstr "Alignment Type" + +#: flatcamTools/ToolAlignObjects.py:137 +msgid "" +"The type of alignment can be:\n" +"- Single Point -> it require a single point of sync, the action will be a " +"translation\n" +"- Dual Point -> it require two points of sync, the action will be " +"translation followed by rotation" +msgstr "" +"The type of alignment can be:\n" +"- Single Point -> it require a single point of sync, the action will be a " +"translation\n" +"- Dual Point -> it require two points of sync, the action will be " +"translation followed by rotation" + +#: flatcamTools/ToolAlignObjects.py:143 +msgid "Single Point" +msgstr "Single Point" + +#: flatcamTools/ToolAlignObjects.py:144 +msgid "Dual Point" +msgstr "Dual Point" + +#: flatcamTools/ToolAlignObjects.py:159 +msgid "Align Object" +msgstr "Align Object" + +#: flatcamTools/ToolAlignObjects.py:161 +msgid "" +"Align the specified object to the aligner object.\n" +"If only one point is used then it assumes translation.\n" +"If tho points are used it assume translation and rotation." +msgstr "" +"Align the specified object to the aligner object.\n" +"If only one point is used then it assumes translation.\n" +"If tho points are used it assume translation and rotation." + +#: flatcamTools/ToolAlignObjects.py:176 flatcamTools/ToolCalculators.py:246 +#: flatcamTools/ToolCalibration.py:683 flatcamTools/ToolCopperThieving.py:484 +#: flatcamTools/ToolCutOut.py:371 flatcamTools/ToolDblSided.py:471 +#: flatcamTools/ToolExtractDrills.py:310 flatcamTools/ToolFiducials.py:318 +#: flatcamTools/ToolFilm.py:520 flatcamTools/ToolInvertGerber.py:140 +#: flatcamTools/ToolNCC.py:612 flatcamTools/ToolOptimal.py:237 +#: flatcamTools/ToolPaint.py:556 flatcamTools/ToolPanelize.py:267 +#: flatcamTools/ToolPunchGerber.py:339 flatcamTools/ToolQRCode.py:314 +#: flatcamTools/ToolRulesCheck.py:516 flatcamTools/ToolSolderPaste.py:473 +#: flatcamTools/ToolSub.py:176 flatcamTools/ToolTransform.py:398 +msgid "Reset Tool" +msgstr "Reset Tool" + +#: flatcamTools/ToolAlignObjects.py:178 flatcamTools/ToolCalculators.py:248 +#: flatcamTools/ToolCalibration.py:685 flatcamTools/ToolCopperThieving.py:486 +#: flatcamTools/ToolCutOut.py:373 flatcamTools/ToolDblSided.py:473 +#: flatcamTools/ToolExtractDrills.py:312 flatcamTools/ToolFiducials.py:320 +#: flatcamTools/ToolFilm.py:522 flatcamTools/ToolInvertGerber.py:142 +#: flatcamTools/ToolNCC.py:614 flatcamTools/ToolOptimal.py:239 +#: flatcamTools/ToolPaint.py:558 flatcamTools/ToolPanelize.py:269 +#: flatcamTools/ToolPunchGerber.py:341 flatcamTools/ToolQRCode.py:316 +#: flatcamTools/ToolRulesCheck.py:518 flatcamTools/ToolSolderPaste.py:475 +#: flatcamTools/ToolSub.py:178 flatcamTools/ToolTransform.py:400 +msgid "Will reset the tool parameters." +msgstr "Will reset the tool parameters." + +#: flatcamTools/ToolAlignObjects.py:244 +msgid "Align Tool" +msgstr "Align Tool" + +#: flatcamTools/ToolAlignObjects.py:289 +msgid "There is no aligned FlatCAM object selected..." +msgstr "There is no aligned FlatCAM object selected..." + +#: flatcamTools/ToolAlignObjects.py:299 +msgid "There is no aligner FlatCAM object selected..." +msgstr "There is no aligner FlatCAM object selected..." + +#: flatcamTools/ToolAlignObjects.py:325 flatcamTools/ToolAlignObjects.py:385 +msgid "First Point" +msgstr "First Point" + +#: flatcamTools/ToolAlignObjects.py:325 flatcamTools/ToolAlignObjects.py:400 +msgid "Click on the START point." +msgstr "Click on the START point." + +#: flatcamTools/ToolAlignObjects.py:380 flatcamTools/ToolCalibration.py:920 +msgid "Cancelled by user request." +msgstr "Cancelled by user request." + +#: flatcamTools/ToolAlignObjects.py:385 flatcamTools/ToolAlignObjects.py:407 +msgid "Click on the DESTINATION point." +msgstr "Click on the DESTINATION point." + +#: flatcamTools/ToolAlignObjects.py:385 flatcamTools/ToolAlignObjects.py:400 +#: flatcamTools/ToolAlignObjects.py:407 +#| msgid " Or right click to cancel." +msgid "Or right click to cancel." +msgstr "Or right click to cancel." + +#: flatcamTools/ToolAlignObjects.py:400 flatcamTools/ToolAlignObjects.py:407 +#: flatcamTools/ToolFiducials.py:111 +msgid "Second Point" +msgstr "Second Point" + +#: flatcamTools/ToolCalculators.py:24 +msgid "Calculators" +msgstr "Calculators" + +#: flatcamTools/ToolCalculators.py:26 +msgid "Units Calculator" +msgstr "Units Calculator" + +#: flatcamTools/ToolCalculators.py:70 +msgid "Here you enter the value to be converted from INCH to MM" +msgstr "Here you enter the value to be converted from INCH to MM" + +#: flatcamTools/ToolCalculators.py:75 +msgid "Here you enter the value to be converted from MM to INCH" +msgstr "Here you enter the value to be converted from MM to INCH" + +#: flatcamTools/ToolCalculators.py:111 +msgid "" +"This is the angle of the tip of the tool.\n" +"It is specified by manufacturer." +msgstr "" +"This is the angle of the tip of the tool.\n" +"It is specified by manufacturer." + +#: flatcamTools/ToolCalculators.py:120 +msgid "" +"This is the depth to cut into the material.\n" +"In the CNCJob is the CutZ parameter." +msgstr "" +"This is the depth to cut into the material.\n" +"In the CNCJob is the CutZ parameter." + +#: flatcamTools/ToolCalculators.py:128 +msgid "" +"This is the tool diameter to be entered into\n" +"FlatCAM Gerber section.\n" +"In the CNCJob section it is called >Tool dia<." +msgstr "" +"This is the tool diameter to be entered into\n" +"FlatCAM Gerber section.\n" +"In the CNCJob section it is called >Tool dia<." + +#: flatcamTools/ToolCalculators.py:139 flatcamTools/ToolCalculators.py:235 +msgid "Calculate" +msgstr "Calculate" + +#: flatcamTools/ToolCalculators.py:142 +msgid "" +"Calculate either the Cut Z or the effective tool diameter,\n" +" depending on which is desired and which is known. " +msgstr "" +"Calculate either the Cut Z or the effective tool diameter,\n" +" depending on which is desired and which is known. " + +#: flatcamTools/ToolCalculators.py:205 +msgid "Current Value" +msgstr "Current Value" + +#: flatcamTools/ToolCalculators.py:212 +msgid "" +"This is the current intensity value\n" +"to be set on the Power Supply. In Amps." +msgstr "" +"This is the current intensity value\n" +"to be set on the Power Supply. In Amps." + +#: flatcamTools/ToolCalculators.py:216 +msgid "Time" +msgstr "Time" + +#: flatcamTools/ToolCalculators.py:223 +msgid "" +"This is the calculated time required for the procedure.\n" +"In minutes." +msgstr "" +"This is the calculated time required for the procedure.\n" +"In minutes." + +#: flatcamTools/ToolCalculators.py:238 +msgid "" +"Calculate the current intensity value and the procedure time,\n" +"depending on the parameters above" +msgstr "" +"Calculate the current intensity value and the procedure time,\n" +"depending on the parameters above" + +#: flatcamTools/ToolCalculators.py:299 +msgid "Calc. Tool" +msgstr "Calc. Tool" + +#: flatcamTools/ToolCalibration.py:67 +msgid "GCode Parameters" +msgstr "GCode Parameters" + +#: flatcamTools/ToolCalibration.py:69 +msgid "Parameters used when creating the GCode in this tool." +msgstr "Parameters used when creating the GCode in this tool." + +#: flatcamTools/ToolCalibration.py:173 +msgid "STEP 1: Acquire Calibration Points" +msgstr "STEP 1: Acquire Calibration Points" + +#: flatcamTools/ToolCalibration.py:175 +msgid "" +"Pick four points by clicking on canvas.\n" +"Those four points should be in the four\n" +"(as much as possible) corners of the object." +msgstr "" +"Pick four points by clicking on canvas.\n" +"Those four points should be in the four\n" +"(as much as possible) corners of the object." + +#: flatcamTools/ToolCalibration.py:193 flatcamTools/ToolFilm.py:76 +#: flatcamTools/ToolImage.py:54 flatcamTools/ToolPanelize.py:76 +#: flatcamTools/ToolProperties.py:177 +msgid "Object Type" +msgstr "Object Type" + +#: flatcamTools/ToolCalibration.py:210 +msgid "Source object selection" +msgstr "Source object selection" + +#: flatcamTools/ToolCalibration.py:212 +msgid "FlatCAM Object to be used as a source for reference points." +msgstr "FlatCAM Object to be used as a source for reference points." + +#: flatcamTools/ToolCalibration.py:218 +msgid "Calibration Points" +msgstr "Calibration Points" + +#: flatcamTools/ToolCalibration.py:220 +msgid "" +"Contain the expected calibration points and the\n" +"ones measured." +msgstr "" +"Contain the expected calibration points and the\n" +"ones measured." + +#: flatcamTools/ToolCalibration.py:235 flatcamTools/ToolSub.py:76 +#: flatcamTools/ToolSub.py:131 +msgid "Target" +msgstr "Target" + +#: flatcamTools/ToolCalibration.py:236 +msgid "Found Delta" +msgstr "Found Delta" + +#: flatcamTools/ToolCalibration.py:248 +msgid "Bot Left X" +msgstr "Bot Left X" + +#: flatcamTools/ToolCalibration.py:257 +msgid "Bot Left Y" +msgstr "Bot Left Y" + +#: flatcamTools/ToolCalibration.py:275 +msgid "Bot Right X" +msgstr "Bot Right X" + +#: flatcamTools/ToolCalibration.py:285 +msgid "Bot Right Y" +msgstr "Bot Right Y" + +#: flatcamTools/ToolCalibration.py:300 +msgid "Top Left X" +msgstr "Top Left X" + +#: flatcamTools/ToolCalibration.py:309 +msgid "Top Left Y" +msgstr "Top Left Y" + +#: flatcamTools/ToolCalibration.py:324 +msgid "Top Right X" +msgstr "Top Right X" + +#: flatcamTools/ToolCalibration.py:334 +msgid "Top Right Y" +msgstr "Top Right Y" + +#: flatcamTools/ToolCalibration.py:367 +msgid "Get Points" +msgstr "Get Points" + +#: flatcamTools/ToolCalibration.py:369 +msgid "" +"Pick four points by clicking on canvas if the source choice\n" +"is 'free' or inside the object geometry if the source is 'object'.\n" +"Those four points should be in the four squares of\n" +"the object." +msgstr "" +"Pick four points by clicking on canvas if the source choice\n" +"is 'free' or inside the object geometry if the source is 'object'.\n" +"Those four points should be in the four squares of\n" +"the object." + +#: flatcamTools/ToolCalibration.py:390 +msgid "STEP 2: Verification GCode" +msgstr "STEP 2: Verification GCode" + +#: flatcamTools/ToolCalibration.py:392 flatcamTools/ToolCalibration.py:405 +msgid "" +"Generate GCode file to locate and align the PCB by using\n" +"the four points acquired above.\n" +"The points sequence is:\n" +"- first point -> set the origin\n" +"- second point -> alignment point. Can be: top-left or bottom-right.\n" +"- third point -> check point. Can be: top-left or bottom-right.\n" +"- forth point -> final verification point. Just for evaluation." +msgstr "" +"Generate GCode file to locate and align the PCB by using\n" +"the four points acquired above.\n" +"The points sequence is:\n" +"- first point -> set the origin\n" +"- second point -> alignment point. Can be: top-left or bottom-right.\n" +"- third point -> check point. Can be: top-left or bottom-right.\n" +"- forth point -> final verification point. Just for evaluation." + +#: flatcamTools/ToolCalibration.py:403 flatcamTools/ToolSolderPaste.py:348 +msgid "Generate GCode" +msgstr "Generate GCode" + +#: flatcamTools/ToolCalibration.py:429 +msgid "STEP 3: Adjustments" +msgstr "STEP 3: Adjustments" + +#: flatcamTools/ToolCalibration.py:431 flatcamTools/ToolCalibration.py:440 +msgid "" +"Calculate Scale and Skew factors based on the differences (delta)\n" +"found when checking the PCB pattern. The differences must be filled\n" +"in the fields Found (Delta)." +msgstr "" +"Calculate Scale and Skew factors based on the differences (delta)\n" +"found when checking the PCB pattern. The differences must be filled\n" +"in the fields Found (Delta)." + +#: flatcamTools/ToolCalibration.py:438 +msgid "Calculate Factors" +msgstr "Calculate Factors" + +#: flatcamTools/ToolCalibration.py:460 +msgid "STEP 4: Adjusted GCode" +msgstr "STEP 4: Adjusted GCode" + +#: flatcamTools/ToolCalibration.py:462 +msgid "" +"Generate verification GCode file adjusted with\n" +"the factors above." +msgstr "" +"Generate verification GCode file adjusted with\n" +"the factors above." + +#: flatcamTools/ToolCalibration.py:467 +msgid "Scale Factor X:" +msgstr "Scale Factor X:" + +#: flatcamTools/ToolCalibration.py:479 +msgid "Scale Factor Y:" +msgstr "Scale Factor Y:" + +#: flatcamTools/ToolCalibration.py:491 +msgid "Apply Scale Factors" +msgstr "Apply Scale Factors" + +#: flatcamTools/ToolCalibration.py:493 +msgid "Apply Scale factors on the calibration points." +msgstr "Apply Scale factors on the calibration points." + +#: flatcamTools/ToolCalibration.py:503 +msgid "Skew Angle X:" +msgstr "Skew Angle X:" + +#: flatcamTools/ToolCalibration.py:516 +msgid "Skew Angle Y:" +msgstr "Skew Angle Y:" + +#: flatcamTools/ToolCalibration.py:529 +msgid "Apply Skew Factors" +msgstr "Apply Skew Factors" + +#: flatcamTools/ToolCalibration.py:531 +msgid "Apply Skew factors on the calibration points." +msgstr "Apply Skew factors on the calibration points." + +#: flatcamTools/ToolCalibration.py:600 +msgid "Generate Adjusted GCode" +msgstr "Generate Adjusted GCode" + +#: flatcamTools/ToolCalibration.py:602 +msgid "" +"Generate verification GCode file adjusted with\n" +"the factors set above.\n" +"The GCode parameters can be readjusted\n" +"before clicking this button." +msgstr "" +"Generate verification GCode file adjusted with\n" +"the factors set above.\n" +"The GCode parameters can be readjusted\n" +"before clicking this button." + +#: flatcamTools/ToolCalibration.py:623 +msgid "STEP 5: Calibrate FlatCAM Objects" +msgstr "STEP 5: Calibrate FlatCAM Objects" + +#: flatcamTools/ToolCalibration.py:625 +msgid "" +"Adjust the FlatCAM objects\n" +"with the factors determined and verified above." +msgstr "" +"Adjust the FlatCAM objects\n" +"with the factors determined and verified above." + +#: flatcamTools/ToolCalibration.py:637 +msgid "Adjusted object type" +msgstr "Adjusted object type" + +#: flatcamTools/ToolCalibration.py:638 +msgid "Type of the FlatCAM Object to be adjusted." +msgstr "Type of the FlatCAM Object to be adjusted." + +#: flatcamTools/ToolCalibration.py:651 +msgid "Adjusted object selection" +msgstr "Adjusted object selection" + +#: flatcamTools/ToolCalibration.py:653 +msgid "The FlatCAM Object to be adjusted." +msgstr "The FlatCAM Object to be adjusted." + +#: flatcamTools/ToolCalibration.py:660 +msgid "Calibrate" +msgstr "Calibrate" + +#: flatcamTools/ToolCalibration.py:662 +msgid "" +"Adjust (scale and/or skew) the objects\n" +"with the factors determined above." +msgstr "" +"Adjust (scale and/or skew) the objects\n" +"with the factors determined above." + +#: flatcamTools/ToolCalibration.py:770 flatcamTools/ToolCalibration.py:771 +msgid "Origin" +msgstr "Origin" + +#: flatcamTools/ToolCalibration.py:800 +msgid "Tool initialized" +msgstr "Tool initialized" + +#: flatcamTools/ToolCalibration.py:838 +msgid "There is no source FlatCAM object selected..." +msgstr "There is no source FlatCAM object selected..." + +#: flatcamTools/ToolCalibration.py:859 +msgid "Get First calibration point. Bottom Left..." +msgstr "Get First calibration point. Bottom Left..." + +#: flatcamTools/ToolCalibration.py:926 +msgid "Get Second calibration point. Bottom Right (Top Left)..." +msgstr "Get Second calibration point. Bottom Right (Top Left)..." + +#: flatcamTools/ToolCalibration.py:930 +msgid "Get Third calibration point. Top Left (Bottom Right)..." +msgstr "Get Third calibration point. Top Left (Bottom Right)..." + +#: flatcamTools/ToolCalibration.py:934 +msgid "Get Forth calibration point. Top Right..." +msgstr "Get Forth calibration point. Top Right..." + +#: flatcamTools/ToolCalibration.py:938 +msgid "Done. All four points have been acquired." +msgstr "Done. All four points have been acquired." + +#: flatcamTools/ToolCalibration.py:969 +msgid "Verification GCode for FlatCAM Calibration Tool" +msgstr "Verification GCode for FlatCAM Calibration Tool" + +#: flatcamTools/ToolCalibration.py:981 flatcamTools/ToolCalibration.py:1067 +msgid "Gcode Viewer" +msgstr "Gcode Viewer" + +#: flatcamTools/ToolCalibration.py:997 +msgid "Cancelled. Four points are needed for GCode generation." +msgstr "Cancelled. Four points are needed for GCode generation." + +#: flatcamTools/ToolCalibration.py:1253 flatcamTools/ToolCalibration.py:1349 +msgid "There is no FlatCAM object selected..." +msgstr "There is no FlatCAM object selected..." + +#: flatcamTools/ToolCopperThieving.py:76 flatcamTools/ToolFiducials.py:261 +msgid "Gerber Object to which will be added a copper thieving." +msgstr "Gerber Object to which will be added a copper thieving." + +#: flatcamTools/ToolCopperThieving.py:98 +msgid "" +"This set the distance between the copper thieving components\n" +"(the polygon fill may be split in multiple polygons)\n" +"and the copper traces in the Gerber file." +msgstr "" +"This set the distance between the copper thieving components\n" +"(the polygon fill may be split in multiple polygons)\n" +"and the copper traces in the Gerber file." + +#: flatcamTools/ToolCopperThieving.py:131 +msgid "" +"- 'Itself' - the copper thieving extent is based on the object extent.\n" +"- 'Area Selection' - left mouse click to start selection of the area to be " +"filled.\n" +"- 'Reference Object' - will do copper thieving within the area specified by " +"another object." +msgstr "" +"- 'Itself' - the copper thieving extent is based on the object extent.\n" +"- 'Area Selection' - left mouse click to start selection of the area to be " +"filled.\n" +"- 'Reference Object' - will do copper thieving within the area specified by " +"another object." + +#: flatcamTools/ToolCopperThieving.py:138 flatcamTools/ToolNCC.py:552 +#: flatcamTools/ToolPaint.py:496 +msgid "Ref. Type" +msgstr "Ref. Type" + +#: flatcamTools/ToolCopperThieving.py:140 +msgid "" +"The type of FlatCAM object to be used as copper thieving reference.\n" +"It can be Gerber, Excellon or Geometry." +msgstr "" +"The type of FlatCAM object to be used as copper thieving reference.\n" +"It can be Gerber, Excellon or Geometry." + +#: flatcamTools/ToolCopperThieving.py:149 flatcamTools/ToolNCC.py:562 +#: flatcamTools/ToolPaint.py:506 +msgid "Ref. Object" +msgstr "Ref. Object" + +#: flatcamTools/ToolCopperThieving.py:151 flatcamTools/ToolNCC.py:564 +#: flatcamTools/ToolPaint.py:508 +msgid "The FlatCAM object to be used as non copper clearing reference." +msgstr "The FlatCAM object to be used as non copper clearing reference." + +#: flatcamTools/ToolCopperThieving.py:327 +msgid "Insert Copper thieving" +msgstr "Insert Copper thieving" + +#: flatcamTools/ToolCopperThieving.py:329 +msgid "" +"Will add a polygon (may be split in multiple parts)\n" +"that will surround the actual Gerber traces at a certain distance." +msgstr "" +"Will add a polygon (may be split in multiple parts)\n" +"that will surround the actual Gerber traces at a certain distance." + +#: flatcamTools/ToolCopperThieving.py:388 +msgid "Insert Robber Bar" +msgstr "Insert Robber Bar" + +#: flatcamTools/ToolCopperThieving.py:390 +msgid "" +"Will add a polygon with a defined thickness\n" +"that will surround the actual Gerber object\n" +"at a certain distance.\n" +"Required when doing holes pattern plating." +msgstr "" +"Will add a polygon with a defined thickness\n" +"that will surround the actual Gerber object\n" +"at a certain distance.\n" +"Required when doing holes pattern plating." + +#: flatcamTools/ToolCopperThieving.py:414 +msgid "Select Soldermask object" +msgstr "Select Soldermask object" + +#: flatcamTools/ToolCopperThieving.py:416 +msgid "" +"Gerber Object with the soldermask.\n" +"It will be used as a base for\n" +"the pattern plating mask." +msgstr "" +"Gerber Object with the soldermask.\n" +"It will be used as a base for\n" +"the pattern plating mask." + +#: flatcamTools/ToolCopperThieving.py:445 +msgid "Plated area" +msgstr "Plated area" + +#: flatcamTools/ToolCopperThieving.py:447 +msgid "" +"The area to be plated by pattern plating.\n" +"Basically is made from the openings in the plating mask.\n" +"\n" +"<> - the calculated area is actually a bit larger\n" +"due of the fact that the soldermask openings are by design\n" +"a bit larger than the copper pads, and this area is\n" +"calculated from the soldermask openings." +msgstr "" +"The area to be plated by pattern plating.\n" +"Basically is made from the openings in the plating mask.\n" +"\n" +"<> - the calculated area is actually a bit larger\n" +"due of the fact that the soldermask openings are by design\n" +"a bit larger than the copper pads, and this area is\n" +"calculated from the soldermask openings." + +#: flatcamTools/ToolCopperThieving.py:458 +msgid "mm" +msgstr "mm" + +#: flatcamTools/ToolCopperThieving.py:460 +msgid "in" +msgstr "in" + +#: flatcamTools/ToolCopperThieving.py:467 +msgid "Generate pattern plating mask" +msgstr "Generate pattern plating mask" + +#: flatcamTools/ToolCopperThieving.py:469 +msgid "" +"Will add to the soldermask gerber geometry\n" +"the geometries of the copper thieving and/or\n" +"the robber bar if those were generated." +msgstr "" +"Will add to the soldermask gerber geometry\n" +"the geometries of the copper thieving and/or\n" +"the robber bar if those were generated." + +#: flatcamTools/ToolCopperThieving.py:625 +#: flatcamTools/ToolCopperThieving.py:650 +msgid "Lines Grid works only for 'itself' reference ..." +msgstr "Lines Grid works only for 'itself' reference ..." + +#: flatcamTools/ToolCopperThieving.py:636 +msgid "Solid fill selected." +msgstr "Solid fill selected." + +#: flatcamTools/ToolCopperThieving.py:641 +msgid "Dots grid fill selected." +msgstr "Dots grid fill selected." + +#: flatcamTools/ToolCopperThieving.py:646 +msgid "Squares grid fill selected." +msgstr "Squares grid fill selected." + +#: flatcamTools/ToolCopperThieving.py:667 +#: flatcamTools/ToolCopperThieving.py:749 +#: flatcamTools/ToolCopperThieving.py:1345 flatcamTools/ToolDblSided.py:657 +#: flatcamTools/ToolExtractDrills.py:436 flatcamTools/ToolFiducials.py:466 +#: flatcamTools/ToolFiducials.py:743 flatcamTools/ToolOptimal.py:342 +#: flatcamTools/ToolPunchGerber.py:512 flatcamTools/ToolQRCode.py:426 +msgid "There is no Gerber object loaded ..." +msgstr "There is no Gerber object loaded ..." + +#: flatcamTools/ToolCopperThieving.py:680 +#: flatcamTools/ToolCopperThieving.py:1273 +msgid "Append geometry" +msgstr "Append geometry" + +#: flatcamTools/ToolCopperThieving.py:724 +#: flatcamTools/ToolCopperThieving.py:1306 +#: flatcamTools/ToolCopperThieving.py:1459 +msgid "Append source file" +msgstr "Append source file" + +#: flatcamTools/ToolCopperThieving.py:732 +#: flatcamTools/ToolCopperThieving.py:1314 +msgid "Copper Thieving Tool done." +msgstr "Copper Thieving Tool done." + +#: flatcamTools/ToolCopperThieving.py:759 +#: flatcamTools/ToolCopperThieving.py:792 flatcamTools/ToolCutOut.py:479 +#: flatcamTools/ToolCutOut.py:666 flatcamTools/ToolInvertGerber.py:208 +#: flatcamTools/ToolNCC.py:1594 flatcamTools/ToolNCC.py:1635 +#: flatcamTools/ToolNCC.py:1664 flatcamTools/ToolPaint.py:1469 +#: flatcamTools/ToolPanelize.py:411 flatcamTools/ToolPanelize.py:426 +#: flatcamTools/ToolSub.py:294 flatcamTools/ToolSub.py:307 +#: flatcamTools/ToolSub.py:498 flatcamTools/ToolSub.py:513 +#: tclCommands/TclCommandCopperClear.py:97 tclCommands/TclCommandPaint.py:99 +msgid "Could not retrieve object" +msgstr "Could not retrieve object" + +#: flatcamTools/ToolCopperThieving.py:769 flatcamTools/ToolNCC.py:1643 +msgid "Click the start point of the area." +msgstr "Click the start point of the area." + +#: flatcamTools/ToolCopperThieving.py:820 +msgid "Click the end point of the filling area." +msgstr "Click the end point of the filling area." + +#: flatcamTools/ToolCopperThieving.py:826 flatcamTools/ToolNCC.py:1705 +#: flatcamTools/ToolNCC.py:1757 flatcamTools/ToolPaint.py:1601 +#: flatcamTools/ToolPaint.py:1652 +msgid "Zone added. Click to start adding next zone or right click to finish." +msgstr "Zone added. Click to start adding next zone or right click to finish." + +#: flatcamTools/ToolCopperThieving.py:942 +#: flatcamTools/ToolCopperThieving.py:946 +#: flatcamTools/ToolCopperThieving.py:1007 +msgid "Thieving" +msgstr "Thieving" + +#: flatcamTools/ToolCopperThieving.py:953 +msgid "Copper Thieving Tool started. Reading parameters." +msgstr "Copper Thieving Tool started. Reading parameters." + +#: flatcamTools/ToolCopperThieving.py:978 +msgid "Copper Thieving Tool. Preparing isolation polygons." +msgstr "Copper Thieving Tool. Preparing isolation polygons." + +#: flatcamTools/ToolCopperThieving.py:1023 +msgid "Copper Thieving Tool. Preparing areas to fill with copper." +msgstr "Copper Thieving Tool. Preparing areas to fill with copper." + +#: flatcamTools/ToolCopperThieving.py:1034 flatcamTools/ToolOptimal.py:349 +#: flatcamTools/ToolPanelize.py:800 flatcamTools/ToolRulesCheck.py:1127 +msgid "Working..." +msgstr "Working..." + +#: flatcamTools/ToolCopperThieving.py:1061 +msgid "Geometry not supported for bounding box" +msgstr "Geometry not supported for bounding box" + +#: flatcamTools/ToolCopperThieving.py:1067 flatcamTools/ToolNCC.py:1928 +#: flatcamTools/ToolNCC.py:1983 flatcamTools/ToolNCC.py:2987 +#: flatcamTools/ToolPaint.py:3375 +msgid "No object available." +msgstr "No object available." + +#: flatcamTools/ToolCopperThieving.py:1104 flatcamTools/ToolNCC.py:1953 +#: flatcamTools/ToolNCC.py:2006 flatcamTools/ToolNCC.py:3029 +msgid "The reference object type is not supported." +msgstr "The reference object type is not supported." + +#: flatcamTools/ToolCopperThieving.py:1109 +msgid "Copper Thieving Tool. Appending new geometry and buffering." +msgstr "Copper Thieving Tool. Appending new geometry and buffering." + +#: flatcamTools/ToolCopperThieving.py:1125 +msgid "Create geometry" +msgstr "Create geometry" + +#: flatcamTools/ToolCopperThieving.py:1325 +#: flatcamTools/ToolCopperThieving.py:1329 +msgid "P-Plating Mask" +msgstr "P-Plating Mask" + +#: flatcamTools/ToolCopperThieving.py:1351 +msgid "Append PP-M geometry" +msgstr "Append PP-M geometry" + +#: flatcamTools/ToolCopperThieving.py:1477 +msgid "Generating Pattern Plating Mask done." +msgstr "Generating Pattern Plating Mask done." + +#: flatcamTools/ToolCopperThieving.py:1549 +msgid "Copper Thieving Tool exit." +msgstr "Copper Thieving Tool exit." + +#: flatcamTools/ToolCutOut.py:41 +msgid "Cutout PCB" +msgstr "Cutout PCB" + +#: flatcamTools/ToolCutOut.py:69 flatcamTools/ToolPanelize.py:52 +msgid "Source Object" +msgstr "Source Object" + +#: flatcamTools/ToolCutOut.py:70 +msgid "Object to be cutout" +msgstr "Object to be cutout" + +#: flatcamTools/ToolCutOut.py:75 +msgid "Kind" +msgstr "Kind" + +#: flatcamTools/ToolCutOut.py:97 +msgid "" +"Specify the type of object to be cutout.\n" +"It can be of type: Gerber or Geometry.\n" +"What is selected here will dictate the kind\n" +"of objects that will populate the 'Object' combobox." +msgstr "" +"Specify the type of object to be cutout.\n" +"It can be of type: Gerber or Geometry.\n" +"What is selected here will dictate the kind\n" +"of objects that will populate the 'Object' combobox." + +#: flatcamTools/ToolCutOut.py:121 +msgid "Tool Parameters" +msgstr "Tool Parameters" + +#: flatcamTools/ToolCutOut.py:238 +msgid "A. Automatic Bridge Gaps" +msgstr "A. Automatic Bridge Gaps" + +#: flatcamTools/ToolCutOut.py:240 +msgid "This section handle creation of automatic bridge gaps." +msgstr "This section handle creation of automatic bridge gaps." + +#: flatcamTools/ToolCutOut.py:251 +msgid "" +"Number of gaps used for the Automatic cutout.\n" +"There can be maximum 8 bridges/gaps.\n" +"The choices are:\n" +"- None - no gaps\n" +"- lr - left + right\n" +"- tb - top + bottom\n" +"- 4 - left + right +top + bottom\n" +"- 2lr - 2*left + 2*right\n" +"- 2tb - 2*top + 2*bottom\n" +"- 8 - 2*left + 2*right +2*top + 2*bottom" +msgstr "" +"Number of gaps used for the Automatic cutout.\n" +"There can be maximum 8 bridges/gaps.\n" +"The choices are:\n" +"- None - no gaps\n" +"- lr - left + right\n" +"- tb - top + bottom\n" +"- 4 - left + right +top + bottom\n" +"- 2lr - 2*left + 2*right\n" +"- 2tb - 2*top + 2*bottom\n" +"- 8 - 2*left + 2*right +2*top + 2*bottom" + +#: flatcamTools/ToolCutOut.py:272 +msgid "Generate Freeform Geometry" +msgstr "Generate Freeform Geometry" + +#: flatcamTools/ToolCutOut.py:274 +msgid "" +"Cutout the selected object.\n" +"The cutout shape can be of any shape.\n" +"Useful when the PCB has a non-rectangular shape." +msgstr "" +"Cutout the selected object.\n" +"The cutout shape can be of any shape.\n" +"Useful when the PCB has a non-rectangular shape." + +#: flatcamTools/ToolCutOut.py:286 +msgid "Generate Rectangular Geometry" +msgstr "Generate Rectangular Geometry" + +#: flatcamTools/ToolCutOut.py:288 +msgid "" +"Cutout the selected object.\n" +"The resulting cutout shape is\n" +"always a rectangle shape and it will be\n" +"the bounding box of the Object." +msgstr "" +"Cutout the selected object.\n" +"The resulting cutout shape is\n" +"always a rectangle shape and it will be\n" +"the bounding box of the Object." + +#: flatcamTools/ToolCutOut.py:307 +msgid "B. Manual Bridge Gaps" +msgstr "B. Manual Bridge Gaps" + +#: flatcamTools/ToolCutOut.py:309 +msgid "" +"This section handle creation of manual bridge gaps.\n" +"This is done by mouse clicking on the perimeter of the\n" +"Geometry object that is used as a cutout object. " +msgstr "" +"This section handle creation of manual bridge gaps.\n" +"This is done by mouse clicking on the perimeter of the\n" +"Geometry object that is used as a cutout object. " + +#: flatcamTools/ToolCutOut.py:328 +msgid "Geometry object used to create the manual cutout." +msgstr "Geometry object used to create the manual cutout." + +#: flatcamTools/ToolCutOut.py:337 +msgid "Generate Manual Geometry" +msgstr "Generate Manual Geometry" + +#: flatcamTools/ToolCutOut.py:339 +msgid "" +"If the object to be cutout is a Gerber\n" +"first create a Geometry that surrounds it,\n" +"to be used as the cutout, if one doesn't exist yet.\n" +"Select the source Gerber file in the top object combobox." +msgstr "" +"If the object to be cutout is a Gerber\n" +"first create a Geometry that surrounds it,\n" +"to be used as the cutout, if one doesn't exist yet.\n" +"Select the source Gerber file in the top object combobox." + +#: flatcamTools/ToolCutOut.py:352 +msgid "Manual Add Bridge Gaps" +msgstr "Manual Add Bridge Gaps" + +#: flatcamTools/ToolCutOut.py:354 +msgid "" +"Use the left mouse button (LMB) click\n" +"to create a bridge gap to separate the PCB from\n" +"the surrounding material.\n" +"The LMB click has to be done on the perimeter of\n" +"the Geometry object used as a cutout geometry." +msgstr "" +"Use the left mouse button (LMB) click\n" +"to create a bridge gap to separate the PCB from\n" +"the surrounding material.\n" +"The LMB click has to be done on the perimeter of\n" +"the Geometry object used as a cutout geometry." + +#: flatcamTools/ToolCutOut.py:484 +msgid "" +"There is no object selected for Cutout.\n" +"Select one and try again." +msgstr "" +"There is no object selected for Cutout.\n" +"Select one and try again." + +#: flatcamTools/ToolCutOut.py:490 flatcamTools/ToolCutOut.py:675 +#: flatcamTools/ToolCutOut.py:838 flatcamTools/ToolCutOut.py:920 +#: tclCommands/TclCommandGeoCutout.py:184 +msgid "Tool Diameter is zero value. Change it to a positive real number." +msgstr "Tool Diameter is zero value. Change it to a positive real number." + +#: flatcamTools/ToolCutOut.py:504 flatcamTools/ToolCutOut.py:690 +msgid "Number of gaps value is missing. Add it and retry." +msgstr "Number of gaps value is missing. Add it and retry." + +#: flatcamTools/ToolCutOut.py:509 flatcamTools/ToolCutOut.py:694 +msgid "" +"Gaps value can be only one of: 'None', 'lr', 'tb', '2lr', '2tb', 4 or 8. " +"Fill in a correct value and retry. " +msgstr "" +"Gaps value can be only one of: 'None', 'lr', 'tb', '2lr', '2tb', 4 or 8. " +"Fill in a correct value and retry. " + +#: flatcamTools/ToolCutOut.py:514 flatcamTools/ToolCutOut.py:700 +msgid "" +"Cutout operation cannot be done on a multi-geo Geometry.\n" +"Optionally, this Multi-geo Geometry can be converted to Single-geo " +"Geometry,\n" +"and after that perform Cutout." +msgstr "" +"Cutout operation cannot be done on a multi-geo Geometry.\n" +"Optionally, this Multi-geo Geometry can be converted to Single-geo " +"Geometry,\n" +"and after that perform Cutout." + +#: flatcamTools/ToolCutOut.py:649 flatcamTools/ToolCutOut.py:827 +msgid "Any form CutOut operation finished." +msgstr "Any form CutOut operation finished." + +#: flatcamTools/ToolCutOut.py:670 flatcamTools/ToolInvertGerber.py:214 +#: flatcamTools/ToolNCC.py:1598 flatcamTools/ToolPaint.py:1392 +#: flatcamTools/ToolPanelize.py:416 tclCommands/TclCommandBbox.py:71 +#: tclCommands/TclCommandNregions.py:71 +msgid "Object not found" +msgstr "Object not found" + +#: flatcamTools/ToolCutOut.py:813 +msgid "Rectangular cutout with negative margin is not possible." +msgstr "Rectangular cutout with negative margin is not possible." + +#: flatcamTools/ToolCutOut.py:832 +msgid "" +"Click on the selected geometry object perimeter to create a bridge gap ..." +msgstr "" +"Click on the selected geometry object perimeter to create a bridge gap ..." + +#: flatcamTools/ToolCutOut.py:849 flatcamTools/ToolCutOut.py:875 +msgid "Could not retrieve Geometry object" +msgstr "Could not retrieve Geometry object" + +#: flatcamTools/ToolCutOut.py:880 +msgid "Geometry object for manual cutout not found" +msgstr "Geometry object for manual cutout not found" + +#: flatcamTools/ToolCutOut.py:890 +msgid "Added manual Bridge Gap." +msgstr "Added manual Bridge Gap." + +#: flatcamTools/ToolCutOut.py:902 +msgid "Could not retrieve Gerber object" +msgstr "Could not retrieve Gerber object" + +#: flatcamTools/ToolCutOut.py:907 +msgid "" +"There is no Gerber object selected for Cutout.\n" +"Select one and try again." +msgstr "" +"There is no Gerber object selected for Cutout.\n" +"Select one and try again." + +#: flatcamTools/ToolCutOut.py:913 +msgid "" +"The selected object has to be of Gerber type.\n" +"Select a Gerber file and try again." +msgstr "" +"The selected object has to be of Gerber type.\n" +"Select a Gerber file and try again." + +#: flatcamTools/ToolCutOut.py:948 +msgid "Geometry not supported for cutout" +msgstr "Geometry not supported for cutout" + +#: flatcamTools/ToolCutOut.py:1006 +msgid "Making manual bridge gap..." +msgstr "Making manual bridge gap..." + +#: flatcamTools/ToolDblSided.py:26 +msgid "2-Sided PCB" +msgstr "2-Sided PCB" + +#: flatcamTools/ToolDblSided.py:52 +msgid "Mirror Operation" +msgstr "Mirror Operation" + +#: flatcamTools/ToolDblSided.py:53 +msgid "Objects to be mirrored" +msgstr "Objects to be mirrored" + +#: flatcamTools/ToolDblSided.py:65 +msgid "Gerber to be mirrored" +msgstr "Gerber to be mirrored" + +#: flatcamTools/ToolDblSided.py:69 flatcamTools/ToolDblSided.py:97 +#: flatcamTools/ToolDblSided.py:127 +msgid "" +"Mirrors (flips) the specified object around \n" +"the specified axis. Does not create a new \n" +"object, but modifies it." +msgstr "" +"Mirrors (flips) the specified object around \n" +"the specified axis. Does not create a new \n" +"object, but modifies it." + +#: flatcamTools/ToolDblSided.py:93 +msgid "Excellon Object to be mirrored." +msgstr "Excellon Object to be mirrored." + +#: flatcamTools/ToolDblSided.py:122 +msgid "Geometry Obj to be mirrored." +msgstr "Geometry Obj to be mirrored." + +#: flatcamTools/ToolDblSided.py:158 +msgid "Mirror Parameters" +msgstr "Mirror Parameters" + +#: flatcamTools/ToolDblSided.py:159 +msgid "Parameters for the mirror operation" +msgstr "Parameters for the mirror operation" + +#: flatcamTools/ToolDblSided.py:164 +msgid "Mirror Axis" +msgstr "Mirror Axis" + +#: flatcamTools/ToolDblSided.py:175 +msgid "" +"The coordinates used as reference for the mirror operation.\n" +"Can be:\n" +"- Point -> a set of coordinates (x,y) around which the object is mirrored\n" +"- Box -> a set of coordinates (x, y) obtained from the center of the\n" +"bounding box of another object selected below" +msgstr "" +"The coordinates used as reference for the mirror operation.\n" +"Can be:\n" +"- Point -> a set of coordinates (x,y) around which the object is mirrored\n" +"- Box -> a set of coordinates (x, y) obtained from the center of the\n" +"bounding box of another object selected below" + +#: flatcamTools/ToolDblSided.py:189 +msgid "Point coordinates" +msgstr "Point coordinates" + +#: flatcamTools/ToolDblSided.py:194 +#| msgid "" +#| "Add the coordinates in format (x, y) through which the mirroring " +#| "axis \n" +#| " selected in 'MIRROR AXIS' pass.\n" +#| "The (x, y) coordinates are captured by pressing SHIFT key\n" +#| "and left mouse button click on canvas or you can enter the coordinates " +#| "manually." +msgid "" +"Add the coordinates in format (x, y) through which the mirroring " +"axis\n" +" selected in 'MIRROR AXIS' pass.\n" +"The (x, y) coordinates are captured by pressing SHIFT key\n" +"and left mouse button click on canvas or you can enter the coordinates " +"manually." +msgstr "" +"Add the coordinates in format (x, y) through which the mirroring " +"axis\n" +" selected in 'MIRROR AXIS' pass.\n" +"The (x, y) coordinates are captured by pressing SHIFT key\n" +"and left mouse button click on canvas or you can enter the coordinates " +"manually." + +#: flatcamTools/ToolDblSided.py:218 +msgid "" +"It can be of type: Gerber or Excellon or Geometry.\n" +"The coordinates of the center of the bounding box are used\n" +"as reference for mirror operation." +msgstr "" +"It can be of type: Gerber or Excellon or Geometry.\n" +"The coordinates of the center of the bounding box are used\n" +"as reference for mirror operation." + +#: flatcamTools/ToolDblSided.py:252 +msgid "Bounds Values" +msgstr "Bounds Values" + +#: flatcamTools/ToolDblSided.py:254 +msgid "" +"Select on canvas the object(s)\n" +"for which to calculate bounds values." +msgstr "" +"Select on canvas the object(s)\n" +"for which to calculate bounds values." + +#: flatcamTools/ToolDblSided.py:264 +msgid "X min" +msgstr "X min" + +#: flatcamTools/ToolDblSided.py:266 flatcamTools/ToolDblSided.py:280 +msgid "Minimum location." +msgstr "Minimum location." + +#: flatcamTools/ToolDblSided.py:278 +msgid "Y min" +msgstr "Y min" + +#: flatcamTools/ToolDblSided.py:292 +msgid "X max" +msgstr "X max" + +#: flatcamTools/ToolDblSided.py:294 flatcamTools/ToolDblSided.py:308 +msgid "Maximum location." +msgstr "Maximum location." + +#: flatcamTools/ToolDblSided.py:306 +msgid "Y max" +msgstr "Y max" + +#: flatcamTools/ToolDblSided.py:317 +msgid "Center point coordinates" +msgstr "Center point coordinates" + +#: flatcamTools/ToolDblSided.py:319 +msgid "Centroid" +msgstr "Centroid" + +#: flatcamTools/ToolDblSided.py:321 +msgid "" +"The center point location for the rectangular\n" +"bounding shape. Centroid. Format is (x, y)." +msgstr "" +"The center point location for the rectangular\n" +"bounding shape. Centroid. Format is (x, y)." + +#: flatcamTools/ToolDblSided.py:330 +msgid "Calculate Bounds Values" +msgstr "Calculate Bounds Values" + +#: flatcamTools/ToolDblSided.py:332 +msgid "" +"Calculate the enveloping rectangular shape coordinates,\n" +"for the selection of objects.\n" +"The envelope shape is parallel with the X, Y axis." +msgstr "" +"Calculate the enveloping rectangular shape coordinates,\n" +"for the selection of objects.\n" +"The envelope shape is parallel with the X, Y axis." + +#: flatcamTools/ToolDblSided.py:352 +msgid "PCB Alignment" +msgstr "PCB Alignment" + +#: flatcamTools/ToolDblSided.py:354 flatcamTools/ToolDblSided.py:456 +msgid "" +"Creates an Excellon Object containing the\n" +"specified alignment holes and their mirror\n" +"images." +msgstr "" +"Creates an Excellon Object containing the\n" +"specified alignment holes and their mirror\n" +"images." + +#: flatcamTools/ToolDblSided.py:361 +msgid "Drill Diameter" +msgstr "Drill Diameter" + +#: flatcamTools/ToolDblSided.py:390 flatcamTools/ToolDblSided.py:397 +msgid "" +"The reference point used to create the second alignment drill\n" +"from the first alignment drill, by doing mirror.\n" +"It can be modified in the Mirror Parameters -> Reference section" +msgstr "" +"The reference point used to create the second alignment drill\n" +"from the first alignment drill, by doing mirror.\n" +"It can be modified in the Mirror Parameters -> Reference section" + +#: flatcamTools/ToolDblSided.py:410 +msgid "Alignment Drill Coordinates" +msgstr "Alignment Drill Coordinates" + +#: flatcamTools/ToolDblSided.py:412 +msgid "" +"Alignment holes (x1, y1), (x2, y2), ... on one side of the mirror axis. For " +"each set of (x, y) coordinates\n" +"entered here, a pair of drills will be created:\n" +"\n" +"- one drill at the coordinates from the field\n" +"- one drill in mirror position over the axis selected above in the 'Align " +"Axis'." +msgstr "" +"Alignment holes (x1, y1), (x2, y2), ... on one side of the mirror axis. For " +"each set of (x, y) coordinates\n" +"entered here, a pair of drills will be created:\n" +"\n" +"- one drill at the coordinates from the field\n" +"- one drill in mirror position over the axis selected above in the 'Align " +"Axis'." + +#: flatcamTools/ToolDblSided.py:420 +msgid "Drill coordinates" +msgstr "Drill coordinates" + +#: flatcamTools/ToolDblSided.py:427 +msgid "" +"Add alignment drill holes coordinates in the format: (x1, y1), (x2, " +"y2), ... \n" +"on one side of the alignment axis.\n" +"\n" +"The coordinates set can be obtained:\n" +"- press SHIFT key and left mouse clicking on canvas. Then click Add.\n" +"- press SHIFT key and left mouse clicking on canvas. Then Ctrl+V in the " +"field.\n" +"- press SHIFT key and left mouse clicking on canvas. Then RMB click in the " +"field and click Paste.\n" +"- by entering the coords manually in the format: (x1, y1), (x2, y2), ..." +msgstr "" +"Add alignment drill holes coordinates in the format: (x1, y1), (x2, " +"y2), ... \n" +"on one side of the alignment axis.\n" +"\n" +"The coordinates set can be obtained:\n" +"- press SHIFT key and left mouse clicking on canvas. Then click Add.\n" +"- press SHIFT key and left mouse clicking on canvas. Then Ctrl+V in the " +"field.\n" +"- press SHIFT key and left mouse clicking on canvas. Then RMB click in the " +"field and click Paste.\n" +"- by entering the coords manually in the format: (x1, y1), (x2, y2), ..." + +#: flatcamTools/ToolDblSided.py:442 +msgid "Delete Last" +msgstr "Delete Last" + +#: flatcamTools/ToolDblSided.py:444 +msgid "Delete the last coordinates tuple in the list." +msgstr "Delete the last coordinates tuple in the list." + +#: flatcamTools/ToolDblSided.py:454 +msgid "Create Excellon Object" +msgstr "Create Excellon Object" + +#: flatcamTools/ToolDblSided.py:541 +msgid "2-Sided Tool" +msgstr "2-Sided Tool" + +#: flatcamTools/ToolDblSided.py:581 +msgid "" +"'Point' reference is selected and 'Point' coordinates are missing. Add them " +"and retry." +msgstr "" +"'Point' reference is selected and 'Point' coordinates are missing. Add them " +"and retry." + +#: flatcamTools/ToolDblSided.py:600 +msgid "There is no Box reference object loaded. Load one and retry." +msgstr "There is no Box reference object loaded. Load one and retry." + +#: flatcamTools/ToolDblSided.py:612 +msgid "No value or wrong format in Drill Dia entry. Add it and retry." +msgstr "No value or wrong format in Drill Dia entry. Add it and retry." + +#: flatcamTools/ToolDblSided.py:623 +msgid "There are no Alignment Drill Coordinates to use. Add them and retry." +msgstr "There are no Alignment Drill Coordinates to use. Add them and retry." + +#: flatcamTools/ToolDblSided.py:648 +msgid "Excellon object with alignment drills created..." +msgstr "Excellon object with alignment drills created..." + +#: flatcamTools/ToolDblSided.py:661 flatcamTools/ToolDblSided.py:704 +#: flatcamTools/ToolDblSided.py:748 +msgid "Only Gerber, Excellon and Geometry objects can be mirrored." +msgstr "Only Gerber, Excellon and Geometry objects can be mirrored." + +#: flatcamTools/ToolDblSided.py:671 flatcamTools/ToolDblSided.py:715 +msgid "" +"There are no Point coordinates in the Point field. Add coords and try " +"again ..." +msgstr "" +"There are no Point coordinates in the Point field. Add coords and try " +"again ..." + +#: flatcamTools/ToolDblSided.py:681 flatcamTools/ToolDblSided.py:725 +#: flatcamTools/ToolDblSided.py:762 +msgid "There is no Box object loaded ..." +msgstr "There is no Box object loaded ..." + +#: flatcamTools/ToolDblSided.py:691 flatcamTools/ToolDblSided.py:735 +#: flatcamTools/ToolDblSided.py:772 +msgid "was mirrored" +msgstr "was mirrored" + +#: flatcamTools/ToolDblSided.py:700 flatcamTools/ToolPunchGerber.py:533 +msgid "There is no Excellon object loaded ..." +msgstr "There is no Excellon object loaded ..." + +#: flatcamTools/ToolDblSided.py:744 +msgid "There is no Geometry object loaded ..." +msgstr "There is no Geometry object loaded ..." + +#: flatcamTools/ToolDistance.py:57 flatcamTools/ToolDistanceMin.py:51 +msgid "Those are the units in which the distance is measured." +msgstr "Those are the units in which the distance is measured." + +#: flatcamTools/ToolDistance.py:58 flatcamTools/ToolDistanceMin.py:52 +msgid "METRIC (mm)" +msgstr "METRIC (mm)" + +#: flatcamTools/ToolDistance.py:58 flatcamTools/ToolDistanceMin.py:52 +msgid "INCH (in)" +msgstr "INCH (in)" + +#: flatcamTools/ToolDistance.py:64 +msgid "Snap to center" +msgstr "Snap to center" + +#: flatcamTools/ToolDistance.py:66 +msgid "" +"Mouse cursor will snap to the center of the pad/drill\n" +"when it is hovering over the geometry of the pad/drill." +msgstr "" +"Mouse cursor will snap to the center of the pad/drill\n" +"when it is hovering over the geometry of the pad/drill." + +#: flatcamTools/ToolDistance.py:76 +msgid "Start Coords" +msgstr "Start Coords" + +#: flatcamTools/ToolDistance.py:77 flatcamTools/ToolDistance.py:82 +msgid "This is measuring Start point coordinates." +msgstr "This is measuring Start point coordinates." + +#: flatcamTools/ToolDistance.py:87 +msgid "Stop Coords" +msgstr "Stop Coords" + +#: flatcamTools/ToolDistance.py:88 flatcamTools/ToolDistance.py:93 +msgid "This is the measuring Stop point coordinates." +msgstr "This is the measuring Stop point coordinates." + +#: flatcamTools/ToolDistance.py:98 flatcamTools/ToolDistanceMin.py:63 +msgid "Dx" +msgstr "Dx" + +#: flatcamTools/ToolDistance.py:99 flatcamTools/ToolDistance.py:104 +#: flatcamTools/ToolDistanceMin.py:64 flatcamTools/ToolDistanceMin.py:93 +msgid "This is the distance measured over the X axis." +msgstr "This is the distance measured over the X axis." + +#: flatcamTools/ToolDistance.py:109 flatcamTools/ToolDistanceMin.py:66 +msgid "Dy" +msgstr "Dy" + +#: flatcamTools/ToolDistance.py:110 flatcamTools/ToolDistance.py:115 +#: flatcamTools/ToolDistanceMin.py:67 flatcamTools/ToolDistanceMin.py:98 +msgid "This is the distance measured over the Y axis." +msgstr "This is the distance measured over the Y axis." + +#: flatcamTools/ToolDistance.py:121 flatcamTools/ToolDistance.py:126 +#: flatcamTools/ToolDistanceMin.py:70 flatcamTools/ToolDistanceMin.py:103 +msgid "This is orientation angle of the measuring line." +msgstr "This is orientation angle of the measuring line." + +#: flatcamTools/ToolDistance.py:131 flatcamTools/ToolDistanceMin.py:72 +msgid "DISTANCE" +msgstr "DISTANCE" + +#: flatcamTools/ToolDistance.py:132 flatcamTools/ToolDistance.py:137 +msgid "This is the point to point Euclidian distance." +msgstr "This is the point to point Euclidian distance." + +#: flatcamTools/ToolDistance.py:142 flatcamTools/ToolDistance.py:337 +#: flatcamTools/ToolDistanceMin.py:115 +msgid "Measure" +msgstr "Measure" + +#: flatcamTools/ToolDistance.py:272 +msgid "Working" +msgstr "Working" + +#: flatcamTools/ToolDistance.py:277 +msgid "MEASURING: Click on the Start point ..." +msgstr "MEASURING: Click on the Start point ..." + +#: flatcamTools/ToolDistance.py:387 +msgid "Distance Tool finished." +msgstr "Distance Tool finished." + +#: flatcamTools/ToolDistance.py:455 +msgid "Pads overlapped. Aborting." +msgstr "Pads overlapped. Aborting." + +#: flatcamTools/ToolDistance.py:485 +msgid "MEASURING: Click on the Destination point ..." +msgstr "MEASURING: Click on the Destination point ..." + +#: flatcamTools/ToolDistance.py:494 flatcamTools/ToolDistanceMin.py:285 +msgid "MEASURING" +msgstr "MEASURING" + +#: flatcamTools/ToolDistance.py:495 flatcamTools/ToolDistanceMin.py:286 +msgid "Result" +msgstr "Result" + +#: flatcamTools/ToolDistanceMin.py:32 flatcamTools/ToolDistanceMin.py:144 +msgid "Minimum Distance Tool" +msgstr "Minimum Distance Tool" + +#: flatcamTools/ToolDistanceMin.py:55 +msgid "First object point" +msgstr "First object point" + +#: flatcamTools/ToolDistanceMin.py:56 flatcamTools/ToolDistanceMin.py:81 +msgid "" +"This is first object point coordinates.\n" +"This is the start point for measuring distance." +msgstr "" +"This is first object point coordinates.\n" +"This is the start point for measuring distance." + +#: flatcamTools/ToolDistanceMin.py:59 +msgid "Second object point" +msgstr "Second object point" + +#: flatcamTools/ToolDistanceMin.py:60 flatcamTools/ToolDistanceMin.py:87 +msgid "" +"This is second object point coordinates.\n" +"This is the end point for measuring distance." +msgstr "" +"This is second object point coordinates.\n" +"This is the end point for measuring distance." + +#: flatcamTools/ToolDistanceMin.py:73 flatcamTools/ToolDistanceMin.py:108 +msgid "This is the point to point Euclidean distance." +msgstr "This is the point to point Euclidean distance." + +#: flatcamTools/ToolDistanceMin.py:75 +msgid "Half Point" +msgstr "Half Point" + +#: flatcamTools/ToolDistanceMin.py:76 flatcamTools/ToolDistanceMin.py:113 +msgid "This is the middle point of the point to point Euclidean distance." +msgstr "This is the middle point of the point to point Euclidean distance." + +#: flatcamTools/ToolDistanceMin.py:118 +msgid "Jump to Half Point" +msgstr "Jump to Half Point" + +#: flatcamTools/ToolDistanceMin.py:155 +msgid "" +"Select two objects and no more, to measure the distance between them ..." +msgstr "" +"Select two objects and no more, to measure the distance between them ..." + +#: flatcamTools/ToolDistanceMin.py:196 flatcamTools/ToolDistanceMin.py:217 +#: flatcamTools/ToolDistanceMin.py:226 flatcamTools/ToolDistanceMin.py:247 +msgid "Select two objects and no more. Currently the selection has objects: " +msgstr "Select two objects and no more. Currently the selection has objects: " + +#: flatcamTools/ToolDistanceMin.py:294 +msgid "Objects intersects or touch at" +msgstr "Objects intersects or touch at" + +#: flatcamTools/ToolDistanceMin.py:300 +msgid "Jumped to the half point between the two selected objects" +msgstr "Jumped to the half point between the two selected objects" + +#: flatcamTools/ToolExtractDrills.py:29 flatcamTools/ToolExtractDrills.py:295 +msgid "Extract Drills" +msgstr "Extract Drills" + +#: flatcamTools/ToolExtractDrills.py:62 +msgid "Gerber from which to extract drill holes" +msgstr "Gerber from which to extract drill holes" + +#: flatcamTools/ToolExtractDrills.py:297 +msgid "Extract drills from a given Gerber file." +msgstr "Extract drills from a given Gerber file." + +#: flatcamTools/ToolExtractDrills.py:478 flatcamTools/ToolExtractDrills.py:563 +#: flatcamTools/ToolExtractDrills.py:648 +msgid "No drills extracted. Try different parameters." +msgstr "No drills extracted. Try different parameters." + +#: flatcamTools/ToolFiducials.py:56 +msgid "Fiducials Coordinates" +msgstr "Fiducials Coordinates" + +#: flatcamTools/ToolFiducials.py:58 +msgid "" +"A table with the fiducial points coordinates,\n" +"in the format (x, y)." +msgstr "" +"A table with the fiducial points coordinates,\n" +"in the format (x, y)." + +#: flatcamTools/ToolFiducials.py:99 +msgid "Top Right" +msgstr "Top Right" + +#: flatcamTools/ToolFiducials.py:191 +msgid "" +"- 'Auto' - automatic placement of fiducials in the corners of the bounding " +"box.\n" +" - 'Manual' - manual placement of fiducials." +msgstr "" +"- 'Auto' - automatic placement of fiducials in the corners of the bounding " +"box.\n" +" - 'Manual' - manual placement of fiducials." + +#: flatcamTools/ToolFiducials.py:259 +msgid "Copper Gerber" +msgstr "Copper Gerber" + +#: flatcamTools/ToolFiducials.py:268 +msgid "Add Fiducial" +msgstr "Add Fiducial" + +#: flatcamTools/ToolFiducials.py:270 +msgid "Will add a polygon on the copper layer to serve as fiducial." +msgstr "Will add a polygon on the copper layer to serve as fiducial." + +#: flatcamTools/ToolFiducials.py:286 +msgid "Soldermask Gerber" +msgstr "Soldermask Gerber" + +#: flatcamTools/ToolFiducials.py:288 +msgid "The Soldermask Gerber object." +msgstr "The Soldermask Gerber object." + +#: flatcamTools/ToolFiducials.py:300 +msgid "Add Soldermask Opening" +msgstr "Add Soldermask Opening" + +#: flatcamTools/ToolFiducials.py:302 +msgid "" +"Will add a polygon on the soldermask layer\n" +"to serve as fiducial opening.\n" +"The diameter is always double of the diameter\n" +"for the copper fiducial." +msgstr "" +"Will add a polygon on the soldermask layer\n" +"to serve as fiducial opening.\n" +"The diameter is always double of the diameter\n" +"for the copper fiducial." + +#: flatcamTools/ToolFiducials.py:516 +msgid "Click to add first Fiducial. Bottom Left..." +msgstr "Click to add first Fiducial. Bottom Left..." + +#: flatcamTools/ToolFiducials.py:780 +msgid "Click to add the last fiducial. Top Right..." +msgstr "Click to add the last fiducial. Top Right..." + +#: flatcamTools/ToolFiducials.py:785 +msgid "Click to add the second fiducial. Top Left or Bottom Right..." +msgstr "Click to add the second fiducial. Top Left or Bottom Right..." + +#: flatcamTools/ToolFiducials.py:788 flatcamTools/ToolFiducials.py:797 +msgid "Done. All fiducials have been added." +msgstr "Done. All fiducials have been added." + +#: flatcamTools/ToolFiducials.py:874 +msgid "Fiducials Tool exit." +msgstr "Fiducials Tool exit." + +#: flatcamTools/ToolFilm.py:42 +msgid "Film PCB" +msgstr "Film PCB" + +#: flatcamTools/ToolFilm.py:78 +msgid "" +"Specify the type of object for which to create the film.\n" +"The object can be of type: Gerber or Geometry.\n" +"The selection here decide the type of objects that will be\n" +"in the Film Object combobox." +msgstr "" +"Specify the type of object for which to create the film.\n" +"The object can be of type: Gerber or Geometry.\n" +"The selection here decide the type of objects that will be\n" +"in the Film Object combobox." + +#: flatcamTools/ToolFilm.py:92 +msgid "Film Object" +msgstr "Film Object" + +#: flatcamTools/ToolFilm.py:94 +msgid "Object for which to create the film." +msgstr "Object for which to create the film." + +#: flatcamTools/ToolFilm.py:115 +msgid "" +"Specify the type of object to be used as an container for\n" +"film creation. It can be: Gerber or Geometry type.The selection here decide " +"the type of objects that will be\n" +"in the Box Object combobox." +msgstr "" +"Specify the type of object to be used as an container for\n" +"film creation. It can be: Gerber or Geometry type.The selection here decide " +"the type of objects that will be\n" +"in the Box Object combobox." + +#: flatcamTools/ToolFilm.py:129 +msgid "Box Object" +msgstr "Box Object" + +#: flatcamTools/ToolFilm.py:131 +msgid "" +"The actual object that is used a container for the\n" +" selected object for which we create the film.\n" +"Usually it is the PCB outline but it can be also the\n" +"same object for which the film is created." +msgstr "" +"The actual object that is used a container for the\n" +" selected object for which we create the film.\n" +"Usually it is the PCB outline but it can be also the\n" +"same object for which the film is created." + +#: flatcamTools/ToolFilm.py:273 +msgid "Film Parameters" +msgstr "Film Parameters" + +#: flatcamTools/ToolFilm.py:334 +msgid "Punch drill holes" +msgstr "Punch drill holes" + +#: flatcamTools/ToolFilm.py:335 +msgid "" +"When checked the generated film will have holes in pads when\n" +"the generated film is positive. This is done to help drilling,\n" +"when done manually." +msgstr "" +"When checked the generated film will have holes in pads when\n" +"the generated film is positive. This is done to help drilling,\n" +"when done manually." + +#: flatcamTools/ToolFilm.py:353 +msgid "Source" +msgstr "Source" + +#: flatcamTools/ToolFilm.py:355 +msgid "" +"The punch hole source can be:\n" +"- Excellon -> an Excellon holes center will serve as reference.\n" +"- Pad Center -> will try to use the pads center as reference." +msgstr "" +"The punch hole source can be:\n" +"- Excellon -> an Excellon holes center will serve as reference.\n" +"- Pad Center -> will try to use the pads center as reference." + +#: flatcamTools/ToolFilm.py:360 +msgid "Pad center" +msgstr "Pad center" + +#: flatcamTools/ToolFilm.py:365 +msgid "Excellon Obj" +msgstr "Excellon Obj" + +#: flatcamTools/ToolFilm.py:367 +msgid "" +"Remove the geometry of Excellon from the Film to create the holes in pads." +msgstr "" +"Remove the geometry of Excellon from the Film to create the holes in pads." + +#: flatcamTools/ToolFilm.py:381 +msgid "Punch Size" +msgstr "Punch Size" + +#: flatcamTools/ToolFilm.py:382 +msgid "The value here will control how big is the punch hole in the pads." +msgstr "The value here will control how big is the punch hole in the pads." + +#: flatcamTools/ToolFilm.py:502 +msgid "Save Film" +msgstr "Save Film" + +#: flatcamTools/ToolFilm.py:504 +msgid "" +"Create a Film for the selected object, within\n" +"the specified box. Does not create a new \n" +" FlatCAM object, but directly save it in the\n" +"selected format." +msgstr "" +"Create a Film for the selected object, within\n" +"the specified box. Does not create a new \n" +" FlatCAM object, but directly save it in the\n" +"selected format." + +#: flatcamTools/ToolFilm.py:664 +msgid "" +"Using the Pad center does not work on Geometry objects. Only a Gerber object " +"has pads." +msgstr "" +"Using the Pad center does not work on Geometry objects. Only a Gerber object " +"has pads." + +#: flatcamTools/ToolFilm.py:674 +msgid "No FlatCAM object selected. Load an object for Film and retry." +msgstr "No FlatCAM object selected. Load an object for Film and retry." + +#: flatcamTools/ToolFilm.py:681 +msgid "No FlatCAM object selected. Load an object for Box and retry." +msgstr "No FlatCAM object selected. Load an object for Box and retry." + +#: flatcamTools/ToolFilm.py:685 +msgid "No FlatCAM object selected." +msgstr "No FlatCAM object selected." + +#: flatcamTools/ToolFilm.py:696 +msgid "Generating Film ..." +msgstr "Generating Film ..." + +#: flatcamTools/ToolFilm.py:745 flatcamTools/ToolFilm.py:749 +msgid "Export positive film" +msgstr "Export positive film" + +#: flatcamTools/ToolFilm.py:782 +msgid "" +"No Excellon object selected. Load an object for punching reference and retry." +msgstr "" +"No Excellon object selected. Load an object for punching reference and retry." + +#: flatcamTools/ToolFilm.py:806 +msgid "" +" Could not generate punched hole film because the punch hole sizeis bigger " +"than some of the apertures in the Gerber object." +msgstr "" +" Could not generate punched hole film because the punch hole sizeis bigger " +"than some of the apertures in the Gerber object." + +#: flatcamTools/ToolFilm.py:818 +msgid "" +"Could not generate punched hole film because the punch hole sizeis bigger " +"than some of the apertures in the Gerber object." +msgstr "" +"Could not generate punched hole film because the punch hole sizeis bigger " +"than some of the apertures in the Gerber object." + +#: flatcamTools/ToolFilm.py:836 +msgid "" +"Could not generate punched hole film because the newly created object " +"geometry is the same as the one in the source object geometry..." +msgstr "" +"Could not generate punched hole film because the newly created object " +"geometry is the same as the one in the source object geometry..." + +#: flatcamTools/ToolFilm.py:891 flatcamTools/ToolFilm.py:895 +msgid "Export negative film" +msgstr "Export negative film" + +#: flatcamTools/ToolFilm.py:956 flatcamTools/ToolFilm.py:1139 +#: flatcamTools/ToolPanelize.py:431 +msgid "No object Box. Using instead" +msgstr "No object Box. Using instead" + +#: flatcamTools/ToolFilm.py:1072 flatcamTools/ToolFilm.py:1252 +msgid "Film file exported to" +msgstr "Film file exported to" + +#: flatcamTools/ToolFilm.py:1075 flatcamTools/ToolFilm.py:1255 +msgid "Generating Film ... Please wait." +msgstr "Generating Film ... Please wait." + +#: flatcamTools/ToolImage.py:24 +msgid "Image as Object" +msgstr "Image as Object" + +#: flatcamTools/ToolImage.py:33 +msgid "Image to PCB" +msgstr "Image to PCB" + +#: flatcamTools/ToolImage.py:56 +msgid "" +"Specify the type of object to create from the image.\n" +"It can be of type: Gerber or Geometry." +msgstr "" +"Specify the type of object to create from the image.\n" +"It can be of type: Gerber or Geometry." + +#: flatcamTools/ToolImage.py:65 +msgid "DPI value" +msgstr "DPI value" + +#: flatcamTools/ToolImage.py:66 +msgid "Specify a DPI value for the image." +msgstr "Specify a DPI value for the image." + +#: flatcamTools/ToolImage.py:72 +msgid "Level of detail" +msgstr "Level of detail" + +#: flatcamTools/ToolImage.py:81 +msgid "Image type" +msgstr "Image type" + +#: flatcamTools/ToolImage.py:83 +msgid "" +"Choose a method for the image interpretation.\n" +"B/W means a black & white image. Color means a colored image." +msgstr "" +"Choose a method for the image interpretation.\n" +"B/W means a black & white image. Color means a colored image." + +#: flatcamTools/ToolImage.py:92 flatcamTools/ToolImage.py:107 +#: flatcamTools/ToolImage.py:120 flatcamTools/ToolImage.py:133 +msgid "Mask value" +msgstr "Mask value" + +#: flatcamTools/ToolImage.py:94 +msgid "" +"Mask for monochrome image.\n" +"Takes values between [0 ... 255].\n" +"Decides the level of details to include\n" +"in the resulting geometry.\n" +"0 means no detail and 255 means everything \n" +"(which is totally black)." +msgstr "" +"Mask for monochrome image.\n" +"Takes values between [0 ... 255].\n" +"Decides the level of details to include\n" +"in the resulting geometry.\n" +"0 means no detail and 255 means everything \n" +"(which is totally black)." + +#: flatcamTools/ToolImage.py:109 +msgid "" +"Mask for RED color.\n" +"Takes values between [0 ... 255].\n" +"Decides the level of details to include\n" +"in the resulting geometry." +msgstr "" +"Mask for RED color.\n" +"Takes values between [0 ... 255].\n" +"Decides the level of details to include\n" +"in the resulting geometry." + +#: flatcamTools/ToolImage.py:122 +msgid "" +"Mask for GREEN color.\n" +"Takes values between [0 ... 255].\n" +"Decides the level of details to include\n" +"in the resulting geometry." +msgstr "" +"Mask for GREEN color.\n" +"Takes values between [0 ... 255].\n" +"Decides the level of details to include\n" +"in the resulting geometry." + +#: flatcamTools/ToolImage.py:135 +msgid "" +"Mask for BLUE color.\n" +"Takes values between [0 ... 255].\n" +"Decides the level of details to include\n" +"in the resulting geometry." +msgstr "" +"Mask for BLUE color.\n" +"Takes values between [0 ... 255].\n" +"Decides the level of details to include\n" +"in the resulting geometry." + +#: flatcamTools/ToolImage.py:143 +msgid "Import image" +msgstr "Import image" + +#: flatcamTools/ToolImage.py:145 +msgid "Open a image of raster type and then import it in FlatCAM." +msgstr "Open a image of raster type and then import it in FlatCAM." + +#: flatcamTools/ToolImage.py:182 +msgid "Image Tool" +msgstr "Image Tool" + +#: flatcamTools/ToolImage.py:234 flatcamTools/ToolImage.py:237 +msgid "Import IMAGE" +msgstr "Import IMAGE" + +#: flatcamTools/ToolImage.py:285 +msgid "Importing Image" +msgstr "Importing Image" + +#: flatcamTools/ToolInvertGerber.py:74 +msgid "Gerber object that will be inverted." +msgstr "Gerber object that will be inverted." + +#: flatcamTools/ToolInvertGerber.py:83 +msgid "Parameters for this tool" +msgstr "Parameters for this tool" + +#: flatcamTools/ToolInvertGerber.py:123 +msgid "Invert Gerber" +msgstr "Invert Gerber" + +#: flatcamTools/ToolInvertGerber.py:125 +msgid "" +"Will invert the Gerber object: areas that have copper\n" +"will be empty of copper and previous empty area will be\n" +"filled with copper." +msgstr "" +"Will invert the Gerber object: areas that have copper\n" +"will be empty of copper and previous empty area will be\n" +"filled with copper." + +#: flatcamTools/ToolInvertGerber.py:184 +msgid "Invert Tool" +msgstr "Invert Tool" + +#: flatcamTools/ToolMove.py:102 +msgid "MOVE: Click on the Start point ..." +msgstr "MOVE: Click on the Start point ..." + +#: flatcamTools/ToolMove.py:113 +msgid "Cancelled. No object(s) to move." +msgstr "Cancelled. No object(s) to move." + +#: flatcamTools/ToolMove.py:140 +msgid "MOVE: Click on the Destination point ..." +msgstr "MOVE: Click on the Destination point ..." + +#: flatcamTools/ToolMove.py:163 +msgid "Moving..." +msgstr "Moving..." + +#: flatcamTools/ToolMove.py:166 +msgid "No object(s) selected." +msgstr "No object(s) selected." + +#: flatcamTools/ToolMove.py:221 +msgid "Error when mouse left click." +msgstr "Error when mouse left click." + +#: flatcamTools/ToolNCC.py:42 +msgid "Non-Copper Clearing" +msgstr "Non-Copper Clearing" + +#: flatcamTools/ToolNCC.py:88 +msgid "" +"Specify the type of object to be cleared of excess copper.\n" +"It can be of type: Gerber or Geometry.\n" +"What is selected here will dictate the kind\n" +"of objects that will populate the 'Object' combobox." +msgstr "" +"Specify the type of object to be cleared of excess copper.\n" +"It can be of type: Gerber or Geometry.\n" +"What is selected here will dictate the kind\n" +"of objects that will populate the 'Object' combobox." + +#: flatcamTools/ToolNCC.py:110 +msgid "Object to be cleared of excess copper." +msgstr "Object to be cleared of excess copper." + +#: flatcamTools/ToolNCC.py:122 +msgid "" +"Tools pool from which the algorithm\n" +"will pick the ones used for copper clearing." +msgstr "" +"Tools pool from which the algorithm\n" +"will pick the ones used for copper clearing." + +#: flatcamTools/ToolNCC.py:138 +msgid "" +"This is the Tool Number.\n" +"Non copper clearing will start with the tool with the biggest \n" +"diameter, continuing until there are no more tools.\n" +"Only tools that create NCC clearing geometry will still be present\n" +"in the resulting geometry. This is because with some tools\n" +"this function will not be able to create painting geometry." +msgstr "" +"This is the Tool Number.\n" +"Non copper clearing will start with the tool with the biggest \n" +"diameter, continuing until there are no more tools.\n" +"Only tools that create NCC clearing geometry will still be present\n" +"in the resulting geometry. This is because with some tools\n" +"this function will not be able to create painting geometry." + +#: flatcamTools/ToolNCC.py:146 +msgid "" +"Tool Diameter. It's value (in current FlatCAM units)\n" +"is the cut width into the material." +msgstr "" +"Tool Diameter. It's value (in current FlatCAM units)\n" +"is the cut width into the material." + +#: flatcamTools/ToolNCC.py:150 +msgid "" +"The Tool Type (TT) can be:\n" +"- Circular with 1 ... 4 teeth -> it is informative only. Being circular,\n" +"the cut width in material is exactly the tool diameter.\n" +"- Ball -> informative only and make reference to the Ball type endmill.\n" +"- V-Shape -> it will disable de Z-Cut parameter in the resulting geometry UI " +"form\n" +"and enable two additional UI form fields in the resulting geometry: V-Tip " +"Dia and\n" +"V-Tip Angle. Adjusting those two values will adjust the Z-Cut parameter " +"such\n" +"as the cut width into material will be equal with the value in the Tool " +"Diameter\n" +"column of this table.\n" +"Choosing the 'V-Shape' Tool Type automatically will select the Operation " +"Type\n" +"in the resulting geometry as Isolation." +msgstr "" +"The Tool Type (TT) can be:\n" +"- Circular with 1 ... 4 teeth -> it is informative only. Being circular,\n" +"the cut width in material is exactly the tool diameter.\n" +"- Ball -> informative only and make reference to the Ball type endmill.\n" +"- V-Shape -> it will disable de Z-Cut parameter in the resulting geometry UI " +"form\n" +"and enable two additional UI form fields in the resulting geometry: V-Tip " +"Dia and\n" +"V-Tip Angle. Adjusting those two values will adjust the Z-Cut parameter " +"such\n" +"as the cut width into material will be equal with the value in the Tool " +"Diameter\n" +"column of this table.\n" +"Choosing the 'V-Shape' Tool Type automatically will select the Operation " +"Type\n" +"in the resulting geometry as Isolation." + +#: flatcamTools/ToolNCC.py:296 flatcamTools/ToolPaint.py:279 +msgid "" +"Add a new tool to the Tool Table\n" +"with the diameter specified above." +msgstr "" +"Add a new tool to the Tool Table\n" +"with the diameter specified above." + +#: flatcamTools/ToolNCC.py:318 flatcamTools/ToolPaint.py:301 +#: flatcamTools/ToolSolderPaste.py:130 +msgid "" +"Delete a selection of tools in the Tool Table\n" +"by first selecting a row(s) in the Tool Table." +msgstr "" +"Delete a selection of tools in the Tool Table\n" +"by first selecting a row(s) in the Tool Table." + +#: flatcamTools/ToolNCC.py:554 +msgid "" +"The type of FlatCAM object to be used as non copper clearing reference.\n" +"It can be Gerber, Excellon or Geometry." +msgstr "" +"The type of FlatCAM object to be used as non copper clearing reference.\n" +"It can be Gerber, Excellon or Geometry." + +#: flatcamTools/ToolNCC.py:597 flatcamTools/ToolPaint.py:537 +msgid "Generate Geometry" +msgstr "Generate Geometry" + +#: flatcamTools/ToolNCC.py:1420 flatcamTools/ToolPaint.py:1179 +#: flatcamTools/ToolSolderPaste.py:888 +msgid "Please enter a tool diameter to add, in Float format." +msgstr "Please enter a tool diameter to add, in Float format." + +#: flatcamTools/ToolNCC.py:1451 flatcamTools/ToolNCC.py:4008 +#: flatcamTools/ToolPaint.py:1203 flatcamTools/ToolPaint.py:3598 +#: flatcamTools/ToolSolderPaste.py:917 +msgid "Cancelled. Tool already in Tool Table." +msgstr "Cancelled. Tool already in Tool Table." + +#: flatcamTools/ToolNCC.py:1458 flatcamTools/ToolNCC.py:4025 +#: flatcamTools/ToolPaint.py:1208 flatcamTools/ToolPaint.py:3615 +msgid "New tool added to Tool Table." +msgstr "New tool added to Tool Table." + +#: flatcamTools/ToolNCC.py:1502 flatcamTools/ToolPaint.py:1252 +msgid "Tool from Tool Table was edited." +msgstr "Tool from Tool Table was edited." + +#: flatcamTools/ToolNCC.py:1514 flatcamTools/ToolPaint.py:1264 +#: flatcamTools/ToolSolderPaste.py:978 +msgid "Cancelled. New diameter value is already in the Tool Table." +msgstr "Cancelled. New diameter value is already in the Tool Table." + +#: flatcamTools/ToolNCC.py:1566 flatcamTools/ToolPaint.py:1362 +msgid "Delete failed. Select a tool to delete." +msgstr "Delete failed. Select a tool to delete." + +#: flatcamTools/ToolNCC.py:1572 flatcamTools/ToolPaint.py:1368 +msgid "Tool(s) deleted from Tool Table." +msgstr "Tool(s) deleted from Tool Table." + +#: flatcamTools/ToolNCC.py:1614 +msgid "Wrong Tool Dia value format entered, use a number." +msgstr "Wrong Tool Dia value format entered, use a number." + +#: flatcamTools/ToolNCC.py:1623 flatcamTools/ToolPaint.py:1419 +msgid "No selected tools in Tool Table." +msgstr "No selected tools in Tool Table." + +#: flatcamTools/ToolNCC.py:1699 flatcamTools/ToolPaint.py:1595 +msgid "Click the end point of the paint area." +msgstr "Click the end point of the paint area." + +#: flatcamTools/ToolNCC.py:1971 flatcamTools/ToolNCC.py:2959 +msgid "NCC Tool. Preparing non-copper polygons." +msgstr "NCC Tool. Preparing non-copper polygons." + +#: flatcamTools/ToolNCC.py:2030 flatcamTools/ToolNCC.py:3087 +msgid "NCC Tool. Calculate 'empty' area." +msgstr "NCC Tool. Calculate 'empty' area." + +#: flatcamTools/ToolNCC.py:2049 flatcamTools/ToolNCC.py:2155 +#: flatcamTools/ToolNCC.py:2169 flatcamTools/ToolNCC.py:3100 +#: flatcamTools/ToolNCC.py:3205 flatcamTools/ToolNCC.py:3220 +#: flatcamTools/ToolNCC.py:3486 flatcamTools/ToolNCC.py:3587 +#: flatcamTools/ToolNCC.py:3602 +msgid "Buffering finished" +msgstr "Buffering finished" + +#: flatcamTools/ToolNCC.py:2057 flatcamTools/ToolNCC.py:2176 +#: flatcamTools/ToolNCC.py:3108 flatcamTools/ToolNCC.py:3227 +#: flatcamTools/ToolNCC.py:3493 flatcamTools/ToolNCC.py:3609 +msgid "Could not get the extent of the area to be non copper cleared." +msgstr "Could not get the extent of the area to be non copper cleared." + +#: flatcamTools/ToolNCC.py:2084 flatcamTools/ToolNCC.py:2162 +#: flatcamTools/ToolNCC.py:3135 flatcamTools/ToolNCC.py:3212 +#: flatcamTools/ToolNCC.py:3513 flatcamTools/ToolNCC.py:3594 +msgid "" +"Isolation geometry is broken. Margin is less than isolation tool diameter." +msgstr "" +"Isolation geometry is broken. Margin is less than isolation tool diameter." + +#: flatcamTools/ToolNCC.py:2179 flatcamTools/ToolNCC.py:3231 +#: flatcamTools/ToolNCC.py:3612 +msgid "The selected object is not suitable for copper clearing." +msgstr "The selected object is not suitable for copper clearing." + +#: flatcamTools/ToolNCC.py:2186 flatcamTools/ToolNCC.py:3238 +msgid "NCC Tool. Finished calculation of 'empty' area." +msgstr "NCC Tool. Finished calculation of 'empty' area." + +#: flatcamTools/ToolNCC.py:2217 flatcamTools/ToolNCC.py:2219 +#: flatcamTools/ToolNCC.py:2911 flatcamTools/ToolNCC.py:2913 +msgid "Non-Copper clearing ..." +msgstr "Non-Copper clearing ..." + +#: flatcamTools/ToolNCC.py:2273 flatcamTools/ToolNCC.py:3055 +msgid "" +"NCC Tool. Finished non-copper polygons. Normal copper clearing task started." +msgstr "" +"NCC Tool. Finished non-copper polygons. Normal copper clearing task started." + +#: flatcamTools/ToolNCC.py:2307 flatcamTools/ToolNCC.py:2587 +msgid "NCC Tool failed creating bounding box." +msgstr "NCC Tool failed creating bounding box." + +#: flatcamTools/ToolNCC.py:2321 flatcamTools/ToolNCC.py:2604 +#: flatcamTools/ToolNCC.py:3251 flatcamTools/ToolNCC.py:3637 +msgid "NCC Tool clearing with tool diameter" +msgstr "NCC Tool clearing with tool diameter" + +#: flatcamTools/ToolNCC.py:2321 flatcamTools/ToolNCC.py:2604 +#: flatcamTools/ToolNCC.py:3251 flatcamTools/ToolNCC.py:3637 +msgid "started." +msgstr "started." + +#: flatcamTools/ToolNCC.py:2513 flatcamTools/ToolNCC.py:3412 +msgid "" +"There is no NCC Geometry in the file.\n" +"Usually it means that the tool diameter is too big for the painted " +"geometry.\n" +"Change the painting parameters and try again." +msgstr "" +"There is no NCC Geometry in the file.\n" +"Usually it means that the tool diameter is too big for the painted " +"geometry.\n" +"Change the painting parameters and try again." + +#: flatcamTools/ToolNCC.py:2522 flatcamTools/ToolNCC.py:3421 +msgid "NCC Tool clear all done." +msgstr "NCC Tool clear all done." + +#: flatcamTools/ToolNCC.py:2525 flatcamTools/ToolNCC.py:3424 +msgid "NCC Tool clear all done but the copper features isolation is broken for" +msgstr "" +"NCC Tool clear all done but the copper features isolation is broken for" + +#: flatcamTools/ToolNCC.py:2527 flatcamTools/ToolNCC.py:2812 +#: flatcamTools/ToolNCC.py:3426 flatcamTools/ToolNCC.py:3809 +msgid "tools" +msgstr "tools" + +#: flatcamTools/ToolNCC.py:2808 flatcamTools/ToolNCC.py:3805 +msgid "NCC Tool Rest Machining clear all done." +msgstr "NCC Tool Rest Machining clear all done." + +#: flatcamTools/ToolNCC.py:2811 flatcamTools/ToolNCC.py:3808 +msgid "" +"NCC Tool Rest Machining clear all done but the copper features isolation is " +"broken for" +msgstr "" +"NCC Tool Rest Machining clear all done but the copper features isolation is " +"broken for" + +#: flatcamTools/ToolNCC.py:2923 +msgid "NCC Tool started. Reading parameters." +msgstr "NCC Tool started. Reading parameters." + +#: flatcamTools/ToolNCC.py:3901 +msgid "" +"Try to use the Buffering Type = Full in Preferences -> Gerber General. " +"Reload the Gerber file after this change." +msgstr "" +"Try to use the Buffering Type = Full in Preferences -> Gerber General. " +"Reload the Gerber file after this change." + +#: flatcamTools/ToolOptimal.py:79 +msgid "Number of decimals kept for found distances." +msgstr "Number of decimals kept for found distances." + +#: flatcamTools/ToolOptimal.py:87 +msgid "Minimum distance" +msgstr "Minimum distance" + +#: flatcamTools/ToolOptimal.py:88 +msgid "Display minimum distance between copper features." +msgstr "Display minimum distance between copper features." + +#: flatcamTools/ToolOptimal.py:92 +msgid "Determined" +msgstr "Determined" + +#: flatcamTools/ToolOptimal.py:106 +msgid "Occurring" +msgstr "Occurring" + +#: flatcamTools/ToolOptimal.py:107 +msgid "How many times this minimum is found." +msgstr "How many times this minimum is found." + +#: flatcamTools/ToolOptimal.py:113 +msgid "Minimum points coordinates" +msgstr "Minimum points coordinates" + +#: flatcamTools/ToolOptimal.py:114 flatcamTools/ToolOptimal.py:120 +msgid "Coordinates for points where minimum distance was found." +msgstr "Coordinates for points where minimum distance was found." + +#: flatcamTools/ToolOptimal.py:133 flatcamTools/ToolOptimal.py:209 +msgid "Jump to selected position" +msgstr "Jump to selected position" + +#: flatcamTools/ToolOptimal.py:135 flatcamTools/ToolOptimal.py:211 +msgid "" +"Select a position in the Locations text box and then\n" +"click this button." +msgstr "" +"Select a position in the Locations text box and then\n" +"click this button." + +#: flatcamTools/ToolOptimal.py:143 +msgid "Other distances" +msgstr "Other distances" + +#: flatcamTools/ToolOptimal.py:144 +msgid "" +"Will display other distances in the Gerber file ordered from\n" +"the minimum to the maximum, not including the absolute minimum." +msgstr "" +"Will display other distances in the Gerber file ordered from\n" +"the minimum to the maximum, not including the absolute minimum." + +#: flatcamTools/ToolOptimal.py:149 +msgid "Other distances points coordinates" +msgstr "Other distances points coordinates" + +#: flatcamTools/ToolOptimal.py:150 flatcamTools/ToolOptimal.py:164 +#: flatcamTools/ToolOptimal.py:171 flatcamTools/ToolOptimal.py:188 +#: flatcamTools/ToolOptimal.py:195 +msgid "" +"Other distances and the coordinates for points\n" +"where the distance was found." +msgstr "" +"Other distances and the coordinates for points\n" +"where the distance was found." + +#: flatcamTools/ToolOptimal.py:163 +msgid "Gerber distances" +msgstr "Gerber distances" + +#: flatcamTools/ToolOptimal.py:187 +msgid "Points coordinates" +msgstr "Points coordinates" + +#: flatcamTools/ToolOptimal.py:219 +msgid "Find Minimum" +msgstr "Find Minimum" + +#: flatcamTools/ToolOptimal.py:221 +msgid "" +"Calculate the minimum distance between copper features,\n" +"this will allow the determination of the right tool to\n" +"use for isolation or copper clearing." +msgstr "" +"Calculate the minimum distance between copper features,\n" +"this will allow the determination of the right tool to\n" +"use for isolation or copper clearing." + +#: flatcamTools/ToolOptimal.py:346 +msgid "Only Gerber objects can be evaluated." +msgstr "Only Gerber objects can be evaluated." + +#: flatcamTools/ToolOptimal.py:352 +msgid "" +"Optimal Tool. Started to search for the minimum distance between copper " +"features." +msgstr "" +"Optimal Tool. Started to search for the minimum distance between copper " +"features." + +#: flatcamTools/ToolOptimal.py:362 +msgid "Optimal Tool. Parsing geometry for aperture" +msgstr "Optimal Tool. Parsing geometry for aperture" + +#: flatcamTools/ToolOptimal.py:373 +msgid "Optimal Tool. Creating a buffer for the object geometry." +msgstr "Optimal Tool. Creating a buffer for the object geometry." + +#: flatcamTools/ToolOptimal.py:383 +msgid "" +"The Gerber object has one Polygon as geometry.\n" +"There are no distances between geometry elements to be found." +msgstr "" +"The Gerber object has one Polygon as geometry.\n" +"There are no distances between geometry elements to be found." + +#: flatcamTools/ToolOptimal.py:388 +msgid "" +"Optimal Tool. Finding the distances between each two elements. Iterations" +msgstr "" +"Optimal Tool. Finding the distances between each two elements. Iterations" + +#: flatcamTools/ToolOptimal.py:423 +msgid "Optimal Tool. Finding the minimum distance." +msgstr "Optimal Tool. Finding the minimum distance." + +#: flatcamTools/ToolOptimal.py:439 +msgid "Optimal Tool. Finished successfully." +msgstr "Optimal Tool. Finished successfully." + +#: flatcamTools/ToolPDF.py:157 flatcamTools/ToolPDF.py:161 +msgid "Open PDF" +msgstr "Open PDF" + +#: flatcamTools/ToolPDF.py:164 +msgid "Open PDF cancelled" +msgstr "Open PDF cancelled" + +#: flatcamTools/ToolPDF.py:195 +msgid "Parsing PDF file ..." +msgstr "Parsing PDF file ..." + +#: flatcamTools/ToolPDF.py:278 flatcamTools/ToolPDF.py:353 +#, python-format +msgid "Rendering PDF layer #%d ..." +msgstr "Rendering PDF layer #%d ..." + +#: flatcamTools/ToolPDF.py:283 flatcamTools/ToolPDF.py:358 +msgid "Open PDF file failed." +msgstr "Open PDF file failed." + +#: flatcamTools/ToolPDF.py:289 flatcamTools/ToolPDF.py:363 +msgid "Rendered" +msgstr "Rendered" + +#: flatcamTools/ToolPaint.py:82 +msgid "" +"Specify the type of object to be painted.\n" +"It can be of type: Gerber or Geometry.\n" +"What is selected here will dictate the kind\n" +"of objects that will populate the 'Object' combobox." +msgstr "" +"Specify the type of object to be painted.\n" +"It can be of type: Gerber or Geometry.\n" +"What is selected here will dictate the kind\n" +"of objects that will populate the 'Object' combobox." + +#: flatcamTools/ToolPaint.py:104 +msgid "Object to be painted." +msgstr "Object to be painted." + +#: flatcamTools/ToolPaint.py:117 +msgid "" +"Tools pool from which the algorithm\n" +"will pick the ones used for painting." +msgstr "" +"Tools pool from which the algorithm\n" +"will pick the ones used for painting." + +#: flatcamTools/ToolPaint.py:134 +msgid "" +"This is the Tool Number.\n" +"Painting will start with the tool with the biggest diameter,\n" +"continuing until there are no more tools.\n" +"Only tools that create painting geometry will still be present\n" +"in the resulting geometry. This is because with some tools\n" +"this function will not be able to create painting geometry." +msgstr "" +"This is the Tool Number.\n" +"Painting will start with the tool with the biggest diameter,\n" +"continuing until there are no more tools.\n" +"Only tools that create painting geometry will still be present\n" +"in the resulting geometry. This is because with some tools\n" +"this function will not be able to create painting geometry." + +#: flatcamTools/ToolPaint.py:146 +msgid "" +"The Tool Type (TT) can be:
    - Circular with 1 ... 4 teeth -> it is " +"informative only. Being circular,
    the cut width in material is exactly " +"the tool diameter.
    - Ball -> informative only and make reference " +"to the Ball type endmill.
    - V-Shape -> it will disable de Z-Cut " +"parameter in the resulting geometry UI form and enable two additional UI " +"form fields in the resulting geometry: V-Tip Dia and V-Tip Angle. Adjusting " +"those two values will adjust the Z-Cut parameter such as the cut width into " +"material will be equal with the value in the Tool Diameter column of this " +"table.
    Choosing the V-Shape Tool Type automatically will select " +"the Operation Type in the resulting geometry as Isolation." +msgstr "" +"The Tool Type (TT) can be:
    - Circular with 1 ... 4 teeth -> it is " +"informative only. Being circular,
    the cut width in material is exactly " +"the tool diameter.
    - Ball -> informative only and make reference " +"to the Ball type endmill.
    - V-Shape -> it will disable de Z-Cut " +"parameter in the resulting geometry UI form and enable two additional UI " +"form fields in the resulting geometry: V-Tip Dia and V-Tip Angle. Adjusting " +"those two values will adjust the Z-Cut parameter such as the cut width into " +"material will be equal with the value in the Tool Diameter column of this " +"table.
    Choosing the V-Shape Tool Type automatically will select " +"the Operation Type in the resulting geometry as Isolation." + +#: flatcamTools/ToolPaint.py:498 +msgid "" +"The type of FlatCAM object to be used as paint reference.\n" +"It can be Gerber, Excellon or Geometry." +msgstr "" +"The type of FlatCAM object to be used as paint reference.\n" +"It can be Gerber, Excellon or Geometry." + +#: flatcamTools/ToolPaint.py:539 +msgid "" +"- 'Area Selection' - left mouse click to start selection of the area to be " +"painted.\n" +"Keeping a modifier key pressed (CTRL or SHIFT) will allow to add multiple " +"areas.\n" +"- 'All Polygons' - the Paint will start after click.\n" +"- 'Reference Object' - will do non copper clearing within the area\n" +"specified by another object." +msgstr "" +"- 'Area Selection' - left mouse click to start selection of the area to be " +"painted.\n" +"Keeping a modifier key pressed (CTRL or SHIFT) will allow to add multiple " +"areas.\n" +"- 'All Polygons' - the Paint will start after click.\n" +"- 'Reference Object' - will do non copper clearing within the area\n" +"specified by another object." + +#: flatcamTools/ToolPaint.py:1388 +#, python-format +msgid "Could not retrieve object: %s" +msgstr "Could not retrieve object: %s" + +#: flatcamTools/ToolPaint.py:1398 +msgid "Can't do Paint on MultiGeo geometries" +msgstr "Can't do Paint on MultiGeo geometries" + +#: flatcamTools/ToolPaint.py:1428 +msgid "Click on a polygon to paint it." +msgstr "Click on a polygon to paint it." + +#: flatcamTools/ToolPaint.py:1448 +msgid "Click the start point of the paint area." +msgstr "Click the start point of the paint area." + +#: flatcamTools/ToolPaint.py:1513 +msgid "Click to add next polygon or right click to start painting." +msgstr "Click to add next polygon or right click to start painting." + +#: flatcamTools/ToolPaint.py:1526 +msgid "Click to add/remove next polygon or right click to start painting." +msgstr "Click to add/remove next polygon or right click to start painting." + +#: flatcamTools/ToolPaint.py:2024 +msgid "Painting polygon with method: lines." +msgstr "Painting polygon with method: lines." + +#: flatcamTools/ToolPaint.py:2036 +msgid "Failed. Painting polygon with method: seed." +msgstr "Failed. Painting polygon with method: seed." + +#: flatcamTools/ToolPaint.py:2047 +msgid "Failed. Painting polygon with method: standard." +msgstr "Failed. Painting polygon with method: standard." + +#: flatcamTools/ToolPaint.py:2063 +msgid "Geometry could not be painted completely" +msgstr "Geometry could not be painted completely" + +#: flatcamTools/ToolPaint.py:2092 flatcamTools/ToolPaint.py:2095 +#: flatcamTools/ToolPaint.py:2103 flatcamTools/ToolPaint.py:2406 +#: flatcamTools/ToolPaint.py:2409 flatcamTools/ToolPaint.py:2417 +#: flatcamTools/ToolPaint.py:2905 flatcamTools/ToolPaint.py:2908 +#: flatcamTools/ToolPaint.py:2914 +msgid "Paint Tool." +msgstr "Paint Tool." + +#: flatcamTools/ToolPaint.py:2092 flatcamTools/ToolPaint.py:2095 +#: flatcamTools/ToolPaint.py:2103 +msgid "Normal painting polygon task started." +msgstr "Normal painting polygon task started." + +#: flatcamTools/ToolPaint.py:2093 flatcamTools/ToolPaint.py:2407 +#: flatcamTools/ToolPaint.py:2906 +msgid "Buffering geometry..." +msgstr "Buffering geometry..." + +#: flatcamTools/ToolPaint.py:2115 flatcamTools/ToolPaint.py:2424 +#: flatcamTools/ToolPaint.py:2922 +msgid "No polygon found." +msgstr "No polygon found." + +#: flatcamTools/ToolPaint.py:2145 +msgid "Painting polygon..." +msgstr "Painting polygon..." + +#: flatcamTools/ToolPaint.py:2155 flatcamTools/ToolPaint.py:2470 +#: flatcamTools/ToolPaint.py:2660 flatcamTools/ToolPaint.py:2968 +#: flatcamTools/ToolPaint.py:3147 +msgid "Painting with tool diameter = " +msgstr "Painting with tool diameter = " + +#: flatcamTools/ToolPaint.py:2156 flatcamTools/ToolPaint.py:2471 +#: flatcamTools/ToolPaint.py:2661 flatcamTools/ToolPaint.py:2969 +#: flatcamTools/ToolPaint.py:3148 +msgid "started" +msgstr "started" + +#: flatcamTools/ToolPaint.py:2181 flatcamTools/ToolPaint.py:2497 +#: flatcamTools/ToolPaint.py:2687 flatcamTools/ToolPaint.py:2995 +#: flatcamTools/ToolPaint.py:3174 +msgid "Margin parameter too big. Tool is not used" +msgstr "Margin parameter too big. Tool is not used" + +#: flatcamTools/ToolPaint.py:2239 flatcamTools/ToolPaint.py:2566 +#: flatcamTools/ToolPaint.py:2744 flatcamTools/ToolPaint.py:3058 +#: flatcamTools/ToolPaint.py:3236 +msgid "" +"Could not do Paint. Try a different combination of parameters. Or a " +"different strategy of paint" +msgstr "" +"Could not do Paint. Try a different combination of parameters. Or a " +"different strategy of paint" + +#: flatcamTools/ToolPaint.py:2296 flatcamTools/ToolPaint.py:2632 +#: flatcamTools/ToolPaint.py:2801 flatcamTools/ToolPaint.py:3119 +#: flatcamTools/ToolPaint.py:3298 +msgid "" +"There is no Painting Geometry in the file.\n" +"Usually it means that the tool diameter is too big for the painted " +"geometry.\n" +"Change the painting parameters and try again." +msgstr "" +"There is no Painting Geometry in the file.\n" +"Usually it means that the tool diameter is too big for the painted " +"geometry.\n" +"Change the painting parameters and try again." + +#: flatcamTools/ToolPaint.py:2319 +msgid "Paint Single failed." +msgstr "Paint Single failed." + +#: flatcamTools/ToolPaint.py:2325 +msgid "Paint Single Done." +msgstr "Paint Single Done." + +#: flatcamTools/ToolPaint.py:2327 flatcamTools/ToolPaint.py:2837 +#: flatcamTools/ToolPaint.py:3334 +msgid "Polygon Paint started ..." +msgstr "Polygon Paint started ..." + +#: flatcamTools/ToolPaint.py:2406 flatcamTools/ToolPaint.py:2409 +#: flatcamTools/ToolPaint.py:2417 +msgid "Paint all polygons task started." +msgstr "Paint all polygons task started." + +#: flatcamTools/ToolPaint.py:2448 flatcamTools/ToolPaint.py:2946 +msgid "Painting polygons..." +msgstr "Painting polygons..." + +#: flatcamTools/ToolPaint.py:2641 +msgid "Paint All Done." +msgstr "Paint All Done." + +#: flatcamTools/ToolPaint.py:2810 flatcamTools/ToolPaint.py:3307 +msgid "Paint All with Rest-Machining done." +msgstr "Paint All with Rest-Machining done." + +#: flatcamTools/ToolPaint.py:2829 +msgid "Paint All failed." +msgstr "Paint All failed." + +#: flatcamTools/ToolPaint.py:2835 +msgid "Paint Poly All Done." +msgstr "Paint Poly All Done." + +#: flatcamTools/ToolPaint.py:2905 flatcamTools/ToolPaint.py:2908 +#: flatcamTools/ToolPaint.py:2914 +msgid "Painting area task started." +msgstr "Painting area task started." + +#: flatcamTools/ToolPaint.py:3128 +msgid "Paint Area Done." +msgstr "Paint Area Done." + +#: flatcamTools/ToolPaint.py:3326 +msgid "Paint Area failed." +msgstr "Paint Area failed." + +#: flatcamTools/ToolPaint.py:3332 +msgid "Paint Poly Area Done." +msgstr "Paint Poly Area Done." + +#: flatcamTools/ToolPanelize.py:32 +msgid "Panelize PCB" +msgstr "Panelize PCB" + +#: flatcamTools/ToolPanelize.py:54 +msgid "" +"Specify the type of object to be panelized\n" +"It can be of type: Gerber, Excellon or Geometry.\n" +"The selection here decide the type of objects that will be\n" +"in the Object combobox." +msgstr "" +"Specify the type of object to be panelized\n" +"It can be of type: Gerber, Excellon or Geometry.\n" +"The selection here decide the type of objects that will be\n" +"in the Object combobox." + +#: flatcamTools/ToolPanelize.py:87 +msgid "" +"Object to be panelized. This means that it will\n" +"be duplicated in an array of rows and columns." +msgstr "" +"Object to be panelized. This means that it will\n" +"be duplicated in an array of rows and columns." + +#: flatcamTools/ToolPanelize.py:100 +msgid "Penelization Reference" +msgstr "Penelization Reference" + +#: flatcamTools/ToolPanelize.py:102 +msgid "" +"Choose the reference for panelization:\n" +"- Object = the bounding box of a different object\n" +"- Bounding Box = the bounding box of the object to be panelized\n" +"\n" +"The reference is useful when doing panelization for more than one\n" +"object. The spacings (really offsets) will be applied in reference\n" +"to this reference object therefore maintaining the panelized\n" +"objects in sync." +msgstr "" +"Choose the reference for panelization:\n" +"- Object = the bounding box of a different object\n" +"- Bounding Box = the bounding box of the object to be panelized\n" +"\n" +"The reference is useful when doing panelization for more than one\n" +"object. The spacings (really offsets) will be applied in reference\n" +"to this reference object therefore maintaining the panelized\n" +"objects in sync." + +#: flatcamTools/ToolPanelize.py:123 +msgid "Box Type" +msgstr "Box Type" + +#: flatcamTools/ToolPanelize.py:125 +msgid "" +"Specify the type of object to be used as an container for\n" +"panelization. It can be: Gerber or Geometry type.\n" +"The selection here decide the type of objects that will be\n" +"in the Box Object combobox." +msgstr "" +"Specify the type of object to be used as an container for\n" +"panelization. It can be: Gerber or Geometry type.\n" +"The selection here decide the type of objects that will be\n" +"in the Box Object combobox." + +#: flatcamTools/ToolPanelize.py:139 +msgid "" +"The actual object that is used a container for the\n" +" selected object that is to be panelized." +msgstr "" +"The actual object that is used a container for the\n" +" selected object that is to be panelized." + +#: flatcamTools/ToolPanelize.py:145 +msgid "Panel Data" +msgstr "Panel Data" + +#: flatcamTools/ToolPanelize.py:147 +msgid "" +"This informations will shape the resulting panel.\n" +"The number of rows and columns will set how many\n" +"duplicates of the original geometry will be generated.\n" +"\n" +"The spacings will set the distance between any two\n" +"elements of the panel array." +msgstr "" +"This informations will shape the resulting panel.\n" +"The number of rows and columns will set how many\n" +"duplicates of the original geometry will be generated.\n" +"\n" +"The spacings will set the distance between any two\n" +"elements of the panel array." + +#: flatcamTools/ToolPanelize.py:206 +msgid "" +"Choose the type of object for the panel object:\n" +"- Geometry\n" +"- Gerber" +msgstr "" +"Choose the type of object for the panel object:\n" +"- Geometry\n" +"- Gerber" + +#: flatcamTools/ToolPanelize.py:214 +msgid "Constrain panel within" +msgstr "Constrain panel within" + +#: flatcamTools/ToolPanelize.py:250 +msgid "Panelize Object" +msgstr "Panelize Object" + +#: flatcamTools/ToolPanelize.py:252 flatcamTools/ToolRulesCheck.py:501 +msgid "" +"Panelize the specified object around the specified box.\n" +"In other words it creates multiple copies of the source object,\n" +"arranged in a 2D array of rows and columns." +msgstr "" +"Panelize the specified object around the specified box.\n" +"In other words it creates multiple copies of the source object,\n" +"arranged in a 2D array of rows and columns." + +#: flatcamTools/ToolPanelize.py:320 +msgid "Panel. Tool" +msgstr "Panel. Tool" + +#: flatcamTools/ToolPanelize.py:458 +msgid "Columns or Rows are zero value. Change them to a positive integer." +msgstr "Columns or Rows are zero value. Change them to a positive integer." + +#: flatcamTools/ToolPanelize.py:495 +msgid "Generating panel ... " +msgstr "Generating panel ... " + +#: flatcamTools/ToolPanelize.py:775 +msgid "Generating panel ... Adding the Gerber code." +msgstr "Generating panel ... Adding the Gerber code." + +#: flatcamTools/ToolPanelize.py:786 +msgid "Generating panel... Spawning copies" +msgstr "Generating panel... Spawning copies" + +#: flatcamTools/ToolPanelize.py:793 +msgid "Panel done..." +msgstr "Panel done..." + +#: flatcamTools/ToolPanelize.py:796 +#, python-brace-format +msgid "" +"{text} Too big for the constrain area. Final panel has {col} columns and " +"{row} rows" +msgstr "" +"{text} Too big for the constrain area. Final panel has {col} columns and " +"{row} rows" + +#: flatcamTools/ToolPanelize.py:805 +msgid "Panel created successfully." +msgstr "Panel created successfully." + +#: flatcamTools/ToolPcbWizard.py:31 +msgid "PcbWizard Import Tool" +msgstr "PcbWizard Import Tool" + +#: flatcamTools/ToolPcbWizard.py:40 +msgid "Import 2-file Excellon" +msgstr "Import 2-file Excellon" + +#: flatcamTools/ToolPcbWizard.py:51 +msgid "Load files" +msgstr "Load files" + +#: flatcamTools/ToolPcbWizard.py:57 +msgid "Excellon file" +msgstr "Excellon file" + +#: flatcamTools/ToolPcbWizard.py:59 +msgid "" +"Load the Excellon file.\n" +"Usually it has a .DRL extension" +msgstr "" +"Load the Excellon file.\n" +"Usually it has a .DRL extension" + +#: flatcamTools/ToolPcbWizard.py:65 +msgid "INF file" +msgstr "INF file" + +#: flatcamTools/ToolPcbWizard.py:67 +msgid "Load the INF file." +msgstr "Load the INF file." + +#: flatcamTools/ToolPcbWizard.py:79 +msgid "Tool Number" +msgstr "Tool Number" + +#: flatcamTools/ToolPcbWizard.py:81 +msgid "Tool diameter in file units." +msgstr "Tool diameter in file units." + +#: flatcamTools/ToolPcbWizard.py:87 +msgid "Excellon format" +msgstr "Excellon format" + +#: flatcamTools/ToolPcbWizard.py:95 +msgid "Int. digits" +msgstr "Int. digits" + +#: flatcamTools/ToolPcbWizard.py:97 +msgid "The number of digits for the integral part of the coordinates." +msgstr "The number of digits for the integral part of the coordinates." + +#: flatcamTools/ToolPcbWizard.py:104 +msgid "Frac. digits" +msgstr "Frac. digits" + +#: flatcamTools/ToolPcbWizard.py:106 +msgid "The number of digits for the fractional part of the coordinates." +msgstr "The number of digits for the fractional part of the coordinates." + +#: flatcamTools/ToolPcbWizard.py:113 +msgid "No Suppression" +msgstr "No Suppression" + +#: flatcamTools/ToolPcbWizard.py:114 +msgid "Zeros supp." +msgstr "Zeros supp." + +#: flatcamTools/ToolPcbWizard.py:116 +msgid "" +"The type of zeros suppression used.\n" +"Can be of type:\n" +"- LZ = leading zeros are kept\n" +"- TZ = trailing zeros are kept\n" +"- No Suppression = no zero suppression" +msgstr "" +"The type of zeros suppression used.\n" +"Can be of type:\n" +"- LZ = leading zeros are kept\n" +"- TZ = trailing zeros are kept\n" +"- No Suppression = no zero suppression" + +#: flatcamTools/ToolPcbWizard.py:129 +msgid "" +"The type of units that the coordinates and tool\n" +"diameters are using. Can be INCH or MM." +msgstr "" +"The type of units that the coordinates and tool\n" +"diameters are using. Can be INCH or MM." + +#: flatcamTools/ToolPcbWizard.py:136 +msgid "Import Excellon" +msgstr "Import Excellon" + +#: flatcamTools/ToolPcbWizard.py:138 +msgid "" +"Import in FlatCAM an Excellon file\n" +"that store it's information's in 2 files.\n" +"One usually has .DRL extension while\n" +"the other has .INF extension." +msgstr "" +"Import in FlatCAM an Excellon file\n" +"that store it's information's in 2 files.\n" +"One usually has .DRL extension while\n" +"the other has .INF extension." + +#: flatcamTools/ToolPcbWizard.py:197 +msgid "PCBWizard Tool" +msgstr "PCBWizard Tool" + +#: flatcamTools/ToolPcbWizard.py:291 flatcamTools/ToolPcbWizard.py:295 +msgid "Load PcbWizard Excellon file" +msgstr "Load PcbWizard Excellon file" + +#: flatcamTools/ToolPcbWizard.py:314 flatcamTools/ToolPcbWizard.py:318 +msgid "Load PcbWizard INF file" +msgstr "Load PcbWizard INF file" + +#: flatcamTools/ToolPcbWizard.py:366 +msgid "" +"The INF file does not contain the tool table.\n" +"Try to open the Excellon file from File -> Open -> Excellon\n" +"and edit the drill diameters manually." +msgstr "" +"The INF file does not contain the tool table.\n" +"Try to open the Excellon file from File -> Open -> Excellon\n" +"and edit the drill diameters manually." + +#: flatcamTools/ToolPcbWizard.py:387 +msgid "PcbWizard .INF file loaded." +msgstr "PcbWizard .INF file loaded." + +#: flatcamTools/ToolPcbWizard.py:392 +msgid "Main PcbWizard Excellon file loaded." +msgstr "Main PcbWizard Excellon file loaded." + +#: flatcamTools/ToolPcbWizard.py:428 +msgid "Cannot parse file" +msgstr "Cannot parse file" + +#: flatcamTools/ToolPcbWizard.py:452 +msgid "Importing Excellon." +msgstr "Importing Excellon." + +#: flatcamTools/ToolPcbWizard.py:459 +msgid "Import Excellon file failed." +msgstr "Import Excellon file failed." + +#: flatcamTools/ToolPcbWizard.py:467 +msgid "Imported" +msgstr "Imported" + +#: flatcamTools/ToolPcbWizard.py:471 +msgid "Excellon merging is in progress. Please wait..." +msgstr "Excellon merging is in progress. Please wait..." + +#: flatcamTools/ToolPcbWizard.py:474 +msgid "The imported Excellon file is None." +msgstr "The imported Excellon file is None." + +#: flatcamTools/ToolProperties.py:131 +msgid "Object Properties are displayed." +msgstr "Object Properties are displayed." + +#: flatcamTools/ToolProperties.py:136 +msgid "Properties Tool" +msgstr "Properties Tool" + +#: flatcamTools/ToolProperties.py:150 +msgid "TYPE" +msgstr "TYPE" + +#: flatcamTools/ToolProperties.py:151 +msgid "NAME" +msgstr "NAME" + +#: flatcamTools/ToolProperties.py:153 +msgid "Dimensions" +msgstr "Dimensions" + +#: flatcamTools/ToolProperties.py:181 +msgid "Geo Type" +msgstr "Geo Type" + +#: flatcamTools/ToolProperties.py:184 +msgid "Single-Geo" +msgstr "Single-Geo" + +#: flatcamTools/ToolProperties.py:185 +msgid "Multi-Geo" +msgstr "Multi-Geo" + +#: flatcamTools/ToolProperties.py:196 +msgid "Calculating dimensions ... Please wait." +msgstr "Calculating dimensions ... Please wait." + +#: flatcamTools/ToolProperties.py:339 flatcamTools/ToolProperties.py:343 +#: flatcamTools/ToolProperties.py:345 +msgid "Inch" +msgstr "Inch" + +#: flatcamTools/ToolProperties.py:339 flatcamTools/ToolProperties.py:344 +#: flatcamTools/ToolProperties.py:346 +msgid "Metric" +msgstr "Metric" + +#: flatcamTools/ToolProperties.py:421 flatcamTools/ToolProperties.py:486 +msgid "Drills number" +msgstr "Drills number" + +#: flatcamTools/ToolProperties.py:422 flatcamTools/ToolProperties.py:488 +msgid "Slots number" +msgstr "Slots number" + +#: flatcamTools/ToolProperties.py:424 +msgid "Drills total number:" +msgstr "Drills total number:" + +#: flatcamTools/ToolProperties.py:425 +msgid "Slots total number:" +msgstr "Slots total number:" + +#: flatcamTools/ToolProperties.py:452 flatcamTools/ToolProperties.py:455 +#: flatcamTools/ToolProperties.py:458 flatcamTools/ToolProperties.py:483 +msgid "Present" +msgstr "Present" + +#: flatcamTools/ToolProperties.py:453 flatcamTools/ToolProperties.py:484 +msgid "Solid Geometry" +msgstr "Solid Geometry" + +#: flatcamTools/ToolProperties.py:456 +msgid "GCode Text" +msgstr "GCode Text" + +#: flatcamTools/ToolProperties.py:459 +msgid "GCode Geometry" +msgstr "GCode Geometry" + +#: flatcamTools/ToolProperties.py:462 +msgid "Data" +msgstr "Data" + +#: flatcamTools/ToolProperties.py:495 +msgid "Depth of Cut" +msgstr "Depth of Cut" + +#: flatcamTools/ToolProperties.py:507 +msgid "Clearance Height" +msgstr "Clearance Height" + +#: flatcamTools/ToolProperties.py:539 +msgid "Routing time" +msgstr "Routing time" + +#: flatcamTools/ToolProperties.py:546 +msgid "Travelled distance" +msgstr "Travelled distance" + +#: flatcamTools/ToolProperties.py:564 +msgid "Width" +msgstr "Width" + +#: flatcamTools/ToolProperties.py:570 flatcamTools/ToolProperties.py:578 +msgid "Box Area" +msgstr "Box Area" + +#: flatcamTools/ToolProperties.py:573 flatcamTools/ToolProperties.py:581 +msgid "Convex_Hull Area" +msgstr "Convex_Hull Area" + +#: flatcamTools/ToolProperties.py:588 flatcamTools/ToolProperties.py:591 +msgid "Copper Area" +msgstr "Copper Area" + +#: flatcamTools/ToolPunchGerber.py:30 flatcamTools/ToolPunchGerber.py:323 +msgid "Punch Gerber" +msgstr "Punch Gerber" + +#: flatcamTools/ToolPunchGerber.py:65 +msgid "Gerber into which to punch holes" +msgstr "Gerber into which to punch holes" + +#: flatcamTools/ToolPunchGerber.py:85 +msgid "ALL" +msgstr "ALL" + +#: flatcamTools/ToolPunchGerber.py:166 +msgid "" +"Remove the geometry of Excellon from the Gerber to create the holes in pads." +msgstr "" +"Remove the geometry of Excellon from the Gerber to create the holes in pads." + +#: flatcamTools/ToolPunchGerber.py:325 +msgid "" +"Create a Gerber object from the selected object, within\n" +"the specified box." +msgstr "" +"Create a Gerber object from the selected object, within\n" +"the specified box." + +#: flatcamTools/ToolPunchGerber.py:425 +msgid "Punch Tool" +msgstr "Punch Tool" + +#: flatcamTools/ToolPunchGerber.py:599 +msgid "The value of the fixed diameter is 0.0. Aborting." +msgstr "The value of the fixed diameter is 0.0. Aborting." + +#: flatcamTools/ToolPunchGerber.py:607 flatcamTools/ToolPunchGerber.py:619 +#| msgid "" +#| "Could not generate punched hole Gerber because the punch hole sizeis " +#| "bigger than some of the apertures in the Gerber object." +msgid "" +"Could not generate punched hole Gerber because the punch hole size is bigger " +"than some of the apertures in the Gerber object." +msgstr "" +"Could not generate punched hole Gerber because the punch hole size is bigger " +"than some of the apertures in the Gerber object." + +#: flatcamTools/ToolPunchGerber.py:656 +msgid "" +"Could not generate punched hole Gerber because the newly created object " +"geometry is the same as the one in the source object geometry..." +msgstr "" +"Could not generate punched hole Gerber because the newly created object " +"geometry is the same as the one in the source object geometry..." + +#: flatcamTools/ToolQRCode.py:80 +msgid "Gerber Object to which the QRCode will be added." +msgstr "Gerber Object to which the QRCode will be added." + +#: flatcamTools/ToolQRCode.py:93 +msgid "QRCode Parameters" +msgstr "QRCode Parameters" + +#: flatcamTools/ToolQRCode.py:95 +msgid "The parameters used to shape the QRCode." +msgstr "The parameters used to shape the QRCode." + +#: flatcamTools/ToolQRCode.py:207 +msgid "Export QRCode" +msgstr "Export QRCode" + +#: flatcamTools/ToolQRCode.py:209 +msgid "" +"Show a set of controls allowing to export the QRCode\n" +"to a SVG file or an PNG file." +msgstr "" +"Show a set of controls allowing to export the QRCode\n" +"to a SVG file or an PNG file." + +#: flatcamTools/ToolQRCode.py:248 +msgid "Transparent back color" +msgstr "Transparent back color" + +#: flatcamTools/ToolQRCode.py:273 +msgid "Export QRCode SVG" +msgstr "Export QRCode SVG" + +#: flatcamTools/ToolQRCode.py:275 +msgid "Export a SVG file with the QRCode content." +msgstr "Export a SVG file with the QRCode content." + +#: flatcamTools/ToolQRCode.py:286 +msgid "Export QRCode PNG" +msgstr "Export QRCode PNG" + +#: flatcamTools/ToolQRCode.py:288 +msgid "Export a PNG image file with the QRCode content." +msgstr "Export a PNG image file with the QRCode content." + +#: flatcamTools/ToolQRCode.py:299 +msgid "Insert QRCode" +msgstr "Insert QRCode" + +#: flatcamTools/ToolQRCode.py:301 +msgid "Create the QRCode object." +msgstr "Create the QRCode object." + +#: flatcamTools/ToolQRCode.py:415 flatcamTools/ToolQRCode.py:750 +#: flatcamTools/ToolQRCode.py:799 +msgid "Cancelled. There is no QRCode Data in the text box." +msgstr "Cancelled. There is no QRCode Data in the text box." + +#: flatcamTools/ToolQRCode.py:434 +msgid "Generating QRCode geometry" +msgstr "Generating QRCode geometry" + +#: flatcamTools/ToolQRCode.py:474 +msgid "Click on the Destination point ..." +msgstr "Click on the Destination point ..." + +#: flatcamTools/ToolQRCode.py:589 +msgid "QRCode Tool done." +msgstr "QRCode Tool done." + +#: flatcamTools/ToolQRCode.py:782 flatcamTools/ToolQRCode.py:786 +msgid "Export PNG" +msgstr "Export PNG" + +#: flatcamTools/ToolRulesCheck.py:33 +msgid "Check Rules" +msgstr "Check Rules" + +#: flatcamTools/ToolRulesCheck.py:61 +msgid "Gerber Files" +msgstr "Gerber Files" + +#: flatcamTools/ToolRulesCheck.py:63 +msgid "Gerber objects for which to check rules." +msgstr "Gerber objects for which to check rules." + +#: flatcamTools/ToolRulesCheck.py:78 +msgid "Top" +msgstr "Top" + +#: flatcamTools/ToolRulesCheck.py:80 +msgid "The Top Gerber Copper object for which rules are checked." +msgstr "The Top Gerber Copper object for which rules are checked." + +#: flatcamTools/ToolRulesCheck.py:96 +msgid "Bottom" +msgstr "Bottom" + +#: flatcamTools/ToolRulesCheck.py:98 +msgid "The Bottom Gerber Copper object for which rules are checked." +msgstr "The Bottom Gerber Copper object for which rules are checked." + +#: flatcamTools/ToolRulesCheck.py:114 +msgid "SM Top" +msgstr "SM Top" + +#: flatcamTools/ToolRulesCheck.py:116 +msgid "The Top Gerber Solder Mask object for which rules are checked." +msgstr "The Top Gerber Solder Mask object for which rules are checked." + +#: flatcamTools/ToolRulesCheck.py:132 +msgid "SM Bottom" +msgstr "SM Bottom" + +#: flatcamTools/ToolRulesCheck.py:134 +msgid "The Bottom Gerber Solder Mask object for which rules are checked." +msgstr "The Bottom Gerber Solder Mask object for which rules are checked." + +#: flatcamTools/ToolRulesCheck.py:150 +msgid "Silk Top" +msgstr "Silk Top" + +#: flatcamTools/ToolRulesCheck.py:152 +msgid "The Top Gerber Silkscreen object for which rules are checked." +msgstr "The Top Gerber Silkscreen object for which rules are checked." + +#: flatcamTools/ToolRulesCheck.py:168 +msgid "Silk Bottom" +msgstr "Silk Bottom" + +#: flatcamTools/ToolRulesCheck.py:170 +msgid "The Bottom Gerber Silkscreen object for which rules are checked." +msgstr "The Bottom Gerber Silkscreen object for which rules are checked." + +#: flatcamTools/ToolRulesCheck.py:188 +msgid "The Gerber Outline (Cutout) object for which rules are checked." +msgstr "The Gerber Outline (Cutout) object for which rules are checked." + +#: flatcamTools/ToolRulesCheck.py:199 +msgid "Excellon Objects" +msgstr "Excellon Objects" + +#: flatcamTools/ToolRulesCheck.py:201 +msgid "Excellon objects for which to check rules." +msgstr "Excellon objects for which to check rules." + +#: flatcamTools/ToolRulesCheck.py:213 +msgid "Excellon 1" +msgstr "Excellon 1" + +#: flatcamTools/ToolRulesCheck.py:215 +msgid "" +"Excellon object for which to check rules.\n" +"Holds the plated holes or a general Excellon file content." +msgstr "" +"Excellon object for which to check rules.\n" +"Holds the plated holes or a general Excellon file content." + +#: flatcamTools/ToolRulesCheck.py:232 +msgid "Excellon 2" +msgstr "Excellon 2" + +#: flatcamTools/ToolRulesCheck.py:234 +msgid "" +"Excellon object for which to check rules.\n" +"Holds the non-plated holes." +msgstr "" +"Excellon object for which to check rules.\n" +"Holds the non-plated holes." + +#: flatcamTools/ToolRulesCheck.py:247 +msgid "All Rules" +msgstr "All Rules" + +#: flatcamTools/ToolRulesCheck.py:249 +msgid "This check/uncheck all the rules below." +msgstr "This check/uncheck all the rules below." + +#: flatcamTools/ToolRulesCheck.py:499 +msgid "Run Rules Check" +msgstr "Run Rules Check" + +#: flatcamTools/ToolRulesCheck.py:1158 flatcamTools/ToolRulesCheck.py:1218 +#: flatcamTools/ToolRulesCheck.py:1255 flatcamTools/ToolRulesCheck.py:1327 +#: flatcamTools/ToolRulesCheck.py:1381 flatcamTools/ToolRulesCheck.py:1419 +#: flatcamTools/ToolRulesCheck.py:1484 +msgid "Value is not valid." +msgstr "Value is not valid." + +#: flatcamTools/ToolRulesCheck.py:1172 +msgid "TOP -> Copper to Copper clearance" +msgstr "TOP -> Copper to Copper clearance" + +#: flatcamTools/ToolRulesCheck.py:1183 +msgid "BOTTOM -> Copper to Copper clearance" +msgstr "BOTTOM -> Copper to Copper clearance" + +#: flatcamTools/ToolRulesCheck.py:1188 flatcamTools/ToolRulesCheck.py:1282 +#: flatcamTools/ToolRulesCheck.py:1446 +msgid "" +"At least one Gerber object has to be selected for this rule but none is " +"selected." +msgstr "" +"At least one Gerber object has to be selected for this rule but none is " +"selected." + +#: flatcamTools/ToolRulesCheck.py:1224 +msgid "" +"One of the copper Gerber objects or the Outline Gerber object is not valid." +msgstr "" +"One of the copper Gerber objects or the Outline Gerber object is not valid." + +#: flatcamTools/ToolRulesCheck.py:1237 flatcamTools/ToolRulesCheck.py:1401 +msgid "" +"Outline Gerber object presence is mandatory for this rule but it is not " +"selected." +msgstr "" +"Outline Gerber object presence is mandatory for this rule but it is not " +"selected." + +#: flatcamTools/ToolRulesCheck.py:1254 flatcamTools/ToolRulesCheck.py:1281 +msgid "Silk to Silk clearance" +msgstr "Silk to Silk clearance" + +#: flatcamTools/ToolRulesCheck.py:1267 +msgid "TOP -> Silk to Silk clearance" +msgstr "TOP -> Silk to Silk clearance" + +#: flatcamTools/ToolRulesCheck.py:1277 +msgid "BOTTOM -> Silk to Silk clearance" +msgstr "BOTTOM -> Silk to Silk clearance" + +#: flatcamTools/ToolRulesCheck.py:1333 +msgid "One or more of the Gerber objects is not valid." +msgstr "One or more of the Gerber objects is not valid." + +#: flatcamTools/ToolRulesCheck.py:1341 +msgid "TOP -> Silk to Solder Mask Clearance" +msgstr "TOP -> Silk to Solder Mask Clearance" + +#: flatcamTools/ToolRulesCheck.py:1347 +msgid "BOTTOM -> Silk to Solder Mask Clearance" +msgstr "BOTTOM -> Silk to Solder Mask Clearance" + +#: flatcamTools/ToolRulesCheck.py:1351 +msgid "" +"Both Silk and Solder Mask Gerber objects has to be either both Top or both " +"Bottom." +msgstr "" +"Both Silk and Solder Mask Gerber objects has to be either both Top or both " +"Bottom." + +#: flatcamTools/ToolRulesCheck.py:1387 +msgid "" +"One of the Silk Gerber objects or the Outline Gerber object is not valid." +msgstr "" +"One of the Silk Gerber objects or the Outline Gerber object is not valid." + +#: flatcamTools/ToolRulesCheck.py:1431 +msgid "TOP -> Minimum Solder Mask Sliver" +msgstr "TOP -> Minimum Solder Mask Sliver" + +#: flatcamTools/ToolRulesCheck.py:1441 +msgid "BOTTOM -> Minimum Solder Mask Sliver" +msgstr "BOTTOM -> Minimum Solder Mask Sliver" + +#: flatcamTools/ToolRulesCheck.py:1490 +msgid "One of the Copper Gerber objects or the Excellon objects is not valid." +msgstr "One of the Copper Gerber objects or the Excellon objects is not valid." + +#: flatcamTools/ToolRulesCheck.py:1506 +msgid "" +"Excellon object presence is mandatory for this rule but none is selected." +msgstr "" +"Excellon object presence is mandatory for this rule but none is selected." + +#: flatcamTools/ToolRulesCheck.py:1579 flatcamTools/ToolRulesCheck.py:1592 +#: flatcamTools/ToolRulesCheck.py:1603 flatcamTools/ToolRulesCheck.py:1616 +msgid "STATUS" +msgstr "STATUS" + +#: flatcamTools/ToolRulesCheck.py:1582 flatcamTools/ToolRulesCheck.py:1606 +msgid "FAILED" +msgstr "FAILED" + +#: flatcamTools/ToolRulesCheck.py:1595 flatcamTools/ToolRulesCheck.py:1619 +msgid "PASSED" +msgstr "PASSED" + +#: flatcamTools/ToolRulesCheck.py:1596 flatcamTools/ToolRulesCheck.py:1620 +msgid "Violations: There are no violations for the current rule." +msgstr "Violations: There are no violations for the current rule." + +#: flatcamTools/ToolShell.py:74 flatcamTools/ToolShell.py:76 +msgid "...processing..." +msgstr "...processing..." + +#: flatcamTools/ToolSolderPaste.py:37 +msgid "Solder Paste Tool" +msgstr "Solder Paste Tool" + +#: flatcamTools/ToolSolderPaste.py:69 +msgid "Gerber Solder paste object. " +msgstr "Gerber Solder paste object. " + +#: flatcamTools/ToolSolderPaste.py:76 +msgid "" +"Tools pool from which the algorithm\n" +"will pick the ones used for dispensing solder paste." +msgstr "" +"Tools pool from which the algorithm\n" +"will pick the ones used for dispensing solder paste." + +#: flatcamTools/ToolSolderPaste.py:91 +msgid "" +"This is the Tool Number.\n" +"The solder dispensing will start with the tool with the biggest \n" +"diameter, continuing until there are no more Nozzle tools.\n" +"If there are no longer tools but there are still pads not covered\n" +" with solder paste, the app will issue a warning message box." +msgstr "" +"This is the Tool Number.\n" +"The solder dispensing will start with the tool with the biggest \n" +"diameter, continuing until there are no more Nozzle tools.\n" +"If there are no longer tools but there are still pads not covered\n" +" with solder paste, the app will issue a warning message box." + +#: flatcamTools/ToolSolderPaste.py:98 +msgid "" +"Nozzle tool Diameter. It's value (in current FlatCAM units)\n" +"is the width of the solder paste dispensed." +msgstr "" +"Nozzle tool Diameter. It's value (in current FlatCAM units)\n" +"is the width of the solder paste dispensed." + +#: flatcamTools/ToolSolderPaste.py:105 +msgid "New Nozzle Tool" +msgstr "New Nozzle Tool" + +#: flatcamTools/ToolSolderPaste.py:124 +msgid "" +"Add a new nozzle tool to the Tool Table\n" +"with the diameter specified above." +msgstr "" +"Add a new nozzle tool to the Tool Table\n" +"with the diameter specified above." + +#: flatcamTools/ToolSolderPaste.py:136 +msgid "Generate solder paste dispensing geometry." +msgstr "Generate solder paste dispensing geometry." + +#: flatcamTools/ToolSolderPaste.py:155 +msgid "STEP 1" +msgstr "STEP 1" + +#: flatcamTools/ToolSolderPaste.py:157 +msgid "" +"First step is to select a number of nozzle tools for usage\n" +"and then optionally modify the GCode parameters bellow." +msgstr "" +"First step is to select a number of nozzle tools for usage\n" +"and then optionally modify the GCode parameters bellow." + +#: flatcamTools/ToolSolderPaste.py:160 +msgid "" +"Select tools.\n" +"Modify parameters." +msgstr "" +"Select tools.\n" +"Modify parameters." + +#: flatcamTools/ToolSolderPaste.py:280 +msgid "" +"Feedrate (speed) while moving up vertically\n" +" to Dispense position (on Z plane)." +msgstr "" +"Feedrate (speed) while moving up vertically\n" +" to Dispense position (on Z plane)." + +#: flatcamTools/ToolSolderPaste.py:350 +msgid "" +"Generate GCode for Solder Paste dispensing\n" +"on PCB pads." +msgstr "" +"Generate GCode for Solder Paste dispensing\n" +"on PCB pads." + +#: flatcamTools/ToolSolderPaste.py:371 +msgid "STEP 2" +msgstr "STEP 2" + +#: flatcamTools/ToolSolderPaste.py:373 +msgid "" +"Second step is to create a solder paste dispensing\n" +"geometry out of an Solder Paste Mask Gerber file." +msgstr "" +"Second step is to create a solder paste dispensing\n" +"geometry out of an Solder Paste Mask Gerber file." + +#: flatcamTools/ToolSolderPaste.py:390 +msgid "Geo Result" +msgstr "Geo Result" + +#: flatcamTools/ToolSolderPaste.py:392 +msgid "" +"Geometry Solder Paste object.\n" +"The name of the object has to end in:\n" +"'_solderpaste' as a protection." +msgstr "" +"Geometry Solder Paste object.\n" +"The name of the object has to end in:\n" +"'_solderpaste' as a protection." + +#: flatcamTools/ToolSolderPaste.py:401 +msgid "STEP 3" +msgstr "STEP 3" + +#: flatcamTools/ToolSolderPaste.py:403 +msgid "" +"Third step is to select a solder paste dispensing geometry,\n" +"and then generate a CNCJob object.\n" +"\n" +"REMEMBER: if you want to create a CNCJob with new parameters,\n" +"first you need to generate a geometry with those new params,\n" +"and only after that you can generate an updated CNCJob." +msgstr "" +"Third step is to select a solder paste dispensing geometry,\n" +"and then generate a CNCJob object.\n" +"\n" +"REMEMBER: if you want to create a CNCJob with new parameters,\n" +"first you need to generate a geometry with those new params,\n" +"and only after that you can generate an updated CNCJob." + +#: flatcamTools/ToolSolderPaste.py:424 +msgid "CNC Result" +msgstr "CNC Result" + +#: flatcamTools/ToolSolderPaste.py:426 +msgid "" +"CNCJob Solder paste object.\n" +"In order to enable the GCode save section,\n" +"the name of the object has to end in:\n" +"'_solderpaste' as a protection." +msgstr "" +"CNCJob Solder paste object.\n" +"In order to enable the GCode save section,\n" +"the name of the object has to end in:\n" +"'_solderpaste' as a protection." + +#: flatcamTools/ToolSolderPaste.py:436 +msgid "View GCode" +msgstr "View GCode" + +#: flatcamTools/ToolSolderPaste.py:438 +msgid "" +"View the generated GCode for Solder Paste dispensing\n" +"on PCB pads." +msgstr "" +"View the generated GCode for Solder Paste dispensing\n" +"on PCB pads." + +#: flatcamTools/ToolSolderPaste.py:448 +msgid "Save GCode" +msgstr "Save GCode" + +#: flatcamTools/ToolSolderPaste.py:450 +msgid "" +"Save the generated GCode for Solder Paste dispensing\n" +"on PCB pads, to a file." +msgstr "" +"Save the generated GCode for Solder Paste dispensing\n" +"on PCB pads, to a file." + +#: flatcamTools/ToolSolderPaste.py:460 +msgid "STEP 4" +msgstr "STEP 4" + +#: flatcamTools/ToolSolderPaste.py:462 +msgid "" +"Fourth step (and last) is to select a CNCJob made from \n" +"a solder paste dispensing geometry, and then view/save it's GCode." +msgstr "" +"Fourth step (and last) is to select a CNCJob made from \n" +"a solder paste dispensing geometry, and then view/save it's GCode." + +#: flatcamTools/ToolSolderPaste.py:922 +msgid "New Nozzle tool added to Tool Table." +msgstr "New Nozzle tool added to Tool Table." + +#: flatcamTools/ToolSolderPaste.py:965 +msgid "Nozzle tool from Tool Table was edited." +msgstr "Nozzle tool from Tool Table was edited." + +#: flatcamTools/ToolSolderPaste.py:1024 +msgid "Delete failed. Select a Nozzle tool to delete." +msgstr "Delete failed. Select a Nozzle tool to delete." + +#: flatcamTools/ToolSolderPaste.py:1030 +msgid "Nozzle tool(s) deleted from Tool Table." +msgstr "Nozzle tool(s) deleted from Tool Table." + +#: flatcamTools/ToolSolderPaste.py:1086 +msgid "No SolderPaste mask Gerber object loaded." +msgstr "No SolderPaste mask Gerber object loaded." + +#: flatcamTools/ToolSolderPaste.py:1104 +msgid "Creating Solder Paste dispensing geometry." +msgstr "Creating Solder Paste dispensing geometry." + +#: flatcamTools/ToolSolderPaste.py:1117 +msgid "No Nozzle tools in the tool table." +msgstr "No Nozzle tools in the tool table." + +#: flatcamTools/ToolSolderPaste.py:1243 +msgid "Cancelled. Empty file, it has no geometry..." +msgstr "Cancelled. Empty file, it has no geometry..." + +#: flatcamTools/ToolSolderPaste.py:1246 +msgid "Solder Paste geometry generated successfully" +msgstr "Solder Paste geometry generated successfully" + +#: flatcamTools/ToolSolderPaste.py:1253 +msgid "Some or all pads have no solder due of inadequate nozzle diameters..." +msgstr "Some or all pads have no solder due of inadequate nozzle diameters..." + +#: flatcamTools/ToolSolderPaste.py:1267 +msgid "Generating Solder Paste dispensing geometry..." +msgstr "Generating Solder Paste dispensing geometry..." + +#: flatcamTools/ToolSolderPaste.py:1287 +msgid "There is no Geometry object available." +msgstr "There is no Geometry object available." + +#: flatcamTools/ToolSolderPaste.py:1292 +msgid "This Geometry can't be processed. NOT a solder_paste_tool geometry." +msgstr "This Geometry can't be processed. NOT a solder_paste_tool geometry." + +#: flatcamTools/ToolSolderPaste.py:1328 +msgid "An internal error has ocurred. See shell.\n" +msgstr "An internal error has ocurred. See shell.\n" + +#: flatcamTools/ToolSolderPaste.py:1393 +msgid "ToolSolderPaste CNCjob created" +msgstr "ToolSolderPaste CNCjob created" + +#: flatcamTools/ToolSolderPaste.py:1412 +msgid "SP GCode Editor" +msgstr "SP GCode Editor" + +#: flatcamTools/ToolSolderPaste.py:1424 flatcamTools/ToolSolderPaste.py:1429 +#: flatcamTools/ToolSolderPaste.py:1484 +msgid "" +"This CNCJob object can't be processed. NOT a solder_paste_tool CNCJob object." +msgstr "" +"This CNCJob object can't be processed. NOT a solder_paste_tool CNCJob object." + +#: flatcamTools/ToolSolderPaste.py:1454 +msgid "No Gcode in the object" +msgstr "No Gcode in the object" + +#: flatcamTools/ToolSolderPaste.py:1494 +msgid "Export GCode ..." +msgstr "Export GCode ..." + +#: flatcamTools/ToolSolderPaste.py:1542 +msgid "Solder paste dispenser GCode file saved to" +msgstr "Solder paste dispenser GCode file saved to" + +#: flatcamTools/ToolSub.py:65 +msgid "Gerber Objects" +msgstr "Gerber Objects" + +#: flatcamTools/ToolSub.py:78 +msgid "" +"Gerber object from which to subtract\n" +"the subtractor Gerber object." +msgstr "" +"Gerber object from which to subtract\n" +"the subtractor Gerber object." + +#: flatcamTools/ToolSub.py:91 flatcamTools/ToolSub.py:146 +msgid "Subtractor" +msgstr "Subtractor" + +#: flatcamTools/ToolSub.py:93 +msgid "" +"Gerber object that will be subtracted\n" +"from the target Gerber object." +msgstr "" +"Gerber object that will be subtracted\n" +"from the target Gerber object." + +#: flatcamTools/ToolSub.py:100 +msgid "Substract Gerber" +msgstr "Substract Gerber" + +#: flatcamTools/ToolSub.py:102 +msgid "" +"Will remove the area occupied by the subtractor\n" +"Gerber from the Target Gerber.\n" +"Can be used to remove the overlapping silkscreen\n" +"over the soldermask." +msgstr "" +"Will remove the area occupied by the subtractor\n" +"Gerber from the Target Gerber.\n" +"Can be used to remove the overlapping silkscreen\n" +"over the soldermask." + +#: flatcamTools/ToolSub.py:120 +msgid "Geometry Objects" +msgstr "Geometry Objects" + +#: flatcamTools/ToolSub.py:133 +msgid "" +"Geometry object from which to subtract\n" +"the subtractor Geometry object." +msgstr "" +"Geometry object from which to subtract\n" +"the subtractor Geometry object." + +#: flatcamTools/ToolSub.py:148 +msgid "" +"Geometry object that will be subtracted\n" +"from the target Geometry object." +msgstr "" +"Geometry object that will be subtracted\n" +"from the target Geometry object." + +#: flatcamTools/ToolSub.py:156 +msgid "" +"Checking this will close the paths cut by the Geometry subtractor object." +msgstr "" +"Checking this will close the paths cut by the Geometry subtractor object." + +#: flatcamTools/ToolSub.py:159 +msgid "Subtract Geometry" +msgstr "Subtract Geometry" + +#: flatcamTools/ToolSub.py:161 +msgid "" +"Will remove the area occupied by the subtractor\n" +"Geometry from the Target Geometry." +msgstr "" +"Will remove the area occupied by the subtractor\n" +"Geometry from the Target Geometry." + +#: flatcamTools/ToolSub.py:263 +msgid "Sub Tool" +msgstr "Sub Tool" + +#: flatcamTools/ToolSub.py:284 flatcamTools/ToolSub.py:489 +msgid "No Target object loaded." +msgstr "No Target object loaded." + +#: flatcamTools/ToolSub.py:287 +msgid "Loading geometry from Gerber objects." +msgstr "Loading geometry from Gerber objects." + +#: flatcamTools/ToolSub.py:299 flatcamTools/ToolSub.py:504 +msgid "No Subtractor object loaded." +msgstr "No Subtractor object loaded." + +#: flatcamTools/ToolSub.py:331 +msgid "Processing geometry from Subtractor Gerber object." +msgstr "Processing geometry from Subtractor Gerber object." + +#: flatcamTools/ToolSub.py:352 +msgid "Parsing geometry for aperture" +msgstr "Parsing geometry for aperture" + +#: flatcamTools/ToolSub.py:413 +msgid "Finished parsing geometry for aperture" +msgstr "Finished parsing geometry for aperture" + +#: flatcamTools/ToolSub.py:458 flatcamTools/ToolSub.py:661 +msgid "Generating new object ..." +msgstr "Generating new object ..." + +#: flatcamTools/ToolSub.py:462 flatcamTools/ToolSub.py:665 +#: flatcamTools/ToolSub.py:746 +msgid "Generating new object failed." +msgstr "Generating new object failed." + +#: flatcamTools/ToolSub.py:467 flatcamTools/ToolSub.py:671 +msgid "Created" +msgstr "Created" + +#: flatcamTools/ToolSub.py:518 +msgid "Currently, the Subtractor geometry cannot be of type Multigeo." +msgstr "Currently, the Subtractor geometry cannot be of type Multigeo." + +#: flatcamTools/ToolSub.py:563 +msgid "Parsing solid_geometry ..." +msgstr "Parsing solid_geometry ..." + +#: flatcamTools/ToolSub.py:565 +msgid "Parsing solid_geometry for tool" +msgstr "Parsing solid_geometry for tool" + +#: flatcamTools/ToolTransform.py:23 +msgid "Object Transform" +msgstr "Object Transform" + +#: flatcamTools/ToolTransform.py:78 +msgid "" +"Rotate the selected object(s).\n" +"The point of reference is the middle of\n" +"the bounding box for all selected objects." +msgstr "" +"Rotate the selected object(s).\n" +"The point of reference is the middle of\n" +"the bounding box for all selected objects." + +#: flatcamTools/ToolTransform.py:99 flatcamTools/ToolTransform.py:120 +msgid "" +"Angle for Skew action, in degrees.\n" +"Float number between -360 and 360." +msgstr "" +"Angle for Skew action, in degrees.\n" +"Float number between -360 and 360." + +#: flatcamTools/ToolTransform.py:109 flatcamTools/ToolTransform.py:130 +msgid "" +"Skew/shear the selected object(s).\n" +"The point of reference is the middle of\n" +"the bounding box for all selected objects." +msgstr "" +"Skew/shear the selected object(s).\n" +"The point of reference is the middle of\n" +"the bounding box for all selected objects." + +#: flatcamTools/ToolTransform.py:159 flatcamTools/ToolTransform.py:179 +msgid "" +"Scale the selected object(s).\n" +"The point of reference depends on \n" +"the Scale reference checkbox state." +msgstr "" +"Scale the selected object(s).\n" +"The point of reference depends on \n" +"the Scale reference checkbox state." + +#: flatcamTools/ToolTransform.py:228 flatcamTools/ToolTransform.py:248 +msgid "" +"Offset the selected object(s).\n" +"The point of reference is the middle of\n" +"the bounding box for all selected objects.\n" +msgstr "" +"Offset the selected object(s).\n" +"The point of reference is the middle of\n" +"the bounding box for all selected objects.\n" + +#: flatcamTools/ToolTransform.py:268 flatcamTools/ToolTransform.py:273 +msgid "Flip the selected object(s) over the X axis." +msgstr "Flip the selected object(s) over the X axis." + +#: flatcamTools/ToolTransform.py:297 +msgid "Ref. Point" +msgstr "Ref. Point" + +#: flatcamTools/ToolTransform.py:348 +msgid "" +"Create the buffer effect on each geometry,\n" +"element from the selected object, using the distance." +msgstr "" +"Create the buffer effect on each geometry,\n" +"element from the selected object, using the distance." + +#: flatcamTools/ToolTransform.py:374 +msgid "" +"Create the buffer effect on each geometry,\n" +"element from the selected object, using the factor." +msgstr "" +"Create the buffer effect on each geometry,\n" +"element from the selected object, using the factor." + +#: flatcamTools/ToolTransform.py:479 +msgid "Buffer D" +msgstr "Buffer D" + +#: flatcamTools/ToolTransform.py:480 +msgid "Buffer F" +msgstr "Buffer F" + +#: flatcamTools/ToolTransform.py:557 +msgid "Rotate transformation can not be done for a value of 0." +msgstr "Rotate transformation can not be done for a value of 0." + +#: flatcamTools/ToolTransform.py:596 flatcamTools/ToolTransform.py:619 +msgid "Scale transformation can not be done for a factor of 0 or 1." +msgstr "Scale transformation can not be done for a factor of 0 or 1." + +#: flatcamTools/ToolTransform.py:634 flatcamTools/ToolTransform.py:644 +msgid "Offset transformation can not be done for a value of 0." +msgstr "Offset transformation can not be done for a value of 0." + +#: flatcamTools/ToolTransform.py:676 +msgid "No object selected. Please Select an object to rotate!" +msgstr "No object selected. Please Select an object to rotate!" + +#: flatcamTools/ToolTransform.py:702 +msgid "CNCJob objects can't be rotated." +msgstr "CNCJob objects can't be rotated." + +#: flatcamTools/ToolTransform.py:710 +msgid "Rotate done" +msgstr "Rotate done" + +#: flatcamTools/ToolTransform.py:713 flatcamTools/ToolTransform.py:783 +#: flatcamTools/ToolTransform.py:833 flatcamTools/ToolTransform.py:887 +#: flatcamTools/ToolTransform.py:917 flatcamTools/ToolTransform.py:953 +msgid "Due of" +msgstr "Due of" + +#: flatcamTools/ToolTransform.py:713 flatcamTools/ToolTransform.py:783 +#: flatcamTools/ToolTransform.py:833 flatcamTools/ToolTransform.py:887 +#: flatcamTools/ToolTransform.py:917 flatcamTools/ToolTransform.py:953 +msgid "action was not executed." +msgstr "action was not executed." + +#: flatcamTools/ToolTransform.py:725 +msgid "No object selected. Please Select an object to flip" +msgstr "No object selected. Please Select an object to flip" + +#: flatcamTools/ToolTransform.py:758 +msgid "CNCJob objects can't be mirrored/flipped." +msgstr "CNCJob objects can't be mirrored/flipped." + +#: flatcamTools/ToolTransform.py:793 +msgid "Skew transformation can not be done for 0, 90 and 180 degrees." +msgstr "Skew transformation can not be done for 0, 90 and 180 degrees." + +#: flatcamTools/ToolTransform.py:798 +msgid "No object selected. Please Select an object to shear/skew!" +msgstr "No object selected. Please Select an object to shear/skew!" + +#: flatcamTools/ToolTransform.py:818 +msgid "CNCJob objects can't be skewed." +msgstr "CNCJob objects can't be skewed." + +#: flatcamTools/ToolTransform.py:830 +msgid "Skew on the" +msgstr "Skew on the" + +#: flatcamTools/ToolTransform.py:830 flatcamTools/ToolTransform.py:884 +#: flatcamTools/ToolTransform.py:914 +msgid "axis done" +msgstr "axis done" + +#: flatcamTools/ToolTransform.py:844 +msgid "No object selected. Please Select an object to scale!" +msgstr "No object selected. Please Select an object to scale!" + +#: flatcamTools/ToolTransform.py:875 +msgid "CNCJob objects can't be scaled." +msgstr "CNCJob objects can't be scaled." + +#: flatcamTools/ToolTransform.py:884 +msgid "Scale on the" +msgstr "Scale on the" + +#: flatcamTools/ToolTransform.py:894 +msgid "No object selected. Please Select an object to offset!" +msgstr "No object selected. Please Select an object to offset!" + +#: flatcamTools/ToolTransform.py:901 +msgid "CNCJob objects can't be offset." +msgstr "CNCJob objects can't be offset." + +#: flatcamTools/ToolTransform.py:914 +msgid "Offset on the" +msgstr "Offset on the" + +#: flatcamTools/ToolTransform.py:924 +msgid "No object selected. Please Select an object to buffer!" +msgstr "No object selected. Please Select an object to buffer!" + +#: flatcamTools/ToolTransform.py:927 +msgid "Applying Buffer" +msgstr "Applying Buffer" + +#: flatcamTools/ToolTransform.py:931 +msgid "CNCJob objects can't be buffered." +msgstr "CNCJob objects can't be buffered." + +#: flatcamTools/ToolTransform.py:948 +msgid "Buffer done" +msgstr "Buffer done" + +#: tclCommands/TclCommandBbox.py:75 tclCommands/TclCommandNregions.py:74 +msgid "Expected GerberObject or GeometryObject, got" +msgstr "Expected GerberObject or GeometryObject, got" + +#: tclCommands/TclCommandBounds.py:67 tclCommands/TclCommandBounds.py:71 +msgid "Expected a list of objects names separated by comma. Got" +msgstr "Expected a list of objects names separated by comma. Got" + +#: tclCommands/TclCommandBounds.py:82 +msgid "TclCommand Bounds done." +msgstr "TclCommand Bounds done." + +#: tclCommands/TclCommandCopperClear.py:276 tclCommands/TclCommandPaint.py:272 +#: tclCommands/TclCommandScale.py:81 +msgid "Could not retrieve box object" +msgstr "Could not retrieve box object" + +#: tclCommands/TclCommandCopperClear.py:299 +msgid "Expected either -box or -all." +msgstr "Expected either -box or -all." + +#: tclCommands/TclCommandGeoCutout.py:147 +msgid "" +"The name of the object for which cutout is done is missing. Add it and retry." +msgstr "" +"The name of the object for which cutout is done is missing. Add it and retry." + +#: tclCommands/TclCommandGeoCutout.py:189 +msgid "Gaps value can be only one of: 'lr', 'tb', '2lr', '2tb', 4 or 8." +msgstr "Gaps value can be only one of: 'lr', 'tb', '2lr', '2tb', 4 or 8." + +#: tclCommands/TclCommandGeoCutout.py:301 +#: tclCommands/TclCommandGeoCutout.py:359 +msgid "Any-form Cutout operation finished." +msgstr "Any-form Cutout operation finished." + +#: tclCommands/TclCommandGeoCutout.py:365 +msgid "Cancelled. Object type is not supported." +msgstr "Cancelled. Object type is not supported." + +#: tclCommands/TclCommandHelp.py:75 +msgid "Available commands:" +msgstr "Available commands:" + +#: tclCommands/TclCommandHelp.py:115 +msgid "Type help for usage." +msgstr "Type help for usage." + +#: tclCommands/TclCommandHelp.py:115 +msgid "Example: help open_gerber" +msgstr "Example: help open_gerber" + +#: tclCommands/TclCommandPaint.py:244 +msgid "Expected -x and -y ." +msgstr "Expected -x and -y ." + +#: tclCommands/TclCommandPaint.py:265 +msgid "Expected -box ." +msgstr "Expected -box ." + +#: tclCommands/TclCommandPaint.py:286 +msgid "" +"None of the following args: 'box', 'single', 'all' were used.\n" +"Paint failed." +msgstr "" +"None of the following args: 'box', 'single', 'all' were used.\n" +"Paint failed." + +#: tclCommands/TclCommandScale.py:106 +msgid "" +"Expected -origin or -origin or -origin
    or - " +"origin 3.0,4.2." +msgstr "" +"Expected -origin or -origin or -origin
    or - " +"origin 3.0,4.2." + +#: tclCommands/TclCommandScale.py:119 +msgid "Expected -x -y ." +msgstr "Expected -x -y ." + +#: tclCommands/TclCommandSetOrigin.py:95 +msgid "Expected a pair of (x, y) coordinates. Got" +msgstr "Expected a pair of (x, y) coordinates. Got" + +#: tclCommands/TclCommandSetOrigin.py:102 +msgid "Origin set by offsetting all loaded objects with " +msgstr "Origin set by offsetting all loaded objects with " + +#: tclCommands/TclCommandSubtractRectangle.py:62 +msgid "No Geometry name in args. Provide a name and try again." +msgstr "No Geometry name in args. Provide a name and try again." + +#~ msgid "e_fr_probe" +#~ msgstr "e_fr_probe" + +#~ msgid "" +#~ " Could not generate punched hole Gerber because the punch hole sizeis " +#~ "bigger than some of the apertures in the Gerber object." +#~ msgstr "" +#~ " Could not generate punched hole Gerber because the punch hole sizeis " +#~ "bigger than some of the apertures in the Gerber object." + +#~ msgid "Paint Tool. Normal painting all task started." +#~ msgstr "Paint Tool. Normal painting all task started." + +#~ msgid "Rest machining painting all task started." +#~ msgstr "Rest machining painting all task started." + +#~| msgid "Painting polygon at location" +#~ msgid "Painting polygons with method: lines." +#~ msgstr "Painting polygons with method: lines." + +#~| msgid "Normal painting polygon task started." +#~ msgid "Failed. Painting polygons with method: seed." +#~ msgstr "Failed. Painting polygons with method: seed." + +#~| msgid "Normal painting polygon task started." +#~ msgid "Failed. Painting polygons with method: standard." +#~ msgstr "Failed. Painting polygons with method: standard." + +#~ msgid "" +#~ "Could not do Paint All. Try a different combination of parameters. Or a " +#~ "different Method of paint" +#~ msgstr "" +#~ "Could not do Paint All. Try a different combination of parameters. Or a " +#~ "different Method of paint" + +#~| msgid "Paint Tool. Normal painting all task started." +#~ msgid "Paint Tool. Normal painting area task started." +#~ msgstr "Paint Tool. Normal painting area task started." + +#~ msgid "Rest machining painting area task started." +#~ msgstr "Rest machining painting area task started." + +#~ msgid "Executing Tcl Script ..." +#~ msgstr "Executing Tcl Script ..." + +#~ msgid "Open cancelled." +#~ msgstr "Open cancelled." + +#~ msgid "Preferences default restore was cancelled." +#~ msgstr "Preferences default restore was cancelled." + +#~ msgid "FlatCAM preferences import cancelled." +#~ msgstr "FlatCAM preferences import cancelled." + +#~ msgid "FlatCAM preferences export cancelled." +#~ msgstr "FlatCAM preferences export cancelled." + +#~ msgid "Multigeo. Geometry merging finished" +#~ msgstr "Multigeo. Geometry merging finished" + +#~ msgid "Units conversion cancelled." +#~ msgstr "Units conversion cancelled." + +#~ msgid "Open Gerber cancelled." +#~ msgstr "Open Gerber cancelled." + +#~ msgid " Open Excellon cancelled." +#~ msgstr " Open Excellon cancelled." + +#~ msgid "Open G-Code cancelled." +#~ msgstr "Open G-Code cancelled." + +#~ msgid "Open Project cancelled." +#~ msgstr "Open Project cancelled." + +#~ msgid "Open HPGL2 file cancelled." +#~ msgstr "Open HPGL2 file cancelled." + +#~ msgid "Open Config cancelled." +#~ msgstr "Open Config cancelled." + +#~ msgid " Export SVG cancelled." +#~ msgstr " Export SVG cancelled." + +#~ msgid "Export PNG cancelled." +#~ msgstr "Export PNG cancelled." + +#~ msgid "No object selected. Please select an Gerber object to export." +#~ msgstr "No object selected. Please select an Gerber object to export." + +#~ msgid "Save Gerber source file cancelled." +#~ msgstr "Save Gerber source file cancelled." + +#~ msgid "No object selected. Please select an Script object to export." +#~ msgstr "No object selected. Please select an Script object to export." + +#~ msgid "Save Script source file cancelled." +#~ msgstr "Save Script source file cancelled." + +#~ msgid "No object selected. Please select an Document object to export." +#~ msgstr "No object selected. Please select an Document object to export." + +#~ msgid "Save Document source file cancelled." +#~ msgstr "Save Document source file cancelled." + +#~ msgid "No object selected. Please select an Excellon object to export." +#~ msgstr "No object selected. Please select an Excellon object to export." + +#~ msgid "Saving Excellon source file cancelled." +#~ msgstr "Saving Excellon source file cancelled." + +#~ msgid "No object selected. Please Select an Excellon object to export." +#~ msgstr "No object selected. Please Select an Excellon object to export." + +#~ msgid "Export Excellon cancelled." +#~ msgstr "Export Excellon cancelled." + +#~ msgid "No object selected. Please Select an Gerber object to export." +#~ msgstr "No object selected. Please Select an Gerber object to export." + +#~ msgid "Export Gerber cancelled." +#~ msgstr "Export Gerber cancelled." + +#~ msgid "Export DXF cancelled." +#~ msgstr "Export DXF cancelled." + +#~ msgid "Open SVG cancelled." +#~ msgstr "Open SVG cancelled." + +#~ msgid "Open DXF cancelled." +#~ msgstr "Open DXF cancelled." + +#~ msgid "Open TCL script cancelled." +#~ msgstr "Open TCL script cancelled." + +#~ msgid "Run TCL script cancelled." +#~ msgstr "Run TCL script cancelled." + +#~ msgid "Save Project cancelled." +#~ msgstr "Save Project cancelled." + +#~ msgid "Save Object PDF cancelled." +#~ msgstr "Save Object PDF cancelled." + +#~ msgid "Shows list of commands." +#~ msgstr "Shows list of commands." + +#~ msgid "FlatCAM bookmarks export cancelled." +#~ msgstr "FlatCAM bookmarks export cancelled." + +#~ msgid "FlatCAM bookmarks import cancelled." +#~ msgstr "FlatCAM bookmarks import cancelled." + +#~ msgid "FlatCAM Tools DB export cancelled." +#~ msgstr "FlatCAM Tools DB export cancelled." + +#~ msgid "FlatCAM Tools DB import cancelled." +#~ msgstr "FlatCAM Tools DB import cancelled." + +#~ msgid "" +#~ "Wrong value format for self.defaults[\"z_pdepth\"] or self." +#~ "options[\"z_pdepth\"]" +#~ msgstr "" +#~ "Wrong value format for self.defaults[\"z_pdepth\"] or self." +#~ "options[\"z_pdepth\"]" + +#~ msgid "" +#~ "Wrong value format for self.defaults[\"feedrate_probe\"] or self." +#~ "options[\"feedrate_probe\"]" +#~ msgstr "" +#~ "Wrong value format for self.defaults[\"feedrate_probe\"] or self." +#~ "options[\"feedrate_probe\"]" + +#~ msgid "Starting G-Code..." +#~ msgstr "Starting G-Code..." + +#~ msgid "" +#~ "Algorithm to paint the polygon:
    Standard: Fixed step inwards." +#~ "
    Seed-based: Outwards from seed." +#~ msgstr "" +#~ "Algorithm to paint the polygon:
    Standard: Fixed step inwards." +#~ "
    Seed-based: Outwards from seed." + +#~ msgid "Seed-based" +#~ msgstr "Seed-based" + +#~ msgid "Straight lines" +#~ msgstr "Straight lines" + +#~ msgid "Paint cancelled. No shape selected." +#~ msgstr "Paint cancelled. No shape selected." + +#~ msgid "Transformation cancelled. No shape selected." +#~ msgstr "Transformation cancelled. No shape selected." + +#~ msgid "Buffer cancelled. No shape selected." +#~ msgstr "Buffer cancelled. No shape selected." + +#~ msgid "Export Code cancelled." +#~ msgstr "Export Code cancelled." + +#~ msgid "&Save Project ..." +#~ msgstr "&Save Project ..." + +#~ msgid "Save Project C&opy ..." +#~ msgstr "Save Project C&opy ..." + +#~ msgid "Change the size of the object." +#~ msgstr "Change the size of the object." + +#~ msgid "Change the position of this object." +#~ msgstr "Change the position of this object." + +#~ msgid "Vector" +#~ msgstr "Vector" + +#~ msgid "" +#~ "Create a CNC Job object\n" +#~ "for this drill object." +#~ msgstr "" +#~ "Create a CNC Job object\n" +#~ "for this drill object." + +#~ msgid "" +#~ "Choose what to use for GCode generation:\n" +#~ "'Drills', 'Slots' or 'Both'.\n" +#~ "When choosing 'Slots' or 'Both', slots will be\n" +#~ "converted to a series of drills." +#~ msgstr "" +#~ "Choose what to use for GCode generation:\n" +#~ "'Drills', 'Slots' or 'Both'.\n" +#~ "When choosing 'Slots' or 'Both', slots will be\n" +#~ "converted to a series of drills." + +#~ msgid "Generate the CNC Job." +#~ msgstr "Generate the CNC Job." + +#~ msgid "Add Tool from DataBase" +#~ msgstr "Add Tool from DataBase" + +#~ msgid "Select a theme for FlatCAM." +#~ msgstr "Select a theme for FlatCAM." + +#~ msgid "Conv." +#~ msgstr "Conv." + +#~ msgid "Diameters of the cutting tools, separated by ','" +#~ msgstr "Diameters of the cutting tools, separated by ','" + +#~ msgid "Tools dia" +#~ msgstr "Tools dia" + +#~ msgid "The new tool diameter (cut width) to add in the tool table." +#~ msgstr "The new tool diameter (cut width) to add in the tool table." + +#~ msgid "" +#~ "Algorithm for non-copper clearing:
    Standard: Fixed step inwards." +#~ "
    Seed-based: Outwards from seed.
    Line-based: Parallel " +#~ "lines." +#~ msgstr "" +#~ "Algorithm for non-copper clearing:
    Standard: Fixed step inwards." +#~ "
    Seed-based: Outwards from seed.
    Line-based: Parallel " +#~ "lines." + +#~ msgid "Area" +#~ msgstr "Area" + +#~ msgid "Ref" +#~ msgstr "Ref" + +#~ msgid "" +#~ "- 'Itself' - the non copper clearing extent\n" +#~ "is based on the object that is copper cleared.\n" +#~ " - 'Area Selection' - left mouse click to start selection of the area to " +#~ "be painted.\n" +#~ "Keeping a modifier key pressed (CTRL or SHIFT) will allow to add multiple " +#~ "areas.\n" +#~ "- 'Reference Object' - will do non copper clearing within the area\n" +#~ "specified by another object." +#~ msgstr "" +#~ "- 'Itself' - the non copper clearing extent\n" +#~ "is based on the object that is copper cleared.\n" +#~ " - 'Area Selection' - left mouse click to start selection of the area to " +#~ "be painted.\n" +#~ "Keeping a modifier key pressed (CTRL or SHIFT) will allow to add multiple " +#~ "areas.\n" +#~ "- 'Reference Object' - will do non copper clearing within the area\n" +#~ "specified by another object." + +#~ msgid "Sel" +#~ msgstr "Sel" + +#~ msgid "Diameters of nozzle tools, separated by ','" +#~ msgstr "Diameters of nozzle tools, separated by ','" + +#~ msgid "Reference Gerber" +#~ msgstr "Reference Gerber" + +#~ msgid "Reference Excellon" +#~ msgstr "Reference Excellon" + +#~ msgid "Reference Geometry" +#~ msgstr "Reference Geometry" + +#~ msgid "Point/Box Reference" +#~ msgstr "Point/Box Reference" + +#~ msgid "" +#~ "If 'Point' is selected above it store the coordinates (x, y) through " +#~ "which\n" +#~ "the mirroring axis passes.\n" +#~ "If 'Box' is selected above, select here a FlatCAM object (Gerber, Exc or " +#~ "Geo).\n" +#~ "Through the center of this object pass the mirroring axis selected above." +#~ msgstr "" +#~ "If 'Point' is selected above it store the coordinates (x, y) through " +#~ "which\n" +#~ "the mirroring axis passes.\n" +#~ "If 'Box' is selected above, select here a FlatCAM object (Gerber, Exc or " +#~ "Geo).\n" +#~ "Through the center of this object pass the mirroring axis selected above." + +#~ msgid "Alignment Drill Diameter" +#~ msgstr "Alignment Drill Diameter" + +#~ msgid "" +#~ "'Point' coordinates missing. Using Origin (0, 0) as mirroring reference." +#~ msgstr "" +#~ "'Point' coordinates missing. Using Origin (0, 0) as mirroring reference." + +#~ msgid "Export positive film cancelled." +#~ msgstr "Export positive film cancelled." + +#~ msgid "Export negative film cancelled." +#~ msgstr "Export negative film cancelled." + +#~ msgid "Move action cancelled." +#~ msgstr "Move action cancelled." + +#~ msgid "Diameter for the new tool." +#~ msgstr "Diameter for the new tool." + +#~ msgid "Create Paint Geometry" +#~ msgstr "Create Paint Geometry" + +#~ msgid "Paint Tool. Reading parameters." +#~ msgstr "Paint Tool. Reading parameters." + +#~ msgid "Paint Tool. Rest machining painting area task started." +#~ msgstr "Paint Tool. Rest machining painting area task started." + +#~ msgid "Properties Tool was not displayed. No object selected." +#~ msgstr "Properties Tool was not displayed. No object selected." + +#~ msgid " Export PNG cancelled." +#~ msgstr " Export PNG cancelled." + +#~ msgid "Adding Nozzle tool cancelled. Tool already in Tool Table." +#~ msgstr "Adding Nozzle tool cancelled. Tool already in Tool Table." + +#~ msgid "" +#~ "None of the following args: 'ref', 'all' were found or none was set to " +#~ "1.\n" +#~ "Copper clearing failed." +#~ msgstr "" +#~ "None of the following args: 'ref', 'all' were found or none was set to " +#~ "1.\n" +#~ "Copper clearing failed." + +#~ msgid "PostProcessor" +#~ msgstr "PostProcessor" + +#~ msgid "Default Zeros" +#~ msgstr "Default Zeros" + +#~ msgid "" +#~ "This sets the default type of Excellon zeros.\n" +#~ "If it is not detected in the parsed file the value here\n" +#~ "will be used.If LZ then Leading Zeros are kept and\n" +#~ "Trailing Zeros are removed.\n" +#~ "If TZ is checked then Trailing Zeros are kept\n" +#~ "and Leading Zeros are removed." +#~ msgstr "" +#~ "This sets the default type of Excellon zeros.\n" +#~ "If it is not detected in the parsed file the value here\n" +#~ "will be used.If LZ then Leading Zeros are kept and\n" +#~ "Trailing Zeros are removed.\n" +#~ "If TZ is checked then Trailing Zeros are kept\n" +#~ "and Leading Zeros are removed." + +#~ msgid "Default Units" +#~ msgstr "Default Units" + +#~ msgid "Optimization Time" +#~ msgstr "Optimization Time" + +#~ msgid "Coordinates decimals" +#~ msgstr "Coordinates decimals" + +#~ msgid "Feedrate decimals" +#~ msgstr "Feedrate decimals" + +#~ msgid "Rest M." +#~ msgstr "Rest M." + +#~ msgid "Convex Sh." +#~ msgstr "Convex Sh." + +#~ msgid "Add Tool to Tools DB" +#~ msgstr "Add Tool to Tools DB" + +#~ msgid "Remove Tool from Tools DB" +#~ msgstr "Remove Tool from Tools DB" + +#~ msgid "Export Tool DB" +#~ msgstr "Export Tool DB" + +#~ msgid "Import Tool DB" +#~ msgstr "Import Tool DB" + +#~ msgid "Please enter the desired tool diameter in Float format." +#~ msgstr "Please enter the desired tool diameter in Float format." + +#~ msgid "Default Tool added. Wrong value format entered." +#~ msgstr "Default Tool added. Wrong value format entered." + +#~ msgid "Import Preferences" +#~ msgstr "Import Preferences" + +#~ msgid "" +#~ "Import a full set of FlatCAM settings from a file\n" +#~ "previously saved on HDD.\n" +#~ "\n" +#~ "FlatCAM automatically save a 'factory_defaults' file\n" +#~ "on the first start. Do not delete that file." +#~ msgstr "" +#~ "Import a full set of FlatCAM settings from a file\n" +#~ "previously saved on HDD.\n" +#~ "\n" +#~ "FlatCAM automatically save a 'factory_defaults' file\n" +#~ "on the first start. Do not delete that file." + +#~ msgid "Export Preferences" +#~ msgstr "Export Preferences" + +#~ msgid "" +#~ "Export a full set of FlatCAM settings in a file\n" +#~ "that is saved on HDD." +#~ msgstr "" +#~ "Export a full set of FlatCAM settings in a file\n" +#~ "that is saved on HDD." + +#~ msgid "Start move Z" +#~ msgstr "Start move Z" + +#~ msgid "Grid X value" +#~ msgstr "Grid X value" + +#~ msgid "Grid Y value" +#~ msgstr "Grid Y value" + +#~ msgid "Wk. size" +#~ msgstr "Wk. size" + +#~ msgid "Sel. Fill" +#~ msgstr "Sel. Fill" + +#~ msgid "Sel. Line" +#~ msgstr "Sel. Line" + +#~ msgid "Sel2. Fill" +#~ msgstr "Sel2. Fill" + +#~ msgid "Sel2. Line" +#~ msgstr "Sel2. Line" + +#~ msgid "Editor Draw Sel." +#~ msgstr "Editor Draw Sel." + +#~ msgid "Proj. Dis. Items" +#~ msgstr "Proj. Dis. Items" + +#~ msgid "Sel. Shape" +#~ msgstr "Sel. Shape" + +#~ msgid "NB Font Size" +#~ msgstr "NB Font Size" + +#~ msgid "Axis Font Size" +#~ msgstr "Axis Font Size" + +#~ msgid "Textbox Font Size" +#~ msgstr "Textbox Font Size" + +#~ msgid "Shell at StartUp" +#~ msgstr "Shell at StartUp" + +#~ msgid "Project at StartUp" +#~ msgstr "Project at StartUp" + +#~ msgid "Mouse Cursor" +#~ msgstr "Mouse Cursor" + +#~ msgid "" +#~ "Set the language used throughout FlatCAM.\n" +#~ "The app will restart after click.Windows: When FlatCAM is installed in " +#~ "Program Files\n" +#~ "directory, it is possible that the app will not\n" +#~ "restart after the button is clicked due of Windows\n" +#~ "security features. In this case the language will be\n" +#~ "applied at the next app start." +#~ msgstr "" +#~ "Set the language used throughout FlatCAM.\n" +#~ "The app will restart after click.Windows: When FlatCAM is installed in " +#~ "Program Files\n" +#~ "directory, it is possible that the app will not\n" +#~ "restart after the button is clicked due of Windows\n" +#~ "security features. In this case the language will be\n" +#~ "applied at the next app start." + +#~ msgid "G-code does not have a units code: either G20 or G21" +#~ msgstr "G-code does not have a units code: either G20 or G21" + +#, python-brace-format +#~ msgid "" +#~ "[selected] {kind} created/selected: {name}" +#~ "" +#~ msgstr "" +#~ "[selected] {kind} created/selected: {name}" +#~ "" + +#, python-brace-format +#~ msgid "[selected]{name} selected" +#~ msgstr "[selected]{name} selected" + +#, python-brace-format +#~ msgid "{l_save}/Project_{date}" +#~ msgstr "{l_save}/Project_{date}" + +#, python-brace-format +#~| msgid "{l_save}/Project_{date}" +#~ msgid "{l_save}/{obj_name}_{date}" +#~ msgstr "{l_save}/{obj_name}_{date}" + +#, python-format +#~ msgid "" +#~ "How much (fraction) of the tool width to overlap each tool pass.\n" +#~ "Example:\n" +#~ "A value here of 0.25 means 25%% from the tool diameter found above.\n" +#~ "\n" +#~ "Adjust the value starting with lower values\n" +#~ "and increasing it if areas that should be painted are still \n" +#~ "not painted.\n" +#~ "Lower values = faster processing, faster execution on CNC.\n" +#~ "Higher values = slow processing and slow execution on CNC\n" +#~ "due of too many paths." +#~ msgstr "" +#~ "How much (fraction) of the tool width to overlap each tool pass.\n" +#~ "Example:\n" +#~ "A value here of 0.25 means 25%% from the tool diameter found above.\n" +#~ "\n" +#~ "Adjust the value starting with lower values\n" +#~ "and increasing it if areas that should be painted are still \n" +#~ "not painted.\n" +#~ "Lower values = faster processing, faster execution on CNC.\n" +#~ "Higher values = slow processing and slow execution on CNC\n" +#~ "due of too many paths." + +#~ msgid "" +#~ "Type here any G-Code commands you would like to append to the generated " +#~ "file. I.e.: M2 (End of program)" +#~ msgstr "" +#~ "Type here any G-Code commands you would like to append to the generated " +#~ "file. I.e.: M2 (End of program)" + +#~ msgid "" +#~ "Can be:\n" +#~ "- Portrait\n" +#~ "- Lanscape" +#~ msgstr "" +#~ "Can be:\n" +#~ "- Portrait\n" +#~ "- Lanscape" + +#~ msgid "" +#~ "- 'Rectangular' - the bounding box will be of rectangular shape.\n" +#~ " - 'Minimal' - the bounding box will be the convex hull shape." +#~ msgstr "" +#~ "- 'Rectangular' - the bounding box will be of rectangular shape.\n" +#~ " - 'Minimal' - the bounding box will be the convex hull shape." + +#~ msgid "" +#~ "- 'Solid' - copper thieving will be a solid polygon.\n" +#~ " - 'Dots Grid' - the empty area will be filled with a pattern of dots.\n" +#~ "- 'Squares Grid' - the empty area will be filled with a pattern of " +#~ "squares.\n" +#~ "- 'Lines Grid' - the empty area will be filled with a pattern of lines." +#~ msgstr "" +#~ "- 'Solid' - copper thieving will be a solid polygon.\n" +#~ " - 'Dots Grid' - the empty area will be filled with a pattern of dots.\n" +#~ "- 'Squares Grid' - the empty area will be filled with a pattern of " +#~ "squares.\n" +#~ "- 'Lines Grid' - the empty area will be filled with a pattern of lines." + +#~ msgid "Calibrate Tool" +#~ msgstr "Calibrate Tool" + +#, python-brace-format +#~ msgid "MEASURING: Result D(x) = {d_x} | D(y) = {d_y} | Distance = {d_z}" +#~ msgstr "MEASURING: Result D(x) = {d_x} | D(y) = {d_y} | Distance = {d_z}" + +#~ msgid "Paint Area" +#~ msgstr "Paint Area" + +#~ msgid "" +#~ "Generate GCode file to locate and align the PCB by using\n" +#~ "the four points acquired above." +#~ msgstr "" +#~ "Generate GCode file to locate and align the PCB by using\n" +#~ "the four points acquired above." + +#~ msgid "Axis Ref:" +#~ msgstr "Axis Ref:" + +#~ msgid "Change project units ..." +#~ msgstr "Change project units ..." + +#~ msgid "Tool diameter value is missing or wrong format. Add it and retry." +#~ msgstr "Tool diameter value is missing or wrong format. Add it and retry." + +#~ msgid "Overlap value is missing or wrong format. Add it and retry." +#~ msgstr "Overlap value is missing or wrong format. Add it and retry." + +#~ msgid "Margin distance value is missing or wrong format. Add it and retry." +#~ msgstr "Margin distance value is missing or wrong format. Add it and retry." + +#, python-format +#~ msgid "" +#~ "How much (fraction) of the tool width to overlap each tool pass.\n" +#~ "Example:\n" +#~ "A value here of 0.25 means an overlap of 25%% from the tool diameter " +#~ "found above." +#~ msgstr "" +#~ "How much (fraction) of the tool width to overlap each tool pass.\n" +#~ "Example:\n" +#~ "A value here of 0.25 means an overlap of 25%% from the tool diameter " +#~ "found above." + +#~ msgid "Feed Rate X-Y" +#~ msgstr "Feed Rate X-Y" + +#~ msgid "Feed Rate Z" +#~ msgstr "Feed Rate Z" + +#~ msgid "Feed Rate Rapids" +#~ msgstr "Feed Rate Rapids" + +#~ msgid "Generate" +#~ msgstr "Generate" + +#~| msgid "STEP 1" +#~ msgid "STEP 5" +#~ msgstr "STEP 5" + +#~| msgid "Calc. Tool" +#~ msgid "Cal Exc Tool" +#~ msgstr "Cal Exc Tool" + +#~ msgid "Object to be cutout. " +#~ msgstr "Object to be cutout. " + +#~ msgid "Margin:" +#~ msgstr "Margin:" + +#~ msgid "Gap size:" +#~ msgstr "Gap size:" + +#~ msgid "" +#~ "The cutout shape can be of ny shape.\n" +#~ "Useful when the PCB has a non-rectangular shape." +#~ msgstr "" +#~ "The cutout shape can be of ny shape.\n" +#~ "Useful when the PCB has a non-rectangular shape." + +#~ msgid "" +#~ "The resulting cutout shape is\n" +#~ "always a rectangle shape and it will be\n" +#~ "the bounding box of the Object." +#~ msgstr "" +#~ "The resulting cutout shape is\n" +#~ "always a rectangle shape and it will be\n" +#~ "the bounding box of the Object." + +#~ msgid "Geo Obj" +#~ msgstr "Geo Obj" + +#~ msgid "Manual Geo" +#~ msgstr "Manual Geo" + +#~ msgid "" +#~ "Use the left mouse button (LMB) click\n" +#~ "to create a bridge gap to separate the PCB from\n" +#~ "the surrounding material." +#~ msgstr "" +#~ "Use the left mouse button (LMB) click\n" +#~ "to create a bridge gap to separate the PCB from\n" +#~ "the surrounding material." + +#~ msgid "Generate Gap" +#~ msgstr "Generate Gap" + +#~ msgid "Reset" +#~ msgstr "Reset" + +#~ msgid "Resets all the fields." +#~ msgstr "Resets all the fields." + +#~ msgid "Overlap value must be between 0 (inclusive) and 1 (exclusive), " +#~ msgstr "Overlap value must be between 0 (inclusive) and 1 (exclusive), " + +#~ msgid "Overlap value must be between 0 (inclusive) and 1 (exclusive)" +#~ msgstr "Overlap value must be between 0 (inclusive) and 1 (exclusive)" + +#~ msgid "Click inside the desired polygon." +#~ msgstr "Click inside the desired polygon." + +#~ msgid "" +#~ "#\n" +#~ "# CREATE A NEW FLATCAM TCL SCRIPT\n" +#~ "# TCL Tutorial here: https://www.tcl.tk/man/tcl8.5/tutorial/tcltutorial." +#~ "html\n" +#~ "#\n" +#~ "\n" +#~ "# FlatCAM commands list:\n" +#~ "# AddCircle, AddPolygon, AddPolyline, AddRectangle, AlignDrill, " +#~ "AlignDrillGrid, ClearShell, ClearCopper,\n" +#~ "# Cncjob, Cutout, Delete, Drillcncjob, ExportGcode, ExportSVG, Exteriors, " +#~ "GeoCutout, GeoUnion, GetNames,\n" +#~ "# GetSys, ImportSvg, Interiors, Isolate, Follow, JoinExcellon, " +#~ "JoinGeometry, ListSys, MillDrills,\n" +#~ "# MillSlots, Mirror, New, NewGeometry, Offset, OpenExcellon, OpenGCode, " +#~ "OpenGerber, OpenProject,\n" +#~ "# Options, Paint, Panelize, Plot, SaveProject, SaveSys, Scale, SetActive, " +#~ "SetSys, Skew, SubtractPoly,\n" +#~ "# SubtractRectangle, Version, WriteGCode\n" +#~ "#\n" +#~ "\n" +#~ msgstr "" +#~ "#\n" +#~ "# CREATE A NEW FLATCAM TCL SCRIPT\n" +#~ "# TCL Tutorial here: https://www.tcl.tk/man/tcl8.5/tutorial/tcltutorial." +#~ "html\n" +#~ "#\n" +#~ "\n" +#~ "# FlatCAM commands list:\n" +#~ "# AddCircle, AddPolygon, AddPolyline, AddRectangle, AlignDrill, " +#~ "AlignDrillGrid, ClearShell, ClearCopper,\n" +#~ "# Cncjob, Cutout, Delete, Drillcncjob, ExportGcode, ExportSVG, Exteriors, " +#~ "GeoCutout, GeoUnion, GetNames,\n" +#~ "# GetSys, ImportSvg, Interiors, Isolate, Follow, JoinExcellon, " +#~ "JoinGeometry, ListSys, MillDrills,\n" +#~ "# MillSlots, Mirror, New, NewGeometry, Offset, OpenExcellon, OpenGCode, " +#~ "OpenGerber, OpenProject,\n" +#~ "# Options, Paint, Panelize, Plot, SaveProject, SaveSys, Scale, SetActive, " +#~ "SetSys, Skew, SubtractPoly,\n" +#~ "# SubtractRectangle, Version, WriteGCode\n" +#~ "#\n" +#~ "\n" + +#~ msgid "Program Author" +#~ msgstr "Program Author" + +#~ msgid "Export G-Code ..." +#~ msgstr "Export G-Code ..." + +#~ msgid "&View" +#~ msgstr "&View" + +#~ msgid "&Tool" +#~ msgstr "&Tool" + +#~ msgid "APP. DEFAULTS" +#~ msgstr "APP. DEFAULTS" + +#~ msgid "PROJ. OPTIONS " +#~ msgstr "PROJ. OPTIONS " + +#~ msgid "FULL Geo" +#~ msgstr "FULL Geo" + +#~ msgid "" +#~ "Create the Geometry Object\n" +#~ "for isolation routing. It contains both\n" +#~ "the interiors and exteriors geometry." +#~ msgstr "" +#~ "Create the Geometry Object\n" +#~ "for isolation routing. It contains both\n" +#~ "the interiors and exteriors geometry." + +#~ msgid "Ext Geo" +#~ msgstr "Ext Geo" + +#~ msgid "" +#~ "Create the Geometry Object\n" +#~ "for isolation routing containing\n" +#~ "only the exteriors geometry." +#~ msgstr "" +#~ "Create the Geometry Object\n" +#~ "for isolation routing containing\n" +#~ "only the exteriors geometry." + +#~ msgid "Int Geo" +#~ msgstr "Int Geo" + +#~ msgid "" +#~ "Create the Geometry Object\n" +#~ "for isolation routing containing\n" +#~ "only the interiors geometry." +#~ msgstr "" +#~ "Create the Geometry Object\n" +#~ "for isolation routing containing\n" +#~ "only the interiors geometry." + +#~ msgid "" +#~ "Select from the Tools Table above\n" +#~ "the hole dias that are to be drilled.\n" +#~ "Use the # column to make the selection." +#~ msgstr "" +#~ "Select from the Tools Table above\n" +#~ "the hole dias that are to be drilled.\n" +#~ "Use the # column to make the selection." + +#~ msgid "Wk. format" +#~ msgstr "Wk. format" + +#~ msgid "y_toolchange = Y coord for Toolchange" +#~ msgstr "y_toolchange = Y coord for Toolchange" + +#~ msgid "Ref." +#~ msgstr "Ref." + +#~ msgid "Gerber Reference Box Object" +#~ msgstr "Gerber Reference Box Object" + +#~ msgid "Excellon Reference Box Object" +#~ msgstr "Excellon Reference Box Object" + +#~ msgid "Geometry Reference Box Object" +#~ msgstr "Geometry Reference Box Object" + +#~ msgid "{l_save}/FlatCAM_Bookmarks_{date}" +#~ msgstr "{l_save}/FlatCAM_Bookmarks_{date}" + +#~ msgid "Could not load bookamrks file." +#~ msgstr "Could not load bookamrks file." + +#~ msgid "&Help" +#~ msgstr "&Help" + +#~ msgid "FlatCAM.org" +#~ msgstr "FlatCAM.org" + +#~ msgid "tool = tool number" +#~ msgstr "tool = tool number" + +#~ msgid "tooldia = tool diameter" +#~ msgstr "tooldia = tool diameter" + +#~ msgid "t_drills = for Excellon, total number of drills" +#~ msgstr "t_drills = for Excellon, total number of drills" + +#~ msgid "x_toolchange = X coord for Toolchange" +#~ msgstr "x_toolchange = X coord for Toolchange" + +#~ msgid "z_toolchange = Z coord for Toolchange" +#~ msgstr "z_toolchange = Z coord for Toolchange" + +#~ msgid "z_depthpercut = the step value for multidepth cut" +#~ msgstr "z_depthpercut = the step value for multidepth cut" + +#~ msgid "spindlesspeed = the value for the spindle speed" +#~ msgstr "spindlesspeed = the value for the spindle speed" + +#~ msgid "Rotate Angle" +#~ msgstr "Rotate Angle" + +#~ msgid "Skew_X angle" +#~ msgstr "Skew_X angle" + +#~ msgid "Skew_Y angle" +#~ msgstr "Skew_Y angle" + +#~ msgid "Scale_X factor" +#~ msgstr "Scale_X factor" + +#~ msgid "Scale_Y factor" +#~ msgstr "Scale_Y factor" + +#~ msgid "Offset_X val" +#~ msgstr "Offset_X val" + +#~ msgid "Offset_Y val" +#~ msgstr "Offset_Y val" + +#~ msgid " Mirror Ref. Point" +#~ msgstr " Mirror Ref. Point" + +#~ msgid "The Gerber Copper Bottom file for which rules are checked." +#~ msgstr "The Gerber Copper Bottom file for which rules are checked." + +#~ msgid "The Gerber Silkscreen Bottom file for which rules are checked." +#~ msgstr "The Gerber Silkscreen Bottom file for which rules are checked." + +#~| msgid "Excellon file" +#~ msgid "Excellon Files" +#~ msgstr "Excellon Files" + +#~ msgid "Go" +#~ msgstr "Go" + +#~ msgid "There are no polygons to mark area." +#~ msgstr "There are no polygons to mark area." + +#~ msgid "&Edit" +#~ msgstr "&Edit" + +#~ msgid "&Options" +#~ msgstr "&Options" + +#~ msgid "Measurement Tool" +#~ msgstr "Measurement Tool" + +#~ msgid "Margin value is missing or wrong format. Add it and retry." +#~ msgstr "Margin value is missing or wrong format. Add it and retry." + +#~ msgid "Gap size value is missing or wrong format. Add it and retry." +#~ msgstr "Gap size value is missing or wrong format. Add it and retry." + +#~ msgid "Measurement" +#~ msgstr "Measurement" + +#~ msgid "Meas. Tool" +#~ msgstr "Meas. Tool" + +#~ msgid "Not available with the current Graphic Engine Legacy(2D)." +#~ msgstr "Not available with the current Graphic Engine Legacy(2D)." + +#~ msgid "ToolMove.on_left_click()" +#~ msgstr "ToolMove.on_left_click()" + +#~ msgid "on_paint_button_click" +#~ msgstr "on_paint_button_click" + +#~ msgid "PaintTool.paint_poly()" +#~ msgstr "PaintTool.paint_poly()" + +#~ msgid "ToolSolderPaste.on_view_gcode()" +#~ msgstr "ToolSolderPaste.on_view_gcode()" + +#~ msgid "App.on_fileopenscript() -->" +#~ msgstr "App.on_fileopenscript() -->" + +#~ msgid "%s" +#~ msgstr "%s" + +#~ msgid "%s" +#~ msgstr "%s" + +#~ msgid "FlatCAMObj.GeometryObject.mtool_gen_cncjob() -->" +#~ msgstr "FlatCAMObj.GeometryObject.mtool_gen_cncjob() -->" + +#~ msgid "FlatCAMCNNJob.on_edit_code_click() -->" +#~ msgstr "FlatCAMCNNJob.on_edit_code_click() -->" + +#~ msgid "" +#~ "toolbars, key shortcuts or even dragging and dropping the files on the GUI" +#~ msgstr "" +#~ "toolbars, key shortcuts or even dragging and dropping the files on the GUI" + +#~ msgid "" +#~ "You can also load a FlatCAM project by double clicking on the project " +#~ "file, drag" +#~ msgstr "" +#~ "You can also load a FlatCAM project by double clicking on the project " +#~ "file, drag" + +#~ msgid "" +#~ "Once an object is available in the Project Tab, by selecting it and then " +#~ "focusing on" +#~ msgstr "" +#~ "Once an object is available in the Project Tab, by selecting it and then " +#~ "focusing on" + +#~ msgid "SELECTED TAB" +#~ msgstr "SELECTED TAB" + +#~ msgid "more simpler is to double click the object name in the Project Tab" +#~ msgstr "more simpler is to double click the object name in the Project Tab" + +#~ msgid "will be updated with the object properties according to" +#~ msgstr "will be updated with the object properties according to" + +#~ msgid "kind: Gerber, Excellon, Geometry or CNCJob object" +#~ msgstr "kind: Gerber, Excellon, Geometry or CNCJob object" + +#~ msgid "" +#~ "If the selection of the object is done on the canvas by single click " +#~ "instead, and the" +#~ msgstr "" +#~ "If the selection of the object is done on the canvas by single click " +#~ "instead, and the" + +#~ msgid "and populate it even if it was out of focus" +#~ msgstr "and populate it even if it was out of focus" + +#~ msgid "Gerber/Excellon Object" +#~ msgstr "Gerber/Excellon Object" + +#~ msgid "Add tools (change param in Selected Tab)" +#~ msgstr "Add tools (change param in Selected Tab)" + +#~ msgid "Generate CNCJob" +#~ msgstr "Generate CNCJob" + +#~ msgid "" +#~ "Verify GCode (through Edit CNC Code) and/or append/prepend to GCode " +#~ "(again, done in" +#~ msgstr "" +#~ "Verify GCode (through Edit CNC Code) and/or append/prepend to GCode " +#~ "(again, done in" + +#~ msgid "Shortcuts List" +#~ msgstr "Shortcuts List" + +#~ msgid "or through" +#~ msgstr "or through" + +#~ msgid "own key shortcut" +#~ msgstr "own key shortcut" + +#~ msgid "polygons" +#~ msgstr "polygons" + +#~ msgid "geo" +#~ msgstr "geo" + +#~ msgid "Stop" +#~ msgstr "Stop" + +#~ msgid "Generating panel ..." +#~ msgstr "Generating panel ..." + +#~ msgid "Spawning copies" +#~ msgstr "Spawning copies" + +#~ msgid "Parsing tool" +#~ msgstr "Parsing tool" + +#~ msgid "" +#~ " Wrong value format for self.defaults[\"feedrate_probe\"] or self." +#~ "options[\"feedrate_probe\"]" +#~ msgstr "" +#~ " Wrong value format for self.defaults[\"feedrate_probe\"] or self." +#~ "options[\"feedrate_probe\"]" + +#~ msgid "Wrong optimization type selected." +#~ msgstr "Wrong optimization type selected." + +#~ msgid "FILE ASSOCIATIONS" +#~ msgstr "FILE ASSOCIATIONS" + +#~ msgid "MH" +#~ msgstr "MH" + +#~ msgid "Feedrate (Plunge)" +#~ msgstr "Feedrate (Plunge)" + +#~ msgid "" +#~ "Parameters used to create a CNC Job object\n" +#~ "for this drill object that are shown when App Level is Advanced." +#~ msgstr "" +#~ "Parameters used to create a CNC Job object\n" +#~ "for this drill object that are shown when App Level is Advanced." + +#~ msgid "" +#~ "Parameters to create a CNC Job object\n" +#~ "tracing the contours of a Geometry object." +#~ msgstr "" +#~ "Parameters to create a CNC Job object\n" +#~ "tracing the contours of a Geometry object." + +#~ msgid "Manufacturing" +#~ msgstr "Manufacturing" + +#~ msgid "Function" +#~ msgstr "Function" + +#~ msgid "" +#~ "Juan Pablo Caram

    Denis Hayrullin
    Kamil Sopko
    Marius " +#~ "Stanciu
    Matthieu Berthomé

    and many others found here." +#~ "

    " +#~ msgstr "" +#~ "Juan Pablo Caram

    Denis Hayrullin
    Kamil Sopko
    Marius " +#~ "Stanciu
    Matthieu Berthomé

    and many others found here." +#~ "

    " + +#~ msgid "" +#~ "\n" +#~ "

    Selected Tab - Choose an " +#~ "Item from Project Tab

    \n" +#~ "\n" +#~ "

    Details:
    \n" +#~ "The normal flow when working in FlatCAM is the following:

    \n" +#~ "\n" +#~ "
      \n" +#~ "\t
    1. Loat/Import a Gerber, Excellon, " +#~ "Gcode, DXF, Raster Image or SVG file into FlatCAM using either the " +#~ "menu's, toolbars, key shortcuts or even dragging and dropping the " +#~ "files on the GUI.
      \n" +#~ "\t
      \n" +#~ "\tYou can also load a FlatCAM project by double clicking " +#~ "on the project file, drag & drop of the file into the FLATCAM GUI or " +#~ "through the menu/toolbar links offered within the app.

      \n" +#~ "\t 
    2. \n" +#~ "\t
    3. Once an object is available in " +#~ "the Project Tab, by selecting it and then focusing on SELECTED " +#~ "TAB (more simpler is to double click the object name in the " +#~ "Project Tab), SELECTED TAB will be updated with the " +#~ "object properties according to it's kind: Gerber, Excellon, Geometry " +#~ "or CNCJob object.
      \n" +#~ "\t
      \n" +#~ "\tIf the selection of the object is done on the canvas by single click " +#~ "instead, and the SELECTED TAB is in focus, again the " +#~ "object properties will be displayed into the Selected Tab. Alternatively, " +#~ "double clicking on the object on the canvas will bring the " +#~ "SELECTED TAB and populate it even if it was out of focus." +#~ "
      \n" +#~ "\t
      \n" +#~ "\tYou can change the parameters in this screen and the flow direction is " +#~ "like this:
      \n" +#~ "\t
      \n" +#~ "\tGerber/Excellon Object -> Change Param -> " +#~ "Generate Geometry -> Geometry Object -> Add tools " +#~ "(change param in Selected Tab) -> Generate CNCJob -> CNCJob " +#~ "Object -> Verify GCode (through Edit CNC Code) and/or append/" +#~ "prepend to GCode (again, done in SELECTED TAB) -" +#~ "> Save GCode
    4. \n" +#~ "
    \n" +#~ "\n" +#~ "

    A list of key shortcuts is " +#~ "available through an menu entry in Help -> Shortcuts List or through it's own key shortcut: F3.

    \n" +#~ "\n" +#~ " " +#~ msgstr "" +#~ "\n" +#~ "

    Selected Tab - Choose an " +#~ "Item from Project Tab

    \n" +#~ "\n" +#~ "

    Details:
    \n" +#~ "The normal flow when working in FlatCAM is the following:

    \n" +#~ "\n" +#~ "
      \n" +#~ "\t
    1. Loat/Import a Gerber, Excellon, " +#~ "Gcode, DXF, Raster Image or SVG file into FlatCAM using either the " +#~ "menu's, toolbars, key shortcuts or even dragging and dropping the " +#~ "files on the GUI.
      \n" +#~ "\t
      \n" +#~ "\tYou can also load a FlatCAM project by double clicking " +#~ "on the project file, drag & drop of the file into the FLATCAM GUI or " +#~ "through the menu/toolbar links offered within the app.

      \n" +#~ "\t 
    2. \n" +#~ "\t
    3. Once an object is available in " +#~ "the Project Tab, by selecting it and then focusing on SELECTED " +#~ "TAB (more simpler is to double click the object name in the " +#~ "Project Tab), SELECTED TAB will be updated with the " +#~ "object properties according to it's kind: Gerber, Excellon, Geometry " +#~ "or CNCJob object.
      \n" +#~ "\t
      \n" +#~ "\tIf the selection of the object is done on the canvas by single click " +#~ "instead, and the SELECTED TAB is in focus, again the " +#~ "object properties will be displayed into the Selected Tab. Alternatively, " +#~ "double clicking on the object on the canvas will bring the " +#~ "SELECTED TAB and populate it even if it was out of focus." +#~ "
      \n" +#~ "\t
      \n" +#~ "\tYou can change the parameters in this screen and the flow direction is " +#~ "like this:
      \n" +#~ "\t
      \n" +#~ "\tGerber/Excellon Object -> Change Param -> " +#~ "Generate Geometry -> Geometry Object -> Add tools " +#~ "(change param in Selected Tab) -> Generate CNCJob -> CNCJob " +#~ "Object -> Verify GCode (through Edit CNC Code) and/or append/" +#~ "prepend to GCode (again, done in SELECTED TAB) -" +#~ "> Save GCode
    4. \n" +#~ "
    \n" +#~ "\n" +#~ "

    A list of key shortcuts is " +#~ "available through an menu entry in Help -> Shortcuts List or through it's own key shortcut: F3.

    \n" +#~ "\n" +#~ " " + +#~ msgid "Run Script ...\tShift+S" +#~ msgstr "Run Script ...\tShift+S" + +#~| msgid "" +#~| "FlatCAM
    Version {version} {beta} ({date}) " +#~| "- {arch}

    2D Computer-Aided Printed Circuit " +#~| "Board
    Manufacturing.

    (c) 2014-2019 Juan Pablo Caram

    Main Contributors:
    Denis Hayrullin
    Kamil " +#~| "Sopko
    Marius Stanciu
    Matthieu Berthomé
    and many others found here.

    Development is done here.
    DOWNLOAD area here.
    " +#~ msgid "" +#~ "FlatCAM
    Version {version} {beta} ({date}) - " +#~ "{arch}

    2D Computer-Aided Printed Circuit Board
    Manufacturing." +#~ "

    License:
    Licensed under MIT license (2014 - " +#~ "2019)
    by (c)Juan Pablo Caram

    Programmers:
    Denis " +#~ "Hayrullin
    Kamil Sopko
    Marius Stanciu
    Matthieu Berthomé
    and " +#~ "many others found here.

    Development is done here.
    DOWNLOAD area
    here.
    " +#~ msgstr "" +#~ "FlatCAM
    Version {version} {beta} ({date}) - " +#~ "{arch}

    2D Computer-Aided Printed Circuit Board
    Manufacturing." +#~ "

    License:
    Licensed under MIT license (2014 - " +#~ "2019)
    by (c)Juan Pablo Caram

    Programmers:
    Denis " +#~ "Hayrullin
    Kamil Sopko
    Marius Stanciu
    Matthieu Berthomé
    and " +#~ "many others found here.

    Development is done here.
    DOWNLOAD area
    here.
    " + +#~| msgid "[ERROR_NOTCL] Expected a GeometryObject, got %s" +#~ msgid "Expected a GeometryObject, got %s" +#~ msgstr "Expected a GeometryObject, got %s" + +#~ msgid "Saved to: %s" +#~ msgstr "Saved to: %s" + +#~ msgid "[WARNING_NOTCL] Adding Tool cancelled ..." +#~ msgstr "[WARNING_NOTCL] Adding Tool cancelled ..." + +#~ msgid "%s" +#~ msgstr "%s" + +#~| msgid "[ERROR]App.on_view_source() -->%s" +#~ msgid "App.on_view_source() -->" +#~ msgstr "App.on_view_source() -->" + +#~ msgid "[success] Name changed from {old} to {new}" +#~ msgstr "[success] Name changed from {old} to {new}" + +#~| msgid "" +#~| "[ERROR_NOTCL] Failed.\n" +#~| "%s" +#~ msgid "[ERROR_NOTCL] %s" +#~ msgstr "[ERROR_NOTCL] %s" + +#~ msgid "Editor %s" +#~ msgstr "Editor %s" + +#~ msgid "[success] Done. Path completed." +#~ msgstr "[success] Done. Path completed." + +#~ msgid "[success] Paint done." +#~ msgstr "[success] Paint done." + +#~ msgid "About" +#~ msgstr "About" + +#~| msgid "" +#~| "General Shortcut list
    \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| " \n" +#~| "
    F3 SHOW SHORTCUT LIST
      
    1 Switch to Project Tab
    2 Switch to Selected Tab
    3 Switch to Tool Tab
      
    B New Gerber
    E Edit Object (if selected)
    G Grid On/Off
    J Jump to Coordinates
    L New Excellon
    M Move Obj
    N New Geometry
    O Set Origin
    Q Change Units
    P Open Properties Tool
    R Rotate by 90 degree CW
    S Shell Toggle
    T Add a Tool (when in Geometry Selected " +#~| "Tab or in Tools NCC or Tools Paint)
    V Zoom Fit
    X Flip on X_axis
    Y Flip on Y_axis
    '-'\n" +#~| "  Zoom Out
    '='\n" +#~| "  Zoom In
      
    Ctrl+A Select All
    Ctrl+C Copy Obj
    Ctrl+E Open Excellon File
    Ctrl+G Open Gerber File
    Ctrl+N New Project
    Ctrl+M Measurement Tool
    Ctrl+O Open Project
    Ctrl+S Save Project As
    Ctrl+F10\n" +#~| "  Toggle Plot Area
      
    Shift+C Copy Obj_Name
    Shift+E Toggle Code Editor
    Shift+G Toggle the axis
    Shift+P Open Preferences Window
    Shift+R Rotate by 90 degree CCW
    Shift+S Run a Script
    Shift+W Toggle the workspace
    Shift+X Skew on X axis
    Shift+Y Skew on Y axis
      
    Alt+C Calculators Tool
    Alt+D 2-Sided PCB Tool
    Alt+K Solder Paste Dispensing Tool
    Alt+L Film PCB Tool
    Alt+N Non-Copper Clearing Tool
    Alt+P Paint Area Tool
    Alt+Q PDF Import Tool
    Alt+R Transformations Tool
    Alt+S View File Source
    Alt+U Cutout PCB Tool
    Alt+1 Enable all Plots
    Alt+2 Disable all Plots
    Alt+3 Disable Non-selected Plots
    Alt+F10 Toggle Full Screen
      
    F1 Open Online Manual
    F4 Open Online Tutorials
    Del Delete Object
    Del Alternate: Delete Tool
    '`' (left to Key_1)Toogle Notebook Area " +#~| "(Left Side)
    SPACE En(Dis)able Obj Plot
    Escape Deselects all objects
    \n" +#~| " \n" +#~| " " +#~ msgid "" +#~ "General Shortcut list
    \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ "
    F3 SHOW SHORTCUT LIST
      
    1 Switch to Project Tab
    2 Switch to Selected Tab
    3 Switch to Tool Tab
      
    B New Gerber
    E Edit Object (if selected)
    G Grid On/Off
    J Jump to Coordinates
    L New Excellon
    M Move Obj
    N New Geometry
    O Set Origin
    Q Change Units
    P Open Properties Tool
    R Rotate by 90 degree CW
    S Shell Toggle
    T Add a Tool (when in Geometry Selected " +#~ "Tab or in Tools NCC or Tools Paint)
    V Zoom Fit
    X Flip on X_axis
    Y Flip on Y_axis
    '-'\n" +#~ "  Zoom Out
    '='\n" +#~ "  Zoom In
      
    Ctrl+A Select All
    Ctrl+C Copy Obj
    Ctrl+E Open Excellon File
    Ctrl+G Open Gerber File
    Ctrl+N New Project
    Ctrl+M Measurement Tool
    Ctrl+O Open Project
    Ctrl+S Save Project As
    Ctrl+F10 Toggle Plot Area
      
    Shift+C Copy Obj_Name
    Shift+E Toggle Code Editor
    Shift+G Toggle the axis
    Shift+P Open Preferences Window
    Shift+R Rotate by 90 degree CCW
    Shift+S Run a Script
    Shift+W Toggle the workspace
    Shift+X Skew on X axis
    Shift+Y Skew on Y axis
      
    Alt+C Calculators Tool
    Alt+D 2-Sided PCB Tool
    Alt+K Solder Paste Dispensing Tool
    Alt+L Film PCB Tool
    Alt+N Non-Copper Clearing Tool
    Alt+P Paint Area Tool
    Alt+Q PDF Import Tool
    Alt+R Transformations Tool
    Alt+S View File Source
    Alt+U Cutout PCB Tool
    Alt+1 Enable all Plots
    Alt+2 Disable all Plots
    Alt+3 Disable Non-selected Plots
    Alt+F10 Toggle Full Screen
      
    Ctrl+Alt+X\n" +#~ "  Abort current task (gracefully)
      
    F1 Open Online Manual
    F4 Open Online Tutorials
    Del Delete Object
    Del Alternate: Delete Tool
    '`' (left to Key_1)Toogle Notebook Area " +#~ "(Left Side)
    SPACE En(Dis)able Obj Plot
    Escape Deselects all objects
    \n" +#~ " \n" +#~ " " +#~ msgstr "" +#~ "General Shortcut list
    \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ "
    F3 SHOW SHORTCUT LIST
      
    1 Switch to Project Tab
    2 Switch to Selected Tab
    3 Switch to Tool Tab
      
    B New Gerber
    E Edit Object (if selected)
    G Grid On/Off
    J Jump to Coordinates
    L New Excellon
    M Move Obj
    N New Geometry
    O Set Origin
    Q Change Units
    P Open Properties Tool
    R Rotate by 90 degree CW
    S Shell Toggle
    T Add a Tool (when in Geometry Selected " +#~ "Tab or in Tools NCC or Tools Paint)
    V Zoom Fit
    X Flip on X_axis
    Y Flip on Y_axis
    '-'\n" +#~ "  Zoom Out
    '='\n" +#~ "  Zoom In
      
    Ctrl+A Select All
    Ctrl+C Copy Obj
    Ctrl+E Open Excellon File
    Ctrl+G Open Gerber File
    Ctrl+N New Project
    Ctrl+M Measurement Tool
    Ctrl+O Open Project
    Ctrl+S Save Project As
    Ctrl+F10 Toggle Plot Area
      
    Shift+C Copy Obj_Name
    Shift+E Toggle Code Editor
    Shift+G Toggle the axis
    Shift+P Open Preferences Window
    Shift+R Rotate by 90 degree CCW
    Shift+S Run a Script
    Shift+W Toggle the workspace
    Shift+X Skew on X axis
    Shift+Y Skew on Y axis
      
    Alt+C Calculators Tool
    Alt+D 2-Sided PCB Tool
    Alt+K Solder Paste Dispensing Tool
    Alt+L Film PCB Tool
    Alt+N Non-Copper Clearing Tool
    Alt+P Paint Area Tool
    Alt+Q PDF Import Tool
    Alt+R Transformations Tool
    Alt+S View File Source
    Alt+U Cutout PCB Tool
    Alt+1 Enable all Plots
    Alt+2 Disable all Plots
    Alt+3 Disable Non-selected Plots
    Alt+F10 Toggle Full Screen
      
    Ctrl+Alt+X\n" +#~ "  Abort current task (gracefully)
      
    F1 Open Online Manual
    F4 Open Online Tutorials
    Del Delete Object
    Del Alternate: Delete Tool
    '`' (left to Key_1)Toogle Notebook Area " +#~ "(Left Side)
    SPACE En(Dis)able Obj Plot
    Escape Deselects all objects
    \n" +#~ " \n" +#~ " " + +#~ msgid "" +#~ "Editor Shortcut list
    \n" +#~ "
    \n" +#~ " GEOMETRY EDITOR
    \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ "
    A Draw an Arc
    B Buffer Tool
    C Copy Geo Item
    D Within Add Arc will toogle the ARC " +#~ "direction: CW or CCW
    E Polygon Intersection Tool
    I Paint Tool
    J Jump to Location (x, y)
    K Toggle Corner Snap
    M Move Geo Item
    M Within Add Arc will cycle through the " +#~ "ARC modes
    N Draw a Polygon
    O Draw a Circle
    P Draw a Path
    R Draw Rectangle
    S Polygon Substraction Tool
    T Add Text Tool
    U Polygon Union Tool
    X Flip shape on X axis
    Y Flip shape on Y axis
      
    Shift+X Skew shape on X axis
    Shift+Y Skew shape on Y axis
      
    Alt+R Editor Transformation Tool
    Alt+X Offset shape on X axis
    Alt+Y Offset shape on Y axis
      
    Ctrl+M Measurement Tool
    Ctrl+S Save Object and Exit Editor
    Ctrl+X Polygon Cut Tool
      
    Space Rotate Geometry
    ENTER Finish drawing for certain tools
    ESC Abort and return to Select
    Del Delete Shape
    \n" +#~ "
    \n" +#~ "
    \n" +#~ " EXCELLON EDITOR
    \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ "
    A Add Drill Array
    C Copy Drill(s)
    D Add Drill
    J Jump to Location (x, y)
    M Move Drill(s)
    Q Add Slot Array
    R Resize Drill(s)
    T Add a new Tool
    W Add Slot
      
    Del Delete Drill(s)
    Del Alternate: Delete Tool(s)
      
    ESC Abort and return to Select
    Ctrl+S Save Object and Exit Editor
    \n" +#~ "
    \n" +#~ "
    \n" +#~ " GERBER EDITOR
    \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ "
    A Add Pad Array
    B Buffer
    C Copy
    D Add Disc
    E Add SemiDisc
    J Jump to Location (x, y)
    M Move
    N Add Region
    P Add Pad
    R Within Track & Region Tools will cycle " +#~ "in REVERSE the bend modes
    S Scale
    T Add Track
    T Within Track & Region Tools will cycle " +#~ "FORWARD the bend modes
      
    Del Delete
    Del Alternate: Delete Apertures
      
    ESC Abort and return to Select
    Ctrl+E Eraser Tool
    Ctrl+S Save Object and Exit Editor
      
    Alt+A Mark Area Tool
    Alt+N Poligonize Tool
    Alt+R Transformation Tool
    \n" +#~ " " +#~ msgstr "" +#~ "Editor Shortcut list
    \n" +#~ "
    \n" +#~ " GEOMETRY EDITOR
    \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ "
    A Draw an Arc
    B Buffer Tool
    C Copy Geo Item
    D Within Add Arc will toogle the ARC " +#~ "direction: CW or CCW
    E Polygon Intersection Tool
    I Paint Tool
    J Jump to Location (x, y)
    K Toggle Corner Snap
    M Move Geo Item
    M Within Add Arc will cycle through the " +#~ "ARC modes
    N Draw a Polygon
    O Draw a Circle
    P Draw a Path
    R Draw Rectangle
    S Polygon Substraction Tool
    T Add Text Tool
    U Polygon Union Tool
    X Flip shape on X axis
    Y Flip shape on Y axis
      
    Shift+X Skew shape on X axis
    Shift+Y Skew shape on Y axis
      
    Alt+R Editor Transformation Tool
    Alt+X Offset shape on X axis
    Alt+Y Offset shape on Y axis
      
    Ctrl+M Measurement Tool
    Ctrl+S Save Object and Exit Editor
    Ctrl+X Polygon Cut Tool
      
    Space Rotate Geometry
    ENTER Finish drawing for certain tools
    ESC Abort and return to Select
    Del Delete Shape
    \n" +#~ "
    \n" +#~ "
    \n" +#~ " EXCELLON EDITOR
    \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ "
    A Add Drill Array
    C Copy Drill(s)
    D Add Drill
    J Jump to Location (x, y)
    M Move Drill(s)
    Q Add Slot Array
    R Resize Drill(s)
    T Add a new Tool
    W Add Slot
      
    Del Delete Drill(s)
    Del Alternate: Delete Tool(s)
      
    ESC Abort and return to Select
    Ctrl+S Save Object and Exit Editor
    \n" +#~ "
    \n" +#~ "
    \n" +#~ " GERBER EDITOR
    \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ "
    A Add Pad Array
    B Buffer
    C Copy
    D Add Disc
    E Add SemiDisc
    J Jump to Location (x, y)
    M Move
    N Add Region
    P Add Pad
    R Within Track & Region Tools will cycle " +#~ "in REVERSE the bend modes
    S Scale
    T Add Track
    T Within Track & Region Tools will cycle " +#~ "FORWARD the bend modes
      
    Del Delete
    Del Alternate: Delete Apertures
      
    ESC Abort and return to Select
    Ctrl+E Eraser Tool
    Ctrl+S Save Object and Exit Editor
      
    Alt+A Mark Area Tool
    Alt+N Poligonize Tool
    Alt+R Transformation Tool
    \n" +#~ " " + +#~ msgid "[success] Done." +#~ msgstr "[success] Done." + +#~ msgid "[WARNING_NOTCL] Cancelled." +#~ msgstr "[WARNING_NOTCL] Cancelled." + +#~ msgid "[success] Added new tool with dia: {dia} {units}" +#~ msgstr "[success] Added new tool with dia: {dia} {units}" + +#~ msgid "[WARNING_NOTCL] Application is saving the project. Please wait ..." +#~ msgstr "[WARNING_NOTCL] Application is saving the project. Please wait ..." + +#~ msgid "%s:" +#~ msgstr "%s:" + +#~ msgid "%s:" +#~ msgstr "%s:" + +#~| msgid "[ERROR_NOTCL] Object not found: %s" +#~ msgid "Object not found: %s" +#~ msgstr "Object not found: %s" + +#~ msgid "[success] Opened: %s" +#~ msgstr "[success] Opened: %s" + +#~ msgid "[success] Paint All Done." +#~ msgstr "[success] Paint All Done." + +#~| msgid "" +#~| "[ERROR] Could not do Paint All. Try a different combination of " +#~| "parameters. Or a different Method of paint\n" +#~| "%s" +#~ msgid "" +#~ "Could not do Paint All. Try a different combination of parameters. Or a " +#~ "different Method of paint\n" +#~ "%s" +#~ msgstr "" +#~ "Could not do Paint All. Try a different combination of parameters. Or a " +#~ "different Method of paint\n" +#~ "%s" + +#~| msgid "[success] Paint All Done." +#~ msgid "[success] Paint Area Done." +#~ msgstr "[success] Paint Area Done." + +#~ msgid "Generating panel ... Please wait." +#~ msgstr "Generating panel ... Please wait." + +#~ msgid "...proccessing... [%s]" +#~ msgstr "...proccessing... [%s]" + +#~ msgid "Parsing aperture %s geometry ..." +#~ msgstr "Parsing aperture %s geometry ..." + +#~ msgid "[success] Skew on the %s axis done ..." +#~ msgstr "[success] Skew on the %s axis done ..." + +#~ msgid "[ERROR_NOTCL] Could not load defaults file." +#~ msgstr "[ERROR_NOTCL] Could not load defaults file." + +#~ msgid "[ERROR_NOTCL] Failed to parse defaults file." +#~ msgstr "[ERROR_NOTCL] Failed to parse defaults file." + +#~ msgid "[ERROR_NOTCL] An internal error has ocurred. See shell.\n" +#~ msgstr "[ERROR_NOTCL] An internal error has ocurred. See shell.\n" + +#~ msgid "[success] Defaults saved." +#~ msgstr "[success] Defaults saved." + +#~ msgid "[success] Converted units to %s" +#~ msgstr "[success] Converted units to %s" + +#~ msgid "[WARNING_NOTCL] Export Code cancelled." +#~ msgstr "[WARNING_NOTCL] Export Code cancelled." + +#~ msgid "[success] Origin set ..." +#~ msgstr "[success] Origin set ..." + +#~ msgid "[success] Skew on X axis done." +#~ msgstr "[success] Skew on X axis done." + +#~ msgid "[success] Skew on Y axis done." +#~ msgstr "[success] Skew on Y axis done." + +#~ msgid "[success] New Grid added ..." +#~ msgstr "[success] New Grid added ..." + +#~ msgid "[WARNING_NOTCL] Open Gerber cancelled." +#~ msgstr "[WARNING_NOTCL] Open Gerber cancelled." + +#~ msgid "[WARNING_NOTCL] Open G-Code cancelled." +#~ msgstr "[WARNING_NOTCL] Open G-Code cancelled." + +#~ msgid "[WARNING_NOTCL] Open Project cancelled." +#~ msgstr "[WARNING_NOTCL] Open Project cancelled." + +#~ msgid "[WARNING_NOTCL] Open Config cancelled." +#~ msgstr "[WARNING_NOTCL] Open Config cancelled." + +#~ msgid "[WARNING_NOTCL] No object selected." +#~ msgstr "[WARNING_NOTCL] No object selected." + +#~ msgid "[WARNING_NOTCL] Export SVG cancelled." +#~ msgstr "[WARNING_NOTCL] Export SVG cancelled." + +#~ msgid "[WARNING_NOTCL] Export Excellon cancelled." +#~ msgstr "[WARNING_NOTCL] Export Excellon cancelled." + +#~ msgid "[WARNING_NOTCL] Export Gerber cancelled." +#~ msgstr "[WARNING_NOTCL] Export Gerber cancelled." + +#~ msgid "[WARNING_NOTCL] Export DXF cancelled." +#~ msgstr "[WARNING_NOTCL] Export DXF cancelled." + +#~ msgid "[WARNING_NOTCL] Open SVG cancelled." +#~ msgstr "[WARNING_NOTCL] Open SVG cancelled." + +#~ msgid "[WARNING_NOTCL] Open DXF cancelled." +#~ msgstr "[WARNING_NOTCL] Open DXF cancelled." + +#~ msgid "[WARNING_NOTCL] No object Box. Using instead %s" +#~ msgstr "[WARNING_NOTCL] No object Box. Using instead %s" + +#~ msgid "[ERROR_NOTCL] Failed to parse file: {name}. {error}" +#~ msgstr "[ERROR_NOTCL] Failed to parse file: {name}. {error}" + +#~ msgid "[ERROR_NOTCL] An internal error has occurred. See shell.\n" +#~ msgstr "[ERROR_NOTCL] An internal error has occurred. See shell.\n" + +#~ msgid "[ERROR_NOTCL] Failed to verify project file: %s. Retry to save it." +#~ msgstr "[ERROR_NOTCL] Failed to verify project file: %s. Retry to save it." + +#~ msgid "" +#~ "[ERROR_NOTCL] Failed to parse saved project file: %s. Retry to save it." +#~ msgstr "" +#~ "[ERROR_NOTCL] Failed to parse saved project file: %s. Retry to save it." + +#~ msgid "[ERROR_NOTCL] Failed to save project file: %s. Retry to save it." +#~ msgstr "[ERROR_NOTCL] Failed to save project file: %s. Retry to save it." + +#~ msgid "[ERROR_NOTCL] Wrong value format entered, use a number." +#~ msgstr "[ERROR_NOTCL] Wrong value format entered, use a number." + +#~ msgid "[ERROR_NOTCL] Cancelled. Empty file, it has no geometry..." +#~ msgstr "[ERROR_NOTCL] Cancelled. Empty file, it has no geometry..." + +#~ msgid "[WARNING_NOTCL] Export Machine Code cancelled ..." +#~ msgstr "[WARNING_NOTCL] Export Machine Code cancelled ..." + +#~ msgid "[WARNING_NOTCL] No such file or directory" +#~ msgstr "[WARNING_NOTCL] No such file or directory" + +#~ msgid "[ERROR_NOTCL] The value is mistyped. Check the value. %s" +#~ msgstr "[ERROR_NOTCL] The value is mistyped. Check the value. %s" + +#~ msgid "[ERROR_NOTCL] Cancelled." +#~ msgstr "[ERROR_NOTCL] Cancelled." + +#~ msgid "Tool Dia:" +#~ msgstr "Tool Dia:" + +#~ msgid "Nr of drills:" +#~ msgstr "Nr of drills:" + +#~ msgid "Direction:" +#~ msgstr "Direction:" + +#~ msgid "Pitch:" +#~ msgstr "Pitch:" + +#~ msgid "Length:" +#~ msgstr "Length:" + +#~ msgid "Nr of slots:" +#~ msgstr "Nr of slots:" + +#~ msgid "[success] Deleted tool with dia: {del_dia} {units}" +#~ msgstr "[success] Deleted tool with dia: {del_dia} {units}" + +#~ msgid "Tool dia:" +#~ msgstr "Tool dia:" + +#~ msgid "Overlap Rate:" +#~ msgstr "Overlap Rate:" + +#~ msgid "Method:" +#~ msgstr "Method:" + +#~ msgid "[ERROR_NOTCL] Wrong value format entered for Rotate, use a number." +#~ msgstr "[ERROR_NOTCL] Wrong value format entered for Rotate, use a number." + +#~ msgid "[ERROR_NOTCL] Wrong value format entered for Skew X, use a number." +#~ msgstr "[ERROR_NOTCL] Wrong value format entered for Skew X, use a number." + +#~ msgid "[ERROR_NOTCL] Wrong value format entered for Skew Y, use a number." +#~ msgstr "[ERROR_NOTCL] Wrong value format entered for Skew Y, use a number." + +#~ msgid "[ERROR_NOTCL] Wrong value format entered for Scale X, use a number." +#~ msgstr "[ERROR_NOTCL] Wrong value format entered for Scale X, use a number." + +#~ msgid "[ERROR_NOTCL] Wrong value format entered for Scale Y, use a number." +#~ msgstr "[ERROR_NOTCL] Wrong value format entered for Scale Y, use a number." + +#~ msgid "[ERROR_NOTCL] Wrong value format entered for Offset X, use a number." +#~ msgstr "" +#~ "[ERROR_NOTCL] Wrong value format entered for Offset X, use a number." + +#~ msgid "[ERROR_NOTCL] Wrong value format entered for Offset Y, use a number." +#~ msgstr "" +#~ "[ERROR_NOTCL] Wrong value format entered for Offset Y, use a number." + +#~ msgid "[success] Flip on the Y axis done ..." +#~ msgstr "[success] Flip on the Y axis done ..." + +#~ msgid "[success] Flip on the X axis done ..." +#~ msgstr "[success] Flip on the X axis done ..." + +#~ msgid "[success] Offset on the %s axis done ..." +#~ msgstr "[success] Offset on the %s axis done ..." + +#~ msgid "" +#~ "[WARNING_NOTCL] Editing MultiGeo Geometry, tool: {tool} with diameter: " +#~ "{dia}" +#~ msgstr "" +#~ "[WARNING_NOTCL] Editing MultiGeo Geometry, tool: {tool} with diameter: " +#~ "{dia}" + +#~ msgid "Clear GUI Settings:" +#~ msgstr "Clear GUI Settings:" + +#~ msgid "Duration:" +#~ msgstr "Duration:" + +#~ msgid "Fast Plunge:" +#~ msgstr "Fast Plunge:" + +#~ msgid "Linear Dir.:" +#~ msgstr "Linear Dir.:" + +#~ msgid "Plot kind:" +#~ msgstr "Plot kind:" + +#~ msgid "" +#~ "Select from the Tools Table above\n" +#~ "the tools you want to include." +#~ msgstr "" +#~ "Select from the Tools Table above\n" +#~ "the tools you want to include." + +#~ msgid "" +#~ "[WARNING_NOTCL] Tool Diameter is zero value. Change it to a positive real " +#~ "number." +#~ msgstr "" +#~ "[WARNING_NOTCL] Tool Diameter is zero value. Change it to a positive real " +#~ "number." + +#~ msgid "[success] Gerber %s was mirrored..." +#~ msgstr "[success] Gerber %s was mirrored..." + +#~ msgid "[success] Excellon %s was mirrored..." +#~ msgstr "[success] Excellon %s was mirrored..." + +#~ msgid "[success] Geometry %s was mirrored..." +#~ msgstr "[success] Geometry %s was mirrored..." + +#~ msgid "[WARNING_NOTCL] No object(s) selected." +#~ msgstr "[WARNING_NOTCL] No object(s) selected." + +#~ msgid "[success] %s object was moved ..." +#~ msgstr "[success] %s object was moved ..." + +#~ msgid "[WARNING_NOTCL] Object(s) not selected" +#~ msgstr "[WARNING_NOTCL] Object(s) not selected" + +#~ msgid "[WARNING_NOTCL] Buffering ..." +#~ msgstr "[WARNING_NOTCL] Buffering ..." + +#~ msgid "[success] Non-Copper Clearing with ToolDia = %s started." +#~ msgstr "[success] Non-Copper Clearing with ToolDia = %s started." + +#~ msgid "[ERROR_NOTCL] NCCTool.clear_non_copper() --> %s" +#~ msgstr "[ERROR_NOTCL] NCCTool.clear_non_copper() --> %s" + +#~ msgid "[success] NCC Tool finished." +#~ msgstr "[success] NCC Tool finished." + +#~ msgid "" +#~ "[WARNING_NOTCL] NCC Tool finished but some PCB features could not be " +#~ "cleared. Check the result." +#~ msgstr "" +#~ "[WARNING_NOTCL] NCC Tool finished but some PCB features could not be " +#~ "cleared. Check the result." + +#~ msgid "[success] Non-Copper Rest Clearing with ToolDia = %s started." +#~ msgstr "[success] Non-Copper Rest Clearing with ToolDia = %s started." + +#~ msgid "[ERROR_NOTCL] NCCTool.clear_non_copper_rest() --> %s" +#~ msgstr "[ERROR_NOTCL] NCCTool.clear_non_copper_rest() --> %s" + +#~ msgid "" +#~ "[ERROR_NOTCL] NCC Tool finished but could not clear the object with " +#~ "current settings." +#~ msgstr "" +#~ "[ERROR_NOTCL] NCC Tool finished but could not clear the object with " +#~ "current settings." + +#~ msgid "[WARNING_NOTCL] Open PDF cancelled." +#~ msgstr "[WARNING_NOTCL] Open PDF cancelled." + +#~ msgid "[ERROR_NOTCL] Open PDF file failed." +#~ msgstr "[ERROR_NOTCL] Open PDF file failed." + +#~ msgid "[success] Rendered: %s" +#~ msgstr "[success] Rendered: %s" + +#~ msgid "" +#~ "How to select the polygons to paint.
    Options:
    - Single Polygons: left mouse click on the polygon to be painted.
    - Area " +#~ "Selection: left mouse click to start selection of the area to be " +#~ "painted.
    - All Polygons: paint all polygons.
    - Reference " +#~ "Object: paint an area described by an external reference object." +#~ msgstr "" +#~ "How to select the polygons to paint.
    Options:
    - Single Polygons: left mouse click on the polygon to be painted.
    - Area " +#~ "Selection: left mouse click to start selection of the area to be " +#~ "painted.
    - All Polygons: paint all polygons.
    - Reference " +#~ "Object: paint an area described by an external reference object." + +#~ msgid "" +#~ "[ERROR_NOTCL] There is no Painting Geometry in the file.\n" +#~ "Usually it means that the tool diameter is too big for the painted " +#~ "geometry.\n" +#~ "Change the painting parameters and try again." +#~ msgstr "" +#~ "[ERROR_NOTCL] There is no Painting Geometry in the file.\n" +#~ "Usually it means that the tool diameter is too big for the painted " +#~ "geometry.\n" +#~ "Change the painting parameters and try again." + +#~ msgid "[WARNING_NOTCL]No object Box. Using instead %s" +#~ msgstr "[WARNING_NOTCL]No object Box. Using instead %s" + +#~ msgid "[success] Imported: %s" +#~ msgstr "[success] Imported: %s" + +#~ msgid "[ERROR_NOTCL] Generating new object failed." +#~ msgstr "[ERROR_NOTCL] Generating new object failed." + +#~ msgid "[success] Created: %s" +#~ msgstr "[success] Created: %s" + +#~ msgid "[success] Rotate done ..." +#~ msgstr "[success] Rotate done ..." + +#~ msgid "" +#~ "When choosing the 'Itself' option the non copper clearing extent\n" +#~ "is based on the object that is copper cleared.\n" +#~ " Choosing the 'Box' option will do non copper clearing within the box\n" +#~ "specified by another object different than the one that is copper cleared." +#~ msgstr "" +#~ "When choosing the 'Itself' option the non copper clearing extent\n" +#~ "is based on the object that is copper cleared.\n" +#~ " Choosing the 'Box' option will do non copper clearing within the box\n" +#~ "specified by another object different than the one that is copper cleared." + +#~ msgid "" +#~ "How to select the polygons to paint.
    Options:
    - Single: left " +#~ "mouse click on the polygon to be painted.
    - Area: left mouse " +#~ "click to start selection of the area to be painted.
    - All: " +#~ "paint all polygons.
    - Ref: paint an area described by an " +#~ "external reference object." +#~ msgstr "" +#~ "How to select the polygons to paint.
    Options:
    - Single: left " +#~ "mouse click on the polygon to be painted.
    - Area: left mouse " +#~ "click to start selection of the area to be painted.
    - All: " +#~ "paint all polygons.
    - Ref: paint an area described by an " +#~ "external reference object." + +#~ msgid "Geometry object to be painted. " +#~ msgstr "Geometry object to be painted. " + +#~ msgid "" +#~ "After clicking here, click inside
    the polygon you wish to be painted " +#~ "if Single is selected.
    If Area is selected, then the " +#~ "selection of the area to be painted
    will be initiated by a first click " +#~ "and finished by the second mouse click.
    If All is selected " +#~ "then the Paint will start after click.
    If Ref is selected then " +#~ "the Paint will start after click,
    and the painted area will be " +#~ "described by a selected object.
    A new Geometry object with the tool " +#~ "paths will be created." +#~ msgstr "" +#~ "After clicking here, click inside
    the polygon you wish to be painted " +#~ "if Single is selected.
    If Area is selected, then the " +#~ "selection of the area to be painted
    will be initiated by a first click " +#~ "and finished by the second mouse click.
    If All is selected " +#~ "then the Paint will start after click.
    If Ref is selected then " +#~ "the Paint will start after click,
    and the painted area will be " +#~ "described by a selected object.
    A new Geometry object with the tool " +#~ "paths will be created." + +#~ msgid "Apertures:" +#~ msgstr "Apertures:" + +#~ msgid "Aperture Code:" +#~ msgstr "Aperture Code:" + +#~ msgid "Languages:" +#~ msgstr "Languages:" + +#~ msgid "Width (# passes):" +#~ msgstr "Width (# passes):" + +#~| msgid "Clear non-copper:" +#~ msgid "Clear non-copper" +#~ msgstr "Clear non-copper" + +#~ msgid "Rounded corners" +#~ msgstr "Rounded corners" + +#~ msgid "" +#~ "Creates a Geometry objects with polygons\n" +#~ "covering the copper-free areas of the PCB." +#~ msgstr "" +#~ "Creates a Geometry objects with polygons\n" +#~ "covering the copper-free areas of the PCB." + +#~ msgid "Bounding Box:" +#~ msgstr "Bounding Box:" + +#~ msgid "Units:" +#~ msgstr "Units:" + +#~ msgid "Zeros:" +#~ msgstr "Zeros:" + +#~ msgid "INCH:" +#~ msgstr "INCH:" + +#~ msgid "Tool change:" +#~ msgstr "Tool change:" + +#~ msgid "Toolchange Z position." +#~ msgstr "Toolchange Z position." + +#~ msgid "" +#~ "Tool speed while drilling\n" +#~ "(in units per minute)." +#~ msgstr "" +#~ "Tool speed while drilling\n" +#~ "(in units per minute)." + +#~ msgid "Gcode: " +#~ msgstr "Gcode: " + +#~ msgid "Offset Z:" +#~ msgstr "Offset Z:" + +#~ msgid "Slots:" +#~ msgstr "Slots:" + +#~ msgid "Create CNC Job:" +#~ msgstr "Create CNC Job:" + +#~ msgid "Multidepth" +#~ msgstr "Multidepth" + +#~ msgid "Multidepth usage: True or False." +#~ msgstr "Multidepth usage: True or False." + +#~ msgid "" +#~ "The preprocessor file that dictates\n" +#~ "Machine Code output." +#~ msgstr "" +#~ "The preprocessor file that dictates\n" +#~ "Machine Code output." + +#~ msgid "Display Annotation:" +#~ msgstr "Display Annotation:" + +#~ msgid "" +#~ "Type here any G-Code commands you would\n" +#~ "like to be executed when Toolchange event is encountered.\n" +#~ "This will constitute a Custom Toolchange GCode,\n" +#~ "or a Toolchange Macro." +#~ msgstr "" +#~ "Type here any G-Code commands you would\n" +#~ "like to be executed when Toolchange event is encountered.\n" +#~ "This will constitute a Custom Toolchange GCode,\n" +#~ "or a Toolchange Macro." + +#~ msgid "" +#~ "If checked, use 'rest machining'.\n" +#~ "Basically it will clear copper outside PCB features,\n" +#~ "using the biggest tool and continue with the next tools,\n" +#~ "from bigger to smaller, to clear areas of copper that\n" +#~ "could not be cleared by previous tool.\n" +#~ "If not checked, use the standard algorithm." +#~ msgstr "" +#~ "If checked, use 'rest machining'.\n" +#~ "Basically it will clear copper outside PCB features,\n" +#~ "using the biggest tool and continue with the next tools,\n" +#~ "from bigger to smaller, to clear areas of copper that\n" +#~ "could not be cleared by previous tool.\n" +#~ "If not checked, use the standard algorithm." + +#~ msgid "Offset:" +#~ msgstr "Offset:" + +#~ msgid "" +#~ "Distance from objects at which\n" +#~ "to draw the cutout." +#~ msgstr "" +#~ "Distance from objects at which\n" +#~ "to draw the cutout." + +#~ msgid "" +#~ "Size of the gaps in the toolpath\n" +#~ "that will remain to hold the\n" +#~ "board in place." +#~ msgstr "" +#~ "Size of the gaps in the toolpath\n" +#~ "that will remain to hold the\n" +#~ "board in place." + +#~ msgid "Create a convex shape surrounding the entire PCB." +#~ msgstr "Create a convex shape surrounding the entire PCB." + +#~ msgid "" +#~ "The axis should pass through a point or cut\n" +#~ " a specified box (in a Geometry object) in \n" +#~ "the middle." +#~ msgstr "" +#~ "The axis should pass through a point or cut\n" +#~ " a specified box (in a Geometry object) in \n" +#~ "the middle." + +#~ msgid "Panel Type:" +#~ msgstr "Panel Type:" + +#~ msgid "Tip angle:" +#~ msgstr "Tip angle:" + +#~ msgid "Angle for rotation. In degrees." +#~ msgstr "Angle for rotation. In degrees." + +#~ msgid "Angle for Skew/Shear on X axis. In degrees." +#~ msgstr "Angle for Skew/Shear on X axis. In degrees." + +#~ msgid "Angle for Skew/Shear on Y axis. In degrees." +#~ msgstr "Angle for Skew/Shear on Y axis. In degrees." + +#~ msgid "XY Toolchange:" +#~ msgstr "XY Toolchange:" + +#~ msgid "PostProcessors:" +#~ msgstr "PostProcessors:" + +#~ msgid "Scale:" +#~ msgstr "Scale:" + +#~ msgid "Offset:" +#~ msgstr "Offset:" + +#~ msgid "Tools Table" +#~ msgstr "Tools Table" + +#~ msgid "" +#~ "Tool height just before starting the work.\n" +#~ "Delete the value if you don't need this feature." +#~ msgstr "" +#~ "Tool height just before starting the work.\n" +#~ "Delete the value if you don't need this feature." + +#~ msgid "" +#~ "Z-axis position (height) for\n" +#~ "the last move." +#~ msgstr "" +#~ "Z-axis position (height) for\n" +#~ "the last move." + +#~ msgid "" +#~ "The json file that dictates\n" +#~ "gcode output." +#~ msgstr "" +#~ "The json file that dictates\n" +#~ "gcode output." + +#~ msgid "Type: " +#~ msgstr "Type: " + +#~ msgid "Drills Tool dia:" +#~ msgstr "Drills Tool dia:" + +#~ msgid "Slots Tool dia:" +#~ msgstr "Slots Tool dia:" + +#~ msgid "Tool Dia:" +#~ msgstr "Tool Dia:" + +#~ msgid "Tool Data" +#~ msgstr "Tool Data" + +#~ msgid "" +#~ "This is the height (Z) at which the CNC\n" +#~ "will go as the last move." +#~ msgstr "" +#~ "This is the height (Z) at which the CNC\n" +#~ "will go as the last move." + +#~ msgid "Feed Rate Z (Plunge):" +#~ msgstr "Feed Rate Z (Plunge):" + +#~ msgid "" +#~ "Cutting speed in the Z\n" +#~ "plane in units per minute" +#~ msgstr "" +#~ "Cutting speed in the Z\n" +#~ "plane in units per minute" + +#~ msgid "" +#~ "Cutting speed in the XY\n" +#~ "plane in units per minute\n" +#~ "(in units per minute).\n" +#~ "This is for the rapid move G00.\n" +#~ "It is useful only for Marlin,\n" +#~ "ignore for any other cases." +#~ msgstr "" +#~ "Cutting speed in the XY\n" +#~ "plane in units per minute\n" +#~ "(in units per minute).\n" +#~ "This is for the rapid move G00.\n" +#~ "It is useful only for Marlin,\n" +#~ "ignore for any other cases." + +#~ msgid "Cut over 1st pt" +#~ msgstr "Cut over 1st pt" + +#~ msgid "Paint Area:" +#~ msgstr "Paint Area:" + +#~ msgid "CNC Tools Table" +#~ msgstr "CNC Tools Table" + +#~ msgid "" +#~ "Type here any G-Code commands you would\n" +#~ "like to add to the beginning of the generated file." +#~ msgstr "" +#~ "Type here any G-Code commands you would\n" +#~ "like to add to the beginning of the generated file." + +#~ msgid "" +#~ "This is the diameter of the tool tip.\n" +#~ "The manufacturer specifies it." +#~ msgstr "" +#~ "This is the diameter of the tool tip.\n" +#~ "The manufacturer specifies it." + +#~ msgid "Object:" +#~ msgstr "Object:" + +#~ msgid "Units:" +#~ msgstr "Units:" + +#~ msgid "" +#~ "- 'Itself': the non copper clearing extent\n" +#~ "is based on the object that is copper cleared.\n" +#~ " - 'Box': will do non copper clearing within the box\n" +#~ "specified by the object selected in the Ref. Object combobox." +#~ msgstr "" +#~ "- 'Itself': the non copper clearing extent\n" +#~ "is based on the object that is copper cleared.\n" +#~ " - 'Box': will do non copper clearing within the box\n" +#~ "specified by the object selected in the Ref. Object combobox." + +#~ msgid "Geometry:" +#~ msgstr "Geometry:" + +#~ msgid "" +#~ "Scale the selected object(s)\n" +#~ "using the Scale Factor X for both axis." +#~ msgstr "" +#~ "Scale the selected object(s)\n" +#~ "using the Scale Factor X for both axis." + +#~ msgid "Excellon Format:" +#~ msgstr "Excellon Format:" + +#~ msgid "Tools:" +#~ msgstr "Tools:" + +#~ msgid "Export G-Code:" +#~ msgstr "Export G-Code:" + +#~ msgid "How to select the polygons to paint." +#~ msgstr "How to select the polygons to paint." + +#~ msgid "V-Shape Tool Calculator:" +#~ msgstr "V-Shape Tool Calculator:" + +#~ msgid "ElectroPlating Calculator:" +#~ msgstr "ElectroPlating Calculator:" + +#~ msgid "Name:" +#~ msgstr "Name:" + +#~ msgid "Plot kind:" +#~ msgstr "Plot kind:" + +#~ msgid "Display Annotation:" +#~ msgstr "Display Annotation:" + +#~ msgid "GERBER:" +#~ msgstr "GERBER:" + +#~ msgid "EXCELLON:" +#~ msgstr "EXCELLON:" + +#~ msgid "GEOMETRY:" +#~ msgstr "GEOMETRY:" + +#~ msgid "Panel Type:" +#~ msgstr "Panel Type:" + +#~ msgid "Excellon format:" +#~ msgstr "Excellon format:" + +#~ msgid "Gerber Objects" +#~ msgstr "Gerber Objects" + +#~ msgid "Geometry Objects" +#~ msgstr "Geometry Objects" + +#~ msgid "Save &Defaults" +#~ msgstr "Save &Defaults" + +#~ msgid "Tool dia: " +#~ msgstr "Tool dia: " + +#~ msgid "" +#~ "The diameter of the cutting\n" +#~ "tool.." +#~ msgstr "" +#~ "The diameter of the cutting\n" +#~ "tool.." + +#~ msgid "[WARNING_NOTCL] Move cancelled. No shape selected." +#~ msgstr "[WARNING_NOTCL] Move cancelled. No shape selected." + +#~ msgid "Copy as &Geom" +#~ msgstr "Copy as &Geom" + +#~ msgid "" +#~ "Change the size of the selected apertures.\n" +#~ "Factor by which to multiply\n" +#~ "geometric features of this object." +#~ msgstr "" +#~ "Change the size of the selected apertures.\n" +#~ "Factor by which to multiply\n" +#~ "geometric features of this object." + +#~ msgid "Ap. Buffer Factor:" +#~ msgstr "Ap. Buffer Factor:" + +#~ msgid "" +#~ "Change the size of the selected apertures.\n" +#~ "Factor by which to expand/shrink\n" +#~ "geometric features of this object." +#~ msgstr "" +#~ "Change the size of the selected apertures.\n" +#~ "Factor by which to expand/shrink\n" +#~ "geometric features of this object." + +#~ msgid "Out" +#~ msgstr "Out" + +#~ msgid "Pos" +#~ msgstr "Pos" + +#~ msgid "Neg" +#~ msgstr "Neg" + +#~ msgid "Solid " +#~ msgstr "Solid " + +#~ msgid "M-Color " +#~ msgstr "M-Color " + +#~ msgid "Click on CENTER ..." +#~ msgstr "Click on CENTER ..." + +#~ msgid "[success] Done. Region completed." +#~ msgstr "[success] Done. Region completed." + +#~ msgid "Del Aperture:" +#~ msgstr "Del Aperture:" + +#~ msgid "" +#~ "Delete a aperture in the aperture list.\n" +#~ "It will delete also the associated geometry." +#~ msgstr "" +#~ "Delete a aperture in the aperture list.\n" +#~ "It will delete also the associated geometry." + +#~ msgid "Save && Close Edit" +#~ msgstr "Save && Close Edit" + +#~ msgid "" +#~ "Editor Shortcut list
    \n" +#~ "
    \n" +#~ " GEOMETRY EDITOR
    \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ "
    A Draw an Arc
    B Buffer Tool
    C Copy Geo Item
    E Polygon Intersection Tool
    I Paint Tool
    J Jump to Location (x, y)
    K Toggle Corner Snap
    M Move Geo Item
    N Draw a Polygon
    O Draw a Circle
    P Draw a Path
    R Draw Rectangle
    S Polygon Substraction Tool
    T Add Text Tool
    U Polygon Union Tool
    X Flip shape on X axis
    Y Flip shape on Y axis
      
    Shift+X Skew shape on X axis
    Shift+Y Skew shape on Y axis
      
    Alt+R Editor Transformation Tool
    Alt+X Offset shape on X axis
    Alt+Y Offset shape on Y axis
      
    Ctrl+M Measurement Tool
    Ctrl+S Save Object and Exit Editor
    Ctrl+X Polygon Cut Tool
      
    Space Rotate Geometry
    ENTER Finish drawing for certain tools
    ESC Abort and return to Select
    Del Delete Shape
    \n" +#~ "
    \n" +#~ "
    \n" +#~ " EXCELLON EDITOR
    \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ "
    A Add Drill Array
    C Copy Drill(s)
    D Add Drill
    J Jump to Location (x, y)
    M Move Drill(s)
    R Resize Drill(s)
    T Add a new Tool
      
    Del Delete Drill(s)
    Del Alternate: Delete Tool(s)
      
    ESC Abort and return to Select
    Ctrl+S Save Object and Exit Editor
    \n" +#~ " " +#~ msgstr "" +#~ "Editor Shortcut list
    \n" +#~ "
    \n" +#~ " GEOMETRY EDITOR
    \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ "
    A Draw an Arc
    B Buffer Tool
    C Copy Geo Item
    E Polygon Intersection Tool
    I Paint Tool
    J Jump to Location (x, y)
    K Toggle Corner Snap
    M Move Geo Item
    N Draw a Polygon
    O Draw a Circle
    P Draw a Path
    R Draw Rectangle
    S Polygon Substraction Tool
    T Add Text Tool
    U Polygon Union Tool
    X Flip shape on X axis
    Y Flip shape on Y axis
      
    Shift+X Skew shape on X axis
    Shift+Y Skew shape on Y axis
      
    Alt+R Editor Transformation Tool
    Alt+X Offset shape on X axis
    Alt+Y Offset shape on Y axis
      
    Ctrl+M Measurement Tool
    Ctrl+S Save Object and Exit Editor
    Ctrl+X Polygon Cut Tool
      
    Space Rotate Geometry
    ENTER Finish drawing for certain tools
    ESC Abort and return to Select
    Del Delete Shape
    \n" +#~ "
    \n" +#~ "
    \n" +#~ " EXCELLON EDITOR
    \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ "
    A Add Drill Array
    C Copy Drill(s)
    D Add Drill
    J Jump to Location (x, y)
    M Move Drill(s)
    R Resize Drill(s)
    T Add a new Tool
      
    Del Delete Drill(s)
    Del Alternate: Delete Tool(s)
      
    ESC Abort and return to Select
    Ctrl+S Save Object and Exit Editor
    \n" +#~ " " + +#~ msgid "[ERROR_NOTCL]Could not load defaults file." +#~ msgstr "[ERROR_NOTCL]Could not load defaults file." + +#~ msgid "" +#~ "[ERROR_NOTCL] The aperture scale factor value is missing or wrong format." +#~ msgstr "" +#~ "[ERROR_NOTCL] The aperture scale factor value is missing or wrong format." + +#~ msgid "[WARNING_NOTCL]Export Machine Code cancelled ..." +#~ msgstr "[WARNING_NOTCL]Export Machine Code cancelled ..." + +#~ msgid "[success] GUI settings deleted ..." +#~ msgstr "[success] GUI settings deleted ..." + +#~ msgid "Buffer Factor:" +#~ msgstr "Buffer Factor:" + +#~ msgid "Generate new Gerber Object:" +#~ msgstr "Generate new Gerber Object:" + +#~ msgid "Will generate a new Gerber object from the changed apertures." +#~ msgstr "Will generate a new Gerber object from the changed apertures." + +#~ msgid "" +#~ "Will generate a new Gerber object from the changed apertures.\n" +#~ "This new object can then be isolated etc." +#~ msgstr "" +#~ "Will generate a new Gerber object from the changed apertures.\n" +#~ "This new object can then be isolated etc." + +#~ msgid "[success]Offset on the %s axis done ..." +#~ msgstr "[success]Offset on the %s axis done ..." + +#~ msgid "" +#~ "How much (fraction) of the tool width to overlap each tool pass.\n" +#~ "Example:\n" +#~ "A value here of 0.25 means 25\\% from the tool diameter found above.\n" +#~ "\n" +#~ "Adjust the value starting with lower values\n" +#~ "and increasing it if areas that should be painted are still \n" +#~ "not painted.\n" +#~ "Lower values = faster processing, faster execution on PCB.\n" +#~ "Higher values = slow processing and slow execution on CNC\n" +#~ "due of too many paths." +#~ msgstr "" +#~ "How much (fraction) of the tool width to overlap each tool pass.\n" +#~ "Example:\n" +#~ "A value here of 0.25 means 25\\% from the tool diameter found above.\n" +#~ "\n" +#~ "Adjust the value starting with lower values\n" +#~ "and increasing it if areas that should be painted are still \n" +#~ "not painted.\n" +#~ "Lower values = faster processing, faster execution on PCB.\n" +#~ "Higher values = slow processing and slow execution on CNC\n" +#~ "due of too many paths." + +#~| msgid "z_toolchange = Z coord for Toolchange" +#~ msgid "z_move = Z coord for Toolchange" +#~ msgstr "z_move = Z coord for Toolchange" + +#~ msgid "%s/Project_%s" +#~ msgstr "%s/Project_%s" + +#~ msgid "tool_tab" +#~ msgstr "tool_tab" diff --git a/locale/it/LC_MESSAGES/strings.po b/locale/it/LC_MESSAGES/strings.po index 5a2bdbdf..f116377d 100644 --- a/locale/it/LC_MESSAGES/strings.po +++ b/locale/it/LC_MESSAGES/strings.po @@ -507,7 +507,7 @@ msgid "Failed. Select a Geometry Object and try again." msgstr "" #: FlatCAMApp.py:5652 FlatCAMApp.py:5688 -msgid "Expected a FlatCAMGeometry, got" +msgid "Expected a GeometryObject, got" msgstr "" #: FlatCAMApp.py:5665 @@ -1125,7 +1125,7 @@ msgid "Open TCL script cancelled." msgstr "" #: FlatCAMApp.py:9993 -msgid "Executing FlatCAMScript file." +msgid "Executing ScriptObject file." msgstr "" #: FlatCAMApp.py:10000 FlatCAMApp.py:10003 @@ -14705,7 +14705,7 @@ msgid "Buffer done" msgstr "" #: tclCommands/TclCommandBbox.py:74 tclCommands/TclCommandNregions.py:73 -msgid "Expected FlatCAMGerber or FlatCAMGeometry, got" +msgid "Expected GerberObject or GeometryObject, got" msgstr "" #: tclCommands/TclCommandBounds.py:64 tclCommands/TclCommandBounds.py:68 diff --git a/locale/pt_BR/LC_MESSAGES/strings.po b/locale/pt_BR/LC_MESSAGES/strings.po index 15a1b23f..c833ef59 100644 --- a/locale/pt_BR/LC_MESSAGES/strings.po +++ b/locale/pt_BR/LC_MESSAGES/strings.po @@ -557,7 +557,7 @@ msgid "Failed. Select a Geometry Object and try again." msgstr "Falha. Selecione um Objeto de Geometria e tente novamente." #: FlatCAMApp.py:5652 FlatCAMApp.py:5688 -msgid "Expected a FlatCAMGeometry, got" +msgid "Expected a GeometryObject, got" msgstr "Geometria FlatCAM esperada, recebido" #: FlatCAMApp.py:5665 @@ -1211,7 +1211,7 @@ msgid "Open TCL script cancelled." msgstr "Abrir script TCL cancelado." #: FlatCAMApp.py:9993 -msgid "Executing FlatCAMScript file." +msgid "Executing ScriptObject file." msgstr "Executando arquivo de Script FlatCAM." #: FlatCAMApp.py:10000 FlatCAMApp.py:10003 @@ -16677,8 +16677,8 @@ msgid "Buffer done" msgstr "Buffer concluído" #: tclCommands/TclCommandBbox.py:74 tclCommands/TclCommandNregions.py:73 -msgid "Expected FlatCAMGerber or FlatCAMGeometry, got" -msgstr "Esperando FlatCAMGerber ou FlatCAMGeometry, recebido" +msgid "Expected GerberObject or GeometryObject, got" +msgstr "Esperando GerberObject ou GeometryObject, recebido" #: tclCommands/TclCommandBounds.py:64 tclCommands/TclCommandBounds.py:68 msgid "Expected a list of objects names separated by comma. Got" @@ -17323,8 +17323,8 @@ msgstr "Nenhum nome de geometria nos argumentos. Altere e tente novamente." #~ msgid "%s" #~ msgstr "%s" -#~ msgid "FlatCAMObj.FlatCAMGeometry.mtool_gen_cncjob() -->" -#~ msgstr "FlatCAMObj.FlatCAMGeometry.mtool_gen_cncjob() -->" +#~ msgid "FlatCAMObj.GeometryObject.mtool_gen_cncjob() -->" +#~ msgstr "FlatCAMObj.GeometryObject.mtool_gen_cncjob() -->" #~ msgid "FlatCAMCNNJob.on_edit_code_click() -->" #~ msgstr "FlatCAMCNNJob.on_edit_code_click() -->" @@ -17580,7 +17580,7 @@ msgstr "Nenhum nome de geometria nos argumentos. Altere e tente novamente." #~ "flatcam/src/Beta/\">aqui.
    Área de DOWNLOAD aqui.
    " -#~ msgid "Expected a FlatCAMGeometry, got %s" +#~ msgid "Expected a GeometryObject, got %s" #~ msgstr "Geometria FlatCAM esperada, recebido %s" #~ msgid "Saved to: %s" diff --git a/locale/ro/LC_MESSAGES/strings.mo b/locale/ro/LC_MESSAGES/strings.mo index 23055b92..fb50b35c 100644 Binary files a/locale/ro/LC_MESSAGES/strings.mo and b/locale/ro/LC_MESSAGES/strings.mo differ diff --git a/locale/ro/LC_MESSAGES/strings.po b/locale/ro/LC_MESSAGES/strings.po index f22d6f98..5b4362f1 100644 --- a/locale/ro/LC_MESSAGES/strings.po +++ b/locale/ro/LC_MESSAGES/strings.po @@ -5,8 +5,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" -"POT-Creation-Date: 2020-04-25 14:59+0300\n" -"PO-Revision-Date: 2020-04-25 14:59+0300\n" +"POT-Creation-Date: 2020-04-27 12:33+0300\n" +"PO-Revision-Date: 2020-04-27 12:34+0300\n" "Last-Translator: \n" "Language-Team: \n" "Language: ro\n" @@ -23,9 +23,9 @@ msgstr "" "X-Poedit-SearchPathExcluded-1: tests\n" "X-Poedit-SearchPathExcluded-2: doc\n" -#: FlatCAMApp.py:789 FlatCAMApp.py:821 FlatCAMCommon.py:1925 -#: FlatCAMCommon.py:2040 flatcamEditors/FlatCAMGeoEditor.py:500 -#: flatcamEditors/FlatCAMGeoEditor.py:570 +#: FlatCAMApp.py:794 FlatCAMApp.py:826 FlatCAMDB.py:1481 FlatCAMDB.py:1596 +#: flatcamEditors/FlatCAMGeoEditor.py:499 +#: flatcamEditors/FlatCAMGeoEditor.py:569 #: flatcamEditors/FlatCAMGeoEditor.py:5152 flatcamGUI/PreferencesUI.py:5509 #: flatcamGUI/PreferencesUI.py:6056 flatcamTools/ToolNCC.py:431 #: flatcamTools/ToolNCC.py:2396 flatcamTools/ToolNCC.py:2424 @@ -36,8 +36,8 @@ msgstr "" msgid "Seed" msgstr "Punct_arbitrar" -#: FlatCAMApp.py:795 flatcamGUI/PreferencesUI.py:5588 -#: flatcamGUI/PreferencesUI.py:7695 flatcamTools/ToolCopperThieving.py:126 +#: FlatCAMApp.py:800 flatcamGUI/PreferencesUI.py:5588 +#: flatcamGUI/PreferencesUI.py:7695 flatcamTools/ToolCopperThieving.py:125 #: flatcamTools/ToolNCC.py:535 flatcamTools/ToolNCC.py:1301 #: flatcamTools/ToolNCC.py:1629 flatcamTools/ToolNCC.py:1914 #: flatcamTools/ToolNCC.py:1978 flatcamTools/ToolNCC.py:2962 @@ -45,21 +45,21 @@ msgstr "Punct_arbitrar" msgid "Itself" msgstr "Însuşi" -#: FlatCAMApp.py:822 flatcamGUI/PreferencesUI.py:6119 +#: FlatCAMApp.py:827 flatcamGUI/PreferencesUI.py:6119 #: flatcamTools/ToolPaint.py:486 flatcamTools/ToolPaint.py:1422 #: tclCommands/TclCommandPaint.py:162 msgid "All Polygons" msgstr "Toate Poligoanele" -#: FlatCAMApp.py:1129 +#: FlatCAMApp.py:1134 msgid "FlatCAM is initializing ..." msgstr "FlatCAM se inițializează ..." -#: FlatCAMApp.py:1814 +#: FlatCAMApp.py:1828 msgid "Could not find the Language files. The App strings are missing." msgstr "Nu am gasit fişierele cu traduceri. Mesajele aplicaţiei lipsesc." -#: FlatCAMApp.py:1908 +#: FlatCAMApp.py:1922 msgid "" "FlatCAM is initializing ...\n" "Canvas initialization started." @@ -67,7 +67,7 @@ msgstr "" "FlatCAM se inițializează ...\n" "Initializarea spațiului de afisare a inceput." -#: FlatCAMApp.py:1928 +#: FlatCAMApp.py:1942 msgid "" "FlatCAM is initializing ...\n" "Canvas initialization started.\n" @@ -77,67 +77,62 @@ msgstr "" "Initializarea spațiului de afisare a inceput.\n" "Initializarea spatiului de afisare s-a terminat in" -#: FlatCAMApp.py:2570 flatcamGUI/GUIElements.py:2592 -msgid "Type >help< to get started" -msgstr "Tastați >help< pentru a începe" - -#: FlatCAMApp.py:2822 FlatCAMApp.py:9400 +#: FlatCAMApp.py:2815 FlatCAMApp.py:9396 msgid "New Project - Not saved" msgstr "Proiect nou - Nu a fost salvat" -#: FlatCAMApp.py:2918 +#: FlatCAMApp.py:2911 msgid "" "Found old default preferences files. Please reboot the application to update." msgstr "" "Au fost găsite fișiere de preferințe implicite vechi. Vă rugăm să reporniți " "aplicația pentru a le actualiza." -#: FlatCAMApp.py:2969 FlatCAMApp.py:3889 FlatCAMApp.py:3938 FlatCAMApp.py:3993 -#: FlatCAMApp.py:4068 FlatCAMApp.py:6117 FlatCAMApp.py:9484 FlatCAMApp.py:9521 -#: FlatCAMApp.py:9563 FlatCAMApp.py:9592 FlatCAMApp.py:9632 FlatCAMApp.py:9657 -#: FlatCAMApp.py:9709 FlatCAMApp.py:9745 FlatCAMApp.py:9791 FlatCAMApp.py:9832 -#: FlatCAMApp.py:9873 FlatCAMApp.py:9914 FlatCAMApp.py:9955 FlatCAMApp.py:9999 -#: FlatCAMApp.py:10055 FlatCAMApp.py:10087 FlatCAMApp.py:10119 -#: FlatCAMApp.py:10356 FlatCAMApp.py:10400 FlatCAMApp.py:10477 -#: FlatCAMApp.py:10532 FlatCAMCommon.py:371 FlatCAMCommon.py:413 -#: FlatCAMCommon.py:1107 FlatCAMCommon.py:1153 FlatCAMCommon.py:2537 -#: FlatCAMCommon.py:2583 ObjectCollection.py:122 -#: flatcamEditors/FlatCAMExcEditor.py:1024 -#: flatcamEditors/FlatCAMExcEditor.py:1092 +#: FlatCAMApp.py:2962 FlatCAMApp.py:3882 FlatCAMApp.py:3931 FlatCAMApp.py:3986 +#: FlatCAMApp.py:4061 FlatCAMApp.py:6110 FlatCAMApp.py:9480 FlatCAMApp.py:9517 +#: FlatCAMApp.py:9559 FlatCAMApp.py:9588 FlatCAMApp.py:9629 FlatCAMApp.py:9654 +#: FlatCAMApp.py:9706 FlatCAMApp.py:9741 FlatCAMApp.py:9786 FlatCAMApp.py:9827 +#: FlatCAMApp.py:9868 FlatCAMApp.py:9909 FlatCAMApp.py:9950 FlatCAMApp.py:9994 +#: FlatCAMApp.py:10050 FlatCAMApp.py:10082 FlatCAMApp.py:10114 +#: FlatCAMApp.py:10351 FlatCAMApp.py:10394 FlatCAMApp.py:10471 +#: FlatCAMApp.py:10526 FlatCAMBookmark.py:291 FlatCAMBookmark.py:333 +#: FlatCAMDB.py:663 FlatCAMDB.py:709 FlatCAMDB.py:2093 FlatCAMDB.py:2139 +#: ObjectCollection.py:127 flatcamEditors/FlatCAMExcEditor.py:1023 +#: flatcamEditors/FlatCAMExcEditor.py:1091 #: flatcamEditors/FlatCAMTextEditor.py:223 flatcamGUI/FlatCAMGUI.py:3389 #: flatcamGUI/FlatCAMGUI.py:3601 flatcamGUI/FlatCAMGUI.py:3812 #: flatcamTools/ToolFilm.py:754 flatcamTools/ToolFilm.py:900 -#: flatcamTools/ToolImage.py:247 flatcamTools/ToolMove.py:270 +#: flatcamTools/ToolImage.py:247 flatcamTools/ToolMove.py:269 #: flatcamTools/ToolPcbWizard.py:301 flatcamTools/ToolPcbWizard.py:324 #: flatcamTools/ToolQRCode.py:791 flatcamTools/ToolQRCode.py:838 msgid "Cancelled." msgstr "Anulat." -#: FlatCAMApp.py:2985 +#: FlatCAMApp.py:2978 msgid "Open Config file failed." msgstr "Deschiderea fişierului de configurare a eşuat." -#: FlatCAMApp.py:3000 +#: FlatCAMApp.py:2993 msgid "Open Script file failed." msgstr "Deschiderea fişierului Script eşuat." -#: FlatCAMApp.py:3026 +#: FlatCAMApp.py:3019 msgid "Open Excellon file failed." msgstr "Deschiderea fişierului Excellon a eşuat." -#: FlatCAMApp.py:3039 +#: FlatCAMApp.py:3032 msgid "Open GCode file failed." msgstr "Deschiderea fişierului GCode a eşuat." -#: FlatCAMApp.py:3052 +#: FlatCAMApp.py:3045 msgid "Open Gerber file failed." msgstr "Deschiderea fişierului Gerber a eşuat." -#: FlatCAMApp.py:3429 +#: FlatCAMApp.py:3422 msgid "Select a Geometry, Gerber or Excellon Object to edit." msgstr "Selectează un obiect tip Geometrie Gerber sau Excellon pentru editare." -#: FlatCAMApp.py:3444 +#: FlatCAMApp.py:3437 msgid "" "Simultaneous editing of tools geometry in a MultiGeo Geometry is not " "possible.\n" @@ -147,98 +142,98 @@ msgstr "" "MultiGeo nu este posibilă.\n" "Se poate edita numai o singură geometrie de fiecare dată." -#: FlatCAMApp.py:3502 +#: FlatCAMApp.py:3495 msgid "Editor is activated ..." msgstr "Editorul este activ ..." -#: FlatCAMApp.py:3523 +#: FlatCAMApp.py:3516 msgid "Do you want to save the edited object?" msgstr "Vrei sa salvezi obiectul editat?" -#: FlatCAMApp.py:3524 flatcamGUI/FlatCAMGUI.py:2273 +#: FlatCAMApp.py:3517 flatcamGUI/FlatCAMGUI.py:2273 msgid "Close Editor" msgstr "Inchide Editorul" -#: FlatCAMApp.py:3527 FlatCAMApp.py:5169 FlatCAMApp.py:8030 FlatCAMApp.py:8056 -#: FlatCAMApp.py:9305 FlatCAMTranslation.py:108 FlatCAMTranslation.py:199 +#: FlatCAMApp.py:3520 FlatCAMApp.py:5162 FlatCAMApp.py:8024 FlatCAMApp.py:8050 +#: FlatCAMApp.py:9300 FlatCAMTranslation.py:108 FlatCAMTranslation.py:199 #: flatcamGUI/FlatCAMGUI.py:2479 msgid "Yes" msgstr "Da" -#: FlatCAMApp.py:3528 FlatCAMApp.py:5170 FlatCAMApp.py:8031 FlatCAMApp.py:8057 -#: FlatCAMApp.py:9306 FlatCAMTranslation.py:109 FlatCAMTranslation.py:200 +#: FlatCAMApp.py:3521 FlatCAMApp.py:5163 FlatCAMApp.py:8025 FlatCAMApp.py:8051 +#: FlatCAMApp.py:9301 FlatCAMTranslation.py:109 FlatCAMTranslation.py:200 #: flatcamGUI/FlatCAMGUI.py:2480 flatcamGUI/PreferencesUI.py:5443 #: flatcamGUI/PreferencesUI.py:5989 flatcamTools/ToolNCC.py:182 #: flatcamTools/ToolPaint.py:166 msgid "No" msgstr "Nu" -#: FlatCAMApp.py:3529 FlatCAMApp.py:5171 FlatCAMApp.py:6055 FlatCAMApp.py:7006 -#: FlatCAMApp.py:9307 FlatCAMCommon.py:572 FlatCAMCommon.py:2127 +#: FlatCAMApp.py:3522 FlatCAMApp.py:5164 FlatCAMApp.py:6048 FlatCAMApp.py:7000 +#: FlatCAMApp.py:9302 FlatCAMDB.py:128 FlatCAMDB.py:1683 #: flatcamGUI/FlatCAMGUI.py:1332 msgid "Cancel" msgstr "Anuleaza" -#: FlatCAMApp.py:3561 +#: FlatCAMApp.py:3554 msgid "Object empty after edit." msgstr "Obiectul nu are date dupa editare." -#: FlatCAMApp.py:3565 FlatCAMApp.py:3586 FlatCAMApp.py:3608 +#: FlatCAMApp.py:3558 FlatCAMApp.py:3579 FlatCAMApp.py:3601 msgid "Editor exited. Editor content saved." msgstr "Ieşire din Editor. Continuțul editorului este salvat." -#: FlatCAMApp.py:3612 FlatCAMApp.py:3635 FlatCAMApp.py:3653 +#: FlatCAMApp.py:3605 FlatCAMApp.py:3628 FlatCAMApp.py:3646 msgid "Select a Gerber, Geometry or Excellon Object to update." msgstr "" "Selectează un obiect tip Gerber, Geometrie sau Excellon pentru actualizare." -#: FlatCAMApp.py:3615 +#: FlatCAMApp.py:3608 msgid "is updated, returning to App..." msgstr "este actualizat, întoarcere la aplicaţie..." -#: FlatCAMApp.py:3622 +#: FlatCAMApp.py:3615 msgid "Editor exited. Editor content was not saved." msgstr "Ieşire din Editor. Continuțul editorului nu a fost salvat." -#: FlatCAMApp.py:3815 FlatCAMApp.py:3946 FlatCAMApp.py:5018 +#: FlatCAMApp.py:3808 FlatCAMApp.py:3939 FlatCAMApp.py:5011 msgid "Could not load defaults file." msgstr "Nu am putut incărca fişierul cu valori default." -#: FlatCAMApp.py:3827 FlatCAMApp.py:3954 FlatCAMApp.py:5027 +#: FlatCAMApp.py:3820 FlatCAMApp.py:3947 FlatCAMApp.py:5020 msgid "Failed to parse defaults file." msgstr "Parsarea fişierului cu valori default a eșuat." -#: FlatCAMApp.py:3897 FlatCAMApp.py:5119 +#: FlatCAMApp.py:3890 FlatCAMApp.py:5112 msgid "Could not load factory defaults file." msgstr "" "Fişierul cu valori default de fabrică nu a fost posibil să fie deschis." -#: FlatCAMApp.py:3905 FlatCAMApp.py:5129 +#: FlatCAMApp.py:3898 FlatCAMApp.py:5122 msgid "Failed to parse factory defaults file." msgstr "Parsarea fişierului cu valori default de fabrică a eșuat." -#: FlatCAMApp.py:3913 +#: FlatCAMApp.py:3906 msgid "Preferences default values are restored." msgstr "Valorile implicite pt preferințe sunt restabilite." -#: FlatCAMApp.py:3928 FlatCAMApp.py:3932 +#: FlatCAMApp.py:3921 FlatCAMApp.py:3925 msgid "Import FlatCAM Preferences" msgstr "Importă Preferințele FlatCAM" -#: FlatCAMApp.py:3962 +#: FlatCAMApp.py:3955 msgid "Imported Defaults from" msgstr "Valorile default au fost importate din" -#: FlatCAMApp.py:3982 FlatCAMApp.py:3987 +#: FlatCAMApp.py:3975 FlatCAMApp.py:3980 msgid "Export FlatCAM Preferences" msgstr "Exportă Preferințele FlatCAM" -#: FlatCAMApp.py:4002 FlatCAMApp.py:4076 FlatCAMApp.py:10776 -#: FlatCAMApp.py:10824 FlatCAMApp.py:10950 FlatCAMApp.py:11087 -#: FlatCAMCommon.py:379 FlatCAMCommon.py:1115 FlatCAMCommon.py:2545 -#: FlatCAMObj.py:7484 flatcamEditors/FlatCAMTextEditor.py:276 +#: FlatCAMApp.py:3995 FlatCAMApp.py:4069 FlatCAMApp.py:10770 +#: FlatCAMApp.py:10818 FlatCAMApp.py:10943 FlatCAMApp.py:11079 +#: FlatCAMBookmark.py:299 FlatCAMDB.py:671 FlatCAMDB.py:2101 +#: flatcamEditors/FlatCAMTextEditor.py:276 flatcamObjects/FlatCAMCNCJob.py:958 #: flatcamTools/ToolFilm.py:1031 flatcamTools/ToolFilm.py:1212 -#: flatcamTools/ToolSolderPaste.py:1533 +#: flatcamTools/ToolSolderPaste.py:1534 msgid "" "Permission denied, saving not possible.\n" "Most likely another app is holding the file open and not accessible." @@ -246,48 +241,50 @@ msgstr "" "Permisiune refuzată, salvarea nu este posibilă.\n" "Cel mai probabil o altă aplicație ține fișierul deschis și inaccesibil." -#: FlatCAMApp.py:4014 +#: FlatCAMApp.py:4007 msgid "Could not load preferences file." msgstr "Nu am putut incărca fişierul cu valori default." -#: FlatCAMApp.py:4033 FlatCAMApp.py:4100 FlatCAMApp.py:5046 +#: FlatCAMApp.py:4026 FlatCAMApp.py:4093 FlatCAMApp.py:5039 msgid "Failed to write defaults to file." msgstr "Salvarea valorilor default intr-un fişier a eșuat." -#: FlatCAMApp.py:4038 +#: FlatCAMApp.py:4031 msgid "Exported preferences to" msgstr "Exportă Preferințele in" -#: FlatCAMApp.py:4058 FlatCAMApp.py:4063 +#: FlatCAMApp.py:4051 FlatCAMApp.py:4056 msgid "Save to file" msgstr "Salvat in" -#: FlatCAMApp.py:4087 +#: FlatCAMApp.py:4080 msgid "Could not load the file." msgstr "Nu am putut incărca fişierul." -#: FlatCAMApp.py:4103 +#: FlatCAMApp.py:4096 msgid "Exported file to" msgstr "S-a exportat fişierul in" -#: FlatCAMApp.py:4186 +#: FlatCAMApp.py:4179 msgid "Failed to open recent files file for writing." msgstr "" "Deschiderea fişierului cu >fişiere recente< pentru a fi salvat a eșuat." -#: FlatCAMApp.py:4197 +#: FlatCAMApp.py:4190 msgid "Failed to open recent projects file for writing." msgstr "" "Deschiderea fişierului cu >proiecte recente< pentru a fi salvat a eșuat." -#: FlatCAMApp.py:4282 FlatCAMApp.py:11283 FlatCAMApp.py:11342 -#: FlatCAMApp.py:11470 FlatCAMApp.py:12196 FlatCAMObj.py:5605 -#: flatcamEditors/FlatCAMGrbEditor.py:4231 flatcamTools/ToolPcbWizard.py:433 +#: FlatCAMApp.py:4275 FlatCAMApp.py:11275 FlatCAMApp.py:11334 +#: FlatCAMApp.py:11462 FlatCAMApp.py:12193 +#: flatcamEditors/FlatCAMGrbEditor.py:4231 +#: flatcamObjects/FlatCAMGeometry.py:1671 flatcamParsers/ParseExcellon.py:897 +#: flatcamTools/ToolPcbWizard.py:433 msgid "An internal error has occurred. See shell.\n" msgstr "" "A apărut o eroare internă. Verifică in TCL Shell pt mai multe detalii.\n" -#: FlatCAMApp.py:4283 +#: FlatCAMApp.py:4276 #, python-brace-format msgid "" "Object ({kind}) failed because: {error} \n" @@ -296,63 +293,64 @@ msgstr "" "Obiectul ({kind}) a eșuat din cauza: {error} \n" "\n" -#: FlatCAMApp.py:4298 +#: FlatCAMApp.py:4291 msgid "Converting units to " msgstr "Se convertesc unitătile la " -#: FlatCAMApp.py:4411 +#: FlatCAMApp.py:4404 msgid "CREATE A NEW FLATCAM TCL SCRIPT" msgstr "CREAȚI UN SCRIPT FLATCAM TCL NOU" -#: FlatCAMApp.py:4412 +#: FlatCAMApp.py:4405 msgid "TCL Tutorial is here" msgstr "Tutorialul TCL este aici" -#: FlatCAMApp.py:4414 +#: FlatCAMApp.py:4407 msgid "FlatCAM commands list" msgstr "Lista de comenzi FlatCAM" -#: FlatCAMApp.py:4465 FlatCAMApp.py:4471 FlatCAMApp.py:4477 FlatCAMApp.py:4483 -#: FlatCAMApp.py:4489 FlatCAMApp.py:4495 +#: FlatCAMApp.py:4458 FlatCAMApp.py:4464 FlatCAMApp.py:4470 FlatCAMApp.py:4476 +#: FlatCAMApp.py:4482 FlatCAMApp.py:4488 msgid "created/selected" msgstr "creat / selectat" -#: FlatCAMApp.py:4510 FlatCAMApp.py:7092 FlatCAMObj.py:278 FlatCAMObj.py:309 -#: FlatCAMObj.py:325 FlatCAMObj.py:405 flatcamTools/ToolCopperThieving.py:1482 -#: flatcamTools/ToolFiducials.py:809 flatcamTools/ToolMove.py:230 +#: FlatCAMApp.py:4503 FlatCAMApp.py:7086 flatcamObjects/FlatCAMObj.py:248 +#: flatcamObjects/FlatCAMObj.py:279 flatcamObjects/FlatCAMObj.py:295 +#: flatcamObjects/FlatCAMObj.py:375 flatcamTools/ToolCopperThieving.py:1481 +#: flatcamTools/ToolFiducials.py:809 flatcamTools/ToolMove.py:229 #: flatcamTools/ToolQRCode.py:728 msgid "Plotting" msgstr "Se afișeaz" -#: FlatCAMApp.py:4573 flatcamGUI/FlatCAMGUI.py:530 +#: FlatCAMApp.py:4566 flatcamGUI/FlatCAMGUI.py:530 msgid "About FlatCAM" msgstr "Despre FlatCAM" -#: FlatCAMApp.py:4599 +#: FlatCAMApp.py:4592 msgid "2D Computer-Aided Printed Circuit Board Manufacturing" msgstr "Productie Cablaje Imprimate asistate 2D de PC" -#: FlatCAMApp.py:4600 +#: FlatCAMApp.py:4593 msgid "Development" msgstr "Dezvoltare" -#: FlatCAMApp.py:4601 +#: FlatCAMApp.py:4594 msgid "DOWNLOAD" msgstr "DOWNLOAD" -#: FlatCAMApp.py:4602 +#: FlatCAMApp.py:4595 msgid "Issue tracker" msgstr "Raportare probleme" -#: FlatCAMApp.py:4606 FlatCAMApp.py:4948 flatcamGUI/GUIElements.py:2583 +#: FlatCAMApp.py:4599 FlatCAMApp.py:4941 flatcamGUI/GUIElements.py:2583 msgid "Close" msgstr "Închide" -#: FlatCAMApp.py:4621 +#: FlatCAMApp.py:4614 msgid "Licensed under the MIT license" msgstr "Licențiat sub licența MIT" -#: FlatCAMApp.py:4630 +#: FlatCAMApp.py:4623 msgid "" "Permission is hereby granted, free of charge, to any person obtaining a " "copy\n" @@ -405,7 +403,7 @@ msgstr "" "UTILIZAREA SA,\n" "SAU ORICE TRATĂRI ÎN ACEST SOFTWARE." -#: FlatCAMApp.py:4652 +#: FlatCAMApp.py:4645 msgid "" "Some of the icons used are from the following sources:
    Icons by FreepikIcons8Pictograme create de oNline Web Fonts" -#: FlatCAMApp.py:4685 +#: FlatCAMApp.py:4678 msgid "Splash" msgstr "Splash" -#: FlatCAMApp.py:4691 +#: FlatCAMApp.py:4684 msgid "Programmers" msgstr "Programatori" -#: FlatCAMApp.py:4697 +#: FlatCAMApp.py:4690 msgid "Translators" msgstr "Traducatori" -#: FlatCAMApp.py:4703 +#: FlatCAMApp.py:4696 msgid "License" msgstr "Licență" -#: FlatCAMApp.py:4709 +#: FlatCAMApp.py:4702 msgid "Attributions" msgstr "Atribuiri" -#: FlatCAMApp.py:4732 +#: FlatCAMApp.py:4725 msgid "Programmer" msgstr "Programator" -#: FlatCAMApp.py:4733 +#: FlatCAMApp.py:4726 msgid "Status" msgstr "Statut" -#: FlatCAMApp.py:4734 FlatCAMApp.py:4812 +#: FlatCAMApp.py:4727 FlatCAMApp.py:4805 msgid "E-mail" msgstr "E-mail" -#: FlatCAMApp.py:4742 +#: FlatCAMApp.py:4735 msgid "BETA Maintainer >= 2019" msgstr "Programator Beta >= 2019" -#: FlatCAMApp.py:4809 +#: FlatCAMApp.py:4802 msgid "Language" msgstr "Limba" -#: FlatCAMApp.py:4810 +#: FlatCAMApp.py:4803 msgid "Translator" msgstr "Traducător" -#: FlatCAMApp.py:4811 +#: FlatCAMApp.py:4804 msgid "Corrections" msgstr "Corecţii" -#: FlatCAMApp.py:4920 FlatCAMApp.py:4928 FlatCAMApp.py:8075 +#: FlatCAMApp.py:4913 FlatCAMApp.py:4921 FlatCAMApp.py:8069 #: flatcamGUI/FlatCAMGUI.py:512 msgid "Bookmarks Manager" msgstr "Bookmarks Manager" -#: FlatCAMApp.py:4939 +#: FlatCAMApp.py:4932 msgid "" "This entry will resolve to another website if:\n" "\n" @@ -495,28 +493,28 @@ msgstr "" "Dacă nu puteți obține informații despre FlatCAM beta\n" "utilizați linkul canalului YouTube din meniul Ajutor." -#: FlatCAMApp.py:4946 +#: FlatCAMApp.py:4939 msgid "Alternative website" msgstr "Site alternativ" -#: FlatCAMApp.py:5050 FlatCAMApp.py:8039 +#: FlatCAMApp.py:5043 FlatCAMApp.py:8033 msgid "Preferences saved." msgstr "Preferințele au fost salvate." -#: FlatCAMApp.py:5145 +#: FlatCAMApp.py:5138 msgid "Failed to write factory defaults to file." msgstr "" "Salvarea fişierului cu valori default de fabrică intr-un fişier a eșuat." -#: FlatCAMApp.py:5149 +#: FlatCAMApp.py:5142 msgid "Factory defaults saved." msgstr "Valori default de fabrică au fost salvate." -#: FlatCAMApp.py:5159 flatcamGUI/FlatCAMGUI.py:4178 +#: FlatCAMApp.py:5152 flatcamGUI/FlatCAMGUI.py:4178 msgid "Application is saving the project. Please wait ..." msgstr "Aplicația salvează proiectul. Vă rugăm aşteptați ..." -#: FlatCAMApp.py:5164 FlatCAMTranslation.py:194 +#: FlatCAMApp.py:5157 FlatCAMTranslation.py:194 msgid "" "There are files/objects modified in FlatCAM. \n" "Do you want to Save the project?" @@ -524,29 +522,29 @@ msgstr "" "FlatCAM are fişiere/obiecte care au fost modificate. \n" "Dorești să Salvezi proiectul?" -#: FlatCAMApp.py:5167 FlatCAMApp.py:9303 FlatCAMTranslation.py:197 +#: FlatCAMApp.py:5160 FlatCAMApp.py:9298 FlatCAMTranslation.py:197 msgid "Save changes" msgstr "Salvează modificarile" -#: FlatCAMApp.py:5423 +#: FlatCAMApp.py:5416 msgid "Selected Excellon file extensions registered with FlatCAM." msgstr "Extensiile de fișiere Excellon selectate înregistrate cu FlatCAM." -#: FlatCAMApp.py:5445 +#: FlatCAMApp.py:5438 msgid "Selected GCode file extensions registered with FlatCAM." msgstr "Extensii de fișiere GCode selectate înregistrate cu FlatCAM." -#: FlatCAMApp.py:5467 +#: FlatCAMApp.py:5460 msgid "Selected Gerber file extensions registered with FlatCAM." msgstr "Extensii de fișiere Gerber selectate înregistrate cu FlatCAM." -#: FlatCAMApp.py:5655 FlatCAMApp.py:5714 FlatCAMApp.py:5742 +#: FlatCAMApp.py:5648 FlatCAMApp.py:5707 FlatCAMApp.py:5735 msgid "At least two objects are required for join. Objects currently selected" msgstr "" "Cel puțin două obiecte sunt necesare pentru a fi unite. Obiectele selectate " "în prezent" -#: FlatCAMApp.py:5664 +#: FlatCAMApp.py:5657 msgid "" "Failed join. The Geometry objects are of different types.\n" "At least one is MultiGeo type and the other is SingleGeo type. A possibility " @@ -563,48 +561,48 @@ msgstr "" "informatii și rezultatul ar putea să nu fie cel dorit. \n" "Verifică codul G-Code generat." -#: FlatCAMApp.py:5676 FlatCAMApp.py:5686 +#: FlatCAMApp.py:5669 FlatCAMApp.py:5679 msgid "Geometry merging finished" msgstr "Fuziunea geometriei s-a terminat" -#: FlatCAMApp.py:5709 +#: FlatCAMApp.py:5702 msgid "Failed. Excellon joining works only on Excellon objects." msgstr "" "Eșuat. Fuzionarea Excellon functionează doar cu obiecte de tip Excellon." -#: FlatCAMApp.py:5719 +#: FlatCAMApp.py:5712 msgid "Excellon merging finished" msgstr "Fuziunea Excellon a fost terminată" -#: FlatCAMApp.py:5737 +#: FlatCAMApp.py:5730 msgid "Failed. Gerber joining works only on Gerber objects." msgstr "Eșuat. Fuzionarea Gerber functionează doar cu obiecte de tip Gerber ." -#: FlatCAMApp.py:5747 +#: FlatCAMApp.py:5740 msgid "Gerber merging finished" msgstr "Fuziunea Gerber a fost terminată" -#: FlatCAMApp.py:5767 FlatCAMApp.py:5802 +#: FlatCAMApp.py:5760 FlatCAMApp.py:5795 msgid "Failed. Select a Geometry Object and try again." msgstr "Eșuat. Selectează un obiect Geometrie și încearcă din nou." -#: FlatCAMApp.py:5771 FlatCAMApp.py:5807 -msgid "Expected a FlatCAMGeometry, got" +#: FlatCAMApp.py:5764 FlatCAMApp.py:5800 +msgid "Expected a GeometryObject, got" msgstr "Se astepta o Geometrie FlatCAM, s-a primit" -#: FlatCAMApp.py:5784 +#: FlatCAMApp.py:5777 msgid "A Geometry object was converted to MultiGeo type." msgstr "Un obiect Geometrie a fost convertit la tipul MultiGeo." -#: FlatCAMApp.py:5822 +#: FlatCAMApp.py:5815 msgid "A Geometry object was converted to SingleGeo type." msgstr "Un obiect Geometrie a fost convertit la tipul SingleGeo ." -#: FlatCAMApp.py:6049 +#: FlatCAMApp.py:6042 msgid "Toggle Units" msgstr "Comută Unitati" -#: FlatCAMApp.py:6051 +#: FlatCAMApp.py:6044 msgid "" "Changing the units of the project\n" "will scale all objects.\n" @@ -616,45 +614,45 @@ msgstr "" "\n" "Doriți să continuați?" -#: FlatCAMApp.py:6054 FlatCAMApp.py:6928 FlatCAMApp.py:7005 FlatCAMApp.py:9676 -#: FlatCAMApp.py:9690 FlatCAMApp.py:10025 FlatCAMApp.py:10035 +#: FlatCAMApp.py:6047 FlatCAMApp.py:6922 FlatCAMApp.py:6999 FlatCAMApp.py:9673 +#: FlatCAMApp.py:9687 FlatCAMApp.py:10020 FlatCAMApp.py:10030 msgid "Ok" msgstr "Ok" -#: FlatCAMApp.py:6103 +#: FlatCAMApp.py:6096 msgid "Converted units to" msgstr "Unitătile au fost convertite in" -#: FlatCAMApp.py:6743 +#: FlatCAMApp.py:6737 msgid "Detachable Tabs" msgstr "Taburi detașabile" -#: FlatCAMApp.py:6817 FlatCAMApp.py:6861 FlatCAMApp.py:6889 FlatCAMApp.py:7822 -#: FlatCAMApp.py:7890 FlatCAMApp.py:7994 +#: FlatCAMApp.py:6811 FlatCAMApp.py:6855 FlatCAMApp.py:6883 FlatCAMApp.py:7816 +#: FlatCAMApp.py:7884 FlatCAMApp.py:7988 msgid "Preferences" msgstr "Preferințe" -#: FlatCAMApp.py:6823 +#: FlatCAMApp.py:6817 msgid "Preferences applied." msgstr "Preferințele au fost aplicate." -#: FlatCAMApp.py:6894 +#: FlatCAMApp.py:6888 msgid "Preferences closed without saving." msgstr "Tab-ul Preferințe a fost închis fără a salva." -#: FlatCAMApp.py:6917 flatcamTools/ToolNCC.py:932 flatcamTools/ToolNCC.py:1426 +#: FlatCAMApp.py:6911 flatcamTools/ToolNCC.py:932 flatcamTools/ToolNCC.py:1426 #: flatcamTools/ToolPaint.py:858 flatcamTools/ToolSolderPaste.py:568 #: flatcamTools/ToolSolderPaste.py:893 msgid "Please enter a tool diameter with non-zero value, in Float format." msgstr "" "Introduceti un diametru al uneltei valid: valoare ne-nula in format Real." -#: FlatCAMApp.py:6921 flatcamTools/ToolNCC.py:936 flatcamTools/ToolPaint.py:862 +#: FlatCAMApp.py:6915 flatcamTools/ToolNCC.py:936 flatcamTools/ToolPaint.py:862 #: flatcamTools/ToolSolderPaste.py:572 msgid "Adding Tool cancelled" msgstr "Adăugarea unei unelte anulată" -#: FlatCAMApp.py:6924 +#: FlatCAMApp.py:6918 msgid "" "Adding Tool works only when Advanced is checked.\n" "Go to Preferences -> General - Show Advanced Options." @@ -662,11 +660,11 @@ msgstr "" "Adăugarea de unelte noi functionează doar in modul Avansat.\n" "Pentru aceasta mergi in Preferințe -> General - Activează Modul Avansat." -#: FlatCAMApp.py:7000 +#: FlatCAMApp.py:6994 msgid "Delete objects" msgstr "Șterge obiectele" -#: FlatCAMApp.py:7003 +#: FlatCAMApp.py:6997 msgid "" "Are you sure you want to permanently delete\n" "the selected objects?" @@ -674,57 +672,57 @@ msgstr "" "Sigur doriți să ștergeți definitiv\n" "obiectele selectate?" -#: FlatCAMApp.py:7041 +#: FlatCAMApp.py:7035 msgid "Object(s) deleted" msgstr "Obiect(ele) șters(e)" -#: FlatCAMApp.py:7045 FlatCAMApp.py:7200 flatcamTools/ToolDblSided.py:819 +#: FlatCAMApp.py:7039 FlatCAMApp.py:7194 flatcamTools/ToolDblSided.py:818 msgid "Failed. No object(s) selected..." msgstr "Eșuat. Nici-un obiect nu este selectat." -#: FlatCAMApp.py:7047 +#: FlatCAMApp.py:7041 msgid "Save the work in Editor and try again ..." msgstr "Salvează continutul din Editor și încearcă din nou." -#: FlatCAMApp.py:7076 +#: FlatCAMApp.py:7070 msgid "Object deleted" msgstr "Obiectul este șters" -#: FlatCAMApp.py:7103 +#: FlatCAMApp.py:7097 msgid "Click to set the origin ..." msgstr "Click pentru a seta originea..." -#: FlatCAMApp.py:7125 +#: FlatCAMApp.py:7119 msgid "Setting Origin..." msgstr "Setează Originea..." -#: FlatCAMApp.py:7138 FlatCAMApp.py:7240 +#: FlatCAMApp.py:7132 FlatCAMApp.py:7234 msgid "Origin set" msgstr "Originea a fost setată" -#: FlatCAMApp.py:7155 +#: FlatCAMApp.py:7149 msgid "Origin coordinates specified but incomplete." msgstr "Coordonate pentru origine specificate, dar incomplete." -#: FlatCAMApp.py:7196 +#: FlatCAMApp.py:7190 msgid "Moving to Origin..." msgstr "Deplasare către Origine..." -#: FlatCAMApp.py:7277 +#: FlatCAMApp.py:7271 msgid "Jump to ..." msgstr "Sari la ..." -#: FlatCAMApp.py:7278 +#: FlatCAMApp.py:7272 msgid "Enter the coordinates in format X,Y:" msgstr "Introduceți coordonatele in format X,Y:" -#: FlatCAMApp.py:7288 +#: FlatCAMApp.py:7282 msgid "Wrong coordinates. Enter coordinates in format: X,Y" msgstr "Coordonate gresite. Introduceți coordonatele in format X,Y" -#: FlatCAMApp.py:7366 FlatCAMApp.py:7515 -#: flatcamEditors/FlatCAMExcEditor.py:3622 -#: flatcamEditors/FlatCAMExcEditor.py:3630 +#: FlatCAMApp.py:7360 FlatCAMApp.py:7509 +#: flatcamEditors/FlatCAMExcEditor.py:3624 +#: flatcamEditors/FlatCAMExcEditor.py:3632 #: flatcamEditors/FlatCAMGeoEditor.py:4349 #: flatcamEditors/FlatCAMGeoEditor.py:4363 #: flatcamEditors/FlatCAMGrbEditor.py:1085 @@ -738,80 +736,80 @@ msgstr "Coordonate gresite. Introduceți coordonatele in format X,Y" msgid "Done." msgstr "Executat." -#: FlatCAMApp.py:7381 FlatCAMApp.py:9672 FlatCAMApp.py:9768 FlatCAMApp.py:9810 -#: FlatCAMApp.py:9851 FlatCAMApp.py:9892 FlatCAMApp.py:9933 FlatCAMApp.py:9977 -#: FlatCAMApp.py:10021 FlatCAMApp.py:10510 FlatCAMApp.py:10514 +#: FlatCAMApp.py:7375 FlatCAMApp.py:9669 FlatCAMApp.py:9764 FlatCAMApp.py:9805 +#: FlatCAMApp.py:9846 FlatCAMApp.py:9887 FlatCAMApp.py:9928 FlatCAMApp.py:9972 +#: FlatCAMApp.py:10016 FlatCAMApp.py:10504 FlatCAMApp.py:10508 #: flatcamTools/ToolProperties.py:116 msgid "No object selected." msgstr "Nici-un obiect nu este selectat." -#: FlatCAMApp.py:7400 +#: FlatCAMApp.py:7394 msgid "Bottom-Left" msgstr "Stânga jos" -#: FlatCAMApp.py:7401 flatcamGUI/PreferencesUI.py:8111 +#: FlatCAMApp.py:7395 flatcamGUI/PreferencesUI.py:8111 #: flatcamTools/ToolCalibration.py:159 msgid "Top-Left" msgstr "Stânga-sus" -#: FlatCAMApp.py:7402 flatcamGUI/PreferencesUI.py:8112 +#: FlatCAMApp.py:7396 flatcamGUI/PreferencesUI.py:8112 #: flatcamTools/ToolCalibration.py:160 msgid "Bottom-Right" msgstr "Dreapta-jos" -#: FlatCAMApp.py:7403 +#: FlatCAMApp.py:7397 msgid "Top-Right" msgstr "Dreapta-sus" -#: FlatCAMApp.py:7404 flatcamGUI/ObjectUI.py:2624 +#: FlatCAMApp.py:7398 flatcamGUI/ObjectUI.py:2625 msgid "Center" msgstr "Centru" -#: FlatCAMApp.py:7424 +#: FlatCAMApp.py:7418 msgid "Locate ..." msgstr "Localizează ..." -#: FlatCAMApp.py:7685 FlatCAMApp.py:7762 +#: FlatCAMApp.py:7679 FlatCAMApp.py:7756 msgid "No object is selected. Select an object and try again." msgstr "" "Nici-un obiect nu este selectat. Selectează un obiect și incearcă din nou." -#: FlatCAMApp.py:7788 +#: FlatCAMApp.py:7782 msgid "" "Aborting. The current task will be gracefully closed as soon as possible..." msgstr "Intrerup. Taskul curent va fi închis cât mai curând posibil ..." -#: FlatCAMApp.py:7794 +#: FlatCAMApp.py:7788 msgid "The current task was gracefully closed on user request..." msgstr "Taskul curent a fost închis la cererea utilizatorului ..." -#: FlatCAMApp.py:7887 +#: FlatCAMApp.py:7881 msgid "Preferences edited but not saved." msgstr "Preferințele au fost editate dar nu au fost salvate." -#: FlatCAMApp.py:7904 FlatCAMApp.py:7932 FlatCAMApp.py:7959 FlatCAMApp.py:7978 -#: FlatCAMApp.py:8045 FlatCAMCommon.py:1182 FlatCAMCommon.py:1357 -#: FlatCAMCommon.py:2612 FlatCAMCommon.py:2820 FlatCAMObj.py:4798 +#: FlatCAMApp.py:7898 FlatCAMApp.py:7926 FlatCAMApp.py:7953 FlatCAMApp.py:7972 +#: FlatCAMApp.py:8039 FlatCAMDB.py:738 FlatCAMDB.py:913 FlatCAMDB.py:2168 +#: FlatCAMDB.py:2378 flatcamObjects/FlatCAMGeometry.py:862 #: flatcamTools/ToolNCC.py:3958 flatcamTools/ToolNCC.py:4042 #: flatcamTools/ToolPaint.py:3548 flatcamTools/ToolPaint.py:3633 msgid "Tools Database" msgstr "Baza de Date Unelte" -#: FlatCAMApp.py:7956 +#: FlatCAMApp.py:7950 msgid "Tools in Tools Database edited but not saved." msgstr "Uneltele din Baza de date au fost editate dar nu au fost salvate." -#: FlatCAMApp.py:7982 flatcamTools/ToolNCC.py:3965 +#: FlatCAMApp.py:7976 flatcamTools/ToolNCC.py:3965 #: flatcamTools/ToolPaint.py:3555 msgid "Tool from DB added in Tool Table." msgstr "Unealtă din Baza de date adăugată in Tabela de Unelte." -#: FlatCAMApp.py:7984 +#: FlatCAMApp.py:7978 msgid "Adding tool from DB is not allowed for this object." msgstr "" "Adaugarea unei unelte din Baza de date nu este permisa pt acest obiect." -#: FlatCAMApp.py:8025 +#: FlatCAMApp.py:8019 msgid "" "One or more values are changed.\n" "Do you want to save the Preferences?" @@ -819,11 +817,11 @@ msgstr "" "Una sau mai multe valori au fost schimbate.\n" "Dorești să salvezi Preferințele?" -#: FlatCAMApp.py:8027 flatcamGUI/FlatCAMGUI.py:291 +#: FlatCAMApp.py:8021 flatcamGUI/FlatCAMGUI.py:291 msgid "Save Preferences" msgstr "Salvează Pref" -#: FlatCAMApp.py:8051 +#: FlatCAMApp.py:8045 msgid "" "One or more Tools are edited.\n" "Do you want to update the Tools Database?" @@ -831,174 +829,173 @@ msgstr "" "Unul sau mai multe Unelte sunt editate.\n" "Doriți să actualizați baza de date a Uneltelor?" -#: FlatCAMApp.py:8053 +#: FlatCAMApp.py:8047 msgid "Save Tools Database" msgstr "Salvează baza de date Unelte" -#: FlatCAMApp.py:8072 FlatCAMApp.py:10259 FlatCAMObj.py:7089 +#: FlatCAMApp.py:8066 FlatCAMApp.py:10254 flatcamObjects/FlatCAMCNCJob.py:562 msgid "Code Editor" msgstr "Editor Cod" -#: FlatCAMApp.py:8094 +#: FlatCAMApp.py:8088 msgid "No object selected to Flip on Y axis." msgstr "Nu sete nici-un obiect selectat pentru oglindire pe axa Y." -#: FlatCAMApp.py:8120 +#: FlatCAMApp.py:8114 msgid "Flip on Y axis done." msgstr "Oglindire pe axa Y executată." -#: FlatCAMApp.py:8122 FlatCAMApp.py:8170 +#: FlatCAMApp.py:8116 FlatCAMApp.py:8164 #: flatcamEditors/FlatCAMGrbEditor.py:5893 msgid "Flip action was not executed." msgstr "Acțiunea de Oglindire nu a fost executată." -#: FlatCAMApp.py:8142 +#: FlatCAMApp.py:8136 msgid "No object selected to Flip on X axis." msgstr "Nu este nici-un obiect selectat pentru oglindire pe axa X." -#: FlatCAMApp.py:8168 +#: FlatCAMApp.py:8162 msgid "Flip on X axis done." msgstr "Oglindirea pe axa X executată." -#: FlatCAMApp.py:8190 +#: FlatCAMApp.py:8184 msgid "No object selected to Rotate." msgstr "Nici-un obiect selectat pentru Rotaţie." -#: FlatCAMApp.py:8193 FlatCAMApp.py:8246 FlatCAMApp.py:8285 +#: FlatCAMApp.py:8187 FlatCAMApp.py:8240 FlatCAMApp.py:8279 msgid "Transform" msgstr "Transformare" -#: FlatCAMApp.py:8193 FlatCAMApp.py:8246 FlatCAMApp.py:8285 +#: FlatCAMApp.py:8187 FlatCAMApp.py:8240 FlatCAMApp.py:8279 msgid "Enter the Angle value:" msgstr "Introduceți valoaea Unghiului:" -#: FlatCAMApp.py:8224 +#: FlatCAMApp.py:8218 msgid "Rotation done." msgstr "Rotaţie executată." -#: FlatCAMApp.py:8226 +#: FlatCAMApp.py:8220 msgid "Rotation movement was not executed." msgstr "Mișcarea de rotație nu a fost executată." -#: FlatCAMApp.py:8244 +#: FlatCAMApp.py:8238 msgid "No object selected to Skew/Shear on X axis." msgstr "Nici-un obiect nu este selectat pentru Deformare pe axa X." -#: FlatCAMApp.py:8266 +#: FlatCAMApp.py:8260 msgid "Skew on X axis done." msgstr "Deformare pe axa X terminată." -#: FlatCAMApp.py:8283 +#: FlatCAMApp.py:8277 msgid "No object selected to Skew/Shear on Y axis." msgstr "Nici-un obiect nu este selectat pentru Deformare pe axa Y." -#: FlatCAMApp.py:8305 +#: FlatCAMApp.py:8299 msgid "Skew on Y axis done." msgstr "Deformare pe axa Y terminată." -#: FlatCAMApp.py:8458 FlatCAMApp.py:8505 flatcamGUI/FlatCAMGUI.py:488 +#: FlatCAMApp.py:8450 FlatCAMApp.py:8497 flatcamGUI/FlatCAMGUI.py:488 #: flatcamGUI/FlatCAMGUI.py:1713 msgid "Select All" msgstr "Selectează toate" -#: FlatCAMApp.py:8462 FlatCAMApp.py:8509 flatcamGUI/FlatCAMGUI.py:490 +#: FlatCAMApp.py:8454 FlatCAMApp.py:8501 flatcamGUI/FlatCAMGUI.py:490 msgid "Deselect All" msgstr "Deselectează toate" -#: FlatCAMApp.py:8525 +#: FlatCAMApp.py:8517 msgid "All objects are selected." msgstr "Totate obiectele sunt selectate." -#: FlatCAMApp.py:8535 +#: FlatCAMApp.py:8527 msgid "Objects selection is cleared." msgstr "Nici-un obiect nu este selectat." -#: FlatCAMApp.py:8555 flatcamGUI/FlatCAMGUI.py:1706 +#: FlatCAMApp.py:8547 flatcamGUI/FlatCAMGUI.py:1706 msgid "Grid On/Off" msgstr "Grid On/Off" -#: FlatCAMApp.py:8567 flatcamEditors/FlatCAMGeoEditor.py:940 +#: FlatCAMApp.py:8559 flatcamEditors/FlatCAMGeoEditor.py:939 #: flatcamEditors/FlatCAMGrbEditor.py:2580 -#: flatcamEditors/FlatCAMGrbEditor.py:5475 flatcamGUI/ObjectUI.py:1593 -#: flatcamTools/ToolDblSided.py:193 flatcamTools/ToolDblSided.py:426 +#: flatcamEditors/FlatCAMGrbEditor.py:5475 flatcamGUI/ObjectUI.py:1594 +#: flatcamTools/ToolDblSided.py:192 flatcamTools/ToolDblSided.py:425 #: flatcamTools/ToolNCC.py:294 flatcamTools/ToolNCC.py:631 #: flatcamTools/ToolPaint.py:277 flatcamTools/ToolPaint.py:676 -#: flatcamTools/ToolSolderPaste.py:123 flatcamTools/ToolSolderPaste.py:597 -#: flatcamTools/ToolTransform.py:479 +#: flatcamTools/ToolSolderPaste.py:122 flatcamTools/ToolSolderPaste.py:597 +#: flatcamTools/ToolTransform.py:478 msgid "Add" msgstr "Adaugă" -#: FlatCAMApp.py:8569 FlatCAMObj.py:4416 -#: flatcamEditors/FlatCAMGrbEditor.py:2585 +#: FlatCAMApp.py:8561 flatcamEditors/FlatCAMGrbEditor.py:2585 #: flatcamEditors/FlatCAMGrbEditor.py:2733 flatcamGUI/FlatCAMGUI.py:736 #: flatcamGUI/FlatCAMGUI.py:1059 flatcamGUI/FlatCAMGUI.py:2126 #: flatcamGUI/FlatCAMGUI.py:2269 flatcamGUI/FlatCAMGUI.py:2733 -#: flatcamGUI/ObjectUI.py:1621 flatcamTools/ToolNCC.py:316 -#: flatcamTools/ToolNCC.py:637 flatcamTools/ToolPaint.py:299 -#: flatcamTools/ToolPaint.py:682 flatcamTools/ToolSolderPaste.py:129 -#: flatcamTools/ToolSolderPaste.py:600 +#: flatcamGUI/ObjectUI.py:1622 flatcamObjects/FlatCAMGeometry.py:480 +#: flatcamTools/ToolNCC.py:316 flatcamTools/ToolNCC.py:637 +#: flatcamTools/ToolPaint.py:299 flatcamTools/ToolPaint.py:682 +#: flatcamTools/ToolSolderPaste.py:128 flatcamTools/ToolSolderPaste.py:600 msgid "Delete" msgstr "Șterge" -#: FlatCAMApp.py:8582 +#: FlatCAMApp.py:8577 msgid "New Grid ..." msgstr "Grid nou ..." -#: FlatCAMApp.py:8583 +#: FlatCAMApp.py:8578 msgid "Enter a Grid Value:" msgstr "Introduceti of valoare pt Grid:" -#: FlatCAMApp.py:8591 FlatCAMApp.py:8618 +#: FlatCAMApp.py:8586 FlatCAMApp.py:8613 msgid "Please enter a grid value with non-zero value, in Float format." msgstr "Introduceți o valoare pentru Grila ne-nula și in format Real." -#: FlatCAMApp.py:8597 +#: FlatCAMApp.py:8592 msgid "New Grid added" msgstr "Grid nou" -#: FlatCAMApp.py:8600 +#: FlatCAMApp.py:8595 msgid "Grid already exists" msgstr "Grila există deja" -#: FlatCAMApp.py:8603 +#: FlatCAMApp.py:8598 msgid "Adding New Grid cancelled" msgstr "Adăugarea unei valori de Grilă a fost anulată" -#: FlatCAMApp.py:8625 +#: FlatCAMApp.py:8620 msgid " Grid Value does not exist" msgstr " Valoarea Grilei nu există" -#: FlatCAMApp.py:8628 +#: FlatCAMApp.py:8623 msgid "Grid Value deleted" msgstr "Valoarea Grila a fost stearsă" -#: FlatCAMApp.py:8631 +#: FlatCAMApp.py:8626 msgid "Delete Grid value cancelled" msgstr "Ștergerea unei valori de Grilă a fost anulată" -#: FlatCAMApp.py:8637 +#: FlatCAMApp.py:8632 msgid "Key Shortcut List" msgstr "Lista de shortcut-uri" -#: FlatCAMApp.py:8671 +#: FlatCAMApp.py:8666 msgid " No object selected to copy it's name" msgstr " Nici-un obiect nu este selectat pentru i se copia valoarea" -#: FlatCAMApp.py:8675 +#: FlatCAMApp.py:8670 msgid "Name copied on clipboard ..." msgstr "Numele a fost copiat pe Clipboard ..." -#: FlatCAMApp.py:8888 flatcamEditors/FlatCAMGrbEditor.py:4421 +#: FlatCAMApp.py:8883 flatcamEditors/FlatCAMGrbEditor.py:4421 msgid "Coordinates copied to clipboard." msgstr "Coordonatele au fost copiate in clipboard." -#: FlatCAMApp.py:9127 FlatCAMApp.py:9133 FlatCAMApp.py:9139 FlatCAMApp.py:9145 -#: ObjectCollection.py:911 ObjectCollection.py:917 ObjectCollection.py:923 -#: ObjectCollection.py:929 ObjectCollection.py:935 ObjectCollection.py:941 +#: FlatCAMApp.py:9122 FlatCAMApp.py:9128 FlatCAMApp.py:9134 FlatCAMApp.py:9140 +#: ObjectCollection.py:923 ObjectCollection.py:929 ObjectCollection.py:935 +#: ObjectCollection.py:941 ObjectCollection.py:947 ObjectCollection.py:953 msgid "selected" msgstr "selectat" -#: FlatCAMApp.py:9300 +#: FlatCAMApp.py:9295 msgid "" "There are files/objects opened in FlatCAM.\n" "Creating a New project will delete them.\n" @@ -1008,17 +1005,17 @@ msgstr "" "Crearea unui nou Proiect le va șterge..\n" "Doriti să Salvati proiectul curentt?" -#: FlatCAMApp.py:9321 +#: FlatCAMApp.py:9316 msgid "New Project created" msgstr "Un nou Proiect a fost creat" -#: FlatCAMApp.py:9468 FlatCAMApp.py:9472 flatcamGUI/FlatCAMGUI.py:821 +#: FlatCAMApp.py:9464 FlatCAMApp.py:9468 flatcamGUI/FlatCAMGUI.py:821 #: flatcamGUI/FlatCAMGUI.py:2504 msgid "Open Gerber" msgstr "Încarcă Gerber" -#: FlatCAMApp.py:9477 FlatCAMApp.py:9514 FlatCAMApp.py:9556 FlatCAMApp.py:9625 -#: FlatCAMApp.py:10378 FlatCAMApp.py:11553 FlatCAMApp.py:11614 +#: FlatCAMApp.py:9473 FlatCAMApp.py:9510 FlatCAMApp.py:9552 FlatCAMApp.py:9622 +#: FlatCAMApp.py:10373 FlatCAMApp.py:11545 FlatCAMApp.py:11606 msgid "" "Canvas initialization started.\n" "Canvas initialization finished in" @@ -1026,254 +1023,255 @@ msgstr "" "FlatCAM se inițializează ...\n" "Initializarea spațiului de afisare s-a terminat in" -#: FlatCAMApp.py:9479 +#: FlatCAMApp.py:9475 msgid "Opening Gerber file." msgstr "Se incarcă un fişier Gerber." -#: FlatCAMApp.py:9506 FlatCAMApp.py:9510 flatcamGUI/FlatCAMGUI.py:823 +#: FlatCAMApp.py:9502 FlatCAMApp.py:9506 flatcamGUI/FlatCAMGUI.py:823 #: flatcamGUI/FlatCAMGUI.py:2506 msgid "Open Excellon" msgstr "Încarcă Excellon" -#: FlatCAMApp.py:9516 +#: FlatCAMApp.py:9512 msgid "Opening Excellon file." msgstr "Se incarcă un fişier Excellon." -#: FlatCAMApp.py:9547 FlatCAMApp.py:9551 +#: FlatCAMApp.py:9543 FlatCAMApp.py:9547 msgid "Open G-Code" msgstr "Încarcă G-Code" -#: FlatCAMApp.py:9558 +#: FlatCAMApp.py:9554 msgid "Opening G-Code file." msgstr "Se incarcă un fişier G-Code." -#: FlatCAMApp.py:9581 FlatCAMApp.py:9584 flatcamGUI/FlatCAMGUI.py:1715 +#: FlatCAMApp.py:9577 FlatCAMApp.py:9580 flatcamGUI/FlatCAMGUI.py:1715 msgid "Open Project" msgstr "Încarcă Project" -#: FlatCAMApp.py:9616 FlatCAMApp.py:9620 +#: FlatCAMApp.py:9613 FlatCAMApp.py:9617 msgid "Open HPGL2" msgstr "Încarcă HPGL2" -#: FlatCAMApp.py:9627 +#: FlatCAMApp.py:9624 msgid "Opening HPGL2 file." msgstr "Se incarcă un fişier HPGL2." -#: FlatCAMApp.py:9650 FlatCAMApp.py:9653 +#: FlatCAMApp.py:9647 FlatCAMApp.py:9650 msgid "Open Configuration File" msgstr "Încarcă un fişier de Configurare" -#: FlatCAMApp.py:9673 FlatCAMApp.py:10022 +#: FlatCAMApp.py:9670 FlatCAMApp.py:10017 msgid "Please Select a Geometry object to export" msgstr "Selectează un obiect Geometrie pentru export" -#: FlatCAMApp.py:9687 +#: FlatCAMApp.py:9684 msgid "Only Geometry, Gerber and CNCJob objects can be used." msgstr "Doar obiectele Geometrie, Gerber și CNCJob pot fi folosite." -#: FlatCAMApp.py:9700 FlatCAMApp.py:9704 flatcamTools/ToolQRCode.py:829 +#: FlatCAMApp.py:9697 FlatCAMApp.py:9701 flatcamTools/ToolQRCode.py:829 #: flatcamTools/ToolQRCode.py:833 msgid "Export SVG" msgstr "Exporta SVG" -#: FlatCAMApp.py:9730 +#: FlatCAMApp.py:9726 msgid "Data must be a 3D array with last dimension 3 or 4" msgstr "" "Datele trebuie să fie organizate intr-o arie 3D cu ultima dimensiune cu " "valoarea 3 sau 4" -#: FlatCAMApp.py:9736 FlatCAMApp.py:9740 +#: FlatCAMApp.py:9732 FlatCAMApp.py:9736 msgid "Export PNG Image" msgstr "Exporta imagine PNG" -#: FlatCAMApp.py:9774 FlatCAMApp.py:9982 +#: FlatCAMApp.py:9769 FlatCAMApp.py:9977 msgid "Failed. Only Gerber objects can be saved as Gerber files..." msgstr "Eșuat. Doar obiectele tip Gerber pot fi salvate ca fişiere Gerber..." -#: FlatCAMApp.py:9786 +#: FlatCAMApp.py:9781 msgid "Save Gerber source file" msgstr "Salvează codul sursa Gerber ca fişier" -#: FlatCAMApp.py:9815 +#: FlatCAMApp.py:9810 msgid "Failed. Only Script objects can be saved as TCL Script files..." msgstr "" "Eșuat. Doar obiectele tip Script pot fi salvate ca fişiere TCL Script..." -#: FlatCAMApp.py:9827 +#: FlatCAMApp.py:9822 msgid "Save Script source file" msgstr "Salvează codul sursa Script ca fişier" -#: FlatCAMApp.py:9856 +#: FlatCAMApp.py:9851 msgid "Failed. Only Document objects can be saved as Document files..." msgstr "" "Eșuat. Doar obiectele tip Document pot fi salvate ca fişiere Document ..." -#: FlatCAMApp.py:9868 +#: FlatCAMApp.py:9863 msgid "Save Document source file" msgstr "Salvează codul sursa Document ca fişier" -#: FlatCAMApp.py:9897 FlatCAMApp.py:9938 FlatCAMApp.py:10863 +#: FlatCAMApp.py:9892 FlatCAMApp.py:9933 FlatCAMApp.py:10856 msgid "Failed. Only Excellon objects can be saved as Excellon files..." msgstr "" "Eșuat. Doar obiectele tip Excellon pot fi salvate ca fişiere Excellon ..." -#: FlatCAMApp.py:9905 FlatCAMApp.py:9909 +#: FlatCAMApp.py:9900 FlatCAMApp.py:9904 msgid "Save Excellon source file" msgstr "Salvează codul sursa Excellon ca fişier" -#: FlatCAMApp.py:9946 FlatCAMApp.py:9950 +#: FlatCAMApp.py:9941 FlatCAMApp.py:9945 msgid "Export Excellon" msgstr "Exportă Excellon" -#: FlatCAMApp.py:9990 FlatCAMApp.py:9994 +#: FlatCAMApp.py:9985 FlatCAMApp.py:9989 msgid "Export Gerber" msgstr "Exportă Gerber" -#: FlatCAMApp.py:10032 +#: FlatCAMApp.py:10027 msgid "Only Geometry objects can be used." msgstr "Doar obiecte tip Geometrie pot fi folosite." -#: FlatCAMApp.py:10046 FlatCAMApp.py:10050 +#: FlatCAMApp.py:10041 FlatCAMApp.py:10045 msgid "Export DXF" msgstr "Exportă DXF" -#: FlatCAMApp.py:10075 FlatCAMApp.py:10078 +#: FlatCAMApp.py:10070 FlatCAMApp.py:10073 msgid "Import SVG" msgstr "Importă SVG" -#: FlatCAMApp.py:10106 FlatCAMApp.py:10110 +#: FlatCAMApp.py:10101 FlatCAMApp.py:10105 msgid "Import DXF" msgstr "Importa DXF" -#: FlatCAMApp.py:10161 +#: FlatCAMApp.py:10156 msgid "Viewing the source code of the selected object." msgstr "Vizualizarea codului sursă a obiectului selectat." -#: FlatCAMApp.py:10162 FlatCAMObj.py:7075 FlatCAMObj.py:7852 +#: FlatCAMApp.py:10157 flatcamObjects/FlatCAMCNCJob.py:548 +#: flatcamObjects/FlatCAMScript.py:133 msgid "Loading..." msgstr "Se incarcă..." -#: FlatCAMApp.py:10168 FlatCAMApp.py:10172 +#: FlatCAMApp.py:10163 FlatCAMApp.py:10167 msgid "Select an Gerber or Excellon file to view it's source file." msgstr "Selectati un obiect Gerber sau Excellon pentru a-i vedea codul sursa." -#: FlatCAMApp.py:10186 +#: FlatCAMApp.py:10181 msgid "Source Editor" msgstr "Editor Cod Sursă" -#: FlatCAMApp.py:10226 FlatCAMApp.py:10233 +#: FlatCAMApp.py:10221 FlatCAMApp.py:10228 msgid "There is no selected object for which to see it's source file code." msgstr "Nici-un obiect selectat pentru a-i vedea codul sursa." -#: FlatCAMApp.py:10245 +#: FlatCAMApp.py:10240 msgid "Failed to load the source code for the selected object" msgstr "Codul sursă pentru obiectul selectat nu a putut fi încărcat" -#: FlatCAMApp.py:10281 +#: FlatCAMApp.py:10276 msgid "Go to Line ..." msgstr "Mergi la Linia ..." -#: FlatCAMApp.py:10282 +#: FlatCAMApp.py:10277 msgid "Line:" msgstr "Linia:" -#: FlatCAMApp.py:10311 +#: FlatCAMApp.py:10306 msgid "New TCL script file created in Code Editor." msgstr "Un nou script TCL a fost creat in Editorul de cod." -#: FlatCAMApp.py:10350 FlatCAMApp.py:10352 +#: FlatCAMApp.py:10345 FlatCAMApp.py:10347 msgid "Open TCL script" msgstr "Încarcă TCL script" -#: FlatCAMApp.py:10380 -msgid "Executing FlatCAMScript file." +#: FlatCAMApp.py:10375 +msgid "Executing ScriptObject file." msgstr "Se executa un fisier script FlatCAM." -#: FlatCAMApp.py:10388 FlatCAMApp.py:10391 +#: FlatCAMApp.py:10383 FlatCAMApp.py:10386 msgid "Run TCL script" msgstr "Ruleaza TCL script" -#: FlatCAMApp.py:10415 +#: FlatCAMApp.py:10409 msgid "TCL script file opened in Code Editor and executed." msgstr "Un fisier script TCL a fost deschis in Editorul de cod si executat." -#: FlatCAMApp.py:10466 FlatCAMApp.py:10472 +#: FlatCAMApp.py:10460 FlatCAMApp.py:10466 msgid "Save Project As ..." msgstr "Salvează Proiectul ca ..." -#: FlatCAMApp.py:10468 flatcamGUI/FlatCAMGUI.py:1119 +#: FlatCAMApp.py:10462 flatcamGUI/FlatCAMGUI.py:1119 #: flatcamGUI/FlatCAMGUI.py:2161 msgid "Project" msgstr "Proiect" -#: FlatCAMApp.py:10507 +#: FlatCAMApp.py:10501 msgid "FlatCAM objects print" msgstr "Tipărirea obiectelor FlatCAM" -#: FlatCAMApp.py:10520 FlatCAMApp.py:10527 +#: FlatCAMApp.py:10514 FlatCAMApp.py:10521 msgid "Save Object as PDF ..." msgstr "Salvați obiectul în format PDF ..." -#: FlatCAMApp.py:10536 +#: FlatCAMApp.py:10530 msgid "Printing PDF ... Please wait." msgstr "Se tipărește PDF ... Vă rugăm să așteptați." -#: FlatCAMApp.py:10715 +#: FlatCAMApp.py:10709 msgid "PDF file saved to" msgstr "Fișierul PDF salvat în" -#: FlatCAMApp.py:10740 +#: FlatCAMApp.py:10734 msgid "Exporting SVG" msgstr "SVG in curs de export" -#: FlatCAMApp.py:10783 +#: FlatCAMApp.py:10777 msgid "SVG file exported to" msgstr "Fişier SVG exportat in" -#: FlatCAMApp.py:10809 +#: FlatCAMApp.py:10803 msgid "" "Save cancelled because source file is empty. Try to export the Gerber file." msgstr "" "Salvare anulată deoarece fișierul sursă este gol. Încercați să exportați " "fișierul Gerber." -#: FlatCAMApp.py:10957 +#: FlatCAMApp.py:10950 msgid "Excellon file exported to" msgstr "Fişierul Excellon exportat in" -#: FlatCAMApp.py:10966 +#: FlatCAMApp.py:10959 msgid "Exporting Excellon" msgstr "Excellon in curs de export" -#: FlatCAMApp.py:10971 FlatCAMApp.py:10978 +#: FlatCAMApp.py:10964 FlatCAMApp.py:10971 msgid "Could not export Excellon file." msgstr "Fişierul Excellon nu a fost posibil să fie exportat." -#: FlatCAMApp.py:11094 +#: FlatCAMApp.py:11086 msgid "Gerber file exported to" msgstr "Fişier Gerber exportat in" -#: FlatCAMApp.py:11102 +#: FlatCAMApp.py:11094 msgid "Exporting Gerber" msgstr "Gerber in curs de export" -#: FlatCAMApp.py:11107 FlatCAMApp.py:11114 +#: FlatCAMApp.py:11099 FlatCAMApp.py:11106 msgid "Could not export Gerber file." msgstr "Fişierul Gerber nu a fost posibil să fie exportat." -#: FlatCAMApp.py:11149 +#: FlatCAMApp.py:11141 msgid "DXF file exported to" msgstr "Fişierul DXF exportat in" -#: FlatCAMApp.py:11155 +#: FlatCAMApp.py:11147 msgid "Exporting DXF" msgstr "DXF in curs de export" -#: FlatCAMApp.py:11160 FlatCAMApp.py:11167 +#: FlatCAMApp.py:11152 FlatCAMApp.py:11159 msgid "Could not export DXF file." msgstr "Fişierul DXF nu a fost posibil să fie exportat." -#: FlatCAMApp.py:11190 FlatCAMApp.py:11232 flatcamTools/ToolImage.py:277 +#: FlatCAMApp.py:11182 FlatCAMApp.py:11224 flatcamTools/ToolImage.py:277 msgid "" "Not supported type is picked as parameter. Only Geometry and Gerber are " "supported" @@ -1281,80 +1279,80 @@ msgstr "" "Tipul parametrului nu este compatibil. Doar obiectele tip Geometrie si " "Gerber sunt acceptate" -#: FlatCAMApp.py:11200 +#: FlatCAMApp.py:11192 msgid "Importing SVG" msgstr "SVG in curs de ia fi importat" -#: FlatCAMApp.py:11211 FlatCAMApp.py:11251 FlatCAMApp.py:11309 -#: FlatCAMApp.py:11374 FlatCAMApp.py:11438 FlatCAMApp.py:11503 -#: FlatCAMApp.py:11540 flatcamTools/ToolImage.py:297 +#: FlatCAMApp.py:11203 FlatCAMApp.py:11243 FlatCAMApp.py:11301 +#: FlatCAMApp.py:11366 FlatCAMApp.py:11430 FlatCAMApp.py:11495 +#: FlatCAMApp.py:11532 flatcamTools/ToolImage.py:297 #: flatcamTools/ToolPDF.py:225 msgid "Opened" msgstr "Încarcat" -#: FlatCAMApp.py:11241 +#: FlatCAMApp.py:11233 msgid "Importing DXF" msgstr "DXF in curs de a fi importat" -#: FlatCAMApp.py:11275 FlatCAMApp.py:11462 +#: FlatCAMApp.py:11267 FlatCAMApp.py:11454 msgid "Failed to open file" msgstr "Eşec in incărcarea fişierului" -#: FlatCAMApp.py:11278 FlatCAMApp.py:11465 +#: FlatCAMApp.py:11270 FlatCAMApp.py:11457 msgid "Failed to parse file" msgstr "Parsarea fişierului a eșuat" -#: FlatCAMApp.py:11290 +#: FlatCAMApp.py:11282 msgid "Object is not Gerber file or empty. Aborting object creation." msgstr "" "Obiectul nu estetip Gerber sau este gol. Se anulează crearea obiectului." -#: FlatCAMApp.py:11295 +#: FlatCAMApp.py:11287 msgid "Opening Gerber" msgstr "Gerber in curs de incărcare" -#: FlatCAMApp.py:11302 +#: FlatCAMApp.py:11294 msgid " Open Gerber failed. Probable not a Gerber file." msgstr " Incărcarea Gerber a eșuat. Probabil nu este de tip Gerber." -#: FlatCAMApp.py:11333 flatcamTools/ToolPcbWizard.py:425 +#: FlatCAMApp.py:11325 flatcamTools/ToolPcbWizard.py:425 msgid "This is not Excellon file." msgstr "Acesta nu este un fişier Excellon." -#: FlatCAMApp.py:11337 +#: FlatCAMApp.py:11329 msgid "Cannot open file" msgstr "Nu se poate incărca fişierul" -#: FlatCAMApp.py:11356 flatcamTools/ToolPDF.py:275 +#: FlatCAMApp.py:11348 flatcamTools/ToolPDF.py:275 #: flatcamTools/ToolPcbWizard.py:447 msgid "No geometry found in file" msgstr "Nici-o informaţie de tip geometrie nu s-a gasit in fişierul" -#: FlatCAMApp.py:11359 +#: FlatCAMApp.py:11351 msgid "Opening Excellon." msgstr "Excellon in curs de incărcare." -#: FlatCAMApp.py:11366 +#: FlatCAMApp.py:11358 msgid "Open Excellon file failed. Probable not an Excellon file." msgstr "Incărcarea Excellon a eșuat. Probabil nu este de tip Excellon." -#: FlatCAMApp.py:11398 +#: FlatCAMApp.py:11390 msgid "Reading GCode file" msgstr "Se citeşte un fişier G-Code" -#: FlatCAMApp.py:11405 +#: FlatCAMApp.py:11397 msgid "Failed to open" msgstr "A eșuat incărcarea fişierului" -#: FlatCAMApp.py:11413 +#: FlatCAMApp.py:11405 msgid "This is not GCODE" msgstr "Acest obiect nu este de tip GCode" -#: FlatCAMApp.py:11418 +#: FlatCAMApp.py:11410 msgid "Opening G-Code." msgstr "G-Code in curs de incărcare." -#: FlatCAMApp.py:11427 +#: FlatCAMApp.py:11419 msgid "" "Failed to create CNCJob Object. Probable not a GCode file. Try to load it " "from File menu.\n" @@ -1365,104 +1363,104 @@ msgstr "" "Încercați să-l încărcați din meniul Fișier. \n" "Incercarea de a crea un obiect CNCJob din G-Code a eșuat in timpul procesarii" -#: FlatCAMApp.py:11484 +#: FlatCAMApp.py:11476 msgid "Object is not HPGL2 file or empty. Aborting object creation." msgstr "" "Obiectul nu este fișier HPGL2 sau este gol. Se renunta la crearea obiectului." -#: FlatCAMApp.py:11489 +#: FlatCAMApp.py:11481 msgid "Opening HPGL2" msgstr "HPGL2 in curs de incărcare" -#: FlatCAMApp.py:11496 +#: FlatCAMApp.py:11488 msgid " Open HPGL2 failed. Probable not a HPGL2 file." msgstr " Incărcarea HPGL2 a eșuat. Probabil nu este de tip HPGL2 ." -#: FlatCAMApp.py:11516 +#: FlatCAMApp.py:11508 msgid "Opening TCL Script..." msgstr "Încarcă TCL script..." -#: FlatCAMApp.py:11524 +#: FlatCAMApp.py:11516 msgid "TCL script file opened in Code Editor." msgstr "S-a încărcat un script TCL în Editorul Cod." -#: FlatCAMApp.py:11527 +#: FlatCAMApp.py:11519 msgid "Failed to open TCL Script." msgstr "Eşec in incărcarea fişierului TCL." -#: FlatCAMApp.py:11555 +#: FlatCAMApp.py:11547 msgid "Opening FlatCAM Config file." msgstr "Se incarca un fişier FlatCAM de configurare." -#: FlatCAMApp.py:11583 +#: FlatCAMApp.py:11575 msgid "Failed to open config file" msgstr "Eşec in incărcarea fişierului de configurare" -#: FlatCAMApp.py:11611 +#: FlatCAMApp.py:11603 msgid "Loading Project ... Please Wait ..." msgstr "Se încarcă proiectul ... Vă rugăm să așteptați ..." -#: FlatCAMApp.py:11616 +#: FlatCAMApp.py:11608 msgid "Opening FlatCAM Project file." msgstr "Se incarca un fisier proiect FlatCAM." -#: FlatCAMApp.py:11626 FlatCAMApp.py:11644 +#: FlatCAMApp.py:11618 FlatCAMApp.py:11636 msgid "Failed to open project file" msgstr "Eşec in incărcarea fişierului proiect" -#: FlatCAMApp.py:11681 +#: FlatCAMApp.py:11673 msgid "Loading Project ... restoring" msgstr "Se încarcă proiectul ... se restabileste" -#: FlatCAMApp.py:11691 +#: FlatCAMApp.py:11683 msgid "Project loaded from" msgstr "Proiectul a fost incărcat din" -#: FlatCAMApp.py:11760 +#: FlatCAMApp.py:11752 msgid "Redrawing all objects" msgstr "Toate obiectele sunt reafisate" -#: FlatCAMApp.py:11849 +#: FlatCAMApp.py:11840 msgid "Failed to load recent item list." msgstr "Eşec in incărcarea listei cu fişiere recente." -#: FlatCAMApp.py:11856 +#: FlatCAMApp.py:11847 msgid "Failed to parse recent item list." msgstr "Eşec in parsarea listei cu fişiere recente." -#: FlatCAMApp.py:11866 +#: FlatCAMApp.py:11857 msgid "Failed to load recent projects item list." msgstr "Eşec in incărcarea listei cu proiecte recente." -#: FlatCAMApp.py:11873 +#: FlatCAMApp.py:11864 msgid "Failed to parse recent project item list." msgstr "Eşec in parsarea listei cu proiecte recente." -#: FlatCAMApp.py:11934 +#: FlatCAMApp.py:11925 msgid "Clear Recent projects" msgstr "Sterge Proiectele recente" -#: FlatCAMApp.py:11958 +#: FlatCAMApp.py:11949 msgid "Clear Recent files" msgstr "Sterge fişierele recente" -#: FlatCAMApp.py:11980 flatcamGUI/FlatCAMGUI.py:1348 +#: FlatCAMApp.py:11971 flatcamGUI/FlatCAMGUI.py:1348 msgid "Shortcut Key List" msgstr "Lista cu taste Shortcut" -#: FlatCAMApp.py:12054 +#: FlatCAMApp.py:12051 msgid "Selected Tab - Choose an Item from Project Tab" msgstr "Tab-ul Selectat - Alege un obiect din Tab-ul Proiect" -#: FlatCAMApp.py:12055 +#: FlatCAMApp.py:12052 msgid "Details" msgstr "Detalii" -#: FlatCAMApp.py:12057 +#: FlatCAMApp.py:12054 msgid "The normal flow when working in FlatCAM is the following:" msgstr "Fluxul normal cand se lucreaza in FlatCAM este urmatorul:" -#: FlatCAMApp.py:12058 +#: FlatCAMApp.py:12055 msgid "" "Load/Import a Gerber, Excellon, Gcode, DXF, Raster Image or SVG file into " "FlatCAM using either the toolbars, key shortcuts or even dragging and " @@ -1472,7 +1470,7 @@ msgstr "" "sau SVG în FlatCAM utilizând fie barele de instrumente, combinatii de taste " "sau chiar tragând fișierele în GUI." -#: FlatCAMApp.py:12061 +#: FlatCAMApp.py:12058 msgid "" "You can also load a FlatCAM project by double clicking on the project file, " "drag and drop of the file into the FLATCAM GUI or through the menu (or " @@ -1482,7 +1480,7 @@ msgstr "" "proiectului, tragând fișierul în fereastra FLATCAM sau prin icon-urile din " "meniu (sau din bara de instrumente) oferite în aplicație." -#: FlatCAMApp.py:12064 +#: FlatCAMApp.py:12061 msgid "" "Once an object is available in the Project Tab, by selecting it and then " "focusing on SELECTED TAB (more simpler is to double click the object name in " @@ -1495,7 +1493,7 @@ msgstr "" "proprietățile obiectului în funcție de tipul său: Gerber, Excellon, " "Geometrie sau obiect CNCJob." -#: FlatCAMApp.py:12068 +#: FlatCAMApp.py:12065 msgid "" "If the selection of the object is done on the canvas by single click " "instead, and the SELECTED TAB is in focus, again the object properties will " @@ -1509,14 +1507,14 @@ msgstr "" "de pe ecran va aduce fila SELECTAT și o va popula chiar dacă nu a fost in " "focus." -#: FlatCAMApp.py:12072 +#: FlatCAMApp.py:12069 msgid "" "You can change the parameters in this screen and the flow direction is like " "this:" msgstr "" "Se pot schimba parametrii in acest ecran si directia de executive este asa:" -#: FlatCAMApp.py:12073 +#: FlatCAMApp.py:12070 msgid "" "Gerber/Excellon Object --> Change Parameter --> Generate Geometry --> " "Geometry Object --> Add tools (change param in Selected Tab) --> Generate " @@ -1529,7 +1527,7 @@ msgstr "" "CNC) și / sau adăugați in fata / la final codul G-code (din nou, efectuat în " "fila SELECȚIONATĂ) -> Salvați codul G-code." -#: FlatCAMApp.py:12077 +#: FlatCAMApp.py:12074 msgid "" "A list of key shortcuts is available through an menu entry in Help --> " "Shortcuts List or through its own key shortcut: F3." @@ -1538,33 +1536,33 @@ msgstr "" "meniul Ajutor -> Lista de combinatii taste sau prin propria tasta asociata: " "F3." -#: FlatCAMApp.py:12141 +#: FlatCAMApp.py:12138 msgid "Failed checking for latest version. Could not connect." msgstr "" "Verificarea pentru ultima versiune a eșuat. Nu a fost posibilă conectarea la " "server." -#: FlatCAMApp.py:12148 +#: FlatCAMApp.py:12145 msgid "Could not parse information about latest version." msgstr "Informatia cu privire la ultima versiune nu s-a putut interpreta." -#: FlatCAMApp.py:12158 +#: FlatCAMApp.py:12155 msgid "FlatCAM is up to date!" msgstr "FlatCAM este la ultima versiune!" -#: FlatCAMApp.py:12163 +#: FlatCAMApp.py:12160 msgid "Newer Version Available" msgstr "O nouă versiune este disponibila" -#: FlatCAMApp.py:12165 +#: FlatCAMApp.py:12162 msgid "There is a newer version of FlatCAM available for download:" msgstr "O nouă versiune de FlatCAM este disponibilă pentru download:" -#: FlatCAMApp.py:12169 +#: FlatCAMApp.py:12166 msgid "info" msgstr "informaţie" -#: FlatCAMApp.py:12197 +#: FlatCAMApp.py:12194 msgid "" "OpenGL canvas initialization failed. HW or HW configuration not supported." "Change the graphic engine to Legacy(2D) in Edit -> Preferences -> General " @@ -1576,131 +1574,127 @@ msgstr "" "Preferinţe -> General\n" "\n" -#: FlatCAMApp.py:12276 +#: FlatCAMApp.py:12273 msgid "All plots disabled." msgstr "Toate afişările sunt dezactivate." -#: FlatCAMApp.py:12283 +#: FlatCAMApp.py:12280 msgid "All non selected plots disabled." msgstr "Toate afişările care nu sunt selectate sunt dezactivate." -#: FlatCAMApp.py:12290 +#: FlatCAMApp.py:12287 msgid "All plots enabled." msgstr "Toate afişările sunt activate." -#: FlatCAMApp.py:12296 +#: FlatCAMApp.py:12293 msgid "Selected plots enabled..." msgstr "Toate afişările selectate sunt activate..." -#: FlatCAMApp.py:12304 +#: FlatCAMApp.py:12301 msgid "Selected plots disabled..." msgstr "Toate afişările selectate sunt dezactivate..." -#: FlatCAMApp.py:12337 +#: FlatCAMApp.py:12334 msgid "Enabling plots ..." msgstr "Activează Afișare ..." -#: FlatCAMApp.py:12389 +#: FlatCAMApp.py:12386 msgid "Disabling plots ..." msgstr "Dezactivează Afișare ..." -#: FlatCAMApp.py:12412 +#: FlatCAMApp.py:12409 msgid "Working ..." msgstr "Se lucrează..." -#: FlatCAMApp.py:12467 flatcamGUI/FlatCAMGUI.py:688 +#: FlatCAMApp.py:12464 flatcamGUI/FlatCAMGUI.py:688 msgid "Red" msgstr "Roșu" -#: FlatCAMApp.py:12469 flatcamGUI/FlatCAMGUI.py:691 +#: FlatCAMApp.py:12466 flatcamGUI/FlatCAMGUI.py:691 msgid "Blue" msgstr "Albastru" -#: FlatCAMApp.py:12472 flatcamGUI/FlatCAMGUI.py:694 +#: FlatCAMApp.py:12469 flatcamGUI/FlatCAMGUI.py:694 msgid "Yellow" msgstr "Galben" -#: FlatCAMApp.py:12474 flatcamGUI/FlatCAMGUI.py:697 +#: FlatCAMApp.py:12471 flatcamGUI/FlatCAMGUI.py:697 msgid "Green" msgstr "Verde" -#: FlatCAMApp.py:12476 flatcamGUI/FlatCAMGUI.py:700 +#: FlatCAMApp.py:12473 flatcamGUI/FlatCAMGUI.py:700 msgid "Purple" msgstr "Violet" -#: FlatCAMApp.py:12478 flatcamGUI/FlatCAMGUI.py:703 +#: FlatCAMApp.py:12475 flatcamGUI/FlatCAMGUI.py:703 msgid "Brown" msgstr "Maro" -#: FlatCAMApp.py:12480 FlatCAMApp.py:12536 flatcamGUI/FlatCAMGUI.py:706 +#: FlatCAMApp.py:12477 FlatCAMApp.py:12533 flatcamGUI/FlatCAMGUI.py:706 msgid "White" msgstr "Alb" -#: FlatCAMApp.py:12482 flatcamGUI/FlatCAMGUI.py:709 +#: FlatCAMApp.py:12479 flatcamGUI/FlatCAMGUI.py:709 msgid "Black" msgstr "Negru" -#: FlatCAMApp.py:12485 flatcamGUI/FlatCAMGUI.py:714 +#: FlatCAMApp.py:12482 flatcamGUI/FlatCAMGUI.py:714 msgid "Custom" msgstr "Personalizat" -#: FlatCAMApp.py:12495 flatcamGUI/FlatCAMGUI.py:722 +#: FlatCAMApp.py:12492 flatcamGUI/FlatCAMGUI.py:722 msgid "Default" msgstr "Implicit" -#: FlatCAMApp.py:12519 flatcamGUI/FlatCAMGUI.py:719 +#: FlatCAMApp.py:12516 flatcamGUI/FlatCAMGUI.py:719 msgid "Opacity" msgstr "Opacitate" -#: FlatCAMApp.py:12521 +#: FlatCAMApp.py:12518 msgid "Set alpha level ..." msgstr "Setează transparenta ..." -#: FlatCAMApp.py:12521 flatcamGUI/PreferencesUI.py:6900 +#: FlatCAMApp.py:12518 flatcamGUI/PreferencesUI.py:6900 #: flatcamGUI/PreferencesUI.py:8230 flatcamGUI/PreferencesUI.py:8444 #: flatcamTools/ToolExtractDrills.py:164 flatcamTools/ToolExtractDrills.py:285 #: flatcamTools/ToolPunchGerber.py:192 flatcamTools/ToolPunchGerber.py:308 -#: flatcamTools/ToolTransform.py:358 +#: flatcamTools/ToolTransform.py:357 msgid "Value" msgstr "Valoare" -#: FlatCAMApp.py:12597 +#: FlatCAMApp.py:12594 msgid "Saving FlatCAM Project" msgstr "Proiectul FlatCAM este in curs de salvare" -#: FlatCAMApp.py:12618 FlatCAMApp.py:12654 +#: FlatCAMApp.py:12615 FlatCAMApp.py:12651 msgid "Project saved to" msgstr "Proiectul s-a salvat in" -#: FlatCAMApp.py:12625 +#: FlatCAMApp.py:12622 msgid "The object is used by another application." msgstr "Obiectul este folosit de o altă aplicație." -#: FlatCAMApp.py:12639 +#: FlatCAMApp.py:12636 msgid "Failed to verify project file" msgstr "Eşec in incărcarea fişierului proiect" -#: FlatCAMApp.py:12639 FlatCAMApp.py:12647 FlatCAMApp.py:12657 +#: FlatCAMApp.py:12636 FlatCAMApp.py:12644 FlatCAMApp.py:12654 msgid "Retry to save it." msgstr "Încercați din nou pentru a-l salva." -#: FlatCAMApp.py:12647 FlatCAMApp.py:12657 +#: FlatCAMApp.py:12644 FlatCAMApp.py:12654 msgid "Failed to parse saved project file" msgstr "Esec in analizarea fişierului Proiect" -#: FlatCAMApp.py:13139 -msgid "The user requested a graceful exit of the current task." -msgstr "Utilizatorul a solicitat o inchidere grațioasă a taskului curent." - -#: FlatCAMCommon.py:137 FlatCAMCommon.py:164 +#: FlatCAMBookmark.py:57 FlatCAMBookmark.py:84 msgid "Title" msgstr "Titlu" -#: FlatCAMCommon.py:138 FlatCAMCommon.py:168 +#: FlatCAMBookmark.py:58 FlatCAMBookmark.py:88 msgid "Web Link" msgstr "Website" -#: FlatCAMCommon.py:142 +#: FlatCAMBookmark.py:62 msgid "" "Index.\n" "The rows in gray color will populate the Bookmarks menu.\n" @@ -1710,7 +1704,7 @@ msgstr "" "Rândurile în culoare gri vor fi adăugate in meniul de Bookmarks.\n" "Numărul de rânduri colorate gri este setat în Preferințe." -#: FlatCAMCommon.py:146 +#: FlatCAMBookmark.py:66 msgid "" "Description of the link that is set as an menu action.\n" "Try to keep it short because it is installed as a menu item." @@ -1718,87 +1712,91 @@ msgstr "" "Descrierea Website care este setată ca acțiune de meniu.\n" "Încercați să o mențineți scurtă, deoarece este instalată ca element de meniu." -#: FlatCAMCommon.py:149 +#: FlatCAMBookmark.py:69 msgid "Web Link. E.g: https://your_website.org " msgstr "Website. De ex: https://your_website.org " -#: FlatCAMCommon.py:158 +#: FlatCAMBookmark.py:78 msgid "New Bookmark" msgstr "Bookmark Nou" -#: FlatCAMCommon.py:177 +#: FlatCAMBookmark.py:97 msgid "Add Entry" msgstr "Adaugă Intrare" -#: FlatCAMCommon.py:178 +#: FlatCAMBookmark.py:98 msgid "Remove Entry" msgstr "Elimina Intrare" -#: FlatCAMCommon.py:179 +#: FlatCAMBookmark.py:99 msgid "Export List" msgstr "Exportă lista" -#: FlatCAMCommon.py:180 +#: FlatCAMBookmark.py:100 msgid "Import List" msgstr "Importă lista" -#: FlatCAMCommon.py:261 +#: FlatCAMBookmark.py:181 msgid "Title entry is empty." msgstr "Caseta de introducere Titlu este goală." -#: FlatCAMCommon.py:270 +#: FlatCAMBookmark.py:190 msgid "Web link entry is empty." msgstr "Caseta de introducere a link-ului web este goală." -#: FlatCAMCommon.py:278 +#: FlatCAMBookmark.py:198 msgid "Either the Title or the Weblink already in the table." msgstr "Fie Titlul, fie Weblink-ul deja sunt in tabel." -#: FlatCAMCommon.py:298 +#: FlatCAMBookmark.py:218 msgid "Bookmark added." msgstr "Bookmark adăugat." -#: FlatCAMCommon.py:315 +#: FlatCAMBookmark.py:235 msgid "This bookmark can not be removed" msgstr "Acest bookmark nu poate fi eliminat" -#: FlatCAMCommon.py:346 +#: FlatCAMBookmark.py:266 msgid "Bookmark removed." msgstr "Bookmark-ul a fost eliminat." -#: FlatCAMCommon.py:361 +#: FlatCAMBookmark.py:281 msgid "Export FlatCAM Bookmarks" msgstr "Exportați bookmark-urile FlatCAM" -#: FlatCAMCommon.py:364 flatcamGUI/FlatCAMGUI.py:509 +#: FlatCAMBookmark.py:284 flatcamGUI/FlatCAMGUI.py:509 msgid "Bookmarks" msgstr "Bookmarks" -#: FlatCAMCommon.py:390 FlatCAMCommon.py:420 +#: FlatCAMBookmark.py:310 FlatCAMBookmark.py:340 msgid "Could not load bookmarks file." msgstr "Nu am putut incărca fişierul cu bookmark-uri." -#: FlatCAMCommon.py:400 +#: FlatCAMBookmark.py:320 msgid "Failed to write bookmarks to file." msgstr "Salvarea bookmark-urilor intr-un fişier a eșuat." -#: FlatCAMCommon.py:402 +#: FlatCAMBookmark.py:322 msgid "Exported bookmarks to" msgstr "Exportă Bookmark-uri in" -#: FlatCAMCommon.py:408 +#: FlatCAMBookmark.py:328 msgid "Import FlatCAM Bookmarks" msgstr "Importă Bookmark-uri FlatCAM" -#: FlatCAMCommon.py:427 +#: FlatCAMBookmark.py:347 msgid "Imported Bookmarks from" msgstr "Bookmark-uri au fost importate din" -#: FlatCAMCommon.py:530 +#: FlatCAMCommon.py:29 +msgid "The user requested a graceful exit of the current task." +msgstr "Utilizatorul a solicitat o inchidere grațioasă a taskului curent." + +#: FlatCAMDB.py:86 msgid "Add Geometry Tool in DB" msgstr "Adăugați Unealta de Geometrie în DB" -#: FlatCAMCommon.py:532 FlatCAMCommon.py:2087 +#: FlatCAMDB.py:88 FlatCAMDB.py:1643 msgid "" "Add a new tool in the Tools Database.\n" "It will be used in the Geometry UI.\n" @@ -1808,35 +1806,35 @@ msgstr "" "Acesta va fi utilizată în UI de Geometrie.\n" "O puteți edita după ce este adăugată." -#: FlatCAMCommon.py:546 FlatCAMCommon.py:2101 +#: FlatCAMDB.py:102 FlatCAMDB.py:1657 msgid "Delete Tool from DB" msgstr "Ștergeți unealta din DB" -#: FlatCAMCommon.py:548 FlatCAMCommon.py:2103 +#: FlatCAMDB.py:104 FlatCAMDB.py:1659 msgid "Remove a selection of tools in the Tools Database." msgstr "Stergeți o selecție de Unelte din baza de date Unelte." -#: FlatCAMCommon.py:552 FlatCAMCommon.py:2107 +#: FlatCAMDB.py:108 FlatCAMDB.py:1663 msgid "Export DB" msgstr "Exportă DB" -#: FlatCAMCommon.py:554 FlatCAMCommon.py:2109 +#: FlatCAMDB.py:110 FlatCAMDB.py:1665 msgid "Save the Tools Database to a custom text file." msgstr "Salvați baza de date Unelte într-un fișier text." -#: FlatCAMCommon.py:558 FlatCAMCommon.py:2113 +#: FlatCAMDB.py:114 FlatCAMDB.py:1669 msgid "Import DB" msgstr "Importă DB" -#: FlatCAMCommon.py:560 FlatCAMCommon.py:2115 +#: FlatCAMDB.py:116 FlatCAMDB.py:1671 msgid "Load the Tools Database information's from a custom text file." msgstr "Încărcați informațiile din baza de date Unelte dintr-un fișier text." -#: FlatCAMCommon.py:564 FlatCAMCommon.py:2119 +#: FlatCAMDB.py:120 FlatCAMDB.py:1675 msgid "Add Tool from Tools DB" msgstr "Adăugați Unealta din DB Unelte" -#: FlatCAMCommon.py:566 FlatCAMCommon.py:2121 +#: FlatCAMDB.py:122 FlatCAMDB.py:1677 msgid "" "Add a new tool in the Tools Table of the\n" "active Geometry object after selecting a tool\n" @@ -1846,28 +1844,28 @@ msgstr "" "obiectul Geometrie activ după selectarea unei Unelte\n" "în baza de date Unelte." -#: FlatCAMCommon.py:602 FlatCAMCommon.py:1277 FlatCAMCommon.py:1531 +#: FlatCAMDB.py:158 FlatCAMDB.py:833 FlatCAMDB.py:1087 msgid "Tool Name" msgstr "Nume unealtă" -#: FlatCAMCommon.py:603 FlatCAMCommon.py:1279 FlatCAMCommon.py:1544 -#: flatcamEditors/FlatCAMExcEditor.py:1605 flatcamGUI/ObjectUI.py:1343 -#: flatcamGUI/ObjectUI.py:1581 flatcamGUI/PreferencesUI.py:5971 +#: FlatCAMDB.py:159 FlatCAMDB.py:835 FlatCAMDB.py:1100 +#: flatcamEditors/FlatCAMExcEditor.py:1604 flatcamGUI/ObjectUI.py:1344 +#: flatcamGUI/ObjectUI.py:1582 flatcamGUI/PreferencesUI.py:5971 #: flatcamTools/ToolNCC.py:278 flatcamTools/ToolNCC.py:287 #: flatcamTools/ToolPaint.py:261 msgid "Tool Dia" msgstr "Dia Unealtă" -#: FlatCAMCommon.py:604 FlatCAMCommon.py:1281 FlatCAMCommon.py:1725 -#: flatcamGUI/ObjectUI.py:1556 +#: FlatCAMDB.py:160 FlatCAMDB.py:837 FlatCAMDB.py:1281 +#: flatcamGUI/ObjectUI.py:1557 msgid "Tool Offset" msgstr "Ofset unealtă" -#: FlatCAMCommon.py:605 FlatCAMCommon.py:1283 FlatCAMCommon.py:1742 +#: FlatCAMDB.py:161 FlatCAMDB.py:839 FlatCAMDB.py:1298 msgid "Custom Offset" msgstr "Ofset Personalizat" -#: FlatCAMCommon.py:606 FlatCAMCommon.py:1285 FlatCAMCommon.py:1709 +#: FlatCAMDB.py:162 FlatCAMDB.py:841 FlatCAMDB.py:1265 #: flatcamGUI/ObjectUI.py:308 flatcamGUI/PreferencesUI.py:2397 #: flatcamGUI/PreferencesUI.py:5332 flatcamGUI/PreferencesUI.py:5901 #: flatcamGUI/PreferencesUI.py:5911 flatcamTools/ToolNCC.py:213 @@ -1875,115 +1873,115 @@ msgstr "Ofset Personalizat" msgid "Tool Type" msgstr "Tip Unealtă" -#: FlatCAMCommon.py:607 FlatCAMCommon.py:1287 FlatCAMCommon.py:1557 +#: FlatCAMDB.py:163 FlatCAMDB.py:843 FlatCAMDB.py:1113 msgid "Tool Shape" msgstr "Formă unealtă" -#: FlatCAMCommon.py:608 FlatCAMCommon.py:1290 FlatCAMCommon.py:1573 +#: FlatCAMDB.py:164 FlatCAMDB.py:846 FlatCAMDB.py:1129 #: flatcamGUI/ObjectUI.py:349 flatcamGUI/ObjectUI.py:899 -#: flatcamGUI/ObjectUI.py:1701 flatcamGUI/ObjectUI.py:2254 +#: flatcamGUI/ObjectUI.py:1702 flatcamGUI/ObjectUI.py:2255 #: flatcamGUI/PreferencesUI.py:2437 flatcamGUI/PreferencesUI.py:3311 #: flatcamGUI/PreferencesUI.py:4241 flatcamGUI/PreferencesUI.py:5377 #: flatcamGUI/PreferencesUI.py:5666 flatcamGUI/PreferencesUI.py:5944 #: flatcamGUI/PreferencesUI.py:5952 flatcamGUI/PreferencesUI.py:6635 -#: flatcamTools/ToolCalculators.py:114 flatcamTools/ToolCutOut.py:139 +#: flatcamTools/ToolCalculators.py:114 flatcamTools/ToolCutOut.py:138 #: flatcamTools/ToolNCC.py:260 flatcamTools/ToolNCC.py:268 #: flatcamTools/ToolPaint.py:243 msgid "Cut Z" msgstr "Z tăiere" -#: FlatCAMCommon.py:609 FlatCAMCommon.py:1292 FlatCAMCommon.py:1587 +#: FlatCAMDB.py:165 FlatCAMDB.py:848 FlatCAMDB.py:1143 msgid "MultiDepth" msgstr "Multi-Pas" -#: FlatCAMCommon.py:610 FlatCAMCommon.py:1294 FlatCAMCommon.py:1600 +#: FlatCAMDB.py:166 FlatCAMDB.py:850 FlatCAMDB.py:1156 msgid "DPP" msgstr "DPP" -#: FlatCAMCommon.py:611 FlatCAMCommon.py:1296 FlatCAMCommon.py:1756 +#: FlatCAMDB.py:167 FlatCAMDB.py:852 FlatCAMDB.py:1312 msgid "V-Dia" msgstr "V-Dia" -#: FlatCAMCommon.py:612 FlatCAMCommon.py:1298 FlatCAMCommon.py:1770 +#: FlatCAMDB.py:168 FlatCAMDB.py:854 FlatCAMDB.py:1326 msgid "V-Angle" msgstr "V-Unghi" -#: FlatCAMCommon.py:613 FlatCAMCommon.py:1300 FlatCAMCommon.py:1614 -#: FlatCAMObj.py:3661 FlatCAMObj.py:5486 flatcamGUI/ObjectUI.py:945 -#: flatcamGUI/ObjectUI.py:1748 flatcamGUI/PreferencesUI.py:3352 -#: flatcamGUI/PreferencesUI.py:4294 flatcamGUI/PreferencesUI.py:8041 -#: flatcamTools/ToolCalibration.py:74 +#: FlatCAMDB.py:169 FlatCAMDB.py:856 FlatCAMDB.py:1170 +#: flatcamGUI/ObjectUI.py:945 flatcamGUI/ObjectUI.py:1749 +#: flatcamGUI/PreferencesUI.py:3352 flatcamGUI/PreferencesUI.py:4294 +#: flatcamGUI/PreferencesUI.py:8041 flatcamObjects/FlatCAMExcellon.py:1316 +#: flatcamObjects/FlatCAMGeometry.py:1552 flatcamTools/ToolCalibration.py:74 msgid "Travel Z" msgstr "Z Deplasare" -#: FlatCAMCommon.py:614 FlatCAMCommon.py:1302 +#: FlatCAMDB.py:170 FlatCAMDB.py:858 msgid "FR" msgstr "Feedrate" -#: FlatCAMCommon.py:615 FlatCAMCommon.py:1304 +#: FlatCAMDB.py:171 FlatCAMDB.py:860 msgid "FR Z" msgstr "Z feedrate" -#: FlatCAMCommon.py:616 FlatCAMCommon.py:1306 FlatCAMCommon.py:1784 +#: FlatCAMDB.py:172 FlatCAMDB.py:862 FlatCAMDB.py:1340 msgid "FR Rapids" msgstr "Feedrate rapizi" -#: FlatCAMCommon.py:617 FlatCAMCommon.py:1308 FlatCAMCommon.py:1657 +#: FlatCAMDB.py:173 FlatCAMDB.py:864 FlatCAMDB.py:1213 #: flatcamGUI/PreferencesUI.py:3440 msgid "Spindle Speed" msgstr "Viteza Motor" -#: FlatCAMCommon.py:618 FlatCAMCommon.py:1310 FlatCAMCommon.py:1672 -#: flatcamGUI/ObjectUI.py:1063 flatcamGUI/ObjectUI.py:1855 +#: FlatCAMDB.py:174 FlatCAMDB.py:866 FlatCAMDB.py:1228 +#: flatcamGUI/ObjectUI.py:1063 flatcamGUI/ObjectUI.py:1856 msgid "Dwell" msgstr "Pauza" -#: FlatCAMCommon.py:619 FlatCAMCommon.py:1312 FlatCAMCommon.py:1685 +#: FlatCAMDB.py:175 FlatCAMDB.py:868 FlatCAMDB.py:1241 msgid "Dwelltime" msgstr "Durata pauza" -#: FlatCAMCommon.py:620 FlatCAMCommon.py:1314 flatcamGUI/ObjectUI.py:2012 +#: FlatCAMDB.py:176 FlatCAMDB.py:870 flatcamGUI/ObjectUI.py:2013 #: flatcamGUI/PreferencesUI.py:3475 flatcamGUI/PreferencesUI.py:4447 -#: flatcamGUI/PreferencesUI.py:7148 flatcamTools/ToolSolderPaste.py:336 +#: flatcamGUI/PreferencesUI.py:7148 flatcamTools/ToolSolderPaste.py:335 msgid "Preprocessor" msgstr "Postprocesor" -#: FlatCAMCommon.py:621 FlatCAMCommon.py:1316 FlatCAMCommon.py:1800 +#: FlatCAMDB.py:177 FlatCAMDB.py:872 FlatCAMDB.py:1356 msgid "ExtraCut" msgstr "Extra taiere" -#: FlatCAMCommon.py:622 FlatCAMCommon.py:1318 FlatCAMCommon.py:1815 +#: FlatCAMDB.py:178 FlatCAMDB.py:874 FlatCAMDB.py:1371 msgid "E-Cut Length" msgstr "Lungime E-taiere" -#: FlatCAMCommon.py:623 FlatCAMCommon.py:1320 +#: FlatCAMDB.py:179 FlatCAMDB.py:876 msgid "Toolchange" msgstr "Schimb unealtă" -#: FlatCAMCommon.py:624 FlatCAMCommon.py:1322 +#: FlatCAMDB.py:180 FlatCAMDB.py:878 msgid "Toolchange XY" msgstr "X,Y schimb unealtă" -#: FlatCAMCommon.py:625 FlatCAMCommon.py:1324 flatcamGUI/PreferencesUI.py:3378 +#: FlatCAMDB.py:181 FlatCAMDB.py:880 flatcamGUI/PreferencesUI.py:3378 #: flatcamGUI/PreferencesUI.py:4324 flatcamGUI/PreferencesUI.py:8078 #: flatcamTools/ToolCalibration.py:111 msgid "Toolchange Z" msgstr "Z schimb. unealtă" -#: FlatCAMCommon.py:626 FlatCAMCommon.py:1326 flatcamGUI/ObjectUI.py:1192 +#: FlatCAMDB.py:182 FlatCAMDB.py:882 flatcamGUI/ObjectUI.py:1192 #: flatcamGUI/PreferencesUI.py:3586 flatcamGUI/PreferencesUI.py:4493 msgid "Start Z" msgstr "Z Start" -#: FlatCAMCommon.py:627 FlatCAMCommon.py:1329 +#: FlatCAMDB.py:183 FlatCAMDB.py:885 msgid "End Z" msgstr "Z Oprire" -#: FlatCAMCommon.py:631 +#: FlatCAMDB.py:187 msgid "Tool Index." msgstr "Index unealta." -#: FlatCAMCommon.py:633 FlatCAMCommon.py:1533 +#: FlatCAMDB.py:189 FlatCAMDB.py:1089 msgid "" "Tool name.\n" "This is not used in the app, it's function\n" @@ -1993,11 +1991,11 @@ msgstr "" "Aceasta nu este folosită în aplicație, funcția sa\n" "este să servească drept notă pentru utilizator." -#: FlatCAMCommon.py:637 FlatCAMCommon.py:1546 +#: FlatCAMDB.py:193 FlatCAMDB.py:1102 msgid "Tool Diameter." msgstr "Diametru unealtă." -#: FlatCAMCommon.py:639 FlatCAMCommon.py:1727 +#: FlatCAMDB.py:195 FlatCAMDB.py:1283 msgid "" "Tool Offset.\n" "Can be of a few types:\n" @@ -2013,7 +2011,7 @@ msgstr "" "Exterior = compensat în exterior cu jumătate din diametrul sculei\n" "Custom = compensare personalizată folosind valoarea Offset personalizat" -#: FlatCAMCommon.py:646 FlatCAMCommon.py:1744 +#: FlatCAMDB.py:202 FlatCAMDB.py:1300 msgid "" "Custom Offset.\n" "A value to be used as offset from the current path." @@ -2021,7 +2019,7 @@ msgstr "" "Ofset personalizat.\n" "O valoare care trebuie utilizată ca compensare din Calea curentă." -#: FlatCAMCommon.py:649 FlatCAMCommon.py:1711 +#: FlatCAMDB.py:205 FlatCAMDB.py:1267 msgid "" "Tool Type.\n" "Can be:\n" @@ -2035,7 +2033,7 @@ msgstr "" "Aspră = tăietură aspră, viteză scăzută, treceri multiple\n" "Finisare = tăiere de finisare, avans mare" -#: FlatCAMCommon.py:655 FlatCAMCommon.py:1559 +#: FlatCAMDB.py:211 FlatCAMDB.py:1115 msgid "" "Tool Shape. \n" "Can be:\n" @@ -2049,7 +2047,7 @@ msgstr "" "B = instrument de frezare cu vârf formal bila\n" "V = instrument de frezare în formă V" -#: FlatCAMCommon.py:661 FlatCAMCommon.py:1575 +#: FlatCAMDB.py:217 FlatCAMDB.py:1131 msgid "" "Cutting Depth.\n" "The depth at which to cut into material." @@ -2057,7 +2055,7 @@ msgstr "" "Adâncimea de tăiere.\n" "Adâncimea la care se taie în material." -#: FlatCAMCommon.py:664 FlatCAMCommon.py:1589 +#: FlatCAMDB.py:220 FlatCAMDB.py:1145 msgid "" "Multi Depth.\n" "Selecting this will allow cutting in multiple passes,\n" @@ -2067,7 +2065,7 @@ msgstr "" "Selectarea acestui lucru va permite tăierea în mai multe treceri,\n" "fiecare trecere adăugând o adâncime a parametrului DPP." -#: FlatCAMCommon.py:668 FlatCAMCommon.py:1602 +#: FlatCAMDB.py:224 FlatCAMDB.py:1158 msgid "" "DPP. Depth per Pass.\n" "The value used to cut into material on each pass." @@ -2075,7 +2073,7 @@ msgstr "" "DPP. Adâncimea pe trecere.\n" "Valoarea folosită pentru a tăia în material la fiecare trecere." -#: FlatCAMCommon.py:671 FlatCAMCommon.py:1758 +#: FlatCAMDB.py:227 FlatCAMDB.py:1314 msgid "" "V-Dia.\n" "Diameter of the tip for V-Shape Tools." @@ -2083,7 +2081,7 @@ msgstr "" "V-Dia.\n" "Diametrul vârfului pentru uneltele în formă de V." -#: FlatCAMCommon.py:674 FlatCAMCommon.py:1772 +#: FlatCAMDB.py:230 FlatCAMDB.py:1328 msgid "" "V-Agle.\n" "Angle at the tip for the V-Shape Tools." @@ -2091,7 +2089,7 @@ msgstr "" "V-Unghi.\n" "Unghiul în vârf pentru instrumentele în formă de V." -#: FlatCAMCommon.py:677 FlatCAMCommon.py:1616 +#: FlatCAMDB.py:233 FlatCAMDB.py:1172 msgid "" "Clearance Height.\n" "Height at which the milling bit will travel between cuts,\n" @@ -2101,7 +2099,7 @@ msgstr "" "Înălțimea la care bitul de frezare va călători între tăieturi,\n" "deasupra suprafeței materialului, evitând toate accesoriile." -#: FlatCAMCommon.py:681 +#: FlatCAMDB.py:237 msgid "" "FR. Feedrate\n" "The speed on XY plane used while cutting into material." @@ -2109,7 +2107,7 @@ msgstr "" "FR. Avans.\n" "Viteza pe planul XY utilizat la tăierea în material." -#: FlatCAMCommon.py:684 +#: FlatCAMDB.py:240 msgid "" "FR Z. Feedrate Z\n" "The speed on Z plane." @@ -2117,7 +2115,7 @@ msgstr "" "FR Z. Feedrate Z. Avans Z.\n" "Viteza de deplasare in planul Z." -#: FlatCAMCommon.py:687 FlatCAMCommon.py:1786 +#: FlatCAMDB.py:243 FlatCAMDB.py:1342 msgid "" "FR Rapids. Feedrate Rapids\n" "Speed used while moving as fast as possible.\n" @@ -2129,7 +2127,7 @@ msgstr "" "Acesta este folosit doar de unele dispozitive in care nu poate fi utilizata\n" "comanda G-cod G0. În mare parte este vorda de imprimante 3D." -#: FlatCAMCommon.py:692 FlatCAMCommon.py:1659 +#: FlatCAMDB.py:248 FlatCAMDB.py:1215 msgid "" "Spindle Speed.\n" "If it's left empty it will not be used.\n" @@ -2139,7 +2137,7 @@ msgstr "" "Dacă este lăsat gol, nu va fi folosit.\n" "Viteza rotorului în RPM." -#: FlatCAMCommon.py:696 FlatCAMCommon.py:1674 +#: FlatCAMDB.py:252 FlatCAMDB.py:1230 msgid "" "Dwell.\n" "Check this if a delay is needed to allow\n" @@ -2149,7 +2147,7 @@ msgstr "" "Verificați dacă este necesară o întârziere pentru a permite\n" "motorului sa ajungă la viteza setată." -#: FlatCAMCommon.py:700 FlatCAMCommon.py:1687 +#: FlatCAMDB.py:256 FlatCAMDB.py:1243 msgid "" "Dwell Time.\n" "A delay used to allow the motor spindle reach it's set speed." @@ -2157,7 +2155,7 @@ msgstr "" "Durata pauzei.\n" "O întârziere pentru a permite motorului sa ajungă la viteza setată." -#: FlatCAMCommon.py:703 +#: FlatCAMDB.py:259 msgid "" "Preprocessor.\n" "A selection of files that will alter the generated G-code\n" @@ -2167,7 +2165,7 @@ msgstr "" "O selecție de fișiere care vor modifica codul G generat\n" "pentru a se potrivi pentru o serie de cazuri de utilizare." -#: FlatCAMCommon.py:707 FlatCAMCommon.py:1802 +#: FlatCAMDB.py:263 FlatCAMDB.py:1358 msgid "" "Extra Cut.\n" "If checked, after a isolation is finished an extra cut\n" @@ -2181,7 +2179,7 @@ msgstr "" "astfel că acest punct este acoperit de aceste tăieri suplimentare si\n" "asigură o izolare completă." -#: FlatCAMCommon.py:713 FlatCAMCommon.py:1817 +#: FlatCAMDB.py:269 FlatCAMDB.py:1373 msgid "" "Extra Cut length.\n" "If checked, after a isolation is finished an extra cut\n" @@ -2196,7 +2194,7 @@ msgstr "" "astfel că acest punct este acoperit de aceste tăieri suplimentare si\n" "asigură o izolare completă." -#: FlatCAMCommon.py:720 +#: FlatCAMDB.py:276 msgid "" "Toolchange.\n" "It will create a toolchange event.\n" @@ -2208,7 +2206,7 @@ msgstr "" "Tipul schimbului de unelte este determinat de\n" "fișierul preprocesor." -#: FlatCAMCommon.py:725 +#: FlatCAMDB.py:281 msgid "" "Toolchange XY.\n" "A set of coordinates in the format (x, y).\n" @@ -2220,7 +2218,7 @@ msgstr "" "Va determina poziția carteziană a punctului\n" "unde are loc evenimentul schimbării instrumentelor." -#: FlatCAMCommon.py:730 +#: FlatCAMDB.py:286 msgid "" "Toolchange Z.\n" "The position on Z plane where the tool change event take place." @@ -2228,7 +2226,7 @@ msgstr "" "Schimb de unelte - locatia Z.\n" "Poziția in planul Z unde are loc evenimentul de schimbare a sculei." -#: FlatCAMCommon.py:733 +#: FlatCAMDB.py:289 msgid "" "Start Z.\n" "If it's left empty it will not be used.\n" @@ -2238,7 +2236,7 @@ msgstr "" "Dacă este lăsat gol, nu va fi folosit.\n" "O poziție pe planul Z pentru a se deplasa imediat după începerea lucrului." -#: FlatCAMCommon.py:737 +#: FlatCAMDB.py:293 msgid "" "End Z.\n" "A position on Z plane to move immediately after job stop." @@ -2246,101 +2244,99 @@ msgstr "" "Z Sfârșit.\n" "O poziție pe planul Z pentru a se deplasa imediat după oprirea executiei." -#: FlatCAMCommon.py:749 FlatCAMCommon.py:1126 FlatCAMCommon.py:1160 -#: FlatCAMCommon.py:2335 FlatCAMCommon.py:2556 FlatCAMCommon.py:2590 +#: FlatCAMDB.py:305 FlatCAMDB.py:682 FlatCAMDB.py:716 FlatCAMDB.py:1891 +#: FlatCAMDB.py:2112 FlatCAMDB.py:2146 msgid "Could not load Tools DB file." msgstr "Nu s-a putut încărca fișierul DB Unelte." -#: FlatCAMCommon.py:757 FlatCAMCommon.py:1168 FlatCAMCommon.py:2343 -#: FlatCAMCommon.py:2598 +#: FlatCAMDB.py:313 FlatCAMDB.py:724 FlatCAMDB.py:1899 FlatCAMDB.py:2154 msgid "Failed to parse Tools DB file." msgstr "Eroare la analizarea fișierului DB Unelte." -#: FlatCAMCommon.py:760 FlatCAMCommon.py:1171 FlatCAMCommon.py:2346 -#: FlatCAMCommon.py:2601 +#: FlatCAMDB.py:316 FlatCAMDB.py:727 FlatCAMDB.py:1902 FlatCAMDB.py:2157 msgid "Loaded FlatCAM Tools DB from" msgstr "S-a incărcat DB Unelte din" -#: FlatCAMCommon.py:766 FlatCAMCommon.py:2260 +#: FlatCAMDB.py:322 FlatCAMDB.py:1816 msgid "Add to DB" msgstr "Adăugați la DB Unelte" -#: FlatCAMCommon.py:768 FlatCAMCommon.py:2263 +#: FlatCAMDB.py:324 FlatCAMDB.py:1819 msgid "Copy from DB" msgstr "Copiați din DB Unelte" -#: FlatCAMCommon.py:770 FlatCAMCommon.py:2266 +#: FlatCAMDB.py:326 FlatCAMDB.py:1822 msgid "Delete from DB" msgstr "Ștergeți din DB Unelte" -#: FlatCAMCommon.py:1047 FlatCAMCommon.py:2473 +#: FlatCAMDB.py:603 FlatCAMDB.py:2029 msgid "Tool added to DB." msgstr "Unealtă adăugată in DB." -#: FlatCAMCommon.py:1068 FlatCAMCommon.py:2497 +#: FlatCAMDB.py:624 FlatCAMDB.py:2053 msgid "Tool copied from Tools DB." msgstr "Unealta a fost copiată din DB Unelte." -#: FlatCAMCommon.py:1086 FlatCAMCommon.py:2516 +#: FlatCAMDB.py:642 FlatCAMDB.py:2072 msgid "Tool removed from Tools DB." msgstr "Unealta a fost ștearsă din DB Unelte." -#: FlatCAMCommon.py:1097 FlatCAMCommon.py:2527 +#: FlatCAMDB.py:653 FlatCAMDB.py:2083 msgid "Export Tools Database" msgstr "Export DB Unelte" -#: FlatCAMCommon.py:1100 FlatCAMCommon.py:2530 +#: FlatCAMDB.py:656 FlatCAMDB.py:2086 msgid "Tools_Database" msgstr "DB Unelte" -#: FlatCAMCommon.py:1137 FlatCAMCommon.py:1140 FlatCAMCommon.py:1192 -#: FlatCAMCommon.py:2567 FlatCAMCommon.py:2570 FlatCAMCommon.py:2622 +#: FlatCAMDB.py:693 FlatCAMDB.py:696 FlatCAMDB.py:748 FlatCAMDB.py:2123 +#: FlatCAMDB.py:2126 FlatCAMDB.py:2178 msgid "Failed to write Tools DB to file." msgstr "Eroare la scrierea DB Unelte în fișier." -#: FlatCAMCommon.py:1143 FlatCAMCommon.py:2573 +#: FlatCAMDB.py:699 FlatCAMDB.py:2129 msgid "Exported Tools DB to" msgstr "S-a exportat DB Unelte in" -#: FlatCAMCommon.py:1150 FlatCAMCommon.py:2580 +#: FlatCAMDB.py:706 FlatCAMDB.py:2136 msgid "Import FlatCAM Tools DB" msgstr "Importă DB Unelte" -#: FlatCAMCommon.py:1196 FlatCAMCommon.py:2626 +#: FlatCAMDB.py:752 FlatCAMDB.py:2182 msgid "Saved Tools DB." msgstr "DB unelte salvată." -#: FlatCAMCommon.py:1343 FlatCAMCommon.py:2807 +#: FlatCAMDB.py:899 FlatCAMDB.py:2365 msgid "No Tool/row selected in the Tools Database table" msgstr "Nu a fost selectat nici-o Unealta / rând în tabela DB Unelte" -#: FlatCAMCommon.py:1361 FlatCAMCommon.py:2824 +#: FlatCAMDB.py:917 FlatCAMDB.py:2382 msgid "Cancelled adding tool from DB." msgstr "S-a anulat adăugarea de Unealtă din DB Unelte." -#: FlatCAMCommon.py:1462 +#: FlatCAMDB.py:1018 msgid "Basic Geo Parameters" msgstr "Parametrii bază Geometrie" -#: FlatCAMCommon.py:1474 +#: FlatCAMDB.py:1030 msgid "Advanced Geo Parameters" msgstr "Param. Avansați Geometrie" -#: FlatCAMCommon.py:1486 +#: FlatCAMDB.py:1042 msgid "NCC Parameters" msgstr "Parametrii NCC" -#: FlatCAMCommon.py:1498 +#: FlatCAMDB.py:1054 msgid "Paint Parameters" msgstr "Parametrii Paint" -#: FlatCAMCommon.py:1629 flatcamGUI/ObjectUI.py:966 flatcamGUI/ObjectUI.py:1767 +#: FlatCAMDB.py:1185 flatcamGUI/ObjectUI.py:966 flatcamGUI/ObjectUI.py:1768 #: flatcamGUI/PreferencesUI.py:4378 flatcamGUI/PreferencesUI.py:7059 -#: flatcamTools/ToolSolderPaste.py:254 +#: flatcamTools/ToolSolderPaste.py:253 msgid "Feedrate X-Y" msgstr "Feedrate X-Y" -#: FlatCAMCommon.py:1631 +#: FlatCAMDB.py:1187 msgid "" "Feedrate X-Y. Feedrate\n" "The speed on XY plane used while cutting into material." @@ -2348,13 +2344,13 @@ msgstr "" "Avans X-Y. Avans.\n" "Viteza pe planul XY utilizat la tăierea în material." -#: FlatCAMCommon.py:1643 flatcamGUI/ObjectUI.py:981 flatcamGUI/ObjectUI.py:1781 +#: FlatCAMDB.py:1199 flatcamGUI/ObjectUI.py:981 flatcamGUI/ObjectUI.py:1782 #: flatcamGUI/PreferencesUI.py:3425 flatcamGUI/PreferencesUI.py:4393 -#: flatcamGUI/PreferencesUI.py:7072 flatcamTools/ToolSolderPaste.py:266 +#: flatcamGUI/PreferencesUI.py:7072 flatcamTools/ToolSolderPaste.py:265 msgid "Feedrate Z" msgstr "Feedrate Z" -#: FlatCAMCommon.py:1645 +#: FlatCAMDB.py:1201 msgid "" "Feedrate Z\n" "The speed on Z plane." @@ -2362,12 +2358,12 @@ msgstr "" "Feedrate Z. Avans Z.\n" "Viteza de deplasare in planul Z." -#: FlatCAMCommon.py:1843 flatcamGUI/ObjectUI.py:844 +#: FlatCAMDB.py:1399 flatcamGUI/ObjectUI.py:844 #: flatcamGUI/PreferencesUI.py:3264 flatcamTools/ToolNCC.py:341 msgid "Operation" msgstr "Operațiuni" -#: FlatCAMCommon.py:1845 flatcamTools/ToolNCC.py:343 +#: FlatCAMDB.py:1401 flatcamTools/ToolNCC.py:343 msgid "" "The 'Operation' can be:\n" "- Isolation -> will ensure that the non-copper clearing is always complete.\n" @@ -2380,24 +2376,23 @@ msgstr "" "Dacă nu are succes, atunci curățarea din cupru nu va reuși.\n" "- Curățare -> curățarea obișnuită de cupru." -#: FlatCAMCommon.py:1852 flatcamEditors/FlatCAMGrbEditor.py:2739 +#: FlatCAMDB.py:1408 flatcamEditors/FlatCAMGrbEditor.py:2739 #: flatcamGUI/GUIElements.py:2577 flatcamTools/ToolNCC.py:350 msgid "Clear" msgstr "Șterge" -#: FlatCAMCommon.py:1853 flatcamTools/ToolNCC.py:351 -#: flatcamTools/ToolNCC.py:1618 +#: FlatCAMDB.py:1409 flatcamTools/ToolNCC.py:351 flatcamTools/ToolNCC.py:1618 msgid "Isolation" msgstr "Tip de izolare" -#: FlatCAMCommon.py:1861 flatcamGUI/ObjectUI.py:408 flatcamGUI/ObjectUI.py:866 +#: FlatCAMDB.py:1417 flatcamGUI/ObjectUI.py:408 flatcamGUI/ObjectUI.py:866 #: flatcamGUI/PreferencesUI.py:2257 flatcamGUI/PreferencesUI.py:3280 #: flatcamGUI/PreferencesUI.py:4665 flatcamGUI/PreferencesUI.py:5416 #: flatcamTools/ToolNCC.py:359 msgid "Milling Type" msgstr "Tip Frezare" -#: FlatCAMCommon.py:1863 FlatCAMCommon.py:1871 flatcamGUI/PreferencesUI.py:5418 +#: FlatCAMDB.py:1419 FlatCAMDB.py:1427 flatcamGUI/PreferencesUI.py:5418 #: flatcamGUI/PreferencesUI.py:5426 flatcamTools/ToolNCC.py:361 #: flatcamTools/ToolNCC.py:369 msgid "" @@ -2410,26 +2405,25 @@ msgstr "" "uneltei\n" "- conventional -> pentru cazul când nu exista o compensare a 'backlash-ului'" -#: FlatCAMCommon.py:1868 flatcamGUI/ObjectUI.py:414 +#: FlatCAMDB.py:1424 flatcamGUI/ObjectUI.py:414 #: flatcamGUI/PreferencesUI.py:2264 flatcamGUI/PreferencesUI.py:4671 #: flatcamGUI/PreferencesUI.py:5423 flatcamTools/ToolNCC.py:366 msgid "Climb" msgstr "Urcare" -#: FlatCAMCommon.py:1869 flatcamGUI/ObjectUI.py:415 +#: FlatCAMDB.py:1425 flatcamGUI/ObjectUI.py:415 #: flatcamGUI/PreferencesUI.py:2265 flatcamGUI/PreferencesUI.py:4672 #: flatcamGUI/PreferencesUI.py:5424 flatcamTools/ToolNCC.py:367 msgid "Conventional" msgstr "Convenţional" -#: FlatCAMCommon.py:1881 FlatCAMCommon.py:1990 -#: flatcamEditors/FlatCAMGeoEditor.py:452 flatcamGUI/PreferencesUI.py:5461 -#: flatcamGUI/PreferencesUI.py:6002 flatcamTools/ToolNCC.py:382 -#: flatcamTools/ToolPaint.py:329 +#: FlatCAMDB.py:1437 FlatCAMDB.py:1546 flatcamEditors/FlatCAMGeoEditor.py:451 +#: flatcamGUI/PreferencesUI.py:5461 flatcamGUI/PreferencesUI.py:6002 +#: flatcamTools/ToolNCC.py:382 flatcamTools/ToolPaint.py:329 msgid "Overlap" msgstr "Rată suprapunere" -#: FlatCAMCommon.py:1883 flatcamGUI/PreferencesUI.py:5463 +#: FlatCAMDB.py:1439 flatcamGUI/PreferencesUI.py:5463 #: flatcamTools/ToolNCC.py:384 msgid "" "How much (percentage) of the tool width to overlap each tool pass.\n" @@ -2449,37 +2443,36 @@ msgstr "" "Valori mari= procesare lentă cât și o execuţie la fel de lentă a PCB-ului,\n" "datorită numărului mai mare de treceri-tăiere." -#: FlatCAMCommon.py:1902 FlatCAMCommon.py:2011 -#: flatcamEditors/FlatCAMGeoEditor.py:472 flatcamGUI/PreferencesUI.py:5481 -#: flatcamGUI/PreferencesUI.py:5723 flatcamGUI/PreferencesUI.py:6022 -#: flatcamGUI/PreferencesUI.py:7681 flatcamGUI/PreferencesUI.py:7838 -#: flatcamGUI/PreferencesUI.py:7923 flatcamGUI/PreferencesUI.py:8570 -#: flatcamGUI/PreferencesUI.py:8578 flatcamTools/ToolCopperThieving.py:112 -#: flatcamTools/ToolCopperThieving.py:363 flatcamTools/ToolCutOut.py:191 +#: FlatCAMDB.py:1458 FlatCAMDB.py:1567 flatcamEditors/FlatCAMGeoEditor.py:471 +#: flatcamGUI/PreferencesUI.py:5481 flatcamGUI/PreferencesUI.py:5723 +#: flatcamGUI/PreferencesUI.py:6022 flatcamGUI/PreferencesUI.py:7681 +#: flatcamGUI/PreferencesUI.py:7838 flatcamGUI/PreferencesUI.py:7923 +#: flatcamGUI/PreferencesUI.py:8570 flatcamGUI/PreferencesUI.py:8578 +#: flatcamTools/ToolCopperThieving.py:111 +#: flatcamTools/ToolCopperThieving.py:362 flatcamTools/ToolCutOut.py:190 #: flatcamTools/ToolFiducials.py:172 flatcamTools/ToolInvertGerber.py:88 #: flatcamTools/ToolInvertGerber.py:96 flatcamTools/ToolNCC.py:403 #: flatcamTools/ToolPaint.py:350 msgid "Margin" msgstr "Margine" -#: FlatCAMCommon.py:1904 flatcamGUI/PreferencesUI.py:5483 +#: FlatCAMDB.py:1460 flatcamGUI/PreferencesUI.py:5483 #: flatcamGUI/PreferencesUI.py:7683 flatcamGUI/PreferencesUI.py:7925 -#: flatcamGUI/PreferencesUI.py:7989 flatcamTools/ToolCopperThieving.py:114 +#: flatcamGUI/PreferencesUI.py:7989 flatcamTools/ToolCopperThieving.py:113 #: flatcamTools/ToolFiducials.py:174 flatcamTools/ToolFiducials.py:237 #: flatcamTools/ToolNCC.py:405 msgid "Bounding box margin." msgstr "Marginea pentru forma înconjurătoare." -#: FlatCAMCommon.py:1915 FlatCAMCommon.py:2026 -#: flatcamEditors/FlatCAMGeoEditor.py:486 flatcamGUI/PreferencesUI.py:5494 -#: flatcamGUI/PreferencesUI.py:6037 flatcamGUI/PreferencesUI.py:8204 -#: flatcamGUI/PreferencesUI.py:8417 flatcamTools/ToolExtractDrills.py:128 -#: flatcamTools/ToolNCC.py:416 flatcamTools/ToolPaint.py:365 -#: flatcamTools/ToolPunchGerber.py:139 +#: FlatCAMDB.py:1471 FlatCAMDB.py:1582 flatcamEditors/FlatCAMGeoEditor.py:485 +#: flatcamGUI/PreferencesUI.py:5494 flatcamGUI/PreferencesUI.py:6037 +#: flatcamGUI/PreferencesUI.py:8204 flatcamGUI/PreferencesUI.py:8417 +#: flatcamTools/ToolExtractDrills.py:128 flatcamTools/ToolNCC.py:416 +#: flatcamTools/ToolPaint.py:365 flatcamTools/ToolPunchGerber.py:139 msgid "Method" msgstr "Metodă" -#: FlatCAMCommon.py:1917 flatcamGUI/PreferencesUI.py:5496 +#: FlatCAMDB.py:1473 flatcamGUI/PreferencesUI.py:5496 #: flatcamTools/ToolNCC.py:418 msgid "" "Algorithm for copper clearing:\n" @@ -2492,19 +2485,17 @@ msgstr "" "- Punct-origine: înspre exterior porning de la punctul sămanță.\n" "- Linii: linii paralele." -#: FlatCAMCommon.py:1925 FlatCAMCommon.py:2040 -#: flatcamEditors/FlatCAMGeoEditor.py:500 flatcamGUI/PreferencesUI.py:5509 -#: flatcamGUI/PreferencesUI.py:6056 flatcamTools/ToolNCC.py:431 -#: flatcamTools/ToolNCC.py:2390 flatcamTools/ToolNCC.py:2419 -#: flatcamTools/ToolNCC.py:2688 flatcamTools/ToolNCC.py:2720 -#: flatcamTools/ToolPaint.py:390 flatcamTools/ToolPaint.py:1829 -#: tclCommands/TclCommandCopperClear.py:126 +#: FlatCAMDB.py:1481 FlatCAMDB.py:1596 flatcamEditors/FlatCAMGeoEditor.py:499 +#: flatcamGUI/PreferencesUI.py:5509 flatcamGUI/PreferencesUI.py:6056 +#: flatcamTools/ToolNCC.py:431 flatcamTools/ToolNCC.py:2390 +#: flatcamTools/ToolNCC.py:2419 flatcamTools/ToolNCC.py:2688 +#: flatcamTools/ToolNCC.py:2720 flatcamTools/ToolPaint.py:390 +#: flatcamTools/ToolPaint.py:1829 tclCommands/TclCommandCopperClear.py:126 #: tclCommands/TclCommandCopperClear.py:134 tclCommands/TclCommandPaint.py:125 msgid "Standard" msgstr "Standard" -#: FlatCAMCommon.py:1925 FlatCAMCommon.py:2040 -#: flatcamEditors/FlatCAMGeoEditor.py:500 +#: FlatCAMDB.py:1481 FlatCAMDB.py:1596 flatcamEditors/FlatCAMGeoEditor.py:499 #: flatcamEditors/FlatCAMGeoEditor.py:5156 flatcamGUI/PreferencesUI.py:5509 #: flatcamGUI/PreferencesUI.py:6056 flatcamTools/ToolNCC.py:431 #: flatcamTools/ToolPaint.py:390 flatcamTools/ToolPaint.py:699 @@ -2513,16 +2504,15 @@ msgstr "Standard" msgid "Lines" msgstr "Linii" -#: FlatCAMCommon.py:1933 FlatCAMCommon.py:2051 flatcamGUI/PreferencesUI.py:5516 +#: FlatCAMDB.py:1489 FlatCAMDB.py:1607 flatcamGUI/PreferencesUI.py:5516 #: flatcamGUI/PreferencesUI.py:6063 flatcamTools/ToolNCC.py:439 #: flatcamTools/ToolPaint.py:401 msgid "Connect" msgstr "Conectează" -#: FlatCAMCommon.py:1937 FlatCAMCommon.py:2054 -#: flatcamEditors/FlatCAMGeoEditor.py:509 flatcamGUI/PreferencesUI.py:5518 -#: flatcamGUI/PreferencesUI.py:6065 flatcamTools/ToolNCC.py:443 -#: flatcamTools/ToolPaint.py:404 +#: FlatCAMDB.py:1493 FlatCAMDB.py:1610 flatcamEditors/FlatCAMGeoEditor.py:508 +#: flatcamGUI/PreferencesUI.py:5518 flatcamGUI/PreferencesUI.py:6065 +#: flatcamTools/ToolNCC.py:443 flatcamTools/ToolPaint.py:404 msgid "" "Draw lines between resulting\n" "segments to minimize tool lifts." @@ -2531,16 +2521,15 @@ msgstr "" "rezultate pentru a minimiza miscarile\n" "de ridicare a uneltei." -#: FlatCAMCommon.py:1943 FlatCAMCommon.py:2058 flatcamGUI/PreferencesUI.py:5525 +#: FlatCAMDB.py:1499 FlatCAMDB.py:1614 flatcamGUI/PreferencesUI.py:5525 #: flatcamGUI/PreferencesUI.py:6071 flatcamTools/ToolNCC.py:449 #: flatcamTools/ToolPaint.py:408 msgid "Contour" msgstr "Contur" -#: FlatCAMCommon.py:1947 FlatCAMCommon.py:2061 -#: flatcamEditors/FlatCAMGeoEditor.py:519 flatcamGUI/PreferencesUI.py:5527 -#: flatcamGUI/PreferencesUI.py:6073 flatcamTools/ToolNCC.py:453 -#: flatcamTools/ToolPaint.py:411 +#: FlatCAMDB.py:1503 FlatCAMDB.py:1617 flatcamEditors/FlatCAMGeoEditor.py:518 +#: flatcamGUI/PreferencesUI.py:5527 flatcamGUI/PreferencesUI.py:6073 +#: flatcamTools/ToolNCC.py:453 flatcamTools/ToolPaint.py:411 msgid "" "Cut around the perimeter of the polygon\n" "to trim rough edges." @@ -2548,15 +2537,15 @@ msgstr "" "Taie de-a lungul perimetrului poligonului\n" "pentru a elimina bavurile." -#: FlatCAMCommon.py:1953 flatcamEditors/FlatCAMGeoEditor.py:613 +#: FlatCAMDB.py:1509 flatcamEditors/FlatCAMGeoEditor.py:612 #: flatcamEditors/FlatCAMGrbEditor.py:5145 flatcamGUI/ObjectUI.py:142 -#: flatcamGUI/ObjectUI.py:1495 flatcamGUI/ObjectUI.py:2244 +#: flatcamGUI/ObjectUI.py:1496 flatcamGUI/ObjectUI.py:2245 #: flatcamGUI/PreferencesUI.py:5534 flatcamGUI/PreferencesUI.py:6822 -#: flatcamTools/ToolNCC.py:459 flatcamTools/ToolTransform.py:29 +#: flatcamTools/ToolNCC.py:459 flatcamTools/ToolTransform.py:28 msgid "Offset" msgstr "Ofset" -#: FlatCAMCommon.py:1957 flatcamGUI/PreferencesUI.py:5536 +#: FlatCAMDB.py:1513 flatcamGUI/PreferencesUI.py:5536 #: flatcamTools/ToolNCC.py:463 msgid "" "If used, it will add an offset to the copper features.\n" @@ -2569,7 +2558,7 @@ msgstr "" "de traseele de cupru.\n" "Valoarea poate fi cuprinsă între 0 și 10 unități FlatCAM." -#: FlatCAMCommon.py:1992 flatcamEditors/FlatCAMGeoEditor.py:454 +#: FlatCAMDB.py:1548 flatcamEditors/FlatCAMGeoEditor.py:453 #: flatcamGUI/PreferencesUI.py:6004 flatcamTools/ToolPaint.py:331 msgid "" "How much (percentage) of the tool width to overlap each tool pass.\n" @@ -2589,7 +2578,7 @@ msgstr "" "Valori mari= procesare lentă cat și o execuţie la fel de lentă a PCB-ului,\n" "datorită numărului mai mare de treceri-tăiere." -#: FlatCAMCommon.py:2013 flatcamEditors/FlatCAMGeoEditor.py:474 +#: FlatCAMDB.py:1569 flatcamEditors/FlatCAMGeoEditor.py:473 #: flatcamGUI/PreferencesUI.py:6024 flatcamTools/ToolPaint.py:352 msgid "" "Distance by which to avoid\n" @@ -2600,7 +2589,7 @@ msgstr "" "poligonului care trebuie\n" "să fie >pictat<." -#: FlatCAMCommon.py:2028 flatcamGUI/PreferencesUI.py:6039 +#: FlatCAMDB.py:1584 flatcamGUI/PreferencesUI.py:6039 #: flatcamTools/ToolPaint.py:367 msgid "" "Algorithm for painting:\n" @@ -2622,500 +2611,23 @@ msgstr "" "mai sus\n" "intr-o ordine specificată." -#: FlatCAMCommon.py:2040 FlatCAMCommon.py:2042 flatcamGUI/PreferencesUI.py:6056 +#: FlatCAMDB.py:1596 FlatCAMDB.py:1598 flatcamGUI/PreferencesUI.py:6056 #: flatcamTools/ToolPaint.py:390 flatcamTools/ToolPaint.py:392 #: flatcamTools/ToolPaint.py:693 flatcamTools/ToolPaint.py:698 #: flatcamTools/ToolPaint.py:1871 tclCommands/TclCommandPaint.py:131 msgid "Laser_lines" msgstr "Linii-laser" -#: FlatCAMCommon.py:2040 flatcamGUI/PreferencesUI.py:6056 +#: FlatCAMDB.py:1596 flatcamGUI/PreferencesUI.py:6056 #: flatcamTools/ToolPaint.py:390 flatcamTools/ToolPaint.py:2022 #: tclCommands/TclCommandPaint.py:133 msgid "Combo" msgstr "Combinat" -#: FlatCAMCommon.py:2085 +#: FlatCAMDB.py:1641 msgid "Add Tool in DB" msgstr "Adăugați Unealta în DB" -#: FlatCAMObj.py:264 -msgid "Name changed from" -msgstr "Nume schimbat din" - -#: FlatCAMObj.py:264 -msgid "to" -msgstr "la" - -#: FlatCAMObj.py:275 -msgid "Offsetting..." -msgstr "Ofsetare..." - -#: FlatCAMObj.py:289 FlatCAMObj.py:294 -msgid "Scaling could not be executed." -msgstr "Scalarea nu a putut fi executată." - -#: FlatCAMObj.py:298 FlatCAMObj.py:306 -msgid "Scale done." -msgstr "Scalare efectuată." - -#: FlatCAMObj.py:304 -msgid "Scaling..." -msgstr "Scalare..." - -#: FlatCAMObj.py:322 -msgid "Skewing..." -msgstr "Deformare..." - -#: FlatCAMObj.py:743 FlatCAMObj.py:831 flatcamGUI/ObjectUI.py:449 -#: flatcamGUI/PreferencesUI.py:6527 flatcamTools/ToolAlignObjects.py:73 -#: flatcamTools/ToolAlignObjects.py:109 flatcamTools/ToolCalibration.py:196 -#: flatcamTools/ToolCalibration.py:631 flatcamTools/ToolCalibration.py:648 -#: flatcamTools/ToolCalibration.py:807 flatcamTools/ToolCalibration.py:815 -#: flatcamTools/ToolCopperThieving.py:145 -#: flatcamTools/ToolCopperThieving.py:159 -#: flatcamTools/ToolCopperThieving.py:605 flatcamTools/ToolCutOut.py:92 -#: flatcamTools/ToolDblSided.py:225 flatcamTools/ToolFilm.py:69 -#: flatcamTools/ToolFilm.py:102 flatcamTools/ToolFilm.py:549 -#: flatcamTools/ToolFilm.py:557 flatcamTools/ToolImage.py:49 -#: flatcamTools/ToolImage.py:252 flatcamTools/ToolImage.py:273 -#: flatcamTools/ToolNCC.py:96 flatcamTools/ToolNCC.py:558 -#: flatcamTools/ToolNCC.py:1295 flatcamTools/ToolPaint.py:502 -#: flatcamTools/ToolPaint.py:706 flatcamTools/ToolPanelize.py:118 -#: flatcamTools/ToolPanelize.py:204 flatcamTools/ToolPanelize.py:374 -#: flatcamTools/ToolPanelize.py:391 -msgid "Gerber" -msgstr "Gerber" - -#: FlatCAMObj.py:743 FlatCAMObj.py:831 flatcamGUI/FlatCAMGUI.py:2154 -#: flatcamGUI/ObjectUI.py:449 flatcamTools/ToolCalibration.py:631 -#: flatcamTools/ToolCalibration.py:648 flatcamTools/ToolCalibration.py:815 -#: flatcamTools/ToolCopperThieving.py:145 -#: flatcamTools/ToolCopperThieving.py:159 -#: flatcamTools/ToolCopperThieving.py:605 flatcamTools/ToolCutOut.py:93 -#: flatcamTools/ToolDblSided.py:227 flatcamTools/ToolFilm.py:69 -#: flatcamTools/ToolFilm.py:102 flatcamTools/ToolFilm.py:549 -#: flatcamTools/ToolFilm.py:557 flatcamTools/ToolImage.py:49 -#: flatcamTools/ToolImage.py:271 flatcamTools/ToolNCC.py:95 -#: flatcamTools/ToolNCC.py:558 flatcamTools/ToolNCC.py:1295 -#: flatcamTools/ToolPaint.py:502 flatcamTools/ToolPaint.py:706 -#: flatcamTools/ToolPanelize.py:118 flatcamTools/ToolPanelize.py:374 -#: flatcamTools/ToolPanelize.py:391 -msgid "Geometry" -msgstr "Geometrie" - -#: FlatCAMObj.py:755 FlatCAMObj.py:2957 FlatCAMObj.py:4421 -#: flatcamGUI/PreferencesUI.py:1646 flatcamGUI/PreferencesUI.py:3041 -msgid "Basic" -msgstr "Baza" - -#: FlatCAMObj.py:782 FlatCAMObj.py:2970 FlatCAMObj.py:4442 -#: flatcamGUI/PreferencesUI.py:1647 -msgid "Advanced" -msgstr "Avansat" - -#: FlatCAMObj.py:998 -msgid "Buffering solid geometry" -msgstr "Buferarea geometriei solide" - -#: FlatCAMObj.py:1001 camlib.py:979 flatcamGUI/PreferencesUI.py:2476 -#: flatcamTools/ToolCopperThieving.py:1017 -#: flatcamTools/ToolCopperThieving.py:1206 -#: flatcamTools/ToolCopperThieving.py:1218 flatcamTools/ToolNCC.py:2045 -#: flatcamTools/ToolNCC.py:2153 flatcamTools/ToolNCC.py:2167 -#: flatcamTools/ToolNCC.py:3098 flatcamTools/ToolNCC.py:3203 -#: flatcamTools/ToolNCC.py:3218 flatcamTools/ToolNCC.py:3484 -#: flatcamTools/ToolNCC.py:3585 flatcamTools/ToolNCC.py:3600 -msgid "Buffering" -msgstr "Buferare" - -#: FlatCAMObj.py:1007 -msgid "Done" -msgstr "Executat" - -#: FlatCAMObj.py:1032 FlatCAMObj.py:1058 -msgid "Operation could not be done." -msgstr "Operatia nu a putut fi executată." - -#: FlatCAMObj.py:1075 -msgid "Isolating..." -msgstr "Se izoleaza..." - -#: FlatCAMObj.py:1134 -msgid "Click on a polygon to isolate it." -msgstr "Faceți clic pe un poligon pentru a-l izola." - -#: FlatCAMObj.py:1173 FlatCAMObj.py:1277 flatcamTools/ToolPaint.py:1511 -msgid "Added polygon" -msgstr "S-a adăugat poligon" - -#: FlatCAMObj.py:1174 FlatCAMObj.py:1279 -msgid "Click to add next polygon or right click to start isolation." -msgstr "" -"Faceți clic pentru a adăuga următorul poligon sau faceți clic dreapta pentru " -"a începe izolarea." - -#: FlatCAMObj.py:1186 flatcamTools/ToolPaint.py:1525 -msgid "Removed polygon" -msgstr "Poligon eliminat" - -#: FlatCAMObj.py:1187 -msgid "Click to add/remove next polygon or right click to start isolation." -msgstr "" -"Faceți clic pentru a adăuga / elimina următorul poligon sau faceți clic " -"dreapta pentru a începe izolarea." - -#: FlatCAMObj.py:1192 flatcamTools/ToolPaint.py:1531 -msgid "No polygon detected under click position." -msgstr "Nu a fost detectat niciun poligon sub poziția clicului." - -#: FlatCAMObj.py:1213 flatcamTools/ToolPaint.py:1560 -msgid "List of single polygons is empty. Aborting." -msgstr "Lista Poligoanelor este goală. Intrerup." - -#: FlatCAMObj.py:1282 -msgid "No polygon in selection." -msgstr "Niciun poligon în selecție." - -#: FlatCAMObj.py:1394 FlatCAMObj.py:1542 FlatCAMObj.py:4055 FlatCAMObj.py:4375 -#: FlatCAMObj.py:4762 -msgid "Rough" -msgstr "Grosier" - -#: FlatCAMObj.py:1410 FlatCAMObj.py:1489 flatcamTools/ToolNCC.py:2081 -#: flatcamTools/ToolNCC.py:3132 flatcamTools/ToolNCC.py:3511 -msgid "Isolation geometry could not be generated." -msgstr "Geometria de izolare nu a fost posibil să fie generată." - -#: FlatCAMObj.py:1435 FlatCAMObj.py:1567 -msgid "Isolation geometry created" -msgstr "Geometria de izolare creată" - -#: FlatCAMObj.py:1444 FlatCAMObj.py:1574 -msgid "Subtracting Geo" -msgstr "Scădere Geo" - -#: FlatCAMObj.py:1899 -msgid "Plotting Apertures" -msgstr "Aperturile sunt in curs de afișare" - -#: FlatCAMObj.py:2753 flatcamEditors/FlatCAMExcEditor.py:2453 -msgid "Total Drills" -msgstr "Nr. Tot. Op. Găurire" - -#: FlatCAMObj.py:2784 flatcamEditors/FlatCAMExcEditor.py:2485 -msgid "Total Slots" -msgstr "Nr. Tot. Sloturi" - -#: FlatCAMObj.py:2857 FlatCAMObj.py:3069 FlatCAMObj.py:3085 FlatCAMObj.py:3089 -#: FlatCAMObj.py:4242 FlatCAMObj.py:4667 FlatCAMObj.py:4703 -#: flatcamGUI/ObjectUI.py:817 flatcamGUI/ObjectUI.py:1660 -#: flatcamTools/ToolNCC.py:331 flatcamTools/ToolNCC.py:797 -#: flatcamTools/ToolNCC.py:811 flatcamTools/ToolNCC.py:1191 -#: flatcamTools/ToolPaint.py:314 flatcamTools/ToolPaint.py:767 -#: flatcamTools/ToolPaint.py:779 flatcamTools/ToolPaint.py:1166 -msgid "Parameters for" -msgstr "Parametri pt" - -#: FlatCAMObj.py:2857 FlatCAMObj.py:3089 FlatCAMObj.py:4242 FlatCAMObj.py:4703 -#: flatcamTools/ToolNCC.py:811 flatcamTools/ToolNCC.py:1191 -#: flatcamTools/ToolPaint.py:779 flatcamTools/ToolPaint.py:1166 -msgid "Multiple Tools" -msgstr "Unelte multiple" - -#: FlatCAMObj.py:3069 -msgid "No Tool Selected" -msgstr "Nici-o Unealtă selectată" - -#: FlatCAMObj.py:3085 FlatCAMObj.py:3427 FlatCAMObj.py:4667 -#: flatcamEditors/FlatCAMGeoEditor.py:406 flatcamGUI/FlatCAMGUI.py:496 -#: flatcamGUI/FlatCAMGUI.py:1143 flatcamGUI/ObjectUI.py:817 -#: flatcamGUI/ObjectUI.py:1660 flatcamTools/ToolNCC.py:331 -#: flatcamTools/ToolNCC.py:797 flatcamTools/ToolPaint.py:314 -#: flatcamTools/ToolPaint.py:767 -msgid "Tool" -msgstr "Unealta" - -#: FlatCAMObj.py:3419 FlatCAMObj.py:3512 FlatCAMObj.py:3700 -msgid "Please select one or more tools from the list and try again." -msgstr "Selectează una sau mai multe unelte din lista și încearcă din nou." - -#: FlatCAMObj.py:3426 -msgid "Milling tool for DRILLS is larger than hole size. Cancelled." -msgstr "" -"Anulat. Freza pt frezarea găurilor este mai mare decat diametrul găurii." - -#: FlatCAMObj.py:3442 FlatCAMObj.py:3533 FlatCAMObj.py:3719 -#: tclCommands/TclCommandDrillcncjob.py:194 -msgid "Tool_nr" -msgstr "Nr. Unealtă" - -#: FlatCAMObj.py:3442 FlatCAMObj.py:3533 FlatCAMObj.py:3719 -#: flatcamEditors/FlatCAMExcEditor.py:1585 -#: flatcamEditors/FlatCAMExcEditor.py:3069 flatcamGUI/ObjectUI.py:780 -#: flatcamTools/ToolNCC.py:132 flatcamTools/ToolPaint.py:128 -#: flatcamTools/ToolPcbWizard.py:76 flatcamTools/ToolProperties.py:416 -#: flatcamTools/ToolProperties.py:476 flatcamTools/ToolSolderPaste.py:86 -#: tclCommands/TclCommandDrillcncjob.py:194 -msgid "Diameter" -msgstr "Diametru" - -#: FlatCAMObj.py:3442 FlatCAMObj.py:3533 FlatCAMObj.py:3719 -#: tclCommands/TclCommandDrillcncjob.py:194 -msgid "Drills_Nr" -msgstr "Nr. gaura" - -#: FlatCAMObj.py:3442 FlatCAMObj.py:3533 FlatCAMObj.py:3719 -#: tclCommands/TclCommandDrillcncjob.py:194 -msgid "Slots_Nr" -msgstr "Nr. slot" - -#: FlatCAMObj.py:3521 -msgid "Milling tool for SLOTS is larger than hole size. Cancelled." -msgstr "Anulat. Freza este mai mare decat diametrul slotului de frezat." - -#: FlatCAMObj.py:3626 FlatCAMObj.py:5451 -msgid "Focus Z" -msgstr "Focalizare Z" - -#: FlatCAMObj.py:3645 FlatCAMObj.py:5470 -msgid "Laser Power" -msgstr "Putere Laser" - -#: FlatCAMObj.py:3677 FlatCAMObj.py:5502 flatcamGUI/ObjectUI.py:1048 -#: flatcamGUI/ObjectUI.py:1839 flatcamGUI/PreferencesUI.py:4409 -msgid "Spindle speed" -msgstr "Viteza motor" - -#: FlatCAMObj.py:3776 FlatCAMObj.py:5911 FlatCAMObj.py:5915 FlatCAMObj.py:6060 -msgid "Generating CNC Code" -msgstr "CNC Code in curs de generare" - -#: FlatCAMObj.py:3966 flatcamTools/ToolNCC.py:918 flatcamTools/ToolPaint.py:844 -msgid "Current Tool parameters were applied to all tools." -msgstr "Parametrii Uneltei curente sunt aplicați la toate Uneltele." - -#: FlatCAMObj.py:4055 FlatCAMObj.py:5115 FlatCAMObj.py:5116 FlatCAMObj.py:5125 -msgid "Iso" -msgstr "Izo" - -#: FlatCAMObj.py:4055 -msgid "Finish" -msgstr "Finisare" - -#: FlatCAMObj.py:4410 -msgid "Add from Tool DB" -msgstr "Adaugă Unealta din DB Unelte" - -#: FlatCAMObj.py:4413 flatcamGUI/FlatCAMGUI.py:734 flatcamGUI/FlatCAMGUI.py:848 -#: flatcamGUI/FlatCAMGUI.py:1057 flatcamGUI/FlatCAMGUI.py:2123 -#: flatcamGUI/FlatCAMGUI.py:2267 flatcamGUI/FlatCAMGUI.py:2532 -#: flatcamGUI/FlatCAMGUI.py:2731 flatcamGUI/ObjectUI.py:1615 -#: flatcamTools/ToolPanelize.py:543 flatcamTools/ToolPanelize.py:570 -#: flatcamTools/ToolPanelize.py:669 flatcamTools/ToolPanelize.py:703 -#: flatcamTools/ToolPanelize.py:768 -msgid "Copy" -msgstr "Copiază" - -#: FlatCAMObj.py:4507 FlatCAMObj.py:4941 FlatCAMObj.py:5661 FlatCAMObj.py:6307 -#: flatcamEditors/FlatCAMExcEditor.py:2560 -#: flatcamEditors/FlatCAMGeoEditor.py:1077 -#: flatcamEditors/FlatCAMGeoEditor.py:1118 -#: flatcamEditors/FlatCAMGeoEditor.py:1146 -#: flatcamEditors/FlatCAMGeoEditor.py:1174 -#: flatcamEditors/FlatCAMGeoEditor.py:1218 -#: flatcamEditors/FlatCAMGeoEditor.py:1253 -#: flatcamEditors/FlatCAMGeoEditor.py:1281 flatcamTools/ToolNCC.py:1493 -#: flatcamTools/ToolPaint.py:1244 flatcamTools/ToolPaint.py:1415 -#: flatcamTools/ToolSolderPaste.py:883 flatcamTools/ToolSolderPaste.py:956 -msgid "Wrong value format entered, use a number." -msgstr "Valoare in format incorect, foloseşte un număr." - -#: FlatCAMObj.py:4781 -msgid "Tool added in Tool Table." -msgstr "Unealtă adăugată in Tabela de Unelte." - -#: FlatCAMObj.py:4890 FlatCAMObj.py:4899 -msgid "Failed. Select a tool to copy." -msgstr "Eșuat. Selectează o unealtă pt copiere." - -#: FlatCAMObj.py:4928 -msgid "Tool was copied in Tool Table." -msgstr "Unealta a fost copiata in Tabela de Unelte." - -#: FlatCAMObj.py:4955 -msgid "Tool was edited in Tool Table." -msgstr "Unealta a fost editata in Tabela de Unelte." - -#: FlatCAMObj.py:4984 FlatCAMObj.py:4993 -msgid "Failed. Select a tool to delete." -msgstr "Eșuat. Selectează o unealtă pentru ștergere." - -#: FlatCAMObj.py:5017 -msgid "Tool was deleted in Tool Table." -msgstr "Unealta a fost stearsa din Tabela de Unelte." - -#: FlatCAMObj.py:5523 -msgid "This Geometry can't be processed because it is" -msgstr "Acest obiect Geometrie nu poate fi procesat deoarece" - -#: FlatCAMObj.py:5523 -msgid "geometry" -msgstr "geometria" - -#: FlatCAMObj.py:5564 -msgid "Failed. No tool selected in the tool table ..." -msgstr "Eșuat. Nici-o unealtă nu este selectată in Tabela de Unelte ..." - -#: FlatCAMObj.py:5667 FlatCAMObj.py:5820 -msgid "" -"Tool Offset is selected in Tool Table but no value is provided.\n" -"Add a Tool Offset or change the Offset Type." -msgstr "" -"Un ofset pt unealtă este selectat in Tabela de Unelte dar nici-o val. nu " -"este oferita.\n" -"Adaugă un ofset pt unealtă sau schimbă Tipul Ofset." - -#: FlatCAMObj.py:5733 FlatCAMObj.py:5882 -msgid "G-Code parsing in progress..." -msgstr "Analiza codului G în curs ..." - -#: FlatCAMObj.py:5735 FlatCAMObj.py:5884 -msgid "G-Code parsing finished..." -msgstr "Analizarea codului G s-a terminat ..." - -#: FlatCAMObj.py:5743 -msgid "Finished G-Code processing" -msgstr "Prelucrarea G-Code terminată" - -#: FlatCAMObj.py:5745 FlatCAMObj.py:5896 -msgid "G-Code processing failed with error" -msgstr "Procesarea G-Code a eșuat cu eroarea" - -#: FlatCAMObj.py:5790 flatcamTools/ToolSolderPaste.py:1300 -msgid "Cancelled. Empty file, it has no geometry" -msgstr "Anulat. Fişier gol, nu are geometrie" - -#: FlatCAMObj.py:5894 FlatCAMObj.py:6055 -msgid "Finished G-Code processing..." -msgstr "Prelucrarea G-Code terminată ..." - -#: FlatCAMObj.py:5913 FlatCAMObj.py:5917 FlatCAMObj.py:6062 -msgid "CNCjob created" -msgstr "CNCjob creat" - -#: FlatCAMObj.py:6092 FlatCAMObj.py:6101 flatcamParsers/ParseGerber.py:1866 -#: flatcamParsers/ParseGerber.py:1876 -msgid "Scale factor has to be a number: integer or float." -msgstr "Factorul de scalare trebuie să fie un număr: natural sau real." - -#: FlatCAMObj.py:6164 -msgid "Geometry Scale done." -msgstr "Scalare Geometrie executată." - -#: FlatCAMObj.py:6181 flatcamParsers/ParseGerber.py:1992 -msgid "" -"An (x,y) pair of values are needed. Probable you entered only one value in " -"the Offset field." -msgstr "" -"O pereche de valori (x,y) este necesară. Probabil că ai introdus numai o " -"singură valoare in câmpul Offset." - -#: FlatCAMObj.py:6237 -msgid "Geometry Offset done." -msgstr "Ofset Geometrie executat." - -#: FlatCAMObj.py:6266 -msgid "" -"The Toolchange X,Y field in Edit -> Preferences has to be in the format (x, " -"y)\n" -"but now there is only one value, not two." -msgstr "" -"Parametrul >Schimbare Unealtă X, Y< in Editare -> Peferințele trebuie să fie " -"in formatul (x, y) \n" -"dar are o singură valoare in loc de două." - -#: FlatCAMObj.py:6956 FlatCAMObj.py:7802 FlatCAMObj.py:7999 -msgid "Basic" -msgstr "Baza" - -#: FlatCAMObj.py:6962 FlatCAMObj.py:7806 FlatCAMObj.py:8003 -msgid "Advanced" -msgstr "Avansat" - -#: FlatCAMObj.py:7005 -msgid "Plotting..." -msgstr "Se afișează..." - -#: FlatCAMObj.py:7034 FlatCAMObj.py:7039 flatcamTools/ToolSolderPaste.py:1498 -msgid "Export Machine Code ..." -msgstr "Exportă CNC Cod Masina ..." - -#: FlatCAMObj.py:7044 flatcamTools/ToolSolderPaste.py:1502 -msgid "Export Machine Code cancelled ..." -msgstr "Exportul Codului Mașina a fost anulat ..." - -#: FlatCAMObj.py:7065 -msgid "Machine Code file saved to" -msgstr "Fişierul cu cod CNC este salvat in" - -#: FlatCAMObj.py:7126 flatcamTools/ToolCalibration.py:1097 -msgid "Loaded Machine Code into Code Editor" -msgstr "S-a încărcat Codul Maşină în Editorul Cod" - -#: FlatCAMObj.py:7265 -msgid "This CNCJob object can't be processed because it is a" -msgstr "Acest obiect CNCJob nu poate fi procesat deoarece este un" - -#: FlatCAMObj.py:7267 -msgid "CNCJob object" -msgstr "Obiect CNCJob" - -#: FlatCAMObj.py:7447 -msgid "" -"G-code does not have a G94 code and we will not include the code in the " -"'Prepend to GCode' text box" -msgstr "" -"Codul G nu are un cod G94 și nu vom include codul din caseta de text „Adaugă " -"la GCode”" - -#: FlatCAMObj.py:7458 -msgid "Cancelled. The Toolchange Custom code is enabled but it's empty." -msgstr "" -"Anulat. Codul G-Code din Macro-ul Schimbare unealtă este activat dar nu " -"contine nimic." - -#: FlatCAMObj.py:7463 -msgid "Toolchange G-code was replaced by a custom code." -msgstr "G-Code-ul pt schimbare unealtă a fost inlocuit cu un cod pesonalizat." - -#: FlatCAMObj.py:7480 flatcamEditors/FlatCAMTextEditor.py:272 -#: flatcamTools/ToolSolderPaste.py:1529 -msgid "No such file or directory" -msgstr "Nu exista un aşa fişier sau director" - -#: FlatCAMObj.py:7494 flatcamEditors/FlatCAMTextEditor.py:284 -msgid "Saved to" -msgstr "Salvat in" - -#: FlatCAMObj.py:7511 FlatCAMObj.py:7521 -msgid "" -"The used preprocessor file has to have in it's name: 'toolchange_custom'" -msgstr "" -"Postprocesorul folosit trebuie să aibă in numele sau: 'toolchange_custom'" - -#: FlatCAMObj.py:7524 -msgid "There is no preprocessor file." -msgstr "Nu exista nici-un fişier postprocesor." - -#: FlatCAMObj.py:7821 -msgid "Script Editor" -msgstr "Editor Script" - -#: FlatCAMObj.py:8103 -msgid "Document Editor" -msgstr "Editor Documente" - #: FlatCAMProcess.py:172 msgid "processes running." msgstr "procesele care rulează." @@ -3142,28 +2654,39 @@ msgstr "Esti sigur că dorești să schimbi din limba curentă in" msgid "Apply Language ..." msgstr "Aplică Traducere ..." -#: ObjectCollection.py:506 +#: ObjectCollection.py:511 #, python-brace-format msgid "Object renamed from {old} to {new}" msgstr "Obiectul este redenumit din {old} in {new}" -#: ObjectCollection.py:972 +#: ObjectCollection.py:984 msgid "Cause of error" msgstr "Motivul erorii" -#: camlib.py:593 +#: camlib.py:597 msgid "self.solid_geometry is neither BaseGeometry or list." msgstr "self.solid_geometry nu este tip BaseGeometry sau tip listă." -#: camlib.py:968 +#: camlib.py:970 msgid "Pass" msgstr "Treceri" -#: camlib.py:988 +#: camlib.py:981 flatcamGUI/PreferencesUI.py:2476 +#: flatcamObjects/FlatCAMGerber.py:496 flatcamTools/ToolCopperThieving.py:1016 +#: flatcamTools/ToolCopperThieving.py:1205 +#: flatcamTools/ToolCopperThieving.py:1217 flatcamTools/ToolNCC.py:2045 +#: flatcamTools/ToolNCC.py:2153 flatcamTools/ToolNCC.py:2167 +#: flatcamTools/ToolNCC.py:3098 flatcamTools/ToolNCC.py:3203 +#: flatcamTools/ToolNCC.py:3218 flatcamTools/ToolNCC.py:3484 +#: flatcamTools/ToolNCC.py:3585 flatcamTools/ToolNCC.py:3600 +msgid "Buffering" +msgstr "Buferare" + +#: camlib.py:990 msgid "Get Exteriors" msgstr "Obtine Exterior" -#: camlib.py:991 +#: camlib.py:993 msgid "Get Interiors" msgstr "Obtine Interioare" @@ -3171,39 +2694,39 @@ msgstr "Obtine Interioare" msgid "Object was mirrored" msgstr "Obiectul a fost oglindit" -#: camlib.py:2175 +#: camlib.py:2174 msgid "Failed to mirror. No object selected" msgstr "Oglindire eșuată. Nici-un obiect nu este selectat" -#: camlib.py:2244 +#: camlib.py:2239 msgid "Object was rotated" msgstr "Obiectul a fost rotit" -#: camlib.py:2247 +#: camlib.py:2241 msgid "Failed to rotate. No object selected" msgstr "Rotaţie eșuată. Nici-un obiect nu este selectat" -#: camlib.py:2314 +#: camlib.py:2307 msgid "Object was skewed" msgstr "Obiectul a fost deformat" -#: camlib.py:2317 +#: camlib.py:2309 msgid "Failed to skew. No object selected" msgstr "Deformare eșuată. Nici-un obiect nu este selectat" -#: camlib.py:2392 +#: camlib.py:2385 msgid "Object was buffered" msgstr "Obiectul a fost tamponat" -#: camlib.py:2394 +#: camlib.py:2387 msgid "Failed to buffer. No object selected" msgstr "Eroare in a face buffer. Nu a fost selectat niciun obiect" -#: camlib.py:2599 +#: camlib.py:2594 msgid "There is no such parameter" msgstr "Nu exista un asemenea parametru" -#: camlib.py:2659 camlib.py:2892 camlib.py:3121 camlib.py:3343 +#: camlib.py:2654 camlib.py:2887 camlib.py:3116 camlib.py:3338 msgid "" "The Cut Z parameter has positive value. It is the depth value to drill into " "material.\n" @@ -3216,14 +2739,14 @@ 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:2667 camlib.py:2902 camlib.py:3131 camlib.py:3353 camlib.py:3639 -#: camlib.py:4008 +#: camlib.py:2662 camlib.py:2897 camlib.py:3126 camlib.py:3348 camlib.py:3634 +#: camlib.py:4020 msgid "The Cut Z parameter is zero. There will be no cut, skipping file" msgstr "" "Parametrul >Z tăiere< este nul. Nu va fi nici-o tăiere prin urmare nu " "procesam fişierul" -#: camlib.py:2678 camlib.py:3976 +#: camlib.py:2673 camlib.py:3988 msgid "" "The Toolchange X,Y field in Edit -> Preferences has to be in the format (x, " "y) \n" @@ -3233,7 +2756,7 @@ msgstr "" "in formatul (x, y) \n" "dar are o singură valoare in loc de doua. " -#: camlib.py:2687 camlib.py:3590 camlib.py:3958 +#: camlib.py:2682 camlib.py:3585 camlib.py:3970 msgid "" "The End Move X,Y field in Edit -> Preferences has to be in the format (x, y) " "but now there is only one value, not two." @@ -3241,31 +2764,31 @@ msgstr "" "Parametrul >Schimbare Unealtă X, Y< in Editare -> Peferințe trebuie să fie " "in formatul (x, y) dar are o singură valoare in loc de două." -#: camlib.py:2775 +#: camlib.py:2770 msgid "Creating a list of points to drill..." msgstr "Crearea unei liste de puncte pentru găurire ..." -#: camlib.py:2865 camlib.py:3737 camlib.py:4112 +#: camlib.py:2860 camlib.py:3732 camlib.py:4124 msgid "Starting G-Code" msgstr "Începând G-Code" -#: camlib.py:3006 camlib.py:3225 camlib.py:3389 camlib.py:3750 camlib.py:4123 +#: camlib.py:3001 camlib.py:3220 camlib.py:3384 camlib.py:3745 camlib.py:4135 msgid "Starting G-Code for tool with diameter" msgstr "Pornirea codului G pentru scula cu diametrul" -#: camlib.py:3089 camlib.py:3307 camlib.py:3475 +#: camlib.py:3084 camlib.py:3302 camlib.py:3470 msgid "G91 coordinates not implemented" msgstr "Coordonatele G91 nu au fost implementate" -#: camlib.py:3095 camlib.py:3314 camlib.py:3481 +#: camlib.py:3090 camlib.py:3309 camlib.py:3476 msgid "The loaded Excellon file has no drills" msgstr "Fişierul Excellon incărcat nu are găuri" -#: camlib.py:3504 +#: camlib.py:3499 msgid "Finished G-Code generation..." msgstr "Generarea G-Code finalizata ..." -#: camlib.py:3608 +#: camlib.py:3603 msgid "" "The Toolchange X,Y field in Edit -> Preferences has to be in the format (x, " "y) \n" @@ -3275,7 +2798,7 @@ msgstr "" "in formatul (x, y) \n" "dar are o singură valoare in loc de doua." -#: camlib.py:3622 camlib.py:3991 +#: camlib.py:3617 camlib.py:4003 msgid "" "Cut_Z parameter is None or zero. Most likely a bad combinations of other " "parameters." @@ -3283,7 +2806,7 @@ msgstr "" "Parametrul >Z tăiere< este None sau zero. Cel mai probabil o combinaţie " "nefericita de parametri." -#: camlib.py:3631 camlib.py:4000 +#: camlib.py:3626 camlib.py:4012 msgid "" "The Cut Z parameter has positive value. It is the depth value to cut into " "material.\n" @@ -3296,11 +2819,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:3644 camlib.py:4014 +#: camlib.py:3639 camlib.py:4026 msgid "Travel Z parameter is None or zero." msgstr "Parametrul >Z deplasare< este None sau zero." -#: camlib.py:3649 camlib.py:4019 +#: camlib.py:3644 camlib.py:4031 msgid "" "The Travel Z parameter has negative value. It is the height value to travel " "between cuts.\n" @@ -3313,36 +2836,36 @@ 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:3657 camlib.py:4027 +#: camlib.py:3652 camlib.py:4039 msgid "The Z Travel parameter is zero. This is dangerous, skipping file" msgstr "" "Parametrul >Z deplasare< este zero. Aceasta este periculos, prin urmare nu " "se procesează fişierul" -#: camlib.py:3676 camlib.py:4050 +#: camlib.py:3671 camlib.py:4062 msgid "Indexing geometry before generating G-Code..." msgstr "Geometria se indexeaza înainte de a genera G-Code..." -#: camlib.py:3820 camlib.py:4192 +#: camlib.py:3815 camlib.py:4204 msgid "Finished G-Code generation" msgstr "Generarea G-Code terminată" -#: camlib.py:3820 +#: camlib.py:3815 msgid "paths traced" msgstr "căi trasate" -#: camlib.py:3853 +#: camlib.py:3865 msgid "Expected a Geometry, got" msgstr "Se astepta o Geometrie, am primit in schimb" -#: camlib.py:3860 +#: camlib.py:3872 msgid "" "Trying to generate a CNC Job from a Geometry object without solid_geometry." msgstr "" "Se încearcă generarea unui CNC Job dintr-un obiect Geometrie fără atributul " "solid_geometry." -#: camlib.py:3901 +#: camlib.py:3913 msgid "" "The Tool Offset value is too negative to use for the current_geometry.\n" "Raise the value (in module) and try again." @@ -3351,185 +2874,185 @@ msgstr "" "current_geometry \n" "Mareste valoarea absoluta și încearcă din nou." -#: camlib.py:4192 +#: camlib.py:4204 msgid " paths traced." msgstr " căi trasate." -#: camlib.py:4220 +#: camlib.py:4232 msgid "There is no tool data in the SolderPaste geometry." msgstr "Nu există date cu privire la unealtă in Geometria SolderPaste." -#: camlib.py:4306 -msgid "Finished SolderPste G-Code generation" +#: camlib.py:4321 +msgid "Finished SolderPaste G-Code generation" msgstr "Generarea G-Code SolderPaste s-a terminat" -#: camlib.py:4306 +#: camlib.py:4321 msgid "paths traced." msgstr "căi trasate." -#: camlib.py:4566 +#: camlib.py:4581 msgid "Parsing GCode file. Number of lines" msgstr "Analizând fișierul GCode. Numărul de linii" -#: camlib.py:4673 +#: camlib.py:4688 msgid "Creating Geometry from the parsed GCode file. " msgstr "Crează un obiect tip Geometrie din fisierul GCode analizat. " -#: camlib.py:4816 camlib.py:5101 camlib.py:5204 camlib.py:5360 +#: camlib.py:4831 camlib.py:5123 camlib.py:5234 camlib.py:5390 msgid "G91 coordinates not implemented ..." msgstr "Coordonatele G91 nu au fost implementate ..." -#: camlib.py:4948 +#: camlib.py:4963 msgid "Unifying Geometry from parsed Geometry segments" msgstr "Se unifica Geometria din segmentele de Geometrie parsate" -#: flatcamEditors/FlatCAMExcEditor.py:51 flatcamEditors/FlatCAMExcEditor.py:75 -#: flatcamEditors/FlatCAMExcEditor.py:169 -#: flatcamEditors/FlatCAMExcEditor.py:386 -#: flatcamEditors/FlatCAMExcEditor.py:590 +#: flatcamEditors/FlatCAMExcEditor.py:50 flatcamEditors/FlatCAMExcEditor.py:74 +#: flatcamEditors/FlatCAMExcEditor.py:168 +#: flatcamEditors/FlatCAMExcEditor.py:385 +#: flatcamEditors/FlatCAMExcEditor.py:589 #: flatcamEditors/FlatCAMGrbEditor.py:241 #: flatcamEditors/FlatCAMGrbEditor.py:248 msgid "Click to place ..." msgstr "Click pt a plasa ..." -#: flatcamEditors/FlatCAMExcEditor.py:59 +#: flatcamEditors/FlatCAMExcEditor.py:58 msgid "To add a drill first select a tool" msgstr "" "Pentru a adăuga o operaţie de găurire mai intai selectează un burghiu " "(unealtă)" -#: flatcamEditors/FlatCAMExcEditor.py:123 +#: flatcamEditors/FlatCAMExcEditor.py:122 msgid "Done. Drill added." msgstr "Executat. Operaţie de găurire adăugată." -#: flatcamEditors/FlatCAMExcEditor.py:177 +#: flatcamEditors/FlatCAMExcEditor.py:176 msgid "To add an Drill Array first select a tool in Tool Table" msgstr "" "Pentru a adăuga o arie de operațiuni de găurire mai intai selectează un " "burghiu (unealtă)" -#: flatcamEditors/FlatCAMExcEditor.py:193 -#: flatcamEditors/FlatCAMExcEditor.py:416 -#: flatcamEditors/FlatCAMExcEditor.py:637 -#: flatcamEditors/FlatCAMExcEditor.py:1152 -#: flatcamEditors/FlatCAMExcEditor.py:1179 +#: flatcamEditors/FlatCAMExcEditor.py:192 +#: flatcamEditors/FlatCAMExcEditor.py:415 +#: flatcamEditors/FlatCAMExcEditor.py:636 +#: flatcamEditors/FlatCAMExcEditor.py:1151 +#: flatcamEditors/FlatCAMExcEditor.py:1178 #: flatcamEditors/FlatCAMGrbEditor.py:471 #: flatcamEditors/FlatCAMGrbEditor.py:1935 #: flatcamEditors/FlatCAMGrbEditor.py:1965 msgid "Click on target location ..." msgstr "Click pe locatia tintă ..." -#: flatcamEditors/FlatCAMExcEditor.py:212 +#: flatcamEditors/FlatCAMExcEditor.py:211 msgid "Click on the Drill Circular Array Start position" msgstr "Click pe punctul de Start al ariei de operațiuni de găurire" -#: flatcamEditors/FlatCAMExcEditor.py:234 -#: flatcamEditors/FlatCAMExcEditor.py:678 +#: flatcamEditors/FlatCAMExcEditor.py:233 +#: flatcamEditors/FlatCAMExcEditor.py:677 #: flatcamEditors/FlatCAMGrbEditor.py:516 msgid "The value is not Float. Check for comma instead of dot separator." msgstr "" "Valoarea nu este număr Real. Verifică să nu fi folosit virgula in loc de " "punct ca și separator decimal." -#: flatcamEditors/FlatCAMExcEditor.py:238 +#: flatcamEditors/FlatCAMExcEditor.py:237 msgid "The value is mistyped. Check the value" msgstr "Valoarea este gresită. Verifică ce ai introdus" -#: flatcamEditors/FlatCAMExcEditor.py:337 +#: flatcamEditors/FlatCAMExcEditor.py:336 msgid "Too many drills for the selected spacing angle." msgstr "Prea multe operațiuni de găurire pentru unghiul selectat." -#: flatcamEditors/FlatCAMExcEditor.py:355 +#: flatcamEditors/FlatCAMExcEditor.py:354 msgid "Done. Drill Array added." msgstr "Executat. Aria de operațiuni de găurire a fost adăugată." -#: flatcamEditors/FlatCAMExcEditor.py:395 +#: flatcamEditors/FlatCAMExcEditor.py:394 msgid "To add a slot first select a tool" msgstr "Pentru a adăuga un slot mai întâi, selectați o unealtă" -#: flatcamEditors/FlatCAMExcEditor.py:455 -#: flatcamEditors/FlatCAMExcEditor.py:462 -#: flatcamEditors/FlatCAMExcEditor.py:743 -#: flatcamEditors/FlatCAMExcEditor.py:750 +#: flatcamEditors/FlatCAMExcEditor.py:454 +#: flatcamEditors/FlatCAMExcEditor.py:461 +#: flatcamEditors/FlatCAMExcEditor.py:742 +#: flatcamEditors/FlatCAMExcEditor.py:749 msgid "Value is missing or wrong format. Add it and retry." msgstr "" "Valoarea lipsește sau formatul greșit. Adăugați-l și încercați din nou." -#: flatcamEditors/FlatCAMExcEditor.py:560 +#: flatcamEditors/FlatCAMExcEditor.py:559 msgid "Done. Adding Slot completed." msgstr "Terminat. Adăugarea slotului finalizată." -#: flatcamEditors/FlatCAMExcEditor.py:598 +#: flatcamEditors/FlatCAMExcEditor.py:597 msgid "To add an Slot Array first select a tool in Tool Table" msgstr "" "Pentru a adăuga o arie de sloturi, selectați mai întâi o unealtă din tabelul " "de unelte" -#: flatcamEditors/FlatCAMExcEditor.py:656 +#: flatcamEditors/FlatCAMExcEditor.py:655 msgid "Click on the Slot Circular Array Start position" msgstr "Faceți clic pe poziția de pornire a ariei circulare de slotuluri" -#: flatcamEditors/FlatCAMExcEditor.py:681 +#: flatcamEditors/FlatCAMExcEditor.py:680 #: flatcamEditors/FlatCAMGrbEditor.py:519 msgid "The value is mistyped. Check the value." msgstr "Valoarea este gresită. Verifică ce ai introdus." -#: flatcamEditors/FlatCAMExcEditor.py:860 +#: flatcamEditors/FlatCAMExcEditor.py:859 msgid "Too many Slots for the selected spacing angle." msgstr "Prea multe sloturi pentru unghiul de distanțare selectat." -#: flatcamEditors/FlatCAMExcEditor.py:883 +#: flatcamEditors/FlatCAMExcEditor.py:882 msgid "Done. Slot Array added." msgstr "Terminat. S-a adăugat aria de sloturi." -#: flatcamEditors/FlatCAMExcEditor.py:905 +#: flatcamEditors/FlatCAMExcEditor.py:904 msgid "Click on the Drill(s) to resize ..." msgstr "" "Click pe operațiunile de găurire care se dorește să fie redimensionate ..." -#: flatcamEditors/FlatCAMExcEditor.py:935 +#: flatcamEditors/FlatCAMExcEditor.py:934 msgid "Resize drill(s) failed. Please enter a diameter for resize." msgstr "" "Redimensionarea operațiunilor de găurire a eșuat. Adaugă o valoare pentru " "dimetrul la care se face redimensionarea." -#: flatcamEditors/FlatCAMExcEditor.py:1113 +#: flatcamEditors/FlatCAMExcEditor.py:1112 msgid "Done. Drill/Slot Resize completed." msgstr "Executat. Redimensionarea Perforării / slotului finalizată." -#: flatcamEditors/FlatCAMExcEditor.py:1116 +#: flatcamEditors/FlatCAMExcEditor.py:1115 msgid "Cancelled. No drills/slots selected for resize ..." msgstr "Anulat. Nu au fost selectate găuri / sloturi pentru redimensionare ..." -#: flatcamEditors/FlatCAMExcEditor.py:1154 +#: flatcamEditors/FlatCAMExcEditor.py:1153 #: flatcamEditors/FlatCAMGrbEditor.py:1937 msgid "Click on reference location ..." msgstr "Click pe locatia de referinţă ..." -#: flatcamEditors/FlatCAMExcEditor.py:1211 +#: flatcamEditors/FlatCAMExcEditor.py:1210 msgid "Done. Drill(s) Move completed." msgstr "Executat. Operatiile de găurire au fost mutate." -#: flatcamEditors/FlatCAMExcEditor.py:1319 +#: flatcamEditors/FlatCAMExcEditor.py:1318 msgid "Done. Drill(s) copied." msgstr "Executat. Operatiile de găurire au fost copiate." -#: flatcamEditors/FlatCAMExcEditor.py:1558 flatcamGUI/PreferencesUI.py:3829 +#: flatcamEditors/FlatCAMExcEditor.py:1557 flatcamGUI/PreferencesUI.py:3829 msgid "Excellon Editor" msgstr "Editor Excellon" -#: flatcamEditors/FlatCAMExcEditor.py:1565 +#: flatcamEditors/FlatCAMExcEditor.py:1564 #: flatcamEditors/FlatCAMGrbEditor.py:2460 msgid "Name:" msgstr "Nume:" -#: flatcamEditors/FlatCAMExcEditor.py:1571 flatcamGUI/ObjectUI.py:760 -#: flatcamGUI/ObjectUI.py:1463 flatcamTools/ToolNCC.py:120 -#: flatcamTools/ToolPaint.py:115 flatcamTools/ToolSolderPaste.py:75 +#: flatcamEditors/FlatCAMExcEditor.py:1570 flatcamGUI/ObjectUI.py:760 +#: flatcamGUI/ObjectUI.py:1464 flatcamTools/ToolNCC.py:120 +#: flatcamTools/ToolPaint.py:115 flatcamTools/ToolSolderPaste.py:74 msgid "Tools Table" msgstr "Tabela Unelte" -#: flatcamEditors/FlatCAMExcEditor.py:1573 flatcamGUI/ObjectUI.py:762 +#: flatcamEditors/FlatCAMExcEditor.py:1572 flatcamGUI/ObjectUI.py:762 msgid "" "Tools in this Excellon object\n" "when are used for drilling." @@ -3537,11 +3060,22 @@ msgstr "" "Burghie (unelte) in acest obiect Excellon\n" "când se face găurire." -#: flatcamEditors/FlatCAMExcEditor.py:1593 +#: flatcamEditors/FlatCAMExcEditor.py:1584 +#: flatcamEditors/FlatCAMExcEditor.py:3066 flatcamGUI/ObjectUI.py:780 +#: flatcamObjects/FlatCAMExcellon.py:1098 +#: flatcamObjects/FlatCAMExcellon.py:1188 +#: flatcamObjects/FlatCAMExcellon.py:1373 flatcamTools/ToolNCC.py:132 +#: flatcamTools/ToolPaint.py:128 flatcamTools/ToolPcbWizard.py:76 +#: flatcamTools/ToolProperties.py:416 flatcamTools/ToolProperties.py:476 +#: flatcamTools/ToolSolderPaste.py:85 tclCommands/TclCommandDrillcncjob.py:193 +msgid "Diameter" +msgstr "Diametru" + +#: flatcamEditors/FlatCAMExcEditor.py:1592 msgid "Add/Delete Tool" msgstr "Adaugă/Șterge Unealta" -#: flatcamEditors/FlatCAMExcEditor.py:1595 +#: flatcamEditors/FlatCAMExcEditor.py:1594 msgid "" "Add/Delete a tool to the tool list\n" "for this Excellon object." @@ -3549,16 +3083,16 @@ msgstr "" "Adaugă/Șterge o unealtă la lista de unelte\n" "pentru acest obiect Excellon." -#: flatcamEditors/FlatCAMExcEditor.py:1607 flatcamGUI/ObjectUI.py:1583 +#: flatcamEditors/FlatCAMExcEditor.py:1606 flatcamGUI/ObjectUI.py:1584 #: flatcamGUI/PreferencesUI.py:3860 msgid "Diameter for the new tool" msgstr "Diametru pentru noua unealtă (burghiu, freza)" -#: flatcamEditors/FlatCAMExcEditor.py:1617 +#: flatcamEditors/FlatCAMExcEditor.py:1616 msgid "Add Tool" msgstr "Adaugă Unealta" -#: flatcamEditors/FlatCAMExcEditor.py:1619 +#: flatcamEditors/FlatCAMExcEditor.py:1618 msgid "" "Add a new tool to the tool list\n" "with the diameter specified above." @@ -3566,11 +3100,11 @@ msgstr "" "Adaugă o unealtă noua la lista de unelte\n" "cu diametrul specificat deasupra." -#: flatcamEditors/FlatCAMExcEditor.py:1631 +#: flatcamEditors/FlatCAMExcEditor.py:1630 msgid "Delete Tool" msgstr "Șterge Unealta" -#: flatcamEditors/FlatCAMExcEditor.py:1633 +#: flatcamEditors/FlatCAMExcEditor.py:1632 msgid "" "Delete a tool in the tool list\n" "by selecting a row in the tool table." @@ -3578,42 +3112,42 @@ msgstr "" "Șterge o unealtă in lista de unelte\n" "prin selectarea unei linii in tabela de unelte." -#: flatcamEditors/FlatCAMExcEditor.py:1651 flatcamGUI/FlatCAMGUI.py:2004 +#: flatcamEditors/FlatCAMExcEditor.py:1650 flatcamGUI/FlatCAMGUI.py:2004 msgid "Resize Drill(s)" msgstr "Redimensionare operațiuni de găurire" -#: flatcamEditors/FlatCAMExcEditor.py:1653 +#: flatcamEditors/FlatCAMExcEditor.py:1652 msgid "Resize a drill or a selection of drills." msgstr "" "Redimensionează o operaţie de găurire sau o selecţie de operațiuni de " "găurire." -#: flatcamEditors/FlatCAMExcEditor.py:1660 +#: flatcamEditors/FlatCAMExcEditor.py:1659 msgid "Resize Dia" msgstr "Redimens. Dia" -#: flatcamEditors/FlatCAMExcEditor.py:1662 +#: flatcamEditors/FlatCAMExcEditor.py:1661 msgid "Diameter to resize to." msgstr "Diametrul la care se face redimensionarea." -#: flatcamEditors/FlatCAMExcEditor.py:1673 +#: flatcamEditors/FlatCAMExcEditor.py:1672 msgid "Resize" msgstr "Redimensionează" -#: flatcamEditors/FlatCAMExcEditor.py:1675 +#: flatcamEditors/FlatCAMExcEditor.py:1674 msgid "Resize drill(s)" msgstr "Redimensionează op. de găurire." -#: flatcamEditors/FlatCAMExcEditor.py:1700 flatcamGUI/FlatCAMGUI.py:2003 +#: flatcamEditors/FlatCAMExcEditor.py:1699 flatcamGUI/FlatCAMGUI.py:2003 #: flatcamGUI/FlatCAMGUI.py:2255 msgid "Add Drill Array" msgstr "Adaugă o arie de op. găurire" -#: flatcamEditors/FlatCAMExcEditor.py:1702 +#: flatcamEditors/FlatCAMExcEditor.py:1701 msgid "Add an array of drills (linear or circular array)" msgstr "Adaugă o arie de operațiuni de găurire (arie lineara sau circulara)." -#: flatcamEditors/FlatCAMExcEditor.py:1708 +#: flatcamEditors/FlatCAMExcEditor.py:1707 msgid "" "Select the type of drills array to create.\n" "It can be Linear X(Y) or Circular" @@ -3621,14 +3155,14 @@ msgstr "" "Selectează tipul de arii de operațiuni de găurire.\n" "Poate fi Liniar X(Y) sau Circular" -#: flatcamEditors/FlatCAMExcEditor.py:1711 -#: flatcamEditors/FlatCAMExcEditor.py:1925 +#: flatcamEditors/FlatCAMExcEditor.py:1710 +#: flatcamEditors/FlatCAMExcEditor.py:1924 #: flatcamEditors/FlatCAMGrbEditor.py:2772 msgid "Linear" msgstr "Liniar" -#: flatcamEditors/FlatCAMExcEditor.py:1712 -#: flatcamEditors/FlatCAMExcEditor.py:1926 +#: flatcamEditors/FlatCAMExcEditor.py:1711 +#: flatcamEditors/FlatCAMExcEditor.py:1925 #: flatcamEditors/FlatCAMGrbEditor.py:2773 flatcamGUI/ObjectUI.py:315 #: flatcamGUI/PreferencesUI.py:5340 flatcamGUI/PreferencesUI.py:5909 #: flatcamGUI/PreferencesUI.py:7971 flatcamGUI/PreferencesUI.py:8151 @@ -3640,27 +3174,27 @@ msgstr "Liniar" msgid "Circular" msgstr "Circular" -#: flatcamEditors/FlatCAMExcEditor.py:1720 flatcamGUI/PreferencesUI.py:3871 +#: flatcamEditors/FlatCAMExcEditor.py:1719 flatcamGUI/PreferencesUI.py:3871 msgid "Nr of drills" msgstr "Nr. op. găurire" -#: flatcamEditors/FlatCAMExcEditor.py:1721 flatcamGUI/PreferencesUI.py:3873 +#: flatcamEditors/FlatCAMExcEditor.py:1720 flatcamGUI/PreferencesUI.py:3873 msgid "Specify how many drills to be in the array." msgstr "Specifica cate operațiuni de găurire să fie incluse in arie." -#: flatcamEditors/FlatCAMExcEditor.py:1739 -#: flatcamEditors/FlatCAMExcEditor.py:1789 -#: flatcamEditors/FlatCAMExcEditor.py:1861 -#: flatcamEditors/FlatCAMExcEditor.py:1954 -#: flatcamEditors/FlatCAMExcEditor.py:2005 +#: flatcamEditors/FlatCAMExcEditor.py:1738 +#: flatcamEditors/FlatCAMExcEditor.py:1788 +#: flatcamEditors/FlatCAMExcEditor.py:1860 +#: flatcamEditors/FlatCAMExcEditor.py:1953 +#: flatcamEditors/FlatCAMExcEditor.py:2004 #: flatcamEditors/FlatCAMGrbEditor.py:1571 #: flatcamEditors/FlatCAMGrbEditor.py:2801 #: flatcamEditors/FlatCAMGrbEditor.py:2850 flatcamGUI/PreferencesUI.py:3981 msgid "Direction" msgstr "Direcţie" -#: flatcamEditors/FlatCAMExcEditor.py:1741 -#: flatcamEditors/FlatCAMExcEditor.py:1956 +#: flatcamEditors/FlatCAMExcEditor.py:1740 +#: flatcamEditors/FlatCAMExcEditor.py:1955 #: flatcamEditors/FlatCAMGrbEditor.py:2803 flatcamGUI/PreferencesUI.py:2718 #: flatcamGUI/PreferencesUI.py:3889 flatcamGUI/PreferencesUI.py:4037 msgid "" @@ -3674,9 +3208,9 @@ msgstr "" "- 'Y' - pe axa verticala sau \n" "- 'Unghi' - un unghi particular pentru inclinatia ariei" -#: flatcamEditors/FlatCAMExcEditor.py:1748 -#: flatcamEditors/FlatCAMExcEditor.py:1870 -#: flatcamEditors/FlatCAMExcEditor.py:1963 +#: flatcamEditors/FlatCAMExcEditor.py:1747 +#: flatcamEditors/FlatCAMExcEditor.py:1869 +#: flatcamEditors/FlatCAMExcEditor.py:1962 #: flatcamEditors/FlatCAMGrbEditor.py:2810 flatcamGUI/PreferencesUI.py:2724 #: flatcamGUI/PreferencesUI.py:3895 flatcamGUI/PreferencesUI.py:3990 #: flatcamGUI/PreferencesUI.py:4043 flatcamGUI/PreferencesUI.py:6341 @@ -3684,9 +3218,9 @@ msgstr "" msgid "X" msgstr "X" -#: flatcamEditors/FlatCAMExcEditor.py:1749 -#: flatcamEditors/FlatCAMExcEditor.py:1871 -#: flatcamEditors/FlatCAMExcEditor.py:1964 +#: flatcamEditors/FlatCAMExcEditor.py:1748 +#: flatcamEditors/FlatCAMExcEditor.py:1870 +#: flatcamEditors/FlatCAMExcEditor.py:1963 #: flatcamEditors/FlatCAMGrbEditor.py:2811 flatcamGUI/PreferencesUI.py:2725 #: flatcamGUI/PreferencesUI.py:3896 flatcamGUI/PreferencesUI.py:3991 #: flatcamGUI/PreferencesUI.py:4044 flatcamGUI/PreferencesUI.py:6342 @@ -3694,14 +3228,14 @@ msgstr "X" msgid "Y" msgstr "Y" -#: flatcamEditors/FlatCAMExcEditor.py:1750 -#: flatcamEditors/FlatCAMExcEditor.py:1767 -#: flatcamEditors/FlatCAMExcEditor.py:1801 -#: flatcamEditors/FlatCAMExcEditor.py:1872 -#: flatcamEditors/FlatCAMExcEditor.py:1876 -#: flatcamEditors/FlatCAMExcEditor.py:1965 -#: flatcamEditors/FlatCAMExcEditor.py:1983 -#: flatcamEditors/FlatCAMExcEditor.py:2017 +#: flatcamEditors/FlatCAMExcEditor.py:1749 +#: flatcamEditors/FlatCAMExcEditor.py:1766 +#: flatcamEditors/FlatCAMExcEditor.py:1800 +#: flatcamEditors/FlatCAMExcEditor.py:1871 +#: flatcamEditors/FlatCAMExcEditor.py:1875 +#: flatcamEditors/FlatCAMExcEditor.py:1964 +#: flatcamEditors/FlatCAMExcEditor.py:1982 +#: flatcamEditors/FlatCAMExcEditor.py:2016 #: flatcamEditors/FlatCAMGrbEditor.py:2812 #: flatcamEditors/FlatCAMGrbEditor.py:2829 #: flatcamEditors/FlatCAMGrbEditor.py:2865 flatcamGUI/PreferencesUI.py:2726 @@ -3710,26 +3244,26 @@ msgstr "Y" #: flatcamGUI/PreferencesUI.py:3997 flatcamGUI/PreferencesUI.py:4045 #: flatcamGUI/PreferencesUI.py:4066 flatcamGUI/PreferencesUI.py:6733 #: flatcamTools/ToolDistance.py:120 flatcamTools/ToolDistanceMin.py:69 -#: flatcamTools/ToolTransform.py:61 +#: flatcamTools/ToolTransform.py:60 msgid "Angle" msgstr "Unghi" -#: flatcamEditors/FlatCAMExcEditor.py:1754 -#: flatcamEditors/FlatCAMExcEditor.py:1969 +#: flatcamEditors/FlatCAMExcEditor.py:1753 +#: flatcamEditors/FlatCAMExcEditor.py:1968 #: flatcamEditors/FlatCAMGrbEditor.py:2816 flatcamGUI/PreferencesUI.py:2732 #: flatcamGUI/PreferencesUI.py:3903 flatcamGUI/PreferencesUI.py:4051 msgid "Pitch" msgstr "Pas" -#: flatcamEditors/FlatCAMExcEditor.py:1756 -#: flatcamEditors/FlatCAMExcEditor.py:1971 +#: flatcamEditors/FlatCAMExcEditor.py:1755 +#: flatcamEditors/FlatCAMExcEditor.py:1970 #: flatcamEditors/FlatCAMGrbEditor.py:2818 flatcamGUI/PreferencesUI.py:2734 #: flatcamGUI/PreferencesUI.py:3905 flatcamGUI/PreferencesUI.py:4053 msgid "Pitch = Distance between elements of the array." msgstr "Pas = Distanta între elementele ariei." -#: flatcamEditors/FlatCAMExcEditor.py:1769 -#: flatcamEditors/FlatCAMExcEditor.py:1985 +#: flatcamEditors/FlatCAMExcEditor.py:1768 +#: flatcamEditors/FlatCAMExcEditor.py:1984 msgid "" "Angle at which the linear array is placed.\n" "The precision is of max 2 decimals.\n" @@ -3741,8 +3275,8 @@ msgstr "" "Val minima este: -360grade.\n" "Val maxima este: 360.00 grade." -#: flatcamEditors/FlatCAMExcEditor.py:1790 -#: flatcamEditors/FlatCAMExcEditor.py:2006 +#: flatcamEditors/FlatCAMExcEditor.py:1789 +#: flatcamEditors/FlatCAMExcEditor.py:2005 #: flatcamEditors/FlatCAMGrbEditor.py:2852 msgid "" "Direction for circular array.Can be CW = clockwise or CCW = counter " @@ -3751,24 +3285,24 @@ msgstr "" "Directia pentru aria circulară. Poate fi CW = in sensul acelor de ceasornic " "sau CCW = invers acelor de ceasornic." -#: flatcamEditors/FlatCAMExcEditor.py:1797 -#: flatcamEditors/FlatCAMExcEditor.py:2013 +#: flatcamEditors/FlatCAMExcEditor.py:1796 +#: flatcamEditors/FlatCAMExcEditor.py:2012 #: flatcamEditors/FlatCAMGrbEditor.py:2860 flatcamGUI/PreferencesUI.py:2766 #: flatcamGUI/PreferencesUI.py:3646 flatcamGUI/PreferencesUI.py:3939 #: flatcamGUI/PreferencesUI.py:4089 flatcamGUI/PreferencesUI.py:4581 msgid "CW" msgstr "Orar" -#: flatcamEditors/FlatCAMExcEditor.py:1798 -#: flatcamEditors/FlatCAMExcEditor.py:2014 +#: flatcamEditors/FlatCAMExcEditor.py:1797 +#: flatcamEditors/FlatCAMExcEditor.py:2013 #: flatcamEditors/FlatCAMGrbEditor.py:2861 flatcamGUI/PreferencesUI.py:2767 #: flatcamGUI/PreferencesUI.py:3647 flatcamGUI/PreferencesUI.py:3940 #: flatcamGUI/PreferencesUI.py:4090 flatcamGUI/PreferencesUI.py:4582 msgid "CCW" msgstr "Antiorar" -#: flatcamEditors/FlatCAMExcEditor.py:1802 -#: flatcamEditors/FlatCAMExcEditor.py:2018 +#: flatcamEditors/FlatCAMExcEditor.py:1801 +#: flatcamEditors/FlatCAMExcEditor.py:2017 #: flatcamEditors/FlatCAMGrbEditor.py:2867 flatcamGUI/PreferencesUI.py:2746 #: flatcamGUI/PreferencesUI.py:2775 flatcamGUI/PreferencesUI.py:3918 #: flatcamGUI/PreferencesUI.py:3948 flatcamGUI/PreferencesUI.py:4068 @@ -3778,11 +3312,11 @@ msgstr "" "Unghiul la care fiecare element al ariei circulare este plasat fata de " "originea ariei." -#: flatcamEditors/FlatCAMExcEditor.py:1836 +#: flatcamEditors/FlatCAMExcEditor.py:1835 msgid "Slot Parameters" msgstr "Parametrii pt slot" -#: flatcamEditors/FlatCAMExcEditor.py:1838 +#: flatcamEditors/FlatCAMExcEditor.py:1837 msgid "" "Parameters for adding a slot (hole with oval shape)\n" "either single or as an part of an array." @@ -3790,16 +3324,16 @@ msgstr "" "Parametri pentru adăugarea unui slot (gaură cu formă ovală)\n" "fie single sau ca parte a unei arii." -#: flatcamEditors/FlatCAMExcEditor.py:1847 flatcamGUI/PreferencesUI.py:3965 +#: flatcamEditors/FlatCAMExcEditor.py:1846 flatcamGUI/PreferencesUI.py:3965 #: flatcamTools/ToolProperties.py:559 msgid "Length" msgstr "Lungime" -#: flatcamEditors/FlatCAMExcEditor.py:1849 flatcamGUI/PreferencesUI.py:3967 +#: flatcamEditors/FlatCAMExcEditor.py:1848 flatcamGUI/PreferencesUI.py:3967 msgid "Length = The length of the slot." msgstr "Lungime = Lungimea slotului." -#: flatcamEditors/FlatCAMExcEditor.py:1863 flatcamGUI/PreferencesUI.py:3983 +#: flatcamEditors/FlatCAMExcEditor.py:1862 flatcamGUI/PreferencesUI.py:3983 msgid "" "Direction on which the slot is oriented:\n" "- 'X' - horizontal axis \n" @@ -3811,7 +3345,7 @@ msgstr "" "- „Y” - axa verticală sau\n" "- „Unghi” - un unghi personalizat pentru înclinarea slotului" -#: flatcamEditors/FlatCAMExcEditor.py:1878 +#: flatcamEditors/FlatCAMExcEditor.py:1877 msgid "" "Angle at which the slot is placed.\n" "The precision is of max 2 decimals.\n" @@ -3823,15 +3357,15 @@ msgstr "" "Valoarea minimă este: -360 grade.\n" "Valoarea maximă este: 360.00 grade." -#: flatcamEditors/FlatCAMExcEditor.py:1911 +#: flatcamEditors/FlatCAMExcEditor.py:1910 msgid "Slot Array Parameters" msgstr "Parametri Arie sloturi" -#: flatcamEditors/FlatCAMExcEditor.py:1913 +#: flatcamEditors/FlatCAMExcEditor.py:1912 msgid "Parameters for the array of slots (linear or circular array)" msgstr "Parametri pentru Aria de sloturi (arie circulară sau liniară)" -#: flatcamEditors/FlatCAMExcEditor.py:1922 +#: flatcamEditors/FlatCAMExcEditor.py:1921 msgid "" "Select the type of slot array to create.\n" "It can be Linear X(Y) or Circular" @@ -3839,15 +3373,41 @@ msgstr "" "Selectați tipul de slot pentru creare.\n" "Poate fi liniar X (Y) sau circular" -#: flatcamEditors/FlatCAMExcEditor.py:1934 flatcamGUI/PreferencesUI.py:4022 +#: flatcamEditors/FlatCAMExcEditor.py:1933 flatcamGUI/PreferencesUI.py:4022 msgid "Nr of slots" msgstr "Nr de sloturi" -#: flatcamEditors/FlatCAMExcEditor.py:1935 flatcamGUI/PreferencesUI.py:4024 +#: flatcamEditors/FlatCAMExcEditor.py:1934 flatcamGUI/PreferencesUI.py:4024 msgid "Specify how many slots to be in the array." msgstr "Specificați câte sloturi trebuie să fie în arie." -#: flatcamEditors/FlatCAMExcEditor.py:2571 +#: flatcamEditors/FlatCAMExcEditor.py:2452 +#: flatcamObjects/FlatCAMExcellon.py:410 +msgid "Total Drills" +msgstr "Nr. Tot. Op. Găurire" + +#: flatcamEditors/FlatCAMExcEditor.py:2484 +#: flatcamObjects/FlatCAMExcellon.py:441 +msgid "Total Slots" +msgstr "Nr. Tot. Sloturi" + +#: flatcamEditors/FlatCAMExcEditor.py:2559 +#: flatcamEditors/FlatCAMGeoEditor.py:1076 +#: flatcamEditors/FlatCAMGeoEditor.py:1117 +#: flatcamEditors/FlatCAMGeoEditor.py:1145 +#: flatcamEditors/FlatCAMGeoEditor.py:1173 +#: flatcamEditors/FlatCAMGeoEditor.py:1217 +#: flatcamEditors/FlatCAMGeoEditor.py:1252 +#: flatcamEditors/FlatCAMGeoEditor.py:1280 +#: flatcamObjects/FlatCAMGeometry.py:571 flatcamObjects/FlatCAMGeometry.py:1005 +#: flatcamObjects/FlatCAMGeometry.py:1726 +#: flatcamObjects/FlatCAMGeometry.py:2370 flatcamTools/ToolNCC.py:1493 +#: flatcamTools/ToolPaint.py:1244 flatcamTools/ToolPaint.py:1415 +#: flatcamTools/ToolSolderPaste.py:883 flatcamTools/ToolSolderPaste.py:956 +msgid "Wrong value format entered, use a number." +msgstr "Valoare in format incorect, foloseşte un număr." + +#: flatcamEditors/FlatCAMExcEditor.py:2570 msgid "" "Tool already in the original or actual tool list.\n" "Save and reedit Excellon if you need to add this tool. " @@ -3856,83 +3416,83 @@ msgstr "" "Salvează și reeditează obiectul Excellon dacă ai nevoie să adaugi această " "unealtă. " -#: flatcamEditors/FlatCAMExcEditor.py:2580 flatcamGUI/FlatCAMGUI.py:4009 +#: flatcamEditors/FlatCAMExcEditor.py:2579 flatcamGUI/FlatCAMGUI.py:4009 msgid "Added new tool with dia" msgstr "O nouă unealtă este adăugată cu diametrul" -#: flatcamEditors/FlatCAMExcEditor.py:2613 +#: flatcamEditors/FlatCAMExcEditor.py:2612 msgid "Select a tool in Tool Table" msgstr "Selectează o unealtă in Tabela de Unelte" -#: flatcamEditors/FlatCAMExcEditor.py:2643 +#: flatcamEditors/FlatCAMExcEditor.py:2642 msgid "Deleted tool with diameter" msgstr "Unealtă ștearsă cu diametrul" -#: flatcamEditors/FlatCAMExcEditor.py:2793 +#: flatcamEditors/FlatCAMExcEditor.py:2790 msgid "Done. Tool edit completed." msgstr "Terminat. Editarea uneltei a fost finalizată." -#: flatcamEditors/FlatCAMExcEditor.py:3350 +#: flatcamEditors/FlatCAMExcEditor.py:3352 msgid "There are no Tools definitions in the file. Aborting Excellon creation." msgstr "" "Nu exista definitii de unelte in fişier. Se anulează crearea de obiect " "Excellon." -#: flatcamEditors/FlatCAMExcEditor.py:3354 +#: flatcamEditors/FlatCAMExcEditor.py:3356 msgid "An internal error has ocurred. See Shell.\n" msgstr "" "A apărut o eroare internă. Verifică in TCL Shell pt mai multe detalii.\n" -#: flatcamEditors/FlatCAMExcEditor.py:3359 +#: flatcamEditors/FlatCAMExcEditor.py:3361 msgid "Creating Excellon." msgstr "In curs de creere Excellon." -#: flatcamEditors/FlatCAMExcEditor.py:3371 +#: flatcamEditors/FlatCAMExcEditor.py:3373 msgid "Excellon editing finished." msgstr "Editarea Excellon a fost terminată." -#: flatcamEditors/FlatCAMExcEditor.py:3388 +#: flatcamEditors/FlatCAMExcEditor.py:3390 msgid "Cancelled. There is no Tool/Drill selected" msgstr "Anulat. Nu este selectată nici-o unealtă sau op. de găurire" -#: flatcamEditors/FlatCAMExcEditor.py:4001 +#: flatcamEditors/FlatCAMExcEditor.py:4003 msgid "Done. Drill(s) deleted." msgstr "Executat. Operatiile de găurire șterse." -#: flatcamEditors/FlatCAMExcEditor.py:4074 -#: flatcamEditors/FlatCAMExcEditor.py:4084 +#: flatcamEditors/FlatCAMExcEditor.py:4076 +#: flatcamEditors/FlatCAMExcEditor.py:4086 #: flatcamEditors/FlatCAMGrbEditor.py:4897 msgid "Click on the circular array Center position" msgstr "Click pe punctul de Centru al ariei circulare" -#: flatcamEditors/FlatCAMGeoEditor.py:86 +#: flatcamEditors/FlatCAMGeoEditor.py:85 msgid "Buffer distance:" msgstr "Distanta pt bufer:" -#: flatcamEditors/FlatCAMGeoEditor.py:87 +#: flatcamEditors/FlatCAMGeoEditor.py:86 msgid "Buffer corner:" msgstr "Coltul pt bufer:" -#: flatcamEditors/FlatCAMGeoEditor.py:89 +#: flatcamEditors/FlatCAMGeoEditor.py:88 msgid "" "There are 3 types of corners:\n" " - 'Round': the corner is rounded for exterior buffer.\n" -" - 'Square:' the corner is met in a sharp angle for exterior buffer.\n" -" - 'Beveled:' the corner is a line that directly connects the features " +" - 'Square': the corner is met in a sharp angle for exterior buffer.\n" +" - 'Beveled': the corner is a line that directly connects the features " "meeting in the corner" msgstr "" "Sunt disponibile 3 tipuri de colțuri:\n" -" - 'Rotund': coltul este rotunjit in cazul buferului exterior.\n" -" - 'Patrat:' colțurile formează unghi de 90 grade pt buferul exterior\n" -" - 'Beveled:' coltul este inlocuit cu o linie care uneste capetele liniilor " +"- 'Rotund': coltul este rotunjit in cazul buferului exterior.\n" +"- 'Patrat:' colțurile formează unghi de 90 grade pt buferul exterior\n" +"- 'Beveled:' coltul este inlocuit cu o linie care uneste capetele liniilor " "care formează coltul" -#: flatcamEditors/FlatCAMGeoEditor.py:95 +#: flatcamEditors/FlatCAMGeoEditor.py:94 #: flatcamEditors/FlatCAMGrbEditor.py:2628 msgid "Round" msgstr "Rotund" -#: flatcamEditors/FlatCAMGeoEditor.py:96 +#: flatcamEditors/FlatCAMGeoEditor.py:95 #: flatcamEditors/FlatCAMGrbEditor.py:2629 flatcamGUI/PreferencesUI.py:5606 #: flatcamGUI/PreferencesUI.py:6130 flatcamGUI/PreferencesUI.py:7564 #: flatcamGUI/PreferencesUI.py:8167 flatcamGUI/PreferencesUI.py:8274 @@ -3944,63 +3504,72 @@ msgstr "Rotund" msgid "Square" msgstr "Patrat" -#: flatcamEditors/FlatCAMGeoEditor.py:97 +#: flatcamEditors/FlatCAMGeoEditor.py:96 #: flatcamEditors/FlatCAMGrbEditor.py:2630 msgid "Beveled" msgstr "Beveled" -#: flatcamEditors/FlatCAMGeoEditor.py:104 +#: flatcamEditors/FlatCAMGeoEditor.py:103 msgid "Buffer Interior" msgstr "Bufer interior" -#: flatcamEditors/FlatCAMGeoEditor.py:106 +#: flatcamEditors/FlatCAMGeoEditor.py:105 msgid "Buffer Exterior" msgstr "Bufer Exterior" -#: flatcamEditors/FlatCAMGeoEditor.py:112 +#: flatcamEditors/FlatCAMGeoEditor.py:111 msgid "Full Buffer" msgstr "Bufer complet" -#: flatcamEditors/FlatCAMGeoEditor.py:133 -#: flatcamEditors/FlatCAMGeoEditor.py:3018 flatcamGUI/FlatCAMGUI.py:1913 +#: flatcamEditors/FlatCAMGeoEditor.py:132 +#: flatcamEditors/FlatCAMGeoEditor.py:3017 flatcamGUI/FlatCAMGUI.py:1913 #: flatcamGUI/PreferencesUI.py:2786 msgid "Buffer Tool" msgstr "Unealta Bufer" -#: flatcamEditors/FlatCAMGeoEditor.py:145 -#: flatcamEditors/FlatCAMGeoEditor.py:162 -#: flatcamEditors/FlatCAMGeoEditor.py:179 -#: flatcamEditors/FlatCAMGeoEditor.py:3037 -#: flatcamEditors/FlatCAMGeoEditor.py:3065 -#: flatcamEditors/FlatCAMGeoEditor.py:3093 +#: flatcamEditors/FlatCAMGeoEditor.py:144 +#: flatcamEditors/FlatCAMGeoEditor.py:161 +#: flatcamEditors/FlatCAMGeoEditor.py:178 +#: flatcamEditors/FlatCAMGeoEditor.py:3036 +#: flatcamEditors/FlatCAMGeoEditor.py:3064 +#: flatcamEditors/FlatCAMGeoEditor.py:3092 #: flatcamEditors/FlatCAMGrbEditor.py:4950 msgid "Buffer distance value is missing or wrong format. Add it and retry." msgstr "" "Valoarea distantei bufer lipseste sau este intr-un format gresit. Adaugă din " "nou și reîncearcă." -#: flatcamEditors/FlatCAMGeoEditor.py:243 +#: flatcamEditors/FlatCAMGeoEditor.py:242 msgid "Font" msgstr "Font" -#: flatcamEditors/FlatCAMGeoEditor.py:324 flatcamGUI/FlatCAMGUI.py:2193 +#: flatcamEditors/FlatCAMGeoEditor.py:323 flatcamGUI/FlatCAMGUI.py:2193 msgid "Text" msgstr "Text" -#: flatcamEditors/FlatCAMGeoEditor.py:350 +#: flatcamEditors/FlatCAMGeoEditor.py:349 msgid "Text Tool" msgstr "Unealta Text" -#: flatcamEditors/FlatCAMGeoEditor.py:440 flatcamGUI/ObjectUI.py:363 +#: flatcamEditors/FlatCAMGeoEditor.py:405 flatcamGUI/FlatCAMGUI.py:496 +#: flatcamGUI/FlatCAMGUI.py:1143 flatcamGUI/ObjectUI.py:817 +#: flatcamGUI/ObjectUI.py:1661 flatcamObjects/FlatCAMExcellon.py:742 +#: flatcamObjects/FlatCAMExcellon.py:1084 flatcamObjects/FlatCAMGeometry.py:731 +#: flatcamTools/ToolNCC.py:331 flatcamTools/ToolNCC.py:797 +#: flatcamTools/ToolPaint.py:314 flatcamTools/ToolPaint.py:767 +msgid "Tool" +msgstr "Unealta" + +#: flatcamEditors/FlatCAMGeoEditor.py:439 flatcamGUI/ObjectUI.py:363 #: flatcamGUI/PreferencesUI.py:2205 msgid "Tool dia" msgstr "Dia unealtă" -#: flatcamEditors/FlatCAMGeoEditor.py:442 +#: flatcamEditors/FlatCAMGeoEditor.py:441 msgid "Diameter of the tool to be used in the operation." msgstr "Diametrul uneltei care este utilizata in operaţie." -#: flatcamEditors/FlatCAMGeoEditor.py:488 +#: flatcamEditors/FlatCAMGeoEditor.py:487 msgid "" "Algorithm to paint the polygons:\n" "- Standard: Fixed step inwards.\n" @@ -4012,91 +3581,91 @@ msgstr "" "- Semințe: înspre exterior porning de la punctul sămanță.\n" "- Linii: linii paralele." -#: flatcamEditors/FlatCAMGeoEditor.py:507 +#: flatcamEditors/FlatCAMGeoEditor.py:506 msgid "Connect:" msgstr "Conectează:" -#: flatcamEditors/FlatCAMGeoEditor.py:517 +#: flatcamEditors/FlatCAMGeoEditor.py:516 msgid "Contour:" msgstr "Contur:" -#: flatcamEditors/FlatCAMGeoEditor.py:530 flatcamGUI/FlatCAMGUI.py:2197 +#: flatcamEditors/FlatCAMGeoEditor.py:529 flatcamGUI/FlatCAMGUI.py:2197 msgid "Paint" msgstr "Pictează" -#: flatcamEditors/FlatCAMGeoEditor.py:548 flatcamGUI/FlatCAMGUI.py:909 -#: flatcamGUI/FlatCAMGUI.py:2588 flatcamGUI/ObjectUI.py:2057 +#: flatcamEditors/FlatCAMGeoEditor.py:547 flatcamGUI/FlatCAMGUI.py:909 +#: flatcamGUI/FlatCAMGUI.py:2588 flatcamGUI/ObjectUI.py:2058 #: flatcamTools/ToolPaint.py:43 flatcamTools/ToolPaint.py:738 msgid "Paint Tool" msgstr "Unealta Paint" -#: flatcamEditors/FlatCAMGeoEditor.py:584 -#: flatcamEditors/FlatCAMGeoEditor.py:1056 -#: flatcamEditors/FlatCAMGeoEditor.py:3025 -#: flatcamEditors/FlatCAMGeoEditor.py:3053 -#: flatcamEditors/FlatCAMGeoEditor.py:3081 +#: flatcamEditors/FlatCAMGeoEditor.py:583 +#: flatcamEditors/FlatCAMGeoEditor.py:1055 +#: flatcamEditors/FlatCAMGeoEditor.py:3024 +#: flatcamEditors/FlatCAMGeoEditor.py:3052 +#: flatcamEditors/FlatCAMGeoEditor.py:3080 #: flatcamEditors/FlatCAMGeoEditor.py:4502 #: flatcamEditors/FlatCAMGrbEditor.py:5601 msgid "Cancelled. No shape selected." msgstr "Anulat. Nici-o forma geometrică nu este selectată." -#: flatcamEditors/FlatCAMGeoEditor.py:597 -#: flatcamEditors/FlatCAMGeoEditor.py:3043 -#: flatcamEditors/FlatCAMGeoEditor.py:3071 -#: flatcamEditors/FlatCAMGeoEditor.py:3099 flatcamGUI/PreferencesUI.py:4149 +#: flatcamEditors/FlatCAMGeoEditor.py:596 +#: flatcamEditors/FlatCAMGeoEditor.py:3042 +#: flatcamEditors/FlatCAMGeoEditor.py:3070 +#: flatcamEditors/FlatCAMGeoEditor.py:3098 flatcamGUI/PreferencesUI.py:4149 #: flatcamTools/ToolProperties.py:117 flatcamTools/ToolProperties.py:162 msgid "Tools" msgstr "Unelte" -#: flatcamEditors/FlatCAMGeoEditor.py:608 -#: flatcamEditors/FlatCAMGeoEditor.py:992 +#: flatcamEditors/FlatCAMGeoEditor.py:607 +#: flatcamEditors/FlatCAMGeoEditor.py:991 #: flatcamEditors/FlatCAMGrbEditor.py:5140 #: flatcamEditors/FlatCAMGrbEditor.py:5537 flatcamGUI/FlatCAMGUI.py:930 -#: flatcamGUI/FlatCAMGUI.py:2609 flatcamTools/ToolTransform.py:461 +#: flatcamGUI/FlatCAMGUI.py:2609 flatcamTools/ToolTransform.py:460 msgid "Transform Tool" msgstr "Unealta Transformare" -#: flatcamEditors/FlatCAMGeoEditor.py:609 -#: flatcamEditors/FlatCAMGeoEditor.py:674 +#: flatcamEditors/FlatCAMGeoEditor.py:608 +#: flatcamEditors/FlatCAMGeoEditor.py:673 #: flatcamEditors/FlatCAMGrbEditor.py:5141 #: flatcamEditors/FlatCAMGrbEditor.py:5206 flatcamGUI/PreferencesUI.py:6725 -#: flatcamTools/ToolTransform.py:25 flatcamTools/ToolTransform.py:467 +#: flatcamTools/ToolTransform.py:24 flatcamTools/ToolTransform.py:466 msgid "Rotate" msgstr "Rotaţie" -#: flatcamEditors/FlatCAMGeoEditor.py:610 -#: flatcamEditors/FlatCAMGrbEditor.py:5142 flatcamTools/ToolTransform.py:26 +#: flatcamEditors/FlatCAMGeoEditor.py:609 +#: flatcamEditors/FlatCAMGrbEditor.py:5142 flatcamTools/ToolTransform.py:25 msgid "Skew/Shear" msgstr "Deformare" -#: flatcamEditors/FlatCAMGeoEditor.py:611 +#: flatcamEditors/FlatCAMGeoEditor.py:610 #: flatcamEditors/FlatCAMGrbEditor.py:2677 #: flatcamEditors/FlatCAMGrbEditor.py:5143 flatcamGUI/FlatCAMGUI.py:1048 #: flatcamGUI/FlatCAMGUI.py:2125 flatcamGUI/FlatCAMGUI.py:2240 #: flatcamGUI/FlatCAMGUI.py:2723 flatcamGUI/ObjectUI.py:124 -#: flatcamGUI/PreferencesUI.py:6775 flatcamTools/ToolTransform.py:27 +#: flatcamGUI/PreferencesUI.py:6775 flatcamTools/ToolTransform.py:26 msgid "Scale" msgstr "Scalare" -#: flatcamEditors/FlatCAMGeoEditor.py:612 -#: flatcamEditors/FlatCAMGrbEditor.py:5144 flatcamTools/ToolTransform.py:28 +#: flatcamEditors/FlatCAMGeoEditor.py:611 +#: flatcamEditors/FlatCAMGrbEditor.py:5144 flatcamTools/ToolTransform.py:27 msgid "Mirror (Flip)" msgstr "Oglindire" -#: flatcamEditors/FlatCAMGeoEditor.py:626 +#: flatcamEditors/FlatCAMGeoEditor.py:625 #: flatcamEditors/FlatCAMGrbEditor.py:5158 flatcamGUI/FlatCAMGUI.py:841 #: flatcamGUI/FlatCAMGUI.py:2524 msgid "Editor" msgstr "Editor" -#: flatcamEditors/FlatCAMGeoEditor.py:658 +#: flatcamEditors/FlatCAMGeoEditor.py:657 #: flatcamEditors/FlatCAMGrbEditor.py:5190 msgid "Angle:" msgstr "Unghi:" -#: flatcamEditors/FlatCAMGeoEditor.py:660 +#: flatcamEditors/FlatCAMGeoEditor.py:659 #: flatcamEditors/FlatCAMGrbEditor.py:5192 flatcamGUI/PreferencesUI.py:6735 -#: flatcamTools/ToolTransform.py:63 +#: flatcamTools/ToolTransform.py:62 msgid "" "Angle for Rotation action, in degrees.\n" "Float number between -360 and 359.\n" @@ -4107,7 +3676,7 @@ msgstr "" "Numerele pozitive inseamna o mișcare in sens ace ceasornic.\n" "Numerele negative inseamna o mișcare in sens invers ace ceasornic." -#: flatcamEditors/FlatCAMGeoEditor.py:676 +#: flatcamEditors/FlatCAMGeoEditor.py:675 #: flatcamEditors/FlatCAMGrbEditor.py:5208 msgid "" "Rotate the selected shape(s).\n" @@ -4119,13 +3688,13 @@ msgstr "" "formei înconjurătoare care cuprinde\n" "toate formele selectate." -#: flatcamEditors/FlatCAMGeoEditor.py:699 +#: flatcamEditors/FlatCAMGeoEditor.py:698 #: flatcamEditors/FlatCAMGrbEditor.py:5231 msgid "Angle X:" msgstr "Unghi X:" -#: flatcamEditors/FlatCAMGeoEditor.py:701 -#: flatcamEditors/FlatCAMGeoEditor.py:721 +#: flatcamEditors/FlatCAMGeoEditor.py:700 +#: flatcamEditors/FlatCAMGeoEditor.py:720 #: flatcamEditors/FlatCAMGrbEditor.py:5233 #: flatcamEditors/FlatCAMGrbEditor.py:5253 flatcamGUI/PreferencesUI.py:6754 #: flatcamGUI/PreferencesUI.py:6768 flatcamTools/ToolCalibration.py:505 @@ -4137,13 +3706,13 @@ msgstr "" "Valoarea unghiului de Deformare, in grade.\n" "Ia valori Reale între -360 and 359 grade." -#: flatcamEditors/FlatCAMGeoEditor.py:712 -#: flatcamEditors/FlatCAMGrbEditor.py:5244 flatcamTools/ToolTransform.py:468 +#: flatcamEditors/FlatCAMGeoEditor.py:711 +#: flatcamEditors/FlatCAMGrbEditor.py:5244 flatcamTools/ToolTransform.py:467 msgid "Skew X" msgstr "Deformare X" -#: flatcamEditors/FlatCAMGeoEditor.py:714 -#: flatcamEditors/FlatCAMGeoEditor.py:734 +#: flatcamEditors/FlatCAMGeoEditor.py:713 +#: flatcamEditors/FlatCAMGeoEditor.py:733 #: flatcamEditors/FlatCAMGrbEditor.py:5246 #: flatcamEditors/FlatCAMGrbEditor.py:5266 msgid "" @@ -4156,33 +3725,33 @@ msgstr "" "formei înconjurătoare care cuprinde\n" "toate formele selectate." -#: flatcamEditors/FlatCAMGeoEditor.py:719 +#: flatcamEditors/FlatCAMGeoEditor.py:718 #: flatcamEditors/FlatCAMGrbEditor.py:5251 msgid "Angle Y:" msgstr "Unghi Y:" -#: flatcamEditors/FlatCAMGeoEditor.py:732 -#: flatcamEditors/FlatCAMGrbEditor.py:5264 flatcamTools/ToolTransform.py:469 +#: flatcamEditors/FlatCAMGeoEditor.py:731 +#: flatcamEditors/FlatCAMGrbEditor.py:5264 flatcamTools/ToolTransform.py:468 msgid "Skew Y" msgstr "Deformare Y" -#: flatcamEditors/FlatCAMGeoEditor.py:760 +#: flatcamEditors/FlatCAMGeoEditor.py:759 #: flatcamEditors/FlatCAMGrbEditor.py:5292 msgid "Factor X:" msgstr "Factor X:" -#: flatcamEditors/FlatCAMGeoEditor.py:762 +#: flatcamEditors/FlatCAMGeoEditor.py:761 #: flatcamEditors/FlatCAMGrbEditor.py:5294 flatcamTools/ToolCalibration.py:469 msgid "Factor for Scale action over X axis." msgstr "Factor pentru scalarea pe axa X." -#: flatcamEditors/FlatCAMGeoEditor.py:772 -#: flatcamEditors/FlatCAMGrbEditor.py:5304 flatcamTools/ToolTransform.py:470 +#: flatcamEditors/FlatCAMGeoEditor.py:771 +#: flatcamEditors/FlatCAMGrbEditor.py:5304 flatcamTools/ToolTransform.py:469 msgid "Scale X" msgstr "Scalează X" -#: flatcamEditors/FlatCAMGeoEditor.py:774 -#: flatcamEditors/FlatCAMGeoEditor.py:793 +#: flatcamEditors/FlatCAMGeoEditor.py:773 +#: flatcamEditors/FlatCAMGeoEditor.py:792 #: flatcamEditors/FlatCAMGrbEditor.py:5306 #: flatcamEditors/FlatCAMGrbEditor.py:5325 msgid "" @@ -4194,28 +3763,28 @@ msgstr "" "Punctul de referinţă depinde de \n" "starea checkbox-ului >Referința scalare<." -#: flatcamEditors/FlatCAMGeoEditor.py:779 +#: flatcamEditors/FlatCAMGeoEditor.py:778 #: flatcamEditors/FlatCAMGrbEditor.py:5311 msgid "Factor Y:" msgstr "Factor Y:" -#: flatcamEditors/FlatCAMGeoEditor.py:781 +#: flatcamEditors/FlatCAMGeoEditor.py:780 #: flatcamEditors/FlatCAMGrbEditor.py:5313 flatcamTools/ToolCalibration.py:481 msgid "Factor for Scale action over Y axis." msgstr "Factor pentru scalarea pe axa Y." -#: flatcamEditors/FlatCAMGeoEditor.py:791 -#: flatcamEditors/FlatCAMGrbEditor.py:5323 flatcamTools/ToolTransform.py:471 +#: flatcamEditors/FlatCAMGeoEditor.py:790 +#: flatcamEditors/FlatCAMGrbEditor.py:5323 flatcamTools/ToolTransform.py:470 msgid "Scale Y" msgstr "Scalează Y" -#: flatcamEditors/FlatCAMGeoEditor.py:800 +#: flatcamEditors/FlatCAMGeoEditor.py:799 #: flatcamEditors/FlatCAMGrbEditor.py:5332 flatcamGUI/PreferencesUI.py:6804 -#: flatcamTools/ToolTransform.py:190 +#: flatcamTools/ToolTransform.py:189 msgid "Link" msgstr "Legatura" -#: flatcamEditors/FlatCAMGeoEditor.py:802 +#: flatcamEditors/FlatCAMGeoEditor.py:801 #: flatcamEditors/FlatCAMGrbEditor.py:5334 msgid "" "Scale the selected shape(s)\n" @@ -4224,13 +3793,13 @@ msgstr "" "Scalează formele selectate\n" "folsoind factorul: Factor X pentru ambele axe." -#: flatcamEditors/FlatCAMGeoEditor.py:808 +#: flatcamEditors/FlatCAMGeoEditor.py:807 #: flatcamEditors/FlatCAMGrbEditor.py:5340 flatcamGUI/PreferencesUI.py:6812 -#: flatcamTools/ToolTransform.py:197 +#: flatcamTools/ToolTransform.py:196 msgid "Scale Reference" msgstr "Referința scalare" -#: flatcamEditors/FlatCAMGeoEditor.py:810 +#: flatcamEditors/FlatCAMGeoEditor.py:809 #: flatcamEditors/FlatCAMGrbEditor.py:5342 msgid "" "Scale the selected shape(s)\n" @@ -4244,23 +3813,23 @@ msgstr "" "toate formele selectate când nu este\n" "bifat și este originea când este bifat." -#: flatcamEditors/FlatCAMGeoEditor.py:838 +#: flatcamEditors/FlatCAMGeoEditor.py:837 #: flatcamEditors/FlatCAMGrbEditor.py:5371 msgid "Value X:" msgstr "Valoare X:" -#: flatcamEditors/FlatCAMGeoEditor.py:840 +#: flatcamEditors/FlatCAMGeoEditor.py:839 #: flatcamEditors/FlatCAMGrbEditor.py:5373 msgid "Value for Offset action on X axis." msgstr "Valoare pentru deplasarea pe axa X." -#: flatcamEditors/FlatCAMGeoEditor.py:850 -#: flatcamEditors/FlatCAMGrbEditor.py:5383 flatcamTools/ToolTransform.py:474 +#: flatcamEditors/FlatCAMGeoEditor.py:849 +#: flatcamEditors/FlatCAMGrbEditor.py:5383 flatcamTools/ToolTransform.py:473 msgid "Offset X" msgstr "Ofset pe X" -#: flatcamEditors/FlatCAMGeoEditor.py:852 -#: flatcamEditors/FlatCAMGeoEditor.py:872 +#: flatcamEditors/FlatCAMGeoEditor.py:851 +#: flatcamEditors/FlatCAMGeoEditor.py:871 #: flatcamEditors/FlatCAMGrbEditor.py:5385 #: flatcamEditors/FlatCAMGrbEditor.py:5405 msgid "" @@ -4273,28 +3842,28 @@ msgstr "" "formei înconjurătoare care cuprinde\n" "toate formele selectate.\n" -#: flatcamEditors/FlatCAMGeoEditor.py:858 +#: flatcamEditors/FlatCAMGeoEditor.py:857 #: flatcamEditors/FlatCAMGrbEditor.py:5391 msgid "Value Y:" msgstr "Valoare Y:" -#: flatcamEditors/FlatCAMGeoEditor.py:860 +#: flatcamEditors/FlatCAMGeoEditor.py:859 #: flatcamEditors/FlatCAMGrbEditor.py:5393 msgid "Value for Offset action on Y axis." msgstr "Valoare pentru deplasarea pe axa Y." -#: flatcamEditors/FlatCAMGeoEditor.py:870 -#: flatcamEditors/FlatCAMGrbEditor.py:5403 flatcamTools/ToolTransform.py:475 +#: flatcamEditors/FlatCAMGeoEditor.py:869 +#: flatcamEditors/FlatCAMGrbEditor.py:5403 flatcamTools/ToolTransform.py:474 msgid "Offset Y" msgstr "Ofset pe Y" -#: flatcamEditors/FlatCAMGeoEditor.py:901 -#: flatcamEditors/FlatCAMGrbEditor.py:5434 flatcamTools/ToolTransform.py:476 +#: flatcamEditors/FlatCAMGeoEditor.py:900 +#: flatcamEditors/FlatCAMGrbEditor.py:5434 flatcamTools/ToolTransform.py:475 msgid "Flip on X" msgstr "Oglindește pe X" -#: flatcamEditors/FlatCAMGeoEditor.py:903 -#: flatcamEditors/FlatCAMGeoEditor.py:910 +#: flatcamEditors/FlatCAMGeoEditor.py:902 +#: flatcamEditors/FlatCAMGeoEditor.py:909 #: flatcamEditors/FlatCAMGrbEditor.py:5436 #: flatcamEditors/FlatCAMGrbEditor.py:5443 msgid "" @@ -4304,17 +3873,17 @@ msgstr "" "Oglindește formele selectate peste axa X\n" "Nu crează noi forme." -#: flatcamEditors/FlatCAMGeoEditor.py:908 -#: flatcamEditors/FlatCAMGrbEditor.py:5441 flatcamTools/ToolTransform.py:477 +#: flatcamEditors/FlatCAMGeoEditor.py:907 +#: flatcamEditors/FlatCAMGrbEditor.py:5441 flatcamTools/ToolTransform.py:476 msgid "Flip on Y" msgstr "Oglindește pe Y" -#: flatcamEditors/FlatCAMGeoEditor.py:916 +#: flatcamEditors/FlatCAMGeoEditor.py:915 #: flatcamEditors/FlatCAMGrbEditor.py:5449 msgid "Ref Pt" msgstr "Pt ref" -#: flatcamEditors/FlatCAMGeoEditor.py:918 +#: flatcamEditors/FlatCAMGeoEditor.py:917 #: flatcamEditors/FlatCAMGrbEditor.py:5451 msgid "" "Flip the selected shape(s)\n" @@ -4338,13 +3907,13 @@ msgstr "" "Alternativ se pot introduce manual in formatul (x, y). \n" "La final click pe >Oglindește pe X(Y)<." -#: flatcamEditors/FlatCAMGeoEditor.py:930 +#: flatcamEditors/FlatCAMGeoEditor.py:929 #: flatcamEditors/FlatCAMGrbEditor.py:5463 msgid "Point:" msgstr "Punct:" -#: flatcamEditors/FlatCAMGeoEditor.py:932 -#: flatcamEditors/FlatCAMGrbEditor.py:5465 flatcamTools/ToolTransform.py:300 +#: flatcamEditors/FlatCAMGeoEditor.py:931 +#: flatcamEditors/FlatCAMGrbEditor.py:5465 flatcamTools/ToolTransform.py:299 msgid "" "Coordinates in format (x, y) used as reference for mirroring.\n" "The 'x' in (x, y) will be used when using Flip on X and\n" @@ -4354,8 +3923,8 @@ msgstr "" "Valoarea 'x' in (x, y) va fi folosita când se face oglindire pe X\n" "și valoarea 'y' in (x, y) va fi folosita când se face oglindire pe Y." -#: flatcamEditors/FlatCAMGeoEditor.py:942 -#: flatcamEditors/FlatCAMGrbEditor.py:5477 flatcamTools/ToolTransform.py:310 +#: flatcamEditors/FlatCAMGeoEditor.py:941 +#: flatcamEditors/FlatCAMGrbEditor.py:5477 flatcamTools/ToolTransform.py:309 msgid "" "The point coordinates can be captured by\n" "left click on canvas together with pressing\n" @@ -4366,360 +3935,360 @@ msgstr "" "tasta SHIFT.\n" "La final, apasa butonul >Adaugă< pt a le insera." -#: flatcamEditors/FlatCAMGeoEditor.py:1305 +#: flatcamEditors/FlatCAMGeoEditor.py:1304 #: flatcamEditors/FlatCAMGrbEditor.py:5785 msgid "No shape selected. Please Select a shape to rotate!" msgstr "" "Nici-o forma nu este selectată. Selectează o forma pentru a putea face " "Rotaţie!" -#: flatcamEditors/FlatCAMGeoEditor.py:1308 -#: flatcamEditors/FlatCAMGrbEditor.py:5788 flatcamTools/ToolTransform.py:680 +#: flatcamEditors/FlatCAMGeoEditor.py:1307 +#: flatcamEditors/FlatCAMGrbEditor.py:5788 flatcamTools/ToolTransform.py:679 msgid "Appying Rotate" msgstr "Execuţie Rotaţie" -#: flatcamEditors/FlatCAMGeoEditor.py:1334 +#: flatcamEditors/FlatCAMGeoEditor.py:1333 #: flatcamEditors/FlatCAMGrbEditor.py:5820 msgid "Done. Rotate completed." msgstr "Executat. Rotaţie finalizată." -#: flatcamEditors/FlatCAMGeoEditor.py:1336 +#: flatcamEditors/FlatCAMGeoEditor.py:1335 msgid "Rotation action was not executed" msgstr "Actiunea de rotatie nu a fost efectuată" -#: flatcamEditors/FlatCAMGeoEditor.py:1355 +#: flatcamEditors/FlatCAMGeoEditor.py:1354 #: flatcamEditors/FlatCAMGrbEditor.py:5839 msgid "No shape selected. Please Select a shape to flip!" msgstr "" "Nici-o formă nu este selectată. Selectează o formă pentru a putea face " "Oglindire!" -#: flatcamEditors/FlatCAMGeoEditor.py:1358 -#: flatcamEditors/FlatCAMGrbEditor.py:5842 flatcamTools/ToolTransform.py:729 +#: flatcamEditors/FlatCAMGeoEditor.py:1357 +#: flatcamEditors/FlatCAMGrbEditor.py:5842 flatcamTools/ToolTransform.py:728 msgid "Applying Flip" msgstr "Execuţie Oglindire" -#: flatcamEditors/FlatCAMGeoEditor.py:1387 -#: flatcamEditors/FlatCAMGrbEditor.py:5880 flatcamTools/ToolTransform.py:770 +#: flatcamEditors/FlatCAMGeoEditor.py:1386 +#: flatcamEditors/FlatCAMGrbEditor.py:5880 flatcamTools/ToolTransform.py:769 msgid "Flip on the Y axis done" msgstr "Oglindire pe axa Y executată" -#: flatcamEditors/FlatCAMGeoEditor.py:1391 -#: flatcamEditors/FlatCAMGrbEditor.py:5889 flatcamTools/ToolTransform.py:779 +#: flatcamEditors/FlatCAMGeoEditor.py:1390 +#: flatcamEditors/FlatCAMGrbEditor.py:5889 flatcamTools/ToolTransform.py:778 msgid "Flip on the X axis done" msgstr "Oglindire pe axa X executată" -#: flatcamEditors/FlatCAMGeoEditor.py:1399 +#: flatcamEditors/FlatCAMGeoEditor.py:1398 msgid "Flip action was not executed" msgstr "Actiunea de oglindire nu a fost efectuată" -#: flatcamEditors/FlatCAMGeoEditor.py:1417 +#: flatcamEditors/FlatCAMGeoEditor.py:1416 #: flatcamEditors/FlatCAMGrbEditor.py:5909 msgid "No shape selected. Please Select a shape to shear/skew!" msgstr "" "Nici-o formă nu este selectată. Selectează o formă pentru a putea face " "Deformare!" -#: flatcamEditors/FlatCAMGeoEditor.py:1420 -#: flatcamEditors/FlatCAMGrbEditor.py:5912 flatcamTools/ToolTransform.py:802 +#: flatcamEditors/FlatCAMGeoEditor.py:1419 +#: flatcamEditors/FlatCAMGrbEditor.py:5912 flatcamTools/ToolTransform.py:801 msgid "Applying Skew" msgstr "Execuţie Deformare" -#: flatcamEditors/FlatCAMGeoEditor.py:1443 +#: flatcamEditors/FlatCAMGeoEditor.py:1442 #: flatcamEditors/FlatCAMGrbEditor.py:5946 msgid "Skew on the X axis done" msgstr "Oglindire pe axa X executată" -#: flatcamEditors/FlatCAMGeoEditor.py:1445 +#: flatcamEditors/FlatCAMGeoEditor.py:1444 #: flatcamEditors/FlatCAMGrbEditor.py:5948 msgid "Skew on the Y axis done" msgstr "Oglindire pe axa Y executată" -#: flatcamEditors/FlatCAMGeoEditor.py:1448 +#: flatcamEditors/FlatCAMGeoEditor.py:1447 msgid "Skew action was not executed" msgstr "Actiunea de deformare nu a fost efectuată" -#: flatcamEditors/FlatCAMGeoEditor.py:1470 +#: flatcamEditors/FlatCAMGeoEditor.py:1469 #: flatcamEditors/FlatCAMGrbEditor.py:5970 msgid "No shape selected. Please Select a shape to scale!" msgstr "" "Nici-o formă nu este selectată. Selectează o formă pentru a putea face " "Scalare!" -#: flatcamEditors/FlatCAMGeoEditor.py:1473 -#: flatcamEditors/FlatCAMGrbEditor.py:5973 flatcamTools/ToolTransform.py:849 +#: flatcamEditors/FlatCAMGeoEditor.py:1472 +#: flatcamEditors/FlatCAMGrbEditor.py:5973 flatcamTools/ToolTransform.py:847 msgid "Applying Scale" msgstr "Execuţie Scalare" -#: flatcamEditors/FlatCAMGeoEditor.py:1505 +#: flatcamEditors/FlatCAMGeoEditor.py:1504 #: flatcamEditors/FlatCAMGrbEditor.py:6010 msgid "Scale on the X axis done" msgstr "Scalarea pe axa X executată" -#: flatcamEditors/FlatCAMGeoEditor.py:1507 +#: flatcamEditors/FlatCAMGeoEditor.py:1506 #: flatcamEditors/FlatCAMGrbEditor.py:6012 msgid "Scale on the Y axis done" msgstr "Scalarea pe axa Y executată" -#: flatcamEditors/FlatCAMGeoEditor.py:1509 +#: flatcamEditors/FlatCAMGeoEditor.py:1508 msgid "Scale action was not executed" msgstr "Scalarea nu a fost efectuată" -#: flatcamEditors/FlatCAMGeoEditor.py:1524 +#: flatcamEditors/FlatCAMGeoEditor.py:1523 #: flatcamEditors/FlatCAMGrbEditor.py:6029 msgid "No shape selected. Please Select a shape to offset!" msgstr "" "Nici-o formă nu este selectată. Selectează o formă pentru a putea face Ofset!" -#: flatcamEditors/FlatCAMGeoEditor.py:1527 -#: flatcamEditors/FlatCAMGrbEditor.py:6032 flatcamTools/ToolTransform.py:901 +#: flatcamEditors/FlatCAMGeoEditor.py:1526 +#: flatcamEditors/FlatCAMGrbEditor.py:6032 flatcamTools/ToolTransform.py:897 msgid "Applying Offset" msgstr "Execuţie Ofset" -#: flatcamEditors/FlatCAMGeoEditor.py:1537 +#: flatcamEditors/FlatCAMGeoEditor.py:1536 #: flatcamEditors/FlatCAMGrbEditor.py:6053 msgid "Offset on the X axis done" msgstr "Ofset pe axa X efectuat" -#: flatcamEditors/FlatCAMGeoEditor.py:1539 +#: flatcamEditors/FlatCAMGeoEditor.py:1538 #: flatcamEditors/FlatCAMGrbEditor.py:6055 msgid "Offset on the Y axis done" msgstr "Ofset pe axa Y efectuat" -#: flatcamEditors/FlatCAMGeoEditor.py:1542 +#: flatcamEditors/FlatCAMGeoEditor.py:1541 msgid "Offset action was not executed" msgstr "Actiuena de Ofset nu a fost efectuată" -#: flatcamEditors/FlatCAMGeoEditor.py:1546 +#: flatcamEditors/FlatCAMGeoEditor.py:1545 #: flatcamEditors/FlatCAMGrbEditor.py:6062 msgid "Rotate ..." msgstr "Rotaţie ..." -#: flatcamEditors/FlatCAMGeoEditor.py:1547 -#: flatcamEditors/FlatCAMGeoEditor.py:1602 -#: flatcamEditors/FlatCAMGeoEditor.py:1619 +#: flatcamEditors/FlatCAMGeoEditor.py:1546 +#: flatcamEditors/FlatCAMGeoEditor.py:1601 +#: flatcamEditors/FlatCAMGeoEditor.py:1618 #: flatcamEditors/FlatCAMGrbEditor.py:6063 #: flatcamEditors/FlatCAMGrbEditor.py:6112 #: flatcamEditors/FlatCAMGrbEditor.py:6127 msgid "Enter an Angle Value (degrees)" msgstr "Introdu o valoare in grade pt Unghi" -#: flatcamEditors/FlatCAMGeoEditor.py:1556 +#: flatcamEditors/FlatCAMGeoEditor.py:1555 #: flatcamEditors/FlatCAMGrbEditor.py:6071 msgid "Geometry shape rotate done" msgstr "Rotatia formei geometrice executată" -#: flatcamEditors/FlatCAMGeoEditor.py:1560 +#: flatcamEditors/FlatCAMGeoEditor.py:1559 #: flatcamEditors/FlatCAMGrbEditor.py:6074 msgid "Geometry shape rotate cancelled" msgstr "Rotatia formei geometrice anulată" -#: flatcamEditors/FlatCAMGeoEditor.py:1565 +#: flatcamEditors/FlatCAMGeoEditor.py:1564 #: flatcamEditors/FlatCAMGrbEditor.py:6079 msgid "Offset on X axis ..." msgstr "Ofset pe axa X ..." -#: flatcamEditors/FlatCAMGeoEditor.py:1566 -#: flatcamEditors/FlatCAMGeoEditor.py:1585 +#: flatcamEditors/FlatCAMGeoEditor.py:1565 +#: flatcamEditors/FlatCAMGeoEditor.py:1584 #: flatcamEditors/FlatCAMGrbEditor.py:6080 #: flatcamEditors/FlatCAMGrbEditor.py:6097 msgid "Enter a distance Value" msgstr "Introdu of valoare pt Distantă" -#: flatcamEditors/FlatCAMGeoEditor.py:1575 +#: flatcamEditors/FlatCAMGeoEditor.py:1574 #: flatcamEditors/FlatCAMGrbEditor.py:6088 msgid "Geometry shape offset on X axis done" msgstr "Ofset pe axa X executat" -#: flatcamEditors/FlatCAMGeoEditor.py:1579 +#: flatcamEditors/FlatCAMGeoEditor.py:1578 #: flatcamEditors/FlatCAMGrbEditor.py:6091 msgid "Geometry shape offset X cancelled" msgstr "Ofset pe axa X anulat" -#: flatcamEditors/FlatCAMGeoEditor.py:1584 +#: flatcamEditors/FlatCAMGeoEditor.py:1583 #: flatcamEditors/FlatCAMGrbEditor.py:6096 msgid "Offset on Y axis ..." msgstr "Ofset pe axa Y ..." -#: flatcamEditors/FlatCAMGeoEditor.py:1594 +#: flatcamEditors/FlatCAMGeoEditor.py:1593 #: flatcamEditors/FlatCAMGrbEditor.py:6105 msgid "Geometry shape offset on Y axis done" msgstr "Ofset pe axa Y executat" -#: flatcamEditors/FlatCAMGeoEditor.py:1598 +#: flatcamEditors/FlatCAMGeoEditor.py:1597 msgid "Geometry shape offset on Y axis canceled" msgstr "Ofset pe axa Y anulat" -#: flatcamEditors/FlatCAMGeoEditor.py:1601 +#: flatcamEditors/FlatCAMGeoEditor.py:1600 #: flatcamEditors/FlatCAMGrbEditor.py:6111 msgid "Skew on X axis ..." msgstr "Deformare pe axa X ..." -#: flatcamEditors/FlatCAMGeoEditor.py:1611 +#: flatcamEditors/FlatCAMGeoEditor.py:1610 #: flatcamEditors/FlatCAMGrbEditor.py:6120 msgid "Geometry shape skew on X axis done" msgstr "Deformarea pe axa X executată" -#: flatcamEditors/FlatCAMGeoEditor.py:1615 +#: flatcamEditors/FlatCAMGeoEditor.py:1614 msgid "Geometry shape skew on X axis canceled" msgstr "Deformarea pe axa X anulată" -#: flatcamEditors/FlatCAMGeoEditor.py:1618 +#: flatcamEditors/FlatCAMGeoEditor.py:1617 #: flatcamEditors/FlatCAMGrbEditor.py:6126 msgid "Skew on Y axis ..." msgstr "Deformare pe axa Y ..." -#: flatcamEditors/FlatCAMGeoEditor.py:1628 +#: flatcamEditors/FlatCAMGeoEditor.py:1627 #: flatcamEditors/FlatCAMGrbEditor.py:6135 msgid "Geometry shape skew on Y axis done" msgstr "Deformarea pe axa Y executată" -#: flatcamEditors/FlatCAMGeoEditor.py:1632 +#: flatcamEditors/FlatCAMGeoEditor.py:1631 msgid "Geometry shape skew on Y axis canceled" msgstr "Deformarea pe axa Y anulată" -#: flatcamEditors/FlatCAMGeoEditor.py:2009 -#: flatcamEditors/FlatCAMGeoEditor.py:2080 +#: flatcamEditors/FlatCAMGeoEditor.py:2008 +#: flatcamEditors/FlatCAMGeoEditor.py:2079 #: flatcamEditors/FlatCAMGrbEditor.py:1435 #: flatcamEditors/FlatCAMGrbEditor.py:1513 msgid "Click on Center point ..." msgstr "Click pe punctul de Centru ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2022 +#: flatcamEditors/FlatCAMGeoEditor.py:2021 #: flatcamEditors/FlatCAMGrbEditor.py:1445 msgid "Click on Perimeter point to complete ..." msgstr "Click pe un punct aflat pe Circumferintă pentru terminare ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2054 +#: flatcamEditors/FlatCAMGeoEditor.py:2053 msgid "Done. Adding Circle completed." msgstr "Executat. Adăugarea unei forme Cerc terminată." -#: flatcamEditors/FlatCAMGeoEditor.py:2108 +#: flatcamEditors/FlatCAMGeoEditor.py:2107 #: flatcamEditors/FlatCAMGrbEditor.py:1546 msgid "Click on Start point ..." msgstr "Click pe punctul de Start ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2110 +#: flatcamEditors/FlatCAMGeoEditor.py:2109 #: flatcamEditors/FlatCAMGrbEditor.py:1548 msgid "Click on Point3 ..." msgstr "Click pe Punctul3 ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2112 +#: flatcamEditors/FlatCAMGeoEditor.py:2111 #: flatcamEditors/FlatCAMGrbEditor.py:1550 msgid "Click on Stop point ..." msgstr "Click pe punctulde Stop ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2117 +#: flatcamEditors/FlatCAMGeoEditor.py:2116 #: flatcamEditors/FlatCAMGrbEditor.py:1555 msgid "Click on Stop point to complete ..." msgstr "Click pe punctul de Stop pentru terminare ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2119 +#: flatcamEditors/FlatCAMGeoEditor.py:2118 #: flatcamEditors/FlatCAMGrbEditor.py:1557 msgid "Click on Point2 to complete ..." msgstr "Click pe Punctul2 pentru terminare ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2121 +#: flatcamEditors/FlatCAMGeoEditor.py:2120 #: flatcamEditors/FlatCAMGrbEditor.py:1559 msgid "Click on Center point to complete ..." msgstr "Click pe punctul de Centru pentru terminare ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2133 +#: flatcamEditors/FlatCAMGeoEditor.py:2132 #, python-format msgid "Direction: %s" msgstr "Direcţie: %s" -#: flatcamEditors/FlatCAMGeoEditor.py:2147 +#: flatcamEditors/FlatCAMGeoEditor.py:2146 #: flatcamEditors/FlatCAMGrbEditor.py:1585 msgid "Mode: Start -> Stop -> Center. Click on Start point ..." msgstr "Mod: Start -> Stop -> Centru. Click pe punctul de Start ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2150 +#: flatcamEditors/FlatCAMGeoEditor.py:2149 #: flatcamEditors/FlatCAMGrbEditor.py:1588 msgid "Mode: Point1 -> Point3 -> Point2. Click on Point1 ..." msgstr "Mod: Point1 -> Point3 -> Point2. Click pe Punctul1 ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2153 +#: flatcamEditors/FlatCAMGeoEditor.py:2152 #: flatcamEditors/FlatCAMGrbEditor.py:1591 msgid "Mode: Center -> Start -> Stop. Click on Center point ..." msgstr "Mod: Center -> Start -> Stop. Click pe punctul de Centru ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2294 +#: flatcamEditors/FlatCAMGeoEditor.py:2293 msgid "Done. Arc completed." msgstr "Executat. Adăugarea unei forme Arc terminată." -#: flatcamEditors/FlatCAMGeoEditor.py:2325 -#: flatcamEditors/FlatCAMGeoEditor.py:2398 +#: flatcamEditors/FlatCAMGeoEditor.py:2324 +#: flatcamEditors/FlatCAMGeoEditor.py:2397 msgid "Click on 1st corner ..." msgstr "Click pe primul colt ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2337 +#: flatcamEditors/FlatCAMGeoEditor.py:2336 msgid "Click on opposite corner to complete ..." msgstr "Click pe punctul opus pentru terminare ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2367 +#: flatcamEditors/FlatCAMGeoEditor.py:2366 msgid "Done. Rectangle completed." msgstr "Executat. Adăugare Pătrat terminată." -#: flatcamEditors/FlatCAMGeoEditor.py:2411 flatcamTools/ToolNCC.py:1728 +#: flatcamEditors/FlatCAMGeoEditor.py:2410 flatcamTools/ToolNCC.py:1728 #: flatcamTools/ToolPaint.py:1623 msgid "Click on next Point or click right mouse button to complete ..." msgstr "" "Click pe punctul următor sau click buton dreapta al mousului pentru " "terminare ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2442 +#: flatcamEditors/FlatCAMGeoEditor.py:2441 msgid "Done. Polygon completed." msgstr "Executat. Adăugarea unei forme Poligon terminată." -#: flatcamEditors/FlatCAMGeoEditor.py:2456 -#: flatcamEditors/FlatCAMGeoEditor.py:2521 +#: flatcamEditors/FlatCAMGeoEditor.py:2455 +#: flatcamEditors/FlatCAMGeoEditor.py:2520 #: flatcamEditors/FlatCAMGrbEditor.py:1111 #: flatcamEditors/FlatCAMGrbEditor.py:1322 msgid "Backtracked one point ..." msgstr "Revenit la penultimul Punct ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2499 +#: flatcamEditors/FlatCAMGeoEditor.py:2498 msgid "Done. Path completed." msgstr "Executat. Traseu finalizat." -#: flatcamEditors/FlatCAMGeoEditor.py:2658 +#: flatcamEditors/FlatCAMGeoEditor.py:2657 msgid "No shape selected. Select a shape to explode" msgstr "Nicio formă selectată. Selectați o formă pentru a o exploda" -#: flatcamEditors/FlatCAMGeoEditor.py:2691 +#: flatcamEditors/FlatCAMGeoEditor.py:2690 msgid "Done. Polygons exploded into lines." msgstr "Terminat. Poligoanele au fost descompuse în linii." -#: flatcamEditors/FlatCAMGeoEditor.py:2723 +#: flatcamEditors/FlatCAMGeoEditor.py:2722 msgid "MOVE: No shape selected. Select a shape to move" msgstr "" "MUTARE: Nici-o formă nu este selectată. Selectează o formă pentru a putea " "face deplasare" -#: flatcamEditors/FlatCAMGeoEditor.py:2726 -#: flatcamEditors/FlatCAMGeoEditor.py:2746 +#: flatcamEditors/FlatCAMGeoEditor.py:2725 +#: flatcamEditors/FlatCAMGeoEditor.py:2745 msgid " MOVE: Click on reference point ..." msgstr " MUTARE: Click pe punctul de referinţă ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2731 +#: flatcamEditors/FlatCAMGeoEditor.py:2730 msgid " Click on destination point ..." msgstr " Click pe punctul de Destinaţie ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2771 +#: flatcamEditors/FlatCAMGeoEditor.py:2770 msgid "Done. Geometry(s) Move completed." msgstr "Executat. Mutarea Geometriilor terminată." -#: flatcamEditors/FlatCAMGeoEditor.py:2904 +#: flatcamEditors/FlatCAMGeoEditor.py:2903 msgid "Done. Geometry(s) Copy completed." msgstr "Executat. Copierea Geometriilor terminată." -#: flatcamEditors/FlatCAMGeoEditor.py:2935 +#: flatcamEditors/FlatCAMGeoEditor.py:2934 #: flatcamEditors/FlatCAMGrbEditor.py:897 msgid "Click on 1st point ..." msgstr "Click pe primul punct ..." -#: flatcamEditors/FlatCAMGeoEditor.py:2959 +#: flatcamEditors/FlatCAMGeoEditor.py:2958 msgid "" "Font not supported. Only Regular, Bold, Italic and BoldItalic are supported. " "Error" @@ -4727,105 +4296,105 @@ msgstr "" "Fontul nu este compatibil. Doar cele tip: Regular, Bold, Italic și " "BoldItalic sunt acceptate. Eroarea" -#: flatcamEditors/FlatCAMGeoEditor.py:2967 +#: flatcamEditors/FlatCAMGeoEditor.py:2966 msgid "No text to add." msgstr "Niciun text de adăugat." -#: flatcamEditors/FlatCAMGeoEditor.py:2977 +#: flatcamEditors/FlatCAMGeoEditor.py:2976 msgid " Done. Adding Text completed." msgstr " Executat. Adăugarea de Text terminată." -#: flatcamEditors/FlatCAMGeoEditor.py:3014 +#: flatcamEditors/FlatCAMGeoEditor.py:3013 msgid "Create buffer geometry ..." msgstr "Crează o geometrie de tipe Bufer ..." -#: flatcamEditors/FlatCAMGeoEditor.py:3049 +#: flatcamEditors/FlatCAMGeoEditor.py:3048 #: flatcamEditors/FlatCAMGrbEditor.py:4994 msgid "Done. Buffer Tool completed." msgstr "Executat. Unealta Bufer terminată." -#: flatcamEditors/FlatCAMGeoEditor.py:3077 +#: flatcamEditors/FlatCAMGeoEditor.py:3076 msgid "Done. Buffer Int Tool completed." msgstr "Executat. Unealta Bufer Intern terminată." -#: flatcamEditors/FlatCAMGeoEditor.py:3105 +#: flatcamEditors/FlatCAMGeoEditor.py:3104 msgid "Done. Buffer Ext Tool completed." msgstr "Executat. Unealta Bufer Extern terminată." -#: flatcamEditors/FlatCAMGeoEditor.py:3154 +#: flatcamEditors/FlatCAMGeoEditor.py:3153 #: flatcamEditors/FlatCAMGrbEditor.py:2151 msgid "Select a shape to act as deletion area ..." msgstr "Selectează o formă geometrică ca formă de stergere ..." -#: flatcamEditors/FlatCAMGeoEditor.py:3156 -#: flatcamEditors/FlatCAMGeoEditor.py:3182 -#: flatcamEditors/FlatCAMGeoEditor.py:3188 +#: flatcamEditors/FlatCAMGeoEditor.py:3155 +#: flatcamEditors/FlatCAMGeoEditor.py:3181 +#: flatcamEditors/FlatCAMGeoEditor.py:3187 #: flatcamEditors/FlatCAMGrbEditor.py:2153 msgid "Click to pick-up the erase shape..." msgstr "Click pentru a activa forma de stergere..." -#: flatcamEditors/FlatCAMGeoEditor.py:3192 +#: flatcamEditors/FlatCAMGeoEditor.py:3191 #: flatcamEditors/FlatCAMGrbEditor.py:2212 msgid "Click to erase ..." msgstr "Click pt a sterge ..." -#: flatcamEditors/FlatCAMGeoEditor.py:3221 +#: flatcamEditors/FlatCAMGeoEditor.py:3220 #: flatcamEditors/FlatCAMGrbEditor.py:2245 msgid "Done. Eraser tool action completed." msgstr "Executat. Unealta Stergere s-a terminat." -#: flatcamEditors/FlatCAMGeoEditor.py:3271 +#: flatcamEditors/FlatCAMGeoEditor.py:3270 msgid "Create Paint geometry ..." msgstr "Crează o geometrie Paint ..." -#: flatcamEditors/FlatCAMGeoEditor.py:3284 +#: flatcamEditors/FlatCAMGeoEditor.py:3283 #: flatcamEditors/FlatCAMGrbEditor.py:2408 msgid "Shape transformations ..." msgstr "Transformări de forme geometrice ..." -#: flatcamEditors/FlatCAMGeoEditor.py:3340 flatcamGUI/PreferencesUI.py:4636 +#: flatcamEditors/FlatCAMGeoEditor.py:3339 flatcamGUI/PreferencesUI.py:4636 msgid "Geometry Editor" msgstr "Editor Geometrii" -#: flatcamEditors/FlatCAMGeoEditor.py:3346 +#: flatcamEditors/FlatCAMGeoEditor.py:3345 #: flatcamEditors/FlatCAMGrbEditor.py:2486 #: flatcamEditors/FlatCAMGrbEditor.py:3846 flatcamGUI/ObjectUI.py:262 -#: flatcamGUI/ObjectUI.py:1495 flatcamGUI/ObjectUI.py:2244 -#: flatcamTools/ToolCutOut.py:96 +#: flatcamGUI/ObjectUI.py:1496 flatcamGUI/ObjectUI.py:2245 +#: flatcamTools/ToolCutOut.py:95 msgid "Type" msgstr "Tip" -#: flatcamEditors/FlatCAMGeoEditor.py:3346 flatcamGUI/ObjectUI.py:217 -#: flatcamGUI/ObjectUI.py:741 flatcamGUI/ObjectUI.py:1431 -#: flatcamGUI/ObjectUI.py:2153 flatcamGUI/ObjectUI.py:2457 -#: flatcamGUI/ObjectUI.py:2524 flatcamTools/ToolCalibration.py:234 +#: flatcamEditors/FlatCAMGeoEditor.py:3345 flatcamGUI/ObjectUI.py:217 +#: flatcamGUI/ObjectUI.py:741 flatcamGUI/ObjectUI.py:1432 +#: flatcamGUI/ObjectUI.py:2154 flatcamGUI/ObjectUI.py:2458 +#: flatcamGUI/ObjectUI.py:2525 flatcamTools/ToolCalibration.py:234 #: flatcamTools/ToolFiducials.py:73 msgid "Name" msgstr "Nume" -#: flatcamEditors/FlatCAMGeoEditor.py:3588 +#: flatcamEditors/FlatCAMGeoEditor.py:3587 msgid "Ring" msgstr "Inel" -#: flatcamEditors/FlatCAMGeoEditor.py:3590 +#: flatcamEditors/FlatCAMGeoEditor.py:3589 msgid "Line" msgstr "Linie" -#: flatcamEditors/FlatCAMGeoEditor.py:3592 flatcamGUI/FlatCAMGUI.py:2187 +#: flatcamEditors/FlatCAMGeoEditor.py:3591 flatcamGUI/FlatCAMGUI.py:2187 #: flatcamGUI/PreferencesUI.py:5607 flatcamGUI/PreferencesUI.py:6131 #: flatcamTools/ToolNCC.py:584 flatcamTools/ToolPaint.py:528 msgid "Polygon" msgstr "Poligon" -#: flatcamEditors/FlatCAMGeoEditor.py:3594 +#: flatcamEditors/FlatCAMGeoEditor.py:3593 msgid "Multi-Line" msgstr "Multi-Linie" -#: flatcamEditors/FlatCAMGeoEditor.py:3596 +#: flatcamEditors/FlatCAMGeoEditor.py:3595 msgid "Multi-Polygon" msgstr "Multi-Poligon" -#: flatcamEditors/FlatCAMGeoEditor.py:3603 +#: flatcamEditors/FlatCAMGeoEditor.py:3602 msgid "Geo Elem" msgstr "Element Geo" @@ -5090,8 +4659,8 @@ msgstr "Cod" #: flatcamEditors/FlatCAMGrbEditor.py:3846 flatcamGUI/ObjectUI.py:262 #: flatcamGUI/PreferencesUI.py:1184 flatcamGUI/PreferencesUI.py:7776 #: flatcamGUI/PreferencesUI.py:7805 flatcamGUI/PreferencesUI.py:7907 -#: flatcamTools/ToolCopperThieving.py:262 -#: flatcamTools/ToolCopperThieving.py:302 flatcamTools/ToolFiducials.py:156 +#: flatcamTools/ToolCopperThieving.py:261 +#: flatcamTools/ToolCopperThieving.py:301 flatcamTools/ToolFiducials.py:156 msgid "Size" msgstr "Dimensiune" @@ -5219,20 +4788,20 @@ msgstr "Coltul pt bufer" msgid "" "There are 3 types of corners:\n" " - 'Round': the corner is rounded.\n" -" - 'Square:' the corner is met in a sharp angle.\n" -" - 'Beveled:' the corner is a line that directly connects the features " +" - 'Square': the corner is met in a sharp angle.\n" +" - 'Beveled': the corner is a line that directly connects the features " "meeting in the corner" msgstr "" "Sunt disponibile 3 tipuri de colțuri:\n" -" - 'Rotund': coltul este rotunjit.\n" -" - 'Patrat:' colțurile formează unghi de 90 grade.\n" -" - 'Beveled:' coltul este inlocuit cu o linie care uneste capetele liniilor " +"- 'Rotund': coltul este rotunjit.\n" +"- 'Patrat:' colțurile formează unghi de 90 grade.\n" +"- 'Beveled:' coltul este inlocuit cu o linie care uneste capetele liniilor " "care formează coltul" #: flatcamEditors/FlatCAMGrbEditor.py:2637 flatcamGUI/FlatCAMGUI.py:1046 #: flatcamGUI/FlatCAMGUI.py:2123 flatcamGUI/FlatCAMGUI.py:2195 #: flatcamGUI/FlatCAMGUI.py:2238 flatcamGUI/FlatCAMGUI.py:2721 -#: flatcamGUI/PreferencesUI.py:6880 flatcamTools/ToolTransform.py:30 +#: flatcamGUI/PreferencesUI.py:6880 flatcamTools/ToolTransform.py:29 msgid "Buffer" msgstr "Bufer" @@ -5534,7 +5103,7 @@ msgstr "" "String care sa inlocuiasca pe acele din campul 'Cautare' in cadrul textului." #: flatcamEditors/FlatCAMTextEditor.py:95 flatcamGUI/ObjectUI.py:485 -#: flatcamGUI/ObjectUI.py:2137 flatcamGUI/PreferencesUI.py:2250 +#: flatcamGUI/ObjectUI.py:2138 flatcamGUI/PreferencesUI.py:2250 #: flatcamGUI/PreferencesUI.py:4712 msgid "All" msgstr "Toate" @@ -5591,6 +5160,15 @@ msgstr "Deschide fişierul" msgid "Export Code ..." msgstr "Exportă GCode ..." +#: flatcamEditors/FlatCAMTextEditor.py:272 flatcamObjects/FlatCAMCNCJob.py:954 +#: flatcamTools/ToolSolderPaste.py:1530 +msgid "No such file or directory" +msgstr "Nu exista un aşa fişier sau director" + +#: flatcamEditors/FlatCAMTextEditor.py:284 flatcamObjects/FlatCAMCNCJob.py:968 +msgid "Saved to" +msgstr "Salvat in" + #: flatcamEditors/FlatCAMTextEditor.py:334 msgid "Code Editor content copied to clipboard ..." msgstr "Conținut Editor de cod copiat în clipboard ..." @@ -6251,6 +5829,16 @@ msgstr "Generează CNC" msgid "View Source" msgstr "Vizualiz. Sursa" +#: flatcamGUI/FlatCAMGUI.py:734 flatcamGUI/FlatCAMGUI.py:848 +#: flatcamGUI/FlatCAMGUI.py:1057 flatcamGUI/FlatCAMGUI.py:2123 +#: flatcamGUI/FlatCAMGUI.py:2267 flatcamGUI/FlatCAMGUI.py:2532 +#: flatcamGUI/FlatCAMGUI.py:2731 flatcamGUI/ObjectUI.py:1616 +#: flatcamObjects/FlatCAMGeometry.py:477 flatcamTools/ToolPanelize.py:541 +#: flatcamTools/ToolPanelize.py:568 flatcamTools/ToolPanelize.py:667 +#: flatcamTools/ToolPanelize.py:701 flatcamTools/ToolPanelize.py:766 +msgid "Copy" +msgstr "Copiază" + #: flatcamGUI/FlatCAMGUI.py:742 flatcamGUI/FlatCAMGUI.py:2280 #: flatcamTools/ToolProperties.py:31 msgid "Properties" @@ -6390,12 +5978,12 @@ msgid "Extract Drills Tool" msgstr "Unealta de Extragere Găuri" #: flatcamGUI/FlatCAMGUI.py:905 flatcamGUI/ObjectUI.py:595 -#: flatcamTools/ToolCutOut.py:447 +#: flatcamTools/ToolCutOut.py:446 msgid "Cutout Tool" msgstr "Unealta Decupare" #: flatcamGUI/FlatCAMGUI.py:907 flatcamGUI/FlatCAMGUI.py:2586 -#: flatcamGUI/ObjectUI.py:573 flatcamGUI/ObjectUI.py:2075 +#: flatcamGUI/ObjectUI.py:573 flatcamGUI/ObjectUI.py:2076 #: flatcamTools/ToolNCC.py:974 msgid "NCC Tool" msgstr "Unealta NCC" @@ -6425,8 +6013,8 @@ msgid "Rules Tool" msgstr "Unalta Verif. Reguli" #: flatcamGUI/FlatCAMGUI.py:923 flatcamGUI/FlatCAMGUI.py:1728 -#: flatcamGUI/FlatCAMGUI.py:2602 flatcamTools/ToolOptimal.py:34 -#: flatcamTools/ToolOptimal.py:308 +#: flatcamGUI/FlatCAMGUI.py:2602 flatcamTools/ToolOptimal.py:33 +#: flatcamTools/ToolOptimal.py:307 msgid "Optimal Tool" msgstr "Unealta Optim" @@ -6442,7 +6030,7 @@ msgid "QRCode Tool" msgstr "Unealta QRCode" #: flatcamGUI/FlatCAMGUI.py:934 flatcamGUI/FlatCAMGUI.py:2613 -#: flatcamTools/ToolCopperThieving.py:40 flatcamTools/ToolCopperThieving.py:569 +#: flatcamTools/ToolCopperThieving.py:39 flatcamTools/ToolCopperThieving.py:568 msgid "Copper Thieving Tool" msgstr "Unealta Copper Thieving" @@ -6620,7 +6208,7 @@ msgstr "Marc. aria" #: flatcamGUI/FlatCAMGUI.py:1064 flatcamGUI/FlatCAMGUI.py:2124 #: flatcamGUI/FlatCAMGUI.py:2215 flatcamGUI/FlatCAMGUI.py:2278 -#: flatcamGUI/FlatCAMGUI.py:2738 flatcamTools/ToolMove.py:28 +#: flatcamGUI/FlatCAMGUI.py:2738 flatcamTools/ToolMove.py:27 msgid "Move" msgstr "Mutare" @@ -6665,18 +6253,18 @@ msgstr "Arie Afișare" msgid "General" msgstr "General" -#: flatcamGUI/FlatCAMGUI.py:1212 flatcamTools/ToolCopperThieving.py:75 -#: flatcamTools/ToolDblSided.py:65 flatcamTools/ToolExtractDrills.py:61 -#: flatcamTools/ToolInvertGerber.py:72 flatcamTools/ToolOptimal.py:72 +#: flatcamGUI/FlatCAMGUI.py:1212 flatcamTools/ToolCopperThieving.py:74 +#: flatcamTools/ToolDblSided.py:64 flatcamTools/ToolExtractDrills.py:61 +#: flatcamTools/ToolInvertGerber.py:72 flatcamTools/ToolOptimal.py:71 #: flatcamTools/ToolPunchGerber.py:64 msgid "GERBER" msgstr "GERBER" -#: flatcamGUI/FlatCAMGUI.py:1222 flatcamTools/ToolDblSided.py:93 +#: flatcamGUI/FlatCAMGUI.py:1222 flatcamTools/ToolDblSided.py:92 msgid "EXCELLON" msgstr "EXCELLON" -#: flatcamGUI/FlatCAMGUI.py:1232 flatcamTools/ToolDblSided.py:121 +#: flatcamGUI/FlatCAMGUI.py:1232 flatcamTools/ToolDblSided.py:120 msgid "GEOMETRY" msgstr "GEOMETRIE" @@ -6685,7 +6273,7 @@ msgid "CNC-JOB" msgstr "CNCJob" #: flatcamGUI/FlatCAMGUI.py:1251 flatcamGUI/ObjectUI.py:562 -#: flatcamGUI/ObjectUI.py:2050 +#: flatcamGUI/ObjectUI.py:2051 msgid "TOOLS" msgstr "Unelte" @@ -7200,16 +6788,33 @@ msgstr "Comută Vizibilitate" msgid "New" msgstr "Nou" +#: flatcamGUI/FlatCAMGUI.py:2154 flatcamGUI/ObjectUI.py:449 +#: flatcamObjects/FlatCAMGerber.py:238 flatcamObjects/FlatCAMGerber.py:326 +#: flatcamTools/ToolCalibration.py:631 flatcamTools/ToolCalibration.py:648 +#: flatcamTools/ToolCalibration.py:815 flatcamTools/ToolCopperThieving.py:144 +#: flatcamTools/ToolCopperThieving.py:158 +#: flatcamTools/ToolCopperThieving.py:604 flatcamTools/ToolCutOut.py:92 +#: flatcamTools/ToolDblSided.py:226 flatcamTools/ToolFilm.py:69 +#: flatcamTools/ToolFilm.py:102 flatcamTools/ToolFilm.py:549 +#: flatcamTools/ToolFilm.py:557 flatcamTools/ToolImage.py:49 +#: flatcamTools/ToolImage.py:271 flatcamTools/ToolNCC.py:95 +#: flatcamTools/ToolNCC.py:558 flatcamTools/ToolNCC.py:1295 +#: flatcamTools/ToolPaint.py:502 flatcamTools/ToolPaint.py:706 +#: flatcamTools/ToolPanelize.py:116 flatcamTools/ToolPanelize.py:372 +#: flatcamTools/ToolPanelize.py:389 +msgid "Geometry" +msgstr "Geometrie" + #: flatcamGUI/FlatCAMGUI.py:2158 flatcamGUI/PreferencesUI.py:8410 #: flatcamTools/ToolAlignObjects.py:74 flatcamTools/ToolAlignObjects.py:110 #: flatcamTools/ToolCalibration.py:197 flatcamTools/ToolCalibration.py:631 #: flatcamTools/ToolCalibration.py:648 flatcamTools/ToolCalibration.py:807 -#: flatcamTools/ToolCalibration.py:815 flatcamTools/ToolCopperThieving.py:145 -#: flatcamTools/ToolCopperThieving.py:159 -#: flatcamTools/ToolCopperThieving.py:605 flatcamTools/ToolDblSided.py:226 +#: flatcamTools/ToolCalibration.py:815 flatcamTools/ToolCopperThieving.py:144 +#: flatcamTools/ToolCopperThieving.py:158 +#: flatcamTools/ToolCopperThieving.py:604 flatcamTools/ToolDblSided.py:225 #: flatcamTools/ToolFilm.py:359 flatcamTools/ToolNCC.py:558 #: flatcamTools/ToolNCC.py:1295 flatcamTools/ToolPaint.py:502 -#: flatcamTools/ToolPaint.py:706 flatcamTools/ToolPanelize.py:374 +#: flatcamTools/ToolPaint.py:706 flatcamTools/ToolPanelize.py:372 #: flatcamTools/ToolPunchGerber.py:149 flatcamTools/ToolPunchGerber.py:164 msgid "Excellon" msgstr "Excellon" @@ -7258,7 +6863,7 @@ msgstr "Intersecţie" msgid "Subtraction" msgstr "Scădere" -#: flatcamGUI/FlatCAMGUI.py:2209 flatcamGUI/ObjectUI.py:2139 +#: flatcamGUI/FlatCAMGUI.py:2209 flatcamGUI/ObjectUI.py:2140 #: flatcamGUI/PreferencesUI.py:4714 msgid "Cut" msgstr "Tăiere" @@ -7417,7 +7022,7 @@ msgid "Exit" msgstr "Iesiere" #: flatcamGUI/GUIElements.py:2513 flatcamGUI/PreferencesUI.py:6313 -#: flatcamTools/ToolDblSided.py:174 flatcamTools/ToolDblSided.py:389 +#: flatcamTools/ToolDblSided.py:173 flatcamTools/ToolDblSided.py:388 #: flatcamTools/ToolFilm.py:219 msgid "Reference" msgstr "Referinţă" @@ -7460,6 +7065,10 @@ msgstr "" msgid "Save Log" msgstr "Salvează Log" +#: flatcamGUI/GUIElements.py:2592 flatcamTools/ToolShell.py:285 +msgid "Type >help< to get started" +msgstr "Tastați >help< pentru a începe" + #: flatcamGUI/ObjectUI.py:38 msgid "FlatCAM Object" msgstr "Obiect FlatCAM" @@ -7520,7 +7129,7 @@ msgid "Gerber Object" msgstr "Obiect Gerber" #: flatcamGUI/ObjectUI.py:186 flatcamGUI/ObjectUI.py:729 -#: flatcamGUI/ObjectUI.py:1424 flatcamGUI/ObjectUI.py:2123 +#: flatcamGUI/ObjectUI.py:1425 flatcamGUI/ObjectUI.py:2124 #: flatcamGUI/PreferencesUI.py:1940 flatcamGUI/PreferencesUI.py:2856 #: flatcamGUI/PreferencesUI.py:4121 flatcamGUI/PreferencesUI.py:4688 msgid "Plot Options" @@ -7528,7 +7137,7 @@ msgstr "Opțiuni afișare" #: flatcamGUI/ObjectUI.py:192 flatcamGUI/ObjectUI.py:730 #: flatcamGUI/PreferencesUI.py:1947 flatcamGUI/PreferencesUI.py:2868 -#: flatcamGUI/PreferencesUI.py:7728 flatcamTools/ToolCopperThieving.py:192 +#: flatcamGUI/PreferencesUI.py:7728 flatcamTools/ToolCopperThieving.py:191 msgid "Solid" msgstr "Solid" @@ -7553,7 +7162,7 @@ msgid "Plot" msgstr "Afisează" #: flatcamGUI/ObjectUI.py:210 flatcamGUI/ObjectUI.py:770 -#: flatcamGUI/ObjectUI.py:1484 flatcamGUI/ObjectUI.py:2233 +#: flatcamGUI/ObjectUI.py:1485 flatcamGUI/ObjectUI.py:2234 #: flatcamGUI/PreferencesUI.py:1963 flatcamGUI/PreferencesUI.py:4127 #: flatcamGUI/PreferencesUI.py:4699 msgid "Plot (show) this object." @@ -7615,7 +7224,7 @@ msgstr "" msgid "V-Shape" msgstr "Forma-V" -#: flatcamGUI/ObjectUI.py:322 flatcamGUI/ObjectUI.py:1670 +#: flatcamGUI/ObjectUI.py:322 flatcamGUI/ObjectUI.py:1671 #: flatcamGUI/PreferencesUI.py:2411 flatcamGUI/PreferencesUI.py:5351 #: flatcamGUI/PreferencesUI.py:5917 flatcamGUI/PreferencesUI.py:5924 #: flatcamTools/ToolNCC.py:233 flatcamTools/ToolNCC.py:240 @@ -7623,7 +7232,7 @@ msgstr "Forma-V" msgid "V-Tip Dia" msgstr "V-dia" -#: flatcamGUI/ObjectUI.py:324 flatcamGUI/ObjectUI.py:1673 +#: flatcamGUI/ObjectUI.py:324 flatcamGUI/ObjectUI.py:1674 #: flatcamGUI/PreferencesUI.py:2413 flatcamGUI/PreferencesUI.py:5353 #: flatcamGUI/PreferencesUI.py:5919 flatcamTools/ToolNCC.py:235 #: flatcamTools/ToolPaint.py:218 @@ -7632,7 +7241,7 @@ msgstr "" "Diametrul la vârf al uneltei tip V-Shape.\n" "Forma in V" -#: flatcamGUI/ObjectUI.py:335 flatcamGUI/ObjectUI.py:1685 +#: flatcamGUI/ObjectUI.py:335 flatcamGUI/ObjectUI.py:1686 #: flatcamGUI/PreferencesUI.py:2424 flatcamGUI/PreferencesUI.py:5363 #: flatcamGUI/PreferencesUI.py:5930 flatcamGUI/PreferencesUI.py:5938 #: flatcamTools/ToolNCC.py:246 flatcamTools/ToolNCC.py:254 @@ -7640,7 +7249,7 @@ msgstr "" msgid "V-Tip Angle" msgstr "V-unghi" -#: flatcamGUI/ObjectUI.py:337 flatcamGUI/ObjectUI.py:1688 +#: flatcamGUI/ObjectUI.py:337 flatcamGUI/ObjectUI.py:1689 #: flatcamGUI/PreferencesUI.py:2426 flatcamGUI/PreferencesUI.py:5365 #: flatcamGUI/PreferencesUI.py:5932 flatcamTools/ToolNCC.py:248 #: flatcamTools/ToolPaint.py:231 @@ -7651,9 +7260,9 @@ msgstr "" "Unghiul la vârf pentru unealta tip V-Shape. \n" "In grade." -#: flatcamGUI/ObjectUI.py:351 flatcamGUI/ObjectUI.py:1704 +#: flatcamGUI/ObjectUI.py:351 flatcamGUI/ObjectUI.py:1705 #: flatcamGUI/PreferencesUI.py:2439 flatcamGUI/PreferencesUI.py:4243 -#: flatcamGUI/PreferencesUI.py:5669 flatcamTools/ToolCutOut.py:142 +#: flatcamGUI/PreferencesUI.py:5669 flatcamTools/ToolCutOut.py:141 msgid "" "Cutting depth (negative)\n" "below the copper surface." @@ -7744,6 +7353,26 @@ msgstr "" "prin bifarea aici, aria obiectului de mai jos va fi\n" "scăzută din geometrie de tip Izolare." +#: flatcamGUI/ObjectUI.py:449 flatcamGUI/PreferencesUI.py:6527 +#: flatcamObjects/FlatCAMGerber.py:238 flatcamObjects/FlatCAMGerber.py:326 +#: flatcamTools/ToolAlignObjects.py:73 flatcamTools/ToolAlignObjects.py:109 +#: flatcamTools/ToolCalibration.py:196 flatcamTools/ToolCalibration.py:631 +#: flatcamTools/ToolCalibration.py:648 flatcamTools/ToolCalibration.py:807 +#: flatcamTools/ToolCalibration.py:815 flatcamTools/ToolCopperThieving.py:144 +#: flatcamTools/ToolCopperThieving.py:158 +#: flatcamTools/ToolCopperThieving.py:604 flatcamTools/ToolCutOut.py:91 +#: flatcamTools/ToolDblSided.py:224 flatcamTools/ToolFilm.py:69 +#: flatcamTools/ToolFilm.py:102 flatcamTools/ToolFilm.py:549 +#: flatcamTools/ToolFilm.py:557 flatcamTools/ToolImage.py:49 +#: flatcamTools/ToolImage.py:252 flatcamTools/ToolImage.py:273 +#: flatcamTools/ToolNCC.py:96 flatcamTools/ToolNCC.py:558 +#: flatcamTools/ToolNCC.py:1295 flatcamTools/ToolPaint.py:502 +#: flatcamTools/ToolPaint.py:706 flatcamTools/ToolPanelize.py:116 +#: flatcamTools/ToolPanelize.py:202 flatcamTools/ToolPanelize.py:372 +#: flatcamTools/ToolPanelize.py:389 +msgid "Gerber" +msgstr "Gerber" + #: flatcamGUI/ObjectUI.py:456 flatcamTools/ToolNCC.py:86 #: flatcamTools/ToolPaint.py:80 msgid "Obj Type" @@ -7764,7 +7393,7 @@ msgstr "" #: flatcamGUI/ObjectUI.py:471 flatcamGUI/PreferencesUI.py:8028 #: flatcamTools/ToolCalibration.py:186 flatcamTools/ToolNCC.py:109 -#: flatcamTools/ToolPaint.py:103 flatcamTools/ToolPanelize.py:100 +#: flatcamTools/ToolPaint.py:103 flatcamTools/ToolPanelize.py:98 #: flatcamTools/ToolQRCode.py:78 msgid "Object" msgstr "Obiect" @@ -7884,7 +7513,7 @@ msgstr "" "care să curete de cupru toate zonele unde se dorește să nu \n" "fie cupru." -#: flatcamGUI/ObjectUI.py:575 flatcamGUI/ObjectUI.py:2077 +#: flatcamGUI/ObjectUI.py:575 flatcamGUI/ObjectUI.py:2078 #: flatcamTools/ToolNCC.py:599 msgid "" "Create the Geometry Object\n" @@ -7961,12 +7590,12 @@ msgstr "" "va avea colțurile rotunjite." #: flatcamGUI/ObjectUI.py:650 flatcamGUI/ObjectUI.py:691 -#: flatcamTools/ToolSolderPaste.py:135 +#: flatcamTools/ToolSolderPaste.py:134 msgid "Generate Geo" msgstr "Crează Geo" #: flatcamGUI/ObjectUI.py:660 flatcamGUI/PreferencesUI.py:2322 -#: flatcamGUI/PreferencesUI.py:7558 flatcamTools/ToolPanelize.py:101 +#: flatcamGUI/PreferencesUI.py:7558 flatcamTools/ToolPanelize.py:99 #: flatcamTools/ToolQRCode.py:192 msgid "Bounding Box" msgstr "Forma înconjurătoare" @@ -8010,13 +7639,13 @@ msgid "Solid circles." msgstr "Cercuri solide." #: flatcamGUI/ObjectUI.py:780 flatcamGUI/ObjectUI.py:875 -#: flatcamGUI/ObjectUI.py:2254 flatcamGUI/PreferencesUI.py:3289 +#: flatcamGUI/ObjectUI.py:2255 flatcamGUI/PreferencesUI.py:3289 #: flatcamTools/ToolProperties.py:166 msgid "Drills" msgstr "Găuri" #: flatcamGUI/ObjectUI.py:780 flatcamGUI/ObjectUI.py:876 -#: flatcamGUI/ObjectUI.py:2254 flatcamGUI/PreferencesUI.py:3290 +#: flatcamGUI/ObjectUI.py:2255 flatcamGUI/PreferencesUI.py:3290 #: flatcamGUI/PreferencesUI.py:3961 flatcamTools/ToolProperties.py:168 msgid "Slots" msgstr "Sloturi" @@ -8035,7 +7664,7 @@ msgstr "" "in codul masina CNC.\n" "Aici se selectează uneltele pt generarea de G-Code." -#: flatcamGUI/ObjectUI.py:790 flatcamGUI/ObjectUI.py:1508 +#: flatcamGUI/ObjectUI.py:790 flatcamGUI/ObjectUI.py:1509 #: flatcamTools/ToolPaint.py:142 msgid "" "Tool Diameter. It's value (in current FlatCAM units) \n" @@ -8068,7 +7697,19 @@ msgstr "" "Comută afișarea găurilor pt unealta curentă.\n" "Aceata nu selectează uneltele pt generarea G-Code." -#: flatcamGUI/ObjectUI.py:820 flatcamGUI/ObjectUI.py:1663 +#: flatcamGUI/ObjectUI.py:817 flatcamGUI/ObjectUI.py:1661 +#: flatcamObjects/FlatCAMExcellon.py:514 flatcamObjects/FlatCAMExcellon.py:726 +#: flatcamObjects/FlatCAMExcellon.py:742 flatcamObjects/FlatCAMExcellon.py:746 +#: flatcamObjects/FlatCAMGeometry.py:306 flatcamObjects/FlatCAMGeometry.py:731 +#: flatcamObjects/FlatCAMGeometry.py:767 flatcamTools/ToolNCC.py:331 +#: flatcamTools/ToolNCC.py:797 flatcamTools/ToolNCC.py:811 +#: flatcamTools/ToolNCC.py:1191 flatcamTools/ToolPaint.py:314 +#: flatcamTools/ToolPaint.py:767 flatcamTools/ToolPaint.py:779 +#: flatcamTools/ToolPaint.py:1166 +msgid "Parameters for" +msgstr "Parametri pt" + +#: flatcamGUI/ObjectUI.py:820 flatcamGUI/ObjectUI.py:1664 #: flatcamTools/ToolNCC.py:334 flatcamTools/ToolPaint.py:317 msgid "" "The data used for creating GCode.\n" @@ -8130,15 +7771,15 @@ msgstr "" "Daca se foloseşte o val. pozitivă, aplicaţia\n" "va incerca in mod automat să schimbe semnul." -#: flatcamGUI/ObjectUI.py:920 flatcamGUI/ObjectUI.py:1722 +#: flatcamGUI/ObjectUI.py:920 flatcamGUI/ObjectUI.py:1723 #: flatcamGUI/PreferencesUI.py:3331 flatcamGUI/PreferencesUI.py:4261 -#: flatcamGUI/PreferencesUI.py:5687 flatcamTools/ToolCutOut.py:160 +#: flatcamGUI/PreferencesUI.py:5687 flatcamTools/ToolCutOut.py:159 msgid "Multi-Depth" msgstr "Multi-Pas" -#: flatcamGUI/ObjectUI.py:923 flatcamGUI/ObjectUI.py:1725 +#: flatcamGUI/ObjectUI.py:923 flatcamGUI/ObjectUI.py:1726 #: flatcamGUI/PreferencesUI.py:3334 flatcamGUI/PreferencesUI.py:4264 -#: flatcamGUI/PreferencesUI.py:5690 flatcamTools/ToolCutOut.py:163 +#: flatcamGUI/PreferencesUI.py:5690 flatcamTools/ToolCutOut.py:162 msgid "" "Use multiple passes to limit\n" "the cut depth in each pass. Will\n" @@ -8150,9 +7791,9 @@ msgstr "" "va tăia de mai multe ori până când este\n" "atins Z de tăiere, Z Cut." -#: flatcamGUI/ObjectUI.py:936 flatcamGUI/ObjectUI.py:1739 +#: flatcamGUI/ObjectUI.py:936 flatcamGUI/ObjectUI.py:1740 #: flatcamGUI/PreferencesUI.py:3346 flatcamGUI/PreferencesUI.py:5702 -#: flatcamTools/ToolCutOut.py:177 +#: flatcamTools/ToolCutOut.py:176 msgid "Depth of each pass (positive)." msgstr "" "Adâncimea pentru fiecare trecere.\n" @@ -8167,7 +7808,7 @@ msgstr "" "in planul X-Y, fără a efectua taieri, adica\n" "in afara materialului." -#: flatcamGUI/ObjectUI.py:968 flatcamGUI/ObjectUI.py:1769 +#: flatcamGUI/ObjectUI.py:968 flatcamGUI/ObjectUI.py:1770 #: flatcamGUI/PreferencesUI.py:4380 msgid "" "Cutting speed in the XY\n" @@ -8188,7 +7829,7 @@ msgstr "" "Asa numita viteza unealta tip \"plunge\".\n" "Aceasta este mișcarea lineara G01." -#: flatcamGUI/ObjectUI.py:998 flatcamGUI/ObjectUI.py:1796 +#: flatcamGUI/ObjectUI.py:998 flatcamGUI/ObjectUI.py:1797 #: flatcamGUI/PreferencesUI.py:3597 flatcamGUI/PreferencesUI.py:4503 msgid "Feedrate Rapids" msgstr "Feedrate rapizi" @@ -8206,13 +7847,13 @@ msgstr "" "printerul 3D Marlin, implicit când se foloseşte fişierul\n" "postprocesor: Marlin. Ignora aceasta parametru in rest." -#: flatcamGUI/ObjectUI.py:1020 flatcamGUI/ObjectUI.py:1816 +#: flatcamGUI/ObjectUI.py:1020 flatcamGUI/ObjectUI.py:1817 #: flatcamGUI/PreferencesUI.py:4521 msgid "Re-cut" msgstr "Re-tăiere" #: flatcamGUI/ObjectUI.py:1022 flatcamGUI/ObjectUI.py:1035 -#: flatcamGUI/ObjectUI.py:1818 flatcamGUI/ObjectUI.py:1830 +#: flatcamGUI/ObjectUI.py:1819 flatcamGUI/ObjectUI.py:1831 #: flatcamGUI/PreferencesUI.py:4523 flatcamGUI/PreferencesUI.py:4535 msgid "" "In order to remove possible\n" @@ -8225,6 +7866,12 @@ msgstr "" "cu sfârşitul acesteia (este vorba de un contur), sunt eliminate\n" "prin taierea peste acest punct." +#: flatcamGUI/ObjectUI.py:1048 flatcamGUI/ObjectUI.py:1840 +#: flatcamGUI/PreferencesUI.py:4409 flatcamObjects/FlatCAMExcellon.py:1332 +#: flatcamObjects/FlatCAMGeometry.py:1568 +msgid "Spindle speed" +msgstr "Viteza motor" + #: flatcamGUI/ObjectUI.py:1050 flatcamGUI/PreferencesUI.py:3442 msgid "" "Speed of the spindle\n" @@ -8235,7 +7882,7 @@ msgstr "" "Acest parametru este optional și se poate lasa gol\n" "daca nu se foloseşte." -#: flatcamGUI/ObjectUI.py:1065 flatcamGUI/ObjectUI.py:1858 +#: flatcamGUI/ObjectUI.py:1065 flatcamGUI/ObjectUI.py:1859 #: flatcamGUI/PreferencesUI.py:3456 flatcamGUI/PreferencesUI.py:4427 msgid "" "Pause to allow the spindle to reach its\n" @@ -8244,7 +7891,7 @@ msgstr "" "O pauza care permite motorului să ajunga la turatia specificata,\n" "inainte de a incepe mișcarea spre poziţia de tăiere (găurire)." -#: flatcamGUI/ObjectUI.py:1076 flatcamGUI/ObjectUI.py:1868 +#: flatcamGUI/ObjectUI.py:1076 flatcamGUI/ObjectUI.py:1869 #: flatcamGUI/PreferencesUI.py:3464 flatcamGUI/PreferencesUI.py:4432 msgid "Number of time units for spindle to dwell." msgstr "Timpul (ori secunde ori milisec) cat se stă in pauză." @@ -8266,12 +7913,12 @@ msgstr "" "Valoarea de aici efectuează o compensare asupra\n" "parametrului >Z tăiere<." -#: flatcamGUI/ObjectUI.py:1148 flatcamGUI/ObjectUI.py:1922 +#: flatcamGUI/ObjectUI.py:1148 flatcamGUI/ObjectUI.py:1923 #: flatcamTools/ToolNCC.py:492 flatcamTools/ToolPaint.py:423 msgid "Apply parameters to all tools" msgstr "Aplicați parametrii la toate Uneltele" -#: flatcamGUI/ObjectUI.py:1150 flatcamGUI/ObjectUI.py:1924 +#: flatcamGUI/ObjectUI.py:1150 flatcamGUI/ObjectUI.py:1925 #: flatcamTools/ToolNCC.py:494 flatcamTools/ToolPaint.py:425 msgid "" "The parameters in the current form will be applied\n" @@ -8280,17 +7927,17 @@ msgstr "" "Parametrii din formularul curent vor fi aplicați\n" "la toate Uneltele din Tabelul Unelte." -#: flatcamGUI/ObjectUI.py:1161 flatcamGUI/ObjectUI.py:1935 +#: flatcamGUI/ObjectUI.py:1161 flatcamGUI/ObjectUI.py:1936 #: flatcamTools/ToolNCC.py:505 flatcamTools/ToolPaint.py:436 msgid "Common Parameters" msgstr "Parametrii Comuni" -#: flatcamGUI/ObjectUI.py:1163 flatcamGUI/ObjectUI.py:1937 +#: flatcamGUI/ObjectUI.py:1163 flatcamGUI/ObjectUI.py:1938 #: flatcamTools/ToolNCC.py:507 flatcamTools/ToolPaint.py:438 msgid "Parameters that are common for all tools." msgstr "Parametrii care sunt comuni pentru toate uneltele." -#: flatcamGUI/ObjectUI.py:1168 flatcamGUI/ObjectUI.py:1942 +#: flatcamGUI/ObjectUI.py:1168 flatcamGUI/ObjectUI.py:1943 msgid "Tool change Z" msgstr "Z schimb unealtă" @@ -8303,7 +7950,7 @@ msgstr "" "in codul G-Code (pauza pentru schimbare unealtă).\n" "De obicei este folosita comanda G-Code M6." -#: flatcamGUI/ObjectUI.py:1177 flatcamGUI/ObjectUI.py:1953 +#: flatcamGUI/ObjectUI.py:1177 flatcamGUI/ObjectUI.py:1954 #: flatcamGUI/PreferencesUI.py:3380 flatcamGUI/PreferencesUI.py:4327 msgid "" "Z-axis position (height) for\n" @@ -8318,24 +7965,24 @@ msgstr "" "Înălţimea uneltei imediat dupa ce se porneste operatia CNC.\n" "Lasa casuta goala daca nu se foloseşte." -#: flatcamGUI/ObjectUI.py:1203 flatcamGUI/ObjectUI.py:1981 +#: flatcamGUI/ObjectUI.py:1203 flatcamGUI/ObjectUI.py:1982 #: flatcamGUI/PreferencesUI.py:3396 flatcamGUI/PreferencesUI.py:4346 msgid "End move Z" msgstr "Z oprire" -#: flatcamGUI/ObjectUI.py:1205 flatcamGUI/ObjectUI.py:1983 +#: flatcamGUI/ObjectUI.py:1205 flatcamGUI/ObjectUI.py:1984 #: flatcamGUI/PreferencesUI.py:3398 flatcamGUI/PreferencesUI.py:4348 msgid "" "Height of the tool after\n" "the last move at the end of the job." msgstr "Înălţimea la care se parchează freza dupa ce se termina lucrul." -#: flatcamGUI/ObjectUI.py:1222 flatcamGUI/ObjectUI.py:2000 +#: flatcamGUI/ObjectUI.py:1222 flatcamGUI/ObjectUI.py:2001 #: flatcamGUI/PreferencesUI.py:3413 flatcamGUI/PreferencesUI.py:4366 msgid "End move X,Y" msgstr "X-Y Ultima miscare" -#: flatcamGUI/ObjectUI.py:1224 flatcamGUI/ObjectUI.py:2002 +#: flatcamGUI/ObjectUI.py:1224 flatcamGUI/ObjectUI.py:2003 #: flatcamGUI/PreferencesUI.py:3415 flatcamGUI/PreferencesUI.py:4368 msgid "" "End move X,Y position. In format (x,y).\n" @@ -8346,12 +7993,12 @@ msgstr "" "Dacă nici-o valoare nu este introdusă atunci nici-o miscare nu va fi\n" "efectuată la final." -#: flatcamGUI/ObjectUI.py:1234 flatcamGUI/ObjectUI.py:1876 +#: flatcamGUI/ObjectUI.py:1234 flatcamGUI/ObjectUI.py:1877 #: flatcamGUI/PreferencesUI.py:3613 flatcamGUI/PreferencesUI.py:4544 msgid "Probe Z depth" msgstr "Z sonda" -#: flatcamGUI/ObjectUI.py:1236 flatcamGUI/ObjectUI.py:1878 +#: flatcamGUI/ObjectUI.py:1236 flatcamGUI/ObjectUI.py:1879 #: flatcamGUI/PreferencesUI.py:3615 flatcamGUI/PreferencesUI.py:4546 msgid "" "The maximum depth that the probe is allowed\n" @@ -8360,25 +8007,21 @@ msgstr "" "Adâncimea maxima la care este permis sondei să coboare.\n" "Are o valoare negativă, in unitatile curente." -#: flatcamGUI/ObjectUI.py:1252 flatcamGUI/ObjectUI.py:1893 +#: flatcamGUI/ObjectUI.py:1253 flatcamGUI/ObjectUI.py:1894 #: flatcamGUI/PreferencesUI.py:3626 flatcamGUI/PreferencesUI.py:4559 msgid "Feedrate Probe" msgstr "Feedrate sonda" -#: flatcamGUI/ObjectUI.py:1254 flatcamGUI/ObjectUI.py:1895 +#: flatcamGUI/ObjectUI.py:1255 flatcamGUI/ObjectUI.py:1896 #: flatcamGUI/PreferencesUI.py:3628 flatcamGUI/PreferencesUI.py:4561 msgid "The feedrate used while the probe is probing." msgstr "Viteza sondei când aceasta coboara." -#: flatcamGUI/ObjectUI.py:1261 -msgid "e_fr_probe" -msgstr "e_fr_probe" - -#: flatcamGUI/ObjectUI.py:1270 +#: flatcamGUI/ObjectUI.py:1271 msgid "Preprocessor E" msgstr "Postprocesor E" -#: flatcamGUI/ObjectUI.py:1272 +#: flatcamGUI/ObjectUI.py:1273 msgid "" "The preprocessor JSON file that dictates\n" "Gcode output for Excellon Objects." @@ -8386,11 +8029,11 @@ msgstr "" "Fișierul JSON postprocesor care dictează\n" "codul Gcode pentru obiectele Excellon." -#: flatcamGUI/ObjectUI.py:1282 +#: flatcamGUI/ObjectUI.py:1283 msgid "Preprocessor G" msgstr "Postprocesor G" -#: flatcamGUI/ObjectUI.py:1284 +#: flatcamGUI/ObjectUI.py:1285 msgid "" "The preprocessor JSON file that dictates\n" "Gcode output for Geometry (Milling) Objects." @@ -8398,7 +8041,7 @@ msgstr "" "Fișierul JSON postprocesor care dictează\n" "codul Gcode pentru obiectele Geometrie (cand se frezează)." -#: flatcamGUI/ObjectUI.py:1308 flatcamGUI/ObjectUI.py:2026 +#: flatcamGUI/ObjectUI.py:1309 flatcamGUI/ObjectUI.py:2027 msgid "" "Add / Select at least one tool in the tool-table.\n" "Click the # header to select all, or Ctrl + LMB\n" @@ -8408,11 +8051,11 @@ msgstr "" "Click pe header coloana # pentru selectarea a toate sau CTRL + LMB click\n" "pentru o selecţie personalizată de unelte." -#: flatcamGUI/ObjectUI.py:1316 flatcamGUI/ObjectUI.py:2033 +#: flatcamGUI/ObjectUI.py:1317 flatcamGUI/ObjectUI.py:2034 msgid "Generate CNCJob object" msgstr "Generează un obiect CNCJob" -#: flatcamGUI/ObjectUI.py:1318 +#: flatcamGUI/ObjectUI.py:1319 msgid "" "Generate the CNC Job.\n" "If milling then an additional Geometry object will be created" @@ -8420,11 +8063,11 @@ msgstr "" "Generează obiectul CNCJob.\n" "Dacă se frezează atunci va fi creat un obiect Geometrie additional" -#: flatcamGUI/ObjectUI.py:1335 +#: flatcamGUI/ObjectUI.py:1336 msgid "Milling Geometry" msgstr "Geometrie Frezare" -#: flatcamGUI/ObjectUI.py:1337 +#: flatcamGUI/ObjectUI.py:1338 msgid "" "Create Geometry for milling holes.\n" "Select from the Tools Table above the hole dias to be\n" @@ -8434,16 +8077,16 @@ msgstr "" "Selectați din tabelul Unelte de deasupra găurile\n" "care trebuie frezate. Utilizați coloana # pentru a face selecția." -#: flatcamGUI/ObjectUI.py:1345 flatcamGUI/PreferencesUI.py:2207 +#: flatcamGUI/ObjectUI.py:1346 flatcamGUI/PreferencesUI.py:2207 #: flatcamGUI/PreferencesUI.py:3514 msgid "Diameter of the cutting tool." msgstr "Diametrul uneltei taietoare." -#: flatcamGUI/ObjectUI.py:1355 +#: flatcamGUI/ObjectUI.py:1356 msgid "Mill Drills" msgstr "Frezare Găuri" -#: flatcamGUI/ObjectUI.py:1357 +#: flatcamGUI/ObjectUI.py:1358 msgid "" "Create the Geometry Object\n" "for milling DRILLS toolpaths." @@ -8451,11 +8094,11 @@ msgstr "" "Crează un obiect tip Geometrie pt.\n" "frezarea rutelor create din Găuri." -#: flatcamGUI/ObjectUI.py:1375 +#: flatcamGUI/ObjectUI.py:1376 msgid "Mill Slots" msgstr "Frezare Sloturi" -#: flatcamGUI/ObjectUI.py:1377 +#: flatcamGUI/ObjectUI.py:1378 msgid "" "Create the Geometry Object\n" "for milling SLOTS toolpaths." @@ -8463,11 +8106,11 @@ msgstr "" "Crează un obiect tip Geometrie pt.\n" "frezarea rutelor create din Sloturi." -#: flatcamGUI/ObjectUI.py:1419 flatcamTools/ToolCutOut.py:327 +#: flatcamGUI/ObjectUI.py:1420 flatcamTools/ToolCutOut.py:326 msgid "Geometry Object" msgstr "Obiect Geometrie" -#: flatcamGUI/ObjectUI.py:1465 +#: flatcamGUI/ObjectUI.py:1466 msgid "" "Tools in this Geometry object used for cutting.\n" "The 'Offset' entry will set an offset for the cut.\n" @@ -8497,23 +8140,23 @@ msgstr "" "- V-Dia \n" "- V-unghi." -#: flatcamGUI/ObjectUI.py:1482 flatcamGUI/ObjectUI.py:2231 +#: flatcamGUI/ObjectUI.py:1483 flatcamGUI/ObjectUI.py:2232 #: flatcamGUI/PreferencesUI.py:4698 msgid "Plot Object" msgstr "Afisează" -#: flatcamGUI/ObjectUI.py:1495 flatcamGUI/ObjectUI.py:2244 -#: flatcamGUI/ObjectUI.py:2254 flatcamGUI/PreferencesUI.py:7747 -#: flatcamTools/ToolCopperThieving.py:222 +#: flatcamGUI/ObjectUI.py:1496 flatcamGUI/ObjectUI.py:2245 +#: flatcamGUI/ObjectUI.py:2255 flatcamGUI/PreferencesUI.py:7747 +#: flatcamTools/ToolCopperThieving.py:221 msgid "Dia" msgstr "Dia" -#: flatcamGUI/ObjectUI.py:1495 flatcamGUI/ObjectUI.py:2244 +#: flatcamGUI/ObjectUI.py:1496 flatcamGUI/ObjectUI.py:2245 #: flatcamTools/ToolNCC.py:132 flatcamTools/ToolPaint.py:128 msgid "TT" msgstr "TU" -#: flatcamGUI/ObjectUI.py:1502 +#: flatcamGUI/ObjectUI.py:1503 msgid "" "This is the Tool Number.\n" "When ToolChange is checked, on toolchange event this value\n" @@ -8524,7 +8167,7 @@ msgstr "" "la evenim. de schimb unealtă, va aparea sub forma T1, T2, etc\n" "in codul masina CNC" -#: flatcamGUI/ObjectUI.py:1513 +#: flatcamGUI/ObjectUI.py:1514 msgid "" "The value for the Offset can be:\n" "- Path -> There is no offset, the tool cut will be done through the geometry " @@ -8540,7 +8183,7 @@ msgstr "" "'buzunar'\n" "- Afară-> Tăietura va urma geometria pe exterior." -#: flatcamGUI/ObjectUI.py:1520 +#: flatcamGUI/ObjectUI.py:1521 msgid "" "The (Operation) Type has only informative value. Usually the UI form " "values \n" @@ -8563,7 +8206,7 @@ msgstr "" "un\n" "vârf fin, ascuțit." -#: flatcamGUI/ObjectUI.py:1529 +#: flatcamGUI/ObjectUI.py:1530 msgid "" "The Tool Type (TT) can be:\n" "- Circular with 1 ... 4 teeth -> it is informative only. Being circular the " @@ -8593,7 +8236,7 @@ msgstr "" "Alegerea tipului V-Shape (forma in V) va selecta automat Tipul de Operaţie " "ca Izolare." -#: flatcamGUI/ObjectUI.py:1541 +#: flatcamGUI/ObjectUI.py:1542 msgid "" "Plot column. It is visible only for MultiGeo geometries, meaning geometries " "that holds the geometry\n" @@ -8613,7 +8256,7 @@ msgstr "" "se poate activa/dezactiva\n" "afișarea in canvas." -#: flatcamGUI/ObjectUI.py:1559 +#: flatcamGUI/ObjectUI.py:1560 msgid "" "The value to offset the cut when \n" "the Offset type selected is 'Offset'.\n" @@ -8624,13 +8267,13 @@ msgstr "" "este >Ofset<. Aceasta valoare poate fi pozitivă pentru un ofset\n" "in exterior sau poate fi negativă pentru un ofset in interior." -#: flatcamGUI/ObjectUI.py:1578 flatcamTools/ToolNCC.py:209 +#: flatcamGUI/ObjectUI.py:1579 flatcamTools/ToolNCC.py:209 #: flatcamTools/ToolNCC.py:923 flatcamTools/ToolPaint.py:192 #: flatcamTools/ToolPaint.py:849 flatcamTools/ToolSolderPaste.py:559 msgid "New Tool" msgstr "O Noua Unealtă" -#: flatcamGUI/ObjectUI.py:1595 +#: flatcamGUI/ObjectUI.py:1596 msgid "" "Add a new tool to the Tool Table\n" "with the specified diameter." @@ -8638,13 +8281,13 @@ msgstr "" "Adăugați o Unealta noua in Tabelul de Unelte\n" "cu diametrul specificat." -#: flatcamGUI/ObjectUI.py:1600 flatcamTools/ToolNCC.py:300 +#: flatcamGUI/ObjectUI.py:1601 flatcamTools/ToolNCC.py:300 #: flatcamTools/ToolNCC.py:634 flatcamTools/ToolPaint.py:283 #: flatcamTools/ToolPaint.py:679 msgid "Add from DB" msgstr "Adaugă Unealtă din DB" -#: flatcamGUI/ObjectUI.py:1602 flatcamTools/ToolNCC.py:302 +#: flatcamGUI/ObjectUI.py:1603 flatcamTools/ToolNCC.py:302 #: flatcamTools/ToolPaint.py:285 msgid "" "Add a new tool to the Tool Table\n" @@ -8653,7 +8296,7 @@ msgstr "" "Adaugă o noua unealta in Tabela de Unelte,\n" "din DB Unelte." -#: flatcamGUI/ObjectUI.py:1617 +#: flatcamGUI/ObjectUI.py:1618 msgid "" "Copy a selection of tools in the Tool Table\n" "by first selecting a row in the Tool Table." @@ -8661,7 +8304,7 @@ msgstr "" "Copiază o selecţie de unelte in Tabela de Unelte prin\n" "selectarea unei linii (sau mai multe) in Tabela de Unelte." -#: flatcamGUI/ObjectUI.py:1623 +#: flatcamGUI/ObjectUI.py:1624 msgid "" "Delete a selection of tools in the Tool Table\n" "by first selecting a row in the Tool Table." @@ -8669,7 +8312,7 @@ msgstr "" "Șterge o selecţie de unelte in Tabela de Unelte prin\n" "selectarea unei linii (sau mai multe) in Tabela de Unelte." -#: flatcamGUI/ObjectUI.py:1750 flatcamGUI/PreferencesUI.py:4296 +#: flatcamGUI/ObjectUI.py:1751 flatcamGUI/PreferencesUI.py:4296 msgid "" "Height of the tool when\n" "moving without cutting." @@ -8677,7 +8320,7 @@ msgstr "" "Înălţimea la care se misca unealta când nu taie,\n" "deasupra materialului." -#: flatcamGUI/ObjectUI.py:1783 flatcamGUI/PreferencesUI.py:4395 +#: flatcamGUI/ObjectUI.py:1784 flatcamGUI/PreferencesUI.py:4395 msgid "" "Cutting speed in the XY\n" "plane in units per minute.\n" @@ -8687,7 +8330,7 @@ msgstr "" "in unitati pe minut.\n" "Mai este numita și viteza de plonjare." -#: flatcamGUI/ObjectUI.py:1798 flatcamGUI/PreferencesUI.py:4505 +#: flatcamGUI/ObjectUI.py:1799 flatcamGUI/PreferencesUI.py:4505 msgid "" "Cutting speed in the XY plane\n" "(in units per minute).\n" @@ -8700,7 +8343,7 @@ msgstr "" "Este utila doar când se foloseşte cu un printer 3D Marlin,\n" "pentru toate celelalte cazuri ignora acest parametru." -#: flatcamGUI/ObjectUI.py:1842 flatcamGUI/PreferencesUI.py:4412 +#: flatcamGUI/ObjectUI.py:1843 flatcamGUI/PreferencesUI.py:4412 msgid "" "Speed of the spindle in RPM (optional).\n" "If LASER preprocessor is used,\n" @@ -8710,7 +8353,7 @@ msgstr "" "Daca postprocesorul Laser este folosit,\n" "valoarea să este puterea laserului." -#: flatcamGUI/ObjectUI.py:1945 flatcamGUI/PreferencesUI.py:4317 +#: flatcamGUI/ObjectUI.py:1946 flatcamGUI/PreferencesUI.py:4317 msgid "" "Include tool-change sequence\n" "in the Machine Code (Pause for tool change)." @@ -8719,7 +8362,7 @@ msgstr "" "codul masina CNC. O pauza pentru schimbul\n" "uneltei (M6)." -#: flatcamGUI/ObjectUI.py:2014 flatcamGUI/PreferencesUI.py:4449 +#: flatcamGUI/ObjectUI.py:2015 flatcamGUI/PreferencesUI.py:4449 msgid "" "The Preprocessor file that dictates\n" "the Machine Code (like GCode, RML, HPGL) output." @@ -8728,17 +8371,17 @@ msgstr "" "codului masina CNC (GCode, RML, HPGL) care \n" "mai apoi este salvat." -#: flatcamGUI/ObjectUI.py:2035 +#: flatcamGUI/ObjectUI.py:2036 msgid "Generate the CNC Job object." msgstr "Generează un obiect CNCJob." -#: flatcamGUI/ObjectUI.py:2052 +#: flatcamGUI/ObjectUI.py:2053 msgid "Launch Paint Tool in Tools Tab." msgstr "" "Lansează unealta FlatCAM numita Paint și\n" "o instalează in Tab-ul Unealta." -#: flatcamGUI/ObjectUI.py:2060 flatcamGUI/PreferencesUI.py:5874 +#: flatcamGUI/ObjectUI.py:2061 flatcamGUI/PreferencesUI.py:5874 msgid "" "Creates tool paths to cover the\n" "whole area of a polygon (remove\n" @@ -8751,15 +8394,15 @@ msgstr "" "singur poligon se va cere să faceti click pe poligonul\n" "dorit." -#: flatcamGUI/ObjectUI.py:2115 +#: flatcamGUI/ObjectUI.py:2116 msgid "CNC Job Object" msgstr "Obiect CNCJob" -#: flatcamGUI/ObjectUI.py:2126 flatcamGUI/PreferencesUI.py:4703 +#: flatcamGUI/ObjectUI.py:2127 flatcamGUI/PreferencesUI.py:4703 msgid "Plot kind" msgstr "Tip afișare" -#: flatcamGUI/ObjectUI.py:2129 flatcamGUI/PreferencesUI.py:4705 +#: flatcamGUI/ObjectUI.py:2130 flatcamGUI/PreferencesUI.py:4705 msgid "" "This selects the kind of geometries on the canvas to plot.\n" "Those can be either of type 'Travel' which means the moves\n" @@ -8771,15 +8414,15 @@ msgstr "" "- Voiaj -> miscarile deasupra materialului\n" "- Tăiere -> miscarile in material, tăiere." -#: flatcamGUI/ObjectUI.py:2138 flatcamGUI/PreferencesUI.py:4713 +#: flatcamGUI/ObjectUI.py:2139 flatcamGUI/PreferencesUI.py:4713 msgid "Travel" msgstr "Voiaj" -#: flatcamGUI/ObjectUI.py:2142 flatcamGUI/PreferencesUI.py:4722 +#: flatcamGUI/ObjectUI.py:2143 flatcamGUI/PreferencesUI.py:4722 msgid "Display Annotation" msgstr "Afişează notații" -#: flatcamGUI/ObjectUI.py:2144 flatcamGUI/PreferencesUI.py:4724 +#: flatcamGUI/ObjectUI.py:2145 flatcamGUI/PreferencesUI.py:4724 msgid "" "This selects if to display text annotation on the plot.\n" "When checked it will display numbers in order for each end\n" @@ -8789,11 +8432,11 @@ msgstr "" "Cand este selectat va afisa numerele in ordine pt fiecare\n" "capat al liniilor de traversare." -#: flatcamGUI/ObjectUI.py:2159 +#: flatcamGUI/ObjectUI.py:2160 msgid "Travelled dist." msgstr "Dist. parcursă" -#: flatcamGUI/ObjectUI.py:2161 flatcamGUI/ObjectUI.py:2166 +#: flatcamGUI/ObjectUI.py:2162 flatcamGUI/ObjectUI.py:2167 msgid "" "This is the total travelled distance on X-Y plane.\n" "In current units." @@ -8801,11 +8444,11 @@ msgstr "" "Aceasta este distanţa totala parcursa in planul X-Y.\n" "In unitatile curente." -#: flatcamGUI/ObjectUI.py:2171 +#: flatcamGUI/ObjectUI.py:2172 msgid "Estimated time" msgstr "Durată estimată" -#: flatcamGUI/ObjectUI.py:2173 flatcamGUI/ObjectUI.py:2178 +#: flatcamGUI/ObjectUI.py:2174 flatcamGUI/ObjectUI.py:2179 msgid "" "This is the estimated time to do the routing/drilling,\n" "without the time spent in ToolChange events." @@ -8813,11 +8456,11 @@ msgstr "" "Acesta este timpul estimat pentru efectuarea traseului / găuririi,\n" "fără timpul petrecut în evenimentele ToolChange." -#: flatcamGUI/ObjectUI.py:2213 +#: flatcamGUI/ObjectUI.py:2214 msgid "CNC Tools Table" msgstr "Tabela Unelte CNC" -#: flatcamGUI/ObjectUI.py:2216 +#: flatcamGUI/ObjectUI.py:2217 msgid "" "Tools in this CNCJob object used for cutting.\n" "The tool diameter is used for plotting on canvas.\n" @@ -8838,23 +8481,23 @@ msgstr "" "Shape\n" "(cu forma in V)." -#: flatcamGUI/ObjectUI.py:2244 flatcamGUI/ObjectUI.py:2255 +#: flatcamGUI/ObjectUI.py:2245 flatcamGUI/ObjectUI.py:2256 msgid "P" msgstr "P" -#: flatcamGUI/ObjectUI.py:2265 +#: flatcamGUI/ObjectUI.py:2266 msgid "Update Plot" msgstr "Actualiz. afișare" -#: flatcamGUI/ObjectUI.py:2267 +#: flatcamGUI/ObjectUI.py:2268 msgid "Update the plot." msgstr "Actualizează afișarea obiectelor." -#: flatcamGUI/ObjectUI.py:2274 flatcamGUI/PreferencesUI.py:5120 +#: flatcamGUI/ObjectUI.py:2275 flatcamGUI/PreferencesUI.py:5120 msgid "Export CNC Code" msgstr "Exporta codul masina CNC" -#: flatcamGUI/ObjectUI.py:2276 flatcamGUI/PreferencesUI.py:5061 +#: flatcamGUI/ObjectUI.py:2277 flatcamGUI/PreferencesUI.py:5061 #: flatcamGUI/PreferencesUI.py:5122 msgid "" "Export and save G-Code to\n" @@ -8863,11 +8506,11 @@ msgstr "" "Exportă și salvează codul G-Code intr-un fişier\n" "care este salvat pe HDD." -#: flatcamGUI/ObjectUI.py:2282 +#: flatcamGUI/ObjectUI.py:2283 msgid "Prepend to CNC Code" msgstr "Adaugă la inceput in codul G-Code" -#: flatcamGUI/ObjectUI.py:2284 flatcamGUI/ObjectUI.py:2291 +#: flatcamGUI/ObjectUI.py:2285 flatcamGUI/ObjectUI.py:2292 #: flatcamGUI/PreferencesUI.py:5077 msgid "" "Type here any G-Code commands you would\n" @@ -8876,11 +8519,11 @@ msgstr "" "Adaugă aici orice comenzi G-Code care se dorește să fie\n" "inserate la inceputul codului G-Code." -#: flatcamGUI/ObjectUI.py:2297 +#: flatcamGUI/ObjectUI.py:2298 msgid "Append to CNC Code" msgstr "Adaugă la sfârşit in codul G-Code" -#: flatcamGUI/ObjectUI.py:2299 flatcamGUI/ObjectUI.py:2307 +#: flatcamGUI/ObjectUI.py:2300 flatcamGUI/ObjectUI.py:2308 #: flatcamGUI/PreferencesUI.py:5093 msgid "" "Type here any G-Code commands you would\n" @@ -8890,11 +8533,11 @@ msgstr "" "Adaugă aici orice comenzi G-Code care se dorește să fie\n" "inserate la sfârşitul codului G-Code." -#: flatcamGUI/ObjectUI.py:2321 flatcamGUI/PreferencesUI.py:5128 +#: flatcamGUI/ObjectUI.py:2322 flatcamGUI/PreferencesUI.py:5128 msgid "Toolchange G-Code" msgstr "G-Code pt schimb unealtă" -#: flatcamGUI/ObjectUI.py:2324 flatcamGUI/PreferencesUI.py:5131 +#: flatcamGUI/ObjectUI.py:2325 flatcamGUI/PreferencesUI.py:5131 msgid "" "Type here any G-Code commands you would\n" "like to be executed when Toolchange event is encountered.\n" @@ -8916,7 +8559,7 @@ msgstr "" "'toolchange_custom'\n" "in numele sau." -#: flatcamGUI/ObjectUI.py:2339 +#: flatcamGUI/ObjectUI.py:2340 msgid "" "Type here any G-Code commands you would\n" "like to be executed when Toolchange event is encountered.\n" @@ -8935,11 +8578,11 @@ msgstr "" "'toolchange_custom'\n" "in numele sau." -#: flatcamGUI/ObjectUI.py:2354 flatcamGUI/PreferencesUI.py:5170 +#: flatcamGUI/ObjectUI.py:2355 flatcamGUI/PreferencesUI.py:5170 msgid "Use Toolchange Macro" msgstr "Fol. Macro schimb unealtă" -#: flatcamGUI/ObjectUI.py:2356 flatcamGUI/PreferencesUI.py:5172 +#: flatcamGUI/ObjectUI.py:2357 flatcamGUI/PreferencesUI.py:5172 msgid "" "Check this box if you want to use\n" "a Custom Toolchange GCode (macro)." @@ -8947,7 +8590,7 @@ msgstr "" "Bifează aici daca dorești să folosești Macro pentru\n" "schimb unelte." -#: flatcamGUI/ObjectUI.py:2364 flatcamGUI/PreferencesUI.py:5184 +#: flatcamGUI/ObjectUI.py:2365 flatcamGUI/PreferencesUI.py:5184 msgid "" "A list of the FlatCAM variables that can be used\n" "in the Toolchange event.\n" @@ -8957,7 +8600,7 @@ msgstr "" "de schimb al uneltei (când se intalneste comanda M6).\n" "Este necesar să fie inconjurate de simbolul '%'" -#: flatcamGUI/ObjectUI.py:2371 flatcamGUI/PreferencesUI.py:2627 +#: flatcamGUI/ObjectUI.py:2372 flatcamGUI/PreferencesUI.py:2627 #: flatcamGUI/PreferencesUI.py:3833 flatcamGUI/PreferencesUI.py:4640 #: flatcamGUI/PreferencesUI.py:5191 flatcamGUI/PreferencesUI.py:5310 #: flatcamGUI/PreferencesUI.py:5640 flatcamGUI/PreferencesUI.py:5797 @@ -8968,64 +8611,64 @@ msgstr "" #: flatcamGUI/PreferencesUI.py:7646 flatcamGUI/PreferencesUI.py:7900 #: flatcamGUI/PreferencesUI.py:8016 flatcamGUI/PreferencesUI.py:8135 #: flatcamGUI/PreferencesUI.py:8347 flatcamGUI/PreferencesUI.py:8556 -#: flatcamTools/ToolCopperThieving.py:90 flatcamTools/ToolFiducials.py:149 +#: flatcamTools/ToolCopperThieving.py:89 flatcamTools/ToolFiducials.py:149 #: flatcamTools/ToolInvertGerber.py:82 msgid "Parameters" msgstr "Parametri" -#: flatcamGUI/ObjectUI.py:2374 flatcamGUI/PreferencesUI.py:5196 +#: flatcamGUI/ObjectUI.py:2375 flatcamGUI/PreferencesUI.py:5196 msgid "FlatCAM CNC parameters" msgstr "Parametri FlatCAM CNC" -#: flatcamGUI/ObjectUI.py:2375 flatcamGUI/PreferencesUI.py:5201 +#: flatcamGUI/ObjectUI.py:2376 flatcamGUI/PreferencesUI.py:5201 msgid "tool number" msgstr "numărul uneltei" -#: flatcamGUI/ObjectUI.py:2376 flatcamGUI/PreferencesUI.py:5202 +#: flatcamGUI/ObjectUI.py:2377 flatcamGUI/PreferencesUI.py:5202 msgid "tool diameter" msgstr "diametrul sculei" -#: flatcamGUI/ObjectUI.py:2377 flatcamGUI/PreferencesUI.py:5203 +#: flatcamGUI/ObjectUI.py:2378 flatcamGUI/PreferencesUI.py:5203 msgid "for Excellon, total number of drills" msgstr "pentru Excellon, numărul total de operațiuni găurire" -#: flatcamGUI/ObjectUI.py:2379 flatcamGUI/PreferencesUI.py:5205 +#: flatcamGUI/ObjectUI.py:2380 flatcamGUI/PreferencesUI.py:5205 msgid "X coord for Toolchange" msgstr "Coordonata X pentru schimbarea uneltei" -#: flatcamGUI/ObjectUI.py:2380 flatcamGUI/PreferencesUI.py:5206 +#: flatcamGUI/ObjectUI.py:2381 flatcamGUI/PreferencesUI.py:5206 msgid "Y coord for Toolchange" msgstr "Coordonata Y pentru schimbarea uneltei" -#: flatcamGUI/ObjectUI.py:2381 flatcamGUI/PreferencesUI.py:5208 +#: flatcamGUI/ObjectUI.py:2382 flatcamGUI/PreferencesUI.py:5208 msgid "Z coord for Toolchange" msgstr "Coordonata Z pentru schimbarea uneltei" -#: flatcamGUI/ObjectUI.py:2382 +#: flatcamGUI/ObjectUI.py:2383 msgid "depth where to cut" msgstr "adâncimea de tăiere" -#: flatcamGUI/ObjectUI.py:2383 +#: flatcamGUI/ObjectUI.py:2384 msgid "height where to travel" msgstr "inălţimea deplasare" -#: flatcamGUI/ObjectUI.py:2384 flatcamGUI/PreferencesUI.py:5211 +#: flatcamGUI/ObjectUI.py:2385 flatcamGUI/PreferencesUI.py:5211 msgid "the step value for multidepth cut" msgstr "pasul pentru taierea progresiva" -#: flatcamGUI/ObjectUI.py:2386 flatcamGUI/PreferencesUI.py:5213 +#: flatcamGUI/ObjectUI.py:2387 flatcamGUI/PreferencesUI.py:5213 msgid "the value for the spindle speed" msgstr "valoarea viteza motor" -#: flatcamGUI/ObjectUI.py:2388 +#: flatcamGUI/ObjectUI.py:2389 msgid "time to dwell to allow the spindle to reach it's set RPM" msgstr "durata de asteptare ca motorul să ajunga la turatia setată" -#: flatcamGUI/ObjectUI.py:2404 +#: flatcamGUI/ObjectUI.py:2405 msgid "View CNC Code" msgstr "Vizualiz. codul CNC" -#: flatcamGUI/ObjectUI.py:2406 +#: flatcamGUI/ObjectUI.py:2407 msgid "" "Opens TAB to view/modify/print G-Code\n" "file." @@ -9033,11 +8676,11 @@ msgstr "" "Deschide un nou tab pentru a vizualiza, modifica\n" "sau tipari codul G-Code." -#: flatcamGUI/ObjectUI.py:2411 +#: flatcamGUI/ObjectUI.py:2412 msgid "Save CNC Code" msgstr "Salvează codul CNC" -#: flatcamGUI/ObjectUI.py:2413 +#: flatcamGUI/ObjectUI.py:2414 msgid "" "Opens dialog to save G-Code\n" "file." @@ -9045,79 +8688,79 @@ msgstr "" "Deshide o fereastra dialog pentru salvarea codului\n" "G-Code intr-un fişier." -#: flatcamGUI/ObjectUI.py:2447 +#: flatcamGUI/ObjectUI.py:2448 msgid "Script Object" msgstr "Editare Script" -#: flatcamGUI/ObjectUI.py:2467 flatcamGUI/ObjectUI.py:2541 +#: flatcamGUI/ObjectUI.py:2468 flatcamGUI/ObjectUI.py:2542 msgid "Auto Completer" msgstr "Autocompletare" -#: flatcamGUI/ObjectUI.py:2469 +#: flatcamGUI/ObjectUI.py:2470 msgid "This selects if the auto completer is enabled in the Script Editor." msgstr "" "Aceasta selectează dacă completatorul automat este activat în Script Editor." -#: flatcamGUI/ObjectUI.py:2514 +#: flatcamGUI/ObjectUI.py:2515 msgid "Document Object" msgstr "Obiect document" -#: flatcamGUI/ObjectUI.py:2543 +#: flatcamGUI/ObjectUI.py:2544 msgid "This selects if the auto completer is enabled in the Document Editor." msgstr "" "Aceasta selectează dacă completatorul automat este activat în Editorul de " "documente." -#: flatcamGUI/ObjectUI.py:2561 +#: flatcamGUI/ObjectUI.py:2562 msgid "Font Type" msgstr "Tipul Font" -#: flatcamGUI/ObjectUI.py:2578 flatcamGUI/PreferencesUI.py:1278 +#: flatcamGUI/ObjectUI.py:2579 flatcamGUI/PreferencesUI.py:1278 msgid "Font Size" msgstr "Dim. Font" -#: flatcamGUI/ObjectUI.py:2614 +#: flatcamGUI/ObjectUI.py:2615 msgid "Alignment" msgstr "Aliniere" -#: flatcamGUI/ObjectUI.py:2619 +#: flatcamGUI/ObjectUI.py:2620 msgid "Align Left" msgstr "Aliniați la stânga" -#: flatcamGUI/ObjectUI.py:2629 +#: flatcamGUI/ObjectUI.py:2630 msgid "Align Right" msgstr "Aliniați la dreapta" -#: flatcamGUI/ObjectUI.py:2634 +#: flatcamGUI/ObjectUI.py:2635 msgid "Justify" msgstr "Aliniere duala" -#: flatcamGUI/ObjectUI.py:2641 +#: flatcamGUI/ObjectUI.py:2642 msgid "Font Color" msgstr "Culoare FOnt" -#: flatcamGUI/ObjectUI.py:2643 +#: flatcamGUI/ObjectUI.py:2644 msgid "Set the font color for the selected text" msgstr "Setați culoarea fontului pentru textul selectat" -#: flatcamGUI/ObjectUI.py:2657 +#: flatcamGUI/ObjectUI.py:2658 msgid "Selection Color" msgstr "Culoare de selecție" -#: flatcamGUI/ObjectUI.py:2659 +#: flatcamGUI/ObjectUI.py:2660 msgid "Set the selection color when doing text selection." msgstr "Setați culoarea de selecție atunci când faceți selecția textului." -#: flatcamGUI/ObjectUI.py:2673 +#: flatcamGUI/ObjectUI.py:2674 msgid "Tab Size" msgstr "Dimens. filei" -#: flatcamGUI/ObjectUI.py:2675 +#: flatcamGUI/ObjectUI.py:2676 msgid "Set the tab size. In pixels. Default value is 80 pixels." msgstr "" "Setați dimensiunea filei. În pixeli. Valoarea implicită este de 80 pixeli." -#: flatcamGUI/PlotCanvasLegacy.py:1301 +#: flatcamGUI/PlotCanvasLegacy.py:1299 msgid "" "Could not annotate due of a difference between the number of text elements " "and the number of text positions." @@ -9778,6 +9421,17 @@ msgstr "" "Alegerea efectuata aici va influenta ce aparamtri sunt disponibili\n" "in Tab-ul SELECTAT dar și in alte parti ale FlatCAM." +#: flatcamGUI/PreferencesUI.py:1646 flatcamGUI/PreferencesUI.py:3041 +#: flatcamObjects/FlatCAMExcellon.py:614 flatcamObjects/FlatCAMGeometry.py:485 +#: flatcamObjects/FlatCAMGerber.py:250 +msgid "Basic" +msgstr "Baza" + +#: flatcamGUI/PreferencesUI.py:1647 flatcamObjects/FlatCAMExcellon.py:627 +#: flatcamObjects/FlatCAMGeometry.py:506 flatcamObjects/FlatCAMGerber.py:277 +msgid "Advanced" +msgstr "Avansat" + #: flatcamGUI/PreferencesUI.py:1653 msgid "Portable app" msgstr "Aplicație portabilă" @@ -11016,7 +10670,7 @@ msgstr "" #: flatcamGUI/PreferencesUI.py:4484 flatcamGUI/PreferencesUI.py:7045 #: flatcamGUI/PreferencesUI.py:8092 flatcamTools/ToolCalibration.py:125 -#: flatcamTools/ToolSolderPaste.py:241 +#: flatcamTools/ToolSolderPaste.py:240 msgid "Toolchange X-Y" msgstr "X,Y schimb. unealtă" @@ -11388,7 +11042,7 @@ msgstr "" "Daca nu este bifat, foloseşte algoritmul standard." #: flatcamGUI/PreferencesUI.py:5588 flatcamGUI/PreferencesUI.py:6119 -#: flatcamGUI/PreferencesUI.py:7696 flatcamTools/ToolCopperThieving.py:127 +#: flatcamGUI/PreferencesUI.py:7696 flatcamTools/ToolCopperThieving.py:126 #: flatcamTools/ToolNCC.py:535 flatcamTools/ToolNCC.py:1311 #: flatcamTools/ToolNCC.py:1642 flatcamTools/ToolNCC.py:1930 #: flatcamTools/ToolNCC.py:1985 flatcamTools/ToolPaint.py:486 @@ -11397,8 +11051,8 @@ msgid "Area Selection" msgstr "Selecţie zonă" #: flatcamGUI/PreferencesUI.py:5588 flatcamGUI/PreferencesUI.py:6119 -#: flatcamGUI/PreferencesUI.py:7697 flatcamTools/ToolCopperThieving.py:128 -#: flatcamTools/ToolDblSided.py:217 flatcamTools/ToolNCC.py:535 +#: flatcamGUI/PreferencesUI.py:7697 flatcamTools/ToolCopperThieving.py:127 +#: flatcamTools/ToolDblSided.py:216 flatcamTools/ToolNCC.py:535 #: flatcamTools/ToolNCC.py:1658 flatcamTools/ToolNCC.py:1936 #: flatcamTools/ToolNCC.py:1993 flatcamTools/ToolNCC.py:2301 #: flatcamTools/ToolNCC.py:2581 flatcamTools/ToolNCC.py:3007 @@ -11459,11 +11113,11 @@ msgid "Cutout Tool Options" msgstr "Opțiuni Unealta Decupare" #: flatcamGUI/PreferencesUI.py:5651 flatcamTools/ToolCalculators.py:123 -#: flatcamTools/ToolCutOut.py:130 +#: flatcamTools/ToolCutOut.py:129 msgid "Tool Diameter" msgstr "Dia unealtă" -#: flatcamGUI/PreferencesUI.py:5653 flatcamTools/ToolCutOut.py:132 +#: flatcamGUI/PreferencesUI.py:5653 flatcamTools/ToolCutOut.py:131 msgid "" "Diameter of the tool used to cutout\n" "the PCB shape out of the surrounding material." @@ -11475,7 +11129,7 @@ msgstr "" msgid "Object kind" msgstr "Tipul de obiect" -#: flatcamGUI/PreferencesUI.py:5710 flatcamTools/ToolCutOut.py:78 +#: flatcamGUI/PreferencesUI.py:5710 flatcamTools/ToolCutOut.py:77 msgid "" "Choice of what kind the object we want to cutout is.
    - Single: " "contain a single PCB Gerber outline object.
    - Panel: a panel PCB " @@ -11487,15 +11141,15 @@ msgstr "" "tip panel, care este făcut\n" "din mai multe contururi PCB." -#: flatcamGUI/PreferencesUI.py:5717 flatcamTools/ToolCutOut.py:84 +#: flatcamGUI/PreferencesUI.py:5717 flatcamTools/ToolCutOut.py:83 msgid "Single" msgstr "Unic" -#: flatcamGUI/PreferencesUI.py:5718 flatcamTools/ToolCutOut.py:85 +#: flatcamGUI/PreferencesUI.py:5718 flatcamTools/ToolCutOut.py:84 msgid "Panel" msgstr "Panel" -#: flatcamGUI/PreferencesUI.py:5725 flatcamTools/ToolCutOut.py:193 +#: flatcamGUI/PreferencesUI.py:5725 flatcamTools/ToolCutOut.py:192 msgid "" "Margin over bounds. A positive value here\n" "will make the cutout of the PCB further from\n" @@ -11505,11 +11159,11 @@ msgstr "" "va face decuparea distanțat cu aceasta valoare \n" "fata de PCB-ul efectiv" -#: flatcamGUI/PreferencesUI.py:5738 flatcamTools/ToolCutOut.py:204 +#: flatcamGUI/PreferencesUI.py:5738 flatcamTools/ToolCutOut.py:203 msgid "Gap size" msgstr "Dim. punte" -#: flatcamGUI/PreferencesUI.py:5740 flatcamTools/ToolCutOut.py:206 +#: flatcamGUI/PreferencesUI.py:5740 flatcamTools/ToolCutOut.py:205 msgid "" "The size of the bridge gaps in the cutout\n" "used to keep the board connected to\n" @@ -11520,7 +11174,7 @@ msgstr "" "in a mentine ataşat PCB-ul la materialul de unde \n" "este decupat." -#: flatcamGUI/PreferencesUI.py:5754 flatcamTools/ToolCutOut.py:250 +#: flatcamGUI/PreferencesUI.py:5754 flatcamTools/ToolCutOut.py:249 msgid "Gaps" msgstr "Punţi" @@ -11548,11 +11202,11 @@ msgstr "" "- 2tb = 2* sus - 2* jos\n" "- 8 = 2* stânga - 2* dreapta - 2* sus - 2* jos" -#: flatcamGUI/PreferencesUI.py:5778 flatcamTools/ToolCutOut.py:223 +#: flatcamGUI/PreferencesUI.py:5778 flatcamTools/ToolCutOut.py:222 msgid "Convex Shape" msgstr "Forma convexă" -#: flatcamGUI/PreferencesUI.py:5780 flatcamTools/ToolCutOut.py:226 +#: flatcamGUI/PreferencesUI.py:5780 flatcamTools/ToolCutOut.py:225 msgid "" "Create a convex shape surrounding the entire PCB.\n" "Used only if the source object type is Gerber." @@ -11577,17 +11231,17 @@ msgstr "" msgid "Drill dia" msgstr "Dia gaură" -#: flatcamGUI/PreferencesUI.py:5815 flatcamTools/ToolDblSided.py:364 -#: flatcamTools/ToolDblSided.py:369 +#: flatcamGUI/PreferencesUI.py:5815 flatcamTools/ToolDblSided.py:363 +#: flatcamTools/ToolDblSided.py:368 msgid "Diameter of the drill for the alignment holes." msgstr "Diametrul găurii pentru găurile de aliniere." -#: flatcamGUI/PreferencesUI.py:5822 flatcamTools/ToolDblSided.py:378 +#: flatcamGUI/PreferencesUI.py:5822 flatcamTools/ToolDblSided.py:377 msgid "Align Axis" msgstr "Aliniați Axa" #: flatcamGUI/PreferencesUI.py:5824 flatcamGUI/PreferencesUI.py:5837 -#: flatcamTools/ToolDblSided.py:166 flatcamTools/ToolDblSided.py:380 +#: flatcamTools/ToolDblSided.py:165 flatcamTools/ToolDblSided.py:379 msgid "Mirror vertically (X) or horizontally (Y)." msgstr "Oglindește vertical (X) sau orizontal (Y)." @@ -11595,11 +11249,11 @@ msgstr "Oglindește vertical (X) sau orizontal (Y)." msgid "Mirror Axis:" msgstr "Axe oglindire:" -#: flatcamGUI/PreferencesUI.py:5846 flatcamTools/ToolDblSided.py:182 +#: flatcamGUI/PreferencesUI.py:5846 flatcamTools/ToolDblSided.py:181 msgid "Point" msgstr "Punct" -#: flatcamGUI/PreferencesUI.py:5847 flatcamTools/ToolDblSided.py:183 +#: flatcamGUI/PreferencesUI.py:5847 flatcamTools/ToolDblSided.py:182 msgid "Box" msgstr "Forma" @@ -11786,12 +11440,12 @@ msgstr "" "în timp ce o valoare mai mică de 1 il va compacta." #: flatcamGUI/PreferencesUI.py:6264 flatcamGUI/PreferencesUI.py:6783 -#: flatcamTools/ToolFilm.py:162 flatcamTools/ToolTransform.py:149 +#: flatcamTools/ToolFilm.py:162 flatcamTools/ToolTransform.py:148 msgid "X factor" msgstr "Factor X" #: flatcamGUI/PreferencesUI.py:6273 flatcamGUI/PreferencesUI.py:6796 -#: flatcamTools/ToolFilm.py:171 flatcamTools/ToolTransform.py:169 +#: flatcamTools/ToolFilm.py:171 flatcamTools/ToolTransform.py:168 msgid "Y factor" msgstr "Factor Y" @@ -11808,12 +11462,12 @@ msgstr "" "în timp ce valorile negative vor înclina spre stânga." #: flatcamGUI/PreferencesUI.py:6295 flatcamGUI/PreferencesUI.py:6752 -#: flatcamTools/ToolFilm.py:201 flatcamTools/ToolTransform.py:98 +#: flatcamTools/ToolFilm.py:201 flatcamTools/ToolTransform.py:97 msgid "X angle" msgstr "Unghi X" #: flatcamGUI/PreferencesUI.py:6304 flatcamGUI/PreferencesUI.py:6766 -#: flatcamTools/ToolFilm.py:210 flatcamTools/ToolTransform.py:119 +#: flatcamTools/ToolFilm.py:210 flatcamTools/ToolTransform.py:118 msgid "Y angle" msgstr "Unghi Y" @@ -11910,11 +11564,11 @@ msgstr "" "unde fiecare element este o copie a obiectului sursa, separat la o\n" "distanţă X, Y unul de celalalt." -#: flatcamGUI/PreferencesUI.py:6480 flatcamTools/ToolPanelize.py:163 +#: flatcamGUI/PreferencesUI.py:6480 flatcamTools/ToolPanelize.py:161 msgid "Spacing cols" msgstr "Sep. coloane" -#: flatcamGUI/PreferencesUI.py:6482 flatcamTools/ToolPanelize.py:165 +#: flatcamGUI/PreferencesUI.py:6482 flatcamTools/ToolPanelize.py:163 msgid "" "Spacing between columns of the desired panel.\n" "In current units." @@ -11922,11 +11576,11 @@ msgstr "" "Spatiul de separare între coloane.\n" "In unitatile curente." -#: flatcamGUI/PreferencesUI.py:6494 flatcamTools/ToolPanelize.py:175 +#: flatcamGUI/PreferencesUI.py:6494 flatcamTools/ToolPanelize.py:173 msgid "Spacing rows" msgstr "Sep. linii" -#: flatcamGUI/PreferencesUI.py:6496 flatcamTools/ToolPanelize.py:177 +#: flatcamGUI/PreferencesUI.py:6496 flatcamTools/ToolPanelize.py:175 msgid "" "Spacing between rows of the desired panel.\n" "In current units." @@ -11934,27 +11588,27 @@ msgstr "" "Spatiul de separare între linii.\n" "In unitatile curente." -#: flatcamGUI/PreferencesUI.py:6507 flatcamTools/ToolPanelize.py:186 +#: flatcamGUI/PreferencesUI.py:6507 flatcamTools/ToolPanelize.py:184 msgid "Columns" msgstr "Coloane" -#: flatcamGUI/PreferencesUI.py:6509 flatcamTools/ToolPanelize.py:188 +#: flatcamGUI/PreferencesUI.py:6509 flatcamTools/ToolPanelize.py:186 msgid "Number of columns of the desired panel" msgstr "Numărul de coloane ale panel-ului dorit" -#: flatcamGUI/PreferencesUI.py:6519 flatcamTools/ToolPanelize.py:196 +#: flatcamGUI/PreferencesUI.py:6519 flatcamTools/ToolPanelize.py:194 msgid "Rows" msgstr "Linii" -#: flatcamGUI/PreferencesUI.py:6521 flatcamTools/ToolPanelize.py:198 +#: flatcamGUI/PreferencesUI.py:6521 flatcamTools/ToolPanelize.py:196 msgid "Number of rows of the desired panel" msgstr "Numărul de linii ale panel-ului dorit" -#: flatcamGUI/PreferencesUI.py:6528 flatcamTools/ToolPanelize.py:205 +#: flatcamGUI/PreferencesUI.py:6528 flatcamTools/ToolPanelize.py:203 msgid "Geo" msgstr "Geo" -#: flatcamGUI/PreferencesUI.py:6529 flatcamTools/ToolPanelize.py:206 +#: flatcamGUI/PreferencesUI.py:6529 flatcamTools/ToolPanelize.py:204 msgid "Panel Type" msgstr "Tip panel" @@ -11972,7 +11626,7 @@ msgstr "" msgid "Constrain within" msgstr "Constrange" -#: flatcamGUI/PreferencesUI.py:6542 flatcamTools/ToolPanelize.py:218 +#: flatcamGUI/PreferencesUI.py:6542 flatcamTools/ToolPanelize.py:216 msgid "" "Area define by DX and DY within to constrain the panel.\n" "DX and DY values are in current units.\n" @@ -11986,11 +11640,11 @@ msgstr "" "panelul final va contine numai acel număr de linii/coloane care se inscrie\n" "complet in aria desemnata." -#: flatcamGUI/PreferencesUI.py:6555 flatcamTools/ToolPanelize.py:230 +#: flatcamGUI/PreferencesUI.py:6555 flatcamTools/ToolPanelize.py:228 msgid "Width (DX)" msgstr "Lătime (Dx)" -#: flatcamGUI/PreferencesUI.py:6557 flatcamTools/ToolPanelize.py:232 +#: flatcamGUI/PreferencesUI.py:6557 flatcamTools/ToolPanelize.py:230 msgid "" "The width (DX) within which the panel must fit.\n" "In current units." @@ -11998,11 +11652,11 @@ msgstr "" "Lăţimea (Dx) in care panelul trebuie să se inscrie.\n" "In unitati curente." -#: flatcamGUI/PreferencesUI.py:6568 flatcamTools/ToolPanelize.py:241 +#: flatcamGUI/PreferencesUI.py:6568 flatcamTools/ToolPanelize.py:239 msgid "Height (DY)" msgstr "Inăltime (Dy)" -#: flatcamGUI/PreferencesUI.py:6570 flatcamTools/ToolPanelize.py:243 +#: flatcamGUI/PreferencesUI.py:6570 flatcamTools/ToolPanelize.py:241 msgid "" "The height (DY)within which the panel must fit.\n" "In current units." @@ -12136,15 +11790,15 @@ msgstr "" msgid "Skew" msgstr "Deformare" -#: flatcamGUI/PreferencesUI.py:6785 flatcamTools/ToolTransform.py:151 +#: flatcamGUI/PreferencesUI.py:6785 flatcamTools/ToolTransform.py:150 msgid "Factor for scaling on X axis." msgstr "Factor de scalare pe axa X." -#: flatcamGUI/PreferencesUI.py:6798 flatcamTools/ToolTransform.py:171 +#: flatcamGUI/PreferencesUI.py:6798 flatcamTools/ToolTransform.py:170 msgid "Factor for scaling on Y axis." msgstr "Factor de scalare pe axa Y." -#: flatcamGUI/PreferencesUI.py:6806 flatcamTools/ToolTransform.py:192 +#: flatcamGUI/PreferencesUI.py:6806 flatcamTools/ToolTransform.py:191 msgid "" "Scale the selected object(s)\n" "using the Scale_X factor for both axis." @@ -12152,7 +11806,7 @@ msgstr "" "Scalează obiectele selectate folosind\n" "Factor Scal_X pentru ambele axe." -#: flatcamGUI/PreferencesUI.py:6814 flatcamTools/ToolTransform.py:199 +#: flatcamGUI/PreferencesUI.py:6814 flatcamTools/ToolTransform.py:198 msgid "" "Scale the selected object(s)\n" "using the origin reference when checked,\n" @@ -12165,32 +11819,32 @@ msgstr "" "centrul formei inconjuatoare care cuprinde\n" "toate obiectele selectate." -#: flatcamGUI/PreferencesUI.py:6830 flatcamTools/ToolTransform.py:218 +#: flatcamGUI/PreferencesUI.py:6830 flatcamTools/ToolTransform.py:217 msgid "X val" msgstr "Val X" -#: flatcamGUI/PreferencesUI.py:6832 flatcamTools/ToolTransform.py:220 +#: flatcamGUI/PreferencesUI.py:6832 flatcamTools/ToolTransform.py:219 msgid "Distance to offset on X axis. In current units." msgstr "Distanta la care se face ofset pe axa X. In unitatile curente." -#: flatcamGUI/PreferencesUI.py:6843 flatcamTools/ToolTransform.py:238 +#: flatcamGUI/PreferencesUI.py:6843 flatcamTools/ToolTransform.py:237 msgid "Y val" msgstr "Val Y" -#: flatcamGUI/PreferencesUI.py:6845 flatcamTools/ToolTransform.py:240 +#: flatcamGUI/PreferencesUI.py:6845 flatcamTools/ToolTransform.py:239 msgid "Distance to offset on Y axis. In current units." msgstr "Distanta la care se face ofset pe axa Y. In unitatile curente." -#: flatcamGUI/PreferencesUI.py:6851 flatcamTools/ToolDblSided.py:68 -#: flatcamTools/ToolDblSided.py:96 flatcamTools/ToolDblSided.py:126 +#: flatcamGUI/PreferencesUI.py:6851 flatcamTools/ToolDblSided.py:67 +#: flatcamTools/ToolDblSided.py:95 flatcamTools/ToolDblSided.py:125 msgid "Mirror" msgstr "Oglindește" -#: flatcamGUI/PreferencesUI.py:6855 flatcamTools/ToolTransform.py:284 +#: flatcamGUI/PreferencesUI.py:6855 flatcamTools/ToolTransform.py:283 msgid "Mirror Reference" msgstr "Referinţă Oglindire" -#: flatcamGUI/PreferencesUI.py:6857 flatcamTools/ToolTransform.py:286 +#: flatcamGUI/PreferencesUI.py:6857 flatcamTools/ToolTransform.py:285 msgid "" "Flip the selected object(s)\n" "around the point in Point Entry Field.\n" @@ -12229,11 +11883,11 @@ msgstr "" "Y din (x,y) se va folosi când se face oglindirea pe axa Y si" #: flatcamGUI/PreferencesUI.py:6883 flatcamTools/ToolDistance.py:496 -#: flatcamTools/ToolDistanceMin.py:287 flatcamTools/ToolTransform.py:333 +#: flatcamTools/ToolDistanceMin.py:287 flatcamTools/ToolTransform.py:332 msgid "Distance" msgstr "Distanță" -#: flatcamGUI/PreferencesUI.py:6885 flatcamTools/ToolTransform.py:335 +#: flatcamGUI/PreferencesUI.py:6885 flatcamTools/ToolTransform.py:334 msgid "" "A positive value will create the effect of dilation,\n" "while a negative value will create the effect of erosion.\n" @@ -12245,7 +11899,7 @@ msgstr "" "Fiecare element de geometrie al obiectului va fi mărit\n" "sau scăzut proportional cu „distanța”." -#: flatcamGUI/PreferencesUI.py:6902 flatcamTools/ToolTransform.py:360 +#: flatcamGUI/PreferencesUI.py:6902 flatcamTools/ToolTransform.py:359 msgid "" "A positive value will create the effect of dilation,\n" "while a negative value will create the effect of erosion.\n" @@ -12260,11 +11914,11 @@ msgstr "" "un procent din dimensiunea initială." #: flatcamGUI/PreferencesUI.py:6919 flatcamGUI/PreferencesUI.py:7563 -#: flatcamTools/ToolQRCode.py:197 flatcamTools/ToolTransform.py:384 +#: flatcamTools/ToolQRCode.py:197 flatcamTools/ToolTransform.py:383 msgid "Rounded" msgstr "Rotunjit" -#: flatcamGUI/PreferencesUI.py:6921 flatcamTools/ToolTransform.py:386 +#: flatcamGUI/PreferencesUI.py:6921 flatcamTools/ToolTransform.py:385 msgid "" "If checked then the buffer will surround the buffered shape,\n" "every corner will be rounded.\n" @@ -12292,41 +11946,41 @@ msgstr "" msgid "New Nozzle Dia" msgstr "Dia nou" -#: flatcamGUI/PreferencesUI.py:6967 flatcamTools/ToolSolderPaste.py:108 +#: flatcamGUI/PreferencesUI.py:6967 flatcamTools/ToolSolderPaste.py:107 msgid "Diameter for the new Nozzle tool to add in the Tool Table" msgstr "" "Valoarea pentru diametrul unei noi unelte (nozzle) pentru adaugare in Tabela " "de Unelte" -#: flatcamGUI/PreferencesUI.py:6983 flatcamTools/ToolSolderPaste.py:184 +#: flatcamGUI/PreferencesUI.py:6983 flatcamTools/ToolSolderPaste.py:183 msgid "Z Dispense Start" msgstr "Z start dispensare" -#: flatcamGUI/PreferencesUI.py:6985 flatcamTools/ToolSolderPaste.py:186 +#: flatcamGUI/PreferencesUI.py:6985 flatcamTools/ToolSolderPaste.py:185 msgid "The height (Z) when solder paste dispensing starts." msgstr "Înălţimea (Z) când incepe dispensarea de pastă de fludor." -#: flatcamGUI/PreferencesUI.py:6996 flatcamTools/ToolSolderPaste.py:196 +#: flatcamGUI/PreferencesUI.py:6996 flatcamTools/ToolSolderPaste.py:195 msgid "Z Dispense" msgstr "Z dispensare" -#: flatcamGUI/PreferencesUI.py:6998 flatcamTools/ToolSolderPaste.py:198 +#: flatcamGUI/PreferencesUI.py:6998 flatcamTools/ToolSolderPaste.py:197 msgid "The height (Z) when doing solder paste dispensing." msgstr "Înălţimea (Z) in timp ce se face dispensarea de pastă de fludor." -#: flatcamGUI/PreferencesUI.py:7009 flatcamTools/ToolSolderPaste.py:208 +#: flatcamGUI/PreferencesUI.py:7009 flatcamTools/ToolSolderPaste.py:207 msgid "Z Dispense Stop" msgstr "Z stop dispensare" -#: flatcamGUI/PreferencesUI.py:7011 flatcamTools/ToolSolderPaste.py:210 +#: flatcamGUI/PreferencesUI.py:7011 flatcamTools/ToolSolderPaste.py:209 msgid "The height (Z) when solder paste dispensing stops." msgstr "Înălţimea (Z) când se opreste dispensarea de pastă de fludor." -#: flatcamGUI/PreferencesUI.py:7022 flatcamTools/ToolSolderPaste.py:220 +#: flatcamGUI/PreferencesUI.py:7022 flatcamTools/ToolSolderPaste.py:219 msgid "Z Travel" msgstr "Z deplasare" -#: flatcamGUI/PreferencesUI.py:7024 flatcamTools/ToolSolderPaste.py:222 +#: flatcamGUI/PreferencesUI.py:7024 flatcamTools/ToolSolderPaste.py:221 msgid "" "The height (Z) for travel between pads\n" "(without dispensing solder paste)." @@ -12334,15 +11988,15 @@ msgstr "" "Înălţimea (Z) când se face deplasare între pad-uri.\n" "(fără dispensare de pastă de fludor)." -#: flatcamGUI/PreferencesUI.py:7036 flatcamTools/ToolSolderPaste.py:233 +#: flatcamGUI/PreferencesUI.py:7036 flatcamTools/ToolSolderPaste.py:232 msgid "Z Toolchange" msgstr "Z schimb. unealtă" -#: flatcamGUI/PreferencesUI.py:7038 flatcamTools/ToolSolderPaste.py:235 +#: flatcamGUI/PreferencesUI.py:7038 flatcamTools/ToolSolderPaste.py:234 msgid "The height (Z) for tool (nozzle) change." msgstr "Înălţimea (Z) când se schimbă unealta (nozzle-ul)." -#: flatcamGUI/PreferencesUI.py:7047 flatcamTools/ToolSolderPaste.py:243 +#: flatcamGUI/PreferencesUI.py:7047 flatcamTools/ToolSolderPaste.py:242 msgid "" "The X,Y location for tool (nozzle) change.\n" "The format is (x, y) where x and y are real numbers." @@ -12350,18 +12004,18 @@ msgstr "" "Coordonatele X, Y pentru schimbarea uneltei (nozzle).\n" "Formatul este (x,y) unde x și y sunt numere Reale." -#: flatcamGUI/PreferencesUI.py:7061 flatcamTools/ToolSolderPaste.py:256 +#: flatcamGUI/PreferencesUI.py:7061 flatcamTools/ToolSolderPaste.py:255 msgid "Feedrate (speed) while moving on the X-Y plane." msgstr "Viteza de deplasare a uneltei când se deplasează in planul X-Y." -#: flatcamGUI/PreferencesUI.py:7074 flatcamTools/ToolSolderPaste.py:268 +#: flatcamGUI/PreferencesUI.py:7074 flatcamTools/ToolSolderPaste.py:267 msgid "" "Feedrate (speed) while moving vertically\n" "(on Z plane)." msgstr "" "Viteza de deplasare a uneltei când se misca in plan vertical (planul Z)." -#: flatcamGUI/PreferencesUI.py:7086 flatcamTools/ToolSolderPaste.py:279 +#: flatcamGUI/PreferencesUI.py:7086 flatcamTools/ToolSolderPaste.py:278 msgid "Feedrate Z Dispense" msgstr "Feedrate Z dispensare" @@ -12373,11 +12027,11 @@ msgstr "" "Viteza de deplasare la mișcarea pe verticala spre\n" "poziţia de dispensare (in planul Z)." -#: flatcamGUI/PreferencesUI.py:7099 flatcamTools/ToolSolderPaste.py:291 +#: flatcamGUI/PreferencesUI.py:7099 flatcamTools/ToolSolderPaste.py:290 msgid "Spindle Speed FWD" msgstr "Viteza motor inainte" -#: flatcamGUI/PreferencesUI.py:7101 flatcamTools/ToolSolderPaste.py:293 +#: flatcamGUI/PreferencesUI.py:7101 flatcamTools/ToolSolderPaste.py:292 msgid "" "The dispenser speed while pushing solder paste\n" "through the dispenser nozzle." @@ -12385,19 +12039,19 @@ msgstr "" "Viteza motorului de dispensare in timp ce impinge pastă de fludor\n" "prin orificiul uneltei de dispensare." -#: flatcamGUI/PreferencesUI.py:7113 flatcamTools/ToolSolderPaste.py:304 +#: flatcamGUI/PreferencesUI.py:7113 flatcamTools/ToolSolderPaste.py:303 msgid "Dwell FWD" msgstr "Pauza FWD" -#: flatcamGUI/PreferencesUI.py:7115 flatcamTools/ToolSolderPaste.py:306 +#: flatcamGUI/PreferencesUI.py:7115 flatcamTools/ToolSolderPaste.py:305 msgid "Pause after solder dispensing." msgstr "Pauza dupa dispensarea de pastă de fludor." -#: flatcamGUI/PreferencesUI.py:7125 flatcamTools/ToolSolderPaste.py:315 +#: flatcamGUI/PreferencesUI.py:7125 flatcamTools/ToolSolderPaste.py:314 msgid "Spindle Speed REV" msgstr "Viteza motor inapoi" -#: flatcamGUI/PreferencesUI.py:7127 flatcamTools/ToolSolderPaste.py:317 +#: flatcamGUI/PreferencesUI.py:7127 flatcamTools/ToolSolderPaste.py:316 msgid "" "The dispenser speed while retracting solder paste\n" "through the dispenser nozzle." @@ -12405,11 +12059,11 @@ msgstr "" "Viteza motorului de dispensare in timp ce retrage pasta de fludor\n" "prin orificiul uneltei de dispensare." -#: flatcamGUI/PreferencesUI.py:7139 flatcamTools/ToolSolderPaste.py:328 +#: flatcamGUI/PreferencesUI.py:7139 flatcamTools/ToolSolderPaste.py:327 msgid "Dwell REV" msgstr "Pauza REV" -#: flatcamGUI/PreferencesUI.py:7141 flatcamTools/ToolSolderPaste.py:330 +#: flatcamGUI/PreferencesUI.py:7141 flatcamTools/ToolSolderPaste.py:329 msgid "" "Pause after solder paste dispenser retracted,\n" "to allow pressure equilibrium." @@ -12417,7 +12071,7 @@ msgstr "" "Pauza dupa ce pasta de fludor a fost retrasă,\n" "necesară pt a ajunge la un echilibru al presiunilor." -#: flatcamGUI/PreferencesUI.py:7150 flatcamTools/ToolSolderPaste.py:338 +#: flatcamGUI/PreferencesUI.py:7150 flatcamTools/ToolSolderPaste.py:337 msgid "Files that control the GCode generation." msgstr "Fişiere care controlează generarea codului G-Code." @@ -12634,7 +12288,7 @@ msgstr "" "Un instrument pentru a găsi distanța minimă între\n" "la fiecare două elemente geometrice Gerber" -#: flatcamGUI/PreferencesUI.py:7432 flatcamTools/ToolOptimal.py:79 +#: flatcamGUI/PreferencesUI.py:7432 flatcamTools/ToolOptimal.py:78 msgid "Precision" msgstr "Precizie" @@ -12801,7 +12455,7 @@ msgid "Number of steps (lines) used to interpolate circles." msgstr "Numărul de pași (linii) utilizate pentru interpolarea cercurilor." #: flatcamGUI/PreferencesUI.py:7666 flatcamGUI/PreferencesUI.py:7870 -#: flatcamTools/ToolCopperThieving.py:97 flatcamTools/ToolCopperThieving.py:432 +#: flatcamTools/ToolCopperThieving.py:96 flatcamTools/ToolCopperThieving.py:431 msgid "Clearance" msgstr "Degajare" @@ -12815,7 +12469,7 @@ msgstr "" "(umplutura poligonului poate fi împărțită în mai multe poligoane)\n" "si traseele de cupru din fisierul Gerber." -#: flatcamGUI/PreferencesUI.py:7699 flatcamTools/ToolCopperThieving.py:130 +#: flatcamGUI/PreferencesUI.py:7699 flatcamTools/ToolCopperThieving.py:129 msgid "Reference:" msgstr "Referinţă:" @@ -12836,22 +12490,22 @@ msgstr "" #: flatcamGUI/PreferencesUI.py:7710 flatcamGUI/PreferencesUI.py:8175 #: flatcamGUI/PreferencesUI.py:8287 flatcamGUI/PreferencesUI.py:8387 -#: flatcamGUI/PreferencesUI.py:8501 flatcamTools/ToolCopperThieving.py:172 +#: flatcamGUI/PreferencesUI.py:8501 flatcamTools/ToolCopperThieving.py:171 #: flatcamTools/ToolExtractDrills.py:102 flatcamTools/ToolExtractDrills.py:240 #: flatcamTools/ToolPunchGerber.py:113 flatcamTools/ToolPunchGerber.py:268 msgid "Rectangular" msgstr "Patrulater" -#: flatcamGUI/PreferencesUI.py:7711 flatcamTools/ToolCopperThieving.py:173 +#: flatcamGUI/PreferencesUI.py:7711 flatcamTools/ToolCopperThieving.py:172 msgid "Minimal" msgstr "Minimal" -#: flatcamGUI/PreferencesUI.py:7713 flatcamTools/ToolCopperThieving.py:175 +#: flatcamGUI/PreferencesUI.py:7713 flatcamTools/ToolCopperThieving.py:174 #: flatcamTools/ToolFilm.py:113 msgid "Box Type:" msgstr "Tip container:" -#: flatcamGUI/PreferencesUI.py:7715 flatcamTools/ToolCopperThieving.py:177 +#: flatcamGUI/PreferencesUI.py:7715 flatcamTools/ToolCopperThieving.py:176 msgid "" "- 'Rectangular' - the bounding box will be of rectangular shape.\n" "- 'Minimal' - the bounding box will be the convex hull shape." @@ -12859,23 +12513,23 @@ msgstr "" "- „Dreptunghiular” - caseta de delimitare va avea o formă dreptunghiulară.\n" "- „Minimal” - caseta de delimitare va fi forma arie convexă." -#: flatcamGUI/PreferencesUI.py:7729 flatcamTools/ToolCopperThieving.py:193 +#: flatcamGUI/PreferencesUI.py:7729 flatcamTools/ToolCopperThieving.py:192 msgid "Dots Grid" msgstr "Grilă de puncte" -#: flatcamGUI/PreferencesUI.py:7730 flatcamTools/ToolCopperThieving.py:194 +#: flatcamGUI/PreferencesUI.py:7730 flatcamTools/ToolCopperThieving.py:193 msgid "Squares Grid" msgstr "Grilă de pătrate" -#: flatcamGUI/PreferencesUI.py:7731 flatcamTools/ToolCopperThieving.py:195 +#: flatcamGUI/PreferencesUI.py:7731 flatcamTools/ToolCopperThieving.py:194 msgid "Lines Grid" msgstr "Grilă de linii" -#: flatcamGUI/PreferencesUI.py:7733 flatcamTools/ToolCopperThieving.py:197 +#: flatcamGUI/PreferencesUI.py:7733 flatcamTools/ToolCopperThieving.py:196 msgid "Fill Type:" msgstr "Tip de umplere:" -#: flatcamGUI/PreferencesUI.py:7735 flatcamTools/ToolCopperThieving.py:199 +#: flatcamGUI/PreferencesUI.py:7735 flatcamTools/ToolCopperThieving.py:198 msgid "" "- 'Solid' - copper thieving will be a solid polygon.\n" "- 'Dots Grid' - the empty area will be filled with a pattern of dots.\n" @@ -12887,54 +12541,54 @@ msgstr "" "- „Grilă de pătrate” - zona goală va fi umplută cu un model de pătrate.\n" "- „Grilă de linii” - zona goală va fi umplută cu un model de linii." -#: flatcamGUI/PreferencesUI.py:7743 flatcamTools/ToolCopperThieving.py:218 +#: flatcamGUI/PreferencesUI.py:7743 flatcamTools/ToolCopperThieving.py:217 msgid "Dots Grid Parameters" msgstr "Parametri grilă puncte" -#: flatcamGUI/PreferencesUI.py:7749 flatcamTools/ToolCopperThieving.py:224 +#: flatcamGUI/PreferencesUI.py:7749 flatcamTools/ToolCopperThieving.py:223 msgid "Dot diameter in Dots Grid." msgstr "Diametrul punctului în Grila de Puncte." #: flatcamGUI/PreferencesUI.py:7760 flatcamGUI/PreferencesUI.py:7789 -#: flatcamGUI/PreferencesUI.py:7818 flatcamTools/ToolCopperThieving.py:235 -#: flatcamTools/ToolCopperThieving.py:275 -#: flatcamTools/ToolCopperThieving.py:315 +#: flatcamGUI/PreferencesUI.py:7818 flatcamTools/ToolCopperThieving.py:234 +#: flatcamTools/ToolCopperThieving.py:274 +#: flatcamTools/ToolCopperThieving.py:314 msgid "Spacing" msgstr "Spaţiere" -#: flatcamGUI/PreferencesUI.py:7762 flatcamTools/ToolCopperThieving.py:237 +#: flatcamGUI/PreferencesUI.py:7762 flatcamTools/ToolCopperThieving.py:236 msgid "Distance between each two dots in Dots Grid." msgstr "Distanța dintre fiecare două puncte din Grila de Puncte." -#: flatcamGUI/PreferencesUI.py:7772 flatcamTools/ToolCopperThieving.py:258 +#: flatcamGUI/PreferencesUI.py:7772 flatcamTools/ToolCopperThieving.py:257 msgid "Squares Grid Parameters" msgstr "Parametri grilă de patrate" -#: flatcamGUI/PreferencesUI.py:7778 flatcamTools/ToolCopperThieving.py:264 +#: flatcamGUI/PreferencesUI.py:7778 flatcamTools/ToolCopperThieving.py:263 msgid "Square side size in Squares Grid." msgstr "Dimensiunea pătratului în Grila de Pătrate." -#: flatcamGUI/PreferencesUI.py:7791 flatcamTools/ToolCopperThieving.py:277 +#: flatcamGUI/PreferencesUI.py:7791 flatcamTools/ToolCopperThieving.py:276 msgid "Distance between each two squares in Squares Grid." msgstr "Distanța dintre fiecare două pătrate din Grila Pătrate." -#: flatcamGUI/PreferencesUI.py:7801 flatcamTools/ToolCopperThieving.py:298 +#: flatcamGUI/PreferencesUI.py:7801 flatcamTools/ToolCopperThieving.py:297 msgid "Lines Grid Parameters" msgstr "Parametri grilă de linii" -#: flatcamGUI/PreferencesUI.py:7807 flatcamTools/ToolCopperThieving.py:304 +#: flatcamGUI/PreferencesUI.py:7807 flatcamTools/ToolCopperThieving.py:303 msgid "Line thickness size in Lines Grid." msgstr "Mărimea grosimii liniei în Grila de linii." -#: flatcamGUI/PreferencesUI.py:7820 flatcamTools/ToolCopperThieving.py:317 +#: flatcamGUI/PreferencesUI.py:7820 flatcamTools/ToolCopperThieving.py:316 msgid "Distance between each two lines in Lines Grid." msgstr "Distanța dintre fiecare două linii în Grial de linii." -#: flatcamGUI/PreferencesUI.py:7830 flatcamTools/ToolCopperThieving.py:355 +#: flatcamGUI/PreferencesUI.py:7830 flatcamTools/ToolCopperThieving.py:354 msgid "Robber Bar Parameters" msgstr "Parametri pentru Robber Bar" -#: flatcamGUI/PreferencesUI.py:7832 flatcamTools/ToolCopperThieving.py:357 +#: flatcamGUI/PreferencesUI.py:7832 flatcamTools/ToolCopperThieving.py:356 msgid "" "Parameters used for the robber bar.\n" "Robber bar = copper border to help in pattern hole plating." @@ -12942,29 +12596,29 @@ msgstr "" "Parametrii folosiți pentru Robber Bar.\n" "Robber Bar = bordura de cupru pentru a ajuta la placarea de găuri, cu model." -#: flatcamGUI/PreferencesUI.py:7840 flatcamTools/ToolCopperThieving.py:365 +#: flatcamGUI/PreferencesUI.py:7840 flatcamTools/ToolCopperThieving.py:364 msgid "Bounding box margin for robber bar." msgstr "" "Marginea pentru forma înconjurătoare\n" "a Robber Bar." -#: flatcamGUI/PreferencesUI.py:7851 flatcamTools/ToolCopperThieving.py:376 +#: flatcamGUI/PreferencesUI.py:7851 flatcamTools/ToolCopperThieving.py:375 msgid "Thickness" msgstr "Grosime" -#: flatcamGUI/PreferencesUI.py:7853 flatcamTools/ToolCopperThieving.py:378 +#: flatcamGUI/PreferencesUI.py:7853 flatcamTools/ToolCopperThieving.py:377 msgid "The robber bar thickness." msgstr "Grosimea Robber Bar." -#: flatcamGUI/PreferencesUI.py:7863 flatcamTools/ToolCopperThieving.py:409 +#: flatcamGUI/PreferencesUI.py:7863 flatcamTools/ToolCopperThieving.py:408 msgid "Pattern Plating Mask" msgstr "Masca de placare cu model" -#: flatcamGUI/PreferencesUI.py:7865 flatcamTools/ToolCopperThieving.py:411 +#: flatcamGUI/PreferencesUI.py:7865 flatcamTools/ToolCopperThieving.py:410 msgid "Generate a mask for pattern plating." msgstr "Generați o mască pentru placarea cu model." -#: flatcamGUI/PreferencesUI.py:7872 flatcamTools/ToolCopperThieving.py:434 +#: flatcamGUI/PreferencesUI.py:7872 flatcamTools/ToolCopperThieving.py:433 msgid "" "The distance between the possible copper thieving elements\n" "and/or robber bar and the actual openings in the mask." @@ -12978,7 +12632,7 @@ msgstr "Opțiuni Unealta Fiducials" #: flatcamGUI/PreferencesUI.py:7902 flatcamGUI/PreferencesUI.py:8018 #: flatcamGUI/PreferencesUI.py:8137 flatcamGUI/PreferencesUI.py:8349 -#: flatcamTools/ToolCopperThieving.py:92 flatcamTools/ToolFiducials.py:151 +#: flatcamTools/ToolCopperThieving.py:91 flatcamTools/ToolFiducials.py:151 msgid "Parameters used for this tool." msgstr "Parametrii folosiți pentru aceasta unealta." @@ -13310,7 +12964,7 @@ msgid "" "fixed diameter holes.\n" "- Fixed Annular Ring -> will try to keep a set annular ring.\n" "- Proportional -> will make a Gerber punch hole having the diameter a " -"percentage of the pad diameter.\n" +"percentage of the pad diameter." msgstr "" "Sursa de punctare pt găuri poate fi:\n" "- Obiect Excellon -> centrul găurilor din obiectul Excellon va servi ca " @@ -13320,7 +12974,7 @@ msgstr "" "- Inel anular Fix -> va incerca să mentină un inele anular cu dimensiune " "prestabilită.\n" "- Proportional -> găurile de punctare vor avea diametrul un procent " -"prestabilit din diametrul padului.\n" +"prestabilit din diametrul padului." #: flatcamGUI/PreferencesUI.py:8552 msgid "Invert Gerber Tool Options" @@ -13504,11 +13158,387 @@ msgstr "Ștergeți cuvântul cheie" msgid "Delete a keyword from the list" msgstr "Ștergeți un cuvânt cheie din listă" -#: flatcamParsers/ParseExcellon.py:315 +#: flatcamObjects/FlatCAMCNCJob.py:429 flatcamObjects/FlatCAMDocument.py:71 +#: flatcamObjects/FlatCAMScript.py:83 +msgid "Basic" +msgstr "Baza" + +#: flatcamObjects/FlatCAMCNCJob.py:435 flatcamObjects/FlatCAMDocument.py:75 +#: flatcamObjects/FlatCAMScript.py:87 +msgid "Advanced" +msgstr "Avansat" + +#: flatcamObjects/FlatCAMCNCJob.py:478 +msgid "Plotting..." +msgstr "Se afișează..." + +#: flatcamObjects/FlatCAMCNCJob.py:507 flatcamObjects/FlatCAMCNCJob.py:512 +#: flatcamTools/ToolSolderPaste.py:1499 +msgid "Export Machine Code ..." +msgstr "Exportă CNC Cod Masina ..." + +#: flatcamObjects/FlatCAMCNCJob.py:517 flatcamTools/ToolSolderPaste.py:1503 +msgid "Export Machine Code cancelled ..." +msgstr "Exportul Codului Mașina a fost anulat ..." + +#: flatcamObjects/FlatCAMCNCJob.py:538 +msgid "Machine Code file saved to" +msgstr "Fişierul cu cod CNC este salvat in" + +#: flatcamObjects/FlatCAMCNCJob.py:599 flatcamTools/ToolCalibration.py:1097 +msgid "Loaded Machine Code into Code Editor" +msgstr "S-a încărcat Codul Maşină în Editorul Cod" + +#: flatcamObjects/FlatCAMCNCJob.py:739 +msgid "This CNCJob object can't be processed because it is a" +msgstr "Acest obiect CNCJob nu poate fi procesat deoarece este un" + +#: flatcamObjects/FlatCAMCNCJob.py:741 +msgid "CNCJob object" +msgstr "Obiect CNCJob" + +#: flatcamObjects/FlatCAMCNCJob.py:921 +msgid "" +"G-code does not have a G94 code and we will not include the code in the " +"'Prepend to GCode' text box" +msgstr "" +"Codul G nu are un cod G94 și nu vom include codul din caseta de text „Adaugă " +"la GCode”" + +#: flatcamObjects/FlatCAMCNCJob.py:932 +msgid "Cancelled. The Toolchange Custom code is enabled but it's empty." +msgstr "" +"Anulat. Codul G-Code din Macro-ul Schimbare unealtă este activat dar nu " +"contine nimic." + +#: flatcamObjects/FlatCAMCNCJob.py:937 +msgid "Toolchange G-code was replaced by a custom code." +msgstr "G-Code-ul pt schimbare unealtă a fost inlocuit cu un cod pesonalizat." + +#: flatcamObjects/FlatCAMCNCJob.py:985 flatcamObjects/FlatCAMCNCJob.py:995 +msgid "" +"The used preprocessor file has to have in it's name: 'toolchange_custom'" +msgstr "" +"Postprocesorul folosit trebuie să aibă in numele sau: 'toolchange_custom'" + +#: flatcamObjects/FlatCAMCNCJob.py:998 +msgid "There is no preprocessor file." +msgstr "Nu exista nici-un fişier postprocesor." + +#: flatcamObjects/FlatCAMDocument.py:175 +msgid "Document Editor" +msgstr "Editor Documente" + +#: flatcamObjects/FlatCAMExcellon.py:514 flatcamObjects/FlatCAMExcellon.py:746 +#: flatcamObjects/FlatCAMGeometry.py:306 flatcamObjects/FlatCAMGeometry.py:767 +#: flatcamTools/ToolNCC.py:811 flatcamTools/ToolNCC.py:1191 +#: flatcamTools/ToolPaint.py:779 flatcamTools/ToolPaint.py:1166 +msgid "Multiple Tools" +msgstr "Unelte multiple" + +#: flatcamObjects/FlatCAMExcellon.py:726 +msgid "No Tool Selected" +msgstr "Nici-o Unealtă selectată" + +#: flatcamObjects/FlatCAMExcellon.py:1076 +#: flatcamObjects/FlatCAMExcellon.py:1168 +#: flatcamObjects/FlatCAMExcellon.py:1355 +msgid "Please select one or more tools from the list and try again." +msgstr "Selectează una sau mai multe unelte din lista și încearcă din nou." + +#: flatcamObjects/FlatCAMExcellon.py:1083 +msgid "Milling tool for DRILLS is larger than hole size. Cancelled." +msgstr "" +"Anulat. Freza pt frezarea găurilor este mai mare decat diametrul găurii." + +#: flatcamObjects/FlatCAMExcellon.py:1098 +#: flatcamObjects/FlatCAMExcellon.py:1188 +#: flatcamObjects/FlatCAMExcellon.py:1373 +#: tclCommands/TclCommandDrillcncjob.py:193 +msgid "Tool_nr" +msgstr "Nr. Unealtă" + +#: flatcamObjects/FlatCAMExcellon.py:1098 +#: flatcamObjects/FlatCAMExcellon.py:1188 +#: flatcamObjects/FlatCAMExcellon.py:1373 +#: tclCommands/TclCommandDrillcncjob.py:193 +msgid "Drills_Nr" +msgstr "Nr. gaura" + +#: flatcamObjects/FlatCAMExcellon.py:1098 +#: flatcamObjects/FlatCAMExcellon.py:1188 +#: flatcamObjects/FlatCAMExcellon.py:1373 +#: tclCommands/TclCommandDrillcncjob.py:193 +msgid "Slots_Nr" +msgstr "Nr. slot" + +#: flatcamObjects/FlatCAMExcellon.py:1177 +msgid "Milling tool for SLOTS is larger than hole size. Cancelled." +msgstr "Anulat. Freza este mai mare decat diametrul slotului de frezat." + +#: flatcamObjects/FlatCAMExcellon.py:1281 +#: flatcamObjects/FlatCAMGeometry.py:1517 +msgid "Focus Z" +msgstr "Focalizare Z" + +#: flatcamObjects/FlatCAMExcellon.py:1300 +#: flatcamObjects/FlatCAMGeometry.py:1536 +msgid "Laser Power" +msgstr "Putere Laser" + +#: flatcamObjects/FlatCAMExcellon.py:1430 +#: flatcamObjects/FlatCAMGeometry.py:1973 +#: flatcamObjects/FlatCAMGeometry.py:1977 +#: flatcamObjects/FlatCAMGeometry.py:2122 +msgid "Generating CNC Code" +msgstr "CNC Code in curs de generare" + +#: flatcamObjects/FlatCAMExcellon.py:1620 flatcamTools/ToolNCC.py:918 +#: flatcamTools/ToolPaint.py:844 +msgid "Current Tool parameters were applied to all tools." +msgstr "Parametrii Uneltei curente sunt aplicați la toate Uneltele." + +#: flatcamObjects/FlatCAMGeometry.py:119 flatcamObjects/FlatCAMGeometry.py:1181 +#: flatcamObjects/FlatCAMGeometry.py:1182 +#: flatcamObjects/FlatCAMGeometry.py:1191 +msgid "Iso" +msgstr "Izo" + +#: flatcamObjects/FlatCAMGeometry.py:119 flatcamObjects/FlatCAMGeometry.py:439 +#: flatcamObjects/FlatCAMGeometry.py:826 flatcamObjects/FlatCAMGerber.py:890 +#: flatcamObjects/FlatCAMGerber.py:1038 +msgid "Rough" +msgstr "Grosier" + +#: flatcamObjects/FlatCAMGeometry.py:119 +msgid "Finish" +msgstr "Finisare" + +#: flatcamObjects/FlatCAMGeometry.py:474 +msgid "Add from Tool DB" +msgstr "Adaugă Unealta din DB Unelte" + +#: flatcamObjects/FlatCAMGeometry.py:845 +msgid "Tool added in Tool Table." +msgstr "Unealtă adăugată in Tabela de Unelte." + +#: flatcamObjects/FlatCAMGeometry.py:954 flatcamObjects/FlatCAMGeometry.py:963 +msgid "Failed. Select a tool to copy." +msgstr "Eșuat. Selectează o unealtă pt copiere." + +#: flatcamObjects/FlatCAMGeometry.py:992 +msgid "Tool was copied in Tool Table." +msgstr "Unealta a fost copiata in Tabela de Unelte." + +#: flatcamObjects/FlatCAMGeometry.py:1019 +msgid "Tool was edited in Tool Table." +msgstr "Unealta a fost editata in Tabela de Unelte." + +#: flatcamObjects/FlatCAMGeometry.py:1048 +#: flatcamObjects/FlatCAMGeometry.py:1057 +msgid "Failed. Select a tool to delete." +msgstr "Eșuat. Selectează o unealtă pentru ștergere." + +#: flatcamObjects/FlatCAMGeometry.py:1081 +msgid "Tool was deleted in Tool Table." +msgstr "Unealta a fost stearsa din Tabela de Unelte." + +#: flatcamObjects/FlatCAMGeometry.py:1589 +msgid "This Geometry can't be processed because it is" +msgstr "Acest obiect Geometrie nu poate fi procesat deoarece" + +#: flatcamObjects/FlatCAMGeometry.py:1589 +msgid "geometry" +msgstr "geometria" + +#: flatcamObjects/FlatCAMGeometry.py:1630 +msgid "Failed. No tool selected in the tool table ..." +msgstr "Eșuat. Nici-o unealtă nu este selectată in Tabela de Unelte ..." + +#: flatcamObjects/FlatCAMGeometry.py:1732 +#: flatcamObjects/FlatCAMGeometry.py:1882 +msgid "" +"Tool Offset is selected in Tool Table but no value is provided.\n" +"Add a Tool Offset or change the Offset Type." +msgstr "" +"Un ofset pt unealtă este selectat in Tabela de Unelte dar nici-o val. nu " +"este oferita.\n" +"Adaugă un ofset pt unealtă sau schimbă Tipul Ofset." + +#: flatcamObjects/FlatCAMGeometry.py:1798 +#: flatcamObjects/FlatCAMGeometry.py:1944 +msgid "G-Code parsing in progress..." +msgstr "Analiza codului G în curs ..." + +#: flatcamObjects/FlatCAMGeometry.py:1800 +#: flatcamObjects/FlatCAMGeometry.py:1946 +msgid "G-Code parsing finished..." +msgstr "Analizarea codului G s-a terminat ..." + +#: flatcamObjects/FlatCAMGeometry.py:1808 +msgid "Finished G-Code processing" +msgstr "Prelucrarea G-Code terminată" + +#: flatcamObjects/FlatCAMGeometry.py:1810 +#: flatcamObjects/FlatCAMGeometry.py:1958 +msgid "G-Code processing failed with error" +msgstr "Procesarea G-Code a eșuat cu eroarea" + +#: flatcamObjects/FlatCAMGeometry.py:1852 flatcamTools/ToolSolderPaste.py:1301 +msgid "Cancelled. Empty file, it has no geometry" +msgstr "Anulat. Fişier gol, nu are geometrie" + +#: flatcamObjects/FlatCAMGeometry.py:1956 +#: flatcamObjects/FlatCAMGeometry.py:2117 +msgid "Finished G-Code processing..." +msgstr "Prelucrarea G-Code terminată ..." + +#: flatcamObjects/FlatCAMGeometry.py:1975 +#: flatcamObjects/FlatCAMGeometry.py:1979 +#: flatcamObjects/FlatCAMGeometry.py:2124 +msgid "CNCjob created" +msgstr "CNCjob creat" + +#: flatcamObjects/FlatCAMGeometry.py:2155 +#: flatcamObjects/FlatCAMGeometry.py:2164 flatcamParsers/ParseGerber.py:1867 +#: flatcamParsers/ParseGerber.py:1877 +msgid "Scale factor has to be a number: integer or float." +msgstr "Factorul de scalare trebuie să fie un număr: natural sau real." + +#: flatcamObjects/FlatCAMGeometry.py:2227 +msgid "Geometry Scale done." +msgstr "Scalare Geometrie executată." + +#: flatcamObjects/FlatCAMGeometry.py:2244 flatcamParsers/ParseGerber.py:1993 +msgid "" +"An (x,y) pair of values are needed. Probable you entered only one value in " +"the Offset field." +msgstr "" +"O pereche de valori (x,y) este necesară. Probabil că ai introdus numai o " +"singură valoare in câmpul Offset." + +#: flatcamObjects/FlatCAMGeometry.py:2300 +msgid "Geometry Offset done." +msgstr "Ofset Geometrie executat." + +#: flatcamObjects/FlatCAMGeometry.py:2329 +msgid "" +"The Toolchange X,Y field in Edit -> Preferences has to be in the format (x, " +"y)\n" +"but now there is only one value, not two." +msgstr "" +"Parametrul >Schimbare Unealtă X, Y< in Editare -> Peferințele trebuie să fie " +"in formatul (x, y) \n" +"dar are o singură valoare in loc de două." + +#: flatcamObjects/FlatCAMGerber.py:493 +msgid "Buffering solid geometry" +msgstr "Buferarea geometriei solide" + +#: flatcamObjects/FlatCAMGerber.py:502 +msgid "Done" +msgstr "Executat" + +#: flatcamObjects/FlatCAMGerber.py:528 flatcamObjects/FlatCAMGerber.py:554 +msgid "Operation could not be done." +msgstr "Operatia nu a putut fi executată." + +#: flatcamObjects/FlatCAMGerber.py:571 +msgid "Isolating..." +msgstr "Se izoleaza..." + +#: flatcamObjects/FlatCAMGerber.py:630 +msgid "Click on a polygon to isolate it." +msgstr "Faceți clic pe un poligon pentru a-l izola." + +#: flatcamObjects/FlatCAMGerber.py:669 flatcamObjects/FlatCAMGerber.py:773 +#: flatcamTools/ToolPaint.py:1511 +msgid "Added polygon" +msgstr "S-a adăugat poligon" + +#: flatcamObjects/FlatCAMGerber.py:670 flatcamObjects/FlatCAMGerber.py:775 +msgid "Click to add next polygon or right click to start isolation." +msgstr "" +"Faceți clic pentru a adăuga următorul poligon sau faceți clic dreapta pentru " +"a începe izolarea." + +#: flatcamObjects/FlatCAMGerber.py:682 flatcamTools/ToolPaint.py:1525 +msgid "Removed polygon" +msgstr "Poligon eliminat" + +#: flatcamObjects/FlatCAMGerber.py:683 +msgid "Click to add/remove next polygon or right click to start isolation." +msgstr "" +"Faceți clic pentru a adăuga / elimina următorul poligon sau faceți clic " +"dreapta pentru a începe izolarea." + +#: flatcamObjects/FlatCAMGerber.py:688 flatcamTools/ToolPaint.py:1531 +msgid "No polygon detected under click position." +msgstr "Nu a fost detectat niciun poligon sub poziția clicului." + +#: flatcamObjects/FlatCAMGerber.py:709 flatcamTools/ToolPaint.py:1560 +msgid "List of single polygons is empty. Aborting." +msgstr "Lista Poligoanelor este goală. Intrerup." + +#: flatcamObjects/FlatCAMGerber.py:778 +msgid "No polygon in selection." +msgstr "Niciun poligon în selecție." + +#: flatcamObjects/FlatCAMGerber.py:906 flatcamObjects/FlatCAMGerber.py:985 +#: flatcamTools/ToolNCC.py:2081 flatcamTools/ToolNCC.py:3132 +#: flatcamTools/ToolNCC.py:3511 +msgid "Isolation geometry could not be generated." +msgstr "Geometria de izolare nu a fost posibil să fie generată." + +#: flatcamObjects/FlatCAMGerber.py:931 flatcamObjects/FlatCAMGerber.py:1063 +msgid "Isolation geometry created" +msgstr "Geometria de izolare creată" + +#: flatcamObjects/FlatCAMGerber.py:940 flatcamObjects/FlatCAMGerber.py:1070 +msgid "Subtracting Geo" +msgstr "Scădere Geo" + +#: flatcamObjects/FlatCAMGerber.py:1395 +msgid "Plotting Apertures" +msgstr "Aperturile sunt in curs de afișare" + +#: flatcamObjects/FlatCAMObj.py:234 +msgid "Name changed from" +msgstr "Nume schimbat din" + +#: flatcamObjects/FlatCAMObj.py:234 +msgid "to" +msgstr "la" + +#: flatcamObjects/FlatCAMObj.py:245 +msgid "Offsetting..." +msgstr "Ofsetare..." + +#: flatcamObjects/FlatCAMObj.py:259 flatcamObjects/FlatCAMObj.py:264 +msgid "Scaling could not be executed." +msgstr "Scalarea nu a putut fi executată." + +#: flatcamObjects/FlatCAMObj.py:268 flatcamObjects/FlatCAMObj.py:276 +msgid "Scale done." +msgstr "Scalare efectuată." + +#: flatcamObjects/FlatCAMObj.py:274 +msgid "Scaling..." +msgstr "Scalare..." + +#: flatcamObjects/FlatCAMObj.py:292 +msgid "Skewing..." +msgstr "Deformare..." + +#: flatcamObjects/FlatCAMScript.py:102 +msgid "Script Editor" +msgstr "Editor Script" + +#: flatcamParsers/ParseExcellon.py:316 msgid "This is GCODE mark" msgstr "Acesta este un marcaj Gerber" -#: flatcamParsers/ParseExcellon.py:432 +#: flatcamParsers/ParseExcellon.py:433 msgid "" "No tool diameter info's. See shell.\n" "A tool change event: T" @@ -13516,7 +13546,7 @@ msgstr "" "Nu există informații despre diametrul uneltei. Vezi Shell.\n" "Un eveniment de schimbare a uneltei: T" -#: flatcamParsers/ParseExcellon.py:435 +#: flatcamParsers/ParseExcellon.py:436 msgid "" "was found but the Excellon file have no informations regarding the tool " "diameters therefore the application will try to load it by using some 'fake' " @@ -13529,11 +13559,6 @@ msgstr "" "Userul trebuie să editeze obictul Excellon rezultat si sa ajusteze " "diametrele a.i sa reflecte diametrele reale." -#: flatcamParsers/ParseExcellon.py:897 flatcamTools/ToolSolderPaste.py:1327 -msgid "An internal error has ocurred. See shell.\n" -msgstr "" -"A apărut o eroare internă. Verifică in TCL Shell pt mai multe detalii.\n" - #: flatcamParsers/ParseExcellon.py:900 msgid "" "Excellon Parser error.\n" @@ -13603,7 +13628,7 @@ msgstr "Continut linie Gerber" msgid "Gerber Parser ERROR" msgstr "Eroare in parserul Gerber" -#: flatcamParsers/ParseGerber.py:1956 +#: flatcamParsers/ParseGerber.py:1957 msgid "Gerber Scale done." msgstr "Scalarea Gerber efectuată." @@ -13611,19 +13636,19 @@ msgstr "Scalarea Gerber efectuată." msgid "Gerber Offset done." msgstr "Offsetare Gerber efectuată." -#: flatcamParsers/ParseGerber.py:2126 +#: flatcamParsers/ParseGerber.py:2125 msgid "Gerber Mirror done." msgstr "Oglindirea Gerber efectuată." -#: flatcamParsers/ParseGerber.py:2200 +#: flatcamParsers/ParseGerber.py:2199 msgid "Gerber Skew done." msgstr "Deformarea Gerber efectuată." -#: flatcamParsers/ParseGerber.py:2263 +#: flatcamParsers/ParseGerber.py:2261 msgid "Gerber Rotate done." msgstr "Rotatia Gerber efectuată." -#: flatcamParsers/ParseGerber.py:2419 +#: flatcamParsers/ParseGerber.py:2418 msgid "Gerber Buffer done." msgstr "Buffer Gerber efectuat." @@ -13730,28 +13755,28 @@ msgstr "" "rotatie." #: flatcamTools/ToolAlignObjects.py:176 flatcamTools/ToolCalculators.py:246 -#: flatcamTools/ToolCalibration.py:683 flatcamTools/ToolCopperThieving.py:485 -#: flatcamTools/ToolCutOut.py:372 flatcamTools/ToolDblSided.py:472 +#: flatcamTools/ToolCalibration.py:683 flatcamTools/ToolCopperThieving.py:484 +#: flatcamTools/ToolCutOut.py:371 flatcamTools/ToolDblSided.py:471 #: flatcamTools/ToolExtractDrills.py:310 flatcamTools/ToolFiducials.py:318 #: flatcamTools/ToolFilm.py:520 flatcamTools/ToolInvertGerber.py:140 -#: flatcamTools/ToolNCC.py:612 flatcamTools/ToolOptimal.py:238 -#: flatcamTools/ToolPaint.py:556 flatcamTools/ToolPanelize.py:269 +#: flatcamTools/ToolNCC.py:612 flatcamTools/ToolOptimal.py:237 +#: flatcamTools/ToolPaint.py:556 flatcamTools/ToolPanelize.py:267 #: flatcamTools/ToolPunchGerber.py:339 flatcamTools/ToolQRCode.py:314 -#: flatcamTools/ToolRulesCheck.py:516 flatcamTools/ToolSolderPaste.py:474 -#: flatcamTools/ToolSub.py:176 flatcamTools/ToolTransform.py:399 +#: flatcamTools/ToolRulesCheck.py:516 flatcamTools/ToolSolderPaste.py:473 +#: flatcamTools/ToolSub.py:176 flatcamTools/ToolTransform.py:398 msgid "Reset Tool" msgstr "Resetați Unealta" #: flatcamTools/ToolAlignObjects.py:178 flatcamTools/ToolCalculators.py:248 -#: flatcamTools/ToolCalibration.py:685 flatcamTools/ToolCopperThieving.py:487 -#: flatcamTools/ToolCutOut.py:374 flatcamTools/ToolDblSided.py:474 +#: flatcamTools/ToolCalibration.py:685 flatcamTools/ToolCopperThieving.py:486 +#: flatcamTools/ToolCutOut.py:373 flatcamTools/ToolDblSided.py:473 #: flatcamTools/ToolExtractDrills.py:312 flatcamTools/ToolFiducials.py:320 #: flatcamTools/ToolFilm.py:522 flatcamTools/ToolInvertGerber.py:142 -#: flatcamTools/ToolNCC.py:614 flatcamTools/ToolOptimal.py:240 -#: flatcamTools/ToolPaint.py:558 flatcamTools/ToolPanelize.py:271 +#: flatcamTools/ToolNCC.py:614 flatcamTools/ToolOptimal.py:239 +#: flatcamTools/ToolPaint.py:558 flatcamTools/ToolPanelize.py:269 #: flatcamTools/ToolPunchGerber.py:341 flatcamTools/ToolQRCode.py:316 -#: flatcamTools/ToolRulesCheck.py:518 flatcamTools/ToolSolderPaste.py:476 -#: flatcamTools/ToolSub.py:178 flatcamTools/ToolTransform.py:401 +#: flatcamTools/ToolRulesCheck.py:518 flatcamTools/ToolSolderPaste.py:475 +#: flatcamTools/ToolSub.py:178 flatcamTools/ToolTransform.py:400 msgid "Will reset the tool parameters." msgstr "Va reseta parametrii uneltei." @@ -13786,8 +13811,8 @@ msgstr "Click pe punctul DESTINATIE." #: flatcamTools/ToolAlignObjects.py:385 flatcamTools/ToolAlignObjects.py:400 #: flatcamTools/ToolAlignObjects.py:407 -msgid " Or right click to cancel." -msgstr " Sau fă click dreapta pentru anulare." +msgid "Or right click to cancel." +msgstr "Sau fă click dreapta pentru anulare." #: flatcamTools/ToolAlignObjects.py:400 flatcamTools/ToolAlignObjects.py:407 #: flatcamTools/ToolFiducials.py:111 @@ -13908,7 +13933,7 @@ msgstr "" "(pe cât posibil) colțurile obiectului." #: flatcamTools/ToolCalibration.py:193 flatcamTools/ToolFilm.py:76 -#: flatcamTools/ToolImage.py:54 flatcamTools/ToolPanelize.py:78 +#: flatcamTools/ToolImage.py:54 flatcamTools/ToolPanelize.py:76 #: flatcamTools/ToolProperties.py:177 msgid "Object Type" msgstr "Tip Obiect" @@ -14015,7 +14040,7 @@ msgstr "" "dreapta.\n" "- punctul înainte -> punctul de verificare final. Doar pentru evaluare." -#: flatcamTools/ToolCalibration.py:403 flatcamTools/ToolSolderPaste.py:349 +#: flatcamTools/ToolCalibration.py:403 flatcamTools/ToolSolderPaste.py:348 msgid "Generate GCode" msgstr "Generează GCode" @@ -14187,11 +14212,11 @@ msgstr "Anulat. Patru puncte sunt necesare pentru generarea GCode." msgid "There is no FlatCAM object selected..." msgstr "Nu a fost selectat niciun obiect FlatCAM ..." -#: flatcamTools/ToolCopperThieving.py:77 flatcamTools/ToolFiducials.py:261 +#: flatcamTools/ToolCopperThieving.py:76 flatcamTools/ToolFiducials.py:261 msgid "Gerber Object to which will be added a copper thieving." msgstr "Obiect Gerber căruia i se va adăuga Copper Thieving." -#: flatcamTools/ToolCopperThieving.py:99 +#: flatcamTools/ToolCopperThieving.py:98 msgid "" "This set the distance between the copper thieving components\n" "(the polygon fill may be split in multiple polygons)\n" @@ -14201,7 +14226,7 @@ msgstr "" "(umplutura poligonului poate fi împărțită în mai multe poligoane)\n" "si traseele de cupru din fisierul Gerber." -#: flatcamTools/ToolCopperThieving.py:132 +#: flatcamTools/ToolCopperThieving.py:131 msgid "" "- 'Itself' - the copper thieving extent is based on the object extent.\n" "- 'Area Selection' - left mouse click to start selection of the area to be " @@ -14215,12 +14240,12 @@ msgstr "" "- „Obiect de referință” - va face Copper Thieving în zona specificată de un " "alt obiect." -#: flatcamTools/ToolCopperThieving.py:139 flatcamTools/ToolNCC.py:552 +#: flatcamTools/ToolCopperThieving.py:138 flatcamTools/ToolNCC.py:552 #: flatcamTools/ToolPaint.py:496 msgid "Ref. Type" msgstr "Tip Ref" -#: flatcamTools/ToolCopperThieving.py:141 +#: flatcamTools/ToolCopperThieving.py:140 msgid "" "The type of FlatCAM object to be used as copper thieving reference.\n" "It can be Gerber, Excellon or Geometry." @@ -14229,22 +14254,22 @@ msgstr "" "Thieving.\n" "Poate fi Gerber, Excellon sau Geometrie." -#: flatcamTools/ToolCopperThieving.py:150 flatcamTools/ToolNCC.py:562 +#: flatcamTools/ToolCopperThieving.py:149 flatcamTools/ToolNCC.py:562 #: flatcamTools/ToolPaint.py:506 msgid "Ref. Object" msgstr "Obiect Ref" -#: flatcamTools/ToolCopperThieving.py:152 flatcamTools/ToolNCC.py:564 +#: flatcamTools/ToolCopperThieving.py:151 flatcamTools/ToolNCC.py:564 #: flatcamTools/ToolPaint.py:508 msgid "The FlatCAM object to be used as non copper clearing reference." msgstr "" "Obiectul FlatCAM pentru a fi utilizat ca referință pt. curățarea de cupru." -#: flatcamTools/ToolCopperThieving.py:328 +#: flatcamTools/ToolCopperThieving.py:327 msgid "Insert Copper thieving" msgstr "Inserați Copper Thieving" -#: flatcamTools/ToolCopperThieving.py:330 +#: flatcamTools/ToolCopperThieving.py:329 msgid "" "Will add a polygon (may be split in multiple parts)\n" "that will surround the actual Gerber traces at a certain distance." @@ -14252,11 +14277,11 @@ msgstr "" "Se va adăuga un poligon (poate fi împărțit în mai multe părți)\n" "care va înconjura traseele Gerber la o anumită distanță." -#: flatcamTools/ToolCopperThieving.py:389 +#: flatcamTools/ToolCopperThieving.py:388 msgid "Insert Robber Bar" msgstr "Inserați Rober Bar" -#: flatcamTools/ToolCopperThieving.py:391 +#: flatcamTools/ToolCopperThieving.py:390 msgid "" "Will add a polygon with a defined thickness\n" "that will surround the actual Gerber object\n" @@ -14268,11 +14293,11 @@ msgstr "" "la o anumită distanță.\n" "Necesar atunci când faceți placare găuri cu model." -#: flatcamTools/ToolCopperThieving.py:415 +#: flatcamTools/ToolCopperThieving.py:414 msgid "Select Soldermask object" msgstr "Selectați obiectul Soldermask" -#: flatcamTools/ToolCopperThieving.py:417 +#: flatcamTools/ToolCopperThieving.py:416 msgid "" "Gerber Object with the soldermask.\n" "It will be used as a base for\n" @@ -14282,11 +14307,11 @@ msgstr "" "Acesta va fi folosit ca bază pentru\n" "generarea de masca pentru placare cu model." -#: flatcamTools/ToolCopperThieving.py:446 +#: flatcamTools/ToolCopperThieving.py:445 msgid "Plated area" msgstr "Zona placată" -#: flatcamTools/ToolCopperThieving.py:448 +#: flatcamTools/ToolCopperThieving.py:447 msgid "" "The area to be plated by pattern plating.\n" "Basically is made from the openings in the plating mask.\n" @@ -14304,19 +14329,19 @@ msgstr "" "un pic mai mari decât padurile de cupru, iar această zonă este\n" "calculată din deschiderile soldermask." -#: flatcamTools/ToolCopperThieving.py:459 +#: flatcamTools/ToolCopperThieving.py:458 msgid "mm" msgstr "mm" -#: flatcamTools/ToolCopperThieving.py:461 +#: flatcamTools/ToolCopperThieving.py:460 msgid "in" msgstr "in" -#: flatcamTools/ToolCopperThieving.py:468 +#: flatcamTools/ToolCopperThieving.py:467 msgid "Generate pattern plating mask" msgstr "Generați mască de placare cu model" -#: flatcamTools/ToolCopperThieving.py:470 +#: flatcamTools/ToolCopperThieving.py:469 msgid "" "Will add to the soldermask gerber geometry\n" "the geometries of the copper thieving and/or\n" @@ -14326,69 +14351,69 @@ msgstr "" "geometriile Copper Thieving și / sau\n" "Robber Bar dacă acestea au fost generate." -#: flatcamTools/ToolCopperThieving.py:626 -#: flatcamTools/ToolCopperThieving.py:651 +#: flatcamTools/ToolCopperThieving.py:625 +#: flatcamTools/ToolCopperThieving.py:650 msgid "Lines Grid works only for 'itself' reference ..." msgstr "Gridul de Linii funcționează numai pentru referința „în sine” ..." -#: flatcamTools/ToolCopperThieving.py:637 +#: flatcamTools/ToolCopperThieving.py:636 msgid "Solid fill selected." msgstr "Umplere solidă selectată." -#: flatcamTools/ToolCopperThieving.py:642 +#: flatcamTools/ToolCopperThieving.py:641 msgid "Dots grid fill selected." msgstr "Umplere Grila de Puncte selectată." -#: flatcamTools/ToolCopperThieving.py:647 +#: flatcamTools/ToolCopperThieving.py:646 msgid "Squares grid fill selected." msgstr "Umplere Grila de Pătrate selectată." -#: flatcamTools/ToolCopperThieving.py:668 -#: flatcamTools/ToolCopperThieving.py:750 -#: flatcamTools/ToolCopperThieving.py:1346 flatcamTools/ToolDblSided.py:658 +#: flatcamTools/ToolCopperThieving.py:667 +#: flatcamTools/ToolCopperThieving.py:749 +#: flatcamTools/ToolCopperThieving.py:1345 flatcamTools/ToolDblSided.py:657 #: flatcamTools/ToolExtractDrills.py:436 flatcamTools/ToolFiducials.py:466 -#: flatcamTools/ToolFiducials.py:743 flatcamTools/ToolOptimal.py:343 +#: flatcamTools/ToolFiducials.py:743 flatcamTools/ToolOptimal.py:342 #: flatcamTools/ToolPunchGerber.py:512 flatcamTools/ToolQRCode.py:426 msgid "There is no Gerber object loaded ..." msgstr "Nu este nici-un obiect Gerber incărcat ..." -#: flatcamTools/ToolCopperThieving.py:681 -#: flatcamTools/ToolCopperThieving.py:1274 +#: flatcamTools/ToolCopperThieving.py:680 +#: flatcamTools/ToolCopperThieving.py:1273 msgid "Append geometry" msgstr "Adăugați geometria" -#: flatcamTools/ToolCopperThieving.py:725 -#: flatcamTools/ToolCopperThieving.py:1307 -#: flatcamTools/ToolCopperThieving.py:1460 +#: flatcamTools/ToolCopperThieving.py:724 +#: flatcamTools/ToolCopperThieving.py:1306 +#: flatcamTools/ToolCopperThieving.py:1459 msgid "Append source file" msgstr "Adăugați fișierul sursă" -#: flatcamTools/ToolCopperThieving.py:733 -#: flatcamTools/ToolCopperThieving.py:1315 +#: flatcamTools/ToolCopperThieving.py:732 +#: flatcamTools/ToolCopperThieving.py:1314 msgid "Copper Thieving Tool done." msgstr "Unealta Copper Thieving efectuata." -#: flatcamTools/ToolCopperThieving.py:760 -#: flatcamTools/ToolCopperThieving.py:793 flatcamTools/ToolCutOut.py:480 -#: flatcamTools/ToolCutOut.py:667 flatcamTools/ToolInvertGerber.py:208 +#: flatcamTools/ToolCopperThieving.py:759 +#: flatcamTools/ToolCopperThieving.py:792 flatcamTools/ToolCutOut.py:479 +#: flatcamTools/ToolCutOut.py:666 flatcamTools/ToolInvertGerber.py:208 #: flatcamTools/ToolNCC.py:1594 flatcamTools/ToolNCC.py:1635 #: flatcamTools/ToolNCC.py:1664 flatcamTools/ToolPaint.py:1469 -#: flatcamTools/ToolPanelize.py:413 flatcamTools/ToolPanelize.py:428 +#: flatcamTools/ToolPanelize.py:411 flatcamTools/ToolPanelize.py:426 #: flatcamTools/ToolSub.py:294 flatcamTools/ToolSub.py:307 #: flatcamTools/ToolSub.py:498 flatcamTools/ToolSub.py:513 #: tclCommands/TclCommandCopperClear.py:97 tclCommands/TclCommandPaint.py:99 msgid "Could not retrieve object" msgstr "Nu s-a putut incărca obiectul" -#: flatcamTools/ToolCopperThieving.py:770 flatcamTools/ToolNCC.py:1643 +#: flatcamTools/ToolCopperThieving.py:769 flatcamTools/ToolNCC.py:1643 msgid "Click the start point of the area." msgstr "Faceți clic pe punctul de pornire al zonei." -#: flatcamTools/ToolCopperThieving.py:821 +#: flatcamTools/ToolCopperThieving.py:820 msgid "Click the end point of the filling area." msgstr "Faceți clic pe punctul final al zonei de umplere." -#: flatcamTools/ToolCopperThieving.py:827 flatcamTools/ToolNCC.py:1705 +#: flatcamTools/ToolCopperThieving.py:826 flatcamTools/ToolNCC.py:1705 #: flatcamTools/ToolNCC.py:1757 flatcamTools/ToolPaint.py:1601 #: flatcamTools/ToolPaint.py:1652 msgid "Zone added. Click to start adding next zone or right click to finish." @@ -14396,87 +14421,87 @@ msgstr "" "Zona adăugată. Faceți clic stanga pt a continua adăugarea de zone sau click " "dreapta pentru a termina." -#: flatcamTools/ToolCopperThieving.py:943 -#: flatcamTools/ToolCopperThieving.py:947 -#: flatcamTools/ToolCopperThieving.py:1008 +#: flatcamTools/ToolCopperThieving.py:942 +#: flatcamTools/ToolCopperThieving.py:946 +#: flatcamTools/ToolCopperThieving.py:1007 msgid "Thieving" msgstr "Thieving" -#: flatcamTools/ToolCopperThieving.py:954 +#: flatcamTools/ToolCopperThieving.py:953 msgid "Copper Thieving Tool started. Reading parameters." msgstr "Unealta Thieving Tool a pornit. Se citesc parametrii." -#: flatcamTools/ToolCopperThieving.py:979 +#: flatcamTools/ToolCopperThieving.py:978 msgid "Copper Thieving Tool. Preparing isolation polygons." msgstr "Unealta Thieving Tool. Se pregătesc poligoanele de isolare." -#: flatcamTools/ToolCopperThieving.py:1024 +#: flatcamTools/ToolCopperThieving.py:1023 msgid "Copper Thieving Tool. Preparing areas to fill with copper." msgstr "Unealta Thieving Tool. Se pregătesc zonele de umplut cu cupru." -#: flatcamTools/ToolCopperThieving.py:1035 flatcamTools/ToolOptimal.py:350 -#: flatcamTools/ToolPanelize.py:802 flatcamTools/ToolRulesCheck.py:1127 +#: flatcamTools/ToolCopperThieving.py:1034 flatcamTools/ToolOptimal.py:349 +#: flatcamTools/ToolPanelize.py:800 flatcamTools/ToolRulesCheck.py:1127 msgid "Working..." msgstr "Se lucrează..." -#: flatcamTools/ToolCopperThieving.py:1062 +#: flatcamTools/ToolCopperThieving.py:1061 msgid "Geometry not supported for bounding box" msgstr "Geometria nu este acceptată pentru caseta de delimitare" -#: flatcamTools/ToolCopperThieving.py:1068 flatcamTools/ToolNCC.py:1928 +#: flatcamTools/ToolCopperThieving.py:1067 flatcamTools/ToolNCC.py:1928 #: flatcamTools/ToolNCC.py:1983 flatcamTools/ToolNCC.py:2987 #: flatcamTools/ToolPaint.py:3375 msgid "No object available." msgstr "Nici-un obiect disponibil." -#: flatcamTools/ToolCopperThieving.py:1105 flatcamTools/ToolNCC.py:1953 +#: flatcamTools/ToolCopperThieving.py:1104 flatcamTools/ToolNCC.py:1953 #: flatcamTools/ToolNCC.py:2006 flatcamTools/ToolNCC.py:3029 msgid "The reference object type is not supported." msgstr "Tipul de obiect de referintă nu este acceptat." -#: flatcamTools/ToolCopperThieving.py:1110 +#: flatcamTools/ToolCopperThieving.py:1109 msgid "Copper Thieving Tool. Appending new geometry and buffering." msgstr "" "Unealta Copper Thieving. Se adauga o noua geometrie si se fuzioneaza acestea." -#: flatcamTools/ToolCopperThieving.py:1126 +#: flatcamTools/ToolCopperThieving.py:1125 msgid "Create geometry" msgstr "Creați geometrie" -#: flatcamTools/ToolCopperThieving.py:1326 -#: flatcamTools/ToolCopperThieving.py:1330 +#: flatcamTools/ToolCopperThieving.py:1325 +#: flatcamTools/ToolCopperThieving.py:1329 msgid "P-Plating Mask" msgstr "Mască M-Placare" -#: flatcamTools/ToolCopperThieving.py:1352 +#: flatcamTools/ToolCopperThieving.py:1351 msgid "Append PP-M geometry" msgstr "Adaugă geometrie mască PM" -#: flatcamTools/ToolCopperThieving.py:1478 +#: flatcamTools/ToolCopperThieving.py:1477 msgid "Generating Pattern Plating Mask done." msgstr "Generarea măștii de placare cu model efectuată." -#: flatcamTools/ToolCopperThieving.py:1550 +#: flatcamTools/ToolCopperThieving.py:1549 msgid "Copper Thieving Tool exit." msgstr "Unealta Copper Thieving terminata." -#: flatcamTools/ToolCutOut.py:42 +#: flatcamTools/ToolCutOut.py:41 msgid "Cutout PCB" msgstr "Decupare PCB" -#: flatcamTools/ToolCutOut.py:70 flatcamTools/ToolPanelize.py:54 +#: flatcamTools/ToolCutOut.py:69 flatcamTools/ToolPanelize.py:52 msgid "Source Object" msgstr "Obiect Sursă" -#: flatcamTools/ToolCutOut.py:71 +#: flatcamTools/ToolCutOut.py:70 msgid "Object to be cutout" msgstr "Obiect care trebuie decupat" -#: flatcamTools/ToolCutOut.py:76 +#: flatcamTools/ToolCutOut.py:75 msgid "Kind" msgstr "Fel" -#: flatcamTools/ToolCutOut.py:98 +#: flatcamTools/ToolCutOut.py:97 msgid "" "Specify the type of object to be cutout.\n" "It can be of type: Gerber or Geometry.\n" @@ -14489,21 +14514,21 @@ msgstr "" "obiecte care vor aparea in combobox-ul\n" "numit >Obiect<." -#: flatcamTools/ToolCutOut.py:122 +#: flatcamTools/ToolCutOut.py:121 msgid "Tool Parameters" msgstr "Parametrii Unealtă" -#: flatcamTools/ToolCutOut.py:239 +#: flatcamTools/ToolCutOut.py:238 msgid "A. Automatic Bridge Gaps" msgstr "A. Punţi realiz. automat" -#: flatcamTools/ToolCutOut.py:241 +#: flatcamTools/ToolCutOut.py:240 msgid "This section handle creation of automatic bridge gaps." msgstr "" "Aceasta sectiune va permite crearea in mod automat\n" "a pana la 8 punţi." -#: flatcamTools/ToolCutOut.py:252 +#: flatcamTools/ToolCutOut.py:251 msgid "" "Number of gaps used for the Automatic cutout.\n" "There can be maximum 8 bridges/gaps.\n" @@ -14527,11 +14552,11 @@ msgstr "" "- 2tb = 2* sus - 2* jos\n" "- 8 = 2* stânga - 2* dreapta - 2* sus - 2* jos" -#: flatcamTools/ToolCutOut.py:273 +#: flatcamTools/ToolCutOut.py:272 msgid "Generate Freeform Geometry" msgstr "Generați geometrie cu formă liberă" -#: flatcamTools/ToolCutOut.py:275 +#: flatcamTools/ToolCutOut.py:274 msgid "" "Cutout the selected object.\n" "The cutout shape can be of any shape.\n" @@ -14541,11 +14566,11 @@ msgstr "" "Forma decupajului poate avea orice forma.\n" "Folositor când PCB-ul are o forma neregulata." -#: flatcamTools/ToolCutOut.py:287 +#: flatcamTools/ToolCutOut.py:286 msgid "Generate Rectangular Geometry" msgstr "Generați geometrie dreptunghiulară" -#: flatcamTools/ToolCutOut.py:289 +#: flatcamTools/ToolCutOut.py:288 msgid "" "Cutout the selected object.\n" "The resulting cutout shape is\n" @@ -14555,11 +14580,11 @@ msgstr "" "Decupează obiectul selectat.\n" "Forma decupajului este tot timpul dreptunghiulara.." -#: flatcamTools/ToolCutOut.py:308 +#: flatcamTools/ToolCutOut.py:307 msgid "B. Manual Bridge Gaps" msgstr "B. Punţi realiz. manual" -#: flatcamTools/ToolCutOut.py:310 +#: flatcamTools/ToolCutOut.py:309 msgid "" "This section handle creation of manual bridge gaps.\n" "This is done by mouse clicking on the perimeter of the\n" @@ -14571,15 +14596,15 @@ msgstr "" "apasarea tastei CTRL, operatia se va repeta automat pana când\n" "se va apasa tasta 'Escape'. " -#: flatcamTools/ToolCutOut.py:329 +#: flatcamTools/ToolCutOut.py:328 msgid "Geometry object used to create the manual cutout." msgstr "Obiect tip Geometrie folosit pentru crearea decupajului manual." -#: flatcamTools/ToolCutOut.py:338 +#: flatcamTools/ToolCutOut.py:337 msgid "Generate Manual Geometry" msgstr "Generați geometrie manuală" -#: flatcamTools/ToolCutOut.py:340 +#: flatcamTools/ToolCutOut.py:339 msgid "" "If the object to be cutout is a Gerber\n" "first create a Geometry that surrounds it,\n" @@ -14592,11 +14617,11 @@ msgstr "" "Selectează obiectul sursa Gerber in combobox-ul de mai sus,\n" "numit >Obiect<." -#: flatcamTools/ToolCutOut.py:353 +#: flatcamTools/ToolCutOut.py:352 msgid "Manual Add Bridge Gaps" msgstr "Adaugă punţi manual" -#: flatcamTools/ToolCutOut.py:355 +#: flatcamTools/ToolCutOut.py:354 msgid "" "Use the left mouse button (LMB) click\n" "to create a bridge gap to separate the PCB from\n" @@ -14610,7 +14635,7 @@ msgstr "" "apasarea tastei CTRL, operatia se va repeta automat pana când\n" "se va apasa tasta 'Escape'." -#: flatcamTools/ToolCutOut.py:485 +#: flatcamTools/ToolCutOut.py:484 msgid "" "There is no object selected for Cutout.\n" "Select one and try again." @@ -14618,19 +14643,19 @@ msgstr "" "Nu este nici-un obiect selectat pentru decupaj.\n" "Selectează unul și încearcă din nou." -#: flatcamTools/ToolCutOut.py:491 flatcamTools/ToolCutOut.py:676 -#: flatcamTools/ToolCutOut.py:839 flatcamTools/ToolCutOut.py:921 -#: tclCommands/TclCommandGeoCutout.py:185 +#: flatcamTools/ToolCutOut.py:490 flatcamTools/ToolCutOut.py:675 +#: flatcamTools/ToolCutOut.py:838 flatcamTools/ToolCutOut.py:920 +#: tclCommands/TclCommandGeoCutout.py:184 msgid "Tool Diameter is zero value. Change it to a positive real number." msgstr "Diametrul uneltei este zero. Schimbă intr-o valoare pozitivă Reală." -#: flatcamTools/ToolCutOut.py:505 flatcamTools/ToolCutOut.py:691 +#: flatcamTools/ToolCutOut.py:504 flatcamTools/ToolCutOut.py:690 msgid "Number of gaps value is missing. Add it and retry." msgstr "" "Numărul de punţi lipseste sau este in format gresit. Adaugă din nou și " "reîncearcă." -#: flatcamTools/ToolCutOut.py:510 flatcamTools/ToolCutOut.py:695 +#: flatcamTools/ToolCutOut.py:509 flatcamTools/ToolCutOut.py:694 msgid "" "Gaps value can be only one of: 'None', 'lr', 'tb', '2lr', '2tb', 4 or 8. " "Fill in a correct value and retry. " @@ -14638,7 +14663,7 @@ msgstr "" "Valoarea spatiilor poate fi doar una dintre: „Niciuna”, „lr”, „tb”, „2lr”, " "„2tb”, 4 sau 8. Completați o valoare corectă și încercați din nou. " -#: flatcamTools/ToolCutOut.py:515 flatcamTools/ToolCutOut.py:701 +#: flatcamTools/ToolCutOut.py:514 flatcamTools/ToolCutOut.py:700 msgid "" "Cutout operation cannot be done on a multi-geo Geometry.\n" "Optionally, this Multi-geo Geometry can be converted to Single-geo " @@ -14650,45 +14675,45 @@ msgstr "" "Se poate insa converti MultiGeo in tip SingleGeo și apoi se poate efectua " "decupajul." -#: flatcamTools/ToolCutOut.py:650 flatcamTools/ToolCutOut.py:828 +#: flatcamTools/ToolCutOut.py:649 flatcamTools/ToolCutOut.py:827 msgid "Any form CutOut operation finished." msgstr "Operatia de decupaj cu formă liberă s-a terminat." -#: flatcamTools/ToolCutOut.py:671 flatcamTools/ToolInvertGerber.py:214 +#: flatcamTools/ToolCutOut.py:670 flatcamTools/ToolInvertGerber.py:214 #: flatcamTools/ToolNCC.py:1598 flatcamTools/ToolPaint.py:1392 -#: flatcamTools/ToolPanelize.py:418 tclCommands/TclCommandBbox.py:72 -#: tclCommands/TclCommandNregions.py:72 +#: flatcamTools/ToolPanelize.py:416 tclCommands/TclCommandBbox.py:71 +#: tclCommands/TclCommandNregions.py:71 msgid "Object not found" msgstr "Obiectul nu a fost gasit" -#: flatcamTools/ToolCutOut.py:814 +#: flatcamTools/ToolCutOut.py:813 msgid "Rectangular cutout with negative margin is not possible." msgstr "Tăierea rectangulară cu marginea negativă nu este posibilă." -#: flatcamTools/ToolCutOut.py:833 +#: flatcamTools/ToolCutOut.py:832 msgid "" "Click on the selected geometry object perimeter to create a bridge gap ..." msgstr "" "Click pe perimetrul obiectului tip Geometrie selectat\n" "pentru a crea o punte separatoare." -#: flatcamTools/ToolCutOut.py:850 flatcamTools/ToolCutOut.py:876 +#: flatcamTools/ToolCutOut.py:849 flatcamTools/ToolCutOut.py:875 msgid "Could not retrieve Geometry object" msgstr "Nu s-a putut incărca obiectul Geometrie" -#: flatcamTools/ToolCutOut.py:881 +#: flatcamTools/ToolCutOut.py:880 msgid "Geometry object for manual cutout not found" msgstr "Obiectul Geometrie pentru decupaj manual nu este găsit" -#: flatcamTools/ToolCutOut.py:891 +#: flatcamTools/ToolCutOut.py:890 msgid "Added manual Bridge Gap." msgstr "O punte a fost adăugată in mod manual." -#: flatcamTools/ToolCutOut.py:903 +#: flatcamTools/ToolCutOut.py:902 msgid "Could not retrieve Gerber object" msgstr "Nu s-a putut incărca obiectul Gerber" -#: flatcamTools/ToolCutOut.py:908 +#: flatcamTools/ToolCutOut.py:907 msgid "" "There is no Gerber object selected for Cutout.\n" "Select one and try again." @@ -14696,7 +14721,7 @@ msgstr "" "Nu există obiect selectat pt operatia de decupare.\n" "Selectează un obiect si incearcă din nou." -#: flatcamTools/ToolCutOut.py:914 +#: flatcamTools/ToolCutOut.py:913 msgid "" "The selected object has to be of Gerber type.\n" "Select a Gerber file and try again." @@ -14704,32 +14729,32 @@ msgstr "" "Obiectul selectat trebuie să fie de tip Gerber.\n" "Selectează un obiect Gerber si incearcă din nou." -#: flatcamTools/ToolCutOut.py:949 +#: flatcamTools/ToolCutOut.py:948 msgid "Geometry not supported for cutout" msgstr "Geometria nu este acceptată pentru decupaj" -#: flatcamTools/ToolCutOut.py:1007 +#: flatcamTools/ToolCutOut.py:1006 msgid "Making manual bridge gap..." msgstr "Se generează o punte separatoare in mod manual..." -#: flatcamTools/ToolDblSided.py:27 +#: flatcamTools/ToolDblSided.py:26 msgid "2-Sided PCB" msgstr "2-fețe PCB" -#: flatcamTools/ToolDblSided.py:53 +#: flatcamTools/ToolDblSided.py:52 msgid "Mirror Operation" msgstr "Operațiune Oglindire" -#: flatcamTools/ToolDblSided.py:54 +#: flatcamTools/ToolDblSided.py:53 msgid "Objects to be mirrored" msgstr "Obiecte care vor fi Oglindite" -#: flatcamTools/ToolDblSided.py:66 +#: flatcamTools/ToolDblSided.py:65 msgid "Gerber to be mirrored" msgstr "Gerber pentru oglindit" -#: flatcamTools/ToolDblSided.py:70 flatcamTools/ToolDblSided.py:98 -#: flatcamTools/ToolDblSided.py:128 +#: flatcamTools/ToolDblSided.py:69 flatcamTools/ToolDblSided.py:97 +#: flatcamTools/ToolDblSided.py:127 msgid "" "Mirrors (flips) the specified object around \n" "the specified axis. Does not create a new \n" @@ -14738,27 +14763,27 @@ msgstr "" "Oglindește obiectul specificat pe axa specificata.\n" "Nu crează un obiect nou ci il modifica." -#: flatcamTools/ToolDblSided.py:94 +#: flatcamTools/ToolDblSided.py:93 msgid "Excellon Object to be mirrored." msgstr "Obiectul Excellon care va fi oglindit." -#: flatcamTools/ToolDblSided.py:123 +#: flatcamTools/ToolDblSided.py:122 msgid "Geometry Obj to be mirrored." msgstr "Obiectul Geometrie care va fi oglindit." -#: flatcamTools/ToolDblSided.py:159 +#: flatcamTools/ToolDblSided.py:158 msgid "Mirror Parameters" msgstr "Parametrii Oglindire" -#: flatcamTools/ToolDblSided.py:160 +#: flatcamTools/ToolDblSided.py:159 msgid "Parameters for the mirror operation" msgstr "Parametri pt operația de Oglindire" -#: flatcamTools/ToolDblSided.py:165 +#: flatcamTools/ToolDblSided.py:164 msgid "Mirror Axis" msgstr "Axa Oglindire" -#: flatcamTools/ToolDblSided.py:176 +#: flatcamTools/ToolDblSided.py:175 msgid "" "The coordinates used as reference for the mirror operation.\n" "Can be:\n" @@ -14773,14 +14798,14 @@ msgstr "" "inconjurătoare\n" "al unui alt obiect, selectat mai jos" -#: flatcamTools/ToolDblSided.py:190 +#: flatcamTools/ToolDblSided.py:189 msgid "Point coordinates" msgstr "Coordonatele Punct" -#: flatcamTools/ToolDblSided.py:195 +#: flatcamTools/ToolDblSided.py:194 msgid "" "Add the coordinates in format (x, y) through which the mirroring " -"axis \n" +"axis\n" " selected in 'MIRROR AXIS' pass.\n" "The (x, y) coordinates are captured by pressing SHIFT key\n" "and left mouse button click on canvas or you can enter the coordinates " @@ -14792,7 +14817,7 @@ msgstr "" "pe\n" "suprafata de afisare sau le puteti introduce manual." -#: flatcamTools/ToolDblSided.py:219 +#: flatcamTools/ToolDblSided.py:218 msgid "" "It can be of type: Gerber or Excellon or Geometry.\n" "The coordinates of the center of the bounding box are used\n" @@ -14802,11 +14827,11 @@ msgstr "" "Coordonatele centrului formei inconjurătoare sunt folosite\n" "ca si referintă pentru operatiunea de Oglindire." -#: flatcamTools/ToolDblSided.py:253 +#: flatcamTools/ToolDblSided.py:252 msgid "Bounds Values" msgstr "Valorile Limitelor" -#: flatcamTools/ToolDblSided.py:255 +#: flatcamTools/ToolDblSided.py:254 msgid "" "Select on canvas the object(s)\n" "for which to calculate bounds values." @@ -14814,39 +14839,39 @@ msgstr "" "Selectati pe suprafata de afisare obiectul(e)\n" "pentru care se calculează valorile limitelor." -#: flatcamTools/ToolDblSided.py:265 +#: flatcamTools/ToolDblSided.py:264 msgid "X min" msgstr "X min" -#: flatcamTools/ToolDblSided.py:267 flatcamTools/ToolDblSided.py:281 +#: flatcamTools/ToolDblSided.py:266 flatcamTools/ToolDblSided.py:280 msgid "Minimum location." msgstr "Locație minimă." -#: flatcamTools/ToolDblSided.py:279 +#: flatcamTools/ToolDblSided.py:278 msgid "Y min" msgstr "Y min" -#: flatcamTools/ToolDblSided.py:293 +#: flatcamTools/ToolDblSided.py:292 msgid "X max" msgstr "X max" -#: flatcamTools/ToolDblSided.py:295 flatcamTools/ToolDblSided.py:309 +#: flatcamTools/ToolDblSided.py:294 flatcamTools/ToolDblSided.py:308 msgid "Maximum location." msgstr "Locație maximă." -#: flatcamTools/ToolDblSided.py:307 +#: flatcamTools/ToolDblSided.py:306 msgid "Y max" msgstr "Y max" -#: flatcamTools/ToolDblSided.py:318 +#: flatcamTools/ToolDblSided.py:317 msgid "Center point coordinates" msgstr "Coordonatele punctului central" -#: flatcamTools/ToolDblSided.py:320 +#: flatcamTools/ToolDblSided.py:319 msgid "Centroid" msgstr "Centroid" -#: flatcamTools/ToolDblSided.py:322 +#: flatcamTools/ToolDblSided.py:321 msgid "" "The center point location for the rectangular\n" "bounding shape. Centroid. Format is (x, y)." @@ -14854,11 +14879,11 @@ msgstr "" "Locația punctului central pentru dreptunghiul\n" "formă de delimitare. Centroid. Formatul este (x, y)." -#: flatcamTools/ToolDblSided.py:331 +#: flatcamTools/ToolDblSided.py:330 msgid "Calculate Bounds Values" msgstr "Calculați valorile limitelor" -#: flatcamTools/ToolDblSided.py:333 +#: flatcamTools/ToolDblSided.py:332 msgid "" "Calculate the enveloping rectangular shape coordinates,\n" "for the selection of objects.\n" @@ -14868,11 +14893,11 @@ msgstr "" "pentru selectarea obiectelor.\n" "Forma este paralelă cu axele X, Y." -#: flatcamTools/ToolDblSided.py:353 +#: flatcamTools/ToolDblSided.py:352 msgid "PCB Alignment" msgstr "Aliniere PCB" -#: flatcamTools/ToolDblSided.py:355 flatcamTools/ToolDblSided.py:457 +#: flatcamTools/ToolDblSided.py:354 flatcamTools/ToolDblSided.py:456 msgid "" "Creates an Excellon Object containing the\n" "specified alignment holes and their mirror\n" @@ -14881,11 +14906,11 @@ msgstr "" "Crează un obiect Excellon care contine găurile\n" "de aliniere specificate cat și cele in oglinda." -#: flatcamTools/ToolDblSided.py:362 +#: flatcamTools/ToolDblSided.py:361 msgid "Drill Diameter" msgstr "Dia Găurire" -#: flatcamTools/ToolDblSided.py:391 flatcamTools/ToolDblSided.py:398 +#: flatcamTools/ToolDblSided.py:390 flatcamTools/ToolDblSided.py:397 msgid "" "The reference point used to create the second alignment drill\n" "from the first alignment drill, by doing mirror.\n" @@ -14895,11 +14920,11 @@ msgstr "" "din prima gaură de aliniere prin oglindire.\n" "Poate fi modificat in Parametri Oglindire -> Sectiunea Referintă" -#: flatcamTools/ToolDblSided.py:411 +#: flatcamTools/ToolDblSided.py:410 msgid "Alignment Drill Coordinates" msgstr "Dia. găuri de aliniere" -#: flatcamTools/ToolDblSided.py:413 +#: flatcamTools/ToolDblSided.py:412 msgid "" "Alignment holes (x1, y1), (x2, y2), ... on one side of the mirror axis. For " "each set of (x, y) coordinates\n" @@ -14916,11 +14941,11 @@ msgstr "" "- o gaură cu coord. in poziţia oglindită pe axa selectată mai sus in 'Axa " "Aliniere'." -#: flatcamTools/ToolDblSided.py:421 +#: flatcamTools/ToolDblSided.py:420 msgid "Drill coordinates" msgstr "Coordonatele găuri" -#: flatcamTools/ToolDblSided.py:428 +#: flatcamTools/ToolDblSided.py:427 msgid "" "Add alignment drill holes coordinates in the format: (x1, y1), (x2, " "y2), ... \n" @@ -14945,23 +14970,23 @@ msgstr "" "in câmpul de edit.\n" "- se introduc manual in formatul (x1,y1), (x2,y2) ..." -#: flatcamTools/ToolDblSided.py:443 +#: flatcamTools/ToolDblSided.py:442 msgid "Delete Last" msgstr "Șterge Ultima" -#: flatcamTools/ToolDblSided.py:445 +#: flatcamTools/ToolDblSided.py:444 msgid "Delete the last coordinates tuple in the list." msgstr "Șterge ultimul set de coordinate din listă." -#: flatcamTools/ToolDblSided.py:455 +#: flatcamTools/ToolDblSided.py:454 msgid "Create Excellon Object" msgstr "Crează un obiect Excellon" -#: flatcamTools/ToolDblSided.py:542 +#: flatcamTools/ToolDblSided.py:541 msgid "2-Sided Tool" msgstr "Unealta 2-fețe" -#: flatcamTools/ToolDblSided.py:582 +#: flatcamTools/ToolDblSided.py:581 msgid "" "'Point' reference is selected and 'Point' coordinates are missing. Add them " "and retry." @@ -14969,53 +14994,53 @@ msgstr "" "Referința 'Punct' este selectată dar coordonatele sale lipsesc. Adăugă-le si " "încearcă din nou." -#: flatcamTools/ToolDblSided.py:601 +#: flatcamTools/ToolDblSided.py:600 msgid "There is no Box reference object loaded. Load one and retry." msgstr "" "Nici-un obiect container nu este incărcat. Încarcă unul și încearcă din nou." -#: flatcamTools/ToolDblSided.py:613 +#: flatcamTools/ToolDblSided.py:612 msgid "No value or wrong format in Drill Dia entry. Add it and retry." msgstr "" "Val. pt dia burghiu lipseste sau este in format gresit. Adaugă una și " "încearcă din nou." -#: flatcamTools/ToolDblSided.py:624 +#: flatcamTools/ToolDblSided.py:623 msgid "There are no Alignment Drill Coordinates to use. Add them and retry." msgstr "" "Nu exista coord. pentru găurile de aliniere. Adaugă-le și încearcă din nou." -#: flatcamTools/ToolDblSided.py:649 +#: flatcamTools/ToolDblSided.py:648 msgid "Excellon object with alignment drills created..." msgstr "Obiectul Excellon conținând găurile de aliniere a fost creat ..." -#: flatcamTools/ToolDblSided.py:662 flatcamTools/ToolDblSided.py:705 -#: flatcamTools/ToolDblSided.py:749 +#: flatcamTools/ToolDblSided.py:661 flatcamTools/ToolDblSided.py:704 +#: flatcamTools/ToolDblSided.py:748 msgid "Only Gerber, Excellon and Geometry objects can be mirrored." msgstr "Doar obiectele de tip Geometrie, Excellon și Gerber pot fi oglindite." -#: flatcamTools/ToolDblSided.py:672 flatcamTools/ToolDblSided.py:716 +#: flatcamTools/ToolDblSided.py:671 flatcamTools/ToolDblSided.py:715 msgid "" "There are no Point coordinates in the Point field. Add coords and try " "again ..." msgstr "" "Nu există coord. in câmpul 'Punct'. Adaugă coord. și încearcă din nou..." -#: flatcamTools/ToolDblSided.py:682 flatcamTools/ToolDblSided.py:726 -#: flatcamTools/ToolDblSided.py:763 +#: flatcamTools/ToolDblSided.py:681 flatcamTools/ToolDblSided.py:725 +#: flatcamTools/ToolDblSided.py:762 msgid "There is no Box object loaded ..." msgstr "Nu este incărcat nici-un obiect container ..." -#: flatcamTools/ToolDblSided.py:692 flatcamTools/ToolDblSided.py:736 -#: flatcamTools/ToolDblSided.py:773 +#: flatcamTools/ToolDblSided.py:691 flatcamTools/ToolDblSided.py:735 +#: flatcamTools/ToolDblSided.py:772 msgid "was mirrored" msgstr "a fost oglindit" -#: flatcamTools/ToolDblSided.py:701 flatcamTools/ToolPunchGerber.py:533 +#: flatcamTools/ToolDblSided.py:700 flatcamTools/ToolPunchGerber.py:533 msgid "There is no Excellon object loaded ..." msgstr "Nici-un obiect tip Excellon nu este incărcat ..." -#: flatcamTools/ToolDblSided.py:745 +#: flatcamTools/ToolDblSided.py:744 msgid "There is no Geometry object loaded ..." msgstr "Nici-un obiect tip Geometrie nu este incărcat ..." @@ -15481,7 +15506,7 @@ msgid "Export negative film" msgstr "Export film negativ" #: flatcamTools/ToolFilm.py:956 flatcamTools/ToolFilm.py:1139 -#: flatcamTools/ToolPanelize.py:433 +#: flatcamTools/ToolPanelize.py:431 msgid "No object Box. Using instead" msgstr "Nu exista container. Se foloseşte in schimb" @@ -15639,27 +15664,27 @@ msgstr "" msgid "Invert Tool" msgstr "Unealta Inversie" -#: flatcamTools/ToolMove.py:103 +#: flatcamTools/ToolMove.py:102 msgid "MOVE: Click on the Start point ..." msgstr "MUTARE: Click pe punctul de Start ..." -#: flatcamTools/ToolMove.py:114 +#: flatcamTools/ToolMove.py:113 msgid "Cancelled. No object(s) to move." msgstr "Anulat. Nu sunt obiecte care să fie mutate." -#: flatcamTools/ToolMove.py:141 +#: flatcamTools/ToolMove.py:140 msgid "MOVE: Click on the Destination point ..." msgstr "MUTARE: Click pe punctul Destinaţie..." -#: flatcamTools/ToolMove.py:164 +#: flatcamTools/ToolMove.py:163 msgid "Moving..." msgstr "In mișcare ..." -#: flatcamTools/ToolMove.py:167 +#: flatcamTools/ToolMove.py:166 msgid "No object(s) selected." msgstr "Nici-un obiect nu este selectat." -#: flatcamTools/ToolMove.py:222 +#: flatcamTools/ToolMove.py:221 msgid "Error when mouse left click." msgstr "Eroare atunci când faceți clic pe butonul stânga al mouse-ului." @@ -15757,7 +15782,7 @@ msgstr "" "cu diametrul specificat mai sus." #: flatcamTools/ToolNCC.py:318 flatcamTools/ToolPaint.py:301 -#: flatcamTools/ToolSolderPaste.py:131 +#: flatcamTools/ToolSolderPaste.py:130 msgid "" "Delete a selection of tools in the Tool Table\n" "by first selecting a row(s) in the Tool Table." @@ -15799,7 +15824,7 @@ msgid "Tool from Tool Table was edited." msgstr "O unealtă din Tabela de Unelte a fost editata." #: flatcamTools/ToolNCC.py:1514 flatcamTools/ToolPaint.py:1264 -#: flatcamTools/ToolSolderPaste.py:977 +#: flatcamTools/ToolSolderPaste.py:978 msgid "Cancelled. New diameter value is already in the Tool Table." msgstr "" "Anulat. Noua valoare pt diametrul uneltei este deja in Tabela de Unelte." @@ -15941,43 +15966,43 @@ msgstr "" "Incearcă să folosesti optiunea Tipul de buffering = Complet in Preferinte -> " "Gerber General. Reincarcă fisierul Gerber după această schimbare." -#: flatcamTools/ToolOptimal.py:80 +#: flatcamTools/ToolOptimal.py:79 msgid "Number of decimals kept for found distances." msgstr "Numărul de zecimale păstrate pentru distanțele găsite." -#: flatcamTools/ToolOptimal.py:88 +#: flatcamTools/ToolOptimal.py:87 msgid "Minimum distance" msgstr "Distanta minima" -#: flatcamTools/ToolOptimal.py:89 +#: flatcamTools/ToolOptimal.py:88 msgid "Display minimum distance between copper features." msgstr "Afișează distanța minimă între caracteristicile de cupru." -#: flatcamTools/ToolOptimal.py:93 +#: flatcamTools/ToolOptimal.py:92 msgid "Determined" msgstr "Determinat" -#: flatcamTools/ToolOptimal.py:107 +#: flatcamTools/ToolOptimal.py:106 msgid "Occurring" msgstr "Aparute" -#: flatcamTools/ToolOptimal.py:108 +#: flatcamTools/ToolOptimal.py:107 msgid "How many times this minimum is found." msgstr "De câte ori este găsit acest minim." -#: flatcamTools/ToolOptimal.py:114 +#: flatcamTools/ToolOptimal.py:113 msgid "Minimum points coordinates" msgstr "Coordonatele punctelor minime" -#: flatcamTools/ToolOptimal.py:115 flatcamTools/ToolOptimal.py:121 +#: flatcamTools/ToolOptimal.py:114 flatcamTools/ToolOptimal.py:120 msgid "Coordinates for points where minimum distance was found." msgstr "Coordonate pentru puncte în care a fost găsită distanța minimă." -#: flatcamTools/ToolOptimal.py:134 flatcamTools/ToolOptimal.py:210 +#: flatcamTools/ToolOptimal.py:133 flatcamTools/ToolOptimal.py:209 msgid "Jump to selected position" msgstr "Salt la poziția selectată" -#: flatcamTools/ToolOptimal.py:136 flatcamTools/ToolOptimal.py:212 +#: flatcamTools/ToolOptimal.py:135 flatcamTools/ToolOptimal.py:211 msgid "" "Select a position in the Locations text box and then\n" "click this button." @@ -15985,11 +16010,11 @@ msgstr "" "Selectați o poziție în caseta de text Locații, apoi\n" "faceți clic pe acest buton." -#: flatcamTools/ToolOptimal.py:144 +#: flatcamTools/ToolOptimal.py:143 msgid "Other distances" msgstr "Alte distanțe" -#: flatcamTools/ToolOptimal.py:145 +#: flatcamTools/ToolOptimal.py:144 msgid "" "Will display other distances in the Gerber file ordered from\n" "the minimum to the maximum, not including the absolute minimum." @@ -15997,13 +16022,13 @@ msgstr "" "Va afișa alte distanțe din fișierul Gerber ordonate de la\n" "minim până la maxim, neincluzând minimul absolut." -#: flatcamTools/ToolOptimal.py:150 +#: flatcamTools/ToolOptimal.py:149 msgid "Other distances points coordinates" msgstr "Coordonatele altor puncte distanțe" -#: flatcamTools/ToolOptimal.py:151 flatcamTools/ToolOptimal.py:165 -#: flatcamTools/ToolOptimal.py:172 flatcamTools/ToolOptimal.py:189 -#: flatcamTools/ToolOptimal.py:196 +#: flatcamTools/ToolOptimal.py:150 flatcamTools/ToolOptimal.py:164 +#: flatcamTools/ToolOptimal.py:171 flatcamTools/ToolOptimal.py:188 +#: flatcamTools/ToolOptimal.py:195 msgid "" "Other distances and the coordinates for points\n" "where the distance was found." @@ -16011,19 +16036,19 @@ msgstr "" "Alte distanțe și coordonatele pentru puncte\n" "unde a fost găsită distanța." -#: flatcamTools/ToolOptimal.py:164 +#: flatcamTools/ToolOptimal.py:163 msgid "Gerber distances" msgstr "Distanțele Gerber" -#: flatcamTools/ToolOptimal.py:188 +#: flatcamTools/ToolOptimal.py:187 msgid "Points coordinates" msgstr "Coordonatele punctelor" -#: flatcamTools/ToolOptimal.py:220 +#: flatcamTools/ToolOptimal.py:219 msgid "Find Minimum" msgstr "Găsiți Minim" -#: flatcamTools/ToolOptimal.py:222 +#: flatcamTools/ToolOptimal.py:221 msgid "" "Calculate the minimum distance between copper features,\n" "this will allow the determination of the right tool to\n" @@ -16033,11 +16058,11 @@ msgstr "" "acest lucru va permite determinarea uneltei potrivite\n" "pentru izolare sau curatare de cupru." -#: flatcamTools/ToolOptimal.py:347 +#: flatcamTools/ToolOptimal.py:346 msgid "Only Gerber objects can be evaluated." msgstr "Doar obiecte tip Gerber pot fi folosite." -#: flatcamTools/ToolOptimal.py:353 +#: flatcamTools/ToolOptimal.py:352 msgid "" "Optimal Tool. Started to search for the minimum distance between copper " "features." @@ -16045,16 +16070,16 @@ msgstr "" "Unealta Optim. A început să caute distanța minimă între caracteristicile de " "cupru." -#: flatcamTools/ToolOptimal.py:363 +#: flatcamTools/ToolOptimal.py:362 msgid "Optimal Tool. Parsing geometry for aperture" msgstr "Unealta Optim. Analiza geometriei pentru apertura" -#: flatcamTools/ToolOptimal.py:374 +#: flatcamTools/ToolOptimal.py:373 msgid "Optimal Tool. Creating a buffer for the object geometry." msgstr "" "Unealta Optim. Se creeaza o Geometrie la o distanta de geometria obiectului." -#: flatcamTools/ToolOptimal.py:384 +#: flatcamTools/ToolOptimal.py:383 msgid "" "The Gerber object has one Polygon as geometry.\n" "There are no distances between geometry elements to be found." @@ -16062,17 +16087,17 @@ msgstr "" "Obiectul Gerber are un poligon ca geometrie.\n" "Nu există distanțe între elementele de geometrie care sa poata fi gasite." -#: flatcamTools/ToolOptimal.py:389 +#: flatcamTools/ToolOptimal.py:388 msgid "" "Optimal Tool. Finding the distances between each two elements. Iterations" msgstr "" "Unealta Optim. Se caută distanțele dintre fiecare două elemente. Iterații" -#: flatcamTools/ToolOptimal.py:424 +#: flatcamTools/ToolOptimal.py:423 msgid "Optimal Tool. Finding the minimum distance." msgstr "Unealta Optim. Se caută distanța minimă." -#: flatcamTools/ToolOptimal.py:440 +#: flatcamTools/ToolOptimal.py:439 msgid "Optimal Tool. Finished successfully." msgstr "Unealta Optim. Procesul s-a terminat cu succes." @@ -16359,11 +16384,11 @@ msgstr "Pictarea unei Zone a esuat." msgid "Paint Poly Area Done." msgstr "Paint pt o Zonă efectuat." -#: flatcamTools/ToolPanelize.py:34 +#: flatcamTools/ToolPanelize.py:32 msgid "Panelize PCB" msgstr "Panelizează PCB" -#: flatcamTools/ToolPanelize.py:56 +#: flatcamTools/ToolPanelize.py:54 msgid "" "Specify the type of object to be panelized\n" "It can be of type: Gerber, Excellon or Geometry.\n" @@ -16375,7 +16400,7 @@ msgstr "" "Selectia facuta aici va dicta tipul de obiecte care se vor\n" "regasi in combobox-ul >Obiect<." -#: flatcamTools/ToolPanelize.py:89 +#: flatcamTools/ToolPanelize.py:87 msgid "" "Object to be panelized. This means that it will\n" "be duplicated in an array of rows and columns." @@ -16384,11 +16409,11 @@ msgstr "" "Acesta va fi multiplicat intr-o arie\n" "de linii și coloane." -#: flatcamTools/ToolPanelize.py:102 +#: flatcamTools/ToolPanelize.py:100 msgid "Penelization Reference" msgstr "Referintă panelizare" -#: flatcamTools/ToolPanelize.py:104 +#: flatcamTools/ToolPanelize.py:102 msgid "" "Choose the reference for panelization:\n" "- Object = the bounding box of a different object\n" @@ -16410,11 +16435,11 @@ msgstr "" "referintă,\n" "prin urmare mentinand obiectele paenlizate in sincronizare unul cu altul." -#: flatcamTools/ToolPanelize.py:125 +#: flatcamTools/ToolPanelize.py:123 msgid "Box Type" msgstr "Tip container" -#: flatcamTools/ToolPanelize.py:127 +#: flatcamTools/ToolPanelize.py:125 msgid "" "Specify the type of object to be used as an container for\n" "panelization. It can be: Gerber or Geometry type.\n" @@ -16426,7 +16451,7 @@ msgstr "" "Selectia facuta aici va dicta tipul de obiecte care se vor\n" "regasi in combobox-ul >Container<." -#: flatcamTools/ToolPanelize.py:141 +#: flatcamTools/ToolPanelize.py:139 msgid "" "The actual object that is used a container for the\n" " selected object that is to be panelized." @@ -16434,11 +16459,11 @@ msgstr "" "Obiectul care este folosit ca și container \n" "pt obiectul care va fi panelizat." -#: flatcamTools/ToolPanelize.py:147 +#: flatcamTools/ToolPanelize.py:145 msgid "Panel Data" msgstr "Date panel" -#: flatcamTools/ToolPanelize.py:149 +#: flatcamTools/ToolPanelize.py:147 msgid "" "This informations will shape the resulting panel.\n" "The number of rows and columns will set how many\n" @@ -16454,7 +16479,7 @@ msgstr "" "Spatierile sunt de fapt distante intre oricare două elemente ale \n" "ariei panelului." -#: flatcamTools/ToolPanelize.py:208 +#: flatcamTools/ToolPanelize.py:206 msgid "" "Choose the type of object for the panel object:\n" "- Geometry\n" @@ -16464,15 +16489,15 @@ msgstr "" "- Geometrie\n" "-Gerber" -#: flatcamTools/ToolPanelize.py:216 +#: flatcamTools/ToolPanelize.py:214 msgid "Constrain panel within" msgstr "Mentine panelul in" -#: flatcamTools/ToolPanelize.py:252 +#: flatcamTools/ToolPanelize.py:250 msgid "Panelize Object" msgstr "Panelizează obiectul" -#: flatcamTools/ToolPanelize.py:254 flatcamTools/ToolRulesCheck.py:501 +#: flatcamTools/ToolPanelize.py:252 flatcamTools/ToolRulesCheck.py:501 msgid "" "Panelize the specified object around the specified box.\n" "In other words it creates multiple copies of the source object,\n" @@ -16482,33 +16507,33 @@ msgstr "" "Cu alte cuvinte se crează copii multiple ale obiectului sursa,\n" "aranjate intr-o arie 2D de linii și coloane." -#: flatcamTools/ToolPanelize.py:322 +#: flatcamTools/ToolPanelize.py:320 msgid "Panel. Tool" msgstr "Unealta Panel" -#: flatcamTools/ToolPanelize.py:460 +#: flatcamTools/ToolPanelize.py:458 msgid "Columns or Rows are zero value. Change them to a positive integer." msgstr "" "Val. coloane sau linii este zero. Schimbă aceasta val. intr-un număr pozitiv " "intreg." -#: flatcamTools/ToolPanelize.py:497 +#: flatcamTools/ToolPanelize.py:495 msgid "Generating panel ... " msgstr "Se generează Panel-ul… " -#: flatcamTools/ToolPanelize.py:777 +#: flatcamTools/ToolPanelize.py:775 msgid "Generating panel ... Adding the Gerber code." msgstr "Generarea panelului ... Adăugarea codului Gerber." -#: flatcamTools/ToolPanelize.py:788 +#: flatcamTools/ToolPanelize.py:786 msgid "Generating panel... Spawning copies" msgstr "Generarea panelului ... Se fac copii" -#: flatcamTools/ToolPanelize.py:795 +#: flatcamTools/ToolPanelize.py:793 msgid "Panel done..." msgstr "Panel executat ..." -#: flatcamTools/ToolPanelize.py:798 +#: flatcamTools/ToolPanelize.py:796 #, python-brace-format msgid "" "{text} Too big for the constrain area. Final panel has {col} columns and " @@ -16517,7 +16542,7 @@ msgstr "" "{text} Prea mare pt aria desemnată. Panelul final are {col} coloane si {row} " "linii" -#: flatcamTools/ToolPanelize.py:807 +#: flatcamTools/ToolPanelize.py:805 msgid "Panel created successfully." msgstr "Panel creat cu succes." @@ -16836,18 +16861,9 @@ msgstr "Unealta Punctare" msgid "The value of the fixed diameter is 0.0. Aborting." msgstr "Valoarea pentru diametrul fix ste 0.0. Renuntăm." -#: flatcamTools/ToolPunchGerber.py:607 +#: flatcamTools/ToolPunchGerber.py:607 flatcamTools/ToolPunchGerber.py:619 msgid "" -" Could not generate punched hole Gerber because the punch hole sizeis bigger " -"than some of the apertures in the Gerber object." -msgstr "" -" Nu a putut genera un obiect Gerber cu găuri punctate, deoarece dimensiunea " -"găurii de perforare este mai mare decât unele dintre aperturile din obiectul " -"Gerber." - -#: flatcamTools/ToolPunchGerber.py:619 -msgid "" -"Could not generate punched hole Gerber because the punch hole sizeis bigger " +"Could not generate punched hole Gerber because the punch hole size is bigger " "than some of the apertures in the Gerber object." msgstr "" "Nu s-a putut genera un obiect Gerber cu găuri punctate, deoarece dimensiunea " @@ -17163,19 +17179,19 @@ msgstr "A TRECUT" msgid "Violations: There are no violations for the current rule." msgstr "Încălcări: nu există încălcări pentru regula actuală." -#: flatcamTools/ToolShell.py:72 flatcamTools/ToolShell.py:74 +#: flatcamTools/ToolShell.py:74 flatcamTools/ToolShell.py:76 msgid "...processing..." msgstr "...in procesare..." -#: flatcamTools/ToolSolderPaste.py:38 +#: flatcamTools/ToolSolderPaste.py:37 msgid "Solder Paste Tool" msgstr "Unealta DispensorPF" -#: flatcamTools/ToolSolderPaste.py:70 +#: flatcamTools/ToolSolderPaste.py:69 msgid "Gerber Solder paste object. " msgstr "Obiect Gerber cu masca pt dispensarea de pastă de fludor. " -#: flatcamTools/ToolSolderPaste.py:77 +#: flatcamTools/ToolSolderPaste.py:76 msgid "" "Tools pool from which the algorithm\n" "will pick the ones used for dispensing solder paste." @@ -17183,7 +17199,7 @@ msgstr "" "Un număr de unelte (nozzle) din care algoritmul va alege pe acelea\n" "care vor fi folosite pentru dispensarea pastei de fludor." -#: flatcamTools/ToolSolderPaste.py:92 +#: flatcamTools/ToolSolderPaste.py:91 msgid "" "This is the Tool Number.\n" "The solder dispensing will start with the tool with the biggest \n" @@ -17198,7 +17214,7 @@ msgstr "" "Daca numai sunt unelte dar mai sunt inca paduri neacoperite de pastă de \n" "fludor, aplicaţia va afisa un mesaj de avertizare in Status Bar." -#: flatcamTools/ToolSolderPaste.py:99 +#: flatcamTools/ToolSolderPaste.py:98 msgid "" "Nozzle tool Diameter. It's value (in current FlatCAM units)\n" "is the width of the solder paste dispensed." @@ -17206,11 +17222,11 @@ msgstr "" "Diametrul uneltei Nozzle. Valoarea sa (in unitati de maura curente)\n" "este lăţimea cantiatii de pastă de fludor dispensata." -#: flatcamTools/ToolSolderPaste.py:106 +#: flatcamTools/ToolSolderPaste.py:105 msgid "New Nozzle Tool" msgstr "Unealtă noua" -#: flatcamTools/ToolSolderPaste.py:125 +#: flatcamTools/ToolSolderPaste.py:124 msgid "" "Add a new nozzle tool to the Tool Table\n" "with the diameter specified above." @@ -17218,15 +17234,15 @@ msgstr "" "Adaugă o unealtă nouă tip Nozzle in Tabela de Unelte\n" "cu diametrul specificat mai sus." -#: flatcamTools/ToolSolderPaste.py:137 +#: flatcamTools/ToolSolderPaste.py:136 msgid "Generate solder paste dispensing geometry." msgstr "Generează un obiect Geometrie pt dispensarea de pastă de fludor." -#: flatcamTools/ToolSolderPaste.py:156 +#: flatcamTools/ToolSolderPaste.py:155 msgid "STEP 1" msgstr "PAS 1" -#: flatcamTools/ToolSolderPaste.py:158 +#: flatcamTools/ToolSolderPaste.py:157 msgid "" "First step is to select a number of nozzle tools for usage\n" "and then optionally modify the GCode parameters bellow." @@ -17235,7 +17251,7 @@ msgstr "" "utilizare și apoi in mod optional, să se modifice parametrii\n" "GCode de mai jos." -#: flatcamTools/ToolSolderPaste.py:161 +#: flatcamTools/ToolSolderPaste.py:160 msgid "" "Select tools.\n" "Modify parameters." @@ -17243,7 +17259,7 @@ msgstr "" "Selectează unelte.\n" "Modifica parametri." -#: flatcamTools/ToolSolderPaste.py:281 +#: flatcamTools/ToolSolderPaste.py:280 msgid "" "Feedrate (speed) while moving up vertically\n" " to Dispense position (on Z plane)." @@ -17251,7 +17267,7 @@ msgstr "" "Viteza de deplasare la mișcarea pe verticala spre\n" "poziţia de dispensare (in planul Z)." -#: flatcamTools/ToolSolderPaste.py:351 +#: flatcamTools/ToolSolderPaste.py:350 msgid "" "Generate GCode for Solder Paste dispensing\n" "on PCB pads." @@ -17259,11 +17275,11 @@ msgstr "" "Generează GCode pt dispensarea\n" "de pastă de fludor pe padurile PCB." -#: flatcamTools/ToolSolderPaste.py:372 +#: flatcamTools/ToolSolderPaste.py:371 msgid "STEP 2" msgstr "PAS 2" -#: flatcamTools/ToolSolderPaste.py:374 +#: flatcamTools/ToolSolderPaste.py:373 msgid "" "Second step is to create a solder paste dispensing\n" "geometry out of an Solder Paste Mask Gerber file." @@ -17272,11 +17288,11 @@ msgstr "" "de pastă de fludor, dintr-un fişier Gerber cu datele mastii de plasare\n" "a pastei de fludor." -#: flatcamTools/ToolSolderPaste.py:391 +#: flatcamTools/ToolSolderPaste.py:390 msgid "Geo Result" msgstr "Rezultat Geo" -#: flatcamTools/ToolSolderPaste.py:393 +#: flatcamTools/ToolSolderPaste.py:392 msgid "" "Geometry Solder Paste object.\n" "The name of the object has to end in:\n" @@ -17286,11 +17302,11 @@ msgstr "" "Numele obiectului trebuie să se termine obligatoriu\n" "in: '_solderpaste'." -#: flatcamTools/ToolSolderPaste.py:402 +#: flatcamTools/ToolSolderPaste.py:401 msgid "STEP 3" msgstr "PAS 3" -#: flatcamTools/ToolSolderPaste.py:404 +#: flatcamTools/ToolSolderPaste.py:403 msgid "" "Third step is to select a solder paste dispensing geometry,\n" "and then generate a CNCJob object.\n" @@ -17306,11 +17322,11 @@ msgstr "" "mai intai trebuie generat obiectul Geometrie cu acei parametri noi și abia\n" "apoi se poate genera un obiect CNCJob actualizat." -#: flatcamTools/ToolSolderPaste.py:425 +#: flatcamTools/ToolSolderPaste.py:424 msgid "CNC Result" msgstr "Rezultat CNC" -#: flatcamTools/ToolSolderPaste.py:427 +#: flatcamTools/ToolSolderPaste.py:426 msgid "" "CNCJob Solder paste object.\n" "In order to enable the GCode save section,\n" @@ -17322,11 +17338,11 @@ msgstr "" "numele obiectului trebuie să se termine obligatoriu in:\n" "'_solderpaste'." -#: flatcamTools/ToolSolderPaste.py:437 +#: flatcamTools/ToolSolderPaste.py:436 msgid "View GCode" msgstr "Vizualiz. GCode" -#: flatcamTools/ToolSolderPaste.py:439 +#: flatcamTools/ToolSolderPaste.py:438 msgid "" "View the generated GCode for Solder Paste dispensing\n" "on PCB pads." @@ -17334,11 +17350,11 @@ msgstr "" "Vizualizează codul GCode generat pt dispensarea de \n" "pastă de fludor pe padurile PCB-ului." -#: flatcamTools/ToolSolderPaste.py:449 +#: flatcamTools/ToolSolderPaste.py:448 msgid "Save GCode" msgstr "Salvează GCode" -#: flatcamTools/ToolSolderPaste.py:451 +#: flatcamTools/ToolSolderPaste.py:450 msgid "" "Save the generated GCode for Solder Paste dispensing\n" "on PCB pads, to a file." @@ -17346,11 +17362,11 @@ msgstr "" "Salvează codul GCode generat pt dispensare pastă de fludor\n" "pe padurile unui PCB, intr-un fişier pe HDD." -#: flatcamTools/ToolSolderPaste.py:461 +#: flatcamTools/ToolSolderPaste.py:460 msgid "STEP 4" msgstr "PAS 4" -#: flatcamTools/ToolSolderPaste.py:463 +#: flatcamTools/ToolSolderPaste.py:462 msgid "" "Fourth step (and last) is to select a CNCJob made from \n" "a solder paste dispensing geometry, and then view/save it's GCode." @@ -17368,81 +17384,86 @@ msgstr "A fost adăugată o noua unealtă Nozzle in Tabela de Unelte." msgid "Nozzle tool from Tool Table was edited." msgstr "Unealta Nozzle din Tabela de Unelte a fost editată." -#: flatcamTools/ToolSolderPaste.py:1023 +#: flatcamTools/ToolSolderPaste.py:1024 msgid "Delete failed. Select a Nozzle tool to delete." msgstr "Ștergerea a eșuat. Selectează o unealtă Nozzle pt a o șterge." -#: flatcamTools/ToolSolderPaste.py:1029 +#: flatcamTools/ToolSolderPaste.py:1030 msgid "Nozzle tool(s) deleted from Tool Table." msgstr "Uneltele (nozzle) au fost șterse din Tabela de Unelte." -#: flatcamTools/ToolSolderPaste.py:1085 +#: flatcamTools/ToolSolderPaste.py:1086 msgid "No SolderPaste mask Gerber object loaded." msgstr "" "Nu este incărcat ni-un obiect Gerber cu informatia măstii pt pasta de fludor." -#: flatcamTools/ToolSolderPaste.py:1103 +#: flatcamTools/ToolSolderPaste.py:1104 msgid "Creating Solder Paste dispensing geometry." msgstr "Se creează Geometrie pt dispensare pastă de fludor." -#: flatcamTools/ToolSolderPaste.py:1116 +#: flatcamTools/ToolSolderPaste.py:1117 msgid "No Nozzle tools in the tool table." msgstr "Nu sunt unelte Nozzle in Tabela de Unelte." -#: flatcamTools/ToolSolderPaste.py:1242 +#: flatcamTools/ToolSolderPaste.py:1243 msgid "Cancelled. Empty file, it has no geometry..." msgstr "Anulat. Fişier gol, nu are geometrie ..." -#: flatcamTools/ToolSolderPaste.py:1245 +#: flatcamTools/ToolSolderPaste.py:1246 msgid "Solder Paste geometry generated successfully" msgstr "" "Obiectul Geometrie pt dispens. de pastă de fludor a fost generat cu succes" -#: flatcamTools/ToolSolderPaste.py:1252 +#: flatcamTools/ToolSolderPaste.py:1253 msgid "Some or all pads have no solder due of inadequate nozzle diameters..." msgstr "" "Cel puțin unele pad-uri nu au pastă de fludor datorita diametrelor uneltelor " "(nozzle) ne adecvate." -#: flatcamTools/ToolSolderPaste.py:1266 +#: flatcamTools/ToolSolderPaste.py:1267 msgid "Generating Solder Paste dispensing geometry..." msgstr "Se generează Geometria de dispensare a pastei de fludor ..." -#: flatcamTools/ToolSolderPaste.py:1286 +#: flatcamTools/ToolSolderPaste.py:1287 msgid "There is no Geometry object available." msgstr "Nu există obiect Geometrie disponibil." -#: flatcamTools/ToolSolderPaste.py:1291 +#: flatcamTools/ToolSolderPaste.py:1292 msgid "This Geometry can't be processed. NOT a solder_paste_tool geometry." msgstr "" "Acest obiect Geometrie nu poate fi procesat Nu este o Geometrie tip " "solder_paste_tool." -#: flatcamTools/ToolSolderPaste.py:1392 +#: flatcamTools/ToolSolderPaste.py:1328 +msgid "An internal error has ocurred. See shell.\n" +msgstr "" +"A apărut o eroare internă. Verifică in TCL Shell pt mai multe detalii.\n" + +#: flatcamTools/ToolSolderPaste.py:1393 msgid "ToolSolderPaste CNCjob created" msgstr "ToolSolderPaste CNCjob a fost creat" -#: flatcamTools/ToolSolderPaste.py:1411 +#: flatcamTools/ToolSolderPaste.py:1412 msgid "SP GCode Editor" msgstr "Editor GCode SP" -#: flatcamTools/ToolSolderPaste.py:1423 flatcamTools/ToolSolderPaste.py:1428 -#: flatcamTools/ToolSolderPaste.py:1483 +#: flatcamTools/ToolSolderPaste.py:1424 flatcamTools/ToolSolderPaste.py:1429 +#: flatcamTools/ToolSolderPaste.py:1484 msgid "" "This CNCJob object can't be processed. NOT a solder_paste_tool CNCJob object." msgstr "" "Acest obiect CNCJob nu poate fi procesat. Nu este un obiect CNCJob tip " "'solder_paste_tool'." -#: flatcamTools/ToolSolderPaste.py:1453 +#: flatcamTools/ToolSolderPaste.py:1454 msgid "No Gcode in the object" msgstr "Nu există cod GCode in acest obiect" -#: flatcamTools/ToolSolderPaste.py:1493 +#: flatcamTools/ToolSolderPaste.py:1494 msgid "Export GCode ..." msgstr "Exporta GCode ..." -#: flatcamTools/ToolSolderPaste.py:1541 +#: flatcamTools/ToolSolderPaste.py:1542 msgid "Solder paste dispenser GCode file saved to" msgstr "Fişierul GCode pt dispensare pastă de fludor este salvat in" @@ -17578,11 +17599,11 @@ msgstr "Analizează geometria solidă..." msgid "Parsing solid_geometry for tool" msgstr "Se analizează Geometria pt unealta" -#: flatcamTools/ToolTransform.py:24 +#: flatcamTools/ToolTransform.py:23 msgid "Object Transform" msgstr "Transformare Obiect" -#: flatcamTools/ToolTransform.py:79 +#: flatcamTools/ToolTransform.py:78 msgid "" "Rotate the selected object(s).\n" "The point of reference is the middle of\n" @@ -17592,7 +17613,7 @@ msgstr "" "Punctul de referinţă este mijlocul \n" "formei înconjurătoare pt toate obiectele." -#: flatcamTools/ToolTransform.py:100 flatcamTools/ToolTransform.py:121 +#: flatcamTools/ToolTransform.py:99 flatcamTools/ToolTransform.py:120 msgid "" "Angle for Skew action, in degrees.\n" "Float number between -360 and 360." @@ -17600,7 +17621,7 @@ msgstr "" "Valoarea unghiului de Deformare, in grade.\n" "Ia valori Reale între -360 si 360 grade." -#: flatcamTools/ToolTransform.py:110 flatcamTools/ToolTransform.py:131 +#: flatcamTools/ToolTransform.py:109 flatcamTools/ToolTransform.py:130 msgid "" "Skew/shear the selected object(s).\n" "The point of reference is the middle of\n" @@ -17610,7 +17631,7 @@ msgstr "" "Punctul de referinţă este mijlocul \n" "formei înconjurătoare pt toate obiectele." -#: flatcamTools/ToolTransform.py:160 flatcamTools/ToolTransform.py:180 +#: flatcamTools/ToolTransform.py:159 flatcamTools/ToolTransform.py:179 msgid "" "Scale the selected object(s).\n" "The point of reference depends on \n" @@ -17620,7 +17641,7 @@ msgstr "" "Punctul de referinţă depinde de\n" "starea checkbox-ului >Referința Scalare<." -#: flatcamTools/ToolTransform.py:229 flatcamTools/ToolTransform.py:249 +#: flatcamTools/ToolTransform.py:228 flatcamTools/ToolTransform.py:248 msgid "" "Offset the selected object(s).\n" "The point of reference is the middle of\n" @@ -17630,15 +17651,15 @@ msgstr "" "Punctul de referinţă este mijlocul formei înconjurătoare\n" "pentru toate obiectele selectate.\n" -#: flatcamTools/ToolTransform.py:269 flatcamTools/ToolTransform.py:274 +#: flatcamTools/ToolTransform.py:268 flatcamTools/ToolTransform.py:273 msgid "Flip the selected object(s) over the X axis." msgstr "Oglindește obiectele selectate pe axa X." -#: flatcamTools/ToolTransform.py:298 +#: flatcamTools/ToolTransform.py:297 msgid "Ref. Point" msgstr "Pt. Ref" -#: flatcamTools/ToolTransform.py:349 +#: flatcamTools/ToolTransform.py:348 msgid "" "Create the buffer effect on each geometry,\n" "element from the selected object, using the distance." @@ -17646,7 +17667,7 @@ msgstr "" "Creați efectul buffer pe fiecare geometrie,\n" "element din obiectul selectat, folosind distanta." -#: flatcamTools/ToolTransform.py:375 +#: flatcamTools/ToolTransform.py:374 msgid "" "Create the buffer effect on each geometry,\n" "element from the selected object, using the factor." @@ -17654,129 +17675,129 @@ msgstr "" "Creați efectul buffer pe fiecare geometrie,\n" "element din obiectul selectat, folosing un factor." -#: flatcamTools/ToolTransform.py:480 +#: flatcamTools/ToolTransform.py:479 msgid "Buffer D" msgstr "Bufer D" -#: flatcamTools/ToolTransform.py:481 +#: flatcamTools/ToolTransform.py:480 msgid "Buffer F" msgstr "Bufer F" -#: flatcamTools/ToolTransform.py:558 +#: flatcamTools/ToolTransform.py:557 msgid "Rotate transformation can not be done for a value of 0." msgstr "Transformarea Rotire nu se poate face pentru o valoare de 0." -#: flatcamTools/ToolTransform.py:597 flatcamTools/ToolTransform.py:620 +#: flatcamTools/ToolTransform.py:596 flatcamTools/ToolTransform.py:619 msgid "Scale transformation can not be done for a factor of 0 or 1." msgstr "Transformarea Scalare nu se poate face pentru un factor de 0 sau 1." -#: flatcamTools/ToolTransform.py:635 flatcamTools/ToolTransform.py:645 +#: flatcamTools/ToolTransform.py:634 flatcamTools/ToolTransform.py:644 msgid "Offset transformation can not be done for a value of 0." msgstr "Transformarea Deplasare nu se poate face pentru o valoare de 0." -#: flatcamTools/ToolTransform.py:677 +#: flatcamTools/ToolTransform.py:676 msgid "No object selected. Please Select an object to rotate!" msgstr "" "Nici-un obiect nu este selectat. Selectează un obiect pentru a fi Rotit!" -#: flatcamTools/ToolTransform.py:703 +#: flatcamTools/ToolTransform.py:702 msgid "CNCJob objects can't be rotated." msgstr "Obiectele tip CNCJob nu pot fi Rotite." -#: flatcamTools/ToolTransform.py:711 +#: flatcamTools/ToolTransform.py:710 msgid "Rotate done" msgstr "Rotaţie efectuată" -#: flatcamTools/ToolTransform.py:714 flatcamTools/ToolTransform.py:784 -#: flatcamTools/ToolTransform.py:834 flatcamTools/ToolTransform.py:890 -#: flatcamTools/ToolTransform.py:922 flatcamTools/ToolTransform.py:958 +#: flatcamTools/ToolTransform.py:713 flatcamTools/ToolTransform.py:783 +#: flatcamTools/ToolTransform.py:833 flatcamTools/ToolTransform.py:887 +#: flatcamTools/ToolTransform.py:917 flatcamTools/ToolTransform.py:953 msgid "Due of" msgstr "Datorită" -#: flatcamTools/ToolTransform.py:714 flatcamTools/ToolTransform.py:784 -#: flatcamTools/ToolTransform.py:834 flatcamTools/ToolTransform.py:890 -#: flatcamTools/ToolTransform.py:922 flatcamTools/ToolTransform.py:958 +#: flatcamTools/ToolTransform.py:713 flatcamTools/ToolTransform.py:783 +#: flatcamTools/ToolTransform.py:833 flatcamTools/ToolTransform.py:887 +#: flatcamTools/ToolTransform.py:917 flatcamTools/ToolTransform.py:953 msgid "action was not executed." msgstr "actiunea nu a fost efectuată." -#: flatcamTools/ToolTransform.py:726 +#: flatcamTools/ToolTransform.py:725 msgid "No object selected. Please Select an object to flip" msgstr "" "Nici-un obiect nu este selectat. Selectează un obiect pentru a fi Oglindit" -#: flatcamTools/ToolTransform.py:759 +#: flatcamTools/ToolTransform.py:758 msgid "CNCJob objects can't be mirrored/flipped." msgstr "Obiectele tip CNCJob nu pot fi Oglindite." -#: flatcamTools/ToolTransform.py:794 +#: flatcamTools/ToolTransform.py:793 msgid "Skew transformation can not be done for 0, 90 and 180 degrees." msgstr "Transformarea Inclinare nu se poate face la 0, 90 și 180 de grade." -#: flatcamTools/ToolTransform.py:799 +#: flatcamTools/ToolTransform.py:798 msgid "No object selected. Please Select an object to shear/skew!" msgstr "" "Nici-un obiect nu este selectat. Selectează un obiect pentru a fi Deformat!" -#: flatcamTools/ToolTransform.py:819 +#: flatcamTools/ToolTransform.py:818 msgid "CNCJob objects can't be skewed." msgstr "Obiectele tip CNCJob nu pot fi deformate." -#: flatcamTools/ToolTransform.py:831 +#: flatcamTools/ToolTransform.py:830 msgid "Skew on the" msgstr "Deformează pe" -#: flatcamTools/ToolTransform.py:831 flatcamTools/ToolTransform.py:887 -#: flatcamTools/ToolTransform.py:919 +#: flatcamTools/ToolTransform.py:830 flatcamTools/ToolTransform.py:884 +#: flatcamTools/ToolTransform.py:914 msgid "axis done" msgstr "axa efectuată" -#: flatcamTools/ToolTransform.py:846 +#: flatcamTools/ToolTransform.py:844 msgid "No object selected. Please Select an object to scale!" msgstr "" "Nici-un obiect nu este selectat. Selectează un obiect pentru a fi Scalat!" -#: flatcamTools/ToolTransform.py:877 +#: flatcamTools/ToolTransform.py:875 msgid "CNCJob objects can't be scaled." msgstr "Obiectele tip CNCJob nu pot fi scalate." -#: flatcamTools/ToolTransform.py:887 +#: flatcamTools/ToolTransform.py:884 msgid "Scale on the" msgstr "Scalează pe" -#: flatcamTools/ToolTransform.py:898 +#: flatcamTools/ToolTransform.py:894 msgid "No object selected. Please Select an object to offset!" msgstr "" "Nici-un obiect nu este selectat. Selectează un obiect pentru a fi Ofsetat!" -#: flatcamTools/ToolTransform.py:905 +#: flatcamTools/ToolTransform.py:901 msgid "CNCJob objects can't be offset." msgstr "Obiectele tip CNCJob nu pot fi deplasate." -#: flatcamTools/ToolTransform.py:919 +#: flatcamTools/ToolTransform.py:914 msgid "Offset on the" msgstr "Ofset pe" -#: flatcamTools/ToolTransform.py:929 +#: flatcamTools/ToolTransform.py:924 msgid "No object selected. Please Select an object to buffer!" msgstr "" "Nu a fost selectat niciun obiect. Vă rugăm să selectați un obiect de " "tamponat (buffer)" -#: flatcamTools/ToolTransform.py:932 +#: flatcamTools/ToolTransform.py:927 msgid "Applying Buffer" msgstr "Aplicarea tampon (Buffer)" -#: flatcamTools/ToolTransform.py:936 +#: flatcamTools/ToolTransform.py:931 msgid "CNCJob objects can't be buffered." msgstr "CNCJob objects can't be buffered (buffer)." -#: flatcamTools/ToolTransform.py:953 +#: flatcamTools/ToolTransform.py:948 msgid "Buffer done" msgstr "Buffer finalizat" -#: tclCommands/TclCommandBbox.py:76 tclCommands/TclCommandNregions.py:75 -msgid "Expected FlatCAMGerber or FlatCAMGeometry, got" -msgstr "Se astepta un obiect FlatCAMGerber sau FlatCAMGeometry, s-a primit" +#: tclCommands/TclCommandBbox.py:75 tclCommands/TclCommandNregions.py:74 +msgid "Expected GerberObject or GeometryObject, got" +msgstr "Se astepta un obiect GerberObject sau GeometryObject, s-a primit" #: tclCommands/TclCommandBounds.py:67 tclCommands/TclCommandBounds.py:71 msgid "Expected a list of objects names separated by comma. Got" @@ -17796,37 +17817,37 @@ msgstr "Nu s-a putut incărca obiectul" msgid "Expected either -box or -all." msgstr "Asteptăm -box sau -all." -#: tclCommands/TclCommandGeoCutout.py:148 +#: tclCommands/TclCommandGeoCutout.py:147 msgid "" "The name of the object for which cutout is done is missing. Add it and retry." msgstr "" "Numele obiectului pentru care se efectuează tăierea lipseste. Adaugă din nou " "și reîncearcă." -#: tclCommands/TclCommandGeoCutout.py:190 +#: tclCommands/TclCommandGeoCutout.py:189 msgid "Gaps value can be only one of: 'lr', 'tb', '2lr', '2tb', 4 or 8." msgstr "" "Valoarea spatiilor poate fi doar una dintre: „Niciuna”, „lr”, „tb”, „2lr”, " "„2tb”, 4 sau 8." -#: tclCommands/TclCommandGeoCutout.py:302 -#: tclCommands/TclCommandGeoCutout.py:360 +#: tclCommands/TclCommandGeoCutout.py:301 +#: tclCommands/TclCommandGeoCutout.py:359 msgid "Any-form Cutout operation finished." msgstr "Operatia de tăiere cu formă liberă s-a terminat." -#: tclCommands/TclCommandGeoCutout.py:366 +#: tclCommands/TclCommandGeoCutout.py:365 msgid "Cancelled. Object type is not supported." msgstr "Anulat. Tipul de obiect nu este acceptat." -#: tclCommands/TclCommandHelp.py:74 +#: tclCommands/TclCommandHelp.py:75 msgid "Available commands:" msgstr "Comenzi disponibile:" -#: tclCommands/TclCommandHelp.py:112 +#: tclCommands/TclCommandHelp.py:115 msgid "Type help for usage." msgstr "Introduceți help pentru utilizare." -#: tclCommands/TclCommandHelp.py:112 +#: tclCommands/TclCommandHelp.py:115 msgid "Example: help open_gerber" msgstr "Exemplu: help open_gerber" @@ -17872,6 +17893,17 @@ msgstr "" "Nici-un nume de Geometrie in argumente. Furnizați un nume și încercați din " "nou." +#~ msgid "e_fr_probe" +#~ msgstr "e_fr_probe" + +#~ msgid "" +#~ " Could not generate punched hole Gerber because the punch hole sizeis " +#~ "bigger than some of the apertures in the Gerber object." +#~ msgstr "" +#~ " Nu a putut genera un obiect Gerber cu găuri punctate, deoarece " +#~ "dimensiunea găurii de perforare este mai mare decât unele dintre " +#~ "aperturile din obiectul Gerber." + #~ msgid "Paint Tool. Normal painting all task started." #~ msgstr "Unealta Paint. Taskul de pictare a tuturor poligoanelor a inceput." @@ -18859,8 +18891,8 @@ msgstr "" #~ msgid "%s" #~ msgstr "%s" -#~ msgid "FlatCAMObj.FlatCAMGeometry.mtool_gen_cncjob() -->" -#~ msgstr "FlatCAMObj.FlatCAMGeometry.mtool_gen_cncjob() -->" +#~ msgid "FlatCAMObj.GeometryObject.mtool_gen_cncjob() -->" +#~ msgstr "FlatCAMObj.GeometryObject.mtool_gen_cncjob() -->" #~ msgid "FlatCAMCNNJob.on_edit_code_click() -->" #~ msgstr "FlatCAMCNNJob.on_edit_code_click() -->" @@ -19119,7 +19151,7 @@ msgstr "" #~ "jpcgt/flatcam/src/Beta / \">aici.
    DOWLOAD:aici.
    " -#~ msgid "Expected a FlatCAMGeometry, got %s" +#~ msgid "Expected a GeometryObject, got %s" #~ msgstr "Se astepta o Geometrie FlatCAM, s-a primit %s" #~ msgid "Saved to: %s" diff --git a/locale/ru/LC_MESSAGES/strings.po b/locale/ru/LC_MESSAGES/strings.po index e56f7930..e0d1361b 100644 --- a/locale/ru/LC_MESSAGES/strings.po +++ b/locale/ru/LC_MESSAGES/strings.po @@ -546,8 +546,8 @@ msgid "Failed. Select a Geometry Object and try again." msgstr "Неудалось. Выберите объект Geometry и попробуйте снова." #: FlatCAMApp.py:5652 FlatCAMApp.py:5688 -msgid "Expected a FlatCAMGeometry, got" -msgstr "Ожидается FlatCAMGeometry, получено" +msgid "Expected a GeometryObject, got" +msgstr "Ожидается GeometryObject, получено" #: FlatCAMApp.py:5665 msgid "A Geometry object was converted to MultiGeo type." @@ -1189,8 +1189,8 @@ msgid "Open TCL script cancelled." msgstr "Открытие сценария отменено." #: FlatCAMApp.py:9993 -msgid "Executing FlatCAMScript file." -msgstr "Выполнение файла FlatCAMScript." +msgid "Executing ScriptObject file." +msgstr "Выполнение файла ScriptObject." #: FlatCAMApp.py:10000 FlatCAMApp.py:10003 msgid "Run TCL script" @@ -16746,8 +16746,8 @@ msgid "Buffer done" msgstr "Буфер готов" #: tclCommands/TclCommandBbox.py:74 tclCommands/TclCommandNregions.py:73 -msgid "Expected FlatCAMGerber or FlatCAMGeometry, got" -msgstr "Ожидался FlatCAMGerber или FlatCAMGeometry, получено" +msgid "Expected GerberObject or GeometryObject, got" +msgstr "Ожидался GerberObject или GeometryObject, получено" #: tclCommands/TclCommandBounds.py:64 tclCommands/TclCommandBounds.py:68 msgid "Expected a list of objects names separated by comma. Got" @@ -17431,8 +17431,8 @@ msgstr "Нет имени геометрии в аргументах. Укажи #~ msgid "%s" #~ msgstr "%s" -#~ msgid "FlatCAMObj.FlatCAMGeometry.mtool_gen_cncjob() -->" -#~ msgstr "FlatCAMObj.FlatCAMGeometry.mtool_gen_cncjob() -->" +#~ msgid "FlatCAMObj.GeometryObject.mtool_gen_cncjob() -->" +#~ msgstr "FlatCAMObj.GeometryObject.mtool_gen_cncjob() -->" #~ msgid "FlatCAMCNNJob.on_edit_code_click() -->" #~ msgstr "FlatCAMCNNJob.on_edit_code_click() -->" @@ -17603,8 +17603,8 @@ msgstr "Нет имени геометрии в аргументах. Укажи #~ "a>
    ЗАГРУЗИТЬ можно отсюда.
    " -#~ msgid "Expected a FlatCAMGeometry, got %s" -#~ msgstr "Ожидается FlatCAMGeometry, получено %s" +#~ msgid "Expected a GeometryObject, got %s" +#~ msgstr "Ожидается GeometryObject, получено %s" #~ msgid "Saved to: %s" #~ msgstr "Сохранёно в: %s" diff --git a/locale_template/strings.pot b/locale_template/strings.pot index 0856f258..3273c40b 100644 --- a/locale_template/strings.pot +++ b/locale_template/strings.pot @@ -498,7 +498,7 @@ msgid "Failed. Select a Geometry Object and try again." msgstr "" #: FlatCAMApp.py:5765 FlatCAMApp.py:5801 -msgid "Expected a FlatCAMGeometry, got" +msgid "Expected a GeometryObject, got" msgstr "" #: FlatCAMApp.py:5778 @@ -1056,7 +1056,7 @@ msgid "Open TCL script" msgstr "" #: FlatCAMApp.py:10373 -msgid "Executing FlatCAMScript file." +msgid "Executing ScriptObject file." msgstr "" #: FlatCAMApp.py:10381 FlatCAMApp.py:10384 @@ -15065,7 +15065,7 @@ msgid "Buffer done" msgstr "" #: tclCommands/TclCommandBbox.py:76 tclCommands/TclCommandNregions.py:75 -msgid "Expected FlatCAMGerber or FlatCAMGeometry, got" +msgid "Expected GerberObject or GeometryObject, got" msgstr "" #: tclCommands/TclCommandBounds.py:67 tclCommands/TclCommandBounds.py:71 diff --git a/requirements.txt b/requirements.txt index 89cda8e4..15cffc72 100644 --- a/requirements.txt +++ b/requirements.txt @@ -18,7 +18,7 @@ vispy ortools>=7.0 svg.path simplejson -shapely>=1.3 +shapely>=1.7.0 freetype-py fontTools rasterio diff --git a/tclCommands/TclCommand.py b/tclCommands/TclCommand.py index 45378180..ed2d0260 100644 --- a/tclCommands/TclCommand.py +++ b/tclCommands/TclCommand.py @@ -71,7 +71,7 @@ class TclCommand(object): :return: none """ - self.app.raise_tcl_error(text) + self.app.shell.raise_tcl_error(text) def get_current_command(self): """ @@ -275,7 +275,7 @@ class TclCommand(object): # because of signaling we cannot call error to TCL from here but when task # is finished also non-signaled are handled here to better exception # handling and displayed after command is finished - raise self.app.TclErrorException(text) + raise self.app.shell.TclErrorException(text) def execute_wrapper(self, *args): """ @@ -296,7 +296,7 @@ class TclCommand(object): except Exception as unknown: error_info = sys.exc_info() self.log.error("TCL command '%s' failed. Error text: %s" % (str(self), str(unknown))) - self.app.display_tcl_error(unknown, error_info) + self.app.shell.display_tcl_error(unknown, error_info) self.raise_tcl_unknown_error(unknown) @abc.abstractmethod @@ -400,9 +400,9 @@ class TclCommandSignaled(TclCommand): raise ex[0] if status['timed_out']: - self.app.raise_tcl_unknown_error("Operation timed outed! Consider increasing option " - "'-timeout ' for command or " - "'set_sys global_background_timeout '.") + self.app.shell.raise_tcl_unknown_error("Operation timed outed! Consider increasing option " + "'-timeout ' for command or " + "'set_sys global_background_timeout '.") try: self.log.debug("TCL command '%s' executed." % str(type(self).__name__)) @@ -439,5 +439,5 @@ class TclCommandSignaled(TclCommand): else: error_info = sys.exc_info() self.log.error("TCL command '%s' failed." % str(self)) - self.app.display_tcl_error(unknown, error_info) + self.app.shell.display_tcl_error(unknown, error_info) self.raise_tcl_unknown_error(unknown) diff --git a/tclCommands/TclCommandAlignDrill.py b/tclCommands/TclCommandAlignDrill.py index 8ed877eb..ebf2099d 100644 --- a/tclCommands/TclCommandAlignDrill.py +++ b/tclCommands/TclCommandAlignDrill.py @@ -1,6 +1,5 @@ import collections from tclCommands.TclCommand import TclCommandSignaled -from FlatCAMObj import FlatCAMGeometry, FlatCAMGerber, FlatCAMExcellon from shapely.geometry import Point import shapely.affinity as affinity @@ -89,9 +88,7 @@ class TclCommandAlignDrill(TclCommandSignaled): if obj is None: return "Object not found: %s" % name - if not isinstance(obj, FlatCAMGeometry) and \ - not isinstance(obj, FlatCAMGerber) and \ - not isinstance(obj, FlatCAMExcellon): + if obj.kind != "geometry" and obj.kind != 'gerber' and obj.kind != 'excellon': return "ERROR: Only Gerber, Geometry and Excellon objects can be used." # Axis diff --git a/tclCommands/TclCommandBbox.py b/tclCommands/TclCommandBbox.py index ada78b4f..6cf0d097 100644 --- a/tclCommands/TclCommandBbox.py +++ b/tclCommands/TclCommandBbox.py @@ -1,6 +1,5 @@ import collections from tclCommands.TclCommand import TclCommand -from FlatCAMObj import FlatCAMGeometry, FlatCAMGerber from shapely.ops import cascaded_union @@ -73,7 +72,7 @@ class TclCommandBbox(TclCommand): if not isinstance(obj, FlatCAMGerber) and not isinstance(obj, FlatCAMGeometry): self.raise_tcl_error('%s %s: %s.' % ( - _("Expected FlatCAMGerber or FlatCAMGeometry, got"), name, type(obj))) + _("Expected GerberObject or GeometryObject, got"), name, type(obj))) if 'margin' not in args: args['margin'] = float(self.app.defaults["gerber_bboxmargin"]) @@ -92,7 +91,7 @@ class TclCommandBbox(TclCommand): try: def geo_init(geo_obj, app_obj): - assert isinstance(geo_obj, FlatCAMGeometry) + # assert geo_obj.kind == 'geometry' # Bounding box with rounded corners geo = cascaded_union(obj.solid_geometry) diff --git a/tclCommands/TclCommandCncjob.py b/tclCommands/TclCommandCncjob.py index 0c897654..5ea51c65 100644 --- a/tclCommands/TclCommandCncjob.py +++ b/tclCommands/TclCommandCncjob.py @@ -1,5 +1,4 @@ from tclCommands.TclCommand import TclCommandSignaled -from FlatCAMObj import FlatCAMGeometry import collections from copy import deepcopy @@ -119,9 +118,9 @@ class TclCommandCncjob(TclCommandSignaled): else: return "fail" - if not isinstance(obj, FlatCAMGeometry): + if obj.kind != 'geometry': if muted is False: - self.raise_tcl_error('Expected FlatCAMGeometry, got %s %s.' % (str(name), type(obj))) + self.raise_tcl_error('Expected GeometryObject, got %s %s.' % (str(name), type(obj))) else: return diff --git a/tclCommands/TclCommandDrillcncjob.py b/tclCommands/TclCommandDrillcncjob.py index fb114e1e..1c152bcc 100644 --- a/tclCommands/TclCommandDrillcncjob.py +++ b/tclCommands/TclCommandDrillcncjob.py @@ -1,5 +1,4 @@ from tclCommands.TclCommand import TclCommandSignaled -from FlatCAMObj import FlatCAMExcellon import collections import math @@ -125,9 +124,9 @@ class TclCommandDrillcncjob(TclCommandSignaled): else: return "fail" - if not isinstance(obj, FlatCAMExcellon): + if obj.kind != 'excellon': if muted is False: - self.raise_tcl_error('Expected FlatCAMExcellon, got %s %s.' % (name, type(obj))) + self.raise_tcl_error('Expected ExcellonObject, got %s %s.' % (name, type(obj))) else: return "fail" diff --git a/tclCommands/TclCommandFollow.py b/tclCommands/TclCommandFollow.py index e4e13359..f0f95904 100644 --- a/tclCommands/TclCommandFollow.py +++ b/tclCommands/TclCommandFollow.py @@ -1,5 +1,4 @@ from tclCommands.TclCommand import TclCommandSignaled -from FlatCAMObj import FlatCAMGerber import collections @@ -56,8 +55,8 @@ class TclCommandFollow(TclCommandSignaled): if obj is None: self.raise_tcl_error("Object not found: %s" % name) - if not isinstance(obj, FlatCAMGerber): - self.raise_tcl_error('Expected FlatCAMGerber, got %s %s.' % (name, type(obj))) + if obj.kind != 'gerber': + self.raise_tcl_error('Expected GerberObject, got %s %s.' % (name, type(obj))) del args['name'] try: diff --git a/tclCommands/TclCommandGeoCutout.py b/tclCommands/TclCommandGeoCutout.py index 7081be2c..bef600c1 100644 --- a/tclCommands/TclCommandGeoCutout.py +++ b/tclCommands/TclCommandGeoCutout.py @@ -1,5 +1,4 @@ from tclCommands.TclCommand import TclCommandSignaled -from FlatCAMObj import FlatCAMGerber, FlatCAMGeometry import logging import collections @@ -209,7 +208,7 @@ class TclCommandGeoCutout(TclCommandSignaled): except ValueError: gaps_u = gaps - if isinstance(cutout_obj, FlatCAMGeometry): + if cutout_obj.kind == 'geometry': # rename the obj name so it can be identified as cutout # cutout_obj.options["name"] += "_cutout" @@ -306,7 +305,7 @@ class TclCommandGeoCutout(TclCommandSignaled): # cutout_obj.plot() # self.app.inform.emit("[success] Any-form Cutout operation finished.") # self.app.plots_updated.emit() - elif isinstance(cutout_obj, FlatCAMGerber): + elif cutout_obj.kind == 'gerber': def geo_init(geo_obj, app_obj): try: diff --git a/tclCommands/TclCommandHelp.py b/tclCommands/TclCommandHelp.py index 35348be0..a5688381 100644 --- a/tclCommands/TclCommandHelp.py +++ b/tclCommands/TclCommandHelp.py @@ -65,10 +65,11 @@ class TclCommandHelp(TclCommand): if 'name' in args: name = args['name'] - if name not in self.app.tcl_commands_storage: + if name not in self.app.shell.tcl_commands_storage: return "Unknown command: %s" % name - self.app.shell.append_output(self.app.tcl_commands_storage[name]["help"]) + help_for_command = self.app.shell.tcl_commands_storage[name]["help"] + '\n\n' + self.app.shell.append_output(help_for_command) else: if not args: cmd_enum = '%s\n' % _("Available commands:") @@ -77,19 +78,21 @@ class TclCommandHelp(TclCommand): try: # find the maximum length of a command name max_len = 0 - for cmd_name in self.app.tcl_commands_storage: + for cmd_name in self.app.shell.tcl_commands_storage: curr_len = len(cmd_name) if curr_len > max_len: max_len = curr_len h_space = " " cnt = 0 - for cmd_name in sorted(self.app.tcl_commands_storage): - cmd_description = "%s" % self.app.tcl_commands_storage[cmd_name]['description'] + for cmd_name in sorted(self.app.shell.tcl_commands_storage): + cmd_description = "%s" % \ + self.app.shell.tcl_commands_storage[cmd_name]['description'] curr_len = len(cmd_name) - cmd_name_colored = "%s" % str(cmd_name) + cmd_name_colored = "> %s" % \ + str(cmd_name) nr_chars = max_len - curr_len @@ -104,11 +107,11 @@ class TclCommandHelp(TclCommand): else: cnt += 1 except Exception as err: - self.app.log.debug("App.setup_shell.shelp() when run as 'help' --> %s" % str(err)) - displayed_text = ['> %s\n' % cmd for cmd in sorted(self.app.tcl_commands_storage)] + self.app.log.debug("tclCommands.TclCommandHelp() when run as 'help' --> %s" % str(err)) + displayed_text = ['> %s' % cmd for cmd in sorted(self.app.shell.tcl_commands_storage)] cmd_enum += '
    '.join(displayed_text) - cmd_enum += '

    %s
    %s
    ' % ( + cmd_enum += '

    %s
    %s

    ' % ( _("Type help for usage."), _("Example: help open_gerber")) self.app.shell.append_raw(cmd_enum) diff --git a/tclCommands/TclCommandIsolate.py b/tclCommands/TclCommandIsolate.py index 9c1b874e..0d46d2f4 100644 --- a/tclCommands/TclCommandIsolate.py +++ b/tclCommands/TclCommandIsolate.py @@ -1,5 +1,4 @@ from tclCommands.TclCommand import TclCommandSignaled -from FlatCAMObj import FlatCAMGerber import collections @@ -96,8 +95,8 @@ class TclCommandIsolate(TclCommandSignaled): if obj is None: self.raise_tcl_error("Object not found: %s" % name) - if not isinstance(obj, FlatCAMGerber): - self.raise_tcl_error('Expected FlatCAMGerber, got %s %s.' % (name, type(obj))) + if obj.kind != 'gerber': + self.raise_tcl_error('Expected GerberObject, got %s %s.' % (name, type(obj))) del args['name'] obj.isolate(plot=False, **args) diff --git a/tclCommands/TclCommandJoinExcellon.py b/tclCommands/TclCommandJoinExcellon.py index efea9e7d..b2b0d633 100644 --- a/tclCommands/TclCommandJoinExcellon.py +++ b/tclCommands/TclCommandJoinExcellon.py @@ -1,5 +1,5 @@ from tclCommands.TclCommand import TclCommand -from FlatCAMObj import FlatCAMExcellon +from flatcamObjects.FlatCAMExcellon import ExcellonObject import collections @@ -62,7 +62,7 @@ class TclCommandJoinExcellon(TclCommand): objs.append(obj) def initialize(obj_, app): - FlatCAMExcellon.merge(self, objs, obj_) + ExcellonObject.merge(self, objs, obj_) if objs and len(objs) >= 2: self.app.new_object("excellon", outname, initialize, plot=False) diff --git a/tclCommands/TclCommandJoinGeometry.py b/tclCommands/TclCommandJoinGeometry.py index 25dcc26d..2e9f1527 100644 --- a/tclCommands/TclCommandJoinGeometry.py +++ b/tclCommands/TclCommandJoinGeometry.py @@ -1,5 +1,5 @@ from tclCommands.TclCommand import TclCommand -from FlatCAMObj import FlatCAMGeometry +from flatcamObjects.FlatCAMGeometry import GeometryObject import collections @@ -62,7 +62,7 @@ class TclCommandJoinGeometry(TclCommand): objs.append(obj) def initialize(obj_, app): - FlatCAMGeometry.merge(self, objs, obj_) + GeometryObject.merge(self, objs, obj_) if objs and len(objs) >= 2: self.app.new_object("geometry", outname, initialize, plot=False) diff --git a/tclCommands/TclCommandMillDrills.py b/tclCommands/TclCommandMillDrills.py index c68117f1..9e45d7a0 100644 --- a/tclCommands/TclCommandMillDrills.py +++ b/tclCommands/TclCommandMillDrills.py @@ -6,7 +6,6 @@ # ########################################################## from tclCommands.TclCommand import TclCommandSignaled -from FlatCAMObj import FlatCAMExcellon import math import collections @@ -138,7 +137,7 @@ class TclCommandMillDrills(TclCommandSignaled): except Exception as e: self.raise_tcl_error("Bad tools: %s" % str(e)) - if not isinstance(obj, FlatCAMExcellon): + if obj.kind != 'excellon': self.raise_tcl_error('Only Excellon objects can be mill-drilled, got %s %s.' % (name, type(obj))) if self.app.collection.has_promises(): diff --git a/tclCommands/TclCommandMillSlots.py b/tclCommands/TclCommandMillSlots.py index 74c06659..7580a828 100644 --- a/tclCommands/TclCommandMillSlots.py +++ b/tclCommands/TclCommandMillSlots.py @@ -6,7 +6,6 @@ # ########################################################## from tclCommands.TclCommand import TclCommandSignaled -from FlatCAMObj import FlatCAMExcellon import collections import math @@ -139,7 +138,7 @@ class TclCommandMillSlots(TclCommandSignaled): except Exception as e: self.raise_tcl_error("Bad tools: %s" % str(e)) - if not isinstance(obj, FlatCAMExcellon): + if obj.kind != 'excellon': self.raise_tcl_error('Only Excellon objects can have mill-slots, got %s %s.' % (name, type(obj))) if self.app.collection.has_promises(): diff --git a/tclCommands/TclCommandMirror.py b/tclCommands/TclCommandMirror.py index 5d4425ab..8df9e7b2 100644 --- a/tclCommands/TclCommandMirror.py +++ b/tclCommands/TclCommandMirror.py @@ -1,5 +1,4 @@ from tclCommands.TclCommand import TclCommandSignaled -from FlatCAMObj import FlatCAMExcellon, FlatCAMGeometry, FlatCAMGerber import collections @@ -68,9 +67,7 @@ class TclCommandMirror(TclCommandSignaled): if obj is None: return "Object not found: %s" % name - if not isinstance(obj, FlatCAMGerber) and \ - not isinstance(obj, FlatCAMExcellon) and \ - not isinstance(obj, FlatCAMGeometry): + if obj.kind != 'gerber' and obj.kind != 'geometry' and obj.kind != 'excellon': return "ERROR: Only Gerber, Excellon and Geometry objects can be mirrored." # Axis diff --git a/tclCommands/TclCommandNregions.py b/tclCommands/TclCommandNregions.py index 871db83c..f7aec69d 100644 --- a/tclCommands/TclCommandNregions.py +++ b/tclCommands/TclCommandNregions.py @@ -1,5 +1,4 @@ from tclCommands.TclCommand import TclCommand -from FlatCAMObj import FlatCAMGeometry, FlatCAMGerber from shapely.ops import cascaded_union @@ -71,8 +70,8 @@ class TclCommandNregions(TclCommand): if obj is None: self.raise_tcl_error("%s: %s" % (_("Object not found"), name)) - if not isinstance(obj, FlatCAMGerber) and not isinstance(obj, FlatCAMGeometry): - self.raise_tcl_error('%s %s: %s.' % (_("Expected FlatCAMGerber or FlatCAMGeometry, got"), name, type(obj))) + if obj.kind != 'gerber' and obj.kind != 'geometry': + self.raise_tcl_error('%s %s: %s.' % (_("Expected GerberObject or GeometryObject, got"), name, type(obj))) if 'margin' not in args: args['margin'] = float(self.app.defaults["gerber_noncoppermargin"]) @@ -91,7 +90,7 @@ class TclCommandNregions(TclCommand): try: def geo_init(geo_obj, app_obj): - assert isinstance(geo_obj, FlatCAMGeometry) + assert geo_obj.kind == 'geometry' geo = cascaded_union(obj.solid_geometry) bounding_box = geo.envelope.buffer(float(margin)) diff --git a/tclCommands/TclCommandOpenGerber.py b/tclCommands/TclCommandOpenGerber.py index c473d0de..4dfbfc0c 100644 --- a/tclCommands/TclCommandOpenGerber.py +++ b/tclCommands/TclCommandOpenGerber.py @@ -1,6 +1,5 @@ from tclCommands.TclCommand import TclCommandSignaled from camlib import ParseError -from FlatCAMObj import FlatCAMGerber import collections @@ -53,8 +52,8 @@ class TclCommandOpenGerber(TclCommandSignaled): # How the object should be initialized def obj_init(gerber_obj, app_obj): - if not isinstance(gerber_obj, FlatCAMGerber): - self.raise_tcl_error('Expected FlatCAMGerber, got %s %s.' % (outname, type(gerber_obj))) + if gerber_obj.kind != 'gerber': + self.raise_tcl_error('Expected GerberObject, got %s %s.' % (outname, type(gerber_obj))) # Opening the file happens here try: diff --git a/tclCommands/TclCommandPanelize.py b/tclCommands/TclCommandPanelize.py index 142c1512..99fd0bc5 100644 --- a/tclCommands/TclCommandPanelize.py +++ b/tclCommands/TclCommandPanelize.py @@ -1,5 +1,4 @@ from tclCommands.TclCommand import TclCommand -from FlatCAMObj import FlatCAMGeometry, FlatCAMExcellon import shapely.affinity as affinity @@ -153,12 +152,12 @@ class TclCommandPanelize(TclCommand): # objs.append(obj_init) # # def initialize_geometry(obj_init, app): - # FlatCAMGeometry.merge(objs, obj_init) + # GeometryObject.merge(objs, obj_init) # # def initialize_excellon(obj_init, app): # # merge expects tools to exist in the target object # obj_init.tools = obj.tools.copy() - # FlatCAMExcellon.merge(objs, obj_init) + # ExcellonObject.merge(objs, obj_init) # # objs = [] # if obj is not None: @@ -167,7 +166,7 @@ class TclCommandPanelize(TclCommand): # currentx = 0 # for col in range(columns): # local_outname = outname + ".tmp." + str(col) + "." + str(row) - # if isinstance(obj, FlatCAMExcellon): + # if isinstance(obj, ExcellonObject): # self.app.new_object("excellon", local_outname, initialize_local_excellon, plot=False, # autoselected=False) # else: @@ -177,7 +176,7 @@ class TclCommandPanelize(TclCommand): # currentx += lenghtx # currenty += lenghty # - # if isinstance(obj, FlatCAMExcellon): + # if isinstance(obj, ExcellonObject): # self.app.new_object("excellon", outname, initialize_excellon) # else: # self.app.new_object("geometry", outname, initialize_geometry) @@ -258,7 +257,7 @@ class TclCommandPanelize(TclCommand): obj_fin.solid_geometry = [] - if isinstance(obj, FlatCAMGeometry): + if obj.kind == 'geometry': obj_fin.multigeo = obj.multigeo obj_fin.tools = deepcopy(obj.tools) if obj.multigeo is True: @@ -269,7 +268,7 @@ class TclCommandPanelize(TclCommand): currentx = 0.0 for col in range(columns): - if isinstance(obj, FlatCAMGeometry): + if obj.kind == 'geometry': if obj.multigeo is True: for tool in obj.tools: obj_fin.tools[tool]['solid_geometry'].append(translate_recursion( @@ -287,7 +286,7 @@ class TclCommandPanelize(TclCommand): currentx += lenghtx currenty += lenghty - if isinstance(obj, FlatCAMExcellon): + if obj.kind == 'excellon': self.app.new_object("excellon", outname, job_init_excellon, plot=False, autoselected=True) else: self.app.new_object("geometry", outname, job_init_geometry, plot=False, autoselected=True)