updated main files to new github master version

Tue, 19 Jan 2021 20:45:09 +0100

author
mdd
date
Tue, 19 Jan 2021 20:45:09 +0100
changeset 45
c82943fb205f
parent 44
310be640a303
child 46
cce0af6351f0

updated main files to new github master version

.hgignore file | annotate | diff | comparison | revisions
printrun-src/.gitignore file | annotate | diff | comparison | revisions
printrun-src/MANIFEST.in file | annotate | diff | comparison | revisions
printrun-src/NEWS.md file | annotate | diff | comparison | revisions
printrun-src/P-face.icns file | annotate | diff | comparison | revisions
printrun-src/README.i18n file | annotate | diff | comparison | revisions
printrun-src/README.md file | annotate | diff | comparison | revisions
printrun-src/buildinstructions.txt file | annotate | diff | comparison | revisions
printrun-src/calibrateextruder.py file | annotate | diff | comparison | revisions
printrun-src/gcodeplater.py file | annotate | diff | comparison | revisions
printrun-src/locale/ar/LC_MESSAGES/plater.po file | annotate | diff | comparison | revisions
printrun-src/locale/hy/LC_MESSAGES/plater.po file | annotate | diff | comparison | revisions
printrun-src/locale/hy/LC_MESSAGES/pronterface.po file | annotate | diff | comparison | revisions
printrun-src/plater.appdata.xml file | annotate | diff | comparison | revisions
printrun-src/plater.desktop file | annotate | diff | comparison | revisions
printrun-src/plater.py file | annotate | diff | comparison | revisions
printrun-src/printcore.py file | annotate | diff | comparison | revisions
printrun-src/pronsole.appdata.xml file | annotate | diff | comparison | revisions
printrun-src/pronsole.desktop file | annotate | diff | comparison | revisions
printrun-src/pronsole.py file | annotate | diff | comparison | revisions
printrun-src/pronterface.appdata.xml file | annotate | diff | comparison | revisions
printrun-src/pronterface.desktop file | annotate | diff | comparison | revisions
printrun-src/pronterface.py file | annotate | diff | comparison | revisions
printrun-src/requirements.txt file | annotate | diff | comparison | revisions
printrun-src/setup.py file | annotate | diff | comparison | revisions
printrun-src/testfiles/layer-detect.gcode file | annotate | diff | comparison | revisions
printrun-src/testfiles/pause-restore-rel-e.gcode file | annotate | diff | comparison | revisions
printrun-src/testtools/gcodeviewer.py file | annotate | diff | comparison | revisions
printrun-src/testtools/lengthy.py file | annotate | diff | comparison | revisions
printrun-src/testtools/mock-printer.py file | annotate | diff | comparison | revisions
--- a/.hgignore	Tue Jan 19 20:44:16 2021 +0100
+++ b/.hgignore	Tue Jan 19 20:45:09 2021 +0100
@@ -4,3 +4,4 @@
 *.bak
 *.lnk
 slic3r*
+printrun-src.working-old/*
--- a/printrun-src/.gitignore	Tue Jan 19 20:44:16 2021 +0100
+++ b/printrun-src/.gitignore	Tue Jan 19 20:45:09 2021 +0100
@@ -6,5 +6,22 @@
 .DS_Store
 .vagrant
 prontserve-env
+pronterface.spec
 printrun/gcoder_line.c
-printrun/gcoder_line.so
+printrun/gcoder_line*.so
+printrun/gcoder_line*.pyd
+.project
+.pydevproject
+/build/
+/dist/
+/venv/
+/.vscode/
+
+/wheelhouse/
+*.egg-info/
+
+/v3/
+/.vs/
+/dist
+/slic3rconf.ini
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/printrun-src/MANIFEST.in	Tue Jan 19 20:45:09 2021 +0100
@@ -0,0 +1,7 @@
+include COPYING
+include README.*
+include requirements.txt
+include *.ico
+include *.icns
+recursive-include locale *.pot *.po *.mo
+recursive-include printrun *.pyx *.c *.h
--- a/printrun-src/NEWS.md	Tue Jan 19 20:44:16 2021 +0100
+++ b/printrun-src/NEWS.md	Tue Jan 19 20:45:09 2021 +0100
@@ -1,3 +1,192 @@
+Printrun - 2.0.0rc7
+====================
+
+Pre-release for testing purposes.
+
+### New Features
+
+ - Live resizing of panels and many other UI improvements (#1073)
+ - Render G2/G3 arcs in 3D view by interpolating them as line segments (#1092 and #1097)
+ - Apply grid size settings to 3d view (#1093)
+ - Visualize moves with laser/spindle active as extrusion (#1094)
+ - Keyboard shortcuts for important UI elements (00a932e)
+ - Keyboard jogging improvements (#1100)
+
+### Fixed Bugs
+
+ - Do not expand setting spinners, combo boxes and dropdown lists (5d42c19)
+ - Build wheels for Windows and manylinux1/2014 correctly (#1087)
+ - Allow spaces between coordinate and value when parsing coordinates in gcode (#1090)
+ - Fix G2/G3 arc rendering error and scaling in 2D view (#1091)
+ - Correct index of appended command in gcoder (#1057)
+ - Fix incorrect string comparisons using "is" (#1096)
+ - Fix D-pad/keyboard jog movements (#1084)
+ - Fix incorrect enabled state of controls on UI settings change (f02f4ef)
+ - Fix command history traversal (9d5620f)
+ - Fix toolbar shortcuts, blank jog, jog tab-out on Windows (1f0290b)
+ - Fix lost messages from Marlin that contain the string "Count" (#1104)
+ - Fix wheel install paths for locales and images (#1101)
+
+Printrun - 2.0.0rc6
+====================
+
+Pre-release for testing purposes.
+
+### New Features
+
+ - Change the default background color to the theme one (#931)
+ - Add setting for graph background color (#791)
+ - Hide second extruder from graph if not present (#791)
+ - Support for disabling Mate screensaver service (#979)
+ - Armenian translation (#1042)
+ - Don't print the M117 status msg to the console (#1081)
+ - Packages installable by pip are available on PyPI (#921)
+
+### Fixed Bugs
+
+ - Don't ask for exit confirmation on the console when asking in GUI (b48fe7b)
+ - Preset for temperatures does not affect Selection on the main screen (#676)
+ - Several Python 3 related followups, mostly in run_gcode_script
+ - Issue connecting to a remote port (#1027)
+ - Run "Final command" from settings when print is finished (#1014)
+ - Fix a crash in wx at startup due to locale settings (#1015)
+ - Only apply PARITY_ODD workaround where it's actually needed (#1017)
+ - Do not attempt to read extra device name patterns on windows (#1040)
+ - Several Linux packaging fixes
+ - Removed error-causing wxPython horizontal alignment flags (#1052)
+ - Rewrite deprecated Serial functions (#1017), pySerial >= 3 is now needed
+ - 3D Viewer color options don't update (#1054)
+ - Settings change callbacks not called (#1063 and others)
+
+
+Printrun - 2.0.0rc5
+====================
+
+Pre-release for testing purposes.
+
+### New Features
+
+ - Slic3r integration works with Slic3r PE (959e03e)
+ - Disable extrude and retract while printing (284f793, c772209)
+ - Add disable autoscroll option (4df9d58)
+
+### Fixed Bugs
+
+ - sys.frozen problem with installed Printrun (#920)
+ - Button dragging (#690)
+ - Repetier M20 (#848)
+ - Crash on startup with tabbed mode enabled (979df4a)
+ - Absurd 3D viewer viewport rotation control (#622)
+ - STL parser and GCODE plater export Python 3 problems (f8aeafd, 2ea0835)
+
+
+Printrun - 2.0.0rc4
+====================
+
+Pre-release for testing purposes.
+
+### New Features
+
+ - Support for the T? command (#888)
+ - Have slic3r as default slicing option (#904)
+
+### Fixed Bugs
+
+ - Segmentation fault (#909)
+ - Button text incorrectly changing (#903)
+ - Dialogs resized (#905, #915)
+ - Macro duplicates (#907)
+ - Ok messages with Repetire firmware (#917)
+ - Messages printed twice in terminal (#916)
+ - Prevent race condition on exit (42d7cd0, 16ee30b)
+ - Object has no attribute 'slic3r_configs' (#865)
+
+
+Printrun - 2.0.0rc3
+====================
+
+Pre-release for testing purposes.
+
+### Fixed Bugs
+
+ - Couple of wxPython 4 incompatibilities (116fdda, eb6bd43)
+ - Couple of GTK3 visibility problems (#899, f265256, 9193014)
+ - Added spoolmanager to installed modules (#896)
+ - Setlocale issues on Windows (bf53af9)
+ - Installation on macOS and Windows (#901)
+ - Macro-related functionality (95877a4)
+ - Clicking +Z⇑ and -Z⇓ (#910)
+ - Python 3 incompatibilities (#912)
+ - Segmentation fault (#895)
+
+
+Printrun - 2.0.0rc2
+====================
+
+Pre-release for testing purposes.
+
+### Fixed Bugs
+
+ - Fix SyntaxError at startup (497179c)
+
+
+Printrun - 2.0.0rc1
+====================
+
+Pre-release for testing purpouses.
+
+### New Features
+
+ - Support the XDG Directory Specification (#866)
+    * New dependency: appdirs
+ - Port to wxPython 4 (#886)
+ - Port to Python 3 (#887)
+ - Disable tabbed mode (8590f33)
+ 
+### Fixed Bugs
+
+ - Pronsole depending on the wx module (#867)
+ - Error at loading non-existent configuration files (#890)
+
+
+Printrun - 1.6.0
+================
+
+New Features
+------------
+
+- Fan power graph (ace6637)
+- Improved help messages for main scripts (#727)
+- Flow rate slider (#693)
+- AR translation from @aboobed (#680)
+- Report length of filament used by multiple extruders (de635f1)
+- Support for custom baudrates on Linux (#712)
+- Filter gcode or model files only (#753)
+- Progress update on printer screen (#794)
+- Additional RPC functions (#759)
+- Spool manager (#827)
+- OOP based event handler (#831)
+
+Fixed Bugs
+----------
+
+- Unwanted exit while printing (#595)
+- Failing at setting power settings on OSX (#619)
+- Silent cython failure (#641, #642)
+- Jitter on remote connections (#698)
+- Error at displaying the percentage done through RPC (#707)
+- Error at calculating total filament used (#731)
+- Connect function crashing (#732)
+- Unintended gcode files being loaded by default (#753)
+- Missing dependency on Ubuntu/Debian (#763)
+- Run on X11 instead of Wayland (#785 and #789)
+- Missing Slic3r integration notes (#779)
+- Too generic MIME types listed (#796)
+- Pronsole spamming "wait" and "OK o" messages (#813)
+- Plugins not being installed by setup.py (#834)
+- Compatibility with Slic3r (alexrj/Slic3r#3813)
+
+
 printrun-20140406
 =================
 
@@ -29,3 +218,5 @@
 
 - Many fixes around custom buttons
 - Much more :)
+
+[Printrun - UNRELEASED]: https://github.com/kliment/Printrun/compare/printrun-20150310...HEAD
Binary file printrun-src/P-face.icns has changed
--- a/printrun-src/README.i18n	Tue Jan 19 20:44:16 2021 +0100
+++ b/printrun-src/README.i18n	Tue Jan 19 20:45:09 2021 +0100
@@ -31,16 +31,16 @@
 
 As currently coded, the default location for these message catalogs is
 
-  /usr/share/pronterface/locale/
+  /usr/share/locale/
 
 So, to install the catalogs, copy them to there:
 
-  sudo cp -a locale /usr/share/pronterface/
+  sudo cp -a locale /usr/share/
 
 To test pronterface in a new language, you can temporarily set LANG to
 the language you are testing, for example
 
-  LANG=de python pronterface.py
+  LANG=de.UTF-8 python pronterface.py
 
 Further automation for localization and packaging of Printrun would be
 nice to see, but is not here yet.
--- a/printrun-src/README.md	Tue Jan 19 20:44:16 2021 +0100
+++ b/printrun-src/README.md	Tue Jan 19 20:45:09 2021 +0100
@@ -1,3 +1,7 @@
+# PRINTRUN 2.X
+
+The master branch holds the development of Printrun 2.x. This new version of Printrun supports Python 3 and wxPython 4. All new features and developments should be merged to it.
+
 Printrun consists of printcore, pronsole and pronterface, and a small collection of helpful scripts.
 
   * printcore.py is a library that makes writing reprap hosts easy
@@ -18,26 +22,18 @@
 
 A precompiled version is available at http://koti.kapsi.fi/~kliment/printrun/
 
+Note for OSX users: if OSX tells you the file is corrupted, you don't need to redownload it. Instead, you need to allow OSX to run unsigned apps. To do this, run 
+`sudo spctl --master-disable`
+
+
 ## Linux
 ### Ubuntu/Debian
 
-You can run Printrun directly from source. Fetch and install the dependencies using
-
-1. `sudo apt-get install python-serial python-wxgtk2.8 python-pyglet python-numpy cython python-libxml2 python-gobject python-dbus python-psutil python-cairosvg git`
-
-Clone the repository
-
-`git clone https://github.com/kliment/Printrun.git`
-
-and you can start using Printrun from the Printrun directory created by the git clone command.
-
-Users of Ubuntu Xenial Xerus or later and Debian Jessie or later won't find the package "python-wxgtk2.8" available, having been replaced by "python-wxgtk3.0". Running Printrun with "python-wxgtk3.0" instead, is possible but it is known to be affected by issue #615.
-
-A Printrun preliminary package is already available in Ubuntu Yakkety Yak and Debian Stretch/Sid repositories. Please be aware that this initial package is also known to be affected by issue #615.
+There is currently no package for Printrun 2. It must be [run from source](https://github.com/kliment/Printrun/tree/master#running-from-source).
 
 ### Chrome OS 
 
-You can use Printrun via crouton ( https://github.com/dnschneid/crouton ). Assuming you want Ubuntu Trusty, you used probably `sudo sh -e ~/Downloads/crouton -r trusty -t xfce` to install Ubuntu. Fetch and install dependencies with the line given above for Ubuntu/Debian, and obtain the source via git clone.
+You can use Printrun via crouton ( https://github.com/dnschneid/crouton ). Assuming you want Ubuntu Trusty, you used probably `sudo sh -e ~/Downloads/crouton -r trusty -t xfce` to install Ubuntu. Fetch and install printrun with the line given above for Ubuntu/Debian.
 
 By default you have no access to the serial port under Chrome OS crouton, so you cannot connect to your 3D printer. Add yourself to the serial group within the linux environment to fix this
 
@@ -49,19 +45,14 @@
 
 You can install Printrun from official packages. Install the whole package using
 
-`sudo yum install printrun`
+`sudo dnf install printrun`
 
 Or get only apps you need by
 
-`sudo yum install pronsole` or `pronterface` or `plater`
-
-Adding `--enablerepo updates-testing` option to `yum` might give you newer packages (but also not very tested).
+`sudo dnf install pronsole` or `pronterface` or `plater`
 
-You can also run Printrun directly from source, if the packages are too old for you. Fetch and install the dependencies using
+Adding `--enablerepo updates-testing` option to `dnf` might sometimes give you newer packages (but also not very tested).
 
-1. `sudo yum install pyserial wxPython python-pyglet python-cairosvg`
-
-Optional: `sudo yum install skeinforge simarrange`
 
 ### Archlinux
 
@@ -79,26 +70,45 @@
 
 To use pronterface, you need:
 
-  * python (ideally 2.6.x or 2.7.x),
-  * pyserial (or python-serial on ubuntu/debian)
-  * pyreadline (not needed on Linux) and
-  * argparse (installed by default with python >= 2.7)
-  * wxPython (some features such as Tabbed mode work better with wx 2.9)
+  * Python 3 (ideally 3.6),
+  * pyserial (or python3-serial on ubuntu/debian)
+  * pyreadline (not needed on Linux)
+  * wxPython 4
   * pyglet
+  * appdirs
   * numpy (for 3D view)
   * pycairo (to use Projector feature)
   * cairosvg (to use Projector feature)
-  * dbus (to inhibit sleep on some Linux systems)
+  * dbus (to inhibit sleep on some Linux systems) 
+
+### Use Python virtual environment
+
+Easiest way to run Printrun from source is to create and use a Python [virtual environment](https://docs.python.org/3/tutorial/venv.html).
+The following section assumes Linux. Please see specific instructions for Windows and macOS X below.
+
+**Ubuntu/Debian note:** You might need to install `python3-venv` first.
+
+**Note:** wxPython4 doesn't have Linux wheels available from the Python Package Index yet. Find a proper wheel for your distro at [extras.wxpython.org](https://extras.wxpython.org/wxPython4/extras/linux/gtk3/) and substitute the link in the bellow example. You might skip the wheel installation, but that results in compiling wxPython4 from source, which can be time and resource consuming and might fail.
 
-Please see specific instructions for Windows and Mac OS X below. Under Linux, you should use your package manager directly (see the "GETTING PRINTRUN" section), or pip:
 
-```pip install -r requirements.txt```
+```console
+$ git clone https://github.com/kliment/Printrun.git  # clone the repository
+$ cd Printrun  # change to Printrun directory
+$ python3 -m venv venv  # create an virtual environment
+$ . venv/bin/activate  # activate the virtual environment (notice the space after the dot)
+(venv) $ python -m pip install https://extras.wxpython.org/wxPython4/extras/linux/gtk3/fedora-27/wxPython-4.0.1-cp36-cp36m-linux_x86_64.whl  # replace the link with yours
+(venv) $ python -m pip install -r requirements.txt  # intall the rest of dependencies
+(venv) $ python pronterface.py  # run Pronterface
+```
 
 ### Cython-based G-Code parser
 
 Printrun default G-Code parser is quite memory hungry, but we also provide a much lighter one which just needs an extra build-time dependency (Cython), plus compiling the extension with:
 
-    python setup.py build_ext --inplace
+```console
+(venv) $ python -m pip install Cython
+(venv) $ python setup.py build_ext --inplace
+```
 
 The warning message
 
@@ -106,56 +116,49 @@
 
 means that this optimized G-Code parser hasn't been compiled. To get rid of it and benefit from the better implementation, please install Cython and run the command above.
 
+### Ubuntu/Debian
+
+The above method is the recommended way to run Printrun 2 from source. However, if you can't find a suitable wxPython4 wheel, or if it fails for other reasons, it could be run without using a python virtual environment. For users of Debian 10 Buster or later and Ubuntu 18.04 Bionic Beaver or later.
+
+Install the dependencies:
+
+```
+sudo apt install python3-serial python3-numpy cython3 python3-libxml2 python3-gi python3-dbus python3-psutil python3-cairosvg libpython3-dev python3-appdirs python3-wxgtk4.0
+```
+
+```
+sudo apt install python3-pip
+pip3 install --user pyglet
+```
+
+Install git, clone this repository:
+```
+sudo apt install git
+git clone https://github.com/kliment/Printrun.git
+cd Printrun
+```
+
 ### Windows
 
-Download the following, and install in this order:
-
-  1. http://python.org/ftp/python/2.7.2/python-2.7.2.msi
-  2. http://pypi.python.org/packages/any/p/pyserial/pyserial-2.5.win32.exe
-  3. http://downloads.sourceforge.net/wxpython/wxPython2.8-win32-unicode-2.8.12.0-py27.exe
-  4. https://pypi.python.org/packages/any/p/pyreadline/pyreadline-1.7.1.win32.exe
-  5. http://pyglet.googlecode.com/files/pyglet-1.1.4.zip
+Download and install [Python 3.6](https://www.python.org/downloads/) and follow the **Python virtual environment** section above except use the following to create and activate the virtual environment and install dependencies:
 
-For the last one, you will need to unpack it, open a command terminal, 
-go into the the directory you unpacked it in and run
-`python setup.py install`
-
-### Mac OS X Lion
+```cmd
+> py -3 -m venv venv
+> venv\Scripts\activate
+> python -m pip install -r requirements.txt
+```
 
-  1. Ensure that the active Python is the system version. (`brew uninstall python` or other appropriate incantations)
-  2. Download an install [wxPython2.8-osx-unicode] matching to your python version (most likely 2.7 on Lion, 
-        check with: python --version) from: http://wxpython.org/download.php#stable
-  Known to work PythonWX: http://superb-sea2.dl.sourceforge.net/project/wxpython/wxPython/2.8.12.1/wxPython2.8-osx-unicode-2.8.12.1-universal-py2.7.dmg
-  3. Download and unpack pyserial from http://pypi.python.org/packages/source/p/pyserial/pyserial-2.5.tar.gz
-  4. In a terminal, change to the folder you unzipped to, then type in: `sudo python setup.py install`
-  5. Repeat 4. with http://http://pyglet.googlecode.com/files/pyglet-1.1.4.zip
 
-The tools will probably run just fine in 64bit on Lion, you don't need to mess
-with any of the 32bit settings. In case they don't, try 
-  5. export VERSIONER_PYTHON_PREFER_32_BIT=yes
-in a terminal before running Pronterface
+### macOS X
 
-### Mac OS X (pre Lion)
-
-A precompiled version is available at http://koti.kapsi.fi/~kliment/printrun/
+Install Python 3, you can use Brew:
 
-  1. Download and install http://downloads.sourceforge.net/wxpython/wxPython2.8-osx-unicode-2.8.12.0-universal-py2.6.dmg
-  2. Grab the source for pyserial from http://pypi.python.org/packages/source/p/pyserial/pyserial-2.5.tar.gz
-  3. Unzip pyserial to a folder. Then, in a terminal, change to the folder you unzipped to, then type in:
-     
-     `defaults write com.apple.versioner.python Prefer-32-Bit -bool yes`
-     
-     `sudo python setup.py install`
+```console
+$ brew install python3
+```
 
-Alternatively, you can run python in 32 bit mode by setting the following environment variable before running the setup.py command:
-
-This alternative approach is confirmed to work on Mac OS X 10.6.8. 
+And follow the above **Python virtual environment** section. You don't need to search for wxPython wheel, macOS wheels are available from the Python Package Index.
 
-`export VERSIONER_PYTHON_PREFER_32_BIT=yes`
-
-`sudo python setup.py install`
-
-Then repeat the same with http://http://pyglet.googlecode.com/files/pyglet-1.1.4.zip
 
 # USING PRINTRUN
 
@@ -167,16 +170,20 @@
 The "monitor printer" function, when enabled, checks the printer state (temperatures, SD print progress) every 3 seconds.
 The command box recognizes all pronsole commands, but has no tabcompletion.
 
-If you want to load stl files, you need to install a slicing program such as Slic3r and add its path to the settings.
-See the Slic3r readme for more details on integration.
+If you want to load stl files, you need to install a slicing program such as Slic3r or Skeinforge and add its path to the settings.
+
+#### Slic3r integration
 
+To invoke Slic3r directly from Pronterface your slicing command (_Settings_ > _Options_ > _External Commands_ > _Slice Command_) should look something like `slic3r $s -o $o`. If Slic3r is properly installed "slic3r" will suffice, otherwise, replace it with the full path to Slic3r's executable.
+
+If the Slic3r integration option (_Settings_ > _Options_ > _User interface_ > _Enable Slic3r integration_) is checked a new menu will appear after application restart which will allow you to choose among your previously saved Slic3r Print/Filament/Printer settings.
 
 ## USING PRONSOLE
 
 To use pronsole, you need:
 
-  * python (ideally 2.6.x or 2.7.x),
-  * pyserial (or python-serial on ubuntu/debian) and
+  * Python 3 (ideally 3.6),
+  * pyserial (or python3-serial on ubuntu/debian) and
   * pyreadline (not needed on Linux)
 
 Start pronsole and you will be greeted with a command prompt. Type help to view the available commands.
@@ -187,7 +194,7 @@
 
 ## USING PRINTCORE
 
-To use printcore you need python (ideally 2.6.x or 2.7.x) and pyserial (or python-serial on ubuntu/debian)
+To use printcore you need Python 3 (ideally 3.6) and pyserial (or python3-serial on ubuntu/debian)
 See pronsole for an example of a full-featured host, the bottom of printcore.py for a simple command-line
 sender, or the following code example:
 
@@ -232,10 +239,10 @@
 Here is a sample Python script querying the print status:
 
 ```python
-import xmlrpclib
+import xmlrpc.client
 
-rpc = xmlrpclib.ServerProxy('http://localhost:7978')
-print rpc.status()
+rpc = xmlrpc.client.ServerProxy('http://localhost:7978')
+print(rpc.status())
 ```
 
 ## CONFIGURATION
@@ -311,7 +318,7 @@
 Enter macro using indented lines, end with empty line
 ..> G91
 ..> G1 Z-{0}
-..> G92
+..> G90
 ..>
 ```
 
@@ -325,7 +332,7 @@
 Note that this python code invocation also works in interactive prompt:
 
 ```python
-PC> !print "Hello, printer!"
+PC> !print("Hello, printer!")
 Hello printer!
 
 PC> macro debug_on !self.p.loud = 1
@@ -346,14 +353,14 @@
 PC> macro toggle_debug_on
 Enter macro using indented lines, end with empty line
 ..> !self.p.loud = 1
-..> !print "Diagnostic information ON"
+..> !print("Diagnostic information ON")
 ..> macro toggle_debug toggle_debug_off
 ..>
 Macro 'toggle_debug_on' defined
 PC> macro toggle_debug_off
 Enter macro using indented lines, end with empty line
 ..> !self.p.loud = 0
-..> !print "Diagnostic information OFF"
+..> !print("Diagnostic information OFF")
 ..> macro toggle_debug toggle_debug_on
 ..>
 Macro 'toggle_debug_off' defined
@@ -378,10 +385,10 @@
 ```python
 !if self.p.loud:
   !self.p.loud = 0
-  !print "Diagnostic information OFF"
+  !print("Diagnostic information OFF")
 !else:
   !self.p.loud = 1
-  !print "Diagnostic information ON"
+  !print("Diagnostic information ON")
 ```
 
 Macro parameters are available in '!'-escaped python code as locally defined list variable: arg[0] arg[1] ... arg[N]
@@ -460,6 +467,8 @@
 # LICENSE
 
 ```
+Copyright (C) 2011-2020 Kliment Yanev, Guillaume Seguin
+
 Printrun is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
@@ -475,3 +484,4 @@
 ```
 
 All scripts should contain this license note, if not, feel free to ask us. Please note that files where it is difficult to state this license note (such as images) are distributed under the same terms.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/printrun-src/buildinstructions.txt	Tue Jan 19 20:45:09 2021 +0100
@@ -0,0 +1,54 @@
+setup on osx:
+(install python 3.6)
+(install python extension compile environment, this is automagically done if you have xcode)
+(install git)
+git clone http://github.com/kliment/Printrun.git
+cd Printrun
+git pull
+python3 -m venv v3
+. ./v3/bin/activate
+pip install --upgrade pip
+pip install --upgrade setuptools
+pip install cffi
+pip install -r requirements.txt
+pip install cython
+python setup.py build_ext --inplace
+
+for running:
+python pronterface.py
+
+for packaging:
+pip install pyinstaller
+pyi-makespec -F --add-data images/\*:images --add-data \*.png:. --add-data \*.ico:. -w -i P-face.icns pronterface.py
+rm -rf dist
+pyinstaller --clean pronterface.spec -y
+(edit .plist file to add:
+<key>NSAppSleepDisabled</key>
+<true/>
+)
+(optional) codesign -s identityname dist/pronterface.app --deep
+
+setup on windows:
+(install python 3.6)
+(install python extension compile environment, see https://wiki.python.org/moin/WindowsCompilers )
+(install git)
+git clone http://github.com/kliment/Printrun.git
+cd Printrun
+git pull
+\path\to\python3\python -m venv v3
+v3\Scripts\activate
+pip install --upgrade pip
+pip install --upgrade setuptools
+pip install cffi
+pip install -r requirements.txt
+pip install cython
+python setup.py build_ext --inplace
+
+for running:
+python pronterface.py
+
+for packaging:
+pip install pyinstaller
+pyi-makespec -F --add-data images/*;images --add-data *.png;. --add-data *.ico;. -w -i pronterface.ico pronterface.py
+pyinstaller --clean pronterface.spec -y
+
--- a/printrun-src/calibrateextruder.py	Tue Jan 19 20:44:16 2021 +0100
+++ b/printrun-src/calibrateextruder.py	Tue Jan 19 20:45:09 2021 +0100
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 # This file is part of the Printrun suite.
 #
 # Printrun is free software: you can redistribute it and/or modify
@@ -41,7 +41,7 @@
 def float_input(prompt=''):
     f = None
     while f is None:
-        s = raw_input(prompt)
+        s = input(prompt)
         try:
             f = float(s)
         except ValueError:
@@ -56,7 +56,7 @@
             sys.stdout.write(s)
             sys.stdout.flush()
             time.sleep(1.0 / 5)
-    print
+    print()
 def w(s):
     sys.stdout.write(s)
     sys.stdout.flush()
@@ -75,9 +75,9 @@
             time.sleep(1.5)
             f = True
         curtemp = gettemp(p)
-        if curtemp: w(u"\rHeating extruder up.. %3d \xb0C" % curtemp)
-    if s: print
-    else: print "\nReady."
+        if curtemp: w("\rHeating extruder up.. %3d \xb0C" % curtemp)
+    if s: print()
+    else: print("\nReady.")
 
 def gettemp(p):
     try: p.logl
@@ -89,14 +89,14 @@
         if 'T:' in line:
             try:
                 setattr(p, 'temp', int(line.split('T:')[1].split()[0]))
-            except: print line
+            except: print(line)
     p.logl = len(p.log)
     return p.temp
 if not os.path.exists(port):
     port = 0
 
 # Parse options
-help = u"""
+help = """
 %s [ -l DISTANCE ] [ -s STEPS ] [ -t TEMP ] [ -p PORT ]
         -l      --length        Length of filament to extrude for each calibration step (default: %d mm)
         -s      --steps         Initial amount of steps to use (default: %d steps)
@@ -106,13 +106,13 @@
 """[1:-1].encode('utf-8') % (sys.argv[0], n, k, temp, tempmax, port if port else 'auto')
 try:
     opts, args = getopt.getopt(sys.argv[1:], "hl:s:t:p:", ["help", "length=", "steps=", "temp=", "port="])
-except getopt.GetoptError, err:
-    print str(err)
-    print help
+except getopt.GetoptError as err:
+    print(str(err))
+    print(help)
     sys.exit(2)
 for o, a in opts:
     if o in ('-h', '--help'):
-        print help
+        print(help)
         sys.exit()
     elif o in ('-l', '--length'):
         n = float(a)
@@ -121,17 +121,17 @@
     elif o in ('-t', '--temp'):
         temp = int(a)
         if temp >= tempmax:
-            print (u'%d \xb0C? Are you insane?'.encode('utf-8') % temp) + (" That's over nine thousand!" if temp > 9000 else '')
+            print(('%d \xb0C? Are you insane?'.encode('utf-8') % temp) + (" That's over nine thousand!" if temp > 9000 else ''))
             sys.exit(255)
     elif o in ('-p', '--port'):
         port = a
 
 # Show initial parameters
-print "Initial parameters"
-print "Steps per mm:    %3d steps" % k
-print "Length extruded: %3d mm" % n
-print
-print "Serial port:     %s" % (port if port else 'auto')
+print("Initial parameters")
+print("Steps per mm:    %3d steps" % k)
+print("Length extruded: %3d mm" % n)
+print()
+print("Serial port:     %s" % (port if port else 'auto'))
 
 p = None
 try:
@@ -140,12 +140,12 @@
     try:
         p = printcore(port, 115200)
     except:
-        print 'Error.'
+        print('Error.')
         raise
     while not p.online:
         time.sleep(1)
         w('.')
-    print " connected."
+    print(" connected.")
 
     heatup(p, temp)
 
@@ -160,8 +160,8 @@
         if n != m:
             k = (n / m) * k
             p.send_now("M92 E%d" % int(round(k)))  # Set new step count
-            print "Steps per mm:    %3d steps" % k  # Tell user
-    print 'Calibration completed.'  # Yay!
+            print("Steps per mm:    %3d steps" % k)  # Tell user
+    print('Calibration completed.')  # Yay!
 except KeyboardInterrupt:
     pass
 finally:
--- a/printrun-src/gcodeplater.py	Tue Jan 19 20:44:16 2021 +0100
+++ b/printrun-src/gcodeplater.py	Tue Jan 19 20:45:09 2021 +0100
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 
 # This file is part of the Printrun suite.
 #
--- a/printrun-src/locale/ar/LC_MESSAGES/plater.po	Tue Jan 19 20:44:16 2021 +0100
+++ b/printrun-src/locale/ar/LC_MESSAGES/plater.po	Tue Jan 19 20:45:09 2021 +0100
@@ -57,7 +57,7 @@
 
 #: plater.py:291
 msgid "Autoplating"
-msgstr "
+msgstr ""
 
 #: plater.py:319
 msgid "Bed full, sorry sir :("
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/printrun-src/locale/hy/LC_MESSAGES/plater.po	Tue Jan 19 20:45:09 2021 +0100
@@ -0,0 +1,91 @@
+# Armenian Plater Message Catalog
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Plater\n"
+"POT-Creation-Date: 2012-08-04 21:53+CEST\n"
+"PO-Revision-Date: 2020-18-04 11:16+CEST\n"
+"Last-Translator: Avag Sayan <info@armath.am>\n"
+"Language-Team: Armath Engineering Labs, info@armath.am\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: pygettext.py 1.5\n"
+"Language: hy_AM\n"
+
+
+#: plater.py:246
+msgid "Plate building tool"
+msgstr "Հատակը կառուցելու գործիք"
+
+#: plater.py:252
+msgid "Clear"
+msgstr "Մաքրել"
+
+#: plater.py:253
+msgid "Load"
+msgstr "Բեռնել"
+
+#: plater.py:255 plater.py:258
+msgid "Export"
+msgstr "Արտահանել"
+
+#: plater.py:260
+msgid "Done"
+msgstr "Կատարված"
+
+#: plater.py:262
+msgid "Cancel"
+msgstr ""
+
+#: plater.py:264
+msgid "Snap to Z = 0"
+msgstr "Փակցնել Z = 0"
+
+#: plater.py:265
+msgid "Put at 100, 100"
+msgstr "Ներդնել 100, 100"
+
+#: plater.py:266
+msgid "Delete"
+msgstr "Ջնջել"
+
+#: plater.py:267
+msgid "Auto"
+msgstr "Ավտոմատ"
+
+#: plater.py:291
+msgid "Autoplating"
+msgstr "Ինքնահարթեցում"
+
+#: plater.py:319
+msgid "Bed full, sorry sir :("
+msgstr "Ներեղություն, հարթակը լցված է :("
+
+#: plater.py:329
+msgid "Are you sure you want to clear the grid? All unsaved changes will be lost."
+msgstr "Իրո՞ք ցանկանում եք մաքրել ցանցը: Չպահված փոփոխությունները կկորեն:"
+
+#: plater.py:329
+msgid "Clear the grid?"
+msgstr "Մաքրել ցանցը"
+
+#: plater.py:371
+msgid "Pick file to save to"
+msgstr "Ընտրել նիշքը պահելու համար"
+
+#: plater.py:372
+msgid "STL files (;*.stl;*.STL;)"
+msgstr "STL նիշք (;*.stl;*.STL;)"
+
+#: plater.py:393
+msgid "wrote %s"
+msgstr "Գրված %s"
+
+#: plater.py:396
+msgid "Pick file to load"
+msgstr "Ընտրել նիշքը բեռնելու համար"
+
+#: plater.py:397
+msgid "STL files (;*.stl;*.STL;)|*.stl|OpenSCAD files (;*.scad;)|*.scad"
+msgstr "STL նիշք (;*.stl;*.STL;)|*.stl|OpenSCAD նիշք (;*.scad;)|*.scad"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/printrun-src/locale/hy/LC_MESSAGES/pronterface.po	Tue Jan 19 20:45:09 2021 +0100
@@ -0,0 +1,1995 @@
+# Armenian Pronterface Message Catalog
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Pronterface\n"
+"POT-Creation-Date: 2014-03-30 14:35+CEST\n"
+"PO-Revision-Date: 2020-04-17 22:36+0400\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: pygettext.py 1.5\n"
+"Last-Translator: Avag Sayan <info@armath.am>\n"
+"Language-Team: Armath Engineering Labs, info@armath.am\n"
+"X-Generator: Poedit 2.0.6\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"Language: hy_AM\n"
+
+#: printrun/excluder.py:26
+msgid "Part excluder: draw rectangles where print instructions should be ignored"
+msgstr "Դետալի բացառում` գծել ուղղանկյունի, որտեղ տպման հրահանգները կանտեսվեն"
+
+#: printrun/excluder.py:27 printrun/excluder.py:29
+msgid "Reset selection"
+msgstr "Մաքրել նշածը"
+
+#: printrun/gcodeplater.py:43 printrun/gcodeplater.py:44
+msgid "GCODE files (*.gcode;*.GCODE;*.g)"
+msgstr "GCODE նիշքեր (*.gcode;*.GCODE;*.g)"
+
+#: printrun/gcodeplater.py:112 printrun/gcodeplater.py:152
+msgid "Warning: no rotation support for now, object won't be correctly rotated"
+msgstr "Զգուշացում ՝ այս պահին չկա պտտման հնարավորություն, օբյեկտները չեն կարող ճշգրիտ պտտվել"
+
+#: printrun/gcodeplater.py:141 printrun/gcodeplater.py:178
+msgid "Exported merged G-Codes to %s"
+msgstr "Արտահանված G-Code-ը վերածել %-ի"
+
+#: printrun/gcview.py:352
+msgid "Fit to plate"
+msgstr "Ֆիքսել հարթությանը"
+
+#: printrun/gcview.py:353
+msgid "Fit to plate [F]"
+msgstr "Ֆիքսել հարթությանը [F]"
+
+#: printrun/gui/__init__.py:19 printrun/pronterface.py:45
+msgid "WX is not installed. This program requires WX to run."
+msgstr "WX-ը չի տեղադրվել. Pronterface-ը բացելու համար պահանջում է WX։"
+
+#: printrun/gui/__init__.py:159
+msgid "Commands"
+msgstr "Հրամաններ"
+
+#: printrun/gui/__init__.py:160
+msgid "Status"
+msgstr "Կարգավիճակ"
+
+#: printrun/gui/controls.py:126
+msgid "Heat:"
+msgstr "Գլխիկ՝"
+
+#: printrun/gui/controls.py:129
+msgid "Switch Hotend Off"
+msgstr "Անջատել տաքացումը"
+
+#: printrun/gui/controls.py:129 printrun/gui/controls.py:149
+#: printrun/gui/toolbar.py:85
+msgid "Off"
+msgstr "ԱՆջատել"
+
+#: printrun/gui/controls.py:137
+msgid "Select Temperature for Hotend"
+msgstr "Նշել Ջերմաստիճանը Hotend-ի համար"
+
+#: printrun/gui/controls.py:141
+msgid "Switch Hotend On"
+msgstr "Միացնել գլխիկը"
+
+#: printrun/gui/controls.py:141 printrun/gui/controls.py:161
+#: printrun/gui/controls.py:198
+msgid "Set"
+msgstr "Հաստատել"
+
+#: printrun/gui/controls.py:146 printrun/gui/controls.py:215
+msgid "Bed:"
+msgstr "Հարթակ՝"
+
+#: printrun/gui/controls.py:149
+msgid "Switch Heated Bed Off"
+msgstr "Անջատել տաքացվող հարթակը"
+
+#: printrun/gui/controls.py:157
+msgid "Select Temperature for Heated Bed"
+msgstr "Նշել Տաքացվող հարթակի Ջերմաստիճանը"
+
+#: printrun/gui/controls.py:161
+msgid "Switch Heated Bed On"
+msgstr "Միացնել տաքացվող հարթակը"
+
+#: printrun/gui/controls.py:187
+msgid "Print speed:"
+msgstr "Տպիչի արագություն ՝"
+
+#: printrun/gui/controls.py:192 printrun/gui/controls.py:207
+msgid "%d%%"
+msgstr "%d%%"
+
+#: printrun/gui/controls.py:198
+msgid "Set print speed factor"
+msgstr "Սահմանել տպիչի արագության գործակիցը"
+
+#: printrun/gui/controls.py:213
+msgid "Heater:"
+msgstr "Տաքացուցիչ`"
+
+#: printrun/gui/controls.py:265
+msgid "Length:"
+msgstr "Երկարություն`"
+
+#: printrun/gui/controls.py:267
+msgid "mm"
+msgstr "մմ"
+
+#: printrun/gui/controls.py:267
+msgid "mm @"
+msgstr "մմ"
+
+#: printrun/gui/controls.py:269
+msgid "Amount to Extrude or Retract (mm)"
+msgstr "Դուրս մղելու կամ հետ քաշելու չափը (մմ)"
+
+#: printrun/gui/controls.py:272
+msgid "Extrude / Retract speed (mm/min)"
+msgstr "Դուրս մղել / Հետ քաշել (մմ/ր)"
+
+#: printrun/gui/controls.py:278
+msgid "Speed:"
+msgstr "Արագություն:"
+
+#: printrun/gui/controls.py:279
+msgid ""
+"mm/\n"
+"min"
+msgstr " մմ/ր"
+
+#: printrun/gui/controls.py:290
+msgid "Tool:"
+msgstr "Գործիք`"
+
+#: printrun/gui/controls.py:293
+msgid "Click to switch current extruder"
+msgstr "Սեղմել այստեղ ընթացիկ «Էքստրուդեր»ը փոխարինելու համար"
+
+#: printrun/gui/controls.py:310
+msgid "Select current extruder"
+msgstr "Նշել ընթացիկ «Էքստրուդեր»ը"
+
+#: printrun/gui/controls.py:371
+msgid "Set Maximum Speed for X & Y axes (mm/min)"
+msgstr "Սահմանել Առավելագույն Արագություն X և Y առանցքների համար (մմ/ր)"
+
+#: printrun/gui/controls.py:372
+msgid "XY:"
+msgstr "XY ՝"
+
+#: printrun/gui/controls.py:374
+msgid "mm/min Z:"
+msgstr "մմ/ր Z `"
+
+#: printrun/gui/controls.py:376
+msgid "Set Maximum Speed for Z axis (mm/min)"
+msgstr "Սահմանել Առավելագույն Արագություն Z առանցքի համար (մմ/ր)"
+
+#: printrun/gui/graph.py:28
+msgid "Temperature graph"
+msgstr "Ջերմաստիճանի գծապատկեր"
+
+#: printrun/gui/log.py:32
+msgid ""
+"Send commands to printer\n"
+"(Type 'help' for simple\n"
+"help function)"
+msgstr ""
+"Ուղարկել հրամանները տպիչին\n"
+"(Հավաքել ’help’ պարզագույն օգնության համար\n"
+")"
+
+#: printrun/gui/log.py:39
+msgid "Send"
+msgstr "Ուղարկել"
+
+#: printrun/gui/log.py:39
+msgid "Send Command to Printer"
+msgstr "Ուղարկել հրամանը տպիչին"
+
+#: printrun/gui/toolbar.py:23
+msgid "Lock"
+msgstr "Կողպել"
+
+#: printrun/gui/toolbar.py:25
+msgid "Lock graphical interface"
+msgstr "Կողպել գրաֆիկ միջերեսը (interface)"
+
+#: printrun/gui/toolbar.py:32
+msgid ""
+"Communication Settings\n"
+"Click to rescan ports"
+msgstr ""
+"Հաղորդակցման կարգավորումներ\n"
+"Կտտացրեք port-ը կրկին սկանավորելու համար"
+
+#: printrun/gui/toolbar.py:32
+msgid "Port"
+msgstr "Port"
+
+#: printrun/gui/toolbar.py:37
+msgid "Select Port Printer is connected to"
+msgstr "Տպիչի նշված Port-ը միացված է"
+
+#: printrun/gui/toolbar.py:46
+msgid "Select Baud rate for printer communication"
+msgstr "Տպիչի հաղորդակցման համար ընտրել փոխանցման արագությունը"
+
+#: printrun/gui/toolbar.py:55 printrun/pronterface.py:1052
+msgid "Connect"
+msgstr "Միանալ"
+
+#: printrun/gui/toolbar.py:55 printrun/pronterface.py:1053
+msgid "Connect to the printer"
+msgstr "Միանալ տպիչին"
+
+#: printrun/gui/toolbar.py:61
+msgid "Reset"
+msgstr "Վերատեղադրել"
+
+#: printrun/gui/toolbar.py:61
+msgid "Reset the printer"
+msgstr "Վերատեղադրել տպիչը"
+
+#: printrun/gui/toolbar.py:69
+msgid "Load a 3D model file"
+msgstr "Բեռնել3D մոդելի նիշքը"
+
+#: printrun/gui/toolbar.py:69
+msgid "Load file"
+msgstr "Բեռնել նիշքը"
+
+#: printrun/gui/toolbar.py:70
+msgid "SD"
+msgstr "SD"
+
+#: printrun/gui/toolbar.py:70
+msgid "SD Card Printing"
+msgstr "SD կրիչի տպագրում"
+
+#: printrun/gui/toolbar.py:74
+msgid "Start Printing Loaded File"
+msgstr "Մեկնարկել բեռնված նիշքի տպագրությունը"
+
+#: printrun/gui/toolbar.py:74 printrun/pronterface.py:1003
+#: printrun/pronterface.py:1062 printrun/pronterface.py:1078
+#: printrun/pronterface.py:1363 printrun/pronterface.py:1445
+msgid "Print"
+msgstr "Տպել"
+
+#: printrun/gui/toolbar.py:80
+msgid "Pause Current Print"
+msgstr "Դադարեցնել ընթացիկ տպագրությունը"
+
+#: printrun/gui/toolbar.py:80 printrun/pronterface.py:1002
+#: printrun/pronterface.py:1061 printrun/pronterface.py:1081
+#: printrun/pronterface.py:1091 printrun/pronterface.py:1172
+#: printrun/pronterface.py:1364
+msgid "Pause"
+msgstr "Դադար"
+
+#: printrun/gui/toolbar.py:85
+msgid "Turn printer off"
+msgstr "Անջատել տպիչը"
+
+#: printrun/gui/viz.py:65
+msgid ""
+"Click to examine / edit\n"
+"  layers of loaded file"
+msgstr ""
+"Սեղմել այստեղ ուսումնասիրելու / խմբագրելու\n"
+"բեռնված նիշքի շերտերը"
+
+#: printrun/gui/widgets.py:36
+msgid "Find"
+msgstr "Փնտրել"
+
+#: printrun/gui/widgets.py:38
+msgid "Save"
+msgstr "Պահել"
+
+#: printrun/gui/widgets.py:43 printrun/objectplater.py:76
+#: printrun/pronterface.py:1257 printrun/pronterface.py:2017
+msgid "Cancel"
+msgstr "Չեղարկել"
+
+#: printrun/gui/widgets.py:70
+msgid "Not Found!"
+msgstr "Չի գտնվել!"
+
+#: printrun/gui/widgets.py:124
+msgid "Printer settings"
+msgstr "Տպիչի կարգավորումներ"
+
+#: printrun/gui/widgets.py:125
+msgid "User interface"
+msgstr "Օգտագործողի միջերես"
+
+#: printrun/gui/widgets.py:126
+msgid "Colors"
+msgstr "Գույներ"
+
+#: printrun/gui/widgets.py:127
+msgid "External commands"
+msgstr "Արտաքին հրամաններ"
+
+#: printrun/gui/widgets.py:132
+msgid "Edit settings"
+msgstr "Խմբագրել կարգավորումները"
+
+#: printrun/gui/widgets.py:135
+msgid "Settings"
+msgstr "Կարգավորումներ"
+
+#: printrun/gui/widgets.py:187
+msgid "Custom button"
+msgstr "Անհատական կոճակ"
+
+#: printrun/gui/widgets.py:193
+msgid "Button title"
+msgstr "Կոճակի անուն"
+
+#: printrun/gui/widgets.py:196
+msgid "Command"
+msgstr "Հրաման"
+
+#: printrun/gui/widgets.py:205
+msgid "Color"
+msgstr "Գույն"
+
+#: printrun/gviz.py:29
+msgid "Layer number and Z position show here when you scroll"
+msgstr "Շերտի համարը և Z-ի դիրքը ցուցադրել այստեղ, երբ պտտում ենք մկնիկը"
+
+#: printrun/gviz.py:39
+msgid "Zoom In [+]"
+msgstr "Խոշորացնել [+]"
+
+#: printrun/gviz.py:40
+msgid "Zoom Out [-]"
+msgstr "Մանրացնել [-]"
+
+#: printrun/gviz.py:42
+msgid "Move Up a Layer [U]"
+msgstr "Տեղափոխվել վերևի շերտ [U]"
+
+#: printrun/gviz.py:43
+msgid "Move Down a Layer [D]"
+msgstr "Տեղափոխվել ներգևի շերտ[D]"
+
+#: printrun/gviz.py:44
+msgid "Reset view"
+msgstr "Զրոացնել տեսքը"
+
+#: printrun/gviz.py:68
+msgid "Gcode view, shift to move view, mousewheel to set layer"
+msgstr "Gcode-ի տեսք, փոխել տեղափոխման տեսքի, մկնիկի անիվի պտտմամբ սահմանել շերտը"
+
+#: printrun/gviz.py:105 printrun/gviz.py:241
+msgid "Layer %d - Going Up - Z = %.03f mm"
+msgstr "Շերտ %d - Գնալ վեր - Z = %.03f մմ"
+
+#: printrun/gviz.py:250
+msgid "Layer %d - Going Down - Z = %.03f mm"
+msgstr "Շերտ %d - Գնալ վար - Z = %.03f մմ"
+
+#: printrun/objectplater.py:35
+msgid "Plate building tool"
+msgstr "Տախտակը պատրաստելու գործիք"
+
+#: printrun/objectplater.py:45
+msgid "Clear"
+msgstr "Մաքրել"
+
+#: printrun/objectplater.py:49
+msgid "Load"
+msgstr "Բեռնել"
+
+#: printrun/objectplater.py:53
+msgid "Snap to Z = 0"
+msgstr "Կպնել Z = 0 - ին"
+
+#: printrun/objectplater.py:57
+msgid "Put at center"
+msgstr "Դնել կենտրոնի վրա"
+
+#: printrun/objectplater.py:61
+msgid "Delete"
+msgstr "Ջնջել"
+
+#: printrun/objectplater.py:65
+msgid "Auto arrange"
+msgstr "Ավտոմատ դասակարգում"
+
+#: printrun/objectplater.py:69
+msgid "Export"
+msgstr "Արտահանել"
+
+#: printrun/objectplater.py:73
+msgid "Done"
+msgstr "Կատարված"
+
+#: printrun/objectplater.py:151
+msgid "Autoplating"
+msgstr "Autoplating"
+
+#: printrun/objectplater.py:199
+msgid "Bed full, sorry sir :("
+msgstr "Կներեք, բայց հարթակը լիքն է :("
+
+#: printrun/objectplater.py:209
+msgid "Are you sure you want to clear the grid? All unsaved changes will be lost."
+msgstr "Իրո՞ք ցանկանում եք մաքրել ցանցը: Փոփոխությունները չեն պահպանվի:"
+
+#: printrun/objectplater.py:210
+msgid "Clear the grid?"
+msgstr "Ցանցը մաքրել?"
+
+#: printrun/objectplater.py:256
+msgid "Pick file to load"
+msgstr "Նշել նիշքը բեռնելու համար"
+
+#: printrun/objectplater.py:267
+msgid "Pick file to save to"
+msgstr "Նշել նիշքը պահելու համար"
+
+#: printrun/plater.py:212
+msgid "STL files (*.stl;*.STL)|*.stl;*.STL|OpenSCAD files (*.scad)|*.scad"
+msgstr "STL նիշքեր (*.stl;*.STL)|*.stl;*.STL|OpenSCAD files (*.scad)|*.scad"
+
+#: printrun/plater.py:213
+msgid "STL files (*.stl;*.STL)|*.stl;*.STL"
+msgstr "STL նիշքեր (*.stl;*.STL)|*.stl;*.STL"
+
+#: printrun/plater.py:244
+msgid "Loading STL file failed"
+msgstr "STL նիշքի բեռնումը ձախողվեց"
+
+#: printrun/plater.py:244 printrun/plater.py:251
+msgid "Error"
+msgstr "Սխալ"
+
+#: printrun/plater.py:251
+msgid "Loading OpenSCAD file failed"
+msgstr "OpenSCAD նիշքի բեռնումը ձախողվեց"
+
+#: printrun/plater.py:284
+msgid "Couldn't load non-existing file %s"
+msgstr "Հնարավոր չի բեռնել գոյություն չունեցող նիշքը ՝ %s"
+
+#: printrun/plater.py:360
+msgid "Wrote plate to %s"
+msgstr "ֆիքսել հարթակը %s-ին"
+
+#: printrun/plater.py:367
+msgid "Failed to use simarrange for plating, falling back to the standard method"
+msgstr "Տախտակի օգտագործման պարզեցումը ձախողվեց, վեռարդառձ ստանդարտ մեթոդին"
+
+#: printrun/plater.py:372
+msgid "Autoplating using simarrange"
+msgstr "Տախտակի օգտագործման ավտոմատ պարզեցում"
+
+#: printrun/plater.py:387
+msgid "Plate full, please remove some objects"
+msgstr "Տախտակը լիքն է, խնդրում ենք հանել որոշ օբյեկտներ"
+
+#: printrun/plater.py:404
+msgid "simarrange failed"
+msgstr "Պարզեցումը ձախողվեց"
+
+#: printrun/printcore.py:177
+msgid "Could not connect to %s:%s:"
+msgstr "Չի կարող միանալ %s:%s-ին ՝"
+
+#: printrun/printcore.py:178
+msgid "Socket error %s:"
+msgstr "Աղբյուրի սխալմունք %s ՝"
+
+#: printrun/printcore.py:191 printrun/printcore.py:196
+msgid "Could not connect to %s at baudrate %s:"
+msgstr "Անհնար է միանալ %s  %sbaudrate-ին`"
+
+#: printrun/printcore.py:192
+msgid "Serial error: %s"
+msgstr "Serial-ի սխալ` %s "
+
+#: printrun/printcore.py:197
+msgid "IO error: %s"
+msgstr "IO սխալ ՝ %s"
+
+#: printrun/printcore.py:231
+msgid "Can't read from printer (disconnected?) (SelectError {0}): {1}"
+msgstr "Չի կարող կարդալ տպիչից  (մի գուցե միացված չէ) (SelectError {0}): {1}"
+
+#: printrun/printcore.py:234
+msgid "SelectError ({0}): {1}"
+msgstr "SelectError ({0}): {1}"
+
+#: printrun/printcore.py:237
+msgid "Can't read from printer (disconnected?) (SerialException): {0}"
+msgstr "Չի կարող կարդալ տպիչից  (մի գուցե միացված չէ) (SerialException): {0}"
+
+#: printrun/printcore.py:240
+msgid "Can't read from printer (disconnected?) (Socket error {0}): {1}"
+msgstr "Չի կարող կարդալ տպիչից  (մի գուցե միացված չէ) (Socket error {0}): {1}"
+
+#: printrun/printcore.py:245
+msgid "Can't read from printer (disconnected?) (OS Error {0}): {1}"
+msgstr "Չի կարող կարդալ տպիչից  (մի գուցե միացված չէ) (OS Error {0}): {1}"
+
+#: printrun/printcore.py:259
+msgid "Aborting connection attempt after 4 failed writes."
+msgstr "4 անգամվա ձախողված միացման փորձից հետո չեղարկվում է "
+
+#: printrun/printcore.py:462 printrun/printcore.py:470
+#: printrun/pronsole.py:1192 printrun/pronsole.py:1250
+#: printrun/pronterface.py:209 printrun/pronterface.py:962
+#: printrun/pronterface.py:1111 printrun/pronterface.py:1178
+msgid "Not connected to printer."
+msgstr "Միացված չէ տպիչին"
+
+#: printrun/printcore.py:479
+msgid "Print start callback failed with:"
+msgstr "Տպման մեկնարկի արձագանքը ձախողվեց հետևյալ պատճառով ՝"
+
+#: printrun/printcore.py:490
+msgid "Print end callback failed with:"
+msgstr "Տպման ավարտի արձագանքը ձախողվեց հետևյալ պատճառով ՝"
+
+#: printrun/printcore.py:493
+msgid "Print thread died due to the following error:"
+msgstr "Տպման քայլը անջատվեց հետևյալ սխալի պատճառով ՝"
+
+#: printrun/printcore.py:584
+msgid "Could not analyze command %s:"
+msgstr "Հնարավոր չէ վերլուծել % s հրամանը"
+
+#: printrun/printcore.py:601
+msgid "Can't write to printer (disconnected ?):"
+msgstr "Հնարավոր չէ գրանցել տպիչը (մի գուցե միացված չէ)"
+
+#: printrun/printcore.py:604
+msgid "Can't write to printer (disconnected?) (Socket error {0}): {1}"
+msgstr "Հնարավոր չէ գրանցել տպիչը (մի գուցե միացված չէ) (Socket error {0}): {1}"
+
+#: printrun/printcore.py:607
+msgid "Can't write to printer (disconnected?) (SerialException): {0}"
+msgstr "Հնարավոր չէ գրանցել տպիչը (մի գուցե միացված չէ) (SerialException): {0}"
+
+#: printrun/printcore.py:610
+msgid "Socket connection broken, disconnected. ({0}): {1}"
+msgstr "Աղբյուրի միացումը անջատվեց, միացված չե: ({0}): {1}"
+
+#: printrun/pronsole.py:72
+msgid "Default: "
+msgstr "Լռելայն ՝"
+
+#: printrun/pronsole.py:73
+msgid "(Control-doubleclick to reset to default value)"
+msgstr "(կրկնակի սեղմել Ctrl` լռելայն արժեքները գործադրելու համար )"
+
+#: printrun/pronsole.py:108
+msgid "Are you sure you want to reset the setting to the default value: {0!r} ?"
+msgstr "Իրոք ցանկանում եք զրոացնել կարգավորումները բերելով լռելայն արժեքների `{0!r} ?"
+
+#: printrun/pronsole.py:108
+msgid "Confirm set default"
+msgstr "Հաստատել լռելայնի անցումը"
+
+#: printrun/pronsole.py:258
+msgid "Width"
+msgstr "Հաստություն"
+
+#: printrun/pronsole.py:261
+msgid "Depth"
+msgstr "Խորություն"
+
+#: printrun/pronsole.py:264
+msgid "Height"
+msgstr "Բարձրություն"
+
+#: printrun/pronsole.py:267
+msgid "X offset"
+msgstr "X offset"
+
+#: printrun/pronsole.py:270
+msgid "Y offset"
+msgstr "Y offset"
+
+#: printrun/pronsole.py:273
+msgid "Z offset"
+msgstr "Y offset"
+
+#: printrun/pronsole.py:276
+msgid "X home pos."
+msgstr "X սկզբնական դիրք"
+
+#: printrun/pronsole.py:279
+msgid "Y home pos."
+msgstr "Y սկզբնական դիրք"
+
+#: printrun/pronsole.py:282
+msgid "Z home pos."
+msgstr "Z սկզբնական դիրք"
+
+#: printrun/pronsole.py:301
+msgid "Port used to communicate with printer"
+msgstr "Port-ը օգտագործվում է տպիչին միանալու համար"
+
+#: printrun/pronsole.py:301
+msgid "Serial port"
+msgstr "Հաջորդական port"
+
+#: printrun/pronsole.py:302
+msgid "Baud rate"
+msgstr "Փոխանցման արագություն"
+
+#: printrun/pronsole.py:302
+msgid "Communications Speed"
+msgstr "Հաղորդակցման արագություն"
+
+#: printrun/pronsole.py:303
+msgid "TCP streaming mode"
+msgstr "TCP հոսքային ռեժիմ"
+
+#: printrun/pronsole.py:303
+msgid "When using a TCP connection to the printer, the streaming mode will not wait for acks from the printer to send new commands. This will break things such as ETA prediction, but can result in smoother prints."
+msgstr "Երբ օգտագործում ենք տպիչին միանալու TCP միացում, ապա հոսքային ռեժիմը չի սպասի տպիչի կողմից նոր հրամանների: Սա կխախտի այնպիսի բան, ինչպիսն է ETA- ի կանխատեսումը, բայց կարող են հանգեցնել ավելի հարթ տպագրության:"
+
+#: printrun/pronsole.py:304
+msgid "Bed temperature for ABS"
+msgstr "Հարթակի ջերմաստիճանը ABS-ի համար"
+
+#: printrun/pronsole.py:304
+msgid "Heated Build Platform temp for ABS (deg C)"
+msgstr "Տաքացվող պլաֆորմի ջերմաստիճանը ABS-ի համար (աստ. C)"
+
+#: printrun/pronsole.py:305
+msgid "Bed temperature for PLA"
+msgstr "Հարթակի ջերմաստիճանը PLA-ի համար"
+
+#: printrun/pronsole.py:305
+msgid "Heated Build Platform temp for PLA (deg C)"
+msgstr "Տաքացվող պլաֆորմի ջերմաստիճանը PLA-ի համար (աստ. C)"
+
+#: printrun/pronsole.py:306
+msgid "Extruder temp for ABS (deg C)"
+msgstr "Գլխիկի ջերմաստիճանը ABS-ի համար (աստ. C)"
+
+#: printrun/pronsole.py:306
+msgid "Extruder temperature for ABS"
+msgstr "Գլխիկի ջերմաստիճանը ABS-ի համար "
+
+#: printrun/pronsole.py:307
+msgid "Extruder temp for PLA (deg C)"
+msgstr "Գլխիկի ջերմաստիճանը PLA-ի համար (աստ. C)"
+
+#: printrun/pronsole.py:307
+msgid "Extruder temperature for PLA"
+msgstr "Գլխիկի ջերմաստիճանը PLA-ի համար (աստ. C)"
+
+#: printrun/pronsole.py:308
+msgid "Feedrate for Control Panel Moves in X and Y (mm/min)"
+msgstr "Սնուցման արագությունը կառավարման վահանակի X and Y շարժման համար (մմ/ր)"
+
+#: printrun/pronsole.py:308
+msgid "X && Y manual feedrate"
+msgstr "X && Y ձեռքով սնուցման արագություն"
+
+#: printrun/pronsole.py:309
+msgid "Feedrate for Control Panel Moves in Z (mm/min)"
+msgstr "Սնուցման արագությունը կառավարման վահանակի Z շարժման համար (մմ/ր)"
+
+#: printrun/pronsole.py:309
+msgid "Z manual feedrate"
+msgstr "Z ձեռքով սնուցման արագություն"
+
+#: printrun/pronsole.py:310
+msgid "E manual feedrate"
+msgstr "E ձեռքով սնուցման արագություն"
+
+#: printrun/pronsole.py:310
+msgid "Feedrate for Control Panel Moves in Extrusions (mm/min)"
+msgstr "Սնուցման արագությունը կառավարման վահանակի E շարժման համար (մմ/ր)"
+
+#: printrun/pronsole.py:311
+msgid "Slice command"
+msgstr "Շերտավորման հրաման"
+
+#: printrun/pronsole.py:312
+msgid "Slice settings command"
+msgstr "Շերտավորման կարգավորման հրաման"
+
+#: printrun/pronsole.py:312
+msgid "Slicer options command"
+msgstr "Շերտավորման նախընտրանքի հրաման"
+
+#: printrun/pronsole.py:313
+msgid "Executable to run when the print is finished"
+msgstr "Գործարկել, երբ տպագրությունը ավարտվում է"
+
+#: printrun/pronsole.py:313
+msgid "Final command"
+msgstr "Ավարտման հրաման"
+
+#: printrun/pronsole.py:314
+msgid "Error command"
+msgstr "Սխալ հրաման"
+
+#: printrun/pronsole.py:314
+msgid "Executable to run when an error occurs"
+msgstr "Գործարկել, երբ սխալ է տեղի ունենում"
+
+#: printrun/pronsole.py:381
+msgid "Failed to run callback after setting \"%s\":"
+msgstr "Չհաջողվեց գրանցել հետ կանչը կարգավորումից հետո “%s” ՝"
+
+#: printrun/pronsole.py:469
+msgid "Build dimensions"
+msgstr "Կառուցման չափսերը"
+
+#: printrun/pronsole.py:469
+msgid ""
+"Dimensions of Build Platform\n"
+" & optional offset of origin\n"
+" & optional switch position\n"
+"\n"
+"Examples:\n"
+"   XXXxYYY\n"
+"   XXX,YYY,ZZZ\n"
+"   XXXxYYYxZZZ+OffX+OffY+OffZ\n"
+"XXXxYYYxZZZ+OffX+OffY+OffZ+HomeX+HomeY+HomeZ"
+msgstr ""
+"Կառոցվող պլաֆորմի չափսերը\n"
+" & optional offset of origin\n"
+" & optional switch position\n"
+"\n"
+"Օրինակներ ՝\n"
+"   XXXxYYY\n"
+"   XXX,YYY,ZZZ\n"
+"   XXXxYYYxZZZ+OffX+OffY+OffZ\n"
+"XXXxYYYxZZZ+OffX+OffY+OffZ+HomeX+HomeY+HomeZ"
+
+#: printrun/pronsole.py:495
+msgid "Welcome to the printer console! Type \"help\" for a list of available commands."
+msgstr "Բարի գալուստ տպիչի վահանակ! Հավաքել “help” ՝ հասանելի հրամանների ցանկը տեսնելու համար "
+
+#: printrun/pronsole.py:657 printrun/pronsole.py:665 printrun/pronsole.py:673
+#: printrun/pronsole.py:1519 printrun/pronsole.py:1546
+#: printrun/pronsole.py:1618 printrun/pronterface.py:357
+#: printrun/pronterface.py:377 printrun/pronterface.py:394
+msgid "Printer is not online."
+msgstr "Տպիչը միացված չե ցանցին:"
+
+#: printrun/pronsole.py:692
+msgid "Exiting program. Goodbye!"
+msgstr "Ծրագիրը փակվում է: Ցտեսություն!"
+
+#: printrun/pronsole.py:697
+msgid "Disconnects from the printer and exits the program."
+msgstr "Անջատել տպիչից և փակել ծրագիրը"
+
+#: printrun/pronsole.py:974
+msgid "load this file on startup instead of .pronsolerc ; you may chain config files, if so settings auto-save will use the last specified file"
+msgstr "Բեռնել այս նիշքը մեկնարկի ժամանակ .pronsolerc-ի փոխարեն; կարող եք շղթայել կարգավորման նիշքը և այդ դեպքում կարգավորումները ինքնուրույն կպահպանվեն օգտագործելով վերջին նիշքը"
+
+#: printrun/pronsole.py:975
+msgid "executes command after configuration/.pronsolerc is loaded ; macros/settings from these commands are not autosaved"
+msgstr "գործարկել հրամանը կարգավորման//.pronsolerc -ը բեռնելուց հետո; macro-ները/կարգավորումները այս հրամաններից հետո չեն կարող ինքնուրույն պահպանվել;"
+
+#: printrun/pronsole.py:976
+msgid "file to load"
+msgstr "բեռնելու նիշքը"
+
+#: printrun/pronsole.py:1104
+msgid "Loaded %s, %d lines."
+msgstr "Բեռնված %s, %d գծերը."
+
+#: printrun/pronsole.py:1105 printrun/pronterface.py:1381
+msgid "Estimated duration: %d layers, %s"
+msgstr "Գնահատված տևողությունը: %d շերտեր, %s"
+
+#: printrun/pronsole.py:1134
+msgid "No file name given."
+msgstr "Նիշքի անունը տված չե:"
+
+#: printrun/pronsole.py:1140
+msgid "Skeining file: %s"
+msgstr "Skeining նիշք: %s"
+
+#: printrun/pronsole.py:1142 printrun/pronterface.py:1305
+msgid "File not found!"
+msgstr "Նիշքտ չի գտնվել!"
+
+#: printrun/pronsole.py:1147
+msgid "Entering slicer settings: %s"
+msgstr "Գնալ slicer-ի կարգավորումներ"
+
+#: printrun/pronsole.py:1151
+msgid "Slicing: "
+msgstr "Շերտավորել:"
+
+#: printrun/pronsole.py:1158
+msgid "Loading sliced file."
+msgstr "Շերտավորած նիշքի բեռնում."
+
+#: printrun/pronsole.py:1161
+msgid "Slicing failed: %s"
+msgstr "Շերտավորումը ձախողվեց: %s"
+
+#: printrun/pronsole.py:1174
+msgid "Creates a gcode file from an stl model using the slicer (with tab-completion)"
+msgstr "stl մոդելից ստեղծել .gcode նիշք օգտագործելով slicer-ը (ներդիրի ավարտման հետ)"
+
+#: printrun/pronsole.py:1175
+msgid "slice filename.stl - create gcode file"
+msgstr "շերտավորել filename.stl - ստեղծել gcode նիշք"
+
+#: printrun/pronsole.py:1176
+msgid "slice filename.stl view - create gcode file and view using skeiniso (if using skeinforge)"
+msgstr "շերտավորել filename.stl տեսքը - ստեղծել gcode նիշք և դիտել օգտագործելով skeiniso (եթե օգտագործում է skeinforge)"
+
+#: printrun/pronsole.py:1177
+msgid "slice set - adjust slicer settings"
+msgstr "սահմանել շերտը - հարմարեցնել slicer-ի կարգավորումը"
+
+#: printrun/pronsole.py:1189
+msgid "Please enter target name in 8.3 format."
+msgstr "Խնդրում ենք մուտքագրել թիրախի անունը 8.3 ձևաչափով:"
+
+#: printrun/pronsole.py:1195
+msgid "Uploading as %s"
+msgstr "Վերբեռնում է որպես %s"
+
+#: printrun/pronsole.py:1196
+msgid "Uploading %s"
+msgstr "%s-ի վերբեռնում"
+
+#: printrun/pronsole.py:1198
+msgid "Press Ctrl-C to interrupt upload."
+msgstr "Սեղմել Ctrl-C վերբեռնումը չեղարկելու համար:"
+
+#: printrun/pronsole.py:1201
+msgid "Progress: "
+msgstr "Պրոգրես `"
+
+#: printrun/pronsole.py:1212
+msgid "Upload completed. %s should now be on the card."
+msgstr "Վերբեռնումը ավարտվեց: %s-ը պետք է լինի արդեն կրիչի վրա:"
+
+#: printrun/pronsole.py:1216
+msgid "...interrupted!"
+msgstr "… ընդհատվեց!"
+
+#: printrun/pronsole.py:1218
+msgid "Something wrong happened while uploading:"
+msgstr "Վերբեռնման ժամանակ ինչ որ սխալ տեղի ունեցավ `"
+
+#: printrun/pronsole.py:1224
+msgid "A partial file named %s may have been written to the sd card."
+msgstr "Հնարավոր է %s անունով մասնակի նիշք է պահվել SD կրիչի վրա:"
+
+#: printrun/pronsole.py:1241
+msgid "Send a loaded gcode file to the printer. Load a file with the load command first."
+msgstr "Ուղարկել բենված gcode նիշքը տպիչին: Առաջին հերթին բեռնել նիշքը բեռնման հրամանի հետ:"
+
+#: printrun/pronsole.py:1243
+msgid "Send a loaded gcode file to the printer. You have %s loaded right now."
+msgstr "Ուղարկել բենված gcode նիշքը տպիչին: Հենց նոր դուք բեռնեցիք %s նիշքը:"
+
+#: printrun/pronsole.py:1247 printrun/pronterface.py:730
+#: printrun/pronterface.py:1108
+msgid "No file loaded. Please use load first."
+msgstr "Նիշքը չի բեռնվել: Նախ պետ է բեռնել այն:"
+
+#: printrun/pronsole.py:1252
+msgid "Printing %s"
+msgstr "%s-ի տպագրություն"
+
+#: printrun/pronsole.py:1253
+msgid "You can monitor the print with the monitor command."
+msgstr "Դուք կարող եք վերահսկել տպագրությունը մոնիտորի հրամանով:"
+
+#: printrun/pronsole.py:1261
+msgid "Not printing, cannot pause."
+msgstr "Չի տպում, հնարավոր չե կանգնեցնել:"
+
+#: printrun/pronsole.py:1267
+msgid "Pauses a running print"
+msgstr "Դադարեցնում է ընթացիկ տպագրությունը"
+
+#: printrun/pronsole.py:1274
+msgid "Not paused, unable to resume. Start a print first."
+msgstr "Չի կանգնեցվել, անհնար է շարունակել: Սկզբից սկսեք տպագրությունը:"
+
+#: printrun/pronsole.py:1284
+msgid "Resumes a paused print."
+msgstr "Շարունակում է կանգենցված տպագրությունը:"
+
+#: printrun/pronsole.py:1293
+msgid "Files on SD card:"
+msgstr " SD կրիչի նիշքերը:"
+
+#: printrun/pronsole.py:1307 printrun/pronsole.py:1349
+#: printrun/pronsole.py:1562
+msgid "Printer is not online. Please connect to it first."
+msgstr "Տպիչը կապակցված չե: Նախ պետք է միացնել այն:"
+
+#: printrun/pronsole.py:1312
+msgid "Lists files on the SD card"
+msgstr "SD կրիչում առկա նիշքերի ցանկը"
+
+#: printrun/pronsole.py:1316 printrun/pronterface.py:1645
+msgid "Opening file failed."
+msgstr "Չհաջողվեց նիշքը բացել:"
+
+#: printrun/pronsole.py:1322 printrun/pronterface.py:1651
+msgid "Starting print"
+msgstr "Տպման մեկնարկ"
+
+#: printrun/pronsole.py:1345
+msgid "Resets the printer."
+msgstr "Զրոյացնել տպիչի կարգավորումներ:"
+
+#: printrun/pronsole.py:1355
+msgid "File is not present on card. Please upload it first."
+msgstr "Նիշքը առկա չե կրիչի վրա: Նախ պետք է այն վեռբեռնել:"
+
+#: printrun/pronsole.py:1359
+msgid "Printing file: %s from SD card."
+msgstr "Նիշքի տպագրում ՝ %s-ը SD կրիչից:"
+
+#: printrun/pronsole.py:1360
+msgid "Requesting SD print..."
+msgstr "SD տպագրման հայցում…"
+
+#: printrun/pronsole.py:1364
+msgid "Print a file from the SD card. Tab completes with available file names."
+msgstr "Տպել նիշքը SD կրիչից: Ներդիրն ամբողջական է առկա նիշքի անունով:"
+
+#: printrun/pronsole.py:1365
+msgid "sdprint filename.g"
+msgstr "sdprint filename.g"
+
+#: printrun/pronsole.py:1382
+msgid "Print resumed at: %s"
+msgstr "Տպագրությունը շարունակվում է %s-ում:"
+
+#: printrun/pronsole.py:1384
+msgid "Print started at: %s"
+msgstr "Տպագրությունը մեկնարկում է %s-ում"
+
+#: printrun/pronsole.py:1392
+msgid "Failed to inhibit sleep:"
+msgstr "Քուն հրամանի արգելակումը ձախողվեց`"
+
+#: printrun/pronsole.py:1399
+msgid "Failed to uninhibit sleep:"
+msgstr "Քուն հրամանի ապաարգելակումը ձախողվեց`"
+
+#: printrun/pronsole.py:1403
+msgid "Print ended at: %(end_time)s and took %(duration)s"
+msgstr "Տպագրումը վերջացավ՝ %(վերջանալու_ժամանակ)վրկ. և տևեց %(տևողությունը)վրկ."
+
+#: printrun/pronsole.py:1457
+msgid "Printer is not currently printing. No ETA available."
+msgstr "Տպիչը այս պահին չի տպում. ETA-ն հասանելի չի:"
+
+#: printrun/pronsole.py:1460
+msgid "Est: %s of %s remaining"
+msgstr "Գնահատում ՝մնացել է %s-ի %s-ը"
+
+#: printrun/pronsole.py:1465
+msgid "Displays estimated remaining print time."
+msgstr "Ցույց տալ, թե իչքան ժամանակ է մնացել տպագրությանը:"
+
+#: printrun/pronsole.py:1498
+msgid "Read the extruder and bed temperature."
+msgstr "Կարդալ գլխիկի և հարթակի ջերմաստիճանները:"
+
+#: printrun/pronsole.py:1507 printrun/pronsole.py:1540
+msgid "You must enter a temperature."
+msgstr "Դուք պետք է մուտքագրեք ջերմաստիճանը:"
+
+#: printrun/pronsole.py:1512
+msgid "%s is a high temperature to set your extruder to. Are you sure you want to do that?"
+msgstr "%s-ը առավելագույն ջերմաստիճանն է, որը կարող եք սահմանել Ձեր extruder-ի(գլխիկ) համար: Համոզվա՞ծ եք, որ ցանկանում եք դա անել:"
+
+#: printrun/pronsole.py:1517
+msgid "Setting hotend temperature to %s degrees Celsius."
+msgstr "Սահմանել տաքացման ջերմաստիճանը %s աստիճան Ցելսիուս:"
+
+#: printrun/pronsole.py:1521 printrun/pronterface.py:359
+msgid "You cannot set negative temperatures. To turn the hotend off entirely, set its temperature to 0."
+msgstr "Չեք կարող սահմանել բացասական արժեքով ջերմաստիճան: Տաքացումը ամբողջությամբ անջատելու համար սահմանեք 0 ջերմաստիճան:"
+
+#: printrun/pronsole.py:1524
+msgid "Sets the hotend temperature to the value entered."
+msgstr "Սահմանել տաքացման ջերմաստիճանը մուտքագրած արժեքի չափով:"
+
+#: printrun/pronsole.py:1525 printrun/pronsole.py:1552
+msgid "Enter either a temperature in celsius or one of the following keywords"
+msgstr "Մուտքագրել ջերմաստիճանը ցելսիուսով կամ հետևյալ հիմնաբառերից մեկով"
+
+#: printrun/pronsole.py:1544
+msgid "Setting bed temperature to %s degrees Celsius."
+msgstr "Սահմանել հարթակի ջերմաստիճանը %s աստիճան Ցելսիուս:"
+
+#: printrun/pronsole.py:1548 printrun/pronterface.py:379
+msgid "You cannot set negative temperatures. To turn the bed off entirely, set its temperature to 0."
+msgstr "Չեք կարող սահմանել բացասական արժեքով ջերմաստիճան: Հարթակի տաքացումը ամբողջությամբ անջատելու համար սահմանեք 0 ջերմաստիճան:"
+
+#: printrun/pronsole.py:1551
+msgid "Sets the bed temperature to the value entered."
+msgstr "Սահմանել հարթակի տաքացման ջերմաստիճանը մուտքագրած արժեքի չափով:"
+
+#: printrun/pronsole.py:1565
+msgid "Printer is not printing. Please print something before monitoring."
+msgstr "Տպիչը չի տպում: Տպեք մեկ այլ բան ուսումնասիերլուց հետո:"
+
+#: printrun/pronsole.py:1567
+msgid "Monitoring printer, use ^C to interrupt."
+msgstr "Տպիչի մոնիտորինգ, ^C կանգնեցնելու համար:"
+
+#: printrun/pronsole.py:1572 printrun/pronterface.py:329
+msgid "Invalid period given."
+msgstr "Տրված միջակայքը անվավեր է:"
+
+#: printrun/pronsole.py:1573
+msgid "Updating values every %f seconds."
+msgstr "Արժեքների թարմացում ամեն %f վարկյանը մեկը"
+
+#: printrun/pronsole.py:1584 printrun/pronsole.py:1587
+msgid "Print progress: "
+msgstr "Տպագրության ընթացքը:"
+
+#: printrun/pronsole.py:1595 printrun/pronterface.py:333
+msgid "Done monitoring."
+msgstr "Մոնիտորինը արված է:"
+
+#: printrun/pronsole.py:1599
+msgid "Monitor a machine's temperatures and an SD print's status."
+msgstr "Սարքի ջերմաստիճանների և SD տպագրման կարգավիճակի մոնիտորինգ"
+
+#: printrun/pronsole.py:1600
+msgid "monitor - Reports temperature and SD print status (if SD printing) every 5 seconds"
+msgstr "դիտարկում - Ամեն 5 վարկյանը մեկը զեկուցել ջերմաստիճանի և SD տպագրման կարգավիճակը (եթե SD-ով եք տպում)"
+
+#: printrun/pronsole.py:1601
+msgid "monitor 2 - Reports temperature and SD print status (if SD printing) every 2 seconds"
+msgstr "դիտարկում 2 - Ամեն 2 վարկյանը մեկը զեկուցել ջերմաստիճանի և SD տպագրման կարգավիճակը (եթե SD-ով եք տպում)"
+
+#: printrun/pronsole.py:1612
+msgid "You must specify the tool index as an integer."
+msgstr "Դուք պետք է մուտքագրեք գործիքի ինդեքսը, որպես ամբողջ թիվ:"
+
+#: printrun/pronsole.py:1616
+msgid "Using tool %d."
+msgstr "%d գործիքի օգտագործում:"
+
+#: printrun/pronsole.py:1620
+msgid "You cannot set negative tool numbers."
+msgstr "Գործիքի համար չեք կարող սահմանել բացասական արժեքներ:"
+
+#: printrun/pronsole.py:1623
+msgid "Switches to the specified tool (e.g. doing tool 1 will emit a T1 G-Code)."
+msgstr "Փոխարկում նշված գործիքին (գործիք 1-ի կատարումը կթողարկի T1 G-Code-ը ևայլն )"
+
+#: printrun/pronsole.py:1627
+msgid "No move specified."
+msgstr "Քայլը նշված չէ:"
+
+#: printrun/pronsole.py:1630 printrun/pronsole.py:1692
+#: printrun/pronsole.py:1735 printrun/pronsole.py:1762
+msgid "Printer is currently printing. Please pause the print before you issue manual commands."
+msgstr "Տպիչն այս պահի տպում է: Խնդրում ենք կանգնեցրեք այն, մինչ ձեռքով հրամանների կատարումը:"
+
+#: printrun/pronsole.py:1633 printrun/pronsole.py:1759
+msgid "Printer is not online. Unable to move."
+msgstr "Տպիչը կապակցված չէ: Ահնար է շարժել:"
+
+#: printrun/pronsole.py:1649
+msgid "Unknown axis."
+msgstr "Անհայտ առանցք:"
+
+#: printrun/pronsole.py:1654
+msgid "Invalid distance"
+msgstr "անվավեր հեռավորություն"
+
+#: printrun/pronsole.py:1665
+msgid "Move an axis. Specify the name of the axis and the amount. "
+msgstr "Շարժել առանցքը: Հստակեցրեք առանցքի անունը և մեծությունը:"
+
+#: printrun/pronsole.py:1666
+msgid "move X 10 will move the X axis forward by 10mm at %s mm/min (default XY speed)"
+msgstr "X 10 շարժումը կտեղափոխի X առանցքը դեպի առաջ 10 մմ %s մմ/ր արագությամբ"
+
+#: printrun/pronsole.py:1667
+msgid "move Y 10 5000 will move the Y axis forward by 10mm at 5000mm/min"
+msgstr "Y 10 5000 քայլը կշրժի Y առանցքը դեպի առաջ 10մմ 5000մմ/ր արագությամբ"
+
+#: printrun/pronsole.py:1668
+msgid "move Z -1 will move the Z axis down by 1mm at %s mm/min (default Z speed)"
+msgstr "Z -1 քայլը կշարժի Z առանցքը դեպի ներգև 1մմ %s մմ/ր (լռելայն արագություն)"
+
+#: printrun/pronsole.py:1669
+msgid "Common amounts are in the tabcomplete list."
+msgstr "Ընդհանուր միավորը գտնվում է ներդիրի լրացման ցանկում:"
+
+#: printrun/pronsole.py:1699 printrun/pronsole.py:1742
+msgid "Invalid length given."
+msgstr "Տրված երկարությունը անվավեր է:"
+
+#: printrun/pronsole.py:1704 printrun/pronsole.py:1747
+msgid "Invalid speed given."
+msgstr "Տրված արագությունը անվավեր է: "
+
+#: printrun/pronsole.py:1712
+msgid "Extruding %fmm of filament."
+msgstr "Լցանյութի արատմղում %fմմ չափով:"
+
+#: printrun/pronsole.py:1714
+msgid "Reversing %fmm of filament."
+msgstr "Լցանյութի հետ քաշում %fմմ չափով:"
+
+#: printrun/pronsole.py:1716
+msgid "Length is 0, not doing anything."
+msgstr "Երկարությունը 0 է, ոչինչ չի արվում:"
+
+#: printrun/pronsole.py:1722
+msgid "Extrudes a length of filament, 5mm by default, or the number of mm given as a parameter"
+msgstr "Լռելայն 5մմ կամ տրված պարամետրի թվով երկարությամբ լցանյութի արտամղում:"
+
+#: printrun/pronsole.py:1723
+msgid "extrude - extrudes 5mm of filament at 300mm/min (5mm/s)"
+msgstr "արտամղել - արտամղել 5մմ լցանյութ 300մմ/ր արագությամբ (5մմ/վրկ)"
+
+#: printrun/pronsole.py:1724
+msgid "extrude 20 - extrudes 20mm of filament at 300mm/min (5mm/s)"
+msgstr "արտամղել 20 - արտամղել 20մմ լցանյութ 300մմ/ր արագությամբ (5մմ/վրկ)"
+
+#: printrun/pronsole.py:1725
+msgid "extrude -5 - REVERSES 5mm of filament at 300mm/min (5mm/s)"
+msgstr "արտամղել 5 - հետ բերել 5մմ լցանյութ 300մմ/ր արագությամբ (5մմ/վրկ)"
+
+#: printrun/pronsole.py:1726
+msgid "extrude 10 210 - extrudes 10mm of filament at 210mm/min (3.5mm/s)"
+msgstr "արտամղել 10 210 - արտամղել 10մմ լցանյութ 210մմ/ր արագությամբ (3.5մմ/վրկ)"
+
+#: printrun/pronsole.py:1732
+msgid "Printer is not online. Unable to reverse."
+msgstr "Տպիչը կապակցված չէ: Անհնար է հետ շարժեշ արտամղիչը:"
+
+#: printrun/pronsole.py:1751
+msgid "Reverses the extruder, 5mm by default, or the number of mm given as a parameter"
+msgstr "Հետ շարժել արտամղիչը 5մմ-ի կամ տրված պարամետրի չափով"
+
+#: printrun/pronsole.py:1752
+msgid "reverse - reverses 5mm of filament at 300mm/min (5mm/s)"
+msgstr "հետ շարժել - հետ քաշել 5մմ լցանյութ 300մմ/ր արագությամբ (5մմ/վրկ)"
+
+#: printrun/pronsole.py:1753
+msgid "reverse 20 - reverses 20mm of filament at 300mm/min (5mm/s)"
+msgstr "հետ շարժել 20 - հետ քաշել 20մմ լցանյութ 300մմ/ր արագությամբ (5մմ/վրկ)"
+
+#: printrun/pronsole.py:1754
+msgid "reverse 10 210 - extrudes 10mm of filament at 210mm/min (3.5mm/s)"
+msgstr "հետ շարժել 10 210 - հետ քաշել 10մմ լցանյութ 210մմ/ր արագությամբ (3.5մմ/վրկ)"
+
+#: printrun/pronsole.py:1755
+msgid "reverse -5 - EXTRUDES 5mm of filament at 300mm/min (5mm/s)"
+msgstr "արտամղել -5 - արտամղել 5մմ լցանյութ 300մմ/ր արագությամբ (5մմ/վրկ)"
+
+#: printrun/pronsole.py:1777
+msgid "Homes the printer"
+msgstr "Տպիչը դիրքի զրոյացում"
+
+#: printrun/pronsole.py:1778
+msgid "home - homes all axes and zeroes the extruder(Using G28 and G92)"
+msgstr "զրոյական դիրք - զրոյացնել բոլոր առանցքները և արտամղիչը(Օգտագործում է G28 և G92)"
+
+#: printrun/pronsole.py:1779
+msgid "home xy - homes x and y axes (Using G28)"
+msgstr "զրոյական դիրք xy - զրոյացնել x և y առանցքենրը (Օգտագործում է G28)"
+
+#: printrun/pronsole.py:1780
+msgid "home z - homes z axis only (Using G28)"
+msgstr "զրոյական դիրք z - զրոյացնել միայն z առանցքը (Օգտագործում է G28)"
+
+#: printrun/pronsole.py:1781
+msgid "home e - set extruder position to zero (Using G92)"
+msgstr "զրոյական դիրք e - զրոյացնել արտամղիչի դիրքը (Օգտագործում է G92)"
+
+#: printrun/pronsole.py:1782
+msgid "home xyze - homes all axes and zeroes the extruder (Using G28 and G92)"
+msgstr "զրոյական դիրք xyze - զրոյացնել բոլոր առանցքները և արտամղիչի դիրքը (Օգտագործում է G28 և G92)"
+
+#: printrun/pronsole.py:1790
+msgid "; Motors off"
+msgstr "; Անջատ շարժիչներ"
+
+#: printrun/pronsole.py:1792
+msgid "; Extruder off"
+msgstr "; Անջատել արտամղիչը"
+
+#: printrun/pronsole.py:1794
+msgid "; Heatbed off"
+msgstr "; Անջատել տաքացվող հարթակը"
+
+#: printrun/pronsole.py:1796
+msgid "; Fan off"
+msgstr "; Անջատել հովացուցիչը"
+
+#: printrun/pronsole.py:1798
+msgid "; Power supply off"
+msgstr "; Անջատել հոսանքի մատակարարումը"
+
+#: printrun/pronsole.py:1801
+msgid "Printer is not online. Unable to turn it off."
+msgstr "Տպիչը կապակցված չե: Հնարավոր չէ անջատել:"
+
+#: printrun/pronsole.py:1804
+msgid "Turns off everything on the printer"
+msgstr "Անջատել տպիչի բոլոր սարքերը:"
+
+#: printrun/pronsole.py:1815
+msgid "G-Code calling host command \"%s\""
+msgstr "G-Code կանչում է “%s” հրամանի host-ը"
+
+#: printrun/pronsole.py:1824
+msgid "Runs a custom script. Current gcode filename can be given using %s token."
+msgstr "Բացում է հատուկ սցենար: Ընթացիկ gcode-ի անունը կարող է ընդունվել միայն %s նշանի օգտագործմամբ:"
+
+#: printrun/pronsole.py:1832
+msgid "Runs a custom script which output gcode which will in turn be executed. Current gcode filename can be given using %s token."
+msgstr "Բացում է հատուկ սցենար, որը թողարկում է gcode, որը կարող է գործարկվել: Ընթացիկ gcode-ի անունը կարող է ընդունվել միայն %s նշանի օգտագործմամբ:"
+
+#: printrun/pronterface.py:149
+msgid "Motors off"
+msgstr "Անջատել շարժիչները"
+
+#: printrun/pronterface.py:149
+msgid "Switch all motors off"
+msgstr "Փոխարկել բոլոր շարժիչները"
+
+#: printrun/pronterface.py:150
+msgid "Advance extruder by set length"
+msgstr "Առաջ շարժել արտամղիչը սահմանված երկարությամբ "
+
+#: printrun/pronterface.py:150
+msgid "Extrude"
+msgstr "Արտամղել"
+
+#: printrun/pronterface.py:151
+msgid "Reverse"
+msgstr "Հետ շարժել"
+
+#: printrun/pronterface.py:151
+msgid "Reverse extruder by set length"
+msgstr "Հետ շարժել արտամղիչը սահմանված երկարությամբ"
+
+#: printrun/pronterface.py:165
+msgid "Pronterface"
+msgstr "Pronterface"
+
+#: printrun/pronterface.py:192
+msgid ""
+"# I moved all your custom buttons into .pronsolerc.\n"
+"# Please don't add them here any more.\n"
+"# Backup of your old buttons is in custombtn.old\n"
+msgstr ""
+"# Տեղափոխել եմ Ձեր բոլոր հատուկ կոճակները .pronsolerc-ի մեջ:\n"
+"# Խնդրում եմ այլևս միա ավելացրեք դրանցից այստեղ:\n"
+"# Ձեր հին կոճակների արխիվները գտնվում են custombtn.old նիշքի մեջ\n"
+
+#: printrun/pronterface.py:197
+msgid "Note!!! You have specified custom buttons in both custombtn.txt and .pronsolerc"
+msgstr "Նշում - Դուք նշել եք հատուկ կոճակներ custombtn.txt և .pronsolerc նիշքերում"
+
+#: printrun/pronterface.py:198
+msgid "Ignoring custombtn.txt. Remove all current buttons to revert to custombtn.txt"
+msgstr "custombtn.txt նիշքի անտեսում: Հեռացրեք ընթացիկ բոլոր կոճակները, որպեսզի հետ վերադարձնաք custombtn.txt նիշքին:"
+
+#: printrun/pronterface.py:331
+msgid "Monitoring printer."
+msgstr "Տպիչի մոնիտորինգ:"
+
+#: printrun/pronterface.py:354
+msgid "Setting hotend temperature to %f degrees Celsius."
+msgstr "Սահմանել տաքացման ջերմաստիճանը՝ %f աստիճան ցելսիուս:"
+
+#: printrun/pronterface.py:361 printrun/pronterface.py:381
+msgid "You must enter a temperature. (%s)"
+msgstr "Դուք պետք է մուտքագրեք ջերմաստիճանը: (%s)"
+
+#: printrun/pronterface.py:374
+msgid "Setting bed temperature to %f degrees Celsius."
+msgstr "Սահմանել հարթակի ջերմաստիճանը՝ %f աստիճան ցելսիուս:"
+
+#: printrun/pronterface.py:392
+msgid "Setting print speed factor to %d%%."
+msgstr "Սահմանել տպիչի արագության չափսը՝ %d%%:"
+
+#: printrun/pronterface.py:396
+msgid "You must enter a speed. (%s)"
+msgstr "Դուք պետք է մուտքագրեք արագությունը: (%s)"
+
+#: printrun/pronterface.py:470
+msgid "Plate function activated"
+msgstr "Հարթության գործառույթը ակտիվացված է"
+
+#: printrun/pronterface.py:479
+msgid "G-Code plate function activated"
+msgstr "G-Code -ի հարթության գործառույթը ակտիվացված է"
+
+#: printrun/pronterface.py:486
+msgid "Plated %s"
+msgstr "Հարթեցված է %s"
+
+#: printrun/pronterface.py:500
+msgid "SD Upload"
+msgstr "Վերբեռնել SD "
+
+#: printrun/pronterface.py:504
+msgid "SD Print"
+msgstr "Տպել SD-ից"
+
+#: printrun/pronterface.py:565
+msgid "Manual move outside of the build volume prevented (see the \"Clamp manual moves\" option)."
+msgstr ""
+"Կառուցվածքի ծավալից դուրս ձեռնարկված շարժումը կանխված է (տես «Կռռման մեխանիկական քայլեր» տարբերակը):\\Սn\n"
+"Սարքի ծավալից դուրս ձեռքով շարժելի կանխված է(Ամրացման մեխանիկական քայլեր):"
+
+#: printrun/pronterface.py:621
+msgid "Attempted to write invalid text to console, which could be due to an invalid baudrate"
+msgstr "Վահանոկում կատարվեց ոչ վավեր տեքստ գրելու փորձ, այն կարող է լինել ոչ վավեր baudrate-ից"
+
+#: printrun/pronterface.py:655
+msgid " Opens file"
+msgstr "Բացում է նիշքը"
+
+#: printrun/pronterface.py:655
+msgid "&Open..."
+msgstr "&Բացել…"
+
+#: printrun/pronterface.py:663
+msgid " Clear output console"
+msgstr "Մաքրել վահանակի ելքը"
+
+#: printrun/pronterface.py:663
+msgid "Clear console"
+msgstr "Մաքրել վահանակը"
+
+#: printrun/pronterface.py:664
+msgid " Closes the Window"
+msgstr "Փակում է պատուհանը"
+
+#: printrun/pronterface.py:664
+msgid "E&xit"
+msgstr "Ելք"
+
+#: printrun/pronterface.py:665
+msgid "&File"
+msgstr "&Նիշք"
+
+#: printrun/pronterface.py:668
+msgid " Edit open file"
+msgstr "Խմբագրել բացվող նիշքը"
+
+#: printrun/pronterface.py:668
+msgid "&Edit..."
+msgstr "&Խմբագրել…"
+
+#: printrun/pronterface.py:669
+msgid " Compose 3D models into a single plate"
+msgstr "Կազմավորել 3D մոդելները մեկ հարթության մեջ"
+
+#: printrun/pronterface.py:669
+msgid "Plater"
+msgstr "Հարթություն"
+
+#: printrun/pronterface.py:670
+msgid " Compose G-Codes into a single plate"
+msgstr "Կազմավորել G-Code -ը մեկ հարթության մեջ"
+
+#: printrun/pronterface.py:670
+msgid "G-Code Plater"
+msgstr "G-Code -ի հարթեցում"
+
+#: printrun/pronterface.py:671
+msgid " Exclude parts of the bed from being printed"
+msgstr "Տպելուց հանել դետալները հարթակից"
+
+#: printrun/pronterface.py:671
+msgid "Excluder"
+msgstr "Բացառում"
+
+#: printrun/pronterface.py:672
+msgid " Project slices"
+msgstr "Նախագծի շերտավորում"
+
+#: printrun/pronterface.py:672
+msgid "Projector"
+msgstr "Պրոյեկտոր"
+
+#: printrun/pronterface.py:673
+msgid "&Tools"
+msgstr "&Գործիքներ"
+
+#: printrun/pronterface.py:676
+msgid " Recover previous print after a disconnect (homes X, Y, restores Z and E status)"
+msgstr "Վերականգնել նախավերջին տպագրությունը (զրոյացնու է դիրքը X, Y, վերականգնում է Z ու E -ի ստատուսը)"
+
+#: printrun/pronterface.py:676
+msgid "Recover"
+msgstr "Վերականգնել"
+
+#: printrun/pronterface.py:679
+msgid "&Advanced"
+msgstr "&Ընդլայնված"
+
+#: printrun/pronterface.py:686
+msgid "Print &settings"
+msgstr "Տպիչի &կարգավորումներ"
+
+#: printrun/pronterface.py:687
+msgid "&Filament"
+msgstr "&Լցանյութ"
+
+#: printrun/pronterface.py:688
+msgid "&Printer"
+msgstr "&Տպիչ"
+
+#: printrun/pronterface.py:694
+msgid "&Slic3r"
+msgstr "&Slic3r"
+
+#: printrun/pronterface.py:696
+msgid "Failed to load Slic3r configuration:"
+msgstr "Չհաջողվեց բեռնել Slic3r -ի կարգաբերումը:"
+
+#: printrun/pronterface.py:702
+msgid "&Macros"
+msgstr "&Macros"
+
+#: printrun/pronterface.py:703
+msgid "<&New...>"
+msgstr "<&Նոր…>"
+
+#: printrun/pronterface.py:704
+msgid " Options dialog"
+msgstr "Ընտրանքի զրուցարան"
+
+#: printrun/pronterface.py:704
+msgid "&Options"
+msgstr "&Ընտրանքներ"
+
+#: printrun/pronterface.py:706
+msgid " Adjust slicing settings"
+msgstr "Ճշգրտել շերտավորման կարգավորումը"
+
+#: printrun/pronterface.py:706
+msgid "Slicing settings"
+msgstr "Շերտավորման կարգավորում"
+
+#: printrun/pronterface.py:708
+msgid "Debug communications"
+msgstr "Հաղորդակցության կարգավորում"
+
+#: printrun/pronterface.py:709
+msgid "Print all G-code sent to and received from the printer."
+msgstr "Տպել տպիչից ուղարկած և ստացած բոլոր G-code-ը"
+
+#: printrun/pronterface.py:713
+msgid "&Settings"
+msgstr "&Կարգավորումներ"
+
+#: printrun/pronterface.py:719
+msgid "&About Printrun"
+msgstr "&Printrun-ի մասին"
+
+#: printrun/pronterface.py:719
+msgid "Show about dialog"
+msgstr "Ցուցադրել «մեր մասին» երկխոսությունը"
+
+#: printrun/pronterface.py:720
+msgid "&Help"
+msgstr "&Օգնություն"
+
+#: printrun/pronterface.py:746
+msgid "Printrun is a pure Python 3D printing (and other types of CNC) host software."
+msgstr "Printrun-ը Python-ով աշխատող 3D տպագրության (և այլ տիպի CNC-ի համար) ծրագրային ապահովում է:"
+
+#: printrun/pronterface.py:750
+msgid "%.02fmm of filament have been extruded during prints"
+msgstr "Տպագրման ժամանակ արտամղվել է %.02fմմ լցանյութ"
+
+#: printrun/pronterface.py:781
+msgid "Monitor printer status"
+msgstr "Դիտարկել տպիչի կարգավիճակը"
+
+#: printrun/pronterface.py:781
+msgid "Regularly monitor printer temperatures (required to have functional temperature graph or gauges)"
+msgstr "Պարբերաբար դիտարկել տպիչի ջերմաստիճանները (պահանջում է ունենալ գործառնական ջերմաստիճանային գրաֆիկա և մեծություններ)"
+
+#: printrun/pronterface.py:782
+msgid "Path to the simarrange binary to use in the STL plater"
+msgstr ""
+"Путь к двоичному файлу симарранж для использования в платтере STL\n"
+"STL նիշքի հարթության համահարթեցման երկուական ուղղությունը:"
+
+#: printrun/pronterface.py:782
+msgid "Simarrange command"
+msgstr "Համահարթեցման հրաման"
+
+#: printrun/pronterface.py:783
+msgid "Circular build platform"
+msgstr "Շրջանային կառուցման պլատֆորմ"
+
+#: printrun/pronterface.py:783
+msgid "Draw a circular (or oval) build platform instead of a rectangular one"
+msgstr "Գծել շրջանային կառուցման պլատֆորմը մեկ ուղղանկյան փոխարեն"
+
+#: printrun/pronterface.py:784
+msgid "Extruders count"
+msgstr "«Գլխիկների քանակը"
+
+#: printrun/pronterface.py:784
+msgid "Number of extruders"
+msgstr "«Գլխիկի համարը"
+
+#: printrun/pronterface.py:785
+msgid "Clamp manual moves"
+msgstr "Ամրակի մեխանիկական շարժում"
+
+#: printrun/pronterface.py:785
+msgid "Prevent manual moves from leaving the specified build dimensions"
+msgstr "Կանխում է սահմանված չափերից դուրս մենխանիկորեն շարժումները"
+
+#: printrun/pronterface.py:786
+msgid "Interface mode"
+msgstr "Միջերեսի ռեժիմ"
+
+#: printrun/pronterface.py:786
+msgid ""
+"Standard interface is a one-page, three columns layout with controls/visualization/log\n"
+"Compact mode is a one-page, two columns layout with controls + log/visualization\n"
+"Tabbed mode is a two-pages mode, where the first page shows controls and the second one shows visualization and log."
+msgstr ""
+"Ստանդարտ միջերեսը մեկ էջով է, եռասյուն դասավորությամբ ՝կառավարում/վիզուալիզացիա/մատյան\n"
+"Սեղմ ռեժիմը մեկ էջով է, երկսյուն դասավորությամբ ՝կառավարում + մատյան/վիզուալիզացիա\n"
+"Ներդիրի ռեժիմը երկու էջով է, որտեղ առաջին էջը ցուցադրում է կառավարումը, իսկ երկրորդում ՝ վիզուալիզացիան և մատյանը:"
+
+#: printrun/pronterface.py:787
+msgid "Controls mode"
+msgstr "Կառավարման ռեժիմ"
+
+#: printrun/pronterface.py:787
+msgid "Standard controls include all controls needed for printer setup and calibration, while Mini controls are limited to the ones needed for daily printing"
+msgstr "Ստանդարտ կառավարումը ներառում է բոլոր տեսակի կառավարումները, որոնք անհրաժեշտ են տպիչի կարգավորման և կարգաբերման համար:Իսկ Փոքր կառավարումը սահմափակվում է միայն մեկանգամյա տպագրությունով:"
+
+#: printrun/pronterface.py:788
+msgid "Add a menu to select Slic3r profiles directly from Pronterface"
+msgstr "Pronterface-ից սվելացնել «մենյու» նշված Slic3r պրոֆիլի մեջ"
+
+#: printrun/pronterface.py:788
+msgid "Enable Slic3r integration"
+msgstr "Միացնել Slic3r-ի ինտերգրումը"
+
+#: printrun/pronterface.py:789
+msgid "Update Slic3r default presets"
+msgstr "Թարմացնել Slic3r-ի լռելայն նախադրումները"
+
+#: printrun/pronterface.py:789
+msgid "When selecting a profile in Slic3r integration menu, also save it as the default Slic3r preset"
+msgstr "Երբ ընտրում ենք Slic3r-ի պրոֆիլի ինտեգրման «մենյուն», ապա պետք է նաև պահպանել Slic3r-ի լռելայն նախադրումները"
+
+#: printrun/pronterface.py:790
+msgid "Main visualization"
+msgstr "Գկխավոր արտացոլանք"
+
+#: printrun/pronterface.py:790
+msgid "Select visualization for main window."
+msgstr "Ընտրել հիմնական պատուհանի վիզուալիզացիան"
+
+#: printrun/pronterface.py:791
+msgid "Use 3D in GCode viewer window"
+msgstr "Օգտագործել 3D-ն GCode-ի դիտարկման պատուհանում"
+
+#: printrun/pronterface.py:791
+msgid "Use 3D mode instead of 2D layered mode in the visualization window"
+msgstr "Վիզուալիզացիայի պատուհանում օգտագործել 3D ռեժիմը 2D շերտավորման ռեժիմի փոխարեն "
+
+#: printrun/pronterface.py:792
+msgid "Use a lighter 3D visualization"
+msgstr "Օգտագործել թեթև 3D վիզուալիզացիա"
+
+#: printrun/pronterface.py:792
+msgid "Use a lighter visualization with simple lines instead of extruded paths for 3D viewer"
+msgstr "Եռաչափ դիտման համար օգտագործել թեթև վիզոալիզացիա պարզ գծերով արտամղված ուղիների փոխարեն"
+
+#: printrun/pronterface.py:793
+msgid "Track current layer in main 3D view"
+msgstr "Հետևել ընթացիկ շերտը հիմնական 3D տեսարանում"
+
+#: printrun/pronterface.py:793
+msgid "Track the currently printing layer in the main 3D visualization"
+msgstr "Հետևել ընթացիկ տպվող շերտը հիմնական 3D արտացոլմամբ"
+
+#: printrun/pronterface.py:794
+msgid "Display temperature graph"
+msgstr "Ցուցադրել ջերմաստիճանային գծապատկերը"
+
+#: printrun/pronterface.py:794
+msgid "Display time-lapse temperature graph"
+msgstr "Ցուցադրել ջերմաստիճանի ժամանակային գծապատկերը"
+
+#: printrun/pronterface.py:795
+msgid "Display graphical gauges for temperatures visualization"
+msgstr "Ցուցադրել գրաֆիկական չափումներ ջերմաստիճանային վիզուալիզացիայի համար"
+
+#: printrun/pronterface.py:795
+msgid "Display temperature gauges"
+msgstr "Ցուցադրել ջերմաստիճանային չափումները"
+
+#: printrun/pronterface.py:796
+msgid "Display a checkbox that, when check, locks most of Pronterface"
+msgstr "Ցուցադրել այն նշելու վանդակները, որոնք նշելով կողպում է Pronterface-ի մեծ մասը"
+
+#: printrun/pronterface.py:796
+msgid "Display interface lock checkbox"
+msgstr "Ցուցադրել միջերեսը կողպելու վանդակը"
+
+#: printrun/pronterface.py:797
+msgid "If lock checkbox is enabled, lock the interface when starting a print"
+msgstr "Եթե կողպման վանդակը ակտիվաացված է, ապա տպագրումը մեկնարկելուց կողպում է միջերեսը"
+
+#: printrun/pronterface.py:797
+msgid "Lock interface upon print start"
+msgstr "Կողպել միջերեսը, մինչ տպագրության մեկնարկը"
+
+#: printrun/pronterface.py:804
+msgid "Preview extrusion width"
+msgstr "Նախադիտել արտամղման հաստությունը"
+
+#: printrun/pronterface.py:804
+msgid "Width of Extrusion in Preview"
+msgstr "Արտամղման հաստության նախադիտում"
+
+#: printrun/pronterface.py:805
+msgid "Fine Grid Spacing"
+msgstr "Fine Grid Spacing"
+
+#: printrun/pronterface.py:805
+msgid "Fine grid spacing"
+msgstr "Fine grid spacing"
+
+#: printrun/pronterface.py:806
+msgid "Coarse Grid Spacing"
+msgstr "Կոշտացնել Ցանցի Տարածությունը"
+
+#: printrun/pronterface.py:806
+msgid "Coarse grid spacing"
+msgstr "Կոշտացնել ցանցի տարածությունը"
+
+#: printrun/pronterface.py:807
+msgid "Background color"
+msgstr "Ետնապատկերի գույնը"
+
+#: printrun/pronterface.py:807
+msgid "Pronterface background color"
+msgstr "Pronterface-ի ետնապատկերի գույնը"
+
+#: printrun/pronterface.py:808
+msgid "3D view background color"
+msgstr "Ետնապատկերի գույնը եռաչափ տեսքով"
+
+#: printrun/pronterface.py:808
+msgid "Color of the 3D view background"
+msgstr "Ետնապատկերի եռաչափ դիտման գույնը"
+
+#: printrun/pronterface.py:809
+msgid "3D view travel moves color"
+msgstr "Թռիչքների ժամանակ գույնի եռաչափ տեսքը"
+
+#: printrun/pronterface.py:809
+msgid "Color of travel moves in 3D view"
+msgstr "Թռիչքների գույնը եռաչափ դիտման ժամանակ"
+
+#: printrun/pronterface.py:810
+msgid "3D view print moves color"
+msgstr "Տպիչի շարժման գույնը եռաչափ տեսքով"
+
+#: printrun/pronterface.py:810
+msgid "Color of print moves with tool 0 in 3D view"
+msgstr "Տպիչի շարժման գույնը 0 գործիքով եռաչափ տեսքով"
+
+#: printrun/pronterface.py:811
+msgid "3D view tool 1 moves color"
+msgstr "Գործիքի շարժման թիվ 1 գույնը եռաչափ տեսքով"
+
+#: printrun/pronterface.py:811
+msgid "Color of print moves with tool 1 in 3D view"
+msgstr "Տպիչի շարժման գույնը 1 գործիքով եռաչափ տեսքով"
+
+#: printrun/pronterface.py:812
+msgid "3D view printed moves color"
+msgstr "Տպագրության շարժման գույնը եռաչափ տեսքով"
+
+#: printrun/pronterface.py:812
+msgid "Color of printed moves in 3D view"
+msgstr "Տպագրած շարժումների գույնը եռաչափ տեսքով"
+
+#: printrun/pronterface.py:813
+msgid "3D view current layer moves color"
+msgstr "Ընթացիկ շերտի գույնը եռաչափ տեսքով"
+
+#: printrun/pronterface.py:813
+msgid "Color of moves in current layer in 3D view"
+msgstr "Ընթացիկ շերտի շարժման գույնը եռաչափ տեսքով"
+
+#: printrun/pronterface.py:814
+msgid "3D view printed current layer moves color"
+msgstr "Ընթացիկ տպագրած շերտի գույնը եռաչափ տեսքով"
+
+#: printrun/pronterface.py:814
+msgid "Color of already printed moves from current layer in 3D view"
+msgstr "Արդեն տպագրած շերտերի գույնը եռաչափ տեսքով"
+
+#: printrun/pronterface.py:815
+msgid "Changing most settings here will require restart to get effect"
+msgstr "Հիմնական կարգավորումների փոփոխությունը կպահանջի վերագործարկել ծրագիրը"
+
+#: printrun/pronterface.py:815
+msgid "Note:"
+msgstr "Նշում ՝"
+
+#: printrun/pronterface.py:822
+msgid "automatically try to connect to printer on startup"
+msgstr "մեկնարկի ժամանակ ինքնեկ կերպով փորձել միանալ տպիչին"
+
+#: printrun/pronterface.py:835 printrun/pronterface.py:1316
+msgid "Failed to load recent files list:"
+msgstr "Ձախողվեց բեռնել վերջին նիշքերի ցանկը ՝"
+
+#: printrun/pronterface.py:916
+msgid "SD upload: %04.2f%% |"
+msgstr "SD վերբեռնում: %04.2f%% |"
+
+#: printrun/pronterface.py:917 printrun/pronterface.py:922
+msgid " Line# %d of %d lines |"
+msgstr " Գիծ# %d -ը %d գծերի |"
+
+#: printrun/pronterface.py:919
+msgid "SD printing: %04.2f%% |"
+msgstr "SD տպագրություն: %04.2f%% |"
+
+#: printrun/pronterface.py:921
+msgid "Printing: %04.2f%% |"
+msgstr "Տպագրություն: %04.2f%% |"
+
+#: printrun/pronterface.py:924
+msgid " Est: %s of %s remaining | "
+msgstr "Գնահատված է՝ %s -ը %s -ի դեռ մնում է|"
+
+#: printrun/pronterface.py:926
+msgid " Z: %.3f mm"
+msgstr "Z: %.3f մմ"
+
+#: printrun/pronterface.py:931
+msgid "Disconnecting after 4 failed writes."
+msgstr "Անջատում է 4 անգամ ձախողված գրառումից հետո:"
+
+#: printrun/pronterface.py:972
+msgid "Locking interface."
+msgstr "Կողպել միջերեսը:"
+
+#: printrun/pronterface.py:976
+msgid "Unlocking interface."
+msgstr "Բացել կողպած միջերեսը:"
+
+#: printrun/pronterface.py:985
+msgid "Connecting..."
+msgstr "Միացում…"
+
+#: printrun/pronterface.py:997
+msgid "Could not parse baud rate: "
+msgstr "Չհաջողվեց վերլուծել և ստանալ baud rate-ը:"
+
+#: printrun/pronterface.py:1013 printrun/pronterface.py:1023
+msgid "Error: You are trying to connect to a non-existing port."
+msgstr "Սխալ` դուք ցանկանում եք միանալ գոյություն չունեցող տպիչի port-ին."
+
+#: printrun/pronterface.py:1015
+msgid "Error: You don't have permission to open %s."
+msgstr "Սխալ` դուք չունեք թույլտվություն բացել %s-ը:"
+
+#: printrun/pronterface.py:1016
+msgid "You might need to add yourself to the dialout group."
+msgstr "Կարող է պետք լինի ավելացնել ինքներտ Ձեզ dialout խմբի մեջ:"
+
+#: printrun/pronterface.py:1043
+msgid "Disconnected."
+msgstr "Անջատված է:"
+
+#: printrun/pronterface.py:1071
+msgid "Reset."
+msgstr "Վերատեղադրել:"
+
+#: printrun/pronterface.py:1072
+msgid "Are you sure you want to reset the printer?"
+msgstr "Իրո՞ք ցանկանում եք վերատեղադրել տպիչը:"
+
+#: printrun/pronterface.py:1072
+msgid "Reset?"
+msgstr "Վերատեղադրել?"
+
+#: printrun/pronterface.py:1093
+msgid "Restart"
+msgstr "Վերագործարկել"
+
+#: printrun/pronterface.py:1126
+msgid "Pick SD filename"
+msgstr "Հավաքել SD նիշքի անունը"
+
+#: printrun/pronterface.py:1144
+msgid "File upload complete"
+msgstr "Նիշքի վեռբեռնումը ավարտվեց"
+
+#: printrun/pronterface.py:1151
+msgid "Print paused at: %s"
+msgstr "Տպիչը կանգնեցված է ՝%s -ի վրա:"
+
+#: printrun/pronterface.py:1163
+msgid "Resume"
+msgstr "Շարունակել"
+
+#: printrun/pronterface.py:1166
+msgid "Resuming."
+msgstr "Շարունակում:"
+
+#: printrun/pronterface.py:1192
+msgid "Pick SD file"
+msgstr "Ընտրել SD նիշք"
+
+#: printrun/pronterface.py:1192
+msgid "Select the file to print"
+msgstr "Ընտրել նիշքը տպելու համար"
+
+#: printrun/pronterface.py:1228 printrun/pronterface.py:1259
+msgid "Slicing "
+msgstr "Շերտավորում"
+
+#: printrun/pronterface.py:1237
+msgid "Failed to execute slicing software: "
+msgstr "Չհաջողվեց գործարկելու շերտավորման ծրագիրը ՝"
+
+#: printrun/pronterface.py:1244
+msgid "Slicing..."
+msgstr "Շերտավորում…"
+
+#: printrun/pronterface.py:1296
+msgid "Open file to print"
+msgstr "Բացել նիշքը տպելու համար"
+
+#: printrun/pronterface.py:1297
+msgid "OBJ, STL, and GCODE files (*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ)|*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ|All Files (*.*)|*.*"
+msgstr "OBJ, STL, and GCODE files (*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ)|*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ|All Files (*.*)|*.*"
+
+#: printrun/pronterface.py:1325
+msgid "Could not update recent files list:"
+msgstr "Չհաջողվեց թարմացնել վերջին նիշքերի ցանկը`"
+
+#: printrun/pronterface.py:1359
+msgid "Loaded %s, %d lines"
+msgstr "Բեռնված է %s -ը, %d գծեր"
+
+#: printrun/pronterface.py:1362
+msgid "Load File"
+msgstr "Բեռնել նիշք"
+
+#: printrun/pronterface.py:1376
+msgid "%.2fmm of filament used in this print"
+msgstr "%.2fմմ լցանյութ է օգտագործվել տպման ժամանակ"
+
+#: printrun/pronterface.py:1377
+msgid "The print goes:"
+msgstr "Տպում է ՝"
+
+#: printrun/pronterface.py:1378
+msgid "- from %.2f mm to %.2f mm in X and is %.2f mm wide"
+msgstr "- %.2f մմ -ից մինչև %.2f մմ X -ում և %.2f մմ լայնություն"
+
+#: printrun/pronterface.py:1379
+msgid "- from %.2f mm to %.2f mm in Y and is %.2f mm deep"
+msgstr "- %.2f մմ -ից մինչև %.2f mm Y -ում և %.2f մմ խորություն"
+
+#: printrun/pronterface.py:1380
+msgid "- from %.2f mm to %.2f mm in Z and is %.2f mm high"
+msgstr "- %.2f մմ -ից մինչև %.2f մմ Z-ում և %.2f մմ բարձրություն"
+
+#: printrun/pronterface.py:1450
+msgid "Printer is now online."
+msgstr "Տպիչը կապակցված է:"
+
+#: printrun/pronterface.py:1455
+msgid "Disconnect"
+msgstr "Անջատել"
+
+#: printrun/pronterface.py:1688
+msgid "click to add new custom button"
+msgstr "սեղմել այստեղ նոր կոճակ ավելացնելու համար"
+
+#: printrun/pronterface.py:1694
+msgid "Execute command: "
+msgstr "Գործարկել հրաման ՝"
+
+#: printrun/pronterface.py:1714
+msgid "Defines custom button. Usage: button <num> \"title\" [/c \"colour\"] command"
+msgstr "Սահմանել հատուկ կոճակ: Օգտագործում <num> “title” [/c “colour”] հրաման"
+
+#: printrun/pronterface.py:1736
+msgid "Custom button number should be between 0 and 63"
+msgstr "Հատուկ կոճակի թիվը պետք է լինի 0-ից 63 միջակայքում"
+
+#: printrun/pronterface.py:1827
+msgid "Edit custom button '%s'"
+msgstr "Խմբագրել հատուկ ‘%s’ կոճակը"
+
+#: printrun/pronterface.py:1829
+msgid "Move left <<"
+msgstr "Շարժել ձախ <<"
+
+#: printrun/pronterface.py:1832
+msgid "Move right >>"
+msgstr "Շարժել աջ >>"
+
+#: printrun/pronterface.py:1836
+msgid "Remove custom button '%s'"
+msgstr "Հեռացնել հատուկ ‘%s’կոճակը"
+
+#: printrun/pronterface.py:1839
+msgid "Add custom button"
+msgstr "Ավելացնել կոճակ"
+
+#: printrun/pronterface.py:1972
+msgid "event object missing"
+msgstr "օբյեկտի իրադարձությունը բացակայում է"
+
+#: printrun/pronterface.py:1985
+msgid "Do you want to erase the macro?"
+msgstr "Ցանկանում եք մաքրել macro-ն?"
+
+#: printrun/pronterface.py:1989
+msgid "Cancelled."
+msgstr "Չեղարկված է:"
+
+#: printrun/pronterface.py:2007
+msgid "Enter macro name"
+msgstr "Մուտքագրել macro-ի անունը"
+
+#: printrun/pronterface.py:2010
+msgid "Macro name:"
+msgstr "Macro-ի անուն`"
+
+#: printrun/pronterface.py:2013
+msgid "Ok"
+msgstr "Ok"
+
+#: printrun/pronterface.py:2035
+msgid "Macro name may contain only ASCII alphanumeric symbols and underscores"
+msgstr "Macro -ի անունը կարող է պարունակել միայն ASCII այբենական-թվային սիմվոլներ և ընդգծումներ"
+
+#: printrun/pronterface.py:2038
+msgid "Name '%s' is being used by built-in command"
+msgstr "‘%s’ անունը օգտագործվում է ներկառուցված հրամանում"
+
+#: pronsole.py:31
+msgid "Caught an exception, exiting:"
+msgstr "Բացառություն է, փակվում է՝"
--- a/printrun-src/plater.appdata.xml	Tue Jan 19 20:44:16 2021 +0100
+++ b/printrun-src/plater.appdata.xml	Tue Jan 19 20:45:09 2021 +0100
@@ -1,14 +1,19 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<application>
- <id type="desktop">plater.desktop</id>
- <licence>CC0</licence>
+<component type="desktop-application">
+ <id>com.github.kliment.printrun.plater</id>
+ <metadata_license>CC0-1.0</metadata_license>
+ <project_license>GPL-3.0+</project_license>
+ <name>Plater</name>
  <summary>3D printer plating tool</summary>
  <description>
   <p>Plater is a simple graphical tool for preparing plates for desktop 3D printers, such as RepRap.</p>
-  <p>It lets you load 3D models and manipulate them on XY plane. It is also possible to let Plater automatically arrange the files to fit. You can than export the prepared plate for later use or load it directly to Pronterface (if installed).</p>
+  <p>It lets you load 3D models and manipulate them on XY plane. It is also possible to let Plater automatically arrange the files to fit. You can then export the prepared plate for later use or load it directly to Pronterface (if installed).</p>
  </description>
+ <launchable type="desktop-id">plater.desktop</launchable>
  <screenshots>
-  <screenshot type="default" width="804" height="606">https://raw.github.com/kliment/Printrun/master/screenshots/plater.png</screenshot>
+   <screenshot type="default">
+     <image width="804" height="606">https://raw.github.com/kliment/Printrun/master/screenshots/plater.png</image>
+   </screenshot>
  </screenshots>
  <url type="homepage">https://github.com/kliment/Printrun</url>
-</application>
+</component>
--- a/printrun-src/plater.desktop	Tue Jan 19 20:44:16 2021 +0100
+++ b/printrun-src/plater.desktop	Tue Jan 19 20:45:09 2021 +0100
@@ -3,7 +3,7 @@
 Name=Plater
 GenericName=Plate building tool
 Comment=Prepares plates for 3D printing
-Icon=/usr/share/pixmaps/plater.png
+Icon=plater
 Exec=/usr/bin/plater.py
 StartupNotify=true
 Terminal=false
--- a/printrun-src/plater.py	Tue Jan 19 20:44:16 2021 +0100
+++ b/printrun-src/plater.py	Tue Jan 19 20:45:09 2021 +0100
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 
 # This file is part of the Printrun suite.
 #
@@ -15,6 +15,7 @@
 # You should have received a copy of the GNU General Public License
 # along with Printrun.  If not, see <http://www.gnu.org/licenses/>.
 
+import os
 import sys
 import wx
 import getopt
@@ -25,25 +26,28 @@
 
     from printrun.printcore import __version__ as printcore_version
 
+    os.environ['GDK_BACKEND'] = 'x11'
+
     usage = "Usage:\n"+\
             "  plater [OPTION]\n"+\
             "  plater FILES\n\n"+\
             "Options:\n"+\
             "  -V, --version\t\t\tPrint program's version number and exit\n"+\
-            "  -h, --help\t\t\tPrint this help message and exit\n"
+            "  -h, --help\t\t\tPrint this help message and exit\n" \
+            "  --no-gl\t\t\tUse 2D implementation, that seems unusable"
 
     try:
-        opts, args = getopt.getopt(sys.argv[1:], "hV", ["help", "version"])
-    except getopt.GetoptError, err:
-        print str(err)
-        print usage
+        opts, args = getopt.getopt(sys.argv[1:], "hV", ["help", "version", 'no-gl'])
+    except getopt.GetoptError as err:
+        print(str(err))
+        print(usage)
         sys.exit(2)
     for o, a in opts:
         if o in ('-V','--version'):
-            print "printrun "+printcore_version
+            print("printrun "+printcore_version)
             sys.exit(0)
         elif o in ('-h', '--help'):
-            print usage
+            print(usage)
             sys.exit(0)
 
     app = wx.App(False)
--- a/printrun-src/printcore.py	Tue Jan 19 20:44:16 2021 +0100
+++ b/printrun-src/printcore.py	Tue Jan 19 20:45:09 2021 +0100
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 
 # This file is part of the Printrun suite.
 #
@@ -45,28 +45,28 @@
     try:
         opts, args = getopt.getopt(sys.argv[1:], "b:svVh",
                         ["baud=", "statusreport", "verbose", "version", "help"])
-    except getopt.GetoptError, err:
-        print str(err)
-        print usage
+    except getopt.GetoptError as err:
+        print(str(err))
+        print(usage)
         sys.exit(2)
     for o, a in opts:
         if o in ('-h', '--help'):
-            print usage
+            print(usage)
             sys.exit(0)
         elif o in ('-V','--version'):
-            print "printrun "+printcore_version
+            print("printrun "+printcore_version)
             sys.exit(0)
         elif o in ('-b','--baud'):
             try:
                 baud = int(a)
             except ValueError:
-                print "ValueError:"
-                print "\tInvalid BAUD_RATE value '%s'" % a
-                print "\tBAUD_RATE must be an integer\n"
+                print("ValueError:")
+                print("\tInvalid BAUD_RATE value '%s'" % a)
+                print("\tBAUD_RATE must be an integer\n")
                 # FIXME: This should output a more apropiate error message when
                 #        not a good baud rate is passed as an argument
                 #        i.e: when baud <= 1000 or > 225000
-                print usage
+                print(usage)
                 sys.exit(2)
         elif o in ('-v', '--verbose'):
             loud = True
@@ -74,13 +74,13 @@
             statusreport = True
 
     if len(args) <= 1:
-        print "Error: Port or gcode file were not specified.\n"
-        print usage
+        print("Error: Port or gcode file were not specified.\n")
+        print(usage)
         sys.exit(2)
     elif len(args) > 1:
         port = args[-2]
         filename = args[-1]
-        print "Printing: %s on %s with baudrate %d" % (filename, port, baud)
+        print("Printing: %s on %s with baudrate %d" % (filename, port, baud))
 
     p = printcore(port, baud)
     p.loud = loud
--- a/printrun-src/pronsole.appdata.xml	Tue Jan 19 20:44:16 2021 +0100
+++ b/printrun-src/pronsole.appdata.xml	Tue Jan 19 20:45:09 2021 +0100
@@ -1,15 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<application>
- <id type="desktop">pronsole.desktop</id>
- <licence>CC0</licence>
+<component type="desktop-application">
+ <id>com.github.kliment.printrun.pronsole</id>
+ <metadata_license>CC0-1.0</metadata_license>
+ <project_license>GPL-3.0+</project_license>
+ <name>Pronsole</name>
  <summary>3D printer host software for console</summary>
  <description>
-  <p>Pronsole is a command line user interface for desktop 3D printers, such as RepRap. It lets you to load Gcode, connect to printer and send the Gcode to it. Best option for controling 3D printer from headless or not enough powerful machines.</p>
+  <p>Pronsole is a command line user interface for desktop 3D printers, such as RepRap. It lets you to load Gcode, connect to printer and send the Gcode to it. Best option for controlling 3D printer from headless or not enough powerful machines.</p>
   <p>It allows you not only to send Gcode form file, but also control the printer manually or send Gcode commands directly to the printer.</p>
-  <p>Is integrates slicing tool, so if you load an STL 3D model to it as well as Gcode.</p>
+  <p>It integrates with slicing tools, so if you load an STL 3D model to it,it will slice and load it automatically.</p>
  </description>
+ <launchable type="desktop-id">pronsole.desktop</launchable>
  <screenshots>
-  <screenshot type="default" width="659" height="388">https://raw.github.com/kliment/Printrun/master/screenshots/pronsole.png</screenshot>
+   <screenshot type="default">
+     <image width="659" height="388">https://raw.github.com/kliment/Printrun/master/screenshots/pronsole.png</image>
+   </screenshot>
  </screenshots>
  <url type="homepage">https://github.com/kliment/Printrun</url>
-</application>
+</component>
--- a/printrun-src/pronsole.desktop	Tue Jan 19 20:44:16 2021 +0100
+++ b/printrun-src/pronsole.desktop	Tue Jan 19 20:45:09 2021 +0100
@@ -3,7 +3,7 @@
 Name=Pronsole
 GenericName=Printer console
 Comment=Controls your 3D printer form console
-Icon=/usr/share/pixmaps/pronsole.png
+Icon=pronsole
 Exec=/usr/bin/pronsole.py
 StartupNotify=true
 Terminal=true
--- a/printrun-src/pronsole.py	Tue Jan 19 20:44:16 2021 +0100
+++ b/printrun-src/pronsole.py	Tue Jan 19 20:45:09 2021 +0100
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 
 # This file is part of the Printrun suite.
 #
@@ -26,25 +26,26 @@
     from printrun.printcore import __version__ as printcore_version
 
     usage = "Usage:\n"+\
-            "  pronsole [OPTION]\n\n"+\
+            "  pronsole [OPTIONS] [FILE]\n\n"+\
             "Options:\n"+\
+            "  -h, --help\t\t\tPrint this help message and exit\n"+\
             "  -V, --version\t\t\tPrint program's version number and exit\n"+\
-            "  -h, --help\t\t\tPrint this help message and exit\n"+\
-            "  -c, --conf\t\t\tLoad this file on startup instead of .pronsolerc; you may chain config files, if so settings auto-save will use the last specified file\n"+\
-            "  -e, --execute\t\t\tExecutes command after configuration/.pronsolerc is loaded; macros/settings from these commands are not autosaved"
+            "  -v, --verbose\t\t\tIncrease verbosity\n"+\
+            "  -c, --conf, --config=CONFIG_FILE\tLoad this file on startup instead of .pronsolerc; you may chain config files, if so settings auto-save will use the last specified file\n"+\
+            "  -e, --execute=COMMAND\t\tExecutes command after configuration/.pronsolerc is loaded; macros/settings from these commands are not autosaved"
 
     try:
-        opts, args = getopt.getopt(sys.argv[1:], "hVce", ["help", "version", "conf", "execute"])
-    except getopt.GetoptError, err:
-        print str(err)
-        print usage
+        opts, args = getopt.getopt(sys.argv[1:], "hVvc:e:", ["help", "version", "verbose", "conf=", "config=", "execute="])
+    except getopt.GetoptError as err:
+        print(str(err))
+        print(usage)
         sys.exit(2)
     for o, a in opts:
         if o in ('-V','--version'):
-            print "printrun "+printcore_version
+            print("printrun "+printcore_version)
             sys.exit(0)
         elif o in ('-h', '--help'):
-            print usage
+            print(usage)
             sys.exit(0)
 
     interp = pronsole()
--- a/printrun-src/pronterface.appdata.xml	Tue Jan 19 20:44:16 2021 +0100
+++ b/printrun-src/pronterface.appdata.xml	Tue Jan 19 20:45:09 2021 +0100
@@ -1,16 +1,23 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<application>
- <id type="desktop">pronterface.desktop</id>
- <licence>CC0</licence>
+<component type="desktop-application">
+ <id>com.github.kliment.printrun.pronterface</id>
+ <metadata_license>CC0-1.0</metadata_license>
+ <project_license>GPL-3.0+</project_license>
+ <name>Pronterface</name>
  <summary>3D printer host software</summary>
  <description>
   <p>Pronterface is a graphical user interface for desktop 3D printers, such as RepRap. It lets you view Gcode, connect to printer and send the Gcode to it. It's feature rich yet minimalist application.</p>
   <p>It allows you not only to send Gcode form file, but also control the printer manually or send Gcode commands directly trough input field.</p>
-  <p>Is integrates slicing tool, so if you load an STL 3D model to it, it will slice and load it automatically.</p>
+  <p>It integrates with slicing tools, so if you load an STL 3D model to it, it will slice and load it automatically.</p>
  </description>
+ <launchable type="desktop-id">pronterface.desktop</launchable>
  <screenshots>
-  <screenshot type="default" width="1061" height="596">https://raw.github.com/kliment/Printrun/master/screenshots/pronterface.png</screenshot>
-  <screenshot width="566" height="626">https://raw.github.com/kliment/Printrun/master/screenshots/pronterface2.png</screenshot>
+   <screenshot type="default">
+     <image width="1061" height="596">https://raw.github.com/kliment/Printrun/master/screenshots/pronterface.png</image>
+   </screenshot>
+   <screenshot>
+     <image width="566" height="626">https://raw.github.com/kliment/Printrun/master/screenshots/pronterface2.png</image>
+   </screenshot>
  </screenshots>
  <url type="homepage">https://github.com/kliment/Printrun</url>
-</application>
+</component>
--- a/printrun-src/pronterface.desktop	Tue Jan 19 20:44:16 2021 +0100
+++ b/printrun-src/pronterface.desktop	Tue Jan 19 20:45:09 2021 +0100
@@ -3,10 +3,10 @@
 Name=Pronterface
 GenericName=Printer Interface
 Comment=Controls your 3D printer
-Icon=/usr/share/pixmaps/pronterface.png
+Icon=pronterface
 Exec=/usr/bin/pronterface.py %f
 Path=/usr/share/pronterface/
 StartupNotify=true
 Terminal=false
 Categories=GNOME;GTK;Utility;Graphics;3DGraphics;
-MimeType=text/plain;application/octet-stream;application/sla;
+MimeType=application/sla;model/x.stl-binary;model/x.stl-ascii;text/x.gcode;
--- a/printrun-src/pronterface.py	Tue Jan 19 20:44:16 2021 +0100
+++ b/printrun-src/pronterface.py	Tue Jan 19 20:45:09 2021 +0100
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 
 # This file is part of the Printrun suite.
 #
@@ -15,20 +15,17 @@
 # You should have received a copy of the GNU General Public License
 # along with Printrun.  If not, see <http://www.gnu.org/licenses/>.
 
+import os
 import sys
 import getopt
 
 try:
     import wx  # NOQA
+    if wx.VERSION < (4,):
+        raise ImportError()
 except:
-    print("wxPython is not installed. This program requires wxPython to run.")
-    if sys.version_info.major >= 3:
-        print("""\
-As you are currently running python3, this is most likely because wxPython is
-not yet available for python3. You should try running with python2 instead.""")
-        sys.exit(-1)
-    else:
-        raise
+    print("wxPython >= 4 is not installed. This program requires wxPython >=4 to run.")
+    raise
 
 from printrun.pronterface import PronterApp
 
@@ -36,27 +33,30 @@
 
     from printrun.printcore import __version__ as printcore_version
 
+    os.environ['GDK_BACKEND'] = 'x11'
+
     usage = "Usage:\n"+\
-            "  pronterface [OPTION]\n\n"+\
+            "  pronterface [OPTIONS] [FILE]\n\n"+\
             "Options:\n"+\
+            "  -h, --help\t\t\tPrint this help message and exit\n"+\
             "  -V, --version\t\t\tPrint program's version number and exit\n"+\
-            "  -h, --help\t\t\tPrint this help message and exit\n"+\
+            "  -v, --verbose\t\t\tIncrease verbosity\n"+\
             "  -a, --autoconnect\t\tAutomatically try to connect to printer on startup\n"+\
-            "  -c, --conf\t\t\tLoad this file on startup instead of .pronsolerc; you may chain config files, if so settings auto-save will use the last specified file\n"+\
-            "  -e, --execute\t\t\tExecutes command after configuration/.pronsolerc is loaded; macros/settings from these commands are not autosaved"
+            "  -c, --conf, --config=CONFIG_FILE\tLoad this file on startup instead of .pronsolerc; you may chain config files, if so settings auto-save will use the last specified file\n"+\
+            "  -e, --execute=COMMAND\t\tExecutes command after configuration/.pronsolerc is loaded; macros/settings from these commands are not autosaved"
 
     try:
-        opts, args = getopt.getopt(sys.argv[1:], "hVcea", ["help", "version", "conf", "execute", "autoconnect"])
-    except getopt.GetoptError, err:
-        print str(err)
-        print usage
+        opts, args = getopt.getopt(sys.argv[1:], "hVvac:e:", ["help", "version", "verbose", "autoconnect", "conf=", "config=", "execute="])
+    except getopt.GetoptError as err:
+        print(str(err))
+        print(usage)
         sys.exit(2)
     for o, a in opts:
         if o in ('-V','--version'):
-            print "printrun "+printcore_version
+            print("printrun "+printcore_version)
             sys.exit(0)
         elif o in ('-h', '--help'):
-            print usage
+            print(usage)
             sys.exit(0)
 
     app = PronterApp(False)
--- a/printrun-src/requirements.txt	Tue Jan 19 20:44:16 2021 +0100
+++ b/printrun-src/requirements.txt	Tue Jan 19 20:45:09 2021 +0100
@@ -1,9 +1,13 @@
-argparse
-pyreadline
-pyserial
-wxPython
-numpy
-pyglet>=1.1
-pycairo
-cairosvg
-psutil>=2.0
+pyserial (>= 3.0)
+wxPython (== 4.1.0)
+numpy (>= 1.8.2)
+pyglet (>= 1.1)
+cffi
+cairocffi
+cairosvg (>= 1.0.9)
+psutil (>= 2.1)
+lxml (>= 2.9.1)
+appdirs (>= 1.4.0)
+dbus-python >= 1.2.0 ; sys_platform == 'linux'
+pyobjc-framework-Cocoa ; sys_platform == 'darwin'
+pyreadline ; sys_platform == 'win32'
--- a/printrun-src/setup.py	Tue Jan 19 20:44:16 2021 +0100
+++ b/printrun-src/setup.py	Tue Jan 19 20:45:09 2021 +0100
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 
 # This file is part of the Printrun suite.
 #
@@ -15,158 +15,85 @@
 # You should have received a copy of the GNU General Public License
 # along with Printrun.  If not, see <http://www.gnu.org/licenses/>.
 
-import sys
-import os
-from stat import S_IRUSR, S_IWUSR, S_IRGRP, S_IROTH
-from distutils.core import setup
-from distutils.command.install import install as _install
-from distutils.command.install_data import install_data as _install_data
+import ast
+import glob
+from setuptools import setup
+from setuptools import find_packages
+
 try:
     from Cython.Build import cythonize
     extensions = cythonize("printrun/gcoder_line.pyx")
     from Cython.Distutils import build_ext
-except ImportError, e:
-    print "WARNING: Failed to cythonize: %s" % e
+except ImportError as e:
+    print("WARNING: Failed to cythonize: %s" % e)
     # Debug helper: uncomment these:
     # import traceback
     # traceback.print_exc()
     extensions = None
     build_ext = None
 
-from printrun.printcore import __version__ as printcore_version
 
-INSTALLED_FILES = "installed_files"
-
-class install (_install):
+with open('README.md') as f:
+    long_description = f.read()
 
-    def run(self):
-        _install.run(self)
-        outputs = self.get_outputs()
-        length = 0
-        if self.root:
-            length += len(self.root)
-        if self.prefix:
-            length += len(self.prefix)
-        if length:
-            for counter in xrange(len(outputs)):
-                outputs[counter] = outputs[counter][length:]
-        data = "\n".join(outputs)
-        try:
-            file = open(INSTALLED_FILES, "w")
-        except:
-            self.warn("Could not write installed files list %s" %
-                      INSTALLED_FILES)
-            return
-        file.write(data)
-        file.close()
+with open('requirements.txt') as f:
+    install_requires = f.readlines()
 
-class install_data(_install_data):
+with open('printrun/printcore.py') as f:
+    for line in f.readlines():
+        if line.startswith("__version__"):
+            __version__ = ast.literal_eval(line.split("=")[1].strip())
+
 
-    def run(self):
-        def chmod_data_file(file):
-            try:
-                os.chmod(file, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)
-            except:
-                self.warn("Could not chmod data file %s" % file)
-        _install_data.run(self)
-        map(chmod_data_file, self.get_outputs())
+def multiglob(*globs):
+    paths = []
+    for g in globs:
+        paths.extend(glob.glob(g))
+    return paths
 
-class uninstall(_install):
 
-    def run(self):
-        try:
-            file = open(INSTALLED_FILES, "r")
-        except:
-            self.warn("Could not read installed files list %s" %
-                      INSTALLED_FILES)
-            return
-        files = file.readlines()
-        file.close()
-        prepend = ""
-        if self.root:
-            prepend += self.root
-        if self.prefix:
-            prepend += self.prefix
-        if len(prepend):
-            for counter in xrange(len(files)):
-                files[counter] = prepend + files[counter].rstrip()
-        for file in files:
-            print "Uninstalling", file
-            try:
-                os.unlink(file)
-            except:
-                self.warn("Could not remove file %s" % file)
+data_files = [
+    ('share/pixmaps', multiglob('*.png')),
+    ('share/applications', multiglob('*.desktop')),
+    ('share/metainfo', multiglob('*.appdata.xml')),
+    ('share/pronterface/images', multiglob('images/*.png',
+                                    'images/*.svg')),
+]
 
-ops = ("install", "build", "sdist", "uninstall", "clean", "build_ext")
+for locale in glob.glob('locale/*/LC_MESSAGES/'):
+    data_files.append((f'share/{locale}', glob.glob(f'{locale}/*.mo')))
+
 
-if len(sys.argv) < 2 or sys.argv[1] not in ops:
-    print "Please specify operation : %s" % " | ".join(ops)
-    raise SystemExit
-
-prefix = None
-if len(sys.argv) > 2:
-    i = 0
-    for o in sys.argv:
-        if o.startswith("--prefix"):
-            if o == "--prefix":
-                if len(sys.argv) >= i:
-                    prefix = sys.argv[i + 1]
-                sys.argv.remove(prefix)
-            elif o.startswith("--prefix=") and len(o[9:]):
-                prefix = o[9:]
-            sys.argv.remove(o)
-        i += 1
-if not prefix and "PREFIX" in os.environ:
-    prefix = os.environ["PREFIX"]
-if not prefix or not len(prefix):
-    prefix = sys.prefix
-
-if sys.argv[1] in("install", "uninstall") and len(prefix):
-    sys.argv += ["--prefix", prefix]
-
-target_images_path = "share/pronterface/images/"
-data_files = [('share/pixmaps', ['pronterface.png', 'plater.png', 'pronsole.png']),
-              ('share/applications', ['pronterface.desktop', 'pronsole.desktop', 'plater.desktop']),
-              ('share/appdata', ['pronterface.appdata.xml', 'pronsole.appdata.xml', 'plater.appdata.xml'])]
-
-for basedir, subdirs, files in os.walk("images"):
-    images = []
-    for filename in files:
-        if filename.find(".svg") or filename.find(".png"):
-            file_path = os.path.join(basedir, filename)
-            images.append(file_path)
-    data_files.append((target_images_path + basedir[len("images/"):], images))
-
-for basedir, subdirs, files in os.walk("locale"):
-    if not basedir.endswith("LC_MESSAGES"):
-        continue
-    destpath = os.path.join("share", "pronterface", basedir)
-    files = filter(lambda x: x.endswith(".mo"), files)
-    files = map(lambda x: os.path.join(basedir, x), files)
-    data_files.append((destpath, files))
-
-extra_data_dirs = ["css"]
-for extra_data_dir in extra_data_dirs:
-    for basedir, subdirs, files in os.walk(extra_data_dir):
-        files = map(lambda x: os.path.join(basedir, x), files)
-        destpath = os.path.join("share", "pronterface", basedir)
-        data_files.append((destpath, files))
-
-cmdclass = {"uninstall": uninstall,
-            "install": install,
-            "install_data": install_data}
-if build_ext:
-    cmdclass['build_ext'] = build_ext
-
-setup(name = "Printrun",
-      version = printcore_version,
-      description = "Host software for 3D printers",
-      author = "Kliment Yanev",
-      url = "http://github.com/kliment/Printrun/",
-      license = "GPLv3",
-      data_files = data_files,
-      packages = ["printrun", "printrun.gl", "printrun.gl.libtatlin", "printrun.gui", "printrun.power"],
-      scripts = ["pronsole.py", "pronterface.py", "plater.py", "printcore.py"],
-      cmdclass = cmdclass,
-      ext_modules = extensions,
-      )
+setup(
+    name="Printrun",
+    version=__version__,
+    description="Host software for 3D printers",
+    author="Kliment Yanev, Guillaume Seguin and others",
+    long_description=long_description,
+    long_description_content_type="text/markdown",
+    url="http://github.com/kliment/Printrun/",
+    license="GPLv3+",
+    data_files=data_files,
+    packages=find_packages(),
+    scripts=["pronsole.py", "pronterface.py", "plater.py", "printcore.py"],
+    ext_modules=extensions,
+    python_requires=">=3.6",
+    install_requires=install_requires,
+    setup_requires=["Cython"],
+    classifiers=[
+        "Environment :: X11 Applications :: GTK",
+        "Intended Audience :: End Users/Desktop",
+        "Intended Audience :: Manufacturing",
+        "Intended Audience :: Science/Research",
+        "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)",
+        "Operating System :: MacOS :: MacOS X",
+        "Operating System :: Microsoft :: Windows",
+        "Operating System :: POSIX :: Linux",
+        "Programming Language :: Python :: 3 :: Only",
+        "Programming Language :: Python :: 3.6",
+        "Programming Language :: Python :: 3.7",
+        "Programming Language :: Python :: 3.8",
+        "Topic :: Printing",
+    ],
+    zip_safe=False,
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/printrun-src/testfiles/layer-detect.gcode	Tue Jan 19 20:45:09 2021 +0100
@@ -0,0 +1,28 @@
+; Print this file to see the parsed layers
+; This file contains lines from https://github.com/kliment/Printrun/pull/1069#issuecomment-692127342
+; Interesting points:
+; Are layers snapped (merged,disappear) to near ones?
+; Are layers z coordinates modified?
+; Are layers without extrusion snapped to previous?
+; Handling of last layer - is extrusion respected?
+
+G1 Z5 ; lift nozzle
+
+G1 Z0.200 ; move to next layer (0)
+G0 Y1
+G1 X100 E1
+G1 Z0.203 ; move to next layer (1)
+G0 X1
+G1 X100 E2
+G1 Z0.300 ; move to next layer (2)
+G0 X1
+G1 X100 E3
+G1 Z0.398 ; move to next layer (3)
+G0 X1
+G1 X100 E4
+G1 Z0.458 ; move to next layer (4)
+G0 X1
+G1 X100 E5
+G1 Z0.503 ; move to next layer (5)
+
+;@!print([l.z for l in self.fgcode.all_layers])
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/printrun-src/testfiles/pause-restore-rel-e.gcode	Tue Jan 19 20:45:09 2021 +0100
@@ -0,0 +1,10 @@
+; test restoring of relative extrusion mode
+; after pause https://github.com/kliment/Printrun/issues/1083
+G28
+G90 ; abs all, including E
+M83 ; relative E
+;@!print('Please press Resume and check for M 83')
+;@!self.p.loud = True
+;@pause
+;@!self.p.loud = False
+;@!threading.Timer(2, lambda logbox: print('PASSED. Seen M 83' if 'M' + '83' in logbox.Value else 'FAILED: M 83 not seen'), (self.logbox,)).start()
--- a/printrun-src/testtools/gcodeviewer.py	Tue Jan 19 20:44:16 2021 +0100
+++ b/printrun-src/testtools/gcodeviewer.py	Tue Jan 19 20:45:09 2021 +0100
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 
 # This file is part of the Printrun suite.
 #
@@ -32,7 +32,7 @@
 build_dimensions = [200, 200, 100, 0, 0, 0]
 frame = GcodeViewFrame(None, wx.ID_ANY, 'Gcode view, shift to move view, mousewheel to set layer', size = (800, 800), build_dimensions = build_dimensions)
 gcode = gcoder.GCode(open(sys.argv[1]))
-print "Gcode loaded"
+print("Gcode loaded")
 frame.addfile(gcode)
 
 first_move = None
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/printrun-src/testtools/lengthy.py	Tue Jan 19 20:45:09 2021 +0100
@@ -0,0 +1,10 @@
+#!/usr/bin/python3
+#generate many g1 to test serial buffer overflow in run_gcode_script
+#run like this:
+#in pronsole> run_gcode_script ./testtools/lengthy.py
+print('G28 X')
+print('G1 X0')
+for x in range(100):
+    print()
+    print('  ')
+    print('G1 X', x)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/printrun-src/testtools/mock-printer.py	Tue Jan 19 20:45:09 2021 +0100
@@ -0,0 +1,30 @@
+#!/usr/bin/env python3
+# Test network communication without networked 3d printer
+# Usage:
+# bash1$ ./mock-printer.py
+# bash2$ ./pronsole
+# pronsole> connect localhost:8080
+# ...> load sliced.gcode
+# ...> print
+# ...> etc...
+import socket
+with socket.socket() as s:
+    s.bind(('127.0.0.1', 8080))
+    s.listen(1)
+    c, addr = s.accept()
+    print(c)
+    temp = 0
+    try:
+        c.sendall(b'start\n')
+        while True:
+            msg = c.recv(1024)
+            if not msg:
+                break
+            print(msg)
+            if msg == b'M105\n':
+                c.sendall(('ok T:%d\n'%(20 + temp)).encode('ascii'))
+                temp = (temp + 1)%30
+            else:
+                c.sendall(b'ok\n')
+    finally:
+        c.close()

mercurial