From e4e277fc30fd9c3df64a45d4ac96c76a83e97231 Mon Sep 17 00:00:00 2001 From: cmstein Date: Tue, 24 Sep 2019 09:42:36 -0300 Subject: [PATCH 1/9] Update in pt_BR tanslation --- locale/pt_BR/LC_MESSAGES/strings.mo | Bin 277272 -> 277315 bytes locale/pt_BR/LC_MESSAGES/strings.po | 10 +++++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/locale/pt_BR/LC_MESSAGES/strings.mo b/locale/pt_BR/LC_MESSAGES/strings.mo index 8d7e1377a3e04d5de8af8b5a90004e085d336842..6a72120ca4581a059670697c58a6d1c4dee3435a 100644 GIT binary patch delta 39356 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 ml30>zrC?-WXsK&pscQsN*S\n" "Language-Team: \n" "Language: pt_BR\n" @@ -8555,7 +8555,7 @@ msgstr "Ferra. de Escala" msgid "Factor to scale the Gerber element." msgstr "Fator para redimensionar o elemento Gerber." -#: flatcamGUI/PreferencesUI.py:1607 flatcamGUI/PreferencesUI.py:1617 +#: flatcamGUI/PreferencesUI.py:1607 msgid "Threshold low" msgstr "Limiar baixo" @@ -8563,6 +8563,10 @@ msgstr "Limiar baixo" msgid "Threshold value under which the apertures are not marked." msgstr "Valor limiar sob o qual as aberturas não são marcadas." +#: flatcamGUI/PreferencesUI.py:1617 +msgid "Threshold high" +msgstr "Limiar alto" + #: flatcamGUI/PreferencesUI.py:1619 msgid "Threshold value over which the apertures are not marked." msgstr "Valor limite sobre o qual as aberturas não são marcadas." From 61e27920472100beb93cf5df79d2e91f3abae3c4 Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Wed, 25 Sep 2019 03:26:34 +0300 Subject: [PATCH 2/9] - unfortunately the fix for issue where while zooming the mouse cursor shape was not updated braked something in way that Matplotlib work with PyQt5, therefore I removed it --- FlatCAMApp.py | 1 + FlatCAMCommon.py | 23 +++ FlatCAMObj.py | 8 +- ObjectCollection.py | 29 ++-- README.md | 3 + flatcamGUI/PlotCanvasLegacy.py | 262 +++++++++++++++------------------ flatcamGUI/VisPyPatches.py | 2 +- 7 files changed, 169 insertions(+), 159 deletions(-) diff --git a/FlatCAMApp.py b/FlatCAMApp.py index 1dbc830c..e2e41879 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -11142,6 +11142,7 @@ class App(QtCore.QObject): self.kp = self.plotcanvas.graph_event_connect('key_press', self.ui.keyPressEvent) self.app_cursor = self.plotcanvas.new_cursor() + if self.ui.grid_snap_btn.isChecked(): self.app_cursor.enabled = True else: diff --git a/FlatCAMCommon.py b/FlatCAMCommon.py index 63f14f81..508884cc 100644 --- a/FlatCAMCommon.py +++ b/FlatCAMCommon.py @@ -46,3 +46,26 @@ class LoudDict(dict): """ self.callback = callback + + +class FCSignal: + """ + Taken from here: https://blog.abstractfactory.io/dynamic-signals-in-pyqt/ + """ + + def __init__(self): + self.__subscribers = [] + + def emit(self, *args, **kwargs): + for subs in self.__subscribers: + subs(*args, **kwargs) + + def connect(self, func): + self.__subscribers.append(func) + + def disconnect(self, func): + try: + self.__subscribers.remove(func) + except ValueError: + print('Warning: function %s not removed ' + 'from signal %s' % (func, self)) diff --git a/FlatCAMObj.py b/FlatCAMObj.py index b5527121..c34f6638 100644 --- a/FlatCAMObj.py +++ b/FlatCAMObj.py @@ -5756,9 +5756,8 @@ class FlatCAMCNCjob(FlatCAMObj, CNCjob): pass self.ui.annotation_cb.stateChanged.connect(self.on_annotation_change) - if self.app.is_legacy is False: - # set if to display text annotations - self.ui.annotation_cb.set_value(self.app.defaults["cncjob_annotation"]) + # set if to display text annotations + self.ui.annotation_cb.set_value(self.app.defaults["cncjob_annotation"]) # Show/Hide Advanced Options if self.app.defaults["global_app_level"] == 'b': @@ -6244,7 +6243,8 @@ class FlatCAMCNCjob(FlatCAMObj, CNCjob): # self.plot(kind=kind) self.annotation.redraw() else: - self.inform.emit(_("Not available with the current Graphic Engine Legacy(2D).")) + kind = self.ui.cncplot_method_combo.get_value() + self.plot(kind=kind) def convert_units(self, units): log.debug("FlatCAMObj.FlatCAMECNCjob.convert_units()") diff --git a/ObjectCollection.py b/ObjectCollection.py index 82c7b03d..98d6cd61 100644 --- a/ObjectCollection.py +++ b/ObjectCollection.py @@ -605,30 +605,33 @@ class ObjectCollection(QtCore.QAbstractItemModel): def delete_all(self): FlatCAMApp.App.log.debug(str(inspect.stack()[1][3]) + "--> OC.delete_all()") + try: + self.app.all_objects_list.clear() - self.app.plotcanvas.redraw() + self.app.geo_editor.clear() - self.app.all_objects_list.clear() + self.app.exc_editor.clear() - self.app.geo_editor.clear() + self.app.dblsidedtool.reset_fields() - self.app.exc_editor.clear() + self.app.panelize_tool.reset_fields() - self.app.dblsidedtool.reset_fields() + self.app.cutout_tool.reset_fields() - self.app.panelize_tool.reset_fields() + self.app.film_tool.reset_fields() - self.app.cutout_tool.reset_fields() + self.beginResetModel() - self.app.film_tool.reset_fields() + self.checked_indexes = [] - self.beginResetModel() + for group in self.root_item.child_items: + group.remove_children() - self.checked_indexes = [] - for group in self.root_item.child_items: - group.remove_children() + self.endResetModel() - self.endResetModel() + self.app.plotcanvas.redraw() + except Exception as e: + log.debug("ObjectCollection.delete_all() --> %s" % str(e)) def get_active(self): """ diff --git a/README.md b/README.md index 943ee0f4..d95bb0aa 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,9 @@ CAD program, and create G-Code for Isolation routing. - in legacy graphic engine, fixed issue where immediately after changing the mouse cursor snapping the mouse cursor shape was not updated - in legacy graphic engine, fixed issue where while zooming the mouse cursor shape was not updated - in legacy graphic engine, fixed issue where immediately after panning finished the mouse cursor shape was not updated +- unfortunately the fix for issue where while zooming the mouse cursor shape was not updated braked something in way that Matplotlib work with PyQt5, therefore I removed it +- fixed a bug in legacy graphic engine: when doing the self.app.collection.delete_all() in new_project an app crash occurred +- implemented the Annotation change in CNCJob Selected Tab 23.09.2019 diff --git a/flatcamGUI/PlotCanvasLegacy.py b/flatcamGUI/PlotCanvasLegacy.py index a2018692..c8b51c87 100644 --- a/flatcamGUI/PlotCanvasLegacy.py +++ b/flatcamGUI/PlotCanvasLegacy.py @@ -10,14 +10,6 @@ from PyQt5 import QtGui, QtCore, QtWidgets from PyQt5.QtCore import pyqtSignal -# Prevent conflict with Qt5 and above. -from matplotlib import use as mpl_use -mpl_use("Qt5Agg") -from matplotlib.figure import Figure -from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg -from matplotlib.backends.backend_agg import FigureCanvasAgg -from matplotlib.widgets import Cursor - # needed for legacy mode # Used for solid polygons in Matplotlib from descartes.patch import PolygonPatch @@ -25,14 +17,21 @@ from descartes.patch import PolygonPatch from shapely.geometry import Polygon, LineString, LinearRing, Point, MultiPolygon, MultiLineString import FlatCAMApp + from copy import deepcopy import logging -import traceback import gettext import FlatCAMTranslation as fcTranslate import builtins +# Prevent conflict with Qt5 and above. +from matplotlib import use as mpl_use +mpl_use("Qt5Agg") +from matplotlib.figure import Figure +from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas +# from matplotlib.widgets import Cursor + fcTranslate.apply_language('strings') if '_' not in builtins.__dict__: _ = gettext.gettext @@ -78,7 +77,7 @@ class CanvasCache(QtCore.QObject): self.axes.set_xticks([]) self.axes.set_yticks([]) - self.canvas = FigureCanvasAgg(self.figure) + self.canvas = FigureCanvas(self.figure) self.cache = None @@ -115,33 +114,6 @@ class CanvasCache(QtCore.QObject): # log.debug("A new object is available. Should plot it!") -class FigureCanvas(FigureCanvasQTAgg): - """ - Reimplemented this so I can emit a signal when the idle drawing is finished and display the mouse shape - """ - - idle_drawing_finished = pyqtSignal() - - def __init__(self, figure): - super().__init__(figure=figure) - - def _draw_idle(self): - if self.height() < 0 or self.width() < 0: - self._draw_pending = False - if not self._draw_pending: - return - try: - self.draw() - except Exception: - # Uncaught exceptions are fatal for PyQt5, so catch them instead. - traceback.print_exc() - finally: - self._draw_pending = False - - # I reimplemented this class only to launch this signal - self.idle_drawing_finished.emit() - - class PlotCanvasLegacy(QtCore.QObject): """ Class handling the plotting area in the application. @@ -151,6 +123,7 @@ class PlotCanvasLegacy(QtCore.QObject): # Request for new bitmap to display. The parameter # is a list with [xmin, xmax, ymin, ymax, zoom(optional)] update_screen_request = QtCore.pyqtSignal(list) + double_click = QtCore.pyqtSignal(object) def __init__(self, container, app): @@ -188,6 +161,7 @@ class PlotCanvasLegacy(QtCore.QObject): # The canvas is the top level container (FigureCanvasQTAgg) self.canvas = FigureCanvas(self.figure) + self.canvas.setFocusPolicy(QtCore.Qt.ClickFocus) self.canvas.setFocus() self.native = self.canvas @@ -203,15 +177,17 @@ class PlotCanvasLegacy(QtCore.QObject): # Update every time the canvas is re-drawn. self.background = self.canvas.copy_from_bbox(self.axes.bbox) + # ################### NOT IMPLEMENTED YET - EXPERIMENTAL ####################### # ## Bitmap Cache - self.cache = CanvasCache(self, self.app) - self.cache_thread = QtCore.QThread() - self.cache.moveToThread(self.cache_thread) - # super(PlotCanvas, self).connect(self.cache_thread, QtCore.SIGNAL("started()"), self.cache.run) - self.cache_thread.started.connect(self.cache.run) - - self.cache_thread.start() - self.cache.new_screen.connect(self.on_new_screen) + # self.cache = CanvasCache(self, self.app) + # self.cache_thread = QtCore.QThread() + # self.cache.moveToThread(self.cache_thread) + # # super(PlotCanvas, self).connect(self.cache_thread, QtCore.SIGNAL("started()"), self.cache.run) + # self.cache_thread.started.connect(self.cache.run) + # + # self.cache_thread.start() + # self.cache.new_screen.connect(self.on_new_screen) + # ############################################################################## # Events self.mp = self.graph_event_connect('button_press_event', self.on_mouse_press) @@ -226,11 +202,11 @@ class PlotCanvasLegacy(QtCore.QObject): # self.graph_event_connect('key_release_event', self.on_key_up) self.odr = self.graph_event_connect('draw_event', self.on_draw) - self.mouse = [0, 0] self.key = None self.pan_axes = [] self.panning = False + self.mouse = [0, 0] # signal is the mouse is dragging self.is_dragging = False @@ -238,9 +214,6 @@ class PlotCanvasLegacy(QtCore.QObject): # signal if there is a doubleclick self.is_dblclk = False - # pay attention, this signal should be connected only after the self.canvas and self.mouse is declared - self.canvas.idle_drawing_finished.connect(lambda: self.draw_cursor(x_pos=self.mouse[0], y_pos=self.mouse[1])) - def graph_event_connect(self, event_name, callback): """ Attach an event handler to the canvas through the Matplotlib interface. @@ -294,6 +267,31 @@ class PlotCanvasLegacy(QtCore.QObject): print(str(e)) return c + def draw_cursor(self, x_pos, y_pos): + """ + Draw a cursor at the mouse grid snapped position + + :param x_pos: mouse x position + :param y_pos: mouse y position + :return: + """ + # there is no point in drawing mouse cursor when panning as it jumps in a confusing way + if self.app.app_cursor.enabled is True and self.panning is False: + try: + x, y = self.app.geo_editor.snap(x_pos, y_pos) + + # Pointer (snapped) + elements = self.axes.plot(x, y, 'k+', ms=40, mew=2, animated=True) + for el in elements: + self.axes.draw_artist(el) + except Exception as e: + # this happen at app initialization since self.app.geo_editor does not exist yet + # I could reshuffle the object instantiating order but what's the point? I could crash something else + # and that's pythonic, too + pass + + self.canvas.blit(self.axes.bbox) + def clear_cursor(self, state): if state is True: @@ -653,31 +651,6 @@ class PlotCanvasLegacy(QtCore.QObject): # self.canvas.blit(self.axes.bbox) - def draw_cursor(self, x_pos, y_pos): - """ - Draw a cursor at the mouse grid snapped position - - :param x_pos: mouse x position - :param y_pos: mouse y position - :return: - """ - # there is no point in drawing mouse cursor when panning as it jumps in a confusing way - if self.app.app_cursor.enabled is True and self.panning is False: - try: - x, y = self.app.geo_editor.snap(x_pos, y_pos) - - # Pointer (snapped) - elements = self.axes.plot(x, y, 'k+', ms=40, mew=2, animated=True) - for el in elements: - self.axes.draw_artist(el) - except Exception as e: - # this happen at app initialization since self.app.geo_editor does not exist yet - # I could reshuffle the object instantiating order but what's the point? I could crash something else - # and that's pythonic, too - pass - - self.canvas.blit(self.axes.bbox) - def translate_coords(self, position): """ This does not do much. It's just for code compatibility @@ -750,66 +723,6 @@ class FakeCursor(QtCore.QObject): pass -class MplCursor(Cursor): - """ - Unfortunately this gets attached to the current axes and if a new axes is added - it will not be showed until that axes is deleted. - Not the kind of behavior needed here so I don't use it anymore. - """ - def __init__(self, axes, color='red', linewidth=1): - - super().__init__(ax=axes, useblit=True, color=color, linewidth=linewidth) - self._enabled = True - - self.axes = axes - self.color = color - self.linewidth = linewidth - - self.x = None - self.y = None - - @property - def enabled(self): - return True if self._enabled else False - - @enabled.setter - def enabled(self, value): - self._enabled = value - self.visible = self._enabled - self.canvas.draw() - - def onmove(self, event): - pass - - def set_data(self, event, pos): - """Internal event handler to draw the cursor when the mouse moves.""" - self.x = pos[0] - self.y = pos[1] - - if self.ignore(event): - return - if not self.canvas.widgetlock.available(self): - return - if event.inaxes != self.ax: - self.linev.set_visible(False) - self.lineh.set_visible(False) - - if self.needclear: - self.canvas.draw() - self.needclear = False - return - self.needclear = True - if not self.visible: - return - self.linev.set_xdata((self.x, self.x)) - - self.lineh.set_ydata((self.y, self.y)) - self.linev.set_visible(self.visible and self.vertOn) - self.lineh.set_visible(self.visible and self.horizOn) - - self._update() - - class ShapeCollectionLegacy: """ This will create the axes for each collection of shapes and will also @@ -930,7 +843,10 @@ class ShapeCollectionLegacy: self.shape_id = 0 self.axes.cla() - self.app.plotcanvas.auto_adjust_axes() + try: + self.app.plotcanvas.auto_adjust_axes() + except Exception as e: + log.debug("ShapeCollectionLegacy.clear() --> %s" % str(e)) if update is True: self.redraw() @@ -1013,12 +929,17 @@ class ShapeCollectionLegacy: self.axes.plot(x, y, linespec, color=linecolor) else: path_num += 1 - if isinstance(local_shapes[element]['shape'], Polygon): - self.axes.annotate(str(path_num), xy=local_shapes[element]['shape'].exterior.coords[0], - xycoords='data', fontsize=20) - else: - self.axes.annotate(str(path_num), xy=local_shapes[element]['shape'].coords[0], - xycoords='data', fontsize=20) + if self.obj.ui.annotation_cb.get_value(): + if isinstance(local_shapes[element]['shape'], Polygon): + self.axes.annotate( + str(path_num), + xy=local_shapes[element]['shape'].exterior.coords[0], + xycoords='data', fontsize=20) + else: + self.axes.annotate( + str(path_num), + xy=local_shapes[element]['shape'].coords[0], + xycoords='data', fontsize=20) patch = PolygonPatch(local_shapes[element]['shape'], facecolor=local_shapes[element]['face_color'], @@ -1108,3 +1029,62 @@ class ShapeCollectionLegacy: if self._visible is False: self.redraw() self._visible = value + +# class MplCursor(Cursor): +# """ +# Unfortunately this gets attached to the current axes and if a new axes is added +# it will not be showed until that axes is deleted. +# Not the kind of behavior needed here so I don't use it anymore. +# """ +# def __init__(self, axes, color='red', linewidth=1): +# +# super().__init__(ax=axes, useblit=True, color=color, linewidth=linewidth) +# self._enabled = True +# +# self.axes = axes +# self.color = color +# self.linewidth = linewidth +# +# self.x = None +# self.y = None +# +# @property +# def enabled(self): +# return True if self._enabled else False +# +# @enabled.setter +# def enabled(self, value): +# self._enabled = value +# self.visible = self._enabled +# self.canvas.draw() +# +# def onmove(self, event): +# pass +# +# def set_data(self, event, pos): +# """Internal event handler to draw the cursor when the mouse moves.""" +# self.x = pos[0] +# self.y = pos[1] +# +# if self.ignore(event): +# return +# if not self.canvas.widgetlock.available(self): +# return +# if event.inaxes != self.ax: +# self.linev.set_visible(False) +# self.lineh.set_visible(False) +# +# if self.needclear: +# self.canvas.draw() +# self.needclear = False +# return +# self.needclear = True +# if not self.visible: +# return +# self.linev.set_xdata((self.x, self.x)) +# +# self.lineh.set_ydata((self.y, self.y)) +# self.linev.set_visible(self.visible and self.vertOn) +# self.lineh.set_visible(self.visible and self.horizOn) +# +# self._update() diff --git a/flatcamGUI/VisPyPatches.py b/flatcamGUI/VisPyPatches.py index 7e2c5d0d..9f13d16a 100644 --- a/flatcamGUI/VisPyPatches.py +++ b/flatcamGUI/VisPyPatches.py @@ -88,7 +88,7 @@ def apply_patches(): def _get_tick_frac_labels(self): """Get the major ticks, minor ticks, and major labels""" minor_num = 4 # number of minor ticks per major division - if (self.axis.scale_type == 'linear'): + if self.axis.scale_type == 'linear': domain = self.axis.domain if domain[1] < domain[0]: flip = True From 11581283843f685ff6c2af4fd1637b4fcdf5710c Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Wed, 25 Sep 2019 03:36:33 +0300 Subject: [PATCH 3/9] (all those were done in the previous commit, should stay as log) - unfortunately the fix for issue where while zooming the mouse cursor shape was not updated braked something in way that Matplotlib work with PyQt5, therefore I removed it - fixed a bug in legacy graphic engine: when doing the self.app.collection.delete_all() in new_project an app crash occurred - implemented the Annotation change in CNCJob Selected Tab --- FlatCAMApp.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FlatCAMApp.py b/FlatCAMApp.py index e2e41879..a51fe179 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -124,7 +124,7 @@ class App(QtCore.QObject): # ################## Version and VERSION DATE ############################## # ########################################################################## version = 8.97 - version_date = "2019/09/22" + version_date = "2019/09/27" beta = True engine = '3D' From 36f9b9bd7a16b191009e60a9a2dd5a4af82d5375 Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Wed, 25 Sep 2019 04:17:18 +0300 Subject: [PATCH 4/9] - French translation at 33% --- README.md | 4 + locale/fr/LC_MESSAGES/strings.mo | Bin 72337 -> 88522 bytes locale/fr/LC_MESSAGES/strings.po | 860 ++++++++++++++++--------------- 3 files changed, 462 insertions(+), 402 deletions(-) diff --git a/README.md b/README.md index d95bb0aa..f83e61ce 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,10 @@ CAD program, and create G-Code for Isolation routing. ================================================= +25.09.2019 + +- French translation at 33% + 24.09.2019 - fixed the fullscreen method to show the application window in fullscreen wherever the mouse pointer it is therefore on the screen we are working on; before it was showing always on the primary screen diff --git a/locale/fr/LC_MESSAGES/strings.mo b/locale/fr/LC_MESSAGES/strings.mo index eed86692beee7fe4637aef0c5f55cf1a3fd7f0ee..ff71b314b1db51d7b5b1788b0d256b2c6dbf19d3 100644 GIT binary patch delta 28734 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 XPH=i;JNI!$YI`>(bNYa;Zr}d{{BwI> diff --git a/locale/fr/LC_MESSAGES/strings.po b/locale/fr/LC_MESSAGES/strings.po index 2515659f..ea800850 100644 --- a/locale/fr/LC_MESSAGES/strings.po +++ b/locale/fr/LC_MESSAGES/strings.po @@ -5,8 +5,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" -"POT-Creation-Date: 2019-09-23 19:12+0300\n" -"PO-Revision-Date: 2019-09-23 20:16+0300\n" +"POT-Creation-Date: 2019-09-25 03:52+0300\n" +"PO-Revision-Date: 2019-09-25 04:16+0300\n" "Last-Translator: \n" "Language-Team: \n" "Language: fr\n" @@ -62,12 +62,12 @@ msgstr "" "Logiciel Open Source - Tapez help pour commencer\n" "\n" -#: FlatCAMApp.py:2545 FlatCAMApp.py:8357 +#: FlatCAMApp.py:2545 FlatCAMApp.py:8365 msgid "New Project - Not saved" msgstr "Nouveau projet - Non enregistré" -#: FlatCAMApp.py:2618 FlatCAMApp.py:8411 FlatCAMApp.py:8447 FlatCAMApp.py:8487 -#: FlatCAMApp.py:9174 FlatCAMApp.py:10363 FlatCAMApp.py:10416 +#: FlatCAMApp.py:2618 FlatCAMApp.py:8419 FlatCAMApp.py:8455 FlatCAMApp.py:8495 +#: FlatCAMApp.py:9182 FlatCAMApp.py:10371 FlatCAMApp.py:10424 msgid "" "Canvas initialization started.\n" "Canvas initialization finished in" @@ -130,13 +130,13 @@ msgstr "Voulez-vous enregistrer l'objet édité?" msgid "Close Editor" msgstr "Fermer l'éditeur" -#: FlatCAMApp.py:3122 FlatCAMApp.py:4609 FlatCAMApp.py:7287 FlatCAMApp.py:8264 +#: FlatCAMApp.py:3122 FlatCAMApp.py:4612 FlatCAMApp.py:7295 FlatCAMApp.py:8272 #: FlatCAMTranslation.py:97 FlatCAMTranslation.py:171 #: flatcamGUI/PreferencesUI.py:817 msgid "Yes" msgstr "Oui" -#: FlatCAMApp.py:3123 FlatCAMApp.py:4610 FlatCAMApp.py:7288 FlatCAMApp.py:8265 +#: FlatCAMApp.py:3123 FlatCAMApp.py:4613 FlatCAMApp.py:7296 FlatCAMApp.py:8273 #: FlatCAMTranslation.py:98 FlatCAMTranslation.py:172 #: flatcamGUI/PreferencesUI.py:818 flatcamGUI/PreferencesUI.py:3360 #: flatcamGUI/PreferencesUI.py:3724 flatcamTools/ToolNonCopperClear.py:171 @@ -144,8 +144,8 @@ msgstr "Oui" msgid "No" msgstr "Non" -#: FlatCAMApp.py:3124 FlatCAMApp.py:4611 FlatCAMApp.py:5480 FlatCAMApp.py:6718 -#: FlatCAMApp.py:8266 +#: FlatCAMApp.py:3124 FlatCAMApp.py:4614 FlatCAMApp.py:5483 FlatCAMApp.py:6726 +#: FlatCAMApp.py:8274 msgid "Cancel" msgstr "Annuler" @@ -161,11 +161,11 @@ msgstr "Sélectionnez un objet Gerber, Geometry ou Excellon à mettre à jour." msgid "is updated, returning to App..." msgstr "est mis à jour, revenant à l'App ..." -#: FlatCAMApp.py:3594 FlatCAMApp.py:3648 FlatCAMApp.py:4469 +#: FlatCAMApp.py:3594 FlatCAMApp.py:3648 FlatCAMApp.py:4472 msgid "Could not load defaults file." msgstr "Impossible de charger le fichier par défaut." -#: FlatCAMApp.py:3607 FlatCAMApp.py:3657 FlatCAMApp.py:4479 +#: FlatCAMApp.py:3607 FlatCAMApp.py:3657 FlatCAMApp.py:4482 msgid "Failed to parse defaults file." msgstr "Échec de l'analyse du fichier par défaut." @@ -189,9 +189,9 @@ msgstr "Exporter les préférences FlatCAM" msgid "FlatCAM preferences export cancelled." msgstr "Exportation des préférences FlatCAM annulée." -#: FlatCAMApp.py:3704 FlatCAMApp.py:6483 FlatCAMApp.py:9355 FlatCAMApp.py:9466 -#: FlatCAMApp.py:9591 FlatCAMApp.py:9650 FlatCAMApp.py:9768 FlatCAMApp.py:9907 -#: FlatCAMObj.py:6102 flatcamTools/ToolSolderPaste.py:1428 +#: FlatCAMApp.py:3704 FlatCAMApp.py:6491 FlatCAMApp.py:9363 FlatCAMApp.py:9474 +#: FlatCAMApp.py:9599 FlatCAMApp.py:9658 FlatCAMApp.py:9776 FlatCAMApp.py:9915 +#: FlatCAMObj.py:6101 flatcamTools/ToolSolderPaste.py:1428 msgid "" "Permission denied, saving not possible.\n" "Most likely another app is holding the file open and not accessible." @@ -204,7 +204,7 @@ msgstr "" msgid "Could not load preferences file." msgstr "Impossible de charger le fichier de préférences." -#: FlatCAMApp.py:3737 FlatCAMApp.py:4526 +#: FlatCAMApp.py:3737 FlatCAMApp.py:4529 msgid "Failed to write defaults to file." msgstr "Échec d'écriture par défaut dans le fichier." @@ -248,7 +248,7 @@ msgstr "" "[selected] {kind} créé/sélectionné: {name}" -#: FlatCAMApp.py:4081 FlatCAMApp.py:6798 FlatCAMObj.py:236 FlatCAMObj.py:251 +#: FlatCAMApp.py:4081 FlatCAMApp.py:6806 FlatCAMObj.py:236 FlatCAMObj.py:251 #: FlatCAMObj.py:267 FlatCAMObj.py:347 flatcamTools/ToolMove.py:206 msgid "Plotting" msgstr "Traçage" @@ -383,31 +383,31 @@ msgstr "Traducteur" msgid "E-mail" msgstr "Email" -#: FlatCAMApp.py:4531 FlatCAMApp.py:7297 +#: FlatCAMApp.py:4534 FlatCAMApp.py:7305 msgid "Preferences saved." msgstr "Préférences enregistrées." -#: FlatCAMApp.py:4559 +#: FlatCAMApp.py:4562 msgid "Could not load factory defaults file." msgstr "Impossible de charger le fichier de paramètres d'usine." -#: FlatCAMApp.py:4569 +#: FlatCAMApp.py:4572 msgid "Failed to parse factory defaults file." msgstr "Échec de l'analyse du fichier des paramètres d'usine." -#: FlatCAMApp.py:4584 +#: FlatCAMApp.py:4587 msgid "Failed to write factory defaults to file." msgstr "Échec de l'écriture des paramètres d'usine par défaut dans le fichier." -#: FlatCAMApp.py:4588 +#: FlatCAMApp.py:4591 msgid "Factory defaults saved." msgstr "Les paramètres d'usine par défaut ont été enregistrés." -#: FlatCAMApp.py:4599 flatcamGUI/FlatCAMGUI.py:3451 +#: FlatCAMApp.py:4602 flatcamGUI/FlatCAMGUI.py:3451 msgid "Application is saving the project. Please wait ..." msgstr "L'application enregistre le projet. S'il vous plaît, attendez ..." -#: FlatCAMApp.py:4604 FlatCAMTranslation.py:166 +#: FlatCAMApp.py:4607 FlatCAMTranslation.py:166 msgid "" "There are files/objects modified in FlatCAM. \n" "Do you want to Save the project?" @@ -415,30 +415,30 @@ msgstr "" "Il y a des fichiers / objets modifiés dans FlatCAM.\n" "Voulez-vous enregistrer le projet?" -#: FlatCAMApp.py:4607 FlatCAMApp.py:8262 FlatCAMTranslation.py:169 +#: FlatCAMApp.py:4610 FlatCAMApp.py:8270 FlatCAMTranslation.py:169 msgid "Save changes" msgstr "Sauvegarder les modifications" -#: FlatCAMApp.py:4837 +#: FlatCAMApp.py:4840 msgid "Selected Excellon file extensions registered with FlatCAM." msgstr "" "Extensions de fichier Excellon sélectionnées enregistrées avec FlatCAM." -#: FlatCAMApp.py:4859 +#: FlatCAMApp.py:4862 msgid "Selected GCode file extensions registered with FlatCAM." msgstr "Extensions de fichier GCode sélectionnées enregistrées avec FlatCAM." -#: FlatCAMApp.py:4881 +#: FlatCAMApp.py:4884 msgid "Selected Gerber file extensions registered with FlatCAM." msgstr "Extensions de fichiers Gerber sélectionnées enregistrées avec FlatCAM." -#: FlatCAMApp.py:5047 FlatCAMApp.py:5103 FlatCAMApp.py:5131 +#: FlatCAMApp.py:5050 FlatCAMApp.py:5106 FlatCAMApp.py:5134 msgid "At least two objects are required for join. Objects currently selected" msgstr "" "Au moins deux objets sont requis pour la jointure. Objets actuellement " "sélectionnés" -#: FlatCAMApp.py:5056 +#: FlatCAMApp.py:5059 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 " @@ -455,39 +455,39 @@ msgstr "" "attendu.\n" "Vérifiez le GCODE généré." -#: FlatCAMApp.py:5098 +#: FlatCAMApp.py:5101 msgid "Failed. Excellon joining works only on Excellon objects." msgstr "Échoué. Excellon rejoindre ne travaille que sur des objets Excellon." -#: FlatCAMApp.py:5126 +#: FlatCAMApp.py:5129 msgid "Failed. Gerber joining works only on Gerber objects." msgstr "Échoué. La jonction de Gerber ne fonctionne que sur des objets Gerber." -#: FlatCAMApp.py:5156 FlatCAMApp.py:5193 +#: FlatCAMApp.py:5159 FlatCAMApp.py:5196 msgid "Failed. Select a Geometry Object and try again." msgstr "Échoué. Sélectionnez un objet de géométrie et réessayez." -#: FlatCAMApp.py:5161 FlatCAMApp.py:5198 +#: FlatCAMApp.py:5164 FlatCAMApp.py:5201 msgid "Expected a FlatCAMGeometry, got" msgstr "Échoué. Sélectionnez un objet de géométrie et réessayez" -#: FlatCAMApp.py:5175 +#: FlatCAMApp.py:5178 msgid "A Geometry object was converted to MultiGeo type." msgstr "Un objet Geometry a été converti en type MultiGeo." -#: FlatCAMApp.py:5213 +#: FlatCAMApp.py:5216 msgid "A Geometry object was converted to SingleGeo type." msgstr "Un objet Geometry a été converti en type SingleGeo." -#: FlatCAMApp.py:5474 +#: FlatCAMApp.py:5477 msgid "Toggle Units" msgstr "Basculer les Unités" -#: FlatCAMApp.py:5476 +#: FlatCAMApp.py:5479 msgid "Change project units ..." msgstr "Changer les unités du projet ..." -#: FlatCAMApp.py:5477 +#: FlatCAMApp.py:5480 msgid "" "Changing the units of the project causes all geometrical properties of all " "objects to be scaled accordingly.\n" @@ -497,51 +497,51 @@ msgstr "" "tous les objets sont mises à l'échelle en conséquence.\n" "Continuez?" -#: FlatCAMApp.py:5479 FlatCAMApp.py:6612 FlatCAMApp.py:6717 FlatCAMApp.py:8571 -#: FlatCAMApp.py:8585 FlatCAMApp.py:8840 FlatCAMApp.py:8851 +#: FlatCAMApp.py:5482 FlatCAMApp.py:6620 FlatCAMApp.py:6725 FlatCAMApp.py:8579 +#: FlatCAMApp.py:8593 FlatCAMApp.py:8848 FlatCAMApp.py:8859 msgid "Ok" msgstr "D'accord" -#: FlatCAMApp.py:5528 +#: FlatCAMApp.py:5531 msgid "Converted units to" msgstr "Unités converties en" -#: FlatCAMApp.py:5540 +#: FlatCAMApp.py:5543 msgid " Units conversion cancelled." msgstr " Conversion des unités annulée." -#: FlatCAMApp.py:6429 +#: FlatCAMApp.py:6437 msgid "Open file" msgstr "Fichier ouvert" -#: FlatCAMApp.py:6460 FlatCAMApp.py:6465 +#: FlatCAMApp.py:6468 FlatCAMApp.py:6473 msgid "Export G-Code ..." msgstr "Exporter G-Code ..." -#: FlatCAMApp.py:6469 +#: FlatCAMApp.py:6477 msgid "Export Code cancelled." msgstr "Code d'exportation annulé." -#: FlatCAMApp.py:6479 FlatCAMObj.py:6098 flatcamTools/ToolSolderPaste.py:1424 +#: FlatCAMApp.py:6487 FlatCAMObj.py:6097 flatcamTools/ToolSolderPaste.py:1424 msgid "No such file or directory" msgstr "Aucun fichier ou répertoire de ce nom" -#: FlatCAMApp.py:6491 FlatCAMObj.py:6112 +#: FlatCAMApp.py:6499 FlatCAMObj.py:6111 msgid "Saved to" msgstr "Enregistré dans" -#: FlatCAMApp.py:6600 FlatCAMApp.py:6633 FlatCAMApp.py:6644 FlatCAMApp.py:6655 +#: FlatCAMApp.py:6608 FlatCAMApp.py:6641 FlatCAMApp.py:6652 FlatCAMApp.py:6663 #: flatcamTools/ToolNonCopperClear.py:930 flatcamTools/ToolSolderPaste.py:774 msgid "Please enter a tool diameter with non-zero value, in Float format." msgstr "" "Veuillez saisir un diamètre d’outil avec une valeur non nulle, au format " "réel." -#: FlatCAMApp.py:6605 FlatCAMApp.py:6638 FlatCAMApp.py:6649 FlatCAMApp.py:6660 +#: FlatCAMApp.py:6613 FlatCAMApp.py:6646 FlatCAMApp.py:6657 FlatCAMApp.py:6668 msgid "Adding Tool cancelled" msgstr "Outil d'ajout annulé" -#: FlatCAMApp.py:6608 +#: FlatCAMApp.py:6616 msgid "" "Adding Tool works only when Advanced is checked.\n" "Go to Preferences -> General - Show Advanced Options." @@ -549,11 +549,11 @@ msgstr "" "L'ajout d'outil ne fonctionne que lorsque l'option Avancé est cochée.\n" "Allez dans Préférences -> Général - Afficher les options avancées." -#: FlatCAMApp.py:6712 +#: FlatCAMApp.py:6720 msgid "Delete objects" msgstr "Supprimer des objets" -#: FlatCAMApp.py:6715 +#: FlatCAMApp.py:6723 msgid "" "Are you sure you want to permanently delete\n" "the selected objects?" @@ -561,55 +561,55 @@ msgstr "" "Êtes-vous sûr de vouloir supprimer définitivement\n" "les objets sélectionnés?" -#: FlatCAMApp.py:6746 +#: FlatCAMApp.py:6754 msgid "Object(s) deleted" msgstr "Objet (s) supprimé (s)" -#: FlatCAMApp.py:6750 +#: FlatCAMApp.py:6758 msgid "Failed. No object(s) selected..." msgstr "Échoué. Aucun objet sélectionné ..." -#: FlatCAMApp.py:6752 +#: FlatCAMApp.py:6760 msgid "Save the work in Editor and try again ..." msgstr "Enregistrez le travail dans l'éditeur et réessayez ..." -#: FlatCAMApp.py:6782 +#: FlatCAMApp.py:6790 msgid "Object deleted" msgstr "Objet supprimé" -#: FlatCAMApp.py:6809 +#: FlatCAMApp.py:6817 msgid "Click to set the origin ..." msgstr "Cliquez pour définir l'origine ..." -#: FlatCAMApp.py:6831 +#: FlatCAMApp.py:6839 msgid "Setting Origin..." msgstr "Réglage de l'Origine ..." -#: FlatCAMApp.py:6843 +#: FlatCAMApp.py:6851 msgid "Origin set" msgstr "Ensemble d'origine" -#: FlatCAMApp.py:6850 +#: FlatCAMApp.py:6858 msgid "Origin coordinates specified but incomplete." msgstr "Coordonnées d'origine spécifiées mais incomplètes." -#: FlatCAMApp.py:6892 FlatCAMObj.py:6247 +#: FlatCAMApp.py:6900 msgid "Not available with the current Graphic Engine Legacy(2D)." msgstr "Non disponible avec le moteur graphique actuel Legacy (2D)." -#: FlatCAMApp.py:6896 +#: FlatCAMApp.py:6904 msgid "Jump to ..." msgstr "Sauter à ..." -#: FlatCAMApp.py:6897 +#: FlatCAMApp.py:6905 msgid "Enter the coordinates in format X,Y:" msgstr "Entrez les coordonnées au format X, Y:" -#: FlatCAMApp.py:6904 +#: FlatCAMApp.py:6912 msgid "Wrong coordinates. Enter coordinates in format: X,Y" msgstr "Mauvaises coordonnées. Entrez les coordonnées au format: X, Y" -#: FlatCAMApp.py:6936 flatcamEditors/FlatCAMExcEditor.py:3487 +#: FlatCAMApp.py:6944 flatcamEditors/FlatCAMExcEditor.py:3487 #: flatcamEditors/FlatCAMExcEditor.py:3495 #: flatcamEditors/FlatCAMGeoEditor.py:3832 #: flatcamEditors/FlatCAMGeoEditor.py:3847 @@ -623,31 +623,31 @@ msgstr "Mauvaises coordonnées. Entrez les coordonnées au format: X, Y" msgid "Done." msgstr "Terminé." -#: FlatCAMApp.py:7070 FlatCAMApp.py:7138 +#: FlatCAMApp.py:7078 FlatCAMApp.py:7146 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:7158 +#: FlatCAMApp.py:7166 msgid "" "Aborting. The current task will be gracefully closed as soon as possible..." msgstr "" "Abandonner La tâche en cours sera clôturée dans les meilleurs délais ..." -#: FlatCAMApp.py:7164 +#: FlatCAMApp.py:7172 msgid "The current task was gracefully closed on user request..." msgstr "" "La tâche en cours a été fermée avec élégance à la demande de " "l'utilisateur ..." -#: FlatCAMApp.py:7181 flatcamGUI/GUIElements.py:1443 +#: FlatCAMApp.py:7189 flatcamGUI/GUIElements.py:1443 msgid "Preferences" msgstr "Préférences" -#: FlatCAMApp.py:7248 +#: FlatCAMApp.py:7256 msgid "Preferences edited but not saved." msgstr "Préférences modifiées mais non enregistrées." -#: FlatCAMApp.py:7282 +#: FlatCAMApp.py:7290 msgid "" "One or more values are changed.\n" "Do you want to save the Preferences?" @@ -655,74 +655,74 @@ msgstr "" "Une ou plusieurs valeurs sont modifiées.\n" "Voulez-vous enregistrer les préférences?" -#: FlatCAMApp.py:7284 flatcamGUI/FlatCAMGUI.py:193 +#: FlatCAMApp.py:7292 flatcamGUI/FlatCAMGUI.py:193 #: flatcamGUI/FlatCAMGUI.py:1002 msgid "Save Preferences" msgstr "Enregistrer les préf." -#: FlatCAMApp.py:7313 +#: FlatCAMApp.py:7321 msgid "No object selected to Flip on Y axis." msgstr "Aucun objet sélectionné pour basculer sur l’axe Y." -#: FlatCAMApp.py:7339 +#: FlatCAMApp.py:7347 msgid "Flip on Y axis done." msgstr "Tournez sur l'axe des Y fait." -#: FlatCAMApp.py:7342 FlatCAMApp.py:7385 +#: FlatCAMApp.py:7350 FlatCAMApp.py:7393 #: flatcamEditors/FlatCAMGrbEditor.py:5702 msgid "Flip action was not executed." msgstr "L'Action de retournement n'a pas été exécutée." -#: FlatCAMApp.py:7356 +#: FlatCAMApp.py:7364 msgid "No object selected to Flip on X axis." msgstr "Aucun objet sélectionné pour basculer sur l’axe X." -#: FlatCAMApp.py:7382 +#: FlatCAMApp.py:7390 msgid "Flip on X axis done." msgstr "Tournez sur l'axe X fait." -#: FlatCAMApp.py:7399 +#: FlatCAMApp.py:7407 msgid "No object selected to Rotate." msgstr "Aucun objet sélectionné pour faire pivoter." -#: FlatCAMApp.py:7402 FlatCAMApp.py:7450 FlatCAMApp.py:7483 +#: FlatCAMApp.py:7410 FlatCAMApp.py:7458 FlatCAMApp.py:7491 msgid "Transform" msgstr "Transformer" -#: FlatCAMApp.py:7402 FlatCAMApp.py:7450 FlatCAMApp.py:7483 +#: FlatCAMApp.py:7410 FlatCAMApp.py:7458 FlatCAMApp.py:7491 msgid "Enter the Angle value:" msgstr "Entrez la valeur de l'angle:" -#: FlatCAMApp.py:7433 +#: FlatCAMApp.py:7441 msgid "Rotation done." msgstr "Rotation effectuée." -#: FlatCAMApp.py:7436 +#: FlatCAMApp.py:7444 msgid "Rotation movement was not executed." msgstr "Le mouvement de rotation n'a pas été exécuté." -#: FlatCAMApp.py:7448 +#: FlatCAMApp.py:7456 msgid "No object selected to Skew/Shear on X axis." msgstr "Aucun objet sélectionné pour incliner / cisailler sur l'axe X." -#: FlatCAMApp.py:7470 +#: FlatCAMApp.py:7478 msgid "Skew on X axis done." msgstr "Inclinaison sur l'axe X terminée." -#: FlatCAMApp.py:7481 +#: FlatCAMApp.py:7489 msgid "No object selected to Skew/Shear on Y axis." msgstr "" "Aucun objet sélectionné pour incliner / cisailler sur l'axe des ordonnées." -#: FlatCAMApp.py:7503 +#: FlatCAMApp.py:7511 msgid "Skew on Y axis done." msgstr "Inclinaison sur l'axe des Y faite." -#: FlatCAMApp.py:7558 flatcamGUI/FlatCAMGUI.py:1320 +#: FlatCAMApp.py:7566 flatcamGUI/FlatCAMGUI.py:1320 msgid "Grid On/Off" msgstr "Grille On/Off" -#: FlatCAMApp.py:7571 flatcamEditors/FlatCAMGeoEditor.py:941 +#: FlatCAMApp.py:7579 flatcamEditors/FlatCAMGeoEditor.py:941 #: flatcamEditors/FlatCAMGrbEditor.py:2477 #: flatcamEditors/FlatCAMGrbEditor.py:5212 flatcamGUI/ObjectUI.py:1058 #: flatcamTools/ToolDblSided.py:160 flatcamTools/ToolDblSided.py:207 @@ -732,7 +732,7 @@ msgstr "Grille On/Off" msgid "Add" msgstr "Ajouter" -#: FlatCAMApp.py:7572 FlatCAMObj.py:3628 +#: FlatCAMApp.py:7580 FlatCAMObj.py:3628 #: flatcamEditors/FlatCAMGrbEditor.py:2482 flatcamGUI/FlatCAMGUI.py:553 #: flatcamGUI/FlatCAMGUI.py:761 flatcamGUI/FlatCAMGUI.py:1695 #: flatcamGUI/FlatCAMGUI.py:1790 flatcamGUI/FlatCAMGUI.py:2195 @@ -742,70 +742,70 @@ msgstr "Ajouter" msgid "Delete" msgstr "Effacer" -#: FlatCAMApp.py:7585 +#: FlatCAMApp.py:7593 msgid "New Grid ..." msgstr "Nouvelle grille ..." -#: FlatCAMApp.py:7586 +#: FlatCAMApp.py:7594 msgid "Enter a Grid Value:" msgstr "Entrez une valeur de grille:" -#: FlatCAMApp.py:7594 FlatCAMApp.py:7621 +#: FlatCAMApp.py:7602 FlatCAMApp.py:7629 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:7600 +#: FlatCAMApp.py:7608 msgid "New Grid added" msgstr "Nouvelle grille ajoutée" -#: FlatCAMApp.py:7603 +#: FlatCAMApp.py:7611 msgid "Grid already exists" msgstr "La grille existe déjà" -#: FlatCAMApp.py:7606 +#: FlatCAMApp.py:7614 msgid "Adding New Grid cancelled" msgstr "Ajout d'une nouvelle grille annulée" -#: FlatCAMApp.py:7628 +#: FlatCAMApp.py:7636 msgid " Grid Value does not exist" msgstr " Grid Value does not exist" -#: FlatCAMApp.py:7631 +#: FlatCAMApp.py:7639 msgid "Grid Value deleted" msgstr "Valeur de grille supprimée" -#: FlatCAMApp.py:7634 +#: FlatCAMApp.py:7642 msgid "Delete Grid value cancelled" msgstr "Supprimer la valeur de grille annulée" -#: FlatCAMApp.py:7640 +#: FlatCAMApp.py:7648 msgid "Key Shortcut List" msgstr "Liste de raccourcis clavier" -#: FlatCAMApp.py:7674 +#: FlatCAMApp.py:7682 msgid " No object selected to copy it's name" msgstr " Aucun objet sélectionné pour copier son nom" -#: FlatCAMApp.py:7678 +#: FlatCAMApp.py:7686 msgid "Name copied on clipboard ..." msgstr "Nom copié dans le presse-papiers ..." -#: FlatCAMApp.py:7733 flatcamEditors/FlatCAMGrbEditor.py:4187 +#: FlatCAMApp.py:7741 flatcamEditors/FlatCAMGrbEditor.py:4187 msgid "Coordinates copied to clipboard." msgstr "Coordonnées copiées dans le presse-papier." -#: FlatCAMApp.py:8018 FlatCAMApp.py:8022 FlatCAMApp.py:8026 FlatCAMApp.py:8030 -#: FlatCAMApp.py:8046 FlatCAMApp.py:8050 FlatCAMApp.py:8054 FlatCAMApp.py:8058 -#: FlatCAMApp.py:8098 FlatCAMApp.py:8101 FlatCAMApp.py:8104 FlatCAMApp.py:8107 -#: ObjectCollection.py:725 ObjectCollection.py:728 ObjectCollection.py:731 -#: ObjectCollection.py:734 +#: FlatCAMApp.py:8026 FlatCAMApp.py:8030 FlatCAMApp.py:8034 FlatCAMApp.py:8038 +#: FlatCAMApp.py:8054 FlatCAMApp.py:8058 FlatCAMApp.py:8062 FlatCAMApp.py:8066 +#: FlatCAMApp.py:8106 FlatCAMApp.py:8109 FlatCAMApp.py:8112 FlatCAMApp.py:8115 +#: ObjectCollection.py:728 ObjectCollection.py:731 ObjectCollection.py:734 +#: ObjectCollection.py:737 #, python-brace-format msgid "[selected]{name} selected" msgstr "[selected]{name} choisi" -#: FlatCAMApp.py:8259 +#: FlatCAMApp.py:8267 msgid "" "There are files/objects opened in FlatCAM.\n" "Creating a New project will delete them.\n" @@ -815,230 +815,230 @@ msgstr "" "La création d'un nouveau projet les supprimera.\n" "Voulez-vous enregistrer le projet?" -#: FlatCAMApp.py:8281 +#: FlatCAMApp.py:8289 msgid "New Project created" msgstr "Nouveau projet créé" -#: FlatCAMApp.py:8402 FlatCAMApp.py:8406 flatcamGUI/FlatCAMGUI.py:636 +#: FlatCAMApp.py:8410 FlatCAMApp.py:8414 flatcamGUI/FlatCAMGUI.py:636 #: flatcamGUI/FlatCAMGUI.py:2068 msgid "Open Gerber" msgstr "Gerber ouvert" -#: FlatCAMApp.py:8413 +#: FlatCAMApp.py:8421 msgid "Opening Gerber file." msgstr "Ouvrir le fichier Gerber." -#: FlatCAMApp.py:8419 +#: FlatCAMApp.py:8427 msgid "Open Gerber cancelled." msgstr "Ouvert Gerber annulé." -#: FlatCAMApp.py:8439 FlatCAMApp.py:8443 flatcamGUI/FlatCAMGUI.py:637 +#: FlatCAMApp.py:8447 FlatCAMApp.py:8451 flatcamGUI/FlatCAMGUI.py:637 #: flatcamGUI/FlatCAMGUI.py:2069 msgid "Open Excellon" msgstr "Excellon ouvert" -#: FlatCAMApp.py:8449 +#: FlatCAMApp.py:8457 msgid "Opening Excellon file." msgstr "Ouverture du fichier Excellon." -#: FlatCAMApp.py:8455 +#: FlatCAMApp.py:8463 msgid " Open Excellon cancelled." msgstr " Ouvert Excellon annulé." -#: FlatCAMApp.py:8478 FlatCAMApp.py:8482 +#: FlatCAMApp.py:8486 FlatCAMApp.py:8490 msgid "Open G-Code" msgstr "G-code ouvert" -#: FlatCAMApp.py:8489 +#: FlatCAMApp.py:8497 msgid "Opening G-Code file." msgstr "Ouverture du fichier G-Code." -#: FlatCAMApp.py:8495 +#: FlatCAMApp.py:8503 msgid "Open G-Code cancelled." msgstr "Ouvert G-code annulé." -#: FlatCAMApp.py:8512 FlatCAMApp.py:8515 flatcamGUI/FlatCAMGUI.py:1326 +#: FlatCAMApp.py:8520 FlatCAMApp.py:8523 flatcamGUI/FlatCAMGUI.py:1326 msgid "Open Project" msgstr "Projet ouvert" -#: FlatCAMApp.py:8524 +#: FlatCAMApp.py:8532 msgid "Open Project cancelled." msgstr "Projet ouvert annulé." -#: FlatCAMApp.py:8543 FlatCAMApp.py:8546 +#: FlatCAMApp.py:8551 FlatCAMApp.py:8554 msgid "Open Configuration File" msgstr "Ouvrir le fichier de configuration" -#: FlatCAMApp.py:8551 +#: FlatCAMApp.py:8559 msgid "Open Config cancelled." msgstr "Configuration ouverte annulée." -#: FlatCAMApp.py:8567 FlatCAMApp.py:8836 FlatCAMApp.py:11479 -#: FlatCAMApp.py:11500 FlatCAMApp.py:11522 FlatCAMApp.py:11545 +#: FlatCAMApp.py:8575 FlatCAMApp.py:8844 FlatCAMApp.py:11488 +#: FlatCAMApp.py:11509 FlatCAMApp.py:11531 FlatCAMApp.py:11554 msgid "No object selected." msgstr "Aucun objet sélectionné." -#: FlatCAMApp.py:8568 FlatCAMApp.py:8837 +#: FlatCAMApp.py:8576 FlatCAMApp.py:8845 msgid "Please Select a Geometry object to export" msgstr "Veuillez sélectionner un objet de géométrie à exporter" -#: FlatCAMApp.py:8582 +#: FlatCAMApp.py:8590 msgid "Only Geometry, Gerber and CNCJob objects can be used." msgstr "Seuls les objets Geometry, Gerber et CNCJob peuvent être utilisés." -#: FlatCAMApp.py:8595 FlatCAMApp.py:8599 +#: FlatCAMApp.py:8603 FlatCAMApp.py:8607 msgid "Export SVG" msgstr "Exporter en SVG" -#: FlatCAMApp.py:8605 +#: FlatCAMApp.py:8613 msgid " Export SVG cancelled." msgstr " Export SVG annulé." -#: FlatCAMApp.py:8625 +#: FlatCAMApp.py:8633 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:8631 FlatCAMApp.py:8635 +#: FlatCAMApp.py:8639 FlatCAMApp.py:8643 msgid "Export PNG Image" msgstr "Exporter une image PNG" -#: FlatCAMApp.py:8640 +#: FlatCAMApp.py:8648 msgid "Export PNG cancelled." msgstr "Exportation PNG annulée." -#: FlatCAMApp.py:8660 +#: FlatCAMApp.py:8668 msgid "No object selected. Please select an Gerber object to export." msgstr "" "Aucun objet sélectionné. Veuillez sélectionner un objet Gerber à exporter." -#: FlatCAMApp.py:8666 FlatCAMApp.py:8798 +#: FlatCAMApp.py:8674 FlatCAMApp.py:8806 msgid "Failed. Only Gerber objects can be saved as Gerber files..." msgstr "" "Échoué. Seuls les objets Gerber peuvent être enregistrés en tant que " "fichiers Gerber ..." -#: FlatCAMApp.py:8678 +#: FlatCAMApp.py:8686 msgid "Save Gerber source file" msgstr "Enregistrer le fichier source Gerber" -#: FlatCAMApp.py:8684 +#: FlatCAMApp.py:8692 msgid "Save Gerber source file cancelled." msgstr "Enregistrer le fichier source Gerber annulé." -#: FlatCAMApp.py:8704 +#: FlatCAMApp.py:8712 msgid "No object selected. Please select an Excellon object to export." msgstr "" "Aucun objet sélectionné. Veuillez sélectionner un objet Excellon à exporter." -#: FlatCAMApp.py:8710 FlatCAMApp.py:8754 +#: FlatCAMApp.py:8718 FlatCAMApp.py:8762 msgid "Failed. Only Excellon objects can be saved as Excellon files..." msgstr "" "Échoué. Seuls les objets Excellon peuvent être enregistrés en tant que " "fichiers Excellon ..." -#: FlatCAMApp.py:8718 FlatCAMApp.py:8722 +#: FlatCAMApp.py:8726 FlatCAMApp.py:8730 msgid "Save Excellon source file" msgstr "Enregistrer le fichier source Excellon" -#: FlatCAMApp.py:8728 +#: FlatCAMApp.py:8736 msgid "Saving Excellon source file cancelled." msgstr "Enregistrement du fichier source Excellon annulé." -#: FlatCAMApp.py:8748 +#: FlatCAMApp.py:8756 msgid "No object selected. Please Select an Excellon object to export." msgstr "" "Aucun objet sélectionné. Veuillez sélectionner un objet Excellon à exporter." -#: FlatCAMApp.py:8762 FlatCAMApp.py:8766 +#: FlatCAMApp.py:8770 FlatCAMApp.py:8774 msgid "Export Excellon" msgstr "Exporter Excellon" -#: FlatCAMApp.py:8772 +#: FlatCAMApp.py:8780 msgid "Export Excellon cancelled." msgstr "Exporter Excellon annulé." -#: FlatCAMApp.py:8792 +#: FlatCAMApp.py:8800 msgid "No object selected. Please Select an Gerber object to export." msgstr "" "Aucun objet sélectionné. Veuillez sélectionner un objet Gerber à exporter." -#: FlatCAMApp.py:8806 FlatCAMApp.py:8810 +#: FlatCAMApp.py:8814 FlatCAMApp.py:8818 msgid "Export Gerber" msgstr "Export Gerber" -#: FlatCAMApp.py:8816 +#: FlatCAMApp.py:8824 msgid "Export Gerber cancelled." msgstr "Export Gerber annulé." -#: FlatCAMApp.py:8848 +#: FlatCAMApp.py:8856 msgid "Only Geometry objects can be used." msgstr "Seuls les objets de géométrie peuvent être utilisés." -#: FlatCAMApp.py:8862 FlatCAMApp.py:8866 +#: FlatCAMApp.py:8870 FlatCAMApp.py:8874 msgid "Export DXF" msgstr "Exportation DXF" -#: FlatCAMApp.py:8873 +#: FlatCAMApp.py:8881 msgid "Export DXF cancelled." msgstr "Exportation DXF annulée." -#: FlatCAMApp.py:8893 FlatCAMApp.py:8896 +#: FlatCAMApp.py:8901 FlatCAMApp.py:8904 msgid "Import SVG" msgstr "Importer SVG" -#: FlatCAMApp.py:8906 +#: FlatCAMApp.py:8914 msgid "Open SVG cancelled." msgstr "Ouvrir SVG annulé." -#: FlatCAMApp.py:8925 FlatCAMApp.py:8929 +#: FlatCAMApp.py:8933 FlatCAMApp.py:8937 msgid "Import DXF" msgstr "Importation DXF" -#: FlatCAMApp.py:8939 +#: FlatCAMApp.py:8947 msgid "Open DXF cancelled." msgstr "Ouvrir DXF annulé." -#: FlatCAMApp.py:8986 +#: FlatCAMApp.py:8994 msgid "Viewing the source code of the selected object." msgstr "Affichage du code source de l'objet sélectionné." -#: FlatCAMApp.py:8987 +#: FlatCAMApp.py:8995 msgid "Loading..." msgstr "Chargement..." -#: FlatCAMApp.py:8994 +#: FlatCAMApp.py:9002 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:9006 +#: FlatCAMApp.py:9014 msgid "Source Editor" msgstr "Éditeur de source" -#: FlatCAMApp.py:9021 FlatCAMApp.py:9028 +#: FlatCAMApp.py:9029 FlatCAMApp.py:9036 msgid "There is no selected object for which to see it's source file code." msgstr "" "Il n'y a pas d'objet sélectionné pour lequel voir son code de fichier source." -#: FlatCAMApp.py:9040 +#: FlatCAMApp.py:9048 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:9054 FlatCAMApp.py:10369 FlatCAMObj.py:5881 +#: FlatCAMApp.py:9062 FlatCAMApp.py:10377 FlatCAMObj.py:5880 #: flatcamTools/ToolSolderPaste.py:1304 msgid "Code Editor" msgstr "Éditeur de code" -#: FlatCAMApp.py:9072 +#: FlatCAMApp.py:9080 msgid "New TCL script file created in Code Editor." msgstr "Nouveau fichier de script TCL créé dans l'éditeur de code." -#: FlatCAMApp.py:9075 +#: FlatCAMApp.py:9083 msgid "Script Editor" msgstr "Éditeur de script" -#: FlatCAMApp.py:9078 +#: FlatCAMApp.py:9086 msgid "" "#\n" "# CREATE A NEW FLATCAM TCL SCRIPT\n" @@ -1081,100 +1081,100 @@ msgstr "" "#\n" "\n" -#: FlatCAMApp.py:9117 FlatCAMApp.py:9120 +#: FlatCAMApp.py:9125 FlatCAMApp.py:9128 msgid "Open TCL script" msgstr "Ouvrir le script TCL" -#: FlatCAMApp.py:9130 +#: FlatCAMApp.py:9138 msgid "Open TCL script cancelled." msgstr "Ouvrir le script TCL annulé." -#: FlatCAMApp.py:9152 +#: FlatCAMApp.py:9160 msgid "TCL script file opened in Code Editor." msgstr "Fichier de script TCL ouvert dans l'éditeur de code." -#: FlatCAMApp.py:9176 +#: FlatCAMApp.py:9184 msgid "Executing FlatCAMScript file." msgstr "Exécution du fichier FlatCAMScript." -#: FlatCAMApp.py:9183 FlatCAMApp.py:9186 +#: FlatCAMApp.py:9191 FlatCAMApp.py:9194 msgid "Run TCL script" msgstr "Exécuter le script TCL" -#: FlatCAMApp.py:9196 +#: FlatCAMApp.py:9204 msgid "Run TCL script cancelled." msgstr "Exécuter le script TCL annulé." -#: FlatCAMApp.py:9212 +#: FlatCAMApp.py:9220 msgid "TCL script file opened in Code Editor and executed." msgstr "Fichier de script TCL ouvert dans l'éditeur de code et exécuté." -#: FlatCAMApp.py:9263 FlatCAMApp.py:9267 +#: FlatCAMApp.py:9271 FlatCAMApp.py:9275 msgid "Save Project As ..." msgstr "Enregistrer le projet sous ..." -#: FlatCAMApp.py:9264 +#: FlatCAMApp.py:9272 #, python-brace-format msgid "{l_save}/Project_{date}" msgstr "{l_save}/Projet_{date}" -#: FlatCAMApp.py:9273 +#: FlatCAMApp.py:9281 msgid "Save Project cancelled." msgstr "Enregistrer le projet annulé." -#: FlatCAMApp.py:9321 +#: FlatCAMApp.py:9329 msgid "Exporting SVG" msgstr "Exporter du SVG" -#: FlatCAMApp.py:9363 FlatCAMApp.py:9474 FlatCAMApp.py:9600 +#: FlatCAMApp.py:9371 FlatCAMApp.py:9482 FlatCAMApp.py:9608 msgid "SVG file exported to" msgstr "Fichier SVG exporté vers" -#: FlatCAMApp.py:9398 FlatCAMApp.py:9523 flatcamTools/ToolPanelize.py:381 +#: FlatCAMApp.py:9406 FlatCAMApp.py:9531 flatcamTools/ToolPanelize.py:381 msgid "No object Box. Using instead" msgstr "Aucune Boîte d'objet. Utiliser à la place" -#: FlatCAMApp.py:9477 FlatCAMApp.py:9603 +#: FlatCAMApp.py:9485 FlatCAMApp.py:9611 msgid "Generating Film ... Please wait." msgstr "Génération de film ... Veuillez patienter." -#: FlatCAMApp.py:9776 +#: FlatCAMApp.py:9784 msgid "Excellon file exported to" msgstr "Fichier Excellon exporté vers" -#: FlatCAMApp.py:9785 +#: FlatCAMApp.py:9793 msgid "Exporting Excellon" msgstr "Exporter Excellon" -#: FlatCAMApp.py:9791 FlatCAMApp.py:9799 +#: FlatCAMApp.py:9799 FlatCAMApp.py:9807 msgid "Could not export Excellon file." msgstr "Impossible d'exporter le fichier Excellon." -#: FlatCAMApp.py:9915 +#: FlatCAMApp.py:9923 msgid "Gerber file exported to" msgstr "Fichier Gerber exporté vers" -#: FlatCAMApp.py:9923 +#: FlatCAMApp.py:9931 msgid "Exporting Gerber" msgstr "Exporter Gerber" -#: FlatCAMApp.py:9929 FlatCAMApp.py:9937 +#: FlatCAMApp.py:9937 FlatCAMApp.py:9945 msgid "Could not export Gerber file." msgstr "Impossible d'exporter le fichier Gerber." -#: FlatCAMApp.py:9982 +#: FlatCAMApp.py:9990 msgid "DXF file exported to" msgstr "Fichier DXF exporté vers" -#: FlatCAMApp.py:9988 +#: FlatCAMApp.py:9996 msgid "Exporting DXF" msgstr "Exportation DXF" -#: FlatCAMApp.py:9994 FlatCAMApp.py:10002 +#: FlatCAMApp.py:10002 FlatCAMApp.py:10010 msgid "Could not export DXF file." msgstr "Impossible d'exporter le fichier DXF." -#: FlatCAMApp.py:10023 FlatCAMApp.py:10067 FlatCAMApp.py:10113 +#: FlatCAMApp.py:10031 FlatCAMApp.py:10075 FlatCAMApp.py:10121 msgid "" "Not supported type is picked as parameter. Only Geometry and Gerber are " "supported" @@ -1182,85 +1182,85 @@ msgstr "" "Le type non pris en charge est sélectionné en tant que paramètre. Seuls " "Geometry et Gerber sont supportés" -#: FlatCAMApp.py:10033 +#: FlatCAMApp.py:10041 msgid "Importing SVG" msgstr "Importer du SVG" -#: FlatCAMApp.py:10045 FlatCAMApp.py:10089 FlatCAMApp.py:10134 -#: FlatCAMApp.py:10215 FlatCAMApp.py:10282 FlatCAMApp.py:10349 +#: FlatCAMApp.py:10053 FlatCAMApp.py:10097 FlatCAMApp.py:10142 +#: FlatCAMApp.py:10223 FlatCAMApp.py:10290 FlatCAMApp.py:10357 #: flatcamTools/ToolPDF.py:220 msgid "Opened" msgstr "Ouvert" -#: FlatCAMApp.py:10077 +#: FlatCAMApp.py:10085 msgid "Importing DXF" msgstr "Importation de DXF" -#: FlatCAMApp.py:10121 +#: FlatCAMApp.py:10129 msgid "Importing Image" msgstr "Importation d'Image" -#: FlatCAMApp.py:10164 +#: FlatCAMApp.py:10172 msgid "Failed to open file" msgstr "Échec de l'ouverture du fichier" -#: FlatCAMApp.py:10169 +#: FlatCAMApp.py:10177 msgid "Failed to parse file" msgstr "Échec de l'analyse du fichier" -#: FlatCAMApp.py:10176 FlatCAMApp.py:10250 FlatCAMObj.py:4589 +#: FlatCAMApp.py:10184 FlatCAMApp.py:10258 FlatCAMObj.py:4589 #: flatcamEditors/FlatCAMGrbEditor.py:3999 flatcamTools/ToolPcbWizard.py:437 msgid "An internal error has occurred. See shell.\n" msgstr "Une erreur interne s'est produite. Voir shell.\n" -#: FlatCAMApp.py:10186 +#: FlatCAMApp.py:10194 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:10194 +#: FlatCAMApp.py:10202 msgid "Opening Gerber" msgstr "Ouverture Gerber" -#: FlatCAMApp.py:10205 +#: FlatCAMApp.py:10213 msgid " Open Gerber failed. Probable not a Gerber file." msgstr " Open Gerber a échoué. Probablement pas un fichier Gerber." -#: FlatCAMApp.py:10240 flatcamTools/ToolPcbWizard.py:427 +#: FlatCAMApp.py:10248 flatcamTools/ToolPcbWizard.py:427 msgid "This is not Excellon file." msgstr "Ce n'est pas un fichier Excellon." -#: FlatCAMApp.py:10244 +#: FlatCAMApp.py:10252 msgid "Cannot open file" msgstr "Ne peut pas ouvrir le fichier" -#: FlatCAMApp.py:10264 flatcamTools/ToolPDF.py:270 +#: FlatCAMApp.py:10272 flatcamTools/ToolPDF.py:270 #: flatcamTools/ToolPcbWizard.py:451 msgid "No geometry found in file" msgstr "Aucune géométrie trouvée dans le fichier" -#: FlatCAMApp.py:10267 +#: FlatCAMApp.py:10275 msgid "Opening Excellon." msgstr "Ouverture Excellon." -#: FlatCAMApp.py:10274 +#: FlatCAMApp.py:10282 msgid "Open Excellon file failed. Probable not an Excellon file." msgstr "" "Le fichier Open Excellon a échoué. Probablement pas un fichier Excellon." -#: FlatCAMApp.py:10313 +#: FlatCAMApp.py:10321 msgid "Failed to open" msgstr "Impossible d'ouvrir" -#: FlatCAMApp.py:10324 +#: FlatCAMApp.py:10332 msgid "This is not GCODE" msgstr "Ce n'est pas GCODE" -#: FlatCAMApp.py:10330 +#: FlatCAMApp.py:10338 msgid "Opening G-Code." msgstr "Ouverture G-Code." -#: FlatCAMApp.py:10339 +#: FlatCAMApp.py:10347 msgid "" "Failed to create CNCJob Object. Probable not a GCode file.\n" " Attempting to create a FlatCAM CNCJob Object from G-Code file failed during " @@ -1270,43 +1270,43 @@ msgstr "" "La tentative de création d'un objet FlatCAM CNCJob à partir d'un fichier G-" "Code a échoué pendant le traitement." -#: FlatCAMApp.py:10365 +#: FlatCAMApp.py:10373 msgid "Opening FlatCAM Config file." msgstr "Ouverture du fichier FlatCAM Config." -#: FlatCAMApp.py:10387 +#: FlatCAMApp.py:10395 msgid "Failed to open config file" msgstr "Impossible d'ouvrir le fichier de configuration" -#: FlatCAMApp.py:10413 +#: FlatCAMApp.py:10421 msgid "Loading Project ... Please Wait ..." msgstr "Chargement du projet ... Veuillez patienter ..." -#: FlatCAMApp.py:10418 +#: FlatCAMApp.py:10426 msgid "Opening FlatCAM Project file." msgstr "Ouverture du fichier de projet FlatCAM." -#: FlatCAMApp.py:10428 FlatCAMApp.py:10446 +#: FlatCAMApp.py:10436 FlatCAMApp.py:10454 msgid "Failed to open project file" msgstr "Impossible d'ouvrir le fichier de projet" -#: FlatCAMApp.py:10480 +#: FlatCAMApp.py:10488 msgid "Loading Project ... restoring" msgstr "Chargement du projet ... en cours de restauration" -#: FlatCAMApp.py:10489 +#: FlatCAMApp.py:10497 msgid "Project loaded from" msgstr "Projet chargé à partir de" -#: FlatCAMApp.py:10552 +#: FlatCAMApp.py:10560 msgid "Redrawing all objects" msgstr "Redessiner tous les objets" -#: FlatCAMApp.py:10584 +#: FlatCAMApp.py:10592 msgid "Available commands:\n" msgstr "Commandes disponibles:\n" -#: FlatCAMApp.py:10586 +#: FlatCAMApp.py:10594 msgid "" "\n" "\n" @@ -1318,47 +1318,47 @@ msgstr "" "Tapez help pour l'utiliser.\n" " Exemple: help open_gerber" -#: FlatCAMApp.py:10736 +#: FlatCAMApp.py:10744 msgid "Shows list of commands." msgstr "Affiche la liste des commandes." -#: FlatCAMApp.py:10794 +#: FlatCAMApp.py:10802 msgid "Failed to load recent item list." msgstr "Échec du chargement de la liste des éléments récents." -#: FlatCAMApp.py:10802 +#: FlatCAMApp.py:10810 msgid "Failed to parse recent item list." msgstr "Échec de l'analyse de la liste des éléments récents." -#: FlatCAMApp.py:10813 +#: FlatCAMApp.py:10821 msgid "Failed to load recent projects item list." msgstr "Échec du chargement de la liste d'éléments des projets récents." -#: FlatCAMApp.py:10821 +#: FlatCAMApp.py:10829 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:10880 FlatCAMApp.py:10903 +#: FlatCAMApp.py:10888 FlatCAMApp.py:10911 msgid "Clear Recent files" msgstr "Effacer les fichiers récents" -#: FlatCAMApp.py:10920 flatcamGUI/FlatCAMGUI.py:1019 +#: FlatCAMApp.py:10928 flatcamGUI/FlatCAMGUI.py:1019 msgid "Shortcut Key List" msgstr "Liste des touches de raccourci" -#: FlatCAMApp.py:10994 +#: FlatCAMApp.py:11002 msgid "Selected Tab - Choose an Item from Project Tab" msgstr "Onglet sélectionné - Choisissez un élément dans l'onglet Projet" -#: FlatCAMApp.py:10995 +#: FlatCAMApp.py:11003 msgid "Details" msgstr "Détails" -#: FlatCAMApp.py:10997 +#: FlatCAMApp.py:11005 msgid "The normal flow when working in FlatCAM is the following:" msgstr "Le flux normal lorsque vous travaillez dans FlatCAM est le suivant:" -#: FlatCAMApp.py:10998 +#: FlatCAMApp.py:11006 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 " @@ -1368,7 +1368,7 @@ msgstr "" "SVG dans FlatCAM à l'aide des barres d'outils, des raccourcis clavier ou " "même en glissant-déposant les fichiers sur l'interface graphique." -#: FlatCAMApp.py:11001 +#: FlatCAMApp.py:11009 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 " @@ -1379,7 +1379,7 @@ msgstr "" "FLATCAM ou par le biais du menu (ou de la barre d’outils) proposé dans " "l’application." -#: FlatCAMApp.py:11004 +#: FlatCAMApp.py:11012 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 " @@ -1392,7 +1392,7 @@ msgstr "" "TAB sera mis à jour avec les propriétés de l'objet en fonction de son type: " "Gerber, Excellon, géométrie ou objet CNCJob." -#: FlatCAMApp.py:11008 +#: FlatCAMApp.py:11016 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 " @@ -1406,7 +1406,7 @@ msgstr "" "l'objet sur la toile pour amener l'onglet sélectionné et le renseigner même " "s'il n'était pas net." -#: FlatCAMApp.py:11012 +#: FlatCAMApp.py:11020 msgid "" "You can change the parameters in this screen and the flow direction is like " "this:" @@ -1414,7 +1414,7 @@ msgstr "" "Vous pouvez modifier les paramètres dans cet écran et le sens du flux est le " "suivant:" -#: FlatCAMApp.py:11013 +#: FlatCAMApp.py:11021 msgid "" "Gerber/Excellon Object --> Change Parameter --> Generate Geometry --> " "Geometry Object --> Add tools (change param in Selected Tab) --> Generate " @@ -1427,7 +1427,7 @@ msgstr "" "Vérifier le GCode (via Edition CNC Code) et / ou ajouter / ajouter au code " "GCode (à nouveau dans l’onglet SÉLECTIONNÉ) -> Enregistrer le code GC." -#: FlatCAMApp.py:11017 +#: FlatCAMApp.py:11025 msgid "" "A list of key shortcuts is available through an menu entry in Help --> " "Shortcuts List or through its own key shortcut: F3." @@ -1435,24 +1435,24 @@ msgstr "" "Une liste des raccourcis clavier est disponible via une entrée de menu dans " "Aide -> Liste des raccourcis ou via son propre raccourci clavier: F3." -#: FlatCAMApp.py:11078 +#: FlatCAMApp.py:11086 msgid "Failed checking for latest version. Could not connect." msgstr "" "Échec de la vérification de la dernière version. N'a pas pu se connecter." -#: FlatCAMApp.py:11086 +#: FlatCAMApp.py:11094 msgid "Could not parse information about latest version." msgstr "Impossible d'analyser les informations sur la dernière version." -#: FlatCAMApp.py:11097 +#: FlatCAMApp.py:11105 msgid "FlatCAM is up to date!" msgstr "FlatCAM est à jour!" -#: FlatCAMApp.py:11102 +#: FlatCAMApp.py:11110 msgid "Newer Version Available" msgstr "Nouvelle version disponible" -#: FlatCAMApp.py:11103 +#: FlatCAMApp.py:11111 msgid "" "There is a newer version of FlatCAM available for download:\n" "\n" @@ -1460,63 +1460,63 @@ msgstr "" "Une version plus récente de FlatCAM est disponible au téléchargement:\n" "\n" -#: FlatCAMApp.py:11105 +#: FlatCAMApp.py:11113 msgid "info" msgstr "info" -#: FlatCAMApp.py:11180 +#: FlatCAMApp.py:11189 msgid "All plots disabled." msgstr "Toutes les parcelles désactivées." -#: FlatCAMApp.py:11187 +#: FlatCAMApp.py:11196 msgid "All non selected plots disabled." msgstr "Toutes les parcelles non sélectionnées sont désactivées." -#: FlatCAMApp.py:11194 +#: FlatCAMApp.py:11203 msgid "All plots enabled." msgstr "Toutes les parcelles activées." -#: FlatCAMApp.py:11201 +#: FlatCAMApp.py:11210 msgid "Selected plots enabled..." msgstr "Parcelles sélectionnées activées ..." -#: FlatCAMApp.py:11210 +#: FlatCAMApp.py:11219 msgid "Selected plots disabled..." msgstr "Parcelles sélectionnées désactivées ..." -#: FlatCAMApp.py:11228 +#: FlatCAMApp.py:11237 msgid "Enabling plots ..." msgstr "Activation des parcelles ..." -#: FlatCAMApp.py:11267 +#: FlatCAMApp.py:11276 msgid "Disabling plots ..." msgstr "Désactiver les parcelles ..." -#: FlatCAMApp.py:11289 +#: FlatCAMApp.py:11298 msgid "Working ..." msgstr "Travail ..." -#: FlatCAMApp.py:11328 +#: FlatCAMApp.py:11337 msgid "Saving FlatCAM Project" msgstr "Enregistrement du projet FlatCAM" -#: FlatCAMApp.py:11350 FlatCAMApp.py:11388 +#: FlatCAMApp.py:11359 FlatCAMApp.py:11397 msgid "Project saved to" msgstr "Projet enregistré dans" -#: FlatCAMApp.py:11370 +#: FlatCAMApp.py:11379 msgid "Failed to verify project file" msgstr "Échec de la vérification du fichier de projet" -#: FlatCAMApp.py:11370 FlatCAMApp.py:11379 FlatCAMApp.py:11391 +#: FlatCAMApp.py:11379 FlatCAMApp.py:11388 FlatCAMApp.py:11400 msgid "Retry to save it." msgstr "Réessayez de le sauvegarder." -#: FlatCAMApp.py:11379 FlatCAMApp.py:11391 +#: FlatCAMApp.py:11388 FlatCAMApp.py:11400 msgid "Failed to parse saved project file" msgstr "Échec de l'analyse du fichier de projet enregistré" -#: FlatCAMApp.py:11602 +#: FlatCAMApp.py:11611 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." @@ -1840,62 +1840,62 @@ msgstr "" "y)\n" "mais maintenant il n'y a qu'une seule valeur, pas deux." -#: FlatCAMObj.py:5766 +#: FlatCAMObj.py:5765 msgid "Basic" msgstr "De base" -#: FlatCAMObj.py:5772 +#: FlatCAMObj.py:5771 msgid "Advanced" msgstr "Avancé" -#: FlatCAMObj.py:5815 +#: FlatCAMObj.py:5814 msgid "Plotting..." msgstr "Traçage..." -#: FlatCAMObj.py:5839 FlatCAMObj.py:5844 flatcamTools/ToolSolderPaste.py:1393 +#: FlatCAMObj.py:5838 FlatCAMObj.py:5843 flatcamTools/ToolSolderPaste.py:1393 msgid "Export Machine Code ..." msgstr "Exporter le code machine ..." -#: FlatCAMObj.py:5850 flatcamTools/ToolSolderPaste.py:1397 +#: FlatCAMObj.py:5849 flatcamTools/ToolSolderPaste.py:1397 msgid "Export Machine Code cancelled ..." msgstr "Exporter le code machine annulé ..." -#: FlatCAMObj.py:5868 +#: FlatCAMObj.py:5867 msgid "Machine Code file saved to" msgstr "Fichier de code machine enregistré dans" -#: FlatCAMObj.py:5901 +#: FlatCAMObj.py:5900 msgid "Loaded Machine Code into Code Editor" msgstr "Code machine chargé dans l'éditeur de code" -#: FlatCAMObj.py:6013 +#: FlatCAMObj.py:6012 msgid "This CNCJob object can't be processed because it is a" msgstr "Cet objet CNCJob ne peut pas être traité car il est" -#: FlatCAMObj.py:6015 +#: FlatCAMObj.py:6014 msgid "CNCJob object" msgstr "Objet CNCJob" -#: FlatCAMObj.py:6067 +#: FlatCAMObj.py:6066 msgid "G-code does not have a units code: either G20 or G21" msgstr "G-code n'a pas de code d'unités: G20 ou G21" -#: FlatCAMObj.py:6079 +#: FlatCAMObj.py:6078 msgid "Cancelled. The Toolchange Custom code is enabled but it's empty." msgstr "Annulé. Le code personnalisé Toolchange est activé mais vide." -#: FlatCAMObj.py:6085 +#: FlatCAMObj.py:6084 msgid "Toolchange G-code was replaced by a custom code." msgstr "Toolchange G-code a été remplacé par un code personnalisé." -#: FlatCAMObj.py:6122 FlatCAMObj.py:6132 +#: FlatCAMObj.py:6121 FlatCAMObj.py:6131 msgid "" "The used postprocessor file has to have in it's name: 'toolchange_custom'" msgstr "" "Le fichier de post-traitement utilisé doit avoir pour nom: " "'toolchange_custom'" -#: FlatCAMObj.py:6136 +#: FlatCAMObj.py:6135 msgid "There is no postprocessor file." msgstr "Il n'y a pas de fichier de post-processeur." @@ -1920,7 +1920,7 @@ msgstr "Appliquer la langue ..." msgid "Object renamed from {old} to {new}" msgstr "Objet renommé de {old} à {new}" -#: ObjectCollection.py:766 +#: ObjectCollection.py:769 msgid "Cause of error" msgstr "Cause d'erreur" @@ -3400,50 +3400,51 @@ msgstr "" #: flatcamEditors/FlatCAMGeoEditor.py:1429 #: flatcamEditors/FlatCAMGrbEditor.py:5789 flatcamTools/ToolTransform.py:824 msgid "Applying Scale" -msgstr "" +msgstr "Échelle d'application" #: flatcamEditors/FlatCAMGeoEditor.py:1464 #: flatcamEditors/FlatCAMGrbEditor.py:5829 msgid "Scale on the X axis done" -msgstr "" +msgstr "Échelle terminée sur l'axe X" #: flatcamEditors/FlatCAMGeoEditor.py:1467 #: flatcamEditors/FlatCAMGrbEditor.py:5832 msgid "Scale on the Y axis done" -msgstr "" +msgstr "Echelle terminée sur l'axe des Y" #: flatcamEditors/FlatCAMGeoEditor.py:1471 msgid "Scale action was not executed" -msgstr "" +msgstr "L'action d'échelle n'a pas été exécutée" #: flatcamEditors/FlatCAMGeoEditor.py:1481 #: flatcamEditors/FlatCAMGrbEditor.py:5850 msgid "No shape selected. Please Select a shape to offset!" msgstr "" +"Aucune forme sélectionnée. Veuillez sélectionner une forme à compenser!" #: flatcamEditors/FlatCAMGeoEditor.py:1484 #: flatcamEditors/FlatCAMGrbEditor.py:5853 flatcamTools/ToolTransform.py:879 msgid "Applying Offset" -msgstr "" +msgstr "Appliquer un Décalage" #: flatcamEditors/FlatCAMGeoEditor.py:1497 #: flatcamEditors/FlatCAMGrbEditor.py:5877 msgid "Offset on the X axis done" -msgstr "" +msgstr "Décalage sur l'axe X terminé" #: flatcamEditors/FlatCAMGeoEditor.py:1500 #: flatcamEditors/FlatCAMGrbEditor.py:5880 msgid "Offset on the Y axis done" -msgstr "" +msgstr "Décalage sur l'axe Y terminé" #: flatcamEditors/FlatCAMGeoEditor.py:1505 msgid "Offset action was not executed" -msgstr "" +msgstr "L'action offset n'a pas été exécutée" #: flatcamEditors/FlatCAMGeoEditor.py:1509 #: flatcamEditors/FlatCAMGrbEditor.py:5889 msgid "Rotate ..." -msgstr "" +msgstr "Tourner ..." #: flatcamEditors/FlatCAMGeoEditor.py:1510 #: flatcamEditors/FlatCAMGeoEditor.py:1565 @@ -3452,297 +3453,304 @@ msgstr "" #: flatcamEditors/FlatCAMGrbEditor.py:5945 #: flatcamEditors/FlatCAMGrbEditor.py:5962 msgid "Enter an Angle Value (degrees)" -msgstr "" +msgstr "Entrer une valeur d'angle (degrés)" #: flatcamEditors/FlatCAMGeoEditor.py:1519 #: flatcamEditors/FlatCAMGrbEditor.py:5899 msgid "Geometry shape rotate done" -msgstr "" +msgstr "Rotation de la forme géométrique effectuée" #: flatcamEditors/FlatCAMGeoEditor.py:1523 #: flatcamEditors/FlatCAMGrbEditor.py:5903 msgid "Geometry shape rotate cancelled" -msgstr "" +msgstr "Rotation de la forme géométrique annulée" #: flatcamEditors/FlatCAMGeoEditor.py:1528 #: flatcamEditors/FlatCAMGrbEditor.py:5908 msgid "Offset on X axis ..." -msgstr "" +msgstr "Décalage sur l'axe des X ..." #: flatcamEditors/FlatCAMGeoEditor.py:1529 #: flatcamEditors/FlatCAMGeoEditor.py:1548 #: flatcamEditors/FlatCAMGrbEditor.py:5909 #: flatcamEditors/FlatCAMGrbEditor.py:5928 msgid "Enter a distance Value" -msgstr "" +msgstr "Entrez une valeur de distance" #: flatcamEditors/FlatCAMGeoEditor.py:1538 #: flatcamEditors/FlatCAMGrbEditor.py:5918 msgid "Geometry shape offset on X axis done" -msgstr "" +msgstr "Géométrie décalée sur l'axe des X effectuée" #: flatcamEditors/FlatCAMGeoEditor.py:1542 #: flatcamEditors/FlatCAMGrbEditor.py:5922 msgid "Geometry shape offset X cancelled" -msgstr "" +msgstr "Décalage géométrique X annulé" #: flatcamEditors/FlatCAMGeoEditor.py:1547 #: flatcamEditors/FlatCAMGrbEditor.py:5927 msgid "Offset on Y axis ..." -msgstr "" +msgstr "Décalage sur l'axe Y ..." #: flatcamEditors/FlatCAMGeoEditor.py:1557 #: flatcamEditors/FlatCAMGrbEditor.py:5937 msgid "Geometry shape offset on Y axis done" -msgstr "" +msgstr "Géométrie décalée sur l'axe des Y effectuée" #: flatcamEditors/FlatCAMGeoEditor.py:1561 msgid "Geometry shape offset on Y axis canceled" -msgstr "" +msgstr "Décalage de la forme de la géométrie sur l'axe des Y" #: flatcamEditors/FlatCAMGeoEditor.py:1564 #: flatcamEditors/FlatCAMGrbEditor.py:5944 msgid "Skew on X axis ..." -msgstr "" +msgstr "Skew on X axis ..." #: flatcamEditors/FlatCAMGeoEditor.py:1574 #: flatcamEditors/FlatCAMGrbEditor.py:5954 msgid "Geometry shape skew on X axis done" -msgstr "" +msgstr "Forme de la géométrie inclinée sur l'axe X terminée" #: flatcamEditors/FlatCAMGeoEditor.py:1578 msgid "Geometry shape skew on X axis canceled" -msgstr "" +msgstr "Géométrie inclinée sur l'axe X annulée" #: flatcamEditors/FlatCAMGeoEditor.py:1581 #: flatcamEditors/FlatCAMGrbEditor.py:5961 msgid "Skew on Y axis ..." -msgstr "" +msgstr "Inclinez sur l'axe Y ..." #: flatcamEditors/FlatCAMGeoEditor.py:1591 #: flatcamEditors/FlatCAMGrbEditor.py:5971 msgid "Geometry shape skew on Y axis done" -msgstr "" +msgstr "Géométrie inclinée sur l'axe des Y" #: flatcamEditors/FlatCAMGeoEditor.py:1595 msgid "Geometry shape skew on Y axis canceled" -msgstr "" +msgstr "Géométrie inclinée sur l'axe des Y oblitérée" #: flatcamEditors/FlatCAMGeoEditor.py:1959 #: flatcamEditors/FlatCAMGeoEditor.py:2011 #: flatcamEditors/FlatCAMGrbEditor.py:1396 #: flatcamEditors/FlatCAMGrbEditor.py:1466 msgid "Click on Center point ..." -msgstr "" +msgstr "Cliquez sur Point central ..." #: flatcamEditors/FlatCAMGeoEditor.py:1966 #: flatcamEditors/FlatCAMGrbEditor.py:1404 msgid "Click on Perimeter point to complete ..." -msgstr "" +msgstr "Cliquez sur le point du périmètre pour terminer ..." #: flatcamEditors/FlatCAMGeoEditor.py:1996 msgid "Done. Adding Circle completed." -msgstr "" +msgstr "Terminé. Ajout du cercle terminé." #: flatcamEditors/FlatCAMGeoEditor.py:2031 #: flatcamEditors/FlatCAMGrbEditor.py:1498 msgid "Click on Start point ..." -msgstr "" +msgstr "Cliquez sur le point de départ ..." #: flatcamEditors/FlatCAMGeoEditor.py:2033 #: flatcamEditors/FlatCAMGrbEditor.py:1500 msgid "Click on Point3 ..." -msgstr "" +msgstr "Cliquez sur le point 3 ..." #: flatcamEditors/FlatCAMGeoEditor.py:2035 #: flatcamEditors/FlatCAMGrbEditor.py:1502 msgid "Click on Stop point ..." -msgstr "" +msgstr "Cliquez sur le point d'arrêt ..." #: flatcamEditors/FlatCAMGeoEditor.py:2040 #: flatcamEditors/FlatCAMGrbEditor.py:1507 msgid "Click on Stop point to complete ..." -msgstr "" +msgstr "Cliquez sur le point d'arrêt pour terminer ..." #: flatcamEditors/FlatCAMGeoEditor.py:2042 #: flatcamEditors/FlatCAMGrbEditor.py:1509 msgid "Click on Point2 to complete ..." -msgstr "" +msgstr "Cliquez sur le point 2 pour compléter ..." #: flatcamEditors/FlatCAMGeoEditor.py:2044 #: flatcamEditors/FlatCAMGrbEditor.py:1511 msgid "Click on Center point to complete ..." -msgstr "" +msgstr "Cliquez sur le point central pour terminer ..." #: flatcamEditors/FlatCAMGeoEditor.py:2056 #, python-format msgid "Direction: %s" -msgstr "" +msgstr "Direction: %s" #: flatcamEditors/FlatCAMGeoEditor.py:2066 #: flatcamEditors/FlatCAMGrbEditor.py:1533 msgid "Mode: Start -> Stop -> Center. Click on Start point ..." msgstr "" +"Mode: Démarrer -> Arrêter -> Centre. Cliquez sur le point de départ ..." #: flatcamEditors/FlatCAMGeoEditor.py:2069 #: flatcamEditors/FlatCAMGrbEditor.py:1536 msgid "Mode: Point1 -> Point3 -> Point2. Click on Point1 ..." -msgstr "" +msgstr "Mode: Point 1 -> Point 3 -> Point 2. Cliquez sur Point 1 ..." #: flatcamEditors/FlatCAMGeoEditor.py:2072 #: flatcamEditors/FlatCAMGrbEditor.py:1539 msgid "Mode: Center -> Start -> Stop. Click on Center point ..." -msgstr "" +msgstr "Mode: Centre -> Démarrer -> Arrêter. Cliquez sur Point central ..." #: flatcamEditors/FlatCAMGeoEditor.py:2211 msgid "Done. Arc completed." -msgstr "" +msgstr "Terminé. Arc terminé." #: flatcamEditors/FlatCAMGeoEditor.py:2230 #: flatcamEditors/FlatCAMGeoEditor.py:2284 #: flatcamEditors/FlatCAMGeoEditor.py:2657 msgid "Click on 1st corner ..." -msgstr "" +msgstr "Cliquez sur le 1er coin ..." #: flatcamEditors/FlatCAMGeoEditor.py:2236 msgid "Click on opposite corner to complete ..." -msgstr "" +msgstr "Cliquez sur le coin opposé pour terminer ..." #: flatcamEditors/FlatCAMGeoEditor.py:2265 msgid "Done. Rectangle completed." -msgstr "" +msgstr "Terminé. Rectangle complété." #: flatcamEditors/FlatCAMGeoEditor.py:2291 msgid "Click on next Point or click right mouse button to complete ..." msgstr "" +"Cliquez sur le point suivant ou cliquez avec le bouton droit de la souris " +"pour terminer ..." #: flatcamEditors/FlatCAMGeoEditor.py:2320 msgid "Done. Polygon completed." -msgstr "" +msgstr "Terminé. Le polygone est terminé." #: flatcamEditors/FlatCAMGeoEditor.py:2330 #: flatcamEditors/FlatCAMGeoEditor.py:2376 #: flatcamEditors/FlatCAMGrbEditor.py:1085 #: flatcamEditors/FlatCAMGrbEditor.py:1287 msgid "Backtracked one point ..." -msgstr "" +msgstr "Retracé un point ..." #: flatcamEditors/FlatCAMGeoEditor.py:2358 msgid "Done. Path completed." -msgstr "" +msgstr "Terminé. Chemin complété." #: flatcamEditors/FlatCAMGeoEditor.py:2476 msgid "MOVE: No shape selected. Select a shape to move" -msgstr "" +msgstr "Déplacer: Aucune forme sélectionnée. Sélectionnez une forme à déplacer" #: flatcamEditors/FlatCAMGeoEditor.py:2478 #: flatcamEditors/FlatCAMGeoEditor.py:2490 msgid " MOVE: Click on reference point ..." -msgstr "" +msgstr "Déplacer: Cliquez sur le point de référence ..." #: flatcamEditors/FlatCAMGeoEditor.py:2481 msgid " Click on destination point ..." -msgstr "" +msgstr "Cliquez sur le point de destination ..." #: flatcamEditors/FlatCAMGeoEditor.py:2516 msgid "Done. Geometry(s) Move completed." -msgstr "" +msgstr "Terminé. Géométrie (s) Déplacement terminé." #: flatcamEditors/FlatCAMGeoEditor.py:2637 msgid "Done. Geometry(s) Copy completed." -msgstr "" +msgstr "Terminé. Géométrie (s) Copie terminée." #: flatcamEditors/FlatCAMGeoEditor.py:2674 msgid "" "Font not supported. Only Regular, Bold, Italic and BoldItalic are supported. " "Error" msgstr "" +"Police non supportée. Seuls les formats Normal, Gras, Italique et " +"GrasItalique sont pris en charge. Erreur" #: flatcamEditors/FlatCAMGeoEditor.py:2682 msgid "No text to add." -msgstr "" +msgstr "Pas de texte à ajouter." #: flatcamEditors/FlatCAMGeoEditor.py:2689 msgid " Done. Adding Text completed." -msgstr "" +msgstr " Terminé. Ajout de texte terminé." #: flatcamEditors/FlatCAMGeoEditor.py:2717 msgid "Create buffer geometry ..." -msgstr "" +msgstr "Créer une géométrie tampon ..." #: flatcamEditors/FlatCAMGeoEditor.py:2729 #: flatcamEditors/FlatCAMGeoEditor.py:2759 #: flatcamEditors/FlatCAMGeoEditor.py:2789 msgid "Buffer cancelled. No shape selected." -msgstr "" +msgstr "Tampon annulé. Aucune forme sélectionnée." #: flatcamEditors/FlatCAMGeoEditor.py:2754 #: flatcamEditors/FlatCAMGrbEditor.py:4752 msgid "Done. Buffer Tool completed." -msgstr "" +msgstr "Terminé. L'outil Tampon est terminé." #: flatcamEditors/FlatCAMGeoEditor.py:2784 msgid "Done. Buffer Int Tool completed." -msgstr "" +msgstr "Terminé. L'outil Intérieur du Tampon est terminé." #: flatcamEditors/FlatCAMGeoEditor.py:2814 msgid "Done. Buffer Ext Tool completed." -msgstr "" +msgstr "Terminé. L'outil Extérieur du Tampon est terminé." #: flatcamEditors/FlatCAMGeoEditor.py:2849 #: flatcamEditors/FlatCAMGrbEditor.py:2068 msgid "Select a shape to act as deletion area ..." -msgstr "" +msgstr "Sélectionnez une forme pour agir comme zone de suppression ..." #: flatcamEditors/FlatCAMGeoEditor.py:2851 #: flatcamEditors/FlatCAMGeoEditor.py:2870 #: flatcamEditors/FlatCAMGeoEditor.py:2876 #: flatcamEditors/FlatCAMGrbEditor.py:2070 msgid "Click to pick-up the erase shape..." -msgstr "" +msgstr "Cliquez pour récupérer la forme à effacer ..." #: flatcamEditors/FlatCAMGeoEditor.py:2880 #: flatcamEditors/FlatCAMGrbEditor.py:2127 msgid "Click to erase ..." -msgstr "" +msgstr "Cliquez pour effacer ..." #: flatcamEditors/FlatCAMGeoEditor.py:2910 #: flatcamEditors/FlatCAMGrbEditor.py:2161 msgid "Done. Eraser tool action completed." -msgstr "" +msgstr "Terminé. Action de l’outil gomme terminée." #: flatcamEditors/FlatCAMGeoEditor.py:2953 msgid "Create Paint geometry ..." -msgstr "" +msgstr "Créer une géométrie de peinture ..." #: flatcamEditors/FlatCAMGeoEditor.py:2967 #: flatcamEditors/FlatCAMGrbEditor.py:2312 msgid "Shape transformations ..." -msgstr "" +msgstr "Transformations de forme ..." #: flatcamEditors/FlatCAMGeoEditor.py:3570 msgid "Editing MultiGeo Geometry, tool" -msgstr "" +msgstr "Modification de la géométrie MultiGeo, outil" #: flatcamEditors/FlatCAMGeoEditor.py:3572 msgid "with diameter" -msgstr "" +msgstr "avec diamètre" #: flatcamEditors/FlatCAMGeoEditor.py:3965 msgid "Copy cancelled. No shape selected." -msgstr "" +msgstr "Copie annulée. Aucune forme sélectionnée." #: flatcamEditors/FlatCAMGeoEditor.py:3972 flatcamGUI/FlatCAMGUI.py:3011 #: flatcamGUI/FlatCAMGUI.py:3058 flatcamGUI/FlatCAMGUI.py:3077 #: flatcamGUI/FlatCAMGUI.py:3209 flatcamGUI/FlatCAMGUI.py:3222 #: flatcamGUI/FlatCAMGUI.py:3256 flatcamGUI/FlatCAMGUI.py:3318 msgid "Click on target point." -msgstr "" +msgstr "Cliquez sur le point cible." #: flatcamEditors/FlatCAMGeoEditor.py:4215 #: flatcamEditors/FlatCAMGeoEditor.py:4250 msgid "A selection of at least 2 geo items is required to do Intersection." msgstr "" +"Une sélection d'au moins 2 éléments géographiques est requise pour effectuer " +"Intersection." #: flatcamEditors/FlatCAMGeoEditor.py:4336 #: flatcamEditors/FlatCAMGeoEditor.py:4445 @@ -3750,255 +3758,273 @@ msgid "" "Negative buffer value is not accepted. Use Buffer interior to generate an " "'inside' shape" msgstr "" +"La valeur de tampon négative n'est pas acceptée. Utiliser l'intérieur du " +"tampon pour générer une forme «intérieure»" #: flatcamEditors/FlatCAMGeoEditor.py:4346 #: flatcamEditors/FlatCAMGeoEditor.py:4402 #: flatcamEditors/FlatCAMGeoEditor.py:4454 msgid "Nothing selected for buffering." -msgstr "" +msgstr "Aucune sélection pour la mise en mémoire tampon." #: flatcamEditors/FlatCAMGeoEditor.py:4351 #: flatcamEditors/FlatCAMGeoEditor.py:4407 #: flatcamEditors/FlatCAMGeoEditor.py:4459 msgid "Invalid distance for buffering." -msgstr "" +msgstr "Distance non valide pour la mise en mémoire tampon." #: flatcamEditors/FlatCAMGeoEditor.py:4375 #: flatcamEditors/FlatCAMGeoEditor.py:4479 msgid "Failed, the result is empty. Choose a different buffer value." msgstr "" +"Echec, le résultat est vide. Choisissez une valeur de tampon différente." #: flatcamEditors/FlatCAMGeoEditor.py:4386 msgid "Full buffer geometry created." -msgstr "" +msgstr "Géométrie de tampon complète créée." #: flatcamEditors/FlatCAMGeoEditor.py:4393 msgid "Negative buffer value is not accepted." -msgstr "" +msgstr "La valeur de tampon négative n'est pas acceptée." #: flatcamEditors/FlatCAMGeoEditor.py:4427 msgid "Failed, the result is empty. Choose a smaller buffer value." msgstr "" +"Echec, le résultat est vide. Choisissez une valeur de tampon plus petite." #: flatcamEditors/FlatCAMGeoEditor.py:4438 msgid "Interior buffer geometry created." -msgstr "" +msgstr "Géométrie du tampon intérieur créée." #: flatcamEditors/FlatCAMGeoEditor.py:4490 msgid "Exterior buffer geometry created." -msgstr "" +msgstr "Géométrie tampon externe créée." #: flatcamEditors/FlatCAMGeoEditor.py:4555 msgid "Nothing selected for painting." -msgstr "" +msgstr "Rien de sélectionné pour la peinture." #: flatcamEditors/FlatCAMGeoEditor.py:4562 msgid "Invalid value for" -msgstr "" +msgstr "Invalid value for" #: flatcamEditors/FlatCAMGeoEditor.py:4568 #, python-format msgid "Could not do Paint. Overlap value has to be less than 1.00 (100%%)." msgstr "" +"Impossible de faire de la peinture. La valeur de chevauchement doit être " +"inférieure à 1,00 (100%%)." #: flatcamEditors/FlatCAMGeoEditor.py:4627 msgid "" "Could not do Paint. Try a different combination of parameters. Or a " "different method of Paint" msgstr "" +"Impossible de faire de la peinture. Essayez une combinaison de paramètres " +"différente. Ou une autre méthode de peinture" #: flatcamEditors/FlatCAMGeoEditor.py:4641 msgid "Paint done." -msgstr "" +msgstr "Peinture faite." #: flatcamEditors/FlatCAMGrbEditor.py:208 msgid "To add an Pad first select a aperture in Aperture Table" msgstr "" +"Pour ajouter un Pad, sélectionnez d’abord une ouverture dans le tableau des " +"ouvertures." #: flatcamEditors/FlatCAMGrbEditor.py:215 #: flatcamEditors/FlatCAMGrbEditor.py:409 msgid "Aperture size is zero. It needs to be greater than zero." -msgstr "" +msgstr "La taille de l'ouverture est zéro. Il doit être supérieur à zéro." #: flatcamEditors/FlatCAMGrbEditor.py:366 #: flatcamEditors/FlatCAMGrbEditor.py:674 msgid "" "Incompatible aperture type. Select an aperture with type 'C', 'R' or 'O'." msgstr "" +"Type d'ouverture incompatible. Sélectionnez une ouverture de type \"C\", \"R" +"\" ou \"O\"." #: flatcamEditors/FlatCAMGrbEditor.py:379 msgid "Done. Adding Pad completed." -msgstr "" +msgstr "Terminé. Ajout du pad terminé." #: flatcamEditors/FlatCAMGrbEditor.py:401 msgid "To add an Pad Array first select a aperture in Aperture Table" msgstr "" +"Pour ajouter un Tableau de pads, sélectionnez d’abord une ouverture dans le " +"tableau des ouvertures." #: flatcamEditors/FlatCAMGrbEditor.py:479 msgid "Click on the Pad Circular Array Start position" -msgstr "" +msgstr "Cliquez sur le Tableau circulaire du Pad position de départ" #: flatcamEditors/FlatCAMGrbEditor.py:700 msgid "Too many Pads for the selected spacing angle." -msgstr "" +msgstr "Trop de pads pour l'angle d'espacement sélectionné." #: flatcamEditors/FlatCAMGrbEditor.py:723 msgid "Done. Pad Array added." -msgstr "" +msgstr "Terminé. Pad Tableau ajouté." #: flatcamEditors/FlatCAMGrbEditor.py:744 msgid "Select shape(s) and then click ..." -msgstr "" +msgstr "Sélectionnez forme (s) puis cliquez sur ..." #: flatcamEditors/FlatCAMGrbEditor.py:756 msgid "Failed. Nothing selected." -msgstr "" +msgstr "Échoué. Rien de sélectionné." #: flatcamEditors/FlatCAMGrbEditor.py:772 msgid "" "Failed. Poligonize works only on geometries belonging to the same aperture." msgstr "" +"Échoué. Poligonize ne fonctionne que sur les géométries appartenant à la " +"même ouverture." #: flatcamEditors/FlatCAMGrbEditor.py:826 msgid "Done. Poligonize completed." -msgstr "" +msgstr "Terminé. Polygoniser terminé." #: flatcamEditors/FlatCAMGrbEditor.py:879 #: flatcamEditors/FlatCAMGrbEditor.py:1102 #: flatcamEditors/FlatCAMGrbEditor.py:1126 msgid "Corner Mode 1: 45 degrees ..." -msgstr "" +msgstr "Mode d'angle 1: 45 degrés ..." #: flatcamEditors/FlatCAMGrbEditor.py:881 msgid "Click on 1st point ..." -msgstr "" +msgstr "Cliquez sur le 1er point ..." #: flatcamEditors/FlatCAMGrbEditor.py:891 #: flatcamEditors/FlatCAMGrbEditor.py:1202 msgid "Click on next Point or click Right mouse button to complete ..." msgstr "" +"Cliquez sur le prochain point ou cliquez avec le bouton droit de la souris " +"pour terminer ..." #: flatcamEditors/FlatCAMGrbEditor.py:1090 #: flatcamEditors/FlatCAMGrbEditor.py:1123 msgid "Corner Mode 2: Reverse 45 degrees ..." -msgstr "" +msgstr "Mode de Coin 2: Inverse de 45 degrés ..." #: flatcamEditors/FlatCAMGrbEditor.py:1093 #: flatcamEditors/FlatCAMGrbEditor.py:1120 msgid "Corner Mode 3: 90 degrees ..." -msgstr "" +msgstr "Mode de Coin 3: 90 degrés ..." #: flatcamEditors/FlatCAMGrbEditor.py:1096 #: flatcamEditors/FlatCAMGrbEditor.py:1117 msgid "Corner Mode 4: Reverse 90 degrees ..." -msgstr "" +msgstr "Mode de Coin 4: inverser de 90 degrés ..." #: flatcamEditors/FlatCAMGrbEditor.py:1099 #: flatcamEditors/FlatCAMGrbEditor.py:1114 msgid "Corner Mode 5: Free angle ..." -msgstr "" +msgstr "Mode de Coin 5: Angle libre ..." #: flatcamEditors/FlatCAMGrbEditor.py:1153 #: flatcamEditors/FlatCAMGrbEditor.py:1319 #: flatcamEditors/FlatCAMGrbEditor.py:1358 msgid "Track Mode 1: 45 degrees ..." -msgstr "" +msgstr "Mode de Piste 1: 45 degrés ..." #: flatcamEditors/FlatCAMGrbEditor.py:1299 #: flatcamEditors/FlatCAMGrbEditor.py:1353 msgid "Track Mode 2: Reverse 45 degrees ..." -msgstr "" +msgstr "Mode de Piste 2: Recul de 45 degrés ..." #: flatcamEditors/FlatCAMGrbEditor.py:1304 #: flatcamEditors/FlatCAMGrbEditor.py:1348 msgid "Track Mode 3: 90 degrees ..." -msgstr "" +msgstr "Mode de Piste 3: 90 degrés ..." #: flatcamEditors/FlatCAMGrbEditor.py:1309 #: flatcamEditors/FlatCAMGrbEditor.py:1343 msgid "Track Mode 4: Reverse 90 degrees ..." -msgstr "" +msgstr "Mode de Piste 4: Recul de 90 degrés ..." #: flatcamEditors/FlatCAMGrbEditor.py:1314 #: flatcamEditors/FlatCAMGrbEditor.py:1338 msgid "Track Mode 5: Free angle ..." -msgstr "" +msgstr "Mode de Piste 5: Angle libre ..." #: flatcamEditors/FlatCAMGrbEditor.py:1720 msgid "Scale the selected Gerber apertures ..." -msgstr "" +msgstr "Mettez à l'échelle les ouvertures de Gerber sélectionnées ..." #: flatcamEditors/FlatCAMGrbEditor.py:1762 msgid "Buffer the selected apertures ..." -msgstr "" +msgstr "Tamponner les ouvertures sélectionnées ..." #: flatcamEditors/FlatCAMGrbEditor.py:1804 msgid "Mark polygon areas in the edited Gerber ..." -msgstr "" +msgstr "Marquer les zones polygonales dans le Gerber édité ..." #: flatcamEditors/FlatCAMGrbEditor.py:1852 msgid "Nothing selected to move" -msgstr "" +msgstr "Rien de sélectionné pour bouger" #: flatcamEditors/FlatCAMGrbEditor.py:1976 msgid "Done. Apertures Move completed." -msgstr "" +msgstr "Terminé. Déplacement des ouvertures terminé." #: flatcamEditors/FlatCAMGrbEditor.py:2053 msgid "Done. Apertures copied." -msgstr "" +msgstr "Terminé. Ouvertures copiées." #: flatcamEditors/FlatCAMGrbEditor.py:2354 flatcamGUI/FlatCAMGUI.py:1757 #: flatcamGUI/PreferencesUI.py:1429 msgid "Gerber Editor" -msgstr "" +msgstr "Gerber éditeur" #: flatcamEditors/FlatCAMGrbEditor.py:2374 flatcamGUI/ObjectUI.py:192 #: flatcamTools/ToolProperties.py:137 msgid "Apertures" -msgstr "" +msgstr "Les ouvertures" #: flatcamEditors/FlatCAMGrbEditor.py:2376 flatcamGUI/ObjectUI.py:194 msgid "Apertures Table for the Gerber Object." -msgstr "" +msgstr "Tableau des Ouvertures pour l'objet Gerber." #: flatcamEditors/FlatCAMGrbEditor.py:2387 #: flatcamEditors/FlatCAMGrbEditor.py:3687 flatcamGUI/ObjectUI.py:227 msgid "Code" -msgstr "" +msgstr "Code" #: flatcamEditors/FlatCAMGrbEditor.py:2387 #: flatcamEditors/FlatCAMGrbEditor.py:3687 flatcamGUI/ObjectUI.py:227 #: flatcamGUI/ObjectUI.py:957 flatcamGUI/ObjectUI.py:1522 msgid "Type" -msgstr "" +msgstr "Type" #: flatcamEditors/FlatCAMGrbEditor.py:2387 #: flatcamEditors/FlatCAMGrbEditor.py:3687 flatcamGUI/ObjectUI.py:227 msgid "Size" -msgstr "" +msgstr "Taille" #: flatcamEditors/FlatCAMGrbEditor.py:2387 #: flatcamEditors/FlatCAMGrbEditor.py:3687 flatcamGUI/ObjectUI.py:227 msgid "Dim" -msgstr "" +msgstr "Dim." #: flatcamEditors/FlatCAMGrbEditor.py:2391 flatcamGUI/ObjectUI.py:231 msgid "Index" -msgstr "" +msgstr "Indice" #: flatcamEditors/FlatCAMGrbEditor.py:2393 #: flatcamEditors/FlatCAMGrbEditor.py:2420 flatcamGUI/ObjectUI.py:233 msgid "Aperture Code" -msgstr "" +msgstr "Code d'Ouverture" #: flatcamEditors/FlatCAMGrbEditor.py:2395 flatcamGUI/ObjectUI.py:235 msgid "Type of aperture: circular, rectangle, macros etc" -msgstr "" +msgstr "Type d'ouverture: circulaire, rectangle, macros, etc." #: flatcamEditors/FlatCAMGrbEditor.py:2397 flatcamGUI/ObjectUI.py:237 msgid "Aperture Size:" -msgstr "" +msgstr "Taille d'Ouverture:" #: flatcamEditors/FlatCAMGrbEditor.py:2399 flatcamGUI/ObjectUI.py:239 msgid "" @@ -4006,14 +4032,17 @@ msgid "" " - (width, height) for R, O type.\n" " - (dia, nVertices) for P type" msgstr "" +"Dimensions d'ouverture:\n" +"  - (largeur, hauteur) pour le type R, O.\n" +"  - (dia, nVertices) pour le type P" #: flatcamEditors/FlatCAMGrbEditor.py:2422 flatcamGUI/PreferencesUI.py:1458 msgid "Code for the new aperture" -msgstr "" +msgstr "Code pour la nouvelle ouverture" #: flatcamEditors/FlatCAMGrbEditor.py:2430 msgid "Aperture Size" -msgstr "" +msgstr "Taille d'ouverture" #: flatcamEditors/FlatCAMGrbEditor.py:2432 msgid "" @@ -4023,10 +4052,15 @@ msgid "" "calculated as:\n" "sqrt(width**2 + height**2)" msgstr "" +"Taille pour la nouvelle ouverture.\n" +"Si le type d'ouverture est 'R' ou 'O' alors\n" +"cette valeur est automatiquement\n" +"calculé comme:\n" +"sqrt (largeur ** 2 + hauteur ** 2)" #: flatcamEditors/FlatCAMGrbEditor.py:2444 msgid "Aperture Type" -msgstr "" +msgstr "Type d'ouverture" #: flatcamEditors/FlatCAMGrbEditor.py:2446 msgid "" @@ -4035,10 +4069,14 @@ msgid "" "R = rectangular\n" "O = oblong" msgstr "" +"Sélectionnez le type de nouvelle ouverture. Peut être:\n" +"C = circulaire\n" +"R = rectangulaire\n" +"O = oblong" #: flatcamEditors/FlatCAMGrbEditor.py:2457 msgid "Aperture Dim" -msgstr "" +msgstr "Dim. d'Ouverture" #: flatcamEditors/FlatCAMGrbEditor.py:2459 msgid "" @@ -4046,38 +4084,41 @@ msgid "" "Active only for rectangular apertures (type R).\n" "The format is (width, height)" msgstr "" +"Dimensions pour la nouvelle ouverture.\n" +"Actif uniquement pour les ouvertures rectangulaires (type R).\n" +"Le format est (largeur, hauteur)" #: flatcamEditors/FlatCAMGrbEditor.py:2468 msgid "Add/Delete Aperture" -msgstr "" +msgstr "Ajouter / Supprimer une Ouverture" #: flatcamEditors/FlatCAMGrbEditor.py:2470 msgid "Add/Delete an aperture in the aperture table" -msgstr "" +msgstr "Ajouter / Supprimer une ouverture dans la table des ouvertures" #: flatcamEditors/FlatCAMGrbEditor.py:2479 msgid "Add a new aperture to the aperture list." -msgstr "" +msgstr "Ajoutez une nouvelle ouverture à la liste des ouvertures." #: flatcamEditors/FlatCAMGrbEditor.py:2484 msgid "Delete a aperture in the aperture list" -msgstr "" +msgstr "Supprimer une ouverture dans la liste des ouvertures" #: flatcamEditors/FlatCAMGrbEditor.py:2501 msgid "Buffer Aperture" -msgstr "" +msgstr "Ouverture du Tampon" #: flatcamEditors/FlatCAMGrbEditor.py:2503 msgid "Buffer a aperture in the aperture list" -msgstr "" +msgstr "Buffer une ouverture dans la liste des ouvertures" #: flatcamEditors/FlatCAMGrbEditor.py:2513 flatcamGUI/PreferencesUI.py:1581 msgid "Buffer distance" -msgstr "" +msgstr "Distance Tampon" #: flatcamEditors/FlatCAMGrbEditor.py:2514 msgid "Buffer corner" -msgstr "" +msgstr "Coin Tampon" #: flatcamEditors/FlatCAMGrbEditor.py:2516 msgid "" @@ -4087,62 +4128,73 @@ msgid "" " - 'Beveled:' the corner is a line that directly connects the features " "meeting in the corner" msgstr "" +"Il existe 3 types de coins:\n" +"  - 'Round': le coin est arrondi.\n" +"  - 'Carré': le coin se rencontre dans un angle aigu.\n" +"  - \"Biseauté:\" le coin est une ligne qui relie directement les " +"fonctionnalités réunies dans le coin" #: flatcamEditors/FlatCAMGrbEditor.py:2531 flatcamGUI/FlatCAMGUI.py:751 #: flatcamGUI/FlatCAMGUI.py:1692 flatcamGUI/FlatCAMGUI.py:1743 #: flatcamGUI/FlatCAMGUI.py:1770 flatcamGUI/FlatCAMGUI.py:2186 msgid "Buffer" -msgstr "" +msgstr "Tampon" #: flatcamEditors/FlatCAMGrbEditor.py:2546 msgid "Scale Aperture" -msgstr "" +msgstr "Échelle d'Ouverture" #: flatcamEditors/FlatCAMGrbEditor.py:2548 msgid "Scale a aperture in the aperture list" -msgstr "" +msgstr "Mettre à l'échelle une ouverture dans la liste des ouvertures" #: flatcamEditors/FlatCAMGrbEditor.py:2556 flatcamGUI/PreferencesUI.py:1594 msgid "Scale factor" -msgstr "" +msgstr "Facteur d'échelle" #: flatcamEditors/FlatCAMGrbEditor.py:2558 msgid "" "The factor by which to scale the selected aperture.\n" "Values can be between 0.0000 and 999.9999" msgstr "" +"Le facteur par lequel mettre à l'échelle l'ouverture sélectionnée.\n" +"Les valeurs peuvent être comprises entre 0,0000 et 999,9999." #: flatcamEditors/FlatCAMGrbEditor.py:2584 msgid "Mark polygon areas" -msgstr "" +msgstr "Marquer des zones polygonales" #: flatcamEditors/FlatCAMGrbEditor.py:2586 msgid "Mark the polygon areas." -msgstr "" +msgstr "Marquez les zones polygonales." #: flatcamEditors/FlatCAMGrbEditor.py:2594 msgid "Area UPPER threshold" -msgstr "" +msgstr "Seuil de la zone supérieure" #: flatcamEditors/FlatCAMGrbEditor.py:2596 msgid "" "The threshold value, all areas less than this are marked.\n" "Can have a value between 0.0000 and 9999.9999" msgstr "" +"La valeur de seuil, toutes les zones inférieures à celle-ci sont marquées.\n" +"Peut avoir une valeur comprise entre 0.0000 et 9999.9999" #: flatcamEditors/FlatCAMGrbEditor.py:2602 msgid "Area LOWER threshold" -msgstr "" +msgstr "Zone inférieure seuil" #: flatcamEditors/FlatCAMGrbEditor.py:2604 msgid "" "The threshold value, all areas more than this are marked.\n" "Can have a value between 0.0000 and 9999.9999" msgstr "" +"La valeur de seuil, toutes les zones plus que cela sont marquées.\n" +"Peut avoir une valeur comprise entre 0.0000 et 9999.9999" #: flatcamEditors/FlatCAMGrbEditor.py:2617 msgid "Go" -msgstr "" +msgstr "Aller" #: flatcamEditors/FlatCAMGrbEditor.py:2636 flatcamGUI/FlatCAMGUI.py:741 #: flatcamGUI/FlatCAMGUI.py:1692 flatcamGUI/FlatCAMGUI.py:2176 @@ -7216,7 +7268,7 @@ msgid "" "file." msgstr "" -#: flatcamGUI/PlotCanvasLegacy.py:1000 +#: flatcamGUI/PlotCanvasLegacy.py:993 msgid "" "Could not annotate due of a difference between the number of text elements " "and the number of text positions." @@ -8015,7 +8067,7 @@ msgstr "" msgid "Factor to scale the Gerber element." msgstr "" -#: flatcamGUI/PreferencesUI.py:1607 flatcamGUI/PreferencesUI.py:1617 +#: flatcamGUI/PreferencesUI.py:1607 msgid "Threshold low" msgstr "" @@ -8023,6 +8075,10 @@ msgstr "" msgid "Threshold value under which the apertures are not marked." msgstr "" +#: flatcamGUI/PreferencesUI.py:1617 +msgid "Threshold high" +msgstr "" + #: flatcamGUI/PreferencesUI.py:1619 msgid "Threshold value over which the apertures are not marked." msgstr "" From 4e8fbaf97494b1fc926115a9b42cf43975823351 Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Wed, 25 Sep 2019 15:02:59 +0300 Subject: [PATCH 5/9] - fixed the 'Jump To' function to work in legacy graphic engine - in legacy graphic engine fixed the mouse cursor shape when grid snapping is ON, such that it fits with the shape from the OpenGL graphic engine --- FlatCAMApp.py | 26 +++++++++++++------------- README.md | 2 ++ flatcamGUI/PlotCanvasLegacy.py | 34 ++++++++++++++++++++++++++++------ 3 files changed, 43 insertions(+), 19 deletions(-) diff --git a/FlatCAMApp.py b/FlatCAMApp.py index a51fe179..04327aa1 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -6896,9 +6896,9 @@ class App(QtCore.QObject): """ self.report_usage("on_jump_to()") - if self.is_legacy is True: - self.inform.emit(_("Not available with the current Graphic Engine Legacy(2D).")) - return + # if self.is_legacy is True: + # self.inform.emit(_("Not available with the current Graphic Engine Legacy(2D).")) + # return if not custom_location: dia_box = Dialog_box(title=_("Jump to ..."), @@ -6919,11 +6919,7 @@ class App(QtCore.QObject): location = custom_location if fit_center: - if self.is_legacy is False: - self.plotcanvas.fit_center(loc=location) - else: - pass - # self.plotcanvas.fit_view() + self.plotcanvas.fit_center(loc=location) cursor = QtGui.QCursor() @@ -6932,13 +6928,17 @@ class App(QtCore.QObject): jump_loc = self.plotcanvas.translate_coords_2((location[0], location[1])) cursor.setPos(canvas_origin.x() + jump_loc[0], (canvas_origin.y() + jump_loc[1])) else: - # the origin finding works but not mapping the location to pixels + # find the canvas origin which is in the top left corner canvas_origin = self.plotcanvas.native.mapToGlobal(QtCore.QPoint(0, 0)) + # determine the coordinates for the lowest left point of the canvas x0, y0 = canvas_origin.x(), canvas_origin.y() + self.ui.right_layout.geometry().height() - x0, y0 = x0 + self.plotcanvas.axes.transData.transform((0, 0))[0], y0 - \ - self.plotcanvas.axes.transData.transform((0, 0))[1] - loc = self.plotcanvas.axes.transData.transform(location) - cursor.setPos(x0 + loc[0]/50, y0 - loc[1]/50) + + # transform the given location from data coordinates to display coordinates. THe display coordinates are + # in pixels where the origin 0,0 is in the lowest left point of the display window (in our case is the + # canvas) and the point (width, height) is in the top-right location + loc = self.plotcanvas.axes.transData.transform_point(location) + + cursor.setPos(x0 + loc[0], y0 - loc[1]) self.inform.emit('[success] %s' % _("Done.")) diff --git a/README.md b/README.md index f83e61ce..78b58059 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,8 @@ CAD program, and create G-Code for Isolation routing. 25.09.2019 - French translation at 33% +- fixed the 'Jump To' function to work in legacy graphic engine +- in legacy graphic engine fixed the mouse cursor shape when grid snapping is ON, such that it fits with the shape from the OpenGL graphic engine 24.09.2019 diff --git a/flatcamGUI/PlotCanvasLegacy.py b/flatcamGUI/PlotCanvasLegacy.py index c8b51c87..dac0f8bd 100644 --- a/flatcamGUI/PlotCanvasLegacy.py +++ b/flatcamGUI/PlotCanvasLegacy.py @@ -281,7 +281,7 @@ class PlotCanvasLegacy(QtCore.QObject): x, y = self.app.geo_editor.snap(x_pos, y_pos) # Pointer (snapped) - elements = self.axes.plot(x, y, 'k+', ms=40, mew=2, animated=True) + elements = self.axes.plot(x, y, 'k+', ms=33, mew=1, animated=True) for el in elements: self.axes.draw_artist(el) except Exception as e: @@ -443,6 +443,26 @@ class PlotCanvasLegacy(QtCore.QObject): def fit_view(self): self.auto_adjust_axes() + def fit_center(self, loc, rect=None): + x = loc[0] + y = loc[1] + + xmin, xmax = self.axes.get_xlim() + ymin, ymax = self.axes.get_ylim() + half_width = (xmax - xmin) / 2 + half_height = (ymax - ymin) / 2 + + # Adjust axes + for ax in self.figure.get_axes(): + ax.set_xlim((x - half_width , x + half_width)) + ax.set_ylim((y - half_height, y + half_height)) + + # Re-draw + self.canvas.draw() + + # #### Temporary place-holder for cached update ##### + self.update_screen_request.emit([0, 0, 0, 0, 0]) + def zoom(self, factor, center=None): """ Zooms the plot by factor around a given @@ -482,14 +502,13 @@ class PlotCanvasLegacy(QtCore.QObject): for ax in self.figure.get_axes(): ax.set_xlim((xmin, xmax)) ax.set_ylim((ymin, ymax)) - # Async re-draw self.canvas.draw_idle() # #### Temporary place-holder for cached update ##### self.update_screen_request.emit([0, 0, 0, 0, 0]) - def pan(self, x, y): + def pan(self, x, y, idle=True): xmin, xmax = self.axes.get_xlim() ymin, ymax = self.axes.get_ylim() width = xmax - xmin @@ -501,7 +520,10 @@ class PlotCanvasLegacy(QtCore.QObject): ax.set_ylim((ymin + y * height, ymax + y * height)) # Re-draw - self.canvas.draw_idle() + if idle: + self.canvas.draw_idle() + else: + self.canvas.draw() # #### Temporary place-holder for cached update ##### self.update_screen_request.emit([0, 0, 0, 0, 0]) @@ -514,8 +536,8 @@ class PlotCanvasLegacy(QtCore.QObject): :return: Axes attached to the figure. :rtype: Axes """ - - return self.figure.add_axes([0.05, 0.05, 0.9, 0.9], label=name) + new_ax = self.figure.add_axes([0.05, 0.05, 0.9, 0.9], label=name) + return new_ax def remove_current_axes(self): """ From 394154455886b7249810dd23952d73ac806d10a7 Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Wed, 25 Sep 2019 17:25:46 +0300 Subject: [PATCH 6/9] - in legacy graphic engine fixed the axis toggle - French Google-translation at 48% --- FlatCAMApp.py | 23 +- README.md | 4 +- flatcamGUI/FlatCAMGUI.py | 23 +- locale/fr/LC_MESSAGES/strings.mo | Bin 88522 -> 114145 bytes locale/fr/LC_MESSAGES/strings.po | 701 +++++++++++++++++-------------- 5 files changed, 412 insertions(+), 339 deletions(-) diff --git a/FlatCAMApp.py b/FlatCAMApp.py index 04327aa1..cb2e7c9f 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -5628,15 +5628,24 @@ class App(QtCore.QObject): self.report_usage("on_toggle_axis()") if self.toggle_axis is False: - self.plotcanvas.v_line.set_data(color=(0.70, 0.3, 0.3, 1.0)) - self.plotcanvas.h_line.set_data(color=(0.70, 0.3, 0.3, 1.0)) - self.plotcanvas.redraw() + if self.is_legacy is False: + self.plotcanvas.v_line.set_data(color=(0.70, 0.3, 0.3, 1.0)) + self.plotcanvas.h_line.set_data(color=(0.70, 0.3, 0.3, 1.0)) + self.plotcanvas.redraw() + else: + self.plotcanvas.axes.axhline(color=(0.70, 0.3, 0.3), linewidth=2) + self.plotcanvas.axes.axvline(color=(0.70, 0.3, 0.3), linewidth=2) + self.plotcanvas.canvas.draw() + pass self.toggle_axis = True else: - self.plotcanvas.v_line.set_data(color=(0.0, 0.0, 0.0, 0.0)) - - self.plotcanvas.h_line.set_data(color=(0.0, 0.0, 0.0, 0.0)) - self.plotcanvas.redraw() + if self.is_legacy is False: + self.plotcanvas.v_line.set_data(color=(0.0, 0.0, 0.0, 0.0)) + self.plotcanvas.h_line.set_data(color=(0.0, 0.0, 0.0, 0.0)) + self.plotcanvas.redraw() + else: + self.plotcanvas.axes.lines[:] = [] + self.plotcanvas.canvas.draw() self.toggle_axis = False def on_toggle_grid(self): diff --git a/README.md b/README.md index 78b58059..8c617a86 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,8 @@ CAD program, and create G-Code for Isolation routing. - French translation at 33% - fixed the 'Jump To' function to work in legacy graphic engine - in legacy graphic engine fixed the mouse cursor shape when grid snapping is ON, such that it fits with the shape from the OpenGL graphic engine +- in legacy graphic engine fixed the axis toggle +- French Google-translation at 48% 24.09.2019 @@ -24,7 +26,7 @@ CAD program, and create G-Code for Isolation routing. - in legacy graphic engine, fixed issue where immediately after panning finished the mouse cursor shape was not updated - unfortunately the fix for issue where while zooming the mouse cursor shape was not updated braked something in way that Matplotlib work with PyQt5, therefore I removed it - fixed a bug in legacy graphic engine: when doing the self.app.collection.delete_all() in new_project an app crash occurred -- implemented the Annotation change in CNCJob Selected Tab +- implemented the Annotation change in CNCJob Selected Tab for the legacy graphic engine 23.09.2019 diff --git a/flatcamGUI/FlatCAMGUI.py b/flatcamGUI/FlatCAMGUI.py index e4b84b91..e9f63392 100644 --- a/flatcamGUI/FlatCAMGUI.py +++ b/flatcamGUI/FlatCAMGUI.py @@ -2347,15 +2347,24 @@ class FlatCAMGUI(QtWidgets.QMainWindow): # Toggle axis if key == QtCore.Qt.Key_G: if self.app.toggle_axis is False: - self.app.plotcanvas.v_line.set_data(color=(0.70, 0.3, 0.3, 1.0)) - self.app.plotcanvas.h_line.set_data(color=(0.70, 0.3, 0.3, 1.0)) - self.app.plotcanvas.redraw() + if self.app.is_legacy is False: + self.app.plotcanvas.v_line.set_data(color=(0.70, 0.3, 0.3, 1.0)) + self.app.plotcanvas.h_line.set_data(color=(0.70, 0.3, 0.3, 1.0)) + self.app.plotcanvas.redraw() + else: + self.app.plotcanvas.axes.axhline(color=(0.70, 0.3, 0.3), linewidth=2) + self.app.plotcanvas.axes.axvline(color=(0.70, 0.3, 0.3), linewidth=2) + self.app.plotcanvas.canvas.draw() + self.app.toggle_axis = True else: - self.app.plotcanvas.v_line.set_data(color=(0.0, 0.0, 0.0, 0.0)) - - self.app.plotcanvas.h_line.set_data(color=(0.0, 0.0, 0.0, 0.0)) - self.app.plotcanvas.redraw() + if self.app.is_legacy is False: + self.app.plotcanvas.v_line.set_data(color=(0.0, 0.0, 0.0, 0.0)) + self.app.plotcanvas.h_line.set_data(color=(0.0, 0.0, 0.0, 0.0)) + self.app.plotcanvas.redraw() + else: + self.app.plotcanvas.axes.lines[:] = [] + self.app.plotcanvas.canvas.draw() self.app.toggle_axis = False # Open Preferences Window diff --git a/locale/fr/LC_MESSAGES/strings.mo b/locale/fr/LC_MESSAGES/strings.mo index ff71b314b1db51d7b5b1788b0d256b2c6dbf19d3..847175481b317012cbdedd4cc54dd77995bf87b0 100644 GIT binary patch delta 42088 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 Ij{6h-4=vZ-{r~^~ delta 18584 zcmZA82YgP~|G@EkGKfe7i4j2_GiF4rSWU$iwP($cAVw0AAT=JVR_%*RwRVl7#-k0@ zs+KBRyGE&MYqVWyMXWZvezy9((*Ab7e`=^3Fi!2U* zZ_6rp19M?a$7^F1d(txwJcwZGS)UWz#`=1&=21<`ToXa%;JVqu@>z&T3Qy* zV1>7`tVoQ(YB&(9ql3|S7$