From 88dc9aa702ffde886cf76969d403f16083c2e6df Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Mon, 4 May 2020 18:28:45 +0300 Subject: [PATCH 01/99] - in detachable tabs, Linux loose the reference of the detached tab and on close of the detachable tabs will gave a 'segmantation fault' error. Solved it by not deleting the reference in case of Unix-like systems - some strigns added to translation strings --- CHANGELOG.md | 5 +++++ FlatCAMApp.py | 4 +++- flatcamGUI/FlatCAMGUI.py | 11 ++++++++--- flatcamGUI/GUIElements.py | 24 ++++++++++++++++++++---- 4 files changed, 36 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 17a2795b..a1cab36b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,11 @@ CHANGELOG for FlatCAM beta ================================================= +4.05.2020 + +- in detachable tabs, Linux loose the reference of the detached tab and on close of the detachable tabs will gave a 'segmantation fault' error. Solved it by not deleting the reference in case of Unix-like systems +- some strigns added to translation strings + 3.05.2020 - small changes to allow making the x86 installer that is made from a Python 3.5 run FlatCAM beta diff --git a/FlatCAMApp.py b/FlatCAMApp.py index 274752a9..63582adc 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -3251,7 +3251,7 @@ class App(QtCore.QObject): self.prog_grid_lay.addWidget(QtWidgets.QLabel('%s' % _("E-mail")), 0, 2) self.prog_grid_lay.addWidget(QtWidgets.QLabel('%s' % "Juan Pablo Caram"), 1, 0) - self.prog_grid_lay.addWidget(QtWidgets.QLabel('%s' % "Program Author"), 1, 1) + self.prog_grid_lay.addWidget(QtWidgets.QLabel('%s' % _("Program Author")), 1, 1) self.prog_grid_lay.addWidget(QtWidgets.QLabel('%s' % "<>"), 1, 2) self.prog_grid_lay.addWidget(QtWidgets.QLabel('%s' % "Denis Hayrullin"), 2, 0) self.prog_grid_lay.addWidget(QtWidgets.QLabel('%s' % "Kamil Sopko"), 3, 0) @@ -3604,6 +3604,7 @@ class App(QtCore.QObject): # quit app by signalling for self.kill_app() method # self.close_app_signal.emit() QtWidgets.qApp.quit() + # QtCore.QCoreApplication.exit() # When the main event loop is not started yet in which case the qApp.quit() will do nothing # we use the following command @@ -3612,6 +3613,7 @@ class App(QtCore.QObject): sys.exit(0) else: os._exit(0) # fix to work with Python 3.8 + @staticmethod def kill_app(): diff --git a/flatcamGUI/FlatCAMGUI.py b/flatcamGUI/FlatCAMGUI.py index b6d20c35..09d7383b 100644 --- a/flatcamGUI/FlatCAMGUI.py +++ b/flatcamGUI/FlatCAMGUI.py @@ -767,7 +767,7 @@ class FlatCAMGUI(QtWidgets.QMainWindow): self.setCentralWidget(self.splitter) # self.notebook = QtWidgets.QTabWidget() - self.notebook = FCDetachableTab(protect=True) + self.notebook = FCDetachableTab(protect=True, parent=self) self.notebook.setTabsClosable(False) self.notebook.useOldIndex(True) @@ -1174,7 +1174,7 @@ class FlatCAMGUI(QtWidgets.QMainWindow): # ######################################################################## # ########################## PLOT AREA Tab # ############################# # ######################################################################## - self.plot_tab_area = FCDetachableTab2(protect=False, protect_by_name=[_('Plot Area')]) + self.plot_tab_area = FCDetachableTab2(protect=False, protect_by_name=[_('Plot Area')], parent=self) self.plot_tab_area.useOldIndex(True) self.right_lay.addWidget(self.plot_tab_area) @@ -1372,7 +1372,7 @@ class FlatCAMGUI(QtWidgets.QMainWindow): self.sh_tab_layout.addLayout(self.sh_hlay) self.app_sh_msg = ( - '''General Shortcut list
+ '''%s
@@ -1716,6 +1716,7 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
''' % ( + _("General Shortcut list"), _("SHOW SHORTCUT LIST"), _("Switch to Project Tab"), _("Switch to Selected Tab"), _("Switch to Tool Tab"), _("New Gerber"), _("Edit Object (if selected)"), _("Grid On/Off"), _("Jump to Coordinates"), @@ -2446,6 +2447,10 @@ class FlatCAMGUI(QtWidgets.QMainWindow): self.grid_snap_btn.triggered.connect(self.on_grid_snap_triggered) self.snap_infobar_label.clicked.connect(self.on_grid_icon_snap_clicked) + # to be used in the future + # self.plot_tab_area.tab_attached.connect(lambda x: print(x)) + # self.plot_tab_area.tab_detached.connect(lambda x: print(x)) + # %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% # %%%%%%%%%%%%%%%%% GUI Building FINISHED %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% # %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/flatcamGUI/GUIElements.py b/flatcamGUI/GUIElements.py index 4771c5e6..78cc8d1a 100644 --- a/flatcamGUI/GUIElements.py +++ b/flatcamGUI/GUIElements.py @@ -20,6 +20,7 @@ from copy import copy import re import logging import html +import sys import gettext import FlatCAMTranslation as fcTranslate @@ -1480,9 +1481,11 @@ class FCDetachableTab(QtWidgets.QTabWidget): From here: https://stackoverflow.com/questions/47267195/in-pyqt4-is-it-possible-to-detach-tabs-from-a-qtabwidget """ + tab_detached = QtCore.pyqtSignal(str) + tab_attached = QtCore.pyqtSignal(str) def __init__(self, protect=None, protect_by_name=None, parent=None): - super().__init__() + super().__init__(parent=parent) self.tabBar = self.FCTabBar(self) self.tabBar.onMoveTabSignal.connect(self.moveTab) @@ -1619,7 +1622,7 @@ class FCDetachableTab(QtWidgets.QTabWidget): self.insertTab(toIndex, widget, icon, text) self.setCurrentIndex(toIndex) - @pyqtSlot(int, QtCore.QPoint) + # @pyqtSlot(int, QtCore.QPoint) def detachTab(self, index, point): """ Detach the tab by removing it's contents and placing them in @@ -1656,6 +1659,8 @@ class FCDetachableTab(QtWidgets.QTabWidget): # Create a reference to maintain access to the detached tab self.detachedTabs[name] = detachedTab + self.tab_detached.emit(name) + def attachTab(self, contentWidget, name, icon, insertAt=None): """ Re-attach the tab by removing the content from the DetachedTab window, @@ -1668,11 +1673,11 @@ class FCDetachableTab(QtWidgets.QTabWidget): :return: """ + old_name = name + # Make the content widget a child of this widget contentWidget.setParent(self) - # Remove the reference - del self.detachedTabs[name] # make sure that we strip the 'FlatCAM' part of the detached name otherwise the tab name will be too long name = name.partition(' ')[2] @@ -1712,6 +1717,9 @@ class FCDetachableTab(QtWidgets.QTabWidget): else: index = self.insertTab(insert_index, contentWidget, icon, name) + obj_name = contentWidget.objectName() + self.tab_attached.emit(obj_name) + # on reattaching the tab if protect is true then the closure button is not added if self.protect_tab is True: self.protectTab(index) @@ -1727,6 +1735,14 @@ class FCDetachableTab(QtWidgets.QTabWidget): if index > -1: self.setCurrentIndex(insert_index) if self.use_old_index else self.setCurrentIndex(index) + # Remove the reference + # Unix-like OS's crash with segmentation fault after this. FOr whatever reason, they loose reference + if sys.platform == 'win32': + try: + del self.detachedTabs[old_name] + except KeyError: + pass + def removeTabByName(self, name): """ Remove the tab with the given name, even if it is detached From 33f4b42ea30e81fbf4db75d865ce2f027757db89 Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Mon, 4 May 2020 21:26:32 +0300 Subject: [PATCH 02/99] - string with e-mail address changed on e-mail owner request --- FlatCAMApp.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FlatCAMApp.py b/FlatCAMApp.py index 63582adc..dc26b5de 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -3347,7 +3347,7 @@ class App(QtCore.QObject): self.translator_grid_lay.addWidget(QtWidgets.QLabel('%s' % "Italian"), 4, 0) self.translator_grid_lay.addWidget(QtWidgets.QLabel('%s' % "Golfetto Massimiliano"), 4, 1) self.translator_grid_lay.addWidget(QtWidgets.QLabel('%s' % " "), 4, 2) - self.translator_grid_lay.addWidget(QtWidgets.QLabel('%s' % "pcb@golfetto.eu"), 4, 3) + self.translator_grid_lay.addWidget(QtWidgets.QLabel('%s' % ""), 4, 3) self.translator_grid_lay.addWidget(QtWidgets.QLabel('%s' % "German"), 5, 0) self.translator_grid_lay.addWidget(QtWidgets.QLabel('%s' % "Marius Stanciu (Google-Tr)"), 5, 1) From ed105eecad66b4f7a8ac5488f4cd31d4cf4e3226 Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Tue, 5 May 2020 01:39:01 +0300 Subject: [PATCH 03/99] - fixed an issue that made the preprocessors comboxes in Preferences not to load and display the saved value fro the file - some PEP8 corrections --- CHANGELOG.md | 7 +- FlatCAMApp.py | 90 +++++++++---------- camlib.py | 138 ++++++++++++++++-------------- flatcamGUI/GUIElements.py | 3 +- flatcamObjects/FlatCAMExcellon.py | 1 + 5 files changed, 129 insertions(+), 110 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a1cab36b..d6fc2717 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,10 +7,15 @@ CHANGELOG for FlatCAM beta ================================================= +5.05.2020 + +- fixed an issue that made the preprocessors comboxes in Preferences not to load and display the saved value fro the file +- some PEP8 corrections + 4.05.2020 - in detachable tabs, Linux loose the reference of the detached tab and on close of the detachable tabs will gave a 'segmantation fault' error. Solved it by not deleting the reference in case of Unix-like systems -- some strigns added to translation strings +- some strings added to translation strings 3.05.2020 diff --git a/FlatCAMApp.py b/FlatCAMApp.py index dc26b5de..923a599e 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -543,52 +543,15 @@ class App(QtCore.QObject): self.save_project_auto_update() self.autosave_timer.timeout.connect(self.save_project_auto) - # ########################################################################################################### - # ##################################### UPDATE PREFERENCES GUI FORMS ######################################## - # ########################################################################################################### - - self.preferencesUiManager = PreferencesUIManager(defaults=self.defaults, data_path=self.data_path, ui=self.ui, - inform=self.inform) - self.preferencesUiManager.defaults_write_form() - - # When the self.defaults dictionary changes will update the Preferences GUI forms - self.defaults.set_change_callback(self.on_defaults_dict_change) - - # ########################################################################################################### - # ##################################### FIRST RUN SECTION ################################################### - # ################################ It's done only once after install ##################################### - # ########################################################################################################### - - if self.defaults["first_run"] is True: - - # ONLY AT FIRST STARTUP INIT THE GUI LAYOUT TO 'COMPACT' - initial_lay = 'minimal' - self.ui.general_defaults_form.general_gui_group.on_layout(lay=initial_lay) - - # Set the combobox in Preferences to the current layout - idx = self.ui.general_defaults_form.general_gui_group.layout_combo.findText(initial_lay) - self.ui.general_defaults_form.general_gui_group.layout_combo.setCurrentIndex(idx) - - # after the first run, this object should be False - self.defaults["first_run"] = False - self.preferencesUiManager.save_defaults(silent=True) - - # ########################################################################################################### - # ############################################ Data ######################################################### - # ########################################################################################################### - - self.recent = [] - self.recent_projects = [] - - self.clipboard = QtWidgets.QApplication.clipboard() - - self.project_filename = None - self.toggle_units_ignore = False - # ########################################################################################################### # #################################### LOAD PREPROCESSORS ################################################### # ########################################################################################################### + # ----------------------------------------- WARNING -------------------------------------------------------- + # Preprocessors need to be loaded before the Preferences Manager builds the Preferences + # That's because the number of preprocessors can vary and here the comboboxes are populated + # ----------------------------------------------------------------------------------------------------------- + # a dictionary that have as keys the name of the preprocessor files and the value is the class from # the preprocessor file self.preprocessors = load_preprocessors(self) @@ -621,6 +584,46 @@ class App(QtCore.QObject): self.ui.excellon_defaults_form.excellon_opt_group.pp_excellon_name_cb.addItem(name) + # ########################################################################################################### + # ##################################### UPDATE PREFERENCES GUI FORMS ######################################## + # ########################################################################################################### + + self.preferencesUiManager = PreferencesUIManager(defaults=self.defaults, data_path=self.data_path, ui=self.ui, + inform=self.inform) + self.preferencesUiManager.defaults_write_form() + + # When the self.defaults dictionary changes will update the Preferences GUI forms + self.defaults.set_change_callback(self.on_defaults_dict_change) + + # ########################################################################################################### + # ##################################### FIRST RUN SECTION ################################################### + # ################################ It's done only once after install ##################################### + # ########################################################################################################### + if self.defaults["first_run"] is True: + # ONLY AT FIRST STARTUP INIT THE GUI LAYOUT TO 'COMPACT' + initial_lay = 'minimal' + self.ui.general_defaults_form.general_gui_group.on_layout(lay=initial_lay) + + # Set the combobox in Preferences to the current layout + idx = self.ui.general_defaults_form.general_gui_group.layout_combo.findText(initial_lay) + self.ui.general_defaults_form.general_gui_group.layout_combo.setCurrentIndex(idx) + + # after the first run, this object should be False + self.defaults["first_run"] = False + self.preferencesUiManager.save_defaults(silent=True) + + # ########################################################################################################### + # ############################################ Data ######################################################### + # ########################################################################################################### + + self.recent = [] + self.recent_projects = [] + + self.clipboard = QtWidgets.QApplication.clipboard() + + self.project_filename = None + self.toggle_units_ignore = False + # ########################################################################################################### # ########################################## LOAD LANGUAGES ################################################ # ########################################################################################################### @@ -2577,7 +2580,7 @@ class App(QtCore.QObject): self.date = self.date.replace(' ', '_') filter__ = "HTML File .html (*.html);;TXT File .txt (*.txt);;All Files (*.*)" - path_to_save = self.defaults["global_last_save_folder"] if\ + path_to_save = self.defaults["global_last_save_folder"] if \ self.defaults["global_last_save_folder"] is not None else self.data_path try: filename, _f = FCFileSaveDialog.get_saved_filename( @@ -3613,7 +3616,6 @@ class App(QtCore.QObject): sys.exit(0) else: os._exit(0) # fix to work with Python 3.8 - @staticmethod def kill_app(): diff --git a/camlib.py b/camlib.py index f4dff415..6e5bdcf2 100644 --- a/camlib.py +++ b/camlib.py @@ -249,7 +249,7 @@ class ApertureMacro: pol, dia, x, y = ApertureMacro.default2zero(4, mods) - return {"pol": int(pol), "geometry": Point(x, y).buffer(dia/2)} + return {"pol": int(pol), "geometry": Point(x, y).buffer(dia / 2)} @staticmethod def make_vectorline(mods): @@ -262,7 +262,7 @@ class ApertureMacro: pol, width, xs, ys, xe, ye, angle = ApertureMacro.default2zero(7, mods) line = LineString([(xs, ys), (xe, ye)]) - box = line.buffer(width/2, cap_style=2) + box = line.buffer(width / 2, cap_style=2) box_rotated = affinity.rotate(box, angle, origin=(0, 0)) return {"pol": int(pol), "geometry": box_rotated} @@ -278,7 +278,7 @@ class ApertureMacro: pol, width, height, x, y, angle = ApertureMacro.default2zero(6, mods) - box = shply_box(x-width/2, y-height/2, x+width/2, y+height/2) + box = shply_box(x - width / 2, y - height / 2, x + width / 2, y + height / 2) box_rotated = affinity.rotate(box, angle, origin=(0, 0)) return {"pol": int(pol), "geometry": box_rotated} @@ -294,7 +294,7 @@ class ApertureMacro: pol, width, height, x, y, angle = ApertureMacro.default2zero(6, mods) - box = shply_box(x, y, x+width, y+height) + box = shply_box(x, y, x + width, y + height) box_rotated = affinity.rotate(box, angle, origin=(0, 0)) return {"pol": int(pol), "geometry": box_rotated} @@ -309,12 +309,12 @@ class ApertureMacro: pol = mods[0] n = mods[1] - points = [(0, 0)]*(n+1) + points = [(0, 0)] * (n + 1) - for i in range(n+1): - points[i] = mods[2*i + 2:2*i + 4] + for i in range(n + 1): + points[i] = mods[2 * i + 2:2 * i + 4] - angle = mods[2*n + 4] + angle = mods[2 * n + 4] poly = Polygon(points) poly_rotated = affinity.rotate(poly, angle, origin=(0, 0)) @@ -333,11 +333,11 @@ class ApertureMacro: """ pol, nverts, x, y, dia, angle = ApertureMacro.default2zero(6, mods) - points = [(0, 0)]*nverts + points = [(0, 0)] * nverts for i in range(nverts): - points[i] = (x + 0.5 * dia * np.cos(2*np.pi * i/nverts), - y + 0.5 * dia * np.sin(2*np.pi * i/nverts)) + points[i] = (x + 0.5 * dia * np.cos(2 * np.pi * i / nverts), + y + 0.5 * dia * np.sin(2 * np.pi * i / nverts)) poly = Polygon(points) poly_rotated = affinity.rotate(poly, angle, origin=(0, 0)) @@ -358,9 +358,9 @@ class ApertureMacro: x, y, dia, thickness, gap, nrings, cross_th, cross_len, angle = ApertureMacro.default2zero(9, mods) - r = dia/2 - thickness/2 - result = Point((x, y)).buffer(r).exterior.buffer(thickness/2.0) - ring = Point((x, y)).buffer(r).exterior.buffer(thickness/2.0) # Need a copy! + r = dia / 2 - thickness / 2 + result = Point((x, y)).buffer(r).exterior.buffer(thickness / 2.0) + ring = Point((x, y)).buffer(r).exterior.buffer(thickness / 2.0) # Need a copy! i = 1 # Number of rings created so far @@ -370,13 +370,13 @@ class ApertureMacro: r -= thickness + gap if r <= 0: break - ring = Point((x, y)).buffer(r).exterior.buffer(thickness/2.0) + ring = Point((x, y)).buffer(r).exterior.buffer(thickness / 2.0) result = cascaded_union([result, ring]) i += 1 # ## Crosshair - hor = LineString([(x - cross_len, y), (x + cross_len, y)]).buffer(cross_th/2.0, cap_style=2) - ver = LineString([(x, y-cross_len), (x, y + cross_len)]).buffer(cross_th/2.0, cap_style=2) + hor = LineString([(x - cross_len, y), (x + cross_len, y)]).buffer(cross_th / 2.0, cap_style=2) + ver = LineString([(x, y - cross_len), (x, y + cross_len)]).buffer(cross_th / 2.0, cap_style=2) result = cascaded_union([result, hor, ver]) return {"pol": 1, "geometry": result} @@ -394,9 +394,9 @@ class ApertureMacro: x, y, dout, din, t, angle = ApertureMacro.default2zero(6, mods) - ring = Point((x, y)).buffer(dout/2.0).difference(Point((x, y)).buffer(din/2.0)) - hline = LineString([(x - dout/2.0, y), (x + dout/2.0, y)]).buffer(t/2.0, cap_style=3) - vline = LineString([(x, y - dout/2.0), (x, y + dout/2.0)]).buffer(t/2.0, cap_style=3) + ring = Point((x, y)).buffer(dout / 2.0).difference(Point((x, y)).buffer(din / 2.0)) + hline = LineString([(x - dout / 2.0, y), (x + dout / 2.0, y)]).buffer(t / 2.0, cap_style=3) + vline = LineString([(x, y - dout / 2.0), (x, y + dout / 2.0)]).buffer(t / 2.0, cap_style=3) thermal = ring.difference(hline.union(vline)) return {"pol": 1, "geometry": thermal} @@ -920,14 +920,16 @@ class Geometry(object): Creates contours around geometry at a given offset distance. - :param offset: Offset distance. - :type offset: float - :param iso_type: type of isolation, can be 0 = exteriors or 1 = interiors or 2 = both (complete) - :param corner: type of corner for the isolation: 0 = round; 1 = square; 2= beveled (line that connects the ends) - :param follow: whether the geometry to be isolated is a follow_geometry - :param passes: current pass out of possible multiple passes for which the isolation is done - :return: The buffered geometry. - :rtype: Shapely.MultiPolygon or Shapely.Polygon + :param offset: Offset distance. + :type offset: float + :param geometry The geometry to work with + :param iso_type: type of isolation, can be 0 = exteriors or 1 = interiors or 2 = both (complete) + :param corner: type of corner for the isolation: + 0 = round; 1 = square; 2= beveled (line that connects the ends) + :param follow: whether the geometry to be isolated is a follow_geometry + :param passes: current pass out of possible multiple passes for which the isolation is done + :return: The buffered geometry. + :rtype: Shapely.MultiPolygon or Shapely.Polygon """ if self.app.abort_flag: @@ -1194,7 +1196,7 @@ class Geometry(object): return 0 bounds = self.bounds() return bounds[2] - bounds[0], bounds[3] - bounds[1] - + def get_empty_area(self, boundary=None): """ Returns the complement of self.solid_geometry within @@ -1886,6 +1888,7 @@ class Geometry(object): # ## Index first and last points in paths def get_pts(o): return [o.coords[0], o.coords[-1]] + # # storage = FlatCAMRTreeStorage() # storage.get_points = get_pts @@ -1982,10 +1985,10 @@ class Geometry(object): the geometry appropriately. This call ``scale()``. Don't call it again in descendents. - :param units: "IN" or "MM" - :type units: str - :return: Scaling factor resulting from unit change. - :rtype: float + :param obj_units: "IN" or "MM" + :type units: str + :return: Scaling factor resulting from unit change. + :rtype: float """ if obj_units.upper() == self.units.upper(): @@ -2013,8 +2016,8 @@ class Geometry(object): 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 + :return: A dictionary-encoded copy of the object. + :rtype: dict """ d = {} for attr in self.ser_attrs: @@ -2030,9 +2033,9 @@ class Geometry(object): be present. Use only for deserializing saved objects. - :param d: Dictionary of attributes to set in the object. - :type d: dict - :return: None + :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]) @@ -2432,7 +2435,7 @@ class CNCjob(Geometry): pp_geometry_name='default', pp_excellon_name='default', depthpercut=0.1, z_pdepth=-0.02, spindlespeed=None, spindledir='CW', dwell=True, dwelltime=1000, - toolchangez=0.787402, toolchange_xy=[0.0, 0.0], + toolchangez=0.787402, toolchange_xy='0.0,0.0', endz=2.0, endxy='', segx=None, segy=None, @@ -2441,7 +2444,8 @@ class CNCjob(Geometry): self.decimals = self.app.decimals # Used when parsing G-code arcs - self.steps_per_circle = int(self.app.defaults['cncjob_steps_per_circle']) + self.steps_per_circle = steps_per_circle if steps_per_circle is not None else \ + int(self.app.defaults['cncjob_steps_per_circle']) Geometry.__init__(self, geo_steps_per_circle=self.steps_per_circle) @@ -2667,6 +2671,7 @@ class CNCjob(Geometry): if self.xy_toolchange == '': self.xy_toolchange = None else: + self.xy_toolchange = re.sub('[()\[\]]', '', str(self.xy_toolchange)) self.xy_toolchange = [float(eval(a)) for a in self.xy_toolchange.split(",") if self.xy_toolchange != ''] if self.xy_toolchange and len(self.xy_toolchange) < 2: self.app.inform.emit('[ERROR]%s' % @@ -2677,6 +2682,7 @@ class CNCjob(Geometry): log.debug("camlib.CNCJob.generate_from_excellon_by_tool() --> %s" % str(e)) pass + self.xy_end = re.sub('[()\[\]]', '', str(self.xy_end)) self.xy_end = [float(eval(a)) for a in self.xy_end.split(",") if self.xy_end != ''] if self.xy_end and len(self.xy_end) < 2: self.app.inform.emit('[ERROR] %s' % _("The End Move X,Y field in Edit -> Preferences has to be " @@ -2689,7 +2695,7 @@ class CNCjob(Geometry): log.debug("Creating CNC Job from Excellon...") # Tools - + # sort the tools list by the second item in tuple (here we have a dict with diameter of the tool) # so we actually are sorting the tools by diameter # sorted_tools = sorted(exobj.tools.items(), key=lambda t1: t1['C']) @@ -2700,7 +2706,7 @@ class CNCjob(Geometry): sorted_tools = sorted(sort, key=lambda t1: t1[1]) if tools == "all": - tools = [i[0] for i in sorted_tools] # we get a array of ordered tools + tools = [i[0] for i in sorted_tools] # we get a array of ordered tools log.debug("Tools 'all' and sorted are: %s" % str(tools)) else: selected_tools = [x.strip() for x in tools.split(",")] # we strip spaces and also separate the tools by ',' @@ -3101,7 +3107,7 @@ class CNCjob(Geometry): raise grace self.tool = tool - self.postdata['toolC']=exobj.tools[tool]["C"] + self.postdata['toolC'] = exobj.tools[tool]["C"] self.tooldia = exobj.tools[tool]["C"] if self.use_ui: @@ -3577,7 +3583,8 @@ class CNCjob(Geometry): self.startz = float(startz) if startz is not None else None self.z_end = float(endz) if endz is not None else None - self.xy_end = [float(eval(a)) for a in endxy.split(",") if endxy != ''] + self.xy_end = re.sub('[()\[\]]', '', str(endxy)) + self.xy_end = [float(eval(a)) for a in self.xy_end.split(",") if endxy != ''] if self.xy_end and len(self.xy_end) < 2: self.app.inform.emit('[ERROR] %s' % _("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.")) @@ -3595,7 +3602,8 @@ class CNCjob(Geometry): if toolchangexy == '': self.xy_toolchange = None else: - self.xy_toolchange = [float(eval(a)) for a in toolchangexy.split(",")] + self.xy_toolchange = re.sub('[()\[\]]', '', str(toolchangexy)) + self.xy_toolchange = [float(eval(a)) for a in self.xy_toolchange.split(",")] if len(self.xy_toolchange) < 2: self.app.inform.emit('[ERROR] %s' % _("The Toolchange X,Y field in Edit -> Preferences has to be " "in the format (x, y) \n" @@ -3693,7 +3701,7 @@ class CNCjob(Geometry): self.gcode = self.doformat(p.start_code) - self.gcode += self.doformat(p.feedrate_code) # sets the feed rate + self.gcode += self.doformat(p.feedrate_code) # sets the feed rate if toolchange is False: self.gcode += self.doformat(p.lift_code, x=0, y=0) # Move (up) to travel height @@ -3707,19 +3715,19 @@ class CNCjob(Geometry): self.gcode += self.doformat(p.toolchange_code) if 'laser' not in self.pp_geometry_name: - self.gcode += self.doformat(p.spindle_code) # Spindle start + self.gcode += self.doformat(p.spindle_code) # Spindle start else: # for laser this will disable the laser self.gcode += self.doformat(p.lift_code, x=self.oldx, y=self.oldy) # Move (up) to travel height if self.dwell is True: - self.gcode += self.doformat(p.dwell_code) # Dwell time + self.gcode += self.doformat(p.dwell_code) # Dwell time else: if 'laser' not in self.pp_geometry_name: self.gcode += self.doformat(p.spindle_code) # Spindle start if self.dwell is True: - self.gcode += self.doformat(p.dwell_code) # Dwell time + self.gcode += self.doformat(p.dwell_code) # Dwell time total_travel = 0.0 total_cut = 0.0 @@ -3788,7 +3796,7 @@ class CNCjob(Geometry): total_travel = total_travel + abs(distance(pt1=current_pt, pt2=pt)) current_pt = geo.coords[-1] - pt, geo = storage.nearest(current_pt) # Next + pt, geo = storage.nearest(current_pt) # Next disp_number = int(np.interp(path_count, [0, geo_len], [0, 100])) if old_disp_number < disp_number <= 100: @@ -3961,7 +3969,9 @@ class CNCjob(Geometry): self.startz = float(startz) if startz is not None else self.app.defaults["geometry_startz"] self.z_end = float(endz) if endz is not None else self.app.defaults["geometry_endz"] + self.xy_end = endxy if endxy != '' else self.app.defaults["geometry_endxy"] + self.xy_end = re.sub('[()\[\]]', '', str(self.xy_end)) self.xy_end = [float(eval(a)) for a in self.xy_end.split(",") if self.xy_end != ''] if self.xy_end and len(self.xy_end) < 2: self.app.inform.emit('[ERROR] %s' % _("The End Move X,Y field in Edit -> Preferences has to be " @@ -3978,7 +3988,8 @@ class CNCjob(Geometry): if toolchangexy == '': self.xy_toolchange = None else: - self.xy_toolchange = [float(eval(a)) for a in toolchangexy.split(",")] + self.xy_toolchange = re.sub('[()\[\]]', '', str(toolchangexy)) + self.xy_toolchange = [float(eval(a)) for a in self.xy_toolchange.split(",")] if len(self.xy_toolchange) < 2: self.app.inform.emit( '[ERROR] %s' % @@ -4085,7 +4096,7 @@ class CNCjob(Geometry): self.gcode = self.doformat(p.start_code) - self.gcode += self.doformat(p.feedrate_code) # sets the feed rate + self.gcode += self.doformat(p.feedrate_code) # sets the feed rate if toolchange is False: self.gcode += self.doformat(p.lift_code, x=self.oldx, y=self.oldy) # Move (up) to travel height @@ -4099,19 +4110,19 @@ class CNCjob(Geometry): self.gcode += self.doformat(p.toolchange_code) if 'laser' not in self.pp_geometry_name: - self.gcode += self.doformat(p.spindle_code) # Spindle start + self.gcode += self.doformat(p.spindle_code) # Spindle start else: # for laser this will disable the laser self.gcode += self.doformat(p.lift_code, x=self.oldx, y=self.oldy) # Move (up) to travel height if self.dwell is True: - self.gcode += self.doformat(p.dwell_code) # Dwell time + self.gcode += self.doformat(p.dwell_code) # Dwell time else: if 'laser' not in self.pp_geometry_name: self.gcode += self.doformat(p.spindle_code) # Spindle start if self.dwell is True: - self.gcode += self.doformat(p.dwell_code) # Dwell time + self.gcode += self.doformat(p.dwell_code) # Dwell time total_travel = 0.0 total_cut = 0.0 @@ -4553,7 +4564,7 @@ class CNCjob(Geometry): kind = ["C", "F"] # T=travel, C=cut, F=fast, S=slow # Results go here - geometry = [] + geometry = [] # Last known instruction current = {'X': 0.0, 'Y': 0.0, 'Z': 0.0, 'G': 0} @@ -4636,7 +4647,7 @@ class CNCjob(Geometry): kind = ['C', 'F'] geometry.append( { - "geom": Point(current_drill_point_coords).buffer(dia/2.0).exterior, + "geom": Point(current_drill_point_coords).buffer(dia / 2.0).exterior, "kind": kind } ) @@ -4644,14 +4655,14 @@ class CNCjob(Geometry): if 'G' in gobj: current['G'] = int(gobj['G']) - + if 'X' in gobj or 'Y' in gobj: if 'X' in gobj: x = gobj['X'] # current['X'] = x else: x = current['X'] - + if 'Y' in gobj: y = gobj['Y'] else: @@ -4670,7 +4681,7 @@ class CNCjob(Geometry): arcdir = [None, None, "cw", "ccw"] if current['G'] in [2, 3]: # arc center = [gobj['I'] + current['X'], gobj['J'] + current['Y']] - radius = np.sqrt(gobj['I']**2 + gobj['J']**2) + radius = np.sqrt(gobj['I'] ** 2 + gobj['J'] ** 2) start = np.arctan2(-gobj['J'], -gobj['I']) stop = np.arctan2(-center[1] + y, -center[0] + x) path += arc(center, radius, start, stop, arcdir[current['G']], int(self.steps_per_circle)) @@ -5592,7 +5603,7 @@ class CNCjob(Geometry): new_nr = float(nr) * xfactor # replace the updated string line = line.replace(nr, ('%.*f' % (self.app.defaults["cncjob_coords_decimals"], new_nr)) - ) + ) # this scales all the X and Y and Z and F values and also the Tool Dia in the toolchange message if header_stop is True: @@ -5993,9 +6004,9 @@ def arc(center, radius, start, stop, direction, steps_per_circ): stop += 2 * np.pi if direction == "cw" and stop >= start: stop -= 2 * np.pi - + angle = abs(stop - start) - + # angle = stop-start steps = max([int(np.ceil(angle / (2 * np.pi) * steps_per_circ)), 2]) delta_angle = da_sign[direction] * angle * 1.0 / steps @@ -6578,7 +6589,6 @@ class FlatCAMRTreeStorage(FlatCAMRTree): tidx = super(FlatCAMRTreeStorage, self).nearest(pt) return (tidx.bbox[0], tidx.bbox[1]), self.objects[tidx.object] - # class myO: # def __init__(self, coords): # self.coords = coords diff --git a/flatcamGUI/GUIElements.py b/flatcamGUI/GUIElements.py index 78cc8d1a..bc283456 100644 --- a/flatcamGUI/GUIElements.py +++ b/flatcamGUI/GUIElements.py @@ -1337,7 +1337,8 @@ class FCComboBox(QtWidgets.QComboBox): return str(self.currentText()) def set_value(self, val): - self.setCurrentIndex(self.findText(str(val))) + idx = self.findText(str(val)) + self.setCurrentIndex(idx) @property def is_last(self): diff --git a/flatcamObjects/FlatCAMExcellon.py b/flatcamObjects/FlatCAMExcellon.py index 79020ab1..691fb897 100644 --- a/flatcamObjects/FlatCAMExcellon.py +++ b/flatcamObjects/FlatCAMExcellon.py @@ -1115,6 +1115,7 @@ class ExcellonObject(FlatCAMObj, Excellon): 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) From 91493b2fbc5ea4f467467e4cdd4b59c6abb941c9 Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Wed, 6 May 2020 02:10:18 +0300 Subject: [PATCH 04/99] - wip in adding Exclusion areas in Geometry object; each Geometry object has now a storage for shapes (exclusion shapes, should I make them more general?) --- CHANGELOG.md | 4 ++ FlatCAMApp.py | 7 ++- FlatCAMTool.py | 70 +++++++++++++++++++------- flatcamGUI/PlotCanvasLegacy.py | 4 +- flatcamObjects/FlatCAMGeometry.py | 82 ++++++++++++++++++++++++++----- flatcamTools/ToolNCC.py | 25 +++++++--- 6 files changed, 152 insertions(+), 40 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d6fc2717..5be0edb1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ CHANGELOG for FlatCAM beta ================================================= +6.05.2020 + +- wip in adding Exclusion areas in Geometry object; each Geometry object has now a storage for shapes (exclusion shapes, should I make them more general?) + 5.05.2020 - fixed an issue that made the preprocessors comboxes in Preferences not to load and display the saved value fro the file diff --git a/FlatCAMApp.py b/FlatCAMApp.py index 923a599e..3ac389df 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -5119,12 +5119,17 @@ class App(QtCore.QObject): for obj_active in self.collection.get_selected(): # if the deleted object is GerberObject then make sure to delete the possible mark shapes - if isinstance(obj_active, GerberObject): + if obj_active.kind == 'gerber': 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 + # if the deleted object is GerberObject then make sure to delete the possible mark shapes + if obj_active.kind == 'geometry': + obj_active.exclusion_shapes.clear(update=True) + obj_active.exclusion_shapes.enabled = False + del obj_active.exclusion_shapes elif isinstance(obj_active, CNCJobObject): try: obj_active.text_col.enabled = False diff --git a/FlatCAMTool.py b/FlatCAMTool.py index 3b7f8d0f..470a484a 100644 --- a/FlatCAMTool.py +++ b/FlatCAMTool.py @@ -110,6 +110,11 @@ class FlatCAMTool(QtWidgets.QWidget): :return: """ + if 'shapes_storage' in kwargs: + s_storage = kwargs['shapes_storage'] + else: + s_storage = self.app.tool_shapes + if 'color' in kwargs: color = kwargs['color'] else: @@ -139,10 +144,9 @@ class FlatCAMTool(QtWidgets.QWidget): color_t = face_color[:-2] + str(hex(int(face_alpha * 255)))[2:] - self.app.tool_shapes.add(sel_rect, color=color, face_color=color_t, update=True, - layer=0, tolerance=None) + s_storage.add(sel_rect, color=color, face_color=color_t, update=True, layer=0, tolerance=None) if self.app.is_legacy is True: - self.app.tool_shapes.redraw() + s_storage.redraw() def draw_selection_shape_polygon(self, points, **kwargs): """ @@ -151,6 +155,12 @@ class FlatCAMTool(QtWidgets.QWidget): :param kwargs: :return: """ + + if 'shapes_storage' in kwargs: + s_storage = kwargs['shapes_storage'] + else: + s_storage = self.app.tool_shapes + if 'color' in kwargs: color = kwargs['color'] else: @@ -165,6 +175,7 @@ class FlatCAMTool(QtWidgets.QWidget): face_alpha = kwargs['face_alpha'] else: face_alpha = 0.3 + if len(points) < 3: sel_rect = LineString(points) else: @@ -175,14 +186,24 @@ class FlatCAMTool(QtWidgets.QWidget): color_t = face_color[:-2] + str(hex(int(face_alpha * 255)))[2:] - self.app.tool_shapes.add(sel_rect, color=color, face_color=color_t, update=True, - layer=0, tolerance=None) + s_storage.add(sel_rect, color=color, face_color=color_t, update=True, layer=0, tolerance=None) if self.app.is_legacy is True: - self.app.tool_shapes.redraw() + s_storage.redraw() - def delete_tool_selection_shape(self): - self.app.tool_shapes.clear() - self.app.tool_shapes.redraw() + def delete_tool_selection_shape(self, **kwargs): + """ + + :param kwargs: + :return: + """ + + if 'shapes_storage' in kwargs: + s_storage = kwargs['shapes_storage'] + else: + s_storage = self.app.tool_shapes + + s_storage.clear() + s_storage.redraw() def draw_moving_selection_shape_poly(self, points, data, **kwargs): """ @@ -192,6 +213,12 @@ class FlatCAMTool(QtWidgets.QWidget): :param kwargs: :return: """ + + if 'shapes_storage' in kwargs: + s_storage = kwargs['shapes_storage'] + else: + s_storage = self.app.move_tool.sel_shapes + if 'color' in kwargs: color = kwargs['color'] else: @@ -226,18 +253,27 @@ class FlatCAMTool(QtWidgets.QWidget): color_t_error = "#00000000" if geo.is_valid and not geo.is_empty: - self.app.move_tool.sel_shapes.add(geo, color=color, face_color=color_t, update=True, - layer=0, tolerance=None) + s_storage.add(geo, color=color, face_color=color_t, update=True, layer=0, tolerance=None) elif not geo.is_valid: - self.app.move_tool.sel_shapes.add(geo, color="red", face_color=color_t_error, update=True, - layer=0, tolerance=None) + s_storage.add(geo, color="red", face_color=color_t_error, update=True, layer=0, tolerance=None) if self.app.is_legacy is True: - self.app.move_tool.sel_shapes.redraw() + s_storage.redraw() - def delete_moving_selection_shape(self): - self.app.move_tool.sel_shapes.clear() - self.app.move_tool.sel_shapes.redraw() + def delete_moving_selection_shape(self, **kwargs): + """ + + :param kwargs: + :return: + """ + + if 'shapes_storage' in kwargs: + s_storage = kwargs['shapes_storage'] + else: + s_storage = self.app.move_tool.sel_shapes + + s_storage.clear() + s_storage.redraw() def confirmation_message(self, accepted, minval, maxval): if accepted is False: diff --git a/flatcamGUI/PlotCanvasLegacy.py b/flatcamGUI/PlotCanvasLegacy.py index df9c8231..a9a6216f 100644 --- a/flatcamGUI/PlotCanvasLegacy.py +++ b/flatcamGUI/PlotCanvasLegacy.py @@ -948,10 +948,10 @@ class ShapeCollectionLegacy: """ :param obj: This is the object to which the shapes collection is attached and for - which it will have to draw shapes + which it will have to draw shapes :param app: This is the FLatCAM.App usually, needed because we have to access attributes there :param name: This is the name given to the Matplotlib axes; it needs to be unique due of - Matplotlib requurements + Matplotlib requurements :param annotation_job: Make this True if the job needed is just for annotation :param linewidth: THe width of the line (outline where is the case) """ diff --git a/flatcamObjects/FlatCAMGeometry.py b/flatcamObjects/FlatCAMGeometry.py index f4d0554f..62d5924d 100644 --- a/flatcamObjects/FlatCAMGeometry.py +++ b/flatcamObjects/FlatCAMGeometry.py @@ -16,6 +16,7 @@ import shapely.affinity as affinity from camlib import Geometry from flatcamObjects.FlatCAMObj import * +from flatcamGUI.VisPyVisuals import ShapeCollection import FlatCAMTool import ezdxf @@ -163,6 +164,18 @@ class GeometryObject(FlatCAMObj, Geometry): self.points = [] self.poly_drawn = False + # Storage for shapes, storage that can be used by FlatCAm tools for utility geometry + # VisPy visuals + if self.app.is_legacy is False: + try: + self.exclusion_shapes = ShapeCollection(parent=self.app.plotcanvas.view.scene, layers=1) + except AttributeError: + self.exclusion_shapes = None + else: + from flatcamGUI.PlotCanvasLegacy import ShapeCollectionLegacy + self.exclusion_shapes = ShapeCollectionLegacy( + obj=self, app=self.app, name="exclusion" + self.options['name']) + # Attributes to be included in serialization # Always append to it because it carries contents # from predecessors. @@ -363,7 +376,7 @@ class GeometryObject(FlatCAMObj, Geometry): "endxy": self.ui.endxy_entry, "cnctooldia": self.ui.addtool_entry, "area_exclusion": self.ui.exclusion_cb, - "area_shape":self.ui.area_shape_radio, + "area_shape": self.ui.area_shape_radio, "area_strategy": self.ui.strategy_radio, "area_overz": self.ui.over_z_entry, }) @@ -1149,8 +1162,7 @@ class GeometryObject(FlatCAMObj, Geometry): "- 'V-tip Angle' -> angle at the tip of the tool\n" "- 'V-tip Dia' -> diameter at the tip of the tool \n" "- Tool Dia -> 'Dia' column found in the Tool Table\n" - "NB: a value of zero means that Tool Dia = 'V-tip Dia'" - ) + "NB: a value of zero means that Tool Dia = 'V-tip Dia'") ) self.ui.cutz_entry.setToolTip( _("Disabled because the tool is V-shape.\n" @@ -1159,8 +1171,7 @@ class GeometryObject(FlatCAMObj, Geometry): "- 'V-tip Angle' -> angle at the tip of the tool\n" "- 'V-tip Dia' -> diameter at the tip of the tool \n" "- Tool Dia -> 'Dia' column found in the Tool Table\n" - "NB: a value of zero means that Tool Dia = 'V-tip Dia'" - ) + "NB: a value of zero means that Tool Dia = 'V-tip Dia'") ) self.update_cutz() @@ -1172,8 +1183,7 @@ class GeometryObject(FlatCAMObj, Geometry): self.ui.cutz_entry.setDisabled(False) self.ui.cutzlabel.setToolTip( _("Cutting depth (negative)\n" - "below the copper surface." - ) + "below the copper surface.") ) self.ui.cutz_entry.setToolTip('') @@ -2636,7 +2646,11 @@ class GeometryObject(FlatCAMObj, Geometry): self.exclusion_areas_list.append(new_rectangle) # add a temporary shape on canvas - FlatCAMTool.FlatCAMTool.draw_tool_selection_shape(self, old_coords=(x0, y0), coords=(x1, y1)) + FlatCAMTool.FlatCAMTool.draw_tool_selection_shape( + self, old_coords=(x0, y0), coords=(x1, y1), + color="#FF7400", + face_color="#FF7400BF", + shapes_storage=self.exclusion_shapes) self.first_click = False return @@ -2672,7 +2686,11 @@ class GeometryObject(FlatCAMObj, Geometry): # do not add invalid polygons even if they are drawn by utility geometry if pol.is_valid: self.exclusion_areas_list.append(pol) - FlatCAMTool.FlatCAMTool.draw_selection_shape_polygon(self, points=self.points) + FlatCAMTool.FlatCAMTool.draw_selection_shape_polygon( + self, points=self.points, + color="#FF7400", + face_color="#FF7400BF", + shapes_storage=self.exclusion_shapes) self.app.inform.emit( _("Zone added. Click to start adding next zone or right click to finish.")) @@ -2680,7 +2698,7 @@ class GeometryObject(FlatCAMObj, Geometry): self.poly_drawn = False return - FlatCAMTool.FlatCAMTool.delete_tool_selection_shape(self) + # FlatCAMTool.FlatCAMTool.delete_tool_selection_shape(self, shapes_storage=self.exclusion_shapes) if self.app.is_legacy is False: self.app.plotcanvas.graph_event_disconnect('mouse_release', self.on_mouse_release) @@ -2702,6 +2720,29 @@ class GeometryObject(FlatCAMObj, Geometry): if len(self.exclusion_areas_list) == 0: return + else: + self.exclusion_areas_list = MultiPolygon(self.exclusion_areas_list) + + self.app.inform.emit( + "[success] %s" % _("Exclusion areas added. Checking overlap with the object geometry ...")) + if self.exclusion_areas_list.intersects(MultiPolygon(self.solid_geometry)): + self.exclusion_areas_list = [] + self.app.inform.emit( + "[ERROR_NOTCL] %s" % _("Failed. Exclusion areas intersects the object geometry ...")) + return + else: + self.app.inform.emit( + "[success] %s" % _("Exclusion areas added.")) + self.ui.generate_cnc_button.setStyleSheet(""" + QPushButton + { + font-weight: bold; + color: orange; + } + """) + self.ui.generate_cnc_button.setToolTip( + '%s %s' % (_("Generate the CNC Job object."), _("With Exclusion areas.")) + ) def area_disconnect(self): if self.app.is_legacy is False: @@ -2723,7 +2764,7 @@ class GeometryObject(FlatCAMObj, Geometry): self.exclusion_areas_list = [] FlatCAMTool.FlatCAMTool.delete_moving_selection_shape(self) - FlatCAMTool.FlatCAMTool.delete_tool_selection_shape(self) + # FlatCAMTool.FlatCAMTool.delete_tool_selection_shape(self, shapes_storage=self.exclusion_shapes) self.app.call_source = "app" self.app.inform.emit("[WARNING_NOTCL] %s" % _("Cancelled. Area exclusion drawing was interrupted.")) @@ -2775,16 +2816,33 @@ class GeometryObject(FlatCAMObj, Geometry): if self.first_click: self.app.delete_selection_shape() self.app.draw_moving_selection_shape(old_coords=(self.cursor_pos[0], self.cursor_pos[1]), + color="#FF7400", + face_color="#FF7400BF", coords=(curr_pos[0], curr_pos[1])) else: FlatCAMTool.FlatCAMTool.delete_moving_selection_shape(self) FlatCAMTool.FlatCAMTool.draw_moving_selection_shape_poly( - self, points=self.points, data=(curr_pos[0], curr_pos[1])) + self, points=self.points, + color="#FF7400", + face_color="#FF7400BF", + data=(curr_pos[0], curr_pos[1])) def on_clear_area_click(self): self.exclusion_areas_list = [] FlatCAMTool.FlatCAMTool.delete_moving_selection_shape(self) self.app.delete_selection_shape() + FlatCAMTool.FlatCAMTool.delete_tool_selection_shape(self, shapes_storage=self.exclusion_shapes) + + # restore the default StyleSheet + self.ui.generate_cnc_button.setStyleSheet("") + # update the StyleSheet + self.ui.generate_cnc_button.setStyleSheet(""" + QPushButton + { + font-weight: bold; + } + """) + self.ui.generate_cnc_button.setToolTip('%s' % _("Generate the CNC Job object.")) @staticmethod def merge(geo_list, geo_final, multigeo=None): diff --git a/flatcamTools/ToolNCC.py b/flatcamTools/ToolNCC.py index 01b879b9..0b80c735 100644 --- a/flatcamTools/ToolNCC.py +++ b/flatcamTools/ToolNCC.py @@ -2066,6 +2066,7 @@ class NonCopperClear(FlatCAMTool, Gerber): # unfortunately for this function to work time efficient, # if the Gerber was loaded without buffering then it require the buffering now. + # TODO 'buffering status' should be a property of the object not the project property if self.app.defaults['gerber_buffering'] == 'no': self.solid_geometry = ncc_obj.solid_geometry.buffer(0) else: @@ -2158,6 +2159,7 @@ class NonCopperClear(FlatCAMTool, Gerber): self.app.inform.emit('[WARNING_NOTCL] %s ...' % _("Buffering")) sol_geo = sol_geo.buffer(distance=ncc_offset) self.app.inform.emit('[success] %s ...' % _("Buffering finished")) + empty = self.get_ncc_empty_area(target=sol_geo, boundary=bounding_box) if empty == 'fail': return 'fail' @@ -2203,14 +2205,15 @@ class NonCopperClear(FlatCAMTool, Gerber): """ Clear the excess copper from the entire object. - :param ncc_obj: ncc cleared object + :param ncc_obj: ncc cleared object :param sel_obj: - :param ncctooldia: a tuple or single element made out of diameters of the tools to be used to ncc clear - :param isotooldia: a tuple or single element made out of diameters of the tools to be used for isolation - :param outname: name of the resulting object - :param order: - :param tools_storage: whether to use the current tools_storage self.ncc_tools or a different one. - Usage of the different one is related to when this function is called from a TcL command. + :param ncctooldia: a tuple or single element made out of diameters of the tools to be used to ncc clear + :param isotooldia: a tuple or single element made out of diameters of the tools to be used for isolation + :param outname: name of the resulting object + :param order: Tools order + :param tools_storage: whether to use the current tools_storage self.ncc_tools or a different one. + Usage of the different one is related to when this function is called + from a TcL command. :param run_threaded: If True the method will be run in a threaded way suitable for GUI usage; if False it will run non-threaded for TclShell usage @@ -3870,6 +3873,11 @@ class NonCopperClear(FlatCAMTool, Gerber): Returns the complement of target geometry within the given boundary polygon. If not specified, it defaults to the rectangular bounding box of target geometry. + + :param target: The geometry that is to be 'inverted' + :param boundary: A polygon that surrounds the entire solid geometry and from which we subtract in order to + create a "negative" geometry (geometry to be emptied of copper) + :return: """ if isinstance(target, Polygon): geo_len = 1 @@ -3882,6 +3890,7 @@ class NonCopperClear(FlatCAMTool, Gerber): boundary = target.envelope else: boundary = boundary + try: ret_val = boundary.difference(target) except Exception: @@ -3889,10 +3898,10 @@ class NonCopperClear(FlatCAMTool, Gerber): for el in target: # provide the app with a way to process the GUI events when in a blocking loop QtWidgets.QApplication.processEvents() - if self.app.abort_flag: # graceful abort requested by the user raise grace + boundary = boundary.difference(el) pol_nr += 1 disp_number = int(np.interp(pol_nr, [0, geo_len], [0, 100])) From 343d4ee534d24549b04f9647543bc21cc3fa9294 Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Wed, 6 May 2020 03:44:56 +0300 Subject: [PATCH 05/99] - changed the above: too many shapes collections and the performance will go down. Created a class Exclusion areas that holds all the require properties and the Object UI elements will connect to it's methods. This way I can apply this to Excellon object too (who are a special type of Geometry Object) --- CHANGELOG.md | 1 + FlatCAMApp.py | 7 +- FlatCAMCommon.py | 368 ++++++++++++++++++++++++++++++ flatcamObjects/FlatCAMGeometry.py | 302 ++---------------------- 4 files changed, 390 insertions(+), 288 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5be0edb1..6a962f28 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ CHANGELOG for FlatCAM beta 6.05.2020 - wip in adding Exclusion areas in Geometry object; each Geometry object has now a storage for shapes (exclusion shapes, should I make them more general?) +- changed the above: too many shapes collections and the performance will go down. Created a class Exclusion areas that holds all the require properties and the Object UI elements will connect to it's methods. This way I can apply this to Excellon object too (who are a special type of Geometry Object) 5.05.2020 diff --git a/FlatCAMApp.py b/FlatCAMApp.py index 3ac389df..16c54bf9 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -43,7 +43,7 @@ import socket # #################################################################################################################### # Diverse -from FlatCAMCommon import LoudDict, color_variant +from FlatCAMCommon import LoudDict, color_variant, ExclusionAreas from FlatCAMBookmark import BookmarkManager from FlatCAMDB import ToolsDB2 @@ -1601,6 +1601,11 @@ class App(QtCore.QObject): self.ui.excellon_defaults_form.excellon_gen_group.excellon_optimization_radio.set_value('T') self.ui.excellon_defaults_form.excellon_gen_group.excellon_optimization_radio.setDisabled(True) + # ########################################################################################################### + # ########################################### EXCLUSION AREAS ############################################### + # ########################################################################################################### + self.exc_areas = ExclusionAreas(app=self) + # ########################################################################################################### # ##################################### Finished the CONSTRUCTOR ############################################ # ########################################################################################################### diff --git a/FlatCAMCommon.py b/FlatCAMCommon.py index 952ed0cd..f9e8c3f6 100644 --- a/FlatCAMCommon.py +++ b/FlatCAMCommon.py @@ -11,6 +11,13 @@ # Date: 11/4/2019 # # ########################################################## +from shapely.geometry import Polygon, MultiPolygon + +from flatcamGUI.VisPyVisuals import ShapeCollection +from FlatCAMTool import FlatCAMTool + +import numpy as np + import gettext import FlatCAMTranslation as fcTranslate import builtins @@ -119,3 +126,364 @@ def color_variant(hex_color, bright_factor=1): new_rgb.append(mod_color_hex) return "#" + "".join([i for i in new_rgb]) + + +class ExclusionAreas: + + def __init__(self, app): + self.app = app + + # Storage for shapes, storage that can be used by FlatCAm tools for utility geometry + # VisPy visuals + if self.app.is_legacy is False: + try: + self.exclusion_shapes = ShapeCollection(parent=self.app.plotcanvas.view.scene, layers=1) + except AttributeError: + self.exclusion_shapes = None + else: + from flatcamGUI.PlotCanvasLegacy import ShapeCollectionLegacy + self.exclusion_shapes = ShapeCollectionLegacy(obj=self, app=self.app, name="exclusion") + + # Event signals disconnect id holders + self.mr = None + self.mm = None + self.kp = None + + # variables to be used in area exclusion + self.cursor_pos = (0, 0) + self.first_click = False + self.points = [] + self.poly_drawn = False + + ''' + Here we store the exclusion shapes and some other information's + Each list element is a dictionary with the format: + + { + "obj_type": string ("excellon" or "geometry") <- self.obj_type + "shape": Shapely polygon + "strategy": string ("over" or "around") <- self.strategy + "overz": float <- self.over_z + } + ''' + self.exclusion_areas_storage = [] + + self.mouse_is_dragging = False + + self.solid_geometry = [] + self.obj_type = None + + self.shape_type = 'square' # TODO use the self.app.defaults when made general (not in Geo object Pref UI) + self.over_z = 0.1 + self.strategy = None + self.cnc_button = None + + def on_add_area_click(self, shape_button, overz_button, strategy_radio, cnc_button, solid_geo, obj_type): + """ + + :param shape_button: a FCButton that has the value for the shape + :param overz_button: a FCDoubleSpinner that holds the Over Z value + :param strategy_radio: a RadioSet button with the strategy value + :param cnc_button: a FCButton in Object UI that when clicked the CNCJob is created + We have a reference here so we can change the color signifying that exclusion areas are + available. + :param solid_geo: reference to the object solid geometry for which we add exclusion areas + :param obj_type: Type of FlatCAM object that called this method + :type obj_type: String: "excellon" or "geometry" + :return: + """ + self.app.inform.emit('[WARNING_NOTCL] %s' % _("Click the start point of the area.")) + self.app.call_source = 'geometry' + + self.shape_type = shape_button.get_value() + self.over_z = overz_button.get_value() + self.strategy = strategy_radio.get_value() + self.cnc_button = cnc_button + + self.solid_geometry = solid_geo + self.obj_type = obj_type + + if self.app.is_legacy is False: + self.app.plotcanvas.graph_event_disconnect('mouse_press', self.app.on_mouse_click_over_plot) + self.app.plotcanvas.graph_event_disconnect('mouse_move', self.app.on_mouse_move_over_plot) + 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.mp) + self.app.plotcanvas.graph_event_disconnect(self.app.mm) + self.app.plotcanvas.graph_event_disconnect(self.app.mr) + + self.mr = self.app.plotcanvas.graph_event_connect('mouse_release', self.on_mouse_release) + self.mm = self.app.plotcanvas.graph_event_connect('mouse_move', self.on_mouse_move) + # self.kp = self.app.plotcanvas.graph_event_connect('key_press', self.on_key_press) + + # To be called after clicking on the plot. + def on_mouse_release(self, event): + if self.app.is_legacy is False: + event_pos = event.pos + # 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_pos = self.app.plotcanvas.translate_coords(event_pos) + if self.app.grid_status(): + curr_pos = self.app.geo_editor.snap(event_pos[0], event_pos[1]) + else: + curr_pos = (event_pos[0], event_pos[1]) + + x1, y1 = curr_pos[0], curr_pos[1] + + # shape_type = self.ui.area_shape_radio.get_value() + + # do clear area only for left mouse clicks + if event.button == 1: + if self.shape_type == "square": + if self.first_click is False: + self.first_click = True + self.app.inform.emit('[WARNING_NOTCL] %s' % _("Click the end point of the area.")) + + self.cursor_pos = self.app.plotcanvas.translate_coords(event_pos) + if self.app.grid_status(): + self.cursor_pos = self.app.geo_editor.snap(event_pos[0], event_pos[1]) + else: + self.app.inform.emit(_("Zone added. Click to start adding next zone or right click to finish.")) + self.app.delete_selection_shape() + + x0, y0 = self.cursor_pos[0], self.cursor_pos[1] + + pt1 = (x0, y0) + pt2 = (x1, y0) + pt3 = (x1, y1) + pt4 = (x0, y1) + + new_rectangle = Polygon([pt1, pt2, pt3, pt4]) + + # { + # "obj_type": string("excellon" or "geometry") < - self.obj_type + # "shape": Shapely polygon + # "strategy": string("over" or "around") < - self.strategy + # "overz": float < - self.over_z + # } + new_el = { + "obj_type": self.obj_type, + "shape": new_rectangle, + "strategy": self.strategy, + "overz": self.over_z + } + self.exclusion_areas_storage.append(new_el) + + # add a temporary shape on canvas + FlatCAMTool.draw_tool_selection_shape( + self, old_coords=(x0, y0), coords=(x1, y1), + color="#FF7400", + face_color="#FF7400BF", + shapes_storage=self.exclusion_shapes) + + self.first_click = False + return + else: + self.points.append((x1, y1)) + + if len(self.points) > 1: + self.poly_drawn = True + self.app.inform.emit(_("Click on next Point or click right mouse button to complete ...")) + + return "" + elif event.button == right_button and self.mouse_is_dragging is False: + + shape_type = self.shape_type + + if shape_type == "square": + self.first_click = False + else: + # if we finish to add a polygon + if self.poly_drawn is True: + try: + # try to add the point where we last clicked if it is not already in the self.points + last_pt = (x1, y1) + if last_pt != self.points[-1]: + self.points.append(last_pt) + except IndexError: + pass + + # we need to add a Polygon and a Polygon can be made only from at least 3 points + if len(self.points) > 2: + FlatCAMTool.delete_moving_selection_shape(self) + pol = Polygon(self.points) + # do not add invalid polygons even if they are drawn by utility geometry + if pol.is_valid: + # { + # "obj_type": string("excellon" or "geometry") < - self.obj_type + # "shape": Shapely polygon + # "strategy": string("over" or "around") < - self.strategy + # "overz": float < - self.over_z + # } + new_el = { + "obj_type": self.obj_type, + "shape": pol, + "strategy": self.strategy, + "overz": self.over_z + } + self.exclusion_areas_storage.append(new_el) + FlatCAMTool.draw_selection_shape_polygon( + self, points=self.points, + color="#FF7400", + face_color="#FF7400BF", + shapes_storage=self.exclusion_shapes) + self.app.inform.emit( + _("Zone added. Click to start adding next zone or right click to finish.")) + + self.points = [] + self.poly_drawn = False + return + + # FlatCAMTool.delete_tool_selection_shape(self, shapes_storage=self.exclusion_shapes) + + if self.app.is_legacy is False: + self.app.plotcanvas.graph_event_disconnect('mouse_release', self.on_mouse_release) + self.app.plotcanvas.graph_event_disconnect('mouse_move', self.on_mouse_move) + # self.app.plotcanvas.graph_event_disconnect('key_press', self.on_key_press) + else: + self.app.plotcanvas.graph_event_disconnect(self.mr) + self.app.plotcanvas.graph_event_disconnect(self.mm) + # self.app.plotcanvas.graph_event_disconnect(self.kp) + + self.app.mp = self.app.plotcanvas.graph_event_connect('mouse_press', + self.app.on_mouse_click_over_plot) + self.app.mm = self.app.plotcanvas.graph_event_connect('mouse_move', + self.app.on_mouse_move_over_plot) + self.app.mr = self.app.plotcanvas.graph_event_connect('mouse_release', + self.app.on_mouse_click_release_over_plot) + + self.app.call_source = 'app' + + if len(self.exclusion_areas_storage) == 0: + return + + self.app.inform.emit( + "[success] %s" % _("Exclusion areas added. Checking overlap with the object geometry ...")) + + for el in self.exclusion_areas_storage: + if el["shape"].intersects(MultiPolygon(self.solid_geometry)): + self.on_clear_area_click() + self.app.inform.emit( + "[ERROR_NOTCL] %s" % _("Failed. Exclusion areas intersects the object geometry ...")) + return + + self.app.inform.emit( + "[success] %s" % _("Exclusion areas added.")) + self.cnc_button.setStyleSheet(""" + QPushButton + { + font-weight: bold; + color: orange; + } + """) + self.cnc_button.setToolTip( + '%s %s' % (_("Generate the CNC Job object."), _("With Exclusion areas.")) + ) + + for k in self.exclusion_areas_storage: + print(k) + + def area_disconnect(self): + if self.app.is_legacy is False: + self.app.plotcanvas.graph_event_disconnect('mouse_release', self.on_mouse_release) + self.app.plotcanvas.graph_event_disconnect('mouse_move', self.on_mouse_move) + else: + self.app.plotcanvas.graph_event_disconnect(self.mr) + self.app.plotcanvas.graph_event_disconnect(self.mm) + self.app.plotcanvas.graph_event_disconnect(self.kp) + + self.app.mp = self.app.plotcanvas.graph_event_connect('mouse_press', + self.app.on_mouse_click_over_plot) + self.app.mm = self.app.plotcanvas.graph_event_connect('mouse_move', + self.app.on_mouse_move_over_plot) + self.app.mr = self.app.plotcanvas.graph_event_connect('mouse_release', + self.app.on_mouse_click_release_over_plot) + self.points = [] + self.poly_drawn = False + self.exclusion_areas_storage = [] + + FlatCAMTool.delete_moving_selection_shape(self) + # FlatCAMTool.delete_tool_selection_shape(self, shapes_storage=self.exclusion_shapes) + + self.app.call_source = "app" + self.app.inform.emit("[WARNING_NOTCL] %s" % _("Cancelled. Area exclusion drawing was interrupted.")) + + # called on mouse move + def on_mouse_move(self, event): + shape_type = self.shape_type + + if self.app.is_legacy is False: + event_pos = event.pos + 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 + + curr_pos = self.app.plotcanvas.translate_coords(event_pos) + + # detect mouse dragging motion + if event_is_dragging is True: + self.mouse_is_dragging = True + else: + self.mouse_is_dragging = False + + # update the cursor position + if self.app.grid_status(): + # Update cursor + curr_pos = self.app.geo_editor.snap(curr_pos[0], curr_pos[1]) + + self.app.app_cursor.set_data(np.asarray([(curr_pos[0], curr_pos[1])]), + symbol='++', edge_color=self.app.cursor_color_3D, + edge_width=self.app.defaults["global_cursor_width"], + size=self.app.defaults["global_cursor_size"]) + + # update the positions on status bar + self.app.ui.position_label.setText("    X: %.4f   " + "Y: %.4f" % (curr_pos[0], curr_pos[1])) + if self.cursor_pos is None: + self.cursor_pos = (0, 0) + + self.app.dx = curr_pos[0] - float(self.cursor_pos[0]) + self.app.dy = curr_pos[1] - float(self.cursor_pos[1]) + self.app.ui.rel_position_label.setText("Dx: %.4f   Dy: " + "%.4f    " % (self.app.dx, self.app.dy)) + + # draw the utility geometry + if shape_type == "square": + if self.first_click: + self.app.delete_selection_shape() + self.app.draw_moving_selection_shape(old_coords=(self.cursor_pos[0], self.cursor_pos[1]), + color="#FF7400", + face_color="#FF7400BF", + coords=(curr_pos[0], curr_pos[1])) + else: + FlatCAMTool.delete_moving_selection_shape(self) + FlatCAMTool.draw_moving_selection_shape_poly( + self, points=self.points, + color="#FF7400", + face_color="#FF7400BF", + data=(curr_pos[0], curr_pos[1])) + + def on_clear_area_click(self): + self.exclusion_areas_storage.clear() + FlatCAMTool.delete_moving_selection_shape(self) + self.app.delete_selection_shape() + FlatCAMTool.delete_tool_selection_shape(self, shapes_storage=self.exclusion_shapes) + + # restore the default StyleSheet + self.cnc_button.setStyleSheet("") + # update the StyleSheet + self.cnc_button.setStyleSheet(""" + QPushButton + { + font-weight: bold; + } + """) + self.cnc_button.setToolTip('%s' % _("Generate the CNC Job object.")) diff --git a/flatcamObjects/FlatCAMGeometry.py b/flatcamObjects/FlatCAMGeometry.py index 62d5924d..1d2bad73 100644 --- a/flatcamObjects/FlatCAMGeometry.py +++ b/flatcamObjects/FlatCAMGeometry.py @@ -16,8 +16,6 @@ import shapely.affinity as affinity from camlib import Geometry from flatcamObjects.FlatCAMObj import * -from flatcamGUI.VisPyVisuals import ShapeCollection -import FlatCAMTool import ezdxf import math @@ -152,30 +150,6 @@ class GeometryObject(FlatCAMObj, Geometry): self.param_fields = {} - # Event signals disconnect id holders - self.mr = None - self.mm = None - self.kp = None - - # variables to be used in area exclusion - self.cursor_pos = (0, 0) - self.exclusion_areas_list = [] - self.first_click = False - self.points = [] - self.poly_drawn = False - - # Storage for shapes, storage that can be used by FlatCAm tools for utility geometry - # VisPy visuals - if self.app.is_legacy is False: - try: - self.exclusion_shapes = ShapeCollection(parent=self.app.plotcanvas.view.scene, layers=1) - except AttributeError: - self.exclusion_shapes = None - else: - from flatcamGUI.PlotCanvasLegacy import ShapeCollectionLegacy - self.exclusion_shapes = ShapeCollectionLegacy( - obj=self, app=self.app, name="exclusion" + self.options['name']) - # Attributes to be included in serialization # Always append to it because it carries contents # from predecessors. @@ -2479,6 +2453,21 @@ class GeometryObject(FlatCAMObj, Geometry): return factor + def on_add_area_click(self): + shape_button = self.ui.area_shape_radio + overz_button = self.ui.over_z_entry + strategy_radio = self.ui.strategy_radio + cnc_button = self.ui.generate_cnc_button + solid_geo = self.solid_geometry + obj_type = self.kind + + self.app.exc_areas.on_add_area_click( + shape_button=shape_button, overz_button=overz_button, cnc_button=cnc_button, strategy_radio=strategy_radio, + solid_geo=solid_geo, obj_type=obj_type) + + def on_clear_area_click(self): + self.app.exc_areas.on_clear_area_click() + def plot_element(self, element, color=None, visible=None): if color is None: @@ -2583,267 +2572,6 @@ class GeometryObject(FlatCAMObj, Geometry): self.ui.plot_cb.setChecked(True) self.ui_connect() - def on_add_area_click(self): - self.app.inform.emit('[WARNING_NOTCL] %s' % _("Click the start point of the area.")) - self.app.call_source = 'geometry' - - if self.app.is_legacy is False: - self.app.plotcanvas.graph_event_disconnect('mouse_press', self.app.on_mouse_click_over_plot) - self.app.plotcanvas.graph_event_disconnect('mouse_move', self.app.on_mouse_move_over_plot) - 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.mp) - self.app.plotcanvas.graph_event_disconnect(self.app.mm) - self.app.plotcanvas.graph_event_disconnect(self.app.mr) - - self.mr = self.app.plotcanvas.graph_event_connect('mouse_release', self.on_mouse_release) - self.mm = self.app.plotcanvas.graph_event_connect('mouse_move', self.on_mouse_move) - # self.kp = self.app.plotcanvas.graph_event_connect('key_press', self.on_key_press) - - # To be called after clicking on the plot. - def on_mouse_release(self, event): - if self.app.is_legacy is False: - event_pos = event.pos - # 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_pos = self.app.plotcanvas.translate_coords(event_pos) - if self.app.grid_status(): - curr_pos = self.app.geo_editor.snap(event_pos[0], event_pos[1]) - else: - curr_pos = (event_pos[0], event_pos[1]) - - x1, y1 = curr_pos[0], curr_pos[1] - - shape_type = self.ui.area_shape_radio.get_value() - - # do clear area only for left mouse clicks - if event.button == 1: - if shape_type == "square": - if self.first_click is False: - self.first_click = True - self.app.inform.emit('[WARNING_NOTCL] %s' % _("Click the end point of the area.")) - - self.cursor_pos = self.app.plotcanvas.translate_coords(event_pos) - if self.app.grid_status(): - self.cursor_pos = self.app.geo_editor.snap(event_pos[0], event_pos[1]) - else: - self.app.inform.emit(_("Zone added. Click to start adding next zone or right click to finish.")) - self.app.delete_selection_shape() - - x0, y0 = self.cursor_pos[0], self.cursor_pos[1] - - pt1 = (x0, y0) - pt2 = (x1, y0) - pt3 = (x1, y1) - pt4 = (x0, y1) - - new_rectangle = Polygon([pt1, pt2, pt3, pt4]) - self.exclusion_areas_list.append(new_rectangle) - - # add a temporary shape on canvas - FlatCAMTool.FlatCAMTool.draw_tool_selection_shape( - self, old_coords=(x0, y0), coords=(x1, y1), - color="#FF7400", - face_color="#FF7400BF", - shapes_storage=self.exclusion_shapes) - - self.first_click = False - return - else: - self.points.append((x1, y1)) - - if len(self.points) > 1: - self.poly_drawn = True - self.app.inform.emit(_("Click on next Point or click right mouse button to complete ...")) - - return "" - elif event.button == right_button and self.mouse_is_dragging is False: - - shape_type = self.ui.area_shape_radio.get_value() - - if shape_type == "square": - self.first_click = False - else: - # if we finish to add a polygon - if self.poly_drawn is True: - try: - # try to add the point where we last clicked if it is not already in the self.points - last_pt = (x1, y1) - if last_pt != self.points[-1]: - self.points.append(last_pt) - except IndexError: - pass - - # we need to add a Polygon and a Polygon can be made only from at least 3 points - if len(self.points) > 2: - FlatCAMTool.FlatCAMTool.delete_moving_selection_shape(self) - pol = Polygon(self.points) - # do not add invalid polygons even if they are drawn by utility geometry - if pol.is_valid: - self.exclusion_areas_list.append(pol) - FlatCAMTool.FlatCAMTool.draw_selection_shape_polygon( - self, points=self.points, - color="#FF7400", - face_color="#FF7400BF", - shapes_storage=self.exclusion_shapes) - self.app.inform.emit( - _("Zone added. Click to start adding next zone or right click to finish.")) - - self.points = [] - self.poly_drawn = False - return - - # FlatCAMTool.FlatCAMTool.delete_tool_selection_shape(self, shapes_storage=self.exclusion_shapes) - - if self.app.is_legacy is False: - self.app.plotcanvas.graph_event_disconnect('mouse_release', self.on_mouse_release) - self.app.plotcanvas.graph_event_disconnect('mouse_move', self.on_mouse_move) - # self.app.plotcanvas.graph_event_disconnect('key_press', self.on_key_press) - else: - self.app.plotcanvas.graph_event_disconnect(self.mr) - self.app.plotcanvas.graph_event_disconnect(self.mm) - # self.app.plotcanvas.graph_event_disconnect(self.kp) - - self.app.mp = self.app.plotcanvas.graph_event_connect('mouse_press', - self.app.on_mouse_click_over_plot) - self.app.mm = self.app.plotcanvas.graph_event_connect('mouse_move', - self.app.on_mouse_move_over_plot) - self.app.mr = self.app.plotcanvas.graph_event_connect('mouse_release', - self.app.on_mouse_click_release_over_plot) - - self.app.call_source = 'app' - - if len(self.exclusion_areas_list) == 0: - return - else: - self.exclusion_areas_list = MultiPolygon(self.exclusion_areas_list) - - self.app.inform.emit( - "[success] %s" % _("Exclusion areas added. Checking overlap with the object geometry ...")) - if self.exclusion_areas_list.intersects(MultiPolygon(self.solid_geometry)): - self.exclusion_areas_list = [] - self.app.inform.emit( - "[ERROR_NOTCL] %s" % _("Failed. Exclusion areas intersects the object geometry ...")) - return - else: - self.app.inform.emit( - "[success] %s" % _("Exclusion areas added.")) - self.ui.generate_cnc_button.setStyleSheet(""" - QPushButton - { - font-weight: bold; - color: orange; - } - """) - self.ui.generate_cnc_button.setToolTip( - '%s %s' % (_("Generate the CNC Job object."), _("With Exclusion areas.")) - ) - - def area_disconnect(self): - if self.app.is_legacy is False: - self.app.plotcanvas.graph_event_disconnect('mouse_release', self.on_mouse_release) - self.app.plotcanvas.graph_event_disconnect('mouse_move', self.on_mouse_move) - else: - self.app.plotcanvas.graph_event_disconnect(self.mr) - self.app.plotcanvas.graph_event_disconnect(self.mm) - self.app.plotcanvas.graph_event_disconnect(self.kp) - - self.app.mp = self.app.plotcanvas.graph_event_connect('mouse_press', - self.app.on_mouse_click_over_plot) - self.app.mm = self.app.plotcanvas.graph_event_connect('mouse_move', - self.app.on_mouse_move_over_plot) - self.app.mr = self.app.plotcanvas.graph_event_connect('mouse_release', - self.app.on_mouse_click_release_over_plot) - self.points = [] - self.poly_drawn = False - self.exclusion_areas_list = [] - - FlatCAMTool.FlatCAMTool.delete_moving_selection_shape(self) - # FlatCAMTool.FlatCAMTool.delete_tool_selection_shape(self, shapes_storage=self.exclusion_shapes) - - self.app.call_source = "app" - self.app.inform.emit("[WARNING_NOTCL] %s" % _("Cancelled. Area exclusion drawing was interrupted.")) - - # called on mouse move - def on_mouse_move(self, event): - shape_type = self.ui.area_shape_radio.get_value() - - if self.app.is_legacy is False: - event_pos = event.pos - 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 - - curr_pos = self.app.plotcanvas.translate_coords(event_pos) - - # detect mouse dragging motion - if event_is_dragging is True: - self.mouse_is_dragging = True - else: - self.mouse_is_dragging = False - - # update the cursor position - if self.app.grid_status(): - # Update cursor - curr_pos = self.app.geo_editor.snap(curr_pos[0], curr_pos[1]) - - self.app.app_cursor.set_data(np.asarray([(curr_pos[0], curr_pos[1])]), - symbol='++', edge_color=self.app.cursor_color_3D, - edge_width=self.app.defaults["global_cursor_width"], - size=self.app.defaults["global_cursor_size"]) - - # update the positions on status bar - self.app.ui.position_label.setText("    X: %.4f   " - "Y: %.4f" % (curr_pos[0], curr_pos[1])) - if self.cursor_pos is None: - self.cursor_pos = (0, 0) - - self.app.dx = curr_pos[0] - float(self.cursor_pos[0]) - self.app.dy = curr_pos[1] - float(self.cursor_pos[1]) - self.app.ui.rel_position_label.setText("Dx: %.4f   Dy: " - "%.4f    " % (self.app.dx, self.app.dy)) - - # draw the utility geometry - if shape_type == "square": - if self.first_click: - self.app.delete_selection_shape() - self.app.draw_moving_selection_shape(old_coords=(self.cursor_pos[0], self.cursor_pos[1]), - color="#FF7400", - face_color="#FF7400BF", - coords=(curr_pos[0], curr_pos[1])) - else: - FlatCAMTool.FlatCAMTool.delete_moving_selection_shape(self) - FlatCAMTool.FlatCAMTool.draw_moving_selection_shape_poly( - self, points=self.points, - color="#FF7400", - face_color="#FF7400BF", - data=(curr_pos[0], curr_pos[1])) - - def on_clear_area_click(self): - self.exclusion_areas_list = [] - FlatCAMTool.FlatCAMTool.delete_moving_selection_shape(self) - self.app.delete_selection_shape() - FlatCAMTool.FlatCAMTool.delete_tool_selection_shape(self, shapes_storage=self.exclusion_shapes) - - # restore the default StyleSheet - self.ui.generate_cnc_button.setStyleSheet("") - # update the StyleSheet - self.ui.generate_cnc_button.setStyleSheet(""" - QPushButton - { - font-weight: bold; - } - """) - self.ui.generate_cnc_button.setToolTip('%s' % _("Generate the CNC Job object.")) - @staticmethod def merge(geo_list, geo_final, multigeo=None): """ From afbe2d974f21293ca6342398440aef95d59a7b7c Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Wed, 6 May 2020 04:11:31 +0300 Subject: [PATCH 06/99] - handled the New project event and the object deletion (when all objects are deleted then the exclusion areas will be deleted too) --- CHANGELOG.md | 7 ++++--- FlatCAMApp.py | 12 +++++++----- FlatCAMCommon.py | 11 +++++++---- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6a962f28..2269d4d0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,16 +10,17 @@ CHANGELOG for FlatCAM beta 6.05.2020 - wip in adding Exclusion areas in Geometry object; each Geometry object has now a storage for shapes (exclusion shapes, should I make them more general?) -- changed the above: too many shapes collections and the performance will go down. Created a class Exclusion areas that holds all the require properties and the Object UI elements will connect to it's methods. This way I can apply this to Excellon object too (who are a special type of Geometry Object) +- changed the above: too many shapes collections and the performance will go down. Created a class ExclusionAreas that holds all the require properties and the Object UI elements will connect to it's methods. This way I can apply this feature to Excellon object too (who is a special type of Geometry Object) +- handled the New project event and the object deletion (when all objects are deleted then the exclusion areas will be deleted too) 5.05.2020 -- fixed an issue that made the preprocessors comboxes in Preferences not to load and display the saved value fro the file +- fixed an issue that made the preprocessors combo boxes in Preferences not to load and display the saved value fro the file - some PEP8 corrections 4.05.2020 -- in detachable tabs, Linux loose the reference of the detached tab and on close of the detachable tabs will gave a 'segmantation fault' error. Solved it by not deleting the reference in case of Unix-like systems +- in detachable tabs, Linux loose the reference of the detached tab and on close of the detachable tabs will gave a 'segmentation fault' error. Solved it by not deleting the reference in case of Unix-like systems - some strings added to translation strings 3.05.2020 diff --git a/FlatCAMApp.py b/FlatCAMApp.py index 16c54bf9..994f422e 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -5130,11 +5130,6 @@ class App(QtCore.QObject): obj_active.mark_shapes[el].enabled = False # obj_active.mark_shapes[el] = None del el - # if the deleted object is GerberObject then make sure to delete the possible mark shapes - if obj_active.kind == 'geometry': - obj_active.exclusion_shapes.clear(update=True) - obj_active.exclusion_shapes.enabled = False - del obj_active.exclusion_shapes elif isinstance(obj_active, CNCJobObject): try: obj_active.text_col.enabled = False @@ -5152,6 +5147,10 @@ class App(QtCore.QObject): self.inform.emit('%s...' % _("Object(s) deleted")) # make sure that the selection shape is deleted, too self.delete_selection_shape() + + # if there are no longer objects delete also the exclusion areas shapes + if not self.collection.get_list(): + self.exc_areas.clear_shapes() else: self.inform.emit('[ERROR_NOTCL] %s' % _("Failed. No object(s) selected...")) else: @@ -7419,6 +7418,9 @@ class App(QtCore.QObject): except AttributeError: pass + # delete the exclusion areas + self.exc_areas.clear_shapes() + # tcl needs to be reinitialized, otherwise old shell variables etc remains self.shell.init_tcl() diff --git a/FlatCAMCommon.py b/FlatCAMCommon.py index f9e8c3f6..8897662e 100644 --- a/FlatCAMCommon.py +++ b/FlatCAMCommon.py @@ -472,10 +472,7 @@ class ExclusionAreas: data=(curr_pos[0], curr_pos[1])) def on_clear_area_click(self): - self.exclusion_areas_storage.clear() - FlatCAMTool.delete_moving_selection_shape(self) - self.app.delete_selection_shape() - FlatCAMTool.delete_tool_selection_shape(self, shapes_storage=self.exclusion_shapes) + self.clear_shapes() # restore the default StyleSheet self.cnc_button.setStyleSheet("") @@ -487,3 +484,9 @@ class ExclusionAreas: } """) self.cnc_button.setToolTip('%s' % _("Generate the CNC Job object.")) + + def clear_shapes(self): + self.exclusion_areas_storage.clear() + FlatCAMTool.delete_moving_selection_shape(self) + self.app.delete_selection_shape() + FlatCAMTool.delete_tool_selection_shape(self, shapes_storage=self.exclusion_shapes) From a161354c25e5d624f9332afcaf27cf12a7741d1c Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Wed, 6 May 2020 16:37:48 +0300 Subject: [PATCH 07/99] - solved issue with new parameter end_xy when it is None - solved issue with applying theme and not making the change in the Preferences UI. In Preferences UI the theme radio is always Light (white) - now the annotations will invert the selected color in the Preferences, when selecting Dark theme --- CHANGELOG.md | 3 + FlatCAMApp.py | 3 + FlatCAMCommon.py | 25 +++ camlib.py | 155 ++++++------------ .../general/GeneralGUIPrefGroupUI.py | 17 +- 5 files changed, 96 insertions(+), 107 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2269d4d0..fbcc3f4c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,9 @@ CHANGELOG for FlatCAM beta - wip in adding Exclusion areas in Geometry object; each Geometry object has now a storage for shapes (exclusion shapes, should I make them more general?) - changed the above: too many shapes collections and the performance will go down. Created a class ExclusionAreas that holds all the require properties and the Object UI elements will connect to it's methods. This way I can apply this feature to Excellon object too (who is a special type of Geometry Object) - handled the New project event and the object deletion (when all objects are deleted then the exclusion areas will be deleted too) +- solved issue with new parameter end_xy when it is None +- solved issue with applying theme and not making the change in the Preferences UI. In Preferences UI the theme radio is always Light (white) +- now the annotations will invert the selected color in the Preferences, when selecting Dark theme 5.05.2020 diff --git a/FlatCAMApp.py b/FlatCAMApp.py index 994f422e..eb4e9569 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -522,6 +522,9 @@ class App(QtCore.QObject): else: self.cursor_color_3D = 'gray' + # update the defaults dict with the setting in QSetting + self.defaults['global_theme'] = theme + self.ui.geom_update[int, int, int, int, int].connect(self.save_geometry) self.ui.final_save.connect(self.final_save) diff --git a/FlatCAMCommon.py b/FlatCAMCommon.py index 8897662e..c29ac4f3 100644 --- a/FlatCAMCommon.py +++ b/FlatCAMCommon.py @@ -17,6 +17,7 @@ from flatcamGUI.VisPyVisuals import ShapeCollection from FlatCAMTool import FlatCAMTool import numpy as np +import re import gettext import FlatCAMTranslation as fcTranslate @@ -490,3 +491,27 @@ class ExclusionAreas: FlatCAMTool.delete_moving_selection_shape(self) self.app.delete_selection_shape() FlatCAMTool.delete_tool_selection_shape(self, shapes_storage=self.exclusion_shapes) + + +class InvertHexColor: + """ + Will invert a hex color made out of 3 chars or 6 chars + From here: http://code.activestate.com/recipes/527747-invert-css-hex-colors/ + """ + def __init__(self): + self.p6 = re.compile("#[0-9a-f]{6};", re.IGNORECASE) + self.p3 = re.compile("#[0-9a-f]{3};", re.IGNORECASE) + + def modify(self, original_color=3): + code = {} + l1 = "#;0123456789abcdef" + l2 = "#;fedcba9876543210" + + for i in range(len(l1)): + code[l1[i]] = l2[i] + inverted = "" + + content = p6.sub(modify, content) + content = p3.sub(modify, content) + return inverted + diff --git a/camlib.py b/camlib.py index 6e5bdcf2..e7070fa4 100644 --- a/camlib.py +++ b/camlib.py @@ -2671,8 +2671,11 @@ class CNCjob(Geometry): if self.xy_toolchange == '': self.xy_toolchange = None else: - self.xy_toolchange = re.sub('[()\[\]]', '', str(self.xy_toolchange)) - self.xy_toolchange = [float(eval(a)) for a in self.xy_toolchange.split(",") if self.xy_toolchange != ''] + self.xy_toolchange = re.sub('[()\[\]]', '', str(self.xy_toolchange)) if self.xy_toolchange else None + + if self.xy_toolchange and self.xy_toolchange != '': + self.xy_toolchange = [float(eval(a)) for a in self.xy_toolchange.split(",")] + if self.xy_toolchange and len(self.xy_toolchange) < 2: self.app.inform.emit('[ERROR]%s' % _("The Toolchange X,Y field in Edit -> Preferences has to be " @@ -2682,8 +2685,11 @@ class CNCjob(Geometry): log.debug("camlib.CNCJob.generate_from_excellon_by_tool() --> %s" % str(e)) pass - self.xy_end = re.sub('[()\[\]]', '', str(self.xy_end)) - self.xy_end = [float(eval(a)) for a in self.xy_end.split(",") if self.xy_end != ''] + self.xy_end = re.sub('[()\[\]]', '', str(self.xy_end)) if self.xy_end else None + + if self.xy_end and self.xy_end != '': + self.xy_end = [float(eval(a)) for a in self.xy_end.split(",")] + if self.xy_end and len(self.xy_end) < 2: self.app.inform.emit('[ERROR] %s' % _("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.")) @@ -3583,8 +3589,11 @@ class CNCjob(Geometry): self.startz = float(startz) if startz is not None else None self.z_end = float(endz) if endz is not None else None - self.xy_end = re.sub('[()\[\]]', '', str(endxy)) - self.xy_end = [float(eval(a)) for a in self.xy_end.split(",") if endxy != ''] + self.xy_end = re.sub('[()\[\]]', '', str(endxy)) if endxy else None + + if self.xy_end and self.xy_end != '': + self.xy_end = [float(eval(a)) for a in self.xy_end.split(",")] + if self.xy_end and len(self.xy_end) < 2: self.app.inform.emit('[ERROR] %s' % _("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.")) @@ -3602,8 +3611,11 @@ class CNCjob(Geometry): if toolchangexy == '': self.xy_toolchange = None else: - self.xy_toolchange = re.sub('[()\[\]]', '', str(toolchangexy)) - self.xy_toolchange = [float(eval(a)) for a in self.xy_toolchange.split(",")] + self.xy_toolchange = re.sub('[()\[\]]', '', str(toolchangexy)) if toolchangexy else None + + if self.xy_toolchange and self.xy_toolchange != '': + self.xy_toolchange = [float(eval(a)) for a in self.xy_toolchange.split(",")] + if len(self.xy_toolchange) < 2: self.app.inform.emit('[ERROR] %s' % _("The Toolchange X,Y field in Edit -> Preferences has to be " "in the format (x, y) \n" @@ -3970,9 +3982,12 @@ class CNCjob(Geometry): self.startz = float(startz) if startz is not None else self.app.defaults["geometry_startz"] self.z_end = float(endz) if endz is not None else self.app.defaults["geometry_endz"] - self.xy_end = endxy if endxy != '' else self.app.defaults["geometry_endxy"] - self.xy_end = re.sub('[()\[\]]', '', str(self.xy_end)) - self.xy_end = [float(eval(a)) for a in self.xy_end.split(",") if self.xy_end != ''] + self.xy_end = endxy if endxy != '' and endxy else self.app.defaults["geometry_endxy"] + self.xy_end = re.sub('[()\[\]]', '', str(self.xy_end)) if self.xy_end else None + + if self.xy_end is not None and self.xy_end != '': + self.xy_end = [float(eval(a)) for a in self.xy_end.split(",")] + if self.xy_end and len(self.xy_end) < 2: self.app.inform.emit('[ERROR] %s' % _("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.")) @@ -3988,8 +4003,11 @@ class CNCjob(Geometry): if toolchangexy == '': self.xy_toolchange = None else: - self.xy_toolchange = re.sub('[()\[\]]', '', str(toolchangexy)) - self.xy_toolchange = [float(eval(a)) for a in self.xy_toolchange.split(",")] + self.xy_toolchange = re.sub('[()\[\]]', '', str(toolchangexy)) if self.xy_toolchange else None + + if self.xy_toolchange and self.xy_toolchange != '': + self.xy_toolchange = [float(eval(a)) for a in self.xy_toolchange.split(",")] + if len(self.xy_toolchange) < 2: self.app.inform.emit( '[ERROR] %s' % @@ -4875,97 +4893,30 @@ class CNCjob(Geometry): if geo['kind'][0] == 'C': obj.add_shape(shape=poly, color=color['C'][1], face_color=color['C'][0], visible=visible, layer=1) - # current_x = gcode_parsed[0]['geom'].coords[0][0] - # current_y = gcode_parsed[0]['geom'].coords[0][1] - # old_pos = ( - # current_x, - # current_y - # ) - # - # for geo in gcode_parsed: - # if geo['kind'][0] == 'T': - # current_position = ( - # geo['geom'].coords[0][0] + old_pos[0], - # geo['geom'].coords[0][1] + old_pos[1] - # ) - # if current_position not in pos: - # pos.append(current_position) - # path_num += 1 - # text.append(str(path_num)) - # - # delta = ( - # geo['geom'].coords[-1][0] - geo['geom'].coords[0][0], - # geo['geom'].coords[-1][1] - geo['geom'].coords[0][1] - # ) - # current_position = ( - # current_position[0] + geo['geom'].coords[-1][0], - # current_position[1] + geo['geom'].coords[-1][1] - # ) - # if current_position not in pos: - # pos.append(current_position) - # path_num += 1 - # text.append(str(path_num)) - # - # # plot the geometry of Excellon objects - # if self.origin_kind == 'excellon': - # if isinstance(geo['geom'], Point): - # # if geo is Point - # current_position = ( - # current_position[0] + geo['geom'].x, - # current_position[1] + geo['geom'].y - # ) - # poly = Polygon(Point(current_position)) - # elif isinstance(geo['geom'], LineString): - # # if the geos are travel lines (LineStrings) - # new_line_pts = [] - # old_line_pos = deepcopy(current_position) - # for p in list(geo['geom'].coords): - # current_position = ( - # current_position[0] + p[0], - # current_position[1] + p[1] - # ) - # new_line_pts.append(current_position) - # old_line_pos = p - # new_line = LineString(new_line_pts) - # - # poly = new_line.buffer(distance=(tooldia / 1.99999999), resolution=self.steps_per_circle) - # poly = poly.simplify(tool_tolerance) - # else: - # # plot the geometry of any objects other than Excellon - # new_line_pts = [] - # old_line_pos = deepcopy(current_position) - # for p in list(geo['geom'].coords): - # current_position = ( - # current_position[0] + p[0], - # current_position[1] + p[1] - # ) - # new_line_pts.append(current_position) - # old_line_pos = p - # new_line = LineString(new_line_pts) - # - # poly = new_line.buffer(distance=(tooldia / 1.99999999), resolution=self.steps_per_circle) - # poly = poly.simplify(tool_tolerance) - # - # old_pos = deepcopy(current_position) - # - # if kind == 'all': - # obj.add_shape(shape=poly, color=color[geo['kind'][0]][1], face_color=color[geo['kind'][0]][0], - # visible=visible, layer=1 if geo['kind'][0] == 'C' else 2) - # elif kind == 'travel': - # if geo['kind'][0] == 'T': - # obj.add_shape(shape=poly, color=color['T'][1], face_color=color['T'][0], - # visible=visible, layer=2) - # elif kind == 'cut': - # if geo['kind'][0] == 'C': - # obj.add_shape(shape=poly, color=color['C'][1], face_color=color['C'][0], - # visible=visible, layer=1) try: - obj.annotation.set(text=text, pos=pos, visible=obj.options['plot'], - font_size=self.app.defaults["cncjob_annotation_fontsize"], - color=self.app.defaults["cncjob_annotation_fontcolor"]) - except Exception: - pass + if self.app.defaults['global_theme'] == 'white': + obj.annotation.set(text=text, pos=pos, visible=obj.options['plot'], + font_size=self.app.defaults["cncjob_annotation_fontsize"], + color=self.app.defaults["cncjob_annotation_fontcolor"]) + else: + # invert the color + old_color = self.app.defaults["cncjob_annotation_fontcolor"].lower() + new_color = '' + code = {} + l1 = "#;0123456789abcdef" + l2 = "#;fedcba9876543210" + for i in range(len(l1)): + code[l1[i]] = l2[i] + + for x in range(len(old_color)): + new_color += code[old_color[x]] + + obj.annotation.set(text=text, pos=pos, visible=obj.options['plot'], + font_size=self.app.defaults["cncjob_annotation_fontsize"], + color=new_color) + except Exception as e: + log.debug("CNCJob.plot2() --> annotations --> %s" % str(e)) def create_geometry(self): self.app.inform.emit('%s: %s' % (_("Unifying Geometry from parsed Geometry segments"), diff --git a/flatcamGUI/preferences/general/GeneralGUIPrefGroupUI.py b/flatcamGUI/preferences/general/GeneralGUIPrefGroupUI.py index 94044c27..d71fab4c 100644 --- a/flatcamGUI/preferences/general/GeneralGUIPrefGroupUI.py +++ b/flatcamGUI/preferences/general/GeneralGUIPrefGroupUI.py @@ -420,13 +420,20 @@ class GeneralGUIPrefGroupUI(OptionsGroupUI): def on_theme_change(self): val = self.theme_radio.get_value() - qsettings = QSettings("Open Source", "FlatCAM") - qsettings.setValue('theme', val) - # This will write the setting to the platform specific storage. - del qsettings + theme_settings = QtCore.QSettings("Open Source", "FlatCAM") + if theme_settings.contains("theme"): + theme = theme_settings.value('theme', type=str) + else: + theme = 'white' - self.app.on_app_restart() + if val != theme: + theme_settings.setValue('theme', val) + + # This will write the setting to the platform specific storage. + del theme_settings + + self.app.on_app_restart() @staticmethod def handle_style(style): From 4ece23c456d889a635c279e6e1570ee8977946bb Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Thu, 7 May 2020 00:46:02 +0300 Subject: [PATCH 08/99] - added a fix so the app close is now clean, with exit code 0 as set --- CHANGELOG.md | 4 ++++ FlatCAMApp.py | 14 +++++++++----- FlatCAMCommon.py | 24 ------------------------ FlatCAMTranslation.py | 3 +-- flatcamObjects/FlatCAMGeometry.py | 18 +++++++----------- 5 files changed, 21 insertions(+), 42 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fbcc3f4c..75b8e67c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ CHANGELOG for FlatCAM beta ================================================= +7.05.2020 + +- added a fix so the app close is now clean, with exit code 0 as set + 6.05.2020 - wip in adding Exclusion areas in Geometry object; each Geometry object has now a storage for shapes (exclusion shapes, should I make them more general?) diff --git a/FlatCAMApp.py b/FlatCAMApp.py index eb4e9569..d845b0c2 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -3598,14 +3598,13 @@ class App(QtCore.QObject): # try to quit the Socket opened by ArgsThread class try: - self.new_launch.thread_exit = True - self.new_launch.listener.close() + self.new_launch.stop.emit() except Exception as err: log.debug("App.quit_application() --> %s" % str(err)) # try to quit the QThread that run ArgsThread class try: - self.th.terminate() + self.th.quit() except Exception as e: log.debug("App.quit_application() --> %s" % str(e)) @@ -3615,7 +3614,6 @@ class App(QtCore.QObject): # quit app by signalling for self.kill_app() method # self.close_app_signal.emit() QtWidgets.qApp.quit() - # QtCore.QCoreApplication.exit() # When the main event loop is not started yet in which case the qApp.quit() will do nothing # we use the following command @@ -3627,7 +3625,6 @@ class App(QtCore.QObject): @staticmethod def kill_app(): - # QtCore.QCoreApplication.quit() QtWidgets.qApp.quit() # When the main event loop is not started yet in which case the qApp.quit() will do nothing # we use the following command @@ -10888,6 +10885,7 @@ class App(QtCore.QObject): class ArgsThread(QtCore.QObject): open_signal = pyqtSignal(list) start = pyqtSignal() + stop = pyqtSignal() if sys.platform == 'win32': address = (r'\\.\pipe\NPtest', 'AF_PIPE') @@ -10900,6 +10898,7 @@ class ArgsThread(QtCore.QObject): self.thread_exit = False self.start.connect(self.run) + self.stop.connect(self.close_listener) def my_loop(self, address): try: @@ -10943,4 +10942,9 @@ class ArgsThread(QtCore.QObject): def run(self): self.my_loop(self.address) + @pyqtSlot() + def close_listener(self): + self.thread_exit = True + self.listener.close() + # end of file diff --git a/FlatCAMCommon.py b/FlatCAMCommon.py index c29ac4f3..ab60dccd 100644 --- a/FlatCAMCommon.py +++ b/FlatCAMCommon.py @@ -491,27 +491,3 @@ class ExclusionAreas: FlatCAMTool.delete_moving_selection_shape(self) self.app.delete_selection_shape() FlatCAMTool.delete_tool_selection_shape(self, shapes_storage=self.exclusion_shapes) - - -class InvertHexColor: - """ - Will invert a hex color made out of 3 chars or 6 chars - From here: http://code.activestate.com/recipes/527747-invert-css-hex-colors/ - """ - def __init__(self): - self.p6 = re.compile("#[0-9a-f]{6};", re.IGNORECASE) - self.p3 = re.compile("#[0-9a-f]{3};", re.IGNORECASE) - - def modify(self, original_color=3): - code = {} - l1 = "#;0123456789abcdef" - l2 = "#;fedcba9876543210" - - for i in range(len(l1)): - code[l1[i]] = l2[i] - inverted = "" - - content = p6.sub(modify, content) - content = p3.sub(modify, content) - return inverted - diff --git a/FlatCAMTranslation.py b/FlatCAMTranslation.py index 4e8edbf3..82a8ac33 100644 --- a/FlatCAMTranslation.py +++ b/FlatCAMTranslation.py @@ -186,8 +186,7 @@ def restart_program(app, ask=None): # try to quit the Socket opened by ArgsThread class try: - app.new_launch.thread_exit = True - app.new_launch.listener.close() + app.new_launch.stop.emit() except Exception as err: log.debug("FlatCAMTranslation.restart_program() --> %s" % str(err)) diff --git a/flatcamObjects/FlatCAMGeometry.py b/flatcamObjects/FlatCAMGeometry.py index 1d2bad73..9cfeab20 100644 --- a/flatcamObjects/FlatCAMGeometry.py +++ b/flatcamObjects/FlatCAMGeometry.py @@ -1674,15 +1674,11 @@ class GeometryObject(FlatCAMObj, Geometry): 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 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 tools_in_use list of lists, each list in the list is made out of row elements of tools table from GUI :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 @@ -1726,7 +1722,7 @@ class GeometryObject(FlatCAMObj, Geometry): # count the tools tool_cnt = 0 - dia_cnc_dict = {} + # dia_cnc_dict = {} # this turn on the FlatCAMCNCJob plot for multiple tools job_obj.multitool = True @@ -1866,7 +1862,7 @@ class GeometryObject(FlatCAMObj, Geometry): # count the tools tool_cnt = 0 - dia_cnc_dict = {} + # dia_cnc_dict = {} # this turn on the FlatCAMCNCJob plot for multiple tools job_obj.multitool = True @@ -2040,7 +2036,7 @@ class GeometryObject(FlatCAMObj, Geometry): use_thread=True, plot=True): """ - Only used for TCL Command. + Only used by the TCL Command Cncjob. Creates a CNCJob out of this Geometry object. The actual work is done by the target camlib.CNCjob `generate_from_geometry_2()` method. From eea80aafc32d101559c4da55050b05306e4e0c4d Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Thu, 7 May 2020 01:38:08 +0300 Subject: [PATCH 09/99] - added the ability to add exclusion areas from the Excellon object too. Now there is a different in color to differentiate from which type of object the exclusion areas were added but they all serve the same purpose --- CHANGELOG.md | 1 + FlatCAMCommon.py | 39 +++++++++++--- defaults.py | 4 ++ flatcamGUI/ObjectUI.py | 85 +++++++++++++++++++++++++++++-- flatcamObjects/FlatCAMExcellon.py | 24 ++++++++- 5 files changed, 141 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 75b8e67c..1b5e26b3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ CHANGELOG for FlatCAM beta 7.05.2020 - added a fix so the app close is now clean, with exit code 0 as set +- added the ability to add exclusion areas from the Excellon object too. Now there is a different in color to differentiate from which type of object the exclusion areas were added but they all serve the same purpose 6.05.2020 diff --git a/FlatCAMCommon.py b/FlatCAMCommon.py index ab60dccd..476eb1cc 100644 --- a/FlatCAMCommon.py +++ b/FlatCAMCommon.py @@ -275,11 +275,18 @@ class ExclusionAreas: } self.exclusion_areas_storage.append(new_el) + if self.obj_type == 'excellon': + color = "#FF7400" + face_color = "#FF7400BF" + else: + color = "#098a8f" + face_color = "#098a8fBF" + # add a temporary shape on canvas FlatCAMTool.draw_tool_selection_shape( self, old_coords=(x0, y0), coords=(x1, y1), - color="#FF7400", - face_color="#FF7400BF", + color=color, + face_color=face_color, shapes_storage=self.exclusion_shapes) self.first_click = False @@ -328,10 +335,18 @@ class ExclusionAreas: "overz": self.over_z } self.exclusion_areas_storage.append(new_el) + + if self.obj_type == 'excellon': + color = "#FF7400" + face_color = "#FF7400BF" + else: + color = "#098a8f" + face_color = "#098a8fBF" + FlatCAMTool.draw_selection_shape_polygon( self, points=self.points, - color="#FF7400", - face_color="#FF7400BF", + color=color, + face_color=face_color, shapes_storage=self.exclusion_shapes) self.app.inform.emit( _("Zone added. Click to start adding next zone or right click to finish.")) @@ -456,20 +471,28 @@ class ExclusionAreas: self.app.ui.rel_position_label.setText("Dx: %.4f   Dy: " "%.4f    " % (self.app.dx, self.app.dy)) + if self.obj_type == 'excellon': + color = "#FF7400" + face_color = "#FF7400BF" + else: + color = "#098a8f" + face_color = "#098a8fBF" + # draw the utility geometry if shape_type == "square": if self.first_click: self.app.delete_selection_shape() + self.app.draw_moving_selection_shape(old_coords=(self.cursor_pos[0], self.cursor_pos[1]), - color="#FF7400", - face_color="#FF7400BF", + color=color, + face_color=face_color, coords=(curr_pos[0], curr_pos[1])) else: FlatCAMTool.delete_moving_selection_shape(self) FlatCAMTool.draw_moving_selection_shape_poly( self, points=self.points, - color="#FF7400", - face_color="#FF7400BF", + color=color, + face_color=face_color, data=(curr_pos[0], curr_pos[1])) def on_clear_area_click(self): diff --git a/defaults.py b/defaults.py index ffd84874..a730dfe9 100644 --- a/defaults.py +++ b/defaults.py @@ -263,6 +263,10 @@ class FlatCAMDefaults: "excellon_tooldia": 0.8, "excellon_slot_tooldia": 1.8, "excellon_gcode_type": "drills", + "excellon_area_exclusion": False, + "excellon_area_shape": "polygon", + "excellon_area_strategy": "over", + "excellon_area_overz": 1.0, # Excellon Advanced Options "excellon_offset": 0.0, diff --git a/flatcamGUI/ObjectUI.py b/flatcamGUI/ObjectUI.py index c5dacb42..f683ea18 100644 --- a/flatcamGUI/ObjectUI.py +++ b/flatcamGUI/ObjectUI.py @@ -1292,10 +1292,89 @@ class ExcellonObjectUI(ObjectUI): self.grid5.addWidget(pp_geo_label, 16, 0) self.grid5.addWidget(self.pp_geo_name_cb, 16, 1) + # Exclusion Areas + self.exclusion_cb = FCCheckBox('%s' % _("Exclusion areas")) + self.exclusion_cb.setToolTip( + _( + "Include exclusion areas.\n" + "In those areas the travel of the tools\n" + "is forbidden." + ) + ) + self.grid5.addWidget(self.exclusion_cb, 17, 0, 1, 2) + + # ------------------------------------------------------------------------------------------------------------ + # ------------------------- EXCLUSION AREAS ------------------------------------------------------------------ + # ------------------------------------------------------------------------------------------------------------ + self.exclusion_frame = QtWidgets.QFrame() + self.exclusion_frame.setContentsMargins(0, 0, 0, 0) + self.grid5.addWidget(self.exclusion_frame, 18, 0, 1, 2) + + self.exclusion_box = QtWidgets.QVBoxLayout() + self.exclusion_box.setContentsMargins(0, 0, 0, 0) + self.exclusion_frame.setLayout(self.exclusion_box) + + h_lay = QtWidgets.QHBoxLayout() + self.exclusion_box.addLayout(h_lay) + + # Button Add Area + self.add_area_button = QtWidgets.QPushButton(_('Add area')) + self.add_area_button.setToolTip(_("Add an Exclusion Area.")) + h_lay.addWidget(self.add_area_button) + + # Button Delete Area + self.delete_area_button = QtWidgets.QPushButton(_('Clear areas')) + self.delete_area_button.setToolTip(_("Delete all exclusion areas.")) + h_lay.addWidget(self.delete_area_button) + + grid_l = QtWidgets.QGridLayout() + grid_l.setColumnStretch(0, 0) + grid_l.setColumnStretch(1, 1) + self.exclusion_box.addLayout(grid_l) + + # Area Selection shape + self.area_shape_label = QtWidgets.QLabel('%s:' % _("Shape")) + self.area_shape_label.setToolTip( + _("The kind of selection shape used for area selection.") + ) + + self.area_shape_radio = RadioSet([{'label': _("Square"), 'value': 'square'}, + {'label': _("Polygon"), 'value': 'polygon'}]) + + grid_l.addWidget(self.area_shape_label, 0, 0) + grid_l.addWidget(self.area_shape_radio, 0, 1) + + # Chose Strategy + self.strategy_label = FCLabel('%s:' % _("Strategy")) + self.strategy_label.setToolTip(_("The strategy followed when encountering an exclusion area.\n" + "Can be:\n" + "- Over -> when encountering the area, the tool will go to a set height\n" + "- Around -> will avoid the exclusion area by going around the area")) + self.strategy_radio = RadioSet([{'label': _('Over'), 'value': 'over'}, + {'label': _('Around'), 'value': 'around'}]) + + grid_l.addWidget(self.strategy_label, 1, 0) + grid_l.addWidget(self.strategy_radio, 1, 1) + + # Over Z + self.over_z_label = FCLabel('%s:' % _("Over Z")) + self.over_z_label.setToolTip(_("The height Z to which the tool will rise in order to avoid\n" + "an interdiction area.")) + self.over_z_entry = FCDoubleSpinner() + self.over_z_entry.set_range(0.000, 9999.9999) + self.over_z_entry.set_precision(self.decimals) + + grid_l.addWidget(self.over_z_label, 2, 0) + grid_l.addWidget(self.over_z_entry, 2, 1) + + # -------------------------- EXCLUSION AREAS END ------------------------------------------------------------- + # ------------------------------------------------------------------------------------------------------------ + self.ois_exclusion_geo = OptionalHideInputSection(self.exclusion_cb, [self.exclusion_frame]) + separator_line = QtWidgets.QFrame() separator_line.setFrameShape(QtWidgets.QFrame.HLine) separator_line.setFrameShadow(QtWidgets.QFrame.Sunken) - self.grid5.addWidget(separator_line, 17, 0, 1, 2) + self.grid5.addWidget(separator_line, 19, 0, 1, 2) # ################################################################# # ################# GRID LAYOUT 6 ############################### @@ -2025,7 +2104,7 @@ class GeometryObjectUI(ObjectUI): # grid4.addWidget(QtWidgets.QLabel(''), 12, 0, 1, 2) # Exclusion Areas - self.exclusion_cb = FCCheckBox('%s:' % _("Exclusion areas")) + self.exclusion_cb = FCCheckBox('%s' % _("Exclusion areas")) self.exclusion_cb.setToolTip( _( "Include exclusion areas.\n" @@ -2101,7 +2180,7 @@ class GeometryObjectUI(ObjectUI): # -------------------------- EXCLUSION AREAS END ------------------------------------------------------------- # ------------------------------------------------------------------------------------------------------------ - self.ois_exclusion_geo = OptionalInputSection(self.exclusion_cb, [self.exclusion_frame]) + self.ois_exclusion_geo = OptionalHideInputSection(self.exclusion_cb, [self.exclusion_frame]) warning_lbl = QtWidgets.QLabel( _( diff --git a/flatcamObjects/FlatCAMExcellon.py b/flatcamObjects/FlatCAMExcellon.py index 691fb897..a682495b 100644 --- a/flatcamObjects/FlatCAMExcellon.py +++ b/flatcamObjects/FlatCAMExcellon.py @@ -567,7 +567,11 @@ class ExcellonObject(FlatCAMObj, Excellon): "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 + # "gcode_type": self.ui.excellon_gcode_type_radio, + "area_exclusion": self.ui.exclusion_cb, + "area_shape": self.ui.area_shape_radio, + "area_strategy": self.ui.strategy_radio, + "area_overz": self.ui.over_z_entry, }) self.name2option = { @@ -634,6 +638,9 @@ class ExcellonObject(FlatCAMObj, Excellon): 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.ui.add_area_button.clicked.connect(self.on_add_area_click) + self.ui.delete_area_button.clicked.connect(self.on_clear_area_click) + self.on_operation_type(val='drill') self.ui.operation_radio.activated_custom.connect(self.on_operation_type) @@ -1467,6 +1474,21 @@ class ExcellonObject(FlatCAMObj, Excellon): # self.options['startz'] = float(self.options['startz']) * factor # self.options['endz'] = float(self.options['endz']) * factor + def on_add_area_click(self): + shape_button = self.ui.area_shape_radio + overz_button = self.ui.over_z_entry + strategy_radio = self.ui.strategy_radio + cnc_button = self.ui.generate_cnc_button + solid_geo = self.solid_geometry + obj_type = self.kind + + self.app.exc_areas.on_add_area_click( + shape_button=shape_button, overz_button=overz_button, cnc_button=cnc_button, strategy_radio=strategy_radio, + solid_geo=solid_geo, obj_type=obj_type) + + def on_clear_area_click(self): + self.app.exc_areas.on_clear_area_click() + def on_solid_cb_click(self, *args): if self.muted_ui: return From 484fb51bf0359ed64e4ade77e7bd9177f57b8d97 Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Fri, 8 May 2020 01:41:40 +0300 Subject: [PATCH 10/99] - added a parameter to the FlatCAMDefaults class, whenever a value in the self.defaults dict change it will call a callback function and send to it the modified key - optimized and fixed some issues in the self.on_toggle_units() method - the Exclusion areas will have all the orange color but the color of the outline will differ according to the type of the object from where it was added (cosmetic use only as the Exclusion areas will be applied globally) --- CHANGELOG.md | 8 +- FlatCAMApp.py | 162 ++++-------------- FlatCAMCommon.py | 6 +- defaults.py | 10 +- flatcamEditors/FlatCAMGeoEditor.py | 4 +- flatcamEditors/FlatCAMGrbEditor.py | 4 +- flatcamGUI/ObjectUI.py | 4 +- flatcamGUI/PlotCanvas.py | 1 + .../tools/ToolsTransformPrefGroupUI.py | 4 +- flatcamTools/ToolTransform.py | 6 +- 10 files changed, 64 insertions(+), 145 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1b5e26b3..16b5fd6f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,10 +7,16 @@ CHANGELOG for FlatCAM beta ================================================= +8.05.2020 + +- added a parameter to the FlatCAMDefaults class, whenever a value in the self.defaults dict change it will call a callback function and send to it the modified key +- optimized and fixed some issues in the self.on_toggle_units() method +- the Exclusion areas will have all the orange color but the color of the outline will differ according to the type of the object from where it was added (cosmetic use only as the Exclusion areas will be applied globally) + 7.05.2020 - added a fix so the app close is now clean, with exit code 0 as set -- added the ability to add exclusion areas from the Excellon object too. Now there is a different in color to differentiate from which type of object the exclusion areas were added but they all serve the same purpose +- added the ability to add exclusion areas from the Excellon object too. Now there is a difference in color to differentiate from which type of object the exclusion areas were added but they all serve the same purpose 6.05.2020 diff --git a/FlatCAMApp.py b/FlatCAMApp.py index d845b0c2..469b32d3 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -4244,10 +4244,10 @@ class App(QtCore.QObject): # If option is the same, then ignore if new_units == self.defaults["units"].upper(): - self.log.debug("on_toggle_units(): Same as defaults, so ignoring.") + self.log.debug("on_toggle_units(): Same as previous, ignoring.") return - # Options to scale + # Keys in self.defaults for which to scale their values dimensions = ['gerber_isotooldia', 'gerber_noncoppermargin', 'gerber_bboxmargin', "gerber_editor_newsize", "gerber_editor_lin_pitch", "gerber_editor_buff_f", "gerber_vtipdia", "gerber_vcutz", "gerber_editor_newdim", "gerber_editor_ma_low", @@ -4321,149 +4321,54 @@ class App(QtCore.QObject): def scale_defaults(sfactor): for dim in dimensions: + if dim in [ + 'gerber_editor_newdim', 'excellon_toolchangexy', 'geometry_toolchangexy', 'excellon_endxy', + 'geometry_endxy', 'tools_solderpaste_xy_toolchange', 'tools_cal_toolchange_xy', + 'tools_transform_mirror_point' + ]: + if self.defaults[dim] is None or self.defaults[dim] == '': + continue + try: + coordinates = self.defaults[dim].split(",") + coords_xy = [float(eval(a)) for a in coordinates if a != ''] + coords_xy[0] *= sfactor + coords_xy[1] *= sfactor + self.defaults[dim] = "%.*f, %.*f" % (self.decimals, coords_xy[0], self.decimals, coords_xy[1]) + except Exception as e: + log.debug("App.on_toggle_units.scale_defaults() --> 'string tuples': %s" % str(e)) - if dim == 'gerber_editor_newdim': - if self.defaults["gerber_editor_newdim"] is None or self.defaults["gerber_editor_newdim"] == '': - continue - coordinates = self.defaults["gerber_editor_newdim"].split(",") - coords_xy = [float(eval(a)) for a in coordinates if a != ''] - coords_xy[0] *= sfactor - coords_xy[1] *= sfactor - self.defaults['gerber_editor_newdim'] = "%.*f, %.*f" % (self.decimals, coords_xy[0], - self.decimals, coords_xy[1]) - if dim == 'excellon_toolchangexy': - if self.defaults["excellon_toolchangexy"] is None or self.defaults["excellon_toolchangexy"] == '': - continue - coordinates = self.defaults["excellon_toolchangexy"].split(",") - coords_xy = [float(eval(a)) for a in coordinates if a != ''] - coords_xy[0] *= sfactor - coords_xy[1] *= sfactor - self.defaults['excellon_toolchangexy'] = "%.*f, %.*f" % (self.decimals, coords_xy[0], - self.decimals, coords_xy[1]) - elif dim == 'geometry_toolchangexy': - if self.defaults["geometry_toolchangexy"] is None or self.defaults["geometry_toolchangexy"] == '': - continue - coordinates = self.defaults["geometry_toolchangexy"].split(",") - coords_xy = [float(eval(a)) for a in coordinates if a != ''] - coords_xy[0] *= sfactor - coords_xy[1] *= sfactor - self.defaults['geometry_toolchangexy'] = "%.*f, %.*f" % (self.decimals, coords_xy[0], - self.decimals, coords_xy[1]) - elif dim == 'excellon_endxy': - if self.defaults["excellon_endxy"] is None or self.defaults["excellon_endxy"] == '': + elif dim in [ + 'geometry_cnctooldia', 'tools_ncctools', 'tools_solderpaste_tools' + ]: + if self.defaults[dim] is None or self.defaults[dim] == '': continue - coordinates = self.defaults["excellon_endxy"].split(",") - end_coords_xy = [float(eval(a)) for a in coordinates if a != ''] - end_coords_xy[0] *= sfactor - end_coords_xy[1] *= sfactor - self.defaults['excellon_endxy'] = "%.*f, %.*f" % (self.decimals, end_coords_xy[0], - self.decimals, end_coords_xy[1]) - elif dim == 'geometry_endxy': - if self.defaults["geometry_endxy"] is None or self.defaults["geometry_endxy"] == '': - continue - coordinates = self.defaults["geometry_endxy"].split(",") - end_coords_xy = [float(eval(a)) for a in coordinates if a != ''] - end_coords_xy[0] *= sfactor - end_coords_xy[1] *= sfactor - self.defaults['geometry_endxy'] = "%.*f, %.*f" % (self.decimals, end_coords_xy[0], - self.decimals, end_coords_xy[1]) - - elif dim == 'geometry_cnctooldia': - if self.defaults["geometry_cnctooldia"] is None or self.defaults["geometry_cnctooldia"] == '': - continue - if type(self.defaults["geometry_cnctooldia"]) is float: - tools_diameters = [self.defaults["geometry_cnctooldia"]] + if isinstance(self.defaults[dim], float): + tools_diameters = [self.defaults[dim]] else: try: - tools_string = self.defaults["geometry_cnctooldia"].split(",") + tools_string = self.defaults[dim].split(",") tools_diameters = [eval(a) for a in tools_string if a != ''] except Exception as e: log.debug("App.on_toggle_units().scale_options() --> %s" % str(e)) continue - self.defaults['geometry_cnctooldia'] = '' + self.defaults[dim] = '' for t in range(len(tools_diameters)): tools_diameters[t] *= sfactor - self.defaults['geometry_cnctooldia'] += "%.*f," % (self.decimals, tools_diameters[t]) - elif dim == 'tools_ncctools': - if self.defaults["tools_ncctools"] is None or self.defaults["tools_ncctools"] == '': - continue - if type(self.defaults["tools_ncctools"]) == float: - ncctools = [self.defaults["tools_ncctools"]] - else: - try: - tools_string = self.defaults["tools_ncctools"].split(",") - ncctools = [eval(a) for a in tools_string if a != ''] - except Exception as e: - log.debug("App.on_toggle_units().scale_options() --> %s" % str(e)) - continue + self.defaults[dim] += "%.*f," % (self.decimals, tools_diameters[t]) - self.defaults['tools_ncctools'] = '' - for t in range(len(ncctools)): - ncctools[t] *= sfactor - self.defaults['tools_ncctools'] += "%.*f," % (self.decimals, ncctools[t]) - elif dim == 'tools_solderpaste_tools': - if self.defaults["tools_solderpaste_tools"] is None or \ - self.defaults["tools_solderpaste_tools"] == '': - continue - if type(self.defaults["tools_solderpaste_tools"]) == float: - sptools = [self.defaults["tools_solderpaste_tools"]] - else: - try: - tools_string = self.defaults["tools_solderpaste_tools"].split(",") - sptools = [eval(a) for a in tools_string if a != ''] - except Exception as e: - log.debug("App.on_toggle_units().scale_options() --> %s" % str(e)) - continue - - self.defaults['tools_solderpaste_tools'] = "" - for t in range(len(sptools)): - sptools[t] *= sfactor - self.defaults['tools_solderpaste_tools'] += "%.*f," % (self.decimals, sptools[t]) - elif dim == 'tools_solderpaste_xy_toolchange': - if self.defaults["tools_solderpaste_xy_toolchange"] is None or \ - self.defaults["tools_solderpaste_xy_toolchange"] == '': - continue + elif dim in ['global_gridx', 'global_gridy']: + # format the number of decimals to the one specified in self.decimals try: - coordinates = self.defaults["tools_solderpaste_xy_toolchange"].split(",") - sp_coords = [float(eval(a)) for a in coordinates if a != ''] - sp_coords[0] *= sfactor - sp_coords[1] *= sfactor - self.defaults['tools_solderpaste_xy_toolchange'] = "%.*f, %.*f" % (self.decimals, sp_coords[0], - self.decimals, sp_coords[1]) + val = float(self.defaults[dim]) * sfactor except Exception as e: - log.debug("App.on_toggle_units().scale_options() --> %s" % str(e)) + log.debug('App.on_toggle_units().scale_defaults() --> %s' % str(e)) continue - elif dim == 'tools_cal_toolchange_xy': - if self.defaults["tools_cal_toolchange_xy"] is None or \ - self.defaults["tools_cal_toolchange_xy"] == '': - continue - coordinates = self.defaults["tools_cal_toolchange_xy"].split(",") - end_coords_xy = [float(eval(a)) for a in coordinates if a != ''] - end_coords_xy[0] *= sfactor - end_coords_xy[1] *= sfactor - self.defaults['tools_cal_toolchange_xy'] = "%.*f, %.*f" % (self.decimals, end_coords_xy[0], - self.decimals, end_coords_xy[1]) - elif dim == 'global_gridx' or dim == 'global_gridy': - if new_units == 'IN': - try: - val = float(self.defaults[dim]) * sfactor - except Exception as e: - log.debug('App.on_toggle_units().scale_defaults() --> %s' % str(e)) - continue - - self.defaults[dim] = float('%.*f' % (self.decimals, val)) - else: - try: - val = float(self.defaults[dim]) * sfactor - except Exception as e: - log.debug('App.on_toggle_units().scale_defaults() --> %s' % str(e)) - continue - - self.defaults[dim] = float('%.*f' % (self.decimals, val)) + self.defaults[dim] = float('%.*f' % (self.decimals, val)) else: + # the number of decimals for the rest is kept unchanged if self.defaults[dim]: try: val = float(self.defaults[dim]) * sfactor @@ -4526,10 +4431,11 @@ class App(QtCore.QObject): # replot all objects self.plot_all() + # set the status labels to reflect the current FlatCAM units self.set_screen_units(new_units) - # signal to the app that we changed the object properties and it shoud save the project + # signal to the app that we changed the object properties and it should save the project self.should_we_save = True self.inform.emit('[success] %s: %s' % (_("Converted units to"), new_units)) diff --git a/FlatCAMCommon.py b/FlatCAMCommon.py index 476eb1cc..d97bb6a4 100644 --- a/FlatCAMCommon.py +++ b/FlatCAMCommon.py @@ -280,7 +280,7 @@ class ExclusionAreas: face_color = "#FF7400BF" else: color = "#098a8f" - face_color = "#098a8fBF" + face_color = "#FF7400BF" # add a temporary shape on canvas FlatCAMTool.draw_tool_selection_shape( @@ -341,7 +341,7 @@ class ExclusionAreas: face_color = "#FF7400BF" else: color = "#098a8f" - face_color = "#098a8fBF" + face_color = "#FF7400BF" FlatCAMTool.draw_selection_shape_polygon( self, points=self.points, @@ -476,7 +476,7 @@ class ExclusionAreas: face_color = "#FF7400BF" else: color = "#098a8f" - face_color = "#098a8fBF" + face_color = "#FF7400BF" # draw the utility geometry if shape_type == "square": diff --git a/defaults.py b/defaults.py index a730dfe9..b446a39a 100644 --- a/defaults.py +++ b/defaults.py @@ -495,7 +495,7 @@ class FlatCAMDefaults: "tools_transform_offset_x": 0.0, "tools_transform_offset_y": 0.0, "tools_transform_mirror_reference": False, - "tools_transform_mirror_point": (0, 0), + "tools_transform_mirror_point": "0.0, 0.0", "tools_transform_buffer_dis": 0.0, "tools_transform_buffer_factor": 100.0, "tools_transform_buffer_corner": True, @@ -697,13 +697,19 @@ class FlatCAMDefaults: except Exception as e: log.error("save_factory_defaults() -> %s" % str(e)) - def __init__(self): + def __init__(self, callback=lambda x: None): + """ + + :param callback: A method called each time that one of the values are changed in the self.defaults LouDict + """ self.defaults = LoudDict() self.defaults.update(self.factory_defaults) self.current_defaults = {} # copy used for restoring after cancelled prefs changes self.current_defaults.update(self.factory_defaults) self.old_defaults_found = False + self.defaults.set_change_callback(callback) + # #### Pass-through to the defaults LoudDict ##### def __len__(self): return self.defaults.__len__() diff --git a/flatcamEditors/FlatCAMGeoEditor.py b/flatcamEditors/FlatCAMGeoEditor.py index 1f10c01f..ccf67ce4 100644 --- a/flatcamEditors/FlatCAMGeoEditor.py +++ b/flatcamEditors/FlatCAMGeoEditor.py @@ -933,7 +933,7 @@ class TransformEditorTool(FlatCAMTool): "the 'y' in (x, y) will be used when using Flip on Y.") ) self.flip_ref_label.setFixedWidth(50) - self.flip_ref_entry = FCEntry("(0, 0)") + self.flip_ref_entry = FCEntry("0, 0") self.flip_ref_button = FCButton() self.flip_ref_button.set_value(_("Add")) @@ -1048,7 +1048,7 @@ class TransformEditorTool(FlatCAMTool): if self.app.defaults["tools_transform_mirror_point"]: self.flip_ref_entry.set_value(self.app.defaults["tools_transform_mirror_point"]) else: - self.flip_ref_entry.set_value((0, 0)) + self.flip_ref_entry.set_value("0, 0") def template(self): if not self.draw_app.selected: diff --git a/flatcamEditors/FlatCAMGrbEditor.py b/flatcamEditors/FlatCAMGrbEditor.py index 9aa85c78..3362c5ba 100644 --- a/flatcamEditors/FlatCAMGrbEditor.py +++ b/flatcamEditors/FlatCAMGrbEditor.py @@ -5633,7 +5633,7 @@ class TransformEditorTool(FlatCAMTool): "the 'y' in (x, y) will be used when using Flip on Y.") ) self.flip_ref_label.setMinimumWidth(50) - self.flip_ref_entry = EvalEntry2("(0, 0)") + self.flip_ref_entry = FCEntry() self.flip_ref_entry.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter) # self.flip_ref_entry.setFixedWidth(60) @@ -5760,7 +5760,7 @@ class TransformEditorTool(FlatCAMTool): if self.app.defaults["tools_transform_mirror_point"]: self.flip_ref_entry.set_value(self.app.defaults["tools_transform_mirror_point"]) else: - self.flip_ref_entry.set_value((0, 0)) + self.flip_ref_entry.set_value("0, 0") def template(self): if not self.draw_app.selected: diff --git a/flatcamGUI/ObjectUI.py b/flatcamGUI/ObjectUI.py index f683ea18..10b8f67d 100644 --- a/flatcamGUI/ObjectUI.py +++ b/flatcamGUI/ObjectUI.py @@ -1293,7 +1293,7 @@ class ExcellonObjectUI(ObjectUI): self.grid5.addWidget(self.pp_geo_name_cb, 16, 1) # Exclusion Areas - self.exclusion_cb = FCCheckBox('%s' % _("Exclusion areas")) + self.exclusion_cb = FCCheckBox('%s' % _("Add exclusion areas")) self.exclusion_cb.setToolTip( _( "Include exclusion areas.\n" @@ -2104,7 +2104,7 @@ class GeometryObjectUI(ObjectUI): # grid4.addWidget(QtWidgets.QLabel(''), 12, 0, 1, 2) # Exclusion Areas - self.exclusion_cb = FCCheckBox('%s' % _("Exclusion areas")) + self.exclusion_cb = FCCheckBox('%s' % _("Add exclusion areas")) self.exclusion_cb.setToolTip( _( "Include exclusion areas.\n" diff --git a/flatcamGUI/PlotCanvas.py b/flatcamGUI/PlotCanvas.py index de7a7028..44af74d0 100644 --- a/flatcamGUI/PlotCanvas.py +++ b/flatcamGUI/PlotCanvas.py @@ -287,6 +287,7 @@ class PlotCanvas(QtCore.QObject, VisPyCanvas): def on_mouse_scroll(self, event): # key modifiers modifiers = event.modifiers + pan_delta_x = self.fcapp.defaults["global_gridx"] pan_delta_y = self.fcapp.defaults["global_gridy"] curr_pos = event.pos diff --git a/flatcamGUI/preferences/tools/ToolsTransformPrefGroupUI.py b/flatcamGUI/preferences/tools/ToolsTransformPrefGroupUI.py index 60a8bf24..c3bffec1 100644 --- a/flatcamGUI/preferences/tools/ToolsTransformPrefGroupUI.py +++ b/flatcamGUI/preferences/tools/ToolsTransformPrefGroupUI.py @@ -1,7 +1,7 @@ from PyQt5 import QtWidgets from PyQt5.QtCore import QSettings -from flatcamGUI.GUIElements import FCDoubleSpinner, FCCheckBox, EvalEntry2 +from flatcamGUI.GUIElements import FCDoubleSpinner, FCCheckBox, FCEntry from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI import gettext @@ -191,7 +191,7 @@ class ToolsTransformPrefGroupUI(OptionsGroupUI): "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") ) - self.flip_ref_entry = EvalEntry2("(0, 0)") + self.flip_ref_entry = FCEntry() grid0.addWidget(self.flip_ref_label, 14, 0, 1, 2) grid0.addWidget(self.flip_ref_entry, 15, 0, 1, 2) diff --git a/flatcamTools/ToolTransform.py b/flatcamTools/ToolTransform.py index 1db4fb93..25a9b5f6 100644 --- a/flatcamTools/ToolTransform.py +++ b/flatcamTools/ToolTransform.py @@ -7,7 +7,7 @@ from PyQt5 import QtWidgets from FlatCAMTool import FlatCAMTool -from flatcamGUI.GUIElements import FCDoubleSpinner, FCCheckBox, FCButton, OptionalInputSection, EvalEntry2 +from flatcamGUI.GUIElements import FCDoubleSpinner, FCCheckBox, FCButton, OptionalInputSection, FCEntry import gettext import FlatCAMTranslation as fcTranslate @@ -300,7 +300,7 @@ class ToolTransform(FlatCAMTool): "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.") ) - self.flip_ref_entry = EvalEntry2("(0, 0)") + self.flip_ref_entry = FCEntry() # self.flip_ref_entry.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter) # self.flip_ref_entry.setFixedWidth(70) @@ -533,7 +533,7 @@ class ToolTransform(FlatCAMTool): if self.app.defaults["tools_transform_mirror_point"]: self.flip_ref_entry.set_value(self.app.defaults["tools_transform_mirror_point"]) else: - self.flip_ref_entry.set_value((0, 0)) + self.flip_ref_entry.set_value("0, 0") if self.app.defaults["tools_transform_buffer_dis"]: self.buffer_entry.set_value(self.app.defaults["tools_transform_buffer_dis"]) From ee69744d6e656429e0ecbf51ae23069800946fca Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Fri, 8 May 2020 22:01:18 +0300 Subject: [PATCH 11/99] - removed the Apply theme button in the Preferences; it is now replaced by the more general buttons (either Save or Apply) - added a confirmation/warning message when applying a new theme --- CHANGELOG.md | 2 + .../preferences/PreferencesUIManager.py | 37 ++++++++++++++++++- .../general/GeneralGUIPrefGroupUI.py | 33 ++++------------- 3 files changed, 45 insertions(+), 27 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 16b5fd6f..b83a0df5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,8 @@ CHANGELOG for FlatCAM beta - added a parameter to the FlatCAMDefaults class, whenever a value in the self.defaults dict change it will call a callback function and send to it the modified key - optimized and fixed some issues in the self.on_toggle_units() method - the Exclusion areas will have all the orange color but the color of the outline will differ according to the type of the object from where it was added (cosmetic use only as the Exclusion areas will be applied globally) +- removed the Apply theme button in the Preferences; it is now replaced by the more general buttons (either Save or Apply) +- added a confirmation/warning message when applying a new theme 7.05.2020 diff --git a/flatcamGUI/preferences/PreferencesUIManager.py b/flatcamGUI/preferences/PreferencesUIManager.py index 14fa8762..c49841ba 100644 --- a/flatcamGUI/preferences/PreferencesUIManager.py +++ b/flatcamGUI/preferences/PreferencesUIManager.py @@ -913,7 +913,39 @@ class PreferencesUIManager: # make sure we update the self.current_defaults dict used to undo changes to self.defaults self.defaults.current_defaults.update(self.defaults) - if save_to_file: + # deal with theme change + theme_settings = QtCore.QSettings("Open Source", "FlatCAM") + if theme_settings.contains("theme"): + theme = theme_settings.value('theme', type=str) + else: + theme = 'white' + + should_restart = False + val = self.ui.general_defaults_form.general_gui_group.theme_radio.get_value() + if val != theme: + msgbox = QtWidgets.QMessageBox() + msgbox.setText(_("Are you sure you want to continue?")) + msgbox.setWindowTitle(_("Application restart")) + msgbox.setWindowIcon(QtGui.QIcon(self.ui.app.resource_location + '/warning.png')) + + bt_yes = msgbox.addButton(_('Yes'), QtWidgets.QMessageBox.YesRole) + msgbox.addButton(_('Cancel'), QtWidgets.QMessageBox.NoRole) + + msgbox.setDefaultButton(bt_yes) + msgbox.exec_() + response = msgbox.clickedButton() + + if response == bt_yes: + theme_settings.setValue('theme', val) + + # This will write the setting to the platform specific storage. + del theme_settings + + should_restart = True + else: + self.ui.general_defaults_form.general_gui_group.theme_radio.set_value(theme) + + if save_to_file or should_restart is True: self.save_defaults(silent=False) # load the defaults so they are updated into the app self.defaults.load(filename=os.path.join(self.data_path, 'current_defaults.FlatConfig')) @@ -951,6 +983,9 @@ class PreferencesUIManager: self.ui.plot_tab_area.closeTab(idx) break + if should_restart is True: + self.ui.app.on_app_restart() + def on_pref_close_button(self): # Preferences saved, update flag self.preferences_changed_flag = False diff --git a/flatcamGUI/preferences/general/GeneralGUIPrefGroupUI.py b/flatcamGUI/preferences/general/GeneralGUIPrefGroupUI.py index d71fab4c..baedacc7 100644 --- a/flatcamGUI/preferences/general/GeneralGUIPrefGroupUI.py +++ b/flatcamGUI/preferences/general/GeneralGUIPrefGroupUI.py @@ -56,13 +56,13 @@ class GeneralGUIPrefGroupUI(OptionsGroupUI): ) grid0.addWidget(self.gray_icons_cb, 1, 0, 1, 3) - self.theme_button = FCButton(_("Apply Theme")) - self.theme_button.setToolTip( - _("Select a theme for FlatCAM.\n" - "It will theme the plot area.\n" - "The application will restart after change.") - ) - grid0.addWidget(self.theme_button, 2, 0, 1, 3) + # self.theme_button = FCButton(_("Apply Theme")) + # self.theme_button.setToolTip( + # _("Select a theme for FlatCAM.\n" + # "It will theme the plot area.\n" + # "The application will restart after change.") + # ) + # grid0.addWidget(self.theme_button, 2, 0, 1, 3) separator_line = QtWidgets.QFrame() separator_line.setFrameShape(QtWidgets.QFrame.HLine) @@ -381,8 +381,6 @@ class GeneralGUIPrefGroupUI(OptionsGroupUI): self.layout.addStretch() - self.theme_button.clicked.connect(self.on_theme_change) - # ############################################################################# # ############################# GUI COLORS SIGNALS ############################ # ############################################################################# @@ -418,23 +416,6 @@ class GeneralGUIPrefGroupUI(OptionsGroupUI): self.layout_combo.activated.connect(self.on_layout) - def on_theme_change(self): - val = self.theme_radio.get_value() - - theme_settings = QtCore.QSettings("Open Source", "FlatCAM") - if theme_settings.contains("theme"): - theme = theme_settings.value('theme', type=str) - else: - theme = 'white' - - if val != theme: - theme_settings.setValue('theme', val) - - # This will write the setting to the platform specific storage. - del theme_settings - - self.app.on_app_restart() - @staticmethod def handle_style(style): # set current style From 0e07ea15418f71dfe1005c04acf9fb9e65f3a34a Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Sat, 9 May 2020 05:18:05 +0300 Subject: [PATCH 12/99] - modified the GUI for Exclusion areas; now the shapes are displayed in a Table where they can be selected and deleted. Modification applied for Geometry Objects only (for now). - fixed and error when converting units, error that acted when in those fields that accept lists of tools only one tool was added --- CHANGELOG.md | 5 ++ FlatCAMApp.py | 20 +++++--- FlatCAMCommon.py | 58 +++++++++++++++++++++- flatcamGUI/ObjectUI.py | 80 ++++++++++++++++++++----------- flatcamObjects/FlatCAMGeometry.py | 79 +++++++++++++++++++++++++++++- flatcamObjects/FlatCAMObj.py | 6 +-- 6 files changed, 207 insertions(+), 41 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b83a0df5..a3e35ee0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,11 @@ CHANGELOG for FlatCAM beta ================================================= +9.05.2020 + +- modified the GUI for Exclusion areas; now the shapes are displayed in a Table where they can be selected and deleted. Modification applied for Geometry Objects only (for now). +- fixed and error when converting units, error that acted when in those fields that accept lists of tools only one tool was added + 8.05.2020 - added a parameter to the FlatCAMDefaults class, whenever a value in the self.defaults dict change it will call a callback function and send to it the modified key diff --git a/FlatCAMApp.py b/FlatCAMApp.py index 469b32d3..4641420d 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -4328,12 +4328,14 @@ class App(QtCore.QObject): ]: if self.defaults[dim] is None or self.defaults[dim] == '': continue + try: coordinates = self.defaults[dim].split(",") coords_xy = [float(eval(a)) for a in coordinates if a != ''] coords_xy[0] *= sfactor coords_xy[1] *= sfactor - self.defaults[dim] = "%.*f, %.*f" % (self.decimals, coords_xy[0], self.decimals, coords_xy[1]) + self.defaults[dim] = "%.*f, %.*f" % ( + self.decimals, coords_xy[0], self.decimals, coords_xy[1]) except Exception as e: log.debug("App.on_toggle_units.scale_defaults() --> 'string tuples': %s" % str(e)) @@ -4343,9 +4345,10 @@ class App(QtCore.QObject): if self.defaults[dim] is None or self.defaults[dim] == '': continue - if isinstance(self.defaults[dim], float): + try: + self.defaults[dim] = float(self.defaults[dim]) tools_diameters = [self.defaults[dim]] - else: + except ValueError: try: tools_string = self.defaults[dim].split(",") tools_diameters = [eval(a) for a in tools_string if a != ''] @@ -4354,9 +4357,14 @@ class App(QtCore.QObject): continue self.defaults[dim] = '' - for t in range(len(tools_diameters)): - tools_diameters[t] *= sfactor - self.defaults[dim] += "%.*f," % (self.decimals, tools_diameters[t]) + td_len = len(tools_diameters) + if td_len > 1: + for t in range(td_len): + tools_diameters[t] *= sfactor + self.defaults[dim] += "%.*f," % (self.decimals, tools_diameters[t]) + else: + tools_diameters[0] *= sfactor + self.defaults[dim] += "%.*f" % (self.decimals, tools_diameters[0]) elif dim in ['global_gridx', 'global_gridy']: # format the number of decimals to the one specified in self.decimals diff --git a/FlatCAMCommon.py b/FlatCAMCommon.py index d97bb6a4..b95091aa 100644 --- a/FlatCAMCommon.py +++ b/FlatCAMCommon.py @@ -10,6 +10,7 @@ # File Modified (major mod): Marius Adrian Stanciu # # Date: 11/4/2019 # # ########################################################## +from PyQt5 import QtCore from shapely.geometry import Polygon, MultiPolygon @@ -17,7 +18,6 @@ from flatcamGUI.VisPyVisuals import ShapeCollection from FlatCAMTool import FlatCAMTool import numpy as np -import re import gettext import FlatCAMTranslation as fcTranslate @@ -129,9 +129,13 @@ def color_variant(hex_color, bright_factor=1): return "#" + "".join([i for i in new_rgb]) -class ExclusionAreas: +class ExclusionAreas(QtCore.QObject): + + e_shape_modified = QtCore.pyqtSignal() def __init__(self, app): + super().__init__() + self.app = app # Storage for shapes, storage that can be used by FlatCAm tools for utility geometry @@ -401,6 +405,7 @@ class ExclusionAreas: '%s %s' % (_("Generate the CNC Job object."), _("With Exclusion areas.")) ) + self.e_shape_modified.emit() for k in self.exclusion_areas_storage: print(k) @@ -514,3 +519,52 @@ class ExclusionAreas: FlatCAMTool.delete_moving_selection_shape(self) self.app.delete_selection_shape() FlatCAMTool.delete_tool_selection_shape(self, shapes_storage=self.exclusion_shapes) + self.app.inform.emit('[success] %s' % _("All exclusion zones deleted.")) + + def delete_sel_shapes(self, idxs): + """ + + :param idxs: list of indexes in self.exclusion_areas_storage list to be deleted + :return: + """ + + # delete all plotted shapes + FlatCAMTool.delete_tool_selection_shape(self, shapes_storage=self.exclusion_shapes) + + # delete shapes + for idx in sorted(idxs, reverse=True): + del self.exclusion_areas_storage[idx] + + # re-add what's left after deletion in first step + if self.obj_type == 'excellon': + color = "#FF7400" + face_color = "#FF7400BF" + else: + color = "#098a8f" + face_color = "#FF7400BF" + + face_alpha = 0.3 + color_t = face_color[:-2] + str(hex(int(face_alpha * 255)))[2:] + + for geo_el in self.exclusion_areas_storage: + if isinstance(geo_el['shape'], Polygon): + self.exclusion_shapes.add( + geo_el['shape'], color=color, face_color=color_t, update=True, layer=0, tolerance=None) + if self.app.is_legacy is True: + self.exclusion_shapes.redraw() + + if self.exclusion_areas_storage: + self.app.inform.emit('[success] %s' % _("Selected exclusion zones deleted.")) + else: + # restore the default StyleSheet + self.cnc_button.setStyleSheet("") + # update the StyleSheet + self.cnc_button.setStyleSheet(""" + QPushButton + { + font-weight: bold; + } + """) + self.cnc_button.setToolTip('%s' % _("Generate the CNC Job object.")) + + self.app.inform.emit('[success] %s' % _("All exclusion zones deleted.")) diff --git a/flatcamGUI/ObjectUI.py b/flatcamGUI/ObjectUI.py index 10b8f67d..8aa848d3 100644 --- a/flatcamGUI/ObjectUI.py +++ b/flatcamGUI/ObjectUI.py @@ -2125,35 +2125,29 @@ class GeometryObjectUI(ObjectUI): self.exclusion_box.setContentsMargins(0, 0, 0, 0) self.exclusion_frame.setLayout(self.exclusion_box) - h_lay = QtWidgets.QHBoxLayout() - self.exclusion_box.addLayout(h_lay) + self.exclusion_table = FCTable() + self.exclusion_box.addWidget(self.exclusion_table) + self.exclusion_table.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustToContents) - # Button Add Area - self.add_area_button = QtWidgets.QPushButton(_('Add area')) - self.add_area_button.setToolTip(_("Add an Exclusion Area.")) - h_lay.addWidget(self.add_area_button) + self.exclusion_table.setColumnCount(4) + self.exclusion_table.setColumnWidth(0, 20) + self.exclusion_table.setHorizontalHeaderLabels(['#', _('Object'), _('Strategy'), _('Over Z')]) - # Button Delete Area - self.delete_area_button = QtWidgets.QPushButton(_('Clear areas')) - self.delete_area_button.setToolTip(_("Delete all exclusion areas.")) - h_lay.addWidget(self.delete_area_button) + self.exclusion_table.horizontalHeaderItem(0).setToolTip(_("This is the Area ID.")) + self.exclusion_table.horizontalHeaderItem(1).setToolTip( + _("Type of the object where the exclusion area was added.")) + self.exclusion_table.horizontalHeaderItem(2).setToolTip( + _("The strategy used for exclusion area. Go around the exclusion areas or over it.")) + self.exclusion_table.horizontalHeaderItem(3).setToolTip( + _("If the strategy is to go over the area then this is the height at which the tool will go to avoid the " + "exclusion area.")) - grid_l = QtWidgets.QGridLayout() - grid_l.setColumnStretch(0, 0) - grid_l.setColumnStretch(1, 1) - self.exclusion_box.addLayout(grid_l) + self.exclusion_table.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows) - # Area Selection shape - self.area_shape_label = QtWidgets.QLabel('%s:' % _("Shape")) - self.area_shape_label.setToolTip( - _("The kind of selection shape used for area selection.") - ) - - self.area_shape_radio = RadioSet([{'label': _("Square"), 'value': 'square'}, - {'label': _("Polygon"), 'value': 'polygon'}]) - - grid_l.addWidget(self.area_shape_label, 0, 0) - grid_l.addWidget(self.area_shape_radio, 0, 1) + grid_a1 = QtWidgets.QGridLayout() + grid_a1.setColumnStretch(0, 0) + grid_a1.setColumnStretch(1, 1) + self.exclusion_box.addLayout(grid_a1) # Chose Strategy self.strategy_label = FCLabel('%s:' % _("Strategy")) @@ -2164,8 +2158,8 @@ class GeometryObjectUI(ObjectUI): self.strategy_radio = RadioSet([{'label': _('Over'), 'value': 'over'}, {'label': _('Around'), 'value': 'around'}]) - grid_l.addWidget(self.strategy_label, 1, 0) - grid_l.addWidget(self.strategy_radio, 1, 1) + grid_a1.addWidget(self.strategy_label, 1, 0) + grid_a1.addWidget(self.strategy_radio, 1, 1) # Over Z self.over_z_label = FCLabel('%s:' % _("Over Z")) @@ -2175,8 +2169,36 @@ class GeometryObjectUI(ObjectUI): self.over_z_entry.set_range(0.000, 9999.9999) self.over_z_entry.set_precision(self.decimals) - grid_l.addWidget(self.over_z_label, 2, 0) - grid_l.addWidget(self.over_z_entry, 2, 1) + grid_a1.addWidget(self.over_z_label, 2, 0) + grid_a1.addWidget(self.over_z_entry, 2, 1) + + # Button Add Area + self.add_area_button = QtWidgets.QPushButton(_('Add area')) + self.add_area_button.setToolTip(_("Add an Exclusion Area.")) + + # Area Selection shape + self.area_shape_radio = RadioSet([{'label': _("Square"), 'value': 'square'}, + {'label': _("Polygon"), 'value': 'polygon'}]) + self.area_shape_radio.setToolTip( + _("The kind of selection shape used for area selection.") + ) + + grid_a1.addWidget(self.add_area_button, 4, 0) + grid_a1.addWidget(self.area_shape_radio, 4, 1) + + h_lay_1 = QtWidgets.QHBoxLayout() + self.exclusion_box.addLayout(h_lay_1) + + # Button Delete All Areas + self.delete_area_button = QtWidgets.QPushButton(_('Clear areas')) + self.delete_area_button.setToolTip(_("Delete all exclusion areas.")) + + # Button Delete Selected Areas + self.delete_sel_area_button = QtWidgets.QPushButton(_('Delete Selected')) + self.delete_sel_area_button.setToolTip(_("Delete all exclusion areas that are selected in the table.")) + + h_lay_1.addWidget(self.delete_area_button) + h_lay_1.addWidget(self.delete_sel_area_button) # -------------------------- EXCLUSION AREAS END ------------------------------------------------------------- # ------------------------------------------------------------------------------------------------------------ diff --git a/flatcamObjects/FlatCAMGeometry.py b/flatcamObjects/FlatCAMGeometry.py index 9cfeab20..18d9aaae 100644 --- a/flatcamObjects/FlatCAMGeometry.py +++ b/flatcamObjects/FlatCAMGeometry.py @@ -159,6 +159,15 @@ class GeometryObject(FlatCAMObj, Geometry): self.ui_disconnect() FlatCAMObj.build_ui(self) + # Area Exception - exclusion shape added signal + # first disconnect it from any other object + try: + self.app.exc_areas.e_shape_modified.disconnect() + except (TypeError, AttributeError): + pass + # then connect it to the current build_ui() method + self.app.exc_areas.e_shape_modified.connect(self.build_ui) + self.units = self.app.defaults['units'] tool_idx = 0 @@ -179,7 +188,6 @@ class GeometryObject(FlatCAMObj, Geometry): # 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() @@ -310,6 +318,58 @@ class GeometryObject(FlatCAMObj, Geometry): "%s: %s" % (_('Parameters for'), _("Multiple Tools")) ) + # Build Exclusion Areas section + e_len = len(self.app.exc_areas.exclusion_areas_storage) + self.ui.exclusion_table.setRowCount(e_len) + + area_id = 0 + + for area in range(e_len): + area_id += 1 + + area_dict = self.app.exc_areas.exclusion_areas_storage[area] + + area_id_item = QtWidgets.QTableWidgetItem('%d' % int(area_id)) + area_id_item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) + self.ui.exclusion_table.setItem(area, 0, area_id_item) # Area id + + object_item = QtWidgets.QTableWidgetItem('%s' % area_dict["obj_type"]) + object_item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) + self.ui.exclusion_table.setItem(area, 1, object_item) # Origin Object + + strategy_item = QtWidgets.QTableWidgetItem('%s' % area_dict["strategy"]) + strategy_item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) + self.ui.exclusion_table.setItem(area, 2, strategy_item) # Strategy + + overz_item = QtWidgets.QTableWidgetItem('%s' % area_dict["overz"]) + overz_item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) + self.ui.exclusion_table.setItem(area, 3, overz_item) # Over Z + + self.ui.exclusion_table.resizeColumnsToContents() + self.ui.exclusion_table.resizeRowsToContents() + + area_vheader = self.ui.exclusion_table.verticalHeader() + area_vheader.hide() + self.ui.exclusion_table.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) + + area_hheader = self.ui.exclusion_table.horizontalHeader() + area_hheader.setMinimumSectionSize(10) + area_hheader.setDefaultSectionSize(70) + + area_hheader.setSectionResizeMode(0, QtWidgets.QHeaderView.Fixed) + area_hheader.resizeSection(0, 20) + area_hheader.setSectionResizeMode(1, QtWidgets.QHeaderView.Stretch) + area_hheader.setSectionResizeMode(2, QtWidgets.QHeaderView.ResizeToContents) + area_hheader.setSectionResizeMode(3, QtWidgets.QHeaderView.ResizeToContents) + + # area_hheader.setStretchLastSection(True) + self.ui.exclusion_table.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) + + self.ui.exclusion_table.setColumnWidth(0, 20) + + self.ui.exclusion_table.setMinimumHeight(self.ui.exclusion_table.getHeight()) + self.ui.exclusion_table.setMaximumHeight(self.ui.exclusion_table.getHeight()) + def set_ui(self, ui): FlatCAMObj.set_ui(self, ui) @@ -534,8 +594,11 @@ class GeometryObject(FlatCAMObj, Geometry): 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) + # Exclusion areas + self.ui.exclusion_table.horizontalHeader().sectionClicked.connect(self.ui.exclusion_table.selectAll) self.ui.add_area_button.clicked.connect(self.on_add_area_click) self.ui.delete_area_button.clicked.connect(self.on_clear_area_click) + self.ui.delete_sel_area_button.clicked.connect(self.on_delete_sel_areas) def on_cut_z_changed(self): self.old_cutz = self.ui.cutz_entry.get_value() @@ -2463,6 +2526,20 @@ class GeometryObject(FlatCAMObj, Geometry): def on_clear_area_click(self): self.app.exc_areas.on_clear_area_click() + self.app.exc_areas.e_shape_modified.emit() + + def on_delete_sel_areas(self): + sel_model = self.ui.exclusion_table.selectionModel() + sel_indexes = sel_model.selectedIndexes() + + # it will iterate over all indexes which means all items in all columns too but I'm interested only on rows + # so the duplicate rows will not be added + sel_rows = set() + for idx in sel_indexes: + sel_rows.add(idx.row()) + + self.app.exc_areas.delete_sel_shapes(idxs=list(sel_rows)) + self.app.exc_areas.e_shape_modified.emit() def plot_element(self, element, color=None, visible=None): diff --git a/flatcamObjects/FlatCAMObj.py b/flatcamObjects/FlatCAMObj.py index 94108cc9..19ee7257 100644 --- a/flatcamObjects/FlatCAMObj.py +++ b/flatcamObjects/FlatCAMObj.py @@ -308,8 +308,8 @@ class FlatCAMObj(QtCore.QObject): for option in self.options: try: self.set_form_item(option) - except Exception: - self.app.log.warning("Unexpected error:", sys.exc_info()) + except Exception as err: + self.app.log.warning("Unexpected error: %s" % str(sys.exc_info()), str(err)) def read_form(self): """ @@ -323,7 +323,7 @@ class FlatCAMObj(QtCore.QObject): try: self.read_form_item(option) except Exception: - self.app.log.warning("Unexpected error:", sys.exc_info()) + self.app.log.warning("Unexpected error: %s" % str(sys.exc_info())) def set_form_item(self, option): """ From 541813c22b447e058b499fefac2215ce3f1f03b3 Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Sun, 10 May 2020 01:05:02 +0300 Subject: [PATCH 13/99] - finished the GUI for exclusion areas both in the Excellon and Geometry Objects. Need to think if to make it visible only in Advanced Mode --- CHANGELOG.md | 3 +- flatcamGUI/GUIElements.py | 5 + flatcamGUI/ObjectUI.py | 117 ++++++++++++++-------- flatcamObjects/FlatCAMExcellon.py | 161 ++++++++++++++++++++++++++++++ flatcamObjects/FlatCAMGeometry.py | 88 +++++++++++++++- flatcamObjects/FlatCAMObj.py | 4 +- 6 files changed, 327 insertions(+), 51 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a3e35ee0..7770a326 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,7 +10,8 @@ CHANGELOG for FlatCAM beta 9.05.2020 - modified the GUI for Exclusion areas; now the shapes are displayed in a Table where they can be selected and deleted. Modification applied for Geometry Objects only (for now). -- fixed and error when converting units, error that acted when in those fields that accept lists of tools only one tool was added +- fixed an error when converting units, error that acted when in those fields that accept lists of tools only one tool was added +- finished the GUI for exclusion areas both in the Excellon and Geometry Objects. Need to think if to make it visible only in Advanced Mode 8.05.2020 diff --git a/flatcamGUI/GUIElements.py b/flatcamGUI/GUIElements.py index bc283456..7b9b38f4 100644 --- a/flatcamGUI/GUIElements.py +++ b/flatcamGUI/GUIElements.py @@ -2232,6 +2232,7 @@ class OptionalHideInputSection: class FCTable(QtWidgets.QTableWidget): drag_drop_sig = QtCore.pyqtSignal() + lost_focus = QtCore.pyqtSignal() def __init__(self, drag_drop=False, protected_rows=None, parent=None): super(FCTable, self).__init__(parent) @@ -2295,6 +2296,10 @@ class FCTable(QtWidgets.QTableWidget): else: QtWidgets.QTableWidget.mousePressEvent(self, event) + def focusOutEvent(self, event): + self.lost_focus.emit() + super().focusOutEvent(event) + def setupContextMenu(self): self.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) diff --git a/flatcamGUI/ObjectUI.py b/flatcamGUI/ObjectUI.py index 8aa848d3..6cdb71a7 100644 --- a/flatcamGUI/ObjectUI.py +++ b/flatcamGUI/ObjectUI.py @@ -1292,6 +1292,10 @@ class ExcellonObjectUI(ObjectUI): self.grid5.addWidget(pp_geo_label, 16, 0) self.grid5.addWidget(self.pp_geo_name_cb, 16, 1) + # ------------------------------------------------------------------------------------------------------------ + # ------------------------- EXCLUSION AREAS ------------------------------------------------------------------ + # ------------------------------------------------------------------------------------------------------------ + # Exclusion Areas self.exclusion_cb = FCCheckBox('%s' % _("Add exclusion areas")) self.exclusion_cb.setToolTip( @@ -1301,48 +1305,39 @@ class ExcellonObjectUI(ObjectUI): "is forbidden." ) ) - self.grid5.addWidget(self.exclusion_cb, 17, 0, 1, 2) + self.grid5.addWidget(self.exclusion_cb, 20, 0, 1, 2) - # ------------------------------------------------------------------------------------------------------------ - # ------------------------- EXCLUSION AREAS ------------------------------------------------------------------ - # ------------------------------------------------------------------------------------------------------------ self.exclusion_frame = QtWidgets.QFrame() self.exclusion_frame.setContentsMargins(0, 0, 0, 0) - self.grid5.addWidget(self.exclusion_frame, 18, 0, 1, 2) + self.grid5.addWidget(self.exclusion_frame, 22, 0, 1, 2) self.exclusion_box = QtWidgets.QVBoxLayout() self.exclusion_box.setContentsMargins(0, 0, 0, 0) self.exclusion_frame.setLayout(self.exclusion_box) - h_lay = QtWidgets.QHBoxLayout() - self.exclusion_box.addLayout(h_lay) + self.exclusion_table = FCTable() + self.exclusion_box.addWidget(self.exclusion_table) + self.exclusion_table.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustToContents) - # Button Add Area - self.add_area_button = QtWidgets.QPushButton(_('Add area')) - self.add_area_button.setToolTip(_("Add an Exclusion Area.")) - h_lay.addWidget(self.add_area_button) + self.exclusion_table.setColumnCount(4) + self.exclusion_table.setColumnWidth(0, 20) + self.exclusion_table.setHorizontalHeaderLabels(['#', _('Object'), _('Strategy'), _('Over Z')]) - # Button Delete Area - self.delete_area_button = QtWidgets.QPushButton(_('Clear areas')) - self.delete_area_button.setToolTip(_("Delete all exclusion areas.")) - h_lay.addWidget(self.delete_area_button) + self.exclusion_table.horizontalHeaderItem(0).setToolTip(_("This is the Area ID.")) + self.exclusion_table.horizontalHeaderItem(1).setToolTip( + _("Type of the object where the exclusion area was added.")) + self.exclusion_table.horizontalHeaderItem(2).setToolTip( + _("The strategy used for exclusion area. Go around the exclusion areas or over it.")) + self.exclusion_table.horizontalHeaderItem(3).setToolTip( + _("If the strategy is to go over the area then this is the height at which the tool will go to avoid the " + "exclusion area.")) - grid_l = QtWidgets.QGridLayout() - grid_l.setColumnStretch(0, 0) - grid_l.setColumnStretch(1, 1) - self.exclusion_box.addLayout(grid_l) + self.exclusion_table.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows) - # Area Selection shape - self.area_shape_label = QtWidgets.QLabel('%s:' % _("Shape")) - self.area_shape_label.setToolTip( - _("The kind of selection shape used for area selection.") - ) - - self.area_shape_radio = RadioSet([{'label': _("Square"), 'value': 'square'}, - {'label': _("Polygon"), 'value': 'polygon'}]) - - grid_l.addWidget(self.area_shape_label, 0, 0) - grid_l.addWidget(self.area_shape_radio, 0, 1) + grid_a1 = QtWidgets.QGridLayout() + grid_a1.setColumnStretch(0, 0) + grid_a1.setColumnStretch(1, 1) + self.exclusion_box.addLayout(grid_a1) # Chose Strategy self.strategy_label = FCLabel('%s:' % _("Strategy")) @@ -1353,8 +1348,8 @@ class ExcellonObjectUI(ObjectUI): self.strategy_radio = RadioSet([{'label': _('Over'), 'value': 'over'}, {'label': _('Around'), 'value': 'around'}]) - grid_l.addWidget(self.strategy_label, 1, 0) - grid_l.addWidget(self.strategy_radio, 1, 1) + grid_a1.addWidget(self.strategy_label, 1, 0) + grid_a1.addWidget(self.strategy_radio, 1, 1) # Over Z self.over_z_label = FCLabel('%s:' % _("Over Z")) @@ -1364,17 +1359,45 @@ class ExcellonObjectUI(ObjectUI): self.over_z_entry.set_range(0.000, 9999.9999) self.over_z_entry.set_precision(self.decimals) - grid_l.addWidget(self.over_z_label, 2, 0) - grid_l.addWidget(self.over_z_entry, 2, 1) + grid_a1.addWidget(self.over_z_label, 2, 0) + grid_a1.addWidget(self.over_z_entry, 2, 1) + # Button Add Area + self.add_area_button = QtWidgets.QPushButton(_('Add area:')) + self.add_area_button.setToolTip(_("Add an Exclusion Area.")) + + # Area Selection shape + self.area_shape_radio = RadioSet([{'label': _("Square"), 'value': 'square'}, + {'label': _("Polygon"), 'value': 'polygon'}]) + self.area_shape_radio.setToolTip( + _("The kind of selection shape used for area selection.") + ) + + grid_a1.addWidget(self.add_area_button, 4, 0) + grid_a1.addWidget(self.area_shape_radio, 4, 1) + + h_lay_1 = QtWidgets.QHBoxLayout() + self.exclusion_box.addLayout(h_lay_1) + + # Button Delete All Areas + self.delete_area_button = QtWidgets.QPushButton(_('Delete All')) + self.delete_area_button.setToolTip(_("Delete all exclusion areas.")) + + # Button Delete Selected Areas + self.delete_sel_area_button = QtWidgets.QPushButton(_('Delete Selected')) + self.delete_sel_area_button.setToolTip(_("Delete all exclusion areas that are selected in the table.")) + + h_lay_1.addWidget(self.delete_area_button) + h_lay_1.addWidget(self.delete_sel_area_button) + + self.ois_exclusion_exc = OptionalHideInputSection(self.exclusion_cb, [self.exclusion_frame]) # -------------------------- EXCLUSION AREAS END ------------------------------------------------------------- # ------------------------------------------------------------------------------------------------------------ - self.ois_exclusion_geo = OptionalHideInputSection(self.exclusion_cb, [self.exclusion_frame]) separator_line = QtWidgets.QFrame() separator_line.setFrameShape(QtWidgets.QFrame.HLine) separator_line.setFrameShadow(QtWidgets.QFrame.Sunken) - self.grid5.addWidget(separator_line, 19, 0, 1, 2) + self.grid5.addWidget(separator_line, 25, 0, 1, 2) # ################################################################# # ################# GRID LAYOUT 6 ############################### @@ -1391,7 +1414,7 @@ class ExcellonObjectUI(ObjectUI): "for custom selection of tools." )) - self.grid6.addWidget(QtWidgets.QLabel(''), 1, 0, 1, 3) + # self.grid6.addWidget(QtWidgets.QLabel(''), 1, 0, 1, 3) self.grid6.addWidget(warning_lbl, 2, 0, 1, 3) self.generate_cnc_button = QtWidgets.QPushButton(_('Generate CNCJob object')) @@ -2103,6 +2126,10 @@ class GeometryObjectUI(ObjectUI): # grid4.addWidget(QtWidgets.QLabel(''), 12, 0, 1, 2) + # ------------------------------------------------------------------------------------------------------------ + # ------------------------- EXCLUSION AREAS ------------------------------------------------------------------ + # ------------------------------------------------------------------------------------------------------------ + # Exclusion Areas self.exclusion_cb = FCCheckBox('%s' % _("Add exclusion areas")) self.exclusion_cb.setToolTip( @@ -2114,9 +2141,6 @@ class GeometryObjectUI(ObjectUI): ) grid4.addWidget(self.exclusion_cb, 12, 0, 1, 2) - # ------------------------------------------------------------------------------------------------------------ - # ------------------------- EXCLUSION AREAS ------------------------------------------------------------------ - # ------------------------------------------------------------------------------------------------------------ self.exclusion_frame = QtWidgets.QFrame() self.exclusion_frame.setContentsMargins(0, 0, 0, 0) grid4.addWidget(self.exclusion_frame, 14, 0, 1, 2) @@ -2173,7 +2197,7 @@ class GeometryObjectUI(ObjectUI): grid_a1.addWidget(self.over_z_entry, 2, 1) # Button Add Area - self.add_area_button = QtWidgets.QPushButton(_('Add area')) + self.add_area_button = QtWidgets.QPushButton(_('Add area:')) self.add_area_button.setToolTip(_("Add an Exclusion Area.")) # Area Selection shape @@ -2190,7 +2214,7 @@ class GeometryObjectUI(ObjectUI): self.exclusion_box.addLayout(h_lay_1) # Button Delete All Areas - self.delete_area_button = QtWidgets.QPushButton(_('Clear areas')) + self.delete_area_button = QtWidgets.QPushButton(_('Delete All')) self.delete_area_button.setToolTip(_("Delete all exclusion areas.")) # Button Delete Selected Areas @@ -2200,9 +2224,14 @@ class GeometryObjectUI(ObjectUI): h_lay_1.addWidget(self.delete_area_button) h_lay_1.addWidget(self.delete_sel_area_button) + self.ois_exclusion_geo = OptionalHideInputSection(self.exclusion_cb, [self.exclusion_frame]) # -------------------------- EXCLUSION AREAS END ------------------------------------------------------------- # ------------------------------------------------------------------------------------------------------------ - self.ois_exclusion_geo = OptionalHideInputSection(self.exclusion_cb, [self.exclusion_frame]) + + separator_line2 = QtWidgets.QFrame() + separator_line2.setFrameShape(QtWidgets.QFrame.HLine) + separator_line2.setFrameShadow(QtWidgets.QFrame.Sunken) + grid4.addWidget(separator_line2, 15, 0, 1, 2) warning_lbl = QtWidgets.QLabel( _( @@ -2210,7 +2239,7 @@ class GeometryObjectUI(ObjectUI): "Click the # header to select all, or Ctrl + LMB\n" "for custom selection of tools." )) - grid4.addWidget(warning_lbl, 15, 0, 1, 2) + grid4.addWidget(warning_lbl, 16, 0, 1, 2) # Button self.generate_cnc_button = QtWidgets.QPushButton(_('Generate CNCJob object')) diff --git a/flatcamObjects/FlatCAMExcellon.py b/flatcamObjects/FlatCAMExcellon.py index a682495b..2e97db1e 100644 --- a/flatcamObjects/FlatCAMExcellon.py +++ b/flatcamObjects/FlatCAMExcellon.py @@ -125,6 +125,10 @@ class ExcellonObject(FlatCAMObj, Excellon): self.outline_color = self.app.defaults['excellon_plot_line'] self.alpha_level = 'bf' + # store here the state of the exclusion checkbox state to be restored after building the UI + # TODO add this in the sel.app.defaults dict and in Preferences + self.exclusion_area_cb_is_checked = False + # Attributes to be included in serialization # Always append to it because it carries contents # from predecessors. @@ -314,6 +318,15 @@ class ExcellonObject(FlatCAMObj, Excellon): def build_ui(self): FlatCAMObj.build_ui(self) + # Area Exception - exclusion shape added signal + # first disconnect it from any other object + try: + self.app.exc_areas.e_shape_modified.disconnect() + except (TypeError, AttributeError): + pass + # then connect it to the current build_ui() method + self.app.exc_areas.e_shape_modified.connect(self.update_exclusion_table) + self.units = self.app.defaults['units'].upper() for row in range(self.ui.tools_table.rowCount()): @@ -514,6 +527,58 @@ class ExcellonObject(FlatCAMObj, Excellon): "%s: %s" % (_('Parameters for'), _("Multiple Tools")) ) + # Build Exclusion Areas section + e_len = len(self.app.exc_areas.exclusion_areas_storage) + self.ui.exclusion_table.setRowCount(e_len) + + area_id = 0 + + for area in range(e_len): + area_id += 1 + + area_dict = self.app.exc_areas.exclusion_areas_storage[area] + + area_id_item = QtWidgets.QTableWidgetItem('%d' % int(area_id)) + area_id_item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) + self.ui.exclusion_table.setItem(area, 0, area_id_item) # Area id + + object_item = QtWidgets.QTableWidgetItem('%s' % area_dict["obj_type"]) + object_item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) + self.ui.exclusion_table.setItem(area, 1, object_item) # Origin Object + + strategy_item = QtWidgets.QTableWidgetItem('%s' % area_dict["strategy"]) + strategy_item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) + self.ui.exclusion_table.setItem(area, 2, strategy_item) # Strategy + + overz_item = QtWidgets.QTableWidgetItem('%s' % area_dict["overz"]) + overz_item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) + self.ui.exclusion_table.setItem(area, 3, overz_item) # Over Z + + self.ui.exclusion_table.resizeColumnsToContents() + self.ui.exclusion_table.resizeRowsToContents() + + area_vheader = self.ui.exclusion_table.verticalHeader() + area_vheader.hide() + self.ui.exclusion_table.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) + + area_hheader = self.ui.exclusion_table.horizontalHeader() + area_hheader.setMinimumSectionSize(10) + area_hheader.setDefaultSectionSize(70) + + area_hheader.setSectionResizeMode(0, QtWidgets.QHeaderView.Fixed) + area_hheader.resizeSection(0, 20) + area_hheader.setSectionResizeMode(1, QtWidgets.QHeaderView.Stretch) + area_hheader.setSectionResizeMode(2, QtWidgets.QHeaderView.ResizeToContents) + area_hheader.setSectionResizeMode(3, QtWidgets.QHeaderView.ResizeToContents) + + # area_hheader.setStretchLastSection(True) + self.ui.exclusion_table.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) + + self.ui.exclusion_table.setColumnWidth(0, 20) + + self.ui.exclusion_table.setMinimumHeight(self.ui.exclusion_table.getHeight()) + self.ui.exclusion_table.setMaximumHeight(self.ui.exclusion_table.getHeight()) + self.ui_connect() def set_ui(self, ui): @@ -632,14 +697,21 @@ class ExcellonObject(FlatCAMObj, Excellon): 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) + # Exclusion areas signals + self.ui.exclusion_table.horizontalHeader().sectionClicked.connect(self.exclusion_table_toggle_all) + self.ui.exclusion_table.lost_focus.connect(self.clear_selection) + self.ui.exclusion_table.itemClicked.connect(self.draw_sel_shape) self.ui.add_area_button.clicked.connect(self.on_add_area_click) self.ui.delete_area_button.clicked.connect(self.on_clear_area_click) + self.ui.delete_sel_area_button.clicked.connect(self.on_delete_sel_areas) + self.ui.strategy_radio.activated_custom.connect(self.on_strategy) self.on_operation_type(val='drill') self.ui.operation_radio.activated_custom.connect(self.on_operation_type) @@ -1487,7 +1559,96 @@ class ExcellonObject(FlatCAMObj, Excellon): solid_geo=solid_geo, obj_type=obj_type) def on_clear_area_click(self): + if not self.app.exc_areas.exclusion_areas_storage: + self.app.inform.emit("[WARNING_NOTCL] %s" % _("Delete failed. There are no exclusion areas to delete.")) + return + self.app.exc_areas.on_clear_area_click() + self.app.exc_areas.e_shape_modified.emit() + + def on_delete_sel_areas(self): + sel_model = self.ui.exclusion_table.selectionModel() + sel_indexes = sel_model.selectedIndexes() + + # it will iterate over all indexes which means all items in all columns too but I'm interested only on rows + # so the duplicate rows will not be added + sel_rows = set() + for idx in sel_indexes: + sel_rows.add(idx.row()) + + if not sel_rows: + self.app.inform.emit("[WARNING_NOTCL] %s" % _("Delete failed. Nothing is selected.")) + return + + self.app.exc_areas.delete_sel_shapes(idxs=list(sel_rows)) + self.app.exc_areas.e_shape_modified.emit() + + def draw_sel_shape(self): + sel_model = self.ui.exclusion_table.selectionModel() + sel_indexes = sel_model.selectedIndexes() + + # it will iterate over all indexes which means all items in all columns too but I'm interested only on rows + sel_rows = set() + for idx in sel_indexes: + sel_rows.add(idx.row()) + + self.delete_sel_shape() + + if self.app.is_legacy is False: + face = self.app.defaults['global_sel_fill'][:-2] + str(hex(int(0.2 * 255)))[2:] + outline = self.app.defaults['global_sel_line'][:-2] + str(hex(int(0.8 * 255)))[2:] + else: + face = self.app.defaults['global_sel_fill'][:-2] + str(hex(int(0.4 * 255)))[2:] + outline = self.app.defaults['global_sel_line'][:-2] + str(hex(int(1.0 * 255)))[2:] + + for row in sel_rows: + sel_rect = self.app.exc_areas.exclusion_areas_storage[row]['shape'] + self.app.move_tool.sel_shapes.add(sel_rect, color=outline, face_color=face, update=True, layer=0, + tolerance=None) + if self.app.is_legacy is True: + self.app.move_tool.sel_shapes.redraw() + + def clear_selection(self): + self.app.delete_selection_shape() + # self.ui.exclusion_table.clearSelection() + + def delete_sel_shape(self): + self.app.delete_selection_shape() + + def update_exclusion_table(self): + self.exclusion_area_cb_is_checked = True if self.ui.exclusion_cb.isChecked() else False + + self.build_ui() + self.ui.exclusion_cb.set_value(self.exclusion_area_cb_is_checked) + + def on_strategy(self, val): + if val == 'around': + self.ui.over_z_label.setDisabled(True) + self.ui.over_z_entry.setDisabled(True) + else: + self.ui.over_z_label.setDisabled(False) + self.ui.over_z_entry.setDisabled(False) + + def exclusion_table_toggle_all(self): + """ + will toggle the selection of all rows in Exclusion Areas table + + :return: + """ + sel_model = self.ui.exclusion_table.selectionModel() + sel_indexes = sel_model.selectedIndexes() + + # it will iterate over all indexes which means all items in all columns too but I'm interested only on rows + sel_rows = set() + for idx in sel_indexes: + sel_rows.add(idx.row()) + + if sel_rows: + self.ui.exclusion_table.clearSelection() + self.delete_sel_shape() + else: + self.ui.exclusion_table.selectAll() + self.draw_sel_shape() def on_solid_cb_click(self, *args): if self.muted_ui: diff --git a/flatcamObjects/FlatCAMGeometry.py b/flatcamObjects/FlatCAMGeometry.py index 18d9aaae..dfde372f 100644 --- a/flatcamObjects/FlatCAMGeometry.py +++ b/flatcamObjects/FlatCAMGeometry.py @@ -150,6 +150,10 @@ class GeometryObject(FlatCAMObj, Geometry): self.param_fields = {} + # store here the state of the exclusion checkbox state to be restored after building the UI + # TODO add this in the sel.app.defaults dict and in Preferences + self.exclusion_area_cb_is_checked = False + # Attributes to be included in serialization # Always append to it because it carries contents # from predecessors. @@ -166,7 +170,7 @@ class GeometryObject(FlatCAMObj, Geometry): except (TypeError, AttributeError): pass # then connect it to the current build_ui() method - self.app.exc_areas.e_shape_modified.connect(self.build_ui) + self.app.exc_areas.e_shape_modified.connect(self.update_exclusion_table) self.units = self.app.defaults['units'] @@ -594,11 +598,14 @@ class GeometryObject(FlatCAMObj, Geometry): 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) - # Exclusion areas - self.ui.exclusion_table.horizontalHeader().sectionClicked.connect(self.ui.exclusion_table.selectAll) + # Exclusion areas signals + self.ui.exclusion_table.horizontalHeader().sectionClicked.connect(self.exclusion_table_toggle_all) + self.ui.exclusion_table.lost_focus.connect(self.clear_selection) + self.ui.exclusion_table.itemClicked.connect(self.draw_sel_shape) self.ui.add_area_button.clicked.connect(self.on_add_area_click) self.ui.delete_area_button.clicked.connect(self.on_clear_area_click) self.ui.delete_sel_area_button.clicked.connect(self.on_delete_sel_areas) + self.ui.strategy_radio.activated_custom.connect(self.on_strategy) def on_cut_z_changed(self): self.old_cutz = self.ui.cutz_entry.get_value() @@ -2525,6 +2532,10 @@ class GeometryObject(FlatCAMObj, Geometry): solid_geo=solid_geo, obj_type=obj_type) def on_clear_area_click(self): + if not self.app.exc_areas.exclusion_areas_storage: + self.app.inform.emit("[WARNING_NOTCL] %s" % _("Delete failed. There are no exclusion areas to delete.")) + return + self.app.exc_areas.on_clear_area_click() self.app.exc_areas.e_shape_modified.emit() @@ -2538,9 +2549,80 @@ class GeometryObject(FlatCAMObj, Geometry): for idx in sel_indexes: sel_rows.add(idx.row()) + if not sel_rows: + self.app.inform.emit("[WARNING_NOTCL] %s" % _("Delete failed. Nothing is selected.")) + return + self.app.exc_areas.delete_sel_shapes(idxs=list(sel_rows)) self.app.exc_areas.e_shape_modified.emit() + def draw_sel_shape(self): + sel_model = self.ui.exclusion_table.selectionModel() + sel_indexes = sel_model.selectedIndexes() + + # it will iterate over all indexes which means all items in all columns too but I'm interested only on rows + sel_rows = set() + for idx in sel_indexes: + sel_rows.add(idx.row()) + + self.delete_sel_shape() + + if self.app.is_legacy is False: + face = self.app.defaults['global_sel_fill'][:-2] + str(hex(int(0.2 * 255)))[2:] + outline = self.app.defaults['global_sel_line'][:-2] + str(hex(int(0.8 * 255)))[2:] + else: + face = self.app.defaults['global_sel_fill'][:-2] + str(hex(int(0.4 * 255)))[2:] + outline = self.app.defaults['global_sel_line'][:-2] + str(hex(int(1.0 * 255)))[2:] + + for row in sel_rows: + sel_rect = self.app.exc_areas.exclusion_areas_storage[row]['shape'] + self.app.move_tool.sel_shapes.add(sel_rect, color=outline, face_color=face, update=True, layer=0, + tolerance=None) + if self.app.is_legacy is True: + self.app.move_tool.sel_shapes.redraw() + + def clear_selection(self): + self.app.delete_selection_shape() + # self.ui.exclusion_table.clearSelection() + + def delete_sel_shape(self): + self.app.delete_selection_shape() + + def update_exclusion_table(self): + self.exclusion_area_cb_is_checked = True if self.ui.exclusion_cb.isChecked() else False + + self.build_ui() + self.ui.exclusion_cb.set_value(self.exclusion_area_cb_is_checked) + + def on_strategy(self, val): + if val == 'around': + self.ui.over_z_label.setDisabled(True) + self.ui.over_z_entry.setDisabled(True) + else: + self.ui.over_z_label.setDisabled(False) + self.ui.over_z_entry.setDisabled(False) + + def exclusion_table_toggle_all(self): + """ + will toggle the selection of all rows in Exclusion Areas table + + :return: + """ + sel_model = self.ui.exclusion_table.selectionModel() + sel_indexes = sel_model.selectedIndexes() + + # it will iterate over all indexes which means all items in all columns too but I'm interested only on rows + sel_rows = set() + for idx in sel_indexes: + sel_rows.add(idx.row()) + + if sel_rows: + self.ui.exclusion_table.clearSelection() + self.delete_sel_shape() + else: + self.ui.exclusion_table.selectAll() + self.draw_sel_shape() + def plot_element(self, element, color=None, visible=None): if color is None: diff --git a/flatcamObjects/FlatCAMObj.py b/flatcamObjects/FlatCAMObj.py index 19ee7257..22a12117 100644 --- a/flatcamObjects/FlatCAMObj.py +++ b/flatcamObjects/FlatCAMObj.py @@ -186,11 +186,9 @@ class FlatCAMObj(QtCore.QObject): def build_ui(self): """ - Sets up the UI/form for this object. Show the UI - in the App. + Sets up the UI/form for this object. Show the UI in the App. :return: None - :rtype: None """ self.muted_ui = True From f81be6f0a9354b2ddeed6d8ea0c609753b6339fe Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Sun, 10 May 2020 13:50:24 +0300 Subject: [PATCH 14/99] - fixed the problem with using comma as decimal separator in Grid Snap fields --- CHANGELOG.md | 4 ++++ flatcamEditors/FlatCAMGeoEditor.py | 22 ++++++++++++++++------ 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7770a326..aaeb8453 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ CHANGELOG for FlatCAM beta ================================================= +10.05.2020 + +- fixed the problem with using comma as decimal separator in Grid Snap fields + 9.05.2020 - modified the GUI for Exclusion areas; now the shapes are displayed in a Table where they can be selected and deleted. Modification applied for Geometry Objects only (for now). diff --git a/flatcamEditors/FlatCAMGeoEditor.py b/flatcamEditors/FlatCAMGeoEditor.py index ccf67ce4..7950ac6a 100644 --- a/flatcamEditors/FlatCAMGeoEditor.py +++ b/flatcamEditors/FlatCAMGeoEditor.py @@ -3467,22 +3467,32 @@ class FlatCAMGeoEditor(QtCore.QObject): :return: """ try: - self.options[opt] = float(entry.text()) + text_value = entry.text() + if ',' in text_value: + text_value = text_value.replace(',', '.') + self.options[opt] = float(text_value) except Exception as e: + entry.set_value(self.app.defaults[opt]) log.debug("FlatCAMGeoEditor.__init__().entry2option() --> %s" % str(e)) return - def gridx_changed(goption, gentry): + def grid_changed(goption, gentry): """ - :param goption: String. Can be either 'global_gridx' or 'global_gridy' - :param gentry: A GUI element which text value is read and used + :param goption: String. Can be either 'global_gridx' or 'global_gridy' + :param gentry: A GUI element which text value is read and used :return: """ + if goption not in ['global_gridx', 'global_gridy']: + return + entry2option(opt=goption, entry=gentry) # if the grid link is checked copy the value in the GridX field to GridY try: - val = float(gentry.get_value()) + text_value = gentry.text() + if ',' in text_value: + text_value = text_value.replace(',', '.') + val = float(text_value) except ValueError: return @@ -3491,7 +3501,7 @@ class FlatCAMGeoEditor(QtCore.QObject): self.app.ui.grid_gap_x_entry.setValidator(QtGui.QDoubleValidator()) self.app.ui.grid_gap_x_entry.textChanged.connect( - lambda: gridx_changed("global_gridx", self.app.ui.grid_gap_x_entry)) + lambda: grid_changed("global_gridx", self.app.ui.grid_gap_x_entry)) self.app.ui.grid_gap_y_entry.setValidator(QtGui.QDoubleValidator()) self.app.ui.grid_gap_y_entry.textChanged.connect( From cb846cc3dbb268fbb45872907a751c61f5e1ad2f Mon Sep 17 00:00:00 2001 From: camellan Date: Sun, 10 May 2020 20:08:05 +0400 Subject: [PATCH 15/99] Edit Ruaasian translation --- assets/linux/flatcam-beta.desktop | 0 locale/ru/LC_MESSAGES/strings.po | 185 +++++++++++++++--------------- 2 files changed, 93 insertions(+), 92 deletions(-) mode change 100644 => 100755 assets/linux/flatcam-beta.desktop diff --git a/assets/linux/flatcam-beta.desktop b/assets/linux/flatcam-beta.desktop old mode 100644 new mode 100755 diff --git a/locale/ru/LC_MESSAGES/strings.po b/locale/ru/LC_MESSAGES/strings.po index 3c30a252..3b3e3dc3 100644 --- a/locale/ru/LC_MESSAGES/strings.po +++ b/locale/ru/LC_MESSAGES/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" -"POT-Creation-Date: 2020-05-03 16:11+0300\n" +"POT-Creation-Date: 2020-05-03 15:58+0300\n" "PO-Revision-Date: \n" "Last-Translator: Andrey Kultyapov \n" "Language-Team: \n" @@ -13,7 +13,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.2.4\n" +"X-Generator: Poedit 2.2.3\n" "X-Poedit-Basepath: ../../..\n" "X-Poedit-SearchPath-0: .\n" "X-Poedit-SearchPathExcluded-0: build\n" @@ -1196,7 +1196,7 @@ msgstr "Импортирование SVG" #: FlatCAMApp.py:9290 FlatCAMApp.py:9336 msgid "Import failed." -msgstr "Не удалось импортировать" +msgstr "Не удалось импортировать." #: FlatCAMApp.py:9297 FlatCAMApp.py:9343 FlatCAMApp.py:9407 FlatCAMApp.py:9474 #: FlatCAMApp.py:9540 FlatCAMApp.py:9605 FlatCAMApp.py:9662 @@ -2636,6 +2636,19 @@ msgstr "Вы уверены, что хотите изменить текущий msgid "Apply Language ..." msgstr "Применить язык ..." +#: assets/linux/flatcam-beta.desktop:3 +#| msgid "FlatCAM Object" +msgid "FlatCAM Beta" +msgstr "FlatCAM Beta" + +#: assets/linux/flatcam-beta.desktop:7 +msgid "./assets/icon.png" +msgstr "" + +#: assets/linux/flatcam-beta.desktop:8 +msgid "G-Code from GERBERS" +msgstr "G-Code из GERBERS" + #: camlib.py:597 msgid "self.solid_geometry is neither BaseGeometry or list." msgstr "self.solid_geometry не является базовой геометрией или списком." @@ -8501,7 +8514,7 @@ msgstr "" #: flatcamGUI/ObjectUI.py:2028 #: flatcamGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:201 msgid "Exclusion areas" -msgstr "" +msgstr "Зоны исключения" #: flatcamGUI/ObjectUI.py:2031 #: flatcamGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:204 @@ -8510,28 +8523,25 @@ msgid "" "In those areas the travel of the tools\n" "is forbidden." msgstr "" +"Включает зоны исключения.\n" +"В этих областях движение инструмента\n" +"запрещено." #: flatcamGUI/ObjectUI.py:2053 -#, fuzzy -#| msgid "Add Track" msgid "Add area" -msgstr "Добавить маршрут" +msgstr "Добавить область" #: flatcamGUI/ObjectUI.py:2054 msgid "Add an Exclusion Area." -msgstr "" +msgstr "Добавить зону исключения." #: flatcamGUI/ObjectUI.py:2058 -#, fuzzy -#| msgid "Clearance" msgid "Clear areas" -msgstr "Зазор" +msgstr "Очистить участки" #: flatcamGUI/ObjectUI.py:2059 -#, fuzzy -#| msgid "Delete all extensions from the list." msgid "Delete all exclusion areas." -msgstr "Удаляет все расширения из списка." +msgstr "Удаляет все исключаемые зоны." #: flatcamGUI/ObjectUI.py:2068 #: flatcamGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:212 @@ -8552,7 +8562,7 @@ msgstr "Вид формы выделения, используемый для в #: flatcamGUI/ObjectUI.py:2080 #: flatcamGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:224 msgid "Strategy" -msgstr "" +msgstr "Стратегия" #: flatcamGUI/ObjectUI.py:2081 #: flatcamGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:225 @@ -8562,27 +8572,26 @@ msgid "" "- Over -> when encountering the area, the tool will go to a set height\n" "- Around -> will avoid the exclusion area by going around the area" msgstr "" +"Стратегия, используемая при столкновении с зоной исключения.\n" +"Может быть:\n" +"- Сверху -> при столкновении с зоной, инструмент перейдет на заданную " +"высоту.\n" +"- Вокруг -> избегает зоны исключения, обойдя зону" #: flatcamGUI/ObjectUI.py:2085 #: flatcamGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:229 -#, fuzzy -#| msgid "Overlap" msgid "Over" -msgstr "Перекрытие" +msgstr "Сверху" #: flatcamGUI/ObjectUI.py:2086 #: flatcamGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:230 -#, fuzzy -#| msgid "Round" msgid "Around" -msgstr "Круглый" +msgstr "Вокруг" #: flatcamGUI/ObjectUI.py:2092 #: flatcamGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:236 -#, fuzzy -#| msgid "Overlap" msgid "Over Z" -msgstr "Перекрытие" +msgstr "Z обхода" #: flatcamGUI/ObjectUI.py:2093 #: flatcamGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:237 @@ -8590,6 +8599,7 @@ msgid "" "The height Z to which the tool will rise in order to avoid\n" "an interdiction area." msgstr "" +"Высота Z, на которую поднимется инструмент, чтобы избежать зоны исключения." #: flatcamGUI/ObjectUI.py:2117 msgid "Generate the CNC Job object." @@ -8657,7 +8667,7 @@ msgstr "" #: flatcamGUI/ObjectUI.py:2241 msgid "Travelled dist." -msgstr "Пройденное расстояние" +msgstr "Пройденное расстояние." #: flatcamGUI/ObjectUI.py:2243 flatcamGUI/ObjectUI.py:2248 msgid "" @@ -10843,25 +10853,18 @@ msgstr "" "Значение 0 означает отсутствие сегментации по оси Y." #: flatcamGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:192 -#, fuzzy -#| msgid "Area Selection" msgid "Area Exclusion" -msgstr "Выбор области" +msgstr "Область исключения" #: flatcamGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:194 -#, fuzzy -#| msgid "" -#| "A list of Excellon advanced parameters.\n" -#| "Those parameters are available only for\n" -#| "Advanced App. Level." msgid "" "Area exclusion parameters.\n" "Those parameters are available only for\n" "Advanced App. Level." msgstr "" -"Список расширенных параметров Excellon.\n" +"Параметры исключения областей.\n" "Эти параметры доступны только для\n" -"расширенного режима приложения." +"Расширенного режима приложения." #: flatcamGUI/preferences/geometry/GeometryEditorPrefGroupUI.py:33 msgid "A list of Geometry Editor parameters." @@ -14060,10 +14063,8 @@ msgid "Click the start point of the area." msgstr "Нажмите на начальную точку области." #: flatcamObjects/FlatCAMGeometry.py:2619 -#, fuzzy -#| msgid "Click the end point of the paint area." msgid "Click the end point of the area." -msgstr "Нажмите на конечную точку области рисования." +msgstr "Нажмите на конечную точку области." #: flatcamObjects/FlatCAMGeometry.py:2625 #: flatcamObjects/FlatCAMGeometry.py:2677 @@ -14075,7 +14076,7 @@ msgstr "Зона добавлена. Щелкните правой кнопко #: flatcamObjects/FlatCAMGeometry.py:2729 msgid "Cancelled. Area exclusion drawing was interrupted." -msgstr "" +msgstr "Отменено. Рисование зоны исключения было прервано." #: flatcamObjects/FlatCAMGerber.py:494 msgid "Buffering solid geometry" @@ -17256,7 +17257,7 @@ msgstr "Нет подавления" #: flatcamTools/ToolPcbWizard.py:114 msgid "Zeros supp." -msgstr "Подавление нулей" +msgstr "Подавление нулей." #: flatcamTools/ToolPcbWizard.py:116 msgid "" @@ -18509,58 +18510,6 @@ msgstr "" msgid "No Geometry name in args. Provide a name and try again." msgstr "Нет имени геометрии в аргументах. Укажите имя и попробуйте снова." -#~ msgid "Could not load factory defaults file." -#~ msgstr "Не удалось загрузить файл с исходными значениями." - -#~ msgid "Failed to parse factory defaults file." -#~ msgstr "Не удалось прочитать файл с исходными значениями." - -#~ msgid "Could not load preferences file." -#~ msgstr "Не удаётся загрузить файл настроек." - -#~ msgid "Failed to write factory defaults to file." -#~ msgstr "Не удалось записать исходные значения в файл." - -#~ msgid "Factory defaults saved." -#~ msgstr "Исходные значения сохранены." - -#~ msgid "e_fr_probe" -#~ msgstr "e_fr_probe" - -#~ 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 "" -#~ "Тип инструмента (TT) может быть:
- Дисковый с 1 ... 4 зубцами " -#~ "-> только для информации. Будучи круглым,
ширина реза в материале " -#~ "точно соответствует диаметру инструмента.
- Шар -> только для " -#~ "информации и содержит ссылку на концевую фрезу типа шара.
- V -" -#~ "Shape -> отключит параметр de Z-Cut в результирующей геометрии " -#~ "пользовательского интерфейса и включит два дополнительных поля формы " -#~ "пользовательского интерфейса в результирующей геометрии: V-Tip Dia и V-" -#~ "Tip Angle. Регулировка этих двух значений приведет к тому, что параметр Z-" -#~ "Cut, такой как ширина среза по материалу, будет равна значению в столбце " -#~ "«Диаметр инструмента» этой таблицы.
Выбор типа инструмента V-" -#~ "Shape автоматически выберет Тип операции в результирующей геометрии " -#~ "как Изоляция." - -#~ msgid "" -#~ " Could not generate punched hole Gerber because the punch hole sizeis " -#~ "bigger than some of the apertures in the Gerber object." -#~ msgstr "" -#~ " Не удалось создать пленку с перфорированным отверстием, поскольку размер " -#~ "перфорированного отверстия больше, чем некоторые отверстия в объекте " -#~ "Gerber." - #, fuzzy #~| msgid "" #~| "How much (fraction) of the tool width to overlap each tool pass.\n" @@ -18614,6 +18563,58 @@ msgstr "Нет имени геометрии в аргументах. Укажи #~ msgid "tool_tab" #~ msgstr "tool_tab" +#~ msgid "Could not load factory defaults file." +#~ msgstr "Не удалось загрузить файл с исходными значениями." + +#~ msgid "Failed to parse factory defaults file." +#~ msgstr "Не удалось прочитать файл с исходными значениями." + +#~ msgid "Could not load preferences file." +#~ msgstr "Не удаётся загрузить файл настроек." + +#~ msgid "Failed to write factory defaults to file." +#~ msgstr "Не удалось записать исходные значения в файл." + +#~ msgid "Factory defaults saved." +#~ msgstr "Исходные значения сохранены." + +#~ msgid "e_fr_probe" +#~ msgstr "e_fr_probe" + +#~ 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 "" +#~ "Тип инструмента (TT) может быть:
- Дисковый с 1 ... 4 зубцами " +#~ "-> только для информации. Будучи круглым,
ширина реза в материале " +#~ "точно соответствует диаметру инструмента.
- Шар -> только для " +#~ "информации и содержит ссылку на концевую фрезу типа шара.
- V -" +#~ "Shape -> отключит параметр de Z-Cut в результирующей геометрии " +#~ "пользовательского интерфейса и включит два дополнительных поля формы " +#~ "пользовательского интерфейса в результирующей геометрии: V-Tip Dia и V-" +#~ "Tip Angle. Регулировка этих двух значений приведет к тому, что параметр Z-" +#~ "Cut, такой как ширина среза по материалу, будет равна значению в столбце " +#~ "«Диаметр инструмента» этой таблицы.
Выбор типа инструмента V-" +#~ "Shape автоматически выберет Тип операции в результирующей геометрии " +#~ "как Изоляция." + +#~ msgid "" +#~ " Could not generate punched hole Gerber because the punch hole sizeis " +#~ "bigger than some of the apertures in the Gerber object." +#~ msgstr "" +#~ " Не удалось создать пленку с перфорированным отверстием, поскольку размер " +#~ "перфорированного отверстия больше, чем некоторые отверстия в объекте " +#~ "Gerber." + #~ msgid "Executing Tcl Script ..." #~ msgstr "Выполнение Tcl-сценария ..." From 46367c433f4320c28ed59bff08c0fa139d9e9ea3 Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Mon, 11 May 2020 07:29:46 +0300 Subject: [PATCH 16/99] - removed the labels in status bar that display X,Y positions and replaced it with a HUD display on canvas (combo key SHIFT+H) will toggle the display of the HUD - made the HUD work in Legacy2D mode - fixed situation when the mouse cursor is outside of the canvas and no therefore returning None values --- CHANGELOG.md | 6 + FlatCAMApp.py | 65 ++++++---- FlatCAMCommon.py | 13 +- Utils/vispy_example.py | 195 +++++++++++++++++++++++++++++ defaults.py | 1 + flatcamEditors/FlatCAMExcEditor.py | 18 +-- flatcamEditors/FlatCAMGeoEditor.py | 19 +-- flatcamEditors/FlatCAMGrbEditor.py | 19 +-- flatcamGUI/FlatCAMGUI.py | 27 ++-- flatcamGUI/PlotCanvas.py | 33 ++++- flatcamGUI/PlotCanvasLegacy.py | 73 +++++++++++ flatcamGUI/VisPyCanvas.py | 1 + flatcamTools/ToolCopperThieving.py | 16 ++- flatcamTools/ToolDistance.py | 15 ++- flatcamTools/ToolNCC.py | 16 ++- flatcamTools/ToolPaint.py | 16 ++- 16 files changed, 453 insertions(+), 80 deletions(-) create mode 100644 Utils/vispy_example.py diff --git a/CHANGELOG.md b/CHANGELOG.md index aaeb8453..1f6c6b3d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,12 @@ CHANGELOG for FlatCAM beta ================================================= +11.05.2020 + +- removed the labels in status bar that display X,Y positions and replaced it with a HUD display on canvas (combo key SHIFT+H) will toggle the display of the HUD +- made the HUD work in Legacy2D mode +- fixed situation when the mouse cursor is outside of the canvas and no therefore returning None values + 10.05.2020 - fixed the problem with using comma as decimal separator in Grid Snap fields diff --git a/FlatCAMApp.py b/FlatCAMApp.py index 4641420d..5864bb2a 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -285,6 +285,8 @@ class App(QtCore.QObject): :rtype: App """ + super().__init__() + App.log.info("FlatCAM Starting...") self.main_thread = QtWidgets.QApplication.instance().thread() @@ -504,8 +506,6 @@ class App(QtCore.QObject): self.FC_light_blue = '#a5a5ffbf' self.FC_dark_blue = '#0000ffbf' - QtCore.QObject.__init__(self) - self.ui = FlatCAMGUI(self) theme_settings = QtCore.QSettings("Open Source", "FlatCAM") @@ -5378,14 +5378,20 @@ class App(QtCore.QObject): edge_width=self.defaults["global_cursor_width"], size=self.defaults["global_cursor_size"]) - # Set the position label - self.ui.position_label.setText("    X: %.4f   " - "Y: %.4f" % (location[0], location[1])) # Set the relative position label dx = location[0] - float(self.rel_point1[0]) dy = location[1] - float(self.rel_point1[1]) - self.ui.rel_position_label.setText("Dx: %.4f   Dy: " - "%.4f    " % (dx, dy)) + # self.ui.position_label.setText("    X: %.4f   " + # "Y: %.4f" % (location[0], location[1])) + # # Set the position label + # + # self.ui.rel_position_label.setText("Dx: %.4f   Dy: " + # "%.4f    " % (dx, dy)) + + units = self.defaults["units"].lower() + self.plotcanvas.text_hud.text = \ + 'Dx:\t{:<.4f} [{:s}]\nDy:\t{:<.4f} [{:s}]\nX: \t{:<.4f} [{:s}]\nY: \t{:<.4f} [{:s}]'.format( + dx, units, dy, units, location[0], units, location[1], units) self.inform.emit('[success] %s' % _("Done.")) return location @@ -5527,14 +5533,19 @@ class App(QtCore.QObject): edge_width=self.defaults["global_cursor_width"], size=self.defaults["global_cursor_size"]) - # Set the position label - self.ui.position_label.setText("    X: %.4f   " - "Y: %.4f" % (location[0], location[1])) # Set the relative position label self.dx = location[0] - float(self.rel_point1[0]) self.dy = location[1] - float(self.rel_point1[1]) - self.ui.rel_position_label.setText("Dx: %.4f   Dy: " - "%.4f    " % (self.dx, self.dy)) + # Set the position label + # self.ui.position_label.setText("    X: %.4f   " + # "Y: %.4f" % (location[0], location[1])) + # self.ui.rel_position_label.setText("Dx: %.4f   Dy: " + # "%.4f    " % (self.dx, self.dy)) + + units = self.defaults["units"].lower() + self.plotcanvas.text_hud.text = \ + 'Dx:\t{:<.4f} [{:s}]\nDy:\t{:<.4f} [{:s}]\nX: \t{:<.4f} [{:s}]\nY: \t{:<.4f} [{:s}]'.format( + self.dx, units, self.dy, units, location[0], units, location[1], units) self.inform.emit('[success] %s' % _("Done.")) return location @@ -5843,8 +5854,8 @@ class App(QtCore.QObject): self.ui.plot_tab_area.addTab(self.ui.preferences_tab, _("Preferences")) # delete the absolute and relative position and messages in the infobar - self.ui.position_label.setText("") - self.ui.rel_position_label.setText("") + # self.ui.position_label.setText("") + # self.ui.rel_position_label.setText("") # Switch plot_area to preferences page self.ui.plot_tab_area.setCurrentWidget(self.ui.preferences_tab) @@ -6738,6 +6749,9 @@ class App(QtCore.QObject): try: # May fail in case mouse not within axes pos_canvas = self.plotcanvas.translate_coords(event_pos) + if pos_canvas[0] is None or pos_canvas[1] is None: + return + if self.grid_status(): pos = self.geo_editor.snap(pos_canvas[0], pos_canvas[1]) @@ -6749,13 +6763,19 @@ class App(QtCore.QObject): else: pos = (pos_canvas[0], pos_canvas[1]) - self.ui.position_label.setText("    X: %.4f   " - "Y: %.4f" % (pos[0], pos[1])) - self.dx = pos[0] - float(self.rel_point1[0]) self.dy = pos[1] - float(self.rel_point1[1]) - self.ui.rel_position_label.setText("Dx: %.4f   Dy: " - "%.4f    " % (self.dx, self.dy)) + + # self.ui.position_label.setText("    X: %.4f   " + # "Y: %.4f" % (pos[0], pos[1])) + # self.ui.rel_position_label.setText("Dx: %.4f   Dy: " + # "%.4f    " % (self.dx, self.dy)) + + units = self.defaults["units"].lower() + self.plotcanvas.text_hud.text = \ + 'Dx:\t{:<.4f} [{:s}]\nDy:\t{:<.4f} [{:s}]\nX: \t{:<.4f} [{:s}]\nY: \t{:<.4f} [{:s}]'.format( + self.dx, units, self.dy, units, pos[0], units, pos[1], units) + self.mouse = [pos[0], pos[1]] # if the mouse is moved and the LMB is clicked then the action is a selection @@ -6804,9 +6824,10 @@ class App(QtCore.QObject): # In this case poly_obj creation (see above) will fail pass - except Exception: - self.ui.position_label.setText("") - self.ui.rel_position_label.setText("") + except Exception as e: + log.debug("App.on_mouse_move_over_plot() - rel_point1 is not None -> %s" % str(e)) + # self.ui.position_label.setText("") + # self.ui.rel_position_label.setText("") self.mouse = None def on_mouse_click_release_over_plot(self, event): diff --git a/FlatCAMCommon.py b/FlatCAMCommon.py index b95091aa..bcd61a98 100644 --- a/FlatCAMCommon.py +++ b/FlatCAMCommon.py @@ -466,15 +466,20 @@ class ExclusionAreas(QtCore.QObject): size=self.app.defaults["global_cursor_size"]) # update the positions on status bar - self.app.ui.position_label.setText("    X: %.4f   " - "Y: %.4f" % (curr_pos[0], curr_pos[1])) if self.cursor_pos is None: self.cursor_pos = (0, 0) self.app.dx = curr_pos[0] - float(self.cursor_pos[0]) self.app.dy = curr_pos[1] - float(self.cursor_pos[1]) - self.app.ui.rel_position_label.setText("Dx: %.4f   Dy: " - "%.4f    " % (self.app.dx, self.app.dy)) + # self.app.ui.position_label.setText("    X: %.4f   " + # "Y: %.4f" % (curr_pos[0], curr_pos[1])) + # self.app.ui.rel_position_label.setText("Dx: %.4f   Dy: " + # "%.4f    " % (self.app.dx, self.app.dy)) + + units = self.app.defaults["units"].lower() + self.app.plotcanvas.text_hud.text = \ + 'Dx:\t{:<.4f} [{:s}]\nDy:\t{:<.4f} [{:s}]\nX: \t{:<.4f} [{:s}]\nY: \t{:<.4f} [{:s}]'.format( + self.app.dx, units, self.app.dy, units, curr_pos[0], units, curr_pos[1], units) if self.obj_type == 'excellon': color = "#FF7400" diff --git a/Utils/vispy_example.py b/Utils/vispy_example.py new file mode 100644 index 00000000..a9eaee12 --- /dev/null +++ b/Utils/vispy_example.py @@ -0,0 +1,195 @@ +from PyQt5.QtGui import QPalette +from PyQt5 import QtCore, QtWidgets + +import vispy.scene as scene +from vispy.scene.visuals import Rectangle, Text +from vispy.color import Color + +import sys + + +class VisPyCanvas(scene.SceneCanvas): + + def __init__(self, config=None): + super().__init__(config=config, keys=None) + + self.unfreeze() + + # Colors used by the Scene + theme_color = Color('#FFFFFF') + tick_color = Color('#000000') + back_color = str(QPalette().color(QPalette.Window).name()) + + # Central Widget Colors + self.central_widget.bgcolor = back_color + self.central_widget.border_color = back_color + + self.grid_widget = self.central_widget.add_grid(margin=10) + self.grid_widget.spacing = 0 + + # TOP Padding + top_padding = self.grid_widget.add_widget(row=0, col=0, col_span=2) + top_padding.height_max = 0 + + # RIGHT Padding + right_padding = self.grid_widget.add_widget(row=0, col=2, row_span=2) + right_padding.width_max = 0 + + # X Axis + self.xaxis = scene.AxisWidget( + orientation='bottom', axis_color=tick_color, text_color=tick_color, + font_size=8, axis_width=1, + anchors=['center', 'bottom'] + ) + self.xaxis.height_max = 30 + self.grid_widget.add_widget(self.xaxis, row=2, col=1) + + # Y Axis + self.yaxis = scene.AxisWidget( + orientation='left', axis_color=tick_color, text_color=tick_color, + font_size=8, axis_width=1 + ) + self.yaxis.width_max = 55 + self.grid_widget.add_widget(self.yaxis, row=1, col=0) + + # View & Camera + self.view = self.grid_widget.add_view(row=1, col=1, border_color=tick_color, + bgcolor=theme_color) + self.view.camera = scene.PanZoomCamera(aspect=1, rect=(-25, -25, 150, 150)) + + self.xaxis.link_view(self.view) + self.yaxis.link_view(self.view) + + self.grid = scene.GridLines(parent=self.view.scene, color='dimgray') + self.grid.set_gl_state(depth_test=False) + + self.rect = Rectangle(center=(65,30), color=Color('#0000FF10'), border_color=Color('#0000FF10'), + width=120, height=50, radius=[5, 5, 5, 5], parent=self.view) + self.rect.set_gl_state(depth_test=False) + + self.text = Text('', parent=self.view, color='black', pos=(5, 30), method='gpu', anchor_x='left') + self.text.font_size = 8 + self.text.text = 'Coordinates:\nX: %s\nY: %s' % ('0.0000', '0.0000') + + self.freeze() + + # self.measure_fps() + + +class PlotCanvas(QtCore.QObject): + + def __init__(self, container, my_app): + """ + The constructor configures the VisPy figure that + will contain all plots, creates the base axes and connects + events to the plotting area. + + :param container: The parent container in which to draw plots. + :rtype: PlotCanvas + """ + + super().__init__() + + # VisPyCanvas instance + self.vispy_canvas = VisPyCanvas() + + self.vispy_canvas.unfreeze() + + self.my_app = my_app + + # Parent container + self.container = container + + # + self.vispy_canvas.create_native() + self.vispy_canvas.native.setParent(self.my_app.ui) + + # + self.container.addWidget(self.vispy_canvas.native) + + # add two Infinite Lines to act as markers for the X,Y axis + self.v_line = scene.visuals.InfiniteLine( + pos=0, color=(0.0, 0.0, 1.0, 0.3), vertical=True, + parent=self.vispy_canvas.view.scene) + + self.h_line = scene.visuals.InfiniteLine( + pos=0, color=(0.00, 0.0, 1.0, 0.3), vertical=False, + parent=self.vispy_canvas.view.scene) + + self.vispy_canvas.freeze() + + def event_connect(self, event, callback): + getattr(self.vispy_canvas.events, event).connect(callback) + + def event_disconnect(self, event, callback): + getattr(self.vispy_canvas.events, event).disconnect(callback) + + def translate_coords(self, pos): + """ + Translate pixels to canvas units. + """ + tr = self.vispy_canvas.grid.get_transform('canvas', 'visual') + return tr.map(pos) + + +class MyGui(QtWidgets.QMainWindow): + + def __init__(self): + super().__init__() + + self.setWindowTitle("VisPy Test") + + # add Menubar + self.menu = self.menuBar() + self.menufile = self.menu.addMenu("File") + self.menuedit = self.menu.addMenu("Edit") + self.menufhelp = self.menu.addMenu("Help") + + # add a Toolbar + self.file_toolbar = QtWidgets.QToolBar("File Toolbar") + self.addToolBar(self.file_toolbar) + self.button = self.file_toolbar.addAction("Open") + + # add Central Widget + self.c_widget = QtWidgets.QWidget() + self.central_layout = QtWidgets.QVBoxLayout() + self.c_widget.setLayout(self.central_layout) + self.setCentralWidget(self.c_widget) + + # add InfoBar + # self.infobar = self.statusBar() + # self.position_label = QtWidgets.QLabel("Position: X: 0.0000\tY: 0.0000") + # self.infobar.addWidget(self.position_label) + + +class MyApp(QtCore.QObject): + + def __init__(self): + super().__init__() + + self.ui = MyGui() + self.plot = PlotCanvas(container=self.ui.central_layout, my_app=self) + + self.ui.show() + + self.plot.event_connect(event="mouse_move", callback=self.on_mouse_move) + + def on_mouse_move(self, event): + cursor_pos = event.pos + + pos_canvas = self.plot.translate_coords(cursor_pos) + + # we don't need all the info in the tuple returned by the translate_coords() + # only first 2 elements + pos_canvas = [pos_canvas[0], pos_canvas[1]] + # self.ui.position_label.setText("Position: X: %.4f\tY: %.4f" % (pos_canvas[0], pos_canvas[1])) + # pos_text = 'Coordinates: \nX: {:<7.4f}\nY: {:<7.4f}'.format(pos_canvas[0], pos_canvas[1]) + pos_text = 'Coordinates: \nX: {:<.4f}\nY: {:<.4f}'.format(pos_canvas[0], pos_canvas[1]) + self.plot.vispy_canvas.text.text = pos_text + + +if __name__ == '__main__': + app = QtWidgets.QApplication(sys.argv) + + m_app = MyApp() + sys.exit(app.exec_()) diff --git a/defaults.py b/defaults.py index b446a39a..64f0fa70 100644 --- a/defaults.py +++ b/defaults.py @@ -43,6 +43,7 @@ class FlatCAMDefaults: # General "global_graphic_engine": '3D', + "global_hud": True, "global_app_level": 'b', "global_portable": False, "global_language": 'English', diff --git a/flatcamEditors/FlatCAMExcEditor.py b/flatcamEditors/FlatCAMExcEditor.py index 49dc5eb5..7b68f11c 100644 --- a/flatcamEditors/FlatCAMExcEditor.py +++ b/flatcamEditors/FlatCAMExcEditor.py @@ -3801,18 +3801,22 @@ class FlatCAMExcEditor(QtCore.QObject): self.snap_x = x self.snap_y = y - # update the position label in the infobar since the APP mouse event handlers are disconnected - self.app.ui.position_label.setText("    X: %.4f   " - "Y: %.4f" % (x, y)) - if self.pos is None: self.pos = (0, 0) self.app.dx = x - self.pos[0] self.app.dy = y - self.pos[1] - # update the reference position label in the infobar since the APP mouse event handlers are disconnected - self.app.ui.rel_position_label.setText("Dx: %.4f   Dy: " - "%.4f    " % (self.app.dx, self.app.dy)) + # # update the position label in the infobar since the APP mouse event handlers are disconnected + # self.app.ui.position_label.setText("    X: %.4f   " + # "Y: %.4f" % (x, y)) + # # update the reference position label in the infobar since the APP mouse event handlers are disconnected + # self.app.ui.rel_position_label.setText("Dx: %.4f   Dy: " + # "%.4f    " % (self.app.dx, self.app.dy)) + + units = self.app.defaults["units"].lower() + self.plotcanvas.text_hud.text = \ + 'Dx:\t{:<.4f} [{:s}]\nDy:\t{:<.4f} [{:s}]\nX: \t{:<.4f} [{:s}]\nY: \t{:<.4f} [{:s}]'.format( + self.app.dx, units, self.app.dy, units, x, units, y, units) # ## Utility geometry (animated) self.update_utility_geometry(data=(x, y)) diff --git a/flatcamEditors/FlatCAMGeoEditor.py b/flatcamEditors/FlatCAMGeoEditor.py index 7950ac6a..e8d969cb 100644 --- a/flatcamEditors/FlatCAMGeoEditor.py +++ b/flatcamEditors/FlatCAMGeoEditor.py @@ -4271,18 +4271,23 @@ class FlatCAMGeoEditor(QtCore.QObject): self.snap_y = y self.app.mouse = [x, y] - # update the position label in the infobar since the APP mouse event handlers are disconnected - self.app.ui.position_label.setText("    X: %.4f   " - "Y: %.4f" % (x, y)) - if self.pos is None: self.pos = (0, 0) self.app.dx = x - self.pos[0] self.app.dy = y - self.pos[1] - # update the reference position label in the infobar since the APP mouse event handlers are disconnected - self.app.ui.rel_position_label.setText("Dx: %.4f   Dy: " - "%.4f    " % (self.app.dx, self.app.dy)) + # # update the position label in the infobar since the APP mouse event handlers are disconnected + # self.app.ui.position_label.setText("    X: %.4f   " + # "Y: %.4f" % (x, y)) + # + # # update the reference position label in the infobar since the APP mouse event handlers are disconnected + # self.app.ui.rel_position_label.setText("Dx: %.4f   Dy: " + # "%.4f    " % (self.app.dx, self.app.dy)) + + units = self.app.defaults["units"].lower() + self.plotcanvas.text_hud.text = \ + 'Dx:\t{:<.4f} [{:s}]\nDy:\t{:<.4f} [{:s}]\nX: \t{:<.4f} [{:s}]\nY: \t{:<.4f} [{:s}]'.format( + self.app.dx, units, self.app.dy, units, x, units, y, units) if event.button == 1 and event_is_dragging and isinstance(self.active_tool, FCEraser): pass diff --git a/flatcamEditors/FlatCAMGrbEditor.py b/flatcamEditors/FlatCAMGrbEditor.py index 3362c5ba..d5659fbf 100644 --- a/flatcamEditors/FlatCAMGrbEditor.py +++ b/flatcamEditors/FlatCAMGrbEditor.py @@ -4774,18 +4774,23 @@ class FlatCAMGrbEditor(QtCore.QObject): self.app.mouse = [x, y] - # update the position label in the infobar since the APP mouse event handlers are disconnected - self.app.ui.position_label.setText("    X: %.4f   " - "Y: %.4f" % (x, y)) - if self.pos is None: self.pos = (0, 0) self.app.dx = x - self.pos[0] self.app.dy = y - self.pos[1] - # update the reference position label in the infobar since the APP mouse event handlers are disconnected - self.app.ui.rel_position_label.setText("Dx: %.4f   Dy: " - "%.4f    " % (self.app.dx, self.app.dy)) + # # update the position label in the infobar since the APP mouse event handlers are disconnected + # self.app.ui.position_label.setText("    X: %.4f   " + # "Y: %.4f" % (x, y)) + # + # # update the reference position label in the infobar since the APP mouse event handlers are disconnected + # self.app.ui.rel_position_label.setText("Dx: %.4f   Dy: " + # "%.4f    " % (self.app.dx, self.app.dy)) + + units = self.app.defaults["units"].lower() + self.plotcanvas.text_hud.text = \ + 'Dx:\t{:<.4f} [{:s}]\nDy:\t{:<.4f} [{:s}]\nX: \t{:<.4f} [{:s}]\nY: \t{:<.4f} [{:s}]'.format( + self.app.dx, units, self.app.dy, units, x, units, y, units) self.update_utility_geometry(data=(x, y)) diff --git a/flatcamGUI/FlatCAMGUI.py b/flatcamGUI/FlatCAMGUI.py index 09d7383b..aeb7b86d 100644 --- a/flatcamGUI/FlatCAMGUI.py +++ b/flatcamGUI/FlatCAMGUI.py @@ -2306,17 +2306,17 @@ class FlatCAMGUI(QtWidgets.QMainWindow): self.snap_infobar_label.setPixmap(QtGui.QPixmap(self.app.resource_location + '/snap_16.png')) self.infobar.addWidget(self.snap_infobar_label) - self.rel_position_label = QtWidgets.QLabel( - "Dx: 0.0000   Dy: 0.0000    ") - self.rel_position_label.setMinimumWidth(110) - self.rel_position_label.setToolTip(_("Relative measurement.\nReference is last click position")) - self.infobar.addWidget(self.rel_position_label) - - self.position_label = QtWidgets.QLabel( - "    X: 0.0000   Y: 0.0000") - self.position_label.setMinimumWidth(110) - self.position_label.setToolTip(_("Absolute measurement.\nReference is (X=0, Y= 0) position")) - self.infobar.addWidget(self.position_label) + # self.rel_position_label = QtWidgets.QLabel( + # "Dx: 0.0000   Dy: 0.0000    ") + # self.rel_position_label.setMinimumWidth(110) + # self.rel_position_label.setToolTip(_("Relative measurement.\nReference is last click position")) + # self.infobar.addWidget(self.rel_position_label) + # + # self.position_label = QtWidgets.QLabel( + # "    X: 0.0000   Y: 0.0000") + # self.position_label.setMinimumWidth(110) + # self.position_label.setToolTip(_("Absolute measurement.\nReference is (X=0, Y= 0) position")) + # self.infobar.addWidget(self.position_label) self.units_label = QtWidgets.QLabel("[in]") self.units_label.setMargin(2) @@ -2993,6 +2993,11 @@ class FlatCAMGUI(QtWidgets.QMainWindow): if key == QtCore.Qt.Key_G: self.app.on_toggle_axis() + # Toggle HUD (Heads-Up Display) + if key == QtCore.Qt.Key_H: + state = False if self.app.plotcanvas.hud_enabled else True + self.app.plotcanvas.on_toggle_hud(state=state) + # Locate in Object if key == QtCore.Qt.Key_J: self.app.on_locate(obj=self.app.collection.get_active()) diff --git a/flatcamGUI/PlotCanvas.py b/flatcamGUI/PlotCanvas.py index 44af74d0..a1be6099 100644 --- a/flatcamGUI/PlotCanvas.py +++ b/flatcamGUI/PlotCanvas.py @@ -10,7 +10,7 @@ from PyQt5 import QtCore import logging from flatcamGUI.VisPyCanvas import VisPyCanvas, Color from flatcamGUI.VisPyVisuals import ShapeGroup, ShapeCollection, TextCollection, TextGroup, Cursor -from vispy.scene.visuals import InfiniteLine, Line +from vispy.scene.visuals import InfiniteLine, Line, Rectangle, Text import numpy as np from vispy.geometry import Rect @@ -54,8 +54,12 @@ class PlotCanvas(QtCore.QObject, VisPyCanvas): if theme == 'white': self.line_color = (0.3, 0.0, 0.0, 1.0) + self.rect_hud_color = Color('#0000FF10') + self.text_hud_color = 'black' else: self.line_color = (0.4, 0.4, 0.4, 1.0) + self.rect_hud_color = Color('#0000FF10') + self.text_hud_color = 'white' # workspace lines; I didn't use the rectangle because I didn't want to add another VisPy Node, # which might decrease performance @@ -146,13 +150,28 @@ class PlotCanvas(QtCore.QObject, VisPyCanvas): self.cursor_h_line = InfiniteLine(pos=None, color=c_color, vertical=False, parent=self.line_parent) + self.rect_hud = Rectangle(center=(90,45), color=self.rect_hud_color, border_color=self.rect_hud_color, + width=170, height=80, radius=[5, 5, 5, 5], parent=None) + self.rect_hud.set_gl_state(depth_test=False) + + # HUD Display + self.hud_enabled = False + + self.text_hud = Text('', color=self.text_hud_color, pos=(8, 45), method='gpu', anchor_x='left', parent=None) + self.text_hud.font_size = 8 + units = self.fcapp.defaults["units"].lower() + self.text_hud.text = 'Dx:\t%s [%s]\nDy:\t%s [%s]\nX: \t%s [%s]\nY: \t%s [%s]' % \ + ('0.0000', units, '0.0000', units, '0.0000', units, '0.0000', units) + + if self.fcapp.defaults['global_hud'] is True: + self.on_toggle_hud(state=True) + self.shape_collections = [] self.shape_collection = self.new_shape_collection() self.fcapp.pool_recreated.connect(self.on_pool_recreated) self.text_collection = self.new_text_collection() - # TODO: Should be setting to show/hide CNC job annotations (global or per object) self.text_collection.enabled = True self.c = None @@ -163,6 +182,16 @@ class PlotCanvas(QtCore.QObject, VisPyCanvas): self.graph_event_connect('mouse_wheel', self.on_mouse_scroll) + def on_toggle_hud(self, state): + if state: + self.hud_enabled = True + self.rect_hud.parent = self.view + self.text_hud.parent = self.view + else: + self.hud_enabled = False + self.rect_hud.parent = None + self.text_hud.parent = None + def draw_workspace(self, workspace_size): """ Draw a rectangular shape on canvas to specify our valid workspace. diff --git a/flatcamGUI/PlotCanvasLegacy.py b/flatcamGUI/PlotCanvasLegacy.py index a9a6216f..7856bb8f 100644 --- a/flatcamGUI/PlotCanvasLegacy.py +++ b/flatcamGUI/PlotCanvasLegacy.py @@ -29,6 +29,7 @@ mpl_use("Qt5Agg") from matplotlib.figure import Figure from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas from matplotlib.lines import Line2D +from matplotlib.offsetbox import AnchoredText # from matplotlib.widgets import Cursor fcTranslate.apply_language('strings') @@ -147,9 +148,13 @@ class PlotCanvasLegacy(QtCore.QObject): if self.app.defaults['global_theme'] == 'white': theme_color = '#FFFFFF' tick_color = '#000000' + self.rect_hud_color = '#0000FF10' + self.text_hud_color = '#000000' else: theme_color = '#000000' tick_color = '#FFFFFF' + self.rect_hud_color = '#0000FF10' + self.text_hud_color = '#000000' # workspace lines; I didn't use the rectangle because I didn't want to add another VisPy Node, # which might decrease performance @@ -298,11 +303,79 @@ class PlotCanvasLegacy(QtCore.QObject): # signal if there is a doubleclick self.is_dblclk = False + self.hud_enabled = False + self.text_hud = self.Thud(plotcanvas=self) + + # bbox_props = dict(boxstyle="round,pad=0.3", fc="blue", ec="b", lw=0) + # self.text_hud = self.figure.text(0, 0, "Direction", ha="left", va="center", rotation=0, + # size=15, + # bbox=bbox_props) + # draw a rectangle made out of 4 lines on the canvas to serve as a hint for the work area # all CNC have a limited workspace if self.app.defaults['global_workspace'] is True: self.draw_workspace(workspace_size=self.app.defaults["global_workspaceT"]) + if self.app.defaults['global_hud'] is True: + self.on_toggle_hud(state=True) + + def on_toggle_hud(self, state): + if state: + self.hud_enabled = True + self.text_hud.add_artist() + else: + self.hud_enabled = False + self.text_hud.remove_artist() + self.canvas.draw() + + class Thud(QtCore.QObject): + text_changed = QtCore.pyqtSignal(str) + + def __init__(self, plotcanvas): + super().__init__() + + self.p = plotcanvas + units = self.p.app.defaults['units'] + self._text = 'Dx: %s [%s]\nDy: %s [%s]\nX: %s [%s]\nY: %s [%s]' % \ + ('0.0000', units, '0.0000', units, '0.0000', units, '0.0000', units) + + self.hud_holder = AnchoredText(self._text, + prop=dict(size=20), frameon=True, + loc='upper left', + ) + self.hud_holder.patch.set_boxstyle("round,pad=0.,rounding_size=0.2") + + self.hud_holder.patch.set_facecolor('blue') + self.hud_holder.patch.set_alpha(0.3) + self.hud_holder.patch.set_edgecolor((0, 0, 0, 0)) + + self.text_changed.connect(self.on_text_changed) + + @property + def text(self): + return self._text + + @text.setter + def text(self, val): + self.text_changed.emit(val) + self._text = val + + def on_text_changed(self, txt): + try: + txt = txt.replace('\t', ' ') + self.hud_holder.txt.set_text(txt) + self.p.canvas.draw() + except Exception: + pass + + def add_artist(self): + if self.hud_holder not in self.p.axes.artists: + self.p.axes.add_artist(self.hud_holder) + + def remove_artist(self): + if self.hud_holder in self.p.axes.artists: + self.p.axes.artists.remove(self.hud_holder) + def draw_workspace(self, workspace_size): """ Draw a rectangular shape on canvas to specify our valid workspace. diff --git a/flatcamGUI/VisPyCanvas.py b/flatcamGUI/VisPyCanvas.py index 7d7efe13..aa55675f 100644 --- a/flatcamGUI/VisPyCanvas.py +++ b/flatcamGUI/VisPyCanvas.py @@ -13,6 +13,7 @@ import numpy as np import vispy.scene as scene from vispy.scene.cameras.base_camera import BaseCamera +# from vispy.scene.widgets import Widget as VisPyWidget from vispy.color import Color import time diff --git a/flatcamTools/ToolCopperThieving.py b/flatcamTools/ToolCopperThieving.py index d6fd310a..f6c85731 100644 --- a/flatcamTools/ToolCopperThieving.py +++ b/flatcamTools/ToolCopperThieving.py @@ -910,16 +910,22 @@ class ToolCopperThieving(FlatCAMTool): edge_width=self.app.defaults["global_cursor_width"], size=self.app.defaults["global_cursor_size"]) - # update the positions on status bar - self.app.ui.position_label.setText("    X: %.4f   " - "Y: %.4f" % (curr_pos[0], curr_pos[1])) if self.cursor_pos is None: self.cursor_pos = (0, 0) self.app.dx = curr_pos[0] - float(self.cursor_pos[0]) self.app.dy = curr_pos[1] - float(self.cursor_pos[1]) - self.app.ui.rel_position_label.setText("Dx: %.4f   Dy: " - "%.4f    " % (self.app.dx, self.app.dy)) + + # # update the positions on status bar + # self.app.ui.position_label.setText("    X: %.4f   " + # "Y: %.4f" % (curr_pos[0], curr_pos[1])) + # self.app.ui.rel_position_label.setText("Dx: %.4f   Dy: " + # "%.4f    " % (self.app.dx, self.app.dy)) + + units = self.app.defaults["units"].lower() + self.plotcanvas.text_hud.text = \ + 'Dx:\t{:<.4f} [{:s}]\nDy:\t{:<.4f} [{:s}]\nX: \t{:<.4f} [{:s}]\nY: \t{:<.4f} [{:s}]'.format( + self.app.dx, units, self.app.dy, units, curr_pos[0], units, curr_pos[1], units) # draw the utility geometry if self.first_click: diff --git a/flatcamTools/ToolDistance.py b/flatcamTools/ToolDistance.py index ea62c64e..bcc506fb 100644 --- a/flatcamTools/ToolDistance.py +++ b/flatcamTools/ToolDistance.py @@ -544,11 +544,16 @@ class Distance(FlatCAMTool): else: pos = (pos_canvas[0], pos_canvas[1]) - self.app.ui.position_label.setText( - "    X: {}   Y: {}".format( - '%.*f' % (self.decimals, pos[0]), '%.*f' % (self.decimals, pos[1]) - ) - ) + # self.app.ui.position_label.setText( + # "    X: {}   Y: {}".format( + # '%.*f' % (self.decimals, pos[0]), '%.*f' % (self.decimals, pos[1]) + # ) + # ) + + units = self.app.defaults["units"].lower() + self.plotcanvas.text_hud.text = \ + 'Dx:\t{:<.4f} [{:s}]\nDy:\t{:<.4f} [{:s}]\nX: \t{:<.4f} [{:s}]\nY: \t{:<.4f} [{:s}]'.format( + 0.0000, units, 0.0000, units, pos[0], units, pos[1], units) if self.rel_point1 is not None: dx = pos[0] - float(self.rel_point1[0]) diff --git a/flatcamTools/ToolNCC.py b/flatcamTools/ToolNCC.py index 0b80c735..d01f02de 100644 --- a/flatcamTools/ToolNCC.py +++ b/flatcamTools/ToolNCC.py @@ -1825,16 +1825,22 @@ class NonCopperClear(FlatCAMTool, Gerber): edge_width=self.app.defaults["global_cursor_width"], size=self.app.defaults["global_cursor_size"]) - # update the positions on status bar - self.app.ui.position_label.setText("    X: %.4f   " - "Y: %.4f" % (curr_pos[0], curr_pos[1])) if self.cursor_pos is None: self.cursor_pos = (0, 0) self.app.dx = curr_pos[0] - float(self.cursor_pos[0]) self.app.dy = curr_pos[1] - float(self.cursor_pos[1]) - self.app.ui.rel_position_label.setText("Dx: %.4f   Dy: " - "%.4f    " % (self.app.dx, self.app.dy)) + + # # update the positions on status bar + # self.app.ui.position_label.setText("    X: %.4f   " + # "Y: %.4f" % (curr_pos[0], curr_pos[1])) + # self.app.ui.rel_position_label.setText("Dx: %.4f   Dy: " + # "%.4f    " % (self.app.dx, self.app.dy)) + + units = self.app.defaults["units"].lower() + self.plotcanvas.text_hud.text = \ + 'Dx:\t{:<.4f} [{:s}]\nDy:\t{:<.4f} [{:s}]\nX: \t{:<.4f} [{:s}]\nY: \t{:<.4f} [{:s}]'.format( + self.app.dx, units, self.app.dy, units, curr_pos[0], units, curr_pos[1], units) # draw the utility geometry if shape_type == "square": diff --git a/flatcamTools/ToolPaint.py b/flatcamTools/ToolPaint.py index 4dda2d36..ae1b23cc 100644 --- a/flatcamTools/ToolPaint.py +++ b/flatcamTools/ToolPaint.py @@ -1724,16 +1724,22 @@ class ToolPaint(FlatCAMTool, Gerber): edge_width=self.app.defaults["global_cursor_width"], size=self.app.defaults["global_cursor_size"]) - # update the positions on status bar - self.app.ui.position_label.setText("    X: %.4f   " - "Y: %.4f" % (curr_pos[0], curr_pos[1])) if self.cursor_pos is None: self.cursor_pos = (0, 0) self.app.dx = curr_pos[0] - float(self.cursor_pos[0]) self.app.dy = curr_pos[1] - float(self.cursor_pos[1]) - self.app.ui.rel_position_label.setText("Dx: %.4f   Dy: " - "%.4f    " % (self.app.dx, self.app.dy)) + + # # update the positions on status bar + # self.app.ui.position_label.setText("    X: %.4f   " + # "Y: %.4f" % (curr_pos[0], curr_pos[1])) + # self.app.ui.rel_position_label.setText("Dx: %.4f   Dy: " + # "%.4f    " % (self.app.dx, self.app.dy)) + + units = self.app.defaults["units"].lower() + self.plotcanvas.text_hud.text = \ + 'Dx:\t{:<.4f} [{:s}]\nDy:\t{:<.4f} [{:s}]\nX: \t{:<.4f} [{:s}]\nY: \t{:<.4f} [{:s}]'.format( + self.app.dx, units, self.app.dy, units, curr_pos[0], units, curr_pos[1], units) # draw the utility geometry if shape_type == "square": From d7677b5e08d90203451875cc42ece49b122fd115 Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Mon, 11 May 2020 18:02:34 +0300 Subject: [PATCH 17/99] - remade the Snap Toolbar presence; now it is always active and situated in the Status Bar --- CHANGELOG.md | 1 + FlatCAMApp.py | 12 ++- FlatCAMCommon.py | 2 +- flatcamEditors/FlatCAMExcEditor.py | 3 +- flatcamEditors/FlatCAMGeoEditor.py | 3 +- flatcamEditors/FlatCAMGrbEditor.py | 3 +- flatcamGUI/FlatCAMGUI.py | 92 +++---------------- flatcamGUI/PlotCanvas.py | 8 +- .../general/GeneralGUIPrefGroupUI.py | 13 --- flatcamTools/ToolCopperThieving.py | 2 +- flatcamTools/ToolDistance.py | 2 +- flatcamTools/ToolNCC.py | 2 +- flatcamTools/ToolPaint.py | 2 +- 13 files changed, 32 insertions(+), 113 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1f6c6b3d..0392dee2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ CHANGELOG for FlatCAM beta - removed the labels in status bar that display X,Y positions and replaced it with a HUD display on canvas (combo key SHIFT+H) will toggle the display of the HUD - made the HUD work in Legacy2D mode - fixed situation when the mouse cursor is outside of the canvas and no therefore returning None values +- remade the Snap Toolbar presence; now it is always active and situated in the Status Bar 10.05.2020 diff --git a/FlatCAMApp.py b/FlatCAMApp.py index 5864bb2a..14e5b141 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -2064,18 +2064,22 @@ class App(QtCore.QObject): """ # Toolbar + + # File Toolbar Signals # self.ui.file_new_btn.triggered.connect(self.on_file_new) self.ui.file_open_btn.triggered.connect(self.on_file_openproject) self.ui.file_save_btn.triggered.connect(self.on_file_saveproject) self.ui.file_open_gerber_btn.triggered.connect(self.on_fileopengerber) self.ui.file_open_excellon_btn.triggered.connect(self.on_fileopenexcellon) + # View Toolbar Signals self.ui.clear_plot_btn.triggered.connect(self.clear_plots) self.ui.replot_btn.triggered.connect(self.plot_all) self.ui.zoom_fit_btn.triggered.connect(self.on_zoom_fit) self.ui.zoom_in_btn.triggered.connect(lambda: self.plotcanvas.zoom(1 / 1.5)) self.ui.zoom_out_btn.triggered.connect(lambda: self.plotcanvas.zoom(1.5)) + # Edit Toolbar Signals self.ui.newgeo_btn.triggered.connect(self.new_geometry_object) self.ui.newgrb_btn.triggered.connect(self.new_gerber_object) self.ui.newexc_btn.triggered.connect(self.new_excellon_object) @@ -2092,6 +2096,7 @@ class App(QtCore.QObject): self.ui.jmp_btn.triggered.connect(self.on_jump_to) self.ui.locate_btn.triggered.connect(lambda: self.on_locate(obj=self.collection.get_active())) + # Scripting Toolbar Signals self.ui.shell_btn.triggered.connect(self.toggle_shell) self.ui.new_script_btn.triggered.connect(self.on_filenewscript) self.ui.open_script_btn.triggered.connect(self.on_fileopenscript) @@ -4573,7 +4578,6 @@ class App(QtCore.QObject): self.defaults.report_usage("on_toggle_grid()") self.ui.grid_snap_btn.trigger() - self.ui.on_grid_snap_triggered(state=True) def on_toggle_grid_lines(self): self.defaults.report_usage("on_toggle_grd_lines()") @@ -5390,7 +5394,7 @@ class App(QtCore.QObject): units = self.defaults["units"].lower() self.plotcanvas.text_hud.text = \ - 'Dx:\t{:<.4f} [{:s}]\nDy:\t{:<.4f} [{:s}]\nX: \t{:<.4f} [{:s}]\nY: \t{:<.4f} [{:s}]'.format( + 'Dx:\t{:<.4f} [{:s}]\nDy:\t{:<.4f} [{:s}]\n\nX: \t{:<.4f} [{:s}]\nY: \t{:<.4f} [{:s}]'.format( dx, units, dy, units, location[0], units, location[1], units) self.inform.emit('[success] %s' % _("Done.")) @@ -5544,7 +5548,7 @@ class App(QtCore.QObject): units = self.defaults["units"].lower() self.plotcanvas.text_hud.text = \ - 'Dx:\t{:<.4f} [{:s}]\nDy:\t{:<.4f} [{:s}]\nX: \t{:<.4f} [{:s}]\nY: \t{:<.4f} [{:s}]'.format( + 'Dx:\t{:<.4f} [{:s}]\nDy:\t{:<.4f} [{:s}]\n\nX: \t{:<.4f} [{:s}]\nY: \t{:<.4f} [{:s}]'.format( self.dx, units, self.dy, units, location[0], units, location[1], units) self.inform.emit('[success] %s' % _("Done.")) @@ -6773,7 +6777,7 @@ class App(QtCore.QObject): units = self.defaults["units"].lower() self.plotcanvas.text_hud.text = \ - 'Dx:\t{:<.4f} [{:s}]\nDy:\t{:<.4f} [{:s}]\nX: \t{:<.4f} [{:s}]\nY: \t{:<.4f} [{:s}]'.format( + 'Dx:\t{:<.4f} [{:s}]\nDy:\t{:<.4f} [{:s}]\n\nX: \t{:<.4f} [{:s}]\nY: \t{:<.4f} [{:s}]'.format( self.dx, units, self.dy, units, pos[0], units, pos[1], units) self.mouse = [pos[0], pos[1]] diff --git a/FlatCAMCommon.py b/FlatCAMCommon.py index bcd61a98..ea6c3f78 100644 --- a/FlatCAMCommon.py +++ b/FlatCAMCommon.py @@ -478,7 +478,7 @@ class ExclusionAreas(QtCore.QObject): units = self.app.defaults["units"].lower() self.app.plotcanvas.text_hud.text = \ - 'Dx:\t{:<.4f} [{:s}]\nDy:\t{:<.4f} [{:s}]\nX: \t{:<.4f} [{:s}]\nY: \t{:<.4f} [{:s}]'.format( + 'Dx:\t{:<.4f} [{:s}]\nDy:\t{:<.4f} [{:s}]\n\nX: \t{:<.4f} [{:s}]\nY: \t{:<.4f} [{:s}]'.format( self.app.dx, units, self.app.dy, units, curr_pos[0], units, curr_pos[1], units) if self.obj_type == 'excellon': diff --git a/flatcamEditors/FlatCAMExcEditor.py b/flatcamEditors/FlatCAMExcEditor.py index 7b68f11c..e598cc20 100644 --- a/flatcamEditors/FlatCAMExcEditor.py +++ b/flatcamEditors/FlatCAMExcEditor.py @@ -2837,7 +2837,6 @@ class FlatCAMExcEditor(QtCore.QObject): # start with GRID toolbar activated if self.app.ui.grid_snap_btn.isChecked() is False: self.app.ui.grid_snap_btn.trigger() - self.app.ui.on_grid_snap_triggered(state=True) self.app.ui.popmenu_disable.setVisible(False) self.app.ui.cmenu_newmenu.menuAction().setVisible(False) @@ -3815,7 +3814,7 @@ class FlatCAMExcEditor(QtCore.QObject): units = self.app.defaults["units"].lower() self.plotcanvas.text_hud.text = \ - 'Dx:\t{:<.4f} [{:s}]\nDy:\t{:<.4f} [{:s}]\nX: \t{:<.4f} [{:s}]\nY: \t{:<.4f} [{:s}]'.format( + 'Dx:\t{:<.4f} [{:s}]\nDy:\t{:<.4f} [{:s}]\n\nX: \t{:<.4f} [{:s}]\nY: \t{:<.4f} [{:s}]'.format( self.app.dx, units, self.app.dy, units, x, units, y, units) # ## Utility geometry (animated) diff --git a/flatcamEditors/FlatCAMGeoEditor.py b/flatcamEditors/FlatCAMGeoEditor.py index e8d969cb..f897af79 100644 --- a/flatcamEditors/FlatCAMGeoEditor.py +++ b/flatcamEditors/FlatCAMGeoEditor.py @@ -4110,7 +4110,6 @@ class FlatCAMGeoEditor(QtCore.QObject): # start with GRID toolbar activated if self.app.ui.grid_snap_btn.isChecked() is False: self.app.ui.grid_snap_btn.trigger() - self.app.ui.on_grid_snap_triggered(state=True) def on_buffer_tool(self): buff_tool = BufferSelectionTool(self.app, self) @@ -4286,7 +4285,7 @@ class FlatCAMGeoEditor(QtCore.QObject): units = self.app.defaults["units"].lower() self.plotcanvas.text_hud.text = \ - 'Dx:\t{:<.4f} [{:s}]\nDy:\t{:<.4f} [{:s}]\nX: \t{:<.4f} [{:s}]\nY: \t{:<.4f} [{:s}]'.format( + 'Dx:\t{:<.4f} [{:s}]\nDy:\t{:<.4f} [{:s}]\n\nX: \t{:<.4f} [{:s}]\nY: \t{:<.4f} [{:s}]'.format( self.app.dx, units, self.app.dy, units, x, units, y, units) if event.button == 1 and event_is_dragging and isinstance(self.active_tool, FCEraser): diff --git a/flatcamEditors/FlatCAMGrbEditor.py b/flatcamEditors/FlatCAMGrbEditor.py index d5659fbf..adcb5c9f 100644 --- a/flatcamEditors/FlatCAMGrbEditor.py +++ b/flatcamEditors/FlatCAMGrbEditor.py @@ -3703,7 +3703,6 @@ class FlatCAMGrbEditor(QtCore.QObject): # start with GRID toolbar activated if self.app.ui.grid_snap_btn.isChecked() is False: self.app.ui.grid_snap_btn.trigger() - self.app.ui.on_grid_snap_triggered(state=True) # adjust the visibility of some of the canvas context menu self.app.ui.popmenu_edit.setVisible(False) @@ -4789,7 +4788,7 @@ class FlatCAMGrbEditor(QtCore.QObject): units = self.app.defaults["units"].lower() self.plotcanvas.text_hud.text = \ - 'Dx:\t{:<.4f} [{:s}]\nDy:\t{:<.4f} [{:s}]\nX: \t{:<.4f} [{:s}]\nY: \t{:<.4f} [{:s}]'.format( + 'Dx:\t{:<.4f} [{:s}]\nDy:\t{:<.4f} [{:s}]\n\nX: \t{:<.4f} [{:s}]\nY: \t{:<.4f} [{:s}]'.format( self.app.dx, units, self.app.dy, units, x, units, y, units) self.update_utility_geometry(data=(x, y)) diff --git a/flatcamGUI/FlatCAMGUI.py b/flatcamGUI/FlatCAMGUI.py index aeb7b86d..86dfb23f 100644 --- a/flatcamGUI/FlatCAMGUI.py +++ b/flatcamGUI/FlatCAMGUI.py @@ -819,15 +819,13 @@ class FlatCAMGUI(QtWidgets.QMainWindow): self.snap_toolbar = QtWidgets.QToolBar(_('Grid Toolbar')) self.snap_toolbar.setObjectName('Snap_TB') - self.addToolBar(self.snap_toolbar) - - flat_settings = QSettings("Open Source", "FlatCAM") - if flat_settings.contains("layout"): - layout = flat_settings.value('layout', type=str) - if layout == 'compact': - self.removeToolBar(self.snap_toolbar) - self.snap_toolbar.setMaximumHeight(30) - self.splitter_left.addWidget(self.snap_toolbar) + # self.addToolBar(self.snap_toolbar) + self.snap_toolbar.setStyleSheet( + """ + QToolBar { padding: 0; } + QToolBar QToolButton { padding: -2; margin: -2; } + """ + ) # ######################################################################## # ########################## File Toolbar# ############################### @@ -2302,10 +2300,6 @@ class FlatCAMGUI(QtWidgets.QMainWindow): self.fcinfo = FlatCAMInfoBar(app=self.app) self.infobar.addWidget(self.fcinfo, stretch=1) - self.snap_infobar_label = FCLabel() - self.snap_infobar_label.setPixmap(QtGui.QPixmap(self.app.resource_location + '/snap_16.png')) - self.infobar.addWidget(self.snap_infobar_label) - # self.rel_position_label = QtWidgets.QLabel( # "Dx: 0.0000   Dy: 0.0000    ") # self.rel_position_label.setMinimumWidth(110) @@ -2318,6 +2312,9 @@ class FlatCAMGUI(QtWidgets.QMainWindow): # self.position_label.setToolTip(_("Absolute measurement.\nReference is (X=0, Y= 0) position")) # self.infobar.addWidget(self.position_label) + self.snap_toolbar.setMaximumHeight(24) + self.infobar.addWidget(self.snap_toolbar) + self.units_label = QtWidgets.QLabel("[in]") self.units_label.setMargin(2) self.infobar.addWidget(self.units_label) @@ -2438,14 +2435,11 @@ class FlatCAMGUI(QtWidgets.QMainWindow): del qsettings self.lock_toolbar(lock=lock_state) - self.on_grid_snap_triggered(state=True) self.lock_action.triggered[bool].connect(self.lock_toolbar) self.pref_open_button.clicked.connect(self.on_preferences_open_folder) self.clear_btn.clicked.connect(self.on_gui_clear) - self.grid_snap_btn.triggered.connect(self.on_grid_snap_triggered) - self.snap_infobar_label.clicked.connect(self.on_grid_icon_snap_clicked) # to be used in the future # self.plot_tab_area.tab_attached.connect(lambda x: print(x)) @@ -2455,29 +2449,6 @@ class FlatCAMGUI(QtWidgets.QMainWindow): # %%%%%%%%%%%%%%%%% GUI Building FINISHED %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% # %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - def on_grid_snap_triggered(self, state): - """ - - :param state: A parameter with the state of the grid, boolean - - :return: - """ - if state: - self.snap_infobar_label.setPixmap(QtGui.QPixmap(self.app.resource_location + '/snap_filled_16.png')) - else: - self.snap_infobar_label.setPixmap(QtGui.QPixmap(self.app.resource_location + '/snap_16.png')) - - self.snap_infobar_label.clicked_state = state - - def on_grid_icon_snap_clicked(self): - """ - Slot called by clicking a GUI element, in this case a FCLabel - - :return: - """ - if isinstance(self.sender(), FCLabel): - self.grid_snap_btn.trigger() - def eventFilter(self, obj, event): """ Filter the ToolTips display based on a Preferences setting @@ -2786,52 +2757,11 @@ class FlatCAMGUI(QtWidgets.QMainWindow): self.aperture_move_btn = self.grb_edit_toolbar.addAction( QtGui.QIcon(self.app.resource_location + '/move32.png'), _("Move")) - # ######################################################################## - # ## Snap Toolbar # ## - # ######################################################################## - - # Snap GRID toolbar is always active to facilitate usage of measurements done on GRID - # self.addToolBar(self.snap_toolbar) - self.grid_snap_btn = self.snap_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/grid32.png'), _('Snap to grid')) - self.grid_gap_x_entry = FCEntry2() - self.grid_gap_x_entry.setMaximumWidth(70) - self.grid_gap_x_entry.setToolTip(_("Grid X snapping distance")) - self.snap_toolbar.addWidget(self.grid_gap_x_entry) - - self.grid_gap_y_entry = FCEntry2() - self.grid_gap_y_entry.setMaximumWidth(70) - self.grid_gap_y_entry.setToolTip(_("Grid Y snapping distance")) - self.snap_toolbar.addWidget(self.grid_gap_y_entry) - - self.grid_space_label = QtWidgets.QLabel(" ") - self.snap_toolbar.addWidget(self.grid_space_label) - self.grid_gap_link_cb = FCCheckBox() - self.grid_gap_link_cb.setToolTip(_("When active, value on Grid_X\n" - "is copied to the Grid_Y value.")) - self.snap_toolbar.addWidget(self.grid_gap_link_cb) - - self.ois_grid = OptionalInputSection(self.grid_gap_link_cb, [self.grid_gap_y_entry], logic=False) - - self.corner_snap_btn = self.snap_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/corner32.png'), _('Snap to corner')) - - self.snap_max_dist_entry = FCEntry() - self.snap_max_dist_entry.setMaximumWidth(70) - self.snap_max_dist_entry.setToolTip(_("Max. magnet distance")) - self.snap_magnet = self.snap_toolbar.addWidget(self.snap_max_dist_entry) - - self.grid_snap_btn.setCheckable(True) - self.corner_snap_btn.setCheckable(True) - self.update_obj_btn.setEnabled(False) - # start with GRID activated - self.grid_snap_btn.trigger() - qsettings = QSettings("Open Source", "FlatCAM") if qsettings.contains("layout"): layout = qsettings.value('layout', type=str) - if layout == 'standard': + if layout == 'standard' or layout == 'minimal': self.corner_snap_btn.setVisible(False) self.snap_magnet.setVisible(False) else: diff --git a/flatcamGUI/PlotCanvas.py b/flatcamGUI/PlotCanvas.py index a1be6099..75cba1da 100644 --- a/flatcamGUI/PlotCanvas.py +++ b/flatcamGUI/PlotCanvas.py @@ -150,17 +150,17 @@ class PlotCanvas(QtCore.QObject, VisPyCanvas): self.cursor_h_line = InfiniteLine(pos=None, color=c_color, vertical=False, parent=self.line_parent) - self.rect_hud = Rectangle(center=(90,45), color=self.rect_hud_color, border_color=self.rect_hud_color, - width=170, height=80, radius=[5, 5, 5, 5], parent=None) + self.rect_hud = Rectangle(center=(95,50), color=self.rect_hud_color, border_color=self.rect_hud_color, + width=180, height=90, radius=[5, 5, 5, 5], parent=None) self.rect_hud.set_gl_state(depth_test=False) # HUD Display self.hud_enabled = False - self.text_hud = Text('', color=self.text_hud_color, pos=(8, 45), method='gpu', anchor_x='left', parent=None) + self.text_hud = Text('', color=self.text_hud_color, pos=(10, 50), method='gpu', anchor_x='left', parent=None) self.text_hud.font_size = 8 units = self.fcapp.defaults["units"].lower() - self.text_hud.text = 'Dx:\t%s [%s]\nDy:\t%s [%s]\nX: \t%s [%s]\nY: \t%s [%s]' % \ + self.text_hud.text = 'Dx:\t%s [%s]\nDy:\t%s [%s]\n\nX: \t%s [%s]\nY: \t%s [%s]' % \ ('0.0000', units, '0.0000', units, '0.0000', units, '0.0000', units) if self.fcapp.defaults['global_hud'] is True: diff --git a/flatcamGUI/preferences/general/GeneralGUIPrefGroupUI.py b/flatcamGUI/preferences/general/GeneralGUIPrefGroupUI.py index baedacc7..914fc75f 100644 --- a/flatcamGUI/preferences/general/GeneralGUIPrefGroupUI.py +++ b/flatcamGUI/preferences/general/GeneralGUIPrefGroupUI.py @@ -654,7 +654,6 @@ class GeneralGUIPrefGroupUI(OptionsGroupUI): self.app.ui.removeToolBar(self.app.ui.exc_edit_toolbar) self.app.ui.removeToolBar(self.app.ui.geo_edit_toolbar) self.app.ui.removeToolBar(self.app.ui.grb_edit_toolbar) - self.app.ui.removeToolBar(self.app.ui.snap_toolbar) self.app.ui.removeToolBar(self.app.ui.toolbarshell) except Exception: pass @@ -697,11 +696,6 @@ class GeneralGUIPrefGroupUI(OptionsGroupUI): self.app.ui.exc_edit_toolbar.setObjectName('ExcEditor_TB') self.app.ui.addToolBar(Qt.RightToolBarArea, self.app.ui.exc_edit_toolbar) - self.app.ui.snap_toolbar = QtWidgets.QToolBar('Grid Toolbar') - self.app.ui.snap_toolbar.setObjectName('Snap_TB') - self.app.ui.snap_toolbar.setMaximumHeight(30) - self.app.ui.splitter_left.addWidget(self.app.ui.snap_toolbar) - self.app.ui.corner_snap_btn.setVisible(True) self.app.ui.snap_magnet.setVisible(True) else: @@ -743,18 +737,12 @@ class GeneralGUIPrefGroupUI(OptionsGroupUI): self.app.ui.grb_edit_toolbar.setObjectName('GrbEditor_TB') self.app.ui.addToolBar(self.app.ui.grb_edit_toolbar) - self.app.ui.snap_toolbar = QtWidgets.QToolBar('Grid Toolbar') - self.app.ui.snap_toolbar.setObjectName('Snap_TB') - # self.app.ui.snap_toolbar.setMaximumHeight(30) - self.app.ui.addToolBar(self.app.ui.snap_toolbar) - self.app.ui.corner_snap_btn.setVisible(False) self.app.ui.snap_magnet.setVisible(False) if current_layout == 'minimal': self.app.ui.toolbarview.setVisible(False) self.app.ui.toolbarshell.setVisible(False) - self.app.ui.snap_toolbar.setVisible(False) self.app.ui.geo_edit_toolbar.setVisible(False) self.app.ui.grb_edit_toolbar.setVisible(False) self.app.ui.exc_edit_toolbar.setVisible(False) @@ -767,7 +755,6 @@ class GeneralGUIPrefGroupUI(OptionsGroupUI): self.app.connect_toolbar_signals() self.app.ui.grid_snap_btn.setChecked(True) - self.app.ui.on_grid_snap_triggered(state=True) self.app.ui.grid_gap_x_entry.setText(str(self.app.defaults["global_gridx"])) self.app.ui.grid_gap_y_entry.setText(str(self.app.defaults["global_gridy"])) diff --git a/flatcamTools/ToolCopperThieving.py b/flatcamTools/ToolCopperThieving.py index f6c85731..2b3b447c 100644 --- a/flatcamTools/ToolCopperThieving.py +++ b/flatcamTools/ToolCopperThieving.py @@ -924,7 +924,7 @@ class ToolCopperThieving(FlatCAMTool): units = self.app.defaults["units"].lower() self.plotcanvas.text_hud.text = \ - 'Dx:\t{:<.4f} [{:s}]\nDy:\t{:<.4f} [{:s}]\nX: \t{:<.4f} [{:s}]\nY: \t{:<.4f} [{:s}]'.format( + 'Dx:\t{:<.4f} [{:s}]\nDy:\t{:<.4f} [{:s}]\n\nX: \t{:<.4f} [{:s}]\nY: \t{:<.4f} [{:s}]'.format( self.app.dx, units, self.app.dy, units, curr_pos[0], units, curr_pos[1], units) # draw the utility geometry diff --git a/flatcamTools/ToolDistance.py b/flatcamTools/ToolDistance.py index bcc506fb..7c28ed84 100644 --- a/flatcamTools/ToolDistance.py +++ b/flatcamTools/ToolDistance.py @@ -552,7 +552,7 @@ class Distance(FlatCAMTool): units = self.app.defaults["units"].lower() self.plotcanvas.text_hud.text = \ - 'Dx:\t{:<.4f} [{:s}]\nDy:\t{:<.4f} [{:s}]\nX: \t{:<.4f} [{:s}]\nY: \t{:<.4f} [{:s}]'.format( + 'Dx:\t{:<.4f} [{:s}]\nDy:\t{:<.4f} [{:s}]\n\nX: \t{:<.4f} [{:s}]\nY: \t{:<.4f} [{:s}]'.format( 0.0000, units, 0.0000, units, pos[0], units, pos[1], units) if self.rel_point1 is not None: diff --git a/flatcamTools/ToolNCC.py b/flatcamTools/ToolNCC.py index d01f02de..0a89be0e 100644 --- a/flatcamTools/ToolNCC.py +++ b/flatcamTools/ToolNCC.py @@ -1839,7 +1839,7 @@ class NonCopperClear(FlatCAMTool, Gerber): units = self.app.defaults["units"].lower() self.plotcanvas.text_hud.text = \ - 'Dx:\t{:<.4f} [{:s}]\nDy:\t{:<.4f} [{:s}]\nX: \t{:<.4f} [{:s}]\nY: \t{:<.4f} [{:s}]'.format( + 'Dx:\t{:<.4f} [{:s}]\nDy:\t{:<.4f} [{:s}]\n\nX: \t{:<.4f} [{:s}]\nY: \t{:<.4f} [{:s}]'.format( self.app.dx, units, self.app.dy, units, curr_pos[0], units, curr_pos[1], units) # draw the utility geometry diff --git a/flatcamTools/ToolPaint.py b/flatcamTools/ToolPaint.py index ae1b23cc..60abee34 100644 --- a/flatcamTools/ToolPaint.py +++ b/flatcamTools/ToolPaint.py @@ -1738,7 +1738,7 @@ class ToolPaint(FlatCAMTool, Gerber): units = self.app.defaults["units"].lower() self.plotcanvas.text_hud.text = \ - 'Dx:\t{:<.4f} [{:s}]\nDy:\t{:<.4f} [{:s}]\nX: \t{:<.4f} [{:s}]\nY: \t{:<.4f} [{:s}]'.format( + 'Dx:\t{:<.4f} [{:s}]\nDy:\t{:<.4f} [{:s}]\n\nX: \t{:<.4f} [{:s}]\nY: \t{:<.4f} [{:s}]'.format( self.app.dx, units, self.app.dy, units, curr_pos[0], units, curr_pos[1], units) # draw the utility geometry From 3c0ee97c61a0de7d9c8d68dcb1f77ef9d1effd6d Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Mon, 11 May 2020 20:10:27 +0300 Subject: [PATCH 18/99] - Snap Toolbar is now visible in Fullscreen - in Fullscreen now the Notebook is available but it will be hidden on Fullscreen launch - fixed some minor issues (in the HUD added a separating line, missing an icon in toolbars on first launch) --- CHANGELOG.md | 3 +++ FlatCAMApp.py | 6 ++++-- flatcamEditors/FlatCAMExcEditor.py | 2 +- flatcamEditors/FlatCAMGeoEditor.py | 2 +- flatcamEditors/FlatCAMGrbEditor.py | 9 ++++----- flatcamGUI/FlatCAMGUI.py | 2 ++ flatcamGUI/preferences/general/GeneralGUIPrefGroupUI.py | 3 +++ flatcamTools/ToolCopperThieving.py | 2 +- flatcamTools/ToolDistance.py | 2 +- flatcamTools/ToolNCC.py | 2 +- flatcamTools/ToolPaint.py | 2 +- 11 files changed, 22 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0392dee2..62d94acc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,9 @@ CHANGELOG for FlatCAM beta - made the HUD work in Legacy2D mode - fixed situation when the mouse cursor is outside of the canvas and no therefore returning None values - remade the Snap Toolbar presence; now it is always active and situated in the Status Bar +- Snap Toolbar is now visible in Fullscreen +- in Fullscreen now the Notebook is available but it will be hidden on Fullscreen launch +- fixed some minor issues (in the HUD added a separating line, missing an icon in toolbars on first launch) 10.05.2020 diff --git a/FlatCAMApp.py b/FlatCAMApp.py index 14e5b141..106b1496 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -4508,14 +4508,16 @@ class App(QtCore.QObject): for tb in self.ui.findChildren(QtWidgets.QToolBar): tb.setVisible(False) - self.ui.splitter_left.setVisible(False) + self.ui.snap_toolbar.setVisible(True) # This is always visible + # self.ui.splitter_left.setVisible(False) + self.ui.splitter.setSizes([0, 1]) self.toggle_fscreen = True elif self.toggle_fscreen is True or disable is True: 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() - self.ui.splitter_left.setVisible(True) + # self.ui.splitter_left.setVisible(True) self.toggle_fscreen = False def on_toggle_plotarea(self): diff --git a/flatcamEditors/FlatCAMExcEditor.py b/flatcamEditors/FlatCAMExcEditor.py index e598cc20..5023386c 100644 --- a/flatcamEditors/FlatCAMExcEditor.py +++ b/flatcamEditors/FlatCAMExcEditor.py @@ -3813,7 +3813,7 @@ class FlatCAMExcEditor(QtCore.QObject): # "%.4f    " % (self.app.dx, self.app.dy)) units = self.app.defaults["units"].lower() - self.plotcanvas.text_hud.text = \ + self.app.plotcanvas.text_hud.text = \ 'Dx:\t{:<.4f} [{:s}]\nDy:\t{:<.4f} [{:s}]\n\nX: \t{:<.4f} [{:s}]\nY: \t{:<.4f} [{:s}]'.format( self.app.dx, units, self.app.dy, units, x, units, y, units) diff --git a/flatcamEditors/FlatCAMGeoEditor.py b/flatcamEditors/FlatCAMGeoEditor.py index f897af79..d3675cfb 100644 --- a/flatcamEditors/FlatCAMGeoEditor.py +++ b/flatcamEditors/FlatCAMGeoEditor.py @@ -4284,7 +4284,7 @@ class FlatCAMGeoEditor(QtCore.QObject): # "%.4f    " % (self.app.dx, self.app.dy)) units = self.app.defaults["units"].lower() - self.plotcanvas.text_hud.text = \ + self.app.plotcanvas.text_hud.text = \ 'Dx:\t{:<.4f} [{:s}]\nDy:\t{:<.4f} [{:s}]\n\nX: \t{:<.4f} [{:s}]\nY: \t{:<.4f} [{:s}]'.format( self.app.dx, units, self.app.dy, units, x, units, y, units) diff --git a/flatcamEditors/FlatCAMGrbEditor.py b/flatcamEditors/FlatCAMGrbEditor.py index adcb5c9f..54dd72b4 100644 --- a/flatcamEditors/FlatCAMGrbEditor.py +++ b/flatcamEditors/FlatCAMGrbEditor.py @@ -4536,8 +4536,8 @@ class FlatCAMGrbEditor(QtCore.QObject): self.pos = (self.pos[0], self.pos[1]) if event.button == 1: - self.app.ui.rel_position_label.setText("Dx: %.4f   Dy: " - "%.4f    " % (0, 0)) + # self.app.ui.rel_position_label.setText("Dx: %.4f   Dy: " + # "%.4f    " % (0, 0)) # Selection with left mouse button if self.active_tool is not None: @@ -4549,8 +4549,7 @@ class FlatCAMGrbEditor(QtCore.QObject): self.app.defaults["global_point_clipboard_format"] % (self.decimals, self.pos[0], self.decimals, self.pos[1]) ) - self.app.inform.emit('[success] %s' % - _("Coordinates copied to clipboard.")) + self.app.inform.emit('[success] %s' % _("Coordinates copied to clipboard.")) return # Dispatch event to active_tool @@ -4787,7 +4786,7 @@ class FlatCAMGrbEditor(QtCore.QObject): # "%.4f    " % (self.app.dx, self.app.dy)) units = self.app.defaults["units"].lower() - self.plotcanvas.text_hud.text = \ + self.app.plotcanvas.text_hud.text = \ 'Dx:\t{:<.4f} [{:s}]\nDy:\t{:<.4f} [{:s}]\n\nX: \t{:<.4f} [{:s}]\nY: \t{:<.4f} [{:s}]'.format( self.app.dx, units, self.app.dy, units, x, units, y, units) diff --git a/flatcamGUI/FlatCAMGUI.py b/flatcamGUI/FlatCAMGUI.py index 86dfb23f..62eeaa13 100644 --- a/flatcamGUI/FlatCAMGUI.py +++ b/flatcamGUI/FlatCAMGUI.py @@ -2555,6 +2555,8 @@ class FlatCAMGUI(QtWidgets.QMainWindow): QtGui.QIcon(self.app.resource_location + '/distance_min32.png'), _("Distance Min Tool")) self.origin_btn = self.toolbargeo.addAction( QtGui.QIcon(self.app.resource_location + '/origin32.png'), _('Set Origin')) + self.move2origin_btn = self.toolbargeo.addAction( + QtGui.QIcon(self.app.resource_location + '/origin2_32.png'), _('Move to Origin')) self.jmp_btn = self.toolbargeo.addAction( QtGui.QIcon(self.app.resource_location + '/jump_to16.png'), _('Jump to Location')) self.locate_btn = self.toolbargeo.addAction( diff --git a/flatcamGUI/preferences/general/GeneralGUIPrefGroupUI.py b/flatcamGUI/preferences/general/GeneralGUIPrefGroupUI.py index 914fc75f..3815bed7 100644 --- a/flatcamGUI/preferences/general/GeneralGUIPrefGroupUI.py +++ b/flatcamGUI/preferences/general/GeneralGUIPrefGroupUI.py @@ -748,6 +748,9 @@ class GeneralGUIPrefGroupUI(OptionsGroupUI): self.app.ui.exc_edit_toolbar.setVisible(False) self.app.ui.lock_toolbar(lock=True) + self.app.ui.corner_snap_btn.setVisible(False) + self.app.ui.snap_magnet.setVisible(False) + # add all the actions to the toolbars self.app.ui.populate_toolbars() diff --git a/flatcamTools/ToolCopperThieving.py b/flatcamTools/ToolCopperThieving.py index 2b3b447c..8adb9fc4 100644 --- a/flatcamTools/ToolCopperThieving.py +++ b/flatcamTools/ToolCopperThieving.py @@ -923,7 +923,7 @@ class ToolCopperThieving(FlatCAMTool): # "%.4f    " % (self.app.dx, self.app.dy)) units = self.app.defaults["units"].lower() - self.plotcanvas.text_hud.text = \ + self.app.plotcanvas.text_hud.text = \ 'Dx:\t{:<.4f} [{:s}]\nDy:\t{:<.4f} [{:s}]\n\nX: \t{:<.4f} [{:s}]\nY: \t{:<.4f} [{:s}]'.format( self.app.dx, units, self.app.dy, units, curr_pos[0], units, curr_pos[1], units) diff --git a/flatcamTools/ToolDistance.py b/flatcamTools/ToolDistance.py index 7c28ed84..ef239454 100644 --- a/flatcamTools/ToolDistance.py +++ b/flatcamTools/ToolDistance.py @@ -551,7 +551,7 @@ class Distance(FlatCAMTool): # ) units = self.app.defaults["units"].lower() - self.plotcanvas.text_hud.text = \ + self.app.plotcanvas.text_hud.text = \ 'Dx:\t{:<.4f} [{:s}]\nDy:\t{:<.4f} [{:s}]\n\nX: \t{:<.4f} [{:s}]\nY: \t{:<.4f} [{:s}]'.format( 0.0000, units, 0.0000, units, pos[0], units, pos[1], units) diff --git a/flatcamTools/ToolNCC.py b/flatcamTools/ToolNCC.py index 0a89be0e..b3ab7fa5 100644 --- a/flatcamTools/ToolNCC.py +++ b/flatcamTools/ToolNCC.py @@ -1838,7 +1838,7 @@ class NonCopperClear(FlatCAMTool, Gerber): # "%.4f    " % (self.app.dx, self.app.dy)) units = self.app.defaults["units"].lower() - self.plotcanvas.text_hud.text = \ + self.app.plotcanvas.text_hud.text = \ 'Dx:\t{:<.4f} [{:s}]\nDy:\t{:<.4f} [{:s}]\n\nX: \t{:<.4f} [{:s}]\nY: \t{:<.4f} [{:s}]'.format( self.app.dx, units, self.app.dy, units, curr_pos[0], units, curr_pos[1], units) diff --git a/flatcamTools/ToolPaint.py b/flatcamTools/ToolPaint.py index 60abee34..131e025b 100644 --- a/flatcamTools/ToolPaint.py +++ b/flatcamTools/ToolPaint.py @@ -1737,7 +1737,7 @@ class ToolPaint(FlatCAMTool, Gerber): # "%.4f    " % (self.app.dx, self.app.dy)) units = self.app.defaults["units"].lower() - self.plotcanvas.text_hud.text = \ + self.app.plotcanvas.text_hud.text = \ 'Dx:\t{:<.4f} [{:s}]\nDy:\t{:<.4f} [{:s}]\n\nX: \t{:<.4f} [{:s}]\nY: \t{:<.4f} [{:s}]'.format( self.app.dx, units, self.app.dy, units, curr_pos[0], units, curr_pos[1], units) From 40c52455e1ee32e64701a94180283c0f06f0ccdf Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Mon, 11 May 2020 22:56:06 +0300 Subject: [PATCH 19/99] - made sure that the corner snap buttons are shown only in Editors - changed the HUD color when using Dark theme --- CHANGELOG.md | 2 ++ flatcamEditors/FlatCAMExcEditor.py | 30 ++----------------- flatcamEditors/FlatCAMGeoEditor.py | 27 ++--------------- flatcamEditors/FlatCAMGrbEditor.py | 29 ++---------------- flatcamGUI/FlatCAMGUI.py | 29 ++++++------------ flatcamGUI/PlotCanvas.py | 2 +- .../general/GeneralGUIPrefGroupUI.py | 11 ++----- 7 files changed, 24 insertions(+), 106 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 62d94acc..938e7d72 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,8 @@ CHANGELOG for FlatCAM beta - Snap Toolbar is now visible in Fullscreen - in Fullscreen now the Notebook is available but it will be hidden on Fullscreen launch - fixed some minor issues (in the HUD added a separating line, missing an icon in toolbars on first launch) +- made sure that the corner snap buttons are shown only in Editors +- changed the HUD color when using Dark theme 10.05.2020 diff --git a/flatcamEditors/FlatCAMExcEditor.py b/flatcamEditors/FlatCAMExcEditor.py index 5023386c..e77d0928 100644 --- a/flatcamEditors/FlatCAMExcEditor.py +++ b/flatcamEditors/FlatCAMExcEditor.py @@ -2819,10 +2819,8 @@ class FlatCAMExcEditor(QtCore.QObject): self.tool_shape.enabled = True # self.app.app_cursor.enabled = True - self.app.ui.snap_max_dist_entry.setEnabled(True) - self.app.ui.corner_snap_btn.setEnabled(True) - self.app.ui.snap_magnet.setVisible(True) self.app.ui.corner_snap_btn.setVisible(True) + self.app.ui.snap_magnet.setVisible(True) self.app.ui.exc_editor_menu.setDisabled(False) self.app.ui.exc_editor_menu.menuAction().setVisible(True) @@ -2868,30 +2866,8 @@ class FlatCAMExcEditor(QtCore.QObject): self.clear() self.app.ui.exc_edit_toolbar.setDisabled(True) - settings = QSettings("Open Source", "FlatCAM") - if settings.contains("layout"): - layout = settings.value('layout', type=str) - if layout == 'standard': - # self.app.ui.exc_edit_toolbar.setVisible(False) - - self.app.ui.snap_max_dist_entry.setEnabled(False) - self.app.ui.corner_snap_btn.setEnabled(False) - self.app.ui.snap_magnet.setVisible(False) - self.app.ui.corner_snap_btn.setVisible(False) - else: - # self.app.ui.exc_edit_toolbar.setVisible(True) - - self.app.ui.snap_max_dist_entry.setEnabled(False) - self.app.ui.corner_snap_btn.setEnabled(False) - self.app.ui.snap_magnet.setVisible(True) - self.app.ui.corner_snap_btn.setVisible(True) - else: - # self.app.ui.exc_edit_toolbar.setVisible(False) - - self.app.ui.snap_max_dist_entry.setEnabled(False) - self.app.ui.corner_snap_btn.setEnabled(False) - self.app.ui.snap_magnet.setVisible(False) - self.app.ui.corner_snap_btn.setVisible(False) + self.app.ui.corner_snap_btn.setVisible(False) + self.app.ui.snap_magnet.setVisible(False) # set the Editor Toolbar visibility to what was before entering in the Editor self.app.ui.exc_edit_toolbar.setVisible(False) if self.toolbar_old_state is False \ diff --git a/flatcamEditors/FlatCAMGeoEditor.py b/flatcamEditors/FlatCAMGeoEditor.py index d3675cfb..6e4b616b 100644 --- a/flatcamEditors/FlatCAMGeoEditor.py +++ b/flatcamEditors/FlatCAMGeoEditor.py @@ -3654,10 +3654,8 @@ class FlatCAMGeoEditor(QtCore.QObject): self.tool_shape.enabled = True self.app.app_cursor.enabled = True - self.app.ui.snap_max_dist_entry.setEnabled(True) - self.app.ui.corner_snap_btn.setEnabled(True) - self.app.ui.snap_magnet.setVisible(True) self.app.ui.corner_snap_btn.setVisible(True) + self.app.ui.snap_magnet.setVisible(True) self.app.ui.geo_editor_menu.setDisabled(False) self.app.ui.geo_editor_menu.menuAction().setVisible(True) @@ -3713,27 +3711,8 @@ class FlatCAMGeoEditor(QtCore.QObject): self.app.ui.geo_edit_toolbar.setDisabled(True) settings = QSettings("Open Source", "FlatCAM") - if settings.contains("layout"): - layout = settings.value('layout', type=str) - if layout == 'standard': - # self.app.ui.geo_edit_toolbar.setVisible(False) - - self.app.ui.snap_max_dist_entry.setEnabled(False) - self.app.ui.corner_snap_btn.setEnabled(False) - self.app.ui.snap_magnet.setVisible(False) - self.app.ui.corner_snap_btn.setVisible(False) - else: - # self.app.ui.geo_edit_toolbar.setVisible(True) - - self.app.ui.snap_max_dist_entry.setEnabled(False) - self.app.ui.corner_snap_btn.setEnabled(False) - else: - # self.app.ui.geo_edit_toolbar.setVisible(False) - - self.app.ui.snap_magnet.setVisible(False) - self.app.ui.corner_snap_btn.setVisible(False) - self.app.ui.snap_max_dist_entry.setEnabled(False) - self.app.ui.corner_snap_btn.setEnabled(False) + self.app.ui.corner_snap_btn.setVisible(False) + self.app.ui.snap_magnet.setVisible(False) # set the Editor Toolbar visibility to what was before entering in the Editor self.app.ui.geo_edit_toolbar.setVisible(False) if self.toolbar_old_state is False \ diff --git a/flatcamEditors/FlatCAMGrbEditor.py b/flatcamEditors/FlatCAMGrbEditor.py index 54dd72b4..0658926b 100644 --- a/flatcamEditors/FlatCAMGrbEditor.py +++ b/flatcamEditors/FlatCAMGrbEditor.py @@ -3685,10 +3685,8 @@ class FlatCAMGrbEditor(QtCore.QObject): self.shapes.enabled = True self.tool_shape.enabled = True - self.app.ui.snap_max_dist_entry.setEnabled(True) - self.app.ui.corner_snap_btn.setEnabled(True) - self.app.ui.snap_magnet.setVisible(True) self.app.ui.corner_snap_btn.setVisible(True) + self.app.ui.snap_magnet.setVisible(True) self.app.ui.grb_editor_menu.setDisabled(False) self.app.ui.grb_editor_menu.menuAction().setVisible(True) @@ -3735,29 +3733,8 @@ class FlatCAMGrbEditor(QtCore.QObject): self.app.ui.grb_edit_toolbar.setDisabled(True) settings = QSettings("Open Source", "FlatCAM") - if settings.contains("layout"): - layout = settings.value('layout', type=str) - if layout == 'standard': - # self.app.ui.exc_edit_toolbar.setVisible(False) - - self.app.ui.snap_max_dist_entry.setEnabled(False) - self.app.ui.corner_snap_btn.setEnabled(False) - self.app.ui.snap_magnet.setVisible(False) - self.app.ui.corner_snap_btn.setVisible(False) - else: - # self.app.ui.exc_edit_toolbar.setVisible(True) - - self.app.ui.snap_max_dist_entry.setEnabled(False) - self.app.ui.corner_snap_btn.setEnabled(False) - self.app.ui.snap_magnet.setVisible(True) - self.app.ui.corner_snap_btn.setVisible(True) - else: - # self.app.ui.exc_edit_toolbar.setVisible(False) - - self.app.ui.snap_max_dist_entry.setEnabled(False) - self.app.ui.corner_snap_btn.setEnabled(False) - self.app.ui.snap_magnet.setVisible(False) - self.app.ui.corner_snap_btn.setVisible(False) + self.app.ui.corner_snap_btn.setVisible(False) + self.app.ui.snap_magnet.setVisible(False) # set the Editor Toolbar visibility to what was before entering in the Editor self.app.ui.grb_edit_toolbar.setVisible(False) if self.toolbar_old_state is False \ diff --git a/flatcamGUI/FlatCAMGUI.py b/flatcamGUI/FlatCAMGUI.py index 62eeaa13..08821168 100644 --- a/flatcamGUI/FlatCAMGUI.py +++ b/flatcamGUI/FlatCAMGUI.py @@ -1110,6 +1110,9 @@ class FlatCAMGUI(QtWidgets.QMainWindow): self.snap_max_dist_entry.setToolTip(_("Max. magnet distance")) self.snap_magnet = self.snap_toolbar.addWidget(self.snap_max_dist_entry) + self.corner_snap_btn.setVisible(False) + self.snap_magnet.setVisible(False) + # ######################################################################## # ########################## Notebook # ################################## # ######################################################################## @@ -2384,29 +2387,21 @@ class FlatCAMGUI(QtWidgets.QMainWindow): self.restoreState(saved_gui_state) log.debug("FlatCAMGUI.__init__() --> UI state restored from QSettings.") + self.corner_snap_btn.setVisible(False) + self.snap_magnet.setVisible(False) + if flat_settings.contains("layout"): layout = flat_settings.value('layout', type=str) self.exc_edit_toolbar.setDisabled(True) self.geo_edit_toolbar.setDisabled(True) self.grb_edit_toolbar.setDisabled(True) - if layout == 'standard': - self.corner_snap_btn.setVisible(False) - self.snap_magnet.setVisible(False) - else: - self.snap_magnet.setVisible(True) - self.corner_snap_btn.setVisible(True) - self.snap_magnet.setDisabled(True) - self.corner_snap_btn.setDisabled(True) log.debug("FlatCAMGUI.__init__() --> UI layout restored from QSettings. Layout = %s" % str(layout)) else: self.exc_edit_toolbar.setDisabled(True) self.geo_edit_toolbar.setDisabled(True) self.grb_edit_toolbar.setDisabled(True) - self.corner_snap_btn.setVisible(False) - self.snap_magnet.setVisible(False) - flat_settings.setValue('layout', "standard") # This will write the setting to the platform specific storage. del flat_settings @@ -2759,19 +2754,13 @@ class FlatCAMGUI(QtWidgets.QMainWindow): self.aperture_move_btn = self.grb_edit_toolbar.addAction( QtGui.QIcon(self.app.resource_location + '/move32.png'), _("Move")) + self.corner_snap_btn.setVisible(False) + self.snap_magnet.setVisible(False) + qsettings = QSettings("Open Source", "FlatCAM") if qsettings.contains("layout"): layout = qsettings.value('layout', type=str) - if layout == 'standard' or layout == 'minimal': - self.corner_snap_btn.setVisible(False) - self.snap_magnet.setVisible(False) - else: - self.corner_snap_btn.setVisible(True) - self.snap_magnet.setVisible(True) - self.corner_snap_btn.setDisabled(True) - self.snap_magnet.setDisabled(True) - # on 'minimal' layout only some toolbars are active if layout != 'minimal': self.exc_edit_toolbar.setVisible(True) diff --git a/flatcamGUI/PlotCanvas.py b/flatcamGUI/PlotCanvas.py index 75cba1da..acd342ca 100644 --- a/flatcamGUI/PlotCanvas.py +++ b/flatcamGUI/PlotCanvas.py @@ -58,7 +58,7 @@ class PlotCanvas(QtCore.QObject, VisPyCanvas): self.text_hud_color = 'black' else: self.line_color = (0.4, 0.4, 0.4, 1.0) - self.rect_hud_color = Color('#0000FF10') + self.rect_hud_color = Color('#80808040') self.text_hud_color = 'white' # workspace lines; I didn't use the rectangle because I didn't want to add another VisPy Node, diff --git a/flatcamGUI/preferences/general/GeneralGUIPrefGroupUI.py b/flatcamGUI/preferences/general/GeneralGUIPrefGroupUI.py index 3815bed7..f9e86bf3 100644 --- a/flatcamGUI/preferences/general/GeneralGUIPrefGroupUI.py +++ b/flatcamGUI/preferences/general/GeneralGUIPrefGroupUI.py @@ -696,8 +696,6 @@ class GeneralGUIPrefGroupUI(OptionsGroupUI): self.app.ui.exc_edit_toolbar.setObjectName('ExcEditor_TB') self.app.ui.addToolBar(Qt.RightToolBarArea, self.app.ui.exc_edit_toolbar) - self.app.ui.corner_snap_btn.setVisible(True) - self.app.ui.snap_magnet.setVisible(True) else: # ## TOOLBAR INSTALLATION # ## self.app.ui.toolbarfile = QtWidgets.QToolBar('File Toolbar') @@ -737,9 +735,6 @@ class GeneralGUIPrefGroupUI(OptionsGroupUI): self.app.ui.grb_edit_toolbar.setObjectName('GrbEditor_TB') self.app.ui.addToolBar(self.app.ui.grb_edit_toolbar) - self.app.ui.corner_snap_btn.setVisible(False) - self.app.ui.snap_magnet.setVisible(False) - if current_layout == 'minimal': self.app.ui.toolbarview.setVisible(False) self.app.ui.toolbarshell.setVisible(False) @@ -748,9 +743,6 @@ class GeneralGUIPrefGroupUI(OptionsGroupUI): self.app.ui.exc_edit_toolbar.setVisible(False) self.app.ui.lock_toolbar(lock=True) - self.app.ui.corner_snap_btn.setVisible(False) - self.app.ui.snap_magnet.setVisible(False) - # add all the actions to the toolbars self.app.ui.populate_toolbars() @@ -759,6 +751,9 @@ class GeneralGUIPrefGroupUI(OptionsGroupUI): self.app.ui.grid_snap_btn.setChecked(True) + self.app.ui.corner_snap_btn.setVisible(False) + self.app.ui.snap_magnet.setVisible(False) + self.app.ui.grid_gap_x_entry.setText(str(self.app.defaults["global_gridx"])) self.app.ui.grid_gap_y_entry.setText(str(self.app.defaults["global_gridy"])) self.app.ui.snap_max_dist_entry.setText(str(self.app.defaults["global_snap_max"])) From 3a337212f0c0d4f289fafee8d20bc25f8cdca800 Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Tue, 12 May 2020 01:09:00 +0300 Subject: [PATCH 20/99] - fix issue in Legacy2D graphic mode where the snap function was not accessible when the PlotCanvasLegacy class was created - modified the HUD in Legacy2D when using Dark Theme to use different colors - modified how the graphic engine change act in Preferences: now only by clicking Apply(or Save) the change will happen. And there is also a message asking for confirmation --- CHANGELOG.md | 3 + FlatCAMApp.py | 3 +- flatcamGUI/PlotCanvasLegacy.py | 86 +++++++++++++++---- .../preferences/PreferencesUIManager.py | 28 ++++-- 4 files changed, 93 insertions(+), 27 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 938e7d72..8e1866d9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,9 @@ CHANGELOG for FlatCAM beta - fixed some minor issues (in the HUD added a separating line, missing an icon in toolbars on first launch) - made sure that the corner snap buttons are shown only in Editors - changed the HUD color when using Dark theme +- fix issue in Legacy2D graphic mode where the snap function was not accessible when the PlotCanvasLegacy class was created +- modified the HUD in Legacy2D when using Dark Theme to use different colors +- modified how the graphic engine change act in Preferences: now only by clicking Apply(or Save) the change will happen. And there is also a message asking for confirmation 10.05.2020 diff --git a/FlatCAMApp.py b/FlatCAMApp.py index 106b1496..c0007c80 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -981,7 +981,6 @@ class App(QtCore.QObject): # ########################################################################################################### # ######################################## GUI SETTINGS SIGNALS ############################################# # ########################################################################################################### - self.ui.general_defaults_form.general_app_group.ge_radio.activated_custom.connect(self.on_app_restart) self.ui.general_defaults_form.general_app_set_group.cursor_radio.activated_custom.connect(self.on_cursor_type) # ######################################## Tools related signals ############################################ @@ -4621,7 +4620,7 @@ class App(QtCore.QObject): if self.is_legacy is False: # HACK: enabling/disabling the cursor seams to somehow update the shapes on screen # - perhaps is a bug in VisPy implementation - if self.grid_status() is True: + if self.grid_status(): self.app_cursor.enabled = False self.app_cursor.enabled = True else: diff --git a/flatcamGUI/PlotCanvasLegacy.py b/flatcamGUI/PlotCanvasLegacy.py index 7856bb8f..0fabff1e 100644 --- a/flatcamGUI/PlotCanvasLegacy.py +++ b/flatcamGUI/PlotCanvasLegacy.py @@ -19,6 +19,8 @@ from shapely.geometry import Polygon, LineString, LinearRing from copy import deepcopy import logging +import numpy as np + import gettext import FlatCAMTranslation as fcTranslate import builtins @@ -153,8 +155,8 @@ class PlotCanvasLegacy(QtCore.QObject): else: theme_color = '#000000' tick_color = '#FFFFFF' - self.rect_hud_color = '#0000FF10' - self.text_hud_color = '#000000' + self.rect_hud_color = '#80808040' + self.text_hud_color = '#FFFFFF' # workspace lines; I didn't use the rectangle because I didn't want to add another VisPy Node, # which might decrease performance @@ -306,11 +308,6 @@ class PlotCanvasLegacy(QtCore.QObject): self.hud_enabled = False self.text_hud = self.Thud(plotcanvas=self) - # bbox_props = dict(boxstyle="round,pad=0.3", fc="blue", ec="b", lw=0) - # self.text_hud = self.figure.text(0, 0, "Direction", ha="left", va="center", rotation=0, - # size=15, - # bbox=bbox_props) - # draw a rectangle made out of 4 lines on the canvas to serve as a hint for the work area # all CNC have a limited workspace if self.app.defaults['global_workspace'] is True: @@ -336,19 +333,21 @@ class PlotCanvasLegacy(QtCore.QObject): self.p = plotcanvas units = self.p.app.defaults['units'] - self._text = 'Dx: %s [%s]\nDy: %s [%s]\nX: %s [%s]\nY: %s [%s]' % \ + self._text = 'Dx: %s [%s]\nDy: %s [%s]\n\nX: %s [%s]\nY: %s [%s]' % \ ('0.0000', units, '0.0000', units, '0.0000', units, '0.0000', units) - self.hud_holder = AnchoredText(self._text, - prop=dict(size=20), frameon=True, - loc='upper left', - ) + self.hud_holder = AnchoredText(self._text, prop=dict(size=20), frameon=True, loc='upper left') self.hud_holder.patch.set_boxstyle("round,pad=0.,rounding_size=0.2") - self.hud_holder.patch.set_facecolor('blue') - self.hud_holder.patch.set_alpha(0.3) + fc_color = self.p.rect_hud_color[:-2] + fc_alpha = int(self.p.rect_hud_color[-2:], 16) / 255 + text_color = self.p.text_hud_color + + self.hud_holder.patch.set_facecolor(fc_color) + self.hud_holder.patch.set_alpha(fc_alpha) self.hud_holder.patch.set_edgecolor((0, 0, 0, 0)) + self. hud_holder.txt._text.set_color(color=text_color) self.text_changed.connect(self.on_text_changed) @property @@ -496,7 +495,7 @@ class PlotCanvasLegacy(QtCore.QObject): if self.big_cursor is False: try: - x, y = self.app.geo_editor.snap(x_pos, y_pos) + x, y = self.snap(x_pos, y_pos) # Pointer (snapped) # The size of the cursor is multiplied by 1.65 because that value made the cursor similar with the @@ -529,7 +528,7 @@ class PlotCanvasLegacy(QtCore.QObject): pass self.canvas.draw_idle() - self.canvas.blit(self.axes.bbox) + self.canvas.blit(self.axes.bbox) def clear_cursor(self, state): if state is True: @@ -931,7 +930,7 @@ class PlotCanvasLegacy(QtCore.QObject): self.canvas.draw_idle() # #### Temporary place-holder for cached update ##### - self.update_screen_request.emit([0, 0, 0, 0, 0]) + # self.update_screen_request.emit([0, 0, 0, 0, 0]) if self.app.defaults["global_cursor_color_enabled"] is True: self.draw_cursor(x_pos=x, y_pos=y, color=self.app.cursor_color_3D) @@ -983,6 +982,59 @@ class PlotCanvasLegacy(QtCore.QObject): return width / xpx, height / ypx + def snap(self, x, y): + """ + Adjusts coordinates to snap settings. + + :param x: Input coordinate X + :param y: Input coordinate Y + :return: Snapped (x, y) + """ + + snap_x, snap_y = (x, y) + snap_distance = np.Inf + + # ### Grid snap + if self.app.grid_status(): + if self.app.defaults["global_gridx"] != 0: + try: + snap_x_ = round(x / float(self.app.defaults["global_gridx"])) * \ + float(self.app.defaults["global_gridx"]) + except TypeError: + snap_x_ = x + else: + snap_x_ = x + + # If the Grid_gap_linked on Grid Toolbar is checked then the snap distance on GridY entry will be ignored + # and it will use the snap distance from GridX entry + if self.app.ui.grid_gap_link_cb.isChecked(): + if self.app.defaults["global_gridx"] != 0: + try: + snap_y_ = round(y / float(self.app.defaults["global_gridx"])) * \ + float(self.app.defaults["global_gridx"]) + except TypeError: + snap_y_ = y + else: + snap_y_ = y + else: + if self.app.defaults["global_gridy"] != 0: + try: + snap_y_ = round(y / float(self.app.defaults["global_gridy"])) * \ + float(self.app.defaults["global_gridy"]) + except TypeError: + snap_y_ = y + else: + snap_y_ = y + nearest_grid_distance = self.distance((x, y), (snap_x_, snap_y_)) + if nearest_grid_distance < snap_distance: + snap_x, snap_y = (snap_x_, snap_y_) + + return snap_x, snap_y + + @staticmethod + def distance(pt1, pt2): + return np.sqrt((pt1[0] - pt2[0]) ** 2 + (pt1[1] - pt2[1]) ** 2) + class FakeCursor(QtCore.QObject): """ diff --git a/flatcamGUI/preferences/PreferencesUIManager.py b/flatcamGUI/preferences/PreferencesUIManager.py index c49841ba..3b7306fa 100644 --- a/flatcamGUI/preferences/PreferencesUIManager.py +++ b/flatcamGUI/preferences/PreferencesUIManager.py @@ -921,8 +921,12 @@ class PreferencesUIManager: theme = 'white' should_restart = False - val = self.ui.general_defaults_form.general_gui_group.theme_radio.get_value() - if val != theme: + theme_new_val = self.ui.general_defaults_form.general_gui_group.theme_radio.get_value() + + ge = self.defaults["global_graphic_engine"] + ge_val = self.ui.general_defaults_form.general_app_group.ge_radio.get_value() + + if theme_new_val != theme or ge != ge_val: msgbox = QtWidgets.QMessageBox() msgbox.setText(_("Are you sure you want to continue?")) msgbox.setWindowTitle(_("Application restart")) @@ -935,15 +939,22 @@ class PreferencesUIManager: msgbox.exec_() response = msgbox.clickedButton() - if response == bt_yes: - theme_settings.setValue('theme', val) + if theme_new_val != theme: + if response == bt_yes: + theme_settings.setValue('theme', theme_new_val) - # This will write the setting to the platform specific storage. - del theme_settings + # This will write the setting to the platform specific storage. + del theme_settings - should_restart = True + should_restart = True + else: + self.ui.general_defaults_form.general_gui_group.theme_radio.set_value(theme) else: - self.ui.general_defaults_form.general_gui_group.theme_radio.set_value(theme) + if response == bt_yes: + self.defaults["global_graphic_engine"] = ge_val + should_restart = True + else: + self.ui.general_defaults_form.general_app_group.ge_radio.set_value(ge) if save_to_file or should_restart is True: self.save_defaults(silent=False) @@ -1035,6 +1046,7 @@ class PreferencesUIManager: :return: None """ self.defaults.report_usage("save_defaults") + log.debug("App.PreferencesUIManager.save_defaults()") if data_path is None: data_path = self.data_path From d739a5b05da2e5c058da53ec6c1e925bf710c72c Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Tue, 12 May 2020 01:21:29 +0300 Subject: [PATCH 21/99] - re-added the position labels in the status bar; they will be useful if HUD is Off (Altium does the same :) so learn from the best) --- CHANGELOG.md | 1 + FlatCAMApp.py | 28 ++++++++++++++-------------- FlatCAMCommon.py | 4 ++-- Utils/vispy_example.py | 2 +- flatcamEditors/FlatCAMExcEditor.py | 4 ++-- flatcamEditors/FlatCAMGeoEditor.py | 4 ++-- flatcamEditors/FlatCAMGrbEditor.py | 4 ++-- flatcamGUI/FlatCAMGUI.py | 10 +++++----- flatcamObjects/FlatCAMCNCJob.py | 2 +- flatcamTools/ToolCalibration.py | 2 +- flatcamTools/ToolCopperThieving.py | 4 ++-- flatcamTools/ToolDistance.py | 12 ++++++------ flatcamTools/ToolNCC.py | 4 ++-- flatcamTools/ToolPaint.py | 4 ++-- 14 files changed, 43 insertions(+), 42 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8e1866d9..39b42859 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ CHANGELOG for FlatCAM beta - fix issue in Legacy2D graphic mode where the snap function was not accessible when the PlotCanvasLegacy class was created - modified the HUD in Legacy2D when using Dark Theme to use different colors - modified how the graphic engine change act in Preferences: now only by clicking Apply(or Save) the change will happen. And there is also a message asking for confirmation +- re-added the position labels in the status bar; they will be useful if HUD is Off (Altium does the same :) so learn from the best) 10.05.2020 diff --git a/FlatCAMApp.py b/FlatCAMApp.py index c0007c80..e551d704 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -3480,7 +3480,7 @@ class App(QtCore.QObject): # delete the absolute and relative position and messages in the infobar self.ui.position_label.setText("") - self.ui.rel_position_label.setText("") + # self.ui.rel_position_label.setText("") # Switch plot_area to preferences page self.ui.plot_tab_area.setCurrentWidget(self.book_dialog_tab) @@ -5386,8 +5386,8 @@ class App(QtCore.QObject): # Set the relative position label dx = location[0] - float(self.rel_point1[0]) dy = location[1] - float(self.rel_point1[1]) - # self.ui.position_label.setText("    X: %.4f   " - # "Y: %.4f" % (location[0], location[1])) + self.ui.position_label.setText(" X: %.4f   " + "Y: %.4f " % (location[0], location[1])) # # Set the position label # # self.ui.rel_position_label.setText("Dx: %.4f   Dy: " @@ -5542,8 +5542,8 @@ class App(QtCore.QObject): self.dx = location[0] - float(self.rel_point1[0]) self.dy = location[1] - float(self.rel_point1[1]) # Set the position label - # self.ui.position_label.setText("    X: %.4f   " - # "Y: %.4f" % (location[0], location[1])) + self.ui.position_label.setText(" X: %.4f   " + "Y: %.4f " % (location[0], location[1])) # self.ui.rel_position_label.setText("Dx: %.4f   Dy: " # "%.4f    " % (self.dx, self.dy)) @@ -5859,7 +5859,7 @@ class App(QtCore.QObject): self.ui.plot_tab_area.addTab(self.ui.preferences_tab, _("Preferences")) # delete the absolute and relative position and messages in the infobar - # self.ui.position_label.setText("") + self.ui.position_label.setText("") # self.ui.rel_position_label.setText("") # Switch plot_area to preferences page @@ -5957,7 +5957,7 @@ class App(QtCore.QObject): # delete the absolute and relative position and messages in the infobar self.ui.position_label.setText("") - self.ui.rel_position_label.setText("") + # self.ui.rel_position_label.setText("") # Switch plot_area to preferences page self.ui.plot_tab_area.setCurrentWidget(self.tools_db_tab) @@ -6623,7 +6623,7 @@ class App(QtCore.QObject): # delete the absolute and relative position and messages in the infobar self.ui.position_label.setText("") - self.ui.rel_position_label.setText("") + # self.ui.rel_position_label.setText("") # Switch plot_area to preferences page self.ui.plot_tab_area.setCurrentWidget(self.ui.shortcuts_tab) @@ -6771,8 +6771,8 @@ class App(QtCore.QObject): self.dx = pos[0] - float(self.rel_point1[0]) self.dy = pos[1] - float(self.rel_point1[1]) - # self.ui.position_label.setText("    X: %.4f   " - # "Y: %.4f" % (pos[0], pos[1])) + self.ui.position_label.setText(" X: %.4f   " + "Y: %.4f " % (pos[0], pos[1])) # self.ui.rel_position_label.setText("Dx: %.4f   Dy: " # "%.4f    " % (self.dx, self.dy)) @@ -6831,7 +6831,7 @@ class App(QtCore.QObject): except Exception as e: log.debug("App.on_mouse_move_over_plot() - rel_point1 is not None -> %s" % str(e)) - # self.ui.position_label.setText("") + self.ui.position_label.setText("") # self.ui.rel_position_label.setText("") self.mouse = None @@ -8142,7 +8142,7 @@ class App(QtCore.QObject): # delete the absolute and relative position and messages in the infobar self.ui.position_label.setText("") - self.ui.rel_position_label.setText("") + # self.ui.rel_position_label.setText("") # first clear previous text in text editor (if any) self.text_editor_tab.code_editor.clear() @@ -8193,7 +8193,7 @@ class App(QtCore.QObject): # delete the absolute and relative position and messages in the infobar self.ui.position_label.setText("") - self.ui.rel_position_label.setText("") + # self.ui.rel_position_label.setText("") # first clear previous text in text editor (if any) self.source_editor_tab.code_editor.clear() @@ -8317,7 +8317,7 @@ class App(QtCore.QObject): # delete the absolute and relative position and messages in the infobar self.ui.position_label.setText("") - self.ui.rel_position_label.setText("") + # self.ui.rel_position_label.setText("") self.new_script_object() diff --git a/FlatCAMCommon.py b/FlatCAMCommon.py index ea6c3f78..f7bfae9e 100644 --- a/FlatCAMCommon.py +++ b/FlatCAMCommon.py @@ -471,8 +471,8 @@ class ExclusionAreas(QtCore.QObject): self.app.dx = curr_pos[0] - float(self.cursor_pos[0]) self.app.dy = curr_pos[1] - float(self.cursor_pos[1]) - # self.app.ui.position_label.setText("    X: %.4f   " - # "Y: %.4f" % (curr_pos[0], curr_pos[1])) + self.app.ui.position_label.setText(" X: %.4f   " + "Y: %.4f " % (curr_pos[0], curr_pos[1])) # self.app.ui.rel_position_label.setText("Dx: %.4f   Dy: " # "%.4f    " % (self.app.dx, self.app.dy)) diff --git a/Utils/vispy_example.py b/Utils/vispy_example.py index a9eaee12..980d2b10 100644 --- a/Utils/vispy_example.py +++ b/Utils/vispy_example.py @@ -182,7 +182,7 @@ class MyApp(QtCore.QObject): # we don't need all the info in the tuple returned by the translate_coords() # only first 2 elements pos_canvas = [pos_canvas[0], pos_canvas[1]] - # self.ui.position_label.setText("Position: X: %.4f\tY: %.4f" % (pos_canvas[0], pos_canvas[1])) + self.ui.position_label.setText("Position: X: %.4f\tY: %.4f" % (pos_canvas[0], pos_canvas[1])) # pos_text = 'Coordinates: \nX: {:<7.4f}\nY: {:<7.4f}'.format(pos_canvas[0], pos_canvas[1]) pos_text = 'Coordinates: \nX: {:<.4f}\nY: {:<.4f}'.format(pos_canvas[0], pos_canvas[1]) self.plot.vispy_canvas.text.text = pos_text diff --git a/flatcamEditors/FlatCAMExcEditor.py b/flatcamEditors/FlatCAMExcEditor.py index e77d0928..cbcd55b8 100644 --- a/flatcamEditors/FlatCAMExcEditor.py +++ b/flatcamEditors/FlatCAMExcEditor.py @@ -3782,8 +3782,8 @@ class FlatCAMExcEditor(QtCore.QObject): self.app.dy = y - self.pos[1] # # update the position label in the infobar since the APP mouse event handlers are disconnected - # self.app.ui.position_label.setText("    X: %.4f   " - # "Y: %.4f" % (x, y)) + self.app.ui.position_label.setText(" X: %.4f   " + "Y: %.4f " % (x, y)) # # update the reference position label in the infobar since the APP mouse event handlers are disconnected # self.app.ui.rel_position_label.setText("Dx: %.4f   Dy: " # "%.4f    " % (self.app.dx, self.app.dy)) diff --git a/flatcamEditors/FlatCAMGeoEditor.py b/flatcamEditors/FlatCAMGeoEditor.py index 6e4b616b..c8ded16a 100644 --- a/flatcamEditors/FlatCAMGeoEditor.py +++ b/flatcamEditors/FlatCAMGeoEditor.py @@ -4255,8 +4255,8 @@ class FlatCAMGeoEditor(QtCore.QObject): self.app.dy = y - self.pos[1] # # update the position label in the infobar since the APP mouse event handlers are disconnected - # self.app.ui.position_label.setText("    X: %.4f   " - # "Y: %.4f" % (x, y)) + self.app.ui.position_label.setText(" X: %.4f   " + "Y: %.4f " % (x, y)) # # # update the reference position label in the infobar since the APP mouse event handlers are disconnected # self.app.ui.rel_position_label.setText("Dx: %.4f   Dy: " diff --git a/flatcamEditors/FlatCAMGrbEditor.py b/flatcamEditors/FlatCAMGrbEditor.py index 0658926b..bd330d40 100644 --- a/flatcamEditors/FlatCAMGrbEditor.py +++ b/flatcamEditors/FlatCAMGrbEditor.py @@ -4755,8 +4755,8 @@ class FlatCAMGrbEditor(QtCore.QObject): self.app.dy = y - self.pos[1] # # update the position label in the infobar since the APP mouse event handlers are disconnected - # self.app.ui.position_label.setText("    X: %.4f   " - # "Y: %.4f" % (x, y)) + self.app.ui.position_label.setText(" X: %.4f   " + "Y: %.4f " % (x, y)) # # # update the reference position label in the infobar since the APP mouse event handlers are disconnected # self.app.ui.rel_position_label.setText("Dx: %.4f   Dy: " diff --git a/flatcamGUI/FlatCAMGUI.py b/flatcamGUI/FlatCAMGUI.py index 08821168..078f8f9d 100644 --- a/flatcamGUI/FlatCAMGUI.py +++ b/flatcamGUI/FlatCAMGUI.py @@ -2309,11 +2309,11 @@ class FlatCAMGUI(QtWidgets.QMainWindow): # self.rel_position_label.setToolTip(_("Relative measurement.\nReference is last click position")) # self.infobar.addWidget(self.rel_position_label) # - # self.position_label = QtWidgets.QLabel( - # "    X: 0.0000   Y: 0.0000") - # self.position_label.setMinimumWidth(110) - # self.position_label.setToolTip(_("Absolute measurement.\nReference is (X=0, Y= 0) position")) - # self.infobar.addWidget(self.position_label) + self.position_label = QtWidgets.QLabel( + " X: 0.0000   Y: 0.0000 ") + self.position_label.setMinimumWidth(110) + self.position_label.setToolTip(_("Absolute measurement.\nReference is (X=0, Y= 0) position")) + self.infobar.addWidget(self.position_label) self.snap_toolbar.setMaximumHeight(24) self.infobar.addWidget(self.snap_toolbar) diff --git a/flatcamObjects/FlatCAMCNCJob.py b/flatcamObjects/FlatCAMCNCJob.py index c9a47076..b75ec21d 100644 --- a/flatcamObjects/FlatCAMCNCJob.py +++ b/flatcamObjects/FlatCAMCNCJob.py @@ -564,7 +564,7 @@ class CNCJobObject(FlatCAMObj, CNCjob): # delete the absolute and relative position and messages in the infobar self.app.ui.position_label.setText("") - self.app.ui.rel_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() diff --git a/flatcamTools/ToolCalibration.py b/flatcamTools/ToolCalibration.py index 98b487cf..c1e6b14d 100644 --- a/flatcamTools/ToolCalibration.py +++ b/flatcamTools/ToolCalibration.py @@ -1069,7 +1069,7 @@ class ToolCalibration(FlatCAMTool): # delete the absolute and relative position and messages in the infobar self.app.ui.position_label.setText("") - self.app.ui.rel_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() diff --git a/flatcamTools/ToolCopperThieving.py b/flatcamTools/ToolCopperThieving.py index 8adb9fc4..0b43f71a 100644 --- a/flatcamTools/ToolCopperThieving.py +++ b/flatcamTools/ToolCopperThieving.py @@ -917,8 +917,8 @@ class ToolCopperThieving(FlatCAMTool): self.app.dy = curr_pos[1] - float(self.cursor_pos[1]) # # update the positions on status bar - # self.app.ui.position_label.setText("    X: %.4f   " - # "Y: %.4f" % (curr_pos[0], curr_pos[1])) + self.app.ui.position_label.setText(" X: %.4f   " + "Y: %.4f " % (curr_pos[0], curr_pos[1])) # self.app.ui.rel_position_label.setText("Dx: %.4f   Dy: " # "%.4f    " % (self.app.dx, self.app.dy)) diff --git a/flatcamTools/ToolDistance.py b/flatcamTools/ToolDistance.py index ef239454..1e61d782 100644 --- a/flatcamTools/ToolDistance.py +++ b/flatcamTools/ToolDistance.py @@ -544,11 +544,11 @@ class Distance(FlatCAMTool): else: pos = (pos_canvas[0], pos_canvas[1]) - # self.app.ui.position_label.setText( - # "    X: {}   Y: {}".format( - # '%.*f' % (self.decimals, pos[0]), '%.*f' % (self.decimals, pos[1]) - # ) - # ) + self.app.ui.position_label.setText( + "    X: {}   Y: {}".format( + '%.*f' % (self.decimals, pos[0]), '%.*f' % (self.decimals, pos[1]) + ) + ) units = self.app.defaults["units"].lower() self.app.plotcanvas.text_hud.text = \ @@ -583,7 +583,7 @@ class Distance(FlatCAMTool): except Exception as e: log.debug("Distance.on_mouse_move_meas() --> %s" % str(e)) self.app.ui.position_label.setText("") - self.app.ui.rel_position_label.setText("") + # self.app.ui.rel_position_label.setText("") def utility_geometry(self, pos): # first delete old shape diff --git a/flatcamTools/ToolNCC.py b/flatcamTools/ToolNCC.py index b3ab7fa5..e83d4bdb 100644 --- a/flatcamTools/ToolNCC.py +++ b/flatcamTools/ToolNCC.py @@ -1832,8 +1832,8 @@ class NonCopperClear(FlatCAMTool, Gerber): self.app.dy = curr_pos[1] - float(self.cursor_pos[1]) # # update the positions on status bar - # self.app.ui.position_label.setText("    X: %.4f   " - # "Y: %.4f" % (curr_pos[0], curr_pos[1])) + self.app.ui.position_label.setText(" X: %.4f   " + "Y: %.4f " % (curr_pos[0], curr_pos[1])) # self.app.ui.rel_position_label.setText("Dx: %.4f   Dy: " # "%.4f    " % (self.app.dx, self.app.dy)) diff --git a/flatcamTools/ToolPaint.py b/flatcamTools/ToolPaint.py index 131e025b..c06b6666 100644 --- a/flatcamTools/ToolPaint.py +++ b/flatcamTools/ToolPaint.py @@ -1731,8 +1731,8 @@ class ToolPaint(FlatCAMTool, Gerber): self.app.dy = curr_pos[1] - float(self.cursor_pos[1]) # # update the positions on status bar - # self.app.ui.position_label.setText("    X: %.4f   " - # "Y: %.4f" % (curr_pos[0], curr_pos[1])) + self.app.ui.position_label.setText(" X: %.4f   " + "Y: %.4f " % (curr_pos[0], curr_pos[1])) # self.app.ui.rel_position_label.setText("Dx: %.4f   Dy: " # "%.4f    " % (self.app.dx, self.app.dy)) From 086526441d5b52719dbc9d50208f38dc8f9b882e Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Tue, 12 May 2020 01:26:35 +0300 Subject: [PATCH 22/99] - pass --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 39b42859..05256956 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,7 @@ CHANGELOG for FlatCAM beta - modified how the graphic engine change act in Preferences: now only by clicking Apply(or Save) the change will happen. And there is also a message asking for confirmation - re-added the position labels in the status bar; they will be useful if HUD is Off (Altium does the same :) so learn from the best) + 10.05.2020 - fixed the problem with using comma as decimal separator in Grid Snap fields From eb56c249b519c61e2da15da35921ac537dd70a7f Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Tue, 12 May 2020 01:27:53 +0300 Subject: [PATCH 23/99] - pass --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1f6c6b3d..1fb85886 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ CHANGELOG for FlatCAM beta - made the HUD work in Legacy2D mode - fixed situation when the mouse cursor is outside of the canvas and no therefore returning None values + 10.05.2020 - fixed the problem with using comma as decimal separator in Grid Snap fields From 267db756e12d04ccc7e70d13e44be5ae6c15ec1c Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Tue, 12 May 2020 03:12:21 +0300 Subject: [PATCH 24/99] - fixed the Tcl command Cncjob: there was a problem reported as issue #416. The command did not work due of the dpp parameter - modified the Tcl command Cncjob such that if some of the parameters are not used then the default values will be used (set with set_sys) - modified the Tcl command Drillcncjob to use the defaults when some of the parameters are not used --- CHANGELOG.md | 5 +-- flatcamGUI/FlatCAMGUI.py | 2 +- flatcamObjects/FlatCAMGeometry.py | 22 ++++-------- tclCommands/TclCommandCncjob.py | 36 ++++++++++--------- tclCommands/TclCommandDrillcncjob.py | 52 +++++++++++++++++++--------- 5 files changed, 66 insertions(+), 51 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7f5b5b4c..1d51028c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,8 +22,9 @@ CHANGELOG for FlatCAM beta - modified the HUD in Legacy2D when using Dark Theme to use different colors - modified how the graphic engine change act in Preferences: now only by clicking Apply(or Save) the change will happen. And there is also a message asking for confirmation - re-added the position labels in the status bar; they will be useful if HUD is Off (Altium does the same :) so learn from the best) - - +- fixed the Tcl command Cncjob: there was a problem reported as issue #416. The command did not work due of the dpp parameter +- modified the Tcl command Cncjob such that if some of the parameters are not used then the default values will be used (set with set_sys) +- modified the Tcl command Drillcncjob to use the defaults when some of the parameters are not used 10.05.2020 diff --git a/flatcamGUI/FlatCAMGUI.py b/flatcamGUI/FlatCAMGUI.py index 078f8f9d..daf20109 100644 --- a/flatcamGUI/FlatCAMGUI.py +++ b/flatcamGUI/FlatCAMGUI.py @@ -2869,7 +2869,7 @@ class FlatCAMGUI(QtWidgets.QMainWindow): # Open Project if key == QtCore.Qt.Key_O: - self.app.on_file_openproject() + self.app.on_file_openproject(signal=None) # Open Project if key == QtCore.Qt.Key_P: diff --git a/flatcamObjects/FlatCAMGeometry.py b/flatcamObjects/FlatCAMGeometry.py index dfde372f..54a503f2 100644 --- a/flatcamObjects/FlatCAMGeometry.py +++ b/flatcamObjects/FlatCAMGeometry.py @@ -2092,19 +2092,11 @@ class GeometryObject(FlatCAMObj, Geometry): 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): + 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, dpp=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 by the TCL Command Cncjob. Creates a CNCJob out of this Geometry object. The actual @@ -2123,7 +2115,7 @@ class GeometryObject(FlatCAMObj, Geometry): :param dwell: :param dwelltime: :param multidepth: - :param depthperpass: + :param dpp: Depth for each pass when multidepth parameter is True :param toolchange: :param toolchangez: :param toolchangexy: @@ -2150,7 +2142,7 @@ class GeometryObject(FlatCAMObj, Geometry): 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"]) + depthperpass = dpp if dpp 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']) diff --git a/tclCommands/TclCommandCncjob.py b/tclCommands/TclCommandCncjob.py index 5ea51c65..e3f7cdf1 100644 --- a/tclCommands/TclCommandCncjob.py +++ b/tclCommands/TclCommandCncjob.py @@ -124,16 +124,18 @@ class TclCommandCncjob(TclCommandSignaled): else: return - args["dia"] = args["dia"] if "dia" in args and args["dia"] else obj.options["cnctooldia"] + args["dia"] = args["dia"] if "dia" in args and args["dia"] else self.app.defaults["geometry_cnctooldia"] - args["z_cut"] = args["z_cut"] if "z_cut" in args and args["z_cut"] else obj.options["cutz"] - args["z_move"] = args["z_move"] if "z_move" in args and args["z_move"] else obj.options["travelz"] + args["z_cut"] = args["z_cut"] if "z_cut" in args and args["z_cut"] else self.app.defaults["geometry_cutz"] + args["z_move"] = args["z_move"] if "z_move" in args and args["z_move"] else \ + self.app.defaults["geometry_travelz"] - args["feedrate"] = args["feedrate"] if "feedrate" in args and args["feedrate"] else obj.options["feedrate"] + args["feedrate"] = args["feedrate"] if "feedrate" in args and args["feedrate"] else \ + self.app.defaults["geometry_feedrate"] args["feedrate_z"] = args["feedrate_z"] if "feedrate_z" in args and args["feedrate_z"] else \ - obj.options["feedrate_z"] + self.app.defaults["geometry_feedrate_z"] args["feedrate_rapid"] = args["feedrate_rapid"] if "feedrate_rapid" in args and args["feedrate_rapid"] else \ - obj.options["feedrate_rapid"] + self.app.defaults["geometry_feedrate_rapid"] if "extracut_length" in args: args["extracut"] = True @@ -142,20 +144,22 @@ class TclCommandCncjob(TclCommandSignaled): else: args["extracut_length"] = float(args["extracut_length"]) else: - args["extracut"] = False + args["extracut"] = self.app.defaults["geometry_extracut"] + args["extracut_length"] = self.app.defaults["geometry_extracut_length"] if "dpp" in args: args["multidepth"] = True if args["dpp"] is None: - args["dpp"] = obj.options["dpp"] + args["dpp"] =self.app.defaults["geometry_depthperpass"] else: args["dpp"] = float(args["dpp"]) else: - args["multidepth"] = False + args["multidepth"] = self.app.defaults["geometry_multidepth"] + args["dpp"] = self.app.defaults["geometry_depthperpass"] args["startz"] = args["startz"] if "startz" in args and args["startz"] else \ self.app.defaults["geometry_startz"] - args["endz"] = args["endz"] if "endz" in args and args["endz"] else obj.options["endz"] + args["endz"] = args["endz"] if "endz" in args and args["endz"] else self.app.defaults["geometry_endz"] args["spindlespeed"] = args["spindlespeed"] if "spindlespeed" in args and args["spindlespeed"] != 0 else None @@ -166,10 +170,10 @@ class TclCommandCncjob(TclCommandSignaled): else: args["dwelltime"] = float(args['dwelltime']) else: - args["dwell"] = False - args["dwelltime"] = 0.0 + args["dwell"] = self.app.defaults["geometry_dwell"] + args["dwelltime"] = self.app.defaults["geometry_dwelltime"] - args["pp"] = args["pp"] if "pp" in args and args["pp"] else obj.options["ppname_g"] + args["pp"] = args["pp"] if "pp" in args and args["pp"] else self.app.defaults["geometry_ppname_g"] if "toolchangez" in args: args["toolchange"] = True @@ -178,8 +182,8 @@ class TclCommandCncjob(TclCommandSignaled): else: args["toolchangez"] = obj.options["toolchangez"] else: - args["toolchange"] = False - args["toolchangez"] = 0.0 + args["toolchange"] = self.app.defaults["geometry_toolchange"] + args["toolchangez"] = self.app.defaults["geometry_toolchangez"] args["toolchangexy"] = args["toolchangexy"] if "toolchangexy" in args and args["toolchangexy"] else \ self.app.defaults["geometry_toolchangexy"] @@ -201,7 +205,7 @@ class TclCommandCncjob(TclCommandSignaled): # HACK !!! Should be solved elsewhere!!! # default option for multidepth is False - obj.options['multidepth'] = False + # obj.options['multidepth'] = False if not obj.multigeo: obj.generatecncjob(use_thread=False, plot=False, **args) diff --git a/tclCommands/TclCommandDrillcncjob.py b/tclCommands/TclCommandDrillcncjob.py index 1c152bcc..3e9c54f9 100644 --- a/tclCommands/TclCommandDrillcncjob.py +++ b/tclCommands/TclCommandDrillcncjob.py @@ -227,17 +227,24 @@ class TclCommandDrillcncjob(TclCommandSignaled): else: toolchangez = obj.options["toolchangez"] else: - toolchange = False - toolchangez = 0.0 + toolchange = self.app.defaults["excellon_toolchange"] + toolchangez = float(self.app.defaults["excellon_toolchangez"]) xy_toolchange = args["toolchangexy"] if "toolchangexy" in args and args["toolchangexy"] else \ - obj.options["toolchangexy"] + self.app.defaults["excellon_toolchangexy"] xy_toolchange = ','.join([xy_toolchange[0], xy_toolchange[2]]) - endz = args["endz"] if "endz" in args and args["endz"] is not None else obj.options["endz"] - xy_end = args["endxy"] if "endxy" in args and args["endxy"] else '0,0' + endz = args["endz"] if "endz" in args and args["endz"] is not None else self.app.defaults["excellon_endz"] + if "endxy" in args and args["endxy"]: + xy_end = args["endxy"] + else: + if self.app.defaults["excellon_endxy"]: + xy_end = self.app.defaults["excellon_endxy"] + else: + xy_end = (0, 0) + xy_end = ','.join([xy_end[0], xy_end[2]]) - print(xy_end) + opt_type = args["opt_type"] if "opt_type" in args and args["opt_type"] else 'B' # ########################################################################################## @@ -248,7 +255,7 @@ class TclCommandDrillcncjob(TclCommandSignaled): job_obj.options['Tools_in_use'] = used_tools_info job_obj.options['type'] = 'Excellon' - pp_excellon_name = args["pp"] if "pp" in args and args["pp"] else obj.options["ppname_e"] + pp_excellon_name = args["pp"] if "pp" in args and args["pp"] else self.app.defaults["excellon_ppname_e"] job_obj.pp_excellon_name = pp_excellon_name job_obj.options['ppname_e'] = pp_excellon_name @@ -259,16 +266,19 @@ class TclCommandDrillcncjob(TclCommandSignaled): else: job_obj.z_depthpercut = float(obj.options["dpp"]) else: - job_obj.multidepth = False - job_obj.z_depthpercut = 0.0 + job_obj.multidepth = self.app.defaults["excellon_multidepth"] + job_obj.z_depthpercut = self.app.defaults["excellon_depthperpass"] + + job_obj.z_move = float(args["travelz"]) if "travelz" in args and args["travelz"] else \ + self.app.defaults["excellon_travelz"] - job_obj.z_move = float(args["travelz"]) if "travelz" in args and args["travelz"] else obj.options["travelz"] job_obj.feedrate = float(args["feedrate_z"]) if "feedrate_z" in args and args["feedrate_z"] else \ - obj.options["feedrate_z"] + self.app.defaults["excellon_feedrate_z"] job_obj.z_feedrate = float(args["feedrate_z"]) if "feedrate_z" in args and args["feedrate_z"] else \ - obj.options["feedrate_z"] + self.app.defaults["excellon_feedrate_z"] + job_obj.feedrate_rapid = float(args["feedrate_rapid"]) \ - if "feedrate_rapid" in args and args["feedrate_rapid"] else obj.options["feedrate_rapid"] + if "feedrate_rapid" in args and args["feedrate_rapid"] else self.app.defaults["excellon_feedrate_rapid"] job_obj.spindlespeed = float(args["spindlespeed"]) if "spindlespeed" in args else None job_obj.spindledir = self.app.defaults['excellon_spindledir'] @@ -277,10 +287,10 @@ class TclCommandDrillcncjob(TclCommandSignaled): if args['dwelltime'] is not None: job_obj.dwelltime = float(args['dwelltime']) else: - job_obj.dwelltime = float(obj.options["dwelltime"]) + job_obj.dwelltime = float(self.app.defaults["excellon_dwelltime"]) else: - job_obj.dwell = False - job_obj.dwelltime = 0.0 + job_obj.dwell = self.app.defaults["excellon_dwell"] + job_obj.dwelltime = self.app.defaults["excellon_dwelltime"] job_obj.toolchange_xy_type = "excellon" job_obj.coords_decimals = int(self.app.defaults["cncjob_coords_decimals"]) @@ -295,7 +305,15 @@ class TclCommandDrillcncjob(TclCommandSignaled): job_obj.toolchange = toolchange job_obj.xy_toolchange = xy_toolchange job_obj.z_toolchange = float(toolchangez) - job_obj.startz = float(args["startz"]) if "endz" in args and args["endz"] is not None else (0, 0) + + if "startz" in args and args["startz"] is not None: + job_obj.startz = float(args["startz"]) + else: + if self.app.defaults["excellon_startz"]: + job_obj.startz = self.app.defaults["excellon_startz"] + else: + job_obj.startz = (0, 0) + job_obj.endz = float(endz) job_obj.xy_end = xy_end job_obj.excellon_optimization_type = opt_type From 4a82224883c50d04850d0319d3b9185711596167 Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Tue, 12 May 2020 03:35:08 +0300 Subject: [PATCH 25/99] - wip --- flatcamEditors/FlatCAMExcEditor.py | 4 ++-- flatcamEditors/FlatCAMGeoEditor.py | 4 ++-- flatcamTools/ToolDistance.py | 26 +++++++++++++------------- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/flatcamEditors/FlatCAMExcEditor.py b/flatcamEditors/FlatCAMExcEditor.py index cbcd55b8..30d5182b 100644 --- a/flatcamEditors/FlatCAMExcEditor.py +++ b/flatcamEditors/FlatCAMExcEditor.py @@ -3438,8 +3438,8 @@ class FlatCAMExcEditor(QtCore.QObject): self.pos = (self.pos[0], self.pos[1]) if event.button == 1: - self.app.ui.rel_position_label.setText("Dx: %.4f   Dy: " - "%.4f    " % (0, 0)) + # self.app.ui.rel_position_label.setText("Dx: %.4f   Dy: " + # "%.4f    " % (0, 0)) # Selection with left mouse button if self.active_tool is not None and event.button == 1: diff --git a/flatcamEditors/FlatCAMGeoEditor.py b/flatcamEditors/FlatCAMGeoEditor.py index c8ded16a..8c7055d8 100644 --- a/flatcamEditors/FlatCAMGeoEditor.py +++ b/flatcamEditors/FlatCAMGeoEditor.py @@ -4161,8 +4161,8 @@ class FlatCAMGeoEditor(QtCore.QObject): self.pos = (self.pos[0], self.pos[1]) if event.button == 1: - self.app.ui.rel_position_label.setText("Dx: %.4f   Dy: " - "%.4f    " % (0, 0)) + # self.app.ui.rel_position_label.setText("Dx: %.4f   Dy: " + # "%.4f    " % (0, 0)) modifiers = QtWidgets.QApplication.keyboardModifiers() # If the SHIFT key is pressed when LMB is clicked then the coordinates are copied to clipboard diff --git a/flatcamTools/ToolDistance.py b/flatcamTools/ToolDistance.py index 1e61d782..3d73e245 100644 --- a/flatcamTools/ToolDistance.py +++ b/flatcamTools/ToolDistance.py @@ -469,9 +469,9 @@ class Distance(FlatCAMTool): # Reset here the relative coordinates so there is a new reference on the click position if self.rel_point1 is None: - self.app.ui.rel_position_label.setText("Dx: %.*f   Dy: " - "%.*f    " % - (self.decimals, 0.0, self.decimals, 0.0)) + # self.app.ui.rel_position_label.setText("Dx: %.*f   Dy: " + # "%.*f    " % + # (self.decimals, 0.0, self.decimals, 0.0)) self.rel_point1 = pos else: self.rel_point2 = copy(self.rel_point1) @@ -510,11 +510,11 @@ class Distance(FlatCAMTool): pass self.total_distance_entry.set_value('%.*f' % (self.decimals, abs(d))) - self.app.ui.rel_position_label.setText( - "Dx: {}   Dy: {}    ".format( - '%.*f' % (self.decimals, pos[0]), '%.*f' % (self.decimals, pos[1]) - ) - ) + # self.app.ui.rel_position_label.setText( + # "Dx: {}   Dy: {}    ".format( + # '%.*f' % (self.decimals, pos[0]), '%.*f' % (self.decimals, pos[1]) + # ) + # ) self.tool_done = True self.deactivate_measure_tool() @@ -562,11 +562,11 @@ class Distance(FlatCAMTool): dx = pos[0] dy = pos[1] - self.app.ui.rel_position_label.setText( - "Dx: {}   Dy: {}    ".format( - '%.*f' % (self.decimals, dx), '%.*f' % (self.decimals, dy) - ) - ) + # self.app.ui.rel_position_label.setText( + # "Dx: {}   Dy: {}    ".format( + # '%.*f' % (self.decimals, dx), '%.*f' % (self.decimals, dy) + # ) + # ) # update utility geometry if len(self.points) == 1: From 6aacd4d978dc5ca771e145a49c8db1ef81dd2463 Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Tue, 12 May 2020 13:59:11 +0300 Subject: [PATCH 26/99] - fixed recent issues introduced in Tcl command Drillcncjob - updated the Cncjob to use the 'endxy' parameter which dictates the x,y position at the end of the job - now the Tcl commands Drillcncjob and Cncjob can use the toolchangexy and endxy parameters with or without parenthesis (but no spaces allowed) --- CHANGELOG.md | 7 ++++++ camlib.py | 2 +- flatcamObjects/FlatCAMGeometry.py | 20 +++++++++++++--- tclCommands/TclCommandCncjob.py | 36 +++++++++++++++++++++++----- tclCommands/TclCommandDrillcncjob.py | 31 ++++++++++++++++-------- 5 files changed, 76 insertions(+), 20 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1d51028c..a6ec8451 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,13 @@ CHANGELOG for FlatCAM beta ================================================= +12.05.2020 + +- fixed recent issues introduced in Tcl command Drillcncjob +- updated the Cncjob to use the 'endxy' parameter which dictates the x,y position at the end of the job +- now the Tcl commands Drillcncjob and Cncjob can use the toolchangexy and endxy parameters with or without parenthesis (but no spaces allowed) + + 11.05.2020 - removed the labels in status bar that display X,Y positions and replaced it with a HUD display on canvas (combo key SHIFT+H) will toggle the display of the HUD diff --git a/camlib.py b/camlib.py index e7070fa4..613d6590 100644 --- a/camlib.py +++ b/camlib.py @@ -2676,7 +2676,7 @@ class CNCjob(Geometry): if self.xy_toolchange and self.xy_toolchange != '': self.xy_toolchange = [float(eval(a)) for a in self.xy_toolchange.split(",")] - if self.xy_toolchange and len(self.xy_toolchange) < 2: + if self.xy_toolchange and len(self.xy_toolchange) != 2: self.app.inform.emit('[ERROR]%s' % _("The Toolchange X,Y field in Edit -> Preferences has to be " "in the format (x, y) \nbut now there is only one value, not two. ")) diff --git a/flatcamObjects/FlatCAMGeometry.py b/flatcamObjects/FlatCAMGeometry.py index 54a503f2..ae9992e0 100644 --- a/flatcamObjects/FlatCAMGeometry.py +++ b/flatcamObjects/FlatCAMGeometry.py @@ -2095,7 +2095,7 @@ class GeometryObject(FlatCAMObj, Geometry): 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, dpp=None, toolchange=None, toolchangez=None, toolchangexy=None, - extracut=None, extracut_length=None, startz=None, endz=None, pp=None, segx=None, segy=None, + extracut=None, extracut_length=None, startz=None, endz=None, endxy=None, pp=None, segx=None, segy=None, use_thread=True, plot=True): """ Only used by the TCL Command Cncjob. @@ -2118,11 +2118,14 @@ class GeometryObject(FlatCAMObj, Geometry): :param dpp: Depth for each pass when multidepth parameter is True :param toolchange: :param toolchangez: - :param toolchangexy: + :param toolchangexy: A sequence ox X,Y coordinates: a 2-length tuple or a string. + Coordinates in X,Y plane for the Toolchange event :param extracut: :param extracut_length: :param startz: :param endz: + :param endxy: A sequence ox X,Y coordinates: a 2-length tuple or a string. + Coordinates in X, Y plane for the last move after ending the job. :param pp: Name of the preprocessor :param segx: :param segy: @@ -2152,10 +2155,21 @@ class GeometryObject(FlatCAMObj, Geometry): 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"] + + endxy = endxy if endxy else self.options["endxy"] + if isinstance(endxy, str): + endxy = re.sub('[()\[\]]', '', endxy) + if endxy and endxy != '': + endxy = [float(eval(a)) for a in endxy.split(",")] toolchangez = toolchangez if toolchangez else float(self.options["toolchangez"]) + toolchangexy = toolchangexy if toolchangexy else self.options["toolchangexy"] + if isinstance(toolchangexy, str): + toolchangexy = re.sub('[()\[\]]', '', toolchangexy) + if toolchangexy and toolchangexy != '': + toolchangexy = [float(eval(a)) for a in toolchangexy.split(",")] + toolchange = toolchange if toolchange else self.options["toolchange"] offset = offset if offset else 0.0 diff --git a/tclCommands/TclCommandCncjob.py b/tclCommands/TclCommandCncjob.py index e3f7cdf1..e627c920 100644 --- a/tclCommands/TclCommandCncjob.py +++ b/tclCommands/TclCommandCncjob.py @@ -37,9 +37,10 @@ class TclCommandCncjob(TclCommandSignaled): ('extracut_length', float), ('dpp', float), ('toolchangez', float), - ('toolchangexy', tuple), + ('toolchangexy', str), ('startz', float), ('endz', float), + ('endxy', str), ('spindlespeed', int), ('dwelltime', float), ('pp', str), @@ -65,9 +66,12 @@ class TclCommandCncjob(TclCommandSignaled): ('dpp', 'If present then use multidepth cnc cut. Height of one layer for multidepth.'), ('toolchangez', 'Z distance for toolchange (example: 30.0).\n' 'If used in the command then a toolchange event will be included in gcode'), - ('toolchangexy', 'X, Y coordonates for toolchange in format (x, y) (example: (2.0, 3.1) ).'), + ('toolchangexy', 'The X,Y coordinates at Toolchange event in format (x, y) (example: (30.0, 15.2) or ' + 'without parenthesis like: 0.3,1.0 - no spaces allowed in this case).'), ('startz', 'Height before the first move.'), ('endz', 'Height where the last move will park.'), + ('endxy', 'The X,Y coordinates at job end in format (x, y) (example: (30.0, 15.2) or without parenthesis' + 'like: 0.3,1.0 - no spaces allowed in this case).'), ('spindlespeed', 'Speed of the spindle in rpm (example: 4000).'), ('dwelltime', 'Time to pause to allow the spindle to reach the full speed.\n' 'If it is not used in command then it will not be included'), @@ -161,6 +165,17 @@ class TclCommandCncjob(TclCommandSignaled): self.app.defaults["geometry_startz"] args["endz"] = args["endz"] if "endz" in args and args["endz"] else self.app.defaults["geometry_endz"] + if "endxy" in args and args["endxy"]: + args["endxy"] = args["endxy"] + else: + if self.app.defaults["geometry_endxy"]: + args["endxy"] = self.app.defaults["geometry_endxy"] + else: + args["endxy"] = '0, 0' + if len(eval(args["endxy"])) != 2: + self.raise_tcl_error("The entered value for 'endxy' needs to have the format x,y - no spaces or " + "in format (x, y) - spaces allowed. But always two comma separated values.") + args["spindlespeed"] = args["spindlespeed"] if "spindlespeed" in args and args["spindlespeed"] != 0 else None if 'dwelltime' in args: @@ -180,13 +195,21 @@ class TclCommandCncjob(TclCommandSignaled): if args["toolchangez"] is not None: args["toolchangez"] = args["toolchangez"] else: - args["toolchangez"] = obj.options["toolchangez"] + args["toolchangez"] = self.app.defaults["geometry_toolchangez"] else: args["toolchange"] = self.app.defaults["geometry_toolchange"] args["toolchangez"] = self.app.defaults["geometry_toolchangez"] - args["toolchangexy"] = args["toolchangexy"] if "toolchangexy" in args and args["toolchangexy"] else \ - self.app.defaults["geometry_toolchangexy"] + if "toolchangexy" in args and args["toolchangexy"]: + args["toolchangexy"] = args["toolchangexy"] + else: + if self.app.defaults["geometry_toolchangexy"]: + args["toolchangexy"] = self.app.defaults["geometry_toolchangexy"] + else: + args["toolchangexy"] = '0, 0' + if len(eval(args["toolchangexy"])) != 2: + self.raise_tcl_error("The entered value for 'toolchangexy' needs to have the format x,y - no spaces or " + "in format (x, y) - spaces allowed. But always two comma separated values.") del args['name'] @@ -195,7 +218,7 @@ class TclCommandCncjob(TclCommandSignaled): continue else: if args[arg] is None: - print(arg, args[arg]) + print("None parameters: %s is None" % arg) if muted is False: self.raise_tcl_error('One of the command parameters that have to be not None, is None.\n' 'The parameter that is None is in the default values found in the list \n' @@ -234,6 +257,7 @@ class TclCommandCncjob(TclCommandSignaled): local_tools_dict[tool_uid]['data']['toolchangexy'] = args["toolchangexy"] local_tools_dict[tool_uid]['data']['startz'] = args["startz"] local_tools_dict[tool_uid]['data']['endz'] = args["endz"] + local_tools_dict[tool_uid]['data']['endxy'] = args["endxy"] local_tools_dict[tool_uid]['data']['spindlespeed'] = args["spindlespeed"] local_tools_dict[tool_uid]['data']['dwell'] = args["dwell"] local_tools_dict[tool_uid]['data']['dwelltime'] = args["dwelltime"] diff --git a/tclCommands/TclCommandDrillcncjob.py b/tclCommands/TclCommandDrillcncjob.py index 3e9c54f9..befd791c 100644 --- a/tclCommands/TclCommandDrillcncjob.py +++ b/tclCommands/TclCommandDrillcncjob.py @@ -37,10 +37,10 @@ class TclCommandDrillcncjob(TclCommandSignaled): ('feedrate_rapid', float), ('spindlespeed', int), ('toolchangez', float), - ('toolchangexy', tuple), + ('toolchangexy', str), ('startz', float), ('endz', float), - ('endxy', tuple), + ('endxy', str), ('dwelltime', float), ('pp', str), ('opt_type', str), @@ -68,10 +68,12 @@ class TclCommandDrillcncjob(TclCommandSignaled): ('spindlespeed', 'Speed of the spindle in rpm (example: 4000).'), ('toolchangez', 'Z distance for toolchange (example: 30.0).\n' 'If used in the command then a toolchange event will be included in gcode'), - ('toolchangexy', 'X, Y coordonates for toolchange in format (x, y) (example: (2.0, 3.1) ).'), + ('toolchangexy', 'The X,Y coordinates at Toolchange event in format (x, y) (example: (30.0, 15.2) or ' + 'without parenthesis like: 0.3,1.0 - no spaces allowed in this case).'), ('startz', 'The Z coordinate at job start (example: 30.0).'), ('endz', 'The Z coordinate at job end (example: 30.0).'), - ('endxy', 'The X,Y coordinates at job end in format (x, y) (example: (30.0, 15.2)).'), + ('endxy', 'The X,Y coordinates at job end in format (x, y) (example: (30.0, 15.2) or without parenthesis' + 'like: 0.3,1.0 - no spaces allowed in this case).'), ('dwelltime', 'Time to pause to allow the spindle to reach the full speed.\n' 'If it is not used in command then it will not be included'), ('pp', 'This is the Excellon preprocessor name: case_sensitive, no_quotes'), @@ -230,20 +232,29 @@ class TclCommandDrillcncjob(TclCommandSignaled): toolchange = self.app.defaults["excellon_toolchange"] toolchangez = float(self.app.defaults["excellon_toolchangez"]) - xy_toolchange = args["toolchangexy"] if "toolchangexy" in args and args["toolchangexy"] else \ - self.app.defaults["excellon_toolchangexy"] - xy_toolchange = ','.join([xy_toolchange[0], xy_toolchange[2]]) + if "toolchangexy" in args and args["toolchangexy"]: + xy_toolchange = args["toolchangexy"] + else: + if self.app.defaults["excellon_toolchangexy"]: + xy_toolchange = self.app.defaults["excellon_toolchangexy"] + else: + xy_toolchange = '0, 0' + if len(eval(xy_toolchange)) != 2: + self.raise_tcl_error("The entered value for 'toolchangexy' needs to have the format x,y - no spaces or " + "in format (x, y) - spaces allowed. But always two comma separated values.") endz = args["endz"] if "endz" in args and args["endz"] is not None else self.app.defaults["excellon_endz"] + if "endxy" in args and args["endxy"]: xy_end = args["endxy"] else: if self.app.defaults["excellon_endxy"]: xy_end = self.app.defaults["excellon_endxy"] else: - xy_end = (0, 0) - - xy_end = ','.join([xy_end[0], xy_end[2]]) + xy_end = '0, 0' + if len(eval(xy_end)) != 2: + self.raise_tcl_error("The entered value for 'xy_end' needs to have the format x,y - no spaces or " + "in format (x, y) - spaces allowed. But always two comma separated values.") opt_type = args["opt_type"] if "opt_type" in args and args["opt_type"] else 'B' From ce9b18f9ed74a19ab98fe9850d16f9b444b61b84 Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Tue, 12 May 2020 16:51:54 +0300 Subject: [PATCH 27/99] - modified the Tcl command Paint "single" parameter. Now it's value is a tuple with the x,y coordinates of the single polygon to be painted. --- CHANGELOG.md | 2 +- tclCommands/TclCommandCncjob.py | 14 +++++----- tclCommands/TclCommandCopperClear.py | 6 ++-- tclCommands/TclCommandDrillcncjob.py | 17 +++++------ tclCommands/TclCommandPaint.py | 42 ++++++++++++++++------------ 5 files changed, 44 insertions(+), 37 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a6ec8451..bc348275 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,7 +12,7 @@ CHANGELOG for FlatCAM beta - fixed recent issues introduced in Tcl command Drillcncjob - updated the Cncjob to use the 'endxy' parameter which dictates the x,y position at the end of the job - now the Tcl commands Drillcncjob and Cncjob can use the toolchangexy and endxy parameters with or without parenthesis (but no spaces allowed) - +- modified the Tcl command Paint "single" parameter. Now it's value is a tuple with the x,y coordinates of the single polygon to be painted. 11.05.2020 diff --git a/tclCommands/TclCommandCncjob.py b/tclCommands/TclCommandCncjob.py index e627c920..a3802bb9 100644 --- a/tclCommands/TclCommandCncjob.py +++ b/tclCommands/TclCommandCncjob.py @@ -67,11 +67,11 @@ class TclCommandCncjob(TclCommandSignaled): ('toolchangez', 'Z distance for toolchange (example: 30.0).\n' 'If used in the command then a toolchange event will be included in gcode'), ('toolchangexy', 'The X,Y coordinates at Toolchange event in format (x, y) (example: (30.0, 15.2) or ' - 'without parenthesis like: 0.3,1.0 - no spaces allowed in this case).'), + 'without parenthesis like: 0.3,1.0). WARNING: no spaces allowed in the value.'), ('startz', 'Height before the first move.'), ('endz', 'Height where the last move will park.'), - ('endxy', 'The X,Y coordinates at job end in format (x, y) (example: (30.0, 15.2) or without parenthesis' - 'like: 0.3,1.0 - no spaces allowed in this case).'), + ('endxy', 'The X,Y coordinates at job end in format (x, y) (example: (2.0, 1.2) or without parenthesis' + 'like: 0.3,1.0). WARNING: no spaces allowed in the value.'), ('spindlespeed', 'Speed of the spindle in rpm (example: 4000).'), ('dwelltime', 'Time to pause to allow the spindle to reach the full speed.\n' 'If it is not used in command then it will not be included'), @@ -173,8 +173,8 @@ class TclCommandCncjob(TclCommandSignaled): else: args["endxy"] = '0, 0' if len(eval(args["endxy"])) != 2: - self.raise_tcl_error("The entered value for 'endxy' needs to have the format x,y - no spaces or " - "in format (x, y) - spaces allowed. But always two comma separated values.") + self.raise_tcl_error("The entered value for 'endxy' needs to have the format x,y or " + "in format (x, y) - no spaces allowed. But always two comma separated values.") args["spindlespeed"] = args["spindlespeed"] if "spindlespeed" in args and args["spindlespeed"] != 0 else None @@ -208,8 +208,8 @@ class TclCommandCncjob(TclCommandSignaled): else: args["toolchangexy"] = '0, 0' if len(eval(args["toolchangexy"])) != 2: - self.raise_tcl_error("The entered value for 'toolchangexy' needs to have the format x,y - no spaces or " - "in format (x, y) - spaces allowed. But always two comma separated values.") + self.raise_tcl_error("The entered value for 'toolchangexy' needs to have the format x,y or " + "in format (x, y) - no spaces allowed. But always two comma separated values.") del args['name'] diff --git a/tclCommands/TclCommandCopperClear.py b/tclCommands/TclCommandCopperClear.py index aa8e682b..a4fd130c 100644 --- a/tclCommands/TclCommandCopperClear.py +++ b/tclCommands/TclCommandCopperClear.py @@ -54,8 +54,8 @@ class TclCommandCopperClear(TclCommand): 'main': "Clear excess copper in polygons. Basically it's a negative Paint.", 'args': collections.OrderedDict([ ('name', 'Name of the source Geometry object. String.'), - ('tooldia', 'Diameter of the tool to be used. Can be a comma separated list of diameters. No space is ' - 'allowed between tool diameters. E.g: correct: 0.5,1 / incorrect: 0.5, 1'), + ('tooldia', 'Diameter of the tool to be used. Can be a comma separated list of diameters.\n' + 'WARNING: No space is allowed between tool diameters. E.g: correct: 0.5,1 / incorrect: 0.5, 1'), ('overlap', 'Percentage of tool diameter to overlap current pass over previous pass. Float [0, 99.9999]\n' 'E.g: for a 25% from tool diameter overlap use -overlap 25'), ('margin', 'Bounding box margin. Float number.'), @@ -72,7 +72,7 @@ class TclCommandCopperClear(TclCommand): ('all', 'If used will copper clear the whole object. Either "-all" or "-box " has to be used.'), ('box', 'Name of the object to be used as reference. Either "-all" or "-box " has to be used. ' 'String.'), - ('outname', 'Name of the resulting Geometry object. String.'), + ('outname', 'Name of the resulting Geometry object. String. No spaces.'), ]), 'examples': ["ncc obj_name -tooldia 0.3,1 -overlap 10 -margin 1.0 -method 'lines' -all"] } diff --git a/tclCommands/TclCommandDrillcncjob.py b/tclCommands/TclCommandDrillcncjob.py index befd791c..b2123f46 100644 --- a/tclCommands/TclCommandDrillcncjob.py +++ b/tclCommands/TclCommandDrillcncjob.py @@ -59,7 +59,7 @@ class TclCommandDrillcncjob(TclCommandSignaled): ('name', 'Name of the source object.'), ('drilled_dias', 'Comma separated tool diameters of the drills to be drilled (example: 0.6,1.0 or 3.125). ' - 'No space allowed'), + 'WARNING: No space allowed'), ('drillz', 'Drill depth into material (example: -2.0). Negative value.'), ('dpp', 'Progressive drilling into material with a specified step (example: 0.7). Positive value.'), ('travelz', 'Travel distance above material (example: 2.0).'), @@ -69,11 +69,11 @@ class TclCommandDrillcncjob(TclCommandSignaled): ('toolchangez', 'Z distance for toolchange (example: 30.0).\n' 'If used in the command then a toolchange event will be included in gcode'), ('toolchangexy', 'The X,Y coordinates at Toolchange event in format (x, y) (example: (30.0, 15.2) or ' - 'without parenthesis like: 0.3,1.0 - no spaces allowed in this case).'), + 'without parenthesis like: 0.3,1.0). WARNING: no spaces allowed in the value.'), ('startz', 'The Z coordinate at job start (example: 30.0).'), ('endz', 'The Z coordinate at job end (example: 30.0).'), - ('endxy', 'The X,Y coordinates at job end in format (x, y) (example: (30.0, 15.2) or without parenthesis' - 'like: 0.3,1.0 - no spaces allowed in this case).'), + ('endxy', 'The X,Y coordinates at job end in format (x, y) (example: (2.0, 1.2) or without parenthesis' + 'like: 0.3,1.0). WARNING: no spaces allowed in the value.'), ('dwelltime', 'Time to pause to allow the spindle to reach the full speed.\n' 'If it is not used in command then it will not be included'), ('pp', 'This is the Excellon preprocessor name: case_sensitive, no_quotes'), @@ -240,8 +240,8 @@ class TclCommandDrillcncjob(TclCommandSignaled): else: xy_toolchange = '0, 0' if len(eval(xy_toolchange)) != 2: - self.raise_tcl_error("The entered value for 'toolchangexy' needs to have the format x,y - no spaces or " - "in format (x, y) - spaces allowed. But always two comma separated values.") + self.raise_tcl_error("The entered value for 'toolchangexy' needs to have the format x,y or " + "in format (x, y) - no spaces allowed. But always two comma separated values.") endz = args["endz"] if "endz" in args and args["endz"] is not None else self.app.defaults["excellon_endz"] @@ -252,9 +252,10 @@ class TclCommandDrillcncjob(TclCommandSignaled): xy_end = self.app.defaults["excellon_endxy"] else: xy_end = '0, 0' + if len(eval(xy_end)) != 2: - self.raise_tcl_error("The entered value for 'xy_end' needs to have the format x,y - no spaces or " - "in format (x, y) - spaces allowed. But always two comma separated values.") + self.raise_tcl_error("The entered value for 'xy_end' needs to have the format x,y or " + "in format (x, y) - no spaces allowed. But always two comma separated values.") opt_type = args["opt_type"] if "opt_type" in args and args["opt_type"] else 'B' diff --git a/tclCommands/TclCommandPaint.py b/tclCommands/TclCommandPaint.py index a7db7062..3ef6f1c6 100644 --- a/tclCommands/TclCommandPaint.py +++ b/tclCommands/TclCommandPaint.py @@ -43,8 +43,6 @@ class TclCommandPaint(TclCommand): ('single', str), ('ref', str), ('box', str), - ('x', float), - ('y', float), ('outname', str), ]) @@ -53,30 +51,32 @@ class TclCommandPaint(TclCommand): # structured help for current command, args needs to be ordered help = { - 'main': "Paint polygons in the specified object by covering them with toolpaths.", + 'main': "Paint polygons in the specified object by covering them with toolpaths.\n" + "Can use only one of the parameters: 'all', 'box', 'single'.", 'args': collections.OrderedDict([ ('name', 'Name of the source Geometry object. String.'), - ('tooldia', 'Diameter of the tool to be used. Can be a comma separated list of diameters. No space is ' - 'allowed between tool diameters. E.g: correct: 0.5,1 / incorrect: 0.5, 1'), + ('tooldia', 'Diameter of the tools to be used. Can be a comma separated list of diameters.\n' + 'WARNING: No space is allowed between tool diameters. E.g: correct: 0.5,1 / incorrect: 0.5, 1'), ('overlap', 'Percentage of tool diameter to overlap current pass over previous pass. Float [0, 99.9999]\n' 'E.g: for a 25% from tool diameter overlap use -overlap 25'), ('margin', 'Bounding box margin. Float number.'), - ('order', 'Can have the values: "no", "fwd" and "rev". String.' - 'It is useful when there are multiple tools in tooldia parameter.' - '"no" -> the order used is the one provided.' - '"fwd" -> tools are ordered from smallest to biggest.' + ('order', 'Can have the values: "no", "fwd" and "rev". String.\n' + 'It is useful when there are multiple tools in tooldia parameter.\n' + '"no" -> the order used is the one provided.\n' + '"fwd" -> tools are ordered from smallest to biggest.\n' '"rev" -> tools are ordered from biggest to smallest.'), ('method', 'Algorithm for painting. Can be: "standard", "seed", "lines", "laser_lines", "combo".'), ('connect', 'Draw lines to minimize tool lifts. True (1) or False (0)'), ('contour', 'Cut around the perimeter of the painting. True (1) or False (0)'), ('all', 'If used, paint all polygons in the object.'), ('box', 'name of the object to be used as paint reference. String.'), - ('single', 'Paint a single polygon specified by "x" and "y" parameters. True (1) or False (0)'), - ('x', 'X value of coordinate for the selection of a single polygon. Float number.'), - ('y', 'Y value of coordinate for the selection of a single polygon. Float number.'), - ('outname', 'Name of the resulting Geometry object. String.'), + ('single', 'Value is in format x,y or (x,y). Example: 2.0,1.1\n' + 'If used will paint a single polygon specified by "x" and "y" values.\n' + 'WARNING: No spaces allowed in the value. Use dot decimals separator.'), + ('outname', 'Name of the resulting Geometry object. String. No spaces.'), ]), - 'examples': ["paint obj_name -tooldia 0.3 -margin 0.1 -method 'seed' -all"] + 'examples': ["paint obj_name -tooldia 0.3 -margin 0.1 -method 'seed' -all", + "paint obj_name -tooldia 0.3 -margin 0.1 -method 'seed' -single 3.3,2.0"] } def execute(self, args, unnamed_args): @@ -245,11 +245,17 @@ class TclCommandPaint(TclCommand): # Paint single polygon in the painted object if 'single' in args: - if 'x' not in args and 'y' not in args: - self.raise_tcl_error('%s' % _("Expected -x and -y .")) + if not args['single'] or args['single'] == '': + self.raise_tcl_error('%s Got: %s' % + (_("Expected a tuple value like -single 3.2,0.1."), str(args['single']))) else: - x = args['x'] - y = args['y'] + coords_xy = [float(eval(a)) for a in args['single'].split(",") if a != ''] + + if coords_xy and len(coords_xy) != 2: + self.raise_tcl_error('%s Got: %s' % + (_("Expected a tuple value like -single 3.2,0.1."), str(coords_xy))) + x = coords_xy[0] + y = coords_xy[1] self.app.paint_tool.paint_poly(obj=obj, inside_pt=[x, y], From 7ec3fa73af6080670209da0489307045794efd98 Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Wed, 13 May 2020 00:08:56 +0300 Subject: [PATCH 28/99] - the HUD display state is now persistent between app restarts --- CHANGELOG.md | 1 + flatcamGUI/PlotCanvas.py | 4 ++++ flatcamGUI/PlotCanvasLegacy.py | 5 +++++ 3 files changed, 10 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bc348275..42b396d2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ CHANGELOG for FlatCAM beta - updated the Cncjob to use the 'endxy' parameter which dictates the x,y position at the end of the job - now the Tcl commands Drillcncjob and Cncjob can use the toolchangexy and endxy parameters with or without parenthesis (but no spaces allowed) - modified the Tcl command Paint "single" parameter. Now it's value is a tuple with the x,y coordinates of the single polygon to be painted. +- the HUD display state is now persistent between app restarts 11.05.2020 diff --git a/flatcamGUI/PlotCanvas.py b/flatcamGUI/PlotCanvas.py index acd342ca..86722c72 100644 --- a/flatcamGUI/PlotCanvas.py +++ b/flatcamGUI/PlotCanvas.py @@ -187,11 +187,15 @@ class PlotCanvas(QtCore.QObject, VisPyCanvas): self.hud_enabled = True self.rect_hud.parent = self.view self.text_hud.parent = self.view + + self.fcapp.defaults['global_hud'] = True else: self.hud_enabled = False self.rect_hud.parent = None self.text_hud.parent = None + self.fcapp.defaults['global_hud'] = False + def draw_workspace(self, workspace_size): """ Draw a rectangular shape on canvas to specify our valid workspace. diff --git a/flatcamGUI/PlotCanvasLegacy.py b/flatcamGUI/PlotCanvasLegacy.py index 0fabff1e..4bdc15b2 100644 --- a/flatcamGUI/PlotCanvasLegacy.py +++ b/flatcamGUI/PlotCanvasLegacy.py @@ -320,9 +320,14 @@ class PlotCanvasLegacy(QtCore.QObject): if state: self.hud_enabled = True self.text_hud.add_artist() + + self.app.defaults['global_hud'] = True else: self.hud_enabled = False self.text_hud.remove_artist() + + self.app.defaults['global_hud'] = False + self.canvas.draw() class Thud(QtCore.QObject): From 41922f5c7c2721aefe6d63e85518e606f879c2f1 Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Wed, 13 May 2020 00:59:35 +0300 Subject: [PATCH 29/99] - updated the Distance Tool such that the right click of the mouse will cancel the tool unless it was a panning move - modified the PlotCanvasLegacy to decide if there is a mouse drag based on the distance between the press event position and the release event position. If the distance is smaller than a delta distance then it is not a drag move. --- CHANGELOG.md | 2 ++ flatcamGUI/PlotCanvasLegacy.py | 11 +++++++++-- flatcamTools/ToolDistance.py | 19 ++++++++++++++----- 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 42b396d2..64c9d1ff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,8 @@ CHANGELOG for FlatCAM beta - now the Tcl commands Drillcncjob and Cncjob can use the toolchangexy and endxy parameters with or without parenthesis (but no spaces allowed) - modified the Tcl command Paint "single" parameter. Now it's value is a tuple with the x,y coordinates of the single polygon to be painted. - the HUD display state is now persistent between app restarts +- updated the Distance Tool such that the right click of the mouse will cancel the tool unless it was a panning move +- modified the PlotCanvasLegacy to decide if there is a mouse drag based on the distance between the press event position and the release event position. If the distance is smaller than a delta distance then it is not a drag move. 11.05.2020 diff --git a/flatcamGUI/PlotCanvasLegacy.py b/flatcamGUI/PlotCanvasLegacy.py index 4bdc15b2..09e57792 100644 --- a/flatcamGUI/PlotCanvasLegacy.py +++ b/flatcamGUI/PlotCanvasLegacy.py @@ -302,6 +302,8 @@ class PlotCanvasLegacy(QtCore.QObject): # signal is the mouse is dragging self.is_dragging = False + self.mouse_press_pos = None + # signal if there is a doubleclick self.is_dblclk = False @@ -327,7 +329,7 @@ class PlotCanvasLegacy(QtCore.QObject): self.text_hud.remove_artist() self.app.defaults['global_hud'] = False - + self.canvas.draw() class Thud(QtCore.QObject): @@ -858,6 +860,7 @@ class PlotCanvasLegacy(QtCore.QObject): def on_mouse_press(self, event): self.is_dragging = True + self.mouse_press_pos = (event.x, event.y) # Check for middle mouse button press if self.app.defaults["global_pan_button"] == '2': @@ -883,7 +886,11 @@ class PlotCanvasLegacy(QtCore.QObject): def on_mouse_release(self, event): - self.is_dragging = False + mouse_release_pos = (event.x, event.y) + delta = 0.05 + + if abs(self.distance(self.mouse_press_pos, mouse_release_pos)) < delta: + self.is_dragging = False # Check for middle mouse button release to complete pan procedure # Check for middle mouse button press diff --git a/flatcamTools/ToolDistance.py b/flatcamTools/ToolDistance.py index 3d73e245..2d04a091 100644 --- a/flatcamTools/ToolDistance.py +++ b/flatcamTools/ToolDistance.py @@ -170,6 +170,8 @@ class Distance(FlatCAMTool): # store here if the snap button was clicked self.snap_toggled = None + self.mouse_is_dragging = False + # VisPy visuals if self.app.is_legacy is False: self.sel_shapes = ShapeCollection(parent=self.app.plotcanvas.view.scene, layers=1) @@ -392,12 +394,16 @@ class Distance(FlatCAMTool): # are used for panning on the canvas log.debug("Distance Tool --> mouse click release") - if event.button == 1: - if self.app.is_legacy is False: - event_pos = event.pos - else: - event_pos = (event.xdata, event.ydata) + if self.app.is_legacy is False: + event_pos = event.pos + right_button = 2 + event_is_dragging = self.mouse_is_dragging + else: + event_pos = (event.xdata, event.ydata) + right_button = 3 + event_is_dragging = self.app.plotcanvas.is_dragging + if event.button == 1: pos_canvas = self.canvas.translate_coords(event_pos) if self.snap_center_cb.get_value() is False: @@ -478,6 +484,8 @@ class Distance(FlatCAMTool): self.rel_point1 = pos self.calculate_distance(pos=pos) + elif event.button == right_button and event_is_dragging is False: + self.deactivate_measure_tool() def calculate_distance(self, pos): if len(self.points) == 1: @@ -522,6 +530,7 @@ class Distance(FlatCAMTool): try: # May fail in case mouse not within axes if self.app.is_legacy is False: event_pos = event.pos + self.mouse_is_dragging = event.is_dragging else: event_pos = (event.xdata, event.ydata) From ceef0849b244cd57c5f937372ebf60df252441db Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Wed, 13 May 2020 14:59:51 +0300 Subject: [PATCH 30/99] - updated the French translation strings, made by @micmac (Michel) --- CHANGELOG.md | 4 + locale/fr/LC_MESSAGES/strings.mo | Bin 389375 -> 385884 bytes locale/fr/LC_MESSAGES/strings.po | 2493 ++++++++++++++---------------- 3 files changed, 1181 insertions(+), 1316 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 64c9d1ff..f0cb4a59 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ CHANGELOG for FlatCAM beta ================================================= +13.05.2020 + +- updated the French translation strings, made by @micmac (Michel) + 12.05.2020 - fixed recent issues introduced in Tcl command Drillcncjob diff --git a/locale/fr/LC_MESSAGES/strings.mo b/locale/fr/LC_MESSAGES/strings.mo index df510fa6b0b6a4c8b5f3d0654eaadacd17b3f07a..b8eea726a10c5e651f1d4da3856347ad755dd0f0 100644 GIT binary patch delta 76604 zcmXWkb%0mJ8i(<-L8o*HOD#*ol1uH<-Q6kONXMZYY3Y;{=@tQzxHJM1k^)jnN{E7R zpYQLT`_E@)PR+dY&YZIgct71qedAba|5mclxgP(ENa%SPuti(Xi%RNwi+@t9=Zy>r z@-pEl9EvOObNoCs$V-PMF)KF0>^KDT;c{0$hl#1b!MGS2E67WNiIBSQeNG_(4dIvw zBi#uxNT0kq&X$;-dRI(~<1r2{M_s?p9p8bW)PKg*cnMSBQ`GsvvF$$b1NuCef^Jw2 z(_jlshW$}Dn25T;a@2@-qR#snljCF8{+}~V9P3aajL-3CSFeVRs5ip=xDiYEL7sP$ z!Y~@r#Iq33#W&PHi*LqB5af-b{vVD(KVgtJ0z(oJTCN|B%$PTm%4fI|6_FjN_8(D^ zJdZ{2mOGvzNs#Aj1Ys03;=-trRYuKW8&prHqi%cR0N`v2YJV^NQxk@Jbu937?aZK z-LVSwEm#Ks!R}Z*RghO3S7Tj#gB7rH>L9NwPQ^NSIW_TbKp{sO8~HE{p*|NicMDK+ zz6!Mp4q|n@jY`(sY3=+dRESGsF|39uaWuxp`Ka@kq3*vCN8(nWg0eC)U62Mx8$tHP_=%Q!^7aRVz@-ZaXS@e?pyq1=W!|sQdcQDJaW7pgNKw zy`7i=bz(T`#)VNGsDSEVP1J*%pw8>y?29^oBT$9Kc^#=|#@sj&3*ip*6`DsBH1f#oc7x%lq?v~b@pq^P?L>{_3~B?qh4~qI%W%u) zX*q0)5=WS6o!L-1kRR32QmFl=S_JD~A!_MP?1JA={}L6EG&yar&VriTGDx0!HBrl` zb1u7achvcVF$~9`BC!g!!5u(7@B(TX-^W-OD>v(3FO>wjEs1iVE-Zt(unG3Z?$`qF zqCyy*C&b4vHv-LM&-`0I2DuS4e}=8G8~IJ{d~6bZNkYk6d;}zai24& zfNda^QK7Ge%8k~T6?-{nqe8nI73!m?0bIa__`n@6RnQ_?4RyZXltK;)ovA;*4`Zz;!PNidr%#@je6j7RL*>G?VlC0kY{!lMh&1c>YdR9$tmBPLP4SX2DNjo zN6qy<)SR6}jpQcg!+}I@+*^jra>xy&neF{}^{* zR-l3RJSw?1V+q`jh42|FLRpI1NIRf9I@r}G;w$P)urAIl7UWgJd#DKIDsCSp#ZcFk z!c&QB&0$eeL<$fa=&u*M7y-@1Z*O!qvS}wn`GA zMqCheeI?X@8fN3FQ6n3Ht#BeLgbz_2dx|>$HR{3txq70~R!@aG z9`5S-QBxX?ibzABf_l^z!?BmEe~n6#Rj3wT$AFu^Xhp%+#}?I$8;}YU-dK z)E@QD7>u`Z7Ouy>(G~$eLyUzc4E3NQs0UYc^#-WOba3@vsGRXpNjm|j;v&>QBFb8a ziegUcO;B6zXbi)Zu723`y?Ye&z>sowVlq??L}D-&Lv^48YJ?S0tDrV2`8wfB9E`m% zL-`=DHBQBe_yp%*{|Z6gAdFwpR>>Glp!fd<3JU3NRH%-l9&`s4%0J!lkM4MqNYH&ks^gnbk=ToQ@E&S|N?JL{E6MY{DipHdSd7HA7>3tSJKB5H zdQV%$a-sEz71=E8`oc7A=-0EeI=HU(pF3Hl2CEee5bMn&K?Dr*x} zvt^bF>r>B)%G!ab^TuFDT#TB6km^=ngO#Z#s$rku4Y3FH)mQim4D>&v2YqmJ(mG)Jx1o~Y~|i%oDbDjDCP=I|4a!=%maysuGT zznf5d{ZUj>-bUp{tQNMa@}W9b3pI7^P|xv)QpieSHfF}%sP+0QM&m!usFrra!KmXa zQ6Hf{p*nEewZBCrb1K4G0HaX%?~3{GD^y4KV}8B=uTaQML!8#`^BdLk5g3kZQ8zs6 z+Fzp1PuIr2jw@kF>SIvL>mcg${0VBu%+=OD(|e+(U@NLaM*?-$-y;h827Hg2tJLkx z&rvU#tfy!JeY=X-f5D1?!y z^;s45pysF>bwVXyFVuO1P`NN2^;7S1)Ooj2=RHJq`~@n>{zHvCZU@V;^r#K0Ao?oQ zpr8{vp|W`h>ITzM4_b`s&_)cyy;vNt;YLjUMUeL`9zx|%_l|bmSE%cjq23J}oO@Bv z`CmuYzmn(%4eH20&J>;ON2UCzxowLja0wQ|tElr6cDAX@ftr%?sAXFP6^YuY2sA-; zpuMvXs$+g<-%gz34$MJ~e5I>z#>Uk5yY`e_Y)j69T4ph>-qF>^y85@M2OP)l_zRZ8 zvR#9`mN)`i;|-sJMpCMqEvv?;J%1oZ<6NAGmvA_?Vmlj;H*g5H?_oJ`3w7P+J?-UG z5>;=8TJM9fAkIW3-(d_x{{aP^7>9jS*_$0zk49x{OH|TzM_o7u)uA=0^Yiz%A6Tm5 zT#&X1f2=QU1RZe!C#*(AB)Y$Cq0Mjw^{%L- zOE|z@pA|8Z`fyZ7wqP4PiTYH_JAL4%Q0k#Sc5j)zOEjx&9Nio+DXJT85RKHBk4ji<*M5&Z(%} zn&Y$n^=b4C4Vmx^Y6E$S3Q>}gHo{cS%&6s=2Q}g-)Ra|4ZQ;#O5g34)n$f89XQ0ko z;@pHf@8C!tq)?rrAsla`<~;T&TSj@XDfQ~8Vr@NSc1x>{g?xv zphlWvjF}ac+>x$c)2E;dTDSvKoNG`$KZK?6Eb5~(;aH1EZtO?BDC)d#QQr@{QIR== z3i(Y`4&6tM_yua}KA>{U_r?WzQ552#mQi{98e3uke2v-?KwPwUG_RD6Ri(6to_nxD&EX zxBZ|s>co|(8(()Om|@9U5;eE&FbVc>4o5A+X{dc;7Akkapk8@r=$WRIW8Z4X716 zP~e9BXi&(eVq%<$n&aiDWwXh(e~;P+PPq2)xwbqbQ6uY(T6VKh_gUop7L}xXQLE|{ zsv{qK3d-WxUt6*zN9}wWP#wsM>S;mL1(i^9UI%qvb5xSHL(O$J)OmfJL$NCLao7yc zx%OQ1?5AtLuqzZp-Jk@jLouia)I>d?0V>H_q9WA;)xo}~ePbl*x`n8mSc{s7kSLP;9NE)4Sa;g6^}9Ja`^c`Pb2^DqXNpdNS&2jQQn zDe17-_K{wwq#c8L-~v=6wz&E^)Ic9#Y_0zUODvShP(2Sr^*9eIl%-M0)C?7YE~p2N zK~2q9u0GGX(zy}Ukv*tLoJB?SmaD(T!1sUbrFKGQ)PoD6Mp(|Z*GAo_HEJ&Vqt2V_ z+Sj=H52(JJm`=A~;50!*VQE#>Fs1Y4=UUoikzC|s|*sE>olA@+Gy-z_G=0bI#1S(|p zQOm0*D%8VVeHto97NO>HEo$dHh`Qk&RBpULUH2X}poDAO6reVuD5qbYf-Y!@n&Zw` z07sxgy%~$(HPncct~IkeOQ5c+je6i0sE!Rl4d5$OgciHwn_c^l$oGNoou#1ATtG$Q z1}dwcphorv|Hahng1obsY`q=7gBtN47)UnMYdq<<_WOfu7}&rtnDz#!=QPG|uq}pa z{m0s1uhaNgfdd6m7Y;yOFx)u-+f$#3TEB0c>ArJ6F*#eJl4~dy#bwx-WW0>JF5jjg zZ!6ZvFs=Vso9*=*j=G=@>ck1C5q^itiG9w?sFA)zz3pOcu|EmPjGDUIs5u|$T!xyu z1E`2z#GLpBeZ93ZZM6rML)AN>zWFAjE?DQmZh^nEM{ow7a|7Z%cX^rY^9{0D1c)m^NAg?#=l3-viv65c}H;2G+~_o!7;ZMQwBA!-T+ zpt5{2Y8A{!P1zg~AzHGo~H$o%4bfbq2c-%-#U1@E^9r$&V`9MxXH zwO2&#Yz>^<-SM%`1sER0++!ZjyL5ne2KC^B_WOZ|A8nQNLFK|=jIZ@Sf`T46$vGRf z{+D1q{0TE*%0o6qMNrGF6e=ewU`?!pLvSf7qG^A!2ZcLxqs}jYibyF8{QaM16g1a8 z-GND{9c(QsxlW;WzU!!tL?5=}tx*vfgPO8MsHFWCm2~@1$$AWRpL3|4^)@Pb9~@@= zYsY%+PRM@5E+~QuQ5o!x=qPEU9s2dN#z{Z1lsBc0| z-E|DXPpGK~IcCf4DHJ!asQ#2EG-(9YL86#pCUA-47r-q|)?rTiU^Sy5~4)p&S9wYzD7N81u9oIVt)J?^P=~weJSO`hE%&_Tl@)iUN--lB~t?orJ*_M z6RM4K0qWgw0kxyuKGOYi20=` zY^G2S({Q7|umvXgEy!z*o$uH$n~&TL@(yxd+Iw`6_FqxgCA%Nw?Zlr@5gGKr_J=X3 z(9cG-FGsDK4XA-^LptPpC)^1aF$o85p+fx(HCG89TJmH=C1o_~#*I;-?|@<08}*=> zsN7hLI&T9`$33W#S9xUjsf($!{<~06vW!IK!dIw{taR<$a3b{|QBzd)vHihfEsUl< z3#;Mqi!${ ztKl}BivOV=H2JB1mBL3SYL0V0vnecqn!=i>0d+)0xG$<>q@8&)j&nCE^1$BJ?ErH4Jm(2h?hc_{$<&5p}<7+!1~YQ8p>mLPN;^ta5ri$@1lDC5Y^Eas2ungHOKM)wos=Ie>cP3+ z+sLAvF{rGsjGCJI&Q_?^)CGObQ6CC&G-^MXjiqoo>PN7fxC_&M2=b2L&o~+9{$~*h z`)D`Jh3a@DDp@O|rl2J%X9l5G%VOugkF0++T%$o9_y;xO_@C^;45%C^h8kfR)QD=J zI@$#Fz%NkO4?$f&#nqRfw%Sdo>yD!Klk=!4=I?(6d%YNv4evHIg|p`@y}7`WJT-g0j0eDujcv z5l%)e!#k*?ix(OkSjTlS8}+WJET4|qaTn_4bOW^vKVl8c7b`fhOoyU6unILr>yiD% z_x4dx=&zzWatn3ihu8!Y#|{px_fDt_yE%tDr(<9Tb?!h7cBJ9PWc{nUD~+8 zWEDSgVNI?7!W6VKjmFZr6txxKK;=aGc$S2bsGY7WYD1ZZ+M;)(I`9i>tG$Pczy~aV ziQ)%)<**Ev#Zj0K52LTw>|Ydgql5{91IsBV7NuSWHMjkpi%=sugc|8>XM%(liDIbh zs$(G>?drRnPf@EXTcY5=uWp(p3ibmdoJ)g7^c`xBFQZ2C2n%CS;^4sRw;MvS)nc}Sq7szG#-^~ zGf}Hy32F|HU>=NMDAc1woYLY7@0CSu+?ryMeYjb!i1@;W5rM%k3qHjl_`W# z=!;64*{BDvLM7D}RL>8hR>4(NlKzK!N0dx$=MO?%KNgjAb1^d>!@!3NY9Jp`t0sGz zK)dfnQD{X&ZPbBH&Yw`Bzl_R>$Edk`@9IU<+PbcS3UM7&a`r;4nrWz!u0rjk8(e)S zYI*(;ko9-eHJnA==n87?-lASEsnVIbQG0d_DyeEYJEI;r+PMJxQs08TF>88D$~mYh zK8?E1uSov0(^1I69R7ios3-b7IPe2S15~mtMQy=dNv7by>$?bQ2ke7N;=!l^j6h#mKA(a@yag4ipHR!?G-~c|pw4@Pn&U)aHiC?( zDawO-&qrevHbb2^2bD{!QP*#E^%L&+r7*^?5j~(m4@#BUvOhoS#wAe6Qxi33?Ol6! z*Y2YpG#B-NHK-6DaP6m1Q+NY4pqHrU1ZA;$x-7mWT`n3TI8X+|uoEiTCZZy87*}g~R!XZ>ducCI=KTydTC!2LBJE}t^dt^C&I4Fg}QG+)N`V&&cFYmK=OOD zQIVL7fpv?D#0J;C7xmqL9QB~ns1V<9?a!Qlp(67Z)j=<(C1(Ouu7snG7sFV3|Cgnp z8&*c$urcauwF~NkY3}$^R8nqo?T1huzJLn#9n@64MMW%OE;~OB>UeHchhk8Gfy$9-Da1s@{IQeXu<;I-UD`0Ev ziR$oKEQ?R`vHput$e-UX`~o$yNvP$r6t%JZfSK?LY6trp)zJ^AWQte7+MA=UZ-aVJ ze^fHgLA|u@pdyf|pbfBOLDs+4Yh4=jpw6fVkHPM^0zZ;$sw8uj$%bp+esib^RFBOJ<>S2kOCRQAzw8l4Cyqbjn5;zqDm# zR@8$EqB>R<)qw`65r2W|XkX`0tWSL`DneIL%knPj{FkT*d_;9Hei_@CGGT<)e>n=7 zInWLDz-g!+E=Tov2kJ)0P&dBlyo+6^zeGi(d9*#KJ!+lzLM^i)sGOSU>T6ID+JPx} zzITd(LiL*(@LyCCC5f?)L}4WLny4F(M2%>Qa~`S#-=HG30X2XhoIktv-%;1UK}Far z%lg;Il2Xum{~T*zAyoTFREMUaBC!&6gB{L;uKgq`nQovub`MM9b9X#R46O z{aTh|{a2&Viw0Ji_dV)H2T)US6xETds2<-(&G8%5gFc~FO@i`veFap=tDpwd2z9^i zsPp@w2H>OaGr7EPg*h}RbW7a{n^8CV9(9A`*dEWJlCMw&`$?x1s)PMdQ#2AapzWwg zenfS=dPTdgIcfvyfPo166!d^;u3-+UhbvtBcdowO9Y25y-6_l*I#M6=Qg4QO&_vV?7NUB*617uqMr}|hQK3GE z8pwUr0G^;a_&4g)EKU{6`b?;)D2jcw{>xG5MZ*p(hS{pxTd)OcSq?{yWEtw^vI(`5 zU2tASb?_GI#t%>(`3u$Ie^4EbUCknp0M)?^7+32*2L<)C0O~<8&f2IOv_g%b8|uMh zP{}z7l|+kC4_t$~&qi0@?>vI~5<2DT&rlJ3qq^3A((1M>QloB^8?`}1q9RZgwK}?? zmSZo}h{mFlbP}o~^H3dKfr`jp)V^}ac^w0*2Ni)&82J8=U&FF93o1KvV;ELOb)+*Y zd3;nvW}rH@1U2G=sC9h~)q#7cj=gv7@oL%+GM}Ta@8TR#ll31?!x$R!;kVcif5jSD zvzG0I3sDyyK|Sz1Y8l=^b?^_=)CASGk;g$zWfIi+8J+o19WCSP^=h;Jb>nt4C?vg5 zp&Q~HjoGPBM(yESFz^L~O17t{>;FNm|JZecy%>x_wGTo4z%jwO94}Mfi#c$HU)SFM zdvHDt|6vFGx?XVLcf9ZMYwFSUZ3DWD`aUSpz&bJz)$y-U5mfw!Dp_MtH>`~6NCVV}TVoL%gj&{{ zurfZtT$rzMVC(k1rWCZb&O#;MThz-VSrgmYYN7V{fmjK*U+(aKCFfbTj+kQzs3~QuoT1aF;>C&ErSDp8MQtt*%n|4T!|Xd zO;pEHwzA}{g<99cQOj;VD)ie>q5i>n8k5q&8@R})@U*o(U{YH1`%A$)?0Kk_p9#2x7eHdCsfw=?rskrh?=6Ys8uo@b-y_{7B}HYEY!n} z??82Quk(LCg=92bLf!b0^Eqaq{ub4d)8(|7(7F0+Jph8*-^{!}u z(bxjDH7`aDhp#L2ma``>To;nopav^yYC2+J)HBdVP^~)$@&k>Aq9nS zkaIFNroPzKU!%^8J<1}J0##4%>Nznp^#Z7o*F#09HEK&Ah{}Q4?)YL<_sN7> zwz9Qa47tEXE8{>45VPcwtJ9z&mu9mqc~d^TB2!<4zffqza@ zVt#PokIA>=5H85Oz+Nirur&3%s2m7eNa%S`Yiv#Z3+@_&NAV|&y*N1VPpwa&rXa@> zeq`hPil_~4*ivn9K0hc>Xi7uJW%Pm*e#9v1hnCxi!+Y#Ny~>JUZ#Hhk0$6sX9q)^^ zsUJj*Fv&Oe;8B>D`fZ$wiB{Ql3$ZNqQy9VXy+o_+ce6z?lKMzgl5KbOhp6O9x5oZV zCmQEb{}Ppi3D??kEre^RPr;iQxsE?z#H8zOK&`Mm_4$~Lf!;vBAq~&JwLfaDxWP7x zrC5vhe^L8D)$i>13Y?~PoQ@MWTFBEdf0~k}*b3*PHnhL731-=BewhGLiCcobKQZ1``=EG(>R8!r_G9)uTtxjW_Mqoow+9FQ0>afDww1QuX>&RqH*;RB zUG^H@iFK);Lw%}c-fibMLwymA-_810PqxsY4~}2mfw+6@&*>sjBVCAtFxOu58{9}e z!}oUHNoV9f8~H-a%<-eB4elZK!umf12mb!wVZ2N|yT3n}zjVNFGI1iVIuIQAcm8<~ zTIe^R<~rm@%Yj9hh5C z!ZixXj@SuLQQ4pWsO@ZB@GbRTcosVzv)m~1zu>@MJ{gM@X#WS*p)$v9HB7+D)UTjE z=QEwKh%`rSNW+oj^}X+{;N5Y?J!w79kIMQ+s2dN(<#+^F;}@rF$`YJ5OQ1&B1vBCX zRJNZ)EyKiT?DM=7YLzv{z~BF$Od&1}b5P4-2^OKg<*Y5A2dLaAe9msz9>b`wMePU2 zQOVijXAAW^)J7F{-m|?Ypw$b`ur2@vfXm&(p?f+0cP5Vo*_aD~4 zKd{;*dr1|!Y&WWcTBeIo%kCBG2a$|d>}?o@+OVo)BOHd>H!h;D!oL(MGV;t<898?P z)skt+HCtBOt_OPuI4|Oc{iO8J8F|x|(Qs6ftwn|W99GBVx9mr*)~E<>ao)!E)Dz!k z{cCRe-nOh=jymz4GudzU5n2|bY2S$o;TzOQO5Cx~&U8M&dbF3kYx~AmxS0A;tcdOI zSqInQSn5yi`N7^*3VnXJIjnZye1KZ_qaX08L`0H3w4YdpJ_`1JpuOm0`-$ci>SeO~ z58Frb{%NbD5pJV>HS*Uzy(UkBy&crcKeN~FJJj(v{&RcXu6w~(FDGVt>3*^Jm*qk~ zOw5VDU?RMS+R0v`mT9h6_C3%6PgC!L`YtH?+CIf%P#-8YF(uYV?H^q*Gx}30Xam`V z%Gw96p6!iwqy;9UeKsno*0}m1)ECh&uKpPH?e_tbV!XFjPlp;n4*U#@Vj8T1owfek zQbNgRyVQ1AT)f7=7jp+@vOX2)l!oJsM{a-|&Rr``ucaRq8QuR%p@GnU2usE&NX zCYbmiz4lpuohay|@DS=jXI%Y?^B(Gp=Q$q57XMm@v%I&D$Vk-QUK(}%MjVd2F)bGP zU?Z=MU8uK3J?|6-{{HV33JUFgRL{Nt>?fdjs5uJ9Fsy=F$6Zh%UWiR`1L|uw)<^r? zPKsTr=fTN1549s^`DA~JRu)xni+&h|k*;9{#-aWr>W0Trb9NE+;QOc$rs5k`bC?~Q zV;NNYLR84t;~dv!WdMDs-bS!2=ihG z+#SScI4b+Ag@$CLjQK1i@D|&Nnu^~rKmLIVX}V-)7-|)SBPrk&Lyfou zDgt%g@s_Aa_C!T;ICjQacuwp8J%tK1oJt-Nc&Q{!VGrztS`G714_<~!!qu+*BBrK( z9reIhs1AQ}$K$26>pnw;Jhd|nwFT#tdjHp;pzr-&sJZFV`R5ov>((mtq;4MQdAL{tvU#j>~-eLdhY1udtvsqF#vQ9W*s5!eB>-lyRP zT!Z?itCuDu@G15c4x(N-ZAjqjb|ZdGJxRKdz*}?;CSZz-rVk1Hq*N|LNZ@04RtDC8 z4^B+~xrJ(yb2@4SbFmCA#{qa7_3_v!quqEmE})(@6C=U>sEwy|SV-VI;DR%IX6x`E z4CD9?%!!vWv;I~113)W>1855=kY4#(rTtTxhw*+RTgs$&es$!_br3U;I3 z1MA_hs1D@`4+;E^`4DEJo-hYVuXdk83kqFP$@M>s#y6;`DH0J9cs+lCx?l;$;B{0^ zWXNe#mK!zKg;0@;MlIuNsO8xbm18qd13rSxi040}pe%oZT0ZYkbDt!aO-UMOMrStE z`MFRxh;;SBsOw9iuCI?;H7%U&oSjkE_e3@(-y1+dd-HJIhoi7Amdn2s9JN>p}l z#3XnCmDOia54?`*!0)J4^xl~ykBvAhDnd0;9cvn>lQpd=RHUIB>PA~pJ^bF)e?n#d zDb)J@9o3O%s1Scb?H|eVS`IWu-Deo8L*pH&{XH++wUF*KibFbdUP7Bgct)Q!7iah!^J@KMzLj-w)Q85M!MsQ)hk?-2z(_)UI0 zF}OfT;IC99#S+hl-9J`PuR|Mvx-U793r=a$UlcdvU+!%;Vwj9G9oYNQ8IQ*s+M!pE-tZ`2f~E)o*> z1j~fFUli*6T9_T16k+}Ah9hXu+iV5u#y?EL%6x~6E{txVfZ?Qaf_KSshlL+y5IDv+uQRV^6Onapg^b|Xnv@P?iQnn$b zE*%p1&+Vbmi+zR=b8qL$wo4E+0_dlYif@EX;TOtq{d`A{Q|M&(2^RL2IOZamSs z72ef4|U&h*Z~({9{h+}rn&3-Hb>R#+MKmVy^fdSI(&~4aaBD_ zn!NQx0>8@{ht+7m=IYrSgm}Z*YlmQE+TS&@50#k47Lnnofy}~4+=c4cW1m7vviv{P z2&0@BcQSpk!!<8u<`Za(#{J@fMthKjN2ItAp(Whn=sSS--G# zULUpRH+8ndXzJZ?J#N4?*svoJ)B68FVG%CsWFalq*?yY6J7E)4gnvXO-$e|p|A!Rv(eMu2VvcV15}JgSsDIYoeq?Hb znvz498&9K>>>Vn}68EqUtjE`G(p{99V(;;QP*EU{pPBXxgw+?DRZBSeL z0Mv3Ghq{kHjeXIydUZrChz1v$eA~D%7J;Iq?-1!Ih{; zU&X*ign^$LV-L0)#z#dW1FDDNsP}&q>V_4uJJ!S4c+hzaHS#m42VQpdKTsWgBBIg)_(~Knw!d45F4Q$JW(g$98`~2ptkC*sCAxnsI_OtJk$%K=Cl=RwG6;) zI3IK1eoRRY-N&2M-w$K_3hl4M?ZTU=8^1yA{jo<_$I_#wBo`_&#Zhxw9kmMTeO^h6^YGuC=O6E!zWQOj=+ zDiViLBfW}Y_#CytBpqiTqm57znT+~*Visn{ov039M-B9MEQ~3~+iSR*PoX*uvrt>` zEo_L1CfJSIqi!@Fb^JTjTwllB7YY$8n{^n0k5D81Y?5VvG=@=ciF&R- zf`XFoBr2`UqpvQe@Be`UYJsf(JMKe07VnQs1xfn=Lub6g*FqZ~8sN2zVNm#oe?nsQa8i<;p|U&X;PrecsnVea;WWtT+q(%oKJ} z(97d0hGX0nmOS~f1@$J_9Cu-is4he~~8U&Y-p zjQYB7SpPLBoS>l)rdnlRD%DUu--eO+2$k*WSKHgIGM1+9V+Y)iO0q0#Ec?e}1M0`H zH>O`368IyUsi=?G52)psa-DBGU!`?6l2)iyFxoi@mHjhN7p_Fj=|0p3brzKi7cm-t z$4r=Qz0G+AtVg}3t1m~rBi5rLwBM%?i^6?WDF1XPB>C3nJS(b0`BAH&C@R!toXt=n z9^j7eMJ3xI)W&uam9$q;1G$Ilz#Ghne!LBqJQ1jMT@m$w=BOJCbnW9%d;22P2DA># z<0ZU{X}=5ce!~x_k=@*A*T>pq*`C~)1+{7lA`$hyN)$Bm)~FthLG5@eF$RxgBaFA% z9@qxUQeTByEe|jZL$+8Xv!NoD3$dP<}^#iCJc#P^mylo+YKhR8x^{LOm!T39l;`v^y?Ka}y zP&bIZ!$qq)P2;xk#nDY zu#89kqbJ^d)Uv#}-`*LK2U!0DXxMweJ{Srd3<>-{7W6`OB*l-m;}ykY)N7)WF2y0U z2}V(0jM^D5V>f(?U9ss;wyzvP<-|K|hTdU|X!FCYf6eKCG?c}}M=S^GU^MmCsE{s0 zEz@(T<#P$E;A2#-L>{#rvI1(oFGnTaE7bjCAG7mPquO(#R#z#Xg1*_RVMA<(TJL*M z%k3cQ+wU~S!y8x`A7B^E_dh#6A2n6$P#rpeT1`LW1$>VB0{ZEANZ_ySwLM`|>HkGR zAR23gpRuT^ zm}Yg~n@gbx4NEaM{({O*?~I*T5EZH@)bgy18fhccM$+BYN1>8-o@?Ka3iSo&eN>LT zbM+)=6)DzV77BVT7RJI@8}+sti%P=n_$6M#@mTGgeVClb;?xWNY&&9C)M}WAnxX@! z9EyG3I$8CY% zqHR1yP?2ef3VB!5M$``#K_B(<`U-s|)ocnCa0#jdcX1^K{bIirTZL-Bjoa}fYE^8z zWXtO=wxpiwvTey<;(Y2eQ8|+9isei`)D%SFIIMGp^EQ=H|NMYI{}17@!83Kvli z{Oq=6e@!eyeFUm~KPuV&aYp`T$=MCH9H*h?d_HRZZ$x$cAS$xQQE%A`7=~|A$?B)R zV-GBYdRg>B&FvD@oS$*WpP)9X&+ppEia5KXZnO-u;W1Ps{zSdZLhspw^P|qIkJWGp zvdVn#CipkPTXKpA$`#gMb_xY)sDjGYA*h@ff!aXkIMbf6L*BwXY z!a3BAc@5RUN2ulb4u@i+$JTxU{a_mIQjqsid-EgI4PKz$dLL2A6#9paC=sfj2^EnD z)YOzh&3y~h6!gcOxDYi3M^M+jLPhw)AFO|^*JOX%-dzNh3(Zl5;I2ko1yHFd@5!488p+fosHTVBGL;tdR5>y1zp*kFidP|l^?H7I*3JU26 zR0o!$InO*ZbZ} z3K~(+YuoA4V}0t4aWrngc9`#teW=XD!qiXU9Q5AW+iWf>#0yaoJ%Hb_=O05QTfcYq zi8cwtsNct|TK}>CvFyx+nyaQ*3I}2g?m#8u8&tAp{nwUVCDe`Up^~&SYJ|g_(@+sv z>fDZs=y6o!u3%E0?>(fTxqOETRs8qX!yKrosDgS>b5suWL7nfT&Yy`|Zktf&T|_NNs?S$4rp@ETfMt#lBL?zJ^R7YMrKj8%G z@q_IFv#>n%Q>cwANr+hj_44@w%it{hl8&FpqSPzJ3iTf2aG!#bt5fXIz-Rbe)CK1- z5);P>4TQEVD)}0sreqL?;X2e5oIvdpf1yU6F|OUWF{*tWDneUPJL%6@4*h>A6r@l( zUTEO;+snBeb>ex{m&$w8c~SB0M%}O)^~ugl7>{~bg3!PROD?QLy(4Ns8!;T8xO(!0 zfdTklJqm3&&<|VVFW4LlCkpkxz!|7WyhSBp&cvaC--5S7b!LTUo?qQS;*6& zZV-t|q8QW;Hv#op{SK9!$FTzbh02{`scj(hFmN6!>5ik`de7bQlxgg|TxnSUdT=xi z+GuK^cEsMO_6e?ij%(k8n$vU6C#Yo=FRdAYV_4^vQOodDx=?Q-_0aUTuT0BeQ~d~I zbNq!*L81Q}l{5)Ix6pi!+CcJPH*AUu^-Mp1dXUh~C z_;4xYjKaWxQTv8pgMyN%KPp5MP$SxiTJNXb@sHS^deSh9)R(9Z%}1U8BkDf4oi8x~ z^^nYF64XG`qXtj_NowCKMnPL>WmFbVL1pJM)D5=bT0DT=v11k+(M8k)e?@IPf1nFU(N)%Z0@sR5sufz zz|^4j?2V{(`~tP}CC+V0Spqd>jZyE2Nf?TIQMq*hwU3-bCHZaiH79S~fdqLhIntxH z+z8YZG)INB6Ds@rqn7O~R0qCAt?SFEh&@5wH%VR_c{bGX@~BnT6xD&@d0GFuU=9tv zaW@vmhcI<99sS<5`xhxFWRF}!{33RPOsKgogxYHBxcU&(+|R=@xEXchXQ<>%T-0)>E@~>r zqL$xY)cx+FlJOJP(toQwX)(KD>*6-o15tCi9rd7BsL&;dvboNP^{MwkCDl>X4X>lJ z{Rt`(FHs}?gj&{VN|=RF?~*zJeL_k>4_b)I_HE7ssMqmH)D3<|&81h;+Owg)4a=aW zt}5!rjW7y_qH<^_R>0qI0A?>08u<4?i!t#2PgmM*R1-CVCRh|(qLOb8Dw$5BMtmK$ zA-%)~n6^x4;GbCZ#9?eqAENDpW^mciz>oF&oCiE~1a^eUo%denr_!#xT*fnj6 zlB3Sci{D`kYPmi|Ez`F(S^v6W{91Nm9%nS_gnFosb;R{J0ApcT?a;t)$-}WJ_2JkC zub`5%cpdB5RMbAP6#L?8)YPV_Ysp#Lr=SOPMkV1O48a+wte%6K`_-sq+ksk+2T>z^ z?AqU=mRnFgdvHgjsa$hV+6a0Hcvmr(0GQT{E%d!Y+BP)+Q$M>4KhMuVPIu3QgQq*$$ z0kxcdLp>;6Bg={WsCsqOl(fNM?1*u&3u-`pP;)*A6_HV>$j!t8djBt_psYOSPPmSG z@Sms?lQgy)WI(lNMI1BSMwU^dG)c3j`lSQyi_4GsKFsoFS``UBq;2DJLLVpNSybqoeql-22^G2Cs7MS!CG9jOs+{*K{q^^_@{uFvK|nwYt`zBJ>kh#h)>-{?l~}^#;;V z9hC!zu>zjJQkb~A{idTjYI%N*!*Mez#CdyIRu@A(xIAhAO;JA!q)bS|P22{<}TVV+G zUZ|b09|r#Z?-~vsn$u;jz7JDV|HZXG zK}|*6FKyXobmm6oNO9B@Rr}Jnp0uVxq3Vfxz-ZL6S>#UKgzC^?RL|dH7{=;v^>Ebr zMNnIC6-E9QFC`mm6$180FlE3gxd@316b-viK0Q z7v`nD26cm9oXLmUgX>`x+IwJS+~w*YQ3I+x%)XH3n7;Rjf_~yDHQYkn7}bHvsEDk@ z@^}=Lbn!-5BuY9bpmxNI*a)*SrA=@M#;6^&#itl)Q(F?-Q*VIn^#0#NL35OTl&#l1 zs6D$pD#_ZRa$^K)f0%_GaXxDOe?mnl-ssT4U&)9;ZCKx;a%L;C(|NyRW=uFH)c!Mk zSXAqOBZVS50kuJ-8*51wfl8ucs1a1a>evkx`rVi_h-7qzjkgV}+63ETC!ps3JLfah z{R&L9fs{r+Ck^E(D5-j2DqM&bf4NQ2VGGk4Hsn zGwQ*Y-SL;G$i72OS?sB{VZO!mwr!ocQMnO=x=|feSI;;nupE6a4+Uj&MbrsnQOUFc z74ki(DY$^T(F@ex{t=aoDdt+z7DeqBHBsmFMs;8WYJf9beI4pK-(w1`|2yu4w^*M8 ziN6lD|5yx0Q(uSL^B- zWjA8r@Bf~pprpEi8u3$9XyYufWJ>KUg!(Y4jf&VD)Ppagmhmkdk8u~;{idTHv>bKa zepJo`FS6y{5PiLVM^h+<>#!;QhHp>m=(s(l!0#~X{viG8RqrR%7Hq*-D~ zmlHL012HzvMP0ubyWpxNtbc_x@zPL_jm*n{3Ry>45OYA^I|k=ggsDGGYyq=Yf(2k zf$G?AsPBdssN{;b+#XN>vr#XH|8MTRqobW zdp~{mea;DqOwJTVp9M-om-#5jWZ4E52Ty~tj&FcsxWY>7;!q!y<<$?A+3y1-poO3q zeg~A6o&}{rS3z-b3zQ*w0E)fPRaTFc2gRSSB?al?9tsC4908hR2fhn`Ay}C)>ap7D zTF)BGa1NLPe+JkUyaP%=E!JB5!T_)~^(-(ATnfsZ%fHTizToe_P>}O|5?BvB3d)9Z z7nBx{mp^SRRnv55~M$oT-5>UZy)1SWkp)(|xZMJ_^NUr;7*3MdVm z2g=B~W@`FeqDW4k$yi1C$mW1f|6vgEExoLFwYFpv;+H zL1|F21J)2V1Vt|rH20A>3evI>ptN)}*dLsw=r=%#^d2Y%i@awIQ3Fs6bOdFC=?h8# z$)IdBX<#@w0hA#PJo%< zSyhjC-x{Kxp!D1G?y{hk9z&XRzOog32-4OL$VY!fB%=Cg0%P;D27gh;`k;g z>-`}pEy#bw8pAT6bYUYDhihMaTwaIZaUY1)v1746F&h3(C#s5-44G4U~2N zCn$1`6IP%VKqvJ^pvSN>BL?QION_94M3S0VoPZKen(9*nxTy zC;_fkxEHKP{WK`c>>(&USn8y8-ZuxOhX#XT;5cwFxB--w>!(b6K3jDP9U-&^V?+>~ z1s(?{gK?i&m(6paESmzSt)Zw5%IuB;o!|gaHkxsu^vo-uw9o)0@V6Bn0j0qgK=bea zKB6FkCC^v}>w;2mqp&w90VaVmhHF5XoS%ZymH&d`xWuQ{7F`Q;QBMSACp-p9&wLJ6 z1%Cze+qsyWWrt+{u{l4pu13SbFQ}gZCxaW#Sx?3FKG$rYQ(pkS271n0-~Ijsn^KSY z!fN3pP*%kvPy$*3N&wpx{V*sE`$*BRfj$wuqX_m3mO?S`2=uDpZ18JPCR64`tB1xb zoDIr4UIt1}Yy!pJK~P%yDfkR{AM6g+yJYzZgG0e@!2V#=RclDz1f!^*1lxfnukm`FF75-qO8w@S*5|oVUs)eG&Vpj6 z<#pD-%u3_BW$;(98TIHJ*0bOwPz;{~Wl~kVX}#a84a%152F2l9U^sXclm=A!+FCs^ zpy-VOWfD#SWeDB?odmeWN8uKQPi|RT=DXimr{4RZbm>JDslRboD+^dhQG; z8_rG81KNMHw&>?g^s(hqaKe}aN*8Ve>wxD$Y2m-1jA6syHCsB^3Y0@ z|I50FoB(AKUIeA9{{&?VF7&q*cx6y}paCdD&JG~OkqpYvWrEVs(SNi4WtLBa zAjjq#peSwvr3LSU(xPub*+^`UtV!4s6#6(&dSE^%`ny00;5aBf^a&_C;B`gV ziGu%VwvWNEe^~!-*_mVzTo9HL-)`^`C=tJF*G)qQLFvj*!NTA*P$uP1pv;YsAl+Og z#X;FG27}U&HJ~(bA6Ogw1e8a$-$7Z9ynocqtJg^|3_`H3n~%vYz!TJ0gWJILU<<2+ z=(cmz&w#Ry*XGmB&vEYjy7>nRn}+J@KI>E@a788`#J zFSxL7j^V4IblD0}x^_F51fBq;1&xa6W*0|*a_8#{${ZL1N|$GW&A{=X48>MZj@kDW z{T3*C<%(MVs)4K;pRE}MSsooh3E%`+AG``m7w0c#Ij9cGSk?o(f^9&VOp`$wf|+0y za6Tw{J3tBKBq&314V20HD=0&$7Z+sx6{jEyRX``$8kAW(2o#57Kv~~2L77AgKpDHO zU<>dLC_PZ4gw?|OpscFqU|nzk*a(~gHUW2l4)AL*2>-TkDaeNMgAl-bp!CFjP=+G7 zq}9?Ypxl6Js(LsmfklBL7Z1v^N(FC#-7_aB}k!rL`<`MpxM{dIKne>9hCVBu;|=0?MYy7@+A z4;Vw;5oWcZ57+}o8$dVo`;Bz-3kH}8V~fX`8{-^yAoFM}^ozXOW= z$kw{Kk=+3e>ZRJ~<|(-al#9=89|bvVTC~;8i^veLJ@x%yXYc_iUEi*qwSmk4J5k>X z%06%xl*x6py>8xUeg)s9p3s5WO+)f`)NRA4m+oW*G6rl#eFc~f-}eOt>7uTkb@QR| z4bVgVZ&0pS$q~BwPWT}BEcLQobn|z?XM^ukZx(3<^eY%ny+v0`Zwx4bod$=2|ALFb zVNq63JOtSb=%Lf z{%=$8gBJ!^Etoq{H}Cni23e8s0zZOZ>RH|V6!Rr0XGPJ$R!?;Vj|1bu4PayNZ_sy;Lc^h)b}0S`_MrazFl&bkcUe2zWKj4oftTUWAI|y( z(-U>`vbi60QE!!GP2we>EXO}UnM2RHt!23jlr!NUP?mA^WY&LO3Zs&(J%1_KfckNT zzk+gXR!y;bqC5B@^^M>e&^y99bRs;~5RL&8pl<`^4ADngL)rvvN<9aZ3(N*E96Uaf z^)H7<{^zZhmIUSZ{Z{~GZ=aTG?F0M3*3=87Sq`GWD%6*OYrq5GQP7oc^<1qCYY39T z;n25%gTNA**5Q>7%D%D7M?oeAi$t(>r@NL zvE(a(vTP@Va>)DuRs}1Kw&Xg3(gS_LWbh?Wdcb#A6`G9EZKE-q1xgQmKNbNne!R7A z7rvm|{y?G8i`E>eJ;6Fuyr4Kd2+DfD2S$O;iPmHr0m>XW0LoC7q{ju@ftj-YlPJiJ z^f@RI6`o|x&RB($K`-secDXg59TD`^Fq_ z0QJae*4eQF+$??m8wDFJT{+!4%~s9OZF>6SK2xBUq|JKH*D z6JF8Hmsc%cwf2oO;Ar@TUej$C!D(Q}AZ|)?blZ>ASIlF7z~1cnI)91_Lhb_H{GX01 zUT2xWsJhTP14b^g3~c~ql2$RSOKCl@BlYHBComhN3ASBeE%f(;MX29+!@2?e0t#PS zY+YFSTwq&wz3#90bZuDIF{g&Q|nQ zpxl&pgK|gwRPk?vWvD*_WgjTDjP)VbNo>|8BC zS)R$D^u#hy=Fk;TT3YH&>#kP;l%8k+%5mNfECtR1Gr+ZP`m92!x2&tvbg(dt1)wOd z0*iq=z*XQ;umfG3veN2-b*n7BeV`mZAA$wJA*-#1JP+2S9Yc&j;9;L) zoC9Si{0@|{F0t0y!777QsrLY74^IW%frp zmi|^ymg`ke?j61&8>~a36<7;GGAJ#76%>QZK^gmPpln1Z!Lne1jh1{3FqL{wP{wu- zDEu>^IQ|ZlIWTvVwQSdduT#Gd2Fv`#od6|(E1(#>3(E1F?`<5j zoT5RgXKiKUaqun}97g?{?beWX+o7AkQDqM(b_?&cZrOD}vEL9ZA?v@RSzxDAj1-0A z6n(bBHx+%S!ea`*0AOYeb|zw^Q)uZr` zf+*J9Z7rL|pmcpWI3G*^hl1aL8W`ob&iiOk=Ehb~_K_2y*vq%a+LD`rQ>h!^$E=zP zdyxab*=L=8H4m`<$00EFfNuVNjz?f~>RAV^jb;NVEjbBBf)_wp-<1#P=9|tMp!7fk zPy*`=%4&%MWkd3SGWL@|33Lf48`f@c0r=S=pY@=S^1ii7ex3yP!BY1WK1)RP=8Z-Up@Y{{i!Zdai{ZmbWfoWZKsVnFw+A~@w;k8bA6$w6-=_KxI2PRep>F;<{~8~0 zU8nvPDEErjPFTzHkB`l{<+G)nv?j?zP+B(el!Y@uSyr!sQQ%TgcC?#d7jVQU*73Xr zoJ&3Gv~IrZy#QXMo_xky|D8V7%^y%$1V%vr2doBmJ}Vay)}Na~4G6D-GJAJ`B5)NP z1KK{*&Hvdj7Tij;&NYKq$V8Jh}8_3 z4U~q=0cCFOQ1}ZdtE}l|);~jHOQ9eJJfMv6C{X6WJW!U~QiUr)nG@?3ZUaSsFDUx^ zLDA0zMgJx!`adbW4~qT+g+W(X{~}P}iZzRifj?6(1-1o4u39aO0HtO9Kv^BbL7Dv% zL7B}4D2Cq#tAo2hxqw^*MebKnR#BmA*8b21lx3NGjrA{+EDgd4a6BkG-%Ta(J18xA z1WH$id}%qV2a4lnpe(CyU_WpODC>F`C;@*B%1!AW7zAoxSsPUdSetr59|eh|IVb{c zK{-S^fU=%@flhEJC|x`Wl#S^nPy)*ZWvowuV(e(!a0JmO9*E{&%s$886zo^Cn^Iapgl_$+=uTV zmmtc{@D`$Lr^$Bdo;*n&Zo;77MwVZMW2R{ZSbsg}2QO9rJfAI;NT=gi(rN;6OVd^A zLVXjmo#77xD}m1w@KN-3lTTtel&nEdK<_#MBvP03mHDsr&!5V^SzGYx$q?TyD4mcD zCpTANFUE2R^xcFy584Na{{=0OZmA~ZBdQR*XObm-h0GzMlhhl%bL4h($!%!wS!CO3 zXo*C42!Ff|qYp^$A#ef4HYJo!SKLBq3(AtFQJ)81RYB}VzBTfaekX{-9f~a)NAzo$=s)oJ%?`W3a|5n^kQz@>l*EQ%yM|C0xC4b)${!I>CXOUkP|gk#>_60NLoa~iYLufeIvaZr;7O8q ztw-Qj&*P&pvPH4|hxOipXq2$IGEpju@LU8YU`*1tsxs2)=Lj`{ey}yGP|DHJc9)q7CoC`)F&;W(~&?i&BPOb<~w!~LZ zDh_?7I703-6$~sJzhcWagL;N?P@8g=a(WMYc~d;~ZOCu;@lO_l9INI#)n_S(DG4&Iku51iey`;1k)%lLU}QUJ|jEG|Ed<2!+<0m zNBj~o+iX=AS|;_f)V<(L>L-xluWH&-(3iB1as$&wQmLMNUHRz3e&}%ak8&t1-tmH>Y3$fLl`aEp+K=u;$9)Oar z!cPXx{kJPb`5mc}3c#p{QZMpVj7zGoc&$`xf-rng^@=6Ia6prEh(JC;PyQmwXzaFt zR#WjN(trifCB15a&&C6$tsx3Ei0%O8DS2A>0D4(kw^c>G6`5tw3MwO(4O)fX9rUu` z4J0QJXhEE=04qX2mdB>(3?UyP7$@I=ZIuw(gi=pX$I&#^mE93Y%HwDOPF4}XaOlq~ znVIOQ*v!9FT#25Vf#U+?y2vg;Hjv_=jl^CfWICZY4SQvLIKB>{0Zd7&0@f&3!pUFo zCt>6o#%4hK0oh*27NkWJ!FMsVNCo){GJ({E!W?AwqyH}DeUu~eH0G}OLD$D09DbZC zVxX2<_wVBLq6#Wa;RhHgi@_#JrwRd%r4^f?OG?1#x6oe1u%!11wga-~Rbb^Q{|#*$ za&IBG#QMn_mJdex3#YbG%5XIVdLU2_<7ZLch|*^SF@o|%=#q}$^cU!o)*?R^-X`jk z$R8kk4q7bbF38P9r>C-AOa`OmvEj8sK|7fiPKDD9>!DHo&DFcu4)r(qkv zCCxUJy4ys_dBf_G3cbD)n=Mujwx*4}{j2KbkfnWY+56^FcvwY63O4W^!oto&A5 z-#c`vG;Th|(aN1&u};9;;7 zv|JTvdjhzp8rTo499aMLiRK*44hUY!(~YkqR989r8T?w6%PE;LI1Z#%*f>DY=RryJ zm26dP#6hc1K!pgVk>ZQY!@&CQi7@*cvX5&{>S!bk*&ruqp5F+fbj4JU@hH^UD2yHiG=2cw0G`lAguTPtS%#290LQO^+ES%bpE2gm~t$+H_neK`Bc^IiO|Cdc7~#Ruw%e0i2d+}{Ih^4 z<8XQe;yHv1Vx*T+7N1SwKcj+)Q$b|Xf)zL~wZQdH3Ezx7(ywFTI@0;kT94by@Ma*{ zSM`?|*ht93@NyD-LFrCF{s2*YNS=nwpLme;2KhEN>#DlY_^Z;ko66qj@+5y6B#<}%Gc1ZO?_#8b&809yxNtQo>i2Q^(Zf-K0_(Z4j4yyEwnj*-8%dXu$t;TKkSfh2Q`jb;F1gp(xWFiy7q*csprn6`XyI ztfZ^t7csh;`b^{>m{jYZXOVYdw-t1LgRHF#z4teEB)vghlJ8fHNg6>8R?*$V*xLv+ zfp(kdYoVAQ+8LZrq%Nr{L4Jy{uh8F3eU~yQyaCGQ0say#l9aNIQyUt~NuIFI8W(A@?0L$({i zR3S_H4*D4A<}KQb@_LHDV0bVBx53v@=tvHvB^WF~uE8Yh1id(Nub2k7ixEIsWq35@ zG2|22kd%zfRVDX}!XNSmE90L`m&oUU1~_OfTBOzV#D^GqT^SPE2IOLJR8Wnf&?NE0 zxwic(fK=*Ebi3p1b!hv@Un%2-F&>HH91O35E-%(!N2dt%>gabMup`PTUkYqr zVq+cj5OgFpRW_d?@Gs5A(f^Mij)fq>{zh&QD^w5IP>jH^q>oU%5};F` z2k#GfqmkbZZxlQihH^2qhL*U=U%-D!_0$jG1>~xL<-n=nQF>v$>Iv~t5?$XAqHwB+ zKg3`Rf~&zmT7#o;@ZZLWOSM*b3z3;dy*c#fFgj5w3?aaO2qp!+`UKQp(dGSkAeE*^ z#^Jn&yhSRCAqRrXQ5*`Eg;4~7Eg1M2!}ElPW*W|ZLUs~zp*Xle-a{Tsz{ilgPax%~ z|AkyKHeN#ZGUWo;+5_)98u2apB(y8!hUACx6nPJWl4j-UnqOf`+5>M3h9qU;NYZ#! z?}>ak_31eM6JC4h??XEP?jwL=(5ApY4o<+{Qsg8xChsDkI2t%i)_*w|{UJzNr-V8x zXF_X=;0w|MdO}ibuqxOcN7Zm7sS~)8)|FRw_>TdP(~mS_ifY`m@CRbAr)r@1H&bPl zMBt7sdpItR-gg-6fNUxBcTxTo-Ca2T8CoW`ZsT-5 zIgqMhBdq}A-wy*z5$LBJeMI?LH6(|?HY(Bysz+|XZ;9+qMHhoNFqVSD*OZMo%93{C zur{=2R+STuS7NHiTADs+zmHaZqq;{!_y>eXBJ`OOJO-@|!f&ejT`)iLtyDnwasD&; zCup1V1QiEOQY7-PD_yDQ5S$0y<=9>4gYh25zlS)ST$%h6M(ngwQU_Y_9fs#ZZ%l51 z;t1tf_;m<=D|AT_&=0Esrb0iBjmGFNQ?#Hw!Tm_NGy(WtP-7}T3^7+lTo{I=4=|Wa zIZQb`3++4Pdl57rW^FeKO#XOUJ8-@-UQ^ktrh@8?P5E;HEs%dp(TZbp6ndKcBz0Tm z^a4g+B@aSS(q4s^D4&HcsW12~!5mV(V^P@yFeYElYAOepaqu;=zk$D~z&?l9GN1si zq`@)r6cK`>IE)615taT?&ihc8?_9xbBJX49k>bBZ*-iN^75pRcm}+?#ju(^XQE#T~ z_;KDHnIh07O;&+E|9JgDOh%vpQ7u$LT~sTZ5WsL~#}$2qqQ??MYjo1l84WFs*8VC% zKtBRZgBMTk3ja3rT%7)hjW3`@Am5(geA|^VCt>$@Y$k;;{N)T?2%F3zqK)I1DU$unf)_@w+pDuUcu^!`QX48de0E6GKDtMm}5 zE9FsqNwyuvNfebSD5YY&DVU&yL~t3(|G<|de8Jre4YN}cruY#MRf@%vkf-fl% z-8a#Zv=RDf${&NX(HVlwa|F?s;LlM$4bAs1j$Xp>?-2RVSY|2@u7aLL0E^*mRR)E5 zgw{A&4J(m33V*%QnS_2NC07nw2)y0orr5avJ)XegsAs9*El;$69nmcyD(O-FH<_6< zgjS-k8$3e*{V7WthM}*i-$d><^=HxTN!|}F6yx{7Kst=fP3-z1TvGbNt4Kh%;iVya zQr3TErId`bb_ixD3ui$7+o>%-kyS)yIgUP8vfVK9A`Uy!8(zx$$ZzNAr8m(#11*qh zp|=ZKZ3rJ==QVhLK`SM15!+JOuO^9yatrbs&?UW3UO~Auc^d{c;N)|ZZ_zUT#D%RV z{9NktHlioFi0a;B@Fqe327WQ<4Qbe2Fc$ic^cBwD3{(`# z&!b*P{wfBZqkNMtMbdx=c+ChM>7fJALcOt zj-41EQN4nRSLHudKvJ!*%Fm!vSCxNJ4Q!$& zX+oX=eM5;P1VUA?GPqL-%|_{S<#Ypve!yTjw2Cev_t z|5xM!>3hoKq5q-?i?R0;^Ut+7hE~lui;xC5@ooTm`dUWT5RMuO(MSK9I8I{QuANHVU6A$6sNviRy($(9Tf)iNGGH zmi?-fgD@J$92ukNbD%edR)HV`$wi(2CT*();k=SF&;Kqk%CKybG5iV45;)mRUZTdY zF!X^aY*v=M@Mft11IC9D=uzyG*n=97v;N{3U&Z!nZ^m ziQ%!76H)$%V7v&wi4hOwYyzpHG{b4hZvHe;CI57q!sWA(UWfK zTd{Qq{)@r*{{m(coW2U-9FE2#@E$pg%-=w=je}PUg^$5?;ArG8Loca%AsZ)a(3Mo0 z@_sN9JI_--htrh=cmerD=wZ}vQIEooq{%*7a@Q)`a$sa&Xb8CjkxFWUVo~U=$dX>f z=uxmFxE?2W$YI!!FG1r8@Ehblp}qsXKG-OXqX(*2EgrM!n zO(LjA%BBJTq6+GmvgL5#e-FZwRFvbD@Hy~%3`u%~;sDT(awQypNIf5h1L<{D_)P_r zADKYP#CG0v2S1-FyF&k6UOv=N(G*44p#lgfy`k#)ROA7A20?7e6T}@D*XW7ou=f`_ z{9LB(Bzc+&>LV4@O{Ehnje_Uvf#NO|I3CA;flD#)GKLn=s%&KX zp!5s5E#(xPYzLo*UkIFltfV0H&f(}9<+tEvBEO7s2kK{mSuoP?~!I=^s5{1dHW1%#j;+6LEl*1koB%B!I^)p2p?FKE zOZpSXl2U11O&p#@<_8tL&<9c94X-G@HiWXTH9|kbxJYCblo1ge1=B-)Jj#E9hv|(t zrGG@ivJJwAJAKY+>6L>B#?#h zw?K~vyDJ}m!~YK6Rs2NBM*9woXHb-+<8(Up@s!shcpOI+)NDVBAxSgfj{_r-T?#D~ zneNnkVDJa>aQJ1EJ(2H>%z5&1Xz#<9^e28lM9%jcM(R))g|qtzd`8|$bpIeADGI)% zO3?o%cZTOcUeYRftEhX>mDE|$&lAvH@^h;G61;)P6efrV=oAI7!K-ZkRuY)6LZ}Zz zr+Z(;$*0O`UyMl72=O_o^qz*cdD9=+4 z&cJI+eG_u46-}r997>IM*>5x0rb`?c%k=EK9523g`@aB&JR+Vi*g|4Kubq)2zd_*-Bf_- z$b65EqhBjCv_#|E2sD&Idu?q?~WVPAd5~72w>!Ph>4d;W-$aQC=ZN zs4u5HnASz3d|x^IUJcP8WuO(ZcX1v8e~bzsKjpgUM&ta73i=+jZi@dNlOf9W8b#+7_k%qcT{9xid`# zcn$0ezY#eYz0(AI7Fsd(lLFx9&;tH##c?i&eOVY)R477PEuoKL(274 zaDT(QujnVxHOIdKgp)X)rG(O{&%mjqH$6DPN~y8=?EIA(TU96L})#VJJFPiw3B!dk^P7k|jNh!*`U^`#2kh&PsSQ z(fJ7ZMC`l*t+hDk}NBxFU6xl%f7NdT6pQs=L^kf`Wq4EX+ z6a(MKm!!kks}6P{ShM{1^e?A5_&|4h{`h+q*OyLFS z;pA@Ueg{^@#|~`G#%=-13!qmFod06361k&t`j&Dyok**o6atQbb_)KlINJ|RQhS91 zaIlm5Tl7LUSwQ_TGQ~_?+P@rwe=3a^a8iUEuj<7S`W_>J6cZ?b zJ5;a%QWu8is0;%=&_eNgCDpk8N`#%DRVD}0=NRd& zg4lu53&=hPZUTGYXpNE`ims&Xst5i?Mp9LUO~Dp<0*a)e=J+Sl%7G}?A#cWDFH6t- zw+BLzl)lDUK^0^WG7WKZTseG(0Qyt!O1&{Hn?rs@@pi)NL%sz65xEvYyo|jm1hQWK zN8WZ7-DC)Ba3<*$3(SAtrscCx9Hg8J@gc^SBRdzIh_iaoc7Q9?eE3H7RugPjzI=I$qx`54sQ*-KJbPkUt0y*SD^&8 z5=U-$#Z;i%X;3rxH$evt7>xb}dhU?OLX)&a)_-{zdsGn16yqQYx1l#s^*WTVA!C4& z3ZU1OdM(vrq3xyKn?PGa`yfwmRipKiZjgULZ=>S9McEvGVIEfjNO=J*c~vJ?lE%@XOVA>5c$*;NmHZ3X z38c^R(Uh$)QW2C?6G#0hcT+8^P5BQLKBZeF6~j;$)yf*mvC!LLV>CGp**CFK1O4R$ zkbvF?(0_hmHdnI`^_Qq_KVQ=SXG?osyMIz^d($HRTixu}O88F?w*R5|zj4`r ztmeNv&Hkve|L@iIvfcc{f3*MB!Jk+^=*NNn0n>w4SNBJ64BA%GXmTj1g8%D-L7Q?4 zG-={&(y~pnX7w94H5NB_9JV*}Ki9&s-tO$@N_FRWok?zIs>_+;^`xe{o$0mRV?9~f zZfB+|%c$Jakz6=uwA-7V<8?c`#YROpHJmH7+Q#mdjvT$$aIZVdXwb^>PXU+Lm6p39 zo4V6@rnO^C{>XH%I|VylV|QyulLFn-6H`6uE>BiQx^btq<12koMn;<3|9Kn7<$S?O z?yM|Ny7B%+t+a76!ZF02V6^Ds@C703@8YOEBzI#*TJFYdugC3lIVt3BbS7q`OH>}G zE616f;Z1X8J7aQEvprGnj4)et?Tq0g-Pz8l|0_j*vq;DKpk_2Z&7Gd(Omd}XIjeAngp#$4h&!`|DGWX$#Gr3*TRL@gM6xDid8gzk9Vy1uS;;G1od`j=6JHqcDb-h6j{ztv)8ho?zY5i zPjUmNE7P010rA?d(HS1EGb?vvsvAy5dV220Q0Xz_aDPW>|AhXID-L7KvyPemB7+@Q z?V<6H1&!y1ILi174skTI7YZMlkwe34^RFk>h#u+~pLhQF&kl7YgjDX5yYYz|=_Lk$ z2#7N_H6z;?mg1<>USwRvF`6#RNdGUPtT0>n|IGD&l;T*G-`?BE9OY=4HvnVjD927C z&FBg|g7 zYnU@O;Dlv&`vu3)piwzSw-+5X@^w$oc6-y^+5W5-9pm#EnbRD#LuKe)sq|2okul9t z$KQOqV~bWW!j+nsL*QOdqT85vL@#M*vmCWc#pP~HNo6`oA2Q0!HFtKl(SDX=ZI!1+ z%jCP9ox3<)!(Hh~OaSAbS&nwby4jA}{$;ZrBOT?sr+czJu2fH!8k8JoqAT4!+Lg7) zsa4GXxMuX2;}}{d+U-mn;Yv?&v-V_4i$)m96KDrUEN-G3;&?4jv+y%-Rb6ZwneD@!pov` zMj1bCb5sq=-Dniq?g)3#Vt?#*$5k!ZnJKHv-*mU*fZZP9zwdXv5LAj@$qI9J^(2n) zxV>4<@Znj6YING~Xzl-EpTi#%lI4tHPGlLa-*Z$q_P*yR&-~cV7liy6il{J<&2}0f9x5@cDt5>hQHxi$2hy{FJtp(j^@F# zhi9bwZ-3@E6J%UF@3*7)8hcW4r zqk_NXB}d_W_B12%hNEfmG-tyOZ1|~6Hn+33NE$P5IJ$;e`>xcT?VYvzHO%&8I;B?I z_IO`#d(9mqQ+ABMZ#dS}kFmDs7`ABJ<9)jeJ>yDGbUTHdmXl^PrTkZKI+B7yvuUnN zPDZcM^|s@TztT63*pL!wVX_j;>B9Ul!#5`0aa<3@b(+iTm7O{Hu46)pCv|5`Mm8NA z7HSlk?Xukd+s{w8w2h+N|)-B<6)=q+M*kpqvp)Y$;?bOrrdMX501%5@+5ow z+wVCV+I{gEoO)`R=59>#m?jxcHUJJUci_~`-56%eE9(AF$#nM1r=%k-38%TAGF@c9 zOYq2^#UYr=#^>zs9`5un{>8DtQH%b}G9|h)mj>CoxpE{9=@JNGp(Cuif7tJiUG|X3 zw9=-F1QY&3r07%Qj!<_C_Qg}P)U=E!bfZXd?s2aXbk z@1f&a|5pzk`GZ2A9O=frza2hf@*_u$5Y>79&5s=K2I*ceu^5?CwQ@#g8Li^3CE65w z%_lpj)7-biV{DOQGwDooia4Vp5;KzAMnsTyv~V6#I>G4U&`KC>9NML#Q4z>k7X)?34SIH}C%HGI|Gd)p<8qTT>2$SrUa)7B*8bQw|77 z9;02bR!`4lGjJNo!5Tk|op)j!4$I8z!*OPo=Sotzh5 zPkN#!le>tyy>dHYt80~Ciw%kyox9P?tV(=*a;AB*XSDICpI&ZJL2XcUXkXT-1Y>P=o>bY+o$f62o+F2M;Nr$cY|`i$ zb`IA#w>Q*0YULnrVD+)_UO}xwF|K)8&UjCHN~)X7T?1#Ral4?_J(SC&c{1lXjh=%QChU)~XwC71IhCBa3Oz7^{nEi;Q-~wQ{90MK=3!<7;!SdOgOdqD+fwNm_A( zTTcOFXmPDdL?V6m|KX~g}6EWl5$vPvdWHD)T&z2{vRr8rGuVY zIEAWclgt129U{WILxdTvt7!G=hW?KN|G_b8IkgnK%h+~St7;r@YHjkxWvHE{P;0Hc z5nEL&W7Mpw6{!}Wv-7e_q*>-X9_Vx@C$kiCxKbeO){PHpY4xj`>ypD;_Q%|}%vB>w z?AdBb`AgN-8rp-^zS6CZRyj~kt)o>@eKoI+7H0H4W=}GD)MfH@udDs`RA2O{r&Vy8 zPgzd6EoRxcE~RIr$zzvVWDt#7^|iK@dS#@$Yd3J#j*gRm6FSSkO{G%1X+me?Ts^J5 zGobrK)yZPbbaNLsul2^fdRq0$|Dz%7VQEZ#ZCJ5X^?()8E5g|$W4JA9(Kx-F-`+s0 zrRUwC!(=t=tZ9?VlW$yLnV^89U z3{RGawK3kwovXL?uqY0^a@B}8*RZqNlZTgTLN>3+Y-X~HaZOYA6~MrX*J zFt@q%P;-Aqx0=~QM%%$!0iS7%n^53d_>_V444$^RY?uosLN-S)4`1TW!*(f;rmD}` zqvhn_tdMvfZ*7XpX~H8T7h##98ED~8MOl?1F0C+4({A&*ADZ0k+7%_2L`HpbqRe<@(Y;FM-Up9c8Ain`Jl34CIx}*8{Y_ z>bl2BT-yYj+8T4B4f;90Gh z@!qpq7w+l);KABahyT=2?Yw3WHP$3)oq%mojxxqyNm>IflwH&4uuL!Q@8s4dIZ9{B zc4bXiI*j8dQJzKo=SOIrg6(PkG8tMGySC=2c_D25WleO1DW5_hEL$OAQJkFXA z0qS@#{++5hjcY!wuyJ}C|5TZw)$muGt}P5MlQ1q*c3MKF*X41O2V9;8jnlKWuspk? zUwcJM3#w?{M$Fz~^GI=dljK60L4%mC7v^Y0=)Z0L+~ zneU|PJG*!@IAtLxbcQU4x3j*pvnvZq^Z%BE_ml|d1VT-pm}~mPAbUQ%p-lrCO_kYJ zc{H*x7*MgwV%{nd1OpK`vbYw?y!ijPrEUJ-Tk3x}S1S=z#yU<$b0wF3MJ9sv-t_zV zT6O=R1==-xK^7*DcU}+gDcB$vYR@~`vr3-qZ03s)r}>Owt)Xf>m~#iM)*#PD_++E0 zX3SWur5O(vYkwN^_VOy=-zChOR!g;U#t#>?P~*L&+K@amOcn~}Hv&N8i@&+GB> zL_8XJd{dPty!;W_-qiY$0hV>dKBh+n=vI8@BcWXJXt}(e<&h;l*^`pvwVpEMKFCB) zmgy;P{{ruoxfmuJ{}$1LjY&l{%^0v;D-;?Qu-w(?wVXTJ(&bv|BL5Me@&0n&C_T1l z+$*A$G7hfND#<(Qh%!n#%6uSt;@A}HMgjsWyovrVyZj- z!*~&O6A2hMs=lf1to8WHkmU@xv3l*Pn(^10TIC8V^mraLGPBKIeY%w)PK)L5^OjcD zUQmgf=8T+`TD!+@&W!ylwOE5c=-xIs+MVJ`9A^w!rImha-=DNftL0$W4f|>yN)N5l zni+kUv-4M7&69bV)!L+ds^Lk-vejB*p|0w6mUWjev_@X`LfbGv`x2CZd&UhO}A&o5IY+noaMQu^J33@T`0$*8gXOm zyIMaZWS17x**xL{&$;P5qDIq*j1*6z$DL|kKCWG>`R&5f<9l zcyE{1zd$240^S=Z;oGRXTPwlQ*?zYcR>mnWz}=xo-b!+h_PXTpKiTE+x{YbOwW+?u zj7$$lIM)!~9e8<$&yxLwixcmExFK>t@Lom*6BbH}j&w%%j_MxKJu=!E8K2a?;V#A*}xe&AT};C zK0eafyKfa|_n6pdtO-3dCcJyRrR$9D9s@1T*zDJ8`kdii!egm9b0<0b#)n5?GBVy7 z8y=U?J)&=P_sF<-XQ=5iqIa)^xX7;IxifqB3Uh`=_Hvq@oe|;j&S+G^`zA#8MY?xi zv)U#1<%Gyy7O4wH<9c^bh&RI(no}ZfJY*E_HSxd^HBp#T3N833!M%BN4Sw>2))L-m$qa$5|0t{_+fA zn7`v*?TpLcA_^kekZgVgEg7{QRNskAk?>F_&T&9B|z1lw{)t0ATKWjGhC=bI-cxJ`u`;dix$aq({TX-ynI z_05Y=0^hqpr+F+qareIwSFdvY2kvT19mO)ey!q#Hna%?Zw_@IGu6!tu}RpSSC~?0E;#nD5ZL@#W|7M_%UuTb`QngF_$q zlzdN3k9dl(P}4i-e|#($S2R7oQ63A@I<83ash5Fz{D$T!FaCbIp8IrI&Jev-QS;WH zY`(rSzc~6+LiBOPLvoy5GrY`@Z_DX>@`dxRG=rx!V@rAcK)!fB2PAP7H%3*^E0N_URna4}zk^9?!g8#YfG*SsVTU#ML=(KC9S z-QT;3{*`9c#@YW<+xLGYB={@0)?dySl9iK~$ah}<_HaEs*x#+2e$P=eVg!$ne0)i< zzB&XR`8k&5>{IX3{o|wc?~4^pFrSg=D0%-Yucjss(d%{ObCtXgkr&E51iNxV`NA!4 zpP7VwPW50uozGRyI(!k}tp(2p<{8J=gdE<9r-u6P4bh7R`ER-O%XVWs{WeUdSyoySI$`RCnu}*k(*&nl)G#eE1Qp{jYsozJ8g_!#^K=U(!X}RK1(l{ z@_*6Ejn3iCNJ&lggEp^bV+NAWcC3luw>+#$>lQ2xPh>wV=i z2tn=*N$#=6p)L9!p?p3{ro(0bd~d5>EvP%6>9*?6IYP~qVagk>D-JfR9eSneF8Mky z1LYj6mulpD6)JJI{YHbTOH>cQj6;)2mt; z|LVQ^(x*NPZMxzp?;mb;*@Mh|oKmF=HwiF_;LvEP>9%H-(ifU(SWY*U`m z9=WB(@utgsDzbV)zQfWX{tHL-1^M%?Y40a`5qn`d8p1*)Ug<*PwbOdz{LX&n2!}b1 z6Q}h_OpG39^bv(SrOA)HG|aOz%j*W5Wy>oF>)qN@+&U~nmPhVJKAx~^)iv&2)63+I zpzxP^{L`=F`P(onpK5sd8+w%rIB|2~mV5n^AHa$26~)UZqu&j^ZW+d&?Rq>frDYnh zX(Y<~FSqf|4gI6X4=4U9H}%Y*o{?kefA&uE1)}xDlaQFI9wEa*W6jr?&eR)|7PG^e z@A?8iTEO>+z?|c7WIyuvxvdwGZE@JQ`hcL4)|p|w&Xdt#n{oTU{hoc-`uQVc&5wEq z-tpY}QQuS`&l^F*_(=~d5$BeLEDg-`W^e;fOLH4v{G|6Q>$PRMQqUuv*QhnLNB(}^J8MFO)xHY#w6Is>b^IcLIN5lV9JOzefG^WNPm;&pd&hLmiuV+x72UE}u*J2tx zjLGmC>IQ$JZs5hW5vN3*7mdlWhHG!*9EKXue2kB)TzxY(rM?gIW1@H=UP(X1^U6>d zMZ>W8HpQ>-74-oL%x(!oym8dqBnt5+;9VSpof0#(Tz{Yc$BKC`l7x7lU}#e7KnhfQ zIBF&fU=b|qjt@p(BN$6TBVK?S*#^`a9!K@`8S2KFKe4qdfCZ>mz=Ajk3*&mshc{8N z5HDGX*BSGp>I+=`5GrOeClB$xjua{-w-K(#q0}Q&*vMDm8R`pDhIo~*b*d0A53WYl zzs2g9GaS31_ZAi9 zVd*RjGGi_3d{yjTfLgunyJ1ZKwwyK%IBWc@=g3FR1gLqaO6HGj2xfSW4u6zL$-HPR!>H z6h}pEHB5!gQ4j8iI&T>2ffHQ&T-13>Q5(%p)Buj7I(PwV;B^eg@JyEO6)-W+_gYbi zXp3*C_e71LQ#RXR`k`(>_Xk(Jt~M&=d_XJ#o*S88c7}0hSV1G zGZVLQEcHaWY{@=zE^)3y#l-epXM=A;i%xsk0r4X7Q()$nOKWD?^o1_U%GnS;x23OCGB~!8HSgz zB^-tgl>a`3s(1x8b!kf47fg24jdP=du>@-5_1*E#sNm{>%I|@w{bMR>CdZWu@v`9( z=TQu&{s6VaVWr9c_!RO|P?Q%#1y=)9HZ(_#s4eQCU}b$mK%>KD0s z3~H)(pqBDDDrT;_`mNIBzfO2cgC6_=b%R)CY~%REnE}$|Dr~mxvbrwFlxjVQBz$NHDmQ$y`{4gYGl2! zEe=J^;5AgoZlbQgk9zQ9SO3>{4PoW%gcPU~GNRTrA8O>4P$Q~`Ik1hZPejGYJk)h- zuoCV>?GLX|*T*g&;zeLGR7VS=vdJ$?K@VzxdYN>?yEqm%VfzX;1Mw@`%p^uVC@bp0 zg{|E|GX}Ez4uv66#Zy3HorOAM5 zHib)2Q~CvJruLy8bQv|3KfB{k-0}CAiS|_0?d!J)Di&Iy+B;%8<^MPe>iKdkh#OEd zas%^XSPk333ScSfJunM?fja*jhU34e9WO&o%lne3SZU|#lQEL|7A%iHps$@QWi5Mq z)j(Y^7&X#msHxkE-#%0(U=8Y*P-&N@0iR@;347r` z*aF)(6+>QMZ?;i?p8rzRne>LITj}rzo4e`FA{Z2DWr_IgHr`VR`1zXr_ zdu~e`N%~ecBS%p)a2houS5Y%|6BQ$mQ2Wb!S5M}*w)Du3N~;p65!66kP!Dy3j;I(J z;Mzx_(sni~%D+HO^$~22=TX6#rHw6RUYta|4C?%osCSBglY;jCzcD)|WOxdaf~a(C zh05QNs5P98y1_=&j(Hp-@K@CNvD<}soU>J@8vpFuy|GH$z8jFNb-kcgNDo{{b+&p@)Hh=d)Y5fv_Cm$N0MrbQK`qfd)XQt7 z>O9|zp`adZM~(0%YU_N3dhmN!FW<#tp*m_r%}@^u;kT^a$0V ze=!{6bhB^C$Zq8SHX1t6uo;tdw_rMiy6_h2!oN^2jknG?J?ud#QNffO)uC$6j#z;D zXw=efM}4|I#zL5*r=8!jr*CUFga)n2T-46?IcmyQpk`n_sslTn$50)+h&u0Q*M1*0 z^5?Gp9-C25(97C8p|>Y=hroJIvk3Mlv0h zUSFUda2m_u1DuLk`-XUvUDyltcADnu8&P?G1~sL3QNj1g z09(t#s0TJd1@9nNpM~1EwxELU5bC-ss1E&uoX_w72HHY!O`2GJ41@-JY>OsGwcC5c~9mXCL;tj+tI1V$BHN|i>Y9v3QVk5!W5U)0t!Ow6y zDm&7SGqa#xN_kKnEi#V$*IJjLK^w15tI&YwY>ptpB=>=xS^y6*+ zD21A#HmDis?Cgh{*%7D#PZ>|owPuTG&>p@KH3O$mQ~Mq2f;*`59y|X-otJ2W%~V>< zK|LR8%^Rb#Xau&vCDqtjvJD^)mf?7DRL6#*X2xGgVGxDYsF9|aVtaf9YKn@XroI~Lf_kWt zw?wUBSJWE!#1c3Nl}+35b3BXD*mkPz6SHxdjw2oRy&BUjc!ps^4s1qk81HccrkHLI zT8!$za!iIBurD6M!kBA@1y@_FN4-1N#RIq)MgnmgZaPB zHGGA-@CxR~hnN@B&at(vipqu|sJGch)QN&qIB>#1T_cSP-B0jeVlt!J{*wy=^j!$*QpmwsOs1cn*-S9SQ#$ID$ z{1+8$@fTUvq(QZ3L+uBJe0N|DDnFN_Ms@?0cJEOa#9C~oKm}1&R9Y25b)+jQi2I|0 zZ8T~JoQ&$gEL2CAq0Zld!Tdi&K_{L@UHC0(t*@a@yy^T6YfyiNEwRKBJH7xzsjqad zL0!KN)uGL(`|n5H|0pWP<7Adp}Z84{xD1jz_2q!b$|I zk&Qzw(dVdO+=+SdIx1!Y%j~~?rAIxd0j5y?_oAS^eJtvRb5R?|O4LsG7pli^QRl^5 zZb6j}^H48Xhx7&bwz$tBcA@-r%G z|3XD^V3o~8I#j&`YNYj1Gcp7V9AH-NO@;{XM1OVRCHDuodb7Jy919L5*lK>V{vSHl*Fo)2Q=*M6LCG)RezL zjXc*TOT)%U+WOvfD|oA%doUOzs0ZFfb?iCnfpIt645dOH&xL9)i2TB@_C9q$tAL02#aZ=zzw-)7%} z6R|S&EvW0Bqt5@IGvvzFaP)WDYj`#4{0pe_LU!2zbD(0P2>L42r=XGcLcR5T%!kWRYj+;C=I@+ocU!O) zM@?xR%!U0>FRvx22Of6yd#C}0?XmN-pw6qjhy2$Ky3wGw-!#+~dKUHe3+%PDNq~i^ zS4KT(IEG^kM&T*ce((~@VWNFz9n}41x%zq3z7lW0?Gr`zlmE47=;9i7qDFcT!_hln z*%5)-$?~CssU&Knsf6`#5Z1+$s3}i&(5AWuDhQjSuJ4XIZwM+&PWcqVDO^S^!E;nJ zhaIvkNQO$oNK{Z3L%r?lVifcFL_HwJ`6Vh_4!ZgU)H}kzMnNOGhkEcM zRFB`FqBZVUmfy)x^=zmcN1@WR1gZn|ur#)I^(CmNUytFq4HavbP_gjP>b@7}ur*}C z92_W*g|M5eFGKb81Zrozgah!Nt2a7gGt?C|Geb}vnvR;WMeg{Qs8~3H3ck0PQu&|Z zs6~B2EXjeosBg1rs2lu_8tHq~J0bZo>u@w`=d0^%kD8%@sE&+6E!|w#zS^~KcJ0S7 zwetUx3i!J_;e#{zab_fhwa2_1ulF@C4eFz?I`y?DEK44vV&NrfY2KhZ5;$olLZxGB zY>1^XGtNd|YqXt$(rq7Vs*hqFynrJx%_*DG`KSl2c7B06e=}-L_o0IL2h>{s>DmLQ zZ3Bxy#a0#UgiTJ9|LVy>cf!x8nRt(yx|C-uYO|q6Rs#U7%0BR=2pgJ%0RsThoM*S;FH6kFW!gIJLI30HrGy8Z+59N&v~+14^MYRdDYcB*QqkvDh8 zhoCw($sJ$j>RVm?1S;*mM+MiP7>TvNvjGmloYZGy1n$Q?%Kx7!RHY%-6-%qySb+LM z)QM-E4^e59;Hup?8dYzB3gR)Ssa@&n2c18oHnz8@jVJtjt5?D-Jm2d{K~X#lHKhws zYq-L>6E&r$Q8Vzpt3N~q)&EdCUeX_IDKetcGB4^r#htY=m?f^>7k#D6cnXT%-KeO1 zj9SyG*X#yOQ1u?JKFm22wI#1cMf+|ngr`wU@fNj|iLcwzW=1VZF$~A{*U5ja`8XOX z;u6%9-onZl@}pf)6}1EQLj~h<)Kniw&B#s66vFQVP$NwGvt>sn%tgH>s(mmj_{O6? z$7lUa{%hoCXwV2hI1}BleIWyCDzl(&5QUoR(x{QwKrKOQ=MdDCe}?*5Z!PM98&T)) zcAh~6_s>2BrQd7RiAitT1Jk2|B`4;`nwSqqU>V$qP4IW@fTeHQc`H$|bP2=o8fv6B zoXKz7JE1meL-U(b(8kaQwFL9AGE;fonf|W572E$}U%ksvH(rT)$;6<7b{lHM`*1rR z#x&fg_dVXGIO%?f*9z}HuwOox{Vl{hru?5zp*RN`{cab|{3FEM%MD8ZX*2RSYOjBf zn)*Z!tvwxTq}fp;$&2bxC3n0I>bmBrsqT(is!143Q%tS=KS)70zJgloI~b0SP)m~F zk;O(T)Op!)HWoyU`~)h9zd?260V-DBp<*HKW9vu;RC`{WiX|~j`G1l^B|L|9FyRyX zdTog{s4sQ?iW*VWUpCccaVYi5sMz=l)q#ho2YF8|Efb@*?r_uqv!MnOjlM=uhC&2Z zbqBhm+J|6f9D~a5m8cuhMt4J{mR9 zX{eZ5=ZIac$sI*G_(mIp^HHB$W`$Ht^crDZe8=yws95oX? zTzwR3fU{8NuR?Xi|AKg6E!5P#I{)fu*xc}HsG>K5bS{d`;Db!LtM@?;_S9Zhf zs2w#L)q(C<7DwWjcnEb}kJrJi-uEU`(9~=}?d@k!A0m%1JI4K=-8jlw0@cCFs2FI1 zT9Uq~rTY{$gOgB8HVgCNBGmi;G-{^)!UP)9KNPga-W!YF07g=cgPP)K%#V#w514@J z@LbG>TT$P5S1@>ER2u%{>IvT3M`tor)cdHJ-HdTHrQ0c}rw33ma00c)S5Z@a5B1xzz;YKhyNSmoyNaWYklB9do7LpdgL?2w)W||Um~l~2p9FQ|^v)cp`xQVfQ3+>F)PB$kOJjG`k78eZApiGKxJSb& zT>R1g)N30SL^JXy>V|)#J}BOyf;CA$7VWGi4@stM@97|9=T#1_EFHlRd0~I4jUHuX&`fs5+{+nz6 z8+BhVmUT1hcdp26Dq8kMG% z;#voKqn2m@YJ-`8n)=nKj;u%BcRM!6>lje}=Z|L>7IIc`HpAc+>Kug{$!ydJSEGV+ zo2&12om%B`Ar?>#C@=YKyvXAm+hwsF7?#bzmQA zr#y+e?jC9*dy94OKh(xlGeKzZo3SfuD_(~R-UsL_3g1!CPFFBtXmCSmf|^1f)q&-x zCE9|Tfm0Zb*RUeSP81saA+!cYQJ;Z&%^pJC=Lb|ay}+UvJFzWonZ%)faE&|Bppi^N zjdX+ad(=#PL|vFXNoeo~jGCzW80TJ8T0Oy%m?f!=unlU59E^&Mm8gO2z`}SwDfu5x z;R6i?F!Lw&fCkP0!pa(i$J)KcX` z#a0!cg7UpN*1|TZyx)Y1{vFr=ucOvJGDT?c1ETd zRR87LL(+!^|0s59RQpipbkx+Z#7~s}J1J=GP6iu@1yo)q&0tfU1{IveP-)WyHPYUw zt#pv9k4DYJMCUB$=cuJxg_-dvDjV)d<^M|x+G68ow4h4mj7B}Mrn3VMq&^J$<6~4% zw$5a0ya08dHK=`HJ7!@CcVSiP*D{9&f1bz?Zn4%C{c0T8ML}EZJFJYkBW#WOq4tF_ zsPtNc3d$c*@9+1hnJSURg17=I@2jGsyge%IhM{I^Ix1Thpn`T?7V=*w9-%>Nd<`{% z-%)Gy59)m#C#$_)v!KpvjS8kdsOyKj`doK>1!_QFq8@Yy75)E1-8VFw#ZJm>UcXO8N6<&4X8)(IQch>f~LlI2WFvuid~L+@M_eQ?{MuWoM%uobph4kA5g)1 z7Zp42-0=i??L#Cb>VD}__sfG>mH%ZZ=zilvTj!F_01~mgcP_Z;Tiu~6|Cesju%kg(CpWkkrGulR85L?q;0rhTJ ziTdupiAuYVmvfwSff++I1yR18Y-|{8#!6q(N&p2Q%Xq)NA=0 zR8PM{1=nrYp1+XYpfKt|HBiCX9rY61i<*I#r~xJ^Z0VaF^_OA@PLA*Dp4i-){8*hxG`!(?VP<(9rzSAQ$Fgt zInH&i{Q&Cv^Qa~J0X48+QA_axYh#?silY`0W?D0r>(O)YUT#I;}d)eTD#9sH&~9HFa{NTajMx*I!RF- ztcC@#F=|9pP*Zso)$z>L?YjJ^4X8Ki|X-E z)K)nGwLz^!O?3?F1_x0iIF9PzH>gjwo2aONiCT*IwL*h`ULY0rqdpaj;TsHB{zuog zylj9P$so*%<54@=dgoSD2X~=vdeeS8dk@ilR_&0 zvr^Cv3Zh0(4)x$>sEwixDv0`{9ykJZqj9c2*SQ$A;jD7?6Q~(H@9Mvz()F>ce?(tX z6}zs@Kt@z_mqTqBl~5yUjtbH?sE+hPb#w@7MrNTlmW9sk7|b5j41A9|{|;&(=>a9e%yzcz)42KGAbi@IVaRNdb}4kQ%6xta}71}o2Zz1fI9zgXJ|v~XfjlL z4%B^%qGqHL>iW9AD>TLIG_*zS;S(|V1%nEDw_7XcV7yL! z7UsmxjqN*NCN8Fa1v{hPvq@<1cfObLa~hI2wGC)9>H{HhGwVn#RL^^&W?%?v>PI@K zq1JqntFJ+Icspta4x^UtTi5;zu2la2ML|88+1!Hd1!_uPJ7cx5s84~qVR}?YB2gnQ zghjA67Q^va4G&>%3~gy!cRtk4+7%Ui7qFD_|91-7*|M~<6Ki2r>JzateuGM@q^<2o zv_hDNdLOL77ts>zO8sUVi=~QfLxcag%xtVl`!A^bw_h!4@He=C+g+%5EZ>yI#^yeK&4%8)YMN#P4yh-YD`K8ci=Mox})8{O=ml=EBd-{ zCXT5%_hK&m3CCb)*U;dv_s2Plce4RJ zL&a96?&N=Y3az?ZR4>Q8)Gwo!+?M{pxv#VMrU$RU>IfloudMYPwz*vkKV6g0v=ov%?-8aB+P zG%4z35sBq68kIi%Q6t&rJcLTav)GXbK0<9&bw*eg4Mz_^Ck6+W9__eowLW;jT?@)*X@_so%60?a0w^a z4AyqGok0FKlG#)7783`g@F^J#3v%?zs9B z)cyWL1$W%Z79+_~`#>(Ag7UIF>cU3O4yYjNhlOw=s>cUV9l47d*>9*B`OBGPiluP@ z%tm`X)F<6w48>un{bQu7`(r6+q!Umhn2DPD<*2ERL0#|_D*cY5dVT@bfqVEpKE%ZY z-I1vloK2^P2DkS4Sb^g|;D4BEMyU4@lg|tu_r2t^LW6&br7VCpi89+u-_D)`76q{OHE{ zS&*I1Yq7>Qy35#tdZo4WfD*^!j9L&deoPr zM)(Bv;I`|7KT>&zaVGUgsOvu6U`wzOBh`*IF!@IEzaWJ+6cl80Q1w$-AOD96qUxLM zzxnh*?Obb7!B}#0XfS;{;Cku@@iw;KV*dfM>{c7tOsquv8BE52<8KQM{^7NZUy}dL zIWUL?(T?;j*2T!}cH>V`$1me7weJWG{?V&_Se|;-owhVnur2j7s2wi*F1xNi4y3*b z`(uXPHUqP8EcJc6$^XX`itVuvjI4XDXZ^4!?Wb`W{)c_&`Qm+{!GD%3_5s^k=c3m3 z2yVwh2ko`|02@$$kHxXxAv=F6>VswvYANpc6rw1^`N|Fy#ctHw<7_;K!?5{b^9pXG zUh_z(_bt9boqzhMneUj*z(S0m{WxmpyN~^_?(xvzpBFre*QxvAUx#`dDEtqn;;Iv& z!G9jnhlE?YKIl64?bftvLAEmJgk7R&)To` ztK&Sq|3^@`!GT2Q?1Vp2*^v9Z?R1^-HT9l&2|HY{7>WKSH28;9e5_3SKd26s_|~#x zJXWKA6-!~di#8)oQE$&-m_zx$H(205xi|xttmnB=BW{4Y@lafi$M6emf7zBU_IG9x z)CfCcCR~q-`qP*X<6W`O_F||kYl!i9zBh?NT%3(ckHuJo`j)GfM)y!LlK*?VVOtER zz81AVoJ0j_vmb1#U!pdy^w%s4TA+5uU8tFgbKO2tYop(uhE)`#_oLYX6}=}=Jx%db zsP`VL;Ulc_v%R#UZ`h40VKdr4N2T9WOowT2+S{=(Y9p$OP4QFI{&DFh`LDt&8mchz z47V6LcD!xDwD^vt*S5Q%-cioW`iuPtb>Erqo@LE2RFJJjP5A|^g^BOmM%EHFgIk<8 zuoLxo4}4pjJ`XHvm!VF)<4p9c?b)SKFQpx*DSVC^Ns-@dYG*p{VME%B{%-rnG+a*o zI99`&a3b|Td4ayVU>sGJyiaWe#9pfGm_}B{UkH=NvL<2_5y#|PdZOg z8_=$&wxL8mv+QVqyJ%mH{5e#w(eqGm5B0Kt+iUnG>bU>>rM-S*{^4_&6Vtu2o)>#< zvCtP2bK+&x2g)7Pj`jqVrrG~z-v{kb8&YS~cS3c67ChX032G3=eyQ=$ft1wX+8mN}v`zxIF&s1e=8?D!Cs&q@BXSSf?~srSY(T#icTHK-Zej1}+z zsw3~PImUa>cYyN0BL#gV9!5RroU31T-of6qKf=@4?1ObU<460b%!k_Bi=(dJh@){A zrp0K!05$TO*aKUmo_7X)_3$bMP3u>??Ld8V2Sb^Z5h-!>|sINr@WzyJwAQ+XYV%rV!qNcDE zYKp3$ZrA|xVLRMUmdrv$f0eiaZ-_qQus-!y@dLrNt(qVZ{KQ&?>exdJ;2YEo|A!i2 zEI*+Yk~-6)I*IVtE*peb^obr zNS??Z9F59`lBk~7M5S2^Ooe?hIZi^Ix5ORagnIB%R7cLE&cBAS@d;`vU!n#OD{;Wf zs{Bt(K^GQ8-LMQQ-|Jw1Y>&0@3M#!aCJ6+;cC(;@b}SaeWylS^OQ`hv8@pkxqycXh zOST)!V1;CM+)u9K?zQuN+mf|Mn$KOy>nlhD{9+d?VNCoVkEXh z?b%at3$8(Z)78lk2!4u9!(r6(XAA_tZa3oR)Z=Fg1mB`-Fab+kAafx2lT(@SK=5OC zRyg_JhZ9pp*i=n)PDhPk4wl7bI23PSX>5?iZu}W8p`Iyg@Q;#u2T&VN@oa(Mcfdtw zcy{aXAPndDcFcv}`L6KJnJq^k_$5;pM{&YXoQW@SGLFq@BaIUo@W!c*c zsF+Bd&z39)YOSMCGglIo##K=1*&G#PGf*QxhOCJ1J*1#0e~e0>m#DRmA7x9D+?m#y z8FhYk{Sz8LEIx~Qya=4|8agu1>5##a6hprE~Z7=DGLumKj&ZzGtF8qo?= zbZ^8Ycn}rU=TQ&5j_SZ&R2IE<#*elUXF|zQ)4%5!J!M1+Bd_Mo_PUx^Xuwj#E$%K90KINz@EnK|S|&LGnK#i}-*BJ@|Pc zJMld>qMo2|!25>d?J$yho}%_a(HOPY-^KJ8C}zQx8KbB-LhTRZokvj{&pXsW5*D}D ze#+wHzZ&w;peZek!Kg*;)y+{I>w~(%2+V>rQ6t@sT9V7C5&rDj|3J-9oDzZHCs-2H z*KaP=`Q

*6=ClhW$`)vw5f+Z^N{B5jDa;P-__|X`fE%P(L}9Ky|b|YDR{ju3zHX z52Awi5^Cyy#sT;nRzkm7sem_)DPD$CXvkj1+=daf7b#0mu~|9WGDnxU4JmeoK=7aI zn~zC2o~xooeThmoQ*}^T(he28{hU*=I`uWkjQQRp3L5zvRN5r3Y*UjHqp8SJ>$>id2_ z>Vel?`$N=yVmGvGNY{}3*8`(z$c+_H9qEl~ABh_IOjH(ZK&|~r)Qzq=AEMIhJ*p$g z8(FqQqRuOaI^M{&_do^Z*hb{PZn(sqxCQl~W0(M>QKhUHliq0dR9QSw?a*M zZwz)6gB`_SN3k=vWz2i}9I2|?BF}MQvVh0A$sAE8Xz`)zv$+D<%XWOFN zqt5S(!9V{umV%;m4(f(6?u5gx{Sxk_{T?d47Im>LdoAilr!gxJ{1KJ5|8}+edELz9 zs3pjO*{~BTrlw+M<^NU+1@K$cYw?2)U|4q>c{WtAl}BxLnNG>E3==j(SS;H&JLpVLg6CP1*Whf#5F`tMs-hy@&N__xqUNp?;=|=xf0n ziF!Ge$9&ifE8!$m44ik~K%Ms(wIhc1BmXt^J^NYkjYeHC7q#cF#SVA{r(mJ}f#4sd z_zJsI4;^6pMK8=leFW+O>rp{=1l6G%s4R;+&}K5+S#qFnYuK2Eik#3Dl|GwL@9DFs z3$LKE4G1S@)LfvOE>inCie1C=t@(hCm!N2I(8I=vW{2?}ia;Toy zb#_6GU=-@aC8#}qI~K#;SOyKV%V~~hGcg9$!KtWkyJe`Q+km}s4+hhe zAeWJ-8Oo1(o<4qqfB(NW1>LxbJE5Da_eX6!<54$Wj(R1`xmh|{o@?UB66AenAcbF41k0TZcqH1`XdYkb!1EnU|h2>B;ZiafB zbw_n=zSdQT1V{ z2W&!hct0xmZXs`9?;dJKenn07b5vHmMFn@N$${X1EzgTxseAqu`<-kzTtNK_Y76c< zHQ=qnSkr6=`vUdg?@?2E54AKeP}!1Ty3Ir?)Y|63a4d&auss&S^{5%Sff}fPpMri8 z37ug*jzoQk6hMu*Hx|YfSPidYElfAlw&<>?ePbbJ!N;ikC7xx+3!~P&6XwA=SP&0m zdFB5z3VItwe`Xs*f6PaH32MVRi{bbiHo(}kZLOQ5qPiREyuPTJn28GJMc4{Ap{738 z9Q!dmJx-=x1<&dG|62;fX;?Vde*KnYUcl=_y(><~3)l>s%(ty~8!n;#8)}LC1%cpS zI?24y^iflM7r)0pQ1|)jbNkV&>Y{*mkl;Rm@$}#S2QJ|~kE50byw#kzcv&F$M=44y z4+Q_mDXy-tPp-2o&19Zv?ehx^#-aeg*Vg&V;m>)-B4%~`*$$XEk z@jp}ywAf%VwHFnP4=^hx-AMiid$Q5;xjyFPz!21Xdb*mo}nYs2Hf@Y>Zm6R;Z8LKBy(0jM}*TB@`4KD^U;Lj+yZpY6nZQ z-9E$9pz6I)8_ZzTOijgDxC1q%``qyxsI`BJ>d-q>Ooi;Q8INc3_rEDZa`n#%b5Y$lSTrZ5d^4YN6mqSCTDYVA9sW@rSeqmxkQFL18M0n`tmmOA%- z>u4zq{{5epu3;i7-C|HveF^old5RzLpAHE|0r_s>+u>A(}H7cJ=9kDg)g?bk(M&>S25Ei`!afgbEwa`Y*QHVoy}ku)YiHRm2N-c zYK*#K55A1*@K300`5lRWKA|YIq~R4Rt?FO3t+6L+!{~>#a1?3;=TJ*=#npdCy{ztI z9!&GS1!rZ{c|%YS9*tU>8K~FrQmOpkPC+9-g$l+S?u3vZY^qZ^bD?6Sw5vBl%~V&^ z+i@7`Q*Ay*;W<H{NHa{vB+M$k*L2X#uv9R+0Y_Px%g}PCJhxUQd95oZ8QA_kW>cL;5&if5(V!}t3 zZp~2VO-4OvC+b7xKB@z89^2C9KrKxr%*ykrt_?9}D0O3}C{)EGCko);x!^1S%bCqu+}{dkRVLTh!Kh3-y3PPc67Qp&rx| z6*MDJ(Z3KC16xr`_XjFS|Hjz(!5QnBU7rv&^%+r1S>##3{{C+{8gyZ8)P>DaTW34e z*4Yi!!6B&hoP^rZ9=P`A&+W(W?#^DQ`}9R!KLqvmn}CX?X{gwm_niD!!#dZn4YfAM zP-}k|wFGZ47iN6nmH>6#P*mFbs3lm4+3^4>%I{zeO#QcQ(H*cb^--v;d8bc75BeUp z=1)*l9si~M!G!dvo=!te-7?hqyHP>)EouoK<5!sDAN!L|_wfPs=vOwADPCLfWkAhD z32cjgISP8d6|Am^7lyB_%OsJrXLd8l2 z%!AEQOEM9OCEuGzK_lFXy1`LYFr9T?b>2qJz@Mladv9&3lcU}lB~VjZ7d3$XsPo36 z-WBs*`&!ft?!w^T|M|up_!G63Z%{W({LZE}E9${*QCss+)QrtXEx|g}15cu2=X=x+ z_!1jo{(l4Bc$|P8G4_A9Blf_;%KsP&bMYq(!=CSLM*5+qdK@a6zrd~R{aaBTZSm1Q z+4^BP^>0w;KS90!lX5pLSvf3&ZLmBpL+y~aF!<+x;)jF<(=Q+D#wAc2L_O3ikQnCB2K9u@|W9NE{j#T#^E)=Tr{m-#=9_w4^~7bVpq<0+n`) z+=+)#54eg7ru(Q7zD2EZWWd@>IUAzR?}6H|hGP+&kNNRDR>!vi-%h9)78VSO))>iw zA*ctfMD=tpYAU}$-S{D@!*5+ZK`d)ej{(~ApmwEG^N=ITT?%UT`?k+&BRm;=Kog|+H&AI>PGca+Xz2H zMfo8N1|4dx-=fkiZW^1Rw5W}yj&luGp#BPVezCM+!7QtaTKmSRji?<4fB%1ig7Whl zRJ1=uJuobtWk(9s1EWyESkBoR6;#799gf3-xZJg0My216sD0xFYVBjExBI6{@A5x4 z4RJY89FALWpWqnsvz<=1rx(61B19%x*C-9%ECV zj_S}{RLrbL1>t_oi)XMGzC@P9_uA#K3#Xuh=`+++eU1Zh9Uj8eIqgPQQC~3koPVH3 z{1tPtG@q_QP7^8BbNn9P1FSgQ76uI#-Kh@_d35u zjr1aF4BGkBw+N>VZ>H8_!Zy)UQL$$T8HK zUPO)b4^-4A%^T(&V@a~2qW?iY>sY=hi3;h0jnyTdRP@L^rHYeKl^v7nlZ@6*Tvt*8U>uHT(|Mq3A;7e?Odn@Ui+viTZp>x0n|)fbjP2dVkfkybsz`o{4&@d+hbw8;@V>u z3k!Z5=E7*&yZ97}QTQCSFu;c-wfGqo#UD{yaqLpIc1ciMaU^Q0OQS|y8x?&0F*8nZ$74`S zvm1j`j|$=|sEy|d>OS#H2WO0b|DA$*UH}ywZLlNGM@9W>R0qP!SazgAEk$nBgUg|U zt(|KhhMKWisF>J}y8a9*rfy&^{9mw6{za6v9+t(j9B6^M@nTeP9zX@pzo@m0Drecz z33bDns1a|%kz~;!R4f&(U~63$%Tb?>YQKP*x%=3V=XV~^e(S8y& z6X#GPy^c!1XU+tb>}xrvvo`8M15nXE&AAY@f2=`W{}uXL%OBl=e^DO@DJ$FBg`+;h z^I-{Wi25d+iIs6b4#od)G!Cj_GxY)$OWCU00Pd~m+>xOzKtg1@>E6u*7K|9hZ zY>ZEE0aIC_T9`K$uUEG(nr1b_g8!L)iE}w>gsYreP&?;-+>Kx3Fs>g`E6n=>pVkiZ z*5QJ>VZpy6Qlh>e7W@YX=hYAMYH?tAgRtOVGCkceEci?31&!(oWp!N`yM#aQ?)C|OFZ5>FD#q|EqOF{YG z89U=doR1GtQ#!g$Sn%(5&qLj)Vq2Ty+Nd3^FDgA}qBfkRs0ZzI_0y=1-a?)K3YB%q z+mThu|6&yMpaH17ob2jrQA@KQL-7de1L8QUBj-?Se-$+&H&L@11u7OIJ6Ol^qmGwA4X6%k z26~|01>;fYujoMj>jCR%&=Ty$`gjeMPB}W-22u&jP_K^ja55Iaw4LnbRSUzZ4?xZ2 zJgkHpP{H>YwX}iGVcyT!9SdQ_F1~%44DDh&T@2>uz&X?d-k_p7cUN2Ej?Vt5wH|}| z9$1K)>OH7|97iqDFQ}0|Lf!WT=D~<=cD#;HK~dWbwZ>gh(c1$HVjqmc)mR%Zqw+dK zcY6utM|H3{YKrHe9=Hi};0_Ef8Fr_B8%tu<9(JBTj)H<=Dykz3QB$}MHNt~f9KSei=|3^?7oeW=lEVP3hMD#tcO#uF8+wq zF-KpU`kkmCJchyON6o}lRM7tB>i0%}`TR6n8;wJY!LL9fNvXevNvW{qE|C2U!OSp=P!UDn?pj z@ZbL#K|veHIOlBCgI1vS{H>@FoIx$YPtK>P^a>kn*N0;b>QNYt!|+qwgo=TPA@JPCfrW$D6?I^ZZ0(tVdZ;H*A98*ctVpNvJeihT4L^ zMC}((P+Rv~%#HDxNp(;^QE4U`U^i@n%90~k3xC1dn0IV2xP5Op1s#}=n&P`y921VS zt+EQL0|QWLHxZQ;tFRIt#0K~t8)Cij?$>dchx$Edq6s#WC9o>(4X|i1|APgB2lb5> zd!qfCyfD_GJ_PmPlUN<^U^UD+$?E-3BRYVMFxF(V1?swOs5L)_sqtUbj3l4J0N8)L zq7)R3BTzH3)%gasBUYYjpJofNIrYa_UhUItkDr8E+pX9MPh&^SHQknICMsQ5ptkHi zsHOTIeFeue3fdq7Gwe5%@lacAe^j)Oz&^MWwN+=HX(P&k+UZ(g1dhWo7=yYl%Pjkm zt_5m;n2n0D6{r~6I*a_*Tk0SU!QjBM)boDEJ0OHVjDi*M&}`eW-p{cuw&Yy06x$reAro!jh4AeoL*BP}>446kWYAVLjpb@MTW zBT)}t>y95mP3fGyw5Ewa-m*YeiI7n(I8Yl&q4*sO6L(&&u=;3 z;B4wC7TN209V-3uFSd%F?c+`U~qJr}}YKCs3ruYqN>5{InnaP40P!tCL{$EWB z%E#fTEpa(2ICi3L^ffA&ZlN9+d!^m50cxb3P+2g*)t8{saRX{V$KCPgsQac_WiuX$ z8I}JPDdRaMuoQS$%f-mer8Bj4%0=4&# zLFM}u%#I(h7-m~|8YQbFmviC_b8F(?KCpp1p%pvKB^MKeIr_Y5d4wiXnFhd^oJ(+V$H$o#uO zLi+L^xCgBMGM>^&r$K4jpLf`b?|`Y~OT1zqAaX%*=pZQT#6>U+{0mG6>+G}#;bJhJ z{60_)EQNR373~XF#lB+#390cjpg8h6C{6o0C}ZOvP-<9cx4lwU1%*BZl-ct**aTb+ z%Km>Gl+CN@t9F-80Y&d~ptQ(qpmg~e&@X+a?XlkhHw0Pa96P}uq4(dfTc28Xe%&5y zC%|UVPlF{u=K=d+vJ@ya>;p!Et3a8K7r@J4^MkhI<=(IlCO%NgKYfGw--kq_Lw1dF zK=E)YD1Eg8l)<%0;eK#AUGu&wcOSOb{wz>t$z)Kv>={tb0joh7L+e3lvHhUvI}FP7 z{OBbBO?@kK2J_Xdq~M#J5c1}Kp6ugKxv_DP?~-QI7H6>OI5)Spm=&46or-F zwHe!hqM$b@3(O;+IFJcSOHBYH!MUI)eiszO=Rg@F-+|(2$Z>o0R{>>de+;yK|KAJ} zQu76%H063wnr^Q!fbW6g`6pm6@G>Z)yYYLr!RDYeZ4@YckATv0X{vk@C=NZT=qo_c zzX9}1!G03r;W1DK*#$5QysGkp-?zKy5m3g+YEZV_U7*b4-@(CP%m=nZYd~@ERZzNQ zKPZl!0i{A$K+*H#2h4vl>^xx)rpll&hJn)LZ9r+lzM!;>2kZz=RP^1Ttau-Q(lyOL zv<*apGRXRZeZh2aJh&h105&;k^Lb7(|64)Ggdp>FJt!@31eBIJ4%P)f1!dI#17~8*l(9jz0lPh1P=0z*oQ(V2{)GsriDRL{kXOKC&MyMuO5e3&9rP zT2LJN7-VI3oKyKrpzwVM%3!>!^7_Yiz6vOtlM9rVi2|hs6G0i|DWEK5{y8eK8k9cS z3re3I2c-|Mf>N^|KrvM06B|o`qOhXMHw2}Hnt|b9dzJTq(y|#UzYvtJU2f<7j%_5w zlRaR4@B>h$$4yY0@OMxQmp)_jRRYD)W}pj<0%cGogR<~sfDOPEpzys3N=tnV%4YW+ zC}Xa~r^3(tuV*FL?Z7AsCV}GNL4_ZIjYSZYX;$tty9pz}F!KFCX`x)OA-Dt_0UiLQ z=9NFU^|b}Nl8*)ZfeXQfvj3kY@i>_Jh5e*+4U{gZbJpI!yMWfh1G=DRg0j#o24zKD z4@wPpfZ}+b!Y@Fn@eNRFT>hNR*8~)O-9Wzx4p0Rtpm;bHls-HF%HaGCl%}kB-ZtDA z>`eY4&<#!jWhFch%HX;V)&`4Rplh5QM8HV$?Y^{6Mw7wM$bb7K^Z#)YZ(g(?lOr$b zjx*%9f=`1pzOtVMOI@}v9Fjq)p$W>Yco~$I*b9mS?}9QGJ_n^@mlgdFQ1}X8vH7Yh zY51kpH%!21Y8H`6k>7o;$biozSg@b>BSHUX3*em8gH?2+2?2K=43rkz4mJb-0;S0t|HfA_;5hJa z$^UL+gFoyF)cI4M3H>aER>I*p3`z~F-nK_;GAK>F5o`)x0f&NR{<5d(I8gd@Js1z( z1f^x7{yGaD8Juy~-ZjVHvp1oAp!NR$XA-hYMg3#1c#A+8WLrR4g5Ln8 zMe@KB;3ZI+_9swQPWhr+TCN%>3r+;+1!F;3qW39$7j%(73rY+A4fD!+aR?!Ws1$ux|v!S5uW{)cR)1W9?r|1Vj*{;6?#i1V*mM{$Kp|+XA zIB+oKnV`rYGx+^y&ylzY;RSF?A-e^t6gI4ttR5&$9R!9!-2Bk|s1f@$ZgCcj!Poe>d&?2@+Ex@+q`+$+)l2PY zz%!J8S;?^8bndBaSl8|~suQ^@$O|b81PePhF z859H4LFvmmpfve%uqU_%ltJ~aqW=iiBL62S@|A1Y4z&cOOL~Cfz;IAz$D;}-fx@Z1Y$qsu2SMqgGvHXf&VcnFpZfrPCqPR{I!`h5)hTARIt*PPI0N=x4UyVcrgBk~8TNwQI zV^&^&YkSF@-pqDc1pd3KFQHK3LB*A3zx4^03upT!58L)xmqYdl-c+UXalds&^W<|5iWOHH+>x8ox+(W)XA4WSBdJh~; z{8d!ZMi|9IQB9)8oU6m1iK{IE%G@i>qk~1dydTi4J71Gu15{B2V2Hq z+o3~XJId<}F|1!eHXM8zzS2YO?e@?xyGHKe_QLWU_zwKdAGSBIKfzJtD~&K5J-~@z zH}D|X8N3Tx|Npn+NV|!ApcDkaOz;*cOLFof_MogV%EqS8;-BRyWm{#vfCaD z-Z8f0SHafMYa|)gcY*`KY2=TCQ3V>`yiv0dSkgu1QjgVV(bPgHnTesfOb? z_#N0B+&$LbM6Q5wIGFls~z$8I&<}ah!dyY4oVgKLkvGJ{J@{XCL+3eOfGy zT@byiH%><3ox`|Kq%32Xx4DNv@_entNVl+j;0$8L%C;Jf5kfTuuru05DqPO!&9 z3YZA}MNstJ0;Ppq6YbqF3zSE+^o!4Bk$ zOtB4g2W6g{;0Evz_!gKn)o!_lkJ()?790b8Hz-d;6{gvnSr#}_=6`^M42lZV8I9ml zFbOP2*GLmi1iOG2z{)sQeFmEc*yeG2m+Lsw=8p$u`tAW`)2TVjJ^{spvbSV|Ex|cp z3iuirDHdzZwwuBYPC)T`P+FksTv!?1|ds& z!r*@1u>OzOi5FNO(D(X_%>T16-dtliW`ZZyGEFFmUuW+LE7#kKJ_BWt_TOM1R)>LI z$tQu`!1W+iaC{9mK>mBM6!|h6?GsRKP|90^)xq|l4CX-_8C0_QEP^l$JORp}3)^Jp zp8`jd{}z;ULGR7>NhcXBM}8hC3ZDlng8LQy6euUBufg)*KdQX^7Q=dEYXZtT5alN! z+viwNj@w^@tH57D>6%4bZ3CUQ*)1>>l(CTn%Jf_YN=v*4$`}gWZr3yllop5qMei_h zAUGDR03HA{LH}u$hEyFPrX}mYD$sY^D`6F|C=5}ctYG~>*_0-O5#T;hw$H1e zI9BCV!}@J^O+XYnR)BTDZQyM1LvSOQu*a7F3zX^FXs;YZn12tGXbNFAC@b1-P@3)w zP!wJRrSI>6vJh3?XCFR?fWn^zrhz6{3Dg62d38_>w*h4goCjrE{sKx%4S0zxAXiM5A5}>eTtsrKW?701 z@7oJakq_*egoDv2Y7a`2P6rEvv%w1BLQwj49atOO1j>SR9F#G22^2^F0%gIfc*3rj zzZHouAiM*P1J{0NpUsM&w3o=~ptQ_upiIj=P#ig-=;cn?25N$`ZnOu5uNNqC13+o| z5sIFqFdbw%`yCVQgkvMv6~;55cv|7KePn6@wk1CWl&;wYO3jaeGAoXQ41ULDur&A$ zC^i2BlxM?|AK8vo2c@N&fHJls!E~AbgGsc6@D?Zz`~gZ0+I?&fl1NaN+&-X;;;GtH7NL0@pohJDA|BxH~b zJ!{wOyuz9OOWy($$iMKVJy>so zQRIhQv{%SgpkGcThe*h@`UaHITkMj}&=#CXei*nDJPp1A&iu+g^|rihAKmtY{h_zJ zVlUZq!7TE-!O>vduMO)n-`QYa^3AT=Oa0WV%>P&jFF_a!-UMYAd-xl>hReWa5>^=Dq%%J@`t4vKLeXMZOCtT|5nJ4ZiW6-;jfk<0b@A za0`?^z5~h_sD90!ZVeQMgR*e6RM-g=`5vIi_XI`0KPd7UpiI|E3a5i2KU?8bepT=+ zD5Lm!@E33mD2K)+-`h3(9+aBh1!Z;={lOmn^+6fUT|iNs0M-RZfN}tt0m>{{1Tn$Q1HiFWWI~Dz7P^Q^=P^Q(d;9#)mkM=e@ z8Wj0OpzJLxzz}ddC=1mqU;~-|dq{{U=M=+bQ0DnnQ0DV*pbISYlg$?fwj&<_ieo9D zEHqi54Cbkz)Nnm0W8`g6441xPw^TV$^fv^pzyHymgsjP3L8-~KpX~)>DJX0HI*{W0 zFbr#j=J{|tsP!36jl z2Fjx-PO3-LZviK0f7duR!n_aCBYCVG04u1a|`(r3X7l-Csp zNH0XkTcCvMREC!!j)Y?Le*z3K5PzdKZ74`Z*)j^(D`!}1^1~x2VNr8@E6SmUD22R4 zcg)7vUGlGk66)ck0srIVA4YeQYAuacdIQ>7?CzBF*WU=uf!F{gJr&ar2=B%aU2lcb zI8~F>N*wgV*8;lOd0I6&Cosnw1)9G*{5j}ihjV-nzl1sHlu(s?8|8R6KMMDuX)fOA zCcf zAnkNYbaE4~OU9VG*@%0I@rKW0XPpUxIVcH6H^TkX^5IiflKr%K2=BwoUVqgieqUywV;5$P81B`r3`F7D-AcQIdLDDg5UJYli!~Y6pYsgEuM*30c z){y?FK+OhWKmva_)=?ZL6DCs$?LmozzoBOmCA^1hH*hKrzCih}#DSEpQV!Que7~aS zcWC_KSw}Z2a0b2_MQr<`#|l4VNJn5bOv7PlKwdWNhY(BxpGS#=UnuXdoPGhGcWB~A zkZXnWIh08VAkzaZr<|AL?RUhVX|=uiU1HUrn*=;67`}tyQyBk7VNDcmB)aOIe%}-UmHH8LUS-R5^Kz$~>W3)=ecgAoGSeD)uK(n1j$?5DOJ>WTjH1 zbUXGTa0?~Jh$WF(q-y#zGV>L0EM?O%+67&+p)aCUu8{r`dRfvuJ39K44hDZE3MKG~ zgd>?k32!J`EsXr{f)j)9Qxkq)pQ8-e5MBSBZ&UV!a>|GN8|0rsCJT9u&3%nL-8j|^HbggISFG>zJi!Q{%QCZAm4?Sx^ zyaUci7$HZ>gA~++IflX;#DNIJlix^sE1q*ywn9gK{)V$$hw^0rS6+%Pg^B2puo79$ z>iOYQ5LHBw-&l zKCk%t(4-QoU{pc~JdNR%aG3N_(v_&dV));}_+4*b- zhHHiLq$LE%pF;L~JL`B42U_H zlk&aLywFlmG6y*cQx#T$Z!Y;KRBc0*&W6eMgWOp=2sD&zQ1fRULl`tOXTY-i$Bs3@KA2E~z%6|-uBc?$2(NZnYd7eCfG206M zr%9yQX~$)yWSBxB^Xm~Ey%B1Np_}CMRJV-A@!B|2P1RI*f1pgBHruP(3aukN@1d^+ z@gK@7DgGTeIHR!I|7+vKI11iIa0voC$j?+BzKsLXc)Sb;x`9nlQdnw$!k>r(F>(`S zbK%qBsjTG0_@D3&hi5#rJ;)pZJFw-xQCk}HlA<n)Qhx)Jt%sgvSbuhQwD^74*DeI<<3MxGW?66 zRaCX_Mfyu(JCz>?&k^`T$Y)s2Q~x?7{y_0;YE+!235FlZH&%joFOgahrbU%hAT&AEB#QMb7l@XzP zE8w8 zHVXd2Qwf79xJG`ja%>0!J>eNb{w1X}U7W$uMaT?=t|{3kP#i{FiA)sqsW?(Znn8tV zuqM1+p#5U&_d8mUS&EQ^9g6t~g#%$+0S>mT&^yMHR0b+4jWxIF=4tYzHoe@f75B#8#vqQDw5n@-42ziSp_ozc$-Z zg18TQrlkl~91hi zUVu@!H$ayUvffgyRgv=f)Fclb-HD&lB@%YyL@>;S=SlcqM|LU|YD?^cGo9d#geiai zPe(ynj3&YSJ$MX(VZ>t4cO#%-XeRkT5jsgt4yal?Q1~}_2_Y!`2-#p*gRUmzS3w^~ z`ek@Ch^>jQqwiB$|CeImeY`vj!x}M0LBa5$${$2YD-7+&@Q12~U#J$EPyR!kt3|8< z?Njgyc%E1mxyp*KmeQ4`9JcD;84t@M5J?P%=V7RbLn$bBBlH3VEit@J8GctWrXe$o z^Z{Zi_@q(hVNgPAbj()#l5dU^Vao6pTEGg@{?9>NUyzYj;1@(YZou>-<)0$>B+9p< z_#JqM+M?FaG-xL&p9Vdiiquv$l|s214?$O9rF$a0iwoEh9{&JwSq1s%?j{PZpsXpe zU^q(IW3|HQ9lKa|#$2*}>>o41EQ%Pbz%_Xt5Vn3!M+8|DVOfS72&` zz((+Q@C$0P1jXNx?~mY17!HPKDGP=h$UZ{ciQx-$*33kIqFD3gVdgUt<|9A@L6=>3*A$ALT2lLOwkhgw5!AiL_5S-2uZX$d$MB z)BpYOYBU15F#iG0qBdD5n*>Vu3E|J-kuQmRE2o;G>^gBCWs{ZS$3gzEfc16iab!c# z)rWjpWK5;&cU9S$(DQKoVHtnL@aA{oI0T-g;3dUuS?9-AmER9uM_FZf-huuB3PvDv z1$rIw4XBxfS8(JU^sbcq;0;qwzefH^>>Pr&k@8dUTjQTUf8h9;DB)c^Y{;OLaEAB+ z!uJpihE=q}P=seA+=jA=@DHH1CK5BD9mc>s@G3mf=)6h(Suh*E$Dp5pUJM5-5D9(< zG{+s3HUdXt=noXd5+$U;G+24>Q%%<$1rpNX?V=ppL0Ji6@HG7ba-~IafzT5thGOR= z4oQfI|A^fG_kd6vg9bwFVaQPig-O1TjZ^}K3$%ii{i7Vph5x29wwbPY7YAQQZXI%$ z&^r^pZ{a@z?IUdT#*r1IT|}$>UqZopgnoxPoI<%1N+TAf8{UHFEVR=^-t9VGgU*Ks zR;ZvHyN;ZMF!<}BYcNh!hi3;gT{*c5=bNZ*{TjIe@a;v;{|XFCAk=|jE9qHEpe@YN zO0g(!jRV23ALacpvKD88VK3!fp%dckB`t+aIyo zna^R8@En4Dz=S> z1cLkrz&7yQLT_Dpr8yho0F-|Lp_Hoeiv^VYMfzdrcTlnbz8^6r;REO~D0_pllNgr} zNnXOA@NQCR$#2BjQt(%Uw=wBB_%EU75qbYpAL4!#r&E()=ng|8Vz@H)Cp^Q65?)ir z7Lk7!x!+Lu7jZ8}2NNaKf~PiJ_$qV>RpFEHEc9>Cc@JCl=yGfRyHyi^4$}+@$}6EH z=xbD3gc~4uo$?YG?oF(OvO37T3O$wb*Gc~XJpq|_P`*Nh2uG0Fq*}BL=~(#qWJ7}A zF%8E3q(&>xr-4V5(dTKx9;z8XwfNcd!FMqHHT26kxDwuG)U=s0utwnoocc=X84m9N z(hZairOGiPxc{$1s3o3Bcn*g~Aux%2Y0_<>J%;cBynYS^@1VF~n2Zy>;A?}--#8{A z86FS(r;v*ywkH1r`QN~r#AmU$2mMdVTz>_@5-3=J^5-ac2!%N)X`#HW0j;odPL!V$ zIy?{2)Mtf2h(@V|%S0FSAK*De`g_v+Z&xeSr|36n=J0bijHAd(# zn1IJGV)$bmoP)xa@TI|X4~N!5lh2X|+qxX>QC^#LYxrj2%pv6GfIlkTU!hCFV3oIX z*bhhWCk+09GMNn$YGHH|v|J_RQ66t0e~|bX%3H$!wNlnkT7-}Xtvfn)5zkWA2R;dJ zkpBc7HHnWxe^cqR>c2@T@ldN#2>eOmO4ZyoaV`&oGpO}AqJ&(GO;qIx-~#vyDMvq~ z?360Ax$U1P|G15=j>t5^Kroai9jP4ZiIZcI8;h+QFkIEF z^^f~_<%9?|Q+-(l#u3n+Fu#k^P6)rKTIUK*jD{wmtPPGX(1sxUDDf%MSCK2G9C<|X zM&ZbNs(UOkv0qUc|B%AJl(H8Pegg;cP$c19@`h@GgE-L%-szP0rK|{L!^w|UdVJuc zC2m7~X=p9Qe8N zRyd22zFEM~5L)3?WQrnNpYk%~Ban-R?~-z`Gx{o#J_p}sWXlo})_fWnY`G0VB2Zk5G)0Z*{=ZP=l+)?s(C@T-2 z2btH1#i2`h#*cy&3fe&^f&(v6xQQ4>ejB(N!Cn*#4<#WV=a zf;IuXf%BE&8-tB4w9Y@+aZx7W9&rIq`vX>%MFl0tVJH}$gTY0dk5EYpMk;6Oq3kQg z`-IR{D|Lka9ZoF*3xfJq*N9Idn~rQF%IYHfCVbPV`EtekCKW6gO4EvS{#d zLRnRm8W{hFG6`0NR z+92~^!f6QgVR#KiZ=&dV3_XRSvIsVU{xr^9fc}_rMq~n%k5q;ZQML-%XVEi`v=>9~ zlP?T^QCg!0^o7d!6UdB(J`WndQi8dOvI%6$5F3;J2*xQ&@luTRBtIS8h++x>H&$vFHtI2%X5gg#2i3y*}I&^7c+IE9|RcG~ZFj)J|!mc--AKxd3KMw#_RH?V*j zq~PcUc($N;0`WI!0hBaR&YXsCH?;lmtcLe39D0wm1U^2u!n5d=P>B35q$kPyUmazi zLs&@sfM)6cFVE*H;pxiI$2eI>rRTt_tMoJ!pCIbq%wrNlnug0 zW1>XNQX`Yy36Jgvw}Sb_3-YQuQ~xxbJb zOL<=$u41!TKf5S=&cz%OA6SQukN ziRW;#P{;1-Nt#P~weZ&PN~f4{2LZB^3> z7?AKQ&ZMJM!V9F=5=W4aQwo14eGT4k!CBCJw7?K}XQ*sQ7bqbQs7ew^qI(|Nor0pn(B_zigprQvy#_=p&y{2|g3CK87z=j%g1K|BOc zDICdy{x|7M=*a*tLhDQUd}Ok)=WmLV-V|<8&HFjHhJx8jc^U93%)3zZ9>UL%K8k{1 zNP;&QKB9aQMn05Ekd`ou^mHmxoLGe#OQ@;F!xZ`cZ!Qcya3Bgn39&F9!{{_<5~46r z0iN0zErWtS;1Fm5%CAHJODPlH8_KcE=%}S;!eFI0U7_$v*k(D%`2PrFF(`Z+p^UW#!c!UAPbmC~^g30(6Zs0t$VF94#2q0xAfcG` zp>L>=RG5f#Gx9~S_?qGhmNmxO+e-6Y%5I{0Ir+)R)S#?jxC#9rbO|rv;RdQU9KBy7 zx0n9;N$FV?{Ln`jKa(E?!fP-M`Ii%4t7f>O+ANXw9fk5HIFqTAj=*puV!W!@rv=*n z3Ha|p?~k5sIFc$KdK`t2i$HbSXu2|Z1_PlmO+rAzWavXwdMAP=Wy6r01!fbUMgB3> z)~n%b5C1R9AzK6UR5^5!tjK`6NYo`$wyFD7N;(gZ$f$+4*1vd<1wOyNCa|F z)*EFnDDQoCk@a&mir*l$7F>doiO4mEU&19-`$5QtP`*q#{yAk^ltW*_^C>d_kS~O@ zCyLq|jin$5gLU!hkYX0%Z3Nn5NXFNr2<)LYpAaQv+hF~yqhzKlXWoM6IO(Ox2E(uL z{Em%hmAuf;TmN@7$N}!8uoglK@xHxMCdKj4Goei<-Bl@Qg+q@K^HBVzs{LBZ*Hejm z@MzR@Fgl)~dYm;oJ(! zBz#1fiBsRBd@}Lhp;7_D)1+4;e_3^PC3LRAo<9k}r4*)6_#%bhV<21!9>jsO7{0Fh z@@ZAeqo9Eko8bMEbP<%DS3GAFPZs&FRQh-Hj=|13Xk(NE<8c0p)IXWTQlf;_7%Yw> z|JYead6*w2zlQt)$~G#6`^dYI=}!&5gdPkHap)ra68d5=Ri$4;?t7fn8AvZfzXRVy zo9xBzX4ssm(*ew>Az8WOLfIUl#ha^KlBiE9aI(4 zNxw?G3;ip~ry)}U+=|?{(7XC6NJ4lrnG2+QpnNz+#wyRtk(aQH{8;#+;A;yl1p~EE zHXi3BtWsk~(q*An!$=k~S)@aed75+s@JZ+z#+xh0{o@d;h4R-`O@&uNQ)nk}u&Sy+IJg$x`RI*Aek+(tMI>yI4}G75`7ts}!Ea!! zkCzf&Mo}%4_d{qqw3kp+3}-7NJVo&=P{!9lyA7WUC&!^j!T{u}U@RQ0O20ph>_GHO zh*h5F^saRIOSA|Zz;#( zRlW+k-bJ=9@i4kBD<{8@@ppvS4&ne5l!IY0F%ttZU@$~t;8&Cmh5iThzBu_S>0_j~ zP_~Qw7@~wI@)BND&euflIQjY*ohdvxvmLp4(EVlb@F@&`tC}VaMwunbDgOkTgvXGpYA5M`Wq1RE z-${hICkB5*;7^S7BHa+Wgq|q;Qq^ida)nUz5qyO(T!%isg|TO#1w%>7o`ydKY_IIx zp}Yrtr_ozo=Kl{UzXIV07(c+k4zMKo_fYzi($tvzpYR=1`JYhO0ou>-e1_r|k-JKi zun(FG+F+cIM%P^O#d9)b2N<*SjKPd%j@3yuL>qP!Ri`@rmwS^y1jOo!Hl_=z&m83PhbbS#H27;)NE*w!V^-`{HLqm*8i!0^exrt1;;;V-n83kM&jLr&F_aJV4uR6OXye*)e zhPRn~o6`fO0r4rhsw3({YZOUI)=@H714}~8Wkg0>wvB(uuv;swrR>*#X@n%Z4 z54`E{>ev`4|2HR*#98I__5$9&h|pMs`cf{T1r2{2WwYSfLo3vRwiVn*>&<}g5ap+F zEEwvN_)N9dVCB)bR3;c=(eb0JLfNJMY_|v&hqxd75`|~LSd_NLP)Qu= z3~e+98j+Wm32q$f1HXh_q|-@XBpyVjJ>_GNUqpI1X%n6gklT)qTf|AkGC0!}xn%h^ zb32|Kf*}cJ38@H6$bq2*^d02CBV91KQScd#b)|e8aw{HN@tW_Xn4% z+J1$uhe_Xnznx{rsy~|uwR2$P3krf^4}u+0Pz-^#lt+*sB7B79#6|EsDgO|o_lUvp z6pCwD$~l<8@1bRiqN5e^7nS}KlrNwHqh!l|7^bCouYr|ej-s$R+WMpPsM5NZvNF*B zCJ&3_eH0x=R>D9OohJVlJa3c#8T;m}vZC!wh$FkN%*t5Gs~Qc_y3&zqUyip=)7%_g;- zV|6#Fz|*yz=gJq&FAgNNbvARBpv2_~ikNrGIQtsenYkIsfyM2dtxMGt9rw#!$=U9S z-i%b&M7Pi7&B*a&XXj?+1orlH{#ecsBfh|@;m&)y`NJq@>A<{E&bxI=1ii6~C(Lvf zuk|mQf334x?;iP1xGc_y(3lKY&e%+!$Ig@XxN@@H6Fh0I%oID9nVIGb_4-^Xnb~8! z$;qCKz~XDpf4UTQ#7*#IyM_lAGz|G=nBmUxq)rY@oEfsIZr`yUZ|c|_*Kk)(rfcF@ zZ_?O&MXrh7v@}o(z{KBZ*d|fuyw%f3S8Dp;6GrcshnQby>bP?eZUDQe&|c{x2s}GcC_t zK2MG-#;y^1BCT$7i6*Iu<+vsIplR2b$*$B)%PU(TXvJ)CAjB28_Ik+H++xjJxmvXC z*t~6%=B>;Znrlb2mJzK3qg!a3oMtE8S>0^ZN=q)5MKycJ_lj-la+|AKY0o?Bnw?u~ z_ljrdZAr=7l1&SEd}eeTZDP>`ckTpFsyjQ`e7lX-qHs@luFvPmHl1y?ONAp-v)viV z-oQ6)wR1&^Cb_e7JU&;l$1KxRFK1rpsy$LH*6YjhK=QeA%+B33zvjuvG2iH>g$?p# zrh9U-C%fFPye&C-TU<$*8FYM(m)3XXOwRJS`sJqOczby=BOHV1(=p>{FmnHAp+NUY zZBxkb+zbzDa;S{hcBOkVa$U*p44*5~OO{r??^d=uiO$YWVkBnfx+ZwtE+1ngD?2kQ z+vCbFbS0&^CwM*C9Rt;SX!G<6;!$pnH_erWEF(LUHp({FjyI~63eCyP^|{ilhRB`d zGHd;!R|$O8TkGpAth_hd_R*%*jCCjBrqAWh&B;u6=Xl5GS|UDFX5{$HQ+>4L$PC7D ztlO27w=Rj{M8k-yKE_VA8;|n#(yuNj?^b3^~# z^vt3ZmpdyvZ!^v_!?ImIjCridl|e`5ss$4#9BA zA=<ilbaI$`98GTK4cDeTFiHcxAJ!5JcTA*^ z7LZoRa%U%bXa}DwgRXqQIcRimjx>+YjmHxhA?E92w1$!YDPNGy7vcC%o}ijQtt4$- z(NeLPuttN_z~?Y;w9+b?m(#RL4>)b=>DsF!V#C~7S!v!RdLKtU8QGpxrVHaP%_Ad_ z5g*}72xF8@kRg?o=FZ!Z6Yg^77Q| zNY2!Hgp`R6ZWl5!q*nr)#%qr|{qgQ>cY5AttTTA-_fwFIMUMhnHlN9EN3W0J>K!AE zotq(J80$IKtO$)PP&fAkw>agAaP{|2@VIj$9FYwB+-$&=&VuGMoBOnpp~0Lh*?iik zRWFw2c8#M{n$q0k)1IvooHXg~j9j~mlXI;JV~)wu&OOk?f!?`VgfldM`SO^vCupOz zjHI#V)d^ZX7P1MM>==PE6SXNt%)Cfv<-(aMDJ;toW(mL6Fz~fsds#1~2A{_jjfSkJvD8hBwFSPV@Tgv141v$@DUE z3Je0-hyQnc=E3>es2WjY-5IH@GO7bvi0OWs)Ea$(mJ76jp#{g#!ev^+qDFK|iaW`C zeYLi{#BfHCPgX}S11He`1+AU4NLp^XHv>Xo;fq>d!;F53iGFv3Rz7fUgSJB}6rY{R zY8F_uS$ia;O-7hEJu8!a!^PN1lO>Kd-Vvqtf^66Q@-$D7Bh}QlX|CATIU~->j%DtMr_xXl%sOirGn~ffx>*i==7)Q= zs^;LmTCKpxd$d4EVONSZPRzvtt%bQXpt%BH1+)r!a4iq~b3pr`P@HUVvg}yPb8;AK z5wkXLjjS`!vOL+LbWD6ycNd!&3lglJDNP|IdqNo*%xs3GtdESyR4;S#_oLbz%^1X* zIl+AFnAWUwt_ud5)x~l{Lq*U;qSg^*Qze(T<-uIhp^7PR<(O7aYsyAKx29yWcCcsR zT$)>26fbNSrSaK_*!{ikT=VDST7^LC_q1J3U5W$O-q$8O?PfN|p3qts_NL3QaR=6& z&`yQaoWiLle*uoYbc}4%5uwpOpL;T^ z8-#50tBlb6U&NvZE(u$|Ur-!r(GP&ucx+ z@e7@mD+SkiHN>Tlq{`;>^V$YAg?q5((*7JcycuTG3tF|(YW8|uswmL!f|eX&WO!fbamK!4P@iDGMCc?$sVSnJfBP0DjLvVA++ajCBefoXDSQ!ZaC7Th( z$l;m6KBwhxQ!W2PmD&ugttlbXnny?`?j>8C8TX6!b(u+4XEKh0^)a`E>ov{MH?>LD zLG$cQ?bQnGcyu}X5||=M-V|%UHP`;Cr5e&k?m*#NT4;z_YOS-dS?zbtU&db33M|X! z%HOs6h3q~Fy#2ejC&WB`ie=*Sl6vjHtGBh81@~F=p})0Cg_1JS-OC*QxAs=``+Km= z3OTEBM8b`+94O6(ceG#X+1yrHD32r=J|2qFnFC2I7xwYXlVLWxtEB{YEpzEzE$o5q z&V2i>cFg?fp7vz992Qb$Hqx{uLzdBDPWVS_Y`*l5=Bnt53X{>ovO}As=E~?{6*AY} z(+>V0C7U=S%+vp9drA*5=jaPQptw9G7+gG+rFq!A!d>Pkx*k(K z*_&cNNpadl(vz0!RYy1W@-Rc+>P$0F8u}|{>7sfS^XDRZS#xzEy;O0lXY8k@u)vN& zy3-lL6VdGmTvy@>f;VZCe#d#y;y_F6}+Bg641B2+KhD!&cXaDAXd zSVfcsHRM6wK2Vv%LiPIP=qlO#QfTR*4s%ARzP)PF*vwoO4p;uH%x`qFQ!%}1#b7xT zeOzWnaBnalE2d|g6^iSn%y9-SRkFDLu9;gLH-9Rw_qJ30OXxkURA6ffy@J!4q5-Dp zHD{SfIevOvLz@nB*h%whX?s_q z*>2W!>yXPaNzL-a@_Ox{K&{4lg}|cnx-;a#>A9++{&>Ux+jE=wb45M;|II0HekDD% zQdnfLAzj%XId^ARRWM6kG^&{uD(mek^JoKcioNEBxhK(Bbf`DS%&4q4Ft1nEt4pd< z;6!D;zfp<->RWO@UdZrrxyPgXb!1M`MxUd0plj(~ift>_94<&R|`^jZ%@gyqDrTKL zXF1b!>GkBtZ_x$ZWj3RBP>dtdEsx9g(%|uBxs%v&?Wc0kHGvgO7Dtv#DUv=nKdP;F zGEcq5ElTq`dbpUg4lj{17_Ktf%;z7ae`nll^f&5Nkp zfe7`&45u2k^O>7l>c?0p0_m;v)y|5l zu;7kI3z;?B=re?AbsOF1>=38!R4hHs?$1b0Q}Ou^deS=SnJi|($5cwqSL*9kbrNyr zGY7Qteo~S0aE?2&5Ll;QpQ~Y#^=vW4+QSRzvo0&b*n86G#Ds!Z2aV()*DG&JhP65T ztKFo`_SkMm$q$ypYKotIRE+eBlF`vn?r`LkBu5BXIS?g#8p(iZCWjE~i46W``6+jB z9^2xKR7RFOq^gDM@{E=F&d!gGj!KM)>)$_bzU6GR9IMJ$5ABu<_V|nnjBKwD3JK}q z3GC^puM9B~+-bQvfx!>47KO^?B0CI&HPF4Qp609}$4d4b`(omLDF;e9ZuaS_?+#3k z)aw-16TGf8^ZDL-^(vl}6!u5fQKalcQj$BvGr{dM5BJu~H>R$#|EC2T`GG4CYim^J zv~aWYBE5#+dIl;`Z+D6;_p&vrCiqW9+)a47U737)S4clzlIoc&<> zAI~xop*>^-b3baAg^R;%bsSUeMWVnQ2$hqT^$ahk_Nj5KeMP)Uo`_JMNzIG#dgW?V zHJvLU)-S8#@(AQoHxuURc)jC;n@Gh0dNZ|12Ko%pOUh-LJZUoQ&7lMJL58(T1zs7b zzomt^(gN9o_0M#t%k1;8-pzb7is$fk59{H9lMm}FwTk%5nI_o9B&>_a!1Pgiw?fW{ zz?&YumeU+IR$mgxN@YzkBQ9u_G}gpGZLi)`FT^99JaP|8*QYs)u-#kFX69!Z`k2zz z!Kmr|hs{7trhY*$W7o^kUuIVt&sJ`;U5=hy#?I4--E%qn3Hjw5{fWY^Bswc^i`hC? z-yZlbSDzlDF=+#-lk{a)%Dgj0?@}KUSGU$W&OM~e1#9!NmZ9uq&XF>T%`#KSqe+u{@BNku&v58hv99nW;wvSK+{-nR5Sp<%}aw+6As@&3<$B z`b9BpH=sFwE>lSM9t2gJa-*M??P}^ub?3@+eG^{2@G#_ooHGXUSUD9nagA~NptSy< ze3U)F($Z4a($)CBLdoPSZJ9Gl)C#S)ty+@ZE%ohHLB1>ZB{3rzI#O9vIsBrN(#NnS zJ<|5`)2{^DXcT$-IRUtnpL`;e?$o;xV9 zE_``-kwZPtgFM_bv=gFb_lfS|N{sC8YRI$~J6XIhbosmkSw*bwvR7f*hcnCfv!s4=8=0h0N6Ctl(DoU@Je6GZ!q^ zYqn3|K`)ED2DdT%RLeW+WqSc%Z}!di$dJvmkDhUMWA5wMnl~INr^xRIaM$Zqi$Z z_+_VIl6rZE%^AkWT}B!wg+%K;TUK`F7&m!&2nn}dsM%K-1>YZWVQ3#Bf}=t87DuWK z>&i#=DBgDBrKQ@zAzx;W9Flwt(rR1vo+04qt$KfNL#kLOHZzs$7EfB8M&b4iC2Nt~ zXolL02iu)uaQWmbK|Z2Kj9xN9;qGM!b@7j74(dDFc)*5s4}6AdIgqA!$-=B@gW zM(n2Y_LcWq9F3DQv%JE=jiJ)dYH7bza+xXH^oS~H$Hqj(BtjnMii+zOKQJaC+|@5KCczd? z2pi^#jp+x&z;N?}?K;0fI5IvlCUH=YXjk40*P#BcK?#w)qFwQk0~2GS2F1oi4|GK* zN>MCN9Fg4w16BipP4;@^Z^tXL-MMYvOHaavmTD(k*9yBlkpP(eT#6)al z41S7mR9yV9fib;$C%O{+as3lrkmKX}Cq#A^R>~9Okai8sn;#V$+0U{PF616@{rcgY zrL;#F7LW_gmyL;yNz9ucPFsb=#JUpVViH|Fq`jz9r1f}YTkfAYFf!3nml!uN(dEZM zOH;q-{*bYmFeo;WmW4Y!w0E3c1*%9>plEP(6!me%#`U6==@_XV4KpYa>j{>pLh2!H zWx40V8WpqbQ#I07>jdQ!A_7Bq=tsF0nyS0Z4hOVSfo?nX+C|zGTt-;=?%!%KS>z4o zczMj?hdOZ-+Ow7)2#Zw9vbkyua|ZfvQ_{~L6yMf z5A-Jj+tcg71&4hhaHY{O@_yGqoo${%d`eRw~1K(d}}lWsP;SW18-3-0HOZ zPM=lWEc*j5LqE8s&vlwn`?N9*^RG%|n&-J&tRrBlu;`yg&6}`8?PE)T8n<9dGO14Y}3xm~(FH386t*?w4Cs(aRUl z*FiT3rDDMK7x&cp@@M|m+n2IF8)3D!o;$tnK#e>4nD}s9CH>-j;NCwjAAto99XzEvu>v{Qr3IWAfssG4BBP zl{RLFCa?o>B1rXm0v*a2+ngnNxiN{2GZ!MSlFR|Q+`j7NjODzllmTY0DsL>+qj)_X zXj8!$Tj;_0*gxE;9(b#o@l>JUz8rYCj?pP3@LpqMpwm3m(8vf3X<%gQLYVCQAHx3s z3rb>OUsGd#kJ&Bo`mj%u9!u1?3WqJ5KvMJgZw- z0>m&kUAQWzC>99$8VxJ*IBLCxQPuSXzhsFBjrZ_CowpSh`6$mifN?_nZxxnGQNcMx zwJ%2pj;w2}bCo;_Ti3p91bk#6&+L)brz&#as2ZJDXYOF5=X)WKZOkoBLRRz1ExYm` zV}Z~?#wF+dE8eMtjW&VCLyY+b_knVOmW0i~?h!^_p_;M;sw13F&PCR0sP16751E%_ zw5kx3#sSM-E$_3M$C8XGfyiXzct{Dg^zzk!J3G}}JI<&OXqIZ!*UVF1qmcPibE8mY z`_nBRmaKCyO|3Kq(#9FBwNQ69z0@?zo$3j!Pd64AGS+>WX^b8wwb{XEbnP*KZnU3! z^5sr3J?9mZE7flqfCPidtRgD;t_6S>d4v4=OQ z&+IjZ7aE*7nT9t1*lYAQyX`aL9$ey{+h?pbs}$2pHFRgOcy}4=Nz3Z2W-N6a$Q6k7 zcy67_Wob$?U#`f$w=iJ%^PhwQ6^T1=@hMyPFK;&)Pg3{KG3tsZ zxG2a4qMOg%%noOa;|0!$fzVHltdJIi<)dtC)3OGyOFcX%Ch>8!{ebP}i#Ts6UzEt( zGk1ph!skZiib*`)QsD801_zl;jlkQV8>K?bKIe=YftzR9yqep$)ACJ361^->PO_SF zqi$Vz%Wm+m6+ZHU!Kp%h%WMAqrO`!hTFs6Zjjct3O>Ew{Xhf9FW(UfU1x~iGFh1~e gnawX5gUdU7p0t#R|21IgkeLz>)3JTt1J->^0D6AbH~;_u diff --git a/locale/fr/LC_MESSAGES/strings.po b/locale/fr/LC_MESSAGES/strings.po index 1b244263..54f4a236 100644 --- a/locale/fr/LC_MESSAGES/strings.po +++ b/locale/fr/LC_MESSAGES/strings.po @@ -1,12 +1,13 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR ORGANIZATION # FIRST AUTHOR , YEAR. +# Conversion micmac@MicMac.fr Ligne 2000 # msgid "" msgstr "" "Project-Id-Version: \n" -"POT-Creation-Date: 2020-05-03 16:04+0300\n" -"PO-Revision-Date: 2020-05-03 16:06+0300\n" +"POT-Creation-Date: 2020-05-02 23:52+0300\n" +"PO-Revision-Date: 2020-05-11 17:33+0200\n" "Last-Translator: \n" "Language-Team: \n" "Language: fr\n" @@ -14,7 +15,7 @@ msgstr "" "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" +"X-Generator: Poedit 2.3\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Poedit-Basepath: ../../..\n" "X-Poedit-SearchPath-0: .\n" @@ -22,52 +23,50 @@ msgstr "" "X-Poedit-SearchPathExcluded-1: doc\n" "X-Poedit-SearchPathExcluded-2: tests\n" -#: FlatCAMApp.py:491 +#: FlatCAMApp.py:490 msgid "FlatCAM is initializing ..." msgstr "FlatCAM est en cours d'initialisation ..." -#: FlatCAMApp.py:639 +#: FlatCAMApp.py:638 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." +msgstr "Impossible de trouver les fichiers de languages. Fichiers Absent." -#: FlatCAMApp.py:709 +#: FlatCAMApp.py:708 msgid "" "FlatCAM is initializing ...\n" "Canvas initialization started." msgstr "" "FlatCAM est en cours d'initialisation ...\n" -"L'initialisation de la toile a commencé." +"Initialisation du Canevas." -#: FlatCAMApp.py:729 +#: FlatCAMApp.py:728 msgid "" "FlatCAM is initializing ...\n" "Canvas initialization started.\n" "Canvas initialization finished in" msgstr "" "FlatCAM est en cours d'initialisation ...\n" -"L'initialisation de la toile a commencé.\n" -"Initialisation de la toile terminée en" +"Initialisation du Canevas\n" +"Initialisation terminée en" -#: FlatCAMApp.py:1593 FlatCAMApp.py:7451 +#: FlatCAMApp.py:1592 FlatCAMApp.py:7450 msgid "New Project - Not saved" msgstr "Nouveau projet - Non enregistré" -#: FlatCAMApp.py:1689 +#: FlatCAMApp.py:1688 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." +"Anciens fichiers par défaut trouvés. Veuillez redémarrer pour mettre à jour " +"l'application." -#: FlatCAMApp.py:1740 FlatCAMApp.py:2512 FlatCAMApp.py:2547 FlatCAMApp.py:2594 -#: FlatCAMApp.py:4540 FlatCAMApp.py:7535 FlatCAMApp.py:7572 FlatCAMApp.py:7614 -#: FlatCAMApp.py:7643 FlatCAMApp.py:7684 FlatCAMApp.py:7709 FlatCAMApp.py:7761 -#: FlatCAMApp.py:7796 FlatCAMApp.py:7841 FlatCAMApp.py:7882 FlatCAMApp.py:7923 -#: FlatCAMApp.py:7964 FlatCAMApp.py:8005 FlatCAMApp.py:8049 FlatCAMApp.py:8105 -#: FlatCAMApp.py:8137 FlatCAMApp.py:8169 FlatCAMApp.py:8402 FlatCAMApp.py:8440 -#: FlatCAMApp.py:8483 FlatCAMApp.py:8560 FlatCAMApp.py:8615 +#: FlatCAMApp.py:1739 FlatCAMApp.py:2511 FlatCAMApp.py:2546 FlatCAMApp.py:2593 +#: FlatCAMApp.py:4539 FlatCAMApp.py:7534 FlatCAMApp.py:7571 FlatCAMApp.py:7613 +#: FlatCAMApp.py:7642 FlatCAMApp.py:7683 FlatCAMApp.py:7708 FlatCAMApp.py:7760 +#: FlatCAMApp.py:7795 FlatCAMApp.py:7840 FlatCAMApp.py:7881 FlatCAMApp.py:7922 +#: FlatCAMApp.py:7963 FlatCAMApp.py:8004 FlatCAMApp.py:8048 FlatCAMApp.py:8104 +#: FlatCAMApp.py:8136 FlatCAMApp.py:8168 FlatCAMApp.py:8401 FlatCAMApp.py:8439 +#: FlatCAMApp.py:8482 FlatCAMApp.py:8559 FlatCAMApp.py:8614 #: FlatCAMBookmark.py:300 FlatCAMBookmark.py:342 FlatCAMDB.py:663 #: FlatCAMDB.py:709 FlatCAMDB.py:2125 FlatCAMDB.py:2171 #: flatcamEditors/FlatCAMExcEditor.py:1023 @@ -82,122 +81,121 @@ msgstr "" msgid "Cancelled." msgstr "Annulé." -#: FlatCAMApp.py:1756 +#: FlatCAMApp.py:1755 msgid "Open Config file failed." -msgstr "Le fichier de configuration ouvert a échoué." +msgstr "Défaut d'ouverture du fichier de configuration." -#: FlatCAMApp.py:1771 +#: FlatCAMApp.py:1770 msgid "Open Script file failed." -msgstr "Le fichier de script ouvert a échoué." +msgstr "Défaut d'ouverture du fichier Script." -#: FlatCAMApp.py:1797 +#: FlatCAMApp.py:1796 msgid "Open Excellon file failed." -msgstr "Le fichier de Excellon ouvert a échoué." +msgstr "Défaut d'ouverture du fichier Excellon." -#: FlatCAMApp.py:1810 +#: FlatCAMApp.py:1809 msgid "Open GCode file failed." -msgstr "Le fichier de G-code ouvert a échoué." +msgstr "Défaut d'ouverture du fichier G-code." -#: FlatCAMApp.py:1823 +#: FlatCAMApp.py:1822 msgid "Open Gerber file failed." -msgstr "Le fichier de Gerber ouvert a échoué." +msgstr "Défaut d'ouverture du fichier Gerber." -#: FlatCAMApp.py:2131 +#: FlatCAMApp.py:2130 msgid "Select a Geometry, Gerber or Excellon Object to edit." -msgstr "Sélectionnez un objet Geometry, Gerber ou Excellon à modifier." +msgstr "Sélectionnez l'objet, Gerber ou Excellon à modifier." -#: FlatCAMApp.py:2146 +#: FlatCAMApp.py:2145 msgid "" "Simultaneous editing of tools geometry in a MultiGeo Geometry is not " "possible.\n" "Edit only one geometry at a time." msgstr "" -"L'édition simultanée de la géométrie des outils dans une géométrie multi-géo " -"n'est pas possible.\n" +"L'édition simultanée de plusieurs géométrie n'est pas possible.\n" "Modifiez une seule géométrie à la fois." -#: FlatCAMApp.py:2204 +#: FlatCAMApp.py:2203 msgid "Editor is activated ..." -msgstr "L'éditeur est activé ..." +msgstr "Editeur activé ..." -#: FlatCAMApp.py:2225 +#: FlatCAMApp.py:2224 msgid "Do you want to save the edited object?" -msgstr "Voulez-vous enregistrer l'objet édité?" +msgstr "Voulez-vous enregistrer l'objet ?" -#: FlatCAMApp.py:2226 flatcamGUI/FlatCAMGUI.py:2288 +#: FlatCAMApp.py:2225 flatcamGUI/FlatCAMGUI.py:2288 msgid "Close Editor" msgstr "Fermer l'éditeur" -#: FlatCAMApp.py:2229 FlatCAMApp.py:3518 FlatCAMApp.py:6085 FlatCAMApp.py:7345 +#: FlatCAMApp.py:2228 FlatCAMApp.py:3517 FlatCAMApp.py:6084 FlatCAMApp.py:7344 #: FlatCAMTranslation.py:109 FlatCAMTranslation.py:207 #: flatcamGUI/FlatCAMGUI.py:2519 -#: flatcamGUI/preferences/PreferencesUIManager.py:1122 +#: flatcamGUI/preferences/PreferencesUIManager.py:1118 msgid "Yes" msgstr "Oui" -#: FlatCAMApp.py:2230 FlatCAMApp.py:3519 FlatCAMApp.py:6086 FlatCAMApp.py:7346 +#: FlatCAMApp.py:2229 FlatCAMApp.py:3518 FlatCAMApp.py:6085 FlatCAMApp.py:7345 #: FlatCAMTranslation.py:110 FlatCAMTranslation.py:208 #: flatcamGUI/FlatCAMGUI.py:2520 -#: flatcamGUI/preferences/PreferencesUIManager.py:1123 +#: flatcamGUI/preferences/PreferencesUIManager.py:1119 #: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:164 #: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:150 #: flatcamTools/ToolNCC.py:182 flatcamTools/ToolPaint.py:166 msgid "No" msgstr "Non" -#: FlatCAMApp.py:2231 FlatCAMApp.py:3520 FlatCAMApp.py:4478 FlatCAMApp.py:5103 -#: FlatCAMApp.py:7347 FlatCAMDB.py:128 FlatCAMDB.py:1689 +#: FlatCAMApp.py:2230 FlatCAMApp.py:3519 FlatCAMApp.py:4477 FlatCAMApp.py:5102 +#: FlatCAMApp.py:7346 FlatCAMDB.py:128 FlatCAMDB.py:1689 #: flatcamGUI/FlatCAMGUI.py:1347 msgid "Cancel" msgstr "Annuler" -#: FlatCAMApp.py:2263 +#: FlatCAMApp.py:2262 msgid "Object empty after edit." msgstr "Objet vide après édition." -#: FlatCAMApp.py:2267 FlatCAMApp.py:2288 FlatCAMApp.py:2310 +#: FlatCAMApp.py:2266 FlatCAMApp.py:2287 FlatCAMApp.py:2309 msgid "Editor exited. Editor content saved." -msgstr "L'éditeur est sorti. Contenu de l'éditeur enregistré." +msgstr "Sortie de l'éditeur. Contenu enregistré." -#: FlatCAMApp.py:2314 FlatCAMApp.py:2337 FlatCAMApp.py:2355 +#: FlatCAMApp.py:2313 FlatCAMApp.py:2336 FlatCAMApp.py:2354 msgid "Select a Gerber, Geometry or Excellon Object to update." -msgstr "Sélectionnez un objet Gerber, Geometry ou Excellon à mettre à jour." +msgstr "Sélectionnez l'objet Géométrie, Gerber, ou Excellon à mettre à jour." -#: FlatCAMApp.py:2317 +#: FlatCAMApp.py:2316 msgid "is updated, returning to App..." -msgstr "est mis à jour, revenant à l'App ..." +msgstr "est mis à jour, Retour au programme..." -#: FlatCAMApp.py:2324 +#: FlatCAMApp.py:2323 msgid "Editor exited. Editor content was not saved." -msgstr "L'éditeur est sorti. Le contenu de l'éditeur n'a pas été enregistré." +msgstr "Sortie de l'editeur. Contenu non enregistré." -#: FlatCAMApp.py:2504 FlatCAMApp.py:2508 +#: FlatCAMApp.py:2503 FlatCAMApp.py:2507 msgid "Import FlatCAM Preferences" -msgstr "Importer les préférences FlatCAM" +msgstr "Importer les paramètres FlatCAM" -#: FlatCAMApp.py:2519 +#: FlatCAMApp.py:2518 msgid "Imported Defaults from" msgstr "Valeurs par défaut importées de" -#: FlatCAMApp.py:2539 FlatCAMApp.py:2544 +#: FlatCAMApp.py:2538 FlatCAMApp.py:2543 msgid "Export FlatCAM Preferences" -msgstr "Exporter les préférences FlatCAM" +msgstr "Exporter les paramètres FlatCAM" -#: FlatCAMApp.py:2558 FlatCAMApp.py:2626 -#: flatcamGUI/preferences/PreferencesUIManager.py:1018 +#: FlatCAMApp.py:2557 FlatCAMApp.py:2625 +#: flatcamGUI/preferences/PreferencesUIManager.py:1014 msgid "Failed to write defaults to file." -msgstr "Échec d'écriture par défaut dans le fichier." +msgstr "Échec d'écriture du fichier." -#: FlatCAMApp.py:2564 +#: FlatCAMApp.py:2563 msgid "Exported preferences to" -msgstr "Préférences exportées vers" +msgstr "Paramètres exportées vers" -#: FlatCAMApp.py:2584 FlatCAMApp.py:2589 +#: FlatCAMApp.py:2583 FlatCAMApp.py:2588 msgid "Save to file" msgstr "Enregistrer dans un fichier" -#: FlatCAMApp.py:2602 FlatCAMApp.py:8859 FlatCAMApp.py:8907 FlatCAMApp.py:9032 -#: FlatCAMApp.py:9168 FlatCAMBookmark.py:308 FlatCAMDB.py:671 FlatCAMDB.py:2133 +#: FlatCAMApp.py:2601 FlatCAMApp.py:8858 FlatCAMApp.py:8906 FlatCAMApp.py:9031 +#: FlatCAMApp.py:9167 FlatCAMBookmark.py:308 FlatCAMDB.py:671 FlatCAMDB.py:2133 #: flatcamEditors/FlatCAMTextEditor.py:276 flatcamObjects/FlatCAMCNCJob.py:959 #: flatcamTools/ToolFilm.py:1031 flatcamTools/ToolFilm.py:1212 #: flatcamTools/ToolSolderPaste.py:1534 @@ -205,71 +203,70 @@ msgid "" "Permission denied, saving not possible.\n" "Most likely another app is holding the file open and not accessible." msgstr "" -"Autorisation refusée, économie impossible.\n" -"Très probablement, une autre application tient le fichier ouvert et n'est " -"pas accessible." +"Autorisation refusée, Sauvegarde impossible.\n" +"Fichier ouvert dans une autre application. Fermé le fichier." -#: FlatCAMApp.py:2613 +#: FlatCAMApp.py:2612 msgid "Could not load the file." -msgstr "Impossible de charger le fichier." +msgstr "Chargement du fichier Impossible." -#: FlatCAMApp.py:2629 +#: FlatCAMApp.py:2628 msgid "Exported file to" msgstr "Fichier exporté vers" -#: FlatCAMApp.py:2712 +#: FlatCAMApp.py:2711 msgid "Failed to open recent files file for writing." -msgstr "Échec d'ouverture du fichier récent en écriture." +msgstr "Échec d'ouverture du fichier en écriture." -#: FlatCAMApp.py:2723 +#: FlatCAMApp.py:2722 msgid "Failed to open recent projects file for writing." -msgstr "Échec d'ouverture du fichier de projets récents en écriture." +msgstr "Échec d'ouverture des fichiers de projets en écriture." -#: FlatCAMApp.py:2806 FlatCAMApp.py:9377 FlatCAMApp.py:9441 FlatCAMApp.py:9572 -#: FlatCAMApp.py:9637 FlatCAMApp.py:10287 +#: FlatCAMApp.py:2805 FlatCAMApp.py:9376 FlatCAMApp.py:9440 FlatCAMApp.py:9571 +#: FlatCAMApp.py:9636 FlatCAMApp.py:10286 #: flatcamEditors/FlatCAMGrbEditor.py:4364 -#: flatcamObjects/FlatCAMGeometry.py:1725 flatcamParsers/ParseExcellon.py:897 +#: flatcamObjects/FlatCAMGeometry.py:1697 flatcamParsers/ParseExcellon.py:897 #: flatcamTools/ToolPcbWizard.py:432 msgid "An internal error has occurred. See shell.\n" msgstr "Une erreur interne s'est produite. Voir shell.\n" -#: FlatCAMApp.py:2807 +#: FlatCAMApp.py:2806 #, python-brace-format msgid "" "Object ({kind}) failed because: {error} \n" "\n" msgstr "L'objet ({kind}) a échoué car: {error}\n" -#: FlatCAMApp.py:2822 +#: FlatCAMApp.py:2821 msgid "Converting units to " -msgstr "Conversion d'unités en " +msgstr "Conversion de l'unités en " -#: FlatCAMApp.py:2931 +#: FlatCAMApp.py:2930 msgid "CREATE A NEW FLATCAM TCL SCRIPT" msgstr "CRÉER UN NOUVEAU SCRIPT FLATCAM TCL" -#: FlatCAMApp.py:2932 +#: FlatCAMApp.py:2931 msgid "TCL Tutorial is here" msgstr "Le didacticiel TCL est ici" -#: FlatCAMApp.py:2934 +#: FlatCAMApp.py:2933 msgid "FlatCAM commands list" msgstr "Liste des commandes FlatCAM" -#: FlatCAMApp.py:2935 +#: FlatCAMApp.py:2934 msgid "" "Type >help< followed by Run Code for a list of FlatCAM Tcl Commands " "(displayed in Tcl Shell)." msgstr "" -"Tapez >help< suivi de Run Code pour une liste des commandes FlatCAM Tcl " +"Tapez >help< suivi du Run Code pour lister les commandes FlatCAM Tcl " "(affichées dans Tcl Shell)." -#: FlatCAMApp.py:2982 FlatCAMApp.py:2988 FlatCAMApp.py:2994 FlatCAMApp.py:3000 -#: FlatCAMApp.py:3006 FlatCAMApp.py:3012 +#: FlatCAMApp.py:2981 FlatCAMApp.py:2987 FlatCAMApp.py:2993 FlatCAMApp.py:2999 +#: FlatCAMApp.py:3005 FlatCAMApp.py:3011 msgid "created/selected" -msgstr "créé / sélectionné" +msgstr "créé/sélectionné" -#: FlatCAMApp.py:3027 FlatCAMApp.py:5189 flatcamObjects/FlatCAMObj.py:248 +#: FlatCAMApp.py:3026 FlatCAMApp.py:5188 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 @@ -277,35 +274,35 @@ msgstr "créé / sélectionné" msgid "Plotting" msgstr "Traçage" -#: FlatCAMApp.py:3090 flatcamGUI/FlatCAMGUI.py:545 +#: FlatCAMApp.py:3089 flatcamGUI/FlatCAMGUI.py:545 msgid "About FlatCAM" msgstr "À propos de FlatCAM" -#: FlatCAMApp.py:3116 +#: FlatCAMApp.py:3115 msgid "2D Computer-Aided Printed Circuit Board Manufacturing" -msgstr "Fabrication de cartes de circuits imprimés 2D assistées par ordinateur" +msgstr "Fabrication de dessin de circuits imprimés 2D assistées par ordinateur" -#: FlatCAMApp.py:3117 +#: FlatCAMApp.py:3116 msgid "Development" msgstr "Développement" -#: FlatCAMApp.py:3118 +#: FlatCAMApp.py:3117 msgid "DOWNLOAD" msgstr "TÉLÉCHARGER" -#: FlatCAMApp.py:3119 +#: FlatCAMApp.py:3118 msgid "Issue tracker" msgstr "Traqueur d'incidents" -#: FlatCAMApp.py:3123 FlatCAMApp.py:3484 flatcamGUI/GUIElements.py:2583 +#: FlatCAMApp.py:3122 FlatCAMApp.py:3483 flatcamGUI/GUIElements.py:2583 msgid "Close" -msgstr "Proche" +msgstr "Fermé" -#: FlatCAMApp.py:3138 +#: FlatCAMApp.py:3137 msgid "Licensed under the MIT license" msgstr "Sous licence MIT" -#: FlatCAMApp.py:3147 +#: FlatCAMApp.py:3146 msgid "" "Permission is hereby granted, free of charge, to any person obtaining a " "copy\n" @@ -331,33 +328,34 @@ msgid "" "THE SOFTWARE." msgstr "" "Par la présente, une autorisation est accordée gratuitement à toute personne " -"qui en obtient une copie.\n" -"de ce logiciel et des fichiers de documentation associés (le \"Logiciel\"), " -"pour traiter\n" -"dans le logiciel sans restriction, y compris, sans limitation, les droits\n" -"utiliser, copier, modifier, fusionner, publier, distribuer, concéder en sous-" -"licence et / ou vendre\n" -"copies du logiciel, et pour permettre aux personnes à qui le logiciel est\n" -" meublé pour le faire, sous réserve des conditions suivantes:\n" +"qui obtient une copie.\n" +"de ce logiciel et des fichiers de documentation associés pour fonctionner\n" +"Le logiciel est sans restriction ni limitation.\n" +"Utiliser, copier, modifier, fusionner, publier, distribuer, concéder en sous-" +"licence et/ou vendre copies du logiciel,\n" +"permettre aux personnes à qui le logiciel est utile\n" +" devra ce faire sous réserve des conditions suivantes:\n" "\n" "L'avis de copyright ci-dessus et cet avis de permission doivent être inclus " "dans\n" -"toutes les copies ou parties substantielles du logiciel.\n" +"toutes copies intégrales ou partielles du logiciel.\n" "\n" -"LE LOGICIEL EST FOURNI \"TEL QUEL\", SANS AUCUNE GARANTIE, EXPRESSE OU\n" -"IMPLICITE, Y COMPRIS, MAIS SANS S'Y LIMITER, LES GARANTIES DE QUALITÉ " -"MARCHANDE,\n" -"APTITUDE À UN USAGE PARTICULIER ET À L’ABSENCE DE VIOLATION. EN AUCUN CAS, " -"LE\n" -"LES AUTEURS OU LES TITULAIRES DE COPYRIGHT SONT RESPONSABLES DE TOUTE " -"RÉCLAMATION, DE DOMMAGES OU D'AUTRES\n" -"RESPONSABILITÉ, QU'IL SOIT DANS UN ACTION DE CONTRAT, DE TORT OU AUTREMENT, " -"RÉSULTANT DE,\n" -"HORS OU EN LIEN AVEC LE LOGICIEL OU L’UTILISATION OU D’AUTRES TRANSACTIONS " -"DANS\n" -"LES LOGICIELS." +"\n" +"\n" +"LE LOGICIEL EST FOURNI «TEL QUEL», SANS GARANTIE D'AUCUNE SORTE, EXPRESSE OU " +"IMPLICITE, \n" +"MAIS SANS LIMITER LES GARANTIES DE QUALITÉ MARCHANDE, ADAPTER À USAGE DES " +"PARTICULIERS \n" +"SANS CONTREFAÇON. \n" +"EN AUCUN CAS LES AUTEURS OU LES DÉTENTEURS DE DROITS D'AUTEUR NE SERONT " +"RESPONSABLES \n" +"DE TOUTES RÉCLAMATIONS, DOMMAGES OU AUTRES RESPONSABILITÉS, QUE CE SOIT DANS " +"UNE \n" +"ACTION CONTRACTUELLE, OU AUTRE, DÉCOULANT DU LOGICIEL, DE SONT UTILISATION " +"OU \n" +"D'AUTRES OPÉRATIONS DANS LE LOGICIEL.LES LOGICIELS." -#: FlatCAMApp.py:3169 +#: FlatCAMApp.py:3168 msgid "" "Some of the icons used are from the following sources:

Icônes de " "oNline Web Fonts" -#: FlatCAMApp.py:3202 +#: FlatCAMApp.py:3201 msgid "Splash" -msgstr "Éclaboussure" +msgstr "A Propos" -#: FlatCAMApp.py:3208 +#: FlatCAMApp.py:3207 msgid "Programmers" msgstr "Programmeurs" -#: FlatCAMApp.py:3214 +#: FlatCAMApp.py:3213 msgid "Translators" msgstr "Traducteurs" -#: FlatCAMApp.py:3220 +#: FlatCAMApp.py:3219 msgid "License" msgstr "Licence" -#: FlatCAMApp.py:3226 +#: FlatCAMApp.py:3225 msgid "Attributions" msgstr "Attributions" -#: FlatCAMApp.py:3249 +#: FlatCAMApp.py:3248 msgid "Programmer" msgstr "Programmeur" -#: FlatCAMApp.py:3250 +#: FlatCAMApp.py:3249 msgid "Status" msgstr "Statut" -#: FlatCAMApp.py:3251 FlatCAMApp.py:3331 +#: FlatCAMApp.py:3250 FlatCAMApp.py:3330 msgid "E-mail" msgstr "Email" -#: FlatCAMApp.py:3259 +#: FlatCAMApp.py:3258 msgid "BETA Maintainer >= 2019" msgstr "Mainteneur BETA> = 2019" -#: FlatCAMApp.py:3328 +#: FlatCAMApp.py:3327 msgid "Language" -msgstr "La langue" +msgstr "Langue" -#: FlatCAMApp.py:3329 +#: FlatCAMApp.py:3328 msgid "Translator" msgstr "Traducteur" -#: FlatCAMApp.py:3330 +#: FlatCAMApp.py:3329 msgid "Corrections" -msgstr "Les corrections" +msgstr "Corrections" -#: FlatCAMApp.py:3455 FlatCAMApp.py:3464 flatcamGUI/FlatCAMGUI.py:527 +#: FlatCAMApp.py:3454 FlatCAMApp.py:3463 flatcamGUI/FlatCAMGUI.py:527 msgid "Bookmarks Manager" msgstr "Gestionnaire de favoris" -#: FlatCAMApp.py:3475 +#: FlatCAMApp.py:3474 msgid "" "This entry will resolve to another website if:\n" "\n" @@ -436,55 +434,52 @@ msgid "" "If you can't get any informations about FlatCAM beta\n" "use the YouTube channel link from the Help menu." msgstr "" -"Cette entrée sera résolue sur un autre site Web si:\n" +"Cette entrée sera dirigé vers un autre site Web si:\n" "\n" "1. Le site FlatCAM.org est en panne\n" -"2. Quelqu'un a projeté FlatCAM et veut pointer\n" -"sur son propre site web\n" +"2. Détournement d'URL\n" "\n" "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:3482 +#: FlatCAMApp.py:3481 msgid "Alternative website" msgstr "Site alternatif" -#: FlatCAMApp.py:3508 flatcamGUI/FlatCAMGUI.py:4267 +#: FlatCAMApp.py:3507 flatcamGUI/FlatCAMGUI.py:4244 msgid "Application is saving the project. Please wait ..." -msgstr "L'application enregistre le projet. S'il vous plaît, attendez ..." +msgstr "Enregistrement du projet. Attendez ..." -#: FlatCAMApp.py:3513 FlatCAMTranslation.py:202 +#: FlatCAMApp.py:3512 FlatCAMTranslation.py:202 msgid "" "There are files/objects modified in FlatCAM. \n" "Do you want to Save the project?" msgstr "" -"Il y a des fichiers / objets modifiés dans FlatCAM.\n" +"Il y a eu des modifications dans FlatCAM.\n" "Voulez-vous enregistrer le projet?" -#: FlatCAMApp.py:3516 FlatCAMApp.py:7343 FlatCAMTranslation.py:205 +#: FlatCAMApp.py:3515 FlatCAMApp.py:7342 FlatCAMTranslation.py:205 msgid "Save changes" msgstr "Sauvegarder les modifications" -#: FlatCAMApp.py:3778 +#: FlatCAMApp.py:3777 msgid "Selected Excellon file extensions registered with FlatCAM." -msgstr "" -"Extensions de fichier Excellon sélectionnées enregistrées avec FlatCAM." +msgstr "Extensions de fichier Excellon sélectionnées enregistrées." -#: FlatCAMApp.py:3800 +#: FlatCAMApp.py:3799 msgid "Selected GCode file extensions registered with FlatCAM." -msgstr "Extensions de fichier GCode sélectionnées enregistrées avec FlatCAM." +msgstr "Extensions de fichier GCode sélectionnées enregistrées." -#: FlatCAMApp.py:3822 +#: FlatCAMApp.py:3821 msgid "Selected Gerber file extensions registered with FlatCAM." -msgstr "Extensions de fichiers Gerber sélectionnées enregistrées avec FlatCAM." +msgstr "Extensions de fichiers Gerber sélectionnées enregistrées." -#: FlatCAMApp.py:4010 FlatCAMApp.py:4069 FlatCAMApp.py:4097 +#: FlatCAMApp.py:4009 FlatCAMApp.py:4068 FlatCAMApp.py:4096 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" +"Deux objets sont requis pour etre joint. Objets actuellement sélectionnés" -#: FlatCAMApp.py:4019 +#: FlatCAMApp.py:4018 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 " @@ -493,80 +488,80 @@ msgid "" "be lost and the result may not be what was expected. \n" "Check the generated GCODE." msgstr "" -"Échec de la participation Les objets de géométrie sont de types différents.\n" -"Au moins un est de type MultiGeo et l'autre de type SingleGeo. Une " -"possibilité est de convertir de l'un à l'autre et réessayer de rejoindre\n" -"mais dans le cas d'une conversion de MultiGeo en SingleGeo, des informations " -"risquent d'être perdues et le résultat risque d'être différent de celui " -"attendu.\n" +"Échec de la fonction. Les objets de géométrie sont de types différents.\n" +"Au moins un est de type MultiGeo et l'autre de type SingleGeo. \n" +"Une des possibilité est de les convertir et de réessayer\n" +"Attention, dans une conversion de MultiGeo vers SingleGeo, \n" +"des informations risquent d'être perdues et le résultat risque d'être " +"inattendu \n" "Vérifiez le GCODE généré." -#: FlatCAMApp.py:4031 FlatCAMApp.py:4041 +#: FlatCAMApp.py:4030 FlatCAMApp.py:4040 msgid "Geometry merging finished" msgstr "Fusion de la géométrie terminée" -#: FlatCAMApp.py:4064 +#: FlatCAMApp.py:4063 msgid "Failed. Excellon joining works only on Excellon objects." -msgstr "Échoué. Excellon rejoindre ne travaille que sur des objets Excellon." +msgstr "Érreur. Excellon ne travaille que sur des objets Excellon." -#: FlatCAMApp.py:4074 +#: FlatCAMApp.py:4073 msgid "Excellon merging finished" -msgstr "Fusion de la Excellon terminée" +msgstr "Fusion Excellon terminée" -#: FlatCAMApp.py:4092 +#: FlatCAMApp.py:4091 msgid "Failed. Gerber joining works only on Gerber objects." -msgstr "Échoué. La jonction de Gerber ne fonctionne que sur des objets Gerber." +msgstr "Érreur. Les jonctions Gerber ne fonctionne que sur des objets Gerber." -#: FlatCAMApp.py:4102 +#: FlatCAMApp.py:4101 msgid "Gerber merging finished" -msgstr "Fusion de Gerber terminée" +msgstr "Fusion Gerber terminée" -#: FlatCAMApp.py:4122 FlatCAMApp.py:4159 +#: FlatCAMApp.py:4121 FlatCAMApp.py:4158 msgid "Failed. Select a Geometry Object and try again." -msgstr "Échoué. Sélectionnez un objet de géométrie et réessayez." +msgstr "Érreur. Sélectionnez un objet de géométrie et réessayez." -#: FlatCAMApp.py:4126 FlatCAMApp.py:4164 +#: FlatCAMApp.py:4125 FlatCAMApp.py:4163 msgid "Expected a GeometryObject, got" -msgstr "Échoué. Sélectionnez un objet de géométrie et réessayez" +msgstr "Érreur. Sélectionnez un objet de géométrie et réessayez" -#: FlatCAMApp.py:4141 +#: FlatCAMApp.py:4140 msgid "A Geometry object was converted to MultiGeo type." -msgstr "Un objet Geometry a été converti en type MultiGeo." +msgstr "Un objet Géométrie a été converti au format MultiGeo." -#: FlatCAMApp.py:4179 +#: FlatCAMApp.py:4178 msgid "A Geometry object was converted to SingleGeo type." -msgstr "Un objet Geometry a été converti en type SingleGeo." +msgstr "L'objet Géométrie a été converti au format SingleGeo." -#: FlatCAMApp.py:4472 +#: FlatCAMApp.py:4471 msgid "Toggle Units" -msgstr "Basculer les Unités" +msgstr "Changement d'unités" -#: FlatCAMApp.py:4474 +#: FlatCAMApp.py:4473 msgid "" "Changing the units of the project\n" "will scale all objects.\n" "\n" "Do you want to continue?" msgstr "" -"Changer les unités du projet\n" +"Le changement d'unités\n" "mettra à l'échelle tous les objets.\n" "\n" "Voulez-vous continuer?" -#: FlatCAMApp.py:4477 FlatCAMApp.py:5025 FlatCAMApp.py:5102 FlatCAMApp.py:7728 -#: FlatCAMApp.py:7742 FlatCAMApp.py:8075 FlatCAMApp.py:8085 +#: FlatCAMApp.py:4476 FlatCAMApp.py:5024 FlatCAMApp.py:5101 FlatCAMApp.py:7727 +#: FlatCAMApp.py:7741 FlatCAMApp.py:8074 FlatCAMApp.py:8084 msgid "Ok" msgstr "D'accord" -#: FlatCAMApp.py:4526 +#: FlatCAMApp.py:4525 msgid "Converted units to" msgstr "Unités converties en" -#: FlatCAMApp.py:4928 +#: FlatCAMApp.py:4927 msgid "Detachable Tabs" msgstr "Onglets détachables" -#: FlatCAMApp.py:5014 flatcamTools/ToolNCC.py:932 flatcamTools/ToolNCC.py:1431 +#: FlatCAMApp.py:5013 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." @@ -574,24 +569,24 @@ msgstr "" "Veuillez saisir un diamètre d’outil avec une valeur non nulle, au format " "réel." -#: FlatCAMApp.py:5018 flatcamTools/ToolNCC.py:936 flatcamTools/ToolPaint.py:862 +#: FlatCAMApp.py:5017 flatcamTools/ToolNCC.py:936 flatcamTools/ToolPaint.py:862 #: flatcamTools/ToolSolderPaste.py:572 msgid "Adding Tool cancelled" -msgstr "Outil d'ajout annulé" +msgstr "Ajout d'outil annulé" -#: FlatCAMApp.py:5021 +#: FlatCAMApp.py:5020 msgid "" "Adding Tool works only when Advanced is checked.\n" "Go to Preferences -> General - Show Advanced Options." 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." +"Allez dans Paramètres -> Général - Afficher les options avancées." -#: FlatCAMApp.py:5097 +#: FlatCAMApp.py:5096 msgid "Delete objects" msgstr "Supprimer des objets" -#: FlatCAMApp.py:5100 +#: FlatCAMApp.py:5099 msgid "" "Are you sure you want to permanently delete\n" "the selected objects?" @@ -599,55 +594,55 @@ msgstr "" "Êtes-vous sûr de vouloir supprimer définitivement\n" "les objets sélectionnés?" -#: FlatCAMApp.py:5138 +#: FlatCAMApp.py:5137 msgid "Object(s) deleted" -msgstr "Objet (s) supprimé (s)" +msgstr "Objets supprimés" -#: FlatCAMApp.py:5142 FlatCAMApp.py:5297 flatcamTools/ToolDblSided.py:818 +#: FlatCAMApp.py:5141 FlatCAMApp.py:5296 flatcamTools/ToolDblSided.py:818 msgid "Failed. No object(s) selected..." -msgstr "Échoué. Aucun objet sélectionné ..." +msgstr "Érreur. Aucun objet sélectionné ..." -#: FlatCAMApp.py:5144 +#: FlatCAMApp.py:5143 msgid "Save the work in Editor and try again ..." -msgstr "Enregistrez le travail dans l'éditeur et réessayez ..." +msgstr "Enregistrez le travail de l'éditeur et réessayez ..." -#: FlatCAMApp.py:5173 +#: FlatCAMApp.py:5172 msgid "Object deleted" msgstr "Objet supprimé" -#: FlatCAMApp.py:5200 +#: FlatCAMApp.py:5199 msgid "Click to set the origin ..." msgstr "Cliquez pour définir l'origine ..." -#: FlatCAMApp.py:5222 +#: FlatCAMApp.py:5221 msgid "Setting Origin..." msgstr "Réglage de l'Origine ..." -#: FlatCAMApp.py:5235 FlatCAMApp.py:5337 +#: FlatCAMApp.py:5234 FlatCAMApp.py:5336 msgid "Origin set" -msgstr "Ensemble d'origine" +msgstr "Réglage de l'origine effectué" -#: FlatCAMApp.py:5252 +#: FlatCAMApp.py:5251 msgid "Origin coordinates specified but incomplete." msgstr "Coordonnées d'origine spécifiées mais incomplètes." -#: FlatCAMApp.py:5293 +#: FlatCAMApp.py:5292 msgid "Moving to Origin..." msgstr "Déplacement vers l'origine ..." -#: FlatCAMApp.py:5374 +#: FlatCAMApp.py:5373 msgid "Jump to ..." msgstr "Sauter à ..." -#: FlatCAMApp.py:5375 +#: FlatCAMApp.py:5374 msgid "Enter the coordinates in format X,Y:" msgstr "Entrez les coordonnées au format X, Y:" -#: FlatCAMApp.py:5385 +#: FlatCAMApp.py:5384 msgid "Wrong coordinates. Enter coordinates in format: X,Y" msgstr "Mauvaises coordonnées. Entrez les coordonnées au format: X, Y" -#: FlatCAMApp.py:5463 FlatCAMApp.py:5612 +#: FlatCAMApp.py:5462 FlatCAMApp.py:5611 #: flatcamEditors/FlatCAMExcEditor.py:3624 #: flatcamEditors/FlatCAMExcEditor.py:3632 #: flatcamEditors/FlatCAMGeoEditor.py:4349 @@ -663,179 +658,174 @@ msgstr "Mauvaises coordonnées. Entrez les coordonnées au format: X, Y" msgid "Done." msgstr "Terminé." -#: FlatCAMApp.py:5478 FlatCAMApp.py:7724 FlatCAMApp.py:7819 FlatCAMApp.py:7860 -#: FlatCAMApp.py:7901 FlatCAMApp.py:7942 FlatCAMApp.py:7983 FlatCAMApp.py:8027 -#: FlatCAMApp.py:8071 FlatCAMApp.py:8593 FlatCAMApp.py:8597 +#: FlatCAMApp.py:5477 FlatCAMApp.py:7723 FlatCAMApp.py:7818 FlatCAMApp.py:7859 +#: FlatCAMApp.py:7900 FlatCAMApp.py:7941 FlatCAMApp.py:7982 FlatCAMApp.py:8026 +#: FlatCAMApp.py:8070 FlatCAMApp.py:8592 FlatCAMApp.py:8596 #: flatcamTools/ToolProperties.py:116 msgid "No object selected." msgstr "Aucun objet sélectionné." -#: FlatCAMApp.py:5497 +#: FlatCAMApp.py:5496 msgid "Bottom-Left" msgstr "En bas à gauche" -#: FlatCAMApp.py:5498 flatcamGUI/preferences/tools/Tools2CalPrefGroupUI.py:131 +#: FlatCAMApp.py:5497 flatcamGUI/preferences/tools/Tools2CalPrefGroupUI.py:131 #: flatcamTools/ToolCalibration.py:159 msgid "Top-Left" msgstr "En haut à gauche" -#: FlatCAMApp.py:5499 flatcamGUI/preferences/tools/Tools2CalPrefGroupUI.py:132 +#: FlatCAMApp.py:5498 flatcamGUI/preferences/tools/Tools2CalPrefGroupUI.py:132 #: flatcamTools/ToolCalibration.py:160 msgid "Bottom-Right" msgstr "En bas à droite" -#: FlatCAMApp.py:5500 +#: FlatCAMApp.py:5499 msgid "Top-Right" msgstr "En haut à droite" -#: FlatCAMApp.py:5501 flatcamGUI/ObjectUI.py:2706 +#: FlatCAMApp.py:5500 flatcamGUI/ObjectUI.py:2626 msgid "Center" msgstr "Centre" -#: FlatCAMApp.py:5521 +#: FlatCAMApp.py:5520 msgid "Locate ..." msgstr "Localiser ..." -#: FlatCAMApp.py:5779 FlatCAMApp.py:5856 +#: FlatCAMApp.py:5778 FlatCAMApp.py:5855 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:5882 +#: FlatCAMApp.py:5881 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 ..." +msgstr "Abandon de la tâche en cours si possible ..." -#: FlatCAMApp.py:5888 +#: FlatCAMApp.py:5887 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 ..." +"La tâche en cours a été fermée avec succès à la demande de l'utilisateur ..." -#: FlatCAMApp.py:5916 flatcamGUI/preferences/PreferencesUIManager.py:905 -#: flatcamGUI/preferences/PreferencesUIManager.py:949 -#: flatcamGUI/preferences/PreferencesUIManager.py:970 -#: flatcamGUI/preferences/PreferencesUIManager.py:1075 +#: FlatCAMApp.py:5915 flatcamGUI/preferences/PreferencesUIManager.py:901 +#: flatcamGUI/preferences/PreferencesUIManager.py:945 +#: flatcamGUI/preferences/PreferencesUIManager.py:966 +#: flatcamGUI/preferences/PreferencesUIManager.py:1071 msgid "Preferences" -msgstr "Préférences" +msgstr "Paramètres " -#: FlatCAMApp.py:5981 FlatCAMApp.py:6009 FlatCAMApp.py:6036 FlatCAMApp.py:6056 +#: FlatCAMApp.py:5980 FlatCAMApp.py:6008 FlatCAMApp.py:6035 FlatCAMApp.py:6055 #: FlatCAMDB.py:738 FlatCAMDB.py:913 FlatCAMDB.py:2200 FlatCAMDB.py:2418 -#: flatcamObjects/FlatCAMGeometry.py:890 flatcamTools/ToolNCC.py:3963 -#: flatcamTools/ToolNCC.py:4047 flatcamTools/ToolPaint.py:3553 -#: flatcamTools/ToolPaint.py:3638 +#: 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:6033 +#: FlatCAMApp.py:6032 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." +msgstr "La base de données outils a été modifiés mais pas enregistrés." -#: FlatCAMApp.py:6060 flatcamTools/ToolNCC.py:3970 -#: flatcamTools/ToolPaint.py:3560 +#: FlatCAMApp.py:6059 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." +msgstr "Outil ajouté a base de données." -#: FlatCAMApp.py:6062 +#: FlatCAMApp.py:6061 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:6080 +#: FlatCAMApp.py:6079 msgid "" "One or more Tools are edited.\n" "Do you want to update the Tools Database?" msgstr "" -"Un ou plusieurs outils sont modifiés.\n" -"Voulez-vous mettre à jour la base de données d'outils?" +"Un ou plusieurs outils ont été modifiés.\n" +"Voulez-vous mettre à jour la base de données?" -#: FlatCAMApp.py:6082 +#: FlatCAMApp.py:6081 msgid "Save Tools Database" -msgstr "Enregistrer la base de données d'outils" +msgstr "Enregistrement de la base de données d'outils" -#: FlatCAMApp.py:6135 +#: FlatCAMApp.py:6134 msgid "No object selected to Flip on Y axis." msgstr "Aucun objet sélectionné pour basculer sur l’axe Y." -#: FlatCAMApp.py:6161 +#: FlatCAMApp.py:6160 msgid "Flip on Y axis done." -msgstr "Tournez sur l'axe des Y fait." +msgstr "Rotation sur l'axe des Y effectué." -#: FlatCAMApp.py:6163 FlatCAMApp.py:6211 +#: FlatCAMApp.py:6162 FlatCAMApp.py:6210 #: flatcamEditors/FlatCAMGrbEditor.py:6059 msgid "Flip action was not executed." -msgstr "L'Action de retournement n'a pas été exécutée." +msgstr "La rotation n'a pas été exécutée." -#: FlatCAMApp.py:6183 +#: FlatCAMApp.py:6182 msgid "No object selected to Flip on X axis." msgstr "Aucun objet sélectionné pour basculer sur l’axe X." -#: FlatCAMApp.py:6209 +#: FlatCAMApp.py:6208 msgid "Flip on X axis done." -msgstr "Tournez sur l'axe X fait." +msgstr "Rotation sur l'axe des X effectué." -#: FlatCAMApp.py:6231 +#: FlatCAMApp.py:6230 msgid "No object selected to Rotate." msgstr "Aucun objet sélectionné pour faire pivoter." -#: FlatCAMApp.py:6234 FlatCAMApp.py:6287 FlatCAMApp.py:6326 +#: FlatCAMApp.py:6233 FlatCAMApp.py:6286 FlatCAMApp.py:6325 msgid "Transform" msgstr "Transformer" -#: FlatCAMApp.py:6234 FlatCAMApp.py:6287 FlatCAMApp.py:6326 +#: FlatCAMApp.py:6233 FlatCAMApp.py:6286 FlatCAMApp.py:6325 msgid "Enter the Angle value:" msgstr "Entrez la valeur de l'angle:" -#: FlatCAMApp.py:6265 +#: FlatCAMApp.py:6264 msgid "Rotation done." msgstr "Rotation effectuée." -#: FlatCAMApp.py:6267 +#: FlatCAMApp.py:6266 msgid "Rotation movement was not executed." msgstr "Le mouvement de rotation n'a pas été exécuté." -#: FlatCAMApp.py:6285 +#: FlatCAMApp.py:6284 msgid "No object selected to Skew/Shear on X axis." -msgstr "Aucun objet sélectionné pour incliner / cisailler sur l'axe X." +msgstr "Aucun objet sélectionné pour incliner/cisailler sur l'axe X." -#: FlatCAMApp.py:6307 +#: FlatCAMApp.py:6306 msgid "Skew on X axis done." msgstr "Inclinaison sur l'axe X terminée." -#: FlatCAMApp.py:6324 +#: FlatCAMApp.py:6323 msgid "No object selected to Skew/Shear on Y axis." -msgstr "" -"Aucun objet sélectionné pour incliner / cisailler sur l'axe des ordonnées." +msgstr "Aucun objet sélectionné pour incliner/cisailler sur l'axe Y." -#: FlatCAMApp.py:6346 +#: FlatCAMApp.py:6345 msgid "Skew on Y axis done." -msgstr "Inclinaison sur l'axe des Y faite." +msgstr "Inclinaison sur l'axe des Y effectué." -#: FlatCAMApp.py:6497 FlatCAMApp.py:6544 flatcamGUI/FlatCAMGUI.py:503 +#: FlatCAMApp.py:6496 FlatCAMApp.py:6543 flatcamGUI/FlatCAMGUI.py:503 #: flatcamGUI/FlatCAMGUI.py:1728 msgid "Select All" msgstr "Tout sélectionner" -#: FlatCAMApp.py:6501 FlatCAMApp.py:6548 flatcamGUI/FlatCAMGUI.py:505 +#: FlatCAMApp.py:6500 FlatCAMApp.py:6547 flatcamGUI/FlatCAMGUI.py:505 msgid "Deselect All" -msgstr "Tout déselectionner" +msgstr "Tout désélectionner" -#: FlatCAMApp.py:6564 +#: FlatCAMApp.py:6563 msgid "All objects are selected." msgstr "Tous les objets sont sélectionnés." -#: FlatCAMApp.py:6574 +#: FlatCAMApp.py:6573 msgid "Objects selection is cleared." msgstr "La sélection des objets est effacée." -#: FlatCAMApp.py:6594 flatcamGUI/FlatCAMGUI.py:1721 +#: FlatCAMApp.py:6593 flatcamGUI/FlatCAMGUI.py:1721 msgid "Grid On/Off" msgstr "Grille On/Off" -#: FlatCAMApp.py:6606 flatcamEditors/FlatCAMGeoEditor.py:939 +#: FlatCAMApp.py:6605 flatcamEditors/FlatCAMGeoEditor.py:939 #: flatcamEditors/FlatCAMGrbEditor.py:2583 #: flatcamEditors/FlatCAMGrbEditor.py:5641 flatcamGUI/ObjectUI.py:1595 #: flatcamTools/ToolDblSided.py:192 flatcamTools/ToolDblSided.py:425 @@ -846,72 +836,72 @@ msgstr "Grille On/Off" msgid "Add" msgstr "Ajouter" -#: FlatCAMApp.py:6608 flatcamEditors/FlatCAMGrbEditor.py:2588 +#: FlatCAMApp.py:6607 flatcamEditors/FlatCAMGrbEditor.py:2588 #: flatcamEditors/FlatCAMGrbEditor.py:2736 flatcamGUI/FlatCAMGUI.py:751 #: flatcamGUI/FlatCAMGUI.py:1074 flatcamGUI/FlatCAMGUI.py:2141 #: flatcamGUI/FlatCAMGUI.py:2284 flatcamGUI/FlatCAMGUI.py:2777 -#: flatcamGUI/ObjectUI.py:1623 flatcamObjects/FlatCAMGeometry.py:505 +#: flatcamGUI/ObjectUI.py:1623 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:6624 +#: FlatCAMApp.py:6623 msgid "New Grid ..." msgstr "Nouvelle grille ..." -#: FlatCAMApp.py:6625 +#: FlatCAMApp.py:6624 msgid "Enter a Grid Value:" msgstr "Entrez une valeur de grille:" -#: FlatCAMApp.py:6633 FlatCAMApp.py:6660 +#: FlatCAMApp.py:6632 FlatCAMApp.py:6659 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:6639 +#: FlatCAMApp.py:6638 msgid "New Grid added" msgstr "Nouvelle grille ajoutée" -#: FlatCAMApp.py:6642 +#: FlatCAMApp.py:6641 msgid "Grid already exists" msgstr "La grille existe déjà" -#: FlatCAMApp.py:6645 +#: FlatCAMApp.py:6644 msgid "Adding New Grid cancelled" msgstr "Ajout d'une nouvelle grille annulée" -#: FlatCAMApp.py:6667 +#: FlatCAMApp.py:6666 msgid " Grid Value does not exist" -msgstr " Grid Value does not exist" +msgstr " Valeur de la grille n'existe pas" -#: FlatCAMApp.py:6670 +#: FlatCAMApp.py:6669 msgid "Grid Value deleted" msgstr "Valeur de grille supprimée" -#: FlatCAMApp.py:6673 +#: FlatCAMApp.py:6672 msgid "Delete Grid value cancelled" -msgstr "Supprimer la valeur de grille annulée" +msgstr "Suppression valeur de grille annulée" -#: FlatCAMApp.py:6679 +#: FlatCAMApp.py:6678 msgid "Key Shortcut List" msgstr "Liste de raccourcis clavier" -#: FlatCAMApp.py:6713 +#: FlatCAMApp.py:6712 msgid " No object selected to copy it's name" msgstr " Aucun objet sélectionné pour copier son nom" -#: FlatCAMApp.py:6717 +#: FlatCAMApp.py:6716 msgid "Name copied on clipboard ..." msgstr "Nom copié dans le presse-papiers ..." -#: FlatCAMApp.py:6930 flatcamEditors/FlatCAMGrbEditor.py:4554 +#: FlatCAMApp.py:6929 flatcamEditors/FlatCAMGrbEditor.py:4554 msgid "Coordinates copied to clipboard." msgstr "Coordonnées copiées dans le presse-papier." -#: FlatCAMApp.py:7167 FlatCAMApp.py:7173 FlatCAMApp.py:7179 FlatCAMApp.py:7185 +#: FlatCAMApp.py:7166 FlatCAMApp.py:7172 FlatCAMApp.py:7178 FlatCAMApp.py:7184 #: flatcamObjects/ObjectCollection.py:922 #: flatcamObjects/ObjectCollection.py:928 #: flatcamObjects/ObjectCollection.py:934 @@ -919,380 +909,378 @@ msgstr "Coordonnées copiées dans le presse-papier." #: flatcamObjects/ObjectCollection.py:946 #: flatcamObjects/ObjectCollection.py:952 msgid "selected" -msgstr "choisi" +msgstr "choisir" -#: FlatCAMApp.py:7340 +#: FlatCAMApp.py:7339 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 "" -"Il y a des fichiers / objets ouverts dans FlatCAM.\n" +"Fichiers ou objets ouverts dans FlatCAM.\n" "La création d'un nouveau projet les supprimera.\n" "Voulez-vous enregistrer le projet?" -#: FlatCAMApp.py:7361 +#: FlatCAMApp.py:7360 msgid "New Project created" -msgstr "Nouveau projet créé" +msgstr "Nouveau projet" -#: FlatCAMApp.py:7519 FlatCAMApp.py:7523 flatcamGUI/FlatCAMGUI.py:836 +#: FlatCAMApp.py:7518 FlatCAMApp.py:7522 flatcamGUI/FlatCAMGUI.py:836 #: flatcamGUI/FlatCAMGUI.py:2544 msgid "Open Gerber" -msgstr "Gerber ouvert" +msgstr "Ouvrir Gerber" -#: FlatCAMApp.py:7528 FlatCAMApp.py:7565 FlatCAMApp.py:7607 FlatCAMApp.py:7677 -#: FlatCAMApp.py:8462 FlatCAMApp.py:9675 FlatCAMApp.py:9737 +#: FlatCAMApp.py:7527 FlatCAMApp.py:7564 FlatCAMApp.py:7606 FlatCAMApp.py:7676 +#: FlatCAMApp.py:8461 FlatCAMApp.py:9674 FlatCAMApp.py:9736 msgid "" "Canvas initialization started.\n" "Canvas initialization finished in" msgstr "" -"L'initialisation de la toile a commencé.\n" -"Initialisation de la toile terminée en" +"Initialisation du canevas commencé.\n" +"Initialisation du canevas terminée en" -#: FlatCAMApp.py:7530 +#: FlatCAMApp.py:7529 msgid "Opening Gerber file." msgstr "Ouvrir le fichier Gerber." -#: FlatCAMApp.py:7557 FlatCAMApp.py:7561 flatcamGUI/FlatCAMGUI.py:838 +#: FlatCAMApp.py:7556 FlatCAMApp.py:7560 flatcamGUI/FlatCAMGUI.py:838 #: flatcamGUI/FlatCAMGUI.py:2546 msgid "Open Excellon" -msgstr "Excellon ouvert" +msgstr "Ouvrir Excellon" -#: FlatCAMApp.py:7567 +#: FlatCAMApp.py:7566 msgid "Opening Excellon file." msgstr "Ouverture du fichier Excellon." -#: FlatCAMApp.py:7598 FlatCAMApp.py:7602 +#: FlatCAMApp.py:7597 FlatCAMApp.py:7601 msgid "Open G-Code" -msgstr "G-code ouvert" +msgstr "Ouvrir G-code" -#: FlatCAMApp.py:7609 +#: FlatCAMApp.py:7608 msgid "Opening G-Code file." msgstr "Ouverture du fichier G-Code." -#: FlatCAMApp.py:7632 FlatCAMApp.py:7635 flatcamGUI/FlatCAMGUI.py:1730 +#: FlatCAMApp.py:7631 FlatCAMApp.py:7634 flatcamGUI/FlatCAMGUI.py:1730 msgid "Open Project" -msgstr "Projet ouvert" +msgstr "Ouvrir Projet" -#: FlatCAMApp.py:7668 FlatCAMApp.py:7672 +#: FlatCAMApp.py:7667 FlatCAMApp.py:7671 msgid "Open HPGL2" -msgstr "Ouvrir le HPGL2" +msgstr "Ouvrir HPGL2" -#: FlatCAMApp.py:7679 +#: FlatCAMApp.py:7678 msgid "Opening HPGL2 file." -msgstr "Ouvrir le fichier HPGL2." +msgstr "Ouverture de fichier HPGL2." -#: FlatCAMApp.py:7702 FlatCAMApp.py:7705 +#: FlatCAMApp.py:7701 FlatCAMApp.py:7704 msgid "Open Configuration File" -msgstr "Ouvrir le fichier de configuration" +msgstr "Ouvrir Fichier de configuration" -#: FlatCAMApp.py:7725 FlatCAMApp.py:8072 +#: FlatCAMApp.py:7724 FlatCAMApp.py:8071 msgid "Please Select a Geometry object to export" -msgstr "Veuillez sélectionner un objet de géométrie à exporter" +msgstr "Sélectionner un objet de géométrie à exporter" -#: FlatCAMApp.py:7739 +#: FlatCAMApp.py:7738 msgid "Only Geometry, Gerber and CNCJob objects can be used." -msgstr "Seuls les objets Geometry, Gerber et CNCJob peuvent être utilisés." +msgstr "Seuls les objets Géométrie, Gerber et CNCJob peuvent être utilisés." -#: FlatCAMApp.py:7752 FlatCAMApp.py:7756 flatcamTools/ToolQRCode.py:829 +#: FlatCAMApp.py:7751 FlatCAMApp.py:7755 flatcamTools/ToolQRCode.py:829 #: flatcamTools/ToolQRCode.py:833 msgid "Export SVG" msgstr "Exporter en SVG" -#: FlatCAMApp.py:7781 +#: FlatCAMApp.py:7780 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:7787 FlatCAMApp.py:7791 +#: FlatCAMApp.py:7786 FlatCAMApp.py:7790 msgid "Export PNG Image" msgstr "Exporter une image PNG" -#: FlatCAMApp.py:7824 FlatCAMApp.py:8032 +#: FlatCAMApp.py:7823 FlatCAMApp.py:8031 msgid "Failed. Only Gerber objects can be saved as Gerber files..." msgstr "" -"Échoué. Seuls les objets Gerber peuvent être enregistrés en tant que " +"Érreur. Seuls les objets Gerber peuvent être enregistrés en tant que " "fichiers Gerber ..." -#: FlatCAMApp.py:7836 +#: FlatCAMApp.py:7835 msgid "Save Gerber source file" msgstr "Enregistrer le fichier source Gerber" -#: FlatCAMApp.py:7865 +#: FlatCAMApp.py:7864 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 " +"Érreur. Seuls les objets de script peuvent être enregistrés en tant que " "fichiers de script TCL ..." -#: FlatCAMApp.py:7877 +#: FlatCAMApp.py:7876 msgid "Save Script source file" msgstr "Enregistrer le fichier source du script" -#: FlatCAMApp.py:7906 +#: FlatCAMApp.py:7905 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:7918 +#: FlatCAMApp.py:7917 msgid "Save Document source file" msgstr "Enregistrer le fichier source du document" -#: FlatCAMApp.py:7947 FlatCAMApp.py:7988 FlatCAMApp.py:8945 +#: FlatCAMApp.py:7946 FlatCAMApp.py:7987 FlatCAMApp.py:8944 msgid "Failed. Only Excellon objects can be saved as Excellon files..." msgstr "" -"Échoué. Seuls les objets Excellon peuvent être enregistrés en tant que " +"Érreur. Seuls les objets Excellon peuvent être enregistrés en tant que " "fichiers Excellon ..." -#: FlatCAMApp.py:7955 FlatCAMApp.py:7959 +#: FlatCAMApp.py:7954 FlatCAMApp.py:7958 msgid "Save Excellon source file" msgstr "Enregistrer le fichier source Excellon" -#: FlatCAMApp.py:7996 FlatCAMApp.py:8000 +#: FlatCAMApp.py:7995 FlatCAMApp.py:7999 msgid "Export Excellon" msgstr "Exporter Excellon" -#: FlatCAMApp.py:8040 FlatCAMApp.py:8044 +#: FlatCAMApp.py:8039 FlatCAMApp.py:8043 msgid "Export Gerber" msgstr "Export Gerber" -#: FlatCAMApp.py:8082 +#: FlatCAMApp.py:8081 msgid "Only Geometry objects can be used." msgstr "Seuls les objets de géométrie peuvent être utilisés." -#: FlatCAMApp.py:8096 FlatCAMApp.py:8100 +#: FlatCAMApp.py:8095 FlatCAMApp.py:8099 msgid "Export DXF" msgstr "Exportation DXF" -#: FlatCAMApp.py:8125 FlatCAMApp.py:8128 +#: FlatCAMApp.py:8124 FlatCAMApp.py:8127 msgid "Import SVG" msgstr "Importer SVG" -#: FlatCAMApp.py:8156 FlatCAMApp.py:8160 +#: FlatCAMApp.py:8155 FlatCAMApp.py:8159 msgid "Import DXF" msgstr "Importation DXF" -#: FlatCAMApp.py:8210 +#: FlatCAMApp.py:8209 msgid "Viewing the source code of the selected object." msgstr "Affichage du code source de l'objet sélectionné." -#: FlatCAMApp.py:8211 flatcamObjects/FlatCAMCNCJob.py:548 +#: FlatCAMApp.py:8210 flatcamObjects/FlatCAMCNCJob.py:548 #: flatcamObjects/FlatCAMScript.py:134 msgid "Loading..." msgstr "Chargement..." -#: FlatCAMApp.py:8217 FlatCAMApp.py:8221 +#: FlatCAMApp.py:8216 FlatCAMApp.py:8220 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:8235 +#: FlatCAMApp.py:8234 msgid "Source Editor" msgstr "Éditeur de source" -#: FlatCAMApp.py:8275 FlatCAMApp.py:8282 +#: FlatCAMApp.py:8274 FlatCAMApp.py:8281 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." +msgstr "Il n'y a pas d'objet sélectionné auxquelles voir son code source." -#: FlatCAMApp.py:8294 +#: FlatCAMApp.py:8293 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:8308 flatcamObjects/FlatCAMCNCJob.py:562 +#: FlatCAMApp.py:8307 flatcamObjects/FlatCAMCNCJob.py:562 msgid "Code Editor" msgstr "Éditeur de code" -#: FlatCAMApp.py:8330 +#: FlatCAMApp.py:8329 msgid "Go to Line ..." msgstr "Aller à la ligne ..." -#: FlatCAMApp.py:8331 +#: FlatCAMApp.py:8330 msgid "Line:" msgstr "Ligne:" -#: FlatCAMApp.py:8360 +#: FlatCAMApp.py:8359 msgid "New TCL script file created in Code Editor." msgstr "Nouveau fichier de script TCL créé dans l'éditeur de code." -#: FlatCAMApp.py:8396 FlatCAMApp.py:8398 FlatCAMApp.py:8434 FlatCAMApp.py:8436 +#: FlatCAMApp.py:8395 FlatCAMApp.py:8397 FlatCAMApp.py:8433 FlatCAMApp.py:8435 msgid "Open TCL script" msgstr "Ouvrir le script TCL" -#: FlatCAMApp.py:8464 +#: FlatCAMApp.py:8463 msgid "Executing ScriptObject file." msgstr "Exécution du fichier ScriptObject." -#: FlatCAMApp.py:8472 FlatCAMApp.py:8475 +#: FlatCAMApp.py:8471 FlatCAMApp.py:8474 msgid "Run TCL script" msgstr "Exécuter le script TCL" -#: FlatCAMApp.py:8498 +#: FlatCAMApp.py:8497 msgid "TCL script file opened in Code Editor and executed." -msgstr "Fichier de script TCL ouvert dans l'éditeur de code et exécuté." +msgstr "Fichier de script TCL ouvert dans l'éditeur de code exécuté." -#: FlatCAMApp.py:8549 FlatCAMApp.py:8555 +#: FlatCAMApp.py:8548 FlatCAMApp.py:8554 msgid "Save Project As ..." msgstr "Enregistrer le projet sous ..." -#: FlatCAMApp.py:8551 flatcamGUI/FlatCAMGUI.py:1134 +#: FlatCAMApp.py:8550 flatcamGUI/FlatCAMGUI.py:1134 #: flatcamGUI/FlatCAMGUI.py:2176 msgid "Project" msgstr "Projet" -#: FlatCAMApp.py:8590 +#: FlatCAMApp.py:8589 msgid "FlatCAM objects print" msgstr "Impression d'objets FlatCAM" -#: FlatCAMApp.py:8603 FlatCAMApp.py:8610 +#: FlatCAMApp.py:8602 FlatCAMApp.py:8609 msgid "Save Object as PDF ..." -msgstr "Enregistrer l'objet au format PDF ...Enregistrer le projet sous ..." +msgstr "Enregistrement au format PDF ...Enregistrer le projet sous ..." -#: FlatCAMApp.py:8619 +#: FlatCAMApp.py:8618 msgid "Printing PDF ... Please wait." msgstr "Impression du PDF ... Veuillez patienter." -#: FlatCAMApp.py:8798 +#: FlatCAMApp.py:8797 msgid "PDF file saved to" msgstr "Fichier PDF enregistré dans" -#: FlatCAMApp.py:8823 +#: FlatCAMApp.py:8822 msgid "Exporting SVG" msgstr "Exporter du SVG" -#: FlatCAMApp.py:8866 +#: FlatCAMApp.py:8865 msgid "SVG file exported to" msgstr "Fichier SVG exporté vers" -#: FlatCAMApp.py:8892 +#: FlatCAMApp.py:8891 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:9039 +#: FlatCAMApp.py:9038 msgid "Excellon file exported to" msgstr "Fichier Excellon exporté vers" -#: FlatCAMApp.py:9048 +#: FlatCAMApp.py:9047 msgid "Exporting Excellon" msgstr "Exporter Excellon" -#: FlatCAMApp.py:9053 FlatCAMApp.py:9060 +#: FlatCAMApp.py:9052 FlatCAMApp.py:9059 msgid "Could not export Excellon file." msgstr "Impossible d'exporter le fichier Excellon." -#: FlatCAMApp.py:9175 +#: FlatCAMApp.py:9174 msgid "Gerber file exported to" msgstr "Fichier Gerber exporté vers" -#: FlatCAMApp.py:9183 +#: FlatCAMApp.py:9182 msgid "Exporting Gerber" msgstr "Exporter Gerber" -#: FlatCAMApp.py:9188 FlatCAMApp.py:9195 +#: FlatCAMApp.py:9187 FlatCAMApp.py:9194 msgid "Could not export Gerber file." msgstr "Impossible d'exporter le fichier Gerber." -#: FlatCAMApp.py:9230 +#: FlatCAMApp.py:9229 msgid "DXF file exported to" msgstr "Fichier DXF exporté vers" -#: FlatCAMApp.py:9236 +#: FlatCAMApp.py:9235 msgid "Exporting DXF" msgstr "Exportation DXF" -#: FlatCAMApp.py:9241 FlatCAMApp.py:9248 +#: FlatCAMApp.py:9240 FlatCAMApp.py:9247 msgid "Could not export DXF file." msgstr "Impossible d'exporter le fichier DXF." -#: FlatCAMApp.py:9272 FlatCAMApp.py:9319 flatcamTools/ToolImage.py:277 +#: FlatCAMApp.py:9271 FlatCAMApp.py:9318 flatcamTools/ToolImage.py:277 msgid "" "Not supported type is picked as parameter. Only Geometry and Gerber are " "supported" msgstr "" -"Le type non pris en charge est sélectionné en tant que paramètre. Seuls " -"Geometry et Gerber sont supportés" +"Type non pris en charge sélectionné en tant que paramètre. Seuls Géométrie " +"et Gerber sont supportés" -#: FlatCAMApp.py:9282 +#: FlatCAMApp.py:9281 msgid "Importing SVG" msgstr "Importer du SVG" -#: FlatCAMApp.py:9290 FlatCAMApp.py:9336 +#: FlatCAMApp.py:9289 FlatCAMApp.py:9335 msgid "Import failed." msgstr "L'importation a échoué." -#: FlatCAMApp.py:9297 FlatCAMApp.py:9343 FlatCAMApp.py:9407 FlatCAMApp.py:9474 -#: FlatCAMApp.py:9540 FlatCAMApp.py:9605 FlatCAMApp.py:9662 +#: FlatCAMApp.py:9296 FlatCAMApp.py:9342 FlatCAMApp.py:9406 FlatCAMApp.py:9473 +#: FlatCAMApp.py:9539 FlatCAMApp.py:9604 FlatCAMApp.py:9661 #: flatcamTools/ToolImage.py:297 flatcamTools/ToolPDF.py:225 msgid "Opened" -msgstr "Ouvert" +msgstr "Ouvrir" -#: FlatCAMApp.py:9328 +#: FlatCAMApp.py:9327 msgid "Importing DXF" msgstr "Importation de DXF" -#: FlatCAMApp.py:9369 FlatCAMApp.py:9564 FlatCAMApp.py:9629 +#: FlatCAMApp.py:9368 FlatCAMApp.py:9563 FlatCAMApp.py:9628 msgid "Failed to open file" -msgstr "Échec de l'ouverture du fichier" +msgstr "Échec à l'ouverture du fichier" -#: FlatCAMApp.py:9372 FlatCAMApp.py:9567 FlatCAMApp.py:9632 +#: FlatCAMApp.py:9371 FlatCAMApp.py:9566 FlatCAMApp.py:9631 msgid "Failed to parse file" msgstr "Échec de l'analyse du fichier" -#: FlatCAMApp.py:9384 +#: FlatCAMApp.py:9383 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:9389 +#: FlatCAMApp.py:9388 msgid "Opening Gerber" msgstr "Ouverture Gerber" -#: FlatCAMApp.py:9400 +#: FlatCAMApp.py:9399 msgid "Open Gerber failed. Probable not a Gerber file." -msgstr "Open Gerber failed. Probable not a Gerber file." +msgstr "Ouverture Gerber échoué. Probablement pas un fichier Gerber." -#: FlatCAMApp.py:9432 flatcamTools/ToolPcbWizard.py:424 +#: FlatCAMApp.py:9431 flatcamTools/ToolPcbWizard.py:424 msgid "This is not Excellon file." msgstr "Ce n'est pas un fichier Excellon." -#: FlatCAMApp.py:9436 +#: FlatCAMApp.py:9435 msgid "Cannot open file" msgstr "Ne peut pas ouvrir le fichier" -#: FlatCAMApp.py:9454 flatcamTools/ToolPDF.py:275 +#: FlatCAMApp.py:9453 flatcamTools/ToolPDF.py:275 #: flatcamTools/ToolPcbWizard.py:445 msgid "No geometry found in file" msgstr "Aucune géométrie trouvée dans le fichier" -#: FlatCAMApp.py:9457 +#: FlatCAMApp.py:9456 msgid "Opening Excellon." msgstr "Ouverture Excellon." -#: FlatCAMApp.py:9467 +#: FlatCAMApp.py:9466 msgid "Open Excellon file failed. Probable not an Excellon file." -msgstr "" -"Le fichier Open Excellon a échoué. Probablement pas un fichier Excellon." +msgstr "Ouverture Excellon échoué. Probablement pas un fichier Excellon." -#: FlatCAMApp.py:9499 +#: FlatCAMApp.py:9498 msgid "Reading GCode file" msgstr "Lecture du fichier GCode" -#: FlatCAMApp.py:9505 +#: FlatCAMApp.py:9504 msgid "Failed to open" msgstr "Impossible d'ouvrir" -#: FlatCAMApp.py:9512 +#: FlatCAMApp.py:9511 msgid "This is not GCODE" -msgstr "Ce n'est pas GCODE" +msgstr "Ce n'est pas du GCODE" -#: FlatCAMApp.py:9517 +#: FlatCAMApp.py:9516 msgid "Opening G-Code." msgstr "Ouverture G-Code." -#: FlatCAMApp.py:9530 +#: FlatCAMApp.py:9529 msgid "" "Failed to create CNCJob Object. Probable not a GCode file. Try to load it " "from File menu.\n" @@ -1300,118 +1288,120 @@ msgid "" "processing" msgstr "" "Impossible de créer un objet CNCJob. Probablement pas un fichier GCode. " -"Essayez de le charger à partir du menu Fichier.\n" +"Essayez de charger à partir du menu Fichier.\n" "La tentative de création d'un objet FlatCAM CNCJob à partir d'un fichier G-" "Code a échoué pendant le traitement" -#: FlatCAMApp.py:9586 +#: FlatCAMApp.py:9585 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." +msgstr "Objet vide ou non HPGL2. Abandon de la création d'objet." -#: FlatCAMApp.py:9591 +#: FlatCAMApp.py:9590 msgid "Opening HPGL2" msgstr "Ouverture HPGL2" -#: FlatCAMApp.py:9598 +#: FlatCAMApp.py:9597 msgid " Open HPGL2 failed. Probable not a HPGL2 file." -msgstr " Open HPGL2 a échoué. Probablement pas un fichier HPGL2 ." +msgstr " Ouverture HPGL2 échoué. Probablement pas un fichier HPGL2 ." -#: FlatCAMApp.py:9624 +#: FlatCAMApp.py:9623 msgid "TCL script file opened in Code Editor." msgstr "Fichier de script TCL ouvert dans l'éditeur de code." -#: FlatCAMApp.py:9644 +#: FlatCAMApp.py:9643 msgid "Opening TCL Script..." msgstr "Ouverture du script TCL ..." -#: FlatCAMApp.py:9655 +#: FlatCAMApp.py:9654 msgid "Failed to open TCL Script." msgstr "Impossible d'ouvrir le script TCL." -#: FlatCAMApp.py:9677 +#: FlatCAMApp.py:9676 msgid "Opening FlatCAM Config file." -msgstr "Ouverture du fichier FlatCAM Config." +msgstr "Ouverture du fichier de configuration FlatCAM." -#: FlatCAMApp.py:9705 +#: FlatCAMApp.py:9704 msgid "Failed to open config file" msgstr "Impossible d'ouvrir le fichier de configuration" -#: FlatCAMApp.py:9734 +#: FlatCAMApp.py:9733 msgid "Loading Project ... Please Wait ..." msgstr "Chargement du projet ... Veuillez patienter ..." -#: FlatCAMApp.py:9739 +#: FlatCAMApp.py:9738 msgid "Opening FlatCAM Project file." msgstr "Ouverture du fichier de projet FlatCAM." -#: FlatCAMApp.py:9754 FlatCAMApp.py:9758 FlatCAMApp.py:9775 +#: FlatCAMApp.py:9753 FlatCAMApp.py:9757 FlatCAMApp.py:9774 msgid "Failed to open project file" msgstr "Impossible d'ouvrir le fichier de projet" -#: FlatCAMApp.py:9812 +#: FlatCAMApp.py:9811 msgid "Loading Project ... restoring" msgstr "Chargement du projet ... en cours de restauration" -#: FlatCAMApp.py:9822 +#: FlatCAMApp.py:9821 msgid "Project loaded from" msgstr "Projet chargé à partir de" -#: FlatCAMApp.py:9846 +#: FlatCAMApp.py:9845 msgid "Redrawing all objects" msgstr "Redessiner tous les objets" -#: FlatCAMApp.py:9934 +#: FlatCAMApp.py:9933 msgid "Failed to load recent item list." -msgstr "Échec du chargement de la liste des éléments récents." +msgstr "Échec du chargement des éléments récents." -#: FlatCAMApp.py:9941 +#: FlatCAMApp.py:9940 msgid "Failed to parse recent item list." -msgstr "Échec de l'analyse de la liste des éléments récents." +msgstr "Échec d'analyse des éléments récents." -#: FlatCAMApp.py:9951 +#: FlatCAMApp.py:9950 msgid "Failed to load recent projects item list." -msgstr "Échec du chargement de la liste d'éléments des projets récents." +msgstr "Échec du chargement des éléments des projets récents." -#: FlatCAMApp.py:9958 +#: FlatCAMApp.py:9957 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:10019 +#: FlatCAMApp.py:10018 msgid "Clear Recent projects" msgstr "Effacer les projets récents" -#: FlatCAMApp.py:10043 +#: FlatCAMApp.py:10042 msgid "Clear Recent files" msgstr "Effacer les fichiers récents" -#: FlatCAMApp.py:10065 flatcamGUI/FlatCAMGUI.py:1363 +#: FlatCAMApp.py:10064 flatcamGUI/FlatCAMGUI.py:1363 msgid "Shortcut Key List" -msgstr "Liste des touches de raccourci" +msgstr "Touches de raccourci" + +#: FlatCAMApp.py:10144 +msgid "Selected Tab - Choose an Item from Project Tab" +msgstr "" +"Onglet sélection - \n" +"Choisissez un élément dans l'onglet Projet" #: FlatCAMApp.py:10145 -msgid "Selected Tab - Choose an Item from Project Tab" -msgstr "Onglet sélectionné - Choisissez un élément dans l'onglet Projet" - -#: FlatCAMApp.py:10146 msgid "Details" msgstr "Détails" -#: FlatCAMApp.py:10148 +#: FlatCAMApp.py:10147 msgid "The normal flow when working in FlatCAM is the following:" -msgstr "Le flux normal lorsque vous travaillez dans FlatCAM est le suivant:" +msgstr "Chronologie de travaille dans FlatCAM:" -#: FlatCAMApp.py:10149 +#: FlatCAMApp.py:10148 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 "" -"Chargez / importez un fichier Gerber, Excellon, Gcode, DXF, Image raster ou " -"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." +"Chargez / importez un fichier Gerber, Excellon, Gcode, DXF,\n" +"Image raster ou SVG dans FlatCAM à l'aide des barres d'outils, \n" +"des raccourcis clavier ou même en glissant-déposant les fichiers \n" +"sur l'interface graphique." -#: FlatCAMApp.py:10152 +#: FlatCAMApp.py:10151 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 " @@ -1422,20 +1412,18 @@ msgstr "" "FLATCAM ou par le biais du menu (ou de la barre d’outils) proposé dans " "l’application." -#: FlatCAMApp.py:10155 +#: FlatCAMApp.py:10154 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 "" -"Une fois qu'un objet est disponible dans l'onglet Projet, en le " -"sélectionnant puis en vous concentrant sur SELECTED TAB (il est plus simple " -"de cliquer deux fois sur le nom de l'objet dans l'onglet Projet. SELECTED " -"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." +"Une fois la sélection d'un objet dans \"Projet\", L'onglet \"Sélection\" " +"sera mis à jour avec les propriétés de l'objet en fonction de son type: " +"Gerber, Excellon, géométrie ou CNCJob." -#: FlatCAMApp.py:10159 +#: FlatCAMApp.py:10158 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 " @@ -1443,159 +1431,157 @@ msgid "" "object on the canvas will bring the SELECTED TAB and populate it even if it " "was out of focus." msgstr "" -"Si la sélection de l'objet est effectuée sur le canevas par un simple clic " -"et que l'onglet sélectionné est activé, les propriétés de l'objet sont à " -"nouveau affichées dans l'onglet sélectionné. Sinon, double-cliquez sur " -"l'objet sur la toile pour amener l'onglet sélectionné et le renseigner même " -"s'il n'était pas net." +"La sélection de l'objet est importé par un simple clic depuis le l'onglet " +"\"projet\". L'onglet \"sélection\" est automatiquement affecté des " +"propriétés de l'objet Gerber, Excellon, Géométrie, ou CNC Job de façon " +"interactive. Double-cliquez sur l'objet de la table pour activer l'onglet " +"\"Sélectionné\" et disposé des propriétés de l'objet." -#: FlatCAMApp.py:10163 +#: FlatCAMApp.py:10162 msgid "" "You can change the parameters in this screen and the flow direction is like " "this:" -msgstr "" -"Vous pouvez modifier les paramètres dans cet écran et le sens du flux est le " -"suivant:" +msgstr "Vous pouvez modifier les paramètres de la façon suivante:" -#: FlatCAMApp.py:10164 +#: FlatCAMApp.py:10163 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 "" -"Objet Gerber / Excellon -> Paramètre de modification -> Générer une " -"géométrie -> Objet de géométrie -> Ajouter des outils (changez le paramètre " -"dans l'onglet Sélectionné) -> Génère un objet CNCJob -> Objet CNCJob -> " -"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." +"Exemple:\n" +"Importer puis choisissez un Objet Gerber -> Signet \"Sélection\" -> Réglé " +"les paramètre de travaille à votre convenance -> \"Générer une géométrie " +"d'isolation\" -> le fichier de travaille nouvellement Créer apparait dans " +"CNC Job. Ce sont les fichiers CNC Job qui permettrons le travaille de votre " +"appareille de gravure." -#: FlatCAMApp.py:10168 +#: FlatCAMApp.py:10167 msgid "" "A list of key shortcuts is available through an menu entry in Help --> " "Shortcuts List or through its own key shortcut: F3." 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." +"Une liste des raccourcis clavier est disponible via le menu dans \"Aide\" " +"ou avec la touche de raccourci F3." -#: FlatCAMApp.py:10232 +#: FlatCAMApp.py:10231 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." +msgstr "Échec de vérification de mise a jour. Connection impossible." -#: FlatCAMApp.py:10239 +#: FlatCAMApp.py:10238 msgid "Could not parse information about latest version." msgstr "Impossible d'analyser les informations sur la dernière version." -#: FlatCAMApp.py:10249 +#: FlatCAMApp.py:10248 msgid "FlatCAM is up to date!" msgstr "FlatCAM est à jour!" -#: FlatCAMApp.py:10254 +#: FlatCAMApp.py:10253 msgid "Newer Version Available" -msgstr "Nouvelle version disponible" +msgstr "Nouvelle version FlatCam disponible" -#: FlatCAMApp.py:10256 +#: FlatCAMApp.py:10255 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:10260 +#: FlatCAMApp.py:10259 msgid "info" msgstr "info" -#: FlatCAMApp.py:10288 +#: FlatCAMApp.py:10287 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 "" -"L'initialisation du canevas OpenGL a échoué. La configuration matérielle ou " -"matérielle n'est pas prise en charge. Modifiez le moteur graphique en Hérité " -"(2D) dans Edition -> Préférences -> onglet Général.\n" +"L'initialisation du canevas OpenGL a échoué. La configuration matérielle " +"n'est pas prise en charge. Modifiez le moteur graphique en Legacy(2D) dans " +"Edition -> Paramètres -> onglet Général.\n" "\n" -#: FlatCAMApp.py:10367 +#: FlatCAMApp.py:10366 msgid "All plots disabled." -msgstr "Toutes les parcelles désactivées." +msgstr "Désactivation de tous les Plots." -#: FlatCAMApp.py:10374 +#: FlatCAMApp.py:10373 msgid "All non selected plots disabled." -msgstr "Toutes les parcelles non sélectionnées sont désactivées." +msgstr "Désélection de tous les Plots." -#: FlatCAMApp.py:10381 +#: FlatCAMApp.py:10380 msgid "All plots enabled." -msgstr "Toutes les parcelles activées." +msgstr "Activation de tous les Plots." -#: FlatCAMApp.py:10387 +#: FlatCAMApp.py:10386 msgid "Selected plots enabled..." -msgstr "Parcelles sélectionnées activées ..." +msgstr "Sélection de tous les Plots activés ..." -#: FlatCAMApp.py:10395 +#: FlatCAMApp.py:10394 msgid "Selected plots disabled..." -msgstr "Parcelles sélectionnées désactivées ..." +msgstr "Selection de tous les Plots désactivés ..." -#: FlatCAMApp.py:10428 +#: FlatCAMApp.py:10427 msgid "Enabling plots ..." -msgstr "Activation des parcelles ..." +msgstr "Activation des plots ..." -#: FlatCAMApp.py:10480 +#: FlatCAMApp.py:10479 msgid "Disabling plots ..." -msgstr "Désactiver les parcelles ..." +msgstr "Désactiver les plots ..." -#: FlatCAMApp.py:10503 +#: FlatCAMApp.py:10502 msgid "Working ..." msgstr "Travail ..." -#: FlatCAMApp.py:10558 flatcamGUI/FlatCAMGUI.py:703 +#: FlatCAMApp.py:10557 flatcamGUI/FlatCAMGUI.py:703 msgid "Red" msgstr "Rouge" -#: FlatCAMApp.py:10560 flatcamGUI/FlatCAMGUI.py:706 +#: FlatCAMApp.py:10559 flatcamGUI/FlatCAMGUI.py:706 msgid "Blue" msgstr "Bleu" -#: FlatCAMApp.py:10563 flatcamGUI/FlatCAMGUI.py:709 +#: FlatCAMApp.py:10562 flatcamGUI/FlatCAMGUI.py:709 msgid "Yellow" msgstr "Jaune" -#: FlatCAMApp.py:10565 flatcamGUI/FlatCAMGUI.py:712 +#: FlatCAMApp.py:10564 flatcamGUI/FlatCAMGUI.py:712 msgid "Green" msgstr "Vert" -#: FlatCAMApp.py:10567 flatcamGUI/FlatCAMGUI.py:715 +#: FlatCAMApp.py:10566 flatcamGUI/FlatCAMGUI.py:715 msgid "Purple" msgstr "Violet" -#: FlatCAMApp.py:10569 flatcamGUI/FlatCAMGUI.py:718 +#: FlatCAMApp.py:10568 flatcamGUI/FlatCAMGUI.py:718 msgid "Brown" msgstr "Marron" -#: FlatCAMApp.py:10571 FlatCAMApp.py:10627 flatcamGUI/FlatCAMGUI.py:721 +#: FlatCAMApp.py:10570 FlatCAMApp.py:10626 flatcamGUI/FlatCAMGUI.py:721 msgid "White" msgstr "Blanche" -#: FlatCAMApp.py:10573 flatcamGUI/FlatCAMGUI.py:724 +#: FlatCAMApp.py:10572 flatcamGUI/FlatCAMGUI.py:724 msgid "Black" msgstr "Noire" -#: FlatCAMApp.py:10576 flatcamGUI/FlatCAMGUI.py:729 +#: FlatCAMApp.py:10575 flatcamGUI/FlatCAMGUI.py:729 msgid "Custom" msgstr "Personnalisé" -#: FlatCAMApp.py:10586 flatcamGUI/FlatCAMGUI.py:737 +#: FlatCAMApp.py:10585 flatcamGUI/FlatCAMGUI.py:737 msgid "Default" msgstr "Défaut" -#: FlatCAMApp.py:10610 flatcamGUI/FlatCAMGUI.py:734 +#: FlatCAMApp.py:10609 flatcamGUI/FlatCAMGUI.py:734 msgid "Opacity" msgstr "Opacité" -#: FlatCAMApp.py:10612 +#: FlatCAMApp.py:10611 msgid "Set alpha level ..." -msgstr "Définir le niveau alpha ..." +msgstr "Définir le premier niveau ..." -#: FlatCAMApp.py:10612 +#: FlatCAMApp.py:10611 #: flatcamGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py:131 #: flatcamGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:133 #: flatcamGUI/preferences/tools/ToolsTransformPrefGroupUI.py:220 @@ -1605,29 +1591,29 @@ msgstr "Définir le niveau alpha ..." msgid "Value" msgstr "Valeur" -#: FlatCAMApp.py:10666 +#: FlatCAMApp.py:10665 msgid "Saving FlatCAM Project" msgstr "Enregistrement du projet FlatCAM" -#: FlatCAMApp.py:10687 FlatCAMApp.py:10723 +#: FlatCAMApp.py:10686 FlatCAMApp.py:10722 msgid "Project saved to" msgstr "Projet enregistré dans" -#: FlatCAMApp.py:10694 +#: FlatCAMApp.py:10693 msgid "The object is used by another application." msgstr "L'objet est utilisé par une autre application." -#: FlatCAMApp.py:10708 +#: FlatCAMApp.py:10707 msgid "Failed to verify project file" -msgstr "Échec de la vérification du fichier de projet" +msgstr "Échec de vérification du fichier projet" -#: FlatCAMApp.py:10708 FlatCAMApp.py:10716 FlatCAMApp.py:10726 +#: FlatCAMApp.py:10707 FlatCAMApp.py:10715 FlatCAMApp.py:10725 msgid "Retry to save it." msgstr "Réessayez de le sauvegarder." -#: FlatCAMApp.py:10716 FlatCAMApp.py:10726 +#: FlatCAMApp.py:10715 FlatCAMApp.py:10725 msgid "Failed to parse saved project file" -msgstr "Échec de l'analyse du fichier de projet enregistré" +msgstr "Échec d'analyse du fichier de projet enregistré" #: FlatCAMBookmark.py:57 FlatCAMBookmark.py:84 msgid "Title" @@ -1643,17 +1629,17 @@ msgid "" "The rows in gray color will populate the Bookmarks menu.\n" "The number of gray colored rows is set in Preferences." msgstr "" -"Indice.\n" -"Les lignes de couleur grise rempliront le menu Favoris.\n" -"Le nombre de lignes de couleur grises est défini dans Préférences." +"Index.\n" +"Les lignes seront grisé dans le menu.\n" +"Le nombre de lignes de couleur grises est défini dans Paramètres ." #: 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 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." +"Description du lien défini dans le menu.\n" +"Rester bref car il est installé en tant qu'élément de menu." #: FlatCAMBookmark.py:69 msgid "Web Link. E.g: https://your_website.org " @@ -1661,7 +1647,7 @@ msgstr "Lien Web. Par exemple: https://your_website.org " #: FlatCAMBookmark.py:78 msgid "New Bookmark" -msgstr "Nouveau Favori" +msgstr "Nouveau Menu" #: FlatCAMBookmark.py:97 msgid "Add Entry" @@ -1689,7 +1675,7 @@ msgstr "L'entrée du lien Web est vide." #: FlatCAMBookmark.py:207 msgid "Either the Title or the Weblink already in the table." -msgstr "Soit le titre ou le lien Web déjà dans le tableau." +msgstr "Titre ou lien Web déjà dans le tableau." #: FlatCAMBookmark.py:227 msgid "Bookmark added." @@ -1697,7 +1683,7 @@ msgstr "Signet ajouté." #: FlatCAMBookmark.py:244 msgid "This bookmark can not be removed" -msgstr "Ce marque-page ne peut être supprimé" +msgstr "Ce menu ne peut être supprimé" #: FlatCAMBookmark.py:275 msgid "Bookmark removed." @@ -1709,31 +1695,31 @@ msgstr "Exporter les signets FlatCAM" #: FlatCAMBookmark.py:293 flatcamGUI/FlatCAMGUI.py:524 msgid "Bookmarks" -msgstr "Favoris" +msgstr "Internet" #: FlatCAMBookmark.py:319 FlatCAMBookmark.py:349 msgid "Could not load bookmarks file." -msgstr "Impossible de charger le fichier de favoris." +msgstr "Impossible de charger le fichier des Menus." #: FlatCAMBookmark.py:329 msgid "Failed to write bookmarks to file." -msgstr "Échec de l'écriture des favoris dans le fichier." +msgstr "Échec de l'écriture des signet dans le fichier." #: FlatCAMBookmark.py:331 msgid "Exported bookmarks to" -msgstr "Favoris exportés vers" +msgstr "Menu exportés vers" #: FlatCAMBookmark.py:337 msgid "Import FlatCAM Bookmarks" -msgstr "Importer des favoris FlatCAM" +msgstr "Importer des signet FlatCAM" #: FlatCAMBookmark.py:356 msgid "Imported Bookmarks from" -msgstr "Favoris importés de" +msgstr "Signet importés de" #: 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." +msgstr "L'utilisateur a demandé une sortie de la tâche en cours." #: FlatCAMDB.py:86 msgid "Add Geometry Tool in DB" @@ -1755,7 +1741,7 @@ msgstr "Supprimer l'outil de la BD" #: 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." +msgstr "Supprimez une sélection d'outils de la base de données." #: FlatCAMDB.py:108 FlatCAMDB.py:1663 msgid "Export DB" @@ -1778,7 +1764,7 @@ msgstr "" #: FlatCAMDB.py:120 FlatCAMDB.py:1681 msgid "Add Tool from Tools DB" -msgstr "Ajouter un outil à partir de la base de données d'outils" +msgstr "Ajouter un outil à partir de la base de données" #: FlatCAMDB.py:122 FlatCAMDB.py:1683 msgid "" @@ -1786,8 +1772,8 @@ msgid "" "active Geometry object after selecting a tool\n" "in the Tools Database." msgstr "" -"Ajoutez un nouvel outil dans le tableau des outils du\n" -"objet Geometry actif après avoir sélectionné un outil\n" +"Ajoutez un nouvel outil depuis la table des \n" +"objets Géométrie actif, après l'avoir sélectionné\n" "dans la base de données des outils." #: FlatCAMDB.py:158 FlatCAMDB.py:833 FlatCAMDB.py:1087 @@ -1801,7 +1787,7 @@ msgstr "Nom de l'outil" #: flatcamTools/ToolNCC.py:278 flatcamTools/ToolNCC.py:287 #: flatcamTools/ToolPaint.py:261 msgid "Tool Dia" -msgstr "Dia. de l'outil" +msgstr "Diam. de l'outil" #: FlatCAMDB.py:160 FlatCAMDB.py:837 FlatCAMDB.py:1281 #: flatcamGUI/ObjectUI.py:1558 @@ -1829,7 +1815,7 @@ msgstr "Forme d'outil" #: FlatCAMDB.py:164 FlatCAMDB.py:846 FlatCAMDB.py:1129 #: flatcamGUI/ObjectUI.py:350 flatcamGUI/ObjectUI.py:900 -#: flatcamGUI/ObjectUI.py:1703 flatcamGUI/ObjectUI.py:2336 +#: flatcamGUI/ObjectUI.py:1703 flatcamGUI/ObjectUI.py:2256 #: flatcamGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:93 #: flatcamGUI/preferences/geometry/GeometryOptPrefGroupUI.py:48 #: flatcamGUI/preferences/gerber/GerberAdvOptPrefGroupUI.py:107 @@ -1842,11 +1828,11 @@ msgstr "Forme d'outil" #: flatcamTools/ToolNCC.py:260 flatcamTools/ToolNCC.py:268 #: flatcamTools/ToolPaint.py:243 msgid "Cut Z" -msgstr "Couper Z" +msgstr "Gravure Z" #: FlatCAMDB.py:165 FlatCAMDB.py:848 FlatCAMDB.py:1143 msgid "MultiDepth" -msgstr "Multi-profondeur" +msgstr "Plusieurs Passes" #: FlatCAMDB.py:166 FlatCAMDB.py:850 FlatCAMDB.py:1156 msgid "DPP" @@ -1854,11 +1840,11 @@ msgstr "DPP" #: FlatCAMDB.py:167 FlatCAMDB.py:852 FlatCAMDB.py:1312 msgid "V-Dia" -msgstr "Dia. en V" +msgstr "Diam. V" #: FlatCAMDB.py:168 FlatCAMDB.py:854 FlatCAMDB.py:1326 msgid "V-Angle" -msgstr "Angle en V" +msgstr "Angle V" #: FlatCAMDB.py:169 FlatCAMDB.py:856 FlatCAMDB.py:1170 #: flatcamGUI/ObjectUI.py:946 flatcamGUI/ObjectUI.py:1750 @@ -1866,9 +1852,9 @@ msgstr "Angle en V" #: flatcamGUI/preferences/geometry/GeometryOptPrefGroupUI.py:101 #: flatcamGUI/preferences/tools/Tools2CalPrefGroupUI.py:61 #: flatcamObjects/FlatCAMExcellon.py:1316 -#: flatcamObjects/FlatCAMGeometry.py:1606 flatcamTools/ToolCalibration.py:74 +#: flatcamObjects/FlatCAMGeometry.py:1578 flatcamTools/ToolCalibration.py:74 msgid "Travel Z" -msgstr "Voyage Z" +msgstr "Déplacement Z" #: FlatCAMDB.py:170 FlatCAMDB.py:858 msgid "FR" @@ -1885,12 +1871,12 @@ msgstr "Avance Rapides" #: FlatCAMDB.py:173 FlatCAMDB.py:864 FlatCAMDB.py:1213 #: flatcamGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:222 msgid "Spindle Speed" -msgstr "Vitesse de broche" +msgstr "Vitesse du Foret" #: FlatCAMDB.py:174 FlatCAMDB.py:866 FlatCAMDB.py:1228 #: flatcamGUI/ObjectUI.py:1064 flatcamGUI/ObjectUI.py:1857 msgid "Dwell" -msgstr "Habiter" +msgstr "Démarrage" #: FlatCAMDB.py:175 FlatCAMDB.py:868 FlatCAMDB.py:1241 msgid "Dwelltime" @@ -1902,15 +1888,15 @@ msgstr "Temps d'attente" #: flatcamGUI/preferences/tools/ToolsSolderpastePrefGroupUI.py:237 #: flatcamTools/ToolSolderPaste.py:335 msgid "Preprocessor" -msgstr "Post-processeur" +msgstr "Pré-réglage" #: FlatCAMDB.py:177 FlatCAMDB.py:872 FlatCAMDB.py:1356 msgid "ExtraCut" -msgstr "Coupe supp." +msgstr "Coupe suppl" #: FlatCAMDB.py:178 FlatCAMDB.py:874 FlatCAMDB.py:1371 msgid "E-Cut Length" -msgstr "L-Coupe supp." +msgstr "L-Coupe suppl" #: FlatCAMDB.py:179 FlatCAMDB.py:876 msgid "Toolchange" @@ -1940,7 +1926,7 @@ msgstr "Fin Z" #: FlatCAMDB.py:187 msgid "Tool Index." -msgstr "Index d'outils." +msgstr "Outils index." #: FlatCAMDB.py:189 FlatCAMDB.py:1089 msgid "" @@ -1949,8 +1935,8 @@ msgid "" "is to serve as a note for the user." msgstr "" "Nom de l'outil.\n" -"Ce n'est pas utilisé dans l'application, c'est la fonction\n" -"est de servir de note pour le u." +"N'est pas utilisé dans l'application, cette fonction\n" +"serre de note pour les utilisateurs." #: FlatCAMDB.py:193 FlatCAMDB.py:1102 msgid "Tool Diameter." @@ -1966,9 +1952,9 @@ msgid "" "Custom = custom offset using the Custom Offset value" msgstr "" "Décalage d'outil.\n" -"Peut être de quelques types:\n" +"Peut être de différents types:\n" "Chemin = décalage zéro\n" -"À l'INtérieur = décalé à l'intérieur de la moitié du diamètre de l'outil\n" +"Intérieur = décalé à l'intérieur de la moitié du diamètre de l'outil\n" "Extérieur = décalé à l'extérieur de la moitié du diamètre de l'outil\n" "Personnalisé = décalage personnalisé à l'aide de la valeur de décalage " "personnalisé" @@ -1979,7 +1965,7 @@ msgid "" "A value to be used as offset from the current path." msgstr "" "Décalage personnalisé.\n" -"Une valeur à utiliser comme décalage par rapport au chemin actuel." +"Valeur à utiliser comme décalage par rapport a l'existant." #: FlatCAMDB.py:205 FlatCAMDB.py:1267 msgid "" @@ -2015,7 +2001,7 @@ msgid "" "The depth at which to cut into material." msgstr "" "Profondeur de coupe.\n" -"La profondeur à laquelle couper en matériau." +"Profondeur de la gravure." #: FlatCAMDB.py:220 FlatCAMDB.py:1145 msgid "" @@ -2025,7 +2011,7 @@ msgid "" msgstr "" "Profondeur multi.\n" "La sélection de cette option permettra de couper en plusieurs passes,\n" -"chaque passe en ajoutant une profondeur de paramètre DPP (profondeur par " +"chaque passe en ajoutant une profondeur de Gravure DPP (profondeur par " "passe)." #: FlatCAMDB.py:224 FlatCAMDB.py:1158 @@ -2034,7 +2020,7 @@ msgid "" "The value used to cut into material on each pass." msgstr "" "DPP. Profondeur par passe.\n" -"La valeur utilisée pour couper le matériau à chaque passage." +"La valeur utilisée pour graver le matériau à chaque passage." #: FlatCAMDB.py:227 FlatCAMDB.py:1314 msgid "" @@ -2049,8 +2035,8 @@ msgid "" "V-Agle.\n" "Angle at the tip for the V-Shape Tools." msgstr "" -"V-Agle.\n" -"Angle à la pointe pour les outils en forme de V." +"V-Angle.\n" +"Angle de la pointe pour les outils en forme de V." #: FlatCAMDB.py:233 FlatCAMDB.py:1172 msgid "" @@ -2060,7 +2046,7 @@ msgid "" msgstr "" "Hauteur de dégagement.\n" "Hauteur à laquelle la fraise se déplacera entre les coupes,\n" -"au-dessus de la surface du matériau, en évitant tous les luminaires." +"au-dessus de la surface du matériau, en évitant tous les obstacles." #: FlatCAMDB.py:237 msgid "" @@ -2085,11 +2071,11 @@ msgid "" "This is used only by some devices that can't use\n" "the G0 g-code command. Mostly 3D printers." msgstr "" -"FR Rapids. Rapides d'avance\n" +"FR Rapids. Avance rapides \n" "Vitesse utilisée en se déplaçant le plus vite possible.\n" "Ceci est utilisé uniquement par certains appareils qui ne peuvent pas " "utiliser\n" -"la commande G0 g-code. Principalement des imprimantes 3D." +"la commande g-code G0 . Principalement sur les imprimantes 3D." #: FlatCAMDB.py:248 FlatCAMDB.py:1215 msgid "" @@ -2107,9 +2093,9 @@ msgid "" "Check this if a delay is needed to allow\n" "the spindle motor to reach it's set speed." msgstr "" -"Habiter.\n" +"Démarrage Moteur.\n" "Cochez cette case si un délai est nécessaire pour permettre\n" -"le moteur pour atteindre sa vitesse définie." +"au moteur d'atteindre sa vitesse définie." #: FlatCAMDB.py:256 FlatCAMDB.py:1243 msgid "" @@ -2125,7 +2111,7 @@ msgid "" "A selection of files that will alter the generated G-code\n" "to fit for a number of use cases." msgstr "" -"Préprocesseur.\n" +"Préréglage.\n" "Une sélection de fichiers qui modifieront le G-code généré\n" "pour s'adapter à un certain nombre de cas d'utilisation." @@ -2140,8 +2126,8 @@ msgstr "" "Coupe supplémentaire.\n" "Si coché, une fois l'isolement terminé, une coupe supplémentaire\n" "sera ajouté là où le début et la fin de l'isolement se rencontrent\n" -"tel que ce point est couvert par cette coupe supplémentaire\n" -"assurer une isolation complète." +"de sorte que ce point soit couvert par cette coupe supplémentaire\n" +"pour assurer une isolation complète." #: FlatCAMDB.py:269 FlatCAMDB.py:1373 msgid "" @@ -2153,11 +2139,7 @@ msgid "" "the extra cut." msgstr "" "Longueur de coupe supplémentaire.\n" -"Si coché, une fois l'isolement terminé, une coupe supplémentaire\n" -"sera ajouté là où le début et la fin de l'isolement se rencontrent\n" -"tel que ce point est couvert par cette coupe supplémentaire\n" -"assurer une isolation complète. C'est la longueur de\n" -"la coupe supplémentaire." +"Valeur de réglage de la coupe supplémentaire." #: FlatCAMDB.py:276 msgid "" @@ -2169,7 +2151,7 @@ msgstr "" "Changement d'outil.\n" "Il créera un événement de changement d'outil.\n" "Le type de changement d'outils est déterminé par\n" -"le fichier du préprocesseur." +"le fichier de préréglages." #: FlatCAMDB.py:281 msgid "" @@ -2189,7 +2171,7 @@ msgid "" "The position on Z plane where the tool change event take place." msgstr "" "Changement d'outil Z.\n" -"La position sur le plan Z où l'événement de changement d'outil a lieu." +"Hauteur où l'événement de changement d'outil a lieu." #: FlatCAMDB.py:289 msgid "" @@ -2197,19 +2179,17 @@ msgid "" "If it's left empty it will not be used.\n" "A position on Z plane to move immediately after job start." msgstr "" -"Démarrez Z.\n" +"Hauteur de Démarrage.\n" "S'il est laissé vide, il ne sera pas utilisé.\n" -"Une position sur le plan Z pour se déplacer immédiatement après le début du " -"travail." +"Position en hauteur du déplacement immédiat au début du travail." #: FlatCAMDB.py:293 msgid "" "End Z.\n" "A position on Z plane to move immediately after job stop." msgstr "" -"Fin Z.\n" -"Une position sur le plan Z pour se déplacer immédiatement après l'arrêt du " -"travail." +"Hauteur de Fin.\n" +"hauteur pour se déplacer immédiatement après l'arrêt du travail." #: FlatCAMDB.py:305 FlatCAMDB.py:682 FlatCAMDB.py:716 FlatCAMDB.py:1898 #: FlatCAMDB.py:2144 FlatCAMDB.py:2178 @@ -2234,7 +2214,7 @@ msgstr "Copier depuis BD" #: FlatCAMDB.py:326 FlatCAMDB.py:1829 msgid "Delete from DB" -msgstr "Supprimer de la BD" +msgstr "Suppression de la BD" #: FlatCAMDB.py:603 FlatCAMDB.py:2044 msgid "Tool added to DB." @@ -2259,7 +2239,7 @@ msgstr "Base de données d'outils" #: FlatCAMDB.py:693 FlatCAMDB.py:696 FlatCAMDB.py:748 FlatCAMDB.py:2155 #: FlatCAMDB.py:2158 FlatCAMDB.py:2211 msgid "Failed to write Tools DB to file." -msgstr "Échec de l'écriture de la base de données des outils dans le fichier." +msgstr "Échec d'écriture du fichier de base de données des outils." #: FlatCAMDB.py:699 FlatCAMDB.py:2161 msgid "Exported Tools DB to" @@ -2275,11 +2255,11 @@ msgstr "Sauvegarde de la BD des outils." #: FlatCAMDB.py:899 FlatCAMDB.py:2405 msgid "No Tool/row selected in the Tools Database table" -msgstr "Aucun outil / ligne sélectionné dans le tableau de la BD d'outils" +msgstr "Aucun outil/ligne sélectionné dans le tableau de la BD d'outils" #: FlatCAMDB.py:917 FlatCAMDB.py:2422 msgid "Cancelled adding tool from DB." -msgstr "Outil d'ajout de la BD annulé." +msgstr "Ajout d'outil de la BD abandonné." #: FlatCAMDB.py:1018 msgid "Basic Geo Parameters" @@ -2302,14 +2282,14 @@ msgstr "Paramètres de Peindre" #: flatcamGUI/preferences/tools/ToolsSolderpastePrefGroupUI.py:148 #: flatcamTools/ToolSolderPaste.py:253 msgid "Feedrate X-Y" -msgstr "Avance X-Y" +msgstr "Vitesse de déplacement" #: FlatCAMDB.py:1187 msgid "" "Feedrate X-Y. Feedrate\n" "The speed on XY plane used while cutting into material." msgstr "" -"Avance X-Y. Vitesse d'avance\n" +"Déplacement X-Y. Vitesse d'avance\n" "La vitesse sur le plan XY utilisée lors de la découpe du matériau." #: FlatCAMDB.py:1199 flatcamGUI/ObjectUI.py:982 flatcamGUI/ObjectUI.py:1783 @@ -2318,15 +2298,15 @@ msgstr "" #: flatcamGUI/preferences/tools/ToolsSolderpastePrefGroupUI.py:161 #: flatcamTools/ToolSolderPaste.py:265 msgid "Feedrate Z" -msgstr "Avance Z" +msgstr "Déplacements Hauteur" #: FlatCAMDB.py:1201 msgid "" "Feedrate Z\n" "The speed on Z plane." msgstr "" -"Avance Z\n" -"La vitesse sur l'avion Z." +"Monter/Descente \n" +"La vitesse sur l'axe Z." #: FlatCAMDB.py:1399 flatcamGUI/ObjectUI.py:845 #: flatcamGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:46 @@ -2342,19 +2322,19 @@ msgid "" "- Clear -> the regular non-copper clearing." msgstr "" "L'opération peut être:\n" -"- Isolement -> veillera à ce que la clairance sans cuivre soit toujours " +"- Isolé -> veillera à ce que la clairance sans cuivre soit toujours " "complète.\n" "Si cela ne réussit pas, alors le clearing sans cuivre échouera aussi.\n" -"- Clair -> le clearing régulier sans cuivre." +"- Nettoyer -> le clearing régulier sans cuivre." #: FlatCAMDB.py:1408 flatcamEditors/FlatCAMGrbEditor.py:2742 #: flatcamGUI/GUIElements.py:2577 flatcamTools/ToolNCC.py:350 msgid "Clear" -msgstr "Effacer" +msgstr "Nettoyer" -#: FlatCAMDB.py:1409 flatcamTools/ToolNCC.py:351 flatcamTools/ToolNCC.py:1623 +#: FlatCAMDB.py:1409 flatcamTools/ToolNCC.py:351 flatcamTools/ToolNCC.py:1618 msgid "Isolation" -msgstr "Isolement" +msgstr "Isolé" #: FlatCAMDB.py:1417 flatcamGUI/ObjectUI.py:409 flatcamGUI/ObjectUI.py:867 #: flatcamGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:62 @@ -2375,9 +2355,9 @@ msgid "" "- conventional / useful when there is no backlash compensation" msgstr "" "Type de fraisage lorsque l'outil sélectionné est de type: 'iso_op':\n" -"- montée / idéal pour le fraisage de précision et pour réduire l'utilisation " +"- montée : idéal pour le fraisage de précision et pour réduire l'utilisation " "d'outils\n" -"- conventionnel / utile quand il n'y a pas de compensation de jeu" +"- conventionnel : utile quand il n'y a pas de compensation de jeu" #: FlatCAMDB.py:1424 flatcamGUI/ObjectUI.py:415 #: flatcamGUI/preferences/geometry/GeometryEditorPrefGroupUI.py:62 @@ -2416,8 +2396,7 @@ msgstr "" "La quantité (pourcentage) de la largeur d'outil qui chevauche chaque passe " "d'outil.\n" "Ajustez la valeur en commençant par des valeurs inférieures\n" -"et l'augmenter si les zones qui doivent être nettoyées sont encore\n" -"pas effacé.\n" +"et l'augmenter si les zones qui doivent être nettoyées sont mal effacé.\n" "Valeurs inférieures = traitement plus rapide, exécution plus rapide sur " "CNC.\n" "Valeurs supérieures = traitement lent et exécution lente sur CNC\n" @@ -2476,24 +2455,24 @@ msgstr "" #: FlatCAMDB.py:1481 FlatCAMDB.py:1596 flatcamEditors/FlatCAMGeoEditor.py:499 #: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:230 #: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:217 -#: flatcamTools/ToolNCC.py:431 flatcamTools/ToolNCC.py:2395 -#: flatcamTools/ToolNCC.py:2424 flatcamTools/ToolNCC.py:2693 -#: flatcamTools/ToolNCC.py:2725 flatcamTools/ToolPaint.py:390 -#: flatcamTools/ToolPaint.py:1834 tclCommands/TclCommandCopperClear.py:126 +#: 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" +msgstr "Standard" -#: FlatCAMDB.py:1481 FlatCAMDB.py:1596 defaults.py:395 defaults.py:427 +#: FlatCAMDB.py:1481 FlatCAMDB.py:1596 defaults.py:391 defaults.py:423 #: flatcamEditors/FlatCAMGeoEditor.py:499 #: flatcamEditors/FlatCAMGeoEditor.py:569 #: flatcamEditors/FlatCAMGeoEditor.py:5152 #: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:230 #: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:217 -#: flatcamTools/ToolNCC.py:431 flatcamTools/ToolNCC.py:2401 -#: flatcamTools/ToolNCC.py:2429 flatcamTools/ToolNCC.py:2699 -#: flatcamTools/ToolNCC.py:2731 flatcamTools/ToolPaint.py:390 -#: flatcamTools/ToolPaint.py:1848 tclCommands/TclCommandCopperClear.py:128 +#: 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 "La graine" @@ -2503,7 +2482,7 @@ msgstr "La graine" #: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:230 #: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:217 #: flatcamTools/ToolNCC.py:431 flatcamTools/ToolPaint.py:390 -#: flatcamTools/ToolPaint.py:699 flatcamTools/ToolPaint.py:1862 +#: flatcamTools/ToolPaint.py:699 flatcamTools/ToolPaint.py:1857 #: tclCommands/TclCommandCopperClear.py:130 tclCommands/TclCommandPaint.py:129 msgid "Lines" msgstr "Lignes" @@ -2546,7 +2525,7 @@ msgstr "" #: FlatCAMDB.py:1509 flatcamEditors/FlatCAMGeoEditor.py:612 #: flatcamEditors/FlatCAMGrbEditor.py:5311 flatcamGUI/ObjectUI.py:143 -#: flatcamGUI/ObjectUI.py:1497 flatcamGUI/ObjectUI.py:2326 +#: flatcamGUI/ObjectUI.py:1497 flatcamGUI/ObjectUI.py:2246 #: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:255 #: flatcamGUI/preferences/tools/ToolsTransformPrefGroupUI.py:142 #: flatcamTools/ToolNCC.py:459 flatcamTools/ToolTransform.py:28 @@ -2581,12 +2560,11 @@ msgstr "" "La quantité (pourcentage) de la largeur d'outil qui chevauche chaque passe " "d'outil.\n" "Ajustez la valeur en commençant par des valeurs inférieures\n" -"et l'augmenter si les zones à peindre sont encore\n" -"pas peint.\n" +"et l'augmenter si les zones à travaillé ne le sont pas.\n" "Valeurs inférieures = traitement plus rapide, exécution plus rapide sur " "CNC.\n" "Valeurs supérieures = traitement lent et exécution lente sur CNC\n" -"en raison de trop de chemins." +"en raison de plus de chemins." #: FlatCAMDB.py:1569 flatcamEditors/FlatCAMGeoEditor.py:473 #: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:185 @@ -2598,7 +2576,7 @@ msgid "" msgstr "" "Distance à éviter\n" "les bords du polygone à\n" -"être peint." +"être travailler." #: FlatCAMDB.py:1584 flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:200 #: flatcamTools/ToolPaint.py:367 @@ -2626,12 +2604,12 @@ msgstr "" #: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:217 #: flatcamTools/ToolPaint.py:390 flatcamTools/ToolPaint.py:392 #: flatcamTools/ToolPaint.py:693 flatcamTools/ToolPaint.py:698 -#: flatcamTools/ToolPaint.py:1876 tclCommands/TclCommandPaint.py:131 +#: flatcamTools/ToolPaint.py:1871 tclCommands/TclCommandPaint.py:131 msgid "Laser_lines" msgstr "Lignes_laser" #: FlatCAMDB.py:1596 flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:217 -#: flatcamTools/ToolPaint.py:390 flatcamTools/ToolPaint.py:2027 +#: flatcamTools/ToolPaint.py:390 flatcamTools/ToolPaint.py:2022 #: tclCommands/TclCommandPaint.py:133 msgid "Combo" msgstr "Combo" @@ -2688,7 +2666,7 @@ msgstr "G-Code de GERBERS" #: camlib.py:597 msgid "self.solid_geometry is neither BaseGeometry or list." -msgstr "self.solid_geometry n'est ni BaseGeometry ni une liste." +msgstr "self.solid_géométrie n'est ni BaseGeometry ni une liste." #: camlib.py:970 msgid "Pass" @@ -2697,11 +2675,11 @@ msgstr "Passer" #: camlib.py:981 flatcamGUI/preferences/gerber/GerberAdvOptPrefGroupUI.py:146 #: flatcamObjects/FlatCAMGerber.py:497 flatcamTools/ToolCopperThieving.py:1016 #: flatcamTools/ToolCopperThieving.py:1205 -#: flatcamTools/ToolCopperThieving.py:1217 flatcamTools/ToolNCC.py:2050 -#: flatcamTools/ToolNCC.py:2158 flatcamTools/ToolNCC.py:2172 -#: flatcamTools/ToolNCC.py:3103 flatcamTools/ToolNCC.py:3208 -#: flatcamTools/ToolNCC.py:3223 flatcamTools/ToolNCC.py:3489 -#: flatcamTools/ToolNCC.py:3590 flatcamTools/ToolNCC.py:3605 +#: 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" @@ -2774,7 +2752,7 @@ msgid "" "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, " +"Le champ Toolchange X, Y dans Edition -> Paramètres doit être au format (x, " "y)\n" "mais maintenant il n'y a qu'une seule valeur, pas deux. " @@ -2783,7 +2761,7 @@ 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 "" -"Le champ Fin du déplacement X, Y dans Edition -> Préférences doit être au " +"Le champ Fin du déplacement X, Y dans Edition -> Paramètres doit être au " "format (x, y) mais maintenant il n'y a qu'une seule valeur, pas deux." #: camlib.py:2770 @@ -2808,7 +2786,7 @@ msgstr "Le fichier Excellon chargé n'a pas d'exercices" #: camlib.py:3498 msgid "Finished G-Code generation..." -msgstr "Fini la génération de code G ..." +msgstr "Fini la génération de GCode ..." #: camlib.py:3600 msgid "" @@ -2816,7 +2794,7 @@ msgid "" "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, " +"Le champ Toolchange X, Y dans Edition -> Paramètres doit être au format (x, " "y)\n" "mais maintenant il n'y a qu'une seule valeur, pas deux." @@ -2866,11 +2844,11 @@ msgstr "Le paramètre Z voyage est zéro. Ceci est dangereux, ignorer le fichier #: camlib.py:3668 camlib.py:4059 msgid "Indexing geometry before generating G-Code..." -msgstr "Indexer la géométrie avant de générer le code G ..." +msgstr "Indexer la géométrie avant de générer le GCode ..." #: camlib.py:3812 camlib.py:4201 msgid "Finished G-Code generation" -msgstr "Génération de code G terminée" +msgstr "Génération de GCode terminée" #: camlib.py:3812 msgid "paths traced" @@ -2885,7 +2863,7 @@ 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." +"solid_géométrie." #: camlib.py:3910 msgid "" @@ -2893,7 +2871,7 @@ msgid "" "Raise the value (in module) and try again." msgstr "" "La valeur de décalage de l'outil est trop négative pour pouvoir être " -"utilisée pour current_geometry.\n" +"utilisée pour current_géométrie.\n" "Augmentez la valeur (dans le module) et essayez à nouveau." #: camlib.py:4201 @@ -2928,28 +2906,28 @@ msgstr "Coordonnées G91 non implémentées ..." msgid "Unifying Geometry from parsed Geometry segments" msgstr "Unifier la géométrie à partir de segments de géométrie analysés" -#: defaults.py:401 +#: defaults.py:397 #: flatcamGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:86 #: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:309 #: flatcamTools/ToolCopperThieving.py:125 flatcamTools/ToolNCC.py:535 -#: flatcamTools/ToolNCC.py:1306 flatcamTools/ToolNCC.py:1634 -#: flatcamTools/ToolNCC.py:1919 flatcamTools/ToolNCC.py:1983 -#: flatcamTools/ToolNCC.py:2967 flatcamTools/ToolNCC.py:2976 +#: 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 "Lui-même" -#: defaults.py:428 flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:280 -#: flatcamTools/ToolPaint.py:486 flatcamTools/ToolPaint.py:1427 +#: defaults.py:424 flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:280 +#: flatcamTools/ToolPaint.py:486 flatcamTools/ToolPaint.py:1422 #: tclCommands/TclCommandPaint.py:162 msgid "All Polygons" msgstr "Tous les polygones" -#: defaults.py:739 +#: defaults.py:735 msgid "Could not load defaults file." msgstr "Impossible de charger le fichier par défaut." -#: defaults.py:752 +#: defaults.py:748 msgid "Failed to parse defaults file." msgstr "Échec de l'analyse du fichier par défaut." @@ -3087,7 +3065,7 @@ msgstr "Terminé. Percer des trous copiés." #: flatcamEditors/FlatCAMExcEditor.py:1557 #: flatcamGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:26 msgid "Excellon Editor" -msgstr "Excellent éditeur" +msgstr "Editeur Excellon" #: flatcamEditors/FlatCAMExcEditor.py:1564 #: flatcamEditors/FlatCAMGrbEditor.py:2462 @@ -3481,10 +3459,10 @@ msgstr "Total de Fentes" #: flatcamEditors/FlatCAMGeoEditor.py:1217 #: flatcamEditors/FlatCAMGeoEditor.py:1252 #: flatcamEditors/FlatCAMGeoEditor.py:1280 -#: flatcamObjects/FlatCAMGeometry.py:599 flatcamObjects/FlatCAMGeometry.py:1033 -#: flatcamObjects/FlatCAMGeometry.py:1780 -#: flatcamObjects/FlatCAMGeometry.py:2424 flatcamTools/ToolNCC.py:1498 -#: flatcamTools/ToolPaint.py:1249 flatcamTools/ToolPaint.py:1420 +#: flatcamObjects/FlatCAMGeometry.py:571 flatcamObjects/FlatCAMGeometry.py:1005 +#: flatcamObjects/FlatCAMGeometry.py:1752 +#: flatcamObjects/FlatCAMGeometry.py:2396 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." @@ -3573,8 +3551,7 @@ msgid "Round" msgstr "Rond" #: flatcamEditors/FlatCAMGeoEditor.py:95 -#: flatcamEditors/FlatCAMGrbEditor.py:2632 flatcamGUI/ObjectUI.py:2073 -#: flatcamGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:217 +#: flatcamEditors/FlatCAMGrbEditor.py:2632 #: flatcamGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py:68 #: flatcamGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py:175 #: flatcamGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:68 @@ -3639,7 +3616,7 @@ msgstr "Outil Texte" #: flatcamEditors/FlatCAMGeoEditor.py:405 flatcamGUI/FlatCAMGUI.py:511 #: flatcamGUI/FlatCAMGUI.py:1158 flatcamGUI/ObjectUI.py:818 #: flatcamGUI/ObjectUI.py:1662 flatcamObjects/FlatCAMExcellon.py:742 -#: flatcamObjects/FlatCAMExcellon.py:1084 flatcamObjects/FlatCAMGeometry.py:759 +#: 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" @@ -3648,7 +3625,7 @@ msgstr "Outil" #: flatcamEditors/FlatCAMGeoEditor.py:439 flatcamGUI/ObjectUI.py:364 #: flatcamGUI/preferences/gerber/GerberOptPrefGroupUI.py:43 msgid "Tool dia" -msgstr "Outil dia" +msgstr "Diam Outil" #: flatcamEditors/FlatCAMGeoEditor.py:441 msgid "Diameter of the tool to be used in the operation." @@ -3679,7 +3656,7 @@ msgid "Paint" msgstr "Peindre" #: flatcamEditors/FlatCAMGeoEditor.py:547 flatcamGUI/FlatCAMGUI.py:924 -#: flatcamGUI/FlatCAMGUI.py:2628 flatcamGUI/ObjectUI.py:2139 +#: flatcamGUI/FlatCAMGUI.py:2628 flatcamGUI/ObjectUI.py:2059 #: flatcamTools/ToolPaint.py:43 flatcamTools/ToolPaint.py:738 msgid "Paint Tool" msgstr "Outil de Peinture" @@ -3799,7 +3776,7 @@ msgstr "" #: flatcamEditors/FlatCAMGeoEditor.py:711 #: flatcamEditors/FlatCAMGrbEditor.py:5410 flatcamTools/ToolTransform.py:467 msgid "Skew X" -msgstr "Fausser X" +msgstr "Inclinaison X" #: flatcamEditors/FlatCAMGeoEditor.py:713 #: flatcamEditors/FlatCAMGeoEditor.py:733 @@ -3822,7 +3799,7 @@ msgstr "Angle Y:" #: flatcamEditors/FlatCAMGeoEditor.py:731 #: flatcamEditors/FlatCAMGrbEditor.py:5430 flatcamTools/ToolTransform.py:468 msgid "Skew Y" -msgstr "Fausser Y" +msgstr "Inclinaison Y" #: flatcamEditors/FlatCAMGeoEditor.py:759 #: flatcamEditors/FlatCAMGrbEditor.py:5458 @@ -4317,9 +4294,8 @@ msgstr "Cliquez sur le coin opposé pour terminer ..." msgid "Done. Rectangle completed." msgstr "Terminé. Rectangle complété." -#: flatcamEditors/FlatCAMGeoEditor.py:2410 -#: flatcamObjects/FlatCAMGeometry.py:2648 flatcamTools/ToolNCC.py:1733 -#: flatcamTools/ToolPaint.py:1628 +#: 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 " @@ -4446,15 +4422,15 @@ msgstr "Éditeur de Géométrie" #: flatcamEditors/FlatCAMGeoEditor.py:3345 #: flatcamEditors/FlatCAMGrbEditor.py:2488 #: flatcamEditors/FlatCAMGrbEditor.py:3969 flatcamGUI/ObjectUI.py:263 -#: flatcamGUI/ObjectUI.py:1497 flatcamGUI/ObjectUI.py:2326 +#: flatcamGUI/ObjectUI.py:1497 flatcamGUI/ObjectUI.py:2246 #: flatcamTools/ToolCutOut.py:95 msgid "Type" msgstr "Type" #: flatcamEditors/FlatCAMGeoEditor.py:3345 flatcamGUI/ObjectUI.py:218 #: flatcamGUI/ObjectUI.py:742 flatcamGUI/ObjectUI.py:1433 -#: flatcamGUI/ObjectUI.py:2235 flatcamGUI/ObjectUI.py:2539 -#: flatcamGUI/ObjectUI.py:2606 flatcamTools/ToolCalibration.py:234 +#: flatcamGUI/ObjectUI.py:2155 flatcamGUI/ObjectUI.py:2459 +#: flatcamGUI/ObjectUI.py:2526 flatcamTools/ToolCalibration.py:234 #: flatcamTools/ToolFiducials.py:73 msgid "Name" msgstr "Nom" @@ -4468,8 +4444,6 @@ msgid "Line" msgstr "Ligne" #: flatcamEditors/FlatCAMGeoEditor.py:3591 flatcamGUI/FlatCAMGUI.py:2202 -#: flatcamGUI/ObjectUI.py:2074 -#: flatcamGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:218 #: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:328 #: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:292 #: flatcamTools/ToolNCC.py:584 flatcamTools/ToolPaint.py:528 @@ -4731,12 +4705,12 @@ msgstr "Terminé. Ouvertures copiées." #: flatcamEditors/FlatCAMGrbEditor.py:2455 flatcamGUI/FlatCAMGUI.py:2233 #: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:27 msgid "Gerber Editor" -msgstr "Gerber éditeur" +msgstr "Editeur Gerber" #: flatcamEditors/FlatCAMGrbEditor.py:2475 flatcamGUI/ObjectUI.py:228 #: flatcamTools/ToolProperties.py:159 msgid "Apertures" -msgstr "Les ouvertures" +msgstr "Ouvertures" #: flatcamEditors/FlatCAMGrbEditor.py:2477 flatcamGUI/ObjectUI.py:230 msgid "Apertures Table for the Gerber Object." @@ -4845,7 +4819,7 @@ msgstr "" #: flatcamEditors/FlatCAMGrbEditor.py:2574 msgid "Add/Delete Aperture" -msgstr "Ajouter / Supprimer une Ouverture" +msgstr "Ajouter / Supprimer une Sélection" #: flatcamEditors/FlatCAMGrbEditor.py:2576 msgid "Add/Delete an aperture in the aperture table" @@ -5156,11 +5130,11 @@ msgstr "Décalage géométrique de la forme Y annulé" #: flatcamEditors/FlatCAMGrbEditor.py:6289 msgid "Geometry shape skew X cancelled" -msgstr "Fausser géométrique de la forme X annulé" +msgstr "Inclinaison géométrique de la forme X annulé" #: flatcamEditors/FlatCAMGrbEditor.py:6304 msgid "Geometry shape skew Y cancelled" -msgstr "Fausser géométrique de la forme Y annulé" +msgstr "Inclinaison géométrique de la forme Y annulé" #: flatcamEditors/FlatCAMTextEditor.py:74 msgid "Print Preview" @@ -5207,7 +5181,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:486 -#: flatcamGUI/ObjectUI.py:2219 +#: flatcamGUI/ObjectUI.py:2139 #: flatcamGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:54 #: flatcamGUI/preferences/gerber/GerberOptPrefGroupUI.py:88 msgid "All" @@ -5330,34 +5304,34 @@ msgstr "Document\tD" msgid "Will create a new, empty Document Object." msgstr "Crée un nouvel objet de document vide." -#: flatcamGUI/FlatCAMGUI.py:129 flatcamGUI/FlatCAMGUI.py:4420 +#: flatcamGUI/FlatCAMGUI.py:129 flatcamGUI/FlatCAMGUI.py:4397 #: flatcamTools/ToolPcbWizard.py:62 flatcamTools/ToolPcbWizard.py:69 msgid "Open" -msgstr "Ouvert" +msgstr "Ouvrir" #: flatcamGUI/FlatCAMGUI.py:134 msgid "Open &Project ..." -msgstr "Projet ouvert ..." +msgstr "Ouvrir Projet ..." -#: flatcamGUI/FlatCAMGUI.py:140 flatcamGUI/FlatCAMGUI.py:4430 +#: flatcamGUI/FlatCAMGUI.py:140 flatcamGUI/FlatCAMGUI.py:4407 msgid "Open &Gerber ...\tCtrl+G" -msgstr "Gerber ouvert...\tCtrl+G" +msgstr "Ouvrir Gerber...\tCtrl+G" -#: flatcamGUI/FlatCAMGUI.py:145 flatcamGUI/FlatCAMGUI.py:4435 +#: flatcamGUI/FlatCAMGUI.py:145 flatcamGUI/FlatCAMGUI.py:4412 msgid "Open &Excellon ...\tCtrl+E" -msgstr "Excellon ouvert ...\tCtrl+E" +msgstr "Ouvrir Excellon ...\tCtrl+E" -#: flatcamGUI/FlatCAMGUI.py:150 flatcamGUI/FlatCAMGUI.py:4440 +#: flatcamGUI/FlatCAMGUI.py:150 flatcamGUI/FlatCAMGUI.py:4417 msgid "Open G-&Code ..." msgstr "Ouvrir G-Code ..." #: flatcamGUI/FlatCAMGUI.py:157 msgid "Open Config ..." -msgstr "Ouvrez la configuration ..." +msgstr "Configuration ..." #: flatcamGUI/FlatCAMGUI.py:162 msgid "Recent projects" -msgstr "Les projets récents" +msgstr "Projets récents" #: flatcamGUI/FlatCAMGUI.py:164 msgid "Recent files" @@ -5366,11 +5340,11 @@ msgstr "Fichiers récents" #: flatcamGUI/FlatCAMGUI.py:167 flatcamGUI/FlatCAMGUI.py:753 #: flatcamGUI/FlatCAMGUI.py:1339 msgid "Save" -msgstr "Sauver" +msgstr "Enregister" #: flatcamGUI/FlatCAMGUI.py:171 msgid "&Save Project ...\tCtrl+S" -msgstr "Sauvegarder le projet...\tCtrl+S" +msgstr "Enregistrer le projet...\tCtrl+S" #: flatcamGUI/FlatCAMGUI.py:176 msgid "Save Project &As ...\tCtrl+Shift+S" @@ -5378,7 +5352,7 @@ msgstr "Enregistrer le projet sous...\tCtrl+Shift+S" #: flatcamGUI/FlatCAMGUI.py:191 msgid "Scripting" -msgstr "Scripting" +msgstr "Scripte" #: flatcamGUI/FlatCAMGUI.py:195 flatcamGUI/FlatCAMGUI.py:903 #: flatcamGUI/FlatCAMGUI.py:2607 @@ -5388,26 +5362,26 @@ msgstr "Nouveau script ..." #: flatcamGUI/FlatCAMGUI.py:197 flatcamGUI/FlatCAMGUI.py:905 #: flatcamGUI/FlatCAMGUI.py:2609 msgid "Open Script ..." -msgstr "Script ouvert ..." +msgstr "Ouvrir Script ..." #: flatcamGUI/FlatCAMGUI.py:199 msgid "Open Example ..." msgstr "Ouvrir l'exemple ..." #: flatcamGUI/FlatCAMGUI.py:201 flatcamGUI/FlatCAMGUI.py:907 -#: flatcamGUI/FlatCAMGUI.py:2611 flatcamGUI/FlatCAMGUI.py:4409 +#: flatcamGUI/FlatCAMGUI.py:2611 flatcamGUI/FlatCAMGUI.py:4386 msgid "Run Script ..." msgstr "Exécutez le script ..." -#: flatcamGUI/FlatCAMGUI.py:203 flatcamGUI/FlatCAMGUI.py:4411 +#: flatcamGUI/FlatCAMGUI.py:203 flatcamGUI/FlatCAMGUI.py:4388 msgid "" "Will run the opened Tcl Script thus\n" "enabling the automation of certain\n" "functions of FlatCAM." msgstr "" -"Va exécuter le script Tcl ouvert ainsi\n" -"permettant l’automatisation de certaines\n" -"fonctions de FlatCAM." +"Exécute le script Tcl ouvert.\n" +"Permet l’automatisation de \n" +"fonctions dans FlatCAM." #: flatcamGUI/FlatCAMGUI.py:218 msgid "Import" @@ -5455,9 +5429,9 @@ msgid "" "the saved image will contain the visual \n" "information currently in FlatCAM Plot Area." msgstr "" -"Exportera une image au format PNG,\n" -"l'image enregistrée contiendra le visuel\n" -"informations actuellement dans la zone de tracé FlatCAM." +"Exporte une image au format PNG.\n" +"L'image enregistrée contiendra le visuel\n" +"de la zone de tracé de FlatCAM." #: flatcamGUI/FlatCAMGUI.py:266 msgid "Export &Excellon ..." @@ -5471,7 +5445,7 @@ msgid "" msgstr "" "Exportera un objet Excellon en tant que fichier Excellon,\n" "le format des coordonnées, les unités de fichier et les zéros\n" -"sont définies dans Préférences -> Excellon Export." +"sont définies dans Paramètres -> Excellon Export." #: flatcamGUI/FlatCAMGUI.py:275 msgid "Export &Gerber ..." @@ -5485,22 +5459,22 @@ msgid "" msgstr "" "Exportera un objet Gerber en tant que fichier Gerber,\n" "le format des coordonnées, les unités de fichier et les zéros\n" -"sont définies dans Préférences -> Exportation Gerber." +"sont définies dans Paramètres -> Exportation Gerber." #: flatcamGUI/FlatCAMGUI.py:287 msgid "Backup" -msgstr "Sauvegarde" +msgstr "F. Paramètres" #: flatcamGUI/FlatCAMGUI.py:292 msgid "Import Preferences from file ..." -msgstr "Importer les préférences du fichier ..." +msgstr "Importer les paramètres …" #: flatcamGUI/FlatCAMGUI.py:298 msgid "Export Preferences to file ..." -msgstr "Exporter les préférences dans un fichier ..." +msgstr "Exporter les paramètres ..." #: flatcamGUI/FlatCAMGUI.py:306 -#: flatcamGUI/preferences/PreferencesUIManager.py:1119 +#: flatcamGUI/preferences/PreferencesUIManager.py:1115 msgid "Save Preferences" msgstr "Enregistrer les préf" @@ -5510,7 +5484,7 @@ msgstr "Imprimer (PDF)" #: flatcamGUI/FlatCAMGUI.py:320 msgid "E&xit" -msgstr "Sortie" +msgstr "Quitter" #: flatcamGUI/FlatCAMGUI.py:328 flatcamGUI/FlatCAMGUI.py:747 #: flatcamGUI/FlatCAMGUI.py:2286 @@ -5519,7 +5493,7 @@ msgstr "Modifier" #: flatcamGUI/FlatCAMGUI.py:332 msgid "Edit Object\tE" -msgstr "Editer un objet\tE" +msgstr "Modifier un objet\tE" #: flatcamGUI/FlatCAMGUI.py:334 msgid "Close Editor\tCtrl+S" @@ -5575,28 +5549,28 @@ msgid "" "Will convert a Geometry object from single_geometry type\n" "to a multi_geometry type." msgstr "" -"Convertira un objet Geometry à partir d'un type de géométrie unique\n" +"Convertira un objet Géométrie à partir d'un type de géométrie unique\n" "à un type multi géométrie." #: flatcamGUI/FlatCAMGUI.py:372 msgid "Convert Multi to SingleGeo" -msgstr "Convertir Multi en Unique Geo" +msgstr "Convertir Multi en Unique Géo" #: flatcamGUI/FlatCAMGUI.py:374 msgid "" "Will convert a Geometry object from multi_geometry type\n" "to a single_geometry type." msgstr "" -"Convertira un objet Geometry de type multi geometry\n" -"à un seul type de géométrie." +"Convertira un objet multi-géométrie en un type simple-géométrie " +"(concaténation)." #: flatcamGUI/FlatCAMGUI.py:381 msgid "Convert Any to Geo" -msgstr "Convertir n'importe quel en Geo" +msgstr "Convertir en Géo" #: flatcamGUI/FlatCAMGUI.py:384 msgid "Convert Any to Gerber" -msgstr "Convertir n'importe lequel en gerber" +msgstr "Convertir en Gerber" #: flatcamGUI/FlatCAMGUI.py:390 msgid "&Copy\tCtrl+C" @@ -5632,11 +5606,11 @@ msgstr "Tout sélectionner\tCtrl+A" #: flatcamGUI/FlatCAMGUI.py:419 msgid "&Preferences\tShift+P" -msgstr "Préférences\tShift+P" +msgstr "Paramètres \tShift+P" #: flatcamGUI/FlatCAMGUI.py:425 flatcamTools/ToolProperties.py:155 msgid "Options" -msgstr "Les options" +msgstr "Options" #: flatcamGUI/FlatCAMGUI.py:427 msgid "&Rotate Selection\tShift+(R)" @@ -5644,11 +5618,11 @@ msgstr "Faire pivoter la sélection\tShift+(R)" #: flatcamGUI/FlatCAMGUI.py:432 msgid "&Skew on X axis\tShift+X" -msgstr "Fausser sur l'axe X\tShift+X" +msgstr "Inclinaison sur l'axe X\tShift+X" #: flatcamGUI/FlatCAMGUI.py:434 msgid "S&kew on Y axis\tShift+Y" -msgstr "Fausser sur l'axe Y\tShift+Y" +msgstr "Inclinaison sur l'axe Y\tShift+Y" #: flatcamGUI/FlatCAMGUI.py:439 msgid "Flip on &X axis\tX" @@ -5688,7 +5662,7 @@ msgstr "Ajustement du Zoom\tV" #: flatcamGUI/FlatCAMGUI.py:467 msgid "&Zoom In\t=" -msgstr "Agrandir\t=" +msgstr "Zoomer\t=" #: flatcamGUI/FlatCAMGUI.py:469 msgid "&Zoom Out\t-" @@ -5752,15 +5726,15 @@ msgstr "Signaler une erreur" #: flatcamGUI/FlatCAMGUI.py:534 msgid "Excellon Specification" -msgstr "Excellon Spécification" +msgstr "Documentation Excellon" #: flatcamGUI/FlatCAMGUI.py:536 msgid "Gerber Specification" -msgstr "Gerber Spécifications" +msgstr "Documentation Gerber" #: flatcamGUI/FlatCAMGUI.py:541 msgid "Shortcuts List\tF3" -msgstr "Liste des raccourcis\tF3" +msgstr "Raccourcis Clavier\tF3" #: flatcamGUI/FlatCAMGUI.py:543 msgid "YouTube Channel\tF4" @@ -5836,7 +5810,7 @@ msgstr "Basculer le Coin accrocher\tK" #: flatcamGUI/FlatCAMGUI.py:608 msgid ">Excellon Editor<" -msgstr ">Excellent Éditeur<" +msgstr ">Excellon Éditeur<" #: flatcamGUI/FlatCAMGUI.py:612 msgid "Add Drill Array\tA" @@ -5946,7 +5920,7 @@ msgstr "Voir la source" #: flatcamGUI/FlatCAMGUI.py:1072 flatcamGUI/FlatCAMGUI.py:2138 #: flatcamGUI/FlatCAMGUI.py:2282 flatcamGUI/FlatCAMGUI.py:2572 #: flatcamGUI/FlatCAMGUI.py:2775 flatcamGUI/ObjectUI.py:1617 -#: flatcamObjects/FlatCAMGeometry.py:502 flatcamTools/ToolPanelize.py:540 +#: flatcamObjects/FlatCAMGeometry.py:477 flatcamTools/ToolPanelize.py:540 #: flatcamTools/ToolPanelize.py:567 flatcamTools/ToolPanelize.py:660 #: flatcamTools/ToolPanelize.py:689 flatcamTools/ToolPanelize.py:751 msgid "Copy" @@ -5995,7 +5969,7 @@ msgstr "Barre d'outils de la Grille" #: flatcamGUI/FlatCAMGUI.py:841 flatcamGUI/FlatCAMGUI.py:2549 msgid "Open project" -msgstr "Projet ouvert" +msgstr "Ouvrir Projet" #: flatcamGUI/FlatCAMGUI.py:843 flatcamGUI/FlatCAMGUI.py:2551 msgid "Save project" @@ -6025,11 +5999,11 @@ msgstr "Supprimer" #: flatcamGUI/FlatCAMGUI.py:1935 flatcamGUI/FlatCAMGUI.py:2577 #: flatcamTools/ToolDistance.py:35 flatcamTools/ToolDistance.py:195 msgid "Distance Tool" -msgstr "Outil de Distance" +msgstr "Mesure" #: flatcamGUI/FlatCAMGUI.py:870 flatcamGUI/FlatCAMGUI.py:2579 msgid "Distance Min Tool" -msgstr "Outil Distance Min" +msgstr "Mesure Mini" #: flatcamGUI/FlatCAMGUI.py:872 flatcamGUI/FlatCAMGUI.py:1722 #: flatcamGUI/FlatCAMGUI.py:2581 @@ -6060,7 +6034,7 @@ msgstr "Effacer la Trace" #: flatcamGUI/FlatCAMGUI.py:889 flatcamGUI/FlatCAMGUI.py:1725 #: flatcamGUI/FlatCAMGUI.py:2595 msgid "Zoom In" -msgstr "Agrandir" +msgstr "Zoomer" #: flatcamGUI/FlatCAMGUI.py:891 flatcamGUI/FlatCAMGUI.py:1725 #: flatcamGUI/FlatCAMGUI.py:2597 @@ -6096,7 +6070,7 @@ msgid "Cutout Tool" msgstr "Outil de Découpe" #: flatcamGUI/FlatCAMGUI.py:922 flatcamGUI/FlatCAMGUI.py:2626 -#: flatcamGUI/ObjectUI.py:574 flatcamGUI/ObjectUI.py:2157 +#: flatcamGUI/ObjectUI.py:574 flatcamGUI/ObjectUI.py:2077 #: flatcamTools/ToolNCC.py:974 msgid "NCC Tool" msgstr "Outil de la NCC" @@ -6134,13 +6108,13 @@ msgstr "Outil de Optimal" #: flatcamGUI/FlatCAMGUI.py:943 flatcamGUI/FlatCAMGUI.py:1740 #: flatcamGUI/FlatCAMGUI.py:2647 msgid "Calculators Tool" -msgstr "Outil de Calcul" +msgstr "Calculatrice" #: flatcamGUI/FlatCAMGUI.py:947 flatcamGUI/FlatCAMGUI.py:1744 #: flatcamGUI/FlatCAMGUI.py:2651 flatcamTools/ToolQRCode.py:43 #: flatcamTools/ToolQRCode.py:382 msgid "QRCode Tool" -msgstr "Outil QRCode" +msgstr "QRCode" #: flatcamGUI/FlatCAMGUI.py:949 flatcamGUI/FlatCAMGUI.py:2653 #: flatcamTools/ToolCopperThieving.py:39 flatcamTools/ToolCopperThieving.py:568 @@ -6156,7 +6130,7 @@ msgstr "Outil Fiduciaire" #: flatcamGUI/FlatCAMGUI.py:954 flatcamGUI/FlatCAMGUI.py:2658 #: flatcamTools/ToolCalibration.py:37 flatcamTools/ToolCalibration.py:759 msgid "Calibration Tool" -msgstr "Outil d'Étalonnage" +msgstr "Réglage de l'assiette" #: flatcamGUI/FlatCAMGUI.py:956 flatcamGUI/FlatCAMGUI.py:1741 #: flatcamGUI/FlatCAMGUI.py:2660 @@ -6166,7 +6140,7 @@ msgstr "Outil de poinçonnage Gerber" #: flatcamGUI/FlatCAMGUI.py:958 flatcamGUI/FlatCAMGUI.py:2662 #: flatcamTools/ToolInvertGerber.py:31 msgid "Invert Gerber Tool" -msgstr "Outil de Inverser Gerber" +msgstr "Inverser Gerber" #: flatcamGUI/FlatCAMGUI.py:964 flatcamGUI/FlatCAMGUI.py:990 #: flatcamGUI/FlatCAMGUI.py:1042 flatcamGUI/FlatCAMGUI.py:2668 @@ -6176,38 +6150,38 @@ msgstr "Sélectionner" #: flatcamGUI/FlatCAMGUI.py:966 flatcamGUI/FlatCAMGUI.py:2670 msgid "Add Drill Hole" -msgstr "Ajouter une Forage" +msgstr "Ajouter un Perçage" #: flatcamGUI/FlatCAMGUI.py:968 flatcamGUI/FlatCAMGUI.py:2672 msgid "Add Drill Hole Array" -msgstr "Ajouter un Tableau de Forage" +msgstr "Ajouter un Tableau de Perçage" #: flatcamGUI/FlatCAMGUI.py:970 flatcamGUI/FlatCAMGUI.py:2020 #: flatcamGUI/FlatCAMGUI.py:2273 flatcamGUI/FlatCAMGUI.py:2676 msgid "Add Slot" -msgstr "Ajouter une Fente" +msgstr "Ajouter une découpe" #: flatcamGUI/FlatCAMGUI.py:972 flatcamGUI/FlatCAMGUI.py:2019 #: flatcamGUI/FlatCAMGUI.py:2275 flatcamGUI/FlatCAMGUI.py:2678 msgid "Add Slot Array" -msgstr "Ajouter un Tableau de Fente" +msgstr "Ajouter un Tableau de découpe" #: flatcamGUI/FlatCAMGUI.py:974 flatcamGUI/FlatCAMGUI.py:2278 #: flatcamGUI/FlatCAMGUI.py:2674 msgid "Resize Drill" -msgstr "Redimensionner Forage" +msgstr "Redimensionner découpe" #: flatcamGUI/FlatCAMGUI.py:978 flatcamGUI/FlatCAMGUI.py:2682 msgid "Copy Drill" -msgstr "Copier une Forage" +msgstr "Copier un perçage" #: flatcamGUI/FlatCAMGUI.py:980 flatcamGUI/FlatCAMGUI.py:2684 msgid "Delete Drill" -msgstr "Supprimer une Forage" +msgstr "Supprimer un perçage" #: flatcamGUI/FlatCAMGUI.py:984 flatcamGUI/FlatCAMGUI.py:2688 msgid "Move Drill" -msgstr "Déplacer uen Forage" +msgstr "Déplacer un perçage" #: flatcamGUI/FlatCAMGUI.py:992 flatcamGUI/FlatCAMGUI.py:2696 msgid "Add Circle" @@ -6245,7 +6219,7 @@ msgstr "Peindre une Forme" #: flatcamGUI/FlatCAMGUI.py:2214 flatcamGUI/FlatCAMGUI.py:2259 #: flatcamGUI/FlatCAMGUI.py:2715 flatcamGUI/FlatCAMGUI.py:2771 msgid "Eraser" -msgstr "La Gomme" +msgstr "Effacer" #: flatcamGUI/FlatCAMGUI.py:1015 flatcamGUI/FlatCAMGUI.py:2719 msgid "Polygon Union" @@ -6265,7 +6239,7 @@ msgstr "Soustraction de Polygone" #: flatcamGUI/FlatCAMGUI.py:1026 flatcamGUI/FlatCAMGUI.py:2730 msgid "Cut Path" -msgstr "Chemin Coupé" +msgstr "Coupé Piste" #: flatcamGUI/FlatCAMGUI.py:1028 msgid "Copy Shape(s)" @@ -6280,7 +6254,7 @@ msgstr "Supprimer la Forme" #: flatcamGUI/FlatCAMGUI.py:2736 flatcamGUI/FlatCAMGUI.py:2779 #: flatcamGUI/ObjectUI.py:109 msgid "Transformations" -msgstr "Transformations" +msgstr "Changement d'échelle" #: flatcamGUI/FlatCAMGUI.py:1036 msgid "Move Objects " @@ -6358,7 +6332,7 @@ msgstr "Max. distance d'aimant" #: flatcamGUI/FlatCAMGUI.py:1149 msgid "Selected" -msgstr "Choisi" +msgstr "Sélection" #: flatcamGUI/FlatCAMGUI.py:1177 flatcamGUI/FlatCAMGUI.py:1185 msgid "Plot Area" @@ -6388,7 +6362,7 @@ msgid "CNC-JOB" msgstr "CNC-JOB" #: flatcamGUI/FlatCAMGUI.py:1266 flatcamGUI/ObjectUI.py:563 -#: flatcamGUI/ObjectUI.py:2132 +#: flatcamGUI/ObjectUI.py:2052 msgid "TOOLS" msgstr "OUTILS" @@ -6419,7 +6393,7 @@ msgstr "Ouvrir le dossier Pref" #: flatcamGUI/FlatCAMGUI.py:1313 msgid "Open the folder where FlatCAM save the preferences files." -msgstr "Ouvrez le dossier où FlatCAM enregistre les fichiers de préférences." +msgstr "Ouvrez le dossier où FlatCAM enregistre les fichiers de paramètres." #: flatcamGUI/FlatCAMGUI.py:1317 flatcamGUI/FlatCAMGUI.py:2517 msgid "Clear GUI Settings" @@ -6439,7 +6413,7 @@ msgstr "Appliquer" #: flatcamGUI/FlatCAMGUI.py:1335 msgid "Apply the current preferences without saving to a file." -msgstr "Appliquez les préférences actuelles sans enregistrer dans un fichier." +msgstr "Appliquez les paramètres actuelles sans enregistrer dans un fichier." #: flatcamGUI/FlatCAMGUI.py:1342 msgid "" @@ -6447,12 +6421,12 @@ msgid "" "which is the file storing the working default preferences." msgstr "" "Enregistrer les paramètres actuels dans le fichier 'current_defaults'\n" -"qui est le fichier stockant les préférences de travail par défaut." +"qui est le fichier stockant les paramètres de travail par défaut." #: flatcamGUI/FlatCAMGUI.py:1350 msgid "Will not save the changes and will close the preferences window." msgstr "" -"N'enregistrera pas les modifications et fermera la fenêtre des préférences." +"N'enregistrera pas les modifications et fermera la fenêtre des paramètres." #: flatcamGUI/FlatCAMGUI.py:1719 msgid "SHOW SHORTCUT LIST" @@ -6576,7 +6550,7 @@ msgstr "Outil de Distance Minimum" #: flatcamGUI/FlatCAMGUI.py:1735 msgid "Open Preferences Window" -msgstr "Ouvrir la fenêtre de Préférences" +msgstr "Ouvrir la fenêtre de Paramètres " #: flatcamGUI/FlatCAMGUI.py:1736 msgid "Rotate by 90 degree CCW" @@ -6592,11 +6566,11 @@ msgstr "Basculer l'espace de travail" #: flatcamGUI/FlatCAMGUI.py:1736 msgid "Skew on X axis" -msgstr "Fausser sur l'axe X" +msgstr "Inclinaison sur l'axe X" #: flatcamGUI/FlatCAMGUI.py:1737 msgid "Skew on Y axis" -msgstr "Fausser sur l'axe Y" +msgstr "Inclinaison sur l'axe Y" #: flatcamGUI/FlatCAMGUI.py:1740 msgid "2-Sided PCB Tool" @@ -6781,11 +6755,11 @@ msgstr "Refléter la forme sur l'axe Y" #: flatcamGUI/FlatCAMGUI.py:1934 msgid "Skew shape on X axis" -msgstr "Fausser de la forme sur l'axe X" +msgstr "Inclinaison de la forme sur l'axe X" #: flatcamGUI/FlatCAMGUI.py:1934 msgid "Skew shape on Y axis" -msgstr "Fausser de la forme sur l'axe Y" +msgstr "Inclinaison de la forme sur l'axe Y" #: flatcamGUI/FlatCAMGUI.py:1934 msgid "Editor Transformation Tool" @@ -6915,7 +6889,7 @@ msgstr "Nouveau" #: 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:1300 +#: 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 @@ -6931,7 +6905,7 @@ msgstr "Géométrie" #: flatcamTools/ToolCopperThieving.py:158 #: flatcamTools/ToolCopperThieving.py:604 flatcamTools/ToolDblSided.py:225 #: flatcamTools/ToolFilm.py:359 flatcamTools/ToolNCC.py:558 -#: flatcamTools/ToolNCC.py:1300 flatcamTools/ToolPaint.py:502 +#: 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" @@ -6939,7 +6913,7 @@ msgstr "Excellon" #: flatcamGUI/FlatCAMGUI.py:2180 msgid "Grids" -msgstr "Des grilles" +msgstr "Pas grilles" #: flatcamGUI/FlatCAMGUI.py:2187 msgid "Clear Plot" @@ -6981,7 +6955,7 @@ msgstr "Intersection" msgid "Subtraction" msgstr "Soustraction" -#: flatcamGUI/FlatCAMGUI.py:2224 flatcamGUI/ObjectUI.py:2221 +#: flatcamGUI/FlatCAMGUI.py:2224 flatcamGUI/ObjectUI.py:2141 #: flatcamGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:56 msgid "Cut" msgstr "Couper" @@ -7028,7 +7002,7 @@ msgstr "Verrouiller les barres d'outils" #: flatcamGUI/FlatCAMGUI.py:2505 msgid "FlatCAM Preferences Folder opened." -msgstr "Dossier Préférences FlatCAM ouvert." +msgstr "Dossier Paramètres FlatCAM ouvert." #: flatcamGUI/FlatCAMGUI.py:2516 msgid "Are you sure you want to delete the GUI Settings? \n" @@ -7120,25 +7094,25 @@ msgstr "Ajout de l'outil annulé ..." msgid "Distance Tool exit..." msgstr "Distance Outil sortie ..." -#: flatcamGUI/FlatCAMGUI.py:4323 flatcamGUI/FlatCAMGUI.py:4330 +#: flatcamGUI/FlatCAMGUI.py:4300 flatcamGUI/FlatCAMGUI.py:4307 msgid "Idle." msgstr "Au repos." -#: flatcamGUI/FlatCAMGUI.py:4361 +#: flatcamGUI/FlatCAMGUI.py:4338 msgid "Application started ..." -msgstr "L'application a commencé ..." +msgstr "Bienvenu dans FlatCam ..." -#: flatcamGUI/FlatCAMGUI.py:4362 +#: flatcamGUI/FlatCAMGUI.py:4339 msgid "Hello!" -msgstr "Salut!" +msgstr "Bonjours !" -#: flatcamGUI/FlatCAMGUI.py:4424 +#: flatcamGUI/FlatCAMGUI.py:4401 msgid "Open Project ..." -msgstr "Projet ouvert ..." +msgstr "Ouvrir Projet ..." -#: flatcamGUI/FlatCAMGUI.py:4450 +#: flatcamGUI/FlatCAMGUI.py:4427 msgid "Exit" -msgstr "Sortie" +msgstr "Quitter" #: flatcamGUI/GUIElements.py:2513 #: flatcamGUI/preferences/tools/ToolsFilmPrefGroupUI.py:180 @@ -7208,7 +7182,7 @@ msgstr "" "Le mode Avancé rendra disponible tous les paramètres.\n" "\n" "Pour changer le niveau de l'application, allez à:\n" -"Édition -> Préférences -> Général et vérifiez:\n" +"Édition -> Paramètres -> Général et vérifiez:\n" "Bouton radio 'APP. NIVEAU'." #: flatcamGUI/ObjectUI.py:111 @@ -7245,10 +7219,10 @@ msgstr "Effectuer l'opération de décalage." #: flatcamGUI/ObjectUI.py:178 msgid "Gerber Object" -msgstr "Objet de Gerber" +msgstr "Objet Gerber" #: flatcamGUI/ObjectUI.py:187 flatcamGUI/ObjectUI.py:730 -#: flatcamGUI/ObjectUI.py:1426 flatcamGUI/ObjectUI.py:2205 +#: flatcamGUI/ObjectUI.py:1426 flatcamGUI/ObjectUI.py:2125 #: flatcamGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:30 #: flatcamGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:33 #: flatcamGUI/preferences/geometry/GeometryGenPrefGroupUI.py:31 @@ -7286,7 +7260,7 @@ msgid "Plot" msgstr "Dessin" #: flatcamGUI/ObjectUI.py:211 flatcamGUI/ObjectUI.py:771 -#: flatcamGUI/ObjectUI.py:1486 flatcamGUI/ObjectUI.py:2315 +#: flatcamGUI/ObjectUI.py:1486 flatcamGUI/ObjectUI.py:2235 #: flatcamGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:41 #: flatcamGUI/preferences/geometry/GeometryGenPrefGroupUI.py:37 #: flatcamGUI/preferences/gerber/GerberGenPrefGroupUI.py:54 @@ -7362,7 +7336,7 @@ msgstr "Forme en V" #: flatcamTools/ToolNCC.py:233 flatcamTools/ToolNCC.py:240 #: flatcamTools/ToolPaint.py:216 msgid "V-Tip Dia" -msgstr "Dia V-Tip" +msgstr "Diam V-Tip" #: flatcamGUI/ObjectUI.py:325 flatcamGUI/ObjectUI.py:1675 #: flatcamGUI/preferences/gerber/GerberAdvOptPrefGroupUI.py:83 @@ -7398,7 +7372,7 @@ msgstr "" #: flatcamGUI/preferences/geometry/GeometryOptPrefGroupUI.py:50 #: flatcamGUI/preferences/gerber/GerberAdvOptPrefGroupUI.py:109 #: flatcamGUI/preferences/tools/ToolsCutoutPrefGroupUI.py:61 -#: flatcamObjects/FlatCAMGeometry.py:1174 flatcamTools/ToolCutOut.py:141 +#: flatcamObjects/FlatCAMGeometry.py:1146 flatcamTools/ToolCutOut.py:141 msgid "" "Cutting depth (negative)\n" "below the copper surface." @@ -7423,7 +7397,7 @@ msgstr "" #: flatcamGUI/ObjectUI.py:382 #: flatcamGUI/preferences/gerber/GerberOptPrefGroupUI.py:56 msgid "# Passes" -msgstr "# Passes" +msgstr "Nbres Passes" #: flatcamGUI/ObjectUI.py:384 #: flatcamGUI/preferences/gerber/GerberOptPrefGroupUI.py:58 @@ -7437,7 +7411,7 @@ msgstr "" #: flatcamGUI/ObjectUI.py:395 #: flatcamGUI/preferences/gerber/GerberOptPrefGroupUI.py:68 msgid "Pass overlap" -msgstr "Passe chevauchement" +msgstr "Chevauchement" #: flatcamGUI/ObjectUI.py:397 #: flatcamGUI/preferences/gerber/GerberOptPrefGroupUI.py:70 @@ -7512,7 +7486,7 @@ msgstr "" #: 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:1300 flatcamTools/ToolPaint.py:502 +#: 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 @@ -7630,7 +7604,7 @@ msgid "" "inside the actual Gerber feature, use a negative tool\n" "diameter above." msgstr "" -"Créer un objet Geometry avec des parcours à couper\n" +"Créer un objet Géometrie avec des parcours à couper\n" "isolement à l'extérieur, à l'intérieur ou des deux côtés du\n" "objet. Pour un objet Gerber dehors signifie dehors\n" "de la fonction Gerber et à l'intérieur des moyens à l'intérieur de\n" @@ -7669,7 +7643,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:576 flatcamGUI/ObjectUI.py:2159 +#: flatcamGUI/ObjectUI.py:576 flatcamGUI/ObjectUI.py:2079 #: flatcamTools/ToolNCC.py:599 msgid "" "Create the Geometry Object\n" @@ -7680,7 +7654,7 @@ msgstr "" #: flatcamGUI/ObjectUI.py:589 msgid "Board cutout" -msgstr "Découpe de la planche" +msgstr "Découpe de la plaque" #: flatcamGUI/ObjectUI.py:591 #: flatcamGUI/preferences/tools/ToolsCutoutPrefGroupUI.py:34 @@ -7689,9 +7663,8 @@ msgid "" "the PCB and separate it from\n" "the original board." msgstr "" -"Créer des parcours d'outil à découper\n" -"le PCB et séparez-le de\n" -"la planche d'origine." +"Créer un parcours afin de découper\n" +"la Plaque PCB." #: flatcamGUI/ObjectUI.py:598 msgid "" @@ -7795,25 +7768,25 @@ msgstr "" #: flatcamGUI/ObjectUI.py:694 msgid "Generate the Geometry object." -msgstr "Générez l'objet Geometry." +msgstr "Générez l'objet Géométrie." #: flatcamGUI/ObjectUI.py:721 msgid "Excellon Object" -msgstr "Excellent objet" +msgstr "Excellon objet" #: flatcamGUI/ObjectUI.py:733 msgid "Solid circles." msgstr "Cercles pleins." #: flatcamGUI/ObjectUI.py:781 flatcamGUI/ObjectUI.py:876 -#: flatcamGUI/ObjectUI.py:2336 +#: flatcamGUI/ObjectUI.py:2256 #: flatcamGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:71 #: flatcamTools/ToolProperties.py:166 msgid "Drills" msgstr "Forage" #: flatcamGUI/ObjectUI.py:781 flatcamGUI/ObjectUI.py:877 -#: flatcamGUI/ObjectUI.py:2336 +#: flatcamGUI/ObjectUI.py:2256 #: flatcamGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:158 #: flatcamGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:72 #: flatcamTools/ToolProperties.py:168 @@ -7833,7 +7806,7 @@ msgstr "" "cette valeur\n" "sera affiché en tant que T1, T2 ... Tn dans le code machine.\n" "\n" -"Ici, les outils sont sélectionnés pour la génération de code G." +"Ici, les outils sont sélectionnés pour la génération de GCode." #: flatcamGUI/ObjectUI.py:791 flatcamGUI/ObjectUI.py:1510 #: flatcamTools/ToolPaint.py:142 @@ -7871,12 +7844,12 @@ msgstr "" #: flatcamGUI/ObjectUI.py:818 flatcamGUI/ObjectUI.py:1662 #: flatcamObjects/FlatCAMExcellon.py:514 flatcamObjects/FlatCAMExcellon.py:726 #: flatcamObjects/FlatCAMExcellon.py:742 flatcamObjects/FlatCAMExcellon.py:746 -#: flatcamObjects/FlatCAMGeometry.py:323 flatcamObjects/FlatCAMGeometry.py:759 -#: flatcamObjects/FlatCAMGeometry.py:795 flatcamTools/ToolNCC.py:331 +#: 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:1196 flatcamTools/ToolPaint.py:314 +#: flatcamTools/ToolNCC.py:1191 flatcamTools/ToolPaint.py:314 #: flatcamTools/ToolPaint.py:767 flatcamTools/ToolPaint.py:779 -#: flatcamTools/ToolPaint.py:1171 +#: flatcamTools/ToolPaint.py:1166 msgid "Parameters for" msgstr "Paramètres pour" @@ -7934,7 +7907,7 @@ msgstr "Tous les deux" #: flatcamGUI/ObjectUI.py:886 #: flatcamGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:80 msgid "Milling Diameter" -msgstr "Dia. de fraisage" +msgstr "Diam de fraisage" #: flatcamGUI/ObjectUI.py:888 #: flatcamGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:82 @@ -8056,7 +8029,7 @@ msgstr "" #: flatcamGUI/ObjectUI.py:1049 flatcamGUI/ObjectUI.py:1841 #: flatcamGUI/preferences/geometry/GeometryOptPrefGroupUI.py:216 #: flatcamObjects/FlatCAMExcellon.py:1332 -#: flatcamObjects/FlatCAMGeometry.py:1622 +#: flatcamObjects/FlatCAMGeometry.py:1594 msgid "Spindle speed" msgstr "Vitesse de broche" @@ -8244,7 +8217,7 @@ msgstr "" "Le fichier JSON du préprocesseur qui dicte\n" "Sortie Gcode pour les objets de géométrie (fraisage)." -#: flatcamGUI/ObjectUI.py:1310 flatcamGUI/ObjectUI.py:2108 +#: flatcamGUI/ObjectUI.py:1310 flatcamGUI/ObjectUI.py:2028 msgid "" "Add / Select at least one tool in the tool-table.\n" "Click the # header to select all, or Ctrl + LMB\n" @@ -8254,9 +8227,9 @@ 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:1318 flatcamGUI/ObjectUI.py:2115 +#: flatcamGUI/ObjectUI.py:1318 flatcamGUI/ObjectUI.py:2035 msgid "Generate CNCJob object" -msgstr "Générer un objet CNCJob" +msgstr "Générer l'objet CNC Job" #: flatcamGUI/ObjectUI.py:1320 msgid "" @@ -8264,7 +8237,7 @@ msgid "" "If milling then an additional Geometry object will be created" msgstr "" "Générez le travail CNC.\n" -"En cas de fraisage, un objet Geometry supplémentaire sera créé" +"En cas de fraisage, un objet Géométrie supplémentaire sera créé" #: flatcamGUI/ObjectUI.py:1337 msgid "Milling Geometry" @@ -8329,7 +8302,7 @@ msgid "" "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 "" -"Outils dans cet objet Geometry utilisé pour la découpe.\n" +"Outils dans cet objet Géométrie utilisé pour la découpe.\n" "L'entrée 'Décalage' définira un décalage pour la coupe.\n" "Le «décalage» peut être à l'intérieur, à l'extérieur, sur le chemin (aucun) " "et personnalisé.\n" @@ -8342,22 +8315,22 @@ msgstr "" "sélectionnée.\n" "défini sur Isolation, le paramètre CutZ sous la forme d’UI est\n" "grisé et Cut Z est automatiquement calculé à partir de la nouvelle\n" -"a montré des entrées de formulaire d’interface utilisateur nommées V-Tip Dia " -"et V-Tip Angle." +"a montré des entrées de formulaire d’interface utilisateur nommées V-Tip " +"Diam et V-Tip Angle." -#: flatcamGUI/ObjectUI.py:1484 flatcamGUI/ObjectUI.py:2313 +#: flatcamGUI/ObjectUI.py:1484 flatcamGUI/ObjectUI.py:2233 #: flatcamGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:40 msgid "Plot Object" msgstr "Dessiner un objet" -#: flatcamGUI/ObjectUI.py:1497 flatcamGUI/ObjectUI.py:2326 -#: flatcamGUI/ObjectUI.py:2336 +#: flatcamGUI/ObjectUI.py:1497 flatcamGUI/ObjectUI.py:2246 +#: flatcamGUI/ObjectUI.py:2256 #: flatcamGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:138 #: flatcamTools/ToolCopperThieving.py:221 msgid "Dia" -msgstr "Dia" +msgstr "Diam" -#: flatcamGUI/ObjectUI.py:1497 flatcamGUI/ObjectUI.py:2326 +#: flatcamGUI/ObjectUI.py:1497 flatcamGUI/ObjectUI.py:2246 #: flatcamTools/ToolNCC.py:132 flatcamTools/ToolPaint.py:128 msgid "TT" msgstr "TT" @@ -8581,106 +8554,15 @@ msgstr "" "Le fichier post-processeur qui dicte\n" "le code machine (comme GCode, RML, HPGL." -#: flatcamGUI/ObjectUI.py:2028 -#: flatcamGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:201 -msgid "Exclusion areas" -msgstr "Zones d'exclusion" - -#: flatcamGUI/ObjectUI.py:2031 -#: flatcamGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:204 -msgid "" -"Include exclusion areas.\n" -"In those areas the travel of the tools\n" -"is forbidden." -msgstr "" -"Inclure les zones d'exclusion.\n" -"Dans ces zones, le déplacement des outils\n" -"est interdit." - -#: flatcamGUI/ObjectUI.py:2053 -msgid "Add area" -msgstr "Ajouter une zone" - -#: flatcamGUI/ObjectUI.py:2054 -msgid "Add an Exclusion Area." -msgstr "Ajoutez une zone d'exclusion." - -#: flatcamGUI/ObjectUI.py:2058 -msgid "Clear areas" -msgstr "Zones claires" - -#: flatcamGUI/ObjectUI.py:2059 -msgid "Delete all exclusion areas." -msgstr "Supprimez toutes les zones d'exclusion." - -#: flatcamGUI/ObjectUI.py:2068 -#: flatcamGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:212 -#: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:322 -#: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:286 -#: flatcamTools/ToolNCC.py:578 flatcamTools/ToolPaint.py:522 -msgid "Shape" -msgstr "Forme" - -#: flatcamGUI/ObjectUI.py:2070 -#: flatcamGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:214 -#: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:324 -#: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:288 -#: flatcamTools/ToolNCC.py:580 flatcamTools/ToolPaint.py:524 -msgid "The kind of selection shape used for area selection." -msgstr "Type de forme de sélection utilisé pour la sélection de zone." - -#: flatcamGUI/ObjectUI.py:2080 -#: flatcamGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:224 -msgid "Strategy" -msgstr "Stratégie" - -#: flatcamGUI/ObjectUI.py:2081 -#: flatcamGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:225 -msgid "" -"The strategy followed when encountering an exclusion area.\n" -"Can be:\n" -"- Over -> when encountering the area, the tool will go to a set height\n" -"- Around -> will avoid the exclusion area by going around the area" -msgstr "" -"La stratégie a suivi lors de la rencontre d'une zone d'exclusion.\n" -"Peut être:\n" -"- Plus -> lors de la rencontre de la zone, l'outil ira à une hauteur " -"définie\n" -"- Autour -> évitera la zone d'exclusion en faisant le tour de la zone" - -#: flatcamGUI/ObjectUI.py:2085 -#: flatcamGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:229 -msgid "Over" -msgstr "Au dessus" - -#: flatcamGUI/ObjectUI.py:2086 -#: flatcamGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:230 -msgid "Around" -msgstr "Autour" - -#: flatcamGUI/ObjectUI.py:2092 -#: flatcamGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:236 -msgid "Over Z" -msgstr "Plus de Z" - -#: flatcamGUI/ObjectUI.py:2093 -#: flatcamGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:237 -msgid "" -"The height Z to which the tool will rise in order to avoid\n" -"an interdiction area." -msgstr "" -"La hauteur Z à laquelle l'outil va s'élever afin d'éviter\n" -"une zone d'interdiction." - -#: flatcamGUI/ObjectUI.py:2117 +#: flatcamGUI/ObjectUI.py:2037 msgid "Generate the CNC Job object." msgstr "Générez l'objet Travail CNC." -#: flatcamGUI/ObjectUI.py:2134 +#: flatcamGUI/ObjectUI.py:2054 msgid "Launch Paint Tool in Tools Tab." msgstr "Lancer L'outil de Peinture dans l'onglet Outils." -#: flatcamGUI/ObjectUI.py:2142 +#: flatcamGUI/ObjectUI.py:2062 #: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:35 msgid "" "Creates tool paths to cover the\n" @@ -8693,16 +8575,16 @@ msgstr "" "tout en cuivre). Tu vas être interrogé\n" "cliquer sur le polygone désiré." -#: flatcamGUI/ObjectUI.py:2197 +#: flatcamGUI/ObjectUI.py:2117 msgid "CNC Job Object" msgstr "Objet de travail CNC" -#: flatcamGUI/ObjectUI.py:2208 +#: flatcamGUI/ObjectUI.py:2128 #: flatcamGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:45 msgid "Plot kind" msgstr "Dessiner genre" -#: flatcamGUI/ObjectUI.py:2211 +#: flatcamGUI/ObjectUI.py:2131 #: flatcamGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:47 msgid "" "This selects the kind of geometries on the canvas to plot.\n" @@ -8715,17 +8597,17 @@ 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:2220 +#: flatcamGUI/ObjectUI.py:2140 #: flatcamGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:55 msgid "Travel" msgstr "Voyage" -#: flatcamGUI/ObjectUI.py:2224 +#: flatcamGUI/ObjectUI.py:2144 #: flatcamGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:64 msgid "Display Annotation" msgstr "Afficher l'annotation" -#: flatcamGUI/ObjectUI.py:2226 +#: flatcamGUI/ObjectUI.py:2146 #: flatcamGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:66 msgid "" "This selects if to display text annotation on the plot.\n" @@ -8736,11 +8618,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:2241 +#: flatcamGUI/ObjectUI.py:2161 msgid "Travelled dist." -msgstr "Dist. parcourue" +msgstr "Dist. parcourue." -#: flatcamGUI/ObjectUI.py:2243 flatcamGUI/ObjectUI.py:2248 +#: flatcamGUI/ObjectUI.py:2163 flatcamGUI/ObjectUI.py:2168 msgid "" "This is the total travelled distance on X-Y plane.\n" "In current units." @@ -8748,11 +8630,11 @@ msgstr "" "C’est la distance totale parcourue sur l’avion X-Y.\n" "En unités actuelles." -#: flatcamGUI/ObjectUI.py:2253 +#: flatcamGUI/ObjectUI.py:2173 msgid "Estimated time" msgstr "Temps estimé" -#: flatcamGUI/ObjectUI.py:2255 flatcamGUI/ObjectUI.py:2260 +#: flatcamGUI/ObjectUI.py:2175 flatcamGUI/ObjectUI.py:2180 msgid "" "This is the estimated time to do the routing/drilling,\n" "without the time spent in ToolChange events." @@ -8760,11 +8642,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:2295 +#: flatcamGUI/ObjectUI.py:2215 msgid "CNC Tools Table" msgstr "Table d'outils CNC" -#: flatcamGUI/ObjectUI.py:2298 +#: flatcamGUI/ObjectUI.py:2218 msgid "" "Tools in this CNCJob object used for cutting.\n" "The tool diameter is used for plotting on canvas.\n" @@ -8787,38 +8669,36 @@ 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:2326 flatcamGUI/ObjectUI.py:2337 +#: flatcamGUI/ObjectUI.py:2246 flatcamGUI/ObjectUI.py:2257 msgid "P" msgstr "P" -#: flatcamGUI/ObjectUI.py:2347 +#: flatcamGUI/ObjectUI.py:2267 msgid "Update Plot" msgstr "Mise à jour du Tracé" -#: flatcamGUI/ObjectUI.py:2349 +#: flatcamGUI/ObjectUI.py:2269 msgid "Update the plot." msgstr "Mettre à jour le dessin." -#: flatcamGUI/ObjectUI.py:2356 +#: flatcamGUI/ObjectUI.py:2276 #: flatcamGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py:30 msgid "Export CNC Code" msgstr "Exporter le code CNC" -#: flatcamGUI/ObjectUI.py:2358 +#: flatcamGUI/ObjectUI.py:2278 #: flatcamGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py:32 #: flatcamGUI/preferences/cncjob/CNCJobOptPrefGroupUI.py:33 msgid "" "Export and save G-Code to\n" "make this object to a file." -msgstr "" -"Exporter et sauvegarder le code G dans\n" -"transformez cet objet en fichier." +msgstr "Exporter et sauvegarder le GCode dans objet fichier." -#: flatcamGUI/ObjectUI.py:2364 +#: flatcamGUI/ObjectUI.py:2284 msgid "Prepend to CNC Code" msgstr "Ajouter au début un code CNC" -#: flatcamGUI/ObjectUI.py:2366 flatcamGUI/ObjectUI.py:2373 +#: flatcamGUI/ObjectUI.py:2286 flatcamGUI/ObjectUI.py:2293 #: flatcamGUI/preferences/cncjob/CNCJobOptPrefGroupUI.py:49 msgid "" "Type here any G-Code commands you would\n" @@ -8827,11 +8707,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:2379 +#: flatcamGUI/ObjectUI.py:2299 msgid "Append to CNC Code" msgstr "Ajouter au code CNC final" -#: flatcamGUI/ObjectUI.py:2381 flatcamGUI/ObjectUI.py:2389 +#: flatcamGUI/ObjectUI.py:2301 flatcamGUI/ObjectUI.py:2309 #: flatcamGUI/preferences/cncjob/CNCJobOptPrefGroupUI.py:65 msgid "" "Type here any G-Code commands you would\n" @@ -8842,12 +8722,12 @@ msgstr "" "tiens à ajouter à la fin du fichier généré.\n" "I.e .: M2 (fin du programme)" -#: flatcamGUI/ObjectUI.py:2403 +#: flatcamGUI/ObjectUI.py:2323 #: flatcamGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py:38 msgid "Toolchange G-Code" msgstr "Code de changement d'outils" -#: flatcamGUI/ObjectUI.py:2406 +#: flatcamGUI/ObjectUI.py:2326 #: flatcamGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py:41 msgid "" "Type here any G-Code commands you would\n" @@ -8870,7 +8750,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:2421 +#: flatcamGUI/ObjectUI.py:2341 msgid "" "Type here any G-Code commands you would\n" "like to be executed when Toolchange event is encountered.\n" @@ -8888,12 +8768,12 @@ msgstr "" "WARNING: it can be used only with a preprocessor file\n" "that has 'toolchange_custom' in it's name." -#: flatcamGUI/ObjectUI.py:2436 +#: flatcamGUI/ObjectUI.py:2356 #: flatcamGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py:80 msgid "Use Toolchange Macro" msgstr "Utiliser la macro Toolchange" -#: flatcamGUI/ObjectUI.py:2438 +#: flatcamGUI/ObjectUI.py:2358 #: flatcamGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py:82 msgid "" "Check this box if you want to use\n" @@ -8902,7 +8782,7 @@ msgstr "" "Cochez cette case si vous souhaitez utiliser\n" "un GCode personnalisé Toolchange (macro)." -#: flatcamGUI/ObjectUI.py:2446 +#: flatcamGUI/ObjectUI.py:2366 #: flatcamGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py:94 msgid "" "A list of the FlatCAM variables that can be used\n" @@ -8913,7 +8793,7 @@ msgstr "" "dans l'événement Toolchange.\n" "Ils doivent être entourés du symbole '%%'" -#: flatcamGUI/ObjectUI.py:2453 +#: flatcamGUI/ObjectUI.py:2373 #: flatcamGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py:101 #: flatcamGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:30 #: flatcamGUI/preferences/geometry/GeometryEditorPrefGroupUI.py:31 @@ -8940,158 +8820,154 @@ msgstr "" msgid "Parameters" msgstr "Paramètres" -#: flatcamGUI/ObjectUI.py:2456 +#: flatcamGUI/ObjectUI.py:2376 #: flatcamGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py:106 msgid "FlatCAM CNC parameters" msgstr "Paramètres CNC FlatCAM" -#: flatcamGUI/ObjectUI.py:2457 +#: flatcamGUI/ObjectUI.py:2377 #: flatcamGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py:111 msgid "tool number" msgstr "numéro d'outil" -#: flatcamGUI/ObjectUI.py:2458 +#: flatcamGUI/ObjectUI.py:2378 #: flatcamGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py:112 msgid "tool diameter" msgstr "diamètre de l'outil" -#: flatcamGUI/ObjectUI.py:2459 +#: flatcamGUI/ObjectUI.py:2379 #: flatcamGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py:113 msgid "for Excellon, total number of drills" msgstr "pour Excellon, nombre total de trous de forage" -#: flatcamGUI/ObjectUI.py:2461 +#: flatcamGUI/ObjectUI.py:2381 #: flatcamGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py:115 msgid "X coord for Toolchange" msgstr "Coord X pour changement d'outil" -#: flatcamGUI/ObjectUI.py:2462 +#: flatcamGUI/ObjectUI.py:2382 #: flatcamGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py:116 msgid "Y coord for Toolchange" msgstr "Coord Y pour changement d'outil" -#: flatcamGUI/ObjectUI.py:2463 +#: flatcamGUI/ObjectUI.py:2383 #: flatcamGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py:118 msgid "Z coord for Toolchange" msgstr "Coords Z pour le Changement d'Outil" -#: flatcamGUI/ObjectUI.py:2464 +#: flatcamGUI/ObjectUI.py:2384 msgid "depth where to cut" msgstr "profondeur où couper" -#: flatcamGUI/ObjectUI.py:2465 +#: flatcamGUI/ObjectUI.py:2385 msgid "height where to travel" msgstr "hauteur où voyager" -#: flatcamGUI/ObjectUI.py:2466 +#: flatcamGUI/ObjectUI.py:2386 #: flatcamGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py:121 msgid "the step value for multidepth cut" msgstr "la valeur de pas pour la coupe multiple" -#: flatcamGUI/ObjectUI.py:2468 +#: flatcamGUI/ObjectUI.py:2388 #: flatcamGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py:123 msgid "the value for the spindle speed" msgstr "la valeur de la vitesse de broche" -#: flatcamGUI/ObjectUI.py:2470 +#: flatcamGUI/ObjectUI.py:2390 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:2486 +#: flatcamGUI/ObjectUI.py:2406 msgid "View CNC Code" msgstr "Voir le code CNC" -#: flatcamGUI/ObjectUI.py:2488 +#: flatcamGUI/ObjectUI.py:2408 msgid "" "Opens TAB to view/modify/print G-Code\n" "file." -msgstr "" -"Ouvre l'onglet pour afficher / modifier / imprimer le code G\n" -"fichier." +msgstr "Ouvre l'onglet pour afficher / modifier / imprimer le Fichier GCode." -#: flatcamGUI/ObjectUI.py:2493 +#: flatcamGUI/ObjectUI.py:2413 msgid "Save CNC Code" msgstr "Enregistrer le code CNC" -#: flatcamGUI/ObjectUI.py:2495 +#: flatcamGUI/ObjectUI.py:2415 msgid "" "Opens dialog to save G-Code\n" "file." -msgstr "" -"Ouvre la boîte de dialogue pour enregistrer le code G\n" -"fichier." +msgstr "Ouvre la boîte de dialogue pour enregistrer le Fichier GCode." -#: flatcamGUI/ObjectUI.py:2529 +#: flatcamGUI/ObjectUI.py:2449 msgid "Script Object" msgstr "Objet de script" -#: flatcamGUI/ObjectUI.py:2549 flatcamGUI/ObjectUI.py:2623 +#: flatcamGUI/ObjectUI.py:2469 flatcamGUI/ObjectUI.py:2543 msgid "Auto Completer" msgstr "Compléteur automatique" -#: flatcamGUI/ObjectUI.py:2551 +#: flatcamGUI/ObjectUI.py:2471 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:2596 +#: flatcamGUI/ObjectUI.py:2516 msgid "Document Object" msgstr "Objet de Document" -#: flatcamGUI/ObjectUI.py:2625 +#: flatcamGUI/ObjectUI.py:2545 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:2643 +#: flatcamGUI/ObjectUI.py:2563 msgid "Font Type" msgstr "Type de Police" -#: flatcamGUI/ObjectUI.py:2660 +#: flatcamGUI/ObjectUI.py:2580 #: flatcamGUI/preferences/general/GeneralAPPSetGroupUI.py:197 msgid "Font Size" msgstr "Taille de Police" -#: flatcamGUI/ObjectUI.py:2696 +#: flatcamGUI/ObjectUI.py:2616 msgid "Alignment" msgstr "Alignement" -#: flatcamGUI/ObjectUI.py:2701 +#: flatcamGUI/ObjectUI.py:2621 msgid "Align Left" msgstr "Alignez à gauche" -#: flatcamGUI/ObjectUI.py:2711 +#: flatcamGUI/ObjectUI.py:2631 msgid "Align Right" msgstr "Aligner à droite" -#: flatcamGUI/ObjectUI.py:2716 +#: flatcamGUI/ObjectUI.py:2636 msgid "Justify" msgstr "Aligner à justifier" -#: flatcamGUI/ObjectUI.py:2723 +#: flatcamGUI/ObjectUI.py:2643 msgid "Font Color" msgstr "Couleur de la Police" -#: flatcamGUI/ObjectUI.py:2725 +#: flatcamGUI/ObjectUI.py:2645 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:2739 +#: flatcamGUI/ObjectUI.py:2659 msgid "Selection Color" msgstr "Couleur de sélection" -#: flatcamGUI/ObjectUI.py:2741 +#: flatcamGUI/ObjectUI.py:2661 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:2755 +#: flatcamGUI/ObjectUI.py:2675 msgid "Tab Size" msgstr "Taille de l'onglet" -#: flatcamGUI/ObjectUI.py:2757 +#: flatcamGUI/ObjectUI.py:2677 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 " @@ -9105,34 +8981,34 @@ msgstr "" "Impossible d'annoter en raison d'une différence entre le nombre d'éléments " "de texte et le nombre de positions de texte." -#: flatcamGUI/preferences/PreferencesUIManager.py:911 +#: flatcamGUI/preferences/PreferencesUIManager.py:907 msgid "Preferences applied." -msgstr "Préférences appliquées." +msgstr "Paramètres appliquées." -#: flatcamGUI/preferences/PreferencesUIManager.py:975 +#: flatcamGUI/preferences/PreferencesUIManager.py:971 msgid "Preferences closed without saving." -msgstr "Les préférences se sont fermées sans enregistrer." +msgstr "Les paramètres se sont fermées sans enregistrer." -#: flatcamGUI/preferences/PreferencesUIManager.py:987 +#: flatcamGUI/preferences/PreferencesUIManager.py:983 msgid "Preferences default values are restored." -msgstr "Les valeurs par défaut des préférences sont restaurées." +msgstr "Les valeurs par défaut des paramètres sont restaurées." -#: flatcamGUI/preferences/PreferencesUIManager.py:1022 -#: flatcamGUI/preferences/PreferencesUIManager.py:1131 +#: flatcamGUI/preferences/PreferencesUIManager.py:1018 +#: flatcamGUI/preferences/PreferencesUIManager.py:1127 msgid "Preferences saved." -msgstr "Préférences enregistrées." +msgstr "Paramètres enregistrées." -#: flatcamGUI/preferences/PreferencesUIManager.py:1072 +#: flatcamGUI/preferences/PreferencesUIManager.py:1068 msgid "Preferences edited but not saved." -msgstr "Préférences modifiées mais non enregistrées." +msgstr "Paramètres modifiées mais non enregistrées." -#: flatcamGUI/preferences/PreferencesUIManager.py:1117 +#: flatcamGUI/preferences/PreferencesUIManager.py:1113 msgid "" "One or more values are changed.\n" "Do you want to save the Preferences?" msgstr "" "Une ou plusieurs valeurs sont modifiées.\n" -"Voulez-vous enregistrer les préférences?" +"Voulez-vous enregistrer les paramètres?" #: flatcamGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py:27 msgid "CNC Job Adv. Options" @@ -9352,7 +9228,7 @@ msgstr "Options CNCjob" #: flatcamGUI/preferences/cncjob/CNCJobOptPrefGroupUI.py:31 msgid "Export G-Code" -msgstr "Exporter le code G" +msgstr "Exporter le GCcode" #: flatcamGUI/preferences/cncjob/CNCJobOptPrefGroupUI.py:47 msgid "Prepend to G-Code" @@ -9498,7 +9374,7 @@ msgstr "" #: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:117 #: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:123 msgid "New Dia" -msgstr "Nouvel Dia" +msgstr "Nouveau Diam" #: flatcamGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:80 msgid "Linear Drill Array" @@ -9897,7 +9773,7 @@ msgstr "MetaHeuristic" #: flatcamGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:218 #: flatcamGUI/preferences/general/GeneralAppPrefGroupUI.py:104 -#: flatcamObjects/FlatCAMExcellon.py:614 flatcamObjects/FlatCAMGeometry.py:510 +#: flatcamObjects/FlatCAMExcellon.py:614 flatcamObjects/FlatCAMGeometry.py:485 #: flatcamObjects/FlatCAMGerber.py:251 msgid "Basic" msgstr "De base" @@ -9995,11 +9871,11 @@ msgstr "Créer une géométrie pour fraiser des trous." #: flatcamGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:294 msgid "Drill Tool dia" -msgstr "Dia. de l'outil de forage" +msgstr "Diam. de l'outil de forage" #: flatcamGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:305 msgid "Slot Tool dia" -msgstr "Fente outil dia" +msgstr "Diam fente outil" #: flatcamGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:307 msgid "" @@ -10311,7 +10187,7 @@ msgstr "Sélectionnez le GIF qui affiche l'activité lorsque FlatCAM est actif." #: flatcamGUI/preferences/general/GeneralAppPrefGroupUI.py:29 msgid "App Preferences" -msgstr "Préférences de l'app" +msgstr "Paramètres de l'app" #: flatcamGUI/preferences/general/GeneralAppPrefGroupUI.py:40 msgid "" @@ -10408,7 +10284,7 @@ msgstr "" "l'onglet Sélectionné pour toutes sortes d'objets FlatCAM." #: flatcamGUI/preferences/general/GeneralAppPrefGroupUI.py:105 -#: flatcamObjects/FlatCAMExcellon.py:627 flatcamObjects/FlatCAMGeometry.py:531 +#: flatcamObjects/FlatCAMExcellon.py:627 flatcamObjects/FlatCAMGeometry.py:506 #: flatcamObjects/FlatCAMGerber.py:278 msgid "Advanced" msgstr "Avancé" @@ -10428,7 +10304,7 @@ msgstr "" "Choisissez si l'application doit être exécutée en tant que portable.\n" "\n" "Si coché, l'application fonctionnera en mode portable,\n" -"ce qui signifie que les fichiers de préférences seront sauvegardés\n" +"ce qui signifie que les fichiers de paramètres seront sauvegardés\n" "dans le dossier de l'application, dans le sous-dossier lib\\config." #: flatcamGUI/preferences/general/GeneralAppPrefGroupUI.py:125 @@ -10667,7 +10543,7 @@ msgstr "Distance entre le corps du texte et la droite du fichier PDF." #: flatcamGUI/preferences/general/GeneralGUIPrefGroupUI.py:26 msgid "GUI Preferences" -msgstr "Préférences de GUI" +msgstr "Paramètres de GUI" #: flatcamGUI/preferences/general/GeneralGUIPrefGroupUI.py:36 msgid "Theme" @@ -10951,20 +10827,6 @@ msgstr "" "Utile pour le nivellement automatique.\n" "Une valeur de 0 signifie aucune segmentation sur l'axe Y." -#: flatcamGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:192 -msgid "Area Exclusion" -msgstr "Exclusion de zone" - -#: flatcamGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:194 -msgid "" -"Area exclusion parameters.\n" -"Those parameters are available only for\n" -"Advanced App. Level." -msgstr "" -"Paramètres d'exclusion de zone.\n" -"Ces paramètres sont disponibles uniquement pour\n" -"Application avancée. Niveau." - #: flatcamGUI/preferences/geometry/GeometryEditorPrefGroupUI.py:33 msgid "A list of Geometry Editor parameters." msgstr "Une liste de paramètres de L'éditeur de Géométrie." @@ -11001,7 +10863,7 @@ msgstr "" #: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:48 #: flatcamGUI/preferences/tools/ToolsSolderpastePrefGroupUI.py:42 msgid "Tools Dia" -msgstr "Dia. de l'outils" +msgstr "Diam. de l'outils" #: flatcamGUI/preferences/geometry/GeometryGenPrefGroupUI.py:65 #: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:108 @@ -11381,10 +11243,10 @@ msgstr "" #: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:309 #: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:280 #: flatcamTools/ToolCopperThieving.py:126 flatcamTools/ToolNCC.py:535 -#: flatcamTools/ToolNCC.py:1316 flatcamTools/ToolNCC.py:1647 -#: flatcamTools/ToolNCC.py:1935 flatcamTools/ToolNCC.py:1990 +#: 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:1452 +#: flatcamTools/ToolPaint.py:1447 msgid "Area Selection" msgstr "Sélection de zone" @@ -11392,11 +11254,11 @@ msgstr "Sélection de zone" #: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:309 #: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:280 #: flatcamTools/ToolCopperThieving.py:127 flatcamTools/ToolDblSided.py:216 -#: flatcamTools/ToolNCC.py:535 flatcamTools/ToolNCC.py:1663 -#: flatcamTools/ToolNCC.py:1941 flatcamTools/ToolNCC.py:1998 -#: flatcamTools/ToolNCC.py:2306 flatcamTools/ToolNCC.py:2586 -#: flatcamTools/ToolNCC.py:3012 flatcamTools/ToolPaint.py:486 -#: flatcamTools/ToolPaint.py:931 flatcamTools/ToolPaint.py:1468 +#: 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 "Objet de référence" @@ -11844,7 +11706,7 @@ msgstr "La taille de l'anneau annulaire pour les autres tampons." #: flatcamGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:215 #: flatcamTools/ToolExtractDrills.py:276 flatcamTools/ToolPunchGerber.py:299 msgid "Proportional Diameter" -msgstr "Dia. proportionnel" +msgstr "Diam. proportionnel" #: flatcamGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py:222 #: flatcamGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:224 @@ -12014,8 +11876,8 @@ msgid "" "A tool to find the minimum distance between\n" "every two Gerber geometric elements" msgstr "" -"Un outil pour trouver la distance minimale entre\n" -"tous les deux éléments géométriques de Gerber" +"Outil de mesure minimale entre\n" +"deux éléments géométriques de Gerber" #: flatcamGUI/preferences/tools/Tools2OptimalPrefGroupUI.py:48 #: flatcamTools/ToolOptimal.py:78 @@ -12505,7 +12367,7 @@ msgstr "" #: flatcamGUI/preferences/tools/ToolsCalculatorsPrefGroupUI.py:50 #: flatcamTools/ToolCalculators.py:94 msgid "Tip Diameter" -msgstr "Dia de la pointe" +msgstr "Diam de la pointe" #: flatcamGUI/preferences/tools/ToolsCalculatorsPrefGroupUI.py:52 #: flatcamTools/ToolCalculators.py:102 @@ -12609,7 +12471,7 @@ msgstr "Options de l'Outil de Découpe" #: flatcamGUI/preferences/tools/ToolsCutoutPrefGroupUI.py:43 #: flatcamTools/ToolCalculators.py:123 flatcamTools/ToolCutOut.py:129 msgid "Tool Diameter" -msgstr "Dia de l'outil" +msgstr "Diam de l'outil" #: flatcamGUI/preferences/tools/ToolsCutoutPrefGroupUI.py:45 #: flatcamTools/ToolCutOut.py:131 @@ -12671,15 +12533,15 @@ msgid "" "the surrounding material (the one \n" "from which the PCB is cutout)." msgstr "" -"La taille des lacunes de pont dans la découpe\n" -"utilisé pour garder le conseil connecté à\n" -"le matériau environnant (celui\n" -"à partir duquel le circuit imprimé est découpé)." +"Taille des ponts dans la découpe\n" +"utilisé pour garder le PCB connecté au\n" +"matériau environnant (celui à partir duquel\n" +" le circuit imprimé est découpé)." #: flatcamGUI/preferences/tools/ToolsCutoutPrefGroupUI.py:146 #: flatcamTools/ToolCutOut.py:245 msgid "Gaps" -msgstr "Lacunes" +msgstr "Nbres Ponts" #: flatcamGUI/preferences/tools/ToolsCutoutPrefGroupUI.py:148 msgid "" @@ -12694,16 +12556,16 @@ msgid "" "- 2tb - 2*top + 2*bottom\n" "- 8 - 2*left + 2*right +2*top + 2*bottom" msgstr "" -"Nombre de trous utilisés pour la découpe.\n" -"Il peut y avoir au maximum 8 ponts / lacunes.\n" +"Nombres de ponts à garder lors de la découpe.\n" +"Il peut y avoir au maximum 8 ponts.\n" "Les choix sont:\n" -"- Aucun - pas de lacunes\n" -"- lr - gauche + droite\n" -"- tb - haut + bas\n" -"- 4 - gauche + droite + haut + bas\n" -"- 2lr - 2 * gauche + 2 * droite\n" -"- 2tb - 2 * Haut + 2 * Bas\n" -"- 8 - 2 * gauche + 2 * droite + 2 * en haut + 2 * en bas" +"- Aucun - Découpe total\n" +"- LR - Gauche + Droite\n" +"- TB - Haut + Bas\n" +"- 4 - Gauche + Droite + Haut + Bas\n" +"- 2LR - 2 Gauche + 2 Droite\n" +"- 2TB - 2 Haut + 2 Bas\n" +"- 8 - 2 Gauches + 2 Droites + 2 Hauts + 2 Bas" #: flatcamGUI/preferences/tools/ToolsCutoutPrefGroupUI.py:170 #: flatcamTools/ToolCutOut.py:222 @@ -13124,6 +12986,18 @@ msgstr "" "de la zone à traiter.\n" "- 'Objet de référence' - traitera la zone spécifiée par un autre objet." +#: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:322 +#: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:286 +#: flatcamTools/ToolNCC.py:578 flatcamTools/ToolPaint.py:522 +msgid "Shape" +msgstr "Forme" + +#: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:324 +#: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:288 +#: flatcamTools/ToolNCC.py:580 flatcamTools/ToolPaint.py:524 +msgid "The kind of selection shape used for area selection." +msgstr "Type de forme de sélection utilisé pour la sélection de zone." + #: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:339 #: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:303 msgid "Normal" @@ -13200,7 +13074,7 @@ msgstr "" #: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:280 #: flatcamTools/ToolPaint.py:486 flatcamTools/ToolPaint.py:942 -#: flatcamTools/ToolPaint.py:1432 tclCommands/TclCommandPaint.py:164 +#: flatcamTools/ToolPaint.py:1427 tclCommands/TclCommandPaint.py:164 msgid "Polygon Selection" msgstr "Sélection de polygone" @@ -13359,7 +13233,7 @@ msgstr "" #: flatcamGUI/preferences/tools/ToolsSolderpastePrefGroupUI.py:54 msgid "New Nozzle Dia" -msgstr "Nouvelle Buse Dia" +msgstr "Diam Nouvelle Buse" #: flatcamGUI/preferences/tools/ToolsSolderpastePrefGroupUI.py:56 #: flatcamTools/ToolSolderPaste.py:107 @@ -13522,7 +13396,7 @@ msgid "" "A tool to substract one Gerber or Geometry object\n" "from another of the same type." msgstr "" -"Un outil pour soustraire un objet Gerber ou Geometry\n" +"Un outil pour soustraire un objet Gerber ou Géométrie\n" "d'un autre du même type." #: flatcamGUI/preferences/tools/ToolsSubPrefGroupUI.py:38 @@ -13551,7 +13425,7 @@ msgstr "" #: flatcamGUI/preferences/tools/ToolsTransformPrefGroupUI.py:64 msgid "Skew" -msgstr "Fausser" +msgstr "Inclinaison" #: flatcamGUI/preferences/tools/ToolsTransformPrefGroupUI.py:105 #: flatcamTools/ToolTransform.py:150 @@ -13904,8 +13778,8 @@ 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'" +"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:933 msgid "Cancelled. The Toolchange Custom code is enabled but it's empty." @@ -13931,9 +13805,9 @@ msgid "Document Editor" msgstr "Éditeur de Document" #: flatcamObjects/FlatCAMExcellon.py:514 flatcamObjects/FlatCAMExcellon.py:746 -#: flatcamObjects/FlatCAMGeometry.py:323 flatcamObjects/FlatCAMGeometry.py:795 -#: flatcamTools/ToolNCC.py:811 flatcamTools/ToolNCC.py:1196 -#: flatcamTools/ToolPaint.py:779 flatcamTools/ToolPaint.py:1171 +#: 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" @@ -13980,19 +13854,19 @@ msgstr "" "L'outil de fraisage pour FENTES est supérieur à la taille du trou. Annulé." #: flatcamObjects/FlatCAMExcellon.py:1281 -#: flatcamObjects/FlatCAMGeometry.py:1571 +#: flatcamObjects/FlatCAMGeometry.py:1543 msgid "Focus Z" msgstr "Focus Z" #: flatcamObjects/FlatCAMExcellon.py:1300 -#: flatcamObjects/FlatCAMGeometry.py:1590 +#: flatcamObjects/FlatCAMGeometry.py:1562 msgid "Laser Power" msgstr "Puissance laser" #: flatcamObjects/FlatCAMExcellon.py:1430 -#: flatcamObjects/FlatCAMGeometry.py:2027 -#: flatcamObjects/FlatCAMGeometry.py:2031 -#: flatcamObjects/FlatCAMGeometry.py:2176 +#: flatcamObjects/FlatCAMGeometry.py:1999 +#: flatcamObjects/FlatCAMGeometry.py:2003 +#: flatcamObjects/FlatCAMGeometry.py:2148 msgid "Generating CNC Code" msgstr "Génération de code CNC" @@ -14001,54 +13875,54 @@ msgstr "Génération de code CNC" 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:124 flatcamObjects/FlatCAMGeometry.py:1235 -#: flatcamObjects/FlatCAMGeometry.py:1236 -#: flatcamObjects/FlatCAMGeometry.py:1245 +#: flatcamObjects/FlatCAMGeometry.py:119 flatcamObjects/FlatCAMGeometry.py:1207 +#: flatcamObjects/FlatCAMGeometry.py:1208 +#: flatcamObjects/FlatCAMGeometry.py:1217 msgid "Iso" msgstr "Iso" -#: flatcamObjects/FlatCAMGeometry.py:124 flatcamObjects/FlatCAMGeometry.py:464 -#: flatcamObjects/FlatCAMGeometry.py:854 flatcamObjects/FlatCAMGerber.py:891 -#: flatcamObjects/FlatCAMGerber.py:1039 flatcamTools/ToolCutOut.py:690 -#: flatcamTools/ToolCutOut.py:886 flatcamTools/ToolCutOut.py:1046 +#: flatcamObjects/FlatCAMGeometry.py:119 flatcamObjects/FlatCAMGeometry.py:439 +#: flatcamObjects/FlatCAMGeometry.py:826 flatcamObjects/FlatCAMGerber.py:891 +#: flatcamObjects/FlatCAMGerber.py:1039 flatcamTools/ToolCutOut.py:686 +#: flatcamTools/ToolCutOut.py:882 flatcamTools/ToolCutOut.py:1042 msgid "Rough" msgstr "Rugueux" -#: flatcamObjects/FlatCAMGeometry.py:124 +#: flatcamObjects/FlatCAMGeometry.py:119 msgid "Finish" msgstr "Finition" -#: flatcamObjects/FlatCAMGeometry.py:499 +#: flatcamObjects/FlatCAMGeometry.py:474 msgid "Add from Tool DB" msgstr "Ajouter à partir de la BD d'outils" -#: flatcamObjects/FlatCAMGeometry.py:873 +#: flatcamObjects/FlatCAMGeometry.py:845 msgid "Tool added in Tool Table." msgstr "Outil ajouté dans la table d'outils." -#: flatcamObjects/FlatCAMGeometry.py:982 flatcamObjects/FlatCAMGeometry.py:991 +#: 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:1020 +#: 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:1047 +#: flatcamObjects/FlatCAMGeometry.py:1019 msgid "Tool was edited in Tool Table." msgstr "L'outil a été édité dans Tool Table." -#: flatcamObjects/FlatCAMGeometry.py:1076 -#: flatcamObjects/FlatCAMGeometry.py:1085 +#: 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:1109 +#: 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:1146 -#: flatcamObjects/FlatCAMGeometry.py:1156 +#: flatcamObjects/FlatCAMGeometry.py:1118 +#: flatcamObjects/FlatCAMGeometry.py:1128 msgid "" "Disabled because the tool is V-shape.\n" "For V-shape tools the depth of cut is\n" @@ -14062,24 +13936,24 @@ msgstr "" "Pour les outils en forme de V, la profondeur de coupe est\n" "calculé à partir d'autres paramètres comme:\n" "- 'Angle V-tip' -> angle à la pointe de l'outil\n" -"- 'V-tip Dia' -> diamètre à la pointe de l'outil\n" -"- Outil Dia -> colonne 'Dia' trouvée dans le tableau d'outils\n" -"NB: une valeur nulle signifie que Tool Dia = 'V-tip Dia'" +"- 'V-tip Diam' -> diamètre à la pointe de l'outil\n" +"- Outil Diam -> colonne 'Diam' trouvée dans le tableau d'outils\n" +"NB: une valeur nulle signifie que Outil Diam = 'V-tip Diam'" -#: flatcamObjects/FlatCAMGeometry.py:1643 +#: flatcamObjects/FlatCAMGeometry.py:1615 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:1643 +#: flatcamObjects/FlatCAMGeometry.py:1615 msgid "geometry" -msgstr "geometry" +msgstr "Géométrie" -#: flatcamObjects/FlatCAMGeometry.py:1684 +#: flatcamObjects/FlatCAMGeometry.py:1656 msgid "Failed. No tool selected in the tool table ..." msgstr "Échoué. Aucun outil sélectionné dans la table d'outils ..." -#: flatcamObjects/FlatCAMGeometry.py:1786 -#: flatcamObjects/FlatCAMGeometry.py:1936 +#: flatcamObjects/FlatCAMGeometry.py:1758 +#: flatcamObjects/FlatCAMGeometry.py:1908 msgid "" "Tool Offset is selected in Tool Table but no value is provided.\n" "Add a Tool Offset or change the Offset Type." @@ -14088,51 +13962,51 @@ msgstr "" "n’est fournie.\n" "Ajoutez un décalage d'outil ou changez le type de décalage." -#: flatcamObjects/FlatCAMGeometry.py:1852 -#: flatcamObjects/FlatCAMGeometry.py:1998 +#: flatcamObjects/FlatCAMGeometry.py:1824 +#: flatcamObjects/FlatCAMGeometry.py:1970 msgid "G-Code parsing in progress..." -msgstr "Analyse du code G en cours ..." +msgstr "Analyse du GCcode en cours ..." -#: flatcamObjects/FlatCAMGeometry.py:1854 -#: flatcamObjects/FlatCAMGeometry.py:2000 +#: flatcamObjects/FlatCAMGeometry.py:1826 +#: flatcamObjects/FlatCAMGeometry.py:1972 msgid "G-Code parsing finished..." -msgstr "L'analyse du code G est terminée ..." +msgstr "L'analyse du GCcode est terminée ..." -#: flatcamObjects/FlatCAMGeometry.py:1862 +#: flatcamObjects/FlatCAMGeometry.py:1834 msgid "Finished G-Code processing" -msgstr "Traitement du code G terminé" +msgstr "Traitement du GCode terminé" -#: flatcamObjects/FlatCAMGeometry.py:1864 -#: flatcamObjects/FlatCAMGeometry.py:2012 +#: flatcamObjects/FlatCAMGeometry.py:1836 +#: flatcamObjects/FlatCAMGeometry.py:1984 msgid "G-Code processing failed with error" -msgstr "Le traitement du code G a échoué avec une erreur" +msgstr "Le traitement du GCode a échoué avec une erreur" -#: flatcamObjects/FlatCAMGeometry.py:1906 flatcamTools/ToolSolderPaste.py:1301 +#: flatcamObjects/FlatCAMGeometry.py:1878 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:2010 -#: flatcamObjects/FlatCAMGeometry.py:2171 +#: flatcamObjects/FlatCAMGeometry.py:1982 +#: flatcamObjects/FlatCAMGeometry.py:2143 msgid "Finished G-Code processing..." -msgstr "Traitement terminé du code G ..." +msgstr "Traitement terminé du GCode ..." -#: flatcamObjects/FlatCAMGeometry.py:2029 -#: flatcamObjects/FlatCAMGeometry.py:2033 -#: flatcamObjects/FlatCAMGeometry.py:2178 +#: flatcamObjects/FlatCAMGeometry.py:2001 +#: flatcamObjects/FlatCAMGeometry.py:2005 +#: flatcamObjects/FlatCAMGeometry.py:2150 msgid "CNCjob created" msgstr "CNCjob créé" -#: flatcamObjects/FlatCAMGeometry.py:2209 -#: flatcamObjects/FlatCAMGeometry.py:2218 flatcamParsers/ParseGerber.py:1867 +#: flatcamObjects/FlatCAMGeometry.py:2181 +#: flatcamObjects/FlatCAMGeometry.py:2190 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:2281 +#: flatcamObjects/FlatCAMGeometry.py:2253 msgid "Geometry Scale done." msgstr "Échelle de géométrie terminée." -#: flatcamObjects/FlatCAMGeometry.py:2298 flatcamParsers/ParseGerber.py:1993 +#: flatcamObjects/FlatCAMGeometry.py:2270 flatcamParsers/ParseGerber.py:1993 msgid "" "An (x,y) pair of values are needed. Probable you entered only one value in " "the Offset field." @@ -14140,43 +14014,20 @@ 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:2354 +#: flatcamObjects/FlatCAMGeometry.py:2326 msgid "Geometry Offset done." msgstr "Décalage de géométrie effectué." -#: flatcamObjects/FlatCAMGeometry.py:2383 +#: flatcamObjects/FlatCAMGeometry.py:2355 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, " +"Le champ Toolchange X, Y dans Edition -> Paramètres doit être au format (x, " "y)\n" "mais maintenant il n'y a qu'une seule valeur, pas deux." -#: flatcamObjects/FlatCAMGeometry.py:2577 -#: flatcamTools/ToolCopperThieving.py:769 flatcamTools/ToolNCC.py:1648 -msgid "Click the start point of the area." -msgstr "Cliquez sur le point de départ de la zone." - -#: flatcamObjects/FlatCAMGeometry.py:2619 -msgid "Click the end point of the area." -msgstr "Cliquez sur le point final de la zone." - -#: flatcamObjects/FlatCAMGeometry.py:2625 -#: flatcamObjects/FlatCAMGeometry.py:2677 -#: flatcamTools/ToolCopperThieving.py:826 flatcamTools/ToolNCC.py:1710 -#: flatcamTools/ToolNCC.py:1762 flatcamTools/ToolPaint.py:1606 -#: flatcamTools/ToolPaint.py:1657 -msgid "Zone added. Click to start adding next zone or right click to finish." -msgstr "" -"Zone ajoutée. Cliquez pour commencer à ajouter la zone suivante ou faites un " -"clic droit pour terminer." - -#: flatcamObjects/FlatCAMGeometry.py:2729 -msgid "Cancelled. Area exclusion drawing was interrupted." -msgstr "Annulé. Le dessin d'exclusion de zone a été interrompu." - #: flatcamObjects/FlatCAMGerber.py:494 msgid "Buffering solid geometry" msgstr "Mise en tampon de la géométrie solide" @@ -14198,7 +14049,7 @@ msgid "Click on a polygon to isolate it." msgstr "Cliquez sur un polygone pour l'isoler." #: flatcamObjects/FlatCAMGerber.py:670 flatcamObjects/FlatCAMGerber.py:774 -#: flatcamTools/ToolPaint.py:1516 +#: flatcamTools/ToolPaint.py:1511 msgid "Added polygon" msgstr "Polygone ajouté" @@ -14208,7 +14059,7 @@ msgstr "" "Cliquez pour ajouter le polygone suivant ou cliquez avec le bouton droit " "pour démarrer l'isolement." -#: flatcamObjects/FlatCAMGerber.py:683 flatcamTools/ToolPaint.py:1530 +#: flatcamObjects/FlatCAMGerber.py:683 flatcamTools/ToolPaint.py:1525 msgid "Removed polygon" msgstr "Polygone supprimé" @@ -14218,11 +14069,11 @@ msgstr "" "Cliquez pour ajouter / supprimer le polygone suivant ou cliquez avec le " "bouton droit pour démarrer l'isolement." -#: flatcamObjects/FlatCAMGerber.py:689 flatcamTools/ToolPaint.py:1536 +#: flatcamObjects/FlatCAMGerber.py:689 flatcamTools/ToolPaint.py:1531 msgid "No polygon detected under click position." msgstr "Aucun polygone détecté sous la position du clic." -#: flatcamObjects/FlatCAMGerber.py:710 flatcamTools/ToolPaint.py:1565 +#: flatcamObjects/FlatCAMGerber.py:710 flatcamTools/ToolPaint.py:1560 msgid "List of single polygons is empty. Aborting." msgstr "La liste des polygones simples est vide. Abandon." @@ -14231,8 +14082,8 @@ msgid "No polygon in selection." msgstr "Aucun polygone dans la sélection." #: flatcamObjects/FlatCAMGerber.py:907 flatcamObjects/FlatCAMGerber.py:986 -#: flatcamTools/ToolNCC.py:2086 flatcamTools/ToolNCC.py:3137 -#: flatcamTools/ToolNCC.py:3516 +#: 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." @@ -14274,7 +14125,7 @@ msgstr "Mise à l'échelle..." #: flatcamObjects/FlatCAMObj.py:292 msgid "Skewing..." -msgstr "Fausser..." +msgstr "Inclinaison..." #: flatcamObjects/FlatCAMScript.py:163 msgid "Script Editor" @@ -14329,8 +14180,8 @@ msgid "" "a tool associated.\n" "Check the resulting GCode." msgstr "" -"Excellon.create_geometry () -> un emplacement d’exploration a été ignoré car " -"aucun outil n’était associé.\n" +"Excellon.create_géométrie () -> un emplacement d’exploration a été ignoré " +"car aucun outil n’était associé.\n" "Vérifiez le GCode résultant." #: flatcamParsers/ParseFont.py:303 @@ -14341,14 +14192,14 @@ msgstr "Police non supportée, essayez-en une autre." msgid "Gerber processing. Parsing" msgstr "Traitement Gerber. L'analyse" -#: flatcamParsers/ParseGerber.py:426 flatcamParsers/ParseHPGL2.py:182 +#: flatcamParsers/ParseGerber.py:426 flatcamParsers/ParseHPGL2.py:178 msgid "lines" msgstr "lignes" #: flatcamParsers/ParseGerber.py:1002 flatcamParsers/ParseGerber.py:1102 -#: flatcamParsers/ParseHPGL2.py:275 flatcamParsers/ParseHPGL2.py:289 -#: flatcamParsers/ParseHPGL2.py:308 flatcamParsers/ParseHPGL2.py:332 -#: flatcamParsers/ParseHPGL2.py:367 +#: 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 "Coordonnées manquantes, ligne ignorée" @@ -14364,7 +14215,7 @@ msgstr "" "La région n'a pas assez de points. Le fichier sera traité, mais il y a des " "erreurs d'analyse. Numéro de ligne" -#: flatcamParsers/ParseGerber.py:1488 flatcamParsers/ParseHPGL2.py:402 +#: flatcamParsers/ParseGerber.py:1488 flatcamParsers/ParseHPGL2.py:398 msgid "Gerber processing. Joining polygons" msgstr "Traitement Gerber. Jointure de polygones" @@ -14408,19 +14259,19 @@ msgstr "La rotation de Gerber est fait." msgid "Gerber Buffer done." msgstr "Gerber Buffer fait." -#: flatcamParsers/ParseHPGL2.py:182 +#: flatcamParsers/ParseHPGL2.py:178 msgid "HPGL2 processing. Parsing" msgstr "Traitement HPGL2. Analyse" -#: flatcamParsers/ParseHPGL2.py:414 +#: flatcamParsers/ParseHPGL2.py:410 msgid "HPGL2 Line" msgstr "Ligne HPGL2" -#: flatcamParsers/ParseHPGL2.py:414 +#: flatcamParsers/ParseHPGL2.py:410 msgid "HPGL2 Line Content" msgstr "Contenu de la ligne HPGL2" -#: flatcamParsers/ParseHPGL2.py:415 +#: flatcamParsers/ParseHPGL2.py:411 msgid "HPGL2 Parser ERROR" msgstr "ERREUR de l'analyseur HPGL2" @@ -15009,7 +14860,7 @@ msgid "" "It can be Gerber, Excellon or Geometry." msgstr "" "Type d'objet FlatCAM à utiliser comme référence de Copper Thieving.\n" -"Il peut s'agir de Gerber, Excellon ou Geometry." +"Il peut s'agir de Gerber, Excellon ou Géométrie." #: flatcamTools/ToolCopperThieving.py:149 flatcamTools/ToolNCC.py:562 #: flatcamTools/ToolPaint.py:506 @@ -15152,10 +15003,10 @@ msgid "Copper Thieving Tool done." msgstr "Outil de Copper Thieving fait." #: flatcamTools/ToolCopperThieving.py:759 -#: flatcamTools/ToolCopperThieving.py:792 flatcamTools/ToolCutOut.py:519 -#: flatcamTools/ToolCutOut.py:724 flatcamTools/ToolInvertGerber.py:208 -#: flatcamTools/ToolNCC.py:1599 flatcamTools/ToolNCC.py:1640 -#: flatcamTools/ToolNCC.py:1669 flatcamTools/ToolPaint.py:1474 +#: flatcamTools/ToolCopperThieving.py:792 flatcamTools/ToolCutOut.py:515 +#: flatcamTools/ToolCutOut.py:720 flatcamTools/ToolInvertGerber.py:208 +#: flatcamTools/ToolNCC.py:1594 flatcamTools/ToolNCC.py:1635 +#: flatcamTools/ToolNCC.py:1664 flatcamTools/ToolPaint.py:1469 #: flatcamTools/ToolPanelize.py:412 flatcamTools/ToolPanelize.py:426 #: flatcamTools/ToolSub.py:294 flatcamTools/ToolSub.py:307 #: flatcamTools/ToolSub.py:498 flatcamTools/ToolSub.py:513 @@ -15163,10 +15014,22 @@ msgstr "Outil de Copper Thieving fait." msgid "Could not retrieve object" msgstr "Impossible de récupérer l'objet" +#: 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:820 msgid "Click the end point of the filling area." msgstr "Cliquez sur le point final de la zone de remplissage." +#: 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 ajoutée. Cliquez pour commencer à ajouter la zone suivante ou faites un " +"clic droit pour terminer." + #: flatcamTools/ToolCopperThieving.py:942 #: flatcamTools/ToolCopperThieving.py:946 #: flatcamTools/ToolCopperThieving.py:1007 @@ -15194,14 +15057,14 @@ msgstr "Travail..." msgid "Geometry not supported for bounding box" msgstr "Géométrie non prise en charge pour le cadre de sélection" -#: flatcamTools/ToolCopperThieving.py:1067 flatcamTools/ToolNCC.py:1933 -#: flatcamTools/ToolNCC.py:1988 flatcamTools/ToolNCC.py:2992 -#: flatcamTools/ToolPaint.py:3380 +#: 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:1104 flatcamTools/ToolNCC.py:1958 -#: flatcamTools/ToolNCC.py:2011 flatcamTools/ToolNCC.py:3034 +#: 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." @@ -15266,11 +15129,11 @@ msgstr "Paramètres d'outil" #: flatcamTools/ToolCutOut.py:238 msgid "A. Automatic Bridge Gaps" -msgstr "A. Lacunes automatiques des ponts" +msgstr "A. Pont de maintient Automatique" #: 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." +msgstr "Cette section gère la création des ponts de maintient automatiques." #: flatcamTools/ToolCutOut.py:247 msgid "" @@ -15285,16 +15148,16 @@ msgid "" "- 2tb - 2*top + 2*bottom\n" "- 8 - 2*left + 2*right +2*top + 2*bottom" msgstr "" -"Nombre de trous utilisés pour la découpe automatique.\n" -"Il peut y avoir au maximum 8 ponts / lacunes.\n" +"Nombres de ponts à garder lors de la découpe.\n" +"Il peut y avoir au maximum 8 ponts.\n" "Les choix sont:\n" -"- Aucun - pas de lacunes\n" -"- lr - gauche + droite\n" -"- tb - haut + bas\n" -"- 4 - gauche + droite + haut + bas\n" -"- 2lr - 2 * gauche + 2 * droite\n" -"- 2tb - 2 * Haut + 2 * Bas\n" -"- 8 - 2 * gauche + 2 * droite + 2 * en haut + 2 * en bas" +"- Aucun - Découpe total\n" +"- LR - Gauche + Droite\n" +"- TB - Haut + Bas\n" +"- 4 - Gauche + Droite + Haut + Bas\n" +"- 2LR - 2 Gauche + 2 Droite\n" +"- 2TB - 2 Haut + 2 Bas\n" +"- 8 - 2 Gauches + 2 Droites + 2 Hauts + 2 Bas" #: flatcamTools/ToolCutOut.py:269 msgid "Generate Freeform Geometry" @@ -15328,7 +15191,7 @@ msgstr "" #: flatcamTools/ToolCutOut.py:304 msgid "B. Manual Bridge Gaps" -msgstr "B. Lacunes manuelles du pont" +msgstr "B. Pont de maintient Manuel" #: flatcamTools/ToolCutOut.py:306 msgid "" @@ -15363,7 +15226,7 @@ msgstr "" #: flatcamTools/ToolCutOut.py:343 msgid "Manual Add Bridge Gaps" -msgstr "Ajout manuel de lacunes dans les ponts" +msgstr "Ajout manuel de ponts dans la découpe" #: flatcamTools/ToolCutOut.py:345 msgid "" @@ -15377,9 +15240,9 @@ msgstr "" "créer un pont pour séparer PCB de\n" "le matériau environnant.\n" "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." +"l'objet Géométrie utilisé en tant que géométrie de découpe." -#: flatcamTools/ToolCutOut.py:524 +#: flatcamTools/ToolCutOut.py:520 msgid "" "There is no object selected for Cutout.\n" "Select one and try again." @@ -15387,27 +15250,27 @@ msgstr "" "Aucun objet n'est sélectionné pour la découpe.\n" "Sélectionnez-en un et réessayez." -#: flatcamTools/ToolCutOut.py:530 flatcamTools/ToolCutOut.py:733 -#: flatcamTools/ToolCutOut.py:914 flatcamTools/ToolCutOut.py:996 +#: flatcamTools/ToolCutOut.py:526 flatcamTools/ToolCutOut.py:729 +#: flatcamTools/ToolCutOut.py:910 flatcamTools/ToolCutOut.py:992 #: 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:544 flatcamTools/ToolCutOut.py:748 +#: flatcamTools/ToolCutOut.py:540 flatcamTools/ToolCutOut.py:744 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:549 flatcamTools/ToolCutOut.py:752 +#: flatcamTools/ToolCutOut.py:545 flatcamTools/ToolCutOut.py:748 msgid "" "Gaps value can be only one of: 'None', 'lr', 'tb', '2lr', '2tb', 4 or 8. " "Fill in a correct value and retry. " msgstr "" -"La valeur d'espacement ne peut être que l'une des valeurs suivantes: " -"'Aucune', 'lr', 'tb', '2lr', '2tb', 4 ou 8. Saisissez une valeur correcte, " -"puis réessayez. " +"Le nombres des ponts ne peut être que l'une des valeurs suivantes: 'Aucune', " +"'None', 'LR', 'TB', '2LR','2TB', 4 ou 8. Saisissez une valeur correcte, puis " +"réessayez. " -#: flatcamTools/ToolCutOut.py:554 flatcamTools/ToolCutOut.py:758 +#: flatcamTools/ToolCutOut.py:550 flatcamTools/ToolCutOut.py:754 msgid "" "Cutout operation cannot be done on a multi-geo Geometry.\n" "Optionally, this Multi-geo Geometry can be converted to Single-geo " @@ -15420,45 +15283,45 @@ msgstr "" "géo,\n" "et après cela effectuer la découpe." -#: flatcamTools/ToolCutOut.py:706 flatcamTools/ToolCutOut.py:903 +#: flatcamTools/ToolCutOut.py:702 flatcamTools/ToolCutOut.py:899 msgid "Any form CutOut operation finished." msgstr "Opération de découpe Forme Libre terminée." -#: flatcamTools/ToolCutOut.py:728 flatcamTools/ToolInvertGerber.py:214 -#: flatcamTools/ToolNCC.py:1603 flatcamTools/ToolPaint.py:1397 +#: flatcamTools/ToolCutOut.py:724 flatcamTools/ToolInvertGerber.py:214 +#: flatcamTools/ToolNCC.py:1598 flatcamTools/ToolPaint.py:1392 #: flatcamTools/ToolPanelize.py:417 tclCommands/TclCommandBbox.py:71 #: tclCommands/TclCommandNregions.py:71 msgid "Object not found" msgstr "Objet non trouvé" -#: flatcamTools/ToolCutOut.py:872 +#: flatcamTools/ToolCutOut.py:868 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:908 +#: flatcamTools/ToolCutOut.py:904 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:925 flatcamTools/ToolCutOut.py:951 +#: flatcamTools/ToolCutOut.py:921 flatcamTools/ToolCutOut.py:947 msgid "Could not retrieve Geometry object" msgstr "Impossible de récupérer l'objet de géométrie" -#: flatcamTools/ToolCutOut.py:956 +#: flatcamTools/ToolCutOut.py:952 msgid "Geometry object for manual cutout not found" msgstr "Objet de géométrie pour découpe manuelle introuvable" -#: flatcamTools/ToolCutOut.py:966 +#: flatcamTools/ToolCutOut.py:962 msgid "Added manual Bridge Gap." msgstr "Ajout d'un écart de pont manuel." -#: flatcamTools/ToolCutOut.py:978 +#: flatcamTools/ToolCutOut.py:974 msgid "Could not retrieve Gerber object" msgstr "Impossible de récupérer l'objet Gerber" -#: flatcamTools/ToolCutOut.py:983 +#: flatcamTools/ToolCutOut.py:979 msgid "" "There is no Gerber object selected for Cutout.\n" "Select one and try again." @@ -15466,7 +15329,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:989 +#: flatcamTools/ToolCutOut.py:985 msgid "" "The selected object has to be of Gerber type.\n" "Select a Gerber file and try again." @@ -15474,11 +15337,11 @@ msgstr "" "L'objet sélectionné doit être de type Gerber.\n" "Sélectionnez un fichier Gerber et réessayez." -#: flatcamTools/ToolCutOut.py:1024 +#: flatcamTools/ToolCutOut.py:1020 msgid "Geometry not supported for cutout" msgstr "Géométrie non prise en charge pour la découpe" -#: flatcamTools/ToolCutOut.py:1099 +#: flatcamTools/ToolCutOut.py:1095 msgid "Making manual bridge gap..." msgstr "Faire un pont manuel ..." @@ -15657,7 +15520,7 @@ msgstr "" #: flatcamTools/ToolDblSided.py:361 msgid "Drill Diameter" -msgstr "Dia. de perçage" +msgstr "Diam. de perçage" #: flatcamTools/ToolDblSided.py:390 flatcamTools/ToolDblSided.py:397 msgid "" @@ -15761,7 +15624,7 @@ msgstr "" #: 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 " +"Il n’y a pas de coordonnées de perceuse d’alignement à utiliser. Ajoutez-les " "et réessayez." #: flatcamTools/ToolDblSided.py:648 @@ -15772,7 +15635,7 @@ msgstr "Excellon objet avec des exercices d'alignement créé ..." #: 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." +"Seuls les objets Gerber, Excellon et Géométrie peuvent être mis en miroir." #: flatcamTools/ToolDblSided.py:671 flatcamTools/ToolDblSided.py:715 msgid "" @@ -15798,7 +15661,7 @@ msgstr "Il n'y a pas d'objet Excellon chargé ..." #: flatcamTools/ToolDblSided.py:744 msgid "There is no Geometry object loaded ..." -msgstr "Il n'y a pas d'objet Geometry chargé ..." +msgstr "Il n'y a pas d'objet Géométrie chargé ..." #: flatcamTools/ToolDistance.py:57 flatcamTools/ToolDistanceMin.py:51 msgid "Those are the units in which the distance is measured." @@ -15906,7 +15769,7 @@ msgstr "Résultat" #: flatcamTools/ToolDistanceMin.py:32 flatcamTools/ToolDistanceMin.py:144 msgid "Minimum Distance Tool" -msgstr "Outil de Distance Minimale" +msgstr "Mesure Distance Mini" #: flatcamTools/ToolDistanceMin.py:55 msgid "First object point" @@ -15958,9 +15821,7 @@ msgstr "" #: 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 "" -"Sélectionnez deux objets et pas plus. Actuellement, la sélection a des " -"objets: " +msgstr "Ne sélectionnez pas plus de 2 objets. Nombres de sélections en cours " #: flatcamTools/ToolDistanceMin.py:294 msgid "Objects intersects or touch at" @@ -16522,7 +16383,7 @@ msgstr "" "- Forme en V -> il désactivera le paramètre Z-Cut dans la forme d'interface " "utilisateur de géométrie résultante\n" "et activer deux champs de formulaire d'interface utilisateur supplémentaires " -"dans la géométrie résultante: V-Tip Dia et\n" +"dans la géométrie résultante: V-Tip Diam et\n" "Angle V-Tip. Le réglage de ces deux valeurs ajustera le paramètre Z-Cut tel\n" "car la largeur de coupe dans le matériau sera égale à la valeur dans le " "diamètre de l'outil\n" @@ -16560,119 +16421,119 @@ msgstr "" msgid "Generate Geometry" msgstr "Générer de la Géométrie" -#: flatcamTools/ToolNCC.py:1425 flatcamTools/ToolPaint.py:1184 +#: flatcamTools/ToolNCC.py:1420 flatcamTools/ToolPaint.py:1179 #: flatcamTools/ToolSolderPaste.py:888 msgid "Please enter a tool diameter to add, in Float format." msgstr "Veuillez saisir un diamètre d'outil à ajouter, au format réel." -#: flatcamTools/ToolNCC.py:1456 flatcamTools/ToolNCC.py:4013 -#: flatcamTools/ToolPaint.py:1208 flatcamTools/ToolPaint.py:3603 +#: 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 "Annulé. Outil déjà dans la table d'outils." -#: flatcamTools/ToolNCC.py:1463 flatcamTools/ToolNCC.py:4030 -#: flatcamTools/ToolPaint.py:1213 flatcamTools/ToolPaint.py:3620 +#: flatcamTools/ToolNCC.py:1458 flatcamTools/ToolNCC.py:4025 +#: flatcamTools/ToolPaint.py:1208 flatcamTools/ToolPaint.py:3615 msgid "New tool added to Tool Table." msgstr "Nouvel outil ajouté à la table d'outils." -#: flatcamTools/ToolNCC.py:1507 flatcamTools/ToolPaint.py:1257 +#: flatcamTools/ToolNCC.py:1502 flatcamTools/ToolPaint.py:1252 msgid "Tool from Tool Table was edited." msgstr "L'outil de la table d'outils a été modifié." -#: flatcamTools/ToolNCC.py:1519 flatcamTools/ToolPaint.py:1269 +#: flatcamTools/ToolNCC.py:1514 flatcamTools/ToolPaint.py:1264 #: 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." -#: flatcamTools/ToolNCC.py:1571 flatcamTools/ToolPaint.py:1367 +#: flatcamTools/ToolNCC.py:1566 flatcamTools/ToolPaint.py:1362 msgid "Delete failed. Select a tool to delete." msgstr "La suppression a échoué. Sélectionnez un outil à supprimer." -#: flatcamTools/ToolNCC.py:1577 flatcamTools/ToolPaint.py:1373 +#: flatcamTools/ToolNCC.py:1572 flatcamTools/ToolPaint.py:1368 msgid "Tool(s) deleted from Tool Table." msgstr "Outil (s) supprimé (s) de la table d'outils." -#: flatcamTools/ToolNCC.py:1619 +#: flatcamTools/ToolNCC.py:1614 msgid "Wrong Tool Dia value format entered, use a number." -msgstr "Mauvais outil Format de valeur Dia entré, utilisez un nombre." +msgstr "Mauvais outil Format de valeur Diam entré, utilisez un nombre." -#: flatcamTools/ToolNCC.py:1628 flatcamTools/ToolPaint.py:1424 +#: flatcamTools/ToolNCC.py:1623 flatcamTools/ToolPaint.py:1419 msgid "No selected tools in Tool Table." msgstr "Aucun outil sélectionné dans la table d'outils." -#: flatcamTools/ToolNCC.py:1704 flatcamTools/ToolPaint.py:1600 +#: flatcamTools/ToolNCC.py:1699 flatcamTools/ToolPaint.py:1595 msgid "Click the end point of the paint area." msgstr "Cliquez sur le point final de la zone de peinture." -#: flatcamTools/ToolNCC.py:1976 flatcamTools/ToolNCC.py:2964 +#: flatcamTools/ToolNCC.py:1971 flatcamTools/ToolNCC.py:2959 msgid "NCC Tool. Preparing non-copper polygons." msgstr "Outil de la NCC. Préparer des polygones non en cuivre." -#: flatcamTools/ToolNCC.py:2035 flatcamTools/ToolNCC.py:3092 +#: flatcamTools/ToolNCC.py:2030 flatcamTools/ToolNCC.py:3087 msgid "NCC Tool. Calculate 'empty' area." msgstr "Outil de la NCC. Calculez la surface \"vide\"." -#: flatcamTools/ToolNCC.py:2054 flatcamTools/ToolNCC.py:2160 -#: flatcamTools/ToolNCC.py:2174 flatcamTools/ToolNCC.py:3105 -#: flatcamTools/ToolNCC.py:3210 flatcamTools/ToolNCC.py:3225 -#: flatcamTools/ToolNCC.py:3491 flatcamTools/ToolNCC.py:3592 -#: flatcamTools/ToolNCC.py:3607 +#: 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 "Mise en mémoire tampon terminée" -#: flatcamTools/ToolNCC.py:2062 flatcamTools/ToolNCC.py:2181 -#: flatcamTools/ToolNCC.py:3113 flatcamTools/ToolNCC.py:3232 -#: flatcamTools/ToolNCC.py:3498 flatcamTools/ToolNCC.py:3614 +#: 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 "Impossible d'obtenir que l'étendue de la zone soit non dépolluée." -#: flatcamTools/ToolNCC.py:2089 flatcamTools/ToolNCC.py:2167 -#: flatcamTools/ToolNCC.py:3140 flatcamTools/ToolNCC.py:3217 -#: flatcamTools/ToolNCC.py:3518 flatcamTools/ToolNCC.py:3599 +#: 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 "" "La géométrie d'isolement est rompue. La marge est inférieure au diamètre de " "l'outil d'isolation." -#: flatcamTools/ToolNCC.py:2184 flatcamTools/ToolNCC.py:3236 -#: flatcamTools/ToolNCC.py:3617 +#: flatcamTools/ToolNCC.py:2179 flatcamTools/ToolNCC.py:3231 +#: flatcamTools/ToolNCC.py:3612 msgid "The selected object is not suitable for copper clearing." msgstr "L'objet sélectionné ne convient pas à la clarification du cuivre." -#: flatcamTools/ToolNCC.py:2191 flatcamTools/ToolNCC.py:3243 +#: flatcamTools/ToolNCC.py:2186 flatcamTools/ToolNCC.py:3238 msgid "NCC Tool. Finished calculation of 'empty' area." msgstr "Outil de la NCC. Terminé le calcul de la zone \"vide\"." -#: flatcamTools/ToolNCC.py:2222 flatcamTools/ToolNCC.py:2224 -#: flatcamTools/ToolNCC.py:2916 flatcamTools/ToolNCC.py:2918 +#: flatcamTools/ToolNCC.py:2217 flatcamTools/ToolNCC.py:2219 +#: flatcamTools/ToolNCC.py:2911 flatcamTools/ToolNCC.py:2913 msgid "Non-Copper clearing ..." msgstr "Dégagement sans cuivre ..." -#: flatcamTools/ToolNCC.py:2278 flatcamTools/ToolNCC.py:3060 +#: flatcamTools/ToolNCC.py:2273 flatcamTools/ToolNCC.py:3055 msgid "" "NCC Tool. Finished non-copper polygons. Normal copper clearing task started." msgstr "" "Outil de la NCC. Polygones non-cuivre finis. La tâche normale de nettoyage " "du cuivre a commencé." -#: flatcamTools/ToolNCC.py:2312 flatcamTools/ToolNCC.py:2592 +#: flatcamTools/ToolNCC.py:2307 flatcamTools/ToolNCC.py:2587 msgid "NCC Tool failed creating bounding box." msgstr "L'outil NCC n'a pas pu créer de boîte englobante." -#: flatcamTools/ToolNCC.py:2326 flatcamTools/ToolNCC.py:2609 -#: flatcamTools/ToolNCC.py:3256 flatcamTools/ToolNCC.py:3642 +#: flatcamTools/ToolNCC.py:2321 flatcamTools/ToolNCC.py:2604 +#: flatcamTools/ToolNCC.py:3251 flatcamTools/ToolNCC.py:3637 msgid "NCC Tool clearing with tool diameter" msgstr "L'outil NCC s'efface avec le diamètre de l'outil" -#: flatcamTools/ToolNCC.py:2326 flatcamTools/ToolNCC.py:2609 -#: flatcamTools/ToolNCC.py:3256 flatcamTools/ToolNCC.py:3642 +#: flatcamTools/ToolNCC.py:2321 flatcamTools/ToolNCC.py:2604 +#: flatcamTools/ToolNCC.py:3251 flatcamTools/ToolNCC.py:3637 msgid "started." msgstr "commencé." -#: flatcamTools/ToolNCC.py:2518 flatcamTools/ToolNCC.py:3417 +#: 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 " @@ -16684,26 +16545,26 @@ msgstr "" "géométrie peinte.\n" "Modifiez les paramètres de peinture et réessayez." -#: flatcamTools/ToolNCC.py:2527 flatcamTools/ToolNCC.py:3426 +#: flatcamTools/ToolNCC.py:2522 flatcamTools/ToolNCC.py:3421 msgid "NCC Tool clear all done." msgstr "Outil de la NCC. Effacer tout fait." -#: flatcamTools/ToolNCC.py:2530 flatcamTools/ToolNCC.py:3429 +#: flatcamTools/ToolNCC.py:2525 flatcamTools/ToolNCC.py:3424 msgid "NCC Tool clear all done but the copper features isolation is broken for" msgstr "" "Outil de la CCN. Effacer tout fait, mais l'isolation des caractéristiques de " "cuivre est cassée pour" -#: flatcamTools/ToolNCC.py:2532 flatcamTools/ToolNCC.py:2817 -#: flatcamTools/ToolNCC.py:3431 flatcamTools/ToolNCC.py:3814 +#: flatcamTools/ToolNCC.py:2527 flatcamTools/ToolNCC.py:2812 +#: flatcamTools/ToolNCC.py:3426 flatcamTools/ToolNCC.py:3809 msgid "tools" msgstr "outils" -#: flatcamTools/ToolNCC.py:2813 flatcamTools/ToolNCC.py:3810 +#: flatcamTools/ToolNCC.py:2808 flatcamTools/ToolNCC.py:3805 msgid "NCC Tool Rest Machining clear all done." msgstr "Outil de la NCC. Reste l'usinage clair tout fait." -#: flatcamTools/ToolNCC.py:2816 flatcamTools/ToolNCC.py:3813 +#: flatcamTools/ToolNCC.py:2811 flatcamTools/ToolNCC.py:3808 msgid "" "NCC Tool Rest Machining clear all done but the copper features isolation is " "broken for" @@ -16711,16 +16572,16 @@ msgstr "" "Outil de la NCC. Reste l'usinage clair, tout est fait, mais l'isolation des " "caractéristiques en cuivre est cassée" -#: flatcamTools/ToolNCC.py:2928 +#: flatcamTools/ToolNCC.py:2923 msgid "NCC Tool started. Reading parameters." msgstr "L'outil NCC a commencé. Lecture des paramètres." -#: flatcamTools/ToolNCC.py:3906 +#: flatcamTools/ToolNCC.py:3901 msgid "" "Try to use the Buffering Type = Full in Preferences -> Gerber General. " "Reload the Gerber file after this change." msgstr "" -"Essayez d'utiliser le type de mise en tampon = Plein dans Préférences -> " +"Essayez d'utiliser le type de mise en tampon = Plein dans Paramètres -> " "Général Gerber. Rechargez le fichier Gerber après cette modification." #: flatcamTools/ToolOptimal.py:79 @@ -16951,7 +16812,7 @@ msgstr "" "- Forme en V -> il désactivera le paramètre Z-Cut dans la forme d'interface " "utilisateur de géométrie résultante\n" "et activer deux champs de formulaire d'interface utilisateur supplémentaires " -"dans la géométrie résultante: V-Tip Dia et\n" +"dans la géométrie résultante: V-Tip Diam et\n" "Angle V-Tip. Le réglage de ces deux valeurs ajustera le paramètre Z-Cut tel\n" "car la largeur de coupe dans le matériau sera égale à la valeur dans le " "diamètre de l'outil\n" @@ -16986,99 +16847,99 @@ msgstr "" "- 'Objet de référence' - effectuera un nettoyage sans cuivre dans la zone\n" "spécifié par un autre objet." -#: flatcamTools/ToolPaint.py:1393 +#: flatcamTools/ToolPaint.py:1388 #, python-format msgid "Could not retrieve object: %s" msgstr "Impossible de récupérer l'objet: %s" -#: flatcamTools/ToolPaint.py:1403 +#: flatcamTools/ToolPaint.py:1398 msgid "Can't do Paint on MultiGeo geometries" msgstr "Impossible de peindre sur des géométries MultiGeo" -#: flatcamTools/ToolPaint.py:1433 +#: flatcamTools/ToolPaint.py:1428 msgid "Click on a polygon to paint it." msgstr "Cliquez sur un polygone pour le peindre." -#: flatcamTools/ToolPaint.py:1453 +#: flatcamTools/ToolPaint.py:1448 msgid "Click the start point of the paint area." msgstr "Cliquez sur le point de départ de la zone de peinture." -#: flatcamTools/ToolPaint.py:1518 +#: flatcamTools/ToolPaint.py:1513 msgid "Click to add next polygon or right click to start painting." msgstr "" "Cliquez pour ajouter le polygone suivant ou cliquez avec le bouton droit " "pour commencer à peindre." -#: flatcamTools/ToolPaint.py:1531 +#: flatcamTools/ToolPaint.py:1526 msgid "Click to add/remove next polygon or right click to start painting." msgstr "" "Cliquez pour ajouter / supprimer le polygone suivant ou cliquez avec le " "bouton droit pour commencer à peindre." -#: flatcamTools/ToolPaint.py:2029 +#: flatcamTools/ToolPaint.py:2024 msgid "Painting polygon with method: lines." msgstr "Peinture polygone avec méthode: lignes." -#: flatcamTools/ToolPaint.py:2041 +#: flatcamTools/ToolPaint.py:2036 msgid "Failed. Painting polygon with method: seed." msgstr "Échoué. Peinture polygone avec méthode: graine." -#: flatcamTools/ToolPaint.py:2052 +#: flatcamTools/ToolPaint.py:2047 msgid "Failed. Painting polygon with method: standard." msgstr "Échoué. Peinture polygone avec méthode: standard." -#: flatcamTools/ToolPaint.py:2068 +#: flatcamTools/ToolPaint.py:2063 msgid "Geometry could not be painted completely" msgstr "La géométrie n'a pas pu être peinte complètement" -#: flatcamTools/ToolPaint.py:2097 flatcamTools/ToolPaint.py:2100 -#: flatcamTools/ToolPaint.py:2108 flatcamTools/ToolPaint.py:2411 -#: flatcamTools/ToolPaint.py:2414 flatcamTools/ToolPaint.py:2422 -#: flatcamTools/ToolPaint.py:2910 flatcamTools/ToolPaint.py:2913 -#: flatcamTools/ToolPaint.py:2919 +#: 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 "Outil de Peinture." -#: flatcamTools/ToolPaint.py:2097 flatcamTools/ToolPaint.py:2100 -#: flatcamTools/ToolPaint.py:2108 +#: flatcamTools/ToolPaint.py:2092 flatcamTools/ToolPaint.py:2095 +#: flatcamTools/ToolPaint.py:2103 msgid "Normal painting polygon task started." msgstr "La tâche de peinture normale du polygone a commencé." -#: flatcamTools/ToolPaint.py:2098 flatcamTools/ToolPaint.py:2412 -#: flatcamTools/ToolPaint.py:2911 +#: flatcamTools/ToolPaint.py:2093 flatcamTools/ToolPaint.py:2407 +#: flatcamTools/ToolPaint.py:2906 msgid "Buffering geometry..." msgstr "Mise en tampon de la géométrie ..." -#: flatcamTools/ToolPaint.py:2120 flatcamTools/ToolPaint.py:2429 -#: flatcamTools/ToolPaint.py:2927 +#: flatcamTools/ToolPaint.py:2115 flatcamTools/ToolPaint.py:2424 +#: flatcamTools/ToolPaint.py:2922 msgid "No polygon found." msgstr "Aucun polygone trouvé." -#: flatcamTools/ToolPaint.py:2150 +#: flatcamTools/ToolPaint.py:2145 msgid "Painting polygon..." msgstr "Peinture polygone ..." -#: flatcamTools/ToolPaint.py:2160 flatcamTools/ToolPaint.py:2475 -#: flatcamTools/ToolPaint.py:2665 flatcamTools/ToolPaint.py:2973 -#: flatcamTools/ToolPaint.py:3152 +#: 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 "Peinture avec diamètre d'outil = " -#: flatcamTools/ToolPaint.py:2161 flatcamTools/ToolPaint.py:2476 -#: flatcamTools/ToolPaint.py:2666 flatcamTools/ToolPaint.py:2974 -#: flatcamTools/ToolPaint.py:3153 +#: flatcamTools/ToolPaint.py:2156 flatcamTools/ToolPaint.py:2471 +#: flatcamTools/ToolPaint.py:2661 flatcamTools/ToolPaint.py:2969 +#: flatcamTools/ToolPaint.py:3148 msgid "started" msgstr "commencé" -#: flatcamTools/ToolPaint.py:2186 flatcamTools/ToolPaint.py:2502 -#: flatcamTools/ToolPaint.py:2692 flatcamTools/ToolPaint.py:3000 -#: flatcamTools/ToolPaint.py:3179 +#: 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 "Paramètre de marge trop grand. L'outil n'est pas utilisé" -#: flatcamTools/ToolPaint.py:2244 flatcamTools/ToolPaint.py:2571 -#: flatcamTools/ToolPaint.py:2749 flatcamTools/ToolPaint.py:3063 -#: flatcamTools/ToolPaint.py:3241 +#: 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" @@ -17086,9 +16947,9 @@ msgstr "" "Impossible de faire de la Peinture. Essayez une combinaison de paramètres " "différente. Ou une stratégie de peinture différente" -#: flatcamTools/ToolPaint.py:2301 flatcamTools/ToolPaint.py:2637 -#: flatcamTools/ToolPaint.py:2806 flatcamTools/ToolPaint.py:3124 -#: flatcamTools/ToolPaint.py:3303 +#: 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 " @@ -17100,58 +16961,58 @@ msgstr "" "géométrie peinte.\n" "Modifiez les paramètres de peinture et réessayez." -#: flatcamTools/ToolPaint.py:2324 +#: flatcamTools/ToolPaint.py:2319 msgid "Paint Single failed." msgstr "La peinture «simple» a échoué." -#: flatcamTools/ToolPaint.py:2330 +#: flatcamTools/ToolPaint.py:2325 msgid "Paint Single Done." msgstr "La Peinture Simple était terminée." -#: flatcamTools/ToolPaint.py:2332 flatcamTools/ToolPaint.py:2842 -#: flatcamTools/ToolPaint.py:3339 +#: flatcamTools/ToolPaint.py:2327 flatcamTools/ToolPaint.py:2837 +#: flatcamTools/ToolPaint.py:3334 msgid "Polygon Paint started ..." msgstr "Polygon Paint a commencé ..." -#: flatcamTools/ToolPaint.py:2411 flatcamTools/ToolPaint.py:2414 -#: flatcamTools/ToolPaint.py:2422 +#: flatcamTools/ToolPaint.py:2406 flatcamTools/ToolPaint.py:2409 +#: flatcamTools/ToolPaint.py:2417 msgid "Paint all polygons task started." msgstr "La tâche de peinture de tous les polygones a commencé." -#: flatcamTools/ToolPaint.py:2453 flatcamTools/ToolPaint.py:2951 +#: flatcamTools/ToolPaint.py:2448 flatcamTools/ToolPaint.py:2946 msgid "Painting polygons..." msgstr "Peindre des polygones ..." -#: flatcamTools/ToolPaint.py:2646 +#: flatcamTools/ToolPaint.py:2641 msgid "Paint All Done." msgstr "Peindre Tout fait." -#: flatcamTools/ToolPaint.py:2815 flatcamTools/ToolPaint.py:3312 +#: flatcamTools/ToolPaint.py:2810 flatcamTools/ToolPaint.py:3307 msgid "Paint All with Rest-Machining done." msgstr "Peignez tout avec le reste de l'usinage fait." -#: flatcamTools/ToolPaint.py:2834 +#: flatcamTools/ToolPaint.py:2829 msgid "Paint All failed." msgstr "La peinture «Tout» a échoué." -#: flatcamTools/ToolPaint.py:2840 +#: flatcamTools/ToolPaint.py:2835 msgid "Paint Poly All Done." msgstr "Peinture poly tout fait." -#: flatcamTools/ToolPaint.py:2910 flatcamTools/ToolPaint.py:2913 -#: flatcamTools/ToolPaint.py:2919 +#: flatcamTools/ToolPaint.py:2905 flatcamTools/ToolPaint.py:2908 +#: flatcamTools/ToolPaint.py:2914 msgid "Painting area task started." msgstr "La tâche de zone de peinture a commencé." -#: flatcamTools/ToolPaint.py:3133 +#: flatcamTools/ToolPaint.py:3128 msgid "Paint Area Done." msgstr "Peinture de la Zone réalisée." -#: flatcamTools/ToolPaint.py:3331 +#: flatcamTools/ToolPaint.py:3326 msgid "Paint Area failed." msgstr "Échec de la peinture de la Zone." -#: flatcamTools/ToolPaint.py:3337 +#: flatcamTools/ToolPaint.py:3332 msgid "Paint Poly Area Done." msgstr "La peinture 'Poly Zone' est terminée." @@ -18357,11 +18218,11 @@ msgstr "" #: flatcamTools/ToolSub.py:563 msgid "Parsing solid_geometry ..." -msgstr "Analyse de solid_geometry ..." +msgstr "Analyse de solid_géométrie ..." #: flatcamTools/ToolSub.py:565 msgid "Parsing solid_geometry for tool" -msgstr "Analyse de solid_geometry pour l'outil" +msgstr "Analyse de solid_géométrie pour l'outil" #: flatcamTools/ToolTransform.py:23 msgid "Object Transform" @@ -18542,7 +18403,7 @@ msgstr "Aucun objet sélectionné. Veuillez sélectionner un objet à compenser! #: flatcamTools/ToolTransform.py:901 msgid "CNCJob objects can't be offset." -msgstr "CNCJob objects can't be offset." +msgstr "Les objets CNCJob ne peuvent pas être décalés." #: flatcamTools/ToolTransform.py:914 msgid "Offset on the" @@ -18576,12 +18437,12 @@ msgstr "Attendu une liste de noms d'objets séparés par une virgule. Eu" msgid "TclCommand Bounds done." msgstr "TclCommand Bounds terminé." -#: tclCommands/TclCommandCopperClear.py:281 tclCommands/TclCommandPaint.py:277 +#: tclCommands/TclCommandCopperClear.py:276 tclCommands/TclCommandPaint.py:272 #: tclCommands/TclCommandScale.py:81 msgid "Could not retrieve box object" msgstr "Impossible de récupérer l'objet boîte" -#: tclCommands/TclCommandCopperClear.py:304 +#: tclCommands/TclCommandCopperClear.py:299 msgid "Expected either -box or -all." msgstr "Attend soit -box ou -all." @@ -18595,8 +18456,8 @@ msgstr "" #: 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." +"Le nombre des ponts ne peut avoir que l'une des valeurs suivantes: 'None', " +"'LR', 'TB', '2LR', '2TB', 4 ou 8." #: tclCommands/TclCommandGeoCutout.py:301 #: tclCommands/TclCommandGeoCutout.py:359 @@ -18619,15 +18480,15 @@ msgstr "Tapez help pour l'utiliser." msgid "Example: help open_gerber" msgstr "Exemple: help open_gerber" -#: tclCommands/TclCommandPaint.py:249 +#: tclCommands/TclCommandPaint.py:244 msgid "Expected -x and -y ." msgstr "Attendu -x et -y ." -#: tclCommands/TclCommandPaint.py:270 +#: tclCommands/TclCommandPaint.py:265 msgid "Expected -box ." msgstr "Attendu -box ." -#: tclCommands/TclCommandPaint.py:291 +#: tclCommands/TclCommandPaint.py:286 msgid "" "None of the following args: 'box', 'single', 'all' were used.\n" "Paint failed." @@ -18957,7 +18818,7 @@ msgstr "" #~ 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 " +#~ " - '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" From fa33a5f4877192bbfeb2a0a08c3fcc5a375b56e6 Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Sat, 16 May 2020 19:13:05 +0300 Subject: [PATCH 31/99] - worked on the NCC Tool; added a new clear method named 'Combo' which will go through all methods until the clear is done - added a Preferences parameter for font size used in HUD --- CHANGELOG.md | 5 + FlatCAMApp.py | 28 +- FlatCAMDB.py | 2 +- flatcamGUI/PlotCanvas.py | 31 +- flatcamGUI/PlotCanvasLegacy.py | 11 +- .../preferences/PreferencesUIManager.py | 4 + .../general/GeneralAPPSetGroupUI.py | 21 +- .../preferences/tools/ToolsNCCPrefGroupUI.py | 2 +- flatcamTools/ToolNCC.py | 321 ++++++++++-------- 9 files changed, 256 insertions(+), 169 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f0cb4a59..57dc65db 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,11 @@ CHANGELOG for FlatCAM beta ================================================= +16.05.2020 + +- worked on the NCC Tool; added a new clear method named 'Combo' which will go through all methods until the clear is done +- added a Preferences parameter for font size used in HUD + 13.05.2020 - updated the French translation strings, made by @micmac (Michel) diff --git a/FlatCAMApp.py b/FlatCAMApp.py index e551d704..6f639f8e 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -3589,6 +3589,11 @@ class App(QtCore.QObject): 'textbox_font_size', self.ui.general_defaults_form.general_app_set_group.textbox_font_size_spinner.get_value() ) + stgs.setValue( + 'hud_font_size', + self.ui.general_defaults_form.general_app_set_group.hud_font_size_spinner.get_value() + ) + stgs.setValue('toolbar_lock', self.ui.lock_action.isChecked()) stgs.setValue( 'machinist', @@ -6519,10 +6524,7 @@ class App(QtCore.QObject): self.inform.emit('') def grid_status(self): - if self.ui.grid_snap_btn.isChecked(): - return True - else: - return False + return True if self.ui.grid_snap_btn.isChecked() else False def populate_cmenu_grids(self): units = self.defaults['units'].lower() @@ -6578,14 +6580,11 @@ class App(QtCore.QObject): else: if val not in self.defaults["global_grid_context_menu"][str(units)]: self.defaults["global_grid_context_menu"][str(units)].append(val) - self.inform.emit('[success] %s...' % - _("New Grid added")) + self.inform.emit('[success] %s...' % _("New Grid added")) else: - self.inform.emit('[WARNING_NOTCL] %s...' % - _("Grid already exists")) + self.inform.emit('[WARNING_NOTCL] %s...' % _("Grid already exists")) else: - self.inform.emit('[WARNING_NOTCL] %s...' % - _("Adding New Grid cancelled")) + self.inform.emit('[WARNING_NOTCL] %s...' % _("Adding New Grid cancelled")) def on_grid_delete(self): # ## Current application units in lower Case @@ -6606,14 +6605,11 @@ class App(QtCore.QObject): try: self.defaults["global_grid_context_menu"][str(units)].remove(val) except ValueError: - self.inform.emit('[ERROR_NOTCL]%s...' % - _(" Grid Value does not exist")) + self.inform.emit('[ERROR_NOTCL]%s...' % _(" Grid Value does not exist")) return - self.inform.emit('[success] %s...' % - _("Grid Value deleted")) + self.inform.emit('[success] %s...' % _("Grid Value deleted")) else: - self.inform.emit('[WARNING_NOTCL] %s...' % - _("Delete Grid value cancelled")) + self.inform.emit('[WARNING_NOTCL] %s...' % _("Delete Grid value cancelled")) def on_shortcut_list(self): self.defaults.report_usage("on_shortcut_list()") diff --git a/FlatCAMDB.py b/FlatCAMDB.py index eb270ee3..f32bc37f 100644 --- a/FlatCAMDB.py +++ b/FlatCAMDB.py @@ -1478,7 +1478,7 @@ class ToolsDB2(QtWidgets.QWidget): self.ncc_method_combo = FCComboBox() self.ncc_method_combo.addItems( - [_("Standard"), _("Seed"), _("Lines")] + [_("Standard"), _("Seed"), _("Lines"), _("Combo")] ) self.ncc_method_combo.setObjectName("gdb_n_method") diff --git a/flatcamGUI/PlotCanvas.py b/flatcamGUI/PlotCanvas.py index 86722c72..2a184669 100644 --- a/flatcamGUI/PlotCanvas.py +++ b/flatcamGUI/PlotCanvas.py @@ -150,19 +150,38 @@ class PlotCanvas(QtCore.QObject, VisPyCanvas): self.cursor_h_line = InfiniteLine(pos=None, color=c_color, vertical=False, parent=self.line_parent) - self.rect_hud = Rectangle(center=(95,50), color=self.rect_hud_color, border_color=self.rect_hud_color, - width=180, height=90, radius=[5, 5, 5, 5], parent=None) - self.rect_hud.set_gl_state(depth_test=False) - # HUD Display self.hud_enabled = False - self.text_hud = Text('', color=self.text_hud_color, pos=(10, 50), method='gpu', anchor_x='left', parent=None) - self.text_hud.font_size = 8 + # font size + qsettings = QtCore.QSettings("Open Source", "FlatCAM") + if qsettings.contains("hud_font_size"): + fsize = qsettings.value('hud_font_size', type=int) + else: + fsize = 8 + + # units units = self.fcapp.defaults["units"].lower() + + # coordinates and anchors + height = fsize * 11 # 90. Constant 11 is something that works + width = height * 2 # width is double the height = it is something that works + center_x = (width / 2) + 5 + center_y = (height / 2) + 5 + + # text + self.text_hud = Text('', color=self.text_hud_color, pos=(10, center_y), method='gpu', anchor_x='left', + parent=None) + self.text_hud.font_size = fsize self.text_hud.text = 'Dx:\t%s [%s]\nDy:\t%s [%s]\n\nX: \t%s [%s]\nY: \t%s [%s]' % \ ('0.0000', units, '0.0000', units, '0.0000', units, '0.0000', units) + # rectangle + self.rect_hud = Rectangle(center=(center_x, center_y), width=width, height=height, radius=[5, 5, 5, 5], + border_color=self.rect_hud_color, color=self.rect_hud_color, parent=None) + self.rect_hud.set_gl_state(depth_test=False) + + # enable the HUD if it is activated in FlatCAM Preferences if self.fcapp.defaults['global_hud'] is True: self.on_toggle_hud(state=True) diff --git a/flatcamGUI/PlotCanvasLegacy.py b/flatcamGUI/PlotCanvasLegacy.py index 09e57792..34ad0a8f 100644 --- a/flatcamGUI/PlotCanvasLegacy.py +++ b/flatcamGUI/PlotCanvasLegacy.py @@ -343,7 +343,16 @@ class PlotCanvasLegacy(QtCore.QObject): self._text = 'Dx: %s [%s]\nDy: %s [%s]\n\nX: %s [%s]\nY: %s [%s]' % \ ('0.0000', units, '0.0000', units, '0.0000', units, '0.0000', units) - self.hud_holder = AnchoredText(self._text, prop=dict(size=20), frameon=True, loc='upper left') + # set font size + qsettings = QtCore.QSettings("Open Source", "FlatCAM") + if qsettings.contains("hud_font_size"): + # I multiply with 2.5 because this seems to be the difference between the value taken by the VisPy (3D) + # and Matplotlib (Legacy2D FlatCAM graphic engine) + fsize = int(qsettings.value('hud_font_size', type=int) * 2.5) + else: + fsize = 20 + + self.hud_holder = AnchoredText(self._text, prop=dict(size=fsize), frameon=True, loc='upper left') self.hud_holder.patch.set_boxstyle("round,pad=0.,rounding_size=0.2") fc_color = self.p.rect_hud_color[:-2] diff --git a/flatcamGUI/preferences/PreferencesUIManager.py b/flatcamGUI/preferences/PreferencesUIManager.py index 3b7306fa..e7fe1347 100644 --- a/flatcamGUI/preferences/PreferencesUIManager.py +++ b/flatcamGUI/preferences/PreferencesUIManager.py @@ -978,6 +978,10 @@ class PreferencesUIManager: tb_fsize = self.ui.general_defaults_form.general_app_set_group.textbox_font_size_spinner.get_value() settgs.setValue('textbox_font_size', tb_fsize) + # save the HUD font size + hud_fsize = self.ui.general_defaults_form.general_app_set_group.hud_font_size_spinner.get_value() + settgs.setValue('hud_font_size', hud_fsize) + settgs.setValue( 'machinist', 1 if self.ui.general_defaults_form.general_app_set_group.machinist_cb.get_value() else 0 diff --git a/flatcamGUI/preferences/general/GeneralAPPSetGroupUI.py b/flatcamGUI/preferences/general/GeneralAPPSetGroupUI.py index 3daff809..3b2964e6 100644 --- a/flatcamGUI/preferences/general/GeneralAPPSetGroupUI.py +++ b/flatcamGUI/preferences/general/GeneralAPPSetGroupUI.py @@ -257,10 +257,29 @@ class GeneralAPPSetGroupUI(OptionsGroupUI): grid0.addWidget(self.textbox_font_size_label, 13, 0) grid0.addWidget(self.textbox_font_size_spinner, 13, 1) + # HUD Font Size + self.hud_font_size_label = QtWidgets.QLabel('%s:' % _('HUD')) + self.hud_font_size_label.setToolTip( + _("This sets the font size for the Heads Up Display.") + ) + + self.hud_font_size_spinner = FCSpinner() + self.hud_font_size_spinner.set_range(8, 40) + self.hud_font_size_spinner.setWrapping(True) + + qsettings = QSettings("Open Source", "FlatCAM") + if qsettings.contains("hud_font_size"): + self.hud_font_size_spinner.set_value(settings.value('hud_font_size', type=int)) + else: + self.hud_font_size_spinner.set_value(8) + + grid0.addWidget(self.hud_font_size_label, 14, 0) + grid0.addWidget(self.hud_font_size_spinner, 14, 1) + separator_line = QtWidgets.QFrame() separator_line.setFrameShape(QtWidgets.QFrame.HLine) separator_line.setFrameShadow(QtWidgets.QFrame.Sunken) - grid0.addWidget(separator_line, 14, 0, 1, 2) + grid0.addWidget(separator_line, 16, 0, 1, 2) # ----------------------------------------------------------- # -------------- MOUSE SETTINGS ----------------------------- diff --git a/flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py b/flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py index 00ec96cb..25fd24a4 100644 --- a/flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py +++ b/flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py @@ -227,7 +227,7 @@ class ToolsNCCPrefGroupUI(OptionsGroupUI): # ], orientation='vertical', stretch=False) self.ncc_method_combo = FCComboBox() self.ncc_method_combo.addItems( - [_("Standard"), _("Seed"), _("Lines")] + [_("Standard"), _("Seed"), _("Lines"), _("Combo")] ) grid0.addWidget(methodlabel, 12, 0) diff --git a/flatcamTools/ToolNCC.py b/flatcamTools/ToolNCC.py index e83d4bdb..1d83d966 100644 --- a/flatcamTools/ToolNCC.py +++ b/flatcamTools/ToolNCC.py @@ -428,7 +428,7 @@ class NonCopperClear(FlatCAMTool, Gerber): self.ncc_method_combo = FCComboBox() self.ncc_method_combo.addItems( - [_("Standard"), _("Seed"), _("Lines")] + [_("Standard"), _("Seed"), _("Lines"), _("Combo")] ) self.ncc_method_combo.setObjectName("n_method") @@ -1603,10 +1603,11 @@ class NonCopperClear(FlatCAMTool, Gerber): self.app.inform.emit('[ERROR_NOTCL] %s: %s' % (_("Object not found"), str(self.obj_name))) return - # use the selected tools in the tool table; get diameters for non-copper clear + # use the selected tools in the tool table; get diameters for isolation self.iso_dia_list = [] # use the selected tools in the tool table; get diameters for non-copper clear self.ncc_dia_list = [] + if self.tools_table.selectedItems(): for x in self.tools_table.selectedItems(): try: @@ -1911,13 +1912,15 @@ class NonCopperClear(FlatCAMTool, Gerber): self.delete_moving_selection_shape() self.delete_tool_selection_shape() - def envelope_object(self, ncc_obj, ncc_select, box_obj=None): + def calculate_bounding_box(self, ncc_obj, ncc_select, box_obj=None): """ + Will return a geometry that dictate the total extent of the area to be copper cleared - :param ncc_obj: - :param box_obj: - :param ncc_select: - :return: + :param ncc_obj: The object to be copper cleared + :param box_obj: The object whose geometry will be used as delimitation for copper clearing - if selected + :param ncc_select: String that choose what kind of reference to be used for copper clearing extent + :return: The geometry that surrounds the area to be cleared and the kind of object from which the + geometry originated (string: "gerber", "geometry" or None) """ box_kind = box_obj.kind if box_obj is not None else None @@ -1935,7 +1938,7 @@ class NonCopperClear(FlatCAMTool, Gerber): env_obj = cascaded_union(geo_n) env_obj = env_obj.convex_hull except Exception as e: - log.debug("NonCopperClear.envelope_object() 'itself' --> %s" % str(e)) + log.debug("NonCopperClear.calculate_bounding_box() 'itself' --> %s" % str(e)) self.app.inform.emit('[ERROR_NOTCL] %s' % _("No object available.")) return None elif ncc_select == _("Area Selection"): @@ -1966,12 +1969,12 @@ class NonCopperClear(FlatCAMTool, Gerber): return env_obj, box_kind - def envelope_object_to_tool_bounding_box(self, env_obj, box_kind, ncc_select, ncc_margin): + def apply_margin_to_bounding_box(self, bbox, box_kind, ncc_select, ncc_margin): """ Prepare non-copper polygons. - Create the bounding box area from which the copper features will be subtracted + Apply a margin to the bounding box area from which the copper features will be subtracted - :param env_obj: the Geometry to be used as bounding box after applying the ncc_margin + :param bbox: the Geometry to be used as bounding box after applying the ncc_margin :param box_kind: "geometry" or "gerber" :param ncc_select: the kind of area to be copper cleared :param ncc_margin: the margin around the area to be copper cleared @@ -1981,44 +1984,44 @@ class NonCopperClear(FlatCAMTool, Gerber): log.debug("NCC Tool. Preparing non-copper polygons.") self.app.inform.emit(_("NCC Tool. Preparing non-copper polygons.")) - if env_obj is None: - log.debug("NonCopperClear.envelope_object_to_tool_bounding_box() --> The object is None") + if bbox is None: + log.debug("NonCopperClear.apply_margin_to_bounding_box() --> The object is None") return 'fail' - bounding_box = None + new_bounding_box = None if ncc_select == _('Itself'): try: - bounding_box = env_obj.buffer(distance=ncc_margin, join_style=base.JOIN_STYLE.mitre) + new_bounding_box = bbox.buffer(distance=ncc_margin, join_style=base.JOIN_STYLE.mitre) except Exception as e: - log.debug("NonCopperClear.envelope_object_to_tool_bounding_box() 'itself' --> %s" % str(e)) + log.debug("NonCopperClear.apply_margin_to_bounding_box() 'itself' --> %s" % str(e)) self.app.inform.emit('[ERROR_NOTCL] %s' % _("No object available.")) return 'fail' elif ncc_select == _("Area Selection"): geo_buff_list = [] - for poly in env_obj: + for poly in bbox: if self.app.abort_flag: # graceful abort requested by the user raise grace geo_buff_list.append(poly.buffer(distance=ncc_margin, join_style=base.JOIN_STYLE.mitre)) - bounding_box = cascaded_union(geo_buff_list) + new_bounding_box = cascaded_union(geo_buff_list) elif ncc_select == _("Reference Object"): if box_kind == 'geometry': geo_buff_list = [] - for poly in env_obj: + for poly in bbox: if self.app.abort_flag: # graceful abort requested by the user raise grace geo_buff_list.append(poly.buffer(distance=ncc_margin, join_style=base.JOIN_STYLE.mitre)) - bounding_box = cascaded_union(geo_buff_list) + new_bounding_box = cascaded_union(geo_buff_list) elif box_kind == 'gerber': - bounding_box = env_obj.buffer(distance=ncc_margin, join_style=base.JOIN_STYLE.mitre) + new_bounding_box = bbox.buffer(distance=ncc_margin, join_style=base.JOIN_STYLE.mitre) else: self.app.inform.emit('[ERROR_NOTCL] %s' % _("The reference object type is not supported.")) return 'fail' log.debug("NCC Tool. Finished non-copper polygons.") - return bounding_box + return new_bounding_box def get_tool_empty_area(self, name, ncc_obj, geo_obj, isotooldia, has_offset, ncc_offset, ncc_margin, bounding_box, tools_storage): @@ -2200,14 +2203,83 @@ class NonCopperClear(FlatCAMTool, Gerber): return empty, warning_flag - def clear_copper(self, ncc_obj, - sel_obj=None, - ncctooldia=None, - isotooldia=None, - outname=None, - order=None, - tools_storage=None, - run_threaded=True): + def clear_polygon_worker(self, pol, tooldia, ncc_method, ncc_overlap, ncc_connect, ncc_contour, prog_plot): + + cp = None + + if ncc_method == _("Standard"): + try: + cp = self.clear_polygon(pol, tooldia, + steps_per_circle=self.grb_circle_steps, + overlap=ncc_overlap, contour=ncc_contour, + connect=ncc_connect, + prog_plot=prog_plot) + except grace: + return "fail" + except Exception as ee: + log.debug("NonCopperClear.clear_polygon_worker() Standard --> %s" % str(ee)) + elif ncc_method == _("Seed"): + try: + cp = self.clear_polygon2(pol, tooldia, + steps_per_circle=self.grb_circle_steps, + overlap=ncc_overlap, contour=ncc_contour, + connect=ncc_connect, + prog_plot=prog_plot) + except grace: + return "fail" + except Exception as ee: + log.debug("NonCopperClear.clear_polygon_worker() Seed --> %s" % str(ee)) + elif ncc_method == _("Lines"): + try: + cp = self.clear_polygon3(pol, tooldia, + steps_per_circle=self.grb_circle_steps, + overlap=ncc_overlap, contour=ncc_contour, + connect=ncc_connect, + prog_plot=prog_plot) + except grace: + return "fail" + except Exception as ee: + log.debug("NonCopperClear.clear_polygon_worker() Lines --> %s" % str(ee)) + elif ncc_method == _("Combo"): + try: + self.app.inform.emit(_("Clearing polygon with method: lines.")) + cp = self.clear_polygon3(pol, tooldia, + steps_per_circle=self.grb_circle_steps, + overlap=ncc_overlap, contour=ncc_contour, + connect=ncc_connect, + prog_plot=prog_plot) + + if cp and cp.objects: + pass + else: + self.app.inform.emit(_("Failed. Clearing polygon with method: seed.")) + cp = self.clear_polygon2(pol, tooldia, + steps_per_circle=self.grb_circle_steps, + overlap=ncc_overlap, contour=ncc_contour, + connect=ncc_connect, + prog_plot=prog_plot) + if cp and cp.objects: + pass + else: + self.app.inform.emit(_("Failed. Clearing polygon with method: standard.")) + cp = self.clear_polygon(pol, tooldia, + steps_per_circle=self.grb_circle_steps, + overlap=ncc_overlap, contour=ncc_contour, + connect=ncc_connect, + prog_plot=prog_plot) + except grace: + return "fail" + except Exception as ee: + log.debug("NonCopperClear.clear_polygon_worker() Combo --> %s" % str(ee)) + + if cp and cp.objects: + return list(cp.get_objects()) + else: + self.app.inform.emit('[ERROR_NOTCL] %s' % _('Geometry could not be cleared completely')) + return None + + def clear_copper(self, ncc_obj, sel_obj=None, ncctooldia=None, isotooldia=None, outname=None, order=None, + tools_storage=None, run_threaded=True): """ Clear the excess copper from the entire object. @@ -2221,8 +2293,8 @@ class NonCopperClear(FlatCAMTool, Gerber): Usage of the different one is related to when this function is called from a TcL command. - :param run_threaded: If True the method will be run in a threaded way suitable for GUI usage; if False it will - run non-threaded for TclShell usage + :param run_threaded: If True the method will be run in a threaded way suitable for GUI usage; if False + it will run non-threaded for TclShell usage :return: """ log.debug("Executing the handler ...") @@ -2233,9 +2305,9 @@ class NonCopperClear(FlatCAMTool, Gerber): self.app.proc_container.view.set_busy(_("Non-Copper clearing ...")) QtWidgets.QApplication.processEvents() - # ##################################################################### - # ####### Read the parameters ######################################### - # ##################################################################### + # ###################################################################################################### + # ######################### Read the parameters ######################################################## + # ###################################################################################################### units = self.app.defaults['units'] order = order if order else self.ncc_order_radio.get_value() @@ -2249,22 +2321,22 @@ class NonCopperClear(FlatCAMTool, Gerber): # ###################################################################################################### # # Read the tooldia parameter and create a sorted list out them - they may be more than one diameter ## # ###################################################################################################### - sorted_tools = [] + sorted_clear_tools = [] if ncctooldia is not None: try: - sorted_tools = [float(eval(dia)) for dia in ncctooldia.split(",") if dia != ''] + sorted_clear_tools = [float(eval(dia)) for dia in ncctooldia.split(",") if dia != ''] except AttributeError: if not isinstance(ncctooldia, list): - sorted_tools = [float(ncctooldia)] + sorted_clear_tools = [float(ncctooldia)] else: - sorted_tools = ncctooldia + sorted_clear_tools = ncctooldia else: # for row in range(self.tools_table.rowCount()): # if self.tools_table.cellWidget(row, 1).currentText() == 'clear_op': - # sorted_tools.append(float(self.tools_table.item(row, 1).text())) + # sorted_clear_tools.append(float(self.tools_table.item(row, 1).text())) for tooluid in self.ncc_tools: if self.ncc_tools[tooluid]['data']['tools_nccoperation'] == 'clear': - sorted_tools.append(self.ncc_tools[tooluid]['tooldia']) + sorted_clear_tools.append(self.ncc_tools[tooluid]['tooldia']) # ######################################################################################################## # set the name for the future Geometry object @@ -2272,76 +2344,73 @@ class NonCopperClear(FlatCAMTool, Gerber): # ######################################################################################################## name = outname if outname is not None else self.obj_name + "_ncc" - # ########################################################################################## - # Initializes the new geometry object ###################################################### - # ########################################################################################## + # ######################################################################################################## + # ######### #####Initializes the new geometry object ##################################################### + # ######################################################################################################## def gen_clear_area(geo_obj, app_obj): - assert geo_obj.kind == 'geometry', \ - "Initializer expected a GeometryObject, got %s" % type(geo_obj) + log.debug("NCC Tool. Normal copper clearing task started.") + self.app.inform.emit(_("NCC Tool. Finished non-copper polygons. Normal copper clearing task started.")) # provide the app with a way to process the GUI events when in a blocking loop if not run_threaded: QtWidgets.QApplication.processEvents() - log.debug("NCC Tool. Normal copper clearing task started.") - self.app.inform.emit(_("NCC Tool. Finished non-copper polygons. Normal copper clearing task started.")) - # a flag to signal that the isolation is broken by the bounding box in 'area' and 'box' cases # will store the number of tools for which the isolation is broken warning_flag = 0 if order == 'fwd': - sorted_tools.sort(reverse=False) + sorted_clear_tools.sort(reverse=False) elif order == 'rev': - sorted_tools.sort(reverse=True) + sorted_clear_tools.sort(reverse=True) else: pass cleared_geo = [] - # Already cleared area - cleared = MultiPolygon() - - # flag for polygons not cleared - app_obj.poly_not_cleared = False + cleared = MultiPolygon() # Already cleared area + app_obj.poly_not_cleared = False # flag for polygons not cleared # Generate area for each tool - offset = sum(sorted_tools) + offset = sum(sorted_clear_tools) current_uid = int(1) - try: - tool = eval(self.app.defaults["tools_ncctools"])[0] - except TypeError: - tool = eval(self.app.defaults["tools_ncctools"]) + # try: + # tool = eval(self.app.defaults["tools_ncctools"])[0] + # except TypeError: + # tool = eval(self.app.defaults["tools_ncctools"]) if ncc_select == _("Reference Object"): - env_obj, box_obj_kind = self.envelope_object(ncc_obj=ncc_obj, box_obj=sel_obj, ncc_select=ncc_select) + bbox_geo, bbox_kind = self.calculate_bounding_box( + ncc_obj=ncc_obj, box_obj=sel_obj, ncc_select=ncc_select) else: - env_obj, box_obj_kind = self.envelope_object(ncc_obj=ncc_obj, ncc_select=ncc_select) + bbox_geo, bbox_kind = self.calculate_bounding_box(ncc_obj=ncc_obj, ncc_select=ncc_select) - if env_obj is None and box_obj_kind is None: + if bbox_geo is None and bbox_kind is None: self.app.inform.emit("[ERROR_NOTCL] %s" % _("NCC Tool failed creating bounding box.")) return "fail" - # COPPER CLEARING # - for tool in sorted_tools: + # COPPER CLEARING with tools marked for CLEAR# + for tool in sorted_clear_tools: log.debug("Starting geometry processing for tool: %s" % str(tool)) if self.app.abort_flag: # graceful abort requested by the user raise grace # provide the app with a way to process the GUI events when in a blocking loop - QtWidgets.QApplication.processEvents() + if not run_threaded: + QtWidgets.QApplication.processEvents() app_obj.inform.emit('[success] %s = %s%s %s' % ( _('NCC Tool clearing with tool diameter'), str(tool), units.lower(), _('started.')) ) app_obj.proc_container.update_view_text(' %d%%' % 0) - tool_uid = 0 + tool_uid = 0 # find the current tool_uid for k, v in self.ncc_tools.items(): if float('%.*f' % (self.decimals, v['tooldia'])) == float('%.*f' % (self.decimals, tool)): tool_uid = int(k) break + # parameters that are particular to the current tool ncc_overlap = float(self.ncc_tools[tool_uid]["data"]["tools_nccoverlap"]) / 100.0 ncc_margin = float(self.ncc_tools[tool_uid]["data"]["tools_nccmargin"]) ncc_method = self.ncc_tools[tool_uid]["data"]["tools_nccmethod"] @@ -2350,21 +2419,18 @@ class NonCopperClear(FlatCAMTool, Gerber): has_offset = self.ncc_tools[tool_uid]["data"]["tools_ncc_offset_choice"] ncc_offset = float(self.ncc_tools[tool_uid]["data"]["tools_ncc_offset_value"]) - cleared_geo[:] = [] - # Get remaining tools offset offset -= (tool - 1e-12) # Bounding box for current tool - bbox = self.envelope_object_to_tool_bounding_box(env_obj=env_obj, box_kind=box_obj_kind, - ncc_select=ncc_select, ncc_margin=ncc_margin) + bbox = self.apply_margin_to_bounding_box(bbox=bbox_geo, box_kind=bbox_kind, + ncc_select=ncc_select, ncc_margin=ncc_margin) # Area to clear empty, warning_flag = self.get_tool_empty_area(name=name, ncc_obj=ncc_obj, geo_obj=geo_obj, - isotooldia=isotooldia, + isotooldia=isotooldia, ncc_margin=ncc_margin, has_offset=has_offset, ncc_offset=ncc_offset, - ncc_margin=ncc_margin, tools_storage=tools_storage, - bounding_box=bbox) + tools_storage=tools_storage, bounding_box=bbox) area = empty.buffer(-offset) try: @@ -2373,7 +2439,7 @@ class NonCopperClear(FlatCAMTool, Gerber): continue # Transform area to MultiPolygon - if type(area) is Polygon: + if isinstance(area, Polygon): area = MultiPolygon([area]) # variables to display the percentage of work done @@ -2382,12 +2448,14 @@ class NonCopperClear(FlatCAMTool, Gerber): old_disp_number = 0 log.warning("Total number of polygons to be cleared. %s" % str(geo_len)) + cleared_geo[:] = [] if area.geoms: if len(area.geoms) > 0: pol_nr = 0 for p in area.geoms: # provide the app with a way to process the GUI events when in a blocking loop - QtWidgets.QApplication.processEvents() + if not run_threaded: + QtWidgets.QApplication.processEvents() if self.app.abort_flag: # graceful abort requested by the user @@ -2397,72 +2465,40 @@ class NonCopperClear(FlatCAMTool, Gerber): p = p.buffer(0) if p is not None and p.is_valid: - poly_processed = [] + poly_failed = 0 try: for pol in p: if pol is not None and isinstance(pol, Polygon): - if ncc_method == _("Standard"): - cp = self.clear_polygon(pol, tool, - self.grb_circle_steps, - overlap=ncc_overlap, contour=ncc_contour, - connect=ncc_connect, - prog_plot=prog_plot) - elif ncc_method == _("Seed"): - cp = self.clear_polygon2(pol, tool, - self.grb_circle_steps, - overlap=ncc_overlap, contour=ncc_contour, - connect=ncc_connect, - prog_plot=prog_plot) + res = self.clear_polygon_worker(pol=pol, tooldia=tool, + ncc_method=ncc_method, + ncc_overlap=ncc_overlap, + ncc_connect=ncc_connect, + ncc_contour=ncc_contour, + prog_plot=prog_plot) + if res is not None: + cleared_geo += res else: - cp = self.clear_polygon3(pol, tool, - self.grb_circle_steps, - overlap=ncc_overlap, contour=ncc_contour, - connect=ncc_connect, - prog_plot=prog_plot) - if cp: - cleared_geo += list(cp.get_objects()) - poly_processed.append(True) - else: - poly_processed.append(False) - log.warning("Polygon in MultiPolygon can not be cleared.") + poly_failed += 1 else: - log.warning("Geo in Iterable can not be cleared because it is not Polygon. " - "It is: %s" % str(type(pol))) + log.warning("Expected geo is a Polygon. Instead got a %s" % str(type(pol))) except TypeError: if isinstance(p, Polygon): - if ncc_method == _("Standard"): - cp = self.clear_polygon(p, tool, self.grb_circle_steps, - overlap=ncc_overlap, contour=ncc_contour, - connect=ncc_connect, - prog_plot=prog_plot) - elif ncc_method == _("Seed"): - cp = self.clear_polygon2(p, tool, self.grb_circle_steps, - overlap=ncc_overlap, contour=ncc_contour, - connect=ncc_connect, - prog_plot=prog_plot) + res = self.clear_polygon_worker(pol=p, tooldia=tool, + ncc_method=ncc_method, + ncc_overlap=ncc_overlap, + ncc_connect=ncc_connect, + ncc_contour=ncc_contour, + prog_plot=prog_plot) + if res is not None: + cleared_geo += res else: - cp = self.clear_polygon3(p, tool, self.grb_circle_steps, - overlap=ncc_overlap, contour=ncc_contour, - connect=ncc_connect, - prog_plot=prog_plot) - if cp: - cleared_geo += list(cp.get_objects()) - poly_processed.append(True) - else: - poly_processed.append(False) - log.warning("Polygon can not be cleared.") + poly_failed += 1 else: - log.warning("Geo can not be cleared because it is: %s" % str(type(p))) + log.warning("Expected geo is a Polygon. Instead got a %s" % str(type(p))) - p_cleared = poly_processed.count(True) - p_not_cleared = poly_processed.count(False) - - if p_not_cleared: + if poly_failed > 0: app_obj.poly_not_cleared = True - if p_cleared == 0: - continue - pol_nr += 1 disp_number = int(np.interp(pol_nr, [0, geo_len], [0, 100])) # log.debug("Polygons cleared: %d" % pol_nr) @@ -2472,11 +2508,10 @@ class NonCopperClear(FlatCAMTool, Gerber): old_disp_number = disp_number # log.debug("Polygons cleared: %d. Percentage done: %d%%" % (pol_nr, disp_number)) - # check if there is a geometry at all in the cleared geometry + # check if there is a geometry at all in the cleared geometry if cleared_geo: - # Overall cleared area - cleared = empty.buffer(-offset * (1 + ncc_overlap)).buffer(-tool / 1.999999).buffer( - tool / 1.999999) + cleared = empty.buffer(-offset * (1 + ncc_overlap)) # Overall cleared area + cleared = cleared.buffer(-tool / 1.999999).buffer(tool / 1.999999) # clean-up cleared geo cleared = cleared.buffer(0) @@ -2496,7 +2531,6 @@ class NonCopperClear(FlatCAMTool, Gerber): geo_obj.tools[current_uid] = dict(tools_storage[current_uid]) else: log.debug("There are no geometries in the cleared polygon.") - # clean the progressive plotted shapes if it was used if self.app.defaults["tools_ncc_plotting"] == 'progressive': self.temp_shapes.clear(update=True) @@ -2578,7 +2612,7 @@ class NonCopperClear(FlatCAMTool, Gerber): # will store the number of tools for which the isolation is broken warning_flag = 0 - sorted_tools.sort(reverse=True) + sorted_clear_tools.sort(reverse=True) cleared_geo = [] cleared_by_last_tool = [] @@ -2593,9 +2627,10 @@ class NonCopperClear(FlatCAMTool, Gerber): app_obj.poly_not_cleared = True if ncc_select == _("Reference Object"): - env_obj, box_obj_kind = self.envelope_object(ncc_obj=ncc_obj, box_obj=sel_obj, ncc_select=ncc_select) + env_obj, box_obj_kind = self.calculate_bounding_box( + ncc_obj=ncc_obj, box_obj=sel_obj, ncc_select=ncc_select) else: - env_obj, box_obj_kind = self.envelope_object(ncc_obj=ncc_obj, ncc_select=ncc_select) + env_obj, box_obj_kind = self.calculate_bounding_box(ncc_obj=ncc_obj, ncc_select=ncc_select) if env_obj is None and box_obj_kind is None: self.app.inform.emit("[ERROR_NOTCL] %s" % _("NCC Tool failed creating bounding box.")) @@ -2605,7 +2640,7 @@ class NonCopperClear(FlatCAMTool, Gerber): app_obj.inform.emit("NCC Tool. Calculate 'empty' area.") # Generate area for each tool - while sorted_tools: + while sorted_clear_tools: log.debug("Starting geometry processing for tool: %s" % str(tool)) if self.app.abort_flag: # graceful abort requested by the user @@ -2619,7 +2654,7 @@ class NonCopperClear(FlatCAMTool, Gerber): ) app_obj.proc_container.update_view_text(' %d%%' % 0) - tool = sorted_tools.pop(0) + tool = sorted_clear_tools.pop(0) tool_uid = 0 for k, v in self.ncc_tools.items(): @@ -2639,8 +2674,8 @@ class NonCopperClear(FlatCAMTool, Gerber): cleared_geo[:] = [] # Bounding box for current tool - bbox = self.envelope_object_to_tool_bounding_box(env_obj=env_obj, box_kind=box_obj_kind, - ncc_select=ncc_select, ncc_margin=ncc_margin) + bbox = self.apply_margin_to_bounding_box(bbox=env_obj, box_kind=box_obj_kind, + ncc_select=ncc_select, ncc_margin=ncc_margin) # Area to clear empty, warning_flag = self.get_tool_empty_area(name=name, ncc_obj=ncc_obj, geo_obj=geo_obj, From 28f0c9c27616c8ef8c90ef20e966453c6dabfb77 Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Sun, 17 May 2020 03:27:26 +0300 Subject: [PATCH 32/99] - added new FlatCAM Tool: Corner Markers Tool which will add line markers in the selected corners of the bounding box of the targeted Gerber object --- CHANGELOG.md | 4 + FlatCAMApp.py | 5 + assets/resources/corners_32.png | Bin 0 -> 349 bytes .../resources/dark_resources/corners_32.png | Bin 0 -> 325 bytes defaults.py | 6 + flatcamGUI/FlatCAMGUI.py | 15 +- .../preferences/PreferencesUIManager.py | 6 + .../tools/ToolsCornersPrefGroupUI.py | 81 ++++ .../preferences/tools/ToolsPreferencesUI.py | 5 + flatcamTools/ToolCorners.py | 423 ++++++++++++++++++ flatcamTools/ToolFiducials.py | 17 +- flatcamTools/ToolNCC.py | 120 ++--- flatcamTools/__init__.py | 2 +- 13 files changed, 615 insertions(+), 69 deletions(-) create mode 100644 assets/resources/corners_32.png create mode 100644 assets/resources/dark_resources/corners_32.png create mode 100644 flatcamGUI/preferences/tools/ToolsCornersPrefGroupUI.py create mode 100644 flatcamTools/ToolCorners.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 57dc65db..2a2f5326 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ CHANGELOG for FlatCAM beta ================================================= +17.05.2020 + +- added new FlatCAM Tool: Corner Markers Tool which will add line markers in the selected corners of the bounding box of the targeted Gerber object + 16.05.2020 - worked on the NCC Tool; added a new clear method named 'Combo' which will go through all methods until the clear is done diff --git a/FlatCAMApp.py b/FlatCAMApp.py index 6f639f8e..906dcb8f 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -1387,6 +1387,7 @@ class App(QtCore.QObject): self.align_objects_tool = None self.punch_tool = None self.invert_tool = None + self.corners_tool = None # always install tools only after the shell is initialized because the self.inform.emit() depends on shell try: @@ -1975,6 +1976,9 @@ class App(QtCore.QObject): self.invert_tool = ToolInvertGerber(self) self.invert_tool.install(icon=QtGui.QIcon(self.resource_location + '/invert32.png'), pos=self.ui.menutool) + self.corners_tool = ToolCorners(self) + self.corners_tool.install(icon=QtGui.QIcon(self.resource_location + '/corners_32.png'), pos=self.ui.menutool) + self.transform_tool = ToolTransform(self) self.transform_tool.install(icon=QtGui.QIcon(self.resource_location + '/transform.png'), pos=self.ui.menuoptions, separator=True) @@ -2125,6 +2129,7 @@ class App(QtCore.QObject): self.ui.fiducials_btn.triggered.connect(lambda: self.fiducial_tool.run(toggle=True)) self.ui.punch_btn.triggered.connect(lambda: self.punch_tool.run(toggle=True)) self.ui.invert_btn.triggered.connect(lambda: self.invert_tool.run(toggle=True)) + self.ui.corners_tool_btn.triggered.connect(lambda: self.corners_tool.run(toggle=True)) def object2editor(self): """ diff --git a/assets/resources/corners_32.png b/assets/resources/corners_32.png new file mode 100644 index 0000000000000000000000000000000000000000..b9f872610010dde9de48da2d47ad4540dcf10431 GIT binary patch literal 349 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jPK-BC>eK@{oCO|{#S9F5 zM?jcysy3fAP|!8NC&U#ig-zoUogY}54V`OSk;&rRau^kvkMDyEAexP zaQ2#=Oam(E^K@|xshION_#$7k0?!*wCE2{Zu7CfR_c?4*Sem~}U0-GC-o>h!-e1HS zUQ~5NxSaMh*t%e1*@pc;I4t_6rM}FOZ}@uA%J+cqkDp5OOd0puZ#nX3pUO<%mou+k zJ70Ul>G6AWzlQ58C-mJmz2~!Y?W+SlKb3wIE%GSYEmEMRC>&t>?VX3*_eHDSLFjJw0k^Tly5O})!xvXeK@{oCO|{#S9F5 zM?jcysy3fAP|zm8C&U#POMr8)Fx6A(`4OOioMc7^GAgeT;SP-Cw3M(W^Y`>d(U0X5kgT z``HsxPqn6&b%v)$A8pJ`KJ=qxQA4Szopr06no?iU0rr literal 0 HcmV?d00001 diff --git a/defaults.py b/defaults.py index 64f0fa70..d8bd7186 100644 --- a/defaults.py +++ b/defaults.py @@ -525,6 +525,12 @@ class FlatCAMDefaults: # Distance Tool "tools_dist_snap_center": False, + # Corner Markers Tool + + "tools_corners_thickness": 0.1, + "tools_corners_length": 3.0, + "tools_corners_margin": 0.0, + # ######################################################################################################## # ################################ TOOLS 2 ############################################################### # ######################################################################################################## diff --git a/flatcamGUI/FlatCAMGUI.py b/flatcamGUI/FlatCAMGUI.py index daf20109..0d171f95 100644 --- a/flatcamGUI/FlatCAMGUI.py +++ b/flatcamGUI/FlatCAMGUI.py @@ -954,6 +954,8 @@ class FlatCAMGUI(QtWidgets.QMainWindow): QtGui.QIcon(self.app.resource_location + '/punch32.png'), _("Punch Gerber Tool")) self.invert_btn = self.toolbartools.addAction( QtGui.QIcon(self.app.resource_location + '/invert32.png'), _("Invert Gerber Tool")) + self.corners_tool_btn = self.toolbartools.addAction( + QtGui.QIcon(self.app.resource_location + '/corners_32.png'), _("Corner Markers Tool")) # ######################################################################## # ########################## Excellon Editor Toolbar# #################### @@ -1612,6 +1614,10 @@ class FlatCAMGUI(QtWidgets.QMainWindow): Alt+L  %s + + Alt+M +  %s + Alt+N  %s @@ -1742,7 +1748,7 @@ class FlatCAMGUI(QtWidgets.QMainWindow): _("Align Objects Tool"), _("Calculators Tool"), _("2-Sided PCB Tool"), _("Transformations Tool"), _("Punch Gerber Tool"), _("Extract Drills Tool"), _("Fiducials Tool"), _("Solder Paste Dispensing Tool"), - _("Film PCB Tool"), _("Non-Copper Clearing Tool"), _("Optimal Tool"), + _("Film PCB Tool"), _("Corner Markers Tool"), _("Non-Copper Clearing Tool"), _("Optimal Tool"), _("Paint Area Tool"), _("QRCode Tool"), _("Rules Check Tool"), _("View File Source"), _("Cutout PCB Tool"), _("Enable all Plots"), _("Disable all Plots"), _("Disable Non-selected Plots"), @@ -2633,6 +2639,8 @@ class FlatCAMGUI(QtWidgets.QMainWindow): QtGui.QIcon(self.app.resource_location + '/punch32.png'), _("Punch Gerber Tool")) self.invert_btn = self.toolbartools.addAction( QtGui.QIcon(self.app.resource_location + '/invert32.png'), _("Invert Gerber Tool")) + self.corners_tool_btn = self.toolbartools.addAction( + QtGui.QIcon(self.app.resource_location + '/corners_32.png'), _("Corner Markers Tool")) # ######################################################################## # ## Excellon Editor Toolbar # ## @@ -3022,6 +3030,11 @@ class FlatCAMGUI(QtWidgets.QMainWindow): self.app.film_tool.run(toggle=True) return + # Corner Markers Tool + if key == QtCore.Qt.Key_M: + self.app.corners_tool.run(toggle=True) + return + # Non-Copper Clear Tool if key == QtCore.Qt.Key_N: self.app.ncclear_tool.run(toggle=True) diff --git a/flatcamGUI/preferences/PreferencesUIManager.py b/flatcamGUI/preferences/PreferencesUIManager.py index e7fe1347..a9380243 100644 --- a/flatcamGUI/preferences/PreferencesUIManager.py +++ b/flatcamGUI/preferences/PreferencesUIManager.py @@ -467,6 +467,12 @@ class PreferencesUIManager: "tools_solderpaste_pp": self.ui.tools_defaults_form.tools_solderpaste_group.pp_combo, "tools_sub_close_paths": self.ui.tools_defaults_form.tools_sub_group.close_paths_cb, + # Corner Markers Tool + + "tools_corners_thickness": self.ui.tools_defaults_form.tools_corners_group.thick_entry, + "tools_corners_length": self.ui.tools_defaults_form.tools_corners_group.l_entry, + "tools_corners_margin": self.ui.tools_defaults_form.tools_corners_group.margin_entry, + # ####################################################################################################### # ########################################## TOOLS 2 #################################################### # ####################################################################################################### diff --git a/flatcamGUI/preferences/tools/ToolsCornersPrefGroupUI.py b/flatcamGUI/preferences/tools/ToolsCornersPrefGroupUI.py new file mode 100644 index 00000000..738b9580 --- /dev/null +++ b/flatcamGUI/preferences/tools/ToolsCornersPrefGroupUI.py @@ -0,0 +1,81 @@ +from PyQt5 import QtWidgets +from PyQt5.QtCore import QSettings + +from flatcamGUI.GUIElements import FCDoubleSpinner +from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI + +import gettext +import FlatCAMTranslation as fcTranslate +import builtins + +fcTranslate.apply_language('strings') +if '_' not in builtins.__dict__: + _ = gettext.gettext + +settings = QSettings("Open Source", "FlatCAM") +if settings.contains("machinist"): + machinist_setting = settings.value('machinist', type=int) +else: + machinist_setting = 0 + + +class ToolsCornersPrefGroupUI(OptionsGroupUI): + def __init__(self, decimals=4, parent=None): + # OptionsGroupUI.__init__(self, "Calculators Tool Options", parent=parent) + super(ToolsCornersPrefGroupUI, self).__init__(self, parent=parent) + + self.setTitle(str(_("Corner Markers Options"))) + self.decimals = decimals + + grid0 = QtWidgets.QGridLayout() + grid0.setColumnStretch(0, 0) + grid0.setColumnStretch(1, 1) + self.layout.addLayout(grid0) + + self.param_label = QtWidgets.QLabel('%s:' % _('Parameters')) + self.param_label.setToolTip( + _("Parameters used for this tool.") + ) + grid0.addWidget(self.param_label, 0, 0, 1, 2) + + # Thickness # + self.thick_label = QtWidgets.QLabel('%s:' % _("Thickness")) + self.thick_label.setToolTip( + _("The thickness of the line that makes the corner marker.") + ) + self.thick_entry = FCDoubleSpinner() + self.thick_entry.set_range(0.0000, 9.9999) + self.thick_entry.set_precision(self.decimals) + self.thick_entry.setWrapping(True) + self.thick_entry.setSingleStep(10 ** -self.decimals) + + grid0.addWidget(self.thick_label, 1, 0) + grid0.addWidget(self.thick_entry, 1, 1) + + # Length # + self.l_label = QtWidgets.QLabel('%s:' % _("Length")) + self.l_label.setToolTip( + _("The length of the line that makes the corner marker.") + ) + self.l_entry = FCDoubleSpinner() + self.l_entry.set_range(-9999.9999, 9999.9999) + self.l_entry.set_precision(self.decimals) + self.l_entry.setSingleStep(10 ** -self.decimals) + + # Margin # + self.margin_label = QtWidgets.QLabel('%s:' % _("Margin")) + self.margin_label.setToolTip( + _("Bounding box margin.") + ) + self.margin_entry = FCDoubleSpinner() + self.margin_entry.set_range(-9999.9999, 9999.9999) + self.margin_entry.set_precision(self.decimals) + self.margin_entry.setSingleStep(0.1) + + grid0.addWidget(self.margin_label, 2, 0) + grid0.addWidget(self.margin_entry, 2, 1) + + grid0.addWidget(self.l_label, 4, 0) + grid0.addWidget(self.l_entry, 4, 1) + + self.layout.addStretch() diff --git a/flatcamGUI/preferences/tools/ToolsPreferencesUI.py b/flatcamGUI/preferences/tools/ToolsPreferencesUI.py index dc3061a8..7a58dff2 100644 --- a/flatcamGUI/preferences/tools/ToolsPreferencesUI.py +++ b/flatcamGUI/preferences/tools/ToolsPreferencesUI.py @@ -3,6 +3,7 @@ from PyQt5.QtCore import QSettings from flatcamGUI.preferences.tools.ToolsSubPrefGroupUI import ToolsSubPrefGroupUI from flatcamGUI.preferences.tools.ToolsSolderpastePrefGroupUI import ToolsSolderpastePrefGroupUI +from flatcamGUI.preferences.tools.ToolsCornersPrefGroupUI import ToolsCornersPrefGroupUI from flatcamGUI.preferences.tools.ToolsTransformPrefGroupUI import ToolsTransformPrefGroupUI from flatcamGUI.preferences.tools.ToolsCalculatorsPrefGroupUI import ToolsCalculatorsPrefGroupUI from flatcamGUI.preferences.tools.ToolsPanelizePrefGroupUI import ToolsPanelizePrefGroupUI @@ -62,6 +63,9 @@ class ToolsPreferencesUI(QtWidgets.QWidget): self.tools_solderpaste_group = ToolsSolderpastePrefGroupUI(decimals=self.decimals) self.tools_solderpaste_group.setMinimumWidth(200) + self.tools_corners_group = ToolsCornersPrefGroupUI(decimals=self.decimals) + self.tools_corners_group.setMinimumWidth(200) + self.tools_sub_group = ToolsSubPrefGroupUI(decimals=self.decimals) self.tools_sub_group.setMinimumWidth(200) @@ -84,6 +88,7 @@ class ToolsPreferencesUI(QtWidgets.QWidget): self.vlay4 = QtWidgets.QVBoxLayout() self.vlay4.addWidget(self.tools_solderpaste_group) + self.vlay4.addWidget(self.tools_corners_group) self.layout.addLayout(self.vlay) self.layout.addLayout(self.vlay1) diff --git a/flatcamTools/ToolCorners.py b/flatcamTools/ToolCorners.py new file mode 100644 index 00000000..4abf1587 --- /dev/null +++ b/flatcamTools/ToolCorners.py @@ -0,0 +1,423 @@ +# ########################################################## +# FlatCAM: 2D Post-processing for Manufacturing # +# File Author: Marius Adrian Stanciu (c) # +# Date: 5/17/2020 # +# MIT Licence # +# ########################################################## + +from PyQt5 import QtWidgets, QtCore + +from FlatCAMTool import FlatCAMTool +from flatcamGUI.GUIElements import FCDoubleSpinner, FCCheckBox, FCComboBox, FCButton + +from shapely.geometry import MultiPolygon, LineString + +from copy import deepcopy +import logging + +import gettext +import FlatCAMTranslation as fcTranslate +import builtins + +fcTranslate.apply_language('strings') +if '_' not in builtins.__dict__: + _ = gettext.gettext + +log = logging.getLogger('base') + + +class ToolCorners(FlatCAMTool): + + toolName = _("Corner Markers Tool") + + def __init__(self, app): + FlatCAMTool.__init__(self, app) + + self.app = app + self.canvas = self.app.plotcanvas + + self.decimals = self.app.decimals + self.units = '' + + # ## Title + title_label = QtWidgets.QLabel("%s" % self.toolName) + title_label.setStyleSheet(""" + QLabel + { + font-size: 16px; + font-weight: bold; + } + """) + self.layout.addWidget(title_label) + self.layout.addWidget(QtWidgets.QLabel('')) + + # Gerber object # + self.object_label = QtWidgets.QLabel('%s:' % _("Gerber Object")) + self.object_label.setToolTip( + _("The Gerber object that to which will be added corner markers.") + ) + self.object_combo = FCComboBox() + self.object_combo.setModel(self.app.collection) + self.object_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex())) + self.object_combo.is_last = True + self.object_combo.obj_type = "Gerber" + + self.layout.addWidget(self.object_label) + self.layout.addWidget(self.object_combo) + + separator_line = QtWidgets.QFrame() + separator_line.setFrameShape(QtWidgets.QFrame.HLine) + separator_line.setFrameShadow(QtWidgets.QFrame.Sunken) + self.layout.addWidget(separator_line) + + self.points_label = QtWidgets.QLabel('%s:' % _('Locations')) + self.points_label.setToolTip( + _("Locations where to place corner markers.") + ) + self.layout.addWidget(self.points_label) + + # BOTTOM LEFT + self.bl_cb = FCCheckBox(_("Bottom Left")) + self.layout.addWidget(self.bl_cb) + + # BOTTOM RIGHT + self.br_cb = FCCheckBox(_("Bottom Right")) + self.layout.addWidget(self.br_cb) + + # TOP LEFT + self.tl_cb = FCCheckBox(_("Top Left")) + self.layout.addWidget(self.tl_cb) + + # TOP RIGHT + self.tr_cb = FCCheckBox(_("Top Right")) + self.layout.addWidget(self.tr_cb) + + separator_line = QtWidgets.QFrame() + separator_line.setFrameShape(QtWidgets.QFrame.HLine) + separator_line.setFrameShadow(QtWidgets.QFrame.Sunken) + self.layout.addWidget(separator_line) + + # ## Grid Layout + grid_lay = QtWidgets.QGridLayout() + self.layout.addLayout(grid_lay) + grid_lay.setColumnStretch(0, 0) + grid_lay.setColumnStretch(1, 1) + + self.param_label = QtWidgets.QLabel('%s:' % _('Parameters')) + self.param_label.setToolTip( + _("Parameters used for this tool.") + ) + grid_lay.addWidget(self.param_label, 0, 0, 1, 2) + + # Thickness # + self.thick_label = QtWidgets.QLabel('%s:' % _("Thickness")) + self.thick_label.setToolTip( + _("The thickness of the line that makes the corner marker.") + ) + self.thick_entry = FCDoubleSpinner(callback=self.confirmation_message) + self.thick_entry.set_range(0.0000, 9.9999) + self.thick_entry.set_precision(self.decimals) + self.thick_entry.setWrapping(True) + self.thick_entry.setSingleStep(10 ** -self.decimals) + + grid_lay.addWidget(self.thick_label, 1, 0) + grid_lay.addWidget(self.thick_entry, 1, 1) + + # Length # + self.l_label = QtWidgets.QLabel('%s:' % _("Length")) + self.l_label.setToolTip( + _("The length of the line that makes the corner marker.") + ) + self.l_entry = FCDoubleSpinner(callback=self.confirmation_message) + self.l_entry.set_range(-9999.9999, 9999.9999) + self.l_entry.set_precision(self.decimals) + self.l_entry.setSingleStep(10 ** -self.decimals) + + grid_lay.addWidget(self.l_label, 2, 0) + grid_lay.addWidget(self.l_entry, 2, 1) + + # Margin # + self.margin_label = QtWidgets.QLabel('%s:' % _("Margin")) + self.margin_label.setToolTip( + _("Bounding box margin.") + ) + self.margin_entry = FCDoubleSpinner(callback=self.confirmation_message) + self.margin_entry.set_range(-9999.9999, 9999.9999) + self.margin_entry.set_precision(self.decimals) + self.margin_entry.setSingleStep(0.1) + + grid_lay.addWidget(self.margin_label, 3, 0) + grid_lay.addWidget(self.margin_entry, 3, 1) + + separator_line_2 = QtWidgets.QFrame() + separator_line_2.setFrameShape(QtWidgets.QFrame.HLine) + separator_line_2.setFrameShadow(QtWidgets.QFrame.Sunken) + grid_lay.addWidget(separator_line_2, 4, 0, 1, 2) + + # ## Insert Corner Marker + self.add_marker_button = FCButton(_("Add Marker")) + self.add_marker_button.setToolTip( + _("Will add corner markers to the selected Gerber file.") + ) + self.add_marker_button.setStyleSheet(""" + QPushButton + { + font-weight: bold; + } + """) + grid_lay.addWidget(self.add_marker_button, 11, 0, 1, 2) + + self.layout.addStretch() + + # ## Reset Tool + self.reset_button = QtWidgets.QPushButton(_("Reset Tool")) + self.reset_button.setToolTip( + _("Will reset the tool parameters.") + ) + self.reset_button.setStyleSheet(""" + QPushButton + { + font-weight: bold; + } + """) + self.layout.addWidget(self.reset_button) + + # Objects involved in Copper thieving + self.grb_object = None + + # store the flattened geometry here: + self.flat_geometry = [] + + # Tool properties + self.fid_dia = None + + self.grb_steps_per_circle = self.app.defaults["gerber_circle_steps"] + + # SIGNALS + self.add_marker_button.clicked.connect(self.add_markers) + + def run(self, toggle=True): + self.app.defaults.report_usage("ToolCorners()") + + if toggle: + # if the splitter is hidden, display it, else hide it but only if the current widget is the same + if self.app.ui.splitter.sizes()[0] == 0: + self.app.ui.splitter.setSizes([1, 1]) + else: + try: + if self.app.ui.tool_scroll_area.widget().objectName() == self.toolName: + # if tab is populated with the tool but it does not have the focus, focus on it + if not self.app.ui.notebook.currentWidget() is self.app.ui.tool_tab: + # focus on Tool Tab + self.app.ui.notebook.setCurrentWidget(self.app.ui.tool_tab) + else: + self.app.ui.splitter.setSizes([0, 1]) + except AttributeError: + pass + else: + if self.app.ui.splitter.sizes()[0] == 0: + self.app.ui.splitter.setSizes([1, 1]) + + FlatCAMTool.run(self) + + self.set_tool_ui() + + self.app.ui.notebook.setTabText(2, _("Corners Tool")) + + def install(self, icon=None, separator=None, **kwargs): + FlatCAMTool.install(self, icon, separator, shortcut='Alt+M', **kwargs) + + def set_tool_ui(self): + self.units = self.app.defaults['units'] + self.thick_entry.set_value(self.app.defaults["tools_corners_thickness"]) + self.l_entry.set_value(float(self.app.defaults["tools_corners_length"])) + self.margin_entry.set_value(float(self.app.defaults["tools_corners_margin"])) + + def add_markers(self): + self.app.call_source = "corners_tool" + tl_state = self.tl_cb.get_value() + tr_state = self.tr_cb.get_value() + bl_state = self.bl_cb.get_value() + br_state = self.br_cb.get_value() + + # get the Gerber object on which the corner marker will be inserted + selection_index = self.object_combo.currentIndex() + model_index = self.app.collection.index(selection_index, 0, self.object_combo.rootModelIndex()) + + try: + self.grb_object = model_index.internalPointer().obj + except Exception as e: + log.debug("ToolCorners.add_markers() --> %s" % str(e)) + self.app.inform.emit('[WARNING_NOTCL] %s' % _("There is no Gerber object loaded ...")) + return + + xmin, ymin, xmax, ymax = self.grb_object.bounds() + points = {} + if tl_state: + points['tl'] = (xmin, ymax) + if tr_state: + points['tr'] = (xmax, ymax) + if bl_state: + points['bl'] = (xmin, ymin) + if br_state: + points['br'] = (xmax, ymin) + + self.add_corners_geo(points, g_obj=self.grb_object) + + self.grb_object.source_file = self.app.export_gerber(obj_name=self.grb_object.options['name'], + filename=None, + local_use=self.grb_object, use_thread=False) + self.on_exit() + + def add_corners_geo(self, points_storage, g_obj): + """ + Add geometry to the solid_geometry of the copper Gerber object + + :param points_storage: a dictionary holding the points where to add corners + :param g_obj: the Gerber object where to add the geometry + :return: None + """ + + line_thickness = self.thick_entry.get_value() + line_length = self.l_entry.get_value() + margin = self.margin_entry.get_value() + + geo_list = [] + + if not points_storage: + self.app.inform.emit("[ERROR_NOTCL] %s." % _("Please select at least a location")) + return + + for key in points_storage: + if key == 'tl': + pt = points_storage[key] + x = pt[0] - margin - line_thickness / 2.0 + y = pt[1] + margin + line_thickness / 2.0 + line_geo_hor = LineString([ + (x, y), (x + line_length, y) + ]) + line_geo_vert = LineString([ + (x, y), (x, y - line_length) + ]) + geo_list.append(line_geo_hor) + geo_list.append(line_geo_vert) + if key == 'tr': + pt = points_storage[key] + x = pt[0] + margin + line_thickness / 2.0 + y = pt[1] + margin + line_thickness / 2.0 + line_geo_hor = LineString([ + (x, y), (x - line_length, y) + ]) + line_geo_vert = LineString([ + (x, y), (x, y - line_length) + ]) + geo_list.append(line_geo_hor) + geo_list.append(line_geo_vert) + if key == 'bl': + pt = points_storage[key] + x = pt[0] - margin - line_thickness / 2.0 + y = pt[1] - margin - line_thickness / 2.0 + line_geo_hor = LineString([ + (x, y), (x + line_length, y) + ]) + line_geo_vert = LineString([ + (x, y), (x, y + line_length) + ]) + geo_list.append(line_geo_hor) + geo_list.append(line_geo_vert) + if key == 'br': + pt = points_storage[key] + x = pt[0] + margin + line_thickness / 2.0 + y = pt[1] - margin - line_thickness / 2.0 + line_geo_hor = LineString([ + (x, y), (x - line_length, y) + ]) + line_geo_vert = LineString([ + (x, y), (x, y + line_length) + ]) + geo_list.append(line_geo_hor) + geo_list.append(line_geo_vert) + + aperture_found = None + for ap_id, ap_val in g_obj.apertures.items(): + if ap_val['type'] == 'C' and ap_val['size'] == line_thickness: + aperture_found = ap_id + break + + geo_buff_list = [] + if aperture_found: + for geo in geo_list: + geo_buff = geo.buffer(line_thickness / 2.0, resolution=self.grb_steps_per_circle, join_style=2) + geo_buff_list.append(geo_buff) + + dict_el = {} + dict_el['follow'] = geo + dict_el['solid'] = geo_buff + g_obj.apertures[aperture_found]['geometry'].append(deepcopy(dict_el)) + else: + ap_keys = list(g_obj.apertures.keys()) + if ap_keys: + new_apid = str(int(max(ap_keys)) + 1) + else: + new_apid = '10' + + g_obj.apertures[new_apid] = {} + g_obj.apertures[new_apid]['type'] = 'C' + g_obj.apertures[new_apid]['size'] = line_thickness + g_obj.apertures[new_apid]['geometry'] = [] + + for geo in geo_list: + geo_buff = geo.buffer(line_thickness / 2.0, resolution=self.grb_steps_per_circle, join_style=2) + geo_buff_list.append(geo_buff) + + dict_el = {} + dict_el['follow'] = geo + dict_el['solid'] = geo_buff + g_obj.apertures[new_apid]['geometry'].append(deepcopy(dict_el)) + + s_list = [] + if g_obj.solid_geometry: + try: + for poly in g_obj.solid_geometry: + s_list.append(poly) + except TypeError: + s_list.append(g_obj.solid_geometry) + + geo_buff_list = MultiPolygon(geo_buff_list) + geo_buff_list = geo_buff_list.buffer(0) + for poly in geo_buff_list: + s_list.append(poly) + g_obj.solid_geometry = MultiPolygon(s_list) + + def replot(self, obj, run_thread=True): + def worker_task(): + with self.app.proc_container.new('%s...' % _("Plotting")): + obj.plot() + + if run_thread: + self.app.worker_task.emit({'fcn': worker_task, 'params': []}) + else: + worker_task() + + def on_exit(self): + # plot the object + try: + self.replot(obj=self.grb_object) + except (AttributeError, TypeError): + return + + # update the bounding box values + try: + a, b, c, d = self.grb_object.bounds() + self.grb_object.options['xmin'] = a + self.grb_object.options['ymin'] = b + self.grb_object.options['xmax'] = c + self.grb_object.options['ymax'] = d + except Exception as e: + log.debug("ToolCorners.on_exit() copper_obj bounds error --> %s" % str(e)) + + # reset the variables + self.grb_object = None + + self.app.call_source = "app" + self.app.inform.emit('[success] %s' % _("Corners Tool exit.")) diff --git a/flatcamTools/ToolFiducials.py b/flatcamTools/ToolFiducials.py index 1b3513d4..b183914d 100644 --- a/flatcamTools/ToolFiducials.py +++ b/flatcamTools/ToolFiducials.py @@ -234,7 +234,7 @@ class ToolFiducials(FlatCAMTool): # Line Thickness # self.line_thickness_label = QtWidgets.QLabel('%s:' % _("Line thickness")) self.line_thickness_label.setToolTip( - _("Bounding box margin.") + _("Thickness of the line that makes the fiducial.") ) self.line_thickness_entry = FCDoubleSpinner(callback=self.confirmation_message) self.line_thickness_entry.set_range(0.00001, 9999.9999) @@ -353,7 +353,8 @@ class ToolFiducials(FlatCAMTool): self.margin_val = None self.sec_position = None - self.geo_steps_per_circle = 128 + + self.grb_steps_per_circle = self.app.defaults["gerber_circle_steps"] self.click_points = [] @@ -471,7 +472,7 @@ class ToolFiducials(FlatCAMTool): if self.mode_method == 'auto': xmin, ymin, xmax, ymax = self.grb_object.bounds() bbox = box(xmin, ymin, xmax, ymax) - buf_bbox = bbox.buffer(self.margin_val, join_style=2) + buf_bbox = bbox.buffer(self.margin_val, self.grb_steps_per_circle, join_style=2) x0, y0, x1, y1 = buf_bbox.bounds self.click_points.append( @@ -539,7 +540,7 @@ class ToolFiducials(FlatCAMTool): radius = fid_size / 2.0 if fid_type == 'circular': - geo_list = [Point(pt).buffer(radius) for pt in points_list] + geo_list = [Point(pt).buffer(radius, self.grb_steps_per_circle) for pt in points_list] aperture_found = None for ap_id, ap_val in g_obj.apertures.items(): @@ -604,8 +605,8 @@ class ToolFiducials(FlatCAMTool): geo_buff_list = [] if aperture_found: for geo in geo_list: - geo_buff_h = geo[0].buffer(line_thickness / 2.0) - geo_buff_v = geo[1].buffer(line_thickness / 2.0) + geo_buff_h = geo[0].buffer(line_thickness / 2.0, self.grb_steps_per_circle) + geo_buff_v = geo[1].buffer(line_thickness / 2.0, self.grb_steps_per_circle) geo_buff_list.append(geo_buff_h) geo_buff_list.append(geo_buff_v) @@ -629,8 +630,8 @@ class ToolFiducials(FlatCAMTool): g_obj.apertures[new_apid]['geometry'] = [] for geo in geo_list: - geo_buff_h = geo[0].buffer(line_thickness / 2.0) - geo_buff_v = geo[1].buffer(line_thickness / 2.0) + geo_buff_h = geo[0].buffer(line_thickness / 2.0, self.grb_steps_per_circle) + geo_buff_v = geo[1].buffer(line_thickness / 2.0, self.grb_steps_per_circle) geo_buff_list.append(geo_buff_h) geo_buff_list.append(geo_buff_v) diff --git a/flatcamTools/ToolNCC.py b/flatcamTools/ToolNCC.py index 1d83d966..5ff643aa 100644 --- a/flatcamTools/ToolNCC.py +++ b/flatcamTools/ToolNCC.py @@ -2093,75 +2093,77 @@ class NonCopperClear(FlatCAMTool, Gerber): isolated_geo = self.generate_envelope(tool_iso / 2, 0) if isolated_geo == 'fail': - self.app.inform.emit('[ERROR_NOTCL] %s' % _("Isolation geometry could not be generated.")) - else: - if ncc_margin < tool_iso: - self.app.inform.emit('[WARNING_NOTCL] %s' % _("Isolation geometry is broken. Margin is less " - "than isolation tool diameter.")) - try: - for geo_elem in isolated_geo: - # provide the app with a way to process the GUI events when in a blocking loop - QtWidgets.QApplication.processEvents() + self.app.inform.emit('[ERROR_NOTCL] %s %s' % + (_("Isolation geometry could not be generated."), str(tool_iso))) + continue - if self.app.abort_flag: - # graceful abort requested by the user - raise grace + if ncc_margin < tool_iso: + self.app.inform.emit('[WARNING_NOTCL] %s' % _("Isolation geometry is broken. Margin is less " + "than isolation tool diameter.")) + try: + for geo_elem in isolated_geo: + # provide the app with a way to process the GUI events when in a blocking loop + QtWidgets.QApplication.processEvents() - if isinstance(geo_elem, Polygon): - for ring in self.poly2rings(geo_elem): + if self.app.abort_flag: + # graceful abort requested by the user + raise grace + + if isinstance(geo_elem, Polygon): + for ring in self.poly2rings(geo_elem): + new_geo = ring.intersection(bounding_box) + 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.intersection(bounding_box) 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.intersection(bounding_box) - if new_geo and not new_geo.is_empty: - new_geometry.append(new_geo) - elif isinstance(geo_elem, LineString): - new_geo = geo_elem.intersection(bounding_box) - 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.intersection(bounding_box) - if new_geo and not new_geo.is_empty: - new_geometry.append(new_geo) - except TypeError: - if isinstance(isolated_geo, Polygon): - for ring in self.poly2rings(isolated_geo): - new_geo = ring.intersection(bounding_box) - if new_geo: - if not new_geo.is_empty: - new_geometry.append(new_geo) - elif isinstance(isolated_geo, LineString): - new_geo = isolated_geo.intersection(bounding_box) - if new_geo and not new_geo.is_empty: - new_geometry.append(new_geo) - elif isinstance(isolated_geo, MultiLineString): - for line_elem in isolated_geo: + elif isinstance(geo_elem, LineString): + new_geo = geo_elem.intersection(bounding_box) + 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.intersection(bounding_box) if new_geo and not new_geo.is_empty: new_geometry.append(new_geo) + except TypeError: + if isinstance(isolated_geo, Polygon): + for ring in self.poly2rings(isolated_geo): + new_geo = ring.intersection(bounding_box) + if new_geo: + if not new_geo.is_empty: + new_geometry.append(new_geo) + elif isinstance(isolated_geo, LineString): + new_geo = isolated_geo.intersection(bounding_box) + if new_geo and not new_geo.is_empty: + new_geometry.append(new_geo) + elif isinstance(isolated_geo, MultiLineString): + for line_elem in isolated_geo: + new_geo = line_elem.intersection(bounding_box) + if new_geo and not new_geo.is_empty: + new_geometry.append(new_geo) - # a MultiLineString geometry element will show that the isolation is broken for this tool - for geo_e in new_geometry: - if type(geo_e) == MultiLineString: - warning_flag += 1 - break + # a MultiLineString geometry element will show that the isolation is broken for this tool + for geo_e in new_geometry: + if type(geo_e) == MultiLineString: + warning_flag += 1 + break - current_uid = 0 - for k, v in tools_storage.items(): - if float('%.*f' % (self.decimals, v['tooldia'])) == float('%.*f' % (self.decimals, - tool_iso)): - current_uid = int(k) - # add the solid_geometry to the current too in self.paint_tools dictionary - # and then reset the temporary list that stored that solid_geometry - v['solid_geometry'] = deepcopy(new_geometry) - v['data']['name'] = name - break - geo_obj.tools[current_uid] = dict(tools_storage[current_uid]) + current_uid = 0 + for k, v in tools_storage.items(): + if float('%.*f' % (self.decimals, v['tooldia'])) == float('%.*f' % (self.decimals, + tool_iso)): + current_uid = int(k) + # add the solid_geometry to the current too in self.paint_tools dictionary + # and then reset the temporary list that stored that solid_geometry + v['solid_geometry'] = deepcopy(new_geometry) + v['data']['name'] = name + break + geo_obj.tools[current_uid] = dict(tools_storage[current_uid]) sol_geo = cascaded_union(isolated_geo) if has_offset is True: diff --git a/flatcamTools/__init__.py b/flatcamTools/__init__.py index bdd7e58b..184a7f43 100644 --- a/flatcamTools/__init__.py +++ b/flatcamTools/__init__.py @@ -1,4 +1,3 @@ -import sys from flatcamTools.ToolCalculators import ToolCalculator from flatcamTools.ToolCalibration import ToolCalibration @@ -41,3 +40,4 @@ from flatcamTools.ToolTransform import ToolTransform from flatcamTools.ToolPunchGerber import ToolPunchGerber from flatcamTools.ToolInvertGerber import ToolInvertGerber +from flatcamTools.ToolCorners import ToolCorners From d0e80043a47cba0b03072dd47df3871d2dd7543c Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Sun, 17 May 2020 04:02:50 +0300 Subject: [PATCH 33/99] - added a menu entry in Menu -> View for Toggle HUD --- CHANGELOG.md | 1 + FlatCAMApp.py | 4 ++++ assets/resources/hud_32.png | Bin 0 -> 631 bytes flatcamGUI/FlatCAMGUI.py | 6 +++--- 4 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 assets/resources/hud_32.png diff --git a/CHANGELOG.md b/CHANGELOG.md index 2a2f5326..91511416 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ CHANGELOG for FlatCAM beta 17.05.2020 - added new FlatCAM Tool: Corner Markers Tool which will add line markers in the selected corners of the bounding box of the targeted Gerber object +- added a menu entry in Menu -> View for Toggle HUD 16.05.2020 diff --git a/FlatCAMApp.py b/FlatCAMApp.py index 906dcb8f..6254f663 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -903,6 +903,7 @@ class App(QtCore.QObject): self.ui.menuview_toggle_grid_lines.triggered.connect(self.on_toggle_grid_lines) self.ui.menuview_toggle_axis.triggered.connect(self.on_toggle_axis) self.ui.menuview_toggle_workspace.triggered.connect(self.on_workspace_toggle) + self.ui.menuview_toggle_hud.triggered.connect(self.on_toggle_hud) self.ui.menutoolshell.triggered.connect(self.toggle_shell) @@ -4585,6 +4586,9 @@ class App(QtCore.QObject): self.plotcanvas.canvas.draw() self.toggle_axis = False + def on_toggle_hud(self): + self.plotcanvas.on_toggle_hud(state=False if self.plotcanvas.hud_enabled else True) + def on_toggle_grid(self): self.defaults.report_usage("on_toggle_grid()") diff --git a/assets/resources/hud_32.png b/assets/resources/hud_32.png new file mode 100644 index 0000000000000000000000000000000000000000..5ea627f7b9124a8bc7de0f5af53e0e89ac6d694f GIT binary patch literal 631 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10f+@+{-GzZ+Rj;xUkjGiz z5n0T@z;^_M8K-LVNdpDhOFVsD*`KfqGBU7rK5gE^z`*G0>EamTas2L8Yd`5gk@k=G zBQzET~@7V4&0C zX{I+BGtXYQG22r2{^Qf-MO%({^#wgSF(FEiQ9a5;=Xp-L>)r>8-I&(@O4JJdb8_BQ zmetaVE5009rSM~>&>tZdW7{=KB0;Um2{uRFe}CTcU}`0MQ=|G1c5cm2S_dbb-fq;q zoW(crk;(mA!vB^l*hI_6iT$~HG_>o#+x7W%=e(MHqK)UQ(*BiZbx?~b_v#(y6&|+a4U+nS5Px`s*dLT&+Lm z^#m6!m{+;?`rG5vp9}t*U$7#*@1!9xj8#iqBT7;dOH!?pi&B9UgOP!efv$n6uAzB| zfuWUwft7)oHi$I%#&2>EMMG|WN@iLmZVl~0J+(j$k{}y`^V3So6N^$A%FE03GV`*F clM@S4_413-XTP(N0xDwgboFyt=akR{0C9@zIRF3v literal 0 HcmV?d00001 diff --git a/flatcamGUI/FlatCAMGUI.py b/flatcamGUI/FlatCAMGUI.py index 0d171f95..6a244c4a 100644 --- a/flatcamGUI/FlatCAMGUI.py +++ b/flatcamGUI/FlatCAMGUI.py @@ -493,6 +493,8 @@ class FlatCAMGUI(QtWidgets.QMainWindow): QtGui.QIcon(self.app.resource_location + '/axis32.png'), _("&Toggle Axis\tShift+G")) self.menuview_toggle_workspace = self.menuview.addAction( QtGui.QIcon(self.app.resource_location + '/workspace24.png'), _("Toggle Workspace\tShift+W")) + self.menuview_toggle_hud = self.menuview.addAction( + QtGui.QIcon(self.app.resource_location + '/hud_32.png'), _("Toggle HUD\tAlt+M")) # ######################################################################## # ########################## Objects # ################################### @@ -2924,9 +2926,7 @@ class FlatCAMGUI(QtWidgets.QMainWindow): # Toggle HUD (Heads-Up Display) if key == QtCore.Qt.Key_H: - state = False if self.app.plotcanvas.hud_enabled else True - self.app.plotcanvas.on_toggle_hud(state=state) - + self.app.on_toggle_hud() # Locate in Object if key == QtCore.Qt.Key_J: self.app.on_locate(obj=self.app.collection.get_active()) From 29ce53b577cc3cf6756fce6673d77f4ff9c3c59c Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Sun, 17 May 2020 05:40:52 +0300 Subject: [PATCH 34/99] - solved the issue with the GUI in the Notebook being expanded too much in width due of the FCDoubleSpinner and FCSpinner sizeHint by setting the sizePolicy to Ignored value --- CHANGELOG.md | 1 + flatcamGUI/GUIElements.py | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 91511416..831e2286 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ CHANGELOG for FlatCAM beta - added new FlatCAM Tool: Corner Markers Tool which will add line markers in the selected corners of the bounding box of the targeted Gerber object - added a menu entry in Menu -> View for Toggle HUD +- solved the issue with the GUI in the Notebook being expanded too much in width due of the FCDoubleSpinner and FCSpinner sizeHint by setting the sizePolicy to Ignored value 16.05.2020 diff --git a/flatcamGUI/GUIElements.py b/flatcamGUI/GUIElements.py index 7b9b38f4..2d6a6c86 100644 --- a/flatcamGUI/GUIElements.py +++ b/flatcamGUI/GUIElements.py @@ -684,6 +684,8 @@ class FCSpinner(QtWidgets.QSpinBox): self.setAlignment(align_val) self.prev_readyToEdit = True + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Ignored, QtWidgets.QSizePolicy.Preferred) + self.setSizePolicy(sizePolicy) def eventFilter(self, object, event): if event.type() == QtCore.QEvent.MouseButtonPress and self.prev_readyToEdit is True: @@ -816,6 +818,8 @@ class FCDoubleSpinner(QtWidgets.QDoubleSpinBox): self.setAlignment(align_val) self.prev_readyToEdit = True + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Ignored, QtWidgets.QSizePolicy.Preferred) + self.setSizePolicy(sizePolicy) def on_edit_finished(self): self.clearFocus() From 0aeef246ea70b87f4e01c3bce3239b79159d8fbe Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Sun, 17 May 2020 15:53:13 +0300 Subject: [PATCH 35/99] - fixed the workspace being always A4 - added a label in the status bar to show if the workplace is active and what size it is --- CHANGELOG.md | 2 ++ FlatCAMApp.py | 5 +++-- flatcamGUI/FlatCAMGUI.py | 7 ++++++- flatcamGUI/PlotCanvas.py | 17 ++++++++++++----- flatcamGUI/PlotCanvasLegacy.py | 5 +++++ flatcamTools/ToolDistance.py | 1 + 6 files changed, 29 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 831e2286..5481582b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,8 @@ CHANGELOG for FlatCAM beta - added new FlatCAM Tool: Corner Markers Tool which will add line markers in the selected corners of the bounding box of the targeted Gerber object - added a menu entry in Menu -> View for Toggle HUD - solved the issue with the GUI in the Notebook being expanded too much in width due of the FCDoubleSpinner and FCSpinner sizeHint by setting the sizePolicy to Ignored value +- fixed the workspace being always A4 +- added a label in the status bar to show if the workplace is active and what size it is 16.05.2020 diff --git a/FlatCAMApp.py b/FlatCAMApp.py index 6254f663..e8dc24af 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -4888,8 +4888,8 @@ class App(QtCore.QObject): def on_workspace_modified(self): # self.save_defaults(silent=True) - if self.is_legacy is True: - self.plotcanvas.delete_workspace() + + self.plotcanvas.delete_workspace() self.preferencesUiManager.defaults_read_form() self.plotcanvas.draw_workspace(workspace_size=self.defaults['global_workspaceT']) @@ -4907,6 +4907,7 @@ class App(QtCore.QObject): self.ui.general_defaults_form.general_app_set_group.workspace_cb.stateChanged.disconnect(self.on_workspace) except TypeError: pass + self.ui.general_defaults_form.general_app_set_group.workspace_cb.set_value(state) self.ui.general_defaults_form.general_app_set_group.workspace_cb.stateChanged.connect(self.on_workspace) self.on_workspace() diff --git a/flatcamGUI/FlatCAMGUI.py b/flatcamGUI/FlatCAMGUI.py index 6a244c4a..193ec90e 100644 --- a/flatcamGUI/FlatCAMGUI.py +++ b/flatcamGUI/FlatCAMGUI.py @@ -2326,7 +2326,12 @@ class FlatCAMGUI(QtWidgets.QMainWindow): self.snap_toolbar.setMaximumHeight(24) self.infobar.addWidget(self.snap_toolbar) - self.units_label = QtWidgets.QLabel("[in]") + self.wplace_label = FCLabel("A4") + self.wplace_label.setMargin(2) + self.infobar.addWidget(self.wplace_label) + self.wplace_label.hide() + + self.units_label = QtWidgets.QLabel("[mm]") self.units_label.setMargin(2) self.infobar.addWidget(self.units_label) diff --git a/flatcamGUI/PlotCanvas.py b/flatcamGUI/PlotCanvas.py index 2a184669..0024ce1e 100644 --- a/flatcamGUI/PlotCanvas.py +++ b/flatcamGUI/PlotCanvas.py @@ -235,17 +235,24 @@ class PlotCanvas(QtCore.QObject, VisPyCanvas): a = np.array([(0, 0), (dims[0], 0), (dims[0], dims[1]), (0, dims[1])]) - if not self.workspace_line: - self.workspace_line = Line(pos=np.array((a[0], a[1], a[2], a[3], a[0])), color=(0.70, 0.3, 0.3, 0.7), - antialias=True, method='agg', parent=self.view.scene) - else: - self.workspace_line.parent = self.view.scene + # if not self.workspace_line: + # self.workspace_line = Line(pos=np.array((a[0], a[1], a[2], a[3], a[0])), color=(0.70, 0.3, 0.3, 0.7), + # antialias=True, method='agg', parent=self.view.scene) + # else: + # self.workspace_line.parent = self.view.scene + self.workspace_line = Line(pos=np.array((a[0], a[1], a[2], a[3], a[0])), color=(0.70, 0.3, 0.3, 0.7), + antialias=True, method='agg', parent=self.view.scene) + + self.fcapp.ui.wplace_label.set_value(workspace_size[:3]) + self.fcapp.ui.wplace_label.setToolTip(workspace_size) + self.fcapp.ui.wplace_label.show() def delete_workspace(self): try: self.workspace_line.parent = None except Exception: pass + self.fcapp.ui.wplace_label.hide() # redraw the workspace lines on the plot by re adding them to the parent view.scene def restore_workspace(self): diff --git a/flatcamGUI/PlotCanvasLegacy.py b/flatcamGUI/PlotCanvasLegacy.py index 34ad0a8f..155ffaa5 100644 --- a/flatcamGUI/PlotCanvasLegacy.py +++ b/flatcamGUI/PlotCanvasLegacy.py @@ -417,12 +417,17 @@ class PlotCanvasLegacy(QtCore.QObject): self.axes.add_line(self.workspace_line) self.canvas.draw() + self.app.ui.wplace_label.set_value(workspace_size[:3]) + self.app.ui.wplace_label.setToolTip(workspace_size) + self.app.ui.wplace_label.show() + def delete_workspace(self): try: self.axes.lines.remove(self.workspace_line) self.canvas.draw() except Exception: pass + self.app.ui.wplace_label.hide() def graph_event_connect(self, event_name, callback): """ diff --git a/flatcamTools/ToolDistance.py b/flatcamTools/ToolDistance.py index 2d04a091..c64e0c2b 100644 --- a/flatcamTools/ToolDistance.py +++ b/flatcamTools/ToolDistance.py @@ -486,6 +486,7 @@ class Distance(FlatCAMTool): self.calculate_distance(pos=pos) elif event.button == right_button and event_is_dragging is False: self.deactivate_measure_tool() + self.app.inform.emit(_("Distance Tool cancelled.")) def calculate_distance(self, pos): if len(self.points) == 1: From 18e128c57bfd2cc47952a017064a8e32d8c68f49 Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Sun, 17 May 2020 16:26:25 +0300 Subject: [PATCH 36/99] - now the Edit command (either from Menu Edit ->Edit Object) or through the shortcut key (E key) or project tab context menu works also for the CNCJob objects (will open a text Editor with the GCode) --- CHANGELOG.md | 1 + FlatCAMApp.py | 14 +++++++++++--- flatcamObjects/ObjectCollection.py | 5 +++-- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5481582b..ede63057 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ CHANGELOG for FlatCAM beta - solved the issue with the GUI in the Notebook being expanded too much in width due of the FCDoubleSpinner and FCSpinner sizeHint by setting the sizePolicy to Ignored value - fixed the workspace being always A4 - added a label in the status bar to show if the workplace is active and what size it is +- now the Edit command (either from Menu Edit ->Edit Object) or through the shortcut key (E key) or project tab context menu works also for the CNCJob objects (will open a text Editor with the GCode) 16.05.2020 diff --git a/FlatCAMApp.py b/FlatCAMApp.py index e8dc24af..48ab95da 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -2134,7 +2134,7 @@ class App(QtCore.QObject): def object2editor(self): """ - Send the current Geometry or Excellon object (if any) into the it's editor. + Send the current Geometry, Gerber, Excellon object or CNCJob (if any) into the it's editor. :return: None """ @@ -2146,10 +2146,10 @@ class App(QtCore.QObject): edited_object = self.collection.get_active() if isinstance(edited_object, GerberObject) or isinstance(edited_object, GeometryObject) or \ - isinstance(edited_object, ExcellonObject): + isinstance(edited_object, ExcellonObject) or isinstance(edited_object, CNCJobObject): pass else: - self.inform.emit('[WARNING_NOTCL] %s' % _("Select a Geometry, Gerber or Excellon Object to edit.")) + self.inform.emit('[WARNING_NOTCL] %s' % _("Select a Geometry, Gerber, Excellon or CNCJob Object to edit.")) return if isinstance(edited_object, GeometryObject): @@ -2213,6 +2213,14 @@ class App(QtCore.QObject): edited_object.ui_build = False edited_object.build_aperture_storage = False + elif isinstance(edited_object, CNCJobObject): + + if self.ui.splitter.sizes()[0] == 0: + self.ui.splitter.setSizes([1, 1]) + + edited_object.on_edit_code_click() + return + # make sure that we can't select another object while in Editor Mode: # self.collection.view.setSelectionMode(QtWidgets.QAbstractItemView.NoSelection) self.ui.project_frame.setDisabled(True) diff --git a/flatcamObjects/ObjectCollection.py b/flatcamObjects/ObjectCollection.py index ee1cf933..fae3c06d 100644 --- a/flatcamObjects/ObjectCollection.py +++ b/flatcamObjects/ObjectCollection.py @@ -382,8 +382,9 @@ class ObjectCollection(QtCore.QAbstractItemModel): if type(obj) != GeometryObject: self.app.ui.menuprojectgeneratecnc.setVisible(False) - if type(obj) != GeometryObject and type(obj) != ExcellonObject and type(obj) != GerberObject: - self.app.ui.menuprojectedit.setVisible(False) + # if type(obj) != GeometryObject and type(obj) != ExcellonObject and type(obj) != GerberObject or \ + # type(obj) != CNCJobObject: + # self.app.ui.menuprojectedit.setVisible(False) if type(obj) != GerberObject and type(obj) != ExcellonObject and type(obj) != CNCJobObject: self.app.ui.menuprojectviewsource.setVisible(False) if type(obj) != GerberObject and type(obj) != GeometryObject and type(obj) != ExcellonObject and \ From 9a53edd0179adb7e0b020f57a46b12f26e49e6ca Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Sun, 17 May 2020 19:16:49 +0300 Subject: [PATCH 37/99] - grid snap toolbar is now always active --- CHANGELOG.md | 1 + FlatCAMApp.py | 11 +++++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ede63057..90e0f76f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ CHANGELOG for FlatCAM beta - fixed the workspace being always A4 - added a label in the status bar to show if the workplace is active and what size it is - now the Edit command (either from Menu Edit ->Edit Object) or through the shortcut key (E key) or project tab context menu works also for the CNCJob objects (will open a text Editor with the GCode) +- grid snap toolbar is now always active 16.05.2020 diff --git a/FlatCAMApp.py b/FlatCAMApp.py index 48ab95da..16981723 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -2506,10 +2506,13 @@ class App(QtCore.QObject): else: self.ui.grb_edit_toolbar.setVisible(False) - if tb & 128: - self.ui.snap_toolbar.setVisible(True) - else: - self.ui.snap_toolbar.setVisible(False) + # if tb & 128: + # self.ui.snap_toolbar.setVisible(True) + # else: + # self.ui.snap_toolbar.setVisible(False) + + # Grid Toolbar is always active now + self.ui.snap_toolbar.setVisible(True) if tb & 256: self.ui.toolbarshell.setVisible(True) From c1941bc8826fa26c875f9206517026d5e8113a41 Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Sun, 17 May 2020 19:48:46 +0300 Subject: [PATCH 38/99] - fixed the object collection methods that return a list of objects or names of objects such that they have a parameter now to allow adding to those lists (or not) for the objects of type Script or Document. Thus fixing some of the Tcl commands such Set Origin --- CHANGELOG.md | 2 +- FlatCAMApp.py | 2 +- flatcamObjects/ObjectCollection.py | 23 +++++++++++++++++------ 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 90e0f76f..7f866665 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,7 +15,7 @@ CHANGELOG for FlatCAM beta - fixed the workspace being always A4 - added a label in the status bar to show if the workplace is active and what size it is - now the Edit command (either from Menu Edit ->Edit Object) or through the shortcut key (E key) or project tab context menu works also for the CNCJob objects (will open a text Editor with the GCode) -- grid snap toolbar is now always active +- fixed the object collection methods that return a list of objects or names of objects such that they have a parameter now to allow adding to those lists (or not) for the objects of type Script or Document. Thus fixing some of the Tcl commands such Set Origin 16.05.2020 diff --git a/FlatCAMApp.py b/FlatCAMApp.py index 16981723..07750ef9 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -5219,7 +5219,7 @@ class App(QtCore.QObject): self.should_we_save = True return - if event.button == 1: + if event is not None and event.button == 1: if self.is_legacy is False: event_pos = event.pos else: diff --git a/flatcamObjects/ObjectCollection.py b/flatcamObjects/ObjectCollection.py index fae3c06d..56fcbd36 100644 --- a/flatcamObjects/ObjectCollection.py +++ b/flatcamObjects/ObjectCollection.py @@ -593,16 +593,22 @@ class ObjectCollection(QtCore.QAbstractItemModel): # always open the notebook on object added to collection self.app.ui.splitter.setSizes([1, 1]) - def get_names(self): + def get_names(self, sel_all=None): """ Gets a list of the names of all objects in the collection. - :return: List of names. - :rtype: list + :param sel_all: Will return all objects if True. If False or None all except Script and Document + :return: List of names. + :rtype: list """ # log.debug(str(inspect.stack()[1][3]) + " --> OC.get_names()") - return [x.options['name'] for x in self.get_list()] + if sel_all is None or sel_all is False: + names_list = [x.options['name'] for x in self.get_list()] + else: + names_list = [x.options['name'] for x in self.get_list(sel_all=sel_all)] + + return names_list def get_bounds(self): """ @@ -984,15 +990,20 @@ class ObjectCollection(QtCore.QAbstractItemModel): self.app.inform.emit('[ERROR] %s: %s' % (_("Cause of error"), str(e))) raise - def get_list(self): + def get_list(self, sel_all=None): """ - Will return a list of all objects currently opened. + Will return a list of all objects currently opened. Except FlatCAMScript and FlatCAMDocuments + :param sel_all: Will return all objects if True. If False or None all except Script and Document :return: """ obj_list = [] for group in self.root_item.child_items: for item in group.child_items: + kind = item.obj.kind + if sel_all is None or sel_all is False: + if kind == 'document' or kind == 'script': + continue obj_list.append(item.obj) return obj_list From 4cfecfa70af8661000c118886b5d243eec5e7a8d Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Sun, 17 May 2020 21:56:44 +0300 Subject: [PATCH 39/99] - reverted the previous changes to object collection; it is better to create empty methods in FlatCAMScript and FlatCAMDocument objects --- CHANGELOG.md | 1 + FlatCAMApp.py | 5 ++++- assets/resources/dark_resources/etch_32.png | Bin 0 -> 811 bytes assets/resources/etch_32.png | Bin 0 -> 637 bytes flatcamObjects/FlatCAMDocument.py | 21 ++++++++++++++++++++ flatcamObjects/FlatCAMScript.py | 21 ++++++++++++++++++++ flatcamObjects/ObjectCollection.py | 17 +++------------- 7 files changed, 50 insertions(+), 15 deletions(-) create mode 100644 assets/resources/dark_resources/etch_32.png create mode 100644 assets/resources/etch_32.png diff --git a/CHANGELOG.md b/CHANGELOG.md index 7f866665..21c93fcf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ CHANGELOG for FlatCAM beta - added a label in the status bar to show if the workplace is active and what size it is - now the Edit command (either from Menu Edit ->Edit Object) or through the shortcut key (E key) or project tab context menu works also for the CNCJob objects (will open a text Editor with the GCode) - fixed the object collection methods that return a list of objects or names of objects such that they have a parameter now to allow adding to those lists (or not) for the objects of type Script or Document. Thus fixing some of the Tcl commands such Set Origin +- reverted the previous changes to object collection; it is better to create empty methods in FlatCAMScript and FlatCAMDocument objects 16.05.2020 diff --git a/FlatCAMApp.py b/FlatCAMApp.py index 07750ef9..b5fa601b 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -3080,7 +3080,10 @@ class App(QtCore.QObject): :return: None """ - xmin, ymin, xmax, ymax = obj.bounds() + try: + xmin, ymin, xmax, ymax = obj.bounds() + except TypeError: + return obj.options['xmin'] = xmin obj.options['ymin'] = ymin obj.options['xmax'] = xmax diff --git a/assets/resources/dark_resources/etch_32.png b/assets/resources/dark_resources/etch_32.png new file mode 100644 index 0000000000000000000000000000000000000000..ec8687ab79f6e8328a7700550d0de20b3ec1af1f GIT binary patch literal 811 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10;!=Q5h%1nO^774-m+v0G zc=Pz>+s7~7{r~^}@k=lp$bI?t>ec@bKYRcRo&jPocnky}m2aQCc>Cz(+b1Ap?||sx z>(`H7zXnQy1Yd#lK6wEY2Qff`uRvx3#qYg*31mEc`QZ^r&6~&1UjvPTsJZ|A{ZpWp zH*bKBc?8xAblbBxZyr2*bNlUEpy7Aly#w0_B;P%G`5vU})hjT12T>37jy0E5JdkoJ z3GxeOn0ltYYZBv~W9P512{N%VvvAg>78F~S>KU6{-W{^a=i%3P+25PRpDOkLaJc^a zu7a=hfyjTc8k&4k{3YpG`g>JW_vswb|fr9KMp1!W^Pgn){G`V;9sb2>Qo$+*W46!(U_R@8}CIgX%hmVi&uISL{dbHqO zXZ7jd_LH|Sgflb6HY{<7+l(Wsp`i62zLxHUC?A`V=)2(9Gnd|MapU0q|exA-=aAvZrIGp!Q0hQO2`TYwrQ vK{f>ErERK(!v>gTe~DWM4f%k4UEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10f+@+{-GzZ+Rj;xUkjGiz z5n0T@z;^_M8K-LVNdpDhOFVsD*`Kfq@~I0sEn75`fq~K6)5S5wx6bEQO!=U)T$5Uvy>ZV!nGyGD%0Z%Qjr% z%lc}-_wk&_$4eDX2h9)Hs#MO`|Nc~&=|*~2fa*4b%=VWW>lzL?yDd)Ia=3NdebEC9 z%@>mSY*%qOhcNHPp?(q!C`^!J%-O6 z62C3&N@X{!lvDF{-`J4KXPv!a_L`2p`;UFd-<-m@Lv?{bH1m8h%S#8C&n|gsntLJP zWYT{v-fLevIsGKIGV~OlvN*s#ySd@Cl<;g|urjEYxJHzuB$lLFB^RXvDF!10BLiIn zQ(Z&z5JM9yV@oST3vB}fD+7am-+(nJ8glbfGSez?YxpPdLI9{i5@bVgep*R+Vo@qX jd3m{BW?pu2a$-TMUVc&f>~}U&Kt&9mu6{1-oD!M OC.get_names()") - if sel_all is None or sel_all is False: - names_list = [x.options['name'] for x in self.get_list()] - else: - names_list = [x.options['name'] for x in self.get_list(sel_all=sel_all)] - - return names_list + return [x.options['name'] for x in self.get_list()] def get_bounds(self): """ @@ -990,20 +984,15 @@ class ObjectCollection(QtCore.QAbstractItemModel): self.app.inform.emit('[ERROR] %s: %s' % (_("Cause of error"), str(e))) raise - def get_list(self, sel_all=None): + def get_list(self): """ Will return a list of all objects currently opened. Except FlatCAMScript and FlatCAMDocuments - :param sel_all: Will return all objects if True. If False or None all except Script and Document :return: """ obj_list = [] for group in self.root_item.child_items: for item in group.child_items: - kind = item.obj.kind - if sel_all is None or sel_all is False: - if kind == 'document' or kind == 'script': - continue obj_list.append(item.obj) return obj_list From 1085d26b7be24a7b5c5070272a0507dbad2236ef Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Mon, 18 May 2020 05:46:57 +0300 Subject: [PATCH 40/99] - fixed the PDF Tool when importing as Gerber objects - moved all the parsing out of the PDF Tool to a new file ParsePDF in the flatcamParsers folder - trying to fix the pixmap load crash when running a FlatCAMScript --- CHANGELOG.md | 6 + FlatCAMApp.py | 6 +- flatcamGUI/FlatCAMGUI.py | 26 +- flatcamObjects/FlatCAMScript.py | 11 +- flatcamParsers/ParsePDF.py | 1080 ++++++++++++++++++++++++++++ flatcamTools/ToolPDF.py | 1080 +--------------------------- tclCommands/TclCommandSetOrigin.py | 6 +- tclCommands/TclCommandSetPath.py | 13 +- 8 files changed, 1138 insertions(+), 1090 deletions(-) create mode 100644 flatcamParsers/ParsePDF.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 21c93fcf..a013677c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,12 @@ CHANGELOG for FlatCAM beta ================================================= +18.05.2020 + +- fixed the PDF Tool when importing as Gerber objects +- moved all the parsing out of the PDF Tool to a new file ParsePDF in the flatcamParsers folder +- trying to fix the pixmap load crash when running a FlatCAMScript + 17.05.2020 - added new FlatCAM Tool: Corner Markers Tool which will add line markers in the selected corners of the bounding box of the targeted Gerber object diff --git a/FlatCAMApp.py b/FlatCAMApp.py index b5fa601b..9cb4c8dc 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -9810,16 +9810,18 @@ class App(QtCore.QObject): App.log.debug(" **************** Finished PROJECT loading... **************** ") - def plot_all(self, fit_view=True, use_thread=True): + def plot_all(self, fit_view=True, muted=False, use_thread=True): """ Re-generates all plots from all objects. :param fit_view: if True will plot the objects and will adjust the zoom to fit all plotted objects into view + :param muted: if True don't print messages :param use_thread: if True will use threading for plotting the objects :return: None """ self.log.debug("Plot_all()") - self.inform.emit('[success] %s...' % _("Redrawing all objects")) + if muted is not True: + self.inform.emit('[success] %s...' % _("Redrawing all objects")) for plot_obj in self.collection.get_list(): def worker_task(obj): diff --git a/flatcamGUI/FlatCAMGUI.py b/flatcamGUI/FlatCAMGUI.py index 193ec90e..44765738 100644 --- a/flatcamGUI/FlatCAMGUI.py +++ b/flatcamGUI/FlatCAMGUI.py @@ -4300,6 +4300,8 @@ class FlatCAMInfoBar(QtWidgets.QWidget): self.pmap = QtGui.QPixmap(self.app.resource_location + '/graylight12.png') self.icon.setPixmap(self.pmap) + self.lock_pmaps = False + layout = QtWidgets.QHBoxLayout() layout.setContentsMargins(5, 0, 5, 0) self.setLayout(layout) @@ -4311,7 +4313,6 @@ class FlatCAMInfoBar(QtWidgets.QWidget): self.text.setToolTip(_("Hello!")) layout.addWidget(self.text) - layout.addStretch() def set_text_(self, text, color=None): @@ -4323,17 +4324,18 @@ class FlatCAMInfoBar(QtWidgets.QWidget): def set_status(self, text, level="info"): level = str(level) - self.pmap.fill() - if level == "ERROR" or level == "ERROR_NOTCL": - self.pmap = QtGui.QPixmap(self.app.resource_location + '/redlight12.png') - elif level.lower() == "success": - self.pmap = QtGui.QPixmap(self.app.resource_location + '/greenlight12.png') - elif level == "WARNING" or level == "WARNING_NOTCL": - self.pmap = QtGui.QPixmap(self.app.resource_location + '/yellowlight12.png') - elif level.lower() == "selected": - self.pmap = QtGui.QPixmap(self.app.resource_location + '/bluelight12.png') - else: - self.pmap = QtGui.QPixmap(self.app.resource_location + '/graylight12.png') + if self.lock_pmaps is not True: + self.pmap.fill() + if level == "ERROR" or level == "ERROR_NOTCL": + self.pmap = QtGui.QPixmap(self.app.resource_location + '/redlight12.png') + elif level.lower() == "success": + self.pmap = QtGui.QPixmap(self.app.resource_location + '/greenlight12.png') + elif level == "WARNING" or level == "WARNING_NOTCL": + self.pmap = QtGui.QPixmap(self.app.resource_location + '/yellowlight12.png') + elif level.lower() == "selected": + self.pmap = QtGui.QPixmap(self.app.resource_location + '/bluelight12.png') + else: + self.pmap = QtGui.QPixmap(self.app.resource_location + '/graylight12.png') try: self.set_text_(text) diff --git a/flatcamObjects/FlatCAMScript.py b/flatcamObjects/FlatCAMScript.py index 68a6a423..e17df4d9 100644 --- a/flatcamObjects/FlatCAMScript.py +++ b/flatcamObjects/FlatCAMScript.py @@ -183,7 +183,13 @@ class ScriptObject(FlatCAMObj): if self.app.ui.shell_dock.isHidden(): self.app.ui.shell_dock.show() - self.script_code = deepcopy(self.script_editor_tab.code_editor.toPlainText()) + self.app.shell.open_processing() # Disables input box. + + # make sure that the pixmaps are not updated when running this as they will crash + # TODO find why the pixmaps load crash when run from this object (perhaps another thread?) + self.app.ui.fcinfo.lock_pmaps = True + + self.script_code = self.script_editor_tab.code_editor.toPlainText() old_line = '' for tcl_command_line in self.script_code.splitlines(): @@ -202,8 +208,6 @@ class ScriptObject(FlatCAMObj): # execute the actual Tcl command try: - self.app.shell.open_processing() # Disables input box. - result = self.app.shell.tcl.eval(str(new_command)) if result != 'None': self.app.shell.append_output(result + '\n') @@ -220,6 +224,7 @@ class ScriptObject(FlatCAMObj): log.error("Exec command Exception: %s\n" % result) self.app.shell.append_error('ERROR: %s\n '% result) + self.app.ui.fcinfo.lock_pmaps = False self.app.shell.close_processing() def on_autocomplete_changed(self, state): diff --git a/flatcamParsers/ParsePDF.py b/flatcamParsers/ParsePDF.py new file mode 100644 index 00000000..e7f189f3 --- /dev/null +++ b/flatcamParsers/ParsePDF.py @@ -0,0 +1,1080 @@ +# ########################################################## +# FlatCAM: 2D Post-processing for Manufacturing # +# File Author: Marius Adrian Stanciu (c) # +# Date: 4/23/2019 # +# MIT Licence # +# ########################################################## + +from PyQt5 import QtCore + +from FlatCAMCommon import GracefulException as grace + +from shapely.geometry import Polygon, LineString, MultiPolygon + +from copy import copy, deepcopy +import numpy as np +import re +import logging + +log = logging.getLogger('base') + + +class PdfParser(QtCore.QObject): + + def __init__(self, app): + super().__init__() + self.app = app + self.step_per_circles = self.app.defaults["gerber_circle_steps"] + + # detect stroke color change; it means a new object to be created + self.stroke_color_re = re.compile(r'^\s*(\d+\.?\d*) (\d+\.?\d*) (\d+\.?\d*)\s*RG$') + + # detect fill color change; we check here for white color (transparent geometry); + # if detected we create an Excellon from it + self.fill_color_re = re.compile(r'^\s*(\d+\.?\d*) (\d+\.?\d*) (\d+\.?\d*)\s*rg$') + + # detect 're' command + self.rect_re = re.compile(r'^(-?\d+\.?\d*)\s(-?\d+\.?\d*)\s(-?\d+\.?\d*)\s(-?\d+\.?\d*)\s*re$') + # detect 'm' command + self.start_subpath_re = re.compile(r'^(-?\d+\.?\d*)\s(-?\d+\.?\d*)\sm$') + # detect 'l' command + self.draw_line_re = re.compile(r'^(-?\d+\.?\d*)\s(-?\d+\.?\d*)\sl') + # detect 'c' command + self.draw_arc_3pt_re = re.compile(r'^(-?\d+\.?\d*)\s(-?\d+\.?\d*)\s(-?\d+\.?\d*)\s(-?\d+\.?\d*)\s(-?\d+\.?\d*)' + r'\s(-?\d+\.?\d*)\s*c$') + # detect 'v' command + self.draw_arc_2pt_c1start_re = re.compile(r'^(-?\d+\.?\d*)\s(-?\d+\.?\d*)\s(-?\d+\.?\d*)\s(-?\d+\.?\d*)\s*v$') + # detect 'y' command + self.draw_arc_2pt_c2stop_re = re.compile(r'^(-?\d+\.?\d*)\s(-?\d+\.?\d*)\s(-?\d+\.?\d*)\s(-?\d+\.?\d*)\s*y$') + # detect 'h' command + self.end_subpath_re = re.compile(r'^h$') + + # detect 'w' command + self.strokewidth_re = re.compile(r'^(\d+\.?\d*)\s*w$') + # detect 'S' command + self.stroke_path__re = re.compile(r'^S\s?[Q]?$') + # detect 's' command + self.close_stroke_path__re = re.compile(r'^s$') + # detect 'f' or 'f*' command + self.fill_path_re = re.compile(r'^[f|F][*]?$') + # detect 'B' or 'B*' command + self.fill_stroke_path_re = re.compile(r'^B[*]?$') + # detect 'b' or 'b*' command + self.close_fill_stroke_path_re = re.compile(r'^b[*]?$') + # detect 'n' + self.no_op_re = re.compile(r'^n$') + + # detect offset transformation. Pattern: (1) (0) (0) (1) (x) (y) + # self.offset_re = re.compile(r'^1\.?0*\s0?\.?0*\s0?\.?0*\s1\.?0*\s(-?\d+\.?\d*)\s(-?\d+\.?\d*)\s*cm$') + # detect scale transformation. Pattern: (factor_x) (0) (0) (factor_y) (0) (0) + # self.scale_re = re.compile(r'^q? (-?\d+\.?\d*) 0\.?0* 0\.?0* (-?\d+\.?\d*) 0\.?0* 0\.?0*\s+cm$') + # detect combined transformation. Should always be the last + self.combined_transform_re = re.compile(r'^(q)?\s*(-?\d+\.?\d*) (-?\d+\.?\d*) (-?\d+\.?\d*) (-?\d+\.?\d*) ' + r'(-?\d+\.?\d*) (-?\d+\.?\d*)\s+cm$') + + # detect clipping path + self.clip_path_re = re.compile(r'^W[*]? n?$') + + # detect save graphic state in graphic stack + self.save_gs_re = re.compile(r'^q.*?$') + + # detect restore graphic state from graphic stack + self.restore_gs_re = re.compile(r'^.*Q.*$') + + # graphic stack where we save parameters like transformation, line_width + self.gs = {} + # each element is a list composed of sublist elements + # (each sublist has 2 lists each having 2 elements: first is offset like: + # offset_geo = [off_x, off_y], second element is scale list with 2 elements, like: scale_geo = [sc_x, sc_yy]) + self.gs['transform'] = [] + self.gs['line_width'] = [] # each element is a float + + # conversion factor to INCH + self.point_to_unit_factor = 0.01388888888 + + def parse_pdf(self, pdf_content): + + # the UNITS in PDF files are points and here we set the factor to convert them to real units (either MM or INCH) + if self.app.defaults['units'].upper() == 'MM': + # 1 inch = 72 points => 1 point = 1 / 72 = 0.01388888888 inch = 0.01388888888 inch * 25.4 = 0.35277777778 mm + self.point_to_unit_factor = 25.4 / 72 + else: + # 1 inch = 72 points => 1 point = 1 / 72 = 0.01388888888 inch + self.point_to_unit_factor = 1 / 72 + + path = {} + path['lines'] = [] # it's a list of lines subpaths + path['bezier'] = [] # it's a list of bezier arcs subpaths + path['rectangle'] = [] # it's a list of rectangle subpaths + + subpath = {} + subpath['lines'] = [] # it's a list of points + subpath['bezier'] = [] # it's a list of sublists each like this [start, c1, c2, stop] + subpath['rectangle'] = [] # it's a list of sublists of points + + # store the start point (when 'm' command is encountered) + current_subpath = None + + # set True when 'h' command is encountered (close subpath) + close_subpath = False + + start_point = None + current_point = None + size = 0 + + # initial values for the transformations, in case they are not encountered in the PDF file + offset_geo = [0, 0] + scale_geo = [1, 1] + + # store the objects to be transformed into Gerbers + object_dict = {} + # will serve as key in the object_dict + layer_nr = 1 + # create first object + object_dict[layer_nr] = {} + + # store the apertures here + apertures_dict = {} + + # initial aperture + aperture = 10 + + # store the apertures with clear geometry here + # we are interested only in the circular geometry (drill holes) therefore we target only Bezier subpaths + clear_apertures_dict = {} + # everything will be stored in the '0' aperture since we are dealing with clear polygons not strokes + clear_apertures_dict['0'] = {} + clear_apertures_dict['0']['size'] = 0.0 + clear_apertures_dict['0']['type'] = 'C' + clear_apertures_dict['0']['geometry'] = [] + + # on stroke color change we create a new apertures dictionary and store the old one in a storage from where + # it will be transformed into Gerber object + old_color = [None, None, None] + + # signal that we have clear geometry and the geometry will be added to a special layer_nr = 0 + flag_clear_geo = False + + line_nr = 0 + lines = pdf_content.splitlines() + + for pline in lines: + if self.app.abort_flag: + # graceful abort requested by the user + raise grace + + line_nr += 1 + log.debug("line %d: %s" % (line_nr, pline)) + + # COLOR DETECTION / OBJECT DETECTION + match = self.stroke_color_re.search(pline) + if match: + color = [float(match.group(1)), float(match.group(2)), float(match.group(3))] + log.debug( + "ToolPDF.parse_pdf() --> STROKE Color change on line: %s --> RED=%f GREEN=%f BLUE=%f" % + (line_nr, color[0], color[1], color[2])) + + if color[0] == old_color[0] and color[1] == old_color[1] and color[2] == old_color[2]: + # same color, do nothing + continue + else: + if apertures_dict: + object_dict[layer_nr] = deepcopy(apertures_dict) + apertures_dict.clear() + layer_nr += 1 + + object_dict[layer_nr] = {} + old_color = copy(color) + # we make sure that the following geometry is added to the right storage + flag_clear_geo = False + continue + + # CLEAR GEOMETRY detection + match = self.fill_color_re.search(pline) + if match: + fill_color = [float(match.group(1)), float(match.group(2)), float(match.group(3))] + log.debug( + "ToolPDF.parse_pdf() --> FILL Color change on line: %s --> RED=%f GREEN=%f BLUE=%f" % + (line_nr, fill_color[0], fill_color[1], fill_color[2])) + # if the color is white we are seeing 'clear_geometry' that can't be seen. It may be that those + # geometries are actually holes from which we can make an Excellon file + if fill_color[0] == 1 and fill_color[1] == 1 and fill_color[2] == 1: + flag_clear_geo = True + else: + flag_clear_geo = False + continue + + # TRANSFORMATIONS DETECTION # + + # Detect combined transformation. + match = self.combined_transform_re.search(pline) + if match: + # detect save graphic stack event + # sometimes they combine save_to_graphics_stack with the transformation on the same line + if match.group(1) == 'q': + log.debug( + "ToolPDF.parse_pdf() --> Save to GS found on line: %s --> offset=[%f, %f] ||| scale=[%f, %f]" % + (line_nr, offset_geo[0], offset_geo[1], scale_geo[0], scale_geo[1])) + + self.gs['transform'].append(deepcopy([offset_geo, scale_geo])) + self.gs['line_width'].append(deepcopy(size)) + + # transformation = TRANSLATION (OFFSET) + if (float(match.group(3)) == 0 and float(match.group(4)) == 0) and \ + (float(match.group(6)) != 0 or float(match.group(7)) != 0): + log.debug( + "ToolPDF.parse_pdf() --> OFFSET transformation found on line: %s --> %s" % (line_nr, pline)) + + offset_geo[0] += float(match.group(6)) + offset_geo[1] += float(match.group(7)) + # log.debug("Offset= [%f, %f]" % (offset_geo[0], offset_geo[1])) + + # transformation = SCALING + if float(match.group(2)) != 1 and float(match.group(5)) != 1: + log.debug( + "ToolPDF.parse_pdf() --> SCALE transformation found on line: %s --> %s" % (line_nr, pline)) + + scale_geo[0] *= float(match.group(2)) + scale_geo[1] *= float(match.group(5)) + # log.debug("Scale= [%f, %f]" % (scale_geo[0], scale_geo[1])) + + continue + + # detect save graphic stack event + match = self.save_gs_re.search(pline) + if match: + log.debug( + "ToolPDF.parse_pdf() --> Save to GS found on line: %s --> offset=[%f, %f] ||| scale=[%f, %f]" % + (line_nr, offset_geo[0], offset_geo[1], scale_geo[0], scale_geo[1])) + self.gs['transform'].append(deepcopy([offset_geo, scale_geo])) + self.gs['line_width'].append(deepcopy(size)) + + # detect restore from graphic stack event + match = self.restore_gs_re.search(pline) + if match: + try: + restored_transform = self.gs['transform'].pop(-1) + offset_geo = restored_transform[0] + scale_geo = restored_transform[1] + except IndexError: + # nothing to remove + log.debug("ToolPDF.parse_pdf() --> Nothing to restore") + pass + + try: + size = self.gs['line_width'].pop(-1) + except IndexError: + log.debug("ToolPDF.parse_pdf() --> Nothing to restore") + # nothing to remove + pass + + log.debug( + "ToolPDF.parse_pdf() --> Restore from GS found on line: %s --> " + "restored_offset=[%f, %f] ||| restored_scale=[%f, %f]" % + (line_nr, offset_geo[0], offset_geo[1], scale_geo[0], scale_geo[1])) + # log.debug("Restored Offset= [%f, %f]" % (offset_geo[0], offset_geo[1])) + # log.debug("Restored Scale= [%f, %f]" % (scale_geo[0], scale_geo[1])) + + # PATH CONSTRUCTION # + + # Start SUBPATH + match = self.start_subpath_re.search(pline) + if match: + # we just started a subpath so we mark it as not closed yet + close_subpath = False + + # init subpaths + subpath['lines'] = [] + subpath['bezier'] = [] + subpath['rectangle'] = [] + + # detect start point to move to + x = float(match.group(1)) + offset_geo[0] + y = float(match.group(2)) + offset_geo[1] + pt = (x * self.point_to_unit_factor * scale_geo[0], + y * self.point_to_unit_factor * scale_geo[1]) + start_point = pt + + # add the start point to subpaths + subpath['lines'].append(start_point) + # subpath['bezier'].append(start_point) + # subpath['rectangle'].append(start_point) + current_point = start_point + continue + + # Draw Line + match = self.draw_line_re.search(pline) + if match: + current_subpath = 'lines' + x = float(match.group(1)) + offset_geo[0] + y = float(match.group(2)) + offset_geo[1] + pt = (x * self.point_to_unit_factor * scale_geo[0], + y * self.point_to_unit_factor * scale_geo[1]) + subpath['lines'].append(pt) + current_point = pt + continue + + # Draw Bezier 'c' + match = self.draw_arc_3pt_re.search(pline) + if match: + current_subpath = 'bezier' + start = current_point + x = float(match.group(1)) + offset_geo[0] + y = float(match.group(2)) + offset_geo[1] + c1 = (x * self.point_to_unit_factor * scale_geo[0], + y * self.point_to_unit_factor * scale_geo[1]) + x = float(match.group(3)) + offset_geo[0] + y = float(match.group(4)) + offset_geo[1] + c2 = (x * self.point_to_unit_factor * scale_geo[0], + y * self.point_to_unit_factor * scale_geo[1]) + x = float(match.group(5)) + offset_geo[0] + y = float(match.group(6)) + offset_geo[1] + stop = (x * self.point_to_unit_factor * scale_geo[0], + y * self.point_to_unit_factor * scale_geo[1]) + + subpath['bezier'].append([start, c1, c2, stop]) + current_point = stop + continue + + # Draw Bezier 'v' + match = self.draw_arc_2pt_c1start_re.search(pline) + if match: + current_subpath = 'bezier' + start = current_point + x = float(match.group(1)) + offset_geo[0] + y = float(match.group(2)) + offset_geo[1] + c2 = (x * self.point_to_unit_factor * scale_geo[0], + y * self.point_to_unit_factor * scale_geo[1]) + x = float(match.group(3)) + offset_geo[0] + y = float(match.group(4)) + offset_geo[1] + stop = (x * self.point_to_unit_factor * scale_geo[0], + y * self.point_to_unit_factor * scale_geo[1]) + + subpath['bezier'].append([start, start, c2, stop]) + current_point = stop + continue + + # Draw Bezier 'y' + match = self.draw_arc_2pt_c2stop_re.search(pline) + if match: + start = current_point + x = float(match.group(1)) + offset_geo[0] + y = float(match.group(2)) + offset_geo[1] + c1 = (x * self.point_to_unit_factor * scale_geo[0], + y * self.point_to_unit_factor * scale_geo[1]) + x = float(match.group(3)) + offset_geo[0] + y = float(match.group(4)) + offset_geo[1] + stop = (x * self.point_to_unit_factor * scale_geo[0], + y * self.point_to_unit_factor * scale_geo[1]) + + subpath['bezier'].append([start, c1, stop, stop]) + current_point = stop + continue + + # Draw Rectangle 're' + match = self.rect_re.search(pline) + if match: + current_subpath = 'rectangle' + x = (float(match.group(1)) + offset_geo[0]) * self.point_to_unit_factor * scale_geo[0] + y = (float(match.group(2)) + offset_geo[1]) * self.point_to_unit_factor * scale_geo[1] + width = (float(match.group(3)) + offset_geo[0]) * self.point_to_unit_factor * scale_geo[0] + height = (float(match.group(4)) + offset_geo[1]) * self.point_to_unit_factor * scale_geo[1] + pt1 = (x, y) + pt2 = (x + width, y) + pt3 = (x + width, y + height) + pt4 = (x, y + height) + subpath['rectangle'] += [pt1, pt2, pt3, pt4, pt1] + current_point = pt1 + continue + + # Detect clipping path set + # ignore this and delete the current subpath + match = self.clip_path_re.search(pline) + if match: + subpath['lines'] = [] + subpath['bezier'] = [] + subpath['rectangle'] = [] + # it means that we've already added the subpath to path and we need to delete it + # clipping path is usually either rectangle or lines + if close_subpath is True: + close_subpath = False + if current_subpath == 'lines': + path['lines'].pop(-1) + if current_subpath == 'rectangle': + path['rectangle'].pop(-1) + continue + + # Close SUBPATH + match = self.end_subpath_re.search(pline) + if match: + close_subpath = True + if current_subpath == 'lines': + subpath['lines'].append(start_point) + # since we are closing the subpath add it to the path, a path may have chained subpaths + path['lines'].append(copy(subpath['lines'])) + subpath['lines'] = [] + elif current_subpath == 'bezier': + # subpath['bezier'].append(start_point) + # since we are closing the subpath add it to the path, a path may have chained subpaths + path['bezier'].append(copy(subpath['bezier'])) + subpath['bezier'] = [] + elif current_subpath == 'rectangle': + # subpath['rectangle'].append(start_point) + # since we are closing the subpath add it to the path, a path may have chained subpaths + path['rectangle'].append(copy(subpath['rectangle'])) + subpath['rectangle'] = [] + continue + + # PATH PAINTING # + + # Detect Stroke width / aperture + match = self.strokewidth_re.search(pline) + if match: + size = float(match.group(1)) + continue + + # Detect No_Op command, ignore the current subpath + match = self.no_op_re.search(pline) + if match: + subpath['lines'] = [] + subpath['bezier'] = [] + subpath['rectangle'] = [] + continue + + # Stroke the path + match = self.stroke_path__re.search(pline) + if match: + # scale the size here; some PDF printers apply transformation after the size is declared + applied_size = size * scale_geo[0] * self.point_to_unit_factor + path_geo = [] + if current_subpath == 'lines': + if path['lines']: + for subp in path['lines']: + geo = copy(subp) + try: + geo = LineString(geo).buffer((float(applied_size) / 2), + resolution=self.step_per_circles) + path_geo.append(geo) + except ValueError: + pass + # the path was painted therefore initialize it + path['lines'] = [] + else: + geo = copy(subpath['lines']) + try: + geo = LineString(geo).buffer((float(applied_size) / 2), resolution=self.step_per_circles) + path_geo.append(geo) + except ValueError: + pass + subpath['lines'] = [] + + if current_subpath == 'bezier': + if path['bezier']: + for subp in path['bezier']: + geo = [] + for b in subp: + geo += self.bezier_to_points(start=b[0], c1=b[1], c2=b[2], stop=b[3]) + try: + geo = LineString(geo).buffer((float(applied_size) / 2), + resolution=self.step_per_circles) + path_geo.append(geo) + except ValueError: + pass + # the path was painted therefore initialize it + path['bezier'] = [] + else: + geo = [] + for b in subpath['bezier']: + geo += self.bezier_to_points(start=b[0], c1=b[1], c2=b[2], stop=b[3]) + try: + geo = LineString(geo).buffer((float(applied_size) / 2), resolution=self.step_per_circles) + path_geo.append(geo) + except ValueError: + pass + subpath['bezier'] = [] + + if current_subpath == 'rectangle': + if path['rectangle']: + for subp in path['rectangle']: + geo = copy(subp) + try: + geo = LineString(geo).buffer((float(applied_size) / 2), + resolution=self.step_per_circles) + path_geo.append(geo) + except ValueError: + pass + # the path was painted therefore initialize it + path['rectangle'] = [] + else: + geo = copy(subpath['rectangle']) + try: + geo = LineString(geo).buffer((float(applied_size) / 2), resolution=self.step_per_circles) + path_geo.append(geo) + except ValueError: + pass + subpath['rectangle'] = [] + + # store the found geometry + found_aperture = None + if apertures_dict: + for apid in apertures_dict: + # if we already have an aperture with the current size (rounded to 5 decimals) + if apertures_dict[apid]['size'] == round(applied_size, 5): + found_aperture = apid + break + + if found_aperture: + for pdf_geo in path_geo: + if isinstance(pdf_geo, MultiPolygon): + for poly in pdf_geo: + new_el = {} + new_el['solid'] = poly + new_el['follow'] = poly.exterior + apertures_dict[copy(found_aperture)]['geometry'].append(deepcopy(new_el)) + else: + new_el = {} + new_el['solid'] = pdf_geo + new_el['follow'] = pdf_geo.exterior + apertures_dict[copy(found_aperture)]['geometry'].append(deepcopy(new_el)) + else: + if str(aperture) in apertures_dict.keys(): + aperture += 1 + apertures_dict[str(aperture)] = {} + apertures_dict[str(aperture)]['size'] = round(applied_size, 5) + apertures_dict[str(aperture)]['type'] = 'C' + apertures_dict[str(aperture)]['geometry'] = [] + for pdf_geo in path_geo: + if isinstance(pdf_geo, MultiPolygon): + for poly in pdf_geo: + new_el = {} + new_el['solid'] = poly + new_el['follow'] = poly.exterior + apertures_dict[str(aperture)]['geometry'].append(deepcopy(new_el)) + else: + new_el = {} + new_el['solid'] = pdf_geo + new_el['follow'] = pdf_geo.exterior + apertures_dict[str(aperture)]['geometry'].append(deepcopy(new_el)) + else: + apertures_dict[str(aperture)] = {} + apertures_dict[str(aperture)]['size'] = round(applied_size, 5) + apertures_dict[str(aperture)]['type'] = 'C' + apertures_dict[str(aperture)]['geometry'] = [] + for pdf_geo in path_geo: + if isinstance(pdf_geo, MultiPolygon): + for poly in pdf_geo: + new_el = {} + new_el['solid'] = poly + new_el['follow'] = poly.exterior + apertures_dict[str(aperture)]['geometry'].append(deepcopy(new_el)) + else: + new_el = {} + new_el['solid'] = pdf_geo + new_el['follow'] = pdf_geo.exterior + apertures_dict[str(aperture)]['geometry'].append(deepcopy(new_el)) + + continue + + # Fill the path + match = self.fill_path_re.search(pline) + if match: + # scale the size here; some PDF printers apply transformation after the size is declared + applied_size = size * scale_geo[0] * self.point_to_unit_factor + path_geo = [] + + if current_subpath == 'lines': + if path['lines']: + for subp in path['lines']: + geo = copy(subp) + # close the subpath if it was not closed already + if close_subpath is False: + geo.append(geo[0]) + try: + geo_el = Polygon(geo).buffer(0.0000001, resolution=self.step_per_circles) + path_geo.append(geo_el) + except ValueError: + pass + # the path was painted therefore initialize it + path['lines'] = [] + else: + geo = copy(subpath['lines']) + # close the subpath if it was not closed already + if close_subpath is False: + geo.append(start_point) + try: + geo_el = Polygon(geo).buffer(0.0000001, resolution=self.step_per_circles) + path_geo.append(geo_el) + except ValueError: + pass + subpath['lines'] = [] + + if current_subpath == 'bezier': + geo = [] + if path['bezier']: + for subp in path['bezier']: + for b in subp: + geo += self.bezier_to_points(start=b[0], c1=b[1], c2=b[2], stop=b[3]) + # close the subpath if it was not closed already + if close_subpath is False: + new_g = geo[0] + geo.append(new_g) + try: + geo_el = Polygon(geo).buffer(0.0000001, resolution=self.step_per_circles) + path_geo.append(geo_el) + except ValueError: + pass + # the path was painted therefore initialize it + path['bezier'] = [] + else: + for b in subpath['bezier']: + geo += self.bezier_to_points(start=b[0], c1=b[1], c2=b[2], stop=b[3]) + if close_subpath is False: + geo.append(start_point) + try: + geo_el = Polygon(geo).buffer(0.0000001, resolution=self.step_per_circles) + path_geo.append(geo_el) + except ValueError: + pass + subpath['bezier'] = [] + + if current_subpath == 'rectangle': + if path['rectangle']: + for subp in path['rectangle']: + geo = copy(subp) + # # close the subpath if it was not closed already + # if close_subpath is False and start_point is not None: + # geo.append(start_point) + try: + geo_el = Polygon(geo).buffer(0.0000001, resolution=self.step_per_circles) + path_geo.append(geo_el) + except ValueError: + pass + # the path was painted therefore initialize it + path['rectangle'] = [] + else: + geo = copy(subpath['rectangle']) + # # close the subpath if it was not closed already + # if close_subpath is False and start_point is not None: + # geo.append(start_point) + try: + geo_el = Polygon(geo).buffer(0.0000001, resolution=self.step_per_circles) + path_geo.append(geo_el) + except ValueError: + pass + subpath['rectangle'] = [] + + # we finished painting and also closed the path if it was the case + close_subpath = True + + # in case that a color change to white (transparent) occurred + if flag_clear_geo is True: + # if there was a fill color change we look for circular geometries from which we can make + # drill holes for the Excellon file + if current_subpath == 'bezier': + # if there are geometries in the list + if path_geo: + try: + for g in path_geo: + new_el = {} + new_el['clear'] = g + clear_apertures_dict['0']['geometry'].append(new_el) + except TypeError: + new_el = {} + new_el['clear'] = path_geo + clear_apertures_dict['0']['geometry'].append(new_el) + + # now that we finished searching for drill holes (this is not very precise because holes in the + # polygon pours may appear as drill too, but .. hey you can't have it all ...) we add + # clear_geometry + try: + for pdf_geo in path_geo: + if isinstance(pdf_geo, MultiPolygon): + for poly in pdf_geo: + new_el = {} + new_el['clear'] = poly + apertures_dict['0']['geometry'].append(deepcopy(new_el)) + else: + new_el = {} + new_el['clear'] = pdf_geo + apertures_dict['0']['geometry'].append(deepcopy(new_el)) + except KeyError: + # in case there is no stroke width yet therefore no aperture + apertures_dict['0'] = {} + apertures_dict['0']['size'] = applied_size + apertures_dict['0']['type'] = 'C' + apertures_dict['0']['geometry'] = [] + for pdf_geo in path_geo: + if isinstance(pdf_geo, MultiPolygon): + for poly in pdf_geo: + new_el = {} + new_el['clear'] = poly + apertures_dict['0']['geometry'].append(deepcopy(new_el)) + else: + new_el = {} + new_el['clear'] = pdf_geo + apertures_dict['0']['geometry'].append(deepcopy(new_el)) + else: + # else, add the geometry as usual + try: + for pdf_geo in path_geo: + if isinstance(pdf_geo, MultiPolygon): + for poly in pdf_geo: + new_el = {} + new_el['solid'] = poly + new_el['follow'] = poly.exterior + apertures_dict['0']['geometry'].append(deepcopy(new_el)) + else: + new_el = {} + new_el['solid'] = pdf_geo + new_el['follow'] = pdf_geo.exterior + apertures_dict['0']['geometry'].append(deepcopy(new_el)) + except KeyError: + # in case there is no stroke width yet therefore no aperture + apertures_dict['0'] = {} + apertures_dict['0']['size'] = applied_size + apertures_dict['0']['type'] = 'C' + apertures_dict['0']['geometry'] = [] + for pdf_geo in path_geo: + if isinstance(pdf_geo, MultiPolygon): + for poly in pdf_geo: + new_el = {} + new_el['solid'] = poly + new_el['follow'] = poly.exterior + apertures_dict['0']['geometry'].append(deepcopy(new_el)) + else: + new_el = {} + new_el['solid'] = pdf_geo + new_el['follow'] = pdf_geo.exterior + apertures_dict['0']['geometry'].append(deepcopy(new_el)) + continue + + # Fill and Stroke the path + match = self.fill_stroke_path_re.search(pline) + if match: + # scale the size here; some PDF printers apply transformation after the size is declared + applied_size = size * scale_geo[0] * self.point_to_unit_factor + path_geo = [] + fill_geo = [] + + if current_subpath == 'lines': + if path['lines']: + # fill + for subp in path['lines']: + geo = copy(subp) + # close the subpath if it was not closed already + if close_subpath is False: + geo.append(geo[0]) + try: + geo_el = Polygon(geo).buffer(0.0000001, resolution=self.step_per_circles) + fill_geo.append(geo_el) + except ValueError: + pass + # stroke + for subp in path['lines']: + geo = copy(subp) + geo = LineString(geo).buffer((float(applied_size) / 2), resolution=self.step_per_circles) + path_geo.append(geo) + # the path was painted therefore initialize it + path['lines'] = [] + else: + # fill + geo = copy(subpath['lines']) + # close the subpath if it was not closed already + if close_subpath is False: + geo.append(start_point) + try: + geo_el = Polygon(geo).buffer(0.0000001, resolution=self.step_per_circles) + fill_geo.append(geo_el) + except ValueError: + pass + # stroke + geo = copy(subpath['lines']) + geo = LineString(geo).buffer((float(applied_size) / 2), resolution=self.step_per_circles) + path_geo.append(geo) + subpath['lines'] = [] + subpath['lines'] = [] + + if current_subpath == 'bezier': + geo = [] + if path['bezier']: + # fill + for subp in path['bezier']: + for b in subp: + geo += self.bezier_to_points(start=b[0], c1=b[1], c2=b[2], stop=b[3]) + # close the subpath if it was not closed already + if close_subpath is False: + geo.append(geo[0]) + try: + geo_el = Polygon(geo).buffer(0.0000001, resolution=self.step_per_circles) + fill_geo.append(geo_el) + except ValueError: + pass + # stroke + for subp in path['bezier']: + geo = [] + for b in subp: + geo += self.bezier_to_points(start=b[0], c1=b[1], c2=b[2], stop=b[3]) + geo = LineString(geo).buffer((float(applied_size) / 2), resolution=self.step_per_circles) + path_geo.append(geo) + # the path was painted therefore initialize it + path['bezier'] = [] + else: + # fill + for b in subpath['bezier']: + geo += self.bezier_to_points(start=b[0], c1=b[1], c2=b[2], stop=b[3]) + if close_subpath is False: + geo.append(start_point) + try: + geo_el = Polygon(geo).buffer(0.0000001, resolution=self.step_per_circles) + fill_geo.append(geo_el) + except ValueError: + pass + # stroke + geo = [] + for b in subpath['bezier']: + geo += self.bezier_to_points(start=b[0], c1=b[1], c2=b[2], stop=b[3]) + geo = LineString(geo).buffer((float(applied_size) / 2), resolution=self.step_per_circles) + path_geo.append(geo) + subpath['bezier'] = [] + + if current_subpath == 'rectangle': + if path['rectangle']: + # fill + for subp in path['rectangle']: + geo = copy(subp) + # # close the subpath if it was not closed already + # if close_subpath is False: + # geo.append(geo[0]) + try: + geo_el = Polygon(geo).buffer(0.0000001, resolution=self.step_per_circles) + fill_geo.append(geo_el) + except ValueError: + pass + # stroke + for subp in path['rectangle']: + geo = copy(subp) + geo = LineString(geo).buffer((float(applied_size) / 2), resolution=self.step_per_circles) + path_geo.append(geo) + # the path was painted therefore initialize it + path['rectangle'] = [] + else: + # fill + geo = copy(subpath['rectangle']) + # # close the subpath if it was not closed already + # if close_subpath is False: + # geo.append(start_point) + try: + geo_el = Polygon(geo).buffer(0.0000001, resolution=self.step_per_circles) + fill_geo.append(geo_el) + except ValueError: + pass + # stroke + geo = copy(subpath['rectangle']) + geo = LineString(geo).buffer((float(applied_size) / 2), resolution=self.step_per_circles) + path_geo.append(geo) + subpath['rectangle'] = [] + + # we finished painting and also closed the path if it was the case + close_subpath = True + + # store the found geometry for stroking the path + found_aperture = None + if apertures_dict: + for apid in apertures_dict: + # if we already have an aperture with the current size (rounded to 5 decimals) + if apertures_dict[apid]['size'] == round(applied_size, 5): + found_aperture = apid + break + + if found_aperture: + for pdf_geo in path_geo: + if isinstance(pdf_geo, MultiPolygon): + for poly in pdf_geo: + new_el = {} + new_el['solid'] = poly + new_el['follow'] = poly.exterior + apertures_dict[copy(found_aperture)]['geometry'].append(deepcopy(new_el)) + else: + new_el = {} + new_el['solid'] = pdf_geo + new_el['follow'] = pdf_geo.exterior + apertures_dict[copy(found_aperture)]['geometry'].append(deepcopy(new_el)) + else: + if str(aperture) in apertures_dict.keys(): + aperture += 1 + apertures_dict[str(aperture)] = {} + apertures_dict[str(aperture)]['size'] = round(applied_size, 5) + apertures_dict[str(aperture)]['type'] = 'C' + apertures_dict[str(aperture)]['geometry'] = [] + for pdf_geo in path_geo: + if isinstance(pdf_geo, MultiPolygon): + for poly in pdf_geo: + new_el = {} + new_el['solid'] = poly + new_el['follow'] = poly.exterior + apertures_dict[str(aperture)]['geometry'].append(deepcopy(new_el)) + else: + new_el = {} + new_el['solid'] = pdf_geo + new_el['follow'] = pdf_geo.exterior + apertures_dict[str(aperture)]['geometry'].append(deepcopy(new_el)) + else: + apertures_dict[str(aperture)] = {} + apertures_dict[str(aperture)]['size'] = round(applied_size, 5) + apertures_dict[str(aperture)]['type'] = 'C' + apertures_dict[str(aperture)]['geometry'] = [] + for pdf_geo in path_geo: + if isinstance(pdf_geo, MultiPolygon): + for poly in pdf_geo: + new_el = {} + new_el['solid'] = poly + new_el['follow'] = poly.exterior + apertures_dict[str(aperture)]['geometry'].append(deepcopy(new_el)) + else: + new_el = {} + new_el['solid'] = pdf_geo + new_el['follow'] = pdf_geo.exterior + apertures_dict[str(aperture)]['geometry'].append(deepcopy(new_el)) + + # ############################################# ## + # store the found geometry for filling the path # + # ############################################# ## + + # in case that a color change to white (transparent) occurred + if flag_clear_geo is True: + try: + for pdf_geo in path_geo: + if isinstance(pdf_geo, MultiPolygon): + for poly in fill_geo: + new_el = {} + new_el['clear'] = poly + apertures_dict['0']['geometry'].append(deepcopy(new_el)) + else: + new_el = {} + new_el['clear'] = pdf_geo + apertures_dict['0']['geometry'].append(deepcopy(new_el)) + except KeyError: + # in case there is no stroke width yet therefore no aperture + apertures_dict['0'] = {} + apertures_dict['0']['size'] = round(applied_size, 5) + apertures_dict['0']['type'] = 'C' + apertures_dict['0']['geometry'] = [] + for pdf_geo in fill_geo: + if isinstance(pdf_geo, MultiPolygon): + for poly in pdf_geo: + new_el = {} + new_el['clear'] = poly + apertures_dict['0']['geometry'].append(deepcopy(new_el)) + else: + new_el = {} + new_el['clear'] = pdf_geo + apertures_dict['0']['geometry'].append(deepcopy(new_el)) + else: + try: + for pdf_geo in path_geo: + if isinstance(pdf_geo, MultiPolygon): + for poly in fill_geo: + new_el = {} + new_el['solid'] = poly + new_el['follow'] = poly.exterior + apertures_dict['0']['geometry'].append(deepcopy(new_el)) + else: + new_el = {} + new_el['solid'] = pdf_geo + new_el['follow'] = pdf_geo.exterior + apertures_dict['0']['geometry'].append(deepcopy(new_el)) + except KeyError: + # in case there is no stroke width yet therefore no aperture + apertures_dict['0'] = {} + apertures_dict['0']['size'] = round(applied_size, 5) + apertures_dict['0']['type'] = 'C' + apertures_dict['0']['geometry'] = [] + for pdf_geo in fill_geo: + if isinstance(pdf_geo, MultiPolygon): + for poly in pdf_geo: + new_el = {} + new_el['solid'] = poly + new_el['follow'] = poly.exterior + apertures_dict['0']['geometry'].append(deepcopy(new_el)) + else: + new_el = {} + new_el['solid'] = pdf_geo + new_el['follow'] = pdf_geo.exterior + apertures_dict['0']['geometry'].append(deepcopy(new_el)) + + continue + + # tidy up. copy the current aperture dict to the object dict but only if it is not empty + if apertures_dict: + object_dict[layer_nr] = deepcopy(apertures_dict) + + if clear_apertures_dict['0']['geometry']: + object_dict[0] = deepcopy(clear_apertures_dict) + + # delete keys (layers) with empty values + empty_layers = [] + for layer in object_dict: + if not object_dict[layer]: + empty_layers.append(layer) + for x in empty_layers: + if x in object_dict: + object_dict.pop(x) + + if self.app.abort_flag: + # graceful abort requested by the user + raise grace + + return object_dict + + def bezier_to_points(self, start, c1, c2, stop): + """ + # Equation Bezier, page 184 PDF 1.4 reference + # https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/pdf_reference_archives/PDFReference.pdf + # Given the coordinates of the four points, the curve is generated by varying the parameter t from 0.0 to 1.0 + # in the following equation: + # R(t) = P0*(1 - t) ** 3 + P1*3*t*(1 - t) ** 2 + P2 * 3*(1 - t) * t ** 2 + P3*t ** 3 + # When t = 0.0, the value from the function coincides with the current point P0; when t = 1.0, R(t) coincides + # with the final point P3. Intermediate values of t generate intermediate points along the curve. + # The curve does not, in general, pass through the two control points P1 and P2 + + :return: A list of point coordinates tuples (x, y) + """ + + # here we store the geometric points + points = [] + + nr_points = np.arange(0.0, 1.0, (1 / self.step_per_circles)) + for t in nr_points: + term_p0 = (1 - t) ** 3 + term_p1 = 3 * t * (1 - t) ** 2 + term_p2 = 3 * (1 - t) * t ** 2 + term_p3 = t ** 3 + + x = start[0] * term_p0 + c1[0] * term_p1 + c2[0] * term_p2 + stop[0] * term_p3 + y = start[1] * term_p0 + c1[1] * term_p1 + c2[1] * term_p2 + stop[1] * term_p3 + points.append([x, y]) + + return points + + # def bezier_to_circle(self, path): + # lst = [] + # for el in range(len(path)): + # if type(path) is list: + # for coord in path[el]: + # lst.append(coord) + # else: + # lst.append(el) + # + # if lst: + # minx = min(lst, key=lambda t: t[0])[0] + # miny = min(lst, key=lambda t: t[1])[1] + # maxx = max(lst, key=lambda t: t[0])[0] + # maxy = max(lst, key=lambda t: t[1])[1] + # center = (maxx-minx, maxy-miny) + # radius = (maxx-minx) / 2 + # return [center, radius] + # + # def circle_to_points(self, center, radius): + # geo = Point(center).buffer(radius, resolution=self.step_per_circles) + # return LineString(list(geo.exterior.coords)) + # diff --git a/flatcamTools/ToolPDF.py b/flatcamTools/ToolPDF.py index a21e0f7a..1530525a 100644 --- a/flatcamTools/ToolPDF.py +++ b/flatcamTools/ToolPDF.py @@ -9,12 +9,11 @@ from PyQt5 import QtWidgets, QtCore from FlatCAMTool import FlatCAMTool from FlatCAMCommon import GracefulException as grace - -from shapely.geometry import Point, Polygon, LineString, MultiPolygon +from flatcamParsers.ParsePDF import PdfParser +from shapely.geometry import Point, MultiPolygon from shapely.ops import unary_union -from copy import copy, deepcopy -import numpy as np +from copy import deepcopy import zlib import re @@ -45,73 +44,9 @@ class ToolPDF(FlatCAMTool): FlatCAMTool.__init__(self, app) self.app = app self.decimals = self.app.decimals - self.step_per_circles = self.app.defaults["gerber_circle_steps"] self.stream_re = re.compile(b'.*?FlateDecode.*?stream(.*?)endstream', re.S) - # detect stroke color change; it means a new object to be created - self.stroke_color_re = re.compile(r'^\s*(\d+\.?\d*) (\d+\.?\d*) (\d+\.?\d*)\s*RG$') - - # detect fill color change; we check here for white color (transparent geometry); - # if detected we create an Excellon from it - self.fill_color_re = re.compile(r'^\s*(\d+\.?\d*) (\d+\.?\d*) (\d+\.?\d*)\s*rg$') - - # detect 're' command - self.rect_re = re.compile(r'^(-?\d+\.?\d*)\s(-?\d+\.?\d*)\s(-?\d+\.?\d*)\s(-?\d+\.?\d*)\s*re$') - # detect 'm' command - self.start_subpath_re = re.compile(r'^(-?\d+\.?\d*)\s(-?\d+\.?\d*)\sm$') - # detect 'l' command - self.draw_line_re = re.compile(r'^(-?\d+\.?\d*)\s(-?\d+\.?\d*)\sl') - # detect 'c' command - self.draw_arc_3pt_re = re.compile(r'^(-?\d+\.?\d*)\s(-?\d+\.?\d*)\s(-?\d+\.?\d*)\s(-?\d+\.?\d*)\s(-?\d+\.?\d*)' - r'\s(-?\d+\.?\d*)\s*c$') - # detect 'v' command - self.draw_arc_2pt_c1start_re = re.compile(r'^(-?\d+\.?\d*)\s(-?\d+\.?\d*)\s(-?\d+\.?\d*)\s(-?\d+\.?\d*)\s*v$') - # detect 'y' command - self.draw_arc_2pt_c2stop_re = re.compile(r'^(-?\d+\.?\d*)\s(-?\d+\.?\d*)\s(-?\d+\.?\d*)\s(-?\d+\.?\d*)\s*y$') - # detect 'h' command - self.end_subpath_re = re.compile(r'^h$') - - # detect 'w' command - self.strokewidth_re = re.compile(r'^(\d+\.?\d*)\s*w$') - # detect 'S' command - self.stroke_path__re = re.compile(r'^S\s?[Q]?$') - # detect 's' command - self.close_stroke_path__re = re.compile(r'^s$') - # detect 'f' or 'f*' command - self.fill_path_re = re.compile(r'^[f|F][*]?$') - # detect 'B' or 'B*' command - self.fill_stroke_path_re = re.compile(r'^B[*]?$') - # detect 'b' or 'b*' command - self.close_fill_stroke_path_re = re.compile(r'^b[*]?$') - # detect 'n' - self.no_op_re = re.compile(r'^n$') - - # detect offset transformation. Pattern: (1) (0) (0) (1) (x) (y) - # self.offset_re = re.compile(r'^1\.?0*\s0?\.?0*\s0?\.?0*\s1\.?0*\s(-?\d+\.?\d*)\s(-?\d+\.?\d*)\s*cm$') - # detect scale transformation. Pattern: (factor_x) (0) (0) (factor_y) (0) (0) - # self.scale_re = re.compile(r'^q? (-?\d+\.?\d*) 0\.?0* 0\.?0* (-?\d+\.?\d*) 0\.?0* 0\.?0*\s+cm$') - # detect combined transformation. Should always be the last - self.combined_transform_re = re.compile(r'^(q)?\s*(-?\d+\.?\d*) (-?\d+\.?\d*) (-?\d+\.?\d*) (-?\d+\.?\d*) ' - r'(-?\d+\.?\d*) (-?\d+\.?\d*)\s+cm$') - - # detect clipping path - self.clip_path_re = re.compile(r'^W[*]? n?$') - - # detect save graphic state in graphic stack - self.save_gs_re = re.compile(r'^q.*?$') - - # detect restore graphic state from graphic stack - self.restore_gs_re = re.compile(r'^.*Q.*$') - - # graphic stack where we save parameters like transformation, line_width - self.gs = {} - # each element is a list composed of sublist elements - # (each sublist has 2 lists each having 2 elements: first is offset like: - # offset_geo = [off_x, off_y], second element is scale list with 2 elements, like: scale_geo = [sc_x, sc_yy]) - self.gs['transform'] = [] - self.gs['line_width'] = [] # each element is a float - self.pdf_decompressed = {} # key = file name and extension @@ -125,8 +60,7 @@ class ToolPDF(FlatCAMTool): # when empty we start the layer rendering self.parsing_promises = [] - # conversion factor to INCH - self.point_to_unit_factor = 0.01388888888 + self.parser = PdfParser(app=self.app) def run(self, toggle=True): self.app.defaults.report_usage("ToolPDF()") @@ -174,20 +108,13 @@ class ToolPDF(FlatCAMTool): def open_pdf(self, filename): short_name = filename.split('/')[-1].split('\\')[-1] self.parsing_promises.append(short_name) + self.pdf_parsed[short_name] = {} self.pdf_parsed[short_name]['pdf'] = {} self.pdf_parsed[short_name]['filename'] = filename self.pdf_decompressed[short_name] = '' - # the UNITS in PDF files are points and here we set the factor to convert them to real units (either MM or INCH) - if self.app.defaults['units'].upper() == 'MM': - # 1 inch = 72 points => 1 point = 1 / 72 = 0.01388888888 inch = 0.01388888888 inch * 25.4 = 0.35277777778 mm - self.point_to_unit_factor = 25.4 / 72 - else: - # 1 inch = 72 points => 1 point = 1 / 72 = 0.01388888888 inch - self.point_to_unit_factor = 1 / 72 - if self.app.abort_flag: # graceful abort requested by the user raise grace @@ -208,9 +135,11 @@ class ToolPDF(FlatCAMTool): try: self.pdf_decompressed[short_name] += (zlib.decompress(s).decode('UTF-8') + '\r\n') except Exception as e: + self.app.inform.emit('[ERROR_NOTCL] %s: %s\n%s' % (_("Failed to open"), str(filename), str(e))) log.debug("ToolPDF.open_pdf().obj_init() --> %s" % str(e)) + return - self.pdf_parsed[short_name]['pdf'] = self.parse_pdf(pdf_content=self.pdf_decompressed[short_name]) + self.pdf_parsed[short_name]['pdf'] = self.parser.parse_pdf(pdf_content=self.pdf_decompressed[short_name]) # we used it, now we delete it self.pdf_decompressed[short_name] = '' @@ -271,27 +200,24 @@ class ToolPDF(FlatCAMTool): for tool in exc_obj.tools: if exc_obj.tools[tool]['solid_geometry']: return - app_obj.inform.emit('[ERROR_NOTCL] %s: %s' % - (_("No geometry found in file"), outname)) + app_obj.inform.emit('[ERROR_NOTCL] %s: %s' % (_("No geometry found in file"), outname)) return "fail" with self.app.proc_container.new(_("Rendering PDF layer #%d ...") % int(layer_nr)): ret_val = self.app.new_object("excellon", outname, obj_init, autoselected=False) if ret_val == 'fail': - self.app.inform.emit('[ERROR_NOTCL] %s' % - _('Open PDF file failed.')) + self.app.inform.emit('[ERROR_NOTCL] %s' % _('Open PDF file failed.')) return # Register recent file self.app.file_opened.emit("excellon", filename) # GUI feedback - self.app.inform.emit('[success] %s: %s' % - (_("Rendered"), outname)) + self.app.inform.emit('[success] %s: %s' % (_("Rendered"), outname)) 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): + def obj_init(grb_obj, app_obj): grb_obj.apertures = ap_dict @@ -354,8 +280,7 @@ class ToolPDF(FlatCAMTool): ret = self.app.new_object('gerber', outname, obj_init, autoselected=False) if ret == 'fail': - self.app.inform.emit('[ERROR_NOTCL] %s' % - _('Open PDF file failed.')) + self.app.inform.emit('[ERROR_NOTCL] %s' % _('Open PDF file failed.')) return # Register recent file self.app.file_opened.emit('gerber', filename) @@ -398,6 +323,7 @@ class ToolPDF(FlatCAMTool): try: if not self.parsing_promises: self.check_thread.stop() + log.debug("PDF --> start rendering") # parsing finished start the layer rendering if self.pdf_parsed: obj_to_delete = [] @@ -415,6 +341,7 @@ class ToolPDF(FlatCAMTool): raise grace ap_dict = pdf_content[k] + print(k, ap_dict) if ap_dict: layer_nr = k if k == 0: @@ -432,980 +359,3 @@ class ToolPDF(FlatCAMTool): log.debug("ToolPDF --> Periodic check finished.") except Exception: traceback.print_exc() - - def parse_pdf(self, pdf_content): - path = {} - path['lines'] = [] # it's a list of lines subpaths - path['bezier'] = [] # it's a list of bezier arcs subpaths - path['rectangle'] = [] # it's a list of rectangle subpaths - - subpath = {} - subpath['lines'] = [] # it's a list of points - subpath['bezier'] = [] # it's a list of sublists each like this [start, c1, c2, stop] - subpath['rectangle'] = [] # it's a list of sublists of points - - # store the start point (when 'm' command is encountered) - current_subpath = None - - # set True when 'h' command is encountered (close subpath) - close_subpath = False - - start_point = None - current_point = None - size = 0 - - # initial values for the transformations, in case they are not encountered in the PDF file - offset_geo = [0, 0] - scale_geo = [1, 1] - - # store the objects to be transformed into Gerbers - object_dict = {} - # will serve as key in the object_dict - layer_nr = 1 - # create first object - object_dict[layer_nr] = {} - - # store the apertures here - apertures_dict = {} - - # initial aperture - aperture = 10 - - # store the apertures with clear geometry here - # we are interested only in the circular geometry (drill holes) therefore we target only Bezier subpaths - clear_apertures_dict = {} - # everything will be stored in the '0' aperture since we are dealing with clear polygons not strokes - clear_apertures_dict['0'] = {} - clear_apertures_dict['0']['size'] = 0.0 - clear_apertures_dict['0']['type'] = 'C' - clear_apertures_dict['0']['geometry'] = [] - - # on stroke color change we create a new apertures dictionary and store the old one in a storage from where - # it will be transformed into Gerber object - old_color = [None, None, None] - - # signal that we have clear geometry and the geometry will be added to a special layer_nr = 0 - flag_clear_geo = False - - line_nr = 0 - lines = pdf_content.splitlines() - - for pline in lines: - if self.app.abort_flag: - # graceful abort requested by the user - raise grace - - line_nr += 1 - log.debug("line %d: %s" % (line_nr, pline)) - - # COLOR DETECTION / OBJECT DETECTION - match = self.stroke_color_re.search(pline) - if match: - color = [float(match.group(1)), float(match.group(2)), float(match.group(3))] - log.debug( - "ToolPDF.parse_pdf() --> STROKE Color change on line: %s --> RED=%f GREEN=%f BLUE=%f" % - (line_nr, color[0], color[1], color[2])) - - if color[0] == old_color[0] and color[1] == old_color[1] and color[2] == old_color[2]: - # same color, do nothing - continue - else: - if apertures_dict: - object_dict[layer_nr] = deepcopy(apertures_dict) - apertures_dict.clear() - layer_nr += 1 - - object_dict[layer_nr] = {} - old_color = copy(color) - # we make sure that the following geometry is added to the right storage - flag_clear_geo = False - continue - - # CLEAR GEOMETRY detection - match = self.fill_color_re.search(pline) - if match: - fill_color = [float(match.group(1)), float(match.group(2)), float(match.group(3))] - log.debug( - "ToolPDF.parse_pdf() --> FILL Color change on line: %s --> RED=%f GREEN=%f BLUE=%f" % - (line_nr, fill_color[0], fill_color[1], fill_color[2])) - # if the color is white we are seeing 'clear_geometry' that can't be seen. It may be that those - # geometries are actually holes from which we can make an Excellon file - if fill_color[0] == 1 and fill_color[1] == 1 and fill_color[2] == 1: - flag_clear_geo = True - else: - flag_clear_geo = False - continue - - # TRANSFORMATIONS DETECTION # - - # Detect combined transformation. - match = self.combined_transform_re.search(pline) - if match: - # detect save graphic stack event - # sometimes they combine save_to_graphics_stack with the transformation on the same line - if match.group(1) == 'q': - log.debug( - "ToolPDF.parse_pdf() --> Save to GS found on line: %s --> offset=[%f, %f] ||| scale=[%f, %f]" % - (line_nr, offset_geo[0], offset_geo[1], scale_geo[0], scale_geo[1])) - - self.gs['transform'].append(deepcopy([offset_geo, scale_geo])) - self.gs['line_width'].append(deepcopy(size)) - - # transformation = TRANSLATION (OFFSET) - if (float(match.group(3)) == 0 and float(match.group(4)) == 0) and \ - (float(match.group(6)) != 0 or float(match.group(7)) != 0): - log.debug( - "ToolPDF.parse_pdf() --> OFFSET transformation found on line: %s --> %s" % (line_nr, pline)) - - offset_geo[0] += float(match.group(6)) - offset_geo[1] += float(match.group(7)) - # log.debug("Offset= [%f, %f]" % (offset_geo[0], offset_geo[1])) - - # transformation = SCALING - if float(match.group(2)) != 1 and float(match.group(5)) != 1: - log.debug( - "ToolPDF.parse_pdf() --> SCALE transformation found on line: %s --> %s" % (line_nr, pline)) - - scale_geo[0] *= float(match.group(2)) - scale_geo[1] *= float(match.group(5)) - # log.debug("Scale= [%f, %f]" % (scale_geo[0], scale_geo[1])) - - continue - - # detect save graphic stack event - match = self.save_gs_re.search(pline) - if match: - log.debug( - "ToolPDF.parse_pdf() --> Save to GS found on line: %s --> offset=[%f, %f] ||| scale=[%f, %f]" % - (line_nr, offset_geo[0], offset_geo[1], scale_geo[0], scale_geo[1])) - self.gs['transform'].append(deepcopy([offset_geo, scale_geo])) - self.gs['line_width'].append(deepcopy(size)) - - # detect restore from graphic stack event - match = self.restore_gs_re.search(pline) - if match: - try: - restored_transform = self.gs['transform'].pop(-1) - offset_geo = restored_transform[0] - scale_geo = restored_transform[1] - except IndexError: - # nothing to remove - log.debug("ToolPDF.parse_pdf() --> Nothing to restore") - pass - - try: - size = self.gs['line_width'].pop(-1) - except IndexError: - log.debug("ToolPDF.parse_pdf() --> Nothing to restore") - # nothing to remove - pass - - log.debug( - "ToolPDF.parse_pdf() --> Restore from GS found on line: %s --> " - "restored_offset=[%f, %f] ||| restored_scale=[%f, %f]" % - (line_nr, offset_geo[0], offset_geo[1], scale_geo[0], scale_geo[1])) - # log.debug("Restored Offset= [%f, %f]" % (offset_geo[0], offset_geo[1])) - # log.debug("Restored Scale= [%f, %f]" % (scale_geo[0], scale_geo[1])) - - # PATH CONSTRUCTION # - - # Start SUBPATH - match = self.start_subpath_re.search(pline) - if match: - # we just started a subpath so we mark it as not closed yet - close_subpath = False - - # init subpaths - subpath['lines'] = [] - subpath['bezier'] = [] - subpath['rectangle'] = [] - - # detect start point to move to - x = float(match.group(1)) + offset_geo[0] - y = float(match.group(2)) + offset_geo[1] - pt = (x * self.point_to_unit_factor * scale_geo[0], - y * self.point_to_unit_factor * scale_geo[1]) - start_point = pt - - # add the start point to subpaths - subpath['lines'].append(start_point) - # subpath['bezier'].append(start_point) - # subpath['rectangle'].append(start_point) - current_point = start_point - continue - - # Draw Line - match = self.draw_line_re.search(pline) - if match: - current_subpath = 'lines' - x = float(match.group(1)) + offset_geo[0] - y = float(match.group(2)) + offset_geo[1] - pt = (x * self.point_to_unit_factor * scale_geo[0], - y * self.point_to_unit_factor * scale_geo[1]) - subpath['lines'].append(pt) - current_point = pt - continue - - # Draw Bezier 'c' - match = self.draw_arc_3pt_re.search(pline) - if match: - current_subpath = 'bezier' - start = current_point - x = float(match.group(1)) + offset_geo[0] - y = float(match.group(2)) + offset_geo[1] - c1 = (x * self.point_to_unit_factor * scale_geo[0], - y * self.point_to_unit_factor * scale_geo[1]) - x = float(match.group(3)) + offset_geo[0] - y = float(match.group(4)) + offset_geo[1] - c2 = (x * self.point_to_unit_factor * scale_geo[0], - y * self.point_to_unit_factor * scale_geo[1]) - x = float(match.group(5)) + offset_geo[0] - y = float(match.group(6)) + offset_geo[1] - stop = (x * self.point_to_unit_factor * scale_geo[0], - y * self.point_to_unit_factor * scale_geo[1]) - - subpath['bezier'].append([start, c1, c2, stop]) - current_point = stop - continue - - # Draw Bezier 'v' - match = self.draw_arc_2pt_c1start_re.search(pline) - if match: - current_subpath = 'bezier' - start = current_point - x = float(match.group(1)) + offset_geo[0] - y = float(match.group(2)) + offset_geo[1] - c2 = (x * self.point_to_unit_factor * scale_geo[0], - y * self.point_to_unit_factor * scale_geo[1]) - x = float(match.group(3)) + offset_geo[0] - y = float(match.group(4)) + offset_geo[1] - stop = (x * self.point_to_unit_factor * scale_geo[0], - y * self.point_to_unit_factor * scale_geo[1]) - - subpath['bezier'].append([start, start, c2, stop]) - current_point = stop - continue - - # Draw Bezier 'y' - match = self.draw_arc_2pt_c2stop_re.search(pline) - if match: - start = current_point - x = float(match.group(1)) + offset_geo[0] - y = float(match.group(2)) + offset_geo[1] - c1 = (x * self.point_to_unit_factor * scale_geo[0], - y * self.point_to_unit_factor * scale_geo[1]) - x = float(match.group(3)) + offset_geo[0] - y = float(match.group(4)) + offset_geo[1] - stop = (x * self.point_to_unit_factor * scale_geo[0], - y * self.point_to_unit_factor * scale_geo[1]) - - subpath['bezier'].append([start, c1, stop, stop]) - current_point = stop - continue - - # Draw Rectangle 're' - match = self.rect_re.search(pline) - if match: - current_subpath = 'rectangle' - x = (float(match.group(1)) + offset_geo[0]) * self.point_to_unit_factor * scale_geo[0] - y = (float(match.group(2)) + offset_geo[1]) * self.point_to_unit_factor * scale_geo[1] - width = (float(match.group(3)) + offset_geo[0]) * self.point_to_unit_factor * scale_geo[0] - height = (float(match.group(4)) + offset_geo[1]) * self.point_to_unit_factor * scale_geo[1] - pt1 = (x, y) - pt2 = (x+width, y) - pt3 = (x+width, y+height) - pt4 = (x, y+height) - subpath['rectangle'] += [pt1, pt2, pt3, pt4, pt1] - current_point = pt1 - continue - - # Detect clipping path set - # ignore this and delete the current subpath - match = self.clip_path_re.search(pline) - if match: - subpath['lines'] = [] - subpath['bezier'] = [] - subpath['rectangle'] = [] - # it means that we've already added the subpath to path and we need to delete it - # clipping path is usually either rectangle or lines - if close_subpath is True: - close_subpath = False - if current_subpath == 'lines': - path['lines'].pop(-1) - if current_subpath == 'rectangle': - path['rectangle'].pop(-1) - continue - - # Close SUBPATH - match = self.end_subpath_re.search(pline) - if match: - close_subpath = True - if current_subpath == 'lines': - subpath['lines'].append(start_point) - # since we are closing the subpath add it to the path, a path may have chained subpaths - path['lines'].append(copy(subpath['lines'])) - subpath['lines'] = [] - elif current_subpath == 'bezier': - # subpath['bezier'].append(start_point) - # since we are closing the subpath add it to the path, a path may have chained subpaths - path['bezier'].append(copy(subpath['bezier'])) - subpath['bezier'] = [] - elif current_subpath == 'rectangle': - # subpath['rectangle'].append(start_point) - # since we are closing the subpath add it to the path, a path may have chained subpaths - path['rectangle'].append(copy(subpath['rectangle'])) - subpath['rectangle'] = [] - continue - - # PATH PAINTING # - - # Detect Stroke width / aperture - match = self.strokewidth_re.search(pline) - if match: - size = float(match.group(1)) - continue - - # Detect No_Op command, ignore the current subpath - match = self.no_op_re.search(pline) - if match: - subpath['lines'] = [] - subpath['bezier'] = [] - subpath['rectangle'] = [] - continue - - # Stroke the path - match = self.stroke_path__re.search(pline) - if match: - # scale the size here; some PDF printers apply transformation after the size is declared - applied_size = size * scale_geo[0] * self.point_to_unit_factor - path_geo = [] - if current_subpath == 'lines': - if path['lines']: - for subp in path['lines']: - geo = copy(subp) - try: - geo = LineString(geo).buffer((float(applied_size) / 2), - resolution=self.step_per_circles) - path_geo.append(geo) - except ValueError: - pass - # the path was painted therefore initialize it - path['lines'] = [] - else: - geo = copy(subpath['lines']) - try: - geo = LineString(geo).buffer((float(applied_size) / 2), resolution=self.step_per_circles) - path_geo.append(geo) - except ValueError: - pass - subpath['lines'] = [] - - if current_subpath == 'bezier': - if path['bezier']: - for subp in path['bezier']: - geo = [] - for b in subp: - geo += self.bezier_to_points(start=b[0], c1=b[1], c2=b[2], stop=b[3]) - try: - geo = LineString(geo).buffer((float(applied_size) / 2), - resolution=self.step_per_circles) - path_geo.append(geo) - except ValueError: - pass - # the path was painted therefore initialize it - path['bezier'] = [] - else: - geo = [] - for b in subpath['bezier']: - geo += self.bezier_to_points(start=b[0], c1=b[1], c2=b[2], stop=b[3]) - try: - geo = LineString(geo).buffer((float(applied_size) / 2), resolution=self.step_per_circles) - path_geo.append(geo) - except ValueError: - pass - subpath['bezier'] = [] - - if current_subpath == 'rectangle': - if path['rectangle']: - for subp in path['rectangle']: - geo = copy(subp) - try: - geo = LineString(geo).buffer((float(applied_size) / 2), - resolution=self.step_per_circles) - path_geo.append(geo) - except ValueError: - pass - # the path was painted therefore initialize it - path['rectangle'] = [] - else: - geo = copy(subpath['rectangle']) - try: - geo = LineString(geo).buffer((float(applied_size) / 2), resolution=self.step_per_circles) - path_geo.append(geo) - except ValueError: - pass - subpath['rectangle'] = [] - - # store the found geometry - found_aperture = None - if apertures_dict: - for apid in apertures_dict: - # if we already have an aperture with the current size (rounded to 5 decimals) - if apertures_dict[apid]['size'] == round(applied_size, 5): - found_aperture = apid - break - - if found_aperture: - for pdf_geo in path_geo: - if isinstance(pdf_geo, MultiPolygon): - for poly in pdf_geo: - new_el = {} - new_el['solid'] = poly - new_el['follow'] = poly.exterior - apertures_dict[copy(found_aperture)]['geometry'].append(deepcopy(new_el)) - else: - new_el = {} - new_el['solid'] = pdf_geo - new_el['follow'] = pdf_geo.exterior - apertures_dict[copy(found_aperture)]['geometry'].append(deepcopy(new_el)) - else: - if str(aperture) in apertures_dict.keys(): - aperture += 1 - apertures_dict[str(aperture)] = {} - apertures_dict[str(aperture)]['size'] = round(applied_size, 5) - apertures_dict[str(aperture)]['type'] = 'C' - apertures_dict[str(aperture)]['geometry'] = [] - for pdf_geo in path_geo: - if isinstance(pdf_geo, MultiPolygon): - for poly in pdf_geo: - new_el = {} - new_el['solid'] = poly - new_el['follow'] = poly.exterior - apertures_dict[str(aperture)]['geometry'].append(deepcopy(new_el)) - else: - new_el = {} - new_el['solid'] = pdf_geo - new_el['follow'] = pdf_geo.exterior - apertures_dict[str(aperture)]['geometry'].append(deepcopy(new_el)) - else: - apertures_dict[str(aperture)] = {} - apertures_dict[str(aperture)]['size'] = round(applied_size, 5) - apertures_dict[str(aperture)]['type'] = 'C' - apertures_dict[str(aperture)]['geometry'] = [] - for pdf_geo in path_geo: - if isinstance(pdf_geo, MultiPolygon): - for poly in pdf_geo: - new_el = {} - new_el['solid'] = poly - new_el['follow'] = poly.exterior - apertures_dict[str(aperture)]['geometry'].append(deepcopy(new_el)) - else: - new_el = {} - new_el['solid'] = pdf_geo - new_el['follow'] = pdf_geo.exterior - apertures_dict[str(aperture)]['geometry'].append(deepcopy(new_el)) - - continue - - # Fill the path - match = self.fill_path_re.search(pline) - if match: - # scale the size here; some PDF printers apply transformation after the size is declared - applied_size = size * scale_geo[0] * self.point_to_unit_factor - path_geo = [] - - if current_subpath == 'lines': - if path['lines']: - for subp in path['lines']: - geo = copy(subp) - # close the subpath if it was not closed already - if close_subpath is False: - geo.append(geo[0]) - try: - geo_el = Polygon(geo).buffer(0.0000001, resolution=self.step_per_circles) - path_geo.append(geo_el) - except ValueError: - pass - # the path was painted therefore initialize it - path['lines'] = [] - else: - geo = copy(subpath['lines']) - # close the subpath if it was not closed already - if close_subpath is False: - geo.append(start_point) - try: - geo_el = Polygon(geo).buffer(0.0000001, resolution=self.step_per_circles) - path_geo.append(geo_el) - except ValueError: - pass - subpath['lines'] = [] - - if current_subpath == 'bezier': - geo = [] - if path['bezier']: - for subp in path['bezier']: - for b in subp: - geo += self.bezier_to_points(start=b[0], c1=b[1], c2=b[2], stop=b[3]) - # close the subpath if it was not closed already - if close_subpath is False: - geo.append(geo[0]) - try: - geo_el = Polygon(geo).buffer(0.0000001, resolution=self.step_per_circles) - path_geo.append(geo_el) - except ValueError: - pass - # the path was painted therefore initialize it - path['bezier'] = [] - else: - for b in subpath['bezier']: - geo += self.bezier_to_points(start=b[0], c1=b[1], c2=b[2], stop=b[3]) - if close_subpath is False: - geo.append(start_point) - try: - geo_el = Polygon(geo).buffer(0.0000001, resolution=self.step_per_circles) - path_geo.append(geo_el) - except ValueError: - pass - subpath['bezier'] = [] - - if current_subpath == 'rectangle': - if path['rectangle']: - for subp in path['rectangle']: - geo = copy(subp) - # # close the subpath if it was not closed already - # if close_subpath is False and start_point is not None: - # geo.append(start_point) - try: - geo_el = Polygon(geo).buffer(0.0000001, resolution=self.step_per_circles) - path_geo.append(geo_el) - except ValueError: - pass - # the path was painted therefore initialize it - path['rectangle'] = [] - else: - geo = copy(subpath['rectangle']) - # # close the subpath if it was not closed already - # if close_subpath is False and start_point is not None: - # geo.append(start_point) - try: - geo_el = Polygon(geo).buffer(0.0000001, resolution=self.step_per_circles) - path_geo.append(geo_el) - except ValueError: - pass - subpath['rectangle'] = [] - - # we finished painting and also closed the path if it was the case - close_subpath = True - - # in case that a color change to white (transparent) occurred - if flag_clear_geo is True: - # if there was a fill color change we look for circular geometries from which we can make - # drill holes for the Excellon file - if current_subpath == 'bezier': - # if there are geometries in the list - if path_geo: - try: - for g in path_geo: - new_el = {} - new_el['clear'] = g - clear_apertures_dict['0']['geometry'].append(new_el) - except TypeError: - new_el = {} - new_el['clear'] = path_geo - clear_apertures_dict['0']['geometry'].append(new_el) - - # now that we finished searching for drill holes (this is not very precise because holes in the - # polygon pours may appear as drill too, but .. hey you can't have it all ...) we add - # clear_geometry - try: - for pdf_geo in path_geo: - if isinstance(pdf_geo, MultiPolygon): - for poly in pdf_geo: - new_el = {} - new_el['clear'] = poly - apertures_dict['0']['geometry'].append(deepcopy(new_el)) - else: - new_el = {} - new_el['clear'] = pdf_geo - apertures_dict['0']['geometry'].append(deepcopy(new_el)) - except KeyError: - # in case there is no stroke width yet therefore no aperture - apertures_dict['0'] = {} - apertures_dict['0']['size'] = applied_size - apertures_dict['0']['type'] = 'C' - apertures_dict['0']['geometry'] = [] - for pdf_geo in path_geo: - if isinstance(pdf_geo, MultiPolygon): - for poly in pdf_geo: - new_el = {} - new_el['clear'] = poly - apertures_dict['0']['geometry'].append(deepcopy(new_el)) - else: - new_el = {} - new_el['clear'] = pdf_geo - apertures_dict['0']['geometry'].append(deepcopy(new_el)) - else: - # else, add the geometry as usual - try: - for pdf_geo in path_geo: - if isinstance(pdf_geo, MultiPolygon): - for poly in pdf_geo: - new_el = {} - new_el['solid'] = poly - new_el['follow'] = poly.exterior - apertures_dict['0']['geometry'].append(deepcopy(new_el)) - else: - new_el = {} - new_el['solid'] = pdf_geo - new_el['follow'] = pdf_geo.exterior - apertures_dict['0']['geometry'].append(deepcopy(new_el)) - except KeyError: - # in case there is no stroke width yet therefore no aperture - apertures_dict['0'] = {} - apertures_dict['0']['size'] = applied_size - apertures_dict['0']['type'] = 'C' - apertures_dict['0']['geometry'] = [] - for pdf_geo in path_geo: - if isinstance(pdf_geo, MultiPolygon): - for poly in pdf_geo: - new_el = {} - new_el['solid'] = poly - new_el['follow'] = poly.exterior - apertures_dict['0']['geometry'].append(deepcopy(new_el)) - else: - new_el = {} - new_el['solid'] = pdf_geo - new_el['follow'] = pdf_geo.exterior - apertures_dict['0']['geometry'].append(deepcopy(new_el)) - continue - - # Fill and Stroke the path - match = self.fill_stroke_path_re.search(pline) - if match: - # scale the size here; some PDF printers apply transformation after the size is declared - applied_size = size * scale_geo[0] * self.point_to_unit_factor - path_geo = [] - fill_geo = [] - - if current_subpath == 'lines': - if path['lines']: - # fill - for subp in path['lines']: - geo = copy(subp) - # close the subpath if it was not closed already - if close_subpath is False: - geo.append(geo[0]) - try: - geo_el = Polygon(geo).buffer(0.0000001, resolution=self.step_per_circles) - fill_geo.append(geo_el) - except ValueError: - pass - # stroke - for subp in path['lines']: - geo = copy(subp) - geo = LineString(geo).buffer((float(applied_size) / 2), resolution=self.step_per_circles) - path_geo.append(geo) - # the path was painted therefore initialize it - path['lines'] = [] - else: - # fill - geo = copy(subpath['lines']) - # close the subpath if it was not closed already - if close_subpath is False: - geo.append(start_point) - try: - geo_el = Polygon(geo).buffer(0.0000001, resolution=self.step_per_circles) - fill_geo.append(geo_el) - except ValueError: - pass - # stroke - geo = copy(subpath['lines']) - geo = LineString(geo).buffer((float(applied_size) / 2), resolution=self.step_per_circles) - path_geo.append(geo) - subpath['lines'] = [] - subpath['lines'] = [] - - if current_subpath == 'bezier': - geo = [] - if path['bezier']: - # fill - for subp in path['bezier']: - for b in subp: - geo += self.bezier_to_points(start=b[0], c1=b[1], c2=b[2], stop=b[3]) - # close the subpath if it was not closed already - if close_subpath is False: - geo.append(geo[0]) - try: - geo_el = Polygon(geo).buffer(0.0000001, resolution=self.step_per_circles) - fill_geo.append(geo_el) - except ValueError: - pass - # stroke - for subp in path['bezier']: - geo = [] - for b in subp: - geo += self.bezier_to_points(start=b[0], c1=b[1], c2=b[2], stop=b[3]) - geo = LineString(geo).buffer((float(applied_size) / 2), resolution=self.step_per_circles) - path_geo.append(geo) - # the path was painted therefore initialize it - path['bezier'] = [] - else: - # fill - for b in subpath['bezier']: - geo += self.bezier_to_points(start=b[0], c1=b[1], c2=b[2], stop=b[3]) - if close_subpath is False: - geo.append(start_point) - try: - geo_el = Polygon(geo).buffer(0.0000001, resolution=self.step_per_circles) - fill_geo.append(geo_el) - except ValueError: - pass - # stroke - geo = [] - for b in subpath['bezier']: - geo += self.bezier_to_points(start=b[0], c1=b[1], c2=b[2], stop=b[3]) - geo = LineString(geo).buffer((float(applied_size) / 2), resolution=self.step_per_circles) - path_geo.append(geo) - subpath['bezier'] = [] - - if current_subpath == 'rectangle': - if path['rectangle']: - # fill - for subp in path['rectangle']: - geo = copy(subp) - # # close the subpath if it was not closed already - # if close_subpath is False: - # geo.append(geo[0]) - try: - geo_el = Polygon(geo).buffer(0.0000001, resolution=self.step_per_circles) - fill_geo.append(geo_el) - except ValueError: - pass - # stroke - for subp in path['rectangle']: - geo = copy(subp) - geo = LineString(geo).buffer((float(applied_size) / 2), resolution=self.step_per_circles) - path_geo.append(geo) - # the path was painted therefore initialize it - path['rectangle'] = [] - else: - # fill - geo = copy(subpath['rectangle']) - # # close the subpath if it was not closed already - # if close_subpath is False: - # geo.append(start_point) - try: - geo_el = Polygon(geo).buffer(0.0000001, resolution=self.step_per_circles) - fill_geo.append(geo_el) - except ValueError: - pass - # stroke - geo = copy(subpath['rectangle']) - geo = LineString(geo).buffer((float(applied_size) / 2), resolution=self.step_per_circles) - path_geo.append(geo) - subpath['rectangle'] = [] - - # we finished painting and also closed the path if it was the case - close_subpath = True - - # store the found geometry for stroking the path - found_aperture = None - if apertures_dict: - for apid in apertures_dict: - # if we already have an aperture with the current size (rounded to 5 decimals) - if apertures_dict[apid]['size'] == round(applied_size, 5): - found_aperture = apid - break - - if found_aperture: - for pdf_geo in path_geo: - if isinstance(pdf_geo, MultiPolygon): - for poly in pdf_geo: - new_el = {} - new_el['solid'] = poly - new_el['follow'] = poly.exterior - apertures_dict[copy(found_aperture)]['geometry'].append(deepcopy(new_el)) - else: - new_el = {} - new_el['solid'] = pdf_geo - new_el['follow'] = pdf_geo.exterior - apertures_dict[copy(found_aperture)]['geometry'].append(deepcopy(new_el)) - else: - if str(aperture) in apertures_dict.keys(): - aperture += 1 - apertures_dict[str(aperture)] = {} - apertures_dict[str(aperture)]['size'] = round(applied_size, 5) - apertures_dict[str(aperture)]['type'] = 'C' - apertures_dict[str(aperture)]['geometry'] = [] - for pdf_geo in path_geo: - if isinstance(pdf_geo, MultiPolygon): - for poly in pdf_geo: - new_el = {} - new_el['solid'] = poly - new_el['follow'] = poly.exterior - apertures_dict[str(aperture)]['geometry'].append(deepcopy(new_el)) - else: - new_el = {} - new_el['solid'] = pdf_geo - new_el['follow'] = pdf_geo.exterior - apertures_dict[str(aperture)]['geometry'].append(deepcopy(new_el)) - else: - apertures_dict[str(aperture)] = {} - apertures_dict[str(aperture)]['size'] = round(applied_size, 5) - apertures_dict[str(aperture)]['type'] = 'C' - apertures_dict[str(aperture)]['geometry'] = [] - for pdf_geo in path_geo: - if isinstance(pdf_geo, MultiPolygon): - for poly in pdf_geo: - new_el = {} - new_el['solid'] = poly - new_el['follow'] = poly.exterior - apertures_dict[str(aperture)]['geometry'].append(deepcopy(new_el)) - else: - new_el = {} - new_el['solid'] = pdf_geo - new_el['follow'] = pdf_geo.exterior - apertures_dict[str(aperture)]['geometry'].append(deepcopy(new_el)) - - # ############################################# ## - # store the found geometry for filling the path # - # ############################################# ## - - # in case that a color change to white (transparent) occurred - if flag_clear_geo is True: - try: - for pdf_geo in path_geo: - if isinstance(pdf_geo, MultiPolygon): - for poly in fill_geo: - new_el = {} - new_el['clear'] = poly - apertures_dict['0']['geometry'].append(deepcopy(new_el)) - else: - new_el = {} - new_el['clear'] = pdf_geo - apertures_dict['0']['geometry'].append(deepcopy(new_el)) - except KeyError: - # in case there is no stroke width yet therefore no aperture - apertures_dict['0'] = {} - apertures_dict['0']['size'] = round(applied_size, 5) - apertures_dict['0']['type'] = 'C' - apertures_dict['0']['geometry'] = [] - for pdf_geo in fill_geo: - if isinstance(pdf_geo, MultiPolygon): - for poly in pdf_geo: - new_el = {} - new_el['clear'] = poly - apertures_dict['0']['geometry'].append(deepcopy(new_el)) - else: - new_el = {} - new_el['clear'] = pdf_geo - apertures_dict['0']['geometry'].append(deepcopy(new_el)) - else: - try: - for pdf_geo in path_geo: - if isinstance(pdf_geo, MultiPolygon): - for poly in fill_geo: - new_el = {} - new_el['solid'] = poly - new_el['follow'] = poly.exterior - apertures_dict['0']['geometry'].append(deepcopy(new_el)) - else: - new_el = {} - new_el['solid'] = pdf_geo - new_el['follow'] = pdf_geo.exterior - apertures_dict['0']['geometry'].append(deepcopy(new_el)) - except KeyError: - # in case there is no stroke width yet therefore no aperture - apertures_dict['0'] = {} - apertures_dict['0']['size'] = round(applied_size, 5) - apertures_dict['0']['type'] = 'C' - apertures_dict['0']['geometry'] = [] - for pdf_geo in fill_geo: - if isinstance(pdf_geo, MultiPolygon): - for poly in pdf_geo: - new_el = {} - new_el['solid'] = poly - new_el['follow'] = poly.exterior - apertures_dict['0']['geometry'].append(deepcopy(new_el)) - else: - new_el = {} - new_el['solid'] = pdf_geo - new_el['follow'] = pdf_geo.exterior - apertures_dict['0']['geometry'].append(deepcopy(new_el)) - - continue - - # tidy up. copy the current aperture dict to the object dict but only if it is not empty - if apertures_dict: - object_dict[layer_nr] = deepcopy(apertures_dict) - - if clear_apertures_dict['0']['geometry']: - object_dict[0] = deepcopy(clear_apertures_dict) - - # delete keys (layers) with empty values - empty_layers = [] - for layer in object_dict: - if not object_dict[layer]: - empty_layers.append(layer) - for x in empty_layers: - if x in object_dict: - object_dict.pop(x) - - if self.app.abort_flag: - # graceful abort requested by the user - raise grace - - return object_dict - - def bezier_to_points(self, start, c1, c2, stop): - """ - # Equation Bezier, page 184 PDF 1.4 reference - # https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/pdf_reference_archives/PDFReference.pdf - # Given the coordinates of the four points, the curve is generated by varying the parameter t from 0.0 to 1.0 - # in the following equation: - # R(t) = P0*(1 - t) ** 3 + P1*3*t*(1 - t) ** 2 + P2 * 3*(1 - t) * t ** 2 + P3*t ** 3 - # When t = 0.0, the value from the function coincides with the current point P0; when t = 1.0, R(t) coincides - # with the final point P3. Intermediate values of t generate intermediate points along the curve. - # The curve does not, in general, pass through the two control points P1 and P2 - - :return: A list of point coordinates tuples (x, y) - """ - - # here we store the geometric points - points = [] - - nr_points = np.arange(0.0, 1.0, (1 / self.step_per_circles)) - for t in nr_points: - term_p0 = (1 - t) ** 3 - term_p1 = 3 * t * (1 - t) ** 2 - term_p2 = 3 * (1 - t) * t ** 2 - term_p3 = t ** 3 - - x = start[0] * term_p0 + c1[0] * term_p1 + c2[0] * term_p2 + stop[0] * term_p3 - y = start[1] * term_p0 + c1[1] * term_p1 + c2[1] * term_p2 + stop[1] * term_p3 - points.append([x, y]) - - return points - - # def bezier_to_circle(self, path): - # lst = [] - # for el in range(len(path)): - # if type(path) is list: - # for coord in path[el]: - # lst.append(coord) - # else: - # lst.append(el) - # - # if lst: - # minx = min(lst, key=lambda t: t[0])[0] - # miny = min(lst, key=lambda t: t[1])[1] - # maxx = max(lst, key=lambda t: t[0])[0] - # maxy = max(lst, key=lambda t: t[1])[1] - # center = (maxx-minx, maxy-miny) - # radius = (maxx-minx) / 2 - # return [center, radius] - # - # def circle_to_points(self, center, radius): - # geo = Point(center).buffer(radius, resolution=self.step_per_circles) - # return LineString(list(geo.exterior.coords)) - # diff --git a/tclCommands/TclCommandSetOrigin.py b/tclCommands/TclCommandSetOrigin.py index e801fd13..a0afeb08 100644 --- a/tclCommands/TclCommandSetOrigin.py +++ b/tclCommands/TclCommandSetOrigin.py @@ -98,6 +98,6 @@ class TclCommandSetOrigin(TclCommand): loc = [0, 0] self.app.on_set_zero_click(event=None, location=loc, noplot=True, use_thread=False) - self.app.inform.emit('[success] Tcl %s: %s' % - (_('Origin set by offsetting all loaded objects with '), - '{0:.4f}, {0:.4f}'.format(loc[0], loc[1]))) + msg = '[success] Tcl %s: %s' % (_('Origin set by offsetting all loaded objects with '), + '{0:.4f}, {0:.4f}'.format(loc[0], loc[1])) + self.app.shell_message(msg, success=True, show=False) diff --git a/tclCommands/TclCommandSetPath.py b/tclCommands/TclCommandSetPath.py index 953fd57d..79d6c325 100644 --- a/tclCommands/TclCommandSetPath.py +++ b/tclCommands/TclCommandSetPath.py @@ -75,19 +75,22 @@ class TclCommandSetPath(TclCommand): if path_isdir is False: path_isfile = os.path.isfile(path) if path_isfile: - self.app.inform.emit('[ERROR] %s: %s, %s' % ( + msg = '[ERROR] %s: %s, %s' % ( "The provided path", str(path), - "is a path to file and not a directory as expected.")) + "is a path to file and not a directory as expected.") + self.app.shell_message(msg, success=True, show=False) return "Failed. The Tcl command set_path was used but it was not a directory." else: - self.app.inform.emit('[ERROR] %s: %s, %s' % ( + msg = '[ERROR] %s: %s, %s' % ( "The provided path", str(path), - "do not exist. Check for typos.")) + "do not exist. Check for typos.") + self.app.shell_message(msg, success=True, show=False) return "Failed. The Tcl command set_path was used but it does not exist." cd_command = 'cd %s' % path self.app.shell.exec_command(cd_command, no_echo=False) self.app.defaults["global_tcl_path"] = str(path) - self.app.inform.emit('[success] %s: %s' % ("Relative path set to", str(path))) + msg = '[success] %s: %s' % ("Relative path set to", str(path)) + self.app.shell_message(msg, success=True, show=False) From af2cc005b042a416486f096d6f003f30489ce96f Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Mon, 18 May 2020 06:08:43 +0300 Subject: [PATCH 41/99] - made the workspace label in the status bar clickable and also added a status bar message on status toggle for workspace --- CHANGELOG.md | 1 + FlatCAMApp.py | 2 ++ flatcamGUI/FlatCAMGUI.py | 3 ++- flatcamGUI/PlotCanvas.py | 10 ++++++++-- flatcamGUI/PlotCanvasLegacy.py | 10 ++++++++-- 5 files changed, 21 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a013677c..b97cbb87 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ CHANGELOG for FlatCAM beta - fixed the PDF Tool when importing as Gerber objects - moved all the parsing out of the PDF Tool to a new file ParsePDF in the flatcamParsers folder - trying to fix the pixmap load crash when running a FlatCAMScript +- made the workspace label in the status bar clickable and also added a status bar message on status toggle for workspace 17.05.2020 diff --git a/FlatCAMApp.py b/FlatCAMApp.py index 9cb4c8dc..c2da38e6 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -4910,8 +4910,10 @@ class App(QtCore.QObject): def on_workspace(self): if self.ui.general_defaults_form.general_app_set_group.workspace_cb.get_value(): self.plotcanvas.draw_workspace(workspace_size=self.defaults['global_workspaceT']) + self.inform.emit(_("Workspace enabled.")) else: self.plotcanvas.delete_workspace() + self.inform.emit(_("Workspace disabled.")) self.preferencesUiManager.defaults_read_form() # self.save_defaults(silent=True) diff --git a/flatcamGUI/FlatCAMGUI.py b/flatcamGUI/FlatCAMGUI.py index 44765738..4a5d02ac 100644 --- a/flatcamGUI/FlatCAMGUI.py +++ b/flatcamGUI/FlatCAMGUI.py @@ -2329,7 +2329,6 @@ class FlatCAMGUI(QtWidgets.QMainWindow): self.wplace_label = FCLabel("A4") self.wplace_label.setMargin(2) self.infobar.addWidget(self.wplace_label) - self.wplace_label.hide() self.units_label = QtWidgets.QLabel("[mm]") self.units_label.setMargin(2) @@ -2449,6 +2448,8 @@ class FlatCAMGUI(QtWidgets.QMainWindow): self.pref_open_button.clicked.connect(self.on_preferences_open_folder) self.clear_btn.clicked.connect(self.on_gui_clear) + self.wplace_label.clicked.connect(self.app.on_workspace_toggle) + # to be used in the future # self.plot_tab_area.tab_attached.connect(lambda x: print(x)) # self.plot_tab_area.tab_detached.connect(lambda x: print(x)) diff --git a/flatcamGUI/PlotCanvas.py b/flatcamGUI/PlotCanvas.py index 0024ce1e..17916470 100644 --- a/flatcamGUI/PlotCanvas.py +++ b/flatcamGUI/PlotCanvas.py @@ -245,14 +245,20 @@ class PlotCanvas(QtCore.QObject, VisPyCanvas): self.fcapp.ui.wplace_label.set_value(workspace_size[:3]) self.fcapp.ui.wplace_label.setToolTip(workspace_size) - self.fcapp.ui.wplace_label.show() + self.fcapp.ui.wplace_label.setStyleSheet(""" + QLabel + { + color: black; + background-color: lightgreen; + } + """) def delete_workspace(self): try: self.workspace_line.parent = None except Exception: pass - self.fcapp.ui.wplace_label.hide() + self.fcapp.ui.wplace_label.setStyleSheet("") # redraw the workspace lines on the plot by re adding them to the parent view.scene def restore_workspace(self): diff --git a/flatcamGUI/PlotCanvasLegacy.py b/flatcamGUI/PlotCanvasLegacy.py index 155ffaa5..e8e287ce 100644 --- a/flatcamGUI/PlotCanvasLegacy.py +++ b/flatcamGUI/PlotCanvasLegacy.py @@ -419,7 +419,13 @@ class PlotCanvasLegacy(QtCore.QObject): self.app.ui.wplace_label.set_value(workspace_size[:3]) self.app.ui.wplace_label.setToolTip(workspace_size) - self.app.ui.wplace_label.show() + self.fcapp.ui.wplace_label.setStyleSheet(""" + QLabel + { + color: black; + background-color: lightgreen; + } + """) def delete_workspace(self): try: @@ -427,7 +433,7 @@ class PlotCanvasLegacy(QtCore.QObject): self.canvas.draw() except Exception: pass - self.app.ui.wplace_label.hide() + self.fcapp.ui.wplace_label.setStyleSheet("") def graph_event_connect(self, event_name, callback): """ From a9c777030b6c7757ec1cb7443c35145e042bedf4 Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Mon, 18 May 2020 06:48:30 +0300 Subject: [PATCH 42/99] - modified the GUI for Film and Panelize Tools --- CHANGELOG.md | 2 + flatcamTools/ToolFilm.py | 75 +++++++++++++++--------------------- flatcamTools/ToolPanelize.py | 20 +++++++--- 3 files changed, 47 insertions(+), 50 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b97cbb87..748a1376 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,8 @@ CHANGELOG for FlatCAM beta - moved all the parsing out of the PDF Tool to a new file ParsePDF in the flatcamParsers folder - trying to fix the pixmap load crash when running a FlatCAMScript - made the workspace label in the status bar clickable and also added a status bar message on status toggle for workspace +- modified the GUI for Film and Panelize Tools + 17.05.2020 diff --git a/flatcamTools/ToolFilm.py b/flatcamTools/ToolFilm.py index f386f0e8..0cceb34e 100644 --- a/flatcamTools/ToolFilm.py +++ b/flatcamTools/ToolFilm.py @@ -65,13 +65,8 @@ class Film(FlatCAMTool): grid0.setColumnStretch(1, 1) # Type of object for which to create the film - self.tf_type_obj_combo = FCComboBox() - self.tf_type_obj_combo.addItems([_("Gerber"), _("Geometry")]) - - # we get rid of item1 ("Excellon") as it is not suitable for creating film - # self.tf_type_obj_combo.view().setRowHidden(1, True) - self.tf_type_obj_combo.setItemIcon(0, QtGui.QIcon(self.app.resource_location + "/flatcam_icon16.png")) - self.tf_type_obj_combo.setItemIcon(1, QtGui.QIcon(self.app.resource_location + "/geometry16.png")) + self.tf_type_obj_combo = RadioSet([{'label': _('Gerber'), 'value': 'grb'}, + {'label': _('Geometry'), 'value': 'geo'}]) self.tf_type_obj_combo_label = QtWidgets.QLabel('%s:' % _("Object Type")) self.tf_type_obj_combo_label.setToolTip( @@ -89,26 +84,12 @@ class Film(FlatCAMTool): self.tf_object_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex())) self.tf_object_combo.is_last = True - self.tf_object_label = QtWidgets.QLabel('%s:' % _("Film Object")) - self.tf_object_label.setToolTip( - _("Object for which to create the film.") - ) - grid0.addWidget(self.tf_object_label, 1, 0) - grid0.addWidget(self.tf_object_combo, 1, 1) + grid0.addWidget(self.tf_object_combo, 1, 0, 1, 2) # Type of Box Object to be used as an envelope for film creation # Within this we can create negative - self.tf_type_box_combo = FCComboBox() - self.tf_type_box_combo.addItems([_("Gerber"), _("Geometry")]) - - # self.tf_type_box_combo.addItem("Gerber") - # self.tf_type_box_combo.addItem("Excellon") - # self.tf_type_box_combo.addItem("Geometry") - - # we get rid of item1 ("Excellon") as it is not suitable for box when creating film - # self.tf_type_box_combo.view().setRowHidden(1, True) - self.tf_type_box_combo.setItemIcon(0, QtGui.QIcon(self.app.resource_location + "/flatcam_icon16.png")) - self.tf_type_box_combo.setItemIcon(1, QtGui.QIcon(self.app.resource_location + "/geometry16.png")) + self.tf_type_box_combo = RadioSet([{'label': _('Gerber'), 'value': 'grb'}, + {'label': _('Geometry'), 'value': 'geo'}]) self.tf_type_box_combo_label = QtWidgets.QLabel(_("Box Type:")) self.tf_type_box_combo_label.setToolTip( @@ -126,17 +107,19 @@ class Film(FlatCAMTool): self.tf_box_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex())) self.tf_box_combo.is_last = True - self.tf_box_combo_label = QtWidgets.QLabel('%s:' % _("Box Object")) - self.tf_box_combo_label.setToolTip( - _("The actual object that is used as 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.") - ) - grid0.addWidget(self.tf_box_combo_label, 3, 0) - grid0.addWidget(self.tf_box_combo, 3, 1) + # self.tf_box_combo_label = QtWidgets.QLabel('%s:' % _("Box Object")) + # self.tf_box_combo_label.setToolTip( + # _("The actual object that is used as 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.") + # ) + grid0.addWidget(self.tf_box_combo, 3, 0, 1, 2) - grid0.addWidget(QtWidgets.QLabel(''), 4, 0) + separator_line = QtWidgets.QFrame() + separator_line.setFrameShape(QtWidgets.QFrame.HLine) + separator_line.setFrameShadow(QtWidgets.QFrame.Sunken) + grid0.addWidget(separator_line, 4, 0, 1, 2) self.film_adj_label = QtWidgets.QLabel('%s' % _("Film Adjustments")) self.film_adj_label.setToolTip( @@ -533,28 +516,28 @@ class Film(FlatCAMTool): # ## Signals self.film_object_button.clicked.connect(self.on_film_creation) - self.tf_type_obj_combo.currentIndexChanged.connect(self.on_type_obj_index_changed) - self.tf_type_box_combo.currentIndexChanged.connect(self.on_type_box_index_changed) + self.tf_type_obj_combo.activated_custom.connect(self.on_type_obj_index_changed) + self.tf_type_box_combo.activated_custom.connect(self.on_type_box_index_changed) self.film_type.activated_custom.connect(self.on_film_type) self.source_punch.activated_custom.connect(self.on_punch_source) self.file_type_radio.activated_custom.connect(self.on_file_type) self.reset_button.clicked.connect(self.set_tool_ui) - def on_type_obj_index_changed(self): - obj_type = self.tf_type_obj_combo.currentIndex() + def on_type_obj_index_changed(self, val): + obj_type = 2 if val == 'geo' else 0 self.tf_object_combo.setRootModelIndex(self.app.collection.index(obj_type, 0, QtCore.QModelIndex())) self.tf_object_combo.setCurrentIndex(0) self.tf_object_combo.obj_type = { - _("Gerber"): "Gerber", _("Geometry"): "Geometry" + "grb": "gerber", "geo": "geometry" }[self.tf_type_obj_combo.get_value()] - def on_type_box_index_changed(self): - obj_type = self.tf_type_box_combo.currentIndex() + def on_type_box_index_changed(self, val): + obj_type = 2 if val == 'geo' else 0 self.tf_box_combo.setRootModelIndex(self.app.collection.index(obj_type, 0, QtCore.QModelIndex())) self.tf_box_combo.setCurrentIndex(0) self.tf_box_combo.obj_type = { - _("Gerber"): "Gerber", _("Geometry"): "Geometry" + "grb": "gerber", "geo": "geometry" }[self.tf_type_obj_combo.get_value()] def run(self, toggle=True): @@ -618,9 +601,11 @@ class Film(FlatCAMTool): self.orientation_radio.set_value(self.app.defaults["tools_film_orientation"]) self.pagesize_combo.set_value(self.app.defaults["tools_film_pagesize"]) + self.tf_type_obj_combo.set_value('grb') + self.tf_type_box_combo.set_value('grb') # run once to update the obj_type attribute in the FCCombobox so the last object is showed in cb - self.on_type_obj_index_changed() - self.on_type_box_index_changed() + self.on_type_obj_index_changed(val='grb') + self.on_type_box_index_changed(val='grb') def on_film_type(self, val): type_of_film = val @@ -659,7 +644,7 @@ class Film(FlatCAMTool): self.exc_label.show() self.exc_combo.show() - if val == 'pad' and self.tf_type_obj_combo.currentText() == 'Geometry': + if val == 'pad' and self.tf_type_obj_combo.get_value() == 'geo': self.source_punch.set_value('exc') self.app.inform.emit('[WARNING_NOTCL] %s' % _("Using the Pad center does not work on Geometry objects. " "Only a Gerber object has pads.")) diff --git a/flatcamTools/ToolPanelize.py b/flatcamTools/ToolPanelize.py index 8995da05..ed9ded7a 100644 --- a/flatcamTools/ToolPanelize.py +++ b/flatcamTools/ToolPanelize.py @@ -49,8 +49,6 @@ class Panelize(FlatCAMTool): """) self.layout.addWidget(title_label) - self.layout.addWidget(QtWidgets.QLabel('')) - self.object_label = QtWidgets.QLabel('%s:' % _("Source Object")) self.object_label.setToolTip( _("Specify the type of object to be panelized\n" @@ -90,7 +88,6 @@ class Panelize(FlatCAMTool): "be duplicated in an array of rows and columns.") ) form_layout_0.addRow(self.object_combo) - form_layout_0.addRow(QtWidgets.QLabel("")) # Form Layout form_layout = QtWidgets.QFormLayout() @@ -142,7 +139,11 @@ class Panelize(FlatCAMTool): "selected object that is to be panelized.") ) form_layout.addRow(self.box_combo) - form_layout.addRow(QtWidgets.QLabel("")) + + separator_line = QtWidgets.QFrame() + separator_line.setFrameShape(QtWidgets.QFrame.HLine) + separator_line.setFrameShadow(QtWidgets.QFrame.Sunken) + form_layout.addRow(separator_line) panel_data_label = QtWidgets.QLabel("%s:" % _("Panel Data")) panel_data_label.setToolTip( @@ -198,7 +199,11 @@ class Panelize(FlatCAMTool): _("Number of rows of the desired panel") ) form_layout.addRow(self.rows_label, self.rows) - form_layout.addRow(QtWidgets.QLabel("")) + + separator_line = QtWidgets.QFrame() + separator_line.setFrameShape(QtWidgets.QFrame.HLine) + separator_line.setFrameShadow(QtWidgets.QFrame.Sunken) + form_layout.addRow(separator_line) # Type of resulting Panel object self.panel_type_radio = RadioSet([{'label': _('Gerber'), 'value': 'gerber'}, @@ -248,6 +253,11 @@ class Panelize(FlatCAMTool): self.constrain_sel = OptionalInputSection( self.constrain_cb, [self.x_width_lbl, self.x_width_entry, self.y_height_lbl, self.y_height_entry]) + separator_line = QtWidgets.QFrame() + separator_line.setFrameShape(QtWidgets.QFrame.HLine) + separator_line.setFrameShadow(QtWidgets.QFrame.Sunken) + form_layout.addRow(separator_line) + # Buttons self.panelize_object_button = QtWidgets.QPushButton(_("Panelize Object")) self.panelize_object_button.setToolTip( From 4c83e87feb3358b23f1b8f4bb492cf9590475cc1 Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Mon, 18 May 2020 15:43:07 +0300 Subject: [PATCH 43/99] - moved some of the GUI related methods from FlatCAMApp.App to the flatcamGUI.FlatCAMGUI class - moved Shortcuts Tab creation in it's own class --- CHANGELOG.md | 3 +- FlatCAMApp.py | 217 +- FlatCAMProcess.py | 2 +- flatcamGUI/FlatCAMGUI.py | 4517 +++++++++-------- flatcamGUI/GUIElements.py | 204 +- .../general/GeneralAppPrefGroupUI.py | 5 +- 6 files changed, 2486 insertions(+), 2462 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 748a1376..69ae19f5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,8 @@ CHANGELOG for FlatCAM beta - trying to fix the pixmap load crash when running a FlatCAMScript - made the workspace label in the status bar clickable and also added a status bar message on status toggle for workspace - modified the GUI for Film and Panelize Tools - +- moved some of the GUI related methods from FlatCAMApp.App to the flatcamGUI.FlatCAMGUI class +- moved Shortcuts Tab creation in it's own class 17.05.2020 diff --git a/FlatCAMApp.py b/FlatCAMApp.py index c2da38e6..8186ddf4 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -20,7 +20,6 @@ import time import ctypes import traceback -from PyQt5.QtCore import pyqtSlot, Qt from shapely.geometry import Point, MultiPolygon from io import StringIO @@ -72,7 +71,7 @@ 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 flatcamGUI.GUIElements import FCFileSaveDialog, message_dialog, FlatCAMSystemTray # FlatCAM Pre-processors from FlatCAMPostProc import load_preprocessors @@ -528,12 +527,6 @@ class App(QtCore.QObject): self.ui.geom_update[int, int, int, int, int].connect(self.save_geometry) self.ui.final_save.connect(self.final_save) - # restore the toolbar view - self.restore_toolbar_view() - - # restore the GUI geometry - self.restore_main_win_geom() - # set FlatCAM units in the Status bar self.set_screen_units(self.defaults['units']) @@ -783,7 +776,7 @@ class App(QtCore.QObject): self.inform.connect(self.info) # signal to be called when the app is quiting self.app_quit.connect(self.quit_application, type=Qt.QueuedConnection) - self.message.connect(self.message_dialog) + self.message.connect(lambda: message_dialog(parent=self.ui)) # self.progress.connect(self.set_progress_bar) # signals that are emitted when object state changes @@ -895,17 +888,17 @@ class App(QtCore.QObject): self.ui.menuview_replot.triggered.connect(self.plot_all) self.ui.menuview_toggle_code_editor.triggered.connect(self.on_toggle_code_editor) - self.ui.menuview_toggle_fscreen.triggered.connect(self.on_fullscreen) - self.ui.menuview_toggle_parea.triggered.connect(self.on_toggle_plotarea) - self.ui.menuview_toggle_notebook.triggered.connect(self.on_toggle_notebook) - self.ui.menu_toggle_nb.triggered.connect(self.on_toggle_notebook) - self.ui.menuview_toggle_grid.triggered.connect(self.on_toggle_grid) + self.ui.menuview_toggle_fscreen.triggered.connect(self.ui.on_fullscreen) + self.ui.menuview_toggle_parea.triggered.connect(self.ui.on_toggle_plotarea) + self.ui.menuview_toggle_notebook.triggered.connect(self.ui.on_toggle_notebook) + self.ui.menu_toggle_nb.triggered.connect(self.ui.on_toggle_notebook) + self.ui.menuview_toggle_grid.triggered.connect(self.ui.on_toggle_grid) self.ui.menuview_toggle_grid_lines.triggered.connect(self.on_toggle_grid_lines) self.ui.menuview_toggle_axis.triggered.connect(self.on_toggle_axis) self.ui.menuview_toggle_workspace.triggered.connect(self.on_workspace_toggle) self.ui.menuview_toggle_hud.triggered.connect(self.on_toggle_hud) - self.ui.menutoolshell.triggered.connect(self.toggle_shell) + self.ui.menutoolshell.triggered.connect(self.ui.toggle_shell_ui) self.ui.menuhelp_about.triggered.connect(self.on_about) self.ui.menuhelp_manual.triggered.connect(lambda: webbrowser.open(self.manual_url)) @@ -940,7 +933,7 @@ class App(QtCore.QObject): # Context Menu self.ui.popmenu_disable.triggered.connect(lambda: self.toggle_plots(self.collection.get_selected())) - self.ui.popmenu_panel_toggle.triggered.connect(self.on_toggle_notebook) + self.ui.popmenu_panel_toggle.triggered.connect(self.ui.on_toggle_notebook) self.ui.popmenu_new_geo.triggered.connect(self.new_geometry_object) self.ui.popmenu_new_grb.triggered.connect(self.new_gerber_object) @@ -1496,9 +1489,6 @@ class App(QtCore.QObject): # Variable to hold the status of the grid lines self.toggle_grid_lines = True - # Variable to store the status of the fullscreen event - self.toggle_fscreen = False - # Variable to store the status of the code editor self.toggle_codeeditor = False @@ -2045,7 +2035,7 @@ class App(QtCore.QObject): # re-add the TCL Shell action to the Tools menu and reconnect it to ist slot function self.ui.menutoolshell = self.ui.menutool.addAction(QtGui.QIcon(self.resource_location + '/shell16.png'), '&Command Line\tS') - self.ui.menutoolshell.triggered.connect(self.toggle_shell) + self.ui.menutoolshell.triggered.connect(self.ui.toggle_shell_ui) # third install all of them try: @@ -2101,7 +2091,7 @@ class App(QtCore.QObject): self.ui.locate_btn.triggered.connect(lambda: self.on_locate(obj=self.collection.get_active())) # Scripting Toolbar Signals - self.ui.shell_btn.triggered.connect(self.toggle_shell) + self.ui.shell_btn.triggered.connect(self.ui.toggle_shell_ui) self.ui.new_script_btn.triggered.connect(self.on_filenewscript) self.ui.open_script_btn.triggered.connect(self.on_fileopenscript) self.ui.run_script_btn.triggered.connect(self.on_filerunscript) @@ -2462,63 +2452,6 @@ class App(QtCore.QObject): if msg != '': self.shell_message(msg) - def restore_toolbar_view(self): - """ - Some toolbars may be hidden by user and here we restore the state of the toolbars visibility that - was saved in the defaults dictionary. - - :return: None - """ - tb = self.defaults["global_toolbar_view"] - - if tb & 1: - self.ui.toolbarfile.setVisible(True) - else: - self.ui.toolbarfile.setVisible(False) - - if tb & 2: - self.ui.toolbargeo.setVisible(True) - else: - self.ui.toolbargeo.setVisible(False) - - if tb & 4: - self.ui.toolbarview.setVisible(True) - else: - self.ui.toolbarview.setVisible(False) - - if tb & 8: - self.ui.toolbartools.setVisible(True) - else: - self.ui.toolbartools.setVisible(False) - - if tb & 16: - self.ui.exc_edit_toolbar.setVisible(True) - else: - self.ui.exc_edit_toolbar.setVisible(False) - - if tb & 32: - self.ui.geo_edit_toolbar.setVisible(True) - else: - self.ui.geo_edit_toolbar.setVisible(False) - - if tb & 64: - self.ui.grb_edit_toolbar.setVisible(True) - else: - self.ui.grb_edit_toolbar.setVisible(False) - - # if tb & 128: - # self.ui.snap_toolbar.setVisible(True) - # else: - # self.ui.snap_toolbar.setVisible(False) - - # Grid Toolbar is always active now - self.ui.snap_toolbar.setVisible(True) - - if tb & 256: - self.ui.toolbarshell.setVisible(True) - else: - self.ui.toolbarshell.setVisible(False) - def on_import_preferences(self): """ Loads the application default settings from a saved file into @@ -2680,32 +2613,6 @@ class App(QtCore.QObject): self.defaults["global_def_notebook_width"] = notebook_width self.preferencesUiManager.save_defaults() - def restore_main_win_geom(self): - try: - self.ui.setGeometry(self.defaults["global_def_win_x"], - self.defaults["global_def_win_y"], - self.defaults["global_def_win_w"], - self.defaults["global_def_win_h"]) - self.ui.splitter.setSizes([self.defaults["global_def_notebook_width"], 0]) - except KeyError as e: - log.debug("App.restore_main_win_geom() --> %s" % str(e)) - - def message_dialog(self, title, message, kind="info"): - """ - Builds and show a custom QMessageBox to be used in FlatCAM. - - :param title: title of the QMessageBox - :param message: message to be displayed - :param kind: type of QMessageBox; will display a specific icon. - :return: - """ - icon = {"info": QtWidgets.QMessageBox.Information, - "warning": QtWidgets.QMessageBox.Warning, - "error": QtWidgets.QMessageBox.Critical}[str(kind)] - dlg = QtWidgets.QMessageBox(icon, title, message, parent=self.ui) - dlg.setText(message) - dlg.exec_() - def register_recent(self, kind, filename): """ Will register the files opened into record dictionaries. The FlatCAM projects has it's own @@ -4501,75 +4408,6 @@ class App(QtCore.QObject): self.ui.grid_gap_x_entry.set_value(val_x, decimals=self.decimals) self.ui.grid_gap_y_entry.set_value(val_y, decimals=self.decimals) - def on_fullscreen(self, disable=False): - self.defaults.report_usage("on_fullscreen()") - - flags = self.ui.windowFlags() - if self.toggle_fscreen is False and disable is False: - # self.ui.showFullScreen() - self.ui.setWindowFlags(flags | Qt.FramelessWindowHint) - a = self.ui.geometry() - self.x_pos = a.x() - self.y_pos = a.y() - self.width = a.width() - self.height = a.height() - - # set new geometry to full desktop rect - # Subtracting and adding the pixels below it's hack to bypass a bug in Qt5 and OpenGL that made that a - # window drawn with OpenGL in fullscreen will not show any other windows on top which means that menus and - # everything else will not work without this hack. This happen in Windows. - # https://bugreports.qt.io/browse/QTBUG-41309 - desktop = QtWidgets.QApplication.desktop() - screen = desktop.screenNumber(QtGui.QCursor.pos()) - - rec = desktop.screenGeometry(screen) - x = rec.x() - 1 - y = rec.y() - 1 - h = rec.height() + 2 - w = rec.width() + 2 - self.ui.setGeometry(x, y, w, h) - self.ui.show() - - for tb in self.ui.findChildren(QtWidgets.QToolBar): - tb.setVisible(False) - self.ui.snap_toolbar.setVisible(True) # This is always visible - # self.ui.splitter_left.setVisible(False) - self.ui.splitter.setSizes([0, 1]) - self.toggle_fscreen = True - elif self.toggle_fscreen is True or disable is True: - 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() - # self.ui.splitter_left.setVisible(True) - self.toggle_fscreen = False - - def on_toggle_plotarea(self): - self.defaults.report_usage("on_toggle_plotarea()") - - try: - name = self.ui.plot_tab_area.widget(0).objectName() - except AttributeError: - self.ui.plot_tab_area.addTab(self.ui.plot_tab, "Plot Area") - # remove the close button from the Plot Area tab (first tab index = 0) as this one will always be ON - self.ui.plot_tab_area.protectTab(0) - return - - if name != 'plotarea_tab': - self.ui.plot_tab_area.insertTab(0, self.ui.plot_tab, "Plot Area") - # remove the close button from the Plot Area tab (first tab index = 0) as this one will always be ON - self.ui.plot_tab_area.protectTab(0) - else: - self.ui.plot_tab_area.closeTab(0) - - def on_toggle_notebook(self): - if self.ui.splitter.sizes()[0] == 0: - self.ui.splitter.setSizes([1, 1]) - self.ui.menu_toggle_nb.setChecked(True) - else: - self.ui.splitter.setSizes([0, 1]) - self.ui.menu_toggle_nb.setChecked(False) - def on_toggle_axis(self): self.defaults.report_usage("on_toggle_axis()") @@ -4603,11 +4441,6 @@ class App(QtCore.QObject): def on_toggle_hud(self): self.plotcanvas.on_toggle_hud(state=False if self.plotcanvas.hud_enabled else True) - def on_toggle_grid(self): - self.defaults.report_usage("on_toggle_grid()") - - self.ui.grid_snap_btn.trigger() - def on_toggle_grid_lines(self): self.defaults.report_usage("on_toggle_grd_lines()") @@ -10789,34 +10622,6 @@ class App(QtCore.QObject): self.preferencesUiManager.defaults_read_form() self.options.update(self.defaults) - def toggle_shell(self): - """ - Toggle shell: if is visible close it, if it is closed then open it - :return: None - """ - - self.defaults.report_usage("toggle_shell()") - - if self.ui.shell_dock.isVisible(): - self.ui.shell_dock.hide() - self.plotcanvas.native.setFocus() - else: - self.ui.shell_dock.show() - - # I want to take the focus and give it to the Tcl Shell when the Tcl Shell is run - # self.shell._edit.setFocus() - QtCore.QTimer.singleShot(0, lambda: self.ui.shell_dock.widget()._edit.setFocus()) - - # HACK - simulate a mouse click - alternative - # no_km = QtCore.Qt.KeyboardModifier(QtCore.Qt.NoModifier) # no KB modifier - # pos = QtCore.QPoint((self.shell._edit.width() - 40), (self.shell._edit.height() - 2)) - # e = QtGui.QMouseEvent(QtCore.QEvent.MouseButtonPress, pos, QtCore.Qt.LeftButton, QtCore.Qt.LeftButton, - # no_km) - # QtWidgets.qApp.sendEvent(self.shell._edit, e) - # f = QtGui.QMouseEvent(QtCore.QEvent.MouseButtonRelease, pos, QtCore.Qt.LeftButton, QtCore.Qt.LeftButton, - # no_km) - # QtWidgets.qApp.sendEvent(self.shell._edit, f) - def shell_message(self, msg, show=False, error=False, warning=False, success=False, selected=False): """ Shows a message on the FlatCAM Shell diff --git a/FlatCAMProcess.py b/FlatCAMProcess.py index e225f83e..c74d27bf 100644 --- a/FlatCAMProcess.py +++ b/FlatCAMProcess.py @@ -6,7 +6,7 @@ # MIT Licence # # ########################################################## -from flatcamGUI.FlatCAMGUI import FlatCAMActivityView +from flatcamGUI.GUIElements import FlatCAMActivityView from PyQt5 import QtCore import weakref diff --git a/flatcamGUI/FlatCAMGUI.py b/flatcamGUI/FlatCAMGUI.py index 4a5d02ac..1007ed92 100644 --- a/flatcamGUI/FlatCAMGUI.py +++ b/flatcamGUI/FlatCAMGUI.py @@ -1358,17 +1358,2280 @@ class FlatCAMGUI(QtWidgets.QMainWindow): # ######################################################################## # #################### SHORTCUT LIST AREA Tab # ########################## # ######################################################################## - self.shortcuts_tab = QtWidgets.QWidget() + self.shortcuts_tab = ShortcutsTab() + + # ######################################################################## + # ########################## PLOT AREA CONTEXT MENU # ################### + # ######################################################################## + self.popMenu = FCMenu() + + self.popmenu_disable = self.popMenu.addAction( + QtGui.QIcon(self.app.resource_location + '/disable32.png'), _("Toggle Visibility")) + self.popmenu_panel_toggle = self.popMenu.addAction( + QtGui.QIcon(self.app.resource_location + '/notebook16.png'), _("Toggle Panel")) + + self.popMenu.addSeparator() + self.cmenu_newmenu = self.popMenu.addMenu( + QtGui.QIcon(self.app.resource_location + '/file32.png'), _("New")) + self.popmenu_new_geo = self.cmenu_newmenu.addAction( + QtGui.QIcon(self.app.resource_location + '/new_geo32_bis.png'), _("Geometry")) + self.popmenu_new_grb = self.cmenu_newmenu.addAction( + QtGui.QIcon(self.app.resource_location + '/flatcam_icon32.png'), "Gerber") + self.popmenu_new_exc = self.cmenu_newmenu.addAction( + QtGui.QIcon(self.app.resource_location + '/new_exc32.png'), _("Excellon")) + self.cmenu_newmenu.addSeparator() + self.popmenu_new_prj = self.cmenu_newmenu.addAction( + QtGui.QIcon(self.app.resource_location + '/file16.png'), _("Project")) + self.popMenu.addSeparator() + + self.cmenu_gridmenu = self.popMenu.addMenu( + QtGui.QIcon(self.app.resource_location + '/grid32_menu.png'), _("Grids")) + + self.cmenu_viewmenu = self.popMenu.addMenu( + QtGui.QIcon(self.app.resource_location + '/view64.png'), _("View")) + self.zoomfit = self.cmenu_viewmenu.addAction( + QtGui.QIcon(self.app.resource_location + '/zoom_fit32.png'), _("Zoom Fit")) + self.clearplot = self.cmenu_viewmenu.addAction( + QtGui.QIcon(self.app.resource_location + '/clear_plot32.png'), _("Clear Plot")) + self.replot = self.cmenu_viewmenu.addAction( + QtGui.QIcon(self.app.resource_location + '/replot32.png'), _("Replot")) + self.popMenu.addSeparator() + + self.g_editor_cmenu = self.popMenu.addMenu( + QtGui.QIcon(self.app.resource_location + '/draw32.png'), _("Geo Editor")) + self.draw_line = self.g_editor_cmenu.addAction( + QtGui.QIcon(self.app.resource_location + '/path32.png'), _("Path")) + self.draw_rect = self.g_editor_cmenu.addAction( + QtGui.QIcon(self.app.resource_location + '/rectangle32.png'), _("Rectangle")) + self.g_editor_cmenu.addSeparator() + self.draw_circle = self.g_editor_cmenu.addAction( + QtGui.QIcon(self.app.resource_location + '/circle32.png'), _("Circle")) + self.draw_poly = self.g_editor_cmenu.addAction( + QtGui.QIcon(self.app.resource_location + '/polygon32.png'), _("Polygon")) + self.draw_arc = self.g_editor_cmenu.addAction( + QtGui.QIcon(self.app.resource_location + '/arc32.png'), _("Arc")) + self.g_editor_cmenu.addSeparator() + + self.draw_text = self.g_editor_cmenu.addAction( + QtGui.QIcon(self.app.resource_location + '/text32.png'), _("Text")) + self.draw_buffer = self.g_editor_cmenu.addAction( + QtGui.QIcon(self.app.resource_location + '/buffer16-2.png'), _("Buffer")) + self.draw_paint = self.g_editor_cmenu.addAction( + QtGui.QIcon(self.app.resource_location + '/paint20_1.png'), _("Paint")) + self.draw_eraser = self.g_editor_cmenu.addAction( + QtGui.QIcon(self.app.resource_location + '/eraser26.png'), _("Eraser")) + self.g_editor_cmenu.addSeparator() + + self.draw_union = self.g_editor_cmenu.addAction( + QtGui.QIcon(self.app.resource_location + '/union32.png'), _("Union")) + self.draw_intersect = self.g_editor_cmenu.addAction( + QtGui.QIcon(self.app.resource_location + '/intersection32.png'), _("Intersection")) + self.draw_substract = self.g_editor_cmenu.addAction( + QtGui.QIcon(self.app.resource_location + '/subtract32.png'), _("Subtraction")) + self.draw_cut = self.g_editor_cmenu.addAction( + QtGui.QIcon(self.app.resource_location + '/cutpath32.png'), _("Cut")) + self.draw_transform = self.g_editor_cmenu.addAction( + QtGui.QIcon(self.app.resource_location + '/transform.png'), _("Transformations")) + + self.g_editor_cmenu.addSeparator() + self.draw_move = self.g_editor_cmenu.addAction( + QtGui.QIcon(self.app.resource_location + '/move32.png'), _("Move")) + + self.grb_editor_cmenu = self.popMenu.addMenu( + QtGui.QIcon(self.app.resource_location + '/draw32.png'), _("Gerber Editor")) + self.grb_draw_pad = self.grb_editor_cmenu.addAction( + QtGui.QIcon(self.app.resource_location + '/aperture32.png'), _("Pad")) + self.grb_draw_pad_array = self.grb_editor_cmenu.addAction( + QtGui.QIcon(self.app.resource_location + '/padarray32.png'), _("Pad Array")) + self.grb_editor_cmenu.addSeparator() + + self.grb_draw_track = self.grb_editor_cmenu.addAction( + QtGui.QIcon(self.app.resource_location + '/track32.png'), _("Track")) + self.grb_draw_region = self.grb_editor_cmenu.addAction( + QtGui.QIcon(self.app.resource_location + '/polygon32.png'), _("Region")) + self.grb_draw_poligonize = self.grb_editor_cmenu.addAction( + QtGui.QIcon(self.app.resource_location + '/poligonize32.png'), _("Poligonize")) + self.grb_draw_semidisc = self.grb_editor_cmenu.addAction( + QtGui.QIcon(self.app.resource_location + '/semidisc32.png'), _("SemiDisc")) + self.grb_draw_disc = self.grb_editor_cmenu.addAction( + QtGui.QIcon(self.app.resource_location + '/disc32.png'), _("Disc")) + self.grb_editor_cmenu.addSeparator() + + self.grb_draw_buffer = self.grb_editor_cmenu.addAction( + QtGui.QIcon(self.app.resource_location + '/buffer16-2.png'), _("Buffer")) + self.grb_draw_scale = self.grb_editor_cmenu.addAction( + QtGui.QIcon(self.app.resource_location + '/scale32.png'), _("Scale")) + self.grb_draw_markarea = self.grb_editor_cmenu.addAction( + QtGui.QIcon(self.app.resource_location + '/markarea32.png'), _("Mark Area")) + self.grb_draw_eraser = self.grb_editor_cmenu.addAction( + QtGui.QIcon(self.app.resource_location + '/eraser26.png'), _("Eraser")) + self.grb_editor_cmenu.addSeparator() + + self.grb_draw_transformations = self.grb_editor_cmenu.addAction( + QtGui.QIcon(self.app.resource_location + '/transform.png'), _("Transformations")) + + self.e_editor_cmenu = self.popMenu.addMenu( + QtGui.QIcon(self.app.resource_location + '/drill32.png'), _("Exc Editor")) + self.drill = self.e_editor_cmenu.addAction( + QtGui.QIcon(self.app.resource_location + '/drill32.png'), _("Add Drill")) + self.drill_array = self.e_editor_cmenu.addAction( + QtGui.QIcon(self.app.resource_location + '/addarray32.png'), _("Add Drill Array")) + self.e_editor_cmenu.addSeparator() + self.slot = self.e_editor_cmenu.addAction( + QtGui.QIcon(self.app.resource_location + '/slot26.png'), _("Add Slot")) + self.slot_array = self.e_editor_cmenu.addAction( + QtGui.QIcon(self.app.resource_location + '/slot_array26.png'), _("Add Slot Array")) + self.e_editor_cmenu.addSeparator() + self.drill_resize = self.e_editor_cmenu.addAction( + QtGui.QIcon(self.app.resource_location + '/resize16.png'), _("Resize Drill")) + + self.popMenu.addSeparator() + self.popmenu_copy = self.popMenu.addAction( + QtGui.QIcon(self.app.resource_location + '/copy32.png'), _("Copy")) + self.popmenu_delete = self.popMenu.addAction( + QtGui.QIcon(self.app.resource_location + '/delete32.png'), _("Delete")) + self.popmenu_edit = self.popMenu.addAction( + QtGui.QIcon(self.app.resource_location + '/edit32.png'), _("Edit")) + self.popmenu_save = self.popMenu.addAction( + QtGui.QIcon(self.app.resource_location + '/floppy32.png'), _("Close Editor")) + self.popmenu_save.setVisible(False) + self.popMenu.addSeparator() + + self.popmenu_move = self.popMenu.addAction( + QtGui.QIcon(self.app.resource_location + '/move32.png'), _("Move")) + self.popmenu_properties = self.popMenu.addAction( + QtGui.QIcon(self.app.resource_location + '/properties32.png'), _("Properties")) + + # ######################################################################## + # ########################## INFO BAR # ################################## + # ######################################################################## + self.infobar = self.statusBar() + self.fcinfo = FlatCAMInfoBar(app=self.app) + self.infobar.addWidget(self.fcinfo, stretch=1) + + # self.rel_position_label = QtWidgets.QLabel( + # "Dx: 0.0000   Dy: 0.0000    ") + # self.rel_position_label.setMinimumWidth(110) + # self.rel_position_label.setToolTip(_("Relative measurement.\nReference is last click position")) + # self.infobar.addWidget(self.rel_position_label) + # + self.position_label = QtWidgets.QLabel( + " X: 0.0000   Y: 0.0000 ") + self.position_label.setMinimumWidth(110) + self.position_label.setToolTip(_("Absolute measurement.\nReference is (X=0, Y= 0) position")) + self.infobar.addWidget(self.position_label) + + self.snap_toolbar.setMaximumHeight(24) + self.infobar.addWidget(self.snap_toolbar) + + self.wplace_label = FCLabel("A4") + self.wplace_label.setMargin(2) + self.infobar.addWidget(self.wplace_label) + + self.units_label = QtWidgets.QLabel("[mm]") + self.units_label.setMargin(2) + self.infobar.addWidget(self.units_label) + + # disabled + # self.progress_bar = QtWidgets.QProgressBar() + # self.progress_bar.setMinimum(0) + # self.progress_bar.setMaximum(100) + # infobar.addWidget(self.progress_bar) + + # ######################################################################## + # ########################## SET GUI Elements # ########################## + # ######################################################################## + self.app_icon = QtGui.QIcon() + self.app_icon.addFile(self.app.resource_location + '/flatcam_icon16.png', QtCore.QSize(16, 16)) + self.app_icon.addFile(self.app.resource_location + '/flatcam_icon24.png', QtCore.QSize(24, 24)) + self.app_icon.addFile(self.app.resource_location + '/flatcam_icon32.png', QtCore.QSize(32, 32)) + self.app_icon.addFile(self.app.resource_location + '/flatcam_icon48.png', QtCore.QSize(48, 48)) + self.app_icon.addFile(self.app.resource_location + '/flatcam_icon128.png', QtCore.QSize(128, 128)) + self.app_icon.addFile(self.app.resource_location + '/flatcam_icon256.png', QtCore.QSize(256, 256)) + self.setWindowIcon(self.app_icon) + + self.setGeometry(100, 100, 1024, 650) + self.setWindowTitle('FlatCAM %s %s - %s' % + (self.app.version, + ('BETA' if self.app.beta else ''), + platform.architecture()[0]) + ) + + self.filename = "" + self.units = "" + self.setAcceptDrops(True) + + # ######################################################################## + # ########################## Build GUI # ################################# + # ######################################################################## + self.grid_snap_btn.setCheckable(True) + self.corner_snap_btn.setCheckable(True) + self.update_obj_btn.setEnabled(False) + # start with GRID activated + self.grid_snap_btn.trigger() + + self.g_editor_cmenu.menuAction().setVisible(False) + self.grb_editor_cmenu.menuAction().setVisible(False) + self.e_editor_cmenu.menuAction().setVisible(False) + + # ######################################################################## + # ######################## BUILD PREFERENCES ############################# + # ######################################################################## + self.general_defaults_form = GeneralPreferencesUI(decimals=self.decimals) + self.gerber_defaults_form = GerberPreferencesUI(decimals=self.decimals) + self.excellon_defaults_form = ExcellonPreferencesUI(decimals=self.decimals) + self.geometry_defaults_form = GeometryPreferencesUI(decimals=self.decimals) + self.cncjob_defaults_form = CNCJobPreferencesUI(decimals=self.decimals) + self.tools_defaults_form = ToolsPreferencesUI(decimals=self.decimals) + self.tools2_defaults_form = Tools2PreferencesUI(decimals=self.decimals) + self.util_defaults_form = UtilPreferencesUI(decimals=self.decimals) + + QtWidgets.qApp.installEventFilter(self) + + # ######################################################################## + # ################## RESTORE THE TOOLBAR STATE from file ################# + # ######################################################################## + flat_settings = QSettings("Open Source", "FlatCAM") + if flat_settings.contains("saved_gui_state"): + saved_gui_state = flat_settings.value('saved_gui_state') + self.restoreState(saved_gui_state) + log.debug("FlatCAMGUI.__init__() --> UI state restored from QSettings.") + + self.corner_snap_btn.setVisible(False) + self.snap_magnet.setVisible(False) + + if flat_settings.contains("layout"): + layout = flat_settings.value('layout', type=str) + self.exc_edit_toolbar.setDisabled(True) + self.geo_edit_toolbar.setDisabled(True) + self.grb_edit_toolbar.setDisabled(True) + + log.debug("FlatCAMGUI.__init__() --> UI layout restored from QSettings. Layout = %s" % str(layout)) + else: + self.exc_edit_toolbar.setDisabled(True) + self.geo_edit_toolbar.setDisabled(True) + self.grb_edit_toolbar.setDisabled(True) + + flat_settings.setValue('layout', "standard") + # This will write the setting to the platform specific storage. + del flat_settings + log.debug("FlatCAMGUI.__init__() --> UI layout restored from defaults. QSettings set to 'standard'") + + # construct the Toolbar Lock menu entry to the context menu of the QMainWindow + self.lock_action = QtWidgets.QAction() + self.lock_action.setText(_("Lock Toolbars")) + self.lock_action.setCheckable(True) + + qsettings = QSettings("Open Source", "FlatCAM") + if qsettings.contains("toolbar_lock"): + lock_val = settings.value('toolbar_lock') + if lock_val == 'true': + lock_state = True + self.lock_action.setChecked(True) + else: + + lock_state = False + self.lock_action.setChecked(False) + else: + lock_state = False + qsettings.setValue('toolbar_lock', lock_state) + + # This will write the setting to the platform specific storage. + del qsettings + + self.lock_toolbar(lock=lock_state) + + self.lock_action.triggered[bool].connect(self.lock_toolbar) + + self.pref_open_button.clicked.connect(self.on_preferences_open_folder) + self.clear_btn.clicked.connect(self.on_gui_clear) + + self.wplace_label.clicked.connect(self.app.on_workspace_toggle) + + # to be used in the future + # self.plot_tab_area.tab_attached.connect(lambda x: print(x)) + # self.plot_tab_area.tab_detached.connect(lambda x: print(x)) + + # restore the toolbar view + self.restore_toolbar_view() + + # restore the GUI geometry + self.restore_main_win_geom() + + # %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + # %%%%%%%%%%%%%%%%% GUI Building FINISHED %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + # %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + # Variable to store the status of the fullscreen event + self.toggle_fscreen = False + self.x_pos = None + self.y_pos = None + self.width = None + self.height = None + + def restore_main_win_geom(self): + try: + self.setGeometry(self.app.defaults["global_def_win_x"], + self.app.defaults["global_def_win_y"], + self.app.defaults["global_def_win_w"], + self.app.defaults["global_def_win_h"]) + self.splitter.setSizes([self.app.defaults["global_def_notebook_width"], 0]) + except KeyError as e: + log.debug("flatcamGUI.FlatCAMGUI.restore_main_win_geom() --> %s" % str(e)) + + def restore_toolbar_view(self): + """ + Some toolbars may be hidden by user and here we restore the state of the toolbars visibility that + was saved in the defaults dictionary. + + :return: None + """ + tb = self.app.defaults["global_toolbar_view"] + + if tb & 1: + self.toolbarfile.setVisible(True) + else: + self.toolbarfile.setVisible(False) + + if tb & 2: + self.toolbargeo.setVisible(True) + else: + self.toolbargeo.setVisible(False) + + if tb & 4: + self.toolbarview.setVisible(True) + else: + self.toolbarview.setVisible(False) + + if tb & 8: + self.toolbartools.setVisible(True) + else: + self.toolbartools.setVisible(False) + + if tb & 16: + self.exc_edit_toolbar.setVisible(True) + else: + self.exc_edit_toolbar.setVisible(False) + + if tb & 32: + self.geo_edit_toolbar.setVisible(True) + else: + self.geo_edit_toolbar.setVisible(False) + + if tb & 64: + self.grb_edit_toolbar.setVisible(True) + else: + self.grb_edit_toolbar.setVisible(False) + + # if tb & 128: + # self.ui.snap_toolbar.setVisible(True) + # else: + # self.ui.snap_toolbar.setVisible(False) + + # Grid Toolbar is always active now + self.snap_toolbar.setVisible(True) + + if tb & 256: + self.toolbarshell.setVisible(True) + else: + self.toolbarshell.setVisible(False) + + def eventFilter(self, obj, event): + """ + Filter the ToolTips display based on a Preferences setting + + :param obj: + :param event: QT event to filter + :return: + """ + if self.app.defaults["global_toggle_tooltips"] is False: + if event.type() == QtCore.QEvent.ToolTip: + return True + else: + return False + + return False + + def on_preferences_open_folder(self): + """ + Will open an Explorer window set to the folder path where the FlatCAM preferences files are usually saved. + + :return: None + """ + + if sys.platform == 'win32': + subprocess.Popen('explorer %s' % self.app.data_path) + elif sys.platform == 'darwin': + os.system('open "%s"' % self.app.data_path) + else: + subprocess.Popen(['xdg-open', self.app.data_path]) + self.app.inform.emit('[success] %s' % _("FlatCAM Preferences Folder opened.")) + + def on_gui_clear(self): + theme_settings = QtCore.QSettings("Open Source", "FlatCAM") + theme_settings.setValue('theme', 'white') + + del theme_settings + + resource_loc = self.app.resource_location + + msgbox = QtWidgets.QMessageBox() + msgbox.setText(_("Are you sure you want to delete the GUI Settings? \n")) + msgbox.setWindowTitle(_("Clear GUI Settings")) + msgbox.setWindowIcon(QtGui.QIcon(resource_loc + '/trash32.png')) + bt_yes = msgbox.addButton(_('Yes'), QtWidgets.QMessageBox.YesRole) + bt_no = msgbox.addButton(_('No'), QtWidgets.QMessageBox.NoRole) + + msgbox.setDefaultButton(bt_no) + msgbox.exec_() + response = msgbox.clickedButton() + + if response == bt_yes: + qsettings = QSettings("Open Source", "FlatCAM") + for key in qsettings.allKeys(): + qsettings.remove(key) + # This will write the setting to the platform specific storage. + del qsettings + + def populate_toolbars(self): + """ + Will populate the App Toolbars with their actions + + :return: None + """ + + # ######################################################################## + # ## File Toolbar # ## + # ######################################################################## + self.file_open_gerber_btn = self.toolbarfile.addAction( + QtGui.QIcon(self.app.resource_location + '/flatcam_icon32.png'), _("Open Gerber")) + self.file_open_excellon_btn = self.toolbarfile.addAction( + QtGui.QIcon(self.app.resource_location + '/drill32.png'), _("Open Excellon")) + self.toolbarfile.addSeparator() + self.file_open_btn = self.toolbarfile.addAction( + QtGui.QIcon(self.app.resource_location + '/folder32.png'), _("Open project")) + self.file_save_btn = self.toolbarfile.addAction( + QtGui.QIcon(self.app.resource_location + '/project_save32.png'), _("Save project")) + + # ######################################################################## + # ## Edit Toolbar # ## + # ######################################################################## + self.newgeo_btn = self.toolbargeo.addAction( + QtGui.QIcon(self.app.resource_location + '/new_file_geo32.png'), _("New Blank Geometry")) + self.newgrb_btn = self.toolbargeo.addAction( + QtGui.QIcon(self.app.resource_location + '/new_file_grb32.png'), _("New Blank Gerber")) + self.newexc_btn = self.toolbargeo.addAction( + QtGui.QIcon(self.app.resource_location + '/new_file_exc32.png'), _("New Blank Excellon")) + self.toolbargeo.addSeparator() + self.editgeo_btn = self.toolbargeo.addAction( + QtGui.QIcon(self.app.resource_location + '/edit32.png'), _("Editor")) + self.update_obj_btn = self.toolbargeo.addAction( + QtGui.QIcon(self.app.resource_location + '/close_edit_file32.png'), + _("Save Object and close the Editor") + ) + + self.toolbargeo.addSeparator() + self.copy_btn = self.toolbargeo.addAction( + QtGui.QIcon(self.app.resource_location + '/copy_file32.png'), _("Copy")) + self.delete_btn = self.toolbargeo.addAction( + QtGui.QIcon(self.app.resource_location + '/delete_file32.png'), _("&Delete")) + self.toolbargeo.addSeparator() + self.distance_btn = self.toolbargeo.addAction( + QtGui.QIcon(self.app.resource_location + '/distance32.png'), _("Distance Tool")) + self.distance_min_btn = self.toolbargeo.addAction( + QtGui.QIcon(self.app.resource_location + '/distance_min32.png'), _("Distance Min Tool")) + self.origin_btn = self.toolbargeo.addAction( + QtGui.QIcon(self.app.resource_location + '/origin32.png'), _('Set Origin')) + self.move2origin_btn = self.toolbargeo.addAction( + QtGui.QIcon(self.app.resource_location + '/origin2_32.png'), _('Move to Origin')) + self.jmp_btn = self.toolbargeo.addAction( + QtGui.QIcon(self.app.resource_location + '/jump_to16.png'), _('Jump to Location')) + self.locate_btn = self.toolbargeo.addAction( + QtGui.QIcon(self.app.resource_location + '/locate32.png'), _('Locate in Object')) + + # ######################################################################## + # ########################## View Toolbar# ############################### + # ######################################################################## + self.replot_btn = self.toolbarview.addAction( + QtGui.QIcon(self.app.resource_location + '/replot32.png'), _("&Replot")) + self.clear_plot_btn = self.toolbarview.addAction( + QtGui.QIcon(self.app.resource_location + '/clear_plot32.png'), _("&Clear plot")) + self.zoom_in_btn = self.toolbarview.addAction( + QtGui.QIcon(self.app.resource_location + '/zoom_in32.png'), _("Zoom In")) + self.zoom_out_btn = self.toolbarview.addAction( + QtGui.QIcon(self.app.resource_location + '/zoom_out32.png'), _("Zoom Out")) + self.zoom_fit_btn = self.toolbarview.addAction( + QtGui.QIcon(self.app.resource_location + '/zoom_fit32.png'), _("Zoom Fit")) + + # ######################################################################## + # ########################## Shell Toolbar# ############################## + # ######################################################################## + self.shell_btn = self.toolbarshell.addAction( + QtGui.QIcon(self.app.resource_location + '/shell32.png'), _("&Command Line")) + self.new_script_btn = self.toolbarshell.addAction( + QtGui.QIcon(self.app.resource_location + '/script_new24.png'), _('New Script ...')) + self.open_script_btn = self.toolbarshell.addAction( + QtGui.QIcon(self.app.resource_location + '/open_script32.png'), _('Open Script ...')) + self.run_script_btn = self.toolbarshell.addAction( + QtGui.QIcon(self.app.resource_location + '/script16.png'), _('Run Script ...')) + + # ######################################################################### + # ######################### Tools Toolbar ################################# + # ######################################################################### + self.dblsided_btn = self.toolbartools.addAction( + QtGui.QIcon(self.app.resource_location + '/doubleside32.png'), _("2Sided Tool")) + self.align_btn = self.toolbartools.addAction( + QtGui.QIcon(self.app.resource_location + '/align32.png'), _("Align Objects Tool")) + self.extract_btn = self.toolbartools.addAction( + QtGui.QIcon(self.app.resource_location + '/extract_drill32.png'), _("Extract Drills Tool")) + + self.cutout_btn = self.toolbartools.addAction( + QtGui.QIcon(self.app.resource_location + '/cut16_bis.png'), _("&Cutout Tool")) + self.ncc_btn = self.toolbartools.addAction( + QtGui.QIcon(self.app.resource_location + '/ncc16.png'), _("NCC Tool")) + self.paint_btn = self.toolbartools.addAction( + QtGui.QIcon(self.app.resource_location + '/paint20_1.png'), _("Paint Tool")) + self.toolbartools.addSeparator() + + self.panelize_btn = self.toolbartools.addAction( + QtGui.QIcon(self.app.resource_location + '/panelize32.png'), _("Panel Tool")) + self.film_btn = self.toolbartools.addAction( + QtGui.QIcon(self.app.resource_location + '/film16.png'), _("Film Tool")) + self.solder_btn = self.toolbartools.addAction( + QtGui.QIcon(self.app.resource_location + '/solderpastebis32.png'), _("SolderPaste Tool")) + self.sub_btn = self.toolbartools.addAction( + QtGui.QIcon(self.app.resource_location + '/sub32.png'), _("Subtract Tool")) + self.rules_btn = self.toolbartools.addAction( + QtGui.QIcon(self.app.resource_location + '/rules32.png'), _("Rules Tool")) + self.optimal_btn = self.toolbartools.addAction( + QtGui.QIcon(self.app.resource_location + '/open_excellon32.png'), _("Optimal Tool")) + + self.toolbartools.addSeparator() + + self.calculators_btn = self.toolbartools.addAction( + QtGui.QIcon(self.app.resource_location + '/calculator24.png'), _("Calculators Tool")) + self.transform_btn = self.toolbartools.addAction( + QtGui.QIcon(self.app.resource_location + '/transform.png'), _("Transform Tool")) + self.qrcode_btn = self.toolbartools.addAction( + QtGui.QIcon(self.app.resource_location + '/qrcode32.png'), _("QRCode Tool")) + self.copperfill_btn = self.toolbartools.addAction( + QtGui.QIcon(self.app.resource_location + '/copperfill32.png'), _("Copper Thieving Tool")) + + self.fiducials_btn = self.toolbartools.addAction( + QtGui.QIcon(self.app.resource_location + '/fiducials_32.png'), _("Fiducials Tool")) + self.cal_btn = self.toolbartools.addAction( + QtGui.QIcon(self.app.resource_location + '/calibrate_32.png'), _("Calibration Tool")) + self.punch_btn = self.toolbartools.addAction( + QtGui.QIcon(self.app.resource_location + '/punch32.png'), _("Punch Gerber Tool")) + self.invert_btn = self.toolbartools.addAction( + QtGui.QIcon(self.app.resource_location + '/invert32.png'), _("Invert Gerber Tool")) + self.corners_tool_btn = self.toolbartools.addAction( + QtGui.QIcon(self.app.resource_location + '/corners_32.png'), _("Corner Markers Tool")) + + # ######################################################################## + # ## Excellon Editor Toolbar # ## + # ######################################################################## + self.select_drill_btn = self.exc_edit_toolbar.addAction( + QtGui.QIcon(self.app.resource_location + '/pointer32.png'), _("Select")) + self.add_drill_btn = self.exc_edit_toolbar.addAction( + QtGui.QIcon(self.app.resource_location + '/plus16.png'), _('Add Drill Hole')) + self.add_drill_array_btn = self.exc_edit_toolbar.addAction( + QtGui.QIcon(self.app.resource_location + '/addarray16.png'), _('Add Drill Hole Array')) + self.resize_drill_btn = self.exc_edit_toolbar.addAction( + QtGui.QIcon(self.app.resource_location + '/resize16.png'), _('Resize Drill')) + self.add_slot_btn = self.exc_edit_toolbar.addAction( + QtGui.QIcon(self.app.resource_location + '/slot26.png'), _('Add Slot')) + self.add_slot_array_btn = self.exc_edit_toolbar.addAction( + QtGui.QIcon(self.app.resource_location + '/slot_array26.png'), _('Add Slot Array')) + self.exc_edit_toolbar.addSeparator() + + self.copy_drill_btn = self.exc_edit_toolbar.addAction( + QtGui.QIcon(self.app.resource_location + '/copy32.png'), _('Copy Drill')) + self.delete_drill_btn = self.exc_edit_toolbar.addAction( + QtGui.QIcon(self.app.resource_location + '/trash32.png'), _("Delete Drill")) + + self.exc_edit_toolbar.addSeparator() + self.move_drill_btn = self.exc_edit_toolbar.addAction( + QtGui.QIcon(self.app.resource_location + '/move32.png'), _("Move Drill")) + + # ######################################################################## + # ## Geometry Editor Toolbar # ## + # ######################################################################## + self.geo_select_btn = self.geo_edit_toolbar.addAction( + QtGui.QIcon(self.app.resource_location + '/pointer32.png'), _("Select 'Esc'")) + self.geo_add_circle_btn = self.geo_edit_toolbar.addAction( + QtGui.QIcon(self.app.resource_location + '/circle32.png'), _('Add Circle')) + self.geo_add_arc_btn = self.geo_edit_toolbar.addAction( + QtGui.QIcon(self.app.resource_location + '/arc32.png'), _('Add Arc')) + self.geo_add_rectangle_btn = self.geo_edit_toolbar.addAction( + QtGui.QIcon(self.app.resource_location + '/rectangle32.png'), _('Add Rectangle')) + + self.geo_edit_toolbar.addSeparator() + self.geo_add_path_btn = self.geo_edit_toolbar.addAction( + QtGui.QIcon(self.app.resource_location + '/path32.png'), _('Add Path')) + self.geo_add_polygon_btn = self.geo_edit_toolbar.addAction( + QtGui.QIcon(self.app.resource_location + '/polygon32.png'), _('Add Polygon')) + self.geo_edit_toolbar.addSeparator() + self.geo_add_text_btn = self.geo_edit_toolbar.addAction( + QtGui.QIcon(self.app.resource_location + '/text32.png'), _('Add Text')) + self.geo_add_buffer_btn = self.geo_edit_toolbar.addAction( + QtGui.QIcon(self.app.resource_location + '/buffer16-2.png'), _('Add Buffer')) + self.geo_add_paint_btn = self.geo_edit_toolbar.addAction( + QtGui.QIcon(self.app.resource_location + '/paint20_1.png'), _('Paint Shape')) + self.geo_eraser_btn = self.geo_edit_toolbar.addAction( + QtGui.QIcon(self.app.resource_location + '/eraser26.png'), _('Eraser')) + + self.geo_edit_toolbar.addSeparator() + self.geo_union_btn = self.geo_edit_toolbar.addAction( + QtGui.QIcon(self.app.resource_location + '/union32.png'), _('Polygon Union')) + self.geo_explode_btn = self.geo_edit_toolbar.addAction( + QtGui.QIcon(self.app.resource_location + '/explode32.png'), _('Polygon Explode')) + + self.geo_intersection_btn = self.geo_edit_toolbar.addAction( + QtGui.QIcon(self.app.resource_location + '/intersection32.png'), _('Polygon Intersection')) + self.geo_subtract_btn = self.geo_edit_toolbar.addAction( + QtGui.QIcon(self.app.resource_location + '/subtract32.png'), _('Polygon Subtraction')) + + self.geo_edit_toolbar.addSeparator() + self.geo_cutpath_btn = self.geo_edit_toolbar.addAction( + QtGui.QIcon(self.app.resource_location + '/cutpath32.png'), _('Cut Path')) + self.geo_copy_btn = self.geo_edit_toolbar.addAction( + QtGui.QIcon(self.app.resource_location + '/copy32.png'), _("Copy Objects")) + self.geo_delete_btn = self.geo_edit_toolbar.addAction( + QtGui.QIcon(self.app.resource_location + '/trash32.png'), _("Delete Shape")) + self.geo_transform_btn = self.geo_edit_toolbar.addAction( + QtGui.QIcon(self.app.resource_location + '/transform.png'), _("Transformations")) + + self.geo_edit_toolbar.addSeparator() + self.geo_move_btn = self.geo_edit_toolbar.addAction( + QtGui.QIcon(self.app.resource_location + '/move32.png'), _("Move Objects")) + + # ######################################################################## + # ## Gerber Editor Toolbar # ## + # ######################################################################## + self.grb_select_btn = self.grb_edit_toolbar.addAction( + QtGui.QIcon(self.app.resource_location + '/pointer32.png'), _("Select")) + self.grb_add_pad_btn = self.grb_edit_toolbar.addAction( + QtGui.QIcon(self.app.resource_location + '/aperture32.png'), _("Add Pad")) + self.add_pad_ar_btn = self.grb_edit_toolbar.addAction( + QtGui.QIcon(self.app.resource_location + '/padarray32.png'), _('Add Pad Array')) + self.grb_add_track_btn = self.grb_edit_toolbar.addAction( + QtGui.QIcon(self.app.resource_location + '/track32.png'), _("Add Track")) + self.grb_add_region_btn = self.grb_edit_toolbar.addAction( + QtGui.QIcon(self.app.resource_location + '/polygon32.png'), _("Add Region")) + self.grb_convert_poly_btn = self.grb_edit_toolbar.addAction( + QtGui.QIcon(self.app.resource_location + '/poligonize32.png'), _("Poligonize")) + + self.grb_add_semidisc_btn = self.grb_edit_toolbar.addAction( + QtGui.QIcon(self.app.resource_location + '/semidisc32.png'), _("SemiDisc")) + self.grb_add_disc_btn = self.grb_edit_toolbar.addAction( + QtGui.QIcon(self.app.resource_location + '/disc32.png'), _("Disc")) + self.grb_edit_toolbar.addSeparator() + + self.aperture_buffer_btn = self.grb_edit_toolbar.addAction( + QtGui.QIcon(self.app.resource_location + '/buffer16-2.png'), _('Buffer')) + self.aperture_scale_btn = self.grb_edit_toolbar.addAction( + QtGui.QIcon(self.app.resource_location + '/scale32.png'), _('Scale')) + self.aperture_markarea_btn = self.grb_edit_toolbar.addAction( + QtGui.QIcon(self.app.resource_location + '/markarea32.png'), _('Mark Area')) + self.aperture_eraser_btn = self.grb_edit_toolbar.addAction( + QtGui.QIcon(self.app.resource_location + '/eraser26.png'), _('Eraser')) + + self.grb_edit_toolbar.addSeparator() + self.aperture_copy_btn = self.grb_edit_toolbar.addAction( + QtGui.QIcon(self.app.resource_location + '/copy32.png'), _("Copy")) + self.aperture_delete_btn = self.grb_edit_toolbar.addAction( + QtGui.QIcon(self.app.resource_location + '/trash32.png'), _("Delete")) + self.grb_transform_btn = self.grb_edit_toolbar.addAction( + QtGui.QIcon(self.app.resource_location + '/transform.png'), _("Transformations")) + self.grb_edit_toolbar.addSeparator() + self.aperture_move_btn = self.grb_edit_toolbar.addAction( + QtGui.QIcon(self.app.resource_location + '/move32.png'), _("Move")) + + self.corner_snap_btn.setVisible(False) + self.snap_magnet.setVisible(False) + + qsettings = QSettings("Open Source", "FlatCAM") + if qsettings.contains("layout"): + layout = qsettings.value('layout', type=str) + + # on 'minimal' layout only some toolbars are active + if layout != 'minimal': + self.exc_edit_toolbar.setVisible(True) + self.exc_edit_toolbar.setDisabled(True) + self.geo_edit_toolbar.setVisible(True) + self.geo_edit_toolbar.setDisabled(True) + self.grb_edit_toolbar.setVisible(True) + self.grb_edit_toolbar.setDisabled(True) + + def keyPressEvent(self, event): + """ + Key event handler for the entire app. + Some of the key events are also treated locally in the FlatCAM editors + + :param event: QT event + :return: + """ + modifiers = QtWidgets.QApplication.keyboardModifiers() + active = self.app.collection.get_active() + selected = self.app.collection.get_selected() + names_list = self.app.collection.get_names() + + matplotlib_key_flag = False + + # events out of the self.app.collection view (it's about Project Tab) are of type int + if type(event) is int: + key = event + # events from the GUI are of type QKeyEvent + elif type(event) == QtGui.QKeyEvent: + key = event.key() + elif isinstance(event, mpl_key_event): # MatPlotLib key events are trickier to interpret than the rest + matplotlib_key_flag = True + + key = event.key + key = QtGui.QKeySequence(key) + + # check for modifiers + key_string = key.toString().lower() + if '+' in key_string: + mod, __, key_text = key_string.rpartition('+') + if mod.lower() == 'ctrl': + modifiers = QtCore.Qt.ControlModifier + elif mod.lower() == 'alt': + modifiers = QtCore.Qt.AltModifier + elif mod.lower() == 'shift': + modifiers = QtCore.Qt.ShiftModifier + else: + modifiers = QtCore.Qt.NoModifier + key = QtGui.QKeySequence(key_text) + + # events from Vispy are of type KeyEvent + else: + key = event.key + + if self.app.call_source == 'app': + # CTRL + ALT + if modifiers == QtCore.Qt.ControlModifier | QtCore.Qt.AltModifier: + if key == QtCore.Qt.Key_X: + self.app.abort_all_tasks() + return + # CTRL + SHIFT + if modifiers == QtCore.Qt.ControlModifier | QtCore.Qt.ShiftModifier: + if key == QtCore.Qt.Key_S: + self.app.on_file_saveprojectas() + return + # CTRL + elif modifiers == QtCore.Qt.ControlModifier: + # Select All + if key == QtCore.Qt.Key_A: + self.app.on_selectall() + + # Copy an FlatCAM object + if key == QtCore.Qt.Key_C: + widget_name = self.plot_tab_area.currentWidget().objectName() + if widget_name == 'database_tab': + # Tools DB saved, update flag + self.app.tools_db_changed_flag = True + self.app.tools_db_tab.on_tool_copy() + return + + self.app.on_copy_command() + + # Copy an FlatCAM object + if key == QtCore.Qt.Key_D: + self.app.on_tools_database() + + # Open Excellon file + if key == QtCore.Qt.Key_E: + self.app.on_fileopenexcellon(signal=None) + + # Open Gerber file + if key == QtCore.Qt.Key_G: + widget_name = self.plot_tab_area.currentWidget().objectName() + if 'editor' in widget_name.lower(): + self.app.goto_text_line() + else: + self.app.on_fileopengerber(signal=None) + + # Distance Tool + if key == QtCore.Qt.Key_M: + self.app.distance_tool.run() + + # Create New Project + if key == QtCore.Qt.Key_N: + self.app.on_file_new_click() + + # Open Project + if key == QtCore.Qt.Key_O: + self.app.on_file_openproject(signal=None) + + # Open Project + if key == QtCore.Qt.Key_P: + self.app.on_file_save_objects_pdf(use_thread=True) + + # PDF Import + if key == QtCore.Qt.Key_Q: + self.app.pdf_tool.run() + + # Save Project + if key == QtCore.Qt.Key_S: + widget_name = self.plot_tab_area.currentWidget().objectName() + if widget_name == 'preferences_tab': + self.app.preferencesUiManager.on_save_button(save_to_file=False) + return + + if widget_name == 'database_tab': + # Tools DB saved, update flag + self.app.tools_db_changed_flag = False + self.app.tools_db_tab.on_save_tools_db() + return + + self.app.on_file_saveproject() + + # Toggle Plot Area + if key == QtCore.Qt.Key_F10 or key == 'F10': + self.on_toggle_plotarea() + + return + # SHIFT + elif modifiers == QtCore.Qt.ShiftModifier: + + # Copy Object Name + if key == QtCore.Qt.Key_C: + self.app.on_copy_name() + + # Toggle Code Editor + if key == QtCore.Qt.Key_E: + self.app.on_toggle_code_editor() + + # Toggle axis + if key == QtCore.Qt.Key_G: + self.app.on_toggle_axis() + + # Toggle HUD (Heads-Up Display) + if key == QtCore.Qt.Key_H: + self.app.on_toggle_hud() + # Locate in Object + if key == QtCore.Qt.Key_J: + self.app.on_locate(obj=self.app.collection.get_active()) + + # Run Distance Minimum Tool + if key == QtCore.Qt.Key_M: + self.app.distance_min_tool.run() + return + + # Open Preferences Window + if key == QtCore.Qt.Key_P: + self.app.on_preferences() + return + + # Rotate Object by 90 degree CCW + if key == QtCore.Qt.Key_R: + self.app.on_rotate(silent=True, preset=-float(self.app.defaults['tools_transform_rotate'])) + return + + # Run a Script + if key == QtCore.Qt.Key_S: + self.app.on_filerunscript() + return + + # Toggle Workspace + if key == QtCore.Qt.Key_W: + self.app.on_workspace_toggle() + return + + # Skew on X axis + if key == QtCore.Qt.Key_X: + self.app.on_skewx() + return + + # Skew on Y axis + if key == QtCore.Qt.Key_Y: + self.app.on_skewy() + return + # ALT + elif modifiers == QtCore.Qt.AltModifier: + # Eanble all plots + if key == Qt.Key_1: + self.app.enable_all_plots() + + # Disable all plots + if key == Qt.Key_2: + self.app.disable_all_plots() + + # Disable all other plots + if key == Qt.Key_3: + self.app.disable_other_plots() + + # Align in Object Tool + if key == QtCore.Qt.Key_A: + self.app.align_objects_tool.run(toggle=True) + + # Calculator Tool + if key == QtCore.Qt.Key_C: + self.app.calculator_tool.run(toggle=True) + + # 2-Sided PCB Tool + if key == QtCore.Qt.Key_D: + self.app.dblsidedtool.run(toggle=True) + return + + # Calibration Tool + if key == QtCore.Qt.Key_E: + self.app.cal_exc_tool.run(toggle=True) + return + + # Copper Thieving Tool + if key == QtCore.Qt.Key_F: + self.app.copper_thieving_tool.run(toggle=True) + return + + # Toggle Grid lines + if key == QtCore.Qt.Key_G: + self.app.on_toggle_grid_lines() + return + + # Align in Object Tool + if key == QtCore.Qt.Key_H: + self.app.punch_tool.run(toggle=True) + + # Extract Drills Tool + if key == QtCore.Qt.Key_I: + self.app.edrills_tool.run(toggle=True) + + # Fiducials Tool + if key == QtCore.Qt.Key_J: + self.app.fiducial_tool.run(toggle=True) + return + + # Solder Paste Dispensing Tool + if key == QtCore.Qt.Key_K: + self.app.paste_tool.run(toggle=True) + return + + # Film Tool + if key == QtCore.Qt.Key_L: + self.app.film_tool.run(toggle=True) + return + + # Corner Markers Tool + if key == QtCore.Qt.Key_M: + self.app.corners_tool.run(toggle=True) + return + + # Non-Copper Clear Tool + if key == QtCore.Qt.Key_N: + self.app.ncclear_tool.run(toggle=True) + return + + # Optimal Tool + if key == QtCore.Qt.Key_O: + self.app.optimal_tool.run(toggle=True) + return + + # Paint Tool + if key == QtCore.Qt.Key_P: + self.app.paint_tool.run(toggle=True) + return + + # QRCode Tool + if key == QtCore.Qt.Key_Q: + self.app.qrcode_tool.run() + return + + # Rules Tool + if key == QtCore.Qt.Key_R: + self.app.rules_tool.run(toggle=True) + return + + # View Source Object Content + if key == QtCore.Qt.Key_S: + self.app.on_view_source() + return + + # Transformation Tool + if key == QtCore.Qt.Key_T: + self.app.transform_tool.run(toggle=True) + return + + # Substract Tool + if key == QtCore.Qt.Key_W: + self.app.sub_tool.run(toggle=True) + return + + # Cutout Tool + if key == QtCore.Qt.Key_X: + self.app.cutout_tool.run(toggle=True) + return + + # Panelize Tool + if key == QtCore.Qt.Key_Z: + self.app.panelize_tool.run(toggle=True) + return + + # Toggle Fullscreen + if key == QtCore.Qt.Key_F10 or key == 'F10': + self.on_fullscreen() + return + # NO MODIFIER + elif modifiers == QtCore.Qt.NoModifier: + # Open Manual + if key == QtCore.Qt.Key_F1 or key == 'F1': + webbrowser.open(self.app.manual_url) + + # Show shortcut list + if key == QtCore.Qt.Key_F3 or key == 'F3': + self.app.on_shortcut_list() + + # Open Video Help + if key == QtCore.Qt.Key_F4 or key == 'F4': + webbrowser.open(self.app.video_url) + + # Open Video Help + if key == QtCore.Qt.Key_F5 or key == 'F5': + self.app.plot_all() + + # Switch to Project Tab + if key == QtCore.Qt.Key_1: + self.app.on_select_tab('project') + + # Switch to Selected Tab + if key == QtCore.Qt.Key_2: + self.app.on_select_tab('selected') + + # Switch to Tool Tab + if key == QtCore.Qt.Key_3: + self.app.on_select_tab('tool') + + # Delete from PyQt + # It's meant to make a difference between delete objects and delete tools in + # Geometry Selected tool table + if key == QtCore.Qt.Key_Delete and matplotlib_key_flag is False: + widget_name = self.plot_tab_area.currentWidget().objectName() + if widget_name == 'database_tab': + # Tools DB saved, update flag + self.app.tools_db_changed_flag = True + self.app.tools_db_tab.on_tool_delete() + return + + self.app.on_delete_keypress() + + # Delete from canvas + if key == 'Delete': + # Delete via the application to + # ensure cleanup of the GUI + if active: + active.app.on_delete() + + # Escape = Deselect All + if key == QtCore.Qt.Key_Escape or key == 'Escape': + self.app.on_deselect_all() + + # if in full screen, exit to normal view + if self.toggle_fscreen is True: + self.on_fullscreen(disable=True) + + # try to disconnect the slot from Set Origin + try: + self.app.plotcanvas.graph_event_disconnect('mouse_press', self.app.on_set_zero_click) + except TypeError: + pass + self.app.inform.emit("") + + # Space = Toggle Active/Inactive + if key == QtCore.Qt.Key_Space: + for select in selected: + select.ui.plot_cb.toggle() + self.app.collection.update_view() + self.app.delete_selection_shape() + + # Select the object in the Tree above the current one + if key == QtCore.Qt.Key_Up: + # make sure it works only for the Project Tab who is an instance of KeySensitiveListView + focused_wdg = QtWidgets.QApplication.focusWidget() + if isinstance(focused_wdg, KeySensitiveListView): + self.app.collection.set_all_inactive() + if active is None: + return + active_name = active.options['name'] + active_index = names_list.index(active_name) + if active_index == 0: + self.app.collection.set_active(names_list[-1]) + else: + self.app.collection.set_active(names_list[active_index-1]) + + # Select the object in the Tree below the current one + if key == QtCore.Qt.Key_Down: + # make sure it works only for the Project Tab who is an instance of KeySensitiveListView + focused_wdg = QtWidgets.QApplication.focusWidget() + if isinstance(focused_wdg, KeySensitiveListView): + self.app.collection.set_all_inactive() + if active is None: + return + active_name = active.options['name'] + active_index = names_list.index(active_name) + if active_index == len(names_list) - 1: + self.app.collection.set_active(names_list[0]) + else: + self.app.collection.set_active(names_list[active_index+1]) + + # New Geometry + if key == QtCore.Qt.Key_B: + self.app.new_gerber_object() + + # New Geometry + if key == QtCore.Qt.Key_D: + self.app.new_document_object() + + # Copy Object Name + if key == QtCore.Qt.Key_E: + self.app.object2editor() + + # Grid toggle + if key == QtCore.Qt.Key_G: + self.app.ui.grid_snap_btn.trigger() + + # Jump to coords + if key == QtCore.Qt.Key_J: + self.app.on_jump_to() + + # New Excellon + if key == QtCore.Qt.Key_L: + self.app.new_excellon_object() + + # Move tool toggle + if key == QtCore.Qt.Key_M: + self.app.move_tool.toggle() + + # New Geometry + if key == QtCore.Qt.Key_N: + self.app.new_geometry_object() + + # Set Origin + if key == QtCore.Qt.Key_O: + self.app.on_set_origin() + return + + # Properties Tool + if key == QtCore.Qt.Key_P: + self.app.properties_tool.run() + return + + # Change Units + if key == QtCore.Qt.Key_Q: + # if self.app.defaults["units"] == 'MM': + # self.app.ui.general_defaults_form.general_app_group.units_radio.set_value("IN") + # else: + # self.app.ui.general_defaults_form.general_app_group.units_radio.set_value("MM") + # self.app.on_toggle_units(no_pref=True) + self.app.on_toggle_units_click() + + # Rotate Object by 90 degree CW + if key == QtCore.Qt.Key_R: + self.app.on_rotate(silent=True, preset=self.app.defaults['tools_transform_rotate']) + + # Shell toggle + if key == QtCore.Qt.Key_S: + self.toggle_shell_ui() + + # Add a Tool from shortcut + if key == QtCore.Qt.Key_T: + widget_name = self.plot_tab_area.currentWidget().objectName() + if widget_name == 'database_tab': + # Tools DB saved, update flag + self.app.tools_db_changed_flag = True + self.app.tools_db_tab.on_tool_add() + return + + self.app.on_tool_add_keypress() + + # Zoom Fit + if key == QtCore.Qt.Key_V: + self.app.on_zoom_fit(None) + + # Mirror on X the selected object(s) + if key == QtCore.Qt.Key_X: + self.app.on_flipx() + + # Mirror on Y the selected object(s) + if key == QtCore.Qt.Key_Y: + self.app.on_flipy() + + # Zoom In + if key == QtCore.Qt.Key_Equal: + self.app.plotcanvas.zoom(1 / self.app.defaults['global_zoom_ratio'], self.app.mouse) + + # Zoom Out + if key == QtCore.Qt.Key_Minus: + self.app.plotcanvas.zoom(self.app.defaults['global_zoom_ratio'], self.app.mouse) + + # toggle display of Notebook area + if key == QtCore.Qt.Key_QuoteLeft: + self.on_toggle_notebook() + + return + elif self.app.call_source == 'geo_editor': + # CTRL + if modifiers == QtCore.Qt.ControlModifier: + # save (update) the current geometry and return to the App + if key == QtCore.Qt.Key_S or key == 'S': + self.app.editor2object() + return + + # toggle the measurement tool + if key == QtCore.Qt.Key_M or key == 'M': + self.app.distance_tool.run() + return + + # Cut Action Tool + if key == QtCore.Qt.Key_X or key == 'X': + if self.app.geo_editor.get_selected() is not None: + self.app.geo_editor.cutpath() + else: + msg = _('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.') + + messagebox = QtWidgets.QMessageBox() + messagebox.setText(msg) + messagebox.setWindowTitle(_("Warning")) + messagebox.setWindowIcon(QtGui.QIcon(self.app.resource_location + '/warning.png')) + messagebox.setStandardButtons(QtWidgets.QMessageBox.Ok) + messagebox.setDefaultButton(QtWidgets.QMessageBox.Ok) + messagebox.exec_() + return + # SHIFT + elif modifiers == QtCore.Qt.ShiftModifier: + # Run Distance Minimum Tool + if key == QtCore.Qt.Key_M or key == 'M': + self.app.distance_min_tool.run() + return + + # Skew on X axis + if key == QtCore.Qt.Key_X or key == 'X': + self.app.geo_editor.transform_tool.on_skewx_key() + return + + # Skew on Y axis + if key == QtCore.Qt.Key_Y or key == 'Y': + self.app.geo_editor.transform_tool.on_skewy_key() + return + # ALT + elif modifiers == QtCore.Qt.AltModifier: + + # Transformation Tool + if key == QtCore.Qt.Key_R or key == 'R': + self.app.geo_editor.select_tool('transform') + return + + # Offset on X axis + if key == QtCore.Qt.Key_X or key == 'X': + self.app.geo_editor.transform_tool.on_offx_key() + return + + # Offset on Y axis + if key == QtCore.Qt.Key_Y or key == 'Y': + self.app.geo_editor.transform_tool.on_offy_key() + return + # NO MODIFIER + elif modifiers == QtCore.Qt.NoModifier: + # toggle display of Notebook area + if key == QtCore.Qt.Key_QuoteLeft or key == '`': + self.on_toggle_notebook() + + # Finish the current action. Use with tools that do not + # complete automatically, like a polygon or path. + if key == QtCore.Qt.Key_Enter or key == 'Enter': + if isinstance(self.app.geo_editor.active_tool, FCShapeTool): + if self.app.geo_editor.active_tool.name == 'rotate': + self.app.geo_editor.active_tool.make() + + if self.app.geo_editor.active_tool.complete: + self.app.geo_editor.on_shape_complete() + self.app.inform.emit('[success] %s' % _("Done.")) + # automatically make the selection tool active after completing current action + self.app.geo_editor.select_tool('select') + return + else: + self.app.geo_editor.active_tool.click( + self.app.geo_editor.snap(self.app.geo_editor.x, self.app.geo_editor.y)) + + self.app.geo_editor.active_tool.make() + + if self.app.geo_editor.active_tool.complete: + self.app.geo_editor.on_shape_complete() + self.app.inform.emit('[success] %s' % _("Done.")) + # automatically make the selection tool active after completing current action + self.app.geo_editor.select_tool('select') + + # Abort the current action + if key == QtCore.Qt.Key_Escape or key == 'Escape': + # self.on_tool_select("select") + self.app.inform.emit('[WARNING_NOTCL] %s' % _("Cancelled.")) + + self.app.geo_editor.delete_utility_geometry() + + self.app.geo_editor.active_tool.clean_up() + + self.app.geo_editor.select_tool('select') + + # hide the notebook + self.app.ui.splitter.setSizes([0, 1]) + return + + # Delete selected object + if key == QtCore.Qt.Key_Delete or key == 'Delete': + self.app.geo_editor.delete_selected() + self.app.geo_editor.replot() + + # Rotate + if key == QtCore.Qt.Key_Space or key == 'Space': + self.app.geo_editor.transform_tool.on_rotate_key() + + # Zoom Out + if key == QtCore.Qt.Key_Minus or key == '-': + self.app.plotcanvas.zoom(1 / self.app.defaults['global_zoom_ratio'], + [self.app.geo_editor.snap_x, self.app.geo_editor.snap_y]) + + # Zoom In + if key == QtCore.Qt.Key_Equal or key == '=': + self.app.plotcanvas.zoom(self.app.defaults['global_zoom_ratio'], + [self.app.geo_editor.snap_x, self.app.geo_editor.snap_y]) + + # Switch to Project Tab + if key == QtCore.Qt.Key_1 or key == '1': + self.app.on_select_tab('project') + + # Switch to Selected Tab + if key == QtCore.Qt.Key_2 or key == '2': + self.app.on_select_tab('selected') + + # Switch to Tool Tab + if key == QtCore.Qt.Key_3 or key == '3': + self.app.on_select_tab('tool') + + # Grid Snap + if key == QtCore.Qt.Key_G or key == 'G': + self.app.ui.grid_snap_btn.trigger() + + # make sure that the cursor shape is enabled/disabled, too + if self.app.geo_editor.options['grid_snap'] is True: + self.app.app_cursor.enabled = True + else: + self.app.app_cursor.enabled = False + + # Corner Snap + if key == QtCore.Qt.Key_K or key == 'K': + self.app.geo_editor.on_corner_snap() + + if key == QtCore.Qt.Key_V or key == 'V': + self.app.on_zoom_fit(None) + + # we do this so we can reuse the following keys while inside a Tool + # the above keys are general enough so were left outside + if self.app.geo_editor.active_tool is not None and self.geo_select_btn.isChecked() is False: + response = self.app.geo_editor.active_tool.on_key(key=key) + if response is not None: + self.app.inform.emit(response) + else: + # Arc Tool + if key == QtCore.Qt.Key_A or key == 'A': + self.app.geo_editor.select_tool('arc') + + # Buffer + if key == QtCore.Qt.Key_B or key == 'B': + self.app.geo_editor.select_tool('buffer') + + # Copy + if key == QtCore.Qt.Key_C or key == 'C': + self.app.geo_editor.on_copy_click() + + # Substract Tool + if key == QtCore.Qt.Key_E or key == 'E': + if self.app.geo_editor.get_selected() is not None: + self.app.geo_editor.intersection() + else: + msg = _("Please select geometry items \n" + "on which to perform Intersection Tool.") + + messagebox = QtWidgets.QMessageBox() + messagebox.setText(msg) + messagebox.setWindowTitle(_("Warning")) + messagebox.setWindowIcon(QtGui.QIcon(self.app.resource_location + '/warning.png')) + messagebox.setStandardButtons(QtWidgets.QMessageBox.Ok) + messagebox.setDefaultButton(QtWidgets.QMessageBox.Ok) + messagebox.exec_() + + # Paint + if key == QtCore.Qt.Key_I or key == 'I': + self.app.geo_editor.select_tool('paint') + + # Jump to coords + if key == QtCore.Qt.Key_J or key == 'J': + self.app.on_jump_to() + + # Move + if key == QtCore.Qt.Key_M or key == 'M': + self.app.geo_editor.on_move_click() + + # Polygon Tool + if key == QtCore.Qt.Key_N or key == 'N': + self.app.geo_editor.select_tool('polygon') + + # Circle Tool + if key == QtCore.Qt.Key_O or key == 'O': + self.app.geo_editor.select_tool('circle') + + # Path Tool + if key == QtCore.Qt.Key_P or key == 'P': + self.app.geo_editor.select_tool('path') + + # Rectangle Tool + if key == QtCore.Qt.Key_R or key == 'R': + self.app.geo_editor.select_tool('rectangle') + + # Substract Tool + if key == QtCore.Qt.Key_S or key == 'S': + if self.app.geo_editor.get_selected() is not None: + self.app.geo_editor.subtract() + else: + msg = _( + "Please select geometry items \n" + "on which to perform Substraction Tool.") + + messagebox = QtWidgets.QMessageBox() + messagebox.setText(msg) + messagebox.setWindowTitle(_("Warning")) + messagebox.setWindowIcon(QtGui.QIcon(self.app.resource_location + '/warning.png')) + messagebox.setStandardButtons(QtWidgets.QMessageBox.Ok) + messagebox.setDefaultButton(QtWidgets.QMessageBox.Ok) + messagebox.exec_() + + # Add Text Tool + if key == QtCore.Qt.Key_T or key == 'T': + self.app.geo_editor.select_tool('text') + + # Substract Tool + if key == QtCore.Qt.Key_U or key == 'U': + if self.app.geo_editor.get_selected() is not None: + self.app.geo_editor.union() + else: + msg = _("Please select geometry items \n" + "on which to perform union.") + + messagebox = QtWidgets.QMessageBox() + messagebox.setText(msg) + messagebox.setWindowTitle(_("Warning")) + messagebox.setWindowIcon(QtGui.QIcon(self.app.resource_location + '/warning.png')) + messagebox.setStandardButtons(QtWidgets.QMessageBox.Ok) + messagebox.setDefaultButton(QtWidgets.QMessageBox.Ok) + messagebox.exec_() + + # Flip on X axis + if key == QtCore.Qt.Key_X or key == 'X': + self.app.geo_editor.transform_tool.on_flipx() + return + + # Flip on Y axis + if key == QtCore.Qt.Key_Y or key == 'Y': + self.app.geo_editor.transform_tool.on_flipy() + return + + # Show Shortcut list + if key == 'F3': + self.app.on_shortcut_list() + elif self.app.call_source == 'grb_editor': + # CTRL + if modifiers == QtCore.Qt.ControlModifier: + # Eraser Tool + if key == QtCore.Qt.Key_E or key == 'E': + self.app.grb_editor.on_eraser() + return + + # save (update) the current geometry and return to the App + if key == QtCore.Qt.Key_S or key == 'S': + self.app.editor2object() + return + + # toggle the measurement tool + if key == QtCore.Qt.Key_M or key == 'M': + self.app.distance_tool.run() + return + # SHIFT + elif modifiers == QtCore.Qt.ShiftModifier: + # Run Distance Minimum Tool + if key == QtCore.Qt.Key_M or key == 'M': + self.app.distance_min_tool.run() + return + # ALT + elif modifiers == QtCore.Qt.AltModifier: + # Mark Area Tool + if key == QtCore.Qt.Key_A or key == 'A': + self.app.grb_editor.on_markarea() + return + + # Poligonize Tool + if key == QtCore.Qt.Key_N or key == 'N': + self.app.grb_editor.on_poligonize() + return + # Transformation Tool + if key == QtCore.Qt.Key_R or key == 'R': + self.app.grb_editor.on_transform() + return + # NO MODIFIER + elif modifiers == QtCore.Qt.NoModifier: + # Abort the current action + if key == QtCore.Qt.Key_Escape or key == 'Escape': + # self.on_tool_select("select") + self.app.inform.emit('[WARNING_NOTCL] %s' % _("Cancelled.")) + + self.app.grb_editor.delete_utility_geometry() + + # self.app.grb_editor.plot_all() + self.app.grb_editor.active_tool.clean_up() + self.app.grb_editor.select_tool('select') + return + + # Delete selected object if delete key event comes out of canvas + if key == 'Delete': + self.app.grb_editor.launched_from_shortcuts = True + if self.app.grb_editor.selected: + self.app.grb_editor.delete_selected() + self.app.grb_editor.plot_all() + else: + self.app.inform.emit('[WARNING_NOTCL] %s' % _("Cancelled. Nothing selected to delete.")) + return + + # Delete aperture in apertures table if delete key event comes from the Selected Tab + if key == QtCore.Qt.Key_Delete: + self.app.grb_editor.launched_from_shortcuts = True + self.app.grb_editor.on_aperture_delete() + return + + if key == QtCore.Qt.Key_Minus or key == '-': + self.app.grb_editor.launched_from_shortcuts = True + self.app.plotcanvas.zoom(1 / self.app.defaults['global_zoom_ratio'], + [self.app.grb_editor.snap_x, self.app.grb_editor.snap_y]) + return + + if key == QtCore.Qt.Key_Equal or key == '=': + self.app.grb_editor.launched_from_shortcuts = True + self.app.plotcanvas.zoom(self.app.defaults['global_zoom_ratio'], + [self.app.grb_editor.snap_x, self.app.grb_editor.snap_y]) + return + + # toggle display of Notebook area + if key == QtCore.Qt.Key_QuoteLeft or key == '`': + self.app.grb_editor.launched_from_shortcuts = True + self.on_toggle_notebook() + return + + # Rotate + if key == QtCore.Qt.Key_Space or key == 'Space': + self.app.grb_editor.transform_tool.on_rotate_key() + + # Switch to Project Tab + if key == QtCore.Qt.Key_1 or key == '1': + self.app.grb_editor.launched_from_shortcuts = True + self.app.on_select_tab('project') + return + + # Switch to Selected Tab + if key == QtCore.Qt.Key_2 or key == '2': + self.app.grb_editor.launched_from_shortcuts = True + self.app.on_select_tab('selected') + return + + # Switch to Tool Tab + if key == QtCore.Qt.Key_3 or key == '3': + self.app.grb_editor.launched_from_shortcuts = True + self.app.on_select_tab('tool') + return + + # we do this so we can reuse the following keys while inside a Tool + # the above keys are general enough so were left outside + if self.app.grb_editor.active_tool is not None and self.grb_select_btn.isChecked() is False: + response = self.app.grb_editor.active_tool.on_key(key=key) + if response is not None: + self.app.inform.emit(response) + else: + # Add Array of pads + if key == QtCore.Qt.Key_A or key == 'A': + self.app.grb_editor.launched_from_shortcuts = True + self.app.inform.emit("Click on target point.") + self.app.ui.add_pad_ar_btn.setChecked(True) + + self.app.grb_editor.x = self.app.mouse[0] + self.app.grb_editor.y = self.app.mouse[1] + + self.app.grb_editor.select_tool('array') + return + + # Scale Tool + if key == QtCore.Qt.Key_B or key == 'B': + self.app.grb_editor.launched_from_shortcuts = True + self.app.grb_editor.select_tool('buffer') + return + + # Copy + if key == QtCore.Qt.Key_C or key == 'C': + self.app.grb_editor.launched_from_shortcuts = True + if self.app.grb_editor.selected: + self.app.inform.emit(_("Click on target point.")) + self.app.ui.aperture_copy_btn.setChecked(True) + self.app.grb_editor.on_tool_select('copy') + self.app.grb_editor.active_tool.set_origin( + (self.app.grb_editor.snap_x, self.app.grb_editor.snap_y)) + else: + self.app.inform.emit('[WARNING_NOTCL] %s' % _("Cancelled. Nothing selected to copy.")) + return + + # Add Disc Tool + if key == QtCore.Qt.Key_D or key == 'D': + self.app.grb_editor.launched_from_shortcuts = True + self.app.grb_editor.select_tool('disc') + return + + # Add SemiDisc Tool + if key == QtCore.Qt.Key_E or key == 'E': + self.app.grb_editor.launched_from_shortcuts = True + self.app.grb_editor.select_tool('semidisc') + return + + # Grid Snap + if key == QtCore.Qt.Key_G or key == 'G': + self.app.grb_editor.launched_from_shortcuts = True + # make sure that the cursor shape is enabled/disabled, too + if self.app.grb_editor.options['grid_snap'] is True: + self.app.app_cursor.enabled = False + else: + self.app.app_cursor.enabled = True + self.app.ui.grid_snap_btn.trigger() + return + + # Jump to coords + if key == QtCore.Qt.Key_J or key == 'J': + self.app.on_jump_to() + + # Corner Snap + if key == QtCore.Qt.Key_K or key == 'K': + self.app.grb_editor.launched_from_shortcuts = True + self.app.ui.corner_snap_btn.trigger() + return + + # Move + if key == QtCore.Qt.Key_M or key == 'M': + self.app.grb_editor.launched_from_shortcuts = True + if self.app.grb_editor.selected: + self.app.inform.emit(_("Click on target point.")) + self.app.ui.aperture_move_btn.setChecked(True) + self.app.grb_editor.on_tool_select('move') + self.app.grb_editor.active_tool.set_origin( + (self.app.grb_editor.snap_x, self.app.grb_editor.snap_y)) + else: + self.app.inform.emit('[WARNING_NOTCL] %s' % _("Cancelled. Nothing selected to move.")) + return + + # Add Region Tool + if key == QtCore.Qt.Key_N or key == 'N': + self.app.grb_editor.launched_from_shortcuts = True + self.app.grb_editor.select_tool('region') + return + + # Add Pad Tool + if key == QtCore.Qt.Key_P or key == 'P': + self.app.grb_editor.launched_from_shortcuts = True + self.app.inform.emit(_("Click on target point.")) + self.app.ui.add_pad_ar_btn.setChecked(True) + + self.app.grb_editor.x = self.app.mouse[0] + self.app.grb_editor.y = self.app.mouse[1] + + self.app.grb_editor.select_tool('pad') + return + + # Scale Tool + if key == QtCore.Qt.Key_S or key == 'S': + self.app.grb_editor.launched_from_shortcuts = True + self.app.grb_editor.select_tool('scale') + return + + # Add Track + if key == QtCore.Qt.Key_T or key == 'T': + self.app.grb_editor.launched_from_shortcuts = True + # ## Current application units in Upper Case + self.app.grb_editor.select_tool('track') + return + + # Zoom fit + if key == QtCore.Qt.Key_V or key == 'V': + self.app.grb_editor.launched_from_shortcuts = True + self.app.grb_editor.on_zoom_fit() + return + + # Show Shortcut list + if key == QtCore.Qt.Key_F3 or key == 'F3': + self.app.on_shortcut_list() + return + elif self.app.call_source == 'exc_editor': + # CTRL + if modifiers == QtCore.Qt.ControlModifier: + # save (update) the current geometry and return to the App + if key == QtCore.Qt.Key_S or key == 'S': + self.app.editor2object() + return + + # toggle the measurement tool + if key == QtCore.Qt.Key_M or key == 'M': + self.app.distance_tool.run() + return + # SHIFT + elif modifiers == QtCore.Qt.ShiftModifier: + # Run Distance Minimum Tool + if key == QtCore.Qt.Key_M or key == 'M': + self.app.distance_min_tool.run() + return + # ALT + elif modifiers == QtCore.Qt.AltModifier: + pass + # NO MODIFIER + elif modifiers == QtCore.Qt.NoModifier: + # Abort the current action + if key == QtCore.Qt.Key_Escape or key == 'Escape': + self.app.inform.emit('[WARNING_NOTCL] %s' % _("Cancelled.")) + + self.app.exc_editor.delete_utility_geometry() + + self.app.exc_editor.active_tool.clean_up() + + self.app.exc_editor.select_tool('drill_select') + return + + # Delete selected object if delete key event comes out of canvas + if key == 'Delete': + self.app.exc_editor.launched_from_shortcuts = True + if self.app.exc_editor.selected: + self.app.exc_editor.delete_selected() + self.app.exc_editor.replot() + else: + self.app.inform.emit('[WARNING_NOTCL] %s' % _("Cancelled. Nothing selected to delete.")) + return + + # Delete tools in tools table if delete key event comes from the Selected Tab + if key == QtCore.Qt.Key_Delete: + self.app.exc_editor.launched_from_shortcuts = True + self.app.exc_editor.on_tool_delete() + return + + if key == QtCore.Qt.Key_Minus or key == '-': + self.app.exc_editor.launched_from_shortcuts = True + self.app.plotcanvas.zoom(1 / self.app.defaults['global_zoom_ratio'], + [self.app.exc_editor.snap_x, self.app.exc_editor.snap_y]) + return + + if key == QtCore.Qt.Key_Equal or key == '=': + self.app.exc_editor.launched_from_shortcuts = True + self.app.plotcanvas.zoom(self.app.defaults['global_zoom_ratio'], + [self.app.exc_editor.snap_x, self.app.exc_editor.snap_y]) + return + + # toggle display of Notebook area + if key == QtCore.Qt.Key_QuoteLeft or key == '`': + self.app.exc_editor.launched_from_shortcuts = True + self.on_toggle_notebook() + return + + # Switch to Project Tab + if key == QtCore.Qt.Key_1 or key == '1': + self.app.exc_editor.launched_from_shortcuts = True + self.app.on_select_tab('project') + return + + # Switch to Selected Tab + if key == QtCore.Qt.Key_2 or key == '2': + self.app.exc_editor.launched_from_shortcuts = True + self.app.on_select_tab('selected') + return + + # Switch to Tool Tab + if key == QtCore.Qt.Key_3 or key == '3': + self.app.exc_editor.launched_from_shortcuts = True + self.app.on_select_tab('tool') + return + + # Grid Snap + if key == QtCore.Qt.Key_G or key == 'G': + self.app.exc_editor.launched_from_shortcuts = True + # make sure that the cursor shape is enabled/disabled, too + if self.app.exc_editor.options['grid_snap'] is True: + self.app.app_cursor.enabled = False + else: + self.app.app_cursor.enabled = True + self.app.ui.grid_snap_btn.trigger() + return + + # Corner Snap + if key == QtCore.Qt.Key_K or key == 'K': + self.app.exc_editor.launched_from_shortcuts = True + self.app.ui.corner_snap_btn.trigger() + return + + # Zoom Fit + if key == QtCore.Qt.Key_V or key == 'V': + self.app.exc_editor.launched_from_shortcuts = True + self.app.on_zoom_fit(None) + return + + # Add Slot Hole Tool + if key == QtCore.Qt.Key_W or key == 'W': + self.app.exc_editor.launched_from_shortcuts = True + self.app.inform.emit(_("Click on target point.")) + self.app.ui.add_slot_btn.setChecked(True) + + self.app.exc_editor.x = self.app.mouse[0] + self.app.exc_editor.y = self.app.mouse[1] + + self.app.exc_editor.select_tool('slot_add') + return + + # Propagate to tool + + # Show Shortcut list + if key == QtCore.Qt.Key_F3 or key == 'F3': + self.app.on_shortcut_list() + return + + # we do this so we can reuse the following keys while inside a Tool + # the above keys are general enough so were left outside + if self.app.exc_editor.active_tool is not None and self.select_drill_btn.isChecked() is False: + response = self.app.exc_editor.active_tool.on_key(key=key) + if response is not None: + self.app.inform.emit(response) + else: + # Add Array of Drill Hole Tool + if key == QtCore.Qt.Key_A or key == 'A': + self.app.exc_editor.launched_from_shortcuts = True + self.app.inform.emit("Click on target point.") + self.app.ui.add_drill_array_btn.setChecked(True) + + self.app.exc_editor.x = self.app.mouse[0] + self.app.exc_editor.y = self.app.mouse[1] + + self.app.exc_editor.select_tool('drill_array') + return + + # Copy + if key == QtCore.Qt.Key_C or key == 'C': + self.app.exc_editor.launched_from_shortcuts = True + if self.app.exc_editor.selected: + self.app.inform.emit(_("Click on target point.")) + self.app.ui.copy_drill_btn.setChecked(True) + self.app.exc_editor.on_tool_select('drill_copy') + self.app.exc_editor.active_tool.set_origin( + (self.app.exc_editor.snap_x, self.app.exc_editor.snap_y)) + else: + self.app.inform.emit('[WARNING_NOTCL] %s' % _("Cancelled. Nothing selected to copy.")) + return + + # Add Drill Hole Tool + if key == QtCore.Qt.Key_D or key == 'D': + self.app.exc_editor.launched_from_shortcuts = True + self.app.inform.emit(_("Click on target point.")) + self.app.ui.add_drill_btn.setChecked(True) + + self.app.exc_editor.x = self.app.mouse[0] + self.app.exc_editor.y = self.app.mouse[1] + + self.app.exc_editor.select_tool('drill_add') + return + + # Jump to coords + if key == QtCore.Qt.Key_J or key == 'J': + self.app.on_jump_to() + + # Move + if key == QtCore.Qt.Key_M or key == 'M': + self.app.exc_editor.launched_from_shortcuts = True + if self.app.exc_editor.selected: + self.app.inform.emit(_("Click on target point.")) + self.app.ui.move_drill_btn.setChecked(True) + self.app.exc_editor.on_tool_select('drill_move') + self.app.exc_editor.active_tool.set_origin( + (self.app.exc_editor.snap_x, self.app.exc_editor.snap_y)) + else: + self.app.inform.emit('[WARNING_NOTCL] %s' % _("Cancelled. Nothing selected to move.")) + return + + # Add Array of Slots Hole Tool + if key == QtCore.Qt.Key_Q or key == 'Q': + self.app.exc_editor.launched_from_shortcuts = True + self.app.inform.emit("Click on target point.") + self.app.ui.add_slot_array_btn.setChecked(True) + + self.app.exc_editor.x = self.app.mouse[0] + self.app.exc_editor.y = self.app.mouse[1] + + self.app.exc_editor.select_tool('slot_array') + return + + # Resize Tool + if key == QtCore.Qt.Key_R or key == 'R': + self.app.exc_editor.launched_from_shortcuts = True + self.app.exc_editor.select_tool('drill_resize') + return + + # Add Tool + if key == QtCore.Qt.Key_T or key == 'T': + self.app.exc_editor.launched_from_shortcuts = True + # ## Current application units in Upper Case + self.units = self.general_defaults_form.general_app_group.units_radio.get_value().upper() + tool_add_popup = FCInputDialog(title=_("New Tool ..."), + text='%s:' % _('Enter a Tool Diameter'), + min=0.0000, max=99.9999, decimals=4) + tool_add_popup.setWindowIcon(QtGui.QIcon(self.app.resource_location + '/letter_t_32.png')) + + val, ok = tool_add_popup.get_value() + if ok: + self.app.exc_editor.on_tool_add(tooldia=val) + formated_val = '%.*f' % (self.decimals, float(val)) + self.app.inform.emit( + '[success] %s: %s %s' % (_("Added new tool with dia"), formated_val, str(self.units)) + ) + else: + self.app.inform.emit('[WARNING_NOTCL] %s' % _("Adding Tool cancelled ...")) + return + elif self.app.call_source == 'measurement': + if modifiers == QtCore.Qt.ControlModifier: + pass + elif modifiers == QtCore.Qt.AltModifier: + pass + elif modifiers == QtCore.Qt.ShiftModifier: + pass + # NO MODIFIER + elif modifiers == QtCore.Qt.NoModifier: + if key == QtCore.Qt.Key_Escape or key == 'Escape': + # abort the measurement action + self.app.distance_tool.deactivate_measure_tool() + self.app.inform.emit(_("Distance Tool exit...")) + return + + if key == QtCore.Qt.Key_G or key == 'G': + self.app.ui.grid_snap_btn.trigger() + return + + # Jump to coords + if key == QtCore.Qt.Key_J or key == 'J': + self.app.on_jump_to() + elif self.app.call_source == 'qrcode_tool': + # CTRL + ALT + if modifiers == QtCore.Qt.ControlModifier | QtCore.Qt.AltModifier: + if key == QtCore.Qt.Key_X: + self.app.abort_all_tasks() + return + + elif modifiers == QtCore.Qt.ControlModifier: + pass + elif modifiers == QtCore.Qt.ShiftModifier: + pass + elif modifiers == QtCore.Qt.AltModifier: + pass + # NO MODIFIER + elif modifiers == QtCore.Qt.NoModifier: + # Escape = Deselect All + if key == QtCore.Qt.Key_Escape or key == 'Escape': + self.app.qrcode_tool.on_exit() + + # Grid toggle + if key == QtCore.Qt.Key_G: + self.app.ui.grid_snap_btn.trigger() + + # Jump to coords + if key == QtCore.Qt.Key_J: + self.app.on_jump_to() + elif self.app.call_source == 'copper_thieving_tool': + # CTRL + ALT + if modifiers == QtCore.Qt.ControlModifier | QtCore.Qt.AltModifier: + if key == QtCore.Qt.Key_X: + self.app.abort_all_tasks() + return + elif modifiers == QtCore.Qt.ControlModifier: + pass + elif modifiers == QtCore.Qt.ShiftModifier: + pass + elif modifiers == QtCore.Qt.AltModifier: + pass + # NO MODIFIER + elif modifiers == QtCore.Qt.NoModifier: + # Escape = Deselect All + if key == QtCore.Qt.Key_Escape or key == 'Escape': + self.app.copperfill_tool.on_exit() + + # Grid toggle + if key == QtCore.Qt.Key_G: + self.app.ui.grid_snap_btn.trigger() + + # Jump to coords + if key == QtCore.Qt.Key_J: + self.app.on_jump_to() + elif self.app.call_source == 'geometry': + if modifiers == QtCore.Qt.ControlModifier: + pass + elif modifiers == QtCore.Qt.AltModifier: + pass + elif modifiers == QtCore.Qt.ShiftModifier: + pass + # NO MODIFIER + elif modifiers == QtCore.Qt.NoModifier: + if key == QtCore.Qt.Key_Escape or key == 'Escape': + sel_obj = self.app.collection.get_active() + assert sel_obj.kind == 'geometry', "Expected a Geometry Object, got %s" % type(sel_obj) + + sel_obj.area_disconnect() + return + + if key == QtCore.Qt.Key_G or key == 'G': + self.app.ui.grid_snap_btn.trigger() + return + + # Jump to coords + if key == QtCore.Qt.Key_J or key == 'J': + self.app.on_jump_to() + + def createPopupMenu(self): + menu = super().createPopupMenu() + + menu.addSeparator() + menu.addAction(self.lock_action) + return menu + + def lock_toolbar(self, lock=False): + """ + Used to (un)lock the toolbars of the app. + + :param lock: boolean, will lock all toolbars in place when set True + :return: None + """ + + if lock: + for widget in self.children(): + if isinstance(widget, QtWidgets.QToolBar): + widget.setMovable(False) + else: + for widget in self.children(): + if isinstance(widget, QtWidgets.QToolBar): + widget.setMovable(True) + + def dragEnterEvent(self, event): + if event.mimeData().hasUrls: + event.accept() + else: + event.ignore() + + def dragMoveEvent(self, event): + if event.mimeData().hasUrls: + event.accept() + else: + event.ignore() + + def dropEvent(self, event): + if event.mimeData().hasUrls: + event.setDropAction(QtCore.Qt.CopyAction) + event.accept() + for url in event.mimeData().urls(): + self.filename = str(url.toLocalFile()) + + if self.filename == "": + self.app.inform.emit("Cancelled.") + else: + extension = self.filename.lower().rpartition('.')[-1] + + if extension in self.app.grb_list: + self.app.worker_task.emit({'fcn': self.app.open_gerber, + 'params': [self.filename]}) + else: + event.ignore() + + if extension in self.app.exc_list: + self.app.worker_task.emit({'fcn': self.app.open_excellon, + 'params': [self.filename]}) + else: + event.ignore() + + if extension in self.app.gcode_list: + self.app.worker_task.emit({'fcn': self.app.open_gcode, + 'params': [self.filename]}) + else: + event.ignore() + + if extension in self.app.svg_list: + object_type = 'geometry' + self.app.worker_task.emit({'fcn': self.app.import_svg, + 'params': [self.filename, object_type, None]}) + + if extension in self.app.dxf_list: + object_type = 'geometry' + self.app.worker_task.emit({'fcn': self.app.import_dxf, + 'params': [self.filename, object_type, None]}) + + if extension in self.app.pdf_list: + self.app.pdf_tool.periodic_check(1000) + self.app.worker_task.emit({'fcn': self.app.pdf_tool.open_pdf, + 'params': [self.filename]}) + + if extension in self.app.prj_list: + # self.app.open_project() is not Thread Safe + self.app.open_project(self.filename) + + if extension in self.app.conf_list: + self.app.open_config_file(self.filename) + else: + event.ignore() + else: + event.ignore() + + def closeEvent(self, event): + if self.app.save_in_progress: + self.app.inform.emit('[WARNING_NOTCL] %s' % _("Application is saving the project. Please wait ...")) + else: + grect = self.geometry() + + # self.splitter.sizes()[0] is actually the size of the "notebook" + if not self.isMaximized(): + self.geom_update.emit(grect.x(), grect.y(), grect.width(), grect.height(), self.splitter.sizes()[0]) + + self.final_save.emit() + event.ignore() + + def on_fullscreen(self, disable=False): + """ + + :param disable: + :return: + """ + flags = self.windowFlags() + if self.toggle_fscreen is False and disable is False: + # self.ui.showFullScreen() + self.setWindowFlags(flags | Qt.FramelessWindowHint) + a = self.geometry() + self.x_pos = a.x() + self.y_pos = a.y() + self.width = a.width() + self.height = a.height() + + # set new geometry to full desktop rect + # Subtracting and adding the pixels below it's hack to bypass a bug in Qt5 and OpenGL that made that a + # window drawn with OpenGL in fullscreen will not show any other windows on top which means that menus and + # everything else will not work without this hack. This happen in Windows. + # https://bugreports.qt.io/browse/QTBUG-41309 + desktop = QtWidgets.QApplication.desktop() + screen = desktop.screenNumber(QtGui.QCursor.pos()) + + rec = desktop.screenGeometry(screen) + x = rec.x() - 1 + y = rec.y() - 1 + h = rec.height() + 2 + w = rec.width() + 2 + self.setGeometry(x, y, w, h) + self.show() + + # hide all Toolbars + for tb in self.findChildren(QtWidgets.QToolBar): + tb.setVisible(False) + self.snap_toolbar.setVisible(True) # This Toolbar is always visible so restore it + + self.splitter.setSizes([0, 1]) + self.toggle_fscreen = True + elif self.toggle_fscreen is True or disable is True: + self.setWindowFlags(flags & ~Qt.FramelessWindowHint) + self.setGeometry(self.x_pos, self.y_pos, self.width, self.height) + self.showNormal() + self.restore_toolbar_view() + self.toggle_fscreen = False + + def on_toggle_plotarea(self): + """ + + :return: + """ + try: + name = self.plot_tab_area.widget(0).objectName() + except AttributeError: + self.plot_tab_area.addTab(self.plot_tab, "Plot Area") + # remove the close button from the Plot Area tab (first tab index = 0) as this one will always be ON + self.plot_tab_area.protectTab(0) + return + + if name != 'plotarea_tab': + self.plot_tab_area.insertTab(0, self.plot_tab, "Plot Area") + # remove the close button from the Plot Area tab (first tab index = 0) as this one will always be ON + self.plot_tab_area.protectTab(0) + else: + self.plot_tab_area.closeTab(0) + + def on_toggle_notebook(self): + """ + + :return: + """ + if self.splitter.sizes()[0] == 0: + self.splitter.setSizes([1, 1]) + self.menu_toggle_nb.setChecked(True) + else: + self.splitter.setSizes([0, 1]) + self.menu_toggle_nb.setChecked(False) + + def on_toggle_grid(self): + """ + + :return: + """ + self.grid_snap_btn.trigger() + + def toggle_shell_ui(self): + """ + Toggle shell dock: if is visible close it, if it is closed then open it + + :return: None + """ + + if self.shell_dock.isVisible(): + self.shell_dock.hide() + self.app.plotcanvas.native.setFocus() + else: + self.shell_dock.show() + + # I want to take the focus and give it to the Tcl Shell when the Tcl Shell is run + # self.shell._edit.setFocus() + QtCore.QTimer.singleShot(0, lambda: self.ui.shell_dock.widget()._edit.setFocus()) + + # HACK - simulate a mouse click - alternative + # no_km = QtCore.Qt.KeyboardModifier(QtCore.Qt.NoModifier) # no KB modifier + # pos = QtCore.QPoint((self.shell._edit.width() - 40), (self.shell._edit.height() - 2)) + # e = QtGui.QMouseEvent(QtCore.QEvent.MouseButtonPress, pos, QtCore.Qt.LeftButton, QtCore.Qt.LeftButton, + # no_km) + # QtWidgets.qApp.sendEvent(self.shell._edit, e) + # f = QtGui.QMouseEvent(QtCore.QEvent.MouseButtonRelease, pos, QtCore.Qt.LeftButton, QtCore.Qt.LeftButton, + # no_km) + # QtWidgets.qApp.sendEvent(self.shell._edit, f) + + +class ShortcutsTab(QtWidgets.QWidget): + + def __init__(self): + super(ShortcutsTab, self).__init__() + self.sh_tab_layout = QtWidgets.QVBoxLayout() self.sh_tab_layout.setContentsMargins(2, 2, 2, 2) - self.shortcuts_tab.setLayout(self.sh_tab_layout) + self.setLayout(self.sh_tab_layout) self.sh_hlay = QtWidgets.QHBoxLayout() - self.sh_title = QtWidgets.QTextEdit( - _('Shortcut Key List')) + + self.sh_title = QtWidgets.QTextEdit(_('Shortcut Key List')) self.sh_title.setTextInteractionFlags(QtCore.Qt.NoTextInteraction) self.sh_title.setFrameStyle(QtWidgets.QFrame.NoFrame) self.sh_title.setMaximumHeight(30) + font = self.sh_title.font() font.setPointSize(12) self.sh_title.setFont(font) @@ -2162,2250 +4425,4 @@ class FlatCAMGUI(QtWidgets.QMainWindow): self.sh_editor.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) self.sh_hlay.addWidget(self.sh_editor) - # ######################################################################## - # ########################## PLOT AREA CONTEXT MENU # ################### - # ######################################################################## - self.popMenu = FCMenu() - - self.popmenu_disable = self.popMenu.addAction( - QtGui.QIcon(self.app.resource_location + '/disable32.png'), _("Toggle Visibility")) - self.popmenu_panel_toggle = self.popMenu.addAction( - QtGui.QIcon(self.app.resource_location + '/notebook16.png'), _("Toggle Panel")) - - self.popMenu.addSeparator() - self.cmenu_newmenu = self.popMenu.addMenu( - QtGui.QIcon(self.app.resource_location + '/file32.png'), _("New")) - self.popmenu_new_geo = self.cmenu_newmenu.addAction( - QtGui.QIcon(self.app.resource_location + '/new_geo32_bis.png'), _("Geometry")) - self.popmenu_new_grb = self.cmenu_newmenu.addAction( - QtGui.QIcon(self.app.resource_location + '/flatcam_icon32.png'), "Gerber") - self.popmenu_new_exc = self.cmenu_newmenu.addAction( - QtGui.QIcon(self.app.resource_location + '/new_exc32.png'), _("Excellon")) - self.cmenu_newmenu.addSeparator() - self.popmenu_new_prj = self.cmenu_newmenu.addAction( - QtGui.QIcon(self.app.resource_location + '/file16.png'), _("Project")) - self.popMenu.addSeparator() - - self.cmenu_gridmenu = self.popMenu.addMenu( - QtGui.QIcon(self.app.resource_location + '/grid32_menu.png'), _("Grids")) - - self.cmenu_viewmenu = self.popMenu.addMenu( - QtGui.QIcon(self.app.resource_location + '/view64.png'), _("View")) - self.zoomfit = self.cmenu_viewmenu.addAction( - QtGui.QIcon(self.app.resource_location + '/zoom_fit32.png'), _("Zoom Fit")) - self.clearplot = self.cmenu_viewmenu.addAction( - QtGui.QIcon(self.app.resource_location + '/clear_plot32.png'), _("Clear Plot")) - self.replot = self.cmenu_viewmenu.addAction( - QtGui.QIcon(self.app.resource_location + '/replot32.png'), _("Replot")) - self.popMenu.addSeparator() - - self.g_editor_cmenu = self.popMenu.addMenu( - QtGui.QIcon(self.app.resource_location + '/draw32.png'), _("Geo Editor")) - self.draw_line = self.g_editor_cmenu.addAction( - QtGui.QIcon(self.app.resource_location + '/path32.png'), _("Path")) - self.draw_rect = self.g_editor_cmenu.addAction( - QtGui.QIcon(self.app.resource_location + '/rectangle32.png'), _("Rectangle")) - self.g_editor_cmenu.addSeparator() - self.draw_circle = self.g_editor_cmenu.addAction( - QtGui.QIcon(self.app.resource_location + '/circle32.png'), _("Circle")) - self.draw_poly = self.g_editor_cmenu.addAction( - QtGui.QIcon(self.app.resource_location + '/polygon32.png'), _("Polygon")) - self.draw_arc = self.g_editor_cmenu.addAction( - QtGui.QIcon(self.app.resource_location + '/arc32.png'), _("Arc")) - self.g_editor_cmenu.addSeparator() - - self.draw_text = self.g_editor_cmenu.addAction( - QtGui.QIcon(self.app.resource_location + '/text32.png'), _("Text")) - self.draw_buffer = self.g_editor_cmenu.addAction( - QtGui.QIcon(self.app.resource_location + '/buffer16-2.png'), _("Buffer")) - self.draw_paint = self.g_editor_cmenu.addAction( - QtGui.QIcon(self.app.resource_location + '/paint20_1.png'), _("Paint")) - self.draw_eraser = self.g_editor_cmenu.addAction( - QtGui.QIcon(self.app.resource_location + '/eraser26.png'), _("Eraser")) - self.g_editor_cmenu.addSeparator() - - self.draw_union = self.g_editor_cmenu.addAction( - QtGui.QIcon(self.app.resource_location + '/union32.png'), _("Union")) - self.draw_intersect = self.g_editor_cmenu.addAction( - QtGui.QIcon(self.app.resource_location + '/intersection32.png'), _("Intersection")) - self.draw_substract = self.g_editor_cmenu.addAction( - QtGui.QIcon(self.app.resource_location + '/subtract32.png'), _("Subtraction")) - self.draw_cut = self.g_editor_cmenu.addAction( - QtGui.QIcon(self.app.resource_location + '/cutpath32.png'), _("Cut")) - self.draw_transform = self.g_editor_cmenu.addAction( - QtGui.QIcon(self.app.resource_location + '/transform.png'), _("Transformations")) - - self.g_editor_cmenu.addSeparator() - self.draw_move = self.g_editor_cmenu.addAction( - QtGui.QIcon(self.app.resource_location + '/move32.png'), _("Move")) - - self.grb_editor_cmenu = self.popMenu.addMenu( - QtGui.QIcon(self.app.resource_location + '/draw32.png'), _("Gerber Editor")) - self.grb_draw_pad = self.grb_editor_cmenu.addAction( - QtGui.QIcon(self.app.resource_location + '/aperture32.png'), _("Pad")) - self.grb_draw_pad_array = self.grb_editor_cmenu.addAction( - QtGui.QIcon(self.app.resource_location + '/padarray32.png'), _("Pad Array")) - self.grb_editor_cmenu.addSeparator() - - self.grb_draw_track = self.grb_editor_cmenu.addAction( - QtGui.QIcon(self.app.resource_location + '/track32.png'), _("Track")) - self.grb_draw_region = self.grb_editor_cmenu.addAction( - QtGui.QIcon(self.app.resource_location + '/polygon32.png'), _("Region")) - self.grb_draw_poligonize = self.grb_editor_cmenu.addAction( - QtGui.QIcon(self.app.resource_location + '/poligonize32.png'), _("Poligonize")) - self.grb_draw_semidisc = self.grb_editor_cmenu.addAction( - QtGui.QIcon(self.app.resource_location + '/semidisc32.png'), _("SemiDisc")) - self.grb_draw_disc = self.grb_editor_cmenu.addAction( - QtGui.QIcon(self.app.resource_location + '/disc32.png'), _("Disc")) - self.grb_editor_cmenu.addSeparator() - - self.grb_draw_buffer = self.grb_editor_cmenu.addAction( - QtGui.QIcon(self.app.resource_location + '/buffer16-2.png'), _("Buffer")) - self.grb_draw_scale = self.grb_editor_cmenu.addAction( - QtGui.QIcon(self.app.resource_location + '/scale32.png'), _("Scale")) - self.grb_draw_markarea = self.grb_editor_cmenu.addAction( - QtGui.QIcon(self.app.resource_location + '/markarea32.png'), _("Mark Area")) - self.grb_draw_eraser = self.grb_editor_cmenu.addAction( - QtGui.QIcon(self.app.resource_location + '/eraser26.png'), _("Eraser")) - self.grb_editor_cmenu.addSeparator() - - self.grb_draw_transformations = self.grb_editor_cmenu.addAction( - QtGui.QIcon(self.app.resource_location + '/transform.png'), _("Transformations")) - - self.e_editor_cmenu = self.popMenu.addMenu( - QtGui.QIcon(self.app.resource_location + '/drill32.png'), _("Exc Editor")) - self.drill = self.e_editor_cmenu.addAction( - QtGui.QIcon(self.app.resource_location + '/drill32.png'), _("Add Drill")) - self.drill_array = self.e_editor_cmenu.addAction( - QtGui.QIcon(self.app.resource_location + '/addarray32.png'), _("Add Drill Array")) - self.e_editor_cmenu.addSeparator() - self.slot = self.e_editor_cmenu.addAction( - QtGui.QIcon(self.app.resource_location + '/slot26.png'), _("Add Slot")) - self.slot_array = self.e_editor_cmenu.addAction( - QtGui.QIcon(self.app.resource_location + '/slot_array26.png'), _("Add Slot Array")) - self.e_editor_cmenu.addSeparator() - self.drill_resize = self.e_editor_cmenu.addAction( - QtGui.QIcon(self.app.resource_location + '/resize16.png'), _("Resize Drill")) - - self.popMenu.addSeparator() - self.popmenu_copy = self.popMenu.addAction( - QtGui.QIcon(self.app.resource_location + '/copy32.png'), _("Copy")) - self.popmenu_delete = self.popMenu.addAction( - QtGui.QIcon(self.app.resource_location + '/delete32.png'), _("Delete")) - self.popmenu_edit = self.popMenu.addAction( - QtGui.QIcon(self.app.resource_location + '/edit32.png'), _("Edit")) - self.popmenu_save = self.popMenu.addAction( - QtGui.QIcon(self.app.resource_location + '/floppy32.png'), _("Close Editor")) - self.popmenu_save.setVisible(False) - self.popMenu.addSeparator() - - self.popmenu_move = self.popMenu.addAction( - QtGui.QIcon(self.app.resource_location + '/move32.png'), _("Move")) - self.popmenu_properties = self.popMenu.addAction( - QtGui.QIcon(self.app.resource_location + '/properties32.png'), _("Properties")) - - # ######################################################################## - # ########################## INFO BAR # ################################## - # ######################################################################## - self.infobar = self.statusBar() - self.fcinfo = FlatCAMInfoBar(app=self.app) - self.infobar.addWidget(self.fcinfo, stretch=1) - - # self.rel_position_label = QtWidgets.QLabel( - # "Dx: 0.0000   Dy: 0.0000    ") - # self.rel_position_label.setMinimumWidth(110) - # self.rel_position_label.setToolTip(_("Relative measurement.\nReference is last click position")) - # self.infobar.addWidget(self.rel_position_label) - # - self.position_label = QtWidgets.QLabel( - " X: 0.0000   Y: 0.0000 ") - self.position_label.setMinimumWidth(110) - self.position_label.setToolTip(_("Absolute measurement.\nReference is (X=0, Y= 0) position")) - self.infobar.addWidget(self.position_label) - - self.snap_toolbar.setMaximumHeight(24) - self.infobar.addWidget(self.snap_toolbar) - - self.wplace_label = FCLabel("A4") - self.wplace_label.setMargin(2) - self.infobar.addWidget(self.wplace_label) - - self.units_label = QtWidgets.QLabel("[mm]") - self.units_label.setMargin(2) - self.infobar.addWidget(self.units_label) - - # disabled - # self.progress_bar = QtWidgets.QProgressBar() - # self.progress_bar.setMinimum(0) - # self.progress_bar.setMaximum(100) - # infobar.addWidget(self.progress_bar) - - # ######################################################################## - # ########################## SET GUI Elements # ########################## - # ######################################################################## - self.app_icon = QtGui.QIcon() - self.app_icon.addFile(self.app.resource_location + '/flatcam_icon16.png', QtCore.QSize(16, 16)) - self.app_icon.addFile(self.app.resource_location + '/flatcam_icon24.png', QtCore.QSize(24, 24)) - self.app_icon.addFile(self.app.resource_location + '/flatcam_icon32.png', QtCore.QSize(32, 32)) - self.app_icon.addFile(self.app.resource_location + '/flatcam_icon48.png', QtCore.QSize(48, 48)) - self.app_icon.addFile(self.app.resource_location + '/flatcam_icon128.png', QtCore.QSize(128, 128)) - self.app_icon.addFile(self.app.resource_location + '/flatcam_icon256.png', QtCore.QSize(256, 256)) - self.setWindowIcon(self.app_icon) - - self.setGeometry(100, 100, 1024, 650) - self.setWindowTitle('FlatCAM %s %s - %s' % - (self.app.version, - ('BETA' if self.app.beta else ''), - platform.architecture()[0]) - ) - - self.filename = "" - self.units = "" - self.setAcceptDrops(True) - - # ######################################################################## - # ########################## Build GUI # ################################# - # ######################################################################## - self.grid_snap_btn.setCheckable(True) - self.corner_snap_btn.setCheckable(True) - self.update_obj_btn.setEnabled(False) - # start with GRID activated - self.grid_snap_btn.trigger() - - self.g_editor_cmenu.menuAction().setVisible(False) - self.grb_editor_cmenu.menuAction().setVisible(False) - self.e_editor_cmenu.menuAction().setVisible(False) - - # ######################################################################## - # ######################## BUILD PREFERENCES ############################# - # ######################################################################## - self.general_defaults_form = GeneralPreferencesUI(decimals=self.decimals) - self.gerber_defaults_form = GerberPreferencesUI(decimals=self.decimals) - self.excellon_defaults_form = ExcellonPreferencesUI(decimals=self.decimals) - self.geometry_defaults_form = GeometryPreferencesUI(decimals=self.decimals) - self.cncjob_defaults_form = CNCJobPreferencesUI(decimals=self.decimals) - self.tools_defaults_form = ToolsPreferencesUI(decimals=self.decimals) - self.tools2_defaults_form = Tools2PreferencesUI(decimals=self.decimals) - self.util_defaults_form = UtilPreferencesUI(decimals=self.decimals) - - QtWidgets.qApp.installEventFilter(self) - - # ######################################################################## - # ################## RESTORE THE TOOLBAR STATE from file ################# - # ######################################################################## - flat_settings = QSettings("Open Source", "FlatCAM") - if flat_settings.contains("saved_gui_state"): - saved_gui_state = flat_settings.value('saved_gui_state') - self.restoreState(saved_gui_state) - log.debug("FlatCAMGUI.__init__() --> UI state restored from QSettings.") - - self.corner_snap_btn.setVisible(False) - self.snap_magnet.setVisible(False) - - if flat_settings.contains("layout"): - layout = flat_settings.value('layout', type=str) - self.exc_edit_toolbar.setDisabled(True) - self.geo_edit_toolbar.setDisabled(True) - self.grb_edit_toolbar.setDisabled(True) - - log.debug("FlatCAMGUI.__init__() --> UI layout restored from QSettings. Layout = %s" % str(layout)) - else: - self.exc_edit_toolbar.setDisabled(True) - self.geo_edit_toolbar.setDisabled(True) - self.grb_edit_toolbar.setDisabled(True) - - flat_settings.setValue('layout', "standard") - # This will write the setting to the platform specific storage. - del flat_settings - log.debug("FlatCAMGUI.__init__() --> UI layout restored from defaults. QSettings set to 'standard'") - - # construct the Toolbar Lock menu entry to the context menu of the QMainWindow - self.lock_action = QtWidgets.QAction() - self.lock_action.setText(_("Lock Toolbars")) - self.lock_action.setCheckable(True) - - qsettings = QSettings("Open Source", "FlatCAM") - if qsettings.contains("toolbar_lock"): - lock_val = settings.value('toolbar_lock') - if lock_val == 'true': - lock_state = True - self.lock_action.setChecked(True) - else: - - lock_state = False - self.lock_action.setChecked(False) - else: - lock_state = False - qsettings.setValue('toolbar_lock', lock_state) - - # This will write the setting to the platform specific storage. - del qsettings - - self.lock_toolbar(lock=lock_state) - - self.lock_action.triggered[bool].connect(self.lock_toolbar) - - self.pref_open_button.clicked.connect(self.on_preferences_open_folder) - self.clear_btn.clicked.connect(self.on_gui_clear) - - self.wplace_label.clicked.connect(self.app.on_workspace_toggle) - - # to be used in the future - # self.plot_tab_area.tab_attached.connect(lambda x: print(x)) - # self.plot_tab_area.tab_detached.connect(lambda x: print(x)) - - # %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - # %%%%%%%%%%%%%%%%% GUI Building FINISHED %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - # %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - def eventFilter(self, obj, event): - """ - Filter the ToolTips display based on a Preferences setting - - :param obj: - :param event: QT event to filter - :return: - """ - if self.app.defaults["global_toggle_tooltips"] is False: - if event.type() == QtCore.QEvent.ToolTip: - return True - else: - return False - - return False - - def on_preferences_open_folder(self): - """ - Will open an Explorer window set to the folder path where the FlatCAM preferences files are usually saved. - - :return: None - """ - - if sys.platform == 'win32': - subprocess.Popen('explorer %s' % self.app.data_path) - elif sys.platform == 'darwin': - os.system('open "%s"' % self.app.data_path) - else: - subprocess.Popen(['xdg-open', self.app.data_path]) - self.app.inform.emit('[success] %s' % _("FlatCAM Preferences Folder opened.")) - - def on_gui_clear(self): - theme_settings = QtCore.QSettings("Open Source", "FlatCAM") - theme_settings.setValue('theme', 'white') - - del theme_settings - - resource_loc = self.app.resource_location - - msgbox = QtWidgets.QMessageBox() - msgbox.setText(_("Are you sure you want to delete the GUI Settings? \n")) - msgbox.setWindowTitle(_("Clear GUI Settings")) - msgbox.setWindowIcon(QtGui.QIcon(resource_loc + '/trash32.png')) - bt_yes = msgbox.addButton(_('Yes'), QtWidgets.QMessageBox.YesRole) - bt_no = msgbox.addButton(_('No'), QtWidgets.QMessageBox.NoRole) - - msgbox.setDefaultButton(bt_no) - msgbox.exec_() - response = msgbox.clickedButton() - - if response == bt_yes: - qsettings = QSettings("Open Source", "FlatCAM") - for key in qsettings.allKeys(): - qsettings.remove(key) - # This will write the setting to the platform specific storage. - del qsettings - - def populate_toolbars(self): - """ - Will populate the App Toolbars with their actions - - :return: None - """ - - # ######################################################################## - # ## File Toolbar # ## - # ######################################################################## - self.file_open_gerber_btn = self.toolbarfile.addAction( - QtGui.QIcon(self.app.resource_location + '/flatcam_icon32.png'), _("Open Gerber")) - self.file_open_excellon_btn = self.toolbarfile.addAction( - QtGui.QIcon(self.app.resource_location + '/drill32.png'), _("Open Excellon")) - self.toolbarfile.addSeparator() - self.file_open_btn = self.toolbarfile.addAction( - QtGui.QIcon(self.app.resource_location + '/folder32.png'), _("Open project")) - self.file_save_btn = self.toolbarfile.addAction( - QtGui.QIcon(self.app.resource_location + '/project_save32.png'), _("Save project")) - - # ######################################################################## - # ## Edit Toolbar # ## - # ######################################################################## - self.newgeo_btn = self.toolbargeo.addAction( - QtGui.QIcon(self.app.resource_location + '/new_file_geo32.png'), _("New Blank Geometry")) - self.newgrb_btn = self.toolbargeo.addAction( - QtGui.QIcon(self.app.resource_location + '/new_file_grb32.png'), _("New Blank Gerber")) - self.newexc_btn = self.toolbargeo.addAction( - QtGui.QIcon(self.app.resource_location + '/new_file_exc32.png'), _("New Blank Excellon")) - self.toolbargeo.addSeparator() - self.editgeo_btn = self.toolbargeo.addAction( - QtGui.QIcon(self.app.resource_location + '/edit32.png'), _("Editor")) - self.update_obj_btn = self.toolbargeo.addAction( - QtGui.QIcon(self.app.resource_location + '/close_edit_file32.png'), - _("Save Object and close the Editor") - ) - - self.toolbargeo.addSeparator() - self.copy_btn = self.toolbargeo.addAction( - QtGui.QIcon(self.app.resource_location + '/copy_file32.png'), _("Copy")) - self.delete_btn = self.toolbargeo.addAction( - QtGui.QIcon(self.app.resource_location + '/delete_file32.png'), _("&Delete")) - self.toolbargeo.addSeparator() - self.distance_btn = self.toolbargeo.addAction( - QtGui.QIcon(self.app.resource_location + '/distance32.png'), _("Distance Tool")) - self.distance_min_btn = self.toolbargeo.addAction( - QtGui.QIcon(self.app.resource_location + '/distance_min32.png'), _("Distance Min Tool")) - self.origin_btn = self.toolbargeo.addAction( - QtGui.QIcon(self.app.resource_location + '/origin32.png'), _('Set Origin')) - self.move2origin_btn = self.toolbargeo.addAction( - QtGui.QIcon(self.app.resource_location + '/origin2_32.png'), _('Move to Origin')) - self.jmp_btn = self.toolbargeo.addAction( - QtGui.QIcon(self.app.resource_location + '/jump_to16.png'), _('Jump to Location')) - self.locate_btn = self.toolbargeo.addAction( - QtGui.QIcon(self.app.resource_location + '/locate32.png'), _('Locate in Object')) - - # ######################################################################## - # ########################## View Toolbar# ############################### - # ######################################################################## - self.replot_btn = self.toolbarview.addAction( - QtGui.QIcon(self.app.resource_location + '/replot32.png'), _("&Replot")) - self.clear_plot_btn = self.toolbarview.addAction( - QtGui.QIcon(self.app.resource_location + '/clear_plot32.png'), _("&Clear plot")) - self.zoom_in_btn = self.toolbarview.addAction( - QtGui.QIcon(self.app.resource_location + '/zoom_in32.png'), _("Zoom In")) - self.zoom_out_btn = self.toolbarview.addAction( - QtGui.QIcon(self.app.resource_location + '/zoom_out32.png'), _("Zoom Out")) - self.zoom_fit_btn = self.toolbarview.addAction( - QtGui.QIcon(self.app.resource_location + '/zoom_fit32.png'), _("Zoom Fit")) - - # ######################################################################## - # ########################## Shell Toolbar# ############################## - # ######################################################################## - self.shell_btn = self.toolbarshell.addAction( - QtGui.QIcon(self.app.resource_location + '/shell32.png'), _("&Command Line")) - self.new_script_btn = self.toolbarshell.addAction( - QtGui.QIcon(self.app.resource_location + '/script_new24.png'), _('New Script ...')) - self.open_script_btn = self.toolbarshell.addAction( - QtGui.QIcon(self.app.resource_location + '/open_script32.png'), _('Open Script ...')) - self.run_script_btn = self.toolbarshell.addAction( - QtGui.QIcon(self.app.resource_location + '/script16.png'), _('Run Script ...')) - - # ######################################################################### - # ######################### Tools Toolbar ################################# - # ######################################################################### - self.dblsided_btn = self.toolbartools.addAction( - QtGui.QIcon(self.app.resource_location + '/doubleside32.png'), _("2Sided Tool")) - self.align_btn = self.toolbartools.addAction( - QtGui.QIcon(self.app.resource_location + '/align32.png'), _("Align Objects Tool")) - self.extract_btn = self.toolbartools.addAction( - QtGui.QIcon(self.app.resource_location + '/extract_drill32.png'), _("Extract Drills Tool")) - - self.cutout_btn = self.toolbartools.addAction( - QtGui.QIcon(self.app.resource_location + '/cut16_bis.png'), _("&Cutout Tool")) - self.ncc_btn = self.toolbartools.addAction( - QtGui.QIcon(self.app.resource_location + '/ncc16.png'), _("NCC Tool")) - self.paint_btn = self.toolbartools.addAction( - QtGui.QIcon(self.app.resource_location + '/paint20_1.png'), _("Paint Tool")) - self.toolbartools.addSeparator() - - self.panelize_btn = self.toolbartools.addAction( - QtGui.QIcon(self.app.resource_location + '/panelize32.png'), _("Panel Tool")) - self.film_btn = self.toolbartools.addAction( - QtGui.QIcon(self.app.resource_location + '/film16.png'), _("Film Tool")) - self.solder_btn = self.toolbartools.addAction( - QtGui.QIcon(self.app.resource_location + '/solderpastebis32.png'), _("SolderPaste Tool")) - self.sub_btn = self.toolbartools.addAction( - QtGui.QIcon(self.app.resource_location + '/sub32.png'), _("Subtract Tool")) - self.rules_btn = self.toolbartools.addAction( - QtGui.QIcon(self.app.resource_location + '/rules32.png'), _("Rules Tool")) - self.optimal_btn = self.toolbartools.addAction( - QtGui.QIcon(self.app.resource_location + '/open_excellon32.png'), _("Optimal Tool")) - - self.toolbartools.addSeparator() - - self.calculators_btn = self.toolbartools.addAction( - QtGui.QIcon(self.app.resource_location + '/calculator24.png'), _("Calculators Tool")) - self.transform_btn = self.toolbartools.addAction( - QtGui.QIcon(self.app.resource_location + '/transform.png'), _("Transform Tool")) - self.qrcode_btn = self.toolbartools.addAction( - QtGui.QIcon(self.app.resource_location + '/qrcode32.png'), _("QRCode Tool")) - self.copperfill_btn = self.toolbartools.addAction( - QtGui.QIcon(self.app.resource_location + '/copperfill32.png'), _("Copper Thieving Tool")) - - self.fiducials_btn = self.toolbartools.addAction( - QtGui.QIcon(self.app.resource_location + '/fiducials_32.png'), _("Fiducials Tool")) - self.cal_btn = self.toolbartools.addAction( - QtGui.QIcon(self.app.resource_location + '/calibrate_32.png'), _("Calibration Tool")) - self.punch_btn = self.toolbartools.addAction( - QtGui.QIcon(self.app.resource_location + '/punch32.png'), _("Punch Gerber Tool")) - self.invert_btn = self.toolbartools.addAction( - QtGui.QIcon(self.app.resource_location + '/invert32.png'), _("Invert Gerber Tool")) - self.corners_tool_btn = self.toolbartools.addAction( - QtGui.QIcon(self.app.resource_location + '/corners_32.png'), _("Corner Markers Tool")) - - # ######################################################################## - # ## Excellon Editor Toolbar # ## - # ######################################################################## - self.select_drill_btn = self.exc_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/pointer32.png'), _("Select")) - self.add_drill_btn = self.exc_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/plus16.png'), _('Add Drill Hole')) - self.add_drill_array_btn = self.exc_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/addarray16.png'), _('Add Drill Hole Array')) - self.resize_drill_btn = self.exc_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/resize16.png'), _('Resize Drill')) - self.add_slot_btn = self.exc_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/slot26.png'), _('Add Slot')) - self.add_slot_array_btn = self.exc_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/slot_array26.png'), _('Add Slot Array')) - self.exc_edit_toolbar.addSeparator() - - self.copy_drill_btn = self.exc_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/copy32.png'), _('Copy Drill')) - self.delete_drill_btn = self.exc_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/trash32.png'), _("Delete Drill")) - - self.exc_edit_toolbar.addSeparator() - self.move_drill_btn = self.exc_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/move32.png'), _("Move Drill")) - - # ######################################################################## - # ## Geometry Editor Toolbar # ## - # ######################################################################## - self.geo_select_btn = self.geo_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/pointer32.png'), _("Select 'Esc'")) - self.geo_add_circle_btn = self.geo_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/circle32.png'), _('Add Circle')) - self.geo_add_arc_btn = self.geo_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/arc32.png'), _('Add Arc')) - self.geo_add_rectangle_btn = self.geo_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/rectangle32.png'), _('Add Rectangle')) - - self.geo_edit_toolbar.addSeparator() - self.geo_add_path_btn = self.geo_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/path32.png'), _('Add Path')) - self.geo_add_polygon_btn = self.geo_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/polygon32.png'), _('Add Polygon')) - self.geo_edit_toolbar.addSeparator() - self.geo_add_text_btn = self.geo_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/text32.png'), _('Add Text')) - self.geo_add_buffer_btn = self.geo_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/buffer16-2.png'), _('Add Buffer')) - self.geo_add_paint_btn = self.geo_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/paint20_1.png'), _('Paint Shape')) - self.geo_eraser_btn = self.geo_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/eraser26.png'), _('Eraser')) - - self.geo_edit_toolbar.addSeparator() - self.geo_union_btn = self.geo_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/union32.png'), _('Polygon Union')) - self.geo_explode_btn = self.geo_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/explode32.png'), _('Polygon Explode')) - - self.geo_intersection_btn = self.geo_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/intersection32.png'), _('Polygon Intersection')) - self.geo_subtract_btn = self.geo_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/subtract32.png'), _('Polygon Subtraction')) - - self.geo_edit_toolbar.addSeparator() - self.geo_cutpath_btn = self.geo_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/cutpath32.png'), _('Cut Path')) - self.geo_copy_btn = self.geo_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/copy32.png'), _("Copy Objects")) - self.geo_delete_btn = self.geo_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/trash32.png'), _("Delete Shape")) - self.geo_transform_btn = self.geo_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/transform.png'), _("Transformations")) - - self.geo_edit_toolbar.addSeparator() - self.geo_move_btn = self.geo_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/move32.png'), _("Move Objects")) - - # ######################################################################## - # ## Gerber Editor Toolbar # ## - # ######################################################################## - self.grb_select_btn = self.grb_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/pointer32.png'), _("Select")) - self.grb_add_pad_btn = self.grb_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/aperture32.png'), _("Add Pad")) - self.add_pad_ar_btn = self.grb_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/padarray32.png'), _('Add Pad Array')) - self.grb_add_track_btn = self.grb_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/track32.png'), _("Add Track")) - self.grb_add_region_btn = self.grb_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/polygon32.png'), _("Add Region")) - self.grb_convert_poly_btn = self.grb_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/poligonize32.png'), _("Poligonize")) - - self.grb_add_semidisc_btn = self.grb_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/semidisc32.png'), _("SemiDisc")) - self.grb_add_disc_btn = self.grb_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/disc32.png'), _("Disc")) - self.grb_edit_toolbar.addSeparator() - - self.aperture_buffer_btn = self.grb_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/buffer16-2.png'), _('Buffer')) - self.aperture_scale_btn = self.grb_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/scale32.png'), _('Scale')) - self.aperture_markarea_btn = self.grb_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/markarea32.png'), _('Mark Area')) - self.aperture_eraser_btn = self.grb_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/eraser26.png'), _('Eraser')) - - self.grb_edit_toolbar.addSeparator() - self.aperture_copy_btn = self.grb_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/copy32.png'), _("Copy")) - self.aperture_delete_btn = self.grb_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/trash32.png'), _("Delete")) - self.grb_transform_btn = self.grb_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/transform.png'), _("Transformations")) - self.grb_edit_toolbar.addSeparator() - self.aperture_move_btn = self.grb_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/move32.png'), _("Move")) - - self.corner_snap_btn.setVisible(False) - self.snap_magnet.setVisible(False) - - qsettings = QSettings("Open Source", "FlatCAM") - if qsettings.contains("layout"): - layout = qsettings.value('layout', type=str) - - # on 'minimal' layout only some toolbars are active - if layout != 'minimal': - self.exc_edit_toolbar.setVisible(True) - self.exc_edit_toolbar.setDisabled(True) - self.geo_edit_toolbar.setVisible(True) - self.geo_edit_toolbar.setDisabled(True) - self.grb_edit_toolbar.setVisible(True) - self.grb_edit_toolbar.setDisabled(True) - - def keyPressEvent(self, event): - """ - Key event handler for the entire app. - Some of the key events are also treated locally in the FlatCAM editors - - :param event: QT event - :return: - """ - modifiers = QtWidgets.QApplication.keyboardModifiers() - active = self.app.collection.get_active() - selected = self.app.collection.get_selected() - names_list = self.app.collection.get_names() - - matplotlib_key_flag = False - - # events out of the self.app.collection view (it's about Project Tab) are of type int - if type(event) is int: - key = event - # events from the GUI are of type QKeyEvent - elif type(event) == QtGui.QKeyEvent: - key = event.key() - elif isinstance(event, mpl_key_event): # MatPlotLib key events are trickier to interpret than the rest - matplotlib_key_flag = True - - key = event.key - key = QtGui.QKeySequence(key) - - # check for modifiers - key_string = key.toString().lower() - if '+' in key_string: - mod, __, key_text = key_string.rpartition('+') - if mod.lower() == 'ctrl': - modifiers = QtCore.Qt.ControlModifier - elif mod.lower() == 'alt': - modifiers = QtCore.Qt.AltModifier - elif mod.lower() == 'shift': - modifiers = QtCore.Qt.ShiftModifier - else: - modifiers = QtCore.Qt.NoModifier - key = QtGui.QKeySequence(key_text) - - # events from Vispy are of type KeyEvent - else: - key = event.key - - if self.app.call_source == 'app': - # CTRL + ALT - if modifiers == QtCore.Qt.ControlModifier | QtCore.Qt.AltModifier: - if key == QtCore.Qt.Key_X: - self.app.abort_all_tasks() - return - # CTRL + SHIFT - if modifiers == QtCore.Qt.ControlModifier | QtCore.Qt.ShiftModifier: - if key == QtCore.Qt.Key_S: - self.app.on_file_saveprojectas() - return - # CTRL - elif modifiers == QtCore.Qt.ControlModifier: - # Select All - if key == QtCore.Qt.Key_A: - self.app.on_selectall() - - # Copy an FlatCAM object - if key == QtCore.Qt.Key_C: - widget_name = self.plot_tab_area.currentWidget().objectName() - if widget_name == 'database_tab': - # Tools DB saved, update flag - self.app.tools_db_changed_flag = True - self.app.tools_db_tab.on_tool_copy() - return - - self.app.on_copy_command() - - # Copy an FlatCAM object - if key == QtCore.Qt.Key_D: - self.app.on_tools_database() - - # Open Excellon file - if key == QtCore.Qt.Key_E: - self.app.on_fileopenexcellon(signal=None) - - # Open Gerber file - if key == QtCore.Qt.Key_G: - widget_name = self.plot_tab_area.currentWidget().objectName() - if 'editor' in widget_name.lower(): - self.app.goto_text_line() - else: - self.app.on_fileopengerber(signal=None) - - # Distance Tool - if key == QtCore.Qt.Key_M: - self.app.distance_tool.run() - - # Create New Project - if key == QtCore.Qt.Key_N: - self.app.on_file_new_click() - - # Open Project - if key == QtCore.Qt.Key_O: - self.app.on_file_openproject(signal=None) - - # Open Project - if key == QtCore.Qt.Key_P: - self.app.on_file_save_objects_pdf(use_thread=True) - - # PDF Import - if key == QtCore.Qt.Key_Q: - self.app.pdf_tool.run() - - # Save Project - if key == QtCore.Qt.Key_S: - widget_name = self.plot_tab_area.currentWidget().objectName() - if widget_name == 'preferences_tab': - self.app.preferencesUiManager.on_save_button(save_to_file=False) - return - - if widget_name == 'database_tab': - # Tools DB saved, update flag - self.app.tools_db_changed_flag = False - self.app.tools_db_tab.on_save_tools_db() - return - - self.app.on_file_saveproject() - - # Toggle Plot Area - if key == QtCore.Qt.Key_F10 or key == 'F10': - self.app.on_toggle_plotarea() - - return - # SHIFT - elif modifiers == QtCore.Qt.ShiftModifier: - - # Copy Object Name - if key == QtCore.Qt.Key_C: - self.app.on_copy_name() - - # Toggle Code Editor - if key == QtCore.Qt.Key_E: - self.app.on_toggle_code_editor() - - # Toggle axis - if key == QtCore.Qt.Key_G: - self.app.on_toggle_axis() - - # Toggle HUD (Heads-Up Display) - if key == QtCore.Qt.Key_H: - self.app.on_toggle_hud() - # Locate in Object - if key == QtCore.Qt.Key_J: - self.app.on_locate(obj=self.app.collection.get_active()) - - # Run Distance Minimum Tool - if key == QtCore.Qt.Key_M: - self.app.distance_min_tool.run() - return - - # Open Preferences Window - if key == QtCore.Qt.Key_P: - self.app.on_preferences() - return - - # Rotate Object by 90 degree CCW - if key == QtCore.Qt.Key_R: - self.app.on_rotate(silent=True, preset=-float(self.app.defaults['tools_transform_rotate'])) - return - - # Run a Script - if key == QtCore.Qt.Key_S: - self.app.on_filerunscript() - return - - # Toggle Workspace - if key == QtCore.Qt.Key_W: - self.app.on_workspace_toggle() - return - - # Skew on X axis - if key == QtCore.Qt.Key_X: - self.app.on_skewx() - return - - # Skew on Y axis - if key == QtCore.Qt.Key_Y: - self.app.on_skewy() - return - # ALT - elif modifiers == QtCore.Qt.AltModifier: - # Eanble all plots - if key == Qt.Key_1: - self.app.enable_all_plots() - - # Disable all plots - if key == Qt.Key_2: - self.app.disable_all_plots() - - # Disable all other plots - if key == Qt.Key_3: - self.app.disable_other_plots() - - # Align in Object Tool - if key == QtCore.Qt.Key_A: - self.app.align_objects_tool.run(toggle=True) - - # Calculator Tool - if key == QtCore.Qt.Key_C: - self.app.calculator_tool.run(toggle=True) - - # 2-Sided PCB Tool - if key == QtCore.Qt.Key_D: - self.app.dblsidedtool.run(toggle=True) - return - - # Calibration Tool - if key == QtCore.Qt.Key_E: - self.app.cal_exc_tool.run(toggle=True) - return - - # Copper Thieving Tool - if key == QtCore.Qt.Key_F: - self.app.copper_thieving_tool.run(toggle=True) - return - - # Toggle Grid lines - if key == QtCore.Qt.Key_G: - self.app.on_toggle_grid_lines() - return - - # Align in Object Tool - if key == QtCore.Qt.Key_H: - self.app.punch_tool.run(toggle=True) - - # Extract Drills Tool - if key == QtCore.Qt.Key_I: - self.app.edrills_tool.run(toggle=True) - - # Fiducials Tool - if key == QtCore.Qt.Key_J: - self.app.fiducial_tool.run(toggle=True) - return - - # Solder Paste Dispensing Tool - if key == QtCore.Qt.Key_K: - self.app.paste_tool.run(toggle=True) - return - - # Film Tool - if key == QtCore.Qt.Key_L: - self.app.film_tool.run(toggle=True) - return - - # Corner Markers Tool - if key == QtCore.Qt.Key_M: - self.app.corners_tool.run(toggle=True) - return - - # Non-Copper Clear Tool - if key == QtCore.Qt.Key_N: - self.app.ncclear_tool.run(toggle=True) - return - - # Optimal Tool - if key == QtCore.Qt.Key_O: - self.app.optimal_tool.run(toggle=True) - return - - # Paint Tool - if key == QtCore.Qt.Key_P: - self.app.paint_tool.run(toggle=True) - return - - # QRCode Tool - if key == QtCore.Qt.Key_Q: - self.app.qrcode_tool.run() - return - - # Rules Tool - if key == QtCore.Qt.Key_R: - self.app.rules_tool.run(toggle=True) - return - - # View Source Object Content - if key == QtCore.Qt.Key_S: - self.app.on_view_source() - return - - # Transformation Tool - if key == QtCore.Qt.Key_T: - self.app.transform_tool.run(toggle=True) - return - - # Substract Tool - if key == QtCore.Qt.Key_W: - self.app.sub_tool.run(toggle=True) - return - - # Cutout Tool - if key == QtCore.Qt.Key_X: - self.app.cutout_tool.run(toggle=True) - return - - # Panelize Tool - if key == QtCore.Qt.Key_Z: - self.app.panelize_tool.run(toggle=True) - return - - # Toggle Fullscreen - if key == QtCore.Qt.Key_F10 or key == 'F10': - self.app.on_fullscreen() - return - # NO MODIFIER - elif modifiers == QtCore.Qt.NoModifier: - # Open Manual - if key == QtCore.Qt.Key_F1 or key == 'F1': - webbrowser.open(self.app.manual_url) - - # Show shortcut list - if key == QtCore.Qt.Key_F3 or key == 'F3': - self.app.on_shortcut_list() - - # Open Video Help - if key == QtCore.Qt.Key_F4 or key == 'F4': - webbrowser.open(self.app.video_url) - - # Open Video Help - if key == QtCore.Qt.Key_F5 or key == 'F5': - self.app.plot_all() - - # Switch to Project Tab - if key == QtCore.Qt.Key_1: - self.app.on_select_tab('project') - - # Switch to Selected Tab - if key == QtCore.Qt.Key_2: - self.app.on_select_tab('selected') - - # Switch to Tool Tab - if key == QtCore.Qt.Key_3: - self.app.on_select_tab('tool') - - # Delete from PyQt - # It's meant to make a difference between delete objects and delete tools in - # Geometry Selected tool table - if key == QtCore.Qt.Key_Delete and matplotlib_key_flag is False: - widget_name = self.plot_tab_area.currentWidget().objectName() - if widget_name == 'database_tab': - # Tools DB saved, update flag - self.app.tools_db_changed_flag = True - self.app.tools_db_tab.on_tool_delete() - return - - self.app.on_delete_keypress() - - # Delete from canvas - if key == 'Delete': - # Delete via the application to - # ensure cleanup of the GUI - if active: - active.app.on_delete() - - # Escape = Deselect All - if key == QtCore.Qt.Key_Escape or key == 'Escape': - self.app.on_deselect_all() - - # if in full screen, exit to normal view - if self.app.toggle_fscreen is True: - self.app.on_fullscreen(disable=True) - - # try to disconnect the slot from Set Origin - try: - self.app.plotcanvas.graph_event_disconnect('mouse_press', self.app.on_set_zero_click) - except TypeError: - pass - self.app.inform.emit("") - - # Space = Toggle Active/Inactive - if key == QtCore.Qt.Key_Space: - for select in selected: - select.ui.plot_cb.toggle() - self.app.collection.update_view() - self.app.delete_selection_shape() - - # Select the object in the Tree above the current one - if key == QtCore.Qt.Key_Up: - # make sure it works only for the Project Tab who is an instance of KeySensitiveListView - focused_wdg = QtWidgets.QApplication.focusWidget() - if isinstance(focused_wdg, KeySensitiveListView): - self.app.collection.set_all_inactive() - if active is None: - return - active_name = active.options['name'] - active_index = names_list.index(active_name) - if active_index == 0: - self.app.collection.set_active(names_list[-1]) - else: - self.app.collection.set_active(names_list[active_index-1]) - - # Select the object in the Tree below the current one - if key == QtCore.Qt.Key_Down: - # make sure it works only for the Project Tab who is an instance of KeySensitiveListView - focused_wdg = QtWidgets.QApplication.focusWidget() - if isinstance(focused_wdg, KeySensitiveListView): - self.app.collection.set_all_inactive() - if active is None: - return - active_name = active.options['name'] - active_index = names_list.index(active_name) - if active_index == len(names_list) - 1: - self.app.collection.set_active(names_list[0]) - else: - self.app.collection.set_active(names_list[active_index+1]) - - # New Geometry - if key == QtCore.Qt.Key_B: - self.app.new_gerber_object() - - # New Geometry - if key == QtCore.Qt.Key_D: - self.app.new_document_object() - - # Copy Object Name - if key == QtCore.Qt.Key_E: - self.app.object2editor() - - # Grid toggle - if key == QtCore.Qt.Key_G: - self.app.ui.grid_snap_btn.trigger() - - # Jump to coords - if key == QtCore.Qt.Key_J: - self.app.on_jump_to() - - # New Excellon - if key == QtCore.Qt.Key_L: - self.app.new_excellon_object() - - # Move tool toggle - if key == QtCore.Qt.Key_M: - self.app.move_tool.toggle() - - # New Geometry - if key == QtCore.Qt.Key_N: - self.app.new_geometry_object() - - # Set Origin - if key == QtCore.Qt.Key_O: - self.app.on_set_origin() - return - - # Properties Tool - if key == QtCore.Qt.Key_P: - self.app.properties_tool.run() - return - - # Change Units - if key == QtCore.Qt.Key_Q: - # if self.app.defaults["units"] == 'MM': - # self.app.ui.general_defaults_form.general_app_group.units_radio.set_value("IN") - # else: - # self.app.ui.general_defaults_form.general_app_group.units_radio.set_value("MM") - # self.app.on_toggle_units(no_pref=True) - self.app.on_toggle_units_click() - - # Rotate Object by 90 degree CW - if key == QtCore.Qt.Key_R: - self.app.on_rotate(silent=True, preset=self.app.defaults['tools_transform_rotate']) - - # Shell toggle - if key == QtCore.Qt.Key_S: - self.app.toggle_shell() - - # Add a Tool from shortcut - if key == QtCore.Qt.Key_T: - widget_name = self.plot_tab_area.currentWidget().objectName() - if widget_name == 'database_tab': - # Tools DB saved, update flag - self.app.tools_db_changed_flag = True - self.app.tools_db_tab.on_tool_add() - return - - self.app.on_tool_add_keypress() - - # Zoom Fit - if key == QtCore.Qt.Key_V: - self.app.on_zoom_fit(None) - - # Mirror on X the selected object(s) - if key == QtCore.Qt.Key_X: - self.app.on_flipx() - - # Mirror on Y the selected object(s) - if key == QtCore.Qt.Key_Y: - self.app.on_flipy() - - # Zoom In - if key == QtCore.Qt.Key_Equal: - self.app.plotcanvas.zoom(1 / self.app.defaults['global_zoom_ratio'], self.app.mouse) - - # Zoom Out - if key == QtCore.Qt.Key_Minus: - self.app.plotcanvas.zoom(self.app.defaults['global_zoom_ratio'], self.app.mouse) - - # toggle display of Notebook area - if key == QtCore.Qt.Key_QuoteLeft: - self.app.on_toggle_notebook() - - return - elif self.app.call_source == 'geo_editor': - # CTRL - if modifiers == QtCore.Qt.ControlModifier: - # save (update) the current geometry and return to the App - if key == QtCore.Qt.Key_S or key == 'S': - self.app.editor2object() - return - - # toggle the measurement tool - if key == QtCore.Qt.Key_M or key == 'M': - self.app.distance_tool.run() - return - - # Cut Action Tool - if key == QtCore.Qt.Key_X or key == 'X': - if self.app.geo_editor.get_selected() is not None: - self.app.geo_editor.cutpath() - else: - msg = _('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.') - - messagebox = QtWidgets.QMessageBox() - messagebox.setText(msg) - messagebox.setWindowTitle(_("Warning")) - messagebox.setWindowIcon(QtGui.QIcon(self.app.resource_location + '/warning.png')) - messagebox.setStandardButtons(QtWidgets.QMessageBox.Ok) - messagebox.setDefaultButton(QtWidgets.QMessageBox.Ok) - messagebox.exec_() - return - # SHIFT - elif modifiers == QtCore.Qt.ShiftModifier: - # Run Distance Minimum Tool - if key == QtCore.Qt.Key_M or key == 'M': - self.app.distance_min_tool.run() - return - - # Skew on X axis - if key == QtCore.Qt.Key_X or key == 'X': - self.app.geo_editor.transform_tool.on_skewx_key() - return - - # Skew on Y axis - if key == QtCore.Qt.Key_Y or key == 'Y': - self.app.geo_editor.transform_tool.on_skewy_key() - return - # ALT - elif modifiers == QtCore.Qt.AltModifier: - - # Transformation Tool - if key == QtCore.Qt.Key_R or key == 'R': - self.app.geo_editor.select_tool('transform') - return - - # Offset on X axis - if key == QtCore.Qt.Key_X or key == 'X': - self.app.geo_editor.transform_tool.on_offx_key() - return - - # Offset on Y axis - if key == QtCore.Qt.Key_Y or key == 'Y': - self.app.geo_editor.transform_tool.on_offy_key() - return - # NO MODIFIER - elif modifiers == QtCore.Qt.NoModifier: - # toggle display of Notebook area - if key == QtCore.Qt.Key_QuoteLeft or key == '`': - self.app.on_toggle_notebook() - - # Finish the current action. Use with tools that do not - # complete automatically, like a polygon or path. - if key == QtCore.Qt.Key_Enter or key == 'Enter': - if isinstance(self.app.geo_editor.active_tool, FCShapeTool): - if self.app.geo_editor.active_tool.name == 'rotate': - self.app.geo_editor.active_tool.make() - - if self.app.geo_editor.active_tool.complete: - self.app.geo_editor.on_shape_complete() - self.app.inform.emit('[success] %s' % _("Done.")) - # automatically make the selection tool active after completing current action - self.app.geo_editor.select_tool('select') - return - else: - self.app.geo_editor.active_tool.click( - self.app.geo_editor.snap(self.app.geo_editor.x, self.app.geo_editor.y)) - - self.app.geo_editor.active_tool.make() - - if self.app.geo_editor.active_tool.complete: - self.app.geo_editor.on_shape_complete() - self.app.inform.emit('[success] %s' % _("Done.")) - # automatically make the selection tool active after completing current action - self.app.geo_editor.select_tool('select') - - # Abort the current action - if key == QtCore.Qt.Key_Escape or key == 'Escape': - # self.on_tool_select("select") - self.app.inform.emit('[WARNING_NOTCL] %s' % _("Cancelled.")) - - self.app.geo_editor.delete_utility_geometry() - - self.app.geo_editor.active_tool.clean_up() - - self.app.geo_editor.select_tool('select') - - # hide the notebook - self.app.ui.splitter.setSizes([0, 1]) - return - - # Delete selected object - if key == QtCore.Qt.Key_Delete or key == 'Delete': - self.app.geo_editor.delete_selected() - self.app.geo_editor.replot() - - # Rotate - if key == QtCore.Qt.Key_Space or key == 'Space': - self.app.geo_editor.transform_tool.on_rotate_key() - - # Zoom Out - if key == QtCore.Qt.Key_Minus or key == '-': - self.app.plotcanvas.zoom(1 / self.app.defaults['global_zoom_ratio'], - [self.app.geo_editor.snap_x, self.app.geo_editor.snap_y]) - - # Zoom In - if key == QtCore.Qt.Key_Equal or key == '=': - self.app.plotcanvas.zoom(self.app.defaults['global_zoom_ratio'], - [self.app.geo_editor.snap_x, self.app.geo_editor.snap_y]) - - # Switch to Project Tab - if key == QtCore.Qt.Key_1 or key == '1': - self.app.on_select_tab('project') - - # Switch to Selected Tab - if key == QtCore.Qt.Key_2 or key == '2': - self.app.on_select_tab('selected') - - # Switch to Tool Tab - if key == QtCore.Qt.Key_3 or key == '3': - self.app.on_select_tab('tool') - - # Grid Snap - if key == QtCore.Qt.Key_G or key == 'G': - self.app.ui.grid_snap_btn.trigger() - - # make sure that the cursor shape is enabled/disabled, too - if self.app.geo_editor.options['grid_snap'] is True: - self.app.app_cursor.enabled = True - else: - self.app.app_cursor.enabled = False - - # Corner Snap - if key == QtCore.Qt.Key_K or key == 'K': - self.app.geo_editor.on_corner_snap() - - if key == QtCore.Qt.Key_V or key == 'V': - self.app.on_zoom_fit(None) - - # we do this so we can reuse the following keys while inside a Tool - # the above keys are general enough so were left outside - if self.app.geo_editor.active_tool is not None and self.geo_select_btn.isChecked() is False: - response = self.app.geo_editor.active_tool.on_key(key=key) - if response is not None: - self.app.inform.emit(response) - else: - # Arc Tool - if key == QtCore.Qt.Key_A or key == 'A': - self.app.geo_editor.select_tool('arc') - - # Buffer - if key == QtCore.Qt.Key_B or key == 'B': - self.app.geo_editor.select_tool('buffer') - - # Copy - if key == QtCore.Qt.Key_C or key == 'C': - self.app.geo_editor.on_copy_click() - - # Substract Tool - if key == QtCore.Qt.Key_E or key == 'E': - if self.app.geo_editor.get_selected() is not None: - self.app.geo_editor.intersection() - else: - msg = _("Please select geometry items \n" - "on which to perform Intersection Tool.") - - messagebox = QtWidgets.QMessageBox() - messagebox.setText(msg) - messagebox.setWindowTitle(_("Warning")) - messagebox.setWindowIcon(QtGui.QIcon(self.app.resource_location + '/warning.png')) - messagebox.setStandardButtons(QtWidgets.QMessageBox.Ok) - messagebox.setDefaultButton(QtWidgets.QMessageBox.Ok) - messagebox.exec_() - - # Paint - if key == QtCore.Qt.Key_I or key == 'I': - self.app.geo_editor.select_tool('paint') - - # Jump to coords - if key == QtCore.Qt.Key_J or key == 'J': - self.app.on_jump_to() - - # Move - if key == QtCore.Qt.Key_M or key == 'M': - self.app.geo_editor.on_move_click() - - # Polygon Tool - if key == QtCore.Qt.Key_N or key == 'N': - self.app.geo_editor.select_tool('polygon') - - # Circle Tool - if key == QtCore.Qt.Key_O or key == 'O': - self.app.geo_editor.select_tool('circle') - - # Path Tool - if key == QtCore.Qt.Key_P or key == 'P': - self.app.geo_editor.select_tool('path') - - # Rectangle Tool - if key == QtCore.Qt.Key_R or key == 'R': - self.app.geo_editor.select_tool('rectangle') - - # Substract Tool - if key == QtCore.Qt.Key_S or key == 'S': - if self.app.geo_editor.get_selected() is not None: - self.app.geo_editor.subtract() - else: - msg = _( - "Please select geometry items \n" - "on which to perform Substraction Tool.") - - messagebox = QtWidgets.QMessageBox() - messagebox.setText(msg) - messagebox.setWindowTitle(_("Warning")) - messagebox.setWindowIcon(QtGui.QIcon(self.app.resource_location + '/warning.png')) - messagebox.setStandardButtons(QtWidgets.QMessageBox.Ok) - messagebox.setDefaultButton(QtWidgets.QMessageBox.Ok) - messagebox.exec_() - - # Add Text Tool - if key == QtCore.Qt.Key_T or key == 'T': - self.app.geo_editor.select_tool('text') - - # Substract Tool - if key == QtCore.Qt.Key_U or key == 'U': - if self.app.geo_editor.get_selected() is not None: - self.app.geo_editor.union() - else: - msg = _("Please select geometry items \n" - "on which to perform union.") - - messagebox = QtWidgets.QMessageBox() - messagebox.setText(msg) - messagebox.setWindowTitle(_("Warning")) - messagebox.setWindowIcon(QtGui.QIcon(self.app.resource_location + '/warning.png')) - messagebox.setStandardButtons(QtWidgets.QMessageBox.Ok) - messagebox.setDefaultButton(QtWidgets.QMessageBox.Ok) - messagebox.exec_() - - # Flip on X axis - if key == QtCore.Qt.Key_X or key == 'X': - self.app.geo_editor.transform_tool.on_flipx() - return - - # Flip on Y axis - if key == QtCore.Qt.Key_Y or key == 'Y': - self.app.geo_editor.transform_tool.on_flipy() - return - - # Show Shortcut list - if key == 'F3': - self.app.on_shortcut_list() - elif self.app.call_source == 'grb_editor': - # CTRL - if modifiers == QtCore.Qt.ControlModifier: - # Eraser Tool - if key == QtCore.Qt.Key_E or key == 'E': - self.app.grb_editor.on_eraser() - return - - # save (update) the current geometry and return to the App - if key == QtCore.Qt.Key_S or key == 'S': - self.app.editor2object() - return - - # toggle the measurement tool - if key == QtCore.Qt.Key_M or key == 'M': - self.app.distance_tool.run() - return - # SHIFT - elif modifiers == QtCore.Qt.ShiftModifier: - # Run Distance Minimum Tool - if key == QtCore.Qt.Key_M or key == 'M': - self.app.distance_min_tool.run() - return - # ALT - elif modifiers == QtCore.Qt.AltModifier: - # Mark Area Tool - if key == QtCore.Qt.Key_A or key == 'A': - self.app.grb_editor.on_markarea() - return - - # Poligonize Tool - if key == QtCore.Qt.Key_N or key == 'N': - self.app.grb_editor.on_poligonize() - return - # Transformation Tool - if key == QtCore.Qt.Key_R or key == 'R': - self.app.grb_editor.on_transform() - return - # NO MODIFIER - elif modifiers == QtCore.Qt.NoModifier: - # Abort the current action - if key == QtCore.Qt.Key_Escape or key == 'Escape': - # self.on_tool_select("select") - self.app.inform.emit('[WARNING_NOTCL] %s' % _("Cancelled.")) - - self.app.grb_editor.delete_utility_geometry() - - # self.app.grb_editor.plot_all() - self.app.grb_editor.active_tool.clean_up() - self.app.grb_editor.select_tool('select') - return - - # Delete selected object if delete key event comes out of canvas - if key == 'Delete': - self.app.grb_editor.launched_from_shortcuts = True - if self.app.grb_editor.selected: - self.app.grb_editor.delete_selected() - self.app.grb_editor.plot_all() - else: - self.app.inform.emit('[WARNING_NOTCL] %s' % _("Cancelled. Nothing selected to delete.")) - return - - # Delete aperture in apertures table if delete key event comes from the Selected Tab - if key == QtCore.Qt.Key_Delete: - self.app.grb_editor.launched_from_shortcuts = True - self.app.grb_editor.on_aperture_delete() - return - - if key == QtCore.Qt.Key_Minus or key == '-': - self.app.grb_editor.launched_from_shortcuts = True - self.app.plotcanvas.zoom(1 / self.app.defaults['global_zoom_ratio'], - [self.app.grb_editor.snap_x, self.app.grb_editor.snap_y]) - return - - if key == QtCore.Qt.Key_Equal or key == '=': - self.app.grb_editor.launched_from_shortcuts = True - self.app.plotcanvas.zoom(self.app.defaults['global_zoom_ratio'], - [self.app.grb_editor.snap_x, self.app.grb_editor.snap_y]) - return - - # toggle display of Notebook area - if key == QtCore.Qt.Key_QuoteLeft or key == '`': - self.app.grb_editor.launched_from_shortcuts = True - self.app.on_toggle_notebook() - return - - # Rotate - if key == QtCore.Qt.Key_Space or key == 'Space': - self.app.grb_editor.transform_tool.on_rotate_key() - - # Switch to Project Tab - if key == QtCore.Qt.Key_1 or key == '1': - self.app.grb_editor.launched_from_shortcuts = True - self.app.on_select_tab('project') - return - - # Switch to Selected Tab - if key == QtCore.Qt.Key_2 or key == '2': - self.app.grb_editor.launched_from_shortcuts = True - self.app.on_select_tab('selected') - return - - # Switch to Tool Tab - if key == QtCore.Qt.Key_3 or key == '3': - self.app.grb_editor.launched_from_shortcuts = True - self.app.on_select_tab('tool') - return - - # we do this so we can reuse the following keys while inside a Tool - # the above keys are general enough so were left outside - if self.app.grb_editor.active_tool is not None and self.grb_select_btn.isChecked() is False: - response = self.app.grb_editor.active_tool.on_key(key=key) - if response is not None: - self.app.inform.emit(response) - else: - # Add Array of pads - if key == QtCore.Qt.Key_A or key == 'A': - self.app.grb_editor.launched_from_shortcuts = True - self.app.inform.emit("Click on target point.") - self.app.ui.add_pad_ar_btn.setChecked(True) - - self.app.grb_editor.x = self.app.mouse[0] - self.app.grb_editor.y = self.app.mouse[1] - - self.app.grb_editor.select_tool('array') - return - - # Scale Tool - if key == QtCore.Qt.Key_B or key == 'B': - self.app.grb_editor.launched_from_shortcuts = True - self.app.grb_editor.select_tool('buffer') - return - - # Copy - if key == QtCore.Qt.Key_C or key == 'C': - self.app.grb_editor.launched_from_shortcuts = True - if self.app.grb_editor.selected: - self.app.inform.emit(_("Click on target point.")) - self.app.ui.aperture_copy_btn.setChecked(True) - self.app.grb_editor.on_tool_select('copy') - self.app.grb_editor.active_tool.set_origin( - (self.app.grb_editor.snap_x, self.app.grb_editor.snap_y)) - else: - self.app.inform.emit('[WARNING_NOTCL] %s' % _("Cancelled. Nothing selected to copy.")) - return - - # Add Disc Tool - if key == QtCore.Qt.Key_D or key == 'D': - self.app.grb_editor.launched_from_shortcuts = True - self.app.grb_editor.select_tool('disc') - return - - # Add SemiDisc Tool - if key == QtCore.Qt.Key_E or key == 'E': - self.app.grb_editor.launched_from_shortcuts = True - self.app.grb_editor.select_tool('semidisc') - return - - # Grid Snap - if key == QtCore.Qt.Key_G or key == 'G': - self.app.grb_editor.launched_from_shortcuts = True - # make sure that the cursor shape is enabled/disabled, too - if self.app.grb_editor.options['grid_snap'] is True: - self.app.app_cursor.enabled = False - else: - self.app.app_cursor.enabled = True - self.app.ui.grid_snap_btn.trigger() - return - - # Jump to coords - if key == QtCore.Qt.Key_J or key == 'J': - self.app.on_jump_to() - - # Corner Snap - if key == QtCore.Qt.Key_K or key == 'K': - self.app.grb_editor.launched_from_shortcuts = True - self.app.ui.corner_snap_btn.trigger() - return - - # Move - if key == QtCore.Qt.Key_M or key == 'M': - self.app.grb_editor.launched_from_shortcuts = True - if self.app.grb_editor.selected: - self.app.inform.emit(_("Click on target point.")) - self.app.ui.aperture_move_btn.setChecked(True) - self.app.grb_editor.on_tool_select('move') - self.app.grb_editor.active_tool.set_origin( - (self.app.grb_editor.snap_x, self.app.grb_editor.snap_y)) - else: - self.app.inform.emit('[WARNING_NOTCL] %s' % _("Cancelled. Nothing selected to move.")) - return - - # Add Region Tool - if key == QtCore.Qt.Key_N or key == 'N': - self.app.grb_editor.launched_from_shortcuts = True - self.app.grb_editor.select_tool('region') - return - - # Add Pad Tool - if key == QtCore.Qt.Key_P or key == 'P': - self.app.grb_editor.launched_from_shortcuts = True - self.app.inform.emit(_("Click on target point.")) - self.app.ui.add_pad_ar_btn.setChecked(True) - - self.app.grb_editor.x = self.app.mouse[0] - self.app.grb_editor.y = self.app.mouse[1] - - self.app.grb_editor.select_tool('pad') - return - - # Scale Tool - if key == QtCore.Qt.Key_S or key == 'S': - self.app.grb_editor.launched_from_shortcuts = True - self.app.grb_editor.select_tool('scale') - return - - # Add Track - if key == QtCore.Qt.Key_T or key == 'T': - self.app.grb_editor.launched_from_shortcuts = True - # ## Current application units in Upper Case - self.app.grb_editor.select_tool('track') - return - - # Zoom fit - if key == QtCore.Qt.Key_V or key == 'V': - self.app.grb_editor.launched_from_shortcuts = True - self.app.grb_editor.on_zoom_fit() - return - - # Show Shortcut list - if key == QtCore.Qt.Key_F3 or key == 'F3': - self.app.on_shortcut_list() - return - elif self.app.call_source == 'exc_editor': - # CTRL - if modifiers == QtCore.Qt.ControlModifier: - # save (update) the current geometry and return to the App - if key == QtCore.Qt.Key_S or key == 'S': - self.app.editor2object() - return - - # toggle the measurement tool - if key == QtCore.Qt.Key_M or key == 'M': - self.app.distance_tool.run() - return - # SHIFT - elif modifiers == QtCore.Qt.ShiftModifier: - # Run Distance Minimum Tool - if key == QtCore.Qt.Key_M or key == 'M': - self.app.distance_min_tool.run() - return - # ALT - elif modifiers == QtCore.Qt.AltModifier: - pass - # NO MODIFIER - elif modifiers == QtCore.Qt.NoModifier: - # Abort the current action - if key == QtCore.Qt.Key_Escape or key == 'Escape': - self.app.inform.emit('[WARNING_NOTCL] %s' % _("Cancelled.")) - - self.app.exc_editor.delete_utility_geometry() - - self.app.exc_editor.active_tool.clean_up() - - self.app.exc_editor.select_tool('drill_select') - return - - # Delete selected object if delete key event comes out of canvas - if key == 'Delete': - self.app.exc_editor.launched_from_shortcuts = True - if self.app.exc_editor.selected: - self.app.exc_editor.delete_selected() - self.app.exc_editor.replot() - else: - self.app.inform.emit('[WARNING_NOTCL] %s' % _("Cancelled. Nothing selected to delete.")) - return - - # Delete tools in tools table if delete key event comes from the Selected Tab - if key == QtCore.Qt.Key_Delete: - self.app.exc_editor.launched_from_shortcuts = True - self.app.exc_editor.on_tool_delete() - return - - if key == QtCore.Qt.Key_Minus or key == '-': - self.app.exc_editor.launched_from_shortcuts = True - self.app.plotcanvas.zoom(1 / self.app.defaults['global_zoom_ratio'], - [self.app.exc_editor.snap_x, self.app.exc_editor.snap_y]) - return - - if key == QtCore.Qt.Key_Equal or key == '=': - self.app.exc_editor.launched_from_shortcuts = True - self.app.plotcanvas.zoom(self.app.defaults['global_zoom_ratio'], - [self.app.exc_editor.snap_x, self.app.exc_editor.snap_y]) - return - - # toggle display of Notebook area - if key == QtCore.Qt.Key_QuoteLeft or key == '`': - self.app.exc_editor.launched_from_shortcuts = True - self.app.on_toggle_notebook() - return - - # Switch to Project Tab - if key == QtCore.Qt.Key_1 or key == '1': - self.app.exc_editor.launched_from_shortcuts = True - self.app.on_select_tab('project') - return - - # Switch to Selected Tab - if key == QtCore.Qt.Key_2 or key == '2': - self.app.exc_editor.launched_from_shortcuts = True - self.app.on_select_tab('selected') - return - - # Switch to Tool Tab - if key == QtCore.Qt.Key_3 or key == '3': - self.app.exc_editor.launched_from_shortcuts = True - self.app.on_select_tab('tool') - return - - # Grid Snap - if key == QtCore.Qt.Key_G or key == 'G': - self.app.exc_editor.launched_from_shortcuts = True - # make sure that the cursor shape is enabled/disabled, too - if self.app.exc_editor.options['grid_snap'] is True: - self.app.app_cursor.enabled = False - else: - self.app.app_cursor.enabled = True - self.app.ui.grid_snap_btn.trigger() - return - - # Corner Snap - if key == QtCore.Qt.Key_K or key == 'K': - self.app.exc_editor.launched_from_shortcuts = True - self.app.ui.corner_snap_btn.trigger() - return - - # Zoom Fit - if key == QtCore.Qt.Key_V or key == 'V': - self.app.exc_editor.launched_from_shortcuts = True - self.app.on_zoom_fit(None) - return - - # Add Slot Hole Tool - if key == QtCore.Qt.Key_W or key == 'W': - self.app.exc_editor.launched_from_shortcuts = True - self.app.inform.emit(_("Click on target point.")) - self.app.ui.add_slot_btn.setChecked(True) - - self.app.exc_editor.x = self.app.mouse[0] - self.app.exc_editor.y = self.app.mouse[1] - - self.app.exc_editor.select_tool('slot_add') - return - - # Propagate to tool - - # Show Shortcut list - if key == QtCore.Qt.Key_F3 or key == 'F3': - self.app.on_shortcut_list() - return - - # we do this so we can reuse the following keys while inside a Tool - # the above keys are general enough so were left outside - if self.app.exc_editor.active_tool is not None and self.select_drill_btn.isChecked() is False: - response = self.app.exc_editor.active_tool.on_key(key=key) - if response is not None: - self.app.inform.emit(response) - else: - # Add Array of Drill Hole Tool - if key == QtCore.Qt.Key_A or key == 'A': - self.app.exc_editor.launched_from_shortcuts = True - self.app.inform.emit("Click on target point.") - self.app.ui.add_drill_array_btn.setChecked(True) - - self.app.exc_editor.x = self.app.mouse[0] - self.app.exc_editor.y = self.app.mouse[1] - - self.app.exc_editor.select_tool('drill_array') - return - - # Copy - if key == QtCore.Qt.Key_C or key == 'C': - self.app.exc_editor.launched_from_shortcuts = True - if self.app.exc_editor.selected: - self.app.inform.emit(_("Click on target point.")) - self.app.ui.copy_drill_btn.setChecked(True) - self.app.exc_editor.on_tool_select('drill_copy') - self.app.exc_editor.active_tool.set_origin( - (self.app.exc_editor.snap_x, self.app.exc_editor.snap_y)) - else: - self.app.inform.emit('[WARNING_NOTCL] %s' % _("Cancelled. Nothing selected to copy.")) - return - - # Add Drill Hole Tool - if key == QtCore.Qt.Key_D or key == 'D': - self.app.exc_editor.launched_from_shortcuts = True - self.app.inform.emit(_("Click on target point.")) - self.app.ui.add_drill_btn.setChecked(True) - - self.app.exc_editor.x = self.app.mouse[0] - self.app.exc_editor.y = self.app.mouse[1] - - self.app.exc_editor.select_tool('drill_add') - return - - # Jump to coords - if key == QtCore.Qt.Key_J or key == 'J': - self.app.on_jump_to() - - # Move - if key == QtCore.Qt.Key_M or key == 'M': - self.app.exc_editor.launched_from_shortcuts = True - if self.app.exc_editor.selected: - self.app.inform.emit(_("Click on target point.")) - self.app.ui.move_drill_btn.setChecked(True) - self.app.exc_editor.on_tool_select('drill_move') - self.app.exc_editor.active_tool.set_origin( - (self.app.exc_editor.snap_x, self.app.exc_editor.snap_y)) - else: - self.app.inform.emit('[WARNING_NOTCL] %s' % _("Cancelled. Nothing selected to move.")) - return - - # Add Array of Slots Hole Tool - if key == QtCore.Qt.Key_Q or key == 'Q': - self.app.exc_editor.launched_from_shortcuts = True - self.app.inform.emit("Click on target point.") - self.app.ui.add_slot_array_btn.setChecked(True) - - self.app.exc_editor.x = self.app.mouse[0] - self.app.exc_editor.y = self.app.mouse[1] - - self.app.exc_editor.select_tool('slot_array') - return - - # Resize Tool - if key == QtCore.Qt.Key_R or key == 'R': - self.app.exc_editor.launched_from_shortcuts = True - self.app.exc_editor.select_tool('drill_resize') - return - - # Add Tool - if key == QtCore.Qt.Key_T or key == 'T': - self.app.exc_editor.launched_from_shortcuts = True - # ## Current application units in Upper Case - self.units = self.general_defaults_form.general_app_group.units_radio.get_value().upper() - tool_add_popup = FCInputDialog(title=_("New Tool ..."), - text='%s:' % _('Enter a Tool Diameter'), - min=0.0000, max=99.9999, decimals=4) - tool_add_popup.setWindowIcon(QtGui.QIcon(self.app.resource_location + '/letter_t_32.png')) - - val, ok = tool_add_popup.get_value() - if ok: - self.app.exc_editor.on_tool_add(tooldia=val) - formated_val = '%.*f' % (self.decimals, float(val)) - self.app.inform.emit( - '[success] %s: %s %s' % (_("Added new tool with dia"), formated_val, str(self.units)) - ) - else: - self.app.inform.emit('[WARNING_NOTCL] %s' % _("Adding Tool cancelled ...")) - return - elif self.app.call_source == 'measurement': - if modifiers == QtCore.Qt.ControlModifier: - pass - elif modifiers == QtCore.Qt.AltModifier: - pass - elif modifiers == QtCore.Qt.ShiftModifier: - pass - # NO MODIFIER - elif modifiers == QtCore.Qt.NoModifier: - if key == QtCore.Qt.Key_Escape or key == 'Escape': - # abort the measurement action - self.app.distance_tool.deactivate_measure_tool() - self.app.inform.emit(_("Distance Tool exit...")) - return - - if key == QtCore.Qt.Key_G or key == 'G': - self.app.ui.grid_snap_btn.trigger() - return - - # Jump to coords - if key == QtCore.Qt.Key_J or key == 'J': - self.app.on_jump_to() - elif self.app.call_source == 'qrcode_tool': - # CTRL + ALT - if modifiers == QtCore.Qt.ControlModifier | QtCore.Qt.AltModifier: - if key == QtCore.Qt.Key_X: - self.app.abort_all_tasks() - return - - elif modifiers == QtCore.Qt.ControlModifier: - pass - elif modifiers == QtCore.Qt.ShiftModifier: - pass - elif modifiers == QtCore.Qt.AltModifier: - pass - # NO MODIFIER - elif modifiers == QtCore.Qt.NoModifier: - # Escape = Deselect All - if key == QtCore.Qt.Key_Escape or key == 'Escape': - self.app.qrcode_tool.on_exit() - - # Grid toggle - if key == QtCore.Qt.Key_G: - self.app.ui.grid_snap_btn.trigger() - - # Jump to coords - if key == QtCore.Qt.Key_J: - self.app.on_jump_to() - elif self.app.call_source == 'copper_thieving_tool': - # CTRL + ALT - if modifiers == QtCore.Qt.ControlModifier | QtCore.Qt.AltModifier: - if key == QtCore.Qt.Key_X: - self.app.abort_all_tasks() - return - elif modifiers == QtCore.Qt.ControlModifier: - pass - elif modifiers == QtCore.Qt.ShiftModifier: - pass - elif modifiers == QtCore.Qt.AltModifier: - pass - # NO MODIFIER - elif modifiers == QtCore.Qt.NoModifier: - # Escape = Deselect All - if key == QtCore.Qt.Key_Escape or key == 'Escape': - self.app.copperfill_tool.on_exit() - - # Grid toggle - if key == QtCore.Qt.Key_G: - self.app.ui.grid_snap_btn.trigger() - - # Jump to coords - if key == QtCore.Qt.Key_J: - self.app.on_jump_to() - elif self.app.call_source == 'geometry': - if modifiers == QtCore.Qt.ControlModifier: - pass - elif modifiers == QtCore.Qt.AltModifier: - pass - elif modifiers == QtCore.Qt.ShiftModifier: - pass - # NO MODIFIER - elif modifiers == QtCore.Qt.NoModifier: - if key == QtCore.Qt.Key_Escape or key == 'Escape': - sel_obj = self.app.collection.get_active() - assert sel_obj.kind == 'geometry', "Expected a Geometry Object, got %s" % type(sel_obj) - - sel_obj.area_disconnect() - return - - if key == QtCore.Qt.Key_G or key == 'G': - self.app.ui.grid_snap_btn.trigger() - return - - # Jump to coords - if key == QtCore.Qt.Key_J or key == 'J': - self.app.on_jump_to() - - def createPopupMenu(self): - menu = super().createPopupMenu() - - menu.addSeparator() - menu.addAction(self.lock_action) - return menu - - def lock_toolbar(self, lock=False): - """ - Used to (un)lock the toolbars of the app. - - :param lock: boolean, will lock all toolbars in place when set True - :return: None - """ - - if lock: - for widget in self.children(): - if isinstance(widget, QtWidgets.QToolBar): - widget.setMovable(False) - else: - for widget in self.children(): - if isinstance(widget, QtWidgets.QToolBar): - widget.setMovable(True) - - def dragEnterEvent(self, event): - if event.mimeData().hasUrls: - event.accept() - else: - event.ignore() - - def dragMoveEvent(self, event): - if event.mimeData().hasUrls: - event.accept() - else: - event.ignore() - - def dropEvent(self, event): - if event.mimeData().hasUrls: - event.setDropAction(QtCore.Qt.CopyAction) - event.accept() - for url in event.mimeData().urls(): - self.filename = str(url.toLocalFile()) - - if self.filename == "": - self.app.inform.emit("Cancelled.") - else: - extension = self.filename.lower().rpartition('.')[-1] - - if extension in self.app.grb_list: - self.app.worker_task.emit({'fcn': self.app.open_gerber, - 'params': [self.filename]}) - else: - event.ignore() - - if extension in self.app.exc_list: - self.app.worker_task.emit({'fcn': self.app.open_excellon, - 'params': [self.filename]}) - else: - event.ignore() - - if extension in self.app.gcode_list: - self.app.worker_task.emit({'fcn': self.app.open_gcode, - 'params': [self.filename]}) - else: - event.ignore() - - if extension in self.app.svg_list: - object_type = 'geometry' - self.app.worker_task.emit({'fcn': self.app.import_svg, - 'params': [self.filename, object_type, None]}) - - if extension in self.app.dxf_list: - object_type = 'geometry' - self.app.worker_task.emit({'fcn': self.app.import_dxf, - 'params': [self.filename, object_type, None]}) - - if extension in self.app.pdf_list: - self.app.pdf_tool.periodic_check(1000) - self.app.worker_task.emit({'fcn': self.app.pdf_tool.open_pdf, - 'params': [self.filename]}) - - if extension in self.app.prj_list: - # self.app.open_project() is not Thread Safe - self.app.open_project(self.filename) - - if extension in self.app.conf_list: - self.app.open_config_file(self.filename) - else: - event.ignore() - else: - event.ignore() - - def closeEvent(self, event): - if self.app.save_in_progress: - self.app.inform.emit('[WARNING_NOTCL] %s' % _("Application is saving the project. Please wait ...")) - else: - grect = self.geometry() - - # self.splitter.sizes()[0] is actually the size of the "notebook" - if not self.isMaximized(): - self.geom_update.emit(grect.x(), grect.y(), grect.width(), grect.height(), self.splitter.sizes()[0]) - - self.final_save.emit() - event.ignore() - - -class FlatCAMActivityView(QtWidgets.QWidget): - """ - This class create and control the activity icon displayed in the App status bar - """ - - def __init__(self, app, parent=None): - super().__init__(parent=parent) - - self.app = app - - if self.app.defaults["global_activity_icon"] == "Ball green": - icon = self.app.resource_location + '/active_2_static.png' - movie = self.app.resource_location + "/active_2.gif" - elif self.app.defaults["global_activity_icon"] == "Ball black": - icon = self.app.resource_location + '/active_static.png' - movie = self.app.resource_location + "/active.gif" - elif self.app.defaults["global_activity_icon"] == "Arrow green": - icon = self.app.resource_location + '/active_3_static.png' - movie = self.app.resource_location + "/active_3.gif" - elif self.app.defaults["global_activity_icon"] == "Eclipse green": - icon = self.app.resource_location + '/active_4_static.png' - movie = self.app.resource_location + "/active_4.gif" - else: - icon = self.app.resource_location + '/active_static.png' - movie = self.app.resource_location + "/active.gif" - - self.setMinimumWidth(200) - self.movie_path = movie - self.icon_path = icon - - self.icon = QtWidgets.QLabel(self) - self.icon.setGeometry(0, 0, 16, 12) - self.movie = QtGui.QMovie(self.movie_path) - - self.icon.setMovie(self.movie) - # self.movie.start() - - layout = QtWidgets.QHBoxLayout() - layout.setContentsMargins(5, 0, 5, 0) - layout.setAlignment(QtCore.Qt.AlignLeft) - self.setLayout(layout) - - layout.addWidget(self.icon) - self.text = QtWidgets.QLabel(self) - self.text.setText(_("Idle.")) - self.icon.setPixmap(QtGui.QPixmap(self.icon_path)) - - layout.addWidget(self.text) - - def set_idle(self): - self.movie.stop() - self.text.setText(_("Idle.")) - - def set_busy(self, msg, no_movie=None): - if no_movie is not True: - self.icon.setMovie(self.movie) - self.movie.start() - self.text.setText(msg) - - -class FlatCAMInfoBar(QtWidgets.QWidget): - """ - This class create a place to display the App messages in the Status Bar - """ - - def __init__(self, parent=None, app=None): - super(FlatCAMInfoBar, self).__init__(parent=parent) - - self.app = app - - self.icon = QtWidgets.QLabel(self) - self.icon.setGeometry(0, 0, 12, 12) - self.pmap = QtGui.QPixmap(self.app.resource_location + '/graylight12.png') - self.icon.setPixmap(self.pmap) - - self.lock_pmaps = False - - layout = QtWidgets.QHBoxLayout() - layout.setContentsMargins(5, 0, 5, 0) - self.setLayout(layout) - - layout.addWidget(self.icon) - - self.text = QtWidgets.QLabel(self) - self.text.setText(_("Application started ...")) - self.text.setToolTip(_("Hello!")) - - layout.addWidget(self.text) - layout.addStretch() - - def set_text_(self, text, color=None): - self.text.setText(text) - self.text.setToolTip(text) - if color: - self.text.setStyleSheet('color: %s' % str(color)) - - def set_status(self, text, level="info"): - level = str(level) - - if self.lock_pmaps is not True: - self.pmap.fill() - if level == "ERROR" or level == "ERROR_NOTCL": - self.pmap = QtGui.QPixmap(self.app.resource_location + '/redlight12.png') - elif level.lower() == "success": - self.pmap = QtGui.QPixmap(self.app.resource_location + '/greenlight12.png') - elif level == "WARNING" or level == "WARNING_NOTCL": - self.pmap = QtGui.QPixmap(self.app.resource_location + '/yellowlight12.png') - elif level.lower() == "selected": - self.pmap = QtGui.QPixmap(self.app.resource_location + '/bluelight12.png') - else: - self.pmap = QtGui.QPixmap(self.app.resource_location + '/graylight12.png') - - try: - self.set_text_(text) - self.icon.setPixmap(self.pmap) - except Exception as e: - log.debug("FlatCAMInfoBar.set_status() --> %s" % str(e)) - - -class FlatCAMSystemTray(QtWidgets.QSystemTrayIcon): - """ - This class create the Sys Tray icon for the app - """ - - def __init__(self, app, icon, headless=None, parent=None): - # QtWidgets.QSystemTrayIcon.__init__(self, icon, parent) - super().__init__(icon, parent=parent) - self.app = app - - menu = QtWidgets.QMenu(parent) - - menu_runscript = QtWidgets.QAction(QtGui.QIcon(self.app.resource_location + '/script14.png'), - '%s' % _('Run Script ...'), self) - menu_runscript.setToolTip( - _("Will run the opened Tcl Script thus\n" - "enabling the automation of certain\n" - "functions of FlatCAM.") - ) - menu.addAction(menu_runscript) - - menu.addSeparator() - - if headless is None: - self.menu_open = menu.addMenu(QtGui.QIcon(self.app.resource_location + '/folder32_bis.png'), _('Open')) - - # Open Project ... - menu_openproject = QtWidgets.QAction(QtGui.QIcon(self.app.resource_location + '/folder16.png'), - _('Open Project ...'), self) - self.menu_open.addAction(menu_openproject) - self.menu_open.addSeparator() - - # Open Gerber ... - menu_opengerber = QtWidgets.QAction(QtGui.QIcon(self.app.resource_location + '/flatcam_icon24.png'), - _('Open &Gerber ...\tCtrl+G'), self) - self.menu_open.addAction(menu_opengerber) - - # Open Excellon ... - menu_openexcellon = QtWidgets.QAction(QtGui.QIcon(self.app.resource_location + '/open_excellon32.png'), - _('Open &Excellon ...\tCtrl+E'), self) - self.menu_open.addAction(menu_openexcellon) - - # Open G-Code ... - menu_opengcode = QtWidgets.QAction(QtGui.QIcon(self.app.resource_location + '/code.png'), - _('Open G-&Code ...'), self) - self.menu_open.addAction(menu_opengcode) - - self.menu_open.addSeparator() - - menu_openproject.triggered.connect(self.app.on_file_openproject) - menu_opengerber.triggered.connect(self.app.on_fileopengerber) - menu_openexcellon.triggered.connect(self.app.on_fileopenexcellon) - menu_opengcode.triggered.connect(self.app.on_fileopengcode) - - exitAction = menu.addAction(_("Exit")) - exitAction.setIcon(QtGui.QIcon(self.app.resource_location + '/power16.png')) - self.setContextMenu(menu) - - menu_runscript.triggered.connect(lambda: self.app.on_filerunscript( - silent=True if self.app.cmd_line_headless == 1 else False)) - - exitAction.triggered.connect(self.app.final_save) - # end of file diff --git a/flatcamGUI/GUIElements.py b/flatcamGUI/GUIElements.py index 2d6a6c86..660cc2f1 100644 --- a/flatcamGUI/GUIElements.py +++ b/flatcamGUI/GUIElements.py @@ -2475,7 +2475,8 @@ class SpinBoxDelegate(QtWidgets.QItemDelegate): def updateEditorGeometry(self, editor, option, index): editor.setGeometry(option.rect) - def setDecimals(self, spinbox, digits): + @staticmethod + def setDecimals(spinbox, digits): spinbox.setDecimals(digits) @@ -2942,6 +2943,207 @@ class FCFileSaveDialog(QtWidgets.QFileDialog): return filename, _filter +class FlatCAMActivityView(QtWidgets.QWidget): + """ + This class create and control the activity icon displayed in the App status bar + """ + + def __init__(self, app, parent=None): + super().__init__(parent=parent) + + self.app = app + + if self.app.defaults["global_activity_icon"] == "Ball green": + icon = self.app.resource_location + '/active_2_static.png' + movie = self.app.resource_location + "/active_2.gif" + elif self.app.defaults["global_activity_icon"] == "Ball black": + icon = self.app.resource_location + '/active_static.png' + movie = self.app.resource_location + "/active.gif" + elif self.app.defaults["global_activity_icon"] == "Arrow green": + icon = self.app.resource_location + '/active_3_static.png' + movie = self.app.resource_location + "/active_3.gif" + elif self.app.defaults["global_activity_icon"] == "Eclipse green": + icon = self.app.resource_location + '/active_4_static.png' + movie = self.app.resource_location + "/active_4.gif" + else: + icon = self.app.resource_location + '/active_static.png' + movie = self.app.resource_location + "/active.gif" + + self.setMinimumWidth(200) + self.movie_path = movie + self.icon_path = icon + + self.icon = QtWidgets.QLabel(self) + self.icon.setGeometry(0, 0, 16, 12) + self.movie = QtGui.QMovie(self.movie_path) + + self.icon.setMovie(self.movie) + # self.movie.start() + + layout = QtWidgets.QHBoxLayout() + layout.setContentsMargins(5, 0, 5, 0) + layout.setAlignment(QtCore.Qt.AlignLeft) + self.setLayout(layout) + + layout.addWidget(self.icon) + self.text = QtWidgets.QLabel(self) + self.text.setText(_("Idle.")) + self.icon.setPixmap(QtGui.QPixmap(self.icon_path)) + + layout.addWidget(self.text) + + def set_idle(self): + self.movie.stop() + self.text.setText(_("Idle.")) + + def set_busy(self, msg, no_movie=None): + if no_movie is not True: + self.icon.setMovie(self.movie) + self.movie.start() + self.text.setText(msg) + + +class FlatCAMInfoBar(QtWidgets.QWidget): + """ + This class create a place to display the App messages in the Status Bar + """ + + def __init__(self, parent=None, app=None): + super(FlatCAMInfoBar, self).__init__(parent=parent) + + self.app = app + + self.icon = QtWidgets.QLabel(self) + self.icon.setGeometry(0, 0, 12, 12) + self.pmap = QtGui.QPixmap(self.app.resource_location + '/graylight12.png') + self.icon.setPixmap(self.pmap) + + self.lock_pmaps = False + + layout = QtWidgets.QHBoxLayout() + layout.setContentsMargins(5, 0, 5, 0) + self.setLayout(layout) + + layout.addWidget(self.icon) + + self.text = QtWidgets.QLabel(self) + self.text.setText(_("Application started ...")) + self.text.setToolTip(_("Hello!")) + + layout.addWidget(self.text) + layout.addStretch() + + def set_text_(self, text, color=None): + self.text.setText(text) + self.text.setToolTip(text) + if color: + self.text.setStyleSheet('color: %s' % str(color)) + + def set_status(self, text, level="info"): + level = str(level) + + if self.lock_pmaps is not True: + self.pmap.fill() + if level == "ERROR" or level == "ERROR_NOTCL": + self.pmap = QtGui.QPixmap(self.app.resource_location + '/redlight12.png') + elif level.lower() == "success": + self.pmap = QtGui.QPixmap(self.app.resource_location + '/greenlight12.png') + elif level == "WARNING" or level == "WARNING_NOTCL": + self.pmap = QtGui.QPixmap(self.app.resource_location + '/yellowlight12.png') + elif level.lower() == "selected": + self.pmap = QtGui.QPixmap(self.app.resource_location + '/bluelight12.png') + else: + self.pmap = QtGui.QPixmap(self.app.resource_location + '/graylight12.png') + + try: + self.set_text_(text) + self.icon.setPixmap(self.pmap) + except Exception as e: + log.debug("FlatCAMInfoBar.set_status() --> %s" % str(e)) + + +class FlatCAMSystemTray(QtWidgets.QSystemTrayIcon): + """ + This class create the Sys Tray icon for the app + """ + + def __init__(self, app, icon, headless=None, parent=None): + # QtWidgets.QSystemTrayIcon.__init__(self, icon, parent) + super().__init__(icon, parent=parent) + self.app = app + + menu = QtWidgets.QMenu(parent) + + menu_runscript = QtWidgets.QAction(QtGui.QIcon(self.app.resource_location + '/script14.png'), + '%s' % _('Run Script ...'), self) + menu_runscript.setToolTip( + _("Will run the opened Tcl Script thus\n" + "enabling the automation of certain\n" + "functions of FlatCAM.") + ) + menu.addAction(menu_runscript) + + menu.addSeparator() + + if headless is None: + self.menu_open = menu.addMenu(QtGui.QIcon(self.app.resource_location + '/folder32_bis.png'), _('Open')) + + # Open Project ... + menu_openproject = QtWidgets.QAction(QtGui.QIcon(self.app.resource_location + '/folder16.png'), + _('Open Project ...'), self) + self.menu_open.addAction(menu_openproject) + self.menu_open.addSeparator() + + # Open Gerber ... + menu_opengerber = QtWidgets.QAction(QtGui.QIcon(self.app.resource_location + '/flatcam_icon24.png'), + _('Open &Gerber ...\tCtrl+G'), self) + self.menu_open.addAction(menu_opengerber) + + # Open Excellon ... + menu_openexcellon = QtWidgets.QAction(QtGui.QIcon(self.app.resource_location + '/open_excellon32.png'), + _('Open &Excellon ...\tCtrl+E'), self) + self.menu_open.addAction(menu_openexcellon) + + # Open G-Code ... + menu_opengcode = QtWidgets.QAction(QtGui.QIcon(self.app.resource_location + '/code.png'), + _('Open G-&Code ...'), self) + self.menu_open.addAction(menu_opengcode) + + self.menu_open.addSeparator() + + menu_openproject.triggered.connect(self.app.on_file_openproject) + menu_opengerber.triggered.connect(self.app.on_fileopengerber) + menu_openexcellon.triggered.connect(self.app.on_fileopenexcellon) + menu_opengcode.triggered.connect(self.app.on_fileopengcode) + + exitAction = menu.addAction(_("Exit")) + exitAction.setIcon(QtGui.QIcon(self.app.resource_location + '/power16.png')) + self.setContextMenu(menu) + + menu_runscript.triggered.connect(lambda: self.app.on_filerunscript( + silent=True if self.app.cmd_line_headless == 1 else False)) + + exitAction.triggered.connect(self.app.final_save) + + +def message_dialog(title, message, kind="info", parent=None): + """ + Builds and show a custom QMessageBox to be used in FlatCAM. + + :param title: title of the QMessageBox + :param message: message to be displayed + :param kind: type of QMessageBox; will display a specific icon. + :param parent: parent + :return: None + """ + icon = {"info": QtWidgets.QMessageBox.Information, + "warning": QtWidgets.QMessageBox.Warning, + "error": QtWidgets.QMessageBox.Critical}[str(kind)] + dlg = QtWidgets.QMessageBox(icon, title, message, parent=parent) + dlg.setText(message) + dlg.exec_() + + def rreplace(s, old, new, occurrence): """ Credits go here: diff --git a/flatcamGUI/preferences/general/GeneralAppPrefGroupUI.py b/flatcamGUI/preferences/general/GeneralAppPrefGroupUI.py index 7f238b5f..2f7cb255 100644 --- a/flatcamGUI/preferences/general/GeneralAppPrefGroupUI.py +++ b/flatcamGUI/preferences/general/GeneralAppPrefGroupUI.py @@ -380,12 +380,11 @@ class GeneralAppPrefGroupUI(OptionsGroupUI): def on_toggle_shell_from_settings(self, state): """ - Toggle shell: if is visible close it, if it is closed then open it + Toggle shell ui: if is visible close it, if it is closed then open it + :return: None """ - self.app.defaults.report_usage("on_toggle_shell_from_settings()") - if state is True: if not self.app.ui.shell_dock.isVisible(): self.app.ui.shell_dock.show() From ba3f10d355d80e977cb955f34e418b458f67de7d Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Mon, 18 May 2020 16:02:41 +0300 Subject: [PATCH 44/99] - renamed classes to have shorter names and grouped --- FlatCAMApp.py => App.py | 152 +++++++++--------- FlatCAMDB.py => AppDatabase.py | 10 +- .../FlatCAMExcEditor.py | 22 +-- .../FlatCAMGeoEditor.py | 32 ++-- .../FlatCAMGrbEditor.py | 24 +-- .../FlatCAMTextEditor.py | 4 +- {flatcamEditors => AppEditors}/__init__.py | 0 {flatcamGUI => AppGUI}/FlatCAMGUI.py | 70 ++++---- {flatcamGUI => AppGUI}/GUIElements.py | 2 +- {flatcamGUI => AppGUI}/ObjectUI.py | 14 +- {flatcamGUI => AppGUI}/PlotCanvas.py | 4 +- {flatcamGUI => AppGUI}/PlotCanvasLegacy.py | 2 +- {flatcamGUI => AppGUI}/VisPyCanvas.py | 0 .../VisPyData/data/fonts/opensans-regular.ttf | Bin .../VisPyData/data/freetype/freetype253.dll | Bin .../data/freetype/freetype253_x64.dll | Bin {flatcamGUI => AppGUI}/VisPyPatches.py | 0 {flatcamGUI => AppGUI}/VisPyTesselators.py | 0 {flatcamGUI => AppGUI}/VisPyVisuals.py | 2 +- {flatcamGUI => AppGUI}/__init__.py | 0 .../preferences/OptionsGroupUI.py | 0 .../preferences/PreferencesUIManager.py | 22 +-- .../preferences/__init__.py | 4 +- .../cncjob/CNCJobAdvOptPrefGroupUI.py | 6 +- .../cncjob/CNCJobGenPrefGroupUI.py | 6 +- .../cncjob/CNCJobOptPrefGroupUI.py | 6 +- .../preferences/cncjob/CNCJobPreferencesUI.py | 6 +- .../preferences/cncjob/__init__.py | 0 .../excellon/ExcellonAdvOptPrefGroupUI.py | 6 +- .../excellon/ExcellonEditorPrefGroupUI.py | 6 +- .../excellon/ExcellonExpPrefGroupUI.py | 6 +- .../excellon/ExcellonGenPrefGroupUI.py | 6 +- .../excellon/ExcellonOptPrefGroupUI.py | 8 +- .../excellon/ExcellonPreferencesUI.py | 12 +- .../preferences/excellon/__init__.py | 0 .../general/GeneralAPPSetGroupUI.py | 12 +- .../general/GeneralAppPrefGroupUI.py | 6 +- .../general/GeneralGUIPrefGroupUI.py | 10 +- .../general/GeneralPreferencesUI.py | 8 +- .../preferences/general/__init__.py | 0 .../geometry/GeometryAdvOptPrefGroupUI.py | 6 +- .../geometry/GeometryEditorPrefGroupUI.py | 6 +- .../geometry/GeometryGenPrefGroupUI.py | 6 +- .../geometry/GeometryOptPrefGroupUI.py | 8 +- .../geometry/GeometryPreferencesUI.py | 10 +- .../preferences/geometry/__init__.py | 0 .../gerber/GerberAdvOptPrefGroupUI.py | 6 +- .../gerber/GerberEditorPrefGroupUI.py | 6 +- .../gerber/GerberExpPrefGroupUI.py | 6 +- .../gerber/GerberGenPrefGroupUI.py | 6 +- .../gerber/GerberOptPrefGroupUI.py | 6 +- .../preferences/gerber/GerberPreferencesUI.py | 12 +- .../preferences/gerber/__init__.py | 0 .../tools/Tools2CThievingPrefGroupUI.py | 6 +- .../preferences/tools/Tools2CalPrefGroupUI.py | 6 +- .../tools/Tools2EDrillsPrefGroupUI.py | 6 +- .../tools/Tools2FiducialsPrefGroupUI.py | 6 +- .../tools/Tools2InvertPrefGroupUI.py | 6 +- .../tools/Tools2OptimalPrefGroupUI.py | 6 +- .../preferences/tools/Tools2PreferencesUI.py | 20 +-- .../tools/Tools2PunchGerberPrefGroupUI.py | 6 +- .../tools/Tools2QRCodePrefGroupUI.py | 6 +- .../tools/Tools2RulesCheckPrefGroupUI.py | 6 +- .../tools/Tools2sidedPrefGroupUI.py | 6 +- .../tools/ToolsCalculatorsPrefGroupUI.py | 6 +- .../tools/ToolsCornersPrefGroupUI.py | 6 +- .../tools/ToolsCutoutPrefGroupUI.py | 8 +- .../preferences/tools/ToolsFilmPrefGroupUI.py | 6 +- .../preferences/tools/ToolsNCCPrefGroupUI.py | 6 +- .../tools/ToolsPaintPrefGroupUI.py | 6 +- .../tools/ToolsPanelizePrefGroupUI.py | 6 +- .../preferences/tools/ToolsPreferencesUI.py | 24 +-- .../tools/ToolsSolderpastePrefGroupUI.py | 6 +- .../preferences/tools/ToolsSubPrefGroupUI.py | 6 +- .../tools/ToolsTransformPrefGroupUI.py | 6 +- .../preferences/tools/__init__.py | 0 .../utilities/AutoCompletePrefGroupUI.py | 6 +- .../preferences/utilities/FAExcPrefGroupUI.py | 6 +- .../preferences/utilities/FAGcoPrefGroupUI.py | 6 +- .../preferences/utilities/FAGrbPrefGroupUI.py | 6 +- .../utilities/UtilPreferencesUI.py | 8 +- .../preferences/utilities/__init__.py | 0 .../FlatCAMCNCJob.py | 6 +- .../FlatCAMDocument.py | 6 +- .../FlatCAMExcellon.py | 16 +- .../FlatCAMGeometry.py | 18 +-- .../FlatCAMGerber.py | 16 +- {flatcamObjects => AppObjects}/FlatCAMObj.py | 10 +- .../FlatCAMScript.py | 8 +- .../ObjectCollection.py | 20 +-- {flatcamObjects => AppObjects}/__init__.py | 0 {flatcamParsers => AppParsers}/ParseDXF.py | 4 +- .../ParseDXF_Spline.py | 0 .../ParseExcellon.py | 28 ++-- {flatcamParsers => AppParsers}/ParseFont.py | 2 +- {flatcamParsers => AppParsers}/ParseGerber.py | 12 +- {flatcamParsers => AppParsers}/ParseHPGL2.py | 4 +- {flatcamParsers => AppParsers}/ParsePDF.py | 2 +- {flatcamParsers => AppParsers}/ParseSVG.py | 2 +- {flatcamParsers => AppParsers}/__init__.py | 0 FlatCAMPool.py => AppPool.py | 0 FlatCAMPostProc.py => AppPreProcessor.py | 0 FlatCAMProcess.py => AppProcess.py | 4 +- FlatCAMTool.py => AppTool.py | 6 +- .../ToolAlignObjects.py | 8 +- {flatcamTools => AppTools}/ToolCalculators.py | 6 +- {flatcamTools => AppTools}/ToolCalibration.py | 14 +- .../ToolCopperThieving.py | 10 +- {flatcamTools => AppTools}/ToolCorners.py | 8 +- {flatcamTools => AppTools}/ToolCutOut.py | 8 +- {flatcamTools => AppTools}/ToolDblSided.py | 12 +- {flatcamTools => AppTools}/ToolDistance.py | 16 +- {flatcamTools => AppTools}/ToolDistanceMin.py | 14 +- .../ToolExtractDrills.py | 6 +- {flatcamTools => AppTools}/ToolFiducials.py | 8 +- {flatcamTools => AppTools}/ToolFilm.py | 6 +- {flatcamTools => AppTools}/ToolImage.py | 8 +- .../ToolInvertGerber.py | 6 +- {flatcamTools => AppTools}/ToolMove.py | 8 +- {flatcamTools => AppTools}/ToolNCC.py | 60 +++---- {flatcamTools => AppTools}/ToolOptimal.py | 12 +- {flatcamTools => AppTools}/ToolPDF.py | 14 +- {flatcamTools => AppTools}/ToolPaint.py | 42 ++--- {flatcamTools => AppTools}/ToolPanelize.py | 8 +- {flatcamTools => AppTools}/ToolPcbWizard.py | 8 +- {flatcamTools => AppTools}/ToolProperties.py | 6 +- {flatcamTools => AppTools}/ToolPunchGerber.py | 6 +- {flatcamTools => AppTools}/ToolQRCode.py | 8 +- {flatcamTools => AppTools}/ToolRulesCheck.py | 10 +- {flatcamTools => AppTools}/ToolShell.py | 6 +- {flatcamTools => AppTools}/ToolSolderPaste.py | 12 +- {flatcamTools => AppTools}/ToolSub.py | 14 +- {flatcamTools => AppTools}/ToolTransform.py | 6 +- AppTools/__init__.py | 43 +++++ FlatCAMTranslation.py => AppTranslation.py | 0 FlatCAMWorker.py => AppWorker.py | 0 FlatCAMWorkerStack.py => AppWorkerStack.py | 2 +- FlatCAMBookmark.py => Bookmark.py | 4 +- CHANGELOG.md | 1 + FlatCAMCommon.py => Common.py | 8 +- FlatCAM.py | 6 +- camlib.py | 28 ++-- defaults.py | 14 +- flatcamTools/__init__.py | 43 ----- make_freezed.py | 2 +- preprocessors/Berta_CNC.py | 4 +- preprocessors/GRBL_laser.py | 2 +- preprocessors/ISEL_CNC.py | 2 +- preprocessors/ISEL_ICP_CNC.py | 2 +- preprocessors/Marlin.py | 2 +- preprocessors/Marlin_laser_FAN_pin.py | 2 +- preprocessors/Marlin_laser_Spindle_pin.py | 2 +- preprocessors/Paste_1.py | 2 +- preprocessors/Repetier.py | 2 +- preprocessors/Roland_MDX_20.py | 2 +- preprocessors/Toolchange_Custom.py | 2 +- preprocessors/Toolchange_Manual.py | 2 +- preprocessors/Toolchange_Probe_MACH3.py | 2 +- preprocessors/default.py | 2 +- preprocessors/grbl_11.py | 2 +- preprocessors/hpgl.py | 2 +- preprocessors/line_xyz.py | 2 +- tclCommands/TclCommand.py | 4 +- tclCommands/TclCommandBbox.py | 2 +- tclCommands/TclCommandBounds.py | 2 +- tclCommands/TclCommandCopperClear.py | 2 +- tclCommands/TclCommandDrillcncjob.py | 2 +- tclCommands/TclCommandGeoCutout.py | 2 +- tclCommands/TclCommandGetNames.py | 2 +- tclCommands/TclCommandGetPath.py | 2 +- tclCommands/TclCommandHelp.py | 2 +- tclCommands/TclCommandImportSvg.py | 2 +- tclCommands/TclCommandJoinExcellon.py | 2 +- tclCommands/TclCommandJoinGeometry.py | 2 +- tclCommands/TclCommandNregions.py | 2 +- tclCommands/TclCommandOpenDXF.py | 2 +- tclCommands/TclCommandOpenSVG.py | 2 +- tclCommands/TclCommandPaint.py | 2 +- tclCommands/TclCommandPlotAll.py | 4 +- tclCommands/TclCommandPlotObjects.py | 4 +- tclCommands/TclCommandScale.py | 2 +- tclCommands/TclCommandSetActive.py | 2 +- tclCommands/TclCommandSetOrigin.py | 2 +- tclCommands/TclCommandSetPath.py | 2 +- tclCommands/TclCommandSubtractRectangle.py | 2 +- 185 files changed, 749 insertions(+), 748 deletions(-) rename FlatCAMApp.py => App.py (99%) rename FlatCAMDB.py => AppDatabase.py (99%) rename {flatcamEditors => AppEditors}/FlatCAMExcEditor.py (99%) rename {flatcamEditors => AppEditors}/FlatCAMGeoEditor.py (99%) rename {flatcamEditors => AppEditors}/FlatCAMGrbEditor.py (99%) rename {flatcamEditors => AppEditors}/FlatCAMTextEditor.py (98%) rename {flatcamEditors => AppEditors}/__init__.py (100%) rename {flatcamGUI => AppGUI}/FlatCAMGUI.py (98%) rename {flatcamGUI => AppGUI}/GUIElements.py (99%) rename {flatcamGUI => AppGUI}/ObjectUI.py (99%) rename {flatcamGUI => AppGUI}/PlotCanvas.py (99%) rename {flatcamGUI => AppGUI}/PlotCanvasLegacy.py (99%) rename {flatcamGUI => AppGUI}/VisPyCanvas.py (100%) rename {flatcamGUI => AppGUI}/VisPyData/data/fonts/opensans-regular.ttf (100%) rename {flatcamGUI => AppGUI}/VisPyData/data/freetype/freetype253.dll (100%) rename {flatcamGUI => AppGUI}/VisPyData/data/freetype/freetype253_x64.dll (100%) rename {flatcamGUI => AppGUI}/VisPyPatches.py (100%) rename {flatcamGUI => AppGUI}/VisPyTesselators.py (100%) rename {flatcamGUI => AppGUI}/VisPyVisuals.py (99%) rename {flatcamGUI => AppGUI}/__init__.py (100%) rename {flatcamGUI => AppGUI}/preferences/OptionsGroupUI.py (100%) rename {flatcamGUI => AppGUI}/preferences/PreferencesUIManager.py (99%) rename {flatcamGUI => AppGUI}/preferences/__init__.py (79%) rename {flatcamGUI => AppGUI}/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py (97%) rename {flatcamGUI => AppGUI}/preferences/cncjob/CNCJobGenPrefGroupUI.py (98%) rename {flatcamGUI => AppGUI}/preferences/cncjob/CNCJobOptPrefGroupUI.py (94%) rename {flatcamGUI => AppGUI}/preferences/cncjob/CNCJobPreferencesUI.py (77%) rename {flatcamGUI => AppGUI}/preferences/cncjob/__init__.py (100%) rename {flatcamGUI => AppGUI}/preferences/excellon/ExcellonAdvOptPrefGroupUI.py (96%) rename {flatcamGUI => AppGUI}/preferences/excellon/ExcellonEditorPrefGroupUI.py (98%) rename {flatcamGUI => AppGUI}/preferences/excellon/ExcellonExpPrefGroupUI.py (97%) rename {flatcamGUI => AppGUI}/preferences/excellon/ExcellonGenPrefGroupUI.py (99%) rename {flatcamGUI => AppGUI}/preferences/excellon/ExcellonOptPrefGroupUI.py (97%) rename {flatcamGUI => AppGUI}/preferences/excellon/ExcellonPreferencesUI.py (77%) rename {flatcamGUI => AppGUI}/preferences/excellon/__init__.py (100%) rename {flatcamGUI => AppGUI}/preferences/general/GeneralAPPSetGroupUI.py (98%) rename {flatcamGUI => AppGUI}/preferences/general/GeneralAppPrefGroupUI.py (98%) rename {flatcamGUI => AppGUI}/preferences/general/GeneralGUIPrefGroupUI.py (98%) rename {flatcamGUI => AppGUI}/preferences/general/GeneralPreferencesUI.py (80%) rename {flatcamGUI => AppGUI}/preferences/general/__init__.py (100%) rename {flatcamGUI => AppGUI}/preferences/geometry/GeometryAdvOptPrefGroupUI.py (97%) rename {flatcamGUI => AppGUI}/preferences/geometry/GeometryEditorPrefGroupUI.py (93%) rename {flatcamGUI => AppGUI}/preferences/geometry/GeometryGenPrefGroupUI.py (96%) rename {flatcamGUI => AppGUI}/preferences/geometry/GeometryOptPrefGroupUI.py (97%) rename {flatcamGUI => AppGUI}/preferences/geometry/GeometryPreferencesUI.py (77%) rename {flatcamGUI => AppGUI}/preferences/geometry/__init__.py (100%) rename {flatcamGUI => AppGUI}/preferences/gerber/GerberAdvOptPrefGroupUI.py (97%) rename {flatcamGUI => AppGUI}/preferences/gerber/GerberEditorPrefGroupUI.py (97%) rename {flatcamGUI => AppGUI}/preferences/gerber/GerberExpPrefGroupUI.py (96%) rename {flatcamGUI => AppGUI}/preferences/gerber/GerberGenPrefGroupUI.py (98%) rename {flatcamGUI => AppGUI}/preferences/gerber/GerberOptPrefGroupUI.py (97%) rename {flatcamGUI => AppGUI}/preferences/gerber/GerberPreferencesUI.py (78%) rename {flatcamGUI => AppGUI}/preferences/gerber/__init__.py (100%) rename {flatcamGUI => AppGUI}/preferences/tools/Tools2CThievingPrefGroupUI.py (98%) rename {flatcamGUI => AppGUI}/preferences/tools/Tools2CalPrefGroupUI.py (96%) rename {flatcamGUI => AppGUI}/preferences/tools/Tools2EDrillsPrefGroupUI.py (97%) rename {flatcamGUI => AppGUI}/preferences/tools/Tools2FiducialsPrefGroupUI.py (96%) rename {flatcamGUI => AppGUI}/preferences/tools/Tools2InvertPrefGroupUI.py (93%) rename {flatcamGUI => AppGUI}/preferences/tools/Tools2OptimalPrefGroupUI.py (91%) rename {flatcamGUI => AppGUI}/preferences/tools/Tools2PreferencesUI.py (76%) rename {flatcamGUI => AppGUI}/preferences/tools/Tools2PunchGerberPrefGroupUI.py (97%) rename {flatcamGUI => AppGUI}/preferences/tools/Tools2QRCodePrefGroupUI.py (97%) rename {flatcamGUI => AppGUI}/preferences/tools/Tools2RulesCheckPrefGroupUI.py (98%) rename {flatcamGUI => AppGUI}/preferences/tools/Tools2sidedPrefGroupUI.py (95%) rename {flatcamGUI => AppGUI}/preferences/tools/ToolsCalculatorsPrefGroupUI.py (97%) rename {flatcamGUI => AppGUI}/preferences/tools/ToolsCornersPrefGroupUI.py (94%) rename {flatcamGUI => AppGUI}/preferences/tools/ToolsCutoutPrefGroupUI.py (96%) rename {flatcamGUI => AppGUI}/preferences/tools/ToolsFilmPrefGroupUI.py (98%) rename {flatcamGUI => AppGUI}/preferences/tools/ToolsNCCPrefGroupUI.py (98%) rename {flatcamGUI => AppGUI}/preferences/tools/ToolsPaintPrefGroupUI.py (98%) rename {flatcamGUI => AppGUI}/preferences/tools/ToolsPanelizePrefGroupUI.py (96%) rename {flatcamGUI => AppGUI}/preferences/tools/ToolsPreferencesUI.py (76%) rename {flatcamGUI => AppGUI}/preferences/tools/ToolsSolderpastePrefGroupUI.py (98%) rename {flatcamGUI => AppGUI}/preferences/tools/ToolsSubPrefGroupUI.py (88%) rename {flatcamGUI => AppGUI}/preferences/tools/ToolsTransformPrefGroupUI.py (98%) rename {flatcamGUI => AppGUI}/preferences/tools/__init__.py (100%) rename {flatcamGUI => AppGUI}/preferences/utilities/AutoCompletePrefGroupUI.py (94%) rename {flatcamGUI => AppGUI}/preferences/utilities/FAExcPrefGroupUI.py (95%) rename {flatcamGUI => AppGUI}/preferences/utilities/FAGcoPrefGroupUI.py (94%) rename {flatcamGUI => AppGUI}/preferences/utilities/FAGrbPrefGroupUI.py (94%) rename {flatcamGUI => AppGUI}/preferences/utilities/UtilPreferencesUI.py (76%) rename {flatcamGUI => AppGUI}/preferences/utilities/__init__.py (100%) rename {flatcamObjects => AppObjects}/FlatCAMCNCJob.py (99%) rename {flatcamObjects => AppObjects}/FlatCAMDocument.py (98%) rename {flatcamObjects => AppObjects}/FlatCAMExcellon.py (99%) rename {flatcamObjects => AppObjects}/FlatCAMGeometry.py (99%) rename {flatcamObjects => AppObjects}/FlatCAMGerber.py (99%) rename {flatcamObjects => AppObjects}/FlatCAMObj.py (98%) rename {flatcamObjects => AppObjects}/FlatCAMScript.py (98%) rename {flatcamObjects => AppObjects}/ObjectCollection.py (98%) rename {flatcamObjects => AppObjects}/__init__.py (100%) rename {flatcamParsers => AppParsers}/ParseDXF.py (99%) rename {flatcamParsers => AppParsers}/ParseDXF_Spline.py (100%) rename {flatcamParsers => AppParsers}/ParseExcellon.py (98%) rename {flatcamParsers => AppParsers}/ParseFont.py (99%) rename {flatcamParsers => AppParsers}/ParseGerber.py (99%) rename {flatcamParsers => AppParsers}/ParseHPGL2.py (99%) rename {flatcamParsers => AppParsers}/ParsePDF.py (99%) rename {flatcamParsers => AppParsers}/ParseSVG.py (99%) rename {flatcamParsers => AppParsers}/__init__.py (100%) rename FlatCAMPool.py => AppPool.py (100%) rename FlatCAMPostProc.py => AppPreProcessor.py (100%) rename FlatCAMProcess.py => AppProcess.py (98%) rename FlatCAMTool.py => AppTool.py (98%) rename {flatcamTools => AppTools}/ToolAlignObjects.py (99%) rename {flatcamTools => AppTools}/ToolCalculators.py (99%) rename {flatcamTools => AppTools}/ToolCalibration.py (99%) rename {flatcamTools => AppTools}/ToolCopperThieving.py (99%) rename {flatcamTools => AppTools}/ToolCorners.py (98%) rename {flatcamTools => AppTools}/ToolCutOut.py (99%) rename {flatcamTools => AppTools}/ToolDblSided.py (99%) rename {flatcamTools => AppTools}/ToolDistance.py (98%) rename {flatcamTools => AppTools}/ToolDistanceMin.py (97%) rename {flatcamTools => AppTools}/ToolExtractDrills.py (99%) rename {flatcamTools => AppTools}/ToolFiducials.py (99%) rename {flatcamTools => AppTools}/ToolFilm.py (99%) rename {flatcamTools => AppTools}/ToolImage.py (98%) rename {flatcamTools => AppTools}/ToolInvertGerber.py (98%) rename {flatcamTools => AppTools}/ToolMove.py (98%) rename {flatcamTools => AppTools}/ToolNCC.py (99%) rename {flatcamTools => AppTools}/ToolOptimal.py (98%) rename {flatcamTools => AppTools}/ToolPDF.py (98%) rename {flatcamTools => AppTools}/ToolPaint.py (99%) rename {flatcamTools => AppTools}/ToolPanelize.py (99%) rename {flatcamTools => AppTools}/ToolPcbWizard.py (99%) rename {flatcamTools => AppTools}/ToolProperties.py (99%) rename {flatcamTools => AppTools}/ToolPunchGerber.py (99%) rename {flatcamTools => AppTools}/ToolQRCode.py (99%) rename {flatcamTools => AppTools}/ToolRulesCheck.py (99%) rename {flatcamTools => AppTools}/ToolShell.py (98%) rename {flatcamTools => AppTools}/ToolSolderPaste.py (99%) rename {flatcamTools => AppTools}/ToolSub.py (99%) rename {flatcamTools => AppTools}/ToolTransform.py (99%) create mode 100644 AppTools/__init__.py rename FlatCAMTranslation.py => AppTranslation.py (100%) rename FlatCAMWorker.py => AppWorker.py (100%) rename FlatCAMWorkerStack.py => AppWorkerStack.py (97%) rename FlatCAMBookmark.py => Bookmark.py (99%) rename FlatCAMCommon.py => Common.py (99%) delete mode 100644 flatcamTools/__init__.py diff --git a/FlatCAMApp.py b/App.py similarity index 99% rename from FlatCAMApp.py rename to App.py index 8186ddf4..64799ab9 100644 --- a/FlatCAMApp.py +++ b/App.py @@ -42,57 +42,57 @@ import socket # #################################################################################################################### # Diverse -from FlatCAMCommon import LoudDict, color_variant, ExclusionAreas -from FlatCAMBookmark import BookmarkManager -from FlatCAMDB import ToolsDB2 +from Common import LoudDict, color_variant, ExclusionAreas +from Bookmark import BookmarkManager +from AppDatabase import ToolsDB2 from vispy.gloo.util import _screenshot from vispy.io import write_png -# FlatCAM Objects +# FlatCAM AppObjects from defaults import FlatCAMDefaults -from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI -from flatcamGUI.preferences.PreferencesUIManager import PreferencesUIManager -from flatcamObjects.ObjectCollection import * -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 AppGUI.preferences.OptionsGroupUI import OptionsGroupUI +from AppGUI.preferences.PreferencesUIManager import PreferencesUIManager +from AppObjects.ObjectCollection import * +from AppObjects.FlatCAMObj import FlatCAMObj +from AppObjects.FlatCAMCNCJob import CNCJobObject +from AppObjects.FlatCAMDocument import DocumentObject +from AppObjects.FlatCAMExcellon import ExcellonObject +from AppObjects.FlatCAMGeometry import GeometryObject +from AppObjects.FlatCAMGerber import GerberObject +from AppObjects.FlatCAMScript import ScriptObject # FlatCAM Parsing files -from flatcamParsers.ParseExcellon import Excellon -from flatcamParsers.ParseGerber import Gerber +from AppParsers.ParseExcellon import Excellon +from AppParsers.ParseGerber import Gerber from camlib import to_dict, dict2obj, ET, ParseError, Geometry, CNCjob -# FlatCAM GUI -from flatcamGUI.PlotCanvas import * -from flatcamGUI.PlotCanvasLegacy import * -from flatcamGUI.FlatCAMGUI import * -from flatcamGUI.GUIElements import FCFileSaveDialog, message_dialog, FlatCAMSystemTray +# FlatCAM AppGUI +from AppGUI.PlotCanvas import * +from AppGUI.PlotCanvasLegacy import * +from AppGUI.FlatCAMGUI import * +from AppGUI.GUIElements import FCFileSaveDialog, message_dialog, FlatCAMSystemTray # FlatCAM Pre-processors -from FlatCAMPostProc import load_preprocessors +from AppPreProcessor import load_preprocessors -# FlatCAM Editors -from flatcamEditors.FlatCAMGeoEditor import FlatCAMGeoEditor -from flatcamEditors.FlatCAMExcEditor import FlatCAMExcEditor -from flatcamEditors.FlatCAMGrbEditor import FlatCAMGrbEditor -from flatcamEditors.FlatCAMTextEditor import TextEditor -from flatcamParsers.ParseHPGL2 import HPGL2 +# FlatCAM AppEditors +from AppEditors.FlatCAMGeoEditor import FlatCAMGeoEditor +from AppEditors.FlatCAMExcEditor import FlatCAMExcEditor +from AppEditors.FlatCAMGrbEditor import FlatCAMGrbEditor +from AppEditors.FlatCAMTextEditor import TextEditor +from AppParsers.ParseHPGL2 import HPGL2 # FlatCAM Workers -from FlatCAMProcess import * -from FlatCAMWorkerStack import WorkerStack +from AppProcess import * +from AppWorkerStack import WorkerStack # FlatCAM Tools -from flatcamTools import * +from AppTools import * # FlatCAM Translation import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins if sys.platform == 'win32': @@ -106,7 +106,7 @@ if '_' not in builtins.__dict__: class App(QtCore.QObject): """ - The main application class. The constructor starts the GUI. + The main application class. The constructor starts the AppGUI. """ # ############################################################################################################### @@ -417,7 +417,7 @@ class App(QtCore.QObject): fp.close() # Application directory. CHDIR to it. Otherwise, trying to load - # GUI icons will fail as their path is relative. + # AppGUI icons will fail as their path is relative. # This will fail under cx_freeze ... self.app_home = os.path.dirname(os.path.realpath(__file__)) @@ -496,7 +496,7 @@ class App(QtCore.QObject): show_splash = 0 # ########################################################################################################### - # ######################################### Initialize GUI ################################################## + # ######################################### Initialize AppGUI ################################################## # ########################################################################################################### # FlatCAM colors used in plotting @@ -581,14 +581,14 @@ class App(QtCore.QObject): self.ui.excellon_defaults_form.excellon_opt_group.pp_excellon_name_cb.addItem(name) # ########################################################################################################### - # ##################################### UPDATE PREFERENCES GUI FORMS ######################################## + # ##################################### UPDATE PREFERENCES AppGUI FORMS ######################################## # ########################################################################################################### self.preferencesUiManager = PreferencesUIManager(defaults=self.defaults, data_path=self.data_path, ui=self.ui, inform=self.inform) self.preferencesUiManager.defaults_write_form() - # When the self.defaults dictionary changes will update the Preferences GUI forms + # When the self.defaults dictionary changes will update the Preferences AppGUI forms self.defaults.set_change_callback(self.on_defaults_dict_change) # ########################################################################################################### @@ -596,7 +596,7 @@ class App(QtCore.QObject): # ################################ It's done only once after install ##################################### # ########################################################################################################### if self.defaults["first_run"] is True: - # ONLY AT FIRST STARTUP INIT THE GUI LAYOUT TO 'COMPACT' + # ONLY AT FIRST STARTUP INIT THE AppGUI LAYOUT TO 'COMPACT' initial_lay = 'minimal' self.ui.general_defaults_form.general_gui_group.on_layout(lay=initial_lay) @@ -957,7 +957,7 @@ class App(QtCore.QObject): act.triggered.connect(self.on_set_color_action_triggered) # ########################################################################################################### - # #################################### GUI PREFERENCES SIGNALS ############################################## + # #################################### AppGUI PREFERENCES SIGNALS ############################################## # ########################################################################################################### self.ui.general_defaults_form.general_app_group.units_radio.activated_custom.connect( @@ -973,7 +973,7 @@ class App(QtCore.QObject): self.ui.general_defaults_form.general_app_set_group.workspace_cb.stateChanged.connect(self.on_workspace) # ########################################################################################################### - # ######################################## GUI SETTINGS SIGNALS ############################################# + # ######################################## AppGUI SETTINGS SIGNALS ############################################# # ########################################################################################################### self.ui.general_defaults_form.general_app_set_group.cursor_radio.activated_custom.connect(self.on_cursor_type) @@ -1086,7 +1086,7 @@ class App(QtCore.QObject): # ########################################## Other setups ################################################### # ########################################################################################################### - # to use for tools like Distance tool who depends on the event sources who are changed inside the Editors + # to use for tools like Distance tool who depends on the event sources who are changed inside the AppEditors # depending on from where those tools are called different actions can be done self.call_source = 'app' @@ -1559,7 +1559,7 @@ class App(QtCore.QObject): except AttributeError: self.tool_shapes = None else: - from flatcamGUI.PlotCanvasLegacy import ShapeCollectionLegacy + from AppGUI.PlotCanvasLegacy import ShapeCollectionLegacy self.tool_shapes = ShapeCollectionLegacy(obj=self, app=self, name="tool") # used in the delayed shutdown self.start_delayed_quit() method @@ -1606,7 +1606,7 @@ class App(QtCore.QObject): App.log.debug("END of constructor. Releasing control.") # ########################################################################################################### - # ########################################## SHOW GUI ####################################################### + # ########################################## SHOW AppGUI ####################################################### # ########################################################################################################### # if the app is not started as headless, show it @@ -1714,7 +1714,7 @@ class App(QtCore.QObject): try: shutil.copytree(from_path, to_path) except FileNotFoundError: - from_new_path = os.path.dirname(os.path.realpath(__file__)) + '\\flatcamGUI\\VisPyData\\data' + from_new_path = os.path.dirname(os.path.realpath(__file__)) + '\\AppGUI\\VisPyData\\data' shutil.copytree(from_new_path, to_path) def on_startup_args(self, args, silent=False): @@ -2130,7 +2130,7 @@ class App(QtCore.QObject): """ self.defaults.report_usage("object2editor()") - # disable the objects menu as it may interfere with the Editors + # disable the objects menu as it may interfere with the AppEditors self.ui.menuobjects.setDisabled(True) edited_object = self.collection.get_active() @@ -2267,8 +2267,8 @@ class App(QtCore.QObject): self.geo_editor.deactivate() - # restore GUI to the Selected TAB - # Remove anything else in the GUI + # restore AppGUI to the Selected TAB + # Remove anything else in the AppGUI self.ui.tool_scroll_area.takeWidget() # update the geo object options so it is including the bounding box values @@ -2306,8 +2306,8 @@ class App(QtCore.QObject): self.inform.emit('[success] %s' % _("Editor exited. Editor content saved.")) - # restore GUI to the Selected TAB - # Remove anything else in the GUI + # restore AppGUI to the Selected TAB + # Remove anything else in the AppGUI self.ui.selected_scroll_area.takeWidget() elif isinstance(edited_obj, ExcellonObject): @@ -2318,8 +2318,8 @@ class App(QtCore.QObject): self.exc_editor.deactivate() - # restore GUI to the Selected TAB - # Remove anything else in the GUI + # restore AppGUI to the Selected TAB + # Remove anything else in the AppGUI self.ui.tool_scroll_area.takeWidget() # delete the old object (the source object) if it was an empty one @@ -2671,7 +2671,7 @@ class App(QtCore.QObject): def new_object(self, kind, name, initialize, plot=True, autoselected=True): """ Creates a new specialized FlatCAMObj and attaches it to the application, - this is, updates the GUI accordingly, any other records and plots it. + this is, updates the AppGUI accordingly, any other records and plots it. This method is thread-safe. Notes: @@ -3568,7 +3568,7 @@ class App(QtCore.QObject): def on_portable_checked(self, state): """ - Callback called when the checkbox in Preferences GUI is checked. + Callback called when the checkbox in Preferences AppGUI is checked. It will set the application as portable by creating the preferences and recent files in the 'config' folder found in the FlatCAM installation folder. @@ -3952,7 +3952,7 @@ class App(QtCore.QObject): if len(objs) < 2: self.inform.emit('[ERROR_NOTCL] %s: %d' % - (_("At least two objects are required for join. Objects currently selected"), len(objs))) + (_("At least two objects are required for join. AppObjects currently selected"), len(objs))) return 'fail' for obj in objs: @@ -4011,7 +4011,7 @@ class App(QtCore.QObject): if len(objs) < 2: self.inform.emit('[ERROR_NOTCL] %s: %d' % - (_("At least two objects are required for join. Objects currently selected"), len(objs))) + (_("At least two objects are required for join. AppObjects currently selected"), len(objs))) return 'fail' def initialize(exc_obj, app): @@ -4039,7 +4039,7 @@ class App(QtCore.QObject): if len(objs) < 2: self.inform.emit('[ERROR_NOTCL] %s: %d' % - (_("At least two objects are required for join. Objects currently selected"), len(objs))) + (_("At least two objects are required for join. AppObjects currently selected"), len(objs))) return 'fail' def initialize(grb_obj, app): @@ -4125,7 +4125,7 @@ class App(QtCore.QObject): def on_defaults_dict_change(self, field): """ - Called whenever a key changed in the self.defaults dictionary. It will set the required GUI element in the + Called whenever a key changed in the self.defaults dictionary. It will set the required AppGUI element in the Edit -> Preferences tab window. :param field: the key of the self.defaults dictionary that was changed. @@ -4401,7 +4401,7 @@ class App(QtCore.QObject): self.preferencesUiManager.defaults_read_form() # the self.preferencesUiManager.defaults_read_form() will update all defaults values - # in self.defaults from the GUI elements but + # in self.defaults from the AppGUI elements but # I don't want it for the grid values, so I update them here self.defaults['global_gridx'] = val_x self.defaults['global_gridy'] = val_y @@ -6194,7 +6194,7 @@ class App(QtCore.QObject): def on_row_selected(self, obj_name): """ - This is a special string; when received it will make all Menu -> Objects entries unchecked + This is a special string; when received it will make all Menu -> AppObjects entries unchecked It mean we clicked outside of the items and deselected all :param obj_name: @@ -6378,7 +6378,7 @@ class App(QtCore.QObject): pass if obj_list: - self.inform.emit('%s' % _("Objects selection is cleared.")) + self.inform.emit('%s' % _("AppObjects selection is cleared.")) else: self.inform.emit('') @@ -6653,7 +6653,7 @@ class App(QtCore.QObject): else: self.selection_type = None - # hover effect - enabled in Preferences -> General -> GUI Settings + # hover effect - enabled in Preferences -> General -> AppGUI Settings if self.defaults['global_hover']: for obj in self.collection.get_list(): try: @@ -7240,7 +7240,7 @@ class App(QtCore.QObject): # Init FlatCAMTools self.init_tools() - # Try to close all tabs in the PlotArea but only if the GUI is active (CLI is None) + # Try to close all tabs in the PlotArea but only if the AppGUI is active (CLI is None) if cli is None: # we need to go in reverse because once we remove a tab then the index changes # meaning that removing the first tab (idx = 0) then the tab at former idx = 1 will assume idx = 0 @@ -9104,7 +9104,7 @@ class App(QtCore.QObject): # Register recent file self.file_opened.emit("svg", filename) - # GUI feedback + # AppGUI feedback self.inform.emit('[success] %s: %s' % (_("Opened"), filename)) def import_dxf(self, filename, geo_type='geometry', outname=None, plot=True): @@ -9150,7 +9150,7 @@ class App(QtCore.QObject): # Register recent file self.file_opened.emit("dxf", filename) - # GUI feedback + # AppGUI feedback self.inform.emit('[success] %s: %s' % (_("Opened"), filename)) def open_gerber(self, filename, outname=None, plot=True, from_tcl=False): @@ -9214,7 +9214,7 @@ class App(QtCore.QObject): # Register recent file self.file_opened.emit("gerber", filename) - # GUI feedback + # AppGUI feedback self.inform.emit('[success] %s: %s' % (_("Opened"), filename)) def open_excellon(self, filename, outname=None, plot=True, from_tcl=False): @@ -9281,7 +9281,7 @@ class App(QtCore.QObject): # Register recent file self.file_opened.emit("excellon", filename) - # GUI feedback + # AppGUI feedback self.inform.emit('[success] %s: %s' % (_("Opened"), filename)) def open_gcode(self, filename, outname=None, force_parsing=None, plot=True, from_tcl=False): @@ -9347,7 +9347,7 @@ class App(QtCore.QObject): # Register recent file self.file_opened.emit("cncjob", filename) - # GUI feedback + # AppGUI feedback self.inform.emit('[success] %s: %s' % (_("Opened"), filename)) def open_hpgl2(self, filename, outname=None): @@ -9412,7 +9412,7 @@ class App(QtCore.QObject): # Register recent file self.file_opened.emit("geometry", filename) - # GUI feedback + # AppGUI feedback self.inform.emit('[success] %s: %s' % (_("Opened"), filename)) def open_script(self, filename, outname=None, silent=False): @@ -9469,7 +9469,7 @@ class App(QtCore.QObject): # Register recent file self.file_opened.emit("script", filename) - # GUI feedback + # AppGUI feedback self.inform.emit('[success] %s: %s' % (_("Opened"), filename)) def open_config_file(self, filename, run_from_arg=None): @@ -9898,11 +9898,11 @@ class App(QtCore.QObject): #
  • 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.
    + # even dragging and dropping the files on the AppGUI.
    #
    # 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.

    + # file into the FLATCAM AppGUI or through the menu/toolbar links offered within the app.
    #  
  • #
  • Once an object is available in the Project Tab, by selecting it # and then @@ -9961,9 +9961,9 @@ class App(QtCore.QObject): s1=_("The normal flow when working in FlatCAM is the following:"), s2=_("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."), + "files on the AppGUI."), s3=_("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) " + "drag and drop of the file into the FLATCAM AppGUI or through the menu (or toolbar) " "actions offered within the app."), s4=_("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, " @@ -10211,7 +10211,7 @@ class App(QtCore.QObject): """ Enable plots - :param objects: list of Objects to be enabled + :param objects: list of AppObjects to be enabled :return: """ log.debug("Enabling plots ...") @@ -10254,7 +10254,7 @@ class App(QtCore.QObject): """ Disables plots - :param objects: list of Objects to be disabled + :param objects: list of AppObjects to be disabled :return: """ @@ -10304,7 +10304,7 @@ class App(QtCore.QObject): """ Toggle plots visibility - :param objects: list of Objects for which to be toggled the visibility + :param objects: list of AppObjects for which to be toggled the visibility :return: None """ diff --git a/FlatCAMDB.py b/AppDatabase.py similarity index 99% rename from FlatCAMDB.py rename to AppDatabase.py index f32bc37f..324ecc9b 100644 --- a/FlatCAMDB.py +++ b/AppDatabase.py @@ -1,5 +1,5 @@ from PyQt5 import QtGui, QtCore, QtWidgets -from flatcamGUI.GUIElements import FCTable, FCEntry, FCButton, FCDoubleSpinner, FCComboBox, FCCheckBox, FCSpinner, \ +from AppGUI.GUIElements import FCTable, FCEntry, FCButton, FCDoubleSpinner, FCComboBox, FCCheckBox, FCSpinner, \ FCTree, RadioSet, FCFileSaveDialog from camlib import to_dict @@ -9,7 +9,7 @@ import json from copy import deepcopy from datetime import datetime import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') @@ -1623,7 +1623,7 @@ class ToolsDB2(QtWidgets.QWidget): # #################################################################### # #################################################################### - # GUI for the lower part of the window + # AppGUI for the lower part of the window # #################################################################### # #################################################################### @@ -1939,7 +1939,7 @@ class ToolsDB2(QtWidgets.QWidget): if self.db_tool_dict: self.storage_to_form(self.db_tool_dict['1']) - # Enable GUI + # Enable AppGUI self.basic_box.setEnabled(True) self.advanced_box.setEnabled(True) self.ncc_box.setEnabled(True) @@ -1949,7 +1949,7 @@ class ToolsDB2(QtWidgets.QWidget): # self.tree_widget.setFocus() else: - # Disable GUI + # Disable AppGUI self.basic_box.setEnabled(False) self.advanced_box.setEnabled(False) self.ncc_box.setEnabled(False) diff --git a/flatcamEditors/FlatCAMExcEditor.py b/AppEditors/FlatCAMExcEditor.py similarity index 99% rename from flatcamEditors/FlatCAMExcEditor.py rename to AppEditors/FlatCAMExcEditor.py index 30d5182b..c8671180 100644 --- a/flatcamEditors/FlatCAMExcEditor.py +++ b/AppEditors/FlatCAMExcEditor.py @@ -9,9 +9,9 @@ from PyQt5 import QtGui, QtCore, QtWidgets from PyQt5.QtCore import Qt, QSettings 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 +from AppGUI.GUIElements import FCEntry, FCComboBox, FCTable, FCDoubleSpinner, RadioSet, FCSpinner +from AppEditors.FlatCAMGeoEditor import FCShapeTool, DrawTool, DrawToolShape, DrawToolUtilityShape, FlatCAMGeoEditor +from AppParsers.ParseExcellon import Excellon from shapely.geometry import LineString, LinearRing, MultiLineString, Polygon, MultiPolygon, Point import shapely.affinity as affinity @@ -26,7 +26,7 @@ import logging from copy import deepcopy import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') @@ -2123,7 +2123,7 @@ class FlatCAMExcEditor(QtCore.QObject): else: self.tool_shape = self.app.plotcanvas.new_shape_collection(layers=1) else: - from flatcamGUI.PlotCanvasLegacy import ShapeCollectionLegacy + from AppGUI.PlotCanvasLegacy import ShapeCollectionLegacy self.shapes = ShapeCollectionLegacy(obj=self, app=self.app, name='shapes_exc_editor') self.tool_shape = ShapeCollectionLegacy(obj=self, app=self.app, name='tool_shapes_exc_editor') @@ -2312,7 +2312,7 @@ class FlatCAMExcEditor(QtCore.QObject): tool_dia = float('%.*f' % (self.decimals, v['C'])) self.tool2tooldia[int(k)] = tool_dia - # Init GUI + # Init AppGUI self.addtool_entry.set_value(float(self.app.defaults['excellon_editor_newdia'])) self.drill_array_size_entry.set_value(int(self.app.defaults['excellon_editor_array_size'])) self.drill_axis_radio.set_value(self.app.defaults['excellon_editor_lin_dir']) @@ -2415,7 +2415,7 @@ class FlatCAMExcEditor(QtCore.QObject): drill_count = QtWidgets.QTableWidgetItem('%d' % drill_cnt) drill_count.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 + # if the slot number is zero is better to not clutter the AppGUI with zero's so we print a space if slot_cnt > 0: slot_count = QtWidgets.QTableWidgetItem('%d' % slot_cnt) else: @@ -2532,9 +2532,9 @@ class FlatCAMExcEditor(QtCore.QObject): # make sure no rows are selected so the user have to click the correct row, meaning selecting the correct tool self.tools_table_exc.clearSelection() - # Remove anything else in the GUI Selected Tab + # Remove anything else in the AppGUI Selected Tab self.app.ui.selected_scroll_area.takeWidget() - # Put ourself in the GUI Selected Tab + # Put ourself in the AppGUI Selected Tab self.app.ui.selected_scroll_area.setWidget(self.exc_edit_widget) # Switch notebook to Selected page self.app.ui.notebook.setCurrentWidget(self.app.ui.selected_tab) @@ -3043,7 +3043,7 @@ class FlatCAMExcEditor(QtCore.QObject): self.set_ui() - # now that we hava data, create the GUI interface and add it to the Tool Tab + # now that we hava data, create the AppGUI interface and add it to the Tool Tab self.build_ui(first_run=True) # we activate this after the initial build as we don't need to see the tool been populated @@ -4024,7 +4024,7 @@ class FlatCAMExcEditor(QtCore.QObject): def select_tool(self, toolname): """ - Selects a drawing tool. Impacts the object and GUI. + Selects a drawing tool. Impacts the object and AppGUI. :param toolname: Name of the tool. :return: None diff --git a/flatcamEditors/FlatCAMGeoEditor.py b/AppEditors/FlatCAMGeoEditor.py similarity index 99% rename from flatcamEditors/FlatCAMGeoEditor.py rename to AppEditors/FlatCAMGeoEditor.py index 8c7055d8..4834cae8 100644 --- a/flatcamEditors/FlatCAMGeoEditor.py +++ b/AppEditors/FlatCAMGeoEditor.py @@ -15,11 +15,11 @@ from PyQt5 import QtGui, QtCore, QtWidgets from PyQt5.QtCore import Qt, QSettings from camlib import distance, arc, three_point_circle, Geometry, FlatCAMRTreeStorage -from FlatCAMTool import FlatCAMTool -from flatcamGUI.ObjectUI import RadioSet -from flatcamGUI.GUIElements import OptionalInputSection, FCCheckBox, FCEntry, FCComboBox, FCTextAreaRich, \ +from AppTool import FlatCAMTool +from AppGUI.ObjectUI import RadioSet +from AppGUI.GUIElements import OptionalInputSection, FCCheckBox, FCEntry, FCComboBox, FCTextAreaRich, \ FCTable, FCDoubleSpinner, FCButton, EvalEntry2, FCInputDialog, FCTree -from flatcamParsers.ParseFont import * +from AppParsers.ParseFont import * from shapely.geometry import LineString, LinearRing, MultiLineString, Polygon, MultiPolygon from shapely.ops import cascaded_union, unary_union, linemerge @@ -34,7 +34,7 @@ from rtree import index as rtindex from copy import deepcopy # from vispy.io import read_png import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') @@ -118,7 +118,7 @@ class BufferSelectionTool(FlatCAMTool): self.buffer_int_button.clicked.connect(self.on_buffer_int) self.buffer_ext_button.clicked.connect(self.on_buffer_ext) - # Init GUI + # Init AppGUI self.buffer_distance_entry.set_value(0.01) def run(self): @@ -547,7 +547,7 @@ class PaintOptionsTool(FlatCAMTool): self.app.ui.notebook.setTabText(2, _("Paint Tool")) def set_tool_ui(self): - # Init GUI + # Init AppGUI if self.app.defaults["tools_painttooldia"]: self.painttooldia_entry.set_value(self.app.defaults["tools_painttooldia"]) else: @@ -3383,7 +3383,7 @@ class FlatCAMGeoEditor(QtCore.QObject): self.shapes = self.app.plotcanvas.new_shape_collection(layers=1) self.tool_shape = self.app.plotcanvas.new_shape_collection(layers=1) else: - from flatcamGUI.PlotCanvasLegacy import ShapeCollectionLegacy + from AppGUI.PlotCanvasLegacy import ShapeCollectionLegacy self.shapes = ShapeCollectionLegacy(obj=self, app=self.app, name='shapes_geo_editor') self.tool_shape = ShapeCollectionLegacy(obj=self, app=self.app, name='tool_shapes_geo_editor') @@ -3463,7 +3463,7 @@ class FlatCAMGeoEditor(QtCore.QObject): """ :param opt: A option from the self.options dictionary - :param entry: A GUI element which text value is used + :param entry: A AppGUI element which text value is used :return: """ try: @@ -3480,7 +3480,7 @@ class FlatCAMGeoEditor(QtCore.QObject): """ :param goption: String. Can be either 'global_gridx' or 'global_gridy' - :param gentry: A GUI element which text value is read and used + :param gentry: A AppGUI element which text value is read and used :return: """ if goption not in ['global_gridx', 'global_gridy']: @@ -3567,16 +3567,16 @@ class FlatCAMGeoEditor(QtCore.QObject): self.units = self.app.defaults['units'].upper() self.decimals = self.app.decimals - # Remove anything else in the GUI Selected Tab + # Remove anything else in the AppGUI Selected Tab self.app.ui.selected_scroll_area.takeWidget() - # Put ourselves in the GUI Selected Tab + # Put ourselves in the AppGUI Selected Tab self.app.ui.selected_scroll_area.setWidget(self.geo_edit_widget) # Switch notebook to Selected page self.app.ui.notebook.setCurrentWidget(self.app.ui.selected_tab) def build_ui(self): """ - Build the GUI in the Selected Tab for this editor + Build the AppGUI in the Selected Tab for this editor :return: """ @@ -3683,7 +3683,7 @@ class FlatCAMGeoEditor(QtCore.QObject): self.item_selected.connect(self.on_geo_elem_selected) - # ## GUI Events + # ## AppGUI Events self.tw.itemSelectionChanged.connect(self.on_tree_selection_change) # self.tw.keyPressed.connect(self.app.ui.keyPressEvent) # self.tw.customContextMenuRequested.connect(self.on_menu_request) @@ -3746,7 +3746,7 @@ class FlatCAMGeoEditor(QtCore.QObject): pass try: - # ## GUI Events + # ## AppGUI Events self.tw.itemSelectionChanged.disconnect(self.on_tree_selection_change) # self.tw.keyPressed.connect(self.app.ui.keyPressEvent) # self.tw.customContextMenuRequested.connect(self.on_menu_request) @@ -4658,7 +4658,7 @@ class FlatCAMGeoEditor(QtCore.QObject): def select_tool(self, toolname): """ - Selects a drawing tool. Impacts the object and GUI. + Selects a drawing tool. Impacts the object and AppGUI. :param toolname: Name of the tool. :return: None diff --git a/flatcamEditors/FlatCAMGrbEditor.py b/AppEditors/FlatCAMGrbEditor.py similarity index 99% rename from flatcamEditors/FlatCAMGrbEditor.py rename to AppEditors/FlatCAMGrbEditor.py index bd330d40..b935d16a 100644 --- a/flatcamEditors/FlatCAMGrbEditor.py +++ b/AppEditors/FlatCAMGrbEditor.py @@ -20,9 +20,9 @@ from copy import copy, deepcopy import logging from camlib import distance, arc, three_point_circle -from flatcamGUI.GUIElements import FCEntry, FCComboBox, FCTable, FCDoubleSpinner, FCSpinner, RadioSet, \ +from AppGUI.GUIElements import FCEntry, FCComboBox, FCTable, FCDoubleSpinner, FCSpinner, RadioSet, \ EvalEntry2, FCInputDialog, FCButton, OptionalInputSection, FCCheckBox -from FlatCAMTool import FlatCAMTool +from AppTool import FlatCAMTool import numpy as np from numpy.linalg import norm as numpy_norm @@ -32,7 +32,7 @@ import math # import pngcanvas import traceback import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') @@ -2955,7 +2955,7 @@ class FlatCAMGrbEditor(QtCore.QObject): # this var will store the state of the toolbar before starting the editor self.toolbar_old_state = False - # Init GUI + # Init AppGUI self.apdim_lbl.hide() self.apdim_entry.hide() self.gerber_obj = None @@ -2967,7 +2967,7 @@ class FlatCAMGrbEditor(QtCore.QObject): self.tool_shape = self.canvas.new_shape_collection(layers=1) self.ma_annotation = self.canvas.new_text_group() else: - from flatcamGUI.PlotCanvasLegacy import ShapeCollectionLegacy + from AppGUI.PlotCanvasLegacy import ShapeCollectionLegacy self.shapes = ShapeCollectionLegacy(obj=self, app=self.app, name='shapes_grb_editor') self.tool_shape = ShapeCollectionLegacy(obj=self, app=self.app, name='tool_shapes_grb_editor') self.ma_annotation = ShapeCollectionLegacy( @@ -3139,7 +3139,7 @@ class FlatCAMGrbEditor(QtCore.QObject): tt_aperture = self.sorted_apcode[i] self.tid2apcode[i + 1] = tt_aperture - # Init GUI + # Init AppGUI self.buffer_distance_entry.set_value(self.app.defaults["gerber_editor_buff_f"]) self.scale_factor_entry.set_value(self.app.defaults["gerber_editor_scale_f"]) @@ -3298,9 +3298,9 @@ class FlatCAMGrbEditor(QtCore.QObject): # make sure no rows are selected so the user have to click the correct row, meaning selecting the correct tool self.apertures_table.clearSelection() - # Remove anything else in the GUI Selected Tab + # Remove anything else in the AppGUI Selected Tab self.app.ui.selected_scroll_area.takeWidget() - # Put ourselves in the GUI Selected Tab + # Put ourselves in the AppGUI Selected Tab self.app.ui.selected_scroll_area.setWidget(self.grb_edit_widget) # Switch notebook to Selected page self.app.ui.notebook.setCurrentWidget(self.app.ui.selected_tab) @@ -4039,7 +4039,7 @@ class FlatCAMGrbEditor(QtCore.QObject): # else: # raise AttributeError # except AttributeError: - # # now that we have data (empty data actually), create the GUI interface and add it to the Tool Tab + # # now that we have data (empty data actually), create the AppGUI interface and add it to the Tool Tab # self.build_ui(first_run=True) # # and add the first aperture to have something to play with # self.on_aperture_add('10') @@ -4186,7 +4186,7 @@ class FlatCAMGrbEditor(QtCore.QObject): def on_multiprocessing_finished(self): self.app.proc_container.update_view_text(' %s' % _("Setting up the UI")) - self.app.inform.emit('[success] %s.' % _("Adding geometry finished. Preparing the GUI")) + self.app.inform.emit('[success] %s.' % _("Adding geometry finished. Preparing the AppGUI")) self.set_ui() self.build_ui(first_run=True) self.plot_all() @@ -4913,7 +4913,7 @@ class FlatCAMGrbEditor(QtCore.QObject): # def setup_ui_after_delayed_plot(self): # self.plot_finished.disconnect() # - # # now that we have data, create the GUI interface and add it to the Tool Tab + # # now that we have data, create the AppGUI interface and add it to the Tool Tab # self.build_ui(first_run=True) # self.plot_all() # @@ -5012,7 +5012,7 @@ class FlatCAMGrbEditor(QtCore.QObject): def select_tool(self, toolname): """ - Selects a drawing tool. Impacts the object and GUI. + Selects a drawing tool. Impacts the object and AppGUI. :param toolname: Name of the tool. :return: None diff --git a/flatcamEditors/FlatCAMTextEditor.py b/AppEditors/FlatCAMTextEditor.py similarity index 98% rename from flatcamEditors/FlatCAMTextEditor.py rename to AppEditors/FlatCAMTextEditor.py index 92641258..ee7eb7f3 100644 --- a/flatcamEditors/FlatCAMTextEditor.py +++ b/AppEditors/FlatCAMTextEditor.py @@ -5,7 +5,7 @@ # MIT Licence # # ########################################################## -from flatcamGUI.GUIElements import FCFileSaveDialog, FCEntry, FCTextAreaExtended, FCTextAreaLineNumber +from AppGUI.GUIElements import FCFileSaveDialog, FCEntry, FCTextAreaExtended, FCTextAreaLineNumber from PyQt5 import QtPrintSupport, QtWidgets, QtCore, QtGui from reportlab.platypus import SimpleDocTemplate, Paragraph @@ -15,7 +15,7 @@ from reportlab.lib.units import inch, mm # from io import StringIO import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamEditors/__init__.py b/AppEditors/__init__.py similarity index 100% rename from flatcamEditors/__init__.py rename to AppEditors/__init__.py diff --git a/flatcamGUI/FlatCAMGUI.py b/AppGUI/FlatCAMGUI.py similarity index 98% rename from flatcamGUI/FlatCAMGUI.py rename to AppGUI/FlatCAMGUI.py index 1007ed92..202d5582 100644 --- a/flatcamGUI/FlatCAMGUI.py +++ b/AppGUI/FlatCAMGUI.py @@ -12,28 +12,28 @@ # ########################################################## import platform -from flatcamGUI.GUIElements import * -from flatcamGUI.preferences import settings -from flatcamGUI.preferences.cncjob.CNCJobPreferencesUI import CNCJobPreferencesUI -from flatcamGUI.preferences.excellon.ExcellonPreferencesUI import ExcellonPreferencesUI -from flatcamGUI.preferences.general.GeneralPreferencesUI import GeneralPreferencesUI -from flatcamGUI.preferences.geometry.GeometryPreferencesUI import GeometryPreferencesUI -from flatcamGUI.preferences.gerber.GerberPreferencesUI import GerberPreferencesUI -from flatcamEditors.FlatCAMGeoEditor import FCShapeTool +from AppGUI.GUIElements import * +from AppGUI.preferences import settings +from AppGUI.preferences.cncjob.CNCJobPreferencesUI import CNCJobPreferencesUI +from AppGUI.preferences.excellon.ExcellonPreferencesUI import ExcellonPreferencesUI +from AppGUI.preferences.general.GeneralPreferencesUI import GeneralPreferencesUI +from AppGUI.preferences.geometry.GeometryPreferencesUI import GeometryPreferencesUI +from AppGUI.preferences.gerber.GerberPreferencesUI import GerberPreferencesUI +from AppEditors.FlatCAMGeoEditor import FCShapeTool from matplotlib.backend_bases import KeyEvent as mpl_key_event import webbrowser -from flatcamGUI.preferences.tools.Tools2PreferencesUI import Tools2PreferencesUI -from flatcamGUI.preferences.tools.ToolsPreferencesUI import ToolsPreferencesUI -from flatcamGUI.preferences.utilities.UtilPreferencesUI import UtilPreferencesUI -from flatcamObjects.ObjectCollection import KeySensitiveListView +from AppGUI.preferences.tools.Tools2PreferencesUI import Tools2PreferencesUI +from AppGUI.preferences.tools.ToolsPreferencesUI import ToolsPreferencesUI +from AppGUI.preferences.utilities.UtilPreferencesUI import UtilPreferencesUI +from AppObjects.ObjectCollection import KeySensitiveListView import subprocess import os import sys import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') @@ -55,7 +55,7 @@ class FlatCAMGUI(QtWidgets.QMainWindow): # Divine icon pack by Ipapun @ finicons.com # ####################################################################### - # ############ BUILDING THE GUI IS EXECUTED HERE ######################## + # ############ BUILDING THE AppGUI IS EXECUTED HERE ######################## # ####################################################################### # ####################################################################### @@ -497,9 +497,9 @@ class FlatCAMGUI(QtWidgets.QMainWindow): QtGui.QIcon(self.app.resource_location + '/hud_32.png'), _("Toggle HUD\tAlt+M")) # ######################################################################## - # ########################## Objects # ################################### + # ########################## AppObjects # ################################### # ######################################################################## - self.menuobjects = self.menu.addMenu(_('Objects')) + self.menuobjects = self.menu.addMenu(_('AppObjects')) self.menuobjects.addSeparator() self.menuobjects_selall = self.menuobjects.addAction( QtGui.QIcon(self.app.resource_location + '/select_all.png'), _('Select All')) @@ -581,7 +581,7 @@ class FlatCAMGUI(QtWidgets.QMainWindow): self.geo_cutpath_menuitem = self.geo_editor_menu.addAction( QtGui.QIcon(self.app.resource_location + '/cutpath16.png'), _('Cut Path\tX')) # self.move_menuitem = self.menu.addAction( - # QtGui.QIcon(self.app.resource_location + '/move16.png'), "Move Objects 'm'") + # QtGui.QIcon(self.app.resource_location + '/move16.png'), "Move AppObjects 'm'") self.geo_copy_menuitem = self.geo_editor_menu.addAction( QtGui.QIcon(self.app.resource_location + '/copy16.png'), _("Copy Geom\tC")) self.geo_delete_menuitem = self.geo_editor_menu.addAction( @@ -763,7 +763,7 @@ class FlatCAMGUI(QtWidgets.QMainWindow): # ######################################################################## # IMPORTANT # - # The order: SPLITTER -> NOTEBOOK -> SNAP TOOLBAR is important and without it the GUI will not be initialized as + # The order: SPLITTER -> NOTEBOOK -> SNAP TOOLBAR is important and without it the AppGUI will not be initialized as # desired. self.splitter = QtWidgets.QSplitter() self.setCentralWidget(self.splitter) @@ -912,7 +912,7 @@ class FlatCAMGUI(QtWidgets.QMainWindow): self.dblsided_btn = self.toolbartools.addAction( QtGui.QIcon(self.app.resource_location + '/doubleside32.png'), _("2Sided Tool")) self.align_btn = self.toolbartools.addAction( - QtGui.QIcon(self.app.resource_location + '/align32.png'), _("Align Objects Tool")) + QtGui.QIcon(self.app.resource_location + '/align32.png'), _("Align AppObjects Tool")) self.extract_btn = self.toolbartools.addAction( QtGui.QIcon(self.app.resource_location + '/extract_drill32.png'), _("Extract Drills Tool")) @@ -1035,7 +1035,7 @@ class FlatCAMGUI(QtWidgets.QMainWindow): QtGui.QIcon(self.app.resource_location + '/transform.png'), _("Transformations")) self.geo_edit_toolbar.addSeparator() self.geo_move_btn = self.geo_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/move32.png'), _("Move Objects ")) + QtGui.QIcon(self.app.resource_location + '/move32.png'), _("Move AppObjects ")) # ######################################################################## # ########################## Gerber Editor Toolbar# ###################### @@ -1319,11 +1319,11 @@ class FlatCAMGUI(QtWidgets.QMainWindow): self.pref_tab_bottom_layout_1.addWidget(self.pref_open_button) # Clear Settings - self.clear_btn = FCButton('%s' % _('Clear GUI Settings')) + self.clear_btn = FCButton('%s' % _('Clear AppGUI Settings')) self.clear_btn.setMinimumWidth(130) self.clear_btn.setToolTip( - _("Clear the GUI settings for FlatCAM,\n" + _("Clear the AppGUI settings for FlatCAM,\n" "such as: layout, gui state, style, hdpi support etc.") ) @@ -1539,7 +1539,7 @@ class FlatCAMGUI(QtWidgets.QMainWindow): # infobar.addWidget(self.progress_bar) # ######################################################################## - # ########################## SET GUI Elements # ########################## + # ########################## SET AppGUI Elements # ########################## # ######################################################################## self.app_icon = QtGui.QIcon() self.app_icon.addFile(self.app.resource_location + '/flatcam_icon16.png', QtCore.QSize(16, 16)) @@ -1562,7 +1562,7 @@ class FlatCAMGUI(QtWidgets.QMainWindow): self.setAcceptDrops(True) # ######################################################################## - # ########################## Build GUI # ################################# + # ########################## Build AppGUI # ################################# # ######################################################################## self.grid_snap_btn.setCheckable(True) self.corner_snap_btn.setCheckable(True) @@ -1655,11 +1655,11 @@ class FlatCAMGUI(QtWidgets.QMainWindow): # restore the toolbar view self.restore_toolbar_view() - # restore the GUI geometry + # restore the AppGUI geometry self.restore_main_win_geom() # %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - # %%%%%%%%%%%%%%%%% GUI Building FINISHED %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + # %%%%%%%%%%%%%%%%% AppGUI Building FINISHED %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% # %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% # Variable to store the status of the fullscreen event @@ -1677,7 +1677,7 @@ class FlatCAMGUI(QtWidgets.QMainWindow): self.app.defaults["global_def_win_h"]) self.splitter.setSizes([self.app.defaults["global_def_notebook_width"], 0]) except KeyError as e: - log.debug("flatcamGUI.FlatCAMGUI.restore_main_win_geom() --> %s" % str(e)) + log.debug("AppGUI.FlatCAMGUI.restore_main_win_geom() --> %s" % str(e)) def restore_toolbar_view(self): """ @@ -1776,8 +1776,8 @@ class FlatCAMGUI(QtWidgets.QMainWindow): resource_loc = self.app.resource_location msgbox = QtWidgets.QMessageBox() - msgbox.setText(_("Are you sure you want to delete the GUI Settings? \n")) - msgbox.setWindowTitle(_("Clear GUI Settings")) + msgbox.setText(_("Are you sure you want to delete the AppGUI Settings? \n")) + msgbox.setWindowTitle(_("Clear AppGUI Settings")) msgbox.setWindowIcon(QtGui.QIcon(resource_loc + '/trash32.png')) bt_yes = msgbox.addButton(_('Yes'), QtWidgets.QMessageBox.YesRole) bt_no = msgbox.addButton(_('No'), QtWidgets.QMessageBox.NoRole) @@ -1881,7 +1881,7 @@ class FlatCAMGUI(QtWidgets.QMainWindow): self.dblsided_btn = self.toolbartools.addAction( QtGui.QIcon(self.app.resource_location + '/doubleside32.png'), _("2Sided Tool")) self.align_btn = self.toolbartools.addAction( - QtGui.QIcon(self.app.resource_location + '/align32.png'), _("Align Objects Tool")) + QtGui.QIcon(self.app.resource_location + '/align32.png'), _("Align AppObjects Tool")) self.extract_btn = self.toolbartools.addAction( QtGui.QIcon(self.app.resource_location + '/extract_drill32.png'), _("Extract Drills Tool")) @@ -1996,7 +1996,7 @@ class FlatCAMGUI(QtWidgets.QMainWindow): self.geo_cutpath_btn = self.geo_edit_toolbar.addAction( QtGui.QIcon(self.app.resource_location + '/cutpath32.png'), _('Cut Path')) self.geo_copy_btn = self.geo_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/copy32.png'), _("Copy Objects")) + QtGui.QIcon(self.app.resource_location + '/copy32.png'), _("Copy AppObjects")) self.geo_delete_btn = self.geo_edit_toolbar.addAction( QtGui.QIcon(self.app.resource_location + '/trash32.png'), _("Delete Shape")) self.geo_transform_btn = self.geo_edit_toolbar.addAction( @@ -2004,7 +2004,7 @@ class FlatCAMGUI(QtWidgets.QMainWindow): self.geo_edit_toolbar.addSeparator() self.geo_move_btn = self.geo_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/move32.png'), _("Move Objects")) + QtGui.QIcon(self.app.resource_location + '/move32.png'), _("Move AppObjects")) # ######################################################################## # ## Gerber Editor Toolbar # ## @@ -2082,7 +2082,7 @@ class FlatCAMGUI(QtWidgets.QMainWindow): # events out of the self.app.collection view (it's about Project Tab) are of type int if type(event) is int: key = event - # events from the GUI are of type QKeyEvent + # events from the AppGUI are of type QKeyEvent elif type(event) == QtGui.QKeyEvent: key = event.key() elif isinstance(event, mpl_key_event): # MatPlotLib key events are trickier to interpret than the rest @@ -2419,7 +2419,7 @@ class FlatCAMGUI(QtWidgets.QMainWindow): # Delete from canvas if key == 'Delete': # Delete via the application to - # ensure cleanup of the GUI + # ensure cleanup of the AppGUI if active: active.app.on_delete() @@ -4010,7 +4010,7 @@ class ShortcutsTab(QtWidgets.QWidget): _("Skew on Y axis"), # ALT section - _("Align Objects Tool"), _("Calculators Tool"), _("2-Sided PCB Tool"), _("Transformations Tool"), + _("Align AppObjects Tool"), _("Calculators Tool"), _("2-Sided PCB Tool"), _("Transformations Tool"), _("Punch Gerber Tool"), _("Extract Drills Tool"), _("Fiducials Tool"), _("Solder Paste Dispensing Tool"), _("Film PCB Tool"), _("Corner Markers Tool"), _("Non-Copper Clearing Tool"), _("Optimal Tool"), diff --git a/flatcamGUI/GUIElements.py b/AppGUI/GUIElements.py similarity index 99% rename from flatcamGUI/GUIElements.py rename to AppGUI/GUIElements.py index 660cc2f1..97fe2b6a 100644 --- a/flatcamGUI/GUIElements.py +++ b/AppGUI/GUIElements.py @@ -23,7 +23,7 @@ import html import sys import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins log = logging.getLogger('base') diff --git a/flatcamGUI/ObjectUI.py b/AppGUI/ObjectUI.py similarity index 99% rename from flatcamGUI/ObjectUI.py rename to AppGUI/ObjectUI.py index 6cdb71a7..59b5f139 100644 --- a/flatcamGUI/ObjectUI.py +++ b/AppGUI/ObjectUI.py @@ -11,11 +11,11 @@ # Date: 3/10/2019 # # ########################################################## -from flatcamGUI.GUIElements import * +from AppGUI.GUIElements import * import sys import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') @@ -1272,7 +1272,7 @@ class ExcellonObjectUI(ObjectUI): pp_excellon_label = QtWidgets.QLabel('%s:' % _("Preprocessor E")) pp_excellon_label.setToolTip( _("The preprocessor JSON file that dictates\n" - "Gcode output for Excellon Objects.") + "Gcode output for Excellon AppObjects.") ) self.pp_excellon_name_cb = FCComboBox() self.pp_excellon_name_cb.setFocusPolicy(QtCore.Qt.StrongFocus) @@ -1284,7 +1284,7 @@ class ExcellonObjectUI(ObjectUI): pp_geo_label = QtWidgets.QLabel('%s:' % _("Preprocessor G")) pp_geo_label.setToolTip( _("The preprocessor JSON file that dictates\n" - "Gcode output for Geometry (Milling) Objects.") + "Gcode output for Geometry (Milling) AppObjects.") ) self.pp_geo_name_cb = FCComboBox() self.pp_geo_name_cb.setFocusPolicy(QtCore.Qt.StrongFocus) @@ -2305,7 +2305,7 @@ class CNCObjectUI(ObjectUI): def __init__(self, app, parent=None): """ - Creates the user interface for CNCJob objects. GUI elements should + Creates the user interface for CNCJob objects. AppGUI elements should be placed in ``self.custom_box`` to preserve the layout. """ @@ -2638,7 +2638,7 @@ class ScriptObjectUI(ObjectUI): def __init__(self, app, parent=None): """ - Creates the user interface for Script objects. GUI elements should + Creates the user interface for Script objects. AppGUI elements should be placed in ``self.custom_box`` to preserve the layout. """ @@ -2705,7 +2705,7 @@ class DocumentObjectUI(ObjectUI): def __init__(self, app, parent=None): """ - Creates the user interface for Notes objects. GUI elements should + Creates the user interface for Notes objects. AppGUI elements should be placed in ``self.custom_box`` to preserve the layout. """ diff --git a/flatcamGUI/PlotCanvas.py b/AppGUI/PlotCanvas.py similarity index 99% rename from flatcamGUI/PlotCanvas.py rename to AppGUI/PlotCanvas.py index 17916470..572ef50b 100644 --- a/flatcamGUI/PlotCanvas.py +++ b/AppGUI/PlotCanvas.py @@ -8,8 +8,8 @@ from PyQt5 import QtCore import logging -from flatcamGUI.VisPyCanvas import VisPyCanvas, Color -from flatcamGUI.VisPyVisuals import ShapeGroup, ShapeCollection, TextCollection, TextGroup, Cursor +from AppGUI.VisPyCanvas import VisPyCanvas, Color +from AppGUI.VisPyVisuals import ShapeGroup, ShapeCollection, TextCollection, TextGroup, Cursor from vispy.scene.visuals import InfiniteLine, Line, Rectangle, Text import numpy as np diff --git a/flatcamGUI/PlotCanvasLegacy.py b/AppGUI/PlotCanvasLegacy.py similarity index 99% rename from flatcamGUI/PlotCanvasLegacy.py rename to AppGUI/PlotCanvasLegacy.py index e8e287ce..429c5d2b 100644 --- a/flatcamGUI/PlotCanvasLegacy.py +++ b/AppGUI/PlotCanvasLegacy.py @@ -22,7 +22,7 @@ import logging import numpy as np import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins # Prevent conflict with Qt5 and above. diff --git a/flatcamGUI/VisPyCanvas.py b/AppGUI/VisPyCanvas.py similarity index 100% rename from flatcamGUI/VisPyCanvas.py rename to AppGUI/VisPyCanvas.py diff --git a/flatcamGUI/VisPyData/data/fonts/opensans-regular.ttf b/AppGUI/VisPyData/data/fonts/opensans-regular.ttf similarity index 100% rename from flatcamGUI/VisPyData/data/fonts/opensans-regular.ttf rename to AppGUI/VisPyData/data/fonts/opensans-regular.ttf diff --git a/flatcamGUI/VisPyData/data/freetype/freetype253.dll b/AppGUI/VisPyData/data/freetype/freetype253.dll similarity index 100% rename from flatcamGUI/VisPyData/data/freetype/freetype253.dll rename to AppGUI/VisPyData/data/freetype/freetype253.dll diff --git a/flatcamGUI/VisPyData/data/freetype/freetype253_x64.dll b/AppGUI/VisPyData/data/freetype/freetype253_x64.dll similarity index 100% rename from flatcamGUI/VisPyData/data/freetype/freetype253_x64.dll rename to AppGUI/VisPyData/data/freetype/freetype253_x64.dll diff --git a/flatcamGUI/VisPyPatches.py b/AppGUI/VisPyPatches.py similarity index 100% rename from flatcamGUI/VisPyPatches.py rename to AppGUI/VisPyPatches.py diff --git a/flatcamGUI/VisPyTesselators.py b/AppGUI/VisPyTesselators.py similarity index 100% rename from flatcamGUI/VisPyTesselators.py rename to AppGUI/VisPyTesselators.py diff --git a/flatcamGUI/VisPyVisuals.py b/AppGUI/VisPyVisuals.py similarity index 99% rename from flatcamGUI/VisPyVisuals.py rename to AppGUI/VisPyVisuals.py index 9cf81e54..3796f759 100644 --- a/flatcamGUI/VisPyVisuals.py +++ b/AppGUI/VisPyVisuals.py @@ -13,7 +13,7 @@ from vispy.color import Color from shapely.geometry import Polygon, LineString, LinearRing import threading import numpy as np -from flatcamGUI.VisPyTesselators import GLUTess +from AppGUI.VisPyTesselators import GLUTess class FlatCAMLineVisual(LineVisual): diff --git a/flatcamGUI/__init__.py b/AppGUI/__init__.py similarity index 100% rename from flatcamGUI/__init__.py rename to AppGUI/__init__.py diff --git a/flatcamGUI/preferences/OptionsGroupUI.py b/AppGUI/preferences/OptionsGroupUI.py similarity index 100% rename from flatcamGUI/preferences/OptionsGroupUI.py rename to AppGUI/preferences/OptionsGroupUI.py diff --git a/flatcamGUI/preferences/PreferencesUIManager.py b/AppGUI/preferences/PreferencesUIManager.py similarity index 99% rename from flatcamGUI/preferences/PreferencesUIManager.py rename to AppGUI/preferences/PreferencesUIManager.py index a9380243..99eda5d9 100644 --- a/flatcamGUI/preferences/PreferencesUIManager.py +++ b/AppGUI/preferences/PreferencesUIManager.py @@ -5,7 +5,7 @@ from defaults import FlatCAMDefaults import logging import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') @@ -30,7 +30,7 @@ class PreferencesUIManager: :param defaults: a dictionary storage where all the application settings are stored :param data_path: a path to the file where all the preferences are stored for persistence :param ui: reference to the FlatCAMGUI class which constructs the UI - :param inform: a pyqtSignal used to display information's in the StatusBar of the GUI + :param inform: a pyqtSignal used to display information's in the StatusBar of the AppGUI """ self.defaults = defaults @@ -73,7 +73,7 @@ class PreferencesUIManager: "global_tpdf_lmargin": self.ui.general_defaults_form.general_app_group.lmargin_entry, "global_tpdf_rmargin": self.ui.general_defaults_form.general_app_group.rmargin_entry, - # General GUI Preferences + # General AppGUI Preferences "global_theme": self.ui.general_defaults_form.general_gui_group.theme_radio, "global_gray_icons": self.ui.general_defaults_form.general_gui_group.gray_icons_cb, "global_layout": self.ui.general_defaults_form.general_gui_group.layout_combo, @@ -91,7 +91,7 @@ class PreferencesUIManager: "global_proj_item_dis_color": self.ui.general_defaults_form.general_gui_group.proj_color_dis_entry, "global_project_autohide": self.ui.general_defaults_form.general_gui_group.project_autohide_cb, - # General GUI Settings + # General AppGUI Settings "global_gridx": self.ui.general_defaults_form.general_app_set_group.gridx_entry, "global_gridy": self.ui.general_defaults_form.general_app_set_group.gridy_entry, "global_snap_max": self.ui.general_defaults_form.general_app_set_group.snap_max_dist_entry, @@ -595,7 +595,7 @@ class PreferencesUIManager: def defaults_read_form(self): """ - Will read all the values in the Preferences GUI and update the defaults dictionary. + Will read all the values in the Preferences AppGUI and update the defaults dictionary. :return: None """ @@ -607,10 +607,10 @@ class PreferencesUIManager: def defaults_write_form(self, factor=None, fl_units=None, source_dict=None): """ - Will set the values for all the GUI elements in Preferences GUI based on the values found in the + Will set the values for all the AppGUI elements in Preferences AppGUI based on the values found in the self.defaults dictionary. - :param factor: will apply a factor to the values that written in the GUI elements + :param factor: will apply a factor to the values that written in the AppGUI elements :param fl_units: current measuring units in FlatCAM: Metric or Inch :param source_dict: the repository of options, usually is the self.defaults :return: None @@ -628,11 +628,11 @@ class PreferencesUIManager: """ Basically it is the worker in the self.defaults_write_form() - :param field: the GUI element in Preferences GUI to be updated + :param field: the AppGUI element in Preferences AppGUI to be updated :param factor: factor to be applied to the field parameter :param units: current FlatCAM measuring units :param defaults_dict: the defaults storage - :return: None, it updates GUI elements + :return: None, it updates AppGUI elements """ def_dict = self.defaults if defaults_dict is None else defaults_dict @@ -656,7 +656,7 @@ class PreferencesUIManager: def show_preferences_gui(self): """ - Called to initialize and show the Preferences GUI + Called to initialize and show the Preferences AppGUI :return: None """ @@ -734,7 +734,7 @@ class PreferencesUIManager: self.ui.pref_close_button.clicked.connect(self.on_pref_close_button) self.ui.pref_defaults_button.clicked.connect(self.on_restore_defaults_preferences) - log.debug("Finished Preferences GUI form initialization.") + log.debug("Finished Preferences AppGUI form initialization.") def __init_color_pickers(self): # Init Gerber Plot Colors diff --git a/flatcamGUI/preferences/__init__.py b/AppGUI/preferences/__init__.py similarity index 79% rename from flatcamGUI/preferences/__init__.py rename to AppGUI/preferences/__init__.py index 620fbb59..193fef34 100644 --- a/flatcamGUI/preferences/__init__.py +++ b/AppGUI/preferences/__init__.py @@ -1,6 +1,6 @@ -from flatcamGUI.GUIElements import * +from AppGUI.GUIElements import * import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins diff --git a/flatcamGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py b/AppGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py similarity index 97% rename from flatcamGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py rename to AppGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py index 8d7a1cf0..f4809915 100644 --- a/flatcamGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py +++ b/AppGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py @@ -1,10 +1,10 @@ from PyQt5 import QtWidgets, QtGui, QtCore from PyQt5.QtCore import QSettings, Qt -from flatcamGUI.GUIElements import FCTextArea, FCCheckBox, FCComboBox, FCSpinner, FCEntry -from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI +from AppGUI.GUIElements import FCTextArea, FCCheckBox, FCComboBox, FCSpinner, FCEntry +from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py b/AppGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py similarity index 98% rename from flatcamGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py rename to AppGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py index 66276e23..467b6330 100644 --- a/flatcamGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py +++ b/AppGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py @@ -1,10 +1,10 @@ from PyQt5 import QtWidgets, QtCore, QtGui from PyQt5.QtCore import QSettings -from flatcamGUI.GUIElements import FCCheckBox, RadioSet, FCSpinner, FCDoubleSpinner, FCEntry -from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI +from AppGUI.GUIElements import FCCheckBox, RadioSet, FCSpinner, FCDoubleSpinner, FCEntry +from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamGUI/preferences/cncjob/CNCJobOptPrefGroupUI.py b/AppGUI/preferences/cncjob/CNCJobOptPrefGroupUI.py similarity index 94% rename from flatcamGUI/preferences/cncjob/CNCJobOptPrefGroupUI.py rename to AppGUI/preferences/cncjob/CNCJobOptPrefGroupUI.py index c8eb7e66..5dab3cff 100644 --- a/flatcamGUI/preferences/cncjob/CNCJobOptPrefGroupUI.py +++ b/AppGUI/preferences/cncjob/CNCJobOptPrefGroupUI.py @@ -1,11 +1,11 @@ from PyQt5 import QtWidgets, QtGui from PyQt5.QtCore import QSettings -from flatcamGUI.GUIElements import FCTextArea -from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI +from AppGUI.GUIElements import FCTextArea +from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamGUI/preferences/cncjob/CNCJobPreferencesUI.py b/AppGUI/preferences/cncjob/CNCJobPreferencesUI.py similarity index 77% rename from flatcamGUI/preferences/cncjob/CNCJobPreferencesUI.py rename to AppGUI/preferences/cncjob/CNCJobPreferencesUI.py index cc9a7e32..79760423 100644 --- a/flatcamGUI/preferences/cncjob/CNCJobPreferencesUI.py +++ b/AppGUI/preferences/cncjob/CNCJobPreferencesUI.py @@ -1,8 +1,8 @@ from PyQt5 import QtWidgets -from flatcamGUI.preferences.cncjob.CNCJobAdvOptPrefGroupUI import CNCJobAdvOptPrefGroupUI -from flatcamGUI.preferences.cncjob.CNCJobOptPrefGroupUI import CNCJobOptPrefGroupUI -from flatcamGUI.preferences.cncjob.CNCJobGenPrefGroupUI import CNCJobGenPrefGroupUI +from AppGUI.preferences.cncjob.CNCJobAdvOptPrefGroupUI import CNCJobAdvOptPrefGroupUI +from AppGUI.preferences.cncjob.CNCJobOptPrefGroupUI import CNCJobOptPrefGroupUI +from AppGUI.preferences.cncjob.CNCJobGenPrefGroupUI import CNCJobGenPrefGroupUI class CNCJobPreferencesUI(QtWidgets.QWidget): diff --git a/flatcamGUI/preferences/cncjob/__init__.py b/AppGUI/preferences/cncjob/__init__.py similarity index 100% rename from flatcamGUI/preferences/cncjob/__init__.py rename to AppGUI/preferences/cncjob/__init__.py diff --git a/flatcamGUI/preferences/excellon/ExcellonAdvOptPrefGroupUI.py b/AppGUI/preferences/excellon/ExcellonAdvOptPrefGroupUI.py similarity index 96% rename from flatcamGUI/preferences/excellon/ExcellonAdvOptPrefGroupUI.py rename to AppGUI/preferences/excellon/ExcellonAdvOptPrefGroupUI.py index a63998f9..085ccbf1 100644 --- a/flatcamGUI/preferences/excellon/ExcellonAdvOptPrefGroupUI.py +++ b/AppGUI/preferences/excellon/ExcellonAdvOptPrefGroupUI.py @@ -1,10 +1,10 @@ from PyQt5 import QtWidgets from PyQt5.QtCore import QSettings -from flatcamGUI.GUIElements import FCDoubleSpinner, FCEntry, FloatEntry, RadioSet, FCCheckBox -from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI +from AppGUI.GUIElements import FCDoubleSpinner, FCEntry, FloatEntry, RadioSet, FCCheckBox +from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py b/AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py similarity index 98% rename from flatcamGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py rename to AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py index 5b04cf2f..25f38aea 100644 --- a/flatcamGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py +++ b/AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py @@ -1,11 +1,11 @@ from PyQt5 import QtWidgets from PyQt5.QtCore import QSettings -from flatcamGUI.GUIElements import FCSpinner, FCDoubleSpinner, RadioSet -from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI +from AppGUI.GUIElements import FCSpinner, FCDoubleSpinner, RadioSet +from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamGUI/preferences/excellon/ExcellonExpPrefGroupUI.py b/AppGUI/preferences/excellon/ExcellonExpPrefGroupUI.py similarity index 97% rename from flatcamGUI/preferences/excellon/ExcellonExpPrefGroupUI.py rename to AppGUI/preferences/excellon/ExcellonExpPrefGroupUI.py index db2e922a..4cab1c6e 100644 --- a/flatcamGUI/preferences/excellon/ExcellonExpPrefGroupUI.py +++ b/AppGUI/preferences/excellon/ExcellonExpPrefGroupUI.py @@ -1,10 +1,10 @@ from PyQt5 import QtWidgets, QtCore from PyQt5.QtCore import QSettings -from flatcamGUI.GUIElements import RadioSet, FCSpinner -from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI +from AppGUI.GUIElements import RadioSet, FCSpinner +from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamGUI/preferences/excellon/ExcellonGenPrefGroupUI.py b/AppGUI/preferences/excellon/ExcellonGenPrefGroupUI.py similarity index 99% rename from flatcamGUI/preferences/excellon/ExcellonGenPrefGroupUI.py rename to AppGUI/preferences/excellon/ExcellonGenPrefGroupUI.py index 06d4dfc7..3471d7d5 100644 --- a/flatcamGUI/preferences/excellon/ExcellonGenPrefGroupUI.py +++ b/AppGUI/preferences/excellon/ExcellonGenPrefGroupUI.py @@ -3,10 +3,10 @@ import platform from PyQt5 import QtWidgets, QtCore, QtGui from PyQt5.QtCore import QSettings -from flatcamGUI.GUIElements import FCCheckBox, FCSpinner, RadioSet, FCEntry -from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI +from AppGUI.GUIElements import FCCheckBox, FCSpinner, RadioSet, FCEntry +from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamGUI/preferences/excellon/ExcellonOptPrefGroupUI.py b/AppGUI/preferences/excellon/ExcellonOptPrefGroupUI.py similarity index 97% rename from flatcamGUI/preferences/excellon/ExcellonOptPrefGroupUI.py rename to AppGUI/preferences/excellon/ExcellonOptPrefGroupUI.py index cdc6ce5e..757c9195 100644 --- a/flatcamGUI/preferences/excellon/ExcellonOptPrefGroupUI.py +++ b/AppGUI/preferences/excellon/ExcellonOptPrefGroupUI.py @@ -1,12 +1,12 @@ from PyQt5 import QtWidgets from PyQt5.QtCore import Qt, QSettings -from flatcamGUI.GUIElements import RadioSet, FCDoubleSpinner, FCCheckBox, FCEntry, FCSpinner, OptionalInputSection, \ +from AppGUI.GUIElements import RadioSet, FCDoubleSpinner, FCCheckBox, FCEntry, FCSpinner, OptionalInputSection, \ FCComboBox -from flatcamGUI.preferences import machinist_setting -from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI +from AppGUI.preferences import machinist_setting +from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamGUI/preferences/excellon/ExcellonPreferencesUI.py b/AppGUI/preferences/excellon/ExcellonPreferencesUI.py similarity index 77% rename from flatcamGUI/preferences/excellon/ExcellonPreferencesUI.py rename to AppGUI/preferences/excellon/ExcellonPreferencesUI.py index b3d6d165..b62fb197 100644 --- a/flatcamGUI/preferences/excellon/ExcellonPreferencesUI.py +++ b/AppGUI/preferences/excellon/ExcellonPreferencesUI.py @@ -1,14 +1,14 @@ from PyQt5 import QtWidgets from PyQt5.QtCore import QSettings -from flatcamGUI.preferences.excellon.ExcellonEditorPrefGroupUI import ExcellonEditorPrefGroupUI -from flatcamGUI.preferences.excellon.ExcellonExpPrefGroupUI import ExcellonExpPrefGroupUI -from flatcamGUI.preferences.excellon.ExcellonAdvOptPrefGroupUI import ExcellonAdvOptPrefGroupUI -from flatcamGUI.preferences.excellon.ExcellonOptPrefGroupUI import ExcellonOptPrefGroupUI -from flatcamGUI.preferences.excellon.ExcellonGenPrefGroupUI import ExcellonGenPrefGroupUI +from AppGUI.preferences.excellon.ExcellonEditorPrefGroupUI import ExcellonEditorPrefGroupUI +from AppGUI.preferences.excellon.ExcellonExpPrefGroupUI import ExcellonExpPrefGroupUI +from AppGUI.preferences.excellon.ExcellonAdvOptPrefGroupUI import ExcellonAdvOptPrefGroupUI +from AppGUI.preferences.excellon.ExcellonOptPrefGroupUI import ExcellonOptPrefGroupUI +from AppGUI.preferences.excellon.ExcellonGenPrefGroupUI import ExcellonGenPrefGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamGUI/preferences/excellon/__init__.py b/AppGUI/preferences/excellon/__init__.py similarity index 100% rename from flatcamGUI/preferences/excellon/__init__.py rename to AppGUI/preferences/excellon/__init__.py diff --git a/flatcamGUI/preferences/general/GeneralAPPSetGroupUI.py b/AppGUI/preferences/general/GeneralAPPSetGroupUI.py similarity index 98% rename from flatcamGUI/preferences/general/GeneralAPPSetGroupUI.py rename to AppGUI/preferences/general/GeneralAPPSetGroupUI.py index 3b2964e6..a09820b9 100644 --- a/flatcamGUI/preferences/general/GeneralAPPSetGroupUI.py +++ b/AppGUI/preferences/general/GeneralAPPSetGroupUI.py @@ -1,13 +1,13 @@ from PyQt5 import QtCore, QtWidgets, QtGui from PyQt5.QtCore import QSettings -from flatcamGUI.GUIElements import FCDoubleSpinner, FCCheckBox, FCComboBox, RadioSet, OptionalInputSection, FCSpinner, \ +from AppGUI.GUIElements import FCDoubleSpinner, FCCheckBox, FCComboBox, RadioSet, OptionalInputSection, FCSpinner, \ FCEntry -from flatcamGUI.preferences import settings -from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI +from AppGUI.preferences import settings +from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') @@ -201,7 +201,7 @@ class GeneralAPPSetGroupUI(OptionsGroupUI): self.notebook_font_size_label = QtWidgets.QLabel('%s:' % _('Notebook')) self.notebook_font_size_label.setToolTip( _("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" + "The notebook is the collapsible area in the left side of the AppGUI,\n" "and include the Project, Selected and Tool tabs.") ) @@ -240,7 +240,7 @@ class GeneralAPPSetGroupUI(OptionsGroupUI): # TextBox Font Size self.textbox_font_size_label = QtWidgets.QLabel('%s:' % _('Textbox')) self.textbox_font_size_label.setToolTip( - _("This sets the font size for the Textbox GUI\n" + _("This sets the font size for the Textbox AppGUI\n" "elements that are used in FlatCAM.") ) diff --git a/flatcamGUI/preferences/general/GeneralAppPrefGroupUI.py b/AppGUI/preferences/general/GeneralAppPrefGroupUI.py similarity index 98% rename from flatcamGUI/preferences/general/GeneralAppPrefGroupUI.py rename to AppGUI/preferences/general/GeneralAppPrefGroupUI.py index 2f7cb255..81d99b7d 100644 --- a/flatcamGUI/preferences/general/GeneralAppPrefGroupUI.py +++ b/AppGUI/preferences/general/GeneralAppPrefGroupUI.py @@ -3,12 +3,12 @@ import sys from PyQt5 import QtWidgets from PyQt5.QtCore import QSettings -from flatcamGUI.GUIElements import RadioSet, FCSpinner, FCCheckBox, FCComboBox, FCButton, OptionalInputSection, \ +from AppGUI.GUIElements import RadioSet, FCSpinner, FCCheckBox, FCComboBox, FCButton, OptionalInputSection, \ FCDoubleSpinner -from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI +from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamGUI/preferences/general/GeneralGUIPrefGroupUI.py b/AppGUI/preferences/general/GeneralGUIPrefGroupUI.py similarity index 98% rename from flatcamGUI/preferences/general/GeneralGUIPrefGroupUI.py rename to AppGUI/preferences/general/GeneralGUIPrefGroupUI.py index f9e86bf3..5d3a1eb6 100644 --- a/flatcamGUI/preferences/general/GeneralGUIPrefGroupUI.py +++ b/AppGUI/preferences/general/GeneralGUIPrefGroupUI.py @@ -1,11 +1,11 @@ from PyQt5 import QtWidgets, QtCore, QtGui from PyQt5.QtCore import QSettings, Qt -from flatcamGUI.GUIElements import RadioSet, FCCheckBox, FCButton, FCComboBox, FCEntry, FCSpinner -from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI +from AppGUI.GUIElements import RadioSet, FCCheckBox, FCButton, FCComboBox, FCEntry, FCSpinner +from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') @@ -23,7 +23,7 @@ class GeneralGUIPrefGroupUI(OptionsGroupUI): def __init__(self, decimals=4, parent=None): super(GeneralGUIPrefGroupUI, self).__init__(self, parent=parent) - self.setTitle(str(_("GUI Preferences"))) + self.setTitle(str(_("AppGUI Preferences"))) self.decimals = decimals # Create a grid layout for the Application general settings @@ -382,7 +382,7 @@ class GeneralGUIPrefGroupUI(OptionsGroupUI): self.layout.addStretch() # ############################################################################# - # ############################# GUI COLORS SIGNALS ############################ + # ############################# AppGUI COLORS SIGNALS ############################ # ############################################################################# # Setting selection (left - right) colors signals diff --git a/flatcamGUI/preferences/general/GeneralPreferencesUI.py b/AppGUI/preferences/general/GeneralPreferencesUI.py similarity index 80% rename from flatcamGUI/preferences/general/GeneralPreferencesUI.py rename to AppGUI/preferences/general/GeneralPreferencesUI.py index 46636438..45ccf191 100644 --- a/flatcamGUI/preferences/general/GeneralPreferencesUI.py +++ b/AppGUI/preferences/general/GeneralPreferencesUI.py @@ -1,12 +1,12 @@ from PyQt5 import QtWidgets from PyQt5.QtCore import QSettings -from flatcamGUI.preferences.general.GeneralAppPrefGroupUI import GeneralAppPrefGroupUI -from flatcamGUI.preferences.general.GeneralAPPSetGroupUI import GeneralAPPSetGroupUI -from flatcamGUI.preferences.general.GeneralGUIPrefGroupUI import GeneralGUIPrefGroupUI +from AppGUI.preferences.general.GeneralAppPrefGroupUI import GeneralAppPrefGroupUI +from AppGUI.preferences.general.GeneralAPPSetGroupUI import GeneralAPPSetGroupUI +from AppGUI.preferences.general.GeneralGUIPrefGroupUI import GeneralGUIPrefGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamGUI/preferences/general/__init__.py b/AppGUI/preferences/general/__init__.py similarity index 100% rename from flatcamGUI/preferences/general/__init__.py rename to AppGUI/preferences/general/__init__.py diff --git a/flatcamGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py b/AppGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py similarity index 97% rename from flatcamGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py rename to AppGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py index 7ade9b90..08326ee1 100644 --- a/flatcamGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py +++ b/AppGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py @@ -1,11 +1,11 @@ from PyQt5 import QtWidgets from PyQt5.QtCore import QSettings -from flatcamGUI.GUIElements import FCEntry, FloatEntry, FCDoubleSpinner, FCCheckBox, RadioSet, FCLabel -from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI +from AppGUI.GUIElements import FCEntry, FloatEntry, FCDoubleSpinner, FCCheckBox, RadioSet, FCLabel +from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamGUI/preferences/geometry/GeometryEditorPrefGroupUI.py b/AppGUI/preferences/geometry/GeometryEditorPrefGroupUI.py similarity index 93% rename from flatcamGUI/preferences/geometry/GeometryEditorPrefGroupUI.py rename to AppGUI/preferences/geometry/GeometryEditorPrefGroupUI.py index 9c5204ab..1ac42f42 100644 --- a/flatcamGUI/preferences/geometry/GeometryEditorPrefGroupUI.py +++ b/AppGUI/preferences/geometry/GeometryEditorPrefGroupUI.py @@ -1,11 +1,11 @@ from PyQt5 import QtWidgets from PyQt5.QtCore import QSettings -from flatcamGUI.GUIElements import FCSpinner, RadioSet -from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI +from AppGUI.GUIElements import FCSpinner, RadioSet +from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamGUI/preferences/geometry/GeometryGenPrefGroupUI.py b/AppGUI/preferences/geometry/GeometryGenPrefGroupUI.py similarity index 96% rename from flatcamGUI/preferences/geometry/GeometryGenPrefGroupUI.py rename to AppGUI/preferences/geometry/GeometryGenPrefGroupUI.py index 60479236..cf14c7ce 100644 --- a/flatcamGUI/preferences/geometry/GeometryGenPrefGroupUI.py +++ b/AppGUI/preferences/geometry/GeometryGenPrefGroupUI.py @@ -1,11 +1,11 @@ from PyQt5 import QtWidgets, QtCore, QtGui from PyQt5.QtCore import QSettings -from flatcamGUI.GUIElements import FCCheckBox, FCSpinner, FCEntry -from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI +from AppGUI.GUIElements import FCCheckBox, FCSpinner, FCEntry +from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamGUI/preferences/geometry/GeometryOptPrefGroupUI.py b/AppGUI/preferences/geometry/GeometryOptPrefGroupUI.py similarity index 97% rename from flatcamGUI/preferences/geometry/GeometryOptPrefGroupUI.py rename to AppGUI/preferences/geometry/GeometryOptPrefGroupUI.py index c2e0f6e2..f1e02bda 100644 --- a/flatcamGUI/preferences/geometry/GeometryOptPrefGroupUI.py +++ b/AppGUI/preferences/geometry/GeometryOptPrefGroupUI.py @@ -1,12 +1,12 @@ from PyQt5 import QtWidgets from PyQt5.QtCore import Qt, QSettings -from flatcamGUI.GUIElements import FCDoubleSpinner, FCCheckBox, OptionalInputSection, FCEntry, FCSpinner, FCComboBox -from flatcamGUI.preferences import machinist_setting -from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI +from AppGUI.GUIElements import FCDoubleSpinner, FCCheckBox, OptionalInputSection, FCEntry, FCSpinner, FCComboBox +from AppGUI.preferences import machinist_setting +from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamGUI/preferences/geometry/GeometryPreferencesUI.py b/AppGUI/preferences/geometry/GeometryPreferencesUI.py similarity index 77% rename from flatcamGUI/preferences/geometry/GeometryPreferencesUI.py rename to AppGUI/preferences/geometry/GeometryPreferencesUI.py index cf906d61..fd1709ef 100644 --- a/flatcamGUI/preferences/geometry/GeometryPreferencesUI.py +++ b/AppGUI/preferences/geometry/GeometryPreferencesUI.py @@ -1,13 +1,13 @@ from PyQt5 import QtWidgets from PyQt5.QtCore import QSettings -from flatcamGUI.preferences.geometry.GeometryEditorPrefGroupUI import GeometryEditorPrefGroupUI -from flatcamGUI.preferences.geometry.GeometryAdvOptPrefGroupUI import GeometryAdvOptPrefGroupUI -from flatcamGUI.preferences.geometry.GeometryOptPrefGroupUI import GeometryOptPrefGroupUI -from flatcamGUI.preferences.geometry.GeometryGenPrefGroupUI import GeometryGenPrefGroupUI +from AppGUI.preferences.geometry.GeometryEditorPrefGroupUI import GeometryEditorPrefGroupUI +from AppGUI.preferences.geometry.GeometryAdvOptPrefGroupUI import GeometryAdvOptPrefGroupUI +from AppGUI.preferences.geometry.GeometryOptPrefGroupUI import GeometryOptPrefGroupUI +from AppGUI.preferences.geometry.GeometryGenPrefGroupUI import GeometryGenPrefGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamGUI/preferences/geometry/__init__.py b/AppGUI/preferences/geometry/__init__.py similarity index 100% rename from flatcamGUI/preferences/geometry/__init__.py rename to AppGUI/preferences/geometry/__init__.py diff --git a/flatcamGUI/preferences/gerber/GerberAdvOptPrefGroupUI.py b/AppGUI/preferences/gerber/GerberAdvOptPrefGroupUI.py similarity index 97% rename from flatcamGUI/preferences/gerber/GerberAdvOptPrefGroupUI.py rename to AppGUI/preferences/gerber/GerberAdvOptPrefGroupUI.py index 20376bfd..f32604c9 100644 --- a/flatcamGUI/preferences/gerber/GerberAdvOptPrefGroupUI.py +++ b/AppGUI/preferences/gerber/GerberAdvOptPrefGroupUI.py @@ -1,11 +1,11 @@ from PyQt5 import QtWidgets from PyQt5.QtCore import QSettings -from flatcamGUI.GUIElements import FCCheckBox, RadioSet, FCDoubleSpinner, FCSpinner, OptionalInputSection -from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI +from AppGUI.GUIElements import FCCheckBox, RadioSet, FCDoubleSpinner, FCSpinner, OptionalInputSection +from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py b/AppGUI/preferences/gerber/GerberEditorPrefGroupUI.py similarity index 97% rename from flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py rename to AppGUI/preferences/gerber/GerberEditorPrefGroupUI.py index 3ba0da99..dd711a15 100644 --- a/flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py +++ b/AppGUI/preferences/gerber/GerberEditorPrefGroupUI.py @@ -1,11 +1,11 @@ from PyQt5 import QtWidgets from PyQt5.QtCore import QSettings -from flatcamGUI.GUIElements import FCSpinner, FCDoubleSpinner, FCComboBox, FCEntry, RadioSet -from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI +from AppGUI.GUIElements import FCSpinner, FCDoubleSpinner, FCComboBox, FCEntry, RadioSet +from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamGUI/preferences/gerber/GerberExpPrefGroupUI.py b/AppGUI/preferences/gerber/GerberExpPrefGroupUI.py similarity index 96% rename from flatcamGUI/preferences/gerber/GerberExpPrefGroupUI.py rename to AppGUI/preferences/gerber/GerberExpPrefGroupUI.py index 01729dc5..edd41b45 100644 --- a/flatcamGUI/preferences/gerber/GerberExpPrefGroupUI.py +++ b/AppGUI/preferences/gerber/GerberExpPrefGroupUI.py @@ -1,11 +1,11 @@ from PyQt5 import QtWidgets, QtCore from PyQt5.QtCore import QSettings -from flatcamGUI.GUIElements import RadioSet, FCSpinner -from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI +from AppGUI.GUIElements import RadioSet, FCSpinner +from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamGUI/preferences/gerber/GerberGenPrefGroupUI.py b/AppGUI/preferences/gerber/GerberGenPrefGroupUI.py similarity index 98% rename from flatcamGUI/preferences/gerber/GerberGenPrefGroupUI.py rename to AppGUI/preferences/gerber/GerberGenPrefGroupUI.py index 6f52fe45..f20fc00e 100644 --- a/flatcamGUI/preferences/gerber/GerberGenPrefGroupUI.py +++ b/AppGUI/preferences/gerber/GerberGenPrefGroupUI.py @@ -1,11 +1,11 @@ from PyQt5 import QtWidgets, QtCore, QtGui from PyQt5.QtCore import QSettings -from flatcamGUI.GUIElements import FCCheckBox, FCSpinner, RadioSet, FCEntry -from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI +from AppGUI.GUIElements import FCCheckBox, FCSpinner, RadioSet, FCEntry +from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamGUI/preferences/gerber/GerberOptPrefGroupUI.py b/AppGUI/preferences/gerber/GerberOptPrefGroupUI.py similarity index 97% rename from flatcamGUI/preferences/gerber/GerberOptPrefGroupUI.py rename to AppGUI/preferences/gerber/GerberOptPrefGroupUI.py index 404f17ba..e3269322 100644 --- a/flatcamGUI/preferences/gerber/GerberOptPrefGroupUI.py +++ b/AppGUI/preferences/gerber/GerberOptPrefGroupUI.py @@ -1,11 +1,11 @@ from PyQt5 import QtWidgets from PyQt5.QtCore import QSettings -from flatcamGUI.GUIElements import FCDoubleSpinner, FCSpinner, RadioSet, FCCheckBox -from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI +from AppGUI.GUIElements import FCDoubleSpinner, FCSpinner, RadioSet, FCCheckBox +from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamGUI/preferences/gerber/GerberPreferencesUI.py b/AppGUI/preferences/gerber/GerberPreferencesUI.py similarity index 78% rename from flatcamGUI/preferences/gerber/GerberPreferencesUI.py rename to AppGUI/preferences/gerber/GerberPreferencesUI.py index f9d9f8aa..10c62978 100644 --- a/flatcamGUI/preferences/gerber/GerberPreferencesUI.py +++ b/AppGUI/preferences/gerber/GerberPreferencesUI.py @@ -1,14 +1,14 @@ from PyQt5 import QtWidgets from PyQt5.QtCore import QSettings -from flatcamGUI.preferences.gerber.GerberEditorPrefGroupUI import GerberEditorPrefGroupUI -from flatcamGUI.preferences.gerber.GerberExpPrefGroupUI import GerberExpPrefGroupUI -from flatcamGUI.preferences.gerber.GerberAdvOptPrefGroupUI import GerberAdvOptPrefGroupUI -from flatcamGUI.preferences.gerber.GerberOptPrefGroupUI import GerberOptPrefGroupUI -from flatcamGUI.preferences.gerber.GerberGenPrefGroupUI import GerberGenPrefGroupUI +from AppGUI.preferences.gerber.GerberEditorPrefGroupUI import GerberEditorPrefGroupUI +from AppGUI.preferences.gerber.GerberExpPrefGroupUI import GerberExpPrefGroupUI +from AppGUI.preferences.gerber.GerberAdvOptPrefGroupUI import GerberAdvOptPrefGroupUI +from AppGUI.preferences.gerber.GerberOptPrefGroupUI import GerberOptPrefGroupUI +from AppGUI.preferences.gerber.GerberGenPrefGroupUI import GerberGenPrefGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamGUI/preferences/gerber/__init__.py b/AppGUI/preferences/gerber/__init__.py similarity index 100% rename from flatcamGUI/preferences/gerber/__init__.py rename to AppGUI/preferences/gerber/__init__.py diff --git a/flatcamGUI/preferences/tools/Tools2CThievingPrefGroupUI.py b/AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py similarity index 98% rename from flatcamGUI/preferences/tools/Tools2CThievingPrefGroupUI.py rename to AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py index a3b6c0c2..7ec00a3c 100644 --- a/flatcamGUI/preferences/tools/Tools2CThievingPrefGroupUI.py +++ b/AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py @@ -1,11 +1,11 @@ from PyQt5 import QtWidgets from PyQt5.QtCore import QSettings -from flatcamGUI.GUIElements import FCSpinner, FCDoubleSpinner, RadioSet -from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI +from AppGUI.GUIElements import FCSpinner, FCDoubleSpinner, RadioSet +from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamGUI/preferences/tools/Tools2CalPrefGroupUI.py b/AppGUI/preferences/tools/Tools2CalPrefGroupUI.py similarity index 96% rename from flatcamGUI/preferences/tools/Tools2CalPrefGroupUI.py rename to AppGUI/preferences/tools/Tools2CalPrefGroupUI.py index 35b6fb1d..97100998 100644 --- a/flatcamGUI/preferences/tools/Tools2CalPrefGroupUI.py +++ b/AppGUI/preferences/tools/Tools2CalPrefGroupUI.py @@ -1,11 +1,11 @@ from PyQt5 import QtWidgets from PyQt5.QtCore import QSettings -from flatcamGUI.GUIElements import RadioSet, FCDoubleSpinner, FCCheckBox, FCEntry -from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI +from AppGUI.GUIElements import RadioSet, FCDoubleSpinner, FCCheckBox, FCEntry +from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py b/AppGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py similarity index 97% rename from flatcamGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py rename to AppGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py index 89a104ea..410bb655 100644 --- a/flatcamGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py +++ b/AppGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py @@ -1,11 +1,11 @@ from PyQt5 import QtWidgets from PyQt5.QtCore import QSettings -from flatcamGUI.GUIElements import FCCheckBox, RadioSet, FCDoubleSpinner -from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI +from AppGUI.GUIElements import FCCheckBox, RadioSet, FCDoubleSpinner +from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamGUI/preferences/tools/Tools2FiducialsPrefGroupUI.py b/AppGUI/preferences/tools/Tools2FiducialsPrefGroupUI.py similarity index 96% rename from flatcamGUI/preferences/tools/Tools2FiducialsPrefGroupUI.py rename to AppGUI/preferences/tools/Tools2FiducialsPrefGroupUI.py index 32b5fdfe..77ff939c 100644 --- a/flatcamGUI/preferences/tools/Tools2FiducialsPrefGroupUI.py +++ b/AppGUI/preferences/tools/Tools2FiducialsPrefGroupUI.py @@ -1,11 +1,11 @@ from PyQt5 import QtWidgets from PyQt5.QtCore import QSettings -from flatcamGUI.GUIElements import FCDoubleSpinner, RadioSet -from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI +from AppGUI.GUIElements import FCDoubleSpinner, RadioSet +from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamGUI/preferences/tools/Tools2InvertPrefGroupUI.py b/AppGUI/preferences/tools/Tools2InvertPrefGroupUI.py similarity index 93% rename from flatcamGUI/preferences/tools/Tools2InvertPrefGroupUI.py rename to AppGUI/preferences/tools/Tools2InvertPrefGroupUI.py index a063fb32..f7bb9f17 100644 --- a/flatcamGUI/preferences/tools/Tools2InvertPrefGroupUI.py +++ b/AppGUI/preferences/tools/Tools2InvertPrefGroupUI.py @@ -1,11 +1,11 @@ from PyQt5 import QtWidgets from PyQt5.QtCore import QSettings -from flatcamGUI.GUIElements import FCDoubleSpinner, RadioSet -from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI +from AppGUI.GUIElements import FCDoubleSpinner, RadioSet +from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamGUI/preferences/tools/Tools2OptimalPrefGroupUI.py b/AppGUI/preferences/tools/Tools2OptimalPrefGroupUI.py similarity index 91% rename from flatcamGUI/preferences/tools/Tools2OptimalPrefGroupUI.py rename to AppGUI/preferences/tools/Tools2OptimalPrefGroupUI.py index 283ddf2e..6524d439 100644 --- a/flatcamGUI/preferences/tools/Tools2OptimalPrefGroupUI.py +++ b/AppGUI/preferences/tools/Tools2OptimalPrefGroupUI.py @@ -1,11 +1,11 @@ from PyQt5 import QtWidgets from PyQt5.QtCore import QSettings -from flatcamGUI.GUIElements import FCSpinner -from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI +from AppGUI.GUIElements import FCSpinner +from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamGUI/preferences/tools/Tools2PreferencesUI.py b/AppGUI/preferences/tools/Tools2PreferencesUI.py similarity index 76% rename from flatcamGUI/preferences/tools/Tools2PreferencesUI.py rename to AppGUI/preferences/tools/Tools2PreferencesUI.py index 01ed4def..5101fc37 100644 --- a/flatcamGUI/preferences/tools/Tools2PreferencesUI.py +++ b/AppGUI/preferences/tools/Tools2PreferencesUI.py @@ -1,18 +1,18 @@ from PyQt5 import QtWidgets from PyQt5.QtCore import QSettings -from flatcamGUI.preferences.tools.Tools2InvertPrefGroupUI import Tools2InvertPrefGroupUI -from flatcamGUI.preferences.tools.Tools2PunchGerberPrefGroupUI import Tools2PunchGerberPrefGroupUI -from flatcamGUI.preferences.tools.Tools2EDrillsPrefGroupUI import Tools2EDrillsPrefGroupUI -from flatcamGUI.preferences.tools.Tools2CalPrefGroupUI import Tools2CalPrefGroupUI -from flatcamGUI.preferences.tools.Tools2FiducialsPrefGroupUI import Tools2FiducialsPrefGroupUI -from flatcamGUI.preferences.tools.Tools2CThievingPrefGroupUI import Tools2CThievingPrefGroupUI -from flatcamGUI.preferences.tools.Tools2QRCodePrefGroupUI import Tools2QRCodePrefGroupUI -from flatcamGUI.preferences.tools.Tools2OptimalPrefGroupUI import Tools2OptimalPrefGroupUI -from flatcamGUI.preferences.tools.Tools2RulesCheckPrefGroupUI import Tools2RulesCheckPrefGroupUI +from AppGUI.preferences.tools.Tools2InvertPrefGroupUI import Tools2InvertPrefGroupUI +from AppGUI.preferences.tools.Tools2PunchGerberPrefGroupUI import Tools2PunchGerberPrefGroupUI +from AppGUI.preferences.tools.Tools2EDrillsPrefGroupUI import Tools2EDrillsPrefGroupUI +from AppGUI.preferences.tools.Tools2CalPrefGroupUI import Tools2CalPrefGroupUI +from AppGUI.preferences.tools.Tools2FiducialsPrefGroupUI import Tools2FiducialsPrefGroupUI +from AppGUI.preferences.tools.Tools2CThievingPrefGroupUI import Tools2CThievingPrefGroupUI +from AppGUI.preferences.tools.Tools2QRCodePrefGroupUI import Tools2QRCodePrefGroupUI +from AppGUI.preferences.tools.Tools2OptimalPrefGroupUI import Tools2OptimalPrefGroupUI +from AppGUI.preferences.tools.Tools2RulesCheckPrefGroupUI import Tools2RulesCheckPrefGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py b/AppGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py similarity index 97% rename from flatcamGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py rename to AppGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py index a9a3a304..073d4a68 100644 --- a/flatcamGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py +++ b/AppGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py @@ -1,11 +1,11 @@ from PyQt5 import QtWidgets from PyQt5.QtCore import QSettings -from flatcamGUI.GUIElements import FCCheckBox, RadioSet, FCDoubleSpinner -from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI +from AppGUI.GUIElements import FCCheckBox, RadioSet, FCDoubleSpinner +from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamGUI/preferences/tools/Tools2QRCodePrefGroupUI.py b/AppGUI/preferences/tools/Tools2QRCodePrefGroupUI.py similarity index 97% rename from flatcamGUI/preferences/tools/Tools2QRCodePrefGroupUI.py rename to AppGUI/preferences/tools/Tools2QRCodePrefGroupUI.py index 5c22863b..1a8a7794 100644 --- a/flatcamGUI/preferences/tools/Tools2QRCodePrefGroupUI.py +++ b/AppGUI/preferences/tools/Tools2QRCodePrefGroupUI.py @@ -1,11 +1,11 @@ from PyQt5 import QtWidgets, QtCore from PyQt5.QtCore import Qt, QSettings -from flatcamGUI.GUIElements import FCSpinner, RadioSet, FCTextArea, FCEntry -from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI +from AppGUI.GUIElements import FCSpinner, RadioSet, FCTextArea, FCEntry +from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py b/AppGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py similarity index 98% rename from flatcamGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py rename to AppGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py index 4aba7caa..cc049d41 100644 --- a/flatcamGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py +++ b/AppGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py @@ -1,11 +1,11 @@ from PyQt5 import QtWidgets from PyQt5.QtCore import QSettings -from flatcamGUI.GUIElements import FCCheckBox, FCDoubleSpinner -from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI +from AppGUI.GUIElements import FCCheckBox, FCDoubleSpinner +from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamGUI/preferences/tools/Tools2sidedPrefGroupUI.py b/AppGUI/preferences/tools/Tools2sidedPrefGroupUI.py similarity index 95% rename from flatcamGUI/preferences/tools/Tools2sidedPrefGroupUI.py rename to AppGUI/preferences/tools/Tools2sidedPrefGroupUI.py index c7e17bc7..4f9174f8 100644 --- a/flatcamGUI/preferences/tools/Tools2sidedPrefGroupUI.py +++ b/AppGUI/preferences/tools/Tools2sidedPrefGroupUI.py @@ -1,11 +1,11 @@ from PyQt5 import QtWidgets from PyQt5.QtCore import QSettings -from flatcamGUI.GUIElements import FCDoubleSpinner, RadioSet -from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI +from AppGUI.GUIElements import FCDoubleSpinner, RadioSet +from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamGUI/preferences/tools/ToolsCalculatorsPrefGroupUI.py b/AppGUI/preferences/tools/ToolsCalculatorsPrefGroupUI.py similarity index 97% rename from flatcamGUI/preferences/tools/ToolsCalculatorsPrefGroupUI.py rename to AppGUI/preferences/tools/ToolsCalculatorsPrefGroupUI.py index df9a31fd..f1d8cec9 100644 --- a/flatcamGUI/preferences/tools/ToolsCalculatorsPrefGroupUI.py +++ b/AppGUI/preferences/tools/ToolsCalculatorsPrefGroupUI.py @@ -1,11 +1,11 @@ from PyQt5 import QtWidgets from PyQt5.QtCore import QSettings -from flatcamGUI.GUIElements import FCDoubleSpinner -from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI +from AppGUI.GUIElements import FCDoubleSpinner +from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamGUI/preferences/tools/ToolsCornersPrefGroupUI.py b/AppGUI/preferences/tools/ToolsCornersPrefGroupUI.py similarity index 94% rename from flatcamGUI/preferences/tools/ToolsCornersPrefGroupUI.py rename to AppGUI/preferences/tools/ToolsCornersPrefGroupUI.py index 738b9580..559eea86 100644 --- a/flatcamGUI/preferences/tools/ToolsCornersPrefGroupUI.py +++ b/AppGUI/preferences/tools/ToolsCornersPrefGroupUI.py @@ -1,11 +1,11 @@ from PyQt5 import QtWidgets from PyQt5.QtCore import QSettings -from flatcamGUI.GUIElements import FCDoubleSpinner -from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI +from AppGUI.GUIElements import FCDoubleSpinner +from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamGUI/preferences/tools/ToolsCutoutPrefGroupUI.py b/AppGUI/preferences/tools/ToolsCutoutPrefGroupUI.py similarity index 96% rename from flatcamGUI/preferences/tools/ToolsCutoutPrefGroupUI.py rename to AppGUI/preferences/tools/ToolsCutoutPrefGroupUI.py index 308c74c4..4e690474 100644 --- a/flatcamGUI/preferences/tools/ToolsCutoutPrefGroupUI.py +++ b/AppGUI/preferences/tools/ToolsCutoutPrefGroupUI.py @@ -1,12 +1,12 @@ from PyQt5 import QtWidgets from PyQt5.QtCore import QSettings -from flatcamGUI.GUIElements import FCDoubleSpinner, FCCheckBox, RadioSet, FCComboBox -from flatcamGUI.preferences import machinist_setting -from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI +from AppGUI.GUIElements import FCDoubleSpinner, FCCheckBox, RadioSet, FCComboBox +from AppGUI.preferences import machinist_setting +from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamGUI/preferences/tools/ToolsFilmPrefGroupUI.py b/AppGUI/preferences/tools/ToolsFilmPrefGroupUI.py similarity index 98% rename from flatcamGUI/preferences/tools/ToolsFilmPrefGroupUI.py rename to AppGUI/preferences/tools/ToolsFilmPrefGroupUI.py index 17e994c5..c1fb5e38 100644 --- a/flatcamGUI/preferences/tools/ToolsFilmPrefGroupUI.py +++ b/AppGUI/preferences/tools/ToolsFilmPrefGroupUI.py @@ -1,11 +1,11 @@ from PyQt5 import QtWidgets, QtCore from PyQt5.QtCore import Qt, QSettings -from flatcamGUI.GUIElements import RadioSet, FCEntry, FCDoubleSpinner, FCCheckBox, FCComboBox -from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI +from AppGUI.GUIElements import RadioSet, FCEntry, FCDoubleSpinner, FCCheckBox, FCComboBox +from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py b/AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py similarity index 98% rename from flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py rename to AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py index 25fd24a4..bc64f83a 100644 --- a/flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py +++ b/AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py @@ -1,11 +1,11 @@ from PyQt5 import QtWidgets from PyQt5.QtCore import QSettings -from flatcamGUI.GUIElements import FCEntry, RadioSet, FCDoubleSpinner, FCComboBox, FCCheckBox -from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI +from AppGUI.GUIElements import FCEntry, RadioSet, FCDoubleSpinner, FCComboBox, FCCheckBox +from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py b/AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py similarity index 98% rename from flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py rename to AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py index a86b270b..bac073df 100644 --- a/flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py +++ b/AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py @@ -1,11 +1,11 @@ from PyQt5 import QtWidgets from PyQt5.QtCore import QSettings -from flatcamGUI.GUIElements import FCEntry, RadioSet, FCDoubleSpinner, FCComboBox, FCCheckBox -from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI +from AppGUI.GUIElements import FCEntry, RadioSet, FCDoubleSpinner, FCComboBox, FCCheckBox +from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamGUI/preferences/tools/ToolsPanelizePrefGroupUI.py b/AppGUI/preferences/tools/ToolsPanelizePrefGroupUI.py similarity index 96% rename from flatcamGUI/preferences/tools/ToolsPanelizePrefGroupUI.py rename to AppGUI/preferences/tools/ToolsPanelizePrefGroupUI.py index df791742..f217ec00 100644 --- a/flatcamGUI/preferences/tools/ToolsPanelizePrefGroupUI.py +++ b/AppGUI/preferences/tools/ToolsPanelizePrefGroupUI.py @@ -1,11 +1,11 @@ from PyQt5 import QtWidgets from PyQt5.QtCore import QSettings -from flatcamGUI.GUIElements import FCDoubleSpinner, FCSpinner, RadioSet, FCCheckBox -from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI +from AppGUI.GUIElements import FCDoubleSpinner, FCSpinner, RadioSet, FCCheckBox +from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamGUI/preferences/tools/ToolsPreferencesUI.py b/AppGUI/preferences/tools/ToolsPreferencesUI.py similarity index 76% rename from flatcamGUI/preferences/tools/ToolsPreferencesUI.py rename to AppGUI/preferences/tools/ToolsPreferencesUI.py index 7a58dff2..ec445df8 100644 --- a/flatcamGUI/preferences/tools/ToolsPreferencesUI.py +++ b/AppGUI/preferences/tools/ToolsPreferencesUI.py @@ -1,20 +1,20 @@ from PyQt5 import QtWidgets from PyQt5.QtCore import QSettings -from flatcamGUI.preferences.tools.ToolsSubPrefGroupUI import ToolsSubPrefGroupUI -from flatcamGUI.preferences.tools.ToolsSolderpastePrefGroupUI import ToolsSolderpastePrefGroupUI -from flatcamGUI.preferences.tools.ToolsCornersPrefGroupUI import ToolsCornersPrefGroupUI -from flatcamGUI.preferences.tools.ToolsTransformPrefGroupUI import ToolsTransformPrefGroupUI -from flatcamGUI.preferences.tools.ToolsCalculatorsPrefGroupUI import ToolsCalculatorsPrefGroupUI -from flatcamGUI.preferences.tools.ToolsPanelizePrefGroupUI import ToolsPanelizePrefGroupUI -from flatcamGUI.preferences.tools.ToolsFilmPrefGroupUI import ToolsFilmPrefGroupUI -from flatcamGUI.preferences.tools.ToolsPaintPrefGroupUI import ToolsPaintPrefGroupUI -from flatcamGUI.preferences.tools.Tools2sidedPrefGroupUI import Tools2sidedPrefGroupUI -from flatcamGUI.preferences.tools.ToolsCutoutPrefGroupUI import ToolsCutoutPrefGroupUI -from flatcamGUI.preferences.tools.ToolsNCCPrefGroupUI import ToolsNCCPrefGroupUI +from AppGUI.preferences.tools.ToolsSubPrefGroupUI import ToolsSubPrefGroupUI +from AppGUI.preferences.tools.ToolsSolderpastePrefGroupUI import ToolsSolderpastePrefGroupUI +from AppGUI.preferences.tools.ToolsCornersPrefGroupUI import ToolsCornersPrefGroupUI +from AppGUI.preferences.tools.ToolsTransformPrefGroupUI import ToolsTransformPrefGroupUI +from AppGUI.preferences.tools.ToolsCalculatorsPrefGroupUI import ToolsCalculatorsPrefGroupUI +from AppGUI.preferences.tools.ToolsPanelizePrefGroupUI import ToolsPanelizePrefGroupUI +from AppGUI.preferences.tools.ToolsFilmPrefGroupUI import ToolsFilmPrefGroupUI +from AppGUI.preferences.tools.ToolsPaintPrefGroupUI import ToolsPaintPrefGroupUI +from AppGUI.preferences.tools.Tools2sidedPrefGroupUI import Tools2sidedPrefGroupUI +from AppGUI.preferences.tools.ToolsCutoutPrefGroupUI import ToolsCutoutPrefGroupUI +from AppGUI.preferences.tools.ToolsNCCPrefGroupUI import ToolsNCCPrefGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamGUI/preferences/tools/ToolsSolderpastePrefGroupUI.py b/AppGUI/preferences/tools/ToolsSolderpastePrefGroupUI.py similarity index 98% rename from flatcamGUI/preferences/tools/ToolsSolderpastePrefGroupUI.py rename to AppGUI/preferences/tools/ToolsSolderpastePrefGroupUI.py index c1f60821..c615fcb9 100644 --- a/flatcamGUI/preferences/tools/ToolsSolderpastePrefGroupUI.py +++ b/AppGUI/preferences/tools/ToolsSolderpastePrefGroupUI.py @@ -1,11 +1,11 @@ from PyQt5 import QtWidgets from PyQt5.QtCore import QSettings -from flatcamGUI.GUIElements import FCEntry, FCDoubleSpinner, FCSpinner, FCComboBox -from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI +from AppGUI.GUIElements import FCEntry, FCDoubleSpinner, FCSpinner, FCComboBox +from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamGUI/preferences/tools/ToolsSubPrefGroupUI.py b/AppGUI/preferences/tools/ToolsSubPrefGroupUI.py similarity index 88% rename from flatcamGUI/preferences/tools/ToolsSubPrefGroupUI.py rename to AppGUI/preferences/tools/ToolsSubPrefGroupUI.py index ff9430e1..2cc78d87 100644 --- a/flatcamGUI/preferences/tools/ToolsSubPrefGroupUI.py +++ b/AppGUI/preferences/tools/ToolsSubPrefGroupUI.py @@ -1,11 +1,11 @@ from PyQt5 import QtWidgets from PyQt5.QtCore import QSettings -from flatcamGUI.GUIElements import FCCheckBox -from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI +from AppGUI.GUIElements import FCCheckBox +from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamGUI/preferences/tools/ToolsTransformPrefGroupUI.py b/AppGUI/preferences/tools/ToolsTransformPrefGroupUI.py similarity index 98% rename from flatcamGUI/preferences/tools/ToolsTransformPrefGroupUI.py rename to AppGUI/preferences/tools/ToolsTransformPrefGroupUI.py index c3bffec1..58304a07 100644 --- a/flatcamGUI/preferences/tools/ToolsTransformPrefGroupUI.py +++ b/AppGUI/preferences/tools/ToolsTransformPrefGroupUI.py @@ -1,11 +1,11 @@ from PyQt5 import QtWidgets from PyQt5.QtCore import QSettings -from flatcamGUI.GUIElements import FCDoubleSpinner, FCCheckBox, FCEntry -from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI +from AppGUI.GUIElements import FCDoubleSpinner, FCCheckBox, FCEntry +from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamGUI/preferences/tools/__init__.py b/AppGUI/preferences/tools/__init__.py similarity index 100% rename from flatcamGUI/preferences/tools/__init__.py rename to AppGUI/preferences/tools/__init__.py diff --git a/flatcamGUI/preferences/utilities/AutoCompletePrefGroupUI.py b/AppGUI/preferences/utilities/AutoCompletePrefGroupUI.py similarity index 94% rename from flatcamGUI/preferences/utilities/AutoCompletePrefGroupUI.py rename to AppGUI/preferences/utilities/AutoCompletePrefGroupUI.py index fd138091..4f491f49 100644 --- a/flatcamGUI/preferences/utilities/AutoCompletePrefGroupUI.py +++ b/AppGUI/preferences/utilities/AutoCompletePrefGroupUI.py @@ -1,11 +1,11 @@ from PyQt5 import QtWidgets, QtGui from PyQt5.QtCore import QSettings -from flatcamGUI.GUIElements import FCButton, FCTextArea, FCEntry -from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI +from AppGUI.GUIElements import FCButton, FCTextArea, FCEntry +from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamGUI/preferences/utilities/FAExcPrefGroupUI.py b/AppGUI/preferences/utilities/FAExcPrefGroupUI.py similarity index 95% rename from flatcamGUI/preferences/utilities/FAExcPrefGroupUI.py rename to AppGUI/preferences/utilities/FAExcPrefGroupUI.py index 18a3b971..4cdd89f7 100644 --- a/flatcamGUI/preferences/utilities/FAExcPrefGroupUI.py +++ b/AppGUI/preferences/utilities/FAExcPrefGroupUI.py @@ -1,11 +1,11 @@ from PyQt5 import QtWidgets, QtGui from PyQt5.QtCore import QSettings -from flatcamGUI.GUIElements import VerticalScrollArea, FCButton, FCTextArea, FCEntry -from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI +from AppGUI.GUIElements import VerticalScrollArea, FCButton, FCTextArea, FCEntry +from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamGUI/preferences/utilities/FAGcoPrefGroupUI.py b/AppGUI/preferences/utilities/FAGcoPrefGroupUI.py similarity index 94% rename from flatcamGUI/preferences/utilities/FAGcoPrefGroupUI.py rename to AppGUI/preferences/utilities/FAGcoPrefGroupUI.py index 2ac1a1b9..9c367ed5 100644 --- a/flatcamGUI/preferences/utilities/FAGcoPrefGroupUI.py +++ b/AppGUI/preferences/utilities/FAGcoPrefGroupUI.py @@ -1,11 +1,11 @@ from PyQt5 import QtWidgets, QtGui from PyQt5.QtCore import QSettings -from flatcamGUI.GUIElements import FCButton, FCTextArea, FCEntry -from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI +from AppGUI.GUIElements import FCButton, FCTextArea, FCEntry +from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamGUI/preferences/utilities/FAGrbPrefGroupUI.py b/AppGUI/preferences/utilities/FAGrbPrefGroupUI.py similarity index 94% rename from flatcamGUI/preferences/utilities/FAGrbPrefGroupUI.py rename to AppGUI/preferences/utilities/FAGrbPrefGroupUI.py index 480fdb39..70e0aa78 100644 --- a/flatcamGUI/preferences/utilities/FAGrbPrefGroupUI.py +++ b/AppGUI/preferences/utilities/FAGrbPrefGroupUI.py @@ -1,11 +1,11 @@ from PyQt5 import QtWidgets, QtGui from PyQt5.QtCore import QSettings -from flatcamGUI.GUIElements import FCButton, FCTextArea, FCEntry -from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI +from AppGUI.GUIElements import FCButton, FCTextArea, FCEntry +from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamGUI/preferences/utilities/UtilPreferencesUI.py b/AppGUI/preferences/utilities/UtilPreferencesUI.py similarity index 76% rename from flatcamGUI/preferences/utilities/UtilPreferencesUI.py rename to AppGUI/preferences/utilities/UtilPreferencesUI.py index ae9e2110..e227c924 100644 --- a/flatcamGUI/preferences/utilities/UtilPreferencesUI.py +++ b/AppGUI/preferences/utilities/UtilPreferencesUI.py @@ -1,9 +1,9 @@ from PyQt5 import QtWidgets -from flatcamGUI.preferences.utilities.AutoCompletePrefGroupUI import AutoCompletePrefGroupUI -from flatcamGUI.preferences.utilities.FAGrbPrefGroupUI import FAGrbPrefGroupUI -from flatcamGUI.preferences.utilities.FAGcoPrefGroupUI import FAGcoPrefGroupUI -from flatcamGUI.preferences.utilities.FAExcPrefGroupUI import FAExcPrefGroupUI +from AppGUI.preferences.utilities.AutoCompletePrefGroupUI import AutoCompletePrefGroupUI +from AppGUI.preferences.utilities.FAGrbPrefGroupUI import FAGrbPrefGroupUI +from AppGUI.preferences.utilities.FAGcoPrefGroupUI import FAGcoPrefGroupUI +from AppGUI.preferences.utilities.FAExcPrefGroupUI import FAExcPrefGroupUI class UtilPreferencesUI(QtWidgets.QWidget): diff --git a/flatcamGUI/preferences/utilities/__init__.py b/AppGUI/preferences/utilities/__init__.py similarity index 100% rename from flatcamGUI/preferences/utilities/__init__.py rename to AppGUI/preferences/utilities/__init__.py diff --git a/flatcamObjects/FlatCAMCNCJob.py b/AppObjects/FlatCAMCNCJob.py similarity index 99% rename from flatcamObjects/FlatCAMCNCJob.py rename to AppObjects/FlatCAMCNCJob.py index b75ec21d..c8655168 100644 --- a/flatcamObjects/FlatCAMCNCJob.py +++ b/AppObjects/FlatCAMCNCJob.py @@ -14,8 +14,8 @@ from copy import deepcopy from io import StringIO from datetime import datetime -from flatcamEditors.FlatCAMTextEditor import TextEditor -from flatcamObjects.FlatCAMObj import * +from AppEditors.FlatCAMTextEditor import TextEditor +from AppObjects.FlatCAMObj import * from camlib import CNCjob @@ -24,7 +24,7 @@ import sys import math import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamObjects/FlatCAMDocument.py b/AppObjects/FlatCAMDocument.py similarity index 98% rename from flatcamObjects/FlatCAMDocument.py rename to AppObjects/FlatCAMDocument.py index ed1e8b56..c9aadca9 100644 --- a/flatcamObjects/FlatCAMDocument.py +++ b/AppObjects/FlatCAMDocument.py @@ -10,11 +10,11 @@ # File modified by: Marius Stanciu # # ########################################################## -from flatcamEditors.FlatCAMTextEditor import TextEditor -from flatcamObjects.FlatCAMObj import * +from AppEditors.FlatCAMTextEditor import TextEditor +from AppObjects.FlatCAMObj import * import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamObjects/FlatCAMExcellon.py b/AppObjects/FlatCAMExcellon.py similarity index 99% rename from flatcamObjects/FlatCAMExcellon.py rename to AppObjects/FlatCAMExcellon.py index 2e97db1e..ae800e18 100644 --- a/flatcamObjects/FlatCAMExcellon.py +++ b/AppObjects/FlatCAMExcellon.py @@ -15,13 +15,13 @@ from shapely.geometry import Point, LineString from copy import deepcopy -from flatcamParsers.ParseExcellon import Excellon -from flatcamObjects.FlatCAMObj import * +from AppParsers.ParseExcellon import Excellon +from AppObjects.FlatCAMObj import * import itertools import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') @@ -146,7 +146,7 @@ class ExcellonObject(FlatCAMObj, Excellon): 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_list: List or one object of ExcellonObject AppObjects to join. :param exc_final: Destination ExcellonObject object. :return: None """ @@ -389,7 +389,7 @@ class ExcellonObject(FlatCAMObj, Excellon): 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 + # if the slot number is zero is better to not clutter the AppGUI 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) @@ -855,7 +855,7 @@ class ExcellonObject(FlatCAMObj, Excellon): 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 + # there is no tool in tool table so we can't save the AppGUI elements values to storage return self.ui_disconnect() @@ -910,7 +910,7 @@ class ExcellonObject(FlatCAMObj, Excellon): 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. + to the selections on the tool list in the AppGUI. :return: List of tools. :rtype: list @@ -1778,7 +1778,7 @@ class ExcellonObject(FlatCAMObj, Excellon): 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 + # there is no tool in tool table so we can't save the AppGUI elements values to storage log.debug("ExcellonObject.on_apply_param_to_all_clicked() --> no tool in Tools Table, aborting.") return diff --git a/flatcamObjects/FlatCAMGeometry.py b/AppObjects/FlatCAMGeometry.py similarity index 99% rename from flatcamObjects/FlatCAMGeometry.py rename to AppObjects/FlatCAMGeometry.py index ae9992e0..b14f1f7e 100644 --- a/flatcamObjects/FlatCAMGeometry.py +++ b/AppObjects/FlatCAMGeometry.py @@ -15,7 +15,7 @@ import shapely.affinity as affinity from camlib import Geometry -from flatcamObjects.FlatCAMObj import * +from AppObjects.FlatCAMObj import * import ezdxf import math @@ -24,7 +24,7 @@ from copy import deepcopy import traceback import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') @@ -931,7 +931,7 @@ class GeometryObject(FlatCAMObj, Geometry): self.ui_connect() self.build_ui() - # if there is no tool left in the Tools Table, enable the parameters GUI + # if there is no tool left in the Tools Table, enable the parameters AppGUI if self.ui.geo_tools_table.rowCount() != 0: self.ui.geo_param_frame.setDisabled(False) @@ -1007,7 +1007,7 @@ class GeometryObject(FlatCAMObj, Geometry): self.ui_connect() self.build_ui() - # if there is no tool left in the Tools Table, enable the parameters GUI + # if there is no tool left in the Tools Table, enable the parameters AppGUI if self.ui.geo_tools_table.rowCount() != 0: self.ui.geo_param_frame.setDisabled(False) @@ -1188,7 +1188,7 @@ class GeometryObject(FlatCAMObj, Geometry): 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 there is no tool left in the Tools Table, disable the parameters AppGUI if self.ui.geo_tools_table.rowCount() == 0: self.ui.geo_param_frame.setDisabled(True) @@ -1320,7 +1320,7 @@ class GeometryObject(FlatCAMObj, Geometry): 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 + # there is no tool in tool table so we can't save the AppGUI elements values to storage log.debug("GeometryObject.gui_form_to_storage() --> no tool in Tools Table, aborting.") return @@ -1383,7 +1383,7 @@ class GeometryObject(FlatCAMObj, Geometry): 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 + # there is no tool in tool table so we can't save the AppGUI elements values to storage log.debug("GeometryObject.gui_form_to_storage() --> no tool in Tools Table, aborting.") return @@ -1748,7 +1748,7 @@ class GeometryObject(FlatCAMObj, Geometry): :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 tools_in_use list of lists, each list in the list is made out of row elements of tools table from GUI + :type tools_in_use list of lists, each list in the list is made out of row elements of tools table from AppGUI :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 @@ -2738,7 +2738,7 @@ class GeometryObject(FlatCAMObj, Geometry): """ 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_list: List of GerberObject AppObjects to join. :param geo_final: Destination GerberObject object. :param multigeo: if the merged geometry objects are of type MultiGeo :return: None diff --git a/flatcamObjects/FlatCAMGerber.py b/AppObjects/FlatCAMGerber.py similarity index 99% rename from flatcamObjects/FlatCAMGerber.py rename to AppObjects/FlatCAMGerber.py index e3c80f71..7e1f64ab 100644 --- a/flatcamObjects/FlatCAMGerber.py +++ b/AppObjects/FlatCAMGerber.py @@ -14,15 +14,15 @@ 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 * +from AppParsers.ParseGerber import Gerber +from AppObjects.FlatCAMObj import * import math import numpy as np from copy import deepcopy import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') @@ -45,7 +45,7 @@ class GerberObject(FlatCAMObj, Gerber): 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_list: List of GerberObject AppObjects to join. :param grb_final: Destination GeometryObject object. :return: None """ @@ -179,10 +179,10 @@ class GerberObject(FlatCAMObj, Gerber): def set_ui(self, ui): """ - Maps options with GUI inputs. - Connects GUI events to methods. + Maps options with AppGUI inputs. + Connects AppGUI events to methods. - :param ui: GUI object. + :param ui: AppGUI object. :type ui: GerberObjectUI :return: None """ @@ -243,7 +243,7 @@ class GerberObject(FlatCAMObj, Gerber): 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 + # establish visibility for the AppGUI elements found in the slot function self.ui.tool_type_radio.activated_custom.emit(self.options['tool_type']) # Show/Hide Advanced Options diff --git a/flatcamObjects/FlatCAMObj.py b/AppObjects/FlatCAMObj.py similarity index 98% rename from flatcamObjects/FlatCAMObj.py rename to AppObjects/FlatCAMObj.py index 22a12117..fda1a0c7 100644 --- a/flatcamObjects/FlatCAMObj.py +++ b/AppObjects/FlatCAMObj.py @@ -12,15 +12,15 @@ import inspect # TODO: For debugging only. -from flatcamGUI.ObjectUI import * +from AppGUI.ObjectUI import * -from FlatCAMCommon import LoudDict -from flatcamGUI.PlotCanvasLegacy import ShapeCollectionLegacy +from Common import LoudDict +from AppGUI.PlotCanvasLegacy import ShapeCollectionLegacy import sys import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') @@ -43,7 +43,7 @@ class ValidationError(Exception): 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 + in the AppGUI, can be plotted, and their options can be modified by the user in their respective forms. """ diff --git a/flatcamObjects/FlatCAMScript.py b/AppObjects/FlatCAMScript.py similarity index 98% rename from flatcamObjects/FlatCAMScript.py rename to AppObjects/FlatCAMScript.py index e17df4d9..93892715 100644 --- a/flatcamObjects/FlatCAMScript.py +++ b/AppObjects/FlatCAMScript.py @@ -10,16 +10,16 @@ # File modified by: Marius Stanciu # # ########################################################## -from flatcamEditors.FlatCAMTextEditor import TextEditor -from flatcamObjects.FlatCAMObj import * -from flatcamGUI.ObjectUI import * +from AppEditors.FlatCAMTextEditor import TextEditor +from AppObjects.FlatCAMObj import * +from AppGUI.ObjectUI import * import tkinter as tk import sys from copy import deepcopy import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamObjects/ObjectCollection.py b/AppObjects/ObjectCollection.py similarity index 98% rename from flatcamObjects/ObjectCollection.py rename to AppObjects/ObjectCollection.py index 556728a0..60fc7d09 100644 --- a/flatcamObjects/ObjectCollection.py +++ b/AppObjects/ObjectCollection.py @@ -16,13 +16,13 @@ from PyQt5.QtCore import Qt, QSettings from PyQt5.QtGui import QColor # from PyQt5.QtCore import QModelIndex -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 AppObjects.FlatCAMObj import FlatCAMObj +from AppObjects.FlatCAMCNCJob import CNCJobObject +from AppObjects.FlatCAMDocument import DocumentObject +from AppObjects.FlatCAMExcellon import ExcellonObject +from AppObjects.FlatCAMGeometry import GeometryObject +from AppObjects.FlatCAMGerber import GerberObject +from AppObjects.FlatCAMScript import ScriptObject import inspect # TODO: Remove @@ -32,7 +32,7 @@ from copy import deepcopy from numpy import Inf import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') @@ -55,7 +55,7 @@ class KeySensitiveListView(QtWidgets.QTreeView): # self.setRootIsDecorated(False) # self.setExpandsOnDoubleClick(False) - # Enable dragging and dropping onto the GUI + # Enable dragging and dropping onto the AppGUI self.setAcceptDrops(True) self.filename = "" self.app = app @@ -324,7 +324,7 @@ class ObjectCollection(QtCore.QAbstractItemModel): font.setFamily("Seagoe UI") self.view.setFont(font) - # ## GUI Events + # ## AppGUI Events self.view.selectionModel().selectionChanged.connect(self.on_list_selection_change) # self.view.activated.connect(self.on_item_activated) self.view.keyPressed.connect(self.app.ui.keyPressEvent) diff --git a/flatcamObjects/__init__.py b/AppObjects/__init__.py similarity index 100% rename from flatcamObjects/__init__.py rename to AppObjects/__init__.py diff --git a/flatcamParsers/ParseDXF.py b/AppParsers/ParseDXF.py similarity index 99% rename from flatcamParsers/ParseDXF.py rename to AppParsers/ParseDXF.py index d3d482fd..698e87b8 100644 --- a/flatcamParsers/ParseDXF.py +++ b/AppParsers/ParseDXF.py @@ -12,8 +12,8 @@ import logging log = logging.getLogger('base2') -from flatcamParsers.ParseFont import * -from flatcamParsers.ParseDXF_Spline import * +from AppParsers.ParseFont import * +from AppParsers.ParseDXF_Spline import * def distance(pt1, pt2): diff --git a/flatcamParsers/ParseDXF_Spline.py b/AppParsers/ParseDXF_Spline.py similarity index 100% rename from flatcamParsers/ParseDXF_Spline.py rename to AppParsers/ParseDXF_Spline.py diff --git a/flatcamParsers/ParseExcellon.py b/AppParsers/ParseExcellon.py similarity index 98% rename from flatcamParsers/ParseExcellon.py rename to AppParsers/ParseExcellon.py index 07930005..f350ba28 100644 --- a/flatcamParsers/ParseExcellon.py +++ b/AppParsers/ParseExcellon.py @@ -17,8 +17,8 @@ import logging import traceback from copy import deepcopy -import FlatCAMTranslation as fcTranslate -from FlatCAMCommon import GracefulException as grace +import AppTranslation as fcTranslate +from Common import GracefulException as grace import gettext import builtins @@ -967,7 +967,7 @@ class Excellon(Geometry): :return: None """ - log.debug("flatcamParsers.ParseExcellon.Excellon.create_geometry()") + log.debug("AppParsers.ParseExcellon.Excellon.create_geometry()") self.solid_geometry = [] try: # clear the solid_geometry in self.tools @@ -982,7 +982,7 @@ class Excellon(Geometry): _("Excellon.create_geometry() -> a drill location was skipped " "due of not having a tool associated.\n" "Check the resulting GCode.")) - log.debug("flatcamParsers.ParseExcellon.Excellon.create_geometry() -> a drill location was skipped " + log.debug("AppParsers.ParseExcellon.Excellon.create_geometry() -> a drill location was skipped " "due of not having a tool associated") continue tooldia = self.tools[drill['tool']]['C'] @@ -1006,7 +1006,7 @@ class Excellon(Geometry): self.tools[tool_in_slots]['solid_geometry'].append(poly) self.tools[tool_in_slots]['data'] = deepcopy(self.default_data) except Exception as e: - log.debug("flatcamParsers.ParseExcellon.Excellon.create_geometry() -> " + log.debug("AppParsers.ParseExcellon.Excellon.create_geometry() -> " "Excellon geometry creation failed due of ERROR: %s" % str(e)) return "fail" @@ -1018,10 +1018,10 @@ class Excellon(Geometry): :param flatten: No used """ - log.debug("flatcamParsers.ParseExcellon.Excellon.bounds()") + log.debug("AppParsers.ParseExcellon.Excellon.bounds()") if self.solid_geometry is None or not self.tools: - log.debug("flatcamParsers.ParseExcellon.Excellon -> solid_geometry is None") + log.debug("AppParsers.ParseExcellon.Excellon -> solid_geometry is None") return 0, 0, 0, 0 def bounds_rec(obj): @@ -1092,7 +1092,7 @@ class Excellon(Geometry): else: log.error("Unsupported units: %s" % str(obj_units)) factor = 1.0 - log.debug("flatcamParsers.ParseExcellon.Excellon.convert_units() --> Factor: %s" % str(factor)) + log.debug("AppParsers.ParseExcellon.Excellon.convert_units() --> Factor: %s" % str(factor)) self.units = obj_units self.scale(factor, factor) @@ -1118,7 +1118,7 @@ class Excellon(Geometry): :return: None :rtype: None """ - log.debug("flatcamParsers.ParseExcellon.Excellon.scale()") + log.debug("AppParsers.ParseExcellon.Excellon.scale()") if yfactor is None: yfactor = xfactor @@ -1183,7 +1183,7 @@ class Excellon(Geometry): :type vect: tuple :return: None """ - log.debug("flatcamParsers.ParseExcellon.Excellon.offset()") + log.debug("AppParsers.ParseExcellon.Excellon.offset()") dx, dy = vect @@ -1243,7 +1243,7 @@ class Excellon(Geometry): :type point: list :return: None """ - log.debug("flatcamParsers.ParseExcellon.Excellon.mirror()") + log.debug("AppParsers.ParseExcellon.Excellon.mirror()") px, py = point xscale, yscale = {"X": (1.0, -1.0), "Y": (-1.0, 1.0)}[axis] @@ -1309,7 +1309,7 @@ class Excellon(Geometry): See shapely manual for more information: http://toblerity.org/shapely/manual.html#affine-transformations """ - log.debug("flatcamParsers.ParseExcellon.Excellon.skew()") + log.debug("AppParsers.ParseExcellon.Excellon.skew()") if angle_x is None: angle_x = 0.0 @@ -1396,7 +1396,7 @@ class Excellon(Geometry): :param point: tuple of coordinates (x, y) :return: None """ - log.debug("flatcamParsers.ParseExcellon.Excellon.rotate()") + log.debug("AppParsers.ParseExcellon.Excellon.rotate()") if angle == 0: return @@ -1479,7 +1479,7 @@ class Excellon(Geometry): :param join: The type of line joint used by the shapely buffer method: round, square, bevel :return: None """ - log.debug("flatcamParsers.ParseExcellon.Excellon.buffer()") + log.debug("AppParsers.ParseExcellon.Excellon.buffer()") if distance == 0: return diff --git a/flatcamParsers/ParseFont.py b/AppParsers/ParseFont.py similarity index 99% rename from flatcamParsers/ParseFont.py rename to AppParsers/ParseFont.py index cb09a862..7fa2b0d0 100644 --- a/flatcamParsers/ParseFont.py +++ b/AppParsers/ParseFont.py @@ -22,7 +22,7 @@ from fontTools import ttLib import logging import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamParsers/ParseGerber.py b/AppParsers/ParseGerber.py similarity index 99% rename from flatcamParsers/ParseGerber.py rename to AppParsers/ParseGerber.py index 57ba4d49..e3e26e4e 100644 --- a/flatcamParsers/ParseGerber.py +++ b/AppParsers/ParseGerber.py @@ -14,9 +14,9 @@ import shapely.affinity as affinity from shapely.geometry import box as shply_box, Polygon, LineString, Point, MultiPolygon from lxml import etree as ET -from flatcamParsers.ParseSVG import svgparselength, getsvggeo -from FlatCAMCommon import GracefulException as grace -import FlatCAMTranslation as fcTranslate +from AppParsers.ParseSVG import svgparselength, getsvggeo +from Common import GracefulException as grace +import AppTranslation as fcTranslate import gettext import builtins @@ -1416,7 +1416,7 @@ class Gerber(Geometry): # ######### Line did not match any pattern. Warn user. ########## # ################################################################ log.warning("Line ignored (%d): %s" % (line_num, gline)) - # provide the app with a way to process the GUI events when in a blocking loop + # provide the app with a way to process the AppGUI events when in a blocking loop QtWidgets.QApplication.processEvents() try: @@ -1763,7 +1763,7 @@ class Gerber(Geometry): :return: None """ - log.debug("flatcamParsers.ParseGerber.Gerber.import_svg()") + log.debug("AppParsers.ParseGerber.Gerber.import_svg()") # Parse into list of shapely objects svg_tree = ET.parse(filename) @@ -2389,7 +2389,7 @@ class Gerber(Geometry): geo_p = shply_box(minx, miny, maxx, maxy) new_geo_el['solid'] = geo_p else: - log.debug("flatcamParsers.ParseGerber.Gerber.buffer() --> " + log.debug("AppParsers.ParseGerber.Gerber.buffer() --> " "ap type not supported") else: new_geo_el['solid'] = geo_el['follow'].buffer( diff --git a/flatcamParsers/ParseHPGL2.py b/AppParsers/ParseHPGL2.py similarity index 99% rename from flatcamParsers/ParseHPGL2.py rename to AppParsers/ParseHPGL2.py index a90a3184..e9eafac5 100644 --- a/flatcamParsers/ParseHPGL2.py +++ b/AppParsers/ParseHPGL2.py @@ -18,8 +18,8 @@ import sys from shapely.ops import unary_union from shapely.geometry import LineString, Point -from FlatCAMCommon import GracefulException as grace -import FlatCAMTranslation as fcTranslate +from Common import GracefulException as grace +import AppTranslation as fcTranslate import gettext import builtins diff --git a/flatcamParsers/ParsePDF.py b/AppParsers/ParsePDF.py similarity index 99% rename from flatcamParsers/ParsePDF.py rename to AppParsers/ParsePDF.py index e7f189f3..a6d282e8 100644 --- a/flatcamParsers/ParsePDF.py +++ b/AppParsers/ParsePDF.py @@ -7,7 +7,7 @@ from PyQt5 import QtCore -from FlatCAMCommon import GracefulException as grace +from Common import GracefulException as grace from shapely.geometry import Polygon, LineString, MultiPolygon diff --git a/flatcamParsers/ParseSVG.py b/AppParsers/ParseSVG.py similarity index 99% rename from flatcamParsers/ParseSVG.py rename to AppParsers/ParseSVG.py index a36e4770..713d50f1 100644 --- a/flatcamParsers/ParseSVG.py +++ b/AppParsers/ParseSVG.py @@ -27,7 +27,7 @@ from shapely.geometry import LineString, LinearRing, MultiLineString from shapely.affinity import skew, affine_transform, rotate import numpy as np -from flatcamParsers.ParseFont import * +from AppParsers.ParseFont import * log = logging.getLogger('base2') diff --git a/flatcamParsers/__init__.py b/AppParsers/__init__.py similarity index 100% rename from flatcamParsers/__init__.py rename to AppParsers/__init__.py diff --git a/FlatCAMPool.py b/AppPool.py similarity index 100% rename from FlatCAMPool.py rename to AppPool.py diff --git a/FlatCAMPostProc.py b/AppPreProcessor.py similarity index 100% rename from FlatCAMPostProc.py rename to AppPreProcessor.py diff --git a/FlatCAMProcess.py b/AppProcess.py similarity index 98% rename from FlatCAMProcess.py rename to AppProcess.py index c74d27bf..313e8581 100644 --- a/FlatCAMProcess.py +++ b/AppProcess.py @@ -6,12 +6,12 @@ # MIT Licence # # ########################################################## -from flatcamGUI.GUIElements import FlatCAMActivityView +from AppGUI.GUIElements import FlatCAMActivityView from PyQt5 import QtCore import weakref import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/FlatCAMTool.py b/AppTool.py similarity index 98% rename from FlatCAMTool.py rename to AppTool.py index 470a484a..9eb30c3c 100644 --- a/FlatCAMTool.py +++ b/AppTool.py @@ -12,7 +12,7 @@ from PyQt5.QtCore import Qt from shapely.geometry import Polygon, LineString import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') @@ -87,10 +87,10 @@ class FlatCAMTool(QtWidgets.QWidget): if self.app.tool_tab_locked is True: return - # Remove anything else in the GUI + # Remove anything else in the AppGUI self.app.ui.tool_scroll_area.takeWidget() - # Put ourself in the GUI + # Put ourself in the AppGUI self.app.ui.tool_scroll_area.setWidget(self) # Switch notebook to tool page diff --git a/flatcamTools/ToolAlignObjects.py b/AppTools/ToolAlignObjects.py similarity index 99% rename from flatcamTools/ToolAlignObjects.py rename to AppTools/ToolAlignObjects.py index 33b9611c..af593211 100644 --- a/flatcamTools/ToolAlignObjects.py +++ b/AppTools/ToolAlignObjects.py @@ -6,9 +6,9 @@ # ########################################################## from PyQt5 import QtWidgets, QtGui, QtCore -from FlatCAMTool import FlatCAMTool +from AppTool import FlatCAMTool -from flatcamGUI.GUIElements import FCComboBox, RadioSet +from AppGUI.GUIElements import FCComboBox, RadioSet import math @@ -16,7 +16,7 @@ from shapely.geometry import Point from shapely.affinity import translate import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins import logging @@ -29,7 +29,7 @@ log = logging.getLogger('base') class AlignObjects(FlatCAMTool): - toolName = _("Align Objects") + toolName = _("Align AppObjects") def __init__(self, app): FlatCAMTool.__init__(self, app) diff --git a/flatcamTools/ToolCalculators.py b/AppTools/ToolCalculators.py similarity index 99% rename from flatcamTools/ToolCalculators.py rename to AppTools/ToolCalculators.py index 4b1bbbb1..064ec784 100644 --- a/flatcamTools/ToolCalculators.py +++ b/AppTools/ToolCalculators.py @@ -6,12 +6,12 @@ # ########################################################## from PyQt5 import QtWidgets -from FlatCAMTool import FlatCAMTool -from flatcamGUI.GUIElements import FCSpinner, FCDoubleSpinner, FCEntry +from AppTool import FlatCAMTool +from AppGUI.GUIElements import FCSpinner, FCDoubleSpinner, FCEntry import math import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamTools/ToolCalibration.py b/AppTools/ToolCalibration.py similarity index 99% rename from flatcamTools/ToolCalibration.py rename to AppTools/ToolCalibration.py index c1e6b14d..05a51df7 100644 --- a/flatcamTools/ToolCalibration.py +++ b/AppTools/ToolCalibration.py @@ -7,10 +7,10 @@ from PyQt5 import QtWidgets, QtCore, QtGui -from FlatCAMTool import FlatCAMTool -from flatcamGUI.GUIElements import FCDoubleSpinner, EvalEntry, FCCheckBox, OptionalInputSection, FCEntry -from flatcamGUI.GUIElements import FCTable, FCComboBox, RadioSet -from flatcamEditors.FlatCAMTextEditor import TextEditor +from AppTool import FlatCAMTool +from AppGUI.GUIElements import FCDoubleSpinner, EvalEntry, FCCheckBox, OptionalInputSection, FCEntry +from AppGUI.GUIElements import FCTable, FCComboBox, RadioSet +from AppEditors.FlatCAMTextEditor import TextEditor from shapely.geometry import Point from shapely.geometry.base import * @@ -22,7 +22,7 @@ import logging from copy import deepcopy import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') @@ -620,7 +620,7 @@ class ToolCalibration(FlatCAMTool): grid_lay.addWidget(QtWidgets.QLabel(''), 44, 0, 1, 3) # STEP 5 # - step_5 = QtWidgets.QLabel('%s' % _("STEP 5: Calibrate FlatCAM Objects")) + step_5 = QtWidgets.QLabel('%s' % _("STEP 5: Calibrate FlatCAM AppObjects")) step_5.setToolTip( _("Adjust the FlatCAM objects\n" "with the factors determined and verified above.") @@ -656,7 +656,7 @@ class ToolCalibration(FlatCAMTool): grid_lay.addWidget(self.adj_object_label, 48, 0, 1, 3) grid_lay.addWidget(self.adj_object_combo, 49, 0, 1, 3) - # ## Adjust Objects Button + # ## Adjust AppObjects Button self.cal_button = QtWidgets.QPushButton(_("Calibrate")) self.cal_button.setToolTip( _("Adjust (scale and/or skew) the objects\n" diff --git a/flatcamTools/ToolCopperThieving.py b/AppTools/ToolCopperThieving.py similarity index 99% rename from flatcamTools/ToolCopperThieving.py rename to AppTools/ToolCopperThieving.py index 0b43f71a..3a2de2ae 100644 --- a/flatcamTools/ToolCopperThieving.py +++ b/AppTools/ToolCopperThieving.py @@ -7,9 +7,9 @@ from PyQt5 import QtWidgets, QtCore -from FlatCAMCommon import GracefulException as grace -from FlatCAMTool import FlatCAMTool -from flatcamGUI.GUIElements import FCDoubleSpinner, RadioSet, FCEntry, FCComboBox +from Common import GracefulException as grace +from AppTool import FlatCAMTool +from AppGUI.GUIElements import FCDoubleSpinner, RadioSet, FCEntry, FCComboBox import shapely.geometry.base as base from shapely.ops import cascaded_union, unary_union @@ -23,7 +23,7 @@ import numpy as np from collections import Iterable import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') @@ -493,7 +493,7 @@ class ToolCopperThieving(FlatCAMTool): """) self.layout.addWidget(self.reset_button) - # Objects involved in Copper thieving + # AppObjects involved in Copper thieving self.grb_object = None self.ref_obj = None self.sel_rect = [] diff --git a/flatcamTools/ToolCorners.py b/AppTools/ToolCorners.py similarity index 98% rename from flatcamTools/ToolCorners.py rename to AppTools/ToolCorners.py index 4abf1587..add54622 100644 --- a/flatcamTools/ToolCorners.py +++ b/AppTools/ToolCorners.py @@ -7,8 +7,8 @@ from PyQt5 import QtWidgets, QtCore -from FlatCAMTool import FlatCAMTool -from flatcamGUI.GUIElements import FCDoubleSpinner, FCCheckBox, FCComboBox, FCButton +from AppTool import FlatCAMTool +from AppGUI.GUIElements import FCDoubleSpinner, FCCheckBox, FCComboBox, FCButton from shapely.geometry import MultiPolygon, LineString @@ -16,7 +16,7 @@ from copy import deepcopy import logging import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') @@ -182,7 +182,7 @@ class ToolCorners(FlatCAMTool): """) self.layout.addWidget(self.reset_button) - # Objects involved in Copper thieving + # AppObjects involved in Copper thieving self.grb_object = None # store the flattened geometry here: diff --git a/flatcamTools/ToolCutOut.py b/AppTools/ToolCutOut.py similarity index 99% rename from flatcamTools/ToolCutOut.py rename to AppTools/ToolCutOut.py index 67295b90..f401d0da 100644 --- a/flatcamTools/ToolCutOut.py +++ b/AppTools/ToolCutOut.py @@ -6,8 +6,8 @@ # ########################################################## from PyQt5 import QtWidgets, QtGui, QtCore -from FlatCAMTool import FlatCAMTool -from flatcamGUI.GUIElements import FCDoubleSpinner, FCCheckBox, RadioSet, FCComboBox, OptionalInputSection, FCButton +from AppTool import FlatCAMTool +from AppGUI.GUIElements import FCDoubleSpinner, FCCheckBox, RadioSet, FCComboBox, OptionalInputSection, FCButton from shapely.geometry import box, MultiPolygon, Polygon, LineString, LinearRing from shapely.ops import cascaded_union, unary_union @@ -20,7 +20,7 @@ from copy import deepcopy import math import logging import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') @@ -1239,7 +1239,7 @@ class CutOut(FlatCAMTool): # events out of the self.app.collection view (it's about Project Tab) are of type int if type(event) is int: key = event - # events from the GUI are of type QKeyEvent + # events from the AppGUI are of type QKeyEvent elif type(event) == QtGui.QKeyEvent: key = event.key() elif isinstance(event, mpl_key_event): # MatPlotLib key events are trickier to interpret than the rest diff --git a/flatcamTools/ToolDblSided.py b/AppTools/ToolDblSided.py similarity index 99% rename from flatcamTools/ToolDblSided.py rename to AppTools/ToolDblSided.py index 2aed9a3f..aa9beea6 100644 --- a/flatcamTools/ToolDblSided.py +++ b/AppTools/ToolDblSided.py @@ -1,8 +1,8 @@ from PyQt5 import QtWidgets, QtCore -from FlatCAMTool import FlatCAMTool -from flatcamGUI.GUIElements import RadioSet, FCDoubleSpinner, EvalEntry, FCEntry, FCButton, FCComboBox +from AppTool import FlatCAMTool +from AppGUI.GUIElements import RadioSet, FCDoubleSpinner, EvalEntry, FCEntry, FCButton, FCComboBox from numpy import Inf @@ -11,7 +11,7 @@ from shapely import affinity import logging import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') @@ -48,9 +48,9 @@ class DblSidedTool(FlatCAMTool): grid_lay.setColumnStretch(1, 0) self.layout.addLayout(grid_lay) - # Objects to be mirrored + # AppObjects to be mirrored self.m_objects_label = QtWidgets.QLabel("%s:" % _("Mirror Operation")) - self.m_objects_label.setToolTip('%s.' % _("Objects to be mirrored")) + self.m_objects_label.setToolTip('%s.' % _("AppObjects to be mirrored")) grid_lay.addWidget(self.m_objects_label, 0, 0, 1, 2) @@ -154,7 +154,7 @@ class DblSidedTool(FlatCAMTool): grid_lay1.setColumnStretch(1, 1) self.layout.addLayout(grid_lay1) - # Objects to be mirrored + # AppObjects to be mirrored self.param_label = QtWidgets.QLabel("%s:" % _("Mirror Parameters")) self.param_label.setToolTip('%s.' % _("Parameters for the mirror operation")) diff --git a/flatcamTools/ToolDistance.py b/AppTools/ToolDistance.py similarity index 98% rename from flatcamTools/ToolDistance.py rename to AppTools/ToolDistance.py index c64e0c2b..bfdce01a 100644 --- a/flatcamTools/ToolDistance.py +++ b/AppTools/ToolDistance.py @@ -7,15 +7,15 @@ from PyQt5 import QtWidgets, QtCore -from FlatCAMTool import FlatCAMTool -from flatcamGUI.VisPyVisuals import * -from flatcamGUI.GUIElements import FCEntry, FCButton, FCCheckBox +from AppTool import FlatCAMTool +from AppGUI.VisPyVisuals import * +from AppGUI.GUIElements import FCEntry, FCButton, FCCheckBox from shapely.geometry import Point, MultiLineString, Polygon -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate from camlib import FlatCAMRTreeStorage -from flatcamEditors.FlatCAMGeoEditor import DrawToolShape +from AppEditors.FlatCAMGeoEditor import DrawToolShape from copy import copy import math @@ -176,7 +176,7 @@ class Distance(FlatCAMTool): if self.app.is_legacy is False: self.sel_shapes = ShapeCollection(parent=self.app.plotcanvas.view.scene, layers=1) else: - from flatcamGUI.PlotCanvasLegacy import ShapeCollectionLegacy + from AppGUI.PlotCanvasLegacy import ShapeCollectionLegacy self.sel_shapes = ShapeCollectionLegacy(obj=self, app=self.app, name='measurement') self.measure_btn.clicked.connect(self.activate_measure_tool) @@ -211,10 +211,10 @@ class Distance(FlatCAMTool): FlatCAMTool.install(self, icon, separator, shortcut='Ctrl+M', **kwargs) def set_tool_ui(self): - # Remove anything else in the GUI + # Remove anything else in the AppGUI self.app.ui.tool_scroll_area.takeWidget() - # Put ourselves in the GUI + # Put ourselves in the AppGUI self.app.ui.tool_scroll_area.setWidget(self) # Switch notebook to tool page diff --git a/flatcamTools/ToolDistanceMin.py b/AppTools/ToolDistanceMin.py similarity index 97% rename from flatcamTools/ToolDistanceMin.py rename to AppTools/ToolDistanceMin.py index dc4369ea..052f20dc 100644 --- a/flatcamTools/ToolDistanceMin.py +++ b/AppTools/ToolDistanceMin.py @@ -6,9 +6,9 @@ # ########################################################## from PyQt5 import QtWidgets, QtCore -from FlatCAMTool import FlatCAMTool -from flatcamGUI.VisPyVisuals import * -from flatcamGUI.GUIElements import FCEntry +from AppTool import FlatCAMTool +from AppGUI.VisPyVisuals import * +from AppGUI.GUIElements import FCEntry from shapely.ops import nearest_points from shapely.geometry import Point, MultiPolygon @@ -17,7 +17,7 @@ from shapely.ops import cascaded_union import math import logging import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') @@ -158,10 +158,10 @@ class DistanceMin(FlatCAMTool): FlatCAMTool.install(self, icon, separator, shortcut='Shift+M', **kwargs) def set_tool_ui(self): - # Remove anything else in the GUI + # Remove anything else in the AppGUI self.app.ui.tool_scroll_area.takeWidget() - # Put oneself in the GUI + # Put oneself in the AppGUI self.app.ui.tool_scroll_area.setWidget(self) # Switch notebook to tool page @@ -291,7 +291,7 @@ class DistanceMin(FlatCAMTool): ) else: self.app.inform.emit('[WARNING_NOTCL] %s: %s' % - (_("Objects intersects or touch at"), + (_("AppObjects intersects or touch at"), "(%.*f, %.*f)" % (self.decimals, self.h_point[0], self.decimals, self.h_point[1]))) def on_jump_to_half_point(self): diff --git a/flatcamTools/ToolExtractDrills.py b/AppTools/ToolExtractDrills.py similarity index 99% rename from flatcamTools/ToolExtractDrills.py rename to AppTools/ToolExtractDrills.py index 2c127c2b..242a35ce 100644 --- a/flatcamTools/ToolExtractDrills.py +++ b/AppTools/ToolExtractDrills.py @@ -7,14 +7,14 @@ from PyQt5 import QtWidgets, QtCore -from FlatCAMTool import FlatCAMTool -from flatcamGUI.GUIElements import RadioSet, FCDoubleSpinner, FCCheckBox, FCComboBox +from AppTool import FlatCAMTool +from AppGUI.GUIElements import RadioSet, FCDoubleSpinner, FCCheckBox, FCComboBox from shapely.geometry import Point import logging import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamTools/ToolFiducials.py b/AppTools/ToolFiducials.py similarity index 99% rename from flatcamTools/ToolFiducials.py rename to AppTools/ToolFiducials.py index b183914d..906214c9 100644 --- a/flatcamTools/ToolFiducials.py +++ b/AppTools/ToolFiducials.py @@ -7,8 +7,8 @@ from PyQt5 import QtWidgets, QtCore -from FlatCAMTool import FlatCAMTool -from flatcamGUI.GUIElements import FCDoubleSpinner, RadioSet, EvalEntry, FCTable, FCComboBox +from AppTool import FlatCAMTool +from AppGUI.GUIElements import FCDoubleSpinner, RadioSet, EvalEntry, FCTable, FCComboBox from shapely.geometry import Point, Polygon, MultiPolygon, LineString from shapely.geometry import box as box @@ -18,7 +18,7 @@ import logging from copy import deepcopy import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') @@ -327,7 +327,7 @@ class ToolFiducials(FlatCAMTool): """) self.layout.addWidget(self.reset_button) - # Objects involved in Copper thieving + # AppObjects involved in Copper thieving self.grb_object = None self.sm_object = None diff --git a/flatcamTools/ToolFilm.py b/AppTools/ToolFilm.py similarity index 99% rename from flatcamTools/ToolFilm.py rename to AppTools/ToolFilm.py index 0cceb34e..7141d780 100644 --- a/flatcamTools/ToolFilm.py +++ b/AppTools/ToolFilm.py @@ -7,8 +7,8 @@ from PyQt5 import QtGui, QtCore, QtWidgets -from FlatCAMTool import FlatCAMTool -from flatcamGUI.GUIElements import RadioSet, FCDoubleSpinner, FCCheckBox, \ +from AppTool import FlatCAMTool +from AppGUI.GUIElements import RadioSet, FCDoubleSpinner, FCCheckBox, \ OptionalHideInputSection, OptionalInputSection, FCComboBox, FCFileSaveDialog from copy import deepcopy @@ -27,7 +27,7 @@ from lxml import etree as ET from io import StringIO import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamTools/ToolImage.py b/AppTools/ToolImage.py similarity index 98% rename from flatcamTools/ToolImage.py rename to AppTools/ToolImage.py index 6a077a0d..03a0352e 100644 --- a/flatcamTools/ToolImage.py +++ b/AppTools/ToolImage.py @@ -7,11 +7,11 @@ from PyQt5 import QtGui, QtWidgets -from FlatCAMTool import FlatCAMTool -from flatcamGUI.GUIElements import RadioSet, FCComboBox, FCSpinner +from AppTool import FlatCAMTool +from AppGUI.GUIElements import RadioSet, FCComboBox, FCSpinner import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') @@ -293,5 +293,5 @@ class ToolImage(FlatCAMTool): # Register recent file self.app.file_opened.emit("image", filename) - # GUI feedback + # AppGUI feedback self.app.inform.emit('[success] %s: %s' % (_("Opened"), filename)) diff --git a/flatcamTools/ToolInvertGerber.py b/AppTools/ToolInvertGerber.py similarity index 98% rename from flatcamTools/ToolInvertGerber.py rename to AppTools/ToolInvertGerber.py index b1329882..f51175c8 100644 --- a/flatcamTools/ToolInvertGerber.py +++ b/AppTools/ToolInvertGerber.py @@ -7,8 +7,8 @@ from PyQt5 import QtWidgets, QtCore -from FlatCAMTool import FlatCAMTool -from flatcamGUI.GUIElements import FCButton, FCDoubleSpinner, RadioSet, FCComboBox +from AppTool import FlatCAMTool +from AppGUI.GUIElements import FCButton, FCDoubleSpinner, RadioSet, FCComboBox from shapely.geometry import box @@ -16,7 +16,7 @@ from copy import deepcopy import logging import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamTools/ToolMove.py b/AppTools/ToolMove.py similarity index 98% rename from flatcamTools/ToolMove.py rename to AppTools/ToolMove.py index 18d6a6e0..61227ed0 100644 --- a/flatcamTools/ToolMove.py +++ b/AppTools/ToolMove.py @@ -6,13 +6,13 @@ # ########################################################## from PyQt5 import QtWidgets, QtCore -from FlatCAMTool import FlatCAMTool -from flatcamGUI.VisPyVisuals import * +from AppTool import FlatCAMTool +from AppGUI.VisPyVisuals import * from copy import copy import logging import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') @@ -50,7 +50,7 @@ class ToolMove(FlatCAMTool): if self.app.is_legacy is False: self.sel_shapes = ShapeCollection(parent=self.app.plotcanvas.view.scene, layers=1) else: - from flatcamGUI.PlotCanvasLegacy import ShapeCollectionLegacy + from AppGUI.PlotCanvasLegacy import ShapeCollectionLegacy self.sel_shapes = ShapeCollectionLegacy(obj=self, app=self.app, name="move") self.mm = None diff --git a/flatcamTools/ToolNCC.py b/AppTools/ToolNCC.py similarity index 99% rename from flatcamTools/ToolNCC.py rename to AppTools/ToolNCC.py index 5ff643aa..0e268dc1 100644 --- a/flatcamTools/ToolNCC.py +++ b/AppTools/ToolNCC.py @@ -7,12 +7,12 @@ from PyQt5 import QtWidgets, QtCore, QtGui -from FlatCAMTool import FlatCAMTool -from flatcamGUI.GUIElements import FCCheckBox, FCDoubleSpinner, RadioSet, FCTable, FCInputDialog, FCButton,\ +from AppTool import FlatCAMTool +from AppGUI.GUIElements import FCCheckBox, FCDoubleSpinner, RadioSet, FCTable, FCInputDialog, FCButton,\ FCComboBox, OptionalInputSection -from flatcamParsers.ParseGerber import Gerber +from AppParsers.ParseGerber import Gerber -from FlatCAMCommon import GracefulException as grace +from Common import GracefulException as grace from copy import deepcopy @@ -27,7 +27,7 @@ from matplotlib.backend_bases import KeyEvent as mpl_key_event import logging import traceback import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') @@ -620,7 +620,7 @@ class NonCopperClear(FlatCAMTool, Gerber): } """) self.tools_box.addWidget(self.reset_button) - # ############################ FINSIHED GUI ################################### + # ############################ FINSIHED AppGUI ################################### # ############################################################################# # ############################################################################# @@ -825,7 +825,7 @@ class NonCopperClear(FlatCAMTool, Gerber): def form_to_storage(self): if self.tools_table.rowCount() == 0: - # there is no tool in tool table so we can't save the GUI elements values to storage + # there is no tool in tool table so we can't save the AppGUI elements values to storage return self.blockSignals(True) @@ -853,7 +853,7 @@ class NonCopperClear(FlatCAMTool, Gerber): def on_apply_param_to_all_clicked(self): if self.tools_table.rowCount() == 0: - # there is no tool in tool table so we can't save the GUI elements values to storage + # there is no tool in tool table so we can't save the AppGUI elements values to storage log.debug("NonCopperClear.on_apply_param_to_all_clicked() --> no tool in Tools Table, aborting.") return @@ -1860,7 +1860,7 @@ class NonCopperClear(FlatCAMTool, Gerber): # events out of the self.app.collection view (it's about Project Tab) are of type int if type(event) is int: key = event - # events from the GUI are of type QKeyEvent + # events from the AppGUI are of type QKeyEvent elif type(event) == QtGui.QKeyEvent: key = event.key() elif isinstance(event, mpl_key_event): # MatPlotLib key events are trickier to interpret than the rest @@ -2102,7 +2102,7 @@ class NonCopperClear(FlatCAMTool, Gerber): "than isolation tool diameter.")) try: for geo_elem in isolated_geo: - # provide the app with a way to process the GUI events when in a blocking loop + # provide the app with a way to process the AppGUI events when in a blocking loop QtWidgets.QApplication.processEvents() if self.app.abort_flag: @@ -2295,7 +2295,7 @@ class NonCopperClear(FlatCAMTool, Gerber): Usage of the different one is related to when this function is called from a TcL command. - :param run_threaded: If True the method will be run in a threaded way suitable for GUI usage; if False + :param run_threaded: If True the method will be run in a threaded way suitable for AppGUI usage; if False it will run non-threaded for TclShell usage :return: """ @@ -2353,7 +2353,7 @@ class NonCopperClear(FlatCAMTool, Gerber): log.debug("NCC Tool. Normal copper clearing task started.") self.app.inform.emit(_("NCC Tool. Finished non-copper polygons. Normal copper clearing task started.")) - # provide the app with a way to process the GUI events when in a blocking loop + # provide the app with a way to process the AppGUI events when in a blocking loop if not run_threaded: QtWidgets.QApplication.processEvents() @@ -2397,7 +2397,7 @@ class NonCopperClear(FlatCAMTool, Gerber): # graceful abort requested by the user raise grace - # provide the app with a way to process the GUI events when in a blocking loop + # provide the app with a way to process the AppGUI events when in a blocking loop if not run_threaded: QtWidgets.QApplication.processEvents() @@ -2455,7 +2455,7 @@ class NonCopperClear(FlatCAMTool, Gerber): if len(area.geoms) > 0: pol_nr = 0 for p in area.geoms: - # provide the app with a way to process the GUI events when in a blocking loop + # provide the app with a way to process the AppGUI events when in a blocking loop if not run_threaded: QtWidgets.QApplication.processEvents() @@ -2606,7 +2606,7 @@ class NonCopperClear(FlatCAMTool, Gerber): log.debug("NCC Tool. Rest machining copper clearing task started.") app_obj.inform.emit('_(NCC Tool. Rest machining copper clearing task started.') - # provide the app with a way to process the GUI events when in a blocking loop + # provide the app with a way to process the AppGUI events when in a blocking loop if not run_threaded: QtWidgets.QApplication.processEvents() @@ -2648,7 +2648,7 @@ class NonCopperClear(FlatCAMTool, Gerber): # graceful abort requested by the user raise grace - # provide the app with a way to process the GUI events when in a blocking loop + # provide the app with a way to process the AppGUI events when in a blocking loop QtWidgets.QApplication.processEvents() app_obj.inform.emit('[success] %s = %s%s %s' % ( @@ -2690,7 +2690,7 @@ class NonCopperClear(FlatCAMTool, Gerber): # Area to clear for poly in cleared_by_last_tool: - # provide the app with a way to process the GUI events when in a blocking loop + # provide the app with a way to process the AppGUI events when in a blocking loop QtWidgets.QApplication.processEvents() if self.app.abort_flag: @@ -2731,7 +2731,7 @@ class NonCopperClear(FlatCAMTool, Gerber): p = p.buffer(0) if p is not None and p.is_valid: - # provide the app with a way to process the GUI events when in a blocking loop + # provide the app with a way to process the AppGUI events when in a blocking loop QtWidgets.QApplication.processEvents() if isinstance(p, Polygon): @@ -2763,7 +2763,7 @@ class NonCopperClear(FlatCAMTool, Gerber): elif isinstance(p, MultiPolygon): for poly in p: if poly is not None: - # provide the app with a way to process the GUI events when + # provide the app with a way to process the AppGUI events when # in a blocking loop QtWidgets.QApplication.processEvents() @@ -2954,7 +2954,7 @@ class NonCopperClear(FlatCAMTool, Gerber): :param tools_storage: whether to use the current tools_storage self.ncc_tools or a different one. Usage of the different one is related to when this function is called from a TcL command. :param plot: if True after the job is finished the result will be plotted, else it will not. - :param run_threaded: If True the method will be run in a threaded way suitable for GUI usage; if False it will + :param run_threaded: If True the method will be run in a threaded way suitable for AppGUI usage; if False it will run non-threaded for TclShell usage :return: """ @@ -3098,7 +3098,7 @@ class NonCopperClear(FlatCAMTool, Gerber): assert geo_obj.kind == 'geometry', \ "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 + # provide the app with a way to process the AppGUI events when in a blocking loop if not run_threaded: QtWidgets.QApplication.processEvents() @@ -3187,7 +3187,7 @@ class NonCopperClear(FlatCAMTool, Gerber): "than isolation tool diameter.")) try: for geo_elem in isolated_geo: - # provide the app with a way to process the GUI events when in a blocking loop + # provide the app with a way to process the AppGUI events when in a blocking loop QtWidgets.QApplication.processEvents() if self.app.abort_flag: @@ -3295,7 +3295,7 @@ class NonCopperClear(FlatCAMTool, Gerber): # graceful abort requested by the user raise grace - # provide the app with a way to process the GUI events when in a blocking loop + # provide the app with a way to process the AppGUI events when in a blocking loop QtWidgets.QApplication.processEvents() app_obj.inform.emit('[success] %s = %s%s %s' % ( @@ -3329,7 +3329,7 @@ class NonCopperClear(FlatCAMTool, Gerber): if len(area.geoms) > 0: pol_nr = 0 for p in area.geoms: - # provide the app with a way to process the GUI events when in a blocking loop + # provide the app with a way to process the AppGUI events when in a blocking loop QtWidgets.QApplication.processEvents() if self.app.abort_flag: @@ -3502,7 +3502,7 @@ class NonCopperClear(FlatCAMTool, Gerber): log.debug("NCC Tool. Rest machining copper clearing task started.") app_obj.inform.emit('_(NCC Tool. Rest machining copper clearing task started.') - # provide the app with a way to process the GUI events when in a blocking loop + # provide the app with a way to process the AppGUI events when in a blocking loop if not run_threaded: QtWidgets.QApplication.processEvents() @@ -3566,7 +3566,7 @@ class NonCopperClear(FlatCAMTool, Gerber): try: for geo_elem in isolated_geo: - # provide the app with a way to process the GUI events when in a blocking loop + # provide the app with a way to process the AppGUI events when in a blocking loop QtWidgets.QApplication.processEvents() if self.app.abort_flag: @@ -3694,7 +3694,7 @@ class NonCopperClear(FlatCAMTool, Gerber): # Area to clear for poly_r in cleared_by_last_tool: - # provide the app with a way to process the GUI events when in a blocking loop + # provide the app with a way to process the AppGUI events when in a blocking loop QtWidgets.QApplication.processEvents() if self.app.abort_flag: @@ -3735,7 +3735,7 @@ class NonCopperClear(FlatCAMTool, Gerber): p = p.buffer(0) if p is not None and p.is_valid: - # provide the app with a way to process the GUI events when in a blocking loop + # provide the app with a way to process the AppGUI events when in a blocking loop QtWidgets.QApplication.processEvents() if isinstance(p, Polygon): @@ -3764,7 +3764,7 @@ class NonCopperClear(FlatCAMTool, Gerber): elif isinstance(p, MultiPolygon): for poly_p in p: if poly_p is not None: - # provide the app with a way to process the GUI events when + # provide the app with a way to process the AppGUI events when # in a blocking loop QtWidgets.QApplication.processEvents() @@ -3939,7 +3939,7 @@ class NonCopperClear(FlatCAMTool, Gerber): except Exception: try: for el in target: - # provide the app with a way to process the GUI events when in a blocking loop + # provide the app with a way to process the AppGUI events when in a blocking loop QtWidgets.QApplication.processEvents() if self.app.abort_flag: # graceful abort requested by the user diff --git a/flatcamTools/ToolOptimal.py b/AppTools/ToolOptimal.py similarity index 98% rename from flatcamTools/ToolOptimal.py rename to AppTools/ToolOptimal.py index de46045e..a437149b 100644 --- a/flatcamTools/ToolOptimal.py +++ b/AppTools/ToolOptimal.py @@ -7,9 +7,9 @@ from PyQt5 import QtWidgets, QtCore, QtGui -from FlatCAMTool import FlatCAMTool -from flatcamGUI.GUIElements import OptionalHideInputSection, FCTextArea, FCEntry, FCSpinner, FCCheckBox, FCComboBox -from FlatCAMCommon import GracefulException as grace +from AppTool import FlatCAMTool +from AppGUI.GUIElements import OptionalHideInputSection, FCTextArea, FCEntry, FCSpinner, FCCheckBox, FCComboBox +from Common import GracefulException as grace from shapely.geometry import MultiPolygon from shapely.ops import nearest_points @@ -18,7 +18,7 @@ import numpy as np import logging import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') @@ -42,7 +42,7 @@ class ToolOptimal(FlatCAMTool): self.decimals = self.app.decimals # ############################################################################ - # ############################ GUI creation ################################## + # ############################ AppGUI creation ################################## # ## Title title_label = QtWidgets.QLabel("%s" % self.toolName) title_label.setStyleSheet( @@ -248,7 +248,7 @@ class ToolOptimal(FlatCAMTool): self.loc_ois = OptionalHideInputSection(self.locations_cb, [self.locations_textb, self.locate_button]) self.sec_loc_ois = OptionalHideInputSection(self.sec_locations_cb, [self.sec_locations_frame]) - # ################## Finished GUI creation ################################### + # ################## Finished AppGUI creation ################################### # ############################################################################ # this is the line selected in the textbox with the locations of the minimum diff --git a/flatcamTools/ToolPDF.py b/AppTools/ToolPDF.py similarity index 98% rename from flatcamTools/ToolPDF.py rename to AppTools/ToolPDF.py index 1530525a..1bc5a55b 100644 --- a/flatcamTools/ToolPDF.py +++ b/AppTools/ToolPDF.py @@ -7,9 +7,9 @@ from PyQt5 import QtWidgets, QtCore -from FlatCAMTool import FlatCAMTool -from FlatCAMCommon import GracefulException as grace -from flatcamParsers.ParsePDF import PdfParser +from AppTool import FlatCAMTool +from Common import GracefulException as grace +from AppParsers.ParsePDF import PdfParser from shapely.geometry import Point, MultiPolygon from shapely.ops import unary_union @@ -22,7 +22,7 @@ import logging import traceback import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') @@ -211,7 +211,7 @@ class ToolPDF(FlatCAMTool): return # Register recent file self.app.file_opened.emit("excellon", filename) - # GUI feedback + # AppGUI feedback self.app.inform.emit('[success] %s: %s' % (_("Rendered"), outname)) def layer_rendering_as_gerber(self, filename, ap_dict, layer_nr): @@ -284,7 +284,7 @@ class ToolPDF(FlatCAMTool): return # Register recent file self.app.file_opened.emit('gerber', filename) - # GUI feedback + # AppGUI feedback self.app.inform.emit('[success] %s: %s' % (_("Rendered"), outname)) def periodic_check(self, check_period): @@ -351,7 +351,7 @@ class ToolPDF(FlatCAMTool): self.app.worker_task.emit({'fcn': self.layer_rendering_as_gerber, 'params': [filename, ap_dict, layer_nr]}) # delete the object already processed so it will not be processed again for other objects - # that were opened at the same time; like in drag & drop on GUI + # that were opened at the same time; like in drag & drop on AppGUI for obj_name in obj_to_delete: if obj_name in self.pdf_parsed: self.pdf_parsed.pop(obj_name) diff --git a/flatcamTools/ToolPaint.py b/AppTools/ToolPaint.py similarity index 99% rename from flatcamTools/ToolPaint.py rename to AppTools/ToolPaint.py index c06b6666..d377e81d 100644 --- a/flatcamTools/ToolPaint.py +++ b/AppTools/ToolPaint.py @@ -8,13 +8,13 @@ from PyQt5 import QtWidgets, QtGui, QtCore from PyQt5.QtCore import Qt -from FlatCAMTool import FlatCAMTool +from AppTool import FlatCAMTool from copy import deepcopy # from ObjectCollection import * -from flatcamParsers.ParseGerber import Gerber +from AppParsers.ParseGerber import Gerber from camlib import Geometry, FlatCAMRTreeStorage -from flatcamGUI.GUIElements import FCTable, FCDoubleSpinner, FCCheckBox, FCInputDialog, RadioSet, FCButton, FCComboBox -from FlatCAMCommon import GracefulException as grace +from AppGUI.GUIElements import FCTable, FCDoubleSpinner, FCCheckBox, FCInputDialog, RadioSet, FCButton, FCComboBox +from Common import GracefulException as grace from shapely.geometry import base, Polygon, MultiPolygon, LinearRing, Point from shapely.ops import cascaded_union, unary_union, linemerge @@ -28,7 +28,7 @@ import traceback import logging import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') @@ -565,7 +565,7 @@ class ToolPaint(FlatCAMTool, Gerber): """) self.tools_box.addWidget(self.reset_button) - # #################################### FINSIHED GUI ########################### + # #################################### FINSIHED AppGUI ########################### # ############################################################################# # ############################################################################# @@ -790,7 +790,7 @@ class ToolPaint(FlatCAMTool, Gerber): def form_to_storage(self): if self.tools_table.rowCount() == 0: - # there is no tool in tool table so we can't save the GUI elements values to storage + # there is no tool in tool table so we can't save the AppGUI elements values to storage return self.blockSignals(True) @@ -818,7 +818,7 @@ class ToolPaint(FlatCAMTool, Gerber): def on_apply_param_to_all_clicked(self): if self.tools_table.rowCount() == 0: - # there is no tool in tool table so we can't save the GUI elements values to storage + # there is no tool in tool table so we can't save the AppGUI elements values to storage log.debug("NonCopperClear.on_apply_param_to_all_clicked() --> no tool in Tools Table, aborting.") return @@ -1028,7 +1028,7 @@ class ToolPaint(FlatCAMTool, Gerber): "tools_paintrest": self.app.defaults["tools_paintrest"], }) - # ## Init the GUI interface + # ## Init the AppGUI interface self.order_radio.set_value(self.app.defaults["tools_paintorder"]) self.paintmargin_entry.set_value(self.app.defaults["tools_paintmargin"]) self.paintmethod_combo.set_value(self.app.defaults["tools_paintmethod"]) @@ -1758,7 +1758,7 @@ class ToolPaint(FlatCAMTool, Gerber): # events out of the self.app.collection view (it's about Project Tab) are of type int if type(event) is int: key = event - # events from the GUI are of type QKeyEvent + # events from the AppGUI are of type QKeyEvent elif type(event) == QtGui.QKeyEvent: key = event.key() elif isinstance(event, mpl_key_event): # MatPlotLib key events are trickier to interpret than the rest @@ -1928,7 +1928,7 @@ class ToolPaint(FlatCAMTool, Gerber): # process the flashes found in the selected polygon with the 'lines' method for rectangular # flashes and with _("Seed") for oblong and circular flashes - # and pads (flahes) need the contour therefore I override the GUI settings with always True + # and pads (flahes) need the contour therefore I override the AppGUI settings with always True for ap_type in flash_el_dict: for elem in flash_el_dict[ap_type]: if 'solid' in elem: @@ -2206,7 +2206,7 @@ class ToolPaint(FlatCAMTool, Gerber): cp = [] try: for pp in poly_buf: - # provide the app with a way to process the GUI events when in a blocking loop + # provide the app with a way to process the AppGUI events when in a blocking loop QtWidgets.QApplication.processEvents() if self.app.abort_flag: # graceful abort requested by the user @@ -2224,7 +2224,7 @@ class ToolPaint(FlatCAMTool, Gerber): self.app.proc_container.update_view_text(' %d%%' % disp_number) old_disp_number = disp_number except TypeError: - # provide the app with a way to process the GUI events when in a blocking loop + # provide the app with a way to process the AppGUI events when in a blocking loop QtWidgets.QApplication.processEvents() if self.app.abort_flag: # graceful abort requested by the user @@ -2524,7 +2524,7 @@ class ToolPaint(FlatCAMTool, Gerber): cp = [] try: for pp in poly_buf: - # provide the app with a way to process the GUI events when in a blocking loop + # provide the app with a way to process the AppGUI events when in a blocking loop QtWidgets.QApplication.processEvents() if self.app.abort_flag: # graceful abort requested by the user @@ -2549,7 +2549,7 @@ class ToolPaint(FlatCAMTool, Gerber): # log.debug("Polygons cleared: %d. Percentage done: %d%%" % (pol_nr, disp_number)) except TypeError: - # provide the app with a way to process the GUI events when in a blocking loop + # provide the app with a way to process the AppGUI events when in a blocking loop QtWidgets.QApplication.processEvents() if self.app.abort_flag: # graceful abort requested by the user @@ -2712,7 +2712,7 @@ class ToolPaint(FlatCAMTool, Gerber): cp = [] try: for pp in poly_buf: - # provide the app with a way to process the GUI events when in a blocking loop + # provide the app with a way to process the AppGUI events when in a blocking loop QtWidgets.QApplication.processEvents() if self.app.abort_flag: # graceful abort requested by the user @@ -2730,7 +2730,7 @@ class ToolPaint(FlatCAMTool, Gerber): self.app.proc_container.update_view_text(' %d%%' % disp_number) old_disp_number = disp_number except TypeError: - # provide the app with a way to process the GUI events when in a blocking loop + # provide the app with a way to process the AppGUI events when in a blocking loop QtWidgets.QApplication.processEvents() if self.app.abort_flag: # graceful abort requested by the user @@ -3022,7 +3022,7 @@ class ToolPaint(FlatCAMTool, Gerber): try: try: for pp in poly_buf: - # provide the app with a way to process the GUI events when in a blocking loop + # provide the app with a way to process the AppGUI events when in a blocking loop QtWidgets.QApplication.processEvents() if self.app.abort_flag: # graceful abort requested by the user @@ -3047,7 +3047,7 @@ class ToolPaint(FlatCAMTool, Gerber): # log.debug("Polygons cleared: %d. Percentage done: %d%%" % (pol_nr, disp_number)) except TypeError: - # provide the app with a way to process the GUI events when in a blocking loop + # provide the app with a way to process the AppGUI events when in a blocking loop QtWidgets.QApplication.processEvents() if self.app.abort_flag: # graceful abort requested by the user @@ -3200,7 +3200,7 @@ class ToolPaint(FlatCAMTool, Gerber): try: try: for pp in poly_buf: - # provide the app with a way to process the GUI events when in a blocking loop + # provide the app with a way to process the AppGUI events when in a blocking loop QtWidgets.QApplication.processEvents() if self.app.abort_flag: # graceful abort requested by the user @@ -3225,7 +3225,7 @@ class ToolPaint(FlatCAMTool, Gerber): # log.debug("Polygons cleared: %d. Percentage done: %d%%" % (pol_nr, disp_number)) except TypeError: - # provide the app with a way to process the GUI events when in a blocking loop + # provide the app with a way to process the AppGUI events when in a blocking loop QtWidgets.QApplication.processEvents() if self.app.abort_flag: # graceful abort requested by the user diff --git a/flatcamTools/ToolPanelize.py b/AppTools/ToolPanelize.py similarity index 99% rename from flatcamTools/ToolPanelize.py rename to AppTools/ToolPanelize.py index ed9ded7a..ad790601 100644 --- a/flatcamTools/ToolPanelize.py +++ b/AppTools/ToolPanelize.py @@ -6,10 +6,10 @@ # ########################################################## from PyQt5 import QtWidgets, QtGui, QtCore -from FlatCAMTool import FlatCAMTool +from AppTool import FlatCAMTool -from flatcamGUI.GUIElements import FCSpinner, FCDoubleSpinner, RadioSet, FCCheckBox, OptionalInputSection, FCComboBox -from FlatCAMCommon import GracefulException as grace +from AppGUI.GUIElements import FCSpinner, FCDoubleSpinner, RadioSet, FCCheckBox, OptionalInputSection, FCComboBox +from Common import GracefulException as grace from copy import deepcopy import numpy as np @@ -18,7 +18,7 @@ from shapely.ops import unary_union from shapely.geometry import LineString import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins import logging diff --git a/flatcamTools/ToolPcbWizard.py b/AppTools/ToolPcbWizard.py similarity index 99% rename from flatcamTools/ToolPcbWizard.py rename to AppTools/ToolPcbWizard.py index 47d3a196..030bbfe7 100644 --- a/flatcamTools/ToolPcbWizard.py +++ b/AppTools/ToolPcbWizard.py @@ -7,8 +7,8 @@ from PyQt5 import QtWidgets, QtCore -from FlatCAMTool import FlatCAMTool -from flatcamGUI.GUIElements import RadioSet, FCSpinner, FCButton, FCTable +from AppTool import FlatCAMTool +from AppGUI.GUIElements import RadioSet, FCSpinner, FCButton, FCTable import re import os @@ -16,7 +16,7 @@ from datetime import datetime from io import StringIO import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') @@ -460,7 +460,7 @@ class PcbWizard(FlatCAMTool): # Register recent file self.app.file_opened.emit("excellon", name) - # GUI feedback + # AppGUI feedback self.app.inform.emit('[success] %s: %s' % (_("Imported"), name)) self.app.ui.notebook.setCurrentWidget(self.app.ui.project_tab) else: diff --git a/flatcamTools/ToolProperties.py b/AppTools/ToolProperties.py similarity index 99% rename from flatcamTools/ToolProperties.py rename to AppTools/ToolProperties.py index e1cc1c25..f66e8b11 100644 --- a/flatcamTools/ToolProperties.py +++ b/AppTools/ToolProperties.py @@ -6,8 +6,8 @@ # ########################################################## from PyQt5 import QtGui, QtCore, QtWidgets -from FlatCAMTool import FlatCAMTool -from flatcamGUI.GUIElements import FCTree +from AppTool import FlatCAMTool +from AppGUI.GUIElements import FCTree from shapely.geometry import MultiPolygon, Polygon from shapely.ops import cascaded_union @@ -17,7 +17,7 @@ import math import logging import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamTools/ToolPunchGerber.py b/AppTools/ToolPunchGerber.py similarity index 99% rename from flatcamTools/ToolPunchGerber.py rename to AppTools/ToolPunchGerber.py index f0c6a9e3..2ec20d6d 100644 --- a/flatcamTools/ToolPunchGerber.py +++ b/AppTools/ToolPunchGerber.py @@ -7,15 +7,15 @@ from PyQt5 import QtCore, QtWidgets -from FlatCAMTool import FlatCAMTool -from flatcamGUI.GUIElements import RadioSet, FCDoubleSpinner, FCCheckBox, FCComboBox +from AppTool import FlatCAMTool +from AppGUI.GUIElements import RadioSet, FCDoubleSpinner, FCCheckBox, FCComboBox from copy import deepcopy import logging from shapely.geometry import MultiPolygon, Point import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamTools/ToolQRCode.py b/AppTools/ToolQRCode.py similarity index 99% rename from flatcamTools/ToolQRCode.py rename to AppTools/ToolQRCode.py index 8d54fedd..601b81c6 100644 --- a/flatcamTools/ToolQRCode.py +++ b/AppTools/ToolQRCode.py @@ -8,9 +8,9 @@ from PyQt5 import QtWidgets, QtCore, QtGui from PyQt5.QtCore import Qt -from FlatCAMTool import FlatCAMTool -from flatcamGUI.GUIElements import RadioSet, FCTextArea, FCSpinner, FCEntry, FCCheckBox, FCComboBox, FCFileSaveDialog -from flatcamParsers.ParseSVG import * +from AppTool import FlatCAMTool +from AppGUI.GUIElements import RadioSet, FCTextArea, FCSpinner, FCEntry, FCCheckBox, FCComboBox, FCFileSaveDialog +from AppParsers.ParseSVG import * from shapely.geometry.base import * from shapely.ops import unary_union @@ -28,7 +28,7 @@ import qrcode.image.pil from lxml import etree as ET import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamTools/ToolRulesCheck.py b/AppTools/ToolRulesCheck.py similarity index 99% rename from flatcamTools/ToolRulesCheck.py rename to AppTools/ToolRulesCheck.py index fe07b683..ed090d36 100644 --- a/flatcamTools/ToolRulesCheck.py +++ b/AppTools/ToolRulesCheck.py @@ -7,18 +7,18 @@ from PyQt5 import QtWidgets -from FlatCAMTool import FlatCAMTool -from flatcamGUI.GUIElements import FCDoubleSpinner, FCCheckBox, OptionalInputSection, FCComboBox +from AppTool import FlatCAMTool +from AppGUI.GUIElements import FCDoubleSpinner, FCCheckBox, OptionalInputSection, FCComboBox from copy import deepcopy -from FlatCAMPool import * +from AppPool import * # from os import getpid from shapely.ops import nearest_points from shapely.geometry import MultiPolygon, Polygon import logging import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') @@ -196,7 +196,7 @@ class RulesCheck(FlatCAMTool): self.grid_layout.addWidget(QtWidgets.QLabel(""), 8, 0, 1, 3) - self.excellon_title_lbl = QtWidgets.QLabel('%s:' % _("Excellon Objects")) + self.excellon_title_lbl = QtWidgets.QLabel('%s:' % _("Excellon AppObjects")) self.excellon_title_lbl.setToolTip( _("Excellon objects for which to check rules.") ) diff --git a/flatcamTools/ToolShell.py b/AppTools/ToolShell.py similarity index 98% rename from flatcamTools/ToolShell.py rename to AppTools/ToolShell.py index f68a9da4..d06113f7 100644 --- a/flatcamTools/ToolShell.py +++ b/AppTools/ToolShell.py @@ -10,7 +10,7 @@ from PyQt5.QtCore import Qt from PyQt5.QtGui import QTextCursor from PyQt5.QtWidgets import QVBoxLayout, QWidget -from flatcamGUI.GUIElements import _BrowserTextEdit, _ExpandableTextEdit +from AppGUI.GUIElements import _BrowserTextEdit, _ExpandableTextEdit import html import sys import traceback @@ -19,7 +19,7 @@ import tkinter as tk import tclCommands import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') @@ -257,7 +257,7 @@ class TermWidget(QWidget): class FCShell(TermWidget): def __init__(self, app, version, *args): """ - Initialize the TCL Shell. A dock widget that holds the GUI interface to the FlatCAM command line. + Initialize the TCL Shell. A dock widget that holds the AppGUI interface to the FlatCAM command line. :param app: When instantiated the sysShell will be actually the FlatCAMApp.App() class :param version: FlatCAM version string diff --git a/flatcamTools/ToolSolderPaste.py b/AppTools/ToolSolderPaste.py similarity index 99% rename from flatcamTools/ToolSolderPaste.py rename to AppTools/ToolSolderPaste.py index 93cb4744..7831fd1e 100644 --- a/flatcamTools/ToolSolderPaste.py +++ b/AppTools/ToolSolderPaste.py @@ -5,13 +5,13 @@ # MIT Licence # # ########################################################## -from FlatCAMTool import FlatCAMTool -from FlatCAMCommon import LoudDict -from flatcamGUI.GUIElements import FCComboBox, FCEntry, FCTable, \ +from AppTool import FlatCAMTool +from Common import LoudDict +from AppGUI.GUIElements import FCComboBox, FCEntry, FCTable, \ FCInputDialog, FCDoubleSpinner, FCSpinner, FCFileSaveDialog -from FlatCAMApp import log +from App import log from camlib import distance -from flatcamEditors.FlatCAMTextEditor import TextEditor +from AppEditors.FlatCAMTextEditor import TextEditor from PyQt5 import QtGui, QtCore, QtWidgets from PyQt5.QtCore import Qt @@ -25,7 +25,7 @@ import traceback from io import StringIO import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/flatcamTools/ToolSub.py b/AppTools/ToolSub.py similarity index 99% rename from flatcamTools/ToolSub.py rename to AppTools/ToolSub.py index 5409fa76..e4938aa0 100644 --- a/flatcamTools/ToolSub.py +++ b/AppTools/ToolSub.py @@ -7,8 +7,8 @@ from PyQt5 import QtWidgets, QtCore -from FlatCAMTool import FlatCAMTool -from flatcamGUI.GUIElements import FCCheckBox, FCButton, FCComboBox +from AppTool import FlatCAMTool +from AppGUI.GUIElements import FCCheckBox, FCButton, FCComboBox from shapely.geometry import Polygon, MultiPolygon, MultiLineString, LineString from shapely.ops import cascaded_union @@ -18,7 +18,7 @@ from copy import deepcopy import time import logging import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') @@ -62,7 +62,7 @@ class ToolSub(FlatCAMTool): form_layout = QtWidgets.QFormLayout() self.tools_box.addLayout(form_layout) - self.gerber_title = QtWidgets.QLabel("%s" % _("Gerber Objects")) + self.gerber_title = QtWidgets.QLabel("%s" % _("Gerber AppObjects")) form_layout.addRow(self.gerber_title) # Target Gerber Object @@ -117,7 +117,7 @@ class ToolSub(FlatCAMTool): form_geo_layout = QtWidgets.QFormLayout() self.tools_box.addLayout(form_geo_layout) - self.geo_title = QtWidgets.QLabel("%s" % _("Geometry Objects")) + self.geo_title = QtWidgets.QLabel("%s" % _("Geometry AppObjects")) form_geo_layout.addRow(self.geo_title) # Target Geometry Object @@ -462,7 +462,7 @@ class ToolSub(FlatCAMTool): _('Generating new object failed.')) return - # GUI feedback + # AppGUI feedback self.app.inform.emit('[success] %s: %s' % (_("Created"), outname)) @@ -666,7 +666,7 @@ class ToolSub(FlatCAMTool): return # Register recent file self.app.file_opened.emit('geometry', outname) - # GUI feedback + # AppGUI feedback self.app.inform.emit('[success] %s: %s' % (_("Created"), outname)) diff --git a/flatcamTools/ToolTransform.py b/AppTools/ToolTransform.py similarity index 99% rename from flatcamTools/ToolTransform.py rename to AppTools/ToolTransform.py index 25a9b5f6..b89afffe 100644 --- a/flatcamTools/ToolTransform.py +++ b/AppTools/ToolTransform.py @@ -6,11 +6,11 @@ # ########################################################## from PyQt5 import QtWidgets -from FlatCAMTool import FlatCAMTool -from flatcamGUI.GUIElements import FCDoubleSpinner, FCCheckBox, FCButton, OptionalInputSection, FCEntry +from AppTool import FlatCAMTool +from AppGUI.GUIElements import FCDoubleSpinner, FCCheckBox, FCButton, OptionalInputSection, FCEntry import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/AppTools/__init__.py b/AppTools/__init__.py new file mode 100644 index 00000000..7a4ef9ca --- /dev/null +++ b/AppTools/__init__.py @@ -0,0 +1,43 @@ + +from AppTools.ToolCalculators import ToolCalculator +from AppTools.ToolCalibration import ToolCalibration +from AppTools.ToolCutOut import CutOut + +from AppTools.ToolDblSided import DblSidedTool +from AppTools.ToolExtractDrills import ToolExtractDrills +from AppTools.ToolAlignObjects import AlignObjects + +from AppTools.ToolFilm import Film + +from AppTools.ToolImage import ToolImage + +from AppTools.ToolDistance import Distance +from AppTools.ToolDistanceMin import DistanceMin + +from AppTools.ToolMove import ToolMove + +from AppTools.ToolNCC import NonCopperClear +from AppTools.ToolPaint import ToolPaint + +from AppTools.ToolOptimal import ToolOptimal + +from AppTools.ToolPanelize import Panelize +from AppTools.ToolPcbWizard import PcbWizard +from AppTools.ToolPDF import ToolPDF +from AppTools.ToolProperties import Properties + +from AppTools.ToolQRCode import QRCode +from AppTools.ToolRulesCheck import RulesCheck + +from AppTools.ToolCopperThieving import ToolCopperThieving +from AppTools.ToolFiducials import ToolFiducials + +from AppTools.ToolShell import FCShell +from AppTools.ToolSolderPaste import SolderPaste +from AppTools.ToolSub import ToolSub + +from AppTools.ToolTransform import ToolTransform +from AppTools.ToolPunchGerber import ToolPunchGerber + +from AppTools.ToolInvertGerber import ToolInvertGerber +from AppTools.ToolCorners import ToolCorners diff --git a/FlatCAMTranslation.py b/AppTranslation.py similarity index 100% rename from FlatCAMTranslation.py rename to AppTranslation.py diff --git a/FlatCAMWorker.py b/AppWorker.py similarity index 100% rename from FlatCAMWorker.py rename to AppWorker.py diff --git a/FlatCAMWorkerStack.py b/AppWorkerStack.py similarity index 97% rename from FlatCAMWorkerStack.py rename to AppWorkerStack.py index 3ce56011..fc8cd6d2 100644 --- a/FlatCAMWorkerStack.py +++ b/AppWorkerStack.py @@ -1,5 +1,5 @@ from PyQt5 import QtCore -from FlatCAMWorker import Worker +from AppWorker import Worker import multiprocessing diff --git a/FlatCAMBookmark.py b/Bookmark.py similarity index 99% rename from FlatCAMBookmark.py rename to Bookmark.py index b9884fe2..615d4e00 100644 --- a/FlatCAMBookmark.py +++ b/Bookmark.py @@ -1,5 +1,5 @@ from PyQt5 import QtGui, QtCore, QtWidgets -from flatcamGUI.GUIElements import FCTable, FCEntry, FCButton, FCFileSaveDialog +from AppGUI.GUIElements import FCTable, FCEntry, FCButton, FCFileSaveDialog import sys import webbrowser @@ -7,7 +7,7 @@ import webbrowser from copy import deepcopy from datetime import datetime import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/CHANGELOG.md b/CHANGELOG.md index 69ae19f5..384d73fc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ CHANGELOG for FlatCAM beta - modified the GUI for Film and Panelize Tools - moved some of the GUI related methods from FlatCAMApp.App to the flatcamGUI.FlatCAMGUI class - moved Shortcuts Tab creation in it's own class +- renamed classes to have shorter names and grouped 17.05.2020 diff --git a/FlatCAMCommon.py b/Common.py similarity index 99% rename from FlatCAMCommon.py rename to Common.py index f7bfae9e..d51a8b0e 100644 --- a/FlatCAMCommon.py +++ b/Common.py @@ -14,13 +14,13 @@ from PyQt5 import QtCore from shapely.geometry import Polygon, MultiPolygon -from flatcamGUI.VisPyVisuals import ShapeCollection -from FlatCAMTool import FlatCAMTool +from AppGUI.VisPyVisuals import ShapeCollection +from AppTool import FlatCAMTool import numpy as np import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') @@ -146,7 +146,7 @@ class ExclusionAreas(QtCore.QObject): except AttributeError: self.exclusion_shapes = None else: - from flatcamGUI.PlotCanvasLegacy import ShapeCollectionLegacy + from AppGUI.PlotCanvasLegacy import ShapeCollectionLegacy self.exclusion_shapes = ShapeCollectionLegacy(obj=self, app=self.app, name="exclusion") # Event signals disconnect id holders diff --git a/FlatCAM.py b/FlatCAM.py index 3875f0f3..68cda751 100644 --- a/FlatCAM.py +++ b/FlatCAM.py @@ -3,8 +3,8 @@ import os from PyQt5 import QtWidgets from PyQt5.QtCore import QSettings, Qt -from FlatCAMApp import App -from flatcamGUI import VisPyPatches +from App import App +from AppGUI import VisPyPatches from multiprocessing import freeze_support # import copyreg @@ -31,7 +31,7 @@ def debug_trace(): if __name__ == '__main__': # All X11 calling should be thread safe otherwise we have strange issues # QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_X11InitThreads) - # NOTE: Never talk to the GUI from threads! This is why I commented the above. + # NOTE: Never talk to the AppGUI from threads! This is why I commented the above. freeze_support() major_v = sys.version_info.major diff --git a/camlib.py b/camlib.py index 613d6590..e25cb001 100644 --- a/camlib.py +++ b/camlib.py @@ -46,14 +46,14 @@ import rasterio from rasterio.features import shapes import ezdxf -from FlatCAMCommon import GracefulException as grace +from Common import GracefulException as grace # TODO: Commented for FlatCAM packaging with cx_freeze # from scipy.spatial import KDTree, Delaunay # from scipy.spatial import Delaunay -from flatcamParsers.ParseSVG import * -from flatcamParsers.ParseDXF import * +from AppParsers.ParseSVG import * +from AppParsers.ParseDXF import * if platform.architecture()[0] == '64bit': from ortools.constraint_solver import pywrapcp @@ -62,7 +62,7 @@ if platform.architecture()[0] == '64bit': import logging import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') @@ -502,7 +502,7 @@ class Geometry(object): if self.app.is_legacy is False: self.temp_shapes = self.app.plotcanvas.new_shape_group() else: - from flatcamGUI.PlotCanvasLegacy import ShapeCollectionLegacy + from AppGUI.PlotCanvasLegacy import ShapeCollectionLegacy self.temp_shapes = ShapeCollectionLegacy(obj=self, app=self.app, name='camlib.geometry') def plot_temp_shapes(self, element, color='red'): @@ -1267,7 +1267,7 @@ class Geometry(object): # graceful abort requested by the user raise grace - # provide the app with a way to process the GUI events when in a blocking loop + # provide the app with a way to process the AppGUI events when in a blocking loop QtWidgets.QApplication.processEvents() # Can only result in a Polygon or MultiPolygon @@ -1359,7 +1359,7 @@ class Geometry(object): # graceful abort requested by the user raise grace - # provide the app with a way to process the GUI events when in a blocking loop + # provide the app with a way to process the AppGUI events when in a blocking loop QtWidgets.QApplication.processEvents() path = Point(seedpoint).buffer(radius, int(steps_per_circle)).exterior @@ -1473,7 +1473,7 @@ class Geometry(object): # graceful abort requested by the user raise grace - # provide the app with a way to process the GUI events when in a blocking loop + # provide the app with a way to process the AppGUI events when in a blocking loop QtWidgets.QApplication.processEvents() line = LineString([(left, y), (right, y)]) @@ -1510,7 +1510,7 @@ class Geometry(object): # graceful abort requested by the user raise grace - # provide the app with a way to process the GUI events when in a blocking loop + # provide the app with a way to process the AppGUI events when in a blocking loop QtWidgets.QApplication.processEvents() line = LineString([(x, top), (x, bot)]) @@ -1641,7 +1641,7 @@ class Geometry(object): # graceful abort requested by the user raise grace - # provide the app with a way to process the GUI events when in a blocking loop + # provide the app with a way to process the AppGUI events when in a blocking loop QtWidgets.QApplication.processEvents() new_line = line.parallel_offset(distance=delta, side='left', resolution=int(steps_per_circle)) @@ -3016,7 +3016,7 @@ class CNCjob(Geometry): ) # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - # APPLY Offset only when using the GUI, for TclCommand this will create an error + # APPLY Offset only when using the AppGUI, for TclCommand this will create an error # because the values for Z offset are created in build_ui() # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! try: @@ -3235,7 +3235,7 @@ class CNCjob(Geometry): ) # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - # APPLY Offset only when using the GUI, for TclCommand this will create an error + # APPLY Offset only when using the AppGUI, for TclCommand this will create an error # because the values for Z offset are created in build_ui() # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! try: @@ -3399,7 +3399,7 @@ class CNCjob(Geometry): ) # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - # APPLY Offset only when using the GUI, for TclCommand this will create an error + # APPLY Offset only when using the AppGUI, for TclCommand this will create an error # because the values for Z offset are created in build_ui() # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! try: @@ -6418,7 +6418,7 @@ def distance_euclidian(x1, y1, x2, y2): class FlatCAMRTree(object): """ Indexes geometry (Any object with "cooords" property containing - a list of tuples with x, y values). Objects are indexed by + a list of tuples with x, y values). AppObjects are indexed by all their points by default. To index by arbitrary points, override self.points2obj. """ diff --git a/defaults.py b/defaults.py index d8bd7186..5c602258 100644 --- a/defaults.py +++ b/defaults.py @@ -2,16 +2,16 @@ import os import stat import sys from copy import deepcopy -from FlatCAMCommon import LoudDict +from Common import LoudDict from camlib import to_dict, CNCjob, Geometry import simplejson import logging import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins -from flatcamParsers.ParseExcellon import Excellon -from flatcamParsers.ParseGerber import Gerber +from AppParsers.ParseExcellon import Excellon +from AppParsers.ParseGerber import Gerber fcTranslate.apply_language('strings') if '_' not in builtins.__dict__: @@ -64,7 +64,7 @@ class FlatCAMDefaults: "global_machinist_setting": False, - # Global GUI Preferences + # Global AppGUI Preferences "global_gridx": 1.0, "global_gridy": 1.0, "global_snap_max": 0.05, @@ -125,7 +125,7 @@ class FlatCAMDefaults: "global_tcl_path": '', - # General GUI Settings + # General AppGUI Settings "global_theme": 'white', "global_gray_icons": False, "global_hover": False, @@ -636,7 +636,7 @@ class FlatCAMDefaults: "tools_punch_rectangular": False, "tools_punch_others": False, - # Align Objects Tool + # Align AppObjects Tool "tools_align_objects_align_type": 'sp', # Invert Gerber Tool diff --git a/flatcamTools/__init__.py b/flatcamTools/__init__.py deleted file mode 100644 index 184a7f43..00000000 --- a/flatcamTools/__init__.py +++ /dev/null @@ -1,43 +0,0 @@ - -from flatcamTools.ToolCalculators import ToolCalculator -from flatcamTools.ToolCalibration import ToolCalibration -from flatcamTools.ToolCutOut import CutOut - -from flatcamTools.ToolDblSided import DblSidedTool -from flatcamTools.ToolExtractDrills import ToolExtractDrills -from flatcamTools.ToolAlignObjects import AlignObjects - -from flatcamTools.ToolFilm import Film - -from flatcamTools.ToolImage import ToolImage - -from flatcamTools.ToolDistance import Distance -from flatcamTools.ToolDistanceMin import DistanceMin - -from flatcamTools.ToolMove import ToolMove - -from flatcamTools.ToolNCC import NonCopperClear -from flatcamTools.ToolPaint import ToolPaint - -from flatcamTools.ToolOptimal import ToolOptimal - -from flatcamTools.ToolPanelize import Panelize -from flatcamTools.ToolPcbWizard import PcbWizard -from flatcamTools.ToolPDF import ToolPDF -from flatcamTools.ToolProperties import Properties - -from flatcamTools.ToolQRCode import QRCode -from flatcamTools.ToolRulesCheck import RulesCheck - -from flatcamTools.ToolCopperThieving import ToolCopperThieving -from flatcamTools.ToolFiducials import ToolFiducials - -from flatcamTools.ToolShell import FCShell -from flatcamTools.ToolSolderPaste import SolderPaste -from flatcamTools.ToolSub import ToolSub - -from flatcamTools.ToolTransform import ToolTransform -from flatcamTools.ToolPunchGerber import ToolPunchGerber - -from flatcamTools.ToolInvertGerber import ToolInvertGerber -from flatcamTools.ToolCorners import ToolCorners diff --git a/make_freezed.py b/make_freezed.py index 43c144a5..170fc7a7 100644 --- a/make_freezed.py +++ b/make_freezed.py @@ -63,7 +63,7 @@ include_files.append(("assets/examples", "lib/assets/examples")) include_files.append(("assets/linux", "lib/assets/linux")) include_files.append(("assets/resources", "lib/assets/resources")) # include_files.append(("share", "lib/share")) -include_files.append(("flatcamGUI/VisPyData", "lib/vispy")) +include_files.append(("AppGUI/VisPyData", "lib/vispy")) include_files.append(("config", "lib/config")) include_files.append(("README.md", "README.md")) diff --git a/preprocessors/Berta_CNC.py b/preprocessors/Berta_CNC.py index 8239d0e9..2b2cc5c1 100644 --- a/preprocessors/Berta_CNC.py +++ b/preprocessors/Berta_CNC.py @@ -10,7 +10,7 @@ # MIT Licence # ############################################################## -from FlatCAMPostProc import * +from AppPreProcessor import * class Berta_CNC(FlatCAMPostProc): @@ -102,7 +102,7 @@ class Berta_CNC(FlatCAMPostProc): gcode += '(Spindle Speed: %s RPM)\n' % str(p['spindlespeed']) gcode += ( - # This line allow you to sets the machine to METRIC / INCH in the GUI + # This line allow you to sets the machine to METRIC / INCH in the AppGUI 'G20\n' if p.units.upper() == 'IN' else 'G21\n') + '\n' # gcode += 'G21\n' # This line sets the machine to METRIC ONLY # gcode += 'G20\n' # This line sets the machine to INCH ONLY diff --git a/preprocessors/GRBL_laser.py b/preprocessors/GRBL_laser.py index 9caf4f39..7f1c025a 100644 --- a/preprocessors/GRBL_laser.py +++ b/preprocessors/GRBL_laser.py @@ -6,7 +6,7 @@ # MIT Licence # # ########################################################## -from FlatCAMPostProc import * +from AppPreProcessor import * # This post processor is configured to output code that # is compatible with almost any version of Grbl. diff --git a/preprocessors/ISEL_CNC.py b/preprocessors/ISEL_CNC.py index 8c7c9ed0..3a92c9f8 100644 --- a/preprocessors/ISEL_CNC.py +++ b/preprocessors/ISEL_CNC.py @@ -6,7 +6,7 @@ # MIT Licence # # ########################################################## -from FlatCAMPostProc import * +from AppPreProcessor import * class ISEL_CNC(FlatCAMPostProc): diff --git a/preprocessors/ISEL_ICP_CNC.py b/preprocessors/ISEL_ICP_CNC.py index a6a137f8..d8f59acd 100644 --- a/preprocessors/ISEL_ICP_CNC.py +++ b/preprocessors/ISEL_ICP_CNC.py @@ -6,7 +6,7 @@ # MIT Licence # # ########################################################## -from FlatCAMPostProc import * +from AppPreProcessor import * class ISEL_ICP_CNC(FlatCAMPostProc): diff --git a/preprocessors/Marlin.py b/preprocessors/Marlin.py index d53a257f..539d27d8 100644 --- a/preprocessors/Marlin.py +++ b/preprocessors/Marlin.py @@ -6,7 +6,7 @@ # MIT Licence # # ########################################################## -from FlatCAMPostProc import * +from AppPreProcessor import * class Marlin(FlatCAMPostProc): diff --git a/preprocessors/Marlin_laser_FAN_pin.py b/preprocessors/Marlin_laser_FAN_pin.py index 2d06d23d..fc9e5557 100644 --- a/preprocessors/Marlin_laser_FAN_pin.py +++ b/preprocessors/Marlin_laser_FAN_pin.py @@ -6,7 +6,7 @@ # License: MIT Licence # # ########################################################## -from FlatCAMPostProc import * +from AppPreProcessor import * class Marlin_laser_FAN_pin(FlatCAMPostProc): diff --git a/preprocessors/Marlin_laser_Spindle_pin.py b/preprocessors/Marlin_laser_Spindle_pin.py index 151e9dc4..5721a1c0 100644 --- a/preprocessors/Marlin_laser_Spindle_pin.py +++ b/preprocessors/Marlin_laser_Spindle_pin.py @@ -6,7 +6,7 @@ # License: MIT Licence # # ########################################################## -from FlatCAMPostProc import * +from AppPreProcessor import * class Marlin_laser_Spindle_pin(FlatCAMPostProc): diff --git a/preprocessors/Paste_1.py b/preprocessors/Paste_1.py index cbb0b19f..b08b1473 100644 --- a/preprocessors/Paste_1.py +++ b/preprocessors/Paste_1.py @@ -6,7 +6,7 @@ # MIT Licence # # ########################################################## -from FlatCAMPostProc import * +from AppPreProcessor import * class Paste_1(FlatCAMPostProc_Tools): diff --git a/preprocessors/Repetier.py b/preprocessors/Repetier.py index bb17f9ee..74e70773 100644 --- a/preprocessors/Repetier.py +++ b/preprocessors/Repetier.py @@ -6,7 +6,7 @@ # MIT Licence # # ########################################################## -from FlatCAMPostProc import * +from AppPreProcessor import * class Repetier(FlatCAMPostProc): diff --git a/preprocessors/Roland_MDX_20.py b/preprocessors/Roland_MDX_20.py index 49b65b92..26c3662c 100644 --- a/preprocessors/Roland_MDX_20.py +++ b/preprocessors/Roland_MDX_20.py @@ -6,7 +6,7 @@ # MIT Licence # # ########################################################## -from FlatCAMPostProc import * +from AppPreProcessor import * # for Roland Preprocessors it is mandatory for the preprocessor name (python file and class name, both of them must be diff --git a/preprocessors/Toolchange_Custom.py b/preprocessors/Toolchange_Custom.py index 1c2eeffc..88de5435 100644 --- a/preprocessors/Toolchange_Custom.py +++ b/preprocessors/Toolchange_Custom.py @@ -6,7 +6,7 @@ # MIT Licence # # ########################################################## -from FlatCAMPostProc import * +from AppPreProcessor import * class Toolchange_Custom(FlatCAMPostProc): diff --git a/preprocessors/Toolchange_Manual.py b/preprocessors/Toolchange_Manual.py index 27aaec22..c113bbfc 100644 --- a/preprocessors/Toolchange_Manual.py +++ b/preprocessors/Toolchange_Manual.py @@ -6,7 +6,7 @@ # MIT Licence # # ########################################################## -from FlatCAMPostProc import * +from AppPreProcessor import * class Toolchange_Manual(FlatCAMPostProc): diff --git a/preprocessors/Toolchange_Probe_MACH3.py b/preprocessors/Toolchange_Probe_MACH3.py index f5f8c9c3..818327d2 100644 --- a/preprocessors/Toolchange_Probe_MACH3.py +++ b/preprocessors/Toolchange_Probe_MACH3.py @@ -6,7 +6,7 @@ # MIT Licence # # ########################################################## -from FlatCAMPostProc import * +from AppPreProcessor import * class Toolchange_Probe_MACH3(FlatCAMPostProc): diff --git a/preprocessors/default.py b/preprocessors/default.py index 7c5cf1c6..87d0c56c 100644 --- a/preprocessors/default.py +++ b/preprocessors/default.py @@ -6,7 +6,7 @@ # MIT Licence # # ########################################################## -from FlatCAMPostProc import * +from AppPreProcessor import * class default(FlatCAMPostProc): diff --git a/preprocessors/grbl_11.py b/preprocessors/grbl_11.py index b002b2b2..75bb8556 100644 --- a/preprocessors/grbl_11.py +++ b/preprocessors/grbl_11.py @@ -6,7 +6,7 @@ # MIT Licence # # ########################################################## -from FlatCAMPostProc import * +from AppPreProcessor import * class grbl_11(FlatCAMPostProc): diff --git a/preprocessors/hpgl.py b/preprocessors/hpgl.py index 8e8acde3..61ffc0c6 100644 --- a/preprocessors/hpgl.py +++ b/preprocessors/hpgl.py @@ -6,7 +6,7 @@ # MIT Licence # # ########################################################## -from FlatCAMPostProc import * +from AppPreProcessor import * # for Roland Preprocessors it is mandatory for the preprocessor name (python file and class name, both of them must be diff --git a/preprocessors/line_xyz.py b/preprocessors/line_xyz.py index 900d7fab..6beb432c 100644 --- a/preprocessors/line_xyz.py +++ b/preprocessors/line_xyz.py @@ -6,7 +6,7 @@ # MIT Licence # # ########################################################## -from FlatCAMPostProc import * +from AppPreProcessor import * class line_xyz(FlatCAMPostProc): diff --git a/tclCommands/TclCommand.py b/tclCommands/TclCommand.py index ed2d0260..d89eb0c4 100644 --- a/tclCommands/TclCommand.py +++ b/tclCommands/TclCommand.py @@ -1,6 +1,6 @@ import sys import re -import FlatCAMApp +import App import abc import collections from PyQt5 import QtCore @@ -53,7 +53,7 @@ class TclCommand(object): if self.app is None: raise TypeError('Expected app to be FlatCAMApp instance.') - if not isinstance(self.app, FlatCAMApp.App): + if not isinstance(self.app, App.App): raise TypeError('Expected FlatCAMApp, got %s.' % type(app)) self.log = self.app.log diff --git a/tclCommands/TclCommandBbox.py b/tclCommands/TclCommandBbox.py index 6e38bb99..012fe433 100644 --- a/tclCommands/TclCommandBbox.py +++ b/tclCommands/TclCommandBbox.py @@ -4,7 +4,7 @@ from tclCommands.TclCommand import TclCommand from shapely.ops import cascaded_union import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/tclCommands/TclCommandBounds.py b/tclCommands/TclCommandBounds.py index c5752da3..e4d68d9b 100644 --- a/tclCommands/TclCommandBounds.py +++ b/tclCommands/TclCommandBounds.py @@ -3,7 +3,7 @@ import collections import logging import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/tclCommands/TclCommandCopperClear.py b/tclCommands/TclCommandCopperClear.py index a4fd130c..0e849ee5 100644 --- a/tclCommands/TclCommandCopperClear.py +++ b/tclCommands/TclCommandCopperClear.py @@ -4,7 +4,7 @@ import collections import logging import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/tclCommands/TclCommandDrillcncjob.py b/tclCommands/TclCommandDrillcncjob.py index b2123f46..39d2f28e 100644 --- a/tclCommands/TclCommandDrillcncjob.py +++ b/tclCommands/TclCommandDrillcncjob.py @@ -4,7 +4,7 @@ import collections import math import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/tclCommands/TclCommandGeoCutout.py b/tclCommands/TclCommandGeoCutout.py index bef600c1..91a7f660 100644 --- a/tclCommands/TclCommandGeoCutout.py +++ b/tclCommands/TclCommandGeoCutout.py @@ -7,7 +7,7 @@ from shapely.ops import cascaded_union from shapely.geometry import Polygon, LineString, LinearRing import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins log = logging.getLogger('base') diff --git a/tclCommands/TclCommandGetNames.py b/tclCommands/TclCommandGetNames.py index 6bb45e14..ca6c17b4 100644 --- a/tclCommands/TclCommandGetNames.py +++ b/tclCommands/TclCommandGetNames.py @@ -5,7 +5,7 @@ import collections class TclCommandGetNames(TclCommand): """ - Tcl shell command to set an object as active in the GUI. + Tcl shell command to set an object as active in the AppGUI. example: diff --git a/tclCommands/TclCommandGetPath.py b/tclCommands/TclCommandGetPath.py index d6d76b35..346a9243 100644 --- a/tclCommands/TclCommandGetPath.py +++ b/tclCommands/TclCommandGetPath.py @@ -11,7 +11,7 @@ import collections import os import logging import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/tclCommands/TclCommandHelp.py b/tclCommands/TclCommandHelp.py index a5688381..ff1e9d12 100644 --- a/tclCommands/TclCommandHelp.py +++ b/tclCommands/TclCommandHelp.py @@ -11,7 +11,7 @@ from tclCommands.TclCommand import TclCommand import collections import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/tclCommands/TclCommandImportSvg.py b/tclCommands/TclCommandImportSvg.py index 9ef67e27..5dd7146a 100644 --- a/tclCommands/TclCommandImportSvg.py +++ b/tclCommands/TclCommandImportSvg.py @@ -81,5 +81,5 @@ class TclCommandImportSvg(TclCommandSignaled): # Register recent file self.app.file_opened.emit("svg", filename) - # GUI feedback + # AppGUI feedback self.app.inform.emit("Opened: " + filename) diff --git a/tclCommands/TclCommandJoinExcellon.py b/tclCommands/TclCommandJoinExcellon.py index 5c1962ff..0e25c829 100644 --- a/tclCommands/TclCommandJoinExcellon.py +++ b/tclCommands/TclCommandJoinExcellon.py @@ -1,5 +1,5 @@ from tclCommands.TclCommand import TclCommand -from flatcamObjects.FlatCAMExcellon import ExcellonObject +from AppObjects.FlatCAMExcellon import ExcellonObject import collections diff --git a/tclCommands/TclCommandJoinGeometry.py b/tclCommands/TclCommandJoinGeometry.py index 67e3aeb5..cb119856 100644 --- a/tclCommands/TclCommandJoinGeometry.py +++ b/tclCommands/TclCommandJoinGeometry.py @@ -1,5 +1,5 @@ from tclCommands.TclCommand import TclCommand -from flatcamObjects.FlatCAMGeometry import GeometryObject +from AppObjects.FlatCAMGeometry import GeometryObject import collections diff --git a/tclCommands/TclCommandNregions.py b/tclCommands/TclCommandNregions.py index f7aec69d..3663f0f0 100644 --- a/tclCommands/TclCommandNregions.py +++ b/tclCommands/TclCommandNregions.py @@ -5,7 +5,7 @@ from shapely.ops import cascaded_union import collections import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/tclCommands/TclCommandOpenDXF.py b/tclCommands/TclCommandOpenDXF.py index 4e46d2a4..d2de6956 100644 --- a/tclCommands/TclCommandOpenDXF.py +++ b/tclCommands/TclCommandOpenDXF.py @@ -90,5 +90,5 @@ class TclCommandOpenDXF(TclCommandSignaled): # Register recent file self.app.file_opened.emit("dxf", filename) - # GUI feedback + # AppGUI feedback self.app.inform.emit("Opened: " + filename) diff --git a/tclCommands/TclCommandOpenSVG.py b/tclCommands/TclCommandOpenSVG.py index 9c2b514e..503f8507 100644 --- a/tclCommands/TclCommandOpenSVG.py +++ b/tclCommands/TclCommandOpenSVG.py @@ -89,5 +89,5 @@ class TclCommandOpenSVG(TclCommandSignaled): # Register recent file self.app.file_opened.emit("svg", filename) - # GUI feedback + # AppGUI feedback self.app.inform.emit("Opened: " + filename) diff --git a/tclCommands/TclCommandPaint.py b/tclCommands/TclCommandPaint.py index 3ef6f1c6..d6b0916c 100644 --- a/tclCommands/TclCommandPaint.py +++ b/tclCommands/TclCommandPaint.py @@ -4,7 +4,7 @@ import collections import logging import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/tclCommands/TclCommandPlotAll.py b/tclCommands/TclCommandPlotAll.py index 4e9f8277..001afb36 100644 --- a/tclCommands/TclCommandPlotAll.py +++ b/tclCommands/TclCommandPlotAll.py @@ -14,7 +14,7 @@ class TclCommandPlotAll(TclCommandSignaled): # List of all command aliases, to be able use old names for backward compatibility (add_poly, add_polygon) aliases = ['plot_all'] - description = '%s %s' % ("--", "Plots all objects on GUI.") + description = '%s %s' % ("--", "Plots all objects on AppGUI.") # Dictionary of types from Tcl command, needs to be ordered arg_names = collections.OrderedDict([ @@ -32,7 +32,7 @@ class TclCommandPlotAll(TclCommandSignaled): # structured help for current command, args needs to be ordered help = { - 'main': "Plots all objects on GUI.", + 'main': "Plots all objects on AppGUI.", 'args': collections.OrderedDict([ ('plot_status', 'If to display or not the objects: True (1) or False (0).'), ('use_thread', 'If to use multithreading: True (1) or False (0).') diff --git a/tclCommands/TclCommandPlotObjects.py b/tclCommands/TclCommandPlotObjects.py index 8a26e36c..5fce3216 100644 --- a/tclCommands/TclCommandPlotObjects.py +++ b/tclCommands/TclCommandPlotObjects.py @@ -21,7 +21,7 @@ class TclCommandPlotObjects(TclCommand): # List of all command aliases, to be able use old names for backward compatibility (add_poly, add_polygon) aliases = ['plot_objects'] - description = '%s %s' % ("--", "Plot a specified list of objects in GUI.") + description = '%s %s' % ("--", "Plot a specified list of objects in AppGUI.") # Dictionary of types from Tcl command, needs to be ordered arg_names = collections.OrderedDict([ @@ -38,7 +38,7 @@ class TclCommandPlotObjects(TclCommand): # structured help for current command, args needs to be ordered help = { - 'main': "Plot a specified list of objects in GUI.", + 'main': "Plot a specified list of objects in AppGUI.", 'args': collections.OrderedDict([ ('names', "A list of object names to be plotted separated by comma. Required.\n" "WARNING: no spaces are allowed. If unsure enclose the entire list with quotes."), diff --git a/tclCommands/TclCommandScale.py b/tclCommands/TclCommandScale.py index ac790842..b447db8c 100644 --- a/tclCommands/TclCommandScale.py +++ b/tclCommands/TclCommandScale.py @@ -4,7 +4,7 @@ import collections import logging import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/tclCommands/TclCommandSetActive.py b/tclCommands/TclCommandSetActive.py index 6dfecd00..febe927b 100644 --- a/tclCommands/TclCommandSetActive.py +++ b/tclCommands/TclCommandSetActive.py @@ -5,7 +5,7 @@ import collections class TclCommandSetActive(TclCommand): """ - Tcl shell command to set an object as active in the GUI. + Tcl shell command to set an object as active in the AppGUI. example: diff --git a/tclCommands/TclCommandSetOrigin.py b/tclCommands/TclCommandSetOrigin.py index a0afeb08..d2c9681c 100644 --- a/tclCommands/TclCommandSetOrigin.py +++ b/tclCommands/TclCommandSetOrigin.py @@ -13,7 +13,7 @@ from camlib import get_bounds import logging import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/tclCommands/TclCommandSetPath.py b/tclCommands/TclCommandSetPath.py index 79d6c325..09b30e43 100644 --- a/tclCommands/TclCommandSetPath.py +++ b/tclCommands/TclCommandSetPath.py @@ -11,7 +11,7 @@ import collections import os import logging import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') diff --git a/tclCommands/TclCommandSubtractRectangle.py b/tclCommands/TclCommandSubtractRectangle.py index b50a2467..95d66bd2 100644 --- a/tclCommands/TclCommandSubtractRectangle.py +++ b/tclCommands/TclCommandSubtractRectangle.py @@ -3,7 +3,7 @@ from tclCommands.TclCommand import TclCommandSignaled import collections import gettext -import FlatCAMTranslation as fcTranslate +import AppTranslation as fcTranslate import builtins fcTranslate.apply_language('strings') From a0a805217dd7d04af1ae1aac7b4c3a1711ba9fdb Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Mon, 18 May 2020 16:11:02 +0300 Subject: [PATCH 45/99] - removed reference to postprocessors and replaced it with preprocessors --- AppEditors/FlatCAMGeoEditor.py | 28 +++++++++++------------ AppEditors/FlatCAMGrbEditor.py | 10 ++++---- AppPreProcessor.py | 8 +++---- AppTool.py | 6 ++--- AppTools/ToolAlignObjects.py | 10 ++++---- AppTools/ToolCalculators.py | 10 ++++---- AppTools/ToolCalibration.py | 10 ++++---- AppTools/ToolCopperThieving.py | 10 ++++---- AppTools/ToolCorners.py | 10 ++++---- AppTools/ToolCutOut.py | 10 ++++---- AppTools/ToolDblSided.py | 10 ++++---- AppTools/ToolDistance.py | 8 +++---- AppTools/ToolDistanceMin.py | 8 +++---- AppTools/ToolExtractDrills.py | 10 ++++---- AppTools/ToolFiducials.py | 10 ++++---- AppTools/ToolFilm.py | 10 ++++---- AppTools/ToolImage.py | 10 ++++---- AppTools/ToolInvertGerber.py | 10 ++++---- AppTools/ToolMove.py | 8 +++---- AppTools/ToolNCC.py | 10 ++++---- AppTools/ToolOptimal.py | 10 ++++---- AppTools/ToolPDF.py | 8 +++---- AppTools/ToolPaint.py | 10 ++++---- AppTools/ToolPanelize.py | 10 ++++---- AppTools/ToolPcbWizard.py | 10 ++++---- AppTools/ToolProperties.py | 10 ++++---- AppTools/ToolPunchGerber.py | 10 ++++---- AppTools/ToolQRCode.py | 10 ++++---- AppTools/ToolRulesCheck.py | 10 ++++---- AppTools/ToolSolderPaste.py | 10 ++++---- AppTools/ToolSub.py | 10 ++++---- AppTools/ToolTransform.py | 10 ++++---- CHANGELOG.md | 1 + Common.py | 24 +++++++++---------- locale/de/LC_MESSAGES/strings.po | 4 ++-- locale/en/LC_MESSAGES/strings.po | 4 ++-- locale/es/LC_MESSAGES/strings.po | 4 ++-- locale/fr/LC_MESSAGES/strings.po | 4 ++-- locale/hu/LC_MESSAGES/strings.po | 4 ++-- locale/it/LC_MESSAGES/strings.po | 4 ++-- locale/pt_BR/LC_MESSAGES/strings.po | 4 ++-- locale/ro/LC_MESSAGES/strings.po | 4 ++-- locale/ru/LC_MESSAGES/strings.po | 4 ++-- locale_template/strings.pot | 4 ++-- preprocessors/Berta_CNC.py | 2 +- preprocessors/GRBL_laser.py | 2 +- preprocessors/ISEL_CNC.py | 2 +- preprocessors/ISEL_ICP_CNC.py | 2 +- preprocessors/Marlin.py | 2 +- preprocessors/Marlin_laser_FAN_pin.py | 2 +- preprocessors/Marlin_laser_Spindle_pin.py | 2 +- preprocessors/Paste_1.py | 2 +- preprocessors/Repetier.py | 2 +- preprocessors/Roland_MDX_20.py | 2 +- preprocessors/Toolchange_Custom.py | 2 +- preprocessors/Toolchange_Manual.py | 2 +- preprocessors/Toolchange_Probe_MACH3.py | 2 +- preprocessors/default.py | 2 +- preprocessors/grbl_11.py | 2 +- preprocessors/hpgl.py | 2 +- preprocessors/line_xyz.py | 2 +- 61 files changed, 212 insertions(+), 211 deletions(-) diff --git a/AppEditors/FlatCAMGeoEditor.py b/AppEditors/FlatCAMGeoEditor.py index 4834cae8..160038b4 100644 --- a/AppEditors/FlatCAMGeoEditor.py +++ b/AppEditors/FlatCAMGeoEditor.py @@ -15,7 +15,7 @@ from PyQt5 import QtGui, QtCore, QtWidgets from PyQt5.QtCore import Qt, QSettings from camlib import distance, arc, three_point_circle, Geometry, FlatCAMRTreeStorage -from AppTool import FlatCAMTool +from AppTool import AppTool from AppGUI.ObjectUI import RadioSet from AppGUI.GUIElements import OptionalInputSection, FCCheckBox, FCEntry, FCComboBox, FCTextAreaRich, \ FCTable, FCDoubleSpinner, FCButton, EvalEntry2, FCInputDialog, FCTree @@ -42,7 +42,7 @@ if '_' not in builtins.__dict__: _ = gettext.gettext -class BufferSelectionTool(FlatCAMTool): +class BufferSelectionTool(AppTool): """ Simple input for buffer distance. """ @@ -50,7 +50,7 @@ class BufferSelectionTool(FlatCAMTool): toolName = "Buffer Selection" def __init__(self, app, draw_app): - FlatCAMTool.__init__(self, app) + AppTool.__init__(self, app) self.draw_app = draw_app self.decimals = app.decimals @@ -123,7 +123,7 @@ class BufferSelectionTool(FlatCAMTool): def run(self): self.app.defaults.report_usage("Geo Editor ToolBuffer()") - FlatCAMTool.run(self) + AppTool.run(self) # if the splitter us hidden, display it if self.app.ui.splitter.sizes()[0] == 0: @@ -187,7 +187,7 @@ class BufferSelectionTool(FlatCAMTool): self.app.ui.notebook.setCurrentWidget(self.app.ui.project_tab) -class TextInputTool(FlatCAMTool): +class TextInputTool(AppTool): """ Simple input for buffer distance. """ @@ -195,7 +195,7 @@ class TextInputTool(FlatCAMTool): toolName = "Text Input Tool" def __init__(self, app): - FlatCAMTool.__init__(self, app) + AppTool.__init__(self, app) self.app = app self.text_path = [] @@ -340,7 +340,7 @@ class TextInputTool(FlatCAMTool): def run(self): self.app.defaults.report_usage("Geo Editor TextInputTool()") - FlatCAMTool.run(self) + AppTool.run(self) # if the splitter us hidden, display it if self.app.ui.splitter.sizes()[0] == 0: @@ -405,7 +405,7 @@ class TextInputTool(FlatCAMTool): self.app.ui.notebook.setTabText(2, _("Tool")) -class PaintOptionsTool(FlatCAMTool): +class PaintOptionsTool(AppTool): """ Inputs to specify how to paint the selected polygons. """ @@ -413,7 +413,7 @@ class PaintOptionsTool(FlatCAMTool): toolName = "Paint Tool" def __init__(self, app, fcdraw): - FlatCAMTool.__init__(self, app) + AppTool.__init__(self, app) self.app = app self.fcdraw = fcdraw @@ -538,7 +538,7 @@ class PaintOptionsTool(FlatCAMTool): def run(self): self.app.defaults.report_usage("Geo Editor ToolPaint()") - FlatCAMTool.run(self) + AppTool.run(self) # if the splitter us hidden, display it if self.app.ui.splitter.sizes()[0] == 0: @@ -599,7 +599,7 @@ class PaintOptionsTool(FlatCAMTool): self.app.ui.splitter.setSizes([0, 1]) -class TransformEditorTool(FlatCAMTool): +class TransformEditorTool(AppTool): """ Inputs to specify how to paint the selected polygons. """ @@ -612,7 +612,7 @@ class TransformEditorTool(FlatCAMTool): offsetName = _("Offset") def __init__(self, app, draw_app): - FlatCAMTool.__init__(self, app) + AppTool.__init__(self, app) self.app = app self.draw_app = draw_app @@ -981,7 +981,7 @@ class TransformEditorTool(FlatCAMTool): def run(self): self.app.defaults.report_usage("Geo Editor Transform Tool()") - FlatCAMTool.run(self) + AppTool.run(self) self.set_tool_ui() # if the splitter us hidden, display it @@ -991,7 +991,7 @@ class TransformEditorTool(FlatCAMTool): self.app.ui.notebook.setTabText(2, _("Transform Tool")) def install(self, icon=None, separator=None, **kwargs): - FlatCAMTool.install(self, icon, separator, shortcut='Alt+T', **kwargs) + AppTool.install(self, icon, separator, shortcut='Alt+T', **kwargs) def set_tool_ui(self): # Initialize form diff --git a/AppEditors/FlatCAMGrbEditor.py b/AppEditors/FlatCAMGrbEditor.py index b935d16a..c0b2acbb 100644 --- a/AppEditors/FlatCAMGrbEditor.py +++ b/AppEditors/FlatCAMGrbEditor.py @@ -22,7 +22,7 @@ import logging from camlib import distance, arc, three_point_circle from AppGUI.GUIElements import FCEntry, FCComboBox, FCTable, FCDoubleSpinner, FCSpinner, RadioSet, \ EvalEntry2, FCInputDialog, FCButton, OptionalInputSection, FCCheckBox -from AppTool import FlatCAMTool +from AppTool import AppTool import numpy as np from numpy.linalg import norm as numpy_norm @@ -5278,7 +5278,7 @@ class FlatCAMGrbEditor(QtCore.QObject): self.app.ui.notebook.setCurrentWidget(self.app.ui.selected_tab) -class TransformEditorTool(FlatCAMTool): +class TransformEditorTool(AppTool): """ Inputs to specify how to paint the selected polygons. """ @@ -5291,7 +5291,7 @@ class TransformEditorTool(FlatCAMTool): offsetName = _("Offset") def __init__(self, app, draw_app): - FlatCAMTool.__init__(self, app) + AppTool.__init__(self, app) self.app = app self.draw_app = draw_app @@ -5677,13 +5677,13 @@ class TransformEditorTool(FlatCAMTool): except AttributeError: pass - FlatCAMTool.run(self) + AppTool.run(self) self.set_tool_ui() self.app.ui.notebook.setTabText(2, _("Transform Tool")) def install(self, icon=None, separator=None, **kwargs): - FlatCAMTool.install(self, icon, separator, shortcut='Alt+T', **kwargs) + AppTool.install(self, icon, separator, shortcut='Alt+T', **kwargs) def set_tool_ui(self): # Initialize form diff --git a/AppPreProcessor.py b/AppPreProcessor.py index 15991d80..4ae297f7 100644 --- a/AppPreProcessor.py +++ b/AppPreProcessor.py @@ -19,10 +19,10 @@ log = logging.getLogger('base') preprocessors = {} -class ABCPostProcRegister(ABCMeta): +class ABCPreProcRegister(ABCMeta): # handles preprocessors registration on instantiation def __new__(cls, clsname, bases, attrs): - newclass = super(ABCPostProcRegister, cls).__new__(cls, clsname, bases, attrs) + newclass = super(ABCPreProcRegister, cls).__new__(cls, clsname, bases, attrs) if object not in bases: if newclass.__name__ in preprocessors: log.warning('Preprocessor %s has been overriden' % newclass.__name__) @@ -30,7 +30,7 @@ class ABCPostProcRegister(ABCMeta): return newclass -class FlatCAMPostProc(object, metaclass=ABCPostProcRegister): +class PreProc(object, metaclass=ABCPreProcRegister): @abstractmethod def start_code(self, p): pass @@ -76,7 +76,7 @@ class FlatCAMPostProc(object, metaclass=ABCPostProcRegister): pass -class FlatCAMPostProc_Tools(object, metaclass=ABCPostProcRegister): +class AppPreProcTools(object, metaclass=ABCPreProcRegister): @abstractmethod def start_code(self, p): pass diff --git a/AppTool.py b/AppTool.py index 9eb30c3c..1f3c1ba4 100644 --- a/AppTool.py +++ b/AppTool.py @@ -20,7 +20,7 @@ if '_' not in builtins.__dict__: _ = gettext.gettext -class FlatCAMTool(QtWidgets.QWidget): +class AppTool(QtWidgets.QWidget): toolName = "FlatCAM Generic Tool" @@ -30,7 +30,7 @@ class FlatCAMTool(QtWidgets.QWidget): :param app: The application this tool will run in. :type app: App :param parent: Qt Parent - :return: FlatCAMTool + :return: AppTool """ self.app = app self.decimals = app.decimals @@ -294,5 +294,5 @@ class FlatCAMTool(QtWidgets.QWidget): I've overloaded this just in case I will need to make changes in the future to enforce dimensions :return: """ - default_hint_size = super(FlatCAMTool, self).sizeHint() + default_hint_size = super(AppTool, self).sizeHint() return QtCore.QSize(default_hint_size.width(), default_hint_size.height()) diff --git a/AppTools/ToolAlignObjects.py b/AppTools/ToolAlignObjects.py index af593211..f158e386 100644 --- a/AppTools/ToolAlignObjects.py +++ b/AppTools/ToolAlignObjects.py @@ -6,7 +6,7 @@ # ########################################################## from PyQt5 import QtWidgets, QtGui, QtCore -from AppTool import FlatCAMTool +from AppTool import AppTool from AppGUI.GUIElements import FCComboBox, RadioSet @@ -27,12 +27,12 @@ if '_' not in builtins.__dict__: log = logging.getLogger('base') -class AlignObjects(FlatCAMTool): +class AlignObjects(AppTool): toolName = _("Align AppObjects") def __init__(self, app): - FlatCAMTool.__init__(self, app) + AppTool.__init__(self, app) self.app = app self.decimals = app.decimals @@ -238,13 +238,13 @@ class AlignObjects(FlatCAMTool): if self.app.ui.splitter.sizes()[0] == 0: self.app.ui.splitter.setSizes([1, 1]) - FlatCAMTool.run(self) + AppTool.run(self) self.set_tool_ui() self.app.ui.notebook.setTabText(2, _("Align Tool")) def install(self, icon=None, separator=None, **kwargs): - FlatCAMTool.install(self, icon, separator, shortcut='Alt+A', **kwargs) + AppTool.install(self, icon, separator, shortcut='Alt+A', **kwargs) def set_tool_ui(self): self.reset_fields() diff --git a/AppTools/ToolCalculators.py b/AppTools/ToolCalculators.py index 064ec784..08edc27d 100644 --- a/AppTools/ToolCalculators.py +++ b/AppTools/ToolCalculators.py @@ -6,7 +6,7 @@ # ########################################################## from PyQt5 import QtWidgets -from AppTool import FlatCAMTool +from AppTool import AppTool from AppGUI.GUIElements import FCSpinner, FCDoubleSpinner, FCEntry import math @@ -19,7 +19,7 @@ if '_' not in builtins.__dict__: _ = gettext.gettext -class ToolCalculator(FlatCAMTool): +class ToolCalculator(AppTool): toolName = _("Calculators") v_shapeName = _("V-Shape Tool Calculator") @@ -27,7 +27,7 @@ class ToolCalculator(FlatCAMTool): eplateName = _("ElectroPlating Calculator") def __init__(self, app): - FlatCAMTool.__init__(self, app) + AppTool.__init__(self, app) self.app = app self.decimals = self.app.decimals @@ -292,14 +292,14 @@ class ToolCalculator(FlatCAMTool): if self.app.ui.splitter.sizes()[0] == 0: self.app.ui.splitter.setSizes([1, 1]) - FlatCAMTool.run(self) + AppTool.run(self) self.set_tool_ui() self.app.ui.notebook.setTabText(2, _("Calc. Tool")) def install(self, icon=None, separator=None, **kwargs): - FlatCAMTool.install(self, icon, separator, shortcut='Alt+C', **kwargs) + AppTool.install(self, icon, separator, shortcut='Alt+C', **kwargs) def set_tool_ui(self): self.units = self.app.defaults['units'].upper() diff --git a/AppTools/ToolCalibration.py b/AppTools/ToolCalibration.py index 05a51df7..71bbd1e3 100644 --- a/AppTools/ToolCalibration.py +++ b/AppTools/ToolCalibration.py @@ -7,7 +7,7 @@ from PyQt5 import QtWidgets, QtCore, QtGui -from AppTool import FlatCAMTool +from AppTool import AppTool from AppGUI.GUIElements import FCDoubleSpinner, EvalEntry, FCCheckBox, OptionalInputSection, FCEntry from AppGUI.GUIElements import FCTable, FCComboBox, RadioSet from AppEditors.FlatCAMTextEditor import TextEditor @@ -32,12 +32,12 @@ if '_' not in builtins.__dict__: log = logging.getLogger('base') -class ToolCalibration(FlatCAMTool): +class ToolCalibration(AppTool): toolName = _("Calibration Tool") def __init__(self, app): - FlatCAMTool.__init__(self, app) + AppTool.__init__(self, app) self.app = app self.canvas = self.app.plotcanvas @@ -752,14 +752,14 @@ class ToolCalibration(FlatCAMTool): if self.app.ui.splitter.sizes()[0] == 0: self.app.ui.splitter.setSizes([1, 1]) - FlatCAMTool.run(self) + AppTool.run(self) self.set_tool_ui() self.app.ui.notebook.setTabText(2, _("Calibration Tool")) def install(self, icon=None, separator=None, **kwargs): - FlatCAMTool.install(self, icon, separator, shortcut='Alt+E', **kwargs) + AppTool.install(self, icon, separator, shortcut='Alt+E', **kwargs) def set_tool_ui(self): self.units = self.app.defaults['units'].upper() diff --git a/AppTools/ToolCopperThieving.py b/AppTools/ToolCopperThieving.py index 3a2de2ae..aa5510f7 100644 --- a/AppTools/ToolCopperThieving.py +++ b/AppTools/ToolCopperThieving.py @@ -8,7 +8,7 @@ from PyQt5 import QtWidgets, QtCore from Common import GracefulException as grace -from AppTool import FlatCAMTool +from AppTool import AppTool from AppGUI.GUIElements import FCDoubleSpinner, RadioSet, FCEntry, FCComboBox import shapely.geometry.base as base @@ -33,13 +33,13 @@ if '_' not in builtins.__dict__: log = logging.getLogger('base') -class ToolCopperThieving(FlatCAMTool): +class ToolCopperThieving(AppTool): work_finished = QtCore.pyqtSignal() toolName = _("Copper Thieving Tool") def __init__(self, app): - FlatCAMTool.__init__(self, app) + AppTool.__init__(self, app) self.app = app self.canvas = self.app.plotcanvas @@ -561,14 +561,14 @@ class ToolCopperThieving(FlatCAMTool): if self.app.ui.splitter.sizes()[0] == 0: self.app.ui.splitter.setSizes([1, 1]) - FlatCAMTool.run(self) + AppTool.run(self) self.set_tool_ui() self.app.ui.notebook.setTabText(2, _("Copper Thieving Tool")) def install(self, icon=None, separator=None, **kwargs): - FlatCAMTool.install(self, icon, separator, shortcut='Alt+F', **kwargs) + AppTool.install(self, icon, separator, shortcut='Alt+F', **kwargs) def set_tool_ui(self): self.units = self.app.defaults['units'] diff --git a/AppTools/ToolCorners.py b/AppTools/ToolCorners.py index add54622..e1d087ab 100644 --- a/AppTools/ToolCorners.py +++ b/AppTools/ToolCorners.py @@ -7,7 +7,7 @@ from PyQt5 import QtWidgets, QtCore -from AppTool import FlatCAMTool +from AppTool import AppTool from AppGUI.GUIElements import FCDoubleSpinner, FCCheckBox, FCComboBox, FCButton from shapely.geometry import MultiPolygon, LineString @@ -26,12 +26,12 @@ if '_' not in builtins.__dict__: log = logging.getLogger('base') -class ToolCorners(FlatCAMTool): +class ToolCorners(AppTool): toolName = _("Corner Markers Tool") def __init__(self, app): - FlatCAMTool.__init__(self, app) + AppTool.__init__(self, app) self.app = app self.canvas = self.app.plotcanvas @@ -218,14 +218,14 @@ class ToolCorners(FlatCAMTool): if self.app.ui.splitter.sizes()[0] == 0: self.app.ui.splitter.setSizes([1, 1]) - FlatCAMTool.run(self) + AppTool.run(self) self.set_tool_ui() self.app.ui.notebook.setTabText(2, _("Corners Tool")) def install(self, icon=None, separator=None, **kwargs): - FlatCAMTool.install(self, icon, separator, shortcut='Alt+M', **kwargs) + AppTool.install(self, icon, separator, shortcut='Alt+M', **kwargs) def set_tool_ui(self): self.units = self.app.defaults['units'] diff --git a/AppTools/ToolCutOut.py b/AppTools/ToolCutOut.py index f401d0da..105eda45 100644 --- a/AppTools/ToolCutOut.py +++ b/AppTools/ToolCutOut.py @@ -6,7 +6,7 @@ # ########################################################## from PyQt5 import QtWidgets, QtGui, QtCore -from AppTool import FlatCAMTool +from AppTool import AppTool from AppGUI.GUIElements import FCDoubleSpinner, FCCheckBox, RadioSet, FCComboBox, OptionalInputSection, FCButton from shapely.geometry import box, MultiPolygon, Polygon, LineString, LinearRing @@ -36,12 +36,12 @@ else: machinist_setting = 0 -class CutOut(FlatCAMTool): +class CutOut(AppTool): toolName = _("Cutout PCB") def __init__(self, app): - FlatCAMTool.__init__(self, app) + AppTool.__init__(self, app) self.app = app self.canvas = app.plotcanvas @@ -434,13 +434,13 @@ class CutOut(FlatCAMTool): if self.app.ui.splitter.sizes()[0] == 0: self.app.ui.splitter.setSizes([1, 1]) - FlatCAMTool.run(self) + AppTool.run(self) self.set_tool_ui() self.app.ui.notebook.setTabText(2, _("Cutout Tool")) def install(self, icon=None, separator=None, **kwargs): - FlatCAMTool.install(self, icon, separator, shortcut='Alt+X', **kwargs) + AppTool.install(self, icon, separator, shortcut='Alt+X', **kwargs) def set_tool_ui(self): self.reset_fields() diff --git a/AppTools/ToolDblSided.py b/AppTools/ToolDblSided.py index aa9beea6..a987ee55 100644 --- a/AppTools/ToolDblSided.py +++ b/AppTools/ToolDblSided.py @@ -1,7 +1,7 @@ from PyQt5 import QtWidgets, QtCore -from AppTool import FlatCAMTool +from AppTool import AppTool from AppGUI.GUIElements import RadioSet, FCDoubleSpinner, EvalEntry, FCEntry, FCButton, FCComboBox from numpy import Inf @@ -21,12 +21,12 @@ if '_' not in builtins.__dict__: log = logging.getLogger('base') -class DblSidedTool(FlatCAMTool): +class DblSidedTool(AppTool): toolName = _("2-Sided PCB") def __init__(self, app): - FlatCAMTool.__init__(self, app) + AppTool.__init__(self, app) self.decimals = self.app.decimals # ## Title @@ -511,7 +511,7 @@ class DblSidedTool(FlatCAMTool): self.drill_values = "" def install(self, icon=None, separator=None, **kwargs): - FlatCAMTool.install(self, icon, separator, shortcut='Alt+D', **kwargs) + AppTool.install(self, icon, separator, shortcut='Alt+D', **kwargs) def run(self, toggle=True): self.app.defaults.report_usage("Tool2Sided()") @@ -535,7 +535,7 @@ class DblSidedTool(FlatCAMTool): if self.app.ui.splitter.sizes()[0] == 0: self.app.ui.splitter.setSizes([1, 1]) - FlatCAMTool.run(self) + AppTool.run(self) self.set_tool_ui() self.app.ui.notebook.setTabText(2, _("2-Sided Tool")) diff --git a/AppTools/ToolDistance.py b/AppTools/ToolDistance.py index bfdce01a..6798ae8e 100644 --- a/AppTools/ToolDistance.py +++ b/AppTools/ToolDistance.py @@ -7,7 +7,7 @@ from PyQt5 import QtWidgets, QtCore -from AppTool import FlatCAMTool +from AppTool import AppTool from AppGUI.VisPyVisuals import * from AppGUI.GUIElements import FCEntry, FCButton, FCCheckBox @@ -30,12 +30,12 @@ if '_' not in builtins.__dict__: log = logging.getLogger('base') -class Distance(FlatCAMTool): +class Distance(AppTool): toolName = _("Distance Tool") def __init__(self, app): - FlatCAMTool.__init__(self, app) + AppTool.__init__(self, app) self.app = app self.decimals = self.app.decimals @@ -208,7 +208,7 @@ class Distance(FlatCAMTool): self.deactivate_measure_tool() def install(self, icon=None, separator=None, **kwargs): - FlatCAMTool.install(self, icon, separator, shortcut='Ctrl+M', **kwargs) + AppTool.install(self, icon, separator, shortcut='Ctrl+M', **kwargs) def set_tool_ui(self): # Remove anything else in the AppGUI diff --git a/AppTools/ToolDistanceMin.py b/AppTools/ToolDistanceMin.py index 052f20dc..87f56678 100644 --- a/AppTools/ToolDistanceMin.py +++ b/AppTools/ToolDistanceMin.py @@ -6,7 +6,7 @@ # ########################################################## from PyQt5 import QtWidgets, QtCore -from AppTool import FlatCAMTool +from AppTool import AppTool from AppGUI.VisPyVisuals import * from AppGUI.GUIElements import FCEntry @@ -27,12 +27,12 @@ if '_' not in builtins.__dict__: log = logging.getLogger('base') -class DistanceMin(FlatCAMTool): +class DistanceMin(AppTool): toolName = _("Minimum Distance Tool") def __init__(self, app): - FlatCAMTool.__init__(self, app) + AppTool.__init__(self, app) self.app = app self.canvas = self.app.plotcanvas @@ -155,7 +155,7 @@ class DistanceMin(FlatCAMTool): _("Select two objects and no more, to measure the distance between them ...")) def install(self, icon=None, separator=None, **kwargs): - FlatCAMTool.install(self, icon, separator, shortcut='Shift+M', **kwargs) + AppTool.install(self, icon, separator, shortcut='Shift+M', **kwargs) def set_tool_ui(self): # Remove anything else in the AppGUI diff --git a/AppTools/ToolExtractDrills.py b/AppTools/ToolExtractDrills.py index 242a35ce..d9ac5d4b 100644 --- a/AppTools/ToolExtractDrills.py +++ b/AppTools/ToolExtractDrills.py @@ -7,7 +7,7 @@ from PyQt5 import QtWidgets, QtCore -from AppTool import FlatCAMTool +from AppTool import AppTool from AppGUI.GUIElements import RadioSet, FCDoubleSpinner, FCCheckBox, FCComboBox from shapely.geometry import Point @@ -24,12 +24,12 @@ if '_' not in builtins.__dict__: log = logging.getLogger('base') -class ToolExtractDrills(FlatCAMTool): +class ToolExtractDrills(AppTool): toolName = _("Extract Drills") def __init__(self, app): - FlatCAMTool.__init__(self, app) + AppTool.__init__(self, app) self.decimals = self.app.decimals # ## Title @@ -363,7 +363,7 @@ class ToolExtractDrills(FlatCAMTool): ) def install(self, icon=None, separator=None, **kwargs): - FlatCAMTool.install(self, icon, separator, shortcut='Alt+I', **kwargs) + AppTool.install(self, icon, separator, shortcut='Alt+I', **kwargs) def run(self, toggle=True): self.app.defaults.report_usage("Extract Drills()") @@ -387,7 +387,7 @@ class ToolExtractDrills(FlatCAMTool): if self.app.ui.splitter.sizes()[0] == 0: self.app.ui.splitter.setSizes([1, 1]) - FlatCAMTool.run(self) + AppTool.run(self) self.set_tool_ui() self.app.ui.notebook.setTabText(2, _("Extract Drills Tool")) diff --git a/AppTools/ToolFiducials.py b/AppTools/ToolFiducials.py index 906214c9..b43e0944 100644 --- a/AppTools/ToolFiducials.py +++ b/AppTools/ToolFiducials.py @@ -7,7 +7,7 @@ from PyQt5 import QtWidgets, QtCore -from AppTool import FlatCAMTool +from AppTool import AppTool from AppGUI.GUIElements import FCDoubleSpinner, RadioSet, EvalEntry, FCTable, FCComboBox from shapely.geometry import Point, Polygon, MultiPolygon, LineString @@ -28,12 +28,12 @@ if '_' not in builtins.__dict__: log = logging.getLogger('base') -class ToolFiducials(FlatCAMTool): +class ToolFiducials(AppTool): toolName = _("Fiducials Tool") def __init__(self, app): - FlatCAMTool.__init__(self, app) + AppTool.__init__(self, app) self.app = app self.canvas = self.app.plotcanvas @@ -389,14 +389,14 @@ class ToolFiducials(FlatCAMTool): if self.app.ui.splitter.sizes()[0] == 0: self.app.ui.splitter.setSizes([1, 1]) - FlatCAMTool.run(self) + AppTool.run(self) self.set_tool_ui() self.app.ui.notebook.setTabText(2, _("Fiducials Tool")) def install(self, icon=None, separator=None, **kwargs): - FlatCAMTool.install(self, icon, separator, shortcut='Alt+J', **kwargs) + AppTool.install(self, icon, separator, shortcut='Alt+J', **kwargs) def set_tool_ui(self): self.units = self.app.defaults['units'] diff --git a/AppTools/ToolFilm.py b/AppTools/ToolFilm.py index 7141d780..a2ffd94f 100644 --- a/AppTools/ToolFilm.py +++ b/AppTools/ToolFilm.py @@ -7,7 +7,7 @@ from PyQt5 import QtGui, QtCore, QtWidgets -from AppTool import FlatCAMTool +from AppTool import AppTool from AppGUI.GUIElements import RadioSet, FCDoubleSpinner, FCCheckBox, \ OptionalHideInputSection, OptionalInputSection, FCComboBox, FCFileSaveDialog @@ -37,12 +37,12 @@ if '_' not in builtins.__dict__: log = logging.getLogger('base') -class Film(FlatCAMTool): +class Film(AppTool): toolName = _("Film PCB") def __init__(self, app): - FlatCAMTool.__init__(self, app) + AppTool.__init__(self, app) self.decimals = self.app.decimals @@ -562,14 +562,14 @@ class Film(FlatCAMTool): if self.app.ui.splitter.sizes()[0] == 0: self.app.ui.splitter.setSizes([1, 1]) - FlatCAMTool.run(self) + AppTool.run(self) self.set_tool_ui() self.app.ui.notebook.setTabText(2, _("Film Tool")) def install(self, icon=None, separator=None, **kwargs): - FlatCAMTool.install(self, icon, separator, shortcut='Alt+L', **kwargs) + AppTool.install(self, icon, separator, shortcut='Alt+L', **kwargs) def set_tool_ui(self): self.reset_fields() diff --git a/AppTools/ToolImage.py b/AppTools/ToolImage.py index 03a0352e..3b0a666b 100644 --- a/AppTools/ToolImage.py +++ b/AppTools/ToolImage.py @@ -7,7 +7,7 @@ from PyQt5 import QtGui, QtWidgets -from AppTool import FlatCAMTool +from AppTool import AppTool from AppGUI.GUIElements import RadioSet, FCComboBox, FCSpinner import gettext @@ -19,12 +19,12 @@ if '_' not in builtins.__dict__: _ = gettext.gettext -class ToolImage(FlatCAMTool): +class ToolImage(AppTool): toolName = _("Image as Object") def __init__(self, app): - FlatCAMTool.__init__(self, app) + AppTool.__init__(self, app) self.app = app self.decimals = self.app.decimals @@ -176,13 +176,13 @@ class ToolImage(FlatCAMTool): if self.app.ui.splitter.sizes()[0] == 0: self.app.ui.splitter.setSizes([1, 1]) - FlatCAMTool.run(self) + AppTool.run(self) self.set_tool_ui() self.app.ui.notebook.setTabText(2, _("Image Tool")) def install(self, icon=None, separator=None, **kwargs): - FlatCAMTool.install(self, icon, separator, **kwargs) + AppTool.install(self, icon, separator, **kwargs) def set_tool_ui(self): # ## Initialize form diff --git a/AppTools/ToolInvertGerber.py b/AppTools/ToolInvertGerber.py index f51175c8..bcdb394f 100644 --- a/AppTools/ToolInvertGerber.py +++ b/AppTools/ToolInvertGerber.py @@ -7,7 +7,7 @@ from PyQt5 import QtWidgets, QtCore -from AppTool import FlatCAMTool +from AppTool import AppTool from AppGUI.GUIElements import FCButton, FCDoubleSpinner, RadioSet, FCComboBox from shapely.geometry import box @@ -26,7 +26,7 @@ if '_' not in builtins.__dict__: log = logging.getLogger('base') -class ToolInvertGerber(FlatCAMTool): +class ToolInvertGerber(AppTool): toolName = _("Invert Gerber Tool") @@ -34,7 +34,7 @@ class ToolInvertGerber(FlatCAMTool): self.app = app self.decimals = self.app.decimals - FlatCAMTool.__init__(self, app) + AppTool.__init__(self, app) self.tools_frame = QtWidgets.QFrame() self.tools_frame.setContentsMargins(0, 0, 0, 0) @@ -153,7 +153,7 @@ class ToolInvertGerber(FlatCAMTool): self.reset_button.clicked.connect(self.set_tool_ui) def install(self, icon=None, separator=None, **kwargs): - FlatCAMTool.install(self, icon, separator, shortcut='', **kwargs) + AppTool.install(self, icon, separator, shortcut='', **kwargs) def run(self, toggle=True): self.app.defaults.report_usage("ToolInvertGerber()") @@ -178,7 +178,7 @@ class ToolInvertGerber(FlatCAMTool): if self.app.ui.splitter.sizes()[0] == 0: self.app.ui.splitter.setSizes([1, 1]) - FlatCAMTool.run(self) + AppTool.run(self) self.set_tool_ui() self.app.ui.notebook.setTabText(2, _("Invert Tool")) diff --git a/AppTools/ToolMove.py b/AppTools/ToolMove.py index 61227ed0..e02fed57 100644 --- a/AppTools/ToolMove.py +++ b/AppTools/ToolMove.py @@ -6,7 +6,7 @@ # ########################################################## from PyQt5 import QtWidgets, QtCore -from AppTool import FlatCAMTool +from AppTool import AppTool from AppGUI.VisPyVisuals import * from copy import copy @@ -22,13 +22,13 @@ if '_' not in builtins.__dict__: log = logging.getLogger('base') -class ToolMove(FlatCAMTool): +class ToolMove(AppTool): toolName = _("Move") replot_signal = QtCore.pyqtSignal(list) def __init__(self, app): - FlatCAMTool.__init__(self, app) + AppTool.__init__(self, app) self.app = app self.decimals = self.app.decimals @@ -60,7 +60,7 @@ class ToolMove(FlatCAMTool): self.replot_signal[list].connect(self.replot) def install(self, icon=None, separator=None, **kwargs): - FlatCAMTool.install(self, icon, separator, shortcut='M', **kwargs) + AppTool.install(self, icon, separator, shortcut='M', **kwargs) def run(self, toggle): self.app.defaults.report_usage("ToolMove()") diff --git a/AppTools/ToolNCC.py b/AppTools/ToolNCC.py index 0e268dc1..eefdd94b 100644 --- a/AppTools/ToolNCC.py +++ b/AppTools/ToolNCC.py @@ -7,7 +7,7 @@ from PyQt5 import QtWidgets, QtCore, QtGui -from AppTool import FlatCAMTool +from AppTool import AppTool from AppGUI.GUIElements import FCCheckBox, FCDoubleSpinner, RadioSet, FCTable, FCInputDialog, FCButton,\ FCComboBox, OptionalInputSection from AppParsers.ParseGerber import Gerber @@ -37,7 +37,7 @@ if '_' not in builtins.__dict__: log = logging.getLogger('base') -class NonCopperClear(FlatCAMTool, Gerber): +class NonCopperClear(AppTool, Gerber): toolName = _("Non-Copper Clearing") @@ -45,7 +45,7 @@ class NonCopperClear(FlatCAMTool, Gerber): self.app = app self.decimals = self.app.decimals - FlatCAMTool.__init__(self, app) + AppTool.__init__(self, app) Gerber.__init__(self, steps_per_circle=self.app.defaults["gerber_circle_steps"]) self.tools_frame = QtWidgets.QFrame() @@ -936,7 +936,7 @@ class NonCopperClear(FlatCAMTool, Gerber): self.app.inform.emit('[WARNING_NOTCL] %s...' % _("Adding Tool cancelled")) def install(self, icon=None, separator=None, **kwargs): - FlatCAMTool.install(self, icon, separator, shortcut='Alt+N', **kwargs) + AppTool.install(self, icon, separator, shortcut='Alt+N', **kwargs) def run(self, toggle=True): self.app.defaults.report_usage("ToolNonCopperClear()") @@ -961,7 +961,7 @@ class NonCopperClear(FlatCAMTool, Gerber): if self.app.ui.splitter.sizes()[0] == 0: self.app.ui.splitter.setSizes([1, 1]) - FlatCAMTool.run(self) + AppTool.run(self) self.set_tool_ui() # reset those objects on a new run diff --git a/AppTools/ToolOptimal.py b/AppTools/ToolOptimal.py index a437149b..004497b9 100644 --- a/AppTools/ToolOptimal.py +++ b/AppTools/ToolOptimal.py @@ -7,7 +7,7 @@ from PyQt5 import QtWidgets, QtCore, QtGui -from AppTool import FlatCAMTool +from AppTool import AppTool from AppGUI.GUIElements import OptionalHideInputSection, FCTextArea, FCEntry, FCSpinner, FCCheckBox, FCComboBox from Common import GracefulException as grace @@ -28,7 +28,7 @@ if '_' not in builtins.__dict__: log = logging.getLogger('base') -class ToolOptimal(FlatCAMTool): +class ToolOptimal(AppTool): toolName = _("Optimal Tool") @@ -36,7 +36,7 @@ class ToolOptimal(FlatCAMTool): update_sec_distances = QtCore.pyqtSignal(dict) def __init__(self, app): - FlatCAMTool.__init__(self, app) + AppTool.__init__(self, app) self.units = self.app.defaults['units'].upper() self.decimals = self.app.decimals @@ -277,7 +277,7 @@ class ToolOptimal(FlatCAMTool): self.reset_button.clicked.connect(self.set_tool_ui) def install(self, icon=None, separator=None, **kwargs): - FlatCAMTool.install(self, icon, separator, shortcut='Alt+O', **kwargs) + AppTool.install(self, icon, separator, shortcut='Alt+O', **kwargs) def run(self, toggle=True): self.app.defaults.report_usage("ToolOptimal()") @@ -301,7 +301,7 @@ class ToolOptimal(FlatCAMTool): if self.app.ui.splitter.sizes()[0] == 0: self.app.ui.splitter.setSizes([1, 1]) - FlatCAMTool.run(self) + AppTool.run(self) self.set_tool_ui() self.app.ui.notebook.setTabText(2, _("Optimal Tool")) diff --git a/AppTools/ToolPDF.py b/AppTools/ToolPDF.py index 1bc5a55b..a592394b 100644 --- a/AppTools/ToolPDF.py +++ b/AppTools/ToolPDF.py @@ -7,7 +7,7 @@ from PyQt5 import QtWidgets, QtCore -from AppTool import FlatCAMTool +from AppTool import AppTool from Common import GracefulException as grace from AppParsers.ParsePDF import PdfParser from shapely.geometry import Point, MultiPolygon @@ -32,7 +32,7 @@ if '_' not in builtins.__dict__: log = logging.getLogger('base') -class ToolPDF(FlatCAMTool): +class ToolPDF(AppTool): """ Parse a PDF file. Reference here: https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/pdf_reference_archives/PDFReference.pdf @@ -41,7 +41,7 @@ class ToolPDF(FlatCAMTool): toolName = _("PDF Import Tool") def __init__(self, app): - FlatCAMTool.__init__(self, app) + AppTool.__init__(self, app) self.app = app self.decimals = self.app.decimals @@ -69,7 +69,7 @@ class ToolPDF(FlatCAMTool): self.on_open_pdf_click() def install(self, icon=None, separator=None, **kwargs): - FlatCAMTool.install(self, icon, separator, shortcut='Ctrl+Q', **kwargs) + AppTool.install(self, icon, separator, shortcut='Ctrl+Q', **kwargs) def set_tool_ui(self): pass diff --git a/AppTools/ToolPaint.py b/AppTools/ToolPaint.py index d377e81d..a9f3b67e 100644 --- a/AppTools/ToolPaint.py +++ b/AppTools/ToolPaint.py @@ -8,7 +8,7 @@ from PyQt5 import QtWidgets, QtGui, QtCore from PyQt5.QtCore import Qt -from AppTool import FlatCAMTool +from AppTool import AppTool from copy import deepcopy # from ObjectCollection import * from AppParsers.ParseGerber import Gerber @@ -38,7 +38,7 @@ if '_' not in builtins.__dict__: log = logging.getLogger('base') -class ToolPaint(FlatCAMTool, Gerber): +class ToolPaint(AppTool, Gerber): toolName = _("Paint Tool") @@ -46,7 +46,7 @@ class ToolPaint(FlatCAMTool, Gerber): self.app = app self.decimals = self.app.decimals - FlatCAMTool.__init__(self, app) + AppTool.__init__(self, app) Geometry.__init__(self, geo_steps_per_circle=self.app.defaults["geometry_circle_steps"]) # ## Title @@ -707,7 +707,7 @@ class ToolPaint(FlatCAMTool, Gerber): }[self.reference_type_combo.get_value()] def install(self, icon=None, separator=None, **kwargs): - FlatCAMTool.install(self, icon, separator, shortcut='Alt+P', **kwargs) + AppTool.install(self, icon, separator, shortcut='Alt+P', **kwargs) def run(self, toggle=True): self.app.defaults.report_usage("ToolPaint()") @@ -732,7 +732,7 @@ class ToolPaint(FlatCAMTool, Gerber): if self.app.ui.splitter.sizes()[0] == 0: self.app.ui.splitter.setSizes([1, 1]) - FlatCAMTool.run(self) + AppTool.run(self) self.set_tool_ui() self.app.ui.notebook.setTabText(2, _("Paint Tool")) diff --git a/AppTools/ToolPanelize.py b/AppTools/ToolPanelize.py index ad790601..82e41491 100644 --- a/AppTools/ToolPanelize.py +++ b/AppTools/ToolPanelize.py @@ -6,7 +6,7 @@ # ########################################################## from PyQt5 import QtWidgets, QtGui, QtCore -from AppTool import FlatCAMTool +from AppTool import AppTool from AppGUI.GUIElements import FCSpinner, FCDoubleSpinner, RadioSet, FCCheckBox, OptionalInputSection, FCComboBox from Common import GracefulException as grace @@ -29,14 +29,14 @@ if '_' not in builtins.__dict__: log = logging.getLogger('base') -class Panelize(FlatCAMTool): +class Panelize(AppTool): toolName = _("Panelize PCB") def __init__(self, app): self.decimals = app.decimals - FlatCAMTool.__init__(self, app) + AppTool.__init__(self, app) # ## Title title_label = QtWidgets.QLabel("%s" % self.toolName) @@ -326,13 +326,13 @@ class Panelize(FlatCAMTool): if self.app.ui.splitter.sizes()[0] == 0: self.app.ui.splitter.setSizes([1, 1]) - FlatCAMTool.run(self) + AppTool.run(self) self.set_tool_ui() self.app.ui.notebook.setTabText(2, _("Panel. Tool")) def install(self, icon=None, separator=None, **kwargs): - FlatCAMTool.install(self, icon, separator, shortcut='Alt+Z', **kwargs) + AppTool.install(self, icon, separator, shortcut='Alt+Z', **kwargs) def set_tool_ui(self): self.reset_fields() diff --git a/AppTools/ToolPcbWizard.py b/AppTools/ToolPcbWizard.py index 030bbfe7..672ec3bd 100644 --- a/AppTools/ToolPcbWizard.py +++ b/AppTools/ToolPcbWizard.py @@ -7,7 +7,7 @@ from PyQt5 import QtWidgets, QtCore -from AppTool import FlatCAMTool +from AppTool import AppTool from AppGUI.GUIElements import RadioSet, FCSpinner, FCButton, FCTable import re @@ -24,14 +24,14 @@ if '_' not in builtins.__dict__: _ = gettext.gettext -class PcbWizard(FlatCAMTool): +class PcbWizard(AppTool): file_loaded = QtCore.pyqtSignal(str, str) toolName = _("PcbWizard Import Tool") def __init__(self, app): - FlatCAMTool.__init__(self, app) + AppTool.__init__(self, app) self.app = app self.decimals = self.app.decimals @@ -191,13 +191,13 @@ class PcbWizard(FlatCAMTool): if self.app.ui.splitter.sizes()[0] == 0: self.app.ui.splitter.setSizes([1, 1]) - FlatCAMTool.run(self) + AppTool.run(self) self.set_tool_ui() self.app.ui.notebook.setTabText(2, _("PCBWizard Tool")) def install(self, icon=None, separator=None, **kwargs): - FlatCAMTool.install(self, icon, separator, **kwargs) + AppTool.install(self, icon, separator, **kwargs) def set_tool_ui(self): self.units = 'INCH' diff --git a/AppTools/ToolProperties.py b/AppTools/ToolProperties.py index f66e8b11..59d73a8c 100644 --- a/AppTools/ToolProperties.py +++ b/AppTools/ToolProperties.py @@ -6,7 +6,7 @@ # ########################################################## from PyQt5 import QtGui, QtCore, QtWidgets -from AppTool import FlatCAMTool +from AppTool import AppTool from AppGUI.GUIElements import FCTree from shapely.geometry import MultiPolygon, Polygon @@ -27,13 +27,13 @@ if '_' not in builtins.__dict__: log = logging.getLogger('base') -class Properties(FlatCAMTool): +class Properties(AppTool): toolName = _("Properties") calculations_finished = QtCore.pyqtSignal(float, float, float, float, float, object) def __init__(self, app): - FlatCAMTool.__init__(self, app) + AppTool.__init__(self, app) self.setSizePolicy(QtWidgets.QSizePolicy.Ignored, QtWidgets.QSizePolicy.Ignored) @@ -97,13 +97,13 @@ class Properties(FlatCAMTool): if self.app.ui.splitter.sizes()[0] == 0: self.app.ui.splitter.setSizes([1, 1]) - FlatCAMTool.run(self) + AppTool.run(self) self.set_tool_ui() self.properties() def install(self, icon=None, separator=None, **kwargs): - FlatCAMTool.install(self, icon, separator, shortcut='P', **kwargs) + AppTool.install(self, icon, separator, shortcut='P', **kwargs) def set_tool_ui(self): # this reset the TreeWidget diff --git a/AppTools/ToolPunchGerber.py b/AppTools/ToolPunchGerber.py index 2ec20d6d..3dcc99f2 100644 --- a/AppTools/ToolPunchGerber.py +++ b/AppTools/ToolPunchGerber.py @@ -7,7 +7,7 @@ from PyQt5 import QtCore, QtWidgets -from AppTool import FlatCAMTool +from AppTool import AppTool from AppGUI.GUIElements import RadioSet, FCDoubleSpinner, FCCheckBox, FCComboBox from copy import deepcopy @@ -25,12 +25,12 @@ if '_' not in builtins.__dict__: log = logging.getLogger('base') -class ToolPunchGerber(FlatCAMTool): +class ToolPunchGerber(AppTool): toolName = _("Punch Gerber") def __init__(self, app): - FlatCAMTool.__init__(self, app) + AppTool.__init__(self, app) self.decimals = self.app.decimals @@ -418,14 +418,14 @@ class ToolPunchGerber(FlatCAMTool): if self.app.ui.splitter.sizes()[0] == 0: self.app.ui.splitter.setSizes([1, 1]) - FlatCAMTool.run(self) + AppTool.run(self) self.set_tool_ui() self.app.ui.notebook.setTabText(2, _("Punch Tool")) def install(self, icon=None, separator=None, **kwargs): - FlatCAMTool.install(self, icon, separator, shortcut='Alt+H', **kwargs) + AppTool.install(self, icon, separator, shortcut='Alt+H', **kwargs) def set_tool_ui(self): self.reset_fields() diff --git a/AppTools/ToolQRCode.py b/AppTools/ToolQRCode.py index 601b81c6..1462f205 100644 --- a/AppTools/ToolQRCode.py +++ b/AppTools/ToolQRCode.py @@ -8,7 +8,7 @@ from PyQt5 import QtWidgets, QtCore, QtGui from PyQt5.QtCore import Qt -from AppTool import FlatCAMTool +from AppTool import AppTool from AppGUI.GUIElements import RadioSet, FCTextArea, FCSpinner, FCEntry, FCCheckBox, FCComboBox, FCFileSaveDialog from AppParsers.ParseSVG import * @@ -38,12 +38,12 @@ if '_' not in builtins.__dict__: log = logging.getLogger('base') -class QRCode(FlatCAMTool): +class QRCode(AppTool): toolName = _("QRCode Tool") def __init__(self, app): - FlatCAMTool.__init__(self, app) + AppTool.__init__(self, app) self.app = app self.canvas = self.app.plotcanvas @@ -375,14 +375,14 @@ class QRCode(FlatCAMTool): if self.app.ui.splitter.sizes()[0] == 0: self.app.ui.splitter.setSizes([1, 1]) - FlatCAMTool.run(self) + AppTool.run(self) self.set_tool_ui() self.app.ui.notebook.setTabText(2, _("QRCode Tool")) def install(self, icon=None, separator=None, **kwargs): - FlatCAMTool.install(self, icon, separator, shortcut='Alt+Q', **kwargs) + AppTool.install(self, icon, separator, shortcut='Alt+Q', **kwargs) def set_tool_ui(self): self.units = self.app.defaults['units'] diff --git a/AppTools/ToolRulesCheck.py b/AppTools/ToolRulesCheck.py index ed090d36..54376bb3 100644 --- a/AppTools/ToolRulesCheck.py +++ b/AppTools/ToolRulesCheck.py @@ -7,7 +7,7 @@ from PyQt5 import QtWidgets -from AppTool import FlatCAMTool +from AppTool import AppTool from AppGUI.GUIElements import FCDoubleSpinner, FCCheckBox, OptionalInputSection, FCComboBox from copy import deepcopy @@ -28,7 +28,7 @@ if '_' not in builtins.__dict__: log = logging.getLogger('base') -class RulesCheck(FlatCAMTool): +class RulesCheck(AppTool): toolName = _("Check Rules") @@ -37,7 +37,7 @@ class RulesCheck(FlatCAMTool): def __init__(self, app): self.decimals = app.decimals - FlatCAMTool.__init__(self, app) + AppTool.__init__(self, app) # ## Title title_label = QtWidgets.QLabel("%s" % self.toolName) @@ -610,13 +610,13 @@ class RulesCheck(FlatCAMTool): if self.app.ui.splitter.sizes()[0] == 0: self.app.ui.splitter.setSizes([1, 1]) - FlatCAMTool.run(self) + AppTool.run(self) self.set_tool_ui() self.app.ui.notebook.setTabText(2, _("Rules Tool")) def install(self, icon=None, separator=None, **kwargs): - FlatCAMTool.install(self, icon, separator, shortcut='Alt+R', **kwargs) + AppTool.install(self, icon, separator, shortcut='Alt+R', **kwargs) def set_tool_ui(self): diff --git a/AppTools/ToolSolderPaste.py b/AppTools/ToolSolderPaste.py index 7831fd1e..2dce9d2d 100644 --- a/AppTools/ToolSolderPaste.py +++ b/AppTools/ToolSolderPaste.py @@ -5,7 +5,7 @@ # MIT Licence # # ########################################################## -from AppTool import FlatCAMTool +from AppTool import AppTool from Common import LoudDict from AppGUI.GUIElements import FCComboBox, FCEntry, FCTable, \ FCInputDialog, FCDoubleSpinner, FCSpinner, FCFileSaveDialog @@ -33,11 +33,11 @@ if '_' not in builtins.__dict__: _ = gettext.gettext -class SolderPaste(FlatCAMTool): +class SolderPaste(AppTool): toolName = _("Solder Paste Tool") def __init__(self, app): - FlatCAMTool.__init__(self, app) + AppTool.__init__(self, app) # Number of decimals to be used for tools/nozzles in this FlatCAM Tool self.decimals = self.app.decimals @@ -546,14 +546,14 @@ class SolderPaste(FlatCAMTool): if self.app.ui.splitter.sizes()[0] == 0: self.app.ui.splitter.setSizes([1, 1]) - FlatCAMTool.run(self) + AppTool.run(self) self.set_tool_ui() self.build_ui() self.app.ui.notebook.setTabText(2, _("SolderPaste Tool")) def install(self, icon=None, separator=None, **kwargs): - FlatCAMTool.install(self, icon, separator, shortcut='Alt+K', **kwargs) + AppTool.install(self, icon, separator, shortcut='Alt+K', **kwargs) def on_add_tool_by_key(self): tool_add_popup = FCInputDialog(title='%s...' % _("New Tool"), diff --git a/AppTools/ToolSub.py b/AppTools/ToolSub.py index e4938aa0..524ac125 100644 --- a/AppTools/ToolSub.py +++ b/AppTools/ToolSub.py @@ -7,7 +7,7 @@ from PyQt5 import QtWidgets, QtCore -from AppTool import FlatCAMTool +from AppTool import AppTool from AppGUI.GUIElements import FCCheckBox, FCButton, FCComboBox from shapely.geometry import Polygon, MultiPolygon, MultiLineString, LineString @@ -28,7 +28,7 @@ if '_' not in builtins.__dict__: log = logging.getLogger('base') -class ToolSub(FlatCAMTool): +class ToolSub(AppTool): job_finished = QtCore.pyqtSignal(bool) @@ -38,7 +38,7 @@ class ToolSub(FlatCAMTool): self.app = app self.decimals = self.app.decimals - FlatCAMTool.__init__(self, app) + AppTool.__init__(self, app) self.tools_frame = QtWidgets.QFrame() self.tools_frame.setContentsMargins(0, 0, 0, 0) @@ -233,7 +233,7 @@ class ToolSub(FlatCAMTool): self.reset_button.clicked.connect(self.set_tool_ui) def install(self, icon=None, separator=None, **kwargs): - FlatCAMTool.install(self, icon, separator, shortcut='Alt+W', **kwargs) + AppTool.install(self, icon, separator, shortcut='Alt+W', **kwargs) def run(self, toggle=True): self.app.defaults.report_usage("ToolSub()") @@ -257,7 +257,7 @@ class ToolSub(FlatCAMTool): if self.app.ui.splitter.sizes()[0] == 0: self.app.ui.splitter.setSizes([1, 1]) - FlatCAMTool.run(self) + AppTool.run(self) self.set_tool_ui() self.app.ui.notebook.setTabText(2, _("Sub Tool")) diff --git a/AppTools/ToolTransform.py b/AppTools/ToolTransform.py index b89afffe..f0619ddb 100644 --- a/AppTools/ToolTransform.py +++ b/AppTools/ToolTransform.py @@ -6,7 +6,7 @@ # ########################################################## from PyQt5 import QtWidgets -from AppTool import FlatCAMTool +from AppTool import AppTool from AppGUI.GUIElements import FCDoubleSpinner, FCCheckBox, FCButton, OptionalInputSection, FCEntry import gettext @@ -18,7 +18,7 @@ if '_' not in builtins.__dict__: _ = gettext.gettext -class ToolTransform(FlatCAMTool): +class ToolTransform(AppTool): toolName = _("Object Transform") rotateName = _("Rotate") @@ -29,7 +29,7 @@ class ToolTransform(FlatCAMTool): bufferName = _("Buffer") def __init__(self, app): - FlatCAMTool.__init__(self, app) + AppTool.__init__(self, app) self.decimals = self.app.decimals # ## Title @@ -454,13 +454,13 @@ class ToolTransform(FlatCAMTool): if self.app.ui.splitter.sizes()[0] == 0: self.app.ui.splitter.setSizes([1, 1]) - FlatCAMTool.run(self) + AppTool.run(self) self.set_tool_ui() self.app.ui.notebook.setTabText(2, _("Transform Tool")) def install(self, icon=None, separator=None, **kwargs): - FlatCAMTool.install(self, icon, separator, shortcut='Alt+T', **kwargs) + AppTool.install(self, icon, separator, shortcut='Alt+T', **kwargs) def set_tool_ui(self): self.rotate_button.set_value(_("Rotate")) diff --git a/CHANGELOG.md b/CHANGELOG.md index 384d73fc..ca1eaf14 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ CHANGELOG for FlatCAM beta - moved some of the GUI related methods from FlatCAMApp.App to the flatcamGUI.FlatCAMGUI class - moved Shortcuts Tab creation in it's own class - renamed classes to have shorter names and grouped +- removed reference to postprocessors and replaced it with preprocessors 17.05.2020 diff --git a/Common.py b/Common.py index d51a8b0e..efdd3252 100644 --- a/Common.py +++ b/Common.py @@ -15,7 +15,7 @@ from PyQt5 import QtCore from shapely.geometry import Polygon, MultiPolygon from AppGUI.VisPyVisuals import ShapeCollection -from AppTool import FlatCAMTool +from AppTool import AppTool import numpy as np @@ -287,7 +287,7 @@ class ExclusionAreas(QtCore.QObject): face_color = "#FF7400BF" # add a temporary shape on canvas - FlatCAMTool.draw_tool_selection_shape( + AppTool.draw_tool_selection_shape( self, old_coords=(x0, y0), coords=(x1, y1), color=color, face_color=face_color, @@ -322,7 +322,7 @@ class ExclusionAreas(QtCore.QObject): # we need to add a Polygon and a Polygon can be made only from at least 3 points if len(self.points) > 2: - FlatCAMTool.delete_moving_selection_shape(self) + AppTool.delete_moving_selection_shape(self) pol = Polygon(self.points) # do not add invalid polygons even if they are drawn by utility geometry if pol.is_valid: @@ -347,7 +347,7 @@ class ExclusionAreas(QtCore.QObject): color = "#098a8f" face_color = "#FF7400BF" - FlatCAMTool.draw_selection_shape_polygon( + AppTool.draw_selection_shape_polygon( self, points=self.points, color=color, face_color=face_color, @@ -359,7 +359,7 @@ class ExclusionAreas(QtCore.QObject): self.poly_drawn = False return - # FlatCAMTool.delete_tool_selection_shape(self, shapes_storage=self.exclusion_shapes) + # AppTool.delete_tool_selection_shape(self, shapes_storage=self.exclusion_shapes) if self.app.is_legacy is False: self.app.plotcanvas.graph_event_disconnect('mouse_release', self.on_mouse_release) @@ -428,8 +428,8 @@ class ExclusionAreas(QtCore.QObject): self.poly_drawn = False self.exclusion_areas_storage = [] - FlatCAMTool.delete_moving_selection_shape(self) - # FlatCAMTool.delete_tool_selection_shape(self, shapes_storage=self.exclusion_shapes) + AppTool.delete_moving_selection_shape(self) + # AppTool.delete_tool_selection_shape(self, shapes_storage=self.exclusion_shapes) self.app.call_source = "app" self.app.inform.emit("[WARNING_NOTCL] %s" % _("Cancelled. Area exclusion drawing was interrupted.")) @@ -498,8 +498,8 @@ class ExclusionAreas(QtCore.QObject): face_color=face_color, coords=(curr_pos[0], curr_pos[1])) else: - FlatCAMTool.delete_moving_selection_shape(self) - FlatCAMTool.draw_moving_selection_shape_poly( + AppTool.delete_moving_selection_shape(self) + AppTool.draw_moving_selection_shape_poly( self, points=self.points, color=color, face_color=face_color, @@ -521,9 +521,9 @@ class ExclusionAreas(QtCore.QObject): def clear_shapes(self): self.exclusion_areas_storage.clear() - FlatCAMTool.delete_moving_selection_shape(self) + AppTool.delete_moving_selection_shape(self) self.app.delete_selection_shape() - FlatCAMTool.delete_tool_selection_shape(self, shapes_storage=self.exclusion_shapes) + AppTool.delete_tool_selection_shape(self, shapes_storage=self.exclusion_shapes) self.app.inform.emit('[success] %s' % _("All exclusion zones deleted.")) def delete_sel_shapes(self, idxs): @@ -534,7 +534,7 @@ class ExclusionAreas(QtCore.QObject): """ # delete all plotted shapes - FlatCAMTool.delete_tool_selection_shape(self, shapes_storage=self.exclusion_shapes) + AppTool.delete_tool_selection_shape(self, shapes_storage=self.exclusion_shapes) # delete shapes for idx in sorted(idxs, reverse=True): diff --git a/locale/de/LC_MESSAGES/strings.po b/locale/de/LC_MESSAGES/strings.po index 17d6af72..d6c2a254 100644 --- a/locale/de/LC_MESSAGES/strings.po +++ b/locale/de/LC_MESSAGES/strings.po @@ -2674,12 +2674,12 @@ msgstr "Speichern Sie die Tools-Datenbankinformationen." msgid "processes running." msgstr "laufende Prozesse." -#: FlatCAMTool.py:245 FlatCAMTool.py:252 flatcamGUI/ObjectUI.py:157 +#: AppTool.py:245 AppTool.py:252 flatcamGUI/ObjectUI.py:157 #: flatcamGUI/ObjectUI.py:164 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:159 +#: AppTool.py:247 AppTool.py:254 flatcamGUI/ObjectUI.py:159 #: flatcamGUI/ObjectUI.py:166 msgid "Edited value is within limits." msgstr "Der bearbeitete Wert liegt innerhalb der Grenzen." diff --git a/locale/en/LC_MESSAGES/strings.po b/locale/en/LC_MESSAGES/strings.po index aa8f50e2..8a3c7896 100644 --- a/locale/en/LC_MESSAGES/strings.po +++ b/locale/en/LC_MESSAGES/strings.po @@ -2597,12 +2597,12 @@ msgstr "Save the Tools Database information's." msgid "processes running." msgstr "processes running." -#: FlatCAMTool.py:245 FlatCAMTool.py:252 flatcamGUI/ObjectUI.py:157 +#: AppTool.py:245 AppTool.py:252 flatcamGUI/ObjectUI.py:157 #: flatcamGUI/ObjectUI.py:164 msgid "Edited value is out of range" msgstr "Edited value is out of range" -#: FlatCAMTool.py:247 FlatCAMTool.py:254 flatcamGUI/ObjectUI.py:159 +#: AppTool.py:247 AppTool.py:254 flatcamGUI/ObjectUI.py:159 #: flatcamGUI/ObjectUI.py:166 msgid "Edited value is within limits." msgstr "Edited value is within limits." diff --git a/locale/es/LC_MESSAGES/strings.po b/locale/es/LC_MESSAGES/strings.po index b44e0a31..88f787a9 100644 --- a/locale/es/LC_MESSAGES/strings.po +++ b/locale/es/LC_MESSAGES/strings.po @@ -2640,12 +2640,12 @@ msgstr "Guarde la información de la base de datos de herramientas." msgid "processes running." msgstr "procesos en ejecución." -#: FlatCAMTool.py:245 FlatCAMTool.py:252 flatcamGUI/ObjectUI.py:157 +#: AppTool.py:245 AppTool.py:252 flatcamGUI/ObjectUI.py:157 #: flatcamGUI/ObjectUI.py:164 msgid "Edited value is out of range" msgstr "El valor editado está fuera de rango" -#: FlatCAMTool.py:247 FlatCAMTool.py:254 flatcamGUI/ObjectUI.py:159 +#: AppTool.py:247 AppTool.py:254 flatcamGUI/ObjectUI.py:159 #: flatcamGUI/ObjectUI.py:166 msgid "Edited value is within limits." msgstr "El valor editado está dentro de los límites." diff --git a/locale/fr/LC_MESSAGES/strings.po b/locale/fr/LC_MESSAGES/strings.po index 54f4a236..ab74c9a0 100644 --- a/locale/fr/LC_MESSAGES/strings.po +++ b/locale/fr/LC_MESSAGES/strings.po @@ -2630,12 +2630,12 @@ msgstr "Enregistrez les informations de la base de données des outils." msgid "processes running." msgstr "processus en cours d'exécution." -#: FlatCAMTool.py:245 FlatCAMTool.py:252 flatcamGUI/ObjectUI.py:157 +#: AppTool.py:245 AppTool.py:252 flatcamGUI/ObjectUI.py:157 #: flatcamGUI/ObjectUI.py:164 msgid "Edited value is out of range" msgstr "La valeur modifiée est hors limites" -#: FlatCAMTool.py:247 FlatCAMTool.py:254 flatcamGUI/ObjectUI.py:159 +#: AppTool.py:247 AppTool.py:254 flatcamGUI/ObjectUI.py:159 #: flatcamGUI/ObjectUI.py:166 msgid "Edited value is within limits." msgstr "La valeur modifiée est dans les limites." diff --git a/locale/hu/LC_MESSAGES/strings.po b/locale/hu/LC_MESSAGES/strings.po index 526e63b8..7a5a5c32 100644 --- a/locale/hu/LC_MESSAGES/strings.po +++ b/locale/hu/LC_MESSAGES/strings.po @@ -2597,12 +2597,12 @@ msgstr "Save the Tools Database information's." msgid "processes running." msgstr "processes running." -#: FlatCAMTool.py:245 FlatCAMTool.py:252 flatcamGUI/ObjectUI.py:157 +#: AppTool.py:245 AppTool.py:252 flatcamGUI/ObjectUI.py:157 #: flatcamGUI/ObjectUI.py:164 msgid "Edited value is out of range" msgstr "Edited value is out of range" -#: FlatCAMTool.py:247 FlatCAMTool.py:254 flatcamGUI/ObjectUI.py:159 +#: AppTool.py:247 AppTool.py:254 flatcamGUI/ObjectUI.py:159 #: flatcamGUI/ObjectUI.py:166 msgid "Edited value is within limits." msgstr "Edited value is within limits." diff --git a/locale/it/LC_MESSAGES/strings.po b/locale/it/LC_MESSAGES/strings.po index 33e36c59..a626cc78 100644 --- a/locale/it/LC_MESSAGES/strings.po +++ b/locale/it/LC_MESSAGES/strings.po @@ -2607,12 +2607,12 @@ msgstr "Salva le informazioni del Databse utensili." msgid "processes running." msgstr "processi in esecuzione." -#: FlatCAMTool.py:245 FlatCAMTool.py:252 flatcamGUI/ObjectUI.py:157 +#: AppTool.py:245 AppTool.py:252 flatcamGUI/ObjectUI.py:157 #: flatcamGUI/ObjectUI.py:164 msgid "Edited value is out of range" msgstr "Il valore modificato è fuori range" -#: FlatCAMTool.py:247 FlatCAMTool.py:254 flatcamGUI/ObjectUI.py:159 +#: AppTool.py:247 AppTool.py:254 flatcamGUI/ObjectUI.py:159 #: flatcamGUI/ObjectUI.py:166 msgid "Edited value is within limits." msgstr "Il valore editato è entro i limiti." diff --git a/locale/pt_BR/LC_MESSAGES/strings.po b/locale/pt_BR/LC_MESSAGES/strings.po index 0c56d5bf..60b86976 100644 --- a/locale/pt_BR/LC_MESSAGES/strings.po +++ b/locale/pt_BR/LC_MESSAGES/strings.po @@ -2622,12 +2622,12 @@ msgstr "Salve as informações do banco de dados de ferramentas." msgid "processes running." msgstr "processos executando." -#: FlatCAMTool.py:245 FlatCAMTool.py:252 flatcamGUI/ObjectUI.py:157 +#: AppTool.py:245 AppTool.py:252 flatcamGUI/ObjectUI.py:157 #: flatcamGUI/ObjectUI.py:164 msgid "Edited value is out of range" msgstr "Valor fora da faixa" -#: FlatCAMTool.py:247 FlatCAMTool.py:254 flatcamGUI/ObjectUI.py:159 +#: AppTool.py:247 AppTool.py:254 flatcamGUI/ObjectUI.py:159 #: flatcamGUI/ObjectUI.py:166 msgid "Edited value is within limits." msgstr "O valor editado está dentro dos limites." diff --git a/locale/ro/LC_MESSAGES/strings.po b/locale/ro/LC_MESSAGES/strings.po index 3e7d19d2..3bdd2846 100644 --- a/locale/ro/LC_MESSAGES/strings.po +++ b/locale/ro/LC_MESSAGES/strings.po @@ -2631,12 +2631,12 @@ msgstr "Salvați informațiile din DB de Unelte." msgid "processes running." msgstr "procesele care rulează." -#: FlatCAMTool.py:245 FlatCAMTool.py:252 flatcamGUI/ObjectUI.py:157 +#: AppTool.py:245 AppTool.py:252 flatcamGUI/ObjectUI.py:157 #: flatcamGUI/ObjectUI.py:164 msgid "Edited value is out of range" msgstr "Valoarea editată este in afara limitelor" -#: FlatCAMTool.py:247 FlatCAMTool.py:254 flatcamGUI/ObjectUI.py:159 +#: AppTool.py:247 AppTool.py:254 flatcamGUI/ObjectUI.py:159 #: flatcamGUI/ObjectUI.py:166 msgid "Edited value is within limits." msgstr "Valoarea editată este in limite." diff --git a/locale/ru/LC_MESSAGES/strings.po b/locale/ru/LC_MESSAGES/strings.po index 3b3e3dc3..a3f1380f 100644 --- a/locale/ru/LC_MESSAGES/strings.po +++ b/locale/ru/LC_MESSAGES/strings.po @@ -2614,12 +2614,12 @@ msgstr "Сохраните информацию базы данных инстр msgid "processes running." msgstr "процессы запущены." -#: FlatCAMTool.py:245 FlatCAMTool.py:252 flatcamGUI/ObjectUI.py:157 +#: AppTool.py:245 AppTool.py:252 flatcamGUI/ObjectUI.py:157 #: flatcamGUI/ObjectUI.py:164 msgid "Edited value is out of range" msgstr "Отредактированное значение находится вне диапазона" -#: FlatCAMTool.py:247 FlatCAMTool.py:254 flatcamGUI/ObjectUI.py:159 +#: AppTool.py:247 AppTool.py:254 flatcamGUI/ObjectUI.py:159 #: flatcamGUI/ObjectUI.py:166 msgid "Edited value is within limits." msgstr "Отредактированное значение находится в пределах нормы." diff --git a/locale_template/strings.pot b/locale_template/strings.pot index fec4a64a..3ac81693 100644 --- a/locale_template/strings.pot +++ b/locale_template/strings.pot @@ -2289,12 +2289,12 @@ msgstr "" msgid "processes running." msgstr "" -#: FlatCAMTool.py:245 FlatCAMTool.py:252 flatcamGUI/ObjectUI.py:157 +#: AppTool.py:245 AppTool.py:252 flatcamGUI/ObjectUI.py:157 #: flatcamGUI/ObjectUI.py:164 msgid "Edited value is out of range" msgstr "" -#: FlatCAMTool.py:247 FlatCAMTool.py:254 flatcamGUI/ObjectUI.py:159 +#: AppTool.py:247 AppTool.py:254 flatcamGUI/ObjectUI.py:159 #: flatcamGUI/ObjectUI.py:166 msgid "Edited value is within limits." msgstr "" diff --git a/preprocessors/Berta_CNC.py b/preprocessors/Berta_CNC.py index 2b2cc5c1..c17028c1 100644 --- a/preprocessors/Berta_CNC.py +++ b/preprocessors/Berta_CNC.py @@ -13,7 +13,7 @@ from AppPreProcessor import * -class Berta_CNC(FlatCAMPostProc): +class Berta_CNC(PreProc): include_header = True coordinate_format = "%.*f" diff --git a/preprocessors/GRBL_laser.py b/preprocessors/GRBL_laser.py index 7f1c025a..052a4898 100644 --- a/preprocessors/GRBL_laser.py +++ b/preprocessors/GRBL_laser.py @@ -12,7 +12,7 @@ from AppPreProcessor import * # is compatible with almost any version of Grbl. -class GRBL_laser(FlatCAMPostProc): +class GRBL_laser(PreProc): include_header = True coordinate_format = "%.*f" diff --git a/preprocessors/ISEL_CNC.py b/preprocessors/ISEL_CNC.py index 3a92c9f8..3d27a12e 100644 --- a/preprocessors/ISEL_CNC.py +++ b/preprocessors/ISEL_CNC.py @@ -9,7 +9,7 @@ from AppPreProcessor import * -class ISEL_CNC(FlatCAMPostProc): +class ISEL_CNC(PreProc): include_header = True coordinate_format = "%.*f" feedrate_format = '%.*f' diff --git a/preprocessors/ISEL_ICP_CNC.py b/preprocessors/ISEL_ICP_CNC.py index d8f59acd..e2690279 100644 --- a/preprocessors/ISEL_ICP_CNC.py +++ b/preprocessors/ISEL_ICP_CNC.py @@ -9,7 +9,7 @@ from AppPreProcessor import * -class ISEL_ICP_CNC(FlatCAMPostProc): +class ISEL_ICP_CNC(PreProc): include_header = False def start_code(self, p): diff --git a/preprocessors/Marlin.py b/preprocessors/Marlin.py index 539d27d8..a88e8e7d 100644 --- a/preprocessors/Marlin.py +++ b/preprocessors/Marlin.py @@ -9,7 +9,7 @@ from AppPreProcessor import * -class Marlin(FlatCAMPostProc): +class Marlin(PreProc): include_header = True coordinate_format = "%.*f" diff --git a/preprocessors/Marlin_laser_FAN_pin.py b/preprocessors/Marlin_laser_FAN_pin.py index fc9e5557..94223295 100644 --- a/preprocessors/Marlin_laser_FAN_pin.py +++ b/preprocessors/Marlin_laser_FAN_pin.py @@ -9,7 +9,7 @@ from AppPreProcessor import * -class Marlin_laser_FAN_pin(FlatCAMPostProc): +class Marlin_laser_FAN_pin(PreProc): include_header = True coordinate_format = "%.*f" diff --git a/preprocessors/Marlin_laser_Spindle_pin.py b/preprocessors/Marlin_laser_Spindle_pin.py index 5721a1c0..9e98c5c3 100644 --- a/preprocessors/Marlin_laser_Spindle_pin.py +++ b/preprocessors/Marlin_laser_Spindle_pin.py @@ -9,7 +9,7 @@ from AppPreProcessor import * -class Marlin_laser_Spindle_pin(FlatCAMPostProc): +class Marlin_laser_Spindle_pin(PreProc): include_header = True coordinate_format = "%.*f" diff --git a/preprocessors/Paste_1.py b/preprocessors/Paste_1.py index b08b1473..4de695d2 100644 --- a/preprocessors/Paste_1.py +++ b/preprocessors/Paste_1.py @@ -9,7 +9,7 @@ from AppPreProcessor import * -class Paste_1(FlatCAMPostProc_Tools): +class Paste_1(AppPreProcTools): include_header = True coordinate_format = "%.*f" diff --git a/preprocessors/Repetier.py b/preprocessors/Repetier.py index 74e70773..eace3dff 100644 --- a/preprocessors/Repetier.py +++ b/preprocessors/Repetier.py @@ -9,7 +9,7 @@ from AppPreProcessor import * -class Repetier(FlatCAMPostProc): +class Repetier(PreProc): include_header = True coordinate_format = "%.*f" diff --git a/preprocessors/Roland_MDX_20.py b/preprocessors/Roland_MDX_20.py index 26c3662c..aaafb9b8 100644 --- a/preprocessors/Roland_MDX_20.py +++ b/preprocessors/Roland_MDX_20.py @@ -11,7 +11,7 @@ from AppPreProcessor import * # for Roland Preprocessors it is mandatory for the preprocessor name (python file and class name, both of them must be # the same) to contain the following keyword, case-sensitive: 'Roland' without the quotes. -class Roland_MDX_20(FlatCAMPostProc): +class Roland_MDX_20(PreProc): include_header = False coordinate_format = "%.1f" diff --git a/preprocessors/Toolchange_Custom.py b/preprocessors/Toolchange_Custom.py index 88de5435..da299c4e 100644 --- a/preprocessors/Toolchange_Custom.py +++ b/preprocessors/Toolchange_Custom.py @@ -9,7 +9,7 @@ from AppPreProcessor import * -class Toolchange_Custom(FlatCAMPostProc): +class Toolchange_Custom(PreProc): include_header = True coordinate_format = "%.*f" diff --git a/preprocessors/Toolchange_Manual.py b/preprocessors/Toolchange_Manual.py index c113bbfc..ba2e8fda 100644 --- a/preprocessors/Toolchange_Manual.py +++ b/preprocessors/Toolchange_Manual.py @@ -9,7 +9,7 @@ from AppPreProcessor import * -class Toolchange_Manual(FlatCAMPostProc): +class Toolchange_Manual(PreProc): include_header = True coordinate_format = "%.*f" diff --git a/preprocessors/Toolchange_Probe_MACH3.py b/preprocessors/Toolchange_Probe_MACH3.py index 818327d2..1234226d 100644 --- a/preprocessors/Toolchange_Probe_MACH3.py +++ b/preprocessors/Toolchange_Probe_MACH3.py @@ -9,7 +9,7 @@ from AppPreProcessor import * -class Toolchange_Probe_MACH3(FlatCAMPostProc): +class Toolchange_Probe_MACH3(PreProc): include_header = True coordinate_format = "%.*f" diff --git a/preprocessors/default.py b/preprocessors/default.py index 87d0c56c..7da50390 100644 --- a/preprocessors/default.py +++ b/preprocessors/default.py @@ -9,7 +9,7 @@ from AppPreProcessor import * -class default(FlatCAMPostProc): +class default(PreProc): include_header = True coordinate_format = "%.*f" diff --git a/preprocessors/grbl_11.py b/preprocessors/grbl_11.py index 75bb8556..21aed110 100644 --- a/preprocessors/grbl_11.py +++ b/preprocessors/grbl_11.py @@ -9,7 +9,7 @@ from AppPreProcessor import * -class grbl_11(FlatCAMPostProc): +class grbl_11(PreProc): include_header = True coordinate_format = "%.*f" diff --git a/preprocessors/hpgl.py b/preprocessors/hpgl.py index 61ffc0c6..5126d01d 100644 --- a/preprocessors/hpgl.py +++ b/preprocessors/hpgl.py @@ -11,7 +11,7 @@ from AppPreProcessor import * # for Roland Preprocessors it is mandatory for the preprocessor name (python file and class name, both of them must be # the same) to contain the following keyword, case-sensitive: 'Roland' without the quotes. -class hpgl(FlatCAMPostProc): +class hpgl(PreProc): include_header = True coordinate_format = "%.*f" diff --git a/preprocessors/line_xyz.py b/preprocessors/line_xyz.py index 6beb432c..8bdbc97c 100644 --- a/preprocessors/line_xyz.py +++ b/preprocessors/line_xyz.py @@ -9,7 +9,7 @@ from AppPreProcessor import * -class line_xyz(FlatCAMPostProc): +class line_xyz(PreProc): include_header = True coordinate_format = "%.*f" From 710a84b44237d53a23a76c6236297e6816a7faa2 Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Mon, 18 May 2020 16:39:26 +0300 Subject: [PATCH 46/99] - more refactoring class names - moved some of the methods from the App class to the ObjectCollection class --- App.py | 256 +--- AppDatabase.py | 2 +- AppEditors/FlatCAMExcEditor.py | 6 +- AppEditors/FlatCAMGeoEditor.py | 6 +- AppEditors/FlatCAMGrbEditor.py | 8 +- AppGUI/{FlatCAMGUI.py => MainGUI.py} | 38 +- AppGUI/ObjectUI.py | 6 +- AppGUI/preferences/PreferencesUIManager.py | 20 +- .../general/GeneralGUIPrefGroupUI.py | 4 +- AppObjects/FlatCAMExcellon.py | 6 +- AppObjects/FlatCAMGeometry.py | 4 +- AppObjects/FlatCAMGerber.py | 8 +- AppObjects/ObjectCollection.py | 200 +++- AppParsers/ParseGerber.py | 2 +- AppTools/ToolCutOut.py | 2 +- AppTools/ToolImage.py | 2 +- AppTools/ToolNCC.py | 50 +- AppTools/ToolOptimal.py | 4 +- AppTools/ToolPDF.py | 4 +- AppTools/ToolPaint.py | 32 +- AppTools/ToolPcbWizard.py | 2 +- AppTools/ToolShell.py | 2 +- AppTools/ToolSub.py | 4 +- CHANGELOG.md | 14 +- FlatCAM.py | 2 +- camlib.py | 10 +- defaults.py | 4 +- locale/de/LC_MESSAGES/strings.po | 1056 ++++++++--------- locale/en/LC_MESSAGES/strings.po | 1056 ++++++++--------- locale/es/LC_MESSAGES/strings.po | 1056 ++++++++--------- locale/fr/LC_MESSAGES/strings.po | 1056 ++++++++--------- locale/hu/LC_MESSAGES/strings.po | 1056 ++++++++--------- locale/it/LC_MESSAGES/strings.po | 1056 ++++++++--------- locale/pt_BR/LC_MESSAGES/strings.po | 1056 ++++++++--------- locale/ro/LC_MESSAGES/strings.po | 1056 ++++++++--------- locale/ru/LC_MESSAGES/strings.po | 1056 ++++++++--------- locale_template/strings.pot | 980 +++++++-------- tclCommands/TclCommandImportSvg.py | 2 +- tclCommands/TclCommandOpenDXF.py | 2 +- tclCommands/TclCommandOpenSVG.py | 2 +- 40 files changed, 5592 insertions(+), 5596 deletions(-) rename AppGUI/{FlatCAMGUI.py => MainGUI.py} (99%) diff --git a/App.py b/App.py index 64799ab9..dbd28abf 100644 --- a/App.py +++ b/App.py @@ -70,7 +70,7 @@ from camlib import to_dict, dict2obj, ET, ParseError, Geometry, CNCjob # FlatCAM AppGUI from AppGUI.PlotCanvas import * from AppGUI.PlotCanvasLegacy import * -from AppGUI.FlatCAMGUI import * +from AppGUI.MainGUI import * from AppGUI.GUIElements import FCFileSaveDialog, message_dialog, FlatCAMSystemTray # FlatCAM Pre-processors @@ -417,7 +417,7 @@ class App(QtCore.QObject): fp.close() # Application directory. CHDIR to it. Otherwise, trying to load - # AppGUI icons will fail as their path is relative. + # GUI icons will fail as their path is relative. # This will fail under cx_freeze ... self.app_home = os.path.dirname(os.path.realpath(__file__)) @@ -496,7 +496,7 @@ class App(QtCore.QObject): show_splash = 0 # ########################################################################################################### - # ######################################### Initialize AppGUI ################################################## + # ######################################### Initialize GUI ################################################## # ########################################################################################################### # FlatCAM colors used in plotting @@ -505,7 +505,7 @@ class App(QtCore.QObject): self.FC_light_blue = '#a5a5ffbf' self.FC_dark_blue = '#0000ffbf' - self.ui = FlatCAMGUI(self) + self.ui = MainGUI(self) theme_settings = QtCore.QSettings("Open Source", "FlatCAM") if theme_settings.contains("theme"): @@ -581,14 +581,14 @@ class App(QtCore.QObject): self.ui.excellon_defaults_form.excellon_opt_group.pp_excellon_name_cb.addItem(name) # ########################################################################################################### - # ##################################### UPDATE PREFERENCES AppGUI FORMS ######################################## + # ##################################### UPDATE PREFERENCES GUI FORMS ######################################## # ########################################################################################################### self.preferencesUiManager = PreferencesUIManager(defaults=self.defaults, data_path=self.data_path, ui=self.ui, inform=self.inform) self.preferencesUiManager.defaults_write_form() - # When the self.defaults dictionary changes will update the Preferences AppGUI forms + # When the self.defaults dictionary changes will update the Preferences GUI forms self.defaults.set_change_callback(self.on_defaults_dict_change) # ########################################################################################################### @@ -596,7 +596,7 @@ class App(QtCore.QObject): # ################################ It's done only once after install ##################################### # ########################################################################################################### if self.defaults["first_run"] is True: - # ONLY AT FIRST STARTUP INIT THE AppGUI LAYOUT TO 'COMPACT' + # ONLY AT FIRST STARTUP INIT THE GUI LAYOUT TO 'COMPACT' initial_lay = 'minimal' self.ui.general_defaults_form.general_gui_group.on_layout(lay=initial_lay) @@ -957,7 +957,7 @@ class App(QtCore.QObject): act.triggered.connect(self.on_set_color_action_triggered) # ########################################################################################################### - # #################################### AppGUI PREFERENCES SIGNALS ############################################## + # #################################### GUI PREFERENCES SIGNALS ############################################## # ########################################################################################################### self.ui.general_defaults_form.general_app_group.units_radio.activated_custom.connect( @@ -973,7 +973,7 @@ class App(QtCore.QObject): self.ui.general_defaults_form.general_app_set_group.workspace_cb.stateChanged.connect(self.on_workspace) # ########################################################################################################### - # ######################################## AppGUI SETTINGS SIGNALS ############################################# + # ######################################## GUI SETTINGS SIGNALS ############################################# # ########################################################################################################### self.ui.general_defaults_form.general_app_set_group.cursor_radio.activated_custom.connect(self.on_cursor_type) @@ -998,10 +998,7 @@ class App(QtCore.QObject): self.ui.general_defaults_form.general_app_group.portability_cb.stateChanged.connect(self.on_portable_checked) # Object list - self.collection.view.activated.connect(self.on_row_activated) - self.collection.item_selected.connect(self.on_row_selected) - - self.object_status_changed.connect(self.on_collection_updated) + self.object_status_changed.connect(self.collection.on_collection_updated) # Make sure that when the Excellon loading parameters are changed, the change is reflected in the # Export Excellon parameters. @@ -1606,7 +1603,7 @@ class App(QtCore.QObject): App.log.debug("END of constructor. Releasing control.") # ########################################################################################################### - # ########################################## SHOW AppGUI ####################################################### + # ########################################## SHOW GUI ####################################################### # ########################################################################################################### # if the app is not started as headless, show it @@ -2267,7 +2264,7 @@ class App(QtCore.QObject): self.geo_editor.deactivate() - # restore AppGUI to the Selected TAB + # restore GUI to the Selected TAB # Remove anything else in the AppGUI self.ui.tool_scroll_area.takeWidget() @@ -2306,7 +2303,7 @@ class App(QtCore.QObject): self.inform.emit('[success] %s' % _("Editor exited. Editor content saved.")) - # restore AppGUI to the Selected TAB + # restore GUI to the Selected TAB # Remove anything else in the AppGUI self.ui.selected_scroll_area.takeWidget() @@ -2318,7 +2315,7 @@ class App(QtCore.QObject): self.exc_editor.deactivate() - # restore AppGUI to the Selected TAB + # restore GUI to the Selected TAB # Remove anything else in the AppGUI self.ui.tool_scroll_area.takeWidget() @@ -2671,7 +2668,7 @@ class App(QtCore.QObject): def new_object(self, kind, name, initialize, plot=True, autoselected=True): """ Creates a new specialized FlatCAMObj and attaches it to the application, - this is, updates the AppGUI accordingly, any other records and plots it. + this is, updates the GUI accordingly, any other records and plots it. This method is thread-safe. Notes: @@ -3568,7 +3565,7 @@ class App(QtCore.QObject): def on_portable_checked(self, state): """ - Callback called when the checkbox in Preferences AppGUI is checked. + Callback called when the checkbox in Preferences GUI is checked. It will set the application as portable by creating the preferences and recent files in the 'config' folder found in the FlatCAM installation folder. @@ -4125,7 +4122,7 @@ class App(QtCore.QObject): def on_defaults_dict_change(self, field): """ - Called whenever a key changed in the self.defaults dictionary. It will set the required AppGUI element in the + Called whenever a key changed in the self.defaults dictionary. It will set the required GUI element in the Edit -> Preferences tab window. :param field: the key of the self.defaults dictionary that was changed. @@ -4401,7 +4398,7 @@ class App(QtCore.QObject): self.preferencesUiManager.defaults_read_form() # the self.preferencesUiManager.defaults_read_form() will update all defaults values - # in self.defaults from the AppGUI elements but + # in self.defaults from the GUI elements but # I don't want it for the grid values, so I update them here self.defaults['global_gridx'] = val_x self.defaults['global_gridy'] = val_y @@ -6068,8 +6065,7 @@ class App(QtCore.QObject): sel_obj.rotate(-float(num), point=(px, py)) sel_obj.plot() self.object_changed.emit(sel_obj) - self.inform.emit('[success] %s' % - _("Rotation done.")) + self.inform.emit('[success] %s' % _("Rotation done.")) except Exception as e: self.inform.emit('[ERROR_NOTCL] %s: %s' % (_("Rotation movement was not executed."), str(e))) return @@ -6088,8 +6084,7 @@ class App(QtCore.QObject): yminlist = [] if not obj_list: - self.inform.emit('[WARNING_NOTCL] %s' % - _("No object selected to Skew/Shear on X axis.")) + self.inform.emit('[WARNING_NOTCL] %s' % _("No object selected to Skew/Shear on X axis.")) else: skewxbox = FCInputDialog(title=_("Transform"), text=_("Enter the Angle value:"), min=-360, max=360, decimals=4, @@ -6110,8 +6105,7 @@ class App(QtCore.QObject): obj.skew(num, 0, point=(xminimal, yminimal)) obj.plot() self.object_changed.emit(obj) - self.inform.emit('[success] %s' % - _("Skew on X axis done.")) + self.inform.emit('[success] %s' % _("Skew on X axis done.")) def on_skewy(self): """ @@ -6127,8 +6121,7 @@ class App(QtCore.QObject): yminlist = [] if not obj_list: - self.inform.emit('[WARNING_NOTCL] %s' % - _("No object selected to Skew/Shear on Y axis.")) + self.inform.emit('[WARNING_NOTCL] %s' % _("No object selected to Skew/Shear on Y axis.")) else: skewybox = FCInputDialog(title=_("Transform"), text=_("Enter the Angle value:"), min=-360, max=360, decimals=4, @@ -6149,8 +6142,7 @@ class App(QtCore.QObject): obj.skew(0, num, point=(xminimal, yminimal)) obj.plot() self.object_changed.emit(obj) - self.inform.emit('[success] %s' % - _("Skew on Y axis done.")) + self.inform.emit('[success] %s' % _("Skew on Y axis done.")) def on_plots_updated(self): """ @@ -6186,202 +6178,6 @@ class App(QtCore.QObject): self.plot_all() - def on_row_activated(self, index): - if index.isValid(): - if index.internalPointer().parent_item != self.collection.root_item: - self.ui.notebook.setCurrentWidget(self.ui.selected_tab) - self.collection.on_item_activated(index) - - def on_row_selected(self, obj_name): - """ - This is a special string; when received it will make all Menu -> AppObjects entries unchecked - It mean we clicked outside of the items and deselected all - - :param obj_name: - :return: - """ - if obj_name == 'none': - for act in self.ui.menuobjects.actions(): - act.setChecked(False) - return - - # get the name of the selected objects and add them to a list - name_list = [] - for obj in self.collection.get_selected(): - name_list.append(obj.options['name']) - - # set all actions as unchecked but the ones selected make them checked - for act in self.ui.menuobjects.actions(): - act.setChecked(False) - if act.text() in name_list: - act.setChecked(True) - - def on_collection_updated(self, obj, state, old_name): - """ - Create a menu from the object loaded in the collection. - - :param obj: object that was changed (added, deleted, renamed) - :param state: what was done with the object. Can be: added, deleted, delete_all, renamed - :param old_name: the old name of the object before the action that triggered this slot happened - :return: None - """ - icon_files = { - "gerber": self.resource_location + "/flatcam_icon16.png", - "excellon": self.resource_location + "/drill16.png", - "cncjob": self.resource_location + "/cnc16.png", - "geometry": self.resource_location + "/geometry16.png", - "script": self.resource_location + "/script_new16.png", - "document": self.resource_location + "/notes16_1.png" - } - - if state == 'append': - for act in self.ui.menuobjects.actions(): - try: - act.triggered.disconnect() - except TypeError: - pass - self.ui.menuobjects.clear() - - gerber_list = [] - exc_list = [] - cncjob_list = [] - geo_list = [] - script_list = [] - doc_list = [] - - for name in self.collection.get_names(): - obj_named = self.collection.get_by_name(name) - if obj_named.kind == 'gerber': - gerber_list.append(name) - elif obj_named.kind == 'excellon': - exc_list.append(name) - elif obj_named.kind == 'cncjob': - cncjob_list.append(name) - elif obj_named.kind == 'geometry': - geo_list.append(name) - elif obj_named.kind == 'script': - script_list.append(name) - elif obj_named.kind == 'document': - doc_list.append(name) - - def add_act(o_name): - obj_for_icon = self.collection.get_by_name(o_name) - add_action = QtWidgets.QAction(parent=self.ui.menuobjects) - add_action.setCheckable(True) - add_action.setText(o_name) - add_action.setIcon(QtGui.QIcon(icon_files[obj_for_icon.kind])) - add_action.triggered.connect( - lambda: self.collection.set_active(o_name) if add_action.isChecked() is True else - self.collection.set_inactive(o_name)) - self.ui.menuobjects.addAction(add_action) - - for name in gerber_list: - add_act(name) - self.ui.menuobjects.addSeparator() - - for name in exc_list: - add_act(name) - self.ui.menuobjects.addSeparator() - - for name in cncjob_list: - add_act(name) - self.ui.menuobjects.addSeparator() - - for name in geo_list: - add_act(name) - self.ui.menuobjects.addSeparator() - - for name in script_list: - add_act(name) - self.ui.menuobjects.addSeparator() - - for name in doc_list: - add_act(name) - - self.ui.menuobjects.addSeparator() - self.ui.menuobjects_selall = self.ui.menuobjects.addAction( - QtGui.QIcon(self.resource_location + '/select_all.png'), - _('Select All') - ) - self.ui.menuobjects_unselall = self.ui.menuobjects.addAction( - QtGui.QIcon(self.resource_location + '/deselect_all32.png'), - _('Deselect All') - ) - self.ui.menuobjects_selall.triggered.connect(lambda: self.on_objects_selection(True)) - self.ui.menuobjects_unselall.triggered.connect(lambda: self.on_objects_selection(False)) - - elif state == 'delete': - for act in self.ui.menuobjects.actions(): - if act.text() == obj.options['name']: - try: - act.triggered.disconnect() - except TypeError: - pass - self.ui.menuobjects.removeAction(act) - break - elif state == 'rename': - for act in self.ui.menuobjects.actions(): - if act.text() == old_name: - add_action = QtWidgets.QAction(parent=self.ui.menuobjects) - add_action.setText(obj.options['name']) - add_action.setIcon(QtGui.QIcon(icon_files[obj.kind])) - add_action.triggered.connect( - lambda: self.collection.set_active(obj.options['name']) if add_action.isChecked() is True else - self.collection.set_inactive(obj.options['name'])) - - self.ui.menuobjects.insertAction(act, add_action) - - try: - act.triggered.disconnect() - except TypeError: - pass - self.ui.menuobjects.removeAction(act) - break - elif state == 'delete_all': - for act in self.ui.menuobjects.actions(): - try: - act.triggered.disconnect() - except TypeError: - pass - self.ui.menuobjects.clear() - - self.ui.menuobjects.addSeparator() - self.ui.menuobjects_selall = self.ui.menuobjects.addAction( - QtGui.QIcon(self.resource_location + '/select_all.png'), - _('Select All') - ) - self.ui.menuobjects_unselall = self.ui.menuobjects.addAction( - QtGui.QIcon(self.resource_location + '/deselect_all32.png'), - _('Deselect All') - ) - self.ui.menuobjects_selall.triggered.connect(lambda: self.on_objects_selection(True)) - self.ui.menuobjects_unselall.triggered.connect(lambda: self.on_objects_selection(False)) - - def on_objects_selection(self, on_off): - obj_list = self.collection.get_names() - - if on_off is True: - self.collection.set_all_active() - for act in self.ui.menuobjects.actions(): - try: - act.setChecked(True) - except Exception: - pass - if obj_list: - self.inform.emit('[selected] %s' % _("All objects are selected.")) - else: - self.collection.set_all_inactive() - for act in self.ui.menuobjects.actions(): - try: - act.setChecked(False) - except Exception: - pass - - if obj_list: - self.inform.emit('%s' % _("AppObjects selection is cleared.")) - else: - self.inform.emit('') - def grid_status(self): return True if self.ui.grid_snap_btn.isChecked() else False @@ -6881,7 +6677,7 @@ class App(QtCore.QObject): curr_sel_obj.selection_shape_drawn = True elif curr_sel_obj.options['name'] not in self.objects_under_the_click_list: - self.on_objects_selection(False) + self.collection.on_objects_selection(False) self.delete_selection_shape() curr_sel_obj.selection_shape_drawn = False @@ -6899,7 +6695,7 @@ class App(QtCore.QObject): self.draw_selection_shape(curr_sel_obj) curr_sel_obj.selection_shape_drawn = True else: - self.on_objects_selection(False) + self.collection.on_objects_selection(False) self.delete_selection_shape() if self.call_source != 'app': @@ -6941,7 +6737,7 @@ class App(QtCore.QObject): else: # deselect everything - self.on_objects_selection(False) + self.collection.on_objects_selection(False) # delete the possible selection box around a possible selected object self.delete_selection_shape() diff --git a/AppDatabase.py b/AppDatabase.py index 324ecc9b..aebf93d6 100644 --- a/AppDatabase.py +++ b/AppDatabase.py @@ -1623,7 +1623,7 @@ class ToolsDB2(QtWidgets.QWidget): # #################################################################### # #################################################################### - # AppGUI for the lower part of the window + # GUI for the lower part of the window # #################################################################### # #################################################################### diff --git a/AppEditors/FlatCAMExcEditor.py b/AppEditors/FlatCAMExcEditor.py index c8671180..2a4745f5 100644 --- a/AppEditors/FlatCAMExcEditor.py +++ b/AppEditors/FlatCAMExcEditor.py @@ -2415,7 +2415,7 @@ class FlatCAMExcEditor(QtCore.QObject): drill_count = QtWidgets.QTableWidgetItem('%d' % drill_cnt) drill_count.setFlags(QtCore.Qt.ItemIsEnabled) - # if the slot number is zero is better to not clutter the AppGUI with zero's so we print a space + # if the slot number is zero is better to not clutter the GUI with zero's so we print a space if slot_cnt > 0: slot_count = QtWidgets.QTableWidgetItem('%d' % slot_cnt) else: @@ -2532,9 +2532,9 @@ class FlatCAMExcEditor(QtCore.QObject): # make sure no rows are selected so the user have to click the correct row, meaning selecting the correct tool self.tools_table_exc.clearSelection() - # Remove anything else in the AppGUI Selected Tab + # Remove anything else in the GUI Selected Tab self.app.ui.selected_scroll_area.takeWidget() - # Put ourself in the AppGUI Selected Tab + # Put ourself in the GUI Selected Tab self.app.ui.selected_scroll_area.setWidget(self.exc_edit_widget) # Switch notebook to Selected page self.app.ui.notebook.setCurrentWidget(self.app.ui.selected_tab) diff --git a/AppEditors/FlatCAMGeoEditor.py b/AppEditors/FlatCAMGeoEditor.py index 160038b4..8dd1f61b 100644 --- a/AppEditors/FlatCAMGeoEditor.py +++ b/AppEditors/FlatCAMGeoEditor.py @@ -3463,7 +3463,7 @@ class FlatCAMGeoEditor(QtCore.QObject): """ :param opt: A option from the self.options dictionary - :param entry: A AppGUI element which text value is used + :param entry: A GUI element which text value is used :return: """ try: @@ -3480,7 +3480,7 @@ class FlatCAMGeoEditor(QtCore.QObject): """ :param goption: String. Can be either 'global_gridx' or 'global_gridy' - :param gentry: A AppGUI element which text value is read and used + :param gentry: A GUI element which text value is read and used :return: """ if goption not in ['global_gridx', 'global_gridy']: @@ -3567,7 +3567,7 @@ class FlatCAMGeoEditor(QtCore.QObject): self.units = self.app.defaults['units'].upper() self.decimals = self.app.decimals - # Remove anything else in the AppGUI Selected Tab + # Remove anything else in the GUI Selected Tab self.app.ui.selected_scroll_area.takeWidget() # Put ourselves in the AppGUI Selected Tab self.app.ui.selected_scroll_area.setWidget(self.geo_edit_widget) diff --git a/AppEditors/FlatCAMGrbEditor.py b/AppEditors/FlatCAMGrbEditor.py index c0b2acbb..4952e74b 100644 --- a/AppEditors/FlatCAMGrbEditor.py +++ b/AppEditors/FlatCAMGrbEditor.py @@ -3298,9 +3298,9 @@ class FlatCAMGrbEditor(QtCore.QObject): # make sure no rows are selected so the user have to click the correct row, meaning selecting the correct tool self.apertures_table.clearSelection() - # Remove anything else in the AppGUI Selected Tab + # Remove anything else in the GUI Selected Tab self.app.ui.selected_scroll_area.takeWidget() - # Put ourselves in the AppGUI Selected Tab + # Put ourselves in the GUI Selected Tab self.app.ui.selected_scroll_area.setWidget(self.grb_edit_widget) # Switch notebook to Selected page self.app.ui.notebook.setCurrentWidget(self.app.ui.selected_tab) @@ -4039,7 +4039,7 @@ class FlatCAMGrbEditor(QtCore.QObject): # else: # raise AttributeError # except AttributeError: - # # now that we have data (empty data actually), create the AppGUI interface and add it to the Tool Tab + # # now that we have data (empty data actually), create the GUI interface and add it to the Tool Tab # self.build_ui(first_run=True) # # and add the first aperture to have something to play with # self.on_aperture_add('10') @@ -4913,7 +4913,7 @@ class FlatCAMGrbEditor(QtCore.QObject): # def setup_ui_after_delayed_plot(self): # self.plot_finished.disconnect() # - # # now that we have data, create the AppGUI interface and add it to the Tool Tab + # # now that we have data, create the GUI interface and add it to the Tool Tab # self.build_ui(first_run=True) # self.plot_all() # diff --git a/AppGUI/FlatCAMGUI.py b/AppGUI/MainGUI.py similarity index 99% rename from AppGUI/FlatCAMGUI.py rename to AppGUI/MainGUI.py index 202d5582..38deda4b 100644 --- a/AppGUI/FlatCAMGUI.py +++ b/AppGUI/MainGUI.py @@ -41,13 +41,13 @@ if '_' not in builtins.__dict__: _ = gettext.gettext -class FlatCAMGUI(QtWidgets.QMainWindow): +class MainGUI(QtWidgets.QMainWindow): # Emitted when persistent window geometry needs to be retained geom_update = QtCore.pyqtSignal(int, int, int, int, int, name='geomUpdate') final_save = QtCore.pyqtSignal(name='saveBeforeExit') def __init__(self, app): - super(FlatCAMGUI, self).__init__() + super(MainGUI, self).__init__() self.app = app self.decimals = self.app.decimals @@ -55,7 +55,7 @@ class FlatCAMGUI(QtWidgets.QMainWindow): # Divine icon pack by Ipapun @ finicons.com # ####################################################################### - # ############ BUILDING THE AppGUI IS EXECUTED HERE ######################## + # ############ BUILDING THE GUI IS EXECUTED HERE ######################## # ####################################################################### # ####################################################################### @@ -497,9 +497,9 @@ class FlatCAMGUI(QtWidgets.QMainWindow): QtGui.QIcon(self.app.resource_location + '/hud_32.png'), _("Toggle HUD\tAlt+M")) # ######################################################################## - # ########################## AppObjects # ################################### + # ########################## Objects # ################################### # ######################################################################## - self.menuobjects = self.menu.addMenu(_('AppObjects')) + self.menuobjects = self.menu.addMenu(_('Objects')) self.menuobjects.addSeparator() self.menuobjects_selall = self.menuobjects.addAction( QtGui.QIcon(self.app.resource_location + '/select_all.png'), _('Select All')) @@ -763,7 +763,7 @@ class FlatCAMGUI(QtWidgets.QMainWindow): # ######################################################################## # IMPORTANT # - # The order: SPLITTER -> NOTEBOOK -> SNAP TOOLBAR is important and without it the AppGUI will not be initialized as + # The order: SPLITTER -> NOTEBOOK -> SNAP TOOLBAR is important and without it the GUI will not be initialized as # desired. self.splitter = QtWidgets.QSplitter() self.setCentralWidget(self.splitter) @@ -1319,11 +1319,11 @@ class FlatCAMGUI(QtWidgets.QMainWindow): self.pref_tab_bottom_layout_1.addWidget(self.pref_open_button) # Clear Settings - self.clear_btn = FCButton('%s' % _('Clear AppGUI Settings')) + self.clear_btn = FCButton('%s' % _('Clear GUI Settings')) self.clear_btn.setMinimumWidth(130) self.clear_btn.setToolTip( - _("Clear the AppGUI settings for FlatCAM,\n" + _("Clear the GUI settings for FlatCAM,\n" "such as: layout, gui state, style, hdpi support etc.") ) @@ -1539,7 +1539,7 @@ class FlatCAMGUI(QtWidgets.QMainWindow): # infobar.addWidget(self.progress_bar) # ######################################################################## - # ########################## SET AppGUI Elements # ########################## + # ########################## SET GUI Elements # ########################## # ######################################################################## self.app_icon = QtGui.QIcon() self.app_icon.addFile(self.app.resource_location + '/flatcam_icon16.png', QtCore.QSize(16, 16)) @@ -1562,7 +1562,7 @@ class FlatCAMGUI(QtWidgets.QMainWindow): self.setAcceptDrops(True) # ######################################################################## - # ########################## Build AppGUI # ################################# + # ########################## Build GUI # ################################# # ######################################################################## self.grid_snap_btn.setCheckable(True) self.corner_snap_btn.setCheckable(True) @@ -1595,7 +1595,7 @@ class FlatCAMGUI(QtWidgets.QMainWindow): if flat_settings.contains("saved_gui_state"): saved_gui_state = flat_settings.value('saved_gui_state') self.restoreState(saved_gui_state) - log.debug("FlatCAMGUI.__init__() --> UI state restored from QSettings.") + log.debug("MainGUI.__init__() --> UI state restored from QSettings.") self.corner_snap_btn.setVisible(False) self.snap_magnet.setVisible(False) @@ -1606,7 +1606,7 @@ class FlatCAMGUI(QtWidgets.QMainWindow): self.geo_edit_toolbar.setDisabled(True) self.grb_edit_toolbar.setDisabled(True) - log.debug("FlatCAMGUI.__init__() --> UI layout restored from QSettings. Layout = %s" % str(layout)) + log.debug("MainGUI.__init__() --> UI layout restored from QSettings. Layout = %s" % str(layout)) else: self.exc_edit_toolbar.setDisabled(True) self.geo_edit_toolbar.setDisabled(True) @@ -1615,7 +1615,7 @@ class FlatCAMGUI(QtWidgets.QMainWindow): flat_settings.setValue('layout', "standard") # This will write the setting to the platform specific storage. del flat_settings - log.debug("FlatCAMGUI.__init__() --> UI layout restored from defaults. QSettings set to 'standard'") + log.debug("MainGUI.__init__() --> UI layout restored from defaults. QSettings set to 'standard'") # construct the Toolbar Lock menu entry to the context menu of the QMainWindow self.lock_action = QtWidgets.QAction() @@ -1655,11 +1655,11 @@ class FlatCAMGUI(QtWidgets.QMainWindow): # restore the toolbar view self.restore_toolbar_view() - # restore the AppGUI geometry + # restore the GUI geometry self.restore_main_win_geom() # %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - # %%%%%%%%%%%%%%%%% AppGUI Building FINISHED %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + # %%%%%%%%%%%%%%%%% GUI Building FINISHED %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% # %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% # Variable to store the status of the fullscreen event @@ -1677,7 +1677,7 @@ class FlatCAMGUI(QtWidgets.QMainWindow): self.app.defaults["global_def_win_h"]) self.splitter.setSizes([self.app.defaults["global_def_notebook_width"], 0]) except KeyError as e: - log.debug("AppGUI.FlatCAMGUI.restore_main_win_geom() --> %s" % str(e)) + log.debug("AppGUI.MainGUI.restore_main_win_geom() --> %s" % str(e)) def restore_toolbar_view(self): """ @@ -1776,8 +1776,8 @@ class FlatCAMGUI(QtWidgets.QMainWindow): resource_loc = self.app.resource_location msgbox = QtWidgets.QMessageBox() - msgbox.setText(_("Are you sure you want to delete the AppGUI Settings? \n")) - msgbox.setWindowTitle(_("Clear AppGUI Settings")) + msgbox.setText(_("Are you sure you want to delete the GUI Settings? \n")) + msgbox.setWindowTitle(_("Clear GUI Settings")) msgbox.setWindowIcon(QtGui.QIcon(resource_loc + '/trash32.png')) bt_yes = msgbox.addButton(_('Yes'), QtWidgets.QMessageBox.YesRole) bt_no = msgbox.addButton(_('No'), QtWidgets.QMessageBox.NoRole) @@ -2082,7 +2082,7 @@ class FlatCAMGUI(QtWidgets.QMainWindow): # events out of the self.app.collection view (it's about Project Tab) are of type int if type(event) is int: key = event - # events from the AppGUI are of type QKeyEvent + # events from the GUI are of type QKeyEvent elif type(event) == QtGui.QKeyEvent: key = event.key() elif isinstance(event, mpl_key_event): # MatPlotLib key events are trickier to interpret than the rest diff --git a/AppGUI/ObjectUI.py b/AppGUI/ObjectUI.py index 59b5f139..1c271b68 100644 --- a/AppGUI/ObjectUI.py +++ b/AppGUI/ObjectUI.py @@ -2305,7 +2305,7 @@ class CNCObjectUI(ObjectUI): def __init__(self, app, parent=None): """ - Creates the user interface for CNCJob objects. AppGUI elements should + Creates the user interface for CNCJob objects. GUI elements should be placed in ``self.custom_box`` to preserve the layout. """ @@ -2638,7 +2638,7 @@ class ScriptObjectUI(ObjectUI): def __init__(self, app, parent=None): """ - Creates the user interface for Script objects. AppGUI elements should + Creates the user interface for Script objects. GUI elements should be placed in ``self.custom_box`` to preserve the layout. """ @@ -2705,7 +2705,7 @@ class DocumentObjectUI(ObjectUI): def __init__(self, app, parent=None): """ - Creates the user interface for Notes objects. AppGUI elements should + Creates the user interface for Notes objects. GUI elements should be placed in ``self.custom_box`` to preserve the layout. """ diff --git a/AppGUI/preferences/PreferencesUIManager.py b/AppGUI/preferences/PreferencesUIManager.py index 99eda5d9..640029d3 100644 --- a/AppGUI/preferences/PreferencesUIManager.py +++ b/AppGUI/preferences/PreferencesUIManager.py @@ -29,8 +29,8 @@ class PreferencesUIManager: :param defaults: a dictionary storage where all the application settings are stored :param data_path: a path to the file where all the preferences are stored for persistence - :param ui: reference to the FlatCAMGUI class which constructs the UI - :param inform: a pyqtSignal used to display information's in the StatusBar of the AppGUI + :param ui: reference to the MainGUI class which constructs the UI + :param inform: a pyqtSignal used to display information's in the StatusBar of the GUI """ self.defaults = defaults @@ -73,7 +73,7 @@ class PreferencesUIManager: "global_tpdf_lmargin": self.ui.general_defaults_form.general_app_group.lmargin_entry, "global_tpdf_rmargin": self.ui.general_defaults_form.general_app_group.rmargin_entry, - # General AppGUI Preferences + # General GUI Preferences "global_theme": self.ui.general_defaults_form.general_gui_group.theme_radio, "global_gray_icons": self.ui.general_defaults_form.general_gui_group.gray_icons_cb, "global_layout": self.ui.general_defaults_form.general_gui_group.layout_combo, @@ -91,7 +91,7 @@ class PreferencesUIManager: "global_proj_item_dis_color": self.ui.general_defaults_form.general_gui_group.proj_color_dis_entry, "global_project_autohide": self.ui.general_defaults_form.general_gui_group.project_autohide_cb, - # General AppGUI Settings + # General GUI Settings "global_gridx": self.ui.general_defaults_form.general_app_set_group.gridx_entry, "global_gridy": self.ui.general_defaults_form.general_app_set_group.gridy_entry, "global_snap_max": self.ui.general_defaults_form.general_app_set_group.snap_max_dist_entry, @@ -595,7 +595,7 @@ class PreferencesUIManager: def defaults_read_form(self): """ - Will read all the values in the Preferences AppGUI and update the defaults dictionary. + Will read all the values in the Preferences GUI and update the defaults dictionary. :return: None """ @@ -607,10 +607,10 @@ class PreferencesUIManager: def defaults_write_form(self, factor=None, fl_units=None, source_dict=None): """ - Will set the values for all the AppGUI elements in Preferences AppGUI based on the values found in the + Will set the values for all the GUI elements in Preferences GUI based on the values found in the self.defaults dictionary. - :param factor: will apply a factor to the values that written in the AppGUI elements + :param factor: will apply a factor to the values that written in the GUI elements :param fl_units: current measuring units in FlatCAM: Metric or Inch :param source_dict: the repository of options, usually is the self.defaults :return: None @@ -628,11 +628,11 @@ class PreferencesUIManager: """ Basically it is the worker in the self.defaults_write_form() - :param field: the AppGUI element in Preferences AppGUI to be updated + :param field: the GUI element in Preferences GUI to be updated :param factor: factor to be applied to the field parameter :param units: current FlatCAM measuring units :param defaults_dict: the defaults storage - :return: None, it updates AppGUI elements + :return: None, it updates GUI elements """ def_dict = self.defaults if defaults_dict is None else defaults_dict @@ -734,7 +734,7 @@ class PreferencesUIManager: self.ui.pref_close_button.clicked.connect(self.on_pref_close_button) self.ui.pref_defaults_button.clicked.connect(self.on_restore_defaults_preferences) - log.debug("Finished Preferences AppGUI form initialization.") + log.debug("Finished Preferences GUI form initialization.") def __init_color_pickers(self): # Init Gerber Plot Colors diff --git a/AppGUI/preferences/general/GeneralGUIPrefGroupUI.py b/AppGUI/preferences/general/GeneralGUIPrefGroupUI.py index 5d3a1eb6..f96c0fe8 100644 --- a/AppGUI/preferences/general/GeneralGUIPrefGroupUI.py +++ b/AppGUI/preferences/general/GeneralGUIPrefGroupUI.py @@ -23,7 +23,7 @@ class GeneralGUIPrefGroupUI(OptionsGroupUI): def __init__(self, decimals=4, parent=None): super(GeneralGUIPrefGroupUI, self).__init__(self, parent=parent) - self.setTitle(str(_("AppGUI Preferences"))) + self.setTitle(str(_("GUI Preferences"))) self.decimals = decimals # Create a grid layout for the Application general settings @@ -382,7 +382,7 @@ class GeneralGUIPrefGroupUI(OptionsGroupUI): self.layout.addStretch() # ############################################################################# - # ############################# AppGUI COLORS SIGNALS ############################ + # ############################# GUI COLORS SIGNALS ############################ # ############################################################################# # Setting selection (left - right) colors signals diff --git a/AppObjects/FlatCAMExcellon.py b/AppObjects/FlatCAMExcellon.py index ae800e18..a46d6388 100644 --- a/AppObjects/FlatCAMExcellon.py +++ b/AppObjects/FlatCAMExcellon.py @@ -389,7 +389,7 @@ class ExcellonObject(FlatCAMObj, Excellon): 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 AppGUI with zero's so we print a space + # 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) @@ -855,7 +855,7 @@ class ExcellonObject(FlatCAMObj, Excellon): 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 AppGUI elements values to storage + # there is no tool in tool table so we can't save the GUI elements values to storage return self.ui_disconnect() @@ -1778,7 +1778,7 @@ class ExcellonObject(FlatCAMObj, Excellon): 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 AppGUI elements values to storage + # 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 diff --git a/AppObjects/FlatCAMGeometry.py b/AppObjects/FlatCAMGeometry.py index b14f1f7e..2ff677d1 100644 --- a/AppObjects/FlatCAMGeometry.py +++ b/AppObjects/FlatCAMGeometry.py @@ -1320,7 +1320,7 @@ class GeometryObject(FlatCAMObj, Geometry): 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 AppGUI elements values to storage + # 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 @@ -1383,7 +1383,7 @@ class GeometryObject(FlatCAMObj, Geometry): 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 AppGUI elements values to storage + # 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 diff --git a/AppObjects/FlatCAMGerber.py b/AppObjects/FlatCAMGerber.py index 7e1f64ab..bda1ffd5 100644 --- a/AppObjects/FlatCAMGerber.py +++ b/AppObjects/FlatCAMGerber.py @@ -179,10 +179,10 @@ class GerberObject(FlatCAMObj, Gerber): def set_ui(self, ui): """ - Maps options with AppGUI inputs. - Connects AppGUI events to methods. + Maps options with GUI inputs. + Connects GUI events to methods. - :param ui: AppGUI object. + :param ui: GUI object. :type ui: GerberObjectUI :return: None """ @@ -243,7 +243,7 @@ class GerberObject(FlatCAMObj, Gerber): 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 AppGUI elements found in the slot function + # 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 diff --git a/AppObjects/ObjectCollection.py b/AppObjects/ObjectCollection.py index 60fc7d09..fb1318fd 100644 --- a/AppObjects/ObjectCollection.py +++ b/AppObjects/ObjectCollection.py @@ -324,7 +324,7 @@ class ObjectCollection(QtCore.QAbstractItemModel): font.setFamily("Seagoe UI") self.view.setFont(font) - # ## AppGUI Events + # ## GUI Events self.view.selectionModel().selectionChanged.connect(self.on_list_selection_change) # self.view.activated.connect(self.on_item_activated) self.view.keyPressed.connect(self.app.ui.keyPressEvent) @@ -334,6 +334,8 @@ class ObjectCollection(QtCore.QAbstractItemModel): self.click_modifier = None self.update_list_signal.connect(self.on_update_list_signal) + self.view.activated.connect(self.on_row_activated) + self.item_selected.connect(self.on_row_selected) def promise(self, obj_name): log.debug("Object %s has been promised." % obj_name) @@ -999,3 +1001,199 @@ class ObjectCollection(QtCore.QAbstractItemModel): def update_view(self): self.dataChanged.emit(QtCore.QModelIndex(), QtCore.QModelIndex()) + + def on_row_activated(self, index): + if index.isValid(): + if index.internalPointer().parent_item != self.root_item: + self.app.ui.notebook.setCurrentWidget(self.app.ui.selected_tab) + self.on_item_activated(index) + + def on_row_selected(self, obj_name): + """ + This is a special string; when received it will make all Menu -> AppObjects entries unchecked + It mean we clicked outside of the items and deselected all + + :param obj_name: + :return: + """ + if obj_name == 'none': + for act in self.app.ui.menuobjects.actions(): + act.setChecked(False) + return + + # get the name of the selected objects and add them to a list + name_list = [] + for obj in self.get_selected(): + name_list.append(obj.options['name']) + + # set all actions as unchecked but the ones selected make them checked + for act in self.app.ui.menuobjects.actions(): + act.setChecked(False) + if act.text() in name_list: + act.setChecked(True) + + def on_collection_updated(self, obj, state, old_name): + """ + Create a menu from the object loaded in the collection. + + :param obj: object that was changed (added, deleted, renamed) + :param state: what was done with the object. Can be: added, deleted, delete_all, renamed + :param old_name: the old name of the object before the action that triggered this slot happened + :return: None + """ + icon_files = { + "gerber": self.app.resource_location + "/flatcam_icon16.png", + "excellon": self.app.resource_location + "/drill16.png", + "cncjob": self.app.resource_location + "/cnc16.png", + "geometry": self.app.resource_location + "/geometry16.png", + "script": self.app.resource_location + "/script_new16.png", + "document": self.app.resource_location + "/notes16_1.png" + } + + if state == 'append': + for act in self.app.ui.menuobjects.actions(): + try: + act.triggered.disconnect() + except TypeError: + pass + self.app.ui.menuobjects.clear() + + gerber_list = [] + exc_list = [] + cncjob_list = [] + geo_list = [] + script_list = [] + doc_list = [] + + for name in self.get_names(): + obj_named = self.get_by_name(name) + if obj_named.kind == 'gerber': + gerber_list.append(name) + elif obj_named.kind == 'excellon': + exc_list.append(name) + elif obj_named.kind == 'cncjob': + cncjob_list.append(name) + elif obj_named.kind == 'geometry': + geo_list.append(name) + elif obj_named.kind == 'script': + script_list.append(name) + elif obj_named.kind == 'document': + doc_list.append(name) + + def add_act(o_name): + obj_for_icon = self.get_by_name(o_name) + add_action = QtWidgets.QAction(parent=self.app.ui.menuobjects) + add_action.setCheckable(True) + add_action.setText(o_name) + add_action.setIcon(QtGui.QIcon(icon_files[obj_for_icon.kind])) + add_action.triggered.connect( + lambda: self.set_active(o_name) if add_action.isChecked() is True else + self.set_inactive(o_name)) + self.app.ui.menuobjects.addAction(add_action) + + for name in gerber_list: + add_act(name) + self.app.ui.menuobjects.addSeparator() + + for name in exc_list: + add_act(name) + self.app.ui.menuobjects.addSeparator() + + for name in cncjob_list: + add_act(name) + self.app.ui.menuobjects.addSeparator() + + for name in geo_list: + add_act(name) + self.app.ui.menuobjects.addSeparator() + + for name in script_list: + add_act(name) + self.app.ui.menuobjects.addSeparator() + + for name in doc_list: + add_act(name) + + self.app.ui.menuobjects.addSeparator() + self.app.ui.menuobjects_selall = self.app.ui.menuobjects.addAction( + QtGui.QIcon(self.app.resource_location + '/select_all.png'), + _('Select All') + ) + self.app.ui.menuobjects_unselall = self.app.ui.menuobjects.addAction( + QtGui.QIcon(self.app.resource_location + '/deselect_all32.png'), + _('Deselect All') + ) + self.app.ui.menuobjects_selall.triggered.connect(lambda: self.on_objects_selection(True)) + self.app.ui.menuobjects_unselall.triggered.connect(lambda: self.on_objects_selection(False)) + + elif state == 'delete': + for act in self.app.ui.menuobjects.actions(): + if act.text() == obj.options['name']: + try: + act.triggered.disconnect() + except TypeError: + pass + self.app.ui.menuobjects.removeAction(act) + break + elif state == 'rename': + for act in self.app.ui.menuobjects.actions(): + if act.text() == old_name: + add_action = QtWidgets.QAction(parent=self.app.ui.menuobjects) + add_action.setText(obj.options['name']) + add_action.setIcon(QtGui.QIcon(icon_files[obj.kind])) + add_action.triggered.connect( + lambda: self.set_active(obj.options['name']) if add_action.isChecked() is True else + self.set_inactive(obj.options['name'])) + + self.app.ui.menuobjects.insertAction(act, add_action) + + try: + act.triggered.disconnect() + except TypeError: + pass + self.app.ui.menuobjects.removeAction(act) + break + elif state == 'delete_all': + for act in self.app.ui.menuobjects.actions(): + try: + act.triggered.disconnect() + except TypeError: + pass + self.app.ui.menuobjects.clear() + + self.app.ui.menuobjects.addSeparator() + self.app.ui.menuobjects_selall = self.app.ui.menuobjects.addAction( + QtGui.QIcon(self.app.resource_location + '/select_all.png'), + _('Select All') + ) + self.app.ui.menuobjects_unselall = self.app.ui.menuobjects.addAction( + QtGui.QIcon(self.app.resource_location + '/deselect_all32.png'), + _('Deselect All') + ) + self.app.ui.menuobjects_selall.triggered.connect(lambda: self.on_objects_selection(True)) + self.app.ui.menuobjects_unselall.triggered.connect(lambda: self.on_objects_selection(False)) + + def on_objects_selection(self, on_off): + obj_list = self.get_names() + + if on_off is True: + self.set_all_active() + for act in self.app.ui.menuobjects.actions(): + try: + act.setChecked(True) + except Exception: + pass + if obj_list: + self.app.inform.emit('[selected] %s' % _("All objects are selected.")) + else: + self.set_all_inactive() + for act in self.app.ui.menuobjects.actions(): + try: + act.setChecked(False) + except Exception: + pass + + if obj_list: + self.app.inform.emit('%s' % _("AppObjects selection is cleared.")) + else: + self.app.inform.emit('') diff --git a/AppParsers/ParseGerber.py b/AppParsers/ParseGerber.py index e3e26e4e..e17fd5d2 100644 --- a/AppParsers/ParseGerber.py +++ b/AppParsers/ParseGerber.py @@ -1416,7 +1416,7 @@ class Gerber(Geometry): # ######### Line did not match any pattern. Warn user. ########## # ################################################################ log.warning("Line ignored (%d): %s" % (line_num, gline)) - # provide the app with a way to process the AppGUI events when in a blocking loop + # provide the app with a way to process the GUI events when in a blocking loop QtWidgets.QApplication.processEvents() try: diff --git a/AppTools/ToolCutOut.py b/AppTools/ToolCutOut.py index 105eda45..45415b1c 100644 --- a/AppTools/ToolCutOut.py +++ b/AppTools/ToolCutOut.py @@ -1239,7 +1239,7 @@ class CutOut(AppTool): # events out of the self.app.collection view (it's about Project Tab) are of type int if type(event) is int: key = event - # events from the AppGUI are of type QKeyEvent + # events from the GUI are of type QKeyEvent elif type(event) == QtGui.QKeyEvent: key = event.key() elif isinstance(event, mpl_key_event): # MatPlotLib key events are trickier to interpret than the rest diff --git a/AppTools/ToolImage.py b/AppTools/ToolImage.py index 3b0a666b..1c2f1a5e 100644 --- a/AppTools/ToolImage.py +++ b/AppTools/ToolImage.py @@ -293,5 +293,5 @@ class ToolImage(AppTool): # Register recent file self.app.file_opened.emit("image", filename) - # AppGUI feedback + # GUI feedback self.app.inform.emit('[success] %s: %s' % (_("Opened"), filename)) diff --git a/AppTools/ToolNCC.py b/AppTools/ToolNCC.py index eefdd94b..65898339 100644 --- a/AppTools/ToolNCC.py +++ b/AppTools/ToolNCC.py @@ -620,7 +620,7 @@ class NonCopperClear(AppTool, Gerber): } """) self.tools_box.addWidget(self.reset_button) - # ############################ FINSIHED AppGUI ################################### + # ############################ FINSIHED GUI ################################### # ############################################################################# # ############################################################################# @@ -825,7 +825,7 @@ class NonCopperClear(AppTool, Gerber): def form_to_storage(self): if self.tools_table.rowCount() == 0: - # there is no tool in tool table so we can't save the AppGUI elements values to storage + # there is no tool in tool table so we can't save the GUI elements values to storage return self.blockSignals(True) @@ -853,7 +853,7 @@ class NonCopperClear(AppTool, Gerber): def on_apply_param_to_all_clicked(self): if self.tools_table.rowCount() == 0: - # there is no tool in tool table so we can't save the AppGUI elements values to storage + # there is no tool in tool table so we can't save the GUI elements values to storage log.debug("NonCopperClear.on_apply_param_to_all_clicked() --> no tool in Tools Table, aborting.") return @@ -1860,7 +1860,7 @@ class NonCopperClear(AppTool, Gerber): # events out of the self.app.collection view (it's about Project Tab) are of type int if type(event) is int: key = event - # events from the AppGUI are of type QKeyEvent + # events from the GUI are of type QKeyEvent elif type(event) == QtGui.QKeyEvent: key = event.key() elif isinstance(event, mpl_key_event): # MatPlotLib key events are trickier to interpret than the rest @@ -2102,7 +2102,7 @@ class NonCopperClear(AppTool, Gerber): "than isolation tool diameter.")) try: for geo_elem in isolated_geo: - # provide the app with a way to process the AppGUI events when in a blocking loop + # provide the app with a way to process the GUI events when in a blocking loop QtWidgets.QApplication.processEvents() if self.app.abort_flag: @@ -2295,7 +2295,7 @@ class NonCopperClear(AppTool, Gerber): Usage of the different one is related to when this function is called from a TcL command. - :param run_threaded: If True the method will be run in a threaded way suitable for AppGUI usage; if False + :param run_threaded: If True the method will be run in a threaded way suitable for GUI usage; if False it will run non-threaded for TclShell usage :return: """ @@ -2353,7 +2353,7 @@ class NonCopperClear(AppTool, Gerber): log.debug("NCC Tool. Normal copper clearing task started.") self.app.inform.emit(_("NCC Tool. Finished non-copper polygons. Normal copper clearing task started.")) - # provide the app with a way to process the AppGUI events when in a blocking loop + # provide the app with a way to process the GUI events when in a blocking loop if not run_threaded: QtWidgets.QApplication.processEvents() @@ -2397,7 +2397,7 @@ class NonCopperClear(AppTool, Gerber): # graceful abort requested by the user raise grace - # provide the app with a way to process the AppGUI events when in a blocking loop + # provide the app with a way to process the GUI events when in a blocking loop if not run_threaded: QtWidgets.QApplication.processEvents() @@ -2455,7 +2455,7 @@ class NonCopperClear(AppTool, Gerber): if len(area.geoms) > 0: pol_nr = 0 for p in area.geoms: - # provide the app with a way to process the AppGUI events when in a blocking loop + # provide the app with a way to process the GUI events when in a blocking loop if not run_threaded: QtWidgets.QApplication.processEvents() @@ -2606,7 +2606,7 @@ class NonCopperClear(AppTool, Gerber): log.debug("NCC Tool. Rest machining copper clearing task started.") app_obj.inform.emit('_(NCC Tool. Rest machining copper clearing task started.') - # provide the app with a way to process the AppGUI events when in a blocking loop + # provide the app with a way to process the GUI events when in a blocking loop if not run_threaded: QtWidgets.QApplication.processEvents() @@ -2648,7 +2648,7 @@ class NonCopperClear(AppTool, Gerber): # graceful abort requested by the user raise grace - # provide the app with a way to process the AppGUI events when in a blocking loop + # provide the app with a way to process the GUI events when in a blocking loop QtWidgets.QApplication.processEvents() app_obj.inform.emit('[success] %s = %s%s %s' % ( @@ -2690,7 +2690,7 @@ class NonCopperClear(AppTool, Gerber): # Area to clear for poly in cleared_by_last_tool: - # provide the app with a way to process the AppGUI events when in a blocking loop + # provide the app with a way to process the GUI events when in a blocking loop QtWidgets.QApplication.processEvents() if self.app.abort_flag: @@ -2731,7 +2731,7 @@ class NonCopperClear(AppTool, Gerber): p = p.buffer(0) if p is not None and p.is_valid: - # provide the app with a way to process the AppGUI events when in a blocking loop + # provide the app with a way to process the GUI events when in a blocking loop QtWidgets.QApplication.processEvents() if isinstance(p, Polygon): @@ -2763,7 +2763,7 @@ class NonCopperClear(AppTool, Gerber): elif isinstance(p, MultiPolygon): for poly in p: if poly is not None: - # provide the app with a way to process the AppGUI events when + # provide the app with a way to process the GUI events when # in a blocking loop QtWidgets.QApplication.processEvents() @@ -2954,7 +2954,7 @@ class NonCopperClear(AppTool, Gerber): :param tools_storage: whether to use the current tools_storage self.ncc_tools or a different one. Usage of the different one is related to when this function is called from a TcL command. :param plot: if True after the job is finished the result will be plotted, else it will not. - :param run_threaded: If True the method will be run in a threaded way suitable for AppGUI usage; if False it will + :param run_threaded: If True the method will be run in a threaded way suitable for GUI usage; if False it will run non-threaded for TclShell usage :return: """ @@ -3098,7 +3098,7 @@ class NonCopperClear(AppTool, Gerber): assert geo_obj.kind == 'geometry', \ "Initializer expected a GeometryObject, got %s" % type(geo_obj) - # provide the app with a way to process the AppGUI events when in a blocking loop + # provide the app with a way to process the GUI events when in a blocking loop if not run_threaded: QtWidgets.QApplication.processEvents() @@ -3187,7 +3187,7 @@ class NonCopperClear(AppTool, Gerber): "than isolation tool diameter.")) try: for geo_elem in isolated_geo: - # provide the app with a way to process the AppGUI events when in a blocking loop + # provide the app with a way to process the GUI events when in a blocking loop QtWidgets.QApplication.processEvents() if self.app.abort_flag: @@ -3295,7 +3295,7 @@ class NonCopperClear(AppTool, Gerber): # graceful abort requested by the user raise grace - # provide the app with a way to process the AppGUI events when in a blocking loop + # provide the app with a way to process the GUI events when in a blocking loop QtWidgets.QApplication.processEvents() app_obj.inform.emit('[success] %s = %s%s %s' % ( @@ -3329,7 +3329,7 @@ class NonCopperClear(AppTool, Gerber): if len(area.geoms) > 0: pol_nr = 0 for p in area.geoms: - # provide the app with a way to process the AppGUI events when in a blocking loop + # provide the app with a way to process the GUI events when in a blocking loop QtWidgets.QApplication.processEvents() if self.app.abort_flag: @@ -3502,7 +3502,7 @@ class NonCopperClear(AppTool, Gerber): log.debug("NCC Tool. Rest machining copper clearing task started.") app_obj.inform.emit('_(NCC Tool. Rest machining copper clearing task started.') - # provide the app with a way to process the AppGUI events when in a blocking loop + # provide the app with a way to process the GUI events when in a blocking loop if not run_threaded: QtWidgets.QApplication.processEvents() @@ -3566,7 +3566,7 @@ class NonCopperClear(AppTool, Gerber): try: for geo_elem in isolated_geo: - # provide the app with a way to process the AppGUI events when in a blocking loop + # provide the app with a way to process the GUI events when in a blocking loop QtWidgets.QApplication.processEvents() if self.app.abort_flag: @@ -3694,7 +3694,7 @@ class NonCopperClear(AppTool, Gerber): # Area to clear for poly_r in cleared_by_last_tool: - # provide the app with a way to process the AppGUI events when in a blocking loop + # provide the app with a way to process the GUI events when in a blocking loop QtWidgets.QApplication.processEvents() if self.app.abort_flag: @@ -3735,7 +3735,7 @@ class NonCopperClear(AppTool, Gerber): p = p.buffer(0) if p is not None and p.is_valid: - # provide the app with a way to process the AppGUI events when in a blocking loop + # provide the app with a way to process the GUI events when in a blocking loop QtWidgets.QApplication.processEvents() if isinstance(p, Polygon): @@ -3764,7 +3764,7 @@ class NonCopperClear(AppTool, Gerber): elif isinstance(p, MultiPolygon): for poly_p in p: if poly_p is not None: - # provide the app with a way to process the AppGUI events when + # provide the app with a way to process the GUI events when # in a blocking loop QtWidgets.QApplication.processEvents() @@ -3939,7 +3939,7 @@ class NonCopperClear(AppTool, Gerber): except Exception: try: for el in target: - # provide the app with a way to process the AppGUI events when in a blocking loop + # provide the app with a way to process the GUI events when in a blocking loop QtWidgets.QApplication.processEvents() if self.app.abort_flag: # graceful abort requested by the user diff --git a/AppTools/ToolOptimal.py b/AppTools/ToolOptimal.py index 004497b9..9ad822ae 100644 --- a/AppTools/ToolOptimal.py +++ b/AppTools/ToolOptimal.py @@ -42,7 +42,7 @@ class ToolOptimal(AppTool): self.decimals = self.app.decimals # ############################################################################ - # ############################ AppGUI creation ################################## + # ############################ GUI creation ################################## # ## Title title_label = QtWidgets.QLabel("%s" % self.toolName) title_label.setStyleSheet( @@ -248,7 +248,7 @@ class ToolOptimal(AppTool): self.loc_ois = OptionalHideInputSection(self.locations_cb, [self.locations_textb, self.locate_button]) self.sec_loc_ois = OptionalHideInputSection(self.sec_locations_cb, [self.sec_locations_frame]) - # ################## Finished AppGUI creation ################################### + # ################## Finished GUI creation ################################### # ############################################################################ # this is the line selected in the textbox with the locations of the minimum diff --git a/AppTools/ToolPDF.py b/AppTools/ToolPDF.py index a592394b..5e56092c 100644 --- a/AppTools/ToolPDF.py +++ b/AppTools/ToolPDF.py @@ -211,7 +211,7 @@ class ToolPDF(AppTool): return # Register recent file self.app.file_opened.emit("excellon", filename) - # AppGUI feedback + # GUI feedback self.app.inform.emit('[success] %s: %s' % (_("Rendered"), outname)) def layer_rendering_as_gerber(self, filename, ap_dict, layer_nr): @@ -284,7 +284,7 @@ class ToolPDF(AppTool): return # Register recent file self.app.file_opened.emit('gerber', filename) - # AppGUI feedback + # GUI feedback self.app.inform.emit('[success] %s: %s' % (_("Rendered"), outname)) def periodic_check(self, check_period): diff --git a/AppTools/ToolPaint.py b/AppTools/ToolPaint.py index a9f3b67e..5a88e1b5 100644 --- a/AppTools/ToolPaint.py +++ b/AppTools/ToolPaint.py @@ -565,7 +565,7 @@ class ToolPaint(AppTool, Gerber): """) self.tools_box.addWidget(self.reset_button) - # #################################### FINSIHED AppGUI ########################### + # #################################### FINSIHED GUI ########################### # ############################################################################# # ############################################################################# @@ -790,7 +790,7 @@ class ToolPaint(AppTool, Gerber): def form_to_storage(self): if self.tools_table.rowCount() == 0: - # there is no tool in tool table so we can't save the AppGUI elements values to storage + # there is no tool in tool table so we can't save the GUI elements values to storage return self.blockSignals(True) @@ -818,7 +818,7 @@ class ToolPaint(AppTool, Gerber): def on_apply_param_to_all_clicked(self): if self.tools_table.rowCount() == 0: - # there is no tool in tool table so we can't save the AppGUI elements values to storage + # there is no tool in tool table so we can't save the GUI elements values to storage log.debug("NonCopperClear.on_apply_param_to_all_clicked() --> no tool in Tools Table, aborting.") return @@ -1028,7 +1028,7 @@ class ToolPaint(AppTool, Gerber): "tools_paintrest": self.app.defaults["tools_paintrest"], }) - # ## Init the AppGUI interface + # ## Init the GUI interface self.order_radio.set_value(self.app.defaults["tools_paintorder"]) self.paintmargin_entry.set_value(self.app.defaults["tools_paintmargin"]) self.paintmethod_combo.set_value(self.app.defaults["tools_paintmethod"]) @@ -1758,7 +1758,7 @@ class ToolPaint(AppTool, Gerber): # events out of the self.app.collection view (it's about Project Tab) are of type int if type(event) is int: key = event - # events from the AppGUI are of type QKeyEvent + # events from the GUI are of type QKeyEvent elif type(event) == QtGui.QKeyEvent: key = event.key() elif isinstance(event, mpl_key_event): # MatPlotLib key events are trickier to interpret than the rest @@ -1928,7 +1928,7 @@ class ToolPaint(AppTool, Gerber): # process the flashes found in the selected polygon with the 'lines' method for rectangular # flashes and with _("Seed") for oblong and circular flashes - # and pads (flahes) need the contour therefore I override the AppGUI settings with always True + # and pads (flahes) need the contour therefore I override the GUI settings with always True for ap_type in flash_el_dict: for elem in flash_el_dict[ap_type]: if 'solid' in elem: @@ -2206,7 +2206,7 @@ class ToolPaint(AppTool, Gerber): cp = [] try: for pp in poly_buf: - # provide the app with a way to process the AppGUI events when in a blocking loop + # provide the app with a way to process the GUI events when in a blocking loop QtWidgets.QApplication.processEvents() if self.app.abort_flag: # graceful abort requested by the user @@ -2224,7 +2224,7 @@ class ToolPaint(AppTool, Gerber): self.app.proc_container.update_view_text(' %d%%' % disp_number) old_disp_number = disp_number except TypeError: - # provide the app with a way to process the AppGUI events when in a blocking loop + # provide the app with a way to process the GUI events when in a blocking loop QtWidgets.QApplication.processEvents() if self.app.abort_flag: # graceful abort requested by the user @@ -2524,7 +2524,7 @@ class ToolPaint(AppTool, Gerber): cp = [] try: for pp in poly_buf: - # provide the app with a way to process the AppGUI events when in a blocking loop + # provide the app with a way to process the GUI events when in a blocking loop QtWidgets.QApplication.processEvents() if self.app.abort_flag: # graceful abort requested by the user @@ -2549,7 +2549,7 @@ class ToolPaint(AppTool, Gerber): # log.debug("Polygons cleared: %d. Percentage done: %d%%" % (pol_nr, disp_number)) except TypeError: - # provide the app with a way to process the AppGUI events when in a blocking loop + # provide the app with a way to process the GUI events when in a blocking loop QtWidgets.QApplication.processEvents() if self.app.abort_flag: # graceful abort requested by the user @@ -2712,7 +2712,7 @@ class ToolPaint(AppTool, Gerber): cp = [] try: for pp in poly_buf: - # provide the app with a way to process the AppGUI events when in a blocking loop + # provide the app with a way to process the GUI events when in a blocking loop QtWidgets.QApplication.processEvents() if self.app.abort_flag: # graceful abort requested by the user @@ -2730,7 +2730,7 @@ class ToolPaint(AppTool, Gerber): self.app.proc_container.update_view_text(' %d%%' % disp_number) old_disp_number = disp_number except TypeError: - # provide the app with a way to process the AppGUI events when in a blocking loop + # provide the app with a way to process the GUI events when in a blocking loop QtWidgets.QApplication.processEvents() if self.app.abort_flag: # graceful abort requested by the user @@ -3022,7 +3022,7 @@ class ToolPaint(AppTool, Gerber): try: try: for pp in poly_buf: - # provide the app with a way to process the AppGUI events when in a blocking loop + # provide the app with a way to process the GUI events when in a blocking loop QtWidgets.QApplication.processEvents() if self.app.abort_flag: # graceful abort requested by the user @@ -3047,7 +3047,7 @@ class ToolPaint(AppTool, Gerber): # log.debug("Polygons cleared: %d. Percentage done: %d%%" % (pol_nr, disp_number)) except TypeError: - # provide the app with a way to process the AppGUI events when in a blocking loop + # provide the app with a way to process the GUI events when in a blocking loop QtWidgets.QApplication.processEvents() if self.app.abort_flag: # graceful abort requested by the user @@ -3200,7 +3200,7 @@ class ToolPaint(AppTool, Gerber): try: try: for pp in poly_buf: - # provide the app with a way to process the AppGUI events when in a blocking loop + # provide the app with a way to process the GUI events when in a blocking loop QtWidgets.QApplication.processEvents() if self.app.abort_flag: # graceful abort requested by the user @@ -3225,7 +3225,7 @@ class ToolPaint(AppTool, Gerber): # log.debug("Polygons cleared: %d. Percentage done: %d%%" % (pol_nr, disp_number)) except TypeError: - # provide the app with a way to process the AppGUI events when in a blocking loop + # provide the app with a way to process the GUI events when in a blocking loop QtWidgets.QApplication.processEvents() if self.app.abort_flag: # graceful abort requested by the user diff --git a/AppTools/ToolPcbWizard.py b/AppTools/ToolPcbWizard.py index 672ec3bd..108a99ea 100644 --- a/AppTools/ToolPcbWizard.py +++ b/AppTools/ToolPcbWizard.py @@ -460,7 +460,7 @@ class PcbWizard(AppTool): # Register recent file self.app.file_opened.emit("excellon", name) - # AppGUI feedback + # GUI feedback self.app.inform.emit('[success] %s: %s' % (_("Imported"), name)) self.app.ui.notebook.setCurrentWidget(self.app.ui.project_tab) else: diff --git a/AppTools/ToolShell.py b/AppTools/ToolShell.py index d06113f7..4366dfd5 100644 --- a/AppTools/ToolShell.py +++ b/AppTools/ToolShell.py @@ -257,7 +257,7 @@ class TermWidget(QWidget): class FCShell(TermWidget): def __init__(self, app, version, *args): """ - Initialize the TCL Shell. A dock widget that holds the AppGUI interface to the FlatCAM command line. + Initialize the TCL Shell. A dock widget that holds the GUI interface to the FlatCAM command line. :param app: When instantiated the sysShell will be actually the FlatCAMApp.App() class :param version: FlatCAM version string diff --git a/AppTools/ToolSub.py b/AppTools/ToolSub.py index 524ac125..c1f14d64 100644 --- a/AppTools/ToolSub.py +++ b/AppTools/ToolSub.py @@ -462,7 +462,7 @@ class ToolSub(AppTool): _('Generating new object failed.')) return - # AppGUI feedback + # GUI feedback self.app.inform.emit('[success] %s: %s' % (_("Created"), outname)) @@ -666,7 +666,7 @@ class ToolSub(AppTool): return # Register recent file self.app.file_opened.emit('geometry', outname) - # AppGUI feedback + # GUI feedback self.app.inform.emit('[success] %s: %s' % (_("Created"), outname)) diff --git a/CHANGELOG.md b/CHANGELOG.md index ca1eaf14..a312d76f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,10 +14,12 @@ CHANGELOG for FlatCAM beta - trying to fix the pixmap load crash when running a FlatCAMScript - made the workspace label in the status bar clickable and also added a status bar message on status toggle for workspace - modified the GUI for Film and Panelize Tools -- moved some of the GUI related methods from FlatCAMApp.App to the flatcamGUI.FlatCAMGUI class +- moved some of the GUI related methods from FlatCAMApp.App to the flatcamGUI.MainGUI class - moved Shortcuts Tab creation in it's own class - renamed classes to have shorter names and grouped - removed reference to postprocessors and replaced it with preprocessors +- more refactoring class names +- moved some of the methods from the App class to the ObjectCollection class 17.05.2020 @@ -127,7 +129,7 @@ CHANGELOG for FlatCAM beta 2.05.2020 - changed the icons for the grid snap in the status bar -- moved some of the methods from FlatCAMApp.App to flatcamGUI.FlatCAMGUI class +- moved some of the methods from FlatCAMApp.App to flatcamGUI.MainGUI class - fixed bug in Gerber Editor in which the units conversion wasn't calculated correct - fixed bug in Gerber Editor in which the QThread that is started on object edit was not stopped at clean up stage - fixed bug in Gerber Editor that kept all the apertures (including the geometry) of a previously edited object that was not saved after edit @@ -1395,7 +1397,7 @@ CHANGELOG for FlatCAM beta - optimized Rules Check Tool so it runs faster when doing Copper 2 Copper rule - small GUI changes in Optimal Tool and in Film Tool - some PEP8 corrections -- some code annotations to make it easier to navigate in the FlatCAMGUI.py +- some code annotations to make it easier to navigate in the MainGUI.py - fixed exit FullScreen with Escape key - added a new menu category in the MenuBar named 'Objects'. It will hold the objects found in the Project tab. Useful when working in FullScreen - disabled a log.debug in ObjectColection.get_by_name() @@ -2834,7 +2836,7 @@ CHANGELOG for FlatCAM beta - fix for issue #262: when doing Edit-> Save & Close Editor on a Geometry that is not generated through first entering into an Editor, the geometry disappear - finished preparing for internationalization for the files: camlib and objectCollection - fixed tools shortcuts not working anymore due of the new toggle parameter for the .run(). -- finished preparing for internationalization for the files: FlatCAMEditor, FlatCAMGUI +- finished preparing for internationalization for the files: FlatCAMEditor, MainGUI - finished preparing for internationalization for the files: FlatCAMObj, ObjectUI - sorted the languages in the Preferences combobox @@ -3156,7 +3158,7 @@ CHANGELOG for FlatCAM beta - fixed the name self-insert in save dialog file for GCode; added protection in case the save path is None - fixed FlatCAM crash when trying to make drills GCode out of a file that have only slots. - changed the messages for Units Conversion -- all key shortcuts work across the entire application; moved all the shortcuts definitions in FlatCAMGUI.keyPressEvent() +- all key shortcuts work across the entire application; moved all the shortcuts definitions in MainGUI.keyPressEvent() - renamed the theme to layout because it is really a layout change - added plot kind for CNC Job in the App Preferences - combined the geocutout and cutout_any TCL commands - work in progress @@ -3677,7 +3679,7 @@ For now they are used only for Excellon objects who do have toolchange events - fixed a reported bug generated by a typo for feedrate_z object in camlib.py. Because of that, the project could not be saved. - fixed a G01 usage (should be G1) in Marlin preprocessor. -- changed the position of the Tool Dia entry in the Object UI and in FlatCAMGUI +- changed the position of the Tool Dia entry in the Object UI and in MainGUI - fixed issues in the installer 30.10.2018 diff --git a/FlatCAM.py b/FlatCAM.py index 68cda751..1a309537 100644 --- a/FlatCAM.py +++ b/FlatCAM.py @@ -31,7 +31,7 @@ def debug_trace(): if __name__ == '__main__': # All X11 calling should be thread safe otherwise we have strange issues # QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_X11InitThreads) - # NOTE: Never talk to the AppGUI from threads! This is why I commented the above. + # NOTE: Never talk to the GUI from threads! This is why I commented the above. freeze_support() major_v = sys.version_info.major diff --git a/camlib.py b/camlib.py index e25cb001..c3863ca2 100644 --- a/camlib.py +++ b/camlib.py @@ -1267,7 +1267,7 @@ class Geometry(object): # graceful abort requested by the user raise grace - # provide the app with a way to process the AppGUI events when in a blocking loop + # provide the app with a way to process the GUI events when in a blocking loop QtWidgets.QApplication.processEvents() # Can only result in a Polygon or MultiPolygon @@ -1359,7 +1359,7 @@ class Geometry(object): # graceful abort requested by the user raise grace - # provide the app with a way to process the AppGUI events when in a blocking loop + # provide the app with a way to process the GUI events when in a blocking loop QtWidgets.QApplication.processEvents() path = Point(seedpoint).buffer(radius, int(steps_per_circle)).exterior @@ -1473,7 +1473,7 @@ class Geometry(object): # graceful abort requested by the user raise grace - # provide the app with a way to process the AppGUI events when in a blocking loop + # provide the app with a way to process the GUI events when in a blocking loop QtWidgets.QApplication.processEvents() line = LineString([(left, y), (right, y)]) @@ -1510,7 +1510,7 @@ class Geometry(object): # graceful abort requested by the user raise grace - # provide the app with a way to process the AppGUI events when in a blocking loop + # provide the app with a way to process the GUI events when in a blocking loop QtWidgets.QApplication.processEvents() line = LineString([(x, top), (x, bot)]) @@ -1641,7 +1641,7 @@ class Geometry(object): # graceful abort requested by the user raise grace - # provide the app with a way to process the AppGUI events when in a blocking loop + # provide the app with a way to process the GUI events when in a blocking loop QtWidgets.QApplication.processEvents() new_line = line.parallel_offset(distance=delta, side='left', resolution=int(steps_per_circle)) diff --git a/defaults.py b/defaults.py index 5c602258..6e8acfac 100644 --- a/defaults.py +++ b/defaults.py @@ -64,7 +64,7 @@ class FlatCAMDefaults: "global_machinist_setting": False, - # Global AppGUI Preferences + # Global GUI Preferences "global_gridx": 1.0, "global_gridy": 1.0, "global_snap_max": 0.05, @@ -125,7 +125,7 @@ class FlatCAMDefaults: "global_tcl_path": '', - # General AppGUI Settings + # General GUI Settings "global_theme": 'white', "global_gray_icons": False, "global_hover": False, diff --git a/locale/de/LC_MESSAGES/strings.po b/locale/de/LC_MESSAGES/strings.po index d6c2a254..ae222a1b 100644 --- a/locale/de/LC_MESSAGES/strings.po +++ b/locale/de/LC_MESSAGES/strings.po @@ -67,8 +67,8 @@ msgstr "" #: FlatCAMDB.py:709 FlatCAMDB.py:2125 FlatCAMDB.py:2171 #: flatcamEditors/FlatCAMExcEditor.py:1023 #: flatcamEditors/FlatCAMExcEditor.py:1091 -#: flatcamEditors/FlatCAMTextEditor.py:223 flatcamGUI/FlatCAMGUI.py:3443 -#: flatcamGUI/FlatCAMGUI.py:3659 flatcamGUI/FlatCAMGUI.py:3874 +#: flatcamEditors/FlatCAMTextEditor.py:223 flatcamGUI/MainGUI.py:3443 +#: flatcamGUI/MainGUI.py:3659 flatcamGUI/MainGUI.py:3874 #: flatcamObjects/ObjectCollection.py:126 flatcamTools/ToolFilm.py:754 #: flatcamTools/ToolFilm.py:900 flatcamTools/ToolImage.py:247 #: flatcamTools/ToolMove.py:269 flatcamTools/ToolPcbWizard.py:301 @@ -120,20 +120,20 @@ msgstr "Editor wurde aktiviert ..." msgid "Do you want to save the edited object?" msgstr "Möchten Sie das bearbeitete Objekt speichern?" -#: FlatCAMApp.py:2226 flatcamGUI/FlatCAMGUI.py:2288 +#: FlatCAMApp.py:2226 flatcamGUI/MainGUI.py:2288 msgid "Close Editor" msgstr "Editor schließen" #: FlatCAMApp.py:2229 FlatCAMApp.py:3518 FlatCAMApp.py:6085 FlatCAMApp.py:7345 #: FlatCAMTranslation.py:109 FlatCAMTranslation.py:207 -#: flatcamGUI/FlatCAMGUI.py:2519 +#: flatcamGUI/MainGUI.py:2519 #: flatcamGUI/preferences/PreferencesUIManager.py:1122 msgid "Yes" msgstr "Ja" #: FlatCAMApp.py:2230 FlatCAMApp.py:3519 FlatCAMApp.py:6086 FlatCAMApp.py:7346 #: FlatCAMTranslation.py:110 FlatCAMTranslation.py:208 -#: flatcamGUI/FlatCAMGUI.py:2520 +#: flatcamGUI/MainGUI.py:2520 #: flatcamGUI/preferences/PreferencesUIManager.py:1123 #: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:164 #: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:150 @@ -143,7 +143,7 @@ msgstr "Nein" #: FlatCAMApp.py:2231 FlatCAMApp.py:3520 FlatCAMApp.py:4478 FlatCAMApp.py:5103 #: FlatCAMApp.py:7347 FlatCAMDB.py:128 FlatCAMDB.py:1689 -#: flatcamGUI/FlatCAMGUI.py:1347 +#: flatcamGUI/MainGUI.py:1347 msgid "Cancel" msgstr "Abbrechen" @@ -276,7 +276,7 @@ msgstr "erstellt / ausgewählt" msgid "Plotting" msgstr "Plotten" -#: FlatCAMApp.py:3090 flatcamGUI/FlatCAMGUI.py:545 +#: FlatCAMApp.py:3090 flatcamGUI/MainGUI.py:545 msgid "About FlatCAM" msgstr "Über FlatCAM" @@ -424,7 +424,7 @@ msgstr "Übersetzer" msgid "Corrections" msgstr "Korrekturen" -#: FlatCAMApp.py:3455 FlatCAMApp.py:3464 flatcamGUI/FlatCAMGUI.py:527 +#: FlatCAMApp.py:3455 FlatCAMApp.py:3464 flatcamGUI/MainGUI.py:527 msgid "Bookmarks Manager" msgstr "Lesezeichen verwalten" @@ -452,7 +452,7 @@ msgstr "" msgid "Alternative website" msgstr "Alternative Website" -#: FlatCAMApp.py:3508 flatcamGUI/FlatCAMGUI.py:4267 +#: FlatCAMApp.py:3508 flatcamGUI/MainGUI.py:4267 msgid "Application is saving the project. Please wait ..." msgstr "Anwendung speichert das Projekt. Warten Sie mal ..." @@ -668,8 +668,8 @@ msgstr "Falsche Koordinaten. Koordinaten im Format eingeben: X, Y" #: flatcamEditors/FlatCAMGrbEditor.py:1490 #: flatcamEditors/FlatCAMGrbEditor.py:1759 #: flatcamEditors/FlatCAMGrbEditor.py:4622 -#: flatcamEditors/FlatCAMGrbEditor.py:4637 flatcamGUI/FlatCAMGUI.py:3424 -#: flatcamGUI/FlatCAMGUI.py:3436 flatcamTools/ToolAlignObjects.py:393 +#: flatcamEditors/FlatCAMGrbEditor.py:4637 flatcamGUI/MainGUI.py:3424 +#: flatcamGUI/MainGUI.py:3436 flatcamTools/ToolAlignObjects.py:393 #: flatcamTools/ToolAlignObjects.py:415 msgid "Done." msgstr "Fertig." @@ -825,12 +825,12 @@ msgstr "Kein Objekt für Neigung / Schneiden auf der Y-Achse ausgewählt." msgid "Skew on Y axis done." msgstr "Neigung auf der Y-Achse." -#: FlatCAMApp.py:6497 FlatCAMApp.py:6544 flatcamGUI/FlatCAMGUI.py:503 -#: flatcamGUI/FlatCAMGUI.py:1728 +#: FlatCAMApp.py:6497 FlatCAMApp.py:6544 flatcamGUI/MainGUI.py:503 +#: flatcamGUI/MainGUI.py:1728 msgid "Select All" msgstr "Select All" -#: FlatCAMApp.py:6501 FlatCAMApp.py:6548 flatcamGUI/FlatCAMGUI.py:505 +#: FlatCAMApp.py:6501 FlatCAMApp.py:6548 flatcamGUI/MainGUI.py:505 msgid "Deselect All" msgstr "Alle abwählen" @@ -842,7 +842,7 @@ msgstr "Alle Objekte werden ausgewählt." msgid "Objects selection is cleared." msgstr "Die Objektauswahl wird gelöscht." -#: FlatCAMApp.py:6594 flatcamGUI/FlatCAMGUI.py:1721 +#: FlatCAMApp.py:6594 flatcamGUI/MainGUI.py:1721 msgid "Grid On/Off" msgstr "Raster ein/aus" @@ -858,9 +858,9 @@ msgid "Add" msgstr "Hinzufügen" #: FlatCAMApp.py:6608 flatcamEditors/FlatCAMGrbEditor.py:2588 -#: flatcamEditors/FlatCAMGrbEditor.py:2736 flatcamGUI/FlatCAMGUI.py:751 -#: flatcamGUI/FlatCAMGUI.py:1074 flatcamGUI/FlatCAMGUI.py:2141 -#: flatcamGUI/FlatCAMGUI.py:2284 flatcamGUI/FlatCAMGUI.py:2777 +#: flatcamEditors/FlatCAMGrbEditor.py:2736 flatcamGUI/MainGUI.py:751 +#: flatcamGUI/MainGUI.py:1074 flatcamGUI/MainGUI.py:2141 +#: flatcamGUI/MainGUI.py:2284 flatcamGUI/MainGUI.py:2777 #: flatcamGUI/ObjectUI.py:1623 flatcamObjects/FlatCAMGeometry.py:505 #: flatcamTools/ToolNCC.py:316 flatcamTools/ToolNCC.py:637 #: flatcamTools/ToolPaint.py:299 flatcamTools/ToolPaint.py:682 @@ -946,8 +946,8 @@ msgstr "" msgid "New Project created" msgstr "Neues Projekt erstellt" -#: FlatCAMApp.py:7519 FlatCAMApp.py:7523 flatcamGUI/FlatCAMGUI.py:836 -#: flatcamGUI/FlatCAMGUI.py:2544 +#: FlatCAMApp.py:7519 FlatCAMApp.py:7523 flatcamGUI/MainGUI.py:836 +#: flatcamGUI/MainGUI.py:2544 msgid "Open Gerber" msgstr "Gerber öffnen" @@ -964,8 +964,8 @@ msgstr "" msgid "Opening Gerber file." msgstr "Gerber-Datei öffnen." -#: FlatCAMApp.py:7557 FlatCAMApp.py:7561 flatcamGUI/FlatCAMGUI.py:838 -#: flatcamGUI/FlatCAMGUI.py:2546 +#: FlatCAMApp.py:7557 FlatCAMApp.py:7561 flatcamGUI/MainGUI.py:838 +#: flatcamGUI/MainGUI.py:2546 msgid "Open Excellon" msgstr "Excellon öffnen" @@ -981,7 +981,7 @@ msgstr "G-Code öffnen" msgid "Opening G-Code file." msgstr "Öffnen der G-Code-Datei." -#: FlatCAMApp.py:7632 FlatCAMApp.py:7635 flatcamGUI/FlatCAMGUI.py:1730 +#: FlatCAMApp.py:7632 FlatCAMApp.py:7635 flatcamGUI/MainGUI.py:1730 msgid "Open Project" msgstr "Projekt öffnen" @@ -1146,8 +1146,8 @@ msgstr "TCL-Skriptdatei im Code-Editor geöffnet und ausgeführt." msgid "Save Project As ..." msgstr "Projekt speichern als ..." -#: FlatCAMApp.py:8551 flatcamGUI/FlatCAMGUI.py:1134 -#: flatcamGUI/FlatCAMGUI.py:2176 +#: FlatCAMApp.py:8551 flatcamGUI/MainGUI.py:1134 +#: flatcamGUI/MainGUI.py:2176 msgid "Project" msgstr "Projekt" @@ -1398,7 +1398,7 @@ msgstr "Letzte Projekte löschen" msgid "Clear Recent files" msgstr "Letzte Dateien löschen" -#: FlatCAMApp.py:10065 flatcamGUI/FlatCAMGUI.py:1363 +#: FlatCAMApp.py:10065 flatcamGUI/MainGUI.py:1363 msgid "Shortcut Key List" msgstr " Liste der Tastenkombinationen " @@ -1564,47 +1564,47 @@ msgstr "Diagramm deaktivieren..." msgid "Working ..." msgstr "Arbeiten ..." -#: FlatCAMApp.py:10558 flatcamGUI/FlatCAMGUI.py:703 +#: FlatCAMApp.py:10558 flatcamGUI/MainGUI.py:703 msgid "Red" msgstr "Rote" -#: FlatCAMApp.py:10560 flatcamGUI/FlatCAMGUI.py:706 +#: FlatCAMApp.py:10560 flatcamGUI/MainGUI.py:706 msgid "Blue" msgstr "Blau" -#: FlatCAMApp.py:10563 flatcamGUI/FlatCAMGUI.py:709 +#: FlatCAMApp.py:10563 flatcamGUI/MainGUI.py:709 msgid "Yellow" msgstr "Gelb" -#: FlatCAMApp.py:10565 flatcamGUI/FlatCAMGUI.py:712 +#: FlatCAMApp.py:10565 flatcamGUI/MainGUI.py:712 msgid "Green" msgstr "Grün" -#: FlatCAMApp.py:10567 flatcamGUI/FlatCAMGUI.py:715 +#: FlatCAMApp.py:10567 flatcamGUI/MainGUI.py:715 msgid "Purple" msgstr "Lila" -#: FlatCAMApp.py:10569 flatcamGUI/FlatCAMGUI.py:718 +#: FlatCAMApp.py:10569 flatcamGUI/MainGUI.py:718 msgid "Brown" msgstr "Braun" -#: FlatCAMApp.py:10571 FlatCAMApp.py:10627 flatcamGUI/FlatCAMGUI.py:721 +#: FlatCAMApp.py:10571 FlatCAMApp.py:10627 flatcamGUI/MainGUI.py:721 msgid "White" msgstr "Weiß" -#: FlatCAMApp.py:10573 flatcamGUI/FlatCAMGUI.py:724 +#: FlatCAMApp.py:10573 flatcamGUI/MainGUI.py:724 msgid "Black" msgstr "Schwarz" -#: FlatCAMApp.py:10576 flatcamGUI/FlatCAMGUI.py:729 +#: FlatCAMApp.py:10576 flatcamGUI/MainGUI.py:729 msgid "Custom" msgstr "Maßgeschn." -#: FlatCAMApp.py:10586 flatcamGUI/FlatCAMGUI.py:737 +#: FlatCAMApp.py:10586 flatcamGUI/MainGUI.py:737 msgid "Default" msgstr "Standard" -#: FlatCAMApp.py:10610 flatcamGUI/FlatCAMGUI.py:734 +#: FlatCAMApp.py:10610 flatcamGUI/MainGUI.py:734 msgid "Opacity" msgstr "Opazität" @@ -1725,7 +1725,7 @@ msgstr "Lesezeichen entfernt." msgid "Export FlatCAM Bookmarks" msgstr "Export der FlatCAM-Lesezeichen" -#: FlatCAMBookmark.py:293 flatcamGUI/FlatCAMGUI.py:524 +#: FlatCAMBookmark.py:293 flatcamGUI/MainGUI.py:524 msgid "Bookmarks" msgstr "Lesezeichen" @@ -3185,7 +3185,7 @@ msgstr "" "Löschen Sie ein Werkzeug in der Werkzeugliste\n" "indem Sie eine Zeile in der Werkzeugtabelle auswählen." -#: flatcamEditors/FlatCAMExcEditor.py:1650 flatcamGUI/FlatCAMGUI.py:2019 +#: flatcamEditors/FlatCAMExcEditor.py:1650 flatcamGUI/MainGUI.py:2019 msgid "Resize Drill(s)" msgstr "Größe der Bohrer ändern" @@ -3209,8 +3209,8 @@ msgstr "Größe ändern" msgid "Resize drill(s)" msgstr "Bohrer verkleinern" -#: flatcamEditors/FlatCAMExcEditor.py:1699 flatcamGUI/FlatCAMGUI.py:2018 -#: flatcamGUI/FlatCAMGUI.py:2270 +#: flatcamEditors/FlatCAMExcEditor.py:1699 flatcamGUI/MainGUI.py:2018 +#: flatcamGUI/MainGUI.py:2270 msgid "Add Drill Array" msgstr "Bohrer-Array hinzufügen" @@ -3526,7 +3526,7 @@ msgstr "" "Speichern Sie Excellon und bearbeiten Sie es erneut, wenn Sie dieses Tool " "hinzufügen müssen. " -#: flatcamEditors/FlatCAMExcEditor.py:2579 flatcamGUI/FlatCAMGUI.py:4071 +#: flatcamEditors/FlatCAMExcEditor.py:2579 flatcamGUI/MainGUI.py:4071 msgid "Added new tool with dia" msgstr "Neues Werkzeug mit Durchmesser hinzugefügt" @@ -3639,7 +3639,7 @@ msgid "Full Buffer" msgstr "Voller Puffer" #: flatcamEditors/FlatCAMGeoEditor.py:132 -#: flatcamEditors/FlatCAMGeoEditor.py:3017 flatcamGUI/FlatCAMGUI.py:1928 +#: flatcamEditors/FlatCAMGeoEditor.py:3017 flatcamGUI/MainGUI.py:1928 #: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:190 msgid "Buffer Tool" msgstr "Pufferwerkzeug" @@ -3660,7 +3660,7 @@ msgstr "" msgid "Font" msgstr "Schrift" -#: flatcamEditors/FlatCAMGeoEditor.py:323 flatcamGUI/FlatCAMGUI.py:2208 +#: flatcamEditors/FlatCAMGeoEditor.py:323 flatcamGUI/MainGUI.py:2208 msgid "Text" msgstr "Text" @@ -3668,8 +3668,8 @@ msgstr "Text" msgid "Text Tool" msgstr "Textwerkzeug" -#: flatcamEditors/FlatCAMGeoEditor.py:405 flatcamGUI/FlatCAMGUI.py:511 -#: flatcamGUI/FlatCAMGUI.py:1158 flatcamGUI/ObjectUI.py:818 +#: flatcamEditors/FlatCAMGeoEditor.py:405 flatcamGUI/MainGUI.py:511 +#: flatcamGUI/MainGUI.py:1158 flatcamGUI/ObjectUI.py:818 #: flatcamGUI/ObjectUI.py:1662 flatcamObjects/FlatCAMExcellon.py:742 #: flatcamObjects/FlatCAMExcellon.py:1084 flatcamObjects/FlatCAMGeometry.py:759 #: flatcamTools/ToolNCC.py:331 flatcamTools/ToolNCC.py:797 @@ -3706,12 +3706,12 @@ msgstr "Verbinden:" msgid "Contour:" msgstr "Kontur:" -#: flatcamEditors/FlatCAMGeoEditor.py:529 flatcamGUI/FlatCAMGUI.py:2212 +#: flatcamEditors/FlatCAMGeoEditor.py:529 flatcamGUI/MainGUI.py:2212 msgid "Paint" msgstr "Malen" -#: flatcamEditors/FlatCAMGeoEditor.py:547 flatcamGUI/FlatCAMGUI.py:924 -#: flatcamGUI/FlatCAMGUI.py:2628 flatcamGUI/ObjectUI.py:2139 +#: flatcamEditors/FlatCAMGeoEditor.py:547 flatcamGUI/MainGUI.py:924 +#: flatcamGUI/MainGUI.py:2628 flatcamGUI/ObjectUI.py:2139 #: flatcamTools/ToolPaint.py:43 flatcamTools/ToolPaint.py:738 msgid "Paint Tool" msgstr "Werkzeug Malen" @@ -3738,8 +3738,8 @@ msgstr "Werkzeuge" #: flatcamEditors/FlatCAMGeoEditor.py:607 #: flatcamEditors/FlatCAMGeoEditor.py:991 #: flatcamEditors/FlatCAMGrbEditor.py:5306 -#: flatcamEditors/FlatCAMGrbEditor.py:5703 flatcamGUI/FlatCAMGUI.py:945 -#: flatcamGUI/FlatCAMGUI.py:2649 flatcamTools/ToolTransform.py:460 +#: flatcamEditors/FlatCAMGrbEditor.py:5703 flatcamGUI/MainGUI.py:945 +#: flatcamGUI/MainGUI.py:2649 flatcamTools/ToolTransform.py:460 msgid "Transform Tool" msgstr "Werkzeug Umwandeln" @@ -3759,9 +3759,9 @@ msgstr "Neigung/Schere" #: flatcamEditors/FlatCAMGeoEditor.py:610 #: flatcamEditors/FlatCAMGrbEditor.py:2680 -#: flatcamEditors/FlatCAMGrbEditor.py:5309 flatcamGUI/FlatCAMGUI.py:1063 -#: flatcamGUI/FlatCAMGUI.py:2140 flatcamGUI/FlatCAMGUI.py:2255 -#: flatcamGUI/FlatCAMGUI.py:2767 flatcamGUI/ObjectUI.py:125 +#: flatcamEditors/FlatCAMGrbEditor.py:5309 flatcamGUI/MainGUI.py:1063 +#: flatcamGUI/MainGUI.py:2140 flatcamGUI/MainGUI.py:2255 +#: flatcamGUI/MainGUI.py:2767 flatcamGUI/ObjectUI.py:125 #: flatcamGUI/preferences/tools/ToolsTransformPrefGroupUI.py:95 #: flatcamTools/ToolTransform.py:26 msgid "Scale" @@ -3773,8 +3773,8 @@ msgid "Mirror (Flip)" msgstr "Spiegeln (Flip)" #: flatcamEditors/FlatCAMGeoEditor.py:625 -#: flatcamEditors/FlatCAMGrbEditor.py:5324 flatcamGUI/FlatCAMGUI.py:856 -#: flatcamGUI/FlatCAMGUI.py:2564 +#: flatcamEditors/FlatCAMGrbEditor.py:5324 flatcamGUI/MainGUI.py:856 +#: flatcamGUI/MainGUI.py:2564 msgid "Editor" msgstr "Editor" @@ -4496,7 +4496,7 @@ msgstr "Ring" msgid "Line" msgstr "Linie" -#: flatcamEditors/FlatCAMGeoEditor.py:3591 flatcamGUI/FlatCAMGUI.py:2202 +#: flatcamEditors/FlatCAMGeoEditor.py:3591 flatcamGUI/MainGUI.py:2202 #: flatcamGUI/ObjectUI.py:2074 #: flatcamGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:218 #: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:328 @@ -4525,10 +4525,10 @@ msgstr "Bearbeiten von MultiGeo Geometry, Werkzeug" msgid "with diameter" msgstr "mit Durchmesser" -#: flatcamEditors/FlatCAMGeoEditor.py:4509 flatcamGUI/FlatCAMGUI.py:3753 -#: flatcamGUI/FlatCAMGUI.py:3799 flatcamGUI/FlatCAMGUI.py:3817 -#: flatcamGUI/FlatCAMGUI.py:3961 flatcamGUI/FlatCAMGUI.py:4000 -#: flatcamGUI/FlatCAMGUI.py:4012 flatcamGUI/FlatCAMGUI.py:4029 +#: flatcamEditors/FlatCAMGeoEditor.py:4509 flatcamGUI/MainGUI.py:3753 +#: flatcamGUI/MainGUI.py:3799 flatcamGUI/MainGUI.py:3817 +#: flatcamGUI/MainGUI.py:3961 flatcamGUI/MainGUI.py:4000 +#: flatcamGUI/MainGUI.py:4012 flatcamGUI/MainGUI.py:4029 msgid "Click on target point." msgstr "Klicken Sie auf den Zielpunkt." @@ -4755,7 +4755,7 @@ msgstr "Erledigt. Öffnungsbewegung abgeschlossen." msgid "Done. Apertures copied." msgstr "Erledigt. Blende kopiert." -#: flatcamEditors/FlatCAMGrbEditor.py:2455 flatcamGUI/FlatCAMGUI.py:2233 +#: flatcamEditors/FlatCAMGrbEditor.py:2455 flatcamGUI/MainGUI.py:2233 #: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:27 msgid "Gerber Editor" msgstr "Gerber-Editor" @@ -4917,9 +4917,9 @@ msgstr "" "- 'Abgeschrägt:' Die Ecke ist eine Linie, die die Features, die sich in der " "Ecke treffen, direkt verbindet" -#: flatcamEditors/FlatCAMGrbEditor.py:2640 flatcamGUI/FlatCAMGUI.py:1061 -#: flatcamGUI/FlatCAMGUI.py:2138 flatcamGUI/FlatCAMGUI.py:2210 -#: flatcamGUI/FlatCAMGUI.py:2253 flatcamGUI/FlatCAMGUI.py:2765 +#: flatcamEditors/FlatCAMGrbEditor.py:2640 flatcamGUI/MainGUI.py:1061 +#: flatcamGUI/MainGUI.py:2138 flatcamGUI/MainGUI.py:2210 +#: flatcamGUI/MainGUI.py:2253 flatcamGUI/MainGUI.py:2765 #: flatcamGUI/preferences/tools/ToolsTransformPrefGroupUI.py:200 #: flatcamTools/ToolTransform.py:29 msgid "Buffer" @@ -4995,8 +4995,8 @@ msgstr "Löschen Sie alle markierten Polygone." msgid "Clear all the markings." msgstr "Alle Markierungen entfernen." -#: flatcamEditors/FlatCAMGrbEditor.py:2764 flatcamGUI/FlatCAMGUI.py:1046 -#: flatcamGUI/FlatCAMGUI.py:2138 flatcamGUI/FlatCAMGUI.py:2750 +#: flatcamEditors/FlatCAMGrbEditor.py:2764 flatcamGUI/MainGUI.py:1046 +#: flatcamGUI/MainGUI.py:2138 flatcamGUI/MainGUI.py:2750 msgid "Add Pad Array" msgstr "Pad-Array hinzufügen" @@ -5305,129 +5305,129 @@ msgstr "Gespeichert in" msgid "Code Editor content copied to clipboard ..." msgstr "Code Editor Inhalt in die Zwischenablage kopiert ..." -#: flatcamGUI/FlatCAMGUI.py:78 flatcamGUI/FlatCAMGUI.py:80 -#: flatcamGUI/FlatCAMGUI.py:2163 +#: flatcamGUI/MainGUI.py:78 flatcamGUI/MainGUI.py:80 +#: flatcamGUI/MainGUI.py:2163 msgid "Toggle Panel" msgstr "Panel umschalten" -#: flatcamGUI/FlatCAMGUI.py:90 +#: flatcamGUI/MainGUI.py:90 msgid "File" msgstr "Datei" -#: flatcamGUI/FlatCAMGUI.py:95 +#: flatcamGUI/MainGUI.py:95 msgid "&New Project ...\tCtrl+N" msgstr "&Neues Projekt ...\\STRG+N" -#: flatcamGUI/FlatCAMGUI.py:97 +#: flatcamGUI/MainGUI.py:97 msgid "Will create a new, blank project" msgstr "Erzeugt ein neues leeres Projekt" -#: flatcamGUI/FlatCAMGUI.py:102 +#: flatcamGUI/MainGUI.py:102 msgid "&New" msgstr "&Neu" -#: flatcamGUI/FlatCAMGUI.py:106 +#: flatcamGUI/MainGUI.py:106 msgid "Geometry\tN" msgstr "Geometrie\tN" -#: flatcamGUI/FlatCAMGUI.py:108 +#: flatcamGUI/MainGUI.py:108 msgid "Will create a new, empty Geometry Object." msgstr "Erzeugt ein neues, leeres Geometrieobjekt." -#: flatcamGUI/FlatCAMGUI.py:111 +#: flatcamGUI/MainGUI.py:111 msgid "Gerber\tB" msgstr "Gerber\tB" -#: flatcamGUI/FlatCAMGUI.py:113 +#: flatcamGUI/MainGUI.py:113 msgid "Will create a new, empty Gerber Object." msgstr "Erzeugt ein neues, leeres Gerber-Objekt." -#: flatcamGUI/FlatCAMGUI.py:116 +#: flatcamGUI/MainGUI.py:116 msgid "Excellon\tL" msgstr "Excellon\tL" -#: flatcamGUI/FlatCAMGUI.py:118 +#: flatcamGUI/MainGUI.py:118 msgid "Will create a new, empty Excellon Object." msgstr "Erzeugt ein neues, leeres Excellon-Objekt." -#: flatcamGUI/FlatCAMGUI.py:123 +#: flatcamGUI/MainGUI.py:123 msgid "Document\tD" msgstr "Dokumentieren\tD" -#: flatcamGUI/FlatCAMGUI.py:125 +#: flatcamGUI/MainGUI.py:125 msgid "Will create a new, empty Document Object." msgstr "Erstellt ein neues, leeres Dokumentobjekt." -#: flatcamGUI/FlatCAMGUI.py:129 flatcamGUI/FlatCAMGUI.py:4420 +#: flatcamGUI/MainGUI.py:129 flatcamGUI/MainGUI.py:4420 #: flatcamTools/ToolPcbWizard.py:62 flatcamTools/ToolPcbWizard.py:69 msgid "Open" msgstr "Öffnen" -#: flatcamGUI/FlatCAMGUI.py:134 +#: flatcamGUI/MainGUI.py:134 msgid "Open &Project ..." msgstr "&Projekt öffnen..." -#: flatcamGUI/FlatCAMGUI.py:140 flatcamGUI/FlatCAMGUI.py:4430 +#: flatcamGUI/MainGUI.py:140 flatcamGUI/MainGUI.py:4430 msgid "Open &Gerber ...\tCtrl+G" msgstr "&Gerber öffnen...\\STRG+G" -#: flatcamGUI/FlatCAMGUI.py:145 flatcamGUI/FlatCAMGUI.py:4435 +#: flatcamGUI/MainGUI.py:145 flatcamGUI/MainGUI.py:4435 msgid "Open &Excellon ...\tCtrl+E" msgstr "&Excellon öffnen...\\STRG+E" -#: flatcamGUI/FlatCAMGUI.py:150 flatcamGUI/FlatCAMGUI.py:4440 +#: flatcamGUI/MainGUI.py:150 flatcamGUI/MainGUI.py:4440 msgid "Open G-&Code ..." msgstr "G-&Code öffnen..." -#: flatcamGUI/FlatCAMGUI.py:157 +#: flatcamGUI/MainGUI.py:157 msgid "Open Config ..." msgstr "Config öffnen..." -#: flatcamGUI/FlatCAMGUI.py:162 +#: flatcamGUI/MainGUI.py:162 msgid "Recent projects" msgstr "Letzte Projekte" -#: flatcamGUI/FlatCAMGUI.py:164 +#: flatcamGUI/MainGUI.py:164 msgid "Recent files" msgstr "Neueste Dateien" -#: flatcamGUI/FlatCAMGUI.py:167 flatcamGUI/FlatCAMGUI.py:753 -#: flatcamGUI/FlatCAMGUI.py:1339 +#: flatcamGUI/MainGUI.py:167 flatcamGUI/MainGUI.py:753 +#: flatcamGUI/MainGUI.py:1339 msgid "Save" msgstr "Speichern" -#: flatcamGUI/FlatCAMGUI.py:171 +#: flatcamGUI/MainGUI.py:171 msgid "&Save Project ...\tCtrl+S" msgstr "Projekt speichern ...\\STRG+S" -#: flatcamGUI/FlatCAMGUI.py:176 +#: flatcamGUI/MainGUI.py:176 msgid "Save Project &As ...\tCtrl+Shift+S" msgstr "Projekt speichern als ...\\STRG+Shift+S" -#: flatcamGUI/FlatCAMGUI.py:191 +#: flatcamGUI/MainGUI.py:191 msgid "Scripting" msgstr "Scripting" -#: flatcamGUI/FlatCAMGUI.py:195 flatcamGUI/FlatCAMGUI.py:903 -#: flatcamGUI/FlatCAMGUI.py:2607 +#: flatcamGUI/MainGUI.py:195 flatcamGUI/MainGUI.py:903 +#: flatcamGUI/MainGUI.py:2607 msgid "New Script ..." msgstr "Neues Skript ..." -#: flatcamGUI/FlatCAMGUI.py:197 flatcamGUI/FlatCAMGUI.py:905 -#: flatcamGUI/FlatCAMGUI.py:2609 +#: flatcamGUI/MainGUI.py:197 flatcamGUI/MainGUI.py:905 +#: flatcamGUI/MainGUI.py:2609 msgid "Open Script ..." msgstr "Skript öffnen ..." -#: flatcamGUI/FlatCAMGUI.py:199 +#: flatcamGUI/MainGUI.py:199 msgid "Open Example ..." msgstr "Beispiel öffnen ..." -#: flatcamGUI/FlatCAMGUI.py:201 flatcamGUI/FlatCAMGUI.py:907 -#: flatcamGUI/FlatCAMGUI.py:2611 flatcamGUI/FlatCAMGUI.py:4409 +#: flatcamGUI/MainGUI.py:201 flatcamGUI/MainGUI.py:907 +#: flatcamGUI/MainGUI.py:2611 flatcamGUI/MainGUI.py:4409 msgid "Run Script ..." msgstr "Skript ausführen ..." -#: flatcamGUI/FlatCAMGUI.py:203 flatcamGUI/FlatCAMGUI.py:4411 +#: flatcamGUI/MainGUI.py:203 flatcamGUI/MainGUI.py:4411 msgid "" "Will run the opened Tcl Script thus\n" "enabling the automation of certain\n" @@ -5437,47 +5437,47 @@ msgstr "" "Ermöglichung der Automatisierung bestimmter\n" "Funktionen von FlatCAM." -#: flatcamGUI/FlatCAMGUI.py:218 +#: flatcamGUI/MainGUI.py:218 msgid "Import" msgstr "Importieren" -#: flatcamGUI/FlatCAMGUI.py:220 +#: flatcamGUI/MainGUI.py:220 msgid "&SVG as Geometry Object ..." msgstr "&SVG als Geometrieobjekt ..." -#: flatcamGUI/FlatCAMGUI.py:223 +#: flatcamGUI/MainGUI.py:223 msgid "&SVG as Gerber Object ..." msgstr "&SVG als Gerberobjekt ..." -#: flatcamGUI/FlatCAMGUI.py:228 +#: flatcamGUI/MainGUI.py:228 msgid "&DXF as Geometry Object ..." msgstr "&DXF als Geometrieobjekt ..." -#: flatcamGUI/FlatCAMGUI.py:231 +#: flatcamGUI/MainGUI.py:231 msgid "&DXF as Gerber Object ..." msgstr "&DXF als Gerberobjekt ..." -#: flatcamGUI/FlatCAMGUI.py:235 +#: flatcamGUI/MainGUI.py:235 msgid "HPGL2 as Geometry Object ..." msgstr "HPGL2 als Geometrieobjekt ..." -#: flatcamGUI/FlatCAMGUI.py:241 +#: flatcamGUI/MainGUI.py:241 msgid "Export" msgstr "Exportieren" -#: flatcamGUI/FlatCAMGUI.py:245 +#: flatcamGUI/MainGUI.py:245 msgid "Export &SVG ..." msgstr "SVG exportieren ..." -#: flatcamGUI/FlatCAMGUI.py:249 +#: flatcamGUI/MainGUI.py:249 msgid "Export DXF ..." msgstr "DXF exportieren ..." -#: flatcamGUI/FlatCAMGUI.py:255 +#: flatcamGUI/MainGUI.py:255 msgid "Export &PNG ..." msgstr "PNG exportieren ..." -#: flatcamGUI/FlatCAMGUI.py:257 +#: flatcamGUI/MainGUI.py:257 msgid "" "Will export an image in PNG format,\n" "the saved image will contain the visual \n" @@ -5487,11 +5487,11 @@ msgstr "" "Das gespeicherte Bild enthält die\n" "Bildinformationen des FlatCAM-Plotbereiches." -#: flatcamGUI/FlatCAMGUI.py:266 +#: flatcamGUI/MainGUI.py:266 msgid "Export &Excellon ..." msgstr "Excellon exportieren ..." -#: flatcamGUI/FlatCAMGUI.py:268 +#: flatcamGUI/MainGUI.py:268 msgid "" "Will export an Excellon Object as Excellon file,\n" "the coordinates format, the file units and zeros\n" @@ -5501,11 +5501,11 @@ msgstr "" "Das Koordinatenformat, die Dateieinheiten und Nullen\n" "werden in den Einstellungen -> Excellon Export.Excellon eingestellt ..." -#: flatcamGUI/FlatCAMGUI.py:275 +#: flatcamGUI/MainGUI.py:275 msgid "Export &Gerber ..." msgstr "Gerber exportieren ..." -#: flatcamGUI/FlatCAMGUI.py:277 +#: flatcamGUI/MainGUI.py:277 msgid "" "Will export an Gerber Object as Gerber file,\n" "the coordinates format, the file units and zeros\n" @@ -5515,53 +5515,53 @@ msgstr "" "das Koordinatenformat, die Dateieinheiten und Nullen\n" "werden in den Einstellungen -> Gerber Export eingestellt." -#: flatcamGUI/FlatCAMGUI.py:287 +#: flatcamGUI/MainGUI.py:287 msgid "Backup" msgstr "Sicherungskopie" -#: flatcamGUI/FlatCAMGUI.py:292 +#: flatcamGUI/MainGUI.py:292 msgid "Import Preferences from file ..." msgstr "Einstellungen aus Datei importieren ..." -#: flatcamGUI/FlatCAMGUI.py:298 +#: flatcamGUI/MainGUI.py:298 msgid "Export Preferences to file ..." msgstr "Einstellungen in Datei exportieren ..." -#: flatcamGUI/FlatCAMGUI.py:306 +#: flatcamGUI/MainGUI.py:306 #: flatcamGUI/preferences/PreferencesUIManager.py:1119 msgid "Save Preferences" msgstr "Einstellungen speichern" -#: flatcamGUI/FlatCAMGUI.py:312 flatcamGUI/FlatCAMGUI.py:1730 +#: flatcamGUI/MainGUI.py:312 flatcamGUI/MainGUI.py:1730 msgid "Print (PDF)" msgstr "Drucken (PDF)" -#: flatcamGUI/FlatCAMGUI.py:320 +#: flatcamGUI/MainGUI.py:320 msgid "E&xit" msgstr "Ausgang" -#: flatcamGUI/FlatCAMGUI.py:328 flatcamGUI/FlatCAMGUI.py:747 -#: flatcamGUI/FlatCAMGUI.py:2286 +#: flatcamGUI/MainGUI.py:328 flatcamGUI/MainGUI.py:747 +#: flatcamGUI/MainGUI.py:2286 msgid "Edit" msgstr "Bearbeiten" -#: flatcamGUI/FlatCAMGUI.py:332 +#: flatcamGUI/MainGUI.py:332 msgid "Edit Object\tE" msgstr "Objekt bearbeiten\tE" -#: flatcamGUI/FlatCAMGUI.py:334 +#: flatcamGUI/MainGUI.py:334 msgid "Close Editor\tCtrl+S" msgstr "Schließen Sie Editor\tSTRG+S" -#: flatcamGUI/FlatCAMGUI.py:343 +#: flatcamGUI/MainGUI.py:343 msgid "Conversion" msgstr "Umwandlung" -#: flatcamGUI/FlatCAMGUI.py:345 +#: flatcamGUI/MainGUI.py:345 msgid "&Join Geo/Gerber/Exc -> Geo" msgstr "Geo/Gerber/Exc -> Geo zusammenfassen" -#: flatcamGUI/FlatCAMGUI.py:347 +#: flatcamGUI/MainGUI.py:347 msgid "" "Merge a selection of objects, which can be of type:\n" "- Gerber\n" @@ -5575,31 +5575,31 @@ msgstr "" "- Geometrie\n" "in ein neues Geometrieobjekt kombinieren." -#: flatcamGUI/FlatCAMGUI.py:354 +#: flatcamGUI/MainGUI.py:354 msgid "Join Excellon(s) -> Excellon" msgstr "Excellon(s) -> Excellon zusammenfassen" -#: flatcamGUI/FlatCAMGUI.py:356 +#: flatcamGUI/MainGUI.py:356 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:359 +#: flatcamGUI/MainGUI.py:359 msgid "Join Gerber(s) -> Gerber" msgstr "Gerber(s) -> Gerber zusammenfassen" -#: flatcamGUI/FlatCAMGUI.py:361 +#: flatcamGUI/MainGUI.py:361 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:366 +#: flatcamGUI/MainGUI.py:366 msgid "Convert Single to MultiGeo" msgstr "Konvertieren Sie Single in MultiGeo" -#: flatcamGUI/FlatCAMGUI.py:368 +#: flatcamGUI/MainGUI.py:368 msgid "" "Will convert a Geometry object from single_geometry type\n" "to a multi_geometry type." @@ -5607,11 +5607,11 @@ msgstr "" "Konvertiert ein Geometrieobjekt vom Typ single_geometry\n" "zu einem multi_geometry-Typ." -#: flatcamGUI/FlatCAMGUI.py:372 +#: flatcamGUI/MainGUI.py:372 msgid "Convert Multi to SingleGeo" msgstr "Konvertieren Sie Multi in SingleGeo" -#: flatcamGUI/FlatCAMGUI.py:374 +#: flatcamGUI/MainGUI.py:374 msgid "" "Will convert a Geometry object from multi_geometry type\n" "to a single_geometry type." @@ -5619,758 +5619,758 @@ msgstr "" "Konvertiert ein Geometrieobjekt vom Typ multi_geometry\n" "zu einem single_geometry-Typ." -#: flatcamGUI/FlatCAMGUI.py:381 +#: flatcamGUI/MainGUI.py:381 msgid "Convert Any to Geo" msgstr "Konvertieren Sie Any zu Geo" -#: flatcamGUI/FlatCAMGUI.py:384 +#: flatcamGUI/MainGUI.py:384 msgid "Convert Any to Gerber" msgstr "Konvertieren Sie Any zu Gerber" -#: flatcamGUI/FlatCAMGUI.py:390 +#: flatcamGUI/MainGUI.py:390 msgid "&Copy\tCtrl+C" msgstr "Kopieren\tSTRG+C" -#: flatcamGUI/FlatCAMGUI.py:395 +#: flatcamGUI/MainGUI.py:395 msgid "&Delete\tDEL" msgstr "Löschen\tDEL" -#: flatcamGUI/FlatCAMGUI.py:400 +#: flatcamGUI/MainGUI.py:400 msgid "Se&t Origin\tO" msgstr "Ursprung festlegen\tO" -#: flatcamGUI/FlatCAMGUI.py:402 +#: flatcamGUI/MainGUI.py:402 msgid "Move to Origin\tShift+O" msgstr "Zum Ursprung wechseln\tShift+O" -#: flatcamGUI/FlatCAMGUI.py:405 +#: flatcamGUI/MainGUI.py:405 msgid "Jump to Location\tJ" msgstr "Zum Ort springen\tJ" -#: flatcamGUI/FlatCAMGUI.py:407 +#: flatcamGUI/MainGUI.py:407 msgid "Locate in Object\tShift+J" msgstr "Suchen Sie im Objekt\tShift+J" -#: flatcamGUI/FlatCAMGUI.py:412 +#: flatcamGUI/MainGUI.py:412 msgid "Toggle Units\tQ" msgstr "Einheiten umschalten\tQ" -#: flatcamGUI/FlatCAMGUI.py:414 +#: flatcamGUI/MainGUI.py:414 msgid "&Select All\tCtrl+A" msgstr "Alles auswählen\tSTRG+A" -#: flatcamGUI/FlatCAMGUI.py:419 +#: flatcamGUI/MainGUI.py:419 msgid "&Preferences\tShift+P" msgstr "Einstellungen\tShift+P" -#: flatcamGUI/FlatCAMGUI.py:425 flatcamTools/ToolProperties.py:155 +#: flatcamGUI/MainGUI.py:425 flatcamTools/ToolProperties.py:155 msgid "Options" msgstr "Optionen" -#: flatcamGUI/FlatCAMGUI.py:427 +#: flatcamGUI/MainGUI.py:427 msgid "&Rotate Selection\tShift+(R)" msgstr "Auswahl drehen\tShift+(R)" -#: flatcamGUI/FlatCAMGUI.py:432 +#: flatcamGUI/MainGUI.py:432 msgid "&Skew on X axis\tShift+X" msgstr "Neigung auf der X-Achse\tShift+X" -#: flatcamGUI/FlatCAMGUI.py:434 +#: flatcamGUI/MainGUI.py:434 msgid "S&kew on Y axis\tShift+Y" msgstr "Neigung auf der Y-Achse\tShift+Y" -#: flatcamGUI/FlatCAMGUI.py:439 +#: flatcamGUI/MainGUI.py:439 msgid "Flip on &X axis\tX" msgstr "X-Achse kippen\tX" -#: flatcamGUI/FlatCAMGUI.py:441 +#: flatcamGUI/MainGUI.py:441 msgid "Flip on &Y axis\tY" msgstr "Y-Achse kippen\tY" -#: flatcamGUI/FlatCAMGUI.py:446 +#: flatcamGUI/MainGUI.py:446 msgid "View source\tAlt+S" msgstr "Quelltext anzeigen\tAlt+S" -#: flatcamGUI/FlatCAMGUI.py:448 +#: flatcamGUI/MainGUI.py:448 msgid "Tools DataBase\tCtrl+D" msgstr "Werkzeugdatenbank\tSTRG+D" -#: flatcamGUI/FlatCAMGUI.py:455 flatcamGUI/FlatCAMGUI.py:2183 +#: flatcamGUI/MainGUI.py:455 flatcamGUI/MainGUI.py:2183 msgid "View" msgstr "Aussicht" -#: flatcamGUI/FlatCAMGUI.py:457 +#: flatcamGUI/MainGUI.py:457 msgid "Enable all plots\tAlt+1" msgstr "Alle Diagramme aktivieren\tAlt+1" -#: flatcamGUI/FlatCAMGUI.py:459 +#: flatcamGUI/MainGUI.py:459 msgid "Disable all plots\tAlt+2" msgstr "Alle Diagramme deaktivieren\tAlt+2" -#: flatcamGUI/FlatCAMGUI.py:461 +#: flatcamGUI/MainGUI.py:461 msgid "Disable non-selected\tAlt+3" msgstr "Nicht ausgewählte Diagramme deaktivieren\tAlt+3" -#: flatcamGUI/FlatCAMGUI.py:465 +#: flatcamGUI/MainGUI.py:465 msgid "&Zoom Fit\tV" msgstr "Passed zoomen\tV" -#: flatcamGUI/FlatCAMGUI.py:467 +#: flatcamGUI/MainGUI.py:467 msgid "&Zoom In\t=" msgstr "Hineinzoomen\t=" -#: flatcamGUI/FlatCAMGUI.py:469 +#: flatcamGUI/MainGUI.py:469 msgid "&Zoom Out\t-" msgstr "Rauszoomen\t-" -#: flatcamGUI/FlatCAMGUI.py:474 +#: flatcamGUI/MainGUI.py:474 msgid "Redraw All\tF5" msgstr "Alles neu zeichnen\tF5" -#: flatcamGUI/FlatCAMGUI.py:478 +#: flatcamGUI/MainGUI.py:478 msgid "Toggle Code Editor\tShift+E" msgstr "Code-Editor umschalten\tShift+E" -#: flatcamGUI/FlatCAMGUI.py:481 +#: flatcamGUI/MainGUI.py:481 msgid "&Toggle FullScreen\tAlt+F10" msgstr "FullScreen umschalten\tAlt+F10" -#: flatcamGUI/FlatCAMGUI.py:483 +#: flatcamGUI/MainGUI.py:483 msgid "&Toggle Plot Area\tCtrl+F10" msgstr "Plotbereich umschalten\tSTRG+F10" -#: flatcamGUI/FlatCAMGUI.py:485 +#: flatcamGUI/MainGUI.py:485 msgid "&Toggle Project/Sel/Tool\t`" msgstr "Projekt/Auswahl/Werkzeug umschalten\t`" -#: flatcamGUI/FlatCAMGUI.py:489 +#: flatcamGUI/MainGUI.py:489 msgid "&Toggle Grid Snap\tG" msgstr "Schaltet den Rasterfang ein\tG" -#: flatcamGUI/FlatCAMGUI.py:491 +#: flatcamGUI/MainGUI.py:491 msgid "&Toggle Grid Lines\tAlt+G" msgstr "Gitterlinien umschalten\tAlt+G" -#: flatcamGUI/FlatCAMGUI.py:493 +#: flatcamGUI/MainGUI.py:493 msgid "&Toggle Axis\tShift+G" msgstr "Achse umschalten\tShift+G" -#: flatcamGUI/FlatCAMGUI.py:495 +#: flatcamGUI/MainGUI.py:495 msgid "Toggle Workspace\tShift+W" msgstr "Arbeitsbereich umschalten\tShift+W" -#: flatcamGUI/FlatCAMGUI.py:500 +#: flatcamGUI/MainGUI.py:500 msgid "Objects" msgstr "Objekte" -#: flatcamGUI/FlatCAMGUI.py:514 +#: flatcamGUI/MainGUI.py:514 msgid "&Command Line\tS" msgstr "Befehlszeile\tS" -#: flatcamGUI/FlatCAMGUI.py:519 +#: flatcamGUI/MainGUI.py:519 msgid "Help" msgstr "Hilfe" -#: flatcamGUI/FlatCAMGUI.py:521 +#: flatcamGUI/MainGUI.py:521 msgid "Online Help\tF1" msgstr "Onlinehilfe\tF1" -#: flatcamGUI/FlatCAMGUI.py:531 +#: flatcamGUI/MainGUI.py:531 msgid "Report a bug" msgstr "Einen Fehler melden" -#: flatcamGUI/FlatCAMGUI.py:534 +#: flatcamGUI/MainGUI.py:534 msgid "Excellon Specification" msgstr "Excellon-Spezifikation" -#: flatcamGUI/FlatCAMGUI.py:536 +#: flatcamGUI/MainGUI.py:536 msgid "Gerber Specification" msgstr "Gerber-Spezifikation" -#: flatcamGUI/FlatCAMGUI.py:541 +#: flatcamGUI/MainGUI.py:541 msgid "Shortcuts List\tF3" msgstr "Tastenkürzel Liste\tF3" -#: flatcamGUI/FlatCAMGUI.py:543 +#: flatcamGUI/MainGUI.py:543 msgid "YouTube Channel\tF4" msgstr "Youtube Kanal\tF4" -#: flatcamGUI/FlatCAMGUI.py:554 +#: flatcamGUI/MainGUI.py:554 msgid "Add Circle\tO" msgstr "Kreis hinzufügen\tO" -#: flatcamGUI/FlatCAMGUI.py:557 +#: flatcamGUI/MainGUI.py:557 msgid "Add Arc\tA" msgstr "Bogen hinzufügen\tA" -#: flatcamGUI/FlatCAMGUI.py:560 +#: flatcamGUI/MainGUI.py:560 msgid "Add Rectangle\tR" msgstr "Rechteck hinzufügen\tR" -#: flatcamGUI/FlatCAMGUI.py:563 +#: flatcamGUI/MainGUI.py:563 msgid "Add Polygon\tN" msgstr "Polygon hinzufügen\tN" -#: flatcamGUI/FlatCAMGUI.py:566 +#: flatcamGUI/MainGUI.py:566 msgid "Add Path\tP" msgstr "Pfad hinzufügen\tP" -#: flatcamGUI/FlatCAMGUI.py:569 +#: flatcamGUI/MainGUI.py:569 msgid "Add Text\tT" msgstr "Text hinzufügen\tT" -#: flatcamGUI/FlatCAMGUI.py:572 +#: flatcamGUI/MainGUI.py:572 msgid "Polygon Union\tU" msgstr "Polygon-Vereinigung\tU" -#: flatcamGUI/FlatCAMGUI.py:574 +#: flatcamGUI/MainGUI.py:574 msgid "Polygon Intersection\tE" msgstr "Polygonschnitt\tE" -#: flatcamGUI/FlatCAMGUI.py:576 +#: flatcamGUI/MainGUI.py:576 msgid "Polygon Subtraction\tS" msgstr "Polygon-Subtraktion\tS" -#: flatcamGUI/FlatCAMGUI.py:580 +#: flatcamGUI/MainGUI.py:580 msgid "Cut Path\tX" msgstr "Pfad ausschneiden\tX" -#: flatcamGUI/FlatCAMGUI.py:584 +#: flatcamGUI/MainGUI.py:584 msgid "Copy Geom\tC" msgstr "Geometrie kopieren\tC" -#: flatcamGUI/FlatCAMGUI.py:586 +#: flatcamGUI/MainGUI.py:586 msgid "Delete Shape\tDEL" msgstr "Form löschen\tDEL" -#: flatcamGUI/FlatCAMGUI.py:590 flatcamGUI/FlatCAMGUI.py:677 +#: flatcamGUI/MainGUI.py:590 flatcamGUI/MainGUI.py:677 msgid "Move\tM" msgstr "Bewegung\tM" -#: flatcamGUI/FlatCAMGUI.py:592 +#: flatcamGUI/MainGUI.py:592 msgid "Buffer Tool\tB" msgstr "Pufferwerkzeug\tB" -#: flatcamGUI/FlatCAMGUI.py:595 +#: flatcamGUI/MainGUI.py:595 msgid "Paint Tool\tI" msgstr "Malenwerkzeug\tI" -#: flatcamGUI/FlatCAMGUI.py:598 +#: flatcamGUI/MainGUI.py:598 msgid "Transform Tool\tAlt+R" msgstr "Transformationswerkzeug\tAlt+R" -#: flatcamGUI/FlatCAMGUI.py:602 +#: flatcamGUI/MainGUI.py:602 msgid "Toggle Corner Snap\tK" msgstr "Eckfang umschalten\tK" -#: flatcamGUI/FlatCAMGUI.py:608 +#: flatcamGUI/MainGUI.py:608 msgid ">Excellon Editor<" msgstr ">Excellon Editor<" -#: flatcamGUI/FlatCAMGUI.py:612 +#: flatcamGUI/MainGUI.py:612 msgid "Add Drill Array\tA" msgstr "Bohrfeld hinzufügen\tA" -#: flatcamGUI/FlatCAMGUI.py:614 +#: flatcamGUI/MainGUI.py:614 msgid "Add Drill\tD" msgstr "Bohrer hinzufügen\tD" -#: flatcamGUI/FlatCAMGUI.py:618 +#: flatcamGUI/MainGUI.py:618 msgid "Add Slot Array\tQ" msgstr "Steckplatz-Array hinzufügen\tQ" -#: flatcamGUI/FlatCAMGUI.py:620 +#: flatcamGUI/MainGUI.py:620 msgid "Add Slot\tW" msgstr "Slot hinzufügen\tW" -#: flatcamGUI/FlatCAMGUI.py:624 +#: flatcamGUI/MainGUI.py:624 msgid "Resize Drill(S)\tR" msgstr "Bohrer verkleinern\tR" -#: flatcamGUI/FlatCAMGUI.py:627 flatcamGUI/FlatCAMGUI.py:671 +#: flatcamGUI/MainGUI.py:627 flatcamGUI/MainGUI.py:671 msgid "Copy\tC" msgstr "Kopieren\tC" -#: flatcamGUI/FlatCAMGUI.py:629 flatcamGUI/FlatCAMGUI.py:673 +#: flatcamGUI/MainGUI.py:629 flatcamGUI/MainGUI.py:673 msgid "Delete\tDEL" msgstr "Löschen\tDEL" -#: flatcamGUI/FlatCAMGUI.py:634 +#: flatcamGUI/MainGUI.py:634 msgid "Move Drill(s)\tM" msgstr "Bohrer verschieben\tM" -#: flatcamGUI/FlatCAMGUI.py:639 +#: flatcamGUI/MainGUI.py:639 msgid ">Gerber Editor<" msgstr ">Gerber-Editor<" -#: flatcamGUI/FlatCAMGUI.py:643 +#: flatcamGUI/MainGUI.py:643 msgid "Add Pad\tP" msgstr "Pad hinzufügen\tP" -#: flatcamGUI/FlatCAMGUI.py:645 +#: flatcamGUI/MainGUI.py:645 msgid "Add Pad Array\tA" msgstr "Pad-Array hinzufügen\tA" -#: flatcamGUI/FlatCAMGUI.py:647 +#: flatcamGUI/MainGUI.py:647 msgid "Add Track\tT" msgstr "Track hinzufügen\tA" -#: flatcamGUI/FlatCAMGUI.py:649 +#: flatcamGUI/MainGUI.py:649 msgid "Add Region\tN" msgstr "Region hinzufügen\tN" -#: flatcamGUI/FlatCAMGUI.py:653 +#: flatcamGUI/MainGUI.py:653 msgid "Poligonize\tAlt+N" msgstr "Polygonisieren\tAlt+N" -#: flatcamGUI/FlatCAMGUI.py:655 +#: flatcamGUI/MainGUI.py:655 msgid "Add SemiDisc\tE" msgstr "Halbschibe hinzufügen\tE" -#: flatcamGUI/FlatCAMGUI.py:657 +#: flatcamGUI/MainGUI.py:657 msgid "Add Disc\tD" msgstr "Schibe hinzufügen\tD" -#: flatcamGUI/FlatCAMGUI.py:659 +#: flatcamGUI/MainGUI.py:659 msgid "Buffer\tB" msgstr "Puffer\tB" -#: flatcamGUI/FlatCAMGUI.py:661 +#: flatcamGUI/MainGUI.py:661 msgid "Scale\tS" msgstr "Skalieren\tS" -#: flatcamGUI/FlatCAMGUI.py:663 +#: flatcamGUI/MainGUI.py:663 msgid "Mark Area\tAlt+A" msgstr "Bereich markieren\tAlt+A" -#: flatcamGUI/FlatCAMGUI.py:665 +#: flatcamGUI/MainGUI.py:665 msgid "Eraser\tCtrl+E" msgstr "Radiergummi\tSTRG+E" -#: flatcamGUI/FlatCAMGUI.py:667 +#: flatcamGUI/MainGUI.py:667 msgid "Transform\tAlt+R" msgstr "Transformationswerkzeug\tSTRG+R" -#: flatcamGUI/FlatCAMGUI.py:694 +#: flatcamGUI/MainGUI.py:694 msgid "Enable Plot" msgstr "Diagramm aktivieren" -#: flatcamGUI/FlatCAMGUI.py:696 +#: flatcamGUI/MainGUI.py:696 msgid "Disable Plot" msgstr "Diagramm deaktivieren" -#: flatcamGUI/FlatCAMGUI.py:700 +#: flatcamGUI/MainGUI.py:700 msgid "Set Color" msgstr "Farbsatz" -#: flatcamGUI/FlatCAMGUI.py:742 +#: flatcamGUI/MainGUI.py:742 msgid "Generate CNC" msgstr "CNC generieren" -#: flatcamGUI/FlatCAMGUI.py:744 +#: flatcamGUI/MainGUI.py:744 msgid "View Source" msgstr "Quelltext anzeigen" -#: flatcamGUI/FlatCAMGUI.py:749 flatcamGUI/FlatCAMGUI.py:863 -#: flatcamGUI/FlatCAMGUI.py:1072 flatcamGUI/FlatCAMGUI.py:2138 -#: flatcamGUI/FlatCAMGUI.py:2282 flatcamGUI/FlatCAMGUI.py:2572 -#: flatcamGUI/FlatCAMGUI.py:2775 flatcamGUI/ObjectUI.py:1617 +#: flatcamGUI/MainGUI.py:749 flatcamGUI/MainGUI.py:863 +#: flatcamGUI/MainGUI.py:1072 flatcamGUI/MainGUI.py:2138 +#: flatcamGUI/MainGUI.py:2282 flatcamGUI/MainGUI.py:2572 +#: flatcamGUI/MainGUI.py:2775 flatcamGUI/ObjectUI.py:1617 #: flatcamObjects/FlatCAMGeometry.py:502 flatcamTools/ToolPanelize.py:540 #: flatcamTools/ToolPanelize.py:567 flatcamTools/ToolPanelize.py:660 #: flatcamTools/ToolPanelize.py:689 flatcamTools/ToolPanelize.py:751 msgid "Copy" msgstr "Kopieren" -#: flatcamGUI/FlatCAMGUI.py:757 flatcamGUI/FlatCAMGUI.py:2295 +#: flatcamGUI/MainGUI.py:757 flatcamGUI/MainGUI.py:2295 #: flatcamTools/ToolProperties.py:31 msgid "Properties" msgstr "Eigenschaften" -#: flatcamGUI/FlatCAMGUI.py:786 +#: flatcamGUI/MainGUI.py:786 msgid "File Toolbar" msgstr "Dateisymbolleiste" -#: flatcamGUI/FlatCAMGUI.py:790 +#: flatcamGUI/MainGUI.py:790 msgid "Edit Toolbar" msgstr "Symbolleiste bearbeiten" -#: flatcamGUI/FlatCAMGUI.py:794 +#: flatcamGUI/MainGUI.py:794 msgid "View Toolbar" msgstr "Symbolleiste anzeigen" -#: flatcamGUI/FlatCAMGUI.py:798 +#: flatcamGUI/MainGUI.py:798 msgid "Shell Toolbar" msgstr "Shell-Symbolleiste" -#: flatcamGUI/FlatCAMGUI.py:802 +#: flatcamGUI/MainGUI.py:802 msgid "Tools Toolbar" msgstr "Werkzeugleiste" -#: flatcamGUI/FlatCAMGUI.py:806 +#: flatcamGUI/MainGUI.py:806 msgid "Excellon Editor Toolbar" msgstr "Excellon Editor-Symbolleiste" -#: flatcamGUI/FlatCAMGUI.py:812 +#: flatcamGUI/MainGUI.py:812 msgid "Geometry Editor Toolbar" msgstr "Geometrie Editor-Symbolleiste" -#: flatcamGUI/FlatCAMGUI.py:816 +#: flatcamGUI/MainGUI.py:816 msgid "Gerber Editor Toolbar" msgstr "Gerber Editor-Symbolleiste" -#: flatcamGUI/FlatCAMGUI.py:820 +#: flatcamGUI/MainGUI.py:820 msgid "Grid Toolbar" msgstr "Raster-Symbolleiste" -#: flatcamGUI/FlatCAMGUI.py:841 flatcamGUI/FlatCAMGUI.py:2549 +#: flatcamGUI/MainGUI.py:841 flatcamGUI/MainGUI.py:2549 msgid "Open project" msgstr "Projekt öffnen" -#: flatcamGUI/FlatCAMGUI.py:843 flatcamGUI/FlatCAMGUI.py:2551 +#: flatcamGUI/MainGUI.py:843 flatcamGUI/MainGUI.py:2551 msgid "Save project" msgstr "Projekt speichern" -#: flatcamGUI/FlatCAMGUI.py:849 flatcamGUI/FlatCAMGUI.py:2557 +#: flatcamGUI/MainGUI.py:849 flatcamGUI/MainGUI.py:2557 msgid "New Blank Geometry" msgstr "Neue Geometrie erstellen" -#: flatcamGUI/FlatCAMGUI.py:851 flatcamGUI/FlatCAMGUI.py:2559 +#: flatcamGUI/MainGUI.py:851 flatcamGUI/MainGUI.py:2559 msgid "New Blank Gerber" msgstr "Neues Gerber erstellen" -#: flatcamGUI/FlatCAMGUI.py:853 flatcamGUI/FlatCAMGUI.py:2561 +#: flatcamGUI/MainGUI.py:853 flatcamGUI/MainGUI.py:2561 msgid "New Blank Excellon" msgstr "Neuen Excellon erstellen" -#: flatcamGUI/FlatCAMGUI.py:858 flatcamGUI/FlatCAMGUI.py:2567 +#: flatcamGUI/MainGUI.py:858 flatcamGUI/MainGUI.py:2567 msgid "Save Object and close the Editor" msgstr "Speichern Sie das Objekt und schließen Sie den Editor" -#: flatcamGUI/FlatCAMGUI.py:865 flatcamGUI/FlatCAMGUI.py:2574 +#: flatcamGUI/MainGUI.py:865 flatcamGUI/MainGUI.py:2574 msgid "&Delete" msgstr "&Löschen" -#: flatcamGUI/FlatCAMGUI.py:868 flatcamGUI/FlatCAMGUI.py:1729 -#: flatcamGUI/FlatCAMGUI.py:1935 flatcamGUI/FlatCAMGUI.py:2577 +#: flatcamGUI/MainGUI.py:868 flatcamGUI/MainGUI.py:1729 +#: flatcamGUI/MainGUI.py:1935 flatcamGUI/MainGUI.py:2577 #: flatcamTools/ToolDistance.py:35 flatcamTools/ToolDistance.py:195 msgid "Distance Tool" msgstr "Entfernungswerkzeug" -#: flatcamGUI/FlatCAMGUI.py:870 flatcamGUI/FlatCAMGUI.py:2579 +#: flatcamGUI/MainGUI.py:870 flatcamGUI/MainGUI.py:2579 msgid "Distance Min Tool" msgstr "Werkzeug für Mindestabstand" -#: flatcamGUI/FlatCAMGUI.py:872 flatcamGUI/FlatCAMGUI.py:1722 -#: flatcamGUI/FlatCAMGUI.py:2581 +#: flatcamGUI/MainGUI.py:872 flatcamGUI/MainGUI.py:1722 +#: flatcamGUI/MainGUI.py:2581 msgid "Set Origin" msgstr "Nullpunkt festlegen" -#: flatcamGUI/FlatCAMGUI.py:874 +#: flatcamGUI/MainGUI.py:874 msgid "Move to Origin" msgstr "Zum Ursprung wechseln" -#: flatcamGUI/FlatCAMGUI.py:877 flatcamGUI/FlatCAMGUI.py:2583 +#: flatcamGUI/MainGUI.py:877 flatcamGUI/MainGUI.py:2583 msgid "Jump to Location" msgstr "Zur Position springen\tJ" -#: flatcamGUI/FlatCAMGUI.py:879 flatcamGUI/FlatCAMGUI.py:1734 -#: flatcamGUI/FlatCAMGUI.py:2585 +#: flatcamGUI/MainGUI.py:879 flatcamGUI/MainGUI.py:1734 +#: flatcamGUI/MainGUI.py:2585 msgid "Locate in Object" msgstr "Suchen Sie im Objekt" -#: flatcamGUI/FlatCAMGUI.py:885 flatcamGUI/FlatCAMGUI.py:2591 +#: flatcamGUI/MainGUI.py:885 flatcamGUI/MainGUI.py:2591 msgid "&Replot" msgstr "Neuzeichnen &R" -#: flatcamGUI/FlatCAMGUI.py:887 flatcamGUI/FlatCAMGUI.py:2593 +#: flatcamGUI/MainGUI.py:887 flatcamGUI/MainGUI.py:2593 msgid "&Clear plot" msgstr "Darstellung löschen &C" -#: flatcamGUI/FlatCAMGUI.py:889 flatcamGUI/FlatCAMGUI.py:1725 -#: flatcamGUI/FlatCAMGUI.py:2595 +#: flatcamGUI/MainGUI.py:889 flatcamGUI/MainGUI.py:1725 +#: flatcamGUI/MainGUI.py:2595 msgid "Zoom In" msgstr "Hineinzoomen" -#: flatcamGUI/FlatCAMGUI.py:891 flatcamGUI/FlatCAMGUI.py:1725 -#: flatcamGUI/FlatCAMGUI.py:2597 +#: flatcamGUI/MainGUI.py:891 flatcamGUI/MainGUI.py:1725 +#: flatcamGUI/MainGUI.py:2597 msgid "Zoom Out" msgstr "Rauszoomen" -#: flatcamGUI/FlatCAMGUI.py:893 flatcamGUI/FlatCAMGUI.py:1724 -#: flatcamGUI/FlatCAMGUI.py:2185 flatcamGUI/FlatCAMGUI.py:2599 +#: flatcamGUI/MainGUI.py:893 flatcamGUI/MainGUI.py:1724 +#: flatcamGUI/MainGUI.py:2185 flatcamGUI/MainGUI.py:2599 msgid "Zoom Fit" msgstr "Passend zoomen" -#: flatcamGUI/FlatCAMGUI.py:901 flatcamGUI/FlatCAMGUI.py:2605 +#: flatcamGUI/MainGUI.py:901 flatcamGUI/MainGUI.py:2605 msgid "&Command Line" msgstr "Befehlszeile" -#: flatcamGUI/FlatCAMGUI.py:913 flatcamGUI/FlatCAMGUI.py:2617 +#: flatcamGUI/MainGUI.py:913 flatcamGUI/MainGUI.py:2617 msgid "2Sided Tool" msgstr "2Seitiges Werkzeug" -#: flatcamGUI/FlatCAMGUI.py:915 flatcamGUI/FlatCAMGUI.py:1740 -#: flatcamGUI/FlatCAMGUI.py:2619 +#: flatcamGUI/MainGUI.py:915 flatcamGUI/MainGUI.py:1740 +#: flatcamGUI/MainGUI.py:2619 msgid "Align Objects Tool" msgstr "Werkzeug \"Objekte ausrichten\"" -#: flatcamGUI/FlatCAMGUI.py:917 flatcamGUI/FlatCAMGUI.py:1741 -#: flatcamGUI/FlatCAMGUI.py:2621 flatcamTools/ToolExtractDrills.py:393 +#: flatcamGUI/MainGUI.py:917 flatcamGUI/MainGUI.py:1741 +#: flatcamGUI/MainGUI.py:2621 flatcamTools/ToolExtractDrills.py:393 msgid "Extract Drills Tool" msgstr "Bohrer Extrahieren Werkzeug" -#: flatcamGUI/FlatCAMGUI.py:920 flatcamGUI/ObjectUI.py:596 +#: flatcamGUI/MainGUI.py:920 flatcamGUI/ObjectUI.py:596 #: flatcamTools/ToolCutOut.py:440 msgid "Cutout Tool" msgstr "Ausschnittwerkzeug" -#: flatcamGUI/FlatCAMGUI.py:922 flatcamGUI/FlatCAMGUI.py:2626 +#: flatcamGUI/MainGUI.py:922 flatcamGUI/MainGUI.py:2626 #: flatcamGUI/ObjectUI.py:574 flatcamGUI/ObjectUI.py:2157 #: flatcamTools/ToolNCC.py:974 msgid "NCC Tool" msgstr "NCC Werkzeug" -#: flatcamGUI/FlatCAMGUI.py:928 flatcamGUI/FlatCAMGUI.py:2632 +#: flatcamGUI/MainGUI.py:928 flatcamGUI/MainGUI.py:2632 msgid "Panel Tool" msgstr "Platte Werkzeug" -#: flatcamGUI/FlatCAMGUI.py:930 flatcamGUI/FlatCAMGUI.py:2634 +#: flatcamGUI/MainGUI.py:930 flatcamGUI/MainGUI.py:2634 #: flatcamTools/ToolFilm.py:586 msgid "Film Tool" msgstr "Filmwerkzeug" -#: flatcamGUI/FlatCAMGUI.py:932 flatcamGUI/FlatCAMGUI.py:2636 +#: flatcamGUI/MainGUI.py:932 flatcamGUI/MainGUI.py:2636 #: flatcamTools/ToolSolderPaste.py:553 msgid "SolderPaste Tool" msgstr "Lötpaste-Werkzeug" -#: flatcamGUI/FlatCAMGUI.py:934 flatcamGUI/FlatCAMGUI.py:2638 +#: flatcamGUI/MainGUI.py:934 flatcamGUI/MainGUI.py:2638 #: flatcamTools/ToolSub.py:35 msgid "Subtract Tool" msgstr "Subtraktionswerkzeug" -#: flatcamGUI/FlatCAMGUI.py:936 flatcamGUI/FlatCAMGUI.py:2640 +#: flatcamGUI/MainGUI.py:936 flatcamGUI/MainGUI.py:2640 #: flatcamTools/ToolRulesCheck.py:616 msgid "Rules Tool" msgstr "Regelwerkzeug" -#: flatcamGUI/FlatCAMGUI.py:938 flatcamGUI/FlatCAMGUI.py:1743 -#: flatcamGUI/FlatCAMGUI.py:2642 flatcamTools/ToolOptimal.py:33 +#: flatcamGUI/MainGUI.py:938 flatcamGUI/MainGUI.py:1743 +#: flatcamGUI/MainGUI.py:2642 flatcamTools/ToolOptimal.py:33 #: flatcamTools/ToolOptimal.py:307 msgid "Optimal Tool" msgstr "Optimierungswerkzeug" -#: flatcamGUI/FlatCAMGUI.py:943 flatcamGUI/FlatCAMGUI.py:1740 -#: flatcamGUI/FlatCAMGUI.py:2647 +#: flatcamGUI/MainGUI.py:943 flatcamGUI/MainGUI.py:1740 +#: flatcamGUI/MainGUI.py:2647 msgid "Calculators Tool" msgstr "Rechnerwerkzeug" -#: flatcamGUI/FlatCAMGUI.py:947 flatcamGUI/FlatCAMGUI.py:1744 -#: flatcamGUI/FlatCAMGUI.py:2651 flatcamTools/ToolQRCode.py:43 +#: flatcamGUI/MainGUI.py:947 flatcamGUI/MainGUI.py:1744 +#: flatcamGUI/MainGUI.py:2651 flatcamTools/ToolQRCode.py:43 #: flatcamTools/ToolQRCode.py:382 msgid "QRCode Tool" msgstr "QRCode Werkzeug" # Really don't know -#: flatcamGUI/FlatCAMGUI.py:949 flatcamGUI/FlatCAMGUI.py:2653 +#: flatcamGUI/MainGUI.py:949 flatcamGUI/MainGUI.py:2653 #: flatcamTools/ToolCopperThieving.py:39 flatcamTools/ToolCopperThieving.py:568 msgid "Copper Thieving Tool" msgstr "Copper Thieving Werkzeug" # Really don't know -#: flatcamGUI/FlatCAMGUI.py:952 flatcamGUI/FlatCAMGUI.py:1741 -#: flatcamGUI/FlatCAMGUI.py:2656 flatcamTools/ToolFiducials.py:33 +#: flatcamGUI/MainGUI.py:952 flatcamGUI/MainGUI.py:1741 +#: flatcamGUI/MainGUI.py:2656 flatcamTools/ToolFiducials.py:33 #: flatcamTools/ToolFiducials.py:395 msgid "Fiducials Tool" msgstr "Passermarken-Tool" -#: flatcamGUI/FlatCAMGUI.py:954 flatcamGUI/FlatCAMGUI.py:2658 +#: flatcamGUI/MainGUI.py:954 flatcamGUI/MainGUI.py:2658 #: flatcamTools/ToolCalibration.py:37 flatcamTools/ToolCalibration.py:759 msgid "Calibration Tool" msgstr "Kalibierungswerkzeug" -#: flatcamGUI/FlatCAMGUI.py:956 flatcamGUI/FlatCAMGUI.py:1741 -#: flatcamGUI/FlatCAMGUI.py:2660 +#: flatcamGUI/MainGUI.py:956 flatcamGUI/MainGUI.py:1741 +#: flatcamGUI/MainGUI.py:2660 msgid "Punch Gerber Tool" msgstr "Stanzen Sie das Gerber-Werkzeug" -#: flatcamGUI/FlatCAMGUI.py:958 flatcamGUI/FlatCAMGUI.py:2662 +#: flatcamGUI/MainGUI.py:958 flatcamGUI/MainGUI.py:2662 #: flatcamTools/ToolInvertGerber.py:31 msgid "Invert Gerber Tool" msgstr "Invertieren Sie das Gerber-Werkzeug" -#: flatcamGUI/FlatCAMGUI.py:964 flatcamGUI/FlatCAMGUI.py:990 -#: flatcamGUI/FlatCAMGUI.py:1042 flatcamGUI/FlatCAMGUI.py:2668 -#: flatcamGUI/FlatCAMGUI.py:2746 +#: flatcamGUI/MainGUI.py:964 flatcamGUI/MainGUI.py:990 +#: flatcamGUI/MainGUI.py:1042 flatcamGUI/MainGUI.py:2668 +#: flatcamGUI/MainGUI.py:2746 msgid "Select" msgstr "Wählen" -#: flatcamGUI/FlatCAMGUI.py:966 flatcamGUI/FlatCAMGUI.py:2670 +#: flatcamGUI/MainGUI.py:966 flatcamGUI/MainGUI.py:2670 msgid "Add Drill Hole" msgstr "Bohrloch hinzufügen" -#: flatcamGUI/FlatCAMGUI.py:968 flatcamGUI/FlatCAMGUI.py:2672 +#: flatcamGUI/MainGUI.py:968 flatcamGUI/MainGUI.py:2672 msgid "Add Drill Hole Array" msgstr "Bohrlochfeld hinzufügen" -#: flatcamGUI/FlatCAMGUI.py:970 flatcamGUI/FlatCAMGUI.py:2020 -#: flatcamGUI/FlatCAMGUI.py:2273 flatcamGUI/FlatCAMGUI.py:2676 +#: flatcamGUI/MainGUI.py:970 flatcamGUI/MainGUI.py:2020 +#: flatcamGUI/MainGUI.py:2273 flatcamGUI/MainGUI.py:2676 msgid "Add Slot" msgstr "Steckplatz hinzufügen" -#: flatcamGUI/FlatCAMGUI.py:972 flatcamGUI/FlatCAMGUI.py:2019 -#: flatcamGUI/FlatCAMGUI.py:2275 flatcamGUI/FlatCAMGUI.py:2678 +#: flatcamGUI/MainGUI.py:972 flatcamGUI/MainGUI.py:2019 +#: flatcamGUI/MainGUI.py:2275 flatcamGUI/MainGUI.py:2678 msgid "Add Slot Array" msgstr "Steckplatz-Array hinzufügen" -#: flatcamGUI/FlatCAMGUI.py:974 flatcamGUI/FlatCAMGUI.py:2278 -#: flatcamGUI/FlatCAMGUI.py:2674 +#: flatcamGUI/MainGUI.py:974 flatcamGUI/MainGUI.py:2278 +#: flatcamGUI/MainGUI.py:2674 msgid "Resize Drill" msgstr "Bohrergröße ändern" -#: flatcamGUI/FlatCAMGUI.py:978 flatcamGUI/FlatCAMGUI.py:2682 +#: flatcamGUI/MainGUI.py:978 flatcamGUI/MainGUI.py:2682 msgid "Copy Drill" msgstr "Bohrer kopieren" -#: flatcamGUI/FlatCAMGUI.py:980 flatcamGUI/FlatCAMGUI.py:2684 +#: flatcamGUI/MainGUI.py:980 flatcamGUI/MainGUI.py:2684 msgid "Delete Drill" msgstr "Bohrer löschen" -#: flatcamGUI/FlatCAMGUI.py:984 flatcamGUI/FlatCAMGUI.py:2688 +#: flatcamGUI/MainGUI.py:984 flatcamGUI/MainGUI.py:2688 msgid "Move Drill" msgstr "Bohrer bewegen" -#: flatcamGUI/FlatCAMGUI.py:992 flatcamGUI/FlatCAMGUI.py:2696 +#: flatcamGUI/MainGUI.py:992 flatcamGUI/MainGUI.py:2696 msgid "Add Circle" msgstr "Kreis hinzufügen" -#: flatcamGUI/FlatCAMGUI.py:994 flatcamGUI/FlatCAMGUI.py:2698 +#: flatcamGUI/MainGUI.py:994 flatcamGUI/MainGUI.py:2698 msgid "Add Arc" msgstr "Bogen hinzufügen" -#: flatcamGUI/FlatCAMGUI.py:996 flatcamGUI/FlatCAMGUI.py:2700 +#: flatcamGUI/MainGUI.py:996 flatcamGUI/MainGUI.py:2700 msgid "Add Rectangle" msgstr "Rechteck hinzufügen" -#: flatcamGUI/FlatCAMGUI.py:1000 flatcamGUI/FlatCAMGUI.py:2704 +#: flatcamGUI/MainGUI.py:1000 flatcamGUI/MainGUI.py:2704 msgid "Add Path" msgstr "Pfad hinzufügen" -#: flatcamGUI/FlatCAMGUI.py:1002 flatcamGUI/FlatCAMGUI.py:2706 +#: flatcamGUI/MainGUI.py:1002 flatcamGUI/MainGUI.py:2706 msgid "Add Polygon" msgstr "Polygon hinzufügen" -#: flatcamGUI/FlatCAMGUI.py:1005 flatcamGUI/FlatCAMGUI.py:2709 +#: flatcamGUI/MainGUI.py:1005 flatcamGUI/MainGUI.py:2709 msgid "Add Text" msgstr "Text hinzufügen" -#: flatcamGUI/FlatCAMGUI.py:1007 flatcamGUI/FlatCAMGUI.py:2711 +#: flatcamGUI/MainGUI.py:1007 flatcamGUI/MainGUI.py:2711 msgid "Add Buffer" msgstr "Puffer hinzufügen" -#: flatcamGUI/FlatCAMGUI.py:1009 flatcamGUI/FlatCAMGUI.py:2713 +#: flatcamGUI/MainGUI.py:1009 flatcamGUI/MainGUI.py:2713 msgid "Paint Shape" msgstr "Malen Form" -#: flatcamGUI/FlatCAMGUI.py:1011 flatcamGUI/FlatCAMGUI.py:1068 -#: flatcamGUI/FlatCAMGUI.py:2214 flatcamGUI/FlatCAMGUI.py:2259 -#: flatcamGUI/FlatCAMGUI.py:2715 flatcamGUI/FlatCAMGUI.py:2771 +#: flatcamGUI/MainGUI.py:1011 flatcamGUI/MainGUI.py:1068 +#: flatcamGUI/MainGUI.py:2214 flatcamGUI/MainGUI.py:2259 +#: flatcamGUI/MainGUI.py:2715 flatcamGUI/MainGUI.py:2771 msgid "Eraser" msgstr "Radiergummi" -#: flatcamGUI/FlatCAMGUI.py:1015 flatcamGUI/FlatCAMGUI.py:2719 +#: flatcamGUI/MainGUI.py:1015 flatcamGUI/MainGUI.py:2719 msgid "Polygon Union" msgstr "Polygon-Vereinigung" -#: flatcamGUI/FlatCAMGUI.py:1017 flatcamGUI/FlatCAMGUI.py:2721 +#: flatcamGUI/MainGUI.py:1017 flatcamGUI/MainGUI.py:2721 msgid "Polygon Explode" msgstr "Polygon explodieren" -#: flatcamGUI/FlatCAMGUI.py:1020 flatcamGUI/FlatCAMGUI.py:2724 +#: flatcamGUI/MainGUI.py:1020 flatcamGUI/MainGUI.py:2724 msgid "Polygon Intersection" msgstr "Polygonschnitt" -#: flatcamGUI/FlatCAMGUI.py:1022 flatcamGUI/FlatCAMGUI.py:2726 +#: flatcamGUI/MainGUI.py:1022 flatcamGUI/MainGUI.py:2726 msgid "Polygon Subtraction" msgstr "Polygon-Subtraktion" -#: flatcamGUI/FlatCAMGUI.py:1026 flatcamGUI/FlatCAMGUI.py:2730 +#: flatcamGUI/MainGUI.py:1026 flatcamGUI/MainGUI.py:2730 msgid "Cut Path" msgstr "Pfad ausschneiden" -#: flatcamGUI/FlatCAMGUI.py:1028 +#: flatcamGUI/MainGUI.py:1028 msgid "Copy Shape(s)" msgstr "Form kopieren" -#: flatcamGUI/FlatCAMGUI.py:1031 +#: flatcamGUI/MainGUI.py:1031 msgid "Delete Shape '-'" msgstr "Form löschen" -#: flatcamGUI/FlatCAMGUI.py:1033 flatcamGUI/FlatCAMGUI.py:1076 -#: flatcamGUI/FlatCAMGUI.py:2226 flatcamGUI/FlatCAMGUI.py:2263 -#: flatcamGUI/FlatCAMGUI.py:2736 flatcamGUI/FlatCAMGUI.py:2779 +#: flatcamGUI/MainGUI.py:1033 flatcamGUI/MainGUI.py:1076 +#: flatcamGUI/MainGUI.py:2226 flatcamGUI/MainGUI.py:2263 +#: flatcamGUI/MainGUI.py:2736 flatcamGUI/MainGUI.py:2779 #: flatcamGUI/ObjectUI.py:109 msgid "Transformations" msgstr "Transformationen" -#: flatcamGUI/FlatCAMGUI.py:1036 +#: flatcamGUI/MainGUI.py:1036 msgid "Move Objects " msgstr "Objekte verschieben " -#: flatcamGUI/FlatCAMGUI.py:1044 flatcamGUI/FlatCAMGUI.py:2139 -#: flatcamGUI/FlatCAMGUI.py:2748 +#: flatcamGUI/MainGUI.py:1044 flatcamGUI/MainGUI.py:2139 +#: flatcamGUI/MainGUI.py:2748 msgid "Add Pad" msgstr "Pad hinzufügen" -#: flatcamGUI/FlatCAMGUI.py:1048 flatcamGUI/FlatCAMGUI.py:2140 -#: flatcamGUI/FlatCAMGUI.py:2752 +#: flatcamGUI/MainGUI.py:1048 flatcamGUI/MainGUI.py:2140 +#: flatcamGUI/MainGUI.py:2752 msgid "Add Track" msgstr "Track hinzufügen" -#: flatcamGUI/FlatCAMGUI.py:1050 flatcamGUI/FlatCAMGUI.py:2139 -#: flatcamGUI/FlatCAMGUI.py:2754 +#: flatcamGUI/MainGUI.py:1050 flatcamGUI/MainGUI.py:2139 +#: flatcamGUI/MainGUI.py:2754 msgid "Add Region" msgstr "Region hinzufügen" -#: flatcamGUI/FlatCAMGUI.py:1052 flatcamGUI/FlatCAMGUI.py:2245 -#: flatcamGUI/FlatCAMGUI.py:2756 +#: flatcamGUI/MainGUI.py:1052 flatcamGUI/MainGUI.py:2245 +#: flatcamGUI/MainGUI.py:2756 msgid "Poligonize" msgstr "Polygonisieren" -#: flatcamGUI/FlatCAMGUI.py:1055 flatcamGUI/FlatCAMGUI.py:2247 -#: flatcamGUI/FlatCAMGUI.py:2759 +#: flatcamGUI/MainGUI.py:1055 flatcamGUI/MainGUI.py:2247 +#: flatcamGUI/MainGUI.py:2759 msgid "SemiDisc" msgstr "Halbscheibe" -#: flatcamGUI/FlatCAMGUI.py:1057 flatcamGUI/FlatCAMGUI.py:2249 -#: flatcamGUI/FlatCAMGUI.py:2761 +#: flatcamGUI/MainGUI.py:1057 flatcamGUI/MainGUI.py:2249 +#: flatcamGUI/MainGUI.py:2761 msgid "Disc" msgstr "Scheibe" -#: flatcamGUI/FlatCAMGUI.py:1065 flatcamGUI/FlatCAMGUI.py:2257 -#: flatcamGUI/FlatCAMGUI.py:2769 +#: flatcamGUI/MainGUI.py:1065 flatcamGUI/MainGUI.py:2257 +#: flatcamGUI/MainGUI.py:2769 msgid "Mark Area" msgstr "Bereich markieren" -#: flatcamGUI/FlatCAMGUI.py:1079 flatcamGUI/FlatCAMGUI.py:2139 -#: flatcamGUI/FlatCAMGUI.py:2230 flatcamGUI/FlatCAMGUI.py:2293 -#: flatcamGUI/FlatCAMGUI.py:2782 flatcamTools/ToolMove.py:27 +#: flatcamGUI/MainGUI.py:1079 flatcamGUI/MainGUI.py:2139 +#: flatcamGUI/MainGUI.py:2230 flatcamGUI/MainGUI.py:2293 +#: flatcamGUI/MainGUI.py:2782 flatcamTools/ToolMove.py:27 msgid "Move" msgstr "Bewegung" -#: flatcamGUI/FlatCAMGUI.py:1087 flatcamGUI/FlatCAMGUI.py:2791 +#: flatcamGUI/MainGUI.py:1087 flatcamGUI/MainGUI.py:2791 msgid "Snap to grid" msgstr "Am Raster ausrichten" -#: flatcamGUI/FlatCAMGUI.py:1090 flatcamGUI/FlatCAMGUI.py:2794 +#: flatcamGUI/MainGUI.py:1090 flatcamGUI/MainGUI.py:2794 msgid "Grid X snapping distance" msgstr "Raster X Fangdistanz" -#: flatcamGUI/FlatCAMGUI.py:1095 flatcamGUI/FlatCAMGUI.py:2799 +#: flatcamGUI/MainGUI.py:1095 flatcamGUI/MainGUI.py:2799 msgid "Grid Y snapping distance" msgstr "Raster Y Fangdistanz" -#: flatcamGUI/FlatCAMGUI.py:1101 flatcamGUI/FlatCAMGUI.py:2805 +#: flatcamGUI/MainGUI.py:1101 flatcamGUI/MainGUI.py:2805 msgid "" "When active, value on Grid_X\n" "is copied to the Grid_Y value." @@ -6378,65 +6378,65 @@ msgstr "" "Wenn aktiv, Wert auf Grid_X\n" "wird in den Wert von Grid_Y kopiert." -#: flatcamGUI/FlatCAMGUI.py:1108 flatcamGUI/FlatCAMGUI.py:2812 +#: flatcamGUI/MainGUI.py:1108 flatcamGUI/MainGUI.py:2812 msgid "Snap to corner" msgstr "In der Ecke ausrichten" -#: flatcamGUI/FlatCAMGUI.py:1112 flatcamGUI/FlatCAMGUI.py:2816 +#: flatcamGUI/MainGUI.py:1112 flatcamGUI/MainGUI.py:2816 #: flatcamGUI/preferences/general/GeneralAPPSetGroupUI.py:78 msgid "Max. magnet distance" msgstr "Max. Magnetabstand" -#: flatcamGUI/FlatCAMGUI.py:1149 +#: flatcamGUI/MainGUI.py:1149 msgid "Selected" msgstr "Ausgewählt" -#: flatcamGUI/FlatCAMGUI.py:1177 flatcamGUI/FlatCAMGUI.py:1185 +#: flatcamGUI/MainGUI.py:1177 flatcamGUI/MainGUI.py:1185 msgid "Plot Area" msgstr "Grundstücksfläche" -#: flatcamGUI/FlatCAMGUI.py:1212 +#: flatcamGUI/MainGUI.py:1212 msgid "General" msgstr "Allgemeines" -#: flatcamGUI/FlatCAMGUI.py:1227 flatcamTools/ToolCopperThieving.py:74 +#: flatcamGUI/MainGUI.py:1227 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:1237 flatcamTools/ToolDblSided.py:92 +#: flatcamGUI/MainGUI.py:1237 flatcamTools/ToolDblSided.py:92 msgid "EXCELLON" msgstr "EXCELLON" -#: flatcamGUI/FlatCAMGUI.py:1247 flatcamTools/ToolDblSided.py:120 +#: flatcamGUI/MainGUI.py:1247 flatcamTools/ToolDblSided.py:120 msgid "GEOMETRY" msgstr "GEOMETRY" -#: flatcamGUI/FlatCAMGUI.py:1257 +#: flatcamGUI/MainGUI.py:1257 msgid "CNC-JOB" msgstr "CNC-Auftrag" -#: flatcamGUI/FlatCAMGUI.py:1266 flatcamGUI/ObjectUI.py:563 +#: flatcamGUI/MainGUI.py:1266 flatcamGUI/ObjectUI.py:563 #: flatcamGUI/ObjectUI.py:2132 msgid "TOOLS" msgstr "WERKZEUGE" -#: flatcamGUI/FlatCAMGUI.py:1275 +#: flatcamGUI/MainGUI.py:1275 msgid "TOOLS 2" msgstr "WERKZEUGE 2" -#: flatcamGUI/FlatCAMGUI.py:1285 +#: flatcamGUI/MainGUI.py:1285 msgid "UTILITIES" msgstr "NUTZEN" -#: flatcamGUI/FlatCAMGUI.py:1302 +#: flatcamGUI/MainGUI.py:1302 #: flatcamGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:192 msgid "Restore Defaults" msgstr "Standard wiederherstellen" -#: flatcamGUI/FlatCAMGUI.py:1305 +#: flatcamGUI/MainGUI.py:1305 msgid "" "Restore the entire set of default values\n" "to the initial values loaded after first launch." @@ -6444,20 +6444,20 @@ msgstr "" "Stellen Sie den gesamten Satz von Standardwerten wieder her\n" "auf die nach dem ersten Start geladenen Anfangswerte." -#: flatcamGUI/FlatCAMGUI.py:1310 +#: flatcamGUI/MainGUI.py:1310 msgid "Open Pref Folder" msgstr "Öffnen Sie den Einstellungsordner" -#: flatcamGUI/FlatCAMGUI.py:1313 +#: flatcamGUI/MainGUI.py:1313 msgid "Open the folder where FlatCAM save the preferences files." msgstr "" "Öffnen Sie den Ordner, in dem FlatCAM die Voreinstellungsdateien speichert." -#: flatcamGUI/FlatCAMGUI.py:1317 flatcamGUI/FlatCAMGUI.py:2517 +#: flatcamGUI/MainGUI.py:1317 flatcamGUI/MainGUI.py:2517 msgid "Clear GUI Settings" msgstr "Löschen Sie die GUI-Einstellungen" -#: flatcamGUI/FlatCAMGUI.py:1321 +#: flatcamGUI/MainGUI.py:1321 msgid "" "Clear the GUI settings for FlatCAM,\n" "such as: layout, gui state, style, hdpi support etc." @@ -6465,15 +6465,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:1332 +#: flatcamGUI/MainGUI.py:1332 msgid "Apply" msgstr "Anwenden" -#: flatcamGUI/FlatCAMGUI.py:1335 +#: flatcamGUI/MainGUI.py:1335 msgid "Apply the current preferences without saving to a file." msgstr "Anwenden ohne zu speichern." -#: flatcamGUI/FlatCAMGUI.py:1342 +#: flatcamGUI/MainGUI.py:1342 msgid "" "Save the current settings in the 'current_defaults' file\n" "which is the file storing the working default preferences." @@ -6481,215 +6481,215 @@ 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:1350 +#: flatcamGUI/MainGUI.py:1350 msgid "Will not save the changes and will close the preferences window." msgstr "Einstellungen werden geschlossen ohne die Änderungen zu speichern." -#: flatcamGUI/FlatCAMGUI.py:1719 +#: flatcamGUI/MainGUI.py:1719 msgid "SHOW SHORTCUT LIST" msgstr "Verknüpfungsliste anzeigen" -#: flatcamGUI/FlatCAMGUI.py:1719 +#: flatcamGUI/MainGUI.py:1719 msgid "Switch to Project Tab" msgstr "Wechseln Sie zur Registerkarte Projekt" -#: flatcamGUI/FlatCAMGUI.py:1719 +#: flatcamGUI/MainGUI.py:1719 msgid "Switch to Selected Tab" msgstr "Wechseln Sie zur ausgewählten Registerkarte" -#: flatcamGUI/FlatCAMGUI.py:1720 +#: flatcamGUI/MainGUI.py:1720 msgid "Switch to Tool Tab" msgstr "Wechseln Sie zur Werkzeugregisterkarte" -#: flatcamGUI/FlatCAMGUI.py:1721 +#: flatcamGUI/MainGUI.py:1721 msgid "New Gerber" msgstr "Neuer Gerber" -#: flatcamGUI/FlatCAMGUI.py:1721 +#: flatcamGUI/MainGUI.py:1721 msgid "Edit Object (if selected)" msgstr "Objekt bearbeiten (falls ausgewählt)" -#: flatcamGUI/FlatCAMGUI.py:1721 +#: flatcamGUI/MainGUI.py:1721 msgid "Jump to Coordinates" msgstr "Springe zu den Koordinaten" -#: flatcamGUI/FlatCAMGUI.py:1722 +#: flatcamGUI/MainGUI.py:1722 msgid "New Excellon" msgstr "Neuer Excellon" -#: flatcamGUI/FlatCAMGUI.py:1722 +#: flatcamGUI/MainGUI.py:1722 msgid "Move Obj" msgstr "Objekt verschieben" -#: flatcamGUI/FlatCAMGUI.py:1722 +#: flatcamGUI/MainGUI.py:1722 msgid "New Geometry" msgstr "Neue Geometrie" -#: flatcamGUI/FlatCAMGUI.py:1722 +#: flatcamGUI/MainGUI.py:1722 msgid "Change Units" msgstr "Einheiten ändern" -#: flatcamGUI/FlatCAMGUI.py:1723 +#: flatcamGUI/MainGUI.py:1723 msgid "Open Properties Tool" msgstr "Öffnen Sie das Eigenschaften-Tool" -#: flatcamGUI/FlatCAMGUI.py:1723 +#: flatcamGUI/MainGUI.py:1723 msgid "Rotate by 90 degree CW" msgstr "Um 90 Grad im Uhrzeigersinn drehen" -#: flatcamGUI/FlatCAMGUI.py:1723 +#: flatcamGUI/MainGUI.py:1723 msgid "Shell Toggle" msgstr "Shell umschalten" -#: flatcamGUI/FlatCAMGUI.py:1724 +#: flatcamGUI/MainGUI.py:1724 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:1725 +#: flatcamGUI/MainGUI.py:1725 msgid "Flip on X_axis" msgstr "Auf X-Achse spiegeln" -#: flatcamGUI/FlatCAMGUI.py:1725 +#: flatcamGUI/MainGUI.py:1725 msgid "Flip on Y_axis" msgstr "Auf Y-Achse spiegeln" -#: flatcamGUI/FlatCAMGUI.py:1728 +#: flatcamGUI/MainGUI.py:1728 msgid "Copy Obj" msgstr "Objekt kopieren" -#: flatcamGUI/FlatCAMGUI.py:1728 +#: flatcamGUI/MainGUI.py:1728 msgid "Open Tools Database" msgstr "Werkzeugdatenbank öffnen" -#: flatcamGUI/FlatCAMGUI.py:1729 +#: flatcamGUI/MainGUI.py:1729 msgid "Open Excellon File" msgstr "Öffnen Sie die Excellon-Datei" -#: flatcamGUI/FlatCAMGUI.py:1729 +#: flatcamGUI/MainGUI.py:1729 msgid "Open Gerber File" msgstr "Öffnen Sie die Gerber-Datei" -#: flatcamGUI/FlatCAMGUI.py:1729 +#: flatcamGUI/MainGUI.py:1729 msgid "New Project" msgstr "Neues Projekt" -#: flatcamGUI/FlatCAMGUI.py:1730 flatcamTools/ToolPDF.py:42 +#: flatcamGUI/MainGUI.py:1730 flatcamTools/ToolPDF.py:42 msgid "PDF Import Tool" msgstr "PDF-Importwerkzeug" -#: flatcamGUI/FlatCAMGUI.py:1730 +#: flatcamGUI/MainGUI.py:1730 msgid "Save Project" msgstr "Projekt speichern" -#: flatcamGUI/FlatCAMGUI.py:1730 +#: flatcamGUI/MainGUI.py:1730 msgid "Toggle Plot Area" msgstr "Zeichenbereich umschalten0" -#: flatcamGUI/FlatCAMGUI.py:1733 +#: flatcamGUI/MainGUI.py:1733 msgid "Copy Obj_Name" msgstr "Kopieren Sie den Namen des Objekts" -#: flatcamGUI/FlatCAMGUI.py:1734 +#: flatcamGUI/MainGUI.py:1734 msgid "Toggle Code Editor" msgstr "Code-Editor umschalten" -#: flatcamGUI/FlatCAMGUI.py:1734 +#: flatcamGUI/MainGUI.py:1734 msgid "Toggle the axis" msgstr "Achse umschalten" -#: flatcamGUI/FlatCAMGUI.py:1734 flatcamGUI/FlatCAMGUI.py:1933 -#: flatcamGUI/FlatCAMGUI.py:2020 flatcamGUI/FlatCAMGUI.py:2142 +#: flatcamGUI/MainGUI.py:1734 flatcamGUI/MainGUI.py:1933 +#: flatcamGUI/MainGUI.py:2020 flatcamGUI/MainGUI.py:2142 msgid "Distance Minimum Tool" msgstr "Mindestabstand Werkzeug" -#: flatcamGUI/FlatCAMGUI.py:1735 +#: flatcamGUI/MainGUI.py:1735 msgid "Open Preferences Window" msgstr "Öffnen Sie das Einstellungsfenster" -#: flatcamGUI/FlatCAMGUI.py:1736 +#: flatcamGUI/MainGUI.py:1736 msgid "Rotate by 90 degree CCW" msgstr "Um 90 Grad gegen den Uhrzeigersinn drehen" -#: flatcamGUI/FlatCAMGUI.py:1736 +#: flatcamGUI/MainGUI.py:1736 msgid "Run a Script" msgstr "Führen Sie ein Skript aus" -#: flatcamGUI/FlatCAMGUI.py:1736 +#: flatcamGUI/MainGUI.py:1736 msgid "Toggle the workspace" msgstr "Arbeitsbereich umschalten" -#: flatcamGUI/FlatCAMGUI.py:1736 +#: flatcamGUI/MainGUI.py:1736 msgid "Skew on X axis" msgstr "Neigung auf der X-Achse" -#: flatcamGUI/FlatCAMGUI.py:1737 +#: flatcamGUI/MainGUI.py:1737 msgid "Skew on Y axis" msgstr "Neigung auf der Y-Achse" -#: flatcamGUI/FlatCAMGUI.py:1740 +#: flatcamGUI/MainGUI.py:1740 msgid "2-Sided PCB Tool" msgstr "2-seitiges PCB Werkzeug" -#: flatcamGUI/FlatCAMGUI.py:1740 +#: flatcamGUI/MainGUI.py:1740 msgid "Transformations Tool" msgstr "Transformations-Tool" -#: flatcamGUI/FlatCAMGUI.py:1742 +#: flatcamGUI/MainGUI.py:1742 msgid "Solder Paste Dispensing Tool" msgstr "Lotpasten-Dosierwerkzeug" -#: flatcamGUI/FlatCAMGUI.py:1743 +#: flatcamGUI/MainGUI.py:1743 msgid "Film PCB Tool" msgstr "Film PCB Werkzeug" -#: flatcamGUI/FlatCAMGUI.py:1743 +#: flatcamGUI/MainGUI.py:1743 msgid "Non-Copper Clearing Tool" msgstr "Nicht-Kupfer-Räumwerkzeug" -#: flatcamGUI/FlatCAMGUI.py:1744 +#: flatcamGUI/MainGUI.py:1744 msgid "Paint Area Tool" msgstr "Malbereichswerkzeug" -#: flatcamGUI/FlatCAMGUI.py:1744 +#: flatcamGUI/MainGUI.py:1744 msgid "Rules Check Tool" msgstr "Regelprüfwerkzeug" -#: flatcamGUI/FlatCAMGUI.py:1745 +#: flatcamGUI/MainGUI.py:1745 msgid "View File Source" msgstr "Dateiquelle anzeigen" -#: flatcamGUI/FlatCAMGUI.py:1746 +#: flatcamGUI/MainGUI.py:1746 msgid "Cutout PCB Tool" msgstr "Ausschnitt PCB Tool" -#: flatcamGUI/FlatCAMGUI.py:1746 +#: flatcamGUI/MainGUI.py:1746 msgid "Enable all Plots" msgstr "Alle Zeichnungen aktivieren" -#: flatcamGUI/FlatCAMGUI.py:1746 +#: flatcamGUI/MainGUI.py:1746 msgid "Disable all Plots" msgstr "Alle Zeichnungen deaktivieren" -#: flatcamGUI/FlatCAMGUI.py:1746 +#: flatcamGUI/MainGUI.py:1746 msgid "Disable Non-selected Plots" msgstr "Nicht ausgewählte Zeichnungen deaktiv" -#: flatcamGUI/FlatCAMGUI.py:1747 +#: flatcamGUI/MainGUI.py:1747 msgid "Toggle Full Screen" msgstr "Vollbild umschalten" -#: flatcamGUI/FlatCAMGUI.py:1750 +#: flatcamGUI/MainGUI.py:1750 msgid "Abort current task (gracefully)" msgstr "Aktuelle Aufgabe abbrechen (ordnungsgemäß)" -#: flatcamGUI/FlatCAMGUI.py:1753 +#: flatcamGUI/MainGUI.py:1753 msgid "Save Project As" msgstr "Projekt speichern als" -#: flatcamGUI/FlatCAMGUI.py:1754 +#: flatcamGUI/MainGUI.py:1754 msgid "" "Paste Special. Will convert a Windows path style to the one required in Tcl " "Shell" @@ -6697,247 +6697,247 @@ msgstr "" "Paste Special. Konvertiert einen Windows-Pfadstil in den in Tcl Shell " "erforderlichen" -#: flatcamGUI/FlatCAMGUI.py:1757 +#: flatcamGUI/MainGUI.py:1757 msgid "Open Online Manual" msgstr "Online-Handbuch öffnen" -#: flatcamGUI/FlatCAMGUI.py:1758 +#: flatcamGUI/MainGUI.py:1758 msgid "Open Online Tutorials" msgstr "Öffnen Sie Online-Tutorials" -#: flatcamGUI/FlatCAMGUI.py:1758 +#: flatcamGUI/MainGUI.py:1758 msgid "Refresh Plots" msgstr "Zeichnungen aktualisieren" -#: flatcamGUI/FlatCAMGUI.py:1758 flatcamTools/ToolSolderPaste.py:509 +#: flatcamGUI/MainGUI.py:1758 flatcamTools/ToolSolderPaste.py:509 msgid "Delete Object" msgstr "Objekt löschen" -#: flatcamGUI/FlatCAMGUI.py:1758 +#: flatcamGUI/MainGUI.py:1758 msgid "Alternate: Delete Tool" msgstr "Alternative: Werkzeug löschen" -#: flatcamGUI/FlatCAMGUI.py:1759 +#: flatcamGUI/MainGUI.py:1759 msgid "(left to Key_1)Toggle Notebook Area (Left Side)" msgstr "(links neben Taste_1) Notebook-Bereich umschalten (linke Seite)" -#: flatcamGUI/FlatCAMGUI.py:1759 +#: flatcamGUI/MainGUI.py:1759 msgid "En(Dis)able Obj Plot" msgstr "Objektzeichnung (de)aktivieren" -#: flatcamGUI/FlatCAMGUI.py:1760 +#: flatcamGUI/MainGUI.py:1760 msgid "Deselects all objects" msgstr "Hebt die Auswahl aller Objekte auf" -#: flatcamGUI/FlatCAMGUI.py:1774 +#: flatcamGUI/MainGUI.py:1774 msgid "Editor Shortcut list" msgstr "Editor-Verknüpfungsliste" -#: flatcamGUI/FlatCAMGUI.py:1928 +#: flatcamGUI/MainGUI.py:1928 msgid "GEOMETRY EDITOR" msgstr "GEOMETRIE-EDITOR" -#: flatcamGUI/FlatCAMGUI.py:1928 +#: flatcamGUI/MainGUI.py:1928 msgid "Draw an Arc" msgstr "Zeichnen Sie einen Bogen" -#: flatcamGUI/FlatCAMGUI.py:1928 +#: flatcamGUI/MainGUI.py:1928 msgid "Copy Geo Item" msgstr "Geo-Objekt kopieren" -#: flatcamGUI/FlatCAMGUI.py:1929 +#: flatcamGUI/MainGUI.py:1929 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:1929 +#: flatcamGUI/MainGUI.py:1929 msgid "Polygon Intersection Tool" msgstr "Werkzeug Polygonschnitt" -#: flatcamGUI/FlatCAMGUI.py:1930 +#: flatcamGUI/MainGUI.py:1930 msgid "Geo Paint Tool" msgstr "Geo-Malwerkzeug" -#: flatcamGUI/FlatCAMGUI.py:1930 flatcamGUI/FlatCAMGUI.py:2019 -#: flatcamGUI/FlatCAMGUI.py:2139 +#: flatcamGUI/MainGUI.py:1930 flatcamGUI/MainGUI.py:2019 +#: flatcamGUI/MainGUI.py:2139 msgid "Jump to Location (x, y)" msgstr "Zum Standort springen (x, y)" -#: flatcamGUI/FlatCAMGUI.py:1930 +#: flatcamGUI/MainGUI.py:1930 msgid "Toggle Corner Snap" msgstr "Eckfang umschalten" -#: flatcamGUI/FlatCAMGUI.py:1930 +#: flatcamGUI/MainGUI.py:1930 msgid "Move Geo Item" msgstr "Geo-Objekt verschieben" -#: flatcamGUI/FlatCAMGUI.py:1931 +#: flatcamGUI/MainGUI.py:1931 msgid "Within Add Arc will cycle through the ARC modes" msgstr "Innerhalb von Bogen hinzufügen werden die ARC-Modi durchlaufen" -#: flatcamGUI/FlatCAMGUI.py:1931 +#: flatcamGUI/MainGUI.py:1931 msgid "Draw a Polygon" msgstr "Zeichnen Sie ein Polygon" -#: flatcamGUI/FlatCAMGUI.py:1931 +#: flatcamGUI/MainGUI.py:1931 msgid "Draw a Circle" msgstr "Zeichne einen Kreis" -#: flatcamGUI/FlatCAMGUI.py:1932 +#: flatcamGUI/MainGUI.py:1932 msgid "Draw a Path" msgstr "Zeichne einen Pfad" -#: flatcamGUI/FlatCAMGUI.py:1932 +#: flatcamGUI/MainGUI.py:1932 msgid "Draw Rectangle" msgstr "Rechteck zeichnen" -#: flatcamGUI/FlatCAMGUI.py:1932 +#: flatcamGUI/MainGUI.py:1932 msgid "Polygon Subtraction Tool" msgstr "Polygon-Subtraktionswerkzeug" -#: flatcamGUI/FlatCAMGUI.py:1932 +#: flatcamGUI/MainGUI.py:1932 msgid "Add Text Tool" msgstr "Textwerkzeug hinzufügen" -#: flatcamGUI/FlatCAMGUI.py:1933 +#: flatcamGUI/MainGUI.py:1933 msgid "Polygon Union Tool" msgstr "Polygonverbindungswerkzeug" -#: flatcamGUI/FlatCAMGUI.py:1933 +#: flatcamGUI/MainGUI.py:1933 msgid "Flip shape on X axis" msgstr "Form auf der X-Achse spiegeln" -#: flatcamGUI/FlatCAMGUI.py:1933 +#: flatcamGUI/MainGUI.py:1933 msgid "Flip shape on Y axis" msgstr "Form auf der Y-Achse spiegeln" -#: flatcamGUI/FlatCAMGUI.py:1934 +#: flatcamGUI/MainGUI.py:1934 msgid "Skew shape on X axis" msgstr "Neigung auf der X-Achse" -#: flatcamGUI/FlatCAMGUI.py:1934 +#: flatcamGUI/MainGUI.py:1934 msgid "Skew shape on Y axis" msgstr "Neigung auf der Y-Achse" -#: flatcamGUI/FlatCAMGUI.py:1934 +#: flatcamGUI/MainGUI.py:1934 msgid "Editor Transformation Tool" msgstr "Editor-Transformationstool" -#: flatcamGUI/FlatCAMGUI.py:1935 +#: flatcamGUI/MainGUI.py:1935 msgid "Offset shape on X axis" msgstr "Versetzte Form auf der X-Achse" -#: flatcamGUI/FlatCAMGUI.py:1935 +#: flatcamGUI/MainGUI.py:1935 msgid "Offset shape on Y axis" msgstr "Versetzte Form auf der Y-Achse" -#: flatcamGUI/FlatCAMGUI.py:1936 flatcamGUI/FlatCAMGUI.py:2022 -#: flatcamGUI/FlatCAMGUI.py:2144 +#: flatcamGUI/MainGUI.py:1936 flatcamGUI/MainGUI.py:2022 +#: flatcamGUI/MainGUI.py:2144 msgid "Save Object and Exit Editor" msgstr "Objekt speichern und Editor beenden" -#: flatcamGUI/FlatCAMGUI.py:1936 +#: flatcamGUI/MainGUI.py:1936 msgid "Polygon Cut Tool" msgstr "Polygon-Schneidewerkzeug" -#: flatcamGUI/FlatCAMGUI.py:1937 +#: flatcamGUI/MainGUI.py:1937 msgid "Rotate Geometry" msgstr "Geometrie drehen" -#: flatcamGUI/FlatCAMGUI.py:1937 +#: flatcamGUI/MainGUI.py:1937 msgid "Finish drawing for certain tools" msgstr "Beenden Sie das Zeichnen für bestimmte Werkzeuge" -#: flatcamGUI/FlatCAMGUI.py:1937 flatcamGUI/FlatCAMGUI.py:2022 -#: flatcamGUI/FlatCAMGUI.py:2142 +#: flatcamGUI/MainGUI.py:1937 flatcamGUI/MainGUI.py:2022 +#: flatcamGUI/MainGUI.py:2142 msgid "Abort and return to Select" msgstr "Abbrechen und zurück zu Auswählen" -#: flatcamGUI/FlatCAMGUI.py:1938 flatcamGUI/FlatCAMGUI.py:2734 +#: flatcamGUI/MainGUI.py:1938 flatcamGUI/MainGUI.py:2734 msgid "Delete Shape" msgstr "Form löschen" -#: flatcamGUI/FlatCAMGUI.py:2018 +#: flatcamGUI/MainGUI.py:2018 msgid "EXCELLON EDITOR" msgstr "EXCELLON EDITOR" -#: flatcamGUI/FlatCAMGUI.py:2018 +#: flatcamGUI/MainGUI.py:2018 msgid "Copy Drill(s)" msgstr "Bohrer kopieren" -#: flatcamGUI/FlatCAMGUI.py:2018 flatcamGUI/FlatCAMGUI.py:2268 +#: flatcamGUI/MainGUI.py:2018 flatcamGUI/MainGUI.py:2268 msgid "Add Drill" msgstr "Bohrer hinzufügen" -#: flatcamGUI/FlatCAMGUI.py:2019 +#: flatcamGUI/MainGUI.py:2019 msgid "Move Drill(s)" msgstr "Bohrer verschieben" -#: flatcamGUI/FlatCAMGUI.py:2020 +#: flatcamGUI/MainGUI.py:2020 msgid "Add a new Tool" msgstr "Fügen Sie ein neues Werkzeug hinzu" -#: flatcamGUI/FlatCAMGUI.py:2021 +#: flatcamGUI/MainGUI.py:2021 msgid "Delete Drill(s)" msgstr "Bohrer löschen" -#: flatcamGUI/FlatCAMGUI.py:2021 +#: flatcamGUI/MainGUI.py:2021 msgid "Alternate: Delete Tool(s)" msgstr "Alternative: Werkzeug (e) löschen" -#: flatcamGUI/FlatCAMGUI.py:2138 +#: flatcamGUI/MainGUI.py:2138 msgid "GERBER EDITOR" msgstr "GERBER EDITOR" -#: flatcamGUI/FlatCAMGUI.py:2138 +#: flatcamGUI/MainGUI.py:2138 msgid "Add Disc" msgstr "Fügen Sie eine Scheiben hinzu" -#: flatcamGUI/FlatCAMGUI.py:2138 +#: flatcamGUI/MainGUI.py:2138 msgid "Add SemiDisc" msgstr "Halbschibe hinzufügen" -#: flatcamGUI/FlatCAMGUI.py:2140 +#: flatcamGUI/MainGUI.py:2140 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:2141 +#: flatcamGUI/MainGUI.py:2141 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:2142 +#: flatcamGUI/MainGUI.py:2142 msgid "Alternate: Delete Apertures" msgstr "Alternative: Löschen Sie die Blenden" -#: flatcamGUI/FlatCAMGUI.py:2143 +#: flatcamGUI/MainGUI.py:2143 msgid "Eraser Tool" msgstr "Radiergummi" -#: flatcamGUI/FlatCAMGUI.py:2144 +#: flatcamGUI/MainGUI.py:2144 #: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:220 msgid "Mark Area Tool" msgstr "Bereich markieren Werkzeug" -#: flatcamGUI/FlatCAMGUI.py:2144 +#: flatcamGUI/MainGUI.py:2144 msgid "Poligonize Tool" msgstr "Werkzeug Polygonisieren" -#: flatcamGUI/FlatCAMGUI.py:2144 +#: flatcamGUI/MainGUI.py:2144 msgid "Transformation Tool" msgstr "Transformationswerkzeug" -#: flatcamGUI/FlatCAMGUI.py:2161 +#: flatcamGUI/MainGUI.py:2161 msgid "Toggle Visibility" msgstr "Sichtbarkeit umschalten" -#: flatcamGUI/FlatCAMGUI.py:2167 +#: flatcamGUI/MainGUI.py:2167 msgid "New" msgstr "Neu" -#: flatcamGUI/FlatCAMGUI.py:2169 flatcamGUI/ObjectUI.py:450 +#: flatcamGUI/MainGUI.py:2169 flatcamGUI/ObjectUI.py:450 #: flatcamObjects/FlatCAMGerber.py:239 flatcamObjects/FlatCAMGerber.py:327 #: flatcamTools/ToolCalibration.py:631 flatcamTools/ToolCalibration.py:648 #: flatcamTools/ToolCalibration.py:815 flatcamTools/ToolCopperThieving.py:144 @@ -6954,7 +6954,7 @@ msgstr "Neu" msgid "Geometry" msgstr "Geometrie" -#: flatcamGUI/FlatCAMGUI.py:2173 +#: flatcamGUI/MainGUI.py:2173 #: flatcamGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:99 #: flatcamTools/ToolAlignObjects.py:74 flatcamTools/ToolAlignObjects.py:110 #: flatcamTools/ToolCalibration.py:197 flatcamTools/ToolCalibration.py:631 @@ -6969,76 +6969,76 @@ msgstr "Geometrie" msgid "Excellon" msgstr "Excellon" -#: flatcamGUI/FlatCAMGUI.py:2180 +#: flatcamGUI/MainGUI.py:2180 msgid "Grids" msgstr "Raster" -#: flatcamGUI/FlatCAMGUI.py:2187 +#: flatcamGUI/MainGUI.py:2187 msgid "Clear Plot" msgstr "Plot klar löschen" -#: flatcamGUI/FlatCAMGUI.py:2189 +#: flatcamGUI/MainGUI.py:2189 msgid "Replot" msgstr "Replotieren" -#: flatcamGUI/FlatCAMGUI.py:2193 +#: flatcamGUI/MainGUI.py:2193 msgid "Geo Editor" msgstr "Geo-Editor" -#: flatcamGUI/FlatCAMGUI.py:2195 +#: flatcamGUI/MainGUI.py:2195 msgid "Path" msgstr "Pfad" -#: flatcamGUI/FlatCAMGUI.py:2197 +#: flatcamGUI/MainGUI.py:2197 msgid "Rectangle" msgstr "Rechteck" -#: flatcamGUI/FlatCAMGUI.py:2200 +#: flatcamGUI/MainGUI.py:2200 msgid "Circle" msgstr "Kreis" -#: flatcamGUI/FlatCAMGUI.py:2204 +#: flatcamGUI/MainGUI.py:2204 msgid "Arc" msgstr "Bogen" -#: flatcamGUI/FlatCAMGUI.py:2218 +#: flatcamGUI/MainGUI.py:2218 msgid "Union" msgstr "Vereinigung" -#: flatcamGUI/FlatCAMGUI.py:2220 +#: flatcamGUI/MainGUI.py:2220 msgid "Intersection" msgstr "Überschneidung" -#: flatcamGUI/FlatCAMGUI.py:2222 +#: flatcamGUI/MainGUI.py:2222 msgid "Subtraction" msgstr "Subtraktion" -#: flatcamGUI/FlatCAMGUI.py:2224 flatcamGUI/ObjectUI.py:2221 +#: flatcamGUI/MainGUI.py:2224 flatcamGUI/ObjectUI.py:2221 #: flatcamGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:56 msgid "Cut" msgstr "Schnitt" -#: flatcamGUI/FlatCAMGUI.py:2235 +#: flatcamGUI/MainGUI.py:2235 msgid "Pad" msgstr "Pad" -#: flatcamGUI/FlatCAMGUI.py:2237 +#: flatcamGUI/MainGUI.py:2237 msgid "Pad Array" msgstr "Pad-Array" -#: flatcamGUI/FlatCAMGUI.py:2241 +#: flatcamGUI/MainGUI.py:2241 msgid "Track" msgstr "Track" -#: flatcamGUI/FlatCAMGUI.py:2243 +#: flatcamGUI/MainGUI.py:2243 msgid "Region" msgstr "Region" -#: flatcamGUI/FlatCAMGUI.py:2266 +#: flatcamGUI/MainGUI.py:2266 msgid "Exc Editor" msgstr "Exc-Editor" -#: flatcamGUI/FlatCAMGUI.py:2311 +#: flatcamGUI/MainGUI.py:2311 msgid "" "Relative measurement.\n" "Reference is last click position" @@ -7046,7 +7046,7 @@ msgstr "" "Relative Messung\n" "Referenz ist Position des letzten Klicks" -#: flatcamGUI/FlatCAMGUI.py:2317 +#: flatcamGUI/MainGUI.py:2317 msgid "" "Absolute measurement.\n" "Reference is (X=0, Y= 0) position" @@ -7054,35 +7054,35 @@ msgstr "" "Absolute Messung.\n" "Referenz ist (X = 0, Y = 0)" -#: flatcamGUI/FlatCAMGUI.py:2419 +#: flatcamGUI/MainGUI.py:2419 msgid "Lock Toolbars" msgstr "Symbolleisten sperren" -#: flatcamGUI/FlatCAMGUI.py:2505 +#: flatcamGUI/MainGUI.py:2505 msgid "FlatCAM Preferences Folder opened." msgstr "FlatCAM-Einstellungsordner geöffnet." -#: flatcamGUI/FlatCAMGUI.py:2516 +#: flatcamGUI/MainGUI.py:2516 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:2624 +#: flatcamGUI/MainGUI.py:2624 msgid "&Cutout Tool" msgstr "Ausschnittwerkzeug" -#: flatcamGUI/FlatCAMGUI.py:2694 +#: flatcamGUI/MainGUI.py:2694 msgid "Select 'Esc'" msgstr "Wählen" -#: flatcamGUI/FlatCAMGUI.py:2732 +#: flatcamGUI/MainGUI.py:2732 msgid "Copy Objects" msgstr "Objekte kopieren" -#: flatcamGUI/FlatCAMGUI.py:2740 +#: flatcamGUI/MainGUI.py:2740 msgid "Move Objects" msgstr "Objekte verschieben" -#: flatcamGUI/FlatCAMGUI.py:3363 +#: flatcamGUI/MainGUI.py:3363 msgid "" "Please first select a geometry item to be cutted\n" "then select the geometry item that will be cutted\n" @@ -7094,12 +7094,12 @@ msgstr "" "aus dem ersten Artikel. Zum Schluss drücken Sie die Taste ~ X ~ oder\n" "die Symbolleisten-Schaltfläche." -#: flatcamGUI/FlatCAMGUI.py:3370 flatcamGUI/FlatCAMGUI.py:3532 -#: flatcamGUI/FlatCAMGUI.py:3577 flatcamGUI/FlatCAMGUI.py:3597 +#: flatcamGUI/MainGUI.py:3370 flatcamGUI/MainGUI.py:3532 +#: flatcamGUI/MainGUI.py:3577 flatcamGUI/MainGUI.py:3597 msgid "Warning" msgstr "Warnung" -#: flatcamGUI/FlatCAMGUI.py:3527 +#: flatcamGUI/MainGUI.py:3527 msgid "" "Please select geometry items \n" "on which to perform Intersection Tool." @@ -7107,7 +7107,7 @@ msgstr "" "Bitte wählen Sie Geometrieelemente aus\n" "auf dem das Verschneidungswerkzeug ausgeführt werden soll." -#: flatcamGUI/FlatCAMGUI.py:3572 +#: flatcamGUI/MainGUI.py:3572 msgid "" "Please select geometry items \n" "on which to perform Substraction Tool." @@ -7115,7 +7115,7 @@ msgstr "" "Bitte wählen Sie Geometrieelemente aus\n" "auf dem das Subtraktionswerkzeug ausgeführt werden soll." -#: flatcamGUI/FlatCAMGUI.py:3592 +#: flatcamGUI/MainGUI.py:3592 msgid "" "Please select geometry items \n" "on which to perform union." @@ -7123,52 +7123,52 @@ msgstr "" "Bitte wählen Sie Geometrieelemente aus\n" "auf dem die Polygonverbindung ausgeführt werden soll." -#: flatcamGUI/FlatCAMGUI.py:3675 flatcamGUI/FlatCAMGUI.py:3890 +#: flatcamGUI/MainGUI.py:3675 flatcamGUI/MainGUI.py:3890 msgid "Cancelled. Nothing selected to delete." msgstr "Abgebrochen. Nichts zum Löschen ausgewählt." -#: flatcamGUI/FlatCAMGUI.py:3759 flatcamGUI/FlatCAMGUI.py:4006 +#: flatcamGUI/MainGUI.py:3759 flatcamGUI/MainGUI.py:4006 msgid "Cancelled. Nothing selected to copy." msgstr "Abgebrochen. Nichts zum Kopieren ausgewählt." -#: flatcamGUI/FlatCAMGUI.py:3805 flatcamGUI/FlatCAMGUI.py:4035 +#: flatcamGUI/MainGUI.py:3805 flatcamGUI/MainGUI.py:4035 msgid "Cancelled. Nothing selected to move." msgstr "Abgebrochen. Nichts ausgewählt, um sich zu bewegen." -#: flatcamGUI/FlatCAMGUI.py:4061 +#: flatcamGUI/MainGUI.py:4061 msgid "New Tool ..." msgstr "Neues Werkzeug ..." -#: flatcamGUI/FlatCAMGUI.py:4062 flatcamTools/ToolNCC.py:924 +#: flatcamGUI/MainGUI.py:4062 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:4074 +#: flatcamGUI/MainGUI.py:4074 msgid "Adding Tool cancelled ..." msgstr "Tool wird hinzugefügt abgebrochen ..." -#: flatcamGUI/FlatCAMGUI.py:4088 +#: flatcamGUI/MainGUI.py:4088 msgid "Distance Tool exit..." msgstr "Entfernungstool beenden ..." -#: flatcamGUI/FlatCAMGUI.py:4323 flatcamGUI/FlatCAMGUI.py:4330 +#: flatcamGUI/MainGUI.py:4323 flatcamGUI/MainGUI.py:4330 msgid "Idle." msgstr "Untätig." -#: flatcamGUI/FlatCAMGUI.py:4361 +#: flatcamGUI/MainGUI.py:4361 msgid "Application started ..." msgstr "Bewerbung gestartet ..." -#: flatcamGUI/FlatCAMGUI.py:4362 +#: flatcamGUI/MainGUI.py:4362 msgid "Hello!" msgstr "Hello!" -#: flatcamGUI/FlatCAMGUI.py:4424 +#: flatcamGUI/MainGUI.py:4424 msgid "Open Project ..." msgstr "Offenes Projekt ..." -#: flatcamGUI/FlatCAMGUI.py:4450 +#: flatcamGUI/MainGUI.py:4450 msgid "Exit" msgstr "Ausgang" diff --git a/locale/en/LC_MESSAGES/strings.po b/locale/en/LC_MESSAGES/strings.po index 8a3c7896..130a22d0 100644 --- a/locale/en/LC_MESSAGES/strings.po +++ b/locale/en/LC_MESSAGES/strings.po @@ -69,8 +69,8 @@ msgstr "" #: FlatCAMDB.py:709 FlatCAMDB.py:2125 FlatCAMDB.py:2171 #: flatcamEditors/FlatCAMExcEditor.py:1023 #: flatcamEditors/FlatCAMExcEditor.py:1091 -#: flatcamEditors/FlatCAMTextEditor.py:223 flatcamGUI/FlatCAMGUI.py:3443 -#: flatcamGUI/FlatCAMGUI.py:3659 flatcamGUI/FlatCAMGUI.py:3874 +#: flatcamEditors/FlatCAMTextEditor.py:223 flatcamGUI/MainGUI.py:3443 +#: flatcamGUI/MainGUI.py:3659 flatcamGUI/MainGUI.py:3874 #: flatcamObjects/ObjectCollection.py:126 flatcamTools/ToolFilm.py:754 #: flatcamTools/ToolFilm.py:900 flatcamTools/ToolImage.py:247 #: flatcamTools/ToolMove.py:269 flatcamTools/ToolPcbWizard.py:301 @@ -121,20 +121,20 @@ msgstr "Editor is activated ..." msgid "Do you want to save the edited object?" msgstr "Do you want to save the edited object?" -#: FlatCAMApp.py:2226 flatcamGUI/FlatCAMGUI.py:2288 +#: FlatCAMApp.py:2226 flatcamGUI/MainGUI.py:2288 msgid "Close Editor" msgstr "Close Editor" #: FlatCAMApp.py:2229 FlatCAMApp.py:3518 FlatCAMApp.py:6085 FlatCAMApp.py:7345 #: FlatCAMTranslation.py:109 FlatCAMTranslation.py:207 -#: flatcamGUI/FlatCAMGUI.py:2519 +#: flatcamGUI/MainGUI.py:2519 #: flatcamGUI/preferences/PreferencesUIManager.py:1122 msgid "Yes" msgstr "Yes" #: FlatCAMApp.py:2230 FlatCAMApp.py:3519 FlatCAMApp.py:6086 FlatCAMApp.py:7346 #: FlatCAMTranslation.py:110 FlatCAMTranslation.py:208 -#: flatcamGUI/FlatCAMGUI.py:2520 +#: flatcamGUI/MainGUI.py:2520 #: flatcamGUI/preferences/PreferencesUIManager.py:1123 #: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:164 #: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:150 @@ -144,7 +144,7 @@ msgstr "No" #: FlatCAMApp.py:2231 FlatCAMApp.py:3520 FlatCAMApp.py:4478 FlatCAMApp.py:5103 #: FlatCAMApp.py:7347 FlatCAMDB.py:128 FlatCAMDB.py:1689 -#: flatcamGUI/FlatCAMGUI.py:1347 +#: flatcamGUI/MainGUI.py:1347 msgid "Cancel" msgstr "Cancel" @@ -275,7 +275,7 @@ msgstr "created/selected" msgid "Plotting" msgstr "Plotting" -#: FlatCAMApp.py:3090 flatcamGUI/FlatCAMGUI.py:545 +#: FlatCAMApp.py:3090 flatcamGUI/MainGUI.py:545 msgid "About FlatCAM" msgstr "About FlatCAM" @@ -415,7 +415,7 @@ msgstr "Translator" msgid "Corrections" msgstr "Corrections" -#: FlatCAMApp.py:3455 FlatCAMApp.py:3464 flatcamGUI/FlatCAMGUI.py:527 +#: FlatCAMApp.py:3455 FlatCAMApp.py:3464 flatcamGUI/MainGUI.py:527 msgid "Bookmarks Manager" msgstr "Bookmarks Manager" @@ -443,7 +443,7 @@ msgstr "" msgid "Alternative website" msgstr "Alternative website" -#: FlatCAMApp.py:3508 flatcamGUI/FlatCAMGUI.py:4267 +#: FlatCAMApp.py:3508 flatcamGUI/MainGUI.py:4267 msgid "Application is saving the project. Please wait ..." msgstr "Application is saving the project. Please wait ..." @@ -645,8 +645,8 @@ msgstr "Wrong coordinates. Enter coordinates in format: X,Y" #: flatcamEditors/FlatCAMGrbEditor.py:1490 #: flatcamEditors/FlatCAMGrbEditor.py:1759 #: flatcamEditors/FlatCAMGrbEditor.py:4622 -#: flatcamEditors/FlatCAMGrbEditor.py:4637 flatcamGUI/FlatCAMGUI.py:3424 -#: flatcamGUI/FlatCAMGUI.py:3436 flatcamTools/ToolAlignObjects.py:393 +#: flatcamEditors/FlatCAMGrbEditor.py:4637 flatcamGUI/MainGUI.py:3424 +#: flatcamGUI/MainGUI.py:3436 flatcamTools/ToolAlignObjects.py:393 #: flatcamTools/ToolAlignObjects.py:415 msgid "Done." msgstr "Done." @@ -795,12 +795,12 @@ msgstr "No object selected to Skew/Shear on Y axis." msgid "Skew on Y axis done." msgstr "Skew on Y axis done." -#: FlatCAMApp.py:6497 FlatCAMApp.py:6544 flatcamGUI/FlatCAMGUI.py:503 -#: flatcamGUI/FlatCAMGUI.py:1728 +#: FlatCAMApp.py:6497 FlatCAMApp.py:6544 flatcamGUI/MainGUI.py:503 +#: flatcamGUI/MainGUI.py:1728 msgid "Select All" msgstr "Select All" -#: FlatCAMApp.py:6501 FlatCAMApp.py:6548 flatcamGUI/FlatCAMGUI.py:505 +#: FlatCAMApp.py:6501 FlatCAMApp.py:6548 flatcamGUI/MainGUI.py:505 msgid "Deselect All" msgstr "Deselect All" @@ -812,7 +812,7 @@ msgstr "All objects are selected." msgid "Objects selection is cleared." msgstr "Objects selection is cleared." -#: FlatCAMApp.py:6594 flatcamGUI/FlatCAMGUI.py:1721 +#: FlatCAMApp.py:6594 flatcamGUI/MainGUI.py:1721 msgid "Grid On/Off" msgstr "Grid On/Off" @@ -828,9 +828,9 @@ msgid "Add" msgstr "Add" #: FlatCAMApp.py:6608 flatcamEditors/FlatCAMGrbEditor.py:2588 -#: flatcamEditors/FlatCAMGrbEditor.py:2736 flatcamGUI/FlatCAMGUI.py:751 -#: flatcamGUI/FlatCAMGUI.py:1074 flatcamGUI/FlatCAMGUI.py:2141 -#: flatcamGUI/FlatCAMGUI.py:2284 flatcamGUI/FlatCAMGUI.py:2777 +#: flatcamEditors/FlatCAMGrbEditor.py:2736 flatcamGUI/MainGUI.py:751 +#: flatcamGUI/MainGUI.py:1074 flatcamGUI/MainGUI.py:2141 +#: flatcamGUI/MainGUI.py:2284 flatcamGUI/MainGUI.py:2777 #: flatcamGUI/ObjectUI.py:1623 flatcamObjects/FlatCAMGeometry.py:505 #: flatcamTools/ToolNCC.py:316 flatcamTools/ToolNCC.py:637 #: flatcamTools/ToolPaint.py:299 flatcamTools/ToolPaint.py:682 @@ -914,8 +914,8 @@ msgstr "" msgid "New Project created" msgstr "New Project created" -#: FlatCAMApp.py:7519 FlatCAMApp.py:7523 flatcamGUI/FlatCAMGUI.py:836 -#: flatcamGUI/FlatCAMGUI.py:2544 +#: FlatCAMApp.py:7519 FlatCAMApp.py:7523 flatcamGUI/MainGUI.py:836 +#: flatcamGUI/MainGUI.py:2544 msgid "Open Gerber" msgstr "Open Gerber" @@ -932,8 +932,8 @@ msgstr "" msgid "Opening Gerber file." msgstr "Opening Gerber file." -#: FlatCAMApp.py:7557 FlatCAMApp.py:7561 flatcamGUI/FlatCAMGUI.py:838 -#: flatcamGUI/FlatCAMGUI.py:2546 +#: FlatCAMApp.py:7557 FlatCAMApp.py:7561 flatcamGUI/MainGUI.py:838 +#: flatcamGUI/MainGUI.py:2546 msgid "Open Excellon" msgstr "Open Excellon" @@ -949,7 +949,7 @@ msgstr "Open G-Code" msgid "Opening G-Code file." msgstr "Opening G-Code file." -#: FlatCAMApp.py:7632 FlatCAMApp.py:7635 flatcamGUI/FlatCAMGUI.py:1730 +#: FlatCAMApp.py:7632 FlatCAMApp.py:7635 flatcamGUI/MainGUI.py:1730 msgid "Open Project" msgstr "Open Project" @@ -1103,8 +1103,8 @@ msgstr "TCL script file opened in Code Editor and executed." msgid "Save Project As ..." msgstr "Save Project As ..." -#: FlatCAMApp.py:8551 flatcamGUI/FlatCAMGUI.py:1134 -#: flatcamGUI/FlatCAMGUI.py:2176 +#: FlatCAMApp.py:8551 flatcamGUI/MainGUI.py:1134 +#: flatcamGUI/MainGUI.py:2176 msgid "Project" msgstr "Project" @@ -1349,7 +1349,7 @@ msgstr "Clear Recent projects" msgid "Clear Recent files" msgstr "Clear Recent files" -#: FlatCAMApp.py:10065 flatcamGUI/FlatCAMGUI.py:1363 +#: FlatCAMApp.py:10065 flatcamGUI/MainGUI.py:1363 msgid "Shortcut Key List" msgstr "Shortcut Key List" @@ -1507,47 +1507,47 @@ msgstr "Disabling plots ..." msgid "Working ..." msgstr "Working ..." -#: FlatCAMApp.py:10558 flatcamGUI/FlatCAMGUI.py:703 +#: FlatCAMApp.py:10558 flatcamGUI/MainGUI.py:703 msgid "Red" msgstr "Red" -#: FlatCAMApp.py:10560 flatcamGUI/FlatCAMGUI.py:706 +#: FlatCAMApp.py:10560 flatcamGUI/MainGUI.py:706 msgid "Blue" msgstr "Blue" -#: FlatCAMApp.py:10563 flatcamGUI/FlatCAMGUI.py:709 +#: FlatCAMApp.py:10563 flatcamGUI/MainGUI.py:709 msgid "Yellow" msgstr "Yellow" -#: FlatCAMApp.py:10565 flatcamGUI/FlatCAMGUI.py:712 +#: FlatCAMApp.py:10565 flatcamGUI/MainGUI.py:712 msgid "Green" msgstr "Green" -#: FlatCAMApp.py:10567 flatcamGUI/FlatCAMGUI.py:715 +#: FlatCAMApp.py:10567 flatcamGUI/MainGUI.py:715 msgid "Purple" msgstr "Purple" -#: FlatCAMApp.py:10569 flatcamGUI/FlatCAMGUI.py:718 +#: FlatCAMApp.py:10569 flatcamGUI/MainGUI.py:718 msgid "Brown" msgstr "Brown" -#: FlatCAMApp.py:10571 FlatCAMApp.py:10627 flatcamGUI/FlatCAMGUI.py:721 +#: FlatCAMApp.py:10571 FlatCAMApp.py:10627 flatcamGUI/MainGUI.py:721 msgid "White" msgstr "White" -#: FlatCAMApp.py:10573 flatcamGUI/FlatCAMGUI.py:724 +#: FlatCAMApp.py:10573 flatcamGUI/MainGUI.py:724 msgid "Black" msgstr "Black" -#: FlatCAMApp.py:10576 flatcamGUI/FlatCAMGUI.py:729 +#: FlatCAMApp.py:10576 flatcamGUI/MainGUI.py:729 msgid "Custom" msgstr "Custom" -#: FlatCAMApp.py:10586 flatcamGUI/FlatCAMGUI.py:737 +#: FlatCAMApp.py:10586 flatcamGUI/MainGUI.py:737 msgid "Default" msgstr "Default" -#: FlatCAMApp.py:10610 flatcamGUI/FlatCAMGUI.py:734 +#: FlatCAMApp.py:10610 flatcamGUI/MainGUI.py:734 msgid "Opacity" msgstr "Opacity" @@ -1667,7 +1667,7 @@ msgstr "Bookmark removed." msgid "Export FlatCAM Bookmarks" msgstr "Export FlatCAM Bookmarks" -#: FlatCAMBookmark.py:293 flatcamGUI/FlatCAMGUI.py:524 +#: FlatCAMBookmark.py:293 flatcamGUI/MainGUI.py:524 msgid "Bookmarks" msgstr "Bookmarks" @@ -3091,7 +3091,7 @@ msgstr "" "Delete a tool in the tool list\n" "by selecting a row in the tool table." -#: flatcamEditors/FlatCAMExcEditor.py:1650 flatcamGUI/FlatCAMGUI.py:2019 +#: flatcamEditors/FlatCAMExcEditor.py:1650 flatcamGUI/MainGUI.py:2019 msgid "Resize Drill(s)" msgstr "Resize Drill(s)" @@ -3115,8 +3115,8 @@ msgstr "Resize" msgid "Resize drill(s)" msgstr "Resize drill(s)" -#: flatcamEditors/FlatCAMExcEditor.py:1699 flatcamGUI/FlatCAMGUI.py:2018 -#: flatcamGUI/FlatCAMGUI.py:2270 +#: flatcamEditors/FlatCAMExcEditor.py:1699 flatcamGUI/MainGUI.py:2018 +#: flatcamGUI/MainGUI.py:2270 msgid "Add Drill Array" msgstr "Add Drill Array" @@ -3428,7 +3428,7 @@ 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:4071 +#: flatcamEditors/FlatCAMExcEditor.py:2579 flatcamGUI/MainGUI.py:4071 msgid "Added new tool with dia" msgstr "Added new tool with dia" @@ -3537,7 +3537,7 @@ msgid "Full Buffer" msgstr "Full Buffer" #: flatcamEditors/FlatCAMGeoEditor.py:132 -#: flatcamEditors/FlatCAMGeoEditor.py:3017 flatcamGUI/FlatCAMGUI.py:1928 +#: flatcamEditors/FlatCAMGeoEditor.py:3017 flatcamGUI/MainGUI.py:1928 #: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:190 msgid "Buffer Tool" msgstr "Buffer Tool" @@ -3556,7 +3556,7 @@ msgstr "Buffer distance value is missing or wrong format. Add it and retry." msgid "Font" msgstr "Font" -#: flatcamEditors/FlatCAMGeoEditor.py:323 flatcamGUI/FlatCAMGUI.py:2208 +#: flatcamEditors/FlatCAMGeoEditor.py:323 flatcamGUI/MainGUI.py:2208 msgid "Text" msgstr "Text" @@ -3564,8 +3564,8 @@ msgstr "Text" msgid "Text Tool" msgstr "Text Tool" -#: flatcamEditors/FlatCAMGeoEditor.py:405 flatcamGUI/FlatCAMGUI.py:511 -#: flatcamGUI/FlatCAMGUI.py:1158 flatcamGUI/ObjectUI.py:818 +#: flatcamEditors/FlatCAMGeoEditor.py:405 flatcamGUI/MainGUI.py:511 +#: flatcamGUI/MainGUI.py:1158 flatcamGUI/ObjectUI.py:818 #: flatcamGUI/ObjectUI.py:1662 flatcamObjects/FlatCAMExcellon.py:742 #: flatcamObjects/FlatCAMExcellon.py:1084 flatcamObjects/FlatCAMGeometry.py:759 #: flatcamTools/ToolNCC.py:331 flatcamTools/ToolNCC.py:797 @@ -3602,12 +3602,12 @@ msgstr "Connect:" msgid "Contour:" msgstr "Contour:" -#: flatcamEditors/FlatCAMGeoEditor.py:529 flatcamGUI/FlatCAMGUI.py:2212 +#: flatcamEditors/FlatCAMGeoEditor.py:529 flatcamGUI/MainGUI.py:2212 msgid "Paint" msgstr "Paint" -#: flatcamEditors/FlatCAMGeoEditor.py:547 flatcamGUI/FlatCAMGUI.py:924 -#: flatcamGUI/FlatCAMGUI.py:2628 flatcamGUI/ObjectUI.py:2139 +#: flatcamEditors/FlatCAMGeoEditor.py:547 flatcamGUI/MainGUI.py:924 +#: flatcamGUI/MainGUI.py:2628 flatcamGUI/ObjectUI.py:2139 #: flatcamTools/ToolPaint.py:43 flatcamTools/ToolPaint.py:738 msgid "Paint Tool" msgstr "Paint Tool" @@ -3634,8 +3634,8 @@ msgstr "Tools" #: flatcamEditors/FlatCAMGeoEditor.py:607 #: flatcamEditors/FlatCAMGeoEditor.py:991 #: flatcamEditors/FlatCAMGrbEditor.py:5306 -#: flatcamEditors/FlatCAMGrbEditor.py:5703 flatcamGUI/FlatCAMGUI.py:945 -#: flatcamGUI/FlatCAMGUI.py:2649 flatcamTools/ToolTransform.py:460 +#: flatcamEditors/FlatCAMGrbEditor.py:5703 flatcamGUI/MainGUI.py:945 +#: flatcamGUI/MainGUI.py:2649 flatcamTools/ToolTransform.py:460 msgid "Transform Tool" msgstr "Transform Tool" @@ -3655,9 +3655,9 @@ msgstr "Skew/Shear" #: flatcamEditors/FlatCAMGeoEditor.py:610 #: flatcamEditors/FlatCAMGrbEditor.py:2680 -#: flatcamEditors/FlatCAMGrbEditor.py:5309 flatcamGUI/FlatCAMGUI.py:1063 -#: flatcamGUI/FlatCAMGUI.py:2140 flatcamGUI/FlatCAMGUI.py:2255 -#: flatcamGUI/FlatCAMGUI.py:2767 flatcamGUI/ObjectUI.py:125 +#: flatcamEditors/FlatCAMGrbEditor.py:5309 flatcamGUI/MainGUI.py:1063 +#: flatcamGUI/MainGUI.py:2140 flatcamGUI/MainGUI.py:2255 +#: flatcamGUI/MainGUI.py:2767 flatcamGUI/ObjectUI.py:125 #: flatcamGUI/preferences/tools/ToolsTransformPrefGroupUI.py:95 #: flatcamTools/ToolTransform.py:26 msgid "Scale" @@ -3669,8 +3669,8 @@ msgid "Mirror (Flip)" msgstr "Mirror (Flip)" #: flatcamEditors/FlatCAMGeoEditor.py:625 -#: flatcamEditors/FlatCAMGrbEditor.py:5324 flatcamGUI/FlatCAMGUI.py:856 -#: flatcamGUI/FlatCAMGUI.py:2564 +#: flatcamEditors/FlatCAMGrbEditor.py:5324 flatcamGUI/MainGUI.py:856 +#: flatcamGUI/MainGUI.py:2564 msgid "Editor" msgstr "Editor" @@ -4384,7 +4384,7 @@ msgstr "Ring" msgid "Line" msgstr "Line" -#: flatcamEditors/FlatCAMGeoEditor.py:3591 flatcamGUI/FlatCAMGUI.py:2202 +#: flatcamEditors/FlatCAMGeoEditor.py:3591 flatcamGUI/MainGUI.py:2202 #: flatcamGUI/ObjectUI.py:2074 #: flatcamGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:218 #: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:328 @@ -4413,10 +4413,10 @@ msgstr "Editing MultiGeo Geometry, tool" msgid "with diameter" msgstr "with diameter" -#: flatcamEditors/FlatCAMGeoEditor.py:4509 flatcamGUI/FlatCAMGUI.py:3753 -#: flatcamGUI/FlatCAMGUI.py:3799 flatcamGUI/FlatCAMGUI.py:3817 -#: flatcamGUI/FlatCAMGUI.py:3961 flatcamGUI/FlatCAMGUI.py:4000 -#: flatcamGUI/FlatCAMGUI.py:4012 flatcamGUI/FlatCAMGUI.py:4029 +#: flatcamEditors/FlatCAMGeoEditor.py:4509 flatcamGUI/MainGUI.py:3753 +#: flatcamGUI/MainGUI.py:3799 flatcamGUI/MainGUI.py:3817 +#: flatcamGUI/MainGUI.py:3961 flatcamGUI/MainGUI.py:4000 +#: flatcamGUI/MainGUI.py:4012 flatcamGUI/MainGUI.py:4029 msgid "Click on target point." msgstr "Click on target point." @@ -4631,7 +4631,7 @@ msgstr "Done. Apertures Move completed." msgid "Done. Apertures copied." msgstr "Done. Apertures copied." -#: flatcamEditors/FlatCAMGrbEditor.py:2455 flatcamGUI/FlatCAMGUI.py:2233 +#: flatcamEditors/FlatCAMGrbEditor.py:2455 flatcamGUI/MainGUI.py:2233 #: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:27 msgid "Gerber Editor" msgstr "Gerber Editor" @@ -4793,9 +4793,9 @@ msgstr "" " - 'Beveled': the corner is a line that directly connects the features " "meeting in the corner" -#: flatcamEditors/FlatCAMGrbEditor.py:2640 flatcamGUI/FlatCAMGUI.py:1061 -#: flatcamGUI/FlatCAMGUI.py:2138 flatcamGUI/FlatCAMGUI.py:2210 -#: flatcamGUI/FlatCAMGUI.py:2253 flatcamGUI/FlatCAMGUI.py:2765 +#: flatcamEditors/FlatCAMGrbEditor.py:2640 flatcamGUI/MainGUI.py:1061 +#: flatcamGUI/MainGUI.py:2138 flatcamGUI/MainGUI.py:2210 +#: flatcamGUI/MainGUI.py:2253 flatcamGUI/MainGUI.py:2765 #: flatcamGUI/preferences/tools/ToolsTransformPrefGroupUI.py:200 #: flatcamTools/ToolTransform.py:29 msgid "Buffer" @@ -4870,8 +4870,8 @@ msgstr "Delete all the marked polygons." msgid "Clear all the markings." msgstr "Clear all the markings." -#: flatcamEditors/FlatCAMGrbEditor.py:2764 flatcamGUI/FlatCAMGUI.py:1046 -#: flatcamGUI/FlatCAMGUI.py:2138 flatcamGUI/FlatCAMGUI.py:2750 +#: flatcamEditors/FlatCAMGrbEditor.py:2764 flatcamGUI/MainGUI.py:1046 +#: flatcamGUI/MainGUI.py:2138 flatcamGUI/MainGUI.py:2750 msgid "Add Pad Array" msgstr "Add Pad Array" @@ -5164,129 +5164,129 @@ msgstr "Saved to" msgid "Code Editor content copied to clipboard ..." msgstr "Code Editor content copied to clipboard ..." -#: flatcamGUI/FlatCAMGUI.py:78 flatcamGUI/FlatCAMGUI.py:80 -#: flatcamGUI/FlatCAMGUI.py:2163 +#: flatcamGUI/MainGUI.py:78 flatcamGUI/MainGUI.py:80 +#: flatcamGUI/MainGUI.py:2163 msgid "Toggle Panel" msgstr "Toggle Panel" -#: flatcamGUI/FlatCAMGUI.py:90 +#: flatcamGUI/MainGUI.py:90 msgid "File" msgstr "File" -#: flatcamGUI/FlatCAMGUI.py:95 +#: flatcamGUI/MainGUI.py:95 msgid "&New Project ...\tCtrl+N" msgstr "&New Project ...\tCtrl+N" -#: flatcamGUI/FlatCAMGUI.py:97 +#: flatcamGUI/MainGUI.py:97 msgid "Will create a new, blank project" msgstr "Will create a new, blank project" -#: flatcamGUI/FlatCAMGUI.py:102 +#: flatcamGUI/MainGUI.py:102 msgid "&New" msgstr "&New" -#: flatcamGUI/FlatCAMGUI.py:106 +#: flatcamGUI/MainGUI.py:106 msgid "Geometry\tN" msgstr "Geometry\tN" -#: flatcamGUI/FlatCAMGUI.py:108 +#: flatcamGUI/MainGUI.py:108 msgid "Will create a new, empty Geometry Object." msgstr "Will create a new, empty Geometry Object." -#: flatcamGUI/FlatCAMGUI.py:111 +#: flatcamGUI/MainGUI.py:111 msgid "Gerber\tB" msgstr "Gerber\tB" -#: flatcamGUI/FlatCAMGUI.py:113 +#: flatcamGUI/MainGUI.py:113 msgid "Will create a new, empty Gerber Object." msgstr "Will create a new, empty Gerber Object." -#: flatcamGUI/FlatCAMGUI.py:116 +#: flatcamGUI/MainGUI.py:116 msgid "Excellon\tL" msgstr "Excellon\tL" -#: flatcamGUI/FlatCAMGUI.py:118 +#: flatcamGUI/MainGUI.py:118 msgid "Will create a new, empty Excellon Object." msgstr "Will create a new, empty Excellon Object." -#: flatcamGUI/FlatCAMGUI.py:123 +#: flatcamGUI/MainGUI.py:123 msgid "Document\tD" msgstr "Document\tD" -#: flatcamGUI/FlatCAMGUI.py:125 +#: flatcamGUI/MainGUI.py:125 msgid "Will create a new, empty Document Object." msgstr "Will create a new, empty Document Object." -#: flatcamGUI/FlatCAMGUI.py:129 flatcamGUI/FlatCAMGUI.py:4420 +#: flatcamGUI/MainGUI.py:129 flatcamGUI/MainGUI.py:4420 #: flatcamTools/ToolPcbWizard.py:62 flatcamTools/ToolPcbWizard.py:69 msgid "Open" msgstr "Open" -#: flatcamGUI/FlatCAMGUI.py:134 +#: flatcamGUI/MainGUI.py:134 msgid "Open &Project ..." msgstr "Open &Project ..." -#: flatcamGUI/FlatCAMGUI.py:140 flatcamGUI/FlatCAMGUI.py:4430 +#: flatcamGUI/MainGUI.py:140 flatcamGUI/MainGUI.py:4430 msgid "Open &Gerber ...\tCtrl+G" msgstr "Open &Gerber ...\tCtrl+G" -#: flatcamGUI/FlatCAMGUI.py:145 flatcamGUI/FlatCAMGUI.py:4435 +#: flatcamGUI/MainGUI.py:145 flatcamGUI/MainGUI.py:4435 msgid "Open &Excellon ...\tCtrl+E" msgstr "Open &Excellon ...\tCtrl+E" -#: flatcamGUI/FlatCAMGUI.py:150 flatcamGUI/FlatCAMGUI.py:4440 +#: flatcamGUI/MainGUI.py:150 flatcamGUI/MainGUI.py:4440 msgid "Open G-&Code ..." msgstr "Open G-&Code ..." -#: flatcamGUI/FlatCAMGUI.py:157 +#: flatcamGUI/MainGUI.py:157 msgid "Open Config ..." msgstr "Open Config ..." -#: flatcamGUI/FlatCAMGUI.py:162 +#: flatcamGUI/MainGUI.py:162 msgid "Recent projects" msgstr "Recent projects" -#: flatcamGUI/FlatCAMGUI.py:164 +#: flatcamGUI/MainGUI.py:164 msgid "Recent files" msgstr "Recent files" -#: flatcamGUI/FlatCAMGUI.py:167 flatcamGUI/FlatCAMGUI.py:753 -#: flatcamGUI/FlatCAMGUI.py:1339 +#: flatcamGUI/MainGUI.py:167 flatcamGUI/MainGUI.py:753 +#: flatcamGUI/MainGUI.py:1339 msgid "Save" msgstr "Save" -#: flatcamGUI/FlatCAMGUI.py:171 +#: flatcamGUI/MainGUI.py:171 msgid "&Save Project ...\tCtrl+S" msgstr "&Save Project ...\tCtrl+S" -#: flatcamGUI/FlatCAMGUI.py:176 +#: flatcamGUI/MainGUI.py:176 msgid "Save Project &As ...\tCtrl+Shift+S" msgstr "Save Project &As ...\tCtrl+Shift+S" -#: flatcamGUI/FlatCAMGUI.py:191 +#: flatcamGUI/MainGUI.py:191 msgid "Scripting" msgstr "Scripting" -#: flatcamGUI/FlatCAMGUI.py:195 flatcamGUI/FlatCAMGUI.py:903 -#: flatcamGUI/FlatCAMGUI.py:2607 +#: flatcamGUI/MainGUI.py:195 flatcamGUI/MainGUI.py:903 +#: flatcamGUI/MainGUI.py:2607 msgid "New Script ..." msgstr "New Script ..." -#: flatcamGUI/FlatCAMGUI.py:197 flatcamGUI/FlatCAMGUI.py:905 -#: flatcamGUI/FlatCAMGUI.py:2609 +#: flatcamGUI/MainGUI.py:197 flatcamGUI/MainGUI.py:905 +#: flatcamGUI/MainGUI.py:2609 msgid "Open Script ..." msgstr "Open Script ..." -#: flatcamGUI/FlatCAMGUI.py:199 +#: flatcamGUI/MainGUI.py:199 msgid "Open Example ..." msgstr "Open Example ..." -#: flatcamGUI/FlatCAMGUI.py:201 flatcamGUI/FlatCAMGUI.py:907 -#: flatcamGUI/FlatCAMGUI.py:2611 flatcamGUI/FlatCAMGUI.py:4409 +#: flatcamGUI/MainGUI.py:201 flatcamGUI/MainGUI.py:907 +#: flatcamGUI/MainGUI.py:2611 flatcamGUI/MainGUI.py:4409 msgid "Run Script ..." msgstr "Run Script ..." -#: flatcamGUI/FlatCAMGUI.py:203 flatcamGUI/FlatCAMGUI.py:4411 +#: flatcamGUI/MainGUI.py:203 flatcamGUI/MainGUI.py:4411 msgid "" "Will run the opened Tcl Script thus\n" "enabling the automation of certain\n" @@ -5296,47 +5296,47 @@ msgstr "" "enabling the automation of certain\n" "functions of FlatCAM." -#: flatcamGUI/FlatCAMGUI.py:218 +#: flatcamGUI/MainGUI.py:218 msgid "Import" msgstr "Import" -#: flatcamGUI/FlatCAMGUI.py:220 +#: flatcamGUI/MainGUI.py:220 msgid "&SVG as Geometry Object ..." msgstr "&SVG as Geometry Object ..." -#: flatcamGUI/FlatCAMGUI.py:223 +#: flatcamGUI/MainGUI.py:223 msgid "&SVG as Gerber Object ..." msgstr "&SVG as Gerber Object ..." -#: flatcamGUI/FlatCAMGUI.py:228 +#: flatcamGUI/MainGUI.py:228 msgid "&DXF as Geometry Object ..." msgstr "&DXF as Geometry Object ..." -#: flatcamGUI/FlatCAMGUI.py:231 +#: flatcamGUI/MainGUI.py:231 msgid "&DXF as Gerber Object ..." msgstr "&DXF as Gerber Object ..." -#: flatcamGUI/FlatCAMGUI.py:235 +#: flatcamGUI/MainGUI.py:235 msgid "HPGL2 as Geometry Object ..." msgstr "HPGL2 as Geometry Object ..." -#: flatcamGUI/FlatCAMGUI.py:241 +#: flatcamGUI/MainGUI.py:241 msgid "Export" msgstr "Export" -#: flatcamGUI/FlatCAMGUI.py:245 +#: flatcamGUI/MainGUI.py:245 msgid "Export &SVG ..." msgstr "Export &SVG ..." -#: flatcamGUI/FlatCAMGUI.py:249 +#: flatcamGUI/MainGUI.py:249 msgid "Export DXF ..." msgstr "Export DXF ..." -#: flatcamGUI/FlatCAMGUI.py:255 +#: flatcamGUI/MainGUI.py:255 msgid "Export &PNG ..." msgstr "Export &PNG ..." -#: flatcamGUI/FlatCAMGUI.py:257 +#: flatcamGUI/MainGUI.py:257 msgid "" "Will export an image in PNG format,\n" "the saved image will contain the visual \n" @@ -5346,11 +5346,11 @@ msgstr "" "the saved image will contain the visual \n" "information currently in FlatCAM Plot Area." -#: flatcamGUI/FlatCAMGUI.py:266 +#: flatcamGUI/MainGUI.py:266 msgid "Export &Excellon ..." msgstr "Export &Excellon ..." -#: flatcamGUI/FlatCAMGUI.py:268 +#: flatcamGUI/MainGUI.py:268 msgid "" "Will export an Excellon Object as Excellon file,\n" "the coordinates format, the file units and zeros\n" @@ -5360,11 +5360,11 @@ msgstr "" "the coordinates format, the file units and zeros\n" "are set in Preferences -> Excellon Export." -#: flatcamGUI/FlatCAMGUI.py:275 +#: flatcamGUI/MainGUI.py:275 msgid "Export &Gerber ..." msgstr "Export &Gerber ..." -#: flatcamGUI/FlatCAMGUI.py:277 +#: flatcamGUI/MainGUI.py:277 msgid "" "Will export an Gerber Object as Gerber file,\n" "the coordinates format, the file units and zeros\n" @@ -5374,53 +5374,53 @@ msgstr "" "the coordinates format, the file units and zeros\n" "are set in Preferences -> Gerber Export." -#: flatcamGUI/FlatCAMGUI.py:287 +#: flatcamGUI/MainGUI.py:287 msgid "Backup" msgstr "Backup" -#: flatcamGUI/FlatCAMGUI.py:292 +#: flatcamGUI/MainGUI.py:292 msgid "Import Preferences from file ..." msgstr "Import Preferences from file ..." -#: flatcamGUI/FlatCAMGUI.py:298 +#: flatcamGUI/MainGUI.py:298 msgid "Export Preferences to file ..." msgstr "Export Preferences to file ..." -#: flatcamGUI/FlatCAMGUI.py:306 +#: flatcamGUI/MainGUI.py:306 #: flatcamGUI/preferences/PreferencesUIManager.py:1119 msgid "Save Preferences" msgstr "Save Preferences" -#: flatcamGUI/FlatCAMGUI.py:312 flatcamGUI/FlatCAMGUI.py:1730 +#: flatcamGUI/MainGUI.py:312 flatcamGUI/MainGUI.py:1730 msgid "Print (PDF)" msgstr "Print (PDF)" -#: flatcamGUI/FlatCAMGUI.py:320 +#: flatcamGUI/MainGUI.py:320 msgid "E&xit" msgstr "E&xit" -#: flatcamGUI/FlatCAMGUI.py:328 flatcamGUI/FlatCAMGUI.py:747 -#: flatcamGUI/FlatCAMGUI.py:2286 +#: flatcamGUI/MainGUI.py:328 flatcamGUI/MainGUI.py:747 +#: flatcamGUI/MainGUI.py:2286 msgid "Edit" msgstr "Edit" -#: flatcamGUI/FlatCAMGUI.py:332 +#: flatcamGUI/MainGUI.py:332 msgid "Edit Object\tE" msgstr "Edit Object\tE" -#: flatcamGUI/FlatCAMGUI.py:334 +#: flatcamGUI/MainGUI.py:334 msgid "Close Editor\tCtrl+S" msgstr "Close Editor\tCtrl+S" -#: flatcamGUI/FlatCAMGUI.py:343 +#: flatcamGUI/MainGUI.py:343 msgid "Conversion" msgstr "Conversion" -#: flatcamGUI/FlatCAMGUI.py:345 +#: flatcamGUI/MainGUI.py:345 msgid "&Join Geo/Gerber/Exc -> Geo" msgstr "&Join Geo/Gerber/Exc -> Geo" -#: flatcamGUI/FlatCAMGUI.py:347 +#: flatcamGUI/MainGUI.py:347 msgid "" "Merge a selection of objects, which can be of type:\n" "- Gerber\n" @@ -5434,28 +5434,28 @@ msgstr "" "- Geometry\n" "into a new combo Geometry object." -#: flatcamGUI/FlatCAMGUI.py:354 +#: flatcamGUI/MainGUI.py:354 msgid "Join Excellon(s) -> Excellon" msgstr "Join Excellon(s) -> Excellon" -#: flatcamGUI/FlatCAMGUI.py:356 +#: flatcamGUI/MainGUI.py:356 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:359 +#: flatcamGUI/MainGUI.py:359 msgid "Join Gerber(s) -> Gerber" msgstr "Join Gerber(s) -> Gerber" -#: flatcamGUI/FlatCAMGUI.py:361 +#: flatcamGUI/MainGUI.py:361 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:366 +#: flatcamGUI/MainGUI.py:366 msgid "Convert Single to MultiGeo" msgstr "Convert Single to MultiGeo" -#: flatcamGUI/FlatCAMGUI.py:368 +#: flatcamGUI/MainGUI.py:368 msgid "" "Will convert a Geometry object from single_geometry type\n" "to a multi_geometry type." @@ -5463,11 +5463,11 @@ msgstr "" "Will convert a Geometry object from single_geometry type\n" "to a multi_geometry type." -#: flatcamGUI/FlatCAMGUI.py:372 +#: flatcamGUI/MainGUI.py:372 msgid "Convert Multi to SingleGeo" msgstr "Convert Multi to SingleGeo" -#: flatcamGUI/FlatCAMGUI.py:374 +#: flatcamGUI/MainGUI.py:374 msgid "" "Will convert a Geometry object from multi_geometry type\n" "to a single_geometry type." @@ -5475,756 +5475,756 @@ msgstr "" "Will convert a Geometry object from multi_geometry type\n" "to a single_geometry type." -#: flatcamGUI/FlatCAMGUI.py:381 +#: flatcamGUI/MainGUI.py:381 msgid "Convert Any to Geo" msgstr "Convert Any to Geo" -#: flatcamGUI/FlatCAMGUI.py:384 +#: flatcamGUI/MainGUI.py:384 msgid "Convert Any to Gerber" msgstr "Convert Any to Gerber" -#: flatcamGUI/FlatCAMGUI.py:390 +#: flatcamGUI/MainGUI.py:390 msgid "&Copy\tCtrl+C" msgstr "&Copy\tCtrl+C" -#: flatcamGUI/FlatCAMGUI.py:395 +#: flatcamGUI/MainGUI.py:395 msgid "&Delete\tDEL" msgstr "&Delete\tDEL" -#: flatcamGUI/FlatCAMGUI.py:400 +#: flatcamGUI/MainGUI.py:400 msgid "Se&t Origin\tO" msgstr "Se&t Origin\tO" -#: flatcamGUI/FlatCAMGUI.py:402 +#: flatcamGUI/MainGUI.py:402 msgid "Move to Origin\tShift+O" msgstr "Move to Origin\tShift+O" -#: flatcamGUI/FlatCAMGUI.py:405 +#: flatcamGUI/MainGUI.py:405 msgid "Jump to Location\tJ" msgstr "Jump to Location\tJ" -#: flatcamGUI/FlatCAMGUI.py:407 +#: flatcamGUI/MainGUI.py:407 msgid "Locate in Object\tShift+J" msgstr "Locate in Object\tShift+J" -#: flatcamGUI/FlatCAMGUI.py:412 +#: flatcamGUI/MainGUI.py:412 msgid "Toggle Units\tQ" msgstr "Toggle Units\tQ" -#: flatcamGUI/FlatCAMGUI.py:414 +#: flatcamGUI/MainGUI.py:414 msgid "&Select All\tCtrl+A" msgstr "&Select All\tCtrl+A" -#: flatcamGUI/FlatCAMGUI.py:419 +#: flatcamGUI/MainGUI.py:419 msgid "&Preferences\tShift+P" msgstr "&Preferences\tShift+P" -#: flatcamGUI/FlatCAMGUI.py:425 flatcamTools/ToolProperties.py:155 +#: flatcamGUI/MainGUI.py:425 flatcamTools/ToolProperties.py:155 msgid "Options" msgstr "Options" -#: flatcamGUI/FlatCAMGUI.py:427 +#: flatcamGUI/MainGUI.py:427 msgid "&Rotate Selection\tShift+(R)" msgstr "&Rotate Selection\tShift+(R)" -#: flatcamGUI/FlatCAMGUI.py:432 +#: flatcamGUI/MainGUI.py:432 msgid "&Skew on X axis\tShift+X" msgstr "&Skew on X axis\tShift+X" -#: flatcamGUI/FlatCAMGUI.py:434 +#: flatcamGUI/MainGUI.py:434 msgid "S&kew on Y axis\tShift+Y" msgstr "S&kew on Y axis\tShift+Y" -#: flatcamGUI/FlatCAMGUI.py:439 +#: flatcamGUI/MainGUI.py:439 msgid "Flip on &X axis\tX" msgstr "Flip on &X axis\tX" -#: flatcamGUI/FlatCAMGUI.py:441 +#: flatcamGUI/MainGUI.py:441 msgid "Flip on &Y axis\tY" msgstr "Flip on &Y axis\tY" -#: flatcamGUI/FlatCAMGUI.py:446 +#: flatcamGUI/MainGUI.py:446 msgid "View source\tAlt+S" msgstr "View source\tAlt+S" -#: flatcamGUI/FlatCAMGUI.py:448 +#: flatcamGUI/MainGUI.py:448 msgid "Tools DataBase\tCtrl+D" msgstr "Tools DataBase\tCtrl+D" -#: flatcamGUI/FlatCAMGUI.py:455 flatcamGUI/FlatCAMGUI.py:2183 +#: flatcamGUI/MainGUI.py:455 flatcamGUI/MainGUI.py:2183 msgid "View" msgstr "View" -#: flatcamGUI/FlatCAMGUI.py:457 +#: flatcamGUI/MainGUI.py:457 msgid "Enable all plots\tAlt+1" msgstr "Enable all plots\tAlt+1" -#: flatcamGUI/FlatCAMGUI.py:459 +#: flatcamGUI/MainGUI.py:459 msgid "Disable all plots\tAlt+2" msgstr "Disable all plots\tAlt+2" -#: flatcamGUI/FlatCAMGUI.py:461 +#: flatcamGUI/MainGUI.py:461 msgid "Disable non-selected\tAlt+3" msgstr "Disable non-selected\tAlt+3" -#: flatcamGUI/FlatCAMGUI.py:465 +#: flatcamGUI/MainGUI.py:465 msgid "&Zoom Fit\tV" msgstr "&Zoom Fit\tV" -#: flatcamGUI/FlatCAMGUI.py:467 +#: flatcamGUI/MainGUI.py:467 msgid "&Zoom In\t=" msgstr "&Zoom In\t=" -#: flatcamGUI/FlatCAMGUI.py:469 +#: flatcamGUI/MainGUI.py:469 msgid "&Zoom Out\t-" msgstr "&Zoom Out\t-" -#: flatcamGUI/FlatCAMGUI.py:474 +#: flatcamGUI/MainGUI.py:474 msgid "Redraw All\tF5" msgstr "Redraw All\tF5" -#: flatcamGUI/FlatCAMGUI.py:478 +#: flatcamGUI/MainGUI.py:478 msgid "Toggle Code Editor\tShift+E" msgstr "Toggle Code Editor\tShift+E" -#: flatcamGUI/FlatCAMGUI.py:481 +#: flatcamGUI/MainGUI.py:481 msgid "&Toggle FullScreen\tAlt+F10" msgstr "&Toggle FullScreen\tAlt+F10" -#: flatcamGUI/FlatCAMGUI.py:483 +#: flatcamGUI/MainGUI.py:483 msgid "&Toggle Plot Area\tCtrl+F10" msgstr "&Toggle Plot Area\tCtrl+F10" -#: flatcamGUI/FlatCAMGUI.py:485 +#: flatcamGUI/MainGUI.py:485 msgid "&Toggle Project/Sel/Tool\t`" msgstr "&Toggle Project/Sel/Tool\t`" -#: flatcamGUI/FlatCAMGUI.py:489 +#: flatcamGUI/MainGUI.py:489 msgid "&Toggle Grid Snap\tG" msgstr "&Toggle Grid Snap\tG" -#: flatcamGUI/FlatCAMGUI.py:491 +#: flatcamGUI/MainGUI.py:491 msgid "&Toggle Grid Lines\tAlt+G" msgstr "&Toggle Grid Lines\tAlt+G" -#: flatcamGUI/FlatCAMGUI.py:493 +#: flatcamGUI/MainGUI.py:493 msgid "&Toggle Axis\tShift+G" msgstr "&Toggle Axis\tShift+G" -#: flatcamGUI/FlatCAMGUI.py:495 +#: flatcamGUI/MainGUI.py:495 msgid "Toggle Workspace\tShift+W" msgstr "Toggle Workspace\tShift+W" -#: flatcamGUI/FlatCAMGUI.py:500 +#: flatcamGUI/MainGUI.py:500 msgid "Objects" msgstr "Objects" -#: flatcamGUI/FlatCAMGUI.py:514 +#: flatcamGUI/MainGUI.py:514 msgid "&Command Line\tS" msgstr "&Command Line\tS" -#: flatcamGUI/FlatCAMGUI.py:519 +#: flatcamGUI/MainGUI.py:519 msgid "Help" msgstr "Help" -#: flatcamGUI/FlatCAMGUI.py:521 +#: flatcamGUI/MainGUI.py:521 msgid "Online Help\tF1" msgstr "Online Help\tF1" -#: flatcamGUI/FlatCAMGUI.py:531 +#: flatcamGUI/MainGUI.py:531 msgid "Report a bug" msgstr "Report a bug" -#: flatcamGUI/FlatCAMGUI.py:534 +#: flatcamGUI/MainGUI.py:534 msgid "Excellon Specification" msgstr "Excellon Specification" -#: flatcamGUI/FlatCAMGUI.py:536 +#: flatcamGUI/MainGUI.py:536 msgid "Gerber Specification" msgstr "Gerber Specification" -#: flatcamGUI/FlatCAMGUI.py:541 +#: flatcamGUI/MainGUI.py:541 msgid "Shortcuts List\tF3" msgstr "Shortcuts List\tF3" -#: flatcamGUI/FlatCAMGUI.py:543 +#: flatcamGUI/MainGUI.py:543 msgid "YouTube Channel\tF4" msgstr "YouTube Channel\tF4" -#: flatcamGUI/FlatCAMGUI.py:554 +#: flatcamGUI/MainGUI.py:554 msgid "Add Circle\tO" msgstr "Add Circle\tO" -#: flatcamGUI/FlatCAMGUI.py:557 +#: flatcamGUI/MainGUI.py:557 msgid "Add Arc\tA" msgstr "Add Arc\tA" -#: flatcamGUI/FlatCAMGUI.py:560 +#: flatcamGUI/MainGUI.py:560 msgid "Add Rectangle\tR" msgstr "Add Rectangle\tR" -#: flatcamGUI/FlatCAMGUI.py:563 +#: flatcamGUI/MainGUI.py:563 msgid "Add Polygon\tN" msgstr "Add Polygon\tN" -#: flatcamGUI/FlatCAMGUI.py:566 +#: flatcamGUI/MainGUI.py:566 msgid "Add Path\tP" msgstr "Add Path\tP" -#: flatcamGUI/FlatCAMGUI.py:569 +#: flatcamGUI/MainGUI.py:569 msgid "Add Text\tT" msgstr "Add Text\tT" -#: flatcamGUI/FlatCAMGUI.py:572 +#: flatcamGUI/MainGUI.py:572 msgid "Polygon Union\tU" msgstr "Polygon Union\tU" -#: flatcamGUI/FlatCAMGUI.py:574 +#: flatcamGUI/MainGUI.py:574 msgid "Polygon Intersection\tE" msgstr "Polygon Intersection\tE" -#: flatcamGUI/FlatCAMGUI.py:576 +#: flatcamGUI/MainGUI.py:576 msgid "Polygon Subtraction\tS" msgstr "Polygon Subtraction\tS" -#: flatcamGUI/FlatCAMGUI.py:580 +#: flatcamGUI/MainGUI.py:580 msgid "Cut Path\tX" msgstr "Cut Path\tX" -#: flatcamGUI/FlatCAMGUI.py:584 +#: flatcamGUI/MainGUI.py:584 msgid "Copy Geom\tC" msgstr "Copy Geom\tC" -#: flatcamGUI/FlatCAMGUI.py:586 +#: flatcamGUI/MainGUI.py:586 msgid "Delete Shape\tDEL" msgstr "Delete Shape\tDEL" -#: flatcamGUI/FlatCAMGUI.py:590 flatcamGUI/FlatCAMGUI.py:677 +#: flatcamGUI/MainGUI.py:590 flatcamGUI/MainGUI.py:677 msgid "Move\tM" msgstr "Move\tM" -#: flatcamGUI/FlatCAMGUI.py:592 +#: flatcamGUI/MainGUI.py:592 msgid "Buffer Tool\tB" msgstr "Buffer Tool\tB" -#: flatcamGUI/FlatCAMGUI.py:595 +#: flatcamGUI/MainGUI.py:595 msgid "Paint Tool\tI" msgstr "Paint Tool\tI" -#: flatcamGUI/FlatCAMGUI.py:598 +#: flatcamGUI/MainGUI.py:598 msgid "Transform Tool\tAlt+R" msgstr "Transform Tool\tAlt+R" -#: flatcamGUI/FlatCAMGUI.py:602 +#: flatcamGUI/MainGUI.py:602 msgid "Toggle Corner Snap\tK" msgstr "Toggle Corner Snap\tK" -#: flatcamGUI/FlatCAMGUI.py:608 +#: flatcamGUI/MainGUI.py:608 msgid ">Excellon Editor<" msgstr ">Excellon Editor<" -#: flatcamGUI/FlatCAMGUI.py:612 +#: flatcamGUI/MainGUI.py:612 msgid "Add Drill Array\tA" msgstr "Add Drill Array\tA" -#: flatcamGUI/FlatCAMGUI.py:614 +#: flatcamGUI/MainGUI.py:614 msgid "Add Drill\tD" msgstr "Add Drill\tD" -#: flatcamGUI/FlatCAMGUI.py:618 +#: flatcamGUI/MainGUI.py:618 msgid "Add Slot Array\tQ" msgstr "Add Slot Array\tQ" -#: flatcamGUI/FlatCAMGUI.py:620 +#: flatcamGUI/MainGUI.py:620 msgid "Add Slot\tW" msgstr "Add Slot\tW" -#: flatcamGUI/FlatCAMGUI.py:624 +#: flatcamGUI/MainGUI.py:624 msgid "Resize Drill(S)\tR" msgstr "Resize Drill(S)\tR" -#: flatcamGUI/FlatCAMGUI.py:627 flatcamGUI/FlatCAMGUI.py:671 +#: flatcamGUI/MainGUI.py:627 flatcamGUI/MainGUI.py:671 msgid "Copy\tC" msgstr "Copy\tC" -#: flatcamGUI/FlatCAMGUI.py:629 flatcamGUI/FlatCAMGUI.py:673 +#: flatcamGUI/MainGUI.py:629 flatcamGUI/MainGUI.py:673 msgid "Delete\tDEL" msgstr "Delete\tDEL" -#: flatcamGUI/FlatCAMGUI.py:634 +#: flatcamGUI/MainGUI.py:634 msgid "Move Drill(s)\tM" msgstr "Move Drill(s)\tM" -#: flatcamGUI/FlatCAMGUI.py:639 +#: flatcamGUI/MainGUI.py:639 msgid ">Gerber Editor<" msgstr ">Gerber Editor<" -#: flatcamGUI/FlatCAMGUI.py:643 +#: flatcamGUI/MainGUI.py:643 msgid "Add Pad\tP" msgstr "Add Pad\tP" -#: flatcamGUI/FlatCAMGUI.py:645 +#: flatcamGUI/MainGUI.py:645 msgid "Add Pad Array\tA" msgstr "Add Pad Array\tA" -#: flatcamGUI/FlatCAMGUI.py:647 +#: flatcamGUI/MainGUI.py:647 msgid "Add Track\tT" msgstr "Add Track\tT" -#: flatcamGUI/FlatCAMGUI.py:649 +#: flatcamGUI/MainGUI.py:649 msgid "Add Region\tN" msgstr "Add Region\tN" -#: flatcamGUI/FlatCAMGUI.py:653 +#: flatcamGUI/MainGUI.py:653 msgid "Poligonize\tAlt+N" msgstr "Poligonize\tAlt+N" -#: flatcamGUI/FlatCAMGUI.py:655 +#: flatcamGUI/MainGUI.py:655 msgid "Add SemiDisc\tE" msgstr "Add SemiDisc\tE" -#: flatcamGUI/FlatCAMGUI.py:657 +#: flatcamGUI/MainGUI.py:657 msgid "Add Disc\tD" msgstr "Add Disc\tD" -#: flatcamGUI/FlatCAMGUI.py:659 +#: flatcamGUI/MainGUI.py:659 msgid "Buffer\tB" msgstr "Buffer\tB" -#: flatcamGUI/FlatCAMGUI.py:661 +#: flatcamGUI/MainGUI.py:661 msgid "Scale\tS" msgstr "Scale\tS" -#: flatcamGUI/FlatCAMGUI.py:663 +#: flatcamGUI/MainGUI.py:663 msgid "Mark Area\tAlt+A" msgstr "Mark Area\tAlt+A" -#: flatcamGUI/FlatCAMGUI.py:665 +#: flatcamGUI/MainGUI.py:665 msgid "Eraser\tCtrl+E" msgstr "Eraser\tCtrl+E" -#: flatcamGUI/FlatCAMGUI.py:667 +#: flatcamGUI/MainGUI.py:667 msgid "Transform\tAlt+R" msgstr "Transform\tAlt+R" -#: flatcamGUI/FlatCAMGUI.py:694 +#: flatcamGUI/MainGUI.py:694 msgid "Enable Plot" msgstr "Enable Plot" -#: flatcamGUI/FlatCAMGUI.py:696 +#: flatcamGUI/MainGUI.py:696 msgid "Disable Plot" msgstr "Disable Plot" -#: flatcamGUI/FlatCAMGUI.py:700 +#: flatcamGUI/MainGUI.py:700 msgid "Set Color" msgstr "Set Color" -#: flatcamGUI/FlatCAMGUI.py:742 +#: flatcamGUI/MainGUI.py:742 msgid "Generate CNC" msgstr "Generate CNC" -#: flatcamGUI/FlatCAMGUI.py:744 +#: flatcamGUI/MainGUI.py:744 msgid "View Source" msgstr "View Source" -#: flatcamGUI/FlatCAMGUI.py:749 flatcamGUI/FlatCAMGUI.py:863 -#: flatcamGUI/FlatCAMGUI.py:1072 flatcamGUI/FlatCAMGUI.py:2138 -#: flatcamGUI/FlatCAMGUI.py:2282 flatcamGUI/FlatCAMGUI.py:2572 -#: flatcamGUI/FlatCAMGUI.py:2775 flatcamGUI/ObjectUI.py:1617 +#: flatcamGUI/MainGUI.py:749 flatcamGUI/MainGUI.py:863 +#: flatcamGUI/MainGUI.py:1072 flatcamGUI/MainGUI.py:2138 +#: flatcamGUI/MainGUI.py:2282 flatcamGUI/MainGUI.py:2572 +#: flatcamGUI/MainGUI.py:2775 flatcamGUI/ObjectUI.py:1617 #: flatcamObjects/FlatCAMGeometry.py:502 flatcamTools/ToolPanelize.py:540 #: flatcamTools/ToolPanelize.py:567 flatcamTools/ToolPanelize.py:660 #: flatcamTools/ToolPanelize.py:689 flatcamTools/ToolPanelize.py:751 msgid "Copy" msgstr "Copy" -#: flatcamGUI/FlatCAMGUI.py:757 flatcamGUI/FlatCAMGUI.py:2295 +#: flatcamGUI/MainGUI.py:757 flatcamGUI/MainGUI.py:2295 #: flatcamTools/ToolProperties.py:31 msgid "Properties" msgstr "Properties" -#: flatcamGUI/FlatCAMGUI.py:786 +#: flatcamGUI/MainGUI.py:786 msgid "File Toolbar" msgstr "File Toolbar" -#: flatcamGUI/FlatCAMGUI.py:790 +#: flatcamGUI/MainGUI.py:790 msgid "Edit Toolbar" msgstr "Edit Toolbar" -#: flatcamGUI/FlatCAMGUI.py:794 +#: flatcamGUI/MainGUI.py:794 msgid "View Toolbar" msgstr "View Toolbar" -#: flatcamGUI/FlatCAMGUI.py:798 +#: flatcamGUI/MainGUI.py:798 msgid "Shell Toolbar" msgstr "Shell Toolbar" -#: flatcamGUI/FlatCAMGUI.py:802 +#: flatcamGUI/MainGUI.py:802 msgid "Tools Toolbar" msgstr "Tools Toolbar" -#: flatcamGUI/FlatCAMGUI.py:806 +#: flatcamGUI/MainGUI.py:806 msgid "Excellon Editor Toolbar" msgstr "Excellon Editor Toolbar" -#: flatcamGUI/FlatCAMGUI.py:812 +#: flatcamGUI/MainGUI.py:812 msgid "Geometry Editor Toolbar" msgstr "Geometry Editor Toolbar" -#: flatcamGUI/FlatCAMGUI.py:816 +#: flatcamGUI/MainGUI.py:816 msgid "Gerber Editor Toolbar" msgstr "Gerber Editor Toolbar" -#: flatcamGUI/FlatCAMGUI.py:820 +#: flatcamGUI/MainGUI.py:820 msgid "Grid Toolbar" msgstr "Grid Toolbar" -#: flatcamGUI/FlatCAMGUI.py:841 flatcamGUI/FlatCAMGUI.py:2549 +#: flatcamGUI/MainGUI.py:841 flatcamGUI/MainGUI.py:2549 msgid "Open project" msgstr "Open project" -#: flatcamGUI/FlatCAMGUI.py:843 flatcamGUI/FlatCAMGUI.py:2551 +#: flatcamGUI/MainGUI.py:843 flatcamGUI/MainGUI.py:2551 msgid "Save project" msgstr "Save project" -#: flatcamGUI/FlatCAMGUI.py:849 flatcamGUI/FlatCAMGUI.py:2557 +#: flatcamGUI/MainGUI.py:849 flatcamGUI/MainGUI.py:2557 msgid "New Blank Geometry" msgstr "New Blank Geometry" -#: flatcamGUI/FlatCAMGUI.py:851 flatcamGUI/FlatCAMGUI.py:2559 +#: flatcamGUI/MainGUI.py:851 flatcamGUI/MainGUI.py:2559 msgid "New Blank Gerber" msgstr "New Blank Gerber" -#: flatcamGUI/FlatCAMGUI.py:853 flatcamGUI/FlatCAMGUI.py:2561 +#: flatcamGUI/MainGUI.py:853 flatcamGUI/MainGUI.py:2561 msgid "New Blank Excellon" msgstr "New Blank Excellon" -#: flatcamGUI/FlatCAMGUI.py:858 flatcamGUI/FlatCAMGUI.py:2567 +#: flatcamGUI/MainGUI.py:858 flatcamGUI/MainGUI.py:2567 msgid "Save Object and close the Editor" msgstr "Save Object and close the Editor" -#: flatcamGUI/FlatCAMGUI.py:865 flatcamGUI/FlatCAMGUI.py:2574 +#: flatcamGUI/MainGUI.py:865 flatcamGUI/MainGUI.py:2574 msgid "&Delete" msgstr "&Delete" -#: flatcamGUI/FlatCAMGUI.py:868 flatcamGUI/FlatCAMGUI.py:1729 -#: flatcamGUI/FlatCAMGUI.py:1935 flatcamGUI/FlatCAMGUI.py:2577 +#: flatcamGUI/MainGUI.py:868 flatcamGUI/MainGUI.py:1729 +#: flatcamGUI/MainGUI.py:1935 flatcamGUI/MainGUI.py:2577 #: flatcamTools/ToolDistance.py:35 flatcamTools/ToolDistance.py:195 msgid "Distance Tool" msgstr "Distance Tool" -#: flatcamGUI/FlatCAMGUI.py:870 flatcamGUI/FlatCAMGUI.py:2579 +#: flatcamGUI/MainGUI.py:870 flatcamGUI/MainGUI.py:2579 msgid "Distance Min Tool" msgstr "Distance Min Tool" -#: flatcamGUI/FlatCAMGUI.py:872 flatcamGUI/FlatCAMGUI.py:1722 -#: flatcamGUI/FlatCAMGUI.py:2581 +#: flatcamGUI/MainGUI.py:872 flatcamGUI/MainGUI.py:1722 +#: flatcamGUI/MainGUI.py:2581 msgid "Set Origin" msgstr "Set Origin" -#: flatcamGUI/FlatCAMGUI.py:874 +#: flatcamGUI/MainGUI.py:874 msgid "Move to Origin" msgstr "Move to Origin" -#: flatcamGUI/FlatCAMGUI.py:877 flatcamGUI/FlatCAMGUI.py:2583 +#: flatcamGUI/MainGUI.py:877 flatcamGUI/MainGUI.py:2583 msgid "Jump to Location" msgstr "Jump to Location" -#: flatcamGUI/FlatCAMGUI.py:879 flatcamGUI/FlatCAMGUI.py:1734 -#: flatcamGUI/FlatCAMGUI.py:2585 +#: flatcamGUI/MainGUI.py:879 flatcamGUI/MainGUI.py:1734 +#: flatcamGUI/MainGUI.py:2585 msgid "Locate in Object" msgstr "Locate in Object" -#: flatcamGUI/FlatCAMGUI.py:885 flatcamGUI/FlatCAMGUI.py:2591 +#: flatcamGUI/MainGUI.py:885 flatcamGUI/MainGUI.py:2591 msgid "&Replot" msgstr "&Replot" -#: flatcamGUI/FlatCAMGUI.py:887 flatcamGUI/FlatCAMGUI.py:2593 +#: flatcamGUI/MainGUI.py:887 flatcamGUI/MainGUI.py:2593 msgid "&Clear plot" msgstr "&Clear plot" -#: flatcamGUI/FlatCAMGUI.py:889 flatcamGUI/FlatCAMGUI.py:1725 -#: flatcamGUI/FlatCAMGUI.py:2595 +#: flatcamGUI/MainGUI.py:889 flatcamGUI/MainGUI.py:1725 +#: flatcamGUI/MainGUI.py:2595 msgid "Zoom In" msgstr "Zoom In" -#: flatcamGUI/FlatCAMGUI.py:891 flatcamGUI/FlatCAMGUI.py:1725 -#: flatcamGUI/FlatCAMGUI.py:2597 +#: flatcamGUI/MainGUI.py:891 flatcamGUI/MainGUI.py:1725 +#: flatcamGUI/MainGUI.py:2597 msgid "Zoom Out" msgstr "Zoom Out" -#: flatcamGUI/FlatCAMGUI.py:893 flatcamGUI/FlatCAMGUI.py:1724 -#: flatcamGUI/FlatCAMGUI.py:2185 flatcamGUI/FlatCAMGUI.py:2599 +#: flatcamGUI/MainGUI.py:893 flatcamGUI/MainGUI.py:1724 +#: flatcamGUI/MainGUI.py:2185 flatcamGUI/MainGUI.py:2599 msgid "Zoom Fit" msgstr "Zoom Fit" -#: flatcamGUI/FlatCAMGUI.py:901 flatcamGUI/FlatCAMGUI.py:2605 +#: flatcamGUI/MainGUI.py:901 flatcamGUI/MainGUI.py:2605 msgid "&Command Line" msgstr "&Command Line" -#: flatcamGUI/FlatCAMGUI.py:913 flatcamGUI/FlatCAMGUI.py:2617 +#: flatcamGUI/MainGUI.py:913 flatcamGUI/MainGUI.py:2617 msgid "2Sided Tool" msgstr "2Sided Tool" -#: flatcamGUI/FlatCAMGUI.py:915 flatcamGUI/FlatCAMGUI.py:1740 -#: flatcamGUI/FlatCAMGUI.py:2619 +#: flatcamGUI/MainGUI.py:915 flatcamGUI/MainGUI.py:1740 +#: flatcamGUI/MainGUI.py:2619 msgid "Align Objects Tool" msgstr "Align Objects Tool" -#: flatcamGUI/FlatCAMGUI.py:917 flatcamGUI/FlatCAMGUI.py:1741 -#: flatcamGUI/FlatCAMGUI.py:2621 flatcamTools/ToolExtractDrills.py:393 +#: flatcamGUI/MainGUI.py:917 flatcamGUI/MainGUI.py:1741 +#: flatcamGUI/MainGUI.py:2621 flatcamTools/ToolExtractDrills.py:393 msgid "Extract Drills Tool" msgstr "Extract Drills Tool" -#: flatcamGUI/FlatCAMGUI.py:920 flatcamGUI/ObjectUI.py:596 +#: flatcamGUI/MainGUI.py:920 flatcamGUI/ObjectUI.py:596 #: flatcamTools/ToolCutOut.py:440 msgid "Cutout Tool" msgstr "Cutout Tool" -#: flatcamGUI/FlatCAMGUI.py:922 flatcamGUI/FlatCAMGUI.py:2626 +#: flatcamGUI/MainGUI.py:922 flatcamGUI/MainGUI.py:2626 #: flatcamGUI/ObjectUI.py:574 flatcamGUI/ObjectUI.py:2157 #: flatcamTools/ToolNCC.py:974 msgid "NCC Tool" msgstr "NCC Tool" -#: flatcamGUI/FlatCAMGUI.py:928 flatcamGUI/FlatCAMGUI.py:2632 +#: flatcamGUI/MainGUI.py:928 flatcamGUI/MainGUI.py:2632 msgid "Panel Tool" msgstr "Panel Tool" -#: flatcamGUI/FlatCAMGUI.py:930 flatcamGUI/FlatCAMGUI.py:2634 +#: flatcamGUI/MainGUI.py:930 flatcamGUI/MainGUI.py:2634 #: flatcamTools/ToolFilm.py:586 msgid "Film Tool" msgstr "Film Tool" -#: flatcamGUI/FlatCAMGUI.py:932 flatcamGUI/FlatCAMGUI.py:2636 +#: flatcamGUI/MainGUI.py:932 flatcamGUI/MainGUI.py:2636 #: flatcamTools/ToolSolderPaste.py:553 msgid "SolderPaste Tool" msgstr "SolderPaste Tool" -#: flatcamGUI/FlatCAMGUI.py:934 flatcamGUI/FlatCAMGUI.py:2638 +#: flatcamGUI/MainGUI.py:934 flatcamGUI/MainGUI.py:2638 #: flatcamTools/ToolSub.py:35 msgid "Subtract Tool" msgstr "Subtract Tool" -#: flatcamGUI/FlatCAMGUI.py:936 flatcamGUI/FlatCAMGUI.py:2640 +#: flatcamGUI/MainGUI.py:936 flatcamGUI/MainGUI.py:2640 #: flatcamTools/ToolRulesCheck.py:616 msgid "Rules Tool" msgstr "Rules Tool" -#: flatcamGUI/FlatCAMGUI.py:938 flatcamGUI/FlatCAMGUI.py:1743 -#: flatcamGUI/FlatCAMGUI.py:2642 flatcamTools/ToolOptimal.py:33 +#: flatcamGUI/MainGUI.py:938 flatcamGUI/MainGUI.py:1743 +#: flatcamGUI/MainGUI.py:2642 flatcamTools/ToolOptimal.py:33 #: flatcamTools/ToolOptimal.py:307 msgid "Optimal Tool" msgstr "Optimal Tool" -#: flatcamGUI/FlatCAMGUI.py:943 flatcamGUI/FlatCAMGUI.py:1740 -#: flatcamGUI/FlatCAMGUI.py:2647 +#: flatcamGUI/MainGUI.py:943 flatcamGUI/MainGUI.py:1740 +#: flatcamGUI/MainGUI.py:2647 msgid "Calculators Tool" msgstr "Calculators Tool" -#: flatcamGUI/FlatCAMGUI.py:947 flatcamGUI/FlatCAMGUI.py:1744 -#: flatcamGUI/FlatCAMGUI.py:2651 flatcamTools/ToolQRCode.py:43 +#: flatcamGUI/MainGUI.py:947 flatcamGUI/MainGUI.py:1744 +#: flatcamGUI/MainGUI.py:2651 flatcamTools/ToolQRCode.py:43 #: flatcamTools/ToolQRCode.py:382 msgid "QRCode Tool" msgstr "QRCode Tool" -#: flatcamGUI/FlatCAMGUI.py:949 flatcamGUI/FlatCAMGUI.py:2653 +#: flatcamGUI/MainGUI.py:949 flatcamGUI/MainGUI.py:2653 #: flatcamTools/ToolCopperThieving.py:39 flatcamTools/ToolCopperThieving.py:568 msgid "Copper Thieving Tool" msgstr "Copper Thieving Tool" -#: flatcamGUI/FlatCAMGUI.py:952 flatcamGUI/FlatCAMGUI.py:1741 -#: flatcamGUI/FlatCAMGUI.py:2656 flatcamTools/ToolFiducials.py:33 +#: flatcamGUI/MainGUI.py:952 flatcamGUI/MainGUI.py:1741 +#: flatcamGUI/MainGUI.py:2656 flatcamTools/ToolFiducials.py:33 #: flatcamTools/ToolFiducials.py:395 msgid "Fiducials Tool" msgstr "Fiducials Tool" -#: flatcamGUI/FlatCAMGUI.py:954 flatcamGUI/FlatCAMGUI.py:2658 +#: flatcamGUI/MainGUI.py:954 flatcamGUI/MainGUI.py:2658 #: flatcamTools/ToolCalibration.py:37 flatcamTools/ToolCalibration.py:759 msgid "Calibration Tool" msgstr "Calibration Tool" -#: flatcamGUI/FlatCAMGUI.py:956 flatcamGUI/FlatCAMGUI.py:1741 -#: flatcamGUI/FlatCAMGUI.py:2660 +#: flatcamGUI/MainGUI.py:956 flatcamGUI/MainGUI.py:1741 +#: flatcamGUI/MainGUI.py:2660 msgid "Punch Gerber Tool" msgstr "Punch Gerber Tool" -#: flatcamGUI/FlatCAMGUI.py:958 flatcamGUI/FlatCAMGUI.py:2662 +#: flatcamGUI/MainGUI.py:958 flatcamGUI/MainGUI.py:2662 #: flatcamTools/ToolInvertGerber.py:31 msgid "Invert Gerber Tool" msgstr "Invert Gerber Tool" -#: flatcamGUI/FlatCAMGUI.py:964 flatcamGUI/FlatCAMGUI.py:990 -#: flatcamGUI/FlatCAMGUI.py:1042 flatcamGUI/FlatCAMGUI.py:2668 -#: flatcamGUI/FlatCAMGUI.py:2746 +#: flatcamGUI/MainGUI.py:964 flatcamGUI/MainGUI.py:990 +#: flatcamGUI/MainGUI.py:1042 flatcamGUI/MainGUI.py:2668 +#: flatcamGUI/MainGUI.py:2746 msgid "Select" msgstr "Select" -#: flatcamGUI/FlatCAMGUI.py:966 flatcamGUI/FlatCAMGUI.py:2670 +#: flatcamGUI/MainGUI.py:966 flatcamGUI/MainGUI.py:2670 msgid "Add Drill Hole" msgstr "Add Drill Hole" -#: flatcamGUI/FlatCAMGUI.py:968 flatcamGUI/FlatCAMGUI.py:2672 +#: flatcamGUI/MainGUI.py:968 flatcamGUI/MainGUI.py:2672 msgid "Add Drill Hole Array" msgstr "Add Drill Hole Array" -#: flatcamGUI/FlatCAMGUI.py:970 flatcamGUI/FlatCAMGUI.py:2020 -#: flatcamGUI/FlatCAMGUI.py:2273 flatcamGUI/FlatCAMGUI.py:2676 +#: flatcamGUI/MainGUI.py:970 flatcamGUI/MainGUI.py:2020 +#: flatcamGUI/MainGUI.py:2273 flatcamGUI/MainGUI.py:2676 msgid "Add Slot" msgstr "Add Slot" -#: flatcamGUI/FlatCAMGUI.py:972 flatcamGUI/FlatCAMGUI.py:2019 -#: flatcamGUI/FlatCAMGUI.py:2275 flatcamGUI/FlatCAMGUI.py:2678 +#: flatcamGUI/MainGUI.py:972 flatcamGUI/MainGUI.py:2019 +#: flatcamGUI/MainGUI.py:2275 flatcamGUI/MainGUI.py:2678 msgid "Add Slot Array" msgstr "Add Slot Array" -#: flatcamGUI/FlatCAMGUI.py:974 flatcamGUI/FlatCAMGUI.py:2278 -#: flatcamGUI/FlatCAMGUI.py:2674 +#: flatcamGUI/MainGUI.py:974 flatcamGUI/MainGUI.py:2278 +#: flatcamGUI/MainGUI.py:2674 msgid "Resize Drill" msgstr "Resize Drill" -#: flatcamGUI/FlatCAMGUI.py:978 flatcamGUI/FlatCAMGUI.py:2682 +#: flatcamGUI/MainGUI.py:978 flatcamGUI/MainGUI.py:2682 msgid "Copy Drill" msgstr "Copy Drill" -#: flatcamGUI/FlatCAMGUI.py:980 flatcamGUI/FlatCAMGUI.py:2684 +#: flatcamGUI/MainGUI.py:980 flatcamGUI/MainGUI.py:2684 msgid "Delete Drill" msgstr "Delete Drill" -#: flatcamGUI/FlatCAMGUI.py:984 flatcamGUI/FlatCAMGUI.py:2688 +#: flatcamGUI/MainGUI.py:984 flatcamGUI/MainGUI.py:2688 msgid "Move Drill" msgstr "Move Drill" -#: flatcamGUI/FlatCAMGUI.py:992 flatcamGUI/FlatCAMGUI.py:2696 +#: flatcamGUI/MainGUI.py:992 flatcamGUI/MainGUI.py:2696 msgid "Add Circle" msgstr "Add Circle" -#: flatcamGUI/FlatCAMGUI.py:994 flatcamGUI/FlatCAMGUI.py:2698 +#: flatcamGUI/MainGUI.py:994 flatcamGUI/MainGUI.py:2698 msgid "Add Arc" msgstr "Add Arc" -#: flatcamGUI/FlatCAMGUI.py:996 flatcamGUI/FlatCAMGUI.py:2700 +#: flatcamGUI/MainGUI.py:996 flatcamGUI/MainGUI.py:2700 msgid "Add Rectangle" msgstr "Add Rectangle" -#: flatcamGUI/FlatCAMGUI.py:1000 flatcamGUI/FlatCAMGUI.py:2704 +#: flatcamGUI/MainGUI.py:1000 flatcamGUI/MainGUI.py:2704 msgid "Add Path" msgstr "Add Path" -#: flatcamGUI/FlatCAMGUI.py:1002 flatcamGUI/FlatCAMGUI.py:2706 +#: flatcamGUI/MainGUI.py:1002 flatcamGUI/MainGUI.py:2706 msgid "Add Polygon" msgstr "Add Polygon" -#: flatcamGUI/FlatCAMGUI.py:1005 flatcamGUI/FlatCAMGUI.py:2709 +#: flatcamGUI/MainGUI.py:1005 flatcamGUI/MainGUI.py:2709 msgid "Add Text" msgstr "Add Text" -#: flatcamGUI/FlatCAMGUI.py:1007 flatcamGUI/FlatCAMGUI.py:2711 +#: flatcamGUI/MainGUI.py:1007 flatcamGUI/MainGUI.py:2711 msgid "Add Buffer" msgstr "Add Buffer" -#: flatcamGUI/FlatCAMGUI.py:1009 flatcamGUI/FlatCAMGUI.py:2713 +#: flatcamGUI/MainGUI.py:1009 flatcamGUI/MainGUI.py:2713 msgid "Paint Shape" msgstr "Paint Shape" -#: flatcamGUI/FlatCAMGUI.py:1011 flatcamGUI/FlatCAMGUI.py:1068 -#: flatcamGUI/FlatCAMGUI.py:2214 flatcamGUI/FlatCAMGUI.py:2259 -#: flatcamGUI/FlatCAMGUI.py:2715 flatcamGUI/FlatCAMGUI.py:2771 +#: flatcamGUI/MainGUI.py:1011 flatcamGUI/MainGUI.py:1068 +#: flatcamGUI/MainGUI.py:2214 flatcamGUI/MainGUI.py:2259 +#: flatcamGUI/MainGUI.py:2715 flatcamGUI/MainGUI.py:2771 msgid "Eraser" msgstr "Eraser" -#: flatcamGUI/FlatCAMGUI.py:1015 flatcamGUI/FlatCAMGUI.py:2719 +#: flatcamGUI/MainGUI.py:1015 flatcamGUI/MainGUI.py:2719 msgid "Polygon Union" msgstr "Polygon Union" -#: flatcamGUI/FlatCAMGUI.py:1017 flatcamGUI/FlatCAMGUI.py:2721 +#: flatcamGUI/MainGUI.py:1017 flatcamGUI/MainGUI.py:2721 msgid "Polygon Explode" msgstr "Polygon Explode" -#: flatcamGUI/FlatCAMGUI.py:1020 flatcamGUI/FlatCAMGUI.py:2724 +#: flatcamGUI/MainGUI.py:1020 flatcamGUI/MainGUI.py:2724 msgid "Polygon Intersection" msgstr "Polygon Intersection" -#: flatcamGUI/FlatCAMGUI.py:1022 flatcamGUI/FlatCAMGUI.py:2726 +#: flatcamGUI/MainGUI.py:1022 flatcamGUI/MainGUI.py:2726 msgid "Polygon Subtraction" msgstr "Polygon Subtraction" -#: flatcamGUI/FlatCAMGUI.py:1026 flatcamGUI/FlatCAMGUI.py:2730 +#: flatcamGUI/MainGUI.py:1026 flatcamGUI/MainGUI.py:2730 msgid "Cut Path" msgstr "Cut Path" -#: flatcamGUI/FlatCAMGUI.py:1028 +#: flatcamGUI/MainGUI.py:1028 msgid "Copy Shape(s)" msgstr "Copy Shape(s)" -#: flatcamGUI/FlatCAMGUI.py:1031 +#: flatcamGUI/MainGUI.py:1031 msgid "Delete Shape '-'" msgstr "Delete Shape '-'" -#: flatcamGUI/FlatCAMGUI.py:1033 flatcamGUI/FlatCAMGUI.py:1076 -#: flatcamGUI/FlatCAMGUI.py:2226 flatcamGUI/FlatCAMGUI.py:2263 -#: flatcamGUI/FlatCAMGUI.py:2736 flatcamGUI/FlatCAMGUI.py:2779 +#: flatcamGUI/MainGUI.py:1033 flatcamGUI/MainGUI.py:1076 +#: flatcamGUI/MainGUI.py:2226 flatcamGUI/MainGUI.py:2263 +#: flatcamGUI/MainGUI.py:2736 flatcamGUI/MainGUI.py:2779 #: flatcamGUI/ObjectUI.py:109 msgid "Transformations" msgstr "Transformations" -#: flatcamGUI/FlatCAMGUI.py:1036 +#: flatcamGUI/MainGUI.py:1036 msgid "Move Objects " msgstr "Move Objects " -#: flatcamGUI/FlatCAMGUI.py:1044 flatcamGUI/FlatCAMGUI.py:2139 -#: flatcamGUI/FlatCAMGUI.py:2748 +#: flatcamGUI/MainGUI.py:1044 flatcamGUI/MainGUI.py:2139 +#: flatcamGUI/MainGUI.py:2748 msgid "Add Pad" msgstr "Add Pad" -#: flatcamGUI/FlatCAMGUI.py:1048 flatcamGUI/FlatCAMGUI.py:2140 -#: flatcamGUI/FlatCAMGUI.py:2752 +#: flatcamGUI/MainGUI.py:1048 flatcamGUI/MainGUI.py:2140 +#: flatcamGUI/MainGUI.py:2752 msgid "Add Track" msgstr "Add Track" -#: flatcamGUI/FlatCAMGUI.py:1050 flatcamGUI/FlatCAMGUI.py:2139 -#: flatcamGUI/FlatCAMGUI.py:2754 +#: flatcamGUI/MainGUI.py:1050 flatcamGUI/MainGUI.py:2139 +#: flatcamGUI/MainGUI.py:2754 msgid "Add Region" msgstr "Add Region" -#: flatcamGUI/FlatCAMGUI.py:1052 flatcamGUI/FlatCAMGUI.py:2245 -#: flatcamGUI/FlatCAMGUI.py:2756 +#: flatcamGUI/MainGUI.py:1052 flatcamGUI/MainGUI.py:2245 +#: flatcamGUI/MainGUI.py:2756 msgid "Poligonize" msgstr "Poligonize" -#: flatcamGUI/FlatCAMGUI.py:1055 flatcamGUI/FlatCAMGUI.py:2247 -#: flatcamGUI/FlatCAMGUI.py:2759 +#: flatcamGUI/MainGUI.py:1055 flatcamGUI/MainGUI.py:2247 +#: flatcamGUI/MainGUI.py:2759 msgid "SemiDisc" msgstr "SemiDisc" -#: flatcamGUI/FlatCAMGUI.py:1057 flatcamGUI/FlatCAMGUI.py:2249 -#: flatcamGUI/FlatCAMGUI.py:2761 +#: flatcamGUI/MainGUI.py:1057 flatcamGUI/MainGUI.py:2249 +#: flatcamGUI/MainGUI.py:2761 msgid "Disc" msgstr "Disc" -#: flatcamGUI/FlatCAMGUI.py:1065 flatcamGUI/FlatCAMGUI.py:2257 -#: flatcamGUI/FlatCAMGUI.py:2769 +#: flatcamGUI/MainGUI.py:1065 flatcamGUI/MainGUI.py:2257 +#: flatcamGUI/MainGUI.py:2769 msgid "Mark Area" msgstr "Mark Area" -#: flatcamGUI/FlatCAMGUI.py:1079 flatcamGUI/FlatCAMGUI.py:2139 -#: flatcamGUI/FlatCAMGUI.py:2230 flatcamGUI/FlatCAMGUI.py:2293 -#: flatcamGUI/FlatCAMGUI.py:2782 flatcamTools/ToolMove.py:27 +#: flatcamGUI/MainGUI.py:1079 flatcamGUI/MainGUI.py:2139 +#: flatcamGUI/MainGUI.py:2230 flatcamGUI/MainGUI.py:2293 +#: flatcamGUI/MainGUI.py:2782 flatcamTools/ToolMove.py:27 msgid "Move" msgstr "Move" -#: flatcamGUI/FlatCAMGUI.py:1087 flatcamGUI/FlatCAMGUI.py:2791 +#: flatcamGUI/MainGUI.py:1087 flatcamGUI/MainGUI.py:2791 msgid "Snap to grid" msgstr "Snap to grid" -#: flatcamGUI/FlatCAMGUI.py:1090 flatcamGUI/FlatCAMGUI.py:2794 +#: flatcamGUI/MainGUI.py:1090 flatcamGUI/MainGUI.py:2794 msgid "Grid X snapping distance" msgstr "Grid X snapping distance" -#: flatcamGUI/FlatCAMGUI.py:1095 flatcamGUI/FlatCAMGUI.py:2799 +#: flatcamGUI/MainGUI.py:1095 flatcamGUI/MainGUI.py:2799 msgid "Grid Y snapping distance" msgstr "Grid Y snapping distance" -#: flatcamGUI/FlatCAMGUI.py:1101 flatcamGUI/FlatCAMGUI.py:2805 +#: flatcamGUI/MainGUI.py:1101 flatcamGUI/MainGUI.py:2805 msgid "" "When active, value on Grid_X\n" "is copied to the Grid_Y value." @@ -6232,65 +6232,65 @@ msgstr "" "When active, value on Grid_X\n" "is copied to the Grid_Y value." -#: flatcamGUI/FlatCAMGUI.py:1108 flatcamGUI/FlatCAMGUI.py:2812 +#: flatcamGUI/MainGUI.py:1108 flatcamGUI/MainGUI.py:2812 msgid "Snap to corner" msgstr "Snap to corner" -#: flatcamGUI/FlatCAMGUI.py:1112 flatcamGUI/FlatCAMGUI.py:2816 +#: flatcamGUI/MainGUI.py:1112 flatcamGUI/MainGUI.py:2816 #: flatcamGUI/preferences/general/GeneralAPPSetGroupUI.py:78 msgid "Max. magnet distance" msgstr "Max. magnet distance" -#: flatcamGUI/FlatCAMGUI.py:1149 +#: flatcamGUI/MainGUI.py:1149 msgid "Selected" msgstr "Selected" -#: flatcamGUI/FlatCAMGUI.py:1177 flatcamGUI/FlatCAMGUI.py:1185 +#: flatcamGUI/MainGUI.py:1177 flatcamGUI/MainGUI.py:1185 msgid "Plot Area" msgstr "Plot Area" -#: flatcamGUI/FlatCAMGUI.py:1212 +#: flatcamGUI/MainGUI.py:1212 msgid "General" msgstr "General" -#: flatcamGUI/FlatCAMGUI.py:1227 flatcamTools/ToolCopperThieving.py:74 +#: flatcamGUI/MainGUI.py:1227 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:1237 flatcamTools/ToolDblSided.py:92 +#: flatcamGUI/MainGUI.py:1237 flatcamTools/ToolDblSided.py:92 msgid "EXCELLON" msgstr "EXCELLON" -#: flatcamGUI/FlatCAMGUI.py:1247 flatcamTools/ToolDblSided.py:120 +#: flatcamGUI/MainGUI.py:1247 flatcamTools/ToolDblSided.py:120 msgid "GEOMETRY" msgstr "GEOMETRY" -#: flatcamGUI/FlatCAMGUI.py:1257 +#: flatcamGUI/MainGUI.py:1257 msgid "CNC-JOB" msgstr "CNC-JOB" -#: flatcamGUI/FlatCAMGUI.py:1266 flatcamGUI/ObjectUI.py:563 +#: flatcamGUI/MainGUI.py:1266 flatcamGUI/ObjectUI.py:563 #: flatcamGUI/ObjectUI.py:2132 msgid "TOOLS" msgstr "TOOLS" -#: flatcamGUI/FlatCAMGUI.py:1275 +#: flatcamGUI/MainGUI.py:1275 msgid "TOOLS 2" msgstr "TOOLS 2" -#: flatcamGUI/FlatCAMGUI.py:1285 +#: flatcamGUI/MainGUI.py:1285 msgid "UTILITIES" msgstr "UTILITIES" -#: flatcamGUI/FlatCAMGUI.py:1302 +#: flatcamGUI/MainGUI.py:1302 #: flatcamGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:192 msgid "Restore Defaults" msgstr "Restore Defaults" -#: flatcamGUI/FlatCAMGUI.py:1305 +#: flatcamGUI/MainGUI.py:1305 msgid "" "Restore the entire set of default values\n" "to the initial values loaded after first launch." @@ -6298,19 +6298,19 @@ msgstr "" "Restore the entire set of default values\n" "to the initial values loaded after first launch." -#: flatcamGUI/FlatCAMGUI.py:1310 +#: flatcamGUI/MainGUI.py:1310 msgid "Open Pref Folder" msgstr "Open Pref Folder" -#: flatcamGUI/FlatCAMGUI.py:1313 +#: flatcamGUI/MainGUI.py:1313 msgid "Open the folder where FlatCAM save the preferences files." msgstr "Open the folder where FlatCAM save the preferences files." -#: flatcamGUI/FlatCAMGUI.py:1317 flatcamGUI/FlatCAMGUI.py:2517 +#: flatcamGUI/MainGUI.py:1317 flatcamGUI/MainGUI.py:2517 msgid "Clear GUI Settings" msgstr "Clear GUI Settings" -#: flatcamGUI/FlatCAMGUI.py:1321 +#: flatcamGUI/MainGUI.py:1321 msgid "" "Clear the GUI settings for FlatCAM,\n" "such as: layout, gui state, style, hdpi support etc." @@ -6318,15 +6318,15 @@ msgstr "" "Clear the GUI settings for FlatCAM,\n" "such as: layout, gui state, style, hdpi support etc." -#: flatcamGUI/FlatCAMGUI.py:1332 +#: flatcamGUI/MainGUI.py:1332 msgid "Apply" msgstr "Apply" -#: flatcamGUI/FlatCAMGUI.py:1335 +#: flatcamGUI/MainGUI.py:1335 msgid "Apply the current preferences without saving to a file." msgstr "Apply the current preferences without saving to a file." -#: flatcamGUI/FlatCAMGUI.py:1342 +#: flatcamGUI/MainGUI.py:1342 msgid "" "Save the current settings in the 'current_defaults' file\n" "which is the file storing the working default preferences." @@ -6334,214 +6334,214 @@ msgstr "" "Save the current settings in the 'current_defaults' file\n" "which is the file storing the working default preferences." -#: flatcamGUI/FlatCAMGUI.py:1350 +#: flatcamGUI/MainGUI.py:1350 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:1719 +#: flatcamGUI/MainGUI.py:1719 msgid "SHOW SHORTCUT LIST" msgstr "SHOW SHORTCUT LIST" -#: flatcamGUI/FlatCAMGUI.py:1719 +#: flatcamGUI/MainGUI.py:1719 msgid "Switch to Project Tab" msgstr "Switch to Project Tab" -#: flatcamGUI/FlatCAMGUI.py:1719 +#: flatcamGUI/MainGUI.py:1719 msgid "Switch to Selected Tab" msgstr "Switch to Selected Tab" -#: flatcamGUI/FlatCAMGUI.py:1720 +#: flatcamGUI/MainGUI.py:1720 msgid "Switch to Tool Tab" msgstr "Switch to Tool Tab" -#: flatcamGUI/FlatCAMGUI.py:1721 +#: flatcamGUI/MainGUI.py:1721 msgid "New Gerber" msgstr "New Gerber" -#: flatcamGUI/FlatCAMGUI.py:1721 +#: flatcamGUI/MainGUI.py:1721 msgid "Edit Object (if selected)" msgstr "Edit Object (if selected)" -#: flatcamGUI/FlatCAMGUI.py:1721 +#: flatcamGUI/MainGUI.py:1721 msgid "Jump to Coordinates" msgstr "Jump to Coordinates" -#: flatcamGUI/FlatCAMGUI.py:1722 +#: flatcamGUI/MainGUI.py:1722 msgid "New Excellon" msgstr "New Excellon" -#: flatcamGUI/FlatCAMGUI.py:1722 +#: flatcamGUI/MainGUI.py:1722 msgid "Move Obj" msgstr "Move Obj" -#: flatcamGUI/FlatCAMGUI.py:1722 +#: flatcamGUI/MainGUI.py:1722 msgid "New Geometry" msgstr "New Geometry" -#: flatcamGUI/FlatCAMGUI.py:1722 +#: flatcamGUI/MainGUI.py:1722 msgid "Change Units" msgstr "Change Units" -#: flatcamGUI/FlatCAMGUI.py:1723 +#: flatcamGUI/MainGUI.py:1723 msgid "Open Properties Tool" msgstr "Open Properties Tool" -#: flatcamGUI/FlatCAMGUI.py:1723 +#: flatcamGUI/MainGUI.py:1723 msgid "Rotate by 90 degree CW" msgstr "Rotate by 90 degree CW" -#: flatcamGUI/FlatCAMGUI.py:1723 +#: flatcamGUI/MainGUI.py:1723 msgid "Shell Toggle" msgstr "Shell Toggle" -#: flatcamGUI/FlatCAMGUI.py:1724 +#: flatcamGUI/MainGUI.py:1724 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:1725 +#: flatcamGUI/MainGUI.py:1725 msgid "Flip on X_axis" msgstr "Flip on X_axis" -#: flatcamGUI/FlatCAMGUI.py:1725 +#: flatcamGUI/MainGUI.py:1725 msgid "Flip on Y_axis" msgstr "Flip on Y_axis" -#: flatcamGUI/FlatCAMGUI.py:1728 +#: flatcamGUI/MainGUI.py:1728 msgid "Copy Obj" msgstr "Copy Obj" -#: flatcamGUI/FlatCAMGUI.py:1728 +#: flatcamGUI/MainGUI.py:1728 msgid "Open Tools Database" msgstr "Open Tools Database" -#: flatcamGUI/FlatCAMGUI.py:1729 +#: flatcamGUI/MainGUI.py:1729 msgid "Open Excellon File" msgstr "Open Excellon File" -#: flatcamGUI/FlatCAMGUI.py:1729 +#: flatcamGUI/MainGUI.py:1729 msgid "Open Gerber File" msgstr "Open Gerber File" -#: flatcamGUI/FlatCAMGUI.py:1729 +#: flatcamGUI/MainGUI.py:1729 msgid "New Project" msgstr "New Project" -#: flatcamGUI/FlatCAMGUI.py:1730 flatcamTools/ToolPDF.py:42 +#: flatcamGUI/MainGUI.py:1730 flatcamTools/ToolPDF.py:42 msgid "PDF Import Tool" msgstr "PDF Import Tool" -#: flatcamGUI/FlatCAMGUI.py:1730 +#: flatcamGUI/MainGUI.py:1730 msgid "Save Project" msgstr "Save Project" -#: flatcamGUI/FlatCAMGUI.py:1730 +#: flatcamGUI/MainGUI.py:1730 msgid "Toggle Plot Area" msgstr "Toggle Plot Area" -#: flatcamGUI/FlatCAMGUI.py:1733 +#: flatcamGUI/MainGUI.py:1733 msgid "Copy Obj_Name" msgstr "Copy Obj_Name" -#: flatcamGUI/FlatCAMGUI.py:1734 +#: flatcamGUI/MainGUI.py:1734 msgid "Toggle Code Editor" msgstr "Toggle Code Editor" -#: flatcamGUI/FlatCAMGUI.py:1734 +#: flatcamGUI/MainGUI.py:1734 msgid "Toggle the axis" msgstr "Toggle the axis" -#: flatcamGUI/FlatCAMGUI.py:1734 flatcamGUI/FlatCAMGUI.py:1933 -#: flatcamGUI/FlatCAMGUI.py:2020 flatcamGUI/FlatCAMGUI.py:2142 +#: flatcamGUI/MainGUI.py:1734 flatcamGUI/MainGUI.py:1933 +#: flatcamGUI/MainGUI.py:2020 flatcamGUI/MainGUI.py:2142 msgid "Distance Minimum Tool" msgstr "Distance Minimum Tool" -#: flatcamGUI/FlatCAMGUI.py:1735 +#: flatcamGUI/MainGUI.py:1735 msgid "Open Preferences Window" msgstr "Open Preferences Window" -#: flatcamGUI/FlatCAMGUI.py:1736 +#: flatcamGUI/MainGUI.py:1736 msgid "Rotate by 90 degree CCW" msgstr "Rotate by 90 degree CCW" -#: flatcamGUI/FlatCAMGUI.py:1736 +#: flatcamGUI/MainGUI.py:1736 msgid "Run a Script" msgstr "Run a Script" -#: flatcamGUI/FlatCAMGUI.py:1736 +#: flatcamGUI/MainGUI.py:1736 msgid "Toggle the workspace" msgstr "Toggle the workspace" -#: flatcamGUI/FlatCAMGUI.py:1736 +#: flatcamGUI/MainGUI.py:1736 msgid "Skew on X axis" msgstr "Skew on X axis" -#: flatcamGUI/FlatCAMGUI.py:1737 +#: flatcamGUI/MainGUI.py:1737 msgid "Skew on Y axis" msgstr "Skew on Y axis" -#: flatcamGUI/FlatCAMGUI.py:1740 +#: flatcamGUI/MainGUI.py:1740 msgid "2-Sided PCB Tool" msgstr "2-Sided PCB Tool" -#: flatcamGUI/FlatCAMGUI.py:1740 +#: flatcamGUI/MainGUI.py:1740 msgid "Transformations Tool" msgstr "Transformations Tool" -#: flatcamGUI/FlatCAMGUI.py:1742 +#: flatcamGUI/MainGUI.py:1742 msgid "Solder Paste Dispensing Tool" msgstr "Solder Paste Dispensing Tool" -#: flatcamGUI/FlatCAMGUI.py:1743 +#: flatcamGUI/MainGUI.py:1743 msgid "Film PCB Tool" msgstr "Film PCB Tool" -#: flatcamGUI/FlatCAMGUI.py:1743 +#: flatcamGUI/MainGUI.py:1743 msgid "Non-Copper Clearing Tool" msgstr "Non-Copper Clearing Tool" -#: flatcamGUI/FlatCAMGUI.py:1744 +#: flatcamGUI/MainGUI.py:1744 msgid "Paint Area Tool" msgstr "Paint Area Tool" -#: flatcamGUI/FlatCAMGUI.py:1744 +#: flatcamGUI/MainGUI.py:1744 msgid "Rules Check Tool" msgstr "Rules Check Tool" -#: flatcamGUI/FlatCAMGUI.py:1745 +#: flatcamGUI/MainGUI.py:1745 msgid "View File Source" msgstr "View File Source" -#: flatcamGUI/FlatCAMGUI.py:1746 +#: flatcamGUI/MainGUI.py:1746 msgid "Cutout PCB Tool" msgstr "Cutout PCB Tool" -#: flatcamGUI/FlatCAMGUI.py:1746 +#: flatcamGUI/MainGUI.py:1746 msgid "Enable all Plots" msgstr "Enable all Plots" -#: flatcamGUI/FlatCAMGUI.py:1746 +#: flatcamGUI/MainGUI.py:1746 msgid "Disable all Plots" msgstr "Disable all Plots" -#: flatcamGUI/FlatCAMGUI.py:1746 +#: flatcamGUI/MainGUI.py:1746 msgid "Disable Non-selected Plots" msgstr "Disable Non-selected Plots" -#: flatcamGUI/FlatCAMGUI.py:1747 +#: flatcamGUI/MainGUI.py:1747 msgid "Toggle Full Screen" msgstr "Toggle Full Screen" -#: flatcamGUI/FlatCAMGUI.py:1750 +#: flatcamGUI/MainGUI.py:1750 msgid "Abort current task (gracefully)" msgstr "Abort current task (gracefully)" -#: flatcamGUI/FlatCAMGUI.py:1753 +#: flatcamGUI/MainGUI.py:1753 msgid "Save Project As" msgstr "Save Project As" -#: flatcamGUI/FlatCAMGUI.py:1754 +#: flatcamGUI/MainGUI.py:1754 msgid "" "Paste Special. Will convert a Windows path style to the one required in Tcl " "Shell" @@ -6549,243 +6549,243 @@ msgstr "" "Paste Special. Will convert a Windows path style to the one required in Tcl " "Shell" -#: flatcamGUI/FlatCAMGUI.py:1757 +#: flatcamGUI/MainGUI.py:1757 msgid "Open Online Manual" msgstr "Open Online Manual" -#: flatcamGUI/FlatCAMGUI.py:1758 +#: flatcamGUI/MainGUI.py:1758 msgid "Open Online Tutorials" msgstr "Open Online Tutorials" -#: flatcamGUI/FlatCAMGUI.py:1758 +#: flatcamGUI/MainGUI.py:1758 msgid "Refresh Plots" msgstr "Refresh Plots" -#: flatcamGUI/FlatCAMGUI.py:1758 flatcamTools/ToolSolderPaste.py:509 +#: flatcamGUI/MainGUI.py:1758 flatcamTools/ToolSolderPaste.py:509 msgid "Delete Object" msgstr "Delete Object" -#: flatcamGUI/FlatCAMGUI.py:1758 +#: flatcamGUI/MainGUI.py:1758 msgid "Alternate: Delete Tool" msgstr "Alternate: Delete Tool" -#: flatcamGUI/FlatCAMGUI.py:1759 +#: flatcamGUI/MainGUI.py:1759 msgid "(left to Key_1)Toggle Notebook Area (Left Side)" msgstr "(left to Key_1)Toggle Notebook Area (Left Side)" -#: flatcamGUI/FlatCAMGUI.py:1759 +#: flatcamGUI/MainGUI.py:1759 msgid "En(Dis)able Obj Plot" msgstr "En(Dis)able Obj Plot" -#: flatcamGUI/FlatCAMGUI.py:1760 +#: flatcamGUI/MainGUI.py:1760 msgid "Deselects all objects" msgstr "Deselects all objects" -#: flatcamGUI/FlatCAMGUI.py:1774 +#: flatcamGUI/MainGUI.py:1774 msgid "Editor Shortcut list" msgstr "Editor Shortcut list" -#: flatcamGUI/FlatCAMGUI.py:1928 +#: flatcamGUI/MainGUI.py:1928 msgid "GEOMETRY EDITOR" msgstr "GEOMETRY EDITOR" -#: flatcamGUI/FlatCAMGUI.py:1928 +#: flatcamGUI/MainGUI.py:1928 msgid "Draw an Arc" msgstr "Draw an Arc" -#: flatcamGUI/FlatCAMGUI.py:1928 +#: flatcamGUI/MainGUI.py:1928 msgid "Copy Geo Item" msgstr "Copy Geo Item" -#: flatcamGUI/FlatCAMGUI.py:1929 +#: flatcamGUI/MainGUI.py:1929 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:1929 +#: flatcamGUI/MainGUI.py:1929 msgid "Polygon Intersection Tool" msgstr "Polygon Intersection Tool" -#: flatcamGUI/FlatCAMGUI.py:1930 +#: flatcamGUI/MainGUI.py:1930 msgid "Geo Paint Tool" msgstr "Geo Paint Tool" -#: flatcamGUI/FlatCAMGUI.py:1930 flatcamGUI/FlatCAMGUI.py:2019 -#: flatcamGUI/FlatCAMGUI.py:2139 +#: flatcamGUI/MainGUI.py:1930 flatcamGUI/MainGUI.py:2019 +#: flatcamGUI/MainGUI.py:2139 msgid "Jump to Location (x, y)" msgstr "Jump to Location (x, y)" -#: flatcamGUI/FlatCAMGUI.py:1930 +#: flatcamGUI/MainGUI.py:1930 msgid "Toggle Corner Snap" msgstr "Toggle Corner Snap" -#: flatcamGUI/FlatCAMGUI.py:1930 +#: flatcamGUI/MainGUI.py:1930 msgid "Move Geo Item" msgstr "Move Geo Item" -#: flatcamGUI/FlatCAMGUI.py:1931 +#: flatcamGUI/MainGUI.py:1931 msgid "Within Add Arc will cycle through the ARC modes" msgstr "Within Add Arc will cycle through the ARC modes" -#: flatcamGUI/FlatCAMGUI.py:1931 +#: flatcamGUI/MainGUI.py:1931 msgid "Draw a Polygon" msgstr "Draw a Polygon" -#: flatcamGUI/FlatCAMGUI.py:1931 +#: flatcamGUI/MainGUI.py:1931 msgid "Draw a Circle" msgstr "Draw a Circle" -#: flatcamGUI/FlatCAMGUI.py:1932 +#: flatcamGUI/MainGUI.py:1932 msgid "Draw a Path" msgstr "Draw a Path" -#: flatcamGUI/FlatCAMGUI.py:1932 +#: flatcamGUI/MainGUI.py:1932 msgid "Draw Rectangle" msgstr "Draw Rectangle" -#: flatcamGUI/FlatCAMGUI.py:1932 +#: flatcamGUI/MainGUI.py:1932 msgid "Polygon Subtraction Tool" msgstr "Polygon Subtraction Tool" -#: flatcamGUI/FlatCAMGUI.py:1932 +#: flatcamGUI/MainGUI.py:1932 msgid "Add Text Tool" msgstr "Add Text Tool" -#: flatcamGUI/FlatCAMGUI.py:1933 +#: flatcamGUI/MainGUI.py:1933 msgid "Polygon Union Tool" msgstr "Polygon Union Tool" -#: flatcamGUI/FlatCAMGUI.py:1933 +#: flatcamGUI/MainGUI.py:1933 msgid "Flip shape on X axis" msgstr "Flip shape on X axis" -#: flatcamGUI/FlatCAMGUI.py:1933 +#: flatcamGUI/MainGUI.py:1933 msgid "Flip shape on Y axis" msgstr "Flip shape on Y axis" -#: flatcamGUI/FlatCAMGUI.py:1934 +#: flatcamGUI/MainGUI.py:1934 msgid "Skew shape on X axis" msgstr "Skew shape on X axis" -#: flatcamGUI/FlatCAMGUI.py:1934 +#: flatcamGUI/MainGUI.py:1934 msgid "Skew shape on Y axis" msgstr "Skew shape on Y axis" -#: flatcamGUI/FlatCAMGUI.py:1934 +#: flatcamGUI/MainGUI.py:1934 msgid "Editor Transformation Tool" msgstr "Editor Transformation Tool" -#: flatcamGUI/FlatCAMGUI.py:1935 +#: flatcamGUI/MainGUI.py:1935 msgid "Offset shape on X axis" msgstr "Offset shape on X axis" -#: flatcamGUI/FlatCAMGUI.py:1935 +#: flatcamGUI/MainGUI.py:1935 msgid "Offset shape on Y axis" msgstr "Offset shape on Y axis" -#: flatcamGUI/FlatCAMGUI.py:1936 flatcamGUI/FlatCAMGUI.py:2022 -#: flatcamGUI/FlatCAMGUI.py:2144 +#: flatcamGUI/MainGUI.py:1936 flatcamGUI/MainGUI.py:2022 +#: flatcamGUI/MainGUI.py:2144 msgid "Save Object and Exit Editor" msgstr "Save Object and Exit Editor" -#: flatcamGUI/FlatCAMGUI.py:1936 +#: flatcamGUI/MainGUI.py:1936 msgid "Polygon Cut Tool" msgstr "Polygon Cut Tool" -#: flatcamGUI/FlatCAMGUI.py:1937 +#: flatcamGUI/MainGUI.py:1937 msgid "Rotate Geometry" msgstr "Rotate Geometry" -#: flatcamGUI/FlatCAMGUI.py:1937 +#: flatcamGUI/MainGUI.py:1937 msgid "Finish drawing for certain tools" msgstr "Finish drawing for certain tools" -#: flatcamGUI/FlatCAMGUI.py:1937 flatcamGUI/FlatCAMGUI.py:2022 -#: flatcamGUI/FlatCAMGUI.py:2142 +#: flatcamGUI/MainGUI.py:1937 flatcamGUI/MainGUI.py:2022 +#: flatcamGUI/MainGUI.py:2142 msgid "Abort and return to Select" msgstr "Abort and return to Select" -#: flatcamGUI/FlatCAMGUI.py:1938 flatcamGUI/FlatCAMGUI.py:2734 +#: flatcamGUI/MainGUI.py:1938 flatcamGUI/MainGUI.py:2734 msgid "Delete Shape" msgstr "Delete Shape" -#: flatcamGUI/FlatCAMGUI.py:2018 +#: flatcamGUI/MainGUI.py:2018 msgid "EXCELLON EDITOR" msgstr "EXCELLON EDITOR" -#: flatcamGUI/FlatCAMGUI.py:2018 +#: flatcamGUI/MainGUI.py:2018 msgid "Copy Drill(s)" msgstr "Copy Drill(s)" -#: flatcamGUI/FlatCAMGUI.py:2018 flatcamGUI/FlatCAMGUI.py:2268 +#: flatcamGUI/MainGUI.py:2018 flatcamGUI/MainGUI.py:2268 msgid "Add Drill" msgstr "Add Drill" -#: flatcamGUI/FlatCAMGUI.py:2019 +#: flatcamGUI/MainGUI.py:2019 msgid "Move Drill(s)" msgstr "Move Drill(s)" -#: flatcamGUI/FlatCAMGUI.py:2020 +#: flatcamGUI/MainGUI.py:2020 msgid "Add a new Tool" msgstr "Add a new Tool" -#: flatcamGUI/FlatCAMGUI.py:2021 +#: flatcamGUI/MainGUI.py:2021 msgid "Delete Drill(s)" msgstr "Delete Drill(s)" -#: flatcamGUI/FlatCAMGUI.py:2021 +#: flatcamGUI/MainGUI.py:2021 msgid "Alternate: Delete Tool(s)" msgstr "Alternate: Delete Tool(s)" -#: flatcamGUI/FlatCAMGUI.py:2138 +#: flatcamGUI/MainGUI.py:2138 msgid "GERBER EDITOR" msgstr "GERBER EDITOR" -#: flatcamGUI/FlatCAMGUI.py:2138 +#: flatcamGUI/MainGUI.py:2138 msgid "Add Disc" msgstr "Add Disc" -#: flatcamGUI/FlatCAMGUI.py:2138 +#: flatcamGUI/MainGUI.py:2138 msgid "Add SemiDisc" msgstr "Add SemiDisc" -#: flatcamGUI/FlatCAMGUI.py:2140 +#: flatcamGUI/MainGUI.py:2140 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:2141 +#: flatcamGUI/MainGUI.py:2141 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:2142 +#: flatcamGUI/MainGUI.py:2142 msgid "Alternate: Delete Apertures" msgstr "Alternate: Delete Apertures" -#: flatcamGUI/FlatCAMGUI.py:2143 +#: flatcamGUI/MainGUI.py:2143 msgid "Eraser Tool" msgstr "Eraser Tool" -#: flatcamGUI/FlatCAMGUI.py:2144 +#: flatcamGUI/MainGUI.py:2144 #: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:220 msgid "Mark Area Tool" msgstr "Mark Area Tool" -#: flatcamGUI/FlatCAMGUI.py:2144 +#: flatcamGUI/MainGUI.py:2144 msgid "Poligonize Tool" msgstr "Poligonize Tool" -#: flatcamGUI/FlatCAMGUI.py:2144 +#: flatcamGUI/MainGUI.py:2144 msgid "Transformation Tool" msgstr "Transformation Tool" -#: flatcamGUI/FlatCAMGUI.py:2161 +#: flatcamGUI/MainGUI.py:2161 msgid "Toggle Visibility" msgstr "Toggle Visibility" -#: flatcamGUI/FlatCAMGUI.py:2167 +#: flatcamGUI/MainGUI.py:2167 msgid "New" msgstr "New" -#: flatcamGUI/FlatCAMGUI.py:2169 flatcamGUI/ObjectUI.py:450 +#: flatcamGUI/MainGUI.py:2169 flatcamGUI/ObjectUI.py:450 #: flatcamObjects/FlatCAMGerber.py:239 flatcamObjects/FlatCAMGerber.py:327 #: flatcamTools/ToolCalibration.py:631 flatcamTools/ToolCalibration.py:648 #: flatcamTools/ToolCalibration.py:815 flatcamTools/ToolCopperThieving.py:144 @@ -6802,7 +6802,7 @@ msgstr "New" msgid "Geometry" msgstr "Geometry" -#: flatcamGUI/FlatCAMGUI.py:2173 +#: flatcamGUI/MainGUI.py:2173 #: flatcamGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:99 #: flatcamTools/ToolAlignObjects.py:74 flatcamTools/ToolAlignObjects.py:110 #: flatcamTools/ToolCalibration.py:197 flatcamTools/ToolCalibration.py:631 @@ -6817,76 +6817,76 @@ msgstr "Geometry" msgid "Excellon" msgstr "Excellon" -#: flatcamGUI/FlatCAMGUI.py:2180 +#: flatcamGUI/MainGUI.py:2180 msgid "Grids" msgstr "Grids" -#: flatcamGUI/FlatCAMGUI.py:2187 +#: flatcamGUI/MainGUI.py:2187 msgid "Clear Plot" msgstr "Clear Plot" -#: flatcamGUI/FlatCAMGUI.py:2189 +#: flatcamGUI/MainGUI.py:2189 msgid "Replot" msgstr "Replot" -#: flatcamGUI/FlatCAMGUI.py:2193 +#: flatcamGUI/MainGUI.py:2193 msgid "Geo Editor" msgstr "Geo Editor" -#: flatcamGUI/FlatCAMGUI.py:2195 +#: flatcamGUI/MainGUI.py:2195 msgid "Path" msgstr "Path" -#: flatcamGUI/FlatCAMGUI.py:2197 +#: flatcamGUI/MainGUI.py:2197 msgid "Rectangle" msgstr "Rectangle" -#: flatcamGUI/FlatCAMGUI.py:2200 +#: flatcamGUI/MainGUI.py:2200 msgid "Circle" msgstr "Circle" -#: flatcamGUI/FlatCAMGUI.py:2204 +#: flatcamGUI/MainGUI.py:2204 msgid "Arc" msgstr "Arc" -#: flatcamGUI/FlatCAMGUI.py:2218 +#: flatcamGUI/MainGUI.py:2218 msgid "Union" msgstr "Union" -#: flatcamGUI/FlatCAMGUI.py:2220 +#: flatcamGUI/MainGUI.py:2220 msgid "Intersection" msgstr "Intersection" -#: flatcamGUI/FlatCAMGUI.py:2222 +#: flatcamGUI/MainGUI.py:2222 msgid "Subtraction" msgstr "Subtraction" -#: flatcamGUI/FlatCAMGUI.py:2224 flatcamGUI/ObjectUI.py:2221 +#: flatcamGUI/MainGUI.py:2224 flatcamGUI/ObjectUI.py:2221 #: flatcamGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:56 msgid "Cut" msgstr "Cut" -#: flatcamGUI/FlatCAMGUI.py:2235 +#: flatcamGUI/MainGUI.py:2235 msgid "Pad" msgstr "Pad" -#: flatcamGUI/FlatCAMGUI.py:2237 +#: flatcamGUI/MainGUI.py:2237 msgid "Pad Array" msgstr "Pad Array" -#: flatcamGUI/FlatCAMGUI.py:2241 +#: flatcamGUI/MainGUI.py:2241 msgid "Track" msgstr "Track" -#: flatcamGUI/FlatCAMGUI.py:2243 +#: flatcamGUI/MainGUI.py:2243 msgid "Region" msgstr "Region" -#: flatcamGUI/FlatCAMGUI.py:2266 +#: flatcamGUI/MainGUI.py:2266 msgid "Exc Editor" msgstr "Exc Editor" -#: flatcamGUI/FlatCAMGUI.py:2311 +#: flatcamGUI/MainGUI.py:2311 msgid "" "Relative measurement.\n" "Reference is last click position" @@ -6894,7 +6894,7 @@ msgstr "" "Relative measurement.\n" "Reference is last click position" -#: flatcamGUI/FlatCAMGUI.py:2317 +#: flatcamGUI/MainGUI.py:2317 msgid "" "Absolute measurement.\n" "Reference is (X=0, Y= 0) position" @@ -6902,35 +6902,35 @@ msgstr "" "Absolute measurement.\n" "Reference is (X=0, Y= 0) position" -#: flatcamGUI/FlatCAMGUI.py:2419 +#: flatcamGUI/MainGUI.py:2419 msgid "Lock Toolbars" msgstr "Lock Toolbars" -#: flatcamGUI/FlatCAMGUI.py:2505 +#: flatcamGUI/MainGUI.py:2505 msgid "FlatCAM Preferences Folder opened." msgstr "FlatCAM Preferences Folder opened." -#: flatcamGUI/FlatCAMGUI.py:2516 +#: flatcamGUI/MainGUI.py:2516 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:2624 +#: flatcamGUI/MainGUI.py:2624 msgid "&Cutout Tool" msgstr "&Cutout Tool" -#: flatcamGUI/FlatCAMGUI.py:2694 +#: flatcamGUI/MainGUI.py:2694 msgid "Select 'Esc'" msgstr "Select 'Esc'" -#: flatcamGUI/FlatCAMGUI.py:2732 +#: flatcamGUI/MainGUI.py:2732 msgid "Copy Objects" msgstr "Copy Objects" -#: flatcamGUI/FlatCAMGUI.py:2740 +#: flatcamGUI/MainGUI.py:2740 msgid "Move Objects" msgstr "Move Objects" -#: flatcamGUI/FlatCAMGUI.py:3363 +#: flatcamGUI/MainGUI.py:3363 msgid "" "Please first select a geometry item to be cutted\n" "then select the geometry item that will be cutted\n" @@ -6942,12 +6942,12 @@ msgstr "" "out of the first item. In the end press ~X~ key or\n" "the toolbar button." -#: flatcamGUI/FlatCAMGUI.py:3370 flatcamGUI/FlatCAMGUI.py:3532 -#: flatcamGUI/FlatCAMGUI.py:3577 flatcamGUI/FlatCAMGUI.py:3597 +#: flatcamGUI/MainGUI.py:3370 flatcamGUI/MainGUI.py:3532 +#: flatcamGUI/MainGUI.py:3577 flatcamGUI/MainGUI.py:3597 msgid "Warning" msgstr "Warning" -#: flatcamGUI/FlatCAMGUI.py:3527 +#: flatcamGUI/MainGUI.py:3527 msgid "" "Please select geometry items \n" "on which to perform Intersection Tool." @@ -6955,7 +6955,7 @@ msgstr "" "Please select geometry items \n" "on which to perform Intersection Tool." -#: flatcamGUI/FlatCAMGUI.py:3572 +#: flatcamGUI/MainGUI.py:3572 msgid "" "Please select geometry items \n" "on which to perform Substraction Tool." @@ -6963,7 +6963,7 @@ msgstr "" "Please select geometry items \n" "on which to perform Substraction Tool." -#: flatcamGUI/FlatCAMGUI.py:3592 +#: flatcamGUI/MainGUI.py:3592 msgid "" "Please select geometry items \n" "on which to perform union." @@ -6971,52 +6971,52 @@ msgstr "" "Please select geometry items \n" "on which to perform union." -#: flatcamGUI/FlatCAMGUI.py:3675 flatcamGUI/FlatCAMGUI.py:3890 +#: flatcamGUI/MainGUI.py:3675 flatcamGUI/MainGUI.py:3890 msgid "Cancelled. Nothing selected to delete." msgstr "Cancelled. Nothing selected to delete." -#: flatcamGUI/FlatCAMGUI.py:3759 flatcamGUI/FlatCAMGUI.py:4006 +#: flatcamGUI/MainGUI.py:3759 flatcamGUI/MainGUI.py:4006 msgid "Cancelled. Nothing selected to copy." msgstr "Cancelled. Nothing selected to copy." -#: flatcamGUI/FlatCAMGUI.py:3805 flatcamGUI/FlatCAMGUI.py:4035 +#: flatcamGUI/MainGUI.py:3805 flatcamGUI/MainGUI.py:4035 msgid "Cancelled. Nothing selected to move." msgstr "Cancelled. Nothing selected to move." -#: flatcamGUI/FlatCAMGUI.py:4061 +#: flatcamGUI/MainGUI.py:4061 msgid "New Tool ..." msgstr "New Tool ..." -#: flatcamGUI/FlatCAMGUI.py:4062 flatcamTools/ToolNCC.py:924 +#: flatcamGUI/MainGUI.py:4062 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:4074 +#: flatcamGUI/MainGUI.py:4074 msgid "Adding Tool cancelled ..." msgstr "Adding Tool cancelled ..." -#: flatcamGUI/FlatCAMGUI.py:4088 +#: flatcamGUI/MainGUI.py:4088 msgid "Distance Tool exit..." msgstr "Distance Tool exit..." -#: flatcamGUI/FlatCAMGUI.py:4323 flatcamGUI/FlatCAMGUI.py:4330 +#: flatcamGUI/MainGUI.py:4323 flatcamGUI/MainGUI.py:4330 msgid "Idle." msgstr "Idle." -#: flatcamGUI/FlatCAMGUI.py:4361 +#: flatcamGUI/MainGUI.py:4361 msgid "Application started ..." msgstr "Application started ..." -#: flatcamGUI/FlatCAMGUI.py:4362 +#: flatcamGUI/MainGUI.py:4362 msgid "Hello!" msgstr "Hello!" -#: flatcamGUI/FlatCAMGUI.py:4424 +#: flatcamGUI/MainGUI.py:4424 msgid "Open Project ..." msgstr "Open Project ..." -#: flatcamGUI/FlatCAMGUI.py:4450 +#: flatcamGUI/MainGUI.py:4450 msgid "Exit" msgstr "Exit" diff --git a/locale/es/LC_MESSAGES/strings.po b/locale/es/LC_MESSAGES/strings.po index 88f787a9..09a1813d 100644 --- a/locale/es/LC_MESSAGES/strings.po +++ b/locale/es/LC_MESSAGES/strings.po @@ -72,8 +72,8 @@ msgstr "" #: FlatCAMDB.py:709 FlatCAMDB.py:2125 FlatCAMDB.py:2171 #: flatcamEditors/FlatCAMExcEditor.py:1023 #: flatcamEditors/FlatCAMExcEditor.py:1091 -#: flatcamEditors/FlatCAMTextEditor.py:223 flatcamGUI/FlatCAMGUI.py:3443 -#: flatcamGUI/FlatCAMGUI.py:3659 flatcamGUI/FlatCAMGUI.py:3874 +#: flatcamEditors/FlatCAMTextEditor.py:223 flatcamGUI/MainGUI.py:3443 +#: flatcamGUI/MainGUI.py:3659 flatcamGUI/MainGUI.py:3874 #: flatcamObjects/ObjectCollection.py:126 flatcamTools/ToolFilm.py:754 #: flatcamTools/ToolFilm.py:900 flatcamTools/ToolImage.py:247 #: flatcamTools/ToolMove.py:269 flatcamTools/ToolPcbWizard.py:301 @@ -124,20 +124,20 @@ msgstr "Editor está activado ..." msgid "Do you want to save the edited object?" msgstr "Quieres guardar el objeto editado?" -#: FlatCAMApp.py:2226 flatcamGUI/FlatCAMGUI.py:2288 +#: FlatCAMApp.py:2226 flatcamGUI/MainGUI.py:2288 msgid "Close Editor" msgstr "Cerrar Editor" #: FlatCAMApp.py:2229 FlatCAMApp.py:3518 FlatCAMApp.py:6085 FlatCAMApp.py:7345 #: FlatCAMTranslation.py:109 FlatCAMTranslation.py:207 -#: flatcamGUI/FlatCAMGUI.py:2519 +#: flatcamGUI/MainGUI.py:2519 #: flatcamGUI/preferences/PreferencesUIManager.py:1122 msgid "Yes" msgstr "Sí" #: FlatCAMApp.py:2230 FlatCAMApp.py:3519 FlatCAMApp.py:6086 FlatCAMApp.py:7346 #: FlatCAMTranslation.py:110 FlatCAMTranslation.py:208 -#: flatcamGUI/FlatCAMGUI.py:2520 +#: flatcamGUI/MainGUI.py:2520 #: flatcamGUI/preferences/PreferencesUIManager.py:1123 #: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:164 #: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:150 @@ -147,7 +147,7 @@ msgstr "No" #: FlatCAMApp.py:2231 FlatCAMApp.py:3520 FlatCAMApp.py:4478 FlatCAMApp.py:5103 #: FlatCAMApp.py:7347 FlatCAMDB.py:128 FlatCAMDB.py:1689 -#: flatcamGUI/FlatCAMGUI.py:1347 +#: flatcamGUI/MainGUI.py:1347 msgid "Cancel" msgstr "Cancelar" @@ -277,7 +277,7 @@ msgstr "creado / seleccionado" msgid "Plotting" msgstr "Trazado" -#: FlatCAMApp.py:3090 flatcamGUI/FlatCAMGUI.py:545 +#: FlatCAMApp.py:3090 flatcamGUI/MainGUI.py:545 msgid "About FlatCAM" msgstr "Sobre FlatCAM" @@ -419,7 +419,7 @@ msgstr "Traductor" msgid "Corrections" msgstr "Correcciones" -#: FlatCAMApp.py:3455 FlatCAMApp.py:3464 flatcamGUI/FlatCAMGUI.py:527 +#: FlatCAMApp.py:3455 FlatCAMApp.py:3464 flatcamGUI/MainGUI.py:527 msgid "Bookmarks Manager" msgstr "Administrador de Marcadores" @@ -447,7 +447,7 @@ msgstr "" msgid "Alternative website" msgstr "Sitio web alternativo" -#: FlatCAMApp.py:3508 flatcamGUI/FlatCAMGUI.py:4267 +#: FlatCAMApp.py:3508 flatcamGUI/MainGUI.py:4267 msgid "Application is saving the project. Please wait ..." msgstr "La aplicación es guardar el proyecto. Por favor espera ..." @@ -653,8 +653,8 @@ msgstr "Coordenadas erróneas. Introduzca las coordenadas en formato: X, Y" #: flatcamEditors/FlatCAMGrbEditor.py:1490 #: flatcamEditors/FlatCAMGrbEditor.py:1759 #: flatcamEditors/FlatCAMGrbEditor.py:4622 -#: flatcamEditors/FlatCAMGrbEditor.py:4637 flatcamGUI/FlatCAMGUI.py:3424 -#: flatcamGUI/FlatCAMGUI.py:3436 flatcamTools/ToolAlignObjects.py:393 +#: flatcamEditors/FlatCAMGrbEditor.py:4637 flatcamGUI/MainGUI.py:3424 +#: flatcamGUI/MainGUI.py:3436 flatcamTools/ToolAlignObjects.py:393 #: flatcamTools/ToolAlignObjects.py:415 msgid "Done." msgstr "Hecho." @@ -804,12 +804,12 @@ msgstr "Ningún objeto seleccionado para sesgar / cortar en el eje Y." msgid "Skew on Y axis done." msgstr "Sesgar en el eje Y hecho." -#: FlatCAMApp.py:6497 FlatCAMApp.py:6544 flatcamGUI/FlatCAMGUI.py:503 -#: flatcamGUI/FlatCAMGUI.py:1728 +#: FlatCAMApp.py:6497 FlatCAMApp.py:6544 flatcamGUI/MainGUI.py:503 +#: flatcamGUI/MainGUI.py:1728 msgid "Select All" msgstr "Seleccionar todo" -#: FlatCAMApp.py:6501 FlatCAMApp.py:6548 flatcamGUI/FlatCAMGUI.py:505 +#: FlatCAMApp.py:6501 FlatCAMApp.py:6548 flatcamGUI/MainGUI.py:505 msgid "Deselect All" msgstr "Deseleccionar todo" @@ -821,7 +821,7 @@ msgstr "Todos los objetos están seleccionados." msgid "Objects selection is cleared." msgstr "La selección de objetos se borra." -#: FlatCAMApp.py:6594 flatcamGUI/FlatCAMGUI.py:1721 +#: FlatCAMApp.py:6594 flatcamGUI/MainGUI.py:1721 msgid "Grid On/Off" msgstr "Grid On/Off" @@ -837,9 +837,9 @@ msgid "Add" msgstr "Añadir" #: FlatCAMApp.py:6608 flatcamEditors/FlatCAMGrbEditor.py:2588 -#: flatcamEditors/FlatCAMGrbEditor.py:2736 flatcamGUI/FlatCAMGUI.py:751 -#: flatcamGUI/FlatCAMGUI.py:1074 flatcamGUI/FlatCAMGUI.py:2141 -#: flatcamGUI/FlatCAMGUI.py:2284 flatcamGUI/FlatCAMGUI.py:2777 +#: flatcamEditors/FlatCAMGrbEditor.py:2736 flatcamGUI/MainGUI.py:751 +#: flatcamGUI/MainGUI.py:1074 flatcamGUI/MainGUI.py:2141 +#: flatcamGUI/MainGUI.py:2284 flatcamGUI/MainGUI.py:2777 #: flatcamGUI/ObjectUI.py:1623 flatcamObjects/FlatCAMGeometry.py:505 #: flatcamTools/ToolNCC.py:316 flatcamTools/ToolNCC.py:637 #: flatcamTools/ToolPaint.py:299 flatcamTools/ToolPaint.py:682 @@ -925,8 +925,8 @@ msgstr "" msgid "New Project created" msgstr "Nuevo proyecto creado" -#: FlatCAMApp.py:7519 FlatCAMApp.py:7523 flatcamGUI/FlatCAMGUI.py:836 -#: flatcamGUI/FlatCAMGUI.py:2544 +#: FlatCAMApp.py:7519 FlatCAMApp.py:7523 flatcamGUI/MainGUI.py:836 +#: flatcamGUI/MainGUI.py:2544 msgid "Open Gerber" msgstr "Abrir gerber" @@ -943,8 +943,8 @@ msgstr "" msgid "Opening Gerber file." msgstr "Abriendo el archivo Gerber." -#: FlatCAMApp.py:7557 FlatCAMApp.py:7561 flatcamGUI/FlatCAMGUI.py:838 -#: flatcamGUI/FlatCAMGUI.py:2546 +#: FlatCAMApp.py:7557 FlatCAMApp.py:7561 flatcamGUI/MainGUI.py:838 +#: flatcamGUI/MainGUI.py:2546 msgid "Open Excellon" msgstr "Abierto Excellon" @@ -960,7 +960,7 @@ msgstr "Código G abierto" msgid "Opening G-Code file." msgstr "Abriendo el archivo G-code." -#: FlatCAMApp.py:7632 FlatCAMApp.py:7635 flatcamGUI/FlatCAMGUI.py:1730 +#: FlatCAMApp.py:7632 FlatCAMApp.py:7635 flatcamGUI/MainGUI.py:1730 msgid "Open Project" msgstr "Proyecto abierto" @@ -1122,8 +1122,8 @@ msgstr "El archivo de script TCL se abrió en el Editor de código y se ejecutó msgid "Save Project As ..." msgstr "Guardar proyecto como ..." -#: FlatCAMApp.py:8551 flatcamGUI/FlatCAMGUI.py:1134 -#: flatcamGUI/FlatCAMGUI.py:2176 +#: FlatCAMApp.py:8551 flatcamGUI/MainGUI.py:1134 +#: flatcamGUI/MainGUI.py:2176 msgid "Project" msgstr "Proyecto" @@ -1375,7 +1375,7 @@ msgstr "Borrar proyectos recientes" msgid "Clear Recent files" msgstr "Borrar archivos recientes" -#: FlatCAMApp.py:10065 flatcamGUI/FlatCAMGUI.py:1363 +#: FlatCAMApp.py:10065 flatcamGUI/MainGUI.py:1363 msgid "Shortcut Key List" msgstr " Lista de teclas de acceso directo " @@ -1537,47 +1537,47 @@ msgstr "Inhabilitando parcelas ..." msgid "Working ..." msgstr "Trabajando ..." -#: FlatCAMApp.py:10558 flatcamGUI/FlatCAMGUI.py:703 +#: FlatCAMApp.py:10558 flatcamGUI/MainGUI.py:703 msgid "Red" msgstr "Rojo" -#: FlatCAMApp.py:10560 flatcamGUI/FlatCAMGUI.py:706 +#: FlatCAMApp.py:10560 flatcamGUI/MainGUI.py:706 msgid "Blue" msgstr "Azul" -#: FlatCAMApp.py:10563 flatcamGUI/FlatCAMGUI.py:709 +#: FlatCAMApp.py:10563 flatcamGUI/MainGUI.py:709 msgid "Yellow" msgstr "Amarillo" -#: FlatCAMApp.py:10565 flatcamGUI/FlatCAMGUI.py:712 +#: FlatCAMApp.py:10565 flatcamGUI/MainGUI.py:712 msgid "Green" msgstr "Verde" -#: FlatCAMApp.py:10567 flatcamGUI/FlatCAMGUI.py:715 +#: FlatCAMApp.py:10567 flatcamGUI/MainGUI.py:715 msgid "Purple" msgstr "Púrpura" -#: FlatCAMApp.py:10569 flatcamGUI/FlatCAMGUI.py:718 +#: FlatCAMApp.py:10569 flatcamGUI/MainGUI.py:718 msgid "Brown" msgstr "Marrón" -#: FlatCAMApp.py:10571 FlatCAMApp.py:10627 flatcamGUI/FlatCAMGUI.py:721 +#: FlatCAMApp.py:10571 FlatCAMApp.py:10627 flatcamGUI/MainGUI.py:721 msgid "White" msgstr "Blanca" -#: FlatCAMApp.py:10573 flatcamGUI/FlatCAMGUI.py:724 +#: FlatCAMApp.py:10573 flatcamGUI/MainGUI.py:724 msgid "Black" msgstr "Negra" -#: FlatCAMApp.py:10576 flatcamGUI/FlatCAMGUI.py:729 +#: FlatCAMApp.py:10576 flatcamGUI/MainGUI.py:729 msgid "Custom" msgstr "Personalizado" -#: FlatCAMApp.py:10586 flatcamGUI/FlatCAMGUI.py:737 +#: FlatCAMApp.py:10586 flatcamGUI/MainGUI.py:737 msgid "Default" msgstr "Predeterminado" -#: FlatCAMApp.py:10610 flatcamGUI/FlatCAMGUI.py:734 +#: FlatCAMApp.py:10610 flatcamGUI/MainGUI.py:734 msgid "Opacity" msgstr "Opacidad" @@ -1697,7 +1697,7 @@ msgstr "Marcador eliminado." msgid "Export FlatCAM Bookmarks" msgstr "Exportar marcadores de FlatCAM" -#: FlatCAMBookmark.py:293 flatcamGUI/FlatCAMGUI.py:524 +#: FlatCAMBookmark.py:293 flatcamGUI/MainGUI.py:524 msgid "Bookmarks" msgstr "Marcadores" @@ -3147,7 +3147,7 @@ msgstr "" "Eliminar una herramienta en la lista de herramientas\n" "seleccionando una fila en la tabla de herramientas." -#: flatcamEditors/FlatCAMExcEditor.py:1650 flatcamGUI/FlatCAMGUI.py:2019 +#: flatcamEditors/FlatCAMExcEditor.py:1650 flatcamGUI/MainGUI.py:2019 msgid "Resize Drill(s)" msgstr "Cambiar el tamaño de taladro (s)" @@ -3171,8 +3171,8 @@ msgstr "Redimensionar" msgid "Resize drill(s)" msgstr "Cambiar el tamaño de taladro" -#: flatcamEditors/FlatCAMExcEditor.py:1699 flatcamGUI/FlatCAMGUI.py:2018 -#: flatcamGUI/FlatCAMGUI.py:2270 +#: flatcamEditors/FlatCAMExcEditor.py:1699 flatcamGUI/MainGUI.py:2018 +#: flatcamGUI/MainGUI.py:2270 msgid "Add Drill Array" msgstr "Añadir Drill Array" @@ -3484,7 +3484,7 @@ msgstr "" "Herramienta ya en la lista de herramientas original o real.\n" "Guarde y reedite Excellon si necesita agregar esta herramienta. " -#: flatcamEditors/FlatCAMExcEditor.py:2579 flatcamGUI/FlatCAMGUI.py:4071 +#: flatcamEditors/FlatCAMExcEditor.py:2579 flatcamGUI/MainGUI.py:4071 msgid "Added new tool with dia" msgstr "Nueva herramienta agregada con dia" @@ -3595,7 +3595,7 @@ msgid "Full Buffer" msgstr "Buffer lleno" #: flatcamEditors/FlatCAMGeoEditor.py:132 -#: flatcamEditors/FlatCAMGeoEditor.py:3017 flatcamGUI/FlatCAMGUI.py:1928 +#: flatcamEditors/FlatCAMGeoEditor.py:3017 flatcamGUI/MainGUI.py:1928 #: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:190 msgid "Buffer Tool" msgstr "Herramienta Buffer" @@ -3616,7 +3616,7 @@ msgstr "" msgid "Font" msgstr "Font" -#: flatcamEditors/FlatCAMGeoEditor.py:323 flatcamGUI/FlatCAMGUI.py:2208 +#: flatcamEditors/FlatCAMGeoEditor.py:323 flatcamGUI/MainGUI.py:2208 msgid "Text" msgstr "Texto" @@ -3624,8 +3624,8 @@ msgstr "Texto" msgid "Text Tool" msgstr "Herramienta de texto" -#: flatcamEditors/FlatCAMGeoEditor.py:405 flatcamGUI/FlatCAMGUI.py:511 -#: flatcamGUI/FlatCAMGUI.py:1158 flatcamGUI/ObjectUI.py:818 +#: flatcamEditors/FlatCAMGeoEditor.py:405 flatcamGUI/MainGUI.py:511 +#: flatcamGUI/MainGUI.py:1158 flatcamGUI/ObjectUI.py:818 #: flatcamGUI/ObjectUI.py:1662 flatcamObjects/FlatCAMExcellon.py:742 #: flatcamObjects/FlatCAMExcellon.py:1084 flatcamObjects/FlatCAMGeometry.py:759 #: flatcamTools/ToolNCC.py:331 flatcamTools/ToolNCC.py:797 @@ -3662,12 +3662,12 @@ msgstr "Conectar:" msgid "Contour:" msgstr "Contorno:" -#: flatcamEditors/FlatCAMGeoEditor.py:529 flatcamGUI/FlatCAMGUI.py:2212 +#: flatcamEditors/FlatCAMGeoEditor.py:529 flatcamGUI/MainGUI.py:2212 msgid "Paint" msgstr "Pintar" -#: flatcamEditors/FlatCAMGeoEditor.py:547 flatcamGUI/FlatCAMGUI.py:924 -#: flatcamGUI/FlatCAMGUI.py:2628 flatcamGUI/ObjectUI.py:2139 +#: flatcamEditors/FlatCAMGeoEditor.py:547 flatcamGUI/MainGUI.py:924 +#: flatcamGUI/MainGUI.py:2628 flatcamGUI/ObjectUI.py:2139 #: flatcamTools/ToolPaint.py:43 flatcamTools/ToolPaint.py:738 msgid "Paint Tool" msgstr "Herramienta de pintura" @@ -3694,8 +3694,8 @@ msgstr "Herramientas" #: flatcamEditors/FlatCAMGeoEditor.py:607 #: flatcamEditors/FlatCAMGeoEditor.py:991 #: flatcamEditors/FlatCAMGrbEditor.py:5306 -#: flatcamEditors/FlatCAMGrbEditor.py:5703 flatcamGUI/FlatCAMGUI.py:945 -#: flatcamGUI/FlatCAMGUI.py:2649 flatcamTools/ToolTransform.py:460 +#: flatcamEditors/FlatCAMGrbEditor.py:5703 flatcamGUI/MainGUI.py:945 +#: flatcamGUI/MainGUI.py:2649 flatcamTools/ToolTransform.py:460 msgid "Transform Tool" msgstr "Herramienta de transformación" @@ -3715,9 +3715,9 @@ msgstr "Sesgo / cizalla" #: flatcamEditors/FlatCAMGeoEditor.py:610 #: flatcamEditors/FlatCAMGrbEditor.py:2680 -#: flatcamEditors/FlatCAMGrbEditor.py:5309 flatcamGUI/FlatCAMGUI.py:1063 -#: flatcamGUI/FlatCAMGUI.py:2140 flatcamGUI/FlatCAMGUI.py:2255 -#: flatcamGUI/FlatCAMGUI.py:2767 flatcamGUI/ObjectUI.py:125 +#: flatcamEditors/FlatCAMGrbEditor.py:5309 flatcamGUI/MainGUI.py:1063 +#: flatcamGUI/MainGUI.py:2140 flatcamGUI/MainGUI.py:2255 +#: flatcamGUI/MainGUI.py:2767 flatcamGUI/ObjectUI.py:125 #: flatcamGUI/preferences/tools/ToolsTransformPrefGroupUI.py:95 #: flatcamTools/ToolTransform.py:26 msgid "Scale" @@ -3729,8 +3729,8 @@ msgid "Mirror (Flip)" msgstr "Espejo (Flip)" #: flatcamEditors/FlatCAMGeoEditor.py:625 -#: flatcamEditors/FlatCAMGrbEditor.py:5324 flatcamGUI/FlatCAMGUI.py:856 -#: flatcamGUI/FlatCAMGUI.py:2564 +#: flatcamEditors/FlatCAMGrbEditor.py:5324 flatcamGUI/MainGUI.py:856 +#: flatcamGUI/MainGUI.py:2564 msgid "Editor" msgstr "Editor" @@ -4452,7 +4452,7 @@ msgstr "Anillo" msgid "Line" msgstr "Línea" -#: flatcamEditors/FlatCAMGeoEditor.py:3591 flatcamGUI/FlatCAMGUI.py:2202 +#: flatcamEditors/FlatCAMGeoEditor.py:3591 flatcamGUI/MainGUI.py:2202 #: flatcamGUI/ObjectUI.py:2074 #: flatcamGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:218 #: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:328 @@ -4481,10 +4481,10 @@ msgstr "Edición de Geometría MultiGeo, herramienta" msgid "with diameter" msgstr "con diámetro" -#: flatcamEditors/FlatCAMGeoEditor.py:4509 flatcamGUI/FlatCAMGUI.py:3753 -#: flatcamGUI/FlatCAMGUI.py:3799 flatcamGUI/FlatCAMGUI.py:3817 -#: flatcamGUI/FlatCAMGUI.py:3961 flatcamGUI/FlatCAMGUI.py:4000 -#: flatcamGUI/FlatCAMGUI.py:4012 flatcamGUI/FlatCAMGUI.py:4029 +#: flatcamEditors/FlatCAMGeoEditor.py:4509 flatcamGUI/MainGUI.py:3753 +#: flatcamGUI/MainGUI.py:3799 flatcamGUI/MainGUI.py:3817 +#: flatcamGUI/MainGUI.py:3961 flatcamGUI/MainGUI.py:4000 +#: flatcamGUI/MainGUI.py:4012 flatcamGUI/MainGUI.py:4029 msgid "Click on target point." msgstr "Haga clic en el punto de destino." @@ -4709,7 +4709,7 @@ msgstr "Hecho. Movimiento de aperturas completado." msgid "Done. Apertures copied." msgstr "Hecho. Aberturas copiadas." -#: flatcamEditors/FlatCAMGrbEditor.py:2455 flatcamGUI/FlatCAMGUI.py:2233 +#: flatcamEditors/FlatCAMGrbEditor.py:2455 flatcamGUI/MainGUI.py:2233 #: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:27 msgid "Gerber Editor" msgstr "Gerber Editor" @@ -4871,9 +4871,9 @@ msgstr "" " - 'Biselado:' la esquina es una línea que conecta directamente las " "funciones que se encuentran en la esquina" -#: flatcamEditors/FlatCAMGrbEditor.py:2640 flatcamGUI/FlatCAMGUI.py:1061 -#: flatcamGUI/FlatCAMGUI.py:2138 flatcamGUI/FlatCAMGUI.py:2210 -#: flatcamGUI/FlatCAMGUI.py:2253 flatcamGUI/FlatCAMGUI.py:2765 +#: flatcamEditors/FlatCAMGrbEditor.py:2640 flatcamGUI/MainGUI.py:1061 +#: flatcamGUI/MainGUI.py:2138 flatcamGUI/MainGUI.py:2210 +#: flatcamGUI/MainGUI.py:2253 flatcamGUI/MainGUI.py:2765 #: flatcamGUI/preferences/tools/ToolsTransformPrefGroupUI.py:200 #: flatcamTools/ToolTransform.py:29 msgid "Buffer" @@ -4948,8 +4948,8 @@ msgstr "Eliminar todos los polígonos marcados." msgid "Clear all the markings." msgstr "Borra todas las marcas." -#: flatcamEditors/FlatCAMGrbEditor.py:2764 flatcamGUI/FlatCAMGUI.py:1046 -#: flatcamGUI/FlatCAMGUI.py:2138 flatcamGUI/FlatCAMGUI.py:2750 +#: flatcamEditors/FlatCAMGrbEditor.py:2764 flatcamGUI/MainGUI.py:1046 +#: flatcamGUI/MainGUI.py:2138 flatcamGUI/MainGUI.py:2750 msgid "Add Pad Array" msgstr "Agregar matriz de pad" @@ -5255,129 +5255,129 @@ msgstr "Guardado en" msgid "Code Editor content copied to clipboard ..." msgstr "Contenido del editor de código copiado al portapapeles ..." -#: flatcamGUI/FlatCAMGUI.py:78 flatcamGUI/FlatCAMGUI.py:80 -#: flatcamGUI/FlatCAMGUI.py:2163 +#: flatcamGUI/MainGUI.py:78 flatcamGUI/MainGUI.py:80 +#: flatcamGUI/MainGUI.py:2163 msgid "Toggle Panel" msgstr "Panel de palanca" -#: flatcamGUI/FlatCAMGUI.py:90 +#: flatcamGUI/MainGUI.py:90 msgid "File" msgstr "Archivo" -#: flatcamGUI/FlatCAMGUI.py:95 +#: flatcamGUI/MainGUI.py:95 msgid "&New Project ...\tCtrl+N" msgstr "&Nuevo proyecto ...\tCtrl+N" -#: flatcamGUI/FlatCAMGUI.py:97 +#: flatcamGUI/MainGUI.py:97 msgid "Will create a new, blank project" msgstr "Creará un nuevo proyecto en blanco" -#: flatcamGUI/FlatCAMGUI.py:102 +#: flatcamGUI/MainGUI.py:102 msgid "&New" msgstr "&Nuevo" -#: flatcamGUI/FlatCAMGUI.py:106 +#: flatcamGUI/MainGUI.py:106 msgid "Geometry\tN" msgstr "Geometría\tN" -#: flatcamGUI/FlatCAMGUI.py:108 +#: flatcamGUI/MainGUI.py:108 msgid "Will create a new, empty Geometry Object." msgstr "Creará un nuevo objeto vacío de geometría." -#: flatcamGUI/FlatCAMGUI.py:111 +#: flatcamGUI/MainGUI.py:111 msgid "Gerber\tB" msgstr "Gerber\tB" -#: flatcamGUI/FlatCAMGUI.py:113 +#: flatcamGUI/MainGUI.py:113 msgid "Will create a new, empty Gerber Object." msgstr "Creará un nuevo objeto vacío de Gerber." -#: flatcamGUI/FlatCAMGUI.py:116 +#: flatcamGUI/MainGUI.py:116 msgid "Excellon\tL" msgstr "Excellon\tL" -#: flatcamGUI/FlatCAMGUI.py:118 +#: flatcamGUI/MainGUI.py:118 msgid "Will create a new, empty Excellon Object." msgstr "Creará un objeto Excellon nuevo y vacío." -#: flatcamGUI/FlatCAMGUI.py:123 +#: flatcamGUI/MainGUI.py:123 msgid "Document\tD" msgstr "Documento\tD" -#: flatcamGUI/FlatCAMGUI.py:125 +#: flatcamGUI/MainGUI.py:125 msgid "Will create a new, empty Document Object." msgstr "Creará un nuevo objeto de Documento vacío." -#: flatcamGUI/FlatCAMGUI.py:129 flatcamGUI/FlatCAMGUI.py:4420 +#: flatcamGUI/MainGUI.py:129 flatcamGUI/MainGUI.py:4420 #: flatcamTools/ToolPcbWizard.py:62 flatcamTools/ToolPcbWizard.py:69 msgid "Open" msgstr "Abierto" -#: flatcamGUI/FlatCAMGUI.py:134 +#: flatcamGUI/MainGUI.py:134 msgid "Open &Project ..." msgstr "Abierto &Project ..." -#: flatcamGUI/FlatCAMGUI.py:140 flatcamGUI/FlatCAMGUI.py:4430 +#: flatcamGUI/MainGUI.py:140 flatcamGUI/MainGUI.py:4430 msgid "Open &Gerber ...\tCtrl+G" msgstr "Abierto &Gerber ...\tCtrl+G" -#: flatcamGUI/FlatCAMGUI.py:145 flatcamGUI/FlatCAMGUI.py:4435 +#: flatcamGUI/MainGUI.py:145 flatcamGUI/MainGUI.py:4435 msgid "Open &Excellon ...\tCtrl+E" msgstr "Abierto &Excellon ...\tCtrl+E" -#: flatcamGUI/FlatCAMGUI.py:150 flatcamGUI/FlatCAMGUI.py:4440 +#: flatcamGUI/MainGUI.py:150 flatcamGUI/MainGUI.py:4440 msgid "Open G-&Code ..." msgstr "Abierto G-&Code ..." -#: flatcamGUI/FlatCAMGUI.py:157 +#: flatcamGUI/MainGUI.py:157 msgid "Open Config ..." msgstr "Abierto Config ..." -#: flatcamGUI/FlatCAMGUI.py:162 +#: flatcamGUI/MainGUI.py:162 msgid "Recent projects" msgstr "Proyectos recientes" -#: flatcamGUI/FlatCAMGUI.py:164 +#: flatcamGUI/MainGUI.py:164 msgid "Recent files" msgstr "Archivos recientes" -#: flatcamGUI/FlatCAMGUI.py:167 flatcamGUI/FlatCAMGUI.py:753 -#: flatcamGUI/FlatCAMGUI.py:1339 +#: flatcamGUI/MainGUI.py:167 flatcamGUI/MainGUI.py:753 +#: flatcamGUI/MainGUI.py:1339 msgid "Save" msgstr "Salvar" -#: flatcamGUI/FlatCAMGUI.py:171 +#: flatcamGUI/MainGUI.py:171 msgid "&Save Project ...\tCtrl+S" msgstr "Guardar proyecto...\tCtrl+S" -#: flatcamGUI/FlatCAMGUI.py:176 +#: flatcamGUI/MainGUI.py:176 msgid "Save Project &As ...\tCtrl+Shift+S" msgstr "Guardar proyecto como...\tCtrl+Shift+S" -#: flatcamGUI/FlatCAMGUI.py:191 +#: flatcamGUI/MainGUI.py:191 msgid "Scripting" msgstr "Scripting" -#: flatcamGUI/FlatCAMGUI.py:195 flatcamGUI/FlatCAMGUI.py:903 -#: flatcamGUI/FlatCAMGUI.py:2607 +#: flatcamGUI/MainGUI.py:195 flatcamGUI/MainGUI.py:903 +#: flatcamGUI/MainGUI.py:2607 msgid "New Script ..." msgstr "Nuevo Script ..." -#: flatcamGUI/FlatCAMGUI.py:197 flatcamGUI/FlatCAMGUI.py:905 -#: flatcamGUI/FlatCAMGUI.py:2609 +#: flatcamGUI/MainGUI.py:197 flatcamGUI/MainGUI.py:905 +#: flatcamGUI/MainGUI.py:2609 msgid "Open Script ..." msgstr "Abrir Script ..." -#: flatcamGUI/FlatCAMGUI.py:199 +#: flatcamGUI/MainGUI.py:199 msgid "Open Example ..." msgstr "Abrir ejemplo ..." -#: flatcamGUI/FlatCAMGUI.py:201 flatcamGUI/FlatCAMGUI.py:907 -#: flatcamGUI/FlatCAMGUI.py:2611 flatcamGUI/FlatCAMGUI.py:4409 +#: flatcamGUI/MainGUI.py:201 flatcamGUI/MainGUI.py:907 +#: flatcamGUI/MainGUI.py:2611 flatcamGUI/MainGUI.py:4409 msgid "Run Script ..." msgstr "Ejecutar Script ..." -#: flatcamGUI/FlatCAMGUI.py:203 flatcamGUI/FlatCAMGUI.py:4411 +#: flatcamGUI/MainGUI.py:203 flatcamGUI/MainGUI.py:4411 msgid "" "Will run the opened Tcl Script thus\n" "enabling the automation of certain\n" @@ -5387,47 +5387,47 @@ msgstr "" "permitiendo la automatización de ciertos\n" "Funciones de FlatCAM." -#: flatcamGUI/FlatCAMGUI.py:218 +#: flatcamGUI/MainGUI.py:218 msgid "Import" msgstr "Importar" -#: flatcamGUI/FlatCAMGUI.py:220 +#: flatcamGUI/MainGUI.py:220 msgid "&SVG as Geometry Object ..." msgstr "&SVG como objeto de geometría ..." -#: flatcamGUI/FlatCAMGUI.py:223 +#: flatcamGUI/MainGUI.py:223 msgid "&SVG as Gerber Object ..." msgstr "&SVG como objeto de Gerber ..." -#: flatcamGUI/FlatCAMGUI.py:228 +#: flatcamGUI/MainGUI.py:228 msgid "&DXF as Geometry Object ..." msgstr "&DXF como objeto de geometría ..." -#: flatcamGUI/FlatCAMGUI.py:231 +#: flatcamGUI/MainGUI.py:231 msgid "&DXF as Gerber Object ..." msgstr "&DXF como objeto de Gerber ..." -#: flatcamGUI/FlatCAMGUI.py:235 +#: flatcamGUI/MainGUI.py:235 msgid "HPGL2 as Geometry Object ..." msgstr "HPGL2 como objeto de geometría ..." -#: flatcamGUI/FlatCAMGUI.py:241 +#: flatcamGUI/MainGUI.py:241 msgid "Export" msgstr "Exportar" -#: flatcamGUI/FlatCAMGUI.py:245 +#: flatcamGUI/MainGUI.py:245 msgid "Export &SVG ..." msgstr "Exportar &SVG ..." -#: flatcamGUI/FlatCAMGUI.py:249 +#: flatcamGUI/MainGUI.py:249 msgid "Export DXF ..." msgstr "Exportar DXF ..." -#: flatcamGUI/FlatCAMGUI.py:255 +#: flatcamGUI/MainGUI.py:255 msgid "Export &PNG ..." msgstr "Exportar &PNG ..." -#: flatcamGUI/FlatCAMGUI.py:257 +#: flatcamGUI/MainGUI.py:257 msgid "" "Will export an image in PNG format,\n" "the saved image will contain the visual \n" @@ -5437,11 +5437,11 @@ msgstr "" "La imagen guardada contendrá lo visual.\n" "Información actualmente en FlatCAM Plot Area." -#: flatcamGUI/FlatCAMGUI.py:266 +#: flatcamGUI/MainGUI.py:266 msgid "Export &Excellon ..." msgstr "Exportación y Excellon ..." -#: flatcamGUI/FlatCAMGUI.py:268 +#: flatcamGUI/MainGUI.py:268 msgid "" "Will export an Excellon Object as Excellon file,\n" "the coordinates format, the file units and zeros\n" @@ -5451,11 +5451,11 @@ msgstr "" "El formato de las coordenadas, las unidades de archivo y los ceros.\n" "se configuran en Preferencias -> Exportación de Excellon." -#: flatcamGUI/FlatCAMGUI.py:275 +#: flatcamGUI/MainGUI.py:275 msgid "Export &Gerber ..." msgstr "Exportar &Gerber ..." -#: flatcamGUI/FlatCAMGUI.py:277 +#: flatcamGUI/MainGUI.py:277 msgid "" "Will export an Gerber Object as Gerber file,\n" "the coordinates format, the file units and zeros\n" @@ -5465,53 +5465,53 @@ msgstr "" "El formato de las coordenadas, las unidades de archivo y los ceros.\n" "se establecen en Preferencias -> Exportar Gerber." -#: flatcamGUI/FlatCAMGUI.py:287 +#: flatcamGUI/MainGUI.py:287 msgid "Backup" msgstr "Apoyo" -#: flatcamGUI/FlatCAMGUI.py:292 +#: flatcamGUI/MainGUI.py:292 msgid "Import Preferences from file ..." msgstr "Importar preferencias del archivo ..." -#: flatcamGUI/FlatCAMGUI.py:298 +#: flatcamGUI/MainGUI.py:298 msgid "Export Preferences to file ..." msgstr "Exportar preferencias a un archivo ..." -#: flatcamGUI/FlatCAMGUI.py:306 +#: flatcamGUI/MainGUI.py:306 #: flatcamGUI/preferences/PreferencesUIManager.py:1119 msgid "Save Preferences" msgstr "Guardar Preferencias" -#: flatcamGUI/FlatCAMGUI.py:312 flatcamGUI/FlatCAMGUI.py:1730 +#: flatcamGUI/MainGUI.py:312 flatcamGUI/MainGUI.py:1730 msgid "Print (PDF)" msgstr "Imprimir (PDF)" -#: flatcamGUI/FlatCAMGUI.py:320 +#: flatcamGUI/MainGUI.py:320 msgid "E&xit" msgstr "Salida" -#: flatcamGUI/FlatCAMGUI.py:328 flatcamGUI/FlatCAMGUI.py:747 -#: flatcamGUI/FlatCAMGUI.py:2286 +#: flatcamGUI/MainGUI.py:328 flatcamGUI/MainGUI.py:747 +#: flatcamGUI/MainGUI.py:2286 msgid "Edit" msgstr "Editar" -#: flatcamGUI/FlatCAMGUI.py:332 +#: flatcamGUI/MainGUI.py:332 msgid "Edit Object\tE" msgstr "Editar objeto\tE" -#: flatcamGUI/FlatCAMGUI.py:334 +#: flatcamGUI/MainGUI.py:334 msgid "Close Editor\tCtrl+S" msgstr "Cerrar Editor\tCtrl+S" -#: flatcamGUI/FlatCAMGUI.py:343 +#: flatcamGUI/MainGUI.py:343 msgid "Conversion" msgstr "Conversión" -#: flatcamGUI/FlatCAMGUI.py:345 +#: flatcamGUI/MainGUI.py:345 msgid "&Join Geo/Gerber/Exc -> Geo" msgstr "Unirse Geo/Gerber/Exc -> Geo" -#: flatcamGUI/FlatCAMGUI.py:347 +#: flatcamGUI/MainGUI.py:347 msgid "" "Merge a selection of objects, which can be of type:\n" "- Gerber\n" @@ -5525,30 +5525,30 @@ msgstr "" "- Geometría\n" "en un nuevo objeto de geometría combo." -#: flatcamGUI/FlatCAMGUI.py:354 +#: flatcamGUI/MainGUI.py:354 msgid "Join Excellon(s) -> Excellon" msgstr "Únete a Excellon (s) -> Excellon" -#: flatcamGUI/FlatCAMGUI.py:356 +#: flatcamGUI/MainGUI.py:356 msgid "Merge a selection of Excellon objects into a new combo Excellon object." msgstr "" "Combine una selección de objetos de Excellon en un nuevo objeto de Excellon " "combinado." -#: flatcamGUI/FlatCAMGUI.py:359 +#: flatcamGUI/MainGUI.py:359 msgid "Join Gerber(s) -> Gerber" msgstr "Únete a Gerber (s) -> Gerber" -#: flatcamGUI/FlatCAMGUI.py:361 +#: flatcamGUI/MainGUI.py:361 msgid "Merge a selection of Gerber objects into a new combo Gerber object." msgstr "" "Combine una selección de objetos Gerber en un nuevo objeto combo Gerber." -#: flatcamGUI/FlatCAMGUI.py:366 +#: flatcamGUI/MainGUI.py:366 msgid "Convert Single to MultiGeo" msgstr "Convertir solo geo a multi geo" -#: flatcamGUI/FlatCAMGUI.py:368 +#: flatcamGUI/MainGUI.py:368 msgid "" "Will convert a Geometry object from single_geometry type\n" "to a multi_geometry type." @@ -5556,11 +5556,11 @@ msgstr "" "Convertirá un objeto de geometría de un tipo de geometría única\n" "a un tipo de geometría múltiple." -#: flatcamGUI/FlatCAMGUI.py:372 +#: flatcamGUI/MainGUI.py:372 msgid "Convert Multi to SingleGeo" msgstr "Convertir multi a solo Geo" -#: flatcamGUI/FlatCAMGUI.py:374 +#: flatcamGUI/MainGUI.py:374 msgid "" "Will convert a Geometry object from multi_geometry type\n" "to a single_geometry type." @@ -5568,756 +5568,756 @@ msgstr "" "Convertirá un objeto de geometría de tipo de geometría múltiple\n" "a un solo tipo de geometría." -#: flatcamGUI/FlatCAMGUI.py:381 +#: flatcamGUI/MainGUI.py:381 msgid "Convert Any to Geo" msgstr "Convertir cualquiera a Geo" -#: flatcamGUI/FlatCAMGUI.py:384 +#: flatcamGUI/MainGUI.py:384 msgid "Convert Any to Gerber" msgstr "Convertir cualquiera a Gerber" -#: flatcamGUI/FlatCAMGUI.py:390 +#: flatcamGUI/MainGUI.py:390 msgid "&Copy\tCtrl+C" msgstr "Dupdo\tCtrl+C" -#: flatcamGUI/FlatCAMGUI.py:395 +#: flatcamGUI/MainGUI.py:395 msgid "&Delete\tDEL" msgstr "Borrar\tDEL" -#: flatcamGUI/FlatCAMGUI.py:400 +#: flatcamGUI/MainGUI.py:400 msgid "Se&t Origin\tO" msgstr "Establecer origen\tO" -#: flatcamGUI/FlatCAMGUI.py:402 +#: flatcamGUI/MainGUI.py:402 msgid "Move to Origin\tShift+O" msgstr "Mover al origen\tShift+O" -#: flatcamGUI/FlatCAMGUI.py:405 +#: flatcamGUI/MainGUI.py:405 msgid "Jump to Location\tJ" msgstr "Ir a la ubicación\tJ" -#: flatcamGUI/FlatCAMGUI.py:407 +#: flatcamGUI/MainGUI.py:407 msgid "Locate in Object\tShift+J" msgstr "Localizar en Objeto\tShift+J" -#: flatcamGUI/FlatCAMGUI.py:412 +#: flatcamGUI/MainGUI.py:412 msgid "Toggle Units\tQ" msgstr "Unidades de palanca\tQ" -#: flatcamGUI/FlatCAMGUI.py:414 +#: flatcamGUI/MainGUI.py:414 msgid "&Select All\tCtrl+A" msgstr "Seleccionar todo\tCtrl+A" -#: flatcamGUI/FlatCAMGUI.py:419 +#: flatcamGUI/MainGUI.py:419 msgid "&Preferences\tShift+P" msgstr "Preferencias\tShift+P" -#: flatcamGUI/FlatCAMGUI.py:425 flatcamTools/ToolProperties.py:155 +#: flatcamGUI/MainGUI.py:425 flatcamTools/ToolProperties.py:155 msgid "Options" msgstr "Opciones" -#: flatcamGUI/FlatCAMGUI.py:427 +#: flatcamGUI/MainGUI.py:427 msgid "&Rotate Selection\tShift+(R)" msgstr "Rotar selección\tShift+(R)" -#: flatcamGUI/FlatCAMGUI.py:432 +#: flatcamGUI/MainGUI.py:432 msgid "&Skew on X axis\tShift+X" msgstr "Sesgo en el eje X\tShift+X" -#: flatcamGUI/FlatCAMGUI.py:434 +#: flatcamGUI/MainGUI.py:434 msgid "S&kew on Y axis\tShift+Y" msgstr "Sesgo en el eje Y\tShift+Y" -#: flatcamGUI/FlatCAMGUI.py:439 +#: flatcamGUI/MainGUI.py:439 msgid "Flip on &X axis\tX" msgstr "Voltear en el eje X\tX" -#: flatcamGUI/FlatCAMGUI.py:441 +#: flatcamGUI/MainGUI.py:441 msgid "Flip on &Y axis\tY" msgstr "Voltear en el ejeY\tY" -#: flatcamGUI/FlatCAMGUI.py:446 +#: flatcamGUI/MainGUI.py:446 msgid "View source\tAlt+S" msgstr "Ver fuente\tAlt+S" -#: flatcamGUI/FlatCAMGUI.py:448 +#: flatcamGUI/MainGUI.py:448 msgid "Tools DataBase\tCtrl+D" msgstr "DB de Herramientas\tCtrl+D" -#: flatcamGUI/FlatCAMGUI.py:455 flatcamGUI/FlatCAMGUI.py:2183 +#: flatcamGUI/MainGUI.py:455 flatcamGUI/MainGUI.py:2183 msgid "View" msgstr "Ver" -#: flatcamGUI/FlatCAMGUI.py:457 +#: flatcamGUI/MainGUI.py:457 msgid "Enable all plots\tAlt+1" msgstr "Habilitar todas las parcelas\tAlt+1" -#: flatcamGUI/FlatCAMGUI.py:459 +#: flatcamGUI/MainGUI.py:459 msgid "Disable all plots\tAlt+2" msgstr "Deshabilitar todas las parcelas\tAlt+2" -#: flatcamGUI/FlatCAMGUI.py:461 +#: flatcamGUI/MainGUI.py:461 msgid "Disable non-selected\tAlt+3" msgstr "Deshabilitar no seleccionado\tAlt+3" -#: flatcamGUI/FlatCAMGUI.py:465 +#: flatcamGUI/MainGUI.py:465 msgid "&Zoom Fit\tV" msgstr "Ajuste de zoom\tV" -#: flatcamGUI/FlatCAMGUI.py:467 +#: flatcamGUI/MainGUI.py:467 msgid "&Zoom In\t=" msgstr "Acercarse\t=" -#: flatcamGUI/FlatCAMGUI.py:469 +#: flatcamGUI/MainGUI.py:469 msgid "&Zoom Out\t-" msgstr "Disminuir el zoom\t-" -#: flatcamGUI/FlatCAMGUI.py:474 +#: flatcamGUI/MainGUI.py:474 msgid "Redraw All\tF5" msgstr "Redibujar todo\tF5" -#: flatcamGUI/FlatCAMGUI.py:478 +#: flatcamGUI/MainGUI.py:478 msgid "Toggle Code Editor\tShift+E" msgstr "Alternar Editor de Código\tShift+E" -#: flatcamGUI/FlatCAMGUI.py:481 +#: flatcamGUI/MainGUI.py:481 msgid "&Toggle FullScreen\tAlt+F10" msgstr "Alternar pantalla completa\tAlt+F10" -#: flatcamGUI/FlatCAMGUI.py:483 +#: flatcamGUI/MainGUI.py:483 msgid "&Toggle Plot Area\tCtrl+F10" msgstr "Alternar área de la parcela\tCtrl+F10" -#: flatcamGUI/FlatCAMGUI.py:485 +#: flatcamGUI/MainGUI.py:485 msgid "&Toggle Project/Sel/Tool\t`" msgstr "Palanca Proyecto / Sel / Tool\t`" -#: flatcamGUI/FlatCAMGUI.py:489 +#: flatcamGUI/MainGUI.py:489 msgid "&Toggle Grid Snap\tG" msgstr "Activar cuadrícula\tG" -#: flatcamGUI/FlatCAMGUI.py:491 +#: flatcamGUI/MainGUI.py:491 msgid "&Toggle Grid Lines\tAlt+G" msgstr "Alternar Líneas de Cuadrícula\tAlt+G" -#: flatcamGUI/FlatCAMGUI.py:493 +#: flatcamGUI/MainGUI.py:493 msgid "&Toggle Axis\tShift+G" msgstr "Eje de palanca\tShift+G" -#: flatcamGUI/FlatCAMGUI.py:495 +#: flatcamGUI/MainGUI.py:495 msgid "Toggle Workspace\tShift+W" msgstr "Alternar espacio de trabajo\tShift+W" -#: flatcamGUI/FlatCAMGUI.py:500 +#: flatcamGUI/MainGUI.py:500 msgid "Objects" msgstr "Objetos" -#: flatcamGUI/FlatCAMGUI.py:514 +#: flatcamGUI/MainGUI.py:514 msgid "&Command Line\tS" msgstr "Línea de comando\tS" -#: flatcamGUI/FlatCAMGUI.py:519 +#: flatcamGUI/MainGUI.py:519 msgid "Help" msgstr "Ayuda" -#: flatcamGUI/FlatCAMGUI.py:521 +#: flatcamGUI/MainGUI.py:521 msgid "Online Help\tF1" msgstr "Ayuda en Online\tF1" -#: flatcamGUI/FlatCAMGUI.py:531 +#: flatcamGUI/MainGUI.py:531 msgid "Report a bug" msgstr "Reportar un error" -#: flatcamGUI/FlatCAMGUI.py:534 +#: flatcamGUI/MainGUI.py:534 msgid "Excellon Specification" msgstr "Especificación de Excellon" -#: flatcamGUI/FlatCAMGUI.py:536 +#: flatcamGUI/MainGUI.py:536 msgid "Gerber Specification" msgstr "Especificación de Gerber" -#: flatcamGUI/FlatCAMGUI.py:541 +#: flatcamGUI/MainGUI.py:541 msgid "Shortcuts List\tF3" msgstr "Lista de accesos directos\tF3" -#: flatcamGUI/FlatCAMGUI.py:543 +#: flatcamGUI/MainGUI.py:543 msgid "YouTube Channel\tF4" msgstr "Canal de Youtube\tF4" -#: flatcamGUI/FlatCAMGUI.py:554 +#: flatcamGUI/MainGUI.py:554 msgid "Add Circle\tO" msgstr "Añadir círculo\tO" -#: flatcamGUI/FlatCAMGUI.py:557 +#: flatcamGUI/MainGUI.py:557 msgid "Add Arc\tA" msgstr "Añadir arco\tA" -#: flatcamGUI/FlatCAMGUI.py:560 +#: flatcamGUI/MainGUI.py:560 msgid "Add Rectangle\tR" msgstr "Añadir rectángulo\tR" -#: flatcamGUI/FlatCAMGUI.py:563 +#: flatcamGUI/MainGUI.py:563 msgid "Add Polygon\tN" msgstr "Añadir polígono\tN" -#: flatcamGUI/FlatCAMGUI.py:566 +#: flatcamGUI/MainGUI.py:566 msgid "Add Path\tP" msgstr "Añadir ruta\tP" -#: flatcamGUI/FlatCAMGUI.py:569 +#: flatcamGUI/MainGUI.py:569 msgid "Add Text\tT" msgstr "Añadir texto\tT" -#: flatcamGUI/FlatCAMGUI.py:572 +#: flatcamGUI/MainGUI.py:572 msgid "Polygon Union\tU" msgstr "Unión de polígonos\tU" -#: flatcamGUI/FlatCAMGUI.py:574 +#: flatcamGUI/MainGUI.py:574 msgid "Polygon Intersection\tE" msgstr "Intersección de polígonos\tE" -#: flatcamGUI/FlatCAMGUI.py:576 +#: flatcamGUI/MainGUI.py:576 msgid "Polygon Subtraction\tS" msgstr "Sustracción de polígonos\tS" -#: flatcamGUI/FlatCAMGUI.py:580 +#: flatcamGUI/MainGUI.py:580 msgid "Cut Path\tX" msgstr "Camino de corte\tX" -#: flatcamGUI/FlatCAMGUI.py:584 +#: flatcamGUI/MainGUI.py:584 msgid "Copy Geom\tC" msgstr "Copia Geo\tC" -#: flatcamGUI/FlatCAMGUI.py:586 +#: flatcamGUI/MainGUI.py:586 msgid "Delete Shape\tDEL" msgstr "Eliminar forma\tDEL" -#: flatcamGUI/FlatCAMGUI.py:590 flatcamGUI/FlatCAMGUI.py:677 +#: flatcamGUI/MainGUI.py:590 flatcamGUI/MainGUI.py:677 msgid "Move\tM" msgstr "Movimiento\tM" -#: flatcamGUI/FlatCAMGUI.py:592 +#: flatcamGUI/MainGUI.py:592 msgid "Buffer Tool\tB" msgstr "Herramienta amortiguadora\tB" -#: flatcamGUI/FlatCAMGUI.py:595 +#: flatcamGUI/MainGUI.py:595 msgid "Paint Tool\tI" msgstr "Herramienta de pintura\tI" -#: flatcamGUI/FlatCAMGUI.py:598 +#: flatcamGUI/MainGUI.py:598 msgid "Transform Tool\tAlt+R" msgstr "Herramienta de transformación\tAlt+R" -#: flatcamGUI/FlatCAMGUI.py:602 +#: flatcamGUI/MainGUI.py:602 msgid "Toggle Corner Snap\tK" msgstr "Alternar esquina esquina\tK" -#: flatcamGUI/FlatCAMGUI.py:608 +#: flatcamGUI/MainGUI.py:608 msgid ">Excellon Editor<" msgstr ">Excellon Editor<" -#: flatcamGUI/FlatCAMGUI.py:612 +#: flatcamGUI/MainGUI.py:612 msgid "Add Drill Array\tA" msgstr "Añadir matriz de perfor.\tA" -#: flatcamGUI/FlatCAMGUI.py:614 +#: flatcamGUI/MainGUI.py:614 msgid "Add Drill\tD" msgstr "Añadir taladro\tD" -#: flatcamGUI/FlatCAMGUI.py:618 +#: flatcamGUI/MainGUI.py:618 msgid "Add Slot Array\tQ" msgstr "Agregar matriz de ranuras\tQ" -#: flatcamGUI/FlatCAMGUI.py:620 +#: flatcamGUI/MainGUI.py:620 msgid "Add Slot\tW" msgstr "Agregar ranura\tW" -#: flatcamGUI/FlatCAMGUI.py:624 +#: flatcamGUI/MainGUI.py:624 msgid "Resize Drill(S)\tR" msgstr "Cambiar el tamaño de taladro (s)\tR" -#: flatcamGUI/FlatCAMGUI.py:627 flatcamGUI/FlatCAMGUI.py:671 +#: flatcamGUI/MainGUI.py:627 flatcamGUI/MainGUI.py:671 msgid "Copy\tC" msgstr "Dupdo\tC" -#: flatcamGUI/FlatCAMGUI.py:629 flatcamGUI/FlatCAMGUI.py:673 +#: flatcamGUI/MainGUI.py:629 flatcamGUI/MainGUI.py:673 msgid "Delete\tDEL" msgstr "Borrar\tDEL" -#: flatcamGUI/FlatCAMGUI.py:634 +#: flatcamGUI/MainGUI.py:634 msgid "Move Drill(s)\tM" msgstr "Mover taladro(s)\tM" -#: flatcamGUI/FlatCAMGUI.py:639 +#: flatcamGUI/MainGUI.py:639 msgid ">Gerber Editor<" msgstr ">Gerber Editor<" -#: flatcamGUI/FlatCAMGUI.py:643 +#: flatcamGUI/MainGUI.py:643 msgid "Add Pad\tP" msgstr "Añadir Pad\tP" -#: flatcamGUI/FlatCAMGUI.py:645 +#: flatcamGUI/MainGUI.py:645 msgid "Add Pad Array\tA" msgstr "Agregar una matriz de pad\tA" -#: flatcamGUI/FlatCAMGUI.py:647 +#: flatcamGUI/MainGUI.py:647 msgid "Add Track\tT" msgstr "Añadir pista\tT" -#: flatcamGUI/FlatCAMGUI.py:649 +#: flatcamGUI/MainGUI.py:649 msgid "Add Region\tN" msgstr "Añadir región\tN" -#: flatcamGUI/FlatCAMGUI.py:653 +#: flatcamGUI/MainGUI.py:653 msgid "Poligonize\tAlt+N" msgstr "Poligonize\tAlt+N" -#: flatcamGUI/FlatCAMGUI.py:655 +#: flatcamGUI/MainGUI.py:655 msgid "Add SemiDisc\tE" msgstr "Añadir medio disco\tE" -#: flatcamGUI/FlatCAMGUI.py:657 +#: flatcamGUI/MainGUI.py:657 msgid "Add Disc\tD" msgstr "Añadir disco\tD" -#: flatcamGUI/FlatCAMGUI.py:659 +#: flatcamGUI/MainGUI.py:659 msgid "Buffer\tB" msgstr "Buffer\tB" -#: flatcamGUI/FlatCAMGUI.py:661 +#: flatcamGUI/MainGUI.py:661 msgid "Scale\tS" msgstr "Escalar\tS" -#: flatcamGUI/FlatCAMGUI.py:663 +#: flatcamGUI/MainGUI.py:663 msgid "Mark Area\tAlt+A" msgstr "Marcar area\tAlt+A" -#: flatcamGUI/FlatCAMGUI.py:665 +#: flatcamGUI/MainGUI.py:665 msgid "Eraser\tCtrl+E" msgstr "Borrador\tCtrl+E" -#: flatcamGUI/FlatCAMGUI.py:667 +#: flatcamGUI/MainGUI.py:667 msgid "Transform\tAlt+R" msgstr "Transformar\tAlt+R" -#: flatcamGUI/FlatCAMGUI.py:694 +#: flatcamGUI/MainGUI.py:694 msgid "Enable Plot" msgstr "Habilitar Parcela" -#: flatcamGUI/FlatCAMGUI.py:696 +#: flatcamGUI/MainGUI.py:696 msgid "Disable Plot" msgstr "Desactivar parcela" -#: flatcamGUI/FlatCAMGUI.py:700 +#: flatcamGUI/MainGUI.py:700 msgid "Set Color" msgstr "Establecer color" -#: flatcamGUI/FlatCAMGUI.py:742 +#: flatcamGUI/MainGUI.py:742 msgid "Generate CNC" msgstr "Generar CNC" -#: flatcamGUI/FlatCAMGUI.py:744 +#: flatcamGUI/MainGUI.py:744 msgid "View Source" msgstr "Ver fuente" -#: flatcamGUI/FlatCAMGUI.py:749 flatcamGUI/FlatCAMGUI.py:863 -#: flatcamGUI/FlatCAMGUI.py:1072 flatcamGUI/FlatCAMGUI.py:2138 -#: flatcamGUI/FlatCAMGUI.py:2282 flatcamGUI/FlatCAMGUI.py:2572 -#: flatcamGUI/FlatCAMGUI.py:2775 flatcamGUI/ObjectUI.py:1617 +#: flatcamGUI/MainGUI.py:749 flatcamGUI/MainGUI.py:863 +#: flatcamGUI/MainGUI.py:1072 flatcamGUI/MainGUI.py:2138 +#: flatcamGUI/MainGUI.py:2282 flatcamGUI/MainGUI.py:2572 +#: flatcamGUI/MainGUI.py:2775 flatcamGUI/ObjectUI.py:1617 #: flatcamObjects/FlatCAMGeometry.py:502 flatcamTools/ToolPanelize.py:540 #: flatcamTools/ToolPanelize.py:567 flatcamTools/ToolPanelize.py:660 #: flatcamTools/ToolPanelize.py:689 flatcamTools/ToolPanelize.py:751 msgid "Copy" msgstr "Dupdo" -#: flatcamGUI/FlatCAMGUI.py:757 flatcamGUI/FlatCAMGUI.py:2295 +#: flatcamGUI/MainGUI.py:757 flatcamGUI/MainGUI.py:2295 #: flatcamTools/ToolProperties.py:31 msgid "Properties" msgstr "Propiedades" -#: flatcamGUI/FlatCAMGUI.py:786 +#: flatcamGUI/MainGUI.py:786 msgid "File Toolbar" msgstr "Barra de herramientas de archivo" -#: flatcamGUI/FlatCAMGUI.py:790 +#: flatcamGUI/MainGUI.py:790 msgid "Edit Toolbar" msgstr "Barra de herramientas de edición" -#: flatcamGUI/FlatCAMGUI.py:794 +#: flatcamGUI/MainGUI.py:794 msgid "View Toolbar" msgstr "Barra de herramientas de ver" -#: flatcamGUI/FlatCAMGUI.py:798 +#: flatcamGUI/MainGUI.py:798 msgid "Shell Toolbar" msgstr "Barra de herramientas de Shell" -#: flatcamGUI/FlatCAMGUI.py:802 +#: flatcamGUI/MainGUI.py:802 msgid "Tools Toolbar" msgstr "Barra de herramientas de Herramientas" -#: flatcamGUI/FlatCAMGUI.py:806 +#: flatcamGUI/MainGUI.py:806 msgid "Excellon Editor Toolbar" msgstr "Barra de herramientas del editor de Excel" -#: flatcamGUI/FlatCAMGUI.py:812 +#: flatcamGUI/MainGUI.py:812 msgid "Geometry Editor Toolbar" msgstr "Barra de herramientas del editor de geometría" -#: flatcamGUI/FlatCAMGUI.py:816 +#: flatcamGUI/MainGUI.py:816 msgid "Gerber Editor Toolbar" msgstr "Barra de herramientas del editor Gerber" -#: flatcamGUI/FlatCAMGUI.py:820 +#: flatcamGUI/MainGUI.py:820 msgid "Grid Toolbar" msgstr "Barra de herramientas de cuadrícula" -#: flatcamGUI/FlatCAMGUI.py:841 flatcamGUI/FlatCAMGUI.py:2549 +#: flatcamGUI/MainGUI.py:841 flatcamGUI/MainGUI.py:2549 msgid "Open project" msgstr "Proyecto abierto" -#: flatcamGUI/FlatCAMGUI.py:843 flatcamGUI/FlatCAMGUI.py:2551 +#: flatcamGUI/MainGUI.py:843 flatcamGUI/MainGUI.py:2551 msgid "Save project" msgstr "Guardar proyecto" -#: flatcamGUI/FlatCAMGUI.py:849 flatcamGUI/FlatCAMGUI.py:2557 +#: flatcamGUI/MainGUI.py:849 flatcamGUI/MainGUI.py:2557 msgid "New Blank Geometry" msgstr "Nueva geometría en blanco" -#: flatcamGUI/FlatCAMGUI.py:851 flatcamGUI/FlatCAMGUI.py:2559 +#: flatcamGUI/MainGUI.py:851 flatcamGUI/MainGUI.py:2559 msgid "New Blank Gerber" msgstr "Nuevo Gerber en blanco" -#: flatcamGUI/FlatCAMGUI.py:853 flatcamGUI/FlatCAMGUI.py:2561 +#: flatcamGUI/MainGUI.py:853 flatcamGUI/MainGUI.py:2561 msgid "New Blank Excellon" msgstr "Nueva Excellon en blanco" -#: flatcamGUI/FlatCAMGUI.py:858 flatcamGUI/FlatCAMGUI.py:2567 +#: flatcamGUI/MainGUI.py:858 flatcamGUI/MainGUI.py:2567 msgid "Save Object and close the Editor" msgstr "Guardar Objeto y cerrar el Editor" -#: flatcamGUI/FlatCAMGUI.py:865 flatcamGUI/FlatCAMGUI.py:2574 +#: flatcamGUI/MainGUI.py:865 flatcamGUI/MainGUI.py:2574 msgid "&Delete" msgstr "Borrar" -#: flatcamGUI/FlatCAMGUI.py:868 flatcamGUI/FlatCAMGUI.py:1729 -#: flatcamGUI/FlatCAMGUI.py:1935 flatcamGUI/FlatCAMGUI.py:2577 +#: flatcamGUI/MainGUI.py:868 flatcamGUI/MainGUI.py:1729 +#: flatcamGUI/MainGUI.py:1935 flatcamGUI/MainGUI.py:2577 #: flatcamTools/ToolDistance.py:35 flatcamTools/ToolDistance.py:195 msgid "Distance Tool" msgstr "Herramienta de Dist" -#: flatcamGUI/FlatCAMGUI.py:870 flatcamGUI/FlatCAMGUI.py:2579 +#: flatcamGUI/MainGUI.py:870 flatcamGUI/MainGUI.py:2579 msgid "Distance Min Tool" msgstr "Herramienta Distancia Mínima" -#: flatcamGUI/FlatCAMGUI.py:872 flatcamGUI/FlatCAMGUI.py:1722 -#: flatcamGUI/FlatCAMGUI.py:2581 +#: flatcamGUI/MainGUI.py:872 flatcamGUI/MainGUI.py:1722 +#: flatcamGUI/MainGUI.py:2581 msgid "Set Origin" msgstr "Establecer origen" -#: flatcamGUI/FlatCAMGUI.py:874 +#: flatcamGUI/MainGUI.py:874 msgid "Move to Origin" msgstr "Mover al origen" -#: flatcamGUI/FlatCAMGUI.py:877 flatcamGUI/FlatCAMGUI.py:2583 +#: flatcamGUI/MainGUI.py:877 flatcamGUI/MainGUI.py:2583 msgid "Jump to Location" msgstr "Saltar a la ubicación" -#: flatcamGUI/FlatCAMGUI.py:879 flatcamGUI/FlatCAMGUI.py:1734 -#: flatcamGUI/FlatCAMGUI.py:2585 +#: flatcamGUI/MainGUI.py:879 flatcamGUI/MainGUI.py:1734 +#: flatcamGUI/MainGUI.py:2585 msgid "Locate in Object" msgstr "Localizar en objeto" -#: flatcamGUI/FlatCAMGUI.py:885 flatcamGUI/FlatCAMGUI.py:2591 +#: flatcamGUI/MainGUI.py:885 flatcamGUI/MainGUI.py:2591 msgid "&Replot" msgstr "Replantear" -#: flatcamGUI/FlatCAMGUI.py:887 flatcamGUI/FlatCAMGUI.py:2593 +#: flatcamGUI/MainGUI.py:887 flatcamGUI/MainGUI.py:2593 msgid "&Clear plot" msgstr "Gráfico clara" -#: flatcamGUI/FlatCAMGUI.py:889 flatcamGUI/FlatCAMGUI.py:1725 -#: flatcamGUI/FlatCAMGUI.py:2595 +#: flatcamGUI/MainGUI.py:889 flatcamGUI/MainGUI.py:1725 +#: flatcamGUI/MainGUI.py:2595 msgid "Zoom In" msgstr "Acercarse" -#: flatcamGUI/FlatCAMGUI.py:891 flatcamGUI/FlatCAMGUI.py:1725 -#: flatcamGUI/FlatCAMGUI.py:2597 +#: flatcamGUI/MainGUI.py:891 flatcamGUI/MainGUI.py:1725 +#: flatcamGUI/MainGUI.py:2597 msgid "Zoom Out" msgstr "Disminuir el zoom" -#: flatcamGUI/FlatCAMGUI.py:893 flatcamGUI/FlatCAMGUI.py:1724 -#: flatcamGUI/FlatCAMGUI.py:2185 flatcamGUI/FlatCAMGUI.py:2599 +#: flatcamGUI/MainGUI.py:893 flatcamGUI/MainGUI.py:1724 +#: flatcamGUI/MainGUI.py:2185 flatcamGUI/MainGUI.py:2599 msgid "Zoom Fit" msgstr "Ajuste de zoom" -#: flatcamGUI/FlatCAMGUI.py:901 flatcamGUI/FlatCAMGUI.py:2605 +#: flatcamGUI/MainGUI.py:901 flatcamGUI/MainGUI.py:2605 msgid "&Command Line" msgstr "Línea de comando" -#: flatcamGUI/FlatCAMGUI.py:913 flatcamGUI/FlatCAMGUI.py:2617 +#: flatcamGUI/MainGUI.py:913 flatcamGUI/MainGUI.py:2617 msgid "2Sided Tool" msgstr "Herramienta de 2 Caras" -#: flatcamGUI/FlatCAMGUI.py:915 flatcamGUI/FlatCAMGUI.py:1740 -#: flatcamGUI/FlatCAMGUI.py:2619 +#: flatcamGUI/MainGUI.py:915 flatcamGUI/MainGUI.py:1740 +#: flatcamGUI/MainGUI.py:2619 msgid "Align Objects Tool" msgstr "Herram. de Alinear Objetos" -#: flatcamGUI/FlatCAMGUI.py:917 flatcamGUI/FlatCAMGUI.py:1741 -#: flatcamGUI/FlatCAMGUI.py:2621 flatcamTools/ToolExtractDrills.py:393 +#: flatcamGUI/MainGUI.py:917 flatcamGUI/MainGUI.py:1741 +#: flatcamGUI/MainGUI.py:2621 flatcamTools/ToolExtractDrills.py:393 msgid "Extract Drills Tool" msgstr "Herram. de Extracción de Taladros" -#: flatcamGUI/FlatCAMGUI.py:920 flatcamGUI/ObjectUI.py:596 +#: flatcamGUI/MainGUI.py:920 flatcamGUI/ObjectUI.py:596 #: flatcamTools/ToolCutOut.py:440 msgid "Cutout Tool" msgstr "Herramienta de Corte" -#: flatcamGUI/FlatCAMGUI.py:922 flatcamGUI/FlatCAMGUI.py:2626 +#: flatcamGUI/MainGUI.py:922 flatcamGUI/MainGUI.py:2626 #: flatcamGUI/ObjectUI.py:574 flatcamGUI/ObjectUI.py:2157 #: flatcamTools/ToolNCC.py:974 msgid "NCC Tool" msgstr "Herramienta NCC" -#: flatcamGUI/FlatCAMGUI.py:928 flatcamGUI/FlatCAMGUI.py:2632 +#: flatcamGUI/MainGUI.py:928 flatcamGUI/MainGUI.py:2632 msgid "Panel Tool" msgstr "Herramienta de Panel" -#: flatcamGUI/FlatCAMGUI.py:930 flatcamGUI/FlatCAMGUI.py:2634 +#: flatcamGUI/MainGUI.py:930 flatcamGUI/MainGUI.py:2634 #: flatcamTools/ToolFilm.py:586 msgid "Film Tool" msgstr "Herramienta de Película" -#: flatcamGUI/FlatCAMGUI.py:932 flatcamGUI/FlatCAMGUI.py:2636 +#: flatcamGUI/MainGUI.py:932 flatcamGUI/MainGUI.py:2636 #: flatcamTools/ToolSolderPaste.py:553 msgid "SolderPaste Tool" msgstr "Herramienta de Pasta" -#: flatcamGUI/FlatCAMGUI.py:934 flatcamGUI/FlatCAMGUI.py:2638 +#: flatcamGUI/MainGUI.py:934 flatcamGUI/MainGUI.py:2638 #: flatcamTools/ToolSub.py:35 msgid "Subtract Tool" msgstr "Herramienta de Sustracción" -#: flatcamGUI/FlatCAMGUI.py:936 flatcamGUI/FlatCAMGUI.py:2640 +#: flatcamGUI/MainGUI.py:936 flatcamGUI/MainGUI.py:2640 #: flatcamTools/ToolRulesCheck.py:616 msgid "Rules Tool" msgstr "Herramienta de Reglas" -#: flatcamGUI/FlatCAMGUI.py:938 flatcamGUI/FlatCAMGUI.py:1743 -#: flatcamGUI/FlatCAMGUI.py:2642 flatcamTools/ToolOptimal.py:33 +#: flatcamGUI/MainGUI.py:938 flatcamGUI/MainGUI.py:1743 +#: flatcamGUI/MainGUI.py:2642 flatcamTools/ToolOptimal.py:33 #: flatcamTools/ToolOptimal.py:307 msgid "Optimal Tool" msgstr "Herramienta de Óptima" -#: flatcamGUI/FlatCAMGUI.py:943 flatcamGUI/FlatCAMGUI.py:1740 -#: flatcamGUI/FlatCAMGUI.py:2647 +#: flatcamGUI/MainGUI.py:943 flatcamGUI/MainGUI.py:1740 +#: flatcamGUI/MainGUI.py:2647 msgid "Calculators Tool" msgstr "Herramienta de Calculadoras" -#: flatcamGUI/FlatCAMGUI.py:947 flatcamGUI/FlatCAMGUI.py:1744 -#: flatcamGUI/FlatCAMGUI.py:2651 flatcamTools/ToolQRCode.py:43 +#: flatcamGUI/MainGUI.py:947 flatcamGUI/MainGUI.py:1744 +#: flatcamGUI/MainGUI.py:2651 flatcamTools/ToolQRCode.py:43 #: flatcamTools/ToolQRCode.py:382 msgid "QRCode Tool" msgstr "Herramienta QRCode" -#: flatcamGUI/FlatCAMGUI.py:949 flatcamGUI/FlatCAMGUI.py:2653 +#: flatcamGUI/MainGUI.py:949 flatcamGUI/MainGUI.py:2653 #: flatcamTools/ToolCopperThieving.py:39 flatcamTools/ToolCopperThieving.py:568 msgid "Copper Thieving Tool" msgstr "Herramienta Thieving Tool" -#: flatcamGUI/FlatCAMGUI.py:952 flatcamGUI/FlatCAMGUI.py:1741 -#: flatcamGUI/FlatCAMGUI.py:2656 flatcamTools/ToolFiducials.py:33 +#: flatcamGUI/MainGUI.py:952 flatcamGUI/MainGUI.py:1741 +#: flatcamGUI/MainGUI.py:2656 flatcamTools/ToolFiducials.py:33 #: flatcamTools/ToolFiducials.py:395 msgid "Fiducials Tool" msgstr "Herramienta de Fiduciales" -#: flatcamGUI/FlatCAMGUI.py:954 flatcamGUI/FlatCAMGUI.py:2658 +#: flatcamGUI/MainGUI.py:954 flatcamGUI/MainGUI.py:2658 #: flatcamTools/ToolCalibration.py:37 flatcamTools/ToolCalibration.py:759 msgid "Calibration Tool" msgstr "Herramienta de Calibración" -#: flatcamGUI/FlatCAMGUI.py:956 flatcamGUI/FlatCAMGUI.py:1741 -#: flatcamGUI/FlatCAMGUI.py:2660 +#: flatcamGUI/MainGUI.py:956 flatcamGUI/MainGUI.py:1741 +#: flatcamGUI/MainGUI.py:2660 msgid "Punch Gerber Tool" msgstr "Herram. de Perforadora Gerber" -#: flatcamGUI/FlatCAMGUI.py:958 flatcamGUI/FlatCAMGUI.py:2662 +#: flatcamGUI/MainGUI.py:958 flatcamGUI/MainGUI.py:2662 #: flatcamTools/ToolInvertGerber.py:31 msgid "Invert Gerber Tool" msgstr "Herram. Invertir Gerber" -#: flatcamGUI/FlatCAMGUI.py:964 flatcamGUI/FlatCAMGUI.py:990 -#: flatcamGUI/FlatCAMGUI.py:1042 flatcamGUI/FlatCAMGUI.py:2668 -#: flatcamGUI/FlatCAMGUI.py:2746 +#: flatcamGUI/MainGUI.py:964 flatcamGUI/MainGUI.py:990 +#: flatcamGUI/MainGUI.py:1042 flatcamGUI/MainGUI.py:2668 +#: flatcamGUI/MainGUI.py:2746 msgid "Select" msgstr "Seleccionar" -#: flatcamGUI/FlatCAMGUI.py:966 flatcamGUI/FlatCAMGUI.py:2670 +#: flatcamGUI/MainGUI.py:966 flatcamGUI/MainGUI.py:2670 msgid "Add Drill Hole" msgstr "Añadir taladro" -#: flatcamGUI/FlatCAMGUI.py:968 flatcamGUI/FlatCAMGUI.py:2672 +#: flatcamGUI/MainGUI.py:968 flatcamGUI/MainGUI.py:2672 msgid "Add Drill Hole Array" msgstr "Añadir matriz de taladro" -#: flatcamGUI/FlatCAMGUI.py:970 flatcamGUI/FlatCAMGUI.py:2020 -#: flatcamGUI/FlatCAMGUI.py:2273 flatcamGUI/FlatCAMGUI.py:2676 +#: flatcamGUI/MainGUI.py:970 flatcamGUI/MainGUI.py:2020 +#: flatcamGUI/MainGUI.py:2273 flatcamGUI/MainGUI.py:2676 msgid "Add Slot" msgstr "Agregar ranura" -#: flatcamGUI/FlatCAMGUI.py:972 flatcamGUI/FlatCAMGUI.py:2019 -#: flatcamGUI/FlatCAMGUI.py:2275 flatcamGUI/FlatCAMGUI.py:2678 +#: flatcamGUI/MainGUI.py:972 flatcamGUI/MainGUI.py:2019 +#: flatcamGUI/MainGUI.py:2275 flatcamGUI/MainGUI.py:2678 msgid "Add Slot Array" msgstr "Agregar matriz de ranuras" -#: flatcamGUI/FlatCAMGUI.py:974 flatcamGUI/FlatCAMGUI.py:2278 -#: flatcamGUI/FlatCAMGUI.py:2674 +#: flatcamGUI/MainGUI.py:974 flatcamGUI/MainGUI.py:2278 +#: flatcamGUI/MainGUI.py:2674 msgid "Resize Drill" msgstr "Redimensionar taladro" -#: flatcamGUI/FlatCAMGUI.py:978 flatcamGUI/FlatCAMGUI.py:2682 +#: flatcamGUI/MainGUI.py:978 flatcamGUI/MainGUI.py:2682 msgid "Copy Drill" msgstr "Copia de taladro" -#: flatcamGUI/FlatCAMGUI.py:980 flatcamGUI/FlatCAMGUI.py:2684 +#: flatcamGUI/MainGUI.py:980 flatcamGUI/MainGUI.py:2684 msgid "Delete Drill" msgstr "Eliminar taladro" -#: flatcamGUI/FlatCAMGUI.py:984 flatcamGUI/FlatCAMGUI.py:2688 +#: flatcamGUI/MainGUI.py:984 flatcamGUI/MainGUI.py:2688 msgid "Move Drill" msgstr "Mover taladro" -#: flatcamGUI/FlatCAMGUI.py:992 flatcamGUI/FlatCAMGUI.py:2696 +#: flatcamGUI/MainGUI.py:992 flatcamGUI/MainGUI.py:2696 msgid "Add Circle" msgstr "Añadir Círculo" -#: flatcamGUI/FlatCAMGUI.py:994 flatcamGUI/FlatCAMGUI.py:2698 +#: flatcamGUI/MainGUI.py:994 flatcamGUI/MainGUI.py:2698 msgid "Add Arc" msgstr "Añadir Arco" -#: flatcamGUI/FlatCAMGUI.py:996 flatcamGUI/FlatCAMGUI.py:2700 +#: flatcamGUI/MainGUI.py:996 flatcamGUI/MainGUI.py:2700 msgid "Add Rectangle" msgstr "Añadir Rectángulo" -#: flatcamGUI/FlatCAMGUI.py:1000 flatcamGUI/FlatCAMGUI.py:2704 +#: flatcamGUI/MainGUI.py:1000 flatcamGUI/MainGUI.py:2704 msgid "Add Path" msgstr "Añadir Ruta" -#: flatcamGUI/FlatCAMGUI.py:1002 flatcamGUI/FlatCAMGUI.py:2706 +#: flatcamGUI/MainGUI.py:1002 flatcamGUI/MainGUI.py:2706 msgid "Add Polygon" msgstr "Añadir Polígono" -#: flatcamGUI/FlatCAMGUI.py:1005 flatcamGUI/FlatCAMGUI.py:2709 +#: flatcamGUI/MainGUI.py:1005 flatcamGUI/MainGUI.py:2709 msgid "Add Text" msgstr "Añadir Texto" -#: flatcamGUI/FlatCAMGUI.py:1007 flatcamGUI/FlatCAMGUI.py:2711 +#: flatcamGUI/MainGUI.py:1007 flatcamGUI/MainGUI.py:2711 msgid "Add Buffer" msgstr "Añadir Buffer" -#: flatcamGUI/FlatCAMGUI.py:1009 flatcamGUI/FlatCAMGUI.py:2713 +#: flatcamGUI/MainGUI.py:1009 flatcamGUI/MainGUI.py:2713 msgid "Paint Shape" msgstr "Forma de pintura" -#: flatcamGUI/FlatCAMGUI.py:1011 flatcamGUI/FlatCAMGUI.py:1068 -#: flatcamGUI/FlatCAMGUI.py:2214 flatcamGUI/FlatCAMGUI.py:2259 -#: flatcamGUI/FlatCAMGUI.py:2715 flatcamGUI/FlatCAMGUI.py:2771 +#: flatcamGUI/MainGUI.py:1011 flatcamGUI/MainGUI.py:1068 +#: flatcamGUI/MainGUI.py:2214 flatcamGUI/MainGUI.py:2259 +#: flatcamGUI/MainGUI.py:2715 flatcamGUI/MainGUI.py:2771 msgid "Eraser" msgstr "Borrador" -#: flatcamGUI/FlatCAMGUI.py:1015 flatcamGUI/FlatCAMGUI.py:2719 +#: flatcamGUI/MainGUI.py:1015 flatcamGUI/MainGUI.py:2719 msgid "Polygon Union" msgstr "Unión de polígonos" -#: flatcamGUI/FlatCAMGUI.py:1017 flatcamGUI/FlatCAMGUI.py:2721 +#: flatcamGUI/MainGUI.py:1017 flatcamGUI/MainGUI.py:2721 msgid "Polygon Explode" msgstr "Polígono explotar" -#: flatcamGUI/FlatCAMGUI.py:1020 flatcamGUI/FlatCAMGUI.py:2724 +#: flatcamGUI/MainGUI.py:1020 flatcamGUI/MainGUI.py:2724 msgid "Polygon Intersection" msgstr "Intersección de polígonos" -#: flatcamGUI/FlatCAMGUI.py:1022 flatcamGUI/FlatCAMGUI.py:2726 +#: flatcamGUI/MainGUI.py:1022 flatcamGUI/MainGUI.py:2726 msgid "Polygon Subtraction" msgstr "Sustracción de polígonos" -#: flatcamGUI/FlatCAMGUI.py:1026 flatcamGUI/FlatCAMGUI.py:2730 +#: flatcamGUI/MainGUI.py:1026 flatcamGUI/MainGUI.py:2730 msgid "Cut Path" msgstr "Camino de Corte" -#: flatcamGUI/FlatCAMGUI.py:1028 +#: flatcamGUI/MainGUI.py:1028 msgid "Copy Shape(s)" msgstr "Copiar Forma (s)" -#: flatcamGUI/FlatCAMGUI.py:1031 +#: flatcamGUI/MainGUI.py:1031 msgid "Delete Shape '-'" msgstr "Eliminar Forma '-'" -#: flatcamGUI/FlatCAMGUI.py:1033 flatcamGUI/FlatCAMGUI.py:1076 -#: flatcamGUI/FlatCAMGUI.py:2226 flatcamGUI/FlatCAMGUI.py:2263 -#: flatcamGUI/FlatCAMGUI.py:2736 flatcamGUI/FlatCAMGUI.py:2779 +#: flatcamGUI/MainGUI.py:1033 flatcamGUI/MainGUI.py:1076 +#: flatcamGUI/MainGUI.py:2226 flatcamGUI/MainGUI.py:2263 +#: flatcamGUI/MainGUI.py:2736 flatcamGUI/MainGUI.py:2779 #: flatcamGUI/ObjectUI.py:109 msgid "Transformations" msgstr "Transformaciones" -#: flatcamGUI/FlatCAMGUI.py:1036 +#: flatcamGUI/MainGUI.py:1036 msgid "Move Objects " msgstr "Mover objetos " -#: flatcamGUI/FlatCAMGUI.py:1044 flatcamGUI/FlatCAMGUI.py:2139 -#: flatcamGUI/FlatCAMGUI.py:2748 +#: flatcamGUI/MainGUI.py:1044 flatcamGUI/MainGUI.py:2139 +#: flatcamGUI/MainGUI.py:2748 msgid "Add Pad" msgstr "Añadir Pad" -#: flatcamGUI/FlatCAMGUI.py:1048 flatcamGUI/FlatCAMGUI.py:2140 -#: flatcamGUI/FlatCAMGUI.py:2752 +#: flatcamGUI/MainGUI.py:1048 flatcamGUI/MainGUI.py:2140 +#: flatcamGUI/MainGUI.py:2752 msgid "Add Track" msgstr "Añadir Pista" -#: flatcamGUI/FlatCAMGUI.py:1050 flatcamGUI/FlatCAMGUI.py:2139 -#: flatcamGUI/FlatCAMGUI.py:2754 +#: flatcamGUI/MainGUI.py:1050 flatcamGUI/MainGUI.py:2139 +#: flatcamGUI/MainGUI.py:2754 msgid "Add Region" msgstr "Añadir Región" -#: flatcamGUI/FlatCAMGUI.py:1052 flatcamGUI/FlatCAMGUI.py:2245 -#: flatcamGUI/FlatCAMGUI.py:2756 +#: flatcamGUI/MainGUI.py:1052 flatcamGUI/MainGUI.py:2245 +#: flatcamGUI/MainGUI.py:2756 msgid "Poligonize" msgstr "Poligonizar" -#: flatcamGUI/FlatCAMGUI.py:1055 flatcamGUI/FlatCAMGUI.py:2247 -#: flatcamGUI/FlatCAMGUI.py:2759 +#: flatcamGUI/MainGUI.py:1055 flatcamGUI/MainGUI.py:2247 +#: flatcamGUI/MainGUI.py:2759 msgid "SemiDisc" msgstr "Medio disco" -#: flatcamGUI/FlatCAMGUI.py:1057 flatcamGUI/FlatCAMGUI.py:2249 -#: flatcamGUI/FlatCAMGUI.py:2761 +#: flatcamGUI/MainGUI.py:1057 flatcamGUI/MainGUI.py:2249 +#: flatcamGUI/MainGUI.py:2761 msgid "Disc" msgstr "Disco" -#: flatcamGUI/FlatCAMGUI.py:1065 flatcamGUI/FlatCAMGUI.py:2257 -#: flatcamGUI/FlatCAMGUI.py:2769 +#: flatcamGUI/MainGUI.py:1065 flatcamGUI/MainGUI.py:2257 +#: flatcamGUI/MainGUI.py:2769 msgid "Mark Area" msgstr "Marcar area" -#: flatcamGUI/FlatCAMGUI.py:1079 flatcamGUI/FlatCAMGUI.py:2139 -#: flatcamGUI/FlatCAMGUI.py:2230 flatcamGUI/FlatCAMGUI.py:2293 -#: flatcamGUI/FlatCAMGUI.py:2782 flatcamTools/ToolMove.py:27 +#: flatcamGUI/MainGUI.py:1079 flatcamGUI/MainGUI.py:2139 +#: flatcamGUI/MainGUI.py:2230 flatcamGUI/MainGUI.py:2293 +#: flatcamGUI/MainGUI.py:2782 flatcamTools/ToolMove.py:27 msgid "Move" msgstr "Movimiento" -#: flatcamGUI/FlatCAMGUI.py:1087 flatcamGUI/FlatCAMGUI.py:2791 +#: flatcamGUI/MainGUI.py:1087 flatcamGUI/MainGUI.py:2791 msgid "Snap to grid" msgstr "Encajar a la cuadricula" -#: flatcamGUI/FlatCAMGUI.py:1090 flatcamGUI/FlatCAMGUI.py:2794 +#: flatcamGUI/MainGUI.py:1090 flatcamGUI/MainGUI.py:2794 msgid "Grid X snapping distance" msgstr "Distancia de ajuste de la rejilla X" -#: flatcamGUI/FlatCAMGUI.py:1095 flatcamGUI/FlatCAMGUI.py:2799 +#: flatcamGUI/MainGUI.py:1095 flatcamGUI/MainGUI.py:2799 msgid "Grid Y snapping distance" msgstr "Distancia de ajuste de cuadrícula Y" -#: flatcamGUI/FlatCAMGUI.py:1101 flatcamGUI/FlatCAMGUI.py:2805 +#: flatcamGUI/MainGUI.py:1101 flatcamGUI/MainGUI.py:2805 msgid "" "When active, value on Grid_X\n" "is copied to the Grid_Y value." @@ -6325,65 +6325,65 @@ msgstr "" "Cuando está activo, el valor en Grid_X\n" "Se copia al valor Grid_Y." -#: flatcamGUI/FlatCAMGUI.py:1108 flatcamGUI/FlatCAMGUI.py:2812 +#: flatcamGUI/MainGUI.py:1108 flatcamGUI/MainGUI.py:2812 msgid "Snap to corner" msgstr "Ajustar a la esquina" -#: flatcamGUI/FlatCAMGUI.py:1112 flatcamGUI/FlatCAMGUI.py:2816 +#: flatcamGUI/MainGUI.py:1112 flatcamGUI/MainGUI.py:2816 #: flatcamGUI/preferences/general/GeneralAPPSetGroupUI.py:78 msgid "Max. magnet distance" msgstr "Distancia máxima del imán" -#: flatcamGUI/FlatCAMGUI.py:1149 +#: flatcamGUI/MainGUI.py:1149 msgid "Selected" msgstr "Seleccionado" -#: flatcamGUI/FlatCAMGUI.py:1177 flatcamGUI/FlatCAMGUI.py:1185 +#: flatcamGUI/MainGUI.py:1177 flatcamGUI/MainGUI.py:1185 msgid "Plot Area" msgstr "Área de la parcela" -#: flatcamGUI/FlatCAMGUI.py:1212 +#: flatcamGUI/MainGUI.py:1212 msgid "General" msgstr "General" -#: flatcamGUI/FlatCAMGUI.py:1227 flatcamTools/ToolCopperThieving.py:74 +#: flatcamGUI/MainGUI.py:1227 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:1237 flatcamTools/ToolDblSided.py:92 +#: flatcamGUI/MainGUI.py:1237 flatcamTools/ToolDblSided.py:92 msgid "EXCELLON" msgstr "EXCELLON" -#: flatcamGUI/FlatCAMGUI.py:1247 flatcamTools/ToolDblSided.py:120 +#: flatcamGUI/MainGUI.py:1247 flatcamTools/ToolDblSided.py:120 msgid "GEOMETRY" msgstr "GEOMETRÍA" -#: flatcamGUI/FlatCAMGUI.py:1257 +#: flatcamGUI/MainGUI.py:1257 msgid "CNC-JOB" msgstr "CNC-JOB" -#: flatcamGUI/FlatCAMGUI.py:1266 flatcamGUI/ObjectUI.py:563 +#: flatcamGUI/MainGUI.py:1266 flatcamGUI/ObjectUI.py:563 #: flatcamGUI/ObjectUI.py:2132 msgid "TOOLS" msgstr "HERRAMIENTAS" -#: flatcamGUI/FlatCAMGUI.py:1275 +#: flatcamGUI/MainGUI.py:1275 msgid "TOOLS 2" msgstr "HERRAMIENTAS 2" -#: flatcamGUI/FlatCAMGUI.py:1285 +#: flatcamGUI/MainGUI.py:1285 msgid "UTILITIES" msgstr "UTILIDADES" -#: flatcamGUI/FlatCAMGUI.py:1302 +#: flatcamGUI/MainGUI.py:1302 #: flatcamGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:192 msgid "Restore Defaults" msgstr "Restaurar los valores predeterminados" -#: flatcamGUI/FlatCAMGUI.py:1305 +#: flatcamGUI/MainGUI.py:1305 msgid "" "Restore the entire set of default values\n" "to the initial values loaded after first launch." @@ -6391,19 +6391,19 @@ msgstr "" "Restaurar todo el conjunto de valores predeterminados\n" "a los valores iniciales cargados después del primer lanzamiento." -#: flatcamGUI/FlatCAMGUI.py:1310 +#: flatcamGUI/MainGUI.py:1310 msgid "Open Pref Folder" msgstr "Abrir Carpeta de Pref" -#: flatcamGUI/FlatCAMGUI.py:1313 +#: flatcamGUI/MainGUI.py:1313 msgid "Open the folder where FlatCAM save the preferences files." msgstr "Abra la carpeta donde FlatCAM guarda los archivos de preferencias." -#: flatcamGUI/FlatCAMGUI.py:1317 flatcamGUI/FlatCAMGUI.py:2517 +#: flatcamGUI/MainGUI.py:1317 flatcamGUI/MainGUI.py:2517 msgid "Clear GUI Settings" msgstr "Borrar la configuración de la GUI" -#: flatcamGUI/FlatCAMGUI.py:1321 +#: flatcamGUI/MainGUI.py:1321 msgid "" "Clear the GUI settings for FlatCAM,\n" "such as: layout, gui state, style, hdpi support etc." @@ -6411,15 +6411,15 @@ msgstr "" "Borrar la configuración de la GUI para FlatCAM,\n" "tales como: diseño, estado gui, estilo, soporte hdpi etc." -#: flatcamGUI/FlatCAMGUI.py:1332 +#: flatcamGUI/MainGUI.py:1332 msgid "Apply" msgstr "Aplicar" -#: flatcamGUI/FlatCAMGUI.py:1335 +#: flatcamGUI/MainGUI.py:1335 msgid "Apply the current preferences without saving to a file." msgstr "Aplique las preferencias actuales sin guardar en un archivo." -#: flatcamGUI/FlatCAMGUI.py:1342 +#: flatcamGUI/MainGUI.py:1342 msgid "" "Save the current settings in the 'current_defaults' file\n" "which is the file storing the working default preferences." @@ -6427,215 +6427,215 @@ msgstr "" "Guarde la configuración actual en el archivo 'current_defaults'\n" "que es el archivo que almacena las preferencias predeterminadas de trabajo." -#: flatcamGUI/FlatCAMGUI.py:1350 +#: flatcamGUI/MainGUI.py:1350 msgid "Will not save the changes and will close the preferences window." msgstr "No guardará los cambios y cerrará la ventana de preferencias." -#: flatcamGUI/FlatCAMGUI.py:1719 +#: flatcamGUI/MainGUI.py:1719 msgid "SHOW SHORTCUT LIST" msgstr "MOSTRAR LISTA DE ACCESO CORTO" -#: flatcamGUI/FlatCAMGUI.py:1719 +#: flatcamGUI/MainGUI.py:1719 msgid "Switch to Project Tab" msgstr "Cambiar a la Pestaña Proyecto" -#: flatcamGUI/FlatCAMGUI.py:1719 +#: flatcamGUI/MainGUI.py:1719 msgid "Switch to Selected Tab" msgstr "Cambiar a la Pestaña Seleccionada" -#: flatcamGUI/FlatCAMGUI.py:1720 +#: flatcamGUI/MainGUI.py:1720 msgid "Switch to Tool Tab" msgstr "Cambiar a la Pestaña de Herramientas" -#: flatcamGUI/FlatCAMGUI.py:1721 +#: flatcamGUI/MainGUI.py:1721 msgid "New Gerber" msgstr "Nuevo Gerber" -#: flatcamGUI/FlatCAMGUI.py:1721 +#: flatcamGUI/MainGUI.py:1721 msgid "Edit Object (if selected)" msgstr "Editar objeto (si está seleccionado)" -#: flatcamGUI/FlatCAMGUI.py:1721 +#: flatcamGUI/MainGUI.py:1721 msgid "Jump to Coordinates" msgstr "Saltar a coordenadas" -#: flatcamGUI/FlatCAMGUI.py:1722 +#: flatcamGUI/MainGUI.py:1722 msgid "New Excellon" msgstr "Nueva Excellon" -#: flatcamGUI/FlatCAMGUI.py:1722 +#: flatcamGUI/MainGUI.py:1722 msgid "Move Obj" msgstr "Mover objetos" -#: flatcamGUI/FlatCAMGUI.py:1722 +#: flatcamGUI/MainGUI.py:1722 msgid "New Geometry" msgstr "Nueva geometría" -#: flatcamGUI/FlatCAMGUI.py:1722 +#: flatcamGUI/MainGUI.py:1722 msgid "Change Units" msgstr "Cambiar unidades" -#: flatcamGUI/FlatCAMGUI.py:1723 +#: flatcamGUI/MainGUI.py:1723 msgid "Open Properties Tool" msgstr "Abrir herramienta de propiedades" -#: flatcamGUI/FlatCAMGUI.py:1723 +#: flatcamGUI/MainGUI.py:1723 msgid "Rotate by 90 degree CW" msgstr "Rotar 90 grados CW" -#: flatcamGUI/FlatCAMGUI.py:1723 +#: flatcamGUI/MainGUI.py:1723 msgid "Shell Toggle" msgstr "Palanca de 'Shell'" -#: flatcamGUI/FlatCAMGUI.py:1724 +#: flatcamGUI/MainGUI.py:1724 msgid "" "Add a Tool (when in Geometry Selected Tab or in Tools NCC or Tools Paint)" msgstr "" "Agregue una herramienta (cuando esté en la pestaña Geometría seleccionada o " "en Herramientas NCC o Herramientas de pintura)" -#: flatcamGUI/FlatCAMGUI.py:1725 +#: flatcamGUI/MainGUI.py:1725 msgid "Flip on X_axis" msgstr "Voltear sobre el eje X" -#: flatcamGUI/FlatCAMGUI.py:1725 +#: flatcamGUI/MainGUI.py:1725 msgid "Flip on Y_axis" msgstr "Voltear sobre el eje Y" -#: flatcamGUI/FlatCAMGUI.py:1728 +#: flatcamGUI/MainGUI.py:1728 msgid "Copy Obj" msgstr "Copiar objetos" -#: flatcamGUI/FlatCAMGUI.py:1728 +#: flatcamGUI/MainGUI.py:1728 msgid "Open Tools Database" msgstr "Abrir la DB de herramientas" -#: flatcamGUI/FlatCAMGUI.py:1729 +#: flatcamGUI/MainGUI.py:1729 msgid "Open Excellon File" msgstr "Abierto Excellon" -#: flatcamGUI/FlatCAMGUI.py:1729 +#: flatcamGUI/MainGUI.py:1729 msgid "Open Gerber File" msgstr "Abrir Gerber" -#: flatcamGUI/FlatCAMGUI.py:1729 +#: flatcamGUI/MainGUI.py:1729 msgid "New Project" msgstr "Nuevo Proyecto" -#: flatcamGUI/FlatCAMGUI.py:1730 flatcamTools/ToolPDF.py:42 +#: flatcamGUI/MainGUI.py:1730 flatcamTools/ToolPDF.py:42 msgid "PDF Import Tool" msgstr "Herramienta de Importación de PDF" -#: flatcamGUI/FlatCAMGUI.py:1730 +#: flatcamGUI/MainGUI.py:1730 msgid "Save Project" msgstr "Guardar proyecto" -#: flatcamGUI/FlatCAMGUI.py:1730 +#: flatcamGUI/MainGUI.py:1730 msgid "Toggle Plot Area" msgstr "Alternar área de la parcela" -#: flatcamGUI/FlatCAMGUI.py:1733 +#: flatcamGUI/MainGUI.py:1733 msgid "Copy Obj_Name" msgstr "Copiar Nombre Obj" -#: flatcamGUI/FlatCAMGUI.py:1734 +#: flatcamGUI/MainGUI.py:1734 msgid "Toggle Code Editor" msgstr "Alternar editor de código" -#: flatcamGUI/FlatCAMGUI.py:1734 +#: flatcamGUI/MainGUI.py:1734 msgid "Toggle the axis" msgstr "Alternar el eje" -#: flatcamGUI/FlatCAMGUI.py:1734 flatcamGUI/FlatCAMGUI.py:1933 -#: flatcamGUI/FlatCAMGUI.py:2020 flatcamGUI/FlatCAMGUI.py:2142 +#: flatcamGUI/MainGUI.py:1734 flatcamGUI/MainGUI.py:1933 +#: flatcamGUI/MainGUI.py:2020 flatcamGUI/MainGUI.py:2142 msgid "Distance Minimum Tool" msgstr "Herramienta de Distancia Mínima" -#: flatcamGUI/FlatCAMGUI.py:1735 +#: flatcamGUI/MainGUI.py:1735 msgid "Open Preferences Window" msgstr "Abrir ventana de Preferencias" -#: flatcamGUI/FlatCAMGUI.py:1736 +#: flatcamGUI/MainGUI.py:1736 msgid "Rotate by 90 degree CCW" msgstr "Rotar en 90 grados CCW" -#: flatcamGUI/FlatCAMGUI.py:1736 +#: flatcamGUI/MainGUI.py:1736 msgid "Run a Script" msgstr "Ejecutar script TCL" -#: flatcamGUI/FlatCAMGUI.py:1736 +#: flatcamGUI/MainGUI.py:1736 msgid "Toggle the workspace" msgstr "Alternar espacio de trabajo" -#: flatcamGUI/FlatCAMGUI.py:1736 +#: flatcamGUI/MainGUI.py:1736 msgid "Skew on X axis" msgstr "Sesgar en el eje X" -#: flatcamGUI/FlatCAMGUI.py:1737 +#: flatcamGUI/MainGUI.py:1737 msgid "Skew on Y axis" msgstr "Sesgar en el eje Y" -#: flatcamGUI/FlatCAMGUI.py:1740 +#: flatcamGUI/MainGUI.py:1740 msgid "2-Sided PCB Tool" msgstr "Herra. de 2 lados" -#: flatcamGUI/FlatCAMGUI.py:1740 +#: flatcamGUI/MainGUI.py:1740 msgid "Transformations Tool" msgstr "Herramienta de Transformaciones" -#: flatcamGUI/FlatCAMGUI.py:1742 +#: flatcamGUI/MainGUI.py:1742 msgid "Solder Paste Dispensing Tool" msgstr "Herramienta de Dispensación de Pasta" -#: flatcamGUI/FlatCAMGUI.py:1743 +#: flatcamGUI/MainGUI.py:1743 msgid "Film PCB Tool" msgstr "Herramienta de Película" -#: flatcamGUI/FlatCAMGUI.py:1743 +#: flatcamGUI/MainGUI.py:1743 msgid "Non-Copper Clearing Tool" msgstr "Herramienta de Limpieza Sin Cobre" -#: flatcamGUI/FlatCAMGUI.py:1744 +#: flatcamGUI/MainGUI.py:1744 msgid "Paint Area Tool" msgstr "Herramienta de Area de Pintura" -#: flatcamGUI/FlatCAMGUI.py:1744 +#: flatcamGUI/MainGUI.py:1744 msgid "Rules Check Tool" msgstr "Herramienta de Verificación de Reglas" -#: flatcamGUI/FlatCAMGUI.py:1745 +#: flatcamGUI/MainGUI.py:1745 msgid "View File Source" msgstr "Ver fuente del archivo" -#: flatcamGUI/FlatCAMGUI.py:1746 +#: flatcamGUI/MainGUI.py:1746 msgid "Cutout PCB Tool" msgstr "Herra. de Corte" -#: flatcamGUI/FlatCAMGUI.py:1746 +#: flatcamGUI/MainGUI.py:1746 msgid "Enable all Plots" msgstr "Habilitar todas las parcelas" -#: flatcamGUI/FlatCAMGUI.py:1746 +#: flatcamGUI/MainGUI.py:1746 msgid "Disable all Plots" msgstr "Deshabilitar todas las parcelas" -#: flatcamGUI/FlatCAMGUI.py:1746 +#: flatcamGUI/MainGUI.py:1746 msgid "Disable Non-selected Plots" msgstr "Deshabilitar no seleccionado" -#: flatcamGUI/FlatCAMGUI.py:1747 +#: flatcamGUI/MainGUI.py:1747 msgid "Toggle Full Screen" msgstr "Alternar pantalla completa" -#: flatcamGUI/FlatCAMGUI.py:1750 +#: flatcamGUI/MainGUI.py:1750 msgid "Abort current task (gracefully)" msgstr "Abortar la tarea actual (con gracia)" -#: flatcamGUI/FlatCAMGUI.py:1753 +#: flatcamGUI/MainGUI.py:1753 msgid "Save Project As" msgstr "Guardar proyecto como" -#: flatcamGUI/FlatCAMGUI.py:1754 +#: flatcamGUI/MainGUI.py:1754 msgid "" "Paste Special. Will convert a Windows path style to the one required in Tcl " "Shell" @@ -6643,247 +6643,247 @@ msgstr "" "Pegado especial. Convertirá un estilo de ruta de Windows al requerido en Tcl " "Shell" -#: flatcamGUI/FlatCAMGUI.py:1757 +#: flatcamGUI/MainGUI.py:1757 msgid "Open Online Manual" msgstr "Abrir el manual en línea" -#: flatcamGUI/FlatCAMGUI.py:1758 +#: flatcamGUI/MainGUI.py:1758 msgid "Open Online Tutorials" msgstr "Abrir tutoriales en online" -#: flatcamGUI/FlatCAMGUI.py:1758 +#: flatcamGUI/MainGUI.py:1758 msgid "Refresh Plots" msgstr "Actualizar parcelas" -#: flatcamGUI/FlatCAMGUI.py:1758 flatcamTools/ToolSolderPaste.py:509 +#: flatcamGUI/MainGUI.py:1758 flatcamTools/ToolSolderPaste.py:509 msgid "Delete Object" msgstr "Eliminar objeto" -#: flatcamGUI/FlatCAMGUI.py:1758 +#: flatcamGUI/MainGUI.py:1758 msgid "Alternate: Delete Tool" msgstr "Alt.: Eliminar herramienta" -#: flatcamGUI/FlatCAMGUI.py:1759 +#: flatcamGUI/MainGUI.py:1759 msgid "(left to Key_1)Toggle Notebook Area (Left Side)" msgstr "(izquierda a Key_1) Alternar Área del Cuaderno (lado izquierdo)" -#: flatcamGUI/FlatCAMGUI.py:1759 +#: flatcamGUI/MainGUI.py:1759 msgid "En(Dis)able Obj Plot" msgstr "(Des)habilitar trazado Obj" -#: flatcamGUI/FlatCAMGUI.py:1760 +#: flatcamGUI/MainGUI.py:1760 msgid "Deselects all objects" msgstr "Desel. todos los objetos" -#: flatcamGUI/FlatCAMGUI.py:1774 +#: flatcamGUI/MainGUI.py:1774 msgid "Editor Shortcut list" msgstr "Lista de accesos directos del editor" -#: flatcamGUI/FlatCAMGUI.py:1928 +#: flatcamGUI/MainGUI.py:1928 msgid "GEOMETRY EDITOR" msgstr "EDITOR DE GEOMETRÍA" -#: flatcamGUI/FlatCAMGUI.py:1928 +#: flatcamGUI/MainGUI.py:1928 msgid "Draw an Arc" msgstr "Dibujar un arco" -#: flatcamGUI/FlatCAMGUI.py:1928 +#: flatcamGUI/MainGUI.py:1928 msgid "Copy Geo Item" msgstr "Copia Geo" -#: flatcamGUI/FlatCAMGUI.py:1929 +#: flatcamGUI/MainGUI.py:1929 msgid "Within Add Arc will toogle the ARC direction: CW or CCW" msgstr "Dentro de agregar arco alternará la dirección del ARCO: CW o CCW" -#: flatcamGUI/FlatCAMGUI.py:1929 +#: flatcamGUI/MainGUI.py:1929 msgid "Polygon Intersection Tool" msgstr "Herram. de Intersección Poli" -#: flatcamGUI/FlatCAMGUI.py:1930 +#: flatcamGUI/MainGUI.py:1930 msgid "Geo Paint Tool" msgstr "Herram. de pintura geo" -#: flatcamGUI/FlatCAMGUI.py:1930 flatcamGUI/FlatCAMGUI.py:2019 -#: flatcamGUI/FlatCAMGUI.py:2139 +#: flatcamGUI/MainGUI.py:1930 flatcamGUI/MainGUI.py:2019 +#: flatcamGUI/MainGUI.py:2139 msgid "Jump to Location (x, y)" msgstr "Saltar a la ubicación (x, y)" -#: flatcamGUI/FlatCAMGUI.py:1930 +#: flatcamGUI/MainGUI.py:1930 msgid "Toggle Corner Snap" msgstr "Alternar ajuste de esquina" -#: flatcamGUI/FlatCAMGUI.py:1930 +#: flatcamGUI/MainGUI.py:1930 msgid "Move Geo Item" msgstr "Mover elemento geo" -#: flatcamGUI/FlatCAMGUI.py:1931 +#: flatcamGUI/MainGUI.py:1931 msgid "Within Add Arc will cycle through the ARC modes" msgstr "Dentro de agregar arco, pasará por los modos de arco" -#: flatcamGUI/FlatCAMGUI.py:1931 +#: flatcamGUI/MainGUI.py:1931 msgid "Draw a Polygon" msgstr "Dibujar un polígono" -#: flatcamGUI/FlatCAMGUI.py:1931 +#: flatcamGUI/MainGUI.py:1931 msgid "Draw a Circle" msgstr "Dibuja un circulo" -#: flatcamGUI/FlatCAMGUI.py:1932 +#: flatcamGUI/MainGUI.py:1932 msgid "Draw a Path" msgstr "Dibujar un camino" -#: flatcamGUI/FlatCAMGUI.py:1932 +#: flatcamGUI/MainGUI.py:1932 msgid "Draw Rectangle" msgstr "Dibujar rectángulo" -#: flatcamGUI/FlatCAMGUI.py:1932 +#: flatcamGUI/MainGUI.py:1932 msgid "Polygon Subtraction Tool" msgstr "Herram. de Sustrac. de Polí" -#: flatcamGUI/FlatCAMGUI.py:1932 +#: flatcamGUI/MainGUI.py:1932 msgid "Add Text Tool" msgstr "Herramienta de Texto" -#: flatcamGUI/FlatCAMGUI.py:1933 +#: flatcamGUI/MainGUI.py:1933 msgid "Polygon Union Tool" msgstr "Herram. de Unión Poli" -#: flatcamGUI/FlatCAMGUI.py:1933 +#: flatcamGUI/MainGUI.py:1933 msgid "Flip shape on X axis" msgstr "Voltear en el eje X" -#: flatcamGUI/FlatCAMGUI.py:1933 +#: flatcamGUI/MainGUI.py:1933 msgid "Flip shape on Y axis" msgstr "Voltear en el eje Y" -#: flatcamGUI/FlatCAMGUI.py:1934 +#: flatcamGUI/MainGUI.py:1934 msgid "Skew shape on X axis" msgstr "Sesgar en el eje X" -#: flatcamGUI/FlatCAMGUI.py:1934 +#: flatcamGUI/MainGUI.py:1934 msgid "Skew shape on Y axis" msgstr "Sesgar en el eje Y" -#: flatcamGUI/FlatCAMGUI.py:1934 +#: flatcamGUI/MainGUI.py:1934 msgid "Editor Transformation Tool" msgstr "Herram. de transform. del editor" -#: flatcamGUI/FlatCAMGUI.py:1935 +#: flatcamGUI/MainGUI.py:1935 msgid "Offset shape on X axis" msgstr "Offset en el eje X" -#: flatcamGUI/FlatCAMGUI.py:1935 +#: flatcamGUI/MainGUI.py:1935 msgid "Offset shape on Y axis" msgstr "Offset en eje Y" -#: flatcamGUI/FlatCAMGUI.py:1936 flatcamGUI/FlatCAMGUI.py:2022 -#: flatcamGUI/FlatCAMGUI.py:2144 +#: flatcamGUI/MainGUI.py:1936 flatcamGUI/MainGUI.py:2022 +#: flatcamGUI/MainGUI.py:2144 msgid "Save Object and Exit Editor" msgstr "Guardar objeto y salir del editor" -#: flatcamGUI/FlatCAMGUI.py:1936 +#: flatcamGUI/MainGUI.py:1936 msgid "Polygon Cut Tool" msgstr "Herram. de Corte Poli" -#: flatcamGUI/FlatCAMGUI.py:1937 +#: flatcamGUI/MainGUI.py:1937 msgid "Rotate Geometry" msgstr "Rotar Geometría" -#: flatcamGUI/FlatCAMGUI.py:1937 +#: flatcamGUI/MainGUI.py:1937 msgid "Finish drawing for certain tools" msgstr "Terminar el dibujo de ciertas herramientas" -#: flatcamGUI/FlatCAMGUI.py:1937 flatcamGUI/FlatCAMGUI.py:2022 -#: flatcamGUI/FlatCAMGUI.py:2142 +#: flatcamGUI/MainGUI.py:1937 flatcamGUI/MainGUI.py:2022 +#: flatcamGUI/MainGUI.py:2142 msgid "Abort and return to Select" msgstr "Anular y volver a Seleccionar" -#: flatcamGUI/FlatCAMGUI.py:1938 flatcamGUI/FlatCAMGUI.py:2734 +#: flatcamGUI/MainGUI.py:1938 flatcamGUI/MainGUI.py:2734 msgid "Delete Shape" msgstr "Eliminar forma" -#: flatcamGUI/FlatCAMGUI.py:2018 +#: flatcamGUI/MainGUI.py:2018 msgid "EXCELLON EDITOR" msgstr "EDITOR DE EXCELLON" -#: flatcamGUI/FlatCAMGUI.py:2018 +#: flatcamGUI/MainGUI.py:2018 msgid "Copy Drill(s)" msgstr "Copia de taladro" -#: flatcamGUI/FlatCAMGUI.py:2018 flatcamGUI/FlatCAMGUI.py:2268 +#: flatcamGUI/MainGUI.py:2018 flatcamGUI/MainGUI.py:2268 msgid "Add Drill" msgstr "Añadir taladro" -#: flatcamGUI/FlatCAMGUI.py:2019 +#: flatcamGUI/MainGUI.py:2019 msgid "Move Drill(s)" msgstr "Mover taladro(s)" -#: flatcamGUI/FlatCAMGUI.py:2020 +#: flatcamGUI/MainGUI.py:2020 msgid "Add a new Tool" msgstr "Agregar una nueva herram" -#: flatcamGUI/FlatCAMGUI.py:2021 +#: flatcamGUI/MainGUI.py:2021 msgid "Delete Drill(s)" msgstr "Eliminar Taladro" -#: flatcamGUI/FlatCAMGUI.py:2021 +#: flatcamGUI/MainGUI.py:2021 msgid "Alternate: Delete Tool(s)" msgstr "Alt.: Eliminar herramienta (s)" -#: flatcamGUI/FlatCAMGUI.py:2138 +#: flatcamGUI/MainGUI.py:2138 msgid "GERBER EDITOR" msgstr "EDITOR GERBER" -#: flatcamGUI/FlatCAMGUI.py:2138 +#: flatcamGUI/MainGUI.py:2138 msgid "Add Disc" msgstr "Agregar disco" -#: flatcamGUI/FlatCAMGUI.py:2138 +#: flatcamGUI/MainGUI.py:2138 msgid "Add SemiDisc" msgstr "Añadir medio disco" -#: flatcamGUI/FlatCAMGUI.py:2140 +#: flatcamGUI/MainGUI.py:2140 msgid "Within Track & Region Tools will cycle in REVERSE the bend modes" msgstr "" "Dentro de la Pista y la Región, las herram.s alternarán en REVERSA los modos " "de plegado" -#: flatcamGUI/FlatCAMGUI.py:2141 +#: flatcamGUI/MainGUI.py:2141 msgid "Within Track & Region Tools will cycle FORWARD the bend modes" msgstr "" "Dentro de la Pista y la Región, las herram. avanzarán hacia adelante los " "modos de plegado" -#: flatcamGUI/FlatCAMGUI.py:2142 +#: flatcamGUI/MainGUI.py:2142 msgid "Alternate: Delete Apertures" msgstr "Alt.: Eliminar Aperturas" -#: flatcamGUI/FlatCAMGUI.py:2143 +#: flatcamGUI/MainGUI.py:2143 msgid "Eraser Tool" msgstr "Herramienta borrador" -#: flatcamGUI/FlatCAMGUI.py:2144 +#: flatcamGUI/MainGUI.py:2144 #: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:220 msgid "Mark Area Tool" msgstr "Herram. de Zona de Marca" -#: flatcamGUI/FlatCAMGUI.py:2144 +#: flatcamGUI/MainGUI.py:2144 msgid "Poligonize Tool" msgstr "Herram. de poligonización" -#: flatcamGUI/FlatCAMGUI.py:2144 +#: flatcamGUI/MainGUI.py:2144 msgid "Transformation Tool" msgstr "Herramienta de Transformación" -#: flatcamGUI/FlatCAMGUI.py:2161 +#: flatcamGUI/MainGUI.py:2161 msgid "Toggle Visibility" msgstr "Alternar visibilidad" -#: flatcamGUI/FlatCAMGUI.py:2167 +#: flatcamGUI/MainGUI.py:2167 msgid "New" msgstr "Nueva" -#: flatcamGUI/FlatCAMGUI.py:2169 flatcamGUI/ObjectUI.py:450 +#: flatcamGUI/MainGUI.py:2169 flatcamGUI/ObjectUI.py:450 #: flatcamObjects/FlatCAMGerber.py:239 flatcamObjects/FlatCAMGerber.py:327 #: flatcamTools/ToolCalibration.py:631 flatcamTools/ToolCalibration.py:648 #: flatcamTools/ToolCalibration.py:815 flatcamTools/ToolCopperThieving.py:144 @@ -6900,7 +6900,7 @@ msgstr "Nueva" msgid "Geometry" msgstr "Geometría" -#: flatcamGUI/FlatCAMGUI.py:2173 +#: flatcamGUI/MainGUI.py:2173 #: flatcamGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:99 #: flatcamTools/ToolAlignObjects.py:74 flatcamTools/ToolAlignObjects.py:110 #: flatcamTools/ToolCalibration.py:197 flatcamTools/ToolCalibration.py:631 @@ -6915,76 +6915,76 @@ msgstr "Geometría" msgid "Excellon" msgstr "Excellon" -#: flatcamGUI/FlatCAMGUI.py:2180 +#: flatcamGUI/MainGUI.py:2180 msgid "Grids" msgstr "Rejillas" -#: flatcamGUI/FlatCAMGUI.py:2187 +#: flatcamGUI/MainGUI.py:2187 msgid "Clear Plot" msgstr "Parcela clara" -#: flatcamGUI/FlatCAMGUI.py:2189 +#: flatcamGUI/MainGUI.py:2189 msgid "Replot" msgstr "Replantear" -#: flatcamGUI/FlatCAMGUI.py:2193 +#: flatcamGUI/MainGUI.py:2193 msgid "Geo Editor" msgstr "Geo Editor" -#: flatcamGUI/FlatCAMGUI.py:2195 +#: flatcamGUI/MainGUI.py:2195 msgid "Path" msgstr "Ruta" -#: flatcamGUI/FlatCAMGUI.py:2197 +#: flatcamGUI/MainGUI.py:2197 msgid "Rectangle" msgstr "Rectángulo" -#: flatcamGUI/FlatCAMGUI.py:2200 +#: flatcamGUI/MainGUI.py:2200 msgid "Circle" msgstr "Círculo" -#: flatcamGUI/FlatCAMGUI.py:2204 +#: flatcamGUI/MainGUI.py:2204 msgid "Arc" msgstr "Arco" -#: flatcamGUI/FlatCAMGUI.py:2218 +#: flatcamGUI/MainGUI.py:2218 msgid "Union" msgstr "Unión" -#: flatcamGUI/FlatCAMGUI.py:2220 +#: flatcamGUI/MainGUI.py:2220 msgid "Intersection" msgstr "Intersección" -#: flatcamGUI/FlatCAMGUI.py:2222 +#: flatcamGUI/MainGUI.py:2222 msgid "Subtraction" msgstr "Sustracción" -#: flatcamGUI/FlatCAMGUI.py:2224 flatcamGUI/ObjectUI.py:2221 +#: flatcamGUI/MainGUI.py:2224 flatcamGUI/ObjectUI.py:2221 #: flatcamGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:56 msgid "Cut" msgstr "Cortar" -#: flatcamGUI/FlatCAMGUI.py:2235 +#: flatcamGUI/MainGUI.py:2235 msgid "Pad" msgstr "Pad" -#: flatcamGUI/FlatCAMGUI.py:2237 +#: flatcamGUI/MainGUI.py:2237 msgid "Pad Array" msgstr "Matriz de Pad" -#: flatcamGUI/FlatCAMGUI.py:2241 +#: flatcamGUI/MainGUI.py:2241 msgid "Track" msgstr "Pista" -#: flatcamGUI/FlatCAMGUI.py:2243 +#: flatcamGUI/MainGUI.py:2243 msgid "Region" msgstr "Región" -#: flatcamGUI/FlatCAMGUI.py:2266 +#: flatcamGUI/MainGUI.py:2266 msgid "Exc Editor" msgstr "Exc Editor" -#: flatcamGUI/FlatCAMGUI.py:2311 +#: flatcamGUI/MainGUI.py:2311 msgid "" "Relative measurement.\n" "Reference is last click position" @@ -6992,7 +6992,7 @@ msgstr "" "Medida relativa.\n" "La referencia es la posición del último clic" -#: flatcamGUI/FlatCAMGUI.py:2317 +#: flatcamGUI/MainGUI.py:2317 msgid "" "Absolute measurement.\n" "Reference is (X=0, Y= 0) position" @@ -7000,35 +7000,35 @@ msgstr "" "Medida absoluta.\n" "La referencia es (X = 0, Y = 0) posición" -#: flatcamGUI/FlatCAMGUI.py:2419 +#: flatcamGUI/MainGUI.py:2419 msgid "Lock Toolbars" msgstr "Bloquear barras de herram" -#: flatcamGUI/FlatCAMGUI.py:2505 +#: flatcamGUI/MainGUI.py:2505 msgid "FlatCAM Preferences Folder opened." msgstr "Carpeta de preferencias de FlatCAM abierta." -#: flatcamGUI/FlatCAMGUI.py:2516 +#: flatcamGUI/MainGUI.py:2516 msgid "Are you sure you want to delete the GUI Settings? \n" msgstr "¿Está seguro de que desea eliminar la configuración de la GUI?\n" -#: flatcamGUI/FlatCAMGUI.py:2624 +#: flatcamGUI/MainGUI.py:2624 msgid "&Cutout Tool" msgstr "Herramienta de recorte" -#: flatcamGUI/FlatCAMGUI.py:2694 +#: flatcamGUI/MainGUI.py:2694 msgid "Select 'Esc'" msgstr "Selecciona 'Esc'" -#: flatcamGUI/FlatCAMGUI.py:2732 +#: flatcamGUI/MainGUI.py:2732 msgid "Copy Objects" msgstr "Copiar objetos" -#: flatcamGUI/FlatCAMGUI.py:2740 +#: flatcamGUI/MainGUI.py:2740 msgid "Move Objects" msgstr "Mover objetos" -#: flatcamGUI/FlatCAMGUI.py:3363 +#: flatcamGUI/MainGUI.py:3363 msgid "" "Please first select a geometry item to be cutted\n" "then select the geometry item that will be cutted\n" @@ -7040,12 +7040,12 @@ msgstr "" "fuera del primer artículo. Al final presione la tecla ~ X ~ o\n" "el botón de la barra de herramientas." -#: flatcamGUI/FlatCAMGUI.py:3370 flatcamGUI/FlatCAMGUI.py:3532 -#: flatcamGUI/FlatCAMGUI.py:3577 flatcamGUI/FlatCAMGUI.py:3597 +#: flatcamGUI/MainGUI.py:3370 flatcamGUI/MainGUI.py:3532 +#: flatcamGUI/MainGUI.py:3577 flatcamGUI/MainGUI.py:3597 msgid "Warning" msgstr "Advertencia" -#: flatcamGUI/FlatCAMGUI.py:3527 +#: flatcamGUI/MainGUI.py:3527 msgid "" "Please select geometry items \n" "on which to perform Intersection Tool." @@ -7053,7 +7053,7 @@ msgstr "" "Por favor seleccione elementos de geometría\n" "en el que realizar Herramienta de Intersección." -#: flatcamGUI/FlatCAMGUI.py:3572 +#: flatcamGUI/MainGUI.py:3572 msgid "" "Please select geometry items \n" "on which to perform Substraction Tool." @@ -7061,7 +7061,7 @@ msgstr "" "Por favor seleccione elementos de geometría\n" "en el que realizar la Herramienta de Substracción." -#: flatcamGUI/FlatCAMGUI.py:3592 +#: flatcamGUI/MainGUI.py:3592 msgid "" "Please select geometry items \n" "on which to perform union." @@ -7069,52 +7069,52 @@ msgstr "" "Por favor seleccione elementos de geometría\n" "en el que realizar la Unión." -#: flatcamGUI/FlatCAMGUI.py:3675 flatcamGUI/FlatCAMGUI.py:3890 +#: flatcamGUI/MainGUI.py:3675 flatcamGUI/MainGUI.py:3890 msgid "Cancelled. Nothing selected to delete." msgstr "Cancelado. Nada seleccionado para eliminar." -#: flatcamGUI/FlatCAMGUI.py:3759 flatcamGUI/FlatCAMGUI.py:4006 +#: flatcamGUI/MainGUI.py:3759 flatcamGUI/MainGUI.py:4006 msgid "Cancelled. Nothing selected to copy." msgstr "Cancelado. Nada seleccionado para copiar." -#: flatcamGUI/FlatCAMGUI.py:3805 flatcamGUI/FlatCAMGUI.py:4035 +#: flatcamGUI/MainGUI.py:3805 flatcamGUI/MainGUI.py:4035 msgid "Cancelled. Nothing selected to move." msgstr "Cancelado. Nada seleccionado para moverse." -#: flatcamGUI/FlatCAMGUI.py:4061 +#: flatcamGUI/MainGUI.py:4061 msgid "New Tool ..." msgstr "Nueva herramienta ..." -#: flatcamGUI/FlatCAMGUI.py:4062 flatcamTools/ToolNCC.py:924 +#: flatcamGUI/MainGUI.py:4062 flatcamTools/ToolNCC.py:924 #: flatcamTools/ToolPaint.py:850 flatcamTools/ToolSolderPaste.py:560 msgid "Enter a Tool Diameter" msgstr "Introduzca un diá. de herram" -#: flatcamGUI/FlatCAMGUI.py:4074 +#: flatcamGUI/MainGUI.py:4074 msgid "Adding Tool cancelled ..." msgstr "Añadiendo herramienta cancelada ..." -#: flatcamGUI/FlatCAMGUI.py:4088 +#: flatcamGUI/MainGUI.py:4088 msgid "Distance Tool exit..." msgstr "Salida de Herramienta de Distancia ..." -#: flatcamGUI/FlatCAMGUI.py:4323 flatcamGUI/FlatCAMGUI.py:4330 +#: flatcamGUI/MainGUI.py:4323 flatcamGUI/MainGUI.py:4330 msgid "Idle." msgstr "Ocioso." -#: flatcamGUI/FlatCAMGUI.py:4361 +#: flatcamGUI/MainGUI.py:4361 msgid "Application started ..." msgstr "Aplicacion iniciada ..." -#: flatcamGUI/FlatCAMGUI.py:4362 +#: flatcamGUI/MainGUI.py:4362 msgid "Hello!" msgstr "¡Hola!" -#: flatcamGUI/FlatCAMGUI.py:4424 +#: flatcamGUI/MainGUI.py:4424 msgid "Open Project ..." msgstr "Proyecto abierto ...Abierto &Project ..." -#: flatcamGUI/FlatCAMGUI.py:4450 +#: flatcamGUI/MainGUI.py:4450 msgid "Exit" msgstr "Salida" diff --git a/locale/fr/LC_MESSAGES/strings.po b/locale/fr/LC_MESSAGES/strings.po index ab74c9a0..190f1323 100644 --- a/locale/fr/LC_MESSAGES/strings.po +++ b/locale/fr/LC_MESSAGES/strings.po @@ -71,8 +71,8 @@ msgstr "" #: FlatCAMDB.py:709 FlatCAMDB.py:2125 FlatCAMDB.py:2171 #: flatcamEditors/FlatCAMExcEditor.py:1023 #: flatcamEditors/FlatCAMExcEditor.py:1091 -#: flatcamEditors/FlatCAMTextEditor.py:223 flatcamGUI/FlatCAMGUI.py:3443 -#: flatcamGUI/FlatCAMGUI.py:3659 flatcamGUI/FlatCAMGUI.py:3874 +#: flatcamEditors/FlatCAMTextEditor.py:223 flatcamGUI/MainGUI.py:3443 +#: flatcamGUI/MainGUI.py:3659 flatcamGUI/MainGUI.py:3874 #: flatcamObjects/ObjectCollection.py:126 flatcamTools/ToolFilm.py:754 #: flatcamTools/ToolFilm.py:900 flatcamTools/ToolImage.py:247 #: flatcamTools/ToolMove.py:269 flatcamTools/ToolPcbWizard.py:301 @@ -122,20 +122,20 @@ msgstr "Editeur activé ..." msgid "Do you want to save the edited object?" msgstr "Voulez-vous enregistrer l'objet ?" -#: FlatCAMApp.py:2225 flatcamGUI/FlatCAMGUI.py:2288 +#: FlatCAMApp.py:2225 flatcamGUI/MainGUI.py:2288 msgid "Close Editor" msgstr "Fermer l'éditeur" #: FlatCAMApp.py:2228 FlatCAMApp.py:3517 FlatCAMApp.py:6084 FlatCAMApp.py:7344 #: FlatCAMTranslation.py:109 FlatCAMTranslation.py:207 -#: flatcamGUI/FlatCAMGUI.py:2519 +#: flatcamGUI/MainGUI.py:2519 #: flatcamGUI/preferences/PreferencesUIManager.py:1118 msgid "Yes" msgstr "Oui" #: FlatCAMApp.py:2229 FlatCAMApp.py:3518 FlatCAMApp.py:6085 FlatCAMApp.py:7345 #: FlatCAMTranslation.py:110 FlatCAMTranslation.py:208 -#: flatcamGUI/FlatCAMGUI.py:2520 +#: flatcamGUI/MainGUI.py:2520 #: flatcamGUI/preferences/PreferencesUIManager.py:1119 #: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:164 #: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:150 @@ -145,7 +145,7 @@ msgstr "Non" #: FlatCAMApp.py:2230 FlatCAMApp.py:3519 FlatCAMApp.py:4477 FlatCAMApp.py:5102 #: FlatCAMApp.py:7346 FlatCAMDB.py:128 FlatCAMDB.py:1689 -#: flatcamGUI/FlatCAMGUI.py:1347 +#: flatcamGUI/MainGUI.py:1347 msgid "Cancel" msgstr "Annuler" @@ -274,7 +274,7 @@ msgstr "créé/sélectionné" msgid "Plotting" msgstr "Traçage" -#: FlatCAMApp.py:3089 flatcamGUI/FlatCAMGUI.py:545 +#: FlatCAMApp.py:3089 flatcamGUI/MainGUI.py:545 msgid "About FlatCAM" msgstr "À propos de FlatCAM" @@ -419,7 +419,7 @@ msgstr "Traducteur" msgid "Corrections" msgstr "Corrections" -#: FlatCAMApp.py:3454 FlatCAMApp.py:3463 flatcamGUI/FlatCAMGUI.py:527 +#: FlatCAMApp.py:3454 FlatCAMApp.py:3463 flatcamGUI/MainGUI.py:527 msgid "Bookmarks Manager" msgstr "Gestionnaire de favoris" @@ -446,7 +446,7 @@ msgstr "" msgid "Alternative website" msgstr "Site alternatif" -#: FlatCAMApp.py:3507 flatcamGUI/FlatCAMGUI.py:4244 +#: FlatCAMApp.py:3507 flatcamGUI/MainGUI.py:4244 msgid "Application is saving the project. Please wait ..." msgstr "Enregistrement du projet. Attendez ..." @@ -652,8 +652,8 @@ msgstr "Mauvaises coordonnées. Entrez les coordonnées au format: X, Y" #: flatcamEditors/FlatCAMGrbEditor.py:1490 #: flatcamEditors/FlatCAMGrbEditor.py:1759 #: flatcamEditors/FlatCAMGrbEditor.py:4622 -#: flatcamEditors/FlatCAMGrbEditor.py:4637 flatcamGUI/FlatCAMGUI.py:3424 -#: flatcamGUI/FlatCAMGUI.py:3436 flatcamTools/ToolAlignObjects.py:393 +#: flatcamEditors/FlatCAMGrbEditor.py:4637 flatcamGUI/MainGUI.py:3424 +#: flatcamGUI/MainGUI.py:3436 flatcamTools/ToolAlignObjects.py:393 #: flatcamTools/ToolAlignObjects.py:415 msgid "Done." msgstr "Terminé." @@ -804,12 +804,12 @@ msgstr "Aucun objet sélectionné pour incliner/cisailler sur l'axe Y." msgid "Skew on Y axis done." msgstr "Inclinaison sur l'axe des Y effectué." -#: FlatCAMApp.py:6496 FlatCAMApp.py:6543 flatcamGUI/FlatCAMGUI.py:503 -#: flatcamGUI/FlatCAMGUI.py:1728 +#: FlatCAMApp.py:6496 FlatCAMApp.py:6543 flatcamGUI/MainGUI.py:503 +#: flatcamGUI/MainGUI.py:1728 msgid "Select All" msgstr "Tout sélectionner" -#: FlatCAMApp.py:6500 FlatCAMApp.py:6547 flatcamGUI/FlatCAMGUI.py:505 +#: FlatCAMApp.py:6500 FlatCAMApp.py:6547 flatcamGUI/MainGUI.py:505 msgid "Deselect All" msgstr "Tout désélectionner" @@ -821,7 +821,7 @@ msgstr "Tous les objets sont sélectionnés." msgid "Objects selection is cleared." msgstr "La sélection des objets est effacée." -#: FlatCAMApp.py:6593 flatcamGUI/FlatCAMGUI.py:1721 +#: FlatCAMApp.py:6593 flatcamGUI/MainGUI.py:1721 msgid "Grid On/Off" msgstr "Grille On/Off" @@ -837,9 +837,9 @@ msgid "Add" msgstr "Ajouter" #: FlatCAMApp.py:6607 flatcamEditors/FlatCAMGrbEditor.py:2588 -#: flatcamEditors/FlatCAMGrbEditor.py:2736 flatcamGUI/FlatCAMGUI.py:751 -#: flatcamGUI/FlatCAMGUI.py:1074 flatcamGUI/FlatCAMGUI.py:2141 -#: flatcamGUI/FlatCAMGUI.py:2284 flatcamGUI/FlatCAMGUI.py:2777 +#: flatcamEditors/FlatCAMGrbEditor.py:2736 flatcamGUI/MainGUI.py:751 +#: flatcamGUI/MainGUI.py:1074 flatcamGUI/MainGUI.py:2141 +#: flatcamGUI/MainGUI.py:2284 flatcamGUI/MainGUI.py:2777 #: flatcamGUI/ObjectUI.py:1623 flatcamObjects/FlatCAMGeometry.py:480 #: flatcamTools/ToolNCC.py:316 flatcamTools/ToolNCC.py:637 #: flatcamTools/ToolPaint.py:299 flatcamTools/ToolPaint.py:682 @@ -925,8 +925,8 @@ msgstr "" msgid "New Project created" msgstr "Nouveau projet" -#: FlatCAMApp.py:7518 FlatCAMApp.py:7522 flatcamGUI/FlatCAMGUI.py:836 -#: flatcamGUI/FlatCAMGUI.py:2544 +#: FlatCAMApp.py:7518 FlatCAMApp.py:7522 flatcamGUI/MainGUI.py:836 +#: flatcamGUI/MainGUI.py:2544 msgid "Open Gerber" msgstr "Ouvrir Gerber" @@ -943,8 +943,8 @@ msgstr "" msgid "Opening Gerber file." msgstr "Ouvrir le fichier Gerber." -#: FlatCAMApp.py:7556 FlatCAMApp.py:7560 flatcamGUI/FlatCAMGUI.py:838 -#: flatcamGUI/FlatCAMGUI.py:2546 +#: FlatCAMApp.py:7556 FlatCAMApp.py:7560 flatcamGUI/MainGUI.py:838 +#: flatcamGUI/MainGUI.py:2546 msgid "Open Excellon" msgstr "Ouvrir Excellon" @@ -960,7 +960,7 @@ msgstr "Ouvrir G-code" msgid "Opening G-Code file." msgstr "Ouverture du fichier G-Code." -#: FlatCAMApp.py:7631 FlatCAMApp.py:7634 flatcamGUI/FlatCAMGUI.py:1730 +#: FlatCAMApp.py:7631 FlatCAMApp.py:7634 flatcamGUI/MainGUI.py:1730 msgid "Open Project" msgstr "Ouvrir Projet" @@ -1124,8 +1124,8 @@ msgstr "Fichier de script TCL ouvert dans l'éditeur de code exécuté." msgid "Save Project As ..." msgstr "Enregistrer le projet sous ..." -#: FlatCAMApp.py:8550 flatcamGUI/FlatCAMGUI.py:1134 -#: flatcamGUI/FlatCAMGUI.py:2176 +#: FlatCAMApp.py:8550 flatcamGUI/MainGUI.py:1134 +#: flatcamGUI/MainGUI.py:2176 msgid "Project" msgstr "Projet" @@ -1372,7 +1372,7 @@ msgstr "Effacer les projets récents" msgid "Clear Recent files" msgstr "Effacer les fichiers récents" -#: FlatCAMApp.py:10064 flatcamGUI/FlatCAMGUI.py:1363 +#: FlatCAMApp.py:10064 flatcamGUI/MainGUI.py:1363 msgid "Shortcut Key List" msgstr "Touches de raccourci" @@ -1533,47 +1533,47 @@ msgstr "Désactiver les plots ..." msgid "Working ..." msgstr "Travail ..." -#: FlatCAMApp.py:10557 flatcamGUI/FlatCAMGUI.py:703 +#: FlatCAMApp.py:10557 flatcamGUI/MainGUI.py:703 msgid "Red" msgstr "Rouge" -#: FlatCAMApp.py:10559 flatcamGUI/FlatCAMGUI.py:706 +#: FlatCAMApp.py:10559 flatcamGUI/MainGUI.py:706 msgid "Blue" msgstr "Bleu" -#: FlatCAMApp.py:10562 flatcamGUI/FlatCAMGUI.py:709 +#: FlatCAMApp.py:10562 flatcamGUI/MainGUI.py:709 msgid "Yellow" msgstr "Jaune" -#: FlatCAMApp.py:10564 flatcamGUI/FlatCAMGUI.py:712 +#: FlatCAMApp.py:10564 flatcamGUI/MainGUI.py:712 msgid "Green" msgstr "Vert" -#: FlatCAMApp.py:10566 flatcamGUI/FlatCAMGUI.py:715 +#: FlatCAMApp.py:10566 flatcamGUI/MainGUI.py:715 msgid "Purple" msgstr "Violet" -#: FlatCAMApp.py:10568 flatcamGUI/FlatCAMGUI.py:718 +#: FlatCAMApp.py:10568 flatcamGUI/MainGUI.py:718 msgid "Brown" msgstr "Marron" -#: FlatCAMApp.py:10570 FlatCAMApp.py:10626 flatcamGUI/FlatCAMGUI.py:721 +#: FlatCAMApp.py:10570 FlatCAMApp.py:10626 flatcamGUI/MainGUI.py:721 msgid "White" msgstr "Blanche" -#: FlatCAMApp.py:10572 flatcamGUI/FlatCAMGUI.py:724 +#: FlatCAMApp.py:10572 flatcamGUI/MainGUI.py:724 msgid "Black" msgstr "Noire" -#: FlatCAMApp.py:10575 flatcamGUI/FlatCAMGUI.py:729 +#: FlatCAMApp.py:10575 flatcamGUI/MainGUI.py:729 msgid "Custom" msgstr "Personnalisé" -#: FlatCAMApp.py:10585 flatcamGUI/FlatCAMGUI.py:737 +#: FlatCAMApp.py:10585 flatcamGUI/MainGUI.py:737 msgid "Default" msgstr "Défaut" -#: FlatCAMApp.py:10609 flatcamGUI/FlatCAMGUI.py:734 +#: FlatCAMApp.py:10609 flatcamGUI/MainGUI.py:734 msgid "Opacity" msgstr "Opacité" @@ -1693,7 +1693,7 @@ msgstr "Signet supprimé." msgid "Export FlatCAM Bookmarks" msgstr "Exporter les signets FlatCAM" -#: FlatCAMBookmark.py:293 flatcamGUI/FlatCAMGUI.py:524 +#: FlatCAMBookmark.py:293 flatcamGUI/MainGUI.py:524 msgid "Bookmarks" msgstr "Internet" @@ -3138,7 +3138,7 @@ msgstr "" "Supprimer un outil dans la liste des outils\n" "en sélectionnant une ligne dans la table d'outils." -#: flatcamEditors/FlatCAMExcEditor.py:1650 flatcamGUI/FlatCAMGUI.py:2019 +#: flatcamEditors/FlatCAMExcEditor.py:1650 flatcamGUI/MainGUI.py:2019 msgid "Resize Drill(s)" msgstr "Redim. les Forets" @@ -3162,8 +3162,8 @@ msgstr "Redimensionner" msgid "Resize drill(s)" msgstr "Redimensionner les forets" -#: flatcamEditors/FlatCAMExcEditor.py:1699 flatcamGUI/FlatCAMGUI.py:2018 -#: flatcamGUI/FlatCAMGUI.py:2270 +#: flatcamEditors/FlatCAMExcEditor.py:1699 flatcamGUI/MainGUI.py:2018 +#: flatcamGUI/MainGUI.py:2270 msgid "Add Drill Array" msgstr "Ajouter un Tableau de Forage" @@ -3475,7 +3475,7 @@ 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:2579 flatcamGUI/FlatCAMGUI.py:4071 +#: flatcamEditors/FlatCAMExcEditor.py:2579 flatcamGUI/MainGUI.py:4071 msgid "Added new tool with dia" msgstr "Ajout d'un nouvel outil avec dia" @@ -3584,7 +3584,7 @@ msgid "Full Buffer" msgstr "Plein tampon" #: flatcamEditors/FlatCAMGeoEditor.py:132 -#: flatcamEditors/FlatCAMGeoEditor.py:3017 flatcamGUI/FlatCAMGUI.py:1928 +#: flatcamEditors/FlatCAMGeoEditor.py:3017 flatcamGUI/MainGUI.py:1928 #: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:190 msgid "Buffer Tool" msgstr "Outil Tampon" @@ -3605,7 +3605,7 @@ msgstr "" msgid "Font" msgstr "Police" -#: flatcamEditors/FlatCAMGeoEditor.py:323 flatcamGUI/FlatCAMGUI.py:2208 +#: flatcamEditors/FlatCAMGeoEditor.py:323 flatcamGUI/MainGUI.py:2208 msgid "Text" msgstr "Texte" @@ -3613,8 +3613,8 @@ msgstr "Texte" msgid "Text Tool" msgstr "Outil Texte" -#: flatcamEditors/FlatCAMGeoEditor.py:405 flatcamGUI/FlatCAMGUI.py:511 -#: flatcamGUI/FlatCAMGUI.py:1158 flatcamGUI/ObjectUI.py:818 +#: flatcamEditors/FlatCAMGeoEditor.py:405 flatcamGUI/MainGUI.py:511 +#: flatcamGUI/MainGUI.py:1158 flatcamGUI/ObjectUI.py:818 #: flatcamGUI/ObjectUI.py:1662 flatcamObjects/FlatCAMExcellon.py:742 #: flatcamObjects/FlatCAMExcellon.py:1084 flatcamObjects/FlatCAMGeometry.py:731 #: flatcamTools/ToolNCC.py:331 flatcamTools/ToolNCC.py:797 @@ -3651,12 +3651,12 @@ msgstr "Relier:" msgid "Contour:" msgstr "Contour:" -#: flatcamEditors/FlatCAMGeoEditor.py:529 flatcamGUI/FlatCAMGUI.py:2212 +#: flatcamEditors/FlatCAMGeoEditor.py:529 flatcamGUI/MainGUI.py:2212 msgid "Paint" msgstr "Peindre" -#: flatcamEditors/FlatCAMGeoEditor.py:547 flatcamGUI/FlatCAMGUI.py:924 -#: flatcamGUI/FlatCAMGUI.py:2628 flatcamGUI/ObjectUI.py:2059 +#: flatcamEditors/FlatCAMGeoEditor.py:547 flatcamGUI/MainGUI.py:924 +#: flatcamGUI/MainGUI.py:2628 flatcamGUI/ObjectUI.py:2059 #: flatcamTools/ToolPaint.py:43 flatcamTools/ToolPaint.py:738 msgid "Paint Tool" msgstr "Outil de Peinture" @@ -3683,8 +3683,8 @@ msgstr "Outils" #: flatcamEditors/FlatCAMGeoEditor.py:607 #: flatcamEditors/FlatCAMGeoEditor.py:991 #: flatcamEditors/FlatCAMGrbEditor.py:5306 -#: flatcamEditors/FlatCAMGrbEditor.py:5703 flatcamGUI/FlatCAMGUI.py:945 -#: flatcamGUI/FlatCAMGUI.py:2649 flatcamTools/ToolTransform.py:460 +#: flatcamEditors/FlatCAMGrbEditor.py:5703 flatcamGUI/MainGUI.py:945 +#: flatcamGUI/MainGUI.py:2649 flatcamTools/ToolTransform.py:460 msgid "Transform Tool" msgstr "Outil de Transformation" @@ -3704,9 +3704,9 @@ msgstr "Inclinaison/Cisaillement" #: flatcamEditors/FlatCAMGeoEditor.py:610 #: flatcamEditors/FlatCAMGrbEditor.py:2680 -#: flatcamEditors/FlatCAMGrbEditor.py:5309 flatcamGUI/FlatCAMGUI.py:1063 -#: flatcamGUI/FlatCAMGUI.py:2140 flatcamGUI/FlatCAMGUI.py:2255 -#: flatcamGUI/FlatCAMGUI.py:2767 flatcamGUI/ObjectUI.py:125 +#: flatcamEditors/FlatCAMGrbEditor.py:5309 flatcamGUI/MainGUI.py:1063 +#: flatcamGUI/MainGUI.py:2140 flatcamGUI/MainGUI.py:2255 +#: flatcamGUI/MainGUI.py:2767 flatcamGUI/ObjectUI.py:125 #: flatcamGUI/preferences/tools/ToolsTransformPrefGroupUI.py:95 #: flatcamTools/ToolTransform.py:26 msgid "Scale" @@ -3718,8 +3718,8 @@ msgid "Mirror (Flip)" msgstr "Miroir (flip)" #: flatcamEditors/FlatCAMGeoEditor.py:625 -#: flatcamEditors/FlatCAMGrbEditor.py:5324 flatcamGUI/FlatCAMGUI.py:856 -#: flatcamGUI/FlatCAMGUI.py:2564 +#: flatcamEditors/FlatCAMGrbEditor.py:5324 flatcamGUI/MainGUI.py:856 +#: flatcamGUI/MainGUI.py:2564 msgid "Editor" msgstr "Éditeur" @@ -4443,7 +4443,7 @@ msgstr "L'anneau" msgid "Line" msgstr "Ligne" -#: flatcamEditors/FlatCAMGeoEditor.py:3591 flatcamGUI/FlatCAMGUI.py:2202 +#: flatcamEditors/FlatCAMGeoEditor.py:3591 flatcamGUI/MainGUI.py:2202 #: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:328 #: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:292 #: flatcamTools/ToolNCC.py:584 flatcamTools/ToolPaint.py:528 @@ -4470,10 +4470,10 @@ msgstr "Modification de la géométrie MultiGeo, outil" msgid "with diameter" msgstr "avec diamètre" -#: flatcamEditors/FlatCAMGeoEditor.py:4509 flatcamGUI/FlatCAMGUI.py:3753 -#: flatcamGUI/FlatCAMGUI.py:3799 flatcamGUI/FlatCAMGUI.py:3817 -#: flatcamGUI/FlatCAMGUI.py:3961 flatcamGUI/FlatCAMGUI.py:4000 -#: flatcamGUI/FlatCAMGUI.py:4012 flatcamGUI/FlatCAMGUI.py:4029 +#: flatcamEditors/FlatCAMGeoEditor.py:4509 flatcamGUI/MainGUI.py:3753 +#: flatcamGUI/MainGUI.py:3799 flatcamGUI/MainGUI.py:3817 +#: flatcamGUI/MainGUI.py:3961 flatcamGUI/MainGUI.py:4000 +#: flatcamGUI/MainGUI.py:4012 flatcamGUI/MainGUI.py:4029 msgid "Click on target point." msgstr "Cliquez sur le point cible." @@ -4702,7 +4702,7 @@ msgstr "Terminé. Déplacement des ouvertures terminé." msgid "Done. Apertures copied." msgstr "Terminé. Ouvertures copiées." -#: flatcamEditors/FlatCAMGrbEditor.py:2455 flatcamGUI/FlatCAMGUI.py:2233 +#: flatcamEditors/FlatCAMGrbEditor.py:2455 flatcamGUI/MainGUI.py:2233 #: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:27 msgid "Gerber Editor" msgstr "Editeur Gerber" @@ -4864,9 +4864,9 @@ msgstr "" " - \"Biseauté:\" le coin est une ligne qui relie directement les " "fonctionnalités réunies dans le coin" -#: flatcamEditors/FlatCAMGrbEditor.py:2640 flatcamGUI/FlatCAMGUI.py:1061 -#: flatcamGUI/FlatCAMGUI.py:2138 flatcamGUI/FlatCAMGUI.py:2210 -#: flatcamGUI/FlatCAMGUI.py:2253 flatcamGUI/FlatCAMGUI.py:2765 +#: flatcamEditors/FlatCAMGrbEditor.py:2640 flatcamGUI/MainGUI.py:1061 +#: flatcamGUI/MainGUI.py:2138 flatcamGUI/MainGUI.py:2210 +#: flatcamGUI/MainGUI.py:2253 flatcamGUI/MainGUI.py:2765 #: flatcamGUI/preferences/tools/ToolsTransformPrefGroupUI.py:200 #: flatcamTools/ToolTransform.py:29 msgid "Buffer" @@ -4941,8 +4941,8 @@ msgstr "Supprimer tous les polygones marqués." msgid "Clear all the markings." msgstr "Effacer toutes les marques." -#: flatcamEditors/FlatCAMGrbEditor.py:2764 flatcamGUI/FlatCAMGUI.py:1046 -#: flatcamGUI/FlatCAMGUI.py:2138 flatcamGUI/FlatCAMGUI.py:2750 +#: flatcamEditors/FlatCAMGrbEditor.py:2764 flatcamGUI/MainGUI.py:1046 +#: flatcamGUI/MainGUI.py:2138 flatcamGUI/MainGUI.py:2750 msgid "Add Pad Array" msgstr "Ajouter un Tableau de Pads" @@ -5251,129 +5251,129 @@ msgstr "Enregistré dans" msgid "Code Editor content copied to clipboard ..." msgstr "Contenu de l'éditeur de code copié dans le Presse-papiers ..." -#: flatcamGUI/FlatCAMGUI.py:78 flatcamGUI/FlatCAMGUI.py:80 -#: flatcamGUI/FlatCAMGUI.py:2163 +#: flatcamGUI/MainGUI.py:78 flatcamGUI/MainGUI.py:80 +#: flatcamGUI/MainGUI.py:2163 msgid "Toggle Panel" msgstr "Basculer le Panneau" -#: flatcamGUI/FlatCAMGUI.py:90 +#: flatcamGUI/MainGUI.py:90 msgid "File" msgstr "Fichier" -#: flatcamGUI/FlatCAMGUI.py:95 +#: flatcamGUI/MainGUI.py:95 msgid "&New Project ...\tCtrl+N" msgstr "Nouveau projet ...\tCtrl+N" -#: flatcamGUI/FlatCAMGUI.py:97 +#: flatcamGUI/MainGUI.py:97 msgid "Will create a new, blank project" msgstr "Va créer un nouveau projet vierge" -#: flatcamGUI/FlatCAMGUI.py:102 +#: flatcamGUI/MainGUI.py:102 msgid "&New" msgstr "Nouveau" -#: flatcamGUI/FlatCAMGUI.py:106 +#: flatcamGUI/MainGUI.py:106 msgid "Geometry\tN" msgstr "Géométrie\tN" -#: flatcamGUI/FlatCAMGUI.py:108 +#: flatcamGUI/MainGUI.py:108 msgid "Will create a new, empty Geometry Object." msgstr "Crée un nouvel objet de géométrie vide." -#: flatcamGUI/FlatCAMGUI.py:111 +#: flatcamGUI/MainGUI.py:111 msgid "Gerber\tB" msgstr "Gerber\tB" -#: flatcamGUI/FlatCAMGUI.py:113 +#: flatcamGUI/MainGUI.py:113 msgid "Will create a new, empty Gerber Object." msgstr "Crée un nouvel objet Gerber vide." -#: flatcamGUI/FlatCAMGUI.py:116 +#: flatcamGUI/MainGUI.py:116 msgid "Excellon\tL" msgstr "Excellon\tL" -#: flatcamGUI/FlatCAMGUI.py:118 +#: flatcamGUI/MainGUI.py:118 msgid "Will create a new, empty Excellon Object." msgstr "Va créer un nouvel objet vide vide." -#: flatcamGUI/FlatCAMGUI.py:123 +#: flatcamGUI/MainGUI.py:123 msgid "Document\tD" msgstr "Document\tD" -#: flatcamGUI/FlatCAMGUI.py:125 +#: flatcamGUI/MainGUI.py:125 msgid "Will create a new, empty Document Object." msgstr "Crée un nouvel objet de document vide." -#: flatcamGUI/FlatCAMGUI.py:129 flatcamGUI/FlatCAMGUI.py:4397 +#: flatcamGUI/MainGUI.py:129 flatcamGUI/MainGUI.py:4397 #: flatcamTools/ToolPcbWizard.py:62 flatcamTools/ToolPcbWizard.py:69 msgid "Open" msgstr "Ouvrir" -#: flatcamGUI/FlatCAMGUI.py:134 +#: flatcamGUI/MainGUI.py:134 msgid "Open &Project ..." msgstr "Ouvrir Projet ..." -#: flatcamGUI/FlatCAMGUI.py:140 flatcamGUI/FlatCAMGUI.py:4407 +#: flatcamGUI/MainGUI.py:140 flatcamGUI/MainGUI.py:4407 msgid "Open &Gerber ...\tCtrl+G" msgstr "Ouvrir Gerber...\tCtrl+G" -#: flatcamGUI/FlatCAMGUI.py:145 flatcamGUI/FlatCAMGUI.py:4412 +#: flatcamGUI/MainGUI.py:145 flatcamGUI/MainGUI.py:4412 msgid "Open &Excellon ...\tCtrl+E" msgstr "Ouvrir Excellon ...\tCtrl+E" -#: flatcamGUI/FlatCAMGUI.py:150 flatcamGUI/FlatCAMGUI.py:4417 +#: flatcamGUI/MainGUI.py:150 flatcamGUI/MainGUI.py:4417 msgid "Open G-&Code ..." msgstr "Ouvrir G-Code ..." -#: flatcamGUI/FlatCAMGUI.py:157 +#: flatcamGUI/MainGUI.py:157 msgid "Open Config ..." msgstr "Configuration ..." -#: flatcamGUI/FlatCAMGUI.py:162 +#: flatcamGUI/MainGUI.py:162 msgid "Recent projects" msgstr "Projets récents" -#: flatcamGUI/FlatCAMGUI.py:164 +#: flatcamGUI/MainGUI.py:164 msgid "Recent files" msgstr "Fichiers récents" -#: flatcamGUI/FlatCAMGUI.py:167 flatcamGUI/FlatCAMGUI.py:753 -#: flatcamGUI/FlatCAMGUI.py:1339 +#: flatcamGUI/MainGUI.py:167 flatcamGUI/MainGUI.py:753 +#: flatcamGUI/MainGUI.py:1339 msgid "Save" msgstr "Enregister" -#: flatcamGUI/FlatCAMGUI.py:171 +#: flatcamGUI/MainGUI.py:171 msgid "&Save Project ...\tCtrl+S" msgstr "Enregistrer le projet...\tCtrl+S" -#: flatcamGUI/FlatCAMGUI.py:176 +#: flatcamGUI/MainGUI.py:176 msgid "Save Project &As ...\tCtrl+Shift+S" msgstr "Enregistrer le projet sous...\tCtrl+Shift+S" -#: flatcamGUI/FlatCAMGUI.py:191 +#: flatcamGUI/MainGUI.py:191 msgid "Scripting" msgstr "Scripte" -#: flatcamGUI/FlatCAMGUI.py:195 flatcamGUI/FlatCAMGUI.py:903 -#: flatcamGUI/FlatCAMGUI.py:2607 +#: flatcamGUI/MainGUI.py:195 flatcamGUI/MainGUI.py:903 +#: flatcamGUI/MainGUI.py:2607 msgid "New Script ..." msgstr "Nouveau script ..." -#: flatcamGUI/FlatCAMGUI.py:197 flatcamGUI/FlatCAMGUI.py:905 -#: flatcamGUI/FlatCAMGUI.py:2609 +#: flatcamGUI/MainGUI.py:197 flatcamGUI/MainGUI.py:905 +#: flatcamGUI/MainGUI.py:2609 msgid "Open Script ..." msgstr "Ouvrir Script ..." -#: flatcamGUI/FlatCAMGUI.py:199 +#: flatcamGUI/MainGUI.py:199 msgid "Open Example ..." msgstr "Ouvrir l'exemple ..." -#: flatcamGUI/FlatCAMGUI.py:201 flatcamGUI/FlatCAMGUI.py:907 -#: flatcamGUI/FlatCAMGUI.py:2611 flatcamGUI/FlatCAMGUI.py:4386 +#: flatcamGUI/MainGUI.py:201 flatcamGUI/MainGUI.py:907 +#: flatcamGUI/MainGUI.py:2611 flatcamGUI/MainGUI.py:4386 msgid "Run Script ..." msgstr "Exécutez le script ..." -#: flatcamGUI/FlatCAMGUI.py:203 flatcamGUI/FlatCAMGUI.py:4388 +#: flatcamGUI/MainGUI.py:203 flatcamGUI/MainGUI.py:4388 msgid "" "Will run the opened Tcl Script thus\n" "enabling the automation of certain\n" @@ -5383,47 +5383,47 @@ msgstr "" "Permet l’automatisation de \n" "fonctions dans FlatCAM." -#: flatcamGUI/FlatCAMGUI.py:218 +#: flatcamGUI/MainGUI.py:218 msgid "Import" msgstr "Importation" -#: flatcamGUI/FlatCAMGUI.py:220 +#: flatcamGUI/MainGUI.py:220 msgid "&SVG as Geometry Object ..." msgstr "SVG comme objet de géométrie ..." -#: flatcamGUI/FlatCAMGUI.py:223 +#: flatcamGUI/MainGUI.py:223 msgid "&SVG as Gerber Object ..." msgstr "SVG comme objet Gerber ..." -#: flatcamGUI/FlatCAMGUI.py:228 +#: flatcamGUI/MainGUI.py:228 msgid "&DXF as Geometry Object ..." msgstr "DXF comme objet de géométrie ..." -#: flatcamGUI/FlatCAMGUI.py:231 +#: flatcamGUI/MainGUI.py:231 msgid "&DXF as Gerber Object ..." msgstr "DXF en tant qu'objet Gerber ..." -#: flatcamGUI/FlatCAMGUI.py:235 +#: flatcamGUI/MainGUI.py:235 msgid "HPGL2 as Geometry Object ..." msgstr "HPGL2 comme objet géométrique ..." -#: flatcamGUI/FlatCAMGUI.py:241 +#: flatcamGUI/MainGUI.py:241 msgid "Export" msgstr "Exportation" -#: flatcamGUI/FlatCAMGUI.py:245 +#: flatcamGUI/MainGUI.py:245 msgid "Export &SVG ..." msgstr "Exporter SVG ..." -#: flatcamGUI/FlatCAMGUI.py:249 +#: flatcamGUI/MainGUI.py:249 msgid "Export DXF ..." msgstr "Exporter DXF ..." -#: flatcamGUI/FlatCAMGUI.py:255 +#: flatcamGUI/MainGUI.py:255 msgid "Export &PNG ..." msgstr "Exporter PNG ..." -#: flatcamGUI/FlatCAMGUI.py:257 +#: flatcamGUI/MainGUI.py:257 msgid "" "Will export an image in PNG format,\n" "the saved image will contain the visual \n" @@ -5433,11 +5433,11 @@ msgstr "" "L'image enregistrée contiendra le visuel\n" "de la zone de tracé de FlatCAM." -#: flatcamGUI/FlatCAMGUI.py:266 +#: flatcamGUI/MainGUI.py:266 msgid "Export &Excellon ..." msgstr "Exporter Excellon ..." -#: flatcamGUI/FlatCAMGUI.py:268 +#: flatcamGUI/MainGUI.py:268 msgid "" "Will export an Excellon Object as Excellon file,\n" "the coordinates format, the file units and zeros\n" @@ -5447,11 +5447,11 @@ msgstr "" "le format des coordonnées, les unités de fichier et les zéros\n" "sont définies dans Paramètres -> Excellon Export." -#: flatcamGUI/FlatCAMGUI.py:275 +#: flatcamGUI/MainGUI.py:275 msgid "Export &Gerber ..." msgstr "Exporter Gerber ..." -#: flatcamGUI/FlatCAMGUI.py:277 +#: flatcamGUI/MainGUI.py:277 msgid "" "Will export an Gerber Object as Gerber file,\n" "the coordinates format, the file units and zeros\n" @@ -5461,53 +5461,53 @@ msgstr "" "le format des coordonnées, les unités de fichier et les zéros\n" "sont définies dans Paramètres -> Exportation Gerber." -#: flatcamGUI/FlatCAMGUI.py:287 +#: flatcamGUI/MainGUI.py:287 msgid "Backup" msgstr "F. Paramètres" -#: flatcamGUI/FlatCAMGUI.py:292 +#: flatcamGUI/MainGUI.py:292 msgid "Import Preferences from file ..." msgstr "Importer les paramètres …" -#: flatcamGUI/FlatCAMGUI.py:298 +#: flatcamGUI/MainGUI.py:298 msgid "Export Preferences to file ..." msgstr "Exporter les paramètres ..." -#: flatcamGUI/FlatCAMGUI.py:306 +#: flatcamGUI/MainGUI.py:306 #: flatcamGUI/preferences/PreferencesUIManager.py:1115 msgid "Save Preferences" msgstr "Enregistrer les préf" -#: flatcamGUI/FlatCAMGUI.py:312 flatcamGUI/FlatCAMGUI.py:1730 +#: flatcamGUI/MainGUI.py:312 flatcamGUI/MainGUI.py:1730 msgid "Print (PDF)" msgstr "Imprimer (PDF)" -#: flatcamGUI/FlatCAMGUI.py:320 +#: flatcamGUI/MainGUI.py:320 msgid "E&xit" msgstr "Quitter" -#: flatcamGUI/FlatCAMGUI.py:328 flatcamGUI/FlatCAMGUI.py:747 -#: flatcamGUI/FlatCAMGUI.py:2286 +#: flatcamGUI/MainGUI.py:328 flatcamGUI/MainGUI.py:747 +#: flatcamGUI/MainGUI.py:2286 msgid "Edit" msgstr "Modifier" -#: flatcamGUI/FlatCAMGUI.py:332 +#: flatcamGUI/MainGUI.py:332 msgid "Edit Object\tE" msgstr "Modifier un objet\tE" -#: flatcamGUI/FlatCAMGUI.py:334 +#: flatcamGUI/MainGUI.py:334 msgid "Close Editor\tCtrl+S" msgstr "Fermer l'éditeur\tCtrl+S" -#: flatcamGUI/FlatCAMGUI.py:343 +#: flatcamGUI/MainGUI.py:343 msgid "Conversion" msgstr "Conversion" -#: flatcamGUI/FlatCAMGUI.py:345 +#: flatcamGUI/MainGUI.py:345 msgid "&Join Geo/Gerber/Exc -> Geo" msgstr "Rejoindre Geo/Gerber/Exc -> Geo" -#: flatcamGUI/FlatCAMGUI.py:347 +#: flatcamGUI/MainGUI.py:347 msgid "" "Merge a selection of objects, which can be of type:\n" "- Gerber\n" @@ -5521,30 +5521,30 @@ msgstr "" "- Géométrie\n" "dans un nouvel objet de géométrie combo." -#: flatcamGUI/FlatCAMGUI.py:354 +#: flatcamGUI/MainGUI.py:354 msgid "Join Excellon(s) -> Excellon" msgstr "Rejoignez Excellon(s) -> Excellon" -#: flatcamGUI/FlatCAMGUI.py:356 +#: flatcamGUI/MainGUI.py:356 msgid "Merge a selection of Excellon objects into a new combo Excellon object." msgstr "" "Fusionner une sélection d'objets Excellon dans un nouvel objet Excellon " "combo." -#: flatcamGUI/FlatCAMGUI.py:359 +#: flatcamGUI/MainGUI.py:359 msgid "Join Gerber(s) -> Gerber" msgstr "Rejoindre Gerber(s) -> Gerber" -#: flatcamGUI/FlatCAMGUI.py:361 +#: flatcamGUI/MainGUI.py:361 msgid "Merge a selection of Gerber objects into a new combo Gerber object." msgstr "" "Fusionner une sélection d'objets Gerber dans un nouvel objet Gerber combiné." -#: flatcamGUI/FlatCAMGUI.py:366 +#: flatcamGUI/MainGUI.py:366 msgid "Convert Single to MultiGeo" msgstr "Convertir Unique en MultiGeo" -#: flatcamGUI/FlatCAMGUI.py:368 +#: flatcamGUI/MainGUI.py:368 msgid "" "Will convert a Geometry object from single_geometry type\n" "to a multi_geometry type." @@ -5552,11 +5552,11 @@ msgstr "" "Convertira un objet Géométrie à partir d'un type de géométrie unique\n" "à un type multi géométrie." -#: flatcamGUI/FlatCAMGUI.py:372 +#: flatcamGUI/MainGUI.py:372 msgid "Convert Multi to SingleGeo" msgstr "Convertir Multi en Unique Géo" -#: flatcamGUI/FlatCAMGUI.py:374 +#: flatcamGUI/MainGUI.py:374 msgid "" "Will convert a Geometry object from multi_geometry type\n" "to a single_geometry type." @@ -5564,756 +5564,756 @@ msgstr "" "Convertira un objet multi-géométrie en un type simple-géométrie " "(concaténation)." -#: flatcamGUI/FlatCAMGUI.py:381 +#: flatcamGUI/MainGUI.py:381 msgid "Convert Any to Geo" msgstr "Convertir en Géo" -#: flatcamGUI/FlatCAMGUI.py:384 +#: flatcamGUI/MainGUI.py:384 msgid "Convert Any to Gerber" msgstr "Convertir en Gerber" -#: flatcamGUI/FlatCAMGUI.py:390 +#: flatcamGUI/MainGUI.py:390 msgid "&Copy\tCtrl+C" msgstr "Copie\tCtrl+C" -#: flatcamGUI/FlatCAMGUI.py:395 +#: flatcamGUI/MainGUI.py:395 msgid "&Delete\tDEL" msgstr "Supprimer\tDEL" -#: flatcamGUI/FlatCAMGUI.py:400 +#: flatcamGUI/MainGUI.py:400 msgid "Se&t Origin\tO" msgstr "Définir L'origine\tO" -#: flatcamGUI/FlatCAMGUI.py:402 +#: flatcamGUI/MainGUI.py:402 msgid "Move to Origin\tShift+O" msgstr "Déplacer vers l'origine\tShift+O" -#: flatcamGUI/FlatCAMGUI.py:405 +#: flatcamGUI/MainGUI.py:405 msgid "Jump to Location\tJ" msgstr "Aller à l'emplacement\tJ" -#: flatcamGUI/FlatCAMGUI.py:407 +#: flatcamGUI/MainGUI.py:407 msgid "Locate in Object\tShift+J" msgstr "Localiser dans l'objet\tShift+J" -#: flatcamGUI/FlatCAMGUI.py:412 +#: flatcamGUI/MainGUI.py:412 msgid "Toggle Units\tQ" msgstr "Basculer les Unités\tQ" -#: flatcamGUI/FlatCAMGUI.py:414 +#: flatcamGUI/MainGUI.py:414 msgid "&Select All\tCtrl+A" msgstr "Tout sélectionner\tCtrl+A" -#: flatcamGUI/FlatCAMGUI.py:419 +#: flatcamGUI/MainGUI.py:419 msgid "&Preferences\tShift+P" msgstr "Paramètres \tShift+P" -#: flatcamGUI/FlatCAMGUI.py:425 flatcamTools/ToolProperties.py:155 +#: flatcamGUI/MainGUI.py:425 flatcamTools/ToolProperties.py:155 msgid "Options" msgstr "Options" -#: flatcamGUI/FlatCAMGUI.py:427 +#: flatcamGUI/MainGUI.py:427 msgid "&Rotate Selection\tShift+(R)" msgstr "Faire pivoter la sélection\tShift+(R)" -#: flatcamGUI/FlatCAMGUI.py:432 +#: flatcamGUI/MainGUI.py:432 msgid "&Skew on X axis\tShift+X" msgstr "Inclinaison sur l'axe X\tShift+X" -#: flatcamGUI/FlatCAMGUI.py:434 +#: flatcamGUI/MainGUI.py:434 msgid "S&kew on Y axis\tShift+Y" msgstr "Inclinaison sur l'axe Y\tShift+Y" -#: flatcamGUI/FlatCAMGUI.py:439 +#: flatcamGUI/MainGUI.py:439 msgid "Flip on &X axis\tX" msgstr "Miroir sur l'axe X\tX" -#: flatcamGUI/FlatCAMGUI.py:441 +#: flatcamGUI/MainGUI.py:441 msgid "Flip on &Y axis\tY" msgstr "Miroir sur l'axe Y\tY" -#: flatcamGUI/FlatCAMGUI.py:446 +#: flatcamGUI/MainGUI.py:446 msgid "View source\tAlt+S" msgstr "Voir la source\tAlt+S" -#: flatcamGUI/FlatCAMGUI.py:448 +#: flatcamGUI/MainGUI.py:448 msgid "Tools DataBase\tCtrl+D" msgstr "Base de Données d'outils\tCtrl+D" -#: flatcamGUI/FlatCAMGUI.py:455 flatcamGUI/FlatCAMGUI.py:2183 +#: flatcamGUI/MainGUI.py:455 flatcamGUI/MainGUI.py:2183 msgid "View" msgstr "Vue" -#: flatcamGUI/FlatCAMGUI.py:457 +#: flatcamGUI/MainGUI.py:457 msgid "Enable all plots\tAlt+1" msgstr "Activer tous les dessins\tAlt+1" -#: flatcamGUI/FlatCAMGUI.py:459 +#: flatcamGUI/MainGUI.py:459 msgid "Disable all plots\tAlt+2" msgstr "Désactiver tous les dessins\tAlt+2" -#: flatcamGUI/FlatCAMGUI.py:461 +#: flatcamGUI/MainGUI.py:461 msgid "Disable non-selected\tAlt+3" msgstr "Désactiver les non sélectionnés\tAlt+3" -#: flatcamGUI/FlatCAMGUI.py:465 +#: flatcamGUI/MainGUI.py:465 msgid "&Zoom Fit\tV" msgstr "Ajustement du Zoom\tV" -#: flatcamGUI/FlatCAMGUI.py:467 +#: flatcamGUI/MainGUI.py:467 msgid "&Zoom In\t=" msgstr "Zoomer\t=" -#: flatcamGUI/FlatCAMGUI.py:469 +#: flatcamGUI/MainGUI.py:469 msgid "&Zoom Out\t-" msgstr "Dézoomer\t-" -#: flatcamGUI/FlatCAMGUI.py:474 +#: flatcamGUI/MainGUI.py:474 msgid "Redraw All\tF5" msgstr "Tout redessiner\tF5" -#: flatcamGUI/FlatCAMGUI.py:478 +#: flatcamGUI/MainGUI.py:478 msgid "Toggle Code Editor\tShift+E" msgstr "Basculer l'éditeur de code\tShift+E" -#: flatcamGUI/FlatCAMGUI.py:481 +#: flatcamGUI/MainGUI.py:481 msgid "&Toggle FullScreen\tAlt+F10" msgstr "Passer en plein écran\tAlt+F10" -#: flatcamGUI/FlatCAMGUI.py:483 +#: flatcamGUI/MainGUI.py:483 msgid "&Toggle Plot Area\tCtrl+F10" msgstr "Basculer la zone de tracé\tCtrl+F10" -#: flatcamGUI/FlatCAMGUI.py:485 +#: flatcamGUI/MainGUI.py:485 msgid "&Toggle Project/Sel/Tool\t`" msgstr "Basculer Projet / Sel / Outil\t`" -#: flatcamGUI/FlatCAMGUI.py:489 +#: flatcamGUI/MainGUI.py:489 msgid "&Toggle Grid Snap\tG" msgstr "Basculer la grille\tG" -#: flatcamGUI/FlatCAMGUI.py:491 +#: flatcamGUI/MainGUI.py:491 msgid "&Toggle Grid Lines\tAlt+G" msgstr "Basculer les lignes de la grille\tAlt+G" -#: flatcamGUI/FlatCAMGUI.py:493 +#: flatcamGUI/MainGUI.py:493 msgid "&Toggle Axis\tShift+G" msgstr "Basculer l'axe\tShift+G" -#: flatcamGUI/FlatCAMGUI.py:495 +#: flatcamGUI/MainGUI.py:495 msgid "Toggle Workspace\tShift+W" msgstr "Basculer l'espace de travail\tShift+W" -#: flatcamGUI/FlatCAMGUI.py:500 +#: flatcamGUI/MainGUI.py:500 msgid "Objects" msgstr "Objets" -#: flatcamGUI/FlatCAMGUI.py:514 +#: flatcamGUI/MainGUI.py:514 msgid "&Command Line\tS" msgstr "&Ligne de commande\tS" -#: flatcamGUI/FlatCAMGUI.py:519 +#: flatcamGUI/MainGUI.py:519 msgid "Help" msgstr "Aide" -#: flatcamGUI/FlatCAMGUI.py:521 +#: flatcamGUI/MainGUI.py:521 msgid "Online Help\tF1" msgstr "Aide en ligne\tF1" -#: flatcamGUI/FlatCAMGUI.py:531 +#: flatcamGUI/MainGUI.py:531 msgid "Report a bug" msgstr "Signaler une erreur" -#: flatcamGUI/FlatCAMGUI.py:534 +#: flatcamGUI/MainGUI.py:534 msgid "Excellon Specification" msgstr "Documentation Excellon" -#: flatcamGUI/FlatCAMGUI.py:536 +#: flatcamGUI/MainGUI.py:536 msgid "Gerber Specification" msgstr "Documentation Gerber" -#: flatcamGUI/FlatCAMGUI.py:541 +#: flatcamGUI/MainGUI.py:541 msgid "Shortcuts List\tF3" msgstr "Raccourcis Clavier\tF3" -#: flatcamGUI/FlatCAMGUI.py:543 +#: flatcamGUI/MainGUI.py:543 msgid "YouTube Channel\tF4" msgstr "Chaîne Youtube\tF4" -#: flatcamGUI/FlatCAMGUI.py:554 +#: flatcamGUI/MainGUI.py:554 msgid "Add Circle\tO" msgstr "Ajouter un Cercle\tO" -#: flatcamGUI/FlatCAMGUI.py:557 +#: flatcamGUI/MainGUI.py:557 msgid "Add Arc\tA" msgstr "Ajouter un Arc\tA" -#: flatcamGUI/FlatCAMGUI.py:560 +#: flatcamGUI/MainGUI.py:560 msgid "Add Rectangle\tR" msgstr "Ajouter un Rectangle\tR" -#: flatcamGUI/FlatCAMGUI.py:563 +#: flatcamGUI/MainGUI.py:563 msgid "Add Polygon\tN" msgstr "Ajouter un Polygone\tN" -#: flatcamGUI/FlatCAMGUI.py:566 +#: flatcamGUI/MainGUI.py:566 msgid "Add Path\tP" msgstr "Ajouter un Chemin\tP" -#: flatcamGUI/FlatCAMGUI.py:569 +#: flatcamGUI/MainGUI.py:569 msgid "Add Text\tT" msgstr "Ajouter du Texte\tT" -#: flatcamGUI/FlatCAMGUI.py:572 +#: flatcamGUI/MainGUI.py:572 msgid "Polygon Union\tU" msgstr "Union de Polygones\tU" -#: flatcamGUI/FlatCAMGUI.py:574 +#: flatcamGUI/MainGUI.py:574 msgid "Polygon Intersection\tE" msgstr "Intersection de Polygones\tE" -#: flatcamGUI/FlatCAMGUI.py:576 +#: flatcamGUI/MainGUI.py:576 msgid "Polygon Subtraction\tS" msgstr "Soustraction de Polygone\tS" -#: flatcamGUI/FlatCAMGUI.py:580 +#: flatcamGUI/MainGUI.py:580 msgid "Cut Path\tX" msgstr "Chemin Coupé\tX" -#: flatcamGUI/FlatCAMGUI.py:584 +#: flatcamGUI/MainGUI.py:584 msgid "Copy Geom\tC" msgstr "Copier la Géométrie\tC" -#: flatcamGUI/FlatCAMGUI.py:586 +#: flatcamGUI/MainGUI.py:586 msgid "Delete Shape\tDEL" msgstr "Supprimer la Forme\tDEL" -#: flatcamGUI/FlatCAMGUI.py:590 flatcamGUI/FlatCAMGUI.py:677 +#: flatcamGUI/MainGUI.py:590 flatcamGUI/MainGUI.py:677 msgid "Move\tM" msgstr "Déplacer\tM" -#: flatcamGUI/FlatCAMGUI.py:592 +#: flatcamGUI/MainGUI.py:592 msgid "Buffer Tool\tB" msgstr "Outil Tampon\tB" -#: flatcamGUI/FlatCAMGUI.py:595 +#: flatcamGUI/MainGUI.py:595 msgid "Paint Tool\tI" msgstr "Outil de Peinture\tI" -#: flatcamGUI/FlatCAMGUI.py:598 +#: flatcamGUI/MainGUI.py:598 msgid "Transform Tool\tAlt+R" msgstr "Outil de Transformation\tAlt+R" -#: flatcamGUI/FlatCAMGUI.py:602 +#: flatcamGUI/MainGUI.py:602 msgid "Toggle Corner Snap\tK" msgstr "Basculer le Coin accrocher\tK" -#: flatcamGUI/FlatCAMGUI.py:608 +#: flatcamGUI/MainGUI.py:608 msgid ">Excellon Editor<" msgstr ">Excellon Éditeur<" -#: flatcamGUI/FlatCAMGUI.py:612 +#: flatcamGUI/MainGUI.py:612 msgid "Add Drill Array\tA" msgstr "Ajouter un Tableau de Forage\tA" -#: flatcamGUI/FlatCAMGUI.py:614 +#: flatcamGUI/MainGUI.py:614 msgid "Add Drill\tD" msgstr "Ajouter une Forage\tD" -#: flatcamGUI/FlatCAMGUI.py:618 +#: flatcamGUI/MainGUI.py:618 msgid "Add Slot Array\tQ" msgstr "Ajouter un Tableau de Fente\tQ" -#: flatcamGUI/FlatCAMGUI.py:620 +#: flatcamGUI/MainGUI.py:620 msgid "Add Slot\tW" msgstr "Ajouter une Fente\tW" -#: flatcamGUI/FlatCAMGUI.py:624 +#: flatcamGUI/MainGUI.py:624 msgid "Resize Drill(S)\tR" msgstr "Redimensionner le Foret\tR" -#: flatcamGUI/FlatCAMGUI.py:627 flatcamGUI/FlatCAMGUI.py:671 +#: flatcamGUI/MainGUI.py:627 flatcamGUI/MainGUI.py:671 msgid "Copy\tC" msgstr "Copie\tC" -#: flatcamGUI/FlatCAMGUI.py:629 flatcamGUI/FlatCAMGUI.py:673 +#: flatcamGUI/MainGUI.py:629 flatcamGUI/MainGUI.py:673 msgid "Delete\tDEL" msgstr "Supprimer\tDEL" -#: flatcamGUI/FlatCAMGUI.py:634 +#: flatcamGUI/MainGUI.py:634 msgid "Move Drill(s)\tM" msgstr "Déplacer les Forets\tM" -#: flatcamGUI/FlatCAMGUI.py:639 +#: flatcamGUI/MainGUI.py:639 msgid ">Gerber Editor<" msgstr ">Gerber Éditeur<" -#: flatcamGUI/FlatCAMGUI.py:643 +#: flatcamGUI/MainGUI.py:643 msgid "Add Pad\tP" msgstr "Ajouter un Pad\tP" -#: flatcamGUI/FlatCAMGUI.py:645 +#: flatcamGUI/MainGUI.py:645 msgid "Add Pad Array\tA" msgstr "Ajouter un Tableau de Pad\tA" -#: flatcamGUI/FlatCAMGUI.py:647 +#: flatcamGUI/MainGUI.py:647 msgid "Add Track\tT" msgstr "Ajouter une Piste\tT" -#: flatcamGUI/FlatCAMGUI.py:649 +#: flatcamGUI/MainGUI.py:649 msgid "Add Region\tN" msgstr "Ajouter une Région\tN" -#: flatcamGUI/FlatCAMGUI.py:653 +#: flatcamGUI/MainGUI.py:653 msgid "Poligonize\tAlt+N" msgstr "Polygoniser\tAlt+N" -#: flatcamGUI/FlatCAMGUI.py:655 +#: flatcamGUI/MainGUI.py:655 msgid "Add SemiDisc\tE" msgstr "Ajouter un Semi-Disque\tE" -#: flatcamGUI/FlatCAMGUI.py:657 +#: flatcamGUI/MainGUI.py:657 msgid "Add Disc\tD" msgstr "Ajouter un Disque\tD" -#: flatcamGUI/FlatCAMGUI.py:659 +#: flatcamGUI/MainGUI.py:659 msgid "Buffer\tB" msgstr "Tampon\tB" -#: flatcamGUI/FlatCAMGUI.py:661 +#: flatcamGUI/MainGUI.py:661 msgid "Scale\tS" msgstr "Échelle\tS" -#: flatcamGUI/FlatCAMGUI.py:663 +#: flatcamGUI/MainGUI.py:663 msgid "Mark Area\tAlt+A" msgstr "Zone de Marque\tAlt+A" -#: flatcamGUI/FlatCAMGUI.py:665 +#: flatcamGUI/MainGUI.py:665 msgid "Eraser\tCtrl+E" msgstr "La Gomme\tCtrl+E" -#: flatcamGUI/FlatCAMGUI.py:667 +#: flatcamGUI/MainGUI.py:667 msgid "Transform\tAlt+R" msgstr "Transformation\tAlt+R" -#: flatcamGUI/FlatCAMGUI.py:694 +#: flatcamGUI/MainGUI.py:694 msgid "Enable Plot" msgstr "Activer le Tracé" -#: flatcamGUI/FlatCAMGUI.py:696 +#: flatcamGUI/MainGUI.py:696 msgid "Disable Plot" msgstr "Désactiver le Tracé" -#: flatcamGUI/FlatCAMGUI.py:700 +#: flatcamGUI/MainGUI.py:700 msgid "Set Color" msgstr "Définir la couleur" -#: flatcamGUI/FlatCAMGUI.py:742 +#: flatcamGUI/MainGUI.py:742 msgid "Generate CNC" msgstr "Générer CNC" -#: flatcamGUI/FlatCAMGUI.py:744 +#: flatcamGUI/MainGUI.py:744 msgid "View Source" msgstr "Voir la source" -#: flatcamGUI/FlatCAMGUI.py:749 flatcamGUI/FlatCAMGUI.py:863 -#: flatcamGUI/FlatCAMGUI.py:1072 flatcamGUI/FlatCAMGUI.py:2138 -#: flatcamGUI/FlatCAMGUI.py:2282 flatcamGUI/FlatCAMGUI.py:2572 -#: flatcamGUI/FlatCAMGUI.py:2775 flatcamGUI/ObjectUI.py:1617 +#: flatcamGUI/MainGUI.py:749 flatcamGUI/MainGUI.py:863 +#: flatcamGUI/MainGUI.py:1072 flatcamGUI/MainGUI.py:2138 +#: flatcamGUI/MainGUI.py:2282 flatcamGUI/MainGUI.py:2572 +#: flatcamGUI/MainGUI.py:2775 flatcamGUI/ObjectUI.py:1617 #: flatcamObjects/FlatCAMGeometry.py:477 flatcamTools/ToolPanelize.py:540 #: flatcamTools/ToolPanelize.py:567 flatcamTools/ToolPanelize.py:660 #: flatcamTools/ToolPanelize.py:689 flatcamTools/ToolPanelize.py:751 msgid "Copy" msgstr "Copie" -#: flatcamGUI/FlatCAMGUI.py:757 flatcamGUI/FlatCAMGUI.py:2295 +#: flatcamGUI/MainGUI.py:757 flatcamGUI/MainGUI.py:2295 #: flatcamTools/ToolProperties.py:31 msgid "Properties" msgstr "Propriétés" -#: flatcamGUI/FlatCAMGUI.py:786 +#: flatcamGUI/MainGUI.py:786 msgid "File Toolbar" msgstr "Barre d'outils de fichiers" -#: flatcamGUI/FlatCAMGUI.py:790 +#: flatcamGUI/MainGUI.py:790 msgid "Edit Toolbar" msgstr "Barre d'outils de editer" -#: flatcamGUI/FlatCAMGUI.py:794 +#: flatcamGUI/MainGUI.py:794 msgid "View Toolbar" msgstr "Barre d'outils de vue" -#: flatcamGUI/FlatCAMGUI.py:798 +#: flatcamGUI/MainGUI.py:798 msgid "Shell Toolbar" msgstr "Barre d'outils Shell" -#: flatcamGUI/FlatCAMGUI.py:802 +#: flatcamGUI/MainGUI.py:802 msgid "Tools Toolbar" msgstr "Barre d'outils de outils" -#: flatcamGUI/FlatCAMGUI.py:806 +#: flatcamGUI/MainGUI.py:806 msgid "Excellon Editor Toolbar" msgstr "Barre d'outils de l'éditeur Excellon" -#: flatcamGUI/FlatCAMGUI.py:812 +#: flatcamGUI/MainGUI.py:812 msgid "Geometry Editor Toolbar" msgstr "Barre d'outils de l'éditeur de Géométrie" -#: flatcamGUI/FlatCAMGUI.py:816 +#: flatcamGUI/MainGUI.py:816 msgid "Gerber Editor Toolbar" msgstr "Barre d'outils de l'éditeur Gerber" -#: flatcamGUI/FlatCAMGUI.py:820 +#: flatcamGUI/MainGUI.py:820 msgid "Grid Toolbar" msgstr "Barre d'outils de la Grille" -#: flatcamGUI/FlatCAMGUI.py:841 flatcamGUI/FlatCAMGUI.py:2549 +#: flatcamGUI/MainGUI.py:841 flatcamGUI/MainGUI.py:2549 msgid "Open project" msgstr "Ouvrir Projet" -#: flatcamGUI/FlatCAMGUI.py:843 flatcamGUI/FlatCAMGUI.py:2551 +#: flatcamGUI/MainGUI.py:843 flatcamGUI/MainGUI.py:2551 msgid "Save project" msgstr "Sauvegarder le projet" -#: flatcamGUI/FlatCAMGUI.py:849 flatcamGUI/FlatCAMGUI.py:2557 +#: flatcamGUI/MainGUI.py:849 flatcamGUI/MainGUI.py:2557 msgid "New Blank Geometry" msgstr "Nouvelle Géométrie vierge" -#: flatcamGUI/FlatCAMGUI.py:851 flatcamGUI/FlatCAMGUI.py:2559 +#: flatcamGUI/MainGUI.py:851 flatcamGUI/MainGUI.py:2559 msgid "New Blank Gerber" msgstr "Nouveau Gerber vierge" -#: flatcamGUI/FlatCAMGUI.py:853 flatcamGUI/FlatCAMGUI.py:2561 +#: flatcamGUI/MainGUI.py:853 flatcamGUI/MainGUI.py:2561 msgid "New Blank Excellon" msgstr "Nouveau Excellon vierge" -#: flatcamGUI/FlatCAMGUI.py:858 flatcamGUI/FlatCAMGUI.py:2567 +#: flatcamGUI/MainGUI.py:858 flatcamGUI/MainGUI.py:2567 msgid "Save Object and close the Editor" msgstr "Enregistrer un objet et fermer l'éditeur" -#: flatcamGUI/FlatCAMGUI.py:865 flatcamGUI/FlatCAMGUI.py:2574 +#: flatcamGUI/MainGUI.py:865 flatcamGUI/MainGUI.py:2574 msgid "&Delete" msgstr "Supprimer" -#: flatcamGUI/FlatCAMGUI.py:868 flatcamGUI/FlatCAMGUI.py:1729 -#: flatcamGUI/FlatCAMGUI.py:1935 flatcamGUI/FlatCAMGUI.py:2577 +#: flatcamGUI/MainGUI.py:868 flatcamGUI/MainGUI.py:1729 +#: flatcamGUI/MainGUI.py:1935 flatcamGUI/MainGUI.py:2577 #: flatcamTools/ToolDistance.py:35 flatcamTools/ToolDistance.py:195 msgid "Distance Tool" msgstr "Mesure" -#: flatcamGUI/FlatCAMGUI.py:870 flatcamGUI/FlatCAMGUI.py:2579 +#: flatcamGUI/MainGUI.py:870 flatcamGUI/MainGUI.py:2579 msgid "Distance Min Tool" msgstr "Mesure Mini" -#: flatcamGUI/FlatCAMGUI.py:872 flatcamGUI/FlatCAMGUI.py:1722 -#: flatcamGUI/FlatCAMGUI.py:2581 +#: flatcamGUI/MainGUI.py:872 flatcamGUI/MainGUI.py:1722 +#: flatcamGUI/MainGUI.py:2581 msgid "Set Origin" msgstr "Définir l'origine" -#: flatcamGUI/FlatCAMGUI.py:874 +#: flatcamGUI/MainGUI.py:874 msgid "Move to Origin" msgstr "Déplacer vers l'origine" -#: flatcamGUI/FlatCAMGUI.py:877 flatcamGUI/FlatCAMGUI.py:2583 +#: flatcamGUI/MainGUI.py:877 flatcamGUI/MainGUI.py:2583 msgid "Jump to Location" msgstr "Aller à l'emplacement" -#: flatcamGUI/FlatCAMGUI.py:879 flatcamGUI/FlatCAMGUI.py:1734 -#: flatcamGUI/FlatCAMGUI.py:2585 +#: flatcamGUI/MainGUI.py:879 flatcamGUI/MainGUI.py:1734 +#: flatcamGUI/MainGUI.py:2585 msgid "Locate in Object" msgstr "Localiser dans l'objet" -#: flatcamGUI/FlatCAMGUI.py:885 flatcamGUI/FlatCAMGUI.py:2591 +#: flatcamGUI/MainGUI.py:885 flatcamGUI/MainGUI.py:2591 msgid "&Replot" msgstr "Re-Tracé" -#: flatcamGUI/FlatCAMGUI.py:887 flatcamGUI/FlatCAMGUI.py:2593 +#: flatcamGUI/MainGUI.py:887 flatcamGUI/MainGUI.py:2593 msgid "&Clear plot" msgstr "Effacer la Trace" -#: flatcamGUI/FlatCAMGUI.py:889 flatcamGUI/FlatCAMGUI.py:1725 -#: flatcamGUI/FlatCAMGUI.py:2595 +#: flatcamGUI/MainGUI.py:889 flatcamGUI/MainGUI.py:1725 +#: flatcamGUI/MainGUI.py:2595 msgid "Zoom In" msgstr "Zoomer" -#: flatcamGUI/FlatCAMGUI.py:891 flatcamGUI/FlatCAMGUI.py:1725 -#: flatcamGUI/FlatCAMGUI.py:2597 +#: flatcamGUI/MainGUI.py:891 flatcamGUI/MainGUI.py:1725 +#: flatcamGUI/MainGUI.py:2597 msgid "Zoom Out" msgstr "Dézoomer" -#: flatcamGUI/FlatCAMGUI.py:893 flatcamGUI/FlatCAMGUI.py:1724 -#: flatcamGUI/FlatCAMGUI.py:2185 flatcamGUI/FlatCAMGUI.py:2599 +#: flatcamGUI/MainGUI.py:893 flatcamGUI/MainGUI.py:1724 +#: flatcamGUI/MainGUI.py:2185 flatcamGUI/MainGUI.py:2599 msgid "Zoom Fit" msgstr "Ajustement du Zoom" -#: flatcamGUI/FlatCAMGUI.py:901 flatcamGUI/FlatCAMGUI.py:2605 +#: flatcamGUI/MainGUI.py:901 flatcamGUI/MainGUI.py:2605 msgid "&Command Line" msgstr "&Ligne de commande" -#: flatcamGUI/FlatCAMGUI.py:913 flatcamGUI/FlatCAMGUI.py:2617 +#: flatcamGUI/MainGUI.py:913 flatcamGUI/MainGUI.py:2617 msgid "2Sided Tool" msgstr "Outil 2 faces" -#: flatcamGUI/FlatCAMGUI.py:915 flatcamGUI/FlatCAMGUI.py:1740 -#: flatcamGUI/FlatCAMGUI.py:2619 +#: flatcamGUI/MainGUI.py:915 flatcamGUI/MainGUI.py:1740 +#: flatcamGUI/MainGUI.py:2619 msgid "Align Objects Tool" msgstr "Outil Aligner les objets" -#: flatcamGUI/FlatCAMGUI.py:917 flatcamGUI/FlatCAMGUI.py:1741 -#: flatcamGUI/FlatCAMGUI.py:2621 flatcamTools/ToolExtractDrills.py:393 +#: flatcamGUI/MainGUI.py:917 flatcamGUI/MainGUI.py:1741 +#: flatcamGUI/MainGUI.py:2621 flatcamTools/ToolExtractDrills.py:393 msgid "Extract Drills Tool" msgstr "Outil d'extraction de forets" -#: flatcamGUI/FlatCAMGUI.py:920 flatcamGUI/ObjectUI.py:596 +#: flatcamGUI/MainGUI.py:920 flatcamGUI/ObjectUI.py:596 #: flatcamTools/ToolCutOut.py:440 msgid "Cutout Tool" msgstr "Outil de Découpe" -#: flatcamGUI/FlatCAMGUI.py:922 flatcamGUI/FlatCAMGUI.py:2626 +#: flatcamGUI/MainGUI.py:922 flatcamGUI/MainGUI.py:2626 #: flatcamGUI/ObjectUI.py:574 flatcamGUI/ObjectUI.py:2077 #: flatcamTools/ToolNCC.py:974 msgid "NCC Tool" msgstr "Outil de la NCC" -#: flatcamGUI/FlatCAMGUI.py:928 flatcamGUI/FlatCAMGUI.py:2632 +#: flatcamGUI/MainGUI.py:928 flatcamGUI/MainGUI.py:2632 msgid "Panel Tool" msgstr "Outil de Panneau" -#: flatcamGUI/FlatCAMGUI.py:930 flatcamGUI/FlatCAMGUI.py:2634 +#: flatcamGUI/MainGUI.py:930 flatcamGUI/MainGUI.py:2634 #: flatcamTools/ToolFilm.py:586 msgid "Film Tool" msgstr "Outil de Film" -#: flatcamGUI/FlatCAMGUI.py:932 flatcamGUI/FlatCAMGUI.py:2636 +#: flatcamGUI/MainGUI.py:932 flatcamGUI/MainGUI.py:2636 #: flatcamTools/ToolSolderPaste.py:553 msgid "SolderPaste Tool" msgstr "Outil de Pâte à souder" -#: flatcamGUI/FlatCAMGUI.py:934 flatcamGUI/FlatCAMGUI.py:2638 +#: flatcamGUI/MainGUI.py:934 flatcamGUI/MainGUI.py:2638 #: flatcamTools/ToolSub.py:35 msgid "Subtract Tool" msgstr "Outil de Soustraction" -#: flatcamGUI/FlatCAMGUI.py:936 flatcamGUI/FlatCAMGUI.py:2640 +#: flatcamGUI/MainGUI.py:936 flatcamGUI/MainGUI.py:2640 #: flatcamTools/ToolRulesCheck.py:616 msgid "Rules Tool" msgstr "Outil de Règles" -#: flatcamGUI/FlatCAMGUI.py:938 flatcamGUI/FlatCAMGUI.py:1743 -#: flatcamGUI/FlatCAMGUI.py:2642 flatcamTools/ToolOptimal.py:33 +#: flatcamGUI/MainGUI.py:938 flatcamGUI/MainGUI.py:1743 +#: flatcamGUI/MainGUI.py:2642 flatcamTools/ToolOptimal.py:33 #: flatcamTools/ToolOptimal.py:307 msgid "Optimal Tool" msgstr "Outil de Optimal" -#: flatcamGUI/FlatCAMGUI.py:943 flatcamGUI/FlatCAMGUI.py:1740 -#: flatcamGUI/FlatCAMGUI.py:2647 +#: flatcamGUI/MainGUI.py:943 flatcamGUI/MainGUI.py:1740 +#: flatcamGUI/MainGUI.py:2647 msgid "Calculators Tool" msgstr "Calculatrice" -#: flatcamGUI/FlatCAMGUI.py:947 flatcamGUI/FlatCAMGUI.py:1744 -#: flatcamGUI/FlatCAMGUI.py:2651 flatcamTools/ToolQRCode.py:43 +#: flatcamGUI/MainGUI.py:947 flatcamGUI/MainGUI.py:1744 +#: flatcamGUI/MainGUI.py:2651 flatcamTools/ToolQRCode.py:43 #: flatcamTools/ToolQRCode.py:382 msgid "QRCode Tool" msgstr "QRCode" -#: flatcamGUI/FlatCAMGUI.py:949 flatcamGUI/FlatCAMGUI.py:2653 +#: flatcamGUI/MainGUI.py:949 flatcamGUI/MainGUI.py:2653 #: flatcamTools/ToolCopperThieving.py:39 flatcamTools/ToolCopperThieving.py:568 msgid "Copper Thieving Tool" msgstr "Outil de Copper Thieving" -#: flatcamGUI/FlatCAMGUI.py:952 flatcamGUI/FlatCAMGUI.py:1741 -#: flatcamGUI/FlatCAMGUI.py:2656 flatcamTools/ToolFiducials.py:33 +#: flatcamGUI/MainGUI.py:952 flatcamGUI/MainGUI.py:1741 +#: flatcamGUI/MainGUI.py:2656 flatcamTools/ToolFiducials.py:33 #: flatcamTools/ToolFiducials.py:395 msgid "Fiducials Tool" msgstr "Outil Fiduciaire" -#: flatcamGUI/FlatCAMGUI.py:954 flatcamGUI/FlatCAMGUI.py:2658 +#: flatcamGUI/MainGUI.py:954 flatcamGUI/MainGUI.py:2658 #: flatcamTools/ToolCalibration.py:37 flatcamTools/ToolCalibration.py:759 msgid "Calibration Tool" msgstr "Réglage de l'assiette" -#: flatcamGUI/FlatCAMGUI.py:956 flatcamGUI/FlatCAMGUI.py:1741 -#: flatcamGUI/FlatCAMGUI.py:2660 +#: flatcamGUI/MainGUI.py:956 flatcamGUI/MainGUI.py:1741 +#: flatcamGUI/MainGUI.py:2660 msgid "Punch Gerber Tool" msgstr "Outil de poinçonnage Gerber" -#: flatcamGUI/FlatCAMGUI.py:958 flatcamGUI/FlatCAMGUI.py:2662 +#: flatcamGUI/MainGUI.py:958 flatcamGUI/MainGUI.py:2662 #: flatcamTools/ToolInvertGerber.py:31 msgid "Invert Gerber Tool" msgstr "Inverser Gerber" -#: flatcamGUI/FlatCAMGUI.py:964 flatcamGUI/FlatCAMGUI.py:990 -#: flatcamGUI/FlatCAMGUI.py:1042 flatcamGUI/FlatCAMGUI.py:2668 -#: flatcamGUI/FlatCAMGUI.py:2746 +#: flatcamGUI/MainGUI.py:964 flatcamGUI/MainGUI.py:990 +#: flatcamGUI/MainGUI.py:1042 flatcamGUI/MainGUI.py:2668 +#: flatcamGUI/MainGUI.py:2746 msgid "Select" msgstr "Sélectionner" -#: flatcamGUI/FlatCAMGUI.py:966 flatcamGUI/FlatCAMGUI.py:2670 +#: flatcamGUI/MainGUI.py:966 flatcamGUI/MainGUI.py:2670 msgid "Add Drill Hole" msgstr "Ajouter un Perçage" -#: flatcamGUI/FlatCAMGUI.py:968 flatcamGUI/FlatCAMGUI.py:2672 +#: flatcamGUI/MainGUI.py:968 flatcamGUI/MainGUI.py:2672 msgid "Add Drill Hole Array" msgstr "Ajouter un Tableau de Perçage" -#: flatcamGUI/FlatCAMGUI.py:970 flatcamGUI/FlatCAMGUI.py:2020 -#: flatcamGUI/FlatCAMGUI.py:2273 flatcamGUI/FlatCAMGUI.py:2676 +#: flatcamGUI/MainGUI.py:970 flatcamGUI/MainGUI.py:2020 +#: flatcamGUI/MainGUI.py:2273 flatcamGUI/MainGUI.py:2676 msgid "Add Slot" msgstr "Ajouter une découpe" -#: flatcamGUI/FlatCAMGUI.py:972 flatcamGUI/FlatCAMGUI.py:2019 -#: flatcamGUI/FlatCAMGUI.py:2275 flatcamGUI/FlatCAMGUI.py:2678 +#: flatcamGUI/MainGUI.py:972 flatcamGUI/MainGUI.py:2019 +#: flatcamGUI/MainGUI.py:2275 flatcamGUI/MainGUI.py:2678 msgid "Add Slot Array" msgstr "Ajouter un Tableau de découpe" -#: flatcamGUI/FlatCAMGUI.py:974 flatcamGUI/FlatCAMGUI.py:2278 -#: flatcamGUI/FlatCAMGUI.py:2674 +#: flatcamGUI/MainGUI.py:974 flatcamGUI/MainGUI.py:2278 +#: flatcamGUI/MainGUI.py:2674 msgid "Resize Drill" msgstr "Redimensionner découpe" -#: flatcamGUI/FlatCAMGUI.py:978 flatcamGUI/FlatCAMGUI.py:2682 +#: flatcamGUI/MainGUI.py:978 flatcamGUI/MainGUI.py:2682 msgid "Copy Drill" msgstr "Copier un perçage" -#: flatcamGUI/FlatCAMGUI.py:980 flatcamGUI/FlatCAMGUI.py:2684 +#: flatcamGUI/MainGUI.py:980 flatcamGUI/MainGUI.py:2684 msgid "Delete Drill" msgstr "Supprimer un perçage" -#: flatcamGUI/FlatCAMGUI.py:984 flatcamGUI/FlatCAMGUI.py:2688 +#: flatcamGUI/MainGUI.py:984 flatcamGUI/MainGUI.py:2688 msgid "Move Drill" msgstr "Déplacer un perçage" -#: flatcamGUI/FlatCAMGUI.py:992 flatcamGUI/FlatCAMGUI.py:2696 +#: flatcamGUI/MainGUI.py:992 flatcamGUI/MainGUI.py:2696 msgid "Add Circle" msgstr "Ajouter un Cercle" -#: flatcamGUI/FlatCAMGUI.py:994 flatcamGUI/FlatCAMGUI.py:2698 +#: flatcamGUI/MainGUI.py:994 flatcamGUI/MainGUI.py:2698 msgid "Add Arc" msgstr "Ajouter un Arc" -#: flatcamGUI/FlatCAMGUI.py:996 flatcamGUI/FlatCAMGUI.py:2700 +#: flatcamGUI/MainGUI.py:996 flatcamGUI/MainGUI.py:2700 msgid "Add Rectangle" msgstr "Ajouter un Rectangle" -#: flatcamGUI/FlatCAMGUI.py:1000 flatcamGUI/FlatCAMGUI.py:2704 +#: flatcamGUI/MainGUI.py:1000 flatcamGUI/MainGUI.py:2704 msgid "Add Path" msgstr "Ajouter un Chemin" -#: flatcamGUI/FlatCAMGUI.py:1002 flatcamGUI/FlatCAMGUI.py:2706 +#: flatcamGUI/MainGUI.py:1002 flatcamGUI/MainGUI.py:2706 msgid "Add Polygon" msgstr "Ajouter un Polygone" -#: flatcamGUI/FlatCAMGUI.py:1005 flatcamGUI/FlatCAMGUI.py:2709 +#: flatcamGUI/MainGUI.py:1005 flatcamGUI/MainGUI.py:2709 msgid "Add Text" msgstr "Ajouter du Texte" -#: flatcamGUI/FlatCAMGUI.py:1007 flatcamGUI/FlatCAMGUI.py:2711 +#: flatcamGUI/MainGUI.py:1007 flatcamGUI/MainGUI.py:2711 msgid "Add Buffer" msgstr "Ajouter un Tampon" -#: flatcamGUI/FlatCAMGUI.py:1009 flatcamGUI/FlatCAMGUI.py:2713 +#: flatcamGUI/MainGUI.py:1009 flatcamGUI/MainGUI.py:2713 msgid "Paint Shape" msgstr "Peindre une Forme" -#: flatcamGUI/FlatCAMGUI.py:1011 flatcamGUI/FlatCAMGUI.py:1068 -#: flatcamGUI/FlatCAMGUI.py:2214 flatcamGUI/FlatCAMGUI.py:2259 -#: flatcamGUI/FlatCAMGUI.py:2715 flatcamGUI/FlatCAMGUI.py:2771 +#: flatcamGUI/MainGUI.py:1011 flatcamGUI/MainGUI.py:1068 +#: flatcamGUI/MainGUI.py:2214 flatcamGUI/MainGUI.py:2259 +#: flatcamGUI/MainGUI.py:2715 flatcamGUI/MainGUI.py:2771 msgid "Eraser" msgstr "Effacer" -#: flatcamGUI/FlatCAMGUI.py:1015 flatcamGUI/FlatCAMGUI.py:2719 +#: flatcamGUI/MainGUI.py:1015 flatcamGUI/MainGUI.py:2719 msgid "Polygon Union" msgstr "Union de Polygones" -#: flatcamGUI/FlatCAMGUI.py:1017 flatcamGUI/FlatCAMGUI.py:2721 +#: flatcamGUI/MainGUI.py:1017 flatcamGUI/MainGUI.py:2721 msgid "Polygon Explode" msgstr "Éclatement de polygone" -#: flatcamGUI/FlatCAMGUI.py:1020 flatcamGUI/FlatCAMGUI.py:2724 +#: flatcamGUI/MainGUI.py:1020 flatcamGUI/MainGUI.py:2724 msgid "Polygon Intersection" msgstr "Intersection de Polygones" -#: flatcamGUI/FlatCAMGUI.py:1022 flatcamGUI/FlatCAMGUI.py:2726 +#: flatcamGUI/MainGUI.py:1022 flatcamGUI/MainGUI.py:2726 msgid "Polygon Subtraction" msgstr "Soustraction de Polygone" -#: flatcamGUI/FlatCAMGUI.py:1026 flatcamGUI/FlatCAMGUI.py:2730 +#: flatcamGUI/MainGUI.py:1026 flatcamGUI/MainGUI.py:2730 msgid "Cut Path" msgstr "Coupé Piste" -#: flatcamGUI/FlatCAMGUI.py:1028 +#: flatcamGUI/MainGUI.py:1028 msgid "Copy Shape(s)" msgstr "Copier les Formes" -#: flatcamGUI/FlatCAMGUI.py:1031 +#: flatcamGUI/MainGUI.py:1031 msgid "Delete Shape '-'" msgstr "Supprimer la Forme" -#: flatcamGUI/FlatCAMGUI.py:1033 flatcamGUI/FlatCAMGUI.py:1076 -#: flatcamGUI/FlatCAMGUI.py:2226 flatcamGUI/FlatCAMGUI.py:2263 -#: flatcamGUI/FlatCAMGUI.py:2736 flatcamGUI/FlatCAMGUI.py:2779 +#: flatcamGUI/MainGUI.py:1033 flatcamGUI/MainGUI.py:1076 +#: flatcamGUI/MainGUI.py:2226 flatcamGUI/MainGUI.py:2263 +#: flatcamGUI/MainGUI.py:2736 flatcamGUI/MainGUI.py:2779 #: flatcamGUI/ObjectUI.py:109 msgid "Transformations" msgstr "Changement d'échelle" -#: flatcamGUI/FlatCAMGUI.py:1036 +#: flatcamGUI/MainGUI.py:1036 msgid "Move Objects " msgstr "Déplacer des objets " -#: flatcamGUI/FlatCAMGUI.py:1044 flatcamGUI/FlatCAMGUI.py:2139 -#: flatcamGUI/FlatCAMGUI.py:2748 +#: flatcamGUI/MainGUI.py:1044 flatcamGUI/MainGUI.py:2139 +#: flatcamGUI/MainGUI.py:2748 msgid "Add Pad" msgstr "Ajouter un Pad" -#: flatcamGUI/FlatCAMGUI.py:1048 flatcamGUI/FlatCAMGUI.py:2140 -#: flatcamGUI/FlatCAMGUI.py:2752 +#: flatcamGUI/MainGUI.py:1048 flatcamGUI/MainGUI.py:2140 +#: flatcamGUI/MainGUI.py:2752 msgid "Add Track" msgstr "Ajouter une Piste" -#: flatcamGUI/FlatCAMGUI.py:1050 flatcamGUI/FlatCAMGUI.py:2139 -#: flatcamGUI/FlatCAMGUI.py:2754 +#: flatcamGUI/MainGUI.py:1050 flatcamGUI/MainGUI.py:2139 +#: flatcamGUI/MainGUI.py:2754 msgid "Add Region" msgstr "Ajouter une Région" -#: flatcamGUI/FlatCAMGUI.py:1052 flatcamGUI/FlatCAMGUI.py:2245 -#: flatcamGUI/FlatCAMGUI.py:2756 +#: flatcamGUI/MainGUI.py:1052 flatcamGUI/MainGUI.py:2245 +#: flatcamGUI/MainGUI.py:2756 msgid "Poligonize" msgstr "Polygoniser" -#: flatcamGUI/FlatCAMGUI.py:1055 flatcamGUI/FlatCAMGUI.py:2247 -#: flatcamGUI/FlatCAMGUI.py:2759 +#: flatcamGUI/MainGUI.py:1055 flatcamGUI/MainGUI.py:2247 +#: flatcamGUI/MainGUI.py:2759 msgid "SemiDisc" msgstr "Semi Disque" -#: flatcamGUI/FlatCAMGUI.py:1057 flatcamGUI/FlatCAMGUI.py:2249 -#: flatcamGUI/FlatCAMGUI.py:2761 +#: flatcamGUI/MainGUI.py:1057 flatcamGUI/MainGUI.py:2249 +#: flatcamGUI/MainGUI.py:2761 msgid "Disc" msgstr "Disque" -#: flatcamGUI/FlatCAMGUI.py:1065 flatcamGUI/FlatCAMGUI.py:2257 -#: flatcamGUI/FlatCAMGUI.py:2769 +#: flatcamGUI/MainGUI.py:1065 flatcamGUI/MainGUI.py:2257 +#: flatcamGUI/MainGUI.py:2769 msgid "Mark Area" msgstr "Zone de Marque" -#: flatcamGUI/FlatCAMGUI.py:1079 flatcamGUI/FlatCAMGUI.py:2139 -#: flatcamGUI/FlatCAMGUI.py:2230 flatcamGUI/FlatCAMGUI.py:2293 -#: flatcamGUI/FlatCAMGUI.py:2782 flatcamTools/ToolMove.py:27 +#: flatcamGUI/MainGUI.py:1079 flatcamGUI/MainGUI.py:2139 +#: flatcamGUI/MainGUI.py:2230 flatcamGUI/MainGUI.py:2293 +#: flatcamGUI/MainGUI.py:2782 flatcamTools/ToolMove.py:27 msgid "Move" msgstr "Déplacer" -#: flatcamGUI/FlatCAMGUI.py:1087 flatcamGUI/FlatCAMGUI.py:2791 +#: flatcamGUI/MainGUI.py:1087 flatcamGUI/MainGUI.py:2791 msgid "Snap to grid" msgstr "Aligner sur la Grille" -#: flatcamGUI/FlatCAMGUI.py:1090 flatcamGUI/FlatCAMGUI.py:2794 +#: flatcamGUI/MainGUI.py:1090 flatcamGUI/MainGUI.py:2794 msgid "Grid X snapping distance" msgstr "Distance d'accrochage de la grille X" -#: flatcamGUI/FlatCAMGUI.py:1095 flatcamGUI/FlatCAMGUI.py:2799 +#: flatcamGUI/MainGUI.py:1095 flatcamGUI/MainGUI.py:2799 msgid "Grid Y snapping distance" msgstr "Distance d'accrochage de la grille Y" -#: flatcamGUI/FlatCAMGUI.py:1101 flatcamGUI/FlatCAMGUI.py:2805 +#: flatcamGUI/MainGUI.py:1101 flatcamGUI/MainGUI.py:2805 msgid "" "When active, value on Grid_X\n" "is copied to the Grid_Y value." @@ -6321,65 +6321,65 @@ msgstr "" "Lorsque actif, valeur sur Grid_X\n" "est copié dans la valeur Grid_Y." -#: flatcamGUI/FlatCAMGUI.py:1108 flatcamGUI/FlatCAMGUI.py:2812 +#: flatcamGUI/MainGUI.py:1108 flatcamGUI/MainGUI.py:2812 msgid "Snap to corner" msgstr "Accrocher au coin" -#: flatcamGUI/FlatCAMGUI.py:1112 flatcamGUI/FlatCAMGUI.py:2816 +#: flatcamGUI/MainGUI.py:1112 flatcamGUI/MainGUI.py:2816 #: flatcamGUI/preferences/general/GeneralAPPSetGroupUI.py:78 msgid "Max. magnet distance" msgstr "Max. distance d'aimant" -#: flatcamGUI/FlatCAMGUI.py:1149 +#: flatcamGUI/MainGUI.py:1149 msgid "Selected" msgstr "Sélection" -#: flatcamGUI/FlatCAMGUI.py:1177 flatcamGUI/FlatCAMGUI.py:1185 +#: flatcamGUI/MainGUI.py:1177 flatcamGUI/MainGUI.py:1185 msgid "Plot Area" msgstr "Zone de Dessin" -#: flatcamGUI/FlatCAMGUI.py:1212 +#: flatcamGUI/MainGUI.py:1212 msgid "General" msgstr "Général" -#: flatcamGUI/FlatCAMGUI.py:1227 flatcamTools/ToolCopperThieving.py:74 +#: flatcamGUI/MainGUI.py:1227 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:1237 flatcamTools/ToolDblSided.py:92 +#: flatcamGUI/MainGUI.py:1237 flatcamTools/ToolDblSided.py:92 msgid "EXCELLON" msgstr "EXCELLON" -#: flatcamGUI/FlatCAMGUI.py:1247 flatcamTools/ToolDblSided.py:120 +#: flatcamGUI/MainGUI.py:1247 flatcamTools/ToolDblSided.py:120 msgid "GEOMETRY" msgstr "GÉOMÉTRIE" -#: flatcamGUI/FlatCAMGUI.py:1257 +#: flatcamGUI/MainGUI.py:1257 msgid "CNC-JOB" msgstr "CNC-JOB" -#: flatcamGUI/FlatCAMGUI.py:1266 flatcamGUI/ObjectUI.py:563 +#: flatcamGUI/MainGUI.py:1266 flatcamGUI/ObjectUI.py:563 #: flatcamGUI/ObjectUI.py:2052 msgid "TOOLS" msgstr "OUTILS" -#: flatcamGUI/FlatCAMGUI.py:1275 +#: flatcamGUI/MainGUI.py:1275 msgid "TOOLS 2" msgstr "OUTILS 2" -#: flatcamGUI/FlatCAMGUI.py:1285 +#: flatcamGUI/MainGUI.py:1285 msgid "UTILITIES" msgstr "UTILITAIRES" -#: flatcamGUI/FlatCAMGUI.py:1302 +#: flatcamGUI/MainGUI.py:1302 #: flatcamGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:192 msgid "Restore Defaults" msgstr "Restaurer les valeurs par défaut" -#: flatcamGUI/FlatCAMGUI.py:1305 +#: flatcamGUI/MainGUI.py:1305 msgid "" "Restore the entire set of default values\n" "to the initial values loaded after first launch." @@ -6387,19 +6387,19 @@ msgstr "" "Restaurer l'ensemble complet des valeurs par défaut\n" "aux valeurs initiales chargées après le premier lancement." -#: flatcamGUI/FlatCAMGUI.py:1310 +#: flatcamGUI/MainGUI.py:1310 msgid "Open Pref Folder" msgstr "Ouvrir le dossier Pref" -#: flatcamGUI/FlatCAMGUI.py:1313 +#: flatcamGUI/MainGUI.py:1313 msgid "Open the folder where FlatCAM save the preferences files." msgstr "Ouvrez le dossier où FlatCAM enregistre les fichiers de paramètres." -#: flatcamGUI/FlatCAMGUI.py:1317 flatcamGUI/FlatCAMGUI.py:2517 +#: flatcamGUI/MainGUI.py:1317 flatcamGUI/MainGUI.py:2517 msgid "Clear GUI Settings" msgstr "Effacer les param. de GUI" -#: flatcamGUI/FlatCAMGUI.py:1321 +#: flatcamGUI/MainGUI.py:1321 msgid "" "Clear the GUI settings for FlatCAM,\n" "such as: layout, gui state, style, hdpi support etc." @@ -6407,15 +6407,15 @@ msgstr "" "Effacer les paramètres de l'interface graphique pour FlatCAM,\n" "tels que: mise en page, état graphique, style, support hdpi, etc." -#: flatcamGUI/FlatCAMGUI.py:1332 +#: flatcamGUI/MainGUI.py:1332 msgid "Apply" msgstr "Appliquer" -#: flatcamGUI/FlatCAMGUI.py:1335 +#: flatcamGUI/MainGUI.py:1335 msgid "Apply the current preferences without saving to a file." msgstr "Appliquez les paramètres actuelles sans enregistrer dans un fichier." -#: flatcamGUI/FlatCAMGUI.py:1342 +#: flatcamGUI/MainGUI.py:1342 msgid "" "Save the current settings in the 'current_defaults' file\n" "which is the file storing the working default preferences." @@ -6423,216 +6423,216 @@ msgstr "" "Enregistrer les paramètres actuels dans le fichier 'current_defaults'\n" "qui est le fichier stockant les paramètres de travail par défaut." -#: flatcamGUI/FlatCAMGUI.py:1350 +#: flatcamGUI/MainGUI.py:1350 msgid "Will not save the changes and will close the preferences window." msgstr "" "N'enregistrera pas les modifications et fermera la fenêtre des paramètres." -#: flatcamGUI/FlatCAMGUI.py:1719 +#: flatcamGUI/MainGUI.py:1719 msgid "SHOW SHORTCUT LIST" msgstr "MONTRER LISTE DES RACCOURCIS" -#: flatcamGUI/FlatCAMGUI.py:1719 +#: flatcamGUI/MainGUI.py:1719 msgid "Switch to Project Tab" msgstr "Passer à l'onglet Projet" -#: flatcamGUI/FlatCAMGUI.py:1719 +#: flatcamGUI/MainGUI.py:1719 msgid "Switch to Selected Tab" msgstr "Passer à l'onglet Sélectionné" -#: flatcamGUI/FlatCAMGUI.py:1720 +#: flatcamGUI/MainGUI.py:1720 msgid "Switch to Tool Tab" msgstr "Basculer vers l'onglet Outil" -#: flatcamGUI/FlatCAMGUI.py:1721 +#: flatcamGUI/MainGUI.py:1721 msgid "New Gerber" msgstr "Nouveau Gerber" -#: flatcamGUI/FlatCAMGUI.py:1721 +#: flatcamGUI/MainGUI.py:1721 msgid "Edit Object (if selected)" msgstr "Editer objet (si sélectionné)" -#: flatcamGUI/FlatCAMGUI.py:1721 +#: flatcamGUI/MainGUI.py:1721 msgid "Jump to Coordinates" msgstr "Aller aux coordonnées" -#: flatcamGUI/FlatCAMGUI.py:1722 +#: flatcamGUI/MainGUI.py:1722 msgid "New Excellon" msgstr "Nouvelle Excellon" -#: flatcamGUI/FlatCAMGUI.py:1722 +#: flatcamGUI/MainGUI.py:1722 msgid "Move Obj" msgstr "Déplacer Obj" -#: flatcamGUI/FlatCAMGUI.py:1722 +#: flatcamGUI/MainGUI.py:1722 msgid "New Geometry" msgstr "Nouvelle Géométrie" -#: flatcamGUI/FlatCAMGUI.py:1722 +#: flatcamGUI/MainGUI.py:1722 msgid "Change Units" msgstr "Changer d'unités" -#: flatcamGUI/FlatCAMGUI.py:1723 +#: flatcamGUI/MainGUI.py:1723 msgid "Open Properties Tool" msgstr "Ouvrir les Propriétés" -#: flatcamGUI/FlatCAMGUI.py:1723 +#: flatcamGUI/MainGUI.py:1723 msgid "Rotate by 90 degree CW" msgstr "Rotation de 90 degrés CW" -#: flatcamGUI/FlatCAMGUI.py:1723 +#: flatcamGUI/MainGUI.py:1723 msgid "Shell Toggle" msgstr "Shell bascule" -#: flatcamGUI/FlatCAMGUI.py:1724 +#: flatcamGUI/MainGUI.py:1724 msgid "" "Add a Tool (when in Geometry Selected Tab or in Tools NCC or Tools Paint)" msgstr "" "Ajouter un outil (dans l'onglet Géométrie sélectionnée ou dans Outils NCC ou " "Outils de Peinture)" -#: flatcamGUI/FlatCAMGUI.py:1725 +#: flatcamGUI/MainGUI.py:1725 msgid "Flip on X_axis" msgstr "Miroir sur l'axe des X" -#: flatcamGUI/FlatCAMGUI.py:1725 +#: flatcamGUI/MainGUI.py:1725 msgid "Flip on Y_axis" msgstr "Miroir sur l'axe des Y" -#: flatcamGUI/FlatCAMGUI.py:1728 +#: flatcamGUI/MainGUI.py:1728 msgid "Copy Obj" msgstr "Copier Obj" -#: flatcamGUI/FlatCAMGUI.py:1728 +#: flatcamGUI/MainGUI.py:1728 msgid "Open Tools Database" msgstr "Ouvrir la BD des outils" -#: flatcamGUI/FlatCAMGUI.py:1729 +#: flatcamGUI/MainGUI.py:1729 msgid "Open Excellon File" msgstr "Ouvrir le fichier Excellon" -#: flatcamGUI/FlatCAMGUI.py:1729 +#: flatcamGUI/MainGUI.py:1729 msgid "Open Gerber File" msgstr "Ouvrir le fichier Gerber" -#: flatcamGUI/FlatCAMGUI.py:1729 +#: flatcamGUI/MainGUI.py:1729 msgid "New Project" msgstr "Nouveau Projet" -#: flatcamGUI/FlatCAMGUI.py:1730 flatcamTools/ToolPDF.py:42 +#: flatcamGUI/MainGUI.py:1730 flatcamTools/ToolPDF.py:42 msgid "PDF Import Tool" msgstr "Outil d'importation PDF" -#: flatcamGUI/FlatCAMGUI.py:1730 +#: flatcamGUI/MainGUI.py:1730 msgid "Save Project" msgstr "Sauvegarder le projet" -#: flatcamGUI/FlatCAMGUI.py:1730 +#: flatcamGUI/MainGUI.py:1730 msgid "Toggle Plot Area" msgstr "Basculer la Zone de Tracé" -#: flatcamGUI/FlatCAMGUI.py:1733 +#: flatcamGUI/MainGUI.py:1733 msgid "Copy Obj_Name" msgstr "Copier Nom Obj" -#: flatcamGUI/FlatCAMGUI.py:1734 +#: flatcamGUI/MainGUI.py:1734 msgid "Toggle Code Editor" msgstr "Basculer l'éditeur de Code" -#: flatcamGUI/FlatCAMGUI.py:1734 +#: flatcamGUI/MainGUI.py:1734 msgid "Toggle the axis" msgstr "Basculer l'axe" -#: flatcamGUI/FlatCAMGUI.py:1734 flatcamGUI/FlatCAMGUI.py:1933 -#: flatcamGUI/FlatCAMGUI.py:2020 flatcamGUI/FlatCAMGUI.py:2142 +#: flatcamGUI/MainGUI.py:1734 flatcamGUI/MainGUI.py:1933 +#: flatcamGUI/MainGUI.py:2020 flatcamGUI/MainGUI.py:2142 msgid "Distance Minimum Tool" msgstr "Outil de Distance Minimum" -#: flatcamGUI/FlatCAMGUI.py:1735 +#: flatcamGUI/MainGUI.py:1735 msgid "Open Preferences Window" msgstr "Ouvrir la fenêtre de Paramètres " -#: flatcamGUI/FlatCAMGUI.py:1736 +#: flatcamGUI/MainGUI.py:1736 msgid "Rotate by 90 degree CCW" msgstr "Faire pivoter de 90 degrés dans le sens anti-horaire" -#: flatcamGUI/FlatCAMGUI.py:1736 +#: flatcamGUI/MainGUI.py:1736 msgid "Run a Script" msgstr "Exécuter un script" -#: flatcamGUI/FlatCAMGUI.py:1736 +#: flatcamGUI/MainGUI.py:1736 msgid "Toggle the workspace" msgstr "Basculer l'espace de travail" -#: flatcamGUI/FlatCAMGUI.py:1736 +#: flatcamGUI/MainGUI.py:1736 msgid "Skew on X axis" msgstr "Inclinaison sur l'axe X" -#: flatcamGUI/FlatCAMGUI.py:1737 +#: flatcamGUI/MainGUI.py:1737 msgid "Skew on Y axis" msgstr "Inclinaison sur l'axe Y" -#: flatcamGUI/FlatCAMGUI.py:1740 +#: flatcamGUI/MainGUI.py:1740 msgid "2-Sided PCB Tool" msgstr "Outil de PCB double face" -#: flatcamGUI/FlatCAMGUI.py:1740 +#: flatcamGUI/MainGUI.py:1740 msgid "Transformations Tool" msgstr "Outil de Transformation" -#: flatcamGUI/FlatCAMGUI.py:1742 +#: flatcamGUI/MainGUI.py:1742 msgid "Solder Paste Dispensing Tool" msgstr "Outil d'application de Pâte à souder" -#: flatcamGUI/FlatCAMGUI.py:1743 +#: flatcamGUI/MainGUI.py:1743 msgid "Film PCB Tool" msgstr "Outil de PCB film" -#: flatcamGUI/FlatCAMGUI.py:1743 +#: flatcamGUI/MainGUI.py:1743 msgid "Non-Copper Clearing Tool" msgstr "Outil de Nettoyage sans Cuivre" -#: flatcamGUI/FlatCAMGUI.py:1744 +#: flatcamGUI/MainGUI.py:1744 msgid "Paint Area Tool" msgstr "Outil de Zone de Peinture" -#: flatcamGUI/FlatCAMGUI.py:1744 +#: flatcamGUI/MainGUI.py:1744 msgid "Rules Check Tool" msgstr "Outil de Vérification des Règles" -#: flatcamGUI/FlatCAMGUI.py:1745 +#: flatcamGUI/MainGUI.py:1745 msgid "View File Source" msgstr "Voir le fichier Source" -#: flatcamGUI/FlatCAMGUI.py:1746 +#: flatcamGUI/MainGUI.py:1746 msgid "Cutout PCB Tool" msgstr "Outil de Découpe PCB" -#: flatcamGUI/FlatCAMGUI.py:1746 +#: flatcamGUI/MainGUI.py:1746 msgid "Enable all Plots" msgstr "Activer tous les Dessins" -#: flatcamGUI/FlatCAMGUI.py:1746 +#: flatcamGUI/MainGUI.py:1746 msgid "Disable all Plots" msgstr "Désactiver tous les Dessins" -#: flatcamGUI/FlatCAMGUI.py:1746 +#: flatcamGUI/MainGUI.py:1746 msgid "Disable Non-selected Plots" msgstr "Désactiver les Dessins non sélectionnés" -#: flatcamGUI/FlatCAMGUI.py:1747 +#: flatcamGUI/MainGUI.py:1747 msgid "Toggle Full Screen" msgstr "Passer en plein écran" -#: flatcamGUI/FlatCAMGUI.py:1750 +#: flatcamGUI/MainGUI.py:1750 msgid "Abort current task (gracefully)" msgstr "Abandonner la tâche en cours (avec élégance)" -#: flatcamGUI/FlatCAMGUI.py:1753 +#: flatcamGUI/MainGUI.py:1753 msgid "Save Project As" msgstr "Enregistrer le projet sous" -#: flatcamGUI/FlatCAMGUI.py:1754 +#: flatcamGUI/MainGUI.py:1754 msgid "" "Paste Special. Will convert a Windows path style to the one required in Tcl " "Shell" @@ -6640,246 +6640,246 @@ msgstr "" "Collage spécial. Convertira un style de chemin d'accès Windows en celui " "requis dans Tcl Shell" -#: flatcamGUI/FlatCAMGUI.py:1757 +#: flatcamGUI/MainGUI.py:1757 msgid "Open Online Manual" msgstr "Ouvrir le manuel en ligne" -#: flatcamGUI/FlatCAMGUI.py:1758 +#: flatcamGUI/MainGUI.py:1758 msgid "Open Online Tutorials" msgstr "Ouvrir des tutoriels en ligne" -#: flatcamGUI/FlatCAMGUI.py:1758 +#: flatcamGUI/MainGUI.py:1758 msgid "Refresh Plots" msgstr "Actualiser les Dessins" -#: flatcamGUI/FlatCAMGUI.py:1758 flatcamTools/ToolSolderPaste.py:509 +#: flatcamGUI/MainGUI.py:1758 flatcamTools/ToolSolderPaste.py:509 msgid "Delete Object" msgstr "Supprimer un objet" -#: flatcamGUI/FlatCAMGUI.py:1758 +#: flatcamGUI/MainGUI.py:1758 msgid "Alternate: Delete Tool" msgstr "Autre: Suppression de Outil" -#: flatcamGUI/FlatCAMGUI.py:1759 +#: flatcamGUI/MainGUI.py:1759 msgid "(left to Key_1)Toggle Notebook Area (Left Side)" msgstr "(à gauche de Key_1) Basculer la Zone du bloc-notes (côté gauche)" -#: flatcamGUI/FlatCAMGUI.py:1759 +#: flatcamGUI/MainGUI.py:1759 msgid "En(Dis)able Obj Plot" msgstr "(Dés)activer Obj Dessin" -#: flatcamGUI/FlatCAMGUI.py:1760 +#: flatcamGUI/MainGUI.py:1760 msgid "Deselects all objects" msgstr "Désélectionne tous les objets" -#: flatcamGUI/FlatCAMGUI.py:1774 +#: flatcamGUI/MainGUI.py:1774 msgid "Editor Shortcut list" msgstr "Liste des raccourcis de l'éditeur" -#: flatcamGUI/FlatCAMGUI.py:1928 +#: flatcamGUI/MainGUI.py:1928 msgid "GEOMETRY EDITOR" msgstr "EDITEUR DE GEOMETRIE" -#: flatcamGUI/FlatCAMGUI.py:1928 +#: flatcamGUI/MainGUI.py:1928 msgid "Draw an Arc" msgstr "Dessiner un arc" -#: flatcamGUI/FlatCAMGUI.py:1928 +#: flatcamGUI/MainGUI.py:1928 msgid "Copy Geo Item" msgstr "Copier un élém. de Géo" -#: flatcamGUI/FlatCAMGUI.py:1929 +#: flatcamGUI/MainGUI.py:1929 msgid "Within Add Arc will toogle the ARC direction: CW or CCW" msgstr "Dans Ajouter un arc va toogle la direction de l'ARC: CW ou CCW" -#: flatcamGUI/FlatCAMGUI.py:1929 +#: flatcamGUI/MainGUI.py:1929 msgid "Polygon Intersection Tool" msgstr "Outil d'intersection de polygones" -#: flatcamGUI/FlatCAMGUI.py:1930 +#: flatcamGUI/MainGUI.py:1930 msgid "Geo Paint Tool" msgstr "Outil de peinture géo" -#: flatcamGUI/FlatCAMGUI.py:1930 flatcamGUI/FlatCAMGUI.py:2019 -#: flatcamGUI/FlatCAMGUI.py:2139 +#: flatcamGUI/MainGUI.py:1930 flatcamGUI/MainGUI.py:2019 +#: flatcamGUI/MainGUI.py:2139 msgid "Jump to Location (x, y)" msgstr "Aller à l'emplacement (x, y)" -#: flatcamGUI/FlatCAMGUI.py:1930 +#: flatcamGUI/MainGUI.py:1930 msgid "Toggle Corner Snap" msgstr "Basculement d'angle" -#: flatcamGUI/FlatCAMGUI.py:1930 +#: flatcamGUI/MainGUI.py:1930 msgid "Move Geo Item" msgstr "Déplacer un élément de géométrie" -#: flatcamGUI/FlatCAMGUI.py:1931 +#: flatcamGUI/MainGUI.py:1931 msgid "Within Add Arc will cycle through the ARC modes" msgstr "Dans Ajouter Arc passera en revue les modes ARC" -#: flatcamGUI/FlatCAMGUI.py:1931 +#: flatcamGUI/MainGUI.py:1931 msgid "Draw a Polygon" msgstr "Dessine un polygone" -#: flatcamGUI/FlatCAMGUI.py:1931 +#: flatcamGUI/MainGUI.py:1931 msgid "Draw a Circle" msgstr "Dessiner un cercle" -#: flatcamGUI/FlatCAMGUI.py:1932 +#: flatcamGUI/MainGUI.py:1932 msgid "Draw a Path" msgstr "Dessiner un chemin" -#: flatcamGUI/FlatCAMGUI.py:1932 +#: flatcamGUI/MainGUI.py:1932 msgid "Draw Rectangle" msgstr "Dessiner un rectangle" -#: flatcamGUI/FlatCAMGUI.py:1932 +#: flatcamGUI/MainGUI.py:1932 msgid "Polygon Subtraction Tool" msgstr "Outil de soustraction de polygone" -#: flatcamGUI/FlatCAMGUI.py:1932 +#: flatcamGUI/MainGUI.py:1932 msgid "Add Text Tool" msgstr "Ajouter un outil de texte" -#: flatcamGUI/FlatCAMGUI.py:1933 +#: flatcamGUI/MainGUI.py:1933 msgid "Polygon Union Tool" msgstr "Outil union de polygones" -#: flatcamGUI/FlatCAMGUI.py:1933 +#: flatcamGUI/MainGUI.py:1933 msgid "Flip shape on X axis" msgstr "Refléter la forme sur l'axe X" -#: flatcamGUI/FlatCAMGUI.py:1933 +#: flatcamGUI/MainGUI.py:1933 msgid "Flip shape on Y axis" msgstr "Refléter la forme sur l'axe Y" -#: flatcamGUI/FlatCAMGUI.py:1934 +#: flatcamGUI/MainGUI.py:1934 msgid "Skew shape on X axis" msgstr "Inclinaison de la forme sur l'axe X" -#: flatcamGUI/FlatCAMGUI.py:1934 +#: flatcamGUI/MainGUI.py:1934 msgid "Skew shape on Y axis" msgstr "Inclinaison de la forme sur l'axe Y" -#: flatcamGUI/FlatCAMGUI.py:1934 +#: flatcamGUI/MainGUI.py:1934 msgid "Editor Transformation Tool" msgstr "Outil de transformation de l'éditeur" -#: flatcamGUI/FlatCAMGUI.py:1935 +#: flatcamGUI/MainGUI.py:1935 msgid "Offset shape on X axis" msgstr "Forme décalée sur l'axe X" -#: flatcamGUI/FlatCAMGUI.py:1935 +#: flatcamGUI/MainGUI.py:1935 msgid "Offset shape on Y axis" msgstr "Forme décalée sur l'axe Y" -#: flatcamGUI/FlatCAMGUI.py:1936 flatcamGUI/FlatCAMGUI.py:2022 -#: flatcamGUI/FlatCAMGUI.py:2144 +#: flatcamGUI/MainGUI.py:1936 flatcamGUI/MainGUI.py:2022 +#: flatcamGUI/MainGUI.py:2144 msgid "Save Object and Exit Editor" msgstr "Enregistrer l'objet et quitter l'éditeur" -#: flatcamGUI/FlatCAMGUI.py:1936 +#: flatcamGUI/MainGUI.py:1936 msgid "Polygon Cut Tool" msgstr "Outil de coupe de polygone" -#: flatcamGUI/FlatCAMGUI.py:1937 +#: flatcamGUI/MainGUI.py:1937 msgid "Rotate Geometry" msgstr "Faire pivoter la géométrie" -#: flatcamGUI/FlatCAMGUI.py:1937 +#: flatcamGUI/MainGUI.py:1937 msgid "Finish drawing for certain tools" msgstr "Terminer le dessin pour certains outils" -#: flatcamGUI/FlatCAMGUI.py:1937 flatcamGUI/FlatCAMGUI.py:2022 -#: flatcamGUI/FlatCAMGUI.py:2142 +#: flatcamGUI/MainGUI.py:1937 flatcamGUI/MainGUI.py:2022 +#: flatcamGUI/MainGUI.py:2142 msgid "Abort and return to Select" msgstr "Abort and return to Select" -#: flatcamGUI/FlatCAMGUI.py:1938 flatcamGUI/FlatCAMGUI.py:2734 +#: flatcamGUI/MainGUI.py:1938 flatcamGUI/MainGUI.py:2734 msgid "Delete Shape" msgstr "Supprimer la forme" -#: flatcamGUI/FlatCAMGUI.py:2018 +#: flatcamGUI/MainGUI.py:2018 msgid "EXCELLON EDITOR" msgstr "ÉDITEUR EXCELLON" -#: flatcamGUI/FlatCAMGUI.py:2018 +#: flatcamGUI/MainGUI.py:2018 msgid "Copy Drill(s)" msgstr "Copier les Forets" -#: flatcamGUI/FlatCAMGUI.py:2018 flatcamGUI/FlatCAMGUI.py:2268 +#: flatcamGUI/MainGUI.py:2018 flatcamGUI/MainGUI.py:2268 msgid "Add Drill" msgstr "Ajouter une Foret" -#: flatcamGUI/FlatCAMGUI.py:2019 +#: flatcamGUI/MainGUI.py:2019 msgid "Move Drill(s)" msgstr "Déplacer les Forets" -#: flatcamGUI/FlatCAMGUI.py:2020 +#: flatcamGUI/MainGUI.py:2020 msgid "Add a new Tool" msgstr "Ajouter un nouvel outil" -#: flatcamGUI/FlatCAMGUI.py:2021 +#: flatcamGUI/MainGUI.py:2021 msgid "Delete Drill(s)" msgstr "Supprimer les Forets" -#: flatcamGUI/FlatCAMGUI.py:2021 +#: flatcamGUI/MainGUI.py:2021 msgid "Alternate: Delete Tool(s)" msgstr "Autre: Supprimer outil(s)" -#: flatcamGUI/FlatCAMGUI.py:2138 +#: flatcamGUI/MainGUI.py:2138 msgid "GERBER EDITOR" msgstr "GERBER ÉDITEUR" -#: flatcamGUI/FlatCAMGUI.py:2138 +#: flatcamGUI/MainGUI.py:2138 msgid "Add Disc" msgstr "Ajouter un Disque" -#: flatcamGUI/FlatCAMGUI.py:2138 +#: flatcamGUI/MainGUI.py:2138 msgid "Add SemiDisc" msgstr "Ajouter un Semi-disque" -#: flatcamGUI/FlatCAMGUI.py:2140 +#: flatcamGUI/MainGUI.py:2140 msgid "Within Track & Region Tools will cycle in REVERSE the bend modes" msgstr "" "Dans les Outils de Piste et de Région, les modes de pliage sont inversés" -#: flatcamGUI/FlatCAMGUI.py:2141 +#: flatcamGUI/MainGUI.py:2141 msgid "Within Track & Region Tools will cycle FORWARD the bend modes" msgstr "" "Dans les Outils de Piste et de Région, les modes de pliage sont répétés en " "boucle" -#: flatcamGUI/FlatCAMGUI.py:2142 +#: flatcamGUI/MainGUI.py:2142 msgid "Alternate: Delete Apertures" msgstr "Autre: Supprimer les ouvertures" -#: flatcamGUI/FlatCAMGUI.py:2143 +#: flatcamGUI/MainGUI.py:2143 msgid "Eraser Tool" msgstr "Outil pour Effacer" -#: flatcamGUI/FlatCAMGUI.py:2144 +#: flatcamGUI/MainGUI.py:2144 #: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:220 msgid "Mark Area Tool" msgstr "Outil Zone de Marquage" -#: flatcamGUI/FlatCAMGUI.py:2144 +#: flatcamGUI/MainGUI.py:2144 msgid "Poligonize Tool" msgstr "Outil Polygoniser" -#: flatcamGUI/FlatCAMGUI.py:2144 +#: flatcamGUI/MainGUI.py:2144 msgid "Transformation Tool" msgstr "Outil de Transformation" -#: flatcamGUI/FlatCAMGUI.py:2161 +#: flatcamGUI/MainGUI.py:2161 msgid "Toggle Visibility" msgstr "Basculer la Visibilité" -#: flatcamGUI/FlatCAMGUI.py:2167 +#: flatcamGUI/MainGUI.py:2167 msgid "New" msgstr "Nouveau" -#: flatcamGUI/FlatCAMGUI.py:2169 flatcamGUI/ObjectUI.py:450 +#: flatcamGUI/MainGUI.py:2169 flatcamGUI/ObjectUI.py:450 #: flatcamObjects/FlatCAMGerber.py:239 flatcamObjects/FlatCAMGerber.py:327 #: flatcamTools/ToolCalibration.py:631 flatcamTools/ToolCalibration.py:648 #: flatcamTools/ToolCalibration.py:815 flatcamTools/ToolCopperThieving.py:144 @@ -6896,7 +6896,7 @@ msgstr "Nouveau" msgid "Geometry" msgstr "Géométrie" -#: flatcamGUI/FlatCAMGUI.py:2173 +#: flatcamGUI/MainGUI.py:2173 #: flatcamGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:99 #: flatcamTools/ToolAlignObjects.py:74 flatcamTools/ToolAlignObjects.py:110 #: flatcamTools/ToolCalibration.py:197 flatcamTools/ToolCalibration.py:631 @@ -6911,76 +6911,76 @@ msgstr "Géométrie" msgid "Excellon" msgstr "Excellon" -#: flatcamGUI/FlatCAMGUI.py:2180 +#: flatcamGUI/MainGUI.py:2180 msgid "Grids" msgstr "Pas grilles" -#: flatcamGUI/FlatCAMGUI.py:2187 +#: flatcamGUI/MainGUI.py:2187 msgid "Clear Plot" msgstr "Effacer le Dessin" -#: flatcamGUI/FlatCAMGUI.py:2189 +#: flatcamGUI/MainGUI.py:2189 msgid "Replot" msgstr "Re-Tracé" -#: flatcamGUI/FlatCAMGUI.py:2193 +#: flatcamGUI/MainGUI.py:2193 msgid "Geo Editor" msgstr "Éditeur de Géo" -#: flatcamGUI/FlatCAMGUI.py:2195 +#: flatcamGUI/MainGUI.py:2195 msgid "Path" msgstr "Chemin" -#: flatcamGUI/FlatCAMGUI.py:2197 +#: flatcamGUI/MainGUI.py:2197 msgid "Rectangle" msgstr "Rectangle" -#: flatcamGUI/FlatCAMGUI.py:2200 +#: flatcamGUI/MainGUI.py:2200 msgid "Circle" msgstr "Cercle" -#: flatcamGUI/FlatCAMGUI.py:2204 +#: flatcamGUI/MainGUI.py:2204 msgid "Arc" msgstr "Arc" -#: flatcamGUI/FlatCAMGUI.py:2218 +#: flatcamGUI/MainGUI.py:2218 msgid "Union" msgstr "Union" -#: flatcamGUI/FlatCAMGUI.py:2220 +#: flatcamGUI/MainGUI.py:2220 msgid "Intersection" msgstr "Intersection" -#: flatcamGUI/FlatCAMGUI.py:2222 +#: flatcamGUI/MainGUI.py:2222 msgid "Subtraction" msgstr "Soustraction" -#: flatcamGUI/FlatCAMGUI.py:2224 flatcamGUI/ObjectUI.py:2141 +#: flatcamGUI/MainGUI.py:2224 flatcamGUI/ObjectUI.py:2141 #: flatcamGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:56 msgid "Cut" msgstr "Couper" -#: flatcamGUI/FlatCAMGUI.py:2235 +#: flatcamGUI/MainGUI.py:2235 msgid "Pad" msgstr "Pad" -#: flatcamGUI/FlatCAMGUI.py:2237 +#: flatcamGUI/MainGUI.py:2237 msgid "Pad Array" msgstr "Tableau Pad" -#: flatcamGUI/FlatCAMGUI.py:2241 +#: flatcamGUI/MainGUI.py:2241 msgid "Track" msgstr "Piste" -#: flatcamGUI/FlatCAMGUI.py:2243 +#: flatcamGUI/MainGUI.py:2243 msgid "Region" msgstr "Région" -#: flatcamGUI/FlatCAMGUI.py:2266 +#: flatcamGUI/MainGUI.py:2266 msgid "Exc Editor" msgstr "Éditeur Excellon" -#: flatcamGUI/FlatCAMGUI.py:2311 +#: flatcamGUI/MainGUI.py:2311 msgid "" "Relative measurement.\n" "Reference is last click position" @@ -6988,7 +6988,7 @@ msgstr "" "Mesure relative\n" "La référence est la position du dernier clic" -#: flatcamGUI/FlatCAMGUI.py:2317 +#: flatcamGUI/MainGUI.py:2317 msgid "" "Absolute measurement.\n" "Reference is (X=0, Y= 0) position" @@ -6996,35 +6996,35 @@ msgstr "" "Mesure absolue.\n" "La référence est (X = 0, Y = 0) position" -#: flatcamGUI/FlatCAMGUI.py:2419 +#: flatcamGUI/MainGUI.py:2419 msgid "Lock Toolbars" msgstr "Verrouiller les barres d'outils" -#: flatcamGUI/FlatCAMGUI.py:2505 +#: flatcamGUI/MainGUI.py:2505 msgid "FlatCAM Preferences Folder opened." msgstr "Dossier Paramètres FlatCAM ouvert." -#: flatcamGUI/FlatCAMGUI.py:2516 +#: flatcamGUI/MainGUI.py:2516 msgid "Are you sure you want to delete the GUI Settings? \n" msgstr "Êtes-vous sûr de vouloir supprimer les paramètres de GUI?\n" -#: flatcamGUI/FlatCAMGUI.py:2624 +#: flatcamGUI/MainGUI.py:2624 msgid "&Cutout Tool" msgstr "Outil de Découpe" -#: flatcamGUI/FlatCAMGUI.py:2694 +#: flatcamGUI/MainGUI.py:2694 msgid "Select 'Esc'" msgstr "Sélectionnez 'Esc'" -#: flatcamGUI/FlatCAMGUI.py:2732 +#: flatcamGUI/MainGUI.py:2732 msgid "Copy Objects" msgstr "Copier des objets" -#: flatcamGUI/FlatCAMGUI.py:2740 +#: flatcamGUI/MainGUI.py:2740 msgid "Move Objects" msgstr "Déplacer des objets" -#: flatcamGUI/FlatCAMGUI.py:3363 +#: flatcamGUI/MainGUI.py:3363 msgid "" "Please first select a geometry item to be cutted\n" "then select the geometry item that will be cutted\n" @@ -7036,12 +7036,12 @@ msgstr "" "sur le premier article. Appuyez à la fin de la touche ~ X ~ ou\n" "le bouton de la barre d'outils." -#: flatcamGUI/FlatCAMGUI.py:3370 flatcamGUI/FlatCAMGUI.py:3532 -#: flatcamGUI/FlatCAMGUI.py:3577 flatcamGUI/FlatCAMGUI.py:3597 +#: flatcamGUI/MainGUI.py:3370 flatcamGUI/MainGUI.py:3532 +#: flatcamGUI/MainGUI.py:3577 flatcamGUI/MainGUI.py:3597 msgid "Warning" msgstr "Attention" -#: flatcamGUI/FlatCAMGUI.py:3527 +#: flatcamGUI/MainGUI.py:3527 msgid "" "Please select geometry items \n" "on which to perform Intersection Tool." @@ -7049,7 +7049,7 @@ msgstr "" "Veuillez sélectionner des éléments de géométrie\n" "sur lequel exécuter l'outil Intersection." -#: flatcamGUI/FlatCAMGUI.py:3572 +#: flatcamGUI/MainGUI.py:3572 msgid "" "Please select geometry items \n" "on which to perform Substraction Tool." @@ -7057,7 +7057,7 @@ msgstr "" "Veuillez sélectionner des éléments de géométrie\n" "sur lequel effectuer l'outil de Soustraction." -#: flatcamGUI/FlatCAMGUI.py:3592 +#: flatcamGUI/MainGUI.py:3592 msgid "" "Please select geometry items \n" "on which to perform union." @@ -7065,52 +7065,52 @@ msgstr "" "Veuillez sélectionner des éléments de géométrie\n" "sur lequel effectuer l'union." -#: flatcamGUI/FlatCAMGUI.py:3675 flatcamGUI/FlatCAMGUI.py:3890 +#: flatcamGUI/MainGUI.py:3675 flatcamGUI/MainGUI.py:3890 msgid "Cancelled. Nothing selected to delete." msgstr "Annulé. Rien de sélectionné à supprimer." -#: flatcamGUI/FlatCAMGUI.py:3759 flatcamGUI/FlatCAMGUI.py:4006 +#: flatcamGUI/MainGUI.py:3759 flatcamGUI/MainGUI.py:4006 msgid "Cancelled. Nothing selected to copy." msgstr "Annulé. Rien n'est sélectionné pour copier." -#: flatcamGUI/FlatCAMGUI.py:3805 flatcamGUI/FlatCAMGUI.py:4035 +#: flatcamGUI/MainGUI.py:3805 flatcamGUI/MainGUI.py:4035 msgid "Cancelled. Nothing selected to move." msgstr "Annulé. Rien de sélectionné pour bouger." -#: flatcamGUI/FlatCAMGUI.py:4061 +#: flatcamGUI/MainGUI.py:4061 msgid "New Tool ..." msgstr "Nouvel outil ..." -#: flatcamGUI/FlatCAMGUI.py:4062 flatcamTools/ToolNCC.py:924 +#: flatcamGUI/MainGUI.py:4062 flatcamTools/ToolNCC.py:924 #: flatcamTools/ToolPaint.py:850 flatcamTools/ToolSolderPaste.py:560 msgid "Enter a Tool Diameter" msgstr "Entrer un diamètre d'outil" -#: flatcamGUI/FlatCAMGUI.py:4074 +#: flatcamGUI/MainGUI.py:4074 msgid "Adding Tool cancelled ..." msgstr "Ajout de l'outil annulé ..." -#: flatcamGUI/FlatCAMGUI.py:4088 +#: flatcamGUI/MainGUI.py:4088 msgid "Distance Tool exit..." msgstr "Distance Outil sortie ..." -#: flatcamGUI/FlatCAMGUI.py:4300 flatcamGUI/FlatCAMGUI.py:4307 +#: flatcamGUI/MainGUI.py:4300 flatcamGUI/MainGUI.py:4307 msgid "Idle." msgstr "Au repos." -#: flatcamGUI/FlatCAMGUI.py:4338 +#: flatcamGUI/MainGUI.py:4338 msgid "Application started ..." msgstr "Bienvenu dans FlatCam ..." -#: flatcamGUI/FlatCAMGUI.py:4339 +#: flatcamGUI/MainGUI.py:4339 msgid "Hello!" msgstr "Bonjours !" -#: flatcamGUI/FlatCAMGUI.py:4401 +#: flatcamGUI/MainGUI.py:4401 msgid "Open Project ..." msgstr "Ouvrir Projet ..." -#: flatcamGUI/FlatCAMGUI.py:4427 +#: flatcamGUI/MainGUI.py:4427 msgid "Exit" msgstr "Quitter" diff --git a/locale/hu/LC_MESSAGES/strings.po b/locale/hu/LC_MESSAGES/strings.po index 7a5a5c32..6358e4f5 100644 --- a/locale/hu/LC_MESSAGES/strings.po +++ b/locale/hu/LC_MESSAGES/strings.po @@ -69,8 +69,8 @@ msgstr "" #: FlatCAMDB.py:709 FlatCAMDB.py:2125 FlatCAMDB.py:2171 #: flatcamEditors/FlatCAMExcEditor.py:1023 #: flatcamEditors/FlatCAMExcEditor.py:1091 -#: flatcamEditors/FlatCAMTextEditor.py:223 flatcamGUI/FlatCAMGUI.py:3443 -#: flatcamGUI/FlatCAMGUI.py:3659 flatcamGUI/FlatCAMGUI.py:3874 +#: flatcamEditors/FlatCAMTextEditor.py:223 flatcamGUI/MainGUI.py:3443 +#: flatcamGUI/MainGUI.py:3659 flatcamGUI/MainGUI.py:3874 #: flatcamObjects/ObjectCollection.py:126 flatcamTools/ToolFilm.py:754 #: flatcamTools/ToolFilm.py:900 flatcamTools/ToolImage.py:247 #: flatcamTools/ToolMove.py:269 flatcamTools/ToolPcbWizard.py:301 @@ -121,20 +121,20 @@ msgstr "Editor is activated ..." msgid "Do you want to save the edited object?" msgstr "Do you want to save the edited object?" -#: FlatCAMApp.py:2226 flatcamGUI/FlatCAMGUI.py:2288 +#: FlatCAMApp.py:2226 flatcamGUI/MainGUI.py:2288 msgid "Close Editor" msgstr "Close Editor" #: FlatCAMApp.py:2229 FlatCAMApp.py:3518 FlatCAMApp.py:6085 FlatCAMApp.py:7345 #: FlatCAMTranslation.py:109 FlatCAMTranslation.py:207 -#: flatcamGUI/FlatCAMGUI.py:2519 +#: flatcamGUI/MainGUI.py:2519 #: flatcamGUI/preferences/PreferencesUIManager.py:1122 msgid "Yes" msgstr "Yes" #: FlatCAMApp.py:2230 FlatCAMApp.py:3519 FlatCAMApp.py:6086 FlatCAMApp.py:7346 #: FlatCAMTranslation.py:110 FlatCAMTranslation.py:208 -#: flatcamGUI/FlatCAMGUI.py:2520 +#: flatcamGUI/MainGUI.py:2520 #: flatcamGUI/preferences/PreferencesUIManager.py:1123 #: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:164 #: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:150 @@ -144,7 +144,7 @@ msgstr "No" #: FlatCAMApp.py:2231 FlatCAMApp.py:3520 FlatCAMApp.py:4478 FlatCAMApp.py:5103 #: FlatCAMApp.py:7347 FlatCAMDB.py:128 FlatCAMDB.py:1689 -#: flatcamGUI/FlatCAMGUI.py:1347 +#: flatcamGUI/MainGUI.py:1347 msgid "Cancel" msgstr "Cancel" @@ -275,7 +275,7 @@ msgstr "created/selected" msgid "Plotting" msgstr "Plotting" -#: FlatCAMApp.py:3090 flatcamGUI/FlatCAMGUI.py:545 +#: FlatCAMApp.py:3090 flatcamGUI/MainGUI.py:545 msgid "About FlatCAM" msgstr "About FlatCAM" @@ -415,7 +415,7 @@ msgstr "Translator" msgid "Corrections" msgstr "Corrections" -#: FlatCAMApp.py:3455 FlatCAMApp.py:3464 flatcamGUI/FlatCAMGUI.py:527 +#: FlatCAMApp.py:3455 FlatCAMApp.py:3464 flatcamGUI/MainGUI.py:527 msgid "Bookmarks Manager" msgstr "Bookmarks Manager" @@ -443,7 +443,7 @@ msgstr "" msgid "Alternative website" msgstr "Alternative website" -#: FlatCAMApp.py:3508 flatcamGUI/FlatCAMGUI.py:4267 +#: FlatCAMApp.py:3508 flatcamGUI/MainGUI.py:4267 msgid "Application is saving the project. Please wait ..." msgstr "Application is saving the project. Please wait ..." @@ -645,8 +645,8 @@ msgstr "Wrong coordinates. Enter coordinates in format: X,Y" #: flatcamEditors/FlatCAMGrbEditor.py:1490 #: flatcamEditors/FlatCAMGrbEditor.py:1759 #: flatcamEditors/FlatCAMGrbEditor.py:4622 -#: flatcamEditors/FlatCAMGrbEditor.py:4637 flatcamGUI/FlatCAMGUI.py:3424 -#: flatcamGUI/FlatCAMGUI.py:3436 flatcamTools/ToolAlignObjects.py:393 +#: flatcamEditors/FlatCAMGrbEditor.py:4637 flatcamGUI/MainGUI.py:3424 +#: flatcamGUI/MainGUI.py:3436 flatcamTools/ToolAlignObjects.py:393 #: flatcamTools/ToolAlignObjects.py:415 msgid "Done." msgstr "Done." @@ -795,12 +795,12 @@ msgstr "No object selected to Skew/Shear on Y axis." msgid "Skew on Y axis done." msgstr "Skew on Y axis done." -#: FlatCAMApp.py:6497 FlatCAMApp.py:6544 flatcamGUI/FlatCAMGUI.py:503 -#: flatcamGUI/FlatCAMGUI.py:1728 +#: FlatCAMApp.py:6497 FlatCAMApp.py:6544 flatcamGUI/MainGUI.py:503 +#: flatcamGUI/MainGUI.py:1728 msgid "Select All" msgstr "Select All" -#: FlatCAMApp.py:6501 FlatCAMApp.py:6548 flatcamGUI/FlatCAMGUI.py:505 +#: FlatCAMApp.py:6501 FlatCAMApp.py:6548 flatcamGUI/MainGUI.py:505 msgid "Deselect All" msgstr "Deselect All" @@ -812,7 +812,7 @@ msgstr "All objects are selected." msgid "Objects selection is cleared." msgstr "Objects selection is cleared." -#: FlatCAMApp.py:6594 flatcamGUI/FlatCAMGUI.py:1721 +#: FlatCAMApp.py:6594 flatcamGUI/MainGUI.py:1721 msgid "Grid On/Off" msgstr "Grid On/Off" @@ -828,9 +828,9 @@ msgid "Add" msgstr "Add" #: FlatCAMApp.py:6608 flatcamEditors/FlatCAMGrbEditor.py:2588 -#: flatcamEditors/FlatCAMGrbEditor.py:2736 flatcamGUI/FlatCAMGUI.py:751 -#: flatcamGUI/FlatCAMGUI.py:1074 flatcamGUI/FlatCAMGUI.py:2141 -#: flatcamGUI/FlatCAMGUI.py:2284 flatcamGUI/FlatCAMGUI.py:2777 +#: flatcamEditors/FlatCAMGrbEditor.py:2736 flatcamGUI/MainGUI.py:751 +#: flatcamGUI/MainGUI.py:1074 flatcamGUI/MainGUI.py:2141 +#: flatcamGUI/MainGUI.py:2284 flatcamGUI/MainGUI.py:2777 #: flatcamGUI/ObjectUI.py:1623 flatcamObjects/FlatCAMGeometry.py:505 #: flatcamTools/ToolNCC.py:316 flatcamTools/ToolNCC.py:637 #: flatcamTools/ToolPaint.py:299 flatcamTools/ToolPaint.py:682 @@ -914,8 +914,8 @@ msgstr "" msgid "New Project created" msgstr "New Project created" -#: FlatCAMApp.py:7519 FlatCAMApp.py:7523 flatcamGUI/FlatCAMGUI.py:836 -#: flatcamGUI/FlatCAMGUI.py:2544 +#: FlatCAMApp.py:7519 FlatCAMApp.py:7523 flatcamGUI/MainGUI.py:836 +#: flatcamGUI/MainGUI.py:2544 msgid "Open Gerber" msgstr "Open Gerber" @@ -932,8 +932,8 @@ msgstr "" msgid "Opening Gerber file." msgstr "Opening Gerber file." -#: FlatCAMApp.py:7557 FlatCAMApp.py:7561 flatcamGUI/FlatCAMGUI.py:838 -#: flatcamGUI/FlatCAMGUI.py:2546 +#: FlatCAMApp.py:7557 FlatCAMApp.py:7561 flatcamGUI/MainGUI.py:838 +#: flatcamGUI/MainGUI.py:2546 msgid "Open Excellon" msgstr "Open Excellon" @@ -949,7 +949,7 @@ msgstr "Open G-Code" msgid "Opening G-Code file." msgstr "Opening G-Code file." -#: FlatCAMApp.py:7632 FlatCAMApp.py:7635 flatcamGUI/FlatCAMGUI.py:1730 +#: FlatCAMApp.py:7632 FlatCAMApp.py:7635 flatcamGUI/MainGUI.py:1730 msgid "Open Project" msgstr "Open Project" @@ -1103,8 +1103,8 @@ msgstr "TCL script file opened in Code Editor and executed." msgid "Save Project As ..." msgstr "Save Project As ..." -#: FlatCAMApp.py:8551 flatcamGUI/FlatCAMGUI.py:1134 -#: flatcamGUI/FlatCAMGUI.py:2176 +#: FlatCAMApp.py:8551 flatcamGUI/MainGUI.py:1134 +#: flatcamGUI/MainGUI.py:2176 msgid "Project" msgstr "Project" @@ -1349,7 +1349,7 @@ msgstr "Clear Recent projects" msgid "Clear Recent files" msgstr "Clear Recent files" -#: FlatCAMApp.py:10065 flatcamGUI/FlatCAMGUI.py:1363 +#: FlatCAMApp.py:10065 flatcamGUI/MainGUI.py:1363 msgid "Shortcut Key List" msgstr "Shortcut Key List" @@ -1507,47 +1507,47 @@ msgstr "Disabling plots ..." msgid "Working ..." msgstr "Working ..." -#: FlatCAMApp.py:10558 flatcamGUI/FlatCAMGUI.py:703 +#: FlatCAMApp.py:10558 flatcamGUI/MainGUI.py:703 msgid "Red" msgstr "Red" -#: FlatCAMApp.py:10560 flatcamGUI/FlatCAMGUI.py:706 +#: FlatCAMApp.py:10560 flatcamGUI/MainGUI.py:706 msgid "Blue" msgstr "Blue" -#: FlatCAMApp.py:10563 flatcamGUI/FlatCAMGUI.py:709 +#: FlatCAMApp.py:10563 flatcamGUI/MainGUI.py:709 msgid "Yellow" msgstr "Yellow" -#: FlatCAMApp.py:10565 flatcamGUI/FlatCAMGUI.py:712 +#: FlatCAMApp.py:10565 flatcamGUI/MainGUI.py:712 msgid "Green" msgstr "Green" -#: FlatCAMApp.py:10567 flatcamGUI/FlatCAMGUI.py:715 +#: FlatCAMApp.py:10567 flatcamGUI/MainGUI.py:715 msgid "Purple" msgstr "Purple" -#: FlatCAMApp.py:10569 flatcamGUI/FlatCAMGUI.py:718 +#: FlatCAMApp.py:10569 flatcamGUI/MainGUI.py:718 msgid "Brown" msgstr "Brown" -#: FlatCAMApp.py:10571 FlatCAMApp.py:10627 flatcamGUI/FlatCAMGUI.py:721 +#: FlatCAMApp.py:10571 FlatCAMApp.py:10627 flatcamGUI/MainGUI.py:721 msgid "White" msgstr "White" -#: FlatCAMApp.py:10573 flatcamGUI/FlatCAMGUI.py:724 +#: FlatCAMApp.py:10573 flatcamGUI/MainGUI.py:724 msgid "Black" msgstr "Black" -#: FlatCAMApp.py:10576 flatcamGUI/FlatCAMGUI.py:729 +#: FlatCAMApp.py:10576 flatcamGUI/MainGUI.py:729 msgid "Custom" msgstr "Custom" -#: FlatCAMApp.py:10586 flatcamGUI/FlatCAMGUI.py:737 +#: FlatCAMApp.py:10586 flatcamGUI/MainGUI.py:737 msgid "Default" msgstr "Default" -#: FlatCAMApp.py:10610 flatcamGUI/FlatCAMGUI.py:734 +#: FlatCAMApp.py:10610 flatcamGUI/MainGUI.py:734 msgid "Opacity" msgstr "Opacity" @@ -1667,7 +1667,7 @@ msgstr "Bookmark removed." msgid "Export FlatCAM Bookmarks" msgstr "Export FlatCAM Bookmarks" -#: FlatCAMBookmark.py:293 flatcamGUI/FlatCAMGUI.py:524 +#: FlatCAMBookmark.py:293 flatcamGUI/MainGUI.py:524 msgid "Bookmarks" msgstr "Bookmarks" @@ -3091,7 +3091,7 @@ msgstr "" "Delete a tool in the tool list\n" "by selecting a row in the tool table." -#: flatcamEditors/FlatCAMExcEditor.py:1650 flatcamGUI/FlatCAMGUI.py:2019 +#: flatcamEditors/FlatCAMExcEditor.py:1650 flatcamGUI/MainGUI.py:2019 msgid "Resize Drill(s)" msgstr "Resize Drill(s)" @@ -3115,8 +3115,8 @@ msgstr "Resize" msgid "Resize drill(s)" msgstr "Resize drill(s)" -#: flatcamEditors/FlatCAMExcEditor.py:1699 flatcamGUI/FlatCAMGUI.py:2018 -#: flatcamGUI/FlatCAMGUI.py:2270 +#: flatcamEditors/FlatCAMExcEditor.py:1699 flatcamGUI/MainGUI.py:2018 +#: flatcamGUI/MainGUI.py:2270 msgid "Add Drill Array" msgstr "Add Drill Array" @@ -3428,7 +3428,7 @@ 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:4071 +#: flatcamEditors/FlatCAMExcEditor.py:2579 flatcamGUI/MainGUI.py:4071 msgid "Added new tool with dia" msgstr "Added new tool with dia" @@ -3537,7 +3537,7 @@ msgid "Full Buffer" msgstr "Full Buffer" #: flatcamEditors/FlatCAMGeoEditor.py:132 -#: flatcamEditors/FlatCAMGeoEditor.py:3017 flatcamGUI/FlatCAMGUI.py:1928 +#: flatcamEditors/FlatCAMGeoEditor.py:3017 flatcamGUI/MainGUI.py:1928 #: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:190 msgid "Buffer Tool" msgstr "Buffer Tool" @@ -3556,7 +3556,7 @@ msgstr "Buffer distance value is missing or wrong format. Add it and retry." msgid "Font" msgstr "Font" -#: flatcamEditors/FlatCAMGeoEditor.py:323 flatcamGUI/FlatCAMGUI.py:2208 +#: flatcamEditors/FlatCAMGeoEditor.py:323 flatcamGUI/MainGUI.py:2208 msgid "Text" msgstr "Text" @@ -3564,8 +3564,8 @@ msgstr "Text" msgid "Text Tool" msgstr "Text Tool" -#: flatcamEditors/FlatCAMGeoEditor.py:405 flatcamGUI/FlatCAMGUI.py:511 -#: flatcamGUI/FlatCAMGUI.py:1158 flatcamGUI/ObjectUI.py:818 +#: flatcamEditors/FlatCAMGeoEditor.py:405 flatcamGUI/MainGUI.py:511 +#: flatcamGUI/MainGUI.py:1158 flatcamGUI/ObjectUI.py:818 #: flatcamGUI/ObjectUI.py:1662 flatcamObjects/FlatCAMExcellon.py:742 #: flatcamObjects/FlatCAMExcellon.py:1084 flatcamObjects/FlatCAMGeometry.py:759 #: flatcamTools/ToolNCC.py:331 flatcamTools/ToolNCC.py:797 @@ -3602,12 +3602,12 @@ msgstr "Connect:" msgid "Contour:" msgstr "Contour:" -#: flatcamEditors/FlatCAMGeoEditor.py:529 flatcamGUI/FlatCAMGUI.py:2212 +#: flatcamEditors/FlatCAMGeoEditor.py:529 flatcamGUI/MainGUI.py:2212 msgid "Paint" msgstr "Paint" -#: flatcamEditors/FlatCAMGeoEditor.py:547 flatcamGUI/FlatCAMGUI.py:924 -#: flatcamGUI/FlatCAMGUI.py:2628 flatcamGUI/ObjectUI.py:2139 +#: flatcamEditors/FlatCAMGeoEditor.py:547 flatcamGUI/MainGUI.py:924 +#: flatcamGUI/MainGUI.py:2628 flatcamGUI/ObjectUI.py:2139 #: flatcamTools/ToolPaint.py:43 flatcamTools/ToolPaint.py:738 msgid "Paint Tool" msgstr "Paint Tool" @@ -3634,8 +3634,8 @@ msgstr "Tools" #: flatcamEditors/FlatCAMGeoEditor.py:607 #: flatcamEditors/FlatCAMGeoEditor.py:991 #: flatcamEditors/FlatCAMGrbEditor.py:5306 -#: flatcamEditors/FlatCAMGrbEditor.py:5703 flatcamGUI/FlatCAMGUI.py:945 -#: flatcamGUI/FlatCAMGUI.py:2649 flatcamTools/ToolTransform.py:460 +#: flatcamEditors/FlatCAMGrbEditor.py:5703 flatcamGUI/MainGUI.py:945 +#: flatcamGUI/MainGUI.py:2649 flatcamTools/ToolTransform.py:460 msgid "Transform Tool" msgstr "Transform Tool" @@ -3655,9 +3655,9 @@ msgstr "Skew/Shear" #: flatcamEditors/FlatCAMGeoEditor.py:610 #: flatcamEditors/FlatCAMGrbEditor.py:2680 -#: flatcamEditors/FlatCAMGrbEditor.py:5309 flatcamGUI/FlatCAMGUI.py:1063 -#: flatcamGUI/FlatCAMGUI.py:2140 flatcamGUI/FlatCAMGUI.py:2255 -#: flatcamGUI/FlatCAMGUI.py:2767 flatcamGUI/ObjectUI.py:125 +#: flatcamEditors/FlatCAMGrbEditor.py:5309 flatcamGUI/MainGUI.py:1063 +#: flatcamGUI/MainGUI.py:2140 flatcamGUI/MainGUI.py:2255 +#: flatcamGUI/MainGUI.py:2767 flatcamGUI/ObjectUI.py:125 #: flatcamGUI/preferences/tools/ToolsTransformPrefGroupUI.py:95 #: flatcamTools/ToolTransform.py:26 msgid "Scale" @@ -3669,8 +3669,8 @@ msgid "Mirror (Flip)" msgstr "Mirror (Flip)" #: flatcamEditors/FlatCAMGeoEditor.py:625 -#: flatcamEditors/FlatCAMGrbEditor.py:5324 flatcamGUI/FlatCAMGUI.py:856 -#: flatcamGUI/FlatCAMGUI.py:2564 +#: flatcamEditors/FlatCAMGrbEditor.py:5324 flatcamGUI/MainGUI.py:856 +#: flatcamGUI/MainGUI.py:2564 msgid "Editor" msgstr "Editor" @@ -4384,7 +4384,7 @@ msgstr "Ring" msgid "Line" msgstr "Line" -#: flatcamEditors/FlatCAMGeoEditor.py:3591 flatcamGUI/FlatCAMGUI.py:2202 +#: flatcamEditors/FlatCAMGeoEditor.py:3591 flatcamGUI/MainGUI.py:2202 #: flatcamGUI/ObjectUI.py:2074 #: flatcamGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:218 #: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:328 @@ -4413,10 +4413,10 @@ msgstr "Editing MultiGeo Geometry, tool" msgid "with diameter" msgstr "with diameter" -#: flatcamEditors/FlatCAMGeoEditor.py:4509 flatcamGUI/FlatCAMGUI.py:3753 -#: flatcamGUI/FlatCAMGUI.py:3799 flatcamGUI/FlatCAMGUI.py:3817 -#: flatcamGUI/FlatCAMGUI.py:3961 flatcamGUI/FlatCAMGUI.py:4000 -#: flatcamGUI/FlatCAMGUI.py:4012 flatcamGUI/FlatCAMGUI.py:4029 +#: flatcamEditors/FlatCAMGeoEditor.py:4509 flatcamGUI/MainGUI.py:3753 +#: flatcamGUI/MainGUI.py:3799 flatcamGUI/MainGUI.py:3817 +#: flatcamGUI/MainGUI.py:3961 flatcamGUI/MainGUI.py:4000 +#: flatcamGUI/MainGUI.py:4012 flatcamGUI/MainGUI.py:4029 msgid "Click on target point." msgstr "Click on target point." @@ -4631,7 +4631,7 @@ msgstr "Done. Apertures Move completed." msgid "Done. Apertures copied." msgstr "Done. Apertures copied." -#: flatcamEditors/FlatCAMGrbEditor.py:2455 flatcamGUI/FlatCAMGUI.py:2233 +#: flatcamEditors/FlatCAMGrbEditor.py:2455 flatcamGUI/MainGUI.py:2233 #: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:27 msgid "Gerber Editor" msgstr "Gerber Editor" @@ -4793,9 +4793,9 @@ msgstr "" " - 'Beveled': the corner is a line that directly connects the features " "meeting in the corner" -#: flatcamEditors/FlatCAMGrbEditor.py:2640 flatcamGUI/FlatCAMGUI.py:1061 -#: flatcamGUI/FlatCAMGUI.py:2138 flatcamGUI/FlatCAMGUI.py:2210 -#: flatcamGUI/FlatCAMGUI.py:2253 flatcamGUI/FlatCAMGUI.py:2765 +#: flatcamEditors/FlatCAMGrbEditor.py:2640 flatcamGUI/MainGUI.py:1061 +#: flatcamGUI/MainGUI.py:2138 flatcamGUI/MainGUI.py:2210 +#: flatcamGUI/MainGUI.py:2253 flatcamGUI/MainGUI.py:2765 #: flatcamGUI/preferences/tools/ToolsTransformPrefGroupUI.py:200 #: flatcamTools/ToolTransform.py:29 msgid "Buffer" @@ -4870,8 +4870,8 @@ msgstr "Delete all the marked polygons." msgid "Clear all the markings." msgstr "Clear all the markings." -#: flatcamEditors/FlatCAMGrbEditor.py:2764 flatcamGUI/FlatCAMGUI.py:1046 -#: flatcamGUI/FlatCAMGUI.py:2138 flatcamGUI/FlatCAMGUI.py:2750 +#: flatcamEditors/FlatCAMGrbEditor.py:2764 flatcamGUI/MainGUI.py:1046 +#: flatcamGUI/MainGUI.py:2138 flatcamGUI/MainGUI.py:2750 msgid "Add Pad Array" msgstr "Add Pad Array" @@ -5164,129 +5164,129 @@ msgstr "Saved to" msgid "Code Editor content copied to clipboard ..." msgstr "Code Editor content copied to clipboard ..." -#: flatcamGUI/FlatCAMGUI.py:78 flatcamGUI/FlatCAMGUI.py:80 -#: flatcamGUI/FlatCAMGUI.py:2163 +#: flatcamGUI/MainGUI.py:78 flatcamGUI/MainGUI.py:80 +#: flatcamGUI/MainGUI.py:2163 msgid "Toggle Panel" msgstr "Toggle Panel" -#: flatcamGUI/FlatCAMGUI.py:90 +#: flatcamGUI/MainGUI.py:90 msgid "File" msgstr "File" -#: flatcamGUI/FlatCAMGUI.py:95 +#: flatcamGUI/MainGUI.py:95 msgid "&New Project ...\tCtrl+N" msgstr "&New Project ...\tCtrl+N" -#: flatcamGUI/FlatCAMGUI.py:97 +#: flatcamGUI/MainGUI.py:97 msgid "Will create a new, blank project" msgstr "Will create a new, blank project" -#: flatcamGUI/FlatCAMGUI.py:102 +#: flatcamGUI/MainGUI.py:102 msgid "&New" msgstr "&New" -#: flatcamGUI/FlatCAMGUI.py:106 +#: flatcamGUI/MainGUI.py:106 msgid "Geometry\tN" msgstr "Geometry\tN" -#: flatcamGUI/FlatCAMGUI.py:108 +#: flatcamGUI/MainGUI.py:108 msgid "Will create a new, empty Geometry Object." msgstr "Will create a new, empty Geometry Object." -#: flatcamGUI/FlatCAMGUI.py:111 +#: flatcamGUI/MainGUI.py:111 msgid "Gerber\tB" msgstr "Gerber\tB" -#: flatcamGUI/FlatCAMGUI.py:113 +#: flatcamGUI/MainGUI.py:113 msgid "Will create a new, empty Gerber Object." msgstr "Will create a new, empty Gerber Object." -#: flatcamGUI/FlatCAMGUI.py:116 +#: flatcamGUI/MainGUI.py:116 msgid "Excellon\tL" msgstr "Excellon\tL" -#: flatcamGUI/FlatCAMGUI.py:118 +#: flatcamGUI/MainGUI.py:118 msgid "Will create a new, empty Excellon Object." msgstr "Will create a new, empty Excellon Object." -#: flatcamGUI/FlatCAMGUI.py:123 +#: flatcamGUI/MainGUI.py:123 msgid "Document\tD" msgstr "Document\tD" -#: flatcamGUI/FlatCAMGUI.py:125 +#: flatcamGUI/MainGUI.py:125 msgid "Will create a new, empty Document Object." msgstr "Will create a new, empty Document Object." -#: flatcamGUI/FlatCAMGUI.py:129 flatcamGUI/FlatCAMGUI.py:4420 +#: flatcamGUI/MainGUI.py:129 flatcamGUI/MainGUI.py:4420 #: flatcamTools/ToolPcbWizard.py:62 flatcamTools/ToolPcbWizard.py:69 msgid "Open" msgstr "Open" -#: flatcamGUI/FlatCAMGUI.py:134 +#: flatcamGUI/MainGUI.py:134 msgid "Open &Project ..." msgstr "Open &Project ..." -#: flatcamGUI/FlatCAMGUI.py:140 flatcamGUI/FlatCAMGUI.py:4430 +#: flatcamGUI/MainGUI.py:140 flatcamGUI/MainGUI.py:4430 msgid "Open &Gerber ...\tCtrl+G" msgstr "Open &Gerber ...\tCtrl+G" -#: flatcamGUI/FlatCAMGUI.py:145 flatcamGUI/FlatCAMGUI.py:4435 +#: flatcamGUI/MainGUI.py:145 flatcamGUI/MainGUI.py:4435 msgid "Open &Excellon ...\tCtrl+E" msgstr "Open &Excellon ...\tCtrl+E" -#: flatcamGUI/FlatCAMGUI.py:150 flatcamGUI/FlatCAMGUI.py:4440 +#: flatcamGUI/MainGUI.py:150 flatcamGUI/MainGUI.py:4440 msgid "Open G-&Code ..." msgstr "Open G-&Code ..." -#: flatcamGUI/FlatCAMGUI.py:157 +#: flatcamGUI/MainGUI.py:157 msgid "Open Config ..." msgstr "Open Config ..." -#: flatcamGUI/FlatCAMGUI.py:162 +#: flatcamGUI/MainGUI.py:162 msgid "Recent projects" msgstr "Recent projects" -#: flatcamGUI/FlatCAMGUI.py:164 +#: flatcamGUI/MainGUI.py:164 msgid "Recent files" msgstr "Recent files" -#: flatcamGUI/FlatCAMGUI.py:167 flatcamGUI/FlatCAMGUI.py:753 -#: flatcamGUI/FlatCAMGUI.py:1339 +#: flatcamGUI/MainGUI.py:167 flatcamGUI/MainGUI.py:753 +#: flatcamGUI/MainGUI.py:1339 msgid "Save" msgstr "Save" -#: flatcamGUI/FlatCAMGUI.py:171 +#: flatcamGUI/MainGUI.py:171 msgid "&Save Project ...\tCtrl+S" msgstr "&Save Project ...\tCtrl+S" -#: flatcamGUI/FlatCAMGUI.py:176 +#: flatcamGUI/MainGUI.py:176 msgid "Save Project &As ...\tCtrl+Shift+S" msgstr "Save Project &As ...\tCtrl+Shift+S" -#: flatcamGUI/FlatCAMGUI.py:191 +#: flatcamGUI/MainGUI.py:191 msgid "Scripting" msgstr "Scripting" -#: flatcamGUI/FlatCAMGUI.py:195 flatcamGUI/FlatCAMGUI.py:903 -#: flatcamGUI/FlatCAMGUI.py:2607 +#: flatcamGUI/MainGUI.py:195 flatcamGUI/MainGUI.py:903 +#: flatcamGUI/MainGUI.py:2607 msgid "New Script ..." msgstr "New Script ..." -#: flatcamGUI/FlatCAMGUI.py:197 flatcamGUI/FlatCAMGUI.py:905 -#: flatcamGUI/FlatCAMGUI.py:2609 +#: flatcamGUI/MainGUI.py:197 flatcamGUI/MainGUI.py:905 +#: flatcamGUI/MainGUI.py:2609 msgid "Open Script ..." msgstr "Open Script ..." -#: flatcamGUI/FlatCAMGUI.py:199 +#: flatcamGUI/MainGUI.py:199 msgid "Open Example ..." msgstr "Open Example ..." -#: flatcamGUI/FlatCAMGUI.py:201 flatcamGUI/FlatCAMGUI.py:907 -#: flatcamGUI/FlatCAMGUI.py:2611 flatcamGUI/FlatCAMGUI.py:4409 +#: flatcamGUI/MainGUI.py:201 flatcamGUI/MainGUI.py:907 +#: flatcamGUI/MainGUI.py:2611 flatcamGUI/MainGUI.py:4409 msgid "Run Script ..." msgstr "Run Script ..." -#: flatcamGUI/FlatCAMGUI.py:203 flatcamGUI/FlatCAMGUI.py:4411 +#: flatcamGUI/MainGUI.py:203 flatcamGUI/MainGUI.py:4411 msgid "" "Will run the opened Tcl Script thus\n" "enabling the automation of certain\n" @@ -5296,47 +5296,47 @@ msgstr "" "enabling the automation of certain\n" "functions of FlatCAM." -#: flatcamGUI/FlatCAMGUI.py:218 +#: flatcamGUI/MainGUI.py:218 msgid "Import" msgstr "Import" -#: flatcamGUI/FlatCAMGUI.py:220 +#: flatcamGUI/MainGUI.py:220 msgid "&SVG as Geometry Object ..." msgstr "&SVG as Geometry Object ..." -#: flatcamGUI/FlatCAMGUI.py:223 +#: flatcamGUI/MainGUI.py:223 msgid "&SVG as Gerber Object ..." msgstr "&SVG as Gerber Object ..." -#: flatcamGUI/FlatCAMGUI.py:228 +#: flatcamGUI/MainGUI.py:228 msgid "&DXF as Geometry Object ..." msgstr "&DXF as Geometry Object ..." -#: flatcamGUI/FlatCAMGUI.py:231 +#: flatcamGUI/MainGUI.py:231 msgid "&DXF as Gerber Object ..." msgstr "&DXF as Gerber Object ..." -#: flatcamGUI/FlatCAMGUI.py:235 +#: flatcamGUI/MainGUI.py:235 msgid "HPGL2 as Geometry Object ..." msgstr "HPGL2 as Geometry Object ..." -#: flatcamGUI/FlatCAMGUI.py:241 +#: flatcamGUI/MainGUI.py:241 msgid "Export" msgstr "Export" -#: flatcamGUI/FlatCAMGUI.py:245 +#: flatcamGUI/MainGUI.py:245 msgid "Export &SVG ..." msgstr "Export &SVG ..." -#: flatcamGUI/FlatCAMGUI.py:249 +#: flatcamGUI/MainGUI.py:249 msgid "Export DXF ..." msgstr "Export DXF ..." -#: flatcamGUI/FlatCAMGUI.py:255 +#: flatcamGUI/MainGUI.py:255 msgid "Export &PNG ..." msgstr "Export &PNG ..." -#: flatcamGUI/FlatCAMGUI.py:257 +#: flatcamGUI/MainGUI.py:257 msgid "" "Will export an image in PNG format,\n" "the saved image will contain the visual \n" @@ -5346,11 +5346,11 @@ msgstr "" "the saved image will contain the visual \n" "information currently in FlatCAM Plot Area." -#: flatcamGUI/FlatCAMGUI.py:266 +#: flatcamGUI/MainGUI.py:266 msgid "Export &Excellon ..." msgstr "Export &Excellon ..." -#: flatcamGUI/FlatCAMGUI.py:268 +#: flatcamGUI/MainGUI.py:268 msgid "" "Will export an Excellon Object as Excellon file,\n" "the coordinates format, the file units and zeros\n" @@ -5360,11 +5360,11 @@ msgstr "" "the coordinates format, the file units and zeros\n" "are set in Preferences -> Excellon Export." -#: flatcamGUI/FlatCAMGUI.py:275 +#: flatcamGUI/MainGUI.py:275 msgid "Export &Gerber ..." msgstr "Export &Gerber ..." -#: flatcamGUI/FlatCAMGUI.py:277 +#: flatcamGUI/MainGUI.py:277 msgid "" "Will export an Gerber Object as Gerber file,\n" "the coordinates format, the file units and zeros\n" @@ -5374,53 +5374,53 @@ msgstr "" "the coordinates format, the file units and zeros\n" "are set in Preferences -> Gerber Export." -#: flatcamGUI/FlatCAMGUI.py:287 +#: flatcamGUI/MainGUI.py:287 msgid "Backup" msgstr "Backup" -#: flatcamGUI/FlatCAMGUI.py:292 +#: flatcamGUI/MainGUI.py:292 msgid "Import Preferences from file ..." msgstr "Import Preferences from file ..." -#: flatcamGUI/FlatCAMGUI.py:298 +#: flatcamGUI/MainGUI.py:298 msgid "Export Preferences to file ..." msgstr "Export Preferences to file ..." -#: flatcamGUI/FlatCAMGUI.py:306 +#: flatcamGUI/MainGUI.py:306 #: flatcamGUI/preferences/PreferencesUIManager.py:1119 msgid "Save Preferences" msgstr "Save Preferences" -#: flatcamGUI/FlatCAMGUI.py:312 flatcamGUI/FlatCAMGUI.py:1730 +#: flatcamGUI/MainGUI.py:312 flatcamGUI/MainGUI.py:1730 msgid "Print (PDF)" msgstr "Print (PDF)" -#: flatcamGUI/FlatCAMGUI.py:320 +#: flatcamGUI/MainGUI.py:320 msgid "E&xit" msgstr "E&xit" -#: flatcamGUI/FlatCAMGUI.py:328 flatcamGUI/FlatCAMGUI.py:747 -#: flatcamGUI/FlatCAMGUI.py:2286 +#: flatcamGUI/MainGUI.py:328 flatcamGUI/MainGUI.py:747 +#: flatcamGUI/MainGUI.py:2286 msgid "Edit" msgstr "Edit" -#: flatcamGUI/FlatCAMGUI.py:332 +#: flatcamGUI/MainGUI.py:332 msgid "Edit Object\tE" msgstr "Edit Object\tE" -#: flatcamGUI/FlatCAMGUI.py:334 +#: flatcamGUI/MainGUI.py:334 msgid "Close Editor\tCtrl+S" msgstr "Close Editor\tCtrl+S" -#: flatcamGUI/FlatCAMGUI.py:343 +#: flatcamGUI/MainGUI.py:343 msgid "Conversion" msgstr "Conversion" -#: flatcamGUI/FlatCAMGUI.py:345 +#: flatcamGUI/MainGUI.py:345 msgid "&Join Geo/Gerber/Exc -> Geo" msgstr "&Join Geo/Gerber/Exc -> Geo" -#: flatcamGUI/FlatCAMGUI.py:347 +#: flatcamGUI/MainGUI.py:347 msgid "" "Merge a selection of objects, which can be of type:\n" "- Gerber\n" @@ -5434,28 +5434,28 @@ msgstr "" "- Geometry\n" "into a new combo Geometry object." -#: flatcamGUI/FlatCAMGUI.py:354 +#: flatcamGUI/MainGUI.py:354 msgid "Join Excellon(s) -> Excellon" msgstr "Join Excellon(s) -> Excellon" -#: flatcamGUI/FlatCAMGUI.py:356 +#: flatcamGUI/MainGUI.py:356 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:359 +#: flatcamGUI/MainGUI.py:359 msgid "Join Gerber(s) -> Gerber" msgstr "Join Gerber(s) -> Gerber" -#: flatcamGUI/FlatCAMGUI.py:361 +#: flatcamGUI/MainGUI.py:361 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:366 +#: flatcamGUI/MainGUI.py:366 msgid "Convert Single to MultiGeo" msgstr "Convert Single to MultiGeo" -#: flatcamGUI/FlatCAMGUI.py:368 +#: flatcamGUI/MainGUI.py:368 msgid "" "Will convert a Geometry object from single_geometry type\n" "to a multi_geometry type." @@ -5463,11 +5463,11 @@ msgstr "" "Will convert a Geometry object from single_geometry type\n" "to a multi_geometry type." -#: flatcamGUI/FlatCAMGUI.py:372 +#: flatcamGUI/MainGUI.py:372 msgid "Convert Multi to SingleGeo" msgstr "Convert Multi to SingleGeo" -#: flatcamGUI/FlatCAMGUI.py:374 +#: flatcamGUI/MainGUI.py:374 msgid "" "Will convert a Geometry object from multi_geometry type\n" "to a single_geometry type." @@ -5475,756 +5475,756 @@ msgstr "" "Will convert a Geometry object from multi_geometry type\n" "to a single_geometry type." -#: flatcamGUI/FlatCAMGUI.py:381 +#: flatcamGUI/MainGUI.py:381 msgid "Convert Any to Geo" msgstr "Convert Any to Geo" -#: flatcamGUI/FlatCAMGUI.py:384 +#: flatcamGUI/MainGUI.py:384 msgid "Convert Any to Gerber" msgstr "Convert Any to Gerber" -#: flatcamGUI/FlatCAMGUI.py:390 +#: flatcamGUI/MainGUI.py:390 msgid "&Copy\tCtrl+C" msgstr "&Copy\tCtrl+C" -#: flatcamGUI/FlatCAMGUI.py:395 +#: flatcamGUI/MainGUI.py:395 msgid "&Delete\tDEL" msgstr "&Delete\tDEL" -#: flatcamGUI/FlatCAMGUI.py:400 +#: flatcamGUI/MainGUI.py:400 msgid "Se&t Origin\tO" msgstr "Se&t Origin\tO" -#: flatcamGUI/FlatCAMGUI.py:402 +#: flatcamGUI/MainGUI.py:402 msgid "Move to Origin\tShift+O" msgstr "Move to Origin\tShift+O" -#: flatcamGUI/FlatCAMGUI.py:405 +#: flatcamGUI/MainGUI.py:405 msgid "Jump to Location\tJ" msgstr "Jump to Location\tJ" -#: flatcamGUI/FlatCAMGUI.py:407 +#: flatcamGUI/MainGUI.py:407 msgid "Locate in Object\tShift+J" msgstr "Locate in Object\tShift+J" -#: flatcamGUI/FlatCAMGUI.py:412 +#: flatcamGUI/MainGUI.py:412 msgid "Toggle Units\tQ" msgstr "Toggle Units\tQ" -#: flatcamGUI/FlatCAMGUI.py:414 +#: flatcamGUI/MainGUI.py:414 msgid "&Select All\tCtrl+A" msgstr "&Select All\tCtrl+A" -#: flatcamGUI/FlatCAMGUI.py:419 +#: flatcamGUI/MainGUI.py:419 msgid "&Preferences\tShift+P" msgstr "&Preferences\tShift+P" -#: flatcamGUI/FlatCAMGUI.py:425 flatcamTools/ToolProperties.py:155 +#: flatcamGUI/MainGUI.py:425 flatcamTools/ToolProperties.py:155 msgid "Options" msgstr "Options" -#: flatcamGUI/FlatCAMGUI.py:427 +#: flatcamGUI/MainGUI.py:427 msgid "&Rotate Selection\tShift+(R)" msgstr "&Rotate Selection\tShift+(R)" -#: flatcamGUI/FlatCAMGUI.py:432 +#: flatcamGUI/MainGUI.py:432 msgid "&Skew on X axis\tShift+X" msgstr "&Skew on X axis\tShift+X" -#: flatcamGUI/FlatCAMGUI.py:434 +#: flatcamGUI/MainGUI.py:434 msgid "S&kew on Y axis\tShift+Y" msgstr "S&kew on Y axis\tShift+Y" -#: flatcamGUI/FlatCAMGUI.py:439 +#: flatcamGUI/MainGUI.py:439 msgid "Flip on &X axis\tX" msgstr "Flip on &X axis\tX" -#: flatcamGUI/FlatCAMGUI.py:441 +#: flatcamGUI/MainGUI.py:441 msgid "Flip on &Y axis\tY" msgstr "Flip on &Y axis\tY" -#: flatcamGUI/FlatCAMGUI.py:446 +#: flatcamGUI/MainGUI.py:446 msgid "View source\tAlt+S" msgstr "View source\tAlt+S" -#: flatcamGUI/FlatCAMGUI.py:448 +#: flatcamGUI/MainGUI.py:448 msgid "Tools DataBase\tCtrl+D" msgstr "Tools DataBase\tCtrl+D" -#: flatcamGUI/FlatCAMGUI.py:455 flatcamGUI/FlatCAMGUI.py:2183 +#: flatcamGUI/MainGUI.py:455 flatcamGUI/MainGUI.py:2183 msgid "View" msgstr "View" -#: flatcamGUI/FlatCAMGUI.py:457 +#: flatcamGUI/MainGUI.py:457 msgid "Enable all plots\tAlt+1" msgstr "Enable all plots\tAlt+1" -#: flatcamGUI/FlatCAMGUI.py:459 +#: flatcamGUI/MainGUI.py:459 msgid "Disable all plots\tAlt+2" msgstr "Disable all plots\tAlt+2" -#: flatcamGUI/FlatCAMGUI.py:461 +#: flatcamGUI/MainGUI.py:461 msgid "Disable non-selected\tAlt+3" msgstr "Disable non-selected\tAlt+3" -#: flatcamGUI/FlatCAMGUI.py:465 +#: flatcamGUI/MainGUI.py:465 msgid "&Zoom Fit\tV" msgstr "&Zoom Fit\tV" -#: flatcamGUI/FlatCAMGUI.py:467 +#: flatcamGUI/MainGUI.py:467 msgid "&Zoom In\t=" msgstr "&Zoom In\t=" -#: flatcamGUI/FlatCAMGUI.py:469 +#: flatcamGUI/MainGUI.py:469 msgid "&Zoom Out\t-" msgstr "&Zoom Out\t-" -#: flatcamGUI/FlatCAMGUI.py:474 +#: flatcamGUI/MainGUI.py:474 msgid "Redraw All\tF5" msgstr "Redraw All\tF5" -#: flatcamGUI/FlatCAMGUI.py:478 +#: flatcamGUI/MainGUI.py:478 msgid "Toggle Code Editor\tShift+E" msgstr "Toggle Code Editor\tShift+E" -#: flatcamGUI/FlatCAMGUI.py:481 +#: flatcamGUI/MainGUI.py:481 msgid "&Toggle FullScreen\tAlt+F10" msgstr "&Toggle FullScreen\tAlt+F10" -#: flatcamGUI/FlatCAMGUI.py:483 +#: flatcamGUI/MainGUI.py:483 msgid "&Toggle Plot Area\tCtrl+F10" msgstr "&Toggle Plot Area\tCtrl+F10" -#: flatcamGUI/FlatCAMGUI.py:485 +#: flatcamGUI/MainGUI.py:485 msgid "&Toggle Project/Sel/Tool\t`" msgstr "&Toggle Project/Sel/Tool\t`" -#: flatcamGUI/FlatCAMGUI.py:489 +#: flatcamGUI/MainGUI.py:489 msgid "&Toggle Grid Snap\tG" msgstr "&Toggle Grid Snap\tG" -#: flatcamGUI/FlatCAMGUI.py:491 +#: flatcamGUI/MainGUI.py:491 msgid "&Toggle Grid Lines\tAlt+G" msgstr "&Toggle Grid Lines\tAlt+G" -#: flatcamGUI/FlatCAMGUI.py:493 +#: flatcamGUI/MainGUI.py:493 msgid "&Toggle Axis\tShift+G" msgstr "&Toggle Axis\tShift+G" -#: flatcamGUI/FlatCAMGUI.py:495 +#: flatcamGUI/MainGUI.py:495 msgid "Toggle Workspace\tShift+W" msgstr "Toggle Workspace\tShift+W" -#: flatcamGUI/FlatCAMGUI.py:500 +#: flatcamGUI/MainGUI.py:500 msgid "Objects" msgstr "Objects" -#: flatcamGUI/FlatCAMGUI.py:514 +#: flatcamGUI/MainGUI.py:514 msgid "&Command Line\tS" msgstr "&Command Line\tS" -#: flatcamGUI/FlatCAMGUI.py:519 +#: flatcamGUI/MainGUI.py:519 msgid "Help" msgstr "Help" -#: flatcamGUI/FlatCAMGUI.py:521 +#: flatcamGUI/MainGUI.py:521 msgid "Online Help\tF1" msgstr "Online Help\tF1" -#: flatcamGUI/FlatCAMGUI.py:531 +#: flatcamGUI/MainGUI.py:531 msgid "Report a bug" msgstr "Report a bug" -#: flatcamGUI/FlatCAMGUI.py:534 +#: flatcamGUI/MainGUI.py:534 msgid "Excellon Specification" msgstr "Excellon Specification" -#: flatcamGUI/FlatCAMGUI.py:536 +#: flatcamGUI/MainGUI.py:536 msgid "Gerber Specification" msgstr "Gerber Specification" -#: flatcamGUI/FlatCAMGUI.py:541 +#: flatcamGUI/MainGUI.py:541 msgid "Shortcuts List\tF3" msgstr "Shortcuts List\tF3" -#: flatcamGUI/FlatCAMGUI.py:543 +#: flatcamGUI/MainGUI.py:543 msgid "YouTube Channel\tF4" msgstr "YouTube Channel\tF4" -#: flatcamGUI/FlatCAMGUI.py:554 +#: flatcamGUI/MainGUI.py:554 msgid "Add Circle\tO" msgstr "Add Circle\tO" -#: flatcamGUI/FlatCAMGUI.py:557 +#: flatcamGUI/MainGUI.py:557 msgid "Add Arc\tA" msgstr "Add Arc\tA" -#: flatcamGUI/FlatCAMGUI.py:560 +#: flatcamGUI/MainGUI.py:560 msgid "Add Rectangle\tR" msgstr "Add Rectangle\tR" -#: flatcamGUI/FlatCAMGUI.py:563 +#: flatcamGUI/MainGUI.py:563 msgid "Add Polygon\tN" msgstr "Add Polygon\tN" -#: flatcamGUI/FlatCAMGUI.py:566 +#: flatcamGUI/MainGUI.py:566 msgid "Add Path\tP" msgstr "Add Path\tP" -#: flatcamGUI/FlatCAMGUI.py:569 +#: flatcamGUI/MainGUI.py:569 msgid "Add Text\tT" msgstr "Add Text\tT" -#: flatcamGUI/FlatCAMGUI.py:572 +#: flatcamGUI/MainGUI.py:572 msgid "Polygon Union\tU" msgstr "Polygon Union\tU" -#: flatcamGUI/FlatCAMGUI.py:574 +#: flatcamGUI/MainGUI.py:574 msgid "Polygon Intersection\tE" msgstr "Polygon Intersection\tE" -#: flatcamGUI/FlatCAMGUI.py:576 +#: flatcamGUI/MainGUI.py:576 msgid "Polygon Subtraction\tS" msgstr "Polygon Subtraction\tS" -#: flatcamGUI/FlatCAMGUI.py:580 +#: flatcamGUI/MainGUI.py:580 msgid "Cut Path\tX" msgstr "Cut Path\tX" -#: flatcamGUI/FlatCAMGUI.py:584 +#: flatcamGUI/MainGUI.py:584 msgid "Copy Geom\tC" msgstr "Copy Geom\tC" -#: flatcamGUI/FlatCAMGUI.py:586 +#: flatcamGUI/MainGUI.py:586 msgid "Delete Shape\tDEL" msgstr "Delete Shape\tDEL" -#: flatcamGUI/FlatCAMGUI.py:590 flatcamGUI/FlatCAMGUI.py:677 +#: flatcamGUI/MainGUI.py:590 flatcamGUI/MainGUI.py:677 msgid "Move\tM" msgstr "Move\tM" -#: flatcamGUI/FlatCAMGUI.py:592 +#: flatcamGUI/MainGUI.py:592 msgid "Buffer Tool\tB" msgstr "Buffer Tool\tB" -#: flatcamGUI/FlatCAMGUI.py:595 +#: flatcamGUI/MainGUI.py:595 msgid "Paint Tool\tI" msgstr "Paint Tool\tI" -#: flatcamGUI/FlatCAMGUI.py:598 +#: flatcamGUI/MainGUI.py:598 msgid "Transform Tool\tAlt+R" msgstr "Transform Tool\tAlt+R" -#: flatcamGUI/FlatCAMGUI.py:602 +#: flatcamGUI/MainGUI.py:602 msgid "Toggle Corner Snap\tK" msgstr "Toggle Corner Snap\tK" -#: flatcamGUI/FlatCAMGUI.py:608 +#: flatcamGUI/MainGUI.py:608 msgid ">Excellon Editor<" msgstr ">Excellon Editor<" -#: flatcamGUI/FlatCAMGUI.py:612 +#: flatcamGUI/MainGUI.py:612 msgid "Add Drill Array\tA" msgstr "Add Drill Array\tA" -#: flatcamGUI/FlatCAMGUI.py:614 +#: flatcamGUI/MainGUI.py:614 msgid "Add Drill\tD" msgstr "Add Drill\tD" -#: flatcamGUI/FlatCAMGUI.py:618 +#: flatcamGUI/MainGUI.py:618 msgid "Add Slot Array\tQ" msgstr "Add Slot Array\tQ" -#: flatcamGUI/FlatCAMGUI.py:620 +#: flatcamGUI/MainGUI.py:620 msgid "Add Slot\tW" msgstr "Add Slot\tW" -#: flatcamGUI/FlatCAMGUI.py:624 +#: flatcamGUI/MainGUI.py:624 msgid "Resize Drill(S)\tR" msgstr "Resize Drill(S)\tR" -#: flatcamGUI/FlatCAMGUI.py:627 flatcamGUI/FlatCAMGUI.py:671 +#: flatcamGUI/MainGUI.py:627 flatcamGUI/MainGUI.py:671 msgid "Copy\tC" msgstr "Copy\tC" -#: flatcamGUI/FlatCAMGUI.py:629 flatcamGUI/FlatCAMGUI.py:673 +#: flatcamGUI/MainGUI.py:629 flatcamGUI/MainGUI.py:673 msgid "Delete\tDEL" msgstr "Delete\tDEL" -#: flatcamGUI/FlatCAMGUI.py:634 +#: flatcamGUI/MainGUI.py:634 msgid "Move Drill(s)\tM" msgstr "Move Drill(s)\tM" -#: flatcamGUI/FlatCAMGUI.py:639 +#: flatcamGUI/MainGUI.py:639 msgid ">Gerber Editor<" msgstr ">Gerber Editor<" -#: flatcamGUI/FlatCAMGUI.py:643 +#: flatcamGUI/MainGUI.py:643 msgid "Add Pad\tP" msgstr "Add Pad\tP" -#: flatcamGUI/FlatCAMGUI.py:645 +#: flatcamGUI/MainGUI.py:645 msgid "Add Pad Array\tA" msgstr "Add Pad Array\tA" -#: flatcamGUI/FlatCAMGUI.py:647 +#: flatcamGUI/MainGUI.py:647 msgid "Add Track\tT" msgstr "Add Track\tT" -#: flatcamGUI/FlatCAMGUI.py:649 +#: flatcamGUI/MainGUI.py:649 msgid "Add Region\tN" msgstr "Add Region\tN" -#: flatcamGUI/FlatCAMGUI.py:653 +#: flatcamGUI/MainGUI.py:653 msgid "Poligonize\tAlt+N" msgstr "Poligonize\tAlt+N" -#: flatcamGUI/FlatCAMGUI.py:655 +#: flatcamGUI/MainGUI.py:655 msgid "Add SemiDisc\tE" msgstr "Add SemiDisc\tE" -#: flatcamGUI/FlatCAMGUI.py:657 +#: flatcamGUI/MainGUI.py:657 msgid "Add Disc\tD" msgstr "Add Disc\tD" -#: flatcamGUI/FlatCAMGUI.py:659 +#: flatcamGUI/MainGUI.py:659 msgid "Buffer\tB" msgstr "Buffer\tB" -#: flatcamGUI/FlatCAMGUI.py:661 +#: flatcamGUI/MainGUI.py:661 msgid "Scale\tS" msgstr "Scale\tS" -#: flatcamGUI/FlatCAMGUI.py:663 +#: flatcamGUI/MainGUI.py:663 msgid "Mark Area\tAlt+A" msgstr "Mark Area\tAlt+A" -#: flatcamGUI/FlatCAMGUI.py:665 +#: flatcamGUI/MainGUI.py:665 msgid "Eraser\tCtrl+E" msgstr "Eraser\tCtrl+E" -#: flatcamGUI/FlatCAMGUI.py:667 +#: flatcamGUI/MainGUI.py:667 msgid "Transform\tAlt+R" msgstr "Transform\tAlt+R" -#: flatcamGUI/FlatCAMGUI.py:694 +#: flatcamGUI/MainGUI.py:694 msgid "Enable Plot" msgstr "Enable Plot" -#: flatcamGUI/FlatCAMGUI.py:696 +#: flatcamGUI/MainGUI.py:696 msgid "Disable Plot" msgstr "Disable Plot" -#: flatcamGUI/FlatCAMGUI.py:700 +#: flatcamGUI/MainGUI.py:700 msgid "Set Color" msgstr "Set Color" -#: flatcamGUI/FlatCAMGUI.py:742 +#: flatcamGUI/MainGUI.py:742 msgid "Generate CNC" msgstr "Generate CNC" -#: flatcamGUI/FlatCAMGUI.py:744 +#: flatcamGUI/MainGUI.py:744 msgid "View Source" msgstr "View Source" -#: flatcamGUI/FlatCAMGUI.py:749 flatcamGUI/FlatCAMGUI.py:863 -#: flatcamGUI/FlatCAMGUI.py:1072 flatcamGUI/FlatCAMGUI.py:2138 -#: flatcamGUI/FlatCAMGUI.py:2282 flatcamGUI/FlatCAMGUI.py:2572 -#: flatcamGUI/FlatCAMGUI.py:2775 flatcamGUI/ObjectUI.py:1617 +#: flatcamGUI/MainGUI.py:749 flatcamGUI/MainGUI.py:863 +#: flatcamGUI/MainGUI.py:1072 flatcamGUI/MainGUI.py:2138 +#: flatcamGUI/MainGUI.py:2282 flatcamGUI/MainGUI.py:2572 +#: flatcamGUI/MainGUI.py:2775 flatcamGUI/ObjectUI.py:1617 #: flatcamObjects/FlatCAMGeometry.py:502 flatcamTools/ToolPanelize.py:540 #: flatcamTools/ToolPanelize.py:567 flatcamTools/ToolPanelize.py:660 #: flatcamTools/ToolPanelize.py:689 flatcamTools/ToolPanelize.py:751 msgid "Copy" msgstr "Copy" -#: flatcamGUI/FlatCAMGUI.py:757 flatcamGUI/FlatCAMGUI.py:2295 +#: flatcamGUI/MainGUI.py:757 flatcamGUI/MainGUI.py:2295 #: flatcamTools/ToolProperties.py:31 msgid "Properties" msgstr "Properties" -#: flatcamGUI/FlatCAMGUI.py:786 +#: flatcamGUI/MainGUI.py:786 msgid "File Toolbar" msgstr "File Toolbar" -#: flatcamGUI/FlatCAMGUI.py:790 +#: flatcamGUI/MainGUI.py:790 msgid "Edit Toolbar" msgstr "Edit Toolbar" -#: flatcamGUI/FlatCAMGUI.py:794 +#: flatcamGUI/MainGUI.py:794 msgid "View Toolbar" msgstr "View Toolbar" -#: flatcamGUI/FlatCAMGUI.py:798 +#: flatcamGUI/MainGUI.py:798 msgid "Shell Toolbar" msgstr "Shell Toolbar" -#: flatcamGUI/FlatCAMGUI.py:802 +#: flatcamGUI/MainGUI.py:802 msgid "Tools Toolbar" msgstr "Tools Toolbar" -#: flatcamGUI/FlatCAMGUI.py:806 +#: flatcamGUI/MainGUI.py:806 msgid "Excellon Editor Toolbar" msgstr "Excellon Editor Toolbar" -#: flatcamGUI/FlatCAMGUI.py:812 +#: flatcamGUI/MainGUI.py:812 msgid "Geometry Editor Toolbar" msgstr "Geometry Editor Toolbar" -#: flatcamGUI/FlatCAMGUI.py:816 +#: flatcamGUI/MainGUI.py:816 msgid "Gerber Editor Toolbar" msgstr "Gerber Editor Toolbar" -#: flatcamGUI/FlatCAMGUI.py:820 +#: flatcamGUI/MainGUI.py:820 msgid "Grid Toolbar" msgstr "Grid Toolbar" -#: flatcamGUI/FlatCAMGUI.py:841 flatcamGUI/FlatCAMGUI.py:2549 +#: flatcamGUI/MainGUI.py:841 flatcamGUI/MainGUI.py:2549 msgid "Open project" msgstr "Open project" -#: flatcamGUI/FlatCAMGUI.py:843 flatcamGUI/FlatCAMGUI.py:2551 +#: flatcamGUI/MainGUI.py:843 flatcamGUI/MainGUI.py:2551 msgid "Save project" msgstr "Save project" -#: flatcamGUI/FlatCAMGUI.py:849 flatcamGUI/FlatCAMGUI.py:2557 +#: flatcamGUI/MainGUI.py:849 flatcamGUI/MainGUI.py:2557 msgid "New Blank Geometry" msgstr "New Blank Geometry" -#: flatcamGUI/FlatCAMGUI.py:851 flatcamGUI/FlatCAMGUI.py:2559 +#: flatcamGUI/MainGUI.py:851 flatcamGUI/MainGUI.py:2559 msgid "New Blank Gerber" msgstr "New Blank Gerber" -#: flatcamGUI/FlatCAMGUI.py:853 flatcamGUI/FlatCAMGUI.py:2561 +#: flatcamGUI/MainGUI.py:853 flatcamGUI/MainGUI.py:2561 msgid "New Blank Excellon" msgstr "New Blank Excellon" -#: flatcamGUI/FlatCAMGUI.py:858 flatcamGUI/FlatCAMGUI.py:2567 +#: flatcamGUI/MainGUI.py:858 flatcamGUI/MainGUI.py:2567 msgid "Save Object and close the Editor" msgstr "Save Object and close the Editor" -#: flatcamGUI/FlatCAMGUI.py:865 flatcamGUI/FlatCAMGUI.py:2574 +#: flatcamGUI/MainGUI.py:865 flatcamGUI/MainGUI.py:2574 msgid "&Delete" msgstr "&Delete" -#: flatcamGUI/FlatCAMGUI.py:868 flatcamGUI/FlatCAMGUI.py:1729 -#: flatcamGUI/FlatCAMGUI.py:1935 flatcamGUI/FlatCAMGUI.py:2577 +#: flatcamGUI/MainGUI.py:868 flatcamGUI/MainGUI.py:1729 +#: flatcamGUI/MainGUI.py:1935 flatcamGUI/MainGUI.py:2577 #: flatcamTools/ToolDistance.py:35 flatcamTools/ToolDistance.py:195 msgid "Distance Tool" msgstr "Distance Tool" -#: flatcamGUI/FlatCAMGUI.py:870 flatcamGUI/FlatCAMGUI.py:2579 +#: flatcamGUI/MainGUI.py:870 flatcamGUI/MainGUI.py:2579 msgid "Distance Min Tool" msgstr "Distance Min Tool" -#: flatcamGUI/FlatCAMGUI.py:872 flatcamGUI/FlatCAMGUI.py:1722 -#: flatcamGUI/FlatCAMGUI.py:2581 +#: flatcamGUI/MainGUI.py:872 flatcamGUI/MainGUI.py:1722 +#: flatcamGUI/MainGUI.py:2581 msgid "Set Origin" msgstr "Set Origin" -#: flatcamGUI/FlatCAMGUI.py:874 +#: flatcamGUI/MainGUI.py:874 msgid "Move to Origin" msgstr "Move to Origin" -#: flatcamGUI/FlatCAMGUI.py:877 flatcamGUI/FlatCAMGUI.py:2583 +#: flatcamGUI/MainGUI.py:877 flatcamGUI/MainGUI.py:2583 msgid "Jump to Location" msgstr "Jump to Location" -#: flatcamGUI/FlatCAMGUI.py:879 flatcamGUI/FlatCAMGUI.py:1734 -#: flatcamGUI/FlatCAMGUI.py:2585 +#: flatcamGUI/MainGUI.py:879 flatcamGUI/MainGUI.py:1734 +#: flatcamGUI/MainGUI.py:2585 msgid "Locate in Object" msgstr "Locate in Object" -#: flatcamGUI/FlatCAMGUI.py:885 flatcamGUI/FlatCAMGUI.py:2591 +#: flatcamGUI/MainGUI.py:885 flatcamGUI/MainGUI.py:2591 msgid "&Replot" msgstr "&Replot" -#: flatcamGUI/FlatCAMGUI.py:887 flatcamGUI/FlatCAMGUI.py:2593 +#: flatcamGUI/MainGUI.py:887 flatcamGUI/MainGUI.py:2593 msgid "&Clear plot" msgstr "&Clear plot" -#: flatcamGUI/FlatCAMGUI.py:889 flatcamGUI/FlatCAMGUI.py:1725 -#: flatcamGUI/FlatCAMGUI.py:2595 +#: flatcamGUI/MainGUI.py:889 flatcamGUI/MainGUI.py:1725 +#: flatcamGUI/MainGUI.py:2595 msgid "Zoom In" msgstr "Zoom In" -#: flatcamGUI/FlatCAMGUI.py:891 flatcamGUI/FlatCAMGUI.py:1725 -#: flatcamGUI/FlatCAMGUI.py:2597 +#: flatcamGUI/MainGUI.py:891 flatcamGUI/MainGUI.py:1725 +#: flatcamGUI/MainGUI.py:2597 msgid "Zoom Out" msgstr "Zoom Out" -#: flatcamGUI/FlatCAMGUI.py:893 flatcamGUI/FlatCAMGUI.py:1724 -#: flatcamGUI/FlatCAMGUI.py:2185 flatcamGUI/FlatCAMGUI.py:2599 +#: flatcamGUI/MainGUI.py:893 flatcamGUI/MainGUI.py:1724 +#: flatcamGUI/MainGUI.py:2185 flatcamGUI/MainGUI.py:2599 msgid "Zoom Fit" msgstr "Zoom Fit" -#: flatcamGUI/FlatCAMGUI.py:901 flatcamGUI/FlatCAMGUI.py:2605 +#: flatcamGUI/MainGUI.py:901 flatcamGUI/MainGUI.py:2605 msgid "&Command Line" msgstr "&Command Line" -#: flatcamGUI/FlatCAMGUI.py:913 flatcamGUI/FlatCAMGUI.py:2617 +#: flatcamGUI/MainGUI.py:913 flatcamGUI/MainGUI.py:2617 msgid "2Sided Tool" msgstr "2Sided Tool" -#: flatcamGUI/FlatCAMGUI.py:915 flatcamGUI/FlatCAMGUI.py:1740 -#: flatcamGUI/FlatCAMGUI.py:2619 +#: flatcamGUI/MainGUI.py:915 flatcamGUI/MainGUI.py:1740 +#: flatcamGUI/MainGUI.py:2619 msgid "Align Objects Tool" msgstr "Align Objects Tool" -#: flatcamGUI/FlatCAMGUI.py:917 flatcamGUI/FlatCAMGUI.py:1741 -#: flatcamGUI/FlatCAMGUI.py:2621 flatcamTools/ToolExtractDrills.py:393 +#: flatcamGUI/MainGUI.py:917 flatcamGUI/MainGUI.py:1741 +#: flatcamGUI/MainGUI.py:2621 flatcamTools/ToolExtractDrills.py:393 msgid "Extract Drills Tool" msgstr "Extract Drills Tool" -#: flatcamGUI/FlatCAMGUI.py:920 flatcamGUI/ObjectUI.py:596 +#: flatcamGUI/MainGUI.py:920 flatcamGUI/ObjectUI.py:596 #: flatcamTools/ToolCutOut.py:440 msgid "Cutout Tool" msgstr "Cutout Tool" -#: flatcamGUI/FlatCAMGUI.py:922 flatcamGUI/FlatCAMGUI.py:2626 +#: flatcamGUI/MainGUI.py:922 flatcamGUI/MainGUI.py:2626 #: flatcamGUI/ObjectUI.py:574 flatcamGUI/ObjectUI.py:2157 #: flatcamTools/ToolNCC.py:974 msgid "NCC Tool" msgstr "NCC Tool" -#: flatcamGUI/FlatCAMGUI.py:928 flatcamGUI/FlatCAMGUI.py:2632 +#: flatcamGUI/MainGUI.py:928 flatcamGUI/MainGUI.py:2632 msgid "Panel Tool" msgstr "Panel Tool" -#: flatcamGUI/FlatCAMGUI.py:930 flatcamGUI/FlatCAMGUI.py:2634 +#: flatcamGUI/MainGUI.py:930 flatcamGUI/MainGUI.py:2634 #: flatcamTools/ToolFilm.py:586 msgid "Film Tool" msgstr "Film Tool" -#: flatcamGUI/FlatCAMGUI.py:932 flatcamGUI/FlatCAMGUI.py:2636 +#: flatcamGUI/MainGUI.py:932 flatcamGUI/MainGUI.py:2636 #: flatcamTools/ToolSolderPaste.py:553 msgid "SolderPaste Tool" msgstr "SolderPaste Tool" -#: flatcamGUI/FlatCAMGUI.py:934 flatcamGUI/FlatCAMGUI.py:2638 +#: flatcamGUI/MainGUI.py:934 flatcamGUI/MainGUI.py:2638 #: flatcamTools/ToolSub.py:35 msgid "Subtract Tool" msgstr "Subtract Tool" -#: flatcamGUI/FlatCAMGUI.py:936 flatcamGUI/FlatCAMGUI.py:2640 +#: flatcamGUI/MainGUI.py:936 flatcamGUI/MainGUI.py:2640 #: flatcamTools/ToolRulesCheck.py:616 msgid "Rules Tool" msgstr "Rules Tool" -#: flatcamGUI/FlatCAMGUI.py:938 flatcamGUI/FlatCAMGUI.py:1743 -#: flatcamGUI/FlatCAMGUI.py:2642 flatcamTools/ToolOptimal.py:33 +#: flatcamGUI/MainGUI.py:938 flatcamGUI/MainGUI.py:1743 +#: flatcamGUI/MainGUI.py:2642 flatcamTools/ToolOptimal.py:33 #: flatcamTools/ToolOptimal.py:307 msgid "Optimal Tool" msgstr "Optimal Tool" -#: flatcamGUI/FlatCAMGUI.py:943 flatcamGUI/FlatCAMGUI.py:1740 -#: flatcamGUI/FlatCAMGUI.py:2647 +#: flatcamGUI/MainGUI.py:943 flatcamGUI/MainGUI.py:1740 +#: flatcamGUI/MainGUI.py:2647 msgid "Calculators Tool" msgstr "Calculators Tool" -#: flatcamGUI/FlatCAMGUI.py:947 flatcamGUI/FlatCAMGUI.py:1744 -#: flatcamGUI/FlatCAMGUI.py:2651 flatcamTools/ToolQRCode.py:43 +#: flatcamGUI/MainGUI.py:947 flatcamGUI/MainGUI.py:1744 +#: flatcamGUI/MainGUI.py:2651 flatcamTools/ToolQRCode.py:43 #: flatcamTools/ToolQRCode.py:382 msgid "QRCode Tool" msgstr "QRCode Tool" -#: flatcamGUI/FlatCAMGUI.py:949 flatcamGUI/FlatCAMGUI.py:2653 +#: flatcamGUI/MainGUI.py:949 flatcamGUI/MainGUI.py:2653 #: flatcamTools/ToolCopperThieving.py:39 flatcamTools/ToolCopperThieving.py:568 msgid "Copper Thieving Tool" msgstr "Copper Thieving Tool" -#: flatcamGUI/FlatCAMGUI.py:952 flatcamGUI/FlatCAMGUI.py:1741 -#: flatcamGUI/FlatCAMGUI.py:2656 flatcamTools/ToolFiducials.py:33 +#: flatcamGUI/MainGUI.py:952 flatcamGUI/MainGUI.py:1741 +#: flatcamGUI/MainGUI.py:2656 flatcamTools/ToolFiducials.py:33 #: flatcamTools/ToolFiducials.py:395 msgid "Fiducials Tool" msgstr "Fiducials Tool" -#: flatcamGUI/FlatCAMGUI.py:954 flatcamGUI/FlatCAMGUI.py:2658 +#: flatcamGUI/MainGUI.py:954 flatcamGUI/MainGUI.py:2658 #: flatcamTools/ToolCalibration.py:37 flatcamTools/ToolCalibration.py:759 msgid "Calibration Tool" msgstr "Calibration Tool" -#: flatcamGUI/FlatCAMGUI.py:956 flatcamGUI/FlatCAMGUI.py:1741 -#: flatcamGUI/FlatCAMGUI.py:2660 +#: flatcamGUI/MainGUI.py:956 flatcamGUI/MainGUI.py:1741 +#: flatcamGUI/MainGUI.py:2660 msgid "Punch Gerber Tool" msgstr "Punch Gerber Tool" -#: flatcamGUI/FlatCAMGUI.py:958 flatcamGUI/FlatCAMGUI.py:2662 +#: flatcamGUI/MainGUI.py:958 flatcamGUI/MainGUI.py:2662 #: flatcamTools/ToolInvertGerber.py:31 msgid "Invert Gerber Tool" msgstr "Invert Gerber Tool" -#: flatcamGUI/FlatCAMGUI.py:964 flatcamGUI/FlatCAMGUI.py:990 -#: flatcamGUI/FlatCAMGUI.py:1042 flatcamGUI/FlatCAMGUI.py:2668 -#: flatcamGUI/FlatCAMGUI.py:2746 +#: flatcamGUI/MainGUI.py:964 flatcamGUI/MainGUI.py:990 +#: flatcamGUI/MainGUI.py:1042 flatcamGUI/MainGUI.py:2668 +#: flatcamGUI/MainGUI.py:2746 msgid "Select" msgstr "Select" -#: flatcamGUI/FlatCAMGUI.py:966 flatcamGUI/FlatCAMGUI.py:2670 +#: flatcamGUI/MainGUI.py:966 flatcamGUI/MainGUI.py:2670 msgid "Add Drill Hole" msgstr "Add Drill Hole" -#: flatcamGUI/FlatCAMGUI.py:968 flatcamGUI/FlatCAMGUI.py:2672 +#: flatcamGUI/MainGUI.py:968 flatcamGUI/MainGUI.py:2672 msgid "Add Drill Hole Array" msgstr "Add Drill Hole Array" -#: flatcamGUI/FlatCAMGUI.py:970 flatcamGUI/FlatCAMGUI.py:2020 -#: flatcamGUI/FlatCAMGUI.py:2273 flatcamGUI/FlatCAMGUI.py:2676 +#: flatcamGUI/MainGUI.py:970 flatcamGUI/MainGUI.py:2020 +#: flatcamGUI/MainGUI.py:2273 flatcamGUI/MainGUI.py:2676 msgid "Add Slot" msgstr "Add Slot" -#: flatcamGUI/FlatCAMGUI.py:972 flatcamGUI/FlatCAMGUI.py:2019 -#: flatcamGUI/FlatCAMGUI.py:2275 flatcamGUI/FlatCAMGUI.py:2678 +#: flatcamGUI/MainGUI.py:972 flatcamGUI/MainGUI.py:2019 +#: flatcamGUI/MainGUI.py:2275 flatcamGUI/MainGUI.py:2678 msgid "Add Slot Array" msgstr "Add Slot Array" -#: flatcamGUI/FlatCAMGUI.py:974 flatcamGUI/FlatCAMGUI.py:2278 -#: flatcamGUI/FlatCAMGUI.py:2674 +#: flatcamGUI/MainGUI.py:974 flatcamGUI/MainGUI.py:2278 +#: flatcamGUI/MainGUI.py:2674 msgid "Resize Drill" msgstr "Resize Drill" -#: flatcamGUI/FlatCAMGUI.py:978 flatcamGUI/FlatCAMGUI.py:2682 +#: flatcamGUI/MainGUI.py:978 flatcamGUI/MainGUI.py:2682 msgid "Copy Drill" msgstr "Copy Drill" -#: flatcamGUI/FlatCAMGUI.py:980 flatcamGUI/FlatCAMGUI.py:2684 +#: flatcamGUI/MainGUI.py:980 flatcamGUI/MainGUI.py:2684 msgid "Delete Drill" msgstr "Delete Drill" -#: flatcamGUI/FlatCAMGUI.py:984 flatcamGUI/FlatCAMGUI.py:2688 +#: flatcamGUI/MainGUI.py:984 flatcamGUI/MainGUI.py:2688 msgid "Move Drill" msgstr "Move Drill" -#: flatcamGUI/FlatCAMGUI.py:992 flatcamGUI/FlatCAMGUI.py:2696 +#: flatcamGUI/MainGUI.py:992 flatcamGUI/MainGUI.py:2696 msgid "Add Circle" msgstr "Add Circle" -#: flatcamGUI/FlatCAMGUI.py:994 flatcamGUI/FlatCAMGUI.py:2698 +#: flatcamGUI/MainGUI.py:994 flatcamGUI/MainGUI.py:2698 msgid "Add Arc" msgstr "Add Arc" -#: flatcamGUI/FlatCAMGUI.py:996 flatcamGUI/FlatCAMGUI.py:2700 +#: flatcamGUI/MainGUI.py:996 flatcamGUI/MainGUI.py:2700 msgid "Add Rectangle" msgstr "Add Rectangle" -#: flatcamGUI/FlatCAMGUI.py:1000 flatcamGUI/FlatCAMGUI.py:2704 +#: flatcamGUI/MainGUI.py:1000 flatcamGUI/MainGUI.py:2704 msgid "Add Path" msgstr "Add Path" -#: flatcamGUI/FlatCAMGUI.py:1002 flatcamGUI/FlatCAMGUI.py:2706 +#: flatcamGUI/MainGUI.py:1002 flatcamGUI/MainGUI.py:2706 msgid "Add Polygon" msgstr "Add Polygon" -#: flatcamGUI/FlatCAMGUI.py:1005 flatcamGUI/FlatCAMGUI.py:2709 +#: flatcamGUI/MainGUI.py:1005 flatcamGUI/MainGUI.py:2709 msgid "Add Text" msgstr "Add Text" -#: flatcamGUI/FlatCAMGUI.py:1007 flatcamGUI/FlatCAMGUI.py:2711 +#: flatcamGUI/MainGUI.py:1007 flatcamGUI/MainGUI.py:2711 msgid "Add Buffer" msgstr "Add Buffer" -#: flatcamGUI/FlatCAMGUI.py:1009 flatcamGUI/FlatCAMGUI.py:2713 +#: flatcamGUI/MainGUI.py:1009 flatcamGUI/MainGUI.py:2713 msgid "Paint Shape" msgstr "Paint Shape" -#: flatcamGUI/FlatCAMGUI.py:1011 flatcamGUI/FlatCAMGUI.py:1068 -#: flatcamGUI/FlatCAMGUI.py:2214 flatcamGUI/FlatCAMGUI.py:2259 -#: flatcamGUI/FlatCAMGUI.py:2715 flatcamGUI/FlatCAMGUI.py:2771 +#: flatcamGUI/MainGUI.py:1011 flatcamGUI/MainGUI.py:1068 +#: flatcamGUI/MainGUI.py:2214 flatcamGUI/MainGUI.py:2259 +#: flatcamGUI/MainGUI.py:2715 flatcamGUI/MainGUI.py:2771 msgid "Eraser" msgstr "Eraser" -#: flatcamGUI/FlatCAMGUI.py:1015 flatcamGUI/FlatCAMGUI.py:2719 +#: flatcamGUI/MainGUI.py:1015 flatcamGUI/MainGUI.py:2719 msgid "Polygon Union" msgstr "Polygon Union" -#: flatcamGUI/FlatCAMGUI.py:1017 flatcamGUI/FlatCAMGUI.py:2721 +#: flatcamGUI/MainGUI.py:1017 flatcamGUI/MainGUI.py:2721 msgid "Polygon Explode" msgstr "Polygon Explode" -#: flatcamGUI/FlatCAMGUI.py:1020 flatcamGUI/FlatCAMGUI.py:2724 +#: flatcamGUI/MainGUI.py:1020 flatcamGUI/MainGUI.py:2724 msgid "Polygon Intersection" msgstr "Polygon Intersection" -#: flatcamGUI/FlatCAMGUI.py:1022 flatcamGUI/FlatCAMGUI.py:2726 +#: flatcamGUI/MainGUI.py:1022 flatcamGUI/MainGUI.py:2726 msgid "Polygon Subtraction" msgstr "Polygon Subtraction" -#: flatcamGUI/FlatCAMGUI.py:1026 flatcamGUI/FlatCAMGUI.py:2730 +#: flatcamGUI/MainGUI.py:1026 flatcamGUI/MainGUI.py:2730 msgid "Cut Path" msgstr "Cut Path" -#: flatcamGUI/FlatCAMGUI.py:1028 +#: flatcamGUI/MainGUI.py:1028 msgid "Copy Shape(s)" msgstr "Copy Shape(s)" -#: flatcamGUI/FlatCAMGUI.py:1031 +#: flatcamGUI/MainGUI.py:1031 msgid "Delete Shape '-'" msgstr "Delete Shape '-'" -#: flatcamGUI/FlatCAMGUI.py:1033 flatcamGUI/FlatCAMGUI.py:1076 -#: flatcamGUI/FlatCAMGUI.py:2226 flatcamGUI/FlatCAMGUI.py:2263 -#: flatcamGUI/FlatCAMGUI.py:2736 flatcamGUI/FlatCAMGUI.py:2779 +#: flatcamGUI/MainGUI.py:1033 flatcamGUI/MainGUI.py:1076 +#: flatcamGUI/MainGUI.py:2226 flatcamGUI/MainGUI.py:2263 +#: flatcamGUI/MainGUI.py:2736 flatcamGUI/MainGUI.py:2779 #: flatcamGUI/ObjectUI.py:109 msgid "Transformations" msgstr "Transformations" -#: flatcamGUI/FlatCAMGUI.py:1036 +#: flatcamGUI/MainGUI.py:1036 msgid "Move Objects " msgstr "Move Objects " -#: flatcamGUI/FlatCAMGUI.py:1044 flatcamGUI/FlatCAMGUI.py:2139 -#: flatcamGUI/FlatCAMGUI.py:2748 +#: flatcamGUI/MainGUI.py:1044 flatcamGUI/MainGUI.py:2139 +#: flatcamGUI/MainGUI.py:2748 msgid "Add Pad" msgstr "Add Pad" -#: flatcamGUI/FlatCAMGUI.py:1048 flatcamGUI/FlatCAMGUI.py:2140 -#: flatcamGUI/FlatCAMGUI.py:2752 +#: flatcamGUI/MainGUI.py:1048 flatcamGUI/MainGUI.py:2140 +#: flatcamGUI/MainGUI.py:2752 msgid "Add Track" msgstr "Add Track" -#: flatcamGUI/FlatCAMGUI.py:1050 flatcamGUI/FlatCAMGUI.py:2139 -#: flatcamGUI/FlatCAMGUI.py:2754 +#: flatcamGUI/MainGUI.py:1050 flatcamGUI/MainGUI.py:2139 +#: flatcamGUI/MainGUI.py:2754 msgid "Add Region" msgstr "Add Region" -#: flatcamGUI/FlatCAMGUI.py:1052 flatcamGUI/FlatCAMGUI.py:2245 -#: flatcamGUI/FlatCAMGUI.py:2756 +#: flatcamGUI/MainGUI.py:1052 flatcamGUI/MainGUI.py:2245 +#: flatcamGUI/MainGUI.py:2756 msgid "Poligonize" msgstr "Poligonize" -#: flatcamGUI/FlatCAMGUI.py:1055 flatcamGUI/FlatCAMGUI.py:2247 -#: flatcamGUI/FlatCAMGUI.py:2759 +#: flatcamGUI/MainGUI.py:1055 flatcamGUI/MainGUI.py:2247 +#: flatcamGUI/MainGUI.py:2759 msgid "SemiDisc" msgstr "SemiDisc" -#: flatcamGUI/FlatCAMGUI.py:1057 flatcamGUI/FlatCAMGUI.py:2249 -#: flatcamGUI/FlatCAMGUI.py:2761 +#: flatcamGUI/MainGUI.py:1057 flatcamGUI/MainGUI.py:2249 +#: flatcamGUI/MainGUI.py:2761 msgid "Disc" msgstr "Disc" -#: flatcamGUI/FlatCAMGUI.py:1065 flatcamGUI/FlatCAMGUI.py:2257 -#: flatcamGUI/FlatCAMGUI.py:2769 +#: flatcamGUI/MainGUI.py:1065 flatcamGUI/MainGUI.py:2257 +#: flatcamGUI/MainGUI.py:2769 msgid "Mark Area" msgstr "Mark Area" -#: flatcamGUI/FlatCAMGUI.py:1079 flatcamGUI/FlatCAMGUI.py:2139 -#: flatcamGUI/FlatCAMGUI.py:2230 flatcamGUI/FlatCAMGUI.py:2293 -#: flatcamGUI/FlatCAMGUI.py:2782 flatcamTools/ToolMove.py:27 +#: flatcamGUI/MainGUI.py:1079 flatcamGUI/MainGUI.py:2139 +#: flatcamGUI/MainGUI.py:2230 flatcamGUI/MainGUI.py:2293 +#: flatcamGUI/MainGUI.py:2782 flatcamTools/ToolMove.py:27 msgid "Move" msgstr "Move" -#: flatcamGUI/FlatCAMGUI.py:1087 flatcamGUI/FlatCAMGUI.py:2791 +#: flatcamGUI/MainGUI.py:1087 flatcamGUI/MainGUI.py:2791 msgid "Snap to grid" msgstr "Snap to grid" -#: flatcamGUI/FlatCAMGUI.py:1090 flatcamGUI/FlatCAMGUI.py:2794 +#: flatcamGUI/MainGUI.py:1090 flatcamGUI/MainGUI.py:2794 msgid "Grid X snapping distance" msgstr "Grid X snapping distance" -#: flatcamGUI/FlatCAMGUI.py:1095 flatcamGUI/FlatCAMGUI.py:2799 +#: flatcamGUI/MainGUI.py:1095 flatcamGUI/MainGUI.py:2799 msgid "Grid Y snapping distance" msgstr "Grid Y snapping distance" -#: flatcamGUI/FlatCAMGUI.py:1101 flatcamGUI/FlatCAMGUI.py:2805 +#: flatcamGUI/MainGUI.py:1101 flatcamGUI/MainGUI.py:2805 msgid "" "When active, value on Grid_X\n" "is copied to the Grid_Y value." @@ -6232,65 +6232,65 @@ msgstr "" "When active, value on Grid_X\n" "is copied to the Grid_Y value." -#: flatcamGUI/FlatCAMGUI.py:1108 flatcamGUI/FlatCAMGUI.py:2812 +#: flatcamGUI/MainGUI.py:1108 flatcamGUI/MainGUI.py:2812 msgid "Snap to corner" msgstr "Snap to corner" -#: flatcamGUI/FlatCAMGUI.py:1112 flatcamGUI/FlatCAMGUI.py:2816 +#: flatcamGUI/MainGUI.py:1112 flatcamGUI/MainGUI.py:2816 #: flatcamGUI/preferences/general/GeneralAPPSetGroupUI.py:78 msgid "Max. magnet distance" msgstr "Max. magnet distance" -#: flatcamGUI/FlatCAMGUI.py:1149 +#: flatcamGUI/MainGUI.py:1149 msgid "Selected" msgstr "Selected" -#: flatcamGUI/FlatCAMGUI.py:1177 flatcamGUI/FlatCAMGUI.py:1185 +#: flatcamGUI/MainGUI.py:1177 flatcamGUI/MainGUI.py:1185 msgid "Plot Area" msgstr "Plot Area" -#: flatcamGUI/FlatCAMGUI.py:1212 +#: flatcamGUI/MainGUI.py:1212 msgid "General" msgstr "General" -#: flatcamGUI/FlatCAMGUI.py:1227 flatcamTools/ToolCopperThieving.py:74 +#: flatcamGUI/MainGUI.py:1227 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:1237 flatcamTools/ToolDblSided.py:92 +#: flatcamGUI/MainGUI.py:1237 flatcamTools/ToolDblSided.py:92 msgid "EXCELLON" msgstr "EXCELLON" -#: flatcamGUI/FlatCAMGUI.py:1247 flatcamTools/ToolDblSided.py:120 +#: flatcamGUI/MainGUI.py:1247 flatcamTools/ToolDblSided.py:120 msgid "GEOMETRY" msgstr "GEOMETRY" -#: flatcamGUI/FlatCAMGUI.py:1257 +#: flatcamGUI/MainGUI.py:1257 msgid "CNC-JOB" msgstr "CNC-JOB" -#: flatcamGUI/FlatCAMGUI.py:1266 flatcamGUI/ObjectUI.py:563 +#: flatcamGUI/MainGUI.py:1266 flatcamGUI/ObjectUI.py:563 #: flatcamGUI/ObjectUI.py:2132 msgid "TOOLS" msgstr "TOOLS" -#: flatcamGUI/FlatCAMGUI.py:1275 +#: flatcamGUI/MainGUI.py:1275 msgid "TOOLS 2" msgstr "TOOLS 2" -#: flatcamGUI/FlatCAMGUI.py:1285 +#: flatcamGUI/MainGUI.py:1285 msgid "UTILITIES" msgstr "UTILITIES" -#: flatcamGUI/FlatCAMGUI.py:1302 +#: flatcamGUI/MainGUI.py:1302 #: flatcamGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:192 msgid "Restore Defaults" msgstr "Restore Defaults" -#: flatcamGUI/FlatCAMGUI.py:1305 +#: flatcamGUI/MainGUI.py:1305 msgid "" "Restore the entire set of default values\n" "to the initial values loaded after first launch." @@ -6298,19 +6298,19 @@ msgstr "" "Restore the entire set of default values\n" "to the initial values loaded after first launch." -#: flatcamGUI/FlatCAMGUI.py:1310 +#: flatcamGUI/MainGUI.py:1310 msgid "Open Pref Folder" msgstr "Open Pref Folder" -#: flatcamGUI/FlatCAMGUI.py:1313 +#: flatcamGUI/MainGUI.py:1313 msgid "Open the folder where FlatCAM save the preferences files." msgstr "Open the folder where FlatCAM save the preferences files." -#: flatcamGUI/FlatCAMGUI.py:1317 flatcamGUI/FlatCAMGUI.py:2517 +#: flatcamGUI/MainGUI.py:1317 flatcamGUI/MainGUI.py:2517 msgid "Clear GUI Settings" msgstr "Clear GUI Settings" -#: flatcamGUI/FlatCAMGUI.py:1321 +#: flatcamGUI/MainGUI.py:1321 msgid "" "Clear the GUI settings for FlatCAM,\n" "such as: layout, gui state, style, hdpi support etc." @@ -6318,15 +6318,15 @@ msgstr "" "Clear the GUI settings for FlatCAM,\n" "such as: layout, gui state, style, hdpi support etc." -#: flatcamGUI/FlatCAMGUI.py:1332 +#: flatcamGUI/MainGUI.py:1332 msgid "Apply" msgstr "Apply" -#: flatcamGUI/FlatCAMGUI.py:1335 +#: flatcamGUI/MainGUI.py:1335 msgid "Apply the current preferences without saving to a file." msgstr "Apply the current preferences without saving to a file." -#: flatcamGUI/FlatCAMGUI.py:1342 +#: flatcamGUI/MainGUI.py:1342 msgid "" "Save the current settings in the 'current_defaults' file\n" "which is the file storing the working default preferences." @@ -6334,214 +6334,214 @@ msgstr "" "Save the current settings in the 'current_defaults' file\n" "which is the file storing the working default preferences." -#: flatcamGUI/FlatCAMGUI.py:1350 +#: flatcamGUI/MainGUI.py:1350 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:1719 +#: flatcamGUI/MainGUI.py:1719 msgid "SHOW SHORTCUT LIST" msgstr "SHOW SHORTCUT LIST" -#: flatcamGUI/FlatCAMGUI.py:1719 +#: flatcamGUI/MainGUI.py:1719 msgid "Switch to Project Tab" msgstr "Switch to Project Tab" -#: flatcamGUI/FlatCAMGUI.py:1719 +#: flatcamGUI/MainGUI.py:1719 msgid "Switch to Selected Tab" msgstr "Switch to Selected Tab" -#: flatcamGUI/FlatCAMGUI.py:1720 +#: flatcamGUI/MainGUI.py:1720 msgid "Switch to Tool Tab" msgstr "Switch to Tool Tab" -#: flatcamGUI/FlatCAMGUI.py:1721 +#: flatcamGUI/MainGUI.py:1721 msgid "New Gerber" msgstr "New Gerber" -#: flatcamGUI/FlatCAMGUI.py:1721 +#: flatcamGUI/MainGUI.py:1721 msgid "Edit Object (if selected)" msgstr "Edit Object (if selected)" -#: flatcamGUI/FlatCAMGUI.py:1721 +#: flatcamGUI/MainGUI.py:1721 msgid "Jump to Coordinates" msgstr "Jump to Coordinates" -#: flatcamGUI/FlatCAMGUI.py:1722 +#: flatcamGUI/MainGUI.py:1722 msgid "New Excellon" msgstr "New Excellon" -#: flatcamGUI/FlatCAMGUI.py:1722 +#: flatcamGUI/MainGUI.py:1722 msgid "Move Obj" msgstr "Move Obj" -#: flatcamGUI/FlatCAMGUI.py:1722 +#: flatcamGUI/MainGUI.py:1722 msgid "New Geometry" msgstr "New Geometry" -#: flatcamGUI/FlatCAMGUI.py:1722 +#: flatcamGUI/MainGUI.py:1722 msgid "Change Units" msgstr "Change Units" -#: flatcamGUI/FlatCAMGUI.py:1723 +#: flatcamGUI/MainGUI.py:1723 msgid "Open Properties Tool" msgstr "Open Properties Tool" -#: flatcamGUI/FlatCAMGUI.py:1723 +#: flatcamGUI/MainGUI.py:1723 msgid "Rotate by 90 degree CW" msgstr "Rotate by 90 degree CW" -#: flatcamGUI/FlatCAMGUI.py:1723 +#: flatcamGUI/MainGUI.py:1723 msgid "Shell Toggle" msgstr "Shell Toggle" -#: flatcamGUI/FlatCAMGUI.py:1724 +#: flatcamGUI/MainGUI.py:1724 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:1725 +#: flatcamGUI/MainGUI.py:1725 msgid "Flip on X_axis" msgstr "Flip on X_axis" -#: flatcamGUI/FlatCAMGUI.py:1725 +#: flatcamGUI/MainGUI.py:1725 msgid "Flip on Y_axis" msgstr "Flip on Y_axis" -#: flatcamGUI/FlatCAMGUI.py:1728 +#: flatcamGUI/MainGUI.py:1728 msgid "Copy Obj" msgstr "Copy Obj" -#: flatcamGUI/FlatCAMGUI.py:1728 +#: flatcamGUI/MainGUI.py:1728 msgid "Open Tools Database" msgstr "Open Tools Database" -#: flatcamGUI/FlatCAMGUI.py:1729 +#: flatcamGUI/MainGUI.py:1729 msgid "Open Excellon File" msgstr "Open Excellon File" -#: flatcamGUI/FlatCAMGUI.py:1729 +#: flatcamGUI/MainGUI.py:1729 msgid "Open Gerber File" msgstr "Open Gerber File" -#: flatcamGUI/FlatCAMGUI.py:1729 +#: flatcamGUI/MainGUI.py:1729 msgid "New Project" msgstr "New Project" -#: flatcamGUI/FlatCAMGUI.py:1730 flatcamTools/ToolPDF.py:42 +#: flatcamGUI/MainGUI.py:1730 flatcamTools/ToolPDF.py:42 msgid "PDF Import Tool" msgstr "PDF Import Tool" -#: flatcamGUI/FlatCAMGUI.py:1730 +#: flatcamGUI/MainGUI.py:1730 msgid "Save Project" msgstr "Save Project" -#: flatcamGUI/FlatCAMGUI.py:1730 +#: flatcamGUI/MainGUI.py:1730 msgid "Toggle Plot Area" msgstr "Toggle Plot Area" -#: flatcamGUI/FlatCAMGUI.py:1733 +#: flatcamGUI/MainGUI.py:1733 msgid "Copy Obj_Name" msgstr "Copy Obj_Name" -#: flatcamGUI/FlatCAMGUI.py:1734 +#: flatcamGUI/MainGUI.py:1734 msgid "Toggle Code Editor" msgstr "Toggle Code Editor" -#: flatcamGUI/FlatCAMGUI.py:1734 +#: flatcamGUI/MainGUI.py:1734 msgid "Toggle the axis" msgstr "Toggle the axis" -#: flatcamGUI/FlatCAMGUI.py:1734 flatcamGUI/FlatCAMGUI.py:1933 -#: flatcamGUI/FlatCAMGUI.py:2020 flatcamGUI/FlatCAMGUI.py:2142 +#: flatcamGUI/MainGUI.py:1734 flatcamGUI/MainGUI.py:1933 +#: flatcamGUI/MainGUI.py:2020 flatcamGUI/MainGUI.py:2142 msgid "Distance Minimum Tool" msgstr "Distance Minimum Tool" -#: flatcamGUI/FlatCAMGUI.py:1735 +#: flatcamGUI/MainGUI.py:1735 msgid "Open Preferences Window" msgstr "Open Preferences Window" -#: flatcamGUI/FlatCAMGUI.py:1736 +#: flatcamGUI/MainGUI.py:1736 msgid "Rotate by 90 degree CCW" msgstr "Rotate by 90 degree CCW" -#: flatcamGUI/FlatCAMGUI.py:1736 +#: flatcamGUI/MainGUI.py:1736 msgid "Run a Script" msgstr "Run a Script" -#: flatcamGUI/FlatCAMGUI.py:1736 +#: flatcamGUI/MainGUI.py:1736 msgid "Toggle the workspace" msgstr "Toggle the workspace" -#: flatcamGUI/FlatCAMGUI.py:1736 +#: flatcamGUI/MainGUI.py:1736 msgid "Skew on X axis" msgstr "Skew on X axis" -#: flatcamGUI/FlatCAMGUI.py:1737 +#: flatcamGUI/MainGUI.py:1737 msgid "Skew on Y axis" msgstr "Skew on Y axis" -#: flatcamGUI/FlatCAMGUI.py:1740 +#: flatcamGUI/MainGUI.py:1740 msgid "2-Sided PCB Tool" msgstr "2-Sided PCB Tool" -#: flatcamGUI/FlatCAMGUI.py:1740 +#: flatcamGUI/MainGUI.py:1740 msgid "Transformations Tool" msgstr "Transformations Tool" -#: flatcamGUI/FlatCAMGUI.py:1742 +#: flatcamGUI/MainGUI.py:1742 msgid "Solder Paste Dispensing Tool" msgstr "Solder Paste Dispensing Tool" -#: flatcamGUI/FlatCAMGUI.py:1743 +#: flatcamGUI/MainGUI.py:1743 msgid "Film PCB Tool" msgstr "Film PCB Tool" -#: flatcamGUI/FlatCAMGUI.py:1743 +#: flatcamGUI/MainGUI.py:1743 msgid "Non-Copper Clearing Tool" msgstr "Non-Copper Clearing Tool" -#: flatcamGUI/FlatCAMGUI.py:1744 +#: flatcamGUI/MainGUI.py:1744 msgid "Paint Area Tool" msgstr "Paint Area Tool" -#: flatcamGUI/FlatCAMGUI.py:1744 +#: flatcamGUI/MainGUI.py:1744 msgid "Rules Check Tool" msgstr "Rules Check Tool" -#: flatcamGUI/FlatCAMGUI.py:1745 +#: flatcamGUI/MainGUI.py:1745 msgid "View File Source" msgstr "View File Source" -#: flatcamGUI/FlatCAMGUI.py:1746 +#: flatcamGUI/MainGUI.py:1746 msgid "Cutout PCB Tool" msgstr "Cutout PCB Tool" -#: flatcamGUI/FlatCAMGUI.py:1746 +#: flatcamGUI/MainGUI.py:1746 msgid "Enable all Plots" msgstr "Enable all Plots" -#: flatcamGUI/FlatCAMGUI.py:1746 +#: flatcamGUI/MainGUI.py:1746 msgid "Disable all Plots" msgstr "Disable all Plots" -#: flatcamGUI/FlatCAMGUI.py:1746 +#: flatcamGUI/MainGUI.py:1746 msgid "Disable Non-selected Plots" msgstr "Disable Non-selected Plots" -#: flatcamGUI/FlatCAMGUI.py:1747 +#: flatcamGUI/MainGUI.py:1747 msgid "Toggle Full Screen" msgstr "Toggle Full Screen" -#: flatcamGUI/FlatCAMGUI.py:1750 +#: flatcamGUI/MainGUI.py:1750 msgid "Abort current task (gracefully)" msgstr "Abort current task (gracefully)" -#: flatcamGUI/FlatCAMGUI.py:1753 +#: flatcamGUI/MainGUI.py:1753 msgid "Save Project As" msgstr "Save Project As" -#: flatcamGUI/FlatCAMGUI.py:1754 +#: flatcamGUI/MainGUI.py:1754 msgid "" "Paste Special. Will convert a Windows path style to the one required in Tcl " "Shell" @@ -6549,243 +6549,243 @@ msgstr "" "Paste Special. Will convert a Windows path style to the one required in Tcl " "Shell" -#: flatcamGUI/FlatCAMGUI.py:1757 +#: flatcamGUI/MainGUI.py:1757 msgid "Open Online Manual" msgstr "Open Online Manual" -#: flatcamGUI/FlatCAMGUI.py:1758 +#: flatcamGUI/MainGUI.py:1758 msgid "Open Online Tutorials" msgstr "Open Online Tutorials" -#: flatcamGUI/FlatCAMGUI.py:1758 +#: flatcamGUI/MainGUI.py:1758 msgid "Refresh Plots" msgstr "Refresh Plots" -#: flatcamGUI/FlatCAMGUI.py:1758 flatcamTools/ToolSolderPaste.py:509 +#: flatcamGUI/MainGUI.py:1758 flatcamTools/ToolSolderPaste.py:509 msgid "Delete Object" msgstr "Delete Object" -#: flatcamGUI/FlatCAMGUI.py:1758 +#: flatcamGUI/MainGUI.py:1758 msgid "Alternate: Delete Tool" msgstr "Alternate: Delete Tool" -#: flatcamGUI/FlatCAMGUI.py:1759 +#: flatcamGUI/MainGUI.py:1759 msgid "(left to Key_1)Toggle Notebook Area (Left Side)" msgstr "(left to Key_1)Toggle Notebook Area (Left Side)" -#: flatcamGUI/FlatCAMGUI.py:1759 +#: flatcamGUI/MainGUI.py:1759 msgid "En(Dis)able Obj Plot" msgstr "En(Dis)able Obj Plot" -#: flatcamGUI/FlatCAMGUI.py:1760 +#: flatcamGUI/MainGUI.py:1760 msgid "Deselects all objects" msgstr "Deselects all objects" -#: flatcamGUI/FlatCAMGUI.py:1774 +#: flatcamGUI/MainGUI.py:1774 msgid "Editor Shortcut list" msgstr "Editor Shortcut list" -#: flatcamGUI/FlatCAMGUI.py:1928 +#: flatcamGUI/MainGUI.py:1928 msgid "GEOMETRY EDITOR" msgstr "GEOMETRY EDITOR" -#: flatcamGUI/FlatCAMGUI.py:1928 +#: flatcamGUI/MainGUI.py:1928 msgid "Draw an Arc" msgstr "Draw an Arc" -#: flatcamGUI/FlatCAMGUI.py:1928 +#: flatcamGUI/MainGUI.py:1928 msgid "Copy Geo Item" msgstr "Copy Geo Item" -#: flatcamGUI/FlatCAMGUI.py:1929 +#: flatcamGUI/MainGUI.py:1929 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:1929 +#: flatcamGUI/MainGUI.py:1929 msgid "Polygon Intersection Tool" msgstr "Polygon Intersection Tool" -#: flatcamGUI/FlatCAMGUI.py:1930 +#: flatcamGUI/MainGUI.py:1930 msgid "Geo Paint Tool" msgstr "Geo Paint Tool" -#: flatcamGUI/FlatCAMGUI.py:1930 flatcamGUI/FlatCAMGUI.py:2019 -#: flatcamGUI/FlatCAMGUI.py:2139 +#: flatcamGUI/MainGUI.py:1930 flatcamGUI/MainGUI.py:2019 +#: flatcamGUI/MainGUI.py:2139 msgid "Jump to Location (x, y)" msgstr "Jump to Location (x, y)" -#: flatcamGUI/FlatCAMGUI.py:1930 +#: flatcamGUI/MainGUI.py:1930 msgid "Toggle Corner Snap" msgstr "Toggle Corner Snap" -#: flatcamGUI/FlatCAMGUI.py:1930 +#: flatcamGUI/MainGUI.py:1930 msgid "Move Geo Item" msgstr "Move Geo Item" -#: flatcamGUI/FlatCAMGUI.py:1931 +#: flatcamGUI/MainGUI.py:1931 msgid "Within Add Arc will cycle through the ARC modes" msgstr "Within Add Arc will cycle through the ARC modes" -#: flatcamGUI/FlatCAMGUI.py:1931 +#: flatcamGUI/MainGUI.py:1931 msgid "Draw a Polygon" msgstr "Draw a Polygon" -#: flatcamGUI/FlatCAMGUI.py:1931 +#: flatcamGUI/MainGUI.py:1931 msgid "Draw a Circle" msgstr "Draw a Circle" -#: flatcamGUI/FlatCAMGUI.py:1932 +#: flatcamGUI/MainGUI.py:1932 msgid "Draw a Path" msgstr "Draw a Path" -#: flatcamGUI/FlatCAMGUI.py:1932 +#: flatcamGUI/MainGUI.py:1932 msgid "Draw Rectangle" msgstr "Draw Rectangle" -#: flatcamGUI/FlatCAMGUI.py:1932 +#: flatcamGUI/MainGUI.py:1932 msgid "Polygon Subtraction Tool" msgstr "Polygon Subtraction Tool" -#: flatcamGUI/FlatCAMGUI.py:1932 +#: flatcamGUI/MainGUI.py:1932 msgid "Add Text Tool" msgstr "Add Text Tool" -#: flatcamGUI/FlatCAMGUI.py:1933 +#: flatcamGUI/MainGUI.py:1933 msgid "Polygon Union Tool" msgstr "Polygon Union Tool" -#: flatcamGUI/FlatCAMGUI.py:1933 +#: flatcamGUI/MainGUI.py:1933 msgid "Flip shape on X axis" msgstr "Flip shape on X axis" -#: flatcamGUI/FlatCAMGUI.py:1933 +#: flatcamGUI/MainGUI.py:1933 msgid "Flip shape on Y axis" msgstr "Flip shape on Y axis" -#: flatcamGUI/FlatCAMGUI.py:1934 +#: flatcamGUI/MainGUI.py:1934 msgid "Skew shape on X axis" msgstr "Skew shape on X axis" -#: flatcamGUI/FlatCAMGUI.py:1934 +#: flatcamGUI/MainGUI.py:1934 msgid "Skew shape on Y axis" msgstr "Skew shape on Y axis" -#: flatcamGUI/FlatCAMGUI.py:1934 +#: flatcamGUI/MainGUI.py:1934 msgid "Editor Transformation Tool" msgstr "Editor Transformation Tool" -#: flatcamGUI/FlatCAMGUI.py:1935 +#: flatcamGUI/MainGUI.py:1935 msgid "Offset shape on X axis" msgstr "Offset shape on X axis" -#: flatcamGUI/FlatCAMGUI.py:1935 +#: flatcamGUI/MainGUI.py:1935 msgid "Offset shape on Y axis" msgstr "Offset shape on Y axis" -#: flatcamGUI/FlatCAMGUI.py:1936 flatcamGUI/FlatCAMGUI.py:2022 -#: flatcamGUI/FlatCAMGUI.py:2144 +#: flatcamGUI/MainGUI.py:1936 flatcamGUI/MainGUI.py:2022 +#: flatcamGUI/MainGUI.py:2144 msgid "Save Object and Exit Editor" msgstr "Save Object and Exit Editor" -#: flatcamGUI/FlatCAMGUI.py:1936 +#: flatcamGUI/MainGUI.py:1936 msgid "Polygon Cut Tool" msgstr "Polygon Cut Tool" -#: flatcamGUI/FlatCAMGUI.py:1937 +#: flatcamGUI/MainGUI.py:1937 msgid "Rotate Geometry" msgstr "Rotate Geometry" -#: flatcamGUI/FlatCAMGUI.py:1937 +#: flatcamGUI/MainGUI.py:1937 msgid "Finish drawing for certain tools" msgstr "Finish drawing for certain tools" -#: flatcamGUI/FlatCAMGUI.py:1937 flatcamGUI/FlatCAMGUI.py:2022 -#: flatcamGUI/FlatCAMGUI.py:2142 +#: flatcamGUI/MainGUI.py:1937 flatcamGUI/MainGUI.py:2022 +#: flatcamGUI/MainGUI.py:2142 msgid "Abort and return to Select" msgstr "Abort and return to Select" -#: flatcamGUI/FlatCAMGUI.py:1938 flatcamGUI/FlatCAMGUI.py:2734 +#: flatcamGUI/MainGUI.py:1938 flatcamGUI/MainGUI.py:2734 msgid "Delete Shape" msgstr "Delete Shape" -#: flatcamGUI/FlatCAMGUI.py:2018 +#: flatcamGUI/MainGUI.py:2018 msgid "EXCELLON EDITOR" msgstr "EXCELLON EDITOR" -#: flatcamGUI/FlatCAMGUI.py:2018 +#: flatcamGUI/MainGUI.py:2018 msgid "Copy Drill(s)" msgstr "Copy Drill(s)" -#: flatcamGUI/FlatCAMGUI.py:2018 flatcamGUI/FlatCAMGUI.py:2268 +#: flatcamGUI/MainGUI.py:2018 flatcamGUI/MainGUI.py:2268 msgid "Add Drill" msgstr "Add Drill" -#: flatcamGUI/FlatCAMGUI.py:2019 +#: flatcamGUI/MainGUI.py:2019 msgid "Move Drill(s)" msgstr "Move Drill(s)" -#: flatcamGUI/FlatCAMGUI.py:2020 +#: flatcamGUI/MainGUI.py:2020 msgid "Add a new Tool" msgstr "Add a new Tool" -#: flatcamGUI/FlatCAMGUI.py:2021 +#: flatcamGUI/MainGUI.py:2021 msgid "Delete Drill(s)" msgstr "Delete Drill(s)" -#: flatcamGUI/FlatCAMGUI.py:2021 +#: flatcamGUI/MainGUI.py:2021 msgid "Alternate: Delete Tool(s)" msgstr "Alternate: Delete Tool(s)" -#: flatcamGUI/FlatCAMGUI.py:2138 +#: flatcamGUI/MainGUI.py:2138 msgid "GERBER EDITOR" msgstr "GERBER EDITOR" -#: flatcamGUI/FlatCAMGUI.py:2138 +#: flatcamGUI/MainGUI.py:2138 msgid "Add Disc" msgstr "Add Disc" -#: flatcamGUI/FlatCAMGUI.py:2138 +#: flatcamGUI/MainGUI.py:2138 msgid "Add SemiDisc" msgstr "Add SemiDisc" -#: flatcamGUI/FlatCAMGUI.py:2140 +#: flatcamGUI/MainGUI.py:2140 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:2141 +#: flatcamGUI/MainGUI.py:2141 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:2142 +#: flatcamGUI/MainGUI.py:2142 msgid "Alternate: Delete Apertures" msgstr "Alternate: Delete Apertures" -#: flatcamGUI/FlatCAMGUI.py:2143 +#: flatcamGUI/MainGUI.py:2143 msgid "Eraser Tool" msgstr "Eraser Tool" -#: flatcamGUI/FlatCAMGUI.py:2144 +#: flatcamGUI/MainGUI.py:2144 #: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:220 msgid "Mark Area Tool" msgstr "Mark Area Tool" -#: flatcamGUI/FlatCAMGUI.py:2144 +#: flatcamGUI/MainGUI.py:2144 msgid "Poligonize Tool" msgstr "Poligonize Tool" -#: flatcamGUI/FlatCAMGUI.py:2144 +#: flatcamGUI/MainGUI.py:2144 msgid "Transformation Tool" msgstr "Transformation Tool" -#: flatcamGUI/FlatCAMGUI.py:2161 +#: flatcamGUI/MainGUI.py:2161 msgid "Toggle Visibility" msgstr "Toggle Visibility" -#: flatcamGUI/FlatCAMGUI.py:2167 +#: flatcamGUI/MainGUI.py:2167 msgid "New" msgstr "New" -#: flatcamGUI/FlatCAMGUI.py:2169 flatcamGUI/ObjectUI.py:450 +#: flatcamGUI/MainGUI.py:2169 flatcamGUI/ObjectUI.py:450 #: flatcamObjects/FlatCAMGerber.py:239 flatcamObjects/FlatCAMGerber.py:327 #: flatcamTools/ToolCalibration.py:631 flatcamTools/ToolCalibration.py:648 #: flatcamTools/ToolCalibration.py:815 flatcamTools/ToolCopperThieving.py:144 @@ -6802,7 +6802,7 @@ msgstr "New" msgid "Geometry" msgstr "Geometry" -#: flatcamGUI/FlatCAMGUI.py:2173 +#: flatcamGUI/MainGUI.py:2173 #: flatcamGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:99 #: flatcamTools/ToolAlignObjects.py:74 flatcamTools/ToolAlignObjects.py:110 #: flatcamTools/ToolCalibration.py:197 flatcamTools/ToolCalibration.py:631 @@ -6817,76 +6817,76 @@ msgstr "Geometry" msgid "Excellon" msgstr "Excellon" -#: flatcamGUI/FlatCAMGUI.py:2180 +#: flatcamGUI/MainGUI.py:2180 msgid "Grids" msgstr "Grids" -#: flatcamGUI/FlatCAMGUI.py:2187 +#: flatcamGUI/MainGUI.py:2187 msgid "Clear Plot" msgstr "Clear Plot" -#: flatcamGUI/FlatCAMGUI.py:2189 +#: flatcamGUI/MainGUI.py:2189 msgid "Replot" msgstr "Replot" -#: flatcamGUI/FlatCAMGUI.py:2193 +#: flatcamGUI/MainGUI.py:2193 msgid "Geo Editor" msgstr "Geo Editor" -#: flatcamGUI/FlatCAMGUI.py:2195 +#: flatcamGUI/MainGUI.py:2195 msgid "Path" msgstr "Path" -#: flatcamGUI/FlatCAMGUI.py:2197 +#: flatcamGUI/MainGUI.py:2197 msgid "Rectangle" msgstr "Rectangle" -#: flatcamGUI/FlatCAMGUI.py:2200 +#: flatcamGUI/MainGUI.py:2200 msgid "Circle" msgstr "Circle" -#: flatcamGUI/FlatCAMGUI.py:2204 +#: flatcamGUI/MainGUI.py:2204 msgid "Arc" msgstr "Arc" -#: flatcamGUI/FlatCAMGUI.py:2218 +#: flatcamGUI/MainGUI.py:2218 msgid "Union" msgstr "Union" -#: flatcamGUI/FlatCAMGUI.py:2220 +#: flatcamGUI/MainGUI.py:2220 msgid "Intersection" msgstr "Intersection" -#: flatcamGUI/FlatCAMGUI.py:2222 +#: flatcamGUI/MainGUI.py:2222 msgid "Subtraction" msgstr "Subtraction" -#: flatcamGUI/FlatCAMGUI.py:2224 flatcamGUI/ObjectUI.py:2221 +#: flatcamGUI/MainGUI.py:2224 flatcamGUI/ObjectUI.py:2221 #: flatcamGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:56 msgid "Cut" msgstr "Cut" -#: flatcamGUI/FlatCAMGUI.py:2235 +#: flatcamGUI/MainGUI.py:2235 msgid "Pad" msgstr "Pad" -#: flatcamGUI/FlatCAMGUI.py:2237 +#: flatcamGUI/MainGUI.py:2237 msgid "Pad Array" msgstr "Pad Array" -#: flatcamGUI/FlatCAMGUI.py:2241 +#: flatcamGUI/MainGUI.py:2241 msgid "Track" msgstr "Track" -#: flatcamGUI/FlatCAMGUI.py:2243 +#: flatcamGUI/MainGUI.py:2243 msgid "Region" msgstr "Region" -#: flatcamGUI/FlatCAMGUI.py:2266 +#: flatcamGUI/MainGUI.py:2266 msgid "Exc Editor" msgstr "Exc Editor" -#: flatcamGUI/FlatCAMGUI.py:2311 +#: flatcamGUI/MainGUI.py:2311 msgid "" "Relative measurement.\n" "Reference is last click position" @@ -6894,7 +6894,7 @@ msgstr "" "Relative measurement.\n" "Reference is last click position" -#: flatcamGUI/FlatCAMGUI.py:2317 +#: flatcamGUI/MainGUI.py:2317 msgid "" "Absolute measurement.\n" "Reference is (X=0, Y= 0) position" @@ -6902,35 +6902,35 @@ msgstr "" "Absolute measurement.\n" "Reference is (X=0, Y= 0) position" -#: flatcamGUI/FlatCAMGUI.py:2419 +#: flatcamGUI/MainGUI.py:2419 msgid "Lock Toolbars" msgstr "Lock Toolbars" -#: flatcamGUI/FlatCAMGUI.py:2505 +#: flatcamGUI/MainGUI.py:2505 msgid "FlatCAM Preferences Folder opened." msgstr "FlatCAM Preferences Folder opened." -#: flatcamGUI/FlatCAMGUI.py:2516 +#: flatcamGUI/MainGUI.py:2516 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:2624 +#: flatcamGUI/MainGUI.py:2624 msgid "&Cutout Tool" msgstr "&Cutout Tool" -#: flatcamGUI/FlatCAMGUI.py:2694 +#: flatcamGUI/MainGUI.py:2694 msgid "Select 'Esc'" msgstr "Select 'Esc'" -#: flatcamGUI/FlatCAMGUI.py:2732 +#: flatcamGUI/MainGUI.py:2732 msgid "Copy Objects" msgstr "Copy Objects" -#: flatcamGUI/FlatCAMGUI.py:2740 +#: flatcamGUI/MainGUI.py:2740 msgid "Move Objects" msgstr "Move Objects" -#: flatcamGUI/FlatCAMGUI.py:3363 +#: flatcamGUI/MainGUI.py:3363 msgid "" "Please first select a geometry item to be cutted\n" "then select the geometry item that will be cutted\n" @@ -6942,12 +6942,12 @@ msgstr "" "out of the first item. In the end press ~X~ key or\n" "the toolbar button." -#: flatcamGUI/FlatCAMGUI.py:3370 flatcamGUI/FlatCAMGUI.py:3532 -#: flatcamGUI/FlatCAMGUI.py:3577 flatcamGUI/FlatCAMGUI.py:3597 +#: flatcamGUI/MainGUI.py:3370 flatcamGUI/MainGUI.py:3532 +#: flatcamGUI/MainGUI.py:3577 flatcamGUI/MainGUI.py:3597 msgid "Warning" msgstr "Warning" -#: flatcamGUI/FlatCAMGUI.py:3527 +#: flatcamGUI/MainGUI.py:3527 msgid "" "Please select geometry items \n" "on which to perform Intersection Tool." @@ -6955,7 +6955,7 @@ msgstr "" "Please select geometry items \n" "on which to perform Intersection Tool." -#: flatcamGUI/FlatCAMGUI.py:3572 +#: flatcamGUI/MainGUI.py:3572 msgid "" "Please select geometry items \n" "on which to perform Substraction Tool." @@ -6963,7 +6963,7 @@ msgstr "" "Please select geometry items \n" "on which to perform Substraction Tool." -#: flatcamGUI/FlatCAMGUI.py:3592 +#: flatcamGUI/MainGUI.py:3592 msgid "" "Please select geometry items \n" "on which to perform union." @@ -6971,52 +6971,52 @@ msgstr "" "Please select geometry items \n" "on which to perform union." -#: flatcamGUI/FlatCAMGUI.py:3675 flatcamGUI/FlatCAMGUI.py:3890 +#: flatcamGUI/MainGUI.py:3675 flatcamGUI/MainGUI.py:3890 msgid "Cancelled. Nothing selected to delete." msgstr "Cancelled. Nothing selected to delete." -#: flatcamGUI/FlatCAMGUI.py:3759 flatcamGUI/FlatCAMGUI.py:4006 +#: flatcamGUI/MainGUI.py:3759 flatcamGUI/MainGUI.py:4006 msgid "Cancelled. Nothing selected to copy." msgstr "Cancelled. Nothing selected to copy." -#: flatcamGUI/FlatCAMGUI.py:3805 flatcamGUI/FlatCAMGUI.py:4035 +#: flatcamGUI/MainGUI.py:3805 flatcamGUI/MainGUI.py:4035 msgid "Cancelled. Nothing selected to move." msgstr "Cancelled. Nothing selected to move." -#: flatcamGUI/FlatCAMGUI.py:4061 +#: flatcamGUI/MainGUI.py:4061 msgid "New Tool ..." msgstr "New Tool ..." -#: flatcamGUI/FlatCAMGUI.py:4062 flatcamTools/ToolNCC.py:924 +#: flatcamGUI/MainGUI.py:4062 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:4074 +#: flatcamGUI/MainGUI.py:4074 msgid "Adding Tool cancelled ..." msgstr "Adding Tool cancelled ..." -#: flatcamGUI/FlatCAMGUI.py:4088 +#: flatcamGUI/MainGUI.py:4088 msgid "Distance Tool exit..." msgstr "Distance Tool exit..." -#: flatcamGUI/FlatCAMGUI.py:4323 flatcamGUI/FlatCAMGUI.py:4330 +#: flatcamGUI/MainGUI.py:4323 flatcamGUI/MainGUI.py:4330 msgid "Idle." msgstr "Idle." -#: flatcamGUI/FlatCAMGUI.py:4361 +#: flatcamGUI/MainGUI.py:4361 msgid "Application started ..." msgstr "Application started ..." -#: flatcamGUI/FlatCAMGUI.py:4362 +#: flatcamGUI/MainGUI.py:4362 msgid "Hello!" msgstr "Hello!" -#: flatcamGUI/FlatCAMGUI.py:4424 +#: flatcamGUI/MainGUI.py:4424 msgid "Open Project ..." msgstr "Open Project ..." -#: flatcamGUI/FlatCAMGUI.py:4450 +#: flatcamGUI/MainGUI.py:4450 msgid "Exit" msgstr "Exit" diff --git a/locale/it/LC_MESSAGES/strings.po b/locale/it/LC_MESSAGES/strings.po index a626cc78..06ae19b9 100644 --- a/locale/it/LC_MESSAGES/strings.po +++ b/locale/it/LC_MESSAGES/strings.po @@ -70,8 +70,8 @@ msgstr "" #: FlatCAMDB.py:709 FlatCAMDB.py:2125 FlatCAMDB.py:2171 #: flatcamEditors/FlatCAMExcEditor.py:1023 #: flatcamEditors/FlatCAMExcEditor.py:1091 -#: flatcamEditors/FlatCAMTextEditor.py:223 flatcamGUI/FlatCAMGUI.py:3443 -#: flatcamGUI/FlatCAMGUI.py:3659 flatcamGUI/FlatCAMGUI.py:3874 +#: flatcamEditors/FlatCAMTextEditor.py:223 flatcamGUI/MainGUI.py:3443 +#: flatcamGUI/MainGUI.py:3659 flatcamGUI/MainGUI.py:3874 #: flatcamObjects/ObjectCollection.py:126 flatcamTools/ToolFilm.py:754 #: flatcamTools/ToolFilm.py:900 flatcamTools/ToolImage.py:247 #: flatcamTools/ToolMove.py:269 flatcamTools/ToolPcbWizard.py:301 @@ -122,20 +122,20 @@ msgstr "L'editor è attivato ..." msgid "Do you want to save the edited object?" msgstr "Vuoi salvare l'oggetto modificato?" -#: FlatCAMApp.py:2225 flatcamGUI/FlatCAMGUI.py:2288 +#: FlatCAMApp.py:2225 flatcamGUI/MainGUI.py:2288 msgid "Close Editor" msgstr "Chiudi Editor" #: FlatCAMApp.py:2228 FlatCAMApp.py:3517 FlatCAMApp.py:6084 FlatCAMApp.py:7344 #: FlatCAMTranslation.py:109 FlatCAMTranslation.py:207 -#: flatcamGUI/FlatCAMGUI.py:2519 +#: flatcamGUI/MainGUI.py:2519 #: flatcamGUI/preferences/PreferencesUIManager.py:1118 msgid "Yes" msgstr "Sì" #: FlatCAMApp.py:2229 FlatCAMApp.py:3518 FlatCAMApp.py:6085 FlatCAMApp.py:7345 #: FlatCAMTranslation.py:110 FlatCAMTranslation.py:208 -#: flatcamGUI/FlatCAMGUI.py:2520 +#: flatcamGUI/MainGUI.py:2520 #: flatcamGUI/preferences/PreferencesUIManager.py:1119 #: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:164 #: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:150 @@ -145,7 +145,7 @@ msgstr "No" #: FlatCAMApp.py:2230 FlatCAMApp.py:3519 FlatCAMApp.py:4477 FlatCAMApp.py:5102 #: FlatCAMApp.py:7346 FlatCAMDB.py:128 FlatCAMDB.py:1689 -#: flatcamGUI/FlatCAMGUI.py:1347 +#: flatcamGUI/MainGUI.py:1347 msgid "Cancel" msgstr "Cancellare" @@ -276,7 +276,7 @@ msgstr "creato/selezionato" msgid "Plotting" msgstr "Sto tracciando" -#: FlatCAMApp.py:3089 flatcamGUI/FlatCAMGUI.py:545 +#: FlatCAMApp.py:3089 flatcamGUI/MainGUI.py:545 msgid "About FlatCAM" msgstr "Informazioni su FlatCAM" @@ -421,7 +421,7 @@ msgstr "Traduttore" msgid "Corrections" msgstr "Correzioni" -#: FlatCAMApp.py:3454 FlatCAMApp.py:3463 flatcamGUI/FlatCAMGUI.py:527 +#: FlatCAMApp.py:3454 FlatCAMApp.py:3463 flatcamGUI/MainGUI.py:527 msgid "Bookmarks Manager" msgstr "Gestore segnalibri" @@ -449,7 +449,7 @@ msgstr "" msgid "Alternative website" msgstr "Sito web alternativo" -#: FlatCAMApp.py:3507 flatcamGUI/FlatCAMGUI.py:4244 +#: FlatCAMApp.py:3507 flatcamGUI/MainGUI.py:4244 msgid "Application is saving the project. Please wait ..." msgstr "L'applicazione sta salvando il progetto. Attendere ..." @@ -654,8 +654,8 @@ msgstr "Coordinate errate. Inserire coordinate nel formato X,Y" #: flatcamEditors/FlatCAMGrbEditor.py:1490 #: flatcamEditors/FlatCAMGrbEditor.py:1759 #: flatcamEditors/FlatCAMGrbEditor.py:4622 -#: flatcamEditors/FlatCAMGrbEditor.py:4637 flatcamGUI/FlatCAMGUI.py:3424 -#: flatcamGUI/FlatCAMGUI.py:3436 flatcamTools/ToolAlignObjects.py:393 +#: flatcamEditors/FlatCAMGrbEditor.py:4637 flatcamGUI/MainGUI.py:3424 +#: flatcamGUI/MainGUI.py:3436 flatcamTools/ToolAlignObjects.py:393 #: flatcamTools/ToolAlignObjects.py:415 msgid "Done." msgstr "Fatto." @@ -803,12 +803,12 @@ msgstr "Nessun oggetto selezionato per deformare/tagliare nell'asse Y." msgid "Skew on Y axis done." msgstr "Deformazione in Y applicata." -#: FlatCAMApp.py:6496 FlatCAMApp.py:6543 flatcamGUI/FlatCAMGUI.py:503 -#: flatcamGUI/FlatCAMGUI.py:1728 +#: FlatCAMApp.py:6496 FlatCAMApp.py:6543 flatcamGUI/MainGUI.py:503 +#: flatcamGUI/MainGUI.py:1728 msgid "Select All" msgstr "Seleziona tutto" -#: FlatCAMApp.py:6500 FlatCAMApp.py:6547 flatcamGUI/FlatCAMGUI.py:505 +#: FlatCAMApp.py:6500 FlatCAMApp.py:6547 flatcamGUI/MainGUI.py:505 msgid "Deselect All" msgstr "Deseleziona tutto" @@ -820,7 +820,7 @@ msgstr "Tutti gli oggetti sono selezionati." msgid "Objects selection is cleared." msgstr "Selezione oggetti svuotata." -#: FlatCAMApp.py:6593 flatcamGUI/FlatCAMGUI.py:1721 +#: FlatCAMApp.py:6593 flatcamGUI/MainGUI.py:1721 msgid "Grid On/Off" msgstr "Griglia On/Off" @@ -836,9 +836,9 @@ msgid "Add" msgstr "Aggiungi" #: FlatCAMApp.py:6607 flatcamEditors/FlatCAMGrbEditor.py:2588 -#: flatcamEditors/FlatCAMGrbEditor.py:2736 flatcamGUI/FlatCAMGUI.py:751 -#: flatcamGUI/FlatCAMGUI.py:1074 flatcamGUI/FlatCAMGUI.py:2141 -#: flatcamGUI/FlatCAMGUI.py:2284 flatcamGUI/FlatCAMGUI.py:2777 +#: flatcamEditors/FlatCAMGrbEditor.py:2736 flatcamGUI/MainGUI.py:751 +#: flatcamGUI/MainGUI.py:1074 flatcamGUI/MainGUI.py:2141 +#: flatcamGUI/MainGUI.py:2284 flatcamGUI/MainGUI.py:2777 #: flatcamGUI/ObjectUI.py:1623 flatcamObjects/FlatCAMGeometry.py:480 #: flatcamTools/ToolNCC.py:316 flatcamTools/ToolNCC.py:637 #: flatcamTools/ToolPaint.py:299 flatcamTools/ToolPaint.py:682 @@ -923,8 +923,8 @@ msgstr "" msgid "New Project created" msgstr "Nuovo progetto creato" -#: FlatCAMApp.py:7518 FlatCAMApp.py:7522 flatcamGUI/FlatCAMGUI.py:836 -#: flatcamGUI/FlatCAMGUI.py:2544 +#: FlatCAMApp.py:7518 FlatCAMApp.py:7522 flatcamGUI/MainGUI.py:836 +#: flatcamGUI/MainGUI.py:2544 msgid "Open Gerber" msgstr "Apri Gerber" @@ -941,8 +941,8 @@ msgstr "" msgid "Opening Gerber file." msgstr "Apertura file Gerber." -#: FlatCAMApp.py:7556 FlatCAMApp.py:7560 flatcamGUI/FlatCAMGUI.py:838 -#: flatcamGUI/FlatCAMGUI.py:2546 +#: FlatCAMApp.py:7556 FlatCAMApp.py:7560 flatcamGUI/MainGUI.py:838 +#: flatcamGUI/MainGUI.py:2546 msgid "Open Excellon" msgstr "Apri Excellon" @@ -958,7 +958,7 @@ msgstr "Apri G-Code" msgid "Opening G-Code file." msgstr "Apertura file G-Code." -#: FlatCAMApp.py:7631 FlatCAMApp.py:7634 flatcamGUI/FlatCAMGUI.py:1730 +#: FlatCAMApp.py:7631 FlatCAMApp.py:7634 flatcamGUI/MainGUI.py:1730 msgid "Open Project" msgstr "Apri progetto" @@ -1115,8 +1115,8 @@ msgstr "Fil script TCL aperto nell'edito ed eseguito." msgid "Save Project As ..." msgstr "Salva progetto come ..." -#: FlatCAMApp.py:8550 flatcamGUI/FlatCAMGUI.py:1134 -#: flatcamGUI/FlatCAMGUI.py:2176 +#: FlatCAMApp.py:8550 flatcamGUI/MainGUI.py:1134 +#: flatcamGUI/MainGUI.py:2176 msgid "Project" msgstr "Progetto" @@ -1360,7 +1360,7 @@ msgstr "Azzera lista progetti recenti" msgid "Clear Recent files" msgstr "Azzera lista file recenti" -#: FlatCAMApp.py:10064 flatcamGUI/FlatCAMGUI.py:1363 +#: FlatCAMApp.py:10064 flatcamGUI/MainGUI.py:1363 msgid "Shortcut Key List" msgstr "Elenco tasti scorciatoia" @@ -1517,47 +1517,47 @@ msgstr "Disabilitazione tracce ..." msgid "Working ..." msgstr "Elaborazione ..." -#: FlatCAMApp.py:10557 flatcamGUI/FlatCAMGUI.py:703 +#: FlatCAMApp.py:10557 flatcamGUI/MainGUI.py:703 msgid "Red" msgstr "Rosso" -#: FlatCAMApp.py:10559 flatcamGUI/FlatCAMGUI.py:706 +#: FlatCAMApp.py:10559 flatcamGUI/MainGUI.py:706 msgid "Blue" msgstr "Blu" -#: FlatCAMApp.py:10562 flatcamGUI/FlatCAMGUI.py:709 +#: FlatCAMApp.py:10562 flatcamGUI/MainGUI.py:709 msgid "Yellow" msgstr "Giallo" -#: FlatCAMApp.py:10564 flatcamGUI/FlatCAMGUI.py:712 +#: FlatCAMApp.py:10564 flatcamGUI/MainGUI.py:712 msgid "Green" msgstr "Verde" -#: FlatCAMApp.py:10566 flatcamGUI/FlatCAMGUI.py:715 +#: FlatCAMApp.py:10566 flatcamGUI/MainGUI.py:715 msgid "Purple" msgstr "Porpora" -#: FlatCAMApp.py:10568 flatcamGUI/FlatCAMGUI.py:718 +#: FlatCAMApp.py:10568 flatcamGUI/MainGUI.py:718 msgid "Brown" msgstr "Marrone" -#: FlatCAMApp.py:10570 FlatCAMApp.py:10626 flatcamGUI/FlatCAMGUI.py:721 +#: FlatCAMApp.py:10570 FlatCAMApp.py:10626 flatcamGUI/MainGUI.py:721 msgid "White" msgstr "Bianco" -#: FlatCAMApp.py:10572 flatcamGUI/FlatCAMGUI.py:724 +#: FlatCAMApp.py:10572 flatcamGUI/MainGUI.py:724 msgid "Black" msgstr "Nero" -#: FlatCAMApp.py:10575 flatcamGUI/FlatCAMGUI.py:729 +#: FlatCAMApp.py:10575 flatcamGUI/MainGUI.py:729 msgid "Custom" msgstr "Personalizzato" -#: FlatCAMApp.py:10585 flatcamGUI/FlatCAMGUI.py:737 +#: FlatCAMApp.py:10585 flatcamGUI/MainGUI.py:737 msgid "Default" msgstr "Valori di default" -#: FlatCAMApp.py:10609 flatcamGUI/FlatCAMGUI.py:734 +#: FlatCAMApp.py:10609 flatcamGUI/MainGUI.py:734 msgid "Opacity" msgstr "Trasparenza" @@ -1677,7 +1677,7 @@ msgstr "Segnalibro rimosso." msgid "Export FlatCAM Bookmarks" msgstr "Esporta i segnalibri di FlatCAM" -#: FlatCAMBookmark.py:293 flatcamGUI/FlatCAMGUI.py:524 +#: FlatCAMBookmark.py:293 flatcamGUI/MainGUI.py:524 msgid "Bookmarks" msgstr "Segnalibri" @@ -3104,7 +3104,7 @@ msgstr "" "Cancella un utensile dalla lista\n" "selezionandone la riga nella tabella." -#: flatcamEditors/FlatCAMExcEditor.py:1650 flatcamGUI/FlatCAMGUI.py:2019 +#: flatcamEditors/FlatCAMExcEditor.py:1650 flatcamGUI/MainGUI.py:2019 msgid "Resize Drill(s)" msgstr "Ridimensiona foro(i)" @@ -3128,8 +3128,8 @@ msgstr "Ridimensiona" msgid "Resize drill(s)" msgstr "Ridimensiona foro(i)" -#: flatcamEditors/FlatCAMExcEditor.py:1699 flatcamGUI/FlatCAMGUI.py:2018 -#: flatcamGUI/FlatCAMGUI.py:2270 +#: flatcamEditors/FlatCAMExcEditor.py:1699 flatcamGUI/MainGUI.py:2018 +#: flatcamGUI/MainGUI.py:2270 msgid "Add Drill Array" msgstr "Aggiungi matrice di fori" @@ -3441,7 +3441,7 @@ msgstr "" "Utensile già presente nella lista.\n" "Salva e riedita l'Excellon se vuoi aggiungere questo utensile. " -#: flatcamEditors/FlatCAMExcEditor.py:2579 flatcamGUI/FlatCAMGUI.py:4071 +#: flatcamEditors/FlatCAMExcEditor.py:2579 flatcamGUI/MainGUI.py:4071 msgid "Added new tool with dia" msgstr "Aggiunto nuovo utensile con diametro" @@ -3548,7 +3548,7 @@ msgid "Full Buffer" msgstr "Buffer completo" #: flatcamEditors/FlatCAMGeoEditor.py:132 -#: flatcamEditors/FlatCAMGeoEditor.py:3017 flatcamGUI/FlatCAMGUI.py:1928 +#: flatcamEditors/FlatCAMGeoEditor.py:3017 flatcamGUI/MainGUI.py:1928 #: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:190 msgid "Buffer Tool" msgstr "Utensile buffer" @@ -3569,7 +3569,7 @@ msgstr "" msgid "Font" msgstr "Font" -#: flatcamEditors/FlatCAMGeoEditor.py:323 flatcamGUI/FlatCAMGUI.py:2208 +#: flatcamEditors/FlatCAMGeoEditor.py:323 flatcamGUI/MainGUI.py:2208 msgid "Text" msgstr "Testo" @@ -3577,8 +3577,8 @@ msgstr "Testo" msgid "Text Tool" msgstr "Utensile testo" -#: flatcamEditors/FlatCAMGeoEditor.py:405 flatcamGUI/FlatCAMGUI.py:511 -#: flatcamGUI/FlatCAMGUI.py:1158 flatcamGUI/ObjectUI.py:818 +#: flatcamEditors/FlatCAMGeoEditor.py:405 flatcamGUI/MainGUI.py:511 +#: flatcamGUI/MainGUI.py:1158 flatcamGUI/ObjectUI.py:818 #: flatcamGUI/ObjectUI.py:1662 flatcamObjects/FlatCAMExcellon.py:742 #: flatcamObjects/FlatCAMExcellon.py:1084 flatcamObjects/FlatCAMGeometry.py:731 #: flatcamTools/ToolNCC.py:331 flatcamTools/ToolNCC.py:797 @@ -3615,12 +3615,12 @@ msgstr "Connetti:" msgid "Contour:" msgstr "Contorno:" -#: flatcamEditors/FlatCAMGeoEditor.py:529 flatcamGUI/FlatCAMGUI.py:2212 +#: flatcamEditors/FlatCAMGeoEditor.py:529 flatcamGUI/MainGUI.py:2212 msgid "Paint" msgstr "Disegno" -#: flatcamEditors/FlatCAMGeoEditor.py:547 flatcamGUI/FlatCAMGUI.py:924 -#: flatcamGUI/FlatCAMGUI.py:2628 flatcamGUI/ObjectUI.py:2059 +#: flatcamEditors/FlatCAMGeoEditor.py:547 flatcamGUI/MainGUI.py:924 +#: flatcamGUI/MainGUI.py:2628 flatcamGUI/ObjectUI.py:2059 #: flatcamTools/ToolPaint.py:43 flatcamTools/ToolPaint.py:738 msgid "Paint Tool" msgstr "Strumento disegno" @@ -3647,8 +3647,8 @@ msgstr "Strumento" #: flatcamEditors/FlatCAMGeoEditor.py:607 #: flatcamEditors/FlatCAMGeoEditor.py:991 #: flatcamEditors/FlatCAMGrbEditor.py:5306 -#: flatcamEditors/FlatCAMGrbEditor.py:5703 flatcamGUI/FlatCAMGUI.py:945 -#: flatcamGUI/FlatCAMGUI.py:2649 flatcamTools/ToolTransform.py:460 +#: flatcamEditors/FlatCAMGrbEditor.py:5703 flatcamGUI/MainGUI.py:945 +#: flatcamGUI/MainGUI.py:2649 flatcamTools/ToolTransform.py:460 msgid "Transform Tool" msgstr "Strumento trasformazione" @@ -3668,9 +3668,9 @@ msgstr "Inclina/Taglia" #: flatcamEditors/FlatCAMGeoEditor.py:610 #: flatcamEditors/FlatCAMGrbEditor.py:2680 -#: flatcamEditors/FlatCAMGrbEditor.py:5309 flatcamGUI/FlatCAMGUI.py:1063 -#: flatcamGUI/FlatCAMGUI.py:2140 flatcamGUI/FlatCAMGUI.py:2255 -#: flatcamGUI/FlatCAMGUI.py:2767 flatcamGUI/ObjectUI.py:125 +#: flatcamEditors/FlatCAMGrbEditor.py:5309 flatcamGUI/MainGUI.py:1063 +#: flatcamGUI/MainGUI.py:2140 flatcamGUI/MainGUI.py:2255 +#: flatcamGUI/MainGUI.py:2767 flatcamGUI/ObjectUI.py:125 #: flatcamGUI/preferences/tools/ToolsTransformPrefGroupUI.py:95 #: flatcamTools/ToolTransform.py:26 msgid "Scale" @@ -3682,8 +3682,8 @@ msgid "Mirror (Flip)" msgstr "Specchia" #: flatcamEditors/FlatCAMGeoEditor.py:625 -#: flatcamEditors/FlatCAMGrbEditor.py:5324 flatcamGUI/FlatCAMGUI.py:856 -#: flatcamGUI/FlatCAMGUI.py:2564 +#: flatcamEditors/FlatCAMGrbEditor.py:5324 flatcamGUI/MainGUI.py:856 +#: flatcamGUI/MainGUI.py:2564 msgid "Editor" msgstr "Editor" @@ -4398,7 +4398,7 @@ msgstr "Anello" msgid "Line" msgstr "Linea" -#: flatcamEditors/FlatCAMGeoEditor.py:3591 flatcamGUI/FlatCAMGUI.py:2202 +#: flatcamEditors/FlatCAMGeoEditor.py:3591 flatcamGUI/MainGUI.py:2202 #: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:328 #: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:292 #: flatcamTools/ToolNCC.py:584 flatcamTools/ToolPaint.py:528 @@ -4425,10 +4425,10 @@ msgstr "Modifica di Geometria MultiGeo, strumento" msgid "with diameter" msgstr "con diametro" -#: flatcamEditors/FlatCAMGeoEditor.py:4509 flatcamGUI/FlatCAMGUI.py:3753 -#: flatcamGUI/FlatCAMGUI.py:3799 flatcamGUI/FlatCAMGUI.py:3817 -#: flatcamGUI/FlatCAMGUI.py:3961 flatcamGUI/FlatCAMGUI.py:4000 -#: flatcamGUI/FlatCAMGUI.py:4012 flatcamGUI/FlatCAMGUI.py:4029 +#: flatcamEditors/FlatCAMGeoEditor.py:4509 flatcamGUI/MainGUI.py:3753 +#: flatcamGUI/MainGUI.py:3799 flatcamGUI/MainGUI.py:3817 +#: flatcamGUI/MainGUI.py:3961 flatcamGUI/MainGUI.py:4000 +#: flatcamGUI/MainGUI.py:4012 flatcamGUI/MainGUI.py:4029 msgid "Click on target point." msgstr "Fai clic sul punto target." @@ -4654,7 +4654,7 @@ msgstr "Fatto. Spostamento aperture completato." msgid "Done. Apertures copied." msgstr "Fatto. Aperture copiate." -#: flatcamEditors/FlatCAMGrbEditor.py:2455 flatcamGUI/FlatCAMGUI.py:2233 +#: flatcamEditors/FlatCAMGrbEditor.py:2455 flatcamGUI/MainGUI.py:2233 #: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:27 msgid "Gerber Editor" msgstr "Editor Gerber" @@ -4816,9 +4816,9 @@ msgstr "" "- \"Smussato\": l'angolo è una linea che collega direttamente le funzioni " "che si incontrano nell'angolo" -#: flatcamEditors/FlatCAMGrbEditor.py:2640 flatcamGUI/FlatCAMGUI.py:1061 -#: flatcamGUI/FlatCAMGUI.py:2138 flatcamGUI/FlatCAMGUI.py:2210 -#: flatcamGUI/FlatCAMGUI.py:2253 flatcamGUI/FlatCAMGUI.py:2765 +#: flatcamEditors/FlatCAMGrbEditor.py:2640 flatcamGUI/MainGUI.py:1061 +#: flatcamGUI/MainGUI.py:2138 flatcamGUI/MainGUI.py:2210 +#: flatcamGUI/MainGUI.py:2253 flatcamGUI/MainGUI.py:2765 #: flatcamGUI/preferences/tools/ToolsTransformPrefGroupUI.py:200 #: flatcamTools/ToolTransform.py:29 msgid "Buffer" @@ -4893,8 +4893,8 @@ msgstr "Cancella i poligoni contrassegnati." msgid "Clear all the markings." msgstr "Pulisci tutte le marchiature." -#: flatcamEditors/FlatCAMGrbEditor.py:2764 flatcamGUI/FlatCAMGUI.py:1046 -#: flatcamGUI/FlatCAMGUI.py:2138 flatcamGUI/FlatCAMGUI.py:2750 +#: flatcamEditors/FlatCAMGrbEditor.py:2764 flatcamGUI/MainGUI.py:1046 +#: flatcamGUI/MainGUI.py:2138 flatcamGUI/MainGUI.py:2750 msgid "Add Pad Array" msgstr "Aggiungi matrice di pad" @@ -5196,129 +5196,129 @@ msgstr "Salvato in" msgid "Code Editor content copied to clipboard ..." msgstr "Contenuto dell'editor di codice copiato negli appunti ..." -#: flatcamGUI/FlatCAMGUI.py:78 flatcamGUI/FlatCAMGUI.py:80 -#: flatcamGUI/FlatCAMGUI.py:2163 +#: flatcamGUI/MainGUI.py:78 flatcamGUI/MainGUI.py:80 +#: flatcamGUI/MainGUI.py:2163 msgid "Toggle Panel" msgstr "Attiva / disattiva pannello" -#: flatcamGUI/FlatCAMGUI.py:90 +#: flatcamGUI/MainGUI.py:90 msgid "File" msgstr "File" -#: flatcamGUI/FlatCAMGUI.py:95 +#: flatcamGUI/MainGUI.py:95 msgid "&New Project ...\tCtrl+N" msgstr "&Nuovo progetto ...\tCtrl+N" -#: flatcamGUI/FlatCAMGUI.py:97 +#: flatcamGUI/MainGUI.py:97 msgid "Will create a new, blank project" msgstr "Creerà un nuovo progetto vuoto" -#: flatcamGUI/FlatCAMGUI.py:102 +#: flatcamGUI/MainGUI.py:102 msgid "&New" msgstr "&Nuovo" -#: flatcamGUI/FlatCAMGUI.py:106 +#: flatcamGUI/MainGUI.py:106 msgid "Geometry\tN" msgstr "Geometria\tN" -#: flatcamGUI/FlatCAMGUI.py:108 +#: flatcamGUI/MainGUI.py:108 msgid "Will create a new, empty Geometry Object." msgstr "Creerà un nuovo oggetto Geometria vuoto." -#: flatcamGUI/FlatCAMGUI.py:111 +#: flatcamGUI/MainGUI.py:111 msgid "Gerber\tB" msgstr "Gerber\tB" -#: flatcamGUI/FlatCAMGUI.py:113 +#: flatcamGUI/MainGUI.py:113 msgid "Will create a new, empty Gerber Object." msgstr "Creerà un nuovo oggetto Gerber vuoto." -#: flatcamGUI/FlatCAMGUI.py:116 +#: flatcamGUI/MainGUI.py:116 msgid "Excellon\tL" msgstr "Excellon\tL" -#: flatcamGUI/FlatCAMGUI.py:118 +#: flatcamGUI/MainGUI.py:118 msgid "Will create a new, empty Excellon Object." msgstr "Creerà un nuovo oggetto Excellon vuoto." -#: flatcamGUI/FlatCAMGUI.py:123 +#: flatcamGUI/MainGUI.py:123 msgid "Document\tD" msgstr "Documento\tD" -#: flatcamGUI/FlatCAMGUI.py:125 +#: flatcamGUI/MainGUI.py:125 msgid "Will create a new, empty Document Object." msgstr "Creerà un nuovo oggetto Documento vuoto." -#: flatcamGUI/FlatCAMGUI.py:129 flatcamGUI/FlatCAMGUI.py:4397 +#: flatcamGUI/MainGUI.py:129 flatcamGUI/MainGUI.py:4397 #: flatcamTools/ToolPcbWizard.py:62 flatcamTools/ToolPcbWizard.py:69 msgid "Open" msgstr "Apri" -#: flatcamGUI/FlatCAMGUI.py:134 +#: flatcamGUI/MainGUI.py:134 msgid "Open &Project ..." msgstr "Apri &Progetto ..." -#: flatcamGUI/FlatCAMGUI.py:140 flatcamGUI/FlatCAMGUI.py:4407 +#: flatcamGUI/MainGUI.py:140 flatcamGUI/MainGUI.py:4407 msgid "Open &Gerber ...\tCtrl+G" msgstr "Apri &Gerber...\tCtrl+G" -#: flatcamGUI/FlatCAMGUI.py:145 flatcamGUI/FlatCAMGUI.py:4412 +#: flatcamGUI/MainGUI.py:145 flatcamGUI/MainGUI.py:4412 msgid "Open &Excellon ...\tCtrl+E" msgstr "Apri &Excellon ...\tCtrl+E" -#: flatcamGUI/FlatCAMGUI.py:150 flatcamGUI/FlatCAMGUI.py:4417 +#: flatcamGUI/MainGUI.py:150 flatcamGUI/MainGUI.py:4417 msgid "Open G-&Code ..." msgstr "Apri G-&Code ..." -#: flatcamGUI/FlatCAMGUI.py:157 +#: flatcamGUI/MainGUI.py:157 msgid "Open Config ..." msgstr "Apri Config ..." -#: flatcamGUI/FlatCAMGUI.py:162 +#: flatcamGUI/MainGUI.py:162 msgid "Recent projects" msgstr "Progetti recenti" -#: flatcamGUI/FlatCAMGUI.py:164 +#: flatcamGUI/MainGUI.py:164 msgid "Recent files" msgstr "File recenti" -#: flatcamGUI/FlatCAMGUI.py:167 flatcamGUI/FlatCAMGUI.py:753 -#: flatcamGUI/FlatCAMGUI.py:1339 +#: flatcamGUI/MainGUI.py:167 flatcamGUI/MainGUI.py:753 +#: flatcamGUI/MainGUI.py:1339 msgid "Save" msgstr "Salva" -#: flatcamGUI/FlatCAMGUI.py:171 +#: flatcamGUI/MainGUI.py:171 msgid "&Save Project ...\tCtrl+S" msgstr "&Salva progetto con nome ...\tCtrl+S" -#: flatcamGUI/FlatCAMGUI.py:176 +#: flatcamGUI/MainGUI.py:176 msgid "Save Project &As ...\tCtrl+Shift+S" msgstr "S&alva progetto con nome ...\tCtrl+Shift+S" -#: flatcamGUI/FlatCAMGUI.py:191 +#: flatcamGUI/MainGUI.py:191 msgid "Scripting" msgstr "Scripting" -#: flatcamGUI/FlatCAMGUI.py:195 flatcamGUI/FlatCAMGUI.py:903 -#: flatcamGUI/FlatCAMGUI.py:2607 +#: flatcamGUI/MainGUI.py:195 flatcamGUI/MainGUI.py:903 +#: flatcamGUI/MainGUI.py:2607 msgid "New Script ..." msgstr "Nuovo Script ..." -#: flatcamGUI/FlatCAMGUI.py:197 flatcamGUI/FlatCAMGUI.py:905 -#: flatcamGUI/FlatCAMGUI.py:2609 +#: flatcamGUI/MainGUI.py:197 flatcamGUI/MainGUI.py:905 +#: flatcamGUI/MainGUI.py:2609 msgid "Open Script ..." msgstr "Apri Script ..." -#: flatcamGUI/FlatCAMGUI.py:199 +#: flatcamGUI/MainGUI.py:199 msgid "Open Example ..." msgstr "Apri esempio ..." -#: flatcamGUI/FlatCAMGUI.py:201 flatcamGUI/FlatCAMGUI.py:907 -#: flatcamGUI/FlatCAMGUI.py:2611 flatcamGUI/FlatCAMGUI.py:4386 +#: flatcamGUI/MainGUI.py:201 flatcamGUI/MainGUI.py:907 +#: flatcamGUI/MainGUI.py:2611 flatcamGUI/MainGUI.py:4386 msgid "Run Script ..." msgstr "Esegui Script ..." -#: flatcamGUI/FlatCAMGUI.py:203 flatcamGUI/FlatCAMGUI.py:4388 +#: flatcamGUI/MainGUI.py:203 flatcamGUI/MainGUI.py:4388 msgid "" "Will run the opened Tcl Script thus\n" "enabling the automation of certain\n" @@ -5328,47 +5328,47 @@ msgstr "" "consentire l'automazione di alcune\n" "funzioni di FlatCAM." -#: flatcamGUI/FlatCAMGUI.py:218 +#: flatcamGUI/MainGUI.py:218 msgid "Import" msgstr "Importa" -#: flatcamGUI/FlatCAMGUI.py:220 +#: flatcamGUI/MainGUI.py:220 msgid "&SVG as Geometry Object ..." msgstr "&SVG come oggetto Geometry ..." -#: flatcamGUI/FlatCAMGUI.py:223 +#: flatcamGUI/MainGUI.py:223 msgid "&SVG as Gerber Object ..." msgstr "&SVG come oggetto Gerber ..." -#: flatcamGUI/FlatCAMGUI.py:228 +#: flatcamGUI/MainGUI.py:228 msgid "&DXF as Geometry Object ..." msgstr "&DXF come oggetto Geometria ..." -#: flatcamGUI/FlatCAMGUI.py:231 +#: flatcamGUI/MainGUI.py:231 msgid "&DXF as Gerber Object ..." msgstr "&DXF come oggetto Gerber ..." -#: flatcamGUI/FlatCAMGUI.py:235 +#: flatcamGUI/MainGUI.py:235 msgid "HPGL2 as Geometry Object ..." msgstr "HPGL2 come oggetto Geometry ..." -#: flatcamGUI/FlatCAMGUI.py:241 +#: flatcamGUI/MainGUI.py:241 msgid "Export" msgstr "Esporta" -#: flatcamGUI/FlatCAMGUI.py:245 +#: flatcamGUI/MainGUI.py:245 msgid "Export &SVG ..." msgstr "Esporta &SVG ..." -#: flatcamGUI/FlatCAMGUI.py:249 +#: flatcamGUI/MainGUI.py:249 msgid "Export DXF ..." msgstr "Esporta &DXF ..." -#: flatcamGUI/FlatCAMGUI.py:255 +#: flatcamGUI/MainGUI.py:255 msgid "Export &PNG ..." msgstr "Esporta &PNG ..." -#: flatcamGUI/FlatCAMGUI.py:257 +#: flatcamGUI/MainGUI.py:257 msgid "" "Will export an image in PNG format,\n" "the saved image will contain the visual \n" @@ -5378,11 +5378,11 @@ msgstr "" "l'immagine salvata conterrà le informazioni\n" "visive attualmente nell'area del grafico FlatCAM." -#: flatcamGUI/FlatCAMGUI.py:266 +#: flatcamGUI/MainGUI.py:266 msgid "Export &Excellon ..." msgstr "Export &Excellon ..." -#: flatcamGUI/FlatCAMGUI.py:268 +#: flatcamGUI/MainGUI.py:268 msgid "" "Will export an Excellon Object as Excellon file,\n" "the coordinates format, the file units and zeros\n" @@ -5392,11 +5392,11 @@ msgstr "" "il formato delle coordinate, le unità di file e gli zeri\n" "sono impostati in Preferenze -> Esporta Excellon." -#: flatcamGUI/FlatCAMGUI.py:275 +#: flatcamGUI/MainGUI.py:275 msgid "Export &Gerber ..." msgstr "Esporta &Gerber ..." -#: flatcamGUI/FlatCAMGUI.py:277 +#: flatcamGUI/MainGUI.py:277 msgid "" "Will export an Gerber Object as Gerber file,\n" "the coordinates format, the file units and zeros\n" @@ -5406,53 +5406,53 @@ msgstr "" "il formato delle coordinate, le unità di file e gli zeri\n" "sono impostati in Preferenze -> Esportazione Gerber." -#: flatcamGUI/FlatCAMGUI.py:287 +#: flatcamGUI/MainGUI.py:287 msgid "Backup" msgstr "Backup" -#: flatcamGUI/FlatCAMGUI.py:292 +#: flatcamGUI/MainGUI.py:292 msgid "Import Preferences from file ..." msgstr "Importa preferenze da file ..." -#: flatcamGUI/FlatCAMGUI.py:298 +#: flatcamGUI/MainGUI.py:298 msgid "Export Preferences to file ..." msgstr "Esporta preferenze su file ..." -#: flatcamGUI/FlatCAMGUI.py:306 +#: flatcamGUI/MainGUI.py:306 #: flatcamGUI/preferences/PreferencesUIManager.py:1115 msgid "Save Preferences" msgstr "Salva Preferenze" -#: flatcamGUI/FlatCAMGUI.py:312 flatcamGUI/FlatCAMGUI.py:1730 +#: flatcamGUI/MainGUI.py:312 flatcamGUI/MainGUI.py:1730 msgid "Print (PDF)" msgstr "Stampa (PDF)" -#: flatcamGUI/FlatCAMGUI.py:320 +#: flatcamGUI/MainGUI.py:320 msgid "E&xit" msgstr "Uscita (&x)" -#: flatcamGUI/FlatCAMGUI.py:328 flatcamGUI/FlatCAMGUI.py:747 -#: flatcamGUI/FlatCAMGUI.py:2286 +#: flatcamGUI/MainGUI.py:328 flatcamGUI/MainGUI.py:747 +#: flatcamGUI/MainGUI.py:2286 msgid "Edit" msgstr "Modifica" -#: flatcamGUI/FlatCAMGUI.py:332 +#: flatcamGUI/MainGUI.py:332 msgid "Edit Object\tE" msgstr "Modifica oggetto\tE" -#: flatcamGUI/FlatCAMGUI.py:334 +#: flatcamGUI/MainGUI.py:334 msgid "Close Editor\tCtrl+S" msgstr "Chiudi editor\tCtrl+S" -#: flatcamGUI/FlatCAMGUI.py:343 +#: flatcamGUI/MainGUI.py:343 msgid "Conversion" msgstr "Conversione" -#: flatcamGUI/FlatCAMGUI.py:345 +#: flatcamGUI/MainGUI.py:345 msgid "&Join Geo/Gerber/Exc -> Geo" msgstr "&J Unisci Geo/Gerber/Exc -> Geo" -#: flatcamGUI/FlatCAMGUI.py:347 +#: flatcamGUI/MainGUI.py:347 msgid "" "Merge a selection of objects, which can be of type:\n" "- Gerber\n" @@ -5466,30 +5466,30 @@ msgstr "" "- Geometria\n" "in un nuovo oggetto Geometria combinato." -#: flatcamGUI/FlatCAMGUI.py:354 +#: flatcamGUI/MainGUI.py:354 msgid "Join Excellon(s) -> Excellon" msgstr "Unisci Excellon -> Excellon" -#: flatcamGUI/FlatCAMGUI.py:356 +#: flatcamGUI/MainGUI.py:356 msgid "Merge a selection of Excellon objects into a new combo Excellon object." msgstr "" "Unisci una selezione di oggetti Excellon in un nuovo oggetto combinato " "Excellon." -#: flatcamGUI/FlatCAMGUI.py:359 +#: flatcamGUI/MainGUI.py:359 msgid "Join Gerber(s) -> Gerber" msgstr "Unisci Gerber(s) -> Gerber" -#: flatcamGUI/FlatCAMGUI.py:361 +#: flatcamGUI/MainGUI.py:361 msgid "Merge a selection of Gerber objects into a new combo Gerber object." msgstr "" "Unisci una selezione di oggetti Gerber in un nuovo oggetto Gerber combinato." -#: flatcamGUI/FlatCAMGUI.py:366 +#: flatcamGUI/MainGUI.py:366 msgid "Convert Single to MultiGeo" msgstr "Converti da Single a MultiGeo" -#: flatcamGUI/FlatCAMGUI.py:368 +#: flatcamGUI/MainGUI.py:368 msgid "" "Will convert a Geometry object from single_geometry type\n" "to a multi_geometry type." @@ -5497,11 +5497,11 @@ msgstr "" "Converte un oggetto Geometry dal tipo single_geometry\n" "a un tipo multi_geometry." -#: flatcamGUI/FlatCAMGUI.py:372 +#: flatcamGUI/MainGUI.py:372 msgid "Convert Multi to SingleGeo" msgstr "Converti da Multi a SingleGeo" -#: flatcamGUI/FlatCAMGUI.py:374 +#: flatcamGUI/MainGUI.py:374 msgid "" "Will convert a Geometry object from multi_geometry type\n" "to a single_geometry type." @@ -5509,756 +5509,756 @@ msgstr "" "Converte un oggetto Geometry dal tipo multi_geometry\n" "a un tipo single_geometry." -#: flatcamGUI/FlatCAMGUI.py:381 +#: flatcamGUI/MainGUI.py:381 msgid "Convert Any to Geo" msgstr "Converti tutto in Geo" -#: flatcamGUI/FlatCAMGUI.py:384 +#: flatcamGUI/MainGUI.py:384 msgid "Convert Any to Gerber" msgstr "Converti tutto in Gerber" -#: flatcamGUI/FlatCAMGUI.py:390 +#: flatcamGUI/MainGUI.py:390 msgid "&Copy\tCtrl+C" msgstr "&Copia\tCtrl+C" -#: flatcamGUI/FlatCAMGUI.py:395 +#: flatcamGUI/MainGUI.py:395 msgid "&Delete\tDEL" msgstr "Cancella (&D)\tDEL" -#: flatcamGUI/FlatCAMGUI.py:400 +#: flatcamGUI/MainGUI.py:400 msgid "Se&t Origin\tO" msgstr "Impos&ta Origine\tO" -#: flatcamGUI/FlatCAMGUI.py:402 +#: flatcamGUI/MainGUI.py:402 msgid "Move to Origin\tShift+O" msgstr "Sposta su Origine\tShift+O" -#: flatcamGUI/FlatCAMGUI.py:405 +#: flatcamGUI/MainGUI.py:405 msgid "Jump to Location\tJ" msgstr "Vai a locazione\tJ" -#: flatcamGUI/FlatCAMGUI.py:407 +#: flatcamGUI/MainGUI.py:407 msgid "Locate in Object\tShift+J" msgstr "Trova nell'oggetto\tShift+J" -#: flatcamGUI/FlatCAMGUI.py:412 +#: flatcamGUI/MainGUI.py:412 msgid "Toggle Units\tQ" msgstr "Attiva/disattiva Unità\tQ" -#: flatcamGUI/FlatCAMGUI.py:414 +#: flatcamGUI/MainGUI.py:414 msgid "&Select All\tCtrl+A" msgstr "&Seleziona tutto\tCtrl+A" -#: flatcamGUI/FlatCAMGUI.py:419 +#: flatcamGUI/MainGUI.py:419 msgid "&Preferences\tShift+P" msgstr "&Preferenze\tShift+P" -#: flatcamGUI/FlatCAMGUI.py:425 flatcamTools/ToolProperties.py:155 +#: flatcamGUI/MainGUI.py:425 flatcamTools/ToolProperties.py:155 msgid "Options" msgstr "Opzioni" -#: flatcamGUI/FlatCAMGUI.py:427 +#: flatcamGUI/MainGUI.py:427 msgid "&Rotate Selection\tShift+(R)" msgstr "&Ruota Selezione\tShift+(R)" -#: flatcamGUI/FlatCAMGUI.py:432 +#: flatcamGUI/MainGUI.py:432 msgid "&Skew on X axis\tShift+X" msgstr "Inclina nell'a&sse X\tShift+X" -#: flatcamGUI/FlatCAMGUI.py:434 +#: flatcamGUI/MainGUI.py:434 msgid "S&kew on Y axis\tShift+Y" msgstr "Inclina nell'asse Y\tShift+Y" -#: flatcamGUI/FlatCAMGUI.py:439 +#: flatcamGUI/MainGUI.py:439 msgid "Flip on &X axis\tX" msgstr "Capovolgi in &X\tX" -#: flatcamGUI/FlatCAMGUI.py:441 +#: flatcamGUI/MainGUI.py:441 msgid "Flip on &Y axis\tY" msgstr "Capovolgi in &Y\tY" -#: flatcamGUI/FlatCAMGUI.py:446 +#: flatcamGUI/MainGUI.py:446 msgid "View source\tAlt+S" msgstr "Vedi sorgente\tAlt+S" -#: flatcamGUI/FlatCAMGUI.py:448 +#: flatcamGUI/MainGUI.py:448 msgid "Tools DataBase\tCtrl+D" msgstr "DataBase Utensili\tCtrl+D" -#: flatcamGUI/FlatCAMGUI.py:455 flatcamGUI/FlatCAMGUI.py:2183 +#: flatcamGUI/MainGUI.py:455 flatcamGUI/MainGUI.py:2183 msgid "View" msgstr "Vedi" -#: flatcamGUI/FlatCAMGUI.py:457 +#: flatcamGUI/MainGUI.py:457 msgid "Enable all plots\tAlt+1" msgstr "Abilita tutti i plot\tAlt+1" -#: flatcamGUI/FlatCAMGUI.py:459 +#: flatcamGUI/MainGUI.py:459 msgid "Disable all plots\tAlt+2" msgstr "Disabilita tutti i plot\tAlt+2" -#: flatcamGUI/FlatCAMGUI.py:461 +#: flatcamGUI/MainGUI.py:461 msgid "Disable non-selected\tAlt+3" msgstr "Disabilita non selezionati\tAlt+3" -#: flatcamGUI/FlatCAMGUI.py:465 +#: flatcamGUI/MainGUI.py:465 msgid "&Zoom Fit\tV" msgstr "&Zoom tutto\tV" -#: flatcamGUI/FlatCAMGUI.py:467 +#: flatcamGUI/MainGUI.py:467 msgid "&Zoom In\t=" msgstr "&Zoom In\t=" -#: flatcamGUI/FlatCAMGUI.py:469 +#: flatcamGUI/MainGUI.py:469 msgid "&Zoom Out\t-" msgstr "&Zoom Fuori\t-" -#: flatcamGUI/FlatCAMGUI.py:474 +#: flatcamGUI/MainGUI.py:474 msgid "Redraw All\tF5" msgstr "Ridisegna tutto\tF5" -#: flatcamGUI/FlatCAMGUI.py:478 +#: flatcamGUI/MainGUI.py:478 msgid "Toggle Code Editor\tShift+E" msgstr "Attiva/disattiva Editor codice\tShift+E" -#: flatcamGUI/FlatCAMGUI.py:481 +#: flatcamGUI/MainGUI.py:481 msgid "&Toggle FullScreen\tAlt+F10" msgstr "(Dis)abili&ta schermo intero\tAlt+F10" -#: flatcamGUI/FlatCAMGUI.py:483 +#: flatcamGUI/MainGUI.py:483 msgid "&Toggle Plot Area\tCtrl+F10" msgstr "(Dis)a&ttiva area del diagramma\tCtrl+F10" -#: flatcamGUI/FlatCAMGUI.py:485 +#: flatcamGUI/MainGUI.py:485 msgid "&Toggle Project/Sel/Tool\t`" msgstr "(Dis)a&ttiva Progetto/Sel/Strumento\t`" -#: flatcamGUI/FlatCAMGUI.py:489 +#: flatcamGUI/MainGUI.py:489 msgid "&Toggle Grid Snap\tG" msgstr "(Dis)a&ttiva lo snap alla griglia\tG" -#: flatcamGUI/FlatCAMGUI.py:491 +#: flatcamGUI/MainGUI.py:491 msgid "&Toggle Grid Lines\tAlt+G" msgstr "(Dis)&attiva linee griglia\tG" -#: flatcamGUI/FlatCAMGUI.py:493 +#: flatcamGUI/MainGUI.py:493 msgid "&Toggle Axis\tShift+G" msgstr "(Dis)a&ttiva assi\tShift+G" -#: flatcamGUI/FlatCAMGUI.py:495 +#: flatcamGUI/MainGUI.py:495 msgid "Toggle Workspace\tShift+W" msgstr "(Dis)attiva area di lavoro\tShift+W" -#: flatcamGUI/FlatCAMGUI.py:500 +#: flatcamGUI/MainGUI.py:500 msgid "Objects" msgstr "Oggetti" -#: flatcamGUI/FlatCAMGUI.py:514 +#: flatcamGUI/MainGUI.py:514 msgid "&Command Line\tS" msgstr "Riga &Comandi\tS" -#: flatcamGUI/FlatCAMGUI.py:519 +#: flatcamGUI/MainGUI.py:519 msgid "Help" msgstr "Aiuto" -#: flatcamGUI/FlatCAMGUI.py:521 +#: flatcamGUI/MainGUI.py:521 msgid "Online Help\tF1" msgstr "Aiuto Online\tF1" -#: flatcamGUI/FlatCAMGUI.py:531 +#: flatcamGUI/MainGUI.py:531 msgid "Report a bug" msgstr "Riporta un bug" -#: flatcamGUI/FlatCAMGUI.py:534 +#: flatcamGUI/MainGUI.py:534 msgid "Excellon Specification" msgstr "Specifiche Excellon" -#: flatcamGUI/FlatCAMGUI.py:536 +#: flatcamGUI/MainGUI.py:536 msgid "Gerber Specification" msgstr "Specifiche Gerber" -#: flatcamGUI/FlatCAMGUI.py:541 +#: flatcamGUI/MainGUI.py:541 msgid "Shortcuts List\tF3" msgstr "Elenco Shortcuts\tF3" -#: flatcamGUI/FlatCAMGUI.py:543 +#: flatcamGUI/MainGUI.py:543 msgid "YouTube Channel\tF4" msgstr "Canale YouTube\tF4" -#: flatcamGUI/FlatCAMGUI.py:554 +#: flatcamGUI/MainGUI.py:554 msgid "Add Circle\tO" msgstr "Aggiungi cerchio\tO" -#: flatcamGUI/FlatCAMGUI.py:557 +#: flatcamGUI/MainGUI.py:557 msgid "Add Arc\tA" msgstr "Aggiungi Arco\tA" -#: flatcamGUI/FlatCAMGUI.py:560 +#: flatcamGUI/MainGUI.py:560 msgid "Add Rectangle\tR" msgstr "Aggiungi rettangolo\tR" -#: flatcamGUI/FlatCAMGUI.py:563 +#: flatcamGUI/MainGUI.py:563 msgid "Add Polygon\tN" msgstr "Aggiungi poligono\tN" -#: flatcamGUI/FlatCAMGUI.py:566 +#: flatcamGUI/MainGUI.py:566 msgid "Add Path\tP" msgstr "Aggiungi percorso\tP" -#: flatcamGUI/FlatCAMGUI.py:569 +#: flatcamGUI/MainGUI.py:569 msgid "Add Text\tT" msgstr "Aggiungi Testo\tT" -#: flatcamGUI/FlatCAMGUI.py:572 +#: flatcamGUI/MainGUI.py:572 msgid "Polygon Union\tU" msgstr "Unisci poligono\tU" -#: flatcamGUI/FlatCAMGUI.py:574 +#: flatcamGUI/MainGUI.py:574 msgid "Polygon Intersection\tE" msgstr "Interseca poligono\tE" -#: flatcamGUI/FlatCAMGUI.py:576 +#: flatcamGUI/MainGUI.py:576 msgid "Polygon Subtraction\tS" msgstr "Sottrai poligono\tS" -#: flatcamGUI/FlatCAMGUI.py:580 +#: flatcamGUI/MainGUI.py:580 msgid "Cut Path\tX" msgstr "Taglia percorso\tX" -#: flatcamGUI/FlatCAMGUI.py:584 +#: flatcamGUI/MainGUI.py:584 msgid "Copy Geom\tC" msgstr "Copia Geometria\tC" -#: flatcamGUI/FlatCAMGUI.py:586 +#: flatcamGUI/MainGUI.py:586 msgid "Delete Shape\tDEL" msgstr "Cancella forma\tCANC" -#: flatcamGUI/FlatCAMGUI.py:590 flatcamGUI/FlatCAMGUI.py:677 +#: flatcamGUI/MainGUI.py:590 flatcamGUI/MainGUI.py:677 msgid "Move\tM" msgstr "Sposta\tM" -#: flatcamGUI/FlatCAMGUI.py:592 +#: flatcamGUI/MainGUI.py:592 msgid "Buffer Tool\tB" msgstr "Strumento Buffer\tB" -#: flatcamGUI/FlatCAMGUI.py:595 +#: flatcamGUI/MainGUI.py:595 msgid "Paint Tool\tI" msgstr "Strumento Pittura\tI" -#: flatcamGUI/FlatCAMGUI.py:598 +#: flatcamGUI/MainGUI.py:598 msgid "Transform Tool\tAlt+R" msgstr "Strumento Trasforma\tAlt+R" -#: flatcamGUI/FlatCAMGUI.py:602 +#: flatcamGUI/MainGUI.py:602 msgid "Toggle Corner Snap\tK" msgstr "Attiva/disattiva Snap angoli\tK" -#: flatcamGUI/FlatCAMGUI.py:608 +#: flatcamGUI/MainGUI.py:608 msgid ">Excellon Editor<" msgstr ">Editor Excellon<" -#: flatcamGUI/FlatCAMGUI.py:612 +#: flatcamGUI/MainGUI.py:612 msgid "Add Drill Array\tA" msgstr "Aggiungi matrice fori\tA" -#: flatcamGUI/FlatCAMGUI.py:614 +#: flatcamGUI/MainGUI.py:614 msgid "Add Drill\tD" msgstr "Aggiungi Foro\tD" -#: flatcamGUI/FlatCAMGUI.py:618 +#: flatcamGUI/MainGUI.py:618 msgid "Add Slot Array\tQ" msgstr "Aggiungi Matrice slot\tQ" -#: flatcamGUI/FlatCAMGUI.py:620 +#: flatcamGUI/MainGUI.py:620 msgid "Add Slot\tW" msgstr "Aggiungi Slot\tW" -#: flatcamGUI/FlatCAMGUI.py:624 +#: flatcamGUI/MainGUI.py:624 msgid "Resize Drill(S)\tR" msgstr "Ridimensiona Foro(i)\tR" -#: flatcamGUI/FlatCAMGUI.py:627 flatcamGUI/FlatCAMGUI.py:671 +#: flatcamGUI/MainGUI.py:627 flatcamGUI/MainGUI.py:671 msgid "Copy\tC" msgstr "Copia\tC" -#: flatcamGUI/FlatCAMGUI.py:629 flatcamGUI/FlatCAMGUI.py:673 +#: flatcamGUI/MainGUI.py:629 flatcamGUI/MainGUI.py:673 msgid "Delete\tDEL" msgstr "Cancella\tCANC" -#: flatcamGUI/FlatCAMGUI.py:634 +#: flatcamGUI/MainGUI.py:634 msgid "Move Drill(s)\tM" msgstr "Sposta foro(i)\tM" -#: flatcamGUI/FlatCAMGUI.py:639 +#: flatcamGUI/MainGUI.py:639 msgid ">Gerber Editor<" msgstr ">Editor Gerber<" -#: flatcamGUI/FlatCAMGUI.py:643 +#: flatcamGUI/MainGUI.py:643 msgid "Add Pad\tP" msgstr "Aggiungi Pad\tP" -#: flatcamGUI/FlatCAMGUI.py:645 +#: flatcamGUI/MainGUI.py:645 msgid "Add Pad Array\tA" msgstr "Aggiungi matrice Pad\tA" -#: flatcamGUI/FlatCAMGUI.py:647 +#: flatcamGUI/MainGUI.py:647 msgid "Add Track\tT" msgstr "Aggiungi Traccia\tT" -#: flatcamGUI/FlatCAMGUI.py:649 +#: flatcamGUI/MainGUI.py:649 msgid "Add Region\tN" msgstr "Aggiungi regione\tN" -#: flatcamGUI/FlatCAMGUI.py:653 +#: flatcamGUI/MainGUI.py:653 msgid "Poligonize\tAlt+N" msgstr "Poligonizza\tAlt+N" -#: flatcamGUI/FlatCAMGUI.py:655 +#: flatcamGUI/MainGUI.py:655 msgid "Add SemiDisc\tE" msgstr "Aggiungi SemiDisco\tE" -#: flatcamGUI/FlatCAMGUI.py:657 +#: flatcamGUI/MainGUI.py:657 msgid "Add Disc\tD" msgstr "Aggiungi Disco\tD" -#: flatcamGUI/FlatCAMGUI.py:659 +#: flatcamGUI/MainGUI.py:659 msgid "Buffer\tB" msgstr "Buffer\tB" -#: flatcamGUI/FlatCAMGUI.py:661 +#: flatcamGUI/MainGUI.py:661 msgid "Scale\tS" msgstr "Scala\tS" -#: flatcamGUI/FlatCAMGUI.py:663 +#: flatcamGUI/MainGUI.py:663 msgid "Mark Area\tAlt+A" msgstr "Marchia Area\tAlt+A" -#: flatcamGUI/FlatCAMGUI.py:665 +#: flatcamGUI/MainGUI.py:665 msgid "Eraser\tCtrl+E" msgstr "Gomma\tCtrl+E" -#: flatcamGUI/FlatCAMGUI.py:667 +#: flatcamGUI/MainGUI.py:667 msgid "Transform\tAlt+R" msgstr "Trasforma\tAlt+R" -#: flatcamGUI/FlatCAMGUI.py:694 +#: flatcamGUI/MainGUI.py:694 msgid "Enable Plot" msgstr "Abilita Plot" -#: flatcamGUI/FlatCAMGUI.py:696 +#: flatcamGUI/MainGUI.py:696 msgid "Disable Plot" msgstr "Disabilita Plot" -#: flatcamGUI/FlatCAMGUI.py:700 +#: flatcamGUI/MainGUI.py:700 msgid "Set Color" msgstr "Imposta Colore" -#: flatcamGUI/FlatCAMGUI.py:742 +#: flatcamGUI/MainGUI.py:742 msgid "Generate CNC" msgstr "Genera CNC" -#: flatcamGUI/FlatCAMGUI.py:744 +#: flatcamGUI/MainGUI.py:744 msgid "View Source" msgstr "Vedi sorgente" -#: flatcamGUI/FlatCAMGUI.py:749 flatcamGUI/FlatCAMGUI.py:863 -#: flatcamGUI/FlatCAMGUI.py:1072 flatcamGUI/FlatCAMGUI.py:2138 -#: flatcamGUI/FlatCAMGUI.py:2282 flatcamGUI/FlatCAMGUI.py:2572 -#: flatcamGUI/FlatCAMGUI.py:2775 flatcamGUI/ObjectUI.py:1617 +#: flatcamGUI/MainGUI.py:749 flatcamGUI/MainGUI.py:863 +#: flatcamGUI/MainGUI.py:1072 flatcamGUI/MainGUI.py:2138 +#: flatcamGUI/MainGUI.py:2282 flatcamGUI/MainGUI.py:2572 +#: flatcamGUI/MainGUI.py:2775 flatcamGUI/ObjectUI.py:1617 #: flatcamObjects/FlatCAMGeometry.py:477 flatcamTools/ToolPanelize.py:540 #: flatcamTools/ToolPanelize.py:567 flatcamTools/ToolPanelize.py:660 #: flatcamTools/ToolPanelize.py:689 flatcamTools/ToolPanelize.py:751 msgid "Copy" msgstr "Copia" -#: flatcamGUI/FlatCAMGUI.py:757 flatcamGUI/FlatCAMGUI.py:2295 +#: flatcamGUI/MainGUI.py:757 flatcamGUI/MainGUI.py:2295 #: flatcamTools/ToolProperties.py:31 msgid "Properties" msgstr "Proprietà" -#: flatcamGUI/FlatCAMGUI.py:786 +#: flatcamGUI/MainGUI.py:786 msgid "File Toolbar" msgstr "Strumenti File" -#: flatcamGUI/FlatCAMGUI.py:790 +#: flatcamGUI/MainGUI.py:790 msgid "Edit Toolbar" msgstr "Strumenti Edit" -#: flatcamGUI/FlatCAMGUI.py:794 +#: flatcamGUI/MainGUI.py:794 msgid "View Toolbar" msgstr "Strumenti Vedi" -#: flatcamGUI/FlatCAMGUI.py:798 +#: flatcamGUI/MainGUI.py:798 msgid "Shell Toolbar" msgstr "Strumenti Shell" -#: flatcamGUI/FlatCAMGUI.py:802 +#: flatcamGUI/MainGUI.py:802 msgid "Tools Toolbar" msgstr "Strumenti Utensili" -#: flatcamGUI/FlatCAMGUI.py:806 +#: flatcamGUI/MainGUI.py:806 msgid "Excellon Editor Toolbar" msgstr "Strumenti Editor Excellon" -#: flatcamGUI/FlatCAMGUI.py:812 +#: flatcamGUI/MainGUI.py:812 msgid "Geometry Editor Toolbar" msgstr "Strumenti Editor Geometrie" -#: flatcamGUI/FlatCAMGUI.py:816 +#: flatcamGUI/MainGUI.py:816 msgid "Gerber Editor Toolbar" msgstr "Strumenti Editor Gerber" -#: flatcamGUI/FlatCAMGUI.py:820 +#: flatcamGUI/MainGUI.py:820 msgid "Grid Toolbar" msgstr "Strumenti Griglia" -#: flatcamGUI/FlatCAMGUI.py:841 flatcamGUI/FlatCAMGUI.py:2549 +#: flatcamGUI/MainGUI.py:841 flatcamGUI/MainGUI.py:2549 msgid "Open project" msgstr "Apri progetto" -#: flatcamGUI/FlatCAMGUI.py:843 flatcamGUI/FlatCAMGUI.py:2551 +#: flatcamGUI/MainGUI.py:843 flatcamGUI/MainGUI.py:2551 msgid "Save project" msgstr "Salva progetto" -#: flatcamGUI/FlatCAMGUI.py:849 flatcamGUI/FlatCAMGUI.py:2557 +#: flatcamGUI/MainGUI.py:849 flatcamGUI/MainGUI.py:2557 msgid "New Blank Geometry" msgstr "Nuova Geometria vuota" -#: flatcamGUI/FlatCAMGUI.py:851 flatcamGUI/FlatCAMGUI.py:2559 +#: flatcamGUI/MainGUI.py:851 flatcamGUI/MainGUI.py:2559 msgid "New Blank Gerber" msgstr "Nuovo Gerber vuoto" -#: flatcamGUI/FlatCAMGUI.py:853 flatcamGUI/FlatCAMGUI.py:2561 +#: flatcamGUI/MainGUI.py:853 flatcamGUI/MainGUI.py:2561 msgid "New Blank Excellon" msgstr "Nuovo Excellon vuoto" -#: flatcamGUI/FlatCAMGUI.py:858 flatcamGUI/FlatCAMGUI.py:2567 +#: flatcamGUI/MainGUI.py:858 flatcamGUI/MainGUI.py:2567 msgid "Save Object and close the Editor" msgstr "Salva Oggetto e chiudi editor" -#: flatcamGUI/FlatCAMGUI.py:865 flatcamGUI/FlatCAMGUI.py:2574 +#: flatcamGUI/MainGUI.py:865 flatcamGUI/MainGUI.py:2574 msgid "&Delete" msgstr "&Cancella" -#: flatcamGUI/FlatCAMGUI.py:868 flatcamGUI/FlatCAMGUI.py:1729 -#: flatcamGUI/FlatCAMGUI.py:1935 flatcamGUI/FlatCAMGUI.py:2577 +#: flatcamGUI/MainGUI.py:868 flatcamGUI/MainGUI.py:1729 +#: flatcamGUI/MainGUI.py:1935 flatcamGUI/MainGUI.py:2577 #: flatcamTools/ToolDistance.py:35 flatcamTools/ToolDistance.py:195 msgid "Distance Tool" msgstr "Strumento distanza" -#: flatcamGUI/FlatCAMGUI.py:870 flatcamGUI/FlatCAMGUI.py:2579 +#: flatcamGUI/MainGUI.py:870 flatcamGUI/MainGUI.py:2579 msgid "Distance Min Tool" msgstr "Strumento distanza minima" -#: flatcamGUI/FlatCAMGUI.py:872 flatcamGUI/FlatCAMGUI.py:1722 -#: flatcamGUI/FlatCAMGUI.py:2581 +#: flatcamGUI/MainGUI.py:872 flatcamGUI/MainGUI.py:1722 +#: flatcamGUI/MainGUI.py:2581 msgid "Set Origin" msgstr "Imposta origine" -#: flatcamGUI/FlatCAMGUI.py:874 +#: flatcamGUI/MainGUI.py:874 msgid "Move to Origin" msgstr "Sposta su origine" -#: flatcamGUI/FlatCAMGUI.py:877 flatcamGUI/FlatCAMGUI.py:2583 +#: flatcamGUI/MainGUI.py:877 flatcamGUI/MainGUI.py:2583 msgid "Jump to Location" msgstr "Vai a posizione" -#: flatcamGUI/FlatCAMGUI.py:879 flatcamGUI/FlatCAMGUI.py:1734 -#: flatcamGUI/FlatCAMGUI.py:2585 +#: flatcamGUI/MainGUI.py:879 flatcamGUI/MainGUI.py:1734 +#: flatcamGUI/MainGUI.py:2585 msgid "Locate in Object" msgstr "Trova nell'oggetto" -#: flatcamGUI/FlatCAMGUI.py:885 flatcamGUI/FlatCAMGUI.py:2591 +#: flatcamGUI/MainGUI.py:885 flatcamGUI/MainGUI.py:2591 msgid "&Replot" msgstr "&Ridisegna" -#: flatcamGUI/FlatCAMGUI.py:887 flatcamGUI/FlatCAMGUI.py:2593 +#: flatcamGUI/MainGUI.py:887 flatcamGUI/MainGUI.py:2593 msgid "&Clear plot" msgstr "&Cancella plot" -#: flatcamGUI/FlatCAMGUI.py:889 flatcamGUI/FlatCAMGUI.py:1725 -#: flatcamGUI/FlatCAMGUI.py:2595 +#: flatcamGUI/MainGUI.py:889 flatcamGUI/MainGUI.py:1725 +#: flatcamGUI/MainGUI.py:2595 msgid "Zoom In" msgstr "Zoom In" -#: flatcamGUI/FlatCAMGUI.py:891 flatcamGUI/FlatCAMGUI.py:1725 -#: flatcamGUI/FlatCAMGUI.py:2597 +#: flatcamGUI/MainGUI.py:891 flatcamGUI/MainGUI.py:1725 +#: flatcamGUI/MainGUI.py:2597 msgid "Zoom Out" msgstr "Zoom Out" -#: flatcamGUI/FlatCAMGUI.py:893 flatcamGUI/FlatCAMGUI.py:1724 -#: flatcamGUI/FlatCAMGUI.py:2185 flatcamGUI/FlatCAMGUI.py:2599 +#: flatcamGUI/MainGUI.py:893 flatcamGUI/MainGUI.py:1724 +#: flatcamGUI/MainGUI.py:2185 flatcamGUI/MainGUI.py:2599 msgid "Zoom Fit" msgstr "Zoom Tutto" -#: flatcamGUI/FlatCAMGUI.py:901 flatcamGUI/FlatCAMGUI.py:2605 +#: flatcamGUI/MainGUI.py:901 flatcamGUI/MainGUI.py:2605 msgid "&Command Line" msgstr "Riga &Comandi" -#: flatcamGUI/FlatCAMGUI.py:913 flatcamGUI/FlatCAMGUI.py:2617 +#: flatcamGUI/MainGUI.py:913 flatcamGUI/MainGUI.py:2617 msgid "2Sided Tool" msgstr "Strumento 2 facce" -#: flatcamGUI/FlatCAMGUI.py:915 flatcamGUI/FlatCAMGUI.py:1740 -#: flatcamGUI/FlatCAMGUI.py:2619 +#: flatcamGUI/MainGUI.py:915 flatcamGUI/MainGUI.py:1740 +#: flatcamGUI/MainGUI.py:2619 msgid "Align Objects Tool" msgstr "Strumento allinea oggetti" -#: flatcamGUI/FlatCAMGUI.py:917 flatcamGUI/FlatCAMGUI.py:1741 -#: flatcamGUI/FlatCAMGUI.py:2621 flatcamTools/ToolExtractDrills.py:393 +#: flatcamGUI/MainGUI.py:917 flatcamGUI/MainGUI.py:1741 +#: flatcamGUI/MainGUI.py:2621 flatcamTools/ToolExtractDrills.py:393 msgid "Extract Drills Tool" msgstr "Strumento estrai fori" -#: flatcamGUI/FlatCAMGUI.py:920 flatcamGUI/ObjectUI.py:596 +#: flatcamGUI/MainGUI.py:920 flatcamGUI/ObjectUI.py:596 #: flatcamTools/ToolCutOut.py:440 msgid "Cutout Tool" msgstr "Strumento Ritaglia" -#: flatcamGUI/FlatCAMGUI.py:922 flatcamGUI/FlatCAMGUI.py:2626 +#: flatcamGUI/MainGUI.py:922 flatcamGUI/MainGUI.py:2626 #: flatcamGUI/ObjectUI.py:574 flatcamGUI/ObjectUI.py:2077 #: flatcamTools/ToolNCC.py:974 msgid "NCC Tool" msgstr "Strumento NCC" -#: flatcamGUI/FlatCAMGUI.py:928 flatcamGUI/FlatCAMGUI.py:2632 +#: flatcamGUI/MainGUI.py:928 flatcamGUI/MainGUI.py:2632 msgid "Panel Tool" msgstr "Stromento Pannello" -#: flatcamGUI/FlatCAMGUI.py:930 flatcamGUI/FlatCAMGUI.py:2634 +#: flatcamGUI/MainGUI.py:930 flatcamGUI/MainGUI.py:2634 #: flatcamTools/ToolFilm.py:586 msgid "Film Tool" msgstr "Strumento Film" -#: flatcamGUI/FlatCAMGUI.py:932 flatcamGUI/FlatCAMGUI.py:2636 +#: flatcamGUI/MainGUI.py:932 flatcamGUI/MainGUI.py:2636 #: flatcamTools/ToolSolderPaste.py:553 msgid "SolderPaste Tool" msgstr "Strumento SolderPaste" -#: flatcamGUI/FlatCAMGUI.py:934 flatcamGUI/FlatCAMGUI.py:2638 +#: flatcamGUI/MainGUI.py:934 flatcamGUI/MainGUI.py:2638 #: flatcamTools/ToolSub.py:35 msgid "Subtract Tool" msgstr "Strumento Sottrai" -#: flatcamGUI/FlatCAMGUI.py:936 flatcamGUI/FlatCAMGUI.py:2640 +#: flatcamGUI/MainGUI.py:936 flatcamGUI/MainGUI.py:2640 #: flatcamTools/ToolRulesCheck.py:616 msgid "Rules Tool" msgstr "Strumento Righello" -#: flatcamGUI/FlatCAMGUI.py:938 flatcamGUI/FlatCAMGUI.py:1743 -#: flatcamGUI/FlatCAMGUI.py:2642 flatcamTools/ToolOptimal.py:33 +#: flatcamGUI/MainGUI.py:938 flatcamGUI/MainGUI.py:1743 +#: flatcamGUI/MainGUI.py:2642 flatcamTools/ToolOptimal.py:33 #: flatcamTools/ToolOptimal.py:307 msgid "Optimal Tool" msgstr "Strumento Ottimo" -#: flatcamGUI/FlatCAMGUI.py:943 flatcamGUI/FlatCAMGUI.py:1740 -#: flatcamGUI/FlatCAMGUI.py:2647 +#: flatcamGUI/MainGUI.py:943 flatcamGUI/MainGUI.py:1740 +#: flatcamGUI/MainGUI.py:2647 msgid "Calculators Tool" msgstr "Strumento Calcolatrici" -#: flatcamGUI/FlatCAMGUI.py:947 flatcamGUI/FlatCAMGUI.py:1744 -#: flatcamGUI/FlatCAMGUI.py:2651 flatcamTools/ToolQRCode.py:43 +#: flatcamGUI/MainGUI.py:947 flatcamGUI/MainGUI.py:1744 +#: flatcamGUI/MainGUI.py:2651 flatcamTools/ToolQRCode.py:43 #: flatcamTools/ToolQRCode.py:382 msgid "QRCode Tool" msgstr "Strumento QRCode" -#: flatcamGUI/FlatCAMGUI.py:949 flatcamGUI/FlatCAMGUI.py:2653 +#: flatcamGUI/MainGUI.py:949 flatcamGUI/MainGUI.py:2653 #: flatcamTools/ToolCopperThieving.py:39 flatcamTools/ToolCopperThieving.py:568 msgid "Copper Thieving Tool" msgstr "Strumento deposito rame" -#: flatcamGUI/FlatCAMGUI.py:952 flatcamGUI/FlatCAMGUI.py:1741 -#: flatcamGUI/FlatCAMGUI.py:2656 flatcamTools/ToolFiducials.py:33 +#: flatcamGUI/MainGUI.py:952 flatcamGUI/MainGUI.py:1741 +#: flatcamGUI/MainGUI.py:2656 flatcamTools/ToolFiducials.py:33 #: flatcamTools/ToolFiducials.py:395 msgid "Fiducials Tool" msgstr "Strumento Fiducial" -#: flatcamGUI/FlatCAMGUI.py:954 flatcamGUI/FlatCAMGUI.py:2658 +#: flatcamGUI/MainGUI.py:954 flatcamGUI/MainGUI.py:2658 #: flatcamTools/ToolCalibration.py:37 flatcamTools/ToolCalibration.py:759 msgid "Calibration Tool" msgstr "Strumento Calibrazione" -#: flatcamGUI/FlatCAMGUI.py:956 flatcamGUI/FlatCAMGUI.py:1741 -#: flatcamGUI/FlatCAMGUI.py:2660 +#: flatcamGUI/MainGUI.py:956 flatcamGUI/MainGUI.py:1741 +#: flatcamGUI/MainGUI.py:2660 msgid "Punch Gerber Tool" msgstr "Strumento punzone gerber" -#: flatcamGUI/FlatCAMGUI.py:958 flatcamGUI/FlatCAMGUI.py:2662 +#: flatcamGUI/MainGUI.py:958 flatcamGUI/MainGUI.py:2662 #: flatcamTools/ToolInvertGerber.py:31 msgid "Invert Gerber Tool" msgstr "Strumento inverti gerber" -#: flatcamGUI/FlatCAMGUI.py:964 flatcamGUI/FlatCAMGUI.py:990 -#: flatcamGUI/FlatCAMGUI.py:1042 flatcamGUI/FlatCAMGUI.py:2668 -#: flatcamGUI/FlatCAMGUI.py:2746 +#: flatcamGUI/MainGUI.py:964 flatcamGUI/MainGUI.py:990 +#: flatcamGUI/MainGUI.py:1042 flatcamGUI/MainGUI.py:2668 +#: flatcamGUI/MainGUI.py:2746 msgid "Select" msgstr "Seleziona" -#: flatcamGUI/FlatCAMGUI.py:966 flatcamGUI/FlatCAMGUI.py:2670 +#: flatcamGUI/MainGUI.py:966 flatcamGUI/MainGUI.py:2670 msgid "Add Drill Hole" msgstr "Aggiungi Foro" -#: flatcamGUI/FlatCAMGUI.py:968 flatcamGUI/FlatCAMGUI.py:2672 +#: flatcamGUI/MainGUI.py:968 flatcamGUI/MainGUI.py:2672 msgid "Add Drill Hole Array" msgstr "Aggiungi matrice Fori" -#: flatcamGUI/FlatCAMGUI.py:970 flatcamGUI/FlatCAMGUI.py:2020 -#: flatcamGUI/FlatCAMGUI.py:2273 flatcamGUI/FlatCAMGUI.py:2676 +#: flatcamGUI/MainGUI.py:970 flatcamGUI/MainGUI.py:2020 +#: flatcamGUI/MainGUI.py:2273 flatcamGUI/MainGUI.py:2676 msgid "Add Slot" msgstr "Aggiungi Slot" -#: flatcamGUI/FlatCAMGUI.py:972 flatcamGUI/FlatCAMGUI.py:2019 -#: flatcamGUI/FlatCAMGUI.py:2275 flatcamGUI/FlatCAMGUI.py:2678 +#: flatcamGUI/MainGUI.py:972 flatcamGUI/MainGUI.py:2019 +#: flatcamGUI/MainGUI.py:2275 flatcamGUI/MainGUI.py:2678 msgid "Add Slot Array" msgstr "Aggiungi matrici Slot" -#: flatcamGUI/FlatCAMGUI.py:974 flatcamGUI/FlatCAMGUI.py:2278 -#: flatcamGUI/FlatCAMGUI.py:2674 +#: flatcamGUI/MainGUI.py:974 flatcamGUI/MainGUI.py:2278 +#: flatcamGUI/MainGUI.py:2674 msgid "Resize Drill" msgstr "Ridimensiona Foro" -#: flatcamGUI/FlatCAMGUI.py:978 flatcamGUI/FlatCAMGUI.py:2682 +#: flatcamGUI/MainGUI.py:978 flatcamGUI/MainGUI.py:2682 msgid "Copy Drill" msgstr "Copia Foro" -#: flatcamGUI/FlatCAMGUI.py:980 flatcamGUI/FlatCAMGUI.py:2684 +#: flatcamGUI/MainGUI.py:980 flatcamGUI/MainGUI.py:2684 msgid "Delete Drill" msgstr "Cancella Foro" -#: flatcamGUI/FlatCAMGUI.py:984 flatcamGUI/FlatCAMGUI.py:2688 +#: flatcamGUI/MainGUI.py:984 flatcamGUI/MainGUI.py:2688 msgid "Move Drill" msgstr "Sposta Foro" -#: flatcamGUI/FlatCAMGUI.py:992 flatcamGUI/FlatCAMGUI.py:2696 +#: flatcamGUI/MainGUI.py:992 flatcamGUI/MainGUI.py:2696 msgid "Add Circle" msgstr "Aggiungi Cerchio" -#: flatcamGUI/FlatCAMGUI.py:994 flatcamGUI/FlatCAMGUI.py:2698 +#: flatcamGUI/MainGUI.py:994 flatcamGUI/MainGUI.py:2698 msgid "Add Arc" msgstr "Aggiungi Arco" -#: flatcamGUI/FlatCAMGUI.py:996 flatcamGUI/FlatCAMGUI.py:2700 +#: flatcamGUI/MainGUI.py:996 flatcamGUI/MainGUI.py:2700 msgid "Add Rectangle" msgstr "Aggiungi rettangolo" -#: flatcamGUI/FlatCAMGUI.py:1000 flatcamGUI/FlatCAMGUI.py:2704 +#: flatcamGUI/MainGUI.py:1000 flatcamGUI/MainGUI.py:2704 msgid "Add Path" msgstr "Aggiungi Percorso" -#: flatcamGUI/FlatCAMGUI.py:1002 flatcamGUI/FlatCAMGUI.py:2706 +#: flatcamGUI/MainGUI.py:1002 flatcamGUI/MainGUI.py:2706 msgid "Add Polygon" msgstr "Aggiungi Poligono" -#: flatcamGUI/FlatCAMGUI.py:1005 flatcamGUI/FlatCAMGUI.py:2709 +#: flatcamGUI/MainGUI.py:1005 flatcamGUI/MainGUI.py:2709 msgid "Add Text" msgstr "Aggiungi Testo" -#: flatcamGUI/FlatCAMGUI.py:1007 flatcamGUI/FlatCAMGUI.py:2711 +#: flatcamGUI/MainGUI.py:1007 flatcamGUI/MainGUI.py:2711 msgid "Add Buffer" msgstr "Aggiungi Buffer" -#: flatcamGUI/FlatCAMGUI.py:1009 flatcamGUI/FlatCAMGUI.py:2713 +#: flatcamGUI/MainGUI.py:1009 flatcamGUI/MainGUI.py:2713 msgid "Paint Shape" msgstr "Disegna Figura" -#: flatcamGUI/FlatCAMGUI.py:1011 flatcamGUI/FlatCAMGUI.py:1068 -#: flatcamGUI/FlatCAMGUI.py:2214 flatcamGUI/FlatCAMGUI.py:2259 -#: flatcamGUI/FlatCAMGUI.py:2715 flatcamGUI/FlatCAMGUI.py:2771 +#: flatcamGUI/MainGUI.py:1011 flatcamGUI/MainGUI.py:1068 +#: flatcamGUI/MainGUI.py:2214 flatcamGUI/MainGUI.py:2259 +#: flatcamGUI/MainGUI.py:2715 flatcamGUI/MainGUI.py:2771 msgid "Eraser" msgstr "Gomma" -#: flatcamGUI/FlatCAMGUI.py:1015 flatcamGUI/FlatCAMGUI.py:2719 +#: flatcamGUI/MainGUI.py:1015 flatcamGUI/MainGUI.py:2719 msgid "Polygon Union" msgstr "Unione Poligono" -#: flatcamGUI/FlatCAMGUI.py:1017 flatcamGUI/FlatCAMGUI.py:2721 +#: flatcamGUI/MainGUI.py:1017 flatcamGUI/MainGUI.py:2721 msgid "Polygon Explode" msgstr "Explodi Poligono" -#: flatcamGUI/FlatCAMGUI.py:1020 flatcamGUI/FlatCAMGUI.py:2724 +#: flatcamGUI/MainGUI.py:1020 flatcamGUI/MainGUI.py:2724 msgid "Polygon Intersection" msgstr "Interseca Poligono" -#: flatcamGUI/FlatCAMGUI.py:1022 flatcamGUI/FlatCAMGUI.py:2726 +#: flatcamGUI/MainGUI.py:1022 flatcamGUI/MainGUI.py:2726 msgid "Polygon Subtraction" msgstr "Sottrai Poligono" -#: flatcamGUI/FlatCAMGUI.py:1026 flatcamGUI/FlatCAMGUI.py:2730 +#: flatcamGUI/MainGUI.py:1026 flatcamGUI/MainGUI.py:2730 msgid "Cut Path" msgstr "Taglia Percorso" -#: flatcamGUI/FlatCAMGUI.py:1028 +#: flatcamGUI/MainGUI.py:1028 msgid "Copy Shape(s)" msgstr "Copia Forma(e)" -#: flatcamGUI/FlatCAMGUI.py:1031 +#: flatcamGUI/MainGUI.py:1031 msgid "Delete Shape '-'" msgstr "Cancella Forme '-'" -#: flatcamGUI/FlatCAMGUI.py:1033 flatcamGUI/FlatCAMGUI.py:1076 -#: flatcamGUI/FlatCAMGUI.py:2226 flatcamGUI/FlatCAMGUI.py:2263 -#: flatcamGUI/FlatCAMGUI.py:2736 flatcamGUI/FlatCAMGUI.py:2779 +#: flatcamGUI/MainGUI.py:1033 flatcamGUI/MainGUI.py:1076 +#: flatcamGUI/MainGUI.py:2226 flatcamGUI/MainGUI.py:2263 +#: flatcamGUI/MainGUI.py:2736 flatcamGUI/MainGUI.py:2779 #: flatcamGUI/ObjectUI.py:109 msgid "Transformations" msgstr "Trasformazioni" -#: flatcamGUI/FlatCAMGUI.py:1036 +#: flatcamGUI/MainGUI.py:1036 msgid "Move Objects " msgstr "Sposta Oggetti " -#: flatcamGUI/FlatCAMGUI.py:1044 flatcamGUI/FlatCAMGUI.py:2139 -#: flatcamGUI/FlatCAMGUI.py:2748 +#: flatcamGUI/MainGUI.py:1044 flatcamGUI/MainGUI.py:2139 +#: flatcamGUI/MainGUI.py:2748 msgid "Add Pad" msgstr "Aggiungi Pad" -#: flatcamGUI/FlatCAMGUI.py:1048 flatcamGUI/FlatCAMGUI.py:2140 -#: flatcamGUI/FlatCAMGUI.py:2752 +#: flatcamGUI/MainGUI.py:1048 flatcamGUI/MainGUI.py:2140 +#: flatcamGUI/MainGUI.py:2752 msgid "Add Track" msgstr "Aggiungi Traccia" -#: flatcamGUI/FlatCAMGUI.py:1050 flatcamGUI/FlatCAMGUI.py:2139 -#: flatcamGUI/FlatCAMGUI.py:2754 +#: flatcamGUI/MainGUI.py:1050 flatcamGUI/MainGUI.py:2139 +#: flatcamGUI/MainGUI.py:2754 msgid "Add Region" msgstr "Aggiungi Regione" -#: flatcamGUI/FlatCAMGUI.py:1052 flatcamGUI/FlatCAMGUI.py:2245 -#: flatcamGUI/FlatCAMGUI.py:2756 +#: flatcamGUI/MainGUI.py:1052 flatcamGUI/MainGUI.py:2245 +#: flatcamGUI/MainGUI.py:2756 msgid "Poligonize" msgstr "Poligonizza" -#: flatcamGUI/FlatCAMGUI.py:1055 flatcamGUI/FlatCAMGUI.py:2247 -#: flatcamGUI/FlatCAMGUI.py:2759 +#: flatcamGUI/MainGUI.py:1055 flatcamGUI/MainGUI.py:2247 +#: flatcamGUI/MainGUI.py:2759 msgid "SemiDisc" msgstr "SemiDisco" -#: flatcamGUI/FlatCAMGUI.py:1057 flatcamGUI/FlatCAMGUI.py:2249 -#: flatcamGUI/FlatCAMGUI.py:2761 +#: flatcamGUI/MainGUI.py:1057 flatcamGUI/MainGUI.py:2249 +#: flatcamGUI/MainGUI.py:2761 msgid "Disc" msgstr "Disco" -#: flatcamGUI/FlatCAMGUI.py:1065 flatcamGUI/FlatCAMGUI.py:2257 -#: flatcamGUI/FlatCAMGUI.py:2769 +#: flatcamGUI/MainGUI.py:1065 flatcamGUI/MainGUI.py:2257 +#: flatcamGUI/MainGUI.py:2769 msgid "Mark Area" msgstr "Marchia Area" -#: flatcamGUI/FlatCAMGUI.py:1079 flatcamGUI/FlatCAMGUI.py:2139 -#: flatcamGUI/FlatCAMGUI.py:2230 flatcamGUI/FlatCAMGUI.py:2293 -#: flatcamGUI/FlatCAMGUI.py:2782 flatcamTools/ToolMove.py:27 +#: flatcamGUI/MainGUI.py:1079 flatcamGUI/MainGUI.py:2139 +#: flatcamGUI/MainGUI.py:2230 flatcamGUI/MainGUI.py:2293 +#: flatcamGUI/MainGUI.py:2782 flatcamTools/ToolMove.py:27 msgid "Move" msgstr "Sposta" -#: flatcamGUI/FlatCAMGUI.py:1087 flatcamGUI/FlatCAMGUI.py:2791 +#: flatcamGUI/MainGUI.py:1087 flatcamGUI/MainGUI.py:2791 msgid "Snap to grid" msgstr "Aggancia alla griglia" -#: flatcamGUI/FlatCAMGUI.py:1090 flatcamGUI/FlatCAMGUI.py:2794 +#: flatcamGUI/MainGUI.py:1090 flatcamGUI/MainGUI.py:2794 msgid "Grid X snapping distance" msgstr "Distanza aggancio gliglia X" -#: flatcamGUI/FlatCAMGUI.py:1095 flatcamGUI/FlatCAMGUI.py:2799 +#: flatcamGUI/MainGUI.py:1095 flatcamGUI/MainGUI.py:2799 msgid "Grid Y snapping distance" msgstr "Distanza aggancio gliglia Y" -#: flatcamGUI/FlatCAMGUI.py:1101 flatcamGUI/FlatCAMGUI.py:2805 +#: flatcamGUI/MainGUI.py:1101 flatcamGUI/MainGUI.py:2805 msgid "" "When active, value on Grid_X\n" "is copied to the Grid_Y value." @@ -6266,65 +6266,65 @@ msgstr "" "Se attivo, valore su Grid_X\n" "sarà copiato nel valore Grid_Y." -#: flatcamGUI/FlatCAMGUI.py:1108 flatcamGUI/FlatCAMGUI.py:2812 +#: flatcamGUI/MainGUI.py:1108 flatcamGUI/MainGUI.py:2812 msgid "Snap to corner" msgstr "Aggancia all'angolo" -#: flatcamGUI/FlatCAMGUI.py:1112 flatcamGUI/FlatCAMGUI.py:2816 +#: flatcamGUI/MainGUI.py:1112 flatcamGUI/MainGUI.py:2816 #: flatcamGUI/preferences/general/GeneralAPPSetGroupUI.py:78 msgid "Max. magnet distance" msgstr "Massima distanza magnete" -#: flatcamGUI/FlatCAMGUI.py:1149 +#: flatcamGUI/MainGUI.py:1149 msgid "Selected" msgstr "Selezionato" -#: flatcamGUI/FlatCAMGUI.py:1177 flatcamGUI/FlatCAMGUI.py:1185 +#: flatcamGUI/MainGUI.py:1177 flatcamGUI/MainGUI.py:1185 msgid "Plot Area" msgstr "Disegna Area" -#: flatcamGUI/FlatCAMGUI.py:1212 +#: flatcamGUI/MainGUI.py:1212 msgid "General" msgstr "Generale" -#: flatcamGUI/FlatCAMGUI.py:1227 flatcamTools/ToolCopperThieving.py:74 +#: flatcamGUI/MainGUI.py:1227 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:1237 flatcamTools/ToolDblSided.py:92 +#: flatcamGUI/MainGUI.py:1237 flatcamTools/ToolDblSided.py:92 msgid "EXCELLON" msgstr "EXCELLON" -#: flatcamGUI/FlatCAMGUI.py:1247 flatcamTools/ToolDblSided.py:120 +#: flatcamGUI/MainGUI.py:1247 flatcamTools/ToolDblSided.py:120 msgid "GEOMETRY" msgstr "GEOMETRIA" -#: flatcamGUI/FlatCAMGUI.py:1257 +#: flatcamGUI/MainGUI.py:1257 msgid "CNC-JOB" msgstr "CNC-JOB" -#: flatcamGUI/FlatCAMGUI.py:1266 flatcamGUI/ObjectUI.py:563 +#: flatcamGUI/MainGUI.py:1266 flatcamGUI/ObjectUI.py:563 #: flatcamGUI/ObjectUI.py:2052 msgid "TOOLS" msgstr "UTENSILI" -#: flatcamGUI/FlatCAMGUI.py:1275 +#: flatcamGUI/MainGUI.py:1275 msgid "TOOLS 2" msgstr "UTENSILI 2" -#: flatcamGUI/FlatCAMGUI.py:1285 +#: flatcamGUI/MainGUI.py:1285 msgid "UTILITIES" msgstr "UTILITA'" -#: flatcamGUI/FlatCAMGUI.py:1302 +#: flatcamGUI/MainGUI.py:1302 #: flatcamGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:192 msgid "Restore Defaults" msgstr "Ripristina Defaults" -#: flatcamGUI/FlatCAMGUI.py:1305 +#: flatcamGUI/MainGUI.py:1305 msgid "" "Restore the entire set of default values\n" "to the initial values loaded after first launch." @@ -6332,19 +6332,19 @@ msgstr "" "Ripristina l'intero set di valori predefiniti\n" "ai valori iniziali caricati dopo il primo avvio." -#: flatcamGUI/FlatCAMGUI.py:1310 +#: flatcamGUI/MainGUI.py:1310 msgid "Open Pref Folder" msgstr "Aprii cartella preferenze" -#: flatcamGUI/FlatCAMGUI.py:1313 +#: flatcamGUI/MainGUI.py:1313 msgid "Open the folder where FlatCAM save the preferences files." msgstr "Apri la cartella dove FlatCAM salva il file delle preferenze." -#: flatcamGUI/FlatCAMGUI.py:1317 flatcamGUI/FlatCAMGUI.py:2517 +#: flatcamGUI/MainGUI.py:1317 flatcamGUI/MainGUI.py:2517 msgid "Clear GUI Settings" msgstr "Pulisci impostazioni GUI" -#: flatcamGUI/FlatCAMGUI.py:1321 +#: flatcamGUI/MainGUI.py:1321 msgid "" "Clear the GUI settings for FlatCAM,\n" "such as: layout, gui state, style, hdpi support etc." @@ -6352,15 +6352,15 @@ msgstr "" "Cancella le impostazioni della GUI per FlatCAM,\n" "come: layout, stato gui, stile, supporto hdpi ecc." -#: flatcamGUI/FlatCAMGUI.py:1332 +#: flatcamGUI/MainGUI.py:1332 msgid "Apply" msgstr "Applica" -#: flatcamGUI/FlatCAMGUI.py:1335 +#: flatcamGUI/MainGUI.py:1335 msgid "Apply the current preferences without saving to a file." msgstr "Applica le impostazioni correnti senza salvarle su file." -#: flatcamGUI/FlatCAMGUI.py:1342 +#: flatcamGUI/MainGUI.py:1342 msgid "" "Save the current settings in the 'current_defaults' file\n" "which is the file storing the working default preferences." @@ -6368,214 +6368,214 @@ msgstr "" "Salva le impostazioni correnti nel file \"current_defaults\",\n" "file che memorizza le preferenze predefinite di lavoro." -#: flatcamGUI/FlatCAMGUI.py:1350 +#: flatcamGUI/MainGUI.py:1350 msgid "Will not save the changes and will close the preferences window." msgstr "Non salverà le modifiche e chiuderà la finestra delle preferenze." -#: flatcamGUI/FlatCAMGUI.py:1719 +#: flatcamGUI/MainGUI.py:1719 msgid "SHOW SHORTCUT LIST" msgstr "Lista tasti Shortcuts" -#: flatcamGUI/FlatCAMGUI.py:1719 +#: flatcamGUI/MainGUI.py:1719 msgid "Switch to Project Tab" msgstr "Vai alla Tab Progetto" -#: flatcamGUI/FlatCAMGUI.py:1719 +#: flatcamGUI/MainGUI.py:1719 msgid "Switch to Selected Tab" msgstr "Vai alla Tab Seleziona" -#: flatcamGUI/FlatCAMGUI.py:1720 +#: flatcamGUI/MainGUI.py:1720 msgid "Switch to Tool Tab" msgstr "Vai alla Tab Strumenti" -#: flatcamGUI/FlatCAMGUI.py:1721 +#: flatcamGUI/MainGUI.py:1721 msgid "New Gerber" msgstr "Nuovo Gerber" -#: flatcamGUI/FlatCAMGUI.py:1721 +#: flatcamGUI/MainGUI.py:1721 msgid "Edit Object (if selected)" msgstr "Modifica oggetto (se selezionato)" -#: flatcamGUI/FlatCAMGUI.py:1721 +#: flatcamGUI/MainGUI.py:1721 msgid "Jump to Coordinates" msgstr "Vai alle coordinate" -#: flatcamGUI/FlatCAMGUI.py:1722 +#: flatcamGUI/MainGUI.py:1722 msgid "New Excellon" msgstr "Nuovo Excellon" -#: flatcamGUI/FlatCAMGUI.py:1722 +#: flatcamGUI/MainGUI.py:1722 msgid "Move Obj" msgstr "Sposta Oggetto" -#: flatcamGUI/FlatCAMGUI.py:1722 +#: flatcamGUI/MainGUI.py:1722 msgid "New Geometry" msgstr "Nuova Geometria" -#: flatcamGUI/FlatCAMGUI.py:1722 +#: flatcamGUI/MainGUI.py:1722 msgid "Change Units" msgstr "Cambia unità" -#: flatcamGUI/FlatCAMGUI.py:1723 +#: flatcamGUI/MainGUI.py:1723 msgid "Open Properties Tool" msgstr "Apri Strumento Proprietà" -#: flatcamGUI/FlatCAMGUI.py:1723 +#: flatcamGUI/MainGUI.py:1723 msgid "Rotate by 90 degree CW" msgstr "Ruota di 90 gradi orari" -#: flatcamGUI/FlatCAMGUI.py:1723 +#: flatcamGUI/MainGUI.py:1723 msgid "Shell Toggle" msgstr "Attiva/Disattiva Shell" -#: flatcamGUI/FlatCAMGUI.py:1724 +#: flatcamGUI/MainGUI.py:1724 msgid "" "Add a Tool (when in Geometry Selected Tab or in Tools NCC or Tools Paint)" msgstr "" "Aggiungi utensile (in Tab Geometrie selezionate o in NCC o Strumento Paint)" -#: flatcamGUI/FlatCAMGUI.py:1725 +#: flatcamGUI/MainGUI.py:1725 msgid "Flip on X_axis" msgstr "Capovolsi sull'asse X" -#: flatcamGUI/FlatCAMGUI.py:1725 +#: flatcamGUI/MainGUI.py:1725 msgid "Flip on Y_axis" msgstr "Capovolsi sull'asse Y" -#: flatcamGUI/FlatCAMGUI.py:1728 +#: flatcamGUI/MainGUI.py:1728 msgid "Copy Obj" msgstr "Copia Oggetto" -#: flatcamGUI/FlatCAMGUI.py:1728 +#: flatcamGUI/MainGUI.py:1728 msgid "Open Tools Database" msgstr "Apri DataBase Utensili" -#: flatcamGUI/FlatCAMGUI.py:1729 +#: flatcamGUI/MainGUI.py:1729 msgid "Open Excellon File" msgstr "Apri file Excellon" -#: flatcamGUI/FlatCAMGUI.py:1729 +#: flatcamGUI/MainGUI.py:1729 msgid "Open Gerber File" msgstr "Apri file Gerber" -#: flatcamGUI/FlatCAMGUI.py:1729 +#: flatcamGUI/MainGUI.py:1729 msgid "New Project" msgstr "Nuovo Progetto" -#: flatcamGUI/FlatCAMGUI.py:1730 flatcamTools/ToolPDF.py:42 +#: flatcamGUI/MainGUI.py:1730 flatcamTools/ToolPDF.py:42 msgid "PDF Import Tool" msgstr "Strumento importazione PDF" -#: flatcamGUI/FlatCAMGUI.py:1730 +#: flatcamGUI/MainGUI.py:1730 msgid "Save Project" msgstr "Salva progetto" -#: flatcamGUI/FlatCAMGUI.py:1730 +#: flatcamGUI/MainGUI.py:1730 msgid "Toggle Plot Area" msgstr "Attiva/disattiva Area disegno" -#: flatcamGUI/FlatCAMGUI.py:1733 +#: flatcamGUI/MainGUI.py:1733 msgid "Copy Obj_Name" msgstr "Copia Nome Oggetto" -#: flatcamGUI/FlatCAMGUI.py:1734 +#: flatcamGUI/MainGUI.py:1734 msgid "Toggle Code Editor" msgstr "Attiva/Disattiva Editor codice" -#: flatcamGUI/FlatCAMGUI.py:1734 +#: flatcamGUI/MainGUI.py:1734 msgid "Toggle the axis" msgstr "Commuta assi" -#: flatcamGUI/FlatCAMGUI.py:1734 flatcamGUI/FlatCAMGUI.py:1933 -#: flatcamGUI/FlatCAMGUI.py:2020 flatcamGUI/FlatCAMGUI.py:2142 +#: flatcamGUI/MainGUI.py:1734 flatcamGUI/MainGUI.py:1933 +#: flatcamGUI/MainGUI.py:2020 flatcamGUI/MainGUI.py:2142 msgid "Distance Minimum Tool" msgstr "Strumento distanza minima" -#: flatcamGUI/FlatCAMGUI.py:1735 +#: flatcamGUI/MainGUI.py:1735 msgid "Open Preferences Window" msgstr "Apri finestra preferenze" -#: flatcamGUI/FlatCAMGUI.py:1736 +#: flatcamGUI/MainGUI.py:1736 msgid "Rotate by 90 degree CCW" msgstr "Ruota 90 gradi antiorari" -#: flatcamGUI/FlatCAMGUI.py:1736 +#: flatcamGUI/MainGUI.py:1736 msgid "Run a Script" msgstr "Esegui Script" -#: flatcamGUI/FlatCAMGUI.py:1736 +#: flatcamGUI/MainGUI.py:1736 msgid "Toggle the workspace" msgstr "(Dis)abilita area di lavoro" -#: flatcamGUI/FlatCAMGUI.py:1736 +#: flatcamGUI/MainGUI.py:1736 msgid "Skew on X axis" msgstr "Inclina sull'asse X" -#: flatcamGUI/FlatCAMGUI.py:1737 +#: flatcamGUI/MainGUI.py:1737 msgid "Skew on Y axis" msgstr "Inclina sull'asse Y" -#: flatcamGUI/FlatCAMGUI.py:1740 +#: flatcamGUI/MainGUI.py:1740 msgid "2-Sided PCB Tool" msgstr "Strumento PCB doppia faccia" -#: flatcamGUI/FlatCAMGUI.py:1740 +#: flatcamGUI/MainGUI.py:1740 msgid "Transformations Tool" msgstr "Strumento Trasformazioni" -#: flatcamGUI/FlatCAMGUI.py:1742 +#: flatcamGUI/MainGUI.py:1742 msgid "Solder Paste Dispensing Tool" msgstr "Strumento dispensa solder paste" -#: flatcamGUI/FlatCAMGUI.py:1743 +#: flatcamGUI/MainGUI.py:1743 msgid "Film PCB Tool" msgstr "Strumento Film PCB" -#: flatcamGUI/FlatCAMGUI.py:1743 +#: flatcamGUI/MainGUI.py:1743 msgid "Non-Copper Clearing Tool" msgstr "Strumento No Copper Clearing (No Rame)" -#: flatcamGUI/FlatCAMGUI.py:1744 +#: flatcamGUI/MainGUI.py:1744 msgid "Paint Area Tool" msgstr "Strumento disegna area" -#: flatcamGUI/FlatCAMGUI.py:1744 +#: flatcamGUI/MainGUI.py:1744 msgid "Rules Check Tool" msgstr "Strumento controllo regole" -#: flatcamGUI/FlatCAMGUI.py:1745 +#: flatcamGUI/MainGUI.py:1745 msgid "View File Source" msgstr "Vedi file sorgente" -#: flatcamGUI/FlatCAMGUI.py:1746 +#: flatcamGUI/MainGUI.py:1746 msgid "Cutout PCB Tool" msgstr "Strumento ritaglia PCB" -#: flatcamGUI/FlatCAMGUI.py:1746 +#: flatcamGUI/MainGUI.py:1746 msgid "Enable all Plots" msgstr "Abilita tutti i plot" -#: flatcamGUI/FlatCAMGUI.py:1746 +#: flatcamGUI/MainGUI.py:1746 msgid "Disable all Plots" msgstr "Disabilita tutti i plot" -#: flatcamGUI/FlatCAMGUI.py:1746 +#: flatcamGUI/MainGUI.py:1746 msgid "Disable Non-selected Plots" msgstr "Disabilita i plot non selezionati" -#: flatcamGUI/FlatCAMGUI.py:1747 +#: flatcamGUI/MainGUI.py:1747 msgid "Toggle Full Screen" msgstr "(Dis)abilita schermo intero" -#: flatcamGUI/FlatCAMGUI.py:1750 +#: flatcamGUI/MainGUI.py:1750 msgid "Abort current task (gracefully)" msgstr "Annulla l'azione corrente" -#: flatcamGUI/FlatCAMGUI.py:1753 +#: flatcamGUI/MainGUI.py:1753 msgid "Save Project As" msgstr "Salva Progetto con nome" -#: flatcamGUI/FlatCAMGUI.py:1754 +#: flatcamGUI/MainGUI.py:1754 msgid "" "Paste Special. Will convert a Windows path style to the one required in Tcl " "Shell" @@ -6583,249 +6583,249 @@ msgstr "" "Incolla speciale. Converte uno stile di percorso Windows in quello richiesto " "in Tcl Shell" -#: flatcamGUI/FlatCAMGUI.py:1757 +#: flatcamGUI/MainGUI.py:1757 msgid "Open Online Manual" msgstr "Apri manuale online" -#: flatcamGUI/FlatCAMGUI.py:1758 +#: flatcamGUI/MainGUI.py:1758 msgid "Open Online Tutorials" msgstr "Apri tutorial online" -#: flatcamGUI/FlatCAMGUI.py:1758 +#: flatcamGUI/MainGUI.py:1758 msgid "Refresh Plots" msgstr "Aggiorna plot" -#: flatcamGUI/FlatCAMGUI.py:1758 flatcamTools/ToolSolderPaste.py:509 +#: flatcamGUI/MainGUI.py:1758 flatcamTools/ToolSolderPaste.py:509 msgid "Delete Object" msgstr "Cancella oggetto" -#: flatcamGUI/FlatCAMGUI.py:1758 +#: flatcamGUI/MainGUI.py:1758 msgid "Alternate: Delete Tool" msgstr "Alternativo: strumento elimina" -#: flatcamGUI/FlatCAMGUI.py:1759 +#: flatcamGUI/MainGUI.py:1759 msgid "(left to Key_1)Toggle Notebook Area (Left Side)" msgstr "(da sinistra a Key_1) (Dis)attiva area blocco note (lato sinistro)" -#: flatcamGUI/FlatCAMGUI.py:1759 +#: flatcamGUI/MainGUI.py:1759 msgid "En(Dis)able Obj Plot" msgstr "(Dis)abilita il plot degli oggetti" -#: flatcamGUI/FlatCAMGUI.py:1760 +#: flatcamGUI/MainGUI.py:1760 msgid "Deselects all objects" msgstr "Deseleziona oggetti" -#: flatcamGUI/FlatCAMGUI.py:1774 +#: flatcamGUI/MainGUI.py:1774 msgid "Editor Shortcut list" msgstr "Lista shortcut dell'editor" -#: flatcamGUI/FlatCAMGUI.py:1928 +#: flatcamGUI/MainGUI.py:1928 msgid "GEOMETRY EDITOR" msgstr "EDITOR GEOMETRIE" -#: flatcamGUI/FlatCAMGUI.py:1928 +#: flatcamGUI/MainGUI.py:1928 msgid "Draw an Arc" msgstr "Disegna un arco" -#: flatcamGUI/FlatCAMGUI.py:1928 +#: flatcamGUI/MainGUI.py:1928 msgid "Copy Geo Item" msgstr "Copia elemento Geometria" -#: flatcamGUI/FlatCAMGUI.py:1929 +#: flatcamGUI/MainGUI.py:1929 msgid "Within Add Arc will toogle the ARC direction: CW or CCW" msgstr "" "All'interno di Aggiungi arco verrà visualizzata la direzione: oraria CW o " "antioraria CCW" -#: flatcamGUI/FlatCAMGUI.py:1929 +#: flatcamGUI/MainGUI.py:1929 msgid "Polygon Intersection Tool" msgstr "Strumento intersezione poligoni" -#: flatcamGUI/FlatCAMGUI.py:1930 +#: flatcamGUI/MainGUI.py:1930 msgid "Geo Paint Tool" msgstr "Strumento disegno geometria" -#: flatcamGUI/FlatCAMGUI.py:1930 flatcamGUI/FlatCAMGUI.py:2019 -#: flatcamGUI/FlatCAMGUI.py:2139 +#: flatcamGUI/MainGUI.py:1930 flatcamGUI/MainGUI.py:2019 +#: flatcamGUI/MainGUI.py:2139 msgid "Jump to Location (x, y)" msgstr "Vai alla posizione (x, y)" -#: flatcamGUI/FlatCAMGUI.py:1930 +#: flatcamGUI/MainGUI.py:1930 msgid "Toggle Corner Snap" msgstr "(Dis)abilita l'aggancio agli angoli" -#: flatcamGUI/FlatCAMGUI.py:1930 +#: flatcamGUI/MainGUI.py:1930 msgid "Move Geo Item" msgstr "Sposta elemento Geometria" -#: flatcamGUI/FlatCAMGUI.py:1931 +#: flatcamGUI/MainGUI.py:1931 msgid "Within Add Arc will cycle through the ARC modes" msgstr "All'interno di Aggiungi arco verranno scorse le modalità degli archi" -#: flatcamGUI/FlatCAMGUI.py:1931 +#: flatcamGUI/MainGUI.py:1931 msgid "Draw a Polygon" msgstr "Disegna un poligono" -#: flatcamGUI/FlatCAMGUI.py:1931 +#: flatcamGUI/MainGUI.py:1931 msgid "Draw a Circle" msgstr "Disegna un cerchio" -#: flatcamGUI/FlatCAMGUI.py:1932 +#: flatcamGUI/MainGUI.py:1932 msgid "Draw a Path" msgstr "Disegna un persorso" -#: flatcamGUI/FlatCAMGUI.py:1932 +#: flatcamGUI/MainGUI.py:1932 msgid "Draw Rectangle" msgstr "Disegna un rettangolo" -#: flatcamGUI/FlatCAMGUI.py:1932 +#: flatcamGUI/MainGUI.py:1932 msgid "Polygon Subtraction Tool" msgstr "Strumento sottrazione poligono" -#: flatcamGUI/FlatCAMGUI.py:1932 +#: flatcamGUI/MainGUI.py:1932 msgid "Add Text Tool" msgstr "Strumento aggiungi testo" -#: flatcamGUI/FlatCAMGUI.py:1933 +#: flatcamGUI/MainGUI.py:1933 msgid "Polygon Union Tool" msgstr "Strumento unisci poligono" -#: flatcamGUI/FlatCAMGUI.py:1933 +#: flatcamGUI/MainGUI.py:1933 msgid "Flip shape on X axis" msgstr "Ribalta forme sull'asse X" -#: flatcamGUI/FlatCAMGUI.py:1933 +#: flatcamGUI/MainGUI.py:1933 msgid "Flip shape on Y axis" msgstr "Ribalta forme sull'asse Y" -#: flatcamGUI/FlatCAMGUI.py:1934 +#: flatcamGUI/MainGUI.py:1934 msgid "Skew shape on X axis" msgstr "Inclina forme sull'asse X" -#: flatcamGUI/FlatCAMGUI.py:1934 +#: flatcamGUI/MainGUI.py:1934 msgid "Skew shape on Y axis" msgstr "Inclina forme sull'asse Y" -#: flatcamGUI/FlatCAMGUI.py:1934 +#: flatcamGUI/MainGUI.py:1934 msgid "Editor Transformation Tool" msgstr "Strumento Edito trasformazione" -#: flatcamGUI/FlatCAMGUI.py:1935 +#: flatcamGUI/MainGUI.py:1935 msgid "Offset shape on X axis" msgstr "Applica offset alle forme sull'asse X" -#: flatcamGUI/FlatCAMGUI.py:1935 +#: flatcamGUI/MainGUI.py:1935 msgid "Offset shape on Y axis" msgstr "Applica offset alle forme sull'asse Y" -#: flatcamGUI/FlatCAMGUI.py:1936 flatcamGUI/FlatCAMGUI.py:2022 -#: flatcamGUI/FlatCAMGUI.py:2144 +#: flatcamGUI/MainGUI.py:1936 flatcamGUI/MainGUI.py:2022 +#: flatcamGUI/MainGUI.py:2144 msgid "Save Object and Exit Editor" msgstr "Salva oggetto ed esci dall'Editor" -#: flatcamGUI/FlatCAMGUI.py:1936 +#: flatcamGUI/MainGUI.py:1936 msgid "Polygon Cut Tool" msgstr "Strumento taglia poligono" -#: flatcamGUI/FlatCAMGUI.py:1937 +#: flatcamGUI/MainGUI.py:1937 msgid "Rotate Geometry" msgstr "Ruota Geometria" -#: flatcamGUI/FlatCAMGUI.py:1937 +#: flatcamGUI/MainGUI.py:1937 msgid "Finish drawing for certain tools" msgstr "Completa disegno per alcuni utensili" -#: flatcamGUI/FlatCAMGUI.py:1937 flatcamGUI/FlatCAMGUI.py:2022 -#: flatcamGUI/FlatCAMGUI.py:2142 +#: flatcamGUI/MainGUI.py:1937 flatcamGUI/MainGUI.py:2022 +#: flatcamGUI/MainGUI.py:2142 msgid "Abort and return to Select" msgstr "Annulla e torna a Seleziona" -#: flatcamGUI/FlatCAMGUI.py:1938 flatcamGUI/FlatCAMGUI.py:2734 +#: flatcamGUI/MainGUI.py:1938 flatcamGUI/MainGUI.py:2734 msgid "Delete Shape" msgstr "Cancella forma" -#: flatcamGUI/FlatCAMGUI.py:2018 +#: flatcamGUI/MainGUI.py:2018 msgid "EXCELLON EDITOR" msgstr "EDITOR EXCELLON" -#: flatcamGUI/FlatCAMGUI.py:2018 +#: flatcamGUI/MainGUI.py:2018 msgid "Copy Drill(s)" msgstr "Copia foro(i)" -#: flatcamGUI/FlatCAMGUI.py:2018 flatcamGUI/FlatCAMGUI.py:2268 +#: flatcamGUI/MainGUI.py:2018 flatcamGUI/MainGUI.py:2268 msgid "Add Drill" msgstr "Aggiungi foro" -#: flatcamGUI/FlatCAMGUI.py:2019 +#: flatcamGUI/MainGUI.py:2019 msgid "Move Drill(s)" msgstr "Sposta foro(i)" -#: flatcamGUI/FlatCAMGUI.py:2020 +#: flatcamGUI/MainGUI.py:2020 msgid "Add a new Tool" msgstr "Aggiungi un nuovo TOOL" -#: flatcamGUI/FlatCAMGUI.py:2021 +#: flatcamGUI/MainGUI.py:2021 msgid "Delete Drill(s)" msgstr "Cancella foro(i)" -#: flatcamGUI/FlatCAMGUI.py:2021 +#: flatcamGUI/MainGUI.py:2021 msgid "Alternate: Delete Tool(s)" msgstr "Alternativo: strumenti di cancellazione" -#: flatcamGUI/FlatCAMGUI.py:2138 +#: flatcamGUI/MainGUI.py:2138 msgid "GERBER EDITOR" msgstr "EDITOR GERBER" -#: flatcamGUI/FlatCAMGUI.py:2138 +#: flatcamGUI/MainGUI.py:2138 msgid "Add Disc" msgstr "Aggiungi disco" -#: flatcamGUI/FlatCAMGUI.py:2138 +#: flatcamGUI/MainGUI.py:2138 msgid "Add SemiDisc" msgstr "Aggiungi semidisco" -#: flatcamGUI/FlatCAMGUI.py:2140 +#: flatcamGUI/MainGUI.py:2140 msgid "Within Track & Region Tools will cycle in REVERSE the bend modes" msgstr "" "All'interno dello strumento Tracce & Regioni le modalità piegature " "scorreranno all'indietro" -#: flatcamGUI/FlatCAMGUI.py:2141 +#: flatcamGUI/MainGUI.py:2141 msgid "Within Track & Region Tools will cycle FORWARD the bend modes" msgstr "" "All'interno dello strumento Tracce & Regioni le modalità piegature " "scorreranno in avanti" -#: flatcamGUI/FlatCAMGUI.py:2142 +#: flatcamGUI/MainGUI.py:2142 msgid "Alternate: Delete Apertures" msgstr "Alternativo: cancella aperture" -#: flatcamGUI/FlatCAMGUI.py:2143 +#: flatcamGUI/MainGUI.py:2143 msgid "Eraser Tool" msgstr "Strumento cancella" -#: flatcamGUI/FlatCAMGUI.py:2144 +#: flatcamGUI/MainGUI.py:2144 #: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:220 msgid "Mark Area Tool" msgstr "Strumento marca area" -#: flatcamGUI/FlatCAMGUI.py:2144 +#: flatcamGUI/MainGUI.py:2144 msgid "Poligonize Tool" msgstr "Strumento Poligonizza" -#: flatcamGUI/FlatCAMGUI.py:2144 +#: flatcamGUI/MainGUI.py:2144 msgid "Transformation Tool" msgstr "Strumento trasformazione" -#: flatcamGUI/FlatCAMGUI.py:2161 +#: flatcamGUI/MainGUI.py:2161 msgid "Toggle Visibility" msgstr "(Dis)abilita visibilità" -#: flatcamGUI/FlatCAMGUI.py:2167 +#: flatcamGUI/MainGUI.py:2167 msgid "New" msgstr "Nuovo" -#: flatcamGUI/FlatCAMGUI.py:2169 flatcamGUI/ObjectUI.py:450 +#: flatcamGUI/MainGUI.py:2169 flatcamGUI/ObjectUI.py:450 #: flatcamObjects/FlatCAMGerber.py:239 flatcamObjects/FlatCAMGerber.py:327 #: flatcamTools/ToolCalibration.py:631 flatcamTools/ToolCalibration.py:648 #: flatcamTools/ToolCalibration.py:815 flatcamTools/ToolCopperThieving.py:144 @@ -6842,7 +6842,7 @@ msgstr "Nuovo" msgid "Geometry" msgstr "Geometria" -#: flatcamGUI/FlatCAMGUI.py:2173 +#: flatcamGUI/MainGUI.py:2173 #: flatcamGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:99 #: flatcamTools/ToolAlignObjects.py:74 flatcamTools/ToolAlignObjects.py:110 #: flatcamTools/ToolCalibration.py:197 flatcamTools/ToolCalibration.py:631 @@ -6857,76 +6857,76 @@ msgstr "Geometria" msgid "Excellon" msgstr "Excellon" -#: flatcamGUI/FlatCAMGUI.py:2180 +#: flatcamGUI/MainGUI.py:2180 msgid "Grids" msgstr "Griglie" -#: flatcamGUI/FlatCAMGUI.py:2187 +#: flatcamGUI/MainGUI.py:2187 msgid "Clear Plot" msgstr "Svuota Plot" -#: flatcamGUI/FlatCAMGUI.py:2189 +#: flatcamGUI/MainGUI.py:2189 msgid "Replot" msgstr "Ridisegna" -#: flatcamGUI/FlatCAMGUI.py:2193 +#: flatcamGUI/MainGUI.py:2193 msgid "Geo Editor" msgstr "Edito geometria" -#: flatcamGUI/FlatCAMGUI.py:2195 +#: flatcamGUI/MainGUI.py:2195 msgid "Path" msgstr "Percorso" -#: flatcamGUI/FlatCAMGUI.py:2197 +#: flatcamGUI/MainGUI.py:2197 msgid "Rectangle" msgstr "Rettangolo" -#: flatcamGUI/FlatCAMGUI.py:2200 +#: flatcamGUI/MainGUI.py:2200 msgid "Circle" msgstr "Cerchio" -#: flatcamGUI/FlatCAMGUI.py:2204 +#: flatcamGUI/MainGUI.py:2204 msgid "Arc" msgstr "Arco" -#: flatcamGUI/FlatCAMGUI.py:2218 +#: flatcamGUI/MainGUI.py:2218 msgid "Union" msgstr "Unione" -#: flatcamGUI/FlatCAMGUI.py:2220 +#: flatcamGUI/MainGUI.py:2220 msgid "Intersection" msgstr "Intersezione" -#: flatcamGUI/FlatCAMGUI.py:2222 +#: flatcamGUI/MainGUI.py:2222 msgid "Subtraction" msgstr "Sottrazione" -#: flatcamGUI/FlatCAMGUI.py:2224 flatcamGUI/ObjectUI.py:2141 +#: flatcamGUI/MainGUI.py:2224 flatcamGUI/ObjectUI.py:2141 #: flatcamGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:56 msgid "Cut" msgstr "Taglia" -#: flatcamGUI/FlatCAMGUI.py:2235 +#: flatcamGUI/MainGUI.py:2235 msgid "Pad" msgstr "Pad" -#: flatcamGUI/FlatCAMGUI.py:2237 +#: flatcamGUI/MainGUI.py:2237 msgid "Pad Array" msgstr "Matrice di Pad" -#: flatcamGUI/FlatCAMGUI.py:2241 +#: flatcamGUI/MainGUI.py:2241 msgid "Track" msgstr "Traccia" -#: flatcamGUI/FlatCAMGUI.py:2243 +#: flatcamGUI/MainGUI.py:2243 msgid "Region" msgstr "RegioneRegione" -#: flatcamGUI/FlatCAMGUI.py:2266 +#: flatcamGUI/MainGUI.py:2266 msgid "Exc Editor" msgstr "Editor Excellon" -#: flatcamGUI/FlatCAMGUI.py:2311 +#: flatcamGUI/MainGUI.py:2311 msgid "" "Relative measurement.\n" "Reference is last click position" @@ -6934,7 +6934,7 @@ msgstr "" "Misure relative.\n" "Il riferimento è l'ultima posizione cliccata" -#: flatcamGUI/FlatCAMGUI.py:2317 +#: flatcamGUI/MainGUI.py:2317 msgid "" "Absolute measurement.\n" "Reference is (X=0, Y= 0) position" @@ -6942,35 +6942,35 @@ msgstr "" "Misure relative.\n" "Il riferimento è la posizione (X=0, Y=0)" -#: flatcamGUI/FlatCAMGUI.py:2419 +#: flatcamGUI/MainGUI.py:2419 msgid "Lock Toolbars" msgstr "Strumenti di blocco" -#: flatcamGUI/FlatCAMGUI.py:2505 +#: flatcamGUI/MainGUI.py:2505 msgid "FlatCAM Preferences Folder opened." msgstr "Cartella preferenze FlatCAM aperta." -#: flatcamGUI/FlatCAMGUI.py:2516 +#: flatcamGUI/MainGUI.py:2516 msgid "Are you sure you want to delete the GUI Settings? \n" msgstr "Sicuro di voler cancellare le impostazioni GUI?\n" -#: flatcamGUI/FlatCAMGUI.py:2624 +#: flatcamGUI/MainGUI.py:2624 msgid "&Cutout Tool" msgstr "Strumento Ritaglia" -#: flatcamGUI/FlatCAMGUI.py:2694 +#: flatcamGUI/MainGUI.py:2694 msgid "Select 'Esc'" msgstr "Seleziona 'Esc'" -#: flatcamGUI/FlatCAMGUI.py:2732 +#: flatcamGUI/MainGUI.py:2732 msgid "Copy Objects" msgstr "Copia oggetti" -#: flatcamGUI/FlatCAMGUI.py:2740 +#: flatcamGUI/MainGUI.py:2740 msgid "Move Objects" msgstr "Sposta oggetti" -#: flatcamGUI/FlatCAMGUI.py:3363 +#: flatcamGUI/MainGUI.py:3363 msgid "" "Please first select a geometry item to be cutted\n" "then select the geometry item that will be cutted\n" @@ -6982,12 +6982,12 @@ msgstr "" "dal primo elemento. Alla fine premere il tasto ~ X ~ o\n" "il pulsante della barra degli strumenti." -#: flatcamGUI/FlatCAMGUI.py:3370 flatcamGUI/FlatCAMGUI.py:3532 -#: flatcamGUI/FlatCAMGUI.py:3577 flatcamGUI/FlatCAMGUI.py:3597 +#: flatcamGUI/MainGUI.py:3370 flatcamGUI/MainGUI.py:3532 +#: flatcamGUI/MainGUI.py:3577 flatcamGUI/MainGUI.py:3597 msgid "Warning" msgstr "Avvertenza" -#: flatcamGUI/FlatCAMGUI.py:3527 +#: flatcamGUI/MainGUI.py:3527 msgid "" "Please select geometry items \n" "on which to perform Intersection Tool." @@ -6995,7 +6995,7 @@ msgstr "" "Seleziona gli elementi della geometria\n" "su cui eseguire lo strumento Intersezione." -#: flatcamGUI/FlatCAMGUI.py:3572 +#: flatcamGUI/MainGUI.py:3572 msgid "" "Please select geometry items \n" "on which to perform Substraction Tool." @@ -7003,7 +7003,7 @@ msgstr "" "Seleziona gli elementi della geometria\n" "su cui eseguire lo strumento Sottrazione." -#: flatcamGUI/FlatCAMGUI.py:3592 +#: flatcamGUI/MainGUI.py:3592 msgid "" "Please select geometry items \n" "on which to perform union." @@ -7011,52 +7011,52 @@ msgstr "" "Seleziona gli elementi della geometria\n" "su cui eseguire lo strumento Unione." -#: flatcamGUI/FlatCAMGUI.py:3675 flatcamGUI/FlatCAMGUI.py:3890 +#: flatcamGUI/MainGUI.py:3675 flatcamGUI/MainGUI.py:3890 msgid "Cancelled. Nothing selected to delete." msgstr "Cancellato. Nessuna seleziona da cancellare." -#: flatcamGUI/FlatCAMGUI.py:3759 flatcamGUI/FlatCAMGUI.py:4006 +#: flatcamGUI/MainGUI.py:3759 flatcamGUI/MainGUI.py:4006 msgid "Cancelled. Nothing selected to copy." msgstr "Cancellato. Nessuna seleziona da copiare." -#: flatcamGUI/FlatCAMGUI.py:3805 flatcamGUI/FlatCAMGUI.py:4035 +#: flatcamGUI/MainGUI.py:3805 flatcamGUI/MainGUI.py:4035 msgid "Cancelled. Nothing selected to move." msgstr "Cancellato. Nessuna seleziona da spostare." -#: flatcamGUI/FlatCAMGUI.py:4061 +#: flatcamGUI/MainGUI.py:4061 msgid "New Tool ..." msgstr "Nuovo utensile ..." -#: flatcamGUI/FlatCAMGUI.py:4062 flatcamTools/ToolNCC.py:924 +#: flatcamGUI/MainGUI.py:4062 flatcamTools/ToolNCC.py:924 #: flatcamTools/ToolPaint.py:850 flatcamTools/ToolSolderPaste.py:560 msgid "Enter a Tool Diameter" msgstr "Diametro utensile" -#: flatcamGUI/FlatCAMGUI.py:4074 +#: flatcamGUI/MainGUI.py:4074 msgid "Adding Tool cancelled ..." msgstr "Aggiunta utensile annullata ..." -#: flatcamGUI/FlatCAMGUI.py:4088 +#: flatcamGUI/MainGUI.py:4088 msgid "Distance Tool exit..." msgstr "Uscita dallo strumento Distanza..." -#: flatcamGUI/FlatCAMGUI.py:4300 flatcamGUI/FlatCAMGUI.py:4307 +#: flatcamGUI/MainGUI.py:4300 flatcamGUI/MainGUI.py:4307 msgid "Idle." msgstr "Inattivo." -#: flatcamGUI/FlatCAMGUI.py:4338 +#: flatcamGUI/MainGUI.py:4338 msgid "Application started ..." msgstr "Applicazione avviata ..." -#: flatcamGUI/FlatCAMGUI.py:4339 +#: flatcamGUI/MainGUI.py:4339 msgid "Hello!" msgstr "Ciao!" -#: flatcamGUI/FlatCAMGUI.py:4401 +#: flatcamGUI/MainGUI.py:4401 msgid "Open Project ..." msgstr "Apri progetto ..." -#: flatcamGUI/FlatCAMGUI.py:4427 +#: flatcamGUI/MainGUI.py:4427 msgid "Exit" msgstr "Esci" diff --git a/locale/pt_BR/LC_MESSAGES/strings.po b/locale/pt_BR/LC_MESSAGES/strings.po index 60b86976..fb88e480 100644 --- a/locale/pt_BR/LC_MESSAGES/strings.po +++ b/locale/pt_BR/LC_MESSAGES/strings.po @@ -68,8 +68,8 @@ msgstr "" #: FlatCAMDB.py:709 FlatCAMDB.py:2125 FlatCAMDB.py:2171 #: flatcamEditors/FlatCAMExcEditor.py:1023 #: flatcamEditors/FlatCAMExcEditor.py:1091 -#: flatcamEditors/FlatCAMTextEditor.py:223 flatcamGUI/FlatCAMGUI.py:3443 -#: flatcamGUI/FlatCAMGUI.py:3659 flatcamGUI/FlatCAMGUI.py:3874 +#: flatcamEditors/FlatCAMTextEditor.py:223 flatcamGUI/MainGUI.py:3443 +#: flatcamGUI/MainGUI.py:3659 flatcamGUI/MainGUI.py:3874 #: flatcamObjects/ObjectCollection.py:126 flatcamTools/ToolFilm.py:754 #: flatcamTools/ToolFilm.py:900 flatcamTools/ToolImage.py:247 #: flatcamTools/ToolMove.py:269 flatcamTools/ToolPcbWizard.py:301 @@ -120,20 +120,20 @@ msgstr "Editor está ativado ..." msgid "Do you want to save the edited object?" msgstr "Você quer salvar o objeto editado?" -#: FlatCAMApp.py:2226 flatcamGUI/FlatCAMGUI.py:2288 +#: FlatCAMApp.py:2226 flatcamGUI/MainGUI.py:2288 msgid "Close Editor" msgstr "Fechar Editor" #: FlatCAMApp.py:2229 FlatCAMApp.py:3518 FlatCAMApp.py:6085 FlatCAMApp.py:7345 #: FlatCAMTranslation.py:109 FlatCAMTranslation.py:207 -#: flatcamGUI/FlatCAMGUI.py:2519 +#: flatcamGUI/MainGUI.py:2519 #: flatcamGUI/preferences/PreferencesUIManager.py:1122 msgid "Yes" msgstr "Sim" #: FlatCAMApp.py:2230 FlatCAMApp.py:3519 FlatCAMApp.py:6086 FlatCAMApp.py:7346 #: FlatCAMTranslation.py:110 FlatCAMTranslation.py:208 -#: flatcamGUI/FlatCAMGUI.py:2520 +#: flatcamGUI/MainGUI.py:2520 #: flatcamGUI/preferences/PreferencesUIManager.py:1123 #: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:164 #: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:150 @@ -143,7 +143,7 @@ msgstr "Não" #: FlatCAMApp.py:2231 FlatCAMApp.py:3520 FlatCAMApp.py:4478 FlatCAMApp.py:5103 #: FlatCAMApp.py:7347 FlatCAMDB.py:128 FlatCAMDB.py:1689 -#: flatcamGUI/FlatCAMGUI.py:1347 +#: flatcamGUI/MainGUI.py:1347 msgid "Cancel" msgstr "Cancelar" @@ -275,7 +275,7 @@ msgstr "criado / selecionado" msgid "Plotting" msgstr "Plotando" -#: FlatCAMApp.py:3090 flatcamGUI/FlatCAMGUI.py:545 +#: FlatCAMApp.py:3090 flatcamGUI/MainGUI.py:545 msgid "About FlatCAM" msgstr "Sobre FlatCAM" @@ -415,7 +415,7 @@ msgstr "Tradutor" msgid "Corrections" msgstr "Correções" -#: FlatCAMApp.py:3455 FlatCAMApp.py:3464 flatcamGUI/FlatCAMGUI.py:527 +#: FlatCAMApp.py:3455 FlatCAMApp.py:3464 flatcamGUI/MainGUI.py:527 msgid "Bookmarks Manager" msgstr "Gerenciados de Favoritos" @@ -443,7 +443,7 @@ msgstr "" msgid "Alternative website" msgstr "Site alternativo" -#: FlatCAMApp.py:3508 flatcamGUI/FlatCAMGUI.py:4267 +#: FlatCAMApp.py:3508 flatcamGUI/MainGUI.py:4267 msgid "Application is saving the project. Please wait ..." msgstr "O aplicativo está salvando o projeto. Por favor, espere ..." @@ -653,8 +653,8 @@ msgstr "Coordenadas erradas. Insira as coordenadas no formato X,Y" #: flatcamEditors/FlatCAMGrbEditor.py:1490 #: flatcamEditors/FlatCAMGrbEditor.py:1759 #: flatcamEditors/FlatCAMGrbEditor.py:4622 -#: flatcamEditors/FlatCAMGrbEditor.py:4637 flatcamGUI/FlatCAMGUI.py:3424 -#: flatcamGUI/FlatCAMGUI.py:3436 flatcamTools/ToolAlignObjects.py:393 +#: flatcamEditors/FlatCAMGrbEditor.py:4637 flatcamGUI/MainGUI.py:3424 +#: flatcamGUI/MainGUI.py:3436 flatcamTools/ToolAlignObjects.py:393 #: flatcamTools/ToolAlignObjects.py:415 msgid "Done." msgstr "Pronto." @@ -804,12 +804,12 @@ msgstr "Nenhum objeto selecionado para Inclinar no eixo Y." msgid "Skew on Y axis done." msgstr "Inclinação no eixo Y concluída." -#: FlatCAMApp.py:6497 FlatCAMApp.py:6544 flatcamGUI/FlatCAMGUI.py:503 -#: flatcamGUI/FlatCAMGUI.py:1728 +#: FlatCAMApp.py:6497 FlatCAMApp.py:6544 flatcamGUI/MainGUI.py:503 +#: flatcamGUI/MainGUI.py:1728 msgid "Select All" msgstr "Selecionar Todos" -#: FlatCAMApp.py:6501 FlatCAMApp.py:6548 flatcamGUI/FlatCAMGUI.py:505 +#: FlatCAMApp.py:6501 FlatCAMApp.py:6548 flatcamGUI/MainGUI.py:505 msgid "Deselect All" msgstr "Desmarcar todos" @@ -821,7 +821,7 @@ msgstr "Todos os objetos estão selecionados." msgid "Objects selection is cleared." msgstr "A seleção de objetos é limpa." -#: FlatCAMApp.py:6594 flatcamGUI/FlatCAMGUI.py:1721 +#: FlatCAMApp.py:6594 flatcamGUI/MainGUI.py:1721 msgid "Grid On/Off" msgstr "Liga/Desliga a Grade" @@ -837,9 +837,9 @@ msgid "Add" msgstr "Adicionar" #: FlatCAMApp.py:6608 flatcamEditors/FlatCAMGrbEditor.py:2588 -#: flatcamEditors/FlatCAMGrbEditor.py:2736 flatcamGUI/FlatCAMGUI.py:751 -#: flatcamGUI/FlatCAMGUI.py:1074 flatcamGUI/FlatCAMGUI.py:2141 -#: flatcamGUI/FlatCAMGUI.py:2284 flatcamGUI/FlatCAMGUI.py:2777 +#: flatcamEditors/FlatCAMGrbEditor.py:2736 flatcamGUI/MainGUI.py:751 +#: flatcamGUI/MainGUI.py:1074 flatcamGUI/MainGUI.py:2141 +#: flatcamGUI/MainGUI.py:2284 flatcamGUI/MainGUI.py:2777 #: flatcamGUI/ObjectUI.py:1623 flatcamObjects/FlatCAMGeometry.py:505 #: flatcamTools/ToolNCC.py:316 flatcamTools/ToolNCC.py:637 #: flatcamTools/ToolPaint.py:299 flatcamTools/ToolPaint.py:682 @@ -925,8 +925,8 @@ msgstr "" msgid "New Project created" msgstr "Novo Projeto criado" -#: FlatCAMApp.py:7519 FlatCAMApp.py:7523 flatcamGUI/FlatCAMGUI.py:836 -#: flatcamGUI/FlatCAMGUI.py:2544 +#: FlatCAMApp.py:7519 FlatCAMApp.py:7523 flatcamGUI/MainGUI.py:836 +#: flatcamGUI/MainGUI.py:2544 msgid "Open Gerber" msgstr "Abrir Gerber" @@ -943,8 +943,8 @@ msgstr "" msgid "Opening Gerber file." msgstr "Abrindo Arquivo Gerber." -#: FlatCAMApp.py:7557 FlatCAMApp.py:7561 flatcamGUI/FlatCAMGUI.py:838 -#: flatcamGUI/FlatCAMGUI.py:2546 +#: FlatCAMApp.py:7557 FlatCAMApp.py:7561 flatcamGUI/MainGUI.py:838 +#: flatcamGUI/MainGUI.py:2546 msgid "Open Excellon" msgstr "Abrir Excellon" @@ -960,7 +960,7 @@ msgstr "Abrir G-Code" msgid "Opening G-Code file." msgstr "Abrindo Arquivo G-Code." -#: FlatCAMApp.py:7632 FlatCAMApp.py:7635 flatcamGUI/FlatCAMGUI.py:1730 +#: FlatCAMApp.py:7632 FlatCAMApp.py:7635 flatcamGUI/MainGUI.py:1730 msgid "Open Project" msgstr "Abrir Projeto" @@ -1119,8 +1119,8 @@ msgstr "Arquivo de script TCL aberto no Editor de Código e executado." msgid "Save Project As ..." msgstr "Salvar Projeto Como..." -#: FlatCAMApp.py:8551 flatcamGUI/FlatCAMGUI.py:1134 -#: flatcamGUI/FlatCAMGUI.py:2176 +#: FlatCAMApp.py:8551 flatcamGUI/MainGUI.py:1134 +#: flatcamGUI/MainGUI.py:2176 msgid "Project" msgstr "Projeto" @@ -1370,7 +1370,7 @@ msgstr "Limpar Projetos Recentes" msgid "Clear Recent files" msgstr "Limpar Arquivos Recentes" -#: FlatCAMApp.py:10065 flatcamGUI/FlatCAMGUI.py:1363 +#: FlatCAMApp.py:10065 flatcamGUI/MainGUI.py:1363 msgid "Shortcut Key List" msgstr "Lista de Teclas de Atalho" @@ -1530,47 +1530,47 @@ msgstr "Desabilitando gráficos..." msgid "Working ..." msgstr "Trabalhando ..." -#: FlatCAMApp.py:10558 flatcamGUI/FlatCAMGUI.py:703 +#: FlatCAMApp.py:10558 flatcamGUI/MainGUI.py:703 msgid "Red" msgstr "Vermelho" -#: FlatCAMApp.py:10560 flatcamGUI/FlatCAMGUI.py:706 +#: FlatCAMApp.py:10560 flatcamGUI/MainGUI.py:706 msgid "Blue" msgstr "Azul" -#: FlatCAMApp.py:10563 flatcamGUI/FlatCAMGUI.py:709 +#: FlatCAMApp.py:10563 flatcamGUI/MainGUI.py:709 msgid "Yellow" msgstr "Amarela" -#: FlatCAMApp.py:10565 flatcamGUI/FlatCAMGUI.py:712 +#: FlatCAMApp.py:10565 flatcamGUI/MainGUI.py:712 msgid "Green" msgstr "Verde" -#: FlatCAMApp.py:10567 flatcamGUI/FlatCAMGUI.py:715 +#: FlatCAMApp.py:10567 flatcamGUI/MainGUI.py:715 msgid "Purple" msgstr "Roxo" -#: FlatCAMApp.py:10569 flatcamGUI/FlatCAMGUI.py:718 +#: FlatCAMApp.py:10569 flatcamGUI/MainGUI.py:718 msgid "Brown" msgstr "Marrom" -#: FlatCAMApp.py:10571 FlatCAMApp.py:10627 flatcamGUI/FlatCAMGUI.py:721 +#: FlatCAMApp.py:10571 FlatCAMApp.py:10627 flatcamGUI/MainGUI.py:721 msgid "White" msgstr "Branco" -#: FlatCAMApp.py:10573 flatcamGUI/FlatCAMGUI.py:724 +#: FlatCAMApp.py:10573 flatcamGUI/MainGUI.py:724 msgid "Black" msgstr "Preto" -#: FlatCAMApp.py:10576 flatcamGUI/FlatCAMGUI.py:729 +#: FlatCAMApp.py:10576 flatcamGUI/MainGUI.py:729 msgid "Custom" msgstr "Personalizado" -#: FlatCAMApp.py:10586 flatcamGUI/FlatCAMGUI.py:737 +#: FlatCAMApp.py:10586 flatcamGUI/MainGUI.py:737 msgid "Default" msgstr "Padrão" -#: FlatCAMApp.py:10610 flatcamGUI/FlatCAMGUI.py:734 +#: FlatCAMApp.py:10610 flatcamGUI/MainGUI.py:734 msgid "Opacity" msgstr "Opacidade" @@ -1690,7 +1690,7 @@ msgstr "Favorito removido." msgid "Export FlatCAM Bookmarks" msgstr "Exportar Favoritos do FlatCAM" -#: FlatCAMBookmark.py:293 flatcamGUI/FlatCAMGUI.py:524 +#: FlatCAMBookmark.py:293 flatcamGUI/MainGUI.py:524 msgid "Bookmarks" msgstr "Favoritos" @@ -3126,7 +3126,7 @@ msgstr "" "Exclui uma ferramenta da lista de ferramentas selecionando uma linha na " "tabela de ferramentas." -#: flatcamEditors/FlatCAMExcEditor.py:1650 flatcamGUI/FlatCAMGUI.py:2019 +#: flatcamEditors/FlatCAMExcEditor.py:1650 flatcamGUI/MainGUI.py:2019 msgid "Resize Drill(s)" msgstr "Redimensionar Furo(s)" @@ -3150,8 +3150,8 @@ msgstr "Redimensionar" msgid "Resize drill(s)" msgstr "Redimensionar furo(s)" -#: flatcamEditors/FlatCAMExcEditor.py:1699 flatcamGUI/FlatCAMGUI.py:2018 -#: flatcamGUI/FlatCAMGUI.py:2270 +#: flatcamEditors/FlatCAMExcEditor.py:1699 flatcamGUI/MainGUI.py:2018 +#: flatcamGUI/MainGUI.py:2270 msgid "Add Drill Array" msgstr "Adicionar Matriz de Furos" @@ -3462,7 +3462,7 @@ msgstr "" "Ferramenta já na lista de ferramentas original ou atual.\n" "Salve e reedite Excellon se precisar adicionar essa ferramenta. " -#: flatcamEditors/FlatCAMExcEditor.py:2579 flatcamGUI/FlatCAMGUI.py:4071 +#: flatcamEditors/FlatCAMExcEditor.py:2579 flatcamGUI/MainGUI.py:4071 msgid "Added new tool with dia" msgstr "Adicionada nova ferramenta com diâmetro" @@ -3571,7 +3571,7 @@ msgid "Full Buffer" msgstr "Buffer Completo" #: flatcamEditors/FlatCAMGeoEditor.py:132 -#: flatcamEditors/FlatCAMGeoEditor.py:3017 flatcamGUI/FlatCAMGUI.py:1928 +#: flatcamEditors/FlatCAMGeoEditor.py:3017 flatcamGUI/MainGUI.py:1928 #: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:190 msgid "Buffer Tool" msgstr "Ferramenta Buffer" @@ -3592,7 +3592,7 @@ msgstr "" msgid "Font" msgstr "Fonte" -#: flatcamEditors/FlatCAMGeoEditor.py:323 flatcamGUI/FlatCAMGUI.py:2208 +#: flatcamEditors/FlatCAMGeoEditor.py:323 flatcamGUI/MainGUI.py:2208 msgid "Text" msgstr "Texto" @@ -3600,8 +3600,8 @@ msgstr "Texto" msgid "Text Tool" msgstr "Ferramenta de Texto" -#: flatcamEditors/FlatCAMGeoEditor.py:405 flatcamGUI/FlatCAMGUI.py:511 -#: flatcamGUI/FlatCAMGUI.py:1158 flatcamGUI/ObjectUI.py:818 +#: flatcamEditors/FlatCAMGeoEditor.py:405 flatcamGUI/MainGUI.py:511 +#: flatcamGUI/MainGUI.py:1158 flatcamGUI/ObjectUI.py:818 #: flatcamGUI/ObjectUI.py:1662 flatcamObjects/FlatCAMExcellon.py:742 #: flatcamObjects/FlatCAMExcellon.py:1084 flatcamObjects/FlatCAMGeometry.py:759 #: flatcamTools/ToolNCC.py:331 flatcamTools/ToolNCC.py:797 @@ -3638,12 +3638,12 @@ msgstr "Conectar:" msgid "Contour:" msgstr "Contorno:" -#: flatcamEditors/FlatCAMGeoEditor.py:529 flatcamGUI/FlatCAMGUI.py:2212 +#: flatcamEditors/FlatCAMGeoEditor.py:529 flatcamGUI/MainGUI.py:2212 msgid "Paint" msgstr "Pintura" -#: flatcamEditors/FlatCAMGeoEditor.py:547 flatcamGUI/FlatCAMGUI.py:924 -#: flatcamGUI/FlatCAMGUI.py:2628 flatcamGUI/ObjectUI.py:2139 +#: flatcamEditors/FlatCAMGeoEditor.py:547 flatcamGUI/MainGUI.py:924 +#: flatcamGUI/MainGUI.py:2628 flatcamGUI/ObjectUI.py:2139 #: flatcamTools/ToolPaint.py:43 flatcamTools/ToolPaint.py:738 msgid "Paint Tool" msgstr "Ferramenta de Pintura" @@ -3670,8 +3670,8 @@ msgstr "Ferramentas" #: flatcamEditors/FlatCAMGeoEditor.py:607 #: flatcamEditors/FlatCAMGeoEditor.py:991 #: flatcamEditors/FlatCAMGrbEditor.py:5306 -#: flatcamEditors/FlatCAMGrbEditor.py:5703 flatcamGUI/FlatCAMGUI.py:945 -#: flatcamGUI/FlatCAMGUI.py:2649 flatcamTools/ToolTransform.py:460 +#: flatcamEditors/FlatCAMGrbEditor.py:5703 flatcamGUI/MainGUI.py:945 +#: flatcamGUI/MainGUI.py:2649 flatcamTools/ToolTransform.py:460 msgid "Transform Tool" msgstr "Ferramenta Transformar" @@ -3691,9 +3691,9 @@ msgstr "Inclinar" #: flatcamEditors/FlatCAMGeoEditor.py:610 #: flatcamEditors/FlatCAMGrbEditor.py:2680 -#: flatcamEditors/FlatCAMGrbEditor.py:5309 flatcamGUI/FlatCAMGUI.py:1063 -#: flatcamGUI/FlatCAMGUI.py:2140 flatcamGUI/FlatCAMGUI.py:2255 -#: flatcamGUI/FlatCAMGUI.py:2767 flatcamGUI/ObjectUI.py:125 +#: flatcamEditors/FlatCAMGrbEditor.py:5309 flatcamGUI/MainGUI.py:1063 +#: flatcamGUI/MainGUI.py:2140 flatcamGUI/MainGUI.py:2255 +#: flatcamGUI/MainGUI.py:2767 flatcamGUI/ObjectUI.py:125 #: flatcamGUI/preferences/tools/ToolsTransformPrefGroupUI.py:95 #: flatcamTools/ToolTransform.py:26 msgid "Scale" @@ -3705,8 +3705,8 @@ msgid "Mirror (Flip)" msgstr "Espelhar (Flip)" #: flatcamEditors/FlatCAMGeoEditor.py:625 -#: flatcamEditors/FlatCAMGrbEditor.py:5324 flatcamGUI/FlatCAMGUI.py:856 -#: flatcamGUI/FlatCAMGUI.py:2564 +#: flatcamEditors/FlatCAMGrbEditor.py:5324 flatcamGUI/MainGUI.py:856 +#: flatcamGUI/MainGUI.py:2564 msgid "Editor" msgstr "Editor" @@ -4425,7 +4425,7 @@ msgstr "Anel" msgid "Line" msgstr "Linha" -#: flatcamEditors/FlatCAMGeoEditor.py:3591 flatcamGUI/FlatCAMGUI.py:2202 +#: flatcamEditors/FlatCAMGeoEditor.py:3591 flatcamGUI/MainGUI.py:2202 #: flatcamGUI/ObjectUI.py:2074 #: flatcamGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:218 #: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:328 @@ -4454,10 +4454,10 @@ msgstr "Editando Geometria MultiGeo, ferramenta" msgid "with diameter" msgstr "com diâmetro" -#: flatcamEditors/FlatCAMGeoEditor.py:4509 flatcamGUI/FlatCAMGUI.py:3753 -#: flatcamGUI/FlatCAMGUI.py:3799 flatcamGUI/FlatCAMGUI.py:3817 -#: flatcamGUI/FlatCAMGUI.py:3961 flatcamGUI/FlatCAMGUI.py:4000 -#: flatcamGUI/FlatCAMGUI.py:4012 flatcamGUI/FlatCAMGUI.py:4029 +#: flatcamEditors/FlatCAMGeoEditor.py:4509 flatcamGUI/MainGUI.py:3753 +#: flatcamGUI/MainGUI.py:3799 flatcamGUI/MainGUI.py:3817 +#: flatcamGUI/MainGUI.py:3961 flatcamGUI/MainGUI.py:4000 +#: flatcamGUI/MainGUI.py:4012 flatcamGUI/MainGUI.py:4029 msgid "Click on target point." msgstr "Clique no ponto alvo." @@ -4683,7 +4683,7 @@ msgstr "Aberturas movidas." msgid "Done. Apertures copied." msgstr "Aberturas copiadas." -#: flatcamEditors/FlatCAMGrbEditor.py:2455 flatcamGUI/FlatCAMGUI.py:2233 +#: flatcamEditors/FlatCAMGrbEditor.py:2455 flatcamGUI/MainGUI.py:2233 #: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:27 msgid "Gerber Editor" msgstr "Editor Gerber" @@ -4845,9 +4845,9 @@ msgstr "" "- 'Chanfrado:' o canto é uma linha que conecta diretamente os recursos " "reunidos no canto" -#: flatcamEditors/FlatCAMGrbEditor.py:2640 flatcamGUI/FlatCAMGUI.py:1061 -#: flatcamGUI/FlatCAMGUI.py:2138 flatcamGUI/FlatCAMGUI.py:2210 -#: flatcamGUI/FlatCAMGUI.py:2253 flatcamGUI/FlatCAMGUI.py:2765 +#: flatcamEditors/FlatCAMGrbEditor.py:2640 flatcamGUI/MainGUI.py:1061 +#: flatcamGUI/MainGUI.py:2138 flatcamGUI/MainGUI.py:2210 +#: flatcamGUI/MainGUI.py:2253 flatcamGUI/MainGUI.py:2765 #: flatcamGUI/preferences/tools/ToolsTransformPrefGroupUI.py:200 #: flatcamTools/ToolTransform.py:29 msgid "Buffer" @@ -4922,8 +4922,8 @@ msgstr "Excluir todos os polígonos marcados." msgid "Clear all the markings." msgstr "Limpar todas as marcações." -#: flatcamEditors/FlatCAMGrbEditor.py:2764 flatcamGUI/FlatCAMGUI.py:1046 -#: flatcamGUI/FlatCAMGUI.py:2138 flatcamGUI/FlatCAMGUI.py:2750 +#: flatcamEditors/FlatCAMGrbEditor.py:2764 flatcamGUI/MainGUI.py:1046 +#: flatcamGUI/MainGUI.py:2138 flatcamGUI/MainGUI.py:2750 msgid "Add Pad Array" msgstr "Adicionar Matriz de Pads" @@ -5226,129 +5226,129 @@ msgstr "Salvo em" msgid "Code Editor content copied to clipboard ..." msgstr "Conteúdo do Code Editor copiado para a área de transferência ..." -#: flatcamGUI/FlatCAMGUI.py:78 flatcamGUI/FlatCAMGUI.py:80 -#: flatcamGUI/FlatCAMGUI.py:2163 +#: flatcamGUI/MainGUI.py:78 flatcamGUI/MainGUI.py:80 +#: flatcamGUI/MainGUI.py:2163 msgid "Toggle Panel" msgstr "Alternar Painel" -#: flatcamGUI/FlatCAMGUI.py:90 +#: flatcamGUI/MainGUI.py:90 msgid "File" msgstr "Arquivo" -#: flatcamGUI/FlatCAMGUI.py:95 +#: flatcamGUI/MainGUI.py:95 msgid "&New Project ...\tCtrl+N" msgstr "&Novo Projeto ...\tCtrl+N" -#: flatcamGUI/FlatCAMGUI.py:97 +#: flatcamGUI/MainGUI.py:97 msgid "Will create a new, blank project" msgstr "Criará um novo projeto em branco" -#: flatcamGUI/FlatCAMGUI.py:102 +#: flatcamGUI/MainGUI.py:102 msgid "&New" msgstr "&Novo" -#: flatcamGUI/FlatCAMGUI.py:106 +#: flatcamGUI/MainGUI.py:106 msgid "Geometry\tN" msgstr "Geometria\tN" -#: flatcamGUI/FlatCAMGUI.py:108 +#: flatcamGUI/MainGUI.py:108 msgid "Will create a new, empty Geometry Object." msgstr "Criará um novo Objeto Geometria vazio." -#: flatcamGUI/FlatCAMGUI.py:111 +#: flatcamGUI/MainGUI.py:111 msgid "Gerber\tB" msgstr "Gerber\tB" -#: flatcamGUI/FlatCAMGUI.py:113 +#: flatcamGUI/MainGUI.py:113 msgid "Will create a new, empty Gerber Object." msgstr "Criará um novo Objeto Gerber vazio." -#: flatcamGUI/FlatCAMGUI.py:116 +#: flatcamGUI/MainGUI.py:116 msgid "Excellon\tL" msgstr "Excellon\tL" -#: flatcamGUI/FlatCAMGUI.py:118 +#: flatcamGUI/MainGUI.py:118 msgid "Will create a new, empty Excellon Object." msgstr "Criará um novo Objeto Excellon vazio." -#: flatcamGUI/FlatCAMGUI.py:123 +#: flatcamGUI/MainGUI.py:123 msgid "Document\tD" msgstr "Documento\tD" -#: flatcamGUI/FlatCAMGUI.py:125 +#: flatcamGUI/MainGUI.py:125 msgid "Will create a new, empty Document Object." msgstr "Criará um novo Objeto Documento vazio." -#: flatcamGUI/FlatCAMGUI.py:129 flatcamGUI/FlatCAMGUI.py:4420 +#: flatcamGUI/MainGUI.py:129 flatcamGUI/MainGUI.py:4420 #: flatcamTools/ToolPcbWizard.py:62 flatcamTools/ToolPcbWizard.py:69 msgid "Open" msgstr "Abrir" -#: flatcamGUI/FlatCAMGUI.py:134 +#: flatcamGUI/MainGUI.py:134 msgid "Open &Project ..." msgstr "Abrir &Projeto ..." -#: flatcamGUI/FlatCAMGUI.py:140 flatcamGUI/FlatCAMGUI.py:4430 +#: flatcamGUI/MainGUI.py:140 flatcamGUI/MainGUI.py:4430 msgid "Open &Gerber ...\tCtrl+G" msgstr "Abrir &Gerber ...\tCtrl+G" -#: flatcamGUI/FlatCAMGUI.py:145 flatcamGUI/FlatCAMGUI.py:4435 +#: flatcamGUI/MainGUI.py:145 flatcamGUI/MainGUI.py:4435 msgid "Open &Excellon ...\tCtrl+E" msgstr "Abrir &Excellon ...\tCtrl+E" -#: flatcamGUI/FlatCAMGUI.py:150 flatcamGUI/FlatCAMGUI.py:4440 +#: flatcamGUI/MainGUI.py:150 flatcamGUI/MainGUI.py:4440 msgid "Open G-&Code ..." msgstr "Abrir G-&Code ..." -#: flatcamGUI/FlatCAMGUI.py:157 +#: flatcamGUI/MainGUI.py:157 msgid "Open Config ..." msgstr "Abrir Configuração ..." -#: flatcamGUI/FlatCAMGUI.py:162 +#: flatcamGUI/MainGUI.py:162 msgid "Recent projects" msgstr "Projetos Recentes" -#: flatcamGUI/FlatCAMGUI.py:164 +#: flatcamGUI/MainGUI.py:164 msgid "Recent files" msgstr "Arquivos Recentes" -#: flatcamGUI/FlatCAMGUI.py:167 flatcamGUI/FlatCAMGUI.py:753 -#: flatcamGUI/FlatCAMGUI.py:1339 +#: flatcamGUI/MainGUI.py:167 flatcamGUI/MainGUI.py:753 +#: flatcamGUI/MainGUI.py:1339 msgid "Save" msgstr "Salvar" -#: flatcamGUI/FlatCAMGUI.py:171 +#: flatcamGUI/MainGUI.py:171 msgid "&Save Project ...\tCtrl+S" msgstr "&Salvar Projeto ...\tCtrl+S" -#: flatcamGUI/FlatCAMGUI.py:176 +#: flatcamGUI/MainGUI.py:176 msgid "Save Project &As ...\tCtrl+Shift+S" msgstr "S&alvar Projeto Como ...\tCtrl+Shift+S" -#: flatcamGUI/FlatCAMGUI.py:191 +#: flatcamGUI/MainGUI.py:191 msgid "Scripting" msgstr "Scripting" -#: flatcamGUI/FlatCAMGUI.py:195 flatcamGUI/FlatCAMGUI.py:903 -#: flatcamGUI/FlatCAMGUI.py:2607 +#: flatcamGUI/MainGUI.py:195 flatcamGUI/MainGUI.py:903 +#: flatcamGUI/MainGUI.py:2607 msgid "New Script ..." msgstr "Novo Script ..." -#: flatcamGUI/FlatCAMGUI.py:197 flatcamGUI/FlatCAMGUI.py:905 -#: flatcamGUI/FlatCAMGUI.py:2609 +#: flatcamGUI/MainGUI.py:197 flatcamGUI/MainGUI.py:905 +#: flatcamGUI/MainGUI.py:2609 msgid "Open Script ..." msgstr "Abrir Script ..." -#: flatcamGUI/FlatCAMGUI.py:199 +#: flatcamGUI/MainGUI.py:199 msgid "Open Example ..." msgstr "Abrir Exemplo ..." -#: flatcamGUI/FlatCAMGUI.py:201 flatcamGUI/FlatCAMGUI.py:907 -#: flatcamGUI/FlatCAMGUI.py:2611 flatcamGUI/FlatCAMGUI.py:4409 +#: flatcamGUI/MainGUI.py:201 flatcamGUI/MainGUI.py:907 +#: flatcamGUI/MainGUI.py:2611 flatcamGUI/MainGUI.py:4409 msgid "Run Script ..." msgstr "Executar Script ..." -#: flatcamGUI/FlatCAMGUI.py:203 flatcamGUI/FlatCAMGUI.py:4411 +#: flatcamGUI/MainGUI.py:203 flatcamGUI/MainGUI.py:4411 msgid "" "Will run the opened Tcl Script thus\n" "enabling the automation of certain\n" @@ -5358,47 +5358,47 @@ msgstr "" "ativando a automação de certas\n" "funções do FlatCAM." -#: flatcamGUI/FlatCAMGUI.py:218 +#: flatcamGUI/MainGUI.py:218 msgid "Import" msgstr "Importar" -#: flatcamGUI/FlatCAMGUI.py:220 +#: flatcamGUI/MainGUI.py:220 msgid "&SVG as Geometry Object ..." msgstr "&SVG como Objeto de Geometria ..." -#: flatcamGUI/FlatCAMGUI.py:223 +#: flatcamGUI/MainGUI.py:223 msgid "&SVG as Gerber Object ..." msgstr "&SVG como Objeto Gerber ..." -#: flatcamGUI/FlatCAMGUI.py:228 +#: flatcamGUI/MainGUI.py:228 msgid "&DXF as Geometry Object ..." msgstr "&DXF como Objeto de Geometria ..." -#: flatcamGUI/FlatCAMGUI.py:231 +#: flatcamGUI/MainGUI.py:231 msgid "&DXF as Gerber Object ..." msgstr "&DXF como Objeto Gerber ..." -#: flatcamGUI/FlatCAMGUI.py:235 +#: flatcamGUI/MainGUI.py:235 msgid "HPGL2 as Geometry Object ..." msgstr "HPGL2 como objeto de geometria ..." -#: flatcamGUI/FlatCAMGUI.py:241 +#: flatcamGUI/MainGUI.py:241 msgid "Export" msgstr "Exportar" -#: flatcamGUI/FlatCAMGUI.py:245 +#: flatcamGUI/MainGUI.py:245 msgid "Export &SVG ..." msgstr "Exportar &SVG ..." -#: flatcamGUI/FlatCAMGUI.py:249 +#: flatcamGUI/MainGUI.py:249 msgid "Export DXF ..." msgstr "Exportar DXF ..." -#: flatcamGUI/FlatCAMGUI.py:255 +#: flatcamGUI/MainGUI.py:255 msgid "Export &PNG ..." msgstr "Exportar &PNG ..." -#: flatcamGUI/FlatCAMGUI.py:257 +#: flatcamGUI/MainGUI.py:257 msgid "" "Will export an image in PNG format,\n" "the saved image will contain the visual \n" @@ -5408,11 +5408,11 @@ msgstr "" "A imagem salva conterá as informações\n" "visuais atualmente na área gráfica FlatCAM." -#: flatcamGUI/FlatCAMGUI.py:266 +#: flatcamGUI/MainGUI.py:266 msgid "Export &Excellon ..." msgstr "Exportar &Excellon ..." -#: flatcamGUI/FlatCAMGUI.py:268 +#: flatcamGUI/MainGUI.py:268 msgid "" "Will export an Excellon Object as Excellon file,\n" "the coordinates format, the file units and zeros\n" @@ -5422,11 +5422,11 @@ msgstr "" "O formato das coordenadas, das unidades de arquivo e dos zeros\n" "são definidos em Preferências -> Exportação de Excellon." -#: flatcamGUI/FlatCAMGUI.py:275 +#: flatcamGUI/MainGUI.py:275 msgid "Export &Gerber ..." msgstr "Exportar &Gerber ..." -#: flatcamGUI/FlatCAMGUI.py:277 +#: flatcamGUI/MainGUI.py:277 msgid "" "Will export an Gerber Object as Gerber file,\n" "the coordinates format, the file units and zeros\n" @@ -5436,53 +5436,53 @@ msgstr "" "O formato das coordenadas, das unidades de arquivo e dos zeros\n" "são definidos em Preferências -> Exportar Gerber." -#: flatcamGUI/FlatCAMGUI.py:287 +#: flatcamGUI/MainGUI.py:287 msgid "Backup" msgstr "Backup" -#: flatcamGUI/FlatCAMGUI.py:292 +#: flatcamGUI/MainGUI.py:292 msgid "Import Preferences from file ..." msgstr "Importar preferências de um arquivo ..." -#: flatcamGUI/FlatCAMGUI.py:298 +#: flatcamGUI/MainGUI.py:298 msgid "Export Preferences to file ..." msgstr "Exportar Preferências para um arquivo ..." -#: flatcamGUI/FlatCAMGUI.py:306 +#: flatcamGUI/MainGUI.py:306 #: flatcamGUI/preferences/PreferencesUIManager.py:1119 msgid "Save Preferences" msgstr "Salvar Preferências" -#: flatcamGUI/FlatCAMGUI.py:312 flatcamGUI/FlatCAMGUI.py:1730 +#: flatcamGUI/MainGUI.py:312 flatcamGUI/MainGUI.py:1730 msgid "Print (PDF)" msgstr "Imprimir (PDF)" -#: flatcamGUI/FlatCAMGUI.py:320 +#: flatcamGUI/MainGUI.py:320 msgid "E&xit" msgstr "Sair" -#: flatcamGUI/FlatCAMGUI.py:328 flatcamGUI/FlatCAMGUI.py:747 -#: flatcamGUI/FlatCAMGUI.py:2286 +#: flatcamGUI/MainGUI.py:328 flatcamGUI/MainGUI.py:747 +#: flatcamGUI/MainGUI.py:2286 msgid "Edit" msgstr "Editar" -#: flatcamGUI/FlatCAMGUI.py:332 +#: flatcamGUI/MainGUI.py:332 msgid "Edit Object\tE" msgstr "Editar Objeto\tE" -#: flatcamGUI/FlatCAMGUI.py:334 +#: flatcamGUI/MainGUI.py:334 msgid "Close Editor\tCtrl+S" msgstr "Fechar Editor\tCtrl+S" -#: flatcamGUI/FlatCAMGUI.py:343 +#: flatcamGUI/MainGUI.py:343 msgid "Conversion" msgstr "Conversão" -#: flatcamGUI/FlatCAMGUI.py:345 +#: flatcamGUI/MainGUI.py:345 msgid "&Join Geo/Gerber/Exc -> Geo" msgstr "&Unir Geo/Gerber/Exc -> Geo" -#: flatcamGUI/FlatCAMGUI.py:347 +#: flatcamGUI/MainGUI.py:347 msgid "" "Merge a selection of objects, which can be of type:\n" "- Gerber\n" @@ -5496,27 +5496,27 @@ msgstr "" "- Geometria\n" " em um novo objeto Geometria." -#: flatcamGUI/FlatCAMGUI.py:354 +#: flatcamGUI/MainGUI.py:354 msgid "Join Excellon(s) -> Excellon" msgstr "Unir Excellon(s) -> Excellon" -#: flatcamGUI/FlatCAMGUI.py:356 +#: flatcamGUI/MainGUI.py:356 msgid "Merge a selection of Excellon objects into a new combo Excellon object." msgstr "Mescla uma seleção de objetos Excellon em um novo objeto Excellon." -#: flatcamGUI/FlatCAMGUI.py:359 +#: flatcamGUI/MainGUI.py:359 msgid "Join Gerber(s) -> Gerber" msgstr "Unir Gerber(s) -> Gerber" -#: flatcamGUI/FlatCAMGUI.py:361 +#: flatcamGUI/MainGUI.py:361 msgid "Merge a selection of Gerber objects into a new combo Gerber object." msgstr "Mescla uma seleção de objetos Gerber em um novo objeto Gerber." -#: flatcamGUI/FlatCAMGUI.py:366 +#: flatcamGUI/MainGUI.py:366 msgid "Convert Single to MultiGeo" msgstr "Converter Único para MultiGeo" -#: flatcamGUI/FlatCAMGUI.py:368 +#: flatcamGUI/MainGUI.py:368 msgid "" "Will convert a Geometry object from single_geometry type\n" "to a multi_geometry type." @@ -5524,11 +5524,11 @@ msgstr "" "Converterá um objeto Geometria do tipo single_geometry\n" "em um tipo multi_geometry." -#: flatcamGUI/FlatCAMGUI.py:372 +#: flatcamGUI/MainGUI.py:372 msgid "Convert Multi to SingleGeo" msgstr "Converter MultiGeo para Único" -#: flatcamGUI/FlatCAMGUI.py:374 +#: flatcamGUI/MainGUI.py:374 msgid "" "Will convert a Geometry object from multi_geometry type\n" "to a single_geometry type." @@ -5536,756 +5536,756 @@ msgstr "" "Converterá um objeto Geometria do tipo multi_geometry\n" "em um tipo single_geometry." -#: flatcamGUI/FlatCAMGUI.py:381 +#: flatcamGUI/MainGUI.py:381 msgid "Convert Any to Geo" msgstr "Converter Qualquer para Geo" -#: flatcamGUI/FlatCAMGUI.py:384 +#: flatcamGUI/MainGUI.py:384 msgid "Convert Any to Gerber" msgstr "Converter Qualquer para Gerber" -#: flatcamGUI/FlatCAMGUI.py:390 +#: flatcamGUI/MainGUI.py:390 msgid "&Copy\tCtrl+C" msgstr "&Copiar\tCtrl+C" -#: flatcamGUI/FlatCAMGUI.py:395 +#: flatcamGUI/MainGUI.py:395 msgid "&Delete\tDEL" msgstr "Excluir\tDEL" -#: flatcamGUI/FlatCAMGUI.py:400 +#: flatcamGUI/MainGUI.py:400 msgid "Se&t Origin\tO" msgstr "Definir Origem\tO" -#: flatcamGUI/FlatCAMGUI.py:402 +#: flatcamGUI/MainGUI.py:402 msgid "Move to Origin\tShift+O" msgstr "Mover para Origem\tShift+O" -#: flatcamGUI/FlatCAMGUI.py:405 +#: flatcamGUI/MainGUI.py:405 msgid "Jump to Location\tJ" msgstr "Ir para a localização\tJ" -#: flatcamGUI/FlatCAMGUI.py:407 +#: flatcamGUI/MainGUI.py:407 msgid "Locate in Object\tShift+J" msgstr "Localizar em Objeto\tShift+J" -#: flatcamGUI/FlatCAMGUI.py:412 +#: flatcamGUI/MainGUI.py:412 msgid "Toggle Units\tQ" msgstr "Alternar Unidades\tQ" -#: flatcamGUI/FlatCAMGUI.py:414 +#: flatcamGUI/MainGUI.py:414 msgid "&Select All\tCtrl+A" msgstr "&Selecionar Tudo\tCtrl+A" -#: flatcamGUI/FlatCAMGUI.py:419 +#: flatcamGUI/MainGUI.py:419 msgid "&Preferences\tShift+P" msgstr "&Preferências\tShift+P" -#: flatcamGUI/FlatCAMGUI.py:425 flatcamTools/ToolProperties.py:155 +#: flatcamGUI/MainGUI.py:425 flatcamTools/ToolProperties.py:155 msgid "Options" msgstr "Opções" -#: flatcamGUI/FlatCAMGUI.py:427 +#: flatcamGUI/MainGUI.py:427 msgid "&Rotate Selection\tShift+(R)" msgstr "Gi&rar Seleção\tShift+(R)" -#: flatcamGUI/FlatCAMGUI.py:432 +#: flatcamGUI/MainGUI.py:432 msgid "&Skew on X axis\tShift+X" msgstr "Inclinar no eixo X\tShift+X" -#: flatcamGUI/FlatCAMGUI.py:434 +#: flatcamGUI/MainGUI.py:434 msgid "S&kew on Y axis\tShift+Y" msgstr "Inclinar no eixo Y\tShift+Y" -#: flatcamGUI/FlatCAMGUI.py:439 +#: flatcamGUI/MainGUI.py:439 msgid "Flip on &X axis\tX" msgstr "Espelhar no eixo &X\tX" -#: flatcamGUI/FlatCAMGUI.py:441 +#: flatcamGUI/MainGUI.py:441 msgid "Flip on &Y axis\tY" msgstr "Espelhar no eixo &Y\tY" -#: flatcamGUI/FlatCAMGUI.py:446 +#: flatcamGUI/MainGUI.py:446 msgid "View source\tAlt+S" msgstr "Ver fonte\tAlt+S" -#: flatcamGUI/FlatCAMGUI.py:448 +#: flatcamGUI/MainGUI.py:448 msgid "Tools DataBase\tCtrl+D" msgstr "Banco de Dados de Ferramentas\tCtrl+D" -#: flatcamGUI/FlatCAMGUI.py:455 flatcamGUI/FlatCAMGUI.py:2183 +#: flatcamGUI/MainGUI.py:455 flatcamGUI/MainGUI.py:2183 msgid "View" msgstr "Ver" -#: flatcamGUI/FlatCAMGUI.py:457 +#: flatcamGUI/MainGUI.py:457 msgid "Enable all plots\tAlt+1" msgstr "Habilitar todos os gráficos\tAlt+1" -#: flatcamGUI/FlatCAMGUI.py:459 +#: flatcamGUI/MainGUI.py:459 msgid "Disable all plots\tAlt+2" msgstr "Desabilitar todos os gráficos\tAlt+2" -#: flatcamGUI/FlatCAMGUI.py:461 +#: flatcamGUI/MainGUI.py:461 msgid "Disable non-selected\tAlt+3" msgstr "Desabilitar os não selecionados\tAlt+3" -#: flatcamGUI/FlatCAMGUI.py:465 +#: flatcamGUI/MainGUI.py:465 msgid "&Zoom Fit\tV" msgstr "&Zoom Ajustado\tV" -#: flatcamGUI/FlatCAMGUI.py:467 +#: flatcamGUI/MainGUI.py:467 msgid "&Zoom In\t=" msgstr "&Zoom +\t=" -#: flatcamGUI/FlatCAMGUI.py:469 +#: flatcamGUI/MainGUI.py:469 msgid "&Zoom Out\t-" msgstr "&Zoom -\t-" -#: flatcamGUI/FlatCAMGUI.py:474 +#: flatcamGUI/MainGUI.py:474 msgid "Redraw All\tF5" msgstr "Redesenha Todos\tF5" -#: flatcamGUI/FlatCAMGUI.py:478 +#: flatcamGUI/MainGUI.py:478 msgid "Toggle Code Editor\tShift+E" msgstr "Alternar o Editor de Códigos\tShift+E" -#: flatcamGUI/FlatCAMGUI.py:481 +#: flatcamGUI/MainGUI.py:481 msgid "&Toggle FullScreen\tAlt+F10" msgstr "Alternar &Tela Cheia\tAlt+F10" -#: flatcamGUI/FlatCAMGUI.py:483 +#: flatcamGUI/MainGUI.py:483 msgid "&Toggle Plot Area\tCtrl+F10" msgstr "Al&ternar Área de Gráficos\tCtrl+F10" -#: flatcamGUI/FlatCAMGUI.py:485 +#: flatcamGUI/MainGUI.py:485 msgid "&Toggle Project/Sel/Tool\t`" msgstr "Al&ternar Projeto/Sel/Ferram\t`" -#: flatcamGUI/FlatCAMGUI.py:489 +#: flatcamGUI/MainGUI.py:489 msgid "&Toggle Grid Snap\tG" msgstr "Al&ternar Encaixe na Grade\tG" -#: flatcamGUI/FlatCAMGUI.py:491 +#: flatcamGUI/MainGUI.py:491 msgid "&Toggle Grid Lines\tAlt+G" msgstr "Al&ternar Encaixe na Grade\tAlt+G" -#: flatcamGUI/FlatCAMGUI.py:493 +#: flatcamGUI/MainGUI.py:493 msgid "&Toggle Axis\tShift+G" msgstr "Al&ternar Eixo\tShift+G" -#: flatcamGUI/FlatCAMGUI.py:495 +#: flatcamGUI/MainGUI.py:495 msgid "Toggle Workspace\tShift+W" msgstr "Alternar Área de Trabalho\tShift+W" -#: flatcamGUI/FlatCAMGUI.py:500 +#: flatcamGUI/MainGUI.py:500 msgid "Objects" msgstr "Objetos" -#: flatcamGUI/FlatCAMGUI.py:514 +#: flatcamGUI/MainGUI.py:514 msgid "&Command Line\tS" msgstr "Linha de &Comando\tS" -#: flatcamGUI/FlatCAMGUI.py:519 +#: flatcamGUI/MainGUI.py:519 msgid "Help" msgstr "Ajuda" -#: flatcamGUI/FlatCAMGUI.py:521 +#: flatcamGUI/MainGUI.py:521 msgid "Online Help\tF1" msgstr "Ajuda Online\tF1" -#: flatcamGUI/FlatCAMGUI.py:531 +#: flatcamGUI/MainGUI.py:531 msgid "Report a bug" msgstr "Reportar um bug" -#: flatcamGUI/FlatCAMGUI.py:534 +#: flatcamGUI/MainGUI.py:534 msgid "Excellon Specification" msgstr "Especificação Excellon" -#: flatcamGUI/FlatCAMGUI.py:536 +#: flatcamGUI/MainGUI.py:536 msgid "Gerber Specification" msgstr "Especificação Gerber" -#: flatcamGUI/FlatCAMGUI.py:541 +#: flatcamGUI/MainGUI.py:541 msgid "Shortcuts List\tF3" msgstr "Lista de Atalhos\tF3" -#: flatcamGUI/FlatCAMGUI.py:543 +#: flatcamGUI/MainGUI.py:543 msgid "YouTube Channel\tF4" msgstr "Canal no YouTube\tF4" -#: flatcamGUI/FlatCAMGUI.py:554 +#: flatcamGUI/MainGUI.py:554 msgid "Add Circle\tO" msgstr "Adicionar Círculo\tO" -#: flatcamGUI/FlatCAMGUI.py:557 +#: flatcamGUI/MainGUI.py:557 msgid "Add Arc\tA" msgstr "Adicionar Arco\tA" -#: flatcamGUI/FlatCAMGUI.py:560 +#: flatcamGUI/MainGUI.py:560 msgid "Add Rectangle\tR" msgstr "Adicionar Retângulo\tR" -#: flatcamGUI/FlatCAMGUI.py:563 +#: flatcamGUI/MainGUI.py:563 msgid "Add Polygon\tN" msgstr "Adicionar Polígono\tN" -#: flatcamGUI/FlatCAMGUI.py:566 +#: flatcamGUI/MainGUI.py:566 msgid "Add Path\tP" msgstr "Adicionar Caminho\tP" -#: flatcamGUI/FlatCAMGUI.py:569 +#: flatcamGUI/MainGUI.py:569 msgid "Add Text\tT" msgstr "Adicionar Texto\tT" -#: flatcamGUI/FlatCAMGUI.py:572 +#: flatcamGUI/MainGUI.py:572 msgid "Polygon Union\tU" msgstr "Unir Polígonos\tU" -#: flatcamGUI/FlatCAMGUI.py:574 +#: flatcamGUI/MainGUI.py:574 msgid "Polygon Intersection\tE" msgstr "Interseção de Polígonos\tE" -#: flatcamGUI/FlatCAMGUI.py:576 +#: flatcamGUI/MainGUI.py:576 msgid "Polygon Subtraction\tS" msgstr "Subtração de Polígonos\tS" -#: flatcamGUI/FlatCAMGUI.py:580 +#: flatcamGUI/MainGUI.py:580 msgid "Cut Path\tX" msgstr "Caminho de Corte\tX" -#: flatcamGUI/FlatCAMGUI.py:584 +#: flatcamGUI/MainGUI.py:584 msgid "Copy Geom\tC" msgstr "Copiar Geom\tC" -#: flatcamGUI/FlatCAMGUI.py:586 +#: flatcamGUI/MainGUI.py:586 msgid "Delete Shape\tDEL" msgstr "Excluir Forma\tDEL" -#: flatcamGUI/FlatCAMGUI.py:590 flatcamGUI/FlatCAMGUI.py:677 +#: flatcamGUI/MainGUI.py:590 flatcamGUI/MainGUI.py:677 msgid "Move\tM" msgstr "Mover\tM" -#: flatcamGUI/FlatCAMGUI.py:592 +#: flatcamGUI/MainGUI.py:592 msgid "Buffer Tool\tB" msgstr "Ferramenta Buffer\tB" -#: flatcamGUI/FlatCAMGUI.py:595 +#: flatcamGUI/MainGUI.py:595 msgid "Paint Tool\tI" msgstr "Ferramenta de Pintura\tI" -#: flatcamGUI/FlatCAMGUI.py:598 +#: flatcamGUI/MainGUI.py:598 msgid "Transform Tool\tAlt+R" msgstr "Ferramenta de Transformação\tAlt+R" -#: flatcamGUI/FlatCAMGUI.py:602 +#: flatcamGUI/MainGUI.py:602 msgid "Toggle Corner Snap\tK" msgstr "Alternar Encaixe de Canto\tK" -#: flatcamGUI/FlatCAMGUI.py:608 +#: flatcamGUI/MainGUI.py:608 msgid ">Excellon Editor<" msgstr ">Editor Excellon<" -#: flatcamGUI/FlatCAMGUI.py:612 +#: flatcamGUI/MainGUI.py:612 msgid "Add Drill Array\tA" msgstr "Adicionar Matriz de Furos\tA" -#: flatcamGUI/FlatCAMGUI.py:614 +#: flatcamGUI/MainGUI.py:614 msgid "Add Drill\tD" msgstr "Adicionar Furo\tD" -#: flatcamGUI/FlatCAMGUI.py:618 +#: flatcamGUI/MainGUI.py:618 msgid "Add Slot Array\tQ" msgstr "Adic. Matriz de Ranhuras\tQ" -#: flatcamGUI/FlatCAMGUI.py:620 +#: flatcamGUI/MainGUI.py:620 msgid "Add Slot\tW" msgstr "Adicionar Ranhura\tW" -#: flatcamGUI/FlatCAMGUI.py:624 +#: flatcamGUI/MainGUI.py:624 msgid "Resize Drill(S)\tR" msgstr "Redimensionar Furo(s)\tR" -#: flatcamGUI/FlatCAMGUI.py:627 flatcamGUI/FlatCAMGUI.py:671 +#: flatcamGUI/MainGUI.py:627 flatcamGUI/MainGUI.py:671 msgid "Copy\tC" msgstr "Copiar\tC" -#: flatcamGUI/FlatCAMGUI.py:629 flatcamGUI/FlatCAMGUI.py:673 +#: flatcamGUI/MainGUI.py:629 flatcamGUI/MainGUI.py:673 msgid "Delete\tDEL" msgstr "Excluir\tDEL" -#: flatcamGUI/FlatCAMGUI.py:634 +#: flatcamGUI/MainGUI.py:634 msgid "Move Drill(s)\tM" msgstr "Mover Furo(s)\tM" -#: flatcamGUI/FlatCAMGUI.py:639 +#: flatcamGUI/MainGUI.py:639 msgid ">Gerber Editor<" msgstr ">Editor Gerber<" -#: flatcamGUI/FlatCAMGUI.py:643 +#: flatcamGUI/MainGUI.py:643 msgid "Add Pad\tP" msgstr "Adicionar Pad\tP" -#: flatcamGUI/FlatCAMGUI.py:645 +#: flatcamGUI/MainGUI.py:645 msgid "Add Pad Array\tA" msgstr "Adicionar Matriz de Pads\tA" -#: flatcamGUI/FlatCAMGUI.py:647 +#: flatcamGUI/MainGUI.py:647 msgid "Add Track\tT" msgstr "Adicionar Trilha\tT" -#: flatcamGUI/FlatCAMGUI.py:649 +#: flatcamGUI/MainGUI.py:649 msgid "Add Region\tN" msgstr "Adicionar Região\tN" -#: flatcamGUI/FlatCAMGUI.py:653 +#: flatcamGUI/MainGUI.py:653 msgid "Poligonize\tAlt+N" msgstr "Poligonizar\tAlt+N" -#: flatcamGUI/FlatCAMGUI.py:655 +#: flatcamGUI/MainGUI.py:655 msgid "Add SemiDisc\tE" msgstr "Adicionar SemiDisco\tE" -#: flatcamGUI/FlatCAMGUI.py:657 +#: flatcamGUI/MainGUI.py:657 msgid "Add Disc\tD" msgstr "Adicionar Disco\tD" -#: flatcamGUI/FlatCAMGUI.py:659 +#: flatcamGUI/MainGUI.py:659 msgid "Buffer\tB" msgstr "Buffer\tB" -#: flatcamGUI/FlatCAMGUI.py:661 +#: flatcamGUI/MainGUI.py:661 msgid "Scale\tS" msgstr "Escala\tS" -#: flatcamGUI/FlatCAMGUI.py:663 +#: flatcamGUI/MainGUI.py:663 msgid "Mark Area\tAlt+A" msgstr "Marcar Área\tAlt+A" -#: flatcamGUI/FlatCAMGUI.py:665 +#: flatcamGUI/MainGUI.py:665 msgid "Eraser\tCtrl+E" msgstr "Borracha\tCtrl+E" -#: flatcamGUI/FlatCAMGUI.py:667 +#: flatcamGUI/MainGUI.py:667 msgid "Transform\tAlt+R" msgstr "Transformar\tAlt+R" -#: flatcamGUI/FlatCAMGUI.py:694 +#: flatcamGUI/MainGUI.py:694 msgid "Enable Plot" msgstr "Habilitar Gráfico" -#: flatcamGUI/FlatCAMGUI.py:696 +#: flatcamGUI/MainGUI.py:696 msgid "Disable Plot" msgstr "Desabilitar Gráfico" -#: flatcamGUI/FlatCAMGUI.py:700 +#: flatcamGUI/MainGUI.py:700 msgid "Set Color" msgstr "Definir cor" -#: flatcamGUI/FlatCAMGUI.py:742 +#: flatcamGUI/MainGUI.py:742 msgid "Generate CNC" msgstr "Gerar CNC" -#: flatcamGUI/FlatCAMGUI.py:744 +#: flatcamGUI/MainGUI.py:744 msgid "View Source" msgstr "Ver Fonte" -#: flatcamGUI/FlatCAMGUI.py:749 flatcamGUI/FlatCAMGUI.py:863 -#: flatcamGUI/FlatCAMGUI.py:1072 flatcamGUI/FlatCAMGUI.py:2138 -#: flatcamGUI/FlatCAMGUI.py:2282 flatcamGUI/FlatCAMGUI.py:2572 -#: flatcamGUI/FlatCAMGUI.py:2775 flatcamGUI/ObjectUI.py:1617 +#: flatcamGUI/MainGUI.py:749 flatcamGUI/MainGUI.py:863 +#: flatcamGUI/MainGUI.py:1072 flatcamGUI/MainGUI.py:2138 +#: flatcamGUI/MainGUI.py:2282 flatcamGUI/MainGUI.py:2572 +#: flatcamGUI/MainGUI.py:2775 flatcamGUI/ObjectUI.py:1617 #: flatcamObjects/FlatCAMGeometry.py:502 flatcamTools/ToolPanelize.py:540 #: flatcamTools/ToolPanelize.py:567 flatcamTools/ToolPanelize.py:660 #: flatcamTools/ToolPanelize.py:689 flatcamTools/ToolPanelize.py:751 msgid "Copy" msgstr "Copiar" -#: flatcamGUI/FlatCAMGUI.py:757 flatcamGUI/FlatCAMGUI.py:2295 +#: flatcamGUI/MainGUI.py:757 flatcamGUI/MainGUI.py:2295 #: flatcamTools/ToolProperties.py:31 msgid "Properties" msgstr "Propriedades" -#: flatcamGUI/FlatCAMGUI.py:786 +#: flatcamGUI/MainGUI.py:786 msgid "File Toolbar" msgstr "Barra de Ferramentas de Arquivos" -#: flatcamGUI/FlatCAMGUI.py:790 +#: flatcamGUI/MainGUI.py:790 msgid "Edit Toolbar" msgstr "Barra de Ferramentas Editar" -#: flatcamGUI/FlatCAMGUI.py:794 +#: flatcamGUI/MainGUI.py:794 msgid "View Toolbar" msgstr "Barra de Ferramentas Ver" -#: flatcamGUI/FlatCAMGUI.py:798 +#: flatcamGUI/MainGUI.py:798 msgid "Shell Toolbar" msgstr "Barra de Ferramentas Shell" -#: flatcamGUI/FlatCAMGUI.py:802 +#: flatcamGUI/MainGUI.py:802 msgid "Tools Toolbar" msgstr "Barra de Ferramentas Ferramentas" -#: flatcamGUI/FlatCAMGUI.py:806 +#: flatcamGUI/MainGUI.py:806 msgid "Excellon Editor Toolbar" msgstr "Barra de Ferramentas Editor Excellon" -#: flatcamGUI/FlatCAMGUI.py:812 +#: flatcamGUI/MainGUI.py:812 msgid "Geometry Editor Toolbar" msgstr "Barra de Ferramentas Editor de Geometria" -#: flatcamGUI/FlatCAMGUI.py:816 +#: flatcamGUI/MainGUI.py:816 msgid "Gerber Editor Toolbar" msgstr "Barra de Ferramentas Editor Gerber" -#: flatcamGUI/FlatCAMGUI.py:820 +#: flatcamGUI/MainGUI.py:820 msgid "Grid Toolbar" msgstr "Barra de Ferramentas Grade" -#: flatcamGUI/FlatCAMGUI.py:841 flatcamGUI/FlatCAMGUI.py:2549 +#: flatcamGUI/MainGUI.py:841 flatcamGUI/MainGUI.py:2549 msgid "Open project" msgstr "Abrir projeto" -#: flatcamGUI/FlatCAMGUI.py:843 flatcamGUI/FlatCAMGUI.py:2551 +#: flatcamGUI/MainGUI.py:843 flatcamGUI/MainGUI.py:2551 msgid "Save project" msgstr "Salvar projeto" -#: flatcamGUI/FlatCAMGUI.py:849 flatcamGUI/FlatCAMGUI.py:2557 +#: flatcamGUI/MainGUI.py:849 flatcamGUI/MainGUI.py:2557 msgid "New Blank Geometry" msgstr "Nova Geometria em Branco" -#: flatcamGUI/FlatCAMGUI.py:851 flatcamGUI/FlatCAMGUI.py:2559 +#: flatcamGUI/MainGUI.py:851 flatcamGUI/MainGUI.py:2559 msgid "New Blank Gerber" msgstr "Novo Gerber em Branco" -#: flatcamGUI/FlatCAMGUI.py:853 flatcamGUI/FlatCAMGUI.py:2561 +#: flatcamGUI/MainGUI.py:853 flatcamGUI/MainGUI.py:2561 msgid "New Blank Excellon" msgstr "Novo Excellon em Branco" -#: flatcamGUI/FlatCAMGUI.py:858 flatcamGUI/FlatCAMGUI.py:2567 +#: flatcamGUI/MainGUI.py:858 flatcamGUI/MainGUI.py:2567 msgid "Save Object and close the Editor" msgstr "Salvar objeto e fechar o editor" -#: flatcamGUI/FlatCAMGUI.py:865 flatcamGUI/FlatCAMGUI.py:2574 +#: flatcamGUI/MainGUI.py:865 flatcamGUI/MainGUI.py:2574 msgid "&Delete" msgstr "&Excluir" -#: flatcamGUI/FlatCAMGUI.py:868 flatcamGUI/FlatCAMGUI.py:1729 -#: flatcamGUI/FlatCAMGUI.py:1935 flatcamGUI/FlatCAMGUI.py:2577 +#: flatcamGUI/MainGUI.py:868 flatcamGUI/MainGUI.py:1729 +#: flatcamGUI/MainGUI.py:1935 flatcamGUI/MainGUI.py:2577 #: flatcamTools/ToolDistance.py:35 flatcamTools/ToolDistance.py:195 msgid "Distance Tool" msgstr "Ferramenta de Distância" -#: flatcamGUI/FlatCAMGUI.py:870 flatcamGUI/FlatCAMGUI.py:2579 +#: flatcamGUI/MainGUI.py:870 flatcamGUI/MainGUI.py:2579 msgid "Distance Min Tool" msgstr "Ferramenta Distância Min" -#: flatcamGUI/FlatCAMGUI.py:872 flatcamGUI/FlatCAMGUI.py:1722 -#: flatcamGUI/FlatCAMGUI.py:2581 +#: flatcamGUI/MainGUI.py:872 flatcamGUI/MainGUI.py:1722 +#: flatcamGUI/MainGUI.py:2581 msgid "Set Origin" msgstr "Definir Origem" -#: flatcamGUI/FlatCAMGUI.py:874 +#: flatcamGUI/MainGUI.py:874 msgid "Move to Origin" msgstr "Mover para Origem" -#: flatcamGUI/FlatCAMGUI.py:877 flatcamGUI/FlatCAMGUI.py:2583 +#: flatcamGUI/MainGUI.py:877 flatcamGUI/MainGUI.py:2583 msgid "Jump to Location" msgstr "Ir para a localização" -#: flatcamGUI/FlatCAMGUI.py:879 flatcamGUI/FlatCAMGUI.py:1734 -#: flatcamGUI/FlatCAMGUI.py:2585 +#: flatcamGUI/MainGUI.py:879 flatcamGUI/MainGUI.py:1734 +#: flatcamGUI/MainGUI.py:2585 msgid "Locate in Object" msgstr "Localizar em Objeto" -#: flatcamGUI/FlatCAMGUI.py:885 flatcamGUI/FlatCAMGUI.py:2591 +#: flatcamGUI/MainGUI.py:885 flatcamGUI/MainGUI.py:2591 msgid "&Replot" msgstr "&Redesenhar" -#: flatcamGUI/FlatCAMGUI.py:887 flatcamGUI/FlatCAMGUI.py:2593 +#: flatcamGUI/MainGUI.py:887 flatcamGUI/MainGUI.py:2593 msgid "&Clear plot" msgstr "Limpar gráfi&co" -#: flatcamGUI/FlatCAMGUI.py:889 flatcamGUI/FlatCAMGUI.py:1725 -#: flatcamGUI/FlatCAMGUI.py:2595 +#: flatcamGUI/MainGUI.py:889 flatcamGUI/MainGUI.py:1725 +#: flatcamGUI/MainGUI.py:2595 msgid "Zoom In" msgstr "Zoom +" -#: flatcamGUI/FlatCAMGUI.py:891 flatcamGUI/FlatCAMGUI.py:1725 -#: flatcamGUI/FlatCAMGUI.py:2597 +#: flatcamGUI/MainGUI.py:891 flatcamGUI/MainGUI.py:1725 +#: flatcamGUI/MainGUI.py:2597 msgid "Zoom Out" msgstr "Zoom -" -#: flatcamGUI/FlatCAMGUI.py:893 flatcamGUI/FlatCAMGUI.py:1724 -#: flatcamGUI/FlatCAMGUI.py:2185 flatcamGUI/FlatCAMGUI.py:2599 +#: flatcamGUI/MainGUI.py:893 flatcamGUI/MainGUI.py:1724 +#: flatcamGUI/MainGUI.py:2185 flatcamGUI/MainGUI.py:2599 msgid "Zoom Fit" msgstr "Zoom Ajustado" -#: flatcamGUI/FlatCAMGUI.py:901 flatcamGUI/FlatCAMGUI.py:2605 +#: flatcamGUI/MainGUI.py:901 flatcamGUI/MainGUI.py:2605 msgid "&Command Line" msgstr "Linha de &Comando" -#: flatcamGUI/FlatCAMGUI.py:913 flatcamGUI/FlatCAMGUI.py:2617 +#: flatcamGUI/MainGUI.py:913 flatcamGUI/MainGUI.py:2617 msgid "2Sided Tool" msgstr "PCB de 2 Faces" -#: flatcamGUI/FlatCAMGUI.py:915 flatcamGUI/FlatCAMGUI.py:1740 -#: flatcamGUI/FlatCAMGUI.py:2619 +#: flatcamGUI/MainGUI.py:915 flatcamGUI/MainGUI.py:1740 +#: flatcamGUI/MainGUI.py:2619 msgid "Align Objects Tool" msgstr "Ferramenta Alinhar Objetos" -#: flatcamGUI/FlatCAMGUI.py:917 flatcamGUI/FlatCAMGUI.py:1741 -#: flatcamGUI/FlatCAMGUI.py:2621 flatcamTools/ToolExtractDrills.py:393 +#: flatcamGUI/MainGUI.py:917 flatcamGUI/MainGUI.py:1741 +#: flatcamGUI/MainGUI.py:2621 flatcamTools/ToolExtractDrills.py:393 msgid "Extract Drills Tool" msgstr "Ferramenta Extrair Furos" -#: flatcamGUI/FlatCAMGUI.py:920 flatcamGUI/ObjectUI.py:596 +#: flatcamGUI/MainGUI.py:920 flatcamGUI/ObjectUI.py:596 #: flatcamTools/ToolCutOut.py:440 msgid "Cutout Tool" msgstr "Ferramenta de Recorte" -#: flatcamGUI/FlatCAMGUI.py:922 flatcamGUI/FlatCAMGUI.py:2626 +#: flatcamGUI/MainGUI.py:922 flatcamGUI/MainGUI.py:2626 #: flatcamGUI/ObjectUI.py:574 flatcamGUI/ObjectUI.py:2157 #: flatcamTools/ToolNCC.py:974 msgid "NCC Tool" msgstr "Ferramenta NCC" -#: flatcamGUI/FlatCAMGUI.py:928 flatcamGUI/FlatCAMGUI.py:2632 +#: flatcamGUI/MainGUI.py:928 flatcamGUI/MainGUI.py:2632 msgid "Panel Tool" msgstr "Ferramenta de Painel" -#: flatcamGUI/FlatCAMGUI.py:930 flatcamGUI/FlatCAMGUI.py:2634 +#: flatcamGUI/MainGUI.py:930 flatcamGUI/MainGUI.py:2634 #: flatcamTools/ToolFilm.py:586 msgid "Film Tool" msgstr "Ferramenta de Filme" -#: flatcamGUI/FlatCAMGUI.py:932 flatcamGUI/FlatCAMGUI.py:2636 +#: flatcamGUI/MainGUI.py:932 flatcamGUI/MainGUI.py:2636 #: flatcamTools/ToolSolderPaste.py:553 msgid "SolderPaste Tool" msgstr "Ferramenta Pasta de Solda" -#: flatcamGUI/FlatCAMGUI.py:934 flatcamGUI/FlatCAMGUI.py:2638 +#: flatcamGUI/MainGUI.py:934 flatcamGUI/MainGUI.py:2638 #: flatcamTools/ToolSub.py:35 msgid "Subtract Tool" msgstr "Ferramenta Subtrair" -#: flatcamGUI/FlatCAMGUI.py:936 flatcamGUI/FlatCAMGUI.py:2640 +#: flatcamGUI/MainGUI.py:936 flatcamGUI/MainGUI.py:2640 #: flatcamTools/ToolRulesCheck.py:616 msgid "Rules Tool" msgstr "Ferramenta de Regras" -#: flatcamGUI/FlatCAMGUI.py:938 flatcamGUI/FlatCAMGUI.py:1743 -#: flatcamGUI/FlatCAMGUI.py:2642 flatcamTools/ToolOptimal.py:33 +#: flatcamGUI/MainGUI.py:938 flatcamGUI/MainGUI.py:1743 +#: flatcamGUI/MainGUI.py:2642 flatcamTools/ToolOptimal.py:33 #: flatcamTools/ToolOptimal.py:307 msgid "Optimal Tool" msgstr "Ferramenta Ideal" -#: flatcamGUI/FlatCAMGUI.py:943 flatcamGUI/FlatCAMGUI.py:1740 -#: flatcamGUI/FlatCAMGUI.py:2647 +#: flatcamGUI/MainGUI.py:943 flatcamGUI/MainGUI.py:1740 +#: flatcamGUI/MainGUI.py:2647 msgid "Calculators Tool" msgstr "Calculadoras" -#: flatcamGUI/FlatCAMGUI.py:947 flatcamGUI/FlatCAMGUI.py:1744 -#: flatcamGUI/FlatCAMGUI.py:2651 flatcamTools/ToolQRCode.py:43 +#: flatcamGUI/MainGUI.py:947 flatcamGUI/MainGUI.py:1744 +#: flatcamGUI/MainGUI.py:2651 flatcamTools/ToolQRCode.py:43 #: flatcamTools/ToolQRCode.py:382 msgid "QRCode Tool" msgstr "Ferramenta de QRCode" -#: flatcamGUI/FlatCAMGUI.py:949 flatcamGUI/FlatCAMGUI.py:2653 +#: flatcamGUI/MainGUI.py:949 flatcamGUI/MainGUI.py:2653 #: flatcamTools/ToolCopperThieving.py:39 flatcamTools/ToolCopperThieving.py:568 msgid "Copper Thieving Tool" msgstr "Ferramenta de Adição de Cobre" -#: flatcamGUI/FlatCAMGUI.py:952 flatcamGUI/FlatCAMGUI.py:1741 -#: flatcamGUI/FlatCAMGUI.py:2656 flatcamTools/ToolFiducials.py:33 +#: flatcamGUI/MainGUI.py:952 flatcamGUI/MainGUI.py:1741 +#: flatcamGUI/MainGUI.py:2656 flatcamTools/ToolFiducials.py:33 #: flatcamTools/ToolFiducials.py:395 msgid "Fiducials Tool" msgstr "Ferramenta de Fiduciais" -#: flatcamGUI/FlatCAMGUI.py:954 flatcamGUI/FlatCAMGUI.py:2658 +#: flatcamGUI/MainGUI.py:954 flatcamGUI/MainGUI.py:2658 #: flatcamTools/ToolCalibration.py:37 flatcamTools/ToolCalibration.py:759 msgid "Calibration Tool" msgstr "Calibração" -#: flatcamGUI/FlatCAMGUI.py:956 flatcamGUI/FlatCAMGUI.py:1741 -#: flatcamGUI/FlatCAMGUI.py:2660 +#: flatcamGUI/MainGUI.py:956 flatcamGUI/MainGUI.py:1741 +#: flatcamGUI/MainGUI.py:2660 msgid "Punch Gerber Tool" msgstr "Ferramenta Socar Gerber" -#: flatcamGUI/FlatCAMGUI.py:958 flatcamGUI/FlatCAMGUI.py:2662 +#: flatcamGUI/MainGUI.py:958 flatcamGUI/MainGUI.py:2662 #: flatcamTools/ToolInvertGerber.py:31 msgid "Invert Gerber Tool" msgstr "Ferramenta Inverter Gerber" -#: flatcamGUI/FlatCAMGUI.py:964 flatcamGUI/FlatCAMGUI.py:990 -#: flatcamGUI/FlatCAMGUI.py:1042 flatcamGUI/FlatCAMGUI.py:2668 -#: flatcamGUI/FlatCAMGUI.py:2746 +#: flatcamGUI/MainGUI.py:964 flatcamGUI/MainGUI.py:990 +#: flatcamGUI/MainGUI.py:1042 flatcamGUI/MainGUI.py:2668 +#: flatcamGUI/MainGUI.py:2746 msgid "Select" msgstr "Selecionar" -#: flatcamGUI/FlatCAMGUI.py:966 flatcamGUI/FlatCAMGUI.py:2670 +#: flatcamGUI/MainGUI.py:966 flatcamGUI/MainGUI.py:2670 msgid "Add Drill Hole" msgstr "Adicionar Furo" -#: flatcamGUI/FlatCAMGUI.py:968 flatcamGUI/FlatCAMGUI.py:2672 +#: flatcamGUI/MainGUI.py:968 flatcamGUI/MainGUI.py:2672 msgid "Add Drill Hole Array" msgstr "Adicionar Matriz do Furos" -#: flatcamGUI/FlatCAMGUI.py:970 flatcamGUI/FlatCAMGUI.py:2020 -#: flatcamGUI/FlatCAMGUI.py:2273 flatcamGUI/FlatCAMGUI.py:2676 +#: flatcamGUI/MainGUI.py:970 flatcamGUI/MainGUI.py:2020 +#: flatcamGUI/MainGUI.py:2273 flatcamGUI/MainGUI.py:2676 msgid "Add Slot" msgstr "Adicionar Ranhura" -#: flatcamGUI/FlatCAMGUI.py:972 flatcamGUI/FlatCAMGUI.py:2019 -#: flatcamGUI/FlatCAMGUI.py:2275 flatcamGUI/FlatCAMGUI.py:2678 +#: flatcamGUI/MainGUI.py:972 flatcamGUI/MainGUI.py:2019 +#: flatcamGUI/MainGUI.py:2275 flatcamGUI/MainGUI.py:2678 msgid "Add Slot Array" msgstr "Adicionar Matriz de Ranhuras" -#: flatcamGUI/FlatCAMGUI.py:974 flatcamGUI/FlatCAMGUI.py:2278 -#: flatcamGUI/FlatCAMGUI.py:2674 +#: flatcamGUI/MainGUI.py:974 flatcamGUI/MainGUI.py:2278 +#: flatcamGUI/MainGUI.py:2674 msgid "Resize Drill" msgstr "Redimensionar Furo" -#: flatcamGUI/FlatCAMGUI.py:978 flatcamGUI/FlatCAMGUI.py:2682 +#: flatcamGUI/MainGUI.py:978 flatcamGUI/MainGUI.py:2682 msgid "Copy Drill" msgstr "Copiar Furo" -#: flatcamGUI/FlatCAMGUI.py:980 flatcamGUI/FlatCAMGUI.py:2684 +#: flatcamGUI/MainGUI.py:980 flatcamGUI/MainGUI.py:2684 msgid "Delete Drill" msgstr "Excluir Furo" -#: flatcamGUI/FlatCAMGUI.py:984 flatcamGUI/FlatCAMGUI.py:2688 +#: flatcamGUI/MainGUI.py:984 flatcamGUI/MainGUI.py:2688 msgid "Move Drill" msgstr "Mover Furo" -#: flatcamGUI/FlatCAMGUI.py:992 flatcamGUI/FlatCAMGUI.py:2696 +#: flatcamGUI/MainGUI.py:992 flatcamGUI/MainGUI.py:2696 msgid "Add Circle" msgstr "Adicionar Círculo" -#: flatcamGUI/FlatCAMGUI.py:994 flatcamGUI/FlatCAMGUI.py:2698 +#: flatcamGUI/MainGUI.py:994 flatcamGUI/MainGUI.py:2698 msgid "Add Arc" msgstr "Adicionar Arco" -#: flatcamGUI/FlatCAMGUI.py:996 flatcamGUI/FlatCAMGUI.py:2700 +#: flatcamGUI/MainGUI.py:996 flatcamGUI/MainGUI.py:2700 msgid "Add Rectangle" msgstr "Adicionar Retângulo" -#: flatcamGUI/FlatCAMGUI.py:1000 flatcamGUI/FlatCAMGUI.py:2704 +#: flatcamGUI/MainGUI.py:1000 flatcamGUI/MainGUI.py:2704 msgid "Add Path" msgstr "Adicionar Caminho" -#: flatcamGUI/FlatCAMGUI.py:1002 flatcamGUI/FlatCAMGUI.py:2706 +#: flatcamGUI/MainGUI.py:1002 flatcamGUI/MainGUI.py:2706 msgid "Add Polygon" msgstr "Adicionar Polígono" -#: flatcamGUI/FlatCAMGUI.py:1005 flatcamGUI/FlatCAMGUI.py:2709 +#: flatcamGUI/MainGUI.py:1005 flatcamGUI/MainGUI.py:2709 msgid "Add Text" msgstr "Adicionar Texto" -#: flatcamGUI/FlatCAMGUI.py:1007 flatcamGUI/FlatCAMGUI.py:2711 +#: flatcamGUI/MainGUI.py:1007 flatcamGUI/MainGUI.py:2711 msgid "Add Buffer" msgstr "Adicionar Buffer" -#: flatcamGUI/FlatCAMGUI.py:1009 flatcamGUI/FlatCAMGUI.py:2713 +#: flatcamGUI/MainGUI.py:1009 flatcamGUI/MainGUI.py:2713 msgid "Paint Shape" msgstr "Pintar Forma" -#: flatcamGUI/FlatCAMGUI.py:1011 flatcamGUI/FlatCAMGUI.py:1068 -#: flatcamGUI/FlatCAMGUI.py:2214 flatcamGUI/FlatCAMGUI.py:2259 -#: flatcamGUI/FlatCAMGUI.py:2715 flatcamGUI/FlatCAMGUI.py:2771 +#: flatcamGUI/MainGUI.py:1011 flatcamGUI/MainGUI.py:1068 +#: flatcamGUI/MainGUI.py:2214 flatcamGUI/MainGUI.py:2259 +#: flatcamGUI/MainGUI.py:2715 flatcamGUI/MainGUI.py:2771 msgid "Eraser" msgstr "Borracha" -#: flatcamGUI/FlatCAMGUI.py:1015 flatcamGUI/FlatCAMGUI.py:2719 +#: flatcamGUI/MainGUI.py:1015 flatcamGUI/MainGUI.py:2719 msgid "Polygon Union" msgstr "União de Polígonos" -#: flatcamGUI/FlatCAMGUI.py:1017 flatcamGUI/FlatCAMGUI.py:2721 +#: flatcamGUI/MainGUI.py:1017 flatcamGUI/MainGUI.py:2721 msgid "Polygon Explode" msgstr "Explosão de Polígonos" -#: flatcamGUI/FlatCAMGUI.py:1020 flatcamGUI/FlatCAMGUI.py:2724 +#: flatcamGUI/MainGUI.py:1020 flatcamGUI/MainGUI.py:2724 msgid "Polygon Intersection" msgstr "Interseção de Polígonos" -#: flatcamGUI/FlatCAMGUI.py:1022 flatcamGUI/FlatCAMGUI.py:2726 +#: flatcamGUI/MainGUI.py:1022 flatcamGUI/MainGUI.py:2726 msgid "Polygon Subtraction" msgstr "Subtração de Polígonos" -#: flatcamGUI/FlatCAMGUI.py:1026 flatcamGUI/FlatCAMGUI.py:2730 +#: flatcamGUI/MainGUI.py:1026 flatcamGUI/MainGUI.py:2730 msgid "Cut Path" msgstr "Caminho de Corte" -#: flatcamGUI/FlatCAMGUI.py:1028 +#: flatcamGUI/MainGUI.py:1028 msgid "Copy Shape(s)" msgstr "Copiar Forma(s)" -#: flatcamGUI/FlatCAMGUI.py:1031 +#: flatcamGUI/MainGUI.py:1031 msgid "Delete Shape '-'" msgstr "Excluir Forma '-'" -#: flatcamGUI/FlatCAMGUI.py:1033 flatcamGUI/FlatCAMGUI.py:1076 -#: flatcamGUI/FlatCAMGUI.py:2226 flatcamGUI/FlatCAMGUI.py:2263 -#: flatcamGUI/FlatCAMGUI.py:2736 flatcamGUI/FlatCAMGUI.py:2779 +#: flatcamGUI/MainGUI.py:1033 flatcamGUI/MainGUI.py:1076 +#: flatcamGUI/MainGUI.py:2226 flatcamGUI/MainGUI.py:2263 +#: flatcamGUI/MainGUI.py:2736 flatcamGUI/MainGUI.py:2779 #: flatcamGUI/ObjectUI.py:109 msgid "Transformations" msgstr "Transformações" -#: flatcamGUI/FlatCAMGUI.py:1036 +#: flatcamGUI/MainGUI.py:1036 msgid "Move Objects " msgstr "Mover Objetos " -#: flatcamGUI/FlatCAMGUI.py:1044 flatcamGUI/FlatCAMGUI.py:2139 -#: flatcamGUI/FlatCAMGUI.py:2748 +#: flatcamGUI/MainGUI.py:1044 flatcamGUI/MainGUI.py:2139 +#: flatcamGUI/MainGUI.py:2748 msgid "Add Pad" msgstr "Adicionar Pad" -#: flatcamGUI/FlatCAMGUI.py:1048 flatcamGUI/FlatCAMGUI.py:2140 -#: flatcamGUI/FlatCAMGUI.py:2752 +#: flatcamGUI/MainGUI.py:1048 flatcamGUI/MainGUI.py:2140 +#: flatcamGUI/MainGUI.py:2752 msgid "Add Track" msgstr "Adicionar Trilha" -#: flatcamGUI/FlatCAMGUI.py:1050 flatcamGUI/FlatCAMGUI.py:2139 -#: flatcamGUI/FlatCAMGUI.py:2754 +#: flatcamGUI/MainGUI.py:1050 flatcamGUI/MainGUI.py:2139 +#: flatcamGUI/MainGUI.py:2754 msgid "Add Region" msgstr "Adicionar Região" -#: flatcamGUI/FlatCAMGUI.py:1052 flatcamGUI/FlatCAMGUI.py:2245 -#: flatcamGUI/FlatCAMGUI.py:2756 +#: flatcamGUI/MainGUI.py:1052 flatcamGUI/MainGUI.py:2245 +#: flatcamGUI/MainGUI.py:2756 msgid "Poligonize" msgstr "Poligonizar" -#: flatcamGUI/FlatCAMGUI.py:1055 flatcamGUI/FlatCAMGUI.py:2247 -#: flatcamGUI/FlatCAMGUI.py:2759 +#: flatcamGUI/MainGUI.py:1055 flatcamGUI/MainGUI.py:2247 +#: flatcamGUI/MainGUI.py:2759 msgid "SemiDisc" msgstr "SemiDisco" -#: flatcamGUI/FlatCAMGUI.py:1057 flatcamGUI/FlatCAMGUI.py:2249 -#: flatcamGUI/FlatCAMGUI.py:2761 +#: flatcamGUI/MainGUI.py:1057 flatcamGUI/MainGUI.py:2249 +#: flatcamGUI/MainGUI.py:2761 msgid "Disc" msgstr "Disco" -#: flatcamGUI/FlatCAMGUI.py:1065 flatcamGUI/FlatCAMGUI.py:2257 -#: flatcamGUI/FlatCAMGUI.py:2769 +#: flatcamGUI/MainGUI.py:1065 flatcamGUI/MainGUI.py:2257 +#: flatcamGUI/MainGUI.py:2769 msgid "Mark Area" msgstr "Marcar Área" -#: flatcamGUI/FlatCAMGUI.py:1079 flatcamGUI/FlatCAMGUI.py:2139 -#: flatcamGUI/FlatCAMGUI.py:2230 flatcamGUI/FlatCAMGUI.py:2293 -#: flatcamGUI/FlatCAMGUI.py:2782 flatcamTools/ToolMove.py:27 +#: flatcamGUI/MainGUI.py:1079 flatcamGUI/MainGUI.py:2139 +#: flatcamGUI/MainGUI.py:2230 flatcamGUI/MainGUI.py:2293 +#: flatcamGUI/MainGUI.py:2782 flatcamTools/ToolMove.py:27 msgid "Move" msgstr "Mover" -#: flatcamGUI/FlatCAMGUI.py:1087 flatcamGUI/FlatCAMGUI.py:2791 +#: flatcamGUI/MainGUI.py:1087 flatcamGUI/MainGUI.py:2791 msgid "Snap to grid" msgstr "Encaixar na Grade" -#: flatcamGUI/FlatCAMGUI.py:1090 flatcamGUI/FlatCAMGUI.py:2794 +#: flatcamGUI/MainGUI.py:1090 flatcamGUI/MainGUI.py:2794 msgid "Grid X snapping distance" msgstr "Distância de encaixe Grade X" -#: flatcamGUI/FlatCAMGUI.py:1095 flatcamGUI/FlatCAMGUI.py:2799 +#: flatcamGUI/MainGUI.py:1095 flatcamGUI/MainGUI.py:2799 msgid "Grid Y snapping distance" msgstr "Distância de encaixe Grade Y" -#: flatcamGUI/FlatCAMGUI.py:1101 flatcamGUI/FlatCAMGUI.py:2805 +#: flatcamGUI/MainGUI.py:1101 flatcamGUI/MainGUI.py:2805 msgid "" "When active, value on Grid_X\n" "is copied to the Grid_Y value." @@ -6293,65 +6293,65 @@ msgstr "" "Quando ativo, o valor em Grid_X\n" "é copiado para o valor Grid_Y." -#: flatcamGUI/FlatCAMGUI.py:1108 flatcamGUI/FlatCAMGUI.py:2812 +#: flatcamGUI/MainGUI.py:1108 flatcamGUI/MainGUI.py:2812 msgid "Snap to corner" msgstr "Encaixar no canto" -#: flatcamGUI/FlatCAMGUI.py:1112 flatcamGUI/FlatCAMGUI.py:2816 +#: flatcamGUI/MainGUI.py:1112 flatcamGUI/MainGUI.py:2816 #: flatcamGUI/preferences/general/GeneralAPPSetGroupUI.py:78 msgid "Max. magnet distance" msgstr "Distância magnética max." -#: flatcamGUI/FlatCAMGUI.py:1149 +#: flatcamGUI/MainGUI.py:1149 msgid "Selected" msgstr "Selecionado" -#: flatcamGUI/FlatCAMGUI.py:1177 flatcamGUI/FlatCAMGUI.py:1185 +#: flatcamGUI/MainGUI.py:1177 flatcamGUI/MainGUI.py:1185 msgid "Plot Area" msgstr "Área de Gráfico" -#: flatcamGUI/FlatCAMGUI.py:1212 +#: flatcamGUI/MainGUI.py:1212 msgid "General" msgstr "Geral" -#: flatcamGUI/FlatCAMGUI.py:1227 flatcamTools/ToolCopperThieving.py:74 +#: flatcamGUI/MainGUI.py:1227 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:1237 flatcamTools/ToolDblSided.py:92 +#: flatcamGUI/MainGUI.py:1237 flatcamTools/ToolDblSided.py:92 msgid "EXCELLON" msgstr "Excellon" -#: flatcamGUI/FlatCAMGUI.py:1247 flatcamTools/ToolDblSided.py:120 +#: flatcamGUI/MainGUI.py:1247 flatcamTools/ToolDblSided.py:120 msgid "GEOMETRY" msgstr "Geometria" -#: flatcamGUI/FlatCAMGUI.py:1257 +#: flatcamGUI/MainGUI.py:1257 msgid "CNC-JOB" msgstr "Trabalho CNC" -#: flatcamGUI/FlatCAMGUI.py:1266 flatcamGUI/ObjectUI.py:563 +#: flatcamGUI/MainGUI.py:1266 flatcamGUI/ObjectUI.py:563 #: flatcamGUI/ObjectUI.py:2132 msgid "TOOLS" msgstr "Ferramentas" -#: flatcamGUI/FlatCAMGUI.py:1275 +#: flatcamGUI/MainGUI.py:1275 msgid "TOOLS 2" msgstr "Ferramentas 2" -#: flatcamGUI/FlatCAMGUI.py:1285 +#: flatcamGUI/MainGUI.py:1285 msgid "UTILITIES" msgstr "Utilitários" -#: flatcamGUI/FlatCAMGUI.py:1302 +#: flatcamGUI/MainGUI.py:1302 #: flatcamGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:192 msgid "Restore Defaults" msgstr "Restaurar padrões" -#: flatcamGUI/FlatCAMGUI.py:1305 +#: flatcamGUI/MainGUI.py:1305 msgid "" "Restore the entire set of default values\n" "to the initial values loaded after first launch." @@ -6359,19 +6359,19 @@ msgstr "" "Restaurar todo o conjunto de valores padrão\n" "para os valores iniciais carregados após o primeiro lançamento." -#: flatcamGUI/FlatCAMGUI.py:1310 +#: flatcamGUI/MainGUI.py:1310 msgid "Open Pref Folder" msgstr "Abrir a Pasta Pref" -#: flatcamGUI/FlatCAMGUI.py:1313 +#: flatcamGUI/MainGUI.py:1313 msgid "Open the folder where FlatCAM save the preferences files." msgstr "Abre a pasta onde o FlatCAM salva os arquivos de preferências." -#: flatcamGUI/FlatCAMGUI.py:1317 flatcamGUI/FlatCAMGUI.py:2517 +#: flatcamGUI/MainGUI.py:1317 flatcamGUI/MainGUI.py:2517 msgid "Clear GUI Settings" msgstr "Limpar Config. da GUI" -#: flatcamGUI/FlatCAMGUI.py:1321 +#: flatcamGUI/MainGUI.py:1321 msgid "" "Clear the GUI settings for FlatCAM,\n" "such as: layout, gui state, style, hdpi support etc." @@ -6379,15 +6379,15 @@ msgstr "" "Limpa as configurações da GUI para FlatCAM,\n" "como: layout, estado de gui, estilo, suporte a HDPI etc." -#: flatcamGUI/FlatCAMGUI.py:1332 +#: flatcamGUI/MainGUI.py:1332 msgid "Apply" msgstr "Aplicar" -#: flatcamGUI/FlatCAMGUI.py:1335 +#: flatcamGUI/MainGUI.py:1335 msgid "Apply the current preferences without saving to a file." msgstr "Aplica as preferências atuais sem salvar em um arquivo." -#: flatcamGUI/FlatCAMGUI.py:1342 +#: flatcamGUI/MainGUI.py:1342 msgid "" "Save the current settings in the 'current_defaults' file\n" "which is the file storing the working default preferences." @@ -6395,215 +6395,215 @@ msgstr "" "Salva as configurações atuais no arquivo 'current_defaults'\n" "que armazena as preferências padrão de trabalho." -#: flatcamGUI/FlatCAMGUI.py:1350 +#: flatcamGUI/MainGUI.py:1350 msgid "Will not save the changes and will close the preferences window." msgstr "Não salvará as alterações e fechará a janela de preferências." -#: flatcamGUI/FlatCAMGUI.py:1719 +#: flatcamGUI/MainGUI.py:1719 msgid "SHOW SHORTCUT LIST" msgstr "Mostra Lista de Teclas de Atalho" -#: flatcamGUI/FlatCAMGUI.py:1719 +#: flatcamGUI/MainGUI.py:1719 msgid "Switch to Project Tab" msgstr "Alterna para a Aba Projeto" -#: flatcamGUI/FlatCAMGUI.py:1719 +#: flatcamGUI/MainGUI.py:1719 msgid "Switch to Selected Tab" msgstr "Alterna para a Aba Selecionado" -#: flatcamGUI/FlatCAMGUI.py:1720 +#: flatcamGUI/MainGUI.py:1720 msgid "Switch to Tool Tab" msgstr "Alterna para a Aba Ferramentas" -#: flatcamGUI/FlatCAMGUI.py:1721 +#: flatcamGUI/MainGUI.py:1721 msgid "New Gerber" msgstr "Novo Gerber" -#: flatcamGUI/FlatCAMGUI.py:1721 +#: flatcamGUI/MainGUI.py:1721 msgid "Edit Object (if selected)" msgstr "Editar Objeto (se selecionado)" -#: flatcamGUI/FlatCAMGUI.py:1721 +#: flatcamGUI/MainGUI.py:1721 msgid "Jump to Coordinates" msgstr "Ir para a Coordenada" -#: flatcamGUI/FlatCAMGUI.py:1722 +#: flatcamGUI/MainGUI.py:1722 msgid "New Excellon" msgstr "Novo Excellon" -#: flatcamGUI/FlatCAMGUI.py:1722 +#: flatcamGUI/MainGUI.py:1722 msgid "Move Obj" msgstr "Mover Obj" -#: flatcamGUI/FlatCAMGUI.py:1722 +#: flatcamGUI/MainGUI.py:1722 msgid "New Geometry" msgstr "Nova Geometria" -#: flatcamGUI/FlatCAMGUI.py:1722 +#: flatcamGUI/MainGUI.py:1722 msgid "Change Units" msgstr "Alternar Unidades" -#: flatcamGUI/FlatCAMGUI.py:1723 +#: flatcamGUI/MainGUI.py:1723 msgid "Open Properties Tool" msgstr "Abre Ferramenta Propriedades" -#: flatcamGUI/FlatCAMGUI.py:1723 +#: flatcamGUI/MainGUI.py:1723 msgid "Rotate by 90 degree CW" msgstr "Girar 90º sentido horário" -#: flatcamGUI/FlatCAMGUI.py:1723 +#: flatcamGUI/MainGUI.py:1723 msgid "Shell Toggle" msgstr "Alterna Linha de Comando" -#: flatcamGUI/FlatCAMGUI.py:1724 +#: flatcamGUI/MainGUI.py:1724 msgid "" "Add a Tool (when in Geometry Selected Tab or in Tools NCC or Tools Paint)" msgstr "" "Adicionar uma ferramenta (quando estiver na Aba Selecionado ou em " "Ferramentas NCC ou de Pintura)" -#: flatcamGUI/FlatCAMGUI.py:1725 +#: flatcamGUI/MainGUI.py:1725 msgid "Flip on X_axis" msgstr "Espelhar no Eixo X" -#: flatcamGUI/FlatCAMGUI.py:1725 +#: flatcamGUI/MainGUI.py:1725 msgid "Flip on Y_axis" msgstr "Espelhar no Eixo Y" -#: flatcamGUI/FlatCAMGUI.py:1728 +#: flatcamGUI/MainGUI.py:1728 msgid "Copy Obj" msgstr "Copiar Obj" -#: flatcamGUI/FlatCAMGUI.py:1728 +#: flatcamGUI/MainGUI.py:1728 msgid "Open Tools Database" msgstr "Abre Banco de Dados de Ferramentas" -#: flatcamGUI/FlatCAMGUI.py:1729 +#: flatcamGUI/MainGUI.py:1729 msgid "Open Excellon File" msgstr "Abrir Excellon" -#: flatcamGUI/FlatCAMGUI.py:1729 +#: flatcamGUI/MainGUI.py:1729 msgid "Open Gerber File" msgstr "Abrir Gerber" -#: flatcamGUI/FlatCAMGUI.py:1729 +#: flatcamGUI/MainGUI.py:1729 msgid "New Project" msgstr "Novo Projeto" -#: flatcamGUI/FlatCAMGUI.py:1730 flatcamTools/ToolPDF.py:42 +#: flatcamGUI/MainGUI.py:1730 flatcamTools/ToolPDF.py:42 msgid "PDF Import Tool" msgstr "Ferramenta de Importação de PDF" -#: flatcamGUI/FlatCAMGUI.py:1730 +#: flatcamGUI/MainGUI.py:1730 msgid "Save Project" msgstr "Salvar Projeto" -#: flatcamGUI/FlatCAMGUI.py:1730 +#: flatcamGUI/MainGUI.py:1730 msgid "Toggle Plot Area" msgstr "Alternar Área de Gráficos" -#: flatcamGUI/FlatCAMGUI.py:1733 +#: flatcamGUI/MainGUI.py:1733 msgid "Copy Obj_Name" msgstr "Copiar Obj_Name" -#: flatcamGUI/FlatCAMGUI.py:1734 +#: flatcamGUI/MainGUI.py:1734 msgid "Toggle Code Editor" msgstr "Alternar o Editor de Códigos" -#: flatcamGUI/FlatCAMGUI.py:1734 +#: flatcamGUI/MainGUI.py:1734 msgid "Toggle the axis" msgstr "Alternar o Eixo" -#: flatcamGUI/FlatCAMGUI.py:1734 flatcamGUI/FlatCAMGUI.py:1933 -#: flatcamGUI/FlatCAMGUI.py:2020 flatcamGUI/FlatCAMGUI.py:2142 +#: flatcamGUI/MainGUI.py:1734 flatcamGUI/MainGUI.py:1933 +#: flatcamGUI/MainGUI.py:2020 flatcamGUI/MainGUI.py:2142 msgid "Distance Minimum Tool" msgstr "Ferramenta Distância Mínima" -#: flatcamGUI/FlatCAMGUI.py:1735 +#: flatcamGUI/MainGUI.py:1735 msgid "Open Preferences Window" msgstr "Abrir Preferências" -#: flatcamGUI/FlatCAMGUI.py:1736 +#: flatcamGUI/MainGUI.py:1736 msgid "Rotate by 90 degree CCW" msgstr "Girar 90° sentido anti-horário" -#: flatcamGUI/FlatCAMGUI.py:1736 +#: flatcamGUI/MainGUI.py:1736 msgid "Run a Script" msgstr "Executar um Script" -#: flatcamGUI/FlatCAMGUI.py:1736 +#: flatcamGUI/MainGUI.py:1736 msgid "Toggle the workspace" msgstr "Alternar Área de Trabalho" -#: flatcamGUI/FlatCAMGUI.py:1736 +#: flatcamGUI/MainGUI.py:1736 msgid "Skew on X axis" msgstr "Inclinação no eixo X" -#: flatcamGUI/FlatCAMGUI.py:1737 +#: flatcamGUI/MainGUI.py:1737 msgid "Skew on Y axis" msgstr "Inclinação no eixo Y" -#: flatcamGUI/FlatCAMGUI.py:1740 +#: flatcamGUI/MainGUI.py:1740 msgid "2-Sided PCB Tool" msgstr "PCB 2 Faces" -#: flatcamGUI/FlatCAMGUI.py:1740 +#: flatcamGUI/MainGUI.py:1740 msgid "Transformations Tool" msgstr "Transformações" -#: flatcamGUI/FlatCAMGUI.py:1742 +#: flatcamGUI/MainGUI.py:1742 msgid "Solder Paste Dispensing Tool" msgstr "Pasta de Solda" -#: flatcamGUI/FlatCAMGUI.py:1743 +#: flatcamGUI/MainGUI.py:1743 msgid "Film PCB Tool" msgstr "Ferramenta de Filme PCB" -#: flatcamGUI/FlatCAMGUI.py:1743 +#: flatcamGUI/MainGUI.py:1743 msgid "Non-Copper Clearing Tool" msgstr "Área Sem Cobre (NCC)" -#: flatcamGUI/FlatCAMGUI.py:1744 +#: flatcamGUI/MainGUI.py:1744 msgid "Paint Area Tool" msgstr "Área de Pintura" -#: flatcamGUI/FlatCAMGUI.py:1744 +#: flatcamGUI/MainGUI.py:1744 msgid "Rules Check Tool" msgstr "Ferramenta de Verificação de Regras" -#: flatcamGUI/FlatCAMGUI.py:1745 +#: flatcamGUI/MainGUI.py:1745 msgid "View File Source" msgstr "Ver Arquivo Fonte" -#: flatcamGUI/FlatCAMGUI.py:1746 +#: flatcamGUI/MainGUI.py:1746 msgid "Cutout PCB Tool" msgstr "Ferramenta de Recorte" -#: flatcamGUI/FlatCAMGUI.py:1746 +#: flatcamGUI/MainGUI.py:1746 msgid "Enable all Plots" msgstr "Habilitar todos os Gráficos" -#: flatcamGUI/FlatCAMGUI.py:1746 +#: flatcamGUI/MainGUI.py:1746 msgid "Disable all Plots" msgstr "Desabilitar todos os Gráficos" -#: flatcamGUI/FlatCAMGUI.py:1746 +#: flatcamGUI/MainGUI.py:1746 msgid "Disable Non-selected Plots" msgstr "Desabilitar os gráficos não selecionados" -#: flatcamGUI/FlatCAMGUI.py:1747 +#: flatcamGUI/MainGUI.py:1747 msgid "Toggle Full Screen" msgstr "Alternar Tela Cheia" -#: flatcamGUI/FlatCAMGUI.py:1750 +#: flatcamGUI/MainGUI.py:1750 msgid "Abort current task (gracefully)" msgstr "Abortar a tarefa atual (normalmente)" -#: flatcamGUI/FlatCAMGUI.py:1753 +#: flatcamGUI/MainGUI.py:1753 msgid "Save Project As" msgstr "Salvar Projeto Como" -#: flatcamGUI/FlatCAMGUI.py:1754 +#: flatcamGUI/MainGUI.py:1754 msgid "" "Paste Special. Will convert a Windows path style to the one required in Tcl " "Shell" @@ -6611,245 +6611,245 @@ msgstr "" "Colar Especial. Converterá um estilo de caminho do Windows para o exigido na " "Linha de Comando Tcl" -#: flatcamGUI/FlatCAMGUI.py:1757 +#: flatcamGUI/MainGUI.py:1757 msgid "Open Online Manual" msgstr "Abrir Manual Online" -#: flatcamGUI/FlatCAMGUI.py:1758 +#: flatcamGUI/MainGUI.py:1758 msgid "Open Online Tutorials" msgstr "Abrir Tutoriais Online" -#: flatcamGUI/FlatCAMGUI.py:1758 +#: flatcamGUI/MainGUI.py:1758 msgid "Refresh Plots" msgstr "Atualizar Gráfico" -#: flatcamGUI/FlatCAMGUI.py:1758 flatcamTools/ToolSolderPaste.py:509 +#: flatcamGUI/MainGUI.py:1758 flatcamTools/ToolSolderPaste.py:509 msgid "Delete Object" msgstr "Excluir Objeto" -#: flatcamGUI/FlatCAMGUI.py:1758 +#: flatcamGUI/MainGUI.py:1758 msgid "Alternate: Delete Tool" msgstr "Alternativo: Excluir Ferramenta" -#: flatcamGUI/FlatCAMGUI.py:1759 +#: flatcamGUI/MainGUI.py:1759 msgid "(left to Key_1)Toggle Notebook Area (Left Side)" msgstr "(esquerda da Tecla_1) Alterna Área do Bloco de Notas (lado esquerdo)" -#: flatcamGUI/FlatCAMGUI.py:1759 +#: flatcamGUI/MainGUI.py:1759 msgid "En(Dis)able Obj Plot" msgstr "Des(h)abilitar Gráfico" -#: flatcamGUI/FlatCAMGUI.py:1760 +#: flatcamGUI/MainGUI.py:1760 msgid "Deselects all objects" msgstr "Desmarca todos os objetos" -#: flatcamGUI/FlatCAMGUI.py:1774 +#: flatcamGUI/MainGUI.py:1774 msgid "Editor Shortcut list" msgstr "Lista de Teclas de Atalho" -#: flatcamGUI/FlatCAMGUI.py:1928 +#: flatcamGUI/MainGUI.py:1928 msgid "GEOMETRY EDITOR" msgstr "Editor de Geometria" -#: flatcamGUI/FlatCAMGUI.py:1928 +#: flatcamGUI/MainGUI.py:1928 msgid "Draw an Arc" msgstr "Desenha um Arco" -#: flatcamGUI/FlatCAMGUI.py:1928 +#: flatcamGUI/MainGUI.py:1928 msgid "Copy Geo Item" msgstr "Copiar Geo" -#: flatcamGUI/FlatCAMGUI.py:1929 +#: flatcamGUI/MainGUI.py:1929 msgid "Within Add Arc will toogle the ARC direction: CW or CCW" msgstr "Em Adicionar Arco, alterna o sentido: horário ou anti-horário" -#: flatcamGUI/FlatCAMGUI.py:1929 +#: flatcamGUI/MainGUI.py:1929 msgid "Polygon Intersection Tool" msgstr "Interseção de Polígonos" -#: flatcamGUI/FlatCAMGUI.py:1930 +#: flatcamGUI/MainGUI.py:1930 msgid "Geo Paint Tool" msgstr "Ferramenta de Pintura" -#: flatcamGUI/FlatCAMGUI.py:1930 flatcamGUI/FlatCAMGUI.py:2019 -#: flatcamGUI/FlatCAMGUI.py:2139 +#: flatcamGUI/MainGUI.py:1930 flatcamGUI/MainGUI.py:2019 +#: flatcamGUI/MainGUI.py:2139 msgid "Jump to Location (x, y)" msgstr "Ir para a Localização (x, y)" -#: flatcamGUI/FlatCAMGUI.py:1930 +#: flatcamGUI/MainGUI.py:1930 msgid "Toggle Corner Snap" msgstr "Alternar Encaixe de Canto" -#: flatcamGUI/FlatCAMGUI.py:1930 +#: flatcamGUI/MainGUI.py:1930 msgid "Move Geo Item" msgstr "Mover Geometria" -#: flatcamGUI/FlatCAMGUI.py:1931 +#: flatcamGUI/MainGUI.py:1931 msgid "Within Add Arc will cycle through the ARC modes" msgstr "Em Adicionar Arco, alterna o tipo de arco" -#: flatcamGUI/FlatCAMGUI.py:1931 +#: flatcamGUI/MainGUI.py:1931 msgid "Draw a Polygon" msgstr "Desenha um Polígono" -#: flatcamGUI/FlatCAMGUI.py:1931 +#: flatcamGUI/MainGUI.py:1931 msgid "Draw a Circle" msgstr "Desenha um Círculo" -#: flatcamGUI/FlatCAMGUI.py:1932 +#: flatcamGUI/MainGUI.py:1932 msgid "Draw a Path" msgstr "Desenha um Caminho" -#: flatcamGUI/FlatCAMGUI.py:1932 +#: flatcamGUI/MainGUI.py:1932 msgid "Draw Rectangle" msgstr "Desenha um Retângulo" -#: flatcamGUI/FlatCAMGUI.py:1932 +#: flatcamGUI/MainGUI.py:1932 msgid "Polygon Subtraction Tool" msgstr "Ferram. de Subtração de Polígono" -#: flatcamGUI/FlatCAMGUI.py:1932 +#: flatcamGUI/MainGUI.py:1932 msgid "Add Text Tool" msgstr "Ferramenta de Texto" -#: flatcamGUI/FlatCAMGUI.py:1933 +#: flatcamGUI/MainGUI.py:1933 msgid "Polygon Union Tool" msgstr "União de Polígonos" -#: flatcamGUI/FlatCAMGUI.py:1933 +#: flatcamGUI/MainGUI.py:1933 msgid "Flip shape on X axis" msgstr "Espelhar no Eixo X" -#: flatcamGUI/FlatCAMGUI.py:1933 +#: flatcamGUI/MainGUI.py:1933 msgid "Flip shape on Y axis" msgstr "Espelhar no Eixo Y" -#: flatcamGUI/FlatCAMGUI.py:1934 +#: flatcamGUI/MainGUI.py:1934 msgid "Skew shape on X axis" msgstr "Inclinação no eixo X" -#: flatcamGUI/FlatCAMGUI.py:1934 +#: flatcamGUI/MainGUI.py:1934 msgid "Skew shape on Y axis" msgstr "Inclinação no eixo Y" -#: flatcamGUI/FlatCAMGUI.py:1934 +#: flatcamGUI/MainGUI.py:1934 msgid "Editor Transformation Tool" msgstr "Ferramenta Transformar" -#: flatcamGUI/FlatCAMGUI.py:1935 +#: flatcamGUI/MainGUI.py:1935 msgid "Offset shape on X axis" msgstr "Deslocamento no eixo X" -#: flatcamGUI/FlatCAMGUI.py:1935 +#: flatcamGUI/MainGUI.py:1935 msgid "Offset shape on Y axis" msgstr "Deslocamento no eixo Y" -#: flatcamGUI/FlatCAMGUI.py:1936 flatcamGUI/FlatCAMGUI.py:2022 -#: flatcamGUI/FlatCAMGUI.py:2144 +#: flatcamGUI/MainGUI.py:1936 flatcamGUI/MainGUI.py:2022 +#: flatcamGUI/MainGUI.py:2144 msgid "Save Object and Exit Editor" msgstr "Salvar Objeto e Fechar o Editor" -#: flatcamGUI/FlatCAMGUI.py:1936 +#: flatcamGUI/MainGUI.py:1936 msgid "Polygon Cut Tool" msgstr "Corte de Polígonos" -#: flatcamGUI/FlatCAMGUI.py:1937 +#: flatcamGUI/MainGUI.py:1937 msgid "Rotate Geometry" msgstr "Girar Geometria" -#: flatcamGUI/FlatCAMGUI.py:1937 +#: flatcamGUI/MainGUI.py:1937 msgid "Finish drawing for certain tools" msgstr "Concluir desenho para certas ferramentas" -#: flatcamGUI/FlatCAMGUI.py:1937 flatcamGUI/FlatCAMGUI.py:2022 -#: flatcamGUI/FlatCAMGUI.py:2142 +#: flatcamGUI/MainGUI.py:1937 flatcamGUI/MainGUI.py:2022 +#: flatcamGUI/MainGUI.py:2142 msgid "Abort and return to Select" msgstr "Abortar e retornar à Seleção" -#: flatcamGUI/FlatCAMGUI.py:1938 flatcamGUI/FlatCAMGUI.py:2734 +#: flatcamGUI/MainGUI.py:1938 flatcamGUI/MainGUI.py:2734 msgid "Delete Shape" msgstr "Excluir Forma" -#: flatcamGUI/FlatCAMGUI.py:2018 +#: flatcamGUI/MainGUI.py:2018 msgid "EXCELLON EDITOR" msgstr "Editor Excellon" -#: flatcamGUI/FlatCAMGUI.py:2018 +#: flatcamGUI/MainGUI.py:2018 msgid "Copy Drill(s)" msgstr "Copiar Furo(s)" -#: flatcamGUI/FlatCAMGUI.py:2018 flatcamGUI/FlatCAMGUI.py:2268 +#: flatcamGUI/MainGUI.py:2018 flatcamGUI/MainGUI.py:2268 msgid "Add Drill" msgstr "Adicionar Furo" -#: flatcamGUI/FlatCAMGUI.py:2019 +#: flatcamGUI/MainGUI.py:2019 msgid "Move Drill(s)" msgstr "Mover Furo(s)" -#: flatcamGUI/FlatCAMGUI.py:2020 +#: flatcamGUI/MainGUI.py:2020 msgid "Add a new Tool" msgstr "Adicionar Ferramenta" -#: flatcamGUI/FlatCAMGUI.py:2021 +#: flatcamGUI/MainGUI.py:2021 msgid "Delete Drill(s)" msgstr "Excluir Furo(s)" -#: flatcamGUI/FlatCAMGUI.py:2021 +#: flatcamGUI/MainGUI.py:2021 msgid "Alternate: Delete Tool(s)" msgstr "Alternativo: Excluir Ferramenta(s)" -#: flatcamGUI/FlatCAMGUI.py:2138 +#: flatcamGUI/MainGUI.py:2138 msgid "GERBER EDITOR" msgstr "Editor Gerber" -#: flatcamGUI/FlatCAMGUI.py:2138 +#: flatcamGUI/MainGUI.py:2138 msgid "Add Disc" msgstr "Adicionar Disco" -#: flatcamGUI/FlatCAMGUI.py:2138 +#: flatcamGUI/MainGUI.py:2138 msgid "Add SemiDisc" msgstr "Adicionar SemiDisco" -#: flatcamGUI/FlatCAMGUI.py:2140 +#: flatcamGUI/MainGUI.py:2140 msgid "Within Track & Region Tools will cycle in REVERSE the bend modes" msgstr "" "Nas Ferramentas de Trilha e Região, alternará REVERSAMENTE entre os modos" -#: flatcamGUI/FlatCAMGUI.py:2141 +#: flatcamGUI/MainGUI.py:2141 msgid "Within Track & Region Tools will cycle FORWARD the bend modes" msgstr "" "Nas Ferramentas de Trilha e Região, alternará para frente entre os modos" -#: flatcamGUI/FlatCAMGUI.py:2142 +#: flatcamGUI/MainGUI.py:2142 msgid "Alternate: Delete Apertures" msgstr "Alternativo: Excluir Abertura" -#: flatcamGUI/FlatCAMGUI.py:2143 +#: flatcamGUI/MainGUI.py:2143 msgid "Eraser Tool" msgstr "Ferramenta Apagar" -#: flatcamGUI/FlatCAMGUI.py:2144 +#: flatcamGUI/MainGUI.py:2144 #: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:220 msgid "Mark Area Tool" msgstr "Marcar Área" -#: flatcamGUI/FlatCAMGUI.py:2144 +#: flatcamGUI/MainGUI.py:2144 msgid "Poligonize Tool" msgstr "Poligonizar" -#: flatcamGUI/FlatCAMGUI.py:2144 +#: flatcamGUI/MainGUI.py:2144 msgid "Transformation Tool" msgstr "Ferramenta Transformação" -#: flatcamGUI/FlatCAMGUI.py:2161 +#: flatcamGUI/MainGUI.py:2161 msgid "Toggle Visibility" msgstr "Alternar Visibilidade" -#: flatcamGUI/FlatCAMGUI.py:2167 +#: flatcamGUI/MainGUI.py:2167 msgid "New" msgstr "Novo" -#: flatcamGUI/FlatCAMGUI.py:2169 flatcamGUI/ObjectUI.py:450 +#: flatcamGUI/MainGUI.py:2169 flatcamGUI/ObjectUI.py:450 #: flatcamObjects/FlatCAMGerber.py:239 flatcamObjects/FlatCAMGerber.py:327 #: flatcamTools/ToolCalibration.py:631 flatcamTools/ToolCalibration.py:648 #: flatcamTools/ToolCalibration.py:815 flatcamTools/ToolCopperThieving.py:144 @@ -6866,7 +6866,7 @@ msgstr "Novo" msgid "Geometry" msgstr "Geometria" -#: flatcamGUI/FlatCAMGUI.py:2173 +#: flatcamGUI/MainGUI.py:2173 #: flatcamGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:99 #: flatcamTools/ToolAlignObjects.py:74 flatcamTools/ToolAlignObjects.py:110 #: flatcamTools/ToolCalibration.py:197 flatcamTools/ToolCalibration.py:631 @@ -6881,76 +6881,76 @@ msgstr "Geometria" msgid "Excellon" msgstr "Excellon" -#: flatcamGUI/FlatCAMGUI.py:2180 +#: flatcamGUI/MainGUI.py:2180 msgid "Grids" msgstr "Grades" -#: flatcamGUI/FlatCAMGUI.py:2187 +#: flatcamGUI/MainGUI.py:2187 msgid "Clear Plot" msgstr "Limpar Gráfico" -#: flatcamGUI/FlatCAMGUI.py:2189 +#: flatcamGUI/MainGUI.py:2189 msgid "Replot" msgstr "Redesenhar" -#: flatcamGUI/FlatCAMGUI.py:2193 +#: flatcamGUI/MainGUI.py:2193 msgid "Geo Editor" msgstr "Editor de Geometria" -#: flatcamGUI/FlatCAMGUI.py:2195 +#: flatcamGUI/MainGUI.py:2195 msgid "Path" msgstr "Caminho" -#: flatcamGUI/FlatCAMGUI.py:2197 +#: flatcamGUI/MainGUI.py:2197 msgid "Rectangle" msgstr "Retângulo" -#: flatcamGUI/FlatCAMGUI.py:2200 +#: flatcamGUI/MainGUI.py:2200 msgid "Circle" msgstr "Círculo" -#: flatcamGUI/FlatCAMGUI.py:2204 +#: flatcamGUI/MainGUI.py:2204 msgid "Arc" msgstr "Arco" -#: flatcamGUI/FlatCAMGUI.py:2218 +#: flatcamGUI/MainGUI.py:2218 msgid "Union" msgstr "União" -#: flatcamGUI/FlatCAMGUI.py:2220 +#: flatcamGUI/MainGUI.py:2220 msgid "Intersection" msgstr "Interseção" -#: flatcamGUI/FlatCAMGUI.py:2222 +#: flatcamGUI/MainGUI.py:2222 msgid "Subtraction" msgstr "Substração" -#: flatcamGUI/FlatCAMGUI.py:2224 flatcamGUI/ObjectUI.py:2221 +#: flatcamGUI/MainGUI.py:2224 flatcamGUI/ObjectUI.py:2221 #: flatcamGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:56 msgid "Cut" msgstr "Cortar" -#: flatcamGUI/FlatCAMGUI.py:2235 +#: flatcamGUI/MainGUI.py:2235 msgid "Pad" msgstr "Pad" -#: flatcamGUI/FlatCAMGUI.py:2237 +#: flatcamGUI/MainGUI.py:2237 msgid "Pad Array" msgstr "Matriz de Pads" -#: flatcamGUI/FlatCAMGUI.py:2241 +#: flatcamGUI/MainGUI.py:2241 msgid "Track" msgstr "Trilha" -#: flatcamGUI/FlatCAMGUI.py:2243 +#: flatcamGUI/MainGUI.py:2243 msgid "Region" msgstr "Região" -#: flatcamGUI/FlatCAMGUI.py:2266 +#: flatcamGUI/MainGUI.py:2266 msgid "Exc Editor" msgstr "Editor Exc" -#: flatcamGUI/FlatCAMGUI.py:2311 +#: flatcamGUI/MainGUI.py:2311 msgid "" "Relative measurement.\n" "Reference is last click position" @@ -6958,7 +6958,7 @@ msgstr "" "Medição relativa.\n" "Em relação à posição do último clique" -#: flatcamGUI/FlatCAMGUI.py:2317 +#: flatcamGUI/MainGUI.py:2317 msgid "" "Absolute measurement.\n" "Reference is (X=0, Y= 0) position" @@ -6966,35 +6966,35 @@ msgstr "" "Medição absoluta.\n" "Em relação à posição (X=0, Y=0)" -#: flatcamGUI/FlatCAMGUI.py:2419 +#: flatcamGUI/MainGUI.py:2419 msgid "Lock Toolbars" msgstr "Travar Barras de Ferramentas" -#: flatcamGUI/FlatCAMGUI.py:2505 +#: flatcamGUI/MainGUI.py:2505 msgid "FlatCAM Preferences Folder opened." msgstr "Pasta com Preferências FlatCAM aberta." -#: flatcamGUI/FlatCAMGUI.py:2516 +#: flatcamGUI/MainGUI.py:2516 msgid "Are you sure you want to delete the GUI Settings? \n" msgstr "Você tem certeza de que deseja excluir as configurações da GUI? \n" -#: flatcamGUI/FlatCAMGUI.py:2624 +#: flatcamGUI/MainGUI.py:2624 msgid "&Cutout Tool" msgstr "Ferramenta de Re&corte" -#: flatcamGUI/FlatCAMGUI.py:2694 +#: flatcamGUI/MainGUI.py:2694 msgid "Select 'Esc'" msgstr "Selecionar 'Esc'" -#: flatcamGUI/FlatCAMGUI.py:2732 +#: flatcamGUI/MainGUI.py:2732 msgid "Copy Objects" msgstr "Copiar Objetos" -#: flatcamGUI/FlatCAMGUI.py:2740 +#: flatcamGUI/MainGUI.py:2740 msgid "Move Objects" msgstr "Mover Objetos" -#: flatcamGUI/FlatCAMGUI.py:3363 +#: flatcamGUI/MainGUI.py:3363 msgid "" "Please first select a geometry item to be cutted\n" "then select the geometry item that will be cutted\n" @@ -7006,12 +7006,12 @@ msgstr "" "fora do primeiro item. No final, pressione a tecla ~X~ ou\n" "o botão da barra de ferramentas." -#: flatcamGUI/FlatCAMGUI.py:3370 flatcamGUI/FlatCAMGUI.py:3532 -#: flatcamGUI/FlatCAMGUI.py:3577 flatcamGUI/FlatCAMGUI.py:3597 +#: flatcamGUI/MainGUI.py:3370 flatcamGUI/MainGUI.py:3532 +#: flatcamGUI/MainGUI.py:3577 flatcamGUI/MainGUI.py:3597 msgid "Warning" msgstr "Aviso" -#: flatcamGUI/FlatCAMGUI.py:3527 +#: flatcamGUI/MainGUI.py:3527 msgid "" "Please select geometry items \n" "on which to perform Intersection Tool." @@ -7019,7 +7019,7 @@ msgstr "" "Por favor, selecione itens de geometria\n" "para executar a ferramenta de interseção." -#: flatcamGUI/FlatCAMGUI.py:3572 +#: flatcamGUI/MainGUI.py:3572 msgid "" "Please select geometry items \n" "on which to perform Substraction Tool." @@ -7027,7 +7027,7 @@ msgstr "" "Por favor, selecione itens de geometria\n" "para executar a ferramenta de subtração." -#: flatcamGUI/FlatCAMGUI.py:3592 +#: flatcamGUI/MainGUI.py:3592 msgid "" "Please select geometry items \n" "on which to perform union." @@ -7035,52 +7035,52 @@ msgstr "" "Por favor, selecione itens de geometria\n" "para executar a ferramenta de união." -#: flatcamGUI/FlatCAMGUI.py:3675 flatcamGUI/FlatCAMGUI.py:3890 +#: flatcamGUI/MainGUI.py:3675 flatcamGUI/MainGUI.py:3890 msgid "Cancelled. Nothing selected to delete." msgstr "Cancelado. Nada selecionado para excluir." -#: flatcamGUI/FlatCAMGUI.py:3759 flatcamGUI/FlatCAMGUI.py:4006 +#: flatcamGUI/MainGUI.py:3759 flatcamGUI/MainGUI.py:4006 msgid "Cancelled. Nothing selected to copy." msgstr "Cancelado. Nada selecionado para copiar." -#: flatcamGUI/FlatCAMGUI.py:3805 flatcamGUI/FlatCAMGUI.py:4035 +#: flatcamGUI/MainGUI.py:3805 flatcamGUI/MainGUI.py:4035 msgid "Cancelled. Nothing selected to move." msgstr "Cancelado. Nada selecionado para mover." -#: flatcamGUI/FlatCAMGUI.py:4061 +#: flatcamGUI/MainGUI.py:4061 msgid "New Tool ..." msgstr "Nova Ferramenta ..." -#: flatcamGUI/FlatCAMGUI.py:4062 flatcamTools/ToolNCC.py:924 +#: flatcamGUI/MainGUI.py:4062 flatcamTools/ToolNCC.py:924 #: flatcamTools/ToolPaint.py:850 flatcamTools/ToolSolderPaste.py:560 msgid "Enter a Tool Diameter" msgstr "Digite um diâmetro de ferramenta" -#: flatcamGUI/FlatCAMGUI.py:4074 +#: flatcamGUI/MainGUI.py:4074 msgid "Adding Tool cancelled ..." msgstr "Adicionar ferramenta cancelado ..." -#: flatcamGUI/FlatCAMGUI.py:4088 +#: flatcamGUI/MainGUI.py:4088 msgid "Distance Tool exit..." msgstr "Sair da ferramenta de medição ..." -#: flatcamGUI/FlatCAMGUI.py:4323 flatcamGUI/FlatCAMGUI.py:4330 +#: flatcamGUI/MainGUI.py:4323 flatcamGUI/MainGUI.py:4330 msgid "Idle." msgstr "Ocioso." -#: flatcamGUI/FlatCAMGUI.py:4361 +#: flatcamGUI/MainGUI.py:4361 msgid "Application started ..." msgstr "Aplicativo iniciado ..." -#: flatcamGUI/FlatCAMGUI.py:4362 +#: flatcamGUI/MainGUI.py:4362 msgid "Hello!" msgstr "Olá!" -#: flatcamGUI/FlatCAMGUI.py:4424 +#: flatcamGUI/MainGUI.py:4424 msgid "Open Project ..." msgstr "Abrir Projeto ..." -#: flatcamGUI/FlatCAMGUI.py:4450 +#: flatcamGUI/MainGUI.py:4450 msgid "Exit" msgstr "Sair" diff --git a/locale/ro/LC_MESSAGES/strings.po b/locale/ro/LC_MESSAGES/strings.po index 3bdd2846..dd89ac4a 100644 --- a/locale/ro/LC_MESSAGES/strings.po +++ b/locale/ro/LC_MESSAGES/strings.po @@ -71,8 +71,8 @@ msgstr "" #: FlatCAMDB.py:709 FlatCAMDB.py:2125 FlatCAMDB.py:2171 #: flatcamEditors/FlatCAMExcEditor.py:1023 #: flatcamEditors/FlatCAMExcEditor.py:1091 -#: flatcamEditors/FlatCAMTextEditor.py:223 flatcamGUI/FlatCAMGUI.py:3443 -#: flatcamGUI/FlatCAMGUI.py:3659 flatcamGUI/FlatCAMGUI.py:3874 +#: flatcamEditors/FlatCAMTextEditor.py:223 flatcamGUI/MainGUI.py:3443 +#: flatcamGUI/MainGUI.py:3659 flatcamGUI/MainGUI.py:3874 #: flatcamObjects/ObjectCollection.py:126 flatcamTools/ToolFilm.py:754 #: flatcamTools/ToolFilm.py:900 flatcamTools/ToolImage.py:247 #: flatcamTools/ToolMove.py:269 flatcamTools/ToolPcbWizard.py:301 @@ -123,20 +123,20 @@ msgstr "Editorul este activ ..." msgid "Do you want to save the edited object?" msgstr "Vrei sa salvezi obiectul editat?" -#: FlatCAMApp.py:2226 flatcamGUI/FlatCAMGUI.py:2288 +#: FlatCAMApp.py:2226 flatcamGUI/MainGUI.py:2288 msgid "Close Editor" msgstr "Inchide Editorul" #: FlatCAMApp.py:2229 FlatCAMApp.py:3518 FlatCAMApp.py:6085 FlatCAMApp.py:7345 #: FlatCAMTranslation.py:109 FlatCAMTranslation.py:207 -#: flatcamGUI/FlatCAMGUI.py:2519 +#: flatcamGUI/MainGUI.py:2519 #: flatcamGUI/preferences/PreferencesUIManager.py:1122 msgid "Yes" msgstr "Da" #: FlatCAMApp.py:2230 FlatCAMApp.py:3519 FlatCAMApp.py:6086 FlatCAMApp.py:7346 #: FlatCAMTranslation.py:110 FlatCAMTranslation.py:208 -#: flatcamGUI/FlatCAMGUI.py:2520 +#: flatcamGUI/MainGUI.py:2520 #: flatcamGUI/preferences/PreferencesUIManager.py:1123 #: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:164 #: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:150 @@ -146,7 +146,7 @@ msgstr "Nu" #: FlatCAMApp.py:2231 FlatCAMApp.py:3520 FlatCAMApp.py:4478 FlatCAMApp.py:5103 #: FlatCAMApp.py:7347 FlatCAMDB.py:128 FlatCAMDB.py:1689 -#: flatcamGUI/FlatCAMGUI.py:1347 +#: flatcamGUI/MainGUI.py:1347 msgid "Cancel" msgstr "Anuleaza" @@ -281,7 +281,7 @@ msgstr "creat / selectat" msgid "Plotting" msgstr "Se afișeaz" -#: FlatCAMApp.py:3090 flatcamGUI/FlatCAMGUI.py:545 +#: FlatCAMApp.py:3090 flatcamGUI/MainGUI.py:545 msgid "About FlatCAM" msgstr "Despre FlatCAM" @@ -427,7 +427,7 @@ msgstr "Traducător" msgid "Corrections" msgstr "Corecţii" -#: FlatCAMApp.py:3455 FlatCAMApp.py:3464 flatcamGUI/FlatCAMGUI.py:527 +#: FlatCAMApp.py:3455 FlatCAMApp.py:3464 flatcamGUI/MainGUI.py:527 msgid "Bookmarks Manager" msgstr "Bookmarks Manager" @@ -455,7 +455,7 @@ msgstr "" msgid "Alternative website" msgstr "Site alternativ" -#: FlatCAMApp.py:3508 flatcamGUI/FlatCAMGUI.py:4267 +#: FlatCAMApp.py:3508 flatcamGUI/MainGUI.py:4267 msgid "Application is saving the project. Please wait ..." msgstr "Aplicația salvează proiectul. Vă rugăm aşteptați ..." @@ -662,8 +662,8 @@ msgstr "Coordonate gresite. Introduceți coordonatele in format X,Y" #: flatcamEditors/FlatCAMGrbEditor.py:1490 #: flatcamEditors/FlatCAMGrbEditor.py:1759 #: flatcamEditors/FlatCAMGrbEditor.py:4622 -#: flatcamEditors/FlatCAMGrbEditor.py:4637 flatcamGUI/FlatCAMGUI.py:3424 -#: flatcamGUI/FlatCAMGUI.py:3436 flatcamTools/ToolAlignObjects.py:393 +#: flatcamEditors/FlatCAMGrbEditor.py:4637 flatcamGUI/MainGUI.py:3424 +#: flatcamGUI/MainGUI.py:3436 flatcamTools/ToolAlignObjects.py:393 #: flatcamTools/ToolAlignObjects.py:415 msgid "Done." msgstr "Executat." @@ -813,12 +813,12 @@ msgstr "Nici-un obiect nu este selectat pentru Deformare pe axa Y." msgid "Skew on Y axis done." msgstr "Deformare pe axa Y terminată." -#: FlatCAMApp.py:6497 FlatCAMApp.py:6544 flatcamGUI/FlatCAMGUI.py:503 -#: flatcamGUI/FlatCAMGUI.py:1728 +#: FlatCAMApp.py:6497 FlatCAMApp.py:6544 flatcamGUI/MainGUI.py:503 +#: flatcamGUI/MainGUI.py:1728 msgid "Select All" msgstr "Selectează toate" -#: FlatCAMApp.py:6501 FlatCAMApp.py:6548 flatcamGUI/FlatCAMGUI.py:505 +#: FlatCAMApp.py:6501 FlatCAMApp.py:6548 flatcamGUI/MainGUI.py:505 msgid "Deselect All" msgstr "Deselectează toate" @@ -830,7 +830,7 @@ msgstr "Totate obiectele sunt selectate." msgid "Objects selection is cleared." msgstr "Nici-un obiect nu este selectat." -#: FlatCAMApp.py:6594 flatcamGUI/FlatCAMGUI.py:1721 +#: FlatCAMApp.py:6594 flatcamGUI/MainGUI.py:1721 msgid "Grid On/Off" msgstr "Grid On/Off" @@ -846,9 +846,9 @@ msgid "Add" msgstr "Adaugă" #: FlatCAMApp.py:6608 flatcamEditors/FlatCAMGrbEditor.py:2588 -#: flatcamEditors/FlatCAMGrbEditor.py:2736 flatcamGUI/FlatCAMGUI.py:751 -#: flatcamGUI/FlatCAMGUI.py:1074 flatcamGUI/FlatCAMGUI.py:2141 -#: flatcamGUI/FlatCAMGUI.py:2284 flatcamGUI/FlatCAMGUI.py:2777 +#: flatcamEditors/FlatCAMGrbEditor.py:2736 flatcamGUI/MainGUI.py:751 +#: flatcamGUI/MainGUI.py:1074 flatcamGUI/MainGUI.py:2141 +#: flatcamGUI/MainGUI.py:2284 flatcamGUI/MainGUI.py:2777 #: flatcamGUI/ObjectUI.py:1623 flatcamObjects/FlatCAMGeometry.py:505 #: flatcamTools/ToolNCC.py:316 flatcamTools/ToolNCC.py:637 #: flatcamTools/ToolPaint.py:299 flatcamTools/ToolPaint.py:682 @@ -932,8 +932,8 @@ msgstr "" msgid "New Project created" msgstr "Un nou Proiect a fost creat" -#: FlatCAMApp.py:7519 FlatCAMApp.py:7523 flatcamGUI/FlatCAMGUI.py:836 -#: flatcamGUI/FlatCAMGUI.py:2544 +#: FlatCAMApp.py:7519 FlatCAMApp.py:7523 flatcamGUI/MainGUI.py:836 +#: flatcamGUI/MainGUI.py:2544 msgid "Open Gerber" msgstr "Încarcă Gerber" @@ -950,8 +950,8 @@ msgstr "" msgid "Opening Gerber file." msgstr "Se incarcă un fişier Gerber." -#: FlatCAMApp.py:7557 FlatCAMApp.py:7561 flatcamGUI/FlatCAMGUI.py:838 -#: flatcamGUI/FlatCAMGUI.py:2546 +#: FlatCAMApp.py:7557 FlatCAMApp.py:7561 flatcamGUI/MainGUI.py:838 +#: flatcamGUI/MainGUI.py:2546 msgid "Open Excellon" msgstr "Încarcă Excellon" @@ -967,7 +967,7 @@ msgstr "Încarcă G-Code" msgid "Opening G-Code file." msgstr "Se incarcă un fişier G-Code." -#: FlatCAMApp.py:7632 FlatCAMApp.py:7635 flatcamGUI/FlatCAMGUI.py:1730 +#: FlatCAMApp.py:7632 FlatCAMApp.py:7635 flatcamGUI/MainGUI.py:1730 msgid "Open Project" msgstr "Încarcă Project" @@ -1126,8 +1126,8 @@ msgstr "Un fisier script TCL a fost deschis in Editorul de cod si executat." msgid "Save Project As ..." msgstr "Salvează Proiectul ca ..." -#: FlatCAMApp.py:8551 flatcamGUI/FlatCAMGUI.py:1134 -#: flatcamGUI/FlatCAMGUI.py:2176 +#: FlatCAMApp.py:8551 flatcamGUI/MainGUI.py:1134 +#: flatcamGUI/MainGUI.py:2176 msgid "Project" msgstr "Proiect" @@ -1374,7 +1374,7 @@ msgstr "Sterge Proiectele recente" msgid "Clear Recent files" msgstr "Sterge fişierele recente" -#: FlatCAMApp.py:10065 flatcamGUI/FlatCAMGUI.py:1363 +#: FlatCAMApp.py:10065 flatcamGUI/MainGUI.py:1363 msgid "Shortcut Key List" msgstr "Lista cu taste Shortcut" @@ -1536,47 +1536,47 @@ msgstr "Dezactivează Afișare ..." msgid "Working ..." msgstr "Se lucrează..." -#: FlatCAMApp.py:10558 flatcamGUI/FlatCAMGUI.py:703 +#: FlatCAMApp.py:10558 flatcamGUI/MainGUI.py:703 msgid "Red" msgstr "Roșu" -#: FlatCAMApp.py:10560 flatcamGUI/FlatCAMGUI.py:706 +#: FlatCAMApp.py:10560 flatcamGUI/MainGUI.py:706 msgid "Blue" msgstr "Albastru" -#: FlatCAMApp.py:10563 flatcamGUI/FlatCAMGUI.py:709 +#: FlatCAMApp.py:10563 flatcamGUI/MainGUI.py:709 msgid "Yellow" msgstr "Galben" -#: FlatCAMApp.py:10565 flatcamGUI/FlatCAMGUI.py:712 +#: FlatCAMApp.py:10565 flatcamGUI/MainGUI.py:712 msgid "Green" msgstr "Verde" -#: FlatCAMApp.py:10567 flatcamGUI/FlatCAMGUI.py:715 +#: FlatCAMApp.py:10567 flatcamGUI/MainGUI.py:715 msgid "Purple" msgstr "Violet" -#: FlatCAMApp.py:10569 flatcamGUI/FlatCAMGUI.py:718 +#: FlatCAMApp.py:10569 flatcamGUI/MainGUI.py:718 msgid "Brown" msgstr "Maro" -#: FlatCAMApp.py:10571 FlatCAMApp.py:10627 flatcamGUI/FlatCAMGUI.py:721 +#: FlatCAMApp.py:10571 FlatCAMApp.py:10627 flatcamGUI/MainGUI.py:721 msgid "White" msgstr "Alb" -#: FlatCAMApp.py:10573 flatcamGUI/FlatCAMGUI.py:724 +#: FlatCAMApp.py:10573 flatcamGUI/MainGUI.py:724 msgid "Black" msgstr "Negru" -#: FlatCAMApp.py:10576 flatcamGUI/FlatCAMGUI.py:729 +#: FlatCAMApp.py:10576 flatcamGUI/MainGUI.py:729 msgid "Custom" msgstr "Personalizat" -#: FlatCAMApp.py:10586 flatcamGUI/FlatCAMGUI.py:737 +#: FlatCAMApp.py:10586 flatcamGUI/MainGUI.py:737 msgid "Default" msgstr "Implicit" -#: FlatCAMApp.py:10610 flatcamGUI/FlatCAMGUI.py:734 +#: FlatCAMApp.py:10610 flatcamGUI/MainGUI.py:734 msgid "Opacity" msgstr "Opacitate" @@ -1696,7 +1696,7 @@ msgstr "Bookmark-ul a fost eliminat." msgid "Export FlatCAM Bookmarks" msgstr "Exportați bookmark-urile FlatCAM" -#: FlatCAMBookmark.py:293 flatcamGUI/FlatCAMGUI.py:524 +#: FlatCAMBookmark.py:293 flatcamGUI/MainGUI.py:524 msgid "Bookmarks" msgstr "Bookmarks" @@ -3140,7 +3140,7 @@ msgstr "" "Șterge o unealtă in lista de unelte\n" "prin selectarea unei linii in tabela de unelte." -#: flatcamEditors/FlatCAMExcEditor.py:1650 flatcamGUI/FlatCAMGUI.py:2019 +#: flatcamEditors/FlatCAMExcEditor.py:1650 flatcamGUI/MainGUI.py:2019 msgid "Resize Drill(s)" msgstr "Redimensionare operațiuni de găurire" @@ -3166,8 +3166,8 @@ msgstr "Redimensionează" msgid "Resize drill(s)" msgstr "Redimensionează op. de găurire." -#: flatcamEditors/FlatCAMExcEditor.py:1699 flatcamGUI/FlatCAMGUI.py:2018 -#: flatcamGUI/FlatCAMGUI.py:2270 +#: flatcamEditors/FlatCAMExcEditor.py:1699 flatcamGUI/MainGUI.py:2018 +#: flatcamGUI/MainGUI.py:2270 msgid "Add Drill Array" msgstr "Adaugă o arie de op. găurire" @@ -3482,7 +3482,7 @@ msgstr "" "Salvează și reeditează obiectul Excellon dacă ai nevoie să adaugi această " "unealtă. " -#: flatcamEditors/FlatCAMExcEditor.py:2579 flatcamGUI/FlatCAMGUI.py:4071 +#: flatcamEditors/FlatCAMExcEditor.py:2579 flatcamGUI/MainGUI.py:4071 msgid "Added new tool with dia" msgstr "O nouă unealtă este adăugată cu diametrul" @@ -3593,7 +3593,7 @@ msgid "Full Buffer" msgstr "Bufer complet" #: flatcamEditors/FlatCAMGeoEditor.py:132 -#: flatcamEditors/FlatCAMGeoEditor.py:3017 flatcamGUI/FlatCAMGUI.py:1928 +#: flatcamEditors/FlatCAMGeoEditor.py:3017 flatcamGUI/MainGUI.py:1928 #: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:190 msgid "Buffer Tool" msgstr "Unealta Bufer" @@ -3614,7 +3614,7 @@ msgstr "" msgid "Font" msgstr "Font" -#: flatcamEditors/FlatCAMGeoEditor.py:323 flatcamGUI/FlatCAMGUI.py:2208 +#: flatcamEditors/FlatCAMGeoEditor.py:323 flatcamGUI/MainGUI.py:2208 msgid "Text" msgstr "Text" @@ -3622,8 +3622,8 @@ msgstr "Text" msgid "Text Tool" msgstr "Unealta Text" -#: flatcamEditors/FlatCAMGeoEditor.py:405 flatcamGUI/FlatCAMGUI.py:511 -#: flatcamGUI/FlatCAMGUI.py:1158 flatcamGUI/ObjectUI.py:818 +#: flatcamEditors/FlatCAMGeoEditor.py:405 flatcamGUI/MainGUI.py:511 +#: flatcamGUI/MainGUI.py:1158 flatcamGUI/ObjectUI.py:818 #: flatcamGUI/ObjectUI.py:1662 flatcamObjects/FlatCAMExcellon.py:742 #: flatcamObjects/FlatCAMExcellon.py:1084 flatcamObjects/FlatCAMGeometry.py:759 #: flatcamTools/ToolNCC.py:331 flatcamTools/ToolNCC.py:797 @@ -3660,12 +3660,12 @@ msgstr "Conectează:" msgid "Contour:" msgstr "Contur:" -#: flatcamEditors/FlatCAMGeoEditor.py:529 flatcamGUI/FlatCAMGUI.py:2212 +#: flatcamEditors/FlatCAMGeoEditor.py:529 flatcamGUI/MainGUI.py:2212 msgid "Paint" msgstr "Pictează" -#: flatcamEditors/FlatCAMGeoEditor.py:547 flatcamGUI/FlatCAMGUI.py:924 -#: flatcamGUI/FlatCAMGUI.py:2628 flatcamGUI/ObjectUI.py:2139 +#: flatcamEditors/FlatCAMGeoEditor.py:547 flatcamGUI/MainGUI.py:924 +#: flatcamGUI/MainGUI.py:2628 flatcamGUI/ObjectUI.py:2139 #: flatcamTools/ToolPaint.py:43 flatcamTools/ToolPaint.py:738 msgid "Paint Tool" msgstr "Unealta Paint" @@ -3692,8 +3692,8 @@ msgstr "Unelte" #: flatcamEditors/FlatCAMGeoEditor.py:607 #: flatcamEditors/FlatCAMGeoEditor.py:991 #: flatcamEditors/FlatCAMGrbEditor.py:5306 -#: flatcamEditors/FlatCAMGrbEditor.py:5703 flatcamGUI/FlatCAMGUI.py:945 -#: flatcamGUI/FlatCAMGUI.py:2649 flatcamTools/ToolTransform.py:460 +#: flatcamEditors/FlatCAMGrbEditor.py:5703 flatcamGUI/MainGUI.py:945 +#: flatcamGUI/MainGUI.py:2649 flatcamTools/ToolTransform.py:460 msgid "Transform Tool" msgstr "Unealta Transformare" @@ -3713,9 +3713,9 @@ msgstr "Deformare" #: flatcamEditors/FlatCAMGeoEditor.py:610 #: flatcamEditors/FlatCAMGrbEditor.py:2680 -#: flatcamEditors/FlatCAMGrbEditor.py:5309 flatcamGUI/FlatCAMGUI.py:1063 -#: flatcamGUI/FlatCAMGUI.py:2140 flatcamGUI/FlatCAMGUI.py:2255 -#: flatcamGUI/FlatCAMGUI.py:2767 flatcamGUI/ObjectUI.py:125 +#: flatcamEditors/FlatCAMGrbEditor.py:5309 flatcamGUI/MainGUI.py:1063 +#: flatcamGUI/MainGUI.py:2140 flatcamGUI/MainGUI.py:2255 +#: flatcamGUI/MainGUI.py:2767 flatcamGUI/ObjectUI.py:125 #: flatcamGUI/preferences/tools/ToolsTransformPrefGroupUI.py:95 #: flatcamTools/ToolTransform.py:26 msgid "Scale" @@ -3727,8 +3727,8 @@ msgid "Mirror (Flip)" msgstr "Oglindire" #: flatcamEditors/FlatCAMGeoEditor.py:625 -#: flatcamEditors/FlatCAMGrbEditor.py:5324 flatcamGUI/FlatCAMGUI.py:856 -#: flatcamGUI/FlatCAMGUI.py:2564 +#: flatcamEditors/FlatCAMGrbEditor.py:5324 flatcamGUI/MainGUI.py:856 +#: flatcamGUI/MainGUI.py:2564 msgid "Editor" msgstr "Editor" @@ -4460,7 +4460,7 @@ msgstr "Inel" msgid "Line" msgstr "Linie" -#: flatcamEditors/FlatCAMGeoEditor.py:3591 flatcamGUI/FlatCAMGUI.py:2202 +#: flatcamEditors/FlatCAMGeoEditor.py:3591 flatcamGUI/MainGUI.py:2202 #: flatcamGUI/ObjectUI.py:2074 #: flatcamGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:218 #: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:328 @@ -4489,10 +4489,10 @@ msgstr "Se editează Geometrie tip MultiGeo. unealta" msgid "with diameter" msgstr "cu diametrul" -#: flatcamEditors/FlatCAMGeoEditor.py:4509 flatcamGUI/FlatCAMGUI.py:3753 -#: flatcamGUI/FlatCAMGUI.py:3799 flatcamGUI/FlatCAMGUI.py:3817 -#: flatcamGUI/FlatCAMGUI.py:3961 flatcamGUI/FlatCAMGUI.py:4000 -#: flatcamGUI/FlatCAMGUI.py:4012 flatcamGUI/FlatCAMGUI.py:4029 +#: flatcamEditors/FlatCAMGeoEditor.py:4509 flatcamGUI/MainGUI.py:3753 +#: flatcamGUI/MainGUI.py:3799 flatcamGUI/MainGUI.py:3817 +#: flatcamGUI/MainGUI.py:3961 flatcamGUI/MainGUI.py:4000 +#: flatcamGUI/MainGUI.py:4012 flatcamGUI/MainGUI.py:4029 msgid "Click on target point." msgstr "Click pe punctul tinta." @@ -4719,7 +4719,7 @@ msgstr "Executat. Mutarea Aperturilor terminată." msgid "Done. Apertures copied." msgstr "Executat. Aperturile au fost copiate." -#: flatcamEditors/FlatCAMGrbEditor.py:2455 flatcamGUI/FlatCAMGUI.py:2233 +#: flatcamEditors/FlatCAMGrbEditor.py:2455 flatcamGUI/MainGUI.py:2233 #: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:27 msgid "Gerber Editor" msgstr "Editor Gerber" @@ -4885,9 +4885,9 @@ msgstr "" "- 'Beveled:' coltul este inlocuit cu o linie care uneste capetele liniilor " "care formează coltul" -#: flatcamEditors/FlatCAMGrbEditor.py:2640 flatcamGUI/FlatCAMGUI.py:1061 -#: flatcamGUI/FlatCAMGUI.py:2138 flatcamGUI/FlatCAMGUI.py:2210 -#: flatcamGUI/FlatCAMGUI.py:2253 flatcamGUI/FlatCAMGUI.py:2765 +#: flatcamEditors/FlatCAMGrbEditor.py:2640 flatcamGUI/MainGUI.py:1061 +#: flatcamGUI/MainGUI.py:2138 flatcamGUI/MainGUI.py:2210 +#: flatcamGUI/MainGUI.py:2253 flatcamGUI/MainGUI.py:2765 #: flatcamGUI/preferences/tools/ToolsTransformPrefGroupUI.py:200 #: flatcamTools/ToolTransform.py:29 msgid "Buffer" @@ -4962,8 +4962,8 @@ msgstr "Ștergeți toate poligoanele marcate." msgid "Clear all the markings." msgstr "Ștergeți toate marcajele." -#: flatcamEditors/FlatCAMGrbEditor.py:2764 flatcamGUI/FlatCAMGUI.py:1046 -#: flatcamGUI/FlatCAMGUI.py:2138 flatcamGUI/FlatCAMGUI.py:2750 +#: flatcamEditors/FlatCAMGrbEditor.py:2764 flatcamGUI/MainGUI.py:1046 +#: flatcamGUI/MainGUI.py:2138 flatcamGUI/MainGUI.py:2750 msgid "Add Pad Array" msgstr "Adaugă o arie de paduri" @@ -5273,129 +5273,129 @@ msgstr "Salvat in" msgid "Code Editor content copied to clipboard ..." msgstr "Conținut Editor de cod copiat în clipboard ..." -#: flatcamGUI/FlatCAMGUI.py:78 flatcamGUI/FlatCAMGUI.py:80 -#: flatcamGUI/FlatCAMGUI.py:2163 +#: flatcamGUI/MainGUI.py:78 flatcamGUI/MainGUI.py:80 +#: flatcamGUI/MainGUI.py:2163 msgid "Toggle Panel" msgstr "Comută Panel" -#: flatcamGUI/FlatCAMGUI.py:90 +#: flatcamGUI/MainGUI.py:90 msgid "File" msgstr "Fişiere" -#: flatcamGUI/FlatCAMGUI.py:95 +#: flatcamGUI/MainGUI.py:95 msgid "&New Project ...\tCtrl+N" msgstr "&Proiect Nou...\tCtrl+N" -#: flatcamGUI/FlatCAMGUI.py:97 +#: flatcamGUI/MainGUI.py:97 msgid "Will create a new, blank project" msgstr "Se va crea un proiect nou, fără continut" -#: flatcamGUI/FlatCAMGUI.py:102 +#: flatcamGUI/MainGUI.py:102 msgid "&New" msgstr "&Nou" -#: flatcamGUI/FlatCAMGUI.py:106 +#: flatcamGUI/MainGUI.py:106 msgid "Geometry\tN" msgstr "Geometrie\tN" -#: flatcamGUI/FlatCAMGUI.py:108 +#: flatcamGUI/MainGUI.py:108 msgid "Will create a new, empty Geometry Object." msgstr "Va crea un obiect nou de tip Geometrie, fără continut." -#: flatcamGUI/FlatCAMGUI.py:111 +#: flatcamGUI/MainGUI.py:111 msgid "Gerber\tB" msgstr "Gerber\tB" -#: flatcamGUI/FlatCAMGUI.py:113 +#: flatcamGUI/MainGUI.py:113 msgid "Will create a new, empty Gerber Object." msgstr "Va crea un obiect nou de tip Gerber, fără continut." -#: flatcamGUI/FlatCAMGUI.py:116 +#: flatcamGUI/MainGUI.py:116 msgid "Excellon\tL" msgstr "Excellon\tL" -#: flatcamGUI/FlatCAMGUI.py:118 +#: flatcamGUI/MainGUI.py:118 msgid "Will create a new, empty Excellon Object." msgstr "Va crea un obiect nou de tip Excellon, fără continut." -#: flatcamGUI/FlatCAMGUI.py:123 +#: flatcamGUI/MainGUI.py:123 msgid "Document\tD" msgstr "Document\tD" -#: flatcamGUI/FlatCAMGUI.py:125 +#: flatcamGUI/MainGUI.py:125 msgid "Will create a new, empty Document Object." msgstr "Va crea un obiect nou de tip Document, fără continut." -#: flatcamGUI/FlatCAMGUI.py:129 flatcamGUI/FlatCAMGUI.py:4420 +#: flatcamGUI/MainGUI.py:129 flatcamGUI/MainGUI.py:4420 #: flatcamTools/ToolPcbWizard.py:62 flatcamTools/ToolPcbWizard.py:69 msgid "Open" msgstr "Încarcă" -#: flatcamGUI/FlatCAMGUI.py:134 +#: flatcamGUI/MainGUI.py:134 msgid "Open &Project ..." msgstr "Încarcă &Project ..." -#: flatcamGUI/FlatCAMGUI.py:140 flatcamGUI/FlatCAMGUI.py:4430 +#: flatcamGUI/MainGUI.py:140 flatcamGUI/MainGUI.py:4430 msgid "Open &Gerber ...\tCtrl+G" msgstr "Încarcă &Gerber ...\tCtrl+G" -#: flatcamGUI/FlatCAMGUI.py:145 flatcamGUI/FlatCAMGUI.py:4435 +#: flatcamGUI/MainGUI.py:145 flatcamGUI/MainGUI.py:4435 msgid "Open &Excellon ...\tCtrl+E" msgstr "Încarcă &Excellon ...\tCtrl+E" -#: flatcamGUI/FlatCAMGUI.py:150 flatcamGUI/FlatCAMGUI.py:4440 +#: flatcamGUI/MainGUI.py:150 flatcamGUI/MainGUI.py:4440 msgid "Open G-&Code ..." msgstr "Încarcă G-&Code ..." -#: flatcamGUI/FlatCAMGUI.py:157 +#: flatcamGUI/MainGUI.py:157 msgid "Open Config ..." msgstr "Încarcă Config ..." -#: flatcamGUI/FlatCAMGUI.py:162 +#: flatcamGUI/MainGUI.py:162 msgid "Recent projects" msgstr "Proiectele recente" -#: flatcamGUI/FlatCAMGUI.py:164 +#: flatcamGUI/MainGUI.py:164 msgid "Recent files" msgstr "Fişierele Recente" -#: flatcamGUI/FlatCAMGUI.py:167 flatcamGUI/FlatCAMGUI.py:753 -#: flatcamGUI/FlatCAMGUI.py:1339 +#: flatcamGUI/MainGUI.py:167 flatcamGUI/MainGUI.py:753 +#: flatcamGUI/MainGUI.py:1339 msgid "Save" msgstr "Salvează" -#: flatcamGUI/FlatCAMGUI.py:171 +#: flatcamGUI/MainGUI.py:171 msgid "&Save Project ...\tCtrl+S" msgstr "Salvează Proiect ...\tCtrl+S" -#: flatcamGUI/FlatCAMGUI.py:176 +#: flatcamGUI/MainGUI.py:176 msgid "Save Project &As ...\tCtrl+Shift+S" msgstr "Salvează Proiect ca ...\tCtrl+Shift+S" -#: flatcamGUI/FlatCAMGUI.py:191 +#: flatcamGUI/MainGUI.py:191 msgid "Scripting" msgstr "Scripting" -#: flatcamGUI/FlatCAMGUI.py:195 flatcamGUI/FlatCAMGUI.py:903 -#: flatcamGUI/FlatCAMGUI.py:2607 +#: flatcamGUI/MainGUI.py:195 flatcamGUI/MainGUI.py:903 +#: flatcamGUI/MainGUI.py:2607 msgid "New Script ..." msgstr "Script nou ..." -#: flatcamGUI/FlatCAMGUI.py:197 flatcamGUI/FlatCAMGUI.py:905 -#: flatcamGUI/FlatCAMGUI.py:2609 +#: flatcamGUI/MainGUI.py:197 flatcamGUI/MainGUI.py:905 +#: flatcamGUI/MainGUI.py:2609 msgid "Open Script ..." msgstr "Încarcă &Script..." -#: flatcamGUI/FlatCAMGUI.py:199 +#: flatcamGUI/MainGUI.py:199 msgid "Open Example ..." msgstr "Deschideți exemplul ..." -#: flatcamGUI/FlatCAMGUI.py:201 flatcamGUI/FlatCAMGUI.py:907 -#: flatcamGUI/FlatCAMGUI.py:2611 flatcamGUI/FlatCAMGUI.py:4409 +#: flatcamGUI/MainGUI.py:201 flatcamGUI/MainGUI.py:907 +#: flatcamGUI/MainGUI.py:2611 flatcamGUI/MainGUI.py:4409 msgid "Run Script ..." msgstr "Rulează Script..." -#: flatcamGUI/FlatCAMGUI.py:203 flatcamGUI/FlatCAMGUI.py:4411 +#: flatcamGUI/MainGUI.py:203 flatcamGUI/MainGUI.py:4411 msgid "" "Will run the opened Tcl Script thus\n" "enabling the automation of certain\n" @@ -5405,47 +5405,47 @@ msgstr "" "o automatizare a anumitor functii\n" "din FlatCAM." -#: flatcamGUI/FlatCAMGUI.py:218 +#: flatcamGUI/MainGUI.py:218 msgid "Import" msgstr "Import" -#: flatcamGUI/FlatCAMGUI.py:220 +#: flatcamGUI/MainGUI.py:220 msgid "&SVG as Geometry Object ..." msgstr "&SVG ca și obiect Geometrie ..." -#: flatcamGUI/FlatCAMGUI.py:223 +#: flatcamGUI/MainGUI.py:223 msgid "&SVG as Gerber Object ..." msgstr "&SVG ca și obiect Gerber ..." -#: flatcamGUI/FlatCAMGUI.py:228 +#: flatcamGUI/MainGUI.py:228 msgid "&DXF as Geometry Object ..." msgstr "&DXF ca și obiect Geometrie ..." -#: flatcamGUI/FlatCAMGUI.py:231 +#: flatcamGUI/MainGUI.py:231 msgid "&DXF as Gerber Object ..." msgstr "&DXF ca și obiect Gerber ..." -#: flatcamGUI/FlatCAMGUI.py:235 +#: flatcamGUI/MainGUI.py:235 msgid "HPGL2 as Geometry Object ..." msgstr "HPGL2 ca obiect de geometrie ..." -#: flatcamGUI/FlatCAMGUI.py:241 +#: flatcamGUI/MainGUI.py:241 msgid "Export" msgstr "Export" -#: flatcamGUI/FlatCAMGUI.py:245 +#: flatcamGUI/MainGUI.py:245 msgid "Export &SVG ..." msgstr "Exporta &SVG ..." -#: flatcamGUI/FlatCAMGUI.py:249 +#: flatcamGUI/MainGUI.py:249 msgid "Export DXF ..." msgstr "Exporta DXF ..." -#: flatcamGUI/FlatCAMGUI.py:255 +#: flatcamGUI/MainGUI.py:255 msgid "Export &PNG ..." msgstr "Exporta &PNG ..." -#: flatcamGUI/FlatCAMGUI.py:257 +#: flatcamGUI/MainGUI.py:257 msgid "" "Will export an image in PNG format,\n" "the saved image will contain the visual \n" @@ -5455,11 +5455,11 @@ msgstr "" "imagina salvata va contine elementele vizuale\n" "afisate in zona de afișare." -#: flatcamGUI/FlatCAMGUI.py:266 +#: flatcamGUI/MainGUI.py:266 msgid "Export &Excellon ..." msgstr "Exporta Excellon ..." -#: flatcamGUI/FlatCAMGUI.py:268 +#: flatcamGUI/MainGUI.py:268 msgid "" "Will export an Excellon Object as Excellon file,\n" "the coordinates format, the file units and zeros\n" @@ -5469,11 +5469,11 @@ msgstr "" "Formatul coordonatelor, unitatile de masura și tipul\n" "de zerouri se vor seta in Preferințe -> Export Excellon." -#: flatcamGUI/FlatCAMGUI.py:275 +#: flatcamGUI/MainGUI.py:275 msgid "Export &Gerber ..." msgstr "Exporta &Gerber ..." -#: flatcamGUI/FlatCAMGUI.py:277 +#: flatcamGUI/MainGUI.py:277 msgid "" "Will export an Gerber Object as Gerber file,\n" "the coordinates format, the file units and zeros\n" @@ -5483,53 +5483,53 @@ msgstr "" "Formatul coordonatelor, unitatile de măsură și tipul\n" "de zerouri se vor seta in Preferințe -> Export Gerber." -#: flatcamGUI/FlatCAMGUI.py:287 +#: flatcamGUI/MainGUI.py:287 msgid "Backup" msgstr "Backup" -#: flatcamGUI/FlatCAMGUI.py:292 +#: flatcamGUI/MainGUI.py:292 msgid "Import Preferences from file ..." msgstr "Importați Preferințele din fișier ..." -#: flatcamGUI/FlatCAMGUI.py:298 +#: flatcamGUI/MainGUI.py:298 msgid "Export Preferences to file ..." msgstr "Exportați Preferințele într-un fișier ..." -#: flatcamGUI/FlatCAMGUI.py:306 +#: flatcamGUI/MainGUI.py:306 #: flatcamGUI/preferences/PreferencesUIManager.py:1119 msgid "Save Preferences" msgstr "Salvează Pref" -#: flatcamGUI/FlatCAMGUI.py:312 flatcamGUI/FlatCAMGUI.py:1730 +#: flatcamGUI/MainGUI.py:312 flatcamGUI/MainGUI.py:1730 msgid "Print (PDF)" msgstr "Tipărire (PDF)" -#: flatcamGUI/FlatCAMGUI.py:320 +#: flatcamGUI/MainGUI.py:320 msgid "E&xit" msgstr "Iesire" -#: flatcamGUI/FlatCAMGUI.py:328 flatcamGUI/FlatCAMGUI.py:747 -#: flatcamGUI/FlatCAMGUI.py:2286 +#: flatcamGUI/MainGUI.py:328 flatcamGUI/MainGUI.py:747 +#: flatcamGUI/MainGUI.py:2286 msgid "Edit" msgstr "Editează" -#: flatcamGUI/FlatCAMGUI.py:332 +#: flatcamGUI/MainGUI.py:332 msgid "Edit Object\tE" msgstr "Editare Obiect\tE" -#: flatcamGUI/FlatCAMGUI.py:334 +#: flatcamGUI/MainGUI.py:334 msgid "Close Editor\tCtrl+S" msgstr "Salvează Editor\tCtrl+S" -#: flatcamGUI/FlatCAMGUI.py:343 +#: flatcamGUI/MainGUI.py:343 msgid "Conversion" msgstr "Conversii" -#: flatcamGUI/FlatCAMGUI.py:345 +#: flatcamGUI/MainGUI.py:345 msgid "&Join Geo/Gerber/Exc -> Geo" msgstr "&Fuzionează Geo/Gerber/Exc -> Geo" -#: flatcamGUI/FlatCAMGUI.py:347 +#: flatcamGUI/MainGUI.py:347 msgid "" "Merge a selection of objects, which can be of type:\n" "- Gerber\n" @@ -5543,30 +5543,30 @@ msgstr "" "- Geometrie\n" "intr-un nou obiect tip Geometrie >combo<." -#: flatcamGUI/FlatCAMGUI.py:354 +#: flatcamGUI/MainGUI.py:354 msgid "Join Excellon(s) -> Excellon" msgstr "Fuzionează Excellon(s) -> Excellon" -#: flatcamGUI/FlatCAMGUI.py:356 +#: flatcamGUI/MainGUI.py:356 msgid "Merge a selection of Excellon objects into a new combo Excellon object." msgstr "" "Fuzionează o selecţie de obiecte Excellon intr-un nou obiect Excellon " ">combo<." -#: flatcamGUI/FlatCAMGUI.py:359 +#: flatcamGUI/MainGUI.py:359 msgid "Join Gerber(s) -> Gerber" msgstr "Fuzionează Gerber(s) -> Gerber" -#: flatcamGUI/FlatCAMGUI.py:361 +#: flatcamGUI/MainGUI.py:361 msgid "Merge a selection of Gerber objects into a new combo Gerber object." msgstr "" "Fuzionează o selecţie de obiecte Gerber intr-un nou obiect Gerber >combo<." -#: flatcamGUI/FlatCAMGUI.py:366 +#: flatcamGUI/MainGUI.py:366 msgid "Convert Single to MultiGeo" msgstr "Converteste SingleGeo in MultiGeo" -#: flatcamGUI/FlatCAMGUI.py:368 +#: flatcamGUI/MainGUI.py:368 msgid "" "Will convert a Geometry object from single_geometry type\n" "to a multi_geometry type." @@ -5574,11 +5574,11 @@ msgstr "" "Va converti un obiect Geometrie din tipul simpla geometrie (SingleGeo)\n" "la tipul geometrie complexa (MultiGeo)." -#: flatcamGUI/FlatCAMGUI.py:372 +#: flatcamGUI/MainGUI.py:372 msgid "Convert Multi to SingleGeo" msgstr "Converteste MultiGeo in SingleGeo" -#: flatcamGUI/FlatCAMGUI.py:374 +#: flatcamGUI/MainGUI.py:374 msgid "" "Will convert a Geometry object from multi_geometry type\n" "to a single_geometry type." @@ -5586,756 +5586,756 @@ msgstr "" "Va converti un obiect Geometrie din tipul geometrie complexa (MultiGeo)\n" "la tipul geometrie simpla (SingleGeo)." -#: flatcamGUI/FlatCAMGUI.py:381 +#: flatcamGUI/MainGUI.py:381 msgid "Convert Any to Geo" msgstr "Converteste Oricare to Geo" -#: flatcamGUI/FlatCAMGUI.py:384 +#: flatcamGUI/MainGUI.py:384 msgid "Convert Any to Gerber" msgstr "Converteste Oricare in Gerber" -#: flatcamGUI/FlatCAMGUI.py:390 +#: flatcamGUI/MainGUI.py:390 msgid "&Copy\tCtrl+C" msgstr "&Copiază\tCtrl+C" -#: flatcamGUI/FlatCAMGUI.py:395 +#: flatcamGUI/MainGUI.py:395 msgid "&Delete\tDEL" msgstr "&Șterge\tDEL" -#: flatcamGUI/FlatCAMGUI.py:400 +#: flatcamGUI/MainGUI.py:400 msgid "Se&t Origin\tO" msgstr "Se&tează Originea\tO" -#: flatcamGUI/FlatCAMGUI.py:402 +#: flatcamGUI/MainGUI.py:402 msgid "Move to Origin\tShift+O" msgstr "Deplasează la Origine\tShift+O" -#: flatcamGUI/FlatCAMGUI.py:405 +#: flatcamGUI/MainGUI.py:405 msgid "Jump to Location\tJ" msgstr "Sari la Locaţie\tJ" -#: flatcamGUI/FlatCAMGUI.py:407 +#: flatcamGUI/MainGUI.py:407 msgid "Locate in Object\tShift+J" msgstr "Localizează in Obiect\tShift+J" -#: flatcamGUI/FlatCAMGUI.py:412 +#: flatcamGUI/MainGUI.py:412 msgid "Toggle Units\tQ" msgstr "Comută Unitati\tQ" -#: flatcamGUI/FlatCAMGUI.py:414 +#: flatcamGUI/MainGUI.py:414 msgid "&Select All\tCtrl+A" msgstr "&Selectează Tot\tCtrl+A" -#: flatcamGUI/FlatCAMGUI.py:419 +#: flatcamGUI/MainGUI.py:419 msgid "&Preferences\tShift+P" msgstr "&Preferințe\tShift+P" -#: flatcamGUI/FlatCAMGUI.py:425 flatcamTools/ToolProperties.py:155 +#: flatcamGUI/MainGUI.py:425 flatcamTools/ToolProperties.py:155 msgid "Options" msgstr "Opțiuni" -#: flatcamGUI/FlatCAMGUI.py:427 +#: flatcamGUI/MainGUI.py:427 msgid "&Rotate Selection\tShift+(R)" msgstr "&Roteste Selectia\tShift+(R)" -#: flatcamGUI/FlatCAMGUI.py:432 +#: flatcamGUI/MainGUI.py:432 msgid "&Skew on X axis\tShift+X" msgstr "&Deformează pe axa X\tShift+X" -#: flatcamGUI/FlatCAMGUI.py:434 +#: flatcamGUI/MainGUI.py:434 msgid "S&kew on Y axis\tShift+Y" msgstr "Deformează pe axa Y\tShift+Y" -#: flatcamGUI/FlatCAMGUI.py:439 +#: flatcamGUI/MainGUI.py:439 msgid "Flip on &X axis\tX" msgstr "Oglindește pe axa &X\tX" -#: flatcamGUI/FlatCAMGUI.py:441 +#: flatcamGUI/MainGUI.py:441 msgid "Flip on &Y axis\tY" msgstr "Oglindește pe axa &Y\tY" -#: flatcamGUI/FlatCAMGUI.py:446 +#: flatcamGUI/MainGUI.py:446 msgid "View source\tAlt+S" msgstr "Vezi sursa\tAlt+S" -#: flatcamGUI/FlatCAMGUI.py:448 +#: flatcamGUI/MainGUI.py:448 msgid "Tools DataBase\tCtrl+D" msgstr "Baza de data Unelte\tCtrl+D" -#: flatcamGUI/FlatCAMGUI.py:455 flatcamGUI/FlatCAMGUI.py:2183 +#: flatcamGUI/MainGUI.py:455 flatcamGUI/MainGUI.py:2183 msgid "View" msgstr "Vizualizare" -#: flatcamGUI/FlatCAMGUI.py:457 +#: flatcamGUI/MainGUI.py:457 msgid "Enable all plots\tAlt+1" msgstr "Activează toate afişările\tAlt+1" -#: flatcamGUI/FlatCAMGUI.py:459 +#: flatcamGUI/MainGUI.py:459 msgid "Disable all plots\tAlt+2" msgstr "Dezactivează toate afişările\tAlt+2" -#: flatcamGUI/FlatCAMGUI.py:461 +#: flatcamGUI/MainGUI.py:461 msgid "Disable non-selected\tAlt+3" msgstr "Dezactivează non-selectate\tAlt+3" -#: flatcamGUI/FlatCAMGUI.py:465 +#: flatcamGUI/MainGUI.py:465 msgid "&Zoom Fit\tV" msgstr "&Mărește și potrivește\tV" -#: flatcamGUI/FlatCAMGUI.py:467 +#: flatcamGUI/MainGUI.py:467 msgid "&Zoom In\t=" msgstr "&Măreste\t=" -#: flatcamGUI/FlatCAMGUI.py:469 +#: flatcamGUI/MainGUI.py:469 msgid "&Zoom Out\t-" msgstr "&Micșorează\t-" -#: flatcamGUI/FlatCAMGUI.py:474 +#: flatcamGUI/MainGUI.py:474 msgid "Redraw All\tF5" msgstr "Reafisare Toate\tF5" -#: flatcamGUI/FlatCAMGUI.py:478 +#: flatcamGUI/MainGUI.py:478 msgid "Toggle Code Editor\tShift+E" msgstr "Comută Editorul de cod\tShift+E" -#: flatcamGUI/FlatCAMGUI.py:481 +#: flatcamGUI/MainGUI.py:481 msgid "&Toggle FullScreen\tAlt+F10" msgstr "Comută FullScreen\tAlt+F10" -#: flatcamGUI/FlatCAMGUI.py:483 +#: flatcamGUI/MainGUI.py:483 msgid "&Toggle Plot Area\tCtrl+F10" msgstr "Comută Aria de Afișare\tCtrl+F10" -#: flatcamGUI/FlatCAMGUI.py:485 +#: flatcamGUI/MainGUI.py:485 msgid "&Toggle Project/Sel/Tool\t`" msgstr "Comută Proiect/Sel/Unealta\t`" -#: flatcamGUI/FlatCAMGUI.py:489 +#: flatcamGUI/MainGUI.py:489 msgid "&Toggle Grid Snap\tG" msgstr "Comută Grid\tG" -#: flatcamGUI/FlatCAMGUI.py:491 +#: flatcamGUI/MainGUI.py:491 msgid "&Toggle Grid Lines\tAlt+G" msgstr "Comută Linii Grid\tAlt+G" -#: flatcamGUI/FlatCAMGUI.py:493 +#: flatcamGUI/MainGUI.py:493 msgid "&Toggle Axis\tShift+G" msgstr "Comută Axe\tShift+G" -#: flatcamGUI/FlatCAMGUI.py:495 +#: flatcamGUI/MainGUI.py:495 msgid "Toggle Workspace\tShift+W" msgstr "Comută Suprafata de lucru\tShift+W" -#: flatcamGUI/FlatCAMGUI.py:500 +#: flatcamGUI/MainGUI.py:500 msgid "Objects" msgstr "Obiecte" -#: flatcamGUI/FlatCAMGUI.py:514 +#: flatcamGUI/MainGUI.py:514 msgid "&Command Line\tS" msgstr "&Linie de comanda\tS" -#: flatcamGUI/FlatCAMGUI.py:519 +#: flatcamGUI/MainGUI.py:519 msgid "Help" msgstr "Ajutor" -#: flatcamGUI/FlatCAMGUI.py:521 +#: flatcamGUI/MainGUI.py:521 msgid "Online Help\tF1" msgstr "Resurse online\tF1" -#: flatcamGUI/FlatCAMGUI.py:531 +#: flatcamGUI/MainGUI.py:531 msgid "Report a bug" msgstr "Raportati o eroare program" -#: flatcamGUI/FlatCAMGUI.py:534 +#: flatcamGUI/MainGUI.py:534 msgid "Excellon Specification" msgstr "Specificatii Excellon" -#: flatcamGUI/FlatCAMGUI.py:536 +#: flatcamGUI/MainGUI.py:536 msgid "Gerber Specification" msgstr "Specificatii Gerber" -#: flatcamGUI/FlatCAMGUI.py:541 +#: flatcamGUI/MainGUI.py:541 msgid "Shortcuts List\tF3" msgstr "Lista shortcut-uri\tF3" -#: flatcamGUI/FlatCAMGUI.py:543 +#: flatcamGUI/MainGUI.py:543 msgid "YouTube Channel\tF4" msgstr "YouTube \tF4" -#: flatcamGUI/FlatCAMGUI.py:554 +#: flatcamGUI/MainGUI.py:554 msgid "Add Circle\tO" msgstr "Adaugă Cerc\tO" -#: flatcamGUI/FlatCAMGUI.py:557 +#: flatcamGUI/MainGUI.py:557 msgid "Add Arc\tA" msgstr "Adaugă Arc\tA" -#: flatcamGUI/FlatCAMGUI.py:560 +#: flatcamGUI/MainGUI.py:560 msgid "Add Rectangle\tR" msgstr "Adaugă Patrulater\tR" -#: flatcamGUI/FlatCAMGUI.py:563 +#: flatcamGUI/MainGUI.py:563 msgid "Add Polygon\tN" msgstr "Adaugă Poligon\tN" -#: flatcamGUI/FlatCAMGUI.py:566 +#: flatcamGUI/MainGUI.py:566 msgid "Add Path\tP" msgstr "Adaugă Cale\tP" -#: flatcamGUI/FlatCAMGUI.py:569 +#: flatcamGUI/MainGUI.py:569 msgid "Add Text\tT" msgstr "Adaugă Text\tT" -#: flatcamGUI/FlatCAMGUI.py:572 +#: flatcamGUI/MainGUI.py:572 msgid "Polygon Union\tU" msgstr "Uniune Poligoane\tU" -#: flatcamGUI/FlatCAMGUI.py:574 +#: flatcamGUI/MainGUI.py:574 msgid "Polygon Intersection\tE" msgstr "Intersecţie Poligoane\tE" -#: flatcamGUI/FlatCAMGUI.py:576 +#: flatcamGUI/MainGUI.py:576 msgid "Polygon Subtraction\tS" msgstr "Substracţie Poligoane\tS" -#: flatcamGUI/FlatCAMGUI.py:580 +#: flatcamGUI/MainGUI.py:580 msgid "Cut Path\tX" msgstr "Tăiere Cale\tX" -#: flatcamGUI/FlatCAMGUI.py:584 +#: flatcamGUI/MainGUI.py:584 msgid "Copy Geom\tC" msgstr "Copiază Geo\tC" -#: flatcamGUI/FlatCAMGUI.py:586 +#: flatcamGUI/MainGUI.py:586 msgid "Delete Shape\tDEL" msgstr "Șterge forma Geo.\tDEL" -#: flatcamGUI/FlatCAMGUI.py:590 flatcamGUI/FlatCAMGUI.py:677 +#: flatcamGUI/MainGUI.py:590 flatcamGUI/MainGUI.py:677 msgid "Move\tM" msgstr "Muta\tM" -#: flatcamGUI/FlatCAMGUI.py:592 +#: flatcamGUI/MainGUI.py:592 msgid "Buffer Tool\tB" msgstr "Unealta Bufer\tB" -#: flatcamGUI/FlatCAMGUI.py:595 +#: flatcamGUI/MainGUI.py:595 msgid "Paint Tool\tI" msgstr "Unealta Paint\tI" -#: flatcamGUI/FlatCAMGUI.py:598 +#: flatcamGUI/MainGUI.py:598 msgid "Transform Tool\tAlt+R" msgstr "Unealta Transformare\tAlt+R" -#: flatcamGUI/FlatCAMGUI.py:602 +#: flatcamGUI/MainGUI.py:602 msgid "Toggle Corner Snap\tK" msgstr "Comută lipire colt\tK" -#: flatcamGUI/FlatCAMGUI.py:608 +#: flatcamGUI/MainGUI.py:608 msgid ">Excellon Editor<" msgstr ">Editor Excellon<" -#: flatcamGUI/FlatCAMGUI.py:612 +#: flatcamGUI/MainGUI.py:612 msgid "Add Drill Array\tA" msgstr "Adaugă Arie Găuriri\tA" -#: flatcamGUI/FlatCAMGUI.py:614 +#: flatcamGUI/MainGUI.py:614 msgid "Add Drill\tD" msgstr "Adaugă Găurire\tD" -#: flatcamGUI/FlatCAMGUI.py:618 +#: flatcamGUI/MainGUI.py:618 msgid "Add Slot Array\tQ" msgstr "Adăugați Arie de Sloturi\tQ" -#: flatcamGUI/FlatCAMGUI.py:620 +#: flatcamGUI/MainGUI.py:620 msgid "Add Slot\tW" msgstr "Adăugați Slot\tW" -#: flatcamGUI/FlatCAMGUI.py:624 +#: flatcamGUI/MainGUI.py:624 msgid "Resize Drill(S)\tR" msgstr "Redimens. Găuriri\tR" -#: flatcamGUI/FlatCAMGUI.py:627 flatcamGUI/FlatCAMGUI.py:671 +#: flatcamGUI/MainGUI.py:627 flatcamGUI/MainGUI.py:671 msgid "Copy\tC" msgstr "Copiază\tC" -#: flatcamGUI/FlatCAMGUI.py:629 flatcamGUI/FlatCAMGUI.py:673 +#: flatcamGUI/MainGUI.py:629 flatcamGUI/MainGUI.py:673 msgid "Delete\tDEL" msgstr "Șterge\tDEL" -#: flatcamGUI/FlatCAMGUI.py:634 +#: flatcamGUI/MainGUI.py:634 msgid "Move Drill(s)\tM" msgstr "Muta Găuriri\tM" -#: flatcamGUI/FlatCAMGUI.py:639 +#: flatcamGUI/MainGUI.py:639 msgid ">Gerber Editor<" msgstr ">Editor Gerber<" -#: flatcamGUI/FlatCAMGUI.py:643 +#: flatcamGUI/MainGUI.py:643 msgid "Add Pad\tP" msgstr "Adaugă Pad\tP" -#: flatcamGUI/FlatCAMGUI.py:645 +#: flatcamGUI/MainGUI.py:645 msgid "Add Pad Array\tA" msgstr "Adaugă Arie paduri\tA" -#: flatcamGUI/FlatCAMGUI.py:647 +#: flatcamGUI/MainGUI.py:647 msgid "Add Track\tT" msgstr "Adaugă Traseu\tA" -#: flatcamGUI/FlatCAMGUI.py:649 +#: flatcamGUI/MainGUI.py:649 msgid "Add Region\tN" msgstr "Adaugă Regiune\tN" -#: flatcamGUI/FlatCAMGUI.py:653 +#: flatcamGUI/MainGUI.py:653 msgid "Poligonize\tAlt+N" msgstr "Poligonizare\tAlt+N" -#: flatcamGUI/FlatCAMGUI.py:655 +#: flatcamGUI/MainGUI.py:655 msgid "Add SemiDisc\tE" msgstr "Adaugă SemiDisc\tE" -#: flatcamGUI/FlatCAMGUI.py:657 +#: flatcamGUI/MainGUI.py:657 msgid "Add Disc\tD" msgstr "Adaugă Disc\tD" -#: flatcamGUI/FlatCAMGUI.py:659 +#: flatcamGUI/MainGUI.py:659 msgid "Buffer\tB" msgstr "Bufer\tB" -#: flatcamGUI/FlatCAMGUI.py:661 +#: flatcamGUI/MainGUI.py:661 msgid "Scale\tS" msgstr "Scalare\tS" -#: flatcamGUI/FlatCAMGUI.py:663 +#: flatcamGUI/MainGUI.py:663 msgid "Mark Area\tAlt+A" msgstr "Marchează aria\tAlt+A" -#: flatcamGUI/FlatCAMGUI.py:665 +#: flatcamGUI/MainGUI.py:665 msgid "Eraser\tCtrl+E" msgstr "Radieră\tCtrl+E" -#: flatcamGUI/FlatCAMGUI.py:667 +#: flatcamGUI/MainGUI.py:667 msgid "Transform\tAlt+R" msgstr "Unealta Transformare\tAlt+R" -#: flatcamGUI/FlatCAMGUI.py:694 +#: flatcamGUI/MainGUI.py:694 msgid "Enable Plot" msgstr "Activează Afișare" -#: flatcamGUI/FlatCAMGUI.py:696 +#: flatcamGUI/MainGUI.py:696 msgid "Disable Plot" msgstr "Dezactivează Afișare" -#: flatcamGUI/FlatCAMGUI.py:700 +#: flatcamGUI/MainGUI.py:700 msgid "Set Color" msgstr "Setați culoarea" -#: flatcamGUI/FlatCAMGUI.py:742 +#: flatcamGUI/MainGUI.py:742 msgid "Generate CNC" msgstr "Generează CNC" -#: flatcamGUI/FlatCAMGUI.py:744 +#: flatcamGUI/MainGUI.py:744 msgid "View Source" msgstr "Vizualiz. Sursa" -#: flatcamGUI/FlatCAMGUI.py:749 flatcamGUI/FlatCAMGUI.py:863 -#: flatcamGUI/FlatCAMGUI.py:1072 flatcamGUI/FlatCAMGUI.py:2138 -#: flatcamGUI/FlatCAMGUI.py:2282 flatcamGUI/FlatCAMGUI.py:2572 -#: flatcamGUI/FlatCAMGUI.py:2775 flatcamGUI/ObjectUI.py:1617 +#: flatcamGUI/MainGUI.py:749 flatcamGUI/MainGUI.py:863 +#: flatcamGUI/MainGUI.py:1072 flatcamGUI/MainGUI.py:2138 +#: flatcamGUI/MainGUI.py:2282 flatcamGUI/MainGUI.py:2572 +#: flatcamGUI/MainGUI.py:2775 flatcamGUI/ObjectUI.py:1617 #: flatcamObjects/FlatCAMGeometry.py:502 flatcamTools/ToolPanelize.py:540 #: flatcamTools/ToolPanelize.py:567 flatcamTools/ToolPanelize.py:660 #: flatcamTools/ToolPanelize.py:689 flatcamTools/ToolPanelize.py:751 msgid "Copy" msgstr "Copiază" -#: flatcamGUI/FlatCAMGUI.py:757 flatcamGUI/FlatCAMGUI.py:2295 +#: flatcamGUI/MainGUI.py:757 flatcamGUI/MainGUI.py:2295 #: flatcamTools/ToolProperties.py:31 msgid "Properties" msgstr "Proprietati" -#: flatcamGUI/FlatCAMGUI.py:786 +#: flatcamGUI/MainGUI.py:786 msgid "File Toolbar" msgstr "Toolbar Fişiere" -#: flatcamGUI/FlatCAMGUI.py:790 +#: flatcamGUI/MainGUI.py:790 msgid "Edit Toolbar" msgstr "Toolbar Editare" -#: flatcamGUI/FlatCAMGUI.py:794 +#: flatcamGUI/MainGUI.py:794 msgid "View Toolbar" msgstr "Toolbar Vizualizare" -#: flatcamGUI/FlatCAMGUI.py:798 +#: flatcamGUI/MainGUI.py:798 msgid "Shell Toolbar" msgstr "Toolbar Linie de comanda" -#: flatcamGUI/FlatCAMGUI.py:802 +#: flatcamGUI/MainGUI.py:802 msgid "Tools Toolbar" msgstr "Toolbar Unelte" -#: flatcamGUI/FlatCAMGUI.py:806 +#: flatcamGUI/MainGUI.py:806 msgid "Excellon Editor Toolbar" msgstr "Toolbar Editor Excellon" -#: flatcamGUI/FlatCAMGUI.py:812 +#: flatcamGUI/MainGUI.py:812 msgid "Geometry Editor Toolbar" msgstr "Toolbar Editor Geometrii" -#: flatcamGUI/FlatCAMGUI.py:816 +#: flatcamGUI/MainGUI.py:816 msgid "Gerber Editor Toolbar" msgstr "Toolbar Editor Gerber" -#: flatcamGUI/FlatCAMGUI.py:820 +#: flatcamGUI/MainGUI.py:820 msgid "Grid Toolbar" msgstr "Toolbar Grid-uri" -#: flatcamGUI/FlatCAMGUI.py:841 flatcamGUI/FlatCAMGUI.py:2549 +#: flatcamGUI/MainGUI.py:841 flatcamGUI/MainGUI.py:2549 msgid "Open project" msgstr "Încarcă Proiect" -#: flatcamGUI/FlatCAMGUI.py:843 flatcamGUI/FlatCAMGUI.py:2551 +#: flatcamGUI/MainGUI.py:843 flatcamGUI/MainGUI.py:2551 msgid "Save project" msgstr "Salvează Proiect" -#: flatcamGUI/FlatCAMGUI.py:849 flatcamGUI/FlatCAMGUI.py:2557 +#: flatcamGUI/MainGUI.py:849 flatcamGUI/MainGUI.py:2557 msgid "New Blank Geometry" msgstr "Geometrie Noua (goală)" -#: flatcamGUI/FlatCAMGUI.py:851 flatcamGUI/FlatCAMGUI.py:2559 +#: flatcamGUI/MainGUI.py:851 flatcamGUI/MainGUI.py:2559 msgid "New Blank Gerber" msgstr "Gerber Nou (gol)" -#: flatcamGUI/FlatCAMGUI.py:853 flatcamGUI/FlatCAMGUI.py:2561 +#: flatcamGUI/MainGUI.py:853 flatcamGUI/MainGUI.py:2561 msgid "New Blank Excellon" msgstr "Excellon nou (gol)" -#: flatcamGUI/FlatCAMGUI.py:858 flatcamGUI/FlatCAMGUI.py:2567 +#: flatcamGUI/MainGUI.py:858 flatcamGUI/MainGUI.py:2567 msgid "Save Object and close the Editor" msgstr "Salvează Obiectul și inchide Editorul" -#: flatcamGUI/FlatCAMGUI.py:865 flatcamGUI/FlatCAMGUI.py:2574 +#: flatcamGUI/MainGUI.py:865 flatcamGUI/MainGUI.py:2574 msgid "&Delete" msgstr "&Șterge" -#: flatcamGUI/FlatCAMGUI.py:868 flatcamGUI/FlatCAMGUI.py:1729 -#: flatcamGUI/FlatCAMGUI.py:1935 flatcamGUI/FlatCAMGUI.py:2577 +#: flatcamGUI/MainGUI.py:868 flatcamGUI/MainGUI.py:1729 +#: flatcamGUI/MainGUI.py:1935 flatcamGUI/MainGUI.py:2577 #: flatcamTools/ToolDistance.py:35 flatcamTools/ToolDistance.py:195 msgid "Distance Tool" msgstr "Unealta Distanță" -#: flatcamGUI/FlatCAMGUI.py:870 flatcamGUI/FlatCAMGUI.py:2579 +#: flatcamGUI/MainGUI.py:870 flatcamGUI/MainGUI.py:2579 msgid "Distance Min Tool" msgstr "Unealta Distanță min" -#: flatcamGUI/FlatCAMGUI.py:872 flatcamGUI/FlatCAMGUI.py:1722 -#: flatcamGUI/FlatCAMGUI.py:2581 +#: flatcamGUI/MainGUI.py:872 flatcamGUI/MainGUI.py:1722 +#: flatcamGUI/MainGUI.py:2581 msgid "Set Origin" msgstr "Setează Originea" -#: flatcamGUI/FlatCAMGUI.py:874 +#: flatcamGUI/MainGUI.py:874 msgid "Move to Origin" msgstr "Deplasează-te la Origine" -#: flatcamGUI/FlatCAMGUI.py:877 flatcamGUI/FlatCAMGUI.py:2583 +#: flatcamGUI/MainGUI.py:877 flatcamGUI/MainGUI.py:2583 msgid "Jump to Location" msgstr "Sari la Locaţie" -#: flatcamGUI/FlatCAMGUI.py:879 flatcamGUI/FlatCAMGUI.py:1734 -#: flatcamGUI/FlatCAMGUI.py:2585 +#: flatcamGUI/MainGUI.py:879 flatcamGUI/MainGUI.py:1734 +#: flatcamGUI/MainGUI.py:2585 msgid "Locate in Object" msgstr "Localizează in Obiect" -#: flatcamGUI/FlatCAMGUI.py:885 flatcamGUI/FlatCAMGUI.py:2591 +#: flatcamGUI/MainGUI.py:885 flatcamGUI/MainGUI.py:2591 msgid "&Replot" msgstr "&Reafișare" -#: flatcamGUI/FlatCAMGUI.py:887 flatcamGUI/FlatCAMGUI.py:2593 +#: flatcamGUI/MainGUI.py:887 flatcamGUI/MainGUI.py:2593 msgid "&Clear plot" msgstr "&Șterge Afișare" -#: flatcamGUI/FlatCAMGUI.py:889 flatcamGUI/FlatCAMGUI.py:1725 -#: flatcamGUI/FlatCAMGUI.py:2595 +#: flatcamGUI/MainGUI.py:889 flatcamGUI/MainGUI.py:1725 +#: flatcamGUI/MainGUI.py:2595 msgid "Zoom In" msgstr "Marire" -#: flatcamGUI/FlatCAMGUI.py:891 flatcamGUI/FlatCAMGUI.py:1725 -#: flatcamGUI/FlatCAMGUI.py:2597 +#: flatcamGUI/MainGUI.py:891 flatcamGUI/MainGUI.py:1725 +#: flatcamGUI/MainGUI.py:2597 msgid "Zoom Out" msgstr "Micsorare" -#: flatcamGUI/FlatCAMGUI.py:893 flatcamGUI/FlatCAMGUI.py:1724 -#: flatcamGUI/FlatCAMGUI.py:2185 flatcamGUI/FlatCAMGUI.py:2599 +#: flatcamGUI/MainGUI.py:893 flatcamGUI/MainGUI.py:1724 +#: flatcamGUI/MainGUI.py:2185 flatcamGUI/MainGUI.py:2599 msgid "Zoom Fit" msgstr "Marire și ajustare" -#: flatcamGUI/FlatCAMGUI.py:901 flatcamGUI/FlatCAMGUI.py:2605 +#: flatcamGUI/MainGUI.py:901 flatcamGUI/MainGUI.py:2605 msgid "&Command Line" msgstr "&Linie de comanda" -#: flatcamGUI/FlatCAMGUI.py:913 flatcamGUI/FlatCAMGUI.py:2617 +#: flatcamGUI/MainGUI.py:913 flatcamGUI/MainGUI.py:2617 msgid "2Sided Tool" msgstr "Unealta 2-fețe" -#: flatcamGUI/FlatCAMGUI.py:915 flatcamGUI/FlatCAMGUI.py:1740 -#: flatcamGUI/FlatCAMGUI.py:2619 +#: flatcamGUI/MainGUI.py:915 flatcamGUI/MainGUI.py:1740 +#: flatcamGUI/MainGUI.py:2619 msgid "Align Objects Tool" msgstr "Unealta de Aliniere" -#: flatcamGUI/FlatCAMGUI.py:917 flatcamGUI/FlatCAMGUI.py:1741 -#: flatcamGUI/FlatCAMGUI.py:2621 flatcamTools/ToolExtractDrills.py:393 +#: flatcamGUI/MainGUI.py:917 flatcamGUI/MainGUI.py:1741 +#: flatcamGUI/MainGUI.py:2621 flatcamTools/ToolExtractDrills.py:393 msgid "Extract Drills Tool" msgstr "Unealta de Extragere Găuri" -#: flatcamGUI/FlatCAMGUI.py:920 flatcamGUI/ObjectUI.py:596 +#: flatcamGUI/MainGUI.py:920 flatcamGUI/ObjectUI.py:596 #: flatcamTools/ToolCutOut.py:440 msgid "Cutout Tool" msgstr "Unealta Decupare" -#: flatcamGUI/FlatCAMGUI.py:922 flatcamGUI/FlatCAMGUI.py:2626 +#: flatcamGUI/MainGUI.py:922 flatcamGUI/MainGUI.py:2626 #: flatcamGUI/ObjectUI.py:574 flatcamGUI/ObjectUI.py:2157 #: flatcamTools/ToolNCC.py:974 msgid "NCC Tool" msgstr "Unealta NCC" -#: flatcamGUI/FlatCAMGUI.py:928 flatcamGUI/FlatCAMGUI.py:2632 +#: flatcamGUI/MainGUI.py:928 flatcamGUI/MainGUI.py:2632 msgid "Panel Tool" msgstr "Unealta Panel" -#: flatcamGUI/FlatCAMGUI.py:930 flatcamGUI/FlatCAMGUI.py:2634 +#: flatcamGUI/MainGUI.py:930 flatcamGUI/MainGUI.py:2634 #: flatcamTools/ToolFilm.py:586 msgid "Film Tool" msgstr "Unealta Film" -#: flatcamGUI/FlatCAMGUI.py:932 flatcamGUI/FlatCAMGUI.py:2636 +#: flatcamGUI/MainGUI.py:932 flatcamGUI/MainGUI.py:2636 #: flatcamTools/ToolSolderPaste.py:553 msgid "SolderPaste Tool" msgstr "Unealta Dispenser SP" -#: flatcamGUI/FlatCAMGUI.py:934 flatcamGUI/FlatCAMGUI.py:2638 +#: flatcamGUI/MainGUI.py:934 flatcamGUI/MainGUI.py:2638 #: flatcamTools/ToolSub.py:35 msgid "Subtract Tool" msgstr "Unealta Scădere" -#: flatcamGUI/FlatCAMGUI.py:936 flatcamGUI/FlatCAMGUI.py:2640 +#: flatcamGUI/MainGUI.py:936 flatcamGUI/MainGUI.py:2640 #: flatcamTools/ToolRulesCheck.py:616 msgid "Rules Tool" msgstr "Unalta Verif. Reguli" -#: flatcamGUI/FlatCAMGUI.py:938 flatcamGUI/FlatCAMGUI.py:1743 -#: flatcamGUI/FlatCAMGUI.py:2642 flatcamTools/ToolOptimal.py:33 +#: flatcamGUI/MainGUI.py:938 flatcamGUI/MainGUI.py:1743 +#: flatcamGUI/MainGUI.py:2642 flatcamTools/ToolOptimal.py:33 #: flatcamTools/ToolOptimal.py:307 msgid "Optimal Tool" msgstr "Unealta Optim" -#: flatcamGUI/FlatCAMGUI.py:943 flatcamGUI/FlatCAMGUI.py:1740 -#: flatcamGUI/FlatCAMGUI.py:2647 +#: flatcamGUI/MainGUI.py:943 flatcamGUI/MainGUI.py:1740 +#: flatcamGUI/MainGUI.py:2647 msgid "Calculators Tool" msgstr "Unealta Calculatoare" -#: flatcamGUI/FlatCAMGUI.py:947 flatcamGUI/FlatCAMGUI.py:1744 -#: flatcamGUI/FlatCAMGUI.py:2651 flatcamTools/ToolQRCode.py:43 +#: flatcamGUI/MainGUI.py:947 flatcamGUI/MainGUI.py:1744 +#: flatcamGUI/MainGUI.py:2651 flatcamTools/ToolQRCode.py:43 #: flatcamTools/ToolQRCode.py:382 msgid "QRCode Tool" msgstr "Unealta QRCode" -#: flatcamGUI/FlatCAMGUI.py:949 flatcamGUI/FlatCAMGUI.py:2653 +#: flatcamGUI/MainGUI.py:949 flatcamGUI/MainGUI.py:2653 #: flatcamTools/ToolCopperThieving.py:39 flatcamTools/ToolCopperThieving.py:568 msgid "Copper Thieving Tool" msgstr "Unealta Copper Thieving" -#: flatcamGUI/FlatCAMGUI.py:952 flatcamGUI/FlatCAMGUI.py:1741 -#: flatcamGUI/FlatCAMGUI.py:2656 flatcamTools/ToolFiducials.py:33 +#: flatcamGUI/MainGUI.py:952 flatcamGUI/MainGUI.py:1741 +#: flatcamGUI/MainGUI.py:2656 flatcamTools/ToolFiducials.py:33 #: flatcamTools/ToolFiducials.py:395 msgid "Fiducials Tool" msgstr "Unealta Fiducials" -#: flatcamGUI/FlatCAMGUI.py:954 flatcamGUI/FlatCAMGUI.py:2658 +#: flatcamGUI/MainGUI.py:954 flatcamGUI/MainGUI.py:2658 #: flatcamTools/ToolCalibration.py:37 flatcamTools/ToolCalibration.py:759 msgid "Calibration Tool" msgstr "Unealta Calibrare" -#: flatcamGUI/FlatCAMGUI.py:956 flatcamGUI/FlatCAMGUI.py:1741 -#: flatcamGUI/FlatCAMGUI.py:2660 +#: flatcamGUI/MainGUI.py:956 flatcamGUI/MainGUI.py:1741 +#: flatcamGUI/MainGUI.py:2660 msgid "Punch Gerber Tool" msgstr "Unealta Punctare Gerber" -#: flatcamGUI/FlatCAMGUI.py:958 flatcamGUI/FlatCAMGUI.py:2662 +#: flatcamGUI/MainGUI.py:958 flatcamGUI/MainGUI.py:2662 #: flatcamTools/ToolInvertGerber.py:31 msgid "Invert Gerber Tool" msgstr "Unealta Inversare Gerber" -#: flatcamGUI/FlatCAMGUI.py:964 flatcamGUI/FlatCAMGUI.py:990 -#: flatcamGUI/FlatCAMGUI.py:1042 flatcamGUI/FlatCAMGUI.py:2668 -#: flatcamGUI/FlatCAMGUI.py:2746 +#: flatcamGUI/MainGUI.py:964 flatcamGUI/MainGUI.py:990 +#: flatcamGUI/MainGUI.py:1042 flatcamGUI/MainGUI.py:2668 +#: flatcamGUI/MainGUI.py:2746 msgid "Select" msgstr "Selectează" -#: flatcamGUI/FlatCAMGUI.py:966 flatcamGUI/FlatCAMGUI.py:2670 +#: flatcamGUI/MainGUI.py:966 flatcamGUI/MainGUI.py:2670 msgid "Add Drill Hole" msgstr "Adaugă o Găurire" -#: flatcamGUI/FlatCAMGUI.py:968 flatcamGUI/FlatCAMGUI.py:2672 +#: flatcamGUI/MainGUI.py:968 flatcamGUI/MainGUI.py:2672 msgid "Add Drill Hole Array" msgstr "Adaugă o arie de Găuriri" -#: flatcamGUI/FlatCAMGUI.py:970 flatcamGUI/FlatCAMGUI.py:2020 -#: flatcamGUI/FlatCAMGUI.py:2273 flatcamGUI/FlatCAMGUI.py:2676 +#: flatcamGUI/MainGUI.py:970 flatcamGUI/MainGUI.py:2020 +#: flatcamGUI/MainGUI.py:2273 flatcamGUI/MainGUI.py:2676 msgid "Add Slot" msgstr "Adaugă Slot" -#: flatcamGUI/FlatCAMGUI.py:972 flatcamGUI/FlatCAMGUI.py:2019 -#: flatcamGUI/FlatCAMGUI.py:2275 flatcamGUI/FlatCAMGUI.py:2678 +#: flatcamGUI/MainGUI.py:972 flatcamGUI/MainGUI.py:2019 +#: flatcamGUI/MainGUI.py:2275 flatcamGUI/MainGUI.py:2678 msgid "Add Slot Array" msgstr "Adaugă o Arie sloturi" -#: flatcamGUI/FlatCAMGUI.py:974 flatcamGUI/FlatCAMGUI.py:2278 -#: flatcamGUI/FlatCAMGUI.py:2674 +#: flatcamGUI/MainGUI.py:974 flatcamGUI/MainGUI.py:2278 +#: flatcamGUI/MainGUI.py:2674 msgid "Resize Drill" msgstr "Redimens. Găurire" -#: flatcamGUI/FlatCAMGUI.py:978 flatcamGUI/FlatCAMGUI.py:2682 +#: flatcamGUI/MainGUI.py:978 flatcamGUI/MainGUI.py:2682 msgid "Copy Drill" msgstr "Copiază Găurire" -#: flatcamGUI/FlatCAMGUI.py:980 flatcamGUI/FlatCAMGUI.py:2684 +#: flatcamGUI/MainGUI.py:980 flatcamGUI/MainGUI.py:2684 msgid "Delete Drill" msgstr "Șterge Găurire" -#: flatcamGUI/FlatCAMGUI.py:984 flatcamGUI/FlatCAMGUI.py:2688 +#: flatcamGUI/MainGUI.py:984 flatcamGUI/MainGUI.py:2688 msgid "Move Drill" msgstr "Muta Găurire" -#: flatcamGUI/FlatCAMGUI.py:992 flatcamGUI/FlatCAMGUI.py:2696 +#: flatcamGUI/MainGUI.py:992 flatcamGUI/MainGUI.py:2696 msgid "Add Circle" msgstr "Adaugă Cerc" -#: flatcamGUI/FlatCAMGUI.py:994 flatcamGUI/FlatCAMGUI.py:2698 +#: flatcamGUI/MainGUI.py:994 flatcamGUI/MainGUI.py:2698 msgid "Add Arc" msgstr "Adaugă Arc" -#: flatcamGUI/FlatCAMGUI.py:996 flatcamGUI/FlatCAMGUI.py:2700 +#: flatcamGUI/MainGUI.py:996 flatcamGUI/MainGUI.py:2700 msgid "Add Rectangle" msgstr "Adaugă Patrulater" -#: flatcamGUI/FlatCAMGUI.py:1000 flatcamGUI/FlatCAMGUI.py:2704 +#: flatcamGUI/MainGUI.py:1000 flatcamGUI/MainGUI.py:2704 msgid "Add Path" msgstr "Adaugă Cale" -#: flatcamGUI/FlatCAMGUI.py:1002 flatcamGUI/FlatCAMGUI.py:2706 +#: flatcamGUI/MainGUI.py:1002 flatcamGUI/MainGUI.py:2706 msgid "Add Polygon" msgstr "Adaugă Poligon" -#: flatcamGUI/FlatCAMGUI.py:1005 flatcamGUI/FlatCAMGUI.py:2709 +#: flatcamGUI/MainGUI.py:1005 flatcamGUI/MainGUI.py:2709 msgid "Add Text" msgstr "Adaugă Text" -#: flatcamGUI/FlatCAMGUI.py:1007 flatcamGUI/FlatCAMGUI.py:2711 +#: flatcamGUI/MainGUI.py:1007 flatcamGUI/MainGUI.py:2711 msgid "Add Buffer" msgstr "Adaugă Bufer" -#: flatcamGUI/FlatCAMGUI.py:1009 flatcamGUI/FlatCAMGUI.py:2713 +#: flatcamGUI/MainGUI.py:1009 flatcamGUI/MainGUI.py:2713 msgid "Paint Shape" msgstr "Paint o forma" -#: flatcamGUI/FlatCAMGUI.py:1011 flatcamGUI/FlatCAMGUI.py:1068 -#: flatcamGUI/FlatCAMGUI.py:2214 flatcamGUI/FlatCAMGUI.py:2259 -#: flatcamGUI/FlatCAMGUI.py:2715 flatcamGUI/FlatCAMGUI.py:2771 +#: flatcamGUI/MainGUI.py:1011 flatcamGUI/MainGUI.py:1068 +#: flatcamGUI/MainGUI.py:2214 flatcamGUI/MainGUI.py:2259 +#: flatcamGUI/MainGUI.py:2715 flatcamGUI/MainGUI.py:2771 msgid "Eraser" msgstr "Stergere Selectivă" -#: flatcamGUI/FlatCAMGUI.py:1015 flatcamGUI/FlatCAMGUI.py:2719 +#: flatcamGUI/MainGUI.py:1015 flatcamGUI/MainGUI.py:2719 msgid "Polygon Union" msgstr "Uniune Poligoane" -#: flatcamGUI/FlatCAMGUI.py:1017 flatcamGUI/FlatCAMGUI.py:2721 +#: flatcamGUI/MainGUI.py:1017 flatcamGUI/MainGUI.py:2721 msgid "Polygon Explode" msgstr "Explodare Poligoane" -#: flatcamGUI/FlatCAMGUI.py:1020 flatcamGUI/FlatCAMGUI.py:2724 +#: flatcamGUI/MainGUI.py:1020 flatcamGUI/MainGUI.py:2724 msgid "Polygon Intersection" msgstr "Intersecţie Poligoane" -#: flatcamGUI/FlatCAMGUI.py:1022 flatcamGUI/FlatCAMGUI.py:2726 +#: flatcamGUI/MainGUI.py:1022 flatcamGUI/MainGUI.py:2726 msgid "Polygon Subtraction" msgstr "Substracţie Poligoane" -#: flatcamGUI/FlatCAMGUI.py:1026 flatcamGUI/FlatCAMGUI.py:2730 +#: flatcamGUI/MainGUI.py:1026 flatcamGUI/MainGUI.py:2730 msgid "Cut Path" msgstr "Taie Cale" -#: flatcamGUI/FlatCAMGUI.py:1028 +#: flatcamGUI/MainGUI.py:1028 msgid "Copy Shape(s)" msgstr "Copiază forme geo." -#: flatcamGUI/FlatCAMGUI.py:1031 +#: flatcamGUI/MainGUI.py:1031 msgid "Delete Shape '-'" msgstr "Șterge forme geo" -#: flatcamGUI/FlatCAMGUI.py:1033 flatcamGUI/FlatCAMGUI.py:1076 -#: flatcamGUI/FlatCAMGUI.py:2226 flatcamGUI/FlatCAMGUI.py:2263 -#: flatcamGUI/FlatCAMGUI.py:2736 flatcamGUI/FlatCAMGUI.py:2779 +#: flatcamGUI/MainGUI.py:1033 flatcamGUI/MainGUI.py:1076 +#: flatcamGUI/MainGUI.py:2226 flatcamGUI/MainGUI.py:2263 +#: flatcamGUI/MainGUI.py:2736 flatcamGUI/MainGUI.py:2779 #: flatcamGUI/ObjectUI.py:109 msgid "Transformations" msgstr "Transformări" -#: flatcamGUI/FlatCAMGUI.py:1036 +#: flatcamGUI/MainGUI.py:1036 msgid "Move Objects " msgstr "Mută Obiecte " -#: flatcamGUI/FlatCAMGUI.py:1044 flatcamGUI/FlatCAMGUI.py:2139 -#: flatcamGUI/FlatCAMGUI.py:2748 +#: flatcamGUI/MainGUI.py:1044 flatcamGUI/MainGUI.py:2139 +#: flatcamGUI/MainGUI.py:2748 msgid "Add Pad" msgstr "Adaugă Pad" -#: flatcamGUI/FlatCAMGUI.py:1048 flatcamGUI/FlatCAMGUI.py:2140 -#: flatcamGUI/FlatCAMGUI.py:2752 +#: flatcamGUI/MainGUI.py:1048 flatcamGUI/MainGUI.py:2140 +#: flatcamGUI/MainGUI.py:2752 msgid "Add Track" msgstr "Adaugă Traseu" -#: flatcamGUI/FlatCAMGUI.py:1050 flatcamGUI/FlatCAMGUI.py:2139 -#: flatcamGUI/FlatCAMGUI.py:2754 +#: flatcamGUI/MainGUI.py:1050 flatcamGUI/MainGUI.py:2139 +#: flatcamGUI/MainGUI.py:2754 msgid "Add Region" msgstr "Adaugă Regiune" -#: flatcamGUI/FlatCAMGUI.py:1052 flatcamGUI/FlatCAMGUI.py:2245 -#: flatcamGUI/FlatCAMGUI.py:2756 +#: flatcamGUI/MainGUI.py:1052 flatcamGUI/MainGUI.py:2245 +#: flatcamGUI/MainGUI.py:2756 msgid "Poligonize" msgstr "Poligonizare" -#: flatcamGUI/FlatCAMGUI.py:1055 flatcamGUI/FlatCAMGUI.py:2247 -#: flatcamGUI/FlatCAMGUI.py:2759 +#: flatcamGUI/MainGUI.py:1055 flatcamGUI/MainGUI.py:2247 +#: flatcamGUI/MainGUI.py:2759 msgid "SemiDisc" msgstr "SemiDisc" -#: flatcamGUI/FlatCAMGUI.py:1057 flatcamGUI/FlatCAMGUI.py:2249 -#: flatcamGUI/FlatCAMGUI.py:2761 +#: flatcamGUI/MainGUI.py:1057 flatcamGUI/MainGUI.py:2249 +#: flatcamGUI/MainGUI.py:2761 msgid "Disc" msgstr "Disc" -#: flatcamGUI/FlatCAMGUI.py:1065 flatcamGUI/FlatCAMGUI.py:2257 -#: flatcamGUI/FlatCAMGUI.py:2769 +#: flatcamGUI/MainGUI.py:1065 flatcamGUI/MainGUI.py:2257 +#: flatcamGUI/MainGUI.py:2769 msgid "Mark Area" msgstr "Marc. aria" -#: flatcamGUI/FlatCAMGUI.py:1079 flatcamGUI/FlatCAMGUI.py:2139 -#: flatcamGUI/FlatCAMGUI.py:2230 flatcamGUI/FlatCAMGUI.py:2293 -#: flatcamGUI/FlatCAMGUI.py:2782 flatcamTools/ToolMove.py:27 +#: flatcamGUI/MainGUI.py:1079 flatcamGUI/MainGUI.py:2139 +#: flatcamGUI/MainGUI.py:2230 flatcamGUI/MainGUI.py:2293 +#: flatcamGUI/MainGUI.py:2782 flatcamTools/ToolMove.py:27 msgid "Move" msgstr "Mutare" -#: flatcamGUI/FlatCAMGUI.py:1087 flatcamGUI/FlatCAMGUI.py:2791 +#: flatcamGUI/MainGUI.py:1087 flatcamGUI/MainGUI.py:2791 msgid "Snap to grid" msgstr "Lipire la grid" -#: flatcamGUI/FlatCAMGUI.py:1090 flatcamGUI/FlatCAMGUI.py:2794 +#: flatcamGUI/MainGUI.py:1090 flatcamGUI/MainGUI.py:2794 msgid "Grid X snapping distance" msgstr "Distanta de lipire la grid pe axa X" -#: flatcamGUI/FlatCAMGUI.py:1095 flatcamGUI/FlatCAMGUI.py:2799 +#: flatcamGUI/MainGUI.py:1095 flatcamGUI/MainGUI.py:2799 msgid "Grid Y snapping distance" msgstr "Distanta de lipire la grid pe axa Y" -#: flatcamGUI/FlatCAMGUI.py:1101 flatcamGUI/FlatCAMGUI.py:2805 +#: flatcamGUI/MainGUI.py:1101 flatcamGUI/MainGUI.py:2805 msgid "" "When active, value on Grid_X\n" "is copied to the Grid_Y value." @@ -6343,65 +6343,65 @@ msgstr "" "Când este activ, valoarea de pe Grid_X\n" "este copiata și in Grid_Y." -#: flatcamGUI/FlatCAMGUI.py:1108 flatcamGUI/FlatCAMGUI.py:2812 +#: flatcamGUI/MainGUI.py:1108 flatcamGUI/MainGUI.py:2812 msgid "Snap to corner" msgstr "Lipire la colt" -#: flatcamGUI/FlatCAMGUI.py:1112 flatcamGUI/FlatCAMGUI.py:2816 +#: flatcamGUI/MainGUI.py:1112 flatcamGUI/MainGUI.py:2816 #: flatcamGUI/preferences/general/GeneralAPPSetGroupUI.py:78 msgid "Max. magnet distance" msgstr "Distanta magnetica maxima" -#: flatcamGUI/FlatCAMGUI.py:1149 +#: flatcamGUI/MainGUI.py:1149 msgid "Selected" msgstr "Selectat" -#: flatcamGUI/FlatCAMGUI.py:1177 flatcamGUI/FlatCAMGUI.py:1185 +#: flatcamGUI/MainGUI.py:1177 flatcamGUI/MainGUI.py:1185 msgid "Plot Area" msgstr "Arie Afișare" -#: flatcamGUI/FlatCAMGUI.py:1212 +#: flatcamGUI/MainGUI.py:1212 msgid "General" msgstr "General" -#: flatcamGUI/FlatCAMGUI.py:1227 flatcamTools/ToolCopperThieving.py:74 +#: flatcamGUI/MainGUI.py:1227 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:1237 flatcamTools/ToolDblSided.py:92 +#: flatcamGUI/MainGUI.py:1237 flatcamTools/ToolDblSided.py:92 msgid "EXCELLON" msgstr "EXCELLON" -#: flatcamGUI/FlatCAMGUI.py:1247 flatcamTools/ToolDblSided.py:120 +#: flatcamGUI/MainGUI.py:1247 flatcamTools/ToolDblSided.py:120 msgid "GEOMETRY" msgstr "GEOMETRIE" -#: flatcamGUI/FlatCAMGUI.py:1257 +#: flatcamGUI/MainGUI.py:1257 msgid "CNC-JOB" msgstr "CNCJob" -#: flatcamGUI/FlatCAMGUI.py:1266 flatcamGUI/ObjectUI.py:563 +#: flatcamGUI/MainGUI.py:1266 flatcamGUI/ObjectUI.py:563 #: flatcamGUI/ObjectUI.py:2132 msgid "TOOLS" msgstr "Unelte" -#: flatcamGUI/FlatCAMGUI.py:1275 +#: flatcamGUI/MainGUI.py:1275 msgid "TOOLS 2" msgstr "UNELTE 2" -#: flatcamGUI/FlatCAMGUI.py:1285 +#: flatcamGUI/MainGUI.py:1285 msgid "UTILITIES" msgstr "UTILITARE" -#: flatcamGUI/FlatCAMGUI.py:1302 +#: flatcamGUI/MainGUI.py:1302 #: flatcamGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:192 msgid "Restore Defaults" msgstr "Restabiliți setările de bază" -#: flatcamGUI/FlatCAMGUI.py:1305 +#: flatcamGUI/MainGUI.py:1305 msgid "" "Restore the entire set of default values\n" "to the initial values loaded after first launch." @@ -6409,19 +6409,19 @@ msgstr "" "Restaurați întregul set de valori implicite\n" "la valorile inițiale încărcate după prima lansare." -#: flatcamGUI/FlatCAMGUI.py:1310 +#: flatcamGUI/MainGUI.py:1310 msgid "Open Pref Folder" msgstr "Deschide Pref Dir" -#: flatcamGUI/FlatCAMGUI.py:1313 +#: flatcamGUI/MainGUI.py:1313 msgid "Open the folder where FlatCAM save the preferences files." msgstr "Deschide directorul unde FlatCAM salvează fişierele cu setări." -#: flatcamGUI/FlatCAMGUI.py:1317 flatcamGUI/FlatCAMGUI.py:2517 +#: flatcamGUI/MainGUI.py:1317 flatcamGUI/MainGUI.py:2517 msgid "Clear GUI Settings" msgstr "Șterge Setările GUI" -#: flatcamGUI/FlatCAMGUI.py:1321 +#: flatcamGUI/MainGUI.py:1321 msgid "" "Clear the GUI settings for FlatCAM,\n" "such as: layout, gui state, style, hdpi support etc." @@ -6429,15 +6429,15 @@ msgstr "" "Șterge setările GUI pentru FlatCAM,\n" "cum ar fi: amplasare, stare UI, suport HDPI sau traducerea." -#: flatcamGUI/FlatCAMGUI.py:1332 +#: flatcamGUI/MainGUI.py:1332 msgid "Apply" msgstr "Aplicați" -#: flatcamGUI/FlatCAMGUI.py:1335 +#: flatcamGUI/MainGUI.py:1335 msgid "Apply the current preferences without saving to a file." msgstr "Aplicați preferințele actuale fără a salva într-un fișier." -#: flatcamGUI/FlatCAMGUI.py:1342 +#: flatcamGUI/MainGUI.py:1342 msgid "" "Save the current settings in the 'current_defaults' file\n" "which is the file storing the working default preferences." @@ -6445,215 +6445,215 @@ msgstr "" "Salvează setările curente in fişierul numit: 'current_defaults'\n" "fişier care este cel unde se salvează preferințele cu care se va lucra." -#: flatcamGUI/FlatCAMGUI.py:1350 +#: flatcamGUI/MainGUI.py:1350 msgid "Will not save the changes and will close the preferences window." msgstr "Nu va salva modificările și va închide fereastra de preferințe." -#: flatcamGUI/FlatCAMGUI.py:1719 +#: flatcamGUI/MainGUI.py:1719 msgid "SHOW SHORTCUT LIST" msgstr "ARATA LISTA DE TASTE SHORTCUT" -#: flatcamGUI/FlatCAMGUI.py:1719 +#: flatcamGUI/MainGUI.py:1719 msgid "Switch to Project Tab" msgstr "Treci la Tab-ul Proiect" -#: flatcamGUI/FlatCAMGUI.py:1719 +#: flatcamGUI/MainGUI.py:1719 msgid "Switch to Selected Tab" msgstr "Treci la Tab-ul Selectat" -#: flatcamGUI/FlatCAMGUI.py:1720 +#: flatcamGUI/MainGUI.py:1720 msgid "Switch to Tool Tab" msgstr "Treci la Tab-ul 'Unealta'" -#: flatcamGUI/FlatCAMGUI.py:1721 +#: flatcamGUI/MainGUI.py:1721 msgid "New Gerber" msgstr "Gerber Nou" -#: flatcamGUI/FlatCAMGUI.py:1721 +#: flatcamGUI/MainGUI.py:1721 msgid "Edit Object (if selected)" msgstr "Editeaza obiectul (daca este selectat)" -#: flatcamGUI/FlatCAMGUI.py:1721 +#: flatcamGUI/MainGUI.py:1721 msgid "Jump to Coordinates" msgstr "Sari la Coordonatele" -#: flatcamGUI/FlatCAMGUI.py:1722 +#: flatcamGUI/MainGUI.py:1722 msgid "New Excellon" msgstr "Excellon nou" -#: flatcamGUI/FlatCAMGUI.py:1722 +#: flatcamGUI/MainGUI.py:1722 msgid "Move Obj" msgstr "Mută Obiecte" -#: flatcamGUI/FlatCAMGUI.py:1722 +#: flatcamGUI/MainGUI.py:1722 msgid "New Geometry" msgstr "Geometrie Noua" -#: flatcamGUI/FlatCAMGUI.py:1722 +#: flatcamGUI/MainGUI.py:1722 msgid "Change Units" msgstr "Comută Unitati" -#: flatcamGUI/FlatCAMGUI.py:1723 +#: flatcamGUI/MainGUI.py:1723 msgid "Open Properties Tool" msgstr "Deschide Unealta Proprietati" -#: flatcamGUI/FlatCAMGUI.py:1723 +#: flatcamGUI/MainGUI.py:1723 msgid "Rotate by 90 degree CW" msgstr "Roteste cu 90 grade CW" -#: flatcamGUI/FlatCAMGUI.py:1723 +#: flatcamGUI/MainGUI.py:1723 msgid "Shell Toggle" msgstr "Comuta Linie de comanda" -#: flatcamGUI/FlatCAMGUI.py:1724 +#: flatcamGUI/MainGUI.py:1724 msgid "" "Add a Tool (when in Geometry Selected Tab or in Tools NCC or Tools Paint)" msgstr "" "Adaugă o Unealtă (cand ne aflam in tab-ul Selected al Geometriei sau in " "Unealta NCC sau in unealta Paint)" -#: flatcamGUI/FlatCAMGUI.py:1725 +#: flatcamGUI/MainGUI.py:1725 msgid "Flip on X_axis" msgstr "Oglindește pe axa X" -#: flatcamGUI/FlatCAMGUI.py:1725 +#: flatcamGUI/MainGUI.py:1725 msgid "Flip on Y_axis" msgstr "Oglindește pe axa Y" -#: flatcamGUI/FlatCAMGUI.py:1728 +#: flatcamGUI/MainGUI.py:1728 msgid "Copy Obj" msgstr "Copiază Obiecte" -#: flatcamGUI/FlatCAMGUI.py:1728 +#: flatcamGUI/MainGUI.py:1728 msgid "Open Tools Database" msgstr "Deschide baza de date Unelte" -#: flatcamGUI/FlatCAMGUI.py:1729 +#: flatcamGUI/MainGUI.py:1729 msgid "Open Excellon File" msgstr "Încarcă un fisier Excellon" -#: flatcamGUI/FlatCAMGUI.py:1729 +#: flatcamGUI/MainGUI.py:1729 msgid "Open Gerber File" msgstr "Încarcă un fisier Gerber" -#: flatcamGUI/FlatCAMGUI.py:1729 +#: flatcamGUI/MainGUI.py:1729 msgid "New Project" msgstr "Un Nou Project" -#: flatcamGUI/FlatCAMGUI.py:1730 flatcamTools/ToolPDF.py:42 +#: flatcamGUI/MainGUI.py:1730 flatcamTools/ToolPDF.py:42 msgid "PDF Import Tool" msgstr "Unealta import PDF" -#: flatcamGUI/FlatCAMGUI.py:1730 +#: flatcamGUI/MainGUI.py:1730 msgid "Save Project" msgstr "Salvează Proiectul" -#: flatcamGUI/FlatCAMGUI.py:1730 +#: flatcamGUI/MainGUI.py:1730 msgid "Toggle Plot Area" msgstr "Comută Aria de Afișare" -#: flatcamGUI/FlatCAMGUI.py:1733 +#: flatcamGUI/MainGUI.py:1733 msgid "Copy Obj_Name" msgstr "Copiază Nume Obiect" -#: flatcamGUI/FlatCAMGUI.py:1734 +#: flatcamGUI/MainGUI.py:1734 msgid "Toggle Code Editor" msgstr "Comută Editorul de cod" -#: flatcamGUI/FlatCAMGUI.py:1734 +#: flatcamGUI/MainGUI.py:1734 msgid "Toggle the axis" msgstr "Comută Reprezentare Axe" -#: flatcamGUI/FlatCAMGUI.py:1734 flatcamGUI/FlatCAMGUI.py:1933 -#: flatcamGUI/FlatCAMGUI.py:2020 flatcamGUI/FlatCAMGUI.py:2142 +#: flatcamGUI/MainGUI.py:1734 flatcamGUI/MainGUI.py:1933 +#: flatcamGUI/MainGUI.py:2020 flatcamGUI/MainGUI.py:2142 msgid "Distance Minimum Tool" msgstr "Unealta Distanță minimă" -#: flatcamGUI/FlatCAMGUI.py:1735 +#: flatcamGUI/MainGUI.py:1735 msgid "Open Preferences Window" msgstr "Deschide Preferințe" -#: flatcamGUI/FlatCAMGUI.py:1736 +#: flatcamGUI/MainGUI.py:1736 msgid "Rotate by 90 degree CCW" msgstr "Roteste cu 90 grade CCW" -#: flatcamGUI/FlatCAMGUI.py:1736 +#: flatcamGUI/MainGUI.py:1736 msgid "Run a Script" msgstr "Rulează TCL script" -#: flatcamGUI/FlatCAMGUI.py:1736 +#: flatcamGUI/MainGUI.py:1736 msgid "Toggle the workspace" msgstr "Comută Suprafata de lucru" -#: flatcamGUI/FlatCAMGUI.py:1736 +#: flatcamGUI/MainGUI.py:1736 msgid "Skew on X axis" msgstr "Deformare pe axa X" -#: flatcamGUI/FlatCAMGUI.py:1737 +#: flatcamGUI/MainGUI.py:1737 msgid "Skew on Y axis" msgstr "Deformare pe axa Y" -#: flatcamGUI/FlatCAMGUI.py:1740 +#: flatcamGUI/MainGUI.py:1740 msgid "2-Sided PCB Tool" msgstr "Unealta 2-fețe" -#: flatcamGUI/FlatCAMGUI.py:1740 +#: flatcamGUI/MainGUI.py:1740 msgid "Transformations Tool" msgstr "Unealta Transformări" -#: flatcamGUI/FlatCAMGUI.py:1742 +#: flatcamGUI/MainGUI.py:1742 msgid "Solder Paste Dispensing Tool" msgstr "Unealta DispensorPF" -#: flatcamGUI/FlatCAMGUI.py:1743 +#: flatcamGUI/MainGUI.py:1743 msgid "Film PCB Tool" msgstr "Unealta Film" -#: flatcamGUI/FlatCAMGUI.py:1743 +#: flatcamGUI/MainGUI.py:1743 msgid "Non-Copper Clearing Tool" msgstr "Curățăre Non-Cupru" -#: flatcamGUI/FlatCAMGUI.py:1744 +#: flatcamGUI/MainGUI.py:1744 msgid "Paint Area Tool" msgstr "Unealta Paint" -#: flatcamGUI/FlatCAMGUI.py:1744 +#: flatcamGUI/MainGUI.py:1744 msgid "Rules Check Tool" msgstr "Unealta Verificari Reguli" -#: flatcamGUI/FlatCAMGUI.py:1745 +#: flatcamGUI/MainGUI.py:1745 msgid "View File Source" msgstr "Vizualiz. Cod Sursă" -#: flatcamGUI/FlatCAMGUI.py:1746 +#: flatcamGUI/MainGUI.py:1746 msgid "Cutout PCB Tool" msgstr "Unealta Decupare" -#: flatcamGUI/FlatCAMGUI.py:1746 +#: flatcamGUI/MainGUI.py:1746 msgid "Enable all Plots" msgstr "Activează Afișare pt Tot" -#: flatcamGUI/FlatCAMGUI.py:1746 +#: flatcamGUI/MainGUI.py:1746 msgid "Disable all Plots" msgstr "Dezactivează Afișare pt Tot" -#: flatcamGUI/FlatCAMGUI.py:1746 +#: flatcamGUI/MainGUI.py:1746 msgid "Disable Non-selected Plots" msgstr "Dezactivează ne-selectate" -#: flatcamGUI/FlatCAMGUI.py:1747 +#: flatcamGUI/MainGUI.py:1747 msgid "Toggle Full Screen" msgstr "Comută FullScreen" -#: flatcamGUI/FlatCAMGUI.py:1750 +#: flatcamGUI/MainGUI.py:1750 msgid "Abort current task (gracefully)" msgstr "Renutna la task" -#: flatcamGUI/FlatCAMGUI.py:1753 +#: flatcamGUI/MainGUI.py:1753 msgid "Save Project As" msgstr "Salvează Proiectul ca" -#: flatcamGUI/FlatCAMGUI.py:1754 +#: flatcamGUI/MainGUI.py:1754 msgid "" "Paste Special. Will convert a Windows path style to the one required in Tcl " "Shell" @@ -6661,247 +6661,247 @@ msgstr "" "Lipire specială. Va converti stilul de adresa cale Windows in cel necesar in " "Tcl Shell" -#: flatcamGUI/FlatCAMGUI.py:1757 +#: flatcamGUI/MainGUI.py:1757 msgid "Open Online Manual" msgstr "Deschide Manualul Online" -#: flatcamGUI/FlatCAMGUI.py:1758 +#: flatcamGUI/MainGUI.py:1758 msgid "Open Online Tutorials" msgstr "Deschide Tutoriale Online" -#: flatcamGUI/FlatCAMGUI.py:1758 +#: flatcamGUI/MainGUI.py:1758 msgid "Refresh Plots" msgstr "Improspatare Afișare" -#: flatcamGUI/FlatCAMGUI.py:1758 flatcamTools/ToolSolderPaste.py:509 +#: flatcamGUI/MainGUI.py:1758 flatcamTools/ToolSolderPaste.py:509 msgid "Delete Object" msgstr "Șterge Obiectul" -#: flatcamGUI/FlatCAMGUI.py:1758 +#: flatcamGUI/MainGUI.py:1758 msgid "Alternate: Delete Tool" msgstr "Alternativ: Șterge Unealta" -#: flatcamGUI/FlatCAMGUI.py:1759 +#: flatcamGUI/MainGUI.py:1759 msgid "(left to Key_1)Toggle Notebook Area (Left Side)" msgstr "(in stanga tasta 1) Comutați zona Notebook (partea stângă)" -#: flatcamGUI/FlatCAMGUI.py:1759 +#: flatcamGUI/MainGUI.py:1759 msgid "En(Dis)able Obj Plot" msgstr "(Dez)activează Afișare" -#: flatcamGUI/FlatCAMGUI.py:1760 +#: flatcamGUI/MainGUI.py:1760 msgid "Deselects all objects" msgstr "Deselectează toate obiectele" -#: flatcamGUI/FlatCAMGUI.py:1774 +#: flatcamGUI/MainGUI.py:1774 msgid "Editor Shortcut list" msgstr "Lista de shortcut-uri" -#: flatcamGUI/FlatCAMGUI.py:1928 +#: flatcamGUI/MainGUI.py:1928 msgid "GEOMETRY EDITOR" msgstr "EDITOR GEOMETRIE" -#: flatcamGUI/FlatCAMGUI.py:1928 +#: flatcamGUI/MainGUI.py:1928 msgid "Draw an Arc" msgstr "Deseneaza un Arc" -#: flatcamGUI/FlatCAMGUI.py:1928 +#: flatcamGUI/MainGUI.py:1928 msgid "Copy Geo Item" msgstr "Copiază Geo" -#: flatcamGUI/FlatCAMGUI.py:1929 +#: flatcamGUI/MainGUI.py:1929 msgid "Within Add Arc will toogle the ARC direction: CW or CCW" msgstr "In cadrul 'Aadauga Arc' va comuta intre directiile arcului: CW sau CCW" -#: flatcamGUI/FlatCAMGUI.py:1929 +#: flatcamGUI/MainGUI.py:1929 msgid "Polygon Intersection Tool" msgstr "Unealta Intersecţie Poligoane" -#: flatcamGUI/FlatCAMGUI.py:1930 +#: flatcamGUI/MainGUI.py:1930 msgid "Geo Paint Tool" msgstr "Unealta Paint Geo" -#: flatcamGUI/FlatCAMGUI.py:1930 flatcamGUI/FlatCAMGUI.py:2019 -#: flatcamGUI/FlatCAMGUI.py:2139 +#: flatcamGUI/MainGUI.py:1930 flatcamGUI/MainGUI.py:2019 +#: flatcamGUI/MainGUI.py:2139 msgid "Jump to Location (x, y)" msgstr "Sari la Locaţia (x, y)" -#: flatcamGUI/FlatCAMGUI.py:1930 +#: flatcamGUI/MainGUI.py:1930 msgid "Toggle Corner Snap" msgstr "Comută lipire colt" -#: flatcamGUI/FlatCAMGUI.py:1930 +#: flatcamGUI/MainGUI.py:1930 msgid "Move Geo Item" msgstr "Muta El. Geo" -#: flatcamGUI/FlatCAMGUI.py:1931 +#: flatcamGUI/MainGUI.py:1931 msgid "Within Add Arc will cycle through the ARC modes" msgstr "In cadrul 'Adauga Arc' va trece circular prin tipurile de Arc" -#: flatcamGUI/FlatCAMGUI.py:1931 +#: flatcamGUI/MainGUI.py:1931 msgid "Draw a Polygon" msgstr "Deseneaza un Poligon" -#: flatcamGUI/FlatCAMGUI.py:1931 +#: flatcamGUI/MainGUI.py:1931 msgid "Draw a Circle" msgstr "Deseneaza un Cerc" -#: flatcamGUI/FlatCAMGUI.py:1932 +#: flatcamGUI/MainGUI.py:1932 msgid "Draw a Path" msgstr "Deseneaza un Traseu" -#: flatcamGUI/FlatCAMGUI.py:1932 +#: flatcamGUI/MainGUI.py:1932 msgid "Draw Rectangle" msgstr "Deseneaza un Patrulater" -#: flatcamGUI/FlatCAMGUI.py:1932 +#: flatcamGUI/MainGUI.py:1932 msgid "Polygon Subtraction Tool" msgstr "Unealta Substracţie Poligoane" -#: flatcamGUI/FlatCAMGUI.py:1932 +#: flatcamGUI/MainGUI.py:1932 msgid "Add Text Tool" msgstr "Unealta Adaugare Text" -#: flatcamGUI/FlatCAMGUI.py:1933 +#: flatcamGUI/MainGUI.py:1933 msgid "Polygon Union Tool" msgstr "Unealta Uniune Poligoane" -#: flatcamGUI/FlatCAMGUI.py:1933 +#: flatcamGUI/MainGUI.py:1933 msgid "Flip shape on X axis" msgstr "Oglindește pe axa X" -#: flatcamGUI/FlatCAMGUI.py:1933 +#: flatcamGUI/MainGUI.py:1933 msgid "Flip shape on Y axis" msgstr "Oglindește pe axa Y" -#: flatcamGUI/FlatCAMGUI.py:1934 +#: flatcamGUI/MainGUI.py:1934 msgid "Skew shape on X axis" msgstr "Deformare pe axa X" -#: flatcamGUI/FlatCAMGUI.py:1934 +#: flatcamGUI/MainGUI.py:1934 msgid "Skew shape on Y axis" msgstr "Deformare pe axa Y" -#: flatcamGUI/FlatCAMGUI.py:1934 +#: flatcamGUI/MainGUI.py:1934 msgid "Editor Transformation Tool" msgstr "Unealta Transformare in Editor" -#: flatcamGUI/FlatCAMGUI.py:1935 +#: flatcamGUI/MainGUI.py:1935 msgid "Offset shape on X axis" msgstr "Ofset pe axa X" -#: flatcamGUI/FlatCAMGUI.py:1935 +#: flatcamGUI/MainGUI.py:1935 msgid "Offset shape on Y axis" msgstr "Ofset pe axa Y" -#: flatcamGUI/FlatCAMGUI.py:1936 flatcamGUI/FlatCAMGUI.py:2022 -#: flatcamGUI/FlatCAMGUI.py:2144 +#: flatcamGUI/MainGUI.py:1936 flatcamGUI/MainGUI.py:2022 +#: flatcamGUI/MainGUI.py:2144 msgid "Save Object and Exit Editor" msgstr "Salvează Obiectul și inchide Editorul" -#: flatcamGUI/FlatCAMGUI.py:1936 +#: flatcamGUI/MainGUI.py:1936 msgid "Polygon Cut Tool" msgstr "Unealta Taiere Poligoane" -#: flatcamGUI/FlatCAMGUI.py:1937 +#: flatcamGUI/MainGUI.py:1937 msgid "Rotate Geometry" msgstr "Roteste Geometrie" -#: flatcamGUI/FlatCAMGUI.py:1937 +#: flatcamGUI/MainGUI.py:1937 msgid "Finish drawing for certain tools" msgstr "Termina de desenat (pt anumite unelte)" -#: flatcamGUI/FlatCAMGUI.py:1937 flatcamGUI/FlatCAMGUI.py:2022 -#: flatcamGUI/FlatCAMGUI.py:2142 +#: flatcamGUI/MainGUI.py:1937 flatcamGUI/MainGUI.py:2022 +#: flatcamGUI/MainGUI.py:2142 msgid "Abort and return to Select" msgstr "Renutna si intoarce-te la Selectie" -#: flatcamGUI/FlatCAMGUI.py:1938 flatcamGUI/FlatCAMGUI.py:2734 +#: flatcamGUI/MainGUI.py:1938 flatcamGUI/MainGUI.py:2734 msgid "Delete Shape" msgstr "Șterge forme geo" -#: flatcamGUI/FlatCAMGUI.py:2018 +#: flatcamGUI/MainGUI.py:2018 msgid "EXCELLON EDITOR" msgstr "EDITOR EXCELLON" -#: flatcamGUI/FlatCAMGUI.py:2018 +#: flatcamGUI/MainGUI.py:2018 msgid "Copy Drill(s)" msgstr "Copiaza Găurire" -#: flatcamGUI/FlatCAMGUI.py:2018 flatcamGUI/FlatCAMGUI.py:2268 +#: flatcamGUI/MainGUI.py:2018 flatcamGUI/MainGUI.py:2268 msgid "Add Drill" msgstr "Adaugă găurire" -#: flatcamGUI/FlatCAMGUI.py:2019 +#: flatcamGUI/MainGUI.py:2019 msgid "Move Drill(s)" msgstr "Muta Găuri" -#: flatcamGUI/FlatCAMGUI.py:2020 +#: flatcamGUI/MainGUI.py:2020 msgid "Add a new Tool" msgstr "Adaugă Unealta Noua" -#: flatcamGUI/FlatCAMGUI.py:2021 +#: flatcamGUI/MainGUI.py:2021 msgid "Delete Drill(s)" msgstr "Șterge Găuri" -#: flatcamGUI/FlatCAMGUI.py:2021 +#: flatcamGUI/MainGUI.py:2021 msgid "Alternate: Delete Tool(s)" msgstr "Alternativ: Șterge Unealta" -#: flatcamGUI/FlatCAMGUI.py:2138 +#: flatcamGUI/MainGUI.py:2138 msgid "GERBER EDITOR" msgstr "EDITOR GERBER" -#: flatcamGUI/FlatCAMGUI.py:2138 +#: flatcamGUI/MainGUI.py:2138 msgid "Add Disc" msgstr "Adaugă Disc" -#: flatcamGUI/FlatCAMGUI.py:2138 +#: flatcamGUI/MainGUI.py:2138 msgid "Add SemiDisc" msgstr "Adaugă SemiDisc" -#: flatcamGUI/FlatCAMGUI.py:2140 +#: flatcamGUI/MainGUI.py:2140 msgid "Within Track & Region Tools will cycle in REVERSE the bend modes" msgstr "" "In cadrul uneltelor Traseu si Regiune va trece circular in Revers prin " "modurile de indoire" -#: flatcamGUI/FlatCAMGUI.py:2141 +#: flatcamGUI/MainGUI.py:2141 msgid "Within Track & Region Tools will cycle FORWARD the bend modes" msgstr "" "In cadrul uneltelor Traseu si Regiune va trece circular in Avans prin " "modurile de indoire" -#: flatcamGUI/FlatCAMGUI.py:2142 +#: flatcamGUI/MainGUI.py:2142 msgid "Alternate: Delete Apertures" msgstr "Alternativ: Șterge Apertură" -#: flatcamGUI/FlatCAMGUI.py:2143 +#: flatcamGUI/MainGUI.py:2143 msgid "Eraser Tool" msgstr "Unealta Stergere" -#: flatcamGUI/FlatCAMGUI.py:2144 +#: flatcamGUI/MainGUI.py:2144 #: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:220 msgid "Mark Area Tool" msgstr "Unealta de Marc. Arie" -#: flatcamGUI/FlatCAMGUI.py:2144 +#: flatcamGUI/MainGUI.py:2144 msgid "Poligonize Tool" msgstr "Unealta Poligonizare" -#: flatcamGUI/FlatCAMGUI.py:2144 +#: flatcamGUI/MainGUI.py:2144 msgid "Transformation Tool" msgstr "Unealta Transformare" -#: flatcamGUI/FlatCAMGUI.py:2161 +#: flatcamGUI/MainGUI.py:2161 msgid "Toggle Visibility" msgstr "Comută Vizibilitate" -#: flatcamGUI/FlatCAMGUI.py:2167 +#: flatcamGUI/MainGUI.py:2167 msgid "New" msgstr "Nou" -#: flatcamGUI/FlatCAMGUI.py:2169 flatcamGUI/ObjectUI.py:450 +#: flatcamGUI/MainGUI.py:2169 flatcamGUI/ObjectUI.py:450 #: flatcamObjects/FlatCAMGerber.py:239 flatcamObjects/FlatCAMGerber.py:327 #: flatcamTools/ToolCalibration.py:631 flatcamTools/ToolCalibration.py:648 #: flatcamTools/ToolCalibration.py:815 flatcamTools/ToolCopperThieving.py:144 @@ -6918,7 +6918,7 @@ msgstr "Nou" msgid "Geometry" msgstr "Geometrie" -#: flatcamGUI/FlatCAMGUI.py:2173 +#: flatcamGUI/MainGUI.py:2173 #: flatcamGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:99 #: flatcamTools/ToolAlignObjects.py:74 flatcamTools/ToolAlignObjects.py:110 #: flatcamTools/ToolCalibration.py:197 flatcamTools/ToolCalibration.py:631 @@ -6933,76 +6933,76 @@ msgstr "Geometrie" msgid "Excellon" msgstr "Excellon" -#: flatcamGUI/FlatCAMGUI.py:2180 +#: flatcamGUI/MainGUI.py:2180 msgid "Grids" msgstr "Grid-uri" -#: flatcamGUI/FlatCAMGUI.py:2187 +#: flatcamGUI/MainGUI.py:2187 msgid "Clear Plot" msgstr "Șterge Afișare" -#: flatcamGUI/FlatCAMGUI.py:2189 +#: flatcamGUI/MainGUI.py:2189 msgid "Replot" msgstr "Reafișare" -#: flatcamGUI/FlatCAMGUI.py:2193 +#: flatcamGUI/MainGUI.py:2193 msgid "Geo Editor" msgstr "Editor Geometrii" -#: flatcamGUI/FlatCAMGUI.py:2195 +#: flatcamGUI/MainGUI.py:2195 msgid "Path" msgstr "Pe cale" -#: flatcamGUI/FlatCAMGUI.py:2197 +#: flatcamGUI/MainGUI.py:2197 msgid "Rectangle" msgstr "Patrulater" -#: flatcamGUI/FlatCAMGUI.py:2200 +#: flatcamGUI/MainGUI.py:2200 msgid "Circle" msgstr "Cerc" -#: flatcamGUI/FlatCAMGUI.py:2204 +#: flatcamGUI/MainGUI.py:2204 msgid "Arc" msgstr "Arc" -#: flatcamGUI/FlatCAMGUI.py:2218 +#: flatcamGUI/MainGUI.py:2218 msgid "Union" msgstr "Uniune" -#: flatcamGUI/FlatCAMGUI.py:2220 +#: flatcamGUI/MainGUI.py:2220 msgid "Intersection" msgstr "Intersecţie" -#: flatcamGUI/FlatCAMGUI.py:2222 +#: flatcamGUI/MainGUI.py:2222 msgid "Subtraction" msgstr "Scădere" -#: flatcamGUI/FlatCAMGUI.py:2224 flatcamGUI/ObjectUI.py:2221 +#: flatcamGUI/MainGUI.py:2224 flatcamGUI/ObjectUI.py:2221 #: flatcamGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:56 msgid "Cut" msgstr "Tăiere" -#: flatcamGUI/FlatCAMGUI.py:2235 +#: flatcamGUI/MainGUI.py:2235 msgid "Pad" msgstr "Pad" -#: flatcamGUI/FlatCAMGUI.py:2237 +#: flatcamGUI/MainGUI.py:2237 msgid "Pad Array" msgstr "Arie de paduri" -#: flatcamGUI/FlatCAMGUI.py:2241 +#: flatcamGUI/MainGUI.py:2241 msgid "Track" msgstr "Traseu" -#: flatcamGUI/FlatCAMGUI.py:2243 +#: flatcamGUI/MainGUI.py:2243 msgid "Region" msgstr "Regiune" -#: flatcamGUI/FlatCAMGUI.py:2266 +#: flatcamGUI/MainGUI.py:2266 msgid "Exc Editor" msgstr "Editor EXC" -#: flatcamGUI/FlatCAMGUI.py:2311 +#: flatcamGUI/MainGUI.py:2311 msgid "" "Relative measurement.\n" "Reference is last click position" @@ -7010,7 +7010,7 @@ msgstr "" "Măsurătoare relativă.\n" "Referința este poziţia ultimului click pe canvas" -#: flatcamGUI/FlatCAMGUI.py:2317 +#: flatcamGUI/MainGUI.py:2317 msgid "" "Absolute measurement.\n" "Reference is (X=0, Y= 0) position" @@ -7018,35 +7018,35 @@ msgstr "" "Măsurătoare absolută.\n" "Referința este originea (0, 0)" -#: flatcamGUI/FlatCAMGUI.py:2419 +#: flatcamGUI/MainGUI.py:2419 msgid "Lock Toolbars" msgstr "Blochează Toolbar-uri" -#: flatcamGUI/FlatCAMGUI.py:2505 +#: flatcamGUI/MainGUI.py:2505 msgid "FlatCAM Preferences Folder opened." msgstr "Folderul de preferințe FlatCAM a fost deschis." -#: flatcamGUI/FlatCAMGUI.py:2516 +#: flatcamGUI/MainGUI.py:2516 msgid "Are you sure you want to delete the GUI Settings? \n" msgstr "Esti sigur că dorești să ștergi setările GUI?\n" -#: flatcamGUI/FlatCAMGUI.py:2624 +#: flatcamGUI/MainGUI.py:2624 msgid "&Cutout Tool" msgstr "Unealta Decupare" -#: flatcamGUI/FlatCAMGUI.py:2694 +#: flatcamGUI/MainGUI.py:2694 msgid "Select 'Esc'" msgstr "Select" -#: flatcamGUI/FlatCAMGUI.py:2732 +#: flatcamGUI/MainGUI.py:2732 msgid "Copy Objects" msgstr "Copiază Obiecte" -#: flatcamGUI/FlatCAMGUI.py:2740 +#: flatcamGUI/MainGUI.py:2740 msgid "Move Objects" msgstr "Mută Obiecte" -#: flatcamGUI/FlatCAMGUI.py:3363 +#: flatcamGUI/MainGUI.py:3363 msgid "" "Please first select a geometry item to be cutted\n" "then select the geometry item that will be cutted\n" @@ -7057,12 +7057,12 @@ msgstr "" "apoi selectează forma geo. tăietoare. La final apasă tasta ~X~ sau\n" "butonul corespunzator din Toolbar." -#: flatcamGUI/FlatCAMGUI.py:3370 flatcamGUI/FlatCAMGUI.py:3532 -#: flatcamGUI/FlatCAMGUI.py:3577 flatcamGUI/FlatCAMGUI.py:3597 +#: flatcamGUI/MainGUI.py:3370 flatcamGUI/MainGUI.py:3532 +#: flatcamGUI/MainGUI.py:3577 flatcamGUI/MainGUI.py:3597 msgid "Warning" msgstr "Atenţie" -#: flatcamGUI/FlatCAMGUI.py:3527 +#: flatcamGUI/MainGUI.py:3527 msgid "" "Please select geometry items \n" "on which to perform Intersection Tool." @@ -7070,7 +7070,7 @@ msgstr "" "Selectează forma geometrică asupra căreia să se\n" "aplice Unealta Intersecţie." -#: flatcamGUI/FlatCAMGUI.py:3572 +#: flatcamGUI/MainGUI.py:3572 msgid "" "Please select geometry items \n" "on which to perform Substraction Tool." @@ -7078,7 +7078,7 @@ msgstr "" "Selectează forma geometrică asupra căreia să se\n" "aplice Unealta Substracţie." -#: flatcamGUI/FlatCAMGUI.py:3592 +#: flatcamGUI/MainGUI.py:3592 msgid "" "Please select geometry items \n" "on which to perform union." @@ -7086,52 +7086,52 @@ msgstr "" "Selectează forma geometrică asupra căreia să se\n" "aplice Unealta Uniune." -#: flatcamGUI/FlatCAMGUI.py:3675 flatcamGUI/FlatCAMGUI.py:3890 +#: flatcamGUI/MainGUI.py:3675 flatcamGUI/MainGUI.py:3890 msgid "Cancelled. Nothing selected to delete." msgstr "Anulat. Nimic nu este selectat pentru ștergere." -#: flatcamGUI/FlatCAMGUI.py:3759 flatcamGUI/FlatCAMGUI.py:4006 +#: flatcamGUI/MainGUI.py:3759 flatcamGUI/MainGUI.py:4006 msgid "Cancelled. Nothing selected to copy." msgstr "Anulat. Nimic nu este selectat pentru copiere." -#: flatcamGUI/FlatCAMGUI.py:3805 flatcamGUI/FlatCAMGUI.py:4035 +#: flatcamGUI/MainGUI.py:3805 flatcamGUI/MainGUI.py:4035 msgid "Cancelled. Nothing selected to move." msgstr "Anulat. Nimic nu este selectat pentru mutare." -#: flatcamGUI/FlatCAMGUI.py:4061 +#: flatcamGUI/MainGUI.py:4061 msgid "New Tool ..." msgstr "O noua Unealtă ..." -#: flatcamGUI/FlatCAMGUI.py:4062 flatcamTools/ToolNCC.py:924 +#: flatcamGUI/MainGUI.py:4062 flatcamTools/ToolNCC.py:924 #: flatcamTools/ToolPaint.py:850 flatcamTools/ToolSolderPaste.py:560 msgid "Enter a Tool Diameter" msgstr "Introduceti un Diametru de Unealtă" -#: flatcamGUI/FlatCAMGUI.py:4074 +#: flatcamGUI/MainGUI.py:4074 msgid "Adding Tool cancelled ..." msgstr "Adăugarea unei unelte anulată..." -#: flatcamGUI/FlatCAMGUI.py:4088 +#: flatcamGUI/MainGUI.py:4088 msgid "Distance Tool exit..." msgstr "Măsurătoarea s-a terminat ..." -#: flatcamGUI/FlatCAMGUI.py:4323 flatcamGUI/FlatCAMGUI.py:4330 +#: flatcamGUI/MainGUI.py:4323 flatcamGUI/MainGUI.py:4330 msgid "Idle." msgstr "Inactiv." -#: flatcamGUI/FlatCAMGUI.py:4361 +#: flatcamGUI/MainGUI.py:4361 msgid "Application started ..." msgstr "Aplicaţia a pornit ..." -#: flatcamGUI/FlatCAMGUI.py:4362 +#: flatcamGUI/MainGUI.py:4362 msgid "Hello!" msgstr "Bună!" -#: flatcamGUI/FlatCAMGUI.py:4424 +#: flatcamGUI/MainGUI.py:4424 msgid "Open Project ..." msgstr "Încarcă Project ..." -#: flatcamGUI/FlatCAMGUI.py:4450 +#: flatcamGUI/MainGUI.py:4450 msgid "Exit" msgstr "Iesiere" diff --git a/locale/ru/LC_MESSAGES/strings.po b/locale/ru/LC_MESSAGES/strings.po index a3f1380f..836a7bc9 100644 --- a/locale/ru/LC_MESSAGES/strings.po +++ b/locale/ru/LC_MESSAGES/strings.po @@ -69,8 +69,8 @@ msgstr "" #: FlatCAMDB.py:709 FlatCAMDB.py:2125 FlatCAMDB.py:2171 #: flatcamEditors/FlatCAMExcEditor.py:1023 #: flatcamEditors/FlatCAMExcEditor.py:1091 -#: flatcamEditors/FlatCAMTextEditor.py:223 flatcamGUI/FlatCAMGUI.py:3443 -#: flatcamGUI/FlatCAMGUI.py:3659 flatcamGUI/FlatCAMGUI.py:3874 +#: flatcamEditors/FlatCAMTextEditor.py:223 flatcamGUI/MainGUI.py:3443 +#: flatcamGUI/MainGUI.py:3659 flatcamGUI/MainGUI.py:3874 #: flatcamObjects/ObjectCollection.py:126 flatcamTools/ToolFilm.py:754 #: flatcamTools/ToolFilm.py:900 flatcamTools/ToolImage.py:247 #: flatcamTools/ToolMove.py:269 flatcamTools/ToolPcbWizard.py:301 @@ -120,20 +120,20 @@ msgstr "Редактор активирован ..." msgid "Do you want to save the edited object?" msgstr "Вы хотите сохранить редактируемый объект?" -#: FlatCAMApp.py:2226 flatcamGUI/FlatCAMGUI.py:2288 +#: FlatCAMApp.py:2226 flatcamGUI/MainGUI.py:2288 msgid "Close Editor" msgstr "Закрыть редактор" #: FlatCAMApp.py:2229 FlatCAMApp.py:3518 FlatCAMApp.py:6085 FlatCAMApp.py:7345 #: FlatCAMTranslation.py:109 FlatCAMTranslation.py:207 -#: flatcamGUI/FlatCAMGUI.py:2519 +#: flatcamGUI/MainGUI.py:2519 #: flatcamGUI/preferences/PreferencesUIManager.py:1122 msgid "Yes" msgstr "Да" #: FlatCAMApp.py:2230 FlatCAMApp.py:3519 FlatCAMApp.py:6086 FlatCAMApp.py:7346 #: FlatCAMTranslation.py:110 FlatCAMTranslation.py:208 -#: flatcamGUI/FlatCAMGUI.py:2520 +#: flatcamGUI/MainGUI.py:2520 #: flatcamGUI/preferences/PreferencesUIManager.py:1123 #: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:164 #: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:150 @@ -143,7 +143,7 @@ msgstr "Нет" #: FlatCAMApp.py:2231 FlatCAMApp.py:3520 FlatCAMApp.py:4478 FlatCAMApp.py:5103 #: FlatCAMApp.py:7347 FlatCAMDB.py:128 FlatCAMDB.py:1689 -#: flatcamGUI/FlatCAMGUI.py:1347 +#: flatcamGUI/MainGUI.py:1347 msgid "Cancel" msgstr "Отмена" @@ -274,7 +274,7 @@ msgstr "создан / выбрана" msgid "Plotting" msgstr "Прорисовка" -#: FlatCAMApp.py:3090 flatcamGUI/FlatCAMGUI.py:545 +#: FlatCAMApp.py:3090 flatcamGUI/MainGUI.py:545 msgid "About FlatCAM" msgstr "О программе" @@ -414,7 +414,7 @@ msgstr "Переводчик" msgid "Corrections" msgstr "Исправления" -#: FlatCAMApp.py:3455 FlatCAMApp.py:3464 flatcamGUI/FlatCAMGUI.py:527 +#: FlatCAMApp.py:3455 FlatCAMApp.py:3464 flatcamGUI/MainGUI.py:527 msgid "Bookmarks Manager" msgstr "Диспетчер закладок" @@ -442,7 +442,7 @@ msgstr "" msgid "Alternative website" msgstr "Альтернативный сайт" -#: FlatCAMApp.py:3508 flatcamGUI/FlatCAMGUI.py:4267 +#: FlatCAMApp.py:3508 flatcamGUI/MainGUI.py:4267 msgid "Application is saving the project. Please wait ..." msgstr "Приложение сохраняет проект. Пожалуйста, подождите ..." @@ -648,8 +648,8 @@ msgstr "Неверные координаты. Введите координат #: flatcamEditors/FlatCAMGrbEditor.py:1490 #: flatcamEditors/FlatCAMGrbEditor.py:1759 #: flatcamEditors/FlatCAMGrbEditor.py:4622 -#: flatcamEditors/FlatCAMGrbEditor.py:4637 flatcamGUI/FlatCAMGUI.py:3424 -#: flatcamGUI/FlatCAMGUI.py:3436 flatcamTools/ToolAlignObjects.py:393 +#: flatcamEditors/FlatCAMGrbEditor.py:4637 flatcamGUI/MainGUI.py:3424 +#: flatcamGUI/MainGUI.py:3436 flatcamTools/ToolAlignObjects.py:393 #: flatcamTools/ToolAlignObjects.py:415 msgid "Done." msgstr "Готово." @@ -797,12 +797,12 @@ msgstr "Нет объекта, выбранного для наклона/сдв msgid "Skew on Y axis done." msgstr "Наклон по оси Y выполнен." -#: FlatCAMApp.py:6497 FlatCAMApp.py:6544 flatcamGUI/FlatCAMGUI.py:503 -#: flatcamGUI/FlatCAMGUI.py:1728 +#: FlatCAMApp.py:6497 FlatCAMApp.py:6544 flatcamGUI/MainGUI.py:503 +#: flatcamGUI/MainGUI.py:1728 msgid "Select All" msgstr "Выбрать все" -#: FlatCAMApp.py:6501 FlatCAMApp.py:6548 flatcamGUI/FlatCAMGUI.py:505 +#: FlatCAMApp.py:6501 FlatCAMApp.py:6548 flatcamGUI/MainGUI.py:505 msgid "Deselect All" msgstr "Снять выделение" @@ -814,7 +814,7 @@ msgstr "Все объекты выделены." msgid "Objects selection is cleared." msgstr "Выбор объектов очищен." -#: FlatCAMApp.py:6594 flatcamGUI/FlatCAMGUI.py:1721 +#: FlatCAMApp.py:6594 flatcamGUI/MainGUI.py:1721 msgid "Grid On/Off" msgstr "Сетка вкл/откл" @@ -830,9 +830,9 @@ msgid "Add" msgstr "Добавить" #: FlatCAMApp.py:6608 flatcamEditors/FlatCAMGrbEditor.py:2588 -#: flatcamEditors/FlatCAMGrbEditor.py:2736 flatcamGUI/FlatCAMGUI.py:751 -#: flatcamGUI/FlatCAMGUI.py:1074 flatcamGUI/FlatCAMGUI.py:2141 -#: flatcamGUI/FlatCAMGUI.py:2284 flatcamGUI/FlatCAMGUI.py:2777 +#: flatcamEditors/FlatCAMGrbEditor.py:2736 flatcamGUI/MainGUI.py:751 +#: flatcamGUI/MainGUI.py:1074 flatcamGUI/MainGUI.py:2141 +#: flatcamGUI/MainGUI.py:2284 flatcamGUI/MainGUI.py:2777 #: flatcamGUI/ObjectUI.py:1623 flatcamObjects/FlatCAMGeometry.py:505 #: flatcamTools/ToolNCC.py:316 flatcamTools/ToolNCC.py:637 #: flatcamTools/ToolPaint.py:299 flatcamTools/ToolPaint.py:682 @@ -917,8 +917,8 @@ msgstr "" msgid "New Project created" msgstr "Новый проект создан" -#: FlatCAMApp.py:7519 FlatCAMApp.py:7523 flatcamGUI/FlatCAMGUI.py:836 -#: flatcamGUI/FlatCAMGUI.py:2544 +#: FlatCAMApp.py:7519 FlatCAMApp.py:7523 flatcamGUI/MainGUI.py:836 +#: flatcamGUI/MainGUI.py:2544 msgid "Open Gerber" msgstr "Открыть Gerber" @@ -935,8 +935,8 @@ msgstr "" msgid "Opening Gerber file." msgstr "Открытие файла Gerber." -#: FlatCAMApp.py:7557 FlatCAMApp.py:7561 flatcamGUI/FlatCAMGUI.py:838 -#: flatcamGUI/FlatCAMGUI.py:2546 +#: FlatCAMApp.py:7557 FlatCAMApp.py:7561 flatcamGUI/MainGUI.py:838 +#: flatcamGUI/MainGUI.py:2546 msgid "Open Excellon" msgstr "Открыть Excellon" @@ -952,7 +952,7 @@ msgstr "Открыть G-Code" msgid "Opening G-Code file." msgstr "Открытие файла G-Code." -#: FlatCAMApp.py:7632 FlatCAMApp.py:7635 flatcamGUI/FlatCAMGUI.py:1730 +#: FlatCAMApp.py:7632 FlatCAMApp.py:7635 flatcamGUI/MainGUI.py:1730 msgid "Open Project" msgstr "Открыть проект" @@ -1110,8 +1110,8 @@ msgstr "Файл сценария открывается в редакторе msgid "Save Project As ..." msgstr "Сохранить проект как..." -#: FlatCAMApp.py:8551 flatcamGUI/FlatCAMGUI.py:1134 -#: flatcamGUI/FlatCAMGUI.py:2176 +#: FlatCAMApp.py:8551 flatcamGUI/MainGUI.py:1134 +#: flatcamGUI/MainGUI.py:2176 msgid "Project" msgstr "Проект" @@ -1359,7 +1359,7 @@ msgstr "Очистить недавние проекты" msgid "Clear Recent files" msgstr "Очистить список" -#: FlatCAMApp.py:10065 flatcamGUI/FlatCAMGUI.py:1363 +#: FlatCAMApp.py:10065 flatcamGUI/MainGUI.py:1363 msgid "Shortcut Key List" msgstr "Список комбинаций клавиш" @@ -1517,47 +1517,47 @@ msgstr "Отключение участков ..." msgid "Working ..." msgstr "Обработка…" -#: FlatCAMApp.py:10558 flatcamGUI/FlatCAMGUI.py:703 +#: FlatCAMApp.py:10558 flatcamGUI/MainGUI.py:703 msgid "Red" msgstr "Красный" -#: FlatCAMApp.py:10560 flatcamGUI/FlatCAMGUI.py:706 +#: FlatCAMApp.py:10560 flatcamGUI/MainGUI.py:706 msgid "Blue" msgstr "Синий" -#: FlatCAMApp.py:10563 flatcamGUI/FlatCAMGUI.py:709 +#: FlatCAMApp.py:10563 flatcamGUI/MainGUI.py:709 msgid "Yellow" msgstr "Жёлтый" -#: FlatCAMApp.py:10565 flatcamGUI/FlatCAMGUI.py:712 +#: FlatCAMApp.py:10565 flatcamGUI/MainGUI.py:712 msgid "Green" msgstr "Зелёный" -#: FlatCAMApp.py:10567 flatcamGUI/FlatCAMGUI.py:715 +#: FlatCAMApp.py:10567 flatcamGUI/MainGUI.py:715 msgid "Purple" msgstr "Фиолетовый" -#: FlatCAMApp.py:10569 flatcamGUI/FlatCAMGUI.py:718 +#: FlatCAMApp.py:10569 flatcamGUI/MainGUI.py:718 msgid "Brown" msgstr "Коричневый" -#: FlatCAMApp.py:10571 FlatCAMApp.py:10627 flatcamGUI/FlatCAMGUI.py:721 +#: FlatCAMApp.py:10571 FlatCAMApp.py:10627 flatcamGUI/MainGUI.py:721 msgid "White" msgstr "Белый" -#: FlatCAMApp.py:10573 flatcamGUI/FlatCAMGUI.py:724 +#: FlatCAMApp.py:10573 flatcamGUI/MainGUI.py:724 msgid "Black" msgstr "Чёрный" -#: FlatCAMApp.py:10576 flatcamGUI/FlatCAMGUI.py:729 +#: FlatCAMApp.py:10576 flatcamGUI/MainGUI.py:729 msgid "Custom" msgstr "Своё" -#: FlatCAMApp.py:10586 flatcamGUI/FlatCAMGUI.py:737 +#: FlatCAMApp.py:10586 flatcamGUI/MainGUI.py:737 msgid "Default" msgstr "По умолчанию" -#: FlatCAMApp.py:10610 flatcamGUI/FlatCAMGUI.py:734 +#: FlatCAMApp.py:10610 flatcamGUI/MainGUI.py:734 msgid "Opacity" msgstr "Непрозрачность" @@ -1677,7 +1677,7 @@ msgstr "Закладка удалена." msgid "Export FlatCAM Bookmarks" msgstr "Экспорт закладок FlatCAM" -#: FlatCAMBookmark.py:293 flatcamGUI/FlatCAMGUI.py:524 +#: FlatCAMBookmark.py:293 flatcamGUI/MainGUI.py:524 msgid "Bookmarks" msgstr "Закладки" @@ -3119,7 +3119,7 @@ msgstr "" "Удаляет инструмент из списка инструментов\n" "в выбранной строке таблицы инструментов." -#: flatcamEditors/FlatCAMExcEditor.py:1650 flatcamGUI/FlatCAMGUI.py:2019 +#: flatcamEditors/FlatCAMExcEditor.py:1650 flatcamGUI/MainGUI.py:2019 msgid "Resize Drill(s)" msgstr "Изменить размер сверла" @@ -3143,8 +3143,8 @@ msgstr "Изменить" msgid "Resize drill(s)" msgstr "Изменить размер сверла" -#: flatcamEditors/FlatCAMExcEditor.py:1699 flatcamGUI/FlatCAMGUI.py:2018 -#: flatcamGUI/FlatCAMGUI.py:2270 +#: flatcamEditors/FlatCAMExcEditor.py:1699 flatcamGUI/MainGUI.py:2018 +#: flatcamGUI/MainGUI.py:2270 msgid "Add Drill Array" msgstr "Добавить массив отверстий" @@ -3457,7 +3457,7 @@ msgstr "" "Сохраните и повторно отредактируйте Excellon, если вам нужно добавить этот " "инструмент. " -#: flatcamEditors/FlatCAMExcEditor.py:2579 flatcamGUI/FlatCAMGUI.py:4071 +#: flatcamEditors/FlatCAMExcEditor.py:2579 flatcamGUI/MainGUI.py:4071 msgid "Added new tool with dia" msgstr "Добавлен новый инструмент с диаметром" @@ -3566,7 +3566,7 @@ msgid "Full Buffer" msgstr "Полный буфер" #: flatcamEditors/FlatCAMGeoEditor.py:132 -#: flatcamEditors/FlatCAMGeoEditor.py:3017 flatcamGUI/FlatCAMGUI.py:1928 +#: flatcamEditors/FlatCAMGeoEditor.py:3017 flatcamGUI/MainGUI.py:1928 #: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:190 msgid "Buffer Tool" msgstr "Буфер" @@ -3587,7 +3587,7 @@ msgstr "" msgid "Font" msgstr "Шрифт" -#: flatcamEditors/FlatCAMGeoEditor.py:323 flatcamGUI/FlatCAMGUI.py:2208 +#: flatcamEditors/FlatCAMGeoEditor.py:323 flatcamGUI/MainGUI.py:2208 msgid "Text" msgstr "Tекст" @@ -3595,8 +3595,8 @@ msgstr "Tекст" msgid "Text Tool" msgstr "Текст" -#: flatcamEditors/FlatCAMGeoEditor.py:405 flatcamGUI/FlatCAMGUI.py:511 -#: flatcamGUI/FlatCAMGUI.py:1158 flatcamGUI/ObjectUI.py:818 +#: flatcamEditors/FlatCAMGeoEditor.py:405 flatcamGUI/MainGUI.py:511 +#: flatcamGUI/MainGUI.py:1158 flatcamGUI/ObjectUI.py:818 #: flatcamGUI/ObjectUI.py:1662 flatcamObjects/FlatCAMExcellon.py:742 #: flatcamObjects/FlatCAMExcellon.py:1084 flatcamObjects/FlatCAMGeometry.py:759 #: flatcamTools/ToolNCC.py:331 flatcamTools/ToolNCC.py:797 @@ -3633,12 +3633,12 @@ msgstr "Подключение:" msgid "Contour:" msgstr "Контур:" -#: flatcamEditors/FlatCAMGeoEditor.py:529 flatcamGUI/FlatCAMGUI.py:2212 +#: flatcamEditors/FlatCAMGeoEditor.py:529 flatcamGUI/MainGUI.py:2212 msgid "Paint" msgstr "Нарисовать" -#: flatcamEditors/FlatCAMGeoEditor.py:547 flatcamGUI/FlatCAMGUI.py:924 -#: flatcamGUI/FlatCAMGUI.py:2628 flatcamGUI/ObjectUI.py:2139 +#: flatcamEditors/FlatCAMGeoEditor.py:547 flatcamGUI/MainGUI.py:924 +#: flatcamGUI/MainGUI.py:2628 flatcamGUI/ObjectUI.py:2139 #: flatcamTools/ToolPaint.py:43 flatcamTools/ToolPaint.py:738 msgid "Paint Tool" msgstr "Рисование" @@ -3665,8 +3665,8 @@ msgstr "Инструменты" #: flatcamEditors/FlatCAMGeoEditor.py:607 #: flatcamEditors/FlatCAMGeoEditor.py:991 #: flatcamEditors/FlatCAMGrbEditor.py:5306 -#: flatcamEditors/FlatCAMGrbEditor.py:5703 flatcamGUI/FlatCAMGUI.py:945 -#: flatcamGUI/FlatCAMGUI.py:2649 flatcamTools/ToolTransform.py:460 +#: flatcamEditors/FlatCAMGrbEditor.py:5703 flatcamGUI/MainGUI.py:945 +#: flatcamGUI/MainGUI.py:2649 flatcamTools/ToolTransform.py:460 msgid "Transform Tool" msgstr "Трансформация" @@ -3686,9 +3686,9 @@ msgstr "Наклон/Сдвиг" #: flatcamEditors/FlatCAMGeoEditor.py:610 #: flatcamEditors/FlatCAMGrbEditor.py:2680 -#: flatcamEditors/FlatCAMGrbEditor.py:5309 flatcamGUI/FlatCAMGUI.py:1063 -#: flatcamGUI/FlatCAMGUI.py:2140 flatcamGUI/FlatCAMGUI.py:2255 -#: flatcamGUI/FlatCAMGUI.py:2767 flatcamGUI/ObjectUI.py:125 +#: flatcamEditors/FlatCAMGrbEditor.py:5309 flatcamGUI/MainGUI.py:1063 +#: flatcamGUI/MainGUI.py:2140 flatcamGUI/MainGUI.py:2255 +#: flatcamGUI/MainGUI.py:2767 flatcamGUI/ObjectUI.py:125 #: flatcamGUI/preferences/tools/ToolsTransformPrefGroupUI.py:95 #: flatcamTools/ToolTransform.py:26 msgid "Scale" @@ -3700,8 +3700,8 @@ msgid "Mirror (Flip)" msgstr "Зеркалирование (отражение)" #: flatcamEditors/FlatCAMGeoEditor.py:625 -#: flatcamEditors/FlatCAMGrbEditor.py:5324 flatcamGUI/FlatCAMGUI.py:856 -#: flatcamGUI/FlatCAMGUI.py:2564 +#: flatcamEditors/FlatCAMGrbEditor.py:5324 flatcamGUI/MainGUI.py:856 +#: flatcamGUI/MainGUI.py:2564 msgid "Editor" msgstr "Редактор" @@ -4418,7 +4418,7 @@ msgstr "Кольцо" msgid "Line" msgstr "Линия" -#: flatcamEditors/FlatCAMGeoEditor.py:3591 flatcamGUI/FlatCAMGUI.py:2202 +#: flatcamEditors/FlatCAMGeoEditor.py:3591 flatcamGUI/MainGUI.py:2202 #: flatcamGUI/ObjectUI.py:2074 #: flatcamGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:218 #: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:328 @@ -4447,10 +4447,10 @@ msgstr "Редактирование MultiGeo Geometry, инструментом msgid "with diameter" msgstr "с диаметром" -#: flatcamEditors/FlatCAMGeoEditor.py:4509 flatcamGUI/FlatCAMGUI.py:3753 -#: flatcamGUI/FlatCAMGUI.py:3799 flatcamGUI/FlatCAMGUI.py:3817 -#: flatcamGUI/FlatCAMGUI.py:3961 flatcamGUI/FlatCAMGUI.py:4000 -#: flatcamGUI/FlatCAMGUI.py:4012 flatcamGUI/FlatCAMGUI.py:4029 +#: flatcamEditors/FlatCAMGeoEditor.py:4509 flatcamGUI/MainGUI.py:3753 +#: flatcamGUI/MainGUI.py:3799 flatcamGUI/MainGUI.py:3817 +#: flatcamGUI/MainGUI.py:3961 flatcamGUI/MainGUI.py:4000 +#: flatcamGUI/MainGUI.py:4012 flatcamGUI/MainGUI.py:4029 msgid "Click on target point." msgstr "Нажмите на целевой точке." @@ -4671,7 +4671,7 @@ msgstr "Готово. Перемещение отверстий завершен msgid "Done. Apertures copied." msgstr "Готово. Отверстия скопированы." -#: flatcamEditors/FlatCAMGrbEditor.py:2455 flatcamGUI/FlatCAMGUI.py:2233 +#: flatcamEditors/FlatCAMGrbEditor.py:2455 flatcamGUI/MainGUI.py:2233 #: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:27 msgid "Gerber Editor" msgstr "Редактор Gerber" @@ -4833,9 +4833,9 @@ msgstr "" "- 'Скошенный:' угол-это линия, которая непосредственно соединяет элементы, " "встречающиеся в углу" -#: flatcamEditors/FlatCAMGrbEditor.py:2640 flatcamGUI/FlatCAMGUI.py:1061 -#: flatcamGUI/FlatCAMGUI.py:2138 flatcamGUI/FlatCAMGUI.py:2210 -#: flatcamGUI/FlatCAMGUI.py:2253 flatcamGUI/FlatCAMGUI.py:2765 +#: flatcamEditors/FlatCAMGrbEditor.py:2640 flatcamGUI/MainGUI.py:1061 +#: flatcamGUI/MainGUI.py:2138 flatcamGUI/MainGUI.py:2210 +#: flatcamGUI/MainGUI.py:2253 flatcamGUI/MainGUI.py:2765 #: flatcamGUI/preferences/tools/ToolsTransformPrefGroupUI.py:200 #: flatcamTools/ToolTransform.py:29 msgid "Buffer" @@ -4910,8 +4910,8 @@ msgstr "Удаление всех отмеченных полигонов." msgid "Clear all the markings." msgstr "Очистить все маркировки." -#: flatcamEditors/FlatCAMGrbEditor.py:2764 flatcamGUI/FlatCAMGUI.py:1046 -#: flatcamGUI/FlatCAMGUI.py:2138 flatcamGUI/FlatCAMGUI.py:2750 +#: flatcamEditors/FlatCAMGrbEditor.py:2764 flatcamGUI/MainGUI.py:1046 +#: flatcamGUI/MainGUI.py:2138 flatcamGUI/MainGUI.py:2750 msgid "Add Pad Array" msgstr "Добавить массив контактных площадок" @@ -5216,129 +5216,129 @@ msgstr "Сохранено в" msgid "Code Editor content copied to clipboard ..." msgstr "Содержимое редактора кода скопировано в буфер обмена ..." -#: flatcamGUI/FlatCAMGUI.py:78 flatcamGUI/FlatCAMGUI.py:80 -#: flatcamGUI/FlatCAMGUI.py:2163 +#: flatcamGUI/MainGUI.py:78 flatcamGUI/MainGUI.py:80 +#: flatcamGUI/MainGUI.py:2163 msgid "Toggle Panel" msgstr "Переключить бок. панель" -#: flatcamGUI/FlatCAMGUI.py:90 +#: flatcamGUI/MainGUI.py:90 msgid "File" msgstr "Файл" -#: flatcamGUI/FlatCAMGUI.py:95 +#: flatcamGUI/MainGUI.py:95 msgid "&New Project ...\tCtrl+N" msgstr "&Новый проект ...\tCtrl+N" -#: flatcamGUI/FlatCAMGUI.py:97 +#: flatcamGUI/MainGUI.py:97 msgid "Will create a new, blank project" msgstr "Создаёт новый пустой проект" -#: flatcamGUI/FlatCAMGUI.py:102 +#: flatcamGUI/MainGUI.py:102 msgid "&New" msgstr "&Создать" -#: flatcamGUI/FlatCAMGUI.py:106 +#: flatcamGUI/MainGUI.py:106 msgid "Geometry\tN" msgstr "Geometry\tN" -#: flatcamGUI/FlatCAMGUI.py:108 +#: flatcamGUI/MainGUI.py:108 msgid "Will create a new, empty Geometry Object." msgstr "Создаёт новый объект Geometry." -#: flatcamGUI/FlatCAMGUI.py:111 +#: flatcamGUI/MainGUI.py:111 msgid "Gerber\tB" msgstr "Gerber\tB" -#: flatcamGUI/FlatCAMGUI.py:113 +#: flatcamGUI/MainGUI.py:113 msgid "Will create a new, empty Gerber Object." msgstr "Создаёт новый объект Gerber." -#: flatcamGUI/FlatCAMGUI.py:116 +#: flatcamGUI/MainGUI.py:116 msgid "Excellon\tL" msgstr "Excellon\tL" -#: flatcamGUI/FlatCAMGUI.py:118 +#: flatcamGUI/MainGUI.py:118 msgid "Will create a new, empty Excellon Object." msgstr "Создаёт новый объект Excellon." -#: flatcamGUI/FlatCAMGUI.py:123 +#: flatcamGUI/MainGUI.py:123 msgid "Document\tD" msgstr "Document\tD" -#: flatcamGUI/FlatCAMGUI.py:125 +#: flatcamGUI/MainGUI.py:125 msgid "Will create a new, empty Document Object." msgstr "Создаёт новый объект Document." -#: flatcamGUI/FlatCAMGUI.py:129 flatcamGUI/FlatCAMGUI.py:4420 +#: flatcamGUI/MainGUI.py:129 flatcamGUI/MainGUI.py:4420 #: flatcamTools/ToolPcbWizard.py:62 flatcamTools/ToolPcbWizard.py:69 msgid "Open" msgstr "Открыть" -#: flatcamGUI/FlatCAMGUI.py:134 +#: flatcamGUI/MainGUI.py:134 msgid "Open &Project ..." msgstr "Открыть &проект..." -#: flatcamGUI/FlatCAMGUI.py:140 flatcamGUI/FlatCAMGUI.py:4430 +#: flatcamGUI/MainGUI.py:140 flatcamGUI/MainGUI.py:4430 msgid "Open &Gerber ...\tCtrl+G" msgstr "Открыть &Gerber...\tCtrl+G" -#: flatcamGUI/FlatCAMGUI.py:145 flatcamGUI/FlatCAMGUI.py:4435 +#: flatcamGUI/MainGUI.py:145 flatcamGUI/MainGUI.py:4435 msgid "Open &Excellon ...\tCtrl+E" msgstr "Открыть &Excellon ...\tCtrl+E" -#: flatcamGUI/FlatCAMGUI.py:150 flatcamGUI/FlatCAMGUI.py:4440 +#: flatcamGUI/MainGUI.py:150 flatcamGUI/MainGUI.py:4440 msgid "Open G-&Code ..." msgstr "Открыть G-&Code ..." -#: flatcamGUI/FlatCAMGUI.py:157 +#: flatcamGUI/MainGUI.py:157 msgid "Open Config ..." msgstr "Открыть конфигурацию ..." -#: flatcamGUI/FlatCAMGUI.py:162 +#: flatcamGUI/MainGUI.py:162 msgid "Recent projects" msgstr "Недавние проекты" -#: flatcamGUI/FlatCAMGUI.py:164 +#: flatcamGUI/MainGUI.py:164 msgid "Recent files" msgstr "Открыть недавние" -#: flatcamGUI/FlatCAMGUI.py:167 flatcamGUI/FlatCAMGUI.py:753 -#: flatcamGUI/FlatCAMGUI.py:1339 +#: flatcamGUI/MainGUI.py:167 flatcamGUI/MainGUI.py:753 +#: flatcamGUI/MainGUI.py:1339 msgid "Save" msgstr "Сохранить" -#: flatcamGUI/FlatCAMGUI.py:171 +#: flatcamGUI/MainGUI.py:171 msgid "&Save Project ...\tCtrl+S" msgstr "&Сохранить проект ...\tCTRL+S" -#: flatcamGUI/FlatCAMGUI.py:176 +#: flatcamGUI/MainGUI.py:176 msgid "Save Project &As ...\tCtrl+Shift+S" msgstr "Сохранить проект &как ...\tCtrl+Shift+S" -#: flatcamGUI/FlatCAMGUI.py:191 +#: flatcamGUI/MainGUI.py:191 msgid "Scripting" msgstr "Сценарии" -#: flatcamGUI/FlatCAMGUI.py:195 flatcamGUI/FlatCAMGUI.py:903 -#: flatcamGUI/FlatCAMGUI.py:2607 +#: flatcamGUI/MainGUI.py:195 flatcamGUI/MainGUI.py:903 +#: flatcamGUI/MainGUI.py:2607 msgid "New Script ..." msgstr "Новый сценарий ..." -#: flatcamGUI/FlatCAMGUI.py:197 flatcamGUI/FlatCAMGUI.py:905 -#: flatcamGUI/FlatCAMGUI.py:2609 +#: flatcamGUI/MainGUI.py:197 flatcamGUI/MainGUI.py:905 +#: flatcamGUI/MainGUI.py:2609 msgid "Open Script ..." msgstr "Открыть сценарий ..." -#: flatcamGUI/FlatCAMGUI.py:199 +#: flatcamGUI/MainGUI.py:199 msgid "Open Example ..." msgstr "Открыть пример ..." -#: flatcamGUI/FlatCAMGUI.py:201 flatcamGUI/FlatCAMGUI.py:907 -#: flatcamGUI/FlatCAMGUI.py:2611 flatcamGUI/FlatCAMGUI.py:4409 +#: flatcamGUI/MainGUI.py:201 flatcamGUI/MainGUI.py:907 +#: flatcamGUI/MainGUI.py:2611 flatcamGUI/MainGUI.py:4409 msgid "Run Script ..." msgstr "Выполнить сценарий ..." -#: flatcamGUI/FlatCAMGUI.py:203 flatcamGUI/FlatCAMGUI.py:4411 +#: flatcamGUI/MainGUI.py:203 flatcamGUI/MainGUI.py:4411 msgid "" "Will run the opened Tcl Script thus\n" "enabling the automation of certain\n" @@ -5348,47 +5348,47 @@ msgstr "" "включающий автоматизацию некоторых\n" "функций FlatCAM." -#: flatcamGUI/FlatCAMGUI.py:218 +#: flatcamGUI/MainGUI.py:218 msgid "Import" msgstr "Импорт" -#: flatcamGUI/FlatCAMGUI.py:220 +#: flatcamGUI/MainGUI.py:220 msgid "&SVG as Geometry Object ..." msgstr "&SVG как объект Geometry ..." -#: flatcamGUI/FlatCAMGUI.py:223 +#: flatcamGUI/MainGUI.py:223 msgid "&SVG as Gerber Object ..." msgstr "&SVG как объект Gerber ..." -#: flatcamGUI/FlatCAMGUI.py:228 +#: flatcamGUI/MainGUI.py:228 msgid "&DXF as Geometry Object ..." msgstr "&DXF как объект Geometry ..." -#: flatcamGUI/FlatCAMGUI.py:231 +#: flatcamGUI/MainGUI.py:231 msgid "&DXF as Gerber Object ..." msgstr "&DXF как объект Gerber ..." -#: flatcamGUI/FlatCAMGUI.py:235 +#: flatcamGUI/MainGUI.py:235 msgid "HPGL2 as Geometry Object ..." msgstr "HPGL2 как объект геометрии ..." -#: flatcamGUI/FlatCAMGUI.py:241 +#: flatcamGUI/MainGUI.py:241 msgid "Export" msgstr "Экспорт" -#: flatcamGUI/FlatCAMGUI.py:245 +#: flatcamGUI/MainGUI.py:245 msgid "Export &SVG ..." msgstr "Экспорт &SVG ..." -#: flatcamGUI/FlatCAMGUI.py:249 +#: flatcamGUI/MainGUI.py:249 msgid "Export DXF ..." msgstr "Экспорт DXF ..." -#: flatcamGUI/FlatCAMGUI.py:255 +#: flatcamGUI/MainGUI.py:255 msgid "Export &PNG ..." msgstr "Экспорт &PNG ..." -#: flatcamGUI/FlatCAMGUI.py:257 +#: flatcamGUI/MainGUI.py:257 msgid "" "Will export an image in PNG format,\n" "the saved image will contain the visual \n" @@ -5398,11 +5398,11 @@ msgstr "" "сохраненное изображение будет содержать визуальную\n" "информацию, открытую в настоящее время в пространстве отрисовки FlatCAM." -#: flatcamGUI/FlatCAMGUI.py:266 +#: flatcamGUI/MainGUI.py:266 msgid "Export &Excellon ..." msgstr "Экспорт &Excellon ..." -#: flatcamGUI/FlatCAMGUI.py:268 +#: flatcamGUI/MainGUI.py:268 msgid "" "Will export an Excellon Object as Excellon file,\n" "the coordinates format, the file units and zeros\n" @@ -5412,11 +5412,11 @@ msgstr "" "формат координат, единицы измерения и нули\n" "устанавливаются в Настройки -> Экспорт Excellon." -#: flatcamGUI/FlatCAMGUI.py:275 +#: flatcamGUI/MainGUI.py:275 msgid "Export &Gerber ..." msgstr "Экспорт &Gerber ..." -#: flatcamGUI/FlatCAMGUI.py:277 +#: flatcamGUI/MainGUI.py:277 msgid "" "Will export an Gerber Object as Gerber file,\n" "the coordinates format, the file units and zeros\n" @@ -5426,53 +5426,53 @@ msgstr "" "формат координат, единицы измерения и нули\n" "устанавливается в Настройки -> Экспорт Gerber." -#: flatcamGUI/FlatCAMGUI.py:287 +#: flatcamGUI/MainGUI.py:287 msgid "Backup" msgstr "Резервное копирование" -#: flatcamGUI/FlatCAMGUI.py:292 +#: flatcamGUI/MainGUI.py:292 msgid "Import Preferences from file ..." msgstr "Импортировать настройки из файла ..." -#: flatcamGUI/FlatCAMGUI.py:298 +#: flatcamGUI/MainGUI.py:298 msgid "Export Preferences to file ..." msgstr "Экспортировать настройки в файл ..." -#: flatcamGUI/FlatCAMGUI.py:306 +#: flatcamGUI/MainGUI.py:306 #: flatcamGUI/preferences/PreferencesUIManager.py:1119 msgid "Save Preferences" msgstr "Сохранить настройки" -#: flatcamGUI/FlatCAMGUI.py:312 flatcamGUI/FlatCAMGUI.py:1730 +#: flatcamGUI/MainGUI.py:312 flatcamGUI/MainGUI.py:1730 msgid "Print (PDF)" msgstr "Печать (PDF)" -#: flatcamGUI/FlatCAMGUI.py:320 +#: flatcamGUI/MainGUI.py:320 msgid "E&xit" msgstr "В&ыход" -#: flatcamGUI/FlatCAMGUI.py:328 flatcamGUI/FlatCAMGUI.py:747 -#: flatcamGUI/FlatCAMGUI.py:2286 +#: flatcamGUI/MainGUI.py:328 flatcamGUI/MainGUI.py:747 +#: flatcamGUI/MainGUI.py:2286 msgid "Edit" msgstr "Правка" -#: flatcamGUI/FlatCAMGUI.py:332 +#: flatcamGUI/MainGUI.py:332 msgid "Edit Object\tE" msgstr "Редактировать объект\tE" -#: flatcamGUI/FlatCAMGUI.py:334 +#: flatcamGUI/MainGUI.py:334 msgid "Close Editor\tCtrl+S" msgstr "Закрыть редактор\tCtrl+S" -#: flatcamGUI/FlatCAMGUI.py:343 +#: flatcamGUI/MainGUI.py:343 msgid "Conversion" msgstr "Конвертация" -#: flatcamGUI/FlatCAMGUI.py:345 +#: flatcamGUI/MainGUI.py:345 msgid "&Join Geo/Gerber/Exc -> Geo" msgstr "&Объединить Geo/Gerber/Exc - > Geo" -#: flatcamGUI/FlatCAMGUI.py:347 +#: flatcamGUI/MainGUI.py:347 msgid "" "Merge a selection of objects, which can be of type:\n" "- Gerber\n" @@ -5486,30 +5486,30 @@ msgstr "" "- Geometry\n" "в новый комбинированный объект геометрии." -#: flatcamGUI/FlatCAMGUI.py:354 +#: flatcamGUI/MainGUI.py:354 msgid "Join Excellon(s) -> Excellon" msgstr "Объединить Excellon (s) - > Excellon" -#: flatcamGUI/FlatCAMGUI.py:356 +#: flatcamGUI/MainGUI.py:356 msgid "Merge a selection of Excellon objects into a new combo Excellon object." msgstr "" "Объединяет выбранные объекты Excellon в новый комбинированный объект " "Excellon." -#: flatcamGUI/FlatCAMGUI.py:359 +#: flatcamGUI/MainGUI.py:359 msgid "Join Gerber(s) -> Gerber" msgstr "Объединить Gerber(s) - > Gerber" -#: flatcamGUI/FlatCAMGUI.py:361 +#: flatcamGUI/MainGUI.py:361 msgid "Merge a selection of Gerber objects into a new combo Gerber object." msgstr "" "Объединяет выбранные объекты Gerber в новый комбинированный объект Gerber." -#: flatcamGUI/FlatCAMGUI.py:366 +#: flatcamGUI/MainGUI.py:366 msgid "Convert Single to MultiGeo" msgstr "Преобразование Single в MultiGeo" -#: flatcamGUI/FlatCAMGUI.py:368 +#: flatcamGUI/MainGUI.py:368 msgid "" "Will convert a Geometry object from single_geometry type\n" "to a multi_geometry type." @@ -5517,11 +5517,11 @@ msgstr "" "Преобразует объект Geometry из типа single_geometry\n" "в multi_geometry.." -#: flatcamGUI/FlatCAMGUI.py:372 +#: flatcamGUI/MainGUI.py:372 msgid "Convert Multi to SingleGeo" msgstr "Преобразование Multi в SingleGeo" -#: flatcamGUI/FlatCAMGUI.py:374 +#: flatcamGUI/MainGUI.py:374 msgid "" "Will convert a Geometry object from multi_geometry type\n" "to a single_geometry type." @@ -5529,756 +5529,756 @@ msgstr "" "Преобразует объект Geometry из типа multi_geometry\n" "в single_geometry.." -#: flatcamGUI/FlatCAMGUI.py:381 +#: flatcamGUI/MainGUI.py:381 msgid "Convert Any to Geo" msgstr "Конвертировать любой объект в Geo" -#: flatcamGUI/FlatCAMGUI.py:384 +#: flatcamGUI/MainGUI.py:384 msgid "Convert Any to Gerber" msgstr "Конвертировать любой объект в Gerber" -#: flatcamGUI/FlatCAMGUI.py:390 +#: flatcamGUI/MainGUI.py:390 msgid "&Copy\tCtrl+C" msgstr "&Копировать\tCtrl+C" -#: flatcamGUI/FlatCAMGUI.py:395 +#: flatcamGUI/MainGUI.py:395 msgid "&Delete\tDEL" msgstr "&Удалить\tDEL" -#: flatcamGUI/FlatCAMGUI.py:400 +#: flatcamGUI/MainGUI.py:400 msgid "Se&t Origin\tO" msgstr "Ук&азать начало координат\tO" -#: flatcamGUI/FlatCAMGUI.py:402 +#: flatcamGUI/MainGUI.py:402 msgid "Move to Origin\tShift+O" msgstr "Перейти к началу координат\tShift+O" -#: flatcamGUI/FlatCAMGUI.py:405 +#: flatcamGUI/MainGUI.py:405 msgid "Jump to Location\tJ" msgstr "Перейти к\tJ" -#: flatcamGUI/FlatCAMGUI.py:407 +#: flatcamGUI/MainGUI.py:407 msgid "Locate in Object\tShift+J" msgstr "Разместить объект\tShift+J" -#: flatcamGUI/FlatCAMGUI.py:412 +#: flatcamGUI/MainGUI.py:412 msgid "Toggle Units\tQ" msgstr "Единицы измерения\tQ" -#: flatcamGUI/FlatCAMGUI.py:414 +#: flatcamGUI/MainGUI.py:414 msgid "&Select All\tCtrl+A" msgstr "&Выбрать все\tCtrl+A" -#: flatcamGUI/FlatCAMGUI.py:419 +#: flatcamGUI/MainGUI.py:419 msgid "&Preferences\tShift+P" msgstr "&Настройки\tShift+P" -#: flatcamGUI/FlatCAMGUI.py:425 flatcamTools/ToolProperties.py:155 +#: flatcamGUI/MainGUI.py:425 flatcamTools/ToolProperties.py:155 msgid "Options" msgstr "Опции" -#: flatcamGUI/FlatCAMGUI.py:427 +#: flatcamGUI/MainGUI.py:427 msgid "&Rotate Selection\tShift+(R)" msgstr "&Вращение\tShift+(R)" -#: flatcamGUI/FlatCAMGUI.py:432 +#: flatcamGUI/MainGUI.py:432 msgid "&Skew on X axis\tShift+X" msgstr "&Наклон по оси X\tShift+X" -#: flatcamGUI/FlatCAMGUI.py:434 +#: flatcamGUI/MainGUI.py:434 msgid "S&kew on Y axis\tShift+Y" msgstr "Н&аклон по оси Y\tShift+Y" -#: flatcamGUI/FlatCAMGUI.py:439 +#: flatcamGUI/MainGUI.py:439 msgid "Flip on &X axis\tX" msgstr "Отразить по оси &X\tX" -#: flatcamGUI/FlatCAMGUI.py:441 +#: flatcamGUI/MainGUI.py:441 msgid "Flip on &Y axis\tY" msgstr "Отразить по оси &Y\tY" -#: flatcamGUI/FlatCAMGUI.py:446 +#: flatcamGUI/MainGUI.py:446 msgid "View source\tAlt+S" msgstr "Просмотреть код\tAlt+S" -#: flatcamGUI/FlatCAMGUI.py:448 +#: flatcamGUI/MainGUI.py:448 msgid "Tools DataBase\tCtrl+D" msgstr "База данных\tCtrl+D" -#: flatcamGUI/FlatCAMGUI.py:455 flatcamGUI/FlatCAMGUI.py:2183 +#: flatcamGUI/MainGUI.py:455 flatcamGUI/MainGUI.py:2183 msgid "View" msgstr "Вид" -#: flatcamGUI/FlatCAMGUI.py:457 +#: flatcamGUI/MainGUI.py:457 msgid "Enable all plots\tAlt+1" msgstr "Включить все участки\tAlt+1" -#: flatcamGUI/FlatCAMGUI.py:459 +#: flatcamGUI/MainGUI.py:459 msgid "Disable all plots\tAlt+2" msgstr "Отключить все участки\tAlt+2" -#: flatcamGUI/FlatCAMGUI.py:461 +#: flatcamGUI/MainGUI.py:461 msgid "Disable non-selected\tAlt+3" msgstr "Отключить не выбранные\tAlt+3" -#: flatcamGUI/FlatCAMGUI.py:465 +#: flatcamGUI/MainGUI.py:465 msgid "&Zoom Fit\tV" msgstr "&Вернуть масштаб\tV" -#: flatcamGUI/FlatCAMGUI.py:467 +#: flatcamGUI/MainGUI.py:467 msgid "&Zoom In\t=" msgstr "&Увеличить\t=" -#: flatcamGUI/FlatCAMGUI.py:469 +#: flatcamGUI/MainGUI.py:469 msgid "&Zoom Out\t-" msgstr "&Уменьшить\t-" -#: flatcamGUI/FlatCAMGUI.py:474 +#: flatcamGUI/MainGUI.py:474 msgid "Redraw All\tF5" msgstr "Перерисовать всё\tF5" -#: flatcamGUI/FlatCAMGUI.py:478 +#: flatcamGUI/MainGUI.py:478 msgid "Toggle Code Editor\tShift+E" msgstr "Переключить редактор кода\tShift+E" -#: flatcamGUI/FlatCAMGUI.py:481 +#: flatcamGUI/MainGUI.py:481 msgid "&Toggle FullScreen\tAlt+F10" msgstr "&Во весь экран\tAlt+F10" -#: flatcamGUI/FlatCAMGUI.py:483 +#: flatcamGUI/MainGUI.py:483 msgid "&Toggle Plot Area\tCtrl+F10" msgstr "&Рабочая область\tCtrl+F10" -#: flatcamGUI/FlatCAMGUI.py:485 +#: flatcamGUI/MainGUI.py:485 msgid "&Toggle Project/Sel/Tool\t`" msgstr "&Боковая панель\t`" -#: flatcamGUI/FlatCAMGUI.py:489 +#: flatcamGUI/MainGUI.py:489 msgid "&Toggle Grid Snap\tG" msgstr "&Привязка к сетке\tG" -#: flatcamGUI/FlatCAMGUI.py:491 +#: flatcamGUI/MainGUI.py:491 msgid "&Toggle Grid Lines\tAlt+G" msgstr "&Переключить линии сетки \tAlt+G" -#: flatcamGUI/FlatCAMGUI.py:493 +#: flatcamGUI/MainGUI.py:493 msgid "&Toggle Axis\tShift+G" msgstr "&Оси\tShift+G" -#: flatcamGUI/FlatCAMGUI.py:495 +#: flatcamGUI/MainGUI.py:495 msgid "Toggle Workspace\tShift+W" msgstr "Границы рабочего пространства\tShift+W" -#: flatcamGUI/FlatCAMGUI.py:500 +#: flatcamGUI/MainGUI.py:500 msgid "Objects" msgstr "Объекты" -#: flatcamGUI/FlatCAMGUI.py:514 +#: flatcamGUI/MainGUI.py:514 msgid "&Command Line\tS" msgstr "&Командная строка\tS" -#: flatcamGUI/FlatCAMGUI.py:519 +#: flatcamGUI/MainGUI.py:519 msgid "Help" msgstr "Помощь" -#: flatcamGUI/FlatCAMGUI.py:521 +#: flatcamGUI/MainGUI.py:521 msgid "Online Help\tF1" msgstr "Онлайн справка\tF1" -#: flatcamGUI/FlatCAMGUI.py:531 +#: flatcamGUI/MainGUI.py:531 msgid "Report a bug" msgstr "Сообщить об ошибке" -#: flatcamGUI/FlatCAMGUI.py:534 +#: flatcamGUI/MainGUI.py:534 msgid "Excellon Specification" msgstr "Спецификация Excellon" -#: flatcamGUI/FlatCAMGUI.py:536 +#: flatcamGUI/MainGUI.py:536 msgid "Gerber Specification" msgstr "Спецификация Gerber" -#: flatcamGUI/FlatCAMGUI.py:541 +#: flatcamGUI/MainGUI.py:541 msgid "Shortcuts List\tF3" msgstr "Список комбинаций клавиш\tF3" -#: flatcamGUI/FlatCAMGUI.py:543 +#: flatcamGUI/MainGUI.py:543 msgid "YouTube Channel\tF4" msgstr "Канал YouTube\tF4" -#: flatcamGUI/FlatCAMGUI.py:554 +#: flatcamGUI/MainGUI.py:554 msgid "Add Circle\tO" msgstr "Добавить круг\tO" -#: flatcamGUI/FlatCAMGUI.py:557 +#: flatcamGUI/MainGUI.py:557 msgid "Add Arc\tA" msgstr "Добавить дугу\tA" -#: flatcamGUI/FlatCAMGUI.py:560 +#: flatcamGUI/MainGUI.py:560 msgid "Add Rectangle\tR" msgstr "Добавить прямоугольник\tR" -#: flatcamGUI/FlatCAMGUI.py:563 +#: flatcamGUI/MainGUI.py:563 msgid "Add Polygon\tN" msgstr "Добавить полигон\tN" -#: flatcamGUI/FlatCAMGUI.py:566 +#: flatcamGUI/MainGUI.py:566 msgid "Add Path\tP" msgstr "Добавить дорожку\tP" -#: flatcamGUI/FlatCAMGUI.py:569 +#: flatcamGUI/MainGUI.py:569 msgid "Add Text\tT" msgstr "Добавить текст\tT" -#: flatcamGUI/FlatCAMGUI.py:572 +#: flatcamGUI/MainGUI.py:572 msgid "Polygon Union\tU" msgstr "Объединение полигонов\tU" -#: flatcamGUI/FlatCAMGUI.py:574 +#: flatcamGUI/MainGUI.py:574 msgid "Polygon Intersection\tE" msgstr "Пересечение полигонов\tE" -#: flatcamGUI/FlatCAMGUI.py:576 +#: flatcamGUI/MainGUI.py:576 msgid "Polygon Subtraction\tS" msgstr "Вычитание полигонов\tS" -#: flatcamGUI/FlatCAMGUI.py:580 +#: flatcamGUI/MainGUI.py:580 msgid "Cut Path\tX" msgstr "Вырезать дорожку\tX" -#: flatcamGUI/FlatCAMGUI.py:584 +#: flatcamGUI/MainGUI.py:584 msgid "Copy Geom\tC" msgstr "Копировать Geom\tC" -#: flatcamGUI/FlatCAMGUI.py:586 +#: flatcamGUI/MainGUI.py:586 msgid "Delete Shape\tDEL" msgstr "Удалить фигуру\tDEL" -#: flatcamGUI/FlatCAMGUI.py:590 flatcamGUI/FlatCAMGUI.py:677 +#: flatcamGUI/MainGUI.py:590 flatcamGUI/MainGUI.py:677 msgid "Move\tM" msgstr "Переместить\tM" -#: flatcamGUI/FlatCAMGUI.py:592 +#: flatcamGUI/MainGUI.py:592 msgid "Buffer Tool\tB" msgstr "Буфер\tB" -#: flatcamGUI/FlatCAMGUI.py:595 +#: flatcamGUI/MainGUI.py:595 msgid "Paint Tool\tI" msgstr "Рисование\tI" -#: flatcamGUI/FlatCAMGUI.py:598 +#: flatcamGUI/MainGUI.py:598 msgid "Transform Tool\tAlt+R" msgstr "Трансформация\tAlt+R" -#: flatcamGUI/FlatCAMGUI.py:602 +#: flatcamGUI/MainGUI.py:602 msgid "Toggle Corner Snap\tK" msgstr "Привязка к углу\tK" -#: flatcamGUI/FlatCAMGUI.py:608 +#: flatcamGUI/MainGUI.py:608 msgid ">Excellon Editor<" msgstr ">Редактор Excellon<" -#: flatcamGUI/FlatCAMGUI.py:612 +#: flatcamGUI/MainGUI.py:612 msgid "Add Drill Array\tA" msgstr "Добавить группу свёрел\tA" -#: flatcamGUI/FlatCAMGUI.py:614 +#: flatcamGUI/MainGUI.py:614 msgid "Add Drill\tD" msgstr "Добавить сверло\tD" -#: flatcamGUI/FlatCAMGUI.py:618 +#: flatcamGUI/MainGUI.py:618 msgid "Add Slot Array\tQ" msgstr "Добавить массив пазов\tQ" -#: flatcamGUI/FlatCAMGUI.py:620 +#: flatcamGUI/MainGUI.py:620 msgid "Add Slot\tW" msgstr "Добавить паз\tW" -#: flatcamGUI/FlatCAMGUI.py:624 +#: flatcamGUI/MainGUI.py:624 msgid "Resize Drill(S)\tR" msgstr "Изменить размер отверстия\tR" -#: flatcamGUI/FlatCAMGUI.py:627 flatcamGUI/FlatCAMGUI.py:671 +#: flatcamGUI/MainGUI.py:627 flatcamGUI/MainGUI.py:671 msgid "Copy\tC" msgstr "Копировать\tC" -#: flatcamGUI/FlatCAMGUI.py:629 flatcamGUI/FlatCAMGUI.py:673 +#: flatcamGUI/MainGUI.py:629 flatcamGUI/MainGUI.py:673 msgid "Delete\tDEL" msgstr "Удалить\tDEL" -#: flatcamGUI/FlatCAMGUI.py:634 +#: flatcamGUI/MainGUI.py:634 msgid "Move Drill(s)\tM" msgstr "Переместить сверла\tM" -#: flatcamGUI/FlatCAMGUI.py:639 +#: flatcamGUI/MainGUI.py:639 msgid ">Gerber Editor<" msgstr ">Редактор Gerber<" -#: flatcamGUI/FlatCAMGUI.py:643 +#: flatcamGUI/MainGUI.py:643 msgid "Add Pad\tP" msgstr "Добавить площадку\tP" -#: flatcamGUI/FlatCAMGUI.py:645 +#: flatcamGUI/MainGUI.py:645 msgid "Add Pad Array\tA" msgstr "Добавить массив площадок\tA" -#: flatcamGUI/FlatCAMGUI.py:647 +#: flatcamGUI/MainGUI.py:647 msgid "Add Track\tT" msgstr "Добавить маршрут\tT" -#: flatcamGUI/FlatCAMGUI.py:649 +#: flatcamGUI/MainGUI.py:649 msgid "Add Region\tN" msgstr "Добавить регион\tN" -#: flatcamGUI/FlatCAMGUI.py:653 +#: flatcamGUI/MainGUI.py:653 msgid "Poligonize\tAlt+N" msgstr "Полигонизация\tAlt+N" -#: flatcamGUI/FlatCAMGUI.py:655 +#: flatcamGUI/MainGUI.py:655 msgid "Add SemiDisc\tE" msgstr "Добавить полукруг\tE" -#: flatcamGUI/FlatCAMGUI.py:657 +#: flatcamGUI/MainGUI.py:657 msgid "Add Disc\tD" msgstr "Добавить диск\tD" -#: flatcamGUI/FlatCAMGUI.py:659 +#: flatcamGUI/MainGUI.py:659 msgid "Buffer\tB" msgstr "Буфер\tB" -#: flatcamGUI/FlatCAMGUI.py:661 +#: flatcamGUI/MainGUI.py:661 msgid "Scale\tS" msgstr "Масштабировать\tS" -#: flatcamGUI/FlatCAMGUI.py:663 +#: flatcamGUI/MainGUI.py:663 msgid "Mark Area\tAlt+A" msgstr "Обозначить области\tAlt+A" -#: flatcamGUI/FlatCAMGUI.py:665 +#: flatcamGUI/MainGUI.py:665 msgid "Eraser\tCtrl+E" msgstr "Ластик\tCtrl+E" -#: flatcamGUI/FlatCAMGUI.py:667 +#: flatcamGUI/MainGUI.py:667 msgid "Transform\tAlt+R" msgstr "Трансформировать\tAlt+R" -#: flatcamGUI/FlatCAMGUI.py:694 +#: flatcamGUI/MainGUI.py:694 msgid "Enable Plot" msgstr "Включить участок" -#: flatcamGUI/FlatCAMGUI.py:696 +#: flatcamGUI/MainGUI.py:696 msgid "Disable Plot" msgstr "Отключить участок" -#: flatcamGUI/FlatCAMGUI.py:700 +#: flatcamGUI/MainGUI.py:700 msgid "Set Color" msgstr "Установить цвет" -#: flatcamGUI/FlatCAMGUI.py:742 +#: flatcamGUI/MainGUI.py:742 msgid "Generate CNC" msgstr "Создать CNC" -#: flatcamGUI/FlatCAMGUI.py:744 +#: flatcamGUI/MainGUI.py:744 msgid "View Source" msgstr "Просмотреть код" -#: flatcamGUI/FlatCAMGUI.py:749 flatcamGUI/FlatCAMGUI.py:863 -#: flatcamGUI/FlatCAMGUI.py:1072 flatcamGUI/FlatCAMGUI.py:2138 -#: flatcamGUI/FlatCAMGUI.py:2282 flatcamGUI/FlatCAMGUI.py:2572 -#: flatcamGUI/FlatCAMGUI.py:2775 flatcamGUI/ObjectUI.py:1617 +#: flatcamGUI/MainGUI.py:749 flatcamGUI/MainGUI.py:863 +#: flatcamGUI/MainGUI.py:1072 flatcamGUI/MainGUI.py:2138 +#: flatcamGUI/MainGUI.py:2282 flatcamGUI/MainGUI.py:2572 +#: flatcamGUI/MainGUI.py:2775 flatcamGUI/ObjectUI.py:1617 #: flatcamObjects/FlatCAMGeometry.py:502 flatcamTools/ToolPanelize.py:540 #: flatcamTools/ToolPanelize.py:567 flatcamTools/ToolPanelize.py:660 #: flatcamTools/ToolPanelize.py:689 flatcamTools/ToolPanelize.py:751 msgid "Copy" msgstr "Копировать" -#: flatcamGUI/FlatCAMGUI.py:757 flatcamGUI/FlatCAMGUI.py:2295 +#: flatcamGUI/MainGUI.py:757 flatcamGUI/MainGUI.py:2295 #: flatcamTools/ToolProperties.py:31 msgid "Properties" msgstr "Свойства" -#: flatcamGUI/FlatCAMGUI.py:786 +#: flatcamGUI/MainGUI.py:786 msgid "File Toolbar" msgstr "Панель файлов" -#: flatcamGUI/FlatCAMGUI.py:790 +#: flatcamGUI/MainGUI.py:790 msgid "Edit Toolbar" msgstr "Панель редактирования" -#: flatcamGUI/FlatCAMGUI.py:794 +#: flatcamGUI/MainGUI.py:794 msgid "View Toolbar" msgstr "Панель просмотра" -#: flatcamGUI/FlatCAMGUI.py:798 +#: flatcamGUI/MainGUI.py:798 msgid "Shell Toolbar" msgstr "Панель командной строки" -#: flatcamGUI/FlatCAMGUI.py:802 +#: flatcamGUI/MainGUI.py:802 msgid "Tools Toolbar" msgstr "Панель инструментов" -#: flatcamGUI/FlatCAMGUI.py:806 +#: flatcamGUI/MainGUI.py:806 msgid "Excellon Editor Toolbar" msgstr "Панель редактора Excellon" -#: flatcamGUI/FlatCAMGUI.py:812 +#: flatcamGUI/MainGUI.py:812 msgid "Geometry Editor Toolbar" msgstr "Панель редактора Geometry" -#: flatcamGUI/FlatCAMGUI.py:816 +#: flatcamGUI/MainGUI.py:816 msgid "Gerber Editor Toolbar" msgstr "Панель редактора Gerber" -#: flatcamGUI/FlatCAMGUI.py:820 +#: flatcamGUI/MainGUI.py:820 msgid "Grid Toolbar" msgstr "Панель сетки координат" -#: flatcamGUI/FlatCAMGUI.py:841 flatcamGUI/FlatCAMGUI.py:2549 +#: flatcamGUI/MainGUI.py:841 flatcamGUI/MainGUI.py:2549 msgid "Open project" msgstr "Открыть проект" -#: flatcamGUI/FlatCAMGUI.py:843 flatcamGUI/FlatCAMGUI.py:2551 +#: flatcamGUI/MainGUI.py:843 flatcamGUI/MainGUI.py:2551 msgid "Save project" msgstr "Сохранить проект" -#: flatcamGUI/FlatCAMGUI.py:849 flatcamGUI/FlatCAMGUI.py:2557 +#: flatcamGUI/MainGUI.py:849 flatcamGUI/MainGUI.py:2557 msgid "New Blank Geometry" msgstr "Создать Geometry" -#: flatcamGUI/FlatCAMGUI.py:851 flatcamGUI/FlatCAMGUI.py:2559 +#: flatcamGUI/MainGUI.py:851 flatcamGUI/MainGUI.py:2559 msgid "New Blank Gerber" msgstr "Создать Gerber" -#: flatcamGUI/FlatCAMGUI.py:853 flatcamGUI/FlatCAMGUI.py:2561 +#: flatcamGUI/MainGUI.py:853 flatcamGUI/MainGUI.py:2561 msgid "New Blank Excellon" msgstr "Создать Excellon" -#: flatcamGUI/FlatCAMGUI.py:858 flatcamGUI/FlatCAMGUI.py:2567 +#: flatcamGUI/MainGUI.py:858 flatcamGUI/MainGUI.py:2567 msgid "Save Object and close the Editor" msgstr "Сохранить объект и закрыть редактор" -#: flatcamGUI/FlatCAMGUI.py:865 flatcamGUI/FlatCAMGUI.py:2574 +#: flatcamGUI/MainGUI.py:865 flatcamGUI/MainGUI.py:2574 msgid "&Delete" msgstr "&Удалить" -#: flatcamGUI/FlatCAMGUI.py:868 flatcamGUI/FlatCAMGUI.py:1729 -#: flatcamGUI/FlatCAMGUI.py:1935 flatcamGUI/FlatCAMGUI.py:2577 +#: flatcamGUI/MainGUI.py:868 flatcamGUI/MainGUI.py:1729 +#: flatcamGUI/MainGUI.py:1935 flatcamGUI/MainGUI.py:2577 #: flatcamTools/ToolDistance.py:35 flatcamTools/ToolDistance.py:195 msgid "Distance Tool" msgstr "Измеритель" -#: flatcamGUI/FlatCAMGUI.py:870 flatcamGUI/FlatCAMGUI.py:2579 +#: flatcamGUI/MainGUI.py:870 flatcamGUI/MainGUI.py:2579 msgid "Distance Min Tool" msgstr "Минимальное расстояние" -#: flatcamGUI/FlatCAMGUI.py:872 flatcamGUI/FlatCAMGUI.py:1722 -#: flatcamGUI/FlatCAMGUI.py:2581 +#: flatcamGUI/MainGUI.py:872 flatcamGUI/MainGUI.py:1722 +#: flatcamGUI/MainGUI.py:2581 msgid "Set Origin" msgstr "Указать начало координат" -#: flatcamGUI/FlatCAMGUI.py:874 +#: flatcamGUI/MainGUI.py:874 msgid "Move to Origin" msgstr "Перейти к началу координат" -#: flatcamGUI/FlatCAMGUI.py:877 flatcamGUI/FlatCAMGUI.py:2583 +#: flatcamGUI/MainGUI.py:877 flatcamGUI/MainGUI.py:2583 msgid "Jump to Location" msgstr "Перейти к расположению" -#: flatcamGUI/FlatCAMGUI.py:879 flatcamGUI/FlatCAMGUI.py:1734 -#: flatcamGUI/FlatCAMGUI.py:2585 +#: flatcamGUI/MainGUI.py:879 flatcamGUI/MainGUI.py:1734 +#: flatcamGUI/MainGUI.py:2585 msgid "Locate in Object" msgstr "Разместить объект" -#: flatcamGUI/FlatCAMGUI.py:885 flatcamGUI/FlatCAMGUI.py:2591 +#: flatcamGUI/MainGUI.py:885 flatcamGUI/MainGUI.py:2591 msgid "&Replot" msgstr "&Перерисовать объект" -#: flatcamGUI/FlatCAMGUI.py:887 flatcamGUI/FlatCAMGUI.py:2593 +#: flatcamGUI/MainGUI.py:887 flatcamGUI/MainGUI.py:2593 msgid "&Clear plot" msgstr "&Отключить все участки" -#: flatcamGUI/FlatCAMGUI.py:889 flatcamGUI/FlatCAMGUI.py:1725 -#: flatcamGUI/FlatCAMGUI.py:2595 +#: flatcamGUI/MainGUI.py:889 flatcamGUI/MainGUI.py:1725 +#: flatcamGUI/MainGUI.py:2595 msgid "Zoom In" msgstr "Увеличить" -#: flatcamGUI/FlatCAMGUI.py:891 flatcamGUI/FlatCAMGUI.py:1725 -#: flatcamGUI/FlatCAMGUI.py:2597 +#: flatcamGUI/MainGUI.py:891 flatcamGUI/MainGUI.py:1725 +#: flatcamGUI/MainGUI.py:2597 msgid "Zoom Out" msgstr "Уменьшить" -#: flatcamGUI/FlatCAMGUI.py:893 flatcamGUI/FlatCAMGUI.py:1724 -#: flatcamGUI/FlatCAMGUI.py:2185 flatcamGUI/FlatCAMGUI.py:2599 +#: flatcamGUI/MainGUI.py:893 flatcamGUI/MainGUI.py:1724 +#: flatcamGUI/MainGUI.py:2185 flatcamGUI/MainGUI.py:2599 msgid "Zoom Fit" msgstr "Вернуть масштаб" -#: flatcamGUI/FlatCAMGUI.py:901 flatcamGUI/FlatCAMGUI.py:2605 +#: flatcamGUI/MainGUI.py:901 flatcamGUI/MainGUI.py:2605 msgid "&Command Line" msgstr "&Командная строка" -#: flatcamGUI/FlatCAMGUI.py:913 flatcamGUI/FlatCAMGUI.py:2617 +#: flatcamGUI/MainGUI.py:913 flatcamGUI/MainGUI.py:2617 msgid "2Sided Tool" msgstr "2-х сторонняя плата" -#: flatcamGUI/FlatCAMGUI.py:915 flatcamGUI/FlatCAMGUI.py:1740 -#: flatcamGUI/FlatCAMGUI.py:2619 +#: flatcamGUI/MainGUI.py:915 flatcamGUI/MainGUI.py:1740 +#: flatcamGUI/MainGUI.py:2619 msgid "Align Objects Tool" msgstr "Инструмент выравнивания объектов" -#: flatcamGUI/FlatCAMGUI.py:917 flatcamGUI/FlatCAMGUI.py:1741 -#: flatcamGUI/FlatCAMGUI.py:2621 flatcamTools/ToolExtractDrills.py:393 +#: flatcamGUI/MainGUI.py:917 flatcamGUI/MainGUI.py:1741 +#: flatcamGUI/MainGUI.py:2621 flatcamTools/ToolExtractDrills.py:393 msgid "Extract Drills Tool" msgstr "Инструмент извлечения отверстий" -#: flatcamGUI/FlatCAMGUI.py:920 flatcamGUI/ObjectUI.py:596 +#: flatcamGUI/MainGUI.py:920 flatcamGUI/ObjectUI.py:596 #: flatcamTools/ToolCutOut.py:440 msgid "Cutout Tool" msgstr "Обрезка платы" -#: flatcamGUI/FlatCAMGUI.py:922 flatcamGUI/FlatCAMGUI.py:2626 +#: flatcamGUI/MainGUI.py:922 flatcamGUI/MainGUI.py:2626 #: flatcamGUI/ObjectUI.py:574 flatcamGUI/ObjectUI.py:2157 #: flatcamTools/ToolNCC.py:974 msgid "NCC Tool" msgstr "Очистка меди" -#: flatcamGUI/FlatCAMGUI.py:928 flatcamGUI/FlatCAMGUI.py:2632 +#: flatcamGUI/MainGUI.py:928 flatcamGUI/MainGUI.py:2632 msgid "Panel Tool" msgstr "Панелизация" -#: flatcamGUI/FlatCAMGUI.py:930 flatcamGUI/FlatCAMGUI.py:2634 +#: flatcamGUI/MainGUI.py:930 flatcamGUI/MainGUI.py:2634 #: flatcamTools/ToolFilm.py:586 msgid "Film Tool" msgstr "Плёнка" -#: flatcamGUI/FlatCAMGUI.py:932 flatcamGUI/FlatCAMGUI.py:2636 +#: flatcamGUI/MainGUI.py:932 flatcamGUI/MainGUI.py:2636 #: flatcamTools/ToolSolderPaste.py:553 msgid "SolderPaste Tool" msgstr "Паяльная паста" -#: flatcamGUI/FlatCAMGUI.py:934 flatcamGUI/FlatCAMGUI.py:2638 +#: flatcamGUI/MainGUI.py:934 flatcamGUI/MainGUI.py:2638 #: flatcamTools/ToolSub.py:35 msgid "Subtract Tool" msgstr "Вычитатель" -#: flatcamGUI/FlatCAMGUI.py:936 flatcamGUI/FlatCAMGUI.py:2640 +#: flatcamGUI/MainGUI.py:936 flatcamGUI/MainGUI.py:2640 #: flatcamTools/ToolRulesCheck.py:616 msgid "Rules Tool" msgstr "Правила" -#: flatcamGUI/FlatCAMGUI.py:938 flatcamGUI/FlatCAMGUI.py:1743 -#: flatcamGUI/FlatCAMGUI.py:2642 flatcamTools/ToolOptimal.py:33 +#: flatcamGUI/MainGUI.py:938 flatcamGUI/MainGUI.py:1743 +#: flatcamGUI/MainGUI.py:2642 flatcamTools/ToolOptimal.py:33 #: flatcamTools/ToolOptimal.py:307 msgid "Optimal Tool" msgstr "Оптимизация" -#: flatcamGUI/FlatCAMGUI.py:943 flatcamGUI/FlatCAMGUI.py:1740 -#: flatcamGUI/FlatCAMGUI.py:2647 +#: flatcamGUI/MainGUI.py:943 flatcamGUI/MainGUI.py:1740 +#: flatcamGUI/MainGUI.py:2647 msgid "Calculators Tool" msgstr "Калькулятор" -#: flatcamGUI/FlatCAMGUI.py:947 flatcamGUI/FlatCAMGUI.py:1744 -#: flatcamGUI/FlatCAMGUI.py:2651 flatcamTools/ToolQRCode.py:43 +#: flatcamGUI/MainGUI.py:947 flatcamGUI/MainGUI.py:1744 +#: flatcamGUI/MainGUI.py:2651 flatcamTools/ToolQRCode.py:43 #: flatcamTools/ToolQRCode.py:382 msgid "QRCode Tool" msgstr "QR код" -#: flatcamGUI/FlatCAMGUI.py:949 flatcamGUI/FlatCAMGUI.py:2653 +#: flatcamGUI/MainGUI.py:949 flatcamGUI/MainGUI.py:2653 #: flatcamTools/ToolCopperThieving.py:39 flatcamTools/ToolCopperThieving.py:568 msgid "Copper Thieving Tool" msgstr "Copper Thieving" -#: flatcamGUI/FlatCAMGUI.py:952 flatcamGUI/FlatCAMGUI.py:1741 -#: flatcamGUI/FlatCAMGUI.py:2656 flatcamTools/ToolFiducials.py:33 +#: flatcamGUI/MainGUI.py:952 flatcamGUI/MainGUI.py:1741 +#: flatcamGUI/MainGUI.py:2656 flatcamTools/ToolFiducials.py:33 #: flatcamTools/ToolFiducials.py:395 msgid "Fiducials Tool" msgstr "Контрольные точки" -#: flatcamGUI/FlatCAMGUI.py:954 flatcamGUI/FlatCAMGUI.py:2658 +#: flatcamGUI/MainGUI.py:954 flatcamGUI/MainGUI.py:2658 #: flatcamTools/ToolCalibration.py:37 flatcamTools/ToolCalibration.py:759 msgid "Calibration Tool" msgstr "Калькулятор" -#: flatcamGUI/FlatCAMGUI.py:956 flatcamGUI/FlatCAMGUI.py:1741 -#: flatcamGUI/FlatCAMGUI.py:2660 +#: flatcamGUI/MainGUI.py:956 flatcamGUI/MainGUI.py:1741 +#: flatcamGUI/MainGUI.py:2660 msgid "Punch Gerber Tool" msgstr "Перфорация" -#: flatcamGUI/FlatCAMGUI.py:958 flatcamGUI/FlatCAMGUI.py:2662 +#: flatcamGUI/MainGUI.py:958 flatcamGUI/MainGUI.py:2662 #: flatcamTools/ToolInvertGerber.py:31 msgid "Invert Gerber Tool" msgstr "Инверсия Gerber" -#: flatcamGUI/FlatCAMGUI.py:964 flatcamGUI/FlatCAMGUI.py:990 -#: flatcamGUI/FlatCAMGUI.py:1042 flatcamGUI/FlatCAMGUI.py:2668 -#: flatcamGUI/FlatCAMGUI.py:2746 +#: flatcamGUI/MainGUI.py:964 flatcamGUI/MainGUI.py:990 +#: flatcamGUI/MainGUI.py:1042 flatcamGUI/MainGUI.py:2668 +#: flatcamGUI/MainGUI.py:2746 msgid "Select" msgstr "Выбрать" -#: flatcamGUI/FlatCAMGUI.py:966 flatcamGUI/FlatCAMGUI.py:2670 +#: flatcamGUI/MainGUI.py:966 flatcamGUI/MainGUI.py:2670 msgid "Add Drill Hole" msgstr "Добавить отверстие" -#: flatcamGUI/FlatCAMGUI.py:968 flatcamGUI/FlatCAMGUI.py:2672 +#: flatcamGUI/MainGUI.py:968 flatcamGUI/MainGUI.py:2672 msgid "Add Drill Hole Array" msgstr "Добавить массив отверстий" -#: flatcamGUI/FlatCAMGUI.py:970 flatcamGUI/FlatCAMGUI.py:2020 -#: flatcamGUI/FlatCAMGUI.py:2273 flatcamGUI/FlatCAMGUI.py:2676 +#: flatcamGUI/MainGUI.py:970 flatcamGUI/MainGUI.py:2020 +#: flatcamGUI/MainGUI.py:2273 flatcamGUI/MainGUI.py:2676 msgid "Add Slot" msgstr "Добавить паз" -#: flatcamGUI/FlatCAMGUI.py:972 flatcamGUI/FlatCAMGUI.py:2019 -#: flatcamGUI/FlatCAMGUI.py:2275 flatcamGUI/FlatCAMGUI.py:2678 +#: flatcamGUI/MainGUI.py:972 flatcamGUI/MainGUI.py:2019 +#: flatcamGUI/MainGUI.py:2275 flatcamGUI/MainGUI.py:2678 msgid "Add Slot Array" msgstr "Добавить массив пазов" -#: flatcamGUI/FlatCAMGUI.py:974 flatcamGUI/FlatCAMGUI.py:2278 -#: flatcamGUI/FlatCAMGUI.py:2674 +#: flatcamGUI/MainGUI.py:974 flatcamGUI/MainGUI.py:2278 +#: flatcamGUI/MainGUI.py:2674 msgid "Resize Drill" msgstr "Изменить размер отверстия" -#: flatcamGUI/FlatCAMGUI.py:978 flatcamGUI/FlatCAMGUI.py:2682 +#: flatcamGUI/MainGUI.py:978 flatcamGUI/MainGUI.py:2682 msgid "Copy Drill" msgstr "Копировать отверстие" -#: flatcamGUI/FlatCAMGUI.py:980 flatcamGUI/FlatCAMGUI.py:2684 +#: flatcamGUI/MainGUI.py:980 flatcamGUI/MainGUI.py:2684 msgid "Delete Drill" msgstr "Удалить отверстие" -#: flatcamGUI/FlatCAMGUI.py:984 flatcamGUI/FlatCAMGUI.py:2688 +#: flatcamGUI/MainGUI.py:984 flatcamGUI/MainGUI.py:2688 msgid "Move Drill" msgstr "Переместить отверстие" -#: flatcamGUI/FlatCAMGUI.py:992 flatcamGUI/FlatCAMGUI.py:2696 +#: flatcamGUI/MainGUI.py:992 flatcamGUI/MainGUI.py:2696 msgid "Add Circle" msgstr "Добавить круг" -#: flatcamGUI/FlatCAMGUI.py:994 flatcamGUI/FlatCAMGUI.py:2698 +#: flatcamGUI/MainGUI.py:994 flatcamGUI/MainGUI.py:2698 msgid "Add Arc" msgstr "Добавить дугу" -#: flatcamGUI/FlatCAMGUI.py:996 flatcamGUI/FlatCAMGUI.py:2700 +#: flatcamGUI/MainGUI.py:996 flatcamGUI/MainGUI.py:2700 msgid "Add Rectangle" msgstr "Добавить прямоугольник" -#: flatcamGUI/FlatCAMGUI.py:1000 flatcamGUI/FlatCAMGUI.py:2704 +#: flatcamGUI/MainGUI.py:1000 flatcamGUI/MainGUI.py:2704 msgid "Add Path" msgstr "Добавить дорожку" -#: flatcamGUI/FlatCAMGUI.py:1002 flatcamGUI/FlatCAMGUI.py:2706 +#: flatcamGUI/MainGUI.py:1002 flatcamGUI/MainGUI.py:2706 msgid "Add Polygon" msgstr "Добавить полигон" -#: flatcamGUI/FlatCAMGUI.py:1005 flatcamGUI/FlatCAMGUI.py:2709 +#: flatcamGUI/MainGUI.py:1005 flatcamGUI/MainGUI.py:2709 msgid "Add Text" msgstr "Добавить текст" -#: flatcamGUI/FlatCAMGUI.py:1007 flatcamGUI/FlatCAMGUI.py:2711 +#: flatcamGUI/MainGUI.py:1007 flatcamGUI/MainGUI.py:2711 msgid "Add Buffer" msgstr "Добавить буфер" -#: flatcamGUI/FlatCAMGUI.py:1009 flatcamGUI/FlatCAMGUI.py:2713 +#: flatcamGUI/MainGUI.py:1009 flatcamGUI/MainGUI.py:2713 msgid "Paint Shape" msgstr "Нарисовать фигуру" -#: flatcamGUI/FlatCAMGUI.py:1011 flatcamGUI/FlatCAMGUI.py:1068 -#: flatcamGUI/FlatCAMGUI.py:2214 flatcamGUI/FlatCAMGUI.py:2259 -#: flatcamGUI/FlatCAMGUI.py:2715 flatcamGUI/FlatCAMGUI.py:2771 +#: flatcamGUI/MainGUI.py:1011 flatcamGUI/MainGUI.py:1068 +#: flatcamGUI/MainGUI.py:2214 flatcamGUI/MainGUI.py:2259 +#: flatcamGUI/MainGUI.py:2715 flatcamGUI/MainGUI.py:2771 msgid "Eraser" msgstr "Ластик" -#: flatcamGUI/FlatCAMGUI.py:1015 flatcamGUI/FlatCAMGUI.py:2719 +#: flatcamGUI/MainGUI.py:1015 flatcamGUI/MainGUI.py:2719 msgid "Polygon Union" msgstr "Сращение полигонов" -#: flatcamGUI/FlatCAMGUI.py:1017 flatcamGUI/FlatCAMGUI.py:2721 +#: flatcamGUI/MainGUI.py:1017 flatcamGUI/MainGUI.py:2721 msgid "Polygon Explode" msgstr "Разделение полигонов" -#: flatcamGUI/FlatCAMGUI.py:1020 flatcamGUI/FlatCAMGUI.py:2724 +#: flatcamGUI/MainGUI.py:1020 flatcamGUI/MainGUI.py:2724 msgid "Polygon Intersection" msgstr "Пересечение полигонов" -#: flatcamGUI/FlatCAMGUI.py:1022 flatcamGUI/FlatCAMGUI.py:2726 +#: flatcamGUI/MainGUI.py:1022 flatcamGUI/MainGUI.py:2726 msgid "Polygon Subtraction" msgstr "Вычитание полигонов" -#: flatcamGUI/FlatCAMGUI.py:1026 flatcamGUI/FlatCAMGUI.py:2730 +#: flatcamGUI/MainGUI.py:1026 flatcamGUI/MainGUI.py:2730 msgid "Cut Path" msgstr "Вырезать путь" -#: flatcamGUI/FlatCAMGUI.py:1028 +#: flatcamGUI/MainGUI.py:1028 msgid "Copy Shape(s)" msgstr "Копировать форму(ы)" -#: flatcamGUI/FlatCAMGUI.py:1031 +#: flatcamGUI/MainGUI.py:1031 msgid "Delete Shape '-'" msgstr "Удалить фигуру '-'" -#: flatcamGUI/FlatCAMGUI.py:1033 flatcamGUI/FlatCAMGUI.py:1076 -#: flatcamGUI/FlatCAMGUI.py:2226 flatcamGUI/FlatCAMGUI.py:2263 -#: flatcamGUI/FlatCAMGUI.py:2736 flatcamGUI/FlatCAMGUI.py:2779 +#: flatcamGUI/MainGUI.py:1033 flatcamGUI/MainGUI.py:1076 +#: flatcamGUI/MainGUI.py:2226 flatcamGUI/MainGUI.py:2263 +#: flatcamGUI/MainGUI.py:2736 flatcamGUI/MainGUI.py:2779 #: flatcamGUI/ObjectUI.py:109 msgid "Transformations" msgstr "Трансформация" -#: flatcamGUI/FlatCAMGUI.py:1036 +#: flatcamGUI/MainGUI.py:1036 msgid "Move Objects " msgstr "Переместить объект " -#: flatcamGUI/FlatCAMGUI.py:1044 flatcamGUI/FlatCAMGUI.py:2139 -#: flatcamGUI/FlatCAMGUI.py:2748 +#: flatcamGUI/MainGUI.py:1044 flatcamGUI/MainGUI.py:2139 +#: flatcamGUI/MainGUI.py:2748 msgid "Add Pad" msgstr "Добавить площадку" -#: flatcamGUI/FlatCAMGUI.py:1048 flatcamGUI/FlatCAMGUI.py:2140 -#: flatcamGUI/FlatCAMGUI.py:2752 +#: flatcamGUI/MainGUI.py:1048 flatcamGUI/MainGUI.py:2140 +#: flatcamGUI/MainGUI.py:2752 msgid "Add Track" msgstr "Добавить маршрут" -#: flatcamGUI/FlatCAMGUI.py:1050 flatcamGUI/FlatCAMGUI.py:2139 -#: flatcamGUI/FlatCAMGUI.py:2754 +#: flatcamGUI/MainGUI.py:1050 flatcamGUI/MainGUI.py:2139 +#: flatcamGUI/MainGUI.py:2754 msgid "Add Region" msgstr "Добавить регион" -#: flatcamGUI/FlatCAMGUI.py:1052 flatcamGUI/FlatCAMGUI.py:2245 -#: flatcamGUI/FlatCAMGUI.py:2756 +#: flatcamGUI/MainGUI.py:1052 flatcamGUI/MainGUI.py:2245 +#: flatcamGUI/MainGUI.py:2756 msgid "Poligonize" msgstr "Полигонизация" -#: flatcamGUI/FlatCAMGUI.py:1055 flatcamGUI/FlatCAMGUI.py:2247 -#: flatcamGUI/FlatCAMGUI.py:2759 +#: flatcamGUI/MainGUI.py:1055 flatcamGUI/MainGUI.py:2247 +#: flatcamGUI/MainGUI.py:2759 msgid "SemiDisc" msgstr "Полукруг" -#: flatcamGUI/FlatCAMGUI.py:1057 flatcamGUI/FlatCAMGUI.py:2249 -#: flatcamGUI/FlatCAMGUI.py:2761 +#: flatcamGUI/MainGUI.py:1057 flatcamGUI/MainGUI.py:2249 +#: flatcamGUI/MainGUI.py:2761 msgid "Disc" msgstr "Диск" -#: flatcamGUI/FlatCAMGUI.py:1065 flatcamGUI/FlatCAMGUI.py:2257 -#: flatcamGUI/FlatCAMGUI.py:2769 +#: flatcamGUI/MainGUI.py:1065 flatcamGUI/MainGUI.py:2257 +#: flatcamGUI/MainGUI.py:2769 msgid "Mark Area" msgstr "Обозначить области" -#: flatcamGUI/FlatCAMGUI.py:1079 flatcamGUI/FlatCAMGUI.py:2139 -#: flatcamGUI/FlatCAMGUI.py:2230 flatcamGUI/FlatCAMGUI.py:2293 -#: flatcamGUI/FlatCAMGUI.py:2782 flatcamTools/ToolMove.py:27 +#: flatcamGUI/MainGUI.py:1079 flatcamGUI/MainGUI.py:2139 +#: flatcamGUI/MainGUI.py:2230 flatcamGUI/MainGUI.py:2293 +#: flatcamGUI/MainGUI.py:2782 flatcamTools/ToolMove.py:27 msgid "Move" msgstr "Переместить" -#: flatcamGUI/FlatCAMGUI.py:1087 flatcamGUI/FlatCAMGUI.py:2791 +#: flatcamGUI/MainGUI.py:1087 flatcamGUI/MainGUI.py:2791 msgid "Snap to grid" msgstr "Привязка к сетке" -#: flatcamGUI/FlatCAMGUI.py:1090 flatcamGUI/FlatCAMGUI.py:2794 +#: flatcamGUI/MainGUI.py:1090 flatcamGUI/MainGUI.py:2794 msgid "Grid X snapping distance" msgstr "Размер сетки по X" -#: flatcamGUI/FlatCAMGUI.py:1095 flatcamGUI/FlatCAMGUI.py:2799 +#: flatcamGUI/MainGUI.py:1095 flatcamGUI/MainGUI.py:2799 msgid "Grid Y snapping distance" msgstr "Размер сетки по Y" -#: flatcamGUI/FlatCAMGUI.py:1101 flatcamGUI/FlatCAMGUI.py:2805 +#: flatcamGUI/MainGUI.py:1101 flatcamGUI/MainGUI.py:2805 msgid "" "When active, value on Grid_X\n" "is copied to the Grid_Y value." @@ -6286,65 +6286,65 @@ msgstr "" "Если активен, значение на Grid_X\n" "копируется в значение Grid_Y." -#: flatcamGUI/FlatCAMGUI.py:1108 flatcamGUI/FlatCAMGUI.py:2812 +#: flatcamGUI/MainGUI.py:1108 flatcamGUI/MainGUI.py:2812 msgid "Snap to corner" msgstr "Привязка к углу" -#: flatcamGUI/FlatCAMGUI.py:1112 flatcamGUI/FlatCAMGUI.py:2816 +#: flatcamGUI/MainGUI.py:1112 flatcamGUI/MainGUI.py:2816 #: flatcamGUI/preferences/general/GeneralAPPSetGroupUI.py:78 msgid "Max. magnet distance" msgstr "Макс. магнит расстояние" -#: flatcamGUI/FlatCAMGUI.py:1149 +#: flatcamGUI/MainGUI.py:1149 msgid "Selected" msgstr "Выбранное" -#: flatcamGUI/FlatCAMGUI.py:1177 flatcamGUI/FlatCAMGUI.py:1185 +#: flatcamGUI/MainGUI.py:1177 flatcamGUI/MainGUI.py:1185 msgid "Plot Area" msgstr "Рабочая область" -#: flatcamGUI/FlatCAMGUI.py:1212 +#: flatcamGUI/MainGUI.py:1212 msgid "General" msgstr "Основные" -#: flatcamGUI/FlatCAMGUI.py:1227 flatcamTools/ToolCopperThieving.py:74 +#: flatcamGUI/MainGUI.py:1227 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:1237 flatcamTools/ToolDblSided.py:92 +#: flatcamGUI/MainGUI.py:1237 flatcamTools/ToolDblSided.py:92 msgid "EXCELLON" msgstr "EXCELLON" -#: flatcamGUI/FlatCAMGUI.py:1247 flatcamTools/ToolDblSided.py:120 +#: flatcamGUI/MainGUI.py:1247 flatcamTools/ToolDblSided.py:120 msgid "GEOMETRY" msgstr "GEOMETRY" -#: flatcamGUI/FlatCAMGUI.py:1257 +#: flatcamGUI/MainGUI.py:1257 msgid "CNC-JOB" msgstr "CNC-JOB" -#: flatcamGUI/FlatCAMGUI.py:1266 flatcamGUI/ObjectUI.py:563 +#: flatcamGUI/MainGUI.py:1266 flatcamGUI/ObjectUI.py:563 #: flatcamGUI/ObjectUI.py:2132 msgid "TOOLS" msgstr "ИНСТРУМЕНТЫ" -#: flatcamGUI/FlatCAMGUI.py:1275 +#: flatcamGUI/MainGUI.py:1275 msgid "TOOLS 2" msgstr "ИНСТРУМЕНТЫ 2" -#: flatcamGUI/FlatCAMGUI.py:1285 +#: flatcamGUI/MainGUI.py:1285 msgid "UTILITIES" msgstr "УТИЛИТЫ" -#: flatcamGUI/FlatCAMGUI.py:1302 +#: flatcamGUI/MainGUI.py:1302 #: flatcamGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:192 msgid "Restore Defaults" msgstr "Восстановить значения по умолчанию" -#: flatcamGUI/FlatCAMGUI.py:1305 +#: flatcamGUI/MainGUI.py:1305 msgid "" "Restore the entire set of default values\n" "to the initial values loaded after first launch." @@ -6352,19 +6352,19 @@ msgstr "" "Восстановление всего набора значений по умолчанию\n" "к начальным значениям, загруженным после первого запуска." -#: flatcamGUI/FlatCAMGUI.py:1310 +#: flatcamGUI/MainGUI.py:1310 msgid "Open Pref Folder" msgstr "Открыть папку настроек" -#: flatcamGUI/FlatCAMGUI.py:1313 +#: flatcamGUI/MainGUI.py:1313 msgid "Open the folder where FlatCAM save the preferences files." msgstr "Открывает папку, в которой FlatCAM сохраняет файлы настроек." -#: flatcamGUI/FlatCAMGUI.py:1317 flatcamGUI/FlatCAMGUI.py:2517 +#: flatcamGUI/MainGUI.py:1317 flatcamGUI/MainGUI.py:2517 msgid "Clear GUI Settings" msgstr "Сброс настроек интерфейса" -#: flatcamGUI/FlatCAMGUI.py:1321 +#: flatcamGUI/MainGUI.py:1321 msgid "" "Clear the GUI settings for FlatCAM,\n" "such as: layout, gui state, style, hdpi support etc." @@ -6372,15 +6372,15 @@ msgstr "" "Сброс настроек интерфейса FlatCAM,\n" "таких как: макет, состояние интерфейса, стиль, поддержка hdpi и т. д." -#: flatcamGUI/FlatCAMGUI.py:1332 +#: flatcamGUI/MainGUI.py:1332 msgid "Apply" msgstr "Применить" -#: flatcamGUI/FlatCAMGUI.py:1335 +#: flatcamGUI/MainGUI.py:1335 msgid "Apply the current preferences without saving to a file." msgstr "Применение текущих настроек без сохранения в файл." -#: flatcamGUI/FlatCAMGUI.py:1342 +#: flatcamGUI/MainGUI.py:1342 msgid "" "Save the current settings in the 'current_defaults' file\n" "which is the file storing the working default preferences." @@ -6388,215 +6388,215 @@ msgstr "" "Сохраняет текущие настройки в файле 'current_defaults'\n" "который является файлом, хранящим рабочие настройки по умолчанию." -#: flatcamGUI/FlatCAMGUI.py:1350 +#: flatcamGUI/MainGUI.py:1350 msgid "Will not save the changes and will close the preferences window." msgstr "Закроет окно настроек без сохранения изменений." -#: flatcamGUI/FlatCAMGUI.py:1719 +#: flatcamGUI/MainGUI.py:1719 msgid "SHOW SHORTCUT LIST" msgstr "ПОКАЗАТЬ СПИСОК КОМБИНАЦИЙ КЛАВИШ" -#: flatcamGUI/FlatCAMGUI.py:1719 +#: flatcamGUI/MainGUI.py:1719 msgid "Switch to Project Tab" msgstr "Переключиться на вкладку \"Проект\"" -#: flatcamGUI/FlatCAMGUI.py:1719 +#: flatcamGUI/MainGUI.py:1719 msgid "Switch to Selected Tab" msgstr "Переключиться на вкладку \"Выбранное\"" -#: flatcamGUI/FlatCAMGUI.py:1720 +#: flatcamGUI/MainGUI.py:1720 msgid "Switch to Tool Tab" msgstr "Переключиться на вкладку свойств" -#: flatcamGUI/FlatCAMGUI.py:1721 +#: flatcamGUI/MainGUI.py:1721 msgid "New Gerber" msgstr "Создать Gerber" -#: flatcamGUI/FlatCAMGUI.py:1721 +#: flatcamGUI/MainGUI.py:1721 msgid "Edit Object (if selected)" msgstr "Редактировать объект (если выбран)" -#: flatcamGUI/FlatCAMGUI.py:1721 +#: flatcamGUI/MainGUI.py:1721 msgid "Jump to Coordinates" msgstr "Перейти к координатам" -#: flatcamGUI/FlatCAMGUI.py:1722 +#: flatcamGUI/MainGUI.py:1722 msgid "New Excellon" msgstr "Создать Excellon" -#: flatcamGUI/FlatCAMGUI.py:1722 +#: flatcamGUI/MainGUI.py:1722 msgid "Move Obj" msgstr "Переместить объект" -#: flatcamGUI/FlatCAMGUI.py:1722 +#: flatcamGUI/MainGUI.py:1722 msgid "New Geometry" msgstr "Создать Geometry" -#: flatcamGUI/FlatCAMGUI.py:1722 +#: flatcamGUI/MainGUI.py:1722 msgid "Change Units" msgstr "Единицы измерения" -#: flatcamGUI/FlatCAMGUI.py:1723 +#: flatcamGUI/MainGUI.py:1723 msgid "Open Properties Tool" msgstr "Свойства" -#: flatcamGUI/FlatCAMGUI.py:1723 +#: flatcamGUI/MainGUI.py:1723 msgid "Rotate by 90 degree CW" msgstr "Поворот на 90 градусов по часовой стрелке" -#: flatcamGUI/FlatCAMGUI.py:1723 +#: flatcamGUI/MainGUI.py:1723 msgid "Shell Toggle" msgstr "Панель командной строки" -#: flatcamGUI/FlatCAMGUI.py:1724 +#: flatcamGUI/MainGUI.py:1724 msgid "" "Add a Tool (when in Geometry Selected Tab or in Tools NCC or Tools Paint)" msgstr "" "Добавить инструмент (во вкладках \"Выбранное\", \"Инструменты\" или " "инструменте рисования)" -#: flatcamGUI/FlatCAMGUI.py:1725 +#: flatcamGUI/MainGUI.py:1725 msgid "Flip on X_axis" msgstr "Отразить по оси X" -#: flatcamGUI/FlatCAMGUI.py:1725 +#: flatcamGUI/MainGUI.py:1725 msgid "Flip on Y_axis" msgstr "Отразить по оси Y" -#: flatcamGUI/FlatCAMGUI.py:1728 +#: flatcamGUI/MainGUI.py:1728 msgid "Copy Obj" msgstr "Копировать объекты" -#: flatcamGUI/FlatCAMGUI.py:1728 +#: flatcamGUI/MainGUI.py:1728 msgid "Open Tools Database" msgstr "Открыть БД" -#: flatcamGUI/FlatCAMGUI.py:1729 +#: flatcamGUI/MainGUI.py:1729 msgid "Open Excellon File" msgstr "Открыть Excellon" -#: flatcamGUI/FlatCAMGUI.py:1729 +#: flatcamGUI/MainGUI.py:1729 msgid "Open Gerber File" msgstr "Открыть Gerber" -#: flatcamGUI/FlatCAMGUI.py:1729 +#: flatcamGUI/MainGUI.py:1729 msgid "New Project" msgstr "Новый проект" -#: flatcamGUI/FlatCAMGUI.py:1730 flatcamTools/ToolPDF.py:42 +#: flatcamGUI/MainGUI.py:1730 flatcamTools/ToolPDF.py:42 msgid "PDF Import Tool" msgstr "Импорт PDF" -#: flatcamGUI/FlatCAMGUI.py:1730 +#: flatcamGUI/MainGUI.py:1730 msgid "Save Project" msgstr "Сохранить проект" -#: flatcamGUI/FlatCAMGUI.py:1730 +#: flatcamGUI/MainGUI.py:1730 msgid "Toggle Plot Area" msgstr "Переключить рабочую область" -#: flatcamGUI/FlatCAMGUI.py:1733 +#: flatcamGUI/MainGUI.py:1733 msgid "Copy Obj_Name" msgstr "Копировать имя объекта" -#: flatcamGUI/FlatCAMGUI.py:1734 +#: flatcamGUI/MainGUI.py:1734 msgid "Toggle Code Editor" msgstr "Переключить редактор кода" -#: flatcamGUI/FlatCAMGUI.py:1734 +#: flatcamGUI/MainGUI.py:1734 msgid "Toggle the axis" msgstr "Переключить ось" -#: flatcamGUI/FlatCAMGUI.py:1734 flatcamGUI/FlatCAMGUI.py:1933 -#: flatcamGUI/FlatCAMGUI.py:2020 flatcamGUI/FlatCAMGUI.py:2142 +#: flatcamGUI/MainGUI.py:1734 flatcamGUI/MainGUI.py:1933 +#: flatcamGUI/MainGUI.py:2020 flatcamGUI/MainGUI.py:2142 msgid "Distance Minimum Tool" msgstr "Минимальное расстояние" -#: flatcamGUI/FlatCAMGUI.py:1735 +#: flatcamGUI/MainGUI.py:1735 msgid "Open Preferences Window" msgstr "Открыть окно настроек" -#: flatcamGUI/FlatCAMGUI.py:1736 +#: flatcamGUI/MainGUI.py:1736 msgid "Rotate by 90 degree CCW" msgstr "Поворот на 90 градусов против часовой стрелки" -#: flatcamGUI/FlatCAMGUI.py:1736 +#: flatcamGUI/MainGUI.py:1736 msgid "Run a Script" msgstr "Запустить сценарий" -#: flatcamGUI/FlatCAMGUI.py:1736 +#: flatcamGUI/MainGUI.py:1736 msgid "Toggle the workspace" msgstr "Переключить рабочее пространство" -#: flatcamGUI/FlatCAMGUI.py:1736 +#: flatcamGUI/MainGUI.py:1736 msgid "Skew on X axis" msgstr "Наклон по оси X" -#: flatcamGUI/FlatCAMGUI.py:1737 +#: flatcamGUI/MainGUI.py:1737 msgid "Skew on Y axis" msgstr "Наклон по оси Y" -#: flatcamGUI/FlatCAMGUI.py:1740 +#: flatcamGUI/MainGUI.py:1740 msgid "2-Sided PCB Tool" msgstr "2-х сторонняя плата" -#: flatcamGUI/FlatCAMGUI.py:1740 +#: flatcamGUI/MainGUI.py:1740 msgid "Transformations Tool" msgstr "Трансформация" -#: flatcamGUI/FlatCAMGUI.py:1742 +#: flatcamGUI/MainGUI.py:1742 msgid "Solder Paste Dispensing Tool" msgstr "Паяльная паста" -#: flatcamGUI/FlatCAMGUI.py:1743 +#: flatcamGUI/MainGUI.py:1743 msgid "Film PCB Tool" msgstr "Плёнка" -#: flatcamGUI/FlatCAMGUI.py:1743 +#: flatcamGUI/MainGUI.py:1743 msgid "Non-Copper Clearing Tool" msgstr "Очистка от меди" -#: flatcamGUI/FlatCAMGUI.py:1744 +#: flatcamGUI/MainGUI.py:1744 msgid "Paint Area Tool" msgstr "Инструмент рисования" -#: flatcamGUI/FlatCAMGUI.py:1744 +#: flatcamGUI/MainGUI.py:1744 msgid "Rules Check Tool" msgstr "Проверка правил" -#: flatcamGUI/FlatCAMGUI.py:1745 +#: flatcamGUI/MainGUI.py:1745 msgid "View File Source" msgstr "Просмотреть код" -#: flatcamGUI/FlatCAMGUI.py:1746 +#: flatcamGUI/MainGUI.py:1746 msgid "Cutout PCB Tool" msgstr "Обрезка платы" -#: flatcamGUI/FlatCAMGUI.py:1746 +#: flatcamGUI/MainGUI.py:1746 msgid "Enable all Plots" msgstr "Включить все участки" -#: flatcamGUI/FlatCAMGUI.py:1746 +#: flatcamGUI/MainGUI.py:1746 msgid "Disable all Plots" msgstr "Отключить все участки" -#: flatcamGUI/FlatCAMGUI.py:1746 +#: flatcamGUI/MainGUI.py:1746 msgid "Disable Non-selected Plots" msgstr "Отключить не выбранные" -#: flatcamGUI/FlatCAMGUI.py:1747 +#: flatcamGUI/MainGUI.py:1747 msgid "Toggle Full Screen" msgstr "Во весь экран" -#: flatcamGUI/FlatCAMGUI.py:1750 +#: flatcamGUI/MainGUI.py:1750 msgid "Abort current task (gracefully)" msgstr "Прервать текущее задание (корректно)" -#: flatcamGUI/FlatCAMGUI.py:1753 +#: flatcamGUI/MainGUI.py:1753 msgid "Save Project As" msgstr "Сохранить проект как" -#: flatcamGUI/FlatCAMGUI.py:1754 +#: flatcamGUI/MainGUI.py:1754 msgid "" "Paste Special. Will convert a Windows path style to the one required in Tcl " "Shell" @@ -6604,247 +6604,247 @@ msgstr "" "Специальная вставка. Преобразует стиль пути Windows в тот, который требуется " "в Tcl Shell" -#: flatcamGUI/FlatCAMGUI.py:1757 +#: flatcamGUI/MainGUI.py:1757 msgid "Open Online Manual" msgstr "Открыть онлайн-руководство" -#: flatcamGUI/FlatCAMGUI.py:1758 +#: flatcamGUI/MainGUI.py:1758 msgid "Open Online Tutorials" msgstr "Открыть онлайн-уроки" -#: flatcamGUI/FlatCAMGUI.py:1758 +#: flatcamGUI/MainGUI.py:1758 msgid "Refresh Plots" msgstr "Обновить участки" -#: flatcamGUI/FlatCAMGUI.py:1758 flatcamTools/ToolSolderPaste.py:509 +#: flatcamGUI/MainGUI.py:1758 flatcamTools/ToolSolderPaste.py:509 msgid "Delete Object" msgstr "Удалить объект" -#: flatcamGUI/FlatCAMGUI.py:1758 +#: flatcamGUI/MainGUI.py:1758 msgid "Alternate: Delete Tool" msgstr "Альтернатива: Удалить инструмент" -#: flatcamGUI/FlatCAMGUI.py:1759 +#: flatcamGUI/MainGUI.py:1759 msgid "(left to Key_1)Toggle Notebook Area (Left Side)" msgstr "(слева от клавиши \"1\") Боковая панель" -#: flatcamGUI/FlatCAMGUI.py:1759 +#: flatcamGUI/MainGUI.py:1759 msgid "En(Dis)able Obj Plot" msgstr "Включить/Отключить участок" -#: flatcamGUI/FlatCAMGUI.py:1760 +#: flatcamGUI/MainGUI.py:1760 msgid "Deselects all objects" msgstr "Отмена выбора всех объектов" -#: flatcamGUI/FlatCAMGUI.py:1774 +#: flatcamGUI/MainGUI.py:1774 msgid "Editor Shortcut list" msgstr "Список комбинаций клавиш редактора" -#: flatcamGUI/FlatCAMGUI.py:1928 +#: flatcamGUI/MainGUI.py:1928 msgid "GEOMETRY EDITOR" msgstr "РЕДАКТОР GEOMETRY" -#: flatcamGUI/FlatCAMGUI.py:1928 +#: flatcamGUI/MainGUI.py:1928 msgid "Draw an Arc" msgstr "Нарисовать дугу" -#: flatcamGUI/FlatCAMGUI.py:1928 +#: flatcamGUI/MainGUI.py:1928 msgid "Copy Geo Item" msgstr "Копировать элемент Geo" -#: flatcamGUI/FlatCAMGUI.py:1929 +#: flatcamGUI/MainGUI.py:1929 msgid "Within Add Arc will toogle the ARC direction: CW or CCW" msgstr "" "При добавлении дуги будет переключаться направление изгиба: по часовой " "стрелке или против" -#: flatcamGUI/FlatCAMGUI.py:1929 +#: flatcamGUI/MainGUI.py:1929 msgid "Polygon Intersection Tool" msgstr "Пересечение полигонов" -#: flatcamGUI/FlatCAMGUI.py:1930 +#: flatcamGUI/MainGUI.py:1930 msgid "Geo Paint Tool" msgstr "Рисование" -#: flatcamGUI/FlatCAMGUI.py:1930 flatcamGUI/FlatCAMGUI.py:2019 -#: flatcamGUI/FlatCAMGUI.py:2139 +#: flatcamGUI/MainGUI.py:1930 flatcamGUI/MainGUI.py:2019 +#: flatcamGUI/MainGUI.py:2139 msgid "Jump to Location (x, y)" msgstr "Перейти к координатам (x, y)" -#: flatcamGUI/FlatCAMGUI.py:1930 +#: flatcamGUI/MainGUI.py:1930 msgid "Toggle Corner Snap" msgstr "Привязка к углу" -#: flatcamGUI/FlatCAMGUI.py:1930 +#: flatcamGUI/MainGUI.py:1930 msgid "Move Geo Item" msgstr "Переместить элемент Geo" -#: flatcamGUI/FlatCAMGUI.py:1931 +#: flatcamGUI/MainGUI.py:1931 msgid "Within Add Arc will cycle through the ARC modes" msgstr "При добавлении дуги будет переключаться между режимами дуги" -#: flatcamGUI/FlatCAMGUI.py:1931 +#: flatcamGUI/MainGUI.py:1931 msgid "Draw a Polygon" msgstr "Полигон" -#: flatcamGUI/FlatCAMGUI.py:1931 +#: flatcamGUI/MainGUI.py:1931 msgid "Draw a Circle" msgstr "Круг" -#: flatcamGUI/FlatCAMGUI.py:1932 +#: flatcamGUI/MainGUI.py:1932 msgid "Draw a Path" msgstr "Нарисовать линию" -#: flatcamGUI/FlatCAMGUI.py:1932 +#: flatcamGUI/MainGUI.py:1932 msgid "Draw Rectangle" msgstr "Прямоугольник" -#: flatcamGUI/FlatCAMGUI.py:1932 +#: flatcamGUI/MainGUI.py:1932 msgid "Polygon Subtraction Tool" msgstr "Вычитание полигонов" -#: flatcamGUI/FlatCAMGUI.py:1932 +#: flatcamGUI/MainGUI.py:1932 msgid "Add Text Tool" msgstr "Текст" -#: flatcamGUI/FlatCAMGUI.py:1933 +#: flatcamGUI/MainGUI.py:1933 msgid "Polygon Union Tool" msgstr "Сращение полигонов" -#: flatcamGUI/FlatCAMGUI.py:1933 +#: flatcamGUI/MainGUI.py:1933 msgid "Flip shape on X axis" msgstr "Отразить форму по оси X" -#: flatcamGUI/FlatCAMGUI.py:1933 +#: flatcamGUI/MainGUI.py:1933 msgid "Flip shape on Y axis" msgstr "Отразить форму по оси Y" -#: flatcamGUI/FlatCAMGUI.py:1934 +#: flatcamGUI/MainGUI.py:1934 msgid "Skew shape on X axis" msgstr "Наклонить форму по оси X" -#: flatcamGUI/FlatCAMGUI.py:1934 +#: flatcamGUI/MainGUI.py:1934 msgid "Skew shape on Y axis" msgstr "Наклонить форму по оси Y" -#: flatcamGUI/FlatCAMGUI.py:1934 +#: flatcamGUI/MainGUI.py:1934 msgid "Editor Transformation Tool" msgstr "Трансформация" -#: flatcamGUI/FlatCAMGUI.py:1935 +#: flatcamGUI/MainGUI.py:1935 msgid "Offset shape on X axis" msgstr "Смещение формы по оси X" -#: flatcamGUI/FlatCAMGUI.py:1935 +#: flatcamGUI/MainGUI.py:1935 msgid "Offset shape on Y axis" msgstr "Смещение формы по оси Y" -#: flatcamGUI/FlatCAMGUI.py:1936 flatcamGUI/FlatCAMGUI.py:2022 -#: flatcamGUI/FlatCAMGUI.py:2144 +#: flatcamGUI/MainGUI.py:1936 flatcamGUI/MainGUI.py:2022 +#: flatcamGUI/MainGUI.py:2144 msgid "Save Object and Exit Editor" msgstr "Сохранить объект и закрыть редактор" -#: flatcamGUI/FlatCAMGUI.py:1936 +#: flatcamGUI/MainGUI.py:1936 msgid "Polygon Cut Tool" msgstr "Вычитание полигонов" -#: flatcamGUI/FlatCAMGUI.py:1937 +#: flatcamGUI/MainGUI.py:1937 msgid "Rotate Geometry" msgstr "Повернуть геометрию" -#: flatcamGUI/FlatCAMGUI.py:1937 +#: flatcamGUI/MainGUI.py:1937 msgid "Finish drawing for certain tools" msgstr "Завершить рисование для некоторых инструментов" -#: flatcamGUI/FlatCAMGUI.py:1937 flatcamGUI/FlatCAMGUI.py:2022 -#: flatcamGUI/FlatCAMGUI.py:2142 +#: flatcamGUI/MainGUI.py:1937 flatcamGUI/MainGUI.py:2022 +#: flatcamGUI/MainGUI.py:2142 msgid "Abort and return to Select" msgstr "Прервать и вернуться к выбору" -#: flatcamGUI/FlatCAMGUI.py:1938 flatcamGUI/FlatCAMGUI.py:2734 +#: flatcamGUI/MainGUI.py:1938 flatcamGUI/MainGUI.py:2734 msgid "Delete Shape" msgstr "Удалить фигуру" -#: flatcamGUI/FlatCAMGUI.py:2018 +#: flatcamGUI/MainGUI.py:2018 msgid "EXCELLON EDITOR" msgstr "РЕДАКТОР EXCELLON" -#: flatcamGUI/FlatCAMGUI.py:2018 +#: flatcamGUI/MainGUI.py:2018 msgid "Copy Drill(s)" msgstr "Копировать отверстие" -#: flatcamGUI/FlatCAMGUI.py:2018 flatcamGUI/FlatCAMGUI.py:2268 +#: flatcamGUI/MainGUI.py:2018 flatcamGUI/MainGUI.py:2268 msgid "Add Drill" msgstr "Добавить сверло" -#: flatcamGUI/FlatCAMGUI.py:2019 +#: flatcamGUI/MainGUI.py:2019 msgid "Move Drill(s)" msgstr "Переместить отверстие" -#: flatcamGUI/FlatCAMGUI.py:2020 +#: flatcamGUI/MainGUI.py:2020 msgid "Add a new Tool" msgstr "Добавить инструмент" -#: flatcamGUI/FlatCAMGUI.py:2021 +#: flatcamGUI/MainGUI.py:2021 msgid "Delete Drill(s)" msgstr "Удалить отверстие" -#: flatcamGUI/FlatCAMGUI.py:2021 +#: flatcamGUI/MainGUI.py:2021 msgid "Alternate: Delete Tool(s)" msgstr "Альтернатива: Удалить инструмент(ы)" -#: flatcamGUI/FlatCAMGUI.py:2138 +#: flatcamGUI/MainGUI.py:2138 msgid "GERBER EDITOR" msgstr "РЕДАКТОР GERBER" -#: flatcamGUI/FlatCAMGUI.py:2138 +#: flatcamGUI/MainGUI.py:2138 msgid "Add Disc" msgstr "Добавить круг" -#: flatcamGUI/FlatCAMGUI.py:2138 +#: flatcamGUI/MainGUI.py:2138 msgid "Add SemiDisc" msgstr "Добавить полукруг" -#: flatcamGUI/FlatCAMGUI.py:2140 +#: flatcamGUI/MainGUI.py:2140 msgid "Within Track & Region Tools will cycle in REVERSE the bend modes" msgstr "" "В пределах трека и региона инструмент будет работать в обратном режиме изгиба" -#: flatcamGUI/FlatCAMGUI.py:2141 +#: flatcamGUI/MainGUI.py:2141 msgid "Within Track & Region Tools will cycle FORWARD the bend modes" msgstr "" "В пределах трека и региона инструмент будет циклически изменять режимы изгиба" -#: flatcamGUI/FlatCAMGUI.py:2142 +#: flatcamGUI/MainGUI.py:2142 msgid "Alternate: Delete Apertures" msgstr "Альтернатива: Удалить отверстия" -#: flatcamGUI/FlatCAMGUI.py:2143 +#: flatcamGUI/MainGUI.py:2143 msgid "Eraser Tool" msgstr "Ластик" -#: flatcamGUI/FlatCAMGUI.py:2144 +#: flatcamGUI/MainGUI.py:2144 #: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:220 msgid "Mark Area Tool" msgstr "Инструмент «Обозначить область»" -#: flatcamGUI/FlatCAMGUI.py:2144 +#: flatcamGUI/MainGUI.py:2144 msgid "Poligonize Tool" msgstr "Полигонизация" -#: flatcamGUI/FlatCAMGUI.py:2144 +#: flatcamGUI/MainGUI.py:2144 msgid "Transformation Tool" msgstr "Трансформация" -#: flatcamGUI/FlatCAMGUI.py:2161 +#: flatcamGUI/MainGUI.py:2161 msgid "Toggle Visibility" msgstr "Переключить видимость" -#: flatcamGUI/FlatCAMGUI.py:2167 +#: flatcamGUI/MainGUI.py:2167 msgid "New" msgstr "Создать" -#: flatcamGUI/FlatCAMGUI.py:2169 flatcamGUI/ObjectUI.py:450 +#: flatcamGUI/MainGUI.py:2169 flatcamGUI/ObjectUI.py:450 #: flatcamObjects/FlatCAMGerber.py:239 flatcamObjects/FlatCAMGerber.py:327 #: flatcamTools/ToolCalibration.py:631 flatcamTools/ToolCalibration.py:648 #: flatcamTools/ToolCalibration.py:815 flatcamTools/ToolCopperThieving.py:144 @@ -6861,7 +6861,7 @@ msgstr "Создать" msgid "Geometry" msgstr "Geometry" -#: flatcamGUI/FlatCAMGUI.py:2173 +#: flatcamGUI/MainGUI.py:2173 #: flatcamGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:99 #: flatcamTools/ToolAlignObjects.py:74 flatcamTools/ToolAlignObjects.py:110 #: flatcamTools/ToolCalibration.py:197 flatcamTools/ToolCalibration.py:631 @@ -6876,76 +6876,76 @@ msgstr "Geometry" msgid "Excellon" msgstr "Excellon" -#: flatcamGUI/FlatCAMGUI.py:2180 +#: flatcamGUI/MainGUI.py:2180 msgid "Grids" msgstr "Сетка" -#: flatcamGUI/FlatCAMGUI.py:2187 +#: flatcamGUI/MainGUI.py:2187 msgid "Clear Plot" msgstr "Отключить все участки" -#: flatcamGUI/FlatCAMGUI.py:2189 +#: flatcamGUI/MainGUI.py:2189 msgid "Replot" msgstr "Перерисовать" -#: flatcamGUI/FlatCAMGUI.py:2193 +#: flatcamGUI/MainGUI.py:2193 msgid "Geo Editor" msgstr "Редактор Geo" -#: flatcamGUI/FlatCAMGUI.py:2195 +#: flatcamGUI/MainGUI.py:2195 msgid "Path" msgstr "Дорожка" -#: flatcamGUI/FlatCAMGUI.py:2197 +#: flatcamGUI/MainGUI.py:2197 msgid "Rectangle" msgstr "Прямоугольник" -#: flatcamGUI/FlatCAMGUI.py:2200 +#: flatcamGUI/MainGUI.py:2200 msgid "Circle" msgstr "Круг" -#: flatcamGUI/FlatCAMGUI.py:2204 +#: flatcamGUI/MainGUI.py:2204 msgid "Arc" msgstr "Дуга" -#: flatcamGUI/FlatCAMGUI.py:2218 +#: flatcamGUI/MainGUI.py:2218 msgid "Union" msgstr "Объединение" -#: flatcamGUI/FlatCAMGUI.py:2220 +#: flatcamGUI/MainGUI.py:2220 msgid "Intersection" msgstr "Пересечение" -#: flatcamGUI/FlatCAMGUI.py:2222 +#: flatcamGUI/MainGUI.py:2222 msgid "Subtraction" msgstr "Вычитание" -#: flatcamGUI/FlatCAMGUI.py:2224 flatcamGUI/ObjectUI.py:2221 +#: flatcamGUI/MainGUI.py:2224 flatcamGUI/ObjectUI.py:2221 #: flatcamGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:56 msgid "Cut" msgstr "Вырезы" -#: flatcamGUI/FlatCAMGUI.py:2235 +#: flatcamGUI/MainGUI.py:2235 msgid "Pad" msgstr "Площадка" -#: flatcamGUI/FlatCAMGUI.py:2237 +#: flatcamGUI/MainGUI.py:2237 msgid "Pad Array" msgstr "Массив площадок" -#: flatcamGUI/FlatCAMGUI.py:2241 +#: flatcamGUI/MainGUI.py:2241 msgid "Track" msgstr "Трек" -#: flatcamGUI/FlatCAMGUI.py:2243 +#: flatcamGUI/MainGUI.py:2243 msgid "Region" msgstr "Регион" -#: flatcamGUI/FlatCAMGUI.py:2266 +#: flatcamGUI/MainGUI.py:2266 msgid "Exc Editor" msgstr "Редактор Excellon" -#: flatcamGUI/FlatCAMGUI.py:2311 +#: flatcamGUI/MainGUI.py:2311 msgid "" "Relative measurement.\n" "Reference is last click position" @@ -6953,7 +6953,7 @@ msgstr "" "Относительное измерение.\n" "Ссылка-это позиция последнего клика" -#: flatcamGUI/FlatCAMGUI.py:2317 +#: flatcamGUI/MainGUI.py:2317 msgid "" "Absolute measurement.\n" "Reference is (X=0, Y= 0) position" @@ -6961,35 +6961,35 @@ msgstr "" "Абсолютное измерение.\n" "Указатель в точке (X=0, Y= 0)" -#: flatcamGUI/FlatCAMGUI.py:2419 +#: flatcamGUI/MainGUI.py:2419 msgid "Lock Toolbars" msgstr "Заблокировать панели" -#: flatcamGUI/FlatCAMGUI.py:2505 +#: flatcamGUI/MainGUI.py:2505 msgid "FlatCAM Preferences Folder opened." msgstr "Папка настроек FlatCAM открыта." -#: flatcamGUI/FlatCAMGUI.py:2516 +#: flatcamGUI/MainGUI.py:2516 msgid "Are you sure you want to delete the GUI Settings? \n" msgstr "Вы уверены, что хотите сбросить настройки интерфейса?\n" -#: flatcamGUI/FlatCAMGUI.py:2624 +#: flatcamGUI/MainGUI.py:2624 msgid "&Cutout Tool" msgstr "&Обрезка платы" -#: flatcamGUI/FlatCAMGUI.py:2694 +#: flatcamGUI/MainGUI.py:2694 msgid "Select 'Esc'" msgstr "Выбор 'Esc'" -#: flatcamGUI/FlatCAMGUI.py:2732 +#: flatcamGUI/MainGUI.py:2732 msgid "Copy Objects" msgstr "Копировать объекты" -#: flatcamGUI/FlatCAMGUI.py:2740 +#: flatcamGUI/MainGUI.py:2740 msgid "Move Objects" msgstr "Переместить объект" -#: flatcamGUI/FlatCAMGUI.py:3363 +#: flatcamGUI/MainGUI.py:3363 msgid "" "Please first select a geometry item to be cutted\n" "then select the geometry item that will be cutted\n" @@ -7001,12 +7001,12 @@ msgstr "" "из первого пункта. В конце нажмите клавишу ~X~ или\n" "кнопка панели инструментов." -#: flatcamGUI/FlatCAMGUI.py:3370 flatcamGUI/FlatCAMGUI.py:3532 -#: flatcamGUI/FlatCAMGUI.py:3577 flatcamGUI/FlatCAMGUI.py:3597 +#: flatcamGUI/MainGUI.py:3370 flatcamGUI/MainGUI.py:3532 +#: flatcamGUI/MainGUI.py:3577 flatcamGUI/MainGUI.py:3597 msgid "Warning" msgstr "Внимание" -#: flatcamGUI/FlatCAMGUI.py:3527 +#: flatcamGUI/MainGUI.py:3527 msgid "" "Please select geometry items \n" "on which to perform Intersection Tool." @@ -7014,7 +7014,7 @@ msgstr "" "Пожалуйста, выберите элементы геометрии \n" "на котором выполняется инструмент пересечение." -#: flatcamGUI/FlatCAMGUI.py:3572 +#: flatcamGUI/MainGUI.py:3572 msgid "" "Please select geometry items \n" "on which to perform Substraction Tool." @@ -7022,7 +7022,7 @@ msgstr "" "Пожалуйста, выберите элементы геометрии \n" "на котором выполнить вычитание инструмента." -#: flatcamGUI/FlatCAMGUI.py:3592 +#: flatcamGUI/MainGUI.py:3592 msgid "" "Please select geometry items \n" "on which to perform union." @@ -7030,52 +7030,52 @@ msgstr "" "Пожалуйста, выберите элементы геометрии \n" "на котором выполнять объединение." -#: flatcamGUI/FlatCAMGUI.py:3675 flatcamGUI/FlatCAMGUI.py:3890 +#: flatcamGUI/MainGUI.py:3675 flatcamGUI/MainGUI.py:3890 msgid "Cancelled. Nothing selected to delete." msgstr "Отмена. Ничего не выбрано для удаления." -#: flatcamGUI/FlatCAMGUI.py:3759 flatcamGUI/FlatCAMGUI.py:4006 +#: flatcamGUI/MainGUI.py:3759 flatcamGUI/MainGUI.py:4006 msgid "Cancelled. Nothing selected to copy." msgstr "Отмена. Ничего не выбрано для копирования." -#: flatcamGUI/FlatCAMGUI.py:3805 flatcamGUI/FlatCAMGUI.py:4035 +#: flatcamGUI/MainGUI.py:3805 flatcamGUI/MainGUI.py:4035 msgid "Cancelled. Nothing selected to move." msgstr "Отмена. Ничего не выбрано для перемещения." -#: flatcamGUI/FlatCAMGUI.py:4061 +#: flatcamGUI/MainGUI.py:4061 msgid "New Tool ..." msgstr "Новый инструмент ..." -#: flatcamGUI/FlatCAMGUI.py:4062 flatcamTools/ToolNCC.py:924 +#: flatcamGUI/MainGUI.py:4062 flatcamTools/ToolNCC.py:924 #: flatcamTools/ToolPaint.py:850 flatcamTools/ToolSolderPaste.py:560 msgid "Enter a Tool Diameter" msgstr "Введите диаметр инструмента" -#: flatcamGUI/FlatCAMGUI.py:4074 +#: flatcamGUI/MainGUI.py:4074 msgid "Adding Tool cancelled ..." msgstr "Добавление инструмента отменено ..." -#: flatcamGUI/FlatCAMGUI.py:4088 +#: flatcamGUI/MainGUI.py:4088 msgid "Distance Tool exit..." msgstr "Измеритель закрыт ..." -#: flatcamGUI/FlatCAMGUI.py:4323 flatcamGUI/FlatCAMGUI.py:4330 +#: flatcamGUI/MainGUI.py:4323 flatcamGUI/MainGUI.py:4330 msgid "Idle." msgstr "Нет заданий." -#: flatcamGUI/FlatCAMGUI.py:4361 +#: flatcamGUI/MainGUI.py:4361 msgid "Application started ..." msgstr "Приложение запущено ..." -#: flatcamGUI/FlatCAMGUI.py:4362 +#: flatcamGUI/MainGUI.py:4362 msgid "Hello!" msgstr "Приветствую!" -#: flatcamGUI/FlatCAMGUI.py:4424 +#: flatcamGUI/MainGUI.py:4424 msgid "Open Project ..." msgstr "Открыть проект..." -#: flatcamGUI/FlatCAMGUI.py:4450 +#: flatcamGUI/MainGUI.py:4450 msgid "Exit" msgstr "Выход" diff --git a/locale_template/strings.pot b/locale_template/strings.pot index 3ac81693..794bfb80 100644 --- a/locale_template/strings.pot +++ b/locale_template/strings.pot @@ -62,7 +62,7 @@ msgstr "" #: FlatCAMBookmark.py:342 FlatCAMDB.py:663 FlatCAMDB.py:709 FlatCAMDB.py:2125 #: FlatCAMDB.py:2171 flatcamEditors/FlatCAMExcEditor.py:1023 #: flatcamEditors/FlatCAMExcEditor.py:1091 flatcamEditors/FlatCAMTextEditor.py:223 -#: flatcamGUI/FlatCAMGUI.py:3443 flatcamGUI/FlatCAMGUI.py:3659 flatcamGUI/FlatCAMGUI.py:3874 +#: flatcamGUI/MainGUI.py:3443 flatcamGUI/MainGUI.py:3659 flatcamGUI/MainGUI.py:3874 #: flatcamObjects/ObjectCollection.py:126 flatcamTools/ToolFilm.py:754 #: flatcamTools/ToolFilm.py:900 flatcamTools/ToolImage.py:247 flatcamTools/ToolMove.py:269 #: flatcamTools/ToolPcbWizard.py:301 flatcamTools/ToolPcbWizard.py:324 @@ -108,18 +108,18 @@ msgstr "" msgid "Do you want to save the edited object?" msgstr "" -#: FlatCAMApp.py:2226 flatcamGUI/FlatCAMGUI.py:2288 +#: FlatCAMApp.py:2226 flatcamGUI/MainGUI.py:2288 msgid "Close Editor" msgstr "" #: FlatCAMApp.py:2229 FlatCAMApp.py:3518 FlatCAMApp.py:6085 FlatCAMApp.py:7345 -#: FlatCAMTranslation.py:109 FlatCAMTranslation.py:207 flatcamGUI/FlatCAMGUI.py:2519 +#: FlatCAMTranslation.py:109 FlatCAMTranslation.py:207 flatcamGUI/MainGUI.py:2519 #: flatcamGUI/preferences/PreferencesUIManager.py:1122 msgid "Yes" msgstr "" #: FlatCAMApp.py:2230 FlatCAMApp.py:3519 FlatCAMApp.py:6086 FlatCAMApp.py:7346 -#: FlatCAMTranslation.py:110 FlatCAMTranslation.py:208 flatcamGUI/FlatCAMGUI.py:2520 +#: FlatCAMTranslation.py:110 FlatCAMTranslation.py:208 flatcamGUI/MainGUI.py:2520 #: flatcamGUI/preferences/PreferencesUIManager.py:1123 #: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:164 #: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:150 flatcamTools/ToolNCC.py:182 @@ -128,7 +128,7 @@ msgid "No" msgstr "" #: FlatCAMApp.py:2231 FlatCAMApp.py:3520 FlatCAMApp.py:4478 FlatCAMApp.py:5103 -#: FlatCAMApp.py:7347 FlatCAMDB.py:128 FlatCAMDB.py:1689 flatcamGUI/FlatCAMGUI.py:1347 +#: FlatCAMApp.py:7347 FlatCAMDB.py:128 FlatCAMDB.py:1689 flatcamGUI/MainGUI.py:1347 msgid "Cancel" msgstr "" @@ -251,7 +251,7 @@ msgstr "" msgid "Plotting" msgstr "" -#: FlatCAMApp.py:3090 flatcamGUI/FlatCAMGUI.py:545 +#: FlatCAMApp.py:3090 flatcamGUI/MainGUI.py:545 msgid "About FlatCAM" msgstr "" @@ -357,7 +357,7 @@ msgstr "" msgid "Corrections" msgstr "" -#: FlatCAMApp.py:3455 FlatCAMApp.py:3464 flatcamGUI/FlatCAMGUI.py:527 +#: FlatCAMApp.py:3455 FlatCAMApp.py:3464 flatcamGUI/MainGUI.py:527 msgid "Bookmarks Manager" msgstr "" @@ -377,7 +377,7 @@ msgstr "" msgid "Alternative website" msgstr "" -#: FlatCAMApp.py:3508 flatcamGUI/FlatCAMGUI.py:4267 +#: FlatCAMApp.py:3508 flatcamGUI/MainGUI.py:4267 msgid "Application is saving the project. Please wait ..." msgstr "" @@ -558,8 +558,8 @@ msgstr "" #: flatcamEditors/FlatCAMGeoEditor.py:4363 flatcamEditors/FlatCAMGrbEditor.py:1087 #: flatcamEditors/FlatCAMGrbEditor.py:1204 flatcamEditors/FlatCAMGrbEditor.py:1490 #: flatcamEditors/FlatCAMGrbEditor.py:1759 flatcamEditors/FlatCAMGrbEditor.py:4622 -#: flatcamEditors/FlatCAMGrbEditor.py:4637 flatcamGUI/FlatCAMGUI.py:3424 -#: flatcamGUI/FlatCAMGUI.py:3436 flatcamTools/ToolAlignObjects.py:393 +#: flatcamEditors/FlatCAMGrbEditor.py:4637 flatcamGUI/MainGUI.py:3424 +#: flatcamGUI/MainGUI.py:3436 flatcamTools/ToolAlignObjects.py:393 #: flatcamTools/ToolAlignObjects.py:415 msgid "Done." msgstr "" @@ -702,12 +702,12 @@ msgstr "" msgid "Skew on Y axis done." msgstr "" -#: FlatCAMApp.py:6497 FlatCAMApp.py:6544 flatcamGUI/FlatCAMGUI.py:503 -#: flatcamGUI/FlatCAMGUI.py:1728 +#: FlatCAMApp.py:6497 FlatCAMApp.py:6544 flatcamGUI/MainGUI.py:503 +#: flatcamGUI/MainGUI.py:1728 msgid "Select All" msgstr "" -#: FlatCAMApp.py:6501 FlatCAMApp.py:6548 flatcamGUI/FlatCAMGUI.py:505 +#: FlatCAMApp.py:6501 FlatCAMApp.py:6548 flatcamGUI/MainGUI.py:505 msgid "Deselect All" msgstr "" @@ -719,7 +719,7 @@ msgstr "" msgid "Objects selection is cleared." msgstr "" -#: FlatCAMApp.py:6594 flatcamGUI/FlatCAMGUI.py:1721 +#: FlatCAMApp.py:6594 flatcamGUI/MainGUI.py:1721 msgid "Grid On/Off" msgstr "" @@ -734,9 +734,9 @@ msgid "Add" msgstr "" #: FlatCAMApp.py:6608 flatcamEditors/FlatCAMGrbEditor.py:2588 -#: flatcamEditors/FlatCAMGrbEditor.py:2736 flatcamGUI/FlatCAMGUI.py:751 -#: flatcamGUI/FlatCAMGUI.py:1074 flatcamGUI/FlatCAMGUI.py:2141 flatcamGUI/FlatCAMGUI.py:2284 -#: flatcamGUI/FlatCAMGUI.py:2777 flatcamGUI/ObjectUI.py:1623 +#: flatcamEditors/FlatCAMGrbEditor.py:2736 flatcamGUI/MainGUI.py:751 +#: flatcamGUI/MainGUI.py:1074 flatcamGUI/MainGUI.py:2141 flatcamGUI/MainGUI.py:2284 +#: flatcamGUI/MainGUI.py:2777 flatcamGUI/ObjectUI.py:1623 #: flatcamObjects/FlatCAMGeometry.py:505 flatcamTools/ToolNCC.py:316 #: flatcamTools/ToolNCC.py:637 flatcamTools/ToolPaint.py:299 flatcamTools/ToolPaint.py:682 #: flatcamTools/ToolSolderPaste.py:128 flatcamTools/ToolSolderPaste.py:600 @@ -813,8 +813,8 @@ msgstr "" msgid "New Project created" msgstr "" -#: FlatCAMApp.py:7519 FlatCAMApp.py:7523 flatcamGUI/FlatCAMGUI.py:836 -#: flatcamGUI/FlatCAMGUI.py:2544 +#: FlatCAMApp.py:7519 FlatCAMApp.py:7523 flatcamGUI/MainGUI.py:836 +#: flatcamGUI/MainGUI.py:2544 msgid "Open Gerber" msgstr "" @@ -829,8 +829,8 @@ msgstr "" msgid "Opening Gerber file." msgstr "" -#: FlatCAMApp.py:7557 FlatCAMApp.py:7561 flatcamGUI/FlatCAMGUI.py:838 -#: flatcamGUI/FlatCAMGUI.py:2546 +#: FlatCAMApp.py:7557 FlatCAMApp.py:7561 flatcamGUI/MainGUI.py:838 +#: flatcamGUI/MainGUI.py:2546 msgid "Open Excellon" msgstr "" @@ -846,7 +846,7 @@ msgstr "" msgid "Opening G-Code file." msgstr "" -#: FlatCAMApp.py:7632 FlatCAMApp.py:7635 flatcamGUI/FlatCAMGUI.py:1730 +#: FlatCAMApp.py:7632 FlatCAMApp.py:7635 flatcamGUI/MainGUI.py:1730 msgid "Open Project" msgstr "" @@ -1000,7 +1000,7 @@ msgstr "" msgid "Save Project As ..." msgstr "" -#: FlatCAMApp.py:8551 flatcamGUI/FlatCAMGUI.py:1134 flatcamGUI/FlatCAMGUI.py:2176 +#: FlatCAMApp.py:8551 flatcamGUI/MainGUI.py:1134 flatcamGUI/MainGUI.py:2176 msgid "Project" msgstr "" @@ -1233,7 +1233,7 @@ msgstr "" msgid "Clear Recent files" msgstr "" -#: FlatCAMApp.py:10065 flatcamGUI/FlatCAMGUI.py:1363 +#: FlatCAMApp.py:10065 flatcamGUI/MainGUI.py:1363 msgid "Shortcut Key List" msgstr "" @@ -1359,47 +1359,47 @@ msgstr "" msgid "Working ..." msgstr "" -#: FlatCAMApp.py:10558 flatcamGUI/FlatCAMGUI.py:703 +#: FlatCAMApp.py:10558 flatcamGUI/MainGUI.py:703 msgid "Red" msgstr "" -#: FlatCAMApp.py:10560 flatcamGUI/FlatCAMGUI.py:706 +#: FlatCAMApp.py:10560 flatcamGUI/MainGUI.py:706 msgid "Blue" msgstr "" -#: FlatCAMApp.py:10563 flatcamGUI/FlatCAMGUI.py:709 +#: FlatCAMApp.py:10563 flatcamGUI/MainGUI.py:709 msgid "Yellow" msgstr "" -#: FlatCAMApp.py:10565 flatcamGUI/FlatCAMGUI.py:712 +#: FlatCAMApp.py:10565 flatcamGUI/MainGUI.py:712 msgid "Green" msgstr "" -#: FlatCAMApp.py:10567 flatcamGUI/FlatCAMGUI.py:715 +#: FlatCAMApp.py:10567 flatcamGUI/MainGUI.py:715 msgid "Purple" msgstr "" -#: FlatCAMApp.py:10569 flatcamGUI/FlatCAMGUI.py:718 +#: FlatCAMApp.py:10569 flatcamGUI/MainGUI.py:718 msgid "Brown" msgstr "" -#: FlatCAMApp.py:10571 FlatCAMApp.py:10627 flatcamGUI/FlatCAMGUI.py:721 +#: FlatCAMApp.py:10571 FlatCAMApp.py:10627 flatcamGUI/MainGUI.py:721 msgid "White" msgstr "" -#: FlatCAMApp.py:10573 flatcamGUI/FlatCAMGUI.py:724 +#: FlatCAMApp.py:10573 flatcamGUI/MainGUI.py:724 msgid "Black" msgstr "" -#: FlatCAMApp.py:10576 flatcamGUI/FlatCAMGUI.py:729 +#: FlatCAMApp.py:10576 flatcamGUI/MainGUI.py:729 msgid "Custom" msgstr "" -#: FlatCAMApp.py:10586 flatcamGUI/FlatCAMGUI.py:737 +#: FlatCAMApp.py:10586 flatcamGUI/MainGUI.py:737 msgid "Default" msgstr "" -#: FlatCAMApp.py:10610 flatcamGUI/FlatCAMGUI.py:734 +#: FlatCAMApp.py:10610 flatcamGUI/MainGUI.py:734 msgid "Opacity" msgstr "" @@ -1513,7 +1513,7 @@ msgstr "" msgid "Export FlatCAM Bookmarks" msgstr "" -#: FlatCAMBookmark.py:293 flatcamGUI/FlatCAMGUI.py:524 +#: FlatCAMBookmark.py:293 flatcamGUI/MainGUI.py:524 msgid "Bookmarks" msgstr "" @@ -2719,7 +2719,7 @@ msgid "" "by selecting a row in the tool table." msgstr "" -#: flatcamEditors/FlatCAMExcEditor.py:1650 flatcamGUI/FlatCAMGUI.py:2019 +#: flatcamEditors/FlatCAMExcEditor.py:1650 flatcamGUI/MainGUI.py:2019 msgid "Resize Drill(s)" msgstr "" @@ -2743,8 +2743,8 @@ msgstr "" msgid "Resize drill(s)" msgstr "" -#: flatcamEditors/FlatCAMExcEditor.py:1699 flatcamGUI/FlatCAMGUI.py:2018 -#: flatcamGUI/FlatCAMGUI.py:2270 +#: flatcamEditors/FlatCAMExcEditor.py:1699 flatcamGUI/MainGUI.py:2018 +#: flatcamGUI/MainGUI.py:2270 msgid "Add Drill Array" msgstr "" @@ -2997,7 +2997,7 @@ msgid "" "Save and reedit Excellon if you need to add this tool. " msgstr "" -#: flatcamEditors/FlatCAMExcEditor.py:2579 flatcamGUI/FlatCAMGUI.py:4071 +#: flatcamEditors/FlatCAMExcEditor.py:2579 flatcamGUI/MainGUI.py:4071 msgid "Added new tool with dia" msgstr "" @@ -3097,7 +3097,7 @@ msgid "Full Buffer" msgstr "" #: flatcamEditors/FlatCAMGeoEditor.py:132 flatcamEditors/FlatCAMGeoEditor.py:3017 -#: flatcamGUI/FlatCAMGUI.py:1928 +#: flatcamGUI/MainGUI.py:1928 #: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:190 msgid "Buffer Tool" msgstr "" @@ -3113,7 +3113,7 @@ msgstr "" msgid "Font" msgstr "" -#: flatcamEditors/FlatCAMGeoEditor.py:323 flatcamGUI/FlatCAMGUI.py:2208 +#: flatcamEditors/FlatCAMGeoEditor.py:323 flatcamGUI/MainGUI.py:2208 msgid "Text" msgstr "" @@ -3121,8 +3121,8 @@ msgstr "" msgid "Text Tool" msgstr "" -#: flatcamEditors/FlatCAMGeoEditor.py:405 flatcamGUI/FlatCAMGUI.py:511 -#: flatcamGUI/FlatCAMGUI.py:1158 flatcamGUI/ObjectUI.py:818 flatcamGUI/ObjectUI.py:1662 +#: flatcamEditors/FlatCAMGeoEditor.py:405 flatcamGUI/MainGUI.py:511 +#: flatcamGUI/MainGUI.py:1158 flatcamGUI/ObjectUI.py:818 flatcamGUI/ObjectUI.py:1662 #: flatcamObjects/FlatCAMExcellon.py:742 flatcamObjects/FlatCAMExcellon.py:1084 #: flatcamObjects/FlatCAMGeometry.py:759 flatcamTools/ToolNCC.py:331 #: flatcamTools/ToolNCC.py:797 flatcamTools/ToolPaint.py:314 flatcamTools/ToolPaint.py:767 @@ -3154,12 +3154,12 @@ msgstr "" msgid "Contour:" msgstr "" -#: flatcamEditors/FlatCAMGeoEditor.py:529 flatcamGUI/FlatCAMGUI.py:2212 +#: flatcamEditors/FlatCAMGeoEditor.py:529 flatcamGUI/MainGUI.py:2212 msgid "Paint" msgstr "" -#: flatcamEditors/FlatCAMGeoEditor.py:547 flatcamGUI/FlatCAMGUI.py:924 -#: flatcamGUI/FlatCAMGUI.py:2628 flatcamGUI/ObjectUI.py:2139 flatcamTools/ToolPaint.py:43 +#: flatcamEditors/FlatCAMGeoEditor.py:547 flatcamGUI/MainGUI.py:924 +#: flatcamGUI/MainGUI.py:2628 flatcamGUI/ObjectUI.py:2139 flatcamTools/ToolPaint.py:43 #: flatcamTools/ToolPaint.py:738 msgid "Paint Tool" msgstr "" @@ -3180,7 +3180,7 @@ msgstr "" #: flatcamEditors/FlatCAMGeoEditor.py:607 flatcamEditors/FlatCAMGeoEditor.py:991 #: flatcamEditors/FlatCAMGrbEditor.py:5306 flatcamEditors/FlatCAMGrbEditor.py:5703 -#: flatcamGUI/FlatCAMGUI.py:945 flatcamGUI/FlatCAMGUI.py:2649 +#: flatcamGUI/MainGUI.py:945 flatcamGUI/MainGUI.py:2649 #: flatcamTools/ToolTransform.py:460 msgid "Transform Tool" msgstr "" @@ -3198,8 +3198,8 @@ msgid "Skew/Shear" msgstr "" #: flatcamEditors/FlatCAMGeoEditor.py:610 flatcamEditors/FlatCAMGrbEditor.py:2680 -#: flatcamEditors/FlatCAMGrbEditor.py:5309 flatcamGUI/FlatCAMGUI.py:1063 -#: flatcamGUI/FlatCAMGUI.py:2140 flatcamGUI/FlatCAMGUI.py:2255 flatcamGUI/FlatCAMGUI.py:2767 +#: flatcamEditors/FlatCAMGrbEditor.py:5309 flatcamGUI/MainGUI.py:1063 +#: flatcamGUI/MainGUI.py:2140 flatcamGUI/MainGUI.py:2255 flatcamGUI/MainGUI.py:2767 #: flatcamGUI/ObjectUI.py:125 flatcamGUI/preferences/tools/ToolsTransformPrefGroupUI.py:95 #: flatcamTools/ToolTransform.py:26 msgid "Scale" @@ -3211,7 +3211,7 @@ msgid "Mirror (Flip)" msgstr "" #: flatcamEditors/FlatCAMGeoEditor.py:625 flatcamEditors/FlatCAMGrbEditor.py:5324 -#: flatcamGUI/FlatCAMGUI.py:856 flatcamGUI/FlatCAMGUI.py:2564 +#: flatcamGUI/MainGUI.py:856 flatcamGUI/MainGUI.py:2564 msgid "Editor" msgstr "" @@ -3795,7 +3795,7 @@ msgstr "" msgid "Line" msgstr "" -#: flatcamEditors/FlatCAMGeoEditor.py:3591 flatcamGUI/FlatCAMGUI.py:2202 +#: flatcamEditors/FlatCAMGeoEditor.py:3591 flatcamGUI/MainGUI.py:2202 #: flatcamGUI/ObjectUI.py:2074 #: flatcamGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:218 #: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:328 @@ -3824,9 +3824,9 @@ msgstr "" msgid "with diameter" msgstr "" -#: flatcamEditors/FlatCAMGeoEditor.py:4509 flatcamGUI/FlatCAMGUI.py:3753 -#: flatcamGUI/FlatCAMGUI.py:3799 flatcamGUI/FlatCAMGUI.py:3817 flatcamGUI/FlatCAMGUI.py:3961 -#: flatcamGUI/FlatCAMGUI.py:4000 flatcamGUI/FlatCAMGUI.py:4012 flatcamGUI/FlatCAMGUI.py:4029 +#: flatcamEditors/FlatCAMGeoEditor.py:4509 flatcamGUI/MainGUI.py:3753 +#: flatcamGUI/MainGUI.py:3799 flatcamGUI/MainGUI.py:3817 flatcamGUI/MainGUI.py:3961 +#: flatcamGUI/MainGUI.py:4000 flatcamGUI/MainGUI.py:4012 flatcamGUI/MainGUI.py:4029 msgid "Click on target point." msgstr "" @@ -4014,7 +4014,7 @@ msgstr "" msgid "Done. Apertures copied." msgstr "" -#: flatcamEditors/FlatCAMGrbEditor.py:2455 flatcamGUI/FlatCAMGUI.py:2233 +#: flatcamEditors/FlatCAMGrbEditor.py:2455 flatcamGUI/MainGUI.py:2233 #: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:27 msgid "Gerber Editor" msgstr "" @@ -4155,9 +4155,9 @@ msgid "" "corner" msgstr "" -#: flatcamEditors/FlatCAMGrbEditor.py:2640 flatcamGUI/FlatCAMGUI.py:1061 -#: flatcamGUI/FlatCAMGUI.py:2138 flatcamGUI/FlatCAMGUI.py:2210 flatcamGUI/FlatCAMGUI.py:2253 -#: flatcamGUI/FlatCAMGUI.py:2765 +#: flatcamEditors/FlatCAMGrbEditor.py:2640 flatcamGUI/MainGUI.py:1061 +#: flatcamGUI/MainGUI.py:2138 flatcamGUI/MainGUI.py:2210 flatcamGUI/MainGUI.py:2253 +#: flatcamGUI/MainGUI.py:2765 #: flatcamGUI/preferences/tools/ToolsTransformPrefGroupUI.py:200 #: flatcamTools/ToolTransform.py:29 msgid "Buffer" @@ -4226,8 +4226,8 @@ msgstr "" msgid "Clear all the markings." msgstr "" -#: flatcamEditors/FlatCAMGrbEditor.py:2764 flatcamGUI/FlatCAMGUI.py:1046 -#: flatcamGUI/FlatCAMGUI.py:2138 flatcamGUI/FlatCAMGUI.py:2750 +#: flatcamEditors/FlatCAMGrbEditor.py:2764 flatcamGUI/MainGUI.py:1046 +#: flatcamGUI/MainGUI.py:2138 flatcamGUI/MainGUI.py:2750 msgid "Add Pad Array" msgstr "" @@ -4502,245 +4502,245 @@ msgstr "" msgid "Code Editor content copied to clipboard ..." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:78 flatcamGUI/FlatCAMGUI.py:80 flatcamGUI/FlatCAMGUI.py:2163 +#: flatcamGUI/MainGUI.py:78 flatcamGUI/MainGUI.py:80 flatcamGUI/MainGUI.py:2163 msgid "Toggle Panel" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:90 +#: flatcamGUI/MainGUI.py:90 msgid "File" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:95 +#: flatcamGUI/MainGUI.py:95 msgid "&New Project ...\tCtrl+N" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:97 +#: flatcamGUI/MainGUI.py:97 msgid "Will create a new, blank project" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:102 +#: flatcamGUI/MainGUI.py:102 msgid "&New" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:106 +#: flatcamGUI/MainGUI.py:106 msgid "Geometry\tN" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:108 +#: flatcamGUI/MainGUI.py:108 msgid "Will create a new, empty Geometry Object." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:111 +#: flatcamGUI/MainGUI.py:111 msgid "Gerber\tB" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:113 +#: flatcamGUI/MainGUI.py:113 msgid "Will create a new, empty Gerber Object." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:116 +#: flatcamGUI/MainGUI.py:116 msgid "Excellon\tL" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:118 +#: flatcamGUI/MainGUI.py:118 msgid "Will create a new, empty Excellon Object." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:123 +#: flatcamGUI/MainGUI.py:123 msgid "Document\tD" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:125 +#: flatcamGUI/MainGUI.py:125 msgid "Will create a new, empty Document Object." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:129 flatcamGUI/FlatCAMGUI.py:4420 +#: flatcamGUI/MainGUI.py:129 flatcamGUI/MainGUI.py:4420 #: flatcamTools/ToolPcbWizard.py:62 flatcamTools/ToolPcbWizard.py:69 msgid "Open" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:134 +#: flatcamGUI/MainGUI.py:134 msgid "Open &Project ..." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:140 flatcamGUI/FlatCAMGUI.py:4430 +#: flatcamGUI/MainGUI.py:140 flatcamGUI/MainGUI.py:4430 msgid "Open &Gerber ...\tCtrl+G" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:145 flatcamGUI/FlatCAMGUI.py:4435 +#: flatcamGUI/MainGUI.py:145 flatcamGUI/MainGUI.py:4435 msgid "Open &Excellon ...\tCtrl+E" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:150 flatcamGUI/FlatCAMGUI.py:4440 +#: flatcamGUI/MainGUI.py:150 flatcamGUI/MainGUI.py:4440 msgid "Open G-&Code ..." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:157 +#: flatcamGUI/MainGUI.py:157 msgid "Open Config ..." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:162 +#: flatcamGUI/MainGUI.py:162 msgid "Recent projects" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:164 +#: flatcamGUI/MainGUI.py:164 msgid "Recent files" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:167 flatcamGUI/FlatCAMGUI.py:753 flatcamGUI/FlatCAMGUI.py:1339 +#: flatcamGUI/MainGUI.py:167 flatcamGUI/MainGUI.py:753 flatcamGUI/MainGUI.py:1339 msgid "Save" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:171 +#: flatcamGUI/MainGUI.py:171 msgid "&Save Project ...\tCtrl+S" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:176 +#: flatcamGUI/MainGUI.py:176 msgid "Save Project &As ...\tCtrl+Shift+S" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:191 +#: flatcamGUI/MainGUI.py:191 msgid "Scripting" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:195 flatcamGUI/FlatCAMGUI.py:903 flatcamGUI/FlatCAMGUI.py:2607 +#: flatcamGUI/MainGUI.py:195 flatcamGUI/MainGUI.py:903 flatcamGUI/MainGUI.py:2607 msgid "New Script ..." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:197 flatcamGUI/FlatCAMGUI.py:905 flatcamGUI/FlatCAMGUI.py:2609 +#: flatcamGUI/MainGUI.py:197 flatcamGUI/MainGUI.py:905 flatcamGUI/MainGUI.py:2609 msgid "Open Script ..." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:199 +#: flatcamGUI/MainGUI.py:199 msgid "Open Example ..." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:201 flatcamGUI/FlatCAMGUI.py:907 flatcamGUI/FlatCAMGUI.py:2611 -#: flatcamGUI/FlatCAMGUI.py:4409 +#: flatcamGUI/MainGUI.py:201 flatcamGUI/MainGUI.py:907 flatcamGUI/MainGUI.py:2611 +#: flatcamGUI/MainGUI.py:4409 msgid "Run Script ..." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:203 flatcamGUI/FlatCAMGUI.py:4411 +#: flatcamGUI/MainGUI.py:203 flatcamGUI/MainGUI.py:4411 msgid "" "Will run the opened Tcl Script thus\n" "enabling the automation of certain\n" "functions of FlatCAM." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:218 +#: flatcamGUI/MainGUI.py:218 msgid "Import" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:220 +#: flatcamGUI/MainGUI.py:220 msgid "&SVG as Geometry Object ..." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:223 +#: flatcamGUI/MainGUI.py:223 msgid "&SVG as Gerber Object ..." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:228 +#: flatcamGUI/MainGUI.py:228 msgid "&DXF as Geometry Object ..." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:231 +#: flatcamGUI/MainGUI.py:231 msgid "&DXF as Gerber Object ..." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:235 +#: flatcamGUI/MainGUI.py:235 msgid "HPGL2 as Geometry Object ..." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:241 +#: flatcamGUI/MainGUI.py:241 msgid "Export" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:245 +#: flatcamGUI/MainGUI.py:245 msgid "Export &SVG ..." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:249 +#: flatcamGUI/MainGUI.py:249 msgid "Export DXF ..." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:255 +#: flatcamGUI/MainGUI.py:255 msgid "Export &PNG ..." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:257 +#: flatcamGUI/MainGUI.py:257 msgid "" "Will export an image in PNG format,\n" "the saved image will contain the visual \n" "information currently in FlatCAM Plot Area." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:266 +#: flatcamGUI/MainGUI.py:266 msgid "Export &Excellon ..." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:268 +#: flatcamGUI/MainGUI.py:268 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 "" -#: flatcamGUI/FlatCAMGUI.py:275 +#: flatcamGUI/MainGUI.py:275 msgid "Export &Gerber ..." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:277 +#: flatcamGUI/MainGUI.py:277 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 "" -#: flatcamGUI/FlatCAMGUI.py:287 +#: flatcamGUI/MainGUI.py:287 msgid "Backup" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:292 +#: flatcamGUI/MainGUI.py:292 msgid "Import Preferences from file ..." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:298 +#: flatcamGUI/MainGUI.py:298 msgid "Export Preferences to file ..." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:306 flatcamGUI/preferences/PreferencesUIManager.py:1119 +#: flatcamGUI/MainGUI.py:306 flatcamGUI/preferences/PreferencesUIManager.py:1119 msgid "Save Preferences" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:312 flatcamGUI/FlatCAMGUI.py:1730 +#: flatcamGUI/MainGUI.py:312 flatcamGUI/MainGUI.py:1730 msgid "Print (PDF)" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:320 +#: flatcamGUI/MainGUI.py:320 msgid "E&xit" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:328 flatcamGUI/FlatCAMGUI.py:747 flatcamGUI/FlatCAMGUI.py:2286 +#: flatcamGUI/MainGUI.py:328 flatcamGUI/MainGUI.py:747 flatcamGUI/MainGUI.py:2286 msgid "Edit" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:332 +#: flatcamGUI/MainGUI.py:332 msgid "Edit Object\tE" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:334 +#: flatcamGUI/MainGUI.py:334 msgid "Close Editor\tCtrl+S" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:343 +#: flatcamGUI/MainGUI.py:343 msgid "Conversion" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:345 +#: flatcamGUI/MainGUI.py:345 msgid "&Join Geo/Gerber/Exc -> Geo" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:347 +#: flatcamGUI/MainGUI.py:347 msgid "" "Merge a selection of objects, which can be of type:\n" "- Gerber\n" @@ -4749,1308 +4749,1308 @@ msgid "" "into a new combo Geometry object." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:354 +#: flatcamGUI/MainGUI.py:354 msgid "Join Excellon(s) -> Excellon" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:356 +#: flatcamGUI/MainGUI.py:356 msgid "Merge a selection of Excellon objects into a new combo Excellon object." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:359 +#: flatcamGUI/MainGUI.py:359 msgid "Join Gerber(s) -> Gerber" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:361 +#: flatcamGUI/MainGUI.py:361 msgid "Merge a selection of Gerber objects into a new combo Gerber object." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:366 +#: flatcamGUI/MainGUI.py:366 msgid "Convert Single to MultiGeo" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:368 +#: flatcamGUI/MainGUI.py:368 msgid "" "Will convert a Geometry object from single_geometry type\n" "to a multi_geometry type." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:372 +#: flatcamGUI/MainGUI.py:372 msgid "Convert Multi to SingleGeo" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:374 +#: flatcamGUI/MainGUI.py:374 msgid "" "Will convert a Geometry object from multi_geometry type\n" "to a single_geometry type." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:381 +#: flatcamGUI/MainGUI.py:381 msgid "Convert Any to Geo" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:384 +#: flatcamGUI/MainGUI.py:384 msgid "Convert Any to Gerber" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:390 +#: flatcamGUI/MainGUI.py:390 msgid "&Copy\tCtrl+C" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:395 +#: flatcamGUI/MainGUI.py:395 msgid "&Delete\tDEL" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:400 +#: flatcamGUI/MainGUI.py:400 msgid "Se&t Origin\tO" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:402 +#: flatcamGUI/MainGUI.py:402 msgid "Move to Origin\tShift+O" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:405 +#: flatcamGUI/MainGUI.py:405 msgid "Jump to Location\tJ" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:407 +#: flatcamGUI/MainGUI.py:407 msgid "Locate in Object\tShift+J" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:412 +#: flatcamGUI/MainGUI.py:412 msgid "Toggle Units\tQ" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:414 +#: flatcamGUI/MainGUI.py:414 msgid "&Select All\tCtrl+A" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:419 +#: flatcamGUI/MainGUI.py:419 msgid "&Preferences\tShift+P" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:425 flatcamTools/ToolProperties.py:155 +#: flatcamGUI/MainGUI.py:425 flatcamTools/ToolProperties.py:155 msgid "Options" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:427 +#: flatcamGUI/MainGUI.py:427 msgid "&Rotate Selection\tShift+(R)" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:432 +#: flatcamGUI/MainGUI.py:432 msgid "&Skew on X axis\tShift+X" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:434 +#: flatcamGUI/MainGUI.py:434 msgid "S&kew on Y axis\tShift+Y" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:439 +#: flatcamGUI/MainGUI.py:439 msgid "Flip on &X axis\tX" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:441 +#: flatcamGUI/MainGUI.py:441 msgid "Flip on &Y axis\tY" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:446 +#: flatcamGUI/MainGUI.py:446 msgid "View source\tAlt+S" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:448 +#: flatcamGUI/MainGUI.py:448 msgid "Tools DataBase\tCtrl+D" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:455 flatcamGUI/FlatCAMGUI.py:2183 +#: flatcamGUI/MainGUI.py:455 flatcamGUI/MainGUI.py:2183 msgid "View" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:457 +#: flatcamGUI/MainGUI.py:457 msgid "Enable all plots\tAlt+1" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:459 +#: flatcamGUI/MainGUI.py:459 msgid "Disable all plots\tAlt+2" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:461 +#: flatcamGUI/MainGUI.py:461 msgid "Disable non-selected\tAlt+3" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:465 +#: flatcamGUI/MainGUI.py:465 msgid "&Zoom Fit\tV" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:467 +#: flatcamGUI/MainGUI.py:467 msgid "&Zoom In\t=" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:469 +#: flatcamGUI/MainGUI.py:469 msgid "&Zoom Out\t-" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:474 +#: flatcamGUI/MainGUI.py:474 msgid "Redraw All\tF5" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:478 +#: flatcamGUI/MainGUI.py:478 msgid "Toggle Code Editor\tShift+E" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:481 +#: flatcamGUI/MainGUI.py:481 msgid "&Toggle FullScreen\tAlt+F10" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:483 +#: flatcamGUI/MainGUI.py:483 msgid "&Toggle Plot Area\tCtrl+F10" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:485 +#: flatcamGUI/MainGUI.py:485 msgid "&Toggle Project/Sel/Tool\t`" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:489 +#: flatcamGUI/MainGUI.py:489 msgid "&Toggle Grid Snap\tG" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:491 +#: flatcamGUI/MainGUI.py:491 msgid "&Toggle Grid Lines\tAlt+G" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:493 +#: flatcamGUI/MainGUI.py:493 msgid "&Toggle Axis\tShift+G" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:495 +#: flatcamGUI/MainGUI.py:495 msgid "Toggle Workspace\tShift+W" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:500 +#: flatcamGUI/MainGUI.py:500 msgid "Objects" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:514 +#: flatcamGUI/MainGUI.py:514 msgid "&Command Line\tS" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:519 +#: flatcamGUI/MainGUI.py:519 msgid "Help" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:521 +#: flatcamGUI/MainGUI.py:521 msgid "Online Help\tF1" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:531 +#: flatcamGUI/MainGUI.py:531 msgid "Report a bug" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:534 +#: flatcamGUI/MainGUI.py:534 msgid "Excellon Specification" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:536 +#: flatcamGUI/MainGUI.py:536 msgid "Gerber Specification" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:541 +#: flatcamGUI/MainGUI.py:541 msgid "Shortcuts List\tF3" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:543 +#: flatcamGUI/MainGUI.py:543 msgid "YouTube Channel\tF4" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:554 +#: flatcamGUI/MainGUI.py:554 msgid "Add Circle\tO" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:557 +#: flatcamGUI/MainGUI.py:557 msgid "Add Arc\tA" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:560 +#: flatcamGUI/MainGUI.py:560 msgid "Add Rectangle\tR" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:563 +#: flatcamGUI/MainGUI.py:563 msgid "Add Polygon\tN" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:566 +#: flatcamGUI/MainGUI.py:566 msgid "Add Path\tP" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:569 +#: flatcamGUI/MainGUI.py:569 msgid "Add Text\tT" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:572 +#: flatcamGUI/MainGUI.py:572 msgid "Polygon Union\tU" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:574 +#: flatcamGUI/MainGUI.py:574 msgid "Polygon Intersection\tE" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:576 +#: flatcamGUI/MainGUI.py:576 msgid "Polygon Subtraction\tS" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:580 +#: flatcamGUI/MainGUI.py:580 msgid "Cut Path\tX" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:584 +#: flatcamGUI/MainGUI.py:584 msgid "Copy Geom\tC" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:586 +#: flatcamGUI/MainGUI.py:586 msgid "Delete Shape\tDEL" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:590 flatcamGUI/FlatCAMGUI.py:677 +#: flatcamGUI/MainGUI.py:590 flatcamGUI/MainGUI.py:677 msgid "Move\tM" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:592 +#: flatcamGUI/MainGUI.py:592 msgid "Buffer Tool\tB" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:595 +#: flatcamGUI/MainGUI.py:595 msgid "Paint Tool\tI" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:598 +#: flatcamGUI/MainGUI.py:598 msgid "Transform Tool\tAlt+R" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:602 +#: flatcamGUI/MainGUI.py:602 msgid "Toggle Corner Snap\tK" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:608 +#: flatcamGUI/MainGUI.py:608 msgid ">Excellon Editor<" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:612 +#: flatcamGUI/MainGUI.py:612 msgid "Add Drill Array\tA" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:614 +#: flatcamGUI/MainGUI.py:614 msgid "Add Drill\tD" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:618 +#: flatcamGUI/MainGUI.py:618 msgid "Add Slot Array\tQ" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:620 +#: flatcamGUI/MainGUI.py:620 msgid "Add Slot\tW" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:624 +#: flatcamGUI/MainGUI.py:624 msgid "Resize Drill(S)\tR" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:627 flatcamGUI/FlatCAMGUI.py:671 +#: flatcamGUI/MainGUI.py:627 flatcamGUI/MainGUI.py:671 msgid "Copy\tC" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:629 flatcamGUI/FlatCAMGUI.py:673 +#: flatcamGUI/MainGUI.py:629 flatcamGUI/MainGUI.py:673 msgid "Delete\tDEL" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:634 +#: flatcamGUI/MainGUI.py:634 msgid "Move Drill(s)\tM" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:639 +#: flatcamGUI/MainGUI.py:639 msgid ">Gerber Editor<" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:643 +#: flatcamGUI/MainGUI.py:643 msgid "Add Pad\tP" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:645 +#: flatcamGUI/MainGUI.py:645 msgid "Add Pad Array\tA" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:647 +#: flatcamGUI/MainGUI.py:647 msgid "Add Track\tT" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:649 +#: flatcamGUI/MainGUI.py:649 msgid "Add Region\tN" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:653 +#: flatcamGUI/MainGUI.py:653 msgid "Poligonize\tAlt+N" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:655 +#: flatcamGUI/MainGUI.py:655 msgid "Add SemiDisc\tE" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:657 +#: flatcamGUI/MainGUI.py:657 msgid "Add Disc\tD" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:659 +#: flatcamGUI/MainGUI.py:659 msgid "Buffer\tB" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:661 +#: flatcamGUI/MainGUI.py:661 msgid "Scale\tS" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:663 +#: flatcamGUI/MainGUI.py:663 msgid "Mark Area\tAlt+A" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:665 +#: flatcamGUI/MainGUI.py:665 msgid "Eraser\tCtrl+E" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:667 +#: flatcamGUI/MainGUI.py:667 msgid "Transform\tAlt+R" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:694 +#: flatcamGUI/MainGUI.py:694 msgid "Enable Plot" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:696 +#: flatcamGUI/MainGUI.py:696 msgid "Disable Plot" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:700 +#: flatcamGUI/MainGUI.py:700 msgid "Set Color" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:742 +#: flatcamGUI/MainGUI.py:742 msgid "Generate CNC" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:744 +#: flatcamGUI/MainGUI.py:744 msgid "View Source" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:749 flatcamGUI/FlatCAMGUI.py:863 flatcamGUI/FlatCAMGUI.py:1072 -#: flatcamGUI/FlatCAMGUI.py:2138 flatcamGUI/FlatCAMGUI.py:2282 flatcamGUI/FlatCAMGUI.py:2572 -#: flatcamGUI/FlatCAMGUI.py:2775 flatcamGUI/ObjectUI.py:1617 +#: flatcamGUI/MainGUI.py:749 flatcamGUI/MainGUI.py:863 flatcamGUI/MainGUI.py:1072 +#: flatcamGUI/MainGUI.py:2138 flatcamGUI/MainGUI.py:2282 flatcamGUI/MainGUI.py:2572 +#: flatcamGUI/MainGUI.py:2775 flatcamGUI/ObjectUI.py:1617 #: flatcamObjects/FlatCAMGeometry.py:502 flatcamTools/ToolPanelize.py:540 #: flatcamTools/ToolPanelize.py:567 flatcamTools/ToolPanelize.py:660 #: flatcamTools/ToolPanelize.py:689 flatcamTools/ToolPanelize.py:751 msgid "Copy" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:757 flatcamGUI/FlatCAMGUI.py:2295 +#: flatcamGUI/MainGUI.py:757 flatcamGUI/MainGUI.py:2295 #: flatcamTools/ToolProperties.py:31 msgid "Properties" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:786 +#: flatcamGUI/MainGUI.py:786 msgid "File Toolbar" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:790 +#: flatcamGUI/MainGUI.py:790 msgid "Edit Toolbar" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:794 +#: flatcamGUI/MainGUI.py:794 msgid "View Toolbar" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:798 +#: flatcamGUI/MainGUI.py:798 msgid "Shell Toolbar" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:802 +#: flatcamGUI/MainGUI.py:802 msgid "Tools Toolbar" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:806 +#: flatcamGUI/MainGUI.py:806 msgid "Excellon Editor Toolbar" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:812 +#: flatcamGUI/MainGUI.py:812 msgid "Geometry Editor Toolbar" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:816 +#: flatcamGUI/MainGUI.py:816 msgid "Gerber Editor Toolbar" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:820 +#: flatcamGUI/MainGUI.py:820 msgid "Grid Toolbar" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:841 flatcamGUI/FlatCAMGUI.py:2549 +#: flatcamGUI/MainGUI.py:841 flatcamGUI/MainGUI.py:2549 msgid "Open project" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:843 flatcamGUI/FlatCAMGUI.py:2551 +#: flatcamGUI/MainGUI.py:843 flatcamGUI/MainGUI.py:2551 msgid "Save project" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:849 flatcamGUI/FlatCAMGUI.py:2557 +#: flatcamGUI/MainGUI.py:849 flatcamGUI/MainGUI.py:2557 msgid "New Blank Geometry" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:851 flatcamGUI/FlatCAMGUI.py:2559 +#: flatcamGUI/MainGUI.py:851 flatcamGUI/MainGUI.py:2559 msgid "New Blank Gerber" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:853 flatcamGUI/FlatCAMGUI.py:2561 +#: flatcamGUI/MainGUI.py:853 flatcamGUI/MainGUI.py:2561 msgid "New Blank Excellon" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:858 flatcamGUI/FlatCAMGUI.py:2567 +#: flatcamGUI/MainGUI.py:858 flatcamGUI/MainGUI.py:2567 msgid "Save Object and close the Editor" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:865 flatcamGUI/FlatCAMGUI.py:2574 +#: flatcamGUI/MainGUI.py:865 flatcamGUI/MainGUI.py:2574 msgid "&Delete" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:868 flatcamGUI/FlatCAMGUI.py:1729 flatcamGUI/FlatCAMGUI.py:1935 -#: flatcamGUI/FlatCAMGUI.py:2577 flatcamTools/ToolDistance.py:35 +#: flatcamGUI/MainGUI.py:868 flatcamGUI/MainGUI.py:1729 flatcamGUI/MainGUI.py:1935 +#: flatcamGUI/MainGUI.py:2577 flatcamTools/ToolDistance.py:35 #: flatcamTools/ToolDistance.py:195 msgid "Distance Tool" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:870 flatcamGUI/FlatCAMGUI.py:2579 +#: flatcamGUI/MainGUI.py:870 flatcamGUI/MainGUI.py:2579 msgid "Distance Min Tool" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:872 flatcamGUI/FlatCAMGUI.py:1722 flatcamGUI/FlatCAMGUI.py:2581 +#: flatcamGUI/MainGUI.py:872 flatcamGUI/MainGUI.py:1722 flatcamGUI/MainGUI.py:2581 msgid "Set Origin" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:874 +#: flatcamGUI/MainGUI.py:874 msgid "Move to Origin" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:877 flatcamGUI/FlatCAMGUI.py:2583 +#: flatcamGUI/MainGUI.py:877 flatcamGUI/MainGUI.py:2583 msgid "Jump to Location" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:879 flatcamGUI/FlatCAMGUI.py:1734 flatcamGUI/FlatCAMGUI.py:2585 +#: flatcamGUI/MainGUI.py:879 flatcamGUI/MainGUI.py:1734 flatcamGUI/MainGUI.py:2585 msgid "Locate in Object" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:885 flatcamGUI/FlatCAMGUI.py:2591 +#: flatcamGUI/MainGUI.py:885 flatcamGUI/MainGUI.py:2591 msgid "&Replot" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:887 flatcamGUI/FlatCAMGUI.py:2593 +#: flatcamGUI/MainGUI.py:887 flatcamGUI/MainGUI.py:2593 msgid "&Clear plot" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:889 flatcamGUI/FlatCAMGUI.py:1725 flatcamGUI/FlatCAMGUI.py:2595 +#: flatcamGUI/MainGUI.py:889 flatcamGUI/MainGUI.py:1725 flatcamGUI/MainGUI.py:2595 msgid "Zoom In" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:891 flatcamGUI/FlatCAMGUI.py:1725 flatcamGUI/FlatCAMGUI.py:2597 +#: flatcamGUI/MainGUI.py:891 flatcamGUI/MainGUI.py:1725 flatcamGUI/MainGUI.py:2597 msgid "Zoom Out" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:893 flatcamGUI/FlatCAMGUI.py:1724 flatcamGUI/FlatCAMGUI.py:2185 -#: flatcamGUI/FlatCAMGUI.py:2599 +#: flatcamGUI/MainGUI.py:893 flatcamGUI/MainGUI.py:1724 flatcamGUI/MainGUI.py:2185 +#: flatcamGUI/MainGUI.py:2599 msgid "Zoom Fit" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:901 flatcamGUI/FlatCAMGUI.py:2605 +#: flatcamGUI/MainGUI.py:901 flatcamGUI/MainGUI.py:2605 msgid "&Command Line" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:913 flatcamGUI/FlatCAMGUI.py:2617 +#: flatcamGUI/MainGUI.py:913 flatcamGUI/MainGUI.py:2617 msgid "2Sided Tool" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:915 flatcamGUI/FlatCAMGUI.py:1740 flatcamGUI/FlatCAMGUI.py:2619 +#: flatcamGUI/MainGUI.py:915 flatcamGUI/MainGUI.py:1740 flatcamGUI/MainGUI.py:2619 msgid "Align Objects Tool" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:917 flatcamGUI/FlatCAMGUI.py:1741 flatcamGUI/FlatCAMGUI.py:2621 +#: flatcamGUI/MainGUI.py:917 flatcamGUI/MainGUI.py:1741 flatcamGUI/MainGUI.py:2621 #: flatcamTools/ToolExtractDrills.py:393 msgid "Extract Drills Tool" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:920 flatcamGUI/ObjectUI.py:596 flatcamTools/ToolCutOut.py:440 +#: flatcamGUI/MainGUI.py:920 flatcamGUI/ObjectUI.py:596 flatcamTools/ToolCutOut.py:440 msgid "Cutout Tool" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:922 flatcamGUI/FlatCAMGUI.py:2626 flatcamGUI/ObjectUI.py:574 +#: flatcamGUI/MainGUI.py:922 flatcamGUI/MainGUI.py:2626 flatcamGUI/ObjectUI.py:574 #: flatcamGUI/ObjectUI.py:2157 flatcamTools/ToolNCC.py:974 msgid "NCC Tool" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:928 flatcamGUI/FlatCAMGUI.py:2632 +#: flatcamGUI/MainGUI.py:928 flatcamGUI/MainGUI.py:2632 msgid "Panel Tool" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:930 flatcamGUI/FlatCAMGUI.py:2634 flatcamTools/ToolFilm.py:586 +#: flatcamGUI/MainGUI.py:930 flatcamGUI/MainGUI.py:2634 flatcamTools/ToolFilm.py:586 msgid "Film Tool" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:932 flatcamGUI/FlatCAMGUI.py:2636 +#: flatcamGUI/MainGUI.py:932 flatcamGUI/MainGUI.py:2636 #: flatcamTools/ToolSolderPaste.py:553 msgid "SolderPaste Tool" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:934 flatcamGUI/FlatCAMGUI.py:2638 flatcamTools/ToolSub.py:35 +#: flatcamGUI/MainGUI.py:934 flatcamGUI/MainGUI.py:2638 flatcamTools/ToolSub.py:35 msgid "Subtract Tool" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:936 flatcamGUI/FlatCAMGUI.py:2640 +#: flatcamGUI/MainGUI.py:936 flatcamGUI/MainGUI.py:2640 #: flatcamTools/ToolRulesCheck.py:616 msgid "Rules Tool" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:938 flatcamGUI/FlatCAMGUI.py:1743 flatcamGUI/FlatCAMGUI.py:2642 +#: flatcamGUI/MainGUI.py:938 flatcamGUI/MainGUI.py:1743 flatcamGUI/MainGUI.py:2642 #: flatcamTools/ToolOptimal.py:33 flatcamTools/ToolOptimal.py:307 msgid "Optimal Tool" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:943 flatcamGUI/FlatCAMGUI.py:1740 flatcamGUI/FlatCAMGUI.py:2647 +#: flatcamGUI/MainGUI.py:943 flatcamGUI/MainGUI.py:1740 flatcamGUI/MainGUI.py:2647 msgid "Calculators Tool" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:947 flatcamGUI/FlatCAMGUI.py:1744 flatcamGUI/FlatCAMGUI.py:2651 +#: flatcamGUI/MainGUI.py:947 flatcamGUI/MainGUI.py:1744 flatcamGUI/MainGUI.py:2651 #: flatcamTools/ToolQRCode.py:43 flatcamTools/ToolQRCode.py:382 msgid "QRCode Tool" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:949 flatcamGUI/FlatCAMGUI.py:2653 +#: flatcamGUI/MainGUI.py:949 flatcamGUI/MainGUI.py:2653 #: flatcamTools/ToolCopperThieving.py:39 flatcamTools/ToolCopperThieving.py:568 msgid "Copper Thieving Tool" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:952 flatcamGUI/FlatCAMGUI.py:1741 flatcamGUI/FlatCAMGUI.py:2656 +#: flatcamGUI/MainGUI.py:952 flatcamGUI/MainGUI.py:1741 flatcamGUI/MainGUI.py:2656 #: flatcamTools/ToolFiducials.py:33 flatcamTools/ToolFiducials.py:395 msgid "Fiducials Tool" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:954 flatcamGUI/FlatCAMGUI.py:2658 +#: flatcamGUI/MainGUI.py:954 flatcamGUI/MainGUI.py:2658 #: flatcamTools/ToolCalibration.py:37 flatcamTools/ToolCalibration.py:759 msgid "Calibration Tool" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:956 flatcamGUI/FlatCAMGUI.py:1741 flatcamGUI/FlatCAMGUI.py:2660 +#: flatcamGUI/MainGUI.py:956 flatcamGUI/MainGUI.py:1741 flatcamGUI/MainGUI.py:2660 msgid "Punch Gerber Tool" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:958 flatcamGUI/FlatCAMGUI.py:2662 +#: flatcamGUI/MainGUI.py:958 flatcamGUI/MainGUI.py:2662 #: flatcamTools/ToolInvertGerber.py:31 msgid "Invert Gerber Tool" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:964 flatcamGUI/FlatCAMGUI.py:990 flatcamGUI/FlatCAMGUI.py:1042 -#: flatcamGUI/FlatCAMGUI.py:2668 flatcamGUI/FlatCAMGUI.py:2746 +#: flatcamGUI/MainGUI.py:964 flatcamGUI/MainGUI.py:990 flatcamGUI/MainGUI.py:1042 +#: flatcamGUI/MainGUI.py:2668 flatcamGUI/MainGUI.py:2746 msgid "Select" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:966 flatcamGUI/FlatCAMGUI.py:2670 +#: flatcamGUI/MainGUI.py:966 flatcamGUI/MainGUI.py:2670 msgid "Add Drill Hole" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:968 flatcamGUI/FlatCAMGUI.py:2672 +#: flatcamGUI/MainGUI.py:968 flatcamGUI/MainGUI.py:2672 msgid "Add Drill Hole Array" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:970 flatcamGUI/FlatCAMGUI.py:2020 flatcamGUI/FlatCAMGUI.py:2273 -#: flatcamGUI/FlatCAMGUI.py:2676 +#: flatcamGUI/MainGUI.py:970 flatcamGUI/MainGUI.py:2020 flatcamGUI/MainGUI.py:2273 +#: flatcamGUI/MainGUI.py:2676 msgid "Add Slot" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:972 flatcamGUI/FlatCAMGUI.py:2019 flatcamGUI/FlatCAMGUI.py:2275 -#: flatcamGUI/FlatCAMGUI.py:2678 +#: flatcamGUI/MainGUI.py:972 flatcamGUI/MainGUI.py:2019 flatcamGUI/MainGUI.py:2275 +#: flatcamGUI/MainGUI.py:2678 msgid "Add Slot Array" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:974 flatcamGUI/FlatCAMGUI.py:2278 flatcamGUI/FlatCAMGUI.py:2674 +#: flatcamGUI/MainGUI.py:974 flatcamGUI/MainGUI.py:2278 flatcamGUI/MainGUI.py:2674 msgid "Resize Drill" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:978 flatcamGUI/FlatCAMGUI.py:2682 +#: flatcamGUI/MainGUI.py:978 flatcamGUI/MainGUI.py:2682 msgid "Copy Drill" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:980 flatcamGUI/FlatCAMGUI.py:2684 +#: flatcamGUI/MainGUI.py:980 flatcamGUI/MainGUI.py:2684 msgid "Delete Drill" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:984 flatcamGUI/FlatCAMGUI.py:2688 +#: flatcamGUI/MainGUI.py:984 flatcamGUI/MainGUI.py:2688 msgid "Move Drill" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:992 flatcamGUI/FlatCAMGUI.py:2696 +#: flatcamGUI/MainGUI.py:992 flatcamGUI/MainGUI.py:2696 msgid "Add Circle" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:994 flatcamGUI/FlatCAMGUI.py:2698 +#: flatcamGUI/MainGUI.py:994 flatcamGUI/MainGUI.py:2698 msgid "Add Arc" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:996 flatcamGUI/FlatCAMGUI.py:2700 +#: flatcamGUI/MainGUI.py:996 flatcamGUI/MainGUI.py:2700 msgid "Add Rectangle" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1000 flatcamGUI/FlatCAMGUI.py:2704 +#: flatcamGUI/MainGUI.py:1000 flatcamGUI/MainGUI.py:2704 msgid "Add Path" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1002 flatcamGUI/FlatCAMGUI.py:2706 +#: flatcamGUI/MainGUI.py:1002 flatcamGUI/MainGUI.py:2706 msgid "Add Polygon" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1005 flatcamGUI/FlatCAMGUI.py:2709 +#: flatcamGUI/MainGUI.py:1005 flatcamGUI/MainGUI.py:2709 msgid "Add Text" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1007 flatcamGUI/FlatCAMGUI.py:2711 +#: flatcamGUI/MainGUI.py:1007 flatcamGUI/MainGUI.py:2711 msgid "Add Buffer" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1009 flatcamGUI/FlatCAMGUI.py:2713 +#: flatcamGUI/MainGUI.py:1009 flatcamGUI/MainGUI.py:2713 msgid "Paint Shape" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1011 flatcamGUI/FlatCAMGUI.py:1068 flatcamGUI/FlatCAMGUI.py:2214 -#: flatcamGUI/FlatCAMGUI.py:2259 flatcamGUI/FlatCAMGUI.py:2715 flatcamGUI/FlatCAMGUI.py:2771 +#: flatcamGUI/MainGUI.py:1011 flatcamGUI/MainGUI.py:1068 flatcamGUI/MainGUI.py:2214 +#: flatcamGUI/MainGUI.py:2259 flatcamGUI/MainGUI.py:2715 flatcamGUI/MainGUI.py:2771 msgid "Eraser" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1015 flatcamGUI/FlatCAMGUI.py:2719 +#: flatcamGUI/MainGUI.py:1015 flatcamGUI/MainGUI.py:2719 msgid "Polygon Union" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1017 flatcamGUI/FlatCAMGUI.py:2721 +#: flatcamGUI/MainGUI.py:1017 flatcamGUI/MainGUI.py:2721 msgid "Polygon Explode" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1020 flatcamGUI/FlatCAMGUI.py:2724 +#: flatcamGUI/MainGUI.py:1020 flatcamGUI/MainGUI.py:2724 msgid "Polygon Intersection" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1022 flatcamGUI/FlatCAMGUI.py:2726 +#: flatcamGUI/MainGUI.py:1022 flatcamGUI/MainGUI.py:2726 msgid "Polygon Subtraction" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1026 flatcamGUI/FlatCAMGUI.py:2730 +#: flatcamGUI/MainGUI.py:1026 flatcamGUI/MainGUI.py:2730 msgid "Cut Path" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1028 +#: flatcamGUI/MainGUI.py:1028 msgid "Copy Shape(s)" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1031 +#: flatcamGUI/MainGUI.py:1031 msgid "Delete Shape '-'" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1033 flatcamGUI/FlatCAMGUI.py:1076 flatcamGUI/FlatCAMGUI.py:2226 -#: flatcamGUI/FlatCAMGUI.py:2263 flatcamGUI/FlatCAMGUI.py:2736 flatcamGUI/FlatCAMGUI.py:2779 +#: flatcamGUI/MainGUI.py:1033 flatcamGUI/MainGUI.py:1076 flatcamGUI/MainGUI.py:2226 +#: flatcamGUI/MainGUI.py:2263 flatcamGUI/MainGUI.py:2736 flatcamGUI/MainGUI.py:2779 #: flatcamGUI/ObjectUI.py:109 msgid "Transformations" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1036 +#: flatcamGUI/MainGUI.py:1036 msgid "Move Objects " msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1044 flatcamGUI/FlatCAMGUI.py:2139 flatcamGUI/FlatCAMGUI.py:2748 +#: flatcamGUI/MainGUI.py:1044 flatcamGUI/MainGUI.py:2139 flatcamGUI/MainGUI.py:2748 msgid "Add Pad" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1048 flatcamGUI/FlatCAMGUI.py:2140 flatcamGUI/FlatCAMGUI.py:2752 +#: flatcamGUI/MainGUI.py:1048 flatcamGUI/MainGUI.py:2140 flatcamGUI/MainGUI.py:2752 msgid "Add Track" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1050 flatcamGUI/FlatCAMGUI.py:2139 flatcamGUI/FlatCAMGUI.py:2754 +#: flatcamGUI/MainGUI.py:1050 flatcamGUI/MainGUI.py:2139 flatcamGUI/MainGUI.py:2754 msgid "Add Region" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1052 flatcamGUI/FlatCAMGUI.py:2245 flatcamGUI/FlatCAMGUI.py:2756 +#: flatcamGUI/MainGUI.py:1052 flatcamGUI/MainGUI.py:2245 flatcamGUI/MainGUI.py:2756 msgid "Poligonize" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1055 flatcamGUI/FlatCAMGUI.py:2247 flatcamGUI/FlatCAMGUI.py:2759 +#: flatcamGUI/MainGUI.py:1055 flatcamGUI/MainGUI.py:2247 flatcamGUI/MainGUI.py:2759 msgid "SemiDisc" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1057 flatcamGUI/FlatCAMGUI.py:2249 flatcamGUI/FlatCAMGUI.py:2761 +#: flatcamGUI/MainGUI.py:1057 flatcamGUI/MainGUI.py:2249 flatcamGUI/MainGUI.py:2761 msgid "Disc" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1065 flatcamGUI/FlatCAMGUI.py:2257 flatcamGUI/FlatCAMGUI.py:2769 +#: flatcamGUI/MainGUI.py:1065 flatcamGUI/MainGUI.py:2257 flatcamGUI/MainGUI.py:2769 msgid "Mark Area" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1079 flatcamGUI/FlatCAMGUI.py:2139 flatcamGUI/FlatCAMGUI.py:2230 -#: flatcamGUI/FlatCAMGUI.py:2293 flatcamGUI/FlatCAMGUI.py:2782 flatcamTools/ToolMove.py:27 +#: flatcamGUI/MainGUI.py:1079 flatcamGUI/MainGUI.py:2139 flatcamGUI/MainGUI.py:2230 +#: flatcamGUI/MainGUI.py:2293 flatcamGUI/MainGUI.py:2782 flatcamTools/ToolMove.py:27 msgid "Move" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1087 flatcamGUI/FlatCAMGUI.py:2791 +#: flatcamGUI/MainGUI.py:1087 flatcamGUI/MainGUI.py:2791 msgid "Snap to grid" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1090 flatcamGUI/FlatCAMGUI.py:2794 +#: flatcamGUI/MainGUI.py:1090 flatcamGUI/MainGUI.py:2794 msgid "Grid X snapping distance" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1095 flatcamGUI/FlatCAMGUI.py:2799 +#: flatcamGUI/MainGUI.py:1095 flatcamGUI/MainGUI.py:2799 msgid "Grid Y snapping distance" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1101 flatcamGUI/FlatCAMGUI.py:2805 +#: flatcamGUI/MainGUI.py:1101 flatcamGUI/MainGUI.py:2805 msgid "" "When active, value on Grid_X\n" "is copied to the Grid_Y value." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1108 flatcamGUI/FlatCAMGUI.py:2812 +#: flatcamGUI/MainGUI.py:1108 flatcamGUI/MainGUI.py:2812 msgid "Snap to corner" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1112 flatcamGUI/FlatCAMGUI.py:2816 +#: flatcamGUI/MainGUI.py:1112 flatcamGUI/MainGUI.py:2816 #: flatcamGUI/preferences/general/GeneralAPPSetGroupUI.py:78 msgid "Max. magnet distance" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1149 +#: flatcamGUI/MainGUI.py:1149 msgid "Selected" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1177 flatcamGUI/FlatCAMGUI.py:1185 +#: flatcamGUI/MainGUI.py:1177 flatcamGUI/MainGUI.py:1185 msgid "Plot Area" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1212 +#: flatcamGUI/MainGUI.py:1212 msgid "General" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1227 flatcamTools/ToolCopperThieving.py:74 +#: flatcamGUI/MainGUI.py:1227 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 "" -#: flatcamGUI/FlatCAMGUI.py:1237 flatcamTools/ToolDblSided.py:92 +#: flatcamGUI/MainGUI.py:1237 flatcamTools/ToolDblSided.py:92 msgid "EXCELLON" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1247 flatcamTools/ToolDblSided.py:120 +#: flatcamGUI/MainGUI.py:1247 flatcamTools/ToolDblSided.py:120 msgid "GEOMETRY" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1257 +#: flatcamGUI/MainGUI.py:1257 msgid "CNC-JOB" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1266 flatcamGUI/ObjectUI.py:563 flatcamGUI/ObjectUI.py:2132 +#: flatcamGUI/MainGUI.py:1266 flatcamGUI/ObjectUI.py:563 flatcamGUI/ObjectUI.py:2132 msgid "TOOLS" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1275 +#: flatcamGUI/MainGUI.py:1275 msgid "TOOLS 2" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1285 +#: flatcamGUI/MainGUI.py:1285 msgid "UTILITIES" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1302 +#: flatcamGUI/MainGUI.py:1302 #: flatcamGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:192 msgid "Restore Defaults" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1305 +#: flatcamGUI/MainGUI.py:1305 msgid "" "Restore the entire set of default values\n" "to the initial values loaded after first launch." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1310 +#: flatcamGUI/MainGUI.py:1310 msgid "Open Pref Folder" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1313 +#: flatcamGUI/MainGUI.py:1313 msgid "Open the folder where FlatCAM save the preferences files." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1317 flatcamGUI/FlatCAMGUI.py:2517 +#: flatcamGUI/MainGUI.py:1317 flatcamGUI/MainGUI.py:2517 msgid "Clear GUI Settings" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1321 +#: flatcamGUI/MainGUI.py:1321 msgid "" "Clear the GUI settings for FlatCAM,\n" "such as: layout, gui state, style, hdpi support etc." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1332 +#: flatcamGUI/MainGUI.py:1332 msgid "Apply" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1335 +#: flatcamGUI/MainGUI.py:1335 msgid "Apply the current preferences without saving to a file." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1342 +#: flatcamGUI/MainGUI.py:1342 msgid "" "Save the current settings in the 'current_defaults' file\n" "which is the file storing the working default preferences." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1350 +#: flatcamGUI/MainGUI.py:1350 msgid "Will not save the changes and will close the preferences window." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1719 +#: flatcamGUI/MainGUI.py:1719 msgid "SHOW SHORTCUT LIST" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1719 +#: flatcamGUI/MainGUI.py:1719 msgid "Switch to Project Tab" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1719 +#: flatcamGUI/MainGUI.py:1719 msgid "Switch to Selected Tab" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1720 +#: flatcamGUI/MainGUI.py:1720 msgid "Switch to Tool Tab" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1721 +#: flatcamGUI/MainGUI.py:1721 msgid "New Gerber" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1721 +#: flatcamGUI/MainGUI.py:1721 msgid "Edit Object (if selected)" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1721 +#: flatcamGUI/MainGUI.py:1721 msgid "Jump to Coordinates" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1722 +#: flatcamGUI/MainGUI.py:1722 msgid "New Excellon" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1722 +#: flatcamGUI/MainGUI.py:1722 msgid "Move Obj" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1722 +#: flatcamGUI/MainGUI.py:1722 msgid "New Geometry" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1722 +#: flatcamGUI/MainGUI.py:1722 msgid "Change Units" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1723 +#: flatcamGUI/MainGUI.py:1723 msgid "Open Properties Tool" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1723 +#: flatcamGUI/MainGUI.py:1723 msgid "Rotate by 90 degree CW" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1723 +#: flatcamGUI/MainGUI.py:1723 msgid "Shell Toggle" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1724 +#: flatcamGUI/MainGUI.py:1724 msgid "Add a Tool (when in Geometry Selected Tab or in Tools NCC or Tools Paint)" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1725 +#: flatcamGUI/MainGUI.py:1725 msgid "Flip on X_axis" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1725 +#: flatcamGUI/MainGUI.py:1725 msgid "Flip on Y_axis" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1728 +#: flatcamGUI/MainGUI.py:1728 msgid "Copy Obj" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1728 +#: flatcamGUI/MainGUI.py:1728 msgid "Open Tools Database" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1729 +#: flatcamGUI/MainGUI.py:1729 msgid "Open Excellon File" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1729 +#: flatcamGUI/MainGUI.py:1729 msgid "Open Gerber File" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1729 +#: flatcamGUI/MainGUI.py:1729 msgid "New Project" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1730 flatcamTools/ToolPDF.py:42 +#: flatcamGUI/MainGUI.py:1730 flatcamTools/ToolPDF.py:42 msgid "PDF Import Tool" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1730 +#: flatcamGUI/MainGUI.py:1730 msgid "Save Project" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1730 +#: flatcamGUI/MainGUI.py:1730 msgid "Toggle Plot Area" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1733 +#: flatcamGUI/MainGUI.py:1733 msgid "Copy Obj_Name" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1734 +#: flatcamGUI/MainGUI.py:1734 msgid "Toggle Code Editor" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1734 +#: flatcamGUI/MainGUI.py:1734 msgid "Toggle the axis" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1734 flatcamGUI/FlatCAMGUI.py:1933 flatcamGUI/FlatCAMGUI.py:2020 -#: flatcamGUI/FlatCAMGUI.py:2142 +#: flatcamGUI/MainGUI.py:1734 flatcamGUI/MainGUI.py:1933 flatcamGUI/MainGUI.py:2020 +#: flatcamGUI/MainGUI.py:2142 msgid "Distance Minimum Tool" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1735 +#: flatcamGUI/MainGUI.py:1735 msgid "Open Preferences Window" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1736 +#: flatcamGUI/MainGUI.py:1736 msgid "Rotate by 90 degree CCW" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1736 +#: flatcamGUI/MainGUI.py:1736 msgid "Run a Script" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1736 +#: flatcamGUI/MainGUI.py:1736 msgid "Toggle the workspace" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1736 +#: flatcamGUI/MainGUI.py:1736 msgid "Skew on X axis" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1737 +#: flatcamGUI/MainGUI.py:1737 msgid "Skew on Y axis" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1740 +#: flatcamGUI/MainGUI.py:1740 msgid "2-Sided PCB Tool" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1740 +#: flatcamGUI/MainGUI.py:1740 msgid "Transformations Tool" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1742 +#: flatcamGUI/MainGUI.py:1742 msgid "Solder Paste Dispensing Tool" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1743 +#: flatcamGUI/MainGUI.py:1743 msgid "Film PCB Tool" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1743 +#: flatcamGUI/MainGUI.py:1743 msgid "Non-Copper Clearing Tool" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1744 +#: flatcamGUI/MainGUI.py:1744 msgid "Paint Area Tool" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1744 +#: flatcamGUI/MainGUI.py:1744 msgid "Rules Check Tool" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1745 +#: flatcamGUI/MainGUI.py:1745 msgid "View File Source" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1746 +#: flatcamGUI/MainGUI.py:1746 msgid "Cutout PCB Tool" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1746 +#: flatcamGUI/MainGUI.py:1746 msgid "Enable all Plots" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1746 +#: flatcamGUI/MainGUI.py:1746 msgid "Disable all Plots" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1746 +#: flatcamGUI/MainGUI.py:1746 msgid "Disable Non-selected Plots" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1747 +#: flatcamGUI/MainGUI.py:1747 msgid "Toggle Full Screen" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1750 +#: flatcamGUI/MainGUI.py:1750 msgid "Abort current task (gracefully)" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1753 +#: flatcamGUI/MainGUI.py:1753 msgid "Save Project As" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1754 +#: flatcamGUI/MainGUI.py:1754 msgid "Paste Special. Will convert a Windows path style to the one required in Tcl Shell" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1757 +#: flatcamGUI/MainGUI.py:1757 msgid "Open Online Manual" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1758 +#: flatcamGUI/MainGUI.py:1758 msgid "Open Online Tutorials" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1758 +#: flatcamGUI/MainGUI.py:1758 msgid "Refresh Plots" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1758 flatcamTools/ToolSolderPaste.py:509 +#: flatcamGUI/MainGUI.py:1758 flatcamTools/ToolSolderPaste.py:509 msgid "Delete Object" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1758 +#: flatcamGUI/MainGUI.py:1758 msgid "Alternate: Delete Tool" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1759 +#: flatcamGUI/MainGUI.py:1759 msgid "(left to Key_1)Toggle Notebook Area (Left Side)" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1759 +#: flatcamGUI/MainGUI.py:1759 msgid "En(Dis)able Obj Plot" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1760 +#: flatcamGUI/MainGUI.py:1760 msgid "Deselects all objects" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1774 +#: flatcamGUI/MainGUI.py:1774 msgid "Editor Shortcut list" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1928 +#: flatcamGUI/MainGUI.py:1928 msgid "GEOMETRY EDITOR" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1928 +#: flatcamGUI/MainGUI.py:1928 msgid "Draw an Arc" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1928 +#: flatcamGUI/MainGUI.py:1928 msgid "Copy Geo Item" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1929 +#: flatcamGUI/MainGUI.py:1929 msgid "Within Add Arc will toogle the ARC direction: CW or CCW" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1929 +#: flatcamGUI/MainGUI.py:1929 msgid "Polygon Intersection Tool" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1930 +#: flatcamGUI/MainGUI.py:1930 msgid "Geo Paint Tool" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1930 flatcamGUI/FlatCAMGUI.py:2019 flatcamGUI/FlatCAMGUI.py:2139 +#: flatcamGUI/MainGUI.py:1930 flatcamGUI/MainGUI.py:2019 flatcamGUI/MainGUI.py:2139 msgid "Jump to Location (x, y)" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1930 +#: flatcamGUI/MainGUI.py:1930 msgid "Toggle Corner Snap" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1930 +#: flatcamGUI/MainGUI.py:1930 msgid "Move Geo Item" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1931 +#: flatcamGUI/MainGUI.py:1931 msgid "Within Add Arc will cycle through the ARC modes" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1931 +#: flatcamGUI/MainGUI.py:1931 msgid "Draw a Polygon" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1931 +#: flatcamGUI/MainGUI.py:1931 msgid "Draw a Circle" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1932 +#: flatcamGUI/MainGUI.py:1932 msgid "Draw a Path" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1932 +#: flatcamGUI/MainGUI.py:1932 msgid "Draw Rectangle" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1932 +#: flatcamGUI/MainGUI.py:1932 msgid "Polygon Subtraction Tool" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1932 +#: flatcamGUI/MainGUI.py:1932 msgid "Add Text Tool" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1933 +#: flatcamGUI/MainGUI.py:1933 msgid "Polygon Union Tool" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1933 +#: flatcamGUI/MainGUI.py:1933 msgid "Flip shape on X axis" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1933 +#: flatcamGUI/MainGUI.py:1933 msgid "Flip shape on Y axis" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1934 +#: flatcamGUI/MainGUI.py:1934 msgid "Skew shape on X axis" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1934 +#: flatcamGUI/MainGUI.py:1934 msgid "Skew shape on Y axis" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1934 +#: flatcamGUI/MainGUI.py:1934 msgid "Editor Transformation Tool" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1935 +#: flatcamGUI/MainGUI.py:1935 msgid "Offset shape on X axis" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1935 +#: flatcamGUI/MainGUI.py:1935 msgid "Offset shape on Y axis" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1936 flatcamGUI/FlatCAMGUI.py:2022 flatcamGUI/FlatCAMGUI.py:2144 +#: flatcamGUI/MainGUI.py:1936 flatcamGUI/MainGUI.py:2022 flatcamGUI/MainGUI.py:2144 msgid "Save Object and Exit Editor" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1936 +#: flatcamGUI/MainGUI.py:1936 msgid "Polygon Cut Tool" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1937 +#: flatcamGUI/MainGUI.py:1937 msgid "Rotate Geometry" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1937 +#: flatcamGUI/MainGUI.py:1937 msgid "Finish drawing for certain tools" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1937 flatcamGUI/FlatCAMGUI.py:2022 flatcamGUI/FlatCAMGUI.py:2142 +#: flatcamGUI/MainGUI.py:1937 flatcamGUI/MainGUI.py:2022 flatcamGUI/MainGUI.py:2142 msgid "Abort and return to Select" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:1938 flatcamGUI/FlatCAMGUI.py:2734 +#: flatcamGUI/MainGUI.py:1938 flatcamGUI/MainGUI.py:2734 msgid "Delete Shape" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:2018 +#: flatcamGUI/MainGUI.py:2018 msgid "EXCELLON EDITOR" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:2018 +#: flatcamGUI/MainGUI.py:2018 msgid "Copy Drill(s)" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:2018 flatcamGUI/FlatCAMGUI.py:2268 +#: flatcamGUI/MainGUI.py:2018 flatcamGUI/MainGUI.py:2268 msgid "Add Drill" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:2019 +#: flatcamGUI/MainGUI.py:2019 msgid "Move Drill(s)" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:2020 +#: flatcamGUI/MainGUI.py:2020 msgid "Add a new Tool" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:2021 +#: flatcamGUI/MainGUI.py:2021 msgid "Delete Drill(s)" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:2021 +#: flatcamGUI/MainGUI.py:2021 msgid "Alternate: Delete Tool(s)" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:2138 +#: flatcamGUI/MainGUI.py:2138 msgid "GERBER EDITOR" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:2138 +#: flatcamGUI/MainGUI.py:2138 msgid "Add Disc" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:2138 +#: flatcamGUI/MainGUI.py:2138 msgid "Add SemiDisc" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:2140 +#: flatcamGUI/MainGUI.py:2140 msgid "Within Track & Region Tools will cycle in REVERSE the bend modes" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:2141 +#: flatcamGUI/MainGUI.py:2141 msgid "Within Track & Region Tools will cycle FORWARD the bend modes" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:2142 +#: flatcamGUI/MainGUI.py:2142 msgid "Alternate: Delete Apertures" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:2143 +#: flatcamGUI/MainGUI.py:2143 msgid "Eraser Tool" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:2144 +#: flatcamGUI/MainGUI.py:2144 #: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:220 msgid "Mark Area Tool" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:2144 +#: flatcamGUI/MainGUI.py:2144 msgid "Poligonize Tool" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:2144 +#: flatcamGUI/MainGUI.py:2144 msgid "Transformation Tool" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:2161 +#: flatcamGUI/MainGUI.py:2161 msgid "Toggle Visibility" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:2167 +#: flatcamGUI/MainGUI.py:2167 msgid "New" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:2169 flatcamGUI/ObjectUI.py:450 +#: flatcamGUI/MainGUI.py:2169 flatcamGUI/ObjectUI.py:450 #: flatcamObjects/FlatCAMGerber.py:239 flatcamObjects/FlatCAMGerber.py:327 #: flatcamTools/ToolCalibration.py:631 flatcamTools/ToolCalibration.py:648 #: flatcamTools/ToolCalibration.py:815 flatcamTools/ToolCopperThieving.py:144 @@ -6065,7 +6065,7 @@ msgstr "" msgid "Geometry" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:2173 +#: flatcamGUI/MainGUI.py:2173 #: flatcamGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:99 #: flatcamTools/ToolAlignObjects.py:74 flatcamTools/ToolAlignObjects.py:110 #: flatcamTools/ToolCalibration.py:197 flatcamTools/ToolCalibration.py:631 @@ -6079,116 +6079,116 @@ msgstr "" msgid "Excellon" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:2180 +#: flatcamGUI/MainGUI.py:2180 msgid "Grids" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:2187 +#: flatcamGUI/MainGUI.py:2187 msgid "Clear Plot" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:2189 +#: flatcamGUI/MainGUI.py:2189 msgid "Replot" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:2193 +#: flatcamGUI/MainGUI.py:2193 msgid "Geo Editor" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:2195 +#: flatcamGUI/MainGUI.py:2195 msgid "Path" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:2197 +#: flatcamGUI/MainGUI.py:2197 msgid "Rectangle" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:2200 +#: flatcamGUI/MainGUI.py:2200 msgid "Circle" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:2204 +#: flatcamGUI/MainGUI.py:2204 msgid "Arc" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:2218 +#: flatcamGUI/MainGUI.py:2218 msgid "Union" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:2220 +#: flatcamGUI/MainGUI.py:2220 msgid "Intersection" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:2222 +#: flatcamGUI/MainGUI.py:2222 msgid "Subtraction" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:2224 flatcamGUI/ObjectUI.py:2221 +#: flatcamGUI/MainGUI.py:2224 flatcamGUI/ObjectUI.py:2221 #: flatcamGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:56 msgid "Cut" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:2235 +#: flatcamGUI/MainGUI.py:2235 msgid "Pad" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:2237 +#: flatcamGUI/MainGUI.py:2237 msgid "Pad Array" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:2241 +#: flatcamGUI/MainGUI.py:2241 msgid "Track" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:2243 +#: flatcamGUI/MainGUI.py:2243 msgid "Region" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:2266 +#: flatcamGUI/MainGUI.py:2266 msgid "Exc Editor" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:2311 +#: flatcamGUI/MainGUI.py:2311 msgid "" "Relative measurement.\n" "Reference is last click position" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:2317 +#: flatcamGUI/MainGUI.py:2317 msgid "" "Absolute measurement.\n" "Reference is (X=0, Y= 0) position" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:2419 +#: flatcamGUI/MainGUI.py:2419 msgid "Lock Toolbars" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:2505 +#: flatcamGUI/MainGUI.py:2505 msgid "FlatCAM Preferences Folder opened." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:2516 +#: flatcamGUI/MainGUI.py:2516 msgid "Are you sure you want to delete the GUI Settings? \n" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:2624 +#: flatcamGUI/MainGUI.py:2624 msgid "&Cutout Tool" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:2694 +#: flatcamGUI/MainGUI.py:2694 msgid "Select 'Esc'" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:2732 +#: flatcamGUI/MainGUI.py:2732 msgid "Copy Objects" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:2740 +#: flatcamGUI/MainGUI.py:2740 msgid "Move Objects" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:3363 +#: flatcamGUI/MainGUI.py:3363 msgid "" "Please first select a geometry item to be cutted\n" "then select the geometry item that will be cutted\n" @@ -6196,75 +6196,75 @@ msgid "" "the toolbar button." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:3370 flatcamGUI/FlatCAMGUI.py:3532 flatcamGUI/FlatCAMGUI.py:3577 -#: flatcamGUI/FlatCAMGUI.py:3597 +#: flatcamGUI/MainGUI.py:3370 flatcamGUI/MainGUI.py:3532 flatcamGUI/MainGUI.py:3577 +#: flatcamGUI/MainGUI.py:3597 msgid "Warning" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:3527 +#: flatcamGUI/MainGUI.py:3527 msgid "" "Please select geometry items \n" "on which to perform Intersection Tool." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:3572 +#: flatcamGUI/MainGUI.py:3572 msgid "" "Please select geometry items \n" "on which to perform Substraction Tool." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:3592 +#: flatcamGUI/MainGUI.py:3592 msgid "" "Please select geometry items \n" "on which to perform union." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:3675 flatcamGUI/FlatCAMGUI.py:3890 +#: flatcamGUI/MainGUI.py:3675 flatcamGUI/MainGUI.py:3890 msgid "Cancelled. Nothing selected to delete." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:3759 flatcamGUI/FlatCAMGUI.py:4006 +#: flatcamGUI/MainGUI.py:3759 flatcamGUI/MainGUI.py:4006 msgid "Cancelled. Nothing selected to copy." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:3805 flatcamGUI/FlatCAMGUI.py:4035 +#: flatcamGUI/MainGUI.py:3805 flatcamGUI/MainGUI.py:4035 msgid "Cancelled. Nothing selected to move." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:4061 +#: flatcamGUI/MainGUI.py:4061 msgid "New Tool ..." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:4062 flatcamTools/ToolNCC.py:924 flatcamTools/ToolPaint.py:850 +#: flatcamGUI/MainGUI.py:4062 flatcamTools/ToolNCC.py:924 flatcamTools/ToolPaint.py:850 #: flatcamTools/ToolSolderPaste.py:560 msgid "Enter a Tool Diameter" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:4074 +#: flatcamGUI/MainGUI.py:4074 msgid "Adding Tool cancelled ..." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:4088 +#: flatcamGUI/MainGUI.py:4088 msgid "Distance Tool exit..." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:4323 flatcamGUI/FlatCAMGUI.py:4330 +#: flatcamGUI/MainGUI.py:4323 flatcamGUI/MainGUI.py:4330 msgid "Idle." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:4361 +#: flatcamGUI/MainGUI.py:4361 msgid "Application started ..." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:4362 +#: flatcamGUI/MainGUI.py:4362 msgid "Hello!" msgstr "" -#: flatcamGUI/FlatCAMGUI.py:4424 +#: flatcamGUI/MainGUI.py:4424 msgid "Open Project ..." msgstr "" -#: flatcamGUI/FlatCAMGUI.py:4450 +#: flatcamGUI/MainGUI.py:4450 msgid "Exit" msgstr "" diff --git a/tclCommands/TclCommandImportSvg.py b/tclCommands/TclCommandImportSvg.py index 5dd7146a..9ef67e27 100644 --- a/tclCommands/TclCommandImportSvg.py +++ b/tclCommands/TclCommandImportSvg.py @@ -81,5 +81,5 @@ class TclCommandImportSvg(TclCommandSignaled): # Register recent file self.app.file_opened.emit("svg", filename) - # AppGUI feedback + # GUI feedback self.app.inform.emit("Opened: " + filename) diff --git a/tclCommands/TclCommandOpenDXF.py b/tclCommands/TclCommandOpenDXF.py index d2de6956..4e46d2a4 100644 --- a/tclCommands/TclCommandOpenDXF.py +++ b/tclCommands/TclCommandOpenDXF.py @@ -90,5 +90,5 @@ class TclCommandOpenDXF(TclCommandSignaled): # Register recent file self.app.file_opened.emit("dxf", filename) - # AppGUI feedback + # GUI feedback self.app.inform.emit("Opened: " + filename) diff --git a/tclCommands/TclCommandOpenSVG.py b/tclCommands/TclCommandOpenSVG.py index 503f8507..9c2b514e 100644 --- a/tclCommands/TclCommandOpenSVG.py +++ b/tclCommands/TclCommandOpenSVG.py @@ -89,5 +89,5 @@ class TclCommandOpenSVG(TclCommandSignaled): # Register recent file self.app.file_opened.emit("svg", filename) - # AppGUI feedback + # GUI feedback self.app.inform.emit("Opened: " + filename) From 2bcdeff7ef2abd54b3fa4c4255e0d024812c7fa9 Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Mon, 18 May 2020 17:31:02 +0300 Subject: [PATCH 47/99] - moved all the new_object related methods in their own class AppObjects.AppObject --- AppEditors/FlatCAMExcEditor.py | 4 +- AppEditors/FlatCAMGeoEditor.py | 2 +- AppEditors/FlatCAMGrbEditor.py | 4 +- AppGUI/MainGUI.py | 6 +- AppGUI/PlotCanvasLegacy.py | 6 +- AppGUI/preferences/PreferencesUIManager.py | 2 +- App.py => AppMain.py | 478 +++------------------ AppObjects/AppObject.py | 393 +++++++++++++++++ AppObjects/FlatCAMExcellon.py | 18 +- AppObjects/FlatCAMGeometry.py | 24 +- AppObjects/FlatCAMGerber.py | 10 +- AppObjects/FlatCAMObj.py | 8 +- AppObjects/ObjectCollection.py | 2 +- AppParsers/ParseExcellon.py | 2 +- AppTool.py | 2 +- AppTools/ToolCalibration.py | 6 +- AppTools/ToolCopperThieving.py | 2 +- AppTools/ToolCutOut.py | 6 +- AppTools/ToolDblSided.py | 8 +- AppTools/ToolExtractDrills.py | 2 +- AppTools/ToolFilm.py | 4 +- AppTools/ToolImage.py | 2 +- AppTools/ToolInvertGerber.py | 2 +- AppTools/ToolNCC.py | 10 +- AppTools/ToolPDF.py | 4 +- AppTools/ToolPaint.py | 10 +- AppTools/ToolPanelize.py | 4 +- AppTools/ToolPcbWizard.py | 2 +- AppTools/ToolPunchGerber.py | 8 +- AppTools/ToolRulesCheck.py | 2 +- AppTools/ToolSolderPaste.py | 12 +- AppTools/ToolSub.py | 4 +- AppTools/ToolTransform.py | 12 +- CHANGELOG.md | 3 +- FlatCAM.py | 2 +- tclCommands/TclCommand.py | 4 +- tclCommands/TclCommandAlignDrill.py | 4 +- tclCommands/TclCommandAlignDrillGrid.py | 2 +- tclCommands/TclCommandBbox.py | 2 +- tclCommands/TclCommandCutout.py | 2 +- tclCommands/TclCommandDrillcncjob.py | 2 +- tclCommands/TclCommandExteriors.py | 2 +- tclCommands/TclCommandGeoCutout.py | 7 +- tclCommands/TclCommandImportSvg.py | 2 +- tclCommands/TclCommandInteriors.py | 2 +- tclCommands/TclCommandJoinExcellon.py | 2 +- tclCommands/TclCommandJoinGeometry.py | 2 +- tclCommands/TclCommandNewExcellon.py | 2 +- tclCommands/TclCommandNewGeometry.py | 2 +- tclCommands/TclCommandNewGerber.py | 2 +- tclCommands/TclCommandNregions.py | 2 +- tclCommands/TclCommandOpenDXF.py | 4 +- tclCommands/TclCommandOpenSVG.py | 4 +- tclCommands/TclCommandPanelize.py | 12 +- tclCommands/TclCommandWriteGCode.py | 6 +- 55 files changed, 579 insertions(+), 554 deletions(-) rename App.py => AppMain.py (96%) create mode 100644 AppObjects/AppObject.py diff --git a/AppEditors/FlatCAMExcEditor.py b/AppEditors/FlatCAMExcEditor.py index 2a4745f5..3d948f66 100644 --- a/AppEditors/FlatCAMExcEditor.py +++ b/AppEditors/FlatCAMExcEditor.py @@ -2239,7 +2239,7 @@ class FlatCAMExcEditor(QtCore.QObject): # store the status of the editor so the Delete at object level will not work until the edit is finished self.editor_active = False - log.debug("Initialization of the FlatCAM Excellon Editor is finished ...") + log.debug("Initialization of the Excellon Editor is finished ...") def pool_recreated(self, pool): self.shapes.pool = pool @@ -3336,7 +3336,7 @@ class FlatCAMExcEditor(QtCore.QObject): with self.app.proc_container.new(_("Creating Excellon.")): try: - edited_obj = self.app.new_object("excellon", outname, obj_init) + edited_obj = self.app.app_obj.new_object("excellon", outname, obj_init) edited_obj.source_file = self.app.export_excellon(obj_name=edited_obj.options['name'], local_use=edited_obj, filename=None, diff --git a/AppEditors/FlatCAMGeoEditor.py b/AppEditors/FlatCAMGeoEditor.py index 8dd1f61b..aeaf24ec 100644 --- a/AppEditors/FlatCAMGeoEditor.py +++ b/AppEditors/FlatCAMGeoEditor.py @@ -3552,7 +3552,7 @@ class FlatCAMGeoEditor(QtCore.QObject): # store the status of the editor so the Delete at object level will not work until the edit is finished self.editor_active = False - log.debug("Initialization of the FlatCAM Geometry Editor is finished ...") + log.debug("Initialization of the Geometry Editor is finished ...") def pool_recreated(self, pool): self.shapes.pool = pool diff --git a/AppEditors/FlatCAMGrbEditor.py b/AppEditors/FlatCAMGrbEditor.py index 4952e74b..0053ac5a 100644 --- a/AppEditors/FlatCAMGrbEditor.py +++ b/AppEditors/FlatCAMGrbEditor.py @@ -3110,7 +3110,7 @@ class FlatCAMGrbEditor(QtCore.QObject): self.complete = True self.set_ui() - log.debug("Initialization of the FlatCAM Gerber Editor is finished ...") + log.debug("Initialization of the Gerber Editor is finished ...") def pool_recreated(self, pool): self.shapes.pool = pool @@ -4346,7 +4346,7 @@ class FlatCAMGrbEditor(QtCore.QObject): with self.app.proc_container.new(_("Creating Gerber.")): try: - self.app.new_object("gerber", outname, obj_init) + self.app.app_obj.new_object("gerber", outname, obj_init) except Exception as e: log.error("Error on Edited object creation: %s" % str(e)) # make sure to clean the previous results diff --git a/AppGUI/MainGUI.py b/AppGUI/MainGUI.py index 38deda4b..147c90b2 100644 --- a/AppGUI/MainGUI.py +++ b/AppGUI/MainGUI.py @@ -2477,7 +2477,7 @@ class MainGUI(QtWidgets.QMainWindow): # New Geometry if key == QtCore.Qt.Key_B: - self.app.new_gerber_object() + self.app.app_obj.new_gerber_object() # New Geometry if key == QtCore.Qt.Key_D: @@ -2497,7 +2497,7 @@ class MainGUI(QtWidgets.QMainWindow): # New Excellon if key == QtCore.Qt.Key_L: - self.app.new_excellon_object() + self.app.app_obj.new_excellon_object() # Move tool toggle if key == QtCore.Qt.Key_M: @@ -2505,7 +2505,7 @@ class MainGUI(QtWidgets.QMainWindow): # New Geometry if key == QtCore.Qt.Key_N: - self.app.new_geometry_object() + self.app.app_obj.new_geometry_object() # Set Origin if key == QtCore.Qt.Key_O: diff --git a/AppGUI/PlotCanvasLegacy.py b/AppGUI/PlotCanvasLegacy.py index 429c5d2b..752d1546 100644 --- a/AppGUI/PlotCanvasLegacy.py +++ b/AppGUI/PlotCanvasLegacy.py @@ -48,9 +48,9 @@ class CanvasCache(QtCore.QObject): Case story #1: 1) No objects in the project. - 2) Object is created (new_object() emits object_created(obj)). + 2) Object is created (app_obj.new_object() emits object_created(obj)). on_object_created() adds (i) object to collection and emits - (ii) new_object_available() then calls (iii) object.plot() + (ii) app_obj.new_object_available() then calls (iii) object.plot() 3) object.plot() creates axes if necessary on app.collection.figure. Then plots on it. 4) Plots on a cache-size canvas (in background). @@ -116,7 +116,7 @@ class CanvasCache(QtCore.QObject): # Continue to update the cache. - # def on_new_object_available(self): + # def on_app_obj.new_object_available(self): # # log.debug("A new object is available. Should plot it!") diff --git a/AppGUI/preferences/PreferencesUIManager.py b/AppGUI/preferences/PreferencesUIManager.py index 640029d3..2cc2487c 100644 --- a/AppGUI/preferences/PreferencesUIManager.py +++ b/AppGUI/preferences/PreferencesUIManager.py @@ -43,7 +43,7 @@ class PreferencesUIManager: self.preferences_changed_flag = False # when adding entries here read the comments in the method found below named: - # def new_object(self, kind, name, initialize, active=True, fit=True, plot=True) + # def app_obj.new_object(self, kind, name, initialize, active=True, fit=True, plot=True) self.defaults_form_fields = { # General App "decimals_inch": self.ui.general_defaults_form.general_app_group.precision_inch_entry, diff --git a/App.py b/AppMain.py similarity index 96% rename from App.py rename to AppMain.py index dbd28abf..297707c6 100644 --- a/App.py +++ b/AppMain.py @@ -4,6 +4,7 @@ # Author: Juan Pablo Caram (c) # # Date: 2/5/2014 # # MIT Licence # +# Modified by Marius Stanciu (2019) # # ########################################################### import urllib.request @@ -55,12 +56,7 @@ from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI from AppGUI.preferences.PreferencesUIManager import PreferencesUIManager from AppObjects.ObjectCollection import * from AppObjects.FlatCAMObj import FlatCAMObj -from AppObjects.FlatCAMCNCJob import CNCJobObject -from AppObjects.FlatCAMDocument import DocumentObject -from AppObjects.FlatCAMExcellon import ExcellonObject -from AppObjects.FlatCAMGeometry import GeometryObject -from AppObjects.FlatCAMGerber import GerberObject -from AppObjects.FlatCAMScript import ScriptObject +from AppObjects.AppObject import AppObject # FlatCAM Parsing files from AppParsers.ParseExcellon import Excellon @@ -226,20 +222,6 @@ class App(QtCore.QObject): # Percentage of progress progress = QtCore.pyqtSignal(int) - plots_updated = QtCore.pyqtSignal() - - # Emitted by new_object() and passes the new object as argument, plot flag. - # on_object_created() adds the object to the collection, plots on appropriate flag - # and emits new_object_available. - object_created = QtCore.pyqtSignal(object, bool, bool) - - # Emitted when a object has been changed (like scaled, mirrored) - object_changed = QtCore.pyqtSignal(object) - - # Emitted after object has been plotted. - # Calls 'on_zoom_fit' method to fit object in scene view in main thread to prevent drawing glitches. - object_plotted = QtCore.pyqtSignal(object) - # Emitted when a new object has been added or deleted from/to the collection object_status_changed = QtCore.pyqtSignal(object, str, str) @@ -674,9 +656,11 @@ class App(QtCore.QObject): # #################################### SETUP OBJECT COLLECTION ############################################## # ########################################################################################################### - self.collection = ObjectCollection(self) + self.collection = ObjectCollection(app=self) self.ui.project_tab_layout.addWidget(self.collection.view) + self.app_obj = AppObject(app=self) + # ### Adjust tabs width ## ## # self.collection.view.setMinimumWidth(self.ui.options_scroll_area.widget().sizeHint().width() + # self.ui.options_scroll_area.verticalScrollBar().sizeHint().width()) @@ -779,12 +763,6 @@ class App(QtCore.QObject): self.message.connect(lambda: message_dialog(parent=self.ui)) # self.progress.connect(self.set_progress_bar) - # signals that are emitted when object state changes - self.object_created.connect(self.on_object_created) - self.object_changed.connect(self.on_object_changed) - self.object_plotted.connect(self.on_object_plotted) - self.plots_updated.connect(self.on_plots_updated) - # signals emitted when file state change self.file_opened.connect(self.register_recent) self.file_opened.connect(lambda kind, filename: self.register_folder(filename)) @@ -793,10 +771,10 @@ class App(QtCore.QObject): # ########################################## Standard signals ############################################### # ### Menu self.ui.menufilenewproject.triggered.connect(self.on_file_new_click) - self.ui.menufilenewgeo.triggered.connect(self.new_geometry_object) - self.ui.menufilenewgrb.triggered.connect(self.new_gerber_object) - self.ui.menufilenewexc.triggered.connect(self.new_excellon_object) - self.ui.menufilenewdoc.triggered.connect(self.new_document_object) + self.ui.menufilenewgeo.triggered.connect(self.app_obj.new_geometry_object) + self.ui.menufilenewgrb.triggered.connect(self.app_obj.new_gerber_object) + self.ui.menufilenewexc.triggered.connect(self.app_obj.new_excellon_object) + self.ui.menufilenewdoc.triggered.connect(self.app_obj.new_document_object) self.ui.menufileopengerber.triggered.connect(self.on_fileopengerber) self.ui.menufileopenexcellon.triggered.connect(self.on_fileopenexcellon) @@ -935,9 +913,9 @@ class App(QtCore.QObject): self.ui.popmenu_disable.triggered.connect(lambda: self.toggle_plots(self.collection.get_selected())) self.ui.popmenu_panel_toggle.triggered.connect(self.ui.on_toggle_notebook) - self.ui.popmenu_new_geo.triggered.connect(self.new_geometry_object) - self.ui.popmenu_new_grb.triggered.connect(self.new_gerber_object) - self.ui.popmenu_new_exc.triggered.connect(self.new_excellon_object) + self.ui.popmenu_new_geo.triggered.connect(self.app_obj.new_geometry_object) + self.ui.popmenu_new_grb.triggered.connect(self.app_obj.new_gerber_object) + self.ui.popmenu_new_exc.triggered.connect(self.app_obj.new_excellon_object) self.ui.popmenu_new_prj.triggered.connect(self.on_file_new) self.ui.zoomfit.triggered.connect(self.on_zoom_fit) @@ -1918,7 +1896,7 @@ class App(QtCore.QObject): self.calculator_tool = ToolCalculator(self) self.calculator_tool.install(icon=QtGui.QIcon(self.resource_location + '/calculator16.png'), separator=True) - self.sub_tool = ToolSub(self) + self.sub_tool = ToolSub(app=self) self.sub_tool.install(icon=QtGui.QIcon(self.resource_location + '/sub32.png'), pos=self.ui.menutool, separator=True) @@ -2071,9 +2049,9 @@ class App(QtCore.QObject): self.ui.zoom_out_btn.triggered.connect(lambda: self.plotcanvas.zoom(1.5)) # Edit Toolbar Signals - self.ui.newgeo_btn.triggered.connect(self.new_geometry_object) - self.ui.newgrb_btn.triggered.connect(self.new_gerber_object) - self.ui.newexc_btn.triggered.connect(self.new_excellon_object) + self.ui.newgeo_btn.triggered.connect(self.app_obj.new_geometry_object) + self.ui.newgrb_btn.triggered.connect(self.app_obj.new_gerber_object) + self.ui.newexc_btn.triggered.connect(self.app_obj.new_excellon_object) self.ui.editgeo_btn.triggered.connect(self.object2editor) self.ui.update_obj_btn.triggered.connect(lambda: self.editor2object()) self.ui.copy_btn.triggered.connect(self.on_copy_command) @@ -2665,347 +2643,6 @@ class App(QtCore.QObject): # Re-build the recent items menu self.setup_recent_items() - def new_object(self, kind, name, initialize, plot=True, autoselected=True): - """ - Creates a new specialized FlatCAMObj and attaches it to the application, - this is, updates the GUI accordingly, any other records and plots it. - This method is thread-safe. - - Notes: - * If the name is in use, the self.collection will modify it - when appending it to the collection. There is no need to handle - name conflicts here. - - :param kind: The kind of object to create. One of 'gerber', 'excellon', 'cncjob' and 'geometry'. - :type kind: str - :param name: Name for the object. - :type name: str - :param initialize: Function to run after creation of the object but before it is attached to the application. - The function is called with 2 parameters: the new object and the App instance. - :type initialize: function - :param plot: If to plot the resulting object - :param autoselected: if the resulting object is autoselected in the Project tab and therefore in the - self.collection - :return: None - :rtype: None - """ - - App.log.debug("new_object()") - obj_plot = plot - obj_autoselected = autoselected - - t0 = time.time() # Debug - - # ## Create object - classdict = { - "gerber": GerberObject, - "excellon": ExcellonObject, - "cncjob": CNCJobObject, - "geometry": GeometryObject, - "script": ScriptObject, - "document": DocumentObject - } - - App.log.debug("Calling object constructor...") - - # Object creation/instantiation - obj = classdict[kind](name) - - obj.units = self.options["units"] - - # IMPORTANT - # The key names in defaults and options dictionary's are not random: - # they have to have in name first the type of the object (geometry, excellon, cncjob and gerber) or how it's - # called here, the 'kind' followed by an underline. Above the App default values from self.defaults are - # copied to self.options. After that, below, depending on the type of - # object that is created, it will strip the name of the object and the underline (if the original key was - # let's say "excellon_toolchange", it will strip the excellon_) and to the obj.options the key will become - # "toolchange" - - for option in self.options: - if option.find(kind + "_") == 0: - oname = option[len(kind) + 1:] - obj.options[oname] = self.options[option] - - obj.isHovering = False - obj.notHovering = True - - # Initialize as per user request - # User must take care to implement initialize - # in a thread-safe way as is is likely that we - # have been invoked in a separate thread. - t1 = time.time() - self.log.debug("%f seconds before initialize()." % (t1 - t0)) - try: - return_value = initialize(obj, self) - except Exception as e: - msg = '[ERROR_NOTCL] %s' % _("An internal error has occurred. See shell.\n") - msg += _("Object ({kind}) failed because: {error} \n\n").format(kind=kind, error=str(e)) - msg += traceback.format_exc() - self.inform.emit(msg) - return "fail" - - t2 = time.time() - self.log.debug("%f seconds executing initialize()." % (t2 - t1)) - - if return_value == 'fail': - log.debug("Object (%s) parsing and/or geometry creation failed." % kind) - return "fail" - - # Check units and convert if necessary - # This condition CAN be true because initialize() can change obj.units - if self.options["units"].upper() != obj.units.upper(): - self.inform.emit('%s: %s' % (_("Converting units to "), self.options["units"])) - obj.convert_units(self.options["units"]) - t3 = time.time() - self.log.debug("%f seconds converting units." % (t3 - t2)) - - # Create the bounding box for the object and then add the results to the obj.options - # But not for Scripts or for Documents - if kind != 'document' and kind != 'script': - try: - xmin, ymin, xmax, ymax = obj.bounds() - obj.options['xmin'] = xmin - obj.options['ymin'] = ymin - obj.options['xmax'] = xmax - obj.options['ymax'] = ymax - except Exception as e: - log.warning("App.new_object() -> The object has no bounds properties. %s" % str(e)) - return "fail" - - try: - if kind == 'excellon': - obj.fill_color = self.defaults["excellon_plot_fill"] - obj.outline_color = self.defaults["excellon_plot_line"] - - if kind == 'gerber': - obj.fill_color = self.defaults["gerber_plot_fill"] - obj.outline_color = self.defaults["gerber_plot_line"] - except Exception as e: - log.warning("App.new_object() -> setting colors error. %s" % str(e)) - - # update the KeyWords list with the name of the file - self.myKeywords.append(obj.options['name']) - - 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) - self.object_created.emit(obj, obj_plot, obj_autoselected) - - return obj - - def new_excellon_object(self): - """ - Creates a new, blank Excellon object. - - :return: None - """ - self.defaults.report_usage("new_excellon_object()") - - self.new_object('excellon', 'new_exc', lambda x, y: None, plot=False) - - def new_geometry_object(self): - """ - Creates a new, blank and single-tool Geometry object. - - :return: None - """ - self.defaults.report_usage("new_geometry_object()") - - def initialize(obj, app): - obj.multitool = False - - self.new_object('geometry', 'new_geo', initialize, plot=False) - - def new_gerber_object(self): - """ - Creates a new, blank Gerber object. - - :return: None - """ - self.defaults.report_usage("new_gerber_object()") - - def initialize(grb_obj, app): - grb_obj.multitool = False - grb_obj.source_file = [] - grb_obj.multigeo = False - grb_obj.follow = False - grb_obj.apertures = {} - grb_obj.solid_geometry = [] - - try: - grb_obj.options['xmin'] = 0 - grb_obj.options['ymin'] = 0 - grb_obj.options['xmax'] = 0 - grb_obj.options['ymax'] = 0 - except KeyError: - pass - - self.new_object('gerber', 'new_grb', initialize, plot=False) - - def new_script_object(self): - """ - Creates a new, blank TCL Script object. - - :return: None - """ - self.defaults.report_usage("new_script_object()") - - # commands_list = "# AddCircle, AddPolygon, AddPolyline, AddRectangle, AlignDrill, " \ - # "AlignDrillGrid, Bbox, Bounds, ClearShell, CopperClear,\n" \ - # "# Cncjob, Cutout, Delete, Drillcncjob, ExportDXF, ExportExcellon, ExportGcode,\n" \ - # "# ExportGerber, ExportSVG, Exteriors, Follow, GeoCutout, GeoUnion, GetNames,\n" \ - # "# GetSys, ImportSvg, Interiors, Isolate, JoinExcellon, JoinGeometry, " \ - # "ListSys, MillDrills,\n" \ - # "# MillSlots, Mirror, New, NewExcellon, NewGeometry, NewGerber, Nregions, " \ - # "Offset, OpenExcellon, OpenGCode, OpenGerber, OpenProject,\n" \ - # "# Options, Paint, Panelize, PlotAl, PlotObjects, SaveProject, " \ - # "SaveSys, Scale, SetActive, SetSys, SetOrigin, Skew, SubtractPoly,\n" \ - # "# SubtractRectangle, Version, WriteGCode\n" - - new_source_file = '# %s\n' % _('CREATE A NEW FLATCAM TCL SCRIPT') + \ - '# %s:\n' % _('TCL Tutorial is here') + \ - '# https://www.tcl.tk/man/tcl8.5/tutorial/tcltutorial.html\n' + '\n\n' + \ - '# %s:\n' % _("FlatCAM commands list") - new_source_file += '# %s\n\n' % _("Type >help< followed by Run Code for a list of FlatCAM Tcl Commands " - "(displayed in Tcl Shell).") - - def initialize(obj, app): - obj.source_file = deepcopy(new_source_file) - - outname = 'new_script' - self.new_object('script', outname, initialize, plot=False) - - def new_document_object(self): - """ - Creates a new, blank Document object. - - :return: None - """ - self.defaults.report_usage("new_document_object()") - - def initialize(obj, app): - obj.source_file = "" - - self.new_object('document', 'new_document', initialize, plot=False) - - def on_object_created(self, obj, plot, auto_select): - """ - Event callback for object creation. - It will add the new object to the collection. After that it will plot the object in a threaded way - - :param obj: The newly created FlatCAM object. - :param plot: if the newly create object t obe plotted - :param auto_select: if the newly created object to be autoselected after creation - :return: None - """ - t0 = time.time() # DEBUG - self.log.debug("on_object_created()") - - # The Collection might change the name if there is a collision - self.collection.append(obj) - - # after adding the object to the collection always update the list of objects that are in the collection - self.all_objects_list = self.collection.get_list() - - # self.inform.emit('[selected] %s created & selected: %s' % - # (str(obj.kind).capitalize(), str(obj.options['name']))) - if obj.kind == 'gerber': - self.inform.emit('[selected] {kind} {tx}: {name}'.format( - kind=obj.kind.capitalize(), - color='green', - name=str(obj.options['name']), tx=_("created/selected")) - ) - elif obj.kind == 'excellon': - self.inform.emit('[selected] {kind} {tx}: {name}'.format( - kind=obj.kind.capitalize(), - color='brown', - name=str(obj.options['name']), tx=_("created/selected")) - ) - elif obj.kind == 'cncjob': - self.inform.emit('[selected] {kind} {tx}: {name}'.format( - kind=obj.kind.capitalize(), - color='blue', - name=str(obj.options['name']), tx=_("created/selected")) - ) - elif obj.kind == 'geometry': - self.inform.emit('[selected] {kind} {tx}: {name}'.format( - kind=obj.kind.capitalize(), - color='red', - name=str(obj.options['name']), tx=_("created/selected")) - ) - elif obj.kind == 'script': - self.inform.emit('[selected] {kind} {tx}: {name}'.format( - kind=obj.kind.capitalize(), - color='orange', - name=str(obj.options['name']), tx=_("created/selected")) - ) - elif obj.kind == 'document': - self.inform.emit('[selected] {kind} {tx}: {name}'.format( - kind=obj.kind.capitalize(), - color='darkCyan', - name=str(obj.options['name']), tx=_("created/selected")) - ) - - # update the SHELL auto-completer model with the name of the new object - self.shell._edit.set_model_data(self.myKeywords) - - if auto_select: - # select the just opened object but deselect the previous ones - self.collection.set_all_inactive() - self.collection.set_active(obj.options["name"]) - else: - self.collection.set_all_inactive() - - # here it is done the object plotting - def worker_task(t_obj): - with self.proc_container.new(_("Plotting")): - if isinstance(t_obj, CNCJobObject): - t_obj.plot(kind=self.defaults["cncjob_plot_kind"]) - else: - t_obj.plot() - t1 = time.time() # DEBUG - self.log.debug("%f seconds adding object and plotting." % (t1 - t0)) - self.object_plotted.emit(t_obj) - - # Send to worker - # self.worker.add_task(worker_task, [self]) - if plot is True: - self.worker_task.emit({'fcn': worker_task, 'params': [obj]}) - - def on_object_changed(self, obj): - """ - Called whenever the geometry of the object was changed in some way. - This require the update of it's bounding values so it can be the selected on canvas. - Update the bounding box data from obj.options - - :param obj: the object that was changed - :return: None - """ - - try: - xmin, ymin, xmax, ymax = obj.bounds() - except TypeError: - return - obj.options['xmin'] = xmin - obj.options['ymin'] = ymin - obj.options['xmax'] = xmax - obj.options['ymax'] = ymax - - log.debug("Object changed, updating the bounding box data on self.options") - # delete the old selection shape - self.delete_selection_shape() - self.should_we_save = True - - def on_object_plotted(self): - """ - Callback called whenever the plotted object needs to be fit into the viewport (canvas) - - :return: None - """ - self.on_zoom_fit(None) - def on_about(self): """ Displays the "about" dialog found in the Menu --> Help. @@ -3976,7 +3613,7 @@ class App(QtCore.QObject): for v in geo_obj.tools.values(): v['data']['name'] = obj_name_multi - self.new_object("geometry", obj_name_multi, initialize) + self.app_obj.new_object("geometry", obj_name_multi, initialize) else: def initialize(geo_obj, app): GeometryObject.merge(geo_list=objs, geo_final=geo_obj, multigeo=False) @@ -3986,7 +3623,7 @@ class App(QtCore.QObject): for v in geo_obj.tools.values(): v['data']['name'] = obj_name_single - self.new_object("geometry", obj_name_single, initialize) + self.app_obj.new_object("geometry", obj_name_single, initialize) self.should_we_save = True @@ -4015,7 +3652,7 @@ class App(QtCore.QObject): ExcellonObject.merge(exc_list=objs, exc_final=exc_obj, decimals=self.decimals) app.inform.emit('[success] %s.' % _("Excellon merging finished")) - self.new_object("excellon", 'Combo_Excellon', initialize) + self.app_obj.new_object("excellon", 'Combo_Excellon', initialize) self.should_we_save = True def on_edit_join_grb(self): @@ -4043,7 +3680,7 @@ class App(QtCore.QObject): GerberObject.merge(grb_list=objs, grb_final=grb_obj) app.inform.emit('[success] %s.' % _("Gerber merging finished")) - self.new_object("gerber", 'Combo_Gerber', initialize) + self.app_obj.new_object("gerber", 'Combo_Gerber', initialize) self.should_we_save = True def on_convert_singlegeo_to_multigeo(self): @@ -4352,7 +3989,7 @@ class App(QtCore.QObject): obj.convert_units(new_units) # make that the properties stored in the object are also updated - self.object_changed.emit(obj) + self.app_obj.object_changed.emit(obj) # rebuild the object UI obj.build_ui() @@ -5017,7 +4654,7 @@ class App(QtCore.QObject): for obj in obj_list: obj.offset((x, y)) - self.object_changed.emit(obj) + self.app_obj.object_changed.emit(obj) # Update the object bounding box options a, b, c, d = obj.bounds() @@ -5105,7 +4742,7 @@ class App(QtCore.QObject): for obj in obj_list: obj.offset((-x, -y)) - self.object_changed.emit(obj) + self.app_obj.object_changed.emit(obj) # Update the object bounding box options a, b, c, d = obj.bounds() @@ -5468,15 +5105,15 @@ class App(QtCore.QObject): try: if isinstance(obj, ExcellonObject): - self.new_object("excellon", str(obj_name) + "_copy", initialize_excellon) + self.app_obj.new_object("excellon", str(obj_name) + "_copy", initialize_excellon) elif isinstance(obj, GerberObject): - self.new_object("gerber", str(obj_name) + "_copy", initialize) + self.app_obj.new_object("gerber", str(obj_name) + "_copy", initialize) elif isinstance(obj, GeometryObject): - self.new_object("geometry", str(obj_name) + "_copy", initialize) + self.app_obj.new_object("geometry", str(obj_name) + "_copy", initialize) elif isinstance(obj, ScriptObject): - self.new_object("script", str(obj_name) + "_copy", initialize_script) + self.app_obj.new_object("script", str(obj_name) + "_copy", initialize_script) elif isinstance(obj, DocumentObject): - self.new_object("document", str(obj_name) + "_copy", initialize_document) + self.app_obj.new_object("document", str(obj_name) + "_copy", initialize_document) except Exception as e: return "Operation failed: %s" % str(e) @@ -5517,11 +5154,11 @@ class App(QtCore.QObject): obj_name = obj.options["name"] try: if isinstance(obj, ExcellonObject): - self.new_object("excellon", str(obj_name) + custom_name, initialize_excellon) + self.app_obj.new_object("excellon", str(obj_name) + custom_name, initialize_excellon) elif isinstance(obj, GerberObject): - self.new_object("gerber", str(obj_name) + custom_name, initialize_gerber) + self.app_obj.new_object("gerber", str(obj_name) + custom_name, initialize_gerber) elif isinstance(obj, GeometryObject): - self.new_object("geometry", str(obj_name) + custom_name, initialize_geometry) + self.app_obj.new_object("geometry", str(obj_name) + custom_name, initialize_geometry) except Exception as er: return "Operation failed: %s" % str(er) @@ -5588,9 +5225,9 @@ class App(QtCore.QObject): try: if isinstance(obj, ExcellonObject): - self.new_object("geometry", str(obj_name) + "_conv", initialize_excellon) + self.app_obj.new_object("geometry", str(obj_name) + "_conv", initialize_excellon) else: - self.new_object("geometry", str(obj_name) + "_conv", initialize) + self.app_obj.new_object("geometry", str(obj_name) + "_conv", initialize) except Exception as e: return "Operation failed: %s" % str(e) @@ -5666,9 +5303,9 @@ class App(QtCore.QObject): try: if isinstance(obj, ExcellonObject): - self.new_object("gerber", str(obj_name) + "_conv", initialize_excellon) + self.app_obj.new_object("gerber", str(obj_name) + "_conv", initialize_excellon) elif isinstance(obj, GeometryObject): - self.new_object("gerber", str(obj_name) + "_conv", initialize_geometry) + self.app_obj.new_object("gerber", str(obj_name) + "_conv", initialize_geometry) else: log.warning("App.convert_any2gerber --> This is no vaild object for conversion.") @@ -5960,7 +5597,7 @@ class App(QtCore.QObject): for obj in obj_list: obj.mirror('X', [px, py]) obj.plot() - self.object_changed.emit(obj) + self.app_obj.object_changed.emit(obj) self.inform.emit('[success] %s' % _("Flip on Y axis done.")) except Exception as e: @@ -6008,7 +5645,7 @@ class App(QtCore.QObject): for obj in obj_list: obj.mirror('Y', [px, py]) obj.plot() - self.object_changed.emit(obj) + self.app_obj.object_changed.emit(obj) self.inform.emit('[success] %s' % _("Flip on X axis done.")) except Exception as e: @@ -6064,7 +5701,7 @@ class App(QtCore.QObject): for sel_obj in obj_list: sel_obj.rotate(-float(num), point=(px, py)) sel_obj.plot() - self.object_changed.emit(sel_obj) + self.app_obj.object_changed.emit(sel_obj) self.inform.emit('[success] %s' % _("Rotation done.")) except Exception as e: self.inform.emit('[ERROR_NOTCL] %s: %s' % (_("Rotation movement was not executed."), str(e))) @@ -6104,7 +5741,7 @@ class App(QtCore.QObject): for obj in obj_list: obj.skew(num, 0, point=(xminimal, yminimal)) obj.plot() - self.object_changed.emit(obj) + self.app_obj.object_changed.emit(obj) self.inform.emit('[success] %s' % _("Skew on X axis done.")) def on_skewy(self): @@ -6141,7 +5778,7 @@ class App(QtCore.QObject): for obj in obj_list: obj.skew(0, num, point=(xminimal, yminimal)) obj.plot() - self.object_changed.emit(obj) + self.app_obj.object_changed.emit(obj) self.inform.emit('[success] %s' % _("Skew on Y axis done.")) def on_plots_updated(self): @@ -7970,7 +7607,7 @@ class App(QtCore.QObject): self.ui.position_label.setText("") # self.ui.rel_position_label.setText("") - self.new_script_object() + self.app_obj.new_script_object() # script_text = script_obj.source_file # @@ -8891,7 +8528,7 @@ class App(QtCore.QObject): # Object name name = outname or filename.split('/')[-1].split('\\')[-1] - ret = self.new_object(obj_type, name, obj_init, autoselected=False, plot=plot) + ret = self.app_obj.new_object(obj_type, name, obj_init, autoselected=False, plot=plot) if ret == 'fail': self.inform.emit('[ERROR_NOTCL]%s' % _('Import failed.')) @@ -8937,7 +8574,7 @@ class App(QtCore.QObject): # Object name name = outname or filename.split('/')[-1].split('\\')[-1] - ret = self.new_object(obj_type, name, obj_init, autoselected=False, plot=plot) + ret = self.app_obj.new_object(obj_type, name, obj_init, autoselected=False, plot=plot) if ret == 'fail': self.inform.emit('[ERROR_NOTCL]%s' % _('Import failed.')) @@ -8998,11 +8635,11 @@ class App(QtCore.QObject): name = outname or filename.split('/')[-1].split('\\')[-1] # # ## Object creation # ## - ret_val = self.new_object("gerber", name, obj_init, autoselected=False, plot=plot) + ret_val = self.app_obj.new_object("gerber", name, obj_init, autoselected=False, plot=plot) if ret_val == 'fail': if from_tcl: filename = self.defaults['global_tcl_path'] + '/' + name - ret_val = self.new_object("gerber", name, obj_init, autoselected=False, plot=plot) + ret_val = self.app_obj.new_object("gerber", name, obj_init, autoselected=False, plot=plot) if ret_val == 'fail': self.inform.emit('[ERROR_NOTCL]%s' % _('Open Gerber failed. Probable not a Gerber file.')) return 'fail' @@ -9064,11 +8701,11 @@ class App(QtCore.QObject): with self.proc_container.new(_("Opening Excellon.")): # Object name name = outname or filename.split('/')[-1].split('\\')[-1] - ret_val = self.new_object("excellon", name, obj_init, autoselected=False, plot=plot) + ret_val = self.app_obj.new_object("excellon", name, obj_init, autoselected=False, plot=plot) if ret_val == 'fail': if from_tcl: filename = self.defaults['global_tcl_path'] + '/' + name - ret_val = self.new_object("excellon", name, obj_init, autoselected=False, plot=plot) + ret_val = self.app_obj.new_object("excellon", name, obj_init, autoselected=False, plot=plot) if ret_val == 'fail': self.inform.emit('[ERROR_NOTCL] %s' % _('Open Excellon file failed. Probable not an Excellon file.')) @@ -9127,11 +8764,11 @@ class App(QtCore.QObject): name = outname or filename.split('/')[-1].split('\\')[-1] # New object creation and file processing - ret_val = self.new_object("cncjob", name, obj_init, autoselected=False, plot=plot) + ret_val = self.app_obj.new_object("cncjob", name, obj_init, autoselected=False, plot=plot) if ret_val == 'fail': if from_tcl: filename = self.defaults['global_tcl_path'] + '/' + name - ret_val = self.new_object("cncjob", name, obj_init, autoselected=False, plot=plot) + ret_val = self.app_obj.new_object("cncjob", name, obj_init, autoselected=False, plot=plot) if ret_val == 'fail': self.inform.emit('[ERROR_NOTCL] %s' % _("Failed to create CNCJob Object. Probable not a GCode file. " @@ -9200,7 +8837,7 @@ class App(QtCore.QObject): name = outname or filename.split('/')[-1].split('\\')[-1] # # ## Object creation # ## - ret = self.new_object("geometry", name, obj_init, autoselected=False) + ret = self.app_obj.new_object("geometry", name, obj_init, autoselected=False) if ret == 'fail': self.inform.emit('[ERROR_NOTCL]%s' % _(' Open HPGL2 failed. Probable not a HPGL2 file.')) return 'fail' @@ -9254,10 +8891,10 @@ class App(QtCore.QObject): script_name = outname or filename.split('/')[-1].split('\\')[-1] # Object creation - ret_val = self.new_object("script", script_name, obj_init, autoselected=False, plot=False) + ret_val = self.app_obj.new_object("script", script_name, obj_init, autoselected=False, plot=False) if ret_val == 'fail': filename = self.defaults['global_tcl_path'] + '/' + script_name - ret_val = self.new_object("script", script_name, obj_init, autoselected=False, plot=False) + ret_val = self.app_obj.new_object("script", script_name, obj_init, autoselected=False, plot=False) if ret_val == 'fail': self.inform.emit('[ERROR_NOTCL]%s' % _('Failed to open TCL Script.')) return 'fail' @@ -9320,7 +8957,7 @@ class App(QtCore.QObject): 2) Registers the file as recently opened. 3) Calls on_file_new() 4) Updates options - 5) Calls new_object() with the object's from_dict() as init method. + 5) Calls app_obj.new_object() with the object's from_dict() as init method. 6) Calls plot_all() if plot=True :param filename: Name of the file from which to load. @@ -9422,7 +9059,7 @@ class App(QtCore.QObject): ) ) - self.new_object(obj['kind'], obj['options']['name'], obj_init, plot=plot) + self.app_obj.new_object(obj['kind'], obj['options']['name'], obj_init, plot=plot) except Exception as e: print('App.open_project() --> ' + str(e)) @@ -9459,7 +9096,7 @@ class App(QtCore.QObject): with self.proc_container.new("Plotting"): obj.plot(kind=self.defaults["cncjob_plot_kind"]) if fit_view is True: - self.object_plotted.emit(obj) + self.app_obj.object_plotted.emit(obj) if use_thread is True: # Send to worker @@ -10044,8 +9681,6 @@ class App(QtCore.QObject): self.worker_task.emit({'fcn': worker_task, 'params': [objects]}) - # self.plots_updated.emit() - def disable_plots(self, objects): """ Disables plots @@ -10084,7 +9719,6 @@ class App(QtCore.QObject): except Exception as e: log.debug("App.disable_plots() --> %s" % str(e)) - # self.plots_updated.emit() def worker_task(objs): with self.proc_container.new(_("Disabling plots ...")): for plot_obj in objs: @@ -10115,7 +9749,7 @@ class App(QtCore.QObject): obj.options['plot'] = True else: obj.options['plot'] = False - self.plots_updated.emit() + self.app_obj.plots_updated.emit() def clear_plots(self): """ diff --git a/AppObjects/AppObject.py b/AppObjects/AppObject.py new file mode 100644 index 00000000..361663ed --- /dev/null +++ b/AppObjects/AppObject.py @@ -0,0 +1,393 @@ +# ########################################################### +# FlatCAM: 2D Post-processing for Manufacturing # +# http://flatcam.org # +# Author: Juan Pablo Caram (c) # +# Date: 2/5/2014 # +# MIT Licence # +# Modified by Marius Stanciu (2020) # +# ########################################################### + +from PyQt5 import QtCore +from AppObjects.ObjectCollection import * +from AppObjects.FlatCAMCNCJob import CNCJobObject +from AppObjects.FlatCAMDocument import DocumentObject +from AppObjects.FlatCAMExcellon import ExcellonObject +from AppObjects.FlatCAMGeometry import GeometryObject +from AppObjects.FlatCAMGerber import GerberObject +from AppObjects.FlatCAMScript import ScriptObject + +import time +import traceback + +# FlatCAM Translation +import gettext +import AppTranslation as fcTranslate +import builtins + +fcTranslate.apply_language('strings') +if '_' not in builtins.__dict__: + _ = gettext.gettext + + +class AppObject(QtCore.QObject): + + # Emitted by app_obj.new_object() and passes the new object as argument, plot flag. + # on_object_created() adds the object to the collection, plots on appropriate flag + # and emits app_obj.new_object_available. + object_created = QtCore.pyqtSignal(object, bool, bool) + + # Emitted when a object has been changed (like scaled, mirrored) + object_changed = QtCore.pyqtSignal(object) + + # Emitted after object has been plotted. + # Calls 'on_zoom_fit' method to fit object in scene view in main thread to prevent drawing glitches. + object_plotted = QtCore.pyqtSignal(object) + + plots_updated = QtCore.pyqtSignal() + + def __init__(self, app): + super(AppObject, self).__init__() + self.app = app + + # signals that are emitted when object state changes + self.object_created.connect(self.on_object_created) + self.object_changed.connect(self.on_object_changed) + self.object_plotted.connect(self.on_object_plotted) + self.plots_updated.connect(self.app.on_plots_updated) + + def new_object(self, kind, name, initialize, plot=True, autoselected=True): + """ + Creates a new specialized FlatCAMObj and attaches it to the application, + this is, updates the GUI accordingly, any other records and plots it. + This method is thread-safe. + + Notes: + * If the name is in use, the self.collection will modify it + when appending it to the collection. There is no need to handle + name conflicts here. + + :param kind: The kind of object to create. One of 'gerber', 'excellon', 'cncjob' and 'geometry'. + :type kind: str + :param name: Name for the object. + :type name: str + :param initialize: Function to run after creation of the object but before it is attached to the application. + The function is called with 2 parameters: the new object and the App instance. + :type initialize: function + :param plot: If to plot the resulting object + :param autoselected: if the resulting object is autoselected in the Project tab and therefore in the + self.collection + :return: None + :rtype: None + """ + + log.debug("AppObject.new_object()") + obj_plot = plot + obj_autoselected = autoselected + + t0 = time.time() # Debug + + # ## Create object + classdict = { + "gerber": GerberObject, + "excellon": ExcellonObject, + "cncjob": CNCJobObject, + "geometry": GeometryObject, + "script": ScriptObject, + "document": DocumentObject + } + + log.debug("Calling object constructor...") + + # Object creation/instantiation + obj = classdict[kind](name) + + obj.units = self.app.options["units"] + + # IMPORTANT + # The key names in defaults and options dictionary's are not random: + # they have to have in name first the type of the object (geometry, excellon, cncjob and gerber) or how it's + # called here, the 'kind' followed by an underline. Above the App default values from self.defaults are + # copied to self.options. After that, below, depending on the type of + # object that is created, it will strip the name of the object and the underline (if the original key was + # let's say "excellon_toolchange", it will strip the excellon_) and to the obj.options the key will become + # "toolchange" + + for option in self.app.options: + if option.find(kind + "_") == 0: + oname = option[len(kind) + 1:] + obj.options[oname] = self.app.options[option] + + obj.isHovering = False + obj.notHovering = True + + # Initialize as per user request + # User must take care to implement initialize + # in a thread-safe way as is is likely that we + # have been invoked in a separate thread. + t1 = time.time() + log.debug("%f seconds before initialize()." % (t1 - t0)) + try: + return_value = initialize(obj, self) + except Exception as e: + msg = '[ERROR_NOTCL] %s' % _("An internal error has occurred. See shell.\n") + msg += _("Object ({kind}) failed because: {error} \n\n").format(kind=kind, error=str(e)) + msg += traceback.format_exc() + self.app.inform.emit(msg) + return "fail" + + t2 = time.time() + log.debug("%f seconds executing initialize()." % (t2 - t1)) + + if return_value == 'fail': + log.debug("Object (%s) parsing and/or geometry creation failed." % kind) + return "fail" + + # Check units and convert if necessary + # This condition CAN be true because initialize() can change obj.units + if self.app.options["units"].upper() != obj.units.upper(): + self.app.inform.emit('%s: %s' % (_("Converting units to "), self.app.options["units"])) + obj.convert_units(self.app.options["units"]) + t3 = time.time() + log.debug("%f seconds converting units." % (t3 - t2)) + + # Create the bounding box for the object and then add the results to the obj.options + # But not for Scripts or for Documents + if kind != 'document' and kind != 'script': + try: + xmin, ymin, xmax, ymax = obj.bounds() + obj.options['xmin'] = xmin + obj.options['ymin'] = ymin + obj.options['xmax'] = xmax + obj.options['ymax'] = ymax + except Exception as e: + log.warning("AppObject.new_object() -> The object has no bounds properties. %s" % str(e)) + return "fail" + + try: + if kind == 'excellon': + obj.fill_color = self.app.defaults["excellon_plot_fill"] + obj.outline_color = self.app.defaults["excellon_plot_line"] + + if kind == 'gerber': + obj.fill_color = self.app.defaults["gerber_plot_fill"] + obj.outline_color = self.app.defaults["gerber_plot_line"] + except Exception as e: + log.warning("AppObject.new_object() -> setting colors error. %s" % str(e)) + + # update the KeyWords list with the name of the file + self.app.myKeywords.append(obj.options['name']) + + 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.app.main_thread) + self.object_created.emit(obj, obj_plot, obj_autoselected) + + return obj + + def new_excellon_object(self): + """ + Creates a new, blank Excellon object. + + :return: None + """ + + self.new_object('excellon', 'new_exc', lambda x, y: None, plot=False) + + def new_geometry_object(self): + """ + Creates a new, blank and single-tool Geometry object. + + :return: None + """ + + def initialize(obj, app): + obj.multitool = False + + self.new_object('geometry', 'new_geo', initialize, plot=False) + + def new_gerber_object(self): + """ + Creates a new, blank Gerber object. + + :return: None + """ + + def initialize(grb_obj, app): + grb_obj.multitool = False + grb_obj.source_file = [] + grb_obj.multigeo = False + grb_obj.follow = False + grb_obj.apertures = {} + grb_obj.solid_geometry = [] + + try: + grb_obj.options['xmin'] = 0 + grb_obj.options['ymin'] = 0 + grb_obj.options['xmax'] = 0 + grb_obj.options['ymax'] = 0 + except KeyError: + pass + + self.new_object('gerber', 'new_grb', initialize, plot=False) + + def new_script_object(self): + """ + Creates a new, blank TCL Script object. + + :return: None + """ + + # commands_list = "# AddCircle, AddPolygon, AddPolyline, AddRectangle, AlignDrill, " \ + # "AlignDrillGrid, Bbox, Bounds, ClearShell, CopperClear,\n" \ + # "# Cncjob, Cutout, Delete, Drillcncjob, ExportDXF, ExportExcellon, ExportGcode,\n" \ + # "# ExportGerber, ExportSVG, Exteriors, Follow, GeoCutout, GeoUnion, GetNames,\n" \ + # "# GetSys, ImportSvg, Interiors, Isolate, JoinExcellon, JoinGeometry, " \ + # "ListSys, MillDrills,\n" \ + # "# MillSlots, Mirror, New, NewExcellon, NewGeometry, NewGerber, Nregions, " \ + # "Offset, OpenExcellon, OpenGCode, OpenGerber, OpenProject,\n" \ + # "# Options, Paint, Panelize, PlotAl, PlotObjects, SaveProject, " \ + # "SaveSys, Scale, SetActive, SetSys, SetOrigin, Skew, SubtractPoly,\n" \ + # "# SubtractRectangle, Version, WriteGCode\n" + + new_source_file = '# %s\n' % _('CREATE A NEW FLATCAM TCL SCRIPT') + \ + '# %s:\n' % _('TCL Tutorial is here') + \ + '# https://www.tcl.tk/man/tcl8.5/tutorial/tcltutorial.html\n' + '\n\n' + \ + '# %s:\n' % _("FlatCAM commands list") + new_source_file += '# %s\n\n' % _("Type >help< followed by Run Code for a list of FlatCAM Tcl Commands " + "(displayed in Tcl Shell).") + + def initialize(obj, app): + obj.source_file = deepcopy(new_source_file) + + outname = 'new_script' + self.new_object('script', outname, initialize, plot=False) + + def new_document_object(self): + """ + Creates a new, blank Document object. + + :return: None + """ + + def initialize(obj, app): + obj.source_file = "" + + self.new_object('document', 'new_document', initialize, plot=False) + + def on_object_created(self, obj, plot, auto_select): + """ + Event callback for object creation. + It will add the new object to the collection. After that it will plot the object in a threaded way + + :param obj: The newly created FlatCAM object. + :param plot: if the newly create object t obe plotted + :param auto_select: if the newly created object to be autoselected after creation + :return: None + """ + t0 = time.time() # DEBUG + log.debug("on_object_created()") + + # The Collection might change the name if there is a collision + self.app.collection.append(obj) + + # after adding the object to the collection always update the list of objects that are in the collection + self.all_objects_list = self.app.collection.get_list() + + # self.app.inform.emit('[selected] %s created & selected: %s' % + # (str(obj.kind).capitalize(), str(obj.options['name']))) + if obj.kind == 'gerber': + self.app.inform.emit('[selected] {kind} {tx}: {name}'.format( + kind=obj.kind.capitalize(), + color='green', + name=str(obj.options['name']), tx=_("created/selected")) + ) + elif obj.kind == 'excellon': + self.app.inform.emit('[selected] {kind} {tx}: {name}'.format( + kind=obj.kind.capitalize(), + color='brown', + name=str(obj.options['name']), tx=_("created/selected")) + ) + elif obj.kind == 'cncjob': + self.app.inform.emit('[selected] {kind} {tx}: {name}'.format( + kind=obj.kind.capitalize(), + color='blue', + name=str(obj.options['name']), tx=_("created/selected")) + ) + elif obj.kind == 'geometry': + self.app.inform.emit('[selected] {kind} {tx}: {name}'.format( + kind=obj.kind.capitalize(), + color='red', + name=str(obj.options['name']), tx=_("created/selected")) + ) + elif obj.kind == 'script': + self.app.inform.emit('[selected] {kind} {tx}: {name}'.format( + kind=obj.kind.capitalize(), + color='orange', + name=str(obj.options['name']), tx=_("created/selected")) + ) + elif obj.kind == 'document': + self.app.inform.emit('[selected] {kind} {tx}: {name}'.format( + kind=obj.kind.capitalize(), + color='darkCyan', + name=str(obj.options['name']), tx=_("created/selected")) + ) + + # update the SHELL auto-completer model with the name of the new object + self.app.shell._edit.set_model_data(self.app.myKeywords) + + if auto_select: + # select the just opened object but deselect the previous ones + self.app.collection.set_all_inactive() + self.app.collection.set_active(obj.options["name"]) + else: + self.app.collection.set_all_inactive() + + # here it is done the object plotting + def task(t_obj): + with self.app.proc_container.new(_("Plotting")): + if t_obj.kind == 'cncjob': + t_obj.plot(kind=self.defaults["cncjob_plot_kind"]) + else: + t_obj.plot() + + t1 = time.time() # DEBUG + log.debug("%f seconds adding object and plotting." % (t1 - t0)) + self.object_plotted.emit(t_obj) + + # Send to worker + # self.worker.add_task(worker_task, [self]) + if plot is True: + self.worker_task.emit({'fcn': task, 'params': [obj]}) + + def on_object_changed(self, obj): + """ + Called whenever the geometry of the object was changed in some way. + This require the update of it's bounding values so it can be the selected on canvas. + Update the bounding box data from obj.options + + :param obj: the object that was changed + :return: None + """ + + try: + xmin, ymin, xmax, ymax = obj.bounds() + except TypeError: + return + obj.options['xmin'] = xmin + obj.options['ymin'] = ymin + obj.options['xmax'] = xmax + obj.options['ymax'] = ymax + + log.debug("Object changed, updating the bounding box data on self.options") + # delete the old selection shape + self.app.delete_selection_shape() + self.app.should_we_save = True + + def on_object_plotted(self): + """ + Callback called whenever the plotted object needs to be fit into the viewport (canvas) + + :return: None + """ + self.app.on_zoom_fit(None) diff --git a/AppObjects/FlatCAMExcellon.py b/AppObjects/FlatCAMExcellon.py index a46d6388..30f5f841 100644 --- a/AppObjects/FlatCAMExcellon.py +++ b/AppObjects/FlatCAMExcellon.py @@ -1196,8 +1196,8 @@ class ExcellonObject(FlatCAMObj, Excellon): 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) + def geo_thread(a_obj): + a_obj.app_obj.new_object("geometry", outname, geo_init, plot=plot) # Create a promise with the new name self.app.collection.promise(outname) @@ -1205,7 +1205,7 @@ class ExcellonObject(FlatCAMObj, Excellon): # 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) + self.app.app_obj.new_object("geometry", outname, geo_init, plot=plot) return True, "" @@ -1300,8 +1300,8 @@ class ExcellonObject(FlatCAMObj, Excellon): 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) + def geo_thread(a_obj): + a_obj.app_obj.new_object("geometry", outname + '_slot', geo_init, plot=plot) # Create a promise with the new name self.app.collection.promise(outname) @@ -1309,7 +1309,7 @@ class ExcellonObject(FlatCAMObj, Excellon): # 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) + self.app.app_obj.new_object("geometry", outname + '_slot', geo_init, plot=plot) return True, "" @@ -1443,7 +1443,7 @@ class ExcellonObject(FlatCAMObj, Excellon): job_name = self.options["name"] + "_cnc" pp_excellon_name = self.options["ppname_e"] - # Object initialization function for app.new_object() + # Object initialization function for app.app_obj.new_object() def job_init(job_obj, app_obj): assert job_obj.kind == 'cncjob', "Initializer expected a CNCJobObject, got %s" % type(job_obj) @@ -1506,9 +1506,9 @@ class ExcellonObject(FlatCAMObj, Excellon): job_obj.create_geometry() # To be run in separate thread - def job_thread(app_obj): + def job_thread(a_obj): with self.app.proc_container.new(_("Generating CNC Code")): - app_obj.new_object("cncjob", job_name, job_init) + a_obj.app_obj.new_object("cncjob", job_name, job_init) # Create promise for the new name. self.app.collection.promise(job_name) diff --git a/AppObjects/FlatCAMGeometry.py b/AppObjects/FlatCAMGeometry.py index 2ff677d1..bb418dc3 100644 --- a/AppObjects/FlatCAMGeometry.py +++ b/AppObjects/FlatCAMGeometry.py @@ -1778,7 +1778,7 @@ class GeometryObject(FlatCAMObj, Geometry): self.app.inform.emit(msg) return - # Object initialization function for app.new_object() + # Object initialization function for app.app_obj.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") @@ -1918,7 +1918,7 @@ class GeometryObject(FlatCAMObj, Geometry): }) dia_cnc_dict.clear() - # Object initialization function for app.new_object() + # Object initialization function for app.app_obj.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") @@ -2072,15 +2072,15 @@ class GeometryObject(FlatCAMObj, Geometry): if use_thread: # To be run in separate thread - def job_thread(app_obj): + def job_thread(a_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)) + if a_obj.app_obj.new_object("cncjob", outname, job_init_single_geometry, plot=plot) != 'fail': + a_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)) + if a_obj.app_obj.new_object("cncjob", outname, job_init_multi_geometry) != 'fail': + a_obj.inform.emit('[success] %s: %s' % (_("CNCjob created"), outname)) # Create a promise with the name self.app.collection.promise(outname) @@ -2088,9 +2088,9 @@ class GeometryObject(FlatCAMObj, Geometry): 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) + self.app.app_obj.new_object("cncjob", outname, job_init_single_geometry, plot=plot) else: - self.app.new_object("cncjob", outname, job_init_multi_geometry, plot=plot) + self.app.app_obj.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, @@ -2181,7 +2181,7 @@ class GeometryObject(FlatCAMObj, Geometry): ppname_g = pp if pp else self.options["ppname_g"] - # Object initialization function for app.new_object() + # Object initialization function for app.app_obj.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) @@ -2230,7 +2230,7 @@ class GeometryObject(FlatCAMObj, 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", outname, job_init, plot=plot) + app_obj.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 @@ -2238,7 +2238,7 @@ class GeometryObject(FlatCAMObj, Geometry): # 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) + self.app.app_obj.new_object("cncjob", outname, job_init, plot=plot) # def on_plot_cb_click(self, *args): # if self.muted_ui: diff --git a/AppObjects/FlatCAMGerber.py b/AppObjects/FlatCAMGerber.py index bda1ffd5..98049513 100644 --- a/AppObjects/FlatCAMGerber.py +++ b/AppObjects/FlatCAMGerber.py @@ -530,7 +530,7 @@ class GerberObject(FlatCAMObj, Gerber): return "fail" geo_obj.solid_geometry = non_copper - self.app.new_object("geometry", name, geo_init) + self.app.app_obj.new_object("geometry", name, geo_init) def on_generatebb_button_click(self, *args): self.app.defaults.report_usage("gerber_on_generatebb_button") @@ -556,7 +556,7 @@ class GerberObject(FlatCAMObj, Gerber): return "fail" geo_obj.solid_geometry = bounding_box - self.app.new_object("geometry", name, geo_init) + self.app.app_obj.new_object("geometry", name, geo_init) def on_iso_button_click(self, *args): @@ -605,7 +605,7 @@ class GerberObject(FlatCAMObj, Gerber): # TODO: Do something if this is None. Offer changing name? try: - self.app.new_object("geometry", follow_name, follow_init) + self.app.app_obj.new_object("geometry", follow_name, follow_init) except Exception as e: return "Operation failed: %s" % str(e) @@ -942,7 +942,7 @@ class GerberObject(FlatCAMObj, Gerber): 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) + self.app.app_obj.new_object("geometry", iso_name, iso_init, plot=plot) else: for i in range(passes): @@ -1072,7 +1072,7 @@ class GerberObject(FlatCAMObj, Gerber): 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) + self.app.app_obj.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 diff --git a/AppObjects/FlatCAMObj.py b/AppObjects/FlatCAMObj.py index fda1a0c7..282c2ced 100644 --- a/AppObjects/FlatCAMObj.py +++ b/AppObjects/FlatCAMObj.py @@ -245,7 +245,7 @@ class FlatCAMObj(QtCore.QObject): 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.app_obj.object_changed.emit(self) self.app.worker_task.emit({'fcn': worker_task, 'params': []}) @@ -276,7 +276,7 @@ class FlatCAMObj(QtCore.QObject): 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.app_obj.object_changed.emit(self) self.app.worker_task.emit({'fcn': worker_task, 'params': []}) @@ -292,7 +292,7 @@ class FlatCAMObj(QtCore.QObject): 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.app_obj.object_changed.emit(self) self.app.worker_task.emit({'fcn': worker_task, 'params': []}) @@ -372,7 +372,7 @@ class FlatCAMObj(QtCore.QObject): def plot_task(): with self.app.proc_container.new('%s...' % _("Plotting")): self.plot() - self.app.object_changed.emit(self) + self.app.app_obj.object_changed.emit(self) self.app.worker_task.emit({'fcn': plot_task, 'params': []}) diff --git a/AppObjects/ObjectCollection.py b/AppObjects/ObjectCollection.py index fb1318fd..8fc25560 100644 --- a/AppObjects/ObjectCollection.py +++ b/AppObjects/ObjectCollection.py @@ -553,7 +553,7 @@ class ObjectCollection(QtCore.QAbstractItemModel): while name in self.get_names(): # ## Create a new name # Ends with number? - log.debug("new_object(): Object name (%s) exists, changing." % name) + log.debug("app_obj.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 '' diff --git a/AppParsers/ParseExcellon.py b/AppParsers/ParseExcellon.py index f350ba28..d853b427 100644 --- a/AppParsers/ParseExcellon.py +++ b/AppParsers/ParseExcellon.py @@ -1069,7 +1069,7 @@ class Excellon(Geometry): This function first convert to the the units found in the Excellon file but it converts tools that are not there yet so it has no effect other than it signal that the units are the ones in the file. - On object creation, in new_object(), true conversion is done because this is done at the end of the + On object creation, in app_obj.new_object(), true conversion is done because this is done at the end of the Excellon file parsing, the tools are inside and self.tools is really converted from the units found inside the file to the FlatCAM units. diff --git a/AppTool.py b/AppTool.py index 1f3c1ba4..2c2362c4 100644 --- a/AppTool.py +++ b/AppTool.py @@ -28,7 +28,7 @@ class AppTool(QtWidgets.QWidget): """ :param app: The application this tool will run in. - :type app: App + :type app: AppMain :param parent: Qt Parent :return: AppTool """ diff --git a/AppTools/ToolCalibration.py b/AppTools/ToolCalibration.py index 71bbd1e3..b220f1c0 100644 --- a/AppTools/ToolCalibration.py +++ b/AppTools/ToolCalibration.py @@ -1352,11 +1352,11 @@ class ToolCalibration(AppTool): try: if obj.kind.lower() == 'excellon': - self.app.new_object("excellon", str(obj_name), initialize_excellon) + self.app.app_obj.new_object("excellon", str(obj_name), initialize_excellon) elif obj.kind.lower() == 'gerber': - self.app.new_object("gerber", str(obj_name), initialize_gerber) + self.app.app_obj.new_object("gerber", str(obj_name), initialize_gerber) elif obj.kind.lower() == 'geometry': - self.app.new_object("geometry", str(obj_name), initialize_geometry) + self.app.app_obj.new_object("geometry", str(obj_name), initialize_geometry) except Exception as e: log.debug("ToolCalibration.new_calibrated_object() --> %s" % str(e)) return "Operation failed: %s" % str(e) diff --git a/AppTools/ToolCopperThieving.py b/AppTools/ToolCopperThieving.py index aa5510f7..a166866f 100644 --- a/AppTools/ToolCopperThieving.py +++ b/AppTools/ToolCopperThieving.py @@ -1474,7 +1474,7 @@ class ToolCopperThieving(AppTool): obj_name, separatpr, obj_extension = self.sm_object.options['name'].rpartition('.') name = '%s_%s.%s' % (obj_name, 'plating_mask', obj_extension) - self.app.new_object('gerber', name, obj_init, autoselected=False) + self.app.app_obj.new_object('gerber', name, obj_init, autoselected=False) # Register recent file self.app.file_opened.emit("gerber", name) diff --git a/AppTools/ToolCutOut.py b/AppTools/ToolCutOut.py index 45415b1c..196da2b6 100644 --- a/AppTools/ToolCutOut.py +++ b/AppTools/ToolCutOut.py @@ -700,7 +700,7 @@ class CutOut(AppTool): geo_obj.tools[1]['data']['depthperpass'] = self.maxdepth_entry.get_value() outname = cutout_obj.options["name"] + "_cutout" - self.app.new_object('geometry', outname, geo_init) + self.app.app_obj.new_object('geometry', outname, geo_init) cutout_obj.plot() self.app.inform.emit('[success] %s' % _("Any form CutOut operation finished.")) @@ -896,7 +896,7 @@ class CutOut(AppTool): geo_obj.tools[1]['data']['depthperpass'] = self.maxdepth_entry.get_value() outname = cutout_obj.options["name"] + "_cutout" - ret = self.app.new_object('geometry', outname, geo_init) + ret = self.app.app_obj.new_object('geometry', outname, geo_init) if ret != 'fail': # cutout_obj.plot() @@ -1056,7 +1056,7 @@ class CutOut(AppTool): geo_obj.tools[1]['data']['depthperpass'] = self.maxdepth_entry.get_value() outname = cutout_obj.options["name"] + "_cutout" - self.app.new_object('geometry', outname, geo_init) + self.app.app_obj.new_object('geometry', outname, geo_init) def cutting_geo(self, pos): self.cutting_dia = float(self.dia.get_value()) diff --git a/AppTools/ToolDblSided.py b/AppTools/ToolDblSided.py index a987ee55..1cf2f8ab 100644 --- a/AppTools/ToolDblSided.py +++ b/AppTools/ToolDblSided.py @@ -643,7 +643,7 @@ class DblSidedTool(AppTool): obj_inst.source_file = app_inst.export_excellon(obj_name=obj_inst.options['name'], local_use=obj_inst, filename=None, use_thread=False) - self.app.new_object("excellon", "Alignment Drills", obj_init) + self.app.app_obj.new_object("excellon", "Alignment Drills", obj_init) self.drill_values = '' self.app.inform.emit('[success] %s' % _("Excellon object with alignment drills created...")) @@ -686,7 +686,7 @@ class DblSidedTool(AppTool): py = 0.5 * (ymin + ymax) fcobj.mirror(axis, [px, py]) - self.app.object_changed.emit(fcobj) + self.app.app_obj.object_changed.emit(fcobj) fcobj.plot() self.app.inform.emit('[success] Gerber %s %s...' % (str(fcobj.options['name']), _("was mirrored"))) @@ -730,7 +730,7 @@ class DblSidedTool(AppTool): py = 0.5 * (ymin + ymax) fcobj.mirror(axis, [px, py]) - self.app.object_changed.emit(fcobj) + self.app.app_obj.object_changed.emit(fcobj) fcobj.plot() self.app.inform.emit('[success] Excellon %s %s...' % (str(fcobj.options['name']), _("was mirrored"))) @@ -767,7 +767,7 @@ class DblSidedTool(AppTool): py = 0.5 * (ymin + ymax) fcobj.mirror(axis, [px, py]) - self.app.object_changed.emit(fcobj) + self.app.app_obj.object_changed.emit(fcobj) fcobj.plot() self.app.inform.emit('[success] Geometry %s %s...' % (str(fcobj.options['name']), _("was mirrored"))) diff --git a/AppTools/ToolExtractDrills.py b/AppTools/ToolExtractDrills.py index d9ac5d4b..71e8fb41 100644 --- a/AppTools/ToolExtractDrills.py +++ b/AppTools/ToolExtractDrills.py @@ -655,7 +655,7 @@ class ToolExtractDrills(AppTool): obj_inst.source_file = self.app.export_excellon(obj_name=outname, local_use=obj_inst, filename=None, use_thread=False) - self.app.new_object("excellon", outname, obj_init) + self.app.app_obj.new_object("excellon", outname, obj_init) def on_hole_size_toggle(self, val): if val == "fixed": diff --git a/AppTools/ToolFilm.py b/AppTools/ToolFilm.py index a2ffd94f..a4209ce3 100644 --- a/AppTools/ToolFilm.py +++ b/AppTools/ToolFilm.py @@ -775,7 +775,7 @@ class Film(AppTool): new_obj.solid_geometry = deepcopy(punched_solid_geometry) outname = name + "_punched" - self.app.new_object('gerber', outname, init_func) + self.app.app_obj.new_object('gerber', outname, init_func) self.generate_positive_normal_film(outname, boxname, factor=factor, ftype=ftype) else: @@ -826,7 +826,7 @@ class Film(AppTool): new_obj.solid_geometry = deepcopy(punched_solid_geometry) outname = name + "_punched" - self.app.new_object('gerber', outname, init_func) + self.app.app_obj.new_object('gerber', outname, init_func) self.generate_positive_normal_film(outname, boxname, factor=factor, ftype=ftype) diff --git a/AppTools/ToolImage.py b/AppTools/ToolImage.py index 1c2f1a5e..5d520c78 100644 --- a/AppTools/ToolImage.py +++ b/AppTools/ToolImage.py @@ -288,7 +288,7 @@ class ToolImage(AppTool): name = outname or filename.split('/')[-1].split('\\')[-1] units = self.app.defaults['units'] - self.app.new_object(obj_type, name, obj_init) + self.app.app_obj.new_object(obj_type, name, obj_init) # Register recent file self.app.file_opened.emit("image", filename) diff --git a/AppTools/ToolInvertGerber.py b/AppTools/ToolInvertGerber.py index bcdb394f..6acc013b 100644 --- a/AppTools/ToolInvertGerber.py +++ b/AppTools/ToolInvertGerber.py @@ -293,7 +293,7 @@ class ToolInvertGerber(AppTool): new_obj.source_file = self.app.export_gerber(obj_name=outname, filename=None, local_use=new_obj, use_thread=False) - self.app.new_object('gerber', outname, init_func) + self.app.app_obj.new_object('gerber', outname, init_func) def reset_fields(self): self.gerber_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex())) diff --git a/AppTools/ToolNCC.py b/AppTools/ToolNCC.py index 65898339..0a637997 100644 --- a/AppTools/ToolNCC.py +++ b/AppTools/ToolNCC.py @@ -2881,12 +2881,12 @@ class NonCopperClear(AppTool, Gerber): # ########################################################################################### # Create the Job function and send it to the worker to be processed in another thread ####### # ########################################################################################### - def job_thread(app_obj): + def job_thread(a_obj): try: if rest_machining_choice is True: - app_obj.new_object("geometry", name, gen_clear_area_rest) + a_obj.app_obj.new_object("geometry", name, gen_clear_area_rest) else: - app_obj.new_object("geometry", name, gen_clear_area) + a_obj.app_obj.new_object("geometry", name, gen_clear_area) except grace: if run_threaded: proc.done() @@ -3881,9 +3881,9 @@ class NonCopperClear(AppTool, Gerber): def job_thread(app_obj): try: if rest_machining_choice is True: - app_obj.new_object("geometry", name, gen_clear_area_rest, plot=plot) + app_obj.app_obj.new_object("geometry", name, gen_clear_area_rest, plot=plot) else: - app_obj.new_object("geometry", name, gen_clear_area, plot=plot) + app_obj.app_obj.new_object("geometry", name, gen_clear_area, plot=plot) except grace: if run_threaded: proc.done() diff --git a/AppTools/ToolPDF.py b/AppTools/ToolPDF.py index 5e56092c..2e3cace3 100644 --- a/AppTools/ToolPDF.py +++ b/AppTools/ToolPDF.py @@ -205,7 +205,7 @@ class ToolPDF(AppTool): with self.app.proc_container.new(_("Rendering PDF layer #%d ...") % int(layer_nr)): - ret_val = self.app.new_object("excellon", outname, obj_init, autoselected=False) + ret_val = self.app.app_obj.new_object("excellon", outname, obj_init, autoselected=False) if ret_val == 'fail': self.app.inform.emit('[ERROR_NOTCL] %s' % _('Open PDF file failed.')) return @@ -278,7 +278,7 @@ class ToolPDF(AppTool): with self.app.proc_container.new(_("Rendering PDF layer #%d ...") % int(layer_nr)): - ret = self.app.new_object('gerber', outname, obj_init, autoselected=False) + ret = self.app.app_obj.new_object('gerber', outname, obj_init, autoselected=False) if ret == 'fail': self.app.inform.emit('[ERROR_NOTCL] %s' % _('Open PDF file failed.')) return diff --git a/AppTools/ToolPaint.py b/AppTools/ToolPaint.py index 5a88e1b5..bfa4891b 100644 --- a/AppTools/ToolPaint.py +++ b/AppTools/ToolPaint.py @@ -2315,7 +2315,7 @@ class ToolPaint(AppTool, Gerber): def job_thread(app_obj): try: - ret = app_obj.new_object("geometry", name, job_init, plot=plot) + ret = app_obj.app_obj.new_object("geometry", name, job_init, plot=plot) except grace: proc.done() return @@ -2823,9 +2823,9 @@ class ToolPaint(AppTool, Gerber): def job_thread(app_obj): try: if self.rest_cb.isChecked(): - ret = app_obj.new_object("geometry", name, gen_paintarea_rest_machining, plot=plot) + ret = app_obj.app_obj.new_object("geometry", name, gen_paintarea_rest_machining, plot=plot) else: - ret = app_obj.new_object("geometry", name, gen_paintarea, plot=plot) + ret = app_obj.app_obj.new_object("geometry", name, gen_paintarea, plot=plot) except grace: proc.done() return @@ -3320,9 +3320,9 @@ class ToolPaint(AppTool, Gerber): def job_thread(app_obj): try: if self.rest_cb.isChecked(): - ret = app_obj.new_object("geometry", name, gen_paintarea_rest_machining, plot=plot) + ret = app_obj.app_obj.new_object("geometry", name, gen_paintarea_rest_machining, plot=plot) else: - ret = app_obj.new_object("geometry", name, gen_paintarea, plot=plot) + ret = app_obj.app_obj.new_object("geometry", name, gen_paintarea, plot=plot) except grace: proc.done() return diff --git a/AppTools/ToolPanelize.py b/AppTools/ToolPanelize.py index 82e41491..3d774c97 100644 --- a/AppTools/ToolPanelize.py +++ b/AppTools/ToolPanelize.py @@ -794,9 +794,9 @@ class Panelize(AppTool): self.app.inform.emit('%s: %d' % (_("Generating panel... Spawning copies"), (int(rows * columns)))) if panel_source_obj.kind == 'excellon': - self.app.new_object("excellon", self.outname, job_init_excellon, plot=True, autoselected=True) + self.app.app_obj.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) + self.app.app_obj.new_object(panel_type, self.outname, job_init_geometry, plot=True, autoselected=True) if self.constrain_flag is False: self.app.inform.emit('[success] %s' % _("Panel done...")) diff --git a/AppTools/ToolPcbWizard.py b/AppTools/ToolPcbWizard.py index 108a99ea..a9fc6075 100644 --- a/AppTools/ToolPcbWizard.py +++ b/AppTools/ToolPcbWizard.py @@ -452,7 +452,7 @@ class PcbWizard(AppTool): # Object name name = self.outname - ret_val = self.app.new_object("excellon", name, obj_init, autoselected=False) + ret_val = self.app.app_obj.new_object("excellon", name, obj_init, autoselected=False) if ret_val == 'fail': self.app.inform.emit('[ERROR_NOTCL] %s' % _('Import Excellon file failed.')) return diff --git a/AppTools/ToolPunchGerber.py b/AppTools/ToolPunchGerber.py index 3dcc99f2..28d42ef4 100644 --- a/AppTools/ToolPunchGerber.py +++ b/AppTools/ToolPunchGerber.py @@ -591,7 +591,7 @@ class ToolPunchGerber(AppTool): new_obj.source_file = self.app.export_gerber(obj_name=outname, filename=None, local_use=new_obj, use_thread=False) - self.app.new_object('gerber', outname, init_func) + self.app.app_obj.new_object('gerber', outname, init_func) elif punch_method == 'fixed': punch_size = float(self.dia_entry.get_value()) @@ -705,7 +705,7 @@ class ToolPunchGerber(AppTool): new_obj.source_file = self.app.export_gerber(obj_name=outname, filename=None, local_use=new_obj, use_thread=False) - self.app.new_object('gerber', outname, init_func) + self.app.app_obj.new_object('gerber', outname, init_func) elif punch_method == 'ring': circ_r_val = self.circular_ring_entry.get_value() oblong_r_val = self.oblong_ring_entry.get_value() @@ -847,7 +847,7 @@ class ToolPunchGerber(AppTool): new_obj.source_file = self.app.export_gerber(obj_name=outname, filename=None, local_use=new_obj, use_thread=False) - self.app.new_object('gerber', outname, init_func) + self.app.app_obj.new_object('gerber', outname, init_func) elif punch_method == 'prop': prop_factor = self.factor_entry.get_value() / 100.0 @@ -986,7 +986,7 @@ class ToolPunchGerber(AppTool): new_obj.source_file = self.app.export_gerber(obj_name=outname, filename=None, local_use=new_obj, use_thread=False) - self.app.new_object('gerber', outname, init_func) + self.app.app_obj.new_object('gerber', outname, init_func) def reset_fields(self): self.gerber_object_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex())) diff --git a/AppTools/ToolRulesCheck.py b/AppTools/ToolRulesCheck.py index 54376bb3..7864964a 100644 --- a/AppTools/ToolRulesCheck.py +++ b/AppTools/ToolRulesCheck.py @@ -1625,7 +1625,7 @@ class RulesCheck(AppTool): new_obj.source_file = txt new_obj.read_only = True - self.app.new_object('document', name='Rules Check results', initialize=init, plot=False) + self.app.app_obj.new_object('document', name='Rules Check results', initialize=init, plot=False) def reset_fields(self): # self.object_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex())) diff --git a/AppTools/ToolSolderPaste.py b/AppTools/ToolSolderPaste.py index 2dce9d2d..cd9fbc08 100644 --- a/AppTools/ToolSolderPaste.py +++ b/AppTools/ToolSolderPaste.py @@ -9,7 +9,7 @@ from AppTool import AppTool from Common import LoudDict from AppGUI.GUIElements import FCComboBox, FCEntry, FCTable, \ FCInputDialog, FCDoubleSpinner, FCSpinner, FCFileSaveDialog -from App import log +from AppMain import log from camlib import distance from AppEditors.FlatCAMTextEditor import TextEditor @@ -1257,7 +1257,7 @@ class SolderPaste(AppTool): if use_thread: def job_thread(app_obj): try: - app_obj.new_object("geometry", name + "_solderpaste", geo_init) + app_obj.app_obj.new_object("geometry", name + "_solderpaste", geo_init) except Exception as e: log.error("SolderPaste.on_create_geo() --> %s" % str(e)) proc.done() @@ -1271,7 +1271,7 @@ class SolderPaste(AppTool): # Background self.app.worker_task.emit({'fcn': job_thread, 'params': [self.app]}) else: - self.app.new_object("geometry", name + "_solderpaste", geo_init) + self.app.app_obj.new_object("geometry", name + "_solderpaste", geo_init) def on_create_gcode_click(self, signal): """ @@ -1331,7 +1331,7 @@ class SolderPaste(AppTool): self.app.inform.emit(msg) return - # Object initialization function for app.new_object() + # Object initialization function for app.app_obj.new_object() # RUNNING ON SEPARATE THREAD! def job_init(job_obj): assert job_obj.kind == 'cncjob', \ @@ -1388,7 +1388,7 @@ class SolderPaste(AppTool): # To be run in separate thread def job_thread(app_obj): with self.app.proc_container.new("Generating CNC Code"): - if app_obj.new_object("cncjob", name, job_init) != 'fail': + if app_obj.app_obj.new_object("cncjob", name, job_init) != 'fail': app_obj.inform.emit('[success] [success] %s: %s' % (_("ToolSolderPaste CNCjob created"), name)) # Create a promise with the name @@ -1396,7 +1396,7 @@ class SolderPaste(AppTool): # Send to worker self.app.worker_task.emit({'fcn': job_thread, 'params': [self.app]}) else: - self.app.new_object("cncjob", name, job_init) + self.app.app_obj.new_object("cncjob", name, job_init) def on_view_gcode(self): """ diff --git a/AppTools/ToolSub.py b/AppTools/ToolSub.py index c1f14d64..b80bea1c 100644 --- a/AppTools/ToolSub.py +++ b/AppTools/ToolSub.py @@ -456,7 +456,7 @@ class ToolSub(AppTool): grb_obj.follow_geometry = deepcopy(follow_buff) with self.app.proc_container.new(_("Generating new object ...")): - ret = self.app.new_object('gerber', outname, obj_init, autoselected=False) + ret = self.app.app_obj.new_object('gerber', outname, obj_init, autoselected=False) if ret == 'fail': self.app.inform.emit('[ERROR_NOTCL] %s' % _('Generating new object failed.')) @@ -659,7 +659,7 @@ class ToolSub(AppTool): geo_obj.multigeo = False with self.app.proc_container.new(_("Generating new object ...")): - ret = self.app.new_object('geometry', outname, obj_init, autoselected=False) + ret = self.app.app_obj.new_object('geometry', outname, obj_init, autoselected=False) if ret == 'fail': self.app.inform.emit('[ERROR_NOTCL] %s' % _('Generating new object failed.')) diff --git a/AppTools/ToolTransform.py b/AppTools/ToolTransform.py index f0619ddb..41e6ff91 100644 --- a/AppTools/ToolTransform.py +++ b/AppTools/ToolTransform.py @@ -702,7 +702,7 @@ class ToolTransform(AppTool): self.app.inform.emit(_("CNCJob objects can't be rotated.")) else: sel_obj.rotate(-num, point=(px, py)) - self.app.object_changed.emit(sel_obj) + self.app.app_obj.object_changed.emit(sel_obj) # add information to the object that it was changed and how much sel_obj.options['rotate'] = num @@ -776,7 +776,7 @@ class ToolTransform(AppTool): else: sel_obj.options['mirror_x'] = True self.app.inform.emit('[success] %s...' % _('Flip on the X axis done')) - self.app.object_changed.emit(sel_obj) + self.app.app_obj.object_changed.emit(sel_obj) sel_obj.plot() except Exception as e: self.app.inform.emit('[ERROR_NOTCL] %s %s, %s.' % @@ -825,7 +825,7 @@ class ToolTransform(AppTool): sel_obj.skew(0, num, point=(xminimal, yminimal)) # add information to the object that it was changed and how much sel_obj.options['skew_y'] = num - self.app.object_changed.emit(sel_obj) + self.app.app_obj.object_changed.emit(sel_obj) sel_obj.plot() self.app.inform.emit('[success] %s %s %s...' % (_('Skew on the'), str(axis), _("axis done"))) except Exception as e: @@ -878,7 +878,7 @@ class ToolTransform(AppTool): # add information to the object that it was changed and how much sel_obj.options['scale_x'] = xfactor sel_obj.options['scale_y'] = yfactor - self.app.object_changed.emit(sel_obj) + self.app.app_obj.object_changed.emit(sel_obj) sel_obj.plot() self.app.inform.emit('[success] %s %s %s...' % (_('Scale on the'), str(axis), _('axis done'))) @@ -908,7 +908,7 @@ class ToolTransform(AppTool): sel_obj.offset((0, num)) # add information to the object that it was changed and how much sel_obj.options['offset_y'] = num - self.app.object_changed.emit(sel_obj) + self.app.app_obj.object_changed.emit(sel_obj) sel_obj.plot() self.app.inform.emit('[success] %s %s %s...' % (_('Offset on the'), str(axis), _('axis done'))) @@ -942,7 +942,7 @@ class ToolTransform(AppTool): elif sel_obj.kind.lower() == 'geometry': sel_obj.buffer(value, join, factor) - self.app.object_changed.emit(sel_obj) + self.app.app_obj.object_changed.emit(sel_obj) sel_obj.plot() self.app.inform.emit('[success] %s...' % _('Buffer done')) diff --git a/CHANGELOG.md b/CHANGELOG.md index a312d76f..75255b79 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ CHANGELOG for FlatCAM beta - removed reference to postprocessors and replaced it with preprocessors - more refactoring class names - moved some of the methods from the App class to the ObjectCollection class +- moved all the new_object related methods in their own class AppObjects.AppObject 17.05.2020 @@ -4239,7 +4240,7 @@ still copper leftovers. - modified generate_milling method which had issues from the Python3 port (it could not sort the tools due of dict to dict comparison no longer possible). - modified the 'default' preprocessor in order to include a space between the value of Xcoord and the following Y - made optional the using of threads for the milling command; by default it is OFF (False) because in the current configuration it creates issues when it is using threads -- modified the Panelize function and Tcl command Panelize. It was having issues due to multithreading (kept trying to modify a dictionary in redraw() method)and automatically selecting the last created object (feature introduced by me). I've added a parameter to the new_object method, named autoselected (by default it is True) and in the panelize method I initialized it with False. +- modified the Panelize function and Tcl command Panelize. It was having issues due to multithreading (kept trying to modify a dictionary in redraw() method)and automatically selecting the last created object (feature introduced by me). I've added a parameter to the app_obj.new_object method, named autoselected (by default it is True) and in the panelize method I initialized it with False. By initializing the plot parameter with False for the temporary objects, I have increased dramatically the generation speed of the panel because now the temporary object are no longer ploted which consumed time. - replaced log.warn() with log.warning() in camlib.py. Reason: deprecated - fixed the issue that the "Defaults" button was having no effect when clicked and Options Combo was in Project Options diff --git a/FlatCAM.py b/FlatCAM.py index 1a309537..0bb79f1f 100644 --- a/FlatCAM.py +++ b/FlatCAM.py @@ -3,7 +3,7 @@ import os from PyQt5 import QtWidgets from PyQt5.QtCore import QSettings, Qt -from App import App +from AppMain import App from AppGUI import VisPyPatches from multiprocessing import freeze_support diff --git a/tclCommands/TclCommand.py b/tclCommands/TclCommand.py index d89eb0c4..5c008671 100644 --- a/tclCommands/TclCommand.py +++ b/tclCommands/TclCommand.py @@ -1,6 +1,6 @@ import sys import re -import App +import AppMain import abc import collections from PyQt5 import QtCore @@ -53,7 +53,7 @@ class TclCommand(object): if self.app is None: raise TypeError('Expected app to be FlatCAMApp instance.') - if not isinstance(self.app, App.App): + if not isinstance(self.app, AppMain.App): raise TypeError('Expected FlatCAMApp, got %s.' % type(app)) self.log = self.app.log diff --git a/tclCommands/TclCommandAlignDrill.py b/tclCommands/TclCommandAlignDrill.py index ebf2099d..250d82be 100644 --- a/tclCommands/TclCommandAlignDrill.py +++ b/tclCommands/TclCommandAlignDrill.py @@ -189,7 +189,7 @@ class TclCommandAlignDrill(TclCommandSignaled): px = 0.5 * (xmin + xmax) py = 0.5 * (ymin + ymax) - obj.app.new_object("excellon", outname, alligndrill_init_me, plot=False) + obj.app.app_obj.new_object("excellon", outname, alligndrill_init_me, plot=False) except Exception as e: return "Operation failed: %s" % str(e) @@ -205,7 +205,7 @@ class TclCommandAlignDrill(TclCommandSignaled): try: px = dist py = dist - obj.app.new_object("excellon", outname, alligndrill_init_me, plot=False) + obj.app.app_obj.new_object("excellon", outname, alligndrill_init_me, plot=False) except Exception as e: return "Operation failed: %s" % str(e) diff --git a/tclCommands/TclCommandAlignDrillGrid.py b/tclCommands/TclCommandAlignDrillGrid.py index 6fe6188b..e560290d 100644 --- a/tclCommands/TclCommandAlignDrillGrid.py +++ b/tclCommands/TclCommandAlignDrillGrid.py @@ -111,4 +111,4 @@ class TclCommandAlignDrillGrid(TclCommandSignaled): init_obj.create_geometry() # Create the new object - self.app.new_object("excellon", outname, aligndrillgrid_init_me, plot=False) + self.app.app_obj.new_object("excellon", outname, aligndrillgrid_init_me, plot=False) diff --git a/tclCommands/TclCommandBbox.py b/tclCommands/TclCommandBbox.py index 012fe433..c8fd1273 100644 --- a/tclCommands/TclCommandBbox.py +++ b/tclCommands/TclCommandBbox.py @@ -100,6 +100,6 @@ class TclCommandBbox(TclCommand): bounding_box = bounding_box.envelope geo_obj.solid_geometry = bounding_box - self.app.new_object("geometry", args['outname'], geo_init, plot=False) + self.app.app_obj.new_object("geometry", args['outname'], geo_init, plot=False) except Exception as e: return "Operation failed: %s" % str(e) diff --git a/tclCommands/TclCommandCutout.py b/tclCommands/TclCommandCutout.py index f780a8cf..ddfd0614 100644 --- a/tclCommands/TclCommandCutout.py +++ b/tclCommands/TclCommandCutout.py @@ -137,7 +137,7 @@ class TclCommandCutout(TclCommand): geo_obj.solid_geometry = cascaded_union([LineString(segment) for segment in cuts]) try: - self.app.new_object("geometry", outname, geo_init_me, plot=False) + self.app.app_obj.new_object("geometry", outname, geo_init_me, plot=False) self.app.inform.emit("[success] Rectangular-form Cutout operation finished.") except Exception as e: return "Operation failed: %s" % str(e) diff --git a/tclCommands/TclCommandDrillcncjob.py b/tclCommands/TclCommandDrillcncjob.py index 39d2f28e..95b271d8 100644 --- a/tclCommands/TclCommandDrillcncjob.py +++ b/tclCommands/TclCommandDrillcncjob.py @@ -343,4 +343,4 @@ class TclCommandDrillcncjob(TclCommandSignaled): job_obj.gcode_parse() job_obj.create_geometry() - self.app.new_object("cncjob", args['outname'], job_init, plot=False) + self.app.app_obj.new_object("cncjob", args['outname'], job_init, plot=False) diff --git a/tclCommands/TclCommandExteriors.py b/tclCommands/TclCommandExteriors.py index de4e6901..00461aeb 100644 --- a/tclCommands/TclCommandExteriors.py +++ b/tclCommands/TclCommandExteriors.py @@ -66,4 +66,4 @@ class TclCommandExteriors(TclCommandSignaled): geo_obj.solid_geometry = obj_exteriors obj_exteriors = obj.get_exteriors() - self.app.new_object('geometry', outname, geo_init, plot=False) + self.app.app_obj.new_object('geometry', outname, geo_init, plot=False) diff --git a/tclCommands/TclCommandGeoCutout.py b/tclCommands/TclCommandGeoCutout.py index 91a7f660..9a1c29bc 100644 --- a/tclCommands/TclCommandGeoCutout.py +++ b/tclCommands/TclCommandGeoCutout.py @@ -300,11 +300,8 @@ class TclCommandGeoCutout(TclCommandSignaled): app_obj.inform.emit("[success] %s" % _("Any-form Cutout operation finished.")) - self.app.new_object('geometry', outname, geo_init, plot=False) + self.app.app_obj.new_object('geometry', outname, geo_init, plot=False) - # cutout_obj.plot() - # self.app.inform.emit("[success] Any-form Cutout operation finished.") - # self.app.plots_updated.emit() elif cutout_obj.kind == 'gerber': def geo_init(geo_obj, app_obj): @@ -358,7 +355,7 @@ class TclCommandGeoCutout(TclCommandSignaled): geo_obj.options['ymax'] = cutout_obj.options['ymax'] app_obj.inform.emit("[success] %s" % _("Any-form Cutout operation finished.")) - self.app.new_object('geometry', outname, geo_init, plot=False) + self.app.app_obj.new_object('geometry', outname, geo_init, plot=False) cutout_obj = self.app.collection.get_by_name(outname) else: diff --git a/tclCommands/TclCommandImportSvg.py b/tclCommands/TclCommandImportSvg.py index 9ef67e27..c65b46d8 100644 --- a/tclCommands/TclCommandImportSvg.py +++ b/tclCommands/TclCommandImportSvg.py @@ -76,7 +76,7 @@ class TclCommandImportSvg(TclCommandSignaled): with self.app.proc_container.new("Import SVG"): # Object creation - self.app.new_object(obj_type, outname, obj_init, plot=False) + self.app.app_obj.new_object(obj_type, outname, obj_init, plot=False) # Register recent file self.app.file_opened.emit("svg", filename) diff --git a/tclCommands/TclCommandInteriors.py b/tclCommands/TclCommandInteriors.py index a7655204..9cd60367 100644 --- a/tclCommands/TclCommandInteriors.py +++ b/tclCommands/TclCommandInteriors.py @@ -67,4 +67,4 @@ class TclCommandInteriors(TclCommandSignaled): geo_obj.solid_geometry = obj_interiors obj_interiors = obj.get_interiors() - self.app.new_object('geometry', outname, geo_init) + self.app.app_obj.new_object('geometry', outname, geo_init) diff --git a/tclCommands/TclCommandJoinExcellon.py b/tclCommands/TclCommandJoinExcellon.py index 0e25c829..e3c342e8 100644 --- a/tclCommands/TclCommandJoinExcellon.py +++ b/tclCommands/TclCommandJoinExcellon.py @@ -65,6 +65,6 @@ class TclCommandJoinExcellon(TclCommand): ExcellonObject.merge(objs, obj_, decimals=self.app.decimals) if objs and len(objs) >= 2: - self.app.new_object("excellon", outname, initialize, plot=False) + self.app.app_obj.new_object("excellon", outname, initialize, plot=False) else: return "No Excellon objects to be joined or less than two Excellon objects specified for merging." diff --git a/tclCommands/TclCommandJoinGeometry.py b/tclCommands/TclCommandJoinGeometry.py index cb119856..44cfd9b2 100644 --- a/tclCommands/TclCommandJoinGeometry.py +++ b/tclCommands/TclCommandJoinGeometry.py @@ -65,6 +65,6 @@ class TclCommandJoinGeometry(TclCommand): GeometryObject.merge(objs, obj_) if objs and len(objs) >= 2: - self.app.new_object("geometry", outname, initialize, plot=False) + self.app.app_obj.new_object("geometry", outname, initialize, plot=False) else: return "No Geometry objects to be joined or less than two Geometry objects specified for merging." diff --git a/tclCommands/TclCommandNewExcellon.py b/tclCommands/TclCommandNewExcellon.py index 61689d6f..c5072ffb 100644 --- a/tclCommands/TclCommandNewExcellon.py +++ b/tclCommands/TclCommandNewExcellon.py @@ -58,4 +58,4 @@ class TclCommandNewExcellon(TclCommandSignaled): name = args['name'] else: name = 'new_exc' - self.app.new_object('excellon', name, lambda x, y: None, plot=False) + self.app.app_obj.new_object('excellon', name, lambda x, y: None, plot=False) diff --git a/tclCommands/TclCommandNewGeometry.py b/tclCommands/TclCommandNewGeometry.py index 8fee996e..08c3c7ce 100644 --- a/tclCommands/TclCommandNewGeometry.py +++ b/tclCommands/TclCommandNewGeometry.py @@ -52,4 +52,4 @@ class TclCommandNewGeometry(TclCommandSignaled): else: name = 'new_geo' - self.app.new_object('geometry', str(name), lambda x, y: None, plot=False) + self.app.app_obj.new_object('geometry', str(name), lambda x, y: None, plot=False) diff --git a/tclCommands/TclCommandNewGerber.py b/tclCommands/TclCommandNewGerber.py index 9c162965..3a63422c 100644 --- a/tclCommands/TclCommandNewGerber.py +++ b/tclCommands/TclCommandNewGerber.py @@ -75,4 +75,4 @@ class TclCommandNewGerber(TclCommandSignaled): except KeyError: pass - self.app.new_object('gerber', name, initialize, plot=False) + self.app.app_obj.new_object('gerber', name, initialize, plot=False) diff --git a/tclCommands/TclCommandNregions.py b/tclCommands/TclCommandNregions.py index 3663f0f0..e4ba7ac5 100644 --- a/tclCommands/TclCommandNregions.py +++ b/tclCommands/TclCommandNregions.py @@ -100,7 +100,7 @@ class TclCommandNregions(TclCommand): non_copper = bounding_box.difference(geo) geo_obj.solid_geometry = non_copper - self.app.new_object("geometry", args['outname'], geo_init, plot=False) + self.app.app_obj.new_object("geometry", args['outname'], geo_init, plot=False) except Exception as e: return "Operation failed: %s" % str(e) diff --git a/tclCommands/TclCommandOpenDXF.py b/tclCommands/TclCommandOpenDXF.py index 4e46d2a4..87ab0639 100644 --- a/tclCommands/TclCommandOpenDXF.py +++ b/tclCommands/TclCommandOpenDXF.py @@ -77,10 +77,10 @@ class TclCommandOpenDXF(TclCommandSignaled): with self.app.proc_container.new("Open DXF"): # Object creation - ret_val = self.app.new_object(obj_type, outname, obj_init, plot=False) + ret_val = self.app.app_obj.new_object(obj_type, outname, obj_init, plot=False) if ret_val == 'fail': filename = self.app.defaults['global_tcl_path'] + '/' + outname - ret_val = self.app.new_object(obj_type, outname, obj_init, plot=False) + ret_val = self.app.app_obj.new_object(obj_type, outname, obj_init, plot=False) self.app.shell.append_output( "No path provided or path is wrong. Using the default Path... \n") diff --git a/tclCommands/TclCommandOpenSVG.py b/tclCommands/TclCommandOpenSVG.py index 9c2b514e..bfe2784e 100644 --- a/tclCommands/TclCommandOpenSVG.py +++ b/tclCommands/TclCommandOpenSVG.py @@ -77,10 +77,10 @@ class TclCommandOpenSVG(TclCommandSignaled): with self.app.proc_container.new("Import SVG"): # Object creation - ret_val = self.app.new_object(obj_type, outname, obj_init, plot=False) + ret_val = self.app.app_obj.new_object(obj_type, outname, obj_init, plot=False) if ret_val == 'fail': filename = self.app.defaults['global_tcl_path'] + '/' + outname - ret_val = self.app.new_object(obj_type, outname, obj_init, plot=False) + ret_val = self.app.app_obj.new_object(obj_type, outname, obj_init, plot=False) self.app.shell.append_output( "No path provided or path is wrong. Using the default Path... \n") if ret_val == 'fail': diff --git a/tclCommands/TclCommandPanelize.py b/tclCommands/TclCommandPanelize.py index 99fd0bc5..af6f1a0f 100644 --- a/tclCommands/TclCommandPanelize.py +++ b/tclCommands/TclCommandPanelize.py @@ -167,19 +167,19 @@ class TclCommandPanelize(TclCommand): # for col in range(columns): # local_outname = outname + ".tmp." + str(col) + "." + str(row) # if isinstance(obj, ExcellonObject): - # self.app.new_object("excellon", local_outname, initialize_local_excellon, plot=False, + # self.app.app_obj.new_object("excellon", local_outname, initialize_local_excellon, plot=False, # autoselected=False) # else: - # self.app.new_object("geometry", local_outname, initialize_local, plot=False, + # self.app.app_obj.new_object("geometry", local_outname, initialize_local, plot=False, # autoselected=False) # # currentx += lenghtx # currenty += lenghty # # if isinstance(obj, ExcellonObject): - # self.app.new_object("excellon", outname, initialize_excellon) + # self.app.app_obj.new_object("excellon", outname, initialize_excellon) # else: - # self.app.new_object("geometry", outname, initialize_geometry) + # self.app.app_obj.new_object("geometry", outname, initialize_geometry) # # # deselect all to avoid delete selected object when run delete from shell # self.app.collection.set_all_inactive() @@ -287,9 +287,9 @@ class TclCommandPanelize(TclCommand): currenty += lenghty if obj.kind == 'excellon': - self.app.new_object("excellon", outname, job_init_excellon, plot=False, autoselected=True) + self.app.app_obj.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) + self.app.app_obj.new_object("geometry", outname, job_init_geometry, plot=False, autoselected=True) if threaded is True: proc = self.app.proc_container.new("Generating panel ... Please wait.") diff --git a/tclCommands/TclCommandWriteGCode.py b/tclCommands/TclCommandWriteGCode.py index 331fa8bc..dae8bdbb 100644 --- a/tclCommands/TclCommandWriteGCode.py +++ b/tclCommands/TclCommandWriteGCode.py @@ -80,15 +80,15 @@ class TclCommandWriteGCode(TclCommandSignaled): # This is not needed any more? All targets should be present. # If there are promised objects, wait until all promises have been fulfilled. # if self.collection.has_promises(): - # def write_gcode_on_object(new_object): + # def write_gcode_on_object(app_obj.new_object): # self.log.debug("write_gcode_on_object(): Disconnecting %s" % write_gcode_on_object) - # self.new_object_available.disconnect(write_gcode_on_object) + # self.app_obj.new_object_available.disconnect(write_gcode_on_object) # write_gcode(obj_name, filename, preamble, postamble) # # # Try again when a new object becomes available. # self.log.debug("write_gcode(): Collection has promises. Queued for %s." % obj_name) # self.log.debug("write_gcode(): Queued function: %s" % write_gcode_on_object) - # self.new_object_available.connect(write_gcode_on_object) + # self.app_obj.new_object_available.connect(write_gcode_on_object) # # return From d61ca10e7506315909c44beb41ccaec89010bc3e Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Mon, 18 May 2020 18:45:53 +0300 Subject: [PATCH 48/99] - more refactoring; solved some issues introduced by the refactoring --- AppMain.py => App.py | 32 +++--- AppEditors/FlatCAMGeoEditor.py | 5 +- AppEditors/FlatCAMGrbEditor.py | 4 +- AppGUI/MainGUI.py | 98 ++++++++----------- AppGUI/ObjectUI.py | 4 +- AppGUI/preferences/PreferencesUIManager.py | 2 +- .../general/GeneralGUIPrefGroupUI.py | 14 +-- AppObjects/AppObject.py | 6 +- AppObjects/FlatCAMExcellon.py | 2 +- AppObjects/FlatCAMGeometry.py | 2 +- AppObjects/FlatCAMGerber.py | 2 +- AppObjects/ObjectCollection.py | 4 +- AppTool.py => AppTools/AppTool.py | 18 ++-- AppTools/ToolAlignObjects.py | 6 +- AppTools/ToolCalculators.py | 2 +- AppTools/ToolCalibration.py | 6 +- AppTools/ToolCopperThieving.py | 4 +- AppTools/ToolCorners.py | 4 +- AppTools/ToolCutOut.py | 2 +- AppTools/ToolDblSided.py | 8 +- AppTools/ToolDistance.py | 2 +- AppTools/ToolDistanceMin.py | 5 +- AppTools/ToolExtractDrills.py | 2 +- AppTools/ToolFiducials.py | 4 +- AppTools/ToolFilm.py | 4 +- AppTools/ToolImage.py | 2 +- AppTools/ToolInvertGerber.py | 2 +- AppTools/ToolMove.py | 2 +- AppTools/ToolNCC.py | 2 +- AppTools/ToolOptimal.py | 2 +- AppTools/ToolPDF.py | 2 +- AppTools/ToolPaint.py | 2 +- AppTools/ToolPanelize.py | 2 +- AppTools/ToolPcbWizard.py | 2 +- AppTools/ToolProperties.py | 2 +- AppTools/ToolPunchGerber.py | 2 +- AppTools/ToolQRCode.py | 2 +- AppTools/ToolRulesCheck.py | 4 +- AppTools/ToolSolderPaste.py | 4 +- AppTools/ToolSub.py | 6 +- AppTools/ToolTransform.py | 2 +- CHANGELOG.md | 1 + Common.py | 2 +- FlatCAM.py | 2 +- camlib.py | 2 +- defaults.py | 2 +- tclCommands/TclCommand.py | 4 +- 47 files changed, 136 insertions(+), 159 deletions(-) rename AppMain.py => App.py (99%) rename AppTool.py => AppTools/AppTool.py (97%) diff --git a/AppMain.py b/App.py similarity index 99% rename from AppMain.py rename to App.py index 297707c6..b22aa467 100644 --- a/AppMain.py +++ b/App.py @@ -50,7 +50,7 @@ from AppDatabase import ToolsDB2 from vispy.gloo.util import _screenshot from vispy.io import write_png -# FlatCAM AppObjects +# FlatCAM Objects from defaults import FlatCAMDefaults from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI from AppGUI.preferences.PreferencesUIManager import PreferencesUIManager @@ -1896,7 +1896,7 @@ class App(QtCore.QObject): self.calculator_tool = ToolCalculator(self) self.calculator_tool.install(icon=QtGui.QIcon(self.resource_location + '/calculator16.png'), separator=True) - self.sub_tool = ToolSub(app=self) + self.sub_tool = ToolSub(self) self.sub_tool.install(icon=QtGui.QIcon(self.resource_location + '/sub32.png'), pos=self.ui.menutool, separator=True) @@ -2049,9 +2049,6 @@ class App(QtCore.QObject): self.ui.zoom_out_btn.triggered.connect(lambda: self.plotcanvas.zoom(1.5)) # Edit Toolbar Signals - self.ui.newgeo_btn.triggered.connect(self.app_obj.new_geometry_object) - self.ui.newgrb_btn.triggered.connect(self.app_obj.new_gerber_object) - self.ui.newexc_btn.triggered.connect(self.app_obj.new_excellon_object) self.ui.editgeo_btn.triggered.connect(self.object2editor) self.ui.update_obj_btn.triggered.connect(lambda: self.editor2object()) self.ui.copy_btn.triggered.connect(self.on_copy_command) @@ -3586,7 +3583,7 @@ class App(QtCore.QObject): if len(objs) < 2: self.inform.emit('[ERROR_NOTCL] %s: %d' % - (_("At least two objects are required for join. AppObjects currently selected"), len(objs))) + (_("At least two objects are required for join. Objects currently selected"), len(objs))) return 'fail' for obj in objs: @@ -3645,7 +3642,7 @@ class App(QtCore.QObject): if len(objs) < 2: self.inform.emit('[ERROR_NOTCL] %s: %d' % - (_("At least two objects are required for join. AppObjects currently selected"), len(objs))) + (_("At least two objects are required for join. Objects currently selected"), len(objs))) return 'fail' def initialize(exc_obj, app): @@ -3673,7 +3670,7 @@ class App(QtCore.QObject): if len(objs) < 2: self.inform.emit('[ERROR_NOTCL] %s: %d' % - (_("At least two objects are required for join. AppObjects currently selected"), len(objs))) + (_("At least two objects are required for join. Objects currently selected"), len(objs))) return 'fail' def initialize(grb_obj, app): @@ -5793,7 +5790,7 @@ class App(QtCore.QObject): else: self.plotcanvas.auto_adjust_axes() - self.on_zoom_fit(None) + self.on_zoom_fit() self.collection.update_view() # self.inform.emit(_("Plots updated ...")) @@ -6285,7 +6282,7 @@ class App(QtCore.QObject): for obj in self.all_objects_list: # ScriptObject and DocumentObject objects can't be selected - if isinstance(obj, ScriptObject) or isinstance(obj, DocumentObject): + if obj.kind == 'script' or obj.kind == 'document': continue if key == 'multisel' and obj.options['name'] in self.objects_under_the_click_list: @@ -7596,8 +7593,6 @@ class App(QtCore.QObject): Will create a new script file and open it in the Code Editor :param silent: if True will not display status messages - :param name: if specified will be the name of the new script - :param text: pass a source file to the newly created script to be loaded in it :return: None """ if silent is False: @@ -9465,8 +9460,8 @@ 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) + \ - "&os=" + str(self.os) + "&" + urllib.parse.urlencode(no_ststs_dict["global_ststs"]) + full_url = App.version_url + "?s=" + str(self.defaults['global_serial']) + "&v=" + str(self.version) + full_url += "&os=" + str(self.os) + "&" + urllib.parse.urlencode(no_ststs_dict["global_ststs"]) App.log.debug("Checking for updates @ %s" % full_url) # ## Get the data @@ -9569,13 +9564,12 @@ class App(QtCore.QObject): # will use the default Matplotlib axes self.hover_shapes = ShapeCollectionLegacy(obj=self, app=self, name='hover') - def on_zoom_fit(self, event): + def on_zoom_fit(self): """ Callback for zoom-fit request. This can be either from the corresponding toolbar button or the '1' key when the canvas is focused. Calls ``self.adjust_axes()`` with axes limits from the geometry bounds of all objects. - :param event: Ignored. :return: None """ if self.is_legacy is False: @@ -9644,7 +9638,7 @@ class App(QtCore.QObject): """ Enable plots - :param objects: list of AppObjects to be enabled + :param objects: list of Objects to be enabled :return: """ log.debug("Enabling plots ...") @@ -9685,7 +9679,7 @@ class App(QtCore.QObject): """ Disables plots - :param objects: list of AppObjects to be disabled + :param objects: list of Objects to be disabled :return: """ @@ -9734,7 +9728,7 @@ class App(QtCore.QObject): """ Toggle plots visibility - :param objects: list of AppObjects for which to be toggled the visibility + :param objects: list of Objects for which to be toggled the visibility :return: None """ diff --git a/AppEditors/FlatCAMGeoEditor.py b/AppEditors/FlatCAMGeoEditor.py index aeaf24ec..679f5f03 100644 --- a/AppEditors/FlatCAMGeoEditor.py +++ b/AppEditors/FlatCAMGeoEditor.py @@ -15,10 +15,9 @@ from PyQt5 import QtGui, QtCore, QtWidgets from PyQt5.QtCore import Qt, QSettings from camlib import distance, arc, three_point_circle, Geometry, FlatCAMRTreeStorage -from AppTool import AppTool -from AppGUI.ObjectUI import RadioSet +from AppTools.AppTool import AppTool from AppGUI.GUIElements import OptionalInputSection, FCCheckBox, FCEntry, FCComboBox, FCTextAreaRich, \ - FCTable, FCDoubleSpinner, FCButton, EvalEntry2, FCInputDialog, FCTree + FCDoubleSpinner, FCButton, FCInputDialog, FCTree from AppParsers.ParseFont import * from shapely.geometry import LineString, LinearRing, MultiLineString, Polygon, MultiPolygon diff --git a/AppEditors/FlatCAMGrbEditor.py b/AppEditors/FlatCAMGrbEditor.py index 0053ac5a..0fdb8b8d 100644 --- a/AppEditors/FlatCAMGrbEditor.py +++ b/AppEditors/FlatCAMGrbEditor.py @@ -14,15 +14,13 @@ import shapely.affinity as affinity from vispy.geometry import Rect -import threading -import time from copy import copy, deepcopy import logging from camlib import distance, arc, three_point_circle from AppGUI.GUIElements import FCEntry, FCComboBox, FCTable, FCDoubleSpinner, FCSpinner, RadioSet, \ EvalEntry2, FCInputDialog, FCButton, OptionalInputSection, FCCheckBox -from AppTool import AppTool +from AppTools.AppTool import AppTool import numpy as np from numpy.linalg import norm as numpy_norm diff --git a/AppGUI/MainGUI.py b/AppGUI/MainGUI.py index 147c90b2..ca0c9524 100644 --- a/AppGUI/MainGUI.py +++ b/AppGUI/MainGUI.py @@ -581,7 +581,7 @@ class MainGUI(QtWidgets.QMainWindow): self.geo_cutpath_menuitem = self.geo_editor_menu.addAction( QtGui.QIcon(self.app.resource_location + '/cutpath16.png'), _('Cut Path\tX')) # self.move_menuitem = self.menu.addAction( - # QtGui.QIcon(self.app.resource_location + '/move16.png'), "Move AppObjects 'm'") + # QtGui.QIcon(self.app.resource_location + '/move16.png'), "Move Objects 'm'") self.geo_copy_menuitem = self.geo_editor_menu.addAction( QtGui.QIcon(self.app.resource_location + '/copy16.png'), _("Copy Geom\tC")) self.geo_delete_menuitem = self.geo_editor_menu.addAction( @@ -789,9 +789,9 @@ class MainGUI(QtWidgets.QMainWindow): self.toolbarfile.setObjectName('File_TB') self.addToolBar(self.toolbarfile) - self.toolbargeo = QtWidgets.QToolBar(_('Edit Toolbar')) - self.toolbargeo.setObjectName('Edit_TB') - self.addToolBar(self.toolbargeo) + self.toolbaredit = QtWidgets.QToolBar(_('Edit Toolbar')) + self.toolbaredit.setObjectName('Edit_TB') + self.addToolBar(self.toolbaredit) self.toolbarview = QtWidgets.QToolBar(_('View Toolbar')) self.toolbarview.setObjectName('View_TB') @@ -845,37 +845,30 @@ class MainGUI(QtWidgets.QMainWindow): # ######################################################################## # ########################## Edit Toolbar# ############################### # ######################################################################## - self.newgeo_btn = self.toolbargeo.addAction( - QtGui.QIcon(self.app.resource_location + '/new_file_geo32.png'), _("New Blank Geometry")) - self.newgrb_btn = self.toolbargeo.addAction( - QtGui.QIcon(self.app.resource_location + '/new_file_grb32.png'), _("New Blank Gerber")) - self.newexc_btn = self.toolbargeo.addAction( - QtGui.QIcon(self.app.resource_location + '/new_file_exc32.png'), _("New Blank Excellon")) - self.toolbargeo.addSeparator() - self.editgeo_btn = self.toolbargeo.addAction( + self.editgeo_btn = self.toolbaredit.addAction( QtGui.QIcon(self.app.resource_location + '/edit_file32.png'), _("Editor")) - self.update_obj_btn = self.toolbargeo.addAction( + self.update_obj_btn = self.toolbaredit.addAction( QtGui.QIcon(self.app.resource_location + '/close_edit_file32.png'), _("Save Object and close the Editor") ) - self.toolbargeo.addSeparator() - self.copy_btn = self.toolbargeo.addAction( + self.toolbaredit.addSeparator() + self.copy_btn = self.toolbaredit.addAction( QtGui.QIcon(self.app.resource_location + '/copy_file32.png'), _("Copy")) - self.delete_btn = self.toolbargeo.addAction( + self.delete_btn = self.toolbaredit.addAction( QtGui.QIcon(self.app.resource_location + '/delete_file32.png'), _("&Delete")) - self.toolbargeo.addSeparator() - self.distance_btn = self.toolbargeo.addAction( + self.toolbaredit.addSeparator() + self.distance_btn = self.toolbaredit.addAction( QtGui.QIcon(self.app.resource_location + '/distance32.png'), _("Distance Tool")) - self.distance_min_btn = self.toolbargeo.addAction( + self.distance_min_btn = self.toolbaredit.addAction( QtGui.QIcon(self.app.resource_location + '/distance_min32.png'), _("Distance Min Tool")) - self.origin_btn = self.toolbargeo.addAction( + self.origin_btn = self.toolbaredit.addAction( QtGui.QIcon(self.app.resource_location + '/origin32.png'), _('Set Origin')) - self.move2origin_btn = self.toolbargeo.addAction( + self.move2origin_btn = self.toolbaredit.addAction( QtGui.QIcon(self.app.resource_location + '/origin2_32.png'), _('Move to Origin')) - self.jmp_btn = self.toolbargeo.addAction( + self.jmp_btn = self.toolbaredit.addAction( QtGui.QIcon(self.app.resource_location + '/jump_to16.png'), _('Jump to Location')) - self.locate_btn = self.toolbargeo.addAction( + self.locate_btn = self.toolbaredit.addAction( QtGui.QIcon(self.app.resource_location + '/locate32.png'), _('Locate in Object')) # ######################################################################## @@ -912,7 +905,7 @@ class MainGUI(QtWidgets.QMainWindow): self.dblsided_btn = self.toolbartools.addAction( QtGui.QIcon(self.app.resource_location + '/doubleside32.png'), _("2Sided Tool")) self.align_btn = self.toolbartools.addAction( - QtGui.QIcon(self.app.resource_location + '/align32.png'), _("Align AppObjects Tool")) + QtGui.QIcon(self.app.resource_location + '/align32.png'), _("Align Objects Tool")) self.extract_btn = self.toolbartools.addAction( QtGui.QIcon(self.app.resource_location + '/extract_drill32.png'), _("Extract Drills Tool")) @@ -1035,7 +1028,7 @@ class MainGUI(QtWidgets.QMainWindow): QtGui.QIcon(self.app.resource_location + '/transform.png'), _("Transformations")) self.geo_edit_toolbar.addSeparator() self.geo_move_btn = self.geo_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/move32.png'), _("Move AppObjects ")) + QtGui.QIcon(self.app.resource_location + '/move32.png'), _("Move Objects ")) # ######################################################################## # ########################## Gerber Editor Toolbar# ###################### @@ -1374,11 +1367,11 @@ class MainGUI(QtWidgets.QMainWindow): self.cmenu_newmenu = self.popMenu.addMenu( QtGui.QIcon(self.app.resource_location + '/file32.png'), _("New")) self.popmenu_new_geo = self.cmenu_newmenu.addAction( - QtGui.QIcon(self.app.resource_location + '/new_geo32_bis.png'), _("Geometry")) + QtGui.QIcon(self.app.resource_location + '/new_file_geo16.png'), _("Geometry")) self.popmenu_new_grb = self.cmenu_newmenu.addAction( - QtGui.QIcon(self.app.resource_location + '/flatcam_icon32.png'), "Gerber") + QtGui.QIcon(self.app.resource_location + '/new_file_grb16.png'), "Gerber") self.popmenu_new_exc = self.cmenu_newmenu.addAction( - QtGui.QIcon(self.app.resource_location + '/new_exc32.png'), _("Excellon")) + QtGui.QIcon(self.app.resource_location + '/new_file_exc16.png'), _("Excellon")) self.cmenu_newmenu.addSeparator() self.popmenu_new_prj = self.cmenu_newmenu.addAction( QtGui.QIcon(self.app.resource_location + '/file16.png'), _("Project")) @@ -1694,9 +1687,9 @@ class MainGUI(QtWidgets.QMainWindow): self.toolbarfile.setVisible(False) if tb & 2: - self.toolbargeo.setVisible(True) + self.toolbaredit.setVisible(True) else: - self.toolbargeo.setVisible(False) + self.toolbaredit.setVisible(False) if tb & 4: self.toolbarview.setVisible(True) @@ -1816,37 +1809,30 @@ class MainGUI(QtWidgets.QMainWindow): # ######################################################################## # ## Edit Toolbar # ## # ######################################################################## - self.newgeo_btn = self.toolbargeo.addAction( - QtGui.QIcon(self.app.resource_location + '/new_file_geo32.png'), _("New Blank Geometry")) - self.newgrb_btn = self.toolbargeo.addAction( - QtGui.QIcon(self.app.resource_location + '/new_file_grb32.png'), _("New Blank Gerber")) - self.newexc_btn = self.toolbargeo.addAction( - QtGui.QIcon(self.app.resource_location + '/new_file_exc32.png'), _("New Blank Excellon")) - self.toolbargeo.addSeparator() - self.editgeo_btn = self.toolbargeo.addAction( + self.editgeo_btn = self.toolbaredit.addAction( QtGui.QIcon(self.app.resource_location + '/edit32.png'), _("Editor")) - self.update_obj_btn = self.toolbargeo.addAction( + self.update_obj_btn = self.toolbaredit.addAction( QtGui.QIcon(self.app.resource_location + '/close_edit_file32.png'), _("Save Object and close the Editor") ) - self.toolbargeo.addSeparator() - self.copy_btn = self.toolbargeo.addAction( + self.toolbaredit.addSeparator() + self.copy_btn = self.toolbaredit.addAction( QtGui.QIcon(self.app.resource_location + '/copy_file32.png'), _("Copy")) - self.delete_btn = self.toolbargeo.addAction( + self.delete_btn = self.toolbaredit.addAction( QtGui.QIcon(self.app.resource_location + '/delete_file32.png'), _("&Delete")) - self.toolbargeo.addSeparator() - self.distance_btn = self.toolbargeo.addAction( + self.toolbaredit.addSeparator() + self.distance_btn = self.toolbaredit.addAction( QtGui.QIcon(self.app.resource_location + '/distance32.png'), _("Distance Tool")) - self.distance_min_btn = self.toolbargeo.addAction( + self.distance_min_btn = self.toolbaredit.addAction( QtGui.QIcon(self.app.resource_location + '/distance_min32.png'), _("Distance Min Tool")) - self.origin_btn = self.toolbargeo.addAction( + self.origin_btn = self.toolbaredit.addAction( QtGui.QIcon(self.app.resource_location + '/origin32.png'), _('Set Origin')) - self.move2origin_btn = self.toolbargeo.addAction( + self.move2origin_btn = self.toolbaredit.addAction( QtGui.QIcon(self.app.resource_location + '/origin2_32.png'), _('Move to Origin')) - self.jmp_btn = self.toolbargeo.addAction( + self.jmp_btn = self.toolbaredit.addAction( QtGui.QIcon(self.app.resource_location + '/jump_to16.png'), _('Jump to Location')) - self.locate_btn = self.toolbargeo.addAction( + self.locate_btn = self.toolbaredit.addAction( QtGui.QIcon(self.app.resource_location + '/locate32.png'), _('Locate in Object')) # ######################################################################## @@ -1881,7 +1867,7 @@ class MainGUI(QtWidgets.QMainWindow): self.dblsided_btn = self.toolbartools.addAction( QtGui.QIcon(self.app.resource_location + '/doubleside32.png'), _("2Sided Tool")) self.align_btn = self.toolbartools.addAction( - QtGui.QIcon(self.app.resource_location + '/align32.png'), _("Align AppObjects Tool")) + QtGui.QIcon(self.app.resource_location + '/align32.png'), _("Align Objects Tool")) self.extract_btn = self.toolbartools.addAction( QtGui.QIcon(self.app.resource_location + '/extract_drill32.png'), _("Extract Drills Tool")) @@ -1996,7 +1982,7 @@ class MainGUI(QtWidgets.QMainWindow): self.geo_cutpath_btn = self.geo_edit_toolbar.addAction( QtGui.QIcon(self.app.resource_location + '/cutpath32.png'), _('Cut Path')) self.geo_copy_btn = self.geo_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/copy32.png'), _("Copy AppObjects")) + QtGui.QIcon(self.app.resource_location + '/copy32.png'), _("Copy Objects")) self.geo_delete_btn = self.geo_edit_toolbar.addAction( QtGui.QIcon(self.app.resource_location + '/trash32.png'), _("Delete Shape")) self.geo_transform_btn = self.geo_edit_toolbar.addAction( @@ -2004,7 +1990,7 @@ class MainGUI(QtWidgets.QMainWindow): self.geo_edit_toolbar.addSeparator() self.geo_move_btn = self.geo_edit_toolbar.addAction( - QtGui.QIcon(self.app.resource_location + '/move32.png'), _("Move AppObjects")) + QtGui.QIcon(self.app.resource_location + '/move32.png'), _("Move Objects")) # ######################################################################## # ## Gerber Editor Toolbar # ## @@ -2547,7 +2533,7 @@ class MainGUI(QtWidgets.QMainWindow): # Zoom Fit if key == QtCore.Qt.Key_V: - self.app.on_zoom_fit(None) + self.app.on_zoom_fit() # Mirror on X the selected object(s) if key == QtCore.Qt.Key_X: @@ -2726,7 +2712,7 @@ class MainGUI(QtWidgets.QMainWindow): self.app.geo_editor.on_corner_snap() if key == QtCore.Qt.Key_V or key == 'V': - self.app.on_zoom_fit(None) + self.app.on_zoom_fit() # we do this so we can reuse the following keys while inside a Tool # the above keys are general enough so were left outside @@ -3180,7 +3166,7 @@ class MainGUI(QtWidgets.QMainWindow): # Zoom Fit if key == QtCore.Qt.Key_V or key == 'V': self.app.exc_editor.launched_from_shortcuts = True - self.app.on_zoom_fit(None) + self.app.on_zoom_fit() return # Add Slot Hole Tool @@ -4010,7 +3996,7 @@ class ShortcutsTab(QtWidgets.QWidget): _("Skew on Y axis"), # ALT section - _("Align AppObjects Tool"), _("Calculators Tool"), _("2-Sided PCB Tool"), _("Transformations Tool"), + _("Align Objects Tool"), _("Calculators Tool"), _("2-Sided PCB Tool"), _("Transformations Tool"), _("Punch Gerber Tool"), _("Extract Drills Tool"), _("Fiducials Tool"), _("Solder Paste Dispensing Tool"), _("Film PCB Tool"), _("Corner Markers Tool"), _("Non-Copper Clearing Tool"), _("Optimal Tool"), diff --git a/AppGUI/ObjectUI.py b/AppGUI/ObjectUI.py index 1c271b68..8f42d44e 100644 --- a/AppGUI/ObjectUI.py +++ b/AppGUI/ObjectUI.py @@ -1272,7 +1272,7 @@ class ExcellonObjectUI(ObjectUI): pp_excellon_label = QtWidgets.QLabel('%s:' % _("Preprocessor E")) pp_excellon_label.setToolTip( _("The preprocessor JSON file that dictates\n" - "Gcode output for Excellon AppObjects.") + "Gcode output for Excellon Objects.") ) self.pp_excellon_name_cb = FCComboBox() self.pp_excellon_name_cb.setFocusPolicy(QtCore.Qt.StrongFocus) @@ -1284,7 +1284,7 @@ class ExcellonObjectUI(ObjectUI): pp_geo_label = QtWidgets.QLabel('%s:' % _("Preprocessor G")) pp_geo_label.setToolTip( _("The preprocessor JSON file that dictates\n" - "Gcode output for Geometry (Milling) AppObjects.") + "Gcode output for Geometry (Milling) Objects.") ) self.pp_geo_name_cb = FCComboBox() self.pp_geo_name_cb.setFocusPolicy(QtCore.Qt.StrongFocus) diff --git a/AppGUI/preferences/PreferencesUIManager.py b/AppGUI/preferences/PreferencesUIManager.py index 2cc2487c..db1d738b 100644 --- a/AppGUI/preferences/PreferencesUIManager.py +++ b/AppGUI/preferences/PreferencesUIManager.py @@ -1093,7 +1093,7 @@ class PreferencesUIManager: if self.ui.toolbarfile.isVisible(): tb_status += 1 - if self.ui.toolbargeo.isVisible(): + if self.ui.toolbaredit.isVisible(): tb_status += 2 if self.ui.toolbarview.isVisible(): diff --git a/AppGUI/preferences/general/GeneralGUIPrefGroupUI.py b/AppGUI/preferences/general/GeneralGUIPrefGroupUI.py index f96c0fe8..67dabc55 100644 --- a/AppGUI/preferences/general/GeneralGUIPrefGroupUI.py +++ b/AppGUI/preferences/general/GeneralGUIPrefGroupUI.py @@ -647,7 +647,7 @@ class GeneralGUIPrefGroupUI(OptionsGroupUI): # first remove the toolbars: try: self.app.ui.removeToolBar(self.app.ui.toolbarfile) - self.app.ui.removeToolBar(self.app.ui.toolbargeo) + self.app.ui.removeToolBar(self.app.ui.toolbaredit) self.app.ui.removeToolBar(self.app.ui.toolbarview) self.app.ui.removeToolBar(self.app.ui.toolbarshell) self.app.ui.removeToolBar(self.app.ui.toolbartools) @@ -664,9 +664,9 @@ class GeneralGUIPrefGroupUI(OptionsGroupUI): self.app.ui.toolbarfile.setObjectName('File_TB') self.app.ui.addToolBar(Qt.LeftToolBarArea, self.app.ui.toolbarfile) - self.app.ui.toolbargeo = QtWidgets.QToolBar('Edit Toolbar') - self.app.ui.toolbargeo.setObjectName('Edit_TB') - self.app.ui.addToolBar(Qt.LeftToolBarArea, self.app.ui.toolbargeo) + self.app.ui.toolbaredit = QtWidgets.QToolBar('Edit Toolbar') + self.app.ui.toolbaredit.setObjectName('Edit_TB') + self.app.ui.addToolBar(Qt.LeftToolBarArea, self.app.ui.toolbaredit) self.app.ui.toolbarshell = QtWidgets.QToolBar('Shell Toolbar') self.app.ui.toolbarshell.setObjectName('Shell_TB') @@ -702,9 +702,9 @@ class GeneralGUIPrefGroupUI(OptionsGroupUI): self.app.ui.toolbarfile.setObjectName('File_TB') self.app.ui.addToolBar(self.app.ui.toolbarfile) - self.app.ui.toolbargeo = QtWidgets.QToolBar('Edit Toolbar') - self.app.ui.toolbargeo.setObjectName('Edit_TB') - self.app.ui.addToolBar(self.app.ui.toolbargeo) + self.app.ui.toolbaredit = QtWidgets.QToolBar('Edit Toolbar') + self.app.ui.toolbaredit.setObjectName('Edit_TB') + self.app.ui.addToolBar(self.app.ui.toolbaredit) self.app.ui.toolbarview = QtWidgets.QToolBar('View Toolbar') self.app.ui.toolbarview.setObjectName('View_TB') diff --git a/AppObjects/AppObject.py b/AppObjects/AppObject.py index 361663ed..8dfa2113 100644 --- a/AppObjects/AppObject.py +++ b/AppObjects/AppObject.py @@ -292,7 +292,7 @@ class AppObject(QtCore.QObject): self.app.collection.append(obj) # after adding the object to the collection always update the list of objects that are in the collection - self.all_objects_list = self.app.collection.get_list() + self.app.all_objects_list = self.app.collection.get_list() # self.app.inform.emit('[selected] %s created & selected: %s' % # (str(obj.kind).capitalize(), str(obj.options['name']))) @@ -358,7 +358,7 @@ class AppObject(QtCore.QObject): # Send to worker # self.worker.add_task(worker_task, [self]) if plot is True: - self.worker_task.emit({'fcn': task, 'params': [obj]}) + self.app.worker_task.emit({'fcn': task, 'params': [obj]}) def on_object_changed(self, obj): """ @@ -390,4 +390,4 @@ class AppObject(QtCore.QObject): :return: None """ - self.app.on_zoom_fit(None) + self.app.on_zoom_fit() diff --git a/AppObjects/FlatCAMExcellon.py b/AppObjects/FlatCAMExcellon.py index 30f5f841..9095a3f4 100644 --- a/AppObjects/FlatCAMExcellon.py +++ b/AppObjects/FlatCAMExcellon.py @@ -146,7 +146,7 @@ class ExcellonObject(FlatCAMObj, Excellon): 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 AppObjects to join. + :param exc_list: List or one object of ExcellonObject Objects to join. :param exc_final: Destination ExcellonObject object. :return: None """ diff --git a/AppObjects/FlatCAMGeometry.py b/AppObjects/FlatCAMGeometry.py index bb418dc3..83744fcd 100644 --- a/AppObjects/FlatCAMGeometry.py +++ b/AppObjects/FlatCAMGeometry.py @@ -2738,7 +2738,7 @@ class GeometryObject(FlatCAMObj, Geometry): """ Merges the geometry of objects in grb_list into the geometry of geo_final. - :param geo_list: List of GerberObject AppObjects to join. + :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 diff --git a/AppObjects/FlatCAMGerber.py b/AppObjects/FlatCAMGerber.py index 98049513..1fcefb28 100644 --- a/AppObjects/FlatCAMGerber.py +++ b/AppObjects/FlatCAMGerber.py @@ -45,7 +45,7 @@ class GerberObject(FlatCAMObj, Gerber): Merges the geometry of objects in geo_list into the geometry of geo_final. - :param grb_list: List of GerberObject AppObjects to join. + :param grb_list: List of GerberObject Objects to join. :param grb_final: Destination GeometryObject object. :return: None """ diff --git a/AppObjects/ObjectCollection.py b/AppObjects/ObjectCollection.py index 8fc25560..02a0247e 100644 --- a/AppObjects/ObjectCollection.py +++ b/AppObjects/ObjectCollection.py @@ -1010,7 +1010,7 @@ class ObjectCollection(QtCore.QAbstractItemModel): def on_row_selected(self, obj_name): """ - This is a special string; when received it will make all Menu -> AppObjects entries unchecked + This is a special string; when received it will make all Menu -> Objects entries unchecked It mean we clicked outside of the items and deselected all :param obj_name: @@ -1194,6 +1194,6 @@ class ObjectCollection(QtCore.QAbstractItemModel): pass if obj_list: - self.app.inform.emit('%s' % _("AppObjects selection is cleared.")) + self.app.inform.emit('%s' % _("Objects selection is cleared.")) else: self.app.inform.emit('') diff --git a/AppTool.py b/AppTools/AppTool.py similarity index 97% rename from AppTool.py rename to AppTools/AppTool.py index 2c2362c4..4c5bd22c 100644 --- a/AppTool.py +++ b/AppTools/AppTool.py @@ -6,8 +6,7 @@ # MIT Licence # # ########################################################## ## -from PyQt5 import QtGui, QtCore, QtWidgets, QtWidgets -from PyQt5.QtCore import Qt +from PyQt5 import QtCore, QtWidgets from shapely.geometry import Polygon, LineString @@ -27,15 +26,16 @@ class AppTool(QtWidgets.QWidget): def __init__(self, app, parent=None): """ - :param app: The application this tool will run in. - :type app: AppMain - :param parent: Qt Parent - :return: AppTool + :param app: The application this tool will run in. + :type app: App.App + :param parent: Qt Parent + :return: AppTool """ - self.app = app - self.decimals = app.decimals - QtWidgets.QWidget.__init__(self, parent) + + self.app = app + self.decimals = self.app.decimals + # self.setSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum) self.layout = QtWidgets.QVBoxLayout() diff --git a/AppTools/ToolAlignObjects.py b/AppTools/ToolAlignObjects.py index f158e386..542d27f8 100644 --- a/AppTools/ToolAlignObjects.py +++ b/AppTools/ToolAlignObjects.py @@ -5,8 +5,8 @@ # MIT Licence # # ########################################################## -from PyQt5 import QtWidgets, QtGui, QtCore -from AppTool import AppTool +from PyQt5 import QtWidgets, QtCore +from AppTools.AppTool import AppTool from AppGUI.GUIElements import FCComboBox, RadioSet @@ -29,7 +29,7 @@ log = logging.getLogger('base') class AlignObjects(AppTool): - toolName = _("Align AppObjects") + toolName = _("Align Objects") def __init__(self, app): AppTool.__init__(self, app) diff --git a/AppTools/ToolCalculators.py b/AppTools/ToolCalculators.py index 08edc27d..247b5003 100644 --- a/AppTools/ToolCalculators.py +++ b/AppTools/ToolCalculators.py @@ -6,7 +6,7 @@ # ########################################################## from PyQt5 import QtWidgets -from AppTool import AppTool +from AppTools.AppTool import AppTool from AppGUI.GUIElements import FCSpinner, FCDoubleSpinner, FCEntry import math diff --git a/AppTools/ToolCalibration.py b/AppTools/ToolCalibration.py index b220f1c0..8071faa4 100644 --- a/AppTools/ToolCalibration.py +++ b/AppTools/ToolCalibration.py @@ -7,7 +7,7 @@ from PyQt5 import QtWidgets, QtCore, QtGui -from AppTool import AppTool +from AppTools.AppTool import AppTool from AppGUI.GUIElements import FCDoubleSpinner, EvalEntry, FCCheckBox, OptionalInputSection, FCEntry from AppGUI.GUIElements import FCTable, FCComboBox, RadioSet from AppEditors.FlatCAMTextEditor import TextEditor @@ -620,7 +620,7 @@ class ToolCalibration(AppTool): grid_lay.addWidget(QtWidgets.QLabel(''), 44, 0, 1, 3) # STEP 5 # - step_5 = QtWidgets.QLabel('%s' % _("STEP 5: Calibrate FlatCAM AppObjects")) + step_5 = QtWidgets.QLabel('%s' % _("STEP 5: Calibrate FlatCAM Objects")) step_5.setToolTip( _("Adjust the FlatCAM objects\n" "with the factors determined and verified above.") @@ -656,7 +656,7 @@ class ToolCalibration(AppTool): grid_lay.addWidget(self.adj_object_label, 48, 0, 1, 3) grid_lay.addWidget(self.adj_object_combo, 49, 0, 1, 3) - # ## Adjust AppObjects Button + # ## Adjust Objects Button self.cal_button = QtWidgets.QPushButton(_("Calibrate")) self.cal_button.setToolTip( _("Adjust (scale and/or skew) the objects\n" diff --git a/AppTools/ToolCopperThieving.py b/AppTools/ToolCopperThieving.py index a166866f..fa0ce728 100644 --- a/AppTools/ToolCopperThieving.py +++ b/AppTools/ToolCopperThieving.py @@ -8,7 +8,7 @@ from PyQt5 import QtWidgets, QtCore from Common import GracefulException as grace -from AppTool import AppTool +from AppTools.AppTool import AppTool from AppGUI.GUIElements import FCDoubleSpinner, RadioSet, FCEntry, FCComboBox import shapely.geometry.base as base @@ -493,7 +493,7 @@ class ToolCopperThieving(AppTool): """) self.layout.addWidget(self.reset_button) - # AppObjects involved in Copper thieving + # Objects involved in Copper thieving self.grb_object = None self.ref_obj = None self.sel_rect = [] diff --git a/AppTools/ToolCorners.py b/AppTools/ToolCorners.py index e1d087ab..f8969cd2 100644 --- a/AppTools/ToolCorners.py +++ b/AppTools/ToolCorners.py @@ -7,7 +7,7 @@ from PyQt5 import QtWidgets, QtCore -from AppTool import AppTool +from AppTools.AppTool import AppTool from AppGUI.GUIElements import FCDoubleSpinner, FCCheckBox, FCComboBox, FCButton from shapely.geometry import MultiPolygon, LineString @@ -182,7 +182,7 @@ class ToolCorners(AppTool): """) self.layout.addWidget(self.reset_button) - # AppObjects involved in Copper thieving + # Objects involved in Copper thieving self.grb_object = None # store the flattened geometry here: diff --git a/AppTools/ToolCutOut.py b/AppTools/ToolCutOut.py index 196da2b6..25e11390 100644 --- a/AppTools/ToolCutOut.py +++ b/AppTools/ToolCutOut.py @@ -6,7 +6,7 @@ # ########################################################## from PyQt5 import QtWidgets, QtGui, QtCore -from AppTool import AppTool +from AppTools.AppTool import AppTool from AppGUI.GUIElements import FCDoubleSpinner, FCCheckBox, RadioSet, FCComboBox, OptionalInputSection, FCButton from shapely.geometry import box, MultiPolygon, Polygon, LineString, LinearRing diff --git a/AppTools/ToolDblSided.py b/AppTools/ToolDblSided.py index 1cf2f8ab..817c87d6 100644 --- a/AppTools/ToolDblSided.py +++ b/AppTools/ToolDblSided.py @@ -1,7 +1,7 @@ from PyQt5 import QtWidgets, QtCore -from AppTool import AppTool +from AppTools.AppTool import AppTool from AppGUI.GUIElements import RadioSet, FCDoubleSpinner, EvalEntry, FCEntry, FCButton, FCComboBox from numpy import Inf @@ -48,9 +48,9 @@ class DblSidedTool(AppTool): grid_lay.setColumnStretch(1, 0) self.layout.addLayout(grid_lay) - # AppObjects to be mirrored + # Objects to be mirrored self.m_objects_label = QtWidgets.QLabel("%s:" % _("Mirror Operation")) - self.m_objects_label.setToolTip('%s.' % _("AppObjects to be mirrored")) + self.m_objects_label.setToolTip('%s.' % _("Objects to be mirrored")) grid_lay.addWidget(self.m_objects_label, 0, 0, 1, 2) @@ -154,7 +154,7 @@ class DblSidedTool(AppTool): grid_lay1.setColumnStretch(1, 1) self.layout.addLayout(grid_lay1) - # AppObjects to be mirrored + # Objects to be mirrored self.param_label = QtWidgets.QLabel("%s:" % _("Mirror Parameters")) self.param_label.setToolTip('%s.' % _("Parameters for the mirror operation")) diff --git a/AppTools/ToolDistance.py b/AppTools/ToolDistance.py index 6798ae8e..e20ebd36 100644 --- a/AppTools/ToolDistance.py +++ b/AppTools/ToolDistance.py @@ -7,7 +7,7 @@ from PyQt5 import QtWidgets, QtCore -from AppTool import AppTool +from AppTools.AppTool import AppTool from AppGUI.VisPyVisuals import * from AppGUI.GUIElements import FCEntry, FCButton, FCCheckBox diff --git a/AppTools/ToolDistanceMin.py b/AppTools/ToolDistanceMin.py index 87f56678..1ea67ea7 100644 --- a/AppTools/ToolDistanceMin.py +++ b/AppTools/ToolDistanceMin.py @@ -6,8 +6,7 @@ # ########################################################## from PyQt5 import QtWidgets, QtCore -from AppTool import AppTool -from AppGUI.VisPyVisuals import * +from AppTools.AppTool import AppTool from AppGUI.GUIElements import FCEntry from shapely.ops import nearest_points @@ -291,7 +290,7 @@ class DistanceMin(AppTool): ) else: self.app.inform.emit('[WARNING_NOTCL] %s: %s' % - (_("AppObjects intersects or touch at"), + (_("Objects intersects or touch at"), "(%.*f, %.*f)" % (self.decimals, self.h_point[0], self.decimals, self.h_point[1]))) def on_jump_to_half_point(self): diff --git a/AppTools/ToolExtractDrills.py b/AppTools/ToolExtractDrills.py index 71e8fb41..2d3802cc 100644 --- a/AppTools/ToolExtractDrills.py +++ b/AppTools/ToolExtractDrills.py @@ -7,7 +7,7 @@ from PyQt5 import QtWidgets, QtCore -from AppTool import AppTool +from AppTools.AppTool import AppTool from AppGUI.GUIElements import RadioSet, FCDoubleSpinner, FCCheckBox, FCComboBox from shapely.geometry import Point diff --git a/AppTools/ToolFiducials.py b/AppTools/ToolFiducials.py index b43e0944..6a482972 100644 --- a/AppTools/ToolFiducials.py +++ b/AppTools/ToolFiducials.py @@ -7,7 +7,7 @@ from PyQt5 import QtWidgets, QtCore -from AppTool import AppTool +from AppTools.AppTool import AppTool from AppGUI.GUIElements import FCDoubleSpinner, RadioSet, EvalEntry, FCTable, FCComboBox from shapely.geometry import Point, Polygon, MultiPolygon, LineString @@ -327,7 +327,7 @@ class ToolFiducials(AppTool): """) self.layout.addWidget(self.reset_button) - # AppObjects involved in Copper thieving + # Objects involved in Copper thieving self.grb_object = None self.sm_object = None diff --git a/AppTools/ToolFilm.py b/AppTools/ToolFilm.py index a4209ce3..81bf6779 100644 --- a/AppTools/ToolFilm.py +++ b/AppTools/ToolFilm.py @@ -5,9 +5,9 @@ # MIT Licence # # ########################################################## -from PyQt5 import QtGui, QtCore, QtWidgets +from PyQt5 import QtCore, QtWidgets -from AppTool import AppTool +from AppTools.AppTool import AppTool from AppGUI.GUIElements import RadioSet, FCDoubleSpinner, FCCheckBox, \ OptionalHideInputSection, OptionalInputSection, FCComboBox, FCFileSaveDialog diff --git a/AppTools/ToolImage.py b/AppTools/ToolImage.py index 5d520c78..68b3a7e7 100644 --- a/AppTools/ToolImage.py +++ b/AppTools/ToolImage.py @@ -7,7 +7,7 @@ from PyQt5 import QtGui, QtWidgets -from AppTool import AppTool +from AppTools.AppTool import AppTool from AppGUI.GUIElements import RadioSet, FCComboBox, FCSpinner import gettext diff --git a/AppTools/ToolInvertGerber.py b/AppTools/ToolInvertGerber.py index 6acc013b..e6ea29d5 100644 --- a/AppTools/ToolInvertGerber.py +++ b/AppTools/ToolInvertGerber.py @@ -7,7 +7,7 @@ from PyQt5 import QtWidgets, QtCore -from AppTool import AppTool +from AppTools.AppTool import AppTool from AppGUI.GUIElements import FCButton, FCDoubleSpinner, RadioSet, FCComboBox from shapely.geometry import box diff --git a/AppTools/ToolMove.py b/AppTools/ToolMove.py index e02fed57..866555f9 100644 --- a/AppTools/ToolMove.py +++ b/AppTools/ToolMove.py @@ -6,7 +6,7 @@ # ########################################################## from PyQt5 import QtWidgets, QtCore -from AppTool import AppTool +from AppTools.AppTool import AppTool from AppGUI.VisPyVisuals import * from copy import copy diff --git a/AppTools/ToolNCC.py b/AppTools/ToolNCC.py index 0a637997..1f323ccb 100644 --- a/AppTools/ToolNCC.py +++ b/AppTools/ToolNCC.py @@ -7,7 +7,7 @@ from PyQt5 import QtWidgets, QtCore, QtGui -from AppTool import AppTool +from AppTools.AppTool import AppTool from AppGUI.GUIElements import FCCheckBox, FCDoubleSpinner, RadioSet, FCTable, FCInputDialog, FCButton,\ FCComboBox, OptionalInputSection from AppParsers.ParseGerber import Gerber diff --git a/AppTools/ToolOptimal.py b/AppTools/ToolOptimal.py index 9ad822ae..cc2b6a3d 100644 --- a/AppTools/ToolOptimal.py +++ b/AppTools/ToolOptimal.py @@ -7,7 +7,7 @@ from PyQt5 import QtWidgets, QtCore, QtGui -from AppTool import AppTool +from AppTools.AppTool import AppTool from AppGUI.GUIElements import OptionalHideInputSection, FCTextArea, FCEntry, FCSpinner, FCCheckBox, FCComboBox from Common import GracefulException as grace diff --git a/AppTools/ToolPDF.py b/AppTools/ToolPDF.py index 2e3cace3..2f105d57 100644 --- a/AppTools/ToolPDF.py +++ b/AppTools/ToolPDF.py @@ -7,7 +7,7 @@ from PyQt5 import QtWidgets, QtCore -from AppTool import AppTool +from AppTools.AppTool import AppTool from Common import GracefulException as grace from AppParsers.ParsePDF import PdfParser from shapely.geometry import Point, MultiPolygon diff --git a/AppTools/ToolPaint.py b/AppTools/ToolPaint.py index bfa4891b..7b605e8a 100644 --- a/AppTools/ToolPaint.py +++ b/AppTools/ToolPaint.py @@ -8,7 +8,7 @@ from PyQt5 import QtWidgets, QtGui, QtCore from PyQt5.QtCore import Qt -from AppTool import AppTool +from AppTools.AppTool import AppTool from copy import deepcopy # from ObjectCollection import * from AppParsers.ParseGerber import Gerber diff --git a/AppTools/ToolPanelize.py b/AppTools/ToolPanelize.py index 3d774c97..7d96a4dd 100644 --- a/AppTools/ToolPanelize.py +++ b/AppTools/ToolPanelize.py @@ -6,7 +6,7 @@ # ########################################################## from PyQt5 import QtWidgets, QtGui, QtCore -from AppTool import AppTool +from AppTools.AppTool import AppTool from AppGUI.GUIElements import FCSpinner, FCDoubleSpinner, RadioSet, FCCheckBox, OptionalInputSection, FCComboBox from Common import GracefulException as grace diff --git a/AppTools/ToolPcbWizard.py b/AppTools/ToolPcbWizard.py index a9fc6075..29b17898 100644 --- a/AppTools/ToolPcbWizard.py +++ b/AppTools/ToolPcbWizard.py @@ -7,7 +7,7 @@ from PyQt5 import QtWidgets, QtCore -from AppTool import AppTool +from AppTools.AppTool import AppTool from AppGUI.GUIElements import RadioSet, FCSpinner, FCButton, FCTable import re diff --git a/AppTools/ToolProperties.py b/AppTools/ToolProperties.py index 59d73a8c..d9268fe1 100644 --- a/AppTools/ToolProperties.py +++ b/AppTools/ToolProperties.py @@ -6,7 +6,7 @@ # ########################################################## from PyQt5 import QtGui, QtCore, QtWidgets -from AppTool import AppTool +from AppTools.AppTool import AppTool from AppGUI.GUIElements import FCTree from shapely.geometry import MultiPolygon, Polygon diff --git a/AppTools/ToolPunchGerber.py b/AppTools/ToolPunchGerber.py index 28d42ef4..4bb80d39 100644 --- a/AppTools/ToolPunchGerber.py +++ b/AppTools/ToolPunchGerber.py @@ -7,7 +7,7 @@ from PyQt5 import QtCore, QtWidgets -from AppTool import AppTool +from AppTools.AppTool import AppTool from AppGUI.GUIElements import RadioSet, FCDoubleSpinner, FCCheckBox, FCComboBox from copy import deepcopy diff --git a/AppTools/ToolQRCode.py b/AppTools/ToolQRCode.py index 1462f205..b2b77db4 100644 --- a/AppTools/ToolQRCode.py +++ b/AppTools/ToolQRCode.py @@ -8,7 +8,7 @@ from PyQt5 import QtWidgets, QtCore, QtGui from PyQt5.QtCore import Qt -from AppTool import AppTool +from AppTools.AppTool import AppTool from AppGUI.GUIElements import RadioSet, FCTextArea, FCSpinner, FCEntry, FCCheckBox, FCComboBox, FCFileSaveDialog from AppParsers.ParseSVG import * diff --git a/AppTools/ToolRulesCheck.py b/AppTools/ToolRulesCheck.py index 7864964a..a738cf42 100644 --- a/AppTools/ToolRulesCheck.py +++ b/AppTools/ToolRulesCheck.py @@ -7,7 +7,7 @@ from PyQt5 import QtWidgets -from AppTool import AppTool +from AppTools.AppTool import AppTool from AppGUI.GUIElements import FCDoubleSpinner, FCCheckBox, OptionalInputSection, FCComboBox from copy import deepcopy @@ -196,7 +196,7 @@ class RulesCheck(AppTool): self.grid_layout.addWidget(QtWidgets.QLabel(""), 8, 0, 1, 3) - self.excellon_title_lbl = QtWidgets.QLabel('%s:' % _("Excellon AppObjects")) + self.excellon_title_lbl = QtWidgets.QLabel('%s:' % _("Excellon Objects")) self.excellon_title_lbl.setToolTip( _("Excellon objects for which to check rules.") ) diff --git a/AppTools/ToolSolderPaste.py b/AppTools/ToolSolderPaste.py index cd9fbc08..e168f208 100644 --- a/AppTools/ToolSolderPaste.py +++ b/AppTools/ToolSolderPaste.py @@ -5,11 +5,11 @@ # MIT Licence # # ########################################################## -from AppTool import AppTool +from AppTools.AppTool import AppTool from Common import LoudDict from AppGUI.GUIElements import FCComboBox, FCEntry, FCTable, \ FCInputDialog, FCDoubleSpinner, FCSpinner, FCFileSaveDialog -from AppMain import log +from App import log from camlib import distance from AppEditors.FlatCAMTextEditor import TextEditor diff --git a/AppTools/ToolSub.py b/AppTools/ToolSub.py index b80bea1c..85f0e81f 100644 --- a/AppTools/ToolSub.py +++ b/AppTools/ToolSub.py @@ -7,7 +7,7 @@ from PyQt5 import QtWidgets, QtCore -from AppTool import AppTool +from AppTools.AppTool import AppTool from AppGUI.GUIElements import FCCheckBox, FCButton, FCComboBox from shapely.geometry import Polygon, MultiPolygon, MultiLineString, LineString @@ -62,7 +62,7 @@ class ToolSub(AppTool): form_layout = QtWidgets.QFormLayout() self.tools_box.addLayout(form_layout) - self.gerber_title = QtWidgets.QLabel("%s" % _("Gerber AppObjects")) + self.gerber_title = QtWidgets.QLabel("%s" % _("Gerber Objects")) form_layout.addRow(self.gerber_title) # Target Gerber Object @@ -117,7 +117,7 @@ class ToolSub(AppTool): form_geo_layout = QtWidgets.QFormLayout() self.tools_box.addLayout(form_geo_layout) - self.geo_title = QtWidgets.QLabel("%s" % _("Geometry AppObjects")) + self.geo_title = QtWidgets.QLabel("%s" % _("Geometry Objects")) form_geo_layout.addRow(self.geo_title) # Target Geometry Object diff --git a/AppTools/ToolTransform.py b/AppTools/ToolTransform.py index 41e6ff91..7167740d 100644 --- a/AppTools/ToolTransform.py +++ b/AppTools/ToolTransform.py @@ -6,7 +6,7 @@ # ########################################################## from PyQt5 import QtWidgets -from AppTool import AppTool +from AppTools.AppTool import AppTool from AppGUI.GUIElements import FCDoubleSpinner, FCCheckBox, FCButton, OptionalInputSection, FCEntry import gettext diff --git a/CHANGELOG.md b/CHANGELOG.md index 75255b79..d7ff7570 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ CHANGELOG for FlatCAM beta - more refactoring class names - moved some of the methods from the App class to the ObjectCollection class - moved all the new_object related methods in their own class AppObjects.AppObject +- more refactoring; solved some issues introduced by the refactoring 17.05.2020 diff --git a/Common.py b/Common.py index efdd3252..85442b80 100644 --- a/Common.py +++ b/Common.py @@ -15,7 +15,7 @@ from PyQt5 import QtCore from shapely.geometry import Polygon, MultiPolygon from AppGUI.VisPyVisuals import ShapeCollection -from AppTool import AppTool +from AppTools.AppTool import AppTool import numpy as np diff --git a/FlatCAM.py b/FlatCAM.py index 0bb79f1f..1a309537 100644 --- a/FlatCAM.py +++ b/FlatCAM.py @@ -3,7 +3,7 @@ import os from PyQt5 import QtWidgets from PyQt5.QtCore import QSettings, Qt -from AppMain import App +from App import App from AppGUI import VisPyPatches from multiprocessing import freeze_support diff --git a/camlib.py b/camlib.py index c3863ca2..e2bebc80 100644 --- a/camlib.py +++ b/camlib.py @@ -6418,7 +6418,7 @@ def distance_euclidian(x1, y1, x2, y2): class FlatCAMRTree(object): """ Indexes geometry (Any object with "cooords" property containing - a list of tuples with x, y values). AppObjects are indexed by + a list of tuples with x, y values). Objects are indexed by all their points by default. To index by arbitrary points, override self.points2obj. """ diff --git a/defaults.py b/defaults.py index 6e8acfac..e2db25b4 100644 --- a/defaults.py +++ b/defaults.py @@ -636,7 +636,7 @@ class FlatCAMDefaults: "tools_punch_rectangular": False, "tools_punch_others": False, - # Align AppObjects Tool + # Align Objects Tool "tools_align_objects_align_type": 'sp', # Invert Gerber Tool diff --git a/tclCommands/TclCommand.py b/tclCommands/TclCommand.py index 5c008671..d89eb0c4 100644 --- a/tclCommands/TclCommand.py +++ b/tclCommands/TclCommand.py @@ -1,6 +1,6 @@ import sys import re -import AppMain +import App import abc import collections from PyQt5 import QtCore @@ -53,7 +53,7 @@ class TclCommand(object): if self.app is None: raise TypeError('Expected app to be FlatCAMApp instance.') - if not isinstance(self.app, AppMain.App): + if not isinstance(self.app, App.App): raise TypeError('Expected FlatCAMApp, got %s.' % type(app)) self.log = self.app.log From 9c707e06824fea649dc896a4aceb2e4da6f3abe7 Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Mon, 18 May 2020 19:09:37 +0300 Subject: [PATCH 49/99] - solved a circular import --- AppEditors/FlatCAMGeoEditor.py | 2 +- AppEditors/FlatCAMGrbEditor.py | 2 +- AppParsers/ParseExcellon.py | 5 ++--- AppParsers/ParseGerber.py | 3 +-- AppParsers/ParseHPGL2.py | 5 ++--- AppTools/AppTool.py => AppTool.py | 5 ++--- AppTools/ToolAlignObjects.py | 2 +- AppTools/ToolCalculators.py | 2 +- AppTools/ToolCalibration.py | 2 +- AppTools/ToolCopperThieving.py | 4 ++-- AppTools/ToolCorners.py | 2 +- AppTools/ToolCutOut.py | 2 +- AppTools/ToolDblSided.py | 2 +- AppTools/ToolDistance.py | 2 +- AppTools/ToolDistanceMin.py | 2 +- AppTools/ToolExtractDrills.py | 2 +- AppTools/ToolFiducials.py | 2 +- AppTools/ToolFilm.py | 2 +- AppTools/ToolImage.py | 2 +- AppTools/ToolInvertGerber.py | 2 +- AppTools/ToolMove.py | 2 +- AppTools/ToolNCC.py | 4 ++-- AppTools/ToolOptimal.py | 4 ++-- AppTools/ToolPDF.py | 6 +++--- AppTools/ToolPaint.py | 5 ++--- AppTools/ToolPanelize.py | 5 +++-- AppTools/ToolPcbWizard.py | 2 +- AppTools/ToolProperties.py | 2 +- AppTools/ToolPunchGerber.py | 2 +- AppTools/ToolQRCode.py | 2 +- AppTools/ToolRulesCheck.py | 2 +- AppTools/ToolSolderPaste.py | 4 ++-- AppTools/ToolSub.py | 2 +- AppTools/ToolTransform.py | 2 +- App.py => App_Main.py | 5 ++++- CHANGELOG.md | 1 + Common.py | 2 +- FlatCAM.py | 2 +- camlib.py | 3 +-- tclCommands/TclCommand.py | 4 ++-- 40 files changed, 56 insertions(+), 57 deletions(-) rename AppTools/AppTool.py => AppTool.py (98%) rename App.py => App_Main.py (99%) diff --git a/AppEditors/FlatCAMGeoEditor.py b/AppEditors/FlatCAMGeoEditor.py index 679f5f03..da5c9613 100644 --- a/AppEditors/FlatCAMGeoEditor.py +++ b/AppEditors/FlatCAMGeoEditor.py @@ -15,7 +15,7 @@ from PyQt5 import QtGui, QtCore, QtWidgets from PyQt5.QtCore import Qt, QSettings from camlib import distance, arc, three_point_circle, Geometry, FlatCAMRTreeStorage -from AppTools.AppTool import AppTool +from AppTool import AppTool from AppGUI.GUIElements import OptionalInputSection, FCCheckBox, FCEntry, FCComboBox, FCTextAreaRich, \ FCDoubleSpinner, FCButton, FCInputDialog, FCTree from AppParsers.ParseFont import * diff --git a/AppEditors/FlatCAMGrbEditor.py b/AppEditors/FlatCAMGrbEditor.py index 0fdb8b8d..68d1de6c 100644 --- a/AppEditors/FlatCAMGrbEditor.py +++ b/AppEditors/FlatCAMGrbEditor.py @@ -20,7 +20,7 @@ import logging from camlib import distance, arc, three_point_circle from AppGUI.GUIElements import FCEntry, FCComboBox, FCTable, FCDoubleSpinner, FCSpinner, RadioSet, \ EvalEntry2, FCInputDialog, FCButton, OptionalInputSection, FCCheckBox -from AppTools.AppTool import AppTool +from AppTool import AppTool import numpy as np from numpy.linalg import norm as numpy_norm diff --git a/AppParsers/ParseExcellon.py b/AppParsers/ParseExcellon.py index d853b427..fbf1bb6f 100644 --- a/AppParsers/ParseExcellon.py +++ b/AppParsers/ParseExcellon.py @@ -6,7 +6,7 @@ # MIT Licence # # ########################################################## ## -from camlib import Geometry +from camlib import Geometry, grace import shapely.affinity as affinity from shapely.geometry import Point, LineString @@ -17,8 +17,7 @@ import logging import traceback from copy import deepcopy -import AppTranslation as fcTranslate -from Common import GracefulException as grace +# import AppTranslation as fcTranslate import gettext import builtins diff --git a/AppParsers/ParseGerber.py b/AppParsers/ParseGerber.py index e17fd5d2..1bd37e91 100644 --- a/AppParsers/ParseGerber.py +++ b/AppParsers/ParseGerber.py @@ -1,5 +1,5 @@ from PyQt5 import QtWidgets -from camlib import Geometry, arc, arc_angle, ApertureMacro +from camlib import Geometry, arc, arc_angle, ApertureMacro, grace import numpy as np import re @@ -15,7 +15,6 @@ from shapely.geometry import box as shply_box, Polygon, LineString, Point, Multi from lxml import etree as ET from AppParsers.ParseSVG import svgparselength, getsvggeo -from Common import GracefulException as grace import AppTranslation as fcTranslate import gettext diff --git a/AppParsers/ParseHPGL2.py b/AppParsers/ParseHPGL2.py index e9eafac5..200453b0 100644 --- a/AppParsers/ParseHPGL2.py +++ b/AppParsers/ParseHPGL2.py @@ -6,7 +6,7 @@ # MIT Licence # # ############################################################ -from camlib import arc, three_point_circle +from camlib import arc, three_point_circle, grace import numpy as np import re @@ -18,8 +18,7 @@ import sys from shapely.ops import unary_union from shapely.geometry import LineString, Point -from Common import GracefulException as grace -import AppTranslation as fcTranslate +# import AppTranslation as fcTranslate import gettext import builtins diff --git a/AppTools/AppTool.py b/AppTool.py similarity index 98% rename from AppTools/AppTool.py rename to AppTool.py index 4c5bd22c..8391d76d 100644 --- a/AppTools/AppTool.py +++ b/AppTool.py @@ -27,7 +27,7 @@ class AppTool(QtWidgets.QWidget): """ :param app: The application this tool will run in. - :type app: App.App + :type app: App_Main.App :param parent: Qt Parent :return: AppTool """ @@ -284,8 +284,7 @@ class AppTool(QtWidgets.QWidget): def confirmation_message_int(self, accepted, minval, maxval): if accepted is False: - self.app.inform.emit('[WARNING_NOTCL] %s: [%d, %d]' % - (_("Edited value is out of range"), minval, maxval)) + self.app.inform.emit('[WARNING_NOTCL] %s: [%d, %d]' % (_("Edited value is out of range"), minval, maxval)) else: self.app.inform.emit('[success] %s' % _("Edited value is within limits.")) diff --git a/AppTools/ToolAlignObjects.py b/AppTools/ToolAlignObjects.py index 542d27f8..35e956c4 100644 --- a/AppTools/ToolAlignObjects.py +++ b/AppTools/ToolAlignObjects.py @@ -6,7 +6,7 @@ # ########################################################## from PyQt5 import QtWidgets, QtCore -from AppTools.AppTool import AppTool +from AppTool import AppTool from AppGUI.GUIElements import FCComboBox, RadioSet diff --git a/AppTools/ToolCalculators.py b/AppTools/ToolCalculators.py index 247b5003..08edc27d 100644 --- a/AppTools/ToolCalculators.py +++ b/AppTools/ToolCalculators.py @@ -6,7 +6,7 @@ # ########################################################## from PyQt5 import QtWidgets -from AppTools.AppTool import AppTool +from AppTool import AppTool from AppGUI.GUIElements import FCSpinner, FCDoubleSpinner, FCEntry import math diff --git a/AppTools/ToolCalibration.py b/AppTools/ToolCalibration.py index 8071faa4..b808f00c 100644 --- a/AppTools/ToolCalibration.py +++ b/AppTools/ToolCalibration.py @@ -7,7 +7,7 @@ from PyQt5 import QtWidgets, QtCore, QtGui -from AppTools.AppTool import AppTool +from AppTool import AppTool from AppGUI.GUIElements import FCDoubleSpinner, EvalEntry, FCCheckBox, OptionalInputSection, FCEntry from AppGUI.GUIElements import FCTable, FCComboBox, RadioSet from AppEditors.FlatCAMTextEditor import TextEditor diff --git a/AppTools/ToolCopperThieving.py b/AppTools/ToolCopperThieving.py index fa0ce728..d7da7b05 100644 --- a/AppTools/ToolCopperThieving.py +++ b/AppTools/ToolCopperThieving.py @@ -7,8 +7,8 @@ from PyQt5 import QtWidgets, QtCore -from Common import GracefulException as grace -from AppTools.AppTool import AppTool +from camlib import grace +from AppTool import AppTool from AppGUI.GUIElements import FCDoubleSpinner, RadioSet, FCEntry, FCComboBox import shapely.geometry.base as base diff --git a/AppTools/ToolCorners.py b/AppTools/ToolCorners.py index f8969cd2..8cd6cf79 100644 --- a/AppTools/ToolCorners.py +++ b/AppTools/ToolCorners.py @@ -7,7 +7,7 @@ from PyQt5 import QtWidgets, QtCore -from AppTools.AppTool import AppTool +from AppTool import AppTool from AppGUI.GUIElements import FCDoubleSpinner, FCCheckBox, FCComboBox, FCButton from shapely.geometry import MultiPolygon, LineString diff --git a/AppTools/ToolCutOut.py b/AppTools/ToolCutOut.py index 25e11390..196da2b6 100644 --- a/AppTools/ToolCutOut.py +++ b/AppTools/ToolCutOut.py @@ -6,7 +6,7 @@ # ########################################################## from PyQt5 import QtWidgets, QtGui, QtCore -from AppTools.AppTool import AppTool +from AppTool import AppTool from AppGUI.GUIElements import FCDoubleSpinner, FCCheckBox, RadioSet, FCComboBox, OptionalInputSection, FCButton from shapely.geometry import box, MultiPolygon, Polygon, LineString, LinearRing diff --git a/AppTools/ToolDblSided.py b/AppTools/ToolDblSided.py index 817c87d6..23bb781f 100644 --- a/AppTools/ToolDblSided.py +++ b/AppTools/ToolDblSided.py @@ -1,7 +1,7 @@ from PyQt5 import QtWidgets, QtCore -from AppTools.AppTool import AppTool +from AppTool import AppTool from AppGUI.GUIElements import RadioSet, FCDoubleSpinner, EvalEntry, FCEntry, FCButton, FCComboBox from numpy import Inf diff --git a/AppTools/ToolDistance.py b/AppTools/ToolDistance.py index e20ebd36..6798ae8e 100644 --- a/AppTools/ToolDistance.py +++ b/AppTools/ToolDistance.py @@ -7,7 +7,7 @@ from PyQt5 import QtWidgets, QtCore -from AppTools.AppTool import AppTool +from AppTool import AppTool from AppGUI.VisPyVisuals import * from AppGUI.GUIElements import FCEntry, FCButton, FCCheckBox diff --git a/AppTools/ToolDistanceMin.py b/AppTools/ToolDistanceMin.py index 1ea67ea7..0e932863 100644 --- a/AppTools/ToolDistanceMin.py +++ b/AppTools/ToolDistanceMin.py @@ -6,7 +6,7 @@ # ########################################################## from PyQt5 import QtWidgets, QtCore -from AppTools.AppTool import AppTool +from AppTool import AppTool from AppGUI.GUIElements import FCEntry from shapely.ops import nearest_points diff --git a/AppTools/ToolExtractDrills.py b/AppTools/ToolExtractDrills.py index 2d3802cc..71e8fb41 100644 --- a/AppTools/ToolExtractDrills.py +++ b/AppTools/ToolExtractDrills.py @@ -7,7 +7,7 @@ from PyQt5 import QtWidgets, QtCore -from AppTools.AppTool import AppTool +from AppTool import AppTool from AppGUI.GUIElements import RadioSet, FCDoubleSpinner, FCCheckBox, FCComboBox from shapely.geometry import Point diff --git a/AppTools/ToolFiducials.py b/AppTools/ToolFiducials.py index 6a482972..d6f44a5d 100644 --- a/AppTools/ToolFiducials.py +++ b/AppTools/ToolFiducials.py @@ -7,7 +7,7 @@ from PyQt5 import QtWidgets, QtCore -from AppTools.AppTool import AppTool +from AppTool import AppTool from AppGUI.GUIElements import FCDoubleSpinner, RadioSet, EvalEntry, FCTable, FCComboBox from shapely.geometry import Point, Polygon, MultiPolygon, LineString diff --git a/AppTools/ToolFilm.py b/AppTools/ToolFilm.py index 81bf6779..3fb079ed 100644 --- a/AppTools/ToolFilm.py +++ b/AppTools/ToolFilm.py @@ -7,7 +7,7 @@ from PyQt5 import QtCore, QtWidgets -from AppTools.AppTool import AppTool +from AppTool import AppTool from AppGUI.GUIElements import RadioSet, FCDoubleSpinner, FCCheckBox, \ OptionalHideInputSection, OptionalInputSection, FCComboBox, FCFileSaveDialog diff --git a/AppTools/ToolImage.py b/AppTools/ToolImage.py index 68b3a7e7..5d520c78 100644 --- a/AppTools/ToolImage.py +++ b/AppTools/ToolImage.py @@ -7,7 +7,7 @@ from PyQt5 import QtGui, QtWidgets -from AppTools.AppTool import AppTool +from AppTool import AppTool from AppGUI.GUIElements import RadioSet, FCComboBox, FCSpinner import gettext diff --git a/AppTools/ToolInvertGerber.py b/AppTools/ToolInvertGerber.py index e6ea29d5..6acc013b 100644 --- a/AppTools/ToolInvertGerber.py +++ b/AppTools/ToolInvertGerber.py @@ -7,7 +7,7 @@ from PyQt5 import QtWidgets, QtCore -from AppTools.AppTool import AppTool +from AppTool import AppTool from AppGUI.GUIElements import FCButton, FCDoubleSpinner, RadioSet, FCComboBox from shapely.geometry import box diff --git a/AppTools/ToolMove.py b/AppTools/ToolMove.py index 866555f9..e02fed57 100644 --- a/AppTools/ToolMove.py +++ b/AppTools/ToolMove.py @@ -6,7 +6,7 @@ # ########################################################## from PyQt5 import QtWidgets, QtCore -from AppTools.AppTool import AppTool +from AppTool import AppTool from AppGUI.VisPyVisuals import * from copy import copy diff --git a/AppTools/ToolNCC.py b/AppTools/ToolNCC.py index 1f323ccb..b11fee4b 100644 --- a/AppTools/ToolNCC.py +++ b/AppTools/ToolNCC.py @@ -7,12 +7,12 @@ from PyQt5 import QtWidgets, QtCore, QtGui -from AppTools.AppTool import AppTool +from AppTool import AppTool from AppGUI.GUIElements import FCCheckBox, FCDoubleSpinner, RadioSet, FCTable, FCInputDialog, FCButton,\ FCComboBox, OptionalInputSection from AppParsers.ParseGerber import Gerber -from Common import GracefulException as grace +from camlib import grace from copy import deepcopy diff --git a/AppTools/ToolOptimal.py b/AppTools/ToolOptimal.py index cc2b6a3d..1733edc6 100644 --- a/AppTools/ToolOptimal.py +++ b/AppTools/ToolOptimal.py @@ -7,9 +7,9 @@ from PyQt5 import QtWidgets, QtCore, QtGui -from AppTools.AppTool import AppTool +from AppTool import AppTool from AppGUI.GUIElements import OptionalHideInputSection, FCTextArea, FCEntry, FCSpinner, FCCheckBox, FCComboBox -from Common import GracefulException as grace +from camlib import grace from shapely.geometry import MultiPolygon from shapely.ops import nearest_points diff --git a/AppTools/ToolPDF.py b/AppTools/ToolPDF.py index 2f105d57..4b4e88ad 100644 --- a/AppTools/ToolPDF.py +++ b/AppTools/ToolPDF.py @@ -7,9 +7,9 @@ from PyQt5 import QtWidgets, QtCore -from AppTools.AppTool import AppTool -from Common import GracefulException as grace -from AppParsers.ParsePDF import PdfParser +from AppTool import AppTool + +from AppParsers.ParsePDF import PdfParser, grace from shapely.geometry import Point, MultiPolygon from shapely.ops import unary_union diff --git a/AppTools/ToolPaint.py b/AppTools/ToolPaint.py index 7b605e8a..7673acc8 100644 --- a/AppTools/ToolPaint.py +++ b/AppTools/ToolPaint.py @@ -8,13 +8,12 @@ from PyQt5 import QtWidgets, QtGui, QtCore from PyQt5.QtCore import Qt -from AppTools.AppTool import AppTool +from AppTool import AppTool from copy import deepcopy # from ObjectCollection import * from AppParsers.ParseGerber import Gerber -from camlib import Geometry, FlatCAMRTreeStorage +from camlib import Geometry, FlatCAMRTreeStorage, grace from AppGUI.GUIElements import FCTable, FCDoubleSpinner, FCCheckBox, FCInputDialog, RadioSet, FCButton, FCComboBox -from Common import GracefulException as grace from shapely.geometry import base, Polygon, MultiPolygon, LinearRing, Point from shapely.ops import cascaded_union, unary_union, linemerge diff --git a/AppTools/ToolPanelize.py b/AppTools/ToolPanelize.py index 7d96a4dd..be41ba5e 100644 --- a/AppTools/ToolPanelize.py +++ b/AppTools/ToolPanelize.py @@ -6,10 +6,11 @@ # ########################################################## from PyQt5 import QtWidgets, QtGui, QtCore -from AppTools.AppTool import AppTool +from AppTool import AppTool from AppGUI.GUIElements import FCSpinner, FCDoubleSpinner, RadioSet, FCCheckBox, OptionalInputSection, FCComboBox -from Common import GracefulException as grace +from camlib import grace + from copy import deepcopy import numpy as np diff --git a/AppTools/ToolPcbWizard.py b/AppTools/ToolPcbWizard.py index 29b17898..a9fc6075 100644 --- a/AppTools/ToolPcbWizard.py +++ b/AppTools/ToolPcbWizard.py @@ -7,7 +7,7 @@ from PyQt5 import QtWidgets, QtCore -from AppTools.AppTool import AppTool +from AppTool import AppTool from AppGUI.GUIElements import RadioSet, FCSpinner, FCButton, FCTable import re diff --git a/AppTools/ToolProperties.py b/AppTools/ToolProperties.py index d9268fe1..59d73a8c 100644 --- a/AppTools/ToolProperties.py +++ b/AppTools/ToolProperties.py @@ -6,7 +6,7 @@ # ########################################################## from PyQt5 import QtGui, QtCore, QtWidgets -from AppTools.AppTool import AppTool +from AppTool import AppTool from AppGUI.GUIElements import FCTree from shapely.geometry import MultiPolygon, Polygon diff --git a/AppTools/ToolPunchGerber.py b/AppTools/ToolPunchGerber.py index 4bb80d39..28d42ef4 100644 --- a/AppTools/ToolPunchGerber.py +++ b/AppTools/ToolPunchGerber.py @@ -7,7 +7,7 @@ from PyQt5 import QtCore, QtWidgets -from AppTools.AppTool import AppTool +from AppTool import AppTool from AppGUI.GUIElements import RadioSet, FCDoubleSpinner, FCCheckBox, FCComboBox from copy import deepcopy diff --git a/AppTools/ToolQRCode.py b/AppTools/ToolQRCode.py index b2b77db4..1462f205 100644 --- a/AppTools/ToolQRCode.py +++ b/AppTools/ToolQRCode.py @@ -8,7 +8,7 @@ from PyQt5 import QtWidgets, QtCore, QtGui from PyQt5.QtCore import Qt -from AppTools.AppTool import AppTool +from AppTool import AppTool from AppGUI.GUIElements import RadioSet, FCTextArea, FCSpinner, FCEntry, FCCheckBox, FCComboBox, FCFileSaveDialog from AppParsers.ParseSVG import * diff --git a/AppTools/ToolRulesCheck.py b/AppTools/ToolRulesCheck.py index a738cf42..0e080892 100644 --- a/AppTools/ToolRulesCheck.py +++ b/AppTools/ToolRulesCheck.py @@ -7,7 +7,7 @@ from PyQt5 import QtWidgets -from AppTools.AppTool import AppTool +from AppTool import AppTool from AppGUI.GUIElements import FCDoubleSpinner, FCCheckBox, OptionalInputSection, FCComboBox from copy import deepcopy diff --git a/AppTools/ToolSolderPaste.py b/AppTools/ToolSolderPaste.py index e168f208..d48e7864 100644 --- a/AppTools/ToolSolderPaste.py +++ b/AppTools/ToolSolderPaste.py @@ -5,11 +5,11 @@ # MIT Licence # # ########################################################## -from AppTools.AppTool import AppTool +from AppTool import AppTool from Common import LoudDict from AppGUI.GUIElements import FCComboBox, FCEntry, FCTable, \ FCInputDialog, FCDoubleSpinner, FCSpinner, FCFileSaveDialog -from App import log +from App_Main import log from camlib import distance from AppEditors.FlatCAMTextEditor import TextEditor diff --git a/AppTools/ToolSub.py b/AppTools/ToolSub.py index 85f0e81f..f351064a 100644 --- a/AppTools/ToolSub.py +++ b/AppTools/ToolSub.py @@ -7,7 +7,7 @@ from PyQt5 import QtWidgets, QtCore -from AppTools.AppTool import AppTool +from AppTool import AppTool from AppGUI.GUIElements import FCCheckBox, FCButton, FCComboBox from shapely.geometry import Polygon, MultiPolygon, MultiLineString, LineString diff --git a/AppTools/ToolTransform.py b/AppTools/ToolTransform.py index 7167740d..41e6ff91 100644 --- a/AppTools/ToolTransform.py +++ b/AppTools/ToolTransform.py @@ -6,7 +6,7 @@ # ########################################################## from PyQt5 import QtWidgets -from AppTools.AppTool import AppTool +from AppTool import AppTool from AppGUI.GUIElements import FCDoubleSpinner, FCCheckBox, FCButton, OptionalInputSection, FCEntry import gettext diff --git a/App.py b/App_Main.py similarity index 99% rename from App.py rename to App_Main.py index b22aa467..15c73f9f 100644 --- a/App.py +++ b/App_Main.py @@ -43,7 +43,10 @@ import socket # #################################################################################################################### # Diverse -from Common import LoudDict, color_variant, ExclusionAreas +from Common import LoudDict +from Common import color_variant +from Common import ExclusionAreas + from Bookmark import BookmarkManager from AppDatabase import ToolsDB2 diff --git a/CHANGELOG.md b/CHANGELOG.md index d7ff7570..db75a156 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ CHANGELOG for FlatCAM beta - moved some of the methods from the App class to the ObjectCollection class - moved all the new_object related methods in their own class AppObjects.AppObject - more refactoring; solved some issues introduced by the refactoring +- solved a circular import 17.05.2020 diff --git a/Common.py b/Common.py index 85442b80..efdd3252 100644 --- a/Common.py +++ b/Common.py @@ -15,7 +15,7 @@ from PyQt5 import QtCore from shapely.geometry import Polygon, MultiPolygon from AppGUI.VisPyVisuals import ShapeCollection -from AppTools.AppTool import AppTool +from AppTool import AppTool import numpy as np diff --git a/FlatCAM.py b/FlatCAM.py index 1a309537..17b56c29 100644 --- a/FlatCAM.py +++ b/FlatCAM.py @@ -3,7 +3,7 @@ import os from PyQt5 import QtWidgets from PyQt5.QtCore import QSettings, Qt -from App import App +from App_Main import App from AppGUI import VisPyPatches from multiprocessing import freeze_support diff --git a/camlib.py b/camlib.py index e2bebc80..905586dd 100644 --- a/camlib.py +++ b/camlib.py @@ -39,7 +39,6 @@ from shapely.geometry import shape from descartes.patch import PolygonPatch # --------------------------------------- -import collections from collections import Iterable import rasterio @@ -48,7 +47,7 @@ import ezdxf from Common import GracefulException as grace -# TODO: Commented for FlatCAM packaging with cx_freeze +# Commented for FlatCAM packaging with cx_freeze # from scipy.spatial import KDTree, Delaunay # from scipy.spatial import Delaunay diff --git a/tclCommands/TclCommand.py b/tclCommands/TclCommand.py index d89eb0c4..9d0ecc8d 100644 --- a/tclCommands/TclCommand.py +++ b/tclCommands/TclCommand.py @@ -1,6 +1,6 @@ import sys import re -import App +import App_Main import abc import collections from PyQt5 import QtCore @@ -53,7 +53,7 @@ class TclCommand(object): if self.app is None: raise TypeError('Expected app to be FlatCAMApp instance.') - if not isinstance(self.app, App.App): + if not isinstance(self.app, App_Main.App): raise TypeError('Expected FlatCAMApp, got %s.' % type(app)) self.log = self.app.log From dc72bea2d6a5e115a7aaf6baf0033ae26d017597 Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Mon, 18 May 2020 19:22:23 +0300 Subject: [PATCH 50/99] - updated the language translation files to the latest changes (no translation) --- CHANGELOG.md | 1 + locale/de/LC_MESSAGES/strings.mo | Bin 384453 -> 381193 bytes locale/de/LC_MESSAGES/strings.po | 34612 +++++++++++++------------ locale/en/LC_MESSAGES/strings.mo | Bin 353706 -> 356444 bytes locale/en/LC_MESSAGES/strings.po | 35678 +++++++++++++------------- locale/es/LC_MESSAGES/strings.mo | Bin 386610 -> 383433 bytes locale/es/LC_MESSAGES/strings.po | 34550 +++++++++++++------------ locale/fr/LC_MESSAGES/strings.mo | Bin 385884 -> 382751 bytes locale/fr/LC_MESSAGES/strings.po | 34386 ++++++++++++------------- locale/hu/LC_MESSAGES/strings.mo | Bin 353706 -> 356444 bytes locale/hu/LC_MESSAGES/strings.po | 35678 +++++++++++++------------- locale/it/LC_MESSAGES/strings.mo | Bin 371344 -> 368412 bytes locale/it/LC_MESSAGES/strings.po | 34189 ++++++++++++------------ locale/pt_BR/LC_MESSAGES/strings.mo | Bin 372242 -> 369326 bytes locale/pt_BR/LC_MESSAGES/strings.po | 34150 ++++++++++++------------ locale/ro/LC_MESSAGES/strings.mo | Bin 382456 -> 379433 bytes locale/ro/LC_MESSAGES/strings.po | 34566 +++++++++++++------------ locale/ru/LC_MESSAGES/strings.mo | Bin 490574 -> 488946 bytes locale/ru/LC_MESSAGES/strings.po | 13783 +++++----- locale_template/strings.pot | 12396 +++++---- 20 files changed, 151660 insertions(+), 152329 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index db75a156..544e4fa5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,7 @@ CHANGELOG for FlatCAM beta - moved all the new_object related methods in their own class AppObjects.AppObject - more refactoring; solved some issues introduced by the refactoring - solved a circular import +- updated the language translation files to the latest changes (no translation) 17.05.2020 diff --git a/locale/de/LC_MESSAGES/strings.mo b/locale/de/LC_MESSAGES/strings.mo index 22400a33f94f282b8ecdf500a26f396aa13e0ce6..392faf0c88d6119a54843752fd71fc9dc3faa6cf 100644 GIT binary patch delta 67141 zcmXWkb%0gX7RT{B_YU3NFm%rhFbv(@-QC?GNE|w(Q;=?H5TvB*iP9jUfFdCv-GajV z{_fiEpU>X=)Q+|GIWr*d#1E+^uT16LN*X%P$N#d&_xaLe#dbblvBW-K&!cMf`RWEj ze3`Hw4#R$!0iR%6j29Z>%ZfQLJ66YV?Ca{wFd_957#lBRBD`sJ&-a8vJR06&0`$kQ z6A~kR@`X9`V>;@^F%34xSlAbJ{SbG29EMU~j;U}BCdUJ)^Dm z6o%9AAhu0$r#K{LH$wn zk*FD*frW9gJAM(>@muI=q%SFGL@^TC+GRxbuofo45vVnrfdz0G7Q_n}g`tTN1W#BFI_!#5{s1)*q-Anl7x7{k%cA=@eQV70&3*{;YoazEW}p<_azVU<;72^ zdY%*^zN*+8OXF_riEptEc1RiGtA{(VBF0D+;;V+$u`bTVhIlU(^RJN?PaWb5U<1^e zH9@U)dsOs~z#6y&6{HVQ=f6Wu@kcCzvD1Y3Qeat(iH%X`w?duY14m&WR4_jGD8!-g z9`#^xT;3QK<9hp*pe*b>GdX;P&=W z2&M(<#9vV--bLN`C8`7dbk?zWs0XJ+otMQKi8{YDY9O^y4{GM@jOy3`)cwXF=Xt&< z?!bIh)ULslxC?dS8PpB0pdNVJwLe3h_a1fQMCok+8Bra~h1D<$!*C=j&6lCh-;23; zzVAm0)oFNvJ+Wkl5MM7`k3}(6Mhm*SSc>{wERPrQ7t$|9ChN%GVU`{K%$7Y-sE%|* z4XiIJdq%tV9r&K-`wmgi)bGh+d3h8yl~=GN-p72HHLC?{UDQ_H4Yh_7P&2a>HNs7( zAUx^nH?TAHw^#^UWwV)?g`P(K8wFjMBfAAnS=7`wLOq~0Y6OE(8_z_HVB|4#STslH zv?bc@JnB4yih*mW4&FoUH?L4L6Ehe2ueD8@E5x@7GoWVT2x^c18MRh_A#vz?i%O#; zdF;k1Q0HgCFwBP2ojxlfx>i#?PkpBvz^EBwfzfc#39^(6o!gZ{K9hq0T z0kwfVM@{`ZR7}KzZ-?s0B-8^Jpf;K{u6-YB%71d+L=E6M>YWi%$YLrAnK{o_ zlY(}x`luduMBQKjY9tdd9KUhxr!YVD8>kPFxKXzC=E7Oj+oC%75;Zga!d6d=x_=m| zJt9~q|4LC%P}RiZSQiW76x7TdLR}aVZ6i&Ls%LlgD11e|8aBaFMQrKjVLj@Lu`)hI z%~;{0_JL9!6Dt3!P*4yyMvb_aJ7F{`s3xHDc?Q16HK?>)S}equ4R<+z!!YW;;)y zMRn|>tH&$pvIaHalBnzJl_dW);x;sBsyjG)ItQUfG!k3mB-GUXh3e1~)OD{>5B$&7 z6O^)gO4RWjt{#C}$}*^#Xyj2)PugJ)?BnY5Q9-sEb>kga0gs{5DOPE_L2ArQJsYZ{ zl~LJK7xkbHm>P%T?>HORWB)QXa4&sXo02fpg9@V_T*=iNqSmUTtM@_0iiZl;i8vJ( zp$3wxoOLJ~b5n1M+Iq)e7_M~nW2Wc3LqQJ=l(!R;qSn43`mqSA1I1Aztb~gGI;f!Q zf-7+-_QCWOLVRs-Do(=3I2Q+14Dk)YxRoqB#$r6Z|2I<5lgJOwR5 zlIk{+Fw{)sL`82|RGL-82G|%Cy&F*H?ZVD@4z(1~HLQLet57dn(>}{5VK3^}up(Bj zMgD6Fr_{2w+l~XMXRd9ZWb?2Z^*>N)m!}S&To{QxFlOBlUo-5FeL{S`(|Cq@$@(F_ z*BG~f{lxScdvbhi!w}!kv_EfT*|fhg`LDF{H6gz_p(0MEx~i#-B!4rTk@Kh-xQd#Q zyQmp^f{KxUQ5#F5=2p*!%8nwatg3+;Knr)g9qRgl9t8!-Sa)DLDsNYyqI@?t#dD~j z%+RqSCM(s$-*3OXtm_pc`z#tauVL<0I4s z@mq!X%3wZcPgJmNLLL7F^)dPe)q$i;quO($g1H(-Vo%ilmtZ&^K|1RBo>PdRA#NM{ z#43)}sdvUO+>UzSMN|}jMBO+`TWha`d8zkCeJy{3%BHKRG)vabKHJNpmU<+X$D^23 z`5&XbdpV%ivLx!`unua?dN})`V&DtZ6plk>!2;BVwc6F!qdN3GYAJ4`cFd2c2M0P> zy)p*h|FtP-M6FN{9EF<738*|>f_l(a)Qx^X1>rH&d8bi%eFyc^@N3k0g*w`KB~Tr& zh>Ep(sDZXbPr=rQLhv^m&gJfeA5c+!7IlL=s0Teqbtt4$NN|Y~U{UJfxEZ_P229b} zV(BpIx<66Zy+XY!K6fVnRY=gq9+VChOp&M#)pB;l0@TN%*7keUr`iiFg!#JK`E5~4 zHw?8TUt>&MjGD1ks2SLVdhYJ7o)u2epq^cFC;skEcz_!DTUQTsvv0g4sP=BCkI=!W zberqy`&|8+tA9e>KYe%m88a6uSm${ZT2Z)&Z7{NjjbtV&jW(hl@H3Xdhd2pyvz?8= z?{ES}_6qTRiMvrTP_VaM*AMlwn&IkOPT^&# z)^=3T9Y$Su71f~+sPo76wI5)X;5_Pgurdzq7vd|6hjD8NvC}`8=ALi+0Q(W^Uu??> z%?8>C_TfV6|Da-F&LG=Lx8Mru2T?)ScCdZ_FGRgHFQ7US`i0#uBetgQVI91M%8u|M zdM^1NO#ys!P-&5DsO?ZWP*K|m^I&Jx8qY$d>2B2CegO60GpL~QeQCd(N{CvDCa74M z?_7n7g>98C~a30I!Eev4hVHUmFQPCTY>Oe765S77(INTk-fa=%{)Po+Q zHmvu!8siTS@%6{;=#8e3ZG=tXTGU8xp@JjH$Piymtbo&TCMu0Gku@?G>ZMcw)zK2D zwJw9&HzuIcaFKI4>i%m`OK{C2|5f;d1_jpx%#H6b6J{P|8%R0S40S-wKzHXL)YOhb zjd&Vr$(Eq@fi0*R_z5+$S5W8QMVi>dsWlX^?kfX8{RFb5UoD_#8nhEqT7+CMr|jbR5;;Iuk8+Mq+*H+fe&OV3K``rA0kwDbfMYw~|6q8a88ZJd9Bo zG1-EvBi5nb8*Af1T!0C_3h~XrwWzg?o?Y{Ei2K9g`sJG}6R7ZBW`VrK1S1|&gVLr?>-DavL z7F7NZqoB9h7SxXR5H{LbL>-@t+855D&PzJeZd}7T3>CB+QEPhK^<<$0XhA-*uo=q!V}Pg_il zBT!2`AN9QTsF?V1HuJ9={!W8lChssSrk!ICDD7;Ex^N8Y!WF0~--GJ-S=56bp{@_i zwOGiBx_^1pdCgsYusc3|F8QytTTg>_vg4=`okiX74rpWoQEpUPl|Xf*Cn|~uqk?TLY6qN(3bHwINH79omL^zyZ_) zj-!I?3~HusqB{5|YTtN{x-RYli-}aIrHn#i%JVg#pc@WAo%khcWD`+KvltbOyD=Z$ zK&@$UK3#u^8%Yh;|6FXoD ze2qU~C-!GivGwyZS8DgIAzN_?>G%gu2l=)c$Y}bzY2R)}9ho&xe}XQmBD;L*0MWGV)&| zTttILupZTcW3GM)Bd9;YN|<4}{lQ`fRP_Fck(hLaeWF#sFRAxN&EP}S{hp&{%(v2l zGy~QNVTWDmS&#a!vMiX48p&N$u!XL+eV_m;YO7;W?1p)8C1%Gns0Y461>px&j3ioP z9mwJ==q&H7?@>@*wnwd9Pt=-z;ZB%<+KA?(rfe%}#(qLg?KM|_h>DSSsHF_7wH-7a z>VBnA_pgb%t_f;DURMgb;Y8F%G|#yXb-`ZL8XreZ^{=Rr$6IIV7mXTmPv>aoeAIOt zQ4c(V>exlp^By5HtU~7a*zn+*2N1>K#J^GdZ+bHNkJ8%^qK<#AhHrng7GghQN4Rzr~)cMz)cd!HX zC#dwTx5*rg`blb$b1&-UbQPoVBQ_!ad<8e#1z&9m@one8Rt&>-TkZ8b26e$E)C2CI z)-?7ui-}auf~b+!LcQ(UVSXHeTDpy>HNWBfh{50gr`>K-8iBbvp&sh3H4OE@rLKMq zHKO~dB?$e_&dY(SS3|w^dZ2dB^{BVrJyg~_!6?kJ!=BS(2l*dH!+09PaV=^e_yx=0 zGiSt3yI~(x`$p7;@;7RKNcFw_@q86jeGY1*$1n{4L}f={mu+B)P_dML7xS+RveQrp z8)0o+gPQW!sHx7o+k&t-Y6q;2Ijgc`|i)B_J=B0P%<(p#vse&FgKQ1=VnYaR0v zQP6|4V@WLN>U~hrJ{-evENTN{yMlUstV(^zVX}kg`;Jgh44gu(%~=d?FwQ%uG<<^fG3gO|Np(Uk(RfsvO+`)h zT&#u5QE$Vis2S~c)SffgISf5rFp7evWGX6pH=x$~pliR5+PU7Lf-BuI+wt;ZCh9X# z$G4(po;U}~ zqVI%#f|Wy!unKA>8lpPV(zOpn#lmRRz!so7xZ?!*--tCiN<$GEQvc6xR2P*ttx&<$ z2lX1Bf|{w-*c^}IUCi*KEs_6}9nXn*Xs?6{y1v)|r@7;|F)#Jc9))rg^8RFh@X!mj z1n->jeh%@4QO|_>&?t)(YJp`!f(D(F6;mL~6Md#lz#Eky&=%zCXU z1f$#?7>rtq(e8v9SdjVxSN|DxgUhG~{f=78H>fF(amLm>18U^qsN*$I=eKaj`&r%d zjd2YNP-(XwJK#agg;~zp2y0+Y>YXq%PD4%MR;-M_q0%bLIr}la2kN{f&O@jyx{bPT z%=4;~e-RWE#SKwYJJ8izws2N!A z>W473^8XA4MelvoQoKT?rT?PcD4{b82D8M~E26TcDJpm;qk{4X>OSc&+4Xr*^)jwr z+u0t2fB$bV1x5R0EQE_tOK}dBzjsk<`vx_22`*buMx)xBV0r9=n&R)UB3?zEpZ*sM z#!9GQ?2nr1`M;3=nv(4_WDMcY^HC$bf5q1JHR^*T?5ed_M+IL~)CWZe)W{d3MtIqI z2lb=bOVmuhN8LB{n$2`l)XOLnzkv+qbwL`G-!)Kc*AaDtA*ctAL|ri1xfm7QTT$tE z8g<@%)B|6jV&y-Kz_9D~DOMLtQ6GtoaKA^P9fhR7+KB^E!L%AfaU*J^+nf(k?}jYD z*^ZVEwJ%gaEkQS|$V_f>zPMp;#pql1V|_o=eFviM;|-;ts2z(M@l@Q3voSR{D*rpL zQ*7}^h_40ixoy8}PJSoEcZl=4VNu$1-?i)7-wW}5PkYk)HX}cx^8XSl$nUuJ=g2@k z-$x4CoBe-TkJ6x~GAruBaMVJ24CoqwaGX6&sIH=Y7N( z82f<+PW~;Rpc}0~b!0CpSk9wj;TEbRFI~I;q5X+RV$@VF#0t0+YvG?*1|uKY52<~f z`%w1@{o7_bISy9-r=^e|XQ4W92-SfrsInTt`7SK8kwKS=5a#qJrdi)D0e@rt%}^!MIOsDGFnC>UD7{ zEkw-$pIXGxXzY)Ii>$f<5H9)#E-V|J8xyG{`X2l;uP9xTb4wfSRc`sG$1N z9UqTj)Tg4>b~CC&2T(tNoIqvOT~vo2p=R(IYJd3Txf3$Kum|QujXWGR6J=bzK5B#= zP&XWe>c}wE4mtt#E?A7Z{tW7Yw=f#-U@+ER+Rpk7YAL*v6g0JWP&fRDMKIp*EN zO}!rKf|-~NH=}0cB5F^6g8BeS^4d0}2-N)=IoqN-)&sTn!;z)%eDf%1&6c93ZWC&) zc4B@!h7h1ym4S!C-cv*8U-CZU4c%82g<)I0|!6FOQn(ZkQWK<4~>1 zMhahI_V@OS!{vB_dYXT13V%nvjvt|7;4^Bbl6X_Y*c7!!ZJqs4`@k41i8D|?f}O@)82jH4-*G&IU*Wj_Y(^4&viqe$ zbv!dFNTX3pP!kn1T|SZjN|Pxx$PLa@sE#~9jrbqbh4DVyh;pDtm>)Hw5~z+=K|Qb` z>iTY|>%VmMsi+-x3F^9?pFP`14%47D{(yZkJE5gCn~!?^F2=(63o1L}h4_POT>*Ph zuaAn2!>HIfftuOVsE%Gm#mGHZe}jslfamuIdmbNkVj5Hs_2BoY`vn44PlDP{(xdJlf$FeV+BH-_O<{dh&)T4-uq!skp{O)Gk5%wJ zDv!&C`h)4z3>D=gF*~k7y_9}NrQs8-i5X(}gK63w>44{(LqTh_0JXtvKu!JsP#rmg zy73ikivOYVy>U#tuDP?Pb0lgYGf_dk#MRe0zeCN?pcCpmj<^GL-38Q!^$=^}V@#*~FCN<;{3vXU+G^*b z*8UPI*dC#Fv@CJ_!HuI5YNq<2IxrQr6pK(xwi6@q1eV9QSPqND^#^}u9EN&}Za_~r zI!-}pa~q@aEou$($1@wCMluvN(yyJzP&4ribzLC7Klt-Qaa6sxa}6qcZeVdtn!pBF zD}kTi|IpBp2F1X1)JT?N6z;_^e2N7yQ9^q_Ip-iONc(!!Ox?hIm^_hS}=C#dsshFNSBMO|Of)mx&DcSQ|oDC#-u!^nR{ z{ZSfp<1?t>`2)3PZ(aLm*Pb-9-6$980mV>TZ9UiC8nuLdPy-r=deB@~-;4^z1DFdh zWcDl#KG2|GOP9rhr!nfrZBZlah2P*hRENuFwP34-iiL)#DeZyUQAePH^BYu$_Mkd+ z2DOAYUHfB?f~GbkoAoRaY6h}mUMz-6t4^q;nuvP9EF6YgP#w*a-5yi~i&C$N)o?uO zKIc#`vyZMGmcuqKuOkgpqdmObxo<{AY8FSh3tjKZCmxlt`;46rlnkaWd1=P$`ckNA4@BJ>Q2lqft`7qZ$ z%{dD-Q}a+AUWN+R4X7YI;f`Oy7|Q=YDCmawQ8#>x`Z|rB+b+n5!I7eZw3cgci|TMc z)EbXME!{lS3~of7zuO)E3Du$BQA_qn$Cdx@DCmN?c`O)HqUuFZzkIHMTDvx==pBc8 z-~!Z6xEXch)2J_}tFC_2`M~)Kb-z!jnN6FQ{MUnWQP2pZP(7=N8c97|g;09 zdWjnOf7lY^=eKu5H`L6nMWx+Om>ch48%z*x9qxtYs80-ua@YhK4U-|o-20bWN z0ef&3>`A>WehM(fc!2t*!v5fYs@*->rur|8p#2GICNmVV5$DD-)El4%I0y9_KZWZt zeo@=fcX_Vx5tX-Pi`i5TMU8Y9YASy~MfGLWgKl9kh_EE-^UfWQDq%ZkX;ko4L7m?m z6&syVLEaOUrrt;jI&nN|%Uyt)krk+*+Jj1)W2hLpjLPe~uKlrV{|`0w2};`aSy1~) zF=qqRgL|QZ*h7|p?|%v!;d)e59z{LqJgQ@VpgQmhHR8}x*3l%+wAg_5tf(3K0u`L2 zQRmM@&A<{=2iK!Es)HE(?|*Mo&=woFv^_8%s)uDzJ#K)yQ76=m`#VQtH|jG{Gx7oT zAb%N~xrC?zr9lOAPFJsln&AeRT>0Off~Lw-11`kexCPabYgiB;qdJhOtUVwc^}u4z zN~n(1L(Nz-)b-t+BVGG!)Y7iP;NSn*LO~-uh)Ro}u_oSj?cwFDVx#NjPgD#HKy`2eDmLbz z)_N7{L7P$8vln&!OVrfAMGYvlg557I>io>80pzdX*^P?Qpc|G)Or(tl)QL%Cz6%!9o1AC6z2}3ITgMX3PD?=fYhJ~mH{)GAQ z0_s7ZQ8!3Z#X6VLLUy~ zt!kgmi!hA(B~)6zMvWw8HG4;7N9|ghVvgLXSlqHgdDY6O3x9{d3nl)mZ~Gs#d7%z(O2Hdl{wmOyPdt>`=}9pLhIJ$%s-vkGkJ*1A?!%-g=l~BRf5p{iERQ`{^ zvbfE)zd*g*J~>m>_4}?+kHnl9%d2M}0ui`?hJn}-6V&$yf2Z3Y=TqN>+IVU;ujQ88zZ7SOlM870lV#ej(8ZwN-zE#G2>3L_s^&Gt^F&w~3w55Gzxk zh86KLDvi=KwI9h!VqWTlv0Mm2i=C<8ZDz4kqq#r$Z@nzQ>a;&Z-7l(z)rVo2zW+~B zsLFxAuo6bLwBQ4(`Q8_)}}U zf9JNGr~L0jK^JNikPUaN;axFPBR z?ND2APt*&%loL{dyjcA zdtZC`)J1J9?NH}^iR!>q)Qx95SD-#fwxMS1Bz}v(;Y8AJTt7?m_yhdDua*DxDQGPo zp+@+^`585(2?pAfra`?M3Sb#5hRU9ys2SMhJcdfc^VpsTzCvwOjR#v6jX@1;6Sh$P zU!`ye3w`1Dt;JWk3cnfR_Z`L3L;b#O81kj1(|5R?`oLj+-xka<+|K*OxnKl0roF{T z`xWeN>`MI>2A7ba*9QJ?1ET|0h6=JOUMTB~jlG z4N)=B*Bu{cc4a{*OD_*0=!bf#p$CUk!DmMyRN5jau_1u6-3MCN`l4 zasqYZtEd6|c|7s z$evJx4R`f)UB|KPv>vxdp2kxoU8U><5F)}W?#6Y7HFsPsF9 z>i8v82Oi-ie2EJPx|8E9INMC{`^wV37|Y>J{1-D#^!q-emwu9+kbbg1_)oC4LPhUo zRFuDS7WvA4Bk~2#r2Q`5!a-B~zVEQ%RKIU54~{j>AN-F|r%bmQ_yhZK{1Yx>=zVAK zU4iju6THNquispM@IRLc``Ygt%83i{OH8)FUM|y7Ke7CXih-C5nR*^n3ENPw@r?~& zBetUc7`1~|=V{TL*A)j*U$)pbxD-q5tvMNe{Q0x*4uxWzaCfPFIAmOAUp_r>4(;bL z5<4!pP~E4acQyc+XU_pkH^{}xOn>be7{seg*OFmjdsYPJ~$|NFmH6ck)n z)PQkU+m}lzRPap4DBOWx;{#L>j#^`ByAIb<|BN?r?OOW-#&PRxU>C6h?eV`Q$eEG4 z*obq5JLUfX*I; zbu^SZ;1B+1^!IQC_1*_<2_B=?yy78?g&UZKddOk>Xw8O2sQ1F;%+MMvPkrAJi;@2@ zC-rPcEeLC30qWCnHhPCC{7Rw0F*_mrxCKpL)DE`+-{Lkri|bBUj0`^M5B_D76IhY< z;{US_d8q985vyS8AMNwLEow#;s>(#G*-$Bmn_M83alSM4BzC}%8^dB~oVW_FS=*)TB zW@I>O|2T(>G3KB4&9@5G!G|~w^Xm)e8inuf*cwi`Yv#OX`F{+%G9wM{+fOk2|ML6x zbN&|(>?fS4hc-j+Q5#C{M=TNNe~mk-k9lmb+agcwEgALH-m-sTdd_R@J+qz;dv0t0 z9VX<$WH0PPBnxT>i$uMox?w1;LTy0bqP_?HAu-X8akoUp&E5 z=w*Lp4INNZwg{8rMO3=nb9LWq`w~iqI-U#l?NSvs2HHijfAW*cgowxD7QEf1uL$9wxx2SPuV1b)@t= zOT${&jQU#Cw;+E-%JM%x1vR8}X2G7+!|?~>g6-= zgN=MTcB8%=b^o{@t%E61Gn)-#EC0(-NRL%fYt#wDa3U&izeP>)b<_wRVO*^EuYGRU z!S2+1;8%DBwF9>M&;HbG6so=)!|;%+|AAgC8a`9d4P$+>o+m{;I2&pT8==;)BkDV0 zgloT!n(_xY7vG{{V#;URITv6r>i1DW*^qBw1!Z&8ef#qF--1)<(V!`sjJn}G%#W*Z zcL=|XMn(T*f511$&mTr%UFyYR1cF=aS6Geu9n_8U#|&@pbiXljzX>NRMZXTyZSQJ2-l;|--WvIQPc>}pqBCyX2a*Mo+6gj3!;uULEV3# zM?t|g64mqRs4Q55De*f@hNn>H-E_yFpdRdxZ5>H~IzJ7@#7I>76+sQ48fL}%sOtu! z?&poBpnRT%eQ`C`z!Y%;!Srf}t*CcKMeT9a>+^Ti4U@*TC5Xl@)Mwx{mh2st!twF# z_^||bJbglIABP3>{y&;15PWOBMomek#DQRb=SEFwGiMuA7IZ>Fz&98*;-RRenCXr$ zM$P1A)J*Qju6O~@Veuq^;5#I4(g1Hm@~;ks2o9`8Wy2NJgKwdN@UCl5nk*3fQ7kR$ zfdx?=E{(dbD(bqrs3~vkY=hc@yE>&2!1u+!+5OypfrKtx8Ufsf#ApO1?!EL$5A7#ktN_8jmNPpR?ceqJP~_P z--PusbvElz53Ekzmpu^tiwiYSuiGBj64#?*E2ftt5d5-Vg|s7Sram zm}r5DiSDSi?vI+ek*GADj7rbNs31Fs8hIdBAo#az@}sVgKxL0tgo4(-HfkxFI9oY8 zpf2c!EUB-bs}DfkU>NH9*{JImIafH>p|0PI+L*paZO!|!p7Q@N1@$~>ZW~E70!k=~~pxoJV!&hO7UHm8d^O-6txKIz|+gqM(LKsHm@v z%Ihwuj`Txya12(&d8obpSJZW%Q5}k%*EXh1s5H%jnJ_1+BURk-TBrfl#RQ7tRuuGr z9;h3R#3-DIn!5e2{WxZ(eg<{pXIK;y<+BG@MeP$cP&3dB_25nzpS9~DsSn9-=Z#0N z0S$8~Z03Z&P&?JUh(PdXyFD0AJ%3~%_`F!tAhH# zXotG*7pNtjfV$r@)Oq_|{YpXdUp;z7gQhfIA-f33cOdLdY{4VN& zuTdilL zZxk0y!%Q4cSi(jaUeeaEB5DBjQQ6QPmG>i2Gx;5A#3xYig5Oa;^1VPUt(Ur#tz{L| z2}4jL`U;EVH>j=j7gSItDQ!DjWmLM&!an$etLH6a^+uSJ_7nI8KEaLHscgVE5tEc- z0Qzr|7E-uC!@BbJp)s^V@Wa4&74=9-~YWpL0>XAQBfRHH4yx5RyZo1rlEGMMX0n| zhT6L~qNegXD$RV=YzAYZ&P$D_Fq>$LVdaPM6Kay zSD%ZD=Jluz=csGH?%JQC?h~tq#Y8%1A=ChCpq91|YN!^*XRc%|M>8Shf$3plAcEIFy0>OWra!4J| zzFZR4wV+vp`r76H?j~q!)K5J7aipI$t#48Pbwm4s;|Nyfc)Ui|@%pHacEY?k6V<`} zsNbxdN5w|WCbqvM^(ZJRBe6Et#iFzf4mBeqQNg$n=iy;& zijA8Ef`S$GI*)AM>Q?8|0(OWWZJx3VQG zkJ|AXpq8X9YOVXDcF^&zeHH4y-{WOGh0KKKTiV)QE*nrIIf?q!$Zb?weQINA7~0mR zE-6OQo)N>afpZ{gr<;e`n6{#>zmA&8-%&vqqn*9vvSBj4|Eo}#!GRXo1^>o^*r2@y z%>>i~_hC$YhMKXrPG1LGy12NW_GY*S10BuvxRQFEPWFxY601`0)0v%A`M-yP-t&Pj zmY?xZQ<)C6(d0*MOf66w(j?T&X1;R`)~CJ`l|`|-+V!bX--dZmGf)^?VhbFBd(bOO zA-Y>2_-nQ=P#64-y5KFUBk8-F;ixGti%QGps37cv3Z|*3HC~B@a2IM{d4&2N@b|Fm z;-Ll*)`R@ljUs5!4Ju+OY>vwR1*oatj_S~TOo#D%27>=2TQ1ZC@1kbrJ?efjd$}1z z)$^lvzVa9Y>tkVT+Kc>;rZAm`3U~rF;yAtS#_3QOMxdg)3}z)b>tieGgZo%4T*i9T zZ($>h>}w;OfO^@?Lv7jLpwfLis$&;C3hL2))Ra6%jqoGp=Rv9Z*_u}BZ~H)FR1^l}u<@dVTezD6z8 z7Sv95+||#c&byDg&pT9>{EJ$em;=q^sDWlNJ^nb|E+~size=bMY(_m`530wHLE%R+6JSTpZPbdKkbqsQY!mgv$TE6f^@KDoQ8fXq<_fx}<|G?^C0W zXF}Z|m#Y^>J)pF!*F?okBUE;DLXCI~YKCT^mTo1+RsNr)ppjlj-RK^+!B?mY8+>8y z?J*bizNo2Ph#K)KR4{#ydf-p^3ID=tcz=kE{LoN4?-=U3YZ(0ZKOVUQ|Di^f^h=BW zOsI|(!eI2{SnBmr9le6#co$1zvSGGi)x~_&N4ok(=XKP~#2RkFoN74vuV5)g18-Mf zX;cTwq1LoEY9DBZ>T!SEgyV2B78qeM^8?PNo^@m(_z#co!UfdZk=}Xm18Rx0kFpNr zM+I@IQ5?_+8_=MQqz!5+2cV{M5@y9U7>TD)Q~$x$Lr2?Nt}v?O4X`Y>Ma{qp)OBaE z9Dc?ISZ<6RpXX7iLBmnZi3!KrPd3q*pLz@DWQ?M|8@07Q#ts-Z&R$mIP#f89)Xw%4 zHFMd<+uN=b>cMSMOScpCGV_j7&>npXH50c{Q~d;|;b+u_G;M-)a6QhaegPk1*NFk& zDy%;#5d7zR-{M!)J59EqaGv9E>O;S>x87U)mU@{f0sWbh=X*e*6AkO8+FB-8g-n&9edFf;WNs0aUr z#W3S?t2f0k>NBu7Zo{JZ_j2;TGlgs`EKjFkLF&6OKR!gIQL2^J!HQU#`am3yJ5aGv zY?b|(y$9=3e~({dwbl0PyxXX3=)J}^tcj?Z+qK5CA2u)1pf!uJ);695s5MKCIx!Dw z=c22=Fbprc`YY6w#@lM?7J(Xhb)1Hcu?pVB zZkTVI{cdPJ=H~gnINL2M3!$RDJ=VqfV4tSc|DmzHvA4%zlw@}-!6;lq*#DzK0JV}QNfsgw|(sv z$2HVvVjGO!V?RyL$0uyHFR&@?zwZkK|D)BSKiCf-JAWYmHPV9n1HNTA8g=8$2W+j% z;1TK#P*a%VpuJvOp<-ew>ipmE3;YKMW4}Z82NMrau~GeSAowSw4RAj7gQ!?&bcFoZ zj@0dljd(RG%6Fmi^foFRk{-1+&4gvC=S4+xPb`JQP+74T6?C7R36I%*Gdd$tu~8l~ zV{MN@V+wsy8^`}pQ-2QC!`r9_y}{}jdfa~dRR`7n1M0k=P%oETsC<8chcLkjo7pqY zUMDTa68z7;BfR1iG=kpP5I5mQ4EfR0X)`LF_MoQnBnI#tHo;4%oiFbx+lVTmcD9eEo^wjZnE9aP%oKWqC(KhzRULM_oEOw99ryD8`fKcc4c9V#7@oU;p}u?+QUsGymQ znwgC_9`~STsPuW;$ZDY;)E9N$Sm#Vs@GU{TGuC79zyIAvp#=^5Q9EJk3xVKYN-Kei zjXS9J%ohW}zh+kv^#SqPndef#*Oq!))Okm6Hr_?W!WWnA!6Q&R=w$4JD=w4&vy`VN?a8o{@yv^$Ji%ge6)IqJ(N_HPzL z!vLe?ldr(nl z71SCxMx|dXRB(5~d^jJY(K|*VCxs8FoiEGpW-U}O4#BKA8#M#FP}y+_b)%3!?D}vF zquve$bybbRmXneJEzYofBC7p74D52c{snSq+J&8Q7yCu)sPqGIG%RPa2( zUKsPP)d!-s@M)+exr_RAOLoteCIc#_^1FI@)Kb(}UHLzjf_ADos1B@fev69st*8#{ zM+M_K)Chic$M2)k>=mkm|Da+b>3zFz7Hma561AaCM=eEyzsP?-h1?WmK2)$ophjK< zb>kYSy}KUj#?4V3>5e*Y5NgRLqq1Ww7R3Ldg7*U|w(>o&0X9Jmp!EatU%}Cx2CeZp z)H`4qYR5a}+T%R5w_i3?2l}9b%tNjDQcQ^lu^aw^>R6dawm&pLjkp`?{PCy`u6g9y zPIrxlx-^XXJK(#B7f@@s`mx=33u-Iq8tG}&i8nAY#(icpl@7H8(Ws><=jzp+jht;!Y1;#J zze%pXz}3C)DQF2!xQ5?R(fZ8QL!aA)$x-duP$Mjc>QFNbE+Hyw#-Vo3`KTp1jY``) zsGTs@3tPIBNQe0MA1Ek)E1`D6uGkhg;AD*VG7$Xhc=Irdy8o4Z`xU`i)CZ!LCgy9K z!33!Lg`tAE0`>?Yh*810`;C1Yp2JMa{{nAqN2-U~aK1v_U=wPs&!N^b={pO~;;1F- zh)TDJJzPSlM3=)8%VftRSI2zk%>Jl~guf=PR(I2U@%Kejfw&@BfUZK~p*vHL?Y$ z^xJ?6ww-tkFFP0fYctaFKf7Un4CDBCRGzQJVt5pF-+xg%Z0t{Veo9wxDW<>PS~-f7BK_9Ha1~Gm_s54_G_M!13&TP~gRjM!sE&-s0(cBHrEgF-j32|!k4B|cd(;w5z_PdL;XMu@I(+Z5^$KHK~um+ISB2vdS1I zH25bVd9fMw(O3k3!(5mwZfG#gOJbPve(K2j`udpH3jA!jDP&?oo)QGaiw;MOY zTGY3qI`|*zK}8dU1~;a@s9+n7%KN!k0XJbwe2#6E|Fsf^2LEEv7E~;}MqS`fWFtz8 zL#gM)xVQo%a1$!3Z=lld1!}2$i9>@yoC=jqxlvhD1@$&<>yCHEyvqL}?!ao)UcLbp zbURSlaKP2ix#QPe`=6)>zeY`cAc=J-F>2?_j=EodRK7=}&aa0}uq}FO*h4{S@;}rR zUqW3FBWY-GLkdIfjAc;i*bWsNqft@65ySB+sv|Lz+0-Y)0n~G#?*ENzUyGXIy~#qo z-~|_G&<=MCgCoMS)C0*wgC7gd-BBa=oXb#ad&qec`;gxsu?X!wQiuBbQeTDj zs3%WrOVZid8#PmdJqjA}SX6M$#wxf3yWl<4-d!tQXz(pJ5EUE4P{B4HJKw4eXVmND!8|y267OU9o{VpTI&~>2IFV2bjyKSl7`qGyQB7rGpMP3f$Bh-jG@6j zKGInhHITZf;A?@J`i`jA^dMA6hGQk=|5p?g<>ygT@+T@yp5X?3gBs!TOx7MV%x(}L z6;x?aL6`$Ill4(C(hl`57=`M|0L!A5qN1}7>UG>4HPhYEQ{f8= zv2Yx!hf`5Ob_6xWKcn*XD(Z&MP|^PZlVR%I7Bl%U_yAPwbVp77C{#yhp_Y0BYNq$+ zCjYgz*J;qkQznm%v>$3F7NVy1C>F(MSRZrcwY_{8s{Ifa#P_Hm&704ztAo1FaOWBf zqka~(#Lx1P|JoqpSD`xa9cl@FL~Ur- zT>BGLhXRpy|BR?~_X<WG?}A*dypiwdffsF`|$wJ~i0o9b?;4o$=2Iu8{? zAq8zIqfu+!8r8vJ*o`cjg*=D<{;!a&RjMcpqKc@V_D79m8kWN)SRH>y%}AcYHbbRQ z`$Y}ZOw>aSq^)xxYJiiROPt?fO6C9mC}>S@p`!gB>H#lM7luY#w5LIhqzG!s8ltkH z9V+j8Vj-M?dOIFNZ8T4?2j(jh8vMKD3s6g$q$tnj`M!!2f+N5h)ayBypgQyr)sZ)t z9pe_Wmr5i~U@FJp42)C4_JxHdZSOzt`~{WHzdG+apQ5*u1Mey5ztz}WD%5un|1KTs zidoJj^ZTRmsSW3{>SDyD}@IC4Co_jMt-VnOLi4i{|mLRyhaV= zUkt<8RcwZHS0VqkRwZfB23i7KS1wHU3s^@`PwpM9TGm{O~UKBNzbubK@ zpgK4NwYHN`K{y*Vkni2`pHVaU8)~LLqwbrtw!I^~5)`!2ltJC77OLk>Q0dei6|F;2 z(Z311;whYg1?yNxj^aw{7cuyruWM609M!Q^s1Bb*jrwuete5s>wi!)7Fyr7>iDSZQ=nc#S+S(@zc2;$xIZdN zhoZK|@vgqi9p8u=$#LZL zvokU^zM-fKW}|Mf&>dfk`Ka$jt@V9({9mj_Jx)XW7HohebsY7Q%G$_2SjwYjq9b}$ zDD2&Y9>damTC?v z>UW_Aa0~Uk7|rZ?37V1rTC*ZFC_hVKVcdgSyQipN`hW_W7|ktMQ=y_b0t;bv)PqN2 z6wX3*;3R5BAL1lT-y$^lORY6Hk$QyJGBo&iw05H&G_#f6Xb~#Px1eI+C^p7Z*bu{7 zTlx(`%}|UsHnL=>sZED!&xT6lf~X}bhl-_osHO5+yA%4LE*yz9aU#~j%XkyBv<>C| z{eb_q3l09&sw=4dqECB!@KDr)Mx(M}CMrF*q0;z&s2Ta&9Z%RHSoeJ46m(%dRFB%C z(yt$?LsL*apNs1GYShTKqoVo{>iS!#>z|;`|Agv5!j5)4JJz5cg^HO`*irevk%Fc; zaVJZcR9KdJL#%-FP-}l3`{CcHj4yps+y7oh;CB5j5-^Ua@ z-}jM%(k)3ByC4EJ(#kjs8=xL|4>hu%UfEISl|Xg82I}S23Uyt3 zRB-pj;P?M<3YxmfI1sH;e}5QHS=qx|niLHRls zwGS-74!8{CW8h1B3ns>n)Qh2ZzNM%s{T7wJmrxyff$cHzFxyWCpx!ClP#w9CO3(Kg zeE-KDZd0BH>vEtnDj2`U5h1)@u@}}HX+g7(pw-(l)hJuCa;PQz5|u@JQ3E-GTFM_$ zG4KX8&~&410FfB{|NkvcK{u>})p4lvIBKMc#@N)QL9JngvmGiX=Ab?_Ho5vkRB-yo z@&HVaTJy!IwA+E|$j@WRe@)3BG$_bkx&u+;Y$VlCQ(O--<8agtw-nW}oz8=(k^kuG z=bgVg@1i!Ur>L1oHr{>?C^nv{Oh-c_8iIQ`W}-gIxg52ohn>IU2AA8 zo_UJZ8=z)l5o!k3pa!%VwFIY7FP%H6V19?1@zALj8(vBZTEhycHED_3>H48YJ_fY} zE3h%1M(uc6r&$N1F(>s(uHFmv%{LsCwhJ*A-azfFF{WD#B*S3-=cS;xQB`-KA!?0! zViuf@S@C;R+FVDC=%G9QAF4xPGwixTsQhk*nt_2>1E-^A_*c{hmUyN*M0hr#pc{9> znm7p0;89e^X3nxHUW|&~wWygohziO}&NrwBrkZW{D}Y+Ua;TuKi<*JXsOtw}2BpVj z3VQH5EQGI7Ynp40tx-W7Nxco~!ds{{eudg{6V0_ha%qI&)HkB0{8!XVDKO7o=TWHd zh(1^XhhXsiztbH!f>9j!2^9mMQEQlZzD;=pY(%{a=D-7}jpi;Y`u|4loNqA(Hvifl z*cKIh-H>GP4Mq)Q$k*h*MmmiKEy35QwOoe*+~?{CQ9*jawLfw`MP2{W`7bJcV=i!e zK5EK~qB>L=wS+ZMGt_Yb`LB&(8V%Z^zC#7qDOB{|MBU(DRNBN{Xb(t_I=>`ps^=aBJs{mT_7cgBiux+32X;rz$Z%9gXP`#B6E*b* zQ5`sedeC`y{0~%&JVGsH%>Q?F4sdcM-{0;*ha20rZQHi(jkU?9V>{VkW80Y6wry*p zO|s$UeZKde-v7M6^Z8Vss#8Z*7k#Iv(=*GRk7G;&72lVKj?UV0a1Cq$Kfq|S-N0ey zxGRYUJE2bsoy!U8vb+JcQ~$y&FwtE1<+&2np_m7oz`aoCQj&S@N!lFps_FAgqN5we zI;cRWpw8NtFc>DB@2(&jtjRb#lzs%%IWZRMP%MEB;4WAN#$Djl~9-M zKA1w+{{uSxQG{8@?{J7b1RiDl_tIeJzf$g8=H6PXEq4p62X&5&hWX%JSRG!2N}OSZ zdpY-mZx|ngx+=D<4E8jG30Jwd`~lGU{?FTVbS(3&cDJl3RDz~Z$F>L5G4#PoM`!DNsOxea)Y*Cn>P6)i zl-(n!!hS&6M_cD6ND5`24eHig4ywSGQ1(5bwtghkp`L5{o$I*%HE|Y&93MlS?Vj~6 zV?b4!8mf?NupZ23`YBK=p9{6p^-x#SewY-Vg&E;nm;)x-;J%txgUUB#gU=o)Q0OGu z3>Dxc)C#T}pTpsdzd&7n12?*MqoKBZhK-j%T@{;bd=+XzkD*rn8R}Uv)+YC)%;BSx z6Ge5XofrYL!#PleoHO1rzJl73uTVSU-Ru?~3Cceu)RyNrePyUPt!%zKRKcU5cEC4{ zPF*@1pbR5yaZkdy#=KDay2jQ}JJSQ|G8_t>fG|JfX;6paJe1u7sB`K)RAFJax|eAJ z$SvOI=}kuo`azv!qo5oY8aG0{Y8`-D`AMi7$rY#q;)S>?PYiV<%L%nJm7!j~YeN;- z96GOl#y-wG*Z&|o&WjLKfay?|%Ldp1Zi5P#a+`ayWrRf;7lw_Y59+$U1GVy^+ueB8 zpyD-vDxfD+L4%=oVmypYe$PTWTJZ*(*bj9qFGFqJOQ>Vz+2Ow4CxAMsn!%2+2bBMP zr~=+WB@W!_-ii~#u8e<$#o#@tok+fm>t82Z20E!>W2g#;K~+2nD$rc0t=n2PGl`t#RiVHxkq=JoWLKW5$YKJ;Nom&HJek|1GIU8z+_wDt$*Wncu+TxEe z35>eWy@h6ldKt|Pm8d$@xzYftfL2fmdz!vK)PjcFcr8@IZ8p9Ib)R`+;~zdcN)UFx z`#_KaYQ>eIw!S)4!j4cY>IHS{9R+pBWMRa-)U7l-)Jhsb?MQc64i1C8;8~k5eat=U z8ybD^E%OUuE;!|Qu=6q8<8VLYG$*)xb^Sl5(*V{!8SMP&^o>wAp0=mlSG!A4TbB8> zyV814$Gk1n+1=B|L!fqMBGgX&Y4hu#ZaBM*=S}|@`c%o^bh^PUXWZ*N?OAuFnT$oC z?ts;d^`I`pW>CkxBdh{P!bb2K%mQeEYedIILAqnu^c5ghfU?~(?VN%!&W`onAZYalLPxuZNf^F`&=fo1I zojC`m!0>m2J^SDsW8-`7i&c{Q?xAQ3Ycanb7KOer58S8NGO!?uL9hVa19csLg?V88 zhwh=6Y`hEeq0jgz*mE7WhF4(G$HC6m?8SNFp7l?SiJrRWMh&Pu8z3jC&-0p&F0Y_x z_IeKEGENNjqLK&d&Q})3h7C;L4eGid0-M6gP}lX}rVo1VUXIbBp8s>fB(Nq-275r~ z^FPz*OhmB=>X_zy;RY@Ub!;m@>FYw>`I^E-@HeQ-H}Ok%elFBPmKt|KCA3pyJdrc7in+4};pN z>u@}L2FJqQuUUXr82rXvSv07v&HzhUk{tk5mngaC$#{#Icdl}T( zy&me29fGF;3Y&v*Xv!Hu&F>at(^!LI)uD73;OP!*nsI_58675E-j zgvCF)TRFiv7p6zQ2KFT3HCUK&<$v6(XdEoT_&DqWBYk!+&jIil<08HwB>05aa4UT*mp=b-V?SqF?fpA6j824uD>~Zo}VU!~m~z2u2y_ z7&k!O=ng|2T3@t4uX8LDLv3|VV+E)kXbzLY_E1|s2I?f633WAWfI8+Up$^?8D8Hvr zJNE|a7b#|&UlwDuQA@zC2nqmsnWwI2i!u3!Oo!_An2LyYaADyB=6`Bd^Dkuqc zPSk|DU$lcdw!c9g(&13I?ny8s+-Bp)(E0w4U%akE0;mpCeT=s;8IVpD=zen^scgg~hyw3GM8~Sw8 zq>Jozex*_eR%W~c>ZJM%*TJ??ynKS4w^X8fofj8RG_Ug&3j3jsahn)k=N20RmoUBp zA5mEUm|niJm*<2y?)YUquk%y%xrAQl7n^kwd40~W!JjAcIzO3oP3(1Eem5Dv!yK%j zR1&ZA#RPqmdY#wxXRteoiX`(o_wr3JEOwXSX!N&}d)+6f6kg}q@)FF+e72Nc=dGI7 zsl3iFI=83td7Wpt%&EQ3jbjPav2T{f-HBOHD|`X_!Tf1m`>jwnu1x8?&TB_)n1k_C zSQ;is?{!|jo5NC!r$U_@H;lmGSLLeU^A4%9k?5&%;=uA4`4gSQ8Ia* z>%K31!?;*xcW1I?@jA~1^I;kJ!<4KzbylzQNLC@6*Lkv90h==)oZTJ!+R*8U;sDeg zDoYNp=P;ZPcfr;<-9wWim)BF2aVuB}E`_<_2dGE347t6|C#8nN8H`iq@j5?X?14KN zKY;oY$~k#m|CRZ?`VhL$^O=seylQ^0X8{}y$6}bVfY&)Uwiom|?`jt-o`>5ccE^zRf~9?hs&u@*ZU!;L-h{oWRG9ejaL@7&-GO69j%~#d9UYy#!vyrS8yxc3w4gXhP7acie66!3YrNEFg{$# z>%8?6P}v<9ggR;az&!96TmwB-xLWXA3w4s7tIGASSF1SHydE#C4fRzj4dFA!J*&Hy zOXC_;%6J284U5)vua0F<<4;ft8`W}mWDQKt_#sr`VQO=uf(?vAjH_yM{p+m1h$0pI z0d+E_sN){viN@M>-E$;iJ+JfbSZ&w}yHQYy-ar))y}o;|Zw`}c9u|cwp%(ZOhKKK< z9@D?o_qmr_k%sP#Wf;^+bPHC6NgKH*O;>o7@jQ40wrT9{K;|ay4d!>K!f(L5uuN00 z^Sm$+)?<7cHiv1NxrL90Lm0pH(UD`1=3eKA%KK1%wI)Lguk&|$nzwXc6PmR0IzJ=! zf%<9r63h&09DB%o8Iz1K4b z!v-C^&L5fh0?RRe)X_Z$GIw$>qd`!KS3>R3btt>^zuH1ze#ZAd(~8fI#efN zDfk*P@AKsB;@&#jLEXFO!16F{SJ$vR)D~`s+%P;by16%;4zM=kBd{z?)ZOcR<3VfK zlyT}FUgrmx5%4_Yr!X-K-QLr^AzkYwa{W!|?e%QKpmHA!F$mk&>$%GK`fu(b*wD}G zJesZT?-n@mcX!1J25>nBaz}(8u-`e59l?M7AlE)%hjZz;Fb(3L`PTH^O~{dJT0}2aI%|55mIYj1xm0l4h_m zTm>7!2&3HlM_Z_qaS!zA!6Mmc_aw>-^=wuL#)R#mb5g;mjHkf(a50qKUMT+yFb;eU zlfi&7Ue6$y0?Ka*91FL?6|lru_etxov0VS*P=p=lzF0(sdKt|LbHTPyFEVqX>@LH| z@Q(2>Sefy6sDdku_d0LIHia!2AAr)QnczN26@>CH2cy8c6S)2t(P@j~E&OGo*LjcU z2mFO`lu7OuCWLxs>j#&@5l}BCnJ2q9q=s-M;|WlK^G|W(l!sbKL#Umc40R`53X8%s zK03ObqD*zK&%!Vk;|{Ps90ax1x1e_B4b+QIia)&0*Jv$=*%?=x=DubOg-W;uD(*{| z8pfaQuDlpjfmNXnov$e!ZDDVytvUkr!sT=T>IU&(w)@bSc8+_UN1E^6 z<6A;K;cSKq{2hjYkr%kn`>~)7T~cEvs6&_ESQ_dos_u~Mzo||93L`M_n~jG-RXhnQ z(Gn=f5U9)UFx2DvNvN~_k&VMFW1 z8q{U;7V3}$EOJ*6+n5|CLZ2C`kcv?D)nPo?0_t4(9jf3BP;vJ{9rLSj7<>(V4e0b( z?Eb`Z4)$ey32FtEm$+wXcc_zUGi(B1z;3YoQXVY0G3|!CV29=ItvBsT_i1?)+=<@1 z$~{Tg4GSwW2{V7*2+|@l1!>x{WY7JPftP&tOs* zyw>Y{C_NQ?$9M~@1DCCHUk!gky}Y+x?;g^X>$(1wa2E;{as;Zf@EhDMiwZeQJ!zpX z%REr?m7of%3B$sA#%542x9yD6U^T`Eq0XgP8{LyR9n>Kj=%b^{VKY>qLr^O}1$D=} z4R!K8fjSpHLlqQhle-fMp$f|abuyNMm0)9-9j=Cj;9aQri8i}T1yeKjWulXmPEEK4 z_Jl=YhAr+BPe-U%$DCW;WBwO>$hc{U*ZFFelG}JypZ^Qo{1<8#pY{@OQjw>g4_j z6*uZhu791)@lLucP78Im=Y~34%R(it3UzjOgSvx_ftle#DEsqJ1w4dG@B)s9-=N}; zKIQJH_n~fJZ=eokpzn-(QbdMIP#&tnnlKY=0<{CYyTzXz|cD!9Fn)2hd-`R##Vda;4IiBRpUDJcBGiRFw7D zg1<2cpy^NXm16D>oC8_%PYdq4@*5K7v!Z{3E#KDS$Y7FGWdFM|y2xB43LSz@vXnwv zY3U}V8LtRaf}dtFXoyn+*nx`qgNB}Mv{M8QM+-!+Exku^%@|AWx^VveIAzeO7`}&C z6=t>wExV2+QW|>EZ>PKo^be!^5^6vBb{j_`P)ay5cBA=ak4__`5`GtHg;@S$bb3!l zat2)ss@h9FJ|xV24B3UjRVLOuBi@2w{ZBAjV|zE8@kHisS`k~Y&x5_>GevM``~M__ z`6^yP`Oh?x2@=x@f~h_{~N%A(V&)1N*%vuSf_?{Vr6 zcah)^S{9sd<5-C#ZJ}g2HmeDA51oXkS>Au;)yH;YCCMc`{d)LYe~x6rHV~hujNTEa zB>KsW^U{2uPHkhJ$rD?x`hzG$a)ZLkqrZ&ZV*H!o z(}hC)@{+k!7Plb%__i~DSn<#B`x!|7@+5hV*BOitz)~2b$6+V>fsF6b5;CXT(s-Pr zqSw2_AF#V<#W3aJtC&2)89%h5Q_=5fNnaB$v{Ylf3H!}H{^^S0EdpP}q8|OC1Q=*z*U(Dwg^R2LS zuD_BfKU;O-nMjONRoYEEb{TE1fCUOBFi)ZXpIkvF*-Ig(@Y5Hx^&oC8bZKmE01Nm7 zy=1HlpNHphPX-*)P#urPo`IoO_z8V1R=3uw-hj=Y=ptJXHwL#={QknPD|2;AHA!zmts=zdt6UajF#h683vJPsBL9g3|fau#5)$AB^1yceFw7{g^$(d z`AAT`BRP`9k!TrJEVh2BiLN8@vSL#Lzv0A-rSGwPfFd)Kl7;?g^b?WfGxGxpa-U$s z(7nR8Dz*_=(Ll(D2|Y8c$O+i^r39UE*lfptGyQG!ONCm@8}bC<>*J6A{wGNYkb>=& zY$oY7E2^{cFhODyFo*dhp}^l*#d7qL>I8j;ZUBKL`zf|4w%4t&g!F%)TaVp*>}I?l@jJ&Ifs;GF;bFHeFb!C@5%C*!o0zT^l&hZC$i`Xe;HkIRwFE38Nri*FQ$1qoV% z=9gLoe@&oL7Bmgx_w?5iK)<*xWriQH2`%?1JR3!Zu+pB`N*2=Yp=)LZ>!*;1#K=Wk z$oIJEFBW;a(IVhb+!CH(T-_XU;~dwj=Bw{KYe-U;aV-Lkf}btXChV7yxHx(~MC3U^ zUlNQy7llUUu-2x(jmC!+JRk8Zuj9|}>;97hBs;@sAI6eHw812aZ&$^7(>s&=bBaKj zSjlaIW~BM0Ci>h~SU&pWXp*qRIfi|8;?yNqHvJsC&Vt@Tv4iH9zf?8Jv)O!o=62g; zPxO5)s8n@W?E`ev;8(L5YYR(3!WHxjSV4^$cf?j7{P1mLOSQPE1j~z}HDZ01Z9hfe zBE&Dqcog=0w#U;=&;MgEUbG5Q}evb>wn5?jomgp2=_?L64FA0+W*{?+h&r=l39-dtlRz zxkv;{O_FW4q*3@}#5WM1yw}iK~i8;8cOQo9D%tloC(QD_Q-bN7IXaxx`^>;>_0o!?mvyOZ${h# z==sW0PaJmd3vnc~7)yL%OwooxuvPb#VCyi*hVC)dr@=8Sx(g)l&sdUzBG2OckYctn z-ev(cS0A0^53L%zKZtt(zdRK4lksDlPp{+Op2=YZ8qcIh4T*(uD(g2Qc}y!zb5AIu z5%Vc&1sJa)aVeXxYV1IQ%OrY$q_|S^Y@@O|w8!FUPJbi6Yn`GgA+r?)2=Y{my&`l=_`>1(Hoew~H2+g1ZpA0`Z!o zAI|DGQbYmld>#^ggY}?xIe8n~m34RcC2ELMa z#N!*pJv(SIv6W21zZ5oYNi0c8zbWlhc=FH0P!dxs!0;A<9x%>q#@k7H&w@uKco`h^ z-BSzEuf>jEH+rI>PmO;;3Oi^?d7IL6ml(^@hsQ^f!(!&7@Y~MfxcLWMJ%u#2*9xzfhEUrylZ-mr&!QF*l%F22Xie6bcjHUSxGC}Wqe24PQ8TJ zuuBBv!6EP20PN1!Yk@sq!YyibcGnokVw&mVx$NKSlmc z!2gxMncPF;S4p0A1d{wpB1wN6S0ZUq#=}VZnYp6q_oCYa^*hKY=ms%=6!s(5EbJs% zX@ZUuLJ-*vW{0?0=V)6axo0=@*}pKnne2JC@JM!TNoy>WOVnFvc%1Y>&|; zGdzs0Ajb1-{1!&UKDQP0iR2$>uh6XsRa8xMlG4~uHD8UpQ(PN-=MZJmPigUzT2a-AIf#}A z`?;ozPRy?O1?Yc66tbjO2{M+}5JSl><8}Jy(M#&UXB4yFcE{Cn;u7p%5~r{PH%agi z+mG;_6?T!iL{^;q7PH{W`Y9qjiK-IROOXG>5>`b~7<~{ok-Y@^ZU)2Yx1_(&iq|`| zhb?$kd}q)mG0tU+*h2CO*haIsE6le2f7c(u+F}ryKvT`AjIA;|1++wW#Pl6ZUzs8b z;L{bKKIl5J+V=$h7w#wCaOP^!$}#^4{eFsgNsR00N@HJy;`G0P|C7t~USseD-DcWG z3=iSB565x;S@Dx5Hp`g*Vq1HS-8)6n0Geb3ftxcwoB5gek48U^B62W3OB+nw55#O9 zmgE1F)x{-XSz2P0lG+%AqdyGY9{Q`%9bue`plL{Um!MM#mo~2bo`CJ_GUBhp8k9(RrEMOv_1}8|Z6MSXIW|wd(&9pJy@E zO`$6MJ^VMJ|70-^TQNRQ(t7kI%?b3F@nh^BGp>hkIhsBS6pr8@pkEGR^N_e9C~lj- z<`Pp7|6$AdexuX6{`E;oNo$f7#_(5n==`6uGZ==aviR7{BGDDIEl-f&NLZZR=s|xw zZLO_d?hEici_R};@C!kg2E`%bjAQOQx)^#Fu^^p2c9Q6eYID=3p_lBX&88odwvhlU zNpcD2$E=LM>fn5C^#EhN8&Q!K$+q_xbA!=8!9N=MEG+B|tbzUwZ3%seFFt`QGdYLA znOKou9*}IVe_$+z&0Xy85ugeEM-(dYVJoSE?vBOS5-L^|=J{hBo}}3Cqt7P-JR{vg z-Sa;fN68L?kHM%M;~ut>b2whLYF#VFmhc?*<=BbswA$E7{=&8pG5VkzM4|xtbFrU; zZCG|>DU`g$uBncHVLBr)mSmyoM@<5y}(K<6uj!i^@MIk^=0=8kCAD=8xlFEuz zzZrIILaqKDKC^6r&q+Si3TTJk`QNx@P{bk8FDUL1TvE#d=(kLg*jAwWhX{6Tbm-)5KPbXGf;*LU>9bFi|54O>0JJI>_VN}GN52ILTef_7`DYm6bG>k$5 z2==?JcpLNkv6rN!FG-JmMBN+UX^OguPW7M0Pg0pewxh_!Zryi%e4dRY971JY93(|( z0}1?sL=7;SNq?MG9%6~E6DShxC&9)m1Hy;3JkhbuL$ZA6nxczN>^j&& zkbpd2>92wjiQR=b6?A;Z5THIzzgU7f^xF`y5KK)W3$V#*L3a8h!=cvyWCdxM$@)3* z$zc8Ww!o}*lGX`Tpsxv)L_m=QCWD*IXbeu5E$K1>y&zz5bO}jP0o#_?7GvC#0w=*y z=&#xWk`to^^B=ME%S-ydp?_zJ>BM`*`R7?=2{T}Dk3hfMR=y-~WScw7++PIe59)YI zV3QI3F8UiNa603m=F^;@lJ<teg|2fR#i zzHAsAq|=T7sZdU^r1>n+HX9cwX)()IjsE{iX_C*h;LGUuA?B9e#c-REgOwL&g1FJTv{AX!X>aL_IJ=nw_WH( zlEwH+;?my%OAx0M{R7IPZ&H?63H7As5;`L|;{#H#FX##iBA1d@Eiu@2mha{>|{WgLdUewkvO zk5*7vZ2Z!N*rDYec`jRA=|AYrhvZgG6pX!AfZyp)8%MOt{ravHu_{y%e=%`~ooGb7 zANV|?ouv)6qK;cp56q`J{9-@v2H1)DNN^ywlCt<+CedyB3z_SJ{Ve*0;CT{fA$D0SehNFVP4E9nCZdc+ z%Zot|*aG9Z7+j_DEA(ezLp;w@biZL!1xhxBI+m`6pX;zsPpd>xyP@9Vsl+1YP~1aw zsmwR23Q_*ED9dSp>?O+(46YG)68)$+?I4I`28mNM9*n*PHYKp>$XrTve_Bx4Ey7N6 z&9=M|OiBT1*a zE(Y&E;qp==(I@G5iR(9OrzFURPAB~M3+*c7%5$CK^z%MA;Z-wODI zkz_Cq4eVH#w7Ci-C_)=VamStCrGCYtkn7-S2S=$qEPkO)Cqhgz)iUpP^y5-We%cLe z>r!S5^Ch6?Z~ke++y<*4GqEevT2Wy(=0dC*;a^UI&-z4$q%sCeX&LD2w+j(5P6B&j zG=?Htkhl{?#G+kB=X{0$bY$*dY*)b1*h_X`6VbM38Zi^Ikk9x;qp$&tTVgks0&hU) zFB{jz;SND0KV*PILk#+&D}-Y(!B%4<8E=8rUrWHyk^`G{Dh_!;jM}yfKUi*4+Iq(A znJJuOsMdOY{r+ZuD!T3y)84d>`7}Y{rsLB$oWj z>e7-hHS;g5czp zSLRe&vk;TxP-JGp%l1wr$wfazon~B-BAU_s@9Z+w#HB$!_sS&%sd8AH%G>`qPQJF<`n zj3tv`dh9Zx&tt_)U&V4BM&~Pn<3W<|VK5PAzw}1;D~^q6TX86F1^$Z7b9^KL=pr%R z!pc))Cpp464*GxT-z9l{^eZj-TH>^)eYOH8`#+I23x@_wtj2i`j>j0!q2G|zmB;zL zC46RwsG$YOgY7$#7h}G+6%dwwdVDLB{4Q}MZ_t&q`JME8SpS7SksV7080R5)eXCSX zEpT2(n@X$8c&a6xO>oHsf?T5Ll=O8NbJ2pZJw>c5urKWx{R6~J4*l{5yU`YFlHGqi z88Mhn^065AWU>yF%ABSRdqf1A-$^1(wDN6FK z%q_y-FAP0v@EK31Ahz+PKoYtO@OhF_O=&yh-6^hFlApt13`G@YwdXA0pY&_crW53+ z?Z6@Pok{Qp^so7Yz$y6euwyNC5c4Oo>x*wcXMwE$EDFgW0#_%|X2w}D?2S=HOA?6g zq9xi$(9-P0aK>A)zfUp0(dJu`$B5OEq|q7IqyNEHJfD6Ue6Qhm23-tnPUvT;m~^t4 z(Ezq;KglLq;#e4OQbKh1DR3H;M52JCFfqP6{*O>22@C4WnVXhfE z$wG9qvGL1B<|QSu8BIa)DB=dJ54Y&O^m+^=E8U8m|7aYa@h1wpZWUi*9Gm$t==Q+d za36_=QfzkfJ44b^jH7TuSB3p(H<*ip-C~N1L5x4hHJyGw`e9Y@f7c)V$ZXvPsvLl$ zUl!oJ68&8guEAk2^WD+ap`Q}FB?^L^q+f&rR@q{TlX$A)p}&p&4*dLbkN!gzwgSEH z7Dl}ptfuv+-xS9rwxZg$b-PLaiY949!VQ-6J;@s5vw*n~_#DH&HE~9xi%P#4EfYSm znExx(qPmdSL;FRar3yok$2j~#^`p_}C3so-^U?X`65~#^rL>*|TSv0wR@?-PDr5VN z@hy_iW&RBF-RbWpc7NuFkSqgn^D8lOggHqez5Yuk;&i|g{$yN}@pxP1XM(N5;Q%@> z$M!TU8B4NCjBn7IQ&ev&W{<_ljZG!|Bsq!GmHt?4qri{E^5G*Htmpr8cFd$$Y5i^l zXk%N}m8xIikbv=HbCj)Lo)B~gbEmC{{=}5DBT*9gCj~@<`%J%|cqtecr&wqGZ>-XI ztZuTcAgb{^&JiszKAx5O$K(WD!O2vVqEA@x#>VUDi_?lx@Cz7+c$_A##`{h1y zrZ7H$O$^7E_0J~YKW5RFB#~&gI6w%{}X+a_=gEK8zAX4?c`$wu3O zf3cCIFy@3gLlsnlg*wN-6|1a=b2{1z0#$x%y~mjdcC zF2gu8E1N(YYjYc!t3kWT{J*rc6fu%`gDGT%{zu+st8NgAg(Q=VapC;CmX(jjv5`MH z+Ajp3h3!N*fMn^>ZG`jfe0XlVm4n!cNS>IjpTJxJ>vO3uui06?Se9 zu@|6|{Hg0dArm{Sh}kx=7l-HQGuSvi{d?HVgp%<1m1CUNRxI64##JdaAG+hAb}I?R zN$%6$q4wOP~p)J}Vjk6T?+zQ^&@FT&N%)8&s+oOX;`rraIM%FEE1 z!+Ew<5`{peY?Y}kvGn}aNEtCCX4HUB(L-XS2>2ct zQXqA}>L?+9=L%>VE~IhcfL4h^&Nd9lTP`HS(tvd_L!RsixRyVp)2D!d7$Hl-2L?tB zITbH(Lb|X?i}mc$wsW_T8YKev28EO>6Bs%A^l|k9ABJ42A6TdmEUd za7fWCL6yDXvgJ*hEnoiZS*K6S8MGuQN9JrHg>wZBh!k?Bcu?ecA#WQ51qX*@ZyGc) zddT^1L8HTmwC*1?Io0&$3xbk|WLy}OyFti^A3;Onhs25-oUT+zgvP;5V~1?&5gad8 z$oEmf^|E`L_3S}46?X+!2@biuFSuizkcroVGY3p>d^srm^xJ=U6NI$65j>@8$g2$A UPYpxLkMA z;C_G4+V3ClXYYO5E^F;`hLJmERmzhGQu?=(gw6N(zha+xUON1xo#)j{2V~c!Nr&v_h44MfsyFNw0b^FK(!IZ#*UZ}ds*H0MpB4J!$gda zbKD6lkUn|aorf?j^|P27A7U)@V%hbvQOA>E7)D`AER4yp7V7-=sPno9^?5J_-EbAA z!h@Iuub^)52kHi1Y#VWM)Ok^u6sx)RR?eZQ0nNp@xZKq@Vq@xiFdxQ`6XKQdLp-lE zg%LCijcZf<8edcI7tieSS%^1=daL*$-Z;F2qp(8)rk3mP@&8yc?`6UeFENHDvJNCe zwTGi-GCvl^GVb_5^fiLf6g1*_sF8h*TEnBLo<2w2IAda4yZo4+dO0kB1F#UT!@PJC z6$^2agm@h>AF4jj)%T-fCS%eN-)m2yLQ)&yIvh+rM=~4vay&(Se)15n0=7&M;^oE_ zsQQms6%(Zl@ycK`?1>Ap4#r3o;?=`OSP{R*YWNiEVv*F$e?tnBQrpOX!2tEwsI_~C zit?~DmIWEH2KBP2V4a3Ke-Ubmmts-eh{^FD#>BU%^FN`^kDoTg8;yy53W~}(7ze*X zJ$Q|C8|udUQR#Eqwf_%w{!LV{{f0`bm#C!*NoQ%76cxOgQ0Es#b)+2XzJ47Fit?7I zjtoSdI0ALzMAVJvp*pYz)xj;O2k%9lcfxrIb^foY^Io7H^sh5^dh1wnkbq{MQs&KflW~l?t?mSDC&XZT>EU)d0(M6njNSC97T2TELOv-7>?l?EZxgt0-o=+ zppb(D-LX2(#h!Q@dtr@?Azm@uhYGsCurwA45An+5K)ga4ev9hJj7*jtYcL=6tEd6Q z%xoP>h#Fv8%+K?^Jnleid`rDMY6Km!*ap)JHKk*)6wbyxcpjCm|Dv|;WLa$~^P^^{ z8fs%}f(pidu09DnQ(uXGZVIupg?I(A5NfKrqGnINTBL6kDPjU*2Sw^r0hYN0ly z)|ii(xP_ys$Iod?_Jwnia}6pcw&f)M)zgDCXahQnTC-d3#7DTA`roJ-S(wZA?p3I@ zK8$3PcMg?Sf8@3sKSiDY4#P2!#|DxGwc(XPJ+FQq@?USaPBg^838SNefsE6h%#SCDZ`wVOu{UZaR-w*&fEw{DSC3uHWevWfJr6d) z@Zz?FL$RLn-=|O+FQTR{RSElo$%?vhE>tiUM~%F$JKhl$T-{Ll-5<4oOh(P*n35r0 z7F^^!jN#Ppqn0?V6!{;QLLLf=@}j8Vs)x#krl=9MM!g#bpl0H8cihJ?>Jv~MpNg9L z1+KmtHPzcuOL-I(GnZWbmr~@vPIyLx9{dq?gBYc4<4EjGhicF6EQoq=S*(v0QP(eU z$Csh@m5r#5?RD)ZUHu~JxwlJ`|2p9r4N9MXQ6tV+#%@puHRAH9sjiHgu{y5a+}Qy& zvYyx)2cu^23aVo_QPM|LePku(EbSGSms_QEQqPHS!9m5!JzL*vi$%qhe$Z z>bjL!0e7JGhu5gZkxww%pC-10Uv2~ZEp zjCycES1*s6nfk8Y3KcWGP(eEgr{fgVKvGl)c8K>sg`6~0Ms3A?F&t;P`VQws)B|6- zx>wO+ARI$!&x-0m4%7$>qOzbgD)<`VD(r%NFm9y~uZ{A5IEBeH+`xI*p>l{f6yKuK zq+b=A!bPYlU5lEjJ*Wp=KuzU!cl@b4{sA-4o}#LK{T4>WLJL%TdrYJJA45SsUxEej zYt)R~z&sdM&33T-Sdw}-%!F%E=YNmk_%CY5OIO|Uz62^(+PL~e%t3tNaCE9!4#}C)7w1)U=sMj*9L`R5lgG23Qdld<#)Cwgx-nA=FZ2 zsYU*);dHGKuL?%iw(s`A*o*optcZo`*c1*!t=)1QfC=l`hsrptM*Tc0?NZg_lMFLp z5BwXOVcYs#AHvr(o}-?tp&#P?P2p`r`_bypMtu8mLchi#-Ve0jZer=Qv8nkCTXVcX zGka~%Zf+w<+rnn#Flq))qGse0YQ}D&V&pMufBE3*N&J?U9$8UoRU9>fYN!k9pl;9} z6(jvz`v_Fp&O}A|TGUh@!lrlz6`Yw`*;3}g3DirY&OeTNr}#H1Xz%|Ev*KqAPeD=u zm5wb?`TIF)4QHZmupYHz9>oZJfI2^Bn-H%oW^;B%-EST0_yyF*>T{$6zV}&MJCGR_ z)fF%bJEI=303-1Ls-urFABMHFPp?8)oqAgg$4#gQ{)h_Z*QooZYj5pkF*o(DSW5Xn zkAl+bA}ZbDcd+mK5~!_oD3-^As3rM?>R6JFRxg73W~_!s95NSn!!=1C7OeJ zc`Z|&=X)I$xt6{K3_uJ6SALMUAKl>Vd;iYdIQ~t_x5P+JL&xZd5QH zLY;RCmEO0|FGJxO1)Z3;vz=HN)$=l_psRrzd1F-2bwmAB>^r}5$9JQm`+L;&w@?py zjOx(87>=>J*tcYkF693f8rspY5fgT`VA_wm@E6pDf1+L*@0_u^*@Kd!f+-iOLsgvZ zF+cT@sHNS8`gD7O1uWT2X;7*pgMLAb>4N? zeh)SB7q0#Rn^2F}!`eHbw&=d7Z2Q7@4ZB>!C0BoodO!+xqn?-vOW{mxg+F2&%+cw!z`(@1UR<$kW#@?16eaO>y=0sJuUgn$kO{ z;7i=k*0K=lfsIhXJHXXvpf;{esG!@Ay6z&XLw_UZ^XGs4?I)WBIG+Qzurdx95aLDS ze%!{E`!6cbHx05Mz20D3>J0|l0CwRb>aS3-Fk^`AsOxbh^}SdOn-8_O>0B(J{QrT1 zdj1jHVya>G4L1zyQ2!Z~9XW>EgQJkkycwvhi2u25P~oVct%JF+EozOYq0)2*YK#9C z3*c#tuN%FmP!(g3u#wb51<@?$QdBH#boD)`AU%!>%ClG=f5rf&9ce+C5f!{SP#q|U zilO4z5C>!M`~L?D>e*G)gC3%GtiNy##vB#m^~X&(1~ZT~MR5gcBtN5KBi`r`uO^np zFK{Xr=8qRlqg?hkp)Dm2B-arM{J=B-dOU#IA z$J+i;5;a4uP&3fc*#|YV!%+jCG?t!g%@)w0J$yZC22P-+_J61gZllh7;`|SFUi@)3 zQ>if<^}MJxZ-~mG;n)lpVM~046|wGkd&$lBDd@qcFbm#8jU?6t3##mxoqA)`h(|eR zprU+`P7RLdoY}$ff;%SV+){||Yn2C#Z9OCayp&ZPX0SAo*8@f=1p9 z_4@3L`ob9+Jb^Ssjc^l|W+U2#!R+|Lf;Hw$>rgyYdj{0?1yEU09d-Q()cq%*-l7XI znEzW`!vWNV7cn0`!aSIImaT1NR5lDkz0KC6cC`DbsZTfC(y}q?_!p>s;SB1$&*s>D zD>(&q)%&83Pj;?G?PP~hBl;e7!&|5s zdxHt^UsSNgU0_+03e}zkwI3Ap-GN!C{9J+>*$q_MeL!6hW1*Q06-1d)X;m22k$fM*TT9$Ks3Z_&f}y zzRbB2b^RJthc=?_|1IkNhfy(h8ks5IyGB7h`~|gfJVsp@_Lap%V$@njqJpXx>V~~g z=M6-SYz%6NzC;D%4$OmBQ85!(Y=8Te7WJHZm`wTKgM#+<(Wo2FMr|C+P&?h9s2;yV zofl_`1yvf%O+7!(!d6%kpWy+_wbYjIAu5=kp=KsznSI#A!q0fVSCzt0Y=l~q^QevF zIx1@aL`896xy?ixRJ}NAq;*jr2 zIuNqL{LGmW)sal7nJ9*u(yFfB7B%&KU40tr!HZEdy4khwL*3^LYANrmApdpZCwCyx zO1m%{YHEw3M%n@OfZ?bS&PR=4HL630T>Tv8qy9Tq!j!A*FCbf?g7+9k;b*Ju6Rq@W z-#&x8(x554kGkPw)RetP<#Wn4yj0lx)1f-lbFF2;IMhgPqxO-HsG!TV&h~>ksNn62 z#c&el!lRfKpZFB?;KW~B6sJN3OI}n*qMdb}ZJm8l={Xv;WK&UVJKr5&gW8aGp=RzJ zYUchx&G;Kv_hYTMU`dWz(+JdFT^x187N`ewM_o7wHKK{A8?HrdNZ&Y5qRzjDTI+kL zDSwL^dCm=%h7FOl^}VT9@RmDwVK7Kg54?lw*bCGHV{fz>N`X3_6V+Y<16UO`Gc{2& z*ccVuolyhpgYR)Ro>%@)-()AW*lZ*2h+5+Ts5G34IdB{5p<<#i`YP0=ppo`Kz4d&|i;GcfcLufQ@13c? zv0yERn$lXB6Z@cEUW-rC|!7D6_@%NauQ1_eR>Ss{yfG?B2f6lTs0XZeZbfCwK36}BdPn$IC}>1? zQ4fBM>hW7tw8lPQ`JDt+&w{#fBq~jdqdHIrOJPe_UxbSKbr_CYP_cF%6$_87?t8Hg zT0P&?y!?1y(Lai!^;O3#OP-)&;T39W-l94ZIBv#A zrDIC0kEJjp&O~2pw2gw&Z4YXy4`VGni^DP137gWns0XcZu0@@{5w)g!P(l0?YOVip z?SYfFfkmKVs}gp=MkmRC^<PFR2189Z{-nOU> ztG7G89CiLSRLA#XPdtRtnCrA}-()>b+X(xiW?~eoBNJWwGE^*VLXGSgs)M(%5liwE zi&8It#_ls56&sUKJL)3T>v%V6rp{w?eCktpK%vT6TcbQb*a`J87wvseLH89lz;E60 zct6@smJ`d--Uz4Q0@M;joHGk!IQ43%5037r0nEZk^fyt^)_DWfv%gW%p5(j*T@KXC zrx6Bl7-}g-qNa8-2BX}yuRtxuCU<-v7NCC2)nB8o|A;)t_u^czwakc`@_eYBstRi4 zP2KT9sE$o=#}~W$W>-IkO1sOb;Q9k|V9o#800&`q>N7C{zs20j|LYVg(-7mLrBzML zPklb>#M914s5FXq$!;8lsy9Og@hH^PE_3yL&g-a+?Hy|43BPRh3YdxKd)+B0if5pv zbRKFAmpXT#rt~Cg1}?k$BUDiRgWB;D{bWm#9+j4PQ1>b3tck%aarNHlD_zD?Q1pI- zipnRbHLZNbZqNu-@8;@5ozqcU@(NV6e}e__Bx)(%p_VeiRa@GOs3j?i;n?;n`L8t} zLqmC7gqqS{up)+BvkNMtcECQUU|fQl>Z7O`xrrG<`11hN2oqhm?8tyQsaHp}4@3pu zSk&kEjO*mTMt+J0jqsy0{tep~(xIj@6Y2($sHrZ68hJI;60~#sGs##p&qy% zb^bTbQ>fs+?o&|uy+NIr=%zg|Eh<>DV?L~od2u+F#`V|;A7VQ!^^2Xi3>8b~F$}Mu zMtZ}U^p?F7YN9qYzcB@E482fGFc&K_l~c-nq(R>&+l^0Preu{d~Ths&oLoG?1=XQNkRF-AMTv+Hi z`L7$ap`khs$LV+y^`QDM?2lI3qSpE)YAxTQ)-w4^dvGLbs!O0cRvWePv~%_Ts3n?! z%C@Cg9KU@@{_B1Jk_L_N9qPgH{<0`fjiJ;tphgmbnwi|LUI;bvGS2F#8EcH{@L<m zH51)jeFSQNGf?L*M|H$sOF>)ccGSDz6zT^5pz=KS-}Vztd{nSj#N2oSwG=NnFCy@?bwHJea-`zh3i$YackvH!6fM>>n6I#>}E z1C3Bi(i^pOLr^m~0kvc^FfT4Zz5h?5X6jFjry>1KL2K;2wdf6C4yv(GQyhi)umS1; z<4_%*jahIr>KpGO25*c?!@pfU-aGr~OoEDfA2qWZF}9|38wK@rFDeF(q1N~kYO3#| z9vuI@eK@2=O?i3DiOq2sj>qBn5r^Wie?z>J_!nxe_x@+E<>RPW_!)go)nf`(bRuda zD)Ax28;GM&4}OIjS;$8-HY(~9qHdhlnGJQn{HP@=?yQd54_aU;?27tPZ0$$#e-DMb zG@QVNpX|3@Td^RTkv~v3{0sF#@g5bd2}44IOOO>6GtsDQ>F6BiT!re$cc>9xLM`0` z)PO#P_@TiO#taP&jwl(br{Smv=0)A0Jn9AwT)h)&jR&J}*s)x%^Q@j?n6x&fTa@f_+qoV&8RL6gF z?SG-}>&38+CPeL!*-$fE0=uJMk%C6B&3V9`a2oaCi>L?x;_8o4dHovofY>pu!znR1 z5L8EUqdHa$HG}1_G1kZIxB-bd-@8abd7L^{XfT}$U^ePaQ29R!^>SK+O2boF6W^fH zv_fp_Ku^>X^+Rni<4{w-0@aaqsQYfirg#+t%KvyR6tn~-P@vHWFu^a+93y`Vq+ONIROjMz7I81PcaW>Nn#_chg!=Xs0V+Jn&LgE7ft=;ip1F?Y0>qO~nic_J2vnVQU8lgto z6Sb8NaP^U>nHcY!;rtS{RLe0V9!6!uZK?c!ML}C^?DQ5?DV$NL2Ud5s!~WEVVqbiM z3d)ulY>nrk?z0lL4{XCsEa6V9O#Mp6(BRJ#>B246I-_5O13M{bYkiLuF;|4GQ6JR4 zFbb7kD^Wpt4fX#1fSRe|nJkFQq4K^mD$3iU(rzefrlz8@WgaSM*JL99b>bl!w8mFZ zBY22fqrXw_>sXoX^_mHFUQ1Lk^+H`g%++VR<4aKk+KPJ6ZB+FCgSu~M7K@$aS;&8_ zS#BD1ppZLI1@)j-s0Z{$ZMhR&`&`r-u0f4xAL>D8T>Ty@=>EbS7&EJ7Lq1fj)kV$7 zG@pWQJRkJ|u?oM!Ur;?BlFfo`EGibJpr&*MYHQtz3eF3t4*iMhP-u2r!X&8n2-M6L zL3OMmDtr8<6mnDOjY_MpP(3?{dcZ0C9Pgt#+9rqHuqPIyJ_f7de$;)!a#}h^q3VrL z8`v0BtXxLL$W3GkeeX2|rBg^Q+kj%DMqU{6V>D_+{jnyFMFr&r)OCNMZu}1Qppe`a zj15r7o1%`lL6X7ig4%$(1&@<|Ln&x#e0N|5>ZjNxs0Xh=P5E}$e$06aHB)C%9sUUw ztanhc^WGhgm&ZOtlB4dI7InYem|6K>nu0E9=T7L43dXUneLkwk>riXC8?|<4kty_k zMVf{n%O$2=d?o2KsQt@4T~iIHIj)mti~ny5To--~bz;Y#ROMl{wD&>9< zLCvJUm4Zh41T~c}P*EMHv^^*(Y6dc5De@-|>Ug&@wsQ_Z1=k2v$7Z5FyBDLPd?hLk zzd@b1AGPD2LpC(uyGlVp^d~9{-lBpePFc&_)Ts6dRC@u`+LcG`h)qx%N^j?6)Pq-{ zf_N8d3BE@S@HQ$a|G|WM|Hp{7o+U>;Cc(F?_h2{bCs8|DzVh~bhCZHLiUx>iRRNCHo0Aum`B6c!@PJRz>n(2O3ti9=1cx#9-77COhZ4_GPGG+K%ej zw^$O7yW^i+d*VvgvGl0><;Ut+0kyS%fx6F}O1`bdA{x|@&8QylL#^={)PpXg-gb9T zH%L|4raT>LM7dBmj7FVb1vP*MsQa{bc16uxe|LPGPeE(<1?mP%umi3}1z)Tx_LEK` zR0peI0c?mG(InJVUP5&|V^zB@A8G?ChQS#|-M^iycSUv3ALI^9;!c<^Sww4dQeMLaP>y@ zcra?K9EaMVmZ7G4HR=ZYP$M{s>fjHkPqmwc}ZnhtHupdIL2BcTgRCfm+IcQ5_AdWzR__ zmH(M3=mrH)BPfe{a1+!<(FzqreNhh_j=IqpSD)=%h}v+LyZSNI44!fI2dH#?;_9E! z*Hp!qiQRm-A&BPm2 zaDJ*y{)baYTgTR{6l&@kpk|~aMqoeGi07h4uo`v4Z&4k);M#9t4eBpZ*O#tqR>y4A zn_wi4!U4FYF8N=RLPR}#o%TjuxDfTgwWuENM$Ob=)Y4o*jr=AmX6~cT|H~O#-#VHE z)t(J?-y*0Psern^w(km!F)IzNQG57!41U3&g6%uh4bGwR{{}{5{07!u8})W;;T(up zsn5Xd*s-B~2TaF>)GuO3^t(3-4gQ($1^kkRq>XI@+KBo{wJFheP zx^OTBP3dUV8coA+T#lN;qo^5pg6S|pC)?9=V?OE=P{(&;PW%~1VQA;j;2-agaTe=h z19*;#tqfhs|7Z#=x>{5(!93J2pqAu6)D5$Cv%Ic@isr>w9FIFcpt7Q9_fYRRcE|59 zvPY=5A77x3Z|Z6Hzm1yFc)fh>N5*px~fQs@3s3~5G3chbqQGWvU(z@i@AE0LN zCDzCPP-$DIw@rBq)O|Xl_K{J}`91~Z`)1Tea~AvJWsHdx``CkPpdQc^wIz2z-LNZ; z$FVpXWA(M;lTjU=;arSKsBb{s_n^~1PC;vW7S)m8QRx?>pIwj)^)AScYA@y5Yq<8- zsF4mpZOOiKfjhp>FD{5onNsrrZNzog=OnJH*5UW7Uje}KK`Q=y_c5;c-Cs9>#$ zTAIeFC25HY+HR;B9O;fvboJ?|j?Z_lL0$I^rc?eOrJ%LEg$lmsm9k=~Xz&+}dyq9-siz-p=l$rMImT{Wf2_T3w_;b$yMnGP(fD^wWrrW#XuK#yf13z zMq&?~fQqS?m<>ZFFcN)mycgAxJE)QUhMJK-oe3vd z8t2C>wAVp>(hbB=9E#dMK6iD0GzE=x9BKs9QB%JJHMOfz7aTyP-%(W0&!ReT7cb)@ zTu9Iznry+@cxq^HYoCkdIQ|p@q^x$#dOFAPo_**OuQPKMYD$1WZBfqde zA?b~?XupZKvFFTCZztB673z)S!5^_9^|5no2CiX0>aTGzL+>(|?+grlN$_IVg`xZ{ zxzDe~a&#Cc&cfjscZt1RCZK+TIf9CT4;X_7m0IflkZGBXa1|co_y}#w!dCF3 z8|P<2b~>-wO55lzU^D6!R?!Q7|HNBLp*Ri8R@(=}&)AWA)-|EtT%3wgm|?9QuY+}{ zFF}p)DeA$k*9Cv1@($v3>W@*^4f)!ZU_ItgJ66M_>&gED6k1VGkj+BXPhegA2NgtB zH`w3#^g``it5CsMVq<79ecRzW>ih5(w%ufZ0a<3V4Qx7Ap#2mkVZd>>ga&_kE&W#V zzbOX>upruze#F|CW1HQ02_JNUkxAm+K7NPwlF2?_`7d>CNCp7q<<%+r2w$|CG zwLOH}u;4y>E#Jp_)IVS`th3+FpN#sT*@aq)+dhRz3b78@fg;$2dRv@{-{VkhdeFRx zTc}q*6zctmZ&Bx;JZ$DYVlyxwBWOR0+WGEbAFO>eH2C|1hw&xV4!7TaF1rHlDL zvoLCe9Wev0Lq+{b%!_d@+Gl%FRF>7pI6U8*Kp{5HM5V_2bx z!>O-A?GMLMLE7Xeo9b7njVtXH%YtU8opC2>rea;SkJOszx20h@1?gQg+o7WO7^br~)>j{YzB(J;OAZ`lh`d3!yfm%Gel(p!SdRH_3k$Uei#C zk*E8Gkz@N?7EB9oTY7D|6Y3r2yv)Dak5KoVdGA`*3`GUmD%6yp#TuC4o^52!Q8T#7 zc>_C8k8|I*wdr-=qINOr#M{pJ4{Xmag?cG%M@``i)JO{dW>Y)ec^B)`UgV+eA5(A% z^`lq`Tm5bwT#e(Y|L#-xnL^J$Yz-?tGVh}Df8=96p_q~QPwXd|!B0cIgS6-W(|*!< zhT4F3KC=xa$8*b$dbpGJ70B)MF##uDKz*RxM(t=%QE8g>ANxLNgW8ZfqP`RIzqL=alBf@ss+b&WV!L0ZQmCp(PvsfvO`Kb5AFkFI4=ar}#+lb|G zFRCN&u_?y+z;}T1zdZ$gBpyUP=zCYc8LmTp z-Fl&c;AeO|>`pa1PQ^K>9Wi|%5d7PdF0P2RvQ9VD8dhoBP zDNGy|2(Do`>bs#hs(n6cKx=Rw?nK2zl^B8GZ$vf3Ues5if-+G|KM;({6fx}vc~DbW z5;aAYP&cfHd9e+COP0()MSrE(0dJ5#ssmBZQm(x!>IU^)y#;E7olxiZN8NZ7YJ^izOF0v>;AU69=<5D6 z*N`;6Jva)L4JA-LuZ~KyW|#tdV^W-eI&YCXz5(^%!>Ep&L7jgEW8zcPQoceBAVz|K zms$CrfPyY8fVyF6RKC~3zStIP;6+q=rB4_Le(h#L1?^}ofQykEdgoE;^%r)*8i@kl z43_L0ERE%o*l|Cpj+1{sQ_z9vWP#u>9E?gH2)@O(qn6?(=EL7mQ<^-5nHH4=5l9Gl z1yCa{jGBR(?s!wwOm;)f|N${yGrl?`)H5B>@jgezS8 zc}z+DD(ZpHP#u2nj)$eT>pnwGc@k$@)E1lteHE%u(D#3L)Y>k?Xxxb!`76{2GN-W) z6+mT03DlBQb@f`P8EJu9(w?Y}4M7FzI8+SG!g9DO4f(GJJfK18lq{`1pf;+)uV@Idfm zcSbn*--{DdMA%e~cTPo(U>26a#W)ymU@5GZ$!`1wE~1_xbMRM5y}hW7r&yLi@H^m~ zGd!zxcmRfTd>iJ(|M{-)-kBv^AowLy8%J=$V4RMxa3YS*ZX=DABjAlu9iuTcr{#AA z>_NRN*2kYv9m<|75d6dFgP4(etlR`W`q?S8q|gZ!T*t61zCbNaRGvWa_1qS9!9tA2 ztEiYrnb(#q8)~g1Q8QNpmBy7&>Dd$&W7AM0KZ2}??>(ZRD1U-VpI4~0j~i)AlGK^n znGtnNBVZUPX1_4l0Y@IO9gyh%=yOs4A*s4OLhEH>XeuJELy28P&txu6_s= z{ijg*eFxQ%N2n=&kJ>-t=eHQBkGjtgREI`mC@w&y>sP24SdPAWa>Si*5;dalQTcrZ z^?>`R8@|Cp_zBg)LIte76h=_5gt~DTEQXU%4?c>z-*MCoTtq$hRsr(=GZyha4SMj4 zf_CBuY(PC;p@6rA<83e#_4q{s!Jqk}Fp~OOOp8BZR(yd`n4+l7NEOUOeL8B!_MrxH z7B#TTMah3n=|dW{mA*iABz7^2?&PSo&Vst25bAYW1yf^3)b*oK*GhNi`$8XQ1#lV4)s7y={VE{t1&$ublz~jMV*(Tgv~?|RL5JQ z9@rDr!OyWjPR6q6|4U&3Q(UrSAovr>T<=s@t}auSZ_ z1~JOSw~wQER*k zwWb%{@z9DkvSe6-_AID(K^s(XF2?HkKh#E(wo)MYbzBKm-|gymFuU@Z^H;MEk3e<%PH2aEH_XLucnKR}sT#Hg&%w6TKVmOzQ#0Uo zz;oCf^VbS^oq4`DokDqhg<8WRwJmrWqtc}X>dU4JDw?NZYut;P;*@o41Ivm!KPTqJ z!l;?-fJ(Qi7<~Pr&Rd24846q7fuVJ6ji#caeHrS49j^U2>bw0KCc`(V^WxRBdInUG z7DR14HC=lL*FF>#1G7;vv9=!hufic3G{P&WsC|ceaGd%URB2J? z6?|h*9b16vz-H8W$6fnX*Zu_6(a;9uzfMfsz)mcHO20~|k+w&5Yz*qbYf(4cgSx>P z)C2EfF8l}eQJSft4WKltgLQBmc0dL5@2Dk8*dhM?LUMjEO&>X6%yl7t|6yM1KQ?!rkpN`i^r#kASy|_S`+~BlJ90rCy_#ZLRZA z@Bcffbp0KbuK%E-I!^;BVBYR?I#&1BtOE z^`bZu=V3G^=^F_CopA%y`KM7cb_sQ#x6Ziz?A?+M6^unt!B_*eUv%x~+mw!?p&$)& zP(gJH^`USZb>Z)*5&Y-s@%q~h!coCn1hpRwL{0q+)cMCy9lMD7Q27TBVA28h+zUPh zP0@YSgI=OW5Obi_Q=z6fFDf=lV_~d-MQ|8a!0i~EK~&Jj9Awv}K?Qd%%uJA$##YqZ z4Yru@k5H&b!x?OZX@^+P`=P#IMx%Df38?&Eg6il&REI92MtTi3!iSib2Zau`bc-5h z`$9QXFn2)h4`WT=+e$$(a0B&#C#Vs}8*UFsi~2r@K;>;o*IpGBgtbu}ZH$VA7S7J7 z`}RW(U@U6Q7opN}Td+?49iX5SFQRUA50x&zqn75S^Al>M@jo}yq0Y~ZO2a5r2Nt3p zuo~6jZO((P{fw($!MMu*dla;Gf1-lr6RO8qM_30+VSsvd)D3H6aHOaXbwkTA&^@6g5+mP;0ml)sYjZ z5nn*v=O(tnN2u$njk5Npn1gy})C|uYMgD8#i)c_#Z9+ZpD1O9S_%r@Onra4ikGAvn zp{_fRitb-s`zzGQVvn&bNRH}QPSkmYaU51fb@azE+&GfL4H`;eoUyipRmMEj2fF%7 z=LOWve832dKh9zxAM*C~3ZXhs6g4vyQTsw2REN9bW*m-FFuOnAf@cTLp&|8zK=8kW zz8M!%Z!*!|(=SkKoOY6RATuhO3!+9?4VCweP&3&LHIt(-GcLv`Jc63~7q0HVr=Yi9 z?#b5kY8XwuF=_@Dpe{Ut@6W35veIIAwYt+Ux zZiaPmIetm~G(OVzf9o#--f9}E&I|?fgzID&eg+4dHEitDKto)ZZE zrPOWgM1AR8Tgt#Z>qrlLPWuoXgd*`vi;FQM zW>`)Bhf^rC+HTMWOHv#PI4*OC8vD}CV_wqOMHbEpSD$KsgnYpb`#aOw-N1n$LR_zF8?p7oZlbFl#R z!vk>bMn_O-cN%qG+O76- z%8uF>%Aj5{eNY?HAk+pl4R!ts)P}PewIl99?Kj^cG30x9D3qt+A5=b<*k%tdhYFf% zs0*8*g0nqp$wr}ewx!PRP(k$@DmY_ox8O^U>R2vRhoUhT*2Id+{~;8VMhEc+oVLS) zq{&Vj$!OGt^HDcmi3xBYYAL=)jp!~aTRx#WlIa_pq4KD;9)Jq!ov!{IGxB^da+d{F zZPfd@4{F3iQ8O?OwPv%OD={hc9jK{3>Dq6gI`9~k-|=_b^%+pHl?PMcCe%QVp&w4+ zhHLm2HKj@SSh^KOjl4e2z}8p=pJF#G^sW72(lX3RJ@H-(%95yP?~b)`0Zzk*I2!x! zvp;KkwU7KCK*P}e_UH0XF_LA~QtH*n;{A)J_=wb0GN3Z52?l@dVYL^Lilo>v}b>lmGgF_>Trz;6}h}i(OGCp20cz z6cr2pO?&VJ)D}7$```vtjHLd>*1RQlpxz1F;~CtAd2ZSF|6SC8zVL6`R4+!orH)~G z{24VxZ&1ON>W)3QD(c^IG(^38Ui@l78RxFeRAN+n7F0}?Mh&b!>YXwf^&K!5H2{A* z1*P5hsI~mX9e9iS@=0{hf~Y!bX@+8coP^Q1&-ot9Q7?Jl)_5dpr#po8FvbJBt_hZ; zKE?FClN1y*A-`E#M4=uO?W}`Zx7E#UYG}$p+41q!0Z_M(00CD&PJ$U9F3Xr zE7S}e#=Oe^n-p}TIKSHsieNbP)|df(*S-vOqf@Av`W1`ef0!E!|6v1Z=bVMw500Rg z@;B5+Y^+DtkxUq&{I5(wJ@1MNx>=}w;2TuOE~C=Xdu;XW7*4ezDhmdoVrL90b{3#! zY&UAZIEY%}^QdgPhl-Kc==Y+K;E6SiK<(l4QA_d^<6zpSwlrB$K~>n*tD}~pxvNh@ zZB&a<9oXR9j*9kgQ5`se3dUUzXJSP7k}Z1TEfk*?7n+Y9Y2TKu>7AWD0ou-ZQpo# zQEPMn^?>uJ;CzPRnBuj~P*GH{wL-mQK1a>O2GsStUHyC1NPj||_W<>-Nb)8)Q~diM z3R;3PsI{r)>h+zioLy0QI{Z0u?7DQQ_B@zT`CpEL zdejbsYlupl>8P!98EQ#>LTw;VP#aXjx3+W{P#r3bO5a*o4*OzT+=){#>AOJi*Z7uV zA?k78^XbR)y|NT$;|SE+B>2~+FgfamIZ)AD1ABxJ#i-ys@}GShUPCQa@elU8ZHC&I zMqvbgi@MKs)SCZ?TGFx~$$v#@7YbUt*{HNziW>1ARPdd1-bGE_YiHa~HWL|9GZ2Y7 zzYOZU`l#UUg8B}ah>DF(sF*waDc}biexgBB{yQqD-k~~{lAlpE)#XqRsEfLBTg--o zP&ZtHO1o{&v#9fbL*4H+ssl+w!h&DL#jp|e4k3P6aK!s)(8w>LrsfGM*ph~Z1!p1( zHIgc*8+S%^WH71&(_H&9R4{Kv&FDVVz)qsl@EU5V?&5I_@dH*kiJForVRpmi7*2gB zD&H?-aeR)tan2ZF!5y(Mssj~p9X59DAFwp_crn8~ea=@y#nu<7j?8!Z%PD9p-GGHK zM=Y}y=B7T!c^I`MkFfzJiyh`2BN)4)UQ)T^h6VqZRGXr%s}(OS7=*)69odQb@dYZj zGJO`jpYIi?pbI*n(rYH>!f!AdZ(~W!7~gKt0(E=_YEAc|X66=F$CL@|KJ8KWorpSr zCu#t<`MELfUiGwNHhD8^147W|r&8-$6_t~1=Yh`$?QR$P#e@z)LL&v z<^OkB0k30AOrJcA%-|1~u@c_I_!yDG&d-M$P!$}84Ket?|8t%~J{qp0qB>4WOS=rH zwaSZ%;)cauF&>_Mt{{A0shg8tX_I)DqOd0oWS#fJ?6ZHfm{JqB!@KWc-zfr|dn^cEZ0oyAZyS`BsIhR$xTeH3cx zrnq*06$Rb+Tjw>@8vo-=o*^vwKbc$*74@q#hIxI-`l+1<5z4pgV+}@F$#uB{JJc&tVw#+s^x_DE|XBkT<9$ zN|D9ZIwz*4UJ;dctx-GebZoEuUqwM1PmHWKwK-88sE69?yE=!WMlu-{d~;E0xdb(U zEvSy{LZ#m^R4~WRW;2ool`YwEBj&|UJm34-9VnCCZcq^wRP|9o*cvsJQ&BOp2=z|b zi|W8nxP&G74a-m;o6{cn9cm`dqh4lrQP+KRrpZPAcch^Rh2-2|F&3h}Be!M6L(D@x zcAl`{2Sj1iM$;5EW4o~kUPoP*C~sKsZ?`I8QtE%9W-?}^?Ud)PB%LG4e?{|X z*RURS!(*r@edp>)@>v>I!vO6=QA;txISI8?b5Oyz%DD|=Q9p?4;0aWWy+h4#Ad37~ zz9x*a8)ipEe*x48>Y{?CBL*LU3Z7M{so#t0=o!>n-$PCH->BeCoZmK{A*g|Fz#MoH zHM8%13dJa7FAx^|m58=jf%-S7_J6PdMisOv?|`~+66!{~oVPHXddxz$#@SK(Lj`A7 z)bSb4t*Gn$3$E}M6~z&SExL1{f-OI4#C1{8-5Isz4s`XIs2N;}3ew%EnLB}6il1Hm zH&iUVL)|A)kzjE8UIq#pVSdzzJEA@qmZENW6V-vos3q`<+Rl~;)t(jAp^~TvG)4ti zFVqe=3Duz`sOaC0dKdhNk;?y%6f{+Ni`jd>J}SCbqB?XE^*a8D3Zml0Z7qAF*7{3S zN4~*sWYHPag9?_krK*F9p%JK#ZbS{_B$iYDU!hPPQ^jd`a!C?&+#M7v^ z-M99^DOGRUtRl4Tt?jwsb^EU0vph<7F*yutcs25hXw!1#4@Z){TXV6WgFPq z*2m%0n_@}4jEeGv4ef!sP#rIcTB`b}nQ3Y5zSoz6rg9R7<4jb~x1%mNiVDKBsFD2X zjt3gqR3=5uR8iE8+o0YN15jBs1a+SYsE*G>Wz#AQ{_lV9prGh~fL$@9F+qpjQ5|`Y zt1xa8_nt>h@h()yZlccnh#Gl&eUpKhu zPPmPEsJ}$5b%qx9fI?V}dO4hf(@-PK(9&K~Eii)maMVmJ!78{B^}xTd0LE(-7W^yT zGN_F&Zfo*iufZIxZB6T8PU=H3AFe{>=_S+}|AQJ?tTvX{sZeX07Zr5XQ5~<1TAGfi zrRs&c?;y;D%iZy_J_YsoGHQ+QqHgp6Bk>Q^1u5Iw51HjrQ#u~CWD8KyzaJHp_fQXv z)6O247`1dIQE6HZ3*$l568e8pP*8nD1y7vz7PVN)c|*?pEH!R~uIDJU3DVPiap4KYh+OT%HP8H&@z zMwSvawHZZD3d3@yDoa_=HNgMeEx_0z7`-}1j0=AqgO741{80UmPo!~?7Y6;U%( z4HXM5QR(NS(sBak#u?ZX_vwK0J=;JVNiNimRSMPPMy}r3>7%B6A!_8?oZq3A=(6)3 zYUD3b_xb4R2?tqvr$a5FUx-2x3e`|kHyX8-et~+>cGL|{V=??0^`OLqZKUBCMZF*@ zsym{VVianG<1idwpuQ^-53!#idm$b0y|WbRbKnkYiVF-i+n~10>8O$JLCwtfs0ZD} zn)oj^#j3;X0V}aQ^$(a8qla5IbVdzmHfrhCV;SZDe-t#blAqgy2Vy1aE3q8@j(Tv; z5n;i9N>Lt*Q=fuW@i^-I&qmrGwbsYl)EA(3(1(~GLq=H#3ZmW_)v+wk_qtHfp8T~M z@D?g9(-WK;Njp@14c5ayQ0J8xZTrJ;)PokGW^xzyz*u8!<_4g$W&-NG#i$wFgT8{` ze-yMq{DvLyDJppCj43?bhqga!YzJBub-(8QW-G0_pVWM80u5IK!Xub5M8 zAPG?SO^%9z@~DA!MGau2t52H3R4T}p(2x&LVRd}tEH~9In2wslFHvi`*?Aik8;Pdb zh;yRqol#Tlqn3CPD)>@QxAcobb*QROK~vKT6>NRnfgPw3okC6Zd5pk!sE(waVI9lw zEQvb5lB?HpHgUGYEFABFnvq$U7X3Z0a0!*y&oCo?aHjvl*0!{>C646y=lD6kL%nnc z&9trhJJd*j#8AACEm_KksBEb)+tP13lD@w8D}~k^$UDb^WjZQ~kD)r0e6CG-7OXla6F)F{`q0%?SmzG7%P&@2c)XxR8Fr9*9Jq5k3PPzjZ zQET)FGhxC7_JL6V_10^Q8c}D|@!_ZrEk#|o9hK)-Q8VxowM6k2+6*_r%G76I@W21@ z69wJ)9|fweP=wylK6Tl`LCeJzswGl!9vulpkiPIY7J+gru=`X2R*=SSYo+tIPEYl^{%KL zbO6S{Yp4hQzpl3ck0R+Ba3?ZIaCaEolHl&{?oMPPM2X-qxVr^+cMtCFu8Zpei!Z)# z-_w0&zx;det%u56b?R7ES65GxVR9EroM(`m!SWHxME-WrkePZcGM6kplxvv}y1{bV zuLNb2HdT3`G6af!gt9M`+jkh0UA`2`l5dBS&=Dw?@DwZr9S>>9!Qipjyl;y^nQ2`p zyT2n82YsP990eu7Y$*5nE+{jG*WzGHCq& zzil*R*B*!K;RE;yPF!X>9=6<^$wU~2d_FX8rxoUH*$&D|^@qja9M}S$hO$!GSGpVT zC9Mo)FU^CpN$r4*Ls@~Ja0K^HitXmLp0>kGY$=qzvKGqb+6QH~pN3+05z1b9sQnjE{C?Zv zFqhCh-n_;+pxl?9P^@6h5$3i*UpTQJz|G%Umo9inS!!!p>=7#d{C;?^W6`>p; zb)Y0L8p_NkKsmscLRp!8(0DxoCBaKj{M=JM*YS7I`26pmG{ixogXV2wgCX<_LUA|^ zR)BM%+-BEcb@&|0eO%~}d0&r$vI+l$vPZr{@#}urOe80i#EL>$k#dK*|K&Dngg|EA zQ3rZJnb{yHOE?|MHCqkkd4Ckjrt&yqev_F4iv3t93Cw{KcrBEp_!#U7GaWTwWsiZf zB4>^|%*}QcfjrL>A2T!bhO%@Op*X4sWyyV@BoqMUK zbeIxKz?@Lz`JqgxnD*O23FxE!5m0X1NoL<+SwTYrY=TALStv990%hrcKyjSmv^k?( zQ1(noSOC_5a;bu#*vCRyxkXU)jzigO*Pz7tQ~TC4k{I`278+$4r~>7Lih*(ora;;4 ztDywi17*n`K}qZ@ECkb@HT5e&3D635gAq{lFF^706c&SDpd?!G96#Wc`@bcP&hQZ| z538Lwm$na-z@wqeWFwTo`=PAJO(?h1BOQMOWpnncjgilSCKInPi6z=zGInun&~+w@`My^^(a#@E!d|uneqx+1+^i zZWKI3|Kert|4o`xl;)cGv>ON|ksDBE;(Fb@=4qhp?ws29gt9Uf zpsYkK9d8e14+JRtseIyf?tjT-9)c*?^@e$$UxISYt}9C+qS+fZ)DN6NRb776}@8C>~s+!ND(+h@k@ z?6COKkb@-_$~77U516_zmVP*_0-r$HBY9q!E7Jr{qdyWJ zgjxSIc?VXfKkuciJon#S8nV=0ugrmAumb&~urmAwE5S;y&HK7HEJyzaluME7FO!|2 z*sX@Q;A40l?t9~Ixd5lXHSYrdcP8h+E^_~0q#=R4-@yLV3t+ zgYxt{1~bB&Dt`;*?y!6?-v^iqrlK1OMLrnH?Kug`k-r5xa?!X%BR6~x<=UnD=x%(} zx(&)T-3-OSE-2$CRelZ1fpixxg!BRMH=*2K@1U$e^3SF`KNNWtDDncF0iP(}Lb+t$p&Ur5znM?ZoKQA*J}8^p z3(6&{0p);d@1P+w2!j%6B$S8BY*-W?R{0w!3AlVW9pr$C=$D4#s1lUG&9&bZ+UQ5a zJ#ad_&u!TJhk5%J|Hs|&TR9Ozn3~ND2uql+i5D1&W2-p}NfU-A| z|2CNo$|WoUV+q&>R;7Q2R}+<>hl|ztVRl^@DX;&>(m2S#4|o#pb+sCway!D!YI#V% zk-ORVvRaL|YJ7x8kzYt;a(ZIZu0s;5@l9)OgmNwCLb+C(l_#OBzlBO{GsiE8*d7&ie1?4>G3nlO%DBntrhmzllq3BMluPQC(rUb}NC_RD2+F9y7fNPhpcu@8GNWa%0^ASfHvI}Eu{^0v zJx?h2b$KWWwTJQ&tQQphc~D-`9fv#uET^@9E|t|`2reOzfLEb7cmQRlzo2YBx721o zJCsY58_JBmp)7SB_y#tG1&L54jnz_{zCE4Qd>?@F1FXuXteDr3%{wrw)%Zw;s@cqI{3N^8IATlZK#pE3 z_=Lp1!7=cj&Flv`@>-2=tD6+C8ovp>3P)iOP|#}pKHv?kPrrB}lYL<+W^fpWBmZ33 zYCPBNMXZ+h^!LJOxS^=kIMVZYviZ=j4aXvH>}55+wYvf3HK(JNx7AV_g+;I>f@{UB z#;-^V6}K9%?dC%{K+=~m_rOIcE8|h54{GJg@S+Weo#M6SxogG$@<5MLDbSKcxo26ZBue zw{TN=bA=XFuo|xqQdKnfLKB#e3D1CCrmpE+;={2R`K(`#6b?})r=S}nWf z{%=7;J_R#*Ez?1k+E(LT?14~jy901B{07IPH@A+tM+()m8b3(f1gA27A4-Bz_00pU zd;>G_rm&XyfyJO(Lv!UyK}R73-D${CIR<*ec<2Y8!F8}w>9@j7ubgW7FZO2N!pnYo6_yA#;fK?C=Z{t zuo-*~%;+pd?d8OV^BV#xH-W4@re#S$gY{scj zuJLc>F<*0!jPtV^Z%jA_?Tmkgd0LyvodjjiJb-fBr3|w2f%4onP*z}muzA3|hLU)L9#-R<+a0hm z{kO1#-2atB%-e1zl+3@uVX#}MY4{j6px-=<+ls{Iz@PLlg`3ZY^AT3#$7;`^oM^Qo z&AqV*%B$Q9P@em5pzMCvp5~<~360#-kTpKI@D^}Nq--_#CWe^R?7|g^+%YOz&6r+ ziI!uOnc#0IGaftIYJC3xRVbIL+8Az6SHAxrYc+neGIcyFguhV}xc?ubaC4%08||KC zH9ktQ!DOrPU2wn@^Rc@Era&*_RPz;0J}4(+8D#{N*9)s*5*%-Uq8~rad?j@ZTIt_} z^19(3tO@^~#>^$-^3$!xx64Ce7y1vO94OUhn45D36vMAjHdU&breklIo_-A|o2)IA zms~wyR@fiPOS_p+>{mnihU6g34R1PV459HIis67b^M%L+xSD>}S>{Wyqc92mdoVA2 z4rOm7n{6H})nHlru~78Z!IW^j@+g$s@(PrM^USdtzlw2`qv4NWHk5&1FgZ*&*K}Zm zspuDjOJOzm4nBry;MIAi{xjH>{zoV;y1+c3O2IYs10a6+{I`Xs zqufxA$Wl<2G8oFqI1pBc%c0y}&!8vFu*iJM)r7L^+e2CEtx#6xI2;bY!&T6+*i4|% z67w0-36_!P|9BeW_%M_s@;#KL%e>T_c|j=Gt{jvlYzk$i=0n*FTVM>lr1HAU%tSiD zG04NAtkhTN3q6*bkLxgK{QV!x3iBlMfTEZe$_kW$vh)q0B-8=Q<1`57;&z%1_GAm(U`fH&~Apd4_lQx91iO0ci@DPlGxwr5-gM(>0+zV@N zGmqlmj_u~l=k7arna#i-up|bvcAC5V43um370QYA8_Eo8?lK?OO`*)FJ#>e`P!67O zC@VJx=7IB|tndM7gLmL0==e$FJ&p0Z&459Vb^c%zK(Djh{3aA#8r)9Fk<~2VGAJZ>)#A^I!lx#OD39G{Ia3QR4%6t)f3y!2e>a=W>D&;D zCqPNWv5Oyv`xIGzLLw%QEaz!R__%yHX1FX}+i zYX)V40nj+8Aa)K*I1R~UxGIc;lE6eLGn^0Q{#^^@n(l{{;AtoaQldL%f~lcws%%g$ zK?7JHhCm6t4a&I^55@l(m{gwsw`sKDB0hn#5*6>72TdawOurM9YwRo?SdK)jbsMfn zUfFFF`5RDDc5t!l$aT^(0r?M%3o^q^GHuF8B`=CCQS$kp&f@EAz`qHQ9!Je&iWE;A z{iTk#;vkzFKZKU$&~l2tjhe7DcP9} zKX$gXO2+!PLZJb|znM)L1_E(5ok3nr8RcPuq`KmSt6_OA&KY%8hnLVFPOyLI?}k$3 zXFOK)htThYZ$DivH&$sMvfISnB!7ST2Sy_h7QjheReFUnk7~<14W62$pwT_8g{?0p}D00TTuUZ)jJ|x|H;<&3Q2D!* zM!CXQKDkL=fHXD!{OT8-$r1wby`}L1;-cA`c1fyDI$HRoHcJxKcglovu8*Jg{!%)J zC*kK3ssZU;W}XdcN0LfUo#JIpw=XHpCSo)?Ezq5gj=zp&Kt4{_D2RxzjMrzZ3i5R5 zt)mtt&P<}NBb%p;J;dK`{-mbmA6=IPDCH#hbq3<7KTyn1e+%O~ROh3#ae4(^XW=7~ zEEUk(BT1-G&e-&7(+2rsf*(Q02l)`S&CCR+%C{8rQSiq}F9tU0j4mOQ(v?JN(7uSg zBRc;rlbCe@gf-Fg)qwIT;Un-hh5*a3U8+9Cwz}#>sjtDtTZ$N{f^uRFnwP=N$ez+~ zM1ZN(jCv7Ipm&J=S%O?)e4ThrP&_n%Q*@k}XCs-{=x=0f5q&9t(hfmxY-v8~@ZZvg z08;qFv6kd0#i10ZM%!>AyL^=>_PVV2Qh8SBm6g7?To@ zO>LM?lb6Ti3+g*oZTr8M#F#&iGcrn8UZ8Lt#UD7#iK7+tm!b0~N=9Xp*0p%qU%1A11L3n|+d~#P7vm3`XA(CQ6XVY;`1#rR>1q6Hbm( zQ(`koXUcEHEn`%-F=K-WD!;fHj(ifU@|gBLwzD`gF(`#!{9F7Plp_D@ zTS_j1{Qngf0-j+ed@PFM9M0B%p<`s$ZxQcHPPRSE*~&v{4QoGdWBq= z|4WR*3EoVDU4+}|FGJx9${T41;>e4K@&fu&y5qb(?Xv`)h2v%_UuzBNgDp6-GXCG< zfn8D(KE~K6O)47uee|bb6Nx=9K8^B*c58X0dCDwcacX9LjZ}hmbJVWkurQ7~gkFJ#_kM@Cqa&rL+7= zxxEbJM7aTjZ>cRYXik3x?KNcnS_4(Y;BS&$K>s{rwNx&STH`~?Y;0d8kYC4sn+7|B zO&R=Vr*1}vKfP;l<1H0Nxu8n<7-%JmEbB%nB_4yo1Wr@ZUq~P+JDBkws@ISum6C;^ zQe4p~g07TT(a&$Zr3{5>%;1<_in1E)lRD}|a;*uJ1%ra<%|bjqWf9lew!8iY4gtKrUj1XEMGWSunBy zoQ%LuN`GY*^hVMjrL*-=pM^9jAM`Gw)0%!Fk}e{zkL}Fx4MF!)6P8{$X+kjmCcC9L zMkRExFnaPUP$@l0z7(`-Ad$Jy{)<2{P<}Vlj2eJEnw2Vn&p+t%7qgAxm`EekY+D|w zlMYG|^WlP)`WO`=&E7zxxNj-XO< zP}AZ}j&cvir6i_347-)o?8p|HV&iKnY=7aySK`X~bDNHoJMap^Vz7`Vl9B#5+RHVG zaFUQxg#gVo0Uz2@c)ylWE+IdrvJYyPoFvlWw=%vmvhnVtxr{_4zEK`3y%F|6X%5c1 zGOIGw9P~diJ_}iG9P*Y~%UPWL(%EL$LDD5*aq1J>JlBR%S=WSV7Mj|joxzfdNFRLT?%Gk0-tG1Ifw70 zs_TPod1`(V3xme~&!&py;A9jpB3?o*MZ2qx$upKWj9Of9o*nWj)|M319mpdLN4TOt zm^u&J>C|V8wMSPoS|8 zx>^|-AHz)e{~DH>)azUlDO*UwSw^BW4*lKO_Gdz6sSQb{61p`|`uF}HgoCsM^+Wk3 z+muBgPIn* z%&M15eT8bm#{4UjVOk7oP@QES3K>Z#0LMNUEnuJ|f!Au_ld2esO$XZY1OHU$$)b!V zpp?@17_R!#FHRB#HSlUyz$mi*a}X{~sK_etvB{RVDE-CwbqvShd<~9IpxfRwHNJ)- zyTJHBY!h`|pyc#JbIYQl1uu>q{e9g>n? z00pRB4V}pb5*(2rxY)ME$7JNQupOuVTCidZb%p-$;QG%b!;L7F!C(da3~w=$sW^T? zzbS^x3G6I08FQAm*mk9EBJf>w)-doBn-=I~C+JPugOD#p=TG`lx{&w~l1R)^e^~yc z+(Cp>2o{c${t0Hif_|(9vtrySK@tyfEaf;nh)r_>ILinc-Z-DeEK}pRD7GneycTWw zRp?z!=HL4-9gZrYloF%E8Yq_b;{=!I9DOMpO&DME5a1wo9W;R3e=b2RGmT|zHmpvJ zdTKikztymH^ki^!f+c;2u(~rll;2UiAUld|2yMI0T>PZQZZUn{aBh@o=rzExCrMaU zubNKa0o;JzF;;6T^$+^R1p0>=48&-v_W1LGKi{uJ~$5KP@(K>g%&kb|~^A zB;HB(Uox`!OznZeI0lxhvJssxYqY-$zQ$Q*bWR{Yi-XSCJVu^}egS4CWh05)L0*mV zXmkr|(mUyoBhG$gD;Vb&&gS{UUn{V@qe?kRhK1OaQm#?YV*Cq3XPL|F+G9K%<1&o( zM!yBC)tefD>>vR~!>8!f!RH71Ghq~Z1CXCXo{R)DP$>=zGRse#7KU92^aV$asZv5w zYOC2t>(bT4fs`8!7)wEQzM5WuU21WhpwuOa_QbhBLQScX`T?_QKW9Qh2!c+u#P*_8Im>QHtxsEy(=cP%&S$5&P2|*TUuh0U*aGLb z5Tw!>FHGR%JMB)$f8t~;dVdj23h)20G{D(D#x4+CN)7r_zM{KQ+tOb_vZ>I|hHeqs z&Cq{|w3R68b*jIEqQl;$FV3X*d#O`k#ey46HXj`h3Tr zMIOlbZrZPqx5DNG&S!}cO2}UK!Ov)S*>V`od z`l)G`MK%EAJ!Cxx2Pbfxu=FK~dgztG<_C#M@khsw{zdGXQA^W*MgMP@lRA@l+web5 z?)8lrroh2ioX=sP3Jzm%QbM!Mfh@5mC(iGP9GxmG^=%PQ>flt$BdQJgD|GhLeo34E z!)cWKtkMILc|n!Jf4MZT|4q%>1;JODF-8YrD>7b4;436J0*58h3q|J_2`xrej@s7r zWhsyI+_X!hH;iQVV?P4^rM@5HOG;bqn?2%tV)%xDUvMUOgOpqZ?Sm{!{94}vvs+1 zlH3sj4rbOps8V7H)?3G0!LjHk(nQZQc2UPnZS(76WJ7dv{fRN1SVociFB?H_BTP#o zsp%J_da1%uoq-SiDg=3n&OgjD82MHDWi=^r_LfAJ5$Gf1Qf{J?MeV0zzl-)B^lLkV zqvM!FryEOMScUgB%jP)wX1HN?7*3~7M)qA-YqpNP!1g2UVC?eIu0Rr1|FZ(YGJ9-m zX|kD^a2nGOum3QT@|*y-FqZO+WxS8V66!T(IT=}?8dpc>CF7+@_%KXkSeReF;j1Dx zg$dv+>1o%{gzA!H5OzVtdW*tSH+}xJ)+EHJm|n{)D0W8fg7Qh6R>F9puFhkU=#ETE zS`(J4$l75WLY+YSDR#*;k*=y+i$qTA5Y?p7`Dfuln*jf+7%M$Ji*=%+oZ^&(5=VVMPwN@p&7aoxv-`1kw!Gi zQ`e((gv_^~a1`Zq@TO)fnn`JYND!zUtFRTDq}b+XJPmzs?CPNRKohKtzf836ptlO! zwA7aBBb-T2mFqu=#!oW+P7O{FK!Wzttb5Y_jT0%`sOxY%3tiqkYT1JQZ<5_W;IZg5 zVob^()b%8HnEp@3(xYd`W+yc{aw$_BI0#^%9D*byu$;k_)PnTa!uc3FOMaZ+rXPde z44fuqyfw0Z=&n+wHZT%dFZh<^Go$BAjMc2pZ{pY(lk$r?mZTl=MwdecC#O(ISmvN$ zqmIEy-UZl2lgWp(hpIbDt6`LR2;m;=re&H5U?uk zN612OwvcMkU~_1$pq9}@>Y?|8x|2E%+c0bkGnN=rY6$|y(Drr$o(%x{>M;$6n5h10FLGnXabJXVptgYM3T9Se1Ik+Ht~#i(Lnnd zn~UvC{Pdt5OrSIL6QiG$)yRQ-yapeIO%U?Y$c#TJm=R~a=%k?*p?w*}e(HD{LF&>U z1Xti#%5QZf?TiFDPVGy=L*Q@{y@$M;+KY~qO~~EwFXbYB8kuc}Wex+|sU@kWG(cs7 z6~USD{$wzg83b@i?xM3A$Gxb3Ba6pLQBCF&dRvg~LT5g@M@i^3Z7IAH+9)&eD8GLN=LpzE&ffjB-#Z9)?DvGF2!E)sl8 zGQ(stlz$j&LyRI+qsaB2k|1Cu47*|20fXAetKfVY%5gYqqKV|Cot5@K)N1IIqAz6@ z&hzO5XB2kdu?u3n5ea88RgAAyHQqs1z}SD?5zoN5kY@Q88COOr6orcFyaP@)>E&sR zeiHPh^n-~B)}DHY#FLZM-^lM^UlV`dk@>1$(ci@QM*4r^x2VL=jY1YOozLJejFQkE zEt*Ly?7%NOyv+ zroW8(C;H`>)HD1AJ2ZF^97WOIMG`ep`h)CJpty<|KBF%sH97~VT_q6XRcK4;O>L*i z=SO~yx*wfXBoc}I2ki&=35WNQHDY`WHj%`0c;TczgR6CUZ^A_k3|HrA;8T=0nxWU??aIDG6~vJhS46xM3PgpFk>k>bwBiz_y3JVp*9KB!caME9*G_6Q%j^iF82e#4ZaCuOaXAp8F^!5ZN3 z7)D*pG5!J|yAy>BI6TdY++zH!jxC|TlzwgOE~{(`?abJ$N{~!2dJU1K(pm4tM#>3v z#u6(X33~c711XCMHWGy{I)m;gY|yc^C>BAU6rIe--r(>d?Ik+C3HuBh*NI(E zu=b`AfmX@R*(JxASAPG1Y^JM^4N(~HR za8@5@3pD#^bIABQAIJM>ErwHZ(i^)X=u3H^vu}f~E928O@tcgT)`ae%a~+%C^b?Wn zIphD180G{fU|zD?ugW6+hCz7($^Ht#U>mc!N|h32!uXm;Z3byFN6|S&dm6UR@)4cS z#F(k}BL72v(3h}mVlWp*)4)FU`PptE1h_);eE3mrFR z+7=(97$3~4jDxP|*CdIHFbjI-gBG?zctr#hPZTduOCY<0qnRkzCqM(7O(3~hj7ho7 zSR6^c#Cc!pe@mtWf{C=}WB*7mbtZf+BA&w!!)Xi#Fu0Jxmjv)s!@VSMo4~L2T29ni z9)?zuSc&de+DUNshw5BYok;o*wfz~tzQnnM%vTfWLGq7f{{A$kQKif$U~&@qZFVi` zQSL;45&b=ktx$(M==)&Plo{MZ?kt5!=sx;V8WAv1+dHv)Ns{htr1i*uqSqU{qH_OB z38j+(kCabG%jY1hViM}h=t=IQ85nNB|ly;|s%MHWDSTsZ4Va#H5% z-jQ}%r6#giWjnTB$!nv;0YI_I|jcsuwMfMnTV9t@Q&jo{G@_ir#VUzrkSzWbe?qf#ZePJ*7(7fy{=iEy>rx*GT&5 z2zru$zu{|iR!K7WIO5Q3t21~2<&rqLz%o^4@EnFx))J^0<3DMqQvIy-y>QYM*+<6b zV>gDrE2~hP8j1aSbmlSEO8t1FlT7W!ZxgB`E3*osmeK6fp`0BD*R?N-OC?*%KE}r4 z_ytaO!hR&&6El*rX&@an)RaKZn z-yzTcCOD{%(t89OP^?JcB=on_mQoMLCDDn}Rp^6!C-UOxJXW1M^t;i1f{*O950UgG z>{h`q*m=VRj74JOEQUL0znbx4T!xnD!j~lXTbLE5jz+Bl^YLeVD{kz_q&y?7Y_L0_ z|7JX&A!TRLzUy?2tQ=G7k8C)U;z4T57+apzsp~{#p9*!^aIqODJ=Z&E-A-oJ<@H0bOo-*6Yd--9MY8PY3gh7&_LUg zN;-5tVB@KJ`A8!?L8@)>nStrWi^+R)YU6Z@F19$8QXZ$pbWYzG z->vP=8YmivR}$FdA!rbG$yAnL$WjX1X9O>%whhq@L)V=cE#?2_w5D-evtE}V`-K<< zVbq9mDJ59=Z#Wx<&Nfyd7qT^Q2dg(2z5R?|A~9#lOXG&FR$I;JIg@dg#`roZ-?BMN zMI1;ejl&RKt|^R9z)2yLAK=7Bpk12edV+Pt;ZtNg86SfE0rW>}umZ~Q_rQ~e^yQZcJ|xr-eJPu1hta-I-HT0m z#(lA$M7tyHICRcpw+QHwL)6i(CGKEzii+HcV>XT&k)&qIXSSqO5A0cY8U zVMQDy!=NnV-t^mv9%Tk~68bKTpC{-qsdFHF$4vocBXQ40I}>i-<$W0^oV zd1QA&X&TwP!OSSvVz4;gn&R}Zdfm=g8stCdqhdLOql4H=X^Ept^pB!*jQ%@#3t3)G zY8YHf0^!uu+8zN+)ZG*GPx)(a{86SybDIJl|M^B2E zCBCVfOTJ`jyo>onN84kfiv{~dgnLJZ2gdhI>GCD5yHAweC*Ci&i;G*nKzl@(JtnHJ zEg(2NI6BDg?`>-yWsmfU3Jwpn#RS=H_1ZLu@0`zNTPkboAbXfSK51!}z$A&9`S!5; z#l(kHcIlDRD(<4=&v$gG)*z)|tvcua(?Zm3U8tr|^ivC)#KJ(yIZjC^AvB0_zAqM|)*A@;tu=paJ*#l}R7 z2YWAjxUGnPluuxw7?GdNKPn=aSm} zxya5->>U^O(lv)e?Ecjah=}Flp(E0!5ixe(h=>qxkJj|Uwdb6QUqooAPh@nkFFQvz zs?#de9uQ-T4)$jf0frlr@$`^A5ghIp8jD~Qju4G}YG&g%;n~$ID9yV`4fIW&NdvinR^7uqXdh@q=4i$21 zV@*=Ll&wVBip5LD<@9!2?pD&fbo_B|w?QfXKTe8TmEBThNmmnZvTbnIFE-%F-avbJ ze2X@2R`)8p`-APa-my`vmZ1@77o8YyTbpRPb;H?+0X}}H1V{PXdPT_1!L4eKiEq=v zZA#jdT(2-67PPlL+#knJL)^wC^{5%q$4fSONKAZ0tlPBwNi+w0T#hqtnc`E;b!*fq zl`X+J!&Zo|{n>4H)Ka7J)J z!)?(_E57#-cb}5+&$hbPb+6FUZX8~ATN8V9bZmH_M@zfxw(x%3YcaOwdW7LH+7@b$ z>BlCr)kUT8%Le4wez&ojli-*d&iHu;9kuo zuGdBPYGplYGu0Z#z9A2DdxiV3ymCd3499tt$iwZiwm^Gyj87DM&f5}~B87XF_zM@^ zH#B!WyeKYbN2|@j&cukrCcz5W!@WJ4Mnr}AgxaHeb78qDnIHN36Sc8q9~H?;7}q&G zCYC3d4;xz)LVUvI8cHI;b`M$IKz4>7ceA;p|6j|V_W!KA+(_Q>RdZX*bcriG$eJye z9+Y0P9Riq0Acs(3j7J^w%(TbddgPuxk#V)WG~ 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." + +#: AppDatabase.py:1408 AppEditors/FlatCAMGrbEditor.py:2740 +#: AppGUI/GUIElements.py:2604 AppTools/ToolNCC.py:350 +msgid "Clear" +msgstr "Klären" + +#: AppDatabase.py:1409 AppTools/ToolNCC.py:351 AppTools/ToolNCC.py:1624 +msgid "Isolation" +msgstr "Isolation" + +#: AppDatabase.py:1417 AppGUI/ObjectUI.py:409 AppGUI/ObjectUI.py:867 +#: AppGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:62 +#: AppGUI/preferences/geometry/GeometryEditorPrefGroupUI.py:56 +#: AppGUI/preferences/gerber/GerberOptPrefGroupUI.py:95 +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:137 AppTools/ToolNCC.py:359 +msgid "Milling Type" +msgstr "Fräsart" + +#: AppDatabase.py:1419 AppDatabase.py:1427 +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:139 +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:147 AppTools/ToolNCC.py:361 +#: AppTools/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" + +#: AppDatabase.py:1424 AppGUI/ObjectUI.py:415 +#: AppGUI/preferences/geometry/GeometryEditorPrefGroupUI.py:62 +#: AppGUI/preferences/gerber/GerberOptPrefGroupUI.py:102 +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:144 AppTools/ToolNCC.py:366 +msgid "Climb" +msgstr "Steigen" + +# Cannot translate without context. +#: AppDatabase.py:1425 AppGUI/ObjectUI.py:416 +#: AppGUI/preferences/geometry/GeometryEditorPrefGroupUI.py:63 +#: AppGUI/preferences/gerber/GerberOptPrefGroupUI.py:103 +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:145 AppTools/ToolNCC.py:367 +msgid "Conventional" +msgstr "Konventionell" + +#: AppDatabase.py:1437 AppDatabase.py:1546 AppEditors/FlatCAMGeoEditor.py:450 +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:182 +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:163 +#: AppTools/ToolNCC.py:382 AppTools/ToolPaint.py:328 +msgid "Overlap" +msgstr "Überlappung" + +# Double +#: AppDatabase.py:1439 AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:184 +#: AppTools/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." + +#: AppDatabase.py:1458 AppDatabase.py:1567 AppEditors/FlatCAMGeoEditor.py:470 +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:72 +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:229 +#: AppGUI/preferences/tools/Tools2FiducialsPrefGroupUI.py:59 +#: AppGUI/preferences/tools/Tools2InvertPrefGroupUI.py:45 +#: AppGUI/preferences/tools/Tools2InvertPrefGroupUI.py:53 +#: AppGUI/preferences/tools/ToolsCornersPrefGroupUI.py:66 +#: AppGUI/preferences/tools/ToolsCutoutPrefGroupUI.py:115 +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:202 +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:183 +#: AppTools/ToolCopperThieving.py:111 AppTools/ToolCopperThieving.py:362 +#: AppTools/ToolCorners.py:140 AppTools/ToolCutOut.py:190 +#: AppTools/ToolFiducials.py:172 AppTools/ToolInvertGerber.py:88 +#: AppTools/ToolInvertGerber.py:96 AppTools/ToolNCC.py:403 +#: AppTools/ToolPaint.py:349 +msgid "Margin" +msgstr "Marge" + +#: AppDatabase.py:1460 +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:74 +#: AppGUI/preferences/tools/Tools2FiducialsPrefGroupUI.py:61 +#: AppGUI/preferences/tools/Tools2FiducialsPrefGroupUI.py:125 +#: AppGUI/preferences/tools/ToolsCornersPrefGroupUI.py:68 +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:204 +#: AppTools/ToolCopperThieving.py:113 AppTools/ToolCorners.py:142 +#: AppTools/ToolFiducials.py:174 AppTools/ToolNCC.py:405 +msgid "Bounding box margin." +msgstr "Begrenzungsrahmenrand." + +#: AppDatabase.py:1471 AppDatabase.py:1582 AppEditors/FlatCAMGeoEditor.py:484 +#: AppGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py:105 +#: AppGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:106 +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:215 +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:198 +#: AppTools/ToolExtractDrills.py:128 AppTools/ToolNCC.py:416 +#: AppTools/ToolPaint.py:364 AppTools/ToolPunchGerber.py:139 +msgid "Method" +msgstr "Methode" + +#: AppDatabase.py:1473 AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:217 +#: AppTools/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." + +#: AppDatabase.py:1481 AppDatabase.py:1596 AppEditors/FlatCAMGeoEditor.py:498 +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:230 +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:217 +#: AppTools/ToolNCC.py:431 AppTools/ToolNCC.py:2212 AppTools/ToolNCC.py:2739 +#: AppTools/ToolNCC.py:2771 AppTools/ToolPaint.py:389 +#: AppTools/ToolPaint.py:1839 tclCommands/TclCommandCopperClear.py:126 +#: tclCommands/TclCommandCopperClear.py:134 tclCommands/TclCommandPaint.py:125 +msgid "Standard" +msgstr "Standard" + +#: AppDatabase.py:1481 AppDatabase.py:1596 AppEditors/FlatCAMGeoEditor.py:498 +#: AppEditors/FlatCAMGeoEditor.py:568 AppEditors/FlatCAMGeoEditor.py:5144 +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:230 +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:217 +#: AppTools/ToolNCC.py:431 AppTools/ToolNCC.py:2223 AppTools/ToolNCC.py:2745 +#: AppTools/ToolNCC.py:2777 AppTools/ToolPaint.py:389 +#: AppTools/ToolPaint.py:1853 defaults.py:400 defaults.py:432 +#: tclCommands/TclCommandCopperClear.py:128 +#: tclCommands/TclCommandCopperClear.py:136 tclCommands/TclCommandPaint.py:127 +msgid "Seed" +msgstr "Keim" + +#: AppDatabase.py:1481 AppDatabase.py:1596 AppEditors/FlatCAMGeoEditor.py:498 +#: AppEditors/FlatCAMGeoEditor.py:5148 +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:230 +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:217 +#: AppTools/ToolNCC.py:431 AppTools/ToolNCC.py:2234 AppTools/ToolPaint.py:389 +#: AppTools/ToolPaint.py:698 AppTools/ToolPaint.py:1867 +#: tclCommands/TclCommandCopperClear.py:130 tclCommands/TclCommandPaint.py:129 +msgid "Lines" +msgstr "Linien" + +#: AppDatabase.py:1481 AppDatabase.py:1596 +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:230 +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:217 +#: AppTools/ToolNCC.py:431 AppTools/ToolNCC.py:2245 AppTools/ToolPaint.py:389 +#: AppTools/ToolPaint.py:2032 tclCommands/TclCommandPaint.py:133 +msgid "Combo" +msgstr "Combo" + +#: AppDatabase.py:1489 AppDatabase.py:1607 +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:237 +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:224 +#: AppTools/ToolNCC.py:439 AppTools/ToolPaint.py:400 +msgid "Connect" +msgstr "Verbinden" + +#: AppDatabase.py:1493 AppDatabase.py:1610 AppEditors/FlatCAMGeoEditor.py:507 +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:239 +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:226 +#: AppTools/ToolNCC.py:443 AppTools/ToolPaint.py:403 +msgid "" +"Draw lines between resulting\n" +"segments to minimize tool lifts." +msgstr "" +"Zeichnen Sie Linien zwischen den Ergebnissen\n" +"Segmente, um Werkzeuglifte zu minimieren." + +#: AppDatabase.py:1499 AppDatabase.py:1614 +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:246 +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:232 +#: AppTools/ToolNCC.py:449 AppTools/ToolPaint.py:407 +msgid "Contour" +msgstr "Kontur" + +#: AppDatabase.py:1503 AppDatabase.py:1617 AppEditors/FlatCAMGeoEditor.py:517 +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:248 +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:234 +#: AppTools/ToolNCC.py:453 AppTools/ToolPaint.py:410 +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." + +#: AppDatabase.py:1509 AppEditors/FlatCAMGeoEditor.py:611 +#: AppEditors/FlatCAMGrbEditor.py:5289 AppGUI/ObjectUI.py:143 +#: AppGUI/ObjectUI.py:1599 AppGUI/ObjectUI.py:2456 +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:255 +#: AppGUI/preferences/tools/ToolsTransformPrefGroupUI.py:142 +#: AppTools/ToolNCC.py:459 AppTools/ToolTransform.py:28 +msgid "Offset" +msgstr "Versatz" + +#: AppDatabase.py:1513 AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:257 +#: AppTools/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 +#: AppDatabase.py:1548 AppEditors/FlatCAMGeoEditor.py:452 +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:165 +#: AppTools/ToolPaint.py:330 +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." + +#: AppDatabase.py:1569 AppEditors/FlatCAMGeoEditor.py:472 +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:185 +#: AppTools/ToolPaint.py:351 +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." + +#: AppDatabase.py:1584 AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:200 +#: AppTools/ToolPaint.py:366 +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." + +#: AppDatabase.py:1596 AppDatabase.py:1598 +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:217 +#: AppTools/ToolPaint.py:389 AppTools/ToolPaint.py:391 +#: AppTools/ToolPaint.py:692 AppTools/ToolPaint.py:697 +#: AppTools/ToolPaint.py:1881 tclCommands/TclCommandPaint.py:131 +msgid "Laser_lines" +msgstr "LaserlinienLinien" + +#: AppDatabase.py:1641 +msgid "Add Tool in DB" +msgstr "Werkzeug in DB hinzufügen" + +#: AppDatabase.py:1675 +msgid "Save DB" +msgstr "Speichern DB" + +#: AppDatabase.py:1677 +msgid "Save the Tools Database information's." +msgstr "Speichern Sie die Tools-Datenbankinformationen." + +#: AppEditors/FlatCAMExcEditor.py:50 AppEditors/FlatCAMExcEditor.py:74 +#: AppEditors/FlatCAMExcEditor.py:168 AppEditors/FlatCAMExcEditor.py:385 +#: AppEditors/FlatCAMExcEditor.py:589 AppEditors/FlatCAMGrbEditor.py:241 +#: AppEditors/FlatCAMGrbEditor.py:248 +msgid "Click to place ..." +msgstr "Klicken um zu platzieren ..." + +#: AppEditors/FlatCAMExcEditor.py:58 +msgid "To add a drill first select a tool" +msgstr "Um einen Bohrer hinzuzufügen, wählen Sie zuerst ein Werkzeug aus" + +#: AppEditors/FlatCAMExcEditor.py:122 +msgid "Done. Drill added." +msgstr "Erledigt. Bohrer hinzugefügt." + +#: AppEditors/FlatCAMExcEditor.py:176 +msgid "To add an Drill Array first select a tool in Tool Table" +msgstr "" +"Um ein Bohr-Array hinzuzufügen, wählen Sie zunächst ein Werkzeug in der " +"Werkzeugtabelle aus" + +#: AppEditors/FlatCAMExcEditor.py:192 AppEditors/FlatCAMExcEditor.py:415 +#: AppEditors/FlatCAMExcEditor.py:636 AppEditors/FlatCAMExcEditor.py:1151 +#: AppEditors/FlatCAMExcEditor.py:1178 AppEditors/FlatCAMGrbEditor.py:471 +#: AppEditors/FlatCAMGrbEditor.py:1935 AppEditors/FlatCAMGrbEditor.py:1965 +msgid "Click on target location ..." +msgstr "Klicken Sie auf den Zielort ..." + +#: AppEditors/FlatCAMExcEditor.py:211 +msgid "Click on the Drill Circular Array Start position" +msgstr "Klicken Sie auf die Startposition des Bohrkreis-Arrays" + +#: AppEditors/FlatCAMExcEditor.py:233 AppEditors/FlatCAMExcEditor.py:677 +#: AppEditors/FlatCAMGrbEditor.py:516 +msgid "The value is not Float. Check for comma instead of dot separator." +msgstr "" +"Der Wert ist nicht Real. Überprüfen Sie das Komma anstelle des Trennzeichens." + +#: AppEditors/FlatCAMExcEditor.py:237 +msgid "The value is mistyped. Check the value" +msgstr "Der Wert ist falsch geschrieben. Überprüfen Sie den Wert" + +#: AppEditors/FlatCAMExcEditor.py:336 +msgid "Too many drills for the selected spacing angle." +msgstr "Zu viele Bohrer für den ausgewählten Abstandswinkel." + +#: AppEditors/FlatCAMExcEditor.py:354 +msgid "Done. Drill Array added." +msgstr "Erledigt. Bohrfeld hinzugefügt." + +#: AppEditors/FlatCAMExcEditor.py:394 +msgid "To add a slot first select a tool" +msgstr "Um einen Steckplatz hinzuzufügen, wählen Sie zunächst ein Werkzeug aus" + +#: AppEditors/FlatCAMExcEditor.py:454 AppEditors/FlatCAMExcEditor.py:461 +#: AppEditors/FlatCAMExcEditor.py:742 AppEditors/FlatCAMExcEditor.py:749 +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 " +"erneut." + +#: AppEditors/FlatCAMExcEditor.py:559 +msgid "Done. Adding Slot completed." +msgstr "Erledigt. Das Hinzufügen des Slots ist abgeschlossen." + +#: AppEditors/FlatCAMExcEditor.py:597 +msgid "To add an Slot Array first select a tool in Tool Table" +msgstr "" +"Um ein Schlitze-Array hinzuzufügen, wählen Sie zunächst ein Werkzeug in der " +"Werkzeugtabelle aus" + +#: AppEditors/FlatCAMExcEditor.py:655 +msgid "Click on the Slot Circular Array Start position" +msgstr "Klicken Sie auf die kreisförmige Startposition des Arrays" + +#: AppEditors/FlatCAMExcEditor.py:680 AppEditors/FlatCAMGrbEditor.py:519 +msgid "The value is mistyped. Check the value." +msgstr "Der Wert ist falsch geschrieben. Überprüfen Sie den Wert." + +#: AppEditors/FlatCAMExcEditor.py:859 +msgid "Too many Slots for the selected spacing angle." +msgstr "Zu viele Slots für den ausgewählten Abstandswinkel." + +#: AppEditors/FlatCAMExcEditor.py:882 +msgid "Done. Slot Array added." +msgstr "Erledigt. Schlitze Array hinzugefügt." + +#: AppEditors/FlatCAMExcEditor.py:904 +msgid "Click on the Drill(s) to resize ..." +msgstr "Klicken Sie auf die Bohrer, um die Größe zu ändern ..." + +#: AppEditors/FlatCAMExcEditor.py:934 +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." + +#: AppEditors/FlatCAMExcEditor.py:1112 +msgid "Done. Drill/Slot Resize completed." +msgstr "Getan. Bohrer / Schlitz Größenänderung abgeschlossen." + +#: AppEditors/FlatCAMExcEditor.py:1115 +msgid "Cancelled. No drills/slots selected for resize ..." +msgstr "Abgebrochen. Keine Bohrer / Schlitze für Größenänderung ausgewählt ..." + +#: AppEditors/FlatCAMExcEditor.py:1153 AppEditors/FlatCAMGrbEditor.py:1937 +msgid "Click on reference location ..." +msgstr "Klicken Sie auf die Referenzposition ..." + +#: AppEditors/FlatCAMExcEditor.py:1210 +msgid "Done. Drill(s) Move completed." +msgstr "Erledigt. Bohrer Bewegen abgeschlossen." + +#: AppEditors/FlatCAMExcEditor.py:1318 +msgid "Done. Drill(s) copied." +msgstr "Erledigt. Bohrer kopiert." + +#: AppEditors/FlatCAMExcEditor.py:1557 +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:26 +msgid "Excellon Editor" +msgstr "Excellon Editor" + +#: AppEditors/FlatCAMExcEditor.py:1564 AppEditors/FlatCAMGrbEditor.py:2460 +msgid "Name:" +msgstr "Name:" + +#: AppEditors/FlatCAMExcEditor.py:1570 AppGUI/ObjectUI.py:761 +#: AppGUI/ObjectUI.py:1567 AppTools/ToolNCC.py:120 AppTools/ToolPaint.py:114 +#: AppTools/ToolSolderPaste.py:74 +msgid "Tools Table" +msgstr "Werkzeugtabelle" + +#: AppEditors/FlatCAMExcEditor.py:1572 AppGUI/ObjectUI.py:763 +msgid "" +"Tools in this Excellon object\n" +"when are used for drilling." +msgstr "" +"Werkzeuge in diesem Excellon-Objekt\n" +"Wann werden zum Bohren verwendet." + +#: AppEditors/FlatCAMExcEditor.py:1584 AppEditors/FlatCAMExcEditor.py:3041 +#: AppGUI/ObjectUI.py:781 AppObjects/FlatCAMExcellon.py:1177 +#: AppObjects/FlatCAMExcellon.py:1268 AppObjects/FlatCAMExcellon.py:1453 +#: AppTools/ToolNCC.py:132 AppTools/ToolPaint.py:127 +#: AppTools/ToolPcbWizard.py:76 AppTools/ToolProperties.py:416 +#: AppTools/ToolProperties.py:476 AppTools/ToolSolderPaste.py:85 +#: tclCommands/TclCommandDrillcncjob.py:195 +msgid "Diameter" +msgstr "Durchmesser" + +#: AppEditors/FlatCAMExcEditor.py:1592 +msgid "Add/Delete Tool" +msgstr "Werkzeug hinzufügen / löschen" + +#: AppEditors/FlatCAMExcEditor.py:1594 +msgid "" +"Add/Delete a tool to the tool list\n" +"for this Excellon object." +msgstr "" +"Werkzeug zur Werkzeugliste hinzufügen / löschen\n" +"für dieses Excellon-Objekt." + +#: AppEditors/FlatCAMExcEditor.py:1606 AppGUI/ObjectUI.py:1687 +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:57 +msgid "Diameter for the new tool" +msgstr "Durchmesser für das neue Werkzeug" + +#: AppEditors/FlatCAMExcEditor.py:1616 +msgid "Add Tool" +msgstr "Werkzeug hinzufügen" + +#: AppEditors/FlatCAMExcEditor.py:1618 +msgid "" +"Add a new tool to the tool list\n" +"with the diameter specified above." +msgstr "" +"Fügen Sie der Werkzeugliste ein neues Werkzeug hinzu\n" +"mit dem oben angegebenen Durchmesser." + +#: AppEditors/FlatCAMExcEditor.py:1630 +msgid "Delete Tool" +msgstr "Werkzeug löschen" + +#: AppEditors/FlatCAMExcEditor.py:1632 +msgid "" +"Delete a tool in the tool list\n" +"by selecting a row in the tool table." +msgstr "" +"Löschen Sie ein Werkzeug in der Werkzeugliste\n" +"indem Sie eine Zeile in der Werkzeugtabelle auswählen." + +#: AppEditors/FlatCAMExcEditor.py:1650 AppGUI/MainGUI.py:4278 +msgid "Resize Drill(s)" +msgstr "Größe der Bohrer ändern" + +#: AppEditors/FlatCAMExcEditor.py:1652 +msgid "Resize a drill or a selection of drills." +msgstr "Ändern Sie die Größe eines Bohrers oder einer Auswahl von Bohrern." + +#: AppEditors/FlatCAMExcEditor.py:1659 +msgid "Resize Dia" +msgstr "Durchmesser ändern" + +#: AppEditors/FlatCAMExcEditor.py:1661 +msgid "Diameter to resize to." +msgstr "Durchmesser zur Größenänderung." + +#: AppEditors/FlatCAMExcEditor.py:1672 +msgid "Resize" +msgstr "Größe ändern" + +#: AppEditors/FlatCAMExcEditor.py:1674 +msgid "Resize drill(s)" +msgstr "Bohrer verkleinern" + +#: AppEditors/FlatCAMExcEditor.py:1699 AppGUI/MainGUI.py:1471 +#: AppGUI/MainGUI.py:4277 +msgid "Add Drill Array" +msgstr "Bohrer-Array hinzufügen" + +#: AppEditors/FlatCAMExcEditor.py:1701 +msgid "Add an array of drills (linear or circular array)" +msgstr "" +"Hinzufügen eines Arrays von Bohrern (lineares oder kreisförmiges Array)" + +#: AppEditors/FlatCAMExcEditor.py:1707 +msgid "" +"Select the type of drills array to create.\n" +"It can be Linear X(Y) or Circular" +msgstr "" +"Wählen Sie den Typ des zu erstellenden Bohrfelds aus.\n" +"Es kann lineares X (Y) oder rund sein" + +#: AppEditors/FlatCAMExcEditor.py:1710 AppEditors/FlatCAMExcEditor.py:1924 +#: AppEditors/FlatCAMGrbEditor.py:2773 +msgid "Linear" +msgstr "Linear" + +#: AppEditors/FlatCAMExcEditor.py:1711 AppEditors/FlatCAMExcEditor.py:1925 +#: AppEditors/FlatCAMGrbEditor.py:2774 AppGUI/ObjectUI.py:316 +#: AppGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py:52 +#: AppGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py:149 +#: AppGUI/preferences/tools/Tools2FiducialsPrefGroupUI.py:107 +#: AppGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:52 +#: AppGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:151 +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:61 +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:70 +#: AppTools/ToolExtractDrills.py:78 AppTools/ToolExtractDrills.py:201 +#: AppTools/ToolFiducials.py:220 AppTools/ToolNCC.py:221 +#: AppTools/ToolPaint.py:203 AppTools/ToolPunchGerber.py:89 +#: AppTools/ToolPunchGerber.py:229 +msgid "Circular" +msgstr "Kreisförmig" + +#: AppEditors/FlatCAMExcEditor.py:1719 +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:68 +msgid "Nr of drills" +msgstr "Anzahl der Bohrer" + +#: AppEditors/FlatCAMExcEditor.py:1720 +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:70 +msgid "Specify how many drills to be in the array." +msgstr "Geben Sie an, wie viele Drills im Array enthalten sein sollen." + +#: AppEditors/FlatCAMExcEditor.py:1738 AppEditors/FlatCAMExcEditor.py:1788 +#: AppEditors/FlatCAMExcEditor.py:1860 AppEditors/FlatCAMExcEditor.py:1953 +#: AppEditors/FlatCAMExcEditor.py:2004 AppEditors/FlatCAMGrbEditor.py:1571 +#: AppEditors/FlatCAMGrbEditor.py:2802 AppEditors/FlatCAMGrbEditor.py:2851 +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:178 +msgid "Direction" +msgstr "Richtung" + +#: AppEditors/FlatCAMExcEditor.py:1740 AppEditors/FlatCAMExcEditor.py:1955 +#: AppEditors/FlatCAMGrbEditor.py:2804 +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:86 +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:234 +#: AppGUI/preferences/gerber/GerberEditorPrefGroupUI.py:122 +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 "" +"Richtung, auf die das lineare Array ausgerichtet ist:\n" +"- 'X' - horizontale Achse\n" +"- 'Y' - vertikale Achse oder\n" +"- 'Winkel' - ein benutzerdefinierter Winkel für die Neigung des Arrays" + +#: AppEditors/FlatCAMExcEditor.py:1747 AppEditors/FlatCAMExcEditor.py:1869 +#: AppEditors/FlatCAMExcEditor.py:1962 AppEditors/FlatCAMGrbEditor.py:2811 +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:92 +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:187 +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:240 +#: AppGUI/preferences/gerber/GerberEditorPrefGroupUI.py:128 +#: AppGUI/preferences/tools/ToolsFilmPrefGroupUI.py:208 +#: AppTools/ToolFilm.py:239 +msgid "X" +msgstr "X" + +#: AppEditors/FlatCAMExcEditor.py:1748 AppEditors/FlatCAMExcEditor.py:1870 +#: AppEditors/FlatCAMExcEditor.py:1963 AppEditors/FlatCAMGrbEditor.py:2812 +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:93 +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:188 +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:241 +#: AppGUI/preferences/gerber/GerberEditorPrefGroupUI.py:129 +#: AppGUI/preferences/tools/ToolsFilmPrefGroupUI.py:209 +#: AppTools/ToolFilm.py:240 +msgid "Y" +msgstr "Y" + +#: AppEditors/FlatCAMExcEditor.py:1749 AppEditors/FlatCAMExcEditor.py:1766 +#: AppEditors/FlatCAMExcEditor.py:1800 AppEditors/FlatCAMExcEditor.py:1871 +#: AppEditors/FlatCAMExcEditor.py:1875 AppEditors/FlatCAMExcEditor.py:1964 +#: AppEditors/FlatCAMExcEditor.py:1982 AppEditors/FlatCAMExcEditor.py:2016 +#: AppEditors/FlatCAMGrbEditor.py:2813 AppEditors/FlatCAMGrbEditor.py:2830 +#: AppEditors/FlatCAMGrbEditor.py:2866 +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:94 +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:113 +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:189 +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:194 +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:242 +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:263 +#: AppGUI/preferences/gerber/GerberEditorPrefGroupUI.py:130 +#: AppGUI/preferences/gerber/GerberEditorPrefGroupUI.py:148 +#: AppGUI/preferences/tools/ToolsTransformPrefGroupUI.py:53 +#: AppTools/ToolDistance.py:120 AppTools/ToolDistanceMin.py:68 +#: AppTools/ToolTransform.py:60 +msgid "Angle" +msgstr "Winkel" + +#: AppEditors/FlatCAMExcEditor.py:1753 AppEditors/FlatCAMExcEditor.py:1968 +#: AppEditors/FlatCAMGrbEditor.py:2817 +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:100 +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:248 +#: AppGUI/preferences/gerber/GerberEditorPrefGroupUI.py:136 +msgid "Pitch" +msgstr "Abstand" + +#: AppEditors/FlatCAMExcEditor.py:1755 AppEditors/FlatCAMExcEditor.py:1970 +#: AppEditors/FlatCAMGrbEditor.py:2819 +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:102 +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:250 +#: AppGUI/preferences/gerber/GerberEditorPrefGroupUI.py:138 +msgid "Pitch = Distance between elements of the array." +msgstr "Abstand = Abstand zwischen Elementen des Arrays." + +#: AppEditors/FlatCAMExcEditor.py:1768 AppEditors/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 "" +"Winkel, bei dem das lineare Feld platziert wird.\n" +"Die Genauigkeit beträgt maximal 2 Dezimalstellen.\n" +"Der Mindestwert beträgt -360 Grad.\n" +"Maximalwert ist: 360.00 Grad." + +#: AppEditors/FlatCAMExcEditor.py:1789 AppEditors/FlatCAMExcEditor.py:2005 +#: AppEditors/FlatCAMGrbEditor.py:2853 +msgid "" +"Direction for circular array.Can be CW = clockwise or CCW = counter " +"clockwise." +msgstr "" +"Richtung für kreisförmige Anordnung. Kann CW = Uhrzeigersinn oder CCW = " +"Gegenuhrzeigersinn sein." + +#: AppEditors/FlatCAMExcEditor.py:1796 AppEditors/FlatCAMExcEditor.py:2012 +#: AppEditors/FlatCAMGrbEditor.py:2861 +#: AppGUI/preferences/excellon/ExcellonAdvOptPrefGroupUI.py:129 +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:136 +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:286 +#: AppGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:142 +#: AppGUI/preferences/gerber/GerberEditorPrefGroupUI.py:170 +msgid "CW" +msgstr "CW" + +#: AppEditors/FlatCAMExcEditor.py:1797 AppEditors/FlatCAMExcEditor.py:2013 +#: AppEditors/FlatCAMGrbEditor.py:2862 +#: AppGUI/preferences/excellon/ExcellonAdvOptPrefGroupUI.py:130 +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:137 +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:287 +#: AppGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:143 +#: AppGUI/preferences/gerber/GerberEditorPrefGroupUI.py:171 +msgid "CCW" +msgstr "CCW" + +#: AppEditors/FlatCAMExcEditor.py:1801 AppEditors/FlatCAMExcEditor.py:2017 +#: AppEditors/FlatCAMGrbEditor.py:2868 +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:115 +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:145 +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:265 +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:295 +#: AppGUI/preferences/gerber/GerberEditorPrefGroupUI.py:150 +#: AppGUI/preferences/gerber/GerberEditorPrefGroupUI.py:179 +msgid "Angle at which each element in circular array is placed." +msgstr "" +"Winkel, um den jedes Element in einer kreisförmigen Anordnung platziert wird." + +#: AppEditors/FlatCAMExcEditor.py:1835 +msgid "Slot Parameters" +msgstr "Schlitze-Parameter" + +#: AppEditors/FlatCAMExcEditor.py:1837 +msgid "" +"Parameters for adding a slot (hole with oval shape)\n" +"either single or as an part of an array." +msgstr "" +"Parameter zum Hinzufügen eines Schlitzes (Loch mit ovaler Form)\n" +"entweder einzeln oder als Teil eines Arrays." + +#: AppEditors/FlatCAMExcEditor.py:1846 +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:162 +#: AppGUI/preferences/tools/ToolsCornersPrefGroupUI.py:56 +#: AppTools/ToolCorners.py:127 AppTools/ToolProperties.py:559 +msgid "Length" +msgstr "Länge" + +#: AppEditors/FlatCAMExcEditor.py:1848 +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:164 +msgid "Length = The length of the slot." +msgstr "Länge = Die Länge des Schlitzes." + +#: AppEditors/FlatCAMExcEditor.py:1862 +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:180 +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 "" +"Richtung, in die der Steckplatz ausgerichtet ist:\n" +"- 'X' - horizontale Achse\n" +"- 'Y' - vertikale Achse oder\n" +"- 'Winkel' - Ein benutzerdefinierter Winkel für die Schlitzneigung" + +#: AppEditors/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 "" +"Winkel, in dem der Schlitz platziert ist.\n" +"Die Genauigkeit beträgt maximal 2 Dezimalstellen.\n" +"Der Mindestwert beträgt: -360 Grad.\n" +"Maximaler Wert ist: 360.00 Grad." + +#: AppEditors/FlatCAMExcEditor.py:1910 +msgid "Slot Array Parameters" +msgstr "Schlitzes Array-Parameter" + +#: AppEditors/FlatCAMExcEditor.py:1912 +msgid "Parameters for the array of slots (linear or circular array)" +msgstr "" +"Parameter für das Array von Schlitzes (lineares oder kreisförmiges Array)" + +#: AppEditors/FlatCAMExcEditor.py:1921 +msgid "" +"Select the type of slot array to create.\n" +"It can be Linear X(Y) or Circular" +msgstr "" +"Wählen Sie den Typ des zu erstellenden Slot-Arrays.\n" +"Es kann ein lineares X (Y) oder ein kreisförmiges sein" + +#: AppEditors/FlatCAMExcEditor.py:1933 +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:219 +msgid "Nr of slots" +msgstr "Anzahl der Slots" + +#: AppEditors/FlatCAMExcEditor.py:1934 +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:221 +msgid "Specify how many slots to be in the array." +msgstr "Geben Sie an, wie viele Steckplätze sich im Array befinden sollen." + +#: AppEditors/FlatCAMExcEditor.py:2452 AppObjects/FlatCAMExcellon.py:423 +msgid "Total Drills" +msgstr "Bohrungen insgesamt" + +#: AppEditors/FlatCAMExcEditor.py:2484 AppObjects/FlatCAMExcellon.py:454 +msgid "Total Slots" +msgstr "Schlitz insgesamt" + +#: AppEditors/FlatCAMExcEditor.py:2559 AppEditors/FlatCAMGeoEditor.py:1075 +#: AppEditors/FlatCAMGeoEditor.py:1116 AppEditors/FlatCAMGeoEditor.py:1144 +#: AppEditors/FlatCAMGeoEditor.py:1172 AppEditors/FlatCAMGeoEditor.py:1216 +#: AppEditors/FlatCAMGeoEditor.py:1251 AppEditors/FlatCAMGeoEditor.py:1279 +#: AppObjects/FlatCAMGeometry.py:656 AppObjects/FlatCAMGeometry.py:1090 +#: AppObjects/FlatCAMGeometry.py:1830 AppObjects/FlatCAMGeometry.py:2480 +#: AppTools/ToolNCC.py:1498 AppTools/ToolPaint.py:1248 +#: AppTools/ToolPaint.py:1419 AppTools/ToolSolderPaste.py:883 +#: AppTools/ToolSolderPaste.py:956 +msgid "Wrong value format entered, use a number." +msgstr "Falsches Wertformat eingegeben, eine Zahl verwenden." + +#: AppEditors/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 "" +"Werkzeug bereits in der ursprünglichen oder tatsächlichen Werkzeugliste.\n" +"Speichern Sie Excellon und bearbeiten Sie es erneut, wenn Sie dieses Tool " +"hinzufügen müssen. " + +#: AppEditors/FlatCAMExcEditor.py:2579 AppGUI/MainGUI.py:3285 +msgid "Added new tool with dia" +msgstr "Neues Werkzeug mit Durchmesser hinzugefügt" + +#: AppEditors/FlatCAMExcEditor.py:2612 +msgid "Select a tool in Tool Table" +msgstr "Wählen Sie ein Werkzeug in der Werkzeugtabelle aus" + +#: AppEditors/FlatCAMExcEditor.py:2642 +msgid "Deleted tool with diameter" +msgstr "Gelöschtes Werkzeug mit Durchmesser" + +#: AppEditors/FlatCAMExcEditor.py:2790 +msgid "Done. Tool edit completed." +msgstr "Erledigt. Werkzeugbearbeitung abgeschlossen." + +#: AppEditors/FlatCAMExcEditor.py:3327 +msgid "There are no Tools definitions in the file. Aborting Excellon creation." +msgstr "" +"Die Datei enthält keine Werkzeugdefinitionen. Abbruch der Excellon-" +"Erstellung." + +#: AppEditors/FlatCAMExcEditor.py:3331 +msgid "An internal error has ocurred. See Shell.\n" +msgstr "" +"Ein interner Fehler ist aufgetreten. Siehe Shell.\n" +"\n" + +#: AppEditors/FlatCAMExcEditor.py:3336 +msgid "Creating Excellon." +msgstr "Excellon erstellen." + +#: AppEditors/FlatCAMExcEditor.py:3348 +msgid "Excellon editing finished." +msgstr "Excellon-Bearbeitung abgeschlossen." + +#: AppEditors/FlatCAMExcEditor.py:3365 +msgid "Cancelled. There is no Tool/Drill selected" +msgstr "Abgebrochen. Es ist kein Werkzeug / Bohrer ausgewählt" + +#: AppEditors/FlatCAMExcEditor.py:3599 AppEditors/FlatCAMExcEditor.py:3607 +#: AppEditors/FlatCAMGeoEditor.py:4341 AppEditors/FlatCAMGeoEditor.py:4355 +#: AppEditors/FlatCAMGrbEditor.py:1085 AppEditors/FlatCAMGrbEditor.py:1202 +#: AppEditors/FlatCAMGrbEditor.py:1488 AppEditors/FlatCAMGrbEditor.py:1757 +#: AppEditors/FlatCAMGrbEditor.py:4595 AppEditors/FlatCAMGrbEditor.py:4610 +#: AppGUI/MainGUI.py:2638 AppGUI/MainGUI.py:2650 +#: AppTools/ToolAlignObjects.py:393 AppTools/ToolAlignObjects.py:415 +#: App_Main.py:4899 App_Main.py:5053 +msgid "Done." +msgstr "Fertig." + +#: AppEditors/FlatCAMExcEditor.py:3982 +msgid "Done. Drill(s) deleted." +msgstr "Erledigt. Bohrer gelöscht." + +#: AppEditors/FlatCAMExcEditor.py:4055 AppEditors/FlatCAMExcEditor.py:4065 +#: AppEditors/FlatCAMGrbEditor.py:5041 +msgid "Click on the circular array Center position" +msgstr "Klicken Sie auf die kreisförmige Anordnung in der Mitte" + +#: AppEditors/FlatCAMGeoEditor.py:84 +msgid "Buffer distance:" +msgstr "Pufferabstand:" + +#: AppEditors/FlatCAMGeoEditor.py:85 +msgid "Buffer corner:" +msgstr "Pufferecke:" + +#: AppEditors/FlatCAMGeoEditor.py:87 +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 "" +"Es gibt 3 Arten von Ecken:\n" +"- 'Rund': Die Ecke wird für den Außenpuffer abgerundet.\n" +"- 'Quadrat:' Die Ecke wird für den äußeren Puffer in einem spitzen Winkel " +"getroffen.\n" +"- 'Abgeschrägt:' Die Ecke ist eine Linie, die die Features, die sich in der " +"Ecke treffen, direkt verbindet" + +#: AppEditors/FlatCAMGeoEditor.py:93 AppEditors/FlatCAMGrbEditor.py:2629 +msgid "Round" +msgstr "Runden" + +#: AppEditors/FlatCAMGeoEditor.py:94 AppEditors/FlatCAMGrbEditor.py:2630 +#: AppGUI/ObjectUI.py:1370 AppGUI/ObjectUI.py:2204 +#: AppGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:217 +#: AppGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py:68 +#: AppGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py:175 +#: AppGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:68 +#: AppGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:177 +#: AppGUI/preferences/tools/Tools2QRCodePrefGroupUI.py:143 +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:327 +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:291 +#: AppTools/ToolExtractDrills.py:94 AppTools/ToolExtractDrills.py:227 +#: AppTools/ToolNCC.py:583 AppTools/ToolPaint.py:526 +#: AppTools/ToolPunchGerber.py:105 AppTools/ToolPunchGerber.py:255 +#: AppTools/ToolQRCode.py:198 +msgid "Square" +msgstr "Quadrat" + +#: AppEditors/FlatCAMGeoEditor.py:95 AppEditors/FlatCAMGrbEditor.py:2631 +msgid "Beveled" +msgstr "Abgeschrägt" + +#: AppEditors/FlatCAMGeoEditor.py:102 +msgid "Buffer Interior" +msgstr "Pufferinnenraum" + +#: AppEditors/FlatCAMGeoEditor.py:104 +msgid "Buffer Exterior" +msgstr "Puffer außen" + +#: AppEditors/FlatCAMGeoEditor.py:110 +msgid "Full Buffer" +msgstr "Voller Puffer" + +#: AppEditors/FlatCAMGeoEditor.py:131 AppEditors/FlatCAMGeoEditor.py:3016 +#: AppGUI/MainGUI.py:4187 +#: AppGUI/preferences/gerber/GerberEditorPrefGroupUI.py:190 +msgid "Buffer Tool" +msgstr "Pufferwerkzeug" + +#: AppEditors/FlatCAMGeoEditor.py:143 AppEditors/FlatCAMGeoEditor.py:160 +#: AppEditors/FlatCAMGeoEditor.py:177 AppEditors/FlatCAMGeoEditor.py:3035 +#: AppEditors/FlatCAMGeoEditor.py:3063 AppEditors/FlatCAMGeoEditor.py:3091 +#: AppEditors/FlatCAMGrbEditor.py:5094 +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 " +"versuchen Sie es erneut." + +#: AppEditors/FlatCAMGeoEditor.py:241 +msgid "Font" +msgstr "Schrift" + +#: AppEditors/FlatCAMGeoEditor.py:322 AppGUI/MainGUI.py:1409 +msgid "Text" +msgstr "Text" + +#: AppEditors/FlatCAMGeoEditor.py:348 +msgid "Text Tool" +msgstr "Textwerkzeug" + +#: AppEditors/FlatCAMGeoEditor.py:404 AppGUI/MainGUI.py:513 +#: AppGUI/MainGUI.py:1156 AppGUI/ObjectUI.py:818 AppGUI/ObjectUI.py:1764 +#: AppObjects/FlatCAMExcellon.py:821 AppObjects/FlatCAMExcellon.py:1163 +#: AppObjects/FlatCAMGeometry.py:816 AppTools/ToolNCC.py:331 +#: AppTools/ToolNCC.py:797 AppTools/ToolPaint.py:313 AppTools/ToolPaint.py:766 +msgid "Tool" +msgstr "Werkzeug" + +#: AppEditors/FlatCAMGeoEditor.py:438 AppGUI/ObjectUI.py:364 +#: AppGUI/preferences/gerber/GerberOptPrefGroupUI.py:43 +msgid "Tool dia" +msgstr "Werkzeugdurchmesser" + +#: AppEditors/FlatCAMGeoEditor.py:440 +msgid "Diameter of the tool to be used in the operation." +msgstr "Durchmesser des im Betrieb zu verwendenden Werkzeugs." + +#: AppEditors/FlatCAMGeoEditor.py:486 +msgid "" +"Algorithm to paint the polygons:\n" +"- Standard: Fixed step inwards.\n" +"- Seed-based: Outwards from seed.\n" +"- Line-based: Parallel lines." +msgstr "" +"Algorithmus zum Malen der Polygone:\n" +"- Standard: Schritt nach innen behoben.\n" +"- Samenbasiert: Aus dem Samen heraus.\n" +"- Linienbasiert: Parallele Linien." + +#: AppEditors/FlatCAMGeoEditor.py:505 +msgid "Connect:" +msgstr "Verbinden:" + +#: AppEditors/FlatCAMGeoEditor.py:515 +msgid "Contour:" +msgstr "Kontur:" + +#: AppEditors/FlatCAMGeoEditor.py:528 AppGUI/MainGUI.py:1413 +msgid "Paint" +msgstr "Malen" + +#: AppEditors/FlatCAMGeoEditor.py:546 AppGUI/MainGUI.py:917 +#: AppGUI/MainGUI.py:1879 AppGUI/ObjectUI.py:2269 AppTools/ToolPaint.py:42 +#: AppTools/ToolPaint.py:737 +msgid "Paint Tool" +msgstr "Werkzeug Malen" + +#: AppEditors/FlatCAMGeoEditor.py:582 AppEditors/FlatCAMGeoEditor.py:1054 +#: AppEditors/FlatCAMGeoEditor.py:3023 AppEditors/FlatCAMGeoEditor.py:3051 +#: AppEditors/FlatCAMGeoEditor.py:3079 AppEditors/FlatCAMGeoEditor.py:4494 +#: AppEditors/FlatCAMGrbEditor.py:5745 +msgid "Cancelled. No shape selected." +msgstr "Abgebrochen. Keine Form ausgewählt." + +#: AppEditors/FlatCAMGeoEditor.py:595 AppEditors/FlatCAMGeoEditor.py:3041 +#: AppEditors/FlatCAMGeoEditor.py:3069 AppEditors/FlatCAMGeoEditor.py:3097 +#: AppGUI/preferences/geometry/GeometryGenPrefGroupUI.py:59 +#: AppTools/ToolProperties.py:117 AppTools/ToolProperties.py:162 +msgid "Tools" +msgstr "Werkzeuge" + +#: AppEditors/FlatCAMGeoEditor.py:606 AppEditors/FlatCAMGeoEditor.py:990 +#: AppEditors/FlatCAMGrbEditor.py:5284 AppEditors/FlatCAMGrbEditor.py:5681 +#: AppGUI/MainGUI.py:938 AppGUI/MainGUI.py:1900 AppTools/ToolTransform.py:460 +msgid "Transform Tool" +msgstr "Werkzeug Umwandeln" + +#: AppEditors/FlatCAMGeoEditor.py:607 AppEditors/FlatCAMGeoEditor.py:672 +#: AppEditors/FlatCAMGrbEditor.py:5285 AppEditors/FlatCAMGrbEditor.py:5350 +#: AppGUI/preferences/tools/ToolsTransformPrefGroupUI.py:45 +#: AppTools/ToolTransform.py:24 AppTools/ToolTransform.py:466 +msgid "Rotate" +msgstr "Drehen" + +#: AppEditors/FlatCAMGeoEditor.py:608 AppEditors/FlatCAMGrbEditor.py:5286 +#: AppTools/ToolTransform.py:25 +msgid "Skew/Shear" +msgstr "Neigung/Schere" + +#: AppEditors/FlatCAMGeoEditor.py:609 AppEditors/FlatCAMGrbEditor.py:2678 +#: AppEditors/FlatCAMGrbEditor.py:5287 AppGUI/MainGUI.py:1058 +#: AppGUI/MainGUI.py:1456 AppGUI/MainGUI.py:2020 AppGUI/MainGUI.py:4399 +#: AppGUI/ObjectUI.py:125 +#: AppGUI/preferences/tools/ToolsTransformPrefGroupUI.py:95 +#: AppTools/ToolTransform.py:26 +msgid "Scale" +msgstr "Skalieren" + +#: AppEditors/FlatCAMGeoEditor.py:610 AppEditors/FlatCAMGrbEditor.py:5288 +#: AppTools/ToolTransform.py:27 +msgid "Mirror (Flip)" +msgstr "Spiegeln (Flip)" + +#: AppEditors/FlatCAMGeoEditor.py:624 AppEditors/FlatCAMGrbEditor.py:5302 +#: AppGUI/MainGUI.py:849 AppGUI/MainGUI.py:1813 +msgid "Editor" +msgstr "Editor" + +#: AppEditors/FlatCAMGeoEditor.py:656 AppEditors/FlatCAMGrbEditor.py:5334 +msgid "Angle:" +msgstr "Winkel:" + +#: AppEditors/FlatCAMGeoEditor.py:658 AppEditors/FlatCAMGrbEditor.py:5336 +#: AppGUI/preferences/tools/ToolsTransformPrefGroupUI.py:55 +#: AppTools/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 "" +"Drehwinkel in Grad.\n" +"Float-Nummer zwischen -360 und 359.\n" +"Positive Zahlen für CW-Bewegung.\n" +"Negative Zahlen für CCW-Bewegung." + +#: AppEditors/FlatCAMGeoEditor.py:674 AppEditors/FlatCAMGrbEditor.py:5352 +msgid "" +"Rotate the selected shape(s).\n" +"The point of reference is the middle of\n" +"the bounding box for all selected shapes." +msgstr "" +"Die ausgewählten Formen drehen.\n" +"Der Bezugspunkt ist die Mitte von\n" +"der Begrenzungsrahmen für alle ausgewählten Formen." + +#: AppEditors/FlatCAMGeoEditor.py:697 AppEditors/FlatCAMGrbEditor.py:5375 +msgid "Angle X:" +msgstr "Winkel X:" + +#: AppEditors/FlatCAMGeoEditor.py:699 AppEditors/FlatCAMGeoEditor.py:719 +#: AppEditors/FlatCAMGrbEditor.py:5377 AppEditors/FlatCAMGrbEditor.py:5397 +#: AppGUI/preferences/tools/ToolsTransformPrefGroupUI.py:74 +#: AppGUI/preferences/tools/ToolsTransformPrefGroupUI.py:88 +#: AppTools/ToolCalibration.py:505 AppTools/ToolCalibration.py:518 +msgid "" +"Angle for Skew action, in degrees.\n" +"Float number between -360 and 359." +msgstr "" +"Winkel für die Schräglage in Grad.\n" +"Float-Nummer zwischen -360 und 359." + +#: AppEditors/FlatCAMGeoEditor.py:710 AppEditors/FlatCAMGrbEditor.py:5388 +#: AppTools/ToolTransform.py:467 +msgid "Skew X" +msgstr "Neigung X" + +#: AppEditors/FlatCAMGeoEditor.py:712 AppEditors/FlatCAMGeoEditor.py:732 +#: AppEditors/FlatCAMGrbEditor.py:5390 AppEditors/FlatCAMGrbEditor.py:5410 +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 "" +"Schrägstellung/Scherung der ausgewählten Form(en).\n" +"Der Bezugspunkt ist die Mitte von\n" +"der Begrenzungsrahmen für alle ausgewählten Formen." + +#: AppEditors/FlatCAMGeoEditor.py:717 AppEditors/FlatCAMGrbEditor.py:5395 +msgid "Angle Y:" +msgstr "Winkel Y:" + +#: AppEditors/FlatCAMGeoEditor.py:730 AppEditors/FlatCAMGrbEditor.py:5408 +#: AppTools/ToolTransform.py:468 +msgid "Skew Y" +msgstr "Neigung Y" + +#: AppEditors/FlatCAMGeoEditor.py:758 AppEditors/FlatCAMGrbEditor.py:5436 +msgid "Factor X:" +msgstr "Faktor X:" + +#: AppEditors/FlatCAMGeoEditor.py:760 AppEditors/FlatCAMGrbEditor.py:5438 +#: AppTools/ToolCalibration.py:469 +msgid "Factor for Scale action over X axis." +msgstr "Faktor für die Skalierungsaktion über der X-Achse." + +#: AppEditors/FlatCAMGeoEditor.py:770 AppEditors/FlatCAMGrbEditor.py:5448 +#: AppTools/ToolTransform.py:469 +msgid "Scale X" +msgstr "Maßstab X" + +#: AppEditors/FlatCAMGeoEditor.py:772 AppEditors/FlatCAMGeoEditor.py:791 +#: AppEditors/FlatCAMGrbEditor.py:5450 AppEditors/FlatCAMGrbEditor.py:5469 +msgid "" +"Scale the selected shape(s).\n" +"The point of reference depends on \n" +"the Scale reference checkbox state." +msgstr "" +"Skalieren Sie die ausgewählten Formen.\n" +"Der Bezugspunkt hängt von ab\n" +"das Kontrollkästchen Skalenreferenz." + +#: AppEditors/FlatCAMGeoEditor.py:777 AppEditors/FlatCAMGrbEditor.py:5455 +msgid "Factor Y:" +msgstr "Faktor Y:" + +#: AppEditors/FlatCAMGeoEditor.py:779 AppEditors/FlatCAMGrbEditor.py:5457 +#: AppTools/ToolCalibration.py:481 +msgid "Factor for Scale action over Y axis." +msgstr "Faktor für die Skalierungsaktion über der Y-Achse." + +#: AppEditors/FlatCAMGeoEditor.py:789 AppEditors/FlatCAMGrbEditor.py:5467 +#: AppTools/ToolTransform.py:470 +msgid "Scale Y" +msgstr "Maßstab Y" + +#: AppEditors/FlatCAMGeoEditor.py:798 AppEditors/FlatCAMGrbEditor.py:5476 +#: AppGUI/preferences/tools/ToolsTransformPrefGroupUI.py:124 +#: AppTools/ToolTransform.py:189 +msgid "Link" +msgstr "Verknüpfung" + +#: AppEditors/FlatCAMGeoEditor.py:800 AppEditors/FlatCAMGrbEditor.py:5478 +msgid "" +"Scale the selected shape(s)\n" +"using the Scale Factor X for both axis." +msgstr "" +"Skalieren der ausgewählten Form (en)\n" +"Verwenden des Skalierungsfaktors X für beide Achsen." + +#: AppEditors/FlatCAMGeoEditor.py:806 AppEditors/FlatCAMGrbEditor.py:5484 +#: AppGUI/preferences/tools/ToolsTransformPrefGroupUI.py:132 +#: AppTools/ToolTransform.py:196 +msgid "Scale Reference" +msgstr "Skalenreferenz" + +#: AppEditors/FlatCAMGeoEditor.py:808 AppEditors/FlatCAMGrbEditor.py:5486 +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 "" +"Skalieren der ausgewählten Form (en)\n" +"unter Verwendung der Ursprungsreferenz, wenn geprüft\n" +"und die Mitte der größten Begrenzungsbox\n" +"der ausgewählten Formen, wenn nicht markiert." + +#: AppEditors/FlatCAMGeoEditor.py:836 AppEditors/FlatCAMGrbEditor.py:5515 +msgid "Value X:" +msgstr "Wert X:" + +#: AppEditors/FlatCAMGeoEditor.py:838 AppEditors/FlatCAMGrbEditor.py:5517 +msgid "Value for Offset action on X axis." +msgstr "Wert für die Offset-Aktion auf der X-Achse." + +#: AppEditors/FlatCAMGeoEditor.py:848 AppEditors/FlatCAMGrbEditor.py:5527 +#: AppTools/ToolTransform.py:473 +msgid "Offset X" +msgstr "Versatz X" + +#: AppEditors/FlatCAMGeoEditor.py:850 AppEditors/FlatCAMGeoEditor.py:870 +#: AppEditors/FlatCAMGrbEditor.py:5529 AppEditors/FlatCAMGrbEditor.py:5549 +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 "" +"Versetzt die ausgewählten Formen.\n" +"Der Bezugspunkt ist die Mitte von\n" +"der Begrenzungsrahmen für alle ausgewählten Formen.\n" + +#: AppEditors/FlatCAMGeoEditor.py:856 AppEditors/FlatCAMGrbEditor.py:5535 +msgid "Value Y:" +msgstr "Wert Y:" + +#: AppEditors/FlatCAMGeoEditor.py:858 AppEditors/FlatCAMGrbEditor.py:5537 +msgid "Value for Offset action on Y axis." +msgstr "Wert für die Offset-Aktion auf der Y-Achse." + +#: AppEditors/FlatCAMGeoEditor.py:868 AppEditors/FlatCAMGrbEditor.py:5547 +#: AppTools/ToolTransform.py:474 +msgid "Offset Y" +msgstr "Versatz Y" + +#: AppEditors/FlatCAMGeoEditor.py:899 AppEditors/FlatCAMGrbEditor.py:5578 +#: AppTools/ToolTransform.py:475 +msgid "Flip on X" +msgstr "Flip auf X" + +#: AppEditors/FlatCAMGeoEditor.py:901 AppEditors/FlatCAMGeoEditor.py:908 +#: AppEditors/FlatCAMGrbEditor.py:5580 AppEditors/FlatCAMGrbEditor.py:5587 +msgid "" +"Flip the selected shape(s) over the X axis.\n" +"Does not create a new shape." +msgstr "" +"Kippen Sie die ausgewählte Form (en) über die X-Achse.\n" +"Erzeugt keine neue Form." + +#: AppEditors/FlatCAMGeoEditor.py:906 AppEditors/FlatCAMGrbEditor.py:5585 +#: AppTools/ToolTransform.py:476 +msgid "Flip on Y" +msgstr "Flip auf Y" + +#: AppEditors/FlatCAMGeoEditor.py:914 AppEditors/FlatCAMGrbEditor.py:5593 +msgid "Ref Pt" +msgstr "Ref. Pt" + +#: AppEditors/FlatCAMGeoEditor.py:916 AppEditors/FlatCAMGrbEditor.py:5595 +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 "" +"Die ausgewählten Formen umdrehen\n" +"um den Punkt im Eingabefeld.\n" +"\n" +"Die Punktkoordinaten können mit erfasst werden\n" +"Klicken Sie mit der linken Maustaste auf die Leinwand\n" +"Shift Taste.\n" +"Klicken Sie dann auf die Schaltfläche Hinzufügen, um die Koordinaten " +"einzufügen.\n" +"Oder geben Sie die Koordinaten im Format (x, y) in ein\n" +"Punkt-Eingabefeld und klicken Sie auf X (Y) drehen" + +#: AppEditors/FlatCAMGeoEditor.py:928 AppEditors/FlatCAMGrbEditor.py:5607 +msgid "Point:" +msgstr "Punkt:" + +#: AppEditors/FlatCAMGeoEditor.py:930 AppEditors/FlatCAMGrbEditor.py:5609 +#: AppTools/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 "" +"Koordinaten im Format (x, y), die als Referenz für die Spiegelung verwendet " +"werden.\n" +"Das 'x' in (x, y) wird verwendet, wenn Sie bei X und\n" +"Das 'y' in (x, y) wird verwendet, wenn Flip auf Y verwendet wird." + +#: AppEditors/FlatCAMGeoEditor.py:938 AppEditors/FlatCAMGrbEditor.py:2581 +#: AppEditors/FlatCAMGrbEditor.py:5619 AppGUI/ObjectUI.py:1697 +#: AppTools/ToolDblSided.py:192 AppTools/ToolDblSided.py:425 +#: AppTools/ToolNCC.py:294 AppTools/ToolNCC.py:631 AppTools/ToolPaint.py:276 +#: AppTools/ToolPaint.py:675 AppTools/ToolSolderPaste.py:122 +#: AppTools/ToolSolderPaste.py:597 AppTools/ToolTransform.py:478 +#: App_Main.py:5843 +msgid "Add" +msgstr "Hinzufügen" + +#: AppEditors/FlatCAMGeoEditor.py:940 AppEditors/FlatCAMGrbEditor.py:5621 +#: AppTools/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 "" +"Die Punktkoordinaten können mit erfasst werden\n" +"Klicken Sie mit der linken Maustaste auf die Leinwand\n" +"Shift Taste. Klicken Sie dann auf die Schaltfläche Hinzufügen, um sie " +"einzufügen." + +#: AppEditors/FlatCAMGeoEditor.py:1303 AppEditors/FlatCAMGrbEditor.py:5929 +msgid "No shape selected. Please Select a shape to rotate!" +msgstr "Keine Form ausgewählt Bitte wählen Sie eine Form zum Drehen aus!" + +#: AppEditors/FlatCAMGeoEditor.py:1306 AppEditors/FlatCAMGrbEditor.py:5932 +#: AppTools/ToolTransform.py:679 +msgid "Appying Rotate" +msgstr "Anwenden Drehen" + +#: AppEditors/FlatCAMGeoEditor.py:1332 AppEditors/FlatCAMGrbEditor.py:5964 +msgid "Done. Rotate completed." +msgstr "Erledigt. Drehen abgeschlossen." + +#: AppEditors/FlatCAMGeoEditor.py:1334 +msgid "Rotation action was not executed" +msgstr "Rotationsaktion wurde nicht ausgeführt" + +#: AppEditors/FlatCAMGeoEditor.py:1353 AppEditors/FlatCAMGrbEditor.py:5983 +msgid "No shape selected. Please Select a shape to flip!" +msgstr "Keine Form ausgewählt. Bitte wählen Sie eine Form zum Kippen!" + +#: AppEditors/FlatCAMGeoEditor.py:1356 AppEditors/FlatCAMGrbEditor.py:5986 +#: AppTools/ToolTransform.py:728 +msgid "Applying Flip" +msgstr "Flip anwenden" + +#: AppEditors/FlatCAMGeoEditor.py:1385 AppEditors/FlatCAMGrbEditor.py:6024 +#: AppTools/ToolTransform.py:769 +msgid "Flip on the Y axis done" +msgstr "Spiegeln Sie die Y-Achse bereit" + +#: AppEditors/FlatCAMGeoEditor.py:1389 AppEditors/FlatCAMGrbEditor.py:6033 +#: AppTools/ToolTransform.py:778 +msgid "Flip on the X axis done" +msgstr "Spiegeln Sie die X-Achse bereit" + +#: AppEditors/FlatCAMGeoEditor.py:1397 +msgid "Flip action was not executed" +msgstr "Spiegeln-Aktion wurde nicht ausgeführt" + +#: AppEditors/FlatCAMGeoEditor.py:1415 AppEditors/FlatCAMGrbEditor.py:6053 +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!" + +#: AppEditors/FlatCAMGeoEditor.py:1418 AppEditors/FlatCAMGrbEditor.py:6056 +#: AppTools/ToolTransform.py:801 +msgid "Applying Skew" +msgstr "Schräglauf anwenden" + +#: AppEditors/FlatCAMGeoEditor.py:1441 AppEditors/FlatCAMGrbEditor.py:6090 +msgid "Skew on the X axis done" +msgstr "Schrägstellung auf der X-Achse erfolgt" + +#: AppEditors/FlatCAMGeoEditor.py:1443 AppEditors/FlatCAMGrbEditor.py:6092 +msgid "Skew on the Y axis done" +msgstr "Schrägstellung auf der Y-Achse erfolgt" + +#: AppEditors/FlatCAMGeoEditor.py:1446 +msgid "Skew action was not executed" +msgstr "Die Versatzaktion wurde nicht ausgeführt" + +#: AppEditors/FlatCAMGeoEditor.py:1468 AppEditors/FlatCAMGrbEditor.py:6114 +msgid "No shape selected. Please Select a shape to scale!" +msgstr "Keine Form ausgewählt. Bitte wählen Sie eine zu skalierende Form!" + +#: AppEditors/FlatCAMGeoEditor.py:1471 AppEditors/FlatCAMGrbEditor.py:6117 +#: AppTools/ToolTransform.py:847 +msgid "Applying Scale" +msgstr "Maßstab anwenden" + +#: AppEditors/FlatCAMGeoEditor.py:1503 AppEditors/FlatCAMGrbEditor.py:6154 +msgid "Scale on the X axis done" +msgstr "Skalieren auf der X-Achse erledigt" + +#: AppEditors/FlatCAMGeoEditor.py:1505 AppEditors/FlatCAMGrbEditor.py:6156 +msgid "Scale on the Y axis done" +msgstr "Skalieren auf der Y-Achse erledigt" + +#: AppEditors/FlatCAMGeoEditor.py:1507 +msgid "Scale action was not executed" +msgstr "Skalierungsaktion wurde nicht ausgeführt" + +#: AppEditors/FlatCAMGeoEditor.py:1522 AppEditors/FlatCAMGrbEditor.py:6173 +msgid "No shape selected. Please Select a shape to offset!" +msgstr "Keine Form ausgewählt. Bitte wählen Sie eine zu versetzende Form!" + +#: AppEditors/FlatCAMGeoEditor.py:1525 AppEditors/FlatCAMGrbEditor.py:6176 +#: AppTools/ToolTransform.py:897 +msgid "Applying Offset" +msgstr "Offsetdruck anwenden" + +#: AppEditors/FlatCAMGeoEditor.py:1535 AppEditors/FlatCAMGrbEditor.py:6197 +msgid "Offset on the X axis done" +msgstr "Versatz auf der X-Achse erfolgt" + +#: AppEditors/FlatCAMGeoEditor.py:1537 AppEditors/FlatCAMGrbEditor.py:6199 +msgid "Offset on the Y axis done" +msgstr "Versatz auf der Y-Achse erfolgt" + +#: AppEditors/FlatCAMGeoEditor.py:1540 +msgid "Offset action was not executed" +msgstr "Offsetaktion wurde nicht ausgeführt" + +#: AppEditors/FlatCAMGeoEditor.py:1544 AppEditors/FlatCAMGrbEditor.py:6206 +msgid "Rotate ..." +msgstr "Drehen ..." + +#: AppEditors/FlatCAMGeoEditor.py:1545 AppEditors/FlatCAMGeoEditor.py:1600 +#: AppEditors/FlatCAMGeoEditor.py:1617 AppEditors/FlatCAMGrbEditor.py:6207 +#: AppEditors/FlatCAMGrbEditor.py:6256 AppEditors/FlatCAMGrbEditor.py:6271 +msgid "Enter an Angle Value (degrees)" +msgstr "Geben Sie einen Winkelwert (Grad) ein" + +#: AppEditors/FlatCAMGeoEditor.py:1554 AppEditors/FlatCAMGrbEditor.py:6215 +msgid "Geometry shape rotate done" +msgstr "Geometrieform drehen fertig" + +#: AppEditors/FlatCAMGeoEditor.py:1558 AppEditors/FlatCAMGrbEditor.py:6218 +msgid "Geometry shape rotate cancelled" +msgstr "Geometrieform drehen abgebrochen" + +#: AppEditors/FlatCAMGeoEditor.py:1563 AppEditors/FlatCAMGrbEditor.py:6223 +msgid "Offset on X axis ..." +msgstr "Versatz auf der X-Achse ..." + +#: AppEditors/FlatCAMGeoEditor.py:1564 AppEditors/FlatCAMGeoEditor.py:1583 +#: AppEditors/FlatCAMGrbEditor.py:6224 AppEditors/FlatCAMGrbEditor.py:6241 +msgid "Enter a distance Value" +msgstr "Geben Sie einen Abstandswert ein" + +#: AppEditors/FlatCAMGeoEditor.py:1573 AppEditors/FlatCAMGrbEditor.py:6232 +msgid "Geometry shape offset on X axis done" +msgstr "Geometrieformversatz auf der X-Achse erfolgt" + +#: AppEditors/FlatCAMGeoEditor.py:1577 AppEditors/FlatCAMGrbEditor.py:6235 +msgid "Geometry shape offset X cancelled" +msgstr "[WARNING_NOTCL] Geometrieformversatz X abgebrochen" + +#: AppEditors/FlatCAMGeoEditor.py:1582 AppEditors/FlatCAMGrbEditor.py:6240 +msgid "Offset on Y axis ..." +msgstr "Versatz auf der Y-Achse ..." + +#: AppEditors/FlatCAMGeoEditor.py:1592 AppEditors/FlatCAMGrbEditor.py:6249 +msgid "Geometry shape offset on Y axis done" +msgstr "Geometrieformversatz auf Y-Achse erfolgt" + +#: AppEditors/FlatCAMGeoEditor.py:1596 +msgid "Geometry shape offset on Y axis canceled" +msgstr "Geometrieformversatz auf Y-Achse erfolgt" + +#: AppEditors/FlatCAMGeoEditor.py:1599 AppEditors/FlatCAMGrbEditor.py:6255 +msgid "Skew on X axis ..." +msgstr "Neigung auf der X-Achse ..." + +#: AppEditors/FlatCAMGeoEditor.py:1609 AppEditors/FlatCAMGrbEditor.py:6264 +msgid "Geometry shape skew on X axis done" +msgstr "Geometrieformversatz auf X-Achse" + +#: AppEditors/FlatCAMGeoEditor.py:1613 +msgid "Geometry shape skew on X axis canceled" +msgstr "Geometrieformversatz auf X-Achse" + +#: AppEditors/FlatCAMGeoEditor.py:1616 AppEditors/FlatCAMGrbEditor.py:6270 +msgid "Skew on Y axis ..." +msgstr "Neigung auf der Y-Achse ..." + +#: AppEditors/FlatCAMGeoEditor.py:1626 AppEditors/FlatCAMGrbEditor.py:6279 +msgid "Geometry shape skew on Y axis done" +msgstr "Geometrieformversatz auf Y-Achse erfolgt" + +#: AppEditors/FlatCAMGeoEditor.py:1630 +msgid "Geometry shape skew on Y axis canceled" +msgstr "Geometrieformversatz auf Y-Achse erfolgt" + +#: AppEditors/FlatCAMGeoEditor.py:2007 AppEditors/FlatCAMGeoEditor.py:2078 +#: AppEditors/FlatCAMGrbEditor.py:1435 AppEditors/FlatCAMGrbEditor.py:1513 +msgid "Click on Center point ..." +msgstr "Klicken Sie auf Mittelpunkt." + +#: AppEditors/FlatCAMGeoEditor.py:2020 AppEditors/FlatCAMGrbEditor.py:1445 +msgid "Click on Perimeter point to complete ..." +msgstr "Klicken Sie auf Umfangspunkt, um den Vorgang abzuschließen." + +#: AppEditors/FlatCAMGeoEditor.py:2052 +msgid "Done. Adding Circle completed." +msgstr "Erledigt. Hinzufügen des Kreises abgeschlossen." + +#: AppEditors/FlatCAMGeoEditor.py:2106 AppEditors/FlatCAMGrbEditor.py:1546 +msgid "Click on Start point ..." +msgstr "Klicken Sie auf Startpunkt ..." + +#: AppEditors/FlatCAMGeoEditor.py:2108 AppEditors/FlatCAMGrbEditor.py:1548 +msgid "Click on Point3 ..." +msgstr "Klicken Sie auf Punkt3 ..." + +#: AppEditors/FlatCAMGeoEditor.py:2110 AppEditors/FlatCAMGrbEditor.py:1550 +msgid "Click on Stop point ..." +msgstr "Klicken Sie auf Haltepunkt ..." + +#: AppEditors/FlatCAMGeoEditor.py:2115 AppEditors/FlatCAMGrbEditor.py:1555 +msgid "Click on Stop point to complete ..." +msgstr "Klicken Sie auf Stopp, um den Vorgang abzuschließen." + +#: AppEditors/FlatCAMGeoEditor.py:2117 AppEditors/FlatCAMGrbEditor.py:1557 +msgid "Click on Point2 to complete ..." +msgstr "Klicken Sie auf Punkt2, um den Vorgang abzuschließen." + +#: AppEditors/FlatCAMGeoEditor.py:2119 AppEditors/FlatCAMGrbEditor.py:1559 +msgid "Click on Center point to complete ..." +msgstr "Klicken Sie auf Mittelpunkt, um den Vorgang abzuschließen." + +#: AppEditors/FlatCAMGeoEditor.py:2131 +#, python-format +msgid "Direction: %s" +msgstr "Richtung: %s" + +#: AppEditors/FlatCAMGeoEditor.py:2145 AppEditors/FlatCAMGrbEditor.py:1585 +msgid "Mode: Start -> Stop -> Center. Click on Start point ..." +msgstr "Modus: Start -> Stopp -> Zentrieren. Klicken Sie auf Startpunkt ..." + +#: AppEditors/FlatCAMGeoEditor.py:2148 AppEditors/FlatCAMGrbEditor.py:1588 +msgid "Mode: Point1 -> Point3 -> Point2. Click on Point1 ..." +msgstr "Modus: Punkt 1 -> Punkt 3 -> Punkt 2. Klicken Sie auf Punkt1 ..." + +#: AppEditors/FlatCAMGeoEditor.py:2151 AppEditors/FlatCAMGrbEditor.py:1591 +msgid "Mode: Center -> Start -> Stop. Click on Center point ..." +msgstr "Modus: Mitte -> Start -> Stopp. Klicken Sie auf Mittelpunkt." + +#: AppEditors/FlatCAMGeoEditor.py:2292 +msgid "Done. Arc completed." +msgstr "Erledigt. Arc abgeschlossen." + +#: AppEditors/FlatCAMGeoEditor.py:2323 AppEditors/FlatCAMGeoEditor.py:2396 +msgid "Click on 1st corner ..." +msgstr "Klicken Sie auf die 1. Ecke ..." + +#: AppEditors/FlatCAMGeoEditor.py:2335 +msgid "Click on opposite corner to complete ..." +msgstr "" +"Klicken Sie auf die gegenüberliegende Ecke, um den Vorgang abzuschließen." + +#: AppEditors/FlatCAMGeoEditor.py:2365 +msgid "Done. Rectangle completed." +msgstr "Erledigt. Rechteck fertiggestellt." + +#: AppEditors/FlatCAMGeoEditor.py:2409 AppTools/ToolNCC.py:1734 +#: AppTools/ToolPaint.py:1627 Common.py:303 +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." + +#: AppEditors/FlatCAMGeoEditor.py:2440 +msgid "Done. Polygon completed." +msgstr "Erledigt. Polygon fertiggestellt." + +#: AppEditors/FlatCAMGeoEditor.py:2454 AppEditors/FlatCAMGeoEditor.py:2519 +#: AppEditors/FlatCAMGrbEditor.py:1111 AppEditors/FlatCAMGrbEditor.py:1322 +msgid "Backtracked one point ..." +msgstr "Einen Punkt zurückverfolgt ..." + +#: AppEditors/FlatCAMGeoEditor.py:2497 +msgid "Done. Path completed." +msgstr "Getan. Pfad abgeschlossen." + +#: AppEditors/FlatCAMGeoEditor.py:2656 +msgid "No shape selected. Select a shape to explode" +msgstr "Keine Form ausgewählt. Wählen Sie eine Form zum Auflösen aus" + +#: AppEditors/FlatCAMGeoEditor.py:2689 +msgid "Done. Polygons exploded into lines." +msgstr "Getan. Polygone explodierten in Linien." + +#: AppEditors/FlatCAMGeoEditor.py:2721 +msgid "MOVE: No shape selected. Select a shape to move" +msgstr "Bewegen: Keine Form ausgewählt. Wähle eine Form zum Bewegen aus" + +#: AppEditors/FlatCAMGeoEditor.py:2724 AppEditors/FlatCAMGeoEditor.py:2744 +msgid " MOVE: Click on reference point ..." +msgstr " Bewegen: Referenzpunkt anklicken ..." + +#: AppEditors/FlatCAMGeoEditor.py:2729 +msgid " Click on destination point ..." +msgstr " Klicken Sie auf den Zielpunkt ..." + +#: AppEditors/FlatCAMGeoEditor.py:2769 +msgid "Done. Geometry(s) Move completed." +msgstr "Erledigt. Geometrie(n) Bewegung abgeschlossen." + +#: AppEditors/FlatCAMGeoEditor.py:2902 +msgid "Done. Geometry(s) Copy completed." +msgstr "Erledigt. Geometrie(n) Kopieren abgeschlossen." + +#: AppEditors/FlatCAMGeoEditor.py:2933 AppEditors/FlatCAMGrbEditor.py:897 +msgid "Click on 1st point ..." +msgstr "Klicken Sie auf den 1. Punkt ..." + +#: AppEditors/FlatCAMGeoEditor.py:2957 +msgid "" +"Font not supported. Only Regular, Bold, Italic and BoldItalic are supported. " +"Error" +msgstr "" +"Schrift wird nicht unterstützt. Es werden nur Regular, Bold, Italic und " +"BoldItalic unterstützt. Error" + +#: AppEditors/FlatCAMGeoEditor.py:2965 +msgid "No text to add." +msgstr "Kein Text zum Hinzufügen." + +#: AppEditors/FlatCAMGeoEditor.py:2975 +msgid " Done. Adding Text completed." +msgstr " Erledigt. Hinzufügen von Text abgeschlossen." + +#: AppEditors/FlatCAMGeoEditor.py:3012 +msgid "Create buffer geometry ..." +msgstr "Puffergeometrie erstellen ..." + +#: AppEditors/FlatCAMGeoEditor.py:3047 AppEditors/FlatCAMGrbEditor.py:5138 +msgid "Done. Buffer Tool completed." +msgstr "Erledigt. Pufferwerkzeug abgeschlossen." + +#: AppEditors/FlatCAMGeoEditor.py:3075 +msgid "Done. Buffer Int Tool completed." +msgstr "Erledigt. Innenpufferwerkzeug abgeschlossen." + +#: AppEditors/FlatCAMGeoEditor.py:3103 +msgid "Done. Buffer Ext Tool completed." +msgstr "Erledigt. Außenpufferwerkzeug abgeschlossen." + +#: AppEditors/FlatCAMGeoEditor.py:3152 AppEditors/FlatCAMGrbEditor.py:2151 +msgid "Select a shape to act as deletion area ..." +msgstr "Wählen Sie eine Form als Löschbereich aus ..." + +#: AppEditors/FlatCAMGeoEditor.py:3154 AppEditors/FlatCAMGeoEditor.py:3180 +#: AppEditors/FlatCAMGeoEditor.py:3186 AppEditors/FlatCAMGrbEditor.py:2153 +msgid "Click to pick-up the erase shape..." +msgstr "Klicken Sie, um die Löschform aufzunehmen ..." + +#: AppEditors/FlatCAMGeoEditor.py:3190 AppEditors/FlatCAMGrbEditor.py:2212 +msgid "Click to erase ..." +msgstr "Klicken zum Löschen ..." + +#: AppEditors/FlatCAMGeoEditor.py:3219 AppEditors/FlatCAMGrbEditor.py:2245 +msgid "Done. Eraser tool action completed." +msgstr "Erledigt. Radiergummi-Aktion abgeschlossen." + +#: AppEditors/FlatCAMGeoEditor.py:3269 +msgid "Create Paint geometry ..." +msgstr "Malen geometrie erstellen ..." + +#: AppEditors/FlatCAMGeoEditor.py:3282 AppEditors/FlatCAMGrbEditor.py:2408 +msgid "Shape transformations ..." +msgstr "Formtransformationen ..." + +#: AppEditors/FlatCAMGeoEditor.py:3338 +#: AppGUI/preferences/geometry/GeometryEditorPrefGroupUI.py:27 +msgid "Geometry Editor" +msgstr "Geo-Editor" + +#: AppEditors/FlatCAMGeoEditor.py:3344 AppEditors/FlatCAMGrbEditor.py:2486 +#: AppEditors/FlatCAMGrbEditor.py:3943 AppGUI/ObjectUI.py:263 +#: AppGUI/ObjectUI.py:1599 AppGUI/ObjectUI.py:2456 AppTools/ToolCutOut.py:95 +msgid "Type" +msgstr "Typ" + +#: AppEditors/FlatCAMGeoEditor.py:3344 AppGUI/ObjectUI.py:218 +#: AppGUI/ObjectUI.py:742 AppGUI/ObjectUI.py:1535 AppGUI/ObjectUI.py:2365 +#: AppGUI/ObjectUI.py:2669 AppGUI/ObjectUI.py:2736 +#: AppTools/ToolCalibration.py:234 AppTools/ToolFiducials.py:73 +msgid "Name" +msgstr "Name" + +#: AppEditors/FlatCAMGeoEditor.py:3596 +msgid "Ring" +msgstr "Ring" + +#: AppEditors/FlatCAMGeoEditor.py:3598 +msgid "Line" +msgstr "Linie" + +#: AppEditors/FlatCAMGeoEditor.py:3600 AppGUI/MainGUI.py:1403 +#: AppGUI/ObjectUI.py:1371 AppGUI/ObjectUI.py:2205 +#: AppGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:218 +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:328 +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:292 +#: AppTools/ToolNCC.py:584 AppTools/ToolPaint.py:527 +msgid "Polygon" +msgstr "Polygon" + +#: AppEditors/FlatCAMGeoEditor.py:3602 +msgid "Multi-Line" +msgstr "Mehrzeilig" + +#: AppEditors/FlatCAMGeoEditor.py:3604 +msgid "Multi-Polygon" +msgstr "Multi-Polygon" + +#: AppEditors/FlatCAMGeoEditor.py:3611 +msgid "Geo Elem" +msgstr "Geoelement" + +#: AppEditors/FlatCAMGeoEditor.py:4064 +msgid "Editing MultiGeo Geometry, tool" +msgstr "Bearbeiten von MultiGeo Geometry, Werkzeug" + +#: AppEditors/FlatCAMGeoEditor.py:4066 +msgid "with diameter" +msgstr "mit Durchmesser" + +#: AppEditors/FlatCAMGeoEditor.py:4501 AppGUI/MainGUI.py:2967 +#: AppGUI/MainGUI.py:3013 AppGUI/MainGUI.py:3031 AppGUI/MainGUI.py:3175 +#: AppGUI/MainGUI.py:3214 AppGUI/MainGUI.py:3226 AppGUI/MainGUI.py:3243 +msgid "Click on target point." +msgstr "Klicken Sie auf den Zielpunkt." + +#: AppEditors/FlatCAMGeoEditor.py:4815 AppEditors/FlatCAMGeoEditor.py:4850 +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." + +#: AppEditors/FlatCAMGeoEditor.py:4936 AppEditors/FlatCAMGeoEditor.py:5040 +msgid "" +"Negative buffer value is not accepted. Use Buffer interior to generate an " +"'inside' shape" +msgstr "" +"Negativer Pufferwert wird nicht akzeptiert. Verwenden Sie den " +"Pufferinnenraum, um eine Innenform zu erzeugen" + +#: AppEditors/FlatCAMGeoEditor.py:4946 AppEditors/FlatCAMGeoEditor.py:4999 +#: AppEditors/FlatCAMGeoEditor.py:5049 +msgid "Nothing selected for buffering." +msgstr "Nichts ist für die Pufferung ausgewählt." + +#: AppEditors/FlatCAMGeoEditor.py:4951 AppEditors/FlatCAMGeoEditor.py:5003 +#: AppEditors/FlatCAMGeoEditor.py:5054 +msgid "Invalid distance for buffering." +msgstr "Ungültige Entfernung zum Puffern." + +#: AppEditors/FlatCAMGeoEditor.py:4975 AppEditors/FlatCAMGeoEditor.py:5074 +msgid "Failed, the result is empty. Choose a different buffer value." +msgstr "" +"Fehlgeschlagen, das Ergebnis ist leer. Wählen Sie einen anderen Pufferwert." + +#: AppEditors/FlatCAMGeoEditor.py:4986 +msgid "Full buffer geometry created." +msgstr "Volle Puffergeometrie erstellt." + +#: AppEditors/FlatCAMGeoEditor.py:4992 +msgid "Negative buffer value is not accepted." +msgstr "Negativer Pufferwert wird nicht akzeptiert." + +#: AppEditors/FlatCAMGeoEditor.py:5023 +msgid "Failed, the result is empty. Choose a smaller buffer value." +msgstr "" +"Fehlgeschlagen, das Ergebnis ist leer. Wählen Sie einen kleineren Pufferwert." + +#: AppEditors/FlatCAMGeoEditor.py:5033 +msgid "Interior buffer geometry created." +msgstr "Innere Puffergeometrie erstellt." + +#: AppEditors/FlatCAMGeoEditor.py:5084 +msgid "Exterior buffer geometry created." +msgstr "Außenpuffergeometrie erstellt." + +#: AppEditors/FlatCAMGeoEditor.py:5090 +#, python-format +msgid "Could not do Paint. Overlap value has to be less than 100%%." +msgstr "Konnte nicht Malen. Der Überlappungswert muss kleiner als 100 %% sein." + +#: AppEditors/FlatCAMGeoEditor.py:5097 +msgid "Nothing selected for painting." +msgstr "Nichts zum Malen ausgewählt." + +#: AppEditors/FlatCAMGeoEditor.py:5103 +msgid "Invalid value for" +msgstr "Ungültiger Wert für" + +#: AppEditors/FlatCAMGeoEditor.py:5162 +msgid "" +"Could not do Paint. Try a different combination of parameters. Or a " +"different method of Paint" +msgstr "" +"Konnte nicht malen. Probieren Sie eine andere Kombination von Parametern " +"aus. Oder eine andere Malmethode" + +#: AppEditors/FlatCAMGeoEditor.py:5173 +msgid "Paint done." +msgstr "Malen fertig." + +#: AppEditors/FlatCAMGrbEditor.py:211 +msgid "To add an Pad first select a aperture in Aperture Table" +msgstr "" +"Um ein Pad hinzuzufügen, wählen Sie zunächst eine Blende in der Aperture " +"Table aus" + +#: AppEditors/FlatCAMGrbEditor.py:218 AppEditors/FlatCAMGrbEditor.py:418 +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." + +#: AppEditors/FlatCAMGrbEditor.py:371 AppEditors/FlatCAMGrbEditor.py:684 +msgid "" +"Incompatible aperture type. Select an aperture with type 'C', 'R' or 'O'." +msgstr "" +"Inkompatibler Blendentyp. Wählen Sie eine Blende mit dem Typ 'C', 'R' oder " +"'O'." + +#: AppEditors/FlatCAMGrbEditor.py:383 +msgid "Done. Adding Pad completed." +msgstr "Erledigt. Hinzufügen von Pad abgeschlossen." + +#: AppEditors/FlatCAMGrbEditor.py:410 +msgid "To add an Pad Array first select a aperture in Aperture Table" +msgstr "" +"Um ein Pad-Array hinzuzufügen, wählen Sie zunächst eine Blende in der " +"Aperture-Tabelle aus" + +#: AppEditors/FlatCAMGrbEditor.py:490 +msgid "Click on the Pad Circular Array Start position" +msgstr "Klicken Sie auf die Startposition des Pad-Kreis-Arrays" + +#: AppEditors/FlatCAMGrbEditor.py:710 +msgid "Too many Pads for the selected spacing angle." +msgstr "Zu viele Pad für den ausgewählten Abstandswinkel." + +#: AppEditors/FlatCAMGrbEditor.py:733 +msgid "Done. Pad Array added." +msgstr "Erledigt. Pad Array hinzugefügt." + +#: AppEditors/FlatCAMGrbEditor.py:758 +msgid "Select shape(s) and then click ..." +msgstr "Wählen Sie die Form (en) aus und klicken Sie dann auf ..." + +#: AppEditors/FlatCAMGrbEditor.py:770 +msgid "Failed. Nothing selected." +msgstr "Gescheitert. Nichts ausgewählt." + +#: AppEditors/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." + +#: AppEditors/FlatCAMGrbEditor.py:840 +msgid "Done. Poligonize completed." +msgstr "Erledigt. Poligonize abgeschlossen." + +#: AppEditors/FlatCAMGrbEditor.py:895 AppEditors/FlatCAMGrbEditor.py:1128 +#: AppEditors/FlatCAMGrbEditor.py:1152 +msgid "Corner Mode 1: 45 degrees ..." +msgstr "Eckmodus 1: 45 Grad ..." + +#: AppEditors/FlatCAMGrbEditor.py:907 AppEditors/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." + +#: AppEditors/FlatCAMGrbEditor.py:1116 AppEditors/FlatCAMGrbEditor.py:1149 +msgid "Corner Mode 2: Reverse 45 degrees ..." +msgstr "Eckmodus 2: 45 Grad umkehren ..." + +#: AppEditors/FlatCAMGrbEditor.py:1119 AppEditors/FlatCAMGrbEditor.py:1146 +msgid "Corner Mode 3: 90 degrees ..." +msgstr "Eckmodus 3: 90 Grad ..." + +#: AppEditors/FlatCAMGrbEditor.py:1122 AppEditors/FlatCAMGrbEditor.py:1143 +msgid "Corner Mode 4: Reverse 90 degrees ..." +msgstr "Eckmodus 4: Um 90 Grad umkehren ..." + +#: AppEditors/FlatCAMGrbEditor.py:1125 AppEditors/FlatCAMGrbEditor.py:1140 +msgid "Corner Mode 5: Free angle ..." +msgstr "Eckmodus 5: Freiwinkel ..." + +#: AppEditors/FlatCAMGrbEditor.py:1182 AppEditors/FlatCAMGrbEditor.py:1358 +#: AppEditors/FlatCAMGrbEditor.py:1397 +msgid "Track Mode 1: 45 degrees ..." +msgstr "Spurmodus 1: 45 Grad ..." + +#: AppEditors/FlatCAMGrbEditor.py:1338 AppEditors/FlatCAMGrbEditor.py:1392 +msgid "Track Mode 2: Reverse 45 degrees ..." +msgstr "Spurmodus 2: 45 Grad umkehren ..." + +#: AppEditors/FlatCAMGrbEditor.py:1343 AppEditors/FlatCAMGrbEditor.py:1387 +msgid "Track Mode 3: 90 degrees ..." +msgstr "Spurmodus 3: 90 Grad ..." + +#: AppEditors/FlatCAMGrbEditor.py:1348 AppEditors/FlatCAMGrbEditor.py:1382 +msgid "Track Mode 4: Reverse 90 degrees ..." +msgstr "Spurmodus 4: Um 90 Grad umkehren ..." + +#: AppEditors/FlatCAMGrbEditor.py:1353 AppEditors/FlatCAMGrbEditor.py:1377 +msgid "Track Mode 5: Free angle ..." +msgstr "Spurmodus 5: Freiwinkel ..." + +#: AppEditors/FlatCAMGrbEditor.py:1778 +msgid "Scale the selected Gerber apertures ..." +msgstr "Skalieren Sie die ausgewählten Gerber-Öffnungen ..." + +#: AppEditors/FlatCAMGrbEditor.py:1820 +msgid "Buffer the selected apertures ..." +msgstr "Die ausgewählten Öffnungen puffern ..." + +#: AppEditors/FlatCAMGrbEditor.py:1862 +msgid "Mark polygon areas in the edited Gerber ..." +msgstr "Markiere Polygonbereiche im bearbeiteten Gerber ..." + +#: AppEditors/FlatCAMGrbEditor.py:1928 +msgid "Nothing selected to move" +msgstr "Nichts zum Bewegen ausgewählt" + +#: AppEditors/FlatCAMGrbEditor.py:2053 +msgid "Done. Apertures Move completed." +msgstr "Erledigt. Öffnungsbewegung abgeschlossen." + +#: AppEditors/FlatCAMGrbEditor.py:2135 +msgid "Done. Apertures copied." +msgstr "Erledigt. Blende kopiert." + +#: AppEditors/FlatCAMGrbEditor.py:2453 AppGUI/MainGUI.py:1434 +#: AppGUI/preferences/gerber/GerberEditorPrefGroupUI.py:27 +msgid "Gerber Editor" +msgstr "Gerber-Editor" + +#: AppEditors/FlatCAMGrbEditor.py:2473 AppGUI/ObjectUI.py:228 +#: AppTools/ToolProperties.py:159 +msgid "Apertures" +msgstr "Öffnungen" + +#: AppEditors/FlatCAMGrbEditor.py:2475 AppGUI/ObjectUI.py:230 +msgid "Apertures Table for the Gerber Object." +msgstr "Blendentabelle für das Gerberobjekt." + +#: AppEditors/FlatCAMGrbEditor.py:2486 AppEditors/FlatCAMGrbEditor.py:3943 +#: AppGUI/ObjectUI.py:263 +msgid "Code" +msgstr "Code" + +#: AppEditors/FlatCAMGrbEditor.py:2486 AppEditors/FlatCAMGrbEditor.py:3943 +#: AppGUI/ObjectUI.py:263 +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:103 +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:167 +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:196 +#: AppGUI/preferences/tools/Tools2FiducialsPrefGroupUI.py:43 +#: AppTools/ToolCopperThieving.py:261 AppTools/ToolCopperThieving.py:301 +#: AppTools/ToolFiducials.py:156 +msgid "Size" +msgstr "Größe" + +#: AppEditors/FlatCAMGrbEditor.py:2486 AppEditors/FlatCAMGrbEditor.py:3943 +#: AppGUI/ObjectUI.py:263 +msgid "Dim" +msgstr "Maße" + +#: AppEditors/FlatCAMGrbEditor.py:2491 AppGUI/ObjectUI.py:267 +msgid "Index" +msgstr "Index" + +#: AppEditors/FlatCAMGrbEditor.py:2493 AppEditors/FlatCAMGrbEditor.py:2522 +#: AppGUI/ObjectUI.py:269 +msgid "Aperture Code" +msgstr "Öffnungscode" + +#: AppEditors/FlatCAMGrbEditor.py:2495 AppGUI/ObjectUI.py:271 +msgid "Type of aperture: circular, rectangle, macros etc" +msgstr "Öffnungsart: kreisförmig, rechteckig, Makros usw" + +#: AppEditors/FlatCAMGrbEditor.py:2497 AppGUI/ObjectUI.py:273 +msgid "Aperture Size:" +msgstr "Öffnungsgröße:" + +#: AppEditors/FlatCAMGrbEditor.py:2499 AppGUI/ObjectUI.py:275 +msgid "" +"Aperture Dimensions:\n" +" - (width, height) for R, O type.\n" +" - (dia, nVertices) for P type" +msgstr "" +"Blendenmaße:\n" +"  - (Breite, Höhe) für R, O-Typ.\n" +"  - (dia, nVertices) für P-Typ" + +#: AppEditors/FlatCAMGrbEditor.py:2523 +#: AppGUI/preferences/gerber/GerberEditorPrefGroupUI.py:58 +msgid "Code for the new aperture" +msgstr "Code für die neue Blende" + +#: AppEditors/FlatCAMGrbEditor.py:2532 +msgid "Aperture Size" +msgstr "Öffnungsgröße" + +#: AppEditors/FlatCAMGrbEditor.py:2534 +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 "" +"Größe für die neue Blende.\n" +"Wenn der Blendentyp 'R' oder 'O' ist, dann\n" +"Dieser Wert wird automatisch übernommen\n" +"berechnet als:\n" +"Quadrat (Breite ** 2 + Höhe ** 2)" + +#: AppEditors/FlatCAMGrbEditor.py:2548 +msgid "Aperture Type" +msgstr "Blendentyp" + +#: AppEditors/FlatCAMGrbEditor.py:2550 +msgid "" +"Select the type of new aperture. Can be:\n" +"C = circular\n" +"R = rectangular\n" +"O = oblong" +msgstr "" +"Wählen Sie den Typ der neuen Blende. Kann sein:\n" +"C = kreisförmig\n" +"R = rechteckig\n" +"O = länglich" + +#: AppEditors/FlatCAMGrbEditor.py:2561 +msgid "Aperture Dim" +msgstr "Öffnungsmaße" + +#: AppEditors/FlatCAMGrbEditor.py:2563 +msgid "" +"Dimensions for the new aperture.\n" +"Active only for rectangular apertures (type R).\n" +"The format is (width, height)" +msgstr "" +"Abmessungen für die neue Blende.\n" +"Aktiv nur für rechteckige Öffnungen (Typ R).\n" +"Das Format ist (Breite, Höhe)" + +#: AppEditors/FlatCAMGrbEditor.py:2572 +msgid "Add/Delete Aperture" +msgstr "Blende hinzufügen / löschen" + +#: AppEditors/FlatCAMGrbEditor.py:2574 +msgid "Add/Delete an aperture in the aperture table" +msgstr "Eine Blende in der Blendentabelle hinzufügen / löschen" + +#: AppEditors/FlatCAMGrbEditor.py:2583 +msgid "Add a new aperture to the aperture list." +msgstr "Fügen Sie der Blendenliste eine neue Blende hinzu." + +#: AppEditors/FlatCAMGrbEditor.py:2586 AppEditors/FlatCAMGrbEditor.py:2734 +#: AppGUI/MainGUI.py:753 AppGUI/MainGUI.py:1069 AppGUI/MainGUI.py:1485 +#: AppGUI/MainGUI.py:2030 AppGUI/MainGUI.py:4400 AppGUI/ObjectUI.py:1725 +#: AppObjects/FlatCAMGeometry.py:556 AppTools/ToolNCC.py:316 +#: AppTools/ToolNCC.py:637 AppTools/ToolPaint.py:298 AppTools/ToolPaint.py:681 +#: AppTools/ToolSolderPaste.py:128 AppTools/ToolSolderPaste.py:600 +#: App_Main.py:5845 +msgid "Delete" +msgstr "Löschen" + +#: AppEditors/FlatCAMGrbEditor.py:2588 +msgid "Delete a aperture in the aperture list" +msgstr "Löschen Sie eine Blende in der Blendenliste" + +#: AppEditors/FlatCAMGrbEditor.py:2605 +msgid "Buffer Aperture" +msgstr "Pufferblende" + +#: AppEditors/FlatCAMGrbEditor.py:2607 +msgid "Buffer a aperture in the aperture list" +msgstr "Puffern Sie eine Blende in der Blendenliste" + +#: AppEditors/FlatCAMGrbEditor.py:2620 +#: AppGUI/preferences/gerber/GerberEditorPrefGroupUI.py:194 +msgid "Buffer distance" +msgstr "Pufferabstand" + +#: AppEditors/FlatCAMGrbEditor.py:2621 +msgid "Buffer corner" +msgstr "Pufferecke" + +#: AppEditors/FlatCAMGrbEditor.py:2623 +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 "" +"Es gibt 3 Arten von Ecken:\n" +"- 'Kreis': Die Ecke ist abgerundet.\n" +"- 'Quadrat:' Die Ecke wird in einem spitzen Winkel getroffen.\n" +"- 'Abgeschrägt:' Die Ecke ist eine Linie, die die Features, die sich in der " +"Ecke treffen, direkt verbindet" + +#: AppEditors/FlatCAMGrbEditor.py:2638 AppGUI/MainGUI.py:1056 +#: AppGUI/MainGUI.py:1411 AppGUI/MainGUI.py:1454 AppGUI/MainGUI.py:2018 +#: AppGUI/MainGUI.py:4397 +#: AppGUI/preferences/tools/ToolsTransformPrefGroupUI.py:200 +#: AppTools/ToolTransform.py:29 +msgid "Buffer" +msgstr "Puffer" + +#: AppEditors/FlatCAMGrbEditor.py:2653 +msgid "Scale Aperture" +msgstr "Skalenöffnung" + +#: AppEditors/FlatCAMGrbEditor.py:2655 +msgid "Scale a aperture in the aperture list" +msgstr "Skalieren Sie eine Blende in der Blendenliste" + +#: AppEditors/FlatCAMGrbEditor.py:2663 +#: AppGUI/preferences/gerber/GerberEditorPrefGroupUI.py:209 +msgid "Scale factor" +msgstr "Skalierungsfaktor" + +#: AppEditors/FlatCAMGrbEditor.py:2665 +msgid "" +"The factor by which to scale the selected aperture.\n" +"Values can be between 0.0000 and 999.9999" +msgstr "" +"Der Faktor, um den die ausgewählte Blende skaliert werden soll.\n" +"Die Werte können zwischen 0,0000 und 999,9999 liegen" + +#: AppEditors/FlatCAMGrbEditor.py:2693 +msgid "Mark polygons" +msgstr "Polygone markieren" + +#: AppEditors/FlatCAMGrbEditor.py:2695 +msgid "Mark the polygon areas." +msgstr "Markieren Sie die Polygonbereiche." + +#: AppEditors/FlatCAMGrbEditor.py:2703 +msgid "Area UPPER threshold" +msgstr "Flächenobergrenze" + +#: AppEditors/FlatCAMGrbEditor.py:2705 +msgid "" +"The threshold value, all areas less than this are marked.\n" +"Can have a value between 0.0000 and 9999.9999" +msgstr "" +"Der Schwellenwert, alle Bereiche, die darunter liegen, sind markiert.\n" +"Kann einen Wert zwischen 0,0000 und 9999,9999 haben" + +#: AppEditors/FlatCAMGrbEditor.py:2712 +msgid "Area LOWER threshold" +msgstr "Bereichsuntergrenze" + +#: AppEditors/FlatCAMGrbEditor.py:2714 +msgid "" +"The threshold value, all areas more than this are marked.\n" +"Can have a value between 0.0000 and 9999.9999" +msgstr "" +"Mit dem Schwellwert sind alle Bereiche gekennzeichnet, die darüber " +"hinausgehen.\n" +"Kann einen Wert zwischen 0,0000 und 9999,9999 haben" + +#: AppEditors/FlatCAMGrbEditor.py:2728 +msgid "Mark" +msgstr "Kennzeichen" + +#: AppEditors/FlatCAMGrbEditor.py:2730 +msgid "Mark the polygons that fit within limits." +msgstr "Markieren Sie die Polygone, die in Grenzen passen." + +#: AppEditors/FlatCAMGrbEditor.py:2736 +msgid "Delete all the marked polygons." +msgstr "Löschen Sie alle markierten Polygone." + +#: AppEditors/FlatCAMGrbEditor.py:2742 +msgid "Clear all the markings." +msgstr "Alle Markierungen entfernen." + +#: AppEditors/FlatCAMGrbEditor.py:2762 AppGUI/MainGUI.py:1041 +#: AppGUI/MainGUI.py:2003 AppGUI/MainGUI.py:4397 +msgid "Add Pad Array" +msgstr "Pad-Array hinzufügen" + +#: AppEditors/FlatCAMGrbEditor.py:2764 +msgid "Add an array of pads (linear or circular array)" +msgstr "Hinzufügen eines Arrays von Pads (lineares oder kreisförmiges Array)" + +#: AppEditors/FlatCAMGrbEditor.py:2770 +msgid "" +"Select the type of pads array to create.\n" +"It can be Linear X(Y) or Circular" +msgstr "" +"Wählen Sie den zu erstellenden Pad-Array-Typ aus.\n" +"Es kann lineares X (Y) oder rund sein" + +#: AppEditors/FlatCAMGrbEditor.py:2781 +#: AppGUI/preferences/gerber/GerberEditorPrefGroupUI.py:95 +msgid "Nr of pads" +msgstr "Anzahl der Pads" + +#: AppEditors/FlatCAMGrbEditor.py:2783 +#: AppGUI/preferences/gerber/GerberEditorPrefGroupUI.py:97 +msgid "Specify how many pads to be in the array." +msgstr "Geben Sie an, wie viele Pads sich im Array befinden sollen." + +#: AppEditors/FlatCAMGrbEditor.py:2832 +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 "" +"Winkel, bei dem das lineare Array platziert wird.\n" +"Die Genauigkeit beträgt maximal 2 Dezimalstellen.\n" +"Der Mindestwert beträgt -359,99 Grad.\n" +"Maximalwert ist: 360.00 Grad." + +#: AppEditors/FlatCAMGrbEditor.py:3326 AppEditors/FlatCAMGrbEditor.py:3330 +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." + +#: AppEditors/FlatCAMGrbEditor.py:3366 +msgid "" +"Aperture dimensions value is missing or wrong format. Add it in format " +"(width, height) and retry." +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." + +#: AppEditors/FlatCAMGrbEditor.py:3379 +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." + +#: AppEditors/FlatCAMGrbEditor.py:3390 +msgid "Aperture already in the aperture table." +msgstr "Blende bereits in der Blendentabelle." + +#: AppEditors/FlatCAMGrbEditor.py:3397 +msgid "Added new aperture with code" +msgstr "Neue Blende mit Code hinzugefügt" + +#: AppEditors/FlatCAMGrbEditor.py:3429 +msgid " Select an aperture in Aperture Table" +msgstr " Wählen Sie in Blende Table eine Blende aus" + +#: AppEditors/FlatCAMGrbEditor.py:3437 +msgid "Select an aperture in Aperture Table -->" +msgstr "Wählen Sie in Blende Table eine Blende aus -->" + +#: AppEditors/FlatCAMGrbEditor.py:3451 +msgid "Deleted aperture with code" +msgstr "Blende mit Code gelöscht" + +#: AppEditors/FlatCAMGrbEditor.py:3519 +msgid "Dimensions need two float values separated by comma." +msgstr "Bemaßungen benötigen zwei durch Komma getrennte Gleitkommawerte." + +#: AppEditors/FlatCAMGrbEditor.py:3528 +msgid "Dimensions edited." +msgstr "Abmessungen bearbeitet." + +#: AppEditors/FlatCAMGrbEditor.py:4058 +msgid "Loading Gerber into Editor" +msgstr "Gerber File wird in den Editor geladen" + +#: AppEditors/FlatCAMGrbEditor.py:4186 +msgid "Setting up the UI" +msgstr "UI wird initialisiert" + +#: AppEditors/FlatCAMGrbEditor.py:4187 +#, fuzzy +#| msgid "Adding geometry finished. Preparing the GUI" +msgid "Adding geometry finished. Preparing the AppGUI" +msgstr "Geometrie wurde hinzugefügt. User Interface wird vorbereitet" + +#: AppEditors/FlatCAMGrbEditor.py:4196 +msgid "Finished loading the Gerber object into the editor." +msgstr "Gerber-Objekte wurde in den Editor geladen." + +#: AppEditors/FlatCAMGrbEditor.py:4335 +msgid "" +"There are no Aperture definitions in the file. Aborting Gerber creation." +msgstr "" +"Die Datei enthält keine Aperture-Definitionen. Abbruch der Gerber-Erstellung." + +#: AppEditors/FlatCAMGrbEditor.py:4338 AppObjects/AppObject.py:132 +#: AppObjects/FlatCAMGeometry.py:1775 AppParsers/ParseExcellon.py:896 +#: AppTools/ToolPcbWizard.py:432 App_Main.py:8619 App_Main.py:8683 +#: App_Main.py:8814 App_Main.py:8879 App_Main.py:9531 +msgid "An internal error has occurred. See shell.\n" +msgstr "Ein interner Fehler ist aufgetreten. Siehe Shell.\n" + +#: AppEditors/FlatCAMGrbEditor.py:4345 +msgid "Creating Gerber." +msgstr "Gerber erstellen." + +#: AppEditors/FlatCAMGrbEditor.py:4354 +msgid "Done. Gerber editing finished." +msgstr "Erledigt. Gerber-Bearbeitung beendet." + +#: AppEditors/FlatCAMGrbEditor.py:4372 +msgid "Cancelled. No aperture is selected" +msgstr "Abgebrochen. Es ist keine Blende ausgewählt" + +#: AppEditors/FlatCAMGrbEditor.py:4527 App_Main.py:6171 +msgid "Coordinates copied to clipboard." +msgstr "Koordinaten in die Zwischenablage kopiert." + +#: AppEditors/FlatCAMGrbEditor.py:4970 +msgid "Failed. No aperture geometry is selected." +msgstr "Gescheitert. Es ist keine Aperturgeometrie ausgewählt." + +#: AppEditors/FlatCAMGrbEditor.py:4979 AppEditors/FlatCAMGrbEditor.py:5250 +msgid "Done. Apertures geometry deleted." +msgstr "Fertig. Blendengeometrie gelöscht." + +#: AppEditors/FlatCAMGrbEditor.py:5122 +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." + +#: AppEditors/FlatCAMGrbEditor.py:5134 +msgid "Failed." +msgstr "Gescheitert." + +#: AppEditors/FlatCAMGrbEditor.py:5153 +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." + +#: AppEditors/FlatCAMGrbEditor.py:5185 +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." + +#: AppEditors/FlatCAMGrbEditor.py:5201 +msgid "Done. Scale Tool completed." +msgstr "Erledigt. Skalierungswerkzeug abgeschlossen." + +#: AppEditors/FlatCAMGrbEditor.py:5239 +msgid "Polygons marked." +msgstr "Polygone markiert." + +#: AppEditors/FlatCAMGrbEditor.py:5242 +msgid "No polygons were marked. None fit within the limits." +msgstr "Es wurden keine Polygone markiert. Keiner passt in die Grenzen." + +#: AppEditors/FlatCAMGrbEditor.py:5966 +msgid "Rotation action was not executed." +msgstr "Rotationsaktion wurde nicht ausgeführt." + +#: AppEditors/FlatCAMGrbEditor.py:6037 App_Main.py:5604 App_Main.py:5652 +msgid "Flip action was not executed." +msgstr "Flip-Aktion wurde nicht ausgeführt." + +#: AppEditors/FlatCAMGrbEditor.py:6094 +msgid "Skew action was not executed." +msgstr "Die Versatzaktion wurde nicht ausgeführt." + +#: AppEditors/FlatCAMGrbEditor.py:6159 +msgid "Scale action was not executed." +msgstr "Skalierungsaktion wurde nicht ausgeführt." + +#: AppEditors/FlatCAMGrbEditor.py:6202 +msgid "Offset action was not executed." +msgstr "Offsetaktion wurde nicht ausgeführt." + +#: AppEditors/FlatCAMGrbEditor.py:6252 +msgid "Geometry shape offset Y cancelled" +msgstr "Geometrieform-Versatz Y abgebrochen" + +#: AppEditors/FlatCAMGrbEditor.py:6267 +msgid "Geometry shape skew X cancelled" +msgstr "Geometrieformverzerren X abgebrochen" + +#: AppEditors/FlatCAMGrbEditor.py:6282 +msgid "Geometry shape skew Y cancelled" +msgstr "Geometrieformverzerren Y abgebrochen" + +#: AppEditors/FlatCAMTextEditor.py:74 +msgid "Print Preview" +msgstr "Druckvorschau" + +#: AppEditors/FlatCAMTextEditor.py:75 +msgid "Open a OS standard Preview Print window." +msgstr "" +"Öffnen Sie ein Standardfenster für die Druckvorschau des Betriebssystems." + +#: AppEditors/FlatCAMTextEditor.py:78 +msgid "Print Code" +msgstr "Code drucken" + +#: AppEditors/FlatCAMTextEditor.py:79 +msgid "Open a OS standard Print window." +msgstr "Öffnen Sie ein Betriebssystem-Standard-Druckfenster." + +#: AppEditors/FlatCAMTextEditor.py:81 +msgid "Find in Code" +msgstr "Im Code suchen" + +#: AppEditors/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." + +#: AppEditors/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." + +#: AppEditors/FlatCAMTextEditor.py:88 +msgid "Replace With" +msgstr "Ersetzen mit" + +#: AppEditors/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." + +#: AppEditors/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." + +#: AppEditors/FlatCAMTextEditor.py:95 AppGUI/ObjectUI.py:486 +#: AppGUI/ObjectUI.py:2349 AppGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:54 +#: AppGUI/preferences/gerber/GerberOptPrefGroupUI.py:88 +msgid "All" +msgstr "Alles" + +#: AppEditors/FlatCAMTextEditor.py:96 +msgid "" +"When checked it will replace all instances in the 'Find' box\n" +"with the text in the 'Replace' box.." +msgstr "" +"Wenn diese Option aktiviert ist, werden alle Instanzen im Feld \"Suchen\" " +"ersetzt\n" +"mit dem Text im Feld \"Ersetzen\" .." + +#: AppEditors/FlatCAMTextEditor.py:99 +msgid "Copy All" +msgstr "Kopiere alles" + +#: AppEditors/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." + +#: AppEditors/FlatCAMTextEditor.py:103 +msgid "Open Code" +msgstr "Code öffnen" + +#: AppEditors/FlatCAMTextEditor.py:104 +msgid "Will open a text file in the editor." +msgstr "Öffnet eine Textdatei im Editor." + +#: AppEditors/FlatCAMTextEditor.py:106 +msgid "Save Code" +msgstr "Code speichern" + +#: AppEditors/FlatCAMTextEditor.py:107 +msgid "Will save the text in the editor into a file." +msgstr "Speichert den Text im Editor in einer Datei." + +#: AppEditors/FlatCAMTextEditor.py:109 +msgid "Run Code" +msgstr "Code ausführen" + +#: AppEditors/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." + +#: AppEditors/FlatCAMTextEditor.py:184 +msgid "Open file" +msgstr "Datei öffnen" + +#: AppEditors/FlatCAMTextEditor.py:215 AppEditors/FlatCAMTextEditor.py:220 +msgid "Export Code ..." +msgstr "Code exportieren ..." + +#: AppEditors/FlatCAMTextEditor.py:272 AppObjects/FlatCAMCNCJob.py:955 +#: AppTools/ToolSolderPaste.py:1530 +msgid "No such file or directory" +msgstr "Keine solche Datei oder Ordner" + +#: AppEditors/FlatCAMTextEditor.py:284 AppObjects/FlatCAMCNCJob.py:969 +msgid "Saved to" +msgstr "Gespeichert in" + +#: AppEditors/FlatCAMTextEditor.py:334 +msgid "Code Editor content copied to clipboard ..." +msgstr "Code Editor Inhalt in die Zwischenablage kopiert ..." + +#: AppGUI/GUIElements.py:2540 +#: AppGUI/preferences/tools/ToolsFilmPrefGroupUI.py:180 +#: AppTools/ToolDblSided.py:173 AppTools/ToolDblSided.py:388 +#: AppTools/ToolFilm.py:202 +msgid "Reference" +msgstr "Referenz" + +#: AppGUI/GUIElements.py:2542 +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 "" +"Die Referenz kann sein:\n" +"- Absolut -> Der Bezugspunkt ist Punkt (0,0)\n" +"- Relativ -> Der Referenzpunkt ist die Mausposition vor dem Sprung" + +#: AppGUI/GUIElements.py:2547 +msgid "Abs" +msgstr "Abs" + +#: AppGUI/GUIElements.py:2548 +msgid "Relative" +msgstr "Relativ" + +#: AppGUI/GUIElements.py:2558 +msgid "Location" +msgstr "Ort" + +#: AppGUI/GUIElements.py:2560 +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 "" +"Der Standortwert ist ein Tupel (x, y).\n" +"Wenn die Referenz Absolut ist, befindet sich der Sprung an der Position (x, " +"y).\n" +"Wenn die Referenz relativ ist, befindet sich der Sprung in der Entfernung " +"(x, y)\n" +"vom aktuellen Mausstandort aus." + +#: AppGUI/GUIElements.py:2600 +msgid "Save Log" +msgstr "Protokoll speichern" + +#: AppGUI/GUIElements.py:2610 App_Main.py:2699 App_Main.py:3060 +msgid "Close" +msgstr "Schließen" + +#: AppGUI/GUIElements.py:2619 AppTools/ToolShell.py:278 +msgid "Type >help< to get started" +msgstr "Geben Sie> help Excellon Export." +msgstr "" +"Exportieren Exportiert ein Excellon-Objekt als Excellon-Datei.\n" +"Das Koordinatenformat, die Dateieinheiten und Nullen\n" +"werden in den Einstellungen -> Excellon Export.Excellon eingestellt ..." + +#: AppGUI/MainGUI.py:275 +msgid "Export &Gerber ..." +msgstr "Gerber exportieren ..." + +#: AppGUI/MainGUI.py:277 +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 "" +"Exportiert ein Gerber-Objekt als Gerber-Datei.\n" +"das Koordinatenformat, die Dateieinheiten und Nullen\n" +"werden in den Einstellungen -> Gerber Export eingestellt." + +#: AppGUI/MainGUI.py:287 +msgid "Backup" +msgstr "Sicherungskopie" + +#: AppGUI/MainGUI.py:292 +msgid "Import Preferences from file ..." +msgstr "Einstellungen aus Datei importieren ..." + +#: AppGUI/MainGUI.py:298 +msgid "Export Preferences to file ..." +msgstr "Einstellungen in Datei exportieren ..." + +#: AppGUI/MainGUI.py:306 AppGUI/preferences/PreferencesUIManager.py:1176 +msgid "Save Preferences" +msgstr "Einstellungen speichern" + +#: AppGUI/MainGUI.py:312 AppGUI/MainGUI.py:3989 +msgid "Print (PDF)" +msgstr "Drucken (PDF)" + +#: AppGUI/MainGUI.py:320 +msgid "E&xit" +msgstr "Ausgang" + +#: AppGUI/MainGUI.py:328 AppGUI/MainGUI.py:749 AppGUI/MainGUI.py:1487 +msgid "Edit" +msgstr "Bearbeiten" + +#: AppGUI/MainGUI.py:332 +msgid "Edit Object\tE" +msgstr "Objekt bearbeiten\tE" + +#: AppGUI/MainGUI.py:334 +msgid "Close Editor\tCtrl+S" +msgstr "Schließen Sie Editor\tSTRG+S" + +#: AppGUI/MainGUI.py:343 +msgid "Conversion" +msgstr "Umwandlung" + +#: AppGUI/MainGUI.py:345 +msgid "&Join Geo/Gerber/Exc -> Geo" +msgstr "Geo/Gerber/Exc -> Geo zusammenfassen" + +#: AppGUI/MainGUI.py:347 +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 "" +"Zusammenführen einer Auswahl von Objekten, die vom Typ sein können:\n" +"- Gerber\n" +"- Excellon\n" +"- Geometrie\n" +"in ein neues Geometrieobjekt kombinieren." + +#: AppGUI/MainGUI.py:354 +msgid "Join Excellon(s) -> Excellon" +msgstr "Excellon(s) -> Excellon zusammenfassen" + +#: AppGUI/MainGUI.py:356 +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." + +#: AppGUI/MainGUI.py:359 +msgid "Join Gerber(s) -> Gerber" +msgstr "Gerber(s) -> Gerber zusammenfassen" + +#: AppGUI/MainGUI.py:361 +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." + +#: AppGUI/MainGUI.py:366 +msgid "Convert Single to MultiGeo" +msgstr "Konvertieren Sie Single in MultiGeo" + +#: AppGUI/MainGUI.py:368 +msgid "" +"Will convert a Geometry object from single_geometry type\n" +"to a multi_geometry type." +msgstr "" +"Konvertiert ein Geometrieobjekt vom Typ single_geometry\n" +"zu einem multi_geometry-Typ." + +#: AppGUI/MainGUI.py:372 +msgid "Convert Multi to SingleGeo" +msgstr "Konvertieren Sie Multi in SingleGeo" + +#: AppGUI/MainGUI.py:374 +msgid "" +"Will convert a Geometry object from multi_geometry type\n" +"to a single_geometry type." +msgstr "" +"Konvertiert ein Geometrieobjekt vom Typ multi_geometry\n" +"zu einem single_geometry-Typ." + +#: AppGUI/MainGUI.py:381 +msgid "Convert Any to Geo" +msgstr "Konvertieren Sie Any zu Geo" + +#: AppGUI/MainGUI.py:384 +msgid "Convert Any to Gerber" +msgstr "Konvertieren Sie Any zu Gerber" + +#: AppGUI/MainGUI.py:390 +msgid "&Copy\tCtrl+C" +msgstr "Kopieren\tSTRG+C" + +#: AppGUI/MainGUI.py:395 +msgid "&Delete\tDEL" +msgstr "Löschen\tDEL" + +#: AppGUI/MainGUI.py:400 +msgid "Se&t Origin\tO" +msgstr "Ursprung festlegen\tO" + +#: AppGUI/MainGUI.py:402 +msgid "Move to Origin\tShift+O" +msgstr "Zum Ursprung wechseln\tShift+O" + +#: AppGUI/MainGUI.py:405 +msgid "Jump to Location\tJ" +msgstr "Zum Ort springen\tJ" + +#: AppGUI/MainGUI.py:407 +msgid "Locate in Object\tShift+J" +msgstr "Suchen Sie im Objekt\tShift+J" + +#: AppGUI/MainGUI.py:412 +msgid "Toggle Units\tQ" +msgstr "Einheiten umschalten\tQ" + +#: AppGUI/MainGUI.py:414 +msgid "&Select All\tCtrl+A" +msgstr "Alles auswählen\tSTRG+A" + +#: AppGUI/MainGUI.py:419 +msgid "&Preferences\tShift+P" +msgstr "Einstellungen\tShift+P" + +#: AppGUI/MainGUI.py:425 AppTools/ToolProperties.py:155 +msgid "Options" +msgstr "Optionen" + +#: AppGUI/MainGUI.py:427 +msgid "&Rotate Selection\tShift+(R)" +msgstr "Auswahl drehen\tShift+(R)" + +#: AppGUI/MainGUI.py:432 +msgid "&Skew on X axis\tShift+X" +msgstr "Neigung auf der X-Achse\tShift+X" + +#: AppGUI/MainGUI.py:434 +msgid "S&kew on Y axis\tShift+Y" +msgstr "Neigung auf der Y-Achse\tShift+Y" + +#: AppGUI/MainGUI.py:439 +msgid "Flip on &X axis\tX" +msgstr "X-Achse kippen\tX" + +#: AppGUI/MainGUI.py:441 +msgid "Flip on &Y axis\tY" +msgstr "Y-Achse kippen\tY" + +#: AppGUI/MainGUI.py:446 +msgid "View source\tAlt+S" +msgstr "Quelltext anzeigen\tAlt+S" + +#: AppGUI/MainGUI.py:448 +msgid "Tools DataBase\tCtrl+D" +msgstr "Werkzeugdatenbank\tSTRG+D" + +#: AppGUI/MainGUI.py:455 AppGUI/MainGUI.py:1384 +msgid "View" +msgstr "Aussicht" + +#: AppGUI/MainGUI.py:457 +msgid "Enable all plots\tAlt+1" +msgstr "Alle Diagramme aktivieren\tAlt+1" + +#: AppGUI/MainGUI.py:459 +msgid "Disable all plots\tAlt+2" +msgstr "Alle Diagramme deaktivieren\tAlt+2" + +#: AppGUI/MainGUI.py:461 +msgid "Disable non-selected\tAlt+3" +msgstr "Nicht ausgewählte Diagramme deaktivieren\tAlt+3" + +#: AppGUI/MainGUI.py:465 +msgid "&Zoom Fit\tV" +msgstr "Passed zoomen\tV" + +#: AppGUI/MainGUI.py:467 +msgid "&Zoom In\t=" +msgstr "Hineinzoomen\t=" + +#: AppGUI/MainGUI.py:469 +msgid "&Zoom Out\t-" +msgstr "Rauszoomen\t-" + +#: AppGUI/MainGUI.py:474 +msgid "Redraw All\tF5" +msgstr "Alles neu zeichnen\tF5" + +#: AppGUI/MainGUI.py:478 +msgid "Toggle Code Editor\tShift+E" +msgstr "Code-Editor umschalten\tShift+E" + +#: AppGUI/MainGUI.py:481 +msgid "&Toggle FullScreen\tAlt+F10" +msgstr "FullScreen umschalten\tAlt+F10" + +#: AppGUI/MainGUI.py:483 +msgid "&Toggle Plot Area\tCtrl+F10" +msgstr "Plotbereich umschalten\tSTRG+F10" + +#: AppGUI/MainGUI.py:485 +msgid "&Toggle Project/Sel/Tool\t`" +msgstr "Projekt/Auswahl/Werkzeug umschalten\t`" + +#: AppGUI/MainGUI.py:489 +msgid "&Toggle Grid Snap\tG" +msgstr "Schaltet den Rasterfang ein\tG" + +#: AppGUI/MainGUI.py:491 +msgid "&Toggle Grid Lines\tAlt+G" +msgstr "Gitterlinien umschalten\tAlt+G" + +#: AppGUI/MainGUI.py:493 +msgid "&Toggle Axis\tShift+G" +msgstr "Achse umschalten\tShift+G" + +#: AppGUI/MainGUI.py:495 +msgid "Toggle Workspace\tShift+W" +msgstr "Arbeitsbereich umschalten\tShift+W" + +#: AppGUI/MainGUI.py:497 +#, fuzzy +#| msgid "Toggle Units" +msgid "Toggle HUD\tAlt+M" +msgstr "Einheiten wechseln" + +#: AppGUI/MainGUI.py:502 +msgid "Objects" +msgstr "Objekte" + +#: AppGUI/MainGUI.py:505 AppGUI/MainGUI.py:3987 +#: AppObjects/ObjectCollection.py:1120 AppObjects/ObjectCollection.py:1167 +msgid "Select All" +msgstr "Select All" + +#: AppGUI/MainGUI.py:507 AppObjects/ObjectCollection.py:1124 +#: AppObjects/ObjectCollection.py:1171 +msgid "Deselect All" +msgstr "Alle abwählen" + +#: AppGUI/MainGUI.py:516 +msgid "&Command Line\tS" +msgstr "Befehlszeile\tS" + +#: AppGUI/MainGUI.py:521 +msgid "Help" +msgstr "Hilfe" + +#: AppGUI/MainGUI.py:523 +msgid "Online Help\tF1" +msgstr "Onlinehilfe\tF1" + +#: AppGUI/MainGUI.py:526 Bookmark.py:293 +msgid "Bookmarks" +msgstr "Lesezeichen" + +#: AppGUI/MainGUI.py:529 App_Main.py:3031 App_Main.py:3040 +msgid "Bookmarks Manager" +msgstr "Lesezeichen verwalten" + +#: AppGUI/MainGUI.py:533 +msgid "Report a bug" +msgstr "Einen Fehler melden" + +#: AppGUI/MainGUI.py:536 +msgid "Excellon Specification" +msgstr "Excellon-Spezifikation" + +#: AppGUI/MainGUI.py:538 +msgid "Gerber Specification" +msgstr "Gerber-Spezifikation" + +#: AppGUI/MainGUI.py:543 +msgid "Shortcuts List\tF3" +msgstr "Tastenkürzel Liste\tF3" + +#: AppGUI/MainGUI.py:545 +msgid "YouTube Channel\tF4" +msgstr "Youtube Kanal\tF4" + +#: AppGUI/MainGUI.py:547 App_Main.py:2666 +msgid "About FlatCAM" +msgstr "Über FlatCAM" + +#: AppGUI/MainGUI.py:556 +msgid "Add Circle\tO" +msgstr "Kreis hinzufügen\tO" + +#: AppGUI/MainGUI.py:559 +msgid "Add Arc\tA" +msgstr "Bogen hinzufügen\tA" + +#: AppGUI/MainGUI.py:562 +msgid "Add Rectangle\tR" +msgstr "Rechteck hinzufügen\tR" + +#: AppGUI/MainGUI.py:565 +msgid "Add Polygon\tN" +msgstr "Polygon hinzufügen\tN" + +#: AppGUI/MainGUI.py:568 +msgid "Add Path\tP" +msgstr "Pfad hinzufügen\tP" + +#: AppGUI/MainGUI.py:571 +msgid "Add Text\tT" +msgstr "Text hinzufügen\tT" + +#: AppGUI/MainGUI.py:574 +msgid "Polygon Union\tU" +msgstr "Polygon-Vereinigung\tU" + +#: AppGUI/MainGUI.py:576 +msgid "Polygon Intersection\tE" +msgstr "Polygonschnitt\tE" + +#: AppGUI/MainGUI.py:578 +msgid "Polygon Subtraction\tS" +msgstr "Polygon-Subtraktion\tS" + +#: AppGUI/MainGUI.py:582 +msgid "Cut Path\tX" +msgstr "Pfad ausschneiden\tX" + +#: AppGUI/MainGUI.py:586 +msgid "Copy Geom\tC" +msgstr "Geometrie kopieren\tC" + +#: AppGUI/MainGUI.py:588 +msgid "Delete Shape\tDEL" +msgstr "Form löschen\tDEL" + +#: AppGUI/MainGUI.py:592 AppGUI/MainGUI.py:679 +msgid "Move\tM" +msgstr "Bewegung\tM" + +#: AppGUI/MainGUI.py:594 +msgid "Buffer Tool\tB" +msgstr "Pufferwerkzeug\tB" + +#: AppGUI/MainGUI.py:597 +msgid "Paint Tool\tI" +msgstr "Malenwerkzeug\tI" + +#: AppGUI/MainGUI.py:600 +msgid "Transform Tool\tAlt+R" +msgstr "Transformationswerkzeug\tAlt+R" + +#: AppGUI/MainGUI.py:604 +msgid "Toggle Corner Snap\tK" +msgstr "Eckfang umschalten\tK" + +#: AppGUI/MainGUI.py:610 +msgid ">Excellon Editor<" +msgstr ">Excellon Editor<" + +#: AppGUI/MainGUI.py:614 +msgid "Add Drill Array\tA" +msgstr "Bohrfeld hinzufügen\tA" + +#: AppGUI/MainGUI.py:616 +msgid "Add Drill\tD" +msgstr "Bohrer hinzufügen\tD" + +#: AppGUI/MainGUI.py:620 +msgid "Add Slot Array\tQ" +msgstr "Steckplatz-Array hinzufügen\tQ" + +#: AppGUI/MainGUI.py:622 +msgid "Add Slot\tW" +msgstr "Slot hinzufügen\tW" + +#: AppGUI/MainGUI.py:626 +msgid "Resize Drill(S)\tR" +msgstr "Bohrer verkleinern\tR" + +#: AppGUI/MainGUI.py:629 AppGUI/MainGUI.py:673 +msgid "Copy\tC" +msgstr "Kopieren\tC" + +#: AppGUI/MainGUI.py:631 AppGUI/MainGUI.py:675 +msgid "Delete\tDEL" +msgstr "Löschen\tDEL" + +#: AppGUI/MainGUI.py:636 +msgid "Move Drill(s)\tM" +msgstr "Bohrer verschieben\tM" + +#: AppGUI/MainGUI.py:641 +msgid ">Gerber Editor<" +msgstr ">Gerber-Editor<" + +#: AppGUI/MainGUI.py:645 +msgid "Add Pad\tP" +msgstr "Pad hinzufügen\tP" + +#: AppGUI/MainGUI.py:647 +msgid "Add Pad Array\tA" +msgstr "Pad-Array hinzufügen\tA" + +#: AppGUI/MainGUI.py:649 +msgid "Add Track\tT" +msgstr "Track hinzufügen\tA" + +#: AppGUI/MainGUI.py:651 +msgid "Add Region\tN" +msgstr "Region hinzufügen\tN" + +#: AppGUI/MainGUI.py:655 +msgid "Poligonize\tAlt+N" +msgstr "Polygonisieren\tAlt+N" + +#: AppGUI/MainGUI.py:657 +msgid "Add SemiDisc\tE" +msgstr "Halbschibe hinzufügen\tE" + +#: AppGUI/MainGUI.py:659 +msgid "Add Disc\tD" +msgstr "Schibe hinzufügen\tD" + +#: AppGUI/MainGUI.py:661 +msgid "Buffer\tB" +msgstr "Puffer\tB" + +#: AppGUI/MainGUI.py:663 +msgid "Scale\tS" +msgstr "Skalieren\tS" + +#: AppGUI/MainGUI.py:665 +msgid "Mark Area\tAlt+A" +msgstr "Bereich markieren\tAlt+A" + +#: AppGUI/MainGUI.py:667 +msgid "Eraser\tCtrl+E" +msgstr "Radiergummi\tSTRG+E" + +#: AppGUI/MainGUI.py:669 +msgid "Transform\tAlt+R" +msgstr "Transformationswerkzeug\tSTRG+R" + +#: AppGUI/MainGUI.py:696 +msgid "Enable Plot" +msgstr "Diagramm aktivieren" + +#: AppGUI/MainGUI.py:698 +msgid "Disable Plot" +msgstr "Diagramm deaktivieren" + +#: AppGUI/MainGUI.py:702 +msgid "Set Color" +msgstr "Farbsatz" + +#: AppGUI/MainGUI.py:705 App_Main.py:9798 +msgid "Red" +msgstr "Rote" + +#: AppGUI/MainGUI.py:708 App_Main.py:9800 +msgid "Blue" +msgstr "Blau" + +#: AppGUI/MainGUI.py:711 App_Main.py:9803 +msgid "Yellow" +msgstr "Gelb" + +#: AppGUI/MainGUI.py:714 App_Main.py:9805 +msgid "Green" +msgstr "Grün" + +#: AppGUI/MainGUI.py:717 App_Main.py:9807 +msgid "Purple" +msgstr "Lila" + +#: AppGUI/MainGUI.py:720 App_Main.py:9809 +msgid "Brown" +msgstr "Braun" + +#: AppGUI/MainGUI.py:723 App_Main.py:9811 App_Main.py:9867 +msgid "White" +msgstr "Weiß" + +#: AppGUI/MainGUI.py:726 App_Main.py:9813 +msgid "Black" +msgstr "Schwarz" + +#: AppGUI/MainGUI.py:731 App_Main.py:9816 +msgid "Custom" +msgstr "Maßgeschn." + +#: AppGUI/MainGUI.py:736 App_Main.py:9850 +msgid "Opacity" +msgstr "Opazität" + +#: AppGUI/MainGUI.py:739 App_Main.py:9826 +msgid "Default" +msgstr "Standard" + +#: AppGUI/MainGUI.py:744 +msgid "Generate CNC" +msgstr "CNC generieren" + +#: AppGUI/MainGUI.py:746 +msgid "View Source" +msgstr "Quelltext anzeigen" + +#: AppGUI/MainGUI.py:751 AppGUI/MainGUI.py:856 AppGUI/MainGUI.py:1067 +#: AppGUI/MainGUI.py:1483 AppGUI/MainGUI.py:1821 AppGUI/MainGUI.py:2028 +#: AppGUI/MainGUI.py:4397 AppGUI/ObjectUI.py:1719 +#: AppObjects/FlatCAMGeometry.py:553 AppTools/ToolPanelize.py:551 +#: AppTools/ToolPanelize.py:578 AppTools/ToolPanelize.py:671 +#: AppTools/ToolPanelize.py:700 AppTools/ToolPanelize.py:762 +msgid "Copy" +msgstr "Kopieren" + +#: AppGUI/MainGUI.py:759 AppGUI/MainGUI.py:1496 AppTools/ToolProperties.py:31 +msgid "Properties" +msgstr "Eigenschaften" + +#: AppGUI/MainGUI.py:788 +msgid "File Toolbar" +msgstr "Dateisymbolleiste" + +#: AppGUI/MainGUI.py:792 +msgid "Edit Toolbar" +msgstr "Symbolleiste bearbeiten" + +#: AppGUI/MainGUI.py:796 +msgid "View Toolbar" +msgstr "Symbolleiste anzeigen" + +#: AppGUI/MainGUI.py:800 +msgid "Shell Toolbar" +msgstr "Shell-Symbolleiste" + +#: AppGUI/MainGUI.py:804 +msgid "Tools Toolbar" +msgstr "Werkzeugleiste" + +#: AppGUI/MainGUI.py:808 +msgid "Excellon Editor Toolbar" +msgstr "Excellon Editor-Symbolleiste" + +#: AppGUI/MainGUI.py:814 +msgid "Geometry Editor Toolbar" +msgstr "Geometrie Editor-Symbolleiste" + +#: AppGUI/MainGUI.py:818 +msgid "Gerber Editor Toolbar" +msgstr "Gerber Editor-Symbolleiste" + +#: AppGUI/MainGUI.py:822 +msgid "Grid Toolbar" +msgstr "Raster-Symbolleiste" + +#: AppGUI/MainGUI.py:836 AppGUI/MainGUI.py:1800 App_Main.py:6763 +#: App_Main.py:6767 +msgid "Open Gerber" +msgstr "Gerber öffnen" + +#: AppGUI/MainGUI.py:838 AppGUI/MainGUI.py:1802 App_Main.py:6801 +#: App_Main.py:6805 +msgid "Open Excellon" +msgstr "Excellon öffnen" + +#: AppGUI/MainGUI.py:841 AppGUI/MainGUI.py:1805 +msgid "Open project" +msgstr "Projekt öffnen" + +#: AppGUI/MainGUI.py:843 AppGUI/MainGUI.py:1807 +msgid "Save project" +msgstr "Projekt speichern" + +#: AppGUI/MainGUI.py:851 AppGUI/MainGUI.py:1816 +msgid "Save Object and close the Editor" +msgstr "Speichern Sie das Objekt und schließen Sie den Editor" + +#: AppGUI/MainGUI.py:858 AppGUI/MainGUI.py:1823 +msgid "&Delete" +msgstr "&Löschen" + +#: AppGUI/MainGUI.py:861 AppGUI/MainGUI.py:1826 AppGUI/MainGUI.py:3988 +#: AppGUI/MainGUI.py:4194 AppTools/ToolDistance.py:35 +#: AppTools/ToolDistance.py:197 +msgid "Distance Tool" +msgstr "Entfernungswerkzeug" + +#: AppGUI/MainGUI.py:863 AppGUI/MainGUI.py:1828 +msgid "Distance Min Tool" +msgstr "Werkzeug für Mindestabstand" + +#: AppGUI/MainGUI.py:865 AppGUI/MainGUI.py:1830 AppGUI/MainGUI.py:3981 +msgid "Set Origin" +msgstr "Nullpunkt festlegen" + +#: AppGUI/MainGUI.py:867 AppGUI/MainGUI.py:1832 +msgid "Move to Origin" +msgstr "Zum Ursprung wechseln" + +#: AppGUI/MainGUI.py:870 AppGUI/MainGUI.py:1834 +msgid "Jump to Location" +msgstr "Zur Position springen\tJ" + +#: AppGUI/MainGUI.py:872 AppGUI/MainGUI.py:1836 AppGUI/MainGUI.py:3993 +msgid "Locate in Object" +msgstr "Suchen Sie im Objekt" + +#: AppGUI/MainGUI.py:878 AppGUI/MainGUI.py:1842 +msgid "&Replot" +msgstr "Neuzeichnen &R" + +#: AppGUI/MainGUI.py:880 AppGUI/MainGUI.py:1844 +msgid "&Clear plot" +msgstr "Darstellung löschen &C" + +#: AppGUI/MainGUI.py:882 AppGUI/MainGUI.py:1846 AppGUI/MainGUI.py:3984 +msgid "Zoom In" +msgstr "Hineinzoomen" + +#: AppGUI/MainGUI.py:884 AppGUI/MainGUI.py:1848 AppGUI/MainGUI.py:3984 +msgid "Zoom Out" +msgstr "Rauszoomen" + +#: AppGUI/MainGUI.py:886 AppGUI/MainGUI.py:1386 AppGUI/MainGUI.py:1850 +#: AppGUI/MainGUI.py:3983 +msgid "Zoom Fit" +msgstr "Passend zoomen" + +#: AppGUI/MainGUI.py:894 AppGUI/MainGUI.py:1856 +msgid "&Command Line" +msgstr "Befehlszeile" + +#: AppGUI/MainGUI.py:906 AppGUI/MainGUI.py:1868 +msgid "2Sided Tool" +msgstr "2Seitiges Werkzeug" + +#: AppGUI/MainGUI.py:908 AppGUI/MainGUI.py:1870 AppGUI/MainGUI.py:3999 +msgid "Align Objects Tool" +msgstr "Werkzeug \"Objekte ausrichten\"" + +#: AppGUI/MainGUI.py:910 AppGUI/MainGUI.py:1872 AppGUI/MainGUI.py:4000 +#: AppTools/ToolExtractDrills.py:393 +msgid "Extract Drills Tool" +msgstr "Bohrer Extrahieren Werkzeug" + +#: AppGUI/MainGUI.py:913 AppGUI/ObjectUI.py:596 AppTools/ToolCutOut.py:440 +msgid "Cutout Tool" +msgstr "Ausschnittwerkzeug" + +#: AppGUI/MainGUI.py:915 AppGUI/MainGUI.py:1877 AppGUI/ObjectUI.py:574 +#: AppGUI/ObjectUI.py:2287 AppTools/ToolNCC.py:974 +msgid "NCC Tool" +msgstr "NCC Werkzeug" + +#: AppGUI/MainGUI.py:921 AppGUI/MainGUI.py:1883 +msgid "Panel Tool" +msgstr "Platte Werkzeug" + +#: AppGUI/MainGUI.py:923 AppGUI/MainGUI.py:1885 AppTools/ToolFilm.py:569 +msgid "Film Tool" +msgstr "Filmwerkzeug" + +#: AppGUI/MainGUI.py:925 AppGUI/MainGUI.py:1887 AppTools/ToolSolderPaste.py:553 +msgid "SolderPaste Tool" +msgstr "Lötpaste-Werkzeug" + +#: AppGUI/MainGUI.py:927 AppGUI/MainGUI.py:1889 AppTools/ToolSub.py:35 +msgid "Subtract Tool" +msgstr "Subtraktionswerkzeug" + +#: AppGUI/MainGUI.py:929 AppGUI/MainGUI.py:1891 AppTools/ToolRulesCheck.py:616 +msgid "Rules Tool" +msgstr "Regelwerkzeug" + +#: AppGUI/MainGUI.py:931 AppGUI/MainGUI.py:1893 AppGUI/MainGUI.py:4002 +#: AppTools/ToolOptimal.py:33 AppTools/ToolOptimal.py:307 +msgid "Optimal Tool" +msgstr "Optimierungswerkzeug" + +#: AppGUI/MainGUI.py:936 AppGUI/MainGUI.py:1898 AppGUI/MainGUI.py:3999 +msgid "Calculators Tool" +msgstr "Rechnerwerkzeug" + +#: AppGUI/MainGUI.py:940 AppGUI/MainGUI.py:1902 AppGUI/MainGUI.py:4003 +#: AppTools/ToolQRCode.py:43 AppTools/ToolQRCode.py:382 +msgid "QRCode Tool" +msgstr "QRCode Werkzeug" + +# Really don't know +#: AppGUI/MainGUI.py:942 AppGUI/MainGUI.py:1904 +#: AppTools/ToolCopperThieving.py:39 AppTools/ToolCopperThieving.py:568 +msgid "Copper Thieving Tool" +msgstr "Copper Thieving Werkzeug" + +# Really don't know +#: AppGUI/MainGUI.py:945 AppGUI/MainGUI.py:1907 AppGUI/MainGUI.py:4000 +#: AppTools/ToolFiducials.py:33 AppTools/ToolFiducials.py:396 +msgid "Fiducials Tool" +msgstr "Passermarken-Tool" + +#: AppGUI/MainGUI.py:947 AppGUI/MainGUI.py:1909 AppTools/ToolCalibration.py:37 +#: AppTools/ToolCalibration.py:759 +msgid "Calibration Tool" +msgstr "Kalibierungswerkzeug" + +#: AppGUI/MainGUI.py:949 AppGUI/MainGUI.py:1911 AppGUI/MainGUI.py:4000 +msgid "Punch Gerber Tool" +msgstr "Stanzen Sie das Gerber-Werkzeug" + +#: AppGUI/MainGUI.py:951 AppGUI/MainGUI.py:1913 AppTools/ToolInvertGerber.py:31 +msgid "Invert Gerber Tool" +msgstr "Invertieren Sie das Gerber-Werkzeug" + +#: AppGUI/MainGUI.py:953 AppGUI/MainGUI.py:1915 AppGUI/MainGUI.py:4002 +#: AppTools/ToolCorners.py:31 +#, fuzzy +#| msgid "Invert Gerber Tool" +msgid "Corner Markers Tool" +msgstr "Invertieren Sie das Gerber-Werkzeug" + +#: AppGUI/MainGUI.py:959 AppGUI/MainGUI.py:985 AppGUI/MainGUI.py:1037 +#: AppGUI/MainGUI.py:1921 AppGUI/MainGUI.py:1999 +msgid "Select" +msgstr "Wählen" + +#: AppGUI/MainGUI.py:961 AppGUI/MainGUI.py:1923 +msgid "Add Drill Hole" +msgstr "Bohrloch hinzufügen" + +#: AppGUI/MainGUI.py:963 AppGUI/MainGUI.py:1925 +msgid "Add Drill Hole Array" +msgstr "Bohrlochfeld hinzufügen" + +#: AppGUI/MainGUI.py:965 AppGUI/MainGUI.py:1474 AppGUI/MainGUI.py:1929 +#: AppGUI/MainGUI.py:4279 +msgid "Add Slot" +msgstr "Steckplatz hinzufügen" + +#: AppGUI/MainGUI.py:967 AppGUI/MainGUI.py:1476 AppGUI/MainGUI.py:1931 +#: AppGUI/MainGUI.py:4278 +msgid "Add Slot Array" +msgstr "Steckplatz-Array hinzufügen" + +#: AppGUI/MainGUI.py:969 AppGUI/MainGUI.py:1479 AppGUI/MainGUI.py:1927 +msgid "Resize Drill" +msgstr "Bohrergröße ändern" + +#: AppGUI/MainGUI.py:973 AppGUI/MainGUI.py:1935 +msgid "Copy Drill" +msgstr "Bohrer kopieren" + +#: AppGUI/MainGUI.py:975 AppGUI/MainGUI.py:1937 +msgid "Delete Drill" +msgstr "Bohrer löschen" + +#: AppGUI/MainGUI.py:979 AppGUI/MainGUI.py:1941 +msgid "Move Drill" +msgstr "Bohrer bewegen" + +#: AppGUI/MainGUI.py:987 AppGUI/MainGUI.py:1949 +msgid "Add Circle" +msgstr "Kreis hinzufügen" + +#: AppGUI/MainGUI.py:989 AppGUI/MainGUI.py:1951 +msgid "Add Arc" +msgstr "Bogen hinzufügen" + +#: AppGUI/MainGUI.py:991 AppGUI/MainGUI.py:1953 +msgid "Add Rectangle" +msgstr "Rechteck hinzufügen" + +#: AppGUI/MainGUI.py:995 AppGUI/MainGUI.py:1957 +msgid "Add Path" +msgstr "Pfad hinzufügen" + +#: AppGUI/MainGUI.py:997 AppGUI/MainGUI.py:1959 +msgid "Add Polygon" +msgstr "Polygon hinzufügen" + +#: AppGUI/MainGUI.py:1000 AppGUI/MainGUI.py:1962 +msgid "Add Text" +msgstr "Text hinzufügen" + +#: AppGUI/MainGUI.py:1002 AppGUI/MainGUI.py:1964 +msgid "Add Buffer" +msgstr "Puffer hinzufügen" + +#: AppGUI/MainGUI.py:1004 AppGUI/MainGUI.py:1966 +msgid "Paint Shape" +msgstr "Malen Form" + +#: AppGUI/MainGUI.py:1006 AppGUI/MainGUI.py:1063 AppGUI/MainGUI.py:1415 +#: AppGUI/MainGUI.py:1460 AppGUI/MainGUI.py:1968 AppGUI/MainGUI.py:2024 +msgid "Eraser" +msgstr "Radiergummi" + +#: AppGUI/MainGUI.py:1010 AppGUI/MainGUI.py:1972 +msgid "Polygon Union" +msgstr "Polygon-Vereinigung" + +#: AppGUI/MainGUI.py:1012 AppGUI/MainGUI.py:1974 +msgid "Polygon Explode" +msgstr "Polygon explodieren" + +#: AppGUI/MainGUI.py:1015 AppGUI/MainGUI.py:1977 +msgid "Polygon Intersection" +msgstr "Polygonschnitt" + +#: AppGUI/MainGUI.py:1017 AppGUI/MainGUI.py:1979 +msgid "Polygon Subtraction" +msgstr "Polygon-Subtraktion" + +#: AppGUI/MainGUI.py:1021 AppGUI/MainGUI.py:1983 +msgid "Cut Path" +msgstr "Pfad ausschneiden" + +#: AppGUI/MainGUI.py:1023 +msgid "Copy Shape(s)" +msgstr "Form kopieren" + +#: AppGUI/MainGUI.py:1026 +msgid "Delete Shape '-'" +msgstr "Form löschen" + +#: AppGUI/MainGUI.py:1028 AppGUI/MainGUI.py:1071 AppGUI/MainGUI.py:1427 +#: AppGUI/MainGUI.py:1464 AppGUI/MainGUI.py:1989 AppGUI/MainGUI.py:2032 +#: AppGUI/ObjectUI.py:109 +msgid "Transformations" +msgstr "Transformationen" + +#: AppGUI/MainGUI.py:1031 +msgid "Move Objects " +msgstr "Objekte verschieben " + +#: AppGUI/MainGUI.py:1039 AppGUI/MainGUI.py:2001 AppGUI/MainGUI.py:4398 +msgid "Add Pad" +msgstr "Pad hinzufügen" + +#: AppGUI/MainGUI.py:1043 AppGUI/MainGUI.py:2005 AppGUI/MainGUI.py:4399 +msgid "Add Track" +msgstr "Track hinzufügen" + +#: AppGUI/MainGUI.py:1045 AppGUI/MainGUI.py:2007 AppGUI/MainGUI.py:4398 +msgid "Add Region" +msgstr "Region hinzufügen" + +#: AppGUI/MainGUI.py:1047 AppGUI/MainGUI.py:1446 AppGUI/MainGUI.py:2009 +msgid "Poligonize" +msgstr "Polygonisieren" + +#: AppGUI/MainGUI.py:1050 AppGUI/MainGUI.py:1448 AppGUI/MainGUI.py:2012 +msgid "SemiDisc" +msgstr "Halbscheibe" + +#: AppGUI/MainGUI.py:1052 AppGUI/MainGUI.py:1450 AppGUI/MainGUI.py:2014 +msgid "Disc" +msgstr "Scheibe" + +#: AppGUI/MainGUI.py:1060 AppGUI/MainGUI.py:1458 AppGUI/MainGUI.py:2022 +msgid "Mark Area" +msgstr "Bereich markieren" + +#: AppGUI/MainGUI.py:1074 AppGUI/MainGUI.py:1431 AppGUI/MainGUI.py:1494 +#: AppGUI/MainGUI.py:2035 AppGUI/MainGUI.py:4398 AppTools/ToolMove.py:27 +msgid "Move" +msgstr "Bewegung" + +#: AppGUI/MainGUI.py:1082 +msgid "Snap to grid" +msgstr "Am Raster ausrichten" + +#: AppGUI/MainGUI.py:1085 +msgid "Grid X snapping distance" +msgstr "Raster X Fangdistanz" + +#: AppGUI/MainGUI.py:1090 +msgid "Grid Y snapping distance" +msgstr "Raster Y Fangdistanz" + +#: AppGUI/MainGUI.py:1096 +msgid "" +"When active, value on Grid_X\n" +"is copied to the Grid_Y value." +msgstr "" +"Wenn aktiv, Wert auf Grid_X\n" +"wird in den Wert von Grid_Y kopiert." + +#: AppGUI/MainGUI.py:1103 +msgid "Snap to corner" +msgstr "In der Ecke ausrichten" + +#: AppGUI/MainGUI.py:1107 AppGUI/preferences/general/GeneralAPPSetGroupUI.py:78 +msgid "Max. magnet distance" +msgstr "Max. Magnetabstand" + +#: AppGUI/MainGUI.py:1132 AppGUI/MainGUI.py:1377 App_Main.py:7793 +msgid "Project" +msgstr "Projekt" + +#: AppGUI/MainGUI.py:1147 +msgid "Selected" +msgstr "Ausgewählt" + +#: AppGUI/MainGUI.py:1175 AppGUI/MainGUI.py:1183 +msgid "Plot Area" +msgstr "Grundstücksfläche" + +#: AppGUI/MainGUI.py:1210 +msgid "General" +msgstr "Allgemeines" + +#: AppGUI/MainGUI.py:1225 AppTools/ToolCopperThieving.py:74 +#: AppTools/ToolDblSided.py:64 AppTools/ToolExtractDrills.py:61 +#: AppTools/ToolInvertGerber.py:72 AppTools/ToolOptimal.py:71 +#: AppTools/ToolPunchGerber.py:64 +msgid "GERBER" +msgstr "GERBER" + +#: AppGUI/MainGUI.py:1235 AppTools/ToolDblSided.py:92 +msgid "EXCELLON" +msgstr "EXCELLON" + +#: AppGUI/MainGUI.py:1245 AppTools/ToolDblSided.py:120 +msgid "GEOMETRY" +msgstr "GEOMETRY" + +#: AppGUI/MainGUI.py:1255 +msgid "CNC-JOB" +msgstr "CNC-Auftrag" + +#: AppGUI/MainGUI.py:1264 AppGUI/ObjectUI.py:563 AppGUI/ObjectUI.py:2262 +msgid "TOOLS" +msgstr "WERKZEUGE" + +#: AppGUI/MainGUI.py:1273 +msgid "TOOLS 2" +msgstr "WERKZEUGE 2" + +#: AppGUI/MainGUI.py:1283 +msgid "UTILITIES" +msgstr "NUTZEN" + +#: AppGUI/MainGUI.py:1300 +#: AppGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:192 +msgid "Restore Defaults" +msgstr "Standard wiederherstellen" + +#: AppGUI/MainGUI.py:1303 +msgid "" +"Restore the entire set of default values\n" +"to the initial values loaded after first launch." +msgstr "" +"Stellen Sie den gesamten Satz von Standardwerten wieder her\n" +"auf die nach dem ersten Start geladenen Anfangswerte." + +#: AppGUI/MainGUI.py:1308 +msgid "Open Pref Folder" +msgstr "Öffnen Sie den Einstellungsordner" + +#: AppGUI/MainGUI.py:1311 +msgid "Open the folder where FlatCAM save the preferences files." +msgstr "" +"Öffnen Sie den Ordner, in dem FlatCAM die Voreinstellungsdateien speichert." + +#: AppGUI/MainGUI.py:1315 AppGUI/MainGUI.py:1773 +msgid "Clear GUI Settings" +msgstr "Löschen Sie die GUI-Einstellungen" + +#: AppGUI/MainGUI.py:1319 +msgid "" +"Clear the GUI settings for FlatCAM,\n" +"such as: layout, gui state, style, hdpi support etc." +msgstr "" +"Löschen Sie die GUI-Einstellungen für FlatCAM.\n" +"wie zum Beispiel: Layout, GUI-Status, Stil, HDPI-Unterstützung usw." + +#: AppGUI/MainGUI.py:1330 +msgid "Apply" +msgstr "Anwenden" + +#: AppGUI/MainGUI.py:1333 +msgid "Apply the current preferences without saving to a file." +msgstr "Anwenden ohne zu speichern." + +#: AppGUI/MainGUI.py:1340 +msgid "" +"Save the current settings in the 'current_defaults' file\n" +"which is the file storing the working default preferences." +msgstr "" +"Speichern Sie die aktuellen Einstellungen in der Datei 'current_defaults'\n" +"Dies ist die Datei, in der die Arbeitseinstellungen gespeichert sind." + +#: AppGUI/MainGUI.py:1348 +msgid "Will not save the changes and will close the preferences window." +msgstr "Einstellungen werden geschlossen ohne die Änderungen zu speichern." + +#: AppGUI/MainGUI.py:1362 +msgid "Toggle Visibility" +msgstr "Sichtbarkeit umschalten" + +#: AppGUI/MainGUI.py:1368 +msgid "New" +msgstr "Neu" + +#: AppGUI/MainGUI.py:1370 AppGUI/ObjectUI.py:450 +#: AppObjects/FlatCAMGerber.py:239 AppObjects/FlatCAMGerber.py:327 +#: AppTools/ToolCalibration.py:631 AppTools/ToolCalibration.py:648 +#: AppTools/ToolCalibration.py:815 AppTools/ToolCopperThieving.py:144 +#: AppTools/ToolCopperThieving.py:158 AppTools/ToolCopperThieving.py:604 +#: AppTools/ToolCutOut.py:92 AppTools/ToolDblSided.py:226 +#: AppTools/ToolFilm.py:69 AppTools/ToolFilm.py:92 AppTools/ToolImage.py:49 +#: AppTools/ToolImage.py:271 AppTools/ToolNCC.py:95 AppTools/ToolNCC.py:558 +#: AppTools/ToolNCC.py:1300 AppTools/ToolPaint.py:501 AppTools/ToolPaint.py:705 +#: AppTools/ToolPanelize.py:116 AppTools/ToolPanelize.py:385 +#: AppTools/ToolPanelize.py:402 +msgid "Geometry" +msgstr "Geometrie" + +#: AppGUI/MainGUI.py:1374 +#: AppGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:99 +#: AppTools/ToolAlignObjects.py:74 AppTools/ToolAlignObjects.py:110 +#: AppTools/ToolCalibration.py:197 AppTools/ToolCalibration.py:631 +#: AppTools/ToolCalibration.py:648 AppTools/ToolCalibration.py:807 +#: AppTools/ToolCalibration.py:815 AppTools/ToolCopperThieving.py:144 +#: AppTools/ToolCopperThieving.py:158 AppTools/ToolCopperThieving.py:604 +#: AppTools/ToolDblSided.py:225 AppTools/ToolFilm.py:342 +#: AppTools/ToolNCC.py:558 AppTools/ToolNCC.py:1300 AppTools/ToolPaint.py:501 +#: AppTools/ToolPaint.py:705 AppTools/ToolPanelize.py:385 +#: AppTools/ToolPunchGerber.py:149 AppTools/ToolPunchGerber.py:164 +msgid "Excellon" +msgstr "Excellon" + +#: AppGUI/MainGUI.py:1381 +msgid "Grids" +msgstr "Raster" + +#: AppGUI/MainGUI.py:1388 +msgid "Clear Plot" +msgstr "Plot klar löschen" + +#: AppGUI/MainGUI.py:1390 +msgid "Replot" +msgstr "Replotieren" + +#: AppGUI/MainGUI.py:1394 +msgid "Geo Editor" +msgstr "Geo-Editor" + +#: AppGUI/MainGUI.py:1396 +msgid "Path" +msgstr "Pfad" + +#: AppGUI/MainGUI.py:1398 +msgid "Rectangle" +msgstr "Rechteck" + +#: AppGUI/MainGUI.py:1401 +msgid "Circle" +msgstr "Kreis" + +#: AppGUI/MainGUI.py:1405 +msgid "Arc" +msgstr "Bogen" + +#: AppGUI/MainGUI.py:1419 +msgid "Union" +msgstr "Vereinigung" + +#: AppGUI/MainGUI.py:1421 +msgid "Intersection" +msgstr "Überschneidung" + +#: AppGUI/MainGUI.py:1423 +msgid "Subtraction" +msgstr "Subtraktion" + +#: AppGUI/MainGUI.py:1425 AppGUI/ObjectUI.py:2351 +#: AppGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:56 +msgid "Cut" +msgstr "Schnitt" + +#: AppGUI/MainGUI.py:1436 +msgid "Pad" +msgstr "Pad" + +#: AppGUI/MainGUI.py:1438 +msgid "Pad Array" +msgstr "Pad-Array" + +#: AppGUI/MainGUI.py:1442 +msgid "Track" +msgstr "Track" + +#: AppGUI/MainGUI.py:1444 +msgid "Region" +msgstr "Region" + +#: AppGUI/MainGUI.py:1467 +msgid "Exc Editor" +msgstr "Exc-Editor" + +#: AppGUI/MainGUI.py:1469 AppGUI/MainGUI.py:4277 +msgid "Add Drill" +msgstr "Bohrer hinzufügen" + +#: AppGUI/MainGUI.py:1489 App_Main.py:2220 +msgid "Close Editor" +msgstr "Editor schließen" + +#: AppGUI/MainGUI.py:1514 +msgid "" +"Absolute measurement.\n" +"Reference is (X=0, Y= 0) position" +msgstr "" +"Absolute Messung.\n" +"Referenz ist (X = 0, Y = 0)" + +#: AppGUI/MainGUI.py:1615 +msgid "Lock Toolbars" +msgstr "Symbolleisten sperren" + +#: AppGUI/MainGUI.py:1761 +msgid "FlatCAM Preferences Folder opened." +msgstr "FlatCAM-Einstellungsordner geöffnet." + +#: AppGUI/MainGUI.py:1772 +msgid "Are you sure you want to delete the GUI Settings? \n" +msgstr "Möchten Sie die GUI-Einstellungen wirklich löschen?\n" + +#: AppGUI/MainGUI.py:1775 AppGUI/preferences/PreferencesUIManager.py:941 +#: AppGUI/preferences/PreferencesUIManager.py:1179 AppTranslation.py:109 +#: AppTranslation.py:206 App_Main.py:2223 App_Main.py:3094 App_Main.py:5526 +#: App_Main.py:6586 +msgid "Yes" +msgstr "Ja" + +#: AppGUI/MainGUI.py:1776 AppGUI/preferences/PreferencesUIManager.py:1180 +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:164 +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:150 +#: AppTools/ToolNCC.py:182 AppTools/ToolPaint.py:165 AppTranslation.py:110 +#: AppTranslation.py:207 App_Main.py:2224 App_Main.py:3095 App_Main.py:5527 +#: App_Main.py:6587 +msgid "No" +msgstr "Nein" + +#: AppGUI/MainGUI.py:1875 +msgid "&Cutout Tool" +msgstr "Ausschnittwerkzeug" + +#: AppGUI/MainGUI.py:1947 +msgid "Select 'Esc'" +msgstr "Wählen" + +#: AppGUI/MainGUI.py:1985 +msgid "Copy Objects" +msgstr "Objekte kopieren" + +#: AppGUI/MainGUI.py:1987 AppGUI/MainGUI.py:4197 +msgid "Delete Shape" +msgstr "Form löschen" + +#: AppGUI/MainGUI.py:1993 +msgid "Move Objects" +msgstr "Objekte verschieben" + +#: AppGUI/MainGUI.py:2577 +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 "" +"Bitte wählen Sie zuerst ein zu schneidendes Geometrieelement aus\n" +"Wählen Sie dann das Geometrieelement aus, das geschnitten werden soll\n" +"aus dem ersten Artikel. Zum Schluss drücken Sie die Taste ~ X ~ oder\n" +"die Symbolleisten-Schaltfläche." + +#: AppGUI/MainGUI.py:2584 AppGUI/MainGUI.py:2746 AppGUI/MainGUI.py:2791 +#: AppGUI/MainGUI.py:2811 +msgid "Warning" +msgstr "Warnung" + +#: AppGUI/MainGUI.py:2741 +msgid "" +"Please select geometry items \n" +"on which to perform Intersection Tool." +msgstr "" +"Bitte wählen Sie Geometrieelemente aus\n" +"auf dem das Verschneidungswerkzeug ausgeführt werden soll." + +#: AppGUI/MainGUI.py:2786 +msgid "" +"Please select geometry items \n" +"on which to perform Substraction Tool." +msgstr "" +"Bitte wählen Sie Geometrieelemente aus\n" +"auf dem das Subtraktionswerkzeug ausgeführt werden soll." + +#: AppGUI/MainGUI.py:2806 +msgid "" +"Please select geometry items \n" +"on which to perform union." +msgstr "" +"Bitte wählen Sie Geometrieelemente aus\n" +"auf dem die Polygonverbindung ausgeführt werden soll." + +#: AppGUI/MainGUI.py:2889 AppGUI/MainGUI.py:3104 +msgid "Cancelled. Nothing selected to delete." +msgstr "Abgebrochen. Nichts zum Löschen ausgewählt." + +#: AppGUI/MainGUI.py:2973 AppGUI/MainGUI.py:3220 +msgid "Cancelled. Nothing selected to copy." +msgstr "Abgebrochen. Nichts zum Kopieren ausgewählt." + +#: AppGUI/MainGUI.py:3019 AppGUI/MainGUI.py:3249 +msgid "Cancelled. Nothing selected to move." +msgstr "Abgebrochen. Nichts ausgewählt, um sich zu bewegen." + +#: AppGUI/MainGUI.py:3275 +msgid "New Tool ..." +msgstr "Neues Werkzeug ..." + +#: AppGUI/MainGUI.py:3276 AppTools/ToolNCC.py:924 AppTools/ToolPaint.py:849 +#: AppTools/ToolSolderPaste.py:560 +msgid "Enter a Tool Diameter" +msgstr "Geben Sie einen Werkzeugdurchmesser ein" + +#: AppGUI/MainGUI.py:3288 +msgid "Adding Tool cancelled ..." +msgstr "Tool wird hinzugefügt abgebrochen ..." + +#: AppGUI/MainGUI.py:3302 +msgid "Distance Tool exit..." +msgstr "Entfernungstool beenden ..." + +#: AppGUI/MainGUI.py:3481 App_Main.py:3084 +msgid "Application is saving the project. Please wait ..." +msgstr "Anwendung speichert das Projekt. Warten Sie mal ..." + +#: AppGUI/MainGUI.py:3616 App_Main.py:9309 +msgid "Shortcut Key List" +msgstr " Liste der Tastenkombinationen " + +#: AppGUI/MainGUI.py:3977 +#, fuzzy +#| msgid "Key Shortcut List" +msgid "General Shortcut list" +msgstr "Tastenkürzel Liste" + +#: AppGUI/MainGUI.py:3978 +msgid "SHOW SHORTCUT LIST" +msgstr "Verknüpfungsliste anzeigen" + +#: AppGUI/MainGUI.py:3978 +msgid "Switch to Project Tab" +msgstr "Wechseln Sie zur Registerkarte Projekt" + +#: AppGUI/MainGUI.py:3978 +msgid "Switch to Selected Tab" +msgstr "Wechseln Sie zur ausgewählten Registerkarte" + +#: AppGUI/MainGUI.py:3979 +msgid "Switch to Tool Tab" +msgstr "Wechseln Sie zur Werkzeugregisterkarte" + +#: AppGUI/MainGUI.py:3980 +msgid "New Gerber" +msgstr "Neuer Gerber" + +#: AppGUI/MainGUI.py:3980 +msgid "Edit Object (if selected)" +msgstr "Objekt bearbeiten (falls ausgewählt)" + +#: AppGUI/MainGUI.py:3980 App_Main.py:5831 +msgid "Grid On/Off" +msgstr "Raster ein/aus" + +#: AppGUI/MainGUI.py:3980 +msgid "Jump to Coordinates" +msgstr "Springe zu den Koordinaten" + +#: AppGUI/MainGUI.py:3981 +msgid "New Excellon" +msgstr "Neuer Excellon" + +#: AppGUI/MainGUI.py:3981 +msgid "Move Obj" +msgstr "Objekt verschieben" + +#: AppGUI/MainGUI.py:3981 +msgid "New Geometry" +msgstr "Neue Geometrie" + +#: AppGUI/MainGUI.py:3981 +msgid "Change Units" +msgstr "Einheiten ändern" + +#: AppGUI/MainGUI.py:3982 +msgid "Open Properties Tool" +msgstr "Öffnen Sie das Eigenschaften-Tool" + +#: AppGUI/MainGUI.py:3982 +msgid "Rotate by 90 degree CW" +msgstr "Um 90 Grad im Uhrzeigersinn drehen" + +#: AppGUI/MainGUI.py:3982 +msgid "Shell Toggle" +msgstr "Shell umschalten" + +#: AppGUI/MainGUI.py:3983 +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\")" + +#: AppGUI/MainGUI.py:3984 +msgid "Flip on X_axis" +msgstr "Auf X-Achse spiegeln" + +#: AppGUI/MainGUI.py:3984 +msgid "Flip on Y_axis" +msgstr "Auf Y-Achse spiegeln" + +#: AppGUI/MainGUI.py:3987 +msgid "Copy Obj" +msgstr "Objekt kopieren" + +#: AppGUI/MainGUI.py:3987 +msgid "Open Tools Database" +msgstr "Werkzeugdatenbank öffnen" + +#: AppGUI/MainGUI.py:3988 +msgid "Open Excellon File" +msgstr "Öffnen Sie die Excellon-Datei" + +#: AppGUI/MainGUI.py:3988 +msgid "Open Gerber File" +msgstr "Öffnen Sie die Gerber-Datei" + +#: AppGUI/MainGUI.py:3988 +msgid "New Project" +msgstr "Neues Projekt" + +#: AppGUI/MainGUI.py:3989 App_Main.py:6876 App_Main.py:6879 +msgid "Open Project" +msgstr "Projekt öffnen" + +#: AppGUI/MainGUI.py:3989 AppTools/ToolPDF.py:41 +msgid "PDF Import Tool" +msgstr "PDF-Importwerkzeug" + +#: AppGUI/MainGUI.py:3989 +msgid "Save Project" +msgstr "Projekt speichern" + +#: AppGUI/MainGUI.py:3989 +msgid "Toggle Plot Area" +msgstr "Zeichenbereich umschalten0" + +#: AppGUI/MainGUI.py:3992 +msgid "Copy Obj_Name" +msgstr "Kopieren Sie den Namen des Objekts" + +#: AppGUI/MainGUI.py:3993 +msgid "Toggle Code Editor" +msgstr "Code-Editor umschalten" + +#: AppGUI/MainGUI.py:3993 +msgid "Toggle the axis" +msgstr "Achse umschalten" + +#: AppGUI/MainGUI.py:3993 AppGUI/MainGUI.py:4192 AppGUI/MainGUI.py:4279 +#: AppGUI/MainGUI.py:4401 +msgid "Distance Minimum Tool" +msgstr "Mindestabstand Werkzeug" + +#: AppGUI/MainGUI.py:3994 +msgid "Open Preferences Window" +msgstr "Öffnen Sie das Einstellungsfenster" + +#: AppGUI/MainGUI.py:3995 +msgid "Rotate by 90 degree CCW" +msgstr "Um 90 Grad gegen den Uhrzeigersinn drehen" + +#: AppGUI/MainGUI.py:3995 +msgid "Run a Script" +msgstr "Führen Sie ein Skript aus" + +#: AppGUI/MainGUI.py:3995 +msgid "Toggle the workspace" +msgstr "Arbeitsbereich umschalten" + +#: AppGUI/MainGUI.py:3995 +msgid "Skew on X axis" +msgstr "Neigung auf der X-Achse" + +#: AppGUI/MainGUI.py:3996 +msgid "Skew on Y axis" +msgstr "Neigung auf der Y-Achse" + +#: AppGUI/MainGUI.py:3999 +msgid "2-Sided PCB Tool" +msgstr "2-seitiges PCB Werkzeug" + +#: AppGUI/MainGUI.py:3999 +msgid "Transformations Tool" +msgstr "Transformations-Tool" + +#: AppGUI/MainGUI.py:4001 +msgid "Solder Paste Dispensing Tool" +msgstr "Lotpasten-Dosierwerkzeug" + +#: AppGUI/MainGUI.py:4002 +msgid "Film PCB Tool" +msgstr "Film PCB Werkzeug" + +#: AppGUI/MainGUI.py:4002 +msgid "Non-Copper Clearing Tool" +msgstr "Nicht-Kupfer-Räumwerkzeug" + +#: AppGUI/MainGUI.py:4003 +msgid "Paint Area Tool" +msgstr "Malbereichswerkzeug" + +#: AppGUI/MainGUI.py:4003 +msgid "Rules Check Tool" +msgstr "Regelprüfwerkzeug" + +#: AppGUI/MainGUI.py:4004 +msgid "View File Source" +msgstr "Dateiquelle anzeigen" + +#: AppGUI/MainGUI.py:4005 +msgid "Cutout PCB Tool" +msgstr "Ausschnitt PCB Tool" + +#: AppGUI/MainGUI.py:4005 +msgid "Enable all Plots" +msgstr "Alle Zeichnungen aktivieren" + +#: AppGUI/MainGUI.py:4005 +msgid "Disable all Plots" +msgstr "Alle Zeichnungen deaktivieren" + +#: AppGUI/MainGUI.py:4005 +msgid "Disable Non-selected Plots" +msgstr "Nicht ausgewählte Zeichnungen deaktiv" + +#: AppGUI/MainGUI.py:4006 +msgid "Toggle Full Screen" +msgstr "Vollbild umschalten" + +#: AppGUI/MainGUI.py:4009 +msgid "Abort current task (gracefully)" +msgstr "Aktuelle Aufgabe abbrechen (ordnungsgemäß)" + +#: AppGUI/MainGUI.py:4012 +msgid "Save Project As" +msgstr "Projekt speichern als" + +#: AppGUI/MainGUI.py:4013 +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" + +#: AppGUI/MainGUI.py:4016 +msgid "Open Online Manual" +msgstr "Online-Handbuch öffnen" + +#: AppGUI/MainGUI.py:4017 +msgid "Open Online Tutorials" +msgstr "Öffnen Sie Online-Tutorials" + +#: AppGUI/MainGUI.py:4017 +msgid "Refresh Plots" +msgstr "Zeichnungen aktualisieren" + +#: AppGUI/MainGUI.py:4017 AppTools/ToolSolderPaste.py:509 +msgid "Delete Object" +msgstr "Objekt löschen" + +#: AppGUI/MainGUI.py:4017 +msgid "Alternate: Delete Tool" +msgstr "Alternative: Werkzeug löschen" + +#: AppGUI/MainGUI.py:4018 +msgid "(left to Key_1)Toggle Notebook Area (Left Side)" +msgstr "(links neben Taste_1) Notebook-Bereich umschalten (linke Seite)" + +#: AppGUI/MainGUI.py:4018 +msgid "En(Dis)able Obj Plot" +msgstr "Objektzeichnung (de)aktivieren" + +#: AppGUI/MainGUI.py:4019 +msgid "Deselects all objects" +msgstr "Hebt die Auswahl aller Objekte auf" + +#: AppGUI/MainGUI.py:4033 +msgid "Editor Shortcut list" +msgstr "Editor-Verknüpfungsliste" + +#: AppGUI/MainGUI.py:4187 +msgid "GEOMETRY EDITOR" +msgstr "GEOMETRIE-EDITOR" + +#: AppGUI/MainGUI.py:4187 +msgid "Draw an Arc" +msgstr "Zeichnen Sie einen Bogen" + +#: AppGUI/MainGUI.py:4187 +msgid "Copy Geo Item" +msgstr "Geo-Objekt kopieren" + +#: AppGUI/MainGUI.py:4188 +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" + +#: AppGUI/MainGUI.py:4188 +msgid "Polygon Intersection Tool" +msgstr "Werkzeug Polygonschnitt" + +#: AppGUI/MainGUI.py:4189 +msgid "Geo Paint Tool" +msgstr "Geo-Malwerkzeug" + +#: AppGUI/MainGUI.py:4189 AppGUI/MainGUI.py:4278 AppGUI/MainGUI.py:4398 +msgid "Jump to Location (x, y)" +msgstr "Zum Standort springen (x, y)" + +#: AppGUI/MainGUI.py:4189 +msgid "Toggle Corner Snap" +msgstr "Eckfang umschalten" + +#: AppGUI/MainGUI.py:4189 +msgid "Move Geo Item" +msgstr "Geo-Objekt verschieben" + +#: AppGUI/MainGUI.py:4190 +msgid "Within Add Arc will cycle through the ARC modes" +msgstr "Innerhalb von Bogen hinzufügen werden die ARC-Modi durchlaufen" + +#: AppGUI/MainGUI.py:4190 +msgid "Draw a Polygon" +msgstr "Zeichnen Sie ein Polygon" + +#: AppGUI/MainGUI.py:4190 +msgid "Draw a Circle" +msgstr "Zeichne einen Kreis" + +#: AppGUI/MainGUI.py:4191 +msgid "Draw a Path" +msgstr "Zeichne einen Pfad" + +#: AppGUI/MainGUI.py:4191 +msgid "Draw Rectangle" +msgstr "Rechteck zeichnen" + +#: AppGUI/MainGUI.py:4191 +msgid "Polygon Subtraction Tool" +msgstr "Polygon-Subtraktionswerkzeug" + +#: AppGUI/MainGUI.py:4191 +msgid "Add Text Tool" +msgstr "Textwerkzeug hinzufügen" + +#: AppGUI/MainGUI.py:4192 +msgid "Polygon Union Tool" +msgstr "Polygonverbindungswerkzeug" + +#: AppGUI/MainGUI.py:4192 +msgid "Flip shape on X axis" +msgstr "Form auf der X-Achse spiegeln" + +#: AppGUI/MainGUI.py:4192 +msgid "Flip shape on Y axis" +msgstr "Form auf der Y-Achse spiegeln" + +#: AppGUI/MainGUI.py:4193 +msgid "Skew shape on X axis" +msgstr "Neigung auf der X-Achse" + +#: AppGUI/MainGUI.py:4193 +msgid "Skew shape on Y axis" +msgstr "Neigung auf der Y-Achse" + +#: AppGUI/MainGUI.py:4193 +msgid "Editor Transformation Tool" +msgstr "Editor-Transformationstool" + +#: AppGUI/MainGUI.py:4194 +msgid "Offset shape on X axis" +msgstr "Versetzte Form auf der X-Achse" + +#: AppGUI/MainGUI.py:4194 +msgid "Offset shape on Y axis" +msgstr "Versetzte Form auf der Y-Achse" + +#: AppGUI/MainGUI.py:4195 AppGUI/MainGUI.py:4281 AppGUI/MainGUI.py:4403 +msgid "Save Object and Exit Editor" +msgstr "Objekt speichern und Editor beenden" + +#: AppGUI/MainGUI.py:4195 +msgid "Polygon Cut Tool" +msgstr "Polygon-Schneidewerkzeug" + +#: AppGUI/MainGUI.py:4196 +msgid "Rotate Geometry" +msgstr "Geometrie drehen" + +#: AppGUI/MainGUI.py:4196 +msgid "Finish drawing for certain tools" +msgstr "Beenden Sie das Zeichnen für bestimmte Werkzeuge" + +#: AppGUI/MainGUI.py:4196 AppGUI/MainGUI.py:4281 AppGUI/MainGUI.py:4401 +msgid "Abort and return to Select" +msgstr "Abbrechen und zurück zu Auswählen" + +#: AppGUI/MainGUI.py:4277 +msgid "EXCELLON EDITOR" +msgstr "EXCELLON EDITOR" + +#: AppGUI/MainGUI.py:4277 +msgid "Copy Drill(s)" +msgstr "Bohrer kopieren" + +#: AppGUI/MainGUI.py:4278 +msgid "Move Drill(s)" +msgstr "Bohrer verschieben" + +#: AppGUI/MainGUI.py:4279 +msgid "Add a new Tool" +msgstr "Fügen Sie ein neues Werkzeug hinzu" + +#: AppGUI/MainGUI.py:4280 +msgid "Delete Drill(s)" +msgstr "Bohrer löschen" + +#: AppGUI/MainGUI.py:4280 +msgid "Alternate: Delete Tool(s)" +msgstr "Alternative: Werkzeug (e) löschen" + +#: AppGUI/MainGUI.py:4397 +msgid "GERBER EDITOR" +msgstr "GERBER EDITOR" + +#: AppGUI/MainGUI.py:4397 +msgid "Add Disc" +msgstr "Fügen Sie eine Scheiben hinzu" + +#: AppGUI/MainGUI.py:4397 +msgid "Add SemiDisc" +msgstr "Halbschibe hinzufügen" + +#: AppGUI/MainGUI.py:4399 +msgid "Within Track & Region Tools will cycle in REVERSE the bend modes" +msgstr "" +"Innerhalb von Track- und Region-Werkzeugen werden die Biegemodi umgekehrt" + +#: AppGUI/MainGUI.py:4400 +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" + +#: AppGUI/MainGUI.py:4401 +msgid "Alternate: Delete Apertures" +msgstr "Alternative: Löschen Sie die Blenden" + +#: AppGUI/MainGUI.py:4402 +msgid "Eraser Tool" +msgstr "Radiergummi" + +#: AppGUI/MainGUI.py:4403 +#: AppGUI/preferences/gerber/GerberEditorPrefGroupUI.py:220 +msgid "Mark Area Tool" +msgstr "Bereich markieren Werkzeug" + +#: AppGUI/MainGUI.py:4403 +msgid "Poligonize Tool" +msgstr "Werkzeug Polygonisieren" + +#: AppGUI/MainGUI.py:4403 +msgid "Transformation Tool" +msgstr "Transformationswerkzeug" + +#: AppGUI/ObjectUI.py:38 +msgid "FlatCAM Object" +msgstr "FlatCAM-Objekt" + +#: AppGUI/ObjectUI.py:78 +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 ist für Anfänger geeignet. Viele Parameter\n" +"werden in diesem Modus für den Benutzer ausgeblendet.\n" +"Im ADVANCED-Modus werden alle Parameter verfügbar.\n" +"\n" +"Um die Anwendung LEVEL zu ändern, gehen Sie zu:\n" +"Bearbeiten -> Einstellungen -> Allgemein und überprüfen Sie:\n" +"Optionsfeld \"Anwendungsebene\"." + +#: AppGUI/ObjectUI.py:111 +msgid "Geometrical transformations of the current object." +msgstr "Geometrische Transformationen des aktuellen Objekts." + +#: AppGUI/ObjectUI.py:120 +msgid "" +"Factor by which to multiply\n" +"geometric features of this object.\n" +"Expressions are allowed. E.g: 1/25.4" +msgstr "" +"Faktor, mit dem sich multiplizieren soll\n" +"geometrische Merkmale dieses Objekts.\n" +"Ausdrücke sind erlaubt. Zum Beispiel: 1 / 25.4" + +#: AppGUI/ObjectUI.py:127 +msgid "Perform scaling operation." +msgstr "Führen Sie die Skalierung durch." + +#: AppGUI/ObjectUI.py:138 +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 "" +"Betrag, um den das Objekt verschoben werden soll\n" +"in der x- und y-Achse im (x, y) -Format.\n" +"Ausdrücke sind erlaubt. Zum Beispiel: (1/3.2, 0.5*3)" + +#: AppGUI/ObjectUI.py:145 +msgid "Perform the offset operation." +msgstr "Führen Sie den Versatzvorgang aus." + +#: AppGUI/ObjectUI.py:157 AppGUI/ObjectUI.py:164 AppTool.py:281 AppTool.py:287 +msgid "Edited value is out of range" +msgstr "Der bearbeitete Wert liegt außerhalb des Bereichs" + +#: AppGUI/ObjectUI.py:159 AppGUI/ObjectUI.py:166 AppTool.py:283 AppTool.py:289 +msgid "Edited value is within limits." +msgstr "Der bearbeitete Wert liegt innerhalb der Grenzen." + +#: AppGUI/ObjectUI.py:178 AppTools/ToolCorners.py:55 +msgid "Gerber Object" +msgstr "Gerber-Objekt" + +#: AppGUI/ObjectUI.py:187 AppGUI/ObjectUI.py:730 AppGUI/ObjectUI.py:1528 +#: AppGUI/ObjectUI.py:2335 AppGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:30 +#: AppGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:33 +#: AppGUI/preferences/geometry/GeometryGenPrefGroupUI.py:31 +#: AppGUI/preferences/gerber/GerberGenPrefGroupUI.py:31 +msgid "Plot Options" +msgstr "Diagrammoptionen" + +#: AppGUI/ObjectUI.py:193 AppGUI/ObjectUI.py:731 +#: AppGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:45 +#: AppGUI/preferences/gerber/GerberGenPrefGroupUI.py:38 +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:119 +#: AppTools/ToolCopperThieving.py:191 +msgid "Solid" +msgstr "Solide" + +#: AppGUI/ObjectUI.py:195 AppGUI/preferences/gerber/GerberGenPrefGroupUI.py:40 +msgid "Solid color polygons." +msgstr "Einfarbige Polygone." + +#: AppGUI/ObjectUI.py:201 +msgid "Multi-Color" +msgstr "M-farbig" + +#: AppGUI/ObjectUI.py:203 AppGUI/preferences/gerber/GerberGenPrefGroupUI.py:47 +msgid "Draw polygons in different colors." +msgstr "Zeichnen Sie Polygone in verschiedenen Farben." + +#: AppGUI/ObjectUI.py:209 AppGUI/ObjectUI.py:769 +#: AppGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:39 +#: AppGUI/preferences/geometry/GeometryGenPrefGroupUI.py:35 +#: AppGUI/preferences/gerber/GerberGenPrefGroupUI.py:52 +msgid "Plot" +msgstr "Zeichn" + +#: AppGUI/ObjectUI.py:211 AppGUI/ObjectUI.py:771 AppGUI/ObjectUI.py:1588 +#: AppGUI/ObjectUI.py:2445 AppGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:41 +#: AppGUI/preferences/geometry/GeometryGenPrefGroupUI.py:37 +#: AppGUI/preferences/gerber/GerberGenPrefGroupUI.py:54 +msgid "Plot (show) this object." +msgstr "Plotten (zeigen) dieses Objekt." + +#: AppGUI/ObjectUI.py:239 +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 "" +"Schaltet die Anzeige der Gerber-Apertur-Tabelle um.\n" +"Wenn das Kontrollkästchen deaktiviert ist, werden alle Markierungsformen " +"gelöscht\n" +"das sind auf leinwand gezeichnet." + +#: AppGUI/ObjectUI.py:249 +msgid "Mark All" +msgstr "Alles mark" + +#: AppGUI/ObjectUI.py:251 +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 "" +"Wenn diese Option aktiviert ist, werden alle Öffnungen angezeigt.\n" +"Wenn das Kontrollkästchen deaktiviert ist, werden alle Markierungsformen " +"gelöscht\n" +"das sind auf leinwand gezeichnet." + +#: AppGUI/ObjectUI.py:279 +msgid "Mark the aperture instances on canvas." +msgstr "Markieren Sie die Blendeninstanzen auf der Leinwand." + +#: AppGUI/ObjectUI.py:291 AppGUI/preferences/gerber/GerberOptPrefGroupUI.py:32 +msgid "Isolation Routing" +msgstr "Isolierungsrouting" + +#: AppGUI/ObjectUI.py:293 AppGUI/preferences/gerber/GerberOptPrefGroupUI.py:34 +msgid "" +"Create a Geometry object with\n" +"toolpaths to cut outside polygons." +msgstr "" +"Erstellen Sie ein Geometrieobjekt mit\n" +"Werkzeugwege zum Schneiden von \n" +"äußeren Polygonen." + +#: AppGUI/ObjectUI.py:311 +#: AppGUI/preferences/gerber/GerberAdvOptPrefGroupUI.py:69 +msgid "" +"Choose which 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 "" +"Wählen Sie das Werkzeug für die Gerber-Isolierung aus:\n" +"\"Rund\" oder \"V-Form\".\n" +"Wenn die 'V-Form' ausgewählt ist, dann das Werkzeug\n" +"Der Durchmesser hängt von der gewählten Schnitttiefe ab." + +#: AppGUI/ObjectUI.py:317 +msgid "V-Shape" +msgstr "V-Form" + +#: AppGUI/ObjectUI.py:323 AppGUI/ObjectUI.py:1774 +#: AppGUI/preferences/gerber/GerberAdvOptPrefGroupUI.py:81 +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:72 +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:78 +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:85 AppTools/ToolNCC.py:233 +#: AppTools/ToolNCC.py:240 AppTools/ToolPaint.py:215 +msgid "V-Tip Dia" +msgstr "Stichelspitzen-Durchm" + +#: AppGUI/ObjectUI.py:325 AppGUI/ObjectUI.py:1777 +#: AppGUI/preferences/gerber/GerberAdvOptPrefGroupUI.py:83 +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:74 +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:80 AppTools/ToolNCC.py:235 +#: AppTools/ToolPaint.py:217 +msgid "The tip diameter for V-Shape Tool" +msgstr "Der Spitzendurchmesser für das V-Shape-Werkzeug" + +#: AppGUI/ObjectUI.py:336 AppGUI/ObjectUI.py:1789 +#: AppGUI/preferences/gerber/GerberAdvOptPrefGroupUI.py:94 +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:84 +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:91 +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:99 AppTools/ToolNCC.py:246 +#: AppTools/ToolNCC.py:254 AppTools/ToolPaint.py:228 +msgid "V-Tip Angle" +msgstr "Stichel-Winkel" + +#: AppGUI/ObjectUI.py:338 AppGUI/ObjectUI.py:1792 +#: AppGUI/preferences/gerber/GerberAdvOptPrefGroupUI.py:96 +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:86 +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:93 AppTools/ToolNCC.py:248 +#: AppTools/ToolPaint.py:230 +msgid "" +"The tip angle for V-Shape Tool.\n" +"In degree." +msgstr "" +"Der Spitzenwinkel für das Stichel-Werkzeug.\n" +"In grad." + +#: AppGUI/ObjectUI.py:352 AppGUI/ObjectUI.py:1808 +#: AppGUI/preferences/geometry/GeometryOptPrefGroupUI.py:50 +#: AppGUI/preferences/gerber/GerberAdvOptPrefGroupUI.py:109 +#: AppGUI/preferences/tools/ToolsCutoutPrefGroupUI.py:61 +#: AppObjects/FlatCAMGeometry.py:1229 AppTools/ToolCutOut.py:141 +msgid "" +"Cutting depth (negative)\n" +"below the copper surface." +msgstr "" +"Schnitttiefe (negativ)\n" +"unter der Kupferoberfläche." + +#: AppGUI/ObjectUI.py:366 +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 "" +"Durchmesser des Schneidewerkzeugs.\n" +"Wenn Sie einen Isolationspfad haben möchten\n" +"in der tatsächlichen Form des Gerber\n" +"verwenden Sie einen negativen Wert für\n" +"dieser Parameter." + +#: AppGUI/ObjectUI.py:382 AppGUI/preferences/gerber/GerberOptPrefGroupUI.py:56 +msgid "# Passes" +msgstr "Durchgang" + +#: AppGUI/ObjectUI.py:384 AppGUI/preferences/gerber/GerberOptPrefGroupUI.py:58 +msgid "" +"Width of the isolation gap in\n" +"number (integer) of tool widths." +msgstr "" +"Breite der Isolationslücke in\n" +"Anzahl (Ganzzahl) der Werkzeugbreiten." + +#: AppGUI/ObjectUI.py:395 AppGUI/preferences/gerber/GerberOptPrefGroupUI.py:68 +msgid "Pass overlap" +msgstr "Passüberlappung" + +#: AppGUI/ObjectUI.py:397 AppGUI/preferences/gerber/GerberOptPrefGroupUI.py:70 +msgid "How much (percentage) of the tool width to overlap each tool pass." +msgstr "" +"Wie viel (Prozent) der Werkzeugbreite, um jeden Werkzeugdurchlauf zu " +"überlappen." + +#: AppGUI/ObjectUI.py:411 +#: AppGUI/preferences/geometry/GeometryEditorPrefGroupUI.py:58 +#: AppGUI/preferences/gerber/GerberOptPrefGroupUI.py:97 +msgid "" +"Milling type:\n" +"- climb / best for precision milling and to reduce tool usage\n" +"- conventional / useful when there is no backlash compensation" +msgstr "" +"Fräsart:\n" +"- Besteigung für präzises Fräsen und zur Verringerung des " +"Werkzeugverbrauchs\n" +"- konventionell / nützlich, wenn kein Spielausgleich vorliegt" + +#: AppGUI/ObjectUI.py:421 +msgid "Combine" +msgstr "Kombinieren" + +#: AppGUI/ObjectUI.py:423 AppGUI/preferences/gerber/GerberOptPrefGroupUI.py:109 +msgid "Combine all passes into one object" +msgstr "Kombinieren Sie alle Durchgänge in einem Objekt" + +#: AppGUI/ObjectUI.py:427 +#: AppGUI/preferences/gerber/GerberAdvOptPrefGroupUI.py:43 +msgid "\"Follow\"" +msgstr "\"Folgen\"" + +#: AppGUI/ObjectUI.py:428 +#: AppGUI/preferences/gerber/GerberAdvOptPrefGroupUI.py:45 +msgid "" +"Generate a 'Follow' geometry.\n" +"This means that it will cut through\n" +"the middle of the trace." +msgstr "" +"Erzeugen Sie eine 'Follow'-Geometrie.\n" +"Dies bedeutet, dass es durchschneiden wird\n" +"die Mitte der Spur." + +#: AppGUI/ObjectUI.py:434 +msgid "Except" +msgstr "Außer" + +#: AppGUI/ObjectUI.py:437 +msgid "" +"When the isolation geometry is generated,\n" +"by checking this, the area of the object below\n" +"will be subtracted from the isolation geometry." +msgstr "" +"Wenn die Isolationsgeometrie generiert wird,\n" +"indem Sie dies überprüfen, wird der Bereich des Objekts unten\n" +"wird von der Isolationsgeometrie abgezogen." + +#: AppGUI/ObjectUI.py:450 +#: AppGUI/preferences/tools/ToolsPanelizePrefGroupUI.py:97 +#: AppObjects/FlatCAMGerber.py:239 AppObjects/FlatCAMGerber.py:327 +#: AppTools/ToolAlignObjects.py:73 AppTools/ToolAlignObjects.py:109 +#: AppTools/ToolCalibration.py:196 AppTools/ToolCalibration.py:631 +#: AppTools/ToolCalibration.py:648 AppTools/ToolCalibration.py:807 +#: AppTools/ToolCalibration.py:815 AppTools/ToolCopperThieving.py:144 +#: AppTools/ToolCopperThieving.py:158 AppTools/ToolCopperThieving.py:604 +#: AppTools/ToolCutOut.py:91 AppTools/ToolDblSided.py:224 +#: AppTools/ToolFilm.py:68 AppTools/ToolFilm.py:91 AppTools/ToolImage.py:49 +#: AppTools/ToolImage.py:252 AppTools/ToolImage.py:273 AppTools/ToolNCC.py:96 +#: AppTools/ToolNCC.py:558 AppTools/ToolNCC.py:1300 AppTools/ToolPaint.py:501 +#: AppTools/ToolPaint.py:705 AppTools/ToolPanelize.py:116 +#: AppTools/ToolPanelize.py:210 AppTools/ToolPanelize.py:385 +#: AppTools/ToolPanelize.py:402 +msgid "Gerber" +msgstr "Gerber" + +#: AppGUI/ObjectUI.py:457 AppTools/ToolNCC.py:86 AppTools/ToolPaint.py:79 +msgid "Obj Type" +msgstr "Obj-Typ" + +#: AppGUI/ObjectUI.py:459 +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 "" +"Geben Sie den Objekttyp an, der von der Isolation ausgenommen werden soll.\n" +"Es kann vom Typ Gerber oder Geometrie sein.\n" +"Was hier ausgewählt wird, bestimmt die Art\n" +"von Objekten, die das Kombinationsfeld \"Objekt\" füllen." + +#: AppGUI/ObjectUI.py:472 AppGUI/ObjectUI.py:1324 AppGUI/ObjectUI.py:2158 +#: AppGUI/preferences/tools/Tools2CalPrefGroupUI.py:48 +#: AppTools/ToolCalibration.py:186 AppTools/ToolNCC.py:109 +#: AppTools/ToolPaint.py:102 AppTools/ToolPanelize.py:98 +#: AppTools/ToolQRCode.py:78 +msgid "Object" +msgstr "Objekt" + +#: AppGUI/ObjectUI.py:473 +msgid "Object whose area will be removed from isolation geometry." +msgstr "Objekt, dessen Bereich aus der Isolationsgeometrie entfernt wird." + +#: AppGUI/ObjectUI.py:480 AppGUI/preferences/gerber/GerberOptPrefGroupUI.py:82 +msgid "Scope" +msgstr "Wertebereich" + +#: AppGUI/ObjectUI.py:482 AppGUI/preferences/gerber/GerberOptPrefGroupUI.py:84 +msgid "" +"Isolation scope. Choose what to isolate:\n" +"- 'All' -> Isolate all the polygons in the object\n" +"- 'Selection' -> Isolate a selection of polygons." +msgstr "" +"Isolationsmenge. Was soll isoliert werden:\n" +"- 'Alles' -> Alle Polygone im Objekt isolieren\n" +"- ' Auswahl' -> Eine Auswahl der polygone isolieren." + +#: AppGUI/ObjectUI.py:487 +#: AppGUI/preferences/general/GeneralGUIPrefGroupUI.py:307 +#: AppGUI/preferences/gerber/GerberOptPrefGroupUI.py:89 +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:311 +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:258 +#: AppTools/ToolNCC.py:539 AppTools/ToolPaint.py:455 +msgid "Selection" +msgstr "Auswahl" + +#: AppGUI/ObjectUI.py:495 +#: AppGUI/preferences/gerber/GerberAdvOptPrefGroupUI.py:122 +msgid "Isolation Type" +msgstr "Isolierungsart" + +#: AppGUI/ObjectUI.py:497 +#: AppGUI/preferences/gerber/GerberAdvOptPrefGroupUI.py:124 +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 "" +"Wählen Sie, wie die Isolation ausgeführt wird:\n" +"- Vollständig: Es werden alle Polygone isoliert\n" +"- Ext: Die ausserhalb liegenden Polygone werden isoliert\n" +"- Int: Die innerhalb liegenden Polygone werden isoliert\n" +"Achtung Ext ist fast immer möglich (mit dem richtigen Werkzeug)\n" +"wohingegen \"Int\" Isolation nur möglich ist, wenn es ein Loch \n" +"innerhalb des Polygons gibt (also z.B. ein Torus)" + +#: AppGUI/ObjectUI.py:506 +#: AppGUI/preferences/gerber/GerberAdvOptPrefGroupUI.py:133 +#: AppGUI/preferences/gerber/GerberAdvOptPrefGroupUI.py:154 +msgid "Full" +msgstr "Voll" + +#: AppGUI/ObjectUI.py:507 +msgid "Ext" +msgstr "Ausserhalb" + +#: AppGUI/ObjectUI.py:508 +msgid "Int" +msgstr "Innerhalb" + +#: AppGUI/ObjectUI.py:513 +msgid "Generate Isolation Geometry" +msgstr "Isolationsgeometrie erzeugen" + +#: AppGUI/ObjectUI.py:521 +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 "" +"Erstellen Sie ein Geometrieobjekt mit zu schneidenden Werkzeugwegen\n" +"Isolierung außen, innen oder auf beiden Seiten des\n" +"Objekt. Für ein Gerber-Objekt bedeutet draußen außerhalb\n" +"der Gerber-Funktion und inside bedeutet inside\n" +"die Gerber-Funktion, wenn überhaupt möglich. Das heisst\n" +"Nur wenn das Gerber-Feature Öffnungen enthält, können sie\n" +"wird isoliert werden. Wenn es darum geht, die Isolation abzuschneiden\n" +"Verwenden Sie in der Gerber-Funktion ein negatives Werkzeug\n" +"Durchmesser oben." + +#: AppGUI/ObjectUI.py:533 +msgid "Buffer Solid Geometry" +msgstr "Festkörpergeometrie puffern" + +#: AppGUI/ObjectUI.py:535 +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 "" +"Diese Schaltfläche wird nur bei der Gerber-Datei angezeigt\n" +"wird ohne Pufferung geladen.\n" +"Durch Klicken auf diese Schaltfläche wird die gepufferte Geometrie erstellt\n" +"für die Isolierung erforderlich." + +#: AppGUI/ObjectUI.py:567 +msgid "Clear N-copper" +msgstr "N-Kupfer löschen" + +#: AppGUI/ObjectUI.py:569 AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:33 +msgid "" +"Create a Geometry object with\n" +"toolpaths to cut all non-copper regions." +msgstr "" +"Erstellen Sie ein Geometrieobjekt mit\n" +"Werkzeugwege, um alle Nicht-Kupfer-Bereiche zu schneiden." + +#: AppGUI/ObjectUI.py:576 AppGUI/ObjectUI.py:2289 AppTools/ToolNCC.py:599 +msgid "" +"Create the Geometry Object\n" +"for non-copper routing." +msgstr "" +"Erstellen Sie das Geometrieobjekt\n" +"für kupferfreies Routing." + +#: AppGUI/ObjectUI.py:589 +msgid "Board cutout" +msgstr "Kartenausschnitt" + +#: AppGUI/ObjectUI.py:591 AppGUI/preferences/tools/ToolsCutoutPrefGroupUI.py:34 +msgid "" +"Create toolpaths to cut around\n" +"the PCB and separate it from\n" +"the original board." +msgstr "" +"Erstellen Sie Werkzeugwege zum Schneiden\n" +"die PCB und trennen Sie es von\n" +"das ursprüngliche Brett." + +#: AppGUI/ObjectUI.py:598 +msgid "" +"Generate the geometry for\n" +"the board cutout." +msgstr "" +"Generieren Sie die Geometrie für\n" +"der Brettausschnitt." + +#: AppGUI/ObjectUI.py:616 AppGUI/preferences/gerber/GerberOptPrefGroupUI.py:119 +msgid "Non-copper regions" +msgstr "Regionen ohne Kupfer" + +#: AppGUI/ObjectUI.py:618 AppGUI/preferences/gerber/GerberOptPrefGroupUI.py:121 +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 "" +"Erstellen Sie Polygone für die\n" +"Bereiche ohne Kupfer auf der Leiterplatte.\n" +"Entspricht der Umkehrung davon\n" +"Objekt. Kann verwendet werden, um alle zu entfernen\n" +"Kupfer aus einer bestimmten Region." + +#: AppGUI/ObjectUI.py:628 AppGUI/ObjectUI.py:669 +#: AppGUI/preferences/gerber/GerberOptPrefGroupUI.py:133 +#: AppGUI/preferences/gerber/GerberOptPrefGroupUI.py:166 +msgid "Boundary Margin" +msgstr "Grenzmarge" + +#: AppGUI/ObjectUI.py:630 AppGUI/preferences/gerber/GerberOptPrefGroupUI.py:135 +msgid "" +"Specify the edge of the PCB\n" +"by drawing a box around all\n" +"objects with this minimum\n" +"distance." +msgstr "" +"Bestimmen Sie den Rand der Leiterplatte\n" +"indem Sie eine Box um alle ziehen\n" +"Objekte mit diesem Minimum\n" +"Entfernung." + +#: AppGUI/ObjectUI.py:645 AppGUI/ObjectUI.py:683 +#: AppGUI/preferences/gerber/GerberOptPrefGroupUI.py:148 +#: AppGUI/preferences/gerber/GerberOptPrefGroupUI.py:179 +msgid "Rounded Geo" +msgstr "Abgerundete Geo" + +#: AppGUI/ObjectUI.py:647 AppGUI/preferences/gerber/GerberOptPrefGroupUI.py:150 +msgid "Resulting geometry will have rounded corners." +msgstr "Die resultierende Geometrie hat abgerundete Ecken." + +#: AppGUI/ObjectUI.py:651 AppGUI/ObjectUI.py:692 +#: AppTools/ToolSolderPaste.py:134 +msgid "Generate Geo" +msgstr "Geo erzeugen" + +#: AppGUI/ObjectUI.py:661 AppGUI/preferences/gerber/GerberOptPrefGroupUI.py:160 +#: AppGUI/preferences/tools/Tools2QRCodePrefGroupUI.py:137 +#: AppTools/ToolPanelize.py:99 AppTools/ToolQRCode.py:192 +msgid "Bounding Box" +msgstr "Begrenzungsrahmen" + +#: AppGUI/ObjectUI.py:663 +msgid "" +"Create a geometry surrounding the Gerber object.\n" +"Square shape." +msgstr "" +"Erstellen Sie eine Geometrie, die das Gerber-Objekt umgibt.\n" +"Quadratische Form." + +#: AppGUI/ObjectUI.py:671 AppGUI/preferences/gerber/GerberOptPrefGroupUI.py:168 +msgid "" +"Distance of the edges of the box\n" +"to the nearest polygon." +msgstr "" +"Abstand der Kanten der Box\n" +"zum nächsten Polygon." + +#: AppGUI/ObjectUI.py:685 AppGUI/preferences/gerber/GerberOptPrefGroupUI.py:181 +msgid "" +"If the bounding box is \n" +"to have rounded corners\n" +"their radius is equal to\n" +"the margin." +msgstr "" +"Wenn der Begrenzungsrahmen ist\n" +"abgerundete Ecken haben\n" +"ihr Radius ist gleich\n" +"der Abstand." + +#: AppGUI/ObjectUI.py:694 +msgid "Generate the Geometry object." +msgstr "Generieren Sie das Geometrieobjekt." + +#: AppGUI/ObjectUI.py:721 +msgid "Excellon Object" +msgstr "Excellon-Objekt" + +#: AppGUI/ObjectUI.py:733 +msgid "Solid circles." +msgstr "Feste Kreise." + +#: AppGUI/ObjectUI.py:781 AppGUI/ObjectUI.py:876 AppGUI/ObjectUI.py:2466 +#: AppGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:71 +#: AppTools/ToolProperties.py:166 +msgid "Drills" +msgstr "Bohrer" + +#: AppGUI/ObjectUI.py:781 AppGUI/ObjectUI.py:877 AppGUI/ObjectUI.py:2466 +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:158 +#: AppGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:72 +#: AppTools/ToolProperties.py:168 +msgid "Slots" +msgstr "Schlüssel" + +#: AppGUI/ObjectUI.py:786 +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 "" +"Dies ist die Werkzeugnummer.\n" +"Wenn Werkzeugwechsel aktiviert ist, wird dieser Wert beim\n" +"Werkzeugwechselereignis angegeben\n" +"wird als T1, T2 ... Tn im Maschinencode angezeigt.\n" +"\n" +"Hier werden die Werkzeuge zur G-Code-Generierung ausgewählt." + +#: AppGUI/ObjectUI.py:791 AppGUI/ObjectUI.py:1612 AppTools/ToolPaint.py:141 +msgid "" +"Tool Diameter. It's value (in current FlatCAM units) \n" +"is the cut width into the material." +msgstr "" +"Werkzeugdurchmesser Der Wert (in aktuellen FlatCAM-Einheiten)\n" +"ist die Schnittbreite in das Material." + +#: AppGUI/ObjectUI.py:794 +msgid "" +"The number of Drill holes. Holes that are drilled with\n" +"a drill bit." +msgstr "" +"Die Anzahl der Bohrlöcher. Löcher, mit denen gebohrt wird\n" +"ein Bohrer." + +#: AppGUI/ObjectUI.py:797 +msgid "" +"The number of Slot holes. Holes that are created by\n" +"milling them with an endmill bit." +msgstr "" +"Die Anzahl der Langlöcher. Löcher, die von erstellt werden\n" +"Fräsen mit einem Schaftfräser." + +#: AppGUI/ObjectUI.py:800 +msgid "" +"Toggle display of the drills for the current tool.\n" +"This does not select the tools for G-code generation." +msgstr "" +"Anzeige der Bohrer für das aktuelle Werkzeug umschalten.\n" +"Hiermit werden die Tools für die G-Code-Generierung nicht ausgewählt." + +#: AppGUI/ObjectUI.py:818 AppGUI/ObjectUI.py:1764 +#: AppObjects/FlatCAMExcellon.py:527 AppObjects/FlatCAMExcellon.py:805 +#: AppObjects/FlatCAMExcellon.py:821 AppObjects/FlatCAMExcellon.py:825 +#: AppObjects/FlatCAMGeometry.py:322 AppObjects/FlatCAMGeometry.py:816 +#: AppObjects/FlatCAMGeometry.py:852 AppTools/ToolNCC.py:331 +#: AppTools/ToolNCC.py:797 AppTools/ToolNCC.py:811 AppTools/ToolNCC.py:1196 +#: AppTools/ToolPaint.py:313 AppTools/ToolPaint.py:766 +#: AppTools/ToolPaint.py:778 AppTools/ToolPaint.py:1170 +msgid "Parameters for" +msgstr "Parameter für" + +#: AppGUI/ObjectUI.py:821 AppGUI/ObjectUI.py:1767 AppTools/ToolNCC.py:334 +#: AppTools/ToolPaint.py:316 +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." + +#: AppGUI/ObjectUI.py:847 +#: AppGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:48 +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" + +#: AppGUI/ObjectUI.py:853 +#: AppGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:54 +msgid "Drilling" +msgstr "Bohren" + +#: AppGUI/ObjectUI.py:854 +#: AppGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:55 +msgid "Milling" +msgstr "Fräsprozess" + +#: AppGUI/ObjectUI.py:869 +#: AppGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:64 +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" + +#: AppGUI/ObjectUI.py:878 +#: AppGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:73 +#: AppGUI/preferences/tools/ToolsFilmPrefGroupUI.py:210 +#: AppTools/ToolFilm.py:241 +msgid "Both" +msgstr "Both" + +#: AppGUI/ObjectUI.py:886 +#: AppGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:80 +msgid "Milling Diameter" +msgstr "Fräsdurchmesser" + +#: AppGUI/ObjectUI.py:888 +#: AppGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:82 +msgid "The diameter of the tool who will do the milling" +msgstr "Der Durchmesser des Werkzeugs, das das Fräsen übernimmt" + +#: AppGUI/ObjectUI.py:902 +#: AppGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:95 +msgid "" +"Drill depth (negative)\n" +"below the copper surface." +msgstr "" +"Bohrtiefe (negativ)\n" +"unter der Kupferoberfläche." + +#: AppGUI/ObjectUI.py:921 AppGUI/ObjectUI.py:1826 +#: AppGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:113 +#: AppGUI/preferences/geometry/GeometryOptPrefGroupUI.py:68 +#: AppGUI/preferences/tools/ToolsCutoutPrefGroupUI.py:79 +#: AppTools/ToolCutOut.py:159 +msgid "Multi-Depth" +msgstr "Mehrfache Tiefe" + +#: AppGUI/ObjectUI.py:924 AppGUI/ObjectUI.py:1829 +#: AppGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:116 +#: AppGUI/preferences/geometry/GeometryOptPrefGroupUI.py:71 +#: AppGUI/preferences/tools/ToolsCutoutPrefGroupUI.py:82 +#: AppTools/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 "" +"Verwenden Sie zum Begrenzen mehrere Durchgänge\n" +"die Schnitttiefe in jedem Durchgang. Wille\n" +"mehrmals schneiden, bis Schnitttiefe Z\n" +"erreicht ist." + +#: AppGUI/ObjectUI.py:937 AppGUI/ObjectUI.py:1843 +#: AppGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:128 +#: AppGUI/preferences/tools/ToolsCutoutPrefGroupUI.py:94 +#: AppTools/ToolCutOut.py:176 +msgid "Depth of each pass (positive)." +msgstr "Tiefe jedes Durchgangs (positiv)." + +#: AppGUI/ObjectUI.py:948 +#: AppGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:136 +msgid "" +"Tool height when travelling\n" +"across the XY plane." +msgstr "" +"Werkzeughöhe auf Reisen\n" +"über die XY-Ebene." + +#: AppGUI/ObjectUI.py:969 AppGUI/ObjectUI.py:1873 +#: AppGUI/preferences/geometry/GeometryOptPrefGroupUI.py:187 +msgid "" +"Cutting speed in the XY\n" +"plane in units per minute" +msgstr "" +"Schnittgeschwindigkeit im XY\n" +"Flugzeug in Einheiten pro Minute" + +#: AppGUI/ObjectUI.py:984 +#: AppGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:209 +msgid "" +"Tool speed while drilling\n" +"(in units per minute).\n" +"So called 'Plunge' feedrate.\n" +"This is for linear move G01." +msgstr "" +"Werkzeuggeschwindigkeit beim Bohren\n" +"(in Einheiten pro Minute).\n" +"Sogenannter Eintauchvorschub.\n" +"Dies ist für die lineare Bewegung G01." + +#: AppGUI/ObjectUI.py:999 AppGUI/ObjectUI.py:1900 +#: AppGUI/preferences/excellon/ExcellonAdvOptPrefGroupUI.py:80 +#: AppGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:64 +msgid "Feedrate Rapids" +msgstr "Vorschubgeschwindigkeit" + +#: AppGUI/ObjectUI.py:1001 +#: AppGUI/preferences/excellon/ExcellonAdvOptPrefGroupUI.py:82 +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 "" +"Werkzeuggeschwindigkeit beim Bohren\n" +"(in Einheiten pro Minute).\n" +"Dies ist für die schnelle Bewegung G00.\n" +"Es ist nur für Marlin nützlich,\n" +"für andere Fälle ignorieren." + +#: AppGUI/ObjectUI.py:1021 AppGUI/ObjectUI.py:1920 +#: AppGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:82 +msgid "Re-cut" +msgstr "Nachschneiden" + +#: AppGUI/ObjectUI.py:1023 AppGUI/ObjectUI.py:1036 AppGUI/ObjectUI.py:1922 +#: AppGUI/ObjectUI.py:1934 +#: AppGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:84 +#: AppGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:96 +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." + +#: AppGUI/ObjectUI.py:1049 AppGUI/ObjectUI.py:1943 +#: AppGUI/preferences/geometry/GeometryOptPrefGroupUI.py:216 +#: AppObjects/FlatCAMExcellon.py:1412 AppObjects/FlatCAMGeometry.py:1676 +msgid "Spindle speed" +msgstr "Spulengeschwindigkeit" + +#: AppGUI/ObjectUI.py:1051 +#: AppGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:224 +msgid "" +"Speed of the spindle\n" +"in RPM (optional)" +msgstr "" +"Geschwindigkeit der Spindel\n" +"in RPM (optional)" + +#: AppGUI/ObjectUI.py:1066 AppGUI/ObjectUI.py:1962 +#: AppGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:238 +#: AppGUI/preferences/geometry/GeometryOptPrefGroupUI.py:234 +msgid "" +"Pause to allow the spindle to reach its\n" +"speed before cutting." +msgstr "" +"Pause, damit die Spindel ihre erreichen kann\n" +"Geschwindigkeit vor dem Schneiden." + +#: AppGUI/ObjectUI.py:1077 AppGUI/ObjectUI.py:1972 +#: AppGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:246 +#: AppGUI/preferences/geometry/GeometryOptPrefGroupUI.py:239 +msgid "Number of time units for spindle to dwell." +msgstr "Anzahl der Zeiteinheiten, in denen die Spindel verweilen soll." + +#: AppGUI/ObjectUI.py:1087 +#: AppGUI/preferences/excellon/ExcellonAdvOptPrefGroupUI.py:46 +msgid "Offset Z" +msgstr "Versatz Z" + +#: AppGUI/ObjectUI.py:1089 +#: AppGUI/preferences/excellon/ExcellonAdvOptPrefGroupUI.py:48 +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." + +#: AppGUI/ObjectUI.py:1149 AppGUI/ObjectUI.py:2026 AppTools/ToolNCC.py:492 +#: AppTools/ToolPaint.py:422 +msgid "Apply parameters to all tools" +msgstr "Parameter auf alle Werkzeuge anwenden" + +#: AppGUI/ObjectUI.py:1151 AppGUI/ObjectUI.py:2028 AppTools/ToolNCC.py:494 +#: AppTools/ToolPaint.py:424 +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." + +#: AppGUI/ObjectUI.py:1162 AppGUI/ObjectUI.py:2039 AppTools/ToolNCC.py:505 +#: AppTools/ToolPaint.py:435 +msgid "Common Parameters" +msgstr "Allgemeine Parameter" + +#: AppGUI/ObjectUI.py:1164 AppGUI/ObjectUI.py:2041 AppTools/ToolNCC.py:507 +#: AppTools/ToolPaint.py:437 +msgid "Parameters that are common for all tools." +msgstr "Parameter, die allen Werkzeugen gemeinsam sind." + +#: AppGUI/ObjectUI.py:1169 AppGUI/ObjectUI.py:2046 +msgid "Tool change Z" +msgstr "Werkzeugwechsel Z" + +#: AppGUI/ObjectUI.py:1171 +#: AppGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:154 +msgid "" +"Include tool-change sequence\n" +"in G-Code (Pause for tool change)." +msgstr "" +"Werkzeugwechselfolge einbeziehen\n" +"im G-Code (Pause für Werkzeugwechsel)." + +#: AppGUI/ObjectUI.py:1178 AppGUI/ObjectUI.py:2057 +#: AppGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:162 +#: AppGUI/preferences/geometry/GeometryOptPrefGroupUI.py:134 +msgid "" +"Z-axis position (height) for\n" +"tool change." +msgstr "" +"Z-Achsenposition (Höhe) für\n" +"Werkzeugwechsel." + +#: AppGUI/ObjectUI.py:1195 +#: AppGUI/preferences/excellon/ExcellonAdvOptPrefGroupUI.py:71 +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." + +#: AppGUI/ObjectUI.py:1204 AppGUI/ObjectUI.py:2085 +#: AppGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:178 +#: AppGUI/preferences/geometry/GeometryOptPrefGroupUI.py:153 +msgid "End move Z" +msgstr "Bewegung beenden Z" + +#: AppGUI/ObjectUI.py:1206 AppGUI/ObjectUI.py:2087 +#: AppGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:180 +#: AppGUI/preferences/geometry/GeometryOptPrefGroupUI.py:155 +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." + +#: AppGUI/ObjectUI.py:1223 AppGUI/ObjectUI.py:2104 +#: AppGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:195 +#: AppGUI/preferences/geometry/GeometryOptPrefGroupUI.py:173 +msgid "End move X,Y" +msgstr "Bewegung beenden X, Y" + +#: AppGUI/ObjectUI.py:1225 AppGUI/ObjectUI.py:2106 +#: AppGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:197 +#: AppGUI/preferences/geometry/GeometryOptPrefGroupUI.py:175 +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." + +#: AppGUI/ObjectUI.py:1235 AppGUI/ObjectUI.py:1980 +#: AppGUI/preferences/excellon/ExcellonAdvOptPrefGroupUI.py:96 +#: AppGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:105 +msgid "Probe Z depth" +msgstr "Sonde Z Tiefe" + +#: AppGUI/ObjectUI.py:1237 AppGUI/ObjectUI.py:1982 +#: AppGUI/preferences/excellon/ExcellonAdvOptPrefGroupUI.py:98 +#: AppGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:107 +msgid "" +"The maximum depth that the probe is allowed\n" +"to probe. Negative value, in current units." +msgstr "" +"Die maximale Tiefe, in der die Sonde zulässig ist\n" +"zu untersuchen. Negativer Wert in aktuellen Einheiten." + +#: AppGUI/ObjectUI.py:1254 AppGUI/ObjectUI.py:1997 +#: AppGUI/preferences/excellon/ExcellonAdvOptPrefGroupUI.py:109 +#: AppGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:120 +msgid "Feedrate Probe" +msgstr "Vorschubsonde" + +#: AppGUI/ObjectUI.py:1256 AppGUI/ObjectUI.py:1999 +#: AppGUI/preferences/excellon/ExcellonAdvOptPrefGroupUI.py:111 +#: AppGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:122 +msgid "The feedrate used while the probe is probing." +msgstr "Der Vorschub während der Sondenmessung." + +#: AppGUI/ObjectUI.py:1272 +msgid "Preprocessor E" +msgstr "Postprozessor E" + +#: AppGUI/ObjectUI.py:1274 +msgid "" +"The preprocessor JSON file that dictates\n" +"Gcode output for Excellon Objects." +msgstr "" +"Die diktierende Präprozessor-JSON-Datei\n" +"Gcode-Ausgabe für Excellon-Objekte." + +#: AppGUI/ObjectUI.py:1284 +msgid "Preprocessor G" +msgstr "Postprozessor G" + +#: AppGUI/ObjectUI.py:1286 +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)." + +#: AppGUI/ObjectUI.py:1300 AppGUI/ObjectUI.py:2134 +#, fuzzy +#| msgid "Exclusion areas" +msgid "Add exclusion areas" +msgstr "Ausschlussbereiche" + +#: AppGUI/ObjectUI.py:1303 AppGUI/ObjectUI.py:2137 +#: AppGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:204 +msgid "" +"Include exclusion areas.\n" +"In those areas the travel of the tools\n" +"is forbidden." +msgstr "" +"Ausschlussbereiche einschließen.\n" +"In diesen Bereichen die Reise der Werkzeuge\n" +"ist verboten." + +#: AppGUI/ObjectUI.py:1324 AppGUI/ObjectUI.py:1343 AppGUI/ObjectUI.py:2158 +#: AppGUI/ObjectUI.py:2177 +#: AppGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:224 +msgid "Strategy" +msgstr "Strategie" + +#: AppGUI/ObjectUI.py:1324 AppGUI/ObjectUI.py:1355 AppGUI/ObjectUI.py:2158 +#: AppGUI/ObjectUI.py:2189 +#: AppGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:236 +msgid "Over Z" +msgstr "Über Z." + +#: AppGUI/ObjectUI.py:1326 AppGUI/ObjectUI.py:2160 +msgid "This is the Area ID." +msgstr "" + +#: AppGUI/ObjectUI.py:1328 AppGUI/ObjectUI.py:2162 +msgid "Type of the object where the exclusion area was added." +msgstr "" + +#: AppGUI/ObjectUI.py:1330 AppGUI/ObjectUI.py:2164 +msgid "" +"The strategy used for exclusion area. Go around the exclusion areas or over " +"it." +msgstr "" + +#: AppGUI/ObjectUI.py:1332 AppGUI/ObjectUI.py:2166 +msgid "" +"If the strategy is to go over the area then this is the height at which the " +"tool will go to avoid the exclusion area." +msgstr "" + +#: AppGUI/ObjectUI.py:1344 AppGUI/ObjectUI.py:2178 +#: AppGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:225 +msgid "" +"The strategy followed when encountering an exclusion area.\n" +"Can be:\n" +"- Over -> when encountering the area, the tool will go to a set height\n" +"- Around -> will avoid the exclusion area by going around the area" +msgstr "" +"Die Strategie wurde verfolgt, wenn auf einen Ausschlussbereich gestoßen " +"wurde.\n" +"Kann sein:\n" +"- Über -> Wenn Sie auf den Bereich stoßen, erreicht das Werkzeug eine " +"festgelegte Höhe\n" +"- Vermeiden -> vermeidet den Ausschlussbereich, indem Sie den Bereich umgehen" + +#: AppGUI/ObjectUI.py:1348 AppGUI/ObjectUI.py:2182 +#: AppGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:229 +msgid "Over" +msgstr "Über" + +#: AppGUI/ObjectUI.py:1349 AppGUI/ObjectUI.py:2183 +#: AppGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:230 +msgid "Around" +msgstr "Vermeiden" + +#: AppGUI/ObjectUI.py:1356 AppGUI/ObjectUI.py:2190 +#: AppGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:237 +msgid "" +"The height Z to which the tool will rise in order to avoid\n" +"an interdiction area." +msgstr "" +"Die Höhe Z, auf die das Werkzeug ansteigt, um dies zu vermeiden\n" +"ein Verbotsbereich." + +#: AppGUI/ObjectUI.py:1366 AppGUI/ObjectUI.py:2200 +#, fuzzy +#| msgid "Add area" +msgid "Add area:" +msgstr "Bereich hinzufügen" + +#: AppGUI/ObjectUI.py:1367 AppGUI/ObjectUI.py:2201 +msgid "Add an Exclusion Area." +msgstr "Fügen Sie einen Ausschlussbereich hinzu." + +#: AppGUI/ObjectUI.py:1373 AppGUI/ObjectUI.py:2207 +#: AppGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:214 +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:324 +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:288 +#: AppTools/ToolNCC.py:580 AppTools/ToolPaint.py:523 +msgid "The kind of selection shape used for area selection." +msgstr "Die Art der Auswahlform, die für die Bereichsauswahl verwendet wird." + +#: AppGUI/ObjectUI.py:1383 AppGUI/ObjectUI.py:2217 +#: AppGUI/preferences/utilities/AutoCompletePrefGroupUI.py:32 +#: AppGUI/preferences/utilities/FAExcPrefGroupUI.py:42 +#: AppGUI/preferences/utilities/FAGcoPrefGroupUI.py:32 +#: AppGUI/preferences/utilities/FAGrbPrefGroupUI.py:32 +msgid "Delete All" +msgstr "Alles löschen" + +#: AppGUI/ObjectUI.py:1384 AppGUI/ObjectUI.py:2218 +msgid "Delete all exclusion areas." +msgstr "Löschen Sie alle Ausschlussbereiche." + +#: AppGUI/ObjectUI.py:1387 AppGUI/ObjectUI.py:2221 +#, fuzzy +#| msgid "Delete Object" +msgid "Delete Selected" +msgstr "Objekt löschen" + +#: AppGUI/ObjectUI.py:1388 AppGUI/ObjectUI.py:2222 +#, fuzzy +#| msgid "Delete all exclusion areas." +msgid "Delete all exclusion areas that are selected in the table." +msgstr "Löschen Sie alle Ausschlussbereiche." + +#: AppGUI/ObjectUI.py:1412 AppGUI/ObjectUI.py:2238 +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." + +#: AppGUI/ObjectUI.py:1420 AppGUI/ObjectUI.py:2245 +msgid "Generate CNCJob object" +msgstr "Generieren des CNC-Job-Objekts" + +#: AppGUI/ObjectUI.py:1422 +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" + +#: AppGUI/ObjectUI.py:1439 +msgid "Milling Geometry" +msgstr "Fräsgeometrie" + +#: AppGUI/ObjectUI.py:1441 +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 "" +"Erzeugen Sie eine Geometrie um Löcher zu bohren.\n" +"Wählen Sie aus der Werkzeugtabelle oben die Durchmesser\n" +"die gefräst werden sollen. Verwenden Sie die Spalte #, um die Auswahl zu " +"treffen." + +#: AppGUI/ObjectUI.py:1449 +#: AppGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:296 +#: AppGUI/preferences/gerber/GerberOptPrefGroupUI.py:45 +msgid "Diameter of the cutting tool." +msgstr "Durchmesser des Schneidewerkzeugs." + +#: AppGUI/ObjectUI.py:1459 +msgid "Mill Drills" +msgstr "Mühlenbohrer" + +#: AppGUI/ObjectUI.py:1461 +msgid "" +"Create the Geometry Object\n" +"for milling DRILLS toolpaths." +msgstr "" +"Erstellen Sie das Geometrieobjekt\n" +"zum Fräsen von BOHRER-Werkzeugwegen." + +#: AppGUI/ObjectUI.py:1479 +msgid "Mill Slots" +msgstr "Mühlenschlitze" + +#: AppGUI/ObjectUI.py:1481 +msgid "" +"Create the Geometry Object\n" +"for milling SLOTS toolpaths." +msgstr "" +"Erstellen Sie das Geometrieobjekt\n" +"zum Fräsen von Werkzeugwegen." + +#: AppGUI/ObjectUI.py:1523 AppTools/ToolCutOut.py:319 +msgid "Geometry Object" +msgstr "Geometrieobjekt" + +#: AppGUI/ObjectUI.py:1569 +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 "" +"Werkzeuge in diesem Geometrieobjekt, die zum Schneiden verwendet werden.\n" +"Der Eintrag 'Versatz' legt einen Versatz für den Schnitt fest.\n" +"'Versatz' kann innen, außen, auf Pfad (keine) und benutzerdefiniert sein.\n" +"Der Eintrag \"Typ\" ist nur informativ und ermöglicht die Kenntnis der\n" +"Absicht, das aktuelle Werkzeug zu verwenden.\n" +"Es kann Rough, Finish oder ISO sein.\n" +"Der 'Werkzeugtyp' (TT) kann kreisförmig mit 1 bis 4 Zähnen (C1..C4) sein.\n" +"Kugel (B) oder V-Form (V).\n" +"Wenn V-förmig ausgewählt ist, wird der Eintrag \"Typ\" automatisch " +"angezeigt\n" +"Auf Isolation eingestellt ist der Parameter CutZ im UI-Formular\n" +"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." + +#: AppGUI/ObjectUI.py:1586 AppGUI/ObjectUI.py:2443 +#: AppGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:40 +msgid "Plot Object" +msgstr "Plotobjekt" + +#: AppGUI/ObjectUI.py:1599 AppGUI/ObjectUI.py:2456 AppGUI/ObjectUI.py:2466 +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:138 +#: AppTools/ToolCopperThieving.py:221 +msgid "Dia" +msgstr "Durchm" + +#: AppGUI/ObjectUI.py:1599 AppGUI/ObjectUI.py:2456 AppTools/ToolNCC.py:132 +#: AppTools/ToolPaint.py:127 +msgid "TT" +msgstr "TT" + +#: AppGUI/ObjectUI.py:1606 +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 "" +"Dies ist die Werkzeugnummer.\n" +"Wenn der Werkzeugwechsel aktiviert ist, wird dieser Wert beim " +"Werkzeugwechselereignis angezeigt\n" +"wird als T1, T2 ... Tn angezeigt" + +#: AppGUI/ObjectUI.py:1617 +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 "" +"Der Wert für den Offset kann sein:\n" +"- Pfad -> Es gibt keinen Versatz, der Werkzeugschnitt erfolgt durch die " +"Geometrielinie.\n" +"- In (Seite) -> Der Werkzeugschnitt folgt der Innengeometrie. Es wird eine " +"\"Tasche\" erstellt.\n" +"- Out (Seite) -> Der Werkzeugschnitt folgt der Geometrielinie an der " +"Außenseite." + +#: AppGUI/ObjectUI.py:1624 +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 "" +"Der Typ (Operation) hat nur informativen Wert. Normalerweise bilden die " +"Benutzeroberflächen Werte\n" +"Die Auswahl richtet sich nach der Art des Vorgangs und dient als " +"Erinnerung.\n" +"Kann \"Schruppen\", \"Fertigstellen\" oder \"Isolieren\" sein.\n" +"Für das Schruppen können wir einen niedrigeren Vorschub und einen Schnitt " +"mit mehreren Tiefen wählen.\n" +"Für das Finishing können wir eine höhere Vorschubgeschwindigkeit ohne " +"Mehrfachtiefe wählen.\n" +"Für die Isolierung benötigen wir einen niedrigeren Vorschub, da ein Fräser " +"mit einer feinen Spitze verwendet wird." + +#: AppGUI/ObjectUI.py:1633 +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 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 "" +"Der Werkzeugtyp (TT) kann sein:\n" +"- Rundschreiben mit 1 ... 4 Zähnen -> nur informativ. Kreisförmig ist die " +"Schnittbreite im Material\n" +"ist genau der Werkzeugdurchmesser.\n" +"- Ball -> nur informativ und auf den Ball-Schaftfräser verweisen.\n" +"- V-Form -> Deaktiviert den Z-Cut-Parameter im UI-Formular und aktiviert " +"zwei zusätzliche UI-Formulare\n" +"Felder: V-Tip Dia und V-Tip Angle. Durch Anpassen dieser beiden Werte wird " +"der Z-Cut-Parameter wie z\n" +"da die Schnittbreite in Material gleich dem Wert in der Spalte " +"Werkzeugdurchmesser dieser Tabelle ist.\n" +"Wenn Sie den V-Form-Werkzeugtyp automatisch auswählen, wird der " +"Operationstyp als Isolation ausgewählt." + +#: AppGUI/ObjectUI.py:1645 +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 "" +"Plotspalte Sie ist nur für MultiGeo-Geometrien sichtbar. Dies bedeutet, dass " +"Geometrien die Geometrie enthalten\n" +"Daten in die Werkzeuge. Durch das Löschen des Werkzeugs werden für diese " +"Geometrien auch die Geometriedaten gelöscht.\n" +"also sei WARNUNG. Über die Kontrollkästchen in jeder Zeile kann der Plot auf " +"der Leinwand aktiviert / deaktiviert werden\n" +"für das entsprechende Werkzeug." + +#: AppGUI/ObjectUI.py:1663 +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 "" +"Der Wert, mit dem der Schnitt versetzt werden soll\n" +"Der ausgewählte Versatztyp ist 'Versatz'.\n" +"Der Wert kann für \"außerhalb\" positiv sein\n" +"Cut und Negativ für \"Inside\" Cut." + +#: AppGUI/ObjectUI.py:1682 AppTools/ToolNCC.py:209 AppTools/ToolNCC.py:923 +#: AppTools/ToolPaint.py:191 AppTools/ToolPaint.py:848 +#: AppTools/ToolSolderPaste.py:559 +msgid "New Tool" +msgstr "Neues Werkzeug" + +#: AppGUI/ObjectUI.py:1699 +msgid "" +"Add a new tool to the Tool Table\n" +"with the specified diameter." +msgstr "" +"Fügen Sie der Werkzeugtabelle ein neues Werkzeug\n" +"mit dem oben angegebenen Durchmesser hinzu." + +#: AppGUI/ObjectUI.py:1704 AppTools/ToolNCC.py:300 AppTools/ToolNCC.py:634 +#: AppTools/ToolPaint.py:282 AppTools/ToolPaint.py:678 +msgid "Add from DB" +msgstr "Aus DB hinzufügen" + +#: AppGUI/ObjectUI.py:1706 AppTools/ToolNCC.py:302 AppTools/ToolPaint.py:284 +msgid "" +"Add a new tool to the Tool Table\n" +"from the Tool DataBase." +msgstr "" +"Fügen Sie der Werkzeugtabelle ein neues Werkzeug aus der\n" +"aus der Werkzeugdatenbank hinzu." + +#: AppGUI/ObjectUI.py:1721 +msgid "" +"Copy a selection of tools in the Tool Table\n" +"by first selecting a row in the Tool Table." +msgstr "" +"Kopieren Sie eine Auswahl von Werkzeugen in die Werkzeugtabelle\n" +"indem Sie zuerst eine Zeile in der Werkzeugtabelle auswählen." + +#: AppGUI/ObjectUI.py:1727 +msgid "" +"Delete a selection of tools in the Tool Table\n" +"by first selecting a row in the Tool Table." +msgstr "" +"Löschen Sie eine Auswahl von Werkzeugen in der Werkzeugtabelle\n" +"indem Sie zuerst eine Zeile in der Werkzeugtabelle auswählen." + +#: AppGUI/ObjectUI.py:1854 +#: AppGUI/preferences/geometry/GeometryOptPrefGroupUI.py:103 +msgid "" +"Height of the tool when\n" +"moving without cutting." +msgstr "" +"Höhe des Werkzeugs bei\n" +"Bewegen ohne zu schneiden." + +#: AppGUI/ObjectUI.py:1887 +#: AppGUI/preferences/geometry/GeometryOptPrefGroupUI.py:202 +msgid "" +"Cutting speed in the XY\n" +"plane in units per minute.\n" +"It is called also Plunge." +msgstr "" +"Schnittgeschwindigkeit im XY\n" +"Flugzeug in Einheiten pro Minute.\n" +"Es heißt auch Sturz." + +#: AppGUI/ObjectUI.py:1902 +#: AppGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:66 +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 "" +"Schnittgeschwindigkeit in der XY-Ebene\n" +"(in Einheiten pro Minute).\n" +"Dies ist für die schnelle Bewegung G00.\n" +"Es ist nur für Marlin nützlich,\n" +"für andere Fälle ignorieren." + +#: AppGUI/ObjectUI.py:1946 +#: AppGUI/preferences/geometry/GeometryOptPrefGroupUI.py:219 +msgid "" +"Speed of the spindle in RPM (optional).\n" +"If LASER preprocessor is used,\n" +"this value is the power of laser." +msgstr "" +"Drehzahl der Spindel in U / min (optional).\n" +"Wenn LASER-Postprozessor verwendet wird,\n" +"Dieser Wert ist die Leistung des Lasers." + +#: AppGUI/ObjectUI.py:2049 +#: AppGUI/preferences/geometry/GeometryOptPrefGroupUI.py:124 +msgid "" +"Include tool-change sequence\n" +"in the Machine Code (Pause for tool change)." +msgstr "" +"Werkzeugwechselfolge einbeziehen\n" +"im Maschinencode (Pause für Werkzeugwechsel)." + +#: AppGUI/ObjectUI.py:2118 +#: AppGUI/preferences/geometry/GeometryOptPrefGroupUI.py:256 +msgid "" +"The Preprocessor file that dictates\n" +"the Machine Code (like GCode, RML, HPGL) output." +msgstr "" +"Die Postprozessor-Datei, die diktiert\n" +"den Maschinencode (wie GCode, RML, HPGL)." + +#: AppGUI/ObjectUI.py:2247 Common.py:405 Common.py:520 Common.py:573 +msgid "Generate the CNC Job object." +msgstr "Generieren Sie das CNC-Job-Objekt." + +#: AppGUI/ObjectUI.py:2264 +msgid "Launch Paint Tool in Tools Tab." +msgstr "Starten Sie das Paint Werkzeug in der Registerkarte \"Tools\"." + +#: AppGUI/ObjectUI.py:2272 AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:35 +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 "" +"Erzeugt Werkzeugpfade zur Abdeckung\n" +"gesamte Fläche eines Polygons (entfernen\n" +"alles Kupfer). Du wirst gefragt\n" +"Klicken Sie auf das gewünschte Polygon." + +#: AppGUI/ObjectUI.py:2327 +msgid "CNC Job Object" +msgstr "CNC-Auftragsobjekt" + +#: AppGUI/ObjectUI.py:2338 AppGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:45 +msgid "Plot kind" +msgstr "Darstellungsart" + +#: AppGUI/ObjectUI.py:2341 AppGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:47 +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 "" +"Dadurch wird die Art der Geometrien auf der zu plottenden Leinwand " +"ausgewählt.\n" +"Dies kann entweder vom Typ 'Reise' sein, was die Bewegungen bedeutet\n" +"über dem Werkstück oder es kann vom Typ 'Ausschneiden' sein,\n" +"was bedeutet, dass die Bewegungen, die in das Material geschnitten werden." + +#: AppGUI/ObjectUI.py:2350 AppGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:55 +msgid "Travel" +msgstr "Reise" + +#: AppGUI/ObjectUI.py:2354 AppGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:64 +msgid "Display Annotation" +msgstr "Anmerkung anzeigen" + +#: AppGUI/ObjectUI.py:2356 AppGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:66 +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 "" +"Hiermit wird ausgewählt, ob Textanmerkungen auf dem Plot angezeigt werden " +"sollen.\n" +"Wenn diese Option aktiviert ist, werden die Nummern für jedes Ende in der " +"richtigen Reihenfolge angezeigt\n" +"einer Reiseleitung." + +#: AppGUI/ObjectUI.py:2371 +msgid "Travelled dist." +msgstr "Zurückgelegte Strecke." + +#: AppGUI/ObjectUI.py:2373 AppGUI/ObjectUI.py:2378 +msgid "" +"This is the total travelled distance on X-Y plane.\n" +"In current units." +msgstr "" +"Dies ist die Gesamtstrecke auf der X-Y-Ebene.\n" +"In aktuellen Einheiten." + +#: AppGUI/ObjectUI.py:2383 +msgid "Estimated time" +msgstr "Geschätzte Zeit" + +#: AppGUI/ObjectUI.py:2385 AppGUI/ObjectUI.py:2390 +msgid "" +"This is the estimated time to do the routing/drilling,\n" +"without the time spent in ToolChange events." +msgstr "" +"Dies ist die geschätzte Zeit für das Fräsen / Bohren.\n" +"ohne die Zeit, die in Werkzeugwechselereignissen verbracht wird." + +#: AppGUI/ObjectUI.py:2425 +msgid "CNC Tools Table" +msgstr "CNC Werkzeugtabelle" + +#: AppGUI/ObjectUI.py:2428 +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 "" +"Werkzeuge in diesem CNCJob-Objekt, die zum Schneiden verwendet werden.\n" +"Der Werkzeugdurchmesser wird zum Plotten auf Leinwand verwendet.\n" +"Der Eintrag 'Versatz' legt einen Versatz für den Schnitt fest.\n" +"'Versatz' kann innen, außen, auf Pfad (keine) und benutzerdefiniert sein.\n" +"Der Eintrag \"Typ\" ist nur informativ und ermöglicht die Kenntnis der\n" +"Absicht, das aktuelle Werkzeug zu verwenden.\n" +"Es kann Schruppen, Schlichten oder Isolieren sein.\n" +"Der 'Werkzeugtyp' (TT) kann kreisförmig mit 1 bis 4 Zähnen (C1..C4) sein.\n" +"Kugel (B) oder V-Form (V)." + +#: AppGUI/ObjectUI.py:2456 AppGUI/ObjectUI.py:2467 +msgid "P" +msgstr "P" + +#: AppGUI/ObjectUI.py:2477 +msgid "Update Plot" +msgstr "Plot aktualisieren" + +#: AppGUI/ObjectUI.py:2479 +msgid "Update the plot." +msgstr "Aktualisieren Sie die Darstellung." + +#: AppGUI/ObjectUI.py:2486 +#: AppGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py:30 +msgid "Export CNC Code" +msgstr "CNC-Code exportieren" + +#: AppGUI/ObjectUI.py:2488 +#: AppGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py:32 +#: AppGUI/preferences/cncjob/CNCJobOptPrefGroupUI.py:33 +msgid "" +"Export and save G-Code to\n" +"make this object to a file." +msgstr "" +"Exportieren und speichern Sie den G-Code nach\n" +"Machen Sie dieses Objekt in eine Datei." + +#: AppGUI/ObjectUI.py:2494 +msgid "Prepend to CNC Code" +msgstr "CNC-Code voranstellen" + +#: AppGUI/ObjectUI.py:2496 AppGUI/ObjectUI.py:2503 +#: AppGUI/preferences/cncjob/CNCJobOptPrefGroupUI.py:49 +msgid "" +"Type here any G-Code commands you would\n" +"like to add at the beginning of the G-Code file." +msgstr "" +"Geben Sie hier alle G-Code-Befehle ein\n" +"die Sie am Anfang der G-Code-Datei hinzufügen möchten." + +#: AppGUI/ObjectUI.py:2509 +msgid "Append to CNC Code" +msgstr "An CNC Code anhängen" + +#: AppGUI/ObjectUI.py:2511 AppGUI/ObjectUI.py:2519 +#: AppGUI/preferences/cncjob/CNCJobOptPrefGroupUI.py:65 +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 "" +"Geben Sie hier alle G-Code-Befehle ein\n" +"die Sie an die generierte Datei anhängen möchten.\n" +"z.B.: M2 (Programmende)" + +#: AppGUI/ObjectUI.py:2533 +#: AppGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py:38 +msgid "Toolchange G-Code" +msgstr "Werkzeugwechsel G-Code" + +#: AppGUI/ObjectUI.py:2536 +#: AppGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py:41 +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 "" +"Geben Sie hier alle G-Code-Befehle ein\n" +"Wird ausgeführt, wenn ein Werkzeugwechselereignis auftritt.\n" +"Dies stellt einen benutzerdefinierten Werkzeugwechsel-GCode dar.\n" +"oder ein Werkzeugwechsel-Makro.\n" +"Die FlatCAM-Variablen sind vom '%'-Symbol umgeben.\n" +"\n" +"WARNUNG: Es kann nur mit einer Postprozessor-Datei verwendet werden\n" +"das hat \"toolchange_custom\" im Namen und das ist gebaut\n" +"mit der \"Toolchange Custom\" -Prozessordatei als Vorlage." + +#: AppGUI/ObjectUI.py:2551 +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 "" +"Geben Sie hier G-Code-Befehle ein\n" +"die ausgeführt werden, wenn ein Werkzeugwechselereignis auftritt.\n" +"So kann ein benutzerdefinierter Werkzeugwechsel in GCode definiert werden.\n" +"Die FlatCAM-Variablen sind vom '%'-Symbol umgeben.\n" +"\n" +"WARNUNG: Ein Werkzeugwechselereignis kann nur mit einer Präprozessor-Datei " +"verwendet werden\n" +"die das Präfix \"toolchange_custom\" im Namen hat und nach Vorlage der \n" +" \n" +"\"Toolchange Custom\" -Prozessordatei erzeugt wurde." + +#: AppGUI/ObjectUI.py:2566 +#: AppGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py:80 +msgid "Use Toolchange Macro" +msgstr "Benutze das Werkzeugwechselmakro" + +#: AppGUI/ObjectUI.py:2568 +#: AppGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py:82 +msgid "" +"Check this box if you want to use\n" +"a Custom Toolchange GCode (macro)." +msgstr "" +"Aktivieren Sie dieses Kontrollkästchen, wenn Sie verwenden möchten\n" +"ein benutzerdefiniertes Werkzeug ändert GCode (Makro)." + +#: AppGUI/ObjectUI.py:2576 +#: AppGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py:94 +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 "" +"Eine Liste der FlatCAM-Variablen, die verwendet werden können\n" +"im Werkzeugwechselereignis.\n" +"Sie müssen mit dem \"%\" -Symbol umgeben sein" + +#: AppGUI/ObjectUI.py:2583 +#: AppGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py:101 +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:30 +#: AppGUI/preferences/geometry/GeometryEditorPrefGroupUI.py:31 +#: AppGUI/preferences/gerber/GerberEditorPrefGroupUI.py:31 +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:37 +#: AppGUI/preferences/tools/Tools2CalPrefGroupUI.py:36 +#: AppGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py:36 +#: AppGUI/preferences/tools/Tools2FiducialsPrefGroupUI.py:36 +#: AppGUI/preferences/tools/Tools2InvertPrefGroupUI.py:31 +#: AppGUI/preferences/tools/Tools2OptimalPrefGroupUI.py:31 +#: AppGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:36 +#: AppGUI/preferences/tools/Tools2QRCodePrefGroupUI.py:31 +#: AppGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py:30 +#: AppGUI/preferences/tools/Tools2sidedPrefGroupUI.py:31 +#: AppGUI/preferences/tools/ToolsCornersPrefGroupUI.py:35 +#: AppGUI/preferences/tools/ToolsCutoutPrefGroupUI.py:32 +#: AppGUI/preferences/tools/ToolsFilmPrefGroupUI.py:31 +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:31 +#: AppGUI/preferences/tools/ToolsPanelizePrefGroupUI.py:31 +#: AppGUI/preferences/tools/ToolsSolderpastePrefGroupUI.py:31 +#: AppGUI/preferences/tools/ToolsSubPrefGroupUI.py:31 +#: AppGUI/preferences/tools/ToolsTransformPrefGroupUI.py:31 +#: AppTools/ToolCopperThieving.py:89 AppTools/ToolCorners.py:106 +#: AppTools/ToolFiducials.py:149 AppTools/ToolInvertGerber.py:82 +msgid "Parameters" +msgstr "Parameters" + +#: AppGUI/ObjectUI.py:2586 +#: AppGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py:106 +msgid "FlatCAM CNC parameters" +msgstr "FlatCAM CNC-Parameter" + +#: AppGUI/ObjectUI.py:2587 +#: AppGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py:111 +msgid "tool number" +msgstr "Werkzeugnummer" + +#: AppGUI/ObjectUI.py:2588 +#: AppGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py:112 +msgid "tool diameter" +msgstr "Werkzeugdurchmesser" + +#: AppGUI/ObjectUI.py:2589 +#: AppGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py:113 +msgid "for Excellon, total number of drills" +msgstr "für Excellon die Gesamtzahl der Bohrer" + +#: AppGUI/ObjectUI.py:2591 +#: AppGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py:115 +msgid "X coord for Toolchange" +msgstr "X-Koordinate für Werkzeugwechsel" + +#: AppGUI/ObjectUI.py:2592 +#: AppGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py:116 +msgid "Y coord for Toolchange" +msgstr "Y-Koordinate für Werkzeugwechsel" + +#: AppGUI/ObjectUI.py:2593 +#: AppGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py:118 +msgid "Z coord for Toolchange" +msgstr "Z-Koordinate für Werkzeugwechsel" + +#: AppGUI/ObjectUI.py:2594 +msgid "depth where to cut" +msgstr "tiefe wo zu schneiden" + +#: AppGUI/ObjectUI.py:2595 +msgid "height where to travel" +msgstr "Höhe, wohin man reist" + +#: AppGUI/ObjectUI.py:2596 +#: AppGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py:121 +msgid "the step value for multidepth cut" +msgstr "der Schrittwert für den mehrstufigen Schnitt" + +#: AppGUI/ObjectUI.py:2598 +#: AppGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py:123 +msgid "the value for the spindle speed" +msgstr "der Wert für die Spindeldrehzahl" + +#: AppGUI/ObjectUI.py:2600 +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" + +#: AppGUI/ObjectUI.py:2616 +msgid "View CNC Code" +msgstr "CNC-Code anzeigen" + +#: AppGUI/ObjectUI.py:2618 +msgid "" +"Opens TAB to view/modify/print G-Code\n" +"file." +msgstr "" +"Öffnet die Registerkarte zum Anzeigen / Ändern / Drucken von G-Code\n" +"Datei." + +#: AppGUI/ObjectUI.py:2623 +msgid "Save CNC Code" +msgstr "CNC-Code speichern" + +#: AppGUI/ObjectUI.py:2625 +msgid "" +"Opens dialog to save G-Code\n" +"file." +msgstr "" +"Öffnet den Dialog zum Speichern des G-Codes\n" +"Datei." + +#: AppGUI/ObjectUI.py:2659 +msgid "Script Object" +msgstr "Skriptobjekt" + +#: AppGUI/ObjectUI.py:2679 AppGUI/ObjectUI.py:2753 +msgid "Auto Completer" +msgstr "Auto-Vervollständiger" + +#: AppGUI/ObjectUI.py:2681 +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." + +#: AppGUI/ObjectUI.py:2726 +msgid "Document Object" +msgstr "Dokumentobjekt" + +#: AppGUI/ObjectUI.py:2755 +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." + +#: AppGUI/ObjectUI.py:2773 +msgid "Font Type" +msgstr "Schriftart" + +#: AppGUI/ObjectUI.py:2790 +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:197 +msgid "Font Size" +msgstr "Schriftgröße" + +#: AppGUI/ObjectUI.py:2826 +msgid "Alignment" +msgstr "Ausrichtung" + +#: AppGUI/ObjectUI.py:2831 +msgid "Align Left" +msgstr "Linksbündig" + +#: AppGUI/ObjectUI.py:2836 App_Main.py:4937 +msgid "Center" +msgstr "Center" + +#: AppGUI/ObjectUI.py:2841 +msgid "Align Right" +msgstr "Rechts ausrichten" + +#: AppGUI/ObjectUI.py:2846 +msgid "Justify" +msgstr "Rechtfertigen" + +#: AppGUI/ObjectUI.py:2853 +msgid "Font Color" +msgstr "Schriftfarbe" + +#: AppGUI/ObjectUI.py:2855 +msgid "Set the font color for the selected text" +msgstr "Stellen Sie die Schriftfarbe für den ausgewählten Text ein" + +#: AppGUI/ObjectUI.py:2869 +msgid "Selection Color" +msgstr "Auswahlfarbe" + +#: AppGUI/ObjectUI.py:2871 +msgid "Set the selection color when doing text selection." +msgstr "Stellen Sie die Auswahlfarbe bei der Textauswahl ein." + +#: AppGUI/ObjectUI.py:2885 +msgid "Tab Size" +msgstr "Tab-Größe" + +#: AppGUI/ObjectUI.py:2887 +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." + +#: AppGUI/PlotCanvasLegacy.py:1456 +msgid "" +"Could not annotate due of a difference between the number of text elements " +"and the number of text positions." +msgstr "" +"Aufgrund eines Unterschieds zwischen der Anzahl der Textelemente und der " +"Anzahl der Textpositionen konnten keine Anmerkungen erstellt werden." + +#: AppGUI/preferences/PreferencesUIManager.py:911 +#: AppGUI/preferences/PreferencesUIManager.py:1002 +#: AppGUI/preferences/PreferencesUIManager.py:1026 +#: AppGUI/preferences/PreferencesUIManager.py:1132 App_Main.py:5357 +msgid "Preferences" +msgstr "Einstellungen" + +#: AppGUI/preferences/PreferencesUIManager.py:917 +msgid "Preferences applied." +msgstr "Einstellungen werden angewendet." + +#: AppGUI/preferences/PreferencesUIManager.py:937 +#, fuzzy +#| msgid "Are you sure you want to delete the GUI Settings? \n" +msgid "Are you sure you want to continue?" +msgstr "Möchten Sie die GUI-Einstellungen wirklich löschen?\n" + +#: AppGUI/preferences/PreferencesUIManager.py:938 +#, fuzzy +#| msgid "Application started ..." +msgid "Application restart" +msgstr "Bewerbung gestartet ..." + +#: AppGUI/preferences/PreferencesUIManager.py:1031 +msgid "Preferences closed without saving." +msgstr "Einstellungen geschlossen ohne zu speichern." + +#: AppGUI/preferences/PreferencesUIManager.py:1043 +msgid "Preferences default values are restored." +msgstr "Die Standardeinstellungen werden wiederhergestellt." + +#: AppGUI/preferences/PreferencesUIManager.py:1075 App_Main.py:2498 +#: App_Main.py:2566 +msgid "Failed to write defaults to file." +msgstr "Fehler beim Schreiben der Voreinstellungen in die Datei." + +#: AppGUI/preferences/PreferencesUIManager.py:1079 +#: AppGUI/preferences/PreferencesUIManager.py:1188 +msgid "Preferences saved." +msgstr "Einstellungen gespeichert." + +#: AppGUI/preferences/PreferencesUIManager.py:1129 +msgid "Preferences edited but not saved." +msgstr "Einstellungen bearbeitet, aber nicht gespeichert." + +#: AppGUI/preferences/PreferencesUIManager.py:1174 +msgid "" +"One or more values are changed.\n" +"Do you want to save the Preferences?" +msgstr "" +"Ein oder mehrere Werte werden geändert.\n" +"Möchten Sie die Einstellungen speichern?" + +#: AppGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py:27 +msgid "CNC Job Adv. Options" +msgstr "Erw. CNC-Joboptionen" + +#: AppGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py:64 +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 "" +"Geben Sie hier G-Code-Befehle ein, die ausgeführt werden, wenn ein " +"Werkzeugwechselereignis auftritt.\n" +"So kann ein benutzerdefinierter Werkzeugwechsel in GCode definiert werden.\n" +"Die FlatCAM-Variablen sind vom '%'-Symbol umgeben.\n" +"\n" +"WARNUNG: Ein Werkzeugwechselereignis kann nur mit einer Präprozessor-Datei " +"verwendet warden, die das Präfix \"toolchange_custom\" im Namen hat und nach " +"Vorlage der \"Toolchange Custom\" -Prozessordatei erzeugt wurde." + +#: AppGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py:119 +msgid "Z depth for the cut" +msgstr "Z Tiefe für den Schnitt" + +#: AppGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py:120 +msgid "Z height for travel" +msgstr "Z Höhe für die Reise" + +#: AppGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py:126 +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" + +#: AppGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py:145 +msgid "Annotation Size" +msgstr "Anmerkungsgröße" + +#: AppGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py:147 +msgid "The font size of the annotation text. In pixels." +msgstr "Die Schriftgröße des Anmerkungstextes. In Pixeln." + +#: AppGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py:157 +msgid "Annotation Color" +msgstr "Anmerkungsfarbe" + +#: AppGUI/preferences/cncjob/CNCJobAdvOptPrefGroupUI.py:159 +msgid "Set the font color for the annotation texts." +msgstr "Legen Sie die Schriftfarbe für die Anmerkungstexte fest." + +#: AppGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:26 +msgid "CNC Job General" +msgstr "CNC-Job Allgemein" + +#: AppGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:77 +#: AppGUI/preferences/geometry/GeometryGenPrefGroupUI.py:47 +#: AppGUI/preferences/gerber/GerberGenPrefGroupUI.py:59 +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:45 +msgid "Circle Steps" +msgstr "Kreisschritte" + +#: AppGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:79 +msgid "" +"The number of circle steps for GCode \n" +"circle and arc shapes linear approximation." +msgstr "" +"Die Anzahl der Kreisschritte für GCode\n" +"Kreis- und Bogenformen lineare Annäherung." + +#: AppGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:88 +msgid "Travel dia" +msgstr "Verfahrdurchm" + +#: AppGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:90 +msgid "" +"The width of the travel lines to be\n" +"rendered in the plot." +msgstr "" +"Die Breite der Fahrlinien soll sein\n" +"in der Handlung gerendert." + +#: AppGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:103 +msgid "G-code Decimals" +msgstr "G-Code-Dezimalstellen" + +#: AppGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:106 +#: AppTools/ToolFiducials.py:74 +msgid "Coordinates" +msgstr "Koordinaten" + +#: AppGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:108 +msgid "" +"The number of decimals to be used for \n" +"the X, Y, Z coordinates in CNC code (GCODE, etc.)" +msgstr "" +"Die Anzahl der Dezimalstellen, für die verwendet werden soll\n" +"die X-, Y-, Z-Koordinaten im CNC-Code (GCODE usw.)" + +#: AppGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:119 +#: AppTools/ToolProperties.py:519 +msgid "Feedrate" +msgstr "Vorschubgeschwindigkeit" + +#: AppGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:121 +msgid "" +"The number of decimals to be used for \n" +"the Feedrate parameter in CNC code (GCODE, etc.)" +msgstr "" +"Die Anzahl der Dezimalstellen, für die verwendet werden soll\n" +"der Vorschubparameter im CNC-Code (GCODE usw.)" + +#: AppGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:132 +msgid "Coordinates type" +msgstr "Koordinaten eingeben" + +#: AppGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:134 +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 "" +"Der in Gcode zu verwendende Koordinatentyp.\n" +"Kann sein:\n" +"- Absolut G90 -> die Referenz ist der Ursprung x = 0, y = 0\n" +"- Inkrementell G91 -> Die Referenz ist die vorherige Position" + +#: AppGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:140 +msgid "Absolute G90" +msgstr "Absolut G90" + +#: AppGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:141 +msgid "Incremental G91" +msgstr "Inkrementelles G91" + +#: AppGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:151 +msgid "Force Windows style line-ending" +msgstr "Windows Zeilenendemarkierung erzwingen" + +#: AppGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:153 +msgid "" +"When checked will force a Windows style line-ending\n" +"(\\r\\n) on non-Windows OS's." +msgstr "" +"Wenn ausgewählt werden Zeilenendungsmarkierungen von Windows (CRLF) auch auf " +"anderen Betriebssystemen geschrieben." + +#: AppGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:165 +msgid "Travel Line Color" +msgstr "Reiselinienfarbe" + +#: AppGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:169 +#: AppGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:235 +#: AppGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:262 +#: AppGUI/preferences/general/GeneralGUIPrefGroupUI.py:154 +#: AppGUI/preferences/general/GeneralGUIPrefGroupUI.py:220 +#: AppGUI/preferences/geometry/GeometryGenPrefGroupUI.py:84 +#: AppGUI/preferences/gerber/GerberGenPrefGroupUI.py:153 +#: AppTools/ToolRulesCheck.py:186 +msgid "Outline" +msgstr "Gliederung" + +#: AppGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:171 +msgid "Set the travel line color for plotted objects." +msgstr "Legen Sie die Reiselinienfarbe für geplottete Objekte fest." + +#: AppGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:186 +#: AppGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:252 +#: AppGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:279 +#: AppGUI/preferences/general/GeneralGUIPrefGroupUI.py:170 +#: AppGUI/preferences/general/GeneralGUIPrefGroupUI.py:237 +#: AppGUI/preferences/gerber/GerberGenPrefGroupUI.py:170 +msgid "Fill" +msgstr "Füll" + +#: AppGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:188 +#: AppGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:254 +#: AppGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:281 +#: AppGUI/preferences/gerber/GerberGenPrefGroupUI.py:172 +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 "" +"Legen Sie die Füllfarbe für geplottete Objekte fest.\n" +"Die ersten 6 Ziffern sind die Farbe und die letzten 2\n" +"Ziffern sind für Alpha (Transparenz)." + +#: AppGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:205 +#: AppGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:298 +#: AppGUI/preferences/general/GeneralGUIPrefGroupUI.py:190 +#: AppGUI/preferences/general/GeneralGUIPrefGroupUI.py:257 +#: AppGUI/preferences/gerber/GerberGenPrefGroupUI.py:189 +msgid "Alpha" +msgstr "Alpha" + +#: AppGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:207 +#: AppGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:300 +#: AppGUI/preferences/gerber/GerberGenPrefGroupUI.py:191 +msgid "Set the fill transparency for plotted objects." +msgstr "Legen Sie die Füllungstransparenz für geplottete Objekte fest." + +#: AppGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:231 +msgid "CNCJob Object Color" +msgstr "CNCJob-Objektfarbe" + +#: AppGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:237 +msgid "Set the color for plotted objects." +msgstr "Legen Sie die Farbe für geplottete Objekte fest." + +#: AppGUI/preferences/cncjob/CNCJobOptPrefGroupUI.py:27 +msgid "CNC Job Options" +msgstr "CNC-Auftragsoptionen" + +#: AppGUI/preferences/cncjob/CNCJobOptPrefGroupUI.py:31 +msgid "Export G-Code" +msgstr "G-Code exportieren" + +#: AppGUI/preferences/cncjob/CNCJobOptPrefGroupUI.py:47 +msgid "Prepend to G-Code" +msgstr "Voranstellen an G-Code" + +#: AppGUI/preferences/cncjob/CNCJobOptPrefGroupUI.py:56 +msgid "" +"Type here any G-Code commands you would like to add at the beginning of the " +"G-Code file." +msgstr "" +"Geben Sie hier alle G-Code-Befehle ein\n" +"die Sie zum Anfang der G-Code-Datei hinzufügen möchten." + +#: AppGUI/preferences/cncjob/CNCJobOptPrefGroupUI.py:63 +msgid "Append to G-Code" +msgstr "An G-Code anhängen" + +#: AppGUI/preferences/cncjob/CNCJobOptPrefGroupUI.py:73 +msgid "" +"Type here any G-Code commands you would like to append to the generated " +"file.\n" +"I.e.: M2 (End of program)" +msgstr "" +"Geben Sie hier alle G-Code-Befehle ein, die Sie an die generierte Datei " +"anhängen möchten.\n" +"Zum Beispiel: M2 (Programmende)" + +#: AppGUI/preferences/excellon/ExcellonAdvOptPrefGroupUI.py:27 +msgid "Excellon Adv. Options" +msgstr "Excellon erweiterte Optionen" + +#: AppGUI/preferences/excellon/ExcellonAdvOptPrefGroupUI.py:34 +#: AppGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:33 +#: AppGUI/preferences/gerber/GerberAdvOptPrefGroupUI.py:31 +msgid "Advanced Options" +msgstr "Erweiterte Optionen" + +#: AppGUI/preferences/excellon/ExcellonAdvOptPrefGroupUI.py:36 +msgid "" +"A list of Excellon advanced parameters.\n" +"Those parameters are available only for\n" +"Advanced App. Level." +msgstr "" +"Eine Liste der erweiterten Excellon-Parameter.\n" +"Diese Parameter sind nur für verfügbar\n" +"Erweiterte App. Niveau." + +#: AppGUI/preferences/excellon/ExcellonAdvOptPrefGroupUI.py:59 +msgid "Toolchange X,Y" +msgstr "Werkzeugwechsel X, Y" + +#: AppGUI/preferences/excellon/ExcellonAdvOptPrefGroupUI.py:61 +#: AppGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:47 +msgid "Toolchange X,Y position." +msgstr "Werkzeugwechsel X, Y Position." + +#: AppGUI/preferences/excellon/ExcellonAdvOptPrefGroupUI.py:121 +#: AppGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:134 +msgid "Spindle direction" +msgstr "Drehrichtung" + +#: AppGUI/preferences/excellon/ExcellonAdvOptPrefGroupUI.py:123 +#: AppGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:136 +msgid "" +"This sets the direction that the spindle is rotating.\n" +"It can be either:\n" +"- CW = clockwise or\n" +"- CCW = counter clockwise" +msgstr "" +"Hiermit wird die Drehrichtung der Spindel eingestellt.\n" +"Es kann entweder sein:\n" +"- CW = im Uhrzeigersinn oder\n" +"- CCW = gegen den Uhrzeigersinn" + +#: AppGUI/preferences/excellon/ExcellonAdvOptPrefGroupUI.py:134 +#: AppGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:148 +msgid "Fast Plunge" +msgstr "Schneller Sprung" + +#: AppGUI/preferences/excellon/ExcellonAdvOptPrefGroupUI.py:136 +#: AppGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:150 +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 "" +"Wenn Sie dies überprüfen, bewegen Sie sich vertikal\n" +"Z_Toolchange zu Z_move erfolgt mit G0,\n" +"Das bedeutet die schnellste verfügbare Geschwindigkeit.\n" +"WARNUNG: Die Verschiebung erfolgt bei Toolchange X, Y-Koordinaten." + +#: AppGUI/preferences/excellon/ExcellonAdvOptPrefGroupUI.py:143 +msgid "Fast Retract" +msgstr "Schneller Rückzug" + +#: AppGUI/preferences/excellon/ExcellonAdvOptPrefGroupUI.py:145 +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 "" +"Verlassen Sie die Lochstrategie.\n" +"  - Ungeprüft, beim Verlassen des Bohrlochs der Bohrer\n" +"fährt langsam, mit eingestelltem Vorschub (G1), bis zur Nulltiefe und dann\n" +"Fahren Sie so schnell wie möglich (G0) bis Z Move (Fahrhöhe).\n" +"  - 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." + +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:32 +msgid "A list of Excellon Editor parameters." +msgstr "Eine Liste der Excellon Editor-Parameter." + +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:40 +#: AppGUI/preferences/geometry/GeometryEditorPrefGroupUI.py:41 +#: AppGUI/preferences/gerber/GerberEditorPrefGroupUI.py:41 +#: AppGUI/preferences/tools/Tools2QRCodePrefGroupUI.py:194 +msgid "Selection limit" +msgstr "Auswahllimit" + +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:42 +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 "" +"Stellen Sie die Anzahl der ausgewählten Excellon-Geometrien ein\n" +"Elemente, über denen die Nutzgeometrie\n" +"wird nur ein Auswahlrechteck.\n" +"Erhöht die Leistung beim Bewegen von a\n" +"große Anzahl von geometrischen Elementen." + +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:55 +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:117 +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:123 +msgid "New Dia" +msgstr "Neuer Durchmesser" + +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:80 +msgid "Linear Drill Array" +msgstr "Linearbohrer-Array" + +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:84 +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:232 +#: AppGUI/preferences/gerber/GerberEditorPrefGroupUI.py:120 +msgid "Linear Direction" +msgstr "Lineare Richtung" + +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:126 +msgid "Circular Drill Array" +msgstr "Rundbohrer-Array" + +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:130 +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:280 +#: AppGUI/preferences/gerber/GerberEditorPrefGroupUI.py:164 +msgid "Circular Direction" +msgstr "Kreisrichtung" + +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:132 +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:282 +#: AppGUI/preferences/gerber/GerberEditorPrefGroupUI.py:166 +msgid "" +"Direction for circular array.\n" +"Can be CW = clockwise or CCW = counter clockwise." +msgstr "" +"Richtung für kreisförmige Anordnung. \n" +"Kann CW = Uhrzeigersinn oder CCW = Gegenuhrzeigersinn sein." + +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:143 +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:293 +#: AppGUI/preferences/gerber/GerberEditorPrefGroupUI.py:177 +msgid "Circular Angle" +msgstr "Kreiswinkel" + +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:196 +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 "" +"Winkel, in dem der Schlitz platziert ist.\n" +"Die Genauigkeit beträgt maximal 2 Dezimalstellen.\n" +"Der Mindestwert beträgt: -359,99 Grad.\n" +"Maximaler Wert ist: 360.00 Grad." + +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:215 +msgid "Linear Slot Array" +msgstr "Lineare Schlitzanordnung" + +#: AppGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:276 +msgid "Circular Slot Array" +msgstr "Kreisschlitz-Array" + +#: AppGUI/preferences/excellon/ExcellonExpPrefGroupUI.py:26 +msgid "Excellon Export" +msgstr "Excellon Export" + +#: AppGUI/preferences/excellon/ExcellonExpPrefGroupUI.py:30 +#: AppGUI/preferences/gerber/GerberExpPrefGroupUI.py:31 +msgid "Export Options" +msgstr "Exportoptionen" + +#: AppGUI/preferences/excellon/ExcellonExpPrefGroupUI.py:32 +msgid "" +"The parameters set here are used in the file exported\n" +"when using the File -> Export -> Export Excellon menu entry." +msgstr "" +"Die hier eingestellten Parameter werden in der exportierten Datei verwendet\n" +"bei Verwendung des Menüeintrags Datei -> Exportieren -> Exportieren von " +"Excellon." + +#: AppGUI/preferences/excellon/ExcellonExpPrefGroupUI.py:41 +#: AppGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:163 +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:39 +#: AppGUI/preferences/gerber/GerberExpPrefGroupUI.py:42 +#: AppGUI/preferences/gerber/GerberGenPrefGroupUI.py:82 +#: AppTools/ToolDistance.py:56 AppTools/ToolDistanceMin.py:49 +#: AppTools/ToolPcbWizard.py:127 AppTools/ToolProperties.py:154 +msgid "Units" +msgstr "Einheiten" + +#: AppGUI/preferences/excellon/ExcellonExpPrefGroupUI.py:43 +#: AppGUI/preferences/excellon/ExcellonExpPrefGroupUI.py:49 +msgid "The units used in the Excellon file." +msgstr "Die in der Excellon-Datei verwendeten Einheiten." + +#: AppGUI/preferences/excellon/ExcellonExpPrefGroupUI.py:46 +#: AppGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:87 +#: AppGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:173 +#: AppGUI/preferences/gerber/GerberExpPrefGroupUI.py:47 +#: AppGUI/preferences/gerber/GerberGenPrefGroupUI.py:87 +#: AppTools/ToolCalculators.py:61 AppTools/ToolPcbWizard.py:125 +msgid "INCH" +msgstr "ZOLL" + +#: AppGUI/preferences/excellon/ExcellonExpPrefGroupUI.py:47 +#: AppGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:174 +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:43 +#: AppGUI/preferences/gerber/GerberExpPrefGroupUI.py:48 +#: AppGUI/preferences/gerber/GerberGenPrefGroupUI.py:88 +#: AppTools/ToolCalculators.py:62 AppTools/ToolPcbWizard.py:126 +msgid "MM" +msgstr "MM" + +#: AppGUI/preferences/excellon/ExcellonExpPrefGroupUI.py:55 +#: AppGUI/preferences/gerber/GerberExpPrefGroupUI.py:56 +msgid "Int/Decimals" +msgstr "Ganzzahl / Dezimalzahl" + +#: AppGUI/preferences/excellon/ExcellonExpPrefGroupUI.py:57 +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 "" +"Die NC-Bohrdateien, normalerweise Excellon-Dateien genannt\n" +"sind Dateien, die in verschiedenen Formaten vorliegen.\n" +"Hier legen wir das verwendete Format fest\n" +"Koordinaten verwenden keine Periode." + +#: AppGUI/preferences/excellon/ExcellonExpPrefGroupUI.py:69 +#: AppGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:95 +#: AppGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:124 +msgid "" +"This numbers signify the number of digits in\n" +"the whole part of Excellon coordinates." +msgstr "" +"Diese Zahlen geben die Anzahl der Ziffern in an\n" +"der gesamte Teil der Excellon-Koordinaten." + +#: AppGUI/preferences/excellon/ExcellonExpPrefGroupUI.py:82 +#: AppGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:108 +#: AppGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:137 +msgid "" +"This numbers signify the number of digits in\n" +"the decimal part of Excellon coordinates." +msgstr "" +"Diese Zahlen geben die Anzahl der Ziffern in an\n" +"der Dezimalteil der Excellon-Koordinaten." + +#: AppGUI/preferences/excellon/ExcellonExpPrefGroupUI.py:91 +msgid "Format" +msgstr "Format" + +#: AppGUI/preferences/excellon/ExcellonExpPrefGroupUI.py:93 +#: AppGUI/preferences/excellon/ExcellonExpPrefGroupUI.py:103 +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 "" +"Wählen Sie das verwendete Koordinatenformat aus.\n" +"Koordinaten können mit oder ohne Dezimalpunkt gespeichert werden.\n" +"Wenn kein Dezimalzeichen vorhanden ist, muss dies angegeben werden\n" +"Die Anzahl der Ziffern für den ganzzahligen Teil und die Anzahl der " +"Dezimalstellen.\n" +"Es muss auch angegeben werden, wenn LZ = führende Nullen beibehalten werden\n" +"oder TZ = nachfolgende Nullen bleiben erhalten." + +#: AppGUI/preferences/excellon/ExcellonExpPrefGroupUI.py:100 +msgid "Decimal" +msgstr "Dezimal" + +#: AppGUI/preferences/excellon/ExcellonExpPrefGroupUI.py:101 +msgid "No-Decimal" +msgstr "Keine Dezimalzahl" + +#: AppGUI/preferences/excellon/ExcellonExpPrefGroupUI.py:114 +#: AppGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:145 +#: AppGUI/preferences/gerber/GerberExpPrefGroupUI.py:96 +#: AppGUI/preferences/gerber/GerberGenPrefGroupUI.py:97 +msgid "Zeros" +msgstr "Nullen" + +#: AppGUI/preferences/excellon/ExcellonExpPrefGroupUI.py:117 +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 "" +"Hiermit wird der Typ der Excellon-Nullen festgelegt.\n" +"Wenn LZ, dann werden führende Nullen beibehalten und\n" +"Nachgestellte Nullen werden entfernt.\n" +"Wenn TZ aktiviert ist, werden nachfolgende Nullen beibehalten\n" +"und führende Nullen werden entfernt." + +#: AppGUI/preferences/excellon/ExcellonExpPrefGroupUI.py:124 +#: AppGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:158 +#: AppGUI/preferences/gerber/GerberExpPrefGroupUI.py:106 +#: AppGUI/preferences/gerber/GerberGenPrefGroupUI.py:107 +#: AppTools/ToolPcbWizard.py:111 +msgid "LZ" +msgstr "LZ" + +#: AppGUI/preferences/excellon/ExcellonExpPrefGroupUI.py:125 +#: AppGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:159 +#: AppGUI/preferences/gerber/GerberExpPrefGroupUI.py:107 +#: AppGUI/preferences/gerber/GerberGenPrefGroupUI.py:108 +#: AppTools/ToolPcbWizard.py:112 +msgid "TZ" +msgstr "TZ" + +#: AppGUI/preferences/excellon/ExcellonExpPrefGroupUI.py:127 +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 "" +"Hiermit wird der Standardtyp von Excellon-Nullen festgelegt.\n" +"Wenn LZ, dann werden führende Nullen beibehalten und\n" +"Nachgestellte Nullen werden entfernt.\n" +"Wenn TZ aktiviert ist, werden nachfolgende Nullen beibehalten\n" +"und führende Nullen werden entfernt." + +#: AppGUI/preferences/excellon/ExcellonExpPrefGroupUI.py:137 +msgid "Slot type" +msgstr "Schlitze-Typ" + +#: AppGUI/preferences/excellon/ExcellonExpPrefGroupUI.py:140 +#: AppGUI/preferences/excellon/ExcellonExpPrefGroupUI.py:150 +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 "" +"Hier legen Sie fest, wie die Slots exportiert werden.\n" +"Wenn geroutet, werden die Slots geroutet\n" +"mit M15 / M16 Befehlen.\n" +"Beim Bohren (G85) werden die Steckplätze exportiert\n" +"Verwenden Sie den Befehl Bohrschlitz (G85)." + +#: AppGUI/preferences/excellon/ExcellonExpPrefGroupUI.py:147 +msgid "Routed" +msgstr "Geroutet" + +#: AppGUI/preferences/excellon/ExcellonExpPrefGroupUI.py:148 +msgid "Drilled(G85)" +msgstr "Gebohrt (G85)" + +#: AppGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:29 +msgid "Excellon General" +msgstr "Excellon Allgemeines" + +#: AppGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:62 +msgid "Excellon Format" +msgstr "Excellon Format" + +#: AppGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:64 +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 "" +"Die NC-Bohrdateien, normalerweise Excellon-Dateien genannt\n" +"sind Dateien, die in verschiedenen Formaten vorliegen.\n" +"Hier legen wir das verwendete Format fest\n" +"Koordinaten verwenden keine Periode.\n" +"\n" +"Mögliche Voreinstellungen:\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 ZOLL TZ\n" +"Eagle 3: 5 ZOLL TZ\n" +"\n" +"ALTIUM 2: 4 ZOLL LZ\n" +"Sprint-Layout 2: 4 ZOLL LZ\n" +"KiCAD 3: 5 ZOLL TZ" + +#: AppGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:88 +msgid "Default values for INCH are 2:4" +msgstr "Die Standardwerte für ZOLL sind 2: 4" + +#: AppGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:116 +msgid "METRIC" +msgstr "METRISCH" + +#: AppGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:117 +msgid "Default values for METRIC are 3:3" +msgstr "Die Standardwerte für METRISCH sind 3: 3" + +#: AppGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:148 +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 "" +"Hiermit wird der Typ der Excellon-Nullen festgelegt.\n" +"Wenn LZ, dann werden führende Nullen beibehalten und\n" +"Nachgestellte Nullen werden entfernt.\n" +"Wenn TZ aktiviert ist, werden nachfolgende Nullen beibehalten\n" +"und führende Nullen werden entfernt.\n" +"\n" +"Dies wird verwendet, wenn keine Informationen vorliegen\n" +"in der Excellon-Datei gespeichert." + +#: AppGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:166 +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 "" +"Dadurch werden die Standardeinheiten von Excellon-Dateien festgelegt.\n" +"Wird in der geparsten Datei der Wert hier nicht gefunden\n" +"wird verwendet. Einige Excellon-Dateien haben keinen Header\n" +"Daher wird dieser Parameter verwendet." + +#: AppGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:176 +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 "" +"Damit werden die Einheiten von Excellon-Dateien festgelegt.\n" +"Einige Excellon-Dateien haben keinen Header\n" +"Daher wird dieser Parameter verwendet." + +#: AppGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:184 +msgid "Update Export settings" +msgstr "Exporteinstellungen aktual" + +#: AppGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:201 +msgid "Excellon Optimization" +msgstr "Optimierung der Excellons" + +#: AppGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:204 +msgid "Algorithm:" +msgstr "Algorithmus:" + +#: AppGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:206 +#: AppGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:222 +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 "" +"Hiermit wird der Optimierungstyp für den Excellon-Bohrpfad festgelegt.\n" +"Wenn << MetaHeuristic >> aktiviert ist, verwenden Sie den Google OR-Tools-" +"Algorithmus\n" +"Es wird ein metaHeuristisch geführter lokaler Pfad verwendet. Die " +"Standardsuchzeit beträgt 3 Sekunden.\n" +"Wenn << Basic >> aktiviert ist, wird der Google OR-Tools Basic-Algorithmus " +"verwendet.\n" +"Wenn << TSA >> markiert ist, wird der Traveling Salesman-Algorithmus für " +"verwendet\n" +"Bohrpfadoptimierung.\n" +"\n" +"Wenn dieses Steuerelement deaktiviert ist, arbeitet FlatCAM im 32-Bit-Modus " +"und verwendet\n" +"Travelling Salesman-Algorithmus zur Pfadoptimierung." + +#: AppGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:217 +msgid "MetaHeuristic" +msgstr "MetaHeuristic" + +#: AppGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:218 +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:104 +#: AppObjects/FlatCAMExcellon.py:683 AppObjects/FlatCAMGeometry.py:561 +#: AppObjects/FlatCAMGerber.py:251 +msgid "Basic" +msgstr "Basis" + +#: AppGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:219 +msgid "TSA" +msgstr "TSA" + +#: AppGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:236 +#: AppGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:245 +#: AppGUI/preferences/geometry/GeometryOptPrefGroupUI.py:237 +msgid "Duration" +msgstr "Dauer" + +#: AppGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:239 +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 "" +"Wenn OR-Tools Metaheuristic (MH) aktiviert ist, wird ein angezeigt\n" +"maximale Schwelle für die Zeit, die das\n" +"Pfadoptimierung. Diese maximale Dauer wird hier eingestellt.\n" +"In Sekunden." + +#: AppGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:258 +msgid "Excellon Object Color" +msgstr "Excellon-Objektfarbe" + +#: AppGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:264 +#: AppGUI/preferences/geometry/GeometryGenPrefGroupUI.py:86 +#: AppGUI/preferences/gerber/GerberGenPrefGroupUI.py:155 +msgid "Set the line color for plotted objects." +msgstr "Legen Sie die Linienfarbe für geplottete Objekte fest." + +#: AppGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:29 +msgid "Excellon Options" +msgstr "Excellon-Optionen" + +#: AppGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:33 +#: AppGUI/preferences/geometry/GeometryOptPrefGroupUI.py:34 +msgid "Create CNC Job" +msgstr "CNC-Job erstellen" + +#: AppGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:35 +msgid "" +"Parameters used to create a CNC Job object\n" +"for this drill object." +msgstr "" +"Parameter, die zum Erstellen eines CNC-Auftragsobjekts verwendet werden\n" +"für dieses Bohrobjekt." + +#: AppGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:152 +#: AppGUI/preferences/geometry/GeometryOptPrefGroupUI.py:121 +msgid "Tool change" +msgstr "Werkzeugwechsel" + +#: AppGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:236 +#: AppGUI/preferences/geometry/GeometryOptPrefGroupUI.py:232 +msgid "Enable Dwell" +msgstr "Verweilzeit aktivieren" + +#: AppGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:259 +msgid "" +"The preprocessor JSON file that dictates\n" +"Gcode output." +msgstr "" +"Die Postprozessor-JSON-Datei, die diktiert\n" +"Gcode-Ausgabe." + +#: AppGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:270 +msgid "Gcode" +msgstr "Gcode" + +#: AppGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:272 +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 "" +"Wählen Sie aus, was für die GCode-Generierung verwendet werden soll:\n" +"'Bohrer', 'Schlüssel' oder 'Beide'.\n" +"Wenn Sie \"Schlüssel\" oder \"Beide\" wählen, werden die Schlüssel " +"angezeigt\n" +"in Bohrer umgewandelt." + +#: AppGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:288 +msgid "Mill Holes" +msgstr "Löcher bohren" + +#: AppGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:290 +msgid "Create Geometry for milling holes." +msgstr "Erstellen Sie Geometrie zum Fräsen von Löchern." + +#: AppGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:294 +msgid "Drill Tool dia" +msgstr "Bohrwerkzeugs Durchm" + +#: AppGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:305 +msgid "Slot Tool dia" +msgstr "Schlitzwerkzeug Durchmesser" + +#: AppGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:307 +msgid "" +"Diameter of the cutting tool\n" +"when milling slots." +msgstr "" +"Durchmesser des Schneidewerkzeugs\n" +"beim Fräsen von Schlitzen." + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:28 +msgid "App Settings" +msgstr "App Einstellungen" + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:49 +msgid "Grid Settings" +msgstr "Rastereinstellungen" + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:53 +msgid "X value" +msgstr "X-Wert" + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:55 +msgid "This is the Grid snap value on X axis." +msgstr "Dies ist der Rasterfangwert auf der X-Achse." + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:65 +msgid "Y value" +msgstr "Y-Wert" + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:67 +msgid "This is the Grid snap value on Y axis." +msgstr "Dies ist der Rasterfangwert auf der Y-Achse." + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:77 +msgid "Snap Max" +msgstr "Fang Max" + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:92 +msgid "Workspace Settings" +msgstr "Arbeitsbereichseinstellungen" + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:95 +msgid "Active" +msgstr "Aktiv" + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:97 +msgid "" +"Draw a delimiting rectangle on canvas.\n" +"The purpose is to illustrate the limits for our work." +msgstr "" +"Zeichnen Sie ein begrenzendes Rechteck auf die Leinwand.\n" +"Ziel ist es, die Grenzen unserer Arbeit aufzuzeigen." + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:105 +msgid "" +"Select the type of rectangle to be used on canvas,\n" +"as valid workspace." +msgstr "" +"Wählen Sie den Typ des Rechtecks für die Leinwand aus.\n" +"als gültiger Arbeitsbereich." + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:171 +msgid "Orientation" +msgstr "Orientierung" + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:172 +#: AppGUI/preferences/tools/ToolsFilmPrefGroupUI.py:239 +#: AppTools/ToolFilm.py:405 +msgid "" +"Can be:\n" +"- Portrait\n" +"- Landscape" +msgstr "" +"Eines von\n" +"- Hochformat\n" +"- Querformat" + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:176 +#: AppGUI/preferences/tools/ToolsFilmPrefGroupUI.py:243 +#: AppTools/ToolFilm.py:409 +msgid "Portrait" +msgstr "Hochformat" + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:177 +#: AppGUI/preferences/tools/ToolsFilmPrefGroupUI.py:244 +#: AppTools/ToolFilm.py:410 +msgid "Landscape" +msgstr "Querformat" + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:201 +msgid "Notebook" +msgstr "Notizbuch" + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:203 +#, fuzzy +#| 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." +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 AppGUI,\n" +"and include the Project, Selected and Tool tabs." +msgstr "" +"Hiermit wird die Schriftgröße für die im Notizbuch enthaltenen Elemente " +"festgelegt.\n" +"Das Notizbuch ist der ausblendbare Bereich auf der linken Seite der " +"Benutzeroberfläche.\n" +"und schließen Sie die Registerkarten Projekt, Ausgewählt und Werkzeug ein." + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:222 +msgid "Axis" +msgstr "Achse" + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:224 +msgid "This sets the font size for canvas axis." +msgstr "Hiermit wird die Schriftgröße für die Zeichenbereichsachse festgelegt." + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:241 +msgid "Textbox" +msgstr "Textfeld" + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:243 +#, fuzzy +#| msgid "" +#| "This sets the font size for the Textbox GUI\n" +#| "elements that are used in FlatCAM." +msgid "" +"This sets the font size for the Textbox AppGUI\n" +"elements that are used in FlatCAM." +msgstr "" +"Hiermit wird die Schriftgröße für die Textbox-GUI festgelegt\n" +"Elemente, die in FlatCAM verwendet werden." + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:261 +msgid "HUD" +msgstr "" + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:263 +#, fuzzy +#| msgid "This sets the font size for canvas axis." +msgid "This sets the font size for the Heads Up Display." +msgstr "Hiermit wird die Schriftgröße für die Zeichenbereichsachse festgelegt." + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:288 +msgid "Mouse Settings" +msgstr "Mauseinstellungen" + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:292 +msgid "Cursor Shape" +msgstr "Mauszeiger Form" + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:294 +msgid "" +"Choose a mouse cursor shape.\n" +"- Small -> with a customizable size.\n" +"- Big -> Infinite lines" +msgstr "" +"Wählen Sie eine Mauszeigerform.\n" +"- Klein -> mit einer anpassbaren Größe.\n" +"- Groß -> Unendliche Linien" + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:300 +msgid "Small" +msgstr "Klein" + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:301 +msgid "Big" +msgstr "Groß" + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:308 +msgid "Cursor Size" +msgstr "Mauszeigergröße" + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:310 +msgid "Set the size of the mouse cursor, in pixels." +msgstr "Stellen Sie die Größe des Mauszeigers in Pixel ein." + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:321 +msgid "Cursor Width" +msgstr "Mauszeiger Breite" + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:323 +msgid "Set the line width of the mouse cursor, in pixels." +msgstr "Legen Sie die Linienbreite des Mauszeigers in Pixel fest." + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:334 +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:341 +msgid "Cursor Color" +msgstr "Mauszeigerfarbe" + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:336 +msgid "Check this box to color mouse cursor." +msgstr "Aktivieren Sie dieses Kontrollkästchen, um den Mauszeiger einzufärben." + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:343 +msgid "Set the color of the mouse cursor." +msgstr "Stellen Sie die Farbe des Mauszeigers ein." + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:366 +msgid "Pan Button" +msgstr "Pan-Taste" + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:368 +msgid "" +"Select the mouse button to use for panning:\n" +"- MMB --> Middle Mouse Button\n" +"- RMB --> Right Mouse Button" +msgstr "" +"Wählen Sie die Maustaste aus, die Sie zum Verschieben verwenden möchten:\n" +"- MMB -> Mittlere Maustaste\n" +"- RMB -> Rechte Maustaste" + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:372 +msgid "MMB" +msgstr "MMB" + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:373 +msgid "RMB" +msgstr "RMB" + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:379 +msgid "Multiple Selection" +msgstr "Mehrfachauswahl" + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:381 +msgid "Select the key used for multiple selection." +msgstr "Wählen Sie den Schlüssel für die Mehrfachauswahl aus." + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:383 +msgid "CTRL" +msgstr "STRG" + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:384 +msgid "SHIFT" +msgstr "SHIFT" + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:395 +msgid "Delete object confirmation" +msgstr "Objektbestätigung löschen" + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:397 +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 "" +"Wenn diese Option aktiviert ist, werden Sie von der Anwendung um eine\n" +"Bestätigung des Benutzers gebeten Jedes Mal, wenn das Ereignis Objekt (e)\n" +"löschen ausgelöst wird, entweder durch\n" +"Menüverknüpfung oder Tastenkombination." + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:404 +msgid "\"Open\" behavior" +msgstr "\"Offen\" -Verhalten" + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:406 +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 "" +"Wenn diese Option aktiviert ist, wird beim Speichern der Dateien der Pfad " +"für die zuletzt gespeicherte Datei verwendet.\n" +"und der Pfad für die zuletzt geöffnete Datei wird beim Öffnen von Dateien " +"verwendet.\n" +"\n" +"Wenn das Kontrollkästchen deaktiviert ist, wird der Pfad zum Öffnen der " +"Dateien zuletzt verwendet: entweder der Pfad\n" +"Pfad zum Speichern von Dateien oder Pfad zum Öffnen von Dateien." + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:415 +msgid "Enable ToolTips" +msgstr "QuickInfos aktivieren" + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:417 +msgid "" +"Check this box if you want to have toolTips displayed\n" +"when hovering with mouse over items throughout the App." +msgstr "" +"Aktivieren Sie dieses Kontrollkästchen, wenn QuickInfos angezeigt werden " +"sollen\n" +"wenn Sie mit der Maus über Elemente in der App fahren." + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:424 +msgid "Allow Machinist Unsafe Settings" +msgstr "Unsichere Maschineneinstellungen erlauben" + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:426 +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 "" +"Wenn gewählt werden Applikationseinstellungen erlaubt,\n" +"die im normalen Betrieb als unsicher gelten.\n" +"Zum Beispiel negative Werte für schnelle Z Bewegungen, oder \n" +"Positive Z-Werte bei schneidvorgängen.\n" +"Wird beim Nächsten Programmstart wirksam\n" +" << ACHTUNG>>: Ändern Sie das nicht, wenn Sie nicht wissen was Sie tun!" + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:438 +msgid "Bookmarks limit" +msgstr "Lesezeichenlimit" + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:440 +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 "" +"Die maximale Anzahl von Lesezeichen, die im Menü installiert werden dürfen.\n" +"Die Anzahl der Lesezeichen im Lesezeichen-Manager ist möglicherweise größer\n" +"Aber das Menü wird nur so viel enthalten." + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:449 +msgid "Activity Icon" +msgstr "Aktivitätssymbol" + +#: AppGUI/preferences/general/GeneralAPPSetGroupUI.py:451 +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." + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:29 +msgid "App Preferences" +msgstr "App-Einstellungen" + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:40 +msgid "" +"The default value for FlatCAM units.\n" +"Whatever is selected here is set every time\n" +"FlatCAM is started." +msgstr "" +"Der Standardwert für FlatCAM-Einheiten.\n" +"Was hier ausgewählt wird, wird jedes Mal eingestellt\n" +"FLatCAM wird gestartet." + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:44 +msgid "IN" +msgstr "ZOLL" + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:50 +msgid "Precision MM" +msgstr "Präzision in mm" + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:52 +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 "" +"Die Anzahl der Nachkommastellen die in der gesamten Applikation verwendet " +"werden\n" +"wenn das Metrische Einheitensystem verwendet wird.\n" +"Jede Änderung erfordert einen Neustart der Applikation." + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:64 +msgid "Precision INCH" +msgstr "Präzision (Zoll)" + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:66 +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 "" +"Die Anzahl der Nachkommastellen die in der gesamten Applikation verwendet " +"werden\n" +"wenn das Imperiale (Inches) Einheitensystem verwendet wird.\n" +"Jede Änderung erfordert einen Neustart der Applikation." + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:78 +msgid "Graphic Engine" +msgstr "Grafik-Engine" + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:79 +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 "" +"Wählen Sie aus, welche Grafik-Engine in FlatCAM verwendet werden soll.\n" +"Legacy (2D) -> reduzierte Funktionalität, langsame Leistung, aber " +"verbesserte Kompatibilität.\n" +"OpenGL (3D) -> volle Funktionalität, hohe Leistung\n" +"Einige Grafikkarten sind zu alt und funktionieren nicht im OpenGL (3D) -" +"Modus. Beispiel:\n" +"Intel HD3000 oder älter. In diesem Fall ist der Plotbereich daher schwarz\n" +"Verwenden Sie den Legacy (2D) -Modus." + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:85 +msgid "Legacy(2D)" +msgstr "Legacy (2D)" + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:86 +msgid "OpenGL(3D)" +msgstr "OpenGL (3D)" + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:98 +msgid "APP. LEVEL" +msgstr "Darstellung" + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:99 +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 "" +"Wählen Sie die Standardbenutzungsstufe für FlatCAM.\n" +"BASIC-Level -> reduzierte Funktionalität, am besten für Anfänger.\n" +"ERWEITERTE Stufe -> volle Funktionalität.\n" +"\n" +"Die Auswahl hier beeinflusst die Parameter in\n" +"Die Registerkarte Ausgewählt für alle Arten von FlatCAM-Objekten." + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:105 +#: AppObjects/FlatCAMExcellon.py:696 AppObjects/FlatCAMGeometry.py:582 +#: AppObjects/FlatCAMGerber.py:278 +msgid "Advanced" +msgstr "Erweitert" + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:111 +msgid "Portable app" +msgstr "Portable Anwendung" + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:112 +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 "" +"Wählen Sie aus, ob die Anwendung als portabel ausgeführt werden soll.\n" +"\n" +"Wenn diese Option aktiviert ist, wird die Anwendung portabel ausgeführt.\n" +"Dies bedeutet, dass die Voreinstellungsdateien gespeichert werden\n" +"Im Anwendungsordner, im Unterordner lib \\ config." + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:125 +msgid "Languages" +msgstr "Sprachen" + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:126 +msgid "Set the language used throughout FlatCAM." +msgstr "Stellen Sie die Sprache ein, die in FlatCAM verwendet wird." + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:132 +msgid "Apply Language" +msgstr "Sprache anwend" + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:133 +msgid "" +"Set the language used throughout FlatCAM.\n" +"The app will restart after click." +msgstr "" +"Stellen Sie die in FlatCAM verwendete Sprache ein.\n" +"Die App wird nach dem Klicken neu gestartet." + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:147 +msgid "Startup Settings" +msgstr "Starteinstellungen" + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:151 +msgid "Splash Screen" +msgstr "Begrüßungsbildschirm" + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:153 +msgid "Enable display of the splash screen at application startup." +msgstr "" +"Aktivieren Sie die Anzeige des Begrüßungsbildschirms beim Start der " +"Anwendung." + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:165 +msgid "Sys Tray Icon" +msgstr "Systray-Symbol" + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:167 +msgid "Enable display of FlatCAM icon in Sys Tray." +msgstr "Anzeige des FlatCAM-Symbols in Systray aktivieren." + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:172 +msgid "Show Shell" +msgstr "Shell anzeigen" + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:174 +msgid "" +"Check this box if you want the shell to\n" +"start automatically at startup." +msgstr "" +"Aktivieren Sie dieses Kontrollkästchen, wenn Sie die Shell verwenden " +"möchten\n" +"Beim Start automatisch starten." + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:181 +msgid "Show Project" +msgstr "Projekt anzeigen" + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:183 +msgid "" +"Check this box if you want the project/selected/tool tab area to\n" +"to be shown automatically at startup." +msgstr "" +"Aktivieren Sie dieses Kontrollkästchen, wenn der\n" +"Bereich Projekt / Ausgewähltes / Werkzeugregister\n" +"angezeigt werden soll\n" +"beim Start automatisch angezeigt werden." + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:189 +msgid "Version Check" +msgstr "Versionsprüfung" + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:191 +msgid "" +"Check this box if you want to check\n" +"for a new version automatically at startup." +msgstr "" +"Aktivieren Sie dieses Kontrollkästchen,\n" +"wenn Sie das Kontrollkästchen aktivieren möchten\n" +"für eine neue Version automatisch beim Start." + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:198 +msgid "Send Statistics" +msgstr "Statistiken senden" + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:200 +msgid "" +"Check this box if you agree to send anonymous\n" +"stats automatically at startup, to help improve FlatCAM." +msgstr "" +"Aktivieren Sie dieses Kontrollkästchen, wenn Sie der anonymen Nachricht " +"zustimmen\n" +"wird beim Start automatisch aktualisiert, um FlatCAM zu verbessern." + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:214 +msgid "Workers number" +msgstr "Thread Anzahl" + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:216 +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 "" +"Die Anzahl der für die App verfügbaren Qthreads.\n" +"Eine größere Anzahl kann die Jobs, \n" +"anhängig von der Geschwindigkeit Ihres Computers, schneller ausführen.\n" +"Kann einen Wert zwischen 2 und 16 haben.\n" +"Der Standardwert ist 2.\n" +"Nach dem Ändern wird es beim nächsten Start der App angewendet." + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:230 +msgid "Geo Tolerance" +msgstr "Geo-Toleranz" + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:232 +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." + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:252 +msgid "Save Settings" +msgstr "Einstellungen speichern" + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:256 +msgid "Save Compressed Project" +msgstr "Speichern Sie das komprimierte Projekt" + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:258 +msgid "" +"Whether to save a compressed or uncompressed project.\n" +"When checked it will save a compressed FlatCAM project." +msgstr "" +"Gibt an, ob ein komprimiertes oder unkomprimiertes Projekt gespeichert " +"werden soll.\n" +"Wenn diese Option aktiviert ist, wird ein komprimiertes FlatCAM-Projekt " +"gespeichert." + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:267 +msgid "Compression" +msgstr "Kompression" + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:269 +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 "" +"Die beim Speichern verwendete Komprimierungsstufe\n" +"ein FlatCAM-Projekt. Ein höherer Wert bedeutet eine bessere Komprimierung\n" +"erfordern jedoch mehr RAM-Auslastung und mehr Verarbeitungszeit." + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:280 +msgid "Enable Auto Save" +msgstr "Aktiv. Sie die auto Speicherung" + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:282 +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." + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:292 +msgid "Interval" +msgstr "Intervall" + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:294 +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." + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:310 +msgid "Text to PDF parameters" +msgstr "Text zu PDF-Parametern" + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:312 +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." + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:321 +msgid "Top Margin" +msgstr "Oberer Rand" + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:323 +msgid "Distance between text body and the top of the PDF file." +msgstr "Abstand zwischen Textkörper und dem oberen Rand der PDF-Datei." + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:334 +msgid "Bottom Margin" +msgstr "Unterer Rand" + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:336 +msgid "Distance between text body and the bottom of the PDF file." +msgstr "Abstand zwischen Textkörper und dem unteren Rand der PDF-Datei." + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:347 +msgid "Left Margin" +msgstr "Linker Rand" + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:349 +msgid "Distance between text body and the left of the PDF file." +msgstr "Abstand zwischen Textkörper und der linken Seite der PDF-Datei." + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:360 +msgid "Right Margin" +msgstr "Rechter Rand" + +#: AppGUI/preferences/general/GeneralAppPrefGroupUI.py:362 +msgid "Distance between text body and the right of the PDF file." +msgstr "Abstand zwischen Textkörper und der rechten Seite der PDF-Datei." + +#: AppGUI/preferences/general/GeneralGUIPrefGroupUI.py:26 +msgid "GUI Preferences" +msgstr "GUI-Einstellungen" + +#: AppGUI/preferences/general/GeneralGUIPrefGroupUI.py:36 +msgid "Theme" +msgstr "Thema" + +#: AppGUI/preferences/general/GeneralGUIPrefGroupUI.py:38 +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." + +#: AppGUI/preferences/general/GeneralGUIPrefGroupUI.py:43 +msgid "Light" +msgstr "Licht" + +#: AppGUI/preferences/general/GeneralGUIPrefGroupUI.py:44 +msgid "Dark" +msgstr "Dunkel" + +#: AppGUI/preferences/general/GeneralGUIPrefGroupUI.py:51 +msgid "Use Gray Icons" +msgstr "Verwenden Sie graue Symbole" + +#: AppGUI/preferences/general/GeneralGUIPrefGroupUI.py:53 +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 "" +"Aktivieren Sie dieses Kontrollkästchen, um eine Reihe von Symbolen mit zu " +"verwenden\n" +"eine hellere (graue) Farbe. Zu verwenden, wenn a\n" +"Volldunkles Thema wird angewendet." + +#: AppGUI/preferences/general/GeneralGUIPrefGroupUI.py:73 +msgid "Layout" +msgstr "Layout" + +#: AppGUI/preferences/general/GeneralGUIPrefGroupUI.py:75 +msgid "" +"Select an layout for FlatCAM.\n" +"It is applied immediately." +msgstr "" +"Wählen Sie ein Layout für FlatCAM.\n" +"Es wird sofort angewendet." + +#: AppGUI/preferences/general/GeneralGUIPrefGroupUI.py:95 +msgid "Style" +msgstr "Stil" + +#: AppGUI/preferences/general/GeneralGUIPrefGroupUI.py:97 +msgid "" +"Select an style for FlatCAM.\n" +"It will be applied at the next app start." +msgstr "" +"Wählen Sie einen Stil für FlatCAM.\n" +"Es wird beim nächsten Start der App angewendet." + +#: AppGUI/preferences/general/GeneralGUIPrefGroupUI.py:111 +msgid "Activate HDPI Support" +msgstr "Aktivieren Sie die HDPI-Unterstützung" + +#: AppGUI/preferences/general/GeneralGUIPrefGroupUI.py:113 +msgid "" +"Enable High DPI support for FlatCAM.\n" +"It will be applied at the next app start." +msgstr "" +"Aktivieren Sie die High DPI-Unterstützung für FlatCAM.\n" +"Es wird beim nächsten Start der App angewendet." + +#: AppGUI/preferences/general/GeneralGUIPrefGroupUI.py:127 +msgid "Display Hover Shape" +msgstr "Schwebeflugform anzeigen" + +#: AppGUI/preferences/general/GeneralGUIPrefGroupUI.py:129 +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 "" +"Anzeige der Hover-Form für FlatCAM-Objekte aktivieren.\n" +"Es wird angezeigt, wenn sich der Mauszeiger in der Maus befindet\n" +"über jede Art von nicht ausgewähltem Objekt." + +#: AppGUI/preferences/general/GeneralGUIPrefGroupUI.py:136 +msgid "Display Selection Shape" +msgstr "Auswahlform anzeigen" + +#: AppGUI/preferences/general/GeneralGUIPrefGroupUI.py:138 +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 "" +"Aktivieren Sie die Anzeige einer Auswahlform für FlatCAM-Objekte.\n" +"Es wird angezeigt, wenn die Maus ein Objekt auswählt\n" +"entweder durch Klicken oder Ziehen der Maus von links nach rechts oder\n" +"rechts nach links." + +#: AppGUI/preferences/general/GeneralGUIPrefGroupUI.py:151 +msgid "Left-Right Selection Color" +msgstr "Links-Rechts-Auswahlfarbe" + +#: AppGUI/preferences/general/GeneralGUIPrefGroupUI.py:156 +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." + +#: AppGUI/preferences/general/GeneralGUIPrefGroupUI.py:172 +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 "" +"Legen Sie die Füllfarbe für das Auswahlfeld fest\n" +"falls die Auswahl von links nach rechts erfolgt.\n" +"Die ersten 6 Ziffern sind die Farbe und die letzten 2\n" +"Ziffern sind für Alpha (Transparenz)." + +#: AppGUI/preferences/general/GeneralGUIPrefGroupUI.py:192 +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." + +#: AppGUI/preferences/general/GeneralGUIPrefGroupUI.py:216 +msgid "Right-Left Selection Color" +msgstr "Rechts-Links-Auswahlfarbe" + +#: AppGUI/preferences/general/GeneralGUIPrefGroupUI.py:222 +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." + +#: AppGUI/preferences/general/GeneralGUIPrefGroupUI.py:239 +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 "" +"Legen Sie die Füllfarbe für das Auswahlfeld fest\n" +"falls die Auswahl von rechts nach links erfolgt.\n" +"Die ersten 6 Ziffern sind die Farbe und die letzten 2\n" +"Ziffern sind für Alpha (Transparenz)." + +#: AppGUI/preferences/general/GeneralGUIPrefGroupUI.py:259 +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." + +#: AppGUI/preferences/general/GeneralGUIPrefGroupUI.py:286 +msgid "Editor Color" +msgstr "Editorfarbe" + +#: AppGUI/preferences/general/GeneralGUIPrefGroupUI.py:290 +msgid "Drawing" +msgstr "Zeichnung" + +#: AppGUI/preferences/general/GeneralGUIPrefGroupUI.py:292 +msgid "Set the color for the shape." +msgstr "Legen Sie die Farbe für die Form fest." + +#: AppGUI/preferences/general/GeneralGUIPrefGroupUI.py:309 +msgid "Set the color of the shape when selected." +msgstr "Legt die Farbe der Form fest, wenn sie ausgewählt wird." + +#: AppGUI/preferences/general/GeneralGUIPrefGroupUI.py:332 +msgid "Project Items Color" +msgstr "Projektelemente Farbe" + +#: AppGUI/preferences/general/GeneralGUIPrefGroupUI.py:336 +msgid "Enabled" +msgstr "Aktiviert" + +#: AppGUI/preferences/general/GeneralGUIPrefGroupUI.py:338 +msgid "Set the color of the items in Project Tab Tree." +msgstr "Legen Sie die Farbe der Elemente im Projektregisterbaum fest." + +#: AppGUI/preferences/general/GeneralGUIPrefGroupUI.py:352 +msgid "Disabled" +msgstr "Deaktiviert" + +#: AppGUI/preferences/general/GeneralGUIPrefGroupUI.py:354 +msgid "" +"Set the color of the items in Project Tab Tree,\n" +"for the case when the items are disabled." +msgstr "" +"Legen Sie die Farbe der Elemente in der Projektregisterkarte fest.\n" +"für den Fall, wenn die Elemente deaktiviert sind." + +#: AppGUI/preferences/general/GeneralGUIPrefGroupUI.py:370 +msgid "Project AutoHide" +msgstr "Projekt autoausblenden" + +#: AppGUI/preferences/general/GeneralGUIPrefGroupUI.py:372 +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 "" +"Aktivieren Sie dieses Kontrollkästchen, wenn \n" +"der Bereich Projekt / Ausgewähltes / Werkzeugregister \n" +"angezeigt werden soll automatisch ausblenden, wenn \n" +"keine Objekte geladen sind und anzeigen, wenn ein \n" +"neues Objekt erstellt wird." + +#: AppGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:27 +msgid "Geometry Adv. Options" +msgstr "Geometrie Erw. Optionen" + +#: AppGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:35 +msgid "" +"A list of Geometry advanced parameters.\n" +"Those parameters are available only for\n" +"Advanced App. Level." +msgstr "" +"Eine Liste der erweiterten Geometrieparameter.\n" +"Diese Parameter sind nur für verfügbar\n" +"Erweiterte App. Niveau." + +#: AppGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:45 +#: AppGUI/preferences/tools/Tools2CalPrefGroupUI.py:112 +#: AppGUI/preferences/tools/ToolsSolderpastePrefGroupUI.py:134 +#: AppTools/ToolCalibration.py:125 AppTools/ToolSolderPaste.py:240 +msgid "Toolchange X-Y" +msgstr "Werkzeugwechsel X, Y" + +#: AppGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:56 +msgid "" +"Height of the tool just after starting the work.\n" +"Delete the value if you don't need this feature." +msgstr "" +"Höhe des Werkzeugs unmittelbar nach Beginn der Arbeit.\n" +"Löschen Sie den Wert, wenn Sie diese Funktion nicht benötigen." + +#: AppGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:158 +msgid "Segment X size" +msgstr "Segment X Größe" + +#: AppGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:160 +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 "" +"Die Größe des Trace-Segments auf der X-Achse.\n" +"Nützlich für die automatische Nivellierung.\n" +"Ein Wert von 0 bedeutet keine Segmentierung auf der X-Achse." + +#: AppGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:174 +msgid "Segment Y size" +msgstr "Segment Y Größe" + +#: AppGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:176 +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 "" +"Die Größe des Trace-Segments auf der Y-Achse.\n" +"Nützlich für die automatische Nivellierung.\n" +"Ein Wert von 0 bedeutet keine Segmentierung auf der Y-Achse." + +#: AppGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:192 +msgid "Area Exclusion" +msgstr "Gebietsausschluss" + +#: AppGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:194 +msgid "" +"Area exclusion parameters.\n" +"Those parameters are available only for\n" +"Advanced App. Level." +msgstr "" +"Bereichsausschlussparameter.\n" +"Diese Parameter sind nur für verfügbar\n" +"Erweiterte App. Niveau." + +#: AppGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:201 +msgid "Exclusion areas" +msgstr "Ausschlussbereiche" + +#: AppGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:212 +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:322 +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:286 +#: AppTools/ToolNCC.py:578 AppTools/ToolPaint.py:521 +msgid "Shape" +msgstr "Form" + +#: AppGUI/preferences/geometry/GeometryEditorPrefGroupUI.py:33 +msgid "A list of Geometry Editor parameters." +msgstr "Eine Liste der Geometry Editor-Parameter." + +#: AppGUI/preferences/geometry/GeometryEditorPrefGroupUI.py:43 +#: AppGUI/preferences/tools/Tools2QRCodePrefGroupUI.py:196 +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 "" +"Legen Sie die Anzahl der ausgewählten Geometrien fest\n" +"Elemente, über denen die Nutzgeometrie\n" +"wird nur ein Auswahlrechteck.\n" +"Erhöht die Leistung beim Bewegen von a\n" +"große Anzahl von geometrischen Elementen." + +#: AppGUI/preferences/geometry/GeometryGenPrefGroupUI.py:27 +msgid "Geometry General" +msgstr "Geometrie Allgemein" + +#: AppGUI/preferences/geometry/GeometryGenPrefGroupUI.py:49 +msgid "" +"The number of circle steps for Geometry \n" +"circle and arc shapes linear approximation." +msgstr "" +"Die Anzahl der Kreisschritte für die Geometrie\n" +"Kreis- und Bogenformen lineare Annäherung." + +#: AppGUI/preferences/geometry/GeometryGenPrefGroupUI.py:63 +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:41 +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:48 +#: AppGUI/preferences/tools/ToolsSolderpastePrefGroupUI.py:42 +msgid "Tools Dia" +msgstr "Werkzeugdurchmesser" + +#: AppGUI/preferences/geometry/GeometryGenPrefGroupUI.py:65 +#: AppGUI/preferences/gerber/GerberEditorPrefGroupUI.py:108 +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:43 +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:50 +#: AppGUI/preferences/tools/ToolsSolderpastePrefGroupUI.py:44 +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" + +#: AppGUI/preferences/geometry/GeometryGenPrefGroupUI.py:80 +msgid "Geometry Object Color" +msgstr "Geometrieobjekt Farbe" + +#: AppGUI/preferences/geometry/GeometryOptPrefGroupUI.py:28 +msgid "Geometry Options" +msgstr "Geometrieoptionen" + +#: AppGUI/preferences/geometry/GeometryOptPrefGroupUI.py:36 +msgid "" +"Create a CNC Job object\n" +"tracing the contours of this\n" +"Geometry object." +msgstr "" +"Erstellen Sie ein CNC-Auftragsobjekt\n" +"die Konturen davon nachzeichnen\n" +"Geometrieobjekt." + +#: AppGUI/preferences/geometry/GeometryOptPrefGroupUI.py:80 +msgid "Depth/Pass" +msgstr "Tiefe / Pass" + +#: AppGUI/preferences/geometry/GeometryOptPrefGroupUI.py:82 +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 "" +"Die Tiefe, die bei jedem Durchlauf geschnitten werden muss,\n" +"Wenn Mehrere Tiefe aktiviert ist.\n" +"Es hat zwar einen positiven Wert\n" +"es ist ein Bruch aus der Tiefe\n" +"was einen negativen Wert hat." + +#: AppGUI/preferences/gerber/GerberAdvOptPrefGroupUI.py:27 +msgid "Gerber Adv. Options" +msgstr "Erweiterte Optionen von Gerber" + +#: AppGUI/preferences/gerber/GerberAdvOptPrefGroupUI.py:33 +msgid "" +"A list of Gerber advanced parameters.\n" +"Those parameters are available only for\n" +"Advanced App. Level." +msgstr "" +"Eine Liste der erweiterten Gerber-Parameter.\n" +"Diese Parameter sind nur für verfügbar\n" +"Fortgeschrittene Anwendungsebene." + +#: AppGUI/preferences/gerber/GerberAdvOptPrefGroupUI.py:52 +msgid "Table Show/Hide" +msgstr "Tabelle anzeigen / ausblenden" + +#: AppGUI/preferences/gerber/GerberAdvOptPrefGroupUI.py:54 +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 "" +"Anzeige der Gerber-Blendentabelle umschalten.\n" +"Beim Ausblenden werden auch alle Markierungsformen gelöscht\n" +"das sind auf leinwand gezeichnet." + +#: AppGUI/preferences/gerber/GerberAdvOptPrefGroupUI.py:134 +msgid "Exterior" +msgstr "Äußeres" + +#: AppGUI/preferences/gerber/GerberAdvOptPrefGroupUI.py:135 +msgid "Interior" +msgstr "Inneres" + +#: AppGUI/preferences/gerber/GerberAdvOptPrefGroupUI.py:146 +#: AppObjects/FlatCAMGerber.py:497 AppTools/ToolCopperThieving.py:1022 +#: AppTools/ToolCopperThieving.py:1211 AppTools/ToolCopperThieving.py:1223 +#: AppTools/ToolNCC.py:2059 AppTools/ToolNCC.py:2170 AppTools/ToolNCC.py:2185 +#: AppTools/ToolNCC.py:3149 AppTools/ToolNCC.py:3254 AppTools/ToolNCC.py:3269 +#: AppTools/ToolNCC.py:3535 AppTools/ToolNCC.py:3636 AppTools/ToolNCC.py:3651 +#: camlib.py:982 +msgid "Buffering" +msgstr "Pufferung" + +#: AppGUI/preferences/gerber/GerberAdvOptPrefGroupUI.py:148 +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 "" +"Puffertyp:\n" +"- Keine -> beste Leistung, schnelles Laden von Dateien, aber keine so gute " +"Anzeige\n" +"- Voll -> langsames Laden von Dateien, aber gute Grafik. Dies ist die " +"Standardeinstellung.\n" +"<< WARNUNG >>: Ändern Sie dies nur, wenn Sie wissen, was Sie tun !!!" + +#: AppGUI/preferences/gerber/GerberAdvOptPrefGroupUI.py:153 +#: AppGUI/preferences/tools/Tools2FiducialsPrefGroupUI.py:88 +#: AppGUI/preferences/tools/ToolsFilmPrefGroupUI.py:207 +#: AppTools/ToolFiducials.py:201 AppTools/ToolFilm.py:238 +#: AppTools/ToolProperties.py:452 AppTools/ToolProperties.py:455 +#: AppTools/ToolProperties.py:458 AppTools/ToolProperties.py:483 +msgid "None" +msgstr "Keiner" + +#: AppGUI/preferences/gerber/GerberAdvOptPrefGroupUI.py:159 +msgid "Simplify" +msgstr "Vereinfachen" + +#: AppGUI/preferences/gerber/GerberAdvOptPrefGroupUI.py:161 +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 "" +"Wenn diese Option aktiviert ist, werden alle Gerber-Polygone angezeigt\n" +"geladen mit Vereinfachung mit einer festgelegten Toleranz.\n" +"<< WARNUNG >>: Ändern Sie dies nur, wenn Sie wissen, was Sie tun !!!" + +#: AppGUI/preferences/gerber/GerberAdvOptPrefGroupUI.py:168 +msgid "Tolerance" +msgstr "Toleranz" + +#: AppGUI/preferences/gerber/GerberAdvOptPrefGroupUI.py:169 +msgid "Tolerance for polygon simplification." +msgstr "Toleranz für Polygonvereinfachung." + +#: AppGUI/preferences/gerber/GerberEditorPrefGroupUI.py:33 +msgid "A list of Gerber Editor parameters." +msgstr "Eine Liste der Gerber-Editor-Parameter." + +#: AppGUI/preferences/gerber/GerberEditorPrefGroupUI.py:43 +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 "" +"Stellen Sie die Anzahl der ausgewählten Gerber-Geometrie ein\n" +"Elemente, über denen die Nutzgeometrie\n" +"wird nur ein Auswahlrechteck.\n" +"Erhöht die Leistung beim Bewegen von a\n" +"große Anzahl von geometrischen Elementen." + +#: AppGUI/preferences/gerber/GerberEditorPrefGroupUI.py:56 +msgid "New Aperture code" +msgstr "Neuer Blendencode" + +#: AppGUI/preferences/gerber/GerberEditorPrefGroupUI.py:69 +msgid "New Aperture size" +msgstr "Standard Blendenöffnung" + +#: AppGUI/preferences/gerber/GerberEditorPrefGroupUI.py:71 +msgid "Size for the new aperture" +msgstr "Wert für die neue Blende" + +#: AppGUI/preferences/gerber/GerberEditorPrefGroupUI.py:82 +msgid "New Aperture type" +msgstr "Neuer Blendentyp" + +#: AppGUI/preferences/gerber/GerberEditorPrefGroupUI.py:84 +msgid "" +"Type for the new aperture.\n" +"Can be 'C', 'R' or 'O'." +msgstr "" +"Geben Sie für die neue Blende ein.\n" +"Kann \"C\", \"R\" oder \"O\" sein." + +#: AppGUI/preferences/gerber/GerberEditorPrefGroupUI.py:106 +msgid "Aperture Dimensions" +msgstr "Öffnungsmaße" + +#: AppGUI/preferences/gerber/GerberEditorPrefGroupUI.py:116 +msgid "Linear Pad Array" +msgstr "Lineares Pad-Array" + +#: AppGUI/preferences/gerber/GerberEditorPrefGroupUI.py:160 +msgid "Circular Pad Array" +msgstr "Kreisschlitz-Array" + +#: AppGUI/preferences/gerber/GerberEditorPrefGroupUI.py:196 +msgid "Distance at which to buffer the Gerber element." +msgstr "Abstand, in dem das Gerber-Element gepuffert werden soll." + +#: AppGUI/preferences/gerber/GerberEditorPrefGroupUI.py:205 +msgid "Scale Tool" +msgstr "Skalierungswerk" + +#: AppGUI/preferences/gerber/GerberEditorPrefGroupUI.py:211 +msgid "Factor to scale the Gerber element." +msgstr "Faktor zum Skalieren des Gerber-Elements." + +#: AppGUI/preferences/gerber/GerberEditorPrefGroupUI.py:224 +msgid "Threshold low" +msgstr "Schwelle niedrig" + +#: AppGUI/preferences/gerber/GerberEditorPrefGroupUI.py:226 +msgid "Threshold value under which the apertures are not marked." +msgstr "Schwellenwert, unter dem die Blenden nicht markiert sind." + +#: AppGUI/preferences/gerber/GerberEditorPrefGroupUI.py:236 +msgid "Threshold high" +msgstr "Schwelle hoch" + +#: AppGUI/preferences/gerber/GerberEditorPrefGroupUI.py:238 +msgid "Threshold value over which the apertures are not marked." +msgstr "Schwellenwert, über dem die Blenden nicht markiert sind." + +#: AppGUI/preferences/gerber/GerberExpPrefGroupUI.py:27 +msgid "Gerber Export" +msgstr "Gerber Export" + +#: AppGUI/preferences/gerber/GerberExpPrefGroupUI.py:33 +msgid "" +"The parameters set here are used in the file exported\n" +"when using the File -> Export -> Export Gerber menu entry." +msgstr "" +"Die hier eingestellten Parameter werden in der exportierten Datei verwendet\n" +"bei Verwendung des Menüeintrags Datei -> Exportieren -> Gerber exportieren." + +#: AppGUI/preferences/gerber/GerberExpPrefGroupUI.py:44 +#: AppGUI/preferences/gerber/GerberExpPrefGroupUI.py:50 +#: AppGUI/preferences/gerber/GerberGenPrefGroupUI.py:84 +#: AppGUI/preferences/gerber/GerberGenPrefGroupUI.py:90 +msgid "The units used in the Gerber file." +msgstr "Die in der Gerber-Datei verwendeten Einheiten." + +#: AppGUI/preferences/gerber/GerberExpPrefGroupUI.py:58 +msgid "" +"The number of digits in the whole part of the number\n" +"and in the fractional part of the number." +msgstr "" +"Die Anzahl der Ziffern im gesamten Teil der Nummer\n" +"und im Bruchteil der Zahl." + +#: AppGUI/preferences/gerber/GerberExpPrefGroupUI.py:71 +msgid "" +"This numbers signify the number of digits in\n" +"the whole part of Gerber coordinates." +msgstr "" +"Diese Zahlen geben die Anzahl der Ziffern in an\n" +"der ganze Teil von Gerber koordiniert." + +#: AppGUI/preferences/gerber/GerberExpPrefGroupUI.py:87 +msgid "" +"This numbers signify the number of digits in\n" +"the decimal part of Gerber coordinates." +msgstr "" +"Diese Zahlen geben die Anzahl der Ziffern in an\n" +"Der Dezimalteil der Gerber-Koordinaten." + +#: AppGUI/preferences/gerber/GerberExpPrefGroupUI.py:99 +#: AppGUI/preferences/gerber/GerberExpPrefGroupUI.py:109 +#: AppGUI/preferences/gerber/GerberGenPrefGroupUI.py:100 +#: AppGUI/preferences/gerber/GerberGenPrefGroupUI.py:110 +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 "" +"Dies legt den Typ der Gerber-Nullen fest.\n" +"Wenn LZ, werden Leading Zeros und entfernt\n" +"Nachgestellte Nullen werden beibehalten.\n" +"Wenn TZ aktiviert ist, werden nachfolgende Nullen entfernt\n" +"und führende Nullen werden beibehalten." + +#: AppGUI/preferences/gerber/GerberGenPrefGroupUI.py:27 +msgid "Gerber General" +msgstr "Geometrie Allgemein" + +#: AppGUI/preferences/gerber/GerberGenPrefGroupUI.py:45 +msgid "M-Color" +msgstr "M-farbig" + +#: AppGUI/preferences/gerber/GerberGenPrefGroupUI.py:61 +msgid "" +"The number of circle steps for Gerber \n" +"circular aperture linear approximation." +msgstr "" +"Die Anzahl der Kreisschritte für Gerber\n" +"lineare Approximation mit kreisförmiger Apertur." + +#: AppGUI/preferences/gerber/GerberGenPrefGroupUI.py:73 +msgid "Default Values" +msgstr "Standardwerte" + +#: AppGUI/preferences/gerber/GerberGenPrefGroupUI.py:75 +msgid "" +"Those values will be used as fallback values\n" +"in case that they are not found in the Gerber file." +msgstr "" +"Diese Werte werden als Ersatzwerte verwendet\n" +"für den Fall, dass sie nicht in der Gerber-Datei gefunden werden." + +#: AppGUI/preferences/gerber/GerberGenPrefGroupUI.py:126 +msgid "Clean Apertures" +msgstr "Reinigen Sie die Öffnungen" + +#: AppGUI/preferences/gerber/GerberGenPrefGroupUI.py:128 +msgid "" +"Will remove apertures that do not have geometry\n" +"thus lowering the number of apertures in the Gerber object." +msgstr "" +"Entfernt Öffnungen ohne Geometrie\n" +"Dadurch wird die Anzahl der Öffnungen im Gerber-Objekt verringert." + +#: AppGUI/preferences/gerber/GerberGenPrefGroupUI.py:134 +msgid "Polarity change buffer" +msgstr "Polaritätswechselpuffer" + +#: AppGUI/preferences/gerber/GerberGenPrefGroupUI.py:136 +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 "" +"Wendet zusätzliche Pufferung für das an\n" +"Festkörpergeometrie, wenn sich die Polarität ändert.\n" +"Kann helfen, Gerber-Dateien zu laden, die sonst\n" +"nicht richtig laden." + +#: AppGUI/preferences/gerber/GerberGenPrefGroupUI.py:149 +msgid "Gerber Object Color" +msgstr "Gerber-Objektfarbe" + +#: AppGUI/preferences/gerber/GerberOptPrefGroupUI.py:29 +msgid "Gerber Options" +msgstr "Gerber-Optionen" + +#: AppGUI/preferences/gerber/GerberOptPrefGroupUI.py:107 +msgid "Combine Passes" +msgstr "Kombinieren Sie Pässe" + +# Don´t know Copper Thieving +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:27 +msgid "Copper Thieving Tool Options" +msgstr "Copper Thieving Tool Optionen" + +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:39 +msgid "" +"A tool to generate a Copper Thieving that can be added\n" +"to a selected Gerber file." +msgstr "" +"Ein Werkzeug um Copper Thieving durchzuführen, das auf\n" +"ein ausgewähltes Gerber File angewendet werden kann." + +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:47 +msgid "Number of steps (lines) used to interpolate circles." +msgstr "Anzahl der Schritte (Linien) um Kreise zu interpolieren." + +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:57 +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:261 +#: AppTools/ToolCopperThieving.py:96 AppTools/ToolCopperThieving.py:431 +msgid "Clearance" +msgstr "Freistellung" + +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:59 +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 "" +"Diese Auswahl definiert den Abstand zwischen den \"Copper Thieving\" " +"Komponenten.\n" +"und den Kupferverbindungen im Gerber File (möglicherweise wird hierbei ein " +"Polygon\n" +"in mehrere aufgeteilt." + +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:86 +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:309 +#: AppTools/ToolCopperThieving.py:125 AppTools/ToolNCC.py:535 +#: AppTools/ToolNCC.py:1306 AppTools/ToolNCC.py:1635 AppTools/ToolNCC.py:1928 +#: AppTools/ToolNCC.py:1992 AppTools/ToolNCC.py:3013 AppTools/ToolNCC.py:3022 +#: defaults.py:406 tclCommands/TclCommandCopperClear.py:190 +msgid "Itself" +msgstr "Selbst" + +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:87 +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:309 +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:280 +#: AppTools/ToolCopperThieving.py:126 AppTools/ToolNCC.py:535 +#: AppTools/ToolNCC.py:1316 AppTools/ToolNCC.py:1648 AppTools/ToolNCC.py:1944 +#: AppTools/ToolNCC.py:1999 AppTools/ToolPaint.py:485 AppTools/ToolPaint.py:945 +#: AppTools/ToolPaint.py:1451 +msgid "Area Selection" +msgstr "Bereichsauswahl" + +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:88 +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:309 +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:280 +#: AppTools/ToolCopperThieving.py:127 AppTools/ToolDblSided.py:216 +#: AppTools/ToolNCC.py:535 AppTools/ToolNCC.py:1664 AppTools/ToolNCC.py:1950 +#: AppTools/ToolNCC.py:2007 AppTools/ToolNCC.py:2383 AppTools/ToolNCC.py:2631 +#: AppTools/ToolNCC.py:3058 AppTools/ToolPaint.py:485 AppTools/ToolPaint.py:930 +#: AppTools/ToolPaint.py:1467 tclCommands/TclCommandCopperClear.py:192 +#: tclCommands/TclCommandPaint.py:166 +msgid "Reference Object" +msgstr "Ref. Objekt" + +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:90 +#: AppTools/ToolCopperThieving.py:129 +msgid "Reference:" +msgstr "Referenz:" + +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:92 +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 "" +"- 'Selbst' - die 'Copper Thieving' basiert auf der Objektausdehnung.\n" +"- 'Bereichsauswahl' - Klicken Sie mit der linken Maustaste, um den zu " +"füllenden Bereich auszuwählen.\n" +"- 'Referenzobjekt' - 'Copper Thieving' innerhalb des von einem anderen " +"Objekt angegebenen Bereichs." + +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:101 +#: AppGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py:76 +#: AppGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py:188 +#: AppGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:76 +#: AppGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:190 +#: AppTools/ToolCopperThieving.py:171 AppTools/ToolExtractDrills.py:102 +#: AppTools/ToolExtractDrills.py:240 AppTools/ToolPunchGerber.py:113 +#: AppTools/ToolPunchGerber.py:268 +msgid "Rectangular" +msgstr "Rechteckig" + +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:102 +#: AppTools/ToolCopperThieving.py:172 +msgid "Minimal" +msgstr "Minimal" + +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:104 +#: AppTools/ToolCopperThieving.py:174 AppTools/ToolFilm.py:94 +msgid "Box Type:" +msgstr "Box-Typ:" + +# Double +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:106 +#: AppTools/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 "" +"- 'Rechteckig' - Der Begrenzungsrahmen hat eine rechteckige Form.\n" +"- 'Minimal' - Der Begrenzungsrahmen ist die konvexe Rumpfform." + +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:120 +#: AppTools/ToolCopperThieving.py:192 +msgid "Dots Grid" +msgstr "Punktmuster" + +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:121 +#: AppTools/ToolCopperThieving.py:193 +msgid "Squares Grid" +msgstr "Quadratraster" + +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:122 +#: AppTools/ToolCopperThieving.py:194 +msgid "Lines Grid" +msgstr "Linienraster" + +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:124 +#: AppTools/ToolCopperThieving.py:196 +msgid "Fill Type:" +msgstr "Füllart:" + +# Double +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:126 +#: AppTools/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 "" +"- 'Solide' - 'Copper Thieving' wird ein solides Polygon sein.\n" +"- 'Punktraster' - Der leere Bereich wird mit einem Punktmuster gefüllt.\n" +"- 'Quadratraster ' - Der leere Bereich wird mit einem Quadratmuster " +"gefüllt.\n" +"- 'Linienraster' - Der leere Bereich wird mit einem Linienmuster gefüllt." + +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:134 +#: AppTools/ToolCopperThieving.py:217 +msgid "Dots Grid Parameters" +msgstr "Punktmuster Parameter" + +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:140 +#: AppTools/ToolCopperThieving.py:223 +msgid "Dot diameter in Dots Grid." +msgstr "Punktdurchmesser im Punktmuster." + +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:151 +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:180 +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:209 +#: AppTools/ToolCopperThieving.py:234 AppTools/ToolCopperThieving.py:274 +#: AppTools/ToolCopperThieving.py:314 +msgid "Spacing" +msgstr "Abstand" + +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:153 +#: AppTools/ToolCopperThieving.py:236 +msgid "Distance between each two dots in Dots Grid." +msgstr "Abstand zwischen zwei Punkten im Punktmuster." + +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:163 +#: AppTools/ToolCopperThieving.py:257 +msgid "Squares Grid Parameters" +msgstr "Quadratraster Parameter" + +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:169 +#: AppTools/ToolCopperThieving.py:263 +msgid "Square side size in Squares Grid." +msgstr "Quadratlängen im Quadratraster." + +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:182 +#: AppTools/ToolCopperThieving.py:276 +msgid "Distance between each two squares in Squares Grid." +msgstr "Abstand zwischen zwei Quadraten im Quadratraster." + +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:192 +#: AppTools/ToolCopperThieving.py:297 +msgid "Lines Grid Parameters" +msgstr "Schraffurparameter" + +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:198 +#: AppTools/ToolCopperThieving.py:303 +msgid "Line thickness size in Lines Grid." +msgstr "Liniendicke." + +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:211 +#: AppTools/ToolCopperThieving.py:316 +msgid "Distance between each two lines in Lines Grid." +msgstr "Linienabstand." + +# What is a Robber Bar? +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:221 +#: AppTools/ToolCopperThieving.py:354 +msgid "Robber Bar Parameters" +msgstr "Robber Bar-Parameter" + +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:223 +#: AppTools/ToolCopperThieving.py:356 +msgid "" +"Parameters used for the robber bar.\n" +"Robber bar = copper border to help in pattern hole plating." +msgstr "" +"Parameter für die Robber Bar\n" +"Eine Robber Bar ist ein Kupferrand bei Lochmustern." + +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:231 +#: AppTools/ToolCopperThieving.py:364 +msgid "Bounding box margin for robber bar." +msgstr "Begrenzungsrahmenrand der Robber Bar." + +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:242 +#: AppGUI/preferences/tools/ToolsCornersPrefGroupUI.py:42 +#: AppTools/ToolCopperThieving.py:375 AppTools/ToolCorners.py:113 +msgid "Thickness" +msgstr "Dicke" + +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:244 +#: AppTools/ToolCopperThieving.py:377 +msgid "The robber bar thickness." +msgstr "Dicke der Robber Bar." + +# What is pattern plating? +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:254 +#: AppTools/ToolCopperThieving.py:408 +msgid "Pattern Plating Mask" +msgstr "Musterbeschichtungsmaske" + +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:256 +#: AppTools/ToolCopperThieving.py:410 +msgid "Generate a mask for pattern plating." +msgstr "Erzeugen Sie eine Maske für die Musterbeschichtung." + +#: AppGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:263 +#: AppTools/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 "" +"Der Abstand zwischen den Copper Thieving Elementen \n" +"und/oder der Robber Bar und den tatsächlichen Öffnungen in der Maske." + +#: AppGUI/preferences/tools/Tools2CalPrefGroupUI.py:27 +msgid "Calibration Tool Options" +msgstr "Kalibirierungs-Tool-Optionen" + +#: AppGUI/preferences/tools/Tools2CalPrefGroupUI.py:38 +#: AppGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py:38 +#: AppGUI/preferences/tools/Tools2FiducialsPrefGroupUI.py:38 +#: AppGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:38 +#: AppGUI/preferences/tools/ToolsCornersPrefGroupUI.py:37 +#: AppTools/ToolCopperThieving.py:91 AppTools/ToolCorners.py:108 +#: AppTools/ToolFiducials.py:151 +msgid "Parameters used for this tool." +msgstr "Parameter für dieses Werkzeug." + +#: AppGUI/preferences/tools/Tools2CalPrefGroupUI.py:43 +#: AppTools/ToolCalibration.py:181 +msgid "Source Type" +msgstr "Quellenart" + +#: AppGUI/preferences/tools/Tools2CalPrefGroupUI.py:44 +#: AppTools/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 "" +"Die Quelle für Kalibrierungspunkte\n" +"Das können sein:\n" +"- \"Objekt\" klicken Sie auf eine Lochgeometrie oder ein Pad im Gerber\n" +"- \"Frei\" klicken Sie frei auf der Leinwand um einen Kalibierungspunkt zu " +"setzen" + +#: AppGUI/preferences/tools/Tools2CalPrefGroupUI.py:49 +#: AppTools/ToolCalibration.py:187 +msgid "Free" +msgstr "Frei" + +#: AppGUI/preferences/tools/Tools2CalPrefGroupUI.py:63 +#: AppTools/ToolCalibration.py:76 +msgid "Height (Z) for travelling between the points." +msgstr "Die Höhe (Z) für den Weg zwischen Pads." + +#: AppGUI/preferences/tools/Tools2CalPrefGroupUI.py:75 +#: AppTools/ToolCalibration.py:88 +msgid "Verification Z" +msgstr "Z Überprüfung" + +#: AppGUI/preferences/tools/Tools2CalPrefGroupUI.py:77 +#: AppTools/ToolCalibration.py:90 +msgid "Height (Z) for checking the point." +msgstr "Höhe (Z) um den Punkt zu prüfen." + +#: AppGUI/preferences/tools/Tools2CalPrefGroupUI.py:89 +#: AppTools/ToolCalibration.py:102 +msgid "Zero Z tool" +msgstr "Z Höhen Werkzeug" + +#: AppGUI/preferences/tools/Tools2CalPrefGroupUI.py:91 +#: AppTools/ToolCalibration.py:104 +msgid "" +"Include a sequence to zero the height (Z)\n" +"of the verification tool." +msgstr "" +"Fügen sie eine Sequenz ein um die Höhe (Z)\n" +"des Überprüfungswerkzeugs zu nullen." + +#: AppGUI/preferences/tools/Tools2CalPrefGroupUI.py:100 +#: AppTools/ToolCalibration.py:113 +msgid "Height (Z) for mounting the verification probe." +msgstr "Höhe (Z) zur Installation der Überprüfungssonde." + +#: AppGUI/preferences/tools/Tools2CalPrefGroupUI.py:114 +#: AppTools/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 "" +"Werkzeugwechsel X, Y Position.\n" +"Wenn kein Wert eingegeben wird, wird der Strom angezeigt\n" +"(x, y) Punkt wird verwendet," + +#: AppGUI/preferences/tools/Tools2CalPrefGroupUI.py:125 +#: AppTools/ToolCalibration.py:153 +msgid "Second point" +msgstr "Zweiter Punkt" + +#: AppGUI/preferences/tools/Tools2CalPrefGroupUI.py:127 +#: AppTools/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 "" +"Der zweite Punkt bei der Gcode-Überprüfung kann sein:\n" +"- oben links -> Der Benutzer richtet die Leiterplatte vertikal aus\n" +"- rechts unten -> Der Benutzer richtet die Leiterplatte horizontal aus" + +#: AppGUI/preferences/tools/Tools2CalPrefGroupUI.py:131 +#: AppTools/ToolCalibration.py:159 App_Main.py:4934 +msgid "Top-Left" +msgstr "Oben links" + +#: AppGUI/preferences/tools/Tools2CalPrefGroupUI.py:132 +#: AppTools/ToolCalibration.py:160 App_Main.py:4935 +msgid "Bottom-Right" +msgstr "Unten rechts" + +#: AppGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py:27 +msgid "Extract Drills Options" +msgstr "Optionen für Bohrer extrahieren" + +#: AppGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py:42 +#: AppGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:42 +#: AppTools/ToolExtractDrills.py:68 AppTools/ToolPunchGerber.py:75 +msgid "Processed Pads Type" +msgstr "Verarbeitete Pads Typ" + +#: AppGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py:44 +#: AppGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:44 +#: AppTools/ToolExtractDrills.py:70 AppTools/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." + +#: AppGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py:54 +#: AppGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:54 +#: AppTools/ToolExtractDrills.py:80 AppTools/ToolPunchGerber.py:91 +msgid "Process Circular Pads." +msgstr "Prozessrunde Pads." + +#: AppGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py:60 +#: AppGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py:162 +#: AppGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:60 +#: AppGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:164 +#: AppTools/ToolExtractDrills.py:86 AppTools/ToolExtractDrills.py:214 +#: AppTools/ToolPunchGerber.py:97 AppTools/ToolPunchGerber.py:242 +msgid "Oblong" +msgstr "Länglich" + +#: AppGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py:62 +#: AppGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:62 +#: AppTools/ToolExtractDrills.py:88 AppTools/ToolPunchGerber.py:99 +msgid "Process Oblong Pads." +msgstr "Längliche Pads verarbeiten." + +#: AppGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py:70 +#: AppGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:70 +#: AppTools/ToolExtractDrills.py:96 AppTools/ToolPunchGerber.py:107 +msgid "Process Square Pads." +msgstr "Quadratische Pads verarbeiten." + +#: AppGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py:78 +#: AppGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:78 +#: AppTools/ToolExtractDrills.py:104 AppTools/ToolPunchGerber.py:115 +msgid "Process Rectangular Pads." +msgstr "Rechteckige Pads verarbeiten." + +#: AppGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py:84 +#: AppGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py:201 +#: AppGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:84 +#: AppGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:203 +#: AppTools/ToolExtractDrills.py:110 AppTools/ToolExtractDrills.py:253 +#: AppTools/ToolProperties.py:172 AppTools/ToolPunchGerber.py:121 +#: AppTools/ToolPunchGerber.py:281 +msgid "Others" +msgstr "Andere" + +#: AppGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py:86 +#: AppGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:86 +#: AppTools/ToolExtractDrills.py:112 AppTools/ToolPunchGerber.py:123 +msgid "Process pads not in the categories above." +msgstr "Prozess-Pads nicht in den oben genannten Kategorien." + +#: AppGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py:99 +#: AppGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py:123 +#: AppGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:100 +#: AppGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:125 +#: AppTools/ToolExtractDrills.py:139 AppTools/ToolExtractDrills.py:156 +#: AppTools/ToolPunchGerber.py:150 AppTools/ToolPunchGerber.py:184 +msgid "Fixed Diameter" +msgstr "Fester Durchmesser" + +#: AppGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py:100 +#: AppGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py:140 +#: AppGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:101 +#: AppGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:142 +#: AppTools/ToolExtractDrills.py:140 AppTools/ToolExtractDrills.py:192 +#: AppTools/ToolPunchGerber.py:151 AppTools/ToolPunchGerber.py:214 +msgid "Fixed Annular Ring" +msgstr "Fester Ring" + +#: AppGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py:101 +#: AppGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:102 +#: AppTools/ToolExtractDrills.py:141 AppTools/ToolPunchGerber.py:152 +msgid "Proportional" +msgstr "Proportional" + +#: AppGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py:107 +#: AppTools/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" + +#: AppGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py:131 +#: AppGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:133 +#: AppGUI/preferences/tools/ToolsTransformPrefGroupUI.py:220 +#: AppTools/ToolExtractDrills.py:164 AppTools/ToolExtractDrills.py:285 +#: AppTools/ToolPunchGerber.py:192 AppTools/ToolPunchGerber.py:308 +#: AppTools/ToolTransform.py:357 App_Main.py:9852 +msgid "Value" +msgstr "Wert" + +#: AppGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py:133 +#: AppGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:135 +#: AppTools/ToolExtractDrills.py:166 AppTools/ToolPunchGerber.py:194 +msgid "Fixed hole diameter." +msgstr "Fester Lochdurchmesser." + +#: AppGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py:142 +#: AppGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:144 +#: AppTools/ToolExtractDrills.py:194 AppTools/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." + +#: AppGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py:151 +#: AppGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:153 +#: AppTools/ToolExtractDrills.py:203 AppTools/ToolPunchGerber.py:231 +msgid "The size of annular ring for circular pads." +msgstr "Die Größe des Ringes für kreisförmige Pads." + +#: AppGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py:164 +#: AppGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:166 +#: AppTools/ToolExtractDrills.py:216 AppTools/ToolPunchGerber.py:244 +msgid "The size of annular ring for oblong pads." +msgstr "Die Größe des Ringes für längliche Pads." + +#: AppGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py:177 +#: AppGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:179 +#: AppTools/ToolExtractDrills.py:229 AppTools/ToolPunchGerber.py:257 +msgid "The size of annular ring for square pads." +msgstr "Die Größe des Ringes für quadratische Pads." + +#: AppGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py:190 +#: AppGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:192 +#: AppTools/ToolExtractDrills.py:242 AppTools/ToolPunchGerber.py:270 +msgid "The size of annular ring for rectangular pads." +msgstr "Die Größe des Ringes für rechteckige Pads." + +#: AppGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py:203 +#: AppGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:205 +#: AppTools/ToolExtractDrills.py:255 AppTools/ToolPunchGerber.py:283 +msgid "The size of annular ring for other pads." +msgstr "Die Größe des Ringes für andere Pads." + +#: AppGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py:213 +#: AppGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:215 +#: AppTools/ToolExtractDrills.py:276 AppTools/ToolPunchGerber.py:299 +msgid "Proportional Diameter" +msgstr "Proportionaler Durchmesser" + +#: AppGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py:222 +#: AppGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:224 +msgid "Factor" +msgstr "Faktor" + +#: AppGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py:224 +#: AppGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:226 +#: AppTools/ToolExtractDrills.py:287 AppTools/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." + +# I have no clue +#: AppGUI/preferences/tools/Tools2FiducialsPrefGroupUI.py:27 +msgid "Fiducials Tool Options" +msgstr "Passermarken-Werkzeugoptionen" + +#: AppGUI/preferences/tools/Tools2FiducialsPrefGroupUI.py:45 +#: AppTools/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 "" +"Dies setzt den Durchmesser der Bezugsmarke wenn die Art \n" +"des Bezugspunktes kreisförmig ist, ansonsten die Größe des Bezugspunktes.\n" +"Der Ausschnitt der Lötmaske ist doppelt so groß." + +#: AppGUI/preferences/tools/Tools2FiducialsPrefGroupUI.py:73 +#: AppTools/ToolFiducials.py:186 +msgid "Auto" +msgstr "Auto" + +#: AppGUI/preferences/tools/Tools2FiducialsPrefGroupUI.py:74 +#: AppTools/ToolFiducials.py:187 +msgid "Manual" +msgstr "Manuell" + +#: AppGUI/preferences/tools/Tools2FiducialsPrefGroupUI.py:76 +#: AppTools/ToolFiducials.py:189 +msgid "Mode:" +msgstr "Modus:" + +#: AppGUI/preferences/tools/Tools2FiducialsPrefGroupUI.py:78 +msgid "" +"- 'Auto' - automatic placement of fiducials in the corners of the bounding " +"box.\n" +"- 'Manual' - manual placement of fiducials." +msgstr "" +"- \"Auto\" Die Bezugspunkte werden automatisch in den Ecken des Umrisses " +"platziert.\n" +"- \"Manuell\" Die Bezugspunkte werden manuell platziert." + +#: AppGUI/preferences/tools/Tools2FiducialsPrefGroupUI.py:86 +#: AppTools/ToolFiducials.py:199 +msgid "Up" +msgstr "Hoch" + +#: AppGUI/preferences/tools/Tools2FiducialsPrefGroupUI.py:87 +#: AppTools/ToolFiducials.py:200 +msgid "Down" +msgstr "Runter" + +#: AppGUI/preferences/tools/Tools2FiducialsPrefGroupUI.py:90 +#: AppTools/ToolFiducials.py:203 +msgid "Second fiducial" +msgstr "Zweiter Bezugspunkt" + +#: AppGUI/preferences/tools/Tools2FiducialsPrefGroupUI.py:92 +#: AppTools/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 "" +"Die Position des zweiten Bezugspunktes\n" +"- \"Hoch\" Die Reihenfolge ist Unten-Links, Oben-Links, Oben-Rechts\n" +"- \"Runter\" Die Reihenfolge ist Untern-Links, Unten-Rechts, Oben-Rechts\n" +"- \"Keine\" Es gibt keinen zweiten Bezugspunkt, die Reihenfolge ist: Unten-" +"Links, Oben-Rechts." + +#: AppGUI/preferences/tools/Tools2FiducialsPrefGroupUI.py:108 +#: AppTools/ToolFiducials.py:221 +msgid "Cross" +msgstr "Kreuzförmig" + +#: AppGUI/preferences/tools/Tools2FiducialsPrefGroupUI.py:109 +#: AppTools/ToolFiducials.py:222 +msgid "Chess" +msgstr "Schachbrett" + +#: AppGUI/preferences/tools/Tools2FiducialsPrefGroupUI.py:112 +#: AppTools/ToolFiducials.py:224 +msgid "Fiducial Type" +msgstr "Bezugspunktart" + +#: AppGUI/preferences/tools/Tools2FiducialsPrefGroupUI.py:114 +#: AppTools/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 "" +"Die Art der Bezugspunkte\n" +"\"Kreisförmig\" Der normale Bezugspunkt\n" +"\"Kreuzförmig\" Kreuzlinienbezugspunkte\n" +"\"Schachbrett\" Schachbrettförmige Bezugspunkte." + +#: AppGUI/preferences/tools/Tools2FiducialsPrefGroupUI.py:123 +#: AppTools/ToolFiducials.py:235 +msgid "Line thickness" +msgstr "Liniendicke" + +#: AppGUI/preferences/tools/Tools2InvertPrefGroupUI.py:27 +msgid "Invert Gerber Tool Options" +msgstr "Invert. Sie die Gerber-Werkzeugoptionen" + +#: AppGUI/preferences/tools/Tools2InvertPrefGroupUI.py:33 +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." + +#: AppGUI/preferences/tools/Tools2InvertPrefGroupUI.py:47 +#: AppTools/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." + +#: AppGUI/preferences/tools/Tools2InvertPrefGroupUI.py:58 +#: AppTools/ToolInvertGerber.py:101 +msgid "Lines Join Style" +msgstr "Linien verbinden Stil" + +#: AppGUI/preferences/tools/Tools2InvertPrefGroupUI.py:60 +#: AppTools/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" + +#: AppGUI/preferences/tools/Tools2OptimalPrefGroupUI.py:27 +msgid "Optimal Tool Options" +msgstr "\"Optimale\" Werkzeugoptionen" + +#: AppGUI/preferences/tools/Tools2OptimalPrefGroupUI.py:33 +msgid "" +"A tool to find the minimum distance between\n" +"every two Gerber geometric elements" +msgstr "" +"Ein Werkzeug, um den Mindestabstand zwischen zu finden\n" +"jeweils zwei Gerber geometrische Elemente" + +#: AppGUI/preferences/tools/Tools2OptimalPrefGroupUI.py:48 +#: AppTools/ToolOptimal.py:78 +msgid "Precision" +msgstr "Präzision" + +#: AppGUI/preferences/tools/Tools2OptimalPrefGroupUI.py:50 +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." + +#: AppGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:27 +msgid "Punch Gerber Options" +msgstr "Stanzen Sie die Gerber-Optionen" + +#: AppGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:108 +#: AppTools/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." +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." + +#: AppGUI/preferences/tools/Tools2QRCodePrefGroupUI.py:27 +msgid "QRCode Tool Options" +msgstr "QR Code-Tooloptionen" + +#: AppGUI/preferences/tools/Tools2QRCodePrefGroupUI.py:33 +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 "" +"Ein Werkzeug um QR Codes zu erzeugen, um diese\n" +"in Gerber Dateien einzufügen oder als Datei zu exportieren." + +#: AppGUI/preferences/tools/Tools2QRCodePrefGroupUI.py:45 +#: AppTools/ToolQRCode.py:100 +msgid "Version" +msgstr "Version" + +#: AppGUI/preferences/tools/Tools2QRCodePrefGroupUI.py:47 +#: AppTools/ToolQRCode.py:102 +msgid "" +"QRCode version can have values from 1 (21x21 boxes)\n" +"to 40 (177x177 boxes)." +msgstr "" +"Je nach QRCode Version kann 1 (21x21 Quadrate)\n" +" bis 40 (177x177 Quadrate) angegeben werden." + +#: AppGUI/preferences/tools/Tools2QRCodePrefGroupUI.py:58 +#: AppTools/ToolQRCode.py:113 +msgid "Error correction" +msgstr "Fehlerausgleich" + +#: AppGUI/preferences/tools/Tools2QRCodePrefGroupUI.py:60 +#: AppGUI/preferences/tools/Tools2QRCodePrefGroupUI.py:71 +#: AppTools/ToolQRCode.py:115 AppTools/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 "" +"Dieser Parameter kontrolliert die Fehlertoleranz:\n" +"L : max. 7%% Fehler können ausgeglichen werden\n" +"M : max. 15%% Fehler können ausgeglichen werden\n" +"Q: max. 25%% Fehler können ausgeglichen werden\n" +"H : max. 30%% Fehler können ausgeglichen warden." + +#: AppGUI/preferences/tools/Tools2QRCodePrefGroupUI.py:81 +#: AppTools/ToolQRCode.py:136 +msgid "Box Size" +msgstr "Quadratgröße" + +#: AppGUI/preferences/tools/Tools2QRCodePrefGroupUI.py:83 +#: AppTools/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 "" +"Über die Quadratgröße wird die Geamtgröße\n" +"des QRCodes beeinflusst, da sie die Größe jedes einzelnen Quadrats " +"spezifiziert." + +#: AppGUI/preferences/tools/Tools2QRCodePrefGroupUI.py:94 +#: AppTools/ToolQRCode.py:149 +msgid "Border Size" +msgstr "Randdicke" + +#: AppGUI/preferences/tools/Tools2QRCodePrefGroupUI.py:96 +#: AppTools/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 "" +"Dicke des Rands des QRCodes in Anzahl von Boxen.\n" +"Standardwert is 4. Die Breite gibt den Raum der Freistellung um den QRCode " +"an." + +#: AppGUI/preferences/tools/Tools2QRCodePrefGroupUI.py:107 +#: AppTools/ToolQRCode.py:162 +msgid "QRCode Data" +msgstr "QRCode Daten" + +#: AppGUI/preferences/tools/Tools2QRCodePrefGroupUI.py:109 +#: AppTools/ToolQRCode.py:164 +msgid "QRCode Data. Alphanumeric text to be encoded in the QRCode." +msgstr "Beliebiger Text der in den QRCode umgerechnet werden soll." + +#: AppGUI/preferences/tools/Tools2QRCodePrefGroupUI.py:113 +#: AppTools/ToolQRCode.py:168 +msgid "Add here the text to be included in the QRCode..." +msgstr "Geben Sie hier den Text in Ihrem QRCode an." + +#: AppGUI/preferences/tools/Tools2QRCodePrefGroupUI.py:119 +#: AppTools/ToolQRCode.py:174 +msgid "Polarity" +msgstr "Polarität" + +#: AppGUI/preferences/tools/Tools2QRCodePrefGroupUI.py:121 +#: AppTools/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 "" +"Geben Sie die Polarität des QRCodes an\n" +"Es kann entweder Negativ sein (die Boxen sind durchsichtig)\n" +"oder Positiv (die Boxen sind undurchsichtig)." + +#: AppGUI/preferences/tools/Tools2QRCodePrefGroupUI.py:125 +#: AppTools/ToolFilm.py:279 AppTools/ToolQRCode.py:180 +msgid "Negative" +msgstr "Negativ" + +#: AppGUI/preferences/tools/Tools2QRCodePrefGroupUI.py:126 +#: AppTools/ToolFilm.py:278 AppTools/ToolQRCode.py:181 +msgid "Positive" +msgstr "Positiv" + +#: AppGUI/preferences/tools/Tools2QRCodePrefGroupUI.py:128 +#: AppTools/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 "" +"Wählen Sie die Art des zu erzeugenden QRCodes.\n" +"Wenn er zu ein Silkscreen Gerber file hinzugefügt werden soll\n" +"sollte er \"Positiv\" sein, wenn sie ihn zum Copper File hinzufügen\n" +"wollen sollte er möglichst \"Negativ\" sein." + +#: AppGUI/preferences/tools/Tools2QRCodePrefGroupUI.py:139 +#: AppGUI/preferences/tools/Tools2QRCodePrefGroupUI.py:145 +#: AppTools/ToolQRCode.py:194 AppTools/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 "" +"Der Umriss um den QRCode, der die Freistellungsfläche definiert\n" +"kann abgerundete oder scharfe Ecken haben." + +#: AppGUI/preferences/tools/Tools2QRCodePrefGroupUI.py:142 +#: AppGUI/preferences/tools/ToolsTransformPrefGroupUI.py:239 +#: AppTools/ToolQRCode.py:197 AppTools/ToolTransform.py:383 +msgid "Rounded" +msgstr "Agberundet" + +#: AppGUI/preferences/tools/Tools2QRCodePrefGroupUI.py:152 +#: AppTools/ToolQRCode.py:228 +msgid "Fill Color" +msgstr "Boxfarbe" + +#: AppGUI/preferences/tools/Tools2QRCodePrefGroupUI.py:154 +#: AppTools/ToolQRCode.py:230 +msgid "Set the QRCode fill color (squares color)." +msgstr "Wählen Sie die Farbe der Boxen." + +#: AppGUI/preferences/tools/Tools2QRCodePrefGroupUI.py:173 +#: AppTools/ToolQRCode.py:252 +msgid "Back Color" +msgstr "Hintergrundfarbe" + +#: AppGUI/preferences/tools/Tools2QRCodePrefGroupUI.py:175 +#: AppTools/ToolQRCode.py:254 +msgid "Set the QRCode background color." +msgstr "Wählen Sie die Farbe im QRCode, die nicht von einer Box bedeckt ist." + +#: AppGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py:27 +msgid "Check Rules Tool Options" +msgstr "Optionen des Werkzeugs 'Regeln prüfen'" + +#: AppGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py:32 +msgid "" +"A tool to check if Gerber files are within a set\n" +"of Manufacturing Rules." +msgstr "" +"Ein Tool zum Überprüfen, ob sich Gerber-Dateien innerhalb eines Satzes " +"befinden\n" +"von Herstellungsregeln." + +#: AppGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py:42 +#: AppTools/ToolRulesCheck.py:265 AppTools/ToolRulesCheck.py:929 +msgid "Trace Size" +msgstr "Spurengröße" + +#: AppGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py:44 +#: AppTools/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." + +#: AppGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py:54 +#: AppGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py:74 +#: AppGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py:94 +#: AppGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py:114 +#: AppGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py:134 +#: AppGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py:154 +#: AppGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py:174 +#: AppGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py:194 +#: AppGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py:216 +#: AppGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py:236 +#: AppTools/ToolRulesCheck.py:277 AppTools/ToolRulesCheck.py:299 +#: AppTools/ToolRulesCheck.py:322 AppTools/ToolRulesCheck.py:345 +#: AppTools/ToolRulesCheck.py:368 AppTools/ToolRulesCheck.py:391 +#: AppTools/ToolRulesCheck.py:414 AppTools/ToolRulesCheck.py:437 +#: AppTools/ToolRulesCheck.py:462 AppTools/ToolRulesCheck.py:485 +msgid "Min value" +msgstr "Min. Wert" + +#: AppGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py:56 +#: AppTools/ToolRulesCheck.py:279 +msgid "Minimum acceptable trace size." +msgstr "Minimale akzeptable Trace-Größe." + +#: AppGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py:61 +#: AppTools/ToolRulesCheck.py:286 AppTools/ToolRulesCheck.py:1157 +#: AppTools/ToolRulesCheck.py:1187 +msgid "Copper to Copper clearance" +msgstr "Mininalabstand Kupfer zu Kupfer" + +#: AppGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py:63 +#: AppTools/ToolRulesCheck.py:288 +msgid "" +"This checks if the minimum clearance between copper\n" +"features is met." +msgstr "" +"Dies überprüft, ob der Mindestabstand zwischen Kupfer\n" +"Spuren ist erfüllt." + +#: AppGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py:76 +#: AppGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py:96 +#: AppGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py:116 +#: AppGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py:136 +#: AppGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py:156 +#: AppGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py:176 +#: AppGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py:238 +#: AppTools/ToolRulesCheck.py:301 AppTools/ToolRulesCheck.py:324 +#: AppTools/ToolRulesCheck.py:347 AppTools/ToolRulesCheck.py:370 +#: AppTools/ToolRulesCheck.py:393 AppTools/ToolRulesCheck.py:416 +#: AppTools/ToolRulesCheck.py:464 +msgid "Minimum acceptable clearance value." +msgstr "Minimaler akzeptabler Abstandswert." + +#: AppGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py:81 +#: AppTools/ToolRulesCheck.py:309 AppTools/ToolRulesCheck.py:1217 +#: AppTools/ToolRulesCheck.py:1223 AppTools/ToolRulesCheck.py:1236 +#: AppTools/ToolRulesCheck.py:1243 +msgid "Copper to Outline clearance" +msgstr "Mininalabstand Kupfer zum Rahmen" + +#: AppGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py:83 +#: AppTools/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." + +#: AppGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py:101 +#: AppTools/ToolRulesCheck.py:332 +msgid "Silk to Silk Clearance" +msgstr "Siebdruck zu siebdruck Abstand" + +#: AppGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py:103 +#: AppTools/ToolRulesCheck.py:334 +msgid "" +"This checks if the minimum clearance between silkscreen\n" +"features and silkscreen features is met." +msgstr "" +"Dies prüft, ob der Mindestabstand zwischen Siebdruck\n" +"Objekte und Silkscreen-Objekte erfüllt ist." + +#: AppGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py:121 +#: AppTools/ToolRulesCheck.py:355 AppTools/ToolRulesCheck.py:1326 +#: AppTools/ToolRulesCheck.py:1332 AppTools/ToolRulesCheck.py:1350 +msgid "Silk to Solder Mask Clearance" +msgstr "Siebdruck auf Lötmaske Clearance" + +#: AppGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py:123 +#: AppTools/ToolRulesCheck.py:357 +msgid "" +"This checks if the minimum clearance between silkscreen\n" +"features and soldermask features is met." +msgstr "" +"Dies prüft, ob der Mindestabstand zwischen Siebdruck\n" +"Spuren und Lötmaskenspuren werden eingehalten." + +#: AppGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py:141 +#: AppTools/ToolRulesCheck.py:378 AppTools/ToolRulesCheck.py:1380 +#: AppTools/ToolRulesCheck.py:1386 AppTools/ToolRulesCheck.py:1400 +#: AppTools/ToolRulesCheck.py:1407 +msgid "Silk to Outline Clearance" +msgstr "Siebdruck zur Gliederung Clearance" + +#: AppGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py:143 +#: AppTools/ToolRulesCheck.py:380 +msgid "" +"This checks if the minimum clearance between silk\n" +"features and the outline is met." +msgstr "" +"Dies prüft, ob der Mindestabstand zwischen Siebdruck\n" +"Spuren und der Umriss ist erfüllt." + +#: AppGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py:161 +#: AppTools/ToolRulesCheck.py:401 AppTools/ToolRulesCheck.py:1418 +#: AppTools/ToolRulesCheck.py:1445 +msgid "Minimum Solder Mask Sliver" +msgstr "Minimum Lötmaskenband" + +#: AppGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py:163 +#: AppTools/ToolRulesCheck.py:403 +msgid "" +"This checks if the minimum clearance between soldermask\n" +"features and soldermask features is met." +msgstr "" +"Hiermit wird geprüft, ob der Mindestabstand zwischen den Lötmasken " +"eingehalten wird\n" +"Spuren und Soldermask-Merkmale sind erfüllt." + +#: AppGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py:181 +#: AppTools/ToolRulesCheck.py:424 AppTools/ToolRulesCheck.py:1483 +#: AppTools/ToolRulesCheck.py:1489 AppTools/ToolRulesCheck.py:1505 +#: AppTools/ToolRulesCheck.py:1512 +msgid "Minimum Annular Ring" +msgstr "Minimaler Ring" + +#: AppGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py:183 +#: AppTools/ToolRulesCheck.py:426 +msgid "" +"This checks if the minimum copper ring left by drilling\n" +"a hole into a pad is met." +msgstr "" +"Dies überprüft, ob der minimale Kupferring durch Bohren übrig bleibt\n" +"Ein Loch in einem Pad ist getroffen." + +#: AppGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py:196 +#: AppTools/ToolRulesCheck.py:439 +msgid "Minimum acceptable ring value." +msgstr "Minimaler akzeptabler Ringwert." + +#: AppGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py:203 +#: AppTools/ToolRulesCheck.py:449 AppTools/ToolRulesCheck.py:873 +msgid "Hole to Hole Clearance" +msgstr "Loch zu Loch Abstand" + +#: AppGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py:205 +#: AppTools/ToolRulesCheck.py:451 +msgid "" +"This checks if the minimum clearance between a drill hole\n" +"and another drill hole is met." +msgstr "" +"Dies überprüft, ob der Mindestabstand zwischen einem Bohrloch ist\n" +"und ein weiteres Bohrloch ist getroffen." + +#: AppGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py:218 +#: AppTools/ToolRulesCheck.py:487 +msgid "Minimum acceptable drill size." +msgstr "Minimale zulässige Bohrergröße." + +#: AppGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py:223 +#: AppTools/ToolRulesCheck.py:472 AppTools/ToolRulesCheck.py:847 +msgid "Hole Size" +msgstr "Lochgröße" + +#: AppGUI/preferences/tools/Tools2RulesCheckPrefGroupUI.py:225 +#: AppTools/ToolRulesCheck.py:474 +msgid "" +"This checks if the drill holes\n" +"sizes are above the threshold." +msgstr "" +"Dadurch wird geprüft, ob die Bohrlöcher vorhanden sind\n" +"Größen liegen über der Schwelle." + +#: AppGUI/preferences/tools/Tools2sidedPrefGroupUI.py:27 +msgid "2Sided Tool Options" +msgstr "2Seitige Werkzeugoptionen" + +#: AppGUI/preferences/tools/Tools2sidedPrefGroupUI.py:33 +msgid "" +"A tool to help in creating a double sided\n" +"PCB using alignment holes." +msgstr "" +"Ein Werkzeug, das beim Erstellen eines doppelseitigen Dokuments hilft\n" +"PCB mit Ausrichtungslöchern." + +#: AppGUI/preferences/tools/Tools2sidedPrefGroupUI.py:47 +msgid "Drill dia" +msgstr "Bohrdurchmesser" + +#: AppGUI/preferences/tools/Tools2sidedPrefGroupUI.py:49 +#: AppTools/ToolDblSided.py:363 AppTools/ToolDblSided.py:368 +msgid "Diameter of the drill for the alignment holes." +msgstr "Durchmesser des Bohrers für die Ausrichtungslöcher." + +#: AppGUI/preferences/tools/Tools2sidedPrefGroupUI.py:56 +#: AppTools/ToolDblSided.py:377 +msgid "Align Axis" +msgstr "Achse ausrichten" + +#: AppGUI/preferences/tools/Tools2sidedPrefGroupUI.py:58 +#: AppGUI/preferences/tools/Tools2sidedPrefGroupUI.py:71 +#: AppTools/ToolDblSided.py:165 AppTools/ToolDblSided.py:379 +msgid "Mirror vertically (X) or horizontally (Y)." +msgstr "Vertikal spiegeln (X) oder horizontal (Y)." + +#: AppGUI/preferences/tools/Tools2sidedPrefGroupUI.py:69 +msgid "Mirror Axis:" +msgstr "Spiegelachse:" + +#: AppGUI/preferences/tools/Tools2sidedPrefGroupUI.py:80 +#: AppTools/ToolDblSided.py:181 +msgid "Point" +msgstr "Punkt" + +#: AppGUI/preferences/tools/Tools2sidedPrefGroupUI.py:81 +#: AppTools/ToolDblSided.py:182 +msgid "Box" +msgstr "Box" + +#: AppGUI/preferences/tools/Tools2sidedPrefGroupUI.py:82 +msgid "Axis Ref" +msgstr "Achsenreferenz" + +#: AppGUI/preferences/tools/Tools2sidedPrefGroupUI.py:84 +msgid "" +"The axis should pass through a point or cut\n" +" a specified box (in a FlatCAM object) through \n" +"the center." +msgstr "" +"Die Achse sollte einen Punkt durchlaufen oder schneiden\n" +"eine angegebene Box (in einem FlatCAM-Objekt) durch\n" +"das Zentrum." + +#: AppGUI/preferences/tools/ToolsCalculatorsPrefGroupUI.py:27 +msgid "Calculators Tool Options" +msgstr "Rechner-Tool-Optionen" + +#: AppGUI/preferences/tools/ToolsCalculatorsPrefGroupUI.py:31 +#: AppTools/ToolCalculators.py:25 +msgid "V-Shape Tool Calculator" +msgstr "V-Shape-Werkzeugrechner" + +#: AppGUI/preferences/tools/ToolsCalculatorsPrefGroupUI.py:33 +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 "" +"Berechnen Sie den Werkzeugdurchmesser für ein gegebenes V-förmiges " +"Werkzeug.\n" +"mit dem Spitzendurchmesser, Spitzenwinkel und\n" +"Schnitttiefe als Parameter." + +#: AppGUI/preferences/tools/ToolsCalculatorsPrefGroupUI.py:50 +#: AppTools/ToolCalculators.py:94 +msgid "Tip Diameter" +msgstr "Spitzendurchmesser" + +#: AppGUI/preferences/tools/ToolsCalculatorsPrefGroupUI.py:52 +#: AppTools/ToolCalculators.py:102 +msgid "" +"This is the tool tip diameter.\n" +"It is specified by manufacturer." +msgstr "" +"Dies ist der Werkzeugspitzendurchmesser.\n" +"Es wird vom Hersteller angegeben." + +#: AppGUI/preferences/tools/ToolsCalculatorsPrefGroupUI.py:64 +#: AppTools/ToolCalculators.py:105 +msgid "Tip Angle" +msgstr "Spitzenwinkel" + +#: AppGUI/preferences/tools/ToolsCalculatorsPrefGroupUI.py:66 +msgid "" +"This is the angle on the tip of the tool.\n" +"It is specified by manufacturer." +msgstr "" +"Dies ist der Winkel an der Spitze des Werkzeugs.\n" +"Es wird vom Hersteller angegeben." + +#: AppGUI/preferences/tools/ToolsCalculatorsPrefGroupUI.py:80 +msgid "" +"This is depth to cut into material.\n" +"In the CNCJob object it is the CutZ parameter." +msgstr "" +"Dies ist die Tiefe zum Schneiden in Material.\n" +"Im CNCJob-Objekt ist dies der Parameter CutZ." + +#: AppGUI/preferences/tools/ToolsCalculatorsPrefGroupUI.py:87 +#: AppTools/ToolCalculators.py:27 +msgid "ElectroPlating Calculator" +msgstr "Galvanikrechner" + +#: AppGUI/preferences/tools/ToolsCalculatorsPrefGroupUI.py:89 +#: AppTools/ToolCalculators.py:158 +msgid "" +"This calculator is useful for those who plate the via/pad/drill holes,\n" +"using a method like graphite ink or calcium hypophosphite ink or palladium " +"chloride." +msgstr "" +"Dieser Rechner ist nützlich für diejenigen, die die Durchgangslöcher / " +"Bohrungen / Bohrungen\n" +"unter Verwendung einer Methode wie Grahit-Tinte oder Calcium-Hypophosphit-" +"Tinte oder Palladiumchlorid." + +#: AppGUI/preferences/tools/ToolsCalculatorsPrefGroupUI.py:100 +#: AppTools/ToolCalculators.py:167 +msgid "Board Length" +msgstr "PCB Länge" + +#: AppGUI/preferences/tools/ToolsCalculatorsPrefGroupUI.py:102 +#: AppTools/ToolCalculators.py:173 +msgid "This is the board length. In centimeters." +msgstr "Dies ist die Boardlänge. In Zentimeter." + +#: AppGUI/preferences/tools/ToolsCalculatorsPrefGroupUI.py:112 +#: AppTools/ToolCalculators.py:175 +msgid "Board Width" +msgstr "PCB Breite" + +#: AppGUI/preferences/tools/ToolsCalculatorsPrefGroupUI.py:114 +#: AppTools/ToolCalculators.py:181 +msgid "This is the board width.In centimeters." +msgstr "Dies ist die Breite der Platte in Zentimetern." + +#: AppGUI/preferences/tools/ToolsCalculatorsPrefGroupUI.py:119 +#: AppTools/ToolCalculators.py:183 +msgid "Current Density" +msgstr "Stromdichte" + +#: AppGUI/preferences/tools/ToolsCalculatorsPrefGroupUI.py:125 +#: AppTools/ToolCalculators.py:190 +msgid "" +"Current density to pass through the board. \n" +"In Amps per Square Feet ASF." +msgstr "" +"Stromdichte durch die Platine.\n" +"In Ampere pro Quadratfuß ASF." + +#: AppGUI/preferences/tools/ToolsCalculatorsPrefGroupUI.py:131 +#: AppTools/ToolCalculators.py:193 +msgid "Copper Growth" +msgstr "Kupferwachstum" + +#: AppGUI/preferences/tools/ToolsCalculatorsPrefGroupUI.py:137 +#: AppTools/ToolCalculators.py:200 +msgid "" +"How thick the copper growth is intended to be.\n" +"In microns." +msgstr "" +"Wie dick soll das Kupferwachstum sein.\n" +"In Mikrometern." + +#: AppGUI/preferences/tools/ToolsCornersPrefGroupUI.py:27 +#, fuzzy +#| msgid "Gerber Options" +msgid "Corner Markers Options" +msgstr "Gerber-Optionen" + +#: AppGUI/preferences/tools/ToolsCornersPrefGroupUI.py:44 +#: AppTools/ToolCorners.py:115 +msgid "The thickness of the line that makes the corner marker." +msgstr "" + +#: AppGUI/preferences/tools/ToolsCornersPrefGroupUI.py:58 +#: AppTools/ToolCorners.py:129 +msgid "The length of the line that makes the corner marker." +msgstr "" + +#: AppGUI/preferences/tools/ToolsCutoutPrefGroupUI.py:28 +msgid "Cutout Tool Options" +msgstr "Ausschnittwerkzeug-Optionen" + +#: AppGUI/preferences/tools/ToolsCutoutPrefGroupUI.py:43 +#: AppTools/ToolCalculators.py:123 AppTools/ToolCutOut.py:129 +msgid "Tool Diameter" +msgstr "Werkzeugdurchm" + +#: AppGUI/preferences/tools/ToolsCutoutPrefGroupUI.py:45 +#: AppTools/ToolCutOut.py:131 +msgid "" +"Diameter of the tool used to cutout\n" +"the PCB shape out of the surrounding material." +msgstr "" +"Durchmesser des zum Ausschneiden verwendeten Werkzeugs\n" +"die PCB-Form aus dem umgebenden Material." + +#: AppGUI/preferences/tools/ToolsCutoutPrefGroupUI.py:100 +msgid "Object kind" +msgstr "Objektart" + +#: AppGUI/preferences/tools/ToolsCutoutPrefGroupUI.py:102 +#: AppTools/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 "" +"Auswahl, welche Art von Objekt ausgeschnitten werden soll.
    - Einfach " +": Enthält ein einzelnes PCB-Gerber-Umrissobjekt.
    - Panel : " +"Ein Panel-PCB-Gerber Objekt, dass\n" +"aus vielen einzelnen PCB-Konturen zusammengesetzt ist." + +#: AppGUI/preferences/tools/ToolsCutoutPrefGroupUI.py:109 +#: AppTools/ToolCutOut.py:83 +msgid "Single" +msgstr "Einzeln" + +#: AppGUI/preferences/tools/ToolsCutoutPrefGroupUI.py:110 +#: AppTools/ToolCutOut.py:84 +msgid "Panel" +msgstr "Platte" + +#: AppGUI/preferences/tools/ToolsCutoutPrefGroupUI.py:117 +#: AppTools/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 "" +"Marge über Grenzen. Ein positiver Wert hier\n" +"macht den Ausschnitt der Leiterplatte weiter aus\n" +"die tatsächliche PCB-Grenze" + +#: AppGUI/preferences/tools/ToolsCutoutPrefGroupUI.py:130 +#: AppTools/ToolCutOut.py:203 +msgid "Gap size" +msgstr "Spaltgröße" + +#: AppGUI/preferences/tools/ToolsCutoutPrefGroupUI.py:132 +#: AppTools/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 "" +"Die Größe der Brückenlücken im Ausschnitt\n" +"verwendet, um die Platine verbunden zu halten\n" +"das umgebende Material (das eine\n" +"von denen die Leiterplatte ausgeschnitten ist)." + +#: AppGUI/preferences/tools/ToolsCutoutPrefGroupUI.py:146 +#: AppTools/ToolCutOut.py:245 +msgid "Gaps" +msgstr "Spalt" + +#: AppGUI/preferences/tools/ToolsCutoutPrefGroupUI.py:148 +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 "" +"Anzahl der für den Ausschnitt verwendeten Brückenlücken.\n" +"Es können maximal 8 Brücken / Lücken vorhanden sein.\n" +"Die Wahlmöglichkeiten sind:\n" +"- Keine - keine Lücken\n" +"- lr \t- links + rechts\n" +"- tb \t- oben + unten\n" +"- 4 \t- links + rechts + oben + unten\n" +"- 2lr \t- 2 * links + 2 * rechts\n" +"- 2 tb \t- 2 * oben + 2 * unten\n" +"- 8 \t- 2 * links + 2 * rechts + 2 * oben + 2 * unten" + +#: AppGUI/preferences/tools/ToolsCutoutPrefGroupUI.py:170 +#: AppTools/ToolCutOut.py:222 +msgid "Convex Shape" +msgstr "Konvexe Form" + +#: AppGUI/preferences/tools/ToolsCutoutPrefGroupUI.py:172 +#: AppTools/ToolCutOut.py:225 +msgid "" +"Create a convex shape surrounding the entire PCB.\n" +"Used only if the source object type is Gerber." +msgstr "" +"Erstellen Sie eine konvexe Form, die die gesamte Leiterplatte umgibt.\n" +"Wird nur verwendet, wenn der Quellobjekttyp Gerber ist." + +#: AppGUI/preferences/tools/ToolsFilmPrefGroupUI.py:27 +msgid "Film Tool Options" +msgstr "Filmwerkzeugoptionen" + +#: AppGUI/preferences/tools/ToolsFilmPrefGroupUI.py:33 +msgid "" +"Create a PCB film from a Gerber or Geometry\n" +"FlatCAM object.\n" +"The file is saved in SVG format." +msgstr "" +"Erstellen Sie einen PCB-Film aus einem Gerber oder einer Geometrie\n" +"FlatCAM-Objekt\n" +"Die Datei wird im SVG-Format gespeichert." + +#: AppGUI/preferences/tools/ToolsFilmPrefGroupUI.py:44 +msgid "Film Type" +msgstr "Filmtyp" + +#: AppGUI/preferences/tools/ToolsFilmPrefGroupUI.py:46 AppTools/ToolFilm.py:283 +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 "" +"Erzeugen Sie einen positiven schwarzen Film oder einen Negativfilm.\n" +"Positiv bedeutet, dass die Funktionen gedruckt werden\n" +"mit schwarz auf einer weißen leinwand.\n" +"Negativ bedeutet, dass die Features gedruckt werden\n" +"mit weiß auf einer schwarzen leinwand.\n" +"Das Filmformat ist SVG." + +#: AppGUI/preferences/tools/ToolsFilmPrefGroupUI.py:57 +msgid "Film Color" +msgstr "Filmfarbe" + +#: AppGUI/preferences/tools/ToolsFilmPrefGroupUI.py:59 +msgid "Set the film color when positive film is selected." +msgstr "Stellen Sie die Filmfarbe ein, wenn Positivfilm ausgewählt ist." + +#: AppGUI/preferences/tools/ToolsFilmPrefGroupUI.py:82 AppTools/ToolFilm.py:299 +msgid "Border" +msgstr "Rand" + +#: AppGUI/preferences/tools/ToolsFilmPrefGroupUI.py:84 AppTools/ToolFilm.py:301 +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 "" +"Geben Sie einen Rahmen um das Objekt an.\n" +"Nur für Negativfilm.\n" +"Es hilft, wenn wir als Boxobjekt das gleiche verwenden\n" +"Objekt wie in Filmobjekt. Es wird ein dickes schaffen\n" +"schwarzer Balken um den tatsächlichen Druck, so dass a\n" +"bessere Abgrenzung der Gliederungsmerkmale von\n" +"weiße Farbe wie der Rest und die mit der verwechseln kann\n" +"Umgebung, wenn nicht für diese Grenze." + +#: AppGUI/preferences/tools/ToolsFilmPrefGroupUI.py:101 +#: AppTools/ToolFilm.py:266 +msgid "Scale Stroke" +msgstr "Skalierungshub" + +#: AppGUI/preferences/tools/ToolsFilmPrefGroupUI.py:103 +#: AppTools/ToolFilm.py:268 +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 "" +"Skalieren Sie die Strichstärke der einzelnen Features in der SVG-Datei.\n" +"Dies bedeutet, dass die Linie, die jedes SVG-Feature einhüllt, dicker oder " +"dünner ist.\n" +"Daher können die Feinheiten von diesem Parameter stärker beeinflusst werden." + +#: AppGUI/preferences/tools/ToolsFilmPrefGroupUI.py:110 +#: AppTools/ToolFilm.py:124 +msgid "Film Adjustments" +msgstr "Filmeinstellungen" + +#: AppGUI/preferences/tools/ToolsFilmPrefGroupUI.py:112 +#: AppTools/ToolFilm.py:126 +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 "" +"Manchmal verzerren die Drucker die Druckform, insbesondere die Lasertypen.\n" +"In diesem Abschnitt finden Sie die Tools zum Ausgleichen der " +"Druckverzerrungen." + +#: AppGUI/preferences/tools/ToolsFilmPrefGroupUI.py:119 +#: AppTools/ToolFilm.py:133 +msgid "Scale Film geometry" +msgstr "Filmgeometrie skalieren" + +#: AppGUI/preferences/tools/ToolsFilmPrefGroupUI.py:121 +#: AppTools/ToolFilm.py:135 +msgid "" +"A value greater than 1 will stretch the film\n" +"while a value less than 1 will jolt it." +msgstr "" +"Ein Wert größer als 1 streckt den Film\n" +"Ein Wert unter 1 ruckelt." + +#: AppGUI/preferences/tools/ToolsFilmPrefGroupUI.py:131 +#: AppGUI/preferences/tools/ToolsTransformPrefGroupUI.py:103 +#: AppTools/ToolFilm.py:145 AppTools/ToolTransform.py:148 +msgid "X factor" +msgstr "X Faktor" + +#: AppGUI/preferences/tools/ToolsFilmPrefGroupUI.py:140 +#: AppGUI/preferences/tools/ToolsTransformPrefGroupUI.py:116 +#: AppTools/ToolFilm.py:154 AppTools/ToolTransform.py:168 +msgid "Y factor" +msgstr "Y Faktor" + +#: AppGUI/preferences/tools/ToolsFilmPrefGroupUI.py:150 +#: AppTools/ToolFilm.py:172 +msgid "Skew Film geometry" +msgstr "Verzerren Sie die Filmgeometrie" + +#: AppGUI/preferences/tools/ToolsFilmPrefGroupUI.py:152 +#: AppTools/ToolFilm.py:174 +msgid "" +"Positive values will skew to the right\n" +"while negative values will skew to the left." +msgstr "" +"Positive Werte werden nach rechts verschoben\n" +"negative Werte werden nach links verschoben." + +#: AppGUI/preferences/tools/ToolsFilmPrefGroupUI.py:162 +#: AppGUI/preferences/tools/ToolsTransformPrefGroupUI.py:72 +#: AppTools/ToolFilm.py:184 AppTools/ToolTransform.py:97 +msgid "X angle" +msgstr "X Winkel" + +#: AppGUI/preferences/tools/ToolsFilmPrefGroupUI.py:171 +#: AppGUI/preferences/tools/ToolsTransformPrefGroupUI.py:86 +#: AppTools/ToolFilm.py:193 AppTools/ToolTransform.py:118 +msgid "Y angle" +msgstr "Y Winkel" + +#: AppGUI/preferences/tools/ToolsFilmPrefGroupUI.py:182 +#: AppTools/ToolFilm.py:204 +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 "" +"Der Referenzpunkt, der als Ursprung für den Versatz verwendet werden soll.\n" +"Dies kann einer der vier Punkte des Geometrie-Begrenzungsrahmens sein." + +#: AppGUI/preferences/tools/ToolsFilmPrefGroupUI.py:185 +#: AppTools/ToolCorners.py:80 AppTools/ToolFiducials.py:87 +#: AppTools/ToolFilm.py:207 +msgid "Bottom Left" +msgstr "Unten links" + +#: AppGUI/preferences/tools/ToolsFilmPrefGroupUI.py:186 +#: AppTools/ToolCorners.py:88 AppTools/ToolFilm.py:208 +msgid "Top Left" +msgstr "Oben links" + +#: AppGUI/preferences/tools/ToolsFilmPrefGroupUI.py:187 +#: AppTools/ToolCorners.py:84 AppTools/ToolFilm.py:209 +msgid "Bottom Right" +msgstr "Unten rechts" + +#: AppGUI/preferences/tools/ToolsFilmPrefGroupUI.py:188 +#: AppTools/ToolFilm.py:210 +msgid "Top right" +msgstr "Oben rechts" + +#: AppGUI/preferences/tools/ToolsFilmPrefGroupUI.py:196 +#: AppTools/ToolFilm.py:227 +msgid "Mirror Film geometry" +msgstr "Spiegeln Sie die Filmgeometrie" + +#: AppGUI/preferences/tools/ToolsFilmPrefGroupUI.py:198 +#: AppTools/ToolFilm.py:229 +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." + +#: AppGUI/preferences/tools/ToolsFilmPrefGroupUI.py:212 +#: AppTools/ToolFilm.py:243 +msgid "Mirror axis" +msgstr "Achse spiegeln" + +#: AppGUI/preferences/tools/ToolsFilmPrefGroupUI.py:222 +#: AppTools/ToolFilm.py:388 +msgid "SVG" +msgstr "SVG" + +#: AppGUI/preferences/tools/ToolsFilmPrefGroupUI.py:223 +#: AppTools/ToolFilm.py:389 +msgid "PNG" +msgstr "PNG" + +#: AppGUI/preferences/tools/ToolsFilmPrefGroupUI.py:224 +#: AppTools/ToolFilm.py:390 +msgid "PDF" +msgstr "PDF" + +#: AppGUI/preferences/tools/ToolsFilmPrefGroupUI.py:227 +#: AppTools/ToolFilm.py:281 AppTools/ToolFilm.py:393 +msgid "Film Type:" +msgstr "Filmtyp:" + +#: AppGUI/preferences/tools/ToolsFilmPrefGroupUI.py:229 +#: AppTools/ToolFilm.py:395 +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 "" +"Der Dateityp in dem gespeichert werden soll:\n" +"- 'SVG' -> open-source vectorial format\n" +"- 'PNG' -> raster image\n" +"- 'PDF' -> portable document format" + +#: AppGUI/preferences/tools/ToolsFilmPrefGroupUI.py:238 +#: AppTools/ToolFilm.py:404 +msgid "Page Orientation" +msgstr "Seitenausrichtung" + +#: AppGUI/preferences/tools/ToolsFilmPrefGroupUI.py:251 +#: AppTools/ToolFilm.py:417 +msgid "Page Size" +msgstr "Seitengröße" + +#: AppGUI/preferences/tools/ToolsFilmPrefGroupUI.py:252 +#: AppTools/ToolFilm.py:418 +msgid "A selection of standard ISO 216 page sizes." +msgstr "Eine Auswahl von Standard ISO 216 Seitengrößen." + +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:27 +msgid "NCC Tool Options" +msgstr "NCC-Tooloptionen" + +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:49 +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:57 +msgid "Comma separated values" +msgstr "Komma-getrennte Werte" + +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:55 +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:63 +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:64 AppTools/ToolNCC.py:215 +#: AppTools/ToolNCC.py:223 AppTools/ToolPaint.py:197 AppTools/ToolPaint.py:205 +msgid "" +"Default tool type:\n" +"- 'V-shape'\n" +"- Circular" +msgstr "" +"Standardwerkzeugtyp:\n" +"- \"V-Form\"\n" +"- Rundschreiben" + +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:60 +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:69 AppTools/ToolNCC.py:220 +#: AppTools/ToolPaint.py:202 +msgid "V-shape" +msgstr "V-Form" + +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:100 +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:109 +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:107 +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:116 +#: AppTools/ToolNCC.py:262 AppTools/ToolNCC.py:271 AppTools/ToolPaint.py:244 +#: AppTools/ToolPaint.py:253 +msgid "" +"Depth of cut into material. Negative value.\n" +"In FlatCAM units." +msgstr "" +"Schnitttiefe in Material. Negativer Wert.\n" +"In FlatCAM-Einheiten." + +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:119 +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:125 +#: AppTools/ToolNCC.py:280 AppTools/ToolPaint.py:262 +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." + +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:156 +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:142 +#: AppTools/ToolNCC.py:174 AppTools/ToolPaint.py:157 +msgid "Tool order" +msgstr "Werkzeugbestellung" + +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:157 +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:167 +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:143 +#: AppTools/ToolNCC.py:175 AppTools/ToolNCC.py:185 AppTools/ToolPaint.py:158 +#: AppTools/ToolPaint.py:168 +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' --> means 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 "" +"Hiermit wird festgelegt, wie die Werkzeuge in der Werkzeugtabelle verwendet " +"werden.\n" +"'Nein' -> bedeutet, dass die verwendete Reihenfolge die in der " +"Werkzeugtabelle ist\n" +"'Weiter' -> bedeutet, dass die Werkzeuge von klein nach groß sortiert " +"werden\n" +"'Rückwärts' -> Menus, die die Werkzeuge von groß nach klein ordnen\n" +"\n" +"WARNUNG: Bei Verwendung der Restbearbeitung wird die Reihenfolge automatisch " +"festgelegt\n" +"in umgekehrter Richtung und deaktivieren Sie diese Steuerung." + +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:165 +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:151 +#: AppTools/ToolNCC.py:183 AppTools/ToolPaint.py:166 +msgid "Forward" +msgstr "Vorwärts" + +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:166 +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:152 +#: AppTools/ToolNCC.py:184 AppTools/ToolPaint.py:167 +msgid "Reverse" +msgstr "Rückwärts" + +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:266 +msgid "Offset value" +msgstr "Offsetwert" + +# What the hack is a FlatCAM unit?? +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:268 +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." + +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:288 +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:244 +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:245 +#: AppTools/ToolNCC.py:512 AppTools/ToolPaint.py:441 +msgid "Rest Machining" +msgstr "Restbearbeitung" + +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:290 AppTools/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 "" +"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" +"Wenn nicht aktiviert, verwenden Sie den Standardalgorithmus." + +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:313 AppTools/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 "" +"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." + +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:339 +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:303 +msgid "Normal" +msgstr "NormalFormat" + +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:340 +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:304 +msgid "Progressive" +msgstr "Progressiv" + +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:341 +msgid "NCC Plotting" +msgstr "NCC-Plotten" + +#: AppGUI/preferences/tools/ToolsNCCPrefGroupUI.py:343 +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' - normales Plotten am Ende des NCC-Jobs\n" +"- 'Progressiv' - Nachdem jede Form generiert wurde, wird sie geplottet." + +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:27 +msgid "Paint Tool Options" +msgstr "Paint werkzeug-Optionen" + +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:33 +msgid "Parameters:" +msgstr "Parameter:" + +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:247 +#: AppTools/ToolPaint.py:444 +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." + +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:260 +#: AppTools/ToolPaint.py:457 +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 "" +"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." + +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:280 +#: AppTools/ToolPaint.py:485 AppTools/ToolPaint.py:941 +#: AppTools/ToolPaint.py:1431 tclCommands/TclCommandPaint.py:164 +msgid "Polygon Selection" +msgstr "Polygon auswahl" + +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:280 +#: AppTools/ToolPaint.py:485 AppTools/ToolPaint.py:1426 defaults.py:433 +#: tclCommands/TclCommandPaint.py:162 +msgid "All Polygons" +msgstr "Alle Polygone" + +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:305 +msgid "Paint Plotting" +msgstr "Malen Sie Plotten" + +#: AppGUI/preferences/tools/ToolsPaintPrefGroupUI.py:307 +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' - normales Plotten am Ende des Malvorgangs\n" +"- 'Progressiv' - Nachdem jede Form generiert wurde, wird sie geplottet." + +#: AppGUI/preferences/tools/ToolsPanelizePrefGroupUI.py:27 +msgid "Panelize Tool Options" +msgstr "Panelize Werkzeugoptionen" + +#: AppGUI/preferences/tools/ToolsPanelizePrefGroupUI.py:33 +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 "" +"Erstellen Sie ein Objekt, das ein Array von (x, y) Elementen enthält.\n" +"Jedes Element ist eine Kopie des Quellobjekts\n" +"in einem X-Abstand, Y-Abstand voneinander." + +#: AppGUI/preferences/tools/ToolsPanelizePrefGroupUI.py:50 +#: AppTools/ToolPanelize.py:165 +msgid "Spacing cols" +msgstr "Abstandspalten" + +#: AppGUI/preferences/tools/ToolsPanelizePrefGroupUI.py:52 +#: AppTools/ToolPanelize.py:167 +msgid "" +"Spacing between columns of the desired panel.\n" +"In current units." +msgstr "" +"Abstand zwischen den Spalten des gewünschten Bereichs.\n" +"In aktuellen Einheiten." + +#: AppGUI/preferences/tools/ToolsPanelizePrefGroupUI.py:64 +#: AppTools/ToolPanelize.py:177 +msgid "Spacing rows" +msgstr "Abstand Reihen" + +#: AppGUI/preferences/tools/ToolsPanelizePrefGroupUI.py:66 +#: AppTools/ToolPanelize.py:179 +msgid "" +"Spacing between rows of the desired panel.\n" +"In current units." +msgstr "" +"Abstand zwischen den Reihen des gewünschten Feldes.\n" +"In aktuellen Einheiten." + +#: AppGUI/preferences/tools/ToolsPanelizePrefGroupUI.py:77 +#: AppTools/ToolPanelize.py:188 +msgid "Columns" +msgstr "Säulen" + +#: AppGUI/preferences/tools/ToolsPanelizePrefGroupUI.py:79 +#: AppTools/ToolPanelize.py:190 +msgid "Number of columns of the desired panel" +msgstr "Anzahl der Spalten des gewünschten Bereichs" + +#: AppGUI/preferences/tools/ToolsPanelizePrefGroupUI.py:89 +#: AppTools/ToolPanelize.py:198 +msgid "Rows" +msgstr "Reihen" + +#: AppGUI/preferences/tools/ToolsPanelizePrefGroupUI.py:91 +#: AppTools/ToolPanelize.py:200 +msgid "Number of rows of the desired panel" +msgstr "Anzahl der Zeilen des gewünschten Panels" + +#: AppGUI/preferences/tools/ToolsPanelizePrefGroupUI.py:98 +#: AppTools/ToolPanelize.py:211 +msgid "Geo" +msgstr "Geo" + +#: AppGUI/preferences/tools/ToolsPanelizePrefGroupUI.py:99 +#: AppTools/ToolPanelize.py:212 +msgid "Panel Type" +msgstr "Panel-Typ" + +#: AppGUI/preferences/tools/ToolsPanelizePrefGroupUI.py:101 +msgid "" +"Choose the type of object for the panel object:\n" +"- Gerber\n" +"- Geometry" +msgstr "" +"Wählen Sie den Objekttyp für das Panel-Objekt:\n" +"- Gerber\n" +"- Geometrie" + +#: AppGUI/preferences/tools/ToolsPanelizePrefGroupUI.py:110 +msgid "Constrain within" +msgstr "Beschränkung innerhalb" + +#: AppGUI/preferences/tools/ToolsPanelizePrefGroupUI.py:112 +#: AppTools/ToolPanelize.py:224 +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 "" +"Bereich definieren durch DX und DY innerhalb des Panels.\n" +"DX- und DY-Werte sind in aktuellen Einheiten angegeben.\n" +"Unabhängig davon, wie viele Spalten und Zeilen gewünscht werden,\n" +"Das letzte Panel enthält so viele Spalten und Zeilen wie\n" +"Sie passen vollständig in den ausgewählten Bereich." + +#: AppGUI/preferences/tools/ToolsPanelizePrefGroupUI.py:125 +#: AppTools/ToolPanelize.py:236 +msgid "Width (DX)" +msgstr "Breite (DX)" + +#: AppGUI/preferences/tools/ToolsPanelizePrefGroupUI.py:127 +#: AppTools/ToolPanelize.py:238 +msgid "" +"The width (DX) within which the panel must fit.\n" +"In current units." +msgstr "" +"Die Breite (DX), in die das Panel passen muss.\n" +"In aktuellen Einheiten." + +#: AppGUI/preferences/tools/ToolsPanelizePrefGroupUI.py:138 +#: AppTools/ToolPanelize.py:247 +msgid "Height (DY)" +msgstr "Höhe (DY)" + +#: AppGUI/preferences/tools/ToolsPanelizePrefGroupUI.py:140 +#: AppTools/ToolPanelize.py:249 +msgid "" +"The height (DY)within which the panel must fit.\n" +"In current units." +msgstr "" +"Die Höhe (DY), in die die Platte passen muss.\n" +"In aktuellen Einheiten." + +#: AppGUI/preferences/tools/ToolsSolderpastePrefGroupUI.py:27 +msgid "SolderPaste Tool Options" +msgstr "Lötpaste-Werkzeug-Optionen" + +#: AppGUI/preferences/tools/ToolsSolderpastePrefGroupUI.py:33 +msgid "" +"A tool to create GCode for dispensing\n" +"solder paste onto a PCB." +msgstr "" +"Ein Werkzeug zum Erstellen von GCode für die Ausgabe\n" +"Lotpaste auf eine Leiterplatte." + +#: AppGUI/preferences/tools/ToolsSolderpastePrefGroupUI.py:54 +msgid "New Nozzle Dia" +msgstr "Neuer Düsendurchmesser" + +#: AppGUI/preferences/tools/ToolsSolderpastePrefGroupUI.py:56 +#: AppTools/ToolSolderPaste.py:107 +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" + +#: AppGUI/preferences/tools/ToolsSolderpastePrefGroupUI.py:72 +#: AppTools/ToolSolderPaste.py:183 +msgid "Z Dispense Start" +msgstr "Z Dosierbeginn" + +#: AppGUI/preferences/tools/ToolsSolderpastePrefGroupUI.py:74 +#: AppTools/ToolSolderPaste.py:185 +msgid "The height (Z) when solder paste dispensing starts." +msgstr "Die Höhe (Z) bei der Lotpastendosierung." + +#: AppGUI/preferences/tools/ToolsSolderpastePrefGroupUI.py:85 +#: AppTools/ToolSolderPaste.py:195 +msgid "Z Dispense" +msgstr "Z-Abgabe" + +#: AppGUI/preferences/tools/ToolsSolderpastePrefGroupUI.py:87 +#: AppTools/ToolSolderPaste.py:197 +msgid "The height (Z) when doing solder paste dispensing." +msgstr "Die Höhe (Z) bei der Lotpastendosierung." + +#: AppGUI/preferences/tools/ToolsSolderpastePrefGroupUI.py:98 +#: AppTools/ToolSolderPaste.py:207 +msgid "Z Dispense Stop" +msgstr "Z Abgabestopp" + +#: AppGUI/preferences/tools/ToolsSolderpastePrefGroupUI.py:100 +#: AppTools/ToolSolderPaste.py:209 +msgid "The height (Z) when solder paste dispensing stops." +msgstr "Die Höhe (Z) bei der Lotpastendosierung stoppt." + +#: AppGUI/preferences/tools/ToolsSolderpastePrefGroupUI.py:111 +#: AppTools/ToolSolderPaste.py:219 +msgid "Z Travel" +msgstr "Z Reise" + +#: AppGUI/preferences/tools/ToolsSolderpastePrefGroupUI.py:113 +#: AppTools/ToolSolderPaste.py:221 +msgid "" +"The height (Z) for travel between pads\n" +"(without dispensing solder paste)." +msgstr "" +"Die Höhe (Z) für den Weg zwischen Pads\n" +"(ohne Lotpaste zu dosieren)." + +#: AppGUI/preferences/tools/ToolsSolderpastePrefGroupUI.py:125 +#: AppTools/ToolSolderPaste.py:232 +msgid "Z Toolchange" +msgstr "Z Werkzeugwechsel" + +#: AppGUI/preferences/tools/ToolsSolderpastePrefGroupUI.py:127 +#: AppTools/ToolSolderPaste.py:234 +msgid "The height (Z) for tool (nozzle) change." +msgstr "Die Höhe (Z) für Werkzeug (Düse) ändert sich." + +#: AppGUI/preferences/tools/ToolsSolderpastePrefGroupUI.py:136 +#: AppTools/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 "" +"Die X, Y-Position für Werkzeug (Düse) ändert sich.\n" +"Das Format ist (x, y), wobei x und y reelle Zahlen sind." + +#: AppGUI/preferences/tools/ToolsSolderpastePrefGroupUI.py:150 +#: AppTools/ToolSolderPaste.py:255 +msgid "Feedrate (speed) while moving on the X-Y plane." +msgstr "Vorschub (Geschwindigkeit) während der Bewegung auf der X-Y-Ebene." + +#: AppGUI/preferences/tools/ToolsSolderpastePrefGroupUI.py:163 +#: AppTools/ToolSolderPaste.py:267 +msgid "" +"Feedrate (speed) while moving vertically\n" +"(on Z plane)." +msgstr "" +"Vorschub (Geschwindigkeit) bei vertikaler Bewegung\n" +"(auf der Z-Ebene)." + +#: AppGUI/preferences/tools/ToolsSolderpastePrefGroupUI.py:175 +#: AppTools/ToolSolderPaste.py:278 +msgid "Feedrate Z Dispense" +msgstr "Vorschub Z Dosierung" + +#: AppGUI/preferences/tools/ToolsSolderpastePrefGroupUI.py:177 +msgid "" +"Feedrate (speed) while moving up vertically\n" +"to Dispense position (on Z plane)." +msgstr "" +"Vorschub (Geschwindigkeit) bei vertikaler Aufwärtsbewegung\n" +"in Ausgabeposition (in der Z-Ebene)." + +#: AppGUI/preferences/tools/ToolsSolderpastePrefGroupUI.py:188 +#: AppTools/ToolSolderPaste.py:290 +msgid "Spindle Speed FWD" +msgstr "Spindeldrehzahl FWD" + +#: AppGUI/preferences/tools/ToolsSolderpastePrefGroupUI.py:190 +#: AppTools/ToolSolderPaste.py:292 +msgid "" +"The dispenser speed while pushing solder paste\n" +"through the dispenser nozzle." +msgstr "" +"Die Spendergeschwindigkeit beim Schieben der Lötpaste\n" +"durch die Spenderdüse." + +#: AppGUI/preferences/tools/ToolsSolderpastePrefGroupUI.py:202 +#: AppTools/ToolSolderPaste.py:303 +msgid "Dwell FWD" +msgstr "Verweilzeit FWD" + +#: AppGUI/preferences/tools/ToolsSolderpastePrefGroupUI.py:204 +#: AppTools/ToolSolderPaste.py:305 +msgid "Pause after solder dispensing." +msgstr "Pause nach dem Löten." + +#: AppGUI/preferences/tools/ToolsSolderpastePrefGroupUI.py:214 +#: AppTools/ToolSolderPaste.py:314 +msgid "Spindle Speed REV" +msgstr "Spindeldrehzahl REV" + +#: AppGUI/preferences/tools/ToolsSolderpastePrefGroupUI.py:216 +#: AppTools/ToolSolderPaste.py:316 +msgid "" +"The dispenser speed while retracting solder paste\n" +"through the dispenser nozzle." +msgstr "" +"Die Spendergeschwindigkeit beim Einfahren der Lötpaste\n" +"durch die Spenderdüse." + +#: AppGUI/preferences/tools/ToolsSolderpastePrefGroupUI.py:228 +#: AppTools/ToolSolderPaste.py:327 +msgid "Dwell REV" +msgstr "Verweilen REV" + +#: AppGUI/preferences/tools/ToolsSolderpastePrefGroupUI.py:230 +#: AppTools/ToolSolderPaste.py:329 +msgid "" +"Pause after solder paste dispenser retracted,\n" +"to allow pressure equilibrium." +msgstr "" +"Pause nachdem Lotpastendispenser eingefahren wurde,\n" +"das Druckgleichgewicht zu ermöglichen." + +#: AppGUI/preferences/tools/ToolsSolderpastePrefGroupUI.py:239 +#: AppTools/ToolSolderPaste.py:337 +msgid "Files that control the GCode generation." +msgstr "Dateien, die die GCode-Generierung steuern." + +#: AppGUI/preferences/tools/ToolsSubPrefGroupUI.py:27 +msgid "Substractor Tool Options" +msgstr "Substractor-Werkzeug-Optionen" + +#: AppGUI/preferences/tools/ToolsSubPrefGroupUI.py:33 +msgid "" +"A tool to substract one Gerber or Geometry object\n" +"from another of the same type." +msgstr "" +"Ein Werkzeug zum Subtrahieren eines Gerber- oder Geometrieobjekts\n" +"von einem anderen des gleichen Typs." + +#: AppGUI/preferences/tools/ToolsSubPrefGroupUI.py:38 AppTools/ToolSub.py:155 +msgid "Close paths" +msgstr "Wege schließen" + +#: AppGUI/preferences/tools/ToolsSubPrefGroupUI.py:39 +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." + +#: AppGUI/preferences/tools/ToolsTransformPrefGroupUI.py:27 +msgid "Transform Tool Options" +msgstr "Umwandlungswerkzeug-Optionen" + +#: AppGUI/preferences/tools/ToolsTransformPrefGroupUI.py:33 +msgid "" +"Various transformations that can be applied\n" +"on a FlatCAM object." +msgstr "" +"Verschiedene Transformationen, die angewendet werden können\n" +"auf einem FlatCAM-Objekt." + +#: AppGUI/preferences/tools/ToolsTransformPrefGroupUI.py:64 +msgid "Skew" +msgstr "Neigung" + +#: AppGUI/preferences/tools/ToolsTransformPrefGroupUI.py:105 +#: AppTools/ToolTransform.py:150 +msgid "Factor for scaling on X axis." +msgstr "Faktor für die Skalierung auf der X-Achse." + +#: AppGUI/preferences/tools/ToolsTransformPrefGroupUI.py:118 +#: AppTools/ToolTransform.py:170 +msgid "Factor for scaling on Y axis." +msgstr "Faktor für die Skalierung auf der Y-Achse." + +#: AppGUI/preferences/tools/ToolsTransformPrefGroupUI.py:126 +#: AppTools/ToolTransform.py:191 +msgid "" +"Scale the selected object(s)\n" +"using the Scale_X factor for both axis." +msgstr "" +"Skalieren Sie die ausgewählten Objekte\n" +"Verwenden des Skalierungsfaktors X für beide Achsen." + +#: AppGUI/preferences/tools/ToolsTransformPrefGroupUI.py:134 +#: AppTools/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 "" +"Skalieren Sie die ausgewählten Objekte\n" +"unter Verwendung der Ursprungsreferenz, wenn geprüft\n" +"und die Mitte der größten Begrenzungsbox\n" +"der ausgewählten Objekte, wenn sie nicht markiert sind." + +#: AppGUI/preferences/tools/ToolsTransformPrefGroupUI.py:150 +#: AppTools/ToolTransform.py:217 +msgid "X val" +msgstr "X-Wert" + +#: AppGUI/preferences/tools/ToolsTransformPrefGroupUI.py:152 +#: AppTools/ToolTransform.py:219 +msgid "Distance to offset on X axis. In current units." +msgstr "Abstand zum Offset auf der X-Achse. In aktuellen Einheiten." + +#: AppGUI/preferences/tools/ToolsTransformPrefGroupUI.py:163 +#: AppTools/ToolTransform.py:237 +msgid "Y val" +msgstr "Y-Wert" + +#: AppGUI/preferences/tools/ToolsTransformPrefGroupUI.py:165 +#: AppTools/ToolTransform.py:239 +msgid "Distance to offset on Y axis. In current units." +msgstr "Abstand zum Offset auf der Y-Achse. In aktuellen Einheiten." + +#: AppGUI/preferences/tools/ToolsTransformPrefGroupUI.py:171 +#: AppTools/ToolDblSided.py:67 AppTools/ToolDblSided.py:95 +#: AppTools/ToolDblSided.py:125 +msgid "Mirror" +msgstr "Spiegeln" + +#: AppGUI/preferences/tools/ToolsTransformPrefGroupUI.py:175 +#: AppTools/ToolTransform.py:283 +msgid "Mirror Reference" +msgstr "Spiegelreferenz" + +#: AppGUI/preferences/tools/ToolsTransformPrefGroupUI.py:177 +#: AppTools/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 "" +"Die ausgewählten Objekte kippen\n" +"um den Punkt im Eingabefeld.\n" +"\n" +"Die Punktkoordinaten können mit erfasst werden\n" +"Klicken Sie mit der linken Maustaste auf die Leinwand\n" +"Shift Taste.\n" +"Klicken Sie dann auf die Schaltfläche Hinzufügen, um die Koordinaten " +"einzufügen.\n" +"Oder geben Sie die Koordinaten im Format (x, y) in ein\n" +"Punkt-Eingabefeld und klicken Sie auf X (Y) drehen" + +#: AppGUI/preferences/tools/ToolsTransformPrefGroupUI.py:188 +msgid "Mirror Reference point" +msgstr "Referenzpunkt spiegeln" + +#: AppGUI/preferences/tools/ToolsTransformPrefGroupUI.py:190 +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 "" +"Koordinaten im Format (x, y), die als Referenz für die Spiegelung verwendet " +"werden.\n" +"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" + +#: AppGUI/preferences/tools/ToolsTransformPrefGroupUI.py:203 +#: AppTools/ToolDistance.py:505 AppTools/ToolDistanceMin.py:286 +#: AppTools/ToolTransform.py:332 +msgid "Distance" +msgstr "Entfernung" + +#: AppGUI/preferences/tools/ToolsTransformPrefGroupUI.py:205 +#: AppTools/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 "" +"Ein positiver Wert führt zu einem Dilatationseffekt.\n" +"während ein negativer Wert den Effekt der Abnutzung verursacht.\n" +"Jedes Geometrieelement des Objekts wird vergrößert\n" +"oder mit der \"Entfernung\" verringert." + +#: AppGUI/preferences/tools/ToolsTransformPrefGroupUI.py:222 +#: AppTools/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 "" +"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." + +#: AppGUI/preferences/tools/ToolsTransformPrefGroupUI.py:241 +#: AppTools/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 "" +"Wenn diese Option aktiviert ist, umgibt der Puffer die gepufferte Form.\n" +"Jede Ecke wird abgerundet.\n" +"Wenn nicht markiert, folgt der Puffer der exakten Geometrie\n" +"der gepufferten Form." + +#: AppGUI/preferences/utilities/AutoCompletePrefGroupUI.py:27 +msgid "Autocompleter Keywords" +msgstr "Autocompleter-Schlüsselwörter" + +#: AppGUI/preferences/utilities/AutoCompletePrefGroupUI.py:30 +#: AppGUI/preferences/utilities/FAExcPrefGroupUI.py:40 +#: AppGUI/preferences/utilities/FAGcoPrefGroupUI.py:30 +#: AppGUI/preferences/utilities/FAGrbPrefGroupUI.py:30 +msgid "Restore" +msgstr "Wiederherstellen" + +#: AppGUI/preferences/utilities/AutoCompletePrefGroupUI.py:31 +msgid "Restore the autocompleter keywords list to the default state." +msgstr "" +"Stellen Sie den Standardzustand der Autocompleter-Schlüsselwortliste wieder " +"her." + +#: AppGUI/preferences/utilities/AutoCompletePrefGroupUI.py:33 +msgid "Delete all autocompleter keywords from the list." +msgstr "Löschen Sie alle Autocompleter-Schlüsselwörter aus der Liste." + +#: AppGUI/preferences/utilities/AutoCompletePrefGroupUI.py:41 +msgid "Keywords list" +msgstr "Liste der Stichwörter" + +#: AppGUI/preferences/utilities/AutoCompletePrefGroupUI.py:43 +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 "" +"Liste der von verwendeten Schlüsselwörter\n" +"der Autocompleter in FlatCAM.\n" +"Der Autocompleter ist installiert\n" +"im Code-Editor und für die Tcl-Shell." + +#: AppGUI/preferences/utilities/AutoCompletePrefGroupUI.py:64 +#: AppGUI/preferences/utilities/FAExcPrefGroupUI.py:73 +#: AppGUI/preferences/utilities/FAGcoPrefGroupUI.py:63 +#: AppGUI/preferences/utilities/FAGrbPrefGroupUI.py:62 +msgid "Extension" +msgstr "Erweiterung" + +#: AppGUI/preferences/utilities/AutoCompletePrefGroupUI.py:65 +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." + +#: AppGUI/preferences/utilities/AutoCompletePrefGroupUI.py:73 +msgid "Add keyword" +msgstr "Keyword hinzufügen" + +#: AppGUI/preferences/utilities/AutoCompletePrefGroupUI.py:74 +msgid "Add a keyword to the list" +msgstr "Fügen Sie der Liste ein Schlüsselwort hinzu" + +#: AppGUI/preferences/utilities/AutoCompletePrefGroupUI.py:75 +msgid "Delete keyword" +msgstr "Stichwort löschen" + +#: AppGUI/preferences/utilities/AutoCompletePrefGroupUI.py:76 +msgid "Delete a keyword from the list" +msgstr "Löschen Sie ein Schlüsselwort aus der Liste" + +#: AppGUI/preferences/utilities/FAExcPrefGroupUI.py:27 +msgid "Excellon File associations" +msgstr "Excellon-Dateizuordnungen" + +#: AppGUI/preferences/utilities/FAExcPrefGroupUI.py:41 +#: AppGUI/preferences/utilities/FAGcoPrefGroupUI.py:31 +#: AppGUI/preferences/utilities/FAGrbPrefGroupUI.py:31 +msgid "Restore the extension list to the default state." +msgstr "Stellen Sie den Standardzustand der Erweiterungsliste wieder her." + +#: AppGUI/preferences/utilities/FAExcPrefGroupUI.py:43 +#: AppGUI/preferences/utilities/FAGcoPrefGroupUI.py:33 +#: AppGUI/preferences/utilities/FAGrbPrefGroupUI.py:33 +msgid "Delete all extensions from the list." +msgstr "Löschen Sie alle Erweiterungen aus der Liste." + +#: AppGUI/preferences/utilities/FAExcPrefGroupUI.py:51 +#: AppGUI/preferences/utilities/FAGcoPrefGroupUI.py:41 +#: AppGUI/preferences/utilities/FAGrbPrefGroupUI.py:41 +msgid "Extensions list" +msgstr "Erweiterungsliste" + +#: AppGUI/preferences/utilities/FAExcPrefGroupUI.py:53 +#: AppGUI/preferences/utilities/FAGcoPrefGroupUI.py:43 +#: AppGUI/preferences/utilities/FAGrbPrefGroupUI.py:43 +msgid "" +"List of file extensions to be\n" +"associated with FlatCAM." +msgstr "" +"Liste der zu verwendenden Dateierweiterungen\n" +"im Zusammenhang mit FlatCAM." + +#: AppGUI/preferences/utilities/FAExcPrefGroupUI.py:74 +#: AppGUI/preferences/utilities/FAGcoPrefGroupUI.py:64 +#: AppGUI/preferences/utilities/FAGrbPrefGroupUI.py:63 +msgid "A file extension to be added or deleted to the list." +msgstr "A file extension to be added or deleted to the list." + +#: AppGUI/preferences/utilities/FAExcPrefGroupUI.py:82 +#: AppGUI/preferences/utilities/FAGcoPrefGroupUI.py:72 +#: AppGUI/preferences/utilities/FAGrbPrefGroupUI.py:71 +msgid "Add Extension" +msgstr "Erweiterung hinzufügen" + +#: AppGUI/preferences/utilities/FAExcPrefGroupUI.py:83 +#: AppGUI/preferences/utilities/FAGcoPrefGroupUI.py:73 +#: AppGUI/preferences/utilities/FAGrbPrefGroupUI.py:72 +msgid "Add a file extension to the list" +msgstr "Fügen Sie der Liste eine Dateierweiterung hinzu" + +#: AppGUI/preferences/utilities/FAExcPrefGroupUI.py:84 +#: AppGUI/preferences/utilities/FAGcoPrefGroupUI.py:74 +#: AppGUI/preferences/utilities/FAGrbPrefGroupUI.py:73 +msgid "Delete Extension" +msgstr "Erweiterung löschen" + +#: AppGUI/preferences/utilities/FAExcPrefGroupUI.py:85 +#: AppGUI/preferences/utilities/FAGcoPrefGroupUI.py:75 +#: AppGUI/preferences/utilities/FAGrbPrefGroupUI.py:74 +msgid "Delete a file extension from the list" +msgstr "Löschen Sie eine Dateierweiterung aus der Liste" + +#: AppGUI/preferences/utilities/FAExcPrefGroupUI.py:92 +#: AppGUI/preferences/utilities/FAGcoPrefGroupUI.py:82 +#: AppGUI/preferences/utilities/FAGrbPrefGroupUI.py:81 +msgid "Apply Association" +msgstr "Assoziation anwenden" + +#: AppGUI/preferences/utilities/FAExcPrefGroupUI.py:93 +#: AppGUI/preferences/utilities/FAGcoPrefGroupUI.py:83 +#: AppGUI/preferences/utilities/FAGrbPrefGroupUI.py:82 +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 "" +"Wenden Sie die Dateizuordnungen zwischen an\n" +"FlatCAM und die Dateien mit den oben genannten Erweiterungen.\n" +"Sie sind nach der nächsten Anmeldung aktiv.\n" +"Dies funktioniert nur unter Windows." + +#: AppGUI/preferences/utilities/FAGcoPrefGroupUI.py:27 +msgid "GCode File associations" +msgstr "GCode-Dateizuordnungen" + +#: AppGUI/preferences/utilities/FAGrbPrefGroupUI.py:27 +msgid "Gerber File associations" +msgstr "Gerber Dateizuordnungen" + +#: AppObjects/AppObject.py:133 +#, python-brace-format +msgid "" +"Object ({kind}) failed because: {error} \n" +"\n" +msgstr "" +"Objekt ({kind}) gescheitert weil: {error} \n" +"\n" + +#: AppObjects/AppObject.py:148 +msgid "Converting units to " +msgstr "Einheiten umrechnen in " + +#: AppObjects/AppObject.py:253 +msgid "CREATE A NEW FLATCAM TCL SCRIPT" +msgstr "NEUES FLATCAL TCL SCRIPT ERZEUGEN" + +#: AppObjects/AppObject.py:254 +msgid "TCL Tutorial is here" +msgstr "Das TCL Tutorial ist hier" + +#: AppObjects/AppObject.py:256 +msgid "FlatCAM commands list" +msgstr "FlatCAM Befehlsliste" + +#: AppObjects/AppObject.py:257 +msgid "" +"Type >help< followed by Run Code for a list of FlatCAM Tcl Commands " +"(displayed in Tcl Shell)." +msgstr "" +"Geben Sie >help< gefolgt von Run Code ein, um eine Liste der FlatCAM Tcl-" +"Befehle anzuzeigen (angezeigt in der Tcl-Shell)." + +#: AppObjects/AppObject.py:303 AppObjects/AppObject.py:309 +#: AppObjects/AppObject.py:315 AppObjects/AppObject.py:321 +#: AppObjects/AppObject.py:327 AppObjects/AppObject.py:333 +msgid "created/selected" +msgstr "erstellt / ausgewählt" + +#: AppObjects/AppObject.py:348 AppObjects/FlatCAMObj.py:246 +#: AppObjects/FlatCAMObj.py:277 AppObjects/FlatCAMObj.py:293 +#: AppObjects/FlatCAMObj.py:373 AppTools/ToolCopperThieving.py:1487 +#: AppTools/ToolCorners.py:394 AppTools/ToolFiducials.py:810 +#: AppTools/ToolMove.py:229 AppTools/ToolQRCode.py:728 App_Main.py:4619 +msgid "Plotting" +msgstr "Plotten" + +#: AppObjects/FlatCAMCNCJob.py:429 AppObjects/FlatCAMDocument.py:71 +#: AppObjects/FlatCAMScript.py:82 +msgid "Basic" +msgstr "Basic" + +#: AppObjects/FlatCAMCNCJob.py:435 AppObjects/FlatCAMDocument.py:75 +#: AppObjects/FlatCAMScript.py:86 +msgid "Advanced" +msgstr "Erweitert" + +#: AppObjects/FlatCAMCNCJob.py:478 +msgid "Plotting..." +msgstr "Zeichnung..." + +#: AppObjects/FlatCAMCNCJob.py:507 AppObjects/FlatCAMCNCJob.py:512 +#: AppTools/ToolSolderPaste.py:1499 +msgid "Export Machine Code ..." +msgstr "Maschinencode exportieren ..." + +#: AppObjects/FlatCAMCNCJob.py:517 AppTools/ToolSolderPaste.py:1503 +msgid "Export Machine Code cancelled ..." +msgstr "Maschinencode exportieren abgebrochen ..." + +#: AppObjects/FlatCAMCNCJob.py:538 +msgid "Machine Code file saved to" +msgstr "Maschinencode-Datei gespeichert in" + +#: AppObjects/FlatCAMCNCJob.py:548 AppObjects/FlatCAMScript.py:134 +#: App_Main.py:7455 +msgid "Loading..." +msgstr "Wird geladen..." + +#: AppObjects/FlatCAMCNCJob.py:562 App_Main.py:7552 +msgid "Code Editor" +msgstr "Code-Editor" + +#: AppObjects/FlatCAMCNCJob.py:599 AppTools/ToolCalibration.py:1097 +msgid "Loaded Machine Code into Code Editor" +msgstr "Maschinencode in den Code-Editor geladen" + +#: AppObjects/FlatCAMCNCJob.py:740 +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" + +#: AppObjects/FlatCAMCNCJob.py:742 +msgid "CNCJob object" +msgstr "CNCJob-Objekt" + +#: AppObjects/FlatCAMCNCJob.py:922 +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 hat keinen G94-Code und wir werden den Code nicht in das Textfeld " +"\"Vor dem GCode\" aufnehmen" + +#: AppObjects/FlatCAMCNCJob.py:933 +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." + +#: AppObjects/FlatCAMCNCJob.py:938 +msgid "Toolchange G-code was replaced by a custom code." +msgstr "" +"Der Werkzeugwechsel-G-Code wurde durch einen benutzerdefinierten Code " +"ersetzt." + +#: AppObjects/FlatCAMCNCJob.py:986 AppObjects/FlatCAMCNCJob.py:996 +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'" + +#: AppObjects/FlatCAMCNCJob.py:999 +msgid "There is no preprocessor file." +msgstr "Es gibt keine Postprozessor-Datei." + +#: AppObjects/FlatCAMDocument.py:175 +msgid "Document Editor" +msgstr "Dokumenteditor" + +#: AppObjects/FlatCAMExcellon.py:527 AppObjects/FlatCAMExcellon.py:825 +#: AppObjects/FlatCAMGeometry.py:322 AppObjects/FlatCAMGeometry.py:852 +#: AppTools/ToolNCC.py:811 AppTools/ToolNCC.py:1196 AppTools/ToolPaint.py:778 +#: AppTools/ToolPaint.py:1170 +msgid "Multiple Tools" +msgstr "Mehrere Werkzeuge" + +#: AppObjects/FlatCAMExcellon.py:805 +msgid "No Tool Selected" +msgstr "Kein Werkzeug ausgewählt" + +#: AppObjects/FlatCAMExcellon.py:1155 AppObjects/FlatCAMExcellon.py:1248 +#: AppObjects/FlatCAMExcellon.py:1435 +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." + +#: AppObjects/FlatCAMExcellon.py:1162 +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." + +#: AppObjects/FlatCAMExcellon.py:1177 AppObjects/FlatCAMExcellon.py:1268 +#: AppObjects/FlatCAMExcellon.py:1453 tclCommands/TclCommandDrillcncjob.py:195 +msgid "Tool_nr" +msgstr "Werkzeugnummer" + +#: AppObjects/FlatCAMExcellon.py:1177 AppObjects/FlatCAMExcellon.py:1268 +#: AppObjects/FlatCAMExcellon.py:1453 tclCommands/TclCommandDrillcncjob.py:195 +msgid "Drills_Nr" +msgstr "Bohrnummer" + +#: AppObjects/FlatCAMExcellon.py:1177 AppObjects/FlatCAMExcellon.py:1268 +#: AppObjects/FlatCAMExcellon.py:1453 tclCommands/TclCommandDrillcncjob.py:195 +msgid "Slots_Nr" +msgstr "Schlitznummer" + +#: AppObjects/FlatCAMExcellon.py:1257 +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." + +#: AppObjects/FlatCAMExcellon.py:1361 AppObjects/FlatCAMGeometry.py:1625 +msgid "Focus Z" +msgstr "Fokus Z" + +#: AppObjects/FlatCAMExcellon.py:1380 AppObjects/FlatCAMGeometry.py:1644 +msgid "Laser Power" +msgstr "Laserleistung" + +#: AppObjects/FlatCAMExcellon.py:1510 AppObjects/FlatCAMGeometry.py:2077 +#: AppObjects/FlatCAMGeometry.py:2081 AppObjects/FlatCAMGeometry.py:2232 +msgid "Generating CNC Code" +msgstr "CNC-Code generieren" + +#: AppObjects/FlatCAMExcellon.py:1563 AppObjects/FlatCAMGeometry.py:2542 +#, fuzzy +#| msgid "Delete failed. Select a tool to delete." +msgid "Delete failed. There are no exclusion areas to delete." +msgstr "Löschen fehlgeschlagen. Wählen Sie ein Werkzeug zum Löschen aus." + +#: AppObjects/FlatCAMExcellon.py:1580 AppObjects/FlatCAMGeometry.py:2559 +#, fuzzy +#| msgid "Failed. Nothing selected." +msgid "Delete failed. Nothing is selected." +msgstr "Gescheitert. Nichts ausgewählt." + +#: AppObjects/FlatCAMExcellon.py:1804 AppTools/ToolNCC.py:918 +#: AppTools/ToolPaint.py:843 +msgid "Current Tool parameters were applied to all tools." +msgstr "Aktuelle Werkzeugparameter wurden auf alle Werkzeuge angewendet." + +#: AppObjects/FlatCAMGeometry.py:123 AppObjects/FlatCAMGeometry.py:1289 +#: AppObjects/FlatCAMGeometry.py:1290 AppObjects/FlatCAMGeometry.py:1299 +msgid "Iso" +msgstr "Iso" + +#: AppObjects/FlatCAMGeometry.py:123 AppObjects/FlatCAMGeometry.py:515 +#: AppObjects/FlatCAMGeometry.py:911 AppObjects/FlatCAMGerber.py:891 +#: AppObjects/FlatCAMGerber.py:1039 AppTools/ToolCutOut.py:690 +#: AppTools/ToolCutOut.py:886 AppTools/ToolCutOut.py:1046 +msgid "Rough" +msgstr "Rau" + +#: AppObjects/FlatCAMGeometry.py:123 +msgid "Finish" +msgstr "Oberfläche" + +#: AppObjects/FlatCAMGeometry.py:550 +msgid "Add from Tool DB" +msgstr "Werkzeug aus Werkzeugdatenbank hinzufügen" + +#: AppObjects/FlatCAMGeometry.py:930 +msgid "Tool added in Tool Table." +msgstr "Werkzeug in der Werkzeugtabelle hinzugefügt." + +#: AppObjects/FlatCAMGeometry.py:1039 AppObjects/FlatCAMGeometry.py:1048 +msgid "Failed. Select a tool to copy." +msgstr "Fehlgeschlagen. Wählen Sie ein Werkzeug zum Kopieren aus." + +#: AppObjects/FlatCAMGeometry.py:1077 +msgid "Tool was copied in Tool Table." +msgstr "Das Werkzeug wurde in die Werkzeugtabelle kopiert." + +#: AppObjects/FlatCAMGeometry.py:1104 +msgid "Tool was edited in Tool Table." +msgstr "Das Werkzeug wurde in der Werkzeugtabelle bearbeitet." + +#: AppObjects/FlatCAMGeometry.py:1133 AppObjects/FlatCAMGeometry.py:1142 +msgid "Failed. Select a tool to delete." +msgstr "Gescheitert. Wählen Sie ein Werkzeug zum Löschen aus." + +#: AppObjects/FlatCAMGeometry.py:1166 +msgid "Tool was deleted in Tool Table." +msgstr "Werkzeug wurde in der Werkzeugtabelle gelöscht." + +#: AppObjects/FlatCAMGeometry.py:1203 AppObjects/FlatCAMGeometry.py:1212 +msgid "" +"Disabled because the tool is V-shape.\n" +"For V-shape tools the depth of cut is\n" +"calculated from other parameters like:\n" +"- 'V-tip Angle' -> angle at the tip of the tool\n" +"- 'V-tip Dia' -> diameter at the tip of the tool \n" +"- Tool Dia -> 'Dia' column found in the Tool Table\n" +"NB: a value of zero means that Tool Dia = 'V-tip Dia'" +msgstr "" +"Deaktiviert, da das Werkzeug V-förmig ist.\n" +"Bei V-förmigen Werkzeugen beträgt die Schnitttiefe\n" +"berechnet aus anderen Parametern wie:\n" +"- 'V-Spitzenwinkel' -> Winkel an der Spitze des Werkzeugs\n" +"- 'V-Spitze Durchmesser' -> Durchmesser an der Spitze des Werkzeugs\n" +"- Werkzeugdurchmesser -> Spalte 'Durchmesser' in der Werkzeugtabelle\n" +"NB: Ein Wert von Null bedeutet, dass Werkzeugdurchmesser = 'V-Spitze " +"Durchmesser'" + +#: AppObjects/FlatCAMGeometry.py:1697 +msgid "This Geometry can't be processed because it is" +msgstr "Diese Geometrie kann nicht verarbeitet werden, da dies der Fall ist" + +#: AppObjects/FlatCAMGeometry.py:1697 +msgid "geometry" +msgstr "geometrie" + +#: AppObjects/FlatCAMGeometry.py:1738 +msgid "Failed. No tool selected in the tool table ..." +msgstr "Gescheitert. Kein Werkzeug in der Werkzeugtabelle ausgewählt ..." + +#: AppObjects/FlatCAMGeometry.py:1836 AppObjects/FlatCAMGeometry.py:1986 +msgid "" +"Tool Offset is selected in Tool Table but no value is provided.\n" +"Add a Tool Offset or change the Offset Type." +msgstr "" +"Werkzeugversatz ist in der Werkzeugtabelle ausgewählt, es wird jedoch kein " +"Wert angegeben.\n" +"Fügen Sie einen Werkzeugversatz hinzu oder ändern Sie den Versatztyp." + +#: AppObjects/FlatCAMGeometry.py:1902 AppObjects/FlatCAMGeometry.py:2048 +msgid "G-Code parsing in progress..." +msgstr "G-Code-Analyse läuft ..." + +#: AppObjects/FlatCAMGeometry.py:1904 AppObjects/FlatCAMGeometry.py:2050 +msgid "G-Code parsing finished..." +msgstr "G-Code-Analyse beendet ..." + +#: AppObjects/FlatCAMGeometry.py:1912 +msgid "Finished G-Code processing" +msgstr "G-Code-Verarbeitung abgeschlossen" + +#: AppObjects/FlatCAMGeometry.py:1914 AppObjects/FlatCAMGeometry.py:2062 +msgid "G-Code processing failed with error" +msgstr "G-Code-Verarbeitung fehlgeschlagen mit Fehler" + +#: AppObjects/FlatCAMGeometry.py:1956 AppTools/ToolSolderPaste.py:1301 +msgid "Cancelled. Empty file, it has no geometry" +msgstr "Abgebrochen. Leere Datei hat keine Geometrie" + +#: AppObjects/FlatCAMGeometry.py:2060 AppObjects/FlatCAMGeometry.py:2227 +msgid "Finished G-Code processing..." +msgstr "Fertige G-Code Verarbeitung ..." + +#: AppObjects/FlatCAMGeometry.py:2079 AppObjects/FlatCAMGeometry.py:2083 +#: AppObjects/FlatCAMGeometry.py:2234 +msgid "CNCjob created" +msgstr "CNCjob erstellt" + +#: AppObjects/FlatCAMGeometry.py:2265 AppObjects/FlatCAMGeometry.py:2274 +#: AppParsers/ParseGerber.py:1866 AppParsers/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." + +#: AppObjects/FlatCAMGeometry.py:2337 +msgid "Geometry Scale done." +msgstr "Geometrie Skalierung fertig." + +#: AppObjects/FlatCAMGeometry.py:2354 AppParsers/ParseGerber.py:1992 +msgid "" +"An (x,y) pair of values are needed. Probable you entered only one value in " +"the Offset field." +msgstr "" +"Ein (x, y) Wertepaar wird benötigt. Wahrscheinlich haben Sie im Feld Offset " +"nur einen Wert eingegeben." + +#: AppObjects/FlatCAMGeometry.py:2410 +msgid "Geometry Offset done." +msgstr "Geometrie Offset fertig." + +#: AppObjects/FlatCAMGeometry.py:2439 +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 "" +"Das Werkzeugwechsel X, Y Feld in Bearbeiten -> Einstellungen muss im Format " +"(x, y) sein\n" +"Aber jetzt gibt es nur einen Wert, nicht zwei." + +#: AppObjects/FlatCAMGerber.py:494 +msgid "Buffering solid geometry" +msgstr "Festkörpergeometrie puffern" + +#: AppObjects/FlatCAMGerber.py:503 +msgid "Done" +msgstr "Fertig" + +#: AppObjects/FlatCAMGerber.py:529 AppObjects/FlatCAMGerber.py:555 +msgid "Operation could not be done." +msgstr "Operation konnte nicht durchgeführt werden." + +#: AppObjects/FlatCAMGerber.py:572 +msgid "Isolating..." +msgstr "Isolieren ..." + +#: AppObjects/FlatCAMGerber.py:631 +msgid "Click on a polygon to isolate it." +msgstr "Klicken Sie auf ein Plozgon um es zu isolieren." + +#: AppObjects/FlatCAMGerber.py:670 AppObjects/FlatCAMGerber.py:774 +#: AppTools/ToolPaint.py:1515 +msgid "Added polygon" +msgstr "Polygon hinzugefügt" + +#: AppObjects/FlatCAMGerber.py:671 AppObjects/FlatCAMGerber.py:776 +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." + +#: AppObjects/FlatCAMGerber.py:683 AppTools/ToolPaint.py:1529 +msgid "Removed polygon" +msgstr "Polygon entfernt" + +# nearly the same as before? What good is this? +#: AppObjects/FlatCAMGerber.py:684 +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." + +#: AppObjects/FlatCAMGerber.py:689 AppTools/ToolPaint.py:1535 +msgid "No polygon detected under click position." +msgstr "Kein Polygon an der Stelle an die geklickt wurde." + +#: AppObjects/FlatCAMGerber.py:710 AppTools/ToolPaint.py:1564 +msgid "List of single polygons is empty. Aborting." +msgstr "Liste der Einzelpolygone ist leer. Vorgang wird abgebrochen." + +#: AppObjects/FlatCAMGerber.py:779 +msgid "No polygon in selection." +msgstr "Kein Polygon in der Auswahl." + +#: AppObjects/FlatCAMGerber.py:907 AppObjects/FlatCAMGerber.py:986 +#: AppTools/ToolNCC.py:2097 AppTools/ToolNCC.py:3183 AppTools/ToolNCC.py:3562 +msgid "Isolation geometry could not be generated." +msgstr "Isolationsgeometrie konnte nicht generiert werden." + +#: AppObjects/FlatCAMGerber.py:932 AppObjects/FlatCAMGerber.py:1064 +msgid "Isolation geometry created" +msgstr "Isolationsgeometrie erstellt" + +#: AppObjects/FlatCAMGerber.py:941 AppObjects/FlatCAMGerber.py:1071 +msgid "Subtracting Geo" +msgstr "Geo subtrahieren" + +#: AppObjects/FlatCAMGerber.py:1396 +msgid "Plotting Apertures" +msgstr "Plotten Apertures" + +#: AppObjects/FlatCAMObj.py:232 +msgid "Name changed from" +msgstr "Name geändert von" + +#: AppObjects/FlatCAMObj.py:232 +msgid "to" +msgstr "zu" + +#: AppObjects/FlatCAMObj.py:243 +msgid "Offsetting..." +msgstr "Offset hinzufügen ..." + +#: AppObjects/FlatCAMObj.py:257 AppObjects/FlatCAMObj.py:262 +msgid "Scaling could not be executed." +msgstr "Skalierungsaktion wurde nicht ausgeführt." + +#: AppObjects/FlatCAMObj.py:266 AppObjects/FlatCAMObj.py:274 +msgid "Scale done." +msgstr "Skalieren Sie fertig." + +#: AppObjects/FlatCAMObj.py:272 +msgid "Scaling..." +msgstr "Skalierung ..." + +#: AppObjects/FlatCAMObj.py:290 +msgid "Skewing..." +msgstr "Verziehen..." + +#: AppObjects/FlatCAMScript.py:163 +msgid "Script Editor" +msgstr "Script Editor" + +#: AppObjects/ObjectCollection.py:513 +#, python-brace-format +msgid "Object renamed from {old} to {new}" +msgstr "Objekt umbenannt von {old} zu {new}" + +#: AppObjects/ObjectCollection.py:925 AppObjects/ObjectCollection.py:931 +#: AppObjects/ObjectCollection.py:937 AppObjects/ObjectCollection.py:943 +#: AppObjects/ObjectCollection.py:949 AppObjects/ObjectCollection.py:955 +#: App_Main.py:6408 App_Main.py:6414 App_Main.py:6420 App_Main.py:6426 +msgid "selected" +msgstr "ausgewählt" + +#: AppObjects/ObjectCollection.py:986 +msgid "Cause of error" +msgstr "Fehlerursache" + +#: AppObjects/ObjectCollection.py:1187 +msgid "All objects are selected." +msgstr "Alle Objekte werden ausgewählt." + +#: AppObjects/ObjectCollection.py:1197 +msgid "Objects selection is cleared." +msgstr "Die Objektauswahl wird gelöscht." + +#: AppParsers/ParseExcellon.py:315 +msgid "This is GCODE mark" +msgstr "Dies ist die GCODE-Marke" + +#: AppParsers/ParseExcellon.py:432 +msgid "" +"No tool diameter info's. See shell.\n" +"A tool change event: T" +msgstr "" +"Keine Angaben zum Werkzeugdurchmesser. Siehe Shell.\n" +"Ein Werkzeugwechselereignis: T" + +#: AppParsers/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' " +"diameters.\n" +"The user needs to edit the resulting Excellon object and change the " +"diameters to reflect the real diameters." +msgstr "" +"wurde gefunden, aber die Excellon-Datei enthält keine Informationen zu den " +"Werkzeugdurchmessern. Daher wird die Anwendung versuchen, diese mit Hilfe " +"einiger gefälschter Durchmesser zu laden.\n" +"Der Benutzer muss das resultierende Excellon-Objekt bearbeiten und die " +"Durchmesser so ändern, dass sie den tatsächlichen Durchmessern entsprechen." + +#: AppParsers/ParseExcellon.py:899 +msgid "" +"Excellon Parser error.\n" +"Parsing Failed. Line" +msgstr "" +"Excellon-Parser-Fehler.\n" +"Analyse fehlgeschlagen. Linie" + +#: AppParsers/ParseExcellon.py:981 +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 () -> Eine Bohrposition wurde übersprungen, da kein " +"Werkzeug zugeordnet ist.\n" +"Überprüfen Sie den resultierenden GCode." + +#: AppParsers/ParseFont.py:303 +msgid "Font not supported, try another one." +msgstr "Schriftart wird nicht unterstützt, versuchen Sie es mit einer anderen." + +#: AppParsers/ParseGerber.py:425 +msgid "Gerber processing. Parsing" +msgstr "Gerber-Verarbeitung. Parsing" + +#: AppParsers/ParseGerber.py:425 AppParsers/ParseHPGL2.py:181 +msgid "lines" +msgstr "Linien" + +#: AppParsers/ParseGerber.py:1001 AppParsers/ParseGerber.py:1101 +#: AppParsers/ParseHPGL2.py:274 AppParsers/ParseHPGL2.py:288 +#: AppParsers/ParseHPGL2.py:307 AppParsers/ParseHPGL2.py:331 +#: AppParsers/ParseHPGL2.py:366 +msgid "Coordinates missing, line ignored" +msgstr "Koordinaten fehlen, Zeile wird ignoriert" + +#: AppParsers/ParseGerber.py:1003 AppParsers/ParseGerber.py:1103 +msgid "GERBER file might be CORRUPT. Check the file !!!" +msgstr "Die GERBER-Datei könnte CORRUPT sein. Überprüfen Sie die Datei !!!" + +#: AppParsers/ParseGerber.py:1057 +msgid "" +"Region does not have enough points. File will be processed but there are " +"parser errors. Line number" +msgstr "" +"Region hat nicht genug Punkte. Die Datei wird verarbeitet, es treten jedoch " +"Parserfehler auf. Linien Nummer" + +#: AppParsers/ParseGerber.py:1487 AppParsers/ParseHPGL2.py:401 +msgid "Gerber processing. Joining polygons" +msgstr "Gerber-Verarbeitung. Polygone verbinden" + +#: AppParsers/ParseGerber.py:1504 +msgid "Gerber processing. Applying Gerber polarity." +msgstr "Gerber-Verarbeitung. Anwenden der Gerber-Polarität." + +#: AppParsers/ParseGerber.py:1564 +msgid "Gerber Line" +msgstr "Gerber Linie" + +#: AppParsers/ParseGerber.py:1564 +msgid "Gerber Line Content" +msgstr "Gerber-Zeileninhalt" + +#: AppParsers/ParseGerber.py:1566 +msgid "Gerber Parser ERROR" +msgstr "Gerber-Parser FEHLER" + +#: AppParsers/ParseGerber.py:1956 +msgid "Gerber Scale done." +msgstr "Gerber-Skalierung erfolgt." + +#: AppParsers/ParseGerber.py:2048 +msgid "Gerber Offset done." +msgstr "Gerber Offset fertig." + +#: AppParsers/ParseGerber.py:2124 +msgid "Gerber Mirror done." +msgstr "Gerber Spiegel fertig." + +#: AppParsers/ParseGerber.py:2198 +msgid "Gerber Skew done." +msgstr "Gerber-Versatz fertig." + +#: AppParsers/ParseGerber.py:2260 +msgid "Gerber Rotate done." +msgstr "Gerber drehen fertig." + +#: AppParsers/ParseGerber.py:2417 +msgid "Gerber Buffer done." +msgstr "Gerber Buffer fertig." + +#: AppParsers/ParseHPGL2.py:181 +msgid "HPGL2 processing. Parsing" +msgstr "HPGL2 -Verarbeitung. Parsing" + +#: AppParsers/ParseHPGL2.py:413 +msgid "HPGL2 Line" +msgstr "HPGL2-Linie" + +#: AppParsers/ParseHPGL2.py:413 +msgid "HPGL2 Line Content" +msgstr "HPGL2-Zeileninhalt" + +#: AppParsers/ParseHPGL2.py:414 +msgid "HPGL2 Parser ERROR" +msgstr "HPGL2 -Parser FEHLER" + +#: AppProcess.py:172 +msgid "processes running." +msgstr "laufende Prozesse." + +#: AppTools/ToolAlignObjects.py:32 +msgid "Align Objects" +msgstr "Objekte ausrichten" + +#: AppTools/ToolAlignObjects.py:61 +msgid "MOVING object" +msgstr "BEWEGLICHES Objekt" + +#: AppTools/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." + +#: AppTools/ToolAlignObjects.py:86 +msgid "Object to be aligned." +msgstr "Zu ausrichtendes Objekt." + +#: AppTools/ToolAlignObjects.py:98 +msgid "TARGET object" +msgstr "ZIEL-Objekt" + +#: AppTools/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." + +#: AppTools/ToolAlignObjects.py:122 +msgid "Object to be aligned to. Aligner." +msgstr "Objekt, an dem ausgerichtet werden soll. Aligner." + +#: AppTools/ToolAlignObjects.py:135 +msgid "Alignment Type" +msgstr "AusrichtungstypAusrichtung" + +#: AppTools/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" + +#: AppTools/ToolAlignObjects.py:143 +msgid "Single Point" +msgstr "Einziger Punkt" + +#: AppTools/ToolAlignObjects.py:144 +msgid "Dual Point" +msgstr "Doppelpunkt" + +#: AppTools/ToolAlignObjects.py:159 +msgid "Align Object" +msgstr "Objekt ausrichten" + +#: AppTools/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." + +#: AppTools/ToolAlignObjects.py:176 AppTools/ToolCalculators.py:246 +#: AppTools/ToolCalibration.py:683 AppTools/ToolCopperThieving.py:484 +#: AppTools/ToolCorners.py:173 AppTools/ToolCutOut.py:362 +#: AppTools/ToolDblSided.py:471 AppTools/ToolExtractDrills.py:310 +#: AppTools/ToolFiducials.py:318 AppTools/ToolFilm.py:503 +#: AppTools/ToolInvertGerber.py:140 AppTools/ToolNCC.py:612 +#: AppTools/ToolOptimal.py:237 AppTools/ToolPaint.py:555 +#: AppTools/ToolPanelize.py:280 AppTools/ToolPunchGerber.py:339 +#: AppTools/ToolQRCode.py:314 AppTools/ToolRulesCheck.py:516 +#: AppTools/ToolSolderPaste.py:473 AppTools/ToolSub.py:176 +#: AppTools/ToolTransform.py:398 +msgid "Reset Tool" +msgstr "Reset Werkzeug" + +#: AppTools/ToolAlignObjects.py:178 AppTools/ToolCalculators.py:248 +#: AppTools/ToolCalibration.py:685 AppTools/ToolCopperThieving.py:486 +#: AppTools/ToolCorners.py:175 AppTools/ToolCutOut.py:364 +#: AppTools/ToolDblSided.py:473 AppTools/ToolExtractDrills.py:312 +#: AppTools/ToolFiducials.py:320 AppTools/ToolFilm.py:505 +#: AppTools/ToolInvertGerber.py:142 AppTools/ToolNCC.py:614 +#: AppTools/ToolOptimal.py:239 AppTools/ToolPaint.py:557 +#: AppTools/ToolPanelize.py:282 AppTools/ToolPunchGerber.py:341 +#: AppTools/ToolQRCode.py:316 AppTools/ToolRulesCheck.py:518 +#: AppTools/ToolSolderPaste.py:475 AppTools/ToolSub.py:178 +#: AppTools/ToolTransform.py:400 +msgid "Will reset the tool parameters." +msgstr "Wird die Werkzeugeinstellungen zurücksetzen." + +#: AppTools/ToolAlignObjects.py:244 +msgid "Align Tool" +msgstr "Ausrichten Werkzeug" + +#: AppTools/ToolAlignObjects.py:289 +msgid "There is no aligned FlatCAM object selected..." +msgstr "Es ist kein ausgerichtetes FlatCAM-Objekt ausgewählt ..." + +#: AppTools/ToolAlignObjects.py:299 +msgid "There is no aligner FlatCAM object selected..." +msgstr "Es ist kein Aligner FlatCAM-Objekt ausgewählt ..." + +#: AppTools/ToolAlignObjects.py:325 AppTools/ToolAlignObjects.py:385 +msgid "First Point" +msgstr "Erster Punkt" + +#: AppTools/ToolAlignObjects.py:325 AppTools/ToolAlignObjects.py:400 +msgid "Click on the START point." +msgstr "Klicken Sie auf den START-Punkt." + +#: AppTools/ToolAlignObjects.py:380 AppTools/ToolCalibration.py:920 +msgid "Cancelled by user request." +msgstr "Auf Benutzerwunsch storniert." + +#: AppTools/ToolAlignObjects.py:385 AppTools/ToolAlignObjects.py:407 +msgid "Click on the DESTINATION point." +msgstr "Klicken Sie auf den Punkt ZIEL." + +#: AppTools/ToolAlignObjects.py:385 AppTools/ToolAlignObjects.py:400 +#: AppTools/ToolAlignObjects.py:407 +msgid "Or right click to cancel." +msgstr "Oder klicken Sie mit der rechten Maustaste, um abzubrechen." + +#: AppTools/ToolAlignObjects.py:400 AppTools/ToolAlignObjects.py:407 +#: AppTools/ToolFiducials.py:111 +msgid "Second Point" +msgstr "Zweiter Punkt" + +#: AppTools/ToolCalculators.py:24 +msgid "Calculators" +msgstr "Rechner" + +#: AppTools/ToolCalculators.py:26 +msgid "Units Calculator" +msgstr "Einheitenrechner" + +#: AppTools/ToolCalculators.py:70 +msgid "Here you enter the value to be converted from INCH to MM" +msgstr "" +"Hier geben Sie den Wert ein, der von Zoll in Metrik konvertiert werden soll" + +#: AppTools/ToolCalculators.py:75 +msgid "Here you enter the value to be converted from MM to INCH" +msgstr "" +"Hier geben Sie den Wert ein, der von Metrik in Zoll konvertiert werden soll" + +#: AppTools/ToolCalculators.py:111 +msgid "" +"This is the angle of the tip of the tool.\n" +"It is specified by manufacturer." +msgstr "" +"Dies ist der Winkel der Werkzeugspitze.\n" +"Es wird vom Hersteller angegeben." + +#: AppTools/ToolCalculators.py:120 +msgid "" +"This is the depth to cut into the material.\n" +"In the CNCJob is the CutZ parameter." +msgstr "" +"Dies ist die Tiefe, in die das Material geschnitten werden soll.\n" +"Im CNCJob befindet sich der Parameter CutZ." + +#: AppTools/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 "" +"Dies ist der Werkzeugdurchmesser, in den eingegeben werden soll\n" +"FlatCAM-Gerber-Bereich.\n" +"Im CNCJob-Bereich heißt es >Werkzeugdurchmesser<." + +#: AppTools/ToolCalculators.py:139 AppTools/ToolCalculators.py:235 +msgid "Calculate" +msgstr "Berechnung" + +#: AppTools/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 "" +"Berechnen Sie entweder die Schnitttiefe Z oder den effektiven " +"Werkzeugdurchmesser.\n" +" je nachdem was gewünscht wird und was bekannt ist. " + +#: AppTools/ToolCalculators.py:205 +msgid "Current Value" +msgstr "Aktueller Wert" + +#: AppTools/ToolCalculators.py:212 +msgid "" +"This is the current intensity value\n" +"to be set on the Power Supply. In Amps." +msgstr "" +"Dies ist der aktuelle Intensitätswert\n" +"am Netzteil einstellen. In Ampere." + +#: AppTools/ToolCalculators.py:216 +msgid "Time" +msgstr "Zeit" + +#: AppTools/ToolCalculators.py:223 +msgid "" +"This is the calculated time required for the procedure.\n" +"In minutes." +msgstr "" +"Dies ist die berechnete Zeit, die für das Verfahren benötigt wird.\n" +"In Minuten." + +#: AppTools/ToolCalculators.py:238 +msgid "" +"Calculate the current intensity value and the procedure time,\n" +"depending on the parameters above" +msgstr "" +"Berechnen Sie den aktuellen Intensitätswert und die Eingriffszeit,\n" +"abhängig von den obigen Parametern" + +#: AppTools/ToolCalculators.py:299 +msgid "Calc. Tool" +msgstr "Rechner-Tool" + +#: AppTools/ToolCalibration.py:67 +msgid "GCode Parameters" +msgstr "GCode-Parameter" + +#: AppTools/ToolCalibration.py:69 +msgid "Parameters used when creating the GCode in this tool." +msgstr "Verwendete Parameter zum Erzeugen des GCodes mit diesem Wwerkzeug." + +#: AppTools/ToolCalibration.py:173 +msgid "STEP 1: Acquire Calibration Points" +msgstr "Schritt 1: Kalibrierungspunkte erzeugen" + +#: AppTools/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 "" +"Wählen Sie vier Punkte aus, indem Sie auf die Leinwand klicken.\n" +"Diese vier Punkte sollten in den vier sein\n" +"(so viel wie möglich) Ecken des Objekts." + +#: AppTools/ToolCalibration.py:193 AppTools/ToolFilm.py:71 +#: AppTools/ToolImage.py:54 AppTools/ToolPanelize.py:77 +#: AppTools/ToolProperties.py:177 +msgid "Object Type" +msgstr "Objekttyp" + +#: AppTools/ToolCalibration.py:210 +msgid "Source object selection" +msgstr "Auswahl des Quellobjekts" + +#: AppTools/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." + +#: AppTools/ToolCalibration.py:218 +msgid "Calibration Points" +msgstr "Kalibrierungspunkte" + +#: AppTools/ToolCalibration.py:220 +msgid "" +"Contain the expected calibration points and the\n" +"ones measured." +msgstr "" +"Enthalten die erwarteten Kalibrierungspunkte sowie\n" +"die gemessenen." + +#: AppTools/ToolCalibration.py:235 AppTools/ToolSub.py:76 +#: AppTools/ToolSub.py:131 +msgid "Target" +msgstr "Ziel" + +#: AppTools/ToolCalibration.py:236 +msgid "Found Delta" +msgstr "Gefundener Unterschied" + +#: AppTools/ToolCalibration.py:248 +msgid "Bot Left X" +msgstr "Unten links X" + +#: AppTools/ToolCalibration.py:257 +msgid "Bot Left Y" +msgstr "Unten links Y" + +#: AppTools/ToolCalibration.py:275 +msgid "Bot Right X" +msgstr "Unten rechts X" + +#: AppTools/ToolCalibration.py:285 +msgid "Bot Right Y" +msgstr "Unten rechts Y" + +#: AppTools/ToolCalibration.py:300 +msgid "Top Left X" +msgstr "Oben links X" + +#: AppTools/ToolCalibration.py:309 +msgid "Top Left Y" +msgstr "Oben links Y" + +#: AppTools/ToolCalibration.py:324 +msgid "Top Right X" +msgstr "Oben rechts X" + +#: AppTools/ToolCalibration.py:334 +msgid "Top Right Y" +msgstr "Oben rechts Y" + +#: AppTools/ToolCalibration.py:367 +msgid "Get Points" +msgstr "Punkte einholen" + +#: AppTools/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 "" +"Wählen Sie vier Punkte indem Sie auf die Leinwand klicken (Freier Modus).\n" +"Oder wählen Sie ein Objekt (Objekt Modus)\n" +"Diese vier Punkte sollten in vier unterschiedlichen Quadranten des Objektes " +"sein." + +#: AppTools/ToolCalibration.py:390 +msgid "STEP 2: Verification GCode" +msgstr "Schritt 2: Überprüfung des GCodes" + +#: AppTools/ToolCalibration.py:392 AppTools/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 "" +"Erstellen Sie eine GCode-Datei, um die Leiterplatte mithilfe von zu " +"lokalisieren und auszurichten\n" +"die vier oben erworbenen Punkte.\n" +"Die Punktesequenz ist:\n" +"- erster Punkt -> Ursprung einstellen\n" +"- zweiter Punkt -> Ausrichtungspunkt. Kann sein: oben links oder unten " +"rechts.\n" +"- dritter Punkt -> Kontrollpunkt. Kann sein: oben links oder unten rechts.\n" +"- vierter Punkt -> letzter Verifizierungspunkt. Nur zur Bewertung." + +#: AppTools/ToolCalibration.py:403 AppTools/ToolSolderPaste.py:348 +msgid "Generate GCode" +msgstr "GCode generieren" + +#: AppTools/ToolCalibration.py:429 +msgid "STEP 3: Adjustments" +msgstr "Schritt 3: Anpassungen" + +#: AppTools/ToolCalibration.py:431 AppTools/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 "" +"Berechne die Skalierungs und Verzerrungsfaktoren basierend auf dem Delta\n" +"das bei der Platinenüberprüfung gefunden wurde. Dieses Delta muss den " +"Feldern\n" +"eingetragen warden." + +#: AppTools/ToolCalibration.py:438 +msgid "Calculate Factors" +msgstr "Berechne Faktoren" + +#: AppTools/ToolCalibration.py:460 +msgid "STEP 4: Adjusted GCode" +msgstr "Schritt 4 Angepasster GCode" + +#: AppTools/ToolCalibration.py:462 +msgid "" +"Generate verification GCode file adjusted with\n" +"the factors above." +msgstr "" +"Erzeuge den GCode mit den zuvor gefundenen\n" +"Faktoren." + +#: AppTools/ToolCalibration.py:467 +msgid "Scale Factor X:" +msgstr "Skalierungsfaktor X:" + +#: AppTools/ToolCalibration.py:479 +msgid "Scale Factor Y:" +msgstr "Skalierungsfaktor Y:" + +#: AppTools/ToolCalibration.py:491 +msgid "Apply Scale Factors" +msgstr "Skalierungen anwenden" + +#: AppTools/ToolCalibration.py:493 +msgid "Apply Scale factors on the calibration points." +msgstr "Anwenden der Skalierungsfaktoren auf die Kalibrierungspunkte." + +#: AppTools/ToolCalibration.py:503 +msgid "Skew Angle X:" +msgstr "Verzerrungs-Winkel X:" + +#: AppTools/ToolCalibration.py:516 +msgid "Skew Angle Y:" +msgstr "Verzerrungs-Winkel Y:" + +#: AppTools/ToolCalibration.py:529 +msgid "Apply Skew Factors" +msgstr "Schrägstellung anwenden" + +#: AppTools/ToolCalibration.py:531 +msgid "Apply Skew factors on the calibration points." +msgstr "Anwenden der Verzerrungswinkel auf die Bezugspunkte." + +#: AppTools/ToolCalibration.py:600 +msgid "Generate Adjusted GCode" +msgstr "Angepassten Überprüfungs-GCode generieren" + +#: AppTools/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 "" +"Bestätigungs-GCode-Datei erstellen angepasst mit\n" +"die oben genannten Faktoren.\n" +"Die GCode-Parameter können neu eingestellt werden\n" +"bevor Sie auf diese Schaltfläche klicken." + +#: AppTools/ToolCalibration.py:623 +msgid "STEP 5: Calibrate FlatCAM Objects" +msgstr "Schritt 5: Kalibrieren der FlatCAM Objekte" + +#: AppTools/ToolCalibration.py:625 +msgid "" +"Adjust the FlatCAM objects\n" +"with the factors determined and verified above." +msgstr "" +"Anpassen der FlatCAM Objekte\n" +"mit den zuvor bestimmten und überprüften Faktoren." + +#: AppTools/ToolCalibration.py:637 +msgid "Adjusted object type" +msgstr "Angepasster Objekttyp" + +#: AppTools/ToolCalibration.py:638 +msgid "Type of the FlatCAM Object to be adjusted." +msgstr "Art des FlatCAM Objektes das angepasst wird." + +#: AppTools/ToolCalibration.py:651 +msgid "Adjusted object selection" +msgstr "Objektauswahl angepasst" + +#: AppTools/ToolCalibration.py:653 +msgid "The FlatCAM Object to be adjusted." +msgstr "Das FlatCAM Objekt das angepasst werden muss." + +#: AppTools/ToolCalibration.py:660 +msgid "Calibrate" +msgstr "Kalibrieren" + +#: AppTools/ToolCalibration.py:662 +msgid "" +"Adjust (scale and/or skew) the objects\n" +"with the factors determined above." +msgstr "" +"Anpassen (Skalieren und/oder Verzerren) der Objekte\n" +"anhand der zuvor gefundenen Faktoren." + +#: AppTools/ToolCalibration.py:770 AppTools/ToolCalibration.py:771 +msgid "Origin" +msgstr "Ursprung" + +#: AppTools/ToolCalibration.py:800 +msgid "Tool initialized" +msgstr "Werkzeug eingerichtet" + +#: AppTools/ToolCalibration.py:838 +msgid "There is no source FlatCAM object selected..." +msgstr "Es is kein FlatCAM Objekt ausgewählt." + +#: AppTools/ToolCalibration.py:859 +msgid "Get First calibration point. Bottom Left..." +msgstr "Lese ersten Kalibrierungspunkt (Unten Links)" + +#: AppTools/ToolCalibration.py:926 +msgid "Get Second calibration point. Bottom Right (Top Left)..." +msgstr "Zweiter Kalibrierungspunkt abrufen. Unten rechts (oben links) ..." + +#: AppTools/ToolCalibration.py:930 +msgid "Get Third calibration point. Top Left (Bottom Right)..." +msgstr "" +"Holen Sie sich den dritten Kalibrierungspunkt. Oben links unten rechts)..." + +#: AppTools/ToolCalibration.py:934 +msgid "Get Forth calibration point. Top Right..." +msgstr "Lese vierten Kalibrierungspunkt (Oben Rechts)" + +#: AppTools/ToolCalibration.py:938 +msgid "Done. All four points have been acquired." +msgstr "Erledigt, alle vier Punkte wurden gelesen." + +#: AppTools/ToolCalibration.py:969 +msgid "Verification GCode for FlatCAM Calibration Tool" +msgstr "Überprüfungs GCode des FlatCAM Kalibrierungstools" + +#: AppTools/ToolCalibration.py:981 AppTools/ToolCalibration.py:1067 +msgid "Gcode Viewer" +msgstr "GCode Anzeige" + +#: AppTools/ToolCalibration.py:997 +msgid "Cancelled. Four points are needed for GCode generation." +msgstr "Abgebrochen. Es werden vier Punkte zur GCode Erzeugung benötigt." + +#: AppTools/ToolCalibration.py:1253 AppTools/ToolCalibration.py:1349 +msgid "There is no FlatCAM object selected..." +msgstr "Es ist kein FlatCAM Objekt ausgewählt." + +#: AppTools/ToolCopperThieving.py:76 AppTools/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 +#: AppTools/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 "" +"Diese Auswahl definiert den Abstand zwischen den \"Copper Thieving\" " +"Komponenten.\n" +"und den Kupferverbindungen im Gerber File (möglicherweise wird hierbei ein " +"Polygon\n" +"in mehrere aufgeteilt." + +# Double +#: AppTools/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 "" +"- 'Selbst' - die 'Copper Thieving' Ausdehnung basiert auf der " +"Objektausdehnung.\n" +"- 'Bereichsauswahl' - Klicken Sie mit der linken Maustaste, um den zu " +"füllenden Bereich auszuwählen.\n" +"- 'Referenzobjekt' - 'Copper Thieving' innerhalb des von einem anderen " +"Objekt angegebenen Bereichs." + +#: AppTools/ToolCopperThieving.py:138 AppTools/ToolNCC.py:552 +#: AppTools/ToolPaint.py:495 +msgid "Ref. Type" +msgstr "Ref. Typ" + +#: AppTools/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 "" +"Der Typ des FlatCAM-Objekts, das Copper Thieving-Referenz verwendet werden " +"soll.\n" +"Es kann Gerber, Excellon oder Geometry sein." + +#: AppTools/ToolCopperThieving.py:149 AppTools/ToolNCC.py:562 +#: AppTools/ToolPaint.py:505 +msgid "Ref. Object" +msgstr "Ref. Objekt" + +#: AppTools/ToolCopperThieving.py:151 AppTools/ToolNCC.py:564 +#: AppTools/ToolPaint.py:507 +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 +#: AppTools/ToolCopperThieving.py:327 +msgid "Insert Copper thieving" +msgstr "'Coper Thieving' einsetzen" + +# Double +#: AppTools/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 "" +"Fügt ein Polygon hinzu (kann in mehrere Teile geteilt werden)\n" +"das wird die eigentlichen Gerber-Spuren in einem gewissen Abstand umgeben." + +# Double +#: AppTools/ToolCopperThieving.py:388 +msgid "Insert Robber Bar" +msgstr "'Robber Bar' einsetzen" + +# Double +#: AppTools/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 "" +"Fügt ein Polygon mit einer definierten Dicke hinzu\n" +"das wird das eigentliche Gerber-Objekt umgeben\n" +"in einem bestimmten Abstand.\n" +"Erforderlich für die Lochmusterbeschichtung." + +#: AppTools/ToolCopperThieving.py:414 +msgid "Select Soldermask object" +msgstr "Lötmaskenobjekt auswählen" + +#: AppTools/ToolCopperThieving.py:416 +msgid "" +"Gerber Object with the soldermask.\n" +"It will be used as a base for\n" +"the pattern plating mask." +msgstr "" +"Das Gerber Objekt mit der Lötmaske\n" +"Wird als Basis verwendet." + +#: AppTools/ToolCopperThieving.py:445 +msgid "Plated area" +msgstr "Beschichtetes Areal" + +#: AppTools/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 "" +"Das zu beschichtende Areal.\n" +"Generell wird es durch die Öffnungen in der Beschichtungsmaske erzeugt.\n" +"\n" +"ACHTUNG: das berechnete Areal ist etwas größer da die Lötmaskenöffnungen\n" +"etwas größer als die Pads sind, und dieses Areal aus der Lötmaske berechnet " +"wird." + +#: AppTools/ToolCopperThieving.py:458 +msgid "mm" +msgstr "mm" + +#: AppTools/ToolCopperThieving.py:460 +msgid "in" +msgstr "in" + +#: AppTools/ToolCopperThieving.py:467 +msgid "Generate pattern plating mask" +msgstr "Generieren der Beschichtungsmaske" + +#: AppTools/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 "" +"Wird die Lötmaske des Copper Thivings und/oder der \n" +"Robber Bar zu der Gerber Geometrie hinzufügen, sofern\n" +"diese erzeugt worden sind." + +#: AppTools/ToolCopperThieving.py:625 AppTools/ToolCopperThieving.py:650 +msgid "Lines Grid works only for 'itself' reference ..." +msgstr "Schraffur geht nur bei \"Selbst\" Referenz ..." + +#: AppTools/ToolCopperThieving.py:636 +msgid "Solid fill selected." +msgstr "Vollständige Füllung gewählt." + +#: AppTools/ToolCopperThieving.py:641 +msgid "Dots grid fill selected." +msgstr "Punktmusterfüllung gewählt." + +#: AppTools/ToolCopperThieving.py:646 +msgid "Squares grid fill selected." +msgstr "Quadratfüllung gewählt." + +#: AppTools/ToolCopperThieving.py:667 AppTools/ToolCopperThieving.py:749 +#: AppTools/ToolCopperThieving.py:1351 AppTools/ToolCorners.py:251 +#: AppTools/ToolDblSided.py:657 AppTools/ToolExtractDrills.py:436 +#: AppTools/ToolFiducials.py:467 AppTools/ToolFiducials.py:744 +#: AppTools/ToolOptimal.py:342 AppTools/ToolPunchGerber.py:512 +#: AppTools/ToolQRCode.py:426 +msgid "There is no Gerber object loaded ..." +msgstr "Es ist kein Gerber-Objekt geladen ..." + +#: AppTools/ToolCopperThieving.py:680 AppTools/ToolCopperThieving.py:1279 +msgid "Append geometry" +msgstr "Geometrie angehängt" + +#: AppTools/ToolCopperThieving.py:724 AppTools/ToolCopperThieving.py:1312 +#: AppTools/ToolCopperThieving.py:1465 +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 +#: AppTools/ToolCopperThieving.py:732 AppTools/ToolCopperThieving.py:1320 +msgid "Copper Thieving Tool done." +msgstr "'Copper Thieving' Werkzeug fertig." + +#: AppTools/ToolCopperThieving.py:759 AppTools/ToolCopperThieving.py:792 +#: AppTools/ToolCutOut.py:519 AppTools/ToolCutOut.py:724 +#: AppTools/ToolInvertGerber.py:208 AppTools/ToolNCC.py:1599 +#: AppTools/ToolNCC.py:1641 AppTools/ToolNCC.py:1670 AppTools/ToolPaint.py:1473 +#: AppTools/ToolPanelize.py:423 AppTools/ToolPanelize.py:437 +#: AppTools/ToolSub.py:294 AppTools/ToolSub.py:307 AppTools/ToolSub.py:498 +#: AppTools/ToolSub.py:513 tclCommands/TclCommandCopperClear.py:97 +#: tclCommands/TclCommandPaint.py:99 +msgid "Could not retrieve object" +msgstr "Objekt konnte nicht abgerufen werden" + +#: AppTools/ToolCopperThieving.py:769 AppTools/ToolNCC.py:1649 Common.py:200 +msgid "Click the start point of the area." +msgstr "Klicken Sie auf den Startpunkt des Bereichs." + +#: AppTools/ToolCopperThieving.py:820 +msgid "Click the end point of the filling area." +msgstr "Klicken Sie auf den Endpunkt des Ausfüllbereichs." + +#: AppTools/ToolCopperThieving.py:826 AppTools/ToolNCC.py:1711 +#: AppTools/ToolNCC.py:1763 AppTools/ToolPaint.py:1605 +#: AppTools/ToolPaint.py:1656 Common.py:256 Common.py:356 +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." + +#: AppTools/ToolCopperThieving.py:948 AppTools/ToolCopperThieving.py:952 +#: AppTools/ToolCopperThieving.py:1013 +msgid "Thieving" +msgstr "Diebstahl" + +#: AppTools/ToolCopperThieving.py:959 +msgid "Copper Thieving Tool started. Reading parameters." +msgstr "Copper Thieving Tool gestartet. Parameter lesen." + +#: AppTools/ToolCopperThieving.py:984 +msgid "Copper Thieving Tool. Preparing isolation polygons." +msgstr "Copper Thieving-Tool. Vorbereitung von isolierenden Polygonen." + +#: AppTools/ToolCopperThieving.py:1029 +msgid "Copper Thieving Tool. Preparing areas to fill with copper." +msgstr "Copper Thieving Tool: Areale zur Kupferfüllung vorbereiten." + +#: AppTools/ToolCopperThieving.py:1040 AppTools/ToolOptimal.py:349 +#: AppTools/ToolPanelize.py:810 AppTools/ToolRulesCheck.py:1127 +msgid "Working..." +msgstr "Arbeiten..." + +#: AppTools/ToolCopperThieving.py:1067 +msgid "Geometry not supported for bounding box" +msgstr "Geometrie für Umriss nicht unterstützt" + +#: AppTools/ToolCopperThieving.py:1073 AppTools/ToolNCC.py:1942 +#: AppTools/ToolNCC.py:1997 AppTools/ToolNCC.py:3038 AppTools/ToolPaint.py:3385 +msgid "No object available." +msgstr "Kein Objekt vorhanden." + +#: AppTools/ToolCopperThieving.py:1110 AppTools/ToolNCC.py:1967 +#: AppTools/ToolNCC.py:2020 AppTools/ToolNCC.py:3080 +msgid "The reference object type is not supported." +msgstr "Der Referenzobjekttyp wird nicht unterstützt." + +#: AppTools/ToolCopperThieving.py:1115 +msgid "Copper Thieving Tool. Appending new geometry and buffering." +msgstr "Copper Thieving Tool. Füge neue Geometrie an und puffere sie." + +#: AppTools/ToolCopperThieving.py:1131 +msgid "Create geometry" +msgstr "Geometrie erstellen" + +#: AppTools/ToolCopperThieving.py:1331 AppTools/ToolCopperThieving.py:1335 +msgid "P-Plating Mask" +msgstr "P-Beschichtungsmaske" + +#: AppTools/ToolCopperThieving.py:1357 +msgid "Append PP-M geometry" +msgstr "PPM Geometrie hinzufügen" + +#: AppTools/ToolCopperThieving.py:1483 +msgid "Generating Pattern Plating Mask done." +msgstr "Erzeugen der PPM abgeschlossen." + +#: AppTools/ToolCopperThieving.py:1555 +msgid "Copper Thieving Tool exit." +msgstr "Copper Thieving Tool verlassen." + +#: AppTools/ToolCorners.py:57 +#, fuzzy +#| msgid "Gerber Object to which will be added a copper thieving." +msgid "The Gerber object that to which will be added corner markers." +msgstr "Dem Gerber Objekt wird ein Copper Thieving hinzugefügt." + +#: AppTools/ToolCorners.py:73 +#, fuzzy +#| msgid "Location" +msgid "Locations" +msgstr "Ort" + +#: AppTools/ToolCorners.py:75 +msgid "Locations where to place corner markers." +msgstr "" + +#: AppTools/ToolCorners.py:92 AppTools/ToolFiducials.py:99 +msgid "Top Right" +msgstr "Oben rechts" + +#: AppTools/ToolCorners.py:158 +#, fuzzy +#| msgid "Add area" +msgid "Add Marker" +msgstr "Bereich hinzufügen" + +#: AppTools/ToolCorners.py:160 +msgid "Will add corner markers to the selected Gerber file." +msgstr "" + +#: AppTools/ToolCorners.py:225 +#, fuzzy +#| msgid "QRCode Tool" +msgid "Corners Tool" +msgstr "QRCode Werkzeug" + +#: AppTools/ToolCorners.py:288 +msgid "Please select at least a location" +msgstr "" + +#: AppTools/ToolCorners.py:423 +#, fuzzy +#| msgid "Copper Thieving Tool exit." +msgid "Corners Tool exit." +msgstr "Copper Thieving Tool verlassen." + +#: AppTools/ToolCutOut.py:41 +msgid "Cutout PCB" +msgstr "Ausschnitt PCB" + +#: AppTools/ToolCutOut.py:69 AppTools/ToolPanelize.py:53 +msgid "Source Object" +msgstr "Quellobjekt" + +#: AppTools/ToolCutOut.py:70 +msgid "Object to be cutout" +msgstr "Auszuschneidendes Objekt" + +#: AppTools/ToolCutOut.py:75 +msgid "Kind" +msgstr "Typ" + +#: AppTools/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 "" +"Geben Sie den Objekttyp an, der ausgeschnitten werden soll.\n" +"Es kann vom Typ sein: Gerber oder Geometrie.\n" +"Was hier ausgewählt wird, bestimmt die Art\n" +"von Objekten, die die Combobox 'Object' füllen." + +#: AppTools/ToolCutOut.py:121 +msgid "Tool Parameters" +msgstr "Werkzeugparameter" + +#: AppTools/ToolCutOut.py:238 +msgid "A. Automatic Bridge Gaps" +msgstr "A. Automatische Brückenlücken" + +#: AppTools/ToolCutOut.py:240 +msgid "This section handle creation of automatic bridge gaps." +msgstr "Dieser Abschnitt behandelt die Erstellung automatischer Brückenlücken." + +#: AppTools/ToolCutOut.py:247 +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 "" +"Anzahl der Lücken, die für den automatischen Ausschnitt verwendet werden.\n" +"Es können maximal 8 Brücken / Lücken vorhanden sein.\n" +"Die Wahlmöglichkeiten sind:\n" +"- Keine - keine Lücken\n" +"- lr \t- links + rechts\n" +"- tb \t- oben + unten\n" +"- 4 \t- links + rechts + oben + unten\n" +"- 2lr \t- 2 * links + 2 * rechts\n" +"- 2 tb \t- 2 * oben + 2 * unten\n" +"- 8 \t- 2 * links + 2 * rechts + 2 * oben + 2 * unten" + +#: AppTools/ToolCutOut.py:269 +msgid "Generate Freeform Geometry" +msgstr "Freiform Geometrie erzeugen" + +#: AppTools/ToolCutOut.py:271 +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 "" +"Schneiden Sie das ausgewählte Objekt aus.\n" +"Die Ausschnittform kann eine beliebige Form haben.\n" +"Nützlich, wenn die Leiterplatte eine nicht rechteckige Form hat." + +#: AppTools/ToolCutOut.py:283 +msgid "Generate Rectangular Geometry" +msgstr "Rechteck Geometrie erzeugen" + +#: AppTools/ToolCutOut.py:285 +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 "" +"Schneiden Sie das ausgewählte Objekt aus.\n" +"Die resultierende Ausschnittform ist\n" +"immer eine rechteckige Form und es wird sein\n" +"der Begrenzungsrahmen des Objekts." + +#: AppTools/ToolCutOut.py:304 +msgid "B. Manual Bridge Gaps" +msgstr "B. Manuelle Brückenlücken" + +#: AppTools/ToolCutOut.py:306 +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 "" +"In diesem Abschnitt wird die Erstellung manueller Brückenlücken behandelt.\n" +"Dies geschieht durch einen Mausklick auf den Umfang des\n" +"Geometrieobjekt, das als Ausschnittobjekt verwendet wird. " + +#: AppTools/ToolCutOut.py:321 +msgid "Geometry object used to create the manual cutout." +msgstr "Geometrieobjekt zum Erstellen des manuellen Ausschnitts." + +#: AppTools/ToolCutOut.py:328 +msgid "Generate Manual Geometry" +msgstr "Manuelle Geometrie erzeugen" + +#: AppTools/ToolCutOut.py:330 +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 "" +"Wenn das auszuschneidende Objekt ein Gerber ist\n" +"erstelle eine Geometrie, die sie umgibt,\n" +"als Ausschnitt verwendet werden, falls noch nicht vorhanden.\n" +"Wählen Sie in der oberen Objekt-Combobox die Quell-Gerber-Datei aus." + +#: AppTools/ToolCutOut.py:343 +msgid "Manual Add Bridge Gaps" +msgstr "Manuelles Hinzufügen von Brückenlücken" + +#: AppTools/ToolCutOut.py:345 +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 "" +"Klicken Sie mit der linken Maustaste (LMB)\n" +"Erstellen einer Brückenlücke, um die Leiterplatte von zu trennen\n" +"das umgebende Material.\n" +"Der LMB-Klick muss am Umfang von erfolgen\n" +"das Geometrieobjekt, das als Ausschnittsgeometrie verwendet wird." + +#: AppTools/ToolCutOut.py:524 +msgid "" +"There is no object selected for Cutout.\n" +"Select one and try again." +msgstr "" +"Es ist kein Objekt für den Ausschnitt ausgewählt.\n" +"Wählen Sie eine aus und versuchen Sie es erneut." + +#: AppTools/ToolCutOut.py:530 AppTools/ToolCutOut.py:733 +#: AppTools/ToolCutOut.py:914 AppTools/ToolCutOut.py:996 +#: tclCommands/TclCommandGeoCutout.py:184 +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." + +#: AppTools/ToolCutOut.py:544 AppTools/ToolCutOut.py:748 +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." + +#: AppTools/ToolCutOut.py:549 AppTools/ToolCutOut.py:752 +msgid "" +"Gaps value can be only one of: 'None', 'lr', 'tb', '2lr', '2tb', 4 or 8. " +"Fill in a correct value and retry. " +msgstr "" +"Der Lückenwert kann nur einer der folgenden Werte sein: \"Keine\", \"lr\", " +"\"tb\", \"2lr\", \"2tb\", 4 oder 8. Geben Sie einen korrekten Wert ein und " +"wiederholen Sie den Vorgang. " + +#: AppTools/ToolCutOut.py:554 AppTools/ToolCutOut.py:758 +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 "" +"Bei einer Multi-Geo-Geometrie können keine Ausschnitte vorgenommen werden.\n" +"Optional kann diese Multi-Geo-Geometrie in Single-Geo-Geometrie konvertiert " +"werden.\n" +"und danach Cutout durchführen." + +#: AppTools/ToolCutOut.py:706 AppTools/ToolCutOut.py:903 +msgid "Any form CutOut operation finished." +msgstr "Jede Form CutOut-Operation ist abgeschlossen." + +#: AppTools/ToolCutOut.py:728 AppTools/ToolInvertGerber.py:214 +#: AppTools/ToolNCC.py:1603 AppTools/ToolPaint.py:1396 +#: AppTools/ToolPanelize.py:428 tclCommands/TclCommandBbox.py:71 +#: tclCommands/TclCommandNregions.py:71 +msgid "Object not found" +msgstr "Objekt nicht gefunden" + +#: AppTools/ToolCutOut.py:872 +msgid "Rectangular cutout with negative margin is not possible." +msgstr "Ein rechteckiger Ausschnitt mit negativem Rand ist nicht möglich." + +#: AppTools/ToolCutOut.py:908 +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 ..." + +#: AppTools/ToolCutOut.py:925 AppTools/ToolCutOut.py:951 +msgid "Could not retrieve Geometry object" +msgstr "Geometrieobjekt konnte nicht abgerufen werden" + +#: AppTools/ToolCutOut.py:956 +msgid "Geometry object for manual cutout not found" +msgstr "Geometrieobjekt für manuellen Ausschnitt nicht gefunden" + +#: AppTools/ToolCutOut.py:966 +msgid "Added manual Bridge Gap." +msgstr "Manuelle Brückenlücke hinzugefügt." + +#: AppTools/ToolCutOut.py:978 +msgid "Could not retrieve Gerber object" +msgstr "Gerber-Objekt konnte nicht abgerufen werden" + +#: AppTools/ToolCutOut.py:983 +msgid "" +"There is no Gerber object selected for Cutout.\n" +"Select one and try again." +msgstr "" +"Es ist kein Gerber-Objekt für den Ausschnitt ausgewählt.\n" +"Wählen Sie eine aus und versuchen Sie es erneut." + +#: AppTools/ToolCutOut.py:989 +msgid "" +"The selected object has to be of Gerber type.\n" +"Select a Gerber file and try again." +msgstr "" +"Das ausgewählte Objekt muss vom Typ Gerber sein.\n" +"Wählen Sie eine Gerber-Datei aus und versuchen Sie es erneut." + +#: AppTools/ToolCutOut.py:1024 +msgid "Geometry not supported for cutout" +msgstr "Geometrie für Ausschnitt nicht unterstützt" + +#: AppTools/ToolCutOut.py:1099 +msgid "Making manual bridge gap..." +msgstr "Manuelle Brückenlücke herstellen ..." + +#: AppTools/ToolDblSided.py:26 +msgid "2-Sided PCB" +msgstr "2-seitige PCB" + +#: AppTools/ToolDblSided.py:52 +msgid "Mirror Operation" +msgstr "Spiegelbetrieb" + +#: AppTools/ToolDblSided.py:53 +msgid "Objects to be mirrored" +msgstr "Zu spiegelnde Objekte" + +#: AppTools/ToolDblSided.py:65 +msgid "Gerber to be mirrored" +msgstr "Zu spiegelndes Gerber" + +#: AppTools/ToolDblSided.py:69 AppTools/ToolDblSided.py:97 +#: AppTools/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 "" +"Spiegelt das angegebene Objekt um\n" +"die angegebene Achse. Erstellt kein neues\n" +"Objekt, ändert es aber." + +#: AppTools/ToolDblSided.py:93 +msgid "Excellon Object to be mirrored." +msgstr "Zu spiegelndes Excellon-Objekt." + +#: AppTools/ToolDblSided.py:122 +msgid "Geometry Obj to be mirrored." +msgstr "Geometrie-Objekt, das gespiegelt werden soll." + +#: AppTools/ToolDblSided.py:158 +msgid "Mirror Parameters" +msgstr "Spiegelparameter" + +#: AppTools/ToolDblSided.py:159 +msgid "Parameters for the mirror operation" +msgstr "Parameter für die Spiegeloperation" + +#: AppTools/ToolDblSided.py:164 +msgid "Mirror Axis" +msgstr "Spiegelachse" + +#: AppTools/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 "" +"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" + +#: AppTools/ToolDblSided.py:189 +msgid "Point coordinates" +msgstr "Punktkoordinaten" + +#: AppTools/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." +msgstr "" +"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." + +#: AppTools/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 "" +"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." + +#: AppTools/ToolDblSided.py:252 +msgid "Bounds Values" +msgstr "Grenzen Werte" + +#: AppTools/ToolDblSided.py:254 +msgid "" +"Select on canvas the object(s)\n" +"for which to calculate bounds values." +msgstr "" +"Wählen Sie auf der Leinwand die Objekte aus.\n" +"für die Grenzwerte berechnet werden sollen." + +#: AppTools/ToolDblSided.py:264 +msgid "X min" +msgstr "X min" + +#: AppTools/ToolDblSided.py:266 AppTools/ToolDblSided.py:280 +msgid "Minimum location." +msgstr "Mindeststandort." + +#: AppTools/ToolDblSided.py:278 +msgid "Y min" +msgstr "Y min" + +#: AppTools/ToolDblSided.py:292 +msgid "X max" +msgstr "X max" + +#: AppTools/ToolDblSided.py:294 AppTools/ToolDblSided.py:308 +msgid "Maximum location." +msgstr "Maximaler Standort." + +#: AppTools/ToolDblSided.py:306 +msgid "Y max" +msgstr "Y max" + +#: AppTools/ToolDblSided.py:317 +msgid "Center point coordinates" +msgstr "Mittelpunktskoordinaten" + +#: AppTools/ToolDblSided.py:319 +msgid "Centroid" +msgstr "Schwerpunkt" + +#: AppTools/ToolDblSided.py:321 +msgid "" +"The center point location for the rectangular\n" +"bounding shape. Centroid. Format is (x, y)." +msgstr "" +"Die Mittelpunktposition für das Rechteck\n" +"begrenzende Form. Centroid. Das Format ist (x, y)." + +#: AppTools/ToolDblSided.py:330 +msgid "Calculate Bounds Values" +msgstr "Berechnen Sie Grenzwerte" + +#: AppTools/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 "" +"Berechnen Sie die einhüllenden rechteckigen Formkoordinaten,\n" +"zur Auswahl von Objekten.\n" +"Die Hüllkurvenform verläuft parallel zur X- und Y-Achse." + +#: AppTools/ToolDblSided.py:352 +msgid "PCB Alignment" +msgstr "PCB-Ausrichtung" + +#: AppTools/ToolDblSided.py:354 AppTools/ToolDblSided.py:456 +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." + +#: AppTools/ToolDblSided.py:361 +msgid "Drill Diameter" +msgstr "Bohrdurchmesser" + +#: AppTools/ToolDblSided.py:390 AppTools/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 "" +"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" + +#: AppTools/ToolDblSided.py:410 +msgid "Alignment Drill Coordinates" +msgstr "Ausrichtungsbohrkoordinaten" + +#: AppTools/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 "" +"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." + +#: AppTools/ToolDblSided.py:420 +msgid "Drill coordinates" +msgstr "Bohrkoordinaten" + +#: AppTools/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 "" +"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), ..." + +#: AppTools/ToolDblSided.py:442 +msgid "Delete Last" +msgstr "Letzte löschen" + +#: AppTools/ToolDblSided.py:444 +msgid "Delete the last coordinates tuple in the list." +msgstr "Delete the last coordinates tuple in the list." + +#: AppTools/ToolDblSided.py:454 +msgid "Create Excellon Object" +msgstr "Excellon-Objekt erstellen" + +#: AppTools/ToolDblSided.py:541 +msgid "2-Sided Tool" +msgstr "2-seitiges Werkzeug" + +#: AppTools/ToolDblSided.py:581 +msgid "" +"'Point' reference is selected and 'Point' coordinates are missing. Add them " +"and retry." +msgstr "" +"'Point'-Referenz ist ausgewählt und' Point'-Koordinaten fehlen. Fügen Sie " +"sie hinzu und versuchen Sie es erneut." + +#: AppTools/ToolDblSided.py:600 +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." + +#: AppTools/ToolDblSided.py:612 +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." + +#: AppTools/ToolDblSided.py:623 +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." + +#: AppTools/ToolDblSided.py:648 +msgid "Excellon object with alignment drills created..." +msgstr "Excellon-Objekt mit Ausrichtungsbohrern erstellt ..." + +#: AppTools/ToolDblSided.py:661 AppTools/ToolDblSided.py:704 +#: AppTools/ToolDblSided.py:748 +msgid "Only Gerber, Excellon and Geometry objects can be mirrored." +msgstr "Nur Gerber-, Excellon- und Geometrie-Objekte können gespiegelt werden." + +#: AppTools/ToolDblSided.py:671 AppTools/ToolDblSided.py:715 +msgid "" +"There are no Point coordinates in the Point field. Add coords and try " +"again ..." +msgstr "" +"Das Punktfeld enthält keine Punktkoordinaten. Fügen Sie Coords hinzu und " +"versuchen Sie es erneut ..." + +#: AppTools/ToolDblSided.py:681 AppTools/ToolDblSided.py:725 +#: AppTools/ToolDblSided.py:762 +msgid "There is no Box object loaded ..." +msgstr "Es ist kein Box-Objekt geladen ..." + +#: AppTools/ToolDblSided.py:691 AppTools/ToolDblSided.py:735 +#: AppTools/ToolDblSided.py:772 +msgid "was mirrored" +msgstr "wurde gespiegelt" + +#: AppTools/ToolDblSided.py:700 AppTools/ToolPunchGerber.py:533 +msgid "There is no Excellon object loaded ..." +msgstr "Es ist kein Excellon-Objekt geladen ..." + +#: AppTools/ToolDblSided.py:744 +msgid "There is no Geometry object loaded ..." +msgstr "Es wurde kein Geometrieobjekt geladen ..." + +#: AppTools/ToolDblSided.py:818 App_Main.py:4572 App_Main.py:4727 +msgid "Failed. No object(s) selected..." +msgstr "Gescheitert. Kein Objekt ausgewählt ..." + +#: AppTools/ToolDistance.py:57 AppTools/ToolDistanceMin.py:50 +msgid "Those are the units in which the distance is measured." +msgstr "Dies sind die Einheiten, in denen die Entfernung gemessen wird." + +#: AppTools/ToolDistance.py:58 AppTools/ToolDistanceMin.py:51 +msgid "METRIC (mm)" +msgstr "METRISCH (mm)" + +#: AppTools/ToolDistance.py:58 AppTools/ToolDistanceMin.py:51 +msgid "INCH (in)" +msgstr "ZOLL (in)" + +#: AppTools/ToolDistance.py:64 +msgid "Snap to center" +msgstr "Zur Mitte einrasten" + +#: AppTools/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." + +#: AppTools/ToolDistance.py:76 +msgid "Start Coords" +msgstr "Starten Sie Koords" + +#: AppTools/ToolDistance.py:77 AppTools/ToolDistance.py:82 +msgid "This is measuring Start point coordinates." +msgstr "Dies ist das Messen von Startpunktkoordinaten." + +#: AppTools/ToolDistance.py:87 +msgid "Stop Coords" +msgstr "Stoppen Sie Koords" + +#: AppTools/ToolDistance.py:88 AppTools/ToolDistance.py:93 +msgid "This is the measuring Stop point coordinates." +msgstr "Dies ist die Messpunkt-Koordinate." + +#: AppTools/ToolDistance.py:98 AppTools/ToolDistanceMin.py:62 +msgid "Dx" +msgstr "Dx" + +#: AppTools/ToolDistance.py:99 AppTools/ToolDistance.py:104 +#: AppTools/ToolDistanceMin.py:63 AppTools/ToolDistanceMin.py:92 +msgid "This is the distance measured over the X axis." +msgstr "Dies ist der Abstand, der über die X-Achse gemessen wird." + +#: AppTools/ToolDistance.py:109 AppTools/ToolDistanceMin.py:65 +msgid "Dy" +msgstr "Dy" + +#: AppTools/ToolDistance.py:110 AppTools/ToolDistance.py:115 +#: AppTools/ToolDistanceMin.py:66 AppTools/ToolDistanceMin.py:97 +msgid "This is the distance measured over the Y axis." +msgstr "Dies ist die über die Y-Achse gemessene Entfernung." + +#: AppTools/ToolDistance.py:121 AppTools/ToolDistance.py:126 +#: AppTools/ToolDistanceMin.py:69 AppTools/ToolDistanceMin.py:102 +msgid "This is orientation angle of the measuring line." +msgstr "Dies ist der Orientierungswinkel der Messlinie." + +#: AppTools/ToolDistance.py:131 AppTools/ToolDistanceMin.py:71 +msgid "DISTANCE" +msgstr "ENTFERNUNG" + +#: AppTools/ToolDistance.py:132 AppTools/ToolDistance.py:137 +msgid "This is the point to point Euclidian distance." +msgstr "Dies ist die Punkt-zu-Punkt-Euklidische Entfernung." + +#: AppTools/ToolDistance.py:142 AppTools/ToolDistance.py:339 +#: AppTools/ToolDistanceMin.py:114 +msgid "Measure" +msgstr "Messen" + +#: AppTools/ToolDistance.py:274 +msgid "Working" +msgstr "Arbeiten" + +#: AppTools/ToolDistance.py:279 +msgid "MEASURING: Click on the Start point ..." +msgstr "MESSEN: Klicken Sie auf den Startpunkt ..." + +#: AppTools/ToolDistance.py:389 +msgid "Distance Tool finished." +msgstr "Distanzwerkzeug fertig." + +#: AppTools/ToolDistance.py:461 +msgid "Pads overlapped. Aborting." +msgstr "Pads überlappen sich. Abbruch." + +#: AppTools/ToolDistance.py:489 +#, fuzzy +#| msgid "Distance Tool finished." +msgid "Distance Tool cancelled." +msgstr "Distanzwerkzeug fertig." + +#: AppTools/ToolDistance.py:494 +msgid "MEASURING: Click on the Destination point ..." +msgstr "MESSEN: Klicken Sie auf den Zielpunkt ..." + +#: AppTools/ToolDistance.py:503 AppTools/ToolDistanceMin.py:284 +msgid "MEASURING" +msgstr "MESSUNG" + +#: AppTools/ToolDistance.py:504 AppTools/ToolDistanceMin.py:285 +msgid "Result" +msgstr "Ergebnis" + +#: AppTools/ToolDistanceMin.py:31 AppTools/ToolDistanceMin.py:143 +msgid "Minimum Distance Tool" +msgstr "Werkzeug für minimalen Abstand" + +#: AppTools/ToolDistanceMin.py:54 +msgid "First object point" +msgstr "Erster Objektpunkt" + +#: AppTools/ToolDistanceMin.py:55 AppTools/ToolDistanceMin.py:80 +msgid "" +"This is first object point coordinates.\n" +"This is the start point for measuring distance." +msgstr "" +"Dies sind erste Objektpunktkoordinaten.\n" +"Dies ist der Startpunkt für die Entfernungsmessung." + +#: AppTools/ToolDistanceMin.py:58 +msgid "Second object point" +msgstr "Zweiter Objektpunkt" + +#: AppTools/ToolDistanceMin.py:59 AppTools/ToolDistanceMin.py:86 +msgid "" +"This is second object point coordinates.\n" +"This is the end point for measuring distance." +msgstr "" +"Dies sind die Koordinaten des zweiten Objektpunkts.\n" +"Dies ist der Endpunkt für die Entfernungsmessung." + +#: AppTools/ToolDistanceMin.py:72 AppTools/ToolDistanceMin.py:107 +msgid "This is the point to point Euclidean distance." +msgstr "Dies ist die euklidische Distanz von Punkt zu Punkt." + +#: AppTools/ToolDistanceMin.py:74 +msgid "Half Point" +msgstr "Halber Punkt" + +#: AppTools/ToolDistanceMin.py:75 AppTools/ToolDistanceMin.py:112 +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." + +#: AppTools/ToolDistanceMin.py:117 +msgid "Jump to Half Point" +msgstr "Springe zum halben Punkt" + +#: AppTools/ToolDistanceMin.py:154 +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 ..." + +#: AppTools/ToolDistanceMin.py:195 AppTools/ToolDistanceMin.py:216 +#: AppTools/ToolDistanceMin.py:225 AppTools/ToolDistanceMin.py:246 +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: " + +#: AppTools/ToolDistanceMin.py:293 +msgid "Objects intersects or touch at" +msgstr "Objekte schneiden sich oder berühren sich" + +#: AppTools/ToolDistanceMin.py:299 +msgid "Jumped to the half point between the two selected objects" +msgstr "Sprang zum halben Punkt zwischen den beiden ausgewählten Objekten" + +#: AppTools/ToolExtractDrills.py:29 AppTools/ToolExtractDrills.py:295 +msgid "Extract Drills" +msgstr "Bohrer extrahieren" + +#: AppTools/ToolExtractDrills.py:62 +msgid "Gerber from which to extract drill holes" +msgstr "Gerber, aus dem Bohrlöcher gezogen werden sollen" + +#: AppTools/ToolExtractDrills.py:297 +msgid "Extract drills from a given Gerber file." +msgstr "Extrahieren Sie Bohrer aus einer bestimmten Gerber-Datei." + +#: AppTools/ToolExtractDrills.py:478 AppTools/ToolExtractDrills.py:563 +#: AppTools/ToolExtractDrills.py:648 +msgid "No drills extracted. Try different parameters." +msgstr "Keine Bohrer extrahiert. Probieren Sie verschiedene Parameter aus." + +#: AppTools/ToolFiducials.py:56 +msgid "Fiducials Coordinates" +msgstr "Bezugspunktkoordinaten" + +#: AppTools/ToolFiducials.py:58 +msgid "" +"A table with the fiducial points coordinates,\n" +"in the format (x, y)." +msgstr "" +"Eine Tabelle der Bezugspunkte mit Koordinaten \n" +"im Format (x,z)" + +#: AppTools/ToolFiducials.py:191 +msgid "" +"- 'Auto' - automatic placement of fiducials in the corners of the bounding " +"box.\n" +" - 'Manual' - manual placement of fiducials." +msgstr "" +"\"Auto\" Die Bezugspunkte werden automatisch in den Ecken des Umrisses " +"platziert.\n" +"\"Manuell\" Die Bezugspunkte werden manuell platziert." + +#: AppTools/ToolFiducials.py:237 +msgid "Thickness of the line that makes the fiducial." +msgstr "" + +#: AppTools/ToolFiducials.py:259 +msgid "Copper Gerber" +msgstr "Gerber (Kupfer) öffnen" + +#: AppTools/ToolFiducials.py:268 +msgid "Add Fiducial" +msgstr "Bezugspunkt hinzufügen" + +#: AppTools/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." + +#: AppTools/ToolFiducials.py:286 +msgid "Soldermask Gerber" +msgstr "Lötpastenmaske Gerber" + +#: AppTools/ToolFiducials.py:288 +msgid "The Soldermask Gerber object." +msgstr "Lötpastenmaske Gerber-Objekt." + +#: AppTools/ToolFiducials.py:300 +msgid "Add Soldermask Opening" +msgstr "Lotpastenmaske Öffnung hinzufügen" + +#: AppTools/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 "" +"Fügt ein Polygon zur Lötpastenschicht hinzu, \n" +"welches als Öffnungs-Bezugspunkt dient.\n" +"Der Durchmesser ist immer doppelt so groß\n" +"wie der Kupfer Bezugspunkt." + +#: AppTools/ToolFiducials.py:517 +msgid "Click to add first Fiducial. Bottom Left..." +msgstr "Klicken um den ersten Bezugspunkt unten links hinzuzufügen..." + +#: AppTools/ToolFiducials.py:781 +msgid "Click to add the last fiducial. Top Right..." +msgstr "Klicken um den letzten Bezugspunkt oben rechts hinzuzufügen..." + +#: AppTools/ToolFiducials.py:786 +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..." + +#: AppTools/ToolFiducials.py:789 AppTools/ToolFiducials.py:798 +msgid "Done. All fiducials have been added." +msgstr "Fertig. Alle Bezugspunkte hinzugefügt." + +#: AppTools/ToolFiducials.py:875 +msgid "Fiducials Tool exit." +msgstr "Bezugspunkttool beenden." + +#: AppTools/ToolFilm.py:42 +msgid "Film PCB" +msgstr "Film PCB" + +#: AppTools/ToolFilm.py:73 +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 "" +"Geben Sie den Objekttyp an, für den der Film erstellt werden soll.\n" +"Das Objekt kann vom Typ sein: Gerber oder Geometrie.\n" +"Die Auswahl hier bestimmt den Objekttyp\n" +"im Filmobjekt-Kombinationsfeld." + +#: AppTools/ToolFilm.py:96 +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 "" +"Geben Sie den Objekttyp an, für den ein Container verwendet werden soll\n" +"Filmschaffung. Es kann sein: Gerber- oder Geometrietyp. Die Auswahl hier " +"bestimmt den Objekttyp\n" +"im Kombinationsfeld Box-Objekt." + +#: AppTools/ToolFilm.py:256 +msgid "Film Parameters" +msgstr "Film-Parameter" + +#: AppTools/ToolFilm.py:317 +msgid "Punch drill holes" +msgstr "Löcher stanzen" + +#: AppTools/ToolFilm.py:318 +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 "" +"Wenn diese Option aktiviert ist, weist der erzeugte Film Löcher in den Pads " +"auf\n" +"Der erzeugte Film ist positiv. Dies geschieht, um das Bohren zu " +"erleichtern.\n" +"wenn manuell erledigt." + +#: AppTools/ToolFilm.py:336 +msgid "Source" +msgstr "Quelle" + +#: AppTools/ToolFilm.py:338 +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 "" +"Die Stanzlochquelle kann sein:\n" +"- Excellon -> Ein Excellon-Lochzentrum dient als Referenz.\n" +"- Pad-Mitte -> wird versuchen, die Pad-Mitte als Referenz zu verwenden." + +#: AppTools/ToolFilm.py:343 +msgid "Pad center" +msgstr "Pad-Mitte" + +#: AppTools/ToolFilm.py:348 +msgid "Excellon Obj" +msgstr "Excellon-Objekt" + +#: AppTools/ToolFilm.py:350 +msgid "" +"Remove the geometry of Excellon from the Film to create the holes in pads." +msgstr "" +"Entfernen Sie die Geometrie von Excellon aus dem Film, um die Löcher in den " +"Pads zu erzeugen." + +#: AppTools/ToolFilm.py:364 +msgid "Punch Size" +msgstr "Lochergröße" + +#: AppTools/ToolFilm.py:365 +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." + +#: AppTools/ToolFilm.py:485 +msgid "Save Film" +msgstr "Film speichern" + +#: AppTools/ToolFilm.py:487 +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 "" +"Erstellen Sie einen Film für das ausgewählte Objekt\n" +"die angegebene Box Erstellt kein neues\n" +"  FlatCAM-Objekt, speichern Sie es jedoch direkt im \n" +"gewähltem Format." + +#: AppTools/ToolFilm.py:649 +msgid "" +"Using the Pad center does not work on Geometry objects. Only a Gerber object " +"has pads." +msgstr "" +"Die Verwendung der Pad-Mitte funktioniert nicht bei Geometrieobjekten. Nur " +"ein Gerber-Objekt hat Pads." + +#: AppTools/ToolFilm.py:659 +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." + +#: AppTools/ToolFilm.py:666 +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." + +#: AppTools/ToolFilm.py:670 +msgid "No FlatCAM object selected." +msgstr "Kein FlatCAM-Objekt ausgewählt." + +#: AppTools/ToolFilm.py:681 +msgid "Generating Film ..." +msgstr "Film wird erstellt ..." + +#: AppTools/ToolFilm.py:730 AppTools/ToolFilm.py:734 +msgid "Export positive film" +msgstr "Film positiv exportieren" + +#: AppTools/ToolFilm.py:767 +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." + +#: AppTools/ToolFilm.py:791 +msgid "" +" Could not generate punched hole film because the punch hole sizeis bigger " +"than some of the apertures in the Gerber object." +msgstr "" +" Es konnte kein Lochfilm erzeugt werden, da die Lochgröße größer ist als " +"einige der Öffnungen im Gerber-Objekt." + +#: AppTools/ToolFilm.py:803 +msgid "" +"Could not generate punched hole film because the punch hole sizeis bigger " +"than some of the apertures in the Gerber object." +msgstr "" +"Es konnte kein Lochfilm erzeugt werden, da die Lochgröße größer ist als " +"einige der Öffnungen im Gerber-Objekt." + +#: AppTools/ToolFilm.py:821 +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 "" +"Lochfolie konnte nicht generiert werden, da die neu erstellte " +"Objektgeometrie mit der in der Quellobjektgeometrie übereinstimmt ..." + +#: AppTools/ToolFilm.py:876 AppTools/ToolFilm.py:880 +msgid "Export negative film" +msgstr "Exportieren negativ Film" + +#: AppTools/ToolFilm.py:941 AppTools/ToolFilm.py:1124 +#: AppTools/ToolPanelize.py:441 +msgid "No object Box. Using instead" +msgstr "Keine Objektbox. Verwenden Sie stattdessen" + +#: AppTools/ToolFilm.py:1057 AppTools/ToolFilm.py:1237 +msgid "Film file exported to" +msgstr "Film-Datei exportiert nach" + +#: AppTools/ToolFilm.py:1060 AppTools/ToolFilm.py:1240 +msgid "Generating Film ... Please wait." +msgstr "Film wird erstellt ... Bitte warten Sie." + +#: AppTools/ToolImage.py:24 +msgid "Image as Object" +msgstr "Bild als Objekt" + +#: AppTools/ToolImage.py:33 +msgid "Image to PCB" +msgstr "Bild auf PCB" + +#: AppTools/ToolImage.py:56 +msgid "" +"Specify the type of object to create from the image.\n" +"It can be of type: Gerber or Geometry." +msgstr "" +"Geben Sie den Objekttyp an, der aus dem Bild erstellt werden soll.\n" +"Es kann vom Typ sein: Gerber oder Geometrie." + +#: AppTools/ToolImage.py:65 +msgid "DPI value" +msgstr "DPI-Wert" + +#: AppTools/ToolImage.py:66 +msgid "Specify a DPI value for the image." +msgstr "Geben Sie einen DPI-Wert für das Bild an." + +#: AppTools/ToolImage.py:72 +msgid "Level of detail" +msgstr "Detaillierungsgrad" + +#: AppTools/ToolImage.py:81 +msgid "Image type" +msgstr "Bildtyp" + +#: AppTools/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 "" +"Wählen Sie eine Methode für die Bildinterpretation.\n" +"B / W steht für ein Schwarzweißbild. Farbe bedeutet ein farbiges Bild." + +#: AppTools/ToolImage.py:92 AppTools/ToolImage.py:107 AppTools/ToolImage.py:120 +#: AppTools/ToolImage.py:133 +msgid "Mask value" +msgstr "Maskenwert" + +#: AppTools/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 "" +"Maske für ein Schwarzweißbild.\n" +"Nimmt Werte zwischen [0 ... 255] an.\n" +"Legt fest, wie viel Details enthalten sind\n" +"in der resultierenden Geometrie.\n" +"0 bedeutet kein Detail und 255 bedeutet alles\n" +"(das ist total schwarz)." + +#: AppTools/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 "" +"Maske für rote Farbe.\n" +"Nimmt Werte zwischen [0 ... 255] an.\n" +"Legt fest, wie viel Details enthalten sind\n" +"in der resultierenden Geometrie." + +#: AppTools/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 "" +"Maske für GRÜNE Farbe.\n" +"Nimmt Werte zwischen [0 ... 255] an.\n" +"Legt fest, wie viel Details enthalten sind\n" +"in der resultierenden Geometrie." + +#: AppTools/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 "" +"Maske für BLAUE Farbe.\n" +"Nimmt Werte zwischen [0 ... 255] an.\n" +"Legt fest, wie viel Details enthalten sind\n" +"in der resultierenden Geometrie." + +#: AppTools/ToolImage.py:143 +msgid "Import image" +msgstr "Bild importieren" + +#: AppTools/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." + +#: AppTools/ToolImage.py:182 +msgid "Image Tool" +msgstr "Bildwerkzeug" + +#: AppTools/ToolImage.py:234 AppTools/ToolImage.py:237 +msgid "Import IMAGE" +msgstr "BILD importieren" + +#: AppTools/ToolImage.py:277 App_Main.py:8514 App_Main.py:8561 +msgid "" +"Not supported type is picked as parameter. Only Geometry and Gerber are " +"supported" +msgstr "" +"Nicht unterstützte Art wird als Parameter ausgewählt. Nur Geometrie und " +"Gerber werden unterstützt" + +#: AppTools/ToolImage.py:285 +msgid "Importing Image" +msgstr "Bild importieren" + +#: AppTools/ToolImage.py:297 AppTools/ToolPDF.py:154 App_Main.py:8539 +#: App_Main.py:8585 App_Main.py:8649 App_Main.py:8716 App_Main.py:8782 +#: App_Main.py:8847 App_Main.py:8904 +msgid "Opened" +msgstr "Geöffnet" + +#: AppTools/ToolInvertGerber.py:74 +msgid "Gerber object that will be inverted." +msgstr "Gerber-Objekt, das invertiert wird." + +#: AppTools/ToolInvertGerber.py:83 +msgid "Parameters for this tool" +msgstr "Parameter für dieses Werkzeug" + +#: AppTools/ToolInvertGerber.py:123 +msgid "Invert Gerber" +msgstr "Gerber umkehren" + +#: AppTools/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." + +#: AppTools/ToolInvertGerber.py:184 +msgid "Invert Tool" +msgstr "Invertiert Werkzeug" + +#: AppTools/ToolMove.py:102 +msgid "MOVE: Click on the Start point ..." +msgstr "Verschieben: Klicke auf den Startpunkt ..." + +#: AppTools/ToolMove.py:113 +msgid "Cancelled. No object(s) to move." +msgstr "Abgebrochen. Keine Objekte zum Bewegen." + +#: AppTools/ToolMove.py:140 +msgid "MOVE: Click on the Destination point ..." +msgstr "Verschieben: Klicken Sie auf den Zielpunkt ..." + +#: AppTools/ToolMove.py:163 +msgid "Moving..." +msgstr "Ziehen um..." + +#: AppTools/ToolMove.py:166 +msgid "No object(s) selected." +msgstr "Keine Objekte ausgewählt." + +#: AppTools/ToolMove.py:221 +msgid "Error when mouse left click." +msgstr "Fehler beim Klicken mit der linken Maustaste." + +#: AppTools/ToolNCC.py:42 +msgid "Non-Copper Clearing" +msgstr "Nicht-Kupfer-Clearing" + +#: AppTools/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 "" +"Geben Sie den Objekttyp an, der von überschüssigem Kupfer befreit werden " +"soll.\n" +"Es kann vom Typ Gerber oder Geometrie sein.\n" +"Was hier ausgewählt wird, bestimmt die Art\n" +"von Objekten, die das Kombinationsfeld \"Objekt\" füllen." + +#: AppTools/ToolNCC.py:110 +msgid "Object to be cleared of excess copper." +msgstr "Objekt, das von überschüssigem Kupfer befreit werden soll." + +#: AppTools/ToolNCC.py:122 +msgid "" +"Tools pool from which the algorithm\n" +"will pick the ones used for copper clearing." +msgstr "" +"Toolspool aus dem der Algorithmus\n" +"wählt die für die Kupferreinigung verwendeten aus." + +#: AppTools/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 "" +"Dies ist die Werkzeugnummer.\n" +"Das Nicht-Kupfer-Clearing beginnt mit dem Werkzeug mit dem größten\n" +"Durchmesser, weiter, bis keine Werkzeuge mehr vorhanden sind.\n" +"Es sind nur noch Werkzeuge vorhanden, die eine NCC-Clearing-Geometrie " +"erstellen\n" +"in der resultierenden Geometrie. Dies liegt daran, dass mit einigen Tools\n" +"Diese Funktion kann keine Malgeometrie erstellen." + +#: AppTools/ToolNCC.py:146 +msgid "" +"Tool Diameter. It's value (in current FlatCAM units)\n" +"is the cut width into the material." +msgstr "" +"Werkzeugdurchmesser. Wert (in aktuellen FlatCAM-Einheiten)\n" +"ist die Schnittbreite in das Material." + +#: AppTools/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 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 "" +"Der Werkzeugtyp (TT) kann sein:\n" +"- Rundschreiben mit 1 ... 4 Zähnen -> nur informativ. Rundschreiben,\n" +"Die Schnittbreite im Material entspricht genau dem Werkzeugdurchmesser.\n" +"- Ball -> nur informativ und auf den Ball-Schaftfräser verweisen.\n" +"- V-Form -> Deaktiviert den Z-Cut-Parameter in der resultierenden Geometrie-" +"UI-Form\n" +"und aktivieren Sie zwei zusätzliche UI-Formularfelder in der resultierenden " +"Geometrie: V-Tip Dia und\n" +"V-Tip-Winkel. Durch Anpassen dieser beiden Werte wird der Z-Cut-Parameter " +"wie z\n" +"da die Schnittbreite in Material gleich dem Wert im Werkzeugdurchmesser ist\n" +"Spalte dieser Tabelle.\n" +"Durch automatische Auswahl des Werkzeugtyps \"V-Form\" wird der " +"Operationstyp ausgewählt\n" +"in der resultierenden Geometrie als Isolation." + +#: AppTools/ToolNCC.py:296 AppTools/ToolPaint.py:278 +msgid "" +"Add a new tool to the Tool Table\n" +"with the diameter specified above." +msgstr "" +"Fügen Sie der Werkzeugtabelle ein neues Werkzeug hinzu\n" +"mit dem oben angegebenen Durchmesser." + +#: AppTools/ToolNCC.py:318 AppTools/ToolPaint.py:300 +#: AppTools/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 "" +"Löschen Sie eine Auswahl von Werkzeugen in der Werkzeugtabelle\n" +"indem Sie zuerst eine oder mehrere Zeilen in der Werkzeugtabelle auswählen." + +#: AppTools/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 "" +"Der Typ des FlatCAM-Objekts, das als nicht aus Kupfer stammende Clearing-" +"Referenz verwendet werden soll.\n" +"Es kann Gerber, Excellon oder Geometry sein." + +#: AppTools/ToolNCC.py:597 AppTools/ToolPaint.py:536 +msgid "Generate Geometry" +msgstr "Geometrie erzeugen" + +#: AppTools/ToolNCC.py:932 AppTools/ToolNCC.py:1431 AppTools/ToolPaint.py:857 +#: AppTools/ToolSolderPaste.py:568 AppTools/ToolSolderPaste.py:893 +#: App_Main.py:4440 +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." + +#: AppTools/ToolNCC.py:936 AppTools/ToolPaint.py:861 +#: AppTools/ToolSolderPaste.py:572 App_Main.py:4444 +msgid "Adding Tool cancelled" +msgstr "Addierwerkzeug abgebrochen" + +#: AppTools/ToolNCC.py:1425 AppTools/ToolPaint.py:1183 +#: AppTools/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." + +#: AppTools/ToolNCC.py:1456 AppTools/ToolNCC.py:4065 AppTools/ToolPaint.py:1207 +#: AppTools/ToolPaint.py:3608 AppTools/ToolSolderPaste.py:917 +msgid "Cancelled. Tool already in Tool Table." +msgstr "Abgebrochen. Werkzeug bereits in der Werkzeugtabelle." + +#: AppTools/ToolNCC.py:1463 AppTools/ToolNCC.py:4082 AppTools/ToolPaint.py:1212 +#: AppTools/ToolPaint.py:3625 +msgid "New tool added to Tool Table." +msgstr "Neues Werkzeug zur Werkzeugtabelle hinzugefügt." + +#: AppTools/ToolNCC.py:1507 AppTools/ToolPaint.py:1256 +msgid "Tool from Tool Table was edited." +msgstr "Werkzeug aus Werkzeugtabelle wurde bearbeitet." + +#: AppTools/ToolNCC.py:1519 AppTools/ToolPaint.py:1268 +#: AppTools/ToolSolderPaste.py:978 +msgid "Cancelled. New diameter value is already in the Tool Table." +msgstr "" +"Abgebrochen. Der neue Durchmesserwert befindet sich bereits in der " +"Werkzeugtabelle." + +#: AppTools/ToolNCC.py:1571 AppTools/ToolPaint.py:1366 +msgid "Delete failed. Select a tool to delete." +msgstr "Löschen fehlgeschlagen. Wählen Sie ein Werkzeug zum Löschen aus." + +#: AppTools/ToolNCC.py:1577 AppTools/ToolPaint.py:1372 +msgid "Tool(s) deleted from Tool Table." +msgstr "Werkzeug(e) aus der Werkzeugtabelle gelöscht." + +#: AppTools/ToolNCC.py:1620 +msgid "Wrong Tool Dia value format entered, use a number." +msgstr "Falsches Werkzeug Dia-Wertformat eingegeben, verwenden Sie eine Zahl." + +#: AppTools/ToolNCC.py:1629 AppTools/ToolPaint.py:1423 +msgid "No selected tools in Tool Table." +msgstr "Keine ausgewählten Werkzeuge in der Werkzeugtabelle." + +#: AppTools/ToolNCC.py:1705 AppTools/ToolPaint.py:1599 +msgid "Click the end point of the paint area." +msgstr "Klicken Sie auf den Endpunkt des Malbereichs." + +#: AppTools/ToolNCC.py:1985 AppTools/ToolNCC.py:3010 +msgid "NCC Tool. Preparing non-copper polygons." +msgstr "NCC-Tool. Vorbereitung von kupferfreien Polygonen." + +#: AppTools/ToolNCC.py:2044 AppTools/ToolNCC.py:3138 +msgid "NCC Tool. Calculate 'empty' area." +msgstr "NCC-Tool. Berechnen Sie die \"leere\" Fläche." + +#: AppTools/ToolNCC.py:2063 AppTools/ToolNCC.py:2172 AppTools/ToolNCC.py:2187 +#: AppTools/ToolNCC.py:3151 AppTools/ToolNCC.py:3256 AppTools/ToolNCC.py:3271 +#: AppTools/ToolNCC.py:3537 AppTools/ToolNCC.py:3638 AppTools/ToolNCC.py:3653 +msgid "Buffering finished" +msgstr "Pufferung beendet" + +#: AppTools/ToolNCC.py:2071 AppTools/ToolNCC.py:2194 AppTools/ToolNCC.py:3159 +#: AppTools/ToolNCC.py:3278 AppTools/ToolNCC.py:3544 AppTools/ToolNCC.py:3660 +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." + +#: AppTools/ToolNCC.py:2101 AppTools/ToolNCC.py:2180 AppTools/ToolNCC.py:3186 +#: AppTools/ToolNCC.py:3263 AppTools/ToolNCC.py:3564 AppTools/ToolNCC.py:3645 +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." + +#: AppTools/ToolNCC.py:2197 AppTools/ToolNCC.py:3282 AppTools/ToolNCC.py:3663 +msgid "The selected object is not suitable for copper clearing." +msgstr "Das ausgewählte Objekt ist nicht zum Löschen von Kupfer geeignet." + +#: AppTools/ToolNCC.py:2204 AppTools/ToolNCC.py:3289 +msgid "NCC Tool. Finished calculation of 'empty' area." +msgstr "NCC-Tool. Berechnung der 'leeren' Fläche beendet." + +#: AppTools/ToolNCC.py:2247 +#, fuzzy +#| msgid "Painting polygon with method: lines." +msgid "Clearing polygon with method: lines." +msgstr "Polygon mit Methode malen: Linien." + +#: AppTools/ToolNCC.py:2257 +#, fuzzy +#| msgid "Failed. Painting polygon with method: seed." +msgid "Failed. Clearing polygon with method: seed." +msgstr "Gescheitert. Polygon mit Methode malen: Same." + +#: AppTools/ToolNCC.py:2266 +#, fuzzy +#| msgid "Failed. Painting polygon with method: standard." +msgid "Failed. Clearing polygon with method: standard." +msgstr "Gescheitert. Polygon mit Methode malen: Standard." + +#: AppTools/ToolNCC.py:2280 +#, fuzzy +#| msgid "Geometry could not be painted completely" +msgid "Geometry could not be cleared completely" +msgstr "Geometrie konnte nicht vollständig gemalt werden" + +#: AppTools/ToolNCC.py:2305 AppTools/ToolNCC.py:2307 AppTools/ToolNCC.py:2962 +#: AppTools/ToolNCC.py:2964 +msgid "Non-Copper clearing ..." +msgstr "Nicht-Kupfer-Clearing ..." + +#: AppTools/ToolNCC.py:2354 AppTools/ToolNCC.py:3106 +msgid "" +"NCC Tool. Finished non-copper polygons. Normal copper clearing task started." +msgstr "" +"NCC-Tool. Fertige kupferfreie Polygone. Normale Kupferentfernungsaufgabe " +"gestartet." + +#: AppTools/ToolNCC.py:2390 AppTools/ToolNCC.py:2638 +msgid "NCC Tool failed creating bounding box." +msgstr "Das NCC-Tool konnte keinen Begrenzungsrahmen erstellen." + +#: AppTools/ToolNCC.py:2405 AppTools/ToolNCC.py:2655 AppTools/ToolNCC.py:3302 +#: AppTools/ToolNCC.py:3688 +msgid "NCC Tool clearing with tool diameter" +msgstr "Das NCC-Werkzeug wird mit dem Werkzeugdurchmesser gelöscht" + +#: AppTools/ToolNCC.py:2405 AppTools/ToolNCC.py:2655 AppTools/ToolNCC.py:3302 +#: AppTools/ToolNCC.py:3688 +msgid "started." +msgstr "gestartet." + +#: AppTools/ToolNCC.py:2563 AppTools/ToolNCC.py:3463 +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 "" +"Die Datei enthält keine NCC-Geometrie.\n" +"In der Regel bedeutet dies, dass der Werkzeugdurchmesser für die lackierte " +"Geometrie zu groß ist.\n" +"Ändern Sie die Malparameter und versuchen Sie es erneut." + +#: AppTools/ToolNCC.py:2572 AppTools/ToolNCC.py:3472 +msgid "NCC Tool clear all done." +msgstr "NCC Tool löschen alles erledigt." + +#: AppTools/ToolNCC.py:2575 AppTools/ToolNCC.py:3475 +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" + +#: AppTools/ToolNCC.py:2577 AppTools/ToolNCC.py:2863 AppTools/ToolNCC.py:3477 +#: AppTools/ToolNCC.py:3860 +msgid "tools" +msgstr "Werkzeuge" + +#: AppTools/ToolNCC.py:2859 AppTools/ToolNCC.py:3856 +msgid "NCC Tool Rest Machining clear all done." +msgstr "Die Bearbeitung der NCC-Werkzeugablagen ist abgeschlossen." + +#: AppTools/ToolNCC.py:2862 AppTools/ToolNCC.py:3859 +msgid "" +"NCC Tool Rest Machining clear all done but the copper features isolation is " +"broken for" +msgstr "" +"Die Bearbeitung der NCC-Werkzeugablagen ist abgeschlossen, die Isolierung " +"der Kupferelemente ist jedoch unterbrochen" + +#: AppTools/ToolNCC.py:2974 +msgid "NCC Tool started. Reading parameters." +msgstr "NCC Tool gestartet. Parameter lesen." + +#: AppTools/ToolNCC.py:3958 +msgid "" +"Try to use the Buffering Type = Full in Preferences -> Gerber General. " +"Reload the Gerber file after this change." +msgstr "" +"Versuchen Sie, den Puffertyp = Voll in Einstellungen -> Allgemein zu " +"verwenden. Laden Sie die Gerber-Datei nach dieser Änderung neu." + +#: AppTools/ToolNCC.py:4022 AppTools/ToolPaint.py:3565 App_Main.py:5501 +msgid "Tool from DB added in Tool Table." +msgstr "Werkzeug aus Werkzeugdatenbank zur Werkzeugtabelle hinzugefügt." + +#: AppTools/ToolOptimal.py:79 +msgid "Number of decimals kept for found distances." +msgstr "Anzahl der Dezimalstellen für gefundene Entfernungen." + +#: AppTools/ToolOptimal.py:87 +msgid "Minimum distance" +msgstr "Mindestabstand" + +#: AppTools/ToolOptimal.py:88 +msgid "Display minimum distance between copper features." +msgstr "Zeigt den Mindestabstand zwischen Kupferelementen an." + +#: AppTools/ToolOptimal.py:92 +msgid "Determined" +msgstr "Entschlossen" + +#: AppTools/ToolOptimal.py:106 +msgid "Occurring" +msgstr "Vorkommen" + +#: AppTools/ToolOptimal.py:107 +msgid "How many times this minimum is found." +msgstr "Wie oft wird dieses Minimum gefunden." + +#: AppTools/ToolOptimal.py:113 +msgid "Minimum points coordinates" +msgstr "Minimale Punktkoordinaten" + +#: AppTools/ToolOptimal.py:114 AppTools/ToolOptimal.py:120 +msgid "Coordinates for points where minimum distance was found." +msgstr "Koordinaten für Punkte, an denen der Mindestabstand gefunden wurde." + +#: AppTools/ToolOptimal.py:133 AppTools/ToolOptimal.py:209 +msgid "Jump to selected position" +msgstr "Zur ausgewählten Position springen" + +#: AppTools/ToolOptimal.py:135 AppTools/ToolOptimal.py:211 +msgid "" +"Select a position in the Locations text box and then\n" +"click this button." +msgstr "" +"Wählen Sie eine Position im Textfeld Standorte und dann\n" +"Klicken Sie auf diese Schaltfläche." + +#: AppTools/ToolOptimal.py:143 +msgid "Other distances" +msgstr "Andere Entfernungen" + +#: AppTools/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 "" +"Zeigt andere Entfernungen in der von bestellten Gerber-Datei an\n" +"das Minimum bis zum Maximum, ohne das absolute Minimum." + +#: AppTools/ToolOptimal.py:149 +msgid "Other distances points coordinates" +msgstr "Andere Entfernungen Punkte Koordinaten" + +#: AppTools/ToolOptimal.py:150 AppTools/ToolOptimal.py:164 +#: AppTools/ToolOptimal.py:171 AppTools/ToolOptimal.py:188 +#: AppTools/ToolOptimal.py:195 +msgid "" +"Other distances and the coordinates for points\n" +"where the distance was found." +msgstr "" +"Andere Entfernungen und die Koordinaten für Punkte\n" +"wo die Entfernung gefunden wurde." + +#: AppTools/ToolOptimal.py:163 +msgid "Gerber distances" +msgstr "Gerber Entfernungen" + +#: AppTools/ToolOptimal.py:187 +msgid "Points coordinates" +msgstr "Punktkoordinaten" + +#: AppTools/ToolOptimal.py:219 +msgid "Find Minimum" +msgstr "Minimum finden" + +#: AppTools/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 "" +"Berechnen Sie den Mindestabstand zwischen Kupferelementen.\n" +"Dies ermöglicht die Bestimmung des richtigen Werkzeugs\n" +"Verwendung zur Isolierung oder zum Löschen von Kupfer." + +#: AppTools/ToolOptimal.py:346 +msgid "Only Gerber objects can be evaluated." +msgstr "Es können nur Gerber-Objekte ausgewertet werden." + +#: AppTools/ToolOptimal.py:352 +msgid "" +"Optimal Tool. Started to search for the minimum distance between copper " +"features." +msgstr "Optimierer. Sucht Minimalabstand zwischen Kupferbereichen." + +#: AppTools/ToolOptimal.py:362 +msgid "Optimal Tool. Parsing geometry for aperture" +msgstr "Optimales Werkzeug. Analysegeometrie für Blende" + +#: AppTools/ToolOptimal.py:373 +msgid "Optimal Tool. Creating a buffer for the object geometry." +msgstr "Optimales Werkzeug. Erstellen eines Puffers für die Objektgeometrie." + +#: AppTools/ToolOptimal.py:383 +msgid "" +"The Gerber object has one Polygon as geometry.\n" +"There are no distances between geometry elements to be found." +msgstr "" +"Das Gerber-Objekt hat ein Polygon als Geometrie.\n" +"Es sind keine Abstände zwischen Geometrieelementen zu finden." + +#: AppTools/ToolOptimal.py:388 +msgid "" +"Optimal Tool. Finding the distances between each two elements. Iterations" +msgstr "" +"Optimales Werkzeug. Finden der Abstände zwischen jeweils zwei Elementen. " +"Iterationen" + +#: AppTools/ToolOptimal.py:423 +msgid "Optimal Tool. Finding the minimum distance." +msgstr "Optimales Werkzeug. Den Mindestabstand finden." + +#: AppTools/ToolOptimal.py:439 +msgid "Optimal Tool. Finished successfully." +msgstr "Optimales Werkzeug. Erfolgreich beendet." + +#: AppTools/ToolPDF.py:91 AppTools/ToolPDF.py:95 +msgid "Open PDF" +msgstr "PDF öffnen" + +#: AppTools/ToolPDF.py:98 +msgid "Open PDF cancelled" +msgstr "PDF öffnen abgebrochen" + +#: AppTools/ToolPDF.py:122 +msgid "Parsing PDF file ..." +msgstr "PDF-Datei wird analysiert ..." + +#: AppTools/ToolPDF.py:138 App_Main.py:8747 +msgid "Failed to open" +msgstr "Gescheitert zu öffnen" + +#: AppTools/ToolPDF.py:203 AppTools/ToolPcbWizard.py:445 App_Main.py:8696 +msgid "No geometry found in file" +msgstr "Keine Geometrie in der Datei gefunden" + +#: AppTools/ToolPDF.py:206 AppTools/ToolPDF.py:279 +#, python-format +msgid "Rendering PDF layer #%d ..." +msgstr "PDF-Ebene rendern #%d ..." + +#: AppTools/ToolPDF.py:210 AppTools/ToolPDF.py:283 +msgid "Open PDF file failed." +msgstr "Öffnen der PDF-Datei fehlgeschlagen." + +#: AppTools/ToolPDF.py:215 AppTools/ToolPDF.py:288 +msgid "Rendered" +msgstr "Gerendert" + +#: AppTools/ToolPaint.py:81 +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 "" +"Geben Sie den Objekttyp an, der gemalt werden soll.\n" +"Es kann vom Typ Gerber oder Geometrie sein.\n" +"Was hier ausgewählt wird, bestimmt die Art\n" +"von Objekten, die das Kombinationsfeld \"Objekt\" füllen." + +#: AppTools/ToolPaint.py:103 +msgid "Object to be painted." +msgstr "Gegenstand gemalt werden." + +#: AppTools/ToolPaint.py:116 +msgid "" +"Tools pool from which the algorithm\n" +"will pick the ones used for painting." +msgstr "" +"Toolspool aus dem der Algorithmus\n" +"wählt die zum Malen verwendeten aus." + +#: AppTools/ToolPaint.py:133 +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 "" +"Dies ist die Werkzeugnummer.\n" +"Das Malen beginnt mit dem Werkzeug mit dem größten Durchmesser.\n" +"fortsetzen, bis es keine Werkzeuge mehr gibt.\n" +"Es sind nur noch Werkzeuge vorhanden, die eine Malgeometrie erstellen\n" +"in der resultierenden Geometrie. Dies liegt daran, dass mit einigen Tools\n" +"Diese Funktion kann keine Malgeometrie erstellen." + +#: AppTools/ToolPaint.py:145 +msgid "" +"The Tool Type (TT) can be:\n" +"- Circular -> 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 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 "" +"Der Werkzeugtyp (TT) kann sein:\n" +"- Rundschreiben mit 1 ... 4 Zähnen -> nur informativ. Rundschreiben,\n" +"Die Schnittbreite im Material entspricht genau dem Werkzeugdurchmesser.\n" +"- Ball -> nur informativ und auf den Ball-Schaftfräser verweisen.\n" +"- V-Form -> Deaktiviert den Z-Cut-Parameter in der resultierenden Geometrie-" +"UI-Form\n" +"und aktivieren Sie zwei zusätzliche UI-Formularfelder in der resultierenden " +"Geometrie: V-Tip Dia und\n" +"V-Tip-Winkel. Durch Anpassen dieser beiden Werte wird der Z-Cut-Parameter " +"wie z\n" +"da die Schnittbreite in Material gleich dem Wert im Werkzeugdurchmesser ist\n" +"Spalte dieser Tabelle.\n" +"Durch automatische Auswahl des Werkzeugtyps \"V-Form\" wird der " +"Operationstyp ausgewählt\n" +"in der resultierenden Geometrie als Isolation." + +#: AppTools/ToolPaint.py:497 +msgid "" +"The type of FlatCAM object to be used as paint reference.\n" +"It can be Gerber, Excellon or Geometry." +msgstr "" +"Der Typ des FlatCAM-Objekts, das als Malreferenz verwendet werden soll.\n" +"Es kann Gerber, Excellon oder Geometry sein." + +#: AppTools/ToolPaint.py:538 +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 "" +"- '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" +"- '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." + +#: AppTools/ToolPaint.py:1392 +#, python-format +msgid "Could not retrieve object: %s" +msgstr "Objekt konnte nicht abgerufen werden: %s" + +#: AppTools/ToolPaint.py:1402 +msgid "Can't do Paint on MultiGeo geometries" +msgstr "Auf MultiGeo-Geometrien kann nicht gemalt werden" + +#: AppTools/ToolPaint.py:1432 +msgid "Click on a polygon to paint it." +msgstr "Klicken Sie auf ein Polygon um es auszufüllen." + +#: AppTools/ToolPaint.py:1452 +msgid "Click the start point of the paint area." +msgstr "Klicken Sie auf den Startpunkt des Malbereichs." + +#: AppTools/ToolPaint.py:1517 +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." + +#: AppTools/ToolPaint.py:1530 +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." + +#: AppTools/ToolPaint.py:2034 +msgid "Painting polygon with method: lines." +msgstr "Polygon mit Methode malen: Linien." + +#: AppTools/ToolPaint.py:2046 +msgid "Failed. Painting polygon with method: seed." +msgstr "Gescheitert. Polygon mit Methode malen: Same." + +#: AppTools/ToolPaint.py:2057 +msgid "Failed. Painting polygon with method: standard." +msgstr "Gescheitert. Polygon mit Methode malen: Standard." + +#: AppTools/ToolPaint.py:2073 +msgid "Geometry could not be painted completely" +msgstr "Geometrie konnte nicht vollständig gemalt werden" + +#: AppTools/ToolPaint.py:2102 AppTools/ToolPaint.py:2105 +#: AppTools/ToolPaint.py:2113 AppTools/ToolPaint.py:2416 +#: AppTools/ToolPaint.py:2419 AppTools/ToolPaint.py:2427 +#: AppTools/ToolPaint.py:2915 AppTools/ToolPaint.py:2918 +#: AppTools/ToolPaint.py:2924 +msgid "Paint Tool." +msgstr "Malwerkzeug." + +#: AppTools/ToolPaint.py:2102 AppTools/ToolPaint.py:2105 +#: AppTools/ToolPaint.py:2113 +msgid "Normal painting polygon task started." +msgstr "Normale Zeichenpolygonaufgabe gestartet." + +#: AppTools/ToolPaint.py:2103 AppTools/ToolPaint.py:2417 +#: AppTools/ToolPaint.py:2916 +msgid "Buffering geometry..." +msgstr "Geometrie puffern..." + +#: AppTools/ToolPaint.py:2125 AppTools/ToolPaint.py:2434 +#: AppTools/ToolPaint.py:2932 +msgid "No polygon found." +msgstr "Kein Polygon gefunden." + +#: AppTools/ToolPaint.py:2155 +msgid "Painting polygon..." +msgstr "Polygon malen ..." + +#: AppTools/ToolPaint.py:2165 AppTools/ToolPaint.py:2480 +#: AppTools/ToolPaint.py:2670 AppTools/ToolPaint.py:2978 +#: AppTools/ToolPaint.py:3157 +msgid "Painting with tool diameter = " +msgstr "Lackieren mit Werkzeugdurchmesser = " + +#: AppTools/ToolPaint.py:2166 AppTools/ToolPaint.py:2481 +#: AppTools/ToolPaint.py:2671 AppTools/ToolPaint.py:2979 +#: AppTools/ToolPaint.py:3158 +msgid "started" +msgstr "gestartet" + +#: AppTools/ToolPaint.py:2191 AppTools/ToolPaint.py:2507 +#: AppTools/ToolPaint.py:2697 AppTools/ToolPaint.py:3005 +#: AppTools/ToolPaint.py:3184 +msgid "Margin parameter too big. Tool is not used" +msgstr "Randparameter zu groß. Werkzeug wird nicht verwendet" + +#: AppTools/ToolPaint.py:2249 AppTools/ToolPaint.py:2576 +#: AppTools/ToolPaint.py:2754 AppTools/ToolPaint.py:3068 +#: AppTools/ToolPaint.py:3246 +msgid "" +"Could not do Paint. Try a different combination of parameters. Or a " +"different strategy of paint" +msgstr "" +"Konnte nicht malen. Probieren Sie eine andere Kombination von Parametern " +"aus. Oder eine andere Strategie der Farbe" + +#: AppTools/ToolPaint.py:2306 AppTools/ToolPaint.py:2642 +#: AppTools/ToolPaint.py:2811 AppTools/ToolPaint.py:3129 +#: AppTools/ToolPaint.py:3308 +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 "" +"Die Datei enthält keine Malgeometrie.\n" +"Normalerweise bedeutet dies, dass der Werkzeugdurchmesser für die lackierte " +"Geometrie zu groß ist.\n" +"Ändern Sie die Malparameter und versuchen Sie es erneut." + +#: AppTools/ToolPaint.py:2329 +msgid "Paint Single failed." +msgstr "Das Malen eines einzelnen Polygons ist fehlgeschlagen." + +#: AppTools/ToolPaint.py:2335 +msgid "Paint Single Done." +msgstr "Malen Sie Single Done." + +#: AppTools/ToolPaint.py:2337 AppTools/ToolPaint.py:2847 +#: AppTools/ToolPaint.py:3344 +msgid "Polygon Paint started ..." +msgstr "Polygonfarbe gestartet ..." + +#: AppTools/ToolPaint.py:2416 AppTools/ToolPaint.py:2419 +#: AppTools/ToolPaint.py:2427 +msgid "Paint all polygons task started." +msgstr "Malen Sie alle Polygone Aufgabe gestartet." + +#: AppTools/ToolPaint.py:2458 AppTools/ToolPaint.py:2956 +msgid "Painting polygons..." +msgstr "Polygone malen ..." + +#: AppTools/ToolPaint.py:2651 +msgid "Paint All Done." +msgstr "Malen Sie alles fertig." + +#: AppTools/ToolPaint.py:2820 AppTools/ToolPaint.py:3317 +msgid "Paint All with Rest-Machining done." +msgstr "Malen Sie alles mit Restbearbeitung." + +#: AppTools/ToolPaint.py:2839 +msgid "Paint All failed." +msgstr "Malen Alle Polygone sind fehlgeschlagen." + +#: AppTools/ToolPaint.py:2845 +msgid "Paint Poly All Done." +msgstr "Malen Sie alle Polygone fertig." + +#: AppTools/ToolPaint.py:2915 AppTools/ToolPaint.py:2918 +#: AppTools/ToolPaint.py:2924 +msgid "Painting area task started." +msgstr "Malbereichsaufgabe gestartet." + +#: AppTools/ToolPaint.py:3138 +msgid "Paint Area Done." +msgstr "Lackierbereich fertig." + +#: AppTools/ToolPaint.py:3336 +msgid "Paint Area failed." +msgstr "Lackierbereich fehlgeschlagen." + +#: AppTools/ToolPaint.py:3342 +msgid "Paint Poly Area Done." +msgstr "Lackierbereich fertig." + +#: AppTools/ToolPanelize.py:35 +msgid "Panelize PCB" +msgstr "Panelisierung PCB" + +#: AppTools/ToolPanelize.py:55 +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 "" +"Geben Sie den Typ des Objekts an, für das ein Panel erstellt werden soll\n" +"Es kann vom Typ sein: Gerber, Excellon oder Geometrie.\n" +"Die Auswahl hier bestimmt den Objekttyp\n" +"im Objekt-Kombinationsfeld." + +#: AppTools/ToolPanelize.py:88 +msgid "" +"Object to be panelized. This means that it will\n" +"be duplicated in an array of rows and columns." +msgstr "" +"Objekt, das in Panels gesetzt werden soll. Dies bedeutet, dass es wird\n" +"in einem Array von Zeilen und Spalten dupliziert werden." + +#: AppTools/ToolPanelize.py:100 +msgid "Penelization Reference" +msgstr "Penelisierungshinweis" + +#: AppTools/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 "" +"Wählen Sie die Referenz für die Panelisierung:\n" +"- Objekt = der Begrenzungsrahmen eines anderen Objekts\n" +"- Begrenzungsrahmen = Der Begrenzungsrahmen des zu verkleidenden Objekts\n" +"\n" +"Diese Referenz ist nützlich, wenn Sie Panels für mehr als einen erstellen\n" +"Objekt. Die Abstände (wirklich Versätze) werden als Referenz angewendet\n" +"Zu diesem Referenzobjekt gehört daher die Beibehaltung der getäfelten\n" +"Objekte synchronisieren." + +#: AppTools/ToolPanelize.py:123 +msgid "Box Type" +msgstr "Box-Typ" + +#: AppTools/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 "" +"Geben Sie den Objekttyp an, für den ein Container verwendet werden soll\n" +"Panelisierung. Es kann sein: Gerber oder Geometrietyp.\n" +"Die Auswahl hier bestimmt den Objekttyp\n" +"im Kombinationsfeld Box-Objekt." + +#: AppTools/ToolPanelize.py:139 +msgid "" +"The actual object that is used as container for the\n" +" selected object that is to be panelized." +msgstr "" +"Das eigentliche Objekt, für das ein Container verwendet wird\n" +"ausgewähltes Objekt, das in Panelisiert werden soll." + +#: AppTools/ToolPanelize.py:149 +msgid "Panel Data" +msgstr "Paneldaten" + +#: AppTools/ToolPanelize.py:151 +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 "" +"Diese Informationen formen das resultierende Panel.\n" +"Die Anzahl der Zeilen und Spalten legt fest, wie viele\n" +"Duplikate der ursprünglichen Geometrie werden generiert.\n" +"\n" +"Die Abstände bestimmen den Abstand zwischen zwei Elementen\n" +"Elemente des Panel-Arrays." + +#: AppTools/ToolPanelize.py:214 +msgid "" +"Choose the type of object for the panel object:\n" +"- Geometry\n" +"- Gerber" +msgstr "" +"Wählen Sie den Objekttyp für das Panel-Objekt:\n" +"- Geometrie\n" +"- Gerber" + +#: AppTools/ToolPanelize.py:222 +msgid "Constrain panel within" +msgstr "Panel einschränken innerhalb" + +#: AppTools/ToolPanelize.py:263 +msgid "Panelize Object" +msgstr "Panelize Objekt" + +#: AppTools/ToolPanelize.py:265 AppTools/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 "" +"Das angegebene Objekt um das angegebene Feld einteilen.\n" +"Mit anderen Worten, es erstellt mehrere Kopien des Quellobjekts,\n" +"in einem 2D-Array von Zeilen und Spalten angeordnet." + +#: AppTools/ToolPanelize.py:333 +msgid "Panel. Tool" +msgstr "Platte Werkzeug" + +#: AppTools/ToolPanelize.py:468 +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." + +#: AppTools/ToolPanelize.py:505 +msgid "Generating panel ... " +msgstr "Panel wird erstellt ... " + +#: AppTools/ToolPanelize.py:788 +msgid "Generating panel ... Adding the Gerber code." +msgstr "Panel wird generiert ... Hinzufügen des Gerber-Codes." + +#: AppTools/ToolPanelize.py:796 +msgid "Generating panel... Spawning copies" +msgstr "Panel wird erstellt ... Kopien werden erstellt" + +#: AppTools/ToolPanelize.py:803 +msgid "Panel done..." +msgstr "Panel fertig ..." + +#: AppTools/ToolPanelize.py:806 +#, python-brace-format +msgid "" +"{text} Too big for the constrain area. Final panel has {col} columns and " +"{row} rows" +msgstr "" +"{text} Zu groß für den Einschränkungsbereich. Das letzte Panel enthält {col} " +"Spalten und {row} Zeilen" + +#: AppTools/ToolPanelize.py:815 +msgid "Panel created successfully." +msgstr "Panel erfolgreich erstellt." + +#: AppTools/ToolPcbWizard.py:31 +msgid "PcbWizard Import Tool" +msgstr "PCBWizard Werkzeug importieren" + +#: AppTools/ToolPcbWizard.py:40 +msgid "Import 2-file Excellon" +msgstr "Importieren Sie 2-Datei-Excellon" + +#: AppTools/ToolPcbWizard.py:51 +msgid "Load files" +msgstr "Dateien laden" + +#: AppTools/ToolPcbWizard.py:57 +msgid "Excellon file" +msgstr "Excellon-Datei" + +#: AppTools/ToolPcbWizard.py:59 +msgid "" +"Load the Excellon file.\n" +"Usually it has a .DRL extension" +msgstr "" +"Laden Sie die Excellon-Datei.\n" +"Normalerweise hat es die Erweiterung .DRL" + +#: AppTools/ToolPcbWizard.py:65 +msgid "INF file" +msgstr "INF-Datei" + +#: AppTools/ToolPcbWizard.py:67 +msgid "Load the INF file." +msgstr "Laden Sie die INF-Datei." + +#: AppTools/ToolPcbWizard.py:79 +msgid "Tool Number" +msgstr "Werkzeugnummer" + +#: AppTools/ToolPcbWizard.py:81 +msgid "Tool diameter in file units." +msgstr "Werkzeugdurchmesser in Feileneinheiten." + +#: AppTools/ToolPcbWizard.py:87 +msgid "Excellon format" +msgstr "Excellon format" + +#: AppTools/ToolPcbWizard.py:95 +msgid "Int. digits" +msgstr "Ganzzahlige Ziffern" + +#: AppTools/ToolPcbWizard.py:97 +msgid "The number of digits for the integral part of the coordinates." +msgstr "Die Anzahl der Ziffern für den integralen Teil der Koordinaten." + +#: AppTools/ToolPcbWizard.py:104 +msgid "Frac. digits" +msgstr "Nachkommastellen" + +#: AppTools/ToolPcbWizard.py:106 +msgid "The number of digits for the fractional part of the coordinates." +msgstr "Die Anzahl der Stellen für den gebrochenen Teil der Koordinaten." + +#: AppTools/ToolPcbWizard.py:113 +msgid "No Suppression" +msgstr "Keine Unterdrück" + +#: AppTools/ToolPcbWizard.py:114 +msgid "Zeros supp." +msgstr "Nullunterdrück." + +#: AppTools/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 "" +"Die Art der Unterdrückung von Nullen.\n" +"Kann vom Typ sein:\n" +"- LZ = führende Nullen werden beibehalten\n" +"- TZ = nachfolgende Nullen bleiben erhalten\n" +"- Keine Unterdrückung = keine Nullunterdrückung" + +#: AppTools/ToolPcbWizard.py:129 +msgid "" +"The type of units that the coordinates and tool\n" +"diameters are using. Can be INCH or MM." +msgstr "" +"Die Art der Einheiten, die die Koordinaten und das Werkzeug haben\n" +"Durchmesser verwenden. Kann INCH oder MM sein." + +#: AppTools/ToolPcbWizard.py:136 +msgid "Import Excellon" +msgstr "Excellon importieren" + +#: AppTools/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 "" +"Importieren Sie in FlatCAM eine Excellon-Datei\n" +"das speichert seine Informationen in 2 Dateien.\n" +"Normalerweise hat man eine .DRL-Erweiterung\n" +"der andere hat die Erweiterung .INF." + +#: AppTools/ToolPcbWizard.py:197 +msgid "PCBWizard Tool" +msgstr "PCBWizard Werkzeug" + +#: AppTools/ToolPcbWizard.py:291 AppTools/ToolPcbWizard.py:295 +msgid "Load PcbWizard Excellon file" +msgstr "PcbWizard Excellon-Datei laden" + +#: AppTools/ToolPcbWizard.py:314 AppTools/ToolPcbWizard.py:318 +msgid "Load PcbWizard INF file" +msgstr "Laden Sie die PcbWizard INF-Datei" + +#: AppTools/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 "" +"Die INF-Datei enthält keine Werkzeugtabelle.\n" +"Versuchen Sie, die Excellon-Datei über Datei -> Öffnen -> Excellon zu " +"öffnen\n" +"und bearbeiten Sie die Bohrerdurchmesser manuell." + +#: AppTools/ToolPcbWizard.py:387 +msgid "PcbWizard .INF file loaded." +msgstr "PcbWizard-INF-Datei wurde geladen." + +#: AppTools/ToolPcbWizard.py:392 +msgid "Main PcbWizard Excellon file loaded." +msgstr "Haupt-PcbWizard Excellon-Datei geladen." + +#: AppTools/ToolPcbWizard.py:424 App_Main.py:8674 +msgid "This is not Excellon file." +msgstr "Dies ist keine Excellon-Datei." + +#: AppTools/ToolPcbWizard.py:427 +msgid "Cannot parse file" +msgstr "Datei kann nicht analysiert werden" + +#: AppTools/ToolPcbWizard.py:450 +msgid "Importing Excellon." +msgstr "Excellon importieren." + +#: AppTools/ToolPcbWizard.py:457 +msgid "Import Excellon file failed." +msgstr "Import der Excellon-Datei ist fehlgeschlagen." + +#: AppTools/ToolPcbWizard.py:464 +msgid "Imported" +msgstr "Importiert" + +#: AppTools/ToolPcbWizard.py:467 +msgid "Excellon merging is in progress. Please wait..." +msgstr "Das Zusammenführen von Excellons ist im Gange. Warten Sie mal..." + +#: AppTools/ToolPcbWizard.py:469 +msgid "The imported Excellon file is empty." +msgstr "Die importierte Excellon-Datei ist Keine." + +#: AppTools/ToolProperties.py:116 App_Main.py:4914 App_Main.py:6968 +#: App_Main.py:7063 App_Main.py:7104 App_Main.py:7145 App_Main.py:7186 +#: App_Main.py:7227 App_Main.py:7271 App_Main.py:7315 App_Main.py:7835 +#: App_Main.py:7839 +msgid "No object selected." +msgstr "Kein Objekt ausgewählt." + +#: AppTools/ToolProperties.py:131 +msgid "Object Properties are displayed." +msgstr "Objekteigenschaften werden angezeigt." + +#: AppTools/ToolProperties.py:136 +msgid "Properties Tool" +msgstr "Eigenschaftenwerkzeug" + +#: AppTools/ToolProperties.py:150 +msgid "TYPE" +msgstr "TYP" + +#: AppTools/ToolProperties.py:151 +msgid "NAME" +msgstr "NAME" + +#: AppTools/ToolProperties.py:153 +msgid "Dimensions" +msgstr "Dimensionen" + +#: AppTools/ToolProperties.py:181 +msgid "Geo Type" +msgstr "Geo-Typ" + +#: AppTools/ToolProperties.py:184 +msgid "Single-Geo" +msgstr "Einzehln Geo" + +#: AppTools/ToolProperties.py:185 +msgid "Multi-Geo" +msgstr "Mehrfache Geo" + +#: AppTools/ToolProperties.py:196 +msgid "Calculating dimensions ... Please wait." +msgstr "Bemaßung wird berechnet ... Bitte warten." + +#: AppTools/ToolProperties.py:339 AppTools/ToolProperties.py:343 +#: AppTools/ToolProperties.py:345 +msgid "Inch" +msgstr "Zoll" + +#: AppTools/ToolProperties.py:339 AppTools/ToolProperties.py:344 +#: AppTools/ToolProperties.py:346 +msgid "Metric" +msgstr "Metrisch" + +#: AppTools/ToolProperties.py:421 AppTools/ToolProperties.py:486 +msgid "Drills number" +msgstr "Bohrernummer" + +#: AppTools/ToolProperties.py:422 AppTools/ToolProperties.py:488 +msgid "Slots number" +msgstr "Slotnummer" + +#: AppTools/ToolProperties.py:424 +msgid "Drills total number:" +msgstr "Gesamtzahl Bohrer:" + +#: AppTools/ToolProperties.py:425 +msgid "Slots total number:" +msgstr "Gesamtzahl der slots:" + +#: AppTools/ToolProperties.py:452 AppTools/ToolProperties.py:455 +#: AppTools/ToolProperties.py:458 AppTools/ToolProperties.py:483 +msgid "Present" +msgstr "Vorhanden" + +#: AppTools/ToolProperties.py:453 AppTools/ToolProperties.py:484 +msgid "Solid Geometry" +msgstr "Festkörpergeometrie" + +#: AppTools/ToolProperties.py:456 +msgid "GCode Text" +msgstr "GCode Text" + +#: AppTools/ToolProperties.py:459 +msgid "GCode Geometry" +msgstr "GCode Geometrie" + +#: AppTools/ToolProperties.py:462 +msgid "Data" +msgstr "Daten" + +#: AppTools/ToolProperties.py:495 +msgid "Depth of Cut" +msgstr "Tiefe des Schnitts" + +#: AppTools/ToolProperties.py:507 +msgid "Clearance Height" +msgstr "Freilaufhöhe" + +#: AppTools/ToolProperties.py:539 +msgid "Routing time" +msgstr "Berechnungszeit" + +#: AppTools/ToolProperties.py:546 +msgid "Travelled distance" +msgstr "Zurückgelegte Strecke" + +#: AppTools/ToolProperties.py:564 +msgid "Width" +msgstr "Breite" + +#: AppTools/ToolProperties.py:570 AppTools/ToolProperties.py:578 +msgid "Box Area" +msgstr "Feld Bereich" + +#: AppTools/ToolProperties.py:573 AppTools/ToolProperties.py:581 +msgid "Convex_Hull Area" +msgstr "Konvexer Rumpfbereich" + +#: AppTools/ToolProperties.py:588 AppTools/ToolProperties.py:591 +msgid "Copper Area" +msgstr "Kupferareal" + +#: AppTools/ToolPunchGerber.py:30 AppTools/ToolPunchGerber.py:323 +msgid "Punch Gerber" +msgstr "Schlag Gerber" + +#: AppTools/ToolPunchGerber.py:65 +msgid "Gerber into which to punch holes" +msgstr "Gerber, in den Löcher gestanzt werden können" + +#: AppTools/ToolPunchGerber.py:85 +msgid "ALL" +msgstr "ALLE" + +#: AppTools/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." + +#: AppTools/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." + +#: AppTools/ToolPunchGerber.py:425 +msgid "Punch Tool" +msgstr "Stanzwerkzeug" + +#: AppTools/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." + +#: AppTools/ToolPunchGerber.py:607 AppTools/ToolPunchGerber.py:619 +msgid "" +"Could not generate punched hole Gerber because the punch hole size is 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." + +#: AppTools/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 ..." + +#: AppTools/ToolQRCode.py:80 +msgid "Gerber Object to which the QRCode will be added." +msgstr "Gerber-Objekt zu dem der QRCode hinzugefügt wird." + +#: AppTools/ToolQRCode.py:93 +msgid "QRCode Parameters" +msgstr "QRCode Parameter" + +#: AppTools/ToolQRCode.py:95 +msgid "The parameters used to shape the QRCode." +msgstr "Parameter zum Aussehen des QRCodes." + +#: AppTools/ToolQRCode.py:207 +msgid "Export QRCode" +msgstr "QRCode exportieren" + +#: AppTools/ToolQRCode.py:209 +msgid "" +"Show a set of controls allowing to export the QRCode\n" +"to a SVG file or an PNG file." +msgstr "" +"Zeigt einen Satz von Bedienelementen um den QRCode\n" +"in eine SVG oder ein PNG File zu exportieren." + +#: AppTools/ToolQRCode.py:248 +msgid "Transparent back color" +msgstr "Transparente Hintergrundfarbe" + +#: AppTools/ToolQRCode.py:273 +msgid "Export QRCode SVG" +msgstr "QRCode als SVG exportieren" + +#: AppTools/ToolQRCode.py:275 +msgid "Export a SVG file with the QRCode content." +msgstr "Export als SVG Code mit dem QRCode Inhalt." + +#: AppTools/ToolQRCode.py:286 +msgid "Export QRCode PNG" +msgstr "G-Code als PNG exportieren" + +#: AppTools/ToolQRCode.py:288 +msgid "Export a PNG image file with the QRCode content." +msgstr "Exportiert den QRCode als PNG Datei." + +#: AppTools/ToolQRCode.py:299 +msgid "Insert QRCode" +msgstr "QRCode einfügen" + +#: AppTools/ToolQRCode.py:301 +msgid "Create the QRCode object." +msgstr "Erzeugen des QRCode Objektes." + +#: AppTools/ToolQRCode.py:415 AppTools/ToolQRCode.py:750 +#: AppTools/ToolQRCode.py:799 +msgid "Cancelled. There is no QRCode Data in the text box." +msgstr "Abgebrochen. Es befindet sich kein QRCode im Feld." + +#: AppTools/ToolQRCode.py:434 +msgid "Generating QRCode geometry" +msgstr "QRCode Geometrie erzeugen" + +#: AppTools/ToolQRCode.py:474 +msgid "Click on the Destination point ..." +msgstr "Klicken Sie auf den Zielpunkt ..." + +#: AppTools/ToolQRCode.py:589 +msgid "QRCode Tool done." +msgstr "QRCode Tool fertig." + +#: AppTools/ToolQRCode.py:782 AppTools/ToolQRCode.py:786 +msgid "Export PNG" +msgstr "PNG exportieren" + +#: AppTools/ToolQRCode.py:829 AppTools/ToolQRCode.py:833 App_Main.py:6996 +#: App_Main.py:7000 +msgid "Export SVG" +msgstr "SVG exportieren" + +#: AppTools/ToolRulesCheck.py:33 +msgid "Check Rules" +msgstr "Überprüfen Sie die Regeln" + +#: AppTools/ToolRulesCheck.py:61 +msgid "Gerber Files" +msgstr "Gerber-Dateien" + +#: AppTools/ToolRulesCheck.py:63 +msgid "Gerber objects for which to check rules." +msgstr "Gerber-Objekte, für die Regeln überprüft werden sollen." + +#: AppTools/ToolRulesCheck.py:78 +msgid "Top" +msgstr "Oberst" + +#: AppTools/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." + +#: AppTools/ToolRulesCheck.py:96 +msgid "Bottom" +msgstr "Unterseite" + +#: AppTools/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." + +#: AppTools/ToolRulesCheck.py:114 +msgid "SM Top" +msgstr "SM Oberst" + +#: AppTools/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." + +#: AppTools/ToolRulesCheck.py:132 +msgid "SM Bottom" +msgstr "SM unten" + +#: AppTools/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." + +#: AppTools/ToolRulesCheck.py:150 +msgid "Silk Top" +msgstr "Siebdruck Oben" + +#: AppTools/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." + +#: AppTools/ToolRulesCheck.py:168 +msgid "Silk Bottom" +msgstr "Siebdruck unten" + +#: AppTools/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." + +#: AppTools/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." + +#: AppTools/ToolRulesCheck.py:199 +msgid "Excellon Objects" +msgstr "Excellon-Objekte" + +#: AppTools/ToolRulesCheck.py:201 +msgid "Excellon objects for which to check rules." +msgstr "Excellon-Objekte, für die Regeln überprüft werden sollen." + +#: AppTools/ToolRulesCheck.py:213 +msgid "Excellon 1" +msgstr "Excellon 1" + +#: AppTools/ToolRulesCheck.py:215 +msgid "" +"Excellon object for which to check rules.\n" +"Holds the plated holes or a general Excellon file content." +msgstr "" +"Excellon-Objekt, für das Regeln überprüft werden sollen.\n" +"Enthält die plattierten Löcher oder einen allgemeinen Excellon-Dateiinhalt." + +#: AppTools/ToolRulesCheck.py:232 +msgid "Excellon 2" +msgstr "Excellon 2" + +#: AppTools/ToolRulesCheck.py:234 +msgid "" +"Excellon object for which to check rules.\n" +"Holds the non-plated holes." +msgstr "" +"Excellon-Objekt, für das Regeln überprüft werden sollen.\n" +"Hält die nicht plattierten Löcher." + +#: AppTools/ToolRulesCheck.py:247 +msgid "All Rules" +msgstr "Alle Regeln" + +#: AppTools/ToolRulesCheck.py:249 +msgid "This check/uncheck all the rules below." +msgstr "" +"Hiermit können Sie alle unten aufgeführten Regeln aktivieren / deaktivieren." + +#: AppTools/ToolRulesCheck.py:499 +msgid "Run Rules Check" +msgstr "Führen Sie die Regelprüfung durch" + +#: AppTools/ToolRulesCheck.py:1158 AppTools/ToolRulesCheck.py:1218 +#: AppTools/ToolRulesCheck.py:1255 AppTools/ToolRulesCheck.py:1327 +#: AppTools/ToolRulesCheck.py:1381 AppTools/ToolRulesCheck.py:1419 +#: AppTools/ToolRulesCheck.py:1484 +msgid "Value is not valid." +msgstr "Wert ist ungültig." + +#: AppTools/ToolRulesCheck.py:1172 +msgid "TOP -> Copper to Copper clearance" +msgstr "TOP -> Kupfer zu Kupfer Abstand" + +#: AppTools/ToolRulesCheck.py:1183 +msgid "BOTTOM -> Copper to Copper clearance" +msgstr "UNTEN -> Kupfer zu Kupfer Abstand" + +#: AppTools/ToolRulesCheck.py:1188 AppTools/ToolRulesCheck.py:1282 +#: AppTools/ToolRulesCheck.py:1446 +msgid "" +"At least one Gerber object has to be selected for this rule but none is " +"selected." +msgstr "" +"Für diese Regel muss mindestens ein Gerber-Objekt ausgewählt sein, aber " +"keines." + +#: AppTools/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." + +#: AppTools/ToolRulesCheck.py:1237 AppTools/ToolRulesCheck.py:1401 +msgid "" +"Outline Gerber object presence is mandatory for this rule but it is not " +"selected." +msgstr "" +"Das Vorhandensein von Gerber-Objekten ist für diese Regel obligatorisch, " +"jedoch nicht ausgewählt." + +#: AppTools/ToolRulesCheck.py:1254 AppTools/ToolRulesCheck.py:1281 +msgid "Silk to Silk clearance" +msgstr "Siebdruck zu siebdruck freiheit" + +#: AppTools/ToolRulesCheck.py:1267 +msgid "TOP -> Silk to Silk clearance" +msgstr "TOP -> Siebdruck zu Siebdruck Abstand" + +#: AppTools/ToolRulesCheck.py:1277 +msgid "BOTTOM -> Silk to Silk clearance" +msgstr "UNTEN -> Abstand von Siebdruck zu Siebdruck" + +#: AppTools/ToolRulesCheck.py:1333 +msgid "One or more of the Gerber objects is not valid." +msgstr "Eines oder mehrere der Gerber-Objekte sind ungültig." + +#: AppTools/ToolRulesCheck.py:1341 +msgid "TOP -> Silk to Solder Mask Clearance" +msgstr "TOP -> Abstand von Siebdruck zu Lötmaske" + +#: AppTools/ToolRulesCheck.py:1347 +msgid "BOTTOM -> Silk to Solder Mask Clearance" +msgstr "UNTEN -> Abstand von Siebdruck zu Lötmaske" + +#: AppTools/ToolRulesCheck.py:1351 +msgid "" +"Both Silk and Solder Mask Gerber objects has to be either both Top or both " +"Bottom." +msgstr "" +"Sowohl Siebdruck- als auch Lötmasken-Gerber-Objekte müssen entweder beide " +"oben oder beide unten sein." + +#: AppTools/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." + +#: AppTools/ToolRulesCheck.py:1431 +msgid "TOP -> Minimum Solder Mask Sliver" +msgstr "TOP -> Minimum Lötmaskenband" + +#: AppTools/ToolRulesCheck.py:1441 +msgid "BOTTOM -> Minimum Solder Mask Sliver" +msgstr "UNTEN-> Minimum Lötmaskenband" + +#: AppTools/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." + +#: AppTools/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." + +#: AppTools/ToolRulesCheck.py:1579 AppTools/ToolRulesCheck.py:1592 +#: AppTools/ToolRulesCheck.py:1603 AppTools/ToolRulesCheck.py:1616 +msgid "STATUS" +msgstr "STATUS" + +#: AppTools/ToolRulesCheck.py:1582 AppTools/ToolRulesCheck.py:1606 +msgid "FAILED" +msgstr "GESCHEITERT" + +#: AppTools/ToolRulesCheck.py:1595 AppTools/ToolRulesCheck.py:1619 +msgid "PASSED" +msgstr "BESTANDEN" + +#: AppTools/ToolRulesCheck.py:1596 AppTools/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." + +#: AppTools/ToolShell.py:74 AppTools/ToolShell.py:76 +msgid "...processing..." +msgstr "...wird bearbeitet..." + +#: AppTools/ToolSolderPaste.py:37 +msgid "Solder Paste Tool" +msgstr "Lötpaste-Werkzeug" + +#: AppTools/ToolSolderPaste.py:69 +msgid "Gerber Solder paste object. " +msgstr "Gerber Lötpastenobjekt. " + +#: AppTools/ToolSolderPaste.py:76 +msgid "" +"Tools pool from which the algorithm\n" +"will pick the ones used for dispensing solder paste." +msgstr "" +"Toolspool aus dem der Algorithmus\n" +"wählt die für die Lotpaste verwendeten aus." + +#: AppTools/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 "" +"Dies ist die Werkzeugnummer.\n" +"Die Lotdosierung beginnt mit dem Werkzeug mit dem größten\n" +"Durchmesser, weiter, bis keine Düsenwerkzeuge mehr vorhanden sind.\n" +"Wenn keine Werkzeuge mehr vorhanden sind, sind aber noch keine Pads " +"vorhanden\n" +"Mit Lötpaste gibt die App eine Warnmeldung aus." + +#: AppTools/ToolSolderPaste.py:98 +msgid "" +"Nozzle tool Diameter. It's value (in current FlatCAM units)\n" +"is the width of the solder paste dispensed." +msgstr "" +"Düsenwerkzeug Durchmesser. Der Wert (in aktuellen FlatCAM-Einheiten)\n" +"ist die Breite der Lotpaste." + +#: AppTools/ToolSolderPaste.py:105 +msgid "New Nozzle Tool" +msgstr "Neues Düsenwerkzeug" + +#: AppTools/ToolSolderPaste.py:124 +msgid "" +"Add a new nozzle tool to the Tool Table\n" +"with the diameter specified above." +msgstr "" +"Fügen Sie der Werkzeugtabelle ein neues Düsenwerkzeug hinzu\n" +"mit dem oben angegebenen Durchmesser." + +#: AppTools/ToolSolderPaste.py:136 +msgid "Generate solder paste dispensing geometry." +msgstr "Generieren Sie Lotpastendispensiergeometrie." + +#: AppTools/ToolSolderPaste.py:155 +msgid "STEP 1" +msgstr "SCHRITT 1" + +#: AppTools/ToolSolderPaste.py:157 +msgid "" +"First step is to select a number of nozzle tools for usage\n" +"and then optionally modify the GCode parameters below." +msgstr "" +"Zunächst müssen Sie eine Reihe von Düsenwerkzeugen auswählen\n" +"und ändern Sie dann optional die GCode-Parameter." + +#: AppTools/ToolSolderPaste.py:160 +msgid "" +"Select tools.\n" +"Modify parameters." +msgstr "" +"Werkzeuge auswählen.\n" +"Parameter ändern." + +#: AppTools/ToolSolderPaste.py:280 +msgid "" +"Feedrate (speed) while moving up vertically\n" +" to Dispense position (on Z plane)." +msgstr "" +"Vorschub (Geschwindigkeit) bei vertikaler Bewegung\n" +"  zur Ausgabeposition (auf der Z-Ebene)." + +#: AppTools/ToolSolderPaste.py:350 +msgid "" +"Generate GCode for Solder Paste dispensing\n" +"on PCB pads." +msgstr "" +"Generieren Sie GCode für die Lotpastendosierung\n" +"auf PCB-Pads." + +#: AppTools/ToolSolderPaste.py:371 +msgid "STEP 2" +msgstr "SCHRITT 2" + +#: AppTools/ToolSolderPaste.py:373 +msgid "" +"Second step is to create a solder paste dispensing\n" +"geometry out of an Solder Paste Mask Gerber file." +msgstr "" +"Der zweite Schritt ist das Erstellen einer Lotpastendispensierung\n" +"Geometrie aus einer Lotpastenmaske-Gerber-Datei." + +#: AppTools/ToolSolderPaste.py:390 +msgid "Geo Result" +msgstr "Geo-Ergebnis" + +#: AppTools/ToolSolderPaste.py:392 +msgid "" +"Geometry Solder Paste object.\n" +"The name of the object has to end in:\n" +"'_solderpaste' as a protection." +msgstr "" +"Geometrie Lötpaste Objekt einfügen.\n" +"Der Name des Objekts muss auf enden:\n" +"'_solderpaste' als Schutz." + +#: AppTools/ToolSolderPaste.py:401 +msgid "STEP 3" +msgstr "SCHRITT 3" + +#: AppTools/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 "" +"Der dritte Schritt ist die Auswahl einer Lotpastendosiergeometrie.\n" +"und generieren Sie dann ein CNCJob-Objekt.\n" +"\n" +"HINWEIS: Wenn Sie einen CNCJob mit neuen Parametern erstellen möchten,\n" +"Zuerst müssen Sie eine Geometrie mit diesen neuen Parametern generieren.\n" +"und erst danach können Sie einen aktualisierten CNCJob erstellen." + +#: AppTools/ToolSolderPaste.py:424 +msgid "CNC Result" +msgstr "CNC-Ergebnis" + +#: AppTools/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 Lotpastenobjekt.\n" +"Um den GCode-Speicherbereich zu aktivieren,\n" +"Der Name des Objekts muss auf enden:\n" +"'_solderpaste' als Schutz." + +#: AppTools/ToolSolderPaste.py:436 +msgid "View GCode" +msgstr "GCode anzeigen" + +#: AppTools/ToolSolderPaste.py:438 +msgid "" +"View the generated GCode for Solder Paste dispensing\n" +"on PCB pads." +msgstr "" +"Zeigen Sie den generierten GCode für die Lotpastendosierung an\n" +"auf PCB-Pads." + +#: AppTools/ToolSolderPaste.py:448 +msgid "Save GCode" +msgstr "Speichern Sie GCode" + +#: AppTools/ToolSolderPaste.py:450 +msgid "" +"Save the generated GCode for Solder Paste dispensing\n" +"on PCB pads, to a file." +msgstr "" +"Speichern Sie den generierten GCode für die Lotpastendosierung\n" +"auf PCB-Pads zu einer Datei." + +#: AppTools/ToolSolderPaste.py:460 +msgid "STEP 4" +msgstr "SCHRITT 4" + +#: AppTools/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 "" +"Vierter Schritt (und letzter Schritt) ist die Auswahl eines CNCJobs aus\n" +"eine Lotpastendispensiergeometrie und dann den GCode anzeigen / speichern." + +#: AppTools/ToolSolderPaste.py:922 +msgid "New Nozzle tool added to Tool Table." +msgstr "Neues Düsenwerkzeug zur Werkzeugtabelle hinzugefügt." + +#: AppTools/ToolSolderPaste.py:965 +msgid "Nozzle tool from Tool Table was edited." +msgstr "Das Düsenwerkzeug aus der Werkzeugtabelle wurde bearbeitet." + +#: AppTools/ToolSolderPaste.py:1024 +msgid "Delete failed. Select a Nozzle tool to delete." +msgstr "Löschen fehlgeschlagen. Wählen Sie ein Düsenwerkzeug zum Löschen aus." + +#: AppTools/ToolSolderPaste.py:1030 +msgid "Nozzle tool(s) deleted from Tool Table." +msgstr "Düsenwerkzeug (e) aus der Werkzeugtabelle gelöscht." + +#: AppTools/ToolSolderPaste.py:1086 +msgid "No SolderPaste mask Gerber object loaded." +msgstr "Keine Lötpastenmaske Gerber-Objekt geladen." + +#: AppTools/ToolSolderPaste.py:1104 +msgid "Creating Solder Paste dispensing geometry." +msgstr "Erstellen einer Lotpastenspendergeometrie." + +#: AppTools/ToolSolderPaste.py:1117 +msgid "No Nozzle tools in the tool table." +msgstr "Nein Düsenwerkzeuge in der Werkzeugtabelle." + +#: AppTools/ToolSolderPaste.py:1243 +msgid "Cancelled. Empty file, it has no geometry..." +msgstr "Abgebrochen. Leere Datei hat keine Geometrie ..." + +#: AppTools/ToolSolderPaste.py:1246 +msgid "Solder Paste geometry generated successfully" +msgstr "Lotpastengeometrie erfolgreich generiert" + +#: AppTools/ToolSolderPaste.py:1253 +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 ..." + +#: AppTools/ToolSolderPaste.py:1267 +msgid "Generating Solder Paste dispensing geometry..." +msgstr "Lötpasten-Dosiergeometrie erzeugen ..." + +#: AppTools/ToolSolderPaste.py:1287 +msgid "There is no Geometry object available." +msgstr "Es ist kein Geometrieobjekt verfügbar." + +#: AppTools/ToolSolderPaste.py:1292 +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\"." + +#: AppTools/ToolSolderPaste.py:1328 +msgid "An internal error has ocurred. See shell.\n" +msgstr "Ein interner Fehler ist aufgetreten. Siehe Konsole.\n" + +#: AppTools/ToolSolderPaste.py:1393 +msgid "ToolSolderPaste CNCjob created" +msgstr "Werkzeuglötpaste CNC-Auftrag erstellt" + +#: AppTools/ToolSolderPaste.py:1412 +msgid "SP GCode Editor" +msgstr "SP GCode-Editor" + +#: AppTools/ToolSolderPaste.py:1424 AppTools/ToolSolderPaste.py:1429 +#: AppTools/ToolSolderPaste.py:1484 +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." + +#: AppTools/ToolSolderPaste.py:1454 +msgid "No Gcode in the object" +msgstr "Kein Gcode im Objekt" + +#: AppTools/ToolSolderPaste.py:1494 +msgid "Export GCode ..." +msgstr "GCode exportieren ..." + +#: AppTools/ToolSolderPaste.py:1542 +msgid "Solder paste dispenser GCode file saved to" +msgstr "Lotpastenspender GCode-Datei gespeichert in" + +#: AppTools/ToolSub.py:65 +msgid "Gerber Objects" +msgstr "Gerber-Objekte" + +#: AppTools/ToolSub.py:78 +msgid "" +"Gerber object from which to subtract\n" +"the subtractor Gerber object." +msgstr "" +"Gerber-Objekt, von dem subtrahiert werden soll\n" +"der Subtrahierer Gerber Objekt." + +#: AppTools/ToolSub.py:91 AppTools/ToolSub.py:146 +msgid "Subtractor" +msgstr "Subtraktor" + +#: AppTools/ToolSub.py:93 +msgid "" +"Gerber object that will be subtracted\n" +"from the target Gerber object." +msgstr "" +"Gerber-Objekt, das abgezogen wird\n" +"vom Zielobjekt Gerber." + +#: AppTools/ToolSub.py:100 +msgid "Subtract Gerber" +msgstr "Gerber abziehen" + +#: AppTools/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 "" +"Entfernt den vom Subtrahierer belegten Bereich\n" +"Gerber vom Target Gerber.\n" +"Kann verwendet werden, um den überlappenden Siebdruck zu entfernen\n" +"über der Lötmaske." + +#: AppTools/ToolSub.py:120 +msgid "Geometry Objects" +msgstr "Geometrieobjekte" + +#: AppTools/ToolSub.py:133 +msgid "" +"Geometry object from which to subtract\n" +"the subtractor Geometry object." +msgstr "" +"Geometrieobjekt, von dem subtrahiert werden soll\n" +"das Subtrahierer-Geometrieobjekt." + +#: AppTools/ToolSub.py:148 +msgid "" +"Geometry object that will be subtracted\n" +"from the target Geometry object." +msgstr "" +"Geometrieobjekt, das subtrahiert wird\n" +"aus dem Zielobjekt Geometrie." + +#: AppTools/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." + +#: AppTools/ToolSub.py:159 +msgid "Subtract Geometry" +msgstr "Geometrie subtrahieren" + +#: AppTools/ToolSub.py:161 +msgid "" +"Will remove the area occupied by the subtractor\n" +"Geometry from the Target Geometry." +msgstr "" +"Entfernt den vom Subtrahierer belegten Bereich\n" +"Geometrie aus der Zielgeometrie." + +#: AppTools/ToolSub.py:263 +msgid "Sub Tool" +msgstr "Sub. Werkzeug" + +#: AppTools/ToolSub.py:284 AppTools/ToolSub.py:489 +msgid "No Target object loaded." +msgstr "Kein Zielobjekt geladen." + +#: AppTools/ToolSub.py:287 +msgid "Loading geometry from Gerber objects." +msgstr "Lade Geometrien aus Gerber Objekten." + +#: AppTools/ToolSub.py:299 AppTools/ToolSub.py:504 +msgid "No Subtractor object loaded." +msgstr "Es wurde kein Subtrahiererobjekt geladen." + +# Whatever a Subtractor Gerber is, could not translate +#: AppTools/ToolSub.py:331 +msgid "Processing geometry from Subtractor Gerber object." +msgstr "Verarbeite Geomtrie des Subtractor Gerber Objekts." + +#: AppTools/ToolSub.py:352 +msgid "Parsing geometry for aperture" +msgstr "Analysegeometrie für Blende" + +# whatever aperture means here.... +#: AppTools/ToolSub.py:413 +msgid "Finished parsing geometry for aperture" +msgstr "Einlesen der aperture Geometrie fertiggestellt" + +#: AppTools/ToolSub.py:458 AppTools/ToolSub.py:661 +msgid "Generating new object ..." +msgstr "Neues Objekt erzeugen ..." + +#: AppTools/ToolSub.py:462 AppTools/ToolSub.py:665 AppTools/ToolSub.py:746 +msgid "Generating new object failed." +msgstr "Das Generieren eines neuen Objekts ist fehlgeschlagen." + +#: AppTools/ToolSub.py:467 AppTools/ToolSub.py:671 +msgid "Created" +msgstr "Erstellt" + +#: AppTools/ToolSub.py:518 +msgid "Currently, the Subtractor geometry cannot be of type Multigeo." +msgstr "Derzeit kann die Subtrahierergeometrie nicht vom Typ Multi-Geo sein." + +#: AppTools/ToolSub.py:563 +msgid "Parsing solid_geometry ..." +msgstr "Analyse von solid_geometry ..." + +#: AppTools/ToolSub.py:565 +msgid "Parsing solid_geometry for tool" +msgstr "Analysieren der solid_geometry für das Werkzeug" + +#: AppTools/ToolTransform.py:23 +msgid "Object Transform" +msgstr "Objekttransformation" + +#: AppTools/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 "" +"Drehen Sie die ausgewählten Objekte.\n" +"Der Bezugspunkt ist die Mitte von\n" +"der Begrenzungsrahmen für alle ausgewählten Objekte." + +#: AppTools/ToolTransform.py:99 AppTools/ToolTransform.py:120 +msgid "" +"Angle for Skew action, in degrees.\n" +"Float number between -360 and 360." +msgstr "" +"Winkel für Schrägstellung in Grad.\n" +"Gleitkommazahl zwischen -360 und 360." + +#: AppTools/ToolTransform.py:109 AppTools/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 "" +"Schrägstellung / Scherung der ausgewählten Objekte.\n" +"Der Bezugspunkt ist die Mitte von\n" +"der Begrenzungsrahmen für alle ausgewählten Objekte." + +#: AppTools/ToolTransform.py:159 AppTools/ToolTransform.py:179 +msgid "" +"Scale the selected object(s).\n" +"The point of reference depends on \n" +"the Scale reference checkbox state." +msgstr "" +"Skalieren Sie die ausgewählten Objekte.\n" +"Der Bezugspunkt hängt von ab\n" +"das Kontrollkästchen Skalenreferenz." + +#: AppTools/ToolTransform.py:228 AppTools/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 "" +"Versetzt die ausgewählten Objekte.\n" +"Der Bezugspunkt ist die Mitte von\n" +"der Begrenzungsrahmen für alle ausgewählten Objekte.\n" + +#: AppTools/ToolTransform.py:268 AppTools/ToolTransform.py:273 +msgid "Flip the selected object(s) over the X axis." +msgstr "Drehen Sie die ausgewählten Objekte über die X-Achse." + +#: AppTools/ToolTransform.py:297 +msgid "Ref. Point" +msgstr "Anhaltspunkt" + +#: AppTools/ToolTransform.py:348 +msgid "" +"Create the buffer effect on each geometry,\n" +"element from the selected object, using the distance." +msgstr "" +"Erstellen Sie den Puffereffekt für jede Geometrie.\n" +"Element aus dem ausgewählten Objekt unter Verwendung des Abstands." + +#: AppTools/ToolTransform.py:374 +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." + +#: AppTools/ToolTransform.py:479 +msgid "Buffer D" +msgstr "Puffer E" + +#: AppTools/ToolTransform.py:480 +msgid "Buffer F" +msgstr "Puffer F" + +#: AppTools/ToolTransform.py:557 +msgid "Rotate transformation can not be done for a value of 0." +msgstr "" +"Bei einem Wert von 0 kann keine Rotationstransformation durchgeführt werden." + +#: AppTools/ToolTransform.py:596 AppTools/ToolTransform.py:619 +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." + +#: AppTools/ToolTransform.py:634 AppTools/ToolTransform.py:644 +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." + +#: AppTools/ToolTransform.py:676 +msgid "No object selected. Please Select an object to rotate!" +msgstr "Kein Objekt ausgewählt. Bitte wählen Sie ein Objekt zum Drehen aus!" + +#: AppTools/ToolTransform.py:702 +msgid "CNCJob objects can't be rotated." +msgstr "CNCJob-Objekte können nicht gedreht werden." + +#: AppTools/ToolTransform.py:710 +msgid "Rotate done" +msgstr "Fertig drehen" + +#: AppTools/ToolTransform.py:713 AppTools/ToolTransform.py:783 +#: AppTools/ToolTransform.py:833 AppTools/ToolTransform.py:887 +#: AppTools/ToolTransform.py:917 AppTools/ToolTransform.py:953 +msgid "Due of" +msgstr "Aufgrund von" + +#: AppTools/ToolTransform.py:713 AppTools/ToolTransform.py:783 +#: AppTools/ToolTransform.py:833 AppTools/ToolTransform.py:887 +#: AppTools/ToolTransform.py:917 AppTools/ToolTransform.py:953 +msgid "action was not executed." +msgstr "Aktion wurde nicht ausgeführt." + +#: AppTools/ToolTransform.py:725 +msgid "No object selected. Please Select an object to flip" +msgstr "Kein Objekt ausgewählt. Bitte wählen Sie ein Objekt aus" + +#: AppTools/ToolTransform.py:758 +msgid "CNCJob objects can't be mirrored/flipped." +msgstr "CNCJob-Objekte können nicht gespiegelt / gespiegelt werden." + +#: AppTools/ToolTransform.py:793 +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." + +#: AppTools/ToolTransform.py:798 +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!" + +#: AppTools/ToolTransform.py:818 +msgid "CNCJob objects can't be skewed." +msgstr "CNCJob-Objekte können nicht verzerrt werden." + +#: AppTools/ToolTransform.py:830 +msgid "Skew on the" +msgstr "Schräg auf die" + +#: AppTools/ToolTransform.py:830 AppTools/ToolTransform.py:884 +#: AppTools/ToolTransform.py:914 +msgid "axis done" +msgstr "Achse fertig" + +#: AppTools/ToolTransform.py:844 +msgid "No object selected. Please Select an object to scale!" +msgstr "Kein Objekt ausgewählt. Bitte wählen Sie ein Objekt zum Skalieren!" + +#: AppTools/ToolTransform.py:875 +msgid "CNCJob objects can't be scaled." +msgstr "CNCJob-Objekte können nicht skaliert werden." + +#: AppTools/ToolTransform.py:884 +msgid "Scale on the" +msgstr "Skalieren Sie auf der" + +#: AppTools/ToolTransform.py:894 +msgid "No object selected. Please Select an object to offset!" +msgstr "Kein Objekt ausgewählt. Bitte wählen Sie ein Objekt zum Versetzen aus!" + +#: AppTools/ToolTransform.py:901 +msgid "CNCJob objects can't be offset." +msgstr "CNCJob-Objekte können nicht versetzt werden." + +#: AppTools/ToolTransform.py:914 +msgid "Offset on the" +msgstr "Offset auf dem" + +#: AppTools/ToolTransform.py:924 +msgid "No object selected. Please Select an object to buffer!" +msgstr "Kein Objekt ausgewählt. Bitte wählen Sie ein Objekt zum Puffern aus!" + +#: AppTools/ToolTransform.py:927 +msgid "Applying Buffer" +msgstr "Anwenden von Puffer" + +#: AppTools/ToolTransform.py:931 +msgid "CNCJob objects can't be buffered." +msgstr "CNCJob-Objekte können nicht gepuffert werden." + +#: AppTools/ToolTransform.py:948 +msgid "Buffer done" +msgstr "Puffer fertig" + +#: AppTranslation.py:104 +msgid "The application will restart." +msgstr "Die Anwendung wird neu gestartet." + +#: AppTranslation.py:106 +msgid "Are you sure do you want to change the current language to" +msgstr "Möchten Sie die aktuelle Sprache wirklich in ändern" + +#: AppTranslation.py:107 +msgid "Apply Language ..." +msgstr "Sprache anwenden ..." + +#: AppTranslation.py:201 App_Main.py:3089 +msgid "" +"There are files/objects modified in FlatCAM. \n" +"Do you want to Save the project?" +msgstr "" +"In FlatCAM wurden Dateien / Objekte geändert.\n" +"Möchten Sie das Projekt speichern?" + +#: AppTranslation.py:204 App_Main.py:3092 App_Main.py:6584 +msgid "Save changes" +msgstr "Änderungen speichern" + +#: App_Main.py:477 msgid "FlatCAM is initializing ..." msgstr "FlatCAM wird initialisiert ..." -#: FlatCAMApp.py:639 +#: App_Main.py:623 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:709 +#: App_Main.py:695 msgid "" "FlatCAM is initializing ...\n" "Canvas initialization started." @@ -35,7 +16856,7 @@ msgstr "" "FlatCAM wird initialisiert ...\n" "Die Canvas-Initialisierung wurde gestartet." -#: FlatCAMApp.py:729 +#: App_Main.py:715 msgid "" "FlatCAM is initializing ...\n" "Canvas initialization started.\n" @@ -45,64 +16866,45 @@ msgstr "" "Die Canvas-Initialisierung wurde gestartet.\n" "Canvas-Initialisierung abgeschlossen in" -#: FlatCAMApp.py:1593 FlatCAMApp.py:7451 +#: App_Main.py:1568 App_Main.py:6695 msgid "New Project - Not saved" msgstr "Neues Projekt - Nicht gespeichert" -#: FlatCAMApp.py:1689 +#: App_Main.py:1669 msgid "" "Found old default preferences files. Please reboot the application to update." msgstr "" "Alte Einstellungsdatei gefunden. Bitte starten Sie Flatcam neu um die " "Einstellungen zu aktualisieren." -#: FlatCAMApp.py:1740 FlatCAMApp.py:2512 FlatCAMApp.py:2547 FlatCAMApp.py:2594 -#: FlatCAMApp.py:4540 FlatCAMApp.py:7535 FlatCAMApp.py:7572 FlatCAMApp.py:7614 -#: FlatCAMApp.py:7643 FlatCAMApp.py:7684 FlatCAMApp.py:7709 FlatCAMApp.py:7761 -#: FlatCAMApp.py:7796 FlatCAMApp.py:7841 FlatCAMApp.py:7882 FlatCAMApp.py:7923 -#: FlatCAMApp.py:7964 FlatCAMApp.py:8005 FlatCAMApp.py:8049 FlatCAMApp.py:8105 -#: FlatCAMApp.py:8137 FlatCAMApp.py:8169 FlatCAMApp.py:8402 FlatCAMApp.py:8440 -#: FlatCAMApp.py:8483 FlatCAMApp.py:8560 FlatCAMApp.py:8615 -#: FlatCAMBookmark.py:300 FlatCAMBookmark.py:342 FlatCAMDB.py:663 -#: FlatCAMDB.py:709 FlatCAMDB.py:2125 FlatCAMDB.py:2171 -#: flatcamEditors/FlatCAMExcEditor.py:1023 -#: flatcamEditors/FlatCAMExcEditor.py:1091 -#: flatcamEditors/FlatCAMTextEditor.py:223 flatcamGUI/MainGUI.py:3443 -#: flatcamGUI/MainGUI.py:3659 flatcamGUI/MainGUI.py:3874 -#: flatcamObjects/ObjectCollection.py:126 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 "Abgebrochen." - -#: FlatCAMApp.py:1756 +#: App_Main.py:1736 msgid "Open Config file failed." msgstr "Öffnen der Config-Datei ist fehlgeschlagen." -#: FlatCAMApp.py:1771 +#: App_Main.py:1751 msgid "Open Script file failed." msgstr "Open Script-Datei ist fehlgeschlagen." -#: FlatCAMApp.py:1797 +#: App_Main.py:1777 msgid "Open Excellon file failed." msgstr "Öffnen der Excellon-Datei fehlgeschlagen." -#: FlatCAMApp.py:1810 +#: App_Main.py:1790 msgid "Open GCode file failed." msgstr "Öffnen der GCode-Datei fehlgeschlagen." -#: FlatCAMApp.py:1823 +#: App_Main.py:1803 msgid "Open Gerber file failed." msgstr "Öffnen der Gerber-Datei fehlgeschlagen." -#: FlatCAMApp.py:2131 -msgid "Select a Geometry, Gerber or Excellon Object to edit." +#: App_Main.py:2117 +#, fuzzy +#| msgid "Select a Geometry, Gerber or Excellon Object to edit." +msgid "Select a Geometry, Gerber, Excellon or CNCJob Object to edit." msgstr "" "Wählen Sie ein zu bearbeitendes Geometrie-, Gerber- oder Excellon-Objekt aus." -#: FlatCAMApp.py:2146 +#: App_Main.py:2132 msgid "" "Simultaneous editing of tools geometry in a MultiGeo Geometry is not " "possible.\n" @@ -112,199 +16914,93 @@ msgstr "" "Geometrie ist nicht möglich.\n" "Bearbeiten Sie jeweils nur eine Geometrie." -#: FlatCAMApp.py:2204 +#: App_Main.py:2198 msgid "Editor is activated ..." msgstr "Editor wurde aktiviert ..." -#: FlatCAMApp.py:2225 +#: App_Main.py:2219 msgid "Do you want to save the edited object?" msgstr "Möchten Sie das bearbeitete Objekt speichern?" -#: FlatCAMApp.py:2226 flatcamGUI/MainGUI.py:2288 -msgid "Close Editor" -msgstr "Editor schließen" - -#: FlatCAMApp.py:2229 FlatCAMApp.py:3518 FlatCAMApp.py:6085 FlatCAMApp.py:7345 -#: FlatCAMTranslation.py:109 FlatCAMTranslation.py:207 -#: flatcamGUI/MainGUI.py:2519 -#: flatcamGUI/preferences/PreferencesUIManager.py:1122 -msgid "Yes" -msgstr "Ja" - -#: FlatCAMApp.py:2230 FlatCAMApp.py:3519 FlatCAMApp.py:6086 FlatCAMApp.py:7346 -#: FlatCAMTranslation.py:110 FlatCAMTranslation.py:208 -#: flatcamGUI/MainGUI.py:2520 -#: flatcamGUI/preferences/PreferencesUIManager.py:1123 -#: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:164 -#: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:150 -#: flatcamTools/ToolNCC.py:182 flatcamTools/ToolPaint.py:166 -msgid "No" -msgstr "Nein" - -#: FlatCAMApp.py:2231 FlatCAMApp.py:3520 FlatCAMApp.py:4478 FlatCAMApp.py:5103 -#: FlatCAMApp.py:7347 FlatCAMDB.py:128 FlatCAMDB.py:1689 -#: flatcamGUI/MainGUI.py:1347 -msgid "Cancel" -msgstr "Abbrechen" - -#: FlatCAMApp.py:2263 +#: App_Main.py:2257 msgid "Object empty after edit." msgstr "Das Objekt ist nach der Bearbeitung leer." -#: FlatCAMApp.py:2267 FlatCAMApp.py:2288 FlatCAMApp.py:2310 +#: App_Main.py:2261 App_Main.py:2282 App_Main.py:2304 msgid "Editor exited. Editor content saved." msgstr "Editor beendet. Editorinhalt gespeichert." -#: FlatCAMApp.py:2314 FlatCAMApp.py:2337 FlatCAMApp.py:2355 +#: App_Main.py:2308 App_Main.py:2331 App_Main.py:2349 msgid "Select a Gerber, Geometry or Excellon Object to update." msgstr "" "Wählen Sie ein Gerber-, Geometrie- oder Excellon-Objekt zum Aktualisieren " "aus." -#: FlatCAMApp.py:2317 +#: App_Main.py:2311 msgid "is updated, returning to App..." msgstr "wurde aktualisiert..." -#: FlatCAMApp.py:2324 +#: App_Main.py:2318 msgid "Editor exited. Editor content was not saved." msgstr "Editor beendet. Der Inhalt des Editors wurde nicht gespeichert." -#: FlatCAMApp.py:2504 FlatCAMApp.py:2508 +#: App_Main.py:2444 App_Main.py:2448 msgid "Import FlatCAM Preferences" msgstr "FlatCAM-Voreinstellungen importieren" -#: FlatCAMApp.py:2519 +#: App_Main.py:2459 msgid "Imported Defaults from" msgstr "Voreinstellungen wurden importiert von" -#: FlatCAMApp.py:2539 FlatCAMApp.py:2544 +#: App_Main.py:2479 App_Main.py:2484 msgid "Export FlatCAM Preferences" msgstr "FlatCAM-Voreinstellungen exportieren" -#: FlatCAMApp.py:2558 FlatCAMApp.py:2626 -#: flatcamGUI/preferences/PreferencesUIManager.py:1018 -msgid "Failed to write defaults to file." -msgstr "Fehler beim Schreiben der Voreinstellungen in die Datei." - -#: FlatCAMApp.py:2564 +#: App_Main.py:2504 msgid "Exported preferences to" msgstr "Exportierte Einstellungen nach" -#: FlatCAMApp.py:2584 FlatCAMApp.py:2589 +#: App_Main.py:2524 App_Main.py:2529 msgid "Save to file" msgstr "Speichern unter" -#: FlatCAMApp.py:2602 FlatCAMApp.py:8859 FlatCAMApp.py:8907 FlatCAMApp.py:9032 -#: FlatCAMApp.py:9168 FlatCAMBookmark.py:308 FlatCAMDB.py:671 FlatCAMDB.py:2133 -#: flatcamEditors/FlatCAMTextEditor.py:276 flatcamObjects/FlatCAMCNCJob.py:959 -#: 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 "" -"Berechtigung verweigert, Speichern nicht möglich.\n" -"Wahrscheinlich hält eine andere App die Datei offen oder ist geschützt." - -#: FlatCAMApp.py:2613 +#: App_Main.py:2553 msgid "Could not load the file." msgstr "Die Datei konnte nicht geladen werden." -#: FlatCAMApp.py:2629 +#: App_Main.py:2569 msgid "Exported file to" msgstr "Exportierte Datei nach" -#: FlatCAMApp.py:2712 +#: App_Main.py:2626 msgid "Failed to open recent files file for writing." msgstr "Fehler beim Öffnen der zuletzt geöffneten Datei zum Schreiben." -#: FlatCAMApp.py:2723 +#: App_Main.py:2637 msgid "Failed to open recent projects file for writing." msgstr "Fehler beim Öffnen der letzten Projektdatei zum Schreiben." -#: FlatCAMApp.py:2806 FlatCAMApp.py:9377 FlatCAMApp.py:9441 FlatCAMApp.py:9572 -#: FlatCAMApp.py:9637 FlatCAMApp.py:10287 -#: flatcamEditors/FlatCAMGrbEditor.py:4364 -#: flatcamObjects/FlatCAMGeometry.py:1725 flatcamParsers/ParseExcellon.py:897 -#: flatcamTools/ToolPcbWizard.py:432 -msgid "An internal error has occurred. See shell.\n" -msgstr "Ein interner Fehler ist aufgetreten. Siehe Shell.\n" - -#: FlatCAMApp.py:2807 -#, python-brace-format -msgid "" -"Object ({kind}) failed because: {error} \n" -"\n" -msgstr "" -"Objekt ({kind}) gescheitert weil: {error} \n" -"\n" - -#: FlatCAMApp.py:2822 -msgid "Converting units to " -msgstr "Einheiten umrechnen in " - -#: FlatCAMApp.py:2931 -msgid "CREATE A NEW FLATCAM TCL SCRIPT" -msgstr "NEUES FLATCAL TCL SCRIPT ERZEUGEN" - -#: FlatCAMApp.py:2932 -msgid "TCL Tutorial is here" -msgstr "Das TCL Tutorial ist hier" - -#: FlatCAMApp.py:2934 -msgid "FlatCAM commands list" -msgstr "FlatCAM Befehlsliste" - -#: FlatCAMApp.py:2935 -msgid "" -"Type >help< followed by Run Code for a list of FlatCAM Tcl Commands " -"(displayed in Tcl Shell)." -msgstr "" -"Geben Sie >help< gefolgt von Run Code ein, um eine Liste der FlatCAM Tcl-" -"Befehle anzuzeigen (angezeigt in der Tcl-Shell)." - -#: FlatCAMApp.py:2982 FlatCAMApp.py:2988 FlatCAMApp.py:2994 FlatCAMApp.py:3000 -#: FlatCAMApp.py:3006 FlatCAMApp.py:3012 -msgid "created/selected" -msgstr "erstellt / ausgewählt" - -#: FlatCAMApp.py:3027 FlatCAMApp.py:5189 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 "Plotten" - -#: FlatCAMApp.py:3090 flatcamGUI/MainGUI.py:545 -msgid "About FlatCAM" -msgstr "Über FlatCAM" - -#: FlatCAMApp.py:3116 +#: App_Main.py:2692 msgid "2D Computer-Aided Printed Circuit Board Manufacturing" msgstr "2D-Computer-Aided-Printed-Circuit-Board-Herstellung" -#: FlatCAMApp.py:3117 +#: App_Main.py:2693 msgid "Development" msgstr "Entwicklung" -#: FlatCAMApp.py:3118 +#: App_Main.py:2694 msgid "DOWNLOAD" msgstr "HERUNTERLADEN" -#: FlatCAMApp.py:3119 +#: App_Main.py:2695 msgid "Issue tracker" msgstr "Problem Tracker" -#: FlatCAMApp.py:3123 FlatCAMApp.py:3484 flatcamGUI/GUIElements.py:2583 -msgid "Close" -msgstr "Schließen" - -#: FlatCAMApp.py:3138 +#: App_Main.py:2714 msgid "Licensed under the MIT license" msgstr "Lizenziert unter der MIT-Lizenz" -#: FlatCAMApp.py:3147 +#: App_Main.py:2723 msgid "" "Permission is hereby granted, free of charge, to any person obtaining a " "copy\n" @@ -359,7 +17055,7 @@ msgstr "" "ZUSAMMENHANG MIT DER\n" " SOFTWARE ODER SONSTIGER VERWENDUNG DER SOFTWARE ENTSTANDEN." -#: FlatCAMApp.py:3169 +#: App_Main.py:2745 msgid "" "Some of the icons used are from the following sources:
    Icons by FreepikoNline Web FontsoNline Web Fonts" -#: FlatCAMApp.py:3202 +#: App_Main.py:2778 msgid "Splash" msgstr "Begrüßungsbildschirm" -#: FlatCAMApp.py:3208 +#: App_Main.py:2784 msgid "Programmers" msgstr "Programmierer" -#: FlatCAMApp.py:3214 +#: App_Main.py:2790 msgid "Translators" msgstr "Übersetzer" -#: FlatCAMApp.py:3220 +#: App_Main.py:2796 msgid "License" msgstr "Lizenz" -#: FlatCAMApp.py:3226 +#: App_Main.py:2802 msgid "Attributions" msgstr "Zuschreibungen" -#: FlatCAMApp.py:3249 +#: App_Main.py:2825 msgid "Programmer" msgstr "Programmierer" -#: FlatCAMApp.py:3250 +#: App_Main.py:2826 msgid "Status" msgstr "Status" -#: FlatCAMApp.py:3251 FlatCAMApp.py:3331 +#: App_Main.py:2827 App_Main.py:2907 msgid "E-mail" msgstr "Email" -#: FlatCAMApp.py:3259 +#: App_Main.py:2830 +msgid "Program Author" +msgstr "Programmautor" + +#: App_Main.py:2835 msgid "BETA Maintainer >= 2019" msgstr "Betreuer >= 2019" -#: FlatCAMApp.py:3328 +#: App_Main.py:2904 msgid "Language" msgstr "Sprache" -#: FlatCAMApp.py:3329 +#: App_Main.py:2905 msgid "Translator" msgstr "Übersetzer" -#: FlatCAMApp.py:3330 +#: App_Main.py:2906 msgid "Corrections" msgstr "Korrekturen" -#: FlatCAMApp.py:3455 FlatCAMApp.py:3464 flatcamGUI/MainGUI.py:527 -msgid "Bookmarks Manager" -msgstr "Lesezeichen verwalten" - -#: FlatCAMApp.py:3475 +#: App_Main.py:3051 msgid "" "This entry will resolve to another website if:\n" "\n" @@ -448,48 +17144,32 @@ msgstr "" "Wenn Sie keine Informationen zu FlatCAM beta erhalten können\n" "Verwenden Sie den Link zum YouTube-Kanal im Menü Hilfe." -#: FlatCAMApp.py:3482 +#: App_Main.py:3058 msgid "Alternative website" msgstr "Alternative Website" -#: FlatCAMApp.py:3508 flatcamGUI/MainGUI.py:4267 -msgid "Application is saving the project. Please wait ..." -msgstr "Anwendung speichert das Projekt. Warten Sie mal ..." - -#: FlatCAMApp.py:3513 FlatCAMTranslation.py:202 -msgid "" -"There are files/objects modified in FlatCAM. \n" -"Do you want to Save the project?" -msgstr "" -"In FlatCAM wurden Dateien / Objekte geändert.\n" -"Möchten Sie das Projekt speichern?" - -#: FlatCAMApp.py:3516 FlatCAMApp.py:7343 FlatCAMTranslation.py:205 -msgid "Save changes" -msgstr "Änderungen speichern" - -#: FlatCAMApp.py:3778 +#: App_Main.py:3357 msgid "Selected Excellon file extensions registered with FlatCAM." msgstr "" "Ausgewählte Excellon-Dateierweiterungen, die bei FlatCAM registriert sind." -#: FlatCAMApp.py:3800 +#: App_Main.py:3379 msgid "Selected GCode file extensions registered with FlatCAM." msgstr "" "Ausgewählte GCode-Dateierweiterungen, die bei FlatCAM registriert sind." -#: FlatCAMApp.py:3822 +#: App_Main.py:3401 msgid "Selected Gerber file extensions registered with FlatCAM." msgstr "" "Ausgewählte Gerber-Dateierweiterungen, die bei FlatCAM registriert sind." -#: FlatCAMApp.py:4010 FlatCAMApp.py:4069 FlatCAMApp.py:4097 +#: App_Main.py:3589 App_Main.py:3648 App_Main.py:3676 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:4019 +#: App_Main.py:3598 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 " @@ -507,52 +17187,52 @@ msgstr "" "und das Ergebnis entspricht möglicherweise nicht dem, was erwartet wurde.\n" "Überprüfen Sie den generierten GCODE." -#: FlatCAMApp.py:4031 FlatCAMApp.py:4041 +#: App_Main.py:3610 App_Main.py:3620 msgid "Geometry merging finished" msgstr "Zusammenführung der Geometrien beendet" -#: FlatCAMApp.py:4064 +#: App_Main.py:3643 msgid "Failed. Excellon joining works only on Excellon objects." msgstr "" "Gescheitert. Die Zusammenfügung von Excellon funktioniert nur bei Excellon-" "Objekten." -#: FlatCAMApp.py:4074 +#: App_Main.py:3653 msgid "Excellon merging finished" msgstr "Excellon-Bearbeitung abgeschlossen" -#: FlatCAMApp.py:4092 +#: App_Main.py:3671 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:4102 +#: App_Main.py:3681 msgid "Gerber merging finished" msgstr "Erledigt. Gerber-Bearbeitung beendet" -#: FlatCAMApp.py:4122 FlatCAMApp.py:4159 +#: App_Main.py:3701 App_Main.py:3738 msgid "Failed. Select a Geometry Object and try again." msgstr "" "Gescheitert. Wählen Sie ein Geometrieobjekt aus und versuchen Sie es erneut." -#: FlatCAMApp.py:4126 FlatCAMApp.py:4164 +#: App_Main.py:3705 App_Main.py:3743 msgid "Expected a GeometryObject, got" msgstr "Erwartet ein GeometryObject, bekam" -#: FlatCAMApp.py:4141 +#: App_Main.py:3720 msgid "A Geometry object was converted to MultiGeo type." msgstr "Ein Geometrieobjekt wurde in den MultiGeo-Typ konvertiert." -#: FlatCAMApp.py:4179 +#: App_Main.py:3758 msgid "A Geometry object was converted to SingleGeo type." msgstr "Ein Geometrieobjekt wurde in den SingleGeo-Typ konvertiert." -#: FlatCAMApp.py:4472 +#: App_Main.py:3964 msgid "Toggle Units" msgstr "Einheiten wechseln" -#: FlatCAMApp.py:4474 +#: App_Main.py:3966 msgid "" "Changing the units of the project\n" "will scale all objects.\n" @@ -564,32 +17244,32 @@ msgstr "" "aller Objekte entsprechend skaliert.\n" "Wollen Sie Fortsetzen?" -#: FlatCAMApp.py:4477 FlatCAMApp.py:5025 FlatCAMApp.py:5102 FlatCAMApp.py:7728 -#: FlatCAMApp.py:7742 FlatCAMApp.py:8075 FlatCAMApp.py:8085 +#: App_Main.py:3969 App_Main.py:4451 App_Main.py:4528 App_Main.py:6972 +#: App_Main.py:6986 App_Main.py:7319 App_Main.py:7329 msgid "Ok" msgstr "Ok" -#: FlatCAMApp.py:4526 +#: App_Main.py:4019 msgid "Converted units to" msgstr "Einheiten wurden umgerechnet in" -#: FlatCAMApp.py:4928 +#: App_Main.py:4351 msgid "Detachable Tabs" msgstr "Abnehmbare Laschen" -#: FlatCAMApp.py:5014 flatcamTools/ToolNCC.py:932 flatcamTools/ToolNCC.py:1431 -#: 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." +#: App_Main.py:4380 +#, fuzzy +#| msgid "Workspace Settings" +msgid "Workspace enabled." +msgstr "Arbeitsbereichseinstellungen" -#: FlatCAMApp.py:5018 flatcamTools/ToolNCC.py:936 flatcamTools/ToolPaint.py:862 -#: flatcamTools/ToolSolderPaste.py:572 -msgid "Adding Tool cancelled" -msgstr "Addierwerkzeug abgebrochen" +#: App_Main.py:4383 +#, fuzzy +#| msgid "Workspace Settings" +msgid "Workspace disabled." +msgstr "Arbeitsbereichseinstellungen" -#: FlatCAMApp.py:5021 +#: App_Main.py:4447 msgid "" "Adding Tool works only when Advanced is checked.\n" "Go to Preferences -> General - Show Advanced Options." @@ -598,11 +17278,11 @@ msgstr "" "ist.\n" "Gehen Sie zu Einstellungen -> Allgemein - Erweiterte Optionen anzeigen." -#: FlatCAMApp.py:5097 +#: App_Main.py:4523 msgid "Delete objects" msgstr "Objekte löschen" -#: FlatCAMApp.py:5100 +#: App_Main.py:4526 msgid "" "Are you sure you want to permanently delete\n" "the selected objects?" @@ -610,153 +17290,92 @@ msgstr "" "Möchten Sie die ausgewählten Objekte\n" "wirklich dauerhaft löschen?" -#: FlatCAMApp.py:5138 +#: App_Main.py:4564 msgid "Object(s) deleted" msgstr "Objekt (e) gelöscht" -#: FlatCAMApp.py:5142 FlatCAMApp.py:5297 flatcamTools/ToolDblSided.py:818 -msgid "Failed. No object(s) selected..." -msgstr "Gescheitert. Kein Objekt ausgewählt ..." - -#: FlatCAMApp.py:5144 +#: App_Main.py:4574 msgid "Save the work in Editor and try again ..." msgstr "Speichern Sie den Editor und versuchen Sie es erneut ..." -#: FlatCAMApp.py:5173 +#: App_Main.py:4603 msgid "Object deleted" msgstr "Objekt (e) gelöscht" -#: FlatCAMApp.py:5200 +#: App_Main.py:4630 msgid "Click to set the origin ..." msgstr "Klicken Sie hier, um den Ursprung festzulegen ..." -#: FlatCAMApp.py:5222 +#: App_Main.py:4652 msgid "Setting Origin..." msgstr "Ursprung setzten ..." -#: FlatCAMApp.py:5235 FlatCAMApp.py:5337 +#: App_Main.py:4665 App_Main.py:4767 msgid "Origin set" msgstr "Ursprung gesetzt" -#: FlatCAMApp.py:5252 +#: App_Main.py:4682 msgid "Origin coordinates specified but incomplete." msgstr "Ursprungskoordinaten angegeben, aber unvollständig." -#: FlatCAMApp.py:5293 +#: App_Main.py:4723 msgid "Moving to Origin..." msgstr "Umzug zum Ursprung ..." -#: FlatCAMApp.py:5374 +#: App_Main.py:4804 msgid "Jump to ..." msgstr "Springen zu ..." -#: FlatCAMApp.py:5375 +#: App_Main.py:4805 msgid "Enter the coordinates in format X,Y:" msgstr "Geben Sie die Koordinaten im Format X, Y ein:" -#: FlatCAMApp.py:5385 +#: App_Main.py:4815 msgid "Wrong coordinates. Enter coordinates in format: X,Y" msgstr "Falsche Koordinaten. Koordinaten im Format eingeben: X, Y" -#: FlatCAMApp.py:5463 FlatCAMApp.py:5612 -#: flatcamEditors/FlatCAMExcEditor.py:3624 -#: flatcamEditors/FlatCAMExcEditor.py:3632 -#: flatcamEditors/FlatCAMGeoEditor.py:4349 -#: flatcamEditors/FlatCAMGeoEditor.py:4363 -#: flatcamEditors/FlatCAMGrbEditor.py:1087 -#: flatcamEditors/FlatCAMGrbEditor.py:1204 -#: flatcamEditors/FlatCAMGrbEditor.py:1490 -#: flatcamEditors/FlatCAMGrbEditor.py:1759 -#: flatcamEditors/FlatCAMGrbEditor.py:4622 -#: flatcamEditors/FlatCAMGrbEditor.py:4637 flatcamGUI/MainGUI.py:3424 -#: flatcamGUI/MainGUI.py:3436 flatcamTools/ToolAlignObjects.py:393 -#: flatcamTools/ToolAlignObjects.py:415 -msgid "Done." -msgstr "Fertig." - -#: FlatCAMApp.py:5478 FlatCAMApp.py:7724 FlatCAMApp.py:7819 FlatCAMApp.py:7860 -#: FlatCAMApp.py:7901 FlatCAMApp.py:7942 FlatCAMApp.py:7983 FlatCAMApp.py:8027 -#: FlatCAMApp.py:8071 FlatCAMApp.py:8593 FlatCAMApp.py:8597 -#: flatcamTools/ToolProperties.py:116 -msgid "No object selected." -msgstr "Kein Objekt ausgewählt." - -#: FlatCAMApp.py:5497 +#: App_Main.py:4933 msgid "Bottom-Left" msgstr "Unten links" -#: FlatCAMApp.py:5498 flatcamGUI/preferences/tools/Tools2CalPrefGroupUI.py:131 -#: flatcamTools/ToolCalibration.py:159 -msgid "Top-Left" -msgstr "Oben links" - -#: FlatCAMApp.py:5499 flatcamGUI/preferences/tools/Tools2CalPrefGroupUI.py:132 -#: flatcamTools/ToolCalibration.py:160 -msgid "Bottom-Right" -msgstr "Unten rechts" - -#: FlatCAMApp.py:5500 +#: App_Main.py:4936 msgid "Top-Right" msgstr "Oben rechts" -#: FlatCAMApp.py:5501 flatcamGUI/ObjectUI.py:2706 -msgid "Center" -msgstr "Center" - -#: FlatCAMApp.py:5521 +#: App_Main.py:4957 msgid "Locate ..." msgstr "Lokalisieren ..." -#: FlatCAMApp.py:5779 FlatCAMApp.py:5856 +#: App_Main.py:5220 App_Main.py:5297 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:5882 +#: App_Main.py:5323 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:5888 +#: App_Main.py:5329 msgid "The current task was gracefully closed on user request..." msgstr "" "Die aktuelle Aufgabe wurde auf Benutzeranforderung ordnungsgemäß " "geschlossen ..." -#: FlatCAMApp.py:5916 flatcamGUI/preferences/PreferencesUIManager.py:905 -#: flatcamGUI/preferences/PreferencesUIManager.py:949 -#: flatcamGUI/preferences/PreferencesUIManager.py:970 -#: flatcamGUI/preferences/PreferencesUIManager.py:1075 -msgid "Preferences" -msgstr "Einstellungen" - -#: FlatCAMApp.py:5981 FlatCAMApp.py:6009 FlatCAMApp.py:6036 FlatCAMApp.py:6056 -#: FlatCAMDB.py:738 FlatCAMDB.py:913 FlatCAMDB.py:2200 FlatCAMDB.py:2418 -#: flatcamObjects/FlatCAMGeometry.py:890 flatcamTools/ToolNCC.py:3963 -#: flatcamTools/ToolNCC.py:4047 flatcamTools/ToolPaint.py:3553 -#: flatcamTools/ToolPaint.py:3638 -msgid "Tools Database" -msgstr "Werkzeugdatenbank" - -#: FlatCAMApp.py:6033 +#: App_Main.py:5474 msgid "Tools in Tools Database edited but not saved." msgstr "Werkzeugdatenbank geschlossen ohne zu speichern." -#: FlatCAMApp.py:6060 flatcamTools/ToolNCC.py:3970 -#: flatcamTools/ToolPaint.py:3560 -msgid "Tool from DB added in Tool Table." -msgstr "Werkzeug aus Werkzeugdatenbank zur Werkzeugtabelle hinzugefügt." - -#: FlatCAMApp.py:6062 +#: App_Main.py:5503 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:6080 +#: App_Main.py:5521 msgid "" "One or more Tools are edited.\n" "Do you want to update the Tools Database?" @@ -764,175 +17383,113 @@ msgstr "" "Ein oder mehrere Werkzeuge wurden geändert.\n" "Möchten Sie die Werkzeugdatenbank aktualisieren?" -#: FlatCAMApp.py:6082 +#: App_Main.py:5523 msgid "Save Tools Database" msgstr "Werkzeugdatenbank speichern" -#: FlatCAMApp.py:6135 +#: App_Main.py:5576 msgid "No object selected to Flip on Y axis." msgstr "Kein Objekt ausgewählt, um auf der Y-Achse zu spiegeln." -#: FlatCAMApp.py:6161 +#: App_Main.py:5602 msgid "Flip on Y axis done." msgstr "Y-Achse spiegeln fertig." -#: FlatCAMApp.py:6163 FlatCAMApp.py:6211 -#: flatcamEditors/FlatCAMGrbEditor.py:6059 -msgid "Flip action was not executed." -msgstr "Flip-Aktion wurde nicht ausgeführt." - -#: FlatCAMApp.py:6183 +#: App_Main.py:5624 msgid "No object selected to Flip on X axis." msgstr "Es wurde kein Objekt zum Spiegeln auf der X-Achse ausgewählt." -#: FlatCAMApp.py:6209 +#: App_Main.py:5650 msgid "Flip on X axis done." msgstr "Flip on X axis done." -#: FlatCAMApp.py:6231 +#: App_Main.py:5672 msgid "No object selected to Rotate." msgstr "Es wurde kein Objekt zum Drehen ausgewählt." -#: FlatCAMApp.py:6234 FlatCAMApp.py:6287 FlatCAMApp.py:6326 +#: App_Main.py:5675 App_Main.py:5726 App_Main.py:5763 msgid "Transform" msgstr "Verwandeln" -#: FlatCAMApp.py:6234 FlatCAMApp.py:6287 FlatCAMApp.py:6326 +#: App_Main.py:5675 App_Main.py:5726 App_Main.py:5763 msgid "Enter the Angle value:" msgstr "Geben Sie den Winkelwert ein:" -#: FlatCAMApp.py:6265 +#: App_Main.py:5705 msgid "Rotation done." msgstr "Rotation abgeschlossen." -#: FlatCAMApp.py:6267 +#: App_Main.py:5707 msgid "Rotation movement was not executed." msgstr "Drehbewegung wurde nicht ausgeführt." -#: FlatCAMApp.py:6285 +#: App_Main.py:5724 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:6307 +#: App_Main.py:5745 msgid "Skew on X axis done." msgstr "Neigung auf der X-Achse." -#: FlatCAMApp.py:6324 +#: App_Main.py:5761 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:6346 +#: App_Main.py:5782 msgid "Skew on Y axis done." msgstr "Neigung auf der Y-Achse." -#: FlatCAMApp.py:6497 FlatCAMApp.py:6544 flatcamGUI/MainGUI.py:503 -#: flatcamGUI/MainGUI.py:1728 -msgid "Select All" -msgstr "Select All" - -#: FlatCAMApp.py:6501 FlatCAMApp.py:6548 flatcamGUI/MainGUI.py:505 -msgid "Deselect All" -msgstr "Alle abwählen" - -#: FlatCAMApp.py:6564 -msgid "All objects are selected." -msgstr "Alle Objekte werden ausgewählt." - -#: FlatCAMApp.py:6574 -msgid "Objects selection is cleared." -msgstr "Die Objektauswahl wird gelöscht." - -#: FlatCAMApp.py:6594 flatcamGUI/MainGUI.py:1721 -msgid "Grid On/Off" -msgstr "Raster ein/aus" - -#: FlatCAMApp.py:6606 flatcamEditors/FlatCAMGeoEditor.py:939 -#: flatcamEditors/FlatCAMGrbEditor.py:2583 -#: flatcamEditors/FlatCAMGrbEditor.py:5641 flatcamGUI/ObjectUI.py:1595 -#: 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 "Hinzufügen" - -#: FlatCAMApp.py:6608 flatcamEditors/FlatCAMGrbEditor.py:2588 -#: flatcamEditors/FlatCAMGrbEditor.py:2736 flatcamGUI/MainGUI.py:751 -#: flatcamGUI/MainGUI.py:1074 flatcamGUI/MainGUI.py:2141 -#: flatcamGUI/MainGUI.py:2284 flatcamGUI/MainGUI.py:2777 -#: flatcamGUI/ObjectUI.py:1623 flatcamObjects/FlatCAMGeometry.py:505 -#: 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 "Löschen" - -#: FlatCAMApp.py:6624 +#: App_Main.py:5861 msgid "New Grid ..." msgstr "Neues Raster ..." -#: FlatCAMApp.py:6625 +#: App_Main.py:5862 msgid "Enter a Grid Value:" msgstr "Geben Sie einen Rasterwert ein:" -#: FlatCAMApp.py:6633 FlatCAMApp.py:6660 +#: App_Main.py:5870 App_Main.py:5894 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:6639 +#: App_Main.py:5875 msgid "New Grid added" msgstr "Neues Raster" -#: FlatCAMApp.py:6642 +#: App_Main.py:5877 msgid "Grid already exists" msgstr "Netz existiert bereits" -#: FlatCAMApp.py:6645 +#: App_Main.py:5879 msgid "Adding New Grid cancelled" msgstr "Neues Netz wurde abgebrochen" -#: FlatCAMApp.py:6667 +#: App_Main.py:5900 msgid " Grid Value does not exist" msgstr " Rasterwert existiert nicht" -#: FlatCAMApp.py:6670 +#: App_Main.py:5902 msgid "Grid Value deleted" msgstr "Rasterwert gelöscht" -#: FlatCAMApp.py:6673 +#: App_Main.py:5904 msgid "Delete Grid value cancelled" msgstr "Rasterwert löschen abgebrochen" -#: FlatCAMApp.py:6679 +#: App_Main.py:5910 msgid "Key Shortcut List" msgstr "Tastenkürzel Liste" -#: FlatCAMApp.py:6713 +#: App_Main.py:5944 msgid " No object selected to copy it's name" msgstr " Kein Objekt zum Kopieren des Namens ausgewählt" -#: FlatCAMApp.py:6717 +#: App_Main.py:5948 msgid "Name copied on clipboard ..." msgstr "Name in Zwischenablage kopiert ..." -#: FlatCAMApp.py:6930 flatcamEditors/FlatCAMGrbEditor.py:4554 -msgid "Coordinates copied to clipboard." -msgstr "Koordinaten in die Zwischenablage kopiert." - -#: FlatCAMApp.py:7167 FlatCAMApp.py:7173 FlatCAMApp.py:7179 FlatCAMApp.py:7185 -#: flatcamObjects/ObjectCollection.py:922 -#: flatcamObjects/ObjectCollection.py:928 -#: flatcamObjects/ObjectCollection.py:934 -#: flatcamObjects/ObjectCollection.py:940 -#: flatcamObjects/ObjectCollection.py:946 -#: flatcamObjects/ObjectCollection.py:952 -msgid "selected" -msgstr "ausgewählt" - -#: FlatCAMApp.py:7340 +#: App_Main.py:6581 msgid "" "There are files/objects opened in FlatCAM.\n" "Creating a New project will delete them.\n" @@ -942,17 +17499,12 @@ msgstr "" "Wenn Sie ein neues Projekt erstellen, werden diese gelöscht.\n" "Möchten Sie das Projekt speichern?" -#: FlatCAMApp.py:7361 +#: App_Main.py:6602 msgid "New Project created" msgstr "Neues Projekt erstellt" -#: FlatCAMApp.py:7519 FlatCAMApp.py:7523 flatcamGUI/MainGUI.py:836 -#: flatcamGUI/MainGUI.py:2544 -msgid "Open Gerber" -msgstr "Gerber öffnen" - -#: FlatCAMApp.py:7528 FlatCAMApp.py:7565 FlatCAMApp.py:7607 FlatCAMApp.py:7677 -#: FlatCAMApp.py:8462 FlatCAMApp.py:9675 FlatCAMApp.py:9737 +#: App_Main.py:6772 App_Main.py:6809 App_Main.py:6851 App_Main.py:6921 +#: App_Main.py:7704 App_Main.py:8917 App_Main.py:8979 msgid "" "Canvas initialization started.\n" "Canvas initialization finished in" @@ -960,351 +17512,296 @@ msgstr "" "Die Canvas-Initialisierung wurde gestartet.\n" "Canvas-Initialisierung abgeschlossen in" -#: FlatCAMApp.py:7530 +#: App_Main.py:6774 msgid "Opening Gerber file." msgstr "Gerber-Datei öffnen." -#: FlatCAMApp.py:7557 FlatCAMApp.py:7561 flatcamGUI/MainGUI.py:838 -#: flatcamGUI/MainGUI.py:2546 -msgid "Open Excellon" -msgstr "Excellon öffnen" - -#: FlatCAMApp.py:7567 +#: App_Main.py:6811 msgid "Opening Excellon file." msgstr "Excellon-Datei öffnen." -#: FlatCAMApp.py:7598 FlatCAMApp.py:7602 +#: App_Main.py:6842 App_Main.py:6846 msgid "Open G-Code" msgstr "G-Code öffnen" -#: FlatCAMApp.py:7609 +#: App_Main.py:6853 msgid "Opening G-Code file." msgstr "Öffnen der G-Code-Datei." -#: FlatCAMApp.py:7632 FlatCAMApp.py:7635 flatcamGUI/MainGUI.py:1730 -msgid "Open Project" -msgstr "Projekt öffnen" - -#: FlatCAMApp.py:7668 FlatCAMApp.py:7672 +#: App_Main.py:6912 App_Main.py:6916 msgid "Open HPGL2" msgstr "HPGL2 öffnen" -#: FlatCAMApp.py:7679 +#: App_Main.py:6923 msgid "Opening HPGL2 file." msgstr "HPGL2-Datei öffnen." -#: FlatCAMApp.py:7702 FlatCAMApp.py:7705 +#: App_Main.py:6946 App_Main.py:6949 msgid "Open Configuration File" msgstr "Einstellungsdatei öffne" -#: FlatCAMApp.py:7725 FlatCAMApp.py:8072 +#: App_Main.py:6969 App_Main.py:7316 msgid "Please Select a Geometry object to export" msgstr "Bitte wählen Sie ein Geometrieobjekt zum Exportieren aus" -#: FlatCAMApp.py:7739 +#: App_Main.py:6983 msgid "Only Geometry, Gerber and CNCJob objects can be used." msgstr "Es können nur Geometrie-, Gerber- und CNCJob-Objekte verwendet werden." -#: FlatCAMApp.py:7752 FlatCAMApp.py:7756 flatcamTools/ToolQRCode.py:829 -#: flatcamTools/ToolQRCode.py:833 -msgid "Export SVG" -msgstr "SVG exportieren" - -#: FlatCAMApp.py:7781 +#: App_Main.py:7025 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:7787 FlatCAMApp.py:7791 +#: App_Main.py:7031 App_Main.py:7035 msgid "Export PNG Image" msgstr "PNG-Bild exportieren" -#: FlatCAMApp.py:7824 FlatCAMApp.py:8032 +#: App_Main.py:7068 App_Main.py:7276 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:7836 +#: App_Main.py:7080 msgid "Save Gerber source file" msgstr "Gerber-Quelldatei speichern" -#: FlatCAMApp.py:7865 +#: App_Main.py:7109 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:7877 +#: App_Main.py:7121 msgid "Save Script source file" msgstr "Speichern Sie die Quelldatei des Skripts" -#: FlatCAMApp.py:7906 +#: App_Main.py:7150 msgid "Failed. Only Document objects can be saved as Document files..." msgstr "" "Gescheitert. Nur Dokumentobjekte können als Dokumentdateien gespeichert " "werden ..." -#: FlatCAMApp.py:7918 +#: App_Main.py:7162 msgid "Save Document source file" msgstr "Speichern Sie die Quelldatei des Dokuments" -#: FlatCAMApp.py:7947 FlatCAMApp.py:7988 FlatCAMApp.py:8945 +#: App_Main.py:7191 App_Main.py:7232 App_Main.py:8187 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:7955 FlatCAMApp.py:7959 +#: App_Main.py:7199 App_Main.py:7203 msgid "Save Excellon source file" msgstr "Speichern Sie die Excellon-Quelldatei" -#: FlatCAMApp.py:7996 FlatCAMApp.py:8000 +#: App_Main.py:7240 App_Main.py:7244 msgid "Export Excellon" msgstr "Excellon exportieren" -#: FlatCAMApp.py:8040 FlatCAMApp.py:8044 +#: App_Main.py:7284 App_Main.py:7288 msgid "Export Gerber" msgstr "Gerber exportieren" -#: FlatCAMApp.py:8082 +#: App_Main.py:7326 msgid "Only Geometry objects can be used." msgstr "Es können nur Geometrieobjekte verwendet werden." -#: FlatCAMApp.py:8096 FlatCAMApp.py:8100 +#: App_Main.py:7340 App_Main.py:7344 msgid "Export DXF" msgstr "DXF exportieren" -#: FlatCAMApp.py:8125 FlatCAMApp.py:8128 +#: App_Main.py:7369 App_Main.py:7372 msgid "Import SVG" msgstr "SVG importieren" -#: FlatCAMApp.py:8156 FlatCAMApp.py:8160 +#: App_Main.py:7400 App_Main.py:7404 msgid "Import DXF" msgstr "Importieren Sie DXF" -#: FlatCAMApp.py:8210 +#: App_Main.py:7454 msgid "Viewing the source code of the selected object." msgstr "Anzeigen des Quellcodes des ausgewählten Objekts." -#: FlatCAMApp.py:8211 flatcamObjects/FlatCAMCNCJob.py:548 -#: flatcamObjects/FlatCAMScript.py:134 -msgid "Loading..." -msgstr "Wird geladen..." - -#: FlatCAMApp.py:8217 FlatCAMApp.py:8221 +#: App_Main.py:7461 App_Main.py:7465 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:8235 +#: App_Main.py:7479 msgid "Source Editor" msgstr "Quelleditor" -#: FlatCAMApp.py:8275 FlatCAMApp.py:8282 +#: App_Main.py:7519 App_Main.py:7526 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:8294 +#: App_Main.py:7538 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:8308 flatcamObjects/FlatCAMCNCJob.py:562 -msgid "Code Editor" -msgstr "Code-Editor" - -#: FlatCAMApp.py:8330 +#: App_Main.py:7574 msgid "Go to Line ..." msgstr "Gehe zur Linie ..." -#: FlatCAMApp.py:8331 +#: App_Main.py:7575 msgid "Line:" msgstr "Linie:" -#: FlatCAMApp.py:8360 +#: App_Main.py:7602 msgid "New TCL script file created in Code Editor." msgstr "Neue TCL-Skriptdatei, die im Code-Editor erstellt wurde." -#: FlatCAMApp.py:8396 FlatCAMApp.py:8398 FlatCAMApp.py:8434 FlatCAMApp.py:8436 +#: App_Main.py:7638 App_Main.py:7640 App_Main.py:7676 App_Main.py:7678 msgid "Open TCL script" msgstr "Öffnen Sie das TCL-Skript" -#: FlatCAMApp.py:8464 +#: App_Main.py:7706 msgid "Executing ScriptObject file." msgstr "Ausführen der ScriptObject-Datei." -#: FlatCAMApp.py:8472 FlatCAMApp.py:8475 +#: App_Main.py:7714 App_Main.py:7717 msgid "Run TCL script" msgstr "Führen Sie das TCL-Skript aus" -#: FlatCAMApp.py:8498 +#: App_Main.py:7740 msgid "TCL script file opened in Code Editor and executed." msgstr "TCL-Skriptdatei im Code-Editor geöffnet und ausgeführt." -#: FlatCAMApp.py:8549 FlatCAMApp.py:8555 +#: App_Main.py:7791 App_Main.py:7797 msgid "Save Project As ..." msgstr "Projekt speichern als ..." -#: FlatCAMApp.py:8551 flatcamGUI/MainGUI.py:1134 -#: flatcamGUI/MainGUI.py:2176 -msgid "Project" -msgstr "Projekt" - -#: FlatCAMApp.py:8590 +#: App_Main.py:7832 msgid "FlatCAM objects print" msgstr "FlatCAM-Objekte werden gedruckt" -#: FlatCAMApp.py:8603 FlatCAMApp.py:8610 +#: App_Main.py:7845 App_Main.py:7852 msgid "Save Object as PDF ..." msgstr "Objekt als PDF speichern ..." -#: FlatCAMApp.py:8619 +#: App_Main.py:7861 msgid "Printing PDF ... Please wait." msgstr "PDF wird gedruckt ... Bitte warten." -#: FlatCAMApp.py:8798 +#: App_Main.py:8040 msgid "PDF file saved to" msgstr "PDF-Datei gespeichert in" -#: FlatCAMApp.py:8823 +#: App_Main.py:8065 msgid "Exporting SVG" msgstr "SVG exportieren" -#: FlatCAMApp.py:8866 +#: App_Main.py:8108 msgid "SVG file exported to" msgstr "SVG-Datei exportiert nach" -#: FlatCAMApp.py:8892 +#: App_Main.py:8134 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:9039 +#: App_Main.py:8281 msgid "Excellon file exported to" msgstr "Excellon-Datei exportiert nach" -#: FlatCAMApp.py:9048 +#: App_Main.py:8290 msgid "Exporting Excellon" msgstr "Excellon exportieren" -#: FlatCAMApp.py:9053 FlatCAMApp.py:9060 +#: App_Main.py:8295 App_Main.py:8302 msgid "Could not export Excellon file." msgstr "Excellon-Datei konnte nicht exportiert werden." -#: FlatCAMApp.py:9175 +#: App_Main.py:8417 msgid "Gerber file exported to" msgstr "Gerberdatei exportiert nach" -#: FlatCAMApp.py:9183 +#: App_Main.py:8425 msgid "Exporting Gerber" msgstr "Gerber exportieren" -#: FlatCAMApp.py:9188 FlatCAMApp.py:9195 +#: App_Main.py:8430 App_Main.py:8437 msgid "Could not export Gerber file." msgstr "Gerber-Datei konnte nicht exportiert werden." -#: FlatCAMApp.py:9230 +#: App_Main.py:8472 msgid "DXF file exported to" msgstr "DXF-Datei exportiert nach" -#: FlatCAMApp.py:9236 +#: App_Main.py:8478 msgid "Exporting DXF" msgstr "DXF exportieren" -#: FlatCAMApp.py:9241 FlatCAMApp.py:9248 +#: App_Main.py:8483 App_Main.py:8490 msgid "Could not export DXF file." msgstr "DXF-Datei konnte nicht exportiert werden." -#: FlatCAMApp.py:9272 FlatCAMApp.py:9319 flatcamTools/ToolImage.py:277 -msgid "" -"Not supported type is picked as parameter. Only Geometry and Gerber are " -"supported" -msgstr "" -"Nicht unterstützte Art wird als Parameter ausgewählt. Nur Geometrie und " -"Gerber werden unterstützt" - -#: FlatCAMApp.py:9282 +#: App_Main.py:8524 msgid "Importing SVG" msgstr "SVG importieren" -#: FlatCAMApp.py:9290 FlatCAMApp.py:9336 +#: App_Main.py:8532 App_Main.py:8578 msgid "Import failed." msgstr "Import fehlgeschlagen." -#: FlatCAMApp.py:9297 FlatCAMApp.py:9343 FlatCAMApp.py:9407 FlatCAMApp.py:9474 -#: FlatCAMApp.py:9540 FlatCAMApp.py:9605 FlatCAMApp.py:9662 -#: flatcamTools/ToolImage.py:297 flatcamTools/ToolPDF.py:225 -msgid "Opened" -msgstr "Geöffnet" - -#: FlatCAMApp.py:9328 +#: App_Main.py:8570 msgid "Importing DXF" msgstr "DXF importieren" -#: FlatCAMApp.py:9369 FlatCAMApp.py:9564 FlatCAMApp.py:9629 +#: App_Main.py:8611 App_Main.py:8806 App_Main.py:8871 msgid "Failed to open file" msgstr "Datei konnte nicht geöffnet werden" -#: FlatCAMApp.py:9372 FlatCAMApp.py:9567 FlatCAMApp.py:9632 +#: App_Main.py:8614 App_Main.py:8809 App_Main.py:8874 msgid "Failed to parse file" msgstr "Datei konnte nicht analysiert werden" -#: FlatCAMApp.py:9384 +#: App_Main.py:8626 msgid "Object is not Gerber file or empty. Aborting object creation." msgstr "" "Objekt ist keine Gerberdatei oder leer. Objekterstellung wird abgebrochen." -#: FlatCAMApp.py:9389 +#: App_Main.py:8631 msgid "Opening Gerber" msgstr "Gerber öffnen" -#: FlatCAMApp.py:9400 +#: App_Main.py:8642 msgid "Open Gerber failed. Probable not a Gerber file." msgstr "Open Gerber ist fehlgeschlagen. Wahrscheinlich keine Gerber-Datei." -#: FlatCAMApp.py:9432 flatcamTools/ToolPcbWizard.py:424 -msgid "This is not Excellon file." -msgstr "Dies ist keine Excellon-Datei." - -#: FlatCAMApp.py:9436 +#: App_Main.py:8678 msgid "Cannot open file" msgstr "Kann Datei nicht öffnen" -#: FlatCAMApp.py:9454 flatcamTools/ToolPDF.py:275 -#: flatcamTools/ToolPcbWizard.py:445 -msgid "No geometry found in file" -msgstr "Keine Geometrie in der Datei gefunden" - -#: FlatCAMApp.py:9457 +#: App_Main.py:8699 msgid "Opening Excellon." msgstr "Eröffnung Excellon." -#: FlatCAMApp.py:9467 +#: App_Main.py:8709 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:9499 +#: App_Main.py:8741 msgid "Reading GCode file" msgstr "GCode-Datei wird gelesen" -#: FlatCAMApp.py:9505 -msgid "Failed to open" -msgstr "Gescheitert zu öffnen" - -#: FlatCAMApp.py:9512 +#: App_Main.py:8754 msgid "This is not GCODE" msgstr "Dies ist kein GCODE" -#: FlatCAMApp.py:9517 +#: App_Main.py:8759 msgid "Opening G-Code." msgstr "G-Code öffnen." -#: FlatCAMApp.py:9530 +#: App_Main.py:8772 msgid "" "Failed to create CNCJob Object. Probable not a GCode file. Try to load it " "from File menu.\n" @@ -1316,127 +17813,133 @@ msgstr "" "Der Versuch, ein FlatCAM CNCJob-Objekt aus einer G-Code-Datei zu erstellen, " "ist während der Verarbeitung fehlgeschlagen" -#: FlatCAMApp.py:9586 +#: App_Main.py:8828 msgid "Object is not HPGL2 file or empty. Aborting object creation." msgstr "" "Objekt ist keine HPGL2-Datei oder leer. Objekterstellung wird abgebrochen." -#: FlatCAMApp.py:9591 +#: App_Main.py:8833 msgid "Opening HPGL2" msgstr "HPGL2 öffnen" -#: FlatCAMApp.py:9598 +#: App_Main.py:8840 msgid " Open HPGL2 failed. Probable not a HPGL2 file." msgstr " HPGL2 öffnen ist fehlgeschlagen. Wahrscheinlich keine HPGL2-Datei." -#: FlatCAMApp.py:9624 +#: App_Main.py:8866 msgid "TCL script file opened in Code Editor." msgstr "TCL-Skriptdatei im Code-Editor geöffnet." -#: FlatCAMApp.py:9644 +#: App_Main.py:8886 msgid "Opening TCL Script..." msgstr "TCL-Skript wird geöffnet ..." -#: FlatCAMApp.py:9655 +#: App_Main.py:8897 msgid "Failed to open TCL Script." msgstr "TCL-Skript konnte nicht geöffnet werden." -#: FlatCAMApp.py:9677 +#: App_Main.py:8919 msgid "Opening FlatCAM Config file." msgstr "Öffnen der FlatCAM Config-Datei." -#: FlatCAMApp.py:9705 +#: App_Main.py:8947 msgid "Failed to open config file" msgstr "Fehler beim Öffnen der Konfigurationsdatei" -#: FlatCAMApp.py:9734 +#: App_Main.py:8976 msgid "Loading Project ... Please Wait ..." msgstr "Projekt wird geladen ... Bitte warten ..." -#: FlatCAMApp.py:9739 +#: App_Main.py:8981 msgid "Opening FlatCAM Project file." msgstr "Öffnen der FlatCAM-Projektdatei." -#: FlatCAMApp.py:9754 FlatCAMApp.py:9758 FlatCAMApp.py:9775 +#: App_Main.py:8996 App_Main.py:9000 App_Main.py:9017 msgid "Failed to open project file" msgstr "Projektdatei konnte nicht geöffnet werden" -#: FlatCAMApp.py:9812 +#: App_Main.py:9054 msgid "Loading Project ... restoring" msgstr "Projekt wird geladen ... wird wiederhergestellt" -#: FlatCAMApp.py:9822 +#: App_Main.py:9064 msgid "Project loaded from" msgstr "Projekt geladen von" -#: FlatCAMApp.py:9846 +#: App_Main.py:9090 msgid "Redrawing all objects" msgstr "Alle Objekte neu zeichnen" -#: FlatCAMApp.py:9934 +#: App_Main.py:9178 msgid "Failed to load recent item list." msgstr "Fehler beim Laden der letzten Elementliste." -#: FlatCAMApp.py:9941 +#: App_Main.py:9185 msgid "Failed to parse recent item list." msgstr "Liste der letzten Artikel konnte nicht analysiert werden." -#: FlatCAMApp.py:9951 +#: App_Main.py:9195 msgid "Failed to load recent projects item list." msgstr "Fehler beim Laden der Artikelliste der letzten Projekte." -#: FlatCAMApp.py:9958 +#: App_Main.py:9202 msgid "Failed to parse recent project item list." msgstr "" "Fehler beim Analysieren der Liste der zuletzt verwendeten Projektelemente." -#: FlatCAMApp.py:10019 +#: App_Main.py:9263 msgid "Clear Recent projects" msgstr "Letzte Projekte löschen" -#: FlatCAMApp.py:10043 +#: App_Main.py:9287 msgid "Clear Recent files" msgstr "Letzte Dateien löschen" -#: FlatCAMApp.py:10065 flatcamGUI/MainGUI.py:1363 -msgid "Shortcut Key List" -msgstr " Liste der Tastenkombinationen " - -#: FlatCAMApp.py:10145 +#: App_Main.py:9389 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:10146 +#: App_Main.py:9390 msgid "Details" msgstr "Einzelheiten" -#: FlatCAMApp.py:10148 +#: App_Main.py:9392 msgid "The normal flow when working in FlatCAM is the following:" msgstr "Der normale Ablauf beim Arbeiten in FlatCAM ist der folgende:" -#: FlatCAMApp.py:10149 +#: App_Main.py:9393 +#, fuzzy +#| 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." 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." +"dropping the files on the AppGUI." msgstr "" "Laden / Importieren Sie eine Gerber-, Excellon-, Gcode-, DXF-, Rasterbild- " "oder SVG-Datei mithilfe der Symbolleisten, Tastenkombinationen oder durch " "Ziehen und Ablegen der Dateien auf der GUI in FlatCAM." -#: FlatCAMApp.py:10152 +#: App_Main.py:9396 +#, fuzzy +#| 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." 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 " +"drag and drop of the file into the FLATCAM AppGUI or through the menu (or " "toolbar) actions offered within the app." msgstr "" "Sie können ein FlatCAM-Projekt auch laden, indem Sie auf die Projektdatei " "doppelklicken, sie per Drag & Drop in die FLATCAM-Benutzeroberfläche ziehen " "oder über die in der App angebotenen Menü- (oder Symbolleisten-) Aktionen." -#: FlatCAMApp.py:10155 +#: App_Main.py:9399 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 " @@ -1449,7 +17952,7 @@ msgstr "" "AUSGEWÄHLTES TAB mit den Objekteigenschaften entsprechend der Art " "aktualisiert: Gerber, Excellon-, Geometrie- oder CNCJob-Objekt." -#: FlatCAMApp.py:10159 +#: App_Main.py:9403 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 " @@ -1464,7 +17967,7 @@ msgstr "" "doppelklicken, um das Ausgewählte Registerkarte zu öffnen und es zu füllen, " "selbst wenn es unscharf war." -#: FlatCAMApp.py:10163 +#: App_Main.py:9407 msgid "" "You can change the parameters in this screen and the flow direction is like " "this:" @@ -1472,7 +17975,7 @@ msgstr "" "Sie können die Parameter in diesem Bildschirm ändern und die Flussrichtung " "ist wie folgt:" -#: FlatCAMApp.py:10164 +#: App_Main.py:9408 msgid "" "Gerber/Excellon Object --> Change Parameter --> Generate Geometry --> " "Geometry Object --> Add tools (change param in Selected Tab) --> Generate " @@ -1485,7 +17988,7 @@ msgstr "" "überprüfen (über CNC bearbeiten) Code) und / oder GCode anhängen / " "voranstellen (ebenfalls in Ausgewählte Registerkarte) -> GCode speichern." -#: FlatCAMApp.py:10168 +#: App_Main.py:9412 msgid "" "A list of key shortcuts is available through an menu entry in Help --> " "Shortcuts List or through its own key shortcut: F3." @@ -1494,33 +17997,33 @@ msgstr "" "der Hilfe -> Liste der Tastenkombinationen oder über eine eigene " "Tastenkombination: F3." -#: FlatCAMApp.py:10232 +#: App_Main.py:9476 msgid "Failed checking for latest version. Could not connect." msgstr "" "Fehler bei der Suche nach der neuesten Version. Konnte keine Verbindung " "herstellen." -#: FlatCAMApp.py:10239 +#: App_Main.py:9483 msgid "Could not parse information about latest version." msgstr "Informationen zur neuesten Version konnten nicht analysiert werden." -#: FlatCAMApp.py:10249 +#: App_Main.py:9493 msgid "FlatCAM is up to date!" msgstr "FlatCAM ist auf dem neuesten Version!" -#: FlatCAMApp.py:10254 +#: App_Main.py:9498 msgid "Newer Version Available" msgstr "Neuere Version verfügbar" -#: FlatCAMApp.py:10256 +#: App_Main.py:9500 msgid "There is a newer version of FlatCAM available for download:" msgstr "Es gibt eine neuere Version von FlatCAM zum Download:" -#: FlatCAMApp.py:10260 +#: App_Main.py:9504 msgid "info" msgstr "Info" -#: FlatCAMApp.py:10288 +#: App_Main.py:9532 msgid "" "OpenGL canvas initialization failed. HW or HW configuration not supported." "Change the graphic engine to Legacy(2D) in Edit -> Preferences -> General " @@ -1532,129 +18035,75 @@ msgstr "" "Einstellungen -> Registerkarte Allgemein in Legacy (2D).\n" "\n" -#: FlatCAMApp.py:10367 +#: App_Main.py:9610 msgid "All plots disabled." msgstr "Alle Diagramme sind deaktiviert." -#: FlatCAMApp.py:10374 +#: App_Main.py:9617 msgid "All non selected plots disabled." msgstr "Alle nicht ausgewählten Diagramme sind deaktiviert." -#: FlatCAMApp.py:10381 +#: App_Main.py:9624 msgid "All plots enabled." msgstr "Alle Diagramme aktiviert." -#: FlatCAMApp.py:10387 +#: App_Main.py:9630 msgid "Selected plots enabled..." msgstr "Ausgewählte Diagramme aktiviert ..." -#: FlatCAMApp.py:10395 +#: App_Main.py:9638 msgid "Selected plots disabled..." msgstr "Ausgewählte Diagramme deaktiviert ..." -#: FlatCAMApp.py:10428 +#: App_Main.py:9671 msgid "Enabling plots ..." msgstr "Diagramm aktivieren..." -#: FlatCAMApp.py:10480 +#: App_Main.py:9720 msgid "Disabling plots ..." msgstr "Diagramm deaktivieren..." -#: FlatCAMApp.py:10503 +#: App_Main.py:9743 msgid "Working ..." msgstr "Arbeiten ..." -#: FlatCAMApp.py:10558 flatcamGUI/MainGUI.py:703 -msgid "Red" -msgstr "Rote" - -#: FlatCAMApp.py:10560 flatcamGUI/MainGUI.py:706 -msgid "Blue" -msgstr "Blau" - -#: FlatCAMApp.py:10563 flatcamGUI/MainGUI.py:709 -msgid "Yellow" -msgstr "Gelb" - -#: FlatCAMApp.py:10565 flatcamGUI/MainGUI.py:712 -msgid "Green" -msgstr "Grün" - -#: FlatCAMApp.py:10567 flatcamGUI/MainGUI.py:715 -msgid "Purple" -msgstr "Lila" - -#: FlatCAMApp.py:10569 flatcamGUI/MainGUI.py:718 -msgid "Brown" -msgstr "Braun" - -#: FlatCAMApp.py:10571 FlatCAMApp.py:10627 flatcamGUI/MainGUI.py:721 -msgid "White" -msgstr "Weiß" - -#: FlatCAMApp.py:10573 flatcamGUI/MainGUI.py:724 -msgid "Black" -msgstr "Schwarz" - -#: FlatCAMApp.py:10576 flatcamGUI/MainGUI.py:729 -msgid "Custom" -msgstr "Maßgeschn." - -#: FlatCAMApp.py:10586 flatcamGUI/MainGUI.py:737 -msgid "Default" -msgstr "Standard" - -#: FlatCAMApp.py:10610 flatcamGUI/MainGUI.py:734 -msgid "Opacity" -msgstr "Opazität" - -#: FlatCAMApp.py:10612 +#: App_Main.py:9852 msgid "Set alpha level ..." msgstr "Alpha-Level einstellen ..." -#: FlatCAMApp.py:10612 -#: flatcamGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py:131 -#: flatcamGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:133 -#: flatcamGUI/preferences/tools/ToolsTransformPrefGroupUI.py:220 -#: flatcamTools/ToolExtractDrills.py:164 flatcamTools/ToolExtractDrills.py:285 -#: flatcamTools/ToolPunchGerber.py:192 flatcamTools/ToolPunchGerber.py:308 -#: flatcamTools/ToolTransform.py:357 -msgid "Value" -msgstr "Wert" - -#: FlatCAMApp.py:10666 +#: App_Main.py:9906 msgid "Saving FlatCAM Project" msgstr "FlatCAM-Projekt speichern" -#: FlatCAMApp.py:10687 FlatCAMApp.py:10723 +#: App_Main.py:9927 App_Main.py:9963 msgid "Project saved to" msgstr "Projekt gespeichert in" -#: FlatCAMApp.py:10694 +#: App_Main.py:9934 msgid "The object is used by another application." msgstr "Das Objekt wird von einer anderen Anwendung verwendet." -#: FlatCAMApp.py:10708 +#: App_Main.py:9948 msgid "Failed to verify project file" msgstr "Fehler beim Überprüfen der Projektdatei" -#: FlatCAMApp.py:10708 FlatCAMApp.py:10716 FlatCAMApp.py:10726 +#: App_Main.py:9948 App_Main.py:9956 App_Main.py:9966 msgid "Retry to save it." msgstr "Versuchen Sie erneut, es zu speichern." -#: FlatCAMApp.py:10716 FlatCAMApp.py:10726 +#: App_Main.py:9956 App_Main.py:9966 msgid "Failed to parse saved project file" msgstr "Fehler beim Parsen der Projektdatei" -#: FlatCAMBookmark.py:57 FlatCAMBookmark.py:84 +#: Bookmark.py:57 Bookmark.py:84 msgid "Title" msgstr "Titel" -#: FlatCAMBookmark.py:58 FlatCAMBookmark.py:88 +#: Bookmark.py:58 Bookmark.py:88 msgid "Web Link" msgstr "Weblink" -#: FlatCAMBookmark.py:62 +#: Bookmark.py:62 msgid "" "Index.\n" "The rows in gray color will populate the Bookmarks menu.\n" @@ -1664,7 +18113,7 @@ msgstr "" "Die grauen Zeilen füllen das Lesezeichen-Menü.\n" "Die Anzahl der grauen Zeilen wird in den Einstellungen festgelegt." -#: FlatCAMBookmark.py:66 +#: Bookmark.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." @@ -1672,1106 +18121,186 @@ msgstr "" "Beschreibung des Links, der als Menüaktion festgelegt wird.\n" "Versuchen Sie es kurz zu halten, da es als Menüelement installiert ist." -#: FlatCAMBookmark.py:69 +#: Bookmark.py:69 msgid "Web Link. E.g: https://your_website.org " msgstr "Weblink. ZB: https://your_website.org " -#: FlatCAMBookmark.py:78 +#: Bookmark.py:78 msgid "New Bookmark" msgstr "Neues Lesezeichen" -#: FlatCAMBookmark.py:97 +#: Bookmark.py:97 msgid "Add Entry" msgstr "Eintrag hinzufügen" -#: FlatCAMBookmark.py:98 +#: Bookmark.py:98 msgid "Remove Entry" msgstr "Eintrag entfernen" -#: FlatCAMBookmark.py:99 +#: Bookmark.py:99 msgid "Export List" msgstr "Liste exportieren" -#: FlatCAMBookmark.py:100 +#: Bookmark.py:100 msgid "Import List" msgstr "Liste importieren" -#: FlatCAMBookmark.py:190 +#: Bookmark.py:190 msgid "Title entry is empty." msgstr "Kein Titel eingegeben." -#: FlatCAMBookmark.py:199 +#: Bookmark.py:199 msgid "Web link entry is empty." msgstr "Keine Internetadresse angegeben." -#: FlatCAMBookmark.py:207 +#: Bookmark.py:207 msgid "Either the Title or the Weblink already in the table." msgstr "" "Entweder Titel oder Internetadresse sind bereits in der Tabelle vorhanden." -#: FlatCAMBookmark.py:227 +#: Bookmark.py:227 msgid "Bookmark added." msgstr "Lesezeichen verwalten." -#: FlatCAMBookmark.py:244 +#: Bookmark.py:244 msgid "This bookmark can not be removed" msgstr "Dieses Lesezeichen kann nicht entfernt werden" -#: FlatCAMBookmark.py:275 +#: Bookmark.py:275 msgid "Bookmark removed." msgstr "Lesezeichen entfernt." -#: FlatCAMBookmark.py:290 +#: Bookmark.py:290 msgid "Export FlatCAM Bookmarks" msgstr "Export der FlatCAM-Lesezeichen" -#: FlatCAMBookmark.py:293 flatcamGUI/MainGUI.py:524 -msgid "Bookmarks" -msgstr "Lesezeichen" - -#: FlatCAMBookmark.py:319 FlatCAMBookmark.py:349 +#: Bookmark.py:319 Bookmark.py:349 msgid "Could not load bookmarks file." msgstr "Die Lesezeichen-Datei konnte nicht geladen werden." -#: FlatCAMBookmark.py:329 +#: Bookmark.py:329 msgid "Failed to write bookmarks to file." msgstr "Fehler beim Schreiben der Lesezeichen in die Datei." -#: FlatCAMBookmark.py:331 +#: Bookmark.py:331 msgid "Exported bookmarks to" msgstr "Exportierte Lesezeichen nach" -#: FlatCAMBookmark.py:337 +#: Bookmark.py:337 msgid "Import FlatCAM Bookmarks" msgstr "Importieren Sie FlatCAM-Lesezeichen" -#: FlatCAMBookmark.py:356 +#: Bookmark.py:356 msgid "Imported Bookmarks from" msgstr "Importierte Lesezeichen von" -#: FlatCAMCommon.py:29 +#: Common.py:37 msgid "The user requested a graceful exit of the current task." msgstr "" "Der Benutzer hat einen ordnungsgemäßen Abschluss der aktuellen Aufgabe " "angefordert." -#: FlatCAMDB.py:86 -msgid "Add Geometry Tool in DB" -msgstr "Geometriewerkzeug in DB hinzufügen" +#: Common.py:250 +msgid "Click the end point of the area." +msgstr "Klicken Sie auf den Endpunkt des Bereichs." -#: 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." +#: Common.py:386 +msgid "Exclusion areas added. Checking overlap with the object geometry ..." msgstr "" -"Fügen Sie der Werkzeugdatenbank ein neues Werkzeug hinzu\n" -"Es wird in der Geometrie-Benutzeroberfläche verwendet.\n" -"Danach können Sie es modifizieren." -#: FlatCAMDB.py:102 FlatCAMDB.py:1657 -msgid "Delete Tool from DB" -msgstr "Werkzeug aus DB löschen" - -#: FlatCAMDB.py:104 FlatCAMDB.py:1659 -msgid "Remove a selection of tools in the Tools Database." -msgstr "Eine Auswahl von Werkzeugen aus der Werkzeugdatenbank entfernen." - -#: FlatCAMDB.py:108 FlatCAMDB.py:1663 -msgid "Export DB" -msgstr "DB exportieren" - -#: FlatCAMDB.py:110 FlatCAMDB.py:1665 -msgid "Save the Tools Database to a custom text file." -msgstr "Werkzeugdatenbank als Textdatei speichern." - -#: FlatCAMDB.py:114 FlatCAMDB.py:1669 -msgid "Import DB" -msgstr "Importieren Sie DB" - -#: FlatCAMDB.py:116 FlatCAMDB.py:1671 -msgid "Load the Tools Database information's from a custom text file." -msgstr "Werkzeugdatenbank aus einer Textdatei importieren." - -#: FlatCAMDB.py:120 FlatCAMDB.py:1681 -msgid "Add Tool from Tools DB" -msgstr "Werkzeug aus Werkzeugdatenbank hinzufügen" - -#: FlatCAMDB.py:122 FlatCAMDB.py:1683 -msgid "" -"Add a new tool in the Tools Table of the\n" -"active Geometry object after selecting a tool\n" -"in the Tools Database." +#: Common.py:392 +msgid "Failed. Exclusion areas intersects the object geometry ..." msgstr "" -"Fügen Sie ein neues Werkzeug in die Werkzeugtabelle der\n" -"aktiven Geometrie hinzu, nachdem Sie das Werkzeug in\n" -"der Werkzeugdatenbank ausgewählt haben." -#: FlatCAMDB.py:158 FlatCAMDB.py:833 FlatCAMDB.py:1087 -msgid "Tool Name" -msgstr "Werkzeugname" - -#: FlatCAMDB.py:159 FlatCAMDB.py:835 FlatCAMDB.py:1100 -#: flatcamEditors/FlatCAMExcEditor.py:1604 flatcamGUI/ObjectUI.py:1345 -#: flatcamGUI/ObjectUI.py:1583 -#: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:132 -#: flatcamTools/ToolNCC.py:278 flatcamTools/ToolNCC.py:287 -#: flatcamTools/ToolPaint.py:261 -msgid "Tool Dia" -msgstr "Werkzeugdurchm" - -#: FlatCAMDB.py:160 FlatCAMDB.py:837 FlatCAMDB.py:1281 -#: flatcamGUI/ObjectUI.py:1558 -msgid "Tool Offset" -msgstr "Werkzeugversatz" - -#: FlatCAMDB.py:161 FlatCAMDB.py:839 FlatCAMDB.py:1298 -msgid "Custom Offset" -msgstr "Selbstdefinierter Werkzeugversatz" - -#: FlatCAMDB.py:162 FlatCAMDB.py:841 FlatCAMDB.py:1265 -#: flatcamGUI/ObjectUI.py:309 -#: flatcamGUI/preferences/gerber/GerberAdvOptPrefGroupUI.py:67 -#: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:53 -#: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:62 -#: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:72 -#: flatcamTools/ToolNCC.py:213 flatcamTools/ToolNCC.py:227 -#: flatcamTools/ToolPaint.py:196 -msgid "Tool Type" -msgstr "Werkzeugtyp" - -#: FlatCAMDB.py:163 FlatCAMDB.py:843 FlatCAMDB.py:1113 -msgid "Tool Shape" -msgstr "Werkzeugform" - -#: FlatCAMDB.py:164 FlatCAMDB.py:846 FlatCAMDB.py:1129 -#: flatcamGUI/ObjectUI.py:350 flatcamGUI/ObjectUI.py:900 -#: flatcamGUI/ObjectUI.py:1703 flatcamGUI/ObjectUI.py:2336 -#: flatcamGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:93 -#: flatcamGUI/preferences/geometry/GeometryOptPrefGroupUI.py:48 -#: flatcamGUI/preferences/gerber/GerberAdvOptPrefGroupUI.py:107 -#: flatcamGUI/preferences/tools/ToolsCalculatorsPrefGroupUI.py:78 -#: flatcamGUI/preferences/tools/ToolsCutoutPrefGroupUI.py:58 -#: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:98 -#: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:105 -#: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:113 -#: flatcamTools/ToolCalculators.py:114 flatcamTools/ToolCutOut.py:138 -#: flatcamTools/ToolNCC.py:260 flatcamTools/ToolNCC.py:268 -#: flatcamTools/ToolPaint.py:243 -msgid "Cut Z" -msgstr "Schnitttiefe Z" - -#: FlatCAMDB.py:165 FlatCAMDB.py:848 FlatCAMDB.py:1143 -msgid "MultiDepth" -msgstr "Mehrfache Durchgänge" - -# Abbrev. unclear: Depth Per Pass? -# Perhaps better not translate -#: 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-Durchm." - -#: FlatCAMDB.py:168 FlatCAMDB.py:854 FlatCAMDB.py:1326 -msgid "V-Angle" -msgstr "Winkel der V-Form" - -#: FlatCAMDB.py:169 FlatCAMDB.py:856 FlatCAMDB.py:1170 -#: flatcamGUI/ObjectUI.py:946 flatcamGUI/ObjectUI.py:1750 -#: flatcamGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:134 -#: flatcamGUI/preferences/geometry/GeometryOptPrefGroupUI.py:101 -#: flatcamGUI/preferences/tools/Tools2CalPrefGroupUI.py:61 -#: flatcamObjects/FlatCAMExcellon.py:1316 -#: flatcamObjects/FlatCAMGeometry.py:1606 flatcamTools/ToolCalibration.py:74 -msgid "Travel Z" -msgstr "Bewegungshöhe Z (Travel)" - -# I think this is FeedRate XY -#: FlatCAMDB.py:170 FlatCAMDB.py:858 -msgid "FR" -msgstr "Vorschub (XY)" - -#: FlatCAMDB.py:171 FlatCAMDB.py:860 -msgid "FR Z" -msgstr "Vorschub (Z)" - -#: FlatCAMDB.py:172 FlatCAMDB.py:862 FlatCAMDB.py:1340 -msgid "FR Rapids" -msgstr "Vorschub ohne Last" - -#: FlatCAMDB.py:173 FlatCAMDB.py:864 FlatCAMDB.py:1213 -#: flatcamGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:222 -msgid "Spindle Speed" -msgstr "Drehgeschwindigkeit" - -#: FlatCAMDB.py:174 FlatCAMDB.py:866 FlatCAMDB.py:1228 -#: flatcamGUI/ObjectUI.py:1064 flatcamGUI/ObjectUI.py:1857 -msgid "Dwell" -msgstr "Warten zum Beschleunigen" - -#: FlatCAMDB.py:175 FlatCAMDB.py:868 FlatCAMDB.py:1241 -msgid "Dwelltime" -msgstr "Wartezeit zum Beschleunigen" - -#: FlatCAMDB.py:176 FlatCAMDB.py:870 flatcamGUI/ObjectUI.py:2014 -#: flatcamGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:257 -#: flatcamGUI/preferences/geometry/GeometryOptPrefGroupUI.py:254 -#: flatcamGUI/preferences/tools/ToolsSolderpastePrefGroupUI.py:237 -#: flatcamTools/ToolSolderPaste.py:335 -msgid "Preprocessor" -msgstr "Postprozessor" - -#: FlatCAMDB.py:177 FlatCAMDB.py:872 FlatCAMDB.py:1356 -msgid "ExtraCut" -msgstr "Zusätzlicher Schnitt" - -#: FlatCAMDB.py:178 FlatCAMDB.py:874 FlatCAMDB.py:1371 -msgid "E-Cut Length" -msgstr "Extra Schnittlänge" - -#: FlatCAMDB.py:179 FlatCAMDB.py:876 -msgid "Toolchange" -msgstr "Werkzeugwechsel" - -#: FlatCAMDB.py:180 FlatCAMDB.py:878 -msgid "Toolchange XY" -msgstr "Werkzeugwechsel XY" - -#: FlatCAMDB.py:181 FlatCAMDB.py:880 -#: flatcamGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:160 -#: flatcamGUI/preferences/geometry/GeometryOptPrefGroupUI.py:131 -#: flatcamGUI/preferences/tools/Tools2CalPrefGroupUI.py:98 -#: flatcamTools/ToolCalibration.py:111 -msgid "Toolchange Z" -msgstr "Werkzeugwechsel Z" - -#: FlatCAMDB.py:182 FlatCAMDB.py:882 flatcamGUI/ObjectUI.py:1193 -#: flatcamGUI/preferences/excellon/ExcellonAdvOptPrefGroupUI.py:69 -#: flatcamGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:54 -msgid "Start Z" -msgstr "Start Z" - -#: FlatCAMDB.py:183 FlatCAMDB.py:885 -msgid "End Z" -msgstr "Ende Z" - -#: FlatCAMDB.py:187 -msgid "Tool Index." -msgstr "Werkzeugverzeichnis." - -#: 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 "" -"Werkzeugname\n" -"Wird in der App nicht verwendet,\n" -"sondern dient als Kommentar für den Nutzer." - -#: FlatCAMDB.py:193 FlatCAMDB.py:1102 -msgid "Tool Diameter." -msgstr "Werkzeugdurchmesser." - -#: 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 "" -"Werkzeug Offest.\n" -"Folgende Typen sind erlaubt:\n" -"Path: kein Offset\n" -"In: Offset einen halben Werkzeugdurchmesser innerhalb.\n" -"Out: Offset einen halben Werkzeugdurchmesser ausserhalb\n" -"Custom: selbstdefinierter Wert im Feld \"Selbstdefinierter Offset\"" - -#: FlatCAMDB.py:202 FlatCAMDB.py:1300 -msgid "" -"Custom Offset.\n" -"A value to be used as offset from the current path." -msgstr "" -"Selbstdefinierter Offset.\n" -"Ein Wert der als Offset zum aktellen Pfad hinzugefügt wird." - -#: 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 "" -"Werkzeugart.\n" -"Erlaubt sind:\n" -"Iso: Isolationsschnitte\n" -"Rough: Roughen, um viel Material abzutragen, geringer Vorschub, viele " -"Durchgänge\n" -"Finish: Finishing, hoher Vorschub" - -#: 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 "" -"Werkzeugform.\n" -"Erlaubt sind:\n" -"C1 … C4: Runde Form mit x Schneiden\n" -"B: Kugelförmig\n" -"V: V-Förmig" - -#: FlatCAMDB.py:217 FlatCAMDB.py:1131 -msgid "" -"Cutting Depth.\n" -"The depth at which to cut into material." -msgstr "" -"Schneidtiefe.\n" -"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. -#: 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 "" -"Mehrfache Durchgänge.\n" -"Wenn ausgewählt wird der Schnitt in mehreren Stufen\n" -"durchgeführt. Die Schnitttiefe jedes Schnittes ist in DPP angegeben." - -#: FlatCAMDB.py:224 FlatCAMDB.py:1158 -msgid "" -"DPP. Depth per Pass.\n" -"The value used to cut into material on each pass." -msgstr "" -"DPP: Tiefe pro Schnitt. Definiert die einzelne Schnitttiefe in mehrfachen " -"Durchgängen." - -#: FlatCAMDB.py:227 FlatCAMDB.py:1314 -msgid "" -"V-Dia.\n" -"Diameter of the tip for V-Shape Tools." -msgstr "" -"V-Durchmesser.\n" -"Durchmesser der Spitze eines V-Förmigen Werkzeugs." - -# Typo in english? V-Angle, missing n? -#: FlatCAMDB.py:230 FlatCAMDB.py:1328 -msgid "" -"V-Agle.\n" -"Angle at the tip for the V-Shape Tools." -msgstr "" -"V-Winkel.\n" -"Öffnungswinkel an der Spitze eine V-Förmigen Werkzeugs." - -#: 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 "" -"Freilauf Höhe.\n" -"Die Höhe in der das Fräswerkzeug sich zwischen den Schnitten \n" -"frei bewegen kann ohne auf Hindernisse zu stossen." - -#: FlatCAMDB.py:237 -msgid "" -"FR. Feedrate\n" -"The speed on XY plane used while cutting into material." -msgstr "" -"FR: Feedrate\n" -"Geschwindkeit beim fräsen. Angegeben in cm pro Minute." - -#: FlatCAMDB.py:240 -msgid "" -"FR Z. Feedrate Z\n" -"The speed on Z plane." -msgstr "" -"FR Z: Feedrate Z:\n" -"Geschwindigkeit beim Fräsen in Z-Richtung." - -#: 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 ohne Last\n" -"Geschwindigkeit die ohne Last gefahren werden kann.\n" -"Wird benutzt bei Geräten die das G0 Kommando nicht \n" -"unterstützen (oft 3D Drucker)." - -#: 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 "" -"Drehzahl.\n" -"Drehzahl des Fräsmotors in U/min.\n" -"Wird nicht benutzt, wenn leer." - -#: 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 "" -"Verweilen.\n" -"Überprüfen Sie dies, wenn eine Verzögerung erforderlich ist\n" -"Der Spindelmotor erreicht die eingestellte Drehzahl." - -#: FlatCAMDB.py:256 FlatCAMDB.py:1243 -msgid "" -"Dwell Time.\n" -"A delay used to allow the motor spindle reach it's set speed." -msgstr "" -"Verweilzeit.\n" -"Eine Verzögerung, mit der die Motorspindel ihre eingestellte Drehzahl " -"erreicht." - -#: 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 "" -"Präprozessor.\n" -"Diese Dateien werden den erzeugten G-Code modifizieren\n" -"um eine große Anzahl Anwendungsmöglichkeiten zu unterstützen." - -#: 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 "" -"Zusatzschnitt.\n" -"Wenn gewählt, wird nach dem Isolationsschnitt ein Zusatzschnitt\n" -"durchgeführt, um Start und Endpunkt definitiv zu verbinden und \n" -"so eine vollständige Isolation zu gewährleisten." - -#: 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 "" -"Zusatzschnitt.\n" -"Wenn gewählt, wird nach dem Isolationsschnitt ein Zusatzschnitt\n" -"durchgeführt, um Start und Endpunkt definitiv zu verbinden und \n" -"so eine vollständige Isolation zu gewährleisten." - -#: 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 "" -"Werkzeugwechsel.\n" -"Löst ein Werkzeugwechselereignis aus.\n" -"Die Art wie der Werkzeugwechsel durchgeführt wird\n" -"hängt vom gewählten Präprozessor ab." - -#: 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 "" -"Werkzeugwechsel XY\n" -"Ein Satz von Koordinaten im Format (x,y).\n" -"An der Position dieses Punktes wird ein \n" -"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? -#: FlatCAMDB.py:286 -msgid "" -"Toolchange Z.\n" -"The position on Z plane where the tool change event take place." -msgstr "" -"Werkzeugwechsel Z.\n" -"Die Position in der Z Ebene an der ein Werkzeugwechselereignis ausgelöst " -"wird." - -#: 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" -"Nicht benutzt wenn leer.\n" -"Die Z-Position die zum Start angefahren wird." - -#: FlatCAMDB.py:293 -msgid "" -"End Z.\n" -"A position on Z plane to move immediately after job stop." -msgstr "" -"End Z.\n" -"Die Z-Position die bei Beendigung des Jobs angefahren wird." - -#: FlatCAMDB.py:305 FlatCAMDB.py:682 FlatCAMDB.py:716 FlatCAMDB.py:1898 -#: FlatCAMDB.py:2144 FlatCAMDB.py:2178 -msgid "Could not load Tools DB file." -msgstr "Werkzeugdatenbank konnte nicht geladen werden." - -#: FlatCAMDB.py:313 FlatCAMDB.py:724 FlatCAMDB.py:1906 FlatCAMDB.py:2186 -msgid "Failed to parse Tools DB file." -msgstr "Formatfehler beim Einlesen der Werkzeugdatenbank." - -#: FlatCAMDB.py:316 FlatCAMDB.py:727 FlatCAMDB.py:1909 FlatCAMDB.py:2189 -msgid "Loaded FlatCAM Tools DB from" -msgstr "Geladene FlatCAM Tools DB von" - -#: FlatCAMDB.py:322 FlatCAMDB.py:1823 -msgid "Add to DB" -msgstr "Hinzufügen" - -#: FlatCAMDB.py:324 FlatCAMDB.py:1826 -msgid "Copy from DB" -msgstr "Von Datenbank kopieren" - -#: FlatCAMDB.py:326 FlatCAMDB.py:1829 -msgid "Delete from DB" -msgstr "Aus Datenbank löschen" - -#: FlatCAMDB.py:603 FlatCAMDB.py:2044 -msgid "Tool added to DB." -msgstr "Werkzeug wurde zur Werkzeugdatenbank hinzugefügt." - -#: FlatCAMDB.py:624 FlatCAMDB.py:2077 -msgid "Tool copied from Tools DB." -msgstr "Das Werkzeug wurde aus der Werkzeugdatenbank kopiert." - -#: FlatCAMDB.py:642 FlatCAMDB.py:2104 -msgid "Tool removed from Tools DB." -msgstr "Werkzeug wurde aus der Werkzeugdatenbank gelöscht." - -#: FlatCAMDB.py:653 FlatCAMDB.py:2115 -msgid "Export Tools Database" -msgstr "Werkzeugdatenbank exportieren" - -#: FlatCAMDB.py:656 FlatCAMDB.py:2118 -msgid "Tools_Database" -msgstr "Werkzeugdatenbank" - -#: FlatCAMDB.py:693 FlatCAMDB.py:696 FlatCAMDB.py:748 FlatCAMDB.py:2155 -#: FlatCAMDB.py:2158 FlatCAMDB.py:2211 -msgid "Failed to write Tools DB to file." -msgstr "Fehler beim Schreiben der Werkzeugdatenbank in eine Datei." - -#: FlatCAMDB.py:699 FlatCAMDB.py:2161 -msgid "Exported Tools DB to" -msgstr "Werkzeugdatenbank wurde exportiert nach" - -#: FlatCAMDB.py:706 FlatCAMDB.py:2168 -msgid "Import FlatCAM Tools DB" -msgstr "Import der FlatCAM-Werkzeugdatenbank" - -#: FlatCAMDB.py:752 FlatCAMDB.py:2215 -msgid "Saved Tools DB." -msgstr "Datenbank der gespeicherten Werkzeuge." - -#: FlatCAMDB.py:899 FlatCAMDB.py:2405 -msgid "No Tool/row selected in the Tools Database table" -msgstr "" -"Gescheitert. Kein Werkzeug (keine Spalte) in der Werkzeugtabelle ausgewählt" - -#: FlatCAMDB.py:917 FlatCAMDB.py:2422 -msgid "Cancelled adding tool from DB." -msgstr "Hinzufügen aus der Datenbank wurde abgebrochen." - -#: FlatCAMDB.py:1018 -msgid "Basic Geo Parameters" -msgstr "Grundlegende Geoparameter" - -#: FlatCAMDB.py:1030 -msgid "Advanced Geo Parameters" -msgstr "Erweiterte Geoparameter" - -#: FlatCAMDB.py:1042 -msgid "NCC Parameters" -msgstr "NCC-Parameter" - -#: FlatCAMDB.py:1054 -msgid "Paint Parameters" -msgstr "Lackparameter" - -#: FlatCAMDB.py:1185 flatcamGUI/ObjectUI.py:967 flatcamGUI/ObjectUI.py:1769 -#: flatcamGUI/preferences/geometry/GeometryOptPrefGroupUI.py:185 -#: flatcamGUI/preferences/tools/ToolsSolderpastePrefGroupUI.py:148 -#: flatcamTools/ToolSolderPaste.py:253 -msgid "Feedrate X-Y" -msgstr "Vorschub X-Y" - -#: FlatCAMDB.py:1187 -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." - -#: FlatCAMDB.py:1199 flatcamGUI/ObjectUI.py:982 flatcamGUI/ObjectUI.py:1783 -#: flatcamGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:207 -#: flatcamGUI/preferences/geometry/GeometryOptPrefGroupUI.py:200 -#: flatcamGUI/preferences/tools/ToolsSolderpastePrefGroupUI.py:161 -#: flatcamTools/ToolSolderPaste.py:265 -msgid "Feedrate Z" -msgstr "Vorschub Z" - -#: FlatCAMDB.py:1201 -msgid "" -"Feedrate Z\n" -"The speed on Z plane." -msgstr "" -"Vorschub Z.\n" -"Die Geschwindigkeit in der Z-Ebene." - -#: FlatCAMDB.py:1399 flatcamGUI/ObjectUI.py:845 -#: flatcamGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:46 -#: 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 "" -"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." - -#: FlatCAMDB.py:1408 flatcamEditors/FlatCAMGrbEditor.py:2742 -#: flatcamGUI/GUIElements.py:2577 flatcamTools/ToolNCC.py:350 -msgid "Clear" -msgstr "Klären" - -#: FlatCAMDB.py:1409 flatcamTools/ToolNCC.py:351 flatcamTools/ToolNCC.py:1623 -msgid "Isolation" -msgstr "Isolation" - -#: FlatCAMDB.py:1417 flatcamGUI/ObjectUI.py:409 flatcamGUI/ObjectUI.py:867 -#: flatcamGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:62 -#: flatcamGUI/preferences/geometry/GeometryEditorPrefGroupUI.py:56 -#: flatcamGUI/preferences/gerber/GerberOptPrefGroupUI.py:95 -#: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:137 -#: flatcamTools/ToolNCC.py:359 -msgid "Milling Type" -msgstr "Fräsart" - -#: FlatCAMDB.py:1419 FlatCAMDB.py:1427 -#: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:139 -#: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:147 -#: 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" - -#: FlatCAMDB.py:1424 flatcamGUI/ObjectUI.py:415 -#: flatcamGUI/preferences/geometry/GeometryEditorPrefGroupUI.py:62 -#: flatcamGUI/preferences/gerber/GerberOptPrefGroupUI.py:102 -#: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:144 -#: flatcamTools/ToolNCC.py:366 -msgid "Climb" -msgstr "Steigen" - -# Cannot translate without context. -#: FlatCAMDB.py:1425 flatcamGUI/ObjectUI.py:416 -#: flatcamGUI/preferences/geometry/GeometryEditorPrefGroupUI.py:63 -#: flatcamGUI/preferences/gerber/GerberOptPrefGroupUI.py:103 -#: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:145 -#: flatcamTools/ToolNCC.py:367 -msgid "Conventional" -msgstr "Konventionell" - -#: FlatCAMDB.py:1437 FlatCAMDB.py:1546 flatcamEditors/FlatCAMGeoEditor.py:451 -#: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:182 -#: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:163 -#: flatcamTools/ToolNCC.py:382 flatcamTools/ToolPaint.py:329 -msgid "Overlap" -msgstr "Überlappung" - -# Double -#: FlatCAMDB.py:1439 flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:184 -#: 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." - -#: FlatCAMDB.py:1458 FlatCAMDB.py:1567 flatcamEditors/FlatCAMGeoEditor.py:471 -#: flatcamGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:72 -#: flatcamGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:229 -#: flatcamGUI/preferences/tools/Tools2FiducialsPrefGroupUI.py:59 -#: flatcamGUI/preferences/tools/Tools2InvertPrefGroupUI.py:45 -#: flatcamGUI/preferences/tools/Tools2InvertPrefGroupUI.py:53 -#: flatcamGUI/preferences/tools/ToolsCutoutPrefGroupUI.py:115 -#: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:202 -#: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:183 -#: 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" - -#: FlatCAMDB.py:1460 -#: flatcamGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:74 -#: flatcamGUI/preferences/tools/Tools2FiducialsPrefGroupUI.py:61 -#: flatcamGUI/preferences/tools/Tools2FiducialsPrefGroupUI.py:125 -#: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:204 -#: flatcamTools/ToolCopperThieving.py:113 flatcamTools/ToolFiducials.py:174 -#: flatcamTools/ToolFiducials.py:237 flatcamTools/ToolNCC.py:405 -msgid "Bounding box margin." -msgstr "Begrenzungsrahmenrand." - -#: FlatCAMDB.py:1471 FlatCAMDB.py:1582 flatcamEditors/FlatCAMGeoEditor.py:485 -#: flatcamGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py:105 -#: flatcamGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:106 -#: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:215 -#: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:198 -#: flatcamTools/ToolExtractDrills.py:128 flatcamTools/ToolNCC.py:416 -#: flatcamTools/ToolPaint.py:365 flatcamTools/ToolPunchGerber.py:139 -msgid "Method" -msgstr "Methode" - -#: FlatCAMDB.py:1473 flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:217 -#: 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." - -#: FlatCAMDB.py:1481 FlatCAMDB.py:1596 flatcamEditors/FlatCAMGeoEditor.py:499 -#: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:230 -#: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:217 -#: flatcamTools/ToolNCC.py:431 flatcamTools/ToolNCC.py:2395 -#: flatcamTools/ToolNCC.py:2424 flatcamTools/ToolNCC.py:2693 -#: flatcamTools/ToolNCC.py:2725 flatcamTools/ToolPaint.py:390 -#: flatcamTools/ToolPaint.py:1834 tclCommands/TclCommandCopperClear.py:126 -#: tclCommands/TclCommandCopperClear.py:134 tclCommands/TclCommandPaint.py:125 -msgid "Standard" -msgstr "Standard" - -#: FlatCAMDB.py:1481 FlatCAMDB.py:1596 defaults.py:395 defaults.py:427 -#: flatcamEditors/FlatCAMGeoEditor.py:499 -#: flatcamEditors/FlatCAMGeoEditor.py:569 -#: flatcamEditors/FlatCAMGeoEditor.py:5152 -#: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:230 -#: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:217 -#: flatcamTools/ToolNCC.py:431 flatcamTools/ToolNCC.py:2401 -#: flatcamTools/ToolNCC.py:2429 flatcamTools/ToolNCC.py:2699 -#: flatcamTools/ToolNCC.py:2731 flatcamTools/ToolPaint.py:390 -#: flatcamTools/ToolPaint.py:1848 tclCommands/TclCommandCopperClear.py:128 -#: tclCommands/TclCommandCopperClear.py:136 tclCommands/TclCommandPaint.py:127 -msgid "Seed" -msgstr "Keim" - -#: FlatCAMDB.py:1481 FlatCAMDB.py:1596 flatcamEditors/FlatCAMGeoEditor.py:499 -#: flatcamEditors/FlatCAMGeoEditor.py:5156 -#: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:230 -#: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:217 -#: flatcamTools/ToolNCC.py:431 flatcamTools/ToolPaint.py:390 -#: flatcamTools/ToolPaint.py:699 flatcamTools/ToolPaint.py:1862 -#: tclCommands/TclCommandCopperClear.py:130 tclCommands/TclCommandPaint.py:129 -msgid "Lines" -msgstr "Linien" - -#: FlatCAMDB.py:1489 FlatCAMDB.py:1607 -#: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:237 -#: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:224 -#: flatcamTools/ToolNCC.py:439 flatcamTools/ToolPaint.py:401 -msgid "Connect" -msgstr "Verbinden" - -#: FlatCAMDB.py:1493 FlatCAMDB.py:1610 flatcamEditors/FlatCAMGeoEditor.py:508 -#: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:239 -#: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:226 -#: 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." - -#: FlatCAMDB.py:1499 FlatCAMDB.py:1614 -#: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:246 -#: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:232 -#: flatcamTools/ToolNCC.py:449 flatcamTools/ToolPaint.py:408 -msgid "Contour" -msgstr "Kontur" - -#: FlatCAMDB.py:1503 FlatCAMDB.py:1617 flatcamEditors/FlatCAMGeoEditor.py:518 -#: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:248 -#: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:234 -#: 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." - -#: FlatCAMDB.py:1509 flatcamEditors/FlatCAMGeoEditor.py:612 -#: flatcamEditors/FlatCAMGrbEditor.py:5311 flatcamGUI/ObjectUI.py:143 -#: flatcamGUI/ObjectUI.py:1497 flatcamGUI/ObjectUI.py:2326 -#: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:255 -#: flatcamGUI/preferences/tools/ToolsTransformPrefGroupUI.py:142 -#: flatcamTools/ToolNCC.py:459 flatcamTools/ToolTransform.py:28 -msgid "Offset" -msgstr "Versatz" - -#: FlatCAMDB.py:1513 flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:257 -#: 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 -#: FlatCAMDB.py:1548 flatcamEditors/FlatCAMGeoEditor.py:453 -#: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:165 -#: 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." - -#: FlatCAMDB.py:1569 flatcamEditors/FlatCAMGeoEditor.py:473 -#: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:185 -#: 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." - -#: FlatCAMDB.py:1584 flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:200 -#: 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." - -#: FlatCAMDB.py:1596 FlatCAMDB.py:1598 -#: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:217 -#: flatcamTools/ToolPaint.py:390 flatcamTools/ToolPaint.py:392 -#: flatcamTools/ToolPaint.py:693 flatcamTools/ToolPaint.py:698 -#: flatcamTools/ToolPaint.py:1876 tclCommands/TclCommandPaint.py:131 -msgid "Laser_lines" -msgstr "LaserlinienLinien" - -#: FlatCAMDB.py:1596 flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:217 -#: flatcamTools/ToolPaint.py:390 flatcamTools/ToolPaint.py:2027 -#: tclCommands/TclCommandPaint.py:133 -msgid "Combo" -msgstr "Combo" - -#: FlatCAMDB.py:1641 -msgid "Add Tool in DB" -msgstr "Werkzeug in DB hinzufügen" - -#: FlatCAMDB.py:1675 -msgid "Save DB" -msgstr "Speichern DB" - -#: FlatCAMDB.py:1677 -msgid "Save the Tools Database information's." -msgstr "Speichern Sie die Tools-Datenbankinformationen." - -#: FlatCAMProcess.py:172 -msgid "processes running." -msgstr "laufende Prozesse." - -#: AppTool.py:245 AppTool.py:252 flatcamGUI/ObjectUI.py:157 -#: flatcamGUI/ObjectUI.py:164 -msgid "Edited value is out of range" -msgstr "Der bearbeitete Wert liegt außerhalb des Bereichs" - -#: AppTool.py:247 AppTool.py:254 flatcamGUI/ObjectUI.py:159 -#: flatcamGUI/ObjectUI.py:166 -msgid "Edited value is within limits." -msgstr "Der bearbeitete Wert liegt innerhalb der Grenzen." - -#: FlatCAMTranslation.py:104 -msgid "The application will restart." -msgstr "Die Anwendung wird neu gestartet." - -#: FlatCAMTranslation.py:106 -msgid "Are you sure do you want to change the current language to" -msgstr "Möchten Sie die aktuelle Sprache wirklich in ändern" - -#: FlatCAMTranslation.py:107 -msgid "Apply Language ..." -msgstr "Sprache anwenden ..." +#: Common.py:396 +#, fuzzy +#| msgid "Exclusion areas" +msgid "Exclusion areas added." +msgstr "Ausschlussbereiche" + +#: Common.py:405 +#, fuzzy +#| msgid "Exclusion areas" +msgid "With Exclusion areas." +msgstr "Ausschlussbereiche" + +#: Common.py:435 +msgid "Cancelled. Area exclusion drawing was interrupted." +msgstr "Abgebrochen. Die Bereichsausschlusszeichnung wurde unterbrochen." + +#: Common.py:527 Common.py:575 +#, fuzzy +#| msgid "All objects are selected." +msgid "All exclusion zones deleted." +msgstr "Alle Objekte werden ausgewählt." + +#: Common.py:562 +#, fuzzy +#| msgid "Delete all exclusion areas." +msgid "Selected exclusion zones deleted." +msgstr "Löschen Sie alle Ausschlussbereiche." #: assets/linux/flatcam-beta.desktop:3 msgid "FlatCAM Beta" msgstr "FlatCAM Beta" -#: assets/linux/flatcam-beta.desktop:7 -msgid "./assets/icon.png" -msgstr "./assets/icon.png" - #: assets/linux/flatcam-beta.desktop:8 msgid "G-Code from GERBERS" msgstr "G-Code von GERBERS" -#: camlib.py:597 +#: camlib.py:596 msgid "self.solid_geometry is neither BaseGeometry or list." msgstr "self.solid_geometry ist weder BaseGeometry noch eine Liste." -#: camlib.py:970 +#: camlib.py:971 msgid "Pass" msgstr "Pass" -#: camlib.py:981 flatcamGUI/preferences/gerber/GerberAdvOptPrefGroupUI.py:146 -#: flatcamObjects/FlatCAMGerber.py:497 flatcamTools/ToolCopperThieving.py:1016 -#: flatcamTools/ToolCopperThieving.py:1205 -#: flatcamTools/ToolCopperThieving.py:1217 flatcamTools/ToolNCC.py:2050 -#: flatcamTools/ToolNCC.py:2158 flatcamTools/ToolNCC.py:2172 -#: flatcamTools/ToolNCC.py:3103 flatcamTools/ToolNCC.py:3208 -#: flatcamTools/ToolNCC.py:3223 flatcamTools/ToolNCC.py:3489 -#: flatcamTools/ToolNCC.py:3590 flatcamTools/ToolNCC.py:3605 -msgid "Buffering" -msgstr "Pufferung" - -#: camlib.py:990 +#: camlib.py:991 msgid "Get Exteriors" msgstr "Holen Sie sich das Äußere" -#: camlib.py:993 +#: camlib.py:994 msgid "Get Interiors" msgstr "Holen Sie sich Innenräume" -#: camlib.py:2172 +#: camlib.py:2174 msgid "Object was mirrored" msgstr "Objekt wurde gespiegelt" -#: camlib.py:2174 +#: camlib.py:2176 msgid "Failed to mirror. No object selected" msgstr "Spiegelung fehlgeschlagen Kein Objekt ausgewählt" -#: camlib.py:2239 +#: camlib.py:2241 msgid "Object was rotated" msgstr "Objekt wurde gedreht" -#: camlib.py:2241 +#: camlib.py:2243 msgid "Failed to rotate. No object selected" msgstr "Fehler beim Drehen. Kein Objekt ausgewählt" -#: camlib.py:2307 +#: camlib.py:2309 msgid "Object was skewed" msgstr "Objekt war schief" -#: camlib.py:2309 +#: camlib.py:2311 msgid "Failed to skew. No object selected" msgstr "Fehler beim Neigen Kein Objekt ausgewählt" -#: camlib.py:2385 +#: camlib.py:2387 msgid "Object was buffered" msgstr "Objekt wurde gepuffert" -#: camlib.py:2387 +#: camlib.py:2389 msgid "Failed to buffer. No object selected" msgstr "Fehler beim Puffern. Kein Objekt ausgewählt" -#: camlib.py:2594 +#: camlib.py:2597 msgid "There is no such parameter" msgstr "Es gibt keinen solchen Parameter" -#: camlib.py:2654 camlib.py:2887 camlib.py:3116 camlib.py:3338 +#: camlib.py:2657 camlib.py:2898 camlib.py:3127 camlib.py:3349 msgid "" "The Cut Z parameter has positive value. It is the depth value to drill into " "material.\n" @@ -2786,14 +18315,14 @@ msgstr "" "einen negativen Wert. \n" "Überprüfen Sie den resultierenden CNC-Code (Gcode usw.)." -#: camlib.py:2662 camlib.py:2897 camlib.py:3126 camlib.py:3348 camlib.py:3631 -#: camlib.py:4017 +#: camlib.py:2665 camlib.py:2908 camlib.py:3137 camlib.py:3359 camlib.py:3650 +#: camlib.py:4045 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:2673 camlib.py:3985 +#: camlib.py:2680 camlib.py:4013 msgid "" "The Toolchange X,Y field in Edit -> Preferences has to be in the format (x, " "y) \n" @@ -2803,7 +18332,7 @@ msgstr "" "(x, y) sein\n" "Aber jetzt gibt es nur einen Wert, nicht zwei. " -#: camlib.py:2682 camlib.py:3582 camlib.py:3967 +#: camlib.py:2693 camlib.py:3597 camlib.py:3991 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." @@ -2811,31 +18340,31 @@ 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:2770 +#: camlib.py:2781 msgid "Creating a list of points to drill..." msgstr "Erstellen einer Liste von Punkten zum Bohren ..." -#: camlib.py:2860 camlib.py:3729 camlib.py:4121 +#: camlib.py:2871 camlib.py:3748 camlib.py:4149 msgid "Starting G-Code" msgstr "G-Code starten" -#: camlib.py:3001 camlib.py:3220 camlib.py:3384 camlib.py:3742 camlib.py:4132 +#: camlib.py:3012 camlib.py:3231 camlib.py:3395 camlib.py:3761 camlib.py:4160 msgid "Starting G-Code for tool with diameter" msgstr "Start-G-Code für Werkzeug mit Durchmesser" -#: camlib.py:3084 camlib.py:3302 camlib.py:3470 +#: camlib.py:3095 camlib.py:3313 camlib.py:3481 msgid "G91 coordinates not implemented" msgstr "G91 Koordinaten nicht implementiert" -#: camlib.py:3090 camlib.py:3309 camlib.py:3475 +#: camlib.py:3101 camlib.py:3320 camlib.py:3486 msgid "The loaded Excellon file has no drills" msgstr "Die geladene Excellon-Datei hat keine Bohrer" -#: camlib.py:3498 +#: camlib.py:3509 msgid "Finished G-Code generation..." msgstr "Fertige G-Code-Generierung ..." -#: camlib.py:3600 +#: camlib.py:3619 msgid "" "The Toolchange X,Y field in Edit -> Preferences has to be in the format (x, " "y) \n" @@ -2845,7 +18374,7 @@ msgstr "" "das Format (x, y) haben.\n" "Aber jetzt gibt es nur einen Wert, nicht zwei." -#: camlib.py:3614 camlib.py:4000 +#: camlib.py:3633 camlib.py:4028 msgid "" "Cut_Z parameter is None or zero. Most likely a bad combinations of other " "parameters." @@ -2853,7 +18382,7 @@ msgstr "" "Der Parameter Cut_Z ist None oder Null. Höchstwahrscheinlich eine schlechte " "Kombination anderer Parameter." -#: camlib.py:3623 camlib.py:4009 +#: camlib.py:3642 camlib.py:4037 msgid "" "The Cut Z parameter has positive value. It is the depth value to cut into " "material.\n" @@ -2868,11 +18397,11 @@ msgstr "" "einen negativen Wert. \n" "Überprüfen Sie den resultierenden CNC-Code (Gcode usw.)." -#: camlib.py:3636 camlib.py:4023 +#: camlib.py:3655 camlib.py:4051 msgid "Travel Z parameter is None or zero." msgstr "Der Parameter für den Travel Z ist Kein oder Null." -#: camlib.py:3641 camlib.py:4028 +#: camlib.py:3660 camlib.py:4056 msgid "" "The Travel Z parameter has negative value. It is the height value to travel " "between cuts.\n" @@ -2886,36 +18415,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:3649 camlib.py:4036 +#: camlib.py:3668 camlib.py:4064 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:3668 camlib.py:4059 +#: camlib.py:3687 camlib.py:4087 msgid "Indexing geometry before generating G-Code..." msgstr "Indizierung der Geometrie vor dem Generieren von G-Code ..." -#: camlib.py:3812 camlib.py:4201 +#: camlib.py:3831 camlib.py:4229 msgid "Finished G-Code generation" msgstr "Fertige G-Code-Generierung" -#: camlib.py:3812 +#: camlib.py:3831 msgid "paths traced" msgstr "Pfade verfolgt" -#: camlib.py:3862 +#: camlib.py:3881 msgid "Expected a Geometry, got" msgstr "Erwartet eine Geometrie, erhalten" -#: camlib.py:3869 +#: camlib.py:3888 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:3910 +#: camlib.py:3929 msgid "" "The Tool Offset value is too negative to use for the current_geometry.\n" "Raise the value (in module) and try again." @@ -2924,15709 +18453,46 @@ msgstr "" "Geometrie verwendet zu werden.\n" "Erhöhen Sie den Wert (im Modul) und versuchen Sie es erneut." -#: camlib.py:4201 +#: camlib.py:4229 msgid " paths traced." msgstr " Pfade verfolgt." -#: camlib.py:4229 +#: camlib.py:4257 msgid "There is no tool data in the SolderPaste geometry." msgstr "In der SolderPaste-Geometrie sind keine Werkzeugdaten vorhanden." -#: camlib.py:4318 +#: camlib.py:4346 msgid "Finished SolderPaste G-Code generation" msgstr "Fertige G-Code-Generierung für Lötpaste" -#: camlib.py:4318 +#: camlib.py:4346 msgid "paths traced." msgstr "paths traced." -#: camlib.py:4578 +#: camlib.py:4606 msgid "Parsing GCode file. Number of lines" msgstr "Analysieren der GCode-Datei. Anzahl der Zeilen" -#: camlib.py:4685 +#: camlib.py:4713 msgid "Creating Geometry from the parsed GCode file. " msgstr "Erstellen von Geometrie aus der analysierten GCode-Datei. " -#: camlib.py:4828 camlib.py:5118 camlib.py:5229 camlib.py:5385 +#: camlib.py:4856 camlib.py:5079 camlib.py:5190 camlib.py:5346 msgid "G91 coordinates not implemented ..." msgstr "G91 Koordinaten nicht implementiert ..." -#: camlib.py:4960 +#: camlib.py:4921 msgid "Unifying Geometry from parsed Geometry segments" msgstr "Vereinheitlichen von Geometrie aus analysierten Geometriesegmenten" -#: defaults.py:401 -#: flatcamGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:86 -#: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:309 -#: flatcamTools/ToolCopperThieving.py:125 flatcamTools/ToolNCC.py:535 -#: flatcamTools/ToolNCC.py:1306 flatcamTools/ToolNCC.py:1634 -#: flatcamTools/ToolNCC.py:1919 flatcamTools/ToolNCC.py:1983 -#: flatcamTools/ToolNCC.py:2967 flatcamTools/ToolNCC.py:2976 -#: tclCommands/TclCommandCopperClear.py:190 -msgid "Itself" -msgstr "Selbst" - -#: defaults.py:428 flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:280 -#: flatcamTools/ToolPaint.py:486 flatcamTools/ToolPaint.py:1427 -#: tclCommands/TclCommandPaint.py:162 -msgid "All Polygons" -msgstr "Alle Polygone" - -#: defaults.py:739 +#: defaults.py:756 msgid "Could not load defaults file." msgstr "Voreinstellungen konnte nicht geladen werden." -#: defaults.py:752 +#: defaults.py:769 msgid "Failed to parse defaults file." msgstr "Fehler beim Einlesen der Voreinstellungen." -#: flatcamEditors/FlatCAMExcEditor.py:50 flatcamEditors/FlatCAMExcEditor.py:74 -#: flatcamEditors/FlatCAMExcEditor.py:168 -#: flatcamEditors/FlatCAMExcEditor.py:385 -#: flatcamEditors/FlatCAMExcEditor.py:589 -#: flatcamEditors/FlatCAMGrbEditor.py:243 -#: flatcamEditors/FlatCAMGrbEditor.py:250 -msgid "Click to place ..." -msgstr "Klicken um zu platzieren ..." - -#: flatcamEditors/FlatCAMExcEditor.py:58 -msgid "To add a drill first select a tool" -msgstr "Um einen Bohrer hinzuzufügen, wählen Sie zuerst ein Werkzeug aus" - -#: flatcamEditors/FlatCAMExcEditor.py:122 -msgid "Done. Drill added." -msgstr "Erledigt. Bohrer hinzugefügt." - -#: flatcamEditors/FlatCAMExcEditor.py:176 -msgid "To add an Drill Array first select a tool in Tool Table" -msgstr "" -"Um ein Bohr-Array hinzuzufügen, wählen Sie zunächst ein Werkzeug in der " -"Werkzeugtabelle aus" - -#: flatcamEditors/FlatCAMExcEditor.py:192 -#: flatcamEditors/FlatCAMExcEditor.py:415 -#: flatcamEditors/FlatCAMExcEditor.py:636 -#: flatcamEditors/FlatCAMExcEditor.py:1151 -#: flatcamEditors/FlatCAMExcEditor.py:1178 -#: flatcamEditors/FlatCAMGrbEditor.py:473 -#: flatcamEditors/FlatCAMGrbEditor.py:1937 -#: flatcamEditors/FlatCAMGrbEditor.py:1967 -msgid "Click on target location ..." -msgstr "Klicken Sie auf den Zielort ..." - -#: flatcamEditors/FlatCAMExcEditor.py:211 -msgid "Click on the Drill Circular Array Start position" -msgstr "Klicken Sie auf die Startposition des Bohrkreis-Arrays" - -#: flatcamEditors/FlatCAMExcEditor.py:233 -#: flatcamEditors/FlatCAMExcEditor.py:677 -#: flatcamEditors/FlatCAMGrbEditor.py:518 -msgid "The value is not Float. Check for comma instead of dot separator." -msgstr "" -"Der Wert ist nicht Real. Überprüfen Sie das Komma anstelle des Trennzeichens." - -#: flatcamEditors/FlatCAMExcEditor.py:237 -msgid "The value is mistyped. Check the value" -msgstr "Der Wert ist falsch geschrieben. Überprüfen Sie den Wert" - -#: flatcamEditors/FlatCAMExcEditor.py:336 -msgid "Too many drills for the selected spacing angle." -msgstr "Zu viele Bohrer für den ausgewählten Abstandswinkel." - -#: flatcamEditors/FlatCAMExcEditor.py:354 -msgid "Done. Drill Array added." -msgstr "Erledigt. Bohrfeld hinzugefügt." - -#: flatcamEditors/FlatCAMExcEditor.py:394 -msgid "To add a slot first select a tool" -msgstr "Um einen Steckplatz hinzuzufügen, wählen Sie zunächst ein Werkzeug aus" - -#: 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 "" -"Wert fehlt oder falsches Format. Fügen Sie es hinzu und versuchen Sie es " -"erneut." - -#: flatcamEditors/FlatCAMExcEditor.py:559 -msgid "Done. Adding Slot completed." -msgstr "Erledigt. Das Hinzufügen des Slots ist abgeschlossen." - -#: flatcamEditors/FlatCAMExcEditor.py:597 -msgid "To add an Slot Array first select a tool in Tool Table" -msgstr "" -"Um ein Schlitze-Array hinzuzufügen, wählen Sie zunächst ein Werkzeug in der " -"Werkzeugtabelle aus" - -#: flatcamEditors/FlatCAMExcEditor.py:655 -msgid "Click on the Slot Circular Array Start position" -msgstr "Klicken Sie auf die kreisförmige Startposition des Arrays" - -#: flatcamEditors/FlatCAMExcEditor.py:680 -#: flatcamEditors/FlatCAMGrbEditor.py:521 -msgid "The value is mistyped. Check the value." -msgstr "Der Wert ist falsch geschrieben. Überprüfen Sie den Wert." - -#: flatcamEditors/FlatCAMExcEditor.py:859 -msgid "Too many Slots for the selected spacing angle." -msgstr "Zu viele Slots für den ausgewählten Abstandswinkel." - -#: flatcamEditors/FlatCAMExcEditor.py:882 -msgid "Done. Slot Array added." -msgstr "Erledigt. Schlitze Array hinzugefügt." - -#: flatcamEditors/FlatCAMExcEditor.py:904 -msgid "Click on the Drill(s) to resize ..." -msgstr "Klicken Sie auf die Bohrer, um die Größe zu ändern ..." - -#: flatcamEditors/FlatCAMExcEditor.py:934 -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:1112 -msgid "Done. Drill/Slot Resize completed." -msgstr "Getan. Bohrer / Schlitz Größenänderung abgeschlossen." - -#: flatcamEditors/FlatCAMExcEditor.py:1115 -msgid "Cancelled. No drills/slots selected for resize ..." -msgstr "Abgebrochen. Keine Bohrer / Schlitze für Größenänderung ausgewählt ..." - -#: flatcamEditors/FlatCAMExcEditor.py:1153 -#: flatcamEditors/FlatCAMGrbEditor.py:1939 -msgid "Click on reference location ..." -msgstr "Klicken Sie auf die Referenzposition ..." - -#: flatcamEditors/FlatCAMExcEditor.py:1210 -msgid "Done. Drill(s) Move completed." -msgstr "Erledigt. Bohrer Bewegen abgeschlossen." - -#: flatcamEditors/FlatCAMExcEditor.py:1318 -msgid "Done. Drill(s) copied." -msgstr "Erledigt. Bohrer kopiert." - -#: flatcamEditors/FlatCAMExcEditor.py:1557 -#: flatcamGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:26 -msgid "Excellon Editor" -msgstr "Excellon Editor" - -#: flatcamEditors/FlatCAMExcEditor.py:1564 -#: flatcamEditors/FlatCAMGrbEditor.py:2462 -msgid "Name:" -msgstr "Name:" - -#: flatcamEditors/FlatCAMExcEditor.py:1570 flatcamGUI/ObjectUI.py:761 -#: flatcamGUI/ObjectUI.py:1465 flatcamTools/ToolNCC.py:120 -#: flatcamTools/ToolPaint.py:115 flatcamTools/ToolSolderPaste.py:74 -msgid "Tools Table" -msgstr "Werkzeugtabelle" - -#: flatcamEditors/FlatCAMExcEditor.py:1572 flatcamGUI/ObjectUI.py:763 -msgid "" -"Tools in this Excellon object\n" -"when are used for drilling." -msgstr "" -"Werkzeuge in diesem Excellon-Objekt\n" -"Wann werden zum Bohren verwendet." - -#: flatcamEditors/FlatCAMExcEditor.py:1584 -#: flatcamEditors/FlatCAMExcEditor.py:3066 flatcamGUI/ObjectUI.py:781 -#: 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 "Durchmesser" - -#: flatcamEditors/FlatCAMExcEditor.py:1592 -msgid "Add/Delete Tool" -msgstr "Werkzeug hinzufügen / löschen" - -#: flatcamEditors/FlatCAMExcEditor.py:1594 -msgid "" -"Add/Delete a tool to the tool list\n" -"for this Excellon object." -msgstr "" -"Werkzeug zur Werkzeugliste hinzufügen / löschen\n" -"für dieses Excellon-Objekt." - -#: flatcamEditors/FlatCAMExcEditor.py:1606 flatcamGUI/ObjectUI.py:1585 -#: flatcamGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:57 -msgid "Diameter for the new tool" -msgstr "Durchmesser für das neue Werkzeug" - -#: flatcamEditors/FlatCAMExcEditor.py:1616 -msgid "Add Tool" -msgstr "Werkzeug hinzufügen" - -#: flatcamEditors/FlatCAMExcEditor.py:1618 -msgid "" -"Add a new tool to the tool list\n" -"with the diameter specified above." -msgstr "" -"Fügen Sie der Werkzeugliste ein neues Werkzeug hinzu\n" -"mit dem oben angegebenen Durchmesser." - -#: flatcamEditors/FlatCAMExcEditor.py:1630 -msgid "Delete Tool" -msgstr "Werkzeug löschen" - -#: flatcamEditors/FlatCAMExcEditor.py:1632 -msgid "" -"Delete a tool in the tool list\n" -"by selecting a row in the tool table." -msgstr "" -"Löschen Sie ein Werkzeug in der Werkzeugliste\n" -"indem Sie eine Zeile in der Werkzeugtabelle auswählen." - -#: flatcamEditors/FlatCAMExcEditor.py:1650 flatcamGUI/MainGUI.py:2019 -msgid "Resize Drill(s)" -msgstr "Größe der Bohrer ändern" - -#: flatcamEditors/FlatCAMExcEditor.py:1652 -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:1659 -msgid "Resize Dia" -msgstr "Durchmesser ändern" - -#: flatcamEditors/FlatCAMExcEditor.py:1661 -msgid "Diameter to resize to." -msgstr "Durchmesser zur Größenänderung." - -#: flatcamEditors/FlatCAMExcEditor.py:1672 -msgid "Resize" -msgstr "Größe ändern" - -#: flatcamEditors/FlatCAMExcEditor.py:1674 -msgid "Resize drill(s)" -msgstr "Bohrer verkleinern" - -#: flatcamEditors/FlatCAMExcEditor.py:1699 flatcamGUI/MainGUI.py:2018 -#: flatcamGUI/MainGUI.py:2270 -msgid "Add Drill Array" -msgstr "Bohrer-Array hinzufügen" - -#: flatcamEditors/FlatCAMExcEditor.py:1701 -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:1707 -msgid "" -"Select the type of drills array to create.\n" -"It can be Linear X(Y) or Circular" -msgstr "" -"Wählen Sie den Typ des zu erstellenden Bohrfelds aus.\n" -"Es kann lineares X (Y) oder rund sein" - -#: flatcamEditors/FlatCAMExcEditor.py:1710 -#: flatcamEditors/FlatCAMExcEditor.py:1924 -#: flatcamEditors/FlatCAMGrbEditor.py:2775 -msgid "Linear" -msgstr "Linear" - -#: flatcamEditors/FlatCAMExcEditor.py:1711 -#: flatcamEditors/FlatCAMExcEditor.py:1925 -#: flatcamEditors/FlatCAMGrbEditor.py:2776 flatcamGUI/ObjectUI.py:316 -#: flatcamGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py:52 -#: flatcamGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py:149 -#: flatcamGUI/preferences/tools/Tools2FiducialsPrefGroupUI.py:107 -#: flatcamGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:52 -#: flatcamGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:151 -#: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:61 -#: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:70 -#: 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:1719 -#: flatcamGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:68 -msgid "Nr of drills" -msgstr "Anzahl der Bohrer" - -#: flatcamEditors/FlatCAMExcEditor.py:1720 -#: flatcamGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:70 -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:1738 -#: flatcamEditors/FlatCAMExcEditor.py:1788 -#: flatcamEditors/FlatCAMExcEditor.py:1860 -#: flatcamEditors/FlatCAMExcEditor.py:1953 -#: flatcamEditors/FlatCAMExcEditor.py:2004 -#: flatcamEditors/FlatCAMGrbEditor.py:1573 -#: flatcamEditors/FlatCAMGrbEditor.py:2804 -#: flatcamEditors/FlatCAMGrbEditor.py:2853 -#: flatcamGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:178 -msgid "Direction" -msgstr "Richtung" - -#: flatcamEditors/FlatCAMExcEditor.py:1740 -#: flatcamEditors/FlatCAMExcEditor.py:1955 -#: flatcamEditors/FlatCAMGrbEditor.py:2806 -#: flatcamGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:86 -#: flatcamGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:234 -#: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:122 -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 "" -"Richtung, auf die das lineare Array ausgerichtet ist:\n" -"- 'X' - horizontale Achse\n" -"- 'Y' - vertikale Achse oder\n" -"- 'Winkel' - ein benutzerdefinierter Winkel für die Neigung des Arrays" - -#: flatcamEditors/FlatCAMExcEditor.py:1747 -#: flatcamEditors/FlatCAMExcEditor.py:1869 -#: flatcamEditors/FlatCAMExcEditor.py:1962 -#: flatcamEditors/FlatCAMGrbEditor.py:2813 -#: flatcamGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:92 -#: flatcamGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:187 -#: flatcamGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:240 -#: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:128 -#: flatcamGUI/preferences/tools/ToolsFilmPrefGroupUI.py:208 -#: flatcamTools/ToolFilm.py:256 -msgid "X" -msgstr "X" - -#: flatcamEditors/FlatCAMExcEditor.py:1748 -#: flatcamEditors/FlatCAMExcEditor.py:1870 -#: flatcamEditors/FlatCAMExcEditor.py:1963 -#: flatcamEditors/FlatCAMGrbEditor.py:2814 -#: flatcamGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:93 -#: flatcamGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:188 -#: flatcamGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:241 -#: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:129 -#: flatcamGUI/preferences/tools/ToolsFilmPrefGroupUI.py:209 -#: 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:2815 -#: flatcamEditors/FlatCAMGrbEditor.py:2832 -#: flatcamEditors/FlatCAMGrbEditor.py:2868 -#: flatcamGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:94 -#: flatcamGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:113 -#: flatcamGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:189 -#: flatcamGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:194 -#: flatcamGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:242 -#: flatcamGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:263 -#: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:130 -#: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:148 -#: flatcamGUI/preferences/tools/ToolsTransformPrefGroupUI.py:53 -#: flatcamTools/ToolDistance.py:120 flatcamTools/ToolDistanceMin.py:69 -#: flatcamTools/ToolTransform.py:60 -msgid "Angle" -msgstr "Winkel" - -#: flatcamEditors/FlatCAMExcEditor.py:1753 -#: flatcamEditors/FlatCAMExcEditor.py:1968 -#: flatcamEditors/FlatCAMGrbEditor.py:2819 -#: flatcamGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:100 -#: flatcamGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:248 -#: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:136 -msgid "Pitch" -msgstr "Abstand" - -#: flatcamEditors/FlatCAMExcEditor.py:1755 -#: flatcamEditors/FlatCAMExcEditor.py:1970 -#: flatcamEditors/FlatCAMGrbEditor.py:2821 -#: flatcamGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:102 -#: flatcamGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:250 -#: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:138 -msgid "Pitch = Distance between elements of the array." -msgstr "Abstand = Abstand zwischen Elementen des Arrays." - -#: 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 "" -"Winkel, bei dem das lineare Feld platziert wird.\n" -"Die Genauigkeit beträgt maximal 2 Dezimalstellen.\n" -"Der Mindestwert beträgt -360 Grad.\n" -"Maximalwert ist: 360.00 Grad." - -#: flatcamEditors/FlatCAMExcEditor.py:1789 -#: flatcamEditors/FlatCAMExcEditor.py:2005 -#: flatcamEditors/FlatCAMGrbEditor.py:2855 -msgid "" -"Direction for circular array.Can be CW = clockwise or CCW = counter " -"clockwise." -msgstr "" -"Richtung für kreisförmige Anordnung. Kann CW = Uhrzeigersinn oder CCW = " -"Gegenuhrzeigersinn sein." - -#: flatcamEditors/FlatCAMExcEditor.py:1796 -#: flatcamEditors/FlatCAMExcEditor.py:2012 -#: flatcamEditors/FlatCAMGrbEditor.py:2863 -#: flatcamGUI/preferences/excellon/ExcellonAdvOptPrefGroupUI.py:129 -#: flatcamGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:136 -#: flatcamGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:286 -#: flatcamGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:142 -#: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:170 -msgid "CW" -msgstr "CW" - -#: flatcamEditors/FlatCAMExcEditor.py:1797 -#: flatcamEditors/FlatCAMExcEditor.py:2013 -#: flatcamEditors/FlatCAMGrbEditor.py:2864 -#: flatcamGUI/preferences/excellon/ExcellonAdvOptPrefGroupUI.py:130 -#: flatcamGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:137 -#: flatcamGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:287 -#: flatcamGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:143 -#: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:171 -msgid "CCW" -msgstr "CCW" - -#: flatcamEditors/FlatCAMExcEditor.py:1801 -#: flatcamEditors/FlatCAMExcEditor.py:2017 -#: flatcamEditors/FlatCAMGrbEditor.py:2870 -#: flatcamGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:115 -#: flatcamGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:145 -#: flatcamGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:265 -#: flatcamGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:295 -#: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:150 -#: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:179 -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:1835 -msgid "Slot Parameters" -msgstr "Schlitze-Parameter" - -#: 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 "" -"Parameter zum Hinzufügen eines Schlitzes (Loch mit ovaler Form)\n" -"entweder einzeln oder als Teil eines Arrays." - -#: flatcamEditors/FlatCAMExcEditor.py:1846 -#: flatcamGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:162 -#: flatcamTools/ToolProperties.py:559 -msgid "Length" -msgstr "Länge" - -#: flatcamEditors/FlatCAMExcEditor.py:1848 -#: flatcamGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:164 -msgid "Length = The length of the slot." -msgstr "Länge = Die Länge des Schlitzes." - -#: flatcamEditors/FlatCAMExcEditor.py:1862 -#: flatcamGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:180 -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 "" -"Richtung, in die der Steckplatz ausgerichtet ist:\n" -"- 'X' - horizontale Achse\n" -"- 'Y' - vertikale Achse oder\n" -"- 'Winkel' - Ein benutzerdefinierter Winkel für die Schlitzneigung" - -#: 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 "" -"Winkel, in dem der Schlitz platziert ist.\n" -"Die Genauigkeit beträgt maximal 2 Dezimalstellen.\n" -"Der Mindestwert beträgt: -360 Grad.\n" -"Maximaler Wert ist: 360.00 Grad." - -#: flatcamEditors/FlatCAMExcEditor.py:1910 -msgid "Slot Array Parameters" -msgstr "Schlitzes Array-Parameter" - -#: flatcamEditors/FlatCAMExcEditor.py:1912 -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:1921 -msgid "" -"Select the type of slot array to create.\n" -"It can be Linear X(Y) or Circular" -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:1933 -#: flatcamGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:219 -msgid "Nr of slots" -msgstr "Anzahl der Slots" - -#: flatcamEditors/FlatCAMExcEditor.py:1934 -#: flatcamGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:221 -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:2452 -#: flatcamObjects/FlatCAMExcellon.py:410 -msgid "Total Drills" -msgstr "Bohrungen insgesamt" - -#: flatcamEditors/FlatCAMExcEditor.py:2484 -#: flatcamObjects/FlatCAMExcellon.py:441 -msgid "Total Slots" -msgstr "Schlitz insgesamt" - -#: 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:599 flatcamObjects/FlatCAMGeometry.py:1033 -#: flatcamObjects/FlatCAMGeometry.py:1780 -#: flatcamObjects/FlatCAMGeometry.py:2424 flatcamTools/ToolNCC.py:1498 -#: flatcamTools/ToolPaint.py:1249 flatcamTools/ToolPaint.py:1420 -#: flatcamTools/ToolSolderPaste.py:883 flatcamTools/ToolSolderPaste.py:956 -msgid "Wrong value format entered, use a number." -msgstr "Falsches Wertformat eingegeben, eine Zahl verwenden." - -#: 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 "" -"Werkzeug bereits in der ursprünglichen oder tatsächlichen Werkzeugliste.\n" -"Speichern Sie Excellon und bearbeiten Sie es erneut, wenn Sie dieses Tool " -"hinzufügen müssen. " - -#: flatcamEditors/FlatCAMExcEditor.py:2579 flatcamGUI/MainGUI.py:4071 -msgid "Added new tool with dia" -msgstr "Neues Werkzeug mit Durchmesser hinzugefügt" - -#: flatcamEditors/FlatCAMExcEditor.py:2612 -msgid "Select a tool in Tool Table" -msgstr "Wählen Sie ein Werkzeug in der Werkzeugtabelle aus" - -#: flatcamEditors/FlatCAMExcEditor.py:2642 -msgid "Deleted tool with diameter" -msgstr "Gelöschtes Werkzeug mit Durchmesser" - -#: flatcamEditors/FlatCAMExcEditor.py:2790 -msgid "Done. Tool edit completed." -msgstr "Erledigt. Werkzeugbearbeitung abgeschlossen." - -#: flatcamEditors/FlatCAMExcEditor.py:3352 -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:3356 -msgid "An internal error has ocurred. See Shell.\n" -msgstr "" -"Ein interner Fehler ist aufgetreten. Siehe Shell.\n" -"\n" - -#: flatcamEditors/FlatCAMExcEditor.py:3361 -msgid "Creating Excellon." -msgstr "Excellon erstellen." - -#: flatcamEditors/FlatCAMExcEditor.py:3373 -msgid "Excellon editing finished." -msgstr "Excellon-Bearbeitung abgeschlossen." - -#: flatcamEditors/FlatCAMExcEditor.py:3390 -msgid "Cancelled. There is no Tool/Drill selected" -msgstr "Abgebrochen. Es ist kein Werkzeug / Bohrer ausgewählt" - -#: flatcamEditors/FlatCAMExcEditor.py:4003 -msgid "Done. Drill(s) deleted." -msgstr "Erledigt. Bohrer gelöscht." - -#: flatcamEditors/FlatCAMExcEditor.py:4076 -#: flatcamEditors/FlatCAMExcEditor.py:4086 -#: flatcamEditors/FlatCAMGrbEditor.py:5063 -msgid "Click on the circular array Center position" -msgstr "Klicken Sie auf die kreisförmige Anordnung in der Mitte" - -#: flatcamEditors/FlatCAMGeoEditor.py:85 -msgid "Buffer distance:" -msgstr "Pufferabstand:" - -#: flatcamEditors/FlatCAMGeoEditor.py:86 -msgid "Buffer corner:" -msgstr "Pufferecke:" - -#: 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" -msgstr "" -"Es gibt 3 Arten von Ecken:\n" -"- 'Rund': Die Ecke wird für den Außenpuffer abgerundet.\n" -"- 'Quadrat:' Die Ecke wird für den äußeren Puffer in einem spitzen Winkel " -"getroffen.\n" -"- 'Abgeschrägt:' Die Ecke ist eine Linie, die die Features, die sich in der " -"Ecke treffen, direkt verbindet" - -#: flatcamEditors/FlatCAMGeoEditor.py:94 -#: flatcamEditors/FlatCAMGrbEditor.py:2631 -msgid "Round" -msgstr "Runden" - -#: flatcamEditors/FlatCAMGeoEditor.py:95 -#: flatcamEditors/FlatCAMGrbEditor.py:2632 flatcamGUI/ObjectUI.py:2073 -#: flatcamGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:217 -#: flatcamGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py:68 -#: flatcamGUI/preferences/tools/Tools2EDrillsPrefGroupUI.py:175 -#: flatcamGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:68 -#: flatcamGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:177 -#: flatcamGUI/preferences/tools/Tools2QRCodePrefGroupUI.py:143 -#: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:327 -#: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:291 -#: 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:96 -#: flatcamEditors/FlatCAMGrbEditor.py:2633 -msgid "Beveled" -msgstr "Abgeschrägt" - -#: flatcamEditors/FlatCAMGeoEditor.py:103 -msgid "Buffer Interior" -msgstr "Pufferinnenraum" - -#: flatcamEditors/FlatCAMGeoEditor.py:105 -msgid "Buffer Exterior" -msgstr "Puffer außen" - -#: flatcamEditors/FlatCAMGeoEditor.py:111 -msgid "Full Buffer" -msgstr "Voller Puffer" - -#: flatcamEditors/FlatCAMGeoEditor.py:132 -#: flatcamEditors/FlatCAMGeoEditor.py:3017 flatcamGUI/MainGUI.py:1928 -#: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:190 -msgid "Buffer Tool" -msgstr "Pufferwerkzeug" - -#: 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:5116 -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 " -"versuchen Sie es erneut." - -#: flatcamEditors/FlatCAMGeoEditor.py:242 -msgid "Font" -msgstr "Schrift" - -#: flatcamEditors/FlatCAMGeoEditor.py:323 flatcamGUI/MainGUI.py:2208 -msgid "Text" -msgstr "Text" - -#: flatcamEditors/FlatCAMGeoEditor.py:349 -msgid "Text Tool" -msgstr "Textwerkzeug" - -#: flatcamEditors/FlatCAMGeoEditor.py:405 flatcamGUI/MainGUI.py:511 -#: flatcamGUI/MainGUI.py:1158 flatcamGUI/ObjectUI.py:818 -#: flatcamGUI/ObjectUI.py:1662 flatcamObjects/FlatCAMExcellon.py:742 -#: flatcamObjects/FlatCAMExcellon.py:1084 flatcamObjects/FlatCAMGeometry.py:759 -#: flatcamTools/ToolNCC.py:331 flatcamTools/ToolNCC.py:797 -#: flatcamTools/ToolPaint.py:314 flatcamTools/ToolPaint.py:767 -msgid "Tool" -msgstr "Werkzeug" - -#: flatcamEditors/FlatCAMGeoEditor.py:439 flatcamGUI/ObjectUI.py:364 -#: flatcamGUI/preferences/gerber/GerberOptPrefGroupUI.py:43 -msgid "Tool dia" -msgstr "Werkzeugdurchmesser" - -#: flatcamEditors/FlatCAMGeoEditor.py:441 -msgid "Diameter of the tool to be used in the operation." -msgstr "Durchmesser des im Betrieb zu verwendenden Werkzeugs." - -#: 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 "" -"Algorithmus zum Malen der Polygone:\n" -"- Standard: Schritt nach innen behoben.\n" -"- Samenbasiert: Aus dem Samen heraus.\n" -"- Linienbasiert: Parallele Linien." - -#: flatcamEditors/FlatCAMGeoEditor.py:506 -msgid "Connect:" -msgstr "Verbinden:" - -#: flatcamEditors/FlatCAMGeoEditor.py:516 -msgid "Contour:" -msgstr "Kontur:" - -#: flatcamEditors/FlatCAMGeoEditor.py:529 flatcamGUI/MainGUI.py:2212 -msgid "Paint" -msgstr "Malen" - -#: flatcamEditors/FlatCAMGeoEditor.py:547 flatcamGUI/MainGUI.py:924 -#: flatcamGUI/MainGUI.py:2628 flatcamGUI/ObjectUI.py:2139 -#: flatcamTools/ToolPaint.py:43 flatcamTools/ToolPaint.py:738 -msgid "Paint Tool" -msgstr "Werkzeug Malen" - -#: 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:5767 -msgid "Cancelled. No shape selected." -msgstr "Abgebrochen. Keine Form ausgewählt." - -#: flatcamEditors/FlatCAMGeoEditor.py:596 -#: flatcamEditors/FlatCAMGeoEditor.py:3042 -#: flatcamEditors/FlatCAMGeoEditor.py:3070 -#: flatcamEditors/FlatCAMGeoEditor.py:3098 -#: flatcamGUI/preferences/geometry/GeometryGenPrefGroupUI.py:59 -#: flatcamTools/ToolProperties.py:117 flatcamTools/ToolProperties.py:162 -msgid "Tools" -msgstr "Werkzeuge" - -#: flatcamEditors/FlatCAMGeoEditor.py:607 -#: flatcamEditors/FlatCAMGeoEditor.py:991 -#: flatcamEditors/FlatCAMGrbEditor.py:5306 -#: flatcamEditors/FlatCAMGrbEditor.py:5703 flatcamGUI/MainGUI.py:945 -#: flatcamGUI/MainGUI.py:2649 flatcamTools/ToolTransform.py:460 -msgid "Transform Tool" -msgstr "Werkzeug Umwandeln" - -#: flatcamEditors/FlatCAMGeoEditor.py:608 -#: flatcamEditors/FlatCAMGeoEditor.py:673 -#: flatcamEditors/FlatCAMGrbEditor.py:5307 -#: flatcamEditors/FlatCAMGrbEditor.py:5372 -#: flatcamGUI/preferences/tools/ToolsTransformPrefGroupUI.py:45 -#: flatcamTools/ToolTransform.py:24 flatcamTools/ToolTransform.py:466 -msgid "Rotate" -msgstr "Drehen" - -#: flatcamEditors/FlatCAMGeoEditor.py:609 -#: flatcamEditors/FlatCAMGrbEditor.py:5308 flatcamTools/ToolTransform.py:25 -msgid "Skew/Shear" -msgstr "Neigung/Schere" - -#: flatcamEditors/FlatCAMGeoEditor.py:610 -#: flatcamEditors/FlatCAMGrbEditor.py:2680 -#: flatcamEditors/FlatCAMGrbEditor.py:5309 flatcamGUI/MainGUI.py:1063 -#: flatcamGUI/MainGUI.py:2140 flatcamGUI/MainGUI.py:2255 -#: flatcamGUI/MainGUI.py:2767 flatcamGUI/ObjectUI.py:125 -#: flatcamGUI/preferences/tools/ToolsTransformPrefGroupUI.py:95 -#: flatcamTools/ToolTransform.py:26 -msgid "Scale" -msgstr "Skalieren" - -#: flatcamEditors/FlatCAMGeoEditor.py:611 -#: flatcamEditors/FlatCAMGrbEditor.py:5310 flatcamTools/ToolTransform.py:27 -msgid "Mirror (Flip)" -msgstr "Spiegeln (Flip)" - -#: flatcamEditors/FlatCAMGeoEditor.py:625 -#: flatcamEditors/FlatCAMGrbEditor.py:5324 flatcamGUI/MainGUI.py:856 -#: flatcamGUI/MainGUI.py:2564 -msgid "Editor" -msgstr "Editor" - -#: flatcamEditors/FlatCAMGeoEditor.py:657 -#: flatcamEditors/FlatCAMGrbEditor.py:5356 -msgid "Angle:" -msgstr "Winkel:" - -#: flatcamEditors/FlatCAMGeoEditor.py:659 -#: flatcamEditors/FlatCAMGrbEditor.py:5358 -#: flatcamGUI/preferences/tools/ToolsTransformPrefGroupUI.py:55 -#: 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 "" -"Drehwinkel in Grad.\n" -"Float-Nummer zwischen -360 und 359.\n" -"Positive Zahlen für CW-Bewegung.\n" -"Negative Zahlen für CCW-Bewegung." - -#: flatcamEditors/FlatCAMGeoEditor.py:675 -#: flatcamEditors/FlatCAMGrbEditor.py:5374 -msgid "" -"Rotate the selected shape(s).\n" -"The point of reference is the middle of\n" -"the bounding box for all selected shapes." -msgstr "" -"Die ausgewählten Formen drehen.\n" -"Der Bezugspunkt ist die Mitte von\n" -"der Begrenzungsrahmen für alle ausgewählten Formen." - -#: flatcamEditors/FlatCAMGeoEditor.py:698 -#: flatcamEditors/FlatCAMGrbEditor.py:5397 -msgid "Angle X:" -msgstr "Winkel X:" - -#: flatcamEditors/FlatCAMGeoEditor.py:700 -#: flatcamEditors/FlatCAMGeoEditor.py:720 -#: flatcamEditors/FlatCAMGrbEditor.py:5399 -#: flatcamEditors/FlatCAMGrbEditor.py:5419 -#: flatcamGUI/preferences/tools/ToolsTransformPrefGroupUI.py:74 -#: flatcamGUI/preferences/tools/ToolsTransformPrefGroupUI.py:88 -#: flatcamTools/ToolCalibration.py:505 flatcamTools/ToolCalibration.py:518 -msgid "" -"Angle for Skew action, in degrees.\n" -"Float number between -360 and 359." -msgstr "" -"Winkel für die Schräglage in Grad.\n" -"Float-Nummer zwischen -360 und 359." - -#: flatcamEditors/FlatCAMGeoEditor.py:711 -#: flatcamEditors/FlatCAMGrbEditor.py:5410 flatcamTools/ToolTransform.py:467 -msgid "Skew X" -msgstr "Neigung X" - -#: flatcamEditors/FlatCAMGeoEditor.py:713 -#: flatcamEditors/FlatCAMGeoEditor.py:733 -#: flatcamEditors/FlatCAMGrbEditor.py:5412 -#: flatcamEditors/FlatCAMGrbEditor.py:5432 -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 "" -"Schrägstellung/Scherung der ausgewählten Form(en).\n" -"Der Bezugspunkt ist die Mitte von\n" -"der Begrenzungsrahmen für alle ausgewählten Formen." - -#: flatcamEditors/FlatCAMGeoEditor.py:718 -#: flatcamEditors/FlatCAMGrbEditor.py:5417 -msgid "Angle Y:" -msgstr "Winkel Y:" - -#: flatcamEditors/FlatCAMGeoEditor.py:731 -#: flatcamEditors/FlatCAMGrbEditor.py:5430 flatcamTools/ToolTransform.py:468 -msgid "Skew Y" -msgstr "Neigung Y" - -#: flatcamEditors/FlatCAMGeoEditor.py:759 -#: flatcamEditors/FlatCAMGrbEditor.py:5458 -msgid "Factor X:" -msgstr "Faktor X:" - -#: flatcamEditors/FlatCAMGeoEditor.py:761 -#: flatcamEditors/FlatCAMGrbEditor.py:5460 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:771 -#: flatcamEditors/FlatCAMGrbEditor.py:5470 flatcamTools/ToolTransform.py:469 -msgid "Scale X" -msgstr "Maßstab X" - -#: flatcamEditors/FlatCAMGeoEditor.py:773 -#: flatcamEditors/FlatCAMGeoEditor.py:792 -#: flatcamEditors/FlatCAMGrbEditor.py:5472 -#: flatcamEditors/FlatCAMGrbEditor.py:5491 -msgid "" -"Scale the selected shape(s).\n" -"The point of reference depends on \n" -"the Scale reference checkbox state." -msgstr "" -"Skalieren Sie die ausgewählten Formen.\n" -"Der Bezugspunkt hängt von ab\n" -"das Kontrollkästchen Skalenreferenz." - -#: flatcamEditors/FlatCAMGeoEditor.py:778 -#: flatcamEditors/FlatCAMGrbEditor.py:5477 -msgid "Factor Y:" -msgstr "Faktor Y:" - -#: flatcamEditors/FlatCAMGeoEditor.py:780 -#: flatcamEditors/FlatCAMGrbEditor.py:5479 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:790 -#: flatcamEditors/FlatCAMGrbEditor.py:5489 flatcamTools/ToolTransform.py:470 -msgid "Scale Y" -msgstr "Maßstab Y" - -#: flatcamEditors/FlatCAMGeoEditor.py:799 -#: flatcamEditors/FlatCAMGrbEditor.py:5498 -#: flatcamGUI/preferences/tools/ToolsTransformPrefGroupUI.py:124 -#: flatcamTools/ToolTransform.py:189 -msgid "Link" -msgstr "Verknüpfung" - -#: flatcamEditors/FlatCAMGeoEditor.py:801 -#: flatcamEditors/FlatCAMGrbEditor.py:5500 -msgid "" -"Scale the selected shape(s)\n" -"using the Scale Factor X for both axis." -msgstr "" -"Skalieren der ausgewählten Form (en)\n" -"Verwenden des Skalierungsfaktors X für beide Achsen." - -#: flatcamEditors/FlatCAMGeoEditor.py:807 -#: flatcamEditors/FlatCAMGrbEditor.py:5506 -#: flatcamGUI/preferences/tools/ToolsTransformPrefGroupUI.py:132 -#: flatcamTools/ToolTransform.py:196 -msgid "Scale Reference" -msgstr "Skalenreferenz" - -#: flatcamEditors/FlatCAMGeoEditor.py:809 -#: flatcamEditors/FlatCAMGrbEditor.py:5508 -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 "" -"Skalieren der ausgewählten Form (en)\n" -"unter Verwendung der Ursprungsreferenz, wenn geprüft\n" -"und die Mitte der größten Begrenzungsbox\n" -"der ausgewählten Formen, wenn nicht markiert." - -#: flatcamEditors/FlatCAMGeoEditor.py:837 -#: flatcamEditors/FlatCAMGrbEditor.py:5537 -msgid "Value X:" -msgstr "Wert X:" - -#: flatcamEditors/FlatCAMGeoEditor.py:839 -#: flatcamEditors/FlatCAMGrbEditor.py:5539 -msgid "Value for Offset action on X axis." -msgstr "Wert für die Offset-Aktion auf der X-Achse." - -#: flatcamEditors/FlatCAMGeoEditor.py:849 -#: flatcamEditors/FlatCAMGrbEditor.py:5549 flatcamTools/ToolTransform.py:473 -msgid "Offset X" -msgstr "Versatz X" - -#: flatcamEditors/FlatCAMGeoEditor.py:851 -#: flatcamEditors/FlatCAMGeoEditor.py:871 -#: flatcamEditors/FlatCAMGrbEditor.py:5551 -#: flatcamEditors/FlatCAMGrbEditor.py:5571 -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 "" -"Versetzt die ausgewählten Formen.\n" -"Der Bezugspunkt ist die Mitte von\n" -"der Begrenzungsrahmen für alle ausgewählten Formen.\n" - -#: flatcamEditors/FlatCAMGeoEditor.py:857 -#: flatcamEditors/FlatCAMGrbEditor.py:5557 -msgid "Value Y:" -msgstr "Wert Y:" - -#: flatcamEditors/FlatCAMGeoEditor.py:859 -#: flatcamEditors/FlatCAMGrbEditor.py:5559 -msgid "Value for Offset action on Y axis." -msgstr "Wert für die Offset-Aktion auf der Y-Achse." - -#: flatcamEditors/FlatCAMGeoEditor.py:869 -#: flatcamEditors/FlatCAMGrbEditor.py:5569 flatcamTools/ToolTransform.py:474 -msgid "Offset Y" -msgstr "Versatz Y" - -#: flatcamEditors/FlatCAMGeoEditor.py:900 -#: flatcamEditors/FlatCAMGrbEditor.py:5600 flatcamTools/ToolTransform.py:475 -msgid "Flip on X" -msgstr "Flip auf X" - -#: flatcamEditors/FlatCAMGeoEditor.py:902 -#: flatcamEditors/FlatCAMGeoEditor.py:909 -#: flatcamEditors/FlatCAMGrbEditor.py:5602 -#: flatcamEditors/FlatCAMGrbEditor.py:5609 -msgid "" -"Flip the selected shape(s) over the X axis.\n" -"Does not create a new shape." -msgstr "" -"Kippen Sie die ausgewählte Form (en) über die X-Achse.\n" -"Erzeugt keine neue Form." - -#: flatcamEditors/FlatCAMGeoEditor.py:907 -#: flatcamEditors/FlatCAMGrbEditor.py:5607 flatcamTools/ToolTransform.py:476 -msgid "Flip on Y" -msgstr "Flip auf Y" - -#: flatcamEditors/FlatCAMGeoEditor.py:915 -#: flatcamEditors/FlatCAMGrbEditor.py:5615 -msgid "Ref Pt" -msgstr "Ref. Pt" - -#: flatcamEditors/FlatCAMGeoEditor.py:917 -#: flatcamEditors/FlatCAMGrbEditor.py:5617 -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 "" -"Die ausgewählten Formen umdrehen\n" -"um den Punkt im Eingabefeld.\n" -"\n" -"Die Punktkoordinaten können mit erfasst werden\n" -"Klicken Sie mit der linken Maustaste auf die Leinwand\n" -"Shift Taste.\n" -"Klicken Sie dann auf die Schaltfläche Hinzufügen, um die Koordinaten " -"einzufügen.\n" -"Oder geben Sie die Koordinaten im Format (x, y) in ein\n" -"Punkt-Eingabefeld und klicken Sie auf X (Y) drehen" - -#: flatcamEditors/FlatCAMGeoEditor.py:929 -#: flatcamEditors/FlatCAMGrbEditor.py:5629 -msgid "Point:" -msgstr "Punkt:" - -#: flatcamEditors/FlatCAMGeoEditor.py:931 -#: flatcamEditors/FlatCAMGrbEditor.py:5631 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 "" -"Koordinaten im Format (x, y), die als Referenz für die Spiegelung verwendet " -"werden.\n" -"Das 'x' in (x, y) wird verwendet, wenn Sie bei X und\n" -"Das 'y' in (x, y) wird verwendet, wenn Flip auf Y verwendet wird." - -#: flatcamEditors/FlatCAMGeoEditor.py:941 -#: flatcamEditors/FlatCAMGrbEditor.py:5643 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 "" -"Die Punktkoordinaten können mit erfasst werden\n" -"Klicken Sie mit der linken Maustaste auf die Leinwand\n" -"Shift Taste. Klicken Sie dann auf die Schaltfläche Hinzufügen, um sie " -"einzufügen." - -#: flatcamEditors/FlatCAMGeoEditor.py:1304 -#: flatcamEditors/FlatCAMGrbEditor.py:5951 -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:1307 -#: flatcamEditors/FlatCAMGrbEditor.py:5954 flatcamTools/ToolTransform.py:679 -msgid "Appying Rotate" -msgstr "Anwenden Drehen" - -#: flatcamEditors/FlatCAMGeoEditor.py:1333 -#: flatcamEditors/FlatCAMGrbEditor.py:5986 -msgid "Done. Rotate completed." -msgstr "Erledigt. Drehen abgeschlossen." - -#: flatcamEditors/FlatCAMGeoEditor.py:1335 -msgid "Rotation action was not executed" -msgstr "Rotationsaktion wurde nicht ausgeführt" - -#: flatcamEditors/FlatCAMGeoEditor.py:1354 -#: flatcamEditors/FlatCAMGrbEditor.py:6005 -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:1357 -#: flatcamEditors/FlatCAMGrbEditor.py:6008 flatcamTools/ToolTransform.py:728 -msgid "Applying Flip" -msgstr "Flip anwenden" - -#: flatcamEditors/FlatCAMGeoEditor.py:1386 -#: flatcamEditors/FlatCAMGrbEditor.py:6046 flatcamTools/ToolTransform.py:769 -msgid "Flip on the Y axis done" -msgstr "Spiegeln Sie die Y-Achse bereit" - -#: flatcamEditors/FlatCAMGeoEditor.py:1390 -#: flatcamEditors/FlatCAMGrbEditor.py:6055 flatcamTools/ToolTransform.py:778 -msgid "Flip on the X axis done" -msgstr "Spiegeln Sie die X-Achse bereit" - -#: flatcamEditors/FlatCAMGeoEditor.py:1398 -msgid "Flip action was not executed" -msgstr "Spiegeln-Aktion wurde nicht ausgeführt" - -#: flatcamEditors/FlatCAMGeoEditor.py:1416 -#: flatcamEditors/FlatCAMGrbEditor.py:6075 -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:1419 -#: flatcamEditors/FlatCAMGrbEditor.py:6078 flatcamTools/ToolTransform.py:801 -msgid "Applying Skew" -msgstr "Schräglauf anwenden" - -#: flatcamEditors/FlatCAMGeoEditor.py:1442 -#: flatcamEditors/FlatCAMGrbEditor.py:6112 -msgid "Skew on the X axis done" -msgstr "Schrägstellung auf der X-Achse erfolgt" - -#: flatcamEditors/FlatCAMGeoEditor.py:1444 -#: flatcamEditors/FlatCAMGrbEditor.py:6114 -msgid "Skew on the Y axis done" -msgstr "Schrägstellung auf der Y-Achse erfolgt" - -#: flatcamEditors/FlatCAMGeoEditor.py:1447 -msgid "Skew action was not executed" -msgstr "Die Versatzaktion wurde nicht ausgeführt" - -#: flatcamEditors/FlatCAMGeoEditor.py:1469 -#: flatcamEditors/FlatCAMGrbEditor.py:6136 -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:1472 -#: flatcamEditors/FlatCAMGrbEditor.py:6139 flatcamTools/ToolTransform.py:847 -msgid "Applying Scale" -msgstr "Maßstab anwenden" - -#: flatcamEditors/FlatCAMGeoEditor.py:1504 -#: flatcamEditors/FlatCAMGrbEditor.py:6176 -msgid "Scale on the X axis done" -msgstr "Skalieren auf der X-Achse erledigt" - -#: flatcamEditors/FlatCAMGeoEditor.py:1506 -#: flatcamEditors/FlatCAMGrbEditor.py:6178 -msgid "Scale on the Y axis done" -msgstr "Skalieren auf der Y-Achse erledigt" - -#: flatcamEditors/FlatCAMGeoEditor.py:1508 -msgid "Scale action was not executed" -msgstr "Skalierungsaktion wurde nicht ausgeführt" - -#: flatcamEditors/FlatCAMGeoEditor.py:1523 -#: flatcamEditors/FlatCAMGrbEditor.py:6195 -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:1526 -#: flatcamEditors/FlatCAMGrbEditor.py:6198 flatcamTools/ToolTransform.py:897 -msgid "Applying Offset" -msgstr "Offsetdruck anwenden" - -#: flatcamEditors/FlatCAMGeoEditor.py:1536 -#: flatcamEditors/FlatCAMGrbEditor.py:6219 -msgid "Offset on the X axis done" -msgstr "Versatz auf der X-Achse erfolgt" - -#: flatcamEditors/FlatCAMGeoEditor.py:1538 -#: flatcamEditors/FlatCAMGrbEditor.py:6221 -msgid "Offset on the Y axis done" -msgstr "Versatz auf der Y-Achse erfolgt" - -#: flatcamEditors/FlatCAMGeoEditor.py:1541 -msgid "Offset action was not executed" -msgstr "Offsetaktion wurde nicht ausgeführt" - -#: flatcamEditors/FlatCAMGeoEditor.py:1545 -#: flatcamEditors/FlatCAMGrbEditor.py:6228 -msgid "Rotate ..." -msgstr "Drehen ..." - -#: flatcamEditors/FlatCAMGeoEditor.py:1546 -#: flatcamEditors/FlatCAMGeoEditor.py:1601 -#: flatcamEditors/FlatCAMGeoEditor.py:1618 -#: flatcamEditors/FlatCAMGrbEditor.py:6229 -#: flatcamEditors/FlatCAMGrbEditor.py:6278 -#: flatcamEditors/FlatCAMGrbEditor.py:6293 -msgid "Enter an Angle Value (degrees)" -msgstr "Geben Sie einen Winkelwert (Grad) ein" - -#: flatcamEditors/FlatCAMGeoEditor.py:1555 -#: flatcamEditors/FlatCAMGrbEditor.py:6237 -msgid "Geometry shape rotate done" -msgstr "Geometrieform drehen fertig" - -#: flatcamEditors/FlatCAMGeoEditor.py:1559 -#: flatcamEditors/FlatCAMGrbEditor.py:6240 -msgid "Geometry shape rotate cancelled" -msgstr "Geometrieform drehen abgebrochen" - -#: flatcamEditors/FlatCAMGeoEditor.py:1564 -#: flatcamEditors/FlatCAMGrbEditor.py:6245 -msgid "Offset on X axis ..." -msgstr "Versatz auf der X-Achse ..." - -#: flatcamEditors/FlatCAMGeoEditor.py:1565 -#: flatcamEditors/FlatCAMGeoEditor.py:1584 -#: flatcamEditors/FlatCAMGrbEditor.py:6246 -#: flatcamEditors/FlatCAMGrbEditor.py:6263 -msgid "Enter a distance Value" -msgstr "Geben Sie einen Abstandswert ein" - -#: flatcamEditors/FlatCAMGeoEditor.py:1574 -#: flatcamEditors/FlatCAMGrbEditor.py:6254 -msgid "Geometry shape offset on X axis done" -msgstr "Geometrieformversatz auf der X-Achse erfolgt" - -#: flatcamEditors/FlatCAMGeoEditor.py:1578 -#: flatcamEditors/FlatCAMGrbEditor.py:6257 -msgid "Geometry shape offset X cancelled" -msgstr "[WARNING_NOTCL] Geometrieformversatz X abgebrochen" - -#: flatcamEditors/FlatCAMGeoEditor.py:1583 -#: flatcamEditors/FlatCAMGrbEditor.py:6262 -msgid "Offset on Y axis ..." -msgstr "Versatz auf der Y-Achse ..." - -#: flatcamEditors/FlatCAMGeoEditor.py:1593 -#: flatcamEditors/FlatCAMGrbEditor.py:6271 -msgid "Geometry shape offset on Y axis done" -msgstr "Geometrieformversatz auf Y-Achse erfolgt" - -#: flatcamEditors/FlatCAMGeoEditor.py:1597 -msgid "Geometry shape offset on Y axis canceled" -msgstr "Geometrieformversatz auf Y-Achse erfolgt" - -#: flatcamEditors/FlatCAMGeoEditor.py:1600 -#: flatcamEditors/FlatCAMGrbEditor.py:6277 -msgid "Skew on X axis ..." -msgstr "Neigung auf der X-Achse ..." - -#: flatcamEditors/FlatCAMGeoEditor.py:1610 -#: flatcamEditors/FlatCAMGrbEditor.py:6286 -msgid "Geometry shape skew on X axis done" -msgstr "Geometrieformversatz auf X-Achse" - -#: flatcamEditors/FlatCAMGeoEditor.py:1614 -msgid "Geometry shape skew on X axis canceled" -msgstr "Geometrieformversatz auf X-Achse" - -#: flatcamEditors/FlatCAMGeoEditor.py:1617 -#: flatcamEditors/FlatCAMGrbEditor.py:6292 -msgid "Skew on Y axis ..." -msgstr "Neigung auf der Y-Achse ..." - -#: flatcamEditors/FlatCAMGeoEditor.py:1627 -#: flatcamEditors/FlatCAMGrbEditor.py:6301 -msgid "Geometry shape skew on Y axis done" -msgstr "Geometrieformversatz auf Y-Achse erfolgt" - -#: flatcamEditors/FlatCAMGeoEditor.py:1631 -msgid "Geometry shape skew on Y axis canceled" -msgstr "Geometrieformversatz auf Y-Achse erfolgt" - -#: flatcamEditors/FlatCAMGeoEditor.py:2008 -#: flatcamEditors/FlatCAMGeoEditor.py:2079 -#: flatcamEditors/FlatCAMGrbEditor.py:1437 -#: flatcamEditors/FlatCAMGrbEditor.py:1515 -msgid "Click on Center point ..." -msgstr "Klicken Sie auf Mittelpunkt." - -#: flatcamEditors/FlatCAMGeoEditor.py:2021 -#: flatcamEditors/FlatCAMGrbEditor.py:1447 -msgid "Click on Perimeter point to complete ..." -msgstr "Klicken Sie auf Umfangspunkt, um den Vorgang abzuschließen." - -#: flatcamEditors/FlatCAMGeoEditor.py:2053 -msgid "Done. Adding Circle completed." -msgstr "Erledigt. Hinzufügen des Kreises abgeschlossen." - -#: flatcamEditors/FlatCAMGeoEditor.py:2107 -#: flatcamEditors/FlatCAMGrbEditor.py:1548 -msgid "Click on Start point ..." -msgstr "Klicken Sie auf Startpunkt ..." - -#: flatcamEditors/FlatCAMGeoEditor.py:2109 -#: flatcamEditors/FlatCAMGrbEditor.py:1550 -msgid "Click on Point3 ..." -msgstr "Klicken Sie auf Punkt3 ..." - -#: flatcamEditors/FlatCAMGeoEditor.py:2111 -#: flatcamEditors/FlatCAMGrbEditor.py:1552 -msgid "Click on Stop point ..." -msgstr "Klicken Sie auf Haltepunkt ..." - -#: flatcamEditors/FlatCAMGeoEditor.py:2116 -#: flatcamEditors/FlatCAMGrbEditor.py:1557 -msgid "Click on Stop point to complete ..." -msgstr "Klicken Sie auf Stopp, um den Vorgang abzuschließen." - -#: flatcamEditors/FlatCAMGeoEditor.py:2118 -#: flatcamEditors/FlatCAMGrbEditor.py:1559 -msgid "Click on Point2 to complete ..." -msgstr "Klicken Sie auf Punkt2, um den Vorgang abzuschließen." - -#: flatcamEditors/FlatCAMGeoEditor.py:2120 -#: flatcamEditors/FlatCAMGrbEditor.py:1561 -msgid "Click on Center point to complete ..." -msgstr "Klicken Sie auf Mittelpunkt, um den Vorgang abzuschließen." - -#: flatcamEditors/FlatCAMGeoEditor.py:2132 -#, python-format -msgid "Direction: %s" -msgstr "Richtung: %s" - -#: flatcamEditors/FlatCAMGeoEditor.py:2146 -#: flatcamEditors/FlatCAMGrbEditor.py:1587 -msgid "Mode: Start -> Stop -> Center. Click on Start point ..." -msgstr "Modus: Start -> Stopp -> Zentrieren. Klicken Sie auf Startpunkt ..." - -#: flatcamEditors/FlatCAMGeoEditor.py:2149 -#: flatcamEditors/FlatCAMGrbEditor.py:1590 -msgid "Mode: Point1 -> Point3 -> Point2. Click on Point1 ..." -msgstr "Modus: Punkt 1 -> Punkt 3 -> Punkt 2. Klicken Sie auf Punkt1 ..." - -#: flatcamEditors/FlatCAMGeoEditor.py:2152 -#: flatcamEditors/FlatCAMGrbEditor.py:1593 -msgid "Mode: Center -> Start -> Stop. Click on Center point ..." -msgstr "Modus: Mitte -> Start -> Stopp. Klicken Sie auf Mittelpunkt." - -#: flatcamEditors/FlatCAMGeoEditor.py:2293 -msgid "Done. Arc completed." -msgstr "Erledigt. Arc abgeschlossen." - -#: flatcamEditors/FlatCAMGeoEditor.py:2324 -#: flatcamEditors/FlatCAMGeoEditor.py:2397 -msgid "Click on 1st corner ..." -msgstr "Klicken Sie auf die 1. Ecke ..." - -#: flatcamEditors/FlatCAMGeoEditor.py:2336 -msgid "Click on opposite corner to complete ..." -msgstr "" -"Klicken Sie auf die gegenüberliegende Ecke, um den Vorgang abzuschließen." - -#: flatcamEditors/FlatCAMGeoEditor.py:2366 -msgid "Done. Rectangle completed." -msgstr "Erledigt. Rechteck fertiggestellt." - -#: flatcamEditors/FlatCAMGeoEditor.py:2410 -#: flatcamObjects/FlatCAMGeometry.py:2648 flatcamTools/ToolNCC.py:1733 -#: flatcamTools/ToolPaint.py:1628 -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:2441 -msgid "Done. Polygon completed." -msgstr "Erledigt. Polygon fertiggestellt." - -#: flatcamEditors/FlatCAMGeoEditor.py:2455 -#: flatcamEditors/FlatCAMGeoEditor.py:2520 -#: flatcamEditors/FlatCAMGrbEditor.py:1113 -#: flatcamEditors/FlatCAMGrbEditor.py:1324 -msgid "Backtracked one point ..." -msgstr "Einen Punkt zurückverfolgt ..." - -#: flatcamEditors/FlatCAMGeoEditor.py:2498 -msgid "Done. Path completed." -msgstr "Getan. Pfad abgeschlossen." - -#: flatcamEditors/FlatCAMGeoEditor.py:2657 -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:2690 -msgid "Done. Polygons exploded into lines." -msgstr "Getan. Polygone explodierten in Linien." - -#: flatcamEditors/FlatCAMGeoEditor.py:2722 -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:2725 -#: flatcamEditors/FlatCAMGeoEditor.py:2745 -msgid " MOVE: Click on reference point ..." -msgstr " Bewegen: Referenzpunkt anklicken ..." - -#: flatcamEditors/FlatCAMGeoEditor.py:2730 -msgid " Click on destination point ..." -msgstr " Klicken Sie auf den Zielpunkt ..." - -#: flatcamEditors/FlatCAMGeoEditor.py:2770 -msgid "Done. Geometry(s) Move completed." -msgstr "Erledigt. Geometrie(n) Bewegung abgeschlossen." - -#: flatcamEditors/FlatCAMGeoEditor.py:2903 -msgid "Done. Geometry(s) Copy completed." -msgstr "Erledigt. Geometrie(n) Kopieren abgeschlossen." - -#: flatcamEditors/FlatCAMGeoEditor.py:2934 -#: flatcamEditors/FlatCAMGrbEditor.py:899 -msgid "Click on 1st point ..." -msgstr "Klicken Sie auf den 1. Punkt ..." - -#: flatcamEditors/FlatCAMGeoEditor.py:2958 -msgid "" -"Font not supported. Only Regular, Bold, Italic and BoldItalic are supported. " -"Error" -msgstr "" -"Schrift wird nicht unterstützt. Es werden nur Regular, Bold, Italic und " -"BoldItalic unterstützt. Error" - -#: flatcamEditors/FlatCAMGeoEditor.py:2966 -msgid "No text to add." -msgstr "Kein Text zum Hinzufügen." - -#: flatcamEditors/FlatCAMGeoEditor.py:2976 -msgid " Done. Adding Text completed." -msgstr " Erledigt. Hinzufügen von Text abgeschlossen." - -#: flatcamEditors/FlatCAMGeoEditor.py:3013 -msgid "Create buffer geometry ..." -msgstr "Puffergeometrie erstellen ..." - -#: flatcamEditors/FlatCAMGeoEditor.py:3048 -#: flatcamEditors/FlatCAMGrbEditor.py:5160 -msgid "Done. Buffer Tool completed." -msgstr "Erledigt. Pufferwerkzeug abgeschlossen." - -#: flatcamEditors/FlatCAMGeoEditor.py:3076 -msgid "Done. Buffer Int Tool completed." -msgstr "Erledigt. Innenpufferwerkzeug abgeschlossen." - -#: flatcamEditors/FlatCAMGeoEditor.py:3104 -msgid "Done. Buffer Ext Tool completed." -msgstr "Erledigt. Außenpufferwerkzeug abgeschlossen." - -#: flatcamEditors/FlatCAMGeoEditor.py:3153 -#: flatcamEditors/FlatCAMGrbEditor.py:2153 -msgid "Select a shape to act as deletion area ..." -msgstr "Wählen Sie eine Form als Löschbereich aus ..." - -#: flatcamEditors/FlatCAMGeoEditor.py:3155 -#: flatcamEditors/FlatCAMGeoEditor.py:3181 -#: flatcamEditors/FlatCAMGeoEditor.py:3187 -#: flatcamEditors/FlatCAMGrbEditor.py:2155 -msgid "Click to pick-up the erase shape..." -msgstr "Klicken Sie, um die Löschform aufzunehmen ..." - -#: flatcamEditors/FlatCAMGeoEditor.py:3191 -#: flatcamEditors/FlatCAMGrbEditor.py:2214 -msgid "Click to erase ..." -msgstr "Klicken zum Löschen ..." - -#: flatcamEditors/FlatCAMGeoEditor.py:3220 -#: flatcamEditors/FlatCAMGrbEditor.py:2247 -msgid "Done. Eraser tool action completed." -msgstr "Erledigt. Radiergummi-Aktion abgeschlossen." - -#: flatcamEditors/FlatCAMGeoEditor.py:3270 -msgid "Create Paint geometry ..." -msgstr "Malen geometrie erstellen ..." - -#: flatcamEditors/FlatCAMGeoEditor.py:3283 -#: flatcamEditors/FlatCAMGrbEditor.py:2410 -msgid "Shape transformations ..." -msgstr "Formtransformationen ..." - -#: flatcamEditors/FlatCAMGeoEditor.py:3339 -#: flatcamGUI/preferences/geometry/GeometryEditorPrefGroupUI.py:27 -msgid "Geometry Editor" -msgstr "Geo-Editor" - -#: flatcamEditors/FlatCAMGeoEditor.py:3345 -#: flatcamEditors/FlatCAMGrbEditor.py:2488 -#: flatcamEditors/FlatCAMGrbEditor.py:3969 flatcamGUI/ObjectUI.py:263 -#: flatcamGUI/ObjectUI.py:1497 flatcamGUI/ObjectUI.py:2326 -#: flatcamTools/ToolCutOut.py:95 -msgid "Type" -msgstr "Typ" - -#: flatcamEditors/FlatCAMGeoEditor.py:3345 flatcamGUI/ObjectUI.py:218 -#: flatcamGUI/ObjectUI.py:742 flatcamGUI/ObjectUI.py:1433 -#: flatcamGUI/ObjectUI.py:2235 flatcamGUI/ObjectUI.py:2539 -#: flatcamGUI/ObjectUI.py:2606 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 "Linie" - -#: flatcamEditors/FlatCAMGeoEditor.py:3591 flatcamGUI/MainGUI.py:2202 -#: flatcamGUI/ObjectUI.py:2074 -#: flatcamGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py:218 -#: flatcamGUI/preferences/tools/ToolsNCCPrefGroupUI.py:328 -#: flatcamGUI/preferences/tools/ToolsPaintPrefGroupUI.py:292 -#: flatcamTools/ToolNCC.py:584 flatcamTools/ToolPaint.py:528 -msgid "Polygon" -msgstr "Polygon" - -#: flatcamEditors/FlatCAMGeoEditor.py:3593 -msgid "Multi-Line" -msgstr "Mehrzeilig" - -#: flatcamEditors/FlatCAMGeoEditor.py:3595 -msgid "Multi-Polygon" -msgstr "Multi-Polygon" - -#: flatcamEditors/FlatCAMGeoEditor.py:3602 -msgid "Geo Elem" -msgstr "Geoelement" - -#: flatcamEditors/FlatCAMGeoEditor.py:4076 -msgid "Editing MultiGeo Geometry, tool" -msgstr "Bearbeiten von MultiGeo Geometry, Werkzeug" - -#: flatcamEditors/FlatCAMGeoEditor.py:4078 -msgid "with diameter" -msgstr "mit Durchmesser" - -#: flatcamEditors/FlatCAMGeoEditor.py:4509 flatcamGUI/MainGUI.py:3753 -#: flatcamGUI/MainGUI.py:3799 flatcamGUI/MainGUI.py:3817 -#: flatcamGUI/MainGUI.py:3961 flatcamGUI/MainGUI.py:4000 -#: flatcamGUI/MainGUI.py:4012 flatcamGUI/MainGUI.py:4029 -msgid "Click on target point." -msgstr "Klicken Sie auf den Zielpunkt." - -#: 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:4944 -#: flatcamEditors/FlatCAMGeoEditor.py:5048 -msgid "" -"Negative buffer value is not accepted. Use Buffer interior to generate an " -"'inside' shape" -msgstr "" -"Negativer Pufferwert wird nicht akzeptiert. Verwenden Sie den " -"Pufferinnenraum, um eine Innenform zu erzeugen" - -#: 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:4959 -#: flatcamEditors/FlatCAMGeoEditor.py:5011 -#: flatcamEditors/FlatCAMGeoEditor.py:5062 -msgid "Invalid distance for buffering." -msgstr "Ungültige Entfernung zum Puffern." - -#: 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:4994 -msgid "Full buffer geometry created." -msgstr "Volle Puffergeometrie erstellt." - -#: flatcamEditors/FlatCAMGeoEditor.py:5000 -msgid "Negative buffer value is not accepted." -msgstr "Negativer Pufferwert wird nicht akzeptiert." - -#: 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:5041 -msgid "Interior buffer geometry created." -msgstr "Innere Puffergeometrie erstellt." - -#: flatcamEditors/FlatCAMGeoEditor.py:5092 -msgid "Exterior buffer geometry created." -msgstr "Außenpuffergeometrie erstellt." - -#: flatcamEditors/FlatCAMGeoEditor.py:5098 -#, python-format -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:5105 -msgid "Nothing selected for painting." -msgstr "Nichts zum Malen ausgewählt." - -#: flatcamEditors/FlatCAMGeoEditor.py:5111 -msgid "Invalid value for" -msgstr "Ungültiger Wert für" - -#: flatcamEditors/FlatCAMGeoEditor.py:5170 -msgid "" -"Could not do Paint. Try a different combination of parameters. Or a " -"different method of Paint" -msgstr "" -"Konnte nicht malen. Probieren Sie eine andere Kombination von Parametern " -"aus. Oder eine andere Malmethode" - -#: flatcamEditors/FlatCAMGeoEditor.py:5181 -msgid "Paint done." -msgstr "Malen fertig." - -#: flatcamEditors/FlatCAMGrbEditor.py:213 -msgid "To add an Pad first select a aperture in Aperture Table" -msgstr "" -"Um ein Pad hinzuzufügen, wählen Sie zunächst eine Blende in der Aperture " -"Table aus" - -#: flatcamEditors/FlatCAMGrbEditor.py:220 -#: flatcamEditors/FlatCAMGrbEditor.py:420 -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:373 -#: flatcamEditors/FlatCAMGrbEditor.py:686 -msgid "" -"Incompatible aperture type. Select an aperture with type 'C', 'R' or 'O'." -msgstr "" -"Inkompatibler Blendentyp. Wählen Sie eine Blende mit dem Typ 'C', 'R' oder " -"'O'." - -#: flatcamEditors/FlatCAMGrbEditor.py:385 -msgid "Done. Adding Pad completed." -msgstr "Erledigt. Hinzufügen von Pad abgeschlossen." - -#: flatcamEditors/FlatCAMGrbEditor.py:412 -msgid "To add an Pad Array first select a aperture in Aperture Table" -msgstr "" -"Um ein Pad-Array hinzuzufügen, wählen Sie zunächst eine Blende in der " -"Aperture-Tabelle aus" - -#: flatcamEditors/FlatCAMGrbEditor.py:492 -msgid "Click on the Pad Circular Array Start position" -msgstr "Klicken Sie auf die Startposition des Pad-Kreis-Arrays" - -#: flatcamEditors/FlatCAMGrbEditor.py:712 -msgid "Too many Pads for the selected spacing angle." -msgstr "Zu viele Pad für den ausgewählten Abstandswinkel." - -#: flatcamEditors/FlatCAMGrbEditor.py:735 -msgid "Done. Pad Array added." -msgstr "Erledigt. Pad Array hinzugefügt." - -#: flatcamEditors/FlatCAMGrbEditor.py:760 -msgid "Select shape(s) and then click ..." -msgstr "Wählen Sie die Form (en) aus und klicken Sie dann auf ..." - -#: flatcamEditors/FlatCAMGrbEditor.py:772 -msgid "Failed. Nothing selected." -msgstr "Gescheitert. Nichts ausgewählt." - -#: flatcamEditors/FlatCAMGrbEditor.py:788 -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:842 -msgid "Done. Poligonize completed." -msgstr "Erledigt. Poligonize abgeschlossen." - -#: flatcamEditors/FlatCAMGrbEditor.py:897 -#: flatcamEditors/FlatCAMGrbEditor.py:1130 -#: flatcamEditors/FlatCAMGrbEditor.py:1154 -msgid "Corner Mode 1: 45 degrees ..." -msgstr "Eckmodus 1: 45 Grad ..." - -#: flatcamEditors/FlatCAMGrbEditor.py:909 -#: flatcamEditors/FlatCAMGrbEditor.py:1239 -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:1118 -#: flatcamEditors/FlatCAMGrbEditor.py:1151 -msgid "Corner Mode 2: Reverse 45 degrees ..." -msgstr "Eckmodus 2: 45 Grad umkehren ..." - -#: flatcamEditors/FlatCAMGrbEditor.py:1121 -#: flatcamEditors/FlatCAMGrbEditor.py:1148 -msgid "Corner Mode 3: 90 degrees ..." -msgstr "Eckmodus 3: 90 Grad ..." - -#: flatcamEditors/FlatCAMGrbEditor.py:1124 -#: flatcamEditors/FlatCAMGrbEditor.py:1145 -msgid "Corner Mode 4: Reverse 90 degrees ..." -msgstr "Eckmodus 4: Um 90 Grad umkehren ..." - -#: flatcamEditors/FlatCAMGrbEditor.py:1127 -#: flatcamEditors/FlatCAMGrbEditor.py:1142 -msgid "Corner Mode 5: Free angle ..." -msgstr "Eckmodus 5: Freiwinkel ..." - -#: flatcamEditors/FlatCAMGrbEditor.py:1184 -#: flatcamEditors/FlatCAMGrbEditor.py:1360 -#: flatcamEditors/FlatCAMGrbEditor.py:1399 -msgid "Track Mode 1: 45 degrees ..." -msgstr "Spurmodus 1: 45 Grad ..." - -#: flatcamEditors/FlatCAMGrbEditor.py:1340 -#: flatcamEditors/FlatCAMGrbEditor.py:1394 -msgid "Track Mode 2: Reverse 45 degrees ..." -msgstr "Spurmodus 2: 45 Grad umkehren ..." - -#: flatcamEditors/FlatCAMGrbEditor.py:1345 -#: flatcamEditors/FlatCAMGrbEditor.py:1389 -msgid "Track Mode 3: 90 degrees ..." -msgstr "Spurmodus 3: 90 Grad ..." - -#: flatcamEditors/FlatCAMGrbEditor.py:1350 -#: flatcamEditors/FlatCAMGrbEditor.py:1384 -msgid "Track Mode 4: Reverse 90 degrees ..." -msgstr "Spurmodus 4: Um 90 Grad umkehren ..." - -#: flatcamEditors/FlatCAMGrbEditor.py:1355 -#: flatcamEditors/FlatCAMGrbEditor.py:1379 -msgid "Track Mode 5: Free angle ..." -msgstr "Spurmodus 5: Freiwinkel ..." - -#: flatcamEditors/FlatCAMGrbEditor.py:1780 -msgid "Scale the selected Gerber apertures ..." -msgstr "Skalieren Sie die ausgewählten Gerber-Öffnungen ..." - -#: flatcamEditors/FlatCAMGrbEditor.py:1822 -msgid "Buffer the selected apertures ..." -msgstr "Die ausgewählten Öffnungen puffern ..." - -#: flatcamEditors/FlatCAMGrbEditor.py:1864 -msgid "Mark polygon areas in the edited Gerber ..." -msgstr "Markiere Polygonbereiche im bearbeiteten Gerber ..." - -#: flatcamEditors/FlatCAMGrbEditor.py:1930 -msgid "Nothing selected to move" -msgstr "Nichts zum Bewegen ausgewählt" - -#: flatcamEditors/FlatCAMGrbEditor.py:2055 -msgid "Done. Apertures Move completed." -msgstr "Erledigt. Öffnungsbewegung abgeschlossen." - -#: flatcamEditors/FlatCAMGrbEditor.py:2137 -msgid "Done. Apertures copied." -msgstr "Erledigt. Blende kopiert." - -#: flatcamEditors/FlatCAMGrbEditor.py:2455 flatcamGUI/MainGUI.py:2233 -#: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:27 -msgid "Gerber Editor" -msgstr "Gerber-Editor" - -#: flatcamEditors/FlatCAMGrbEditor.py:2475 flatcamGUI/ObjectUI.py:228 -#: flatcamTools/ToolProperties.py:159 -msgid "Apertures" -msgstr "Öffnungen" - -#: flatcamEditors/FlatCAMGrbEditor.py:2477 flatcamGUI/ObjectUI.py:230 -msgid "Apertures Table for the Gerber Object." -msgstr "Blendentabelle für das Gerberobjekt." - -#: flatcamEditors/FlatCAMGrbEditor.py:2488 -#: flatcamEditors/FlatCAMGrbEditor.py:3969 flatcamGUI/ObjectUI.py:263 -msgid "Code" -msgstr "Code" - -#: flatcamEditors/FlatCAMGrbEditor.py:2488 -#: flatcamEditors/FlatCAMGrbEditor.py:3969 flatcamGUI/ObjectUI.py:263 -#: flatcamGUI/preferences/general/GeneralAPPSetGroupUI.py:103 -#: flatcamGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:167 -#: flatcamGUI/preferences/tools/Tools2CThievingPrefGroupUI.py:196 -#: flatcamGUI/preferences/tools/Tools2FiducialsPrefGroupUI.py:43 -#: flatcamTools/ToolCopperThieving.py:261 -#: flatcamTools/ToolCopperThieving.py:301 flatcamTools/ToolFiducials.py:156 -msgid "Size" -msgstr "Größe" - -#: flatcamEditors/FlatCAMGrbEditor.py:2488 -#: flatcamEditors/FlatCAMGrbEditor.py:3969 flatcamGUI/ObjectUI.py:263 -msgid "Dim" -msgstr "Maße" - -#: flatcamEditors/FlatCAMGrbEditor.py:2493 flatcamGUI/ObjectUI.py:267 -msgid "Index" -msgstr "Index" - -#: flatcamEditors/FlatCAMGrbEditor.py:2495 -#: flatcamEditors/FlatCAMGrbEditor.py:2524 flatcamGUI/ObjectUI.py:269 -msgid "Aperture Code" -msgstr "Öffnungscode" - -#: flatcamEditors/FlatCAMGrbEditor.py:2497 flatcamGUI/ObjectUI.py:271 -msgid "Type of aperture: circular, rectangle, macros etc" -msgstr "Öffnungsart: kreisförmig, rechteckig, Makros usw" - -#: flatcamEditors/FlatCAMGrbEditor.py:2499 flatcamGUI/ObjectUI.py:273 -msgid "Aperture Size:" -msgstr "Öffnungsgröße:" - -#: flatcamEditors/FlatCAMGrbEditor.py:2501 flatcamGUI/ObjectUI.py:275 -msgid "" -"Aperture Dimensions:\n" -" - (width, height) for R, O type.\n" -" - (dia, nVertices) for P type" -msgstr "" -"Blendenmaße:\n" -"  - (Breite, Höhe) für R, O-Typ.\n" -"  - (dia, nVertices) für P-Typ" - -#: flatcamEditors/FlatCAMGrbEditor.py:2525 -#: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:58 -msgid "Code for the new aperture" -msgstr "Code für die neue Blende" - -#: flatcamEditors/FlatCAMGrbEditor.py:2534 -msgid "Aperture Size" -msgstr "Öffnungsgröße" - -#: flatcamEditors/FlatCAMGrbEditor.py:2536 -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 "" -"Größe für die neue Blende.\n" -"Wenn der Blendentyp 'R' oder 'O' ist, dann\n" -"Dieser Wert wird automatisch übernommen\n" -"berechnet als:\n" -"Quadrat (Breite ** 2 + Höhe ** 2)" - -#: flatcamEditors/FlatCAMGrbEditor.py:2550 -msgid "Aperture Type" -msgstr "Blendentyp" - -#: flatcamEditors/FlatCAMGrbEditor.py:2552 -msgid "" -"Select the type of new aperture. Can be:\n" -"C = circular\n" -"R = rectangular\n" -"O = oblong" -msgstr "" -"Wählen Sie den Typ der neuen Blende. Kann sein:\n" -"C = kreisförmig\n" -"R = rechteckig\n" -"O = länglich" - -#: flatcamEditors/FlatCAMGrbEditor.py:2563 -msgid "Aperture Dim" -msgstr "Öffnungsmaße" - -#: flatcamEditors/FlatCAMGrbEditor.py:2565 -msgid "" -"Dimensions for the new aperture.\n" -"Active only for rectangular apertures (type R).\n" -"The format is (width, height)" -msgstr "" -"Abmessungen für die neue Blende.\n" -"Aktiv nur für rechteckige Öffnungen (Typ R).\n" -"Das Format ist (Breite, Höhe)" - -#: flatcamEditors/FlatCAMGrbEditor.py:2574 -msgid "Add/Delete Aperture" -msgstr "Blende hinzufügen / löschen" - -#: flatcamEditors/FlatCAMGrbEditor.py:2576 -msgid "Add/Delete an aperture in the aperture table" -msgstr "Eine Blende in der Blendentabelle hinzufügen / löschen" - -#: flatcamEditors/FlatCAMGrbEditor.py:2585 -msgid "Add a new aperture to the aperture list." -msgstr "Fügen Sie der Blendenliste eine neue Blende hinzu." - -#: flatcamEditors/FlatCAMGrbEditor.py:2590 -msgid "Delete a aperture in the aperture list" -msgstr "Löschen Sie eine Blende in der Blendenliste" - -#: flatcamEditors/FlatCAMGrbEditor.py:2607 -msgid "Buffer Aperture" -msgstr "Pufferblende" - -#: flatcamEditors/FlatCAMGrbEditor.py:2609 -msgid "Buffer a aperture in the aperture list" -msgstr "Puffern Sie eine Blende in der Blendenliste" - -#: flatcamEditors/FlatCAMGrbEditor.py:2622 -#: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:194 -msgid "Buffer distance" -msgstr "Pufferabstand" - -#: flatcamEditors/FlatCAMGrbEditor.py:2623 -msgid "Buffer corner" -msgstr "Pufferecke" - -#: flatcamEditors/FlatCAMGrbEditor.py:2625 -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 "" -"Es gibt 3 Arten von Ecken:\n" -"- 'Kreis': Die Ecke ist abgerundet.\n" -"- 'Quadrat:' Die Ecke wird in einem spitzen Winkel getroffen.\n" -"- 'Abgeschrägt:' Die Ecke ist eine Linie, die die Features, die sich in der " -"Ecke treffen, direkt verbindet" - -#: flatcamEditors/FlatCAMGrbEditor.py:2640 flatcamGUI/MainGUI.py:1061 -#: flatcamGUI/MainGUI.py:2138 flatcamGUI/MainGUI.py:2210 -#: flatcamGUI/MainGUI.py:2253 flatcamGUI/MainGUI.py:2765 -#: flatcamGUI/preferences/tools/ToolsTransformPrefGroupUI.py:200 -#: flatcamTools/ToolTransform.py:29 -msgid "Buffer" -msgstr "Puffer" - -#: flatcamEditors/FlatCAMGrbEditor.py:2655 -msgid "Scale Aperture" -msgstr "Skalenöffnung" - -#: flatcamEditors/FlatCAMGrbEditor.py:2657 -msgid "Scale a aperture in the aperture list" -msgstr "Skalieren Sie eine Blende in der Blendenliste" - -#: flatcamEditors/FlatCAMGrbEditor.py:2665 -#: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:209 -msgid "Scale factor" -msgstr "Skalierungsfaktor" - -#: flatcamEditors/FlatCAMGrbEditor.py:2667 -msgid "" -"The factor by which to scale the selected aperture.\n" -"Values can be between 0.0000 and 999.9999" -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:2695 -msgid "Mark polygons" -msgstr "Polygone markieren" - -#: flatcamEditors/FlatCAMGrbEditor.py:2697 -msgid "Mark the polygon areas." -msgstr "Markieren Sie die Polygonbereiche." - -#: flatcamEditors/FlatCAMGrbEditor.py:2705 -msgid "Area UPPER threshold" -msgstr "Flächenobergrenze" - -#: flatcamEditors/FlatCAMGrbEditor.py:2707 -msgid "" -"The threshold value, all areas less than this are marked.\n" -"Can have a value between 0.0000 and 9999.9999" -msgstr "" -"Der Schwellenwert, alle Bereiche, die darunter liegen, sind markiert.\n" -"Kann einen Wert zwischen 0,0000 und 9999,9999 haben" - -#: flatcamEditors/FlatCAMGrbEditor.py:2714 -msgid "Area LOWER threshold" -msgstr "Bereichsuntergrenze" - -#: flatcamEditors/FlatCAMGrbEditor.py:2716 -msgid "" -"The threshold value, all areas more than this are marked.\n" -"Can have a value between 0.0000 and 9999.9999" -msgstr "" -"Mit dem Schwellwert sind alle Bereiche gekennzeichnet, die darüber " -"hinausgehen.\n" -"Kann einen Wert zwischen 0,0000 und 9999,9999 haben" - -#: flatcamEditors/FlatCAMGrbEditor.py:2730 -msgid "Mark" -msgstr "Kennzeichen" - -#: flatcamEditors/FlatCAMGrbEditor.py:2732 -msgid "Mark the polygons that fit within limits." -msgstr "Markieren Sie die Polygone, die in Grenzen passen." - -#: flatcamEditors/FlatCAMGrbEditor.py:2738 -msgid "Delete all the marked polygons." -msgstr "Löschen Sie alle markierten Polygone." - -#: flatcamEditors/FlatCAMGrbEditor.py:2744 -msgid "Clear all the markings." -msgstr "Alle Markierungen entfernen." - -#: flatcamEditors/FlatCAMGrbEditor.py:2764 flatcamGUI/MainGUI.py:1046 -#: flatcamGUI/MainGUI.py:2138 flatcamGUI/MainGUI.py:2750 -msgid "Add Pad Array" -msgstr "Pad-Array hinzufügen" - -#: flatcamEditors/FlatCAMGrbEditor.py:2766 -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:2772 -msgid "" -"Select the type of pads array to create.\n" -"It can be Linear X(Y) or Circular" -msgstr "" -"Wählen Sie den zu erstellenden Pad-Array-Typ aus.\n" -"Es kann lineares X (Y) oder rund sein" - -#: flatcamEditors/FlatCAMGrbEditor.py:2783 -#: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:95 -msgid "Nr of pads" -msgstr "Anzahl der Pads" - -#: flatcamEditors/FlatCAMGrbEditor.py:2785 -#: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:97 -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:2834 -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 "" -"Winkel, bei dem das lineare Array platziert wird.\n" -"Die Genauigkeit beträgt maximal 2 Dezimalstellen.\n" -"Der Mindestwert beträgt -359,99 Grad.\n" -"Maximalwert ist: 360.00 Grad." - -#: flatcamEditors/FlatCAMGrbEditor.py:3328 -#: flatcamEditors/FlatCAMGrbEditor.py:3332 -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:3368 -msgid "" -"Aperture dimensions value is missing or wrong format. Add it in format " -"(width, height) and retry." -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:3381 -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:3392 -msgid "Aperture already in the aperture table." -msgstr "Blende bereits in der Blendentabelle." - -#: flatcamEditors/FlatCAMGrbEditor.py:3399 -msgid "Added new aperture with code" -msgstr "Neue Blende mit Code hinzugefügt" - -#: flatcamEditors/FlatCAMGrbEditor.py:3431 -msgid " Select an aperture in Aperture Table" -msgstr " Wählen Sie in Blende Table eine Blende aus" - -#: flatcamEditors/FlatCAMGrbEditor.py:3439 -msgid "Select an aperture in Aperture Table -->" -msgstr "Wählen Sie in Blende Table eine Blende aus -->" - -#: flatcamEditors/FlatCAMGrbEditor.py:3453 -msgid "Deleted aperture with code" -msgstr "Blende mit Code gelöscht" - -#: flatcamEditors/FlatCAMGrbEditor.py:3521 -msgid "Dimensions need two float values separated by comma." -msgstr "Bemaßungen benötigen zwei durch Komma getrennte Gleitkommawerte." - -#: flatcamEditors/FlatCAMGrbEditor.py:3530 -msgid "Dimensions edited." -msgstr "Abmessungen bearbeitet." - -#: flatcamEditors/FlatCAMGrbEditor.py:4084 -msgid "Loading Gerber into Editor" -msgstr "Gerber File wird in den Editor geladen" - -#: flatcamEditors/FlatCAMGrbEditor.py:4212 -msgid "Setting up the UI" -msgstr "UI wird initialisiert" - -#: flatcamEditors/FlatCAMGrbEditor.py:4213 -msgid "Adding geometry finished. Preparing the GUI" -msgstr "Geometrie wurde hinzugefügt. User Interface wird vorbereitet" - -#: flatcamEditors/FlatCAMGrbEditor.py:4222 -msgid "Finished loading the Gerber object into the editor." -msgstr "Gerber-Objekte wurde in den Editor geladen." - -#: flatcamEditors/FlatCAMGrbEditor.py:4361 -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:4371 -msgid "Creating Gerber." -msgstr "Gerber erstellen." - -#: flatcamEditors/FlatCAMGrbEditor.py:4380 -msgid "Done. Gerber editing finished." -msgstr "Erledigt. Gerber-Bearbeitung beendet." - -#: flatcamEditors/FlatCAMGrbEditor.py:4398 -msgid "Cancelled. No aperture is selected" -msgstr "Abgebrochen. Es ist keine Blende ausgewählt" - -#: flatcamEditors/FlatCAMGrbEditor.py:4992 -msgid "Failed. No aperture geometry is selected." -msgstr "Gescheitert. Es ist keine Aperturgeometrie ausgewählt." - -#: flatcamEditors/FlatCAMGrbEditor.py:5001 -#: flatcamEditors/FlatCAMGrbEditor.py:5272 -msgid "Done. Apertures geometry deleted." -msgstr "Fertig. Blendengeometrie gelöscht." - -#: flatcamEditors/FlatCAMGrbEditor.py:5144 -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:5156 -msgid "Failed." -msgstr "Gescheitert." - -#: flatcamEditors/FlatCAMGrbEditor.py:5175 -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:5207 -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:5223 -msgid "Done. Scale Tool completed." -msgstr "Erledigt. Skalierungswerkzeug abgeschlossen." - -#: flatcamEditors/FlatCAMGrbEditor.py:5261 -msgid "Polygons marked." -msgstr "Polygone markiert." - -#: flatcamEditors/FlatCAMGrbEditor.py:5264 -msgid "No polygons were marked. None fit within the limits." -msgstr "Es wurden keine Polygone markiert. Keiner passt in die Grenzen." - -#: flatcamEditors/FlatCAMGrbEditor.py:5988 -msgid "Rotation action was not executed." -msgstr "Rotationsaktion wurde nicht ausgeführt." - -#: flatcamEditors/FlatCAMGrbEditor.py:6116 -msgid "Skew action was not executed." -msgstr "Die Versatzaktion wurde nicht ausgeführt." - -#: flatcamEditors/FlatCAMGrbEditor.py:6181 -msgid "Scale action was not executed." -msgstr "Skalierungsaktion wurde nicht ausgeführt." - -#: flatcamEditors/FlatCAMGrbEditor.py:6224 -msgid "Offset action was not executed." -msgstr "Offsetaktion wurde nicht ausgeführt." - -#: flatcamEditors/FlatCAMGrbEditor.py:6274 -msgid "Geometry shape offset Y cancelled" -msgstr "Geometrieform-Versatz Y abgebrochen" - -#: flatcamEditors/FlatCAMGrbEditor.py:6289 -msgid "Geometry shape skew X cancelled" -msgstr "Geometrieformverzerren X abgebrochen" - -#: flatcamEditors/FlatCAMGrbEditor.py:6304 -msgid "Geometry shape skew Y cancelled" -msgstr "Geometrieformverzerren Y abgebrochen" - -#: flatcamEditors/FlatCAMTextEditor.py:74 -msgid "Print Preview" -msgstr "Druckvorschau" - -#: 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:78 -msgid "Print Code" -msgstr "Code drucken" - -#: flatcamEditors/FlatCAMTextEditor.py:79 -msgid "Open a OS standard Print window." -msgstr "Öffnen Sie ein Betriebssystem-Standard-Druckfenster." - -#: flatcamEditors/FlatCAMTextEditor.py:81 -msgid "Find in Code" -msgstr "Im Code suchen" - -#: 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: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:88 -msgid "Replace With" -msgstr "Ersetzen mit" - -#: 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: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:95 flatcamGUI/ObjectUI.py:486 -#: flatcamGUI/ObjectUI.py:2219 -#: flatcamGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:54 -#: flatcamGUI/preferences/gerber/GerberOptPrefGroupUI.py:88 -msgid "All" -msgstr "Alles" - -#: 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 "" -"Wenn diese Option aktiviert ist, werden alle Instanzen im Feld \"Suchen\" " -"ersetzt\n" -"mit dem Text im Feld \"Ersetzen\" .." - -#: flatcamEditors/FlatCAMTextEditor.py:99 -msgid "Copy All" -msgstr "Kopiere alles" - -#: 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:103 -msgid "Open Code" -msgstr "Code öffnen" - -#: flatcamEditors/FlatCAMTextEditor.py:104 -msgid "Will open a text file in the editor." -msgstr "Öffnet eine Textdatei im Editor." - -#: flatcamEditors/FlatCAMTextEditor.py:106 -msgid "Save Code" -msgstr "Code speichern" - -#: 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:109 -msgid "Run Code" -msgstr "Code ausführen" - -#: 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:184 -msgid "Open file" -msgstr "Datei öffnen" - -#: flatcamEditors/FlatCAMTextEditor.py:215 -#: flatcamEditors/FlatCAMTextEditor.py:220 -msgid "Export Code ..." -msgstr "Code exportieren ..." - -#: flatcamEditors/FlatCAMTextEditor.py:272 flatcamObjects/FlatCAMCNCJob.py:955 -#: flatcamTools/ToolSolderPaste.py:1530 -msgid "No such file or directory" -msgstr "Keine solche Datei oder Ordner" - -#: flatcamEditors/FlatCAMTextEditor.py:284 flatcamObjects/FlatCAMCNCJob.py:969 -msgid "Saved to" -msgstr "Gespeichert in" - -#: flatcamEditors/FlatCAMTextEditor.py:334 -msgid "Code Editor content copied to clipboard ..." -msgstr "Code Editor Inhalt in die Zwischenablage kopiert ..." - -#: flatcamGUI/MainGUI.py:78 flatcamGUI/MainGUI.py:80 -#: flatcamGUI/MainGUI.py:2163 -msgid "Toggle Panel" -msgstr "Panel umschalten" - -#: flatcamGUI/MainGUI.py:90 -msgid "File" -msgstr "Datei" - -#: flatcamGUI/MainGUI.py:95 -msgid "&New Project ...\tCtrl+N" -msgstr "&Neues Projekt ...\\STRG+N" - -#: flatcamGUI/MainGUI.py:97 -msgid "Will create a new, blank project" -msgstr "Erzeugt ein neues leeres Projekt" - -#: flatcamGUI/MainGUI.py:102 -msgid "&New" -msgstr "&Neu" - -#: flatcamGUI/MainGUI.py:106 -msgid "Geometry\tN" -msgstr "Geometrie\tN" - -#: flatcamGUI/MainGUI.py:108 -msgid "Will create a new, empty Geometry Object." -msgstr "Erzeugt ein neues, leeres Geometrieobjekt." - -#: flatcamGUI/MainGUI.py:111 -msgid "Gerber\tB" -msgstr "Gerber\tB" - -#: flatcamGUI/MainGUI.py:113 -msgid "Will create a new, empty Gerber Object." -msgstr "Erzeugt ein neues, leeres Gerber-Objekt." - -#: flatcamGUI/MainGUI.py:116 -msgid "Excellon\tL" -msgstr "Excellon\tL" - -#: flatcamGUI/MainGUI.py:118 -msgid "Will create a new, empty Excellon Object." -msgstr "Erzeugt ein neues, leeres Excellon-Objekt." - -#: flatcamGUI/MainGUI.py:123 -msgid "Document\tD" -msgstr "Dokumentieren\tD" - -#: flatcamGUI/MainGUI.py:125 -msgid "Will create a new, empty Document Object." -msgstr "Erstellt ein neues, leeres Dokumentobjekt." - -#: flatcamGUI/MainGUI.py:129 flatcamGUI/MainGUI.py:4420 -#: flatcamTools/ToolPcbWizard.py:62 flatcamTools/ToolPcbWizard.py:69 -msgid "Open" -msgstr "Öffnen" - -#: flatcamGUI/MainGUI.py:134 -msgid "Open &Project ..." -msgstr "&Projekt öffnen..." - -#: flatcamGUI/MainGUI.py:140 flatcamGUI/MainGUI.py:4430 -msgid "Open &Gerber ...\tCtrl+G" -msgstr "&Gerber öffnen...\\STRG+G" - -#: flatcamGUI/MainGUI.py:145 flatcamGUI/MainGUI.py:4435 -msgid "Open &Excellon ...\tCtrl+E" -msgstr "&Excellon öffnen...\\STRG+E" - -#: flatcamGUI/MainGUI.py:150 flatcamGUI/MainGUI.py:4440 -msgid "Open G-&Code ..." -msgstr "G-&Code öffnen..." - -#: flatcamGUI/MainGUI.py:157 -msgid "Open Config ..." -msgstr "Config öffnen..." - -#: flatcamGUI/MainGUI.py:162 -msgid "Recent projects" -msgstr "Letzte Projekte" - -#: flatcamGUI/MainGUI.py:164 -msgid "Recent files" -msgstr "Neueste Dateien" - -#: flatcamGUI/MainGUI.py:167 flatcamGUI/MainGUI.py:753 -#: flatcamGUI/MainGUI.py:1339 -msgid "Save" -msgstr "Speichern" - -#: flatcamGUI/MainGUI.py:171 -msgid "&Save Project ...\tCtrl+S" -msgstr "Projekt speichern ...\\STRG+S" - -#: flatcamGUI/MainGUI.py:176 -msgid "Save Project &As ...\tCtrl+Shift+S" -msgstr "Projekt speichern als ...\\STRG+Shift+S" - -#: flatcamGUI/MainGUI.py:191 -msgid "Scripting" -msgstr "Scripting" - -#: flatcamGUI/MainGUI.py:195 flatcamGUI/MainGUI.py:903 -#: flatcamGUI/MainGUI.py:2607 -msgid "New Script ..." -msgstr "Neues Skript ..." - -#: flatcamGUI/MainGUI.py:197 flatcamGUI/MainGUI.py:905 -#: flatcamGUI/MainGUI.py:2609 -msgid "Open Script ..." -msgstr "Skript öffnen ..." - -#: flatcamGUI/MainGUI.py:199 -msgid "Open Example ..." -msgstr "Beispiel öffnen ..." - -#: flatcamGUI/MainGUI.py:201 flatcamGUI/MainGUI.py:907 -#: flatcamGUI/MainGUI.py:2611 flatcamGUI/MainGUI.py:4409 -msgid "Run Script ..." -msgstr "Skript ausführen ..." - -#: flatcamGUI/MainGUI.py:203 flatcamGUI/MainGUI.py:4411 -msgid "" -"Will run the opened Tcl Script thus\n" -"enabling the automation of certain\n" -"functions of FlatCAM." -msgstr "" -"Das geöffnete Tcl-Skript wird ausgeführt.\n" -"Ermöglichung der Automatisierung bestimmter\n" -"Funktionen von FlatCAM." - -#: flatcamGUI/MainGUI.py:218 -msgid "Import" -msgstr "Importieren" - -#: flatcamGUI/MainGUI.py:220 -msgid "&SVG as Geometry Object ..." -msgstr "&SVG als Geometrieobjekt ..." - -#: flatcamGUI/MainGUI.py:223 -msgid "&SVG as Gerber Object ..." -msgstr "&SVG als Gerberobjekt ..." - -#: flatcamGUI/MainGUI.py:228 -msgid "&DXF as Geometry Object ..." -msgstr "&DXF als Geometrieobjekt ..." - -#: flatcamGUI/MainGUI.py:231 -msgid "&DXF as Gerber Object ..." -msgstr "&DXF als Gerberobjekt ..." - -#: flatcamGUI/MainGUI.py:235 -msgid "HPGL2 as Geometry Object ..." -msgstr "HPGL2 als Geometrieobjekt ..." - -#: flatcamGUI/MainGUI.py:241 -msgid "Export" -msgstr "Exportieren" - -#: flatcamGUI/MainGUI.py:245 -msgid "Export &SVG ..." -msgstr "SVG exportieren ..." - -#: flatcamGUI/MainGUI.py:249 -msgid "Export DXF ..." -msgstr "DXF exportieren ..." - -#: flatcamGUI/MainGUI.py:255 -msgid "Export &PNG ..." -msgstr "PNG exportieren ..." - -#: flatcamGUI/MainGUI.py:257 -msgid "" -"Will export an image in PNG format,\n" -"the saved image will contain the visual \n" -"information currently in FlatCAM Plot Area." -msgstr "" -"Exportiert ein Bild im PNG-Format,\n" -"Das gespeicherte Bild enthält die\n" -"Bildinformationen des FlatCAM-Plotbereiches." - -#: flatcamGUI/MainGUI.py:266 -msgid "Export &Excellon ..." -msgstr "Excellon exportieren ..." - -#: flatcamGUI/MainGUI.py:268 -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 "" -"Exportieren Exportiert ein Excellon-Objekt als Excellon-Datei.\n" -"Das Koordinatenformat, die Dateieinheiten und Nullen\n" -"werden in den Einstellungen -> Excellon Export.Excellon eingestellt ..." - -#: flatcamGUI/MainGUI.py:275 -msgid "Export &Gerber ..." -msgstr "Gerber exportieren ..." - -#: flatcamGUI/MainGUI.py:277 -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 "" -"Exportiert ein Gerber-Objekt als Gerber-Datei.\n" -"das Koordinatenformat, die Dateieinheiten und Nullen\n" -"werden in den Einstellungen -> Gerber Export eingestellt." - -#: flatcamGUI/MainGUI.py:287 -msgid "Backup" -msgstr "Sicherungskopie" - -#: flatcamGUI/MainGUI.py:292 -msgid "Import Preferences from file ..." -msgstr "Einstellungen aus Datei importieren ..." - -#: flatcamGUI/MainGUI.py:298 -msgid "Export Preferences to file ..." -msgstr "Einstellungen in Datei exportieren ..." - -#: flatcamGUI/MainGUI.py:306 -#: flatcamGUI/preferences/PreferencesUIManager.py:1119 -msgid "Save Preferences" -msgstr "Einstellungen speichern" - -#: flatcamGUI/MainGUI.py:312 flatcamGUI/MainGUI.py:1730 -msgid "Print (PDF)" -msgstr "Drucken (PDF)" - -#: flatcamGUI/MainGUI.py:320 -msgid "E&xit" -msgstr "Ausgang" - -#: flatcamGUI/MainGUI.py:328 flatcamGUI/MainGUI.py:747 -#: flatcamGUI/MainGUI.py:2286 -msgid "Edit" -msgstr "Bearbeiten" - -#: flatcamGUI/MainGUI.py:332 -msgid "Edit Object\tE" -msgstr "Objekt bearbeiten\tE" - -#: flatcamGUI/MainGUI.py:334 -msgid "Close Editor\tCtrl+S" -msgstr "Schließen Sie Editor\tSTRG+S" - -#: flatcamGUI/MainGUI.py:343 -msgid "Conversion" -msgstr "Umwandlung" - -#: flatcamGUI/MainGUI.py:345 -msgid "&Join Geo/Gerber/Exc -> Geo" -msgstr "Geo/Gerber/Exc -> Geo zusammenfassen" - -#: flatcamGUI/MainGUI.py:347 -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 "" -"Zusammenführen einer Auswahl von Objekten, die vom Typ sein können:\n" -"- Gerber\n" -"- Excellon\n" -"- Geometrie\n" -"in ein neues Geometrieobjekt kombinieren." - -#: flatcamGUI/MainGUI.py:354 -msgid "Join Excellon(s) -> Excellon" -msgstr "Excellon(s) -> Excellon zusammenfassen" - -#: flatcamGUI/MainGUI.py:356 -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/MainGUI.py:359 -msgid "Join Gerber(s) -> Gerber" -msgstr "Gerber(s) -> Gerber zusammenfassen" - -#: flatcamGUI/MainGUI.py:361 -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/MainGUI.py:366 -msgid "Convert Single to MultiGeo" -msgstr "Konvertieren Sie Single in MultiGeo" - -#: flatcamGUI/MainGUI.py:368 -msgid "" -"Will convert a Geometry object from single_geometry type\n" -"to a multi_geometry type." -msgstr "" -"Konvertiert ein Geometrieobjekt vom Typ single_geometry\n" -"zu einem multi_geometry-Typ." - -#: flatcamGUI/MainGUI.py:372 -msgid "Convert Multi to SingleGeo" -msgstr "Konvertieren Sie Multi in SingleGeo" - -#: flatcamGUI/MainGUI.py:374 -msgid "" -"Will convert a Geometry object from multi_geometry type\n" -"to a single_geometry type." -msgstr "" -"Konvertiert ein Geometrieobjekt vom Typ multi_geometry\n" -"zu einem single_geometry-Typ." - -#: flatcamGUI/MainGUI.py:381 -msgid "Convert Any to Geo" -msgstr "Konvertieren Sie Any zu Geo" - -#: flatcamGUI/MainGUI.py:384 -msgid "Convert Any to Gerber" -msgstr "Konvertieren Sie Any zu Gerber" - -#: flatcamGUI/MainGUI.py:390 -msgid "&Copy\tCtrl+C" -msgstr "Kopieren\tSTRG+C" - -#: flatcamGUI/MainGUI.py:395 -msgid "&Delete\tDEL" -msgstr "Löschen\tDEL" - -#: flatcamGUI/MainGUI.py:400 -msgid "Se&t Origin\tO" -msgstr "Ursprung festlegen\tO" - -#: flatcamGUI/MainGUI.py:402 -msgid "Move to Origin\tShift+O" -msgstr "Zum Ursprung wechseln\tShift+O" - -#: flatcamGUI/MainGUI.py:405 -msgid "Jump to Location\tJ" -msgstr "Zum Ort springen\tJ" - -#: flatcamGUI/MainGUI.py:407 -msgid "Locate in Object\tShift+J" -msgstr "Suchen Sie im Objekt\tShift+J" - -#: flatcamGUI/MainGUI.py:412 -msgid "Toggle Units\tQ" -msgstr "Einheiten umschalten\tQ" - -#: flatcamGUI/MainGUI.py:414 -msgid "&Select All\tCtrl+A" -msgstr "Alles auswählen\tSTRG+A" - -#: flatcamGUI/MainGUI.py:419 -msgid "&Preferences\tShift+P" -msgstr "Einstellungen\tShift+P" - -#: flatcamGUI/MainGUI.py:425 flatcamTools/ToolProperties.py:155 -msgid "Options" -msgstr "Optionen" - -#: flatcamGUI/MainGUI.py:427 -msgid "&Rotate Selection\tShift+(R)" -msgstr "Auswahl drehen\tShift+(R)" - -#: flatcamGUI/MainGUI.py:432 -msgid "&Skew on X axis\tShift+X" -msgstr "Neigung auf der X-Achse\tShift+X" - -#: flatcamGUI/MainGUI.py:434 -msgid "S&kew on Y axis\tShift+Y" -msgstr "Neigung auf der Y-Achse\tShift+Y" - -#: flatcamGUI/MainGUI.py:439 -msgid "Flip on &X axis\tX" -msgstr "X-Achse kippen\tX" - -#: flatcamGUI/MainGUI.py:441 -msgid "Flip on &Y axis\tY" -msgstr "Y-Achse kippen\tY" - -#: flatcamGUI/MainGUI.py:446 -msgid "View source\tAlt+S" -msgstr "Quelltext anzeigen\tAlt+S" - -#: flatcamGUI/MainGUI.py:448 -msgid "Tools DataBase\tCtrl+D" -msgstr "Werkzeugdatenbank\tSTRG+D" - -#: flatcamGUI/MainGUI.py:455 flatcamGUI/MainGUI.py:2183 -msgid "View" -msgstr "Aussicht" - -#: flatcamGUI/MainGUI.py:457 -msgid "Enable all plots\tAlt+1" -msgstr "Alle Diagramme aktivieren\tAlt+1" - -#: flatcamGUI/MainGUI.py:459 -msgid "Disable all plots\tAlt+2" -msgstr "Alle Diagramme deaktivieren\tAlt+2" - -#: flatcamGUI/MainGUI.py:461 -msgid "Disable non-selected\tAlt+3" -msgstr "Nicht ausgewählte Diagramme deaktivieren\tAlt+3" - -#: flatcamGUI/MainGUI.py:465 -msgid "&Zoom Fit\tV" -msgstr "Passed zoomen\tV" - -#: flatcamGUI/MainGUI.py:467 -msgid "&Zoom In\t=" -msgstr "Hineinzoomen\t=" - -#: flatcamGUI/MainGUI.py:469 -msgid "&Zoom Out\t-" -msgstr "Rauszoomen\t-" - -#: flatcamGUI/MainGUI.py:474 -msgid "Redraw All\tF5" -msgstr "Alles neu zeichnen\tF5" - -#: flatcamGUI/MainGUI.py:478 -msgid "Toggle Code Editor\tShift+E" -msgstr "Code-Editor umschalten\tShift+E" - -#: flatcamGUI/MainGUI.py:481 -msgid "&Toggle FullScreen\tAlt+F10" -msgstr "FullScreen umschalten\tAlt+F10" - -#: flatcamGUI/MainGUI.py:483 -msgid "&Toggle Plot Area\tCtrl+F10" -msgstr "Plotbereich umschalten\tSTRG+F10" - -#: flatcamGUI/MainGUI.py:485 -msgid "&Toggle Project/Sel/Tool\t`" -msgstr "Projekt/Auswahl/Werkzeug umschalten\t`" - -#: flatcamGUI/MainGUI.py:489 -msgid "&Toggle Grid Snap\tG" -msgstr "Schaltet den Rasterfang ein\tG" - -#: flatcamGUI/MainGUI.py:491 -msgid "&Toggle Grid Lines\tAlt+G" -msgstr "Gitterlinien umschalten\tAlt+G" - -#: flatcamGUI/MainGUI.py:493 -msgid "&Toggle Axis\tShift+G" -msgstr "Achse umschalten\tShift+G" - -#: flatcamGUI/MainGUI.py:495 -msgid "Toggle Workspace\tShift+W" -msgstr "Arbeitsbereich umschalten\tShift+W" - -#: flatcamGUI/MainGUI.py:500 -msgid "Objects" -msgstr "Objekte" - -#: flatcamGUI/MainGUI.py:514 -msgid "&Command Line\tS" -msgstr "Befehlszeile\tS" - -#: flatcamGUI/MainGUI.py:519 -msgid "Help" -msgstr "Hilfe" - -#: flatcamGUI/MainGUI.py:521 -msgid "Online Help\tF1" -msgstr "Onlinehilfe\tF1" - -#: flatcamGUI/MainGUI.py:531 -msgid "Report a bug" -msgstr "Einen Fehler melden" - -#: flatcamGUI/MainGUI.py:534 -msgid "Excellon Specification" -msgstr "Excellon-Spezifikation" - -#: flatcamGUI/MainGUI.py:536 -msgid "Gerber Specification" -msgstr "Gerber-Spezifikation" - -#: flatcamGUI/MainGUI.py:541 -msgid "Shortcuts List\tF3" -msgstr "Tastenkürzel Liste\tF3" - -#: flatcamGUI/MainGUI.py:543 -msgid "YouTube Channel\tF4" -msgstr "Youtube Kanal\tF4" - -#: flatcamGUI/MainGUI.py:554 -msgid "Add Circle\tO" -msgstr "Kreis hinzufügen\tO" - -#: flatcamGUI/MainGUI.py:557 -msgid "Add Arc\tA" -msgstr "Bogen hinzufügen\tA" - -#: flatcamGUI/MainGUI.py:560 -msgid "Add Rectangle\tR" -msgstr "Rechteck hinzufügen\tR" - -#: flatcamGUI/MainGUI.py:563 -msgid "Add Polygon\tN" -msgstr "Polygon hinzufügen\tN" - -#: flatcamGUI/MainGUI.py:566 -msgid "Add Path\tP" -msgstr "Pfad hinzufügen\tP" - -#: flatcamGUI/MainGUI.py:569 -msgid "Add Text\tT" -msgstr "Text hinzufügen\tT" - -#: flatcamGUI/MainGUI.py:572 -msgid "Polygon Union\tU" -msgstr "Polygon-Vereinigung\tU" - -#: flatcamGUI/MainGUI.py:574 -msgid "Polygon Intersection\tE" -msgstr "Polygonschnitt\tE" - -#: flatcamGUI/MainGUI.py:576 -msgid "Polygon Subtraction\tS" -msgstr "Polygon-Subtraktion\tS" - -#: flatcamGUI/MainGUI.py:580 -msgid "Cut Path\tX" -msgstr "Pfad ausschneiden\tX" - -#: flatcamGUI/MainGUI.py:584 -msgid "Copy Geom\tC" -msgstr "Geometrie kopieren\tC" - -#: flatcamGUI/MainGUI.py:586 -msgid "Delete Shape\tDEL" -msgstr "Form löschen\tDEL" - -#: flatcamGUI/MainGUI.py:590 flatcamGUI/MainGUI.py:677 -msgid "Move\tM" -msgstr "Bewegung\tM" - -#: flatcamGUI/MainGUI.py:592 -msgid "Buffer Tool\tB" -msgstr "Pufferwerkzeug\tB" - -#: flatcamGUI/MainGUI.py:595 -msgid "Paint Tool\tI" -msgstr "Malenwerkzeug\tI" - -#: flatcamGUI/MainGUI.py:598 -msgid "Transform Tool\tAlt+R" -msgstr "Transformationswerkzeug\tAlt+R" - -#: flatcamGUI/MainGUI.py:602 -msgid "Toggle Corner Snap\tK" -msgstr "Eckfang umschalten\tK" - -#: flatcamGUI/MainGUI.py:608 -msgid ">Excellon Editor<" -msgstr ">Excellon Editor<" - -#: flatcamGUI/MainGUI.py:612 -msgid "Add Drill Array\tA" -msgstr "Bohrfeld hinzufügen\tA" - -#: flatcamGUI/MainGUI.py:614 -msgid "Add Drill\tD" -msgstr "Bohrer hinzufügen\tD" - -#: flatcamGUI/MainGUI.py:618 -msgid "Add Slot Array\tQ" -msgstr "Steckplatz-Array hinzufügen\tQ" - -#: flatcamGUI/MainGUI.py:620 -msgid "Add Slot\tW" -msgstr "Slot hinzufügen\tW" - -#: flatcamGUI/MainGUI.py:624 -msgid "Resize Drill(S)\tR" -msgstr "Bohrer verkleinern\tR" - -#: flatcamGUI/MainGUI.py:627 flatcamGUI/MainGUI.py:671 -msgid "Copy\tC" -msgstr "Kopieren\tC" - -#: flatcamGUI/MainGUI.py:629 flatcamGUI/MainGUI.py:673 -msgid "Delete\tDEL" -msgstr "Löschen\tDEL" - -#: flatcamGUI/MainGUI.py:634 -msgid "Move Drill(s)\tM" -msgstr "Bohrer verschieben\tM" - -#: flatcamGUI/MainGUI.py:639 -msgid ">Gerber Editor<" -msgstr ">Gerber-Editor<" - -#: flatcamGUI/MainGUI.py:643 -msgid "Add Pad\tP" -msgstr "Pad hinzufügen\tP" - -#: flatcamGUI/MainGUI.py:645 -msgid "Add Pad Array\tA" -msgstr "Pad-Array hinzufügen\tA" - -#: flatcamGUI/MainGUI.py:647 -msgid "Add Track\tT" -msgstr "Track hinzufügen\tA" - -#: flatcamGUI/MainGUI.py:649 -msgid "Add Region\tN" -msgstr "Region hinzufügen\tN" - -#: flatcamGUI/MainGUI.py:653 -msgid "Poligonize\tAlt+N" -msgstr "Polygonisieren\tAlt+N" - -#: flatcamGUI/MainGUI.py:655 -msgid "Add SemiDisc\tE" -msgstr "Halbschibe hinzufügen\tE" - -#: flatcamGUI/MainGUI.py:657 -msgid "Add Disc\tD" -msgstr "Schibe hinzufügen\tD" - -#: flatcamGUI/MainGUI.py:659 -msgid "Buffer\tB" -msgstr "Puffer\tB" - -#: flatcamGUI/MainGUI.py:661 -msgid "Scale\tS" -msgstr "Skalieren\tS" - -#: flatcamGUI/MainGUI.py:663 -msgid "Mark Area\tAlt+A" -msgstr "Bereich markieren\tAlt+A" - -#: flatcamGUI/MainGUI.py:665 -msgid "Eraser\tCtrl+E" -msgstr "Radiergummi\tSTRG+E" - -#: flatcamGUI/MainGUI.py:667 -msgid "Transform\tAlt+R" -msgstr "Transformationswerkzeug\tSTRG+R" - -#: flatcamGUI/MainGUI.py:694 -msgid "Enable Plot" -msgstr "Diagramm aktivieren" - -#: flatcamGUI/MainGUI.py:696 -msgid "Disable Plot" -msgstr "Diagramm deaktivieren" - -#: flatcamGUI/MainGUI.py:700 -msgid "Set Color" -msgstr "Farbsatz" - -#: flatcamGUI/MainGUI.py:742 -msgid "Generate CNC" -msgstr "CNC generieren" - -#: flatcamGUI/MainGUI.py:744 -msgid "View Source" -msgstr "Quelltext anzeigen" - -#: flatcamGUI/MainGUI.py:749 flatcamGUI/MainGUI.py:863 -#: flatcamGUI/MainGUI.py:1072 flatcamGUI/MainGUI.py:2138 -#: flatcamGUI/MainGUI.py:2282 flatcamGUI/MainGUI.py:2572 -#: flatcamGUI/MainGUI.py:2775 flatcamGUI/ObjectUI.py:1617 -#: flatcamObjects/FlatCAMGeometry.py:502 flatcamTools/ToolPanelize.py:540 -#: flatcamTools/ToolPanelize.py:567 flatcamTools/ToolPanelize.py:660 -#: flatcamTools/ToolPanelize.py:689 flatcamTools/ToolPanelize.py:751 -msgid "Copy" -msgstr "Kopieren" - -#: flatcamGUI/MainGUI.py:757 flatcamGUI/MainGUI.py:2295 -#: flatcamTools/ToolProperties.py:31 -msgid "Properties" -msgstr "Eigenschaften" - -#: flatcamGUI/MainGUI.py:786 -msgid "File Toolbar" -msgstr "Dateisymbolleiste" - -#: flatcamGUI/MainGUI.py:790 -msgid "Edit Toolbar" -msgstr "Symbolleiste bearbeiten" - -#: flatcamGUI/MainGUI.py:794 -msgid "View Toolbar" -msgstr "Symbolleiste anzeigen" - -#: flatcamGUI/MainGUI.py:798 -msgid "Shell Toolbar" -msgstr "Shell-Symbolleiste" - -#: flatcamGUI/MainGUI.py:802 -msgid "Tools Toolbar" -msgstr "Werkzeugleiste" - -#: flatcamGUI/MainGUI.py:806 -msgid "Excellon Editor Toolbar" -msgstr "Excellon Editor-Symbolleiste" - -#: flatcamGUI/MainGUI.py:812 -msgid "Geometry Editor Toolbar" -msgstr "Geometrie Editor-Symbolleiste" - -#: flatcamGUI/MainGUI.py:816 -msgid "Gerber Editor Toolbar" -msgstr "Gerber Editor-Symbolleiste" - -#: flatcamGUI/MainGUI.py:820 -msgid "Grid Toolbar" -msgstr "Raster-Symbolleiste" - -#: flatcamGUI/MainGUI.py:841 flatcamGUI/MainGUI.py:2549 -msgid "Open project" -msgstr "Projekt öffnen" - -#: flatcamGUI/MainGUI.py:843 flatcamGUI/MainGUI.py:2551 -msgid "Save project" -msgstr "Projekt speichern" - -#: flatcamGUI/MainGUI.py:849 flatcamGUI/MainGUI.py:2557 -msgid "New Blank Geometry" -msgstr "Neue Geometrie erstellen" - -#: flatcamGUI/MainGUI.py:851 flatcamGUI/MainGUI.py:2559 -msgid "New Blank Gerber" -msgstr "Neues Gerber erstellen" - -#: flatcamGUI/MainGUI.py:853 flatcamGUI/MainGUI.py:2561 -msgid "New Blank Excellon" -msgstr "Neuen Excellon erstellen" - -#: flatcamGUI/MainGUI.py:858 flatcamGUI/MainGUI.py:2567 -msgid "Save Object and close the Editor" -msgstr "Speichern Sie das Objekt und schließen Sie den Editor" - -#: flatcamGUI/MainGUI.py:865 flatcamGUI/MainGUI.py:2574 -msgid "&Delete" -msgstr "&Löschen" - -#: flatcamGUI/MainGUI.py:868 flatcamGUI/MainGUI.py:1729 -#: flatcamGUI/MainGUI.py:1935 flatcamGUI/MainGUI.py:2577 -#: flatcamTools/ToolDistance.py:35 flatcamTools/ToolDistance.py:195 -msgid "Distance Tool" -msgstr "Entfernungswerkzeug" - -#: flatcamGUI/MainGUI.py:870 flatcamGUI/MainGUI.py:2579 -msgid "Distance Min Tool" -msgstr "Werkzeug für Mindestabstand" - -#: flatcamGUI/MainGUI.py:872 flatcamGUI/MainGUI.py:1722 -#: flatcamGUI/MainGUI.py:2581 -msgid "Set Origin" -msgstr "Nullpunkt festlegen" - -#: flatcamGUI/MainGUI.py:874 -msgid "Move to Origin" -msgstr "Zum Ursprung wechseln" - -#: flatcamGUI/MainGUI.py:877 flatcamGUI/MainGUI.py:2583 -msgid "Jump to Location" -msgstr "Zur Position springen\tJ" - -#: flatcamGUI/MainGUI.py:879 flatcamGUI/MainGUI.py:1734 -#: flatcamGUI/MainGUI.py:2585 -msgid "Locate in Object" -msgstr "Suchen Sie im Objekt" - -#: flatcamGUI/MainGUI.py:885 flatcamGUI/MainGUI.py:2591 -msgid "&Replot" -msgstr "Neuzeichnen &R" - -#: flatcamGUI/MainGUI.py:887 flatcamGUI/MainGUI.py:2593 -msgid "&Clear plot" -msgstr "Darstellung löschen &C" - -#: flatcamGUI/MainGUI.py:889 flatcamGUI/MainGUI.py:1725 -#: flatcamGUI/MainGUI.py:2595 -msgid "Zoom In" -msgstr "Hineinzoomen" - -#: flatcamGUI/MainGUI.py:891 flatcamGUI/MainGUI.py:1725 -#: flatcamGUI/MainGUI.py:2597 -msgid "Zoom Out" -msgstr "Rauszoomen" - -#: flatcamGUI/MainGUI.py:893 flatcamGUI/MainGUI.py:1724 -#: flatcamGUI/MainGUI.py:2185 flatcamGUI/MainGUI.py:2599 -msgid "Zoom Fit" -msgstr "Passend zoomen" - -#: flatcamGUI/MainGUI.py:901 flatcamGUI/MainGUI.py:2605 -msgid "&Command Line" -msgstr "Befehlszeile" - -#: flatcamGUI/MainGUI.py:913 flatcamGUI/MainGUI.py:2617 -msgid "2Sided Tool" -msgstr "2Seitiges Werkzeug" - -#: flatcamGUI/MainGUI.py:915 flatcamGUI/MainGUI.py:1740 -#: flatcamGUI/MainGUI.py:2619 -msgid "Align Objects Tool" -msgstr "Werkzeug \"Objekte ausrichten\"" - -#: flatcamGUI/MainGUI.py:917 flatcamGUI/MainGUI.py:1741 -#: flatcamGUI/MainGUI.py:2621 flatcamTools/ToolExtractDrills.py:393 -msgid "Extract Drills Tool" -msgstr "Bohrer Extrahieren Werkzeug" - -#: flatcamGUI/MainGUI.py:920 flatcamGUI/ObjectUI.py:596 -#: flatcamTools/ToolCutOut.py:440 -msgid "Cutout Tool" -msgstr "Ausschnittwerkzeug" - -#: flatcamGUI/MainGUI.py:922 flatcamGUI/MainGUI.py:2626 -#: flatcamGUI/ObjectUI.py:574 flatcamGUI/ObjectUI.py:2157 -#: flatcamTools/ToolNCC.py:974 -msgid "NCC Tool" -msgstr "NCC Werkzeug" - -#: flatcamGUI/MainGUI.py:928 flatcamGUI/MainGUI.py:2632 -msgid "Panel Tool" -msgstr "Platte Werkzeug" - -#: flatcamGUI/MainGUI.py:930 flatcamGUI/MainGUI.py:2634 -#: flatcamTools/ToolFilm.py:586 -msgid "Film Tool" -msgstr "Filmwerkzeug" - -#: flatcamGUI/MainGUI.py:932 flatcamGUI/MainGUI.py:2636 -#: flatcamTools/ToolSolderPaste.py:553 -msgid "SolderPaste Tool" -msgstr "Lötpaste-Werkzeug" - -#: flatcamGUI/MainGUI.py:934 flatcamGUI/MainGUI.py:2638 -#: flatcamTools/ToolSub.py:35 -msgid "Subtract Tool" -msgstr "Subtraktionswerkzeug" - -#: flatcamGUI/MainGUI.py:936 flatcamGUI/MainGUI.py:2640 -#: flatcamTools/ToolRulesCheck.py:616 -msgid "Rules Tool" -msgstr "Regelwerkzeug" - -#: flatcamGUI/MainGUI.py:938 flatcamGUI/MainGUI.py:1743 -#: flatcamGUI/MainGUI.py:2642 flatcamTools/ToolOptimal.py:33 -#: flatcamTools/ToolOptimal.py:307 -msgid "Optimal Tool" -msgstr "Optimierungswerkzeug" - -#: flatcamGUI/MainGUI.py:943 flatcamGUI/MainGUI.py:1740 -#: flatcamGUI/MainGUI.py:2647 -msgid "Calculators Tool" -msgstr "Rechnerwerkzeug" - -#: flatcamGUI/MainGUI.py:947 flatcamGUI/MainGUI.py:1744 -#: flatcamGUI/MainGUI.py:2651 flatcamTools/ToolQRCode.py:43 -#: flatcamTools/ToolQRCode.py:382 -msgid "QRCode Tool" -msgstr "QRCode Werkzeug" - -# Really don't know -#: flatcamGUI/MainGUI.py:949 flatcamGUI/MainGUI.py:2653 -#: flatcamTools/ToolCopperThieving.py:39 flatcamTools/ToolCopperThieving.py:568 -msgid "Copper Thieving Tool" -msgstr "Copper Thieving Werkzeug" - -# Really don't know -#: flatcamGUI/MainGUI.py:952 flatcamGUI/MainGUI.py:1741 -#: flatcamGUI/MainGUI.py:2656 flatcamTools/ToolFiducials.py:33 -#: flatcamTools/ToolFiducials.py:395 -msgid "Fiducials Tool" -msgstr "Passermarken-Tool" - -#: flatcamGUI/MainGUI.py:954 flatcamGUI/MainGUI.py:2658 -#: flatcamTools/ToolCalibration.py:37 flatcamTools/ToolCalibration.py:759 -msgid "Calibration Tool" -msgstr "Kalibierungswerkzeug" - -#: flatcamGUI/MainGUI.py:956 flatcamGUI/MainGUI.py:1741 -#: flatcamGUI/MainGUI.py:2660 -msgid "Punch Gerber Tool" -msgstr "Stanzen Sie das Gerber-Werkzeug" - -#: flatcamGUI/MainGUI.py:958 flatcamGUI/MainGUI.py:2662 -#: flatcamTools/ToolInvertGerber.py:31 -msgid "Invert Gerber Tool" -msgstr "Invertieren Sie das Gerber-Werkzeug" - -#: flatcamGUI/MainGUI.py:964 flatcamGUI/MainGUI.py:990 -#: flatcamGUI/MainGUI.py:1042 flatcamGUI/MainGUI.py:2668 -#: flatcamGUI/MainGUI.py:2746 -msgid "Select" -msgstr "Wählen" - -#: flatcamGUI/MainGUI.py:966 flatcamGUI/MainGUI.py:2670 -msgid "Add Drill Hole" -msgstr "Bohrloch hinzufügen" - -#: flatcamGUI/MainGUI.py:968 flatcamGUI/MainGUI.py:2672 -msgid "Add Drill Hole Array" -msgstr "Bohrlochfeld hinzufügen" - -#: flatcamGUI/MainGUI.py:970 flatcamGUI/MainGUI.py:2020 -#: flatcamGUI/MainGUI.py:2273 flatcamGUI/MainGUI.py:2676 -msgid "Add Slot" -msgstr "Steckplatz hinzufügen" - -#: flatcamGUI/MainGUI.py:972 flatcamGUI/MainGUI.py:2019 -#: flatcamGUI/MainGUI.py:2275 flatcamGUI/MainGUI.py:2678 -msgid "Add Slot Array" -msgstr "Steckplatz-Array hinzufügen" - -#: flatcamGUI/MainGUI.py:974 flatcamGUI/MainGUI.py:2278 -#: flatcamGUI/MainGUI.py:2674 -msgid "Resize Drill" -msgstr "Bohrergröße ändern" - -#: flatcamGUI/MainGUI.py:978 flatcamGUI/MainGUI.py:2682 -msgid "Copy Drill" -msgstr "Bohrer kopieren" - -#: flatcamGUI/MainGUI.py:980 flatcamGUI/MainGUI.py:2684 -msgid "Delete Drill" -msgstr "Bohrer löschen" - -#: flatcamGUI/MainGUI.py:984 flatcamGUI/MainGUI.py:2688 -msgid "Move Drill" -msgstr "Bohrer bewegen" - -#: flatcamGUI/MainGUI.py:992 flatcamGUI/MainGUI.py:2696 -msgid "Add Circle" -msgstr "Kreis hinzufügen" - -#: flatcamGUI/MainGUI.py:994 flatcamGUI/MainGUI.py:2698 -msgid "Add Arc" -msgstr "Bogen hinzufügen" - -#: flatcamGUI/MainGUI.py:996 flatcamGUI/MainGUI.py:2700 -msgid "Add Rectangle" -msgstr "Rechteck hinzufügen" - -#: flatcamGUI/MainGUI.py:1000 flatcamGUI/MainGUI.py:2704 -msgid "Add Path" -msgstr "Pfad hinzufügen" - -#: flatcamGUI/MainGUI.py:1002 flatcamGUI/MainGUI.py:2706 -msgid "Add Polygon" -msgstr "Polygon hinzufügen" - -#: flatcamGUI/MainGUI.py:1005 flatcamGUI/MainGUI.py:2709 -msgid "Add Text" -msgstr "Text hinzufügen" - -#: flatcamGUI/MainGUI.py:1007 flatcamGUI/MainGUI.py:2711 -msgid "Add Buffer" -msgstr "Puffer hinzufügen" - -#: flatcamGUI/MainGUI.py:1009 flatcamGUI/MainGUI.py:2713 -msgid "Paint Shape" -msgstr "Malen Form" - -#: flatcamGUI/MainGUI.py:1011 flatcamGUI/MainGUI.py:1068 -#: flatcamGUI/MainGUI.py:2214 flatcamGUI/MainGUI.py:2259 -#: flatcamGUI/MainGUI.py:2715 flatcamGUI/MainGUI.py:2771 -msgid "Eraser" -msgstr "Radiergummi" - -#: flatcamGUI/MainGUI.py:1015 flatcamGUI/MainGUI.py:2719 -msgid "Polygon Union" -msgstr "Polygon-Vereinigung" - -#: flatcamGUI/MainGUI.py:1017 flatcamGUI/MainGUI.py:2721 -msgid "Polygon Explode" -msgstr "Polygon explodieren" - -#: flatcamGUI/MainGUI.py:1020 flatcamGUI/MainGUI.py:2724 -msgid "Polygon Intersection" -msgstr "Polygonschnitt" - -#: flatcamGUI/MainGUI.py:1022 flatcamGUI/MainGUI.py:2726 -msgid "Polygon Subtraction" -msgstr "Polygon-Subtraktion" - -#: flatcamGUI/MainGUI.py:1026 flatcamGUI/MainGUI.py:2730 -msgid "Cut Path" -msgstr "Pfad ausschneiden" - -#: flatcamGUI/MainGUI.py:1028 -msgid "Copy Shape(s)" -msgstr "Form kopieren" - -#: flatcamGUI/MainGUI.py:1031 -msgid "Delete Shape '-'" -msgstr "Form löschen" - -#: flatcamGUI/MainGUI.py:1033 flatcamGUI/MainGUI.py:1076 -#: flatcamGUI/MainGUI.py:2226 flatcamGUI/MainGUI.py:2263 -#: flatcamGUI/MainGUI.py:2736 flatcamGUI/MainGUI.py:2779 -#: flatcamGUI/ObjectUI.py:109 -msgid "Transformations" -msgstr "Transformationen" - -#: flatcamGUI/MainGUI.py:1036 -msgid "Move Objects " -msgstr "Objekte verschieben " - -#: flatcamGUI/MainGUI.py:1044 flatcamGUI/MainGUI.py:2139 -#: flatcamGUI/MainGUI.py:2748 -msgid "Add Pad" -msgstr "Pad hinzufügen" - -#: flatcamGUI/MainGUI.py:1048 flatcamGUI/MainGUI.py:2140 -#: flatcamGUI/MainGUI.py:2752 -msgid "Add Track" -msgstr "Track hinzufügen" - -#: flatcamGUI/MainGUI.py:1050 flatcamGUI/MainGUI.py:2139 -#: flatcamGUI/MainGUI.py:2754 -msgid "Add Region" -msgstr "Region hinzufügen" - -#: flatcamGUI/MainGUI.py:1052 flatcamGUI/MainGUI.py:2245 -#: flatcamGUI/MainGUI.py:2756 -msgid "Poligonize" -msgstr "Polygonisieren" - -#: flatcamGUI/MainGUI.py:1055 flatcamGUI/MainGUI.py:2247 -#: flatcamGUI/MainGUI.py:2759 -msgid "SemiDisc" -msgstr "Halbscheibe" - -#: flatcamGUI/MainGUI.py:1057 flatcamGUI/MainGUI.py:2249 -#: flatcamGUI/MainGUI.py:2761 -msgid "Disc" -msgstr "Scheibe" - -#: flatcamGUI/MainGUI.py:1065 flatcamGUI/MainGUI.py:2257 -#: flatcamGUI/MainGUI.py:2769 -msgid "Mark Area" -msgstr "Bereich markieren" - -#: flatcamGUI/MainGUI.py:1079 flatcamGUI/MainGUI.py:2139 -#: flatcamGUI/MainGUI.py:2230 flatcamGUI/MainGUI.py:2293 -#: flatcamGUI/MainGUI.py:2782 flatcamTools/ToolMove.py:27 -msgid "Move" -msgstr "Bewegung" - -#: flatcamGUI/MainGUI.py:1087 flatcamGUI/MainGUI.py:2791 -msgid "Snap to grid" -msgstr "Am Raster ausrichten" - -#: flatcamGUI/MainGUI.py:1090 flatcamGUI/MainGUI.py:2794 -msgid "Grid X snapping distance" -msgstr "Raster X Fangdistanz" - -#: flatcamGUI/MainGUI.py:1095 flatcamGUI/MainGUI.py:2799 -msgid "Grid Y snapping distance" -msgstr "Raster Y Fangdistanz" - -#: flatcamGUI/MainGUI.py:1101 flatcamGUI/MainGUI.py:2805 -msgid "" -"When active, value on Grid_X\n" -"is copied to the Grid_Y value." -msgstr "" -"Wenn aktiv, Wert auf Grid_X\n" -"wird in den Wert von Grid_Y kopiert." - -#: flatcamGUI/MainGUI.py:1108 flatcamGUI/MainGUI.py:2812 -msgid "Snap to corner" -msgstr "In der Ecke ausrichten" - -#: flatcamGUI/MainGUI.py:1112 flatcamGUI/MainGUI.py:2816 -#: flatcamGUI/preferences/general/GeneralAPPSetGroupUI.py:78 -msgid "Max. magnet distance" -msgstr "Max. Magnetabstand" - -#: flatcamGUI/MainGUI.py:1149 -msgid "Selected" -msgstr "Ausgewählt" - -#: flatcamGUI/MainGUI.py:1177 flatcamGUI/MainGUI.py:1185 -msgid "Plot Area" -msgstr "Grundstücksfläche" - -#: flatcamGUI/MainGUI.py:1212 -msgid "General" -msgstr "Allgemeines" - -#: flatcamGUI/MainGUI.py:1227 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/MainGUI.py:1237 flatcamTools/ToolDblSided.py:92 -msgid "EXCELLON" -msgstr "EXCELLON" - -#: flatcamGUI/MainGUI.py:1247 flatcamTools/ToolDblSided.py:120 -msgid "GEOMETRY" -msgstr "GEOMETRY" - -#: flatcamGUI/MainGUI.py:1257 -msgid "CNC-JOB" -msgstr "CNC-Auftrag" - -#: flatcamGUI/MainGUI.py:1266 flatcamGUI/ObjectUI.py:563 -#: flatcamGUI/ObjectUI.py:2132 -msgid "TOOLS" -msgstr "WERKZEUGE" - -#: flatcamGUI/MainGUI.py:1275 -msgid "TOOLS 2" -msgstr "WERKZEUGE 2" - -#: flatcamGUI/MainGUI.py:1285 -msgid "UTILITIES" -msgstr "NUTZEN" - -#: flatcamGUI/MainGUI.py:1302 -#: flatcamGUI/preferences/excellon/ExcellonGenPrefGroupUI.py:192 -msgid "Restore Defaults" -msgstr "Standard wiederherstellen" - -#: flatcamGUI/MainGUI.py:1305 -msgid "" -"Restore the entire set of default values\n" -"to the initial values loaded after first launch." -msgstr "" -"Stellen Sie den gesamten Satz von Standardwerten wieder her\n" -"auf die nach dem ersten Start geladenen Anfangswerte." - -#: flatcamGUI/MainGUI.py:1310 -msgid "Open Pref Folder" -msgstr "Öffnen Sie den Einstellungsordner" - -#: flatcamGUI/MainGUI.py:1313 -msgid "Open the folder where FlatCAM save the preferences files." -msgstr "" -"Öffnen Sie den Ordner, in dem FlatCAM die Voreinstellungsdateien speichert." - -#: flatcamGUI/MainGUI.py:1317 flatcamGUI/MainGUI.py:2517 -msgid "Clear GUI Settings" -msgstr "Löschen Sie die GUI-Einstellungen" - -#: flatcamGUI/MainGUI.py:1321 -msgid "" -"Clear the GUI settings for FlatCAM,\n" -"such as: layout, gui state, style, hdpi support etc." -msgstr "" -"Löschen Sie die GUI-Einstellungen für FlatCAM.\n" -"wie zum Beispiel: Layout, GUI-Status, Stil, HDPI-Unterstützung usw." - -#: flatcamGUI/MainGUI.py:1332 -msgid "Apply" -msgstr "Anwenden" - -#: flatcamGUI/MainGUI.py:1335 -msgid "Apply the current preferences without saving to a file." -msgstr "Anwenden ohne zu speichern." - -#: flatcamGUI/MainGUI.py:1342 -msgid "" -"Save the current settings in the 'current_defaults' file\n" -"which is the file storing the working default preferences." -msgstr "" -"Speichern Sie die aktuellen Einstellungen in der Datei 'current_defaults'\n" -"Dies ist die Datei, in der die Arbeitseinstellungen gespeichert sind." - -#: flatcamGUI/MainGUI.py:1350 -msgid "Will not save the changes and will close the preferences window." -msgstr "Einstellungen werden geschlossen ohne die Änderungen zu speichern." - -#: flatcamGUI/MainGUI.py:1719 -msgid "SHOW SHORTCUT LIST" -msgstr "Verknüpfungsliste anzeigen" - -#: flatcamGUI/MainGUI.py:1719 -msgid "Switch to Project Tab" -msgstr "Wechseln Sie zur Registerkarte Projekt" - -#: flatcamGUI/MainGUI.py:1719 -msgid "Switch to Selected Tab" -msgstr "Wechseln Sie zur ausgewählten Registerkarte" - -#: flatcamGUI/MainGUI.py:1720 -msgid "Switch to Tool Tab" -msgstr "Wechseln Sie zur Werkzeugregisterkarte" - -#: flatcamGUI/MainGUI.py:1721 -msgid "New Gerber" -msgstr "Neuer Gerber" - -#: flatcamGUI/MainGUI.py:1721 -msgid "Edit Object (if selected)" -msgstr "Objekt bearbeiten (falls ausgewählt)" - -#: flatcamGUI/MainGUI.py:1721 -msgid "Jump to Coordinates" -msgstr "Springe zu den Koordinaten" - -#: flatcamGUI/MainGUI.py:1722 -msgid "New Excellon" -msgstr "Neuer Excellon" - -#: flatcamGUI/MainGUI.py:1722 -msgid "Move Obj" -msgstr "Objekt verschieben" - -#: flatcamGUI/MainGUI.py:1722 -msgid "New Geometry" -msgstr "Neue Geometrie" - -#: flatcamGUI/MainGUI.py:1722 -msgid "Change Units" -msgstr "Einheiten ändern" - -#: flatcamGUI/MainGUI.py:1723 -msgid "Open Properties Tool" -msgstr "Öffnen Sie das Eigenschaften-Tool" - -#: flatcamGUI/MainGUI.py:1723 -msgid "Rotate by 90 degree CW" -msgstr "Um 90 Grad im Uhrzeigersinn drehen" - -#: flatcamGUI/MainGUI.py:1723 -msgid "Shell Toggle" -msgstr "Shell umschalten" - -#: flatcamGUI/MainGUI.py:1724 -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/MainGUI.py:1725 -msgid "Flip on X_axis" -msgstr "Auf X-Achse spiegeln" - -#: flatcamGUI/MainGUI.py:1725 -msgid "Flip on Y_axis" -msgstr "Auf Y-Achse spiegeln" - -#: flatcamGUI/MainGUI.py:1728 -msgid "Copy Obj" -msgstr "Objekt kopieren" - -#: flatcamGUI/MainGUI.py:1728 -msgid "Open Tools Database" -msgstr "Werkzeugdatenbank öffnen" - -#: flatcamGUI/MainGUI.py:1729 -msgid "Open Excellon File" -msgstr "Öffnen Sie die Excellon-Datei" - -#: flatcamGUI/MainGUI.py:1729 -msgid "Open Gerber File" -msgstr "Öffnen Sie die Gerber-Datei" - -#: flatcamGUI/MainGUI.py:1729 -msgid "New Project" -msgstr "Neues Projekt" - -#: flatcamGUI/MainGUI.py:1730 flatcamTools/ToolPDF.py:42 -msgid "PDF Import Tool" -msgstr "PDF-Importwerkzeug" - -#: flatcamGUI/MainGUI.py:1730 -msgid "Save Project" -msgstr "Projekt speichern" - -#: flatcamGUI/MainGUI.py:1730 -msgid "Toggle Plot Area" -msgstr "Zeichenbereich umschalten0" - -#: flatcamGUI/MainGUI.py:1733 -msgid "Copy Obj_Name" -msgstr "Kopieren Sie den Namen des Objekts" - -#: flatcamGUI/MainGUI.py:1734 -msgid "Toggle Code Editor" -msgstr "Code-Editor umschalten" - -#: flatcamGUI/MainGUI.py:1734 -msgid "Toggle the axis" -msgstr "Achse umschalten" - -#: flatcamGUI/MainGUI.py:1734 flatcamGUI/MainGUI.py:1933 -#: flatcamGUI/MainGUI.py:2020 flatcamGUI/MainGUI.py:2142 -msgid "Distance Minimum Tool" -msgstr "Mindestabstand Werkzeug" - -#: flatcamGUI/MainGUI.py:1735 -msgid "Open Preferences Window" -msgstr "Öffnen Sie das Einstellungsfenster" - -#: flatcamGUI/MainGUI.py:1736 -msgid "Rotate by 90 degree CCW" -msgstr "Um 90 Grad gegen den Uhrzeigersinn drehen" - -#: flatcamGUI/MainGUI.py:1736 -msgid "Run a Script" -msgstr "Führen Sie ein Skript aus" - -#: flatcamGUI/MainGUI.py:1736 -msgid "Toggle the workspace" -msgstr "Arbeitsbereich umschalten" - -#: flatcamGUI/MainGUI.py:1736 -msgid "Skew on X axis" -msgstr "Neigung auf der X-Achse" - -#: flatcamGUI/MainGUI.py:1737 -msgid "Skew on Y axis" -msgstr "Neigung auf der Y-Achse" - -#: flatcamGUI/MainGUI.py:1740 -msgid "2-Sided PCB Tool" -msgstr "2-seitiges PCB Werkzeug" - -#: flatcamGUI/MainGUI.py:1740 -msgid "Transformations Tool" -msgstr "Transformations-Tool" - -#: flatcamGUI/MainGUI.py:1742 -msgid "Solder Paste Dispensing Tool" -msgstr "Lotpasten-Dosierwerkzeug" - -#: flatcamGUI/MainGUI.py:1743 -msgid "Film PCB Tool" -msgstr "Film PCB Werkzeug" - -#: flatcamGUI/MainGUI.py:1743 -msgid "Non-Copper Clearing Tool" -msgstr "Nicht-Kupfer-Räumwerkzeug" - -#: flatcamGUI/MainGUI.py:1744 -msgid "Paint Area Tool" -msgstr "Malbereichswerkzeug" - -#: flatcamGUI/MainGUI.py:1744 -msgid "Rules Check Tool" -msgstr "Regelprüfwerkzeug" - -#: flatcamGUI/MainGUI.py:1745 -msgid "View File Source" -msgstr "Dateiquelle anzeigen" - -#: flatcamGUI/MainGUI.py:1746 -msgid "Cutout PCB Tool" -msgstr "Ausschnitt PCB Tool" - -#: flatcamGUI/MainGUI.py:1746 -msgid "Enable all Plots" -msgstr "Alle Zeichnungen aktivieren" - -#: flatcamGUI/MainGUI.py:1746 -msgid "Disable all Plots" -msgstr "Alle Zeichnungen deaktivieren" - -#: flatcamGUI/MainGUI.py:1746 -msgid "Disable Non-selected Plots" -msgstr "Nicht ausgewählte Zeichnungen deaktiv" - -#: flatcamGUI/MainGUI.py:1747 -msgid "Toggle Full Screen" -msgstr "Vollbild umschalten" - -#: flatcamGUI/MainGUI.py:1750 -msgid "Abort current task (gracefully)" -msgstr "Aktuelle Aufgabe abbrechen (ordnungsgemäß)" - -#: flatcamGUI/MainGUI.py:1753 -msgid "Save Project As" -msgstr "Projekt speichern als" - -#: flatcamGUI/MainGUI.py:1754 -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/MainGUI.py:1757 -msgid "Open Online Manual" -msgstr "Online-Handbuch öffnen" - -#: flatcamGUI/MainGUI.py:1758 -msgid "Open Online Tutorials" -msgstr "Öffnen Sie Online-Tutorials" - -#: flatcamGUI/MainGUI.py:1758 -msgid "Refresh Plots" -msgstr "Zeichnungen aktualisieren" - -#: flatcamGUI/MainGUI.py:1758 flatcamTools/ToolSolderPaste.py:509 -msgid "Delete Object" -msgstr "Objekt löschen" - -#: flatcamGUI/MainGUI.py:1758 -msgid "Alternate: Delete Tool" -msgstr "Alternative: Werkzeug löschen" - -#: flatcamGUI/MainGUI.py:1759 -msgid "(left to Key_1)Toggle Notebook Area (Left Side)" -msgstr "(links neben Taste_1) Notebook-Bereich umschalten (linke Seite)" - -#: flatcamGUI/MainGUI.py:1759 -msgid "En(Dis)able Obj Plot" -msgstr "Objektzeichnung (de)aktivieren" - -#: flatcamGUI/MainGUI.py:1760 -msgid "Deselects all objects" -msgstr "Hebt die Auswahl aller Objekte auf" - -#: flatcamGUI/MainGUI.py:1774 -msgid "Editor Shortcut list" -msgstr "Editor-Verknüpfungsliste" - -#: flatcamGUI/MainGUI.py:1928 -msgid "GEOMETRY EDITOR" -msgstr "GEOMETRIE-EDITOR" - -#: flatcamGUI/MainGUI.py:1928 -msgid "Draw an Arc" -msgstr "Zeichnen Sie einen Bogen" - -#: flatcamGUI/MainGUI.py:1928 -msgid "Copy Geo Item" -msgstr "Geo-Objekt kopieren" - -#: flatcamGUI/MainGUI.py:1929 -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/MainGUI.py:1929 -msgid "Polygon Intersection Tool" -msgstr "Werkzeug Polygonschnitt" - -#: flatcamGUI/MainGUI.py:1930 -msgid "Geo Paint Tool" -msgstr "Geo-Malwerkzeug" - -#: flatcamGUI/MainGUI.py:1930 flatcamGUI/MainGUI.py:2019 -#: flatcamGUI/MainGUI.py:2139 -msgid "Jump to Location (x, y)" -msgstr "Zum Standort springen (x, y)" - -#: flatcamGUI/MainGUI.py:1930 -msgid "Toggle Corner Snap" -msgstr "Eckfang umschalten" - -#: flatcamGUI/MainGUI.py:1930 -msgid "Move Geo Item" -msgstr "Geo-Objekt verschieben" - -#: flatcamGUI/MainGUI.py:1931 -msgid "Within Add Arc will cycle through the ARC modes" -msgstr "Innerhalb von Bogen hinzufügen werden die ARC-Modi durchlaufen" - -#: flatcamGUI/MainGUI.py:1931 -msgid "Draw a Polygon" -msgstr "Zeichnen Sie ein Polygon" - -#: flatcamGUI/MainGUI.py:1931 -msgid "Draw a Circle" -msgstr "Zeichne einen Kreis" - -#: flatcamGUI/MainGUI.py:1932 -msgid "Draw a Path" -msgstr "Zeichne einen Pfad" - -#: flatcamGUI/MainGUI.py:1932 -msgid "Draw Rectangle" -msgstr "Rechteck zeichnen" - -#: flatcamGUI/MainGUI.py:1932 -msgid "Polygon Subtraction Tool" -msgstr "Polygon-Subtraktionswerkzeug" - -#: flatcamGUI/MainGUI.py:1932 -msgid "Add Text Tool" -msgstr "Textwerkzeug hinzufügen" - -#: flatcamGUI/MainGUI.py:1933 -msgid "Polygon Union Tool" -msgstr "Polygonverbindungswerkzeug" - -#: flatcamGUI/MainGUI.py:1933 -msgid "Flip shape on X axis" -msgstr "Form auf der X-Achse spiegeln" - -#: flatcamGUI/MainGUI.py:1933 -msgid "Flip shape on Y axis" -msgstr "Form auf der Y-Achse spiegeln" - -#: flatcamGUI/MainGUI.py:1934 -msgid "Skew shape on X axis" -msgstr "Neigung auf der X-Achse" - -#: flatcamGUI/MainGUI.py:1934 -msgid "Skew shape on Y axis" -msgstr "Neigung auf der Y-Achse" - -#: flatcamGUI/MainGUI.py:1934 -msgid "Editor Transformation Tool" -msgstr "Editor-Transformationstool" - -#: flatcamGUI/MainGUI.py:1935 -msgid "Offset shape on X axis" -msgstr "Versetzte Form auf der X-Achse" - -#: flatcamGUI/MainGUI.py:1935 -msgid "Offset shape on Y axis" -msgstr "Versetzte Form auf der Y-Achse" - -#: flatcamGUI/MainGUI.py:1936 flatcamGUI/MainGUI.py:2022 -#: flatcamGUI/MainGUI.py:2144 -msgid "Save Object and Exit Editor" -msgstr "Objekt speichern und Editor beenden" - -#: flatcamGUI/MainGUI.py:1936 -msgid "Polygon Cut Tool" -msgstr "Polygon-Schneidewerkzeug" - -#: flatcamGUI/MainGUI.py:1937 -msgid "Rotate Geometry" -msgstr "Geometrie drehen" - -#: flatcamGUI/MainGUI.py:1937 -msgid "Finish drawing for certain tools" -msgstr "Beenden Sie das Zeichnen für bestimmte Werkzeuge" - -#: flatcamGUI/MainGUI.py:1937 flatcamGUI/MainGUI.py:2022 -#: flatcamGUI/MainGUI.py:2142 -msgid "Abort and return to Select" -msgstr "Abbrechen und zurück zu Auswählen" - -#: flatcamGUI/MainGUI.py:1938 flatcamGUI/MainGUI.py:2734 -msgid "Delete Shape" -msgstr "Form löschen" - -#: flatcamGUI/MainGUI.py:2018 -msgid "EXCELLON EDITOR" -msgstr "EXCELLON EDITOR" - -#: flatcamGUI/MainGUI.py:2018 -msgid "Copy Drill(s)" -msgstr "Bohrer kopieren" - -#: flatcamGUI/MainGUI.py:2018 flatcamGUI/MainGUI.py:2268 -msgid "Add Drill" -msgstr "Bohrer hinzufügen" - -#: flatcamGUI/MainGUI.py:2019 -msgid "Move Drill(s)" -msgstr "Bohrer verschieben" - -#: flatcamGUI/MainGUI.py:2020 -msgid "Add a new Tool" -msgstr "Fügen Sie ein neues Werkzeug hinzu" - -#: flatcamGUI/MainGUI.py:2021 -msgid "Delete Drill(s)" -msgstr "Bohrer löschen" - -#: flatcamGUI/MainGUI.py:2021 -msgid "Alternate: Delete Tool(s)" -msgstr "Alternative: Werkzeug (e) löschen" - -#: flatcamGUI/MainGUI.py:2138 -msgid "GERBER EDITOR" -msgstr "GERBER EDITOR" - -#: flatcamGUI/MainGUI.py:2138 -msgid "Add Disc" -msgstr "Fügen Sie eine Scheiben hinzu" - -#: flatcamGUI/MainGUI.py:2138 -msgid "Add SemiDisc" -msgstr "Halbschibe hinzufügen" - -#: flatcamGUI/MainGUI.py:2140 -msgid "Within Track & Region Tools will cycle in REVERSE the bend modes" -msgstr "" -"Innerhalb von Track- und Region-Werkzeugen werden die Biegemodi umgekehrt" - -#: flatcamGUI/MainGUI.py:2141 -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/MainGUI.py:2142 -msgid "Alternate: Delete Apertures" -msgstr "Alternative: Löschen Sie die Blenden" - -#: flatcamGUI/MainGUI.py:2143 -msgid "Eraser Tool" -msgstr "Radiergummi" - -#: flatcamGUI/MainGUI.py:2144 -#: flatcamGUI/preferences/gerber/GerberEditorPrefGroupUI.py:220 -msgid "Mark Area Tool" -msgstr "Bereich markieren Werkzeug" - -#: flatcamGUI/MainGUI.py:2144 -msgid "Poligonize Tool" -msgstr "Werkzeug Polygonisieren" - -#: flatcamGUI/MainGUI.py:2144 -msgid "Transformation Tool" -msgstr "Transformationswerkzeug" - -#: flatcamGUI/MainGUI.py:2161 -msgid "Toggle Visibility" -msgstr "Sichtbarkeit umschalten" - -#: flatcamGUI/MainGUI.py:2167 -msgid "New" -msgstr "Neu" - -#: flatcamGUI/MainGUI.py:2169 flatcamGUI/ObjectUI.py:450 -#: flatcamObjects/FlatCAMGerber.py:239 flatcamObjects/FlatCAMGerber.py:327 -#: 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:1300 -#: flatcamTools/ToolPaint.py:502 flatcamTools/ToolPaint.py:706 -#: flatcamTools/ToolPanelize.py:118 flatcamTools/ToolPanelize.py:374 -#: flatcamTools/ToolPanelize.py:391 -msgid "Geometry" -msgstr "Geometrie" - -#: flatcamGUI/MainGUI.py:2173 -#: flatcamGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py:99 -#: 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:1300 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/MainGUI.py:2180 -msgid "Grids" -msgstr "Raster" - -#: flatcamGUI/MainGUI.py:2187 -msgid "Clear Plot" -msgstr "Plot klar löschen" - -#: flatcamGUI/MainGUI.py:2189 -msgid "Replot" -msgstr "Replotieren" - -#: flatcamGUI/MainGUI.py:2193 -msgid "Geo Editor" -msgstr "Geo-Editor" - -#: flatcamGUI/MainGUI.py:2195 -msgid "Path" -msgstr "Pfad" - -#: flatcamGUI/MainGUI.py:2197 -msgid "Rectangle" -msgstr "Rechteck" - -#: flatcamGUI/MainGUI.py:2200 -msgid "Circle" -msgstr "Kreis" - -#: flatcamGUI/MainGUI.py:2204 -msgid "Arc" -msgstr "Bogen" - -#: flatcamGUI/MainGUI.py:2218 -msgid "Union" -msgstr "Vereinigung" - -#: flatcamGUI/MainGUI.py:2220 -msgid "Intersection" -msgstr "Überschneidung" - -#: flatcamGUI/MainGUI.py:2222 -msgid "Subtraction" -msgstr "Subtraktion" - -#: flatcamGUI/MainGUI.py:2224 flatcamGUI/ObjectUI.py:2221 -#: flatcamGUI/preferences/cncjob/CNCJobGenPrefGroupUI.py:56 -msgid "Cut" -msgstr "Schnitt" - -#: flatcamGUI/MainGUI.py:2235 -msgid "Pad" -msgstr "Pad" - -#: flatcamGUI/MainGUI.py:2237 -msgid "Pad Array" -msgstr "Pad-Array" - -#: flatcamGUI/MainGUI.py:2241 -msgid "Track" -msgstr "Track" - -#: flatcamGUI/MainGUI.py:2243 -msgid "Region" -msgstr "Region" - -#: flatcamGUI/MainGUI.py:2266 -msgid "Exc Editor" -msgstr "Exc-Editor" - -#: flatcamGUI/MainGUI.py:2311 -msgid "" -"Relative measurement.\n" -"Reference is last click position" -msgstr "" -"Relative Messung\n" -"Referenz ist Position des letzten Klicks" - -#: flatcamGUI/MainGUI.py:2317 -msgid "" -"Absolute measurement.\n" -"Reference is (X=0, Y= 0) position" -msgstr "" -"Absolute Messung.\n" -"Referenz ist (X = 0, Y = 0)" - -#: flatcamGUI/MainGUI.py:2419 -msgid "Lock Toolbars" -msgstr "Symbolleisten sperren" - -#: flatcamGUI/MainGUI.py:2505 -msgid "FlatCAM Preferences Folder opened." -msgstr "FlatCAM-Einstellungsordner geöffnet." - -#: flatcamGUI/MainGUI.py:2516 -msgid "Are you sure you want to delete the GUI Settings? \n" -msgstr "Möchten Sie die GUI-Einstellungen wirklich löschen?\n" - -#: flatcamGUI/MainGUI.py:2624 -msgid "&Cutout Tool" -msgstr "Ausschnittwerkzeug" - -#: flatcamGUI/MainGUI.py:2694 -msgid "Select 'Esc'" -msgstr "Wählen" - -#: flatcamGUI/MainGUI.py:2732 -msgid "Copy Objects" -msgstr "Objekte kopieren" - -#: flatcamGUI/MainGUI.py:2740 -msgid "Move Objects" -msgstr "Objekte verschieben" - -#: flatcamGUI/MainGUI.py:3363 -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 "" -"Bitte wählen Sie zuerst ein zu schneidendes Geometrieelement aus\n" -"Wählen Sie dann das Geometrieelement aus, das geschnitten werden soll\n" -"aus dem ersten Artikel. Zum Schluss drücken Sie die Taste ~ X ~ oder\n" -"die Symbolleisten-Schaltfläche." - -#: flatcamGUI/MainGUI.py:3370 flatcamGUI/MainGUI.py:3532 -#: flatcamGUI/MainGUI.py:3577 flatcamGUI/MainGUI.py:3597 -msgid "Warning" -msgstr "Warnung" - -#: flatcamGUI/MainGUI.py:3527 -msgid "" -"Please select geometry items \n" -"on which to perform Intersection Tool." -msgstr "" -"Bitte wählen Sie Geometrieelemente aus\n" -"auf dem das Verschneidungswerkzeug ausgeführt werden soll." - -#: flatcamGUI/MainGUI.py:3572 -msgid "" -"Please select geometry items \n" -"on which to perform Substraction Tool." -msgstr "" -"Bitte wählen Sie Geometrieelemente aus\n" -"auf dem das Subtraktionswerkzeug ausgeführt werden soll." - -#: flatcamGUI/MainGUI.py:3592 -msgid "" -"Please select geometry items \n" -"on which to perform union." -msgstr "" -"Bitte wählen Sie Geometrieelemente aus\n" -"auf dem die Polygonverbindung ausgeführt werden soll." - -#: flatcamGUI/MainGUI.py:3675 flatcamGUI/MainGUI.py:3890 -msgid "Cancelled. Nothing selected to delete." -msgstr "Abgebrochen. Nichts zum Löschen ausgewählt." - -#: flatcamGUI/MainGUI.py:3759 flatcamGUI/MainGUI.py:4006 -msgid "Cancelled. Nothing selected to copy." -msgstr "Abgebrochen. Nichts zum Kopieren ausgewählt." - -#: flatcamGUI/MainGUI.py:3805 flatcamGUI/MainGUI.py:4035 -msgid "Cancelled. Nothing selected to move." -msgstr "Abgebrochen. Nichts ausgewählt, um sich zu bewegen." - -#: flatcamGUI/MainGUI.py:4061 -msgid "New Tool ..." -msgstr "Neues Werkzeug ..." - -#: flatcamGUI/MainGUI.py:4062 flatcamTools/ToolNCC.py:924 -#: flatcamTools/ToolPaint.py:850 flatcamTools/ToolSolderPaste.py:560 -msgid "Enter a Tool Diameter" -msgstr "Geben Sie einen Werkzeugdurchmesser ein" - -#: flatcamGUI/MainGUI.py:4074 -msgid "Adding Tool cancelled ..." -msgstr "Tool wird hinzugefügt abgebrochen ..." - -#: flatcamGUI/MainGUI.py:4088 -msgid "Distance Tool exit..." -msgstr "Entfernungstool beenden ..." - -#: flatcamGUI/MainGUI.py:4323 flatcamGUI/MainGUI.py:4330 -msgid "Idle." -msgstr "Untätig." - -#: flatcamGUI/MainGUI.py:4361 -msgid "Application started ..." -msgstr "Bewerbung gestartet ..." - -#: flatcamGUI/MainGUI.py:4362 -msgid "Hello!" -msgstr "Hello!" - -#: flatcamGUI/MainGUI.py:4424 -msgid "Open Project ..." -msgstr "Offenes Projekt ..." - -#: flatcamGUI/MainGUI.py:4450 -msgid "Exit" -msgstr "Ausgang" - -#: flatcamGUI/GUIElements.py:2513 -#: flatcamGUI/preferences/tools/ToolsFilmPrefGroupUI.py:180 -#: flatcamTools/ToolDblSided.py:173 flatcamTools/ToolDblSided.py:388 -#: flatcamTools/ToolFilm.py:219 -msgid "Reference" -msgstr "Referenz" - -#: 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 "" -"Die Referenz kann sein:\n" -"- Absolut -> Der Bezugspunkt ist Punkt (0,0)\n" -"- Relativ -> Der Referenzpunkt ist die Mausposition vor dem Sprung" - -#: flatcamGUI/GUIElements.py:2520 -msgid "Abs" -msgstr "Abs" - -#: flatcamGUI/GUIElements.py:2521 -msgid "Relative" -msgstr "Relativ" - -#: flatcamGUI/GUIElements.py:2531 -msgid "Location" -msgstr "Ort" - -#: 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 "" -"Der Standortwert ist ein Tupel (x, y).\n" -"Wenn die Referenz Absolut ist, befindet sich der Sprung an der Position (x, " -"y).\n" -"Wenn die Referenz relativ ist, befindet sich der Sprung in der Entfernung " -"(x, y)\n" -"vom aktuellen Mausstandort aus." - -#: flatcamGUI/GUIElements.py:2573 -msgid "Save Log" -msgstr "Protokoll speichern" - -#: flatcamGUI/GUIElements.py:2592 flatcamTools/ToolShell.py:278 -msgid "Type >help< to get started" -msgstr "Geben Sie> help