diff --git a/CMakeLists.txt b/CMakeLists.txt index 3a10a4de1..ac9be9fa1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -397,6 +397,7 @@ endif () find_package(PNG REQUIRED) +set(OpenGL_GL_PREFERENCE "LEGACY") find_package(OpenGL REQUIRED) # Find glew or use bundled version @@ -513,9 +514,13 @@ endif() if (WIN32) install(DIRECTORY "${SLIC3R_RESOURCES_DIR}/" DESTINATION "${CMAKE_INSTALL_PREFIX}/resources") elseif (SLIC3R_FHS) + # CMAKE_INSTALL_FULL_DATAROOTDIR: read-only architecture-independent data root (share) set(SLIC3R_FHS_RESOURCES "${CMAKE_INSTALL_FULL_DATAROOTDIR}/SuperSlicer") install(DIRECTORY "${SLIC3R_RESOURCES_DIR}/" DESTINATION "${SLIC3R_FHS_RESOURCES}") + install(FILES src/platform/unix/SuperSlicer.desktop DESTINATION ${SLIC3R_FHS_RESOURCES}/applications) else () + install(FILES src/platform/unix/SuperSlicer.desktop DESTINATION ${CMAKE_INSTALL_PREFIX}/resources/applications) install(DIRECTORY "${SLIC3R_RESOURCES_DIR}/" DESTINATION "${CMAKE_INSTALL_PREFIX}/resources") endif () + configure_file(${LIBDIR}/platform/unix/fhs.hpp.in ${LIBDIR_BIN}/platform/unix/fhs.hpp) diff --git a/deps/PNG/PNG.cmake b/deps/PNG/PNG.cmake index 01bd98499..3e55991fb 100644 --- a/deps/PNG/PNG.cmake +++ b/deps/PNG/PNG.cmake @@ -1,3 +1,4 @@ + prusaslicer_add_cmake_project(PNG GIT_REPOSITORY https://github.com/glennrp/libpng.git GIT_TAG v1.6.35 @@ -5,6 +6,7 @@ prusaslicer_add_cmake_project(PNG CMAKE_ARGS -DPNG_SHARED=OFF -DPNG_STATIC=ON + -DPNG_PREFIX=prusaslicer_ -DPNG_TESTS=OFF ) diff --git a/resources/icons/PrusaSlicer-gcodeviewer.ico b/resources/icons/PrusaSlicer-gcodeviewer.ico index 2c9272369..955b8c6dc 100644 Binary files a/resources/icons/PrusaSlicer-gcodeviewer.ico and b/resources/icons/PrusaSlicer-gcodeviewer.ico differ diff --git a/resources/icons/PrusaSlicer-gcodeviewer_128px.png b/resources/icons/PrusaSlicer-gcodeviewer_128px.png index d8e3e438b..f75bcfe58 100644 Binary files a/resources/icons/PrusaSlicer-gcodeviewer_128px.png and b/resources/icons/PrusaSlicer-gcodeviewer_128px.png differ diff --git a/resources/icons/PrusaSlicer-gcodeviewer_192px.png b/resources/icons/PrusaSlicer-gcodeviewer_192px.png index 0e0243012..7f4e9d617 100644 Binary files a/resources/icons/PrusaSlicer-gcodeviewer_192px.png and b/resources/icons/PrusaSlicer-gcodeviewer_192px.png differ diff --git a/resources/icons/PrusaSlicer-gcodeviewer_32px.png b/resources/icons/PrusaSlicer-gcodeviewer_32px.png new file mode 100644 index 000000000..0f7e49d87 Binary files /dev/null and b/resources/icons/PrusaSlicer-gcodeviewer_32px.png differ diff --git a/resources/icons/white/exit.svg b/resources/icons/white/exit.svg new file mode 100644 index 000000000..e5aebcfc2 --- /dev/null +++ b/resources/icons/white/exit.svg @@ -0,0 +1,13 @@ + + + + + + + + diff --git a/resources/icons/white/switch_presets.svg b/resources/icons/white/switch_presets.svg new file mode 100644 index 000000000..efcc3670c --- /dev/null +++ b/resources/icons/white/switch_presets.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + diff --git a/resources/localization/PrusaSlicer.pot b/resources/localization/PrusaSlicer.pot index aef39c253..a111c8fa0 100644 --- a/resources/localization/PrusaSlicer.pot +++ b/resources/localization/PrusaSlicer.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-16 11:29+0200\n" +"POT-Creation-Date: 2020-10-19 13:45+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,109 +18,55 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" -#: src/slic3r/GUI/AboutDialog.cpp:42 src/slic3r/GUI/AboutDialog.cpp:295 +#: src/slic3r/GUI/AboutDialog.cpp:43 src/slic3r/GUI/AboutDialog.cpp:48 +#: src/slic3r/GUI/AboutDialog.cpp:317 msgid "Portions copyright" msgstr "" -#: src/slic3r/GUI/AboutDialog.cpp:130 src/slic3r/GUI/AboutDialog.cpp:259 +#: src/slic3r/GUI/AboutDialog.cpp:139 src/slic3r/GUI/AboutDialog.cpp:281 msgid "Copyright" msgstr "" #. TRN "Slic3r _is licensed under the_ License" -#: src/slic3r/GUI/AboutDialog.cpp:132 +#: src/slic3r/GUI/AboutDialog.cpp:141 msgid "" "License agreements of all following programs (libraries) are part of " "application license agreement" msgstr "" -#: src/slic3r/GUI/AboutDialog.cpp:202 +#: src/slic3r/GUI/AboutDialog.cpp:212 src/slic3r/GUI/AboutDialog.cpp:215 #, possible-c-format msgid "About %s" msgstr "" -#: src/slic3r/GUI/AboutDialog.cpp:234 src/slic3r/GUI/MainFrame.cpp:70 +#: src/slic3r/GUI/AboutDialog.cpp:256 src/slic3r/GUI/GUI_App.cpp:239 +#: src/slic3r/GUI/MainFrame.cpp:164 msgid "Version" msgstr "" #. TRN "Slic3r _is licensed under the_ License" -#: src/slic3r/GUI/AboutDialog.cpp:261 +#: src/slic3r/GUI/AboutDialog.cpp:283 src/slic3r/GUI/GUI_App.cpp:244 msgid "is licensed under the" msgstr "" -#: src/slic3r/GUI/AboutDialog.cpp:262 +#: src/slic3r/GUI/AboutDialog.cpp:284 src/slic3r/GUI/GUI_App.cpp:244 msgid "GNU Affero General Public License, version 3" msgstr "" -#: src/slic3r/GUI/AboutDialog.cpp:263 +#: src/slic3r/GUI/AboutDialog.cpp:285 msgid "" "PrusaSlicer is based on Slic3r by Alessandro Ranellucci and the RepRap " "community." msgstr "" -#: src/slic3r/GUI/AboutDialog.cpp:264 +#: src/slic3r/GUI/AboutDialog.cpp:286 msgid "" "Contributions by Henrik Brix Andersen, Nicolas Dandrimont, Mark Hindess, " "Petr Ledvina, Joseph Lenox, Y. Sapir, Mike Sheldrake, Vojtech Bubnik and " "numerous others." msgstr "" -#: src/slic3r/GUI/AppConfig.cpp:110 -msgid "" -"Error parsing PrusaSlicer config file, it is probably corrupted. Try to " -"manually delete the file to recover from the error. Your user profiles will " -"not be affected." -msgstr "" - -#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:101 -msgid "" -"Copying of the temporary G-code to the output G-code failed. Maybe the SD " -"card is write locked?" -msgstr "" - -#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:104 -msgid "" -"Copying of the temporary G-code to the output G-code failed. There might be " -"problem with target device, please try exporting again or using different " -"device. The corrupted output G-code is at %1%.tmp." -msgstr "" - -#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:107 -msgid "" -"Renaming of the G-code after copying to the selected destination folder has " -"failed. Current path is %1%.tmp. Please try exporting again." -msgstr "" - -#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:110 -msgid "" -"Copying of the temporary G-code has finished but the original code at %1% " -"couldn't be opened during copy check. The output G-code is at %2%.tmp." -msgstr "" - -#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:113 -msgid "" -"Copying of the temporary G-code has finished but the exported code couldn't " -"be opened during copy check. The output G-code is at %1%.tmp." -msgstr "" - -#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:120 -#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:468 -msgid "Running post-processing scripts" -msgstr "" - -#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:122 -msgid "G-code file exported to %1%" -msgstr "" - -#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:126 -#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:172 -msgid "Slicing complete" -msgstr "" - -#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:168 -msgid "Masked SLA file exported to %1%" -msgstr "" - -#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:210 +#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:62 #, possible-c-format msgid "" "%s has encountered an error. It was likely caused by running out of memory. " @@ -128,161 +74,219 @@ msgid "" "and we would be glad if you reported it." msgstr "" -#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:470 +#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:144 +msgid "" +"Copying of the temporary G-code to the output G-code failed. Maybe the SD " +"card is write locked?" +msgstr "" + +#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:147 +msgid "" +"Copying of the temporary G-code to the output G-code failed. There might be " +"problem with target device, please try exporting again or using different " +"device. The corrupted output G-code is at %1%.tmp." +msgstr "" + +#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:150 +msgid "" +"Renaming of the G-code after copying to the selected destination folder has " +"failed. Current path is %1%.tmp. Please try exporting again." +msgstr "" + +#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:153 +msgid "" +"Copying of the temporary G-code has finished but the original code at %1% " +"couldn't be opened during copy check. The output G-code is at %2%.tmp." +msgstr "" + +#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:156 +msgid "" +"Copying of the temporary G-code has finished but the exported code couldn't " +"be opened during copy check. The output G-code is at %1%.tmp." +msgstr "" + +#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:163 +#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:520 +msgid "Running post-processing scripts" +msgstr "" + +#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:165 +msgid "G-code file exported to %1%" +msgstr "" + +#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:170 +#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:219 +msgid "Slicing complete" +msgstr "" + +#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:214 +msgid "Masked SLA file exported to %1%" +msgstr "" + +#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:522 msgid "Copying of the temporary G-code to the output G-code failed" msgstr "" -#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:493 +#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:545 msgid "Scheduling upload to `%1%`. See Window -> Print Host Upload Queue" msgstr "" -#: src/slic3r/GUI/BedShapeDialog.cpp:66 src/slic3r/GUI/GUI_ObjectList.cpp:2073 -msgid "Shape" -msgstr "" - -#: src/slic3r/GUI/BedShapeDialog.cpp:73 -msgid "Rectangular" -msgstr "" - -#: src/slic3r/GUI/BedShapeDialog.cpp:79 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:232 src/slic3r/GUI/Plater.cpp:162 -#: src/slic3r/GUI/Tab.cpp:2319 +#: src/slic3r/GUI/BedShapeDialog.cpp:93 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:240 src/slic3r/GUI/Plater.cpp:166 +#: src/slic3r/GUI/Tab.cpp:2493 msgid "Size" msgstr "" -#: src/slic3r/GUI/BedShapeDialog.cpp:80 -msgid "Size in X and Y of the rectangular plate." -msgstr "" - -#: src/slic3r/GUI/BedShapeDialog.cpp:88 +#: src/slic3r/GUI/BedShapeDialog.cpp:94 msgid "Origin" msgstr "" -#: src/slic3r/GUI/BedShapeDialog.cpp:89 +#: src/slic3r/GUI/BedShapeDialog.cpp:95 src/libslic3r/PrintConfig.cpp:745 +msgid "Diameter" +msgstr "" + +#: src/slic3r/GUI/BedShapeDialog.cpp:110 +msgid "Size in X and Y of the rectangular plate." +msgstr "" + +#: src/slic3r/GUI/BedShapeDialog.cpp:121 msgid "" "Distance of the 0,0 G-code coordinate from the front left corner of the " "rectangle." msgstr "" -#: src/slic3r/GUI/BedShapeDialog.cpp:93 -msgid "Circular" -msgstr "" - -#: src/slic3r/GUI/BedShapeDialog.cpp:96 src/slic3r/GUI/ConfigWizard.cpp:233 -#: src/slic3r/GUI/ConfigWizard.cpp:985 src/slic3r/GUI/ConfigWizard.cpp:999 +#: src/slic3r/GUI/BedShapeDialog.cpp:129 src/slic3r/GUI/ConfigWizard.cpp:236 +#: src/slic3r/GUI/ConfigWizard.cpp:1336 src/slic3r/GUI/ConfigWizard.cpp:1350 #: src/slic3r/GUI/ExtruderSequenceDialog.cpp:87 -#: src/slic3r/GUI/GUI_ObjectLayers.cpp:142 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:333 +#: src/slic3r/GUI/GCodeViewer.cpp:2183 src/slic3r/GUI/GCodeViewer.cpp:2189 +#: src/slic3r/GUI/GCodeViewer.cpp:2197 src/slic3r/GUI/GUI_ObjectLayers.cpp:145 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:341 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:418 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:486 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:487 #: src/slic3r/GUI/ObjectDataViewModel.cpp:96 #: src/slic3r/GUI/WipeTowerDialog.cpp:85 src/libslic3r/PrintConfig.cpp:75 -#: src/libslic3r/PrintConfig.cpp:82 src/libslic3r/PrintConfig.cpp:91 -#: src/libslic3r/PrintConfig.cpp:122 src/libslic3r/PrintConfig.cpp:188 -#: src/libslic3r/PrintConfig.cpp:246 src/libslic3r/PrintConfig.cpp:321 -#: src/libslic3r/PrintConfig.cpp:329 src/libslic3r/PrintConfig.cpp:379 -#: src/libslic3r/PrintConfig.cpp:505 src/libslic3r/PrintConfig.cpp:516 -#: src/libslic3r/PrintConfig.cpp:534 src/libslic3r/PrintConfig.cpp:712 -#: src/libslic3r/PrintConfig.cpp:1231 src/libslic3r/PrintConfig.cpp:1292 -#: src/libslic3r/PrintConfig.cpp:1310 src/libslic3r/PrintConfig.cpp:1328 -#: src/libslic3r/PrintConfig.cpp:1384 src/libslic3r/PrintConfig.cpp:1394 -#: src/libslic3r/PrintConfig.cpp:1516 src/libslic3r/PrintConfig.cpp:1524 -#: src/libslic3r/PrintConfig.cpp:1565 src/libslic3r/PrintConfig.cpp:1573 -#: src/libslic3r/PrintConfig.cpp:1583 src/libslic3r/PrintConfig.cpp:1591 -#: src/libslic3r/PrintConfig.cpp:1599 src/libslic3r/PrintConfig.cpp:1682 -#: src/libslic3r/PrintConfig.cpp:1921 src/libslic3r/PrintConfig.cpp:1992 -#: src/libslic3r/PrintConfig.cpp:2026 src/libslic3r/PrintConfig.cpp:2154 -#: src/libslic3r/PrintConfig.cpp:2233 src/libslic3r/PrintConfig.cpp:2240 -#: src/libslic3r/PrintConfig.cpp:2247 src/libslic3r/PrintConfig.cpp:2277 -#: src/libslic3r/PrintConfig.cpp:2287 src/libslic3r/PrintConfig.cpp:2297 -#: src/libslic3r/PrintConfig.cpp:2457 src/libslic3r/PrintConfig.cpp:2491 -#: src/libslic3r/PrintConfig.cpp:2630 src/libslic3r/PrintConfig.cpp:2639 -#: src/libslic3r/PrintConfig.cpp:2648 src/libslic3r/PrintConfig.cpp:2658 -#: src/libslic3r/PrintConfig.cpp:2712 src/libslic3r/PrintConfig.cpp:2722 -#: src/libslic3r/PrintConfig.cpp:2734 src/libslic3r/PrintConfig.cpp:2754 -#: src/libslic3r/PrintConfig.cpp:2764 src/libslic3r/PrintConfig.cpp:2774 -#: src/libslic3r/PrintConfig.cpp:2792 src/libslic3r/PrintConfig.cpp:2807 -#: src/libslic3r/PrintConfig.cpp:2821 src/libslic3r/PrintConfig.cpp:2832 -#: src/libslic3r/PrintConfig.cpp:2845 src/libslic3r/PrintConfig.cpp:2890 -#: src/libslic3r/PrintConfig.cpp:2900 src/libslic3r/PrintConfig.cpp:2909 -#: src/libslic3r/PrintConfig.cpp:2919 src/libslic3r/PrintConfig.cpp:2935 -#: src/libslic3r/PrintConfig.cpp:2959 +#: src/libslic3r/PrintConfig.cpp:82 src/libslic3r/PrintConfig.cpp:93 +#: src/libslic3r/PrintConfig.cpp:124 src/libslic3r/PrintConfig.cpp:222 +#: src/libslic3r/PrintConfig.cpp:280 src/libslic3r/PrintConfig.cpp:355 +#: src/libslic3r/PrintConfig.cpp:363 src/libslic3r/PrintConfig.cpp:413 +#: src/libslic3r/PrintConfig.cpp:541 src/libslic3r/PrintConfig.cpp:552 +#: src/libslic3r/PrintConfig.cpp:570 src/libslic3r/PrintConfig.cpp:748 +#: src/libslic3r/PrintConfig.cpp:1158 src/libslic3r/PrintConfig.cpp:1339 +#: src/libslic3r/PrintConfig.cpp:1400 src/libslic3r/PrintConfig.cpp:1418 +#: src/libslic3r/PrintConfig.cpp:1436 src/libslic3r/PrintConfig.cpp:1492 +#: src/libslic3r/PrintConfig.cpp:1502 src/libslic3r/PrintConfig.cpp:1624 +#: src/libslic3r/PrintConfig.cpp:1632 src/libslic3r/PrintConfig.cpp:1673 +#: src/libslic3r/PrintConfig.cpp:1681 src/libslic3r/PrintConfig.cpp:1691 +#: src/libslic3r/PrintConfig.cpp:1699 src/libslic3r/PrintConfig.cpp:1707 +#: src/libslic3r/PrintConfig.cpp:1790 src/libslic3r/PrintConfig.cpp:2056 +#: src/libslic3r/PrintConfig.cpp:2127 src/libslic3r/PrintConfig.cpp:2161 +#: src/libslic3r/PrintConfig.cpp:2290 src/libslic3r/PrintConfig.cpp:2369 +#: src/libslic3r/PrintConfig.cpp:2376 src/libslic3r/PrintConfig.cpp:2383 +#: src/libslic3r/PrintConfig.cpp:2413 src/libslic3r/PrintConfig.cpp:2423 +#: src/libslic3r/PrintConfig.cpp:2433 src/libslic3r/PrintConfig.cpp:2593 +#: src/libslic3r/PrintConfig.cpp:2627 src/libslic3r/PrintConfig.cpp:2766 +#: src/libslic3r/PrintConfig.cpp:2775 src/libslic3r/PrintConfig.cpp:2784 +#: src/libslic3r/PrintConfig.cpp:2794 src/libslic3r/PrintConfig.cpp:2859 +#: src/libslic3r/PrintConfig.cpp:2869 src/libslic3r/PrintConfig.cpp:2881 +#: src/libslic3r/PrintConfig.cpp:2901 src/libslic3r/PrintConfig.cpp:2911 +#: src/libslic3r/PrintConfig.cpp:2921 src/libslic3r/PrintConfig.cpp:2939 +#: src/libslic3r/PrintConfig.cpp:2954 src/libslic3r/PrintConfig.cpp:2968 +#: src/libslic3r/PrintConfig.cpp:2979 src/libslic3r/PrintConfig.cpp:2992 +#: src/libslic3r/PrintConfig.cpp:3037 src/libslic3r/PrintConfig.cpp:3047 +#: src/libslic3r/PrintConfig.cpp:3056 src/libslic3r/PrintConfig.cpp:3066 +#: src/libslic3r/PrintConfig.cpp:3082 src/libslic3r/PrintConfig.cpp:3106 msgid "mm" msgstr "" -#: src/slic3r/GUI/BedShapeDialog.cpp:97 src/libslic3r/PrintConfig.cpp:709 -msgid "Diameter" -msgstr "" - -#: src/slic3r/GUI/BedShapeDialog.cpp:98 +#: src/slic3r/GUI/BedShapeDialog.cpp:131 msgid "" "Diameter of the print bed. It is assumed that origin (0,0) is located in the " "center." msgstr "" -#: src/slic3r/GUI/BedShapeDialog.cpp:102 src/slic3r/GUI/GUI_Preview.cpp:308 -#: src/libslic3r/ExtrusionEntity.cpp:322 +#: src/slic3r/GUI/BedShapeDialog.cpp:141 +msgid "Rectangular" +msgstr "" + +#: src/slic3r/GUI/BedShapeDialog.cpp:142 +msgid "Circular" +msgstr "" + +#: src/slic3r/GUI/BedShapeDialog.cpp:143 src/slic3r/GUI/GUI_Preview.cpp:314 +#: src/libslic3r/ExtrusionEntity.cpp:327 src/libslic3r/ExtrusionEntity.cpp:362 msgid "Custom" msgstr "" -#: src/slic3r/GUI/BedShapeDialog.cpp:106 +#: src/slic3r/GUI/BedShapeDialog.cpp:145 +msgid "Invalid" +msgstr "" + +#: src/slic3r/GUI/BedShapeDialog.cpp:156 src/slic3r/GUI/BedShapeDialog.cpp:222 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2215 +msgid "Shape" +msgstr "" + +#: src/slic3r/GUI/BedShapeDialog.cpp:243 msgid "Load shape from STL..." msgstr "" -#: src/slic3r/GUI/BedShapeDialog.cpp:159 +#: src/slic3r/GUI/BedShapeDialog.cpp:292 src/slic3r/GUI/MainFrame.cpp:1969 msgid "Settings" msgstr "" -#: src/slic3r/GUI/BedShapeDialog.cpp:176 +#: src/slic3r/GUI/BedShapeDialog.cpp:315 msgid "Texture" msgstr "" -#: src/slic3r/GUI/BedShapeDialog.cpp:186 src/slic3r/GUI/BedShapeDialog.cpp:265 +#: src/slic3r/GUI/BedShapeDialog.cpp:325 src/slic3r/GUI/BedShapeDialog.cpp:405 msgid "Load..." msgstr "" -#: src/slic3r/GUI/BedShapeDialog.cpp:194 src/slic3r/GUI/BedShapeDialog.cpp:273 -#: src/slic3r/GUI/Tab.cpp:3155 +#: src/slic3r/GUI/BedShapeDialog.cpp:333 src/slic3r/GUI/BedShapeDialog.cpp:413 +#: src/slic3r/GUI/Tab.cpp:3423 msgid "Remove" msgstr "" -#: src/slic3r/GUI/BedShapeDialog.cpp:227 src/slic3r/GUI/BedShapeDialog.cpp:306 +#: src/slic3r/GUI/BedShapeDialog.cpp:366 src/slic3r/GUI/BedShapeDialog.cpp:446 msgid "Not found:" msgstr "" -#: src/slic3r/GUI/BedShapeDialog.cpp:255 +#: src/slic3r/GUI/BedShapeDialog.cpp:395 msgid "Model" msgstr "" -#: src/slic3r/GUI/BedShapeDialog.cpp:491 +#: src/slic3r/GUI/BedShapeDialog.cpp:563 msgid "Choose an STL file to import bed shape from:" msgstr "" -#: src/slic3r/GUI/BedShapeDialog.cpp:498 src/slic3r/GUI/BedShapeDialog.cpp:547 -#: src/slic3r/GUI/BedShapeDialog.cpp:570 +#: src/slic3r/GUI/BedShapeDialog.cpp:570 src/slic3r/GUI/BedShapeDialog.cpp:619 +#: src/slic3r/GUI/BedShapeDialog.cpp:642 msgid "Invalid file format." msgstr "" -#: src/slic3r/GUI/BedShapeDialog.cpp:509 +#: src/slic3r/GUI/BedShapeDialog.cpp:581 msgid "Error! Invalid model" msgstr "" -#: src/slic3r/GUI/BedShapeDialog.cpp:517 +#: src/slic3r/GUI/BedShapeDialog.cpp:589 msgid "The selected file contains no geometry." msgstr "" -#: src/slic3r/GUI/BedShapeDialog.cpp:521 +#: src/slic3r/GUI/BedShapeDialog.cpp:593 msgid "" "The selected file contains several disjoint areas. This is not supported." msgstr "" -#: src/slic3r/GUI/BedShapeDialog.cpp:536 +#: src/slic3r/GUI/BedShapeDialog.cpp:608 msgid "Choose a file to import bed texture from (PNG/SVG):" msgstr "" -#: src/slic3r/GUI/BedShapeDialog.cpp:559 +#: src/slic3r/GUI/BedShapeDialog.cpp:631 msgid "Choose an STL file to import bed model from:" msgstr "" -#: src/slic3r/GUI/BedShapeDialog.hpp:59 src/slic3r/GUI/ConfigWizard.cpp:944 +#: src/slic3r/GUI/BedShapeDialog.hpp:98 src/slic3r/GUI/ConfigWizard.cpp:1295 msgid "Bed Shape" msgstr "" @@ -328,31 +332,31 @@ msgid "" "preset" msgstr "" -#: src/slic3r/GUI/ConfigManipulation.cpp:48 +#: src/slic3r/GUI/ConfigManipulation.cpp:47 msgid "" "Zero layer height is not valid.\n" "\n" "The layer height will be reset to 0.01." msgstr "" -#: src/slic3r/GUI/ConfigManipulation.cpp:49 -#: src/slic3r/GUI/GUI_ObjectLayers.cpp:27 src/slic3r/GUI/Tab.cpp:1116 +#: src/slic3r/GUI/ConfigManipulation.cpp:48 +#: src/slic3r/GUI/GUI_ObjectLayers.cpp:29 src/slic3r/GUI/Tab.cpp:1371 #: src/libslic3r/PrintConfig.cpp:71 msgid "Layer height" msgstr "" -#: src/slic3r/GUI/ConfigManipulation.cpp:60 +#: src/slic3r/GUI/ConfigManipulation.cpp:59 msgid "" "Zero first layer height is not valid.\n" "\n" "The first layer height will be reset to 0.01." msgstr "" -#: src/slic3r/GUI/ConfigManipulation.cpp:61 src/libslic3r/PrintConfig.cpp:889 +#: src/slic3r/GUI/ConfigManipulation.cpp:60 src/libslic3r/PrintConfig.cpp:931 msgid "First layer height" msgstr "" -#: src/slic3r/GUI/ConfigManipulation.cpp:81 +#: src/slic3r/GUI/ConfigManipulation.cpp:80 #, possible-c-format msgid "" "The Spiral Vase mode requires:\n" @@ -364,15 +368,15 @@ msgid "" "- Detect thin walls disabled" msgstr "" -#: src/slic3r/GUI/ConfigManipulation.cpp:89 +#: src/slic3r/GUI/ConfigManipulation.cpp:88 msgid "Shall I adjust those settings in order to enable Spiral Vase?" msgstr "" -#: src/slic3r/GUI/ConfigManipulation.cpp:90 +#: src/slic3r/GUI/ConfigManipulation.cpp:89 msgid "Spiral Vase" msgstr "" -#: src/slic3r/GUI/ConfigManipulation.cpp:115 +#: src/slic3r/GUI/ConfigManipulation.cpp:114 msgid "" "The Wipe Tower currently supports the non-soluble supports only\n" "if they are printed with the current extruder without triggering a tool " @@ -381,74 +385,74 @@ msgid "" "to be set to 0)." msgstr "" -#: src/slic3r/GUI/ConfigManipulation.cpp:119 +#: src/slic3r/GUI/ConfigManipulation.cpp:118 msgid "Shall I adjust those settings in order to enable the Wipe Tower?" msgstr "" -#: src/slic3r/GUI/ConfigManipulation.cpp:120 -#: src/slic3r/GUI/ConfigManipulation.cpp:140 +#: src/slic3r/GUI/ConfigManipulation.cpp:119 +#: src/slic3r/GUI/ConfigManipulation.cpp:139 msgid "Wipe Tower" msgstr "" -#: src/slic3r/GUI/ConfigManipulation.cpp:136 +#: src/slic3r/GUI/ConfigManipulation.cpp:135 msgid "" "For the Wipe Tower to work with the soluble supports, the support layers\n" "need to be synchronized with the object layers." msgstr "" -#: src/slic3r/GUI/ConfigManipulation.cpp:139 +#: src/slic3r/GUI/ConfigManipulation.cpp:138 msgid "Shall I synchronize support layers in order to enable the Wipe Tower?" msgstr "" -#: src/slic3r/GUI/ConfigManipulation.cpp:159 +#: src/slic3r/GUI/ConfigManipulation.cpp:158 msgid "" "Supports work better, if the following feature is enabled:\n" "- Detect bridging perimeters" msgstr "" -#: src/slic3r/GUI/ConfigManipulation.cpp:162 +#: src/slic3r/GUI/ConfigManipulation.cpp:161 msgid "Shall I adjust those settings for supports?" msgstr "" -#: src/slic3r/GUI/ConfigManipulation.cpp:163 +#: src/slic3r/GUI/ConfigManipulation.cpp:162 msgid "Support Generator" msgstr "" -#: src/slic3r/GUI/ConfigManipulation.cpp:208 +#: src/slic3r/GUI/ConfigManipulation.cpp:207 msgid "The %1% infill pattern is not supposed to work at 100%% density." msgstr "" -#: src/slic3r/GUI/ConfigManipulation.cpp:210 +#: src/slic3r/GUI/ConfigManipulation.cpp:209 msgid "Shall I switch to rectilinear fill pattern?" msgstr "" -#: src/slic3r/GUI/ConfigManipulation.cpp:211 -#: src/slic3r/GUI/GUI_ObjectList.cpp:35 src/slic3r/GUI/GUI_ObjectList.cpp:96 -#: src/slic3r/GUI/GUI_ObjectList.cpp:618 src/slic3r/GUI/Plater.cpp:534 -#: src/slic3r/GUI/Tab.cpp:1158 src/slic3r/GUI/Tab.cpp:1159 -#: src/libslic3r/PrintConfig.cpp:203 src/libslic3r/PrintConfig.cpp:416 -#: src/libslic3r/PrintConfig.cpp:436 src/libslic3r/PrintConfig.cpp:776 -#: src/libslic3r/PrintConfig.cpp:790 src/libslic3r/PrintConfig.cpp:827 -#: src/libslic3r/PrintConfig.cpp:981 src/libslic3r/PrintConfig.cpp:991 -#: src/libslic3r/PrintConfig.cpp:1009 src/libslic3r/PrintConfig.cpp:1028 -#: src/libslic3r/PrintConfig.cpp:1047 src/libslic3r/PrintConfig.cpp:1735 -#: src/libslic3r/PrintConfig.cpp:1752 +#: src/slic3r/GUI/ConfigManipulation.cpp:210 +#: src/slic3r/GUI/GUI_ObjectList.cpp:35 src/slic3r/GUI/GUI_ObjectList.cpp:93 +#: src/slic3r/GUI/GUI_ObjectList.cpp:652 src/slic3r/GUI/Plater.cpp:393 +#: src/slic3r/GUI/Tab.cpp:1413 src/slic3r/GUI/Tab.cpp:1414 +#: src/libslic3r/PrintConfig.cpp:237 src/libslic3r/PrintConfig.cpp:450 +#: src/libslic3r/PrintConfig.cpp:472 src/libslic3r/PrintConfig.cpp:812 +#: src/libslic3r/PrintConfig.cpp:826 src/libslic3r/PrintConfig.cpp:863 +#: src/libslic3r/PrintConfig.cpp:1025 src/libslic3r/PrintConfig.cpp:1035 +#: src/libslic3r/PrintConfig.cpp:1053 src/libslic3r/PrintConfig.cpp:1072 +#: src/libslic3r/PrintConfig.cpp:1091 src/libslic3r/PrintConfig.cpp:1843 +#: src/libslic3r/PrintConfig.cpp:1860 msgid "Infill" msgstr "" -#: src/slic3r/GUI/ConfigManipulation.cpp:318 +#: src/slic3r/GUI/ConfigManipulation.cpp:322 msgid "Head penetration should not be greater than the head width." msgstr "" -#: src/slic3r/GUI/ConfigManipulation.cpp:320 +#: src/slic3r/GUI/ConfigManipulation.cpp:324 msgid "Invalid Head penetration" msgstr "" -#: src/slic3r/GUI/ConfigManipulation.cpp:331 +#: src/slic3r/GUI/ConfigManipulation.cpp:335 msgid "Pinhead diameter should be smaller than the pillar diameter." msgstr "" -#: src/slic3r/GUI/ConfigManipulation.cpp:333 +#: src/slic3r/GUI/ConfigManipulation.cpp:337 msgid "Invalid pinhead diameter" msgstr "" @@ -464,11 +468,12 @@ msgstr "" msgid "Before roll back" msgstr "" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:24 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:24 src/libslic3r/PrintConfig.cpp:132 msgid "User" msgstr "" #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:27 +#: src/slic3r/GUI/GUI_Preview.cpp:299 src/libslic3r/ExtrusionEntity.cpp:310 msgid "Unknown" msgstr "" @@ -480,7 +485,7 @@ msgstr "" msgid "PrusaSlicer version" msgstr "" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:51 src/slic3r/GUI/Preset.cpp:1563 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:51 src/libslic3r/Preset.cpp:1300 msgid "print" msgstr "" @@ -488,11 +493,11 @@ msgstr "" msgid "filaments" msgstr "" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:53 src/slic3r/GUI/Preset.cpp:1567 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:53 src/libslic3r/Preset.cpp:1304 msgid "printer" msgstr "" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:57 src/slic3r/GUI/Tab.cpp:1034 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:57 src/slic3r/GUI/Tab.cpp:1289 msgid "vendor" msgstr "" @@ -529,104 +534,125 @@ msgstr "" msgid "Configuration Snapshots" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:233 +#: src/slic3r/GUI/ConfigWizard.cpp:236 msgid "nozzle" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:237 +#: src/slic3r/GUI/ConfigWizard.cpp:240 msgid "Alternate nozzles:" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:304 +#: src/slic3r/GUI/ConfigWizard.cpp:307 msgid "All standard" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:304 +#: src/slic3r/GUI/ConfigWizard.cpp:307 msgid "Standard" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:305 src/slic3r/GUI/ConfigWizard.cpp:588 -#: src/slic3r/GUI/Tab.cpp:3214 +#: src/slic3r/GUI/ConfigWizard.cpp:308 src/slic3r/GUI/ConfigWizard.cpp:598 +#: src/slic3r/GUI/Tab.cpp:3507 src/slic3r/GUI/UnsavedChangesDialog.cpp:921 msgid "All" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:306 src/slic3r/GUI/ConfigWizard.cpp:589 -#: src/slic3r/GUI/Plater.cpp:506 src/slic3r/GUI/Plater.cpp:646 -#: src/libslic3r/ExtrusionEntity.cpp:309 +#: src/slic3r/GUI/ConfigWizard.cpp:309 src/slic3r/GUI/ConfigWizard.cpp:599 +#: src/slic3r/GUI/Plater.cpp:365 src/slic3r/GUI/Plater.cpp:505 +#: src/libslic3r/ExtrusionEntity.cpp:312 msgid "None" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:442 +#: src/slic3r/GUI/ConfigWizard.cpp:445 #, possible-c-format msgid "Welcome to the %s Configuration Assistant" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:444 +#: src/slic3r/GUI/ConfigWizard.cpp:447 #, possible-c-format msgid "Welcome to the %s Configuration Wizard" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:446 +#: src/slic3r/GUI/ConfigWizard.cpp:449 msgid "Welcome" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:448 +#: src/slic3r/GUI/ConfigWizard.cpp:451 #, possible-c-format msgid "" "Hello, welcome to %s! This %s helps you with the initial configuration; just " "a few settings and you will be ready to print." msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:453 +#: src/slic3r/GUI/ConfigWizard.cpp:456 msgid "Remove user profiles (a snapshot will be taken beforehand)" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:496 +#: src/slic3r/GUI/ConfigWizard.cpp:499 #, possible-c-format msgid "%s Family" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:580 +#: src/slic3r/GUI/ConfigWizard.cpp:587 +msgid "Printer:" +msgstr "" + +#: src/slic3r/GUI/ConfigWizard.cpp:589 msgid "Vendor:" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:581 +#: src/slic3r/GUI/ConfigWizard.cpp:590 msgid "Profile:" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:618 src/slic3r/GUI/ConfigWizard.cpp:646 +#: src/slic3r/GUI/ConfigWizard.cpp:662 src/slic3r/GUI/ConfigWizard.cpp:812 +#: src/slic3r/GUI/ConfigWizard.cpp:873 src/slic3r/GUI/ConfigWizard.cpp:1007 msgid "(All)" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:747 +#: src/slic3r/GUI/ConfigWizard.cpp:691 +msgid "" +"Filaments marked with * are not compatible with some installed " +"printers." +msgstr "" + +#: src/slic3r/GUI/ConfigWizard.cpp:694 +msgid "All installed printers are compatible with the selected filament." +msgstr "" + +#: src/slic3r/GUI/ConfigWizard.cpp:714 +msgid "" +"Only the following installed printers are compatible with the selected " +"filament:" +msgstr "" + +#: src/slic3r/GUI/ConfigWizard.cpp:1091 msgid "Custom Printer Setup" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:747 +#: src/slic3r/GUI/ConfigWizard.cpp:1091 msgid "Custom Printer" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:749 +#: src/slic3r/GUI/ConfigWizard.cpp:1093 msgid "Define a custom printer profile" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:751 +#: src/slic3r/GUI/ConfigWizard.cpp:1095 msgid "Custom profile name:" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:776 +#: src/slic3r/GUI/ConfigWizard.cpp:1120 msgid "Automatic updates" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:776 +#: src/slic3r/GUI/ConfigWizard.cpp:1120 msgid "Updates" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:784 src/slic3r/GUI/Preferences.cpp:64 +#: src/slic3r/GUI/ConfigWizard.cpp:1128 src/slic3r/GUI/Preferences.cpp:81 msgid "Check for application updates" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:788 +#: src/slic3r/GUI/ConfigWizard.cpp:1132 #, possible-c-format msgid "" "If enabled, %s checks for new application versions online. When a new " @@ -635,11 +661,11 @@ msgid "" "notification mechanisms, no automatic installation is done." msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:794 src/slic3r/GUI/Preferences.cpp:80 +#: src/slic3r/GUI/ConfigWizard.cpp:1138 src/slic3r/GUI/Preferences.cpp:97 msgid "Update built-in Presets automatically" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:798 +#: src/slic3r/GUI/ConfigWizard.cpp:1142 #, possible-c-format msgid "" "If enabled, %s downloads updates of built-in system presets in the " @@ -648,30 +674,30 @@ msgid "" "startup." msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:801 +#: src/slic3r/GUI/ConfigWizard.cpp:1145 msgid "" "Updates are never applied without user's consent and never overwrite user's " "customized settings." msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:806 +#: src/slic3r/GUI/ConfigWizard.cpp:1150 msgid "" "Additionally a backup snapshot of the whole configuration is created before " "an update is applied." msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:813 src/slic3r/GUI/GUI_ObjectList.cpp:1678 -#: src/slic3r/GUI/GUI_ObjectList.cpp:4040 src/slic3r/GUI/Plater.cpp:3225 -#: src/slic3r/GUI/Plater.cpp:3938 src/slic3r/GUI/Plater.cpp:3967 +#: src/slic3r/GUI/ConfigWizard.cpp:1157 src/slic3r/GUI/GUI_ObjectList.cpp:1793 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4439 src/slic3r/GUI/Plater.cpp:3028 +#: src/slic3r/GUI/Plater.cpp:3852 src/slic3r/GUI/Plater.cpp:3881 msgid "Reload from disk" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:816 +#: src/slic3r/GUI/ConfigWizard.cpp:1160 msgid "" "Export full pathnames of models and parts sources into 3mf and amf files" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:820 +#: src/slic3r/GUI/ConfigWizard.cpp:1164 msgid "" "If enabled, allows the Reload from disk command to automatically find and " "load the files when invoked.\n" @@ -679,11 +705,11 @@ msgid "" "using an open file dialog." msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:828 +#: src/slic3r/GUI/ConfigWizard.cpp:1172 msgid "View mode" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:830 +#: src/slic3r/GUI/ConfigWizard.cpp:1174 msgid "" "PrusaSlicer's user interfaces comes in three variants:\n" "Simple, Advanced, and Expert.\n" @@ -692,272 +718,285 @@ msgid "" "fine-tuning, they are suitable for advanced and expert users, respectively." msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:835 +#: src/slic3r/GUI/ConfigWizard.cpp:1179 msgid "Simple mode" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:836 +#: src/slic3r/GUI/ConfigWizard.cpp:1180 msgid "Advanced mode" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:837 +#: src/slic3r/GUI/ConfigWizard.cpp:1181 msgid "Expert mode" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:871 +#: src/slic3r/GUI/ConfigWizard.cpp:1187 +msgid "The size of the object can be specified in inches" +msgstr "" + +#: src/slic3r/GUI/ConfigWizard.cpp:1188 +msgid "Use inches" +msgstr "" + +#: src/slic3r/GUI/ConfigWizard.cpp:1222 msgid "Other Vendors" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:875 +#: src/slic3r/GUI/ConfigWizard.cpp:1226 #, possible-c-format msgid "Pick another vendor supported by %s" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:906 +#: src/slic3r/GUI/ConfigWizard.cpp:1257 msgid "Firmware Type" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:906 src/slic3r/GUI/Tab.cpp:1980 +#: src/slic3r/GUI/ConfigWizard.cpp:1257 src/slic3r/GUI/Tab.cpp:2132 msgid "Firmware" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:910 +#: src/slic3r/GUI/ConfigWizard.cpp:1261 msgid "Choose the type of firmware used by your printer." msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:944 +#: src/slic3r/GUI/ConfigWizard.cpp:1295 msgid "Bed Shape and Size" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:947 +#: src/slic3r/GUI/ConfigWizard.cpp:1298 msgid "Set the shape of your printer's bed." msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:967 +#: src/slic3r/GUI/ConfigWizard.cpp:1318 msgid "Filament and Nozzle Diameters" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:967 +#: src/slic3r/GUI/ConfigWizard.cpp:1318 msgid "Print Diameters" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:981 +#: src/slic3r/GUI/ConfigWizard.cpp:1332 msgid "Enter the diameter of your printer's hot end nozzle." msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:984 +#: src/slic3r/GUI/ConfigWizard.cpp:1335 msgid "Nozzle Diameter:" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:994 +#: src/slic3r/GUI/ConfigWizard.cpp:1345 msgid "Enter the diameter of your filament." msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:995 +#: src/slic3r/GUI/ConfigWizard.cpp:1346 msgid "" "Good precision is required, so use a caliper and do multiple measurements " "along the filament, then compute the average." msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:998 +#: src/slic3r/GUI/ConfigWizard.cpp:1349 msgid "Filament Diameter:" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:1032 +#: src/slic3r/GUI/ConfigWizard.cpp:1383 msgid "Extruder and Bed Temperatures" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:1032 +#: src/slic3r/GUI/ConfigWizard.cpp:1383 msgid "Temperatures" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:1048 +#: src/slic3r/GUI/ConfigWizard.cpp:1399 msgid "Enter the temperature needed for extruding your filament." msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:1049 +#: src/slic3r/GUI/ConfigWizard.cpp:1400 msgid "A rule of thumb is 160 to 230 °C for PLA, and 215 to 250 °C for ABS." msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:1052 +#: src/slic3r/GUI/ConfigWizard.cpp:1403 msgid "Extrusion Temperature:" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:1053 src/slic3r/GUI/ConfigWizard.cpp:1067 +#: src/slic3r/GUI/ConfigWizard.cpp:1404 src/slic3r/GUI/ConfigWizard.cpp:1418 +#: src/libslic3r/PrintConfig.cpp:180 src/libslic3r/PrintConfig.cpp:912 +#: src/libslic3r/PrintConfig.cpp:956 src/libslic3r/PrintConfig.cpp:2209 msgid "°C" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:1062 +#: src/slic3r/GUI/ConfigWizard.cpp:1413 msgid "" "Enter the bed temperature needed for getting your filament to stick to your " "heated bed." msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:1063 +#: src/slic3r/GUI/ConfigWizard.cpp:1414 msgid "" "A rule of thumb is 60 °C for PLA and 110 °C for ABS. Leave zero if you have " "no heated bed." msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:1066 +#: src/slic3r/GUI/ConfigWizard.cpp:1417 msgid "Bed Temperature:" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:1515 src/slic3r/GUI/ConfigWizard.cpp:2097 +#: src/slic3r/GUI/ConfigWizard.cpp:1872 src/slic3r/GUI/ConfigWizard.cpp:2524 msgid "Filaments" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:1515 src/slic3r/GUI/ConfigWizard.cpp:2099 +#: src/slic3r/GUI/ConfigWizard.cpp:1872 src/slic3r/GUI/ConfigWizard.cpp:2526 msgid "SLA Materials" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:1569 +#: src/slic3r/GUI/ConfigWizard.cpp:1926 msgid "FFF Technology Printers" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:1574 +#: src/slic3r/GUI/ConfigWizard.cpp:1931 msgid "SLA Technology Printers" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:1810 src/slic3r/GUI/DoubleSlider.cpp:1907 -#: src/slic3r/GUI/DoubleSlider.cpp:1928 src/slic3r/GUI/GUI.cpp:246 +#: src/slic3r/GUI/ConfigWizard.cpp:2237 src/slic3r/GUI/DoubleSlider.cpp:2124 +#: src/slic3r/GUI/DoubleSlider.cpp:2144 src/slic3r/GUI/GUI.cpp:244 msgid "Notice" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:1830 +#: src/slic3r/GUI/ConfigWizard.cpp:2257 msgid "The following FFF printer models have no filament selected:" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:1834 +#: src/slic3r/GUI/ConfigWizard.cpp:2261 msgid "Do you want to select default filaments for these FFF printer models?" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:1848 +#: src/slic3r/GUI/ConfigWizard.cpp:2275 msgid "The following SLA printer models have no materials selected:" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:1852 +#: src/slic3r/GUI/ConfigWizard.cpp:2279 msgid "Do you want to select default SLA materials for these printer models?" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:2060 +#: src/slic3r/GUI/ConfigWizard.cpp:2487 msgid "Select all standard printers" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:2063 +#: src/slic3r/GUI/ConfigWizard.cpp:2490 msgid "< &Back" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:2064 +#: src/slic3r/GUI/ConfigWizard.cpp:2491 msgid "&Next >" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:2065 +#: src/slic3r/GUI/ConfigWizard.cpp:2492 msgid "&Finish" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:2066 src/slic3r/GUI/FirmwareDialog.cpp:151 +#: src/slic3r/GUI/ConfigWizard.cpp:2493 src/slic3r/GUI/FirmwareDialog.cpp:151 +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:245 #: src/slic3r/GUI/ProgressStatusBar.cpp:26 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:644 msgid "Cancel" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:2079 +#: src/slic3r/GUI/ConfigWizard.cpp:2506 msgid "Prusa FFF Technology Printers" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:2082 +#: src/slic3r/GUI/ConfigWizard.cpp:2509 msgid "Prusa MSLA Technology Printers" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:2097 +#: src/slic3r/GUI/ConfigWizard.cpp:2524 msgid "Filament Profiles Selection" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:2097 src/slic3r/GUI/GUI_ObjectList.cpp:3637 +#: src/slic3r/GUI/ConfigWizard.cpp:2524 src/slic3r/GUI/ConfigWizard.cpp:2526 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4016 msgid "Type:" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:2099 +#: src/slic3r/GUI/ConfigWizard.cpp:2526 msgid "SLA Material Profiles Selection" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:2099 -msgid "Layer height:" -msgstr "" - -#: src/slic3r/GUI/ConfigWizard.cpp:2196 +#: src/slic3r/GUI/ConfigWizard.cpp:2624 msgid "Configuration Assistant" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:2197 +#: src/slic3r/GUI/ConfigWizard.cpp:2625 msgid "Configuration &Assistant" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:2199 +#: src/slic3r/GUI/ConfigWizard.cpp:2627 msgid "Configuration Wizard" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:2200 +#: src/slic3r/GUI/ConfigWizard.cpp:2628 msgid "Configuration &Wizard" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:81 +#: src/slic3r/GUI/DoubleSlider.cpp:110 msgid "Place bearings in slots and resume printing" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:952 +#: src/slic3r/GUI/DoubleSlider.cpp:1064 msgid "One layer mode" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:954 +#: src/slic3r/GUI/DoubleSlider.cpp:1066 msgid "Discard all custom changes" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:957 +#: src/slic3r/GUI/DoubleSlider.cpp:1071 src/slic3r/GUI/DoubleSlider.cpp:1852 +msgid "Jump to move" +msgstr "" + +#: src/slic3r/GUI/DoubleSlider.cpp:1075 #, possible-c-format msgid "Jump to height %s or Set extruder sequence for the entire print" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:959 src/slic3r/GUI/DoubleSlider.cpp:1531 -#: src/slic3r/GUI/DoubleSlider.cpp:1653 +#: src/slic3r/GUI/DoubleSlider.cpp:1077 src/slic3r/GUI/DoubleSlider.cpp:1721 +#: src/slic3r/GUI/DoubleSlider.cpp:1852 src/slic3r/GUI/DoubleSlider.cpp:1856 msgid "Jump to height" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:962 +#: src/slic3r/GUI/DoubleSlider.cpp:1083 msgid "Edit current color - Right click the colored slider segment" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:972 +#: src/slic3r/GUI/DoubleSlider.cpp:1093 msgid "Print mode" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:986 +#: src/slic3r/GUI/DoubleSlider.cpp:1107 msgid "Add extruder change - Left click" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:988 +#: src/slic3r/GUI/DoubleSlider.cpp:1109 msgid "" "Add color change - Left click for predefined color or Shift + Left click for " "custom color selection" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:990 +#: src/slic3r/GUI/DoubleSlider.cpp:1111 msgid "Add color change - Left click" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:991 +#: src/slic3r/GUI/DoubleSlider.cpp:1112 msgid "or press \"+\" key" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:993 +#: src/slic3r/GUI/DoubleSlider.cpp:1114 msgid "Add another code - Ctrl + Left click" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:994 +#: src/slic3r/GUI/DoubleSlider.cpp:1115 msgid "Add another code - Right click" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1000 +#: src/slic3r/GUI/DoubleSlider.cpp:1121 msgid "" "The sequential print is on.\n" "It's impossible to apply any custom G-code for objects printing " @@ -965,203 +1004,227 @@ msgid "" "This code won't be processed during G-code generation." msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1009 +#: src/slic3r/GUI/DoubleSlider.cpp:1130 msgid "Color change (\"%1%\")" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1010 +#: src/slic3r/GUI/DoubleSlider.cpp:1131 msgid "Color change (\"%1%\") for Extruder %2%" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1012 +#: src/slic3r/GUI/DoubleSlider.cpp:1133 msgid "Pause print (\"%1%\")" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1014 +#: src/slic3r/GUI/DoubleSlider.cpp:1135 +msgid "Custom template (\"%1%\")" +msgstr "" + +#: src/slic3r/GUI/DoubleSlider.cpp:1137 msgid "Extruder (tool) is changed to Extruder \"%1%\"" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1021 +#: src/slic3r/GUI/DoubleSlider.cpp:1144 msgid "Note" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1023 +#: src/slic3r/GUI/DoubleSlider.cpp:1146 msgid "" "G-code associated to this tick mark is in a conflict with print mode.\n" "Editing it will cause changes of Slider data." msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1026 +#: src/slic3r/GUI/DoubleSlider.cpp:1149 msgid "" "There is a color change for extruder that won't be used till the end of " "print job.\n" "This code won't be processed during G-code generation." msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1029 +#: src/slic3r/GUI/DoubleSlider.cpp:1152 msgid "" "There is an extruder change set to the same extruder.\n" "This code won't be processed during G-code generation." msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1032 +#: src/slic3r/GUI/DoubleSlider.cpp:1155 msgid "" "There is a color change for extruder that has not been used before.\n" "Check your settings to avoid redundant color changes." msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1037 +#: src/slic3r/GUI/DoubleSlider.cpp:1160 msgid "Delete tick mark - Left click or press \"-\" key" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1039 +#: src/slic3r/GUI/DoubleSlider.cpp:1162 msgid "Edit tick mark - Ctrl + Left click" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1040 +#: src/slic3r/GUI/DoubleSlider.cpp:1163 msgid "Edit tick mark - Right click" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1136 src/slic3r/GUI/DoubleSlider.cpp:1172 -#: src/slic3r/GUI/GLCanvas3D.cpp:996 src/slic3r/GUI/GUI_ObjectList.cpp:1718 -#: src/slic3r/GUI/Tab.cpp:2315 src/libslic3r/GCode/PreviewData.cpp:446 +#: src/slic3r/GUI/DoubleSlider.cpp:1263 src/slic3r/GUI/DoubleSlider.cpp:1297 +#: src/slic3r/GUI/GLCanvas3D.cpp:983 src/slic3r/GUI/GUI_ObjectList.cpp:1832 +#: src/slic3r/GUI/Tab.cpp:2489 src/libslic3r/GCode/PreviewData.cpp:450 #, possible-c-format msgid "Extruder %d" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1137 src/slic3r/GUI/GUI_ObjectList.cpp:1719 +#: src/slic3r/GUI/DoubleSlider.cpp:1264 src/slic3r/GUI/GUI_ObjectList.cpp:1833 msgid "active" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1146 +#: src/slic3r/GUI/DoubleSlider.cpp:1273 msgid "Switch code to Change extruder" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1146 src/slic3r/GUI/GUI_ObjectList.cpp:1685 +#: src/slic3r/GUI/DoubleSlider.cpp:1273 src/slic3r/GUI/GUI_ObjectList.cpp:1800 msgid "Change extruder" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1147 +#: src/slic3r/GUI/DoubleSlider.cpp:1274 msgid "Change extruder (N/A)" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1149 +#: src/slic3r/GUI/DoubleSlider.cpp:1276 msgid "Use another extruder" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1173 +#: src/slic3r/GUI/DoubleSlider.cpp:1298 msgid "used" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1181 +#: src/slic3r/GUI/DoubleSlider.cpp:1306 msgid "Switch code to Color change (%1%) for:" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1182 +#: src/slic3r/GUI/DoubleSlider.cpp:1307 msgid "Add color change (%1%) for:" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1479 +#: src/slic3r/GUI/DoubleSlider.cpp:1665 msgid "Add color change" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1489 +#: src/slic3r/GUI/DoubleSlider.cpp:1675 msgid "Add pause print" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1492 +#: src/slic3r/GUI/DoubleSlider.cpp:1679 +msgid "Add custom template" +msgstr "" + +#: src/slic3r/GUI/DoubleSlider.cpp:1682 msgid "Add custom G-code" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1510 +#: src/slic3r/GUI/DoubleSlider.cpp:1700 msgid "Edit color" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1511 +#: src/slic3r/GUI/DoubleSlider.cpp:1701 msgid "Edit pause print message" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1512 +#: src/slic3r/GUI/DoubleSlider.cpp:1702 msgid "Edit custom G-code" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1518 +#: src/slic3r/GUI/DoubleSlider.cpp:1708 msgid "Delete color change" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1519 +#: src/slic3r/GUI/DoubleSlider.cpp:1709 msgid "Delete tool change" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1520 +#: src/slic3r/GUI/DoubleSlider.cpp:1710 msgid "Delete pause print" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1521 +#: src/slic3r/GUI/DoubleSlider.cpp:1711 msgid "Delete custom G-code" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1534 +#: src/slic3r/GUI/DoubleSlider.cpp:1728 msgid "Set extruder sequence for the entire print" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1620 +#: src/slic3r/GUI/DoubleSlider.cpp:1814 msgid "Enter custom G-code used on current layer" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1621 +#: src/slic3r/GUI/DoubleSlider.cpp:1815 msgid "Custom G-code on current layer (%1% mm)." msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1636 +#: src/slic3r/GUI/DoubleSlider.cpp:1830 msgid "Enter short message shown on Printer display when a print is paused" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1637 +#: src/slic3r/GUI/DoubleSlider.cpp:1831 msgid "Message for pause print on current layer (%1% mm)." msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1652 +#: src/slic3r/GUI/DoubleSlider.cpp:1851 +msgid "Enter the move you want to jump to" +msgstr "" + +#: src/slic3r/GUI/DoubleSlider.cpp:1851 src/slic3r/GUI/DoubleSlider.cpp:1855 msgid "Enter the height you want to jump to" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1901 +#: src/slic3r/GUI/DoubleSlider.cpp:2118 msgid "The last color change data was saved for a single extruder printing." msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1902 src/slic3r/GUI/DoubleSlider.cpp:1918 +#: src/slic3r/GUI/DoubleSlider.cpp:2119 src/slic3r/GUI/DoubleSlider.cpp:2134 msgid "The last color change data was saved for a multi extruder printing." msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1904 +#: src/slic3r/GUI/DoubleSlider.cpp:2121 msgid "Your current changes will delete all saved color changes." msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1905 src/slic3r/GUI/DoubleSlider.cpp:1926 +#: src/slic3r/GUI/DoubleSlider.cpp:2122 src/slic3r/GUI/DoubleSlider.cpp:2142 msgid "Are you sure you want to continue?" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1919 +#: src/slic3r/GUI/DoubleSlider.cpp:2135 msgid "" "Select YES if you want to delete all saved tool changes, \n" "NO if you want all tool changes switch to color changes, \n" "or CANCEL to leave it unchanged." msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1922 +#: src/slic3r/GUI/DoubleSlider.cpp:2138 msgid "Do you want to delete all saved tool changes?" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1924 +#: src/slic3r/GUI/DoubleSlider.cpp:2140 msgid "" "The last color change data was saved for a multi extruder printing with tool " "changes for whole print." msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1925 +#: src/slic3r/GUI/DoubleSlider.cpp:2141 msgid "Your current changes will delete all saved extruder (tool) changes." msgstr "" +#: src/slic3r/GUI/ExtraRenderers.cpp:297 src/slic3r/GUI/GUI_ObjectList.cpp:496 +#: src/slic3r/GUI/GUI_ObjectList.cpp:508 src/slic3r/GUI/GUI_ObjectList.cpp:1015 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4454 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4464 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4499 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:202 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:259 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:284 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:492 +msgid "default" +msgstr "" + #: src/slic3r/GUI/ExtruderSequenceDialog.cpp:23 msgid "Set extruder sequence" msgstr "" @@ -1171,10 +1234,10 @@ msgid "Set extruder change for every" msgstr "" #: src/slic3r/GUI/ExtruderSequenceDialog.cpp:52 -#: src/libslic3r/PrintConfig.cpp:362 src/libslic3r/PrintConfig.cpp:994 -#: src/libslic3r/PrintConfig.cpp:1505 src/libslic3r/PrintConfig.cpp:1690 -#: src/libslic3r/PrintConfig.cpp:1757 src/libslic3r/PrintConfig.cpp:1937 -#: src/libslic3r/PrintConfig.cpp:1983 +#: src/libslic3r/PrintConfig.cpp:396 src/libslic3r/PrintConfig.cpp:1038 +#: src/libslic3r/PrintConfig.cpp:1613 src/libslic3r/PrintConfig.cpp:1798 +#: src/libslic3r/PrintConfig.cpp:1865 src/libslic3r/PrintConfig.cpp:2072 +#: src/libslic3r/PrintConfig.cpp:2118 msgid "layers" msgstr "" @@ -1190,33 +1253,34 @@ msgstr "" msgid "Add extruder to sequence" msgstr "" -#: src/slic3r/GUI/Field.cpp:136 +#: src/slic3r/GUI/Field.cpp:184 msgid "default value" msgstr "" -#: src/slic3r/GUI/Field.cpp:139 +#: src/slic3r/GUI/Field.cpp:187 msgid "parameter name" msgstr "" -#: src/slic3r/GUI/Field.cpp:150 src/slic3r/GUI/OptionsGroup.cpp:598 +#: src/slic3r/GUI/Field.cpp:198 src/slic3r/GUI/OptionsGroup.cpp:715 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:874 msgid "N/A" msgstr "" -#: src/slic3r/GUI/Field.cpp:175 +#: src/slic3r/GUI/Field.cpp:223 #, possible-c-format msgid "%s doesn't support percentage" msgstr "" -#: src/slic3r/GUI/Field.cpp:195 src/slic3r/GUI/Field.cpp:226 -#: src/slic3r/GUI/Field.cpp:1298 src/slic3r/GUI/GUI_ObjectLayers.cpp:383 +#: src/slic3r/GUI/Field.cpp:243 src/slic3r/GUI/Field.cpp:274 +#: src/slic3r/GUI/Field.cpp:1358 src/slic3r/GUI/GUI_ObjectLayers.cpp:413 msgid "Invalid numeric input." msgstr "" -#: src/slic3r/GUI/Field.cpp:204 src/slic3r/GUI/Field.cpp:1310 +#: src/slic3r/GUI/Field.cpp:252 src/slic3r/GUI/Field.cpp:1370 msgid "Input value is out of range" msgstr "" -#: src/slic3r/GUI/Field.cpp:240 +#: src/slic3r/GUI/Field.cpp:288 #, possible-c-format msgid "" "Do you mean %s%% instead of %s %s?\n" @@ -1224,7 +1288,7 @@ msgid "" "or NO if you are sure that %s %s is a correct value." msgstr "" -#: src/slic3r/GUI/Field.cpp:243 +#: src/slic3r/GUI/Field.cpp:291 msgid "Parameter validation" msgstr "" @@ -1300,8 +1364,9 @@ msgstr "" msgid "Firmware image:" msgstr "" -#: src/slic3r/GUI/FirmwareDialog.cpp:805 src/slic3r/GUI/Tab.cpp:1716 -#: src/slic3r/GUI/Tab.cpp:1778 +#: src/slic3r/GUI/FirmwareDialog.cpp:805 +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:271 +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:327 msgid "Browse" msgstr "" @@ -1334,8 +1399,8 @@ msgid "Advanced: Output log" msgstr "" #: src/slic3r/GUI/FirmwareDialog.cpp:852 -#: src/slic3r/GUI/Mouse3DController.cpp:371 -#: src/slic3r/GUI/PrintHostDialogs.cpp:161 +#: src/slic3r/GUI/Mouse3DController.cpp:353 +#: src/slic3r/GUI/PrintHostDialogs.cpp:159 msgid "Close" msgstr "" @@ -1353,405 +1418,715 @@ msgstr "" msgid "Cancelling..." msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:238 src/slic3r/GUI/GLCanvas3D.cpp:4962 +#: src/slic3r/GUI/GCodeViewer.cpp:223 +msgid "Tool position" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:933 +msgid "Generating toolpaths" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:1318 +msgid "Generating vertex buffer" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:1392 +msgid "Generating index buffers" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2071 +msgid "Click to hide" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2071 +msgid "Click to show" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2183 +msgid "up to" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2189 +msgid "above" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2197 +msgid "from" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2197 +msgid "to" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2225 src/slic3r/GUI/GCodeViewer.cpp:2233 +#: src/slic3r/GUI/GUI_Preview.cpp:275 src/slic3r/GUI/GUI_Preview.cpp:787 +#: src/libslic3r/GCode/PreviewData.cpp:350 +msgid "Feature type" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2225 src/slic3r/GUI/GCodeViewer.cpp:2233 +#: src/slic3r/GUI/RammingChart.cpp:76 +msgid "Time" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2233 +msgid "Percentage" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2236 src/libslic3r/GCode/PreviewData.cpp:352 +msgid "Height (mm)" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2237 src/libslic3r/GCode/PreviewData.cpp:354 +msgid "Width (mm)" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2238 src/libslic3r/GCode/PreviewData.cpp:356 +msgid "Speed (mm/s)" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2239 src/libslic3r/GCode/PreviewData.cpp:358 +msgid "Fan Speed (%)" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2240 src/libslic3r/GCode/PreviewData.cpp:360 +msgid "Volumetric flow rate (mm³/s)" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2241 src/slic3r/GUI/GUI_Preview.cpp:281 +#: src/slic3r/GUI/GUI_Preview.cpp:453 src/slic3r/GUI/GUI_Preview.cpp:693 +#: src/slic3r/GUI/GUI_Preview.cpp:786 src/slic3r/GUI/GUI_Preview.cpp:1270 +#: src/libslic3r/GCode/PreviewData.cpp:362 +msgid "Tool" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2242 src/slic3r/GUI/GUI_Preview.cpp:282 +#: src/slic3r/GUI/GUI_Preview.cpp:784 src/libslic3r/GCode/PreviewData.cpp:364 +msgid "Color Print" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2277 src/slic3r/GUI/GCodeViewer.cpp:2313 +#: src/slic3r/GUI/GCodeViewer.cpp:2318 src/slic3r/GUI/GUI_ObjectList.cpp:296 +#: src/slic3r/GUI/Tab.cpp:1780 src/slic3r/GUI/wxExtensions.cpp:515 +#: src/libslic3r/PrintConfig.cpp:523 +msgid "Extruder" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2289 +msgid "Default color" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2313 +msgid "default color" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2410 src/slic3r/GUI/GCodeViewer.cpp:2438 +msgid "Color change" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2436 src/slic3r/GUI/GCodeViewer.cpp:2451 +msgid "Print" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2437 src/slic3r/GUI/GCodeViewer.cpp:2460 +#: src/slic3r/GUI/Plater.cpp:1199 +msgid "Pause" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2442 src/slic3r/GUI/GCodeViewer.cpp:2445 +msgid "Event" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2442 src/slic3r/GUI/GCodeViewer.cpp:2445 +msgid "Remaining time" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2445 +msgid "Duration" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2489 src/slic3r/GUI/GUI_Preview.cpp:335 +#: src/slic3r/GUI/GUI_Preview.cpp:1471 src/libslic3r/PrintConfig.cpp:2295 +msgid "Travel" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2492 +msgid "Movement" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2493 +msgid "Extrusion" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2494 src/slic3r/GUI/Tab.cpp:1670 +#: src/slic3r/GUI/Tab.cpp:2539 +msgid "Retraction" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2525 src/slic3r/GUI/GUI_Preview.cpp:320 +#: src/slic3r/GUI/GUI_Preview.cpp:333 +msgid "Options" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2528 src/slic3r/GUI/GUI_Preview.cpp:336 +#: src/slic3r/GUI/GUI_Preview.cpp:1472 +msgid "Retractions" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2529 src/slic3r/GUI/GUI_Preview.cpp:337 +#: src/slic3r/GUI/GUI_Preview.cpp:1473 +msgid "Deretractions" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2530 src/slic3r/GUI/GUI_Preview.cpp:1474 +msgid "Tool changes" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2531 src/slic3r/GUI/GUI_Preview.cpp:1475 +msgid "Color changes" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2532 src/slic3r/GUI/GUI_Preview.cpp:1476 +msgid "Pause prints" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2533 src/slic3r/GUI/GUI_Preview.cpp:1477 +msgid "Custom GCodes" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2552 src/slic3r/GUI/GCodeViewer.cpp:2557 +#: src/slic3r/GUI/Plater.cpp:246 src/slic3r/GUI/Plater.cpp:1125 +#: src/slic3r/GUI/Plater.cpp:1175 src/slic3r/GUI/Plater.cpp:1196 +msgid "Estimated printing time" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2552 +msgid "Normal mode" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2557 +msgid "Stealth mode" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2586 +msgid "Show stealth mode" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2591 +msgid "Show normal mode" +msgstr "" + +#: src/slic3r/GUI/GLCanvas3D.cpp:231 src/slic3r/GUI/GLCanvas3D.cpp:4978 msgid "Variable layer height" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:241 +#: src/slic3r/GUI/GLCanvas3D.cpp:233 msgid "Left mouse button:" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:244 +#: src/slic3r/GUI/GLCanvas3D.cpp:235 msgid "Add detail" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:247 +#: src/slic3r/GUI/GLCanvas3D.cpp:237 msgid "Right mouse button:" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:250 +#: src/slic3r/GUI/GLCanvas3D.cpp:239 msgid "Remove detail" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:253 +#: src/slic3r/GUI/GLCanvas3D.cpp:241 msgid "Shift + Left mouse button:" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:256 +#: src/slic3r/GUI/GLCanvas3D.cpp:243 msgid "Reset to base" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:259 +#: src/slic3r/GUI/GLCanvas3D.cpp:245 msgid "Shift + Right mouse button:" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:262 +#: src/slic3r/GUI/GLCanvas3D.cpp:247 msgid "Smoothing" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:265 +#: src/slic3r/GUI/GLCanvas3D.cpp:249 msgid "Mouse wheel:" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:268 +#: src/slic3r/GUI/GLCanvas3D.cpp:251 msgid "Increase/decrease edit area" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:271 +#: src/slic3r/GUI/GLCanvas3D.cpp:254 msgid "Adaptive" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:277 +#: src/slic3r/GUI/GLCanvas3D.cpp:260 msgid "Quality / Speed" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:281 +#: src/slic3r/GUI/GLCanvas3D.cpp:263 msgid "Higher print quality versus higher print speed." msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:292 +#: src/slic3r/GUI/GLCanvas3D.cpp:274 msgid "Smooth" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:298 src/libslic3r/PrintConfig.cpp:511 +#: src/slic3r/GUI/GLCanvas3D.cpp:280 src/libslic3r/PrintConfig.cpp:547 msgid "Radius" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:308 +#: src/slic3r/GUI/GLCanvas3D.cpp:290 msgid "Keep min" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:317 +#: src/slic3r/GUI/GLCanvas3D.cpp:299 msgid "Reset" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:607 +#: src/slic3r/GUI/GLCanvas3D.cpp:565 msgid "Variable layer height - Manual edit" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:693 -msgid "An object outside the print area was detected" +#: src/slic3r/GUI/GLCanvas3D.cpp:633 +msgid "An object outside the print area was detected." msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:694 -msgid "A toolpath outside the print area was detected" +#: src/slic3r/GUI/GLCanvas3D.cpp:634 +msgid "A toolpath outside the print area was detected." msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:695 -msgid "SLA supports outside the print area were detected" +#: src/slic3r/GUI/GLCanvas3D.cpp:635 +msgid "SLA supports outside the print area were detected." msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:696 -msgid "Some objects are not visible" +#: src/slic3r/GUI/GLCanvas3D.cpp:636 +msgid "Some objects are not visible." msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:698 +#: src/slic3r/GUI/GLCanvas3D.cpp:638 msgid "" -"An object outside the print area was detected\n" -"Resolve the current problem to continue slicing" +"An object outside the print area was detected.\n" +"Resolve the current problem to continue slicing." msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:923 src/slic3r/GUI/GLCanvas3D.cpp:952 +#: src/slic3r/GUI/GLCanvas3D.cpp:910 src/slic3r/GUI/GLCanvas3D.cpp:939 msgid "Default print color" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:953 src/slic3r/GUI/GLCanvas3D.cpp:962 -#: src/slic3r/GUI/GLCanvas3D.cpp:1001 +#: src/slic3r/GUI/GLCanvas3D.cpp:940 src/slic3r/GUI/GLCanvas3D.cpp:949 +#: src/slic3r/GUI/GLCanvas3D.cpp:988 msgid "Pause print or custom G-code" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:974 +#: src/slic3r/GUI/GLCanvas3D.cpp:961 #, possible-c-format msgid "up to %.2f mm" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:978 +#: src/slic3r/GUI/GLCanvas3D.cpp:965 #, possible-c-format msgid "above %.2f mm" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:982 +#: src/slic3r/GUI/GLCanvas3D.cpp:969 #, possible-c-format msgid "%.2f - %.2f mm" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:1014 +#: src/slic3r/GUI/GLCanvas3D.cpp:1001 #, possible-c-format msgid "Color change for Extruder %d at %.2f mm" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:1332 +#: src/slic3r/GUI/GLCanvas3D.cpp:1312 msgid "Seq." msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:1439 +#: src/slic3r/GUI/GLCanvas3D.cpp:1418 msgid "canvas_tooltip" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:1466 -msgid "Slope visualization" -msgstr "" - -#: src/slic3r/GUI/GLCanvas3D.cpp:1468 -msgid "Facets' normal angle range (degrees)" -msgstr "" - -#: src/slic3r/GUI/GLCanvas3D.cpp:1495 src/slic3r/GUI/GUI_ObjectList.cpp:1718 -#: src/libslic3r/PrintConfig.cpp:335 -msgid "Default" -msgstr "" - -#: src/slic3r/GUI/GLCanvas3D.cpp:1880 +#: src/slic3r/GUI/GLCanvas3D.cpp:1778 msgid "Variable layer height - Reset" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:1888 +#: src/slic3r/GUI/GLCanvas3D.cpp:1786 msgid "Variable layer height - Adaptive" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:1896 +#: src/slic3r/GUI/GLCanvas3D.cpp:1794 msgid "Variable layer height - Smooth all" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:2332 +#: src/slic3r/GUI/GLCanvas3D.cpp:2226 msgid "Mirror Object" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:3224 -#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:519 -#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:746 +#: src/slic3r/GUI/GLCanvas3D.cpp:3165 +#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:520 msgid "Gizmo-Move" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:3308 -#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:521 -#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:748 +#: src/slic3r/GUI/GLCanvas3D.cpp:3249 +#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:522 msgid "Gizmo-Rotate" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:3880 +#: src/slic3r/GUI/GLCanvas3D.cpp:3810 msgid "Move Object" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:4425 +#: src/slic3r/GUI/GLCanvas3D.cpp:4302 src/slic3r/GUI/GLCanvas3D.cpp:4939 +msgid "Switch to Settings" +msgstr "" + +#: src/slic3r/GUI/GLCanvas3D.cpp:4303 src/slic3r/GUI/GLCanvas3D.cpp:4939 +msgid "Print Settings Tab" +msgstr "" + +#: src/slic3r/GUI/GLCanvas3D.cpp:4304 src/slic3r/GUI/GLCanvas3D.cpp:4940 +msgid "Filament Settings Tab" +msgstr "" + +#: src/slic3r/GUI/GLCanvas3D.cpp:4304 src/slic3r/GUI/GLCanvas3D.cpp:4940 +msgid "Material Settings Tab" +msgstr "" + +#: src/slic3r/GUI/GLCanvas3D.cpp:4305 src/slic3r/GUI/GLCanvas3D.cpp:4941 +msgid "Printer Settings Tab" +msgstr "" + +#: src/slic3r/GUI/GLCanvas3D.cpp:4361 msgid "Undo History" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:4425 +#: src/slic3r/GUI/GLCanvas3D.cpp:4361 msgid "Redo History" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:4446 +#: src/slic3r/GUI/GLCanvas3D.cpp:4382 #, possible-c-format msgid "Undo %1$d Action" msgid_plural "Undo %1$d Actions" msgstr[0] "" msgstr[1] "" -#: src/slic3r/GUI/GLCanvas3D.cpp:4446 +#: src/slic3r/GUI/GLCanvas3D.cpp:4382 #, possible-c-format msgid "Redo %1$d Action" msgid_plural "Redo %1$d Actions" msgstr[0] "" msgstr[1] "" -#: src/slic3r/GUI/GLCanvas3D.cpp:4856 +#: src/slic3r/GUI/GLCanvas3D.cpp:4402 src/slic3r/GUI/GLCanvas3D.cpp:4957 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:130 src/slic3r/GUI/Search.cpp:426 +msgid "Search" +msgstr "" + +#: src/slic3r/GUI/GLCanvas3D.cpp:4416 src/slic3r/GUI/GLCanvas3D.cpp:4424 +#: src/slic3r/GUI/Search.cpp:433 +msgid "Type here to search" +msgstr "" + +#: src/slic3r/GUI/GLCanvas3D.cpp:4833 msgid "Add..." msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:4864 src/slic3r/GUI/GUI_ObjectList.cpp:1732 -#: src/slic3r/GUI/Plater.cpp:3935 src/slic3r/GUI/Plater.cpp:3957 -#: src/slic3r/GUI/Tab.cpp:3155 +#: src/slic3r/GUI/GLCanvas3D.cpp:4841 src/slic3r/GUI/GUI_ObjectList.cpp:1846 +#: src/slic3r/GUI/Plater.cpp:3849 src/slic3r/GUI/Plater.cpp:3871 +#: src/slic3r/GUI/Tab.cpp:3423 msgid "Delete" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:4873 src/slic3r/GUI/KBShortcutsDialog.cpp:131 -#: src/slic3r/GUI/Plater.cpp:4705 +#: src/slic3r/GUI/GLCanvas3D.cpp:4850 src/slic3r/GUI/KBShortcutsDialog.cpp:124 +#: src/slic3r/GUI/Plater.cpp:4774 msgid "Delete all" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:4882 src/slic3r/GUI/KBShortcutsDialog.cpp:160 -#: src/slic3r/GUI/Plater.cpp:2815 +#: src/slic3r/GUI/GLCanvas3D.cpp:4859 src/slic3r/GUI/KBShortcutsDialog.cpp:151 +#: src/slic3r/GUI/Plater.cpp:1549 msgid "Arrange" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:4882 src/slic3r/GUI/KBShortcutsDialog.cpp:161 +#: src/slic3r/GUI/GLCanvas3D.cpp:4859 src/slic3r/GUI/KBShortcutsDialog.cpp:152 msgid "Arrange selection" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:4894 +#: src/slic3r/GUI/GLCanvas3D.cpp:4871 msgid "Copy" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:4903 +#: src/slic3r/GUI/GLCanvas3D.cpp:4880 msgid "Paste" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:4915 src/slic3r/GUI/Plater.cpp:3794 -#: src/slic3r/GUI/Plater.cpp:3806 src/slic3r/GUI/Plater.cpp:3944 +#: src/slic3r/GUI/GLCanvas3D.cpp:4892 src/slic3r/GUI/Plater.cpp:3708 +#: src/slic3r/GUI/Plater.cpp:3720 src/slic3r/GUI/Plater.cpp:3858 msgid "Add instance" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:4926 src/slic3r/GUI/Plater.cpp:3946 +#: src/slic3r/GUI/GLCanvas3D.cpp:4903 src/slic3r/GUI/Plater.cpp:3860 msgid "Remove instance" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:4939 +#: src/slic3r/GUI/GLCanvas3D.cpp:4916 msgid "Split to objects" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:4949 src/slic3r/GUI/GUI_ObjectList.cpp:1501 +#: src/slic3r/GUI/GLCanvas3D.cpp:4926 src/slic3r/GUI/GUI_ObjectList.cpp:1618 msgid "Split to parts" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:5013 src/slic3r/GUI/KBShortcutsDialog.cpp:132 -#: src/slic3r/GUI/MainFrame.cpp:717 +#: src/slic3r/GUI/GLCanvas3D.cpp:5028 src/slic3r/GUI/KBShortcutsDialog.cpp:125 +#: src/slic3r/GUI/MainFrame.cpp:1187 msgid "Undo" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:5013 src/slic3r/GUI/GLCanvas3D.cpp:5052 +#: src/slic3r/GUI/GLCanvas3D.cpp:5028 src/slic3r/GUI/GLCanvas3D.cpp:5067 msgid "Click right mouse button to open/close History" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:5036 +#: src/slic3r/GUI/GLCanvas3D.cpp:5051 msgid "Next Undo action: %1%" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:5052 src/slic3r/GUI/KBShortcutsDialog.cpp:133 -#: src/slic3r/GUI/MainFrame.cpp:720 +#: src/slic3r/GUI/GLCanvas3D.cpp:5067 src/slic3r/GUI/KBShortcutsDialog.cpp:126 +#: src/slic3r/GUI/MainFrame.cpp:1190 msgid "Redo" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:5074 +#: src/slic3r/GUI/GLCanvas3D.cpp:5089 msgid "Next Redo action: %1%" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:7064 +#: src/slic3r/GUI/GLCanvas3D.cpp:7193 msgid "Selection-Add from rectangle" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:7083 +#: src/slic3r/GUI/GLCanvas3D.cpp:7212 msgid "Selection-Remove from rectangle" msgstr "" -#: src/slic3r/GUI/GLCanvas3DManager.cpp:365 -#, possible-c-format -msgid "" -"PrusaSlicer requires OpenGL 2.0 capable graphics driver to run correctly, \n" -"while OpenGL version %s, render %s, vendor %s was detected." -msgstr "" - -#: src/slic3r/GUI/GLCanvas3DManager.cpp:368 -msgid "You may need to update your graphics card driver." -msgstr "" - -#: src/slic3r/GUI/GLCanvas3DManager.cpp:371 -msgid "" -"As a workaround, you may run PrusaSlicer with a software rendered 3D " -"graphics by running prusa-slicer.exe with the --sw_renderer parameter." -msgstr "" - -#: src/slic3r/GUI/GLCanvas3DManager.cpp:373 -msgid "Unsupported OpenGL version" -msgstr "" - -#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:47 -#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:145 src/libslic3r/PrintConfig.cpp:3424 +#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:48 +#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:146 src/libslic3r/PrintConfig.cpp:3601 msgid "Cut" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:169 +#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:170 msgid "Keep upper part" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:170 +#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:171 msgid "Keep lower part" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:171 +#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:172 msgid "Rotate lower part upwards" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:176 +#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:177 msgid "Perform cut" msgstr "" +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:33 +msgid "FDM Support Editing" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:42 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:49 +#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:25 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:57 +msgid "Clipping of view" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:43 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:50 +#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:26 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:58 +msgid "Reset direction" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:44 +#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:27 +msgid "Cursor size" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:45 +#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:28 +msgid "Cursor type" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:46 +#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:29 +msgid "Left mouse button" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:47 +msgid "Enforce supports" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:48 +#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:31 +msgid "Right mouse button" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:49 +#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:373 +msgid "Block supports" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:50 +#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:33 +msgid "Shift + Left mouse button" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:51 +#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:34 +#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:368 +#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:378 +msgid "Remove selection" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:52 +#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:35 +msgid "Remove all selection" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:53 +#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:36 +msgid "Circle" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:54 +#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:37 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1563 +msgid "Sphere" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:136 +#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:118 +msgid "Reset selection" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:160 +#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:141 +msgid "Alt + Mouse wheel" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:178 +#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:159 +msgid "Paints all facets inside, regardless of their orientation." +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:192 +#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:173 +msgid "Ignores facets facing away from the camera." +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:225 +#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:203 +msgid "Ctrl + Mouse wheel" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:233 +msgid "Autoset custom supports" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:235 +msgid "Threshold:" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:235 +msgid "deg" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:239 +msgid "Enforce" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:242 +msgid "Block" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:292 +msgid "Block supports by angle" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:293 +msgid "Add supports by angle" +msgstr "" + #: src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp:41 msgid "Place on face" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:38 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:40 msgid "Hollow this object" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:39 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:41 msgid "Preview hollowed and drilled model" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:40 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:42 msgid "Offset" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:41 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:43 msgid "Quality" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:42 -#: src/libslic3r/PrintConfig.cpp:2951 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:44 +#: src/libslic3r/PrintConfig.cpp:3098 msgid "Closing distance" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:43 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:45 msgid "Hole diameter" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:44 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:46 msgid "Hole depth" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:45 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:47 msgid "Remove selected holes" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:46 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:48 msgid "Remove all holes" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:47 -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:56 -msgid "Clipping of view" -msgstr "" - -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:48 -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:57 -msgid "Reset direction" -msgstr "" - -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:49 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:51 msgid "Show supports" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:307 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:308 msgid "Add drainage hole" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:428 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:424 msgid "Delete drainage hole" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:628 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:624 msgid "Hollowing parameter change" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:699 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:693 msgid "Change drainage hole diameter" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:791 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:785 msgid "Hollow and drill" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:846 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:835 msgid "Move drainage hole" msgstr "" @@ -1759,211 +2134,284 @@ msgstr "" msgid "Move" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:449 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:480 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:499 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:517 -#: src/libslic3r/PrintConfig.cpp:3473 +#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:210 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:224 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:506 +#: src/slic3r/GUI/Mouse3DController.cpp:288 +#: src/slic3r/GUI/Mouse3DController.cpp:309 +msgid "Rotation" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:220 src/slic3r/GUI/Plater.cpp:3961 +msgid "Optimize orientation" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:221 +#: src/libslic3r/PrintConfig.cpp:3089 +msgid "Accuracy" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:233 +msgid "Least supports" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:234 +msgid "Suface quality" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:513 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:527 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:546 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:562 +#: src/libslic3r/PrintConfig.cpp:3650 msgid "Rotate" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoScale.cpp:79 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:230 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:500 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:518 -#: src/libslic3r/PrintConfig.cpp:3488 +#: src/slic3r/GUI/Gizmos/GLGizmoScale.cpp:78 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:238 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:547 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:563 +#: src/libslic3r/PrintConfig.cpp:3665 msgid "Scale" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:46 -msgid "Head diameter" +#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:30 +#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:381 +msgid "Enforce seam" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:32 +#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:383 +msgid "Block seam" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:46 +msgid "Seam Editing" msgstr "" #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:47 -msgid "Lock supports under new islands" +msgid "Head diameter" msgstr "" #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:48 -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1216 -msgid "Remove selected points" +msgid "Lock supports under new islands" msgstr "" #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:49 -msgid "Remove all points" +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1218 +msgid "Remove selected points" msgstr "" #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:50 -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1219 -msgid "Apply changes" +msgid "Remove all points" msgstr "" #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:51 -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1220 -msgid "Discard changes" +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1221 +msgid "Apply changes" msgstr "" #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:52 -msgid "Minimal points distance" +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1222 +msgid "Discard changes" msgstr "" #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:53 -#: src/libslic3r/PrintConfig.cpp:2781 -msgid "Support points density" +msgid "Minimal points distance" msgstr "" #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:54 -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1222 -msgid "Auto-generate points" +#: src/libslic3r/PrintConfig.cpp:2928 +msgid "Support points density" msgstr "" #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:55 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1224 +msgid "Auto-generate points" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:56 msgid "Manual editing" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:373 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:374 msgid "Add support point" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:513 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:514 msgid "Delete support point" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:693 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:694 msgid "Change point head diameter" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:761 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:762 msgid "Support parameter change" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:868 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:869 msgid "SLA Support Points" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:893 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:897 msgid "SLA gizmo turned on" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:909 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:911 msgid "Do you want to save your manually edited support points?" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:910 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:912 msgid "Save changes?" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:922 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:924 msgid "SLA gizmo turned off" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:953 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:955 msgid "Move support point" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1046 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1048 msgid "Support points edit" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1125 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1127 msgid "Autogeneration will erase all manually edited points." msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1126 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1128 msgid "Are you sure you want to do it?" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1127 src/slic3r/GUI/GUI.cpp:258 -#: src/slic3r/GUI/Tab.cpp:3085 src/slic3r/GUI/WipeTowerDialog.cpp:45 -#: src/slic3r/GUI/WipeTowerDialog.cpp:366 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1129 src/slic3r/GUI/GUI.cpp:256 +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:478 +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:502 +#: src/slic3r/GUI/WipeTowerDialog.cpp:45 src/slic3r/GUI/WipeTowerDialog.cpp:366 msgid "Warning" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1132 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1134 msgid "Autogenerate support points" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1179 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1181 msgid "SLA gizmo keyboard shortcuts" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1190 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1192 msgid "Note: some shortcuts work in (non)editing mode only." msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1208 -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1211 -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1212 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1210 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1213 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1214 msgid "Left click" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1208 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1210 msgid "Add point" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1209 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1211 msgid "Right click" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1209 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1211 msgid "Remove point" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1210 -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1213 -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1214 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1212 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1215 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1216 msgid "Drag" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1210 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1212 msgid "Move point" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1211 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1213 msgid "Add point to selection" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1212 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1214 msgid "Remove point from selection" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1213 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1215 msgid "Select by rectangle" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1214 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1216 msgid "Deselect by rectangle" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1215 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1217 msgid "Select all points" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1217 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1219 msgid "Mouse wheel" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1217 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1219 msgid "Move clipping plane" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1218 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1220 msgid "Reset clipping plane" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1221 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1223 msgid "Switch to editing mode" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:520 -#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:747 +#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:521 msgid "Gizmo-Scale" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:662 +#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:639 msgid "Gizmo-Place on Face" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:234 +#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:39 +msgid "Supports gizmo turned on" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:40 +msgid "Seam gizmo turned on" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:47 +msgid "Seam gizmo turned off" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:48 +msgid "Supports gizmo turned off" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:371 +msgid "Add supports" +msgstr "" + +#: src/slic3r/GUI/GUI_App.cpp:243 +msgid "is based on Slic3r by Alessandro Ranellucci and the RepRap community." +msgstr "" + +#: src/slic3r/GUI/GUI_App.cpp:245 +msgid "" +"Contributions by Vojtech Bubnik, Enrico Turri, Oleksandra Iushchenko, Tamas " +"Meszaros, Lukas Matena, Vojtech Kral, David Kocik and numerous others." +msgstr "" + +#: src/slic3r/GUI/GUI_App.cpp:246 +msgid "Artwork model by Nora Al-Badri and Jan Nikolai Nelles" +msgstr "" + +#: src/slic3r/GUI/GUI_App.cpp:528 #, possible-c-format msgid "" "%s has encountered an error. It was likely caused by running out of memory. " @@ -1973,228 +2421,284 @@ msgid "" "The application will now terminate." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:237 +#: src/slic3r/GUI/GUI_App.cpp:531 msgid "Fatal error" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:554 -msgid "Changing of an application language" +#: src/slic3r/GUI/GUI_App.cpp:655 src/slic3r/GUI/GUI_App.cpp:670 +msgid "" +"Error parsing PrusaSlicer config file, it is probably corrupted. Try to " +"manually delete the file to recover from the error. Your user profiles will " +"not be affected." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:557 src/slic3r/GUI/GUI_App.cpp:565 +#: src/slic3r/GUI/GUI_App.cpp:661 +msgid "" +"Error parsing PrusaGCodeViewer config file, it is probably corrupted. Try to " +"manually delete the file to recover from the error." +msgstr "" + +#: src/slic3r/GUI/GUI_App.cpp:718 +#, possible-c-format +msgid "" +"%s\n" +"Do you want to continue?" +msgstr "" + +#: src/slic3r/GUI/GUI_App.cpp:720 src/slic3r/GUI/UnsavedChangesDialog.cpp:653 +msgid "Remember my choice" +msgstr "" + +#: src/slic3r/GUI/GUI_App.cpp:759 +msgid "Loading configuration..." +msgstr "" + +#: src/slic3r/GUI/GUI_App.cpp:825 +msgid "Creating settings tabs..." +msgstr "" + +#: src/slic3r/GUI/GUI_App.cpp:1078 +msgid "" +"You have the following presets with saved options for \"Print Host upload\"" +msgstr "" + +#: src/slic3r/GUI/GUI_App.cpp:1082 +msgid "" +"But from this version of PrusaSlicer we don't show/use this information in " +"Printer Settings.\n" +"Now, this information will be exposed in physical printers settings." +msgstr "" + +#: src/slic3r/GUI/GUI_App.cpp:1084 +msgid "" +"By default new Printer devices will be named as \"Printer N\" during its " +"creation.\n" +"Note: This name can be changed later from the physical printers settings" +msgstr "" + +#: src/slic3r/GUI/GUI_App.cpp:1087 src/slic3r/GUI/Tab.cpp:3435 +msgid "Information" +msgstr "" + +#: src/slic3r/GUI/GUI_App.cpp:1102 src/slic3r/GUI/GUI_App.cpp:1115 msgid "Recreating" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:570 +#: src/slic3r/GUI/GUI_App.cpp:1120 msgid "Loading of current presets" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:575 +#: src/slic3r/GUI/GUI_App.cpp:1125 msgid "Loading of a mode view" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:654 +#: src/slic3r/GUI/GUI_App.cpp:1208 msgid "Choose one file (3MF/AMF):" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:672 +#: src/slic3r/GUI/GUI_App.cpp:1220 msgid "Choose one or more files (STL/OBJ/AMF/3MF/PRUSA):" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:733 +#: src/slic3r/GUI/GUI_App.cpp:1233 +msgid "Choose one file (GCODE/.GCO/.G/.ngc/NGC):" +msgstr "" + +#: src/slic3r/GUI/GUI_App.cpp:1245 +msgid "Changing of an application language" +msgstr "" + +#: src/slic3r/GUI/GUI_App.cpp:1295 msgid "Select the language" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:733 +#: src/slic3r/GUI/GUI_App.cpp:1295 msgid "Language" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:911 +#: src/slic3r/GUI/GUI_App.cpp:1425 +msgid "modified" +msgstr "" + +#: src/slic3r/GUI/GUI_App.cpp:1474 #, possible-c-format msgid "Run %s" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:914 +#: src/slic3r/GUI/GUI_App.cpp:1480 msgid "&Configuration Snapshots" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:914 +#: src/slic3r/GUI/GUI_App.cpp:1480 msgid "Inspect / activate configuration snapshots" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:915 +#: src/slic3r/GUI/GUI_App.cpp:1481 msgid "Take Configuration &Snapshot" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:915 +#: src/slic3r/GUI/GUI_App.cpp:1481 msgid "Capture a configuration snapshot" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:916 +#: src/slic3r/GUI/GUI_App.cpp:1482 msgid "Check for updates" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:916 +#: src/slic3r/GUI/GUI_App.cpp:1482 msgid "Check for configuration updates" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:918 +#: src/slic3r/GUI/GUI_App.cpp:1487 msgid "&Preferences" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:924 +#: src/slic3r/GUI/GUI_App.cpp:1493 msgid "Application preferences" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:927 src/slic3r/GUI/wxExtensions.cpp:756 +#: src/slic3r/GUI/GUI_App.cpp:1504 src/slic3r/GUI/wxExtensions.cpp:673 msgid "Simple" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:927 +#: src/slic3r/GUI/GUI_App.cpp:1504 msgid "Simple View Mode" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:929 src/slic3r/GUI/wxExtensions.cpp:758 +#: src/slic3r/GUI/GUI_App.cpp:1506 src/slic3r/GUI/wxExtensions.cpp:675 msgctxt "Mode" msgid "Advanced" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:929 +#: src/slic3r/GUI/GUI_App.cpp:1506 msgid "Advanced View Mode" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:930 src/slic3r/GUI/wxExtensions.cpp:759 +#: src/slic3r/GUI/GUI_App.cpp:1507 src/slic3r/GUI/wxExtensions.cpp:676 msgid "Expert" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:930 +#: src/slic3r/GUI/GUI_App.cpp:1507 msgid "Expert View Mode" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:935 +#: src/slic3r/GUI/GUI_App.cpp:1512 msgid "Mode" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:935 +#: src/slic3r/GUI/GUI_App.cpp:1512 #, possible-c-format msgid "%s View Mode" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:937 +#: src/slic3r/GUI/GUI_App.cpp:1517 msgid "&Language" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:939 +#: src/slic3r/GUI/GUI_App.cpp:1522 msgid "Flash printer &firmware" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:939 +#: src/slic3r/GUI/GUI_App.cpp:1522 msgid "Upload a firmware image into an Arduino based printer" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:954 +#: src/slic3r/GUI/GUI_App.cpp:1540 msgid "Taking configuration snapshot" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:954 +#: src/slic3r/GUI/GUI_App.cpp:1540 msgid "Snapshot name" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1001 +#: src/slic3r/GUI/GUI_App.cpp:1605 src/slic3r/GUI/GUI_App.cpp:1614 +msgid "Language selection" +msgstr "" + +#: src/slic3r/GUI/GUI_App.cpp:1608 msgid "" "Switching the language will trigger application restart.\n" "You will lose content of the plater." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1003 +#: src/slic3r/GUI/GUI_App.cpp:1610 msgid "Do you want to proceed?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1004 -msgid "Language selection" -msgstr "" - -#: src/slic3r/GUI/GUI_App.cpp:1028 +#: src/slic3r/GUI/GUI_App.cpp:1645 msgid "&Configuration" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1052 -msgid "The presets on the following tabs were modified" +#: src/slic3r/GUI/GUI_App.cpp:1676 +msgid "The preset(s) modifications are successfully saved" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1052 src/slic3r/GUI/Tab.cpp:2945 -msgid "Discard changes and continue anyway?" -msgstr "" - -#: src/slic3r/GUI/GUI_App.cpp:1055 -msgid "Unsaved Presets" -msgstr "" - -#: src/slic3r/GUI/GUI_App.cpp:1204 src/slic3r/GUI/Tab.cpp:2957 +#: src/slic3r/GUI/GUI_App.cpp:1876 src/slic3r/GUI/Tab.cpp:3187 msgid "It's impossible to print multi-part object(s) with SLA technology." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1205 +#: src/slic3r/GUI/GUI_App.cpp:1877 msgid "Please check and fix your object list." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1206 src/slic3r/GUI/Plater.cpp:2377 -#: src/slic3r/GUI/Tab.cpp:2959 +#: src/slic3r/GUI/GUI_App.cpp:1878 src/slic3r/GUI/Jobs/SLAImportJob.cpp:210 +#: src/slic3r/GUI/Plater.cpp:2256 src/slic3r/GUI/Tab.cpp:3189 msgid "Attention!" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1223 +#: src/slic3r/GUI/GUI_App.cpp:1895 msgid "Select a gcode file:" msgstr "" -#: src/slic3r/GUI/GUI_ObjectLayers.cpp:27 +#: src/slic3r/GUI/GUI_ObjectLayers.cpp:29 msgid "Start at height" msgstr "" -#: src/slic3r/GUI/GUI_ObjectLayers.cpp:27 +#: src/slic3r/GUI/GUI_ObjectLayers.cpp:29 msgid "Stop at height" msgstr "" -#: src/slic3r/GUI/GUI_ObjectLayers.cpp:158 +#: src/slic3r/GUI/GUI_ObjectLayers.cpp:161 msgid "Remove layer range" msgstr "" -#: src/slic3r/GUI/GUI_ObjectLayers.cpp:162 +#: src/slic3r/GUI/GUI_ObjectLayers.cpp:165 msgid "Add layer range" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:34 src/slic3r/GUI/GUI_ObjectList.cpp:95 -#: src/slic3r/GUI/GUI_ObjectList.cpp:617 src/libslic3r/PrintConfig.cpp:72 -#: src/libslic3r/PrintConfig.cpp:175 src/libslic3r/PrintConfig.cpp:184 -#: src/libslic3r/PrintConfig.cpp:408 src/libslic3r/PrintConfig.cpp:470 -#: src/libslic3r/PrintConfig.cpp:478 src/libslic3r/PrintConfig.cpp:890 -#: src/libslic3r/PrintConfig.cpp:1075 src/libslic3r/PrintConfig.cpp:1374 -#: src/libslic3r/PrintConfig.cpp:1441 src/libslic3r/PrintConfig.cpp:1622 -#: src/libslic3r/PrintConfig.cpp:2081 src/libslic3r/PrintConfig.cpp:2140 -#: src/libslic3r/PrintConfig.cpp:2149 +#: src/slic3r/GUI/GUI_ObjectList.cpp:34 src/slic3r/GUI/GUI_ObjectList.cpp:92 +#: src/slic3r/GUI/GUI_ObjectList.cpp:651 src/libslic3r/PrintConfig.cpp:72 +#: src/libslic3r/PrintConfig.cpp:209 src/libslic3r/PrintConfig.cpp:218 +#: src/libslic3r/PrintConfig.cpp:442 src/libslic3r/PrintConfig.cpp:506 +#: src/libslic3r/PrintConfig.cpp:514 src/libslic3r/PrintConfig.cpp:932 +#: src/libslic3r/PrintConfig.cpp:1119 src/libslic3r/PrintConfig.cpp:1482 +#: src/libslic3r/PrintConfig.cpp:1549 src/libslic3r/PrintConfig.cpp:1730 +#: src/libslic3r/PrintConfig.cpp:2217 src/libslic3r/PrintConfig.cpp:2276 +#: src/libslic3r/PrintConfig.cpp:2285 msgid "Layers and Perimeters" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:36 src/slic3r/GUI/GUI_ObjectList.cpp:97 -#: src/slic3r/GUI/GUI_ObjectList.cpp:619 src/slic3r/GUI/GUI_Preview.cpp:305 -#: src/slic3r/GUI/Tab.cpp:1188 src/slic3r/GUI/Tab.cpp:1189 -#: src/libslic3r/ExtrusionEntity.cpp:319 src/libslic3r/PrintConfig.cpp:370 -#: src/libslic3r/PrintConfig.cpp:1502 src/libslic3r/PrintConfig.cpp:1873 -#: src/libslic3r/PrintConfig.cpp:1879 src/libslic3r/PrintConfig.cpp:1887 -#: src/libslic3r/PrintConfig.cpp:1899 src/libslic3r/PrintConfig.cpp:1909 -#: src/libslic3r/PrintConfig.cpp:1917 src/libslic3r/PrintConfig.cpp:1932 -#: src/libslic3r/PrintConfig.cpp:1953 src/libslic3r/PrintConfig.cpp:1965 -#: src/libslic3r/PrintConfig.cpp:1981 src/libslic3r/PrintConfig.cpp:1990 -#: src/libslic3r/PrintConfig.cpp:1999 src/libslic3r/PrintConfig.cpp:2010 -#: src/libslic3r/PrintConfig.cpp:2024 src/libslic3r/PrintConfig.cpp:2032 -#: src/libslic3r/PrintConfig.cpp:2033 src/libslic3r/PrintConfig.cpp:2042 -#: src/libslic3r/PrintConfig.cpp:2050 src/libslic3r/PrintConfig.cpp:2064 +#: src/slic3r/GUI/GUI_ObjectList.cpp:36 src/slic3r/GUI/GUI_ObjectList.cpp:95 +#: src/slic3r/GUI/GUI_ObjectList.cpp:654 src/slic3r/GUI/GUI_Preview.cpp:311 +#: src/slic3r/GUI/Tab.cpp:1449 src/slic3r/GUI/Tab.cpp:1450 +#: src/libslic3r/ExtrusionEntity.cpp:324 src/libslic3r/ExtrusionEntity.cpp:356 +#: src/libslic3r/PrintConfig.cpp:404 src/libslic3r/PrintConfig.cpp:1610 +#: src/libslic3r/PrintConfig.cpp:2008 src/libslic3r/PrintConfig.cpp:2014 +#: src/libslic3r/PrintConfig.cpp:2022 src/libslic3r/PrintConfig.cpp:2034 +#: src/libslic3r/PrintConfig.cpp:2044 src/libslic3r/PrintConfig.cpp:2052 +#: src/libslic3r/PrintConfig.cpp:2067 src/libslic3r/PrintConfig.cpp:2088 +#: src/libslic3r/PrintConfig.cpp:2100 src/libslic3r/PrintConfig.cpp:2116 +#: src/libslic3r/PrintConfig.cpp:2125 src/libslic3r/PrintConfig.cpp:2134 +#: src/libslic3r/PrintConfig.cpp:2145 src/libslic3r/PrintConfig.cpp:2159 +#: src/libslic3r/PrintConfig.cpp:2167 src/libslic3r/PrintConfig.cpp:2168 +#: src/libslic3r/PrintConfig.cpp:2177 src/libslic3r/PrintConfig.cpp:2185 +#: src/libslic3r/PrintConfig.cpp:2199 msgid "Support material" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:39 src/slic3r/GUI/GUI_ObjectList.cpp:101 -#: src/slic3r/GUI/GUI_ObjectList.cpp:623 src/libslic3r/PrintConfig.cpp:2259 -#: src/libslic3r/PrintConfig.cpp:2267 +#: src/slic3r/GUI/GUI_ObjectList.cpp:39 src/slic3r/GUI/GUI_ObjectList.cpp:99 +#: src/slic3r/GUI/GUI_ObjectList.cpp:658 src/libslic3r/PrintConfig.cpp:2395 +#: src/libslic3r/PrintConfig.cpp:2403 msgid "Wipe options" msgstr "" @@ -2218,411 +2722,432 @@ msgstr "" msgid "Add support blocker" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:98 src/slic3r/GUI/GUI_ObjectList.cpp:620 -#: src/slic3r/GUI/GUI_Preview.cpp:283 src/slic3r/GUI/Tab.cpp:1213 -#: src/libslic3r/PrintConfig.cpp:235 src/libslic3r/PrintConfig.cpp:458 -#: src/libslic3r/PrintConfig.cpp:919 src/libslic3r/PrintConfig.cpp:1048 -#: src/libslic3r/PrintConfig.cpp:1431 src/libslic3r/PrintConfig.cpp:1668 -#: src/libslic3r/PrintConfig.cpp:1723 src/libslic3r/PrintConfig.cpp:1775 -#: src/libslic3r/PrintConfig.cpp:2125 +#: src/slic3r/GUI/GUI_ObjectList.cpp:94 src/slic3r/GUI/GUI_ObjectList.cpp:653 +#: src/slic3r/GUI/GUI_Preview.cpp:307 src/slic3r/GUI/Tab.cpp:1420 +#: src/libslic3r/ExtrusionEntity.cpp:320 src/libslic3r/ExtrusionEntity.cpp:348 +#: src/libslic3r/PrintConfig.cpp:1126 src/libslic3r/PrintConfig.cpp:1132 +#: src/libslic3r/PrintConfig.cpp:1146 src/libslic3r/PrintConfig.cpp:1156 +msgid "Ironing" +msgstr "" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:96 src/slic3r/GUI/GUI_ObjectList.cpp:655 +#: src/slic3r/GUI/GUI_Preview.cpp:278 src/slic3r/GUI/Tab.cpp:1474 +#: src/libslic3r/PrintConfig.cpp:269 src/libslic3r/PrintConfig.cpp:494 +#: src/libslic3r/PrintConfig.cpp:963 src/libslic3r/PrintConfig.cpp:1092 +#: src/libslic3r/PrintConfig.cpp:1165 src/libslic3r/PrintConfig.cpp:1539 +#: src/libslic3r/PrintConfig.cpp:1776 src/libslic3r/PrintConfig.cpp:1831 +#: src/libslic3r/PrintConfig.cpp:1883 src/libslic3r/PrintConfig.cpp:2261 msgid "Speed" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:99 src/slic3r/GUI/GUI_ObjectList.cpp:621 -#: src/slic3r/GUI/Tab.cpp:1248 src/slic3r/GUI/Tab.cpp:1871 -#: src/libslic3r/PrintConfig.cpp:488 src/libslic3r/PrintConfig.cpp:1002 -#: src/libslic3r/PrintConfig.cpp:1409 src/libslic3r/PrintConfig.cpp:1744 -#: src/libslic3r/PrintConfig.cpp:1945 src/libslic3r/PrintConfig.cpp:1972 +#: src/slic3r/GUI/GUI_ObjectList.cpp:97 src/slic3r/GUI/GUI_ObjectList.cpp:656 +#: src/slic3r/GUI/Tab.cpp:1510 src/slic3r/GUI/Tab.cpp:2072 +#: src/libslic3r/PrintConfig.cpp:524 src/libslic3r/PrintConfig.cpp:1046 +#: src/libslic3r/PrintConfig.cpp:1517 src/libslic3r/PrintConfig.cpp:1852 +#: src/libslic3r/PrintConfig.cpp:2080 src/libslic3r/PrintConfig.cpp:2107 msgid "Extruders" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:100 src/slic3r/GUI/GUI_ObjectList.cpp:622 -#: src/libslic3r/PrintConfig.cpp:447 src/libslic3r/PrintConfig.cpp:555 -#: src/libslic3r/PrintConfig.cpp:877 src/libslic3r/PrintConfig.cpp:1010 -#: src/libslic3r/PrintConfig.cpp:1418 src/libslic3r/PrintConfig.cpp:1764 -#: src/libslic3r/PrintConfig.cpp:1954 src/libslic3r/PrintConfig.cpp:2113 +#: src/slic3r/GUI/GUI_ObjectList.cpp:98 src/slic3r/GUI/GUI_ObjectList.cpp:657 +#: src/libslic3r/PrintConfig.cpp:483 src/libslic3r/PrintConfig.cpp:591 +#: src/libslic3r/PrintConfig.cpp:919 src/libslic3r/PrintConfig.cpp:1054 +#: src/libslic3r/PrintConfig.cpp:1526 src/libslic3r/PrintConfig.cpp:1872 +#: src/libslic3r/PrintConfig.cpp:2089 src/libslic3r/PrintConfig.cpp:2249 msgid "Extrusion Width" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:104 src/slic3r/GUI/GUI_ObjectList.cpp:626 -#: src/slic3r/GUI/Tab.cpp:1154 src/slic3r/GUI/Tab.cpp:1169 -#: src/slic3r/GUI/Tab.cpp:1269 src/slic3r/GUI/Tab.cpp:1272 -#: src/slic3r/GUI/Tab.cpp:1536 src/slic3r/GUI/Tab.cpp:2000 -#: src/slic3r/GUI/Tab.cpp:3730 src/libslic3r/PrintConfig.cpp:88 -#: src/libslic3r/PrintConfig.cpp:119 src/libslic3r/PrintConfig.cpp:223 -#: src/libslic3r/PrintConfig.cpp:1037 src/libslic3r/PrintConfig.cpp:2283 -#: src/libslic3r/PrintConfig.cpp:2455 +#: src/slic3r/GUI/GUI_ObjectList.cpp:102 src/slic3r/GUI/GUI_ObjectList.cpp:661 +#: src/slic3r/GUI/Tab.cpp:1409 src/slic3r/GUI/Tab.cpp:1430 +#: src/slic3r/GUI/Tab.cpp:1531 src/slic3r/GUI/Tab.cpp:1534 +#: src/slic3r/GUI/Tab.cpp:1816 src/slic3r/GUI/Tab.cpp:2152 +#: src/slic3r/GUI/Tab.cpp:4080 src/libslic3r/PrintConfig.cpp:90 +#: src/libslic3r/PrintConfig.cpp:121 src/libslic3r/PrintConfig.cpp:257 +#: src/libslic3r/PrintConfig.cpp:1081 src/libslic3r/PrintConfig.cpp:2419 +#: src/libslic3r/PrintConfig.cpp:2591 msgid "Advanced" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:106 src/slic3r/GUI/GUI_ObjectList.cpp:628 -#: src/slic3r/GUI/Plater.cpp:502 src/slic3r/GUI/Tab.cpp:3671 -#: src/slic3r/GUI/Tab.cpp:3672 src/libslic3r/PrintConfig.cpp:2621 -#: src/libslic3r/PrintConfig.cpp:2628 src/libslic3r/PrintConfig.cpp:2637 -#: src/libslic3r/PrintConfig.cpp:2646 src/libslic3r/PrintConfig.cpp:2656 -#: src/libslic3r/PrintConfig.cpp:2692 src/libslic3r/PrintConfig.cpp:2699 -#: src/libslic3r/PrintConfig.cpp:2710 src/libslic3r/PrintConfig.cpp:2720 -#: src/libslic3r/PrintConfig.cpp:2729 src/libslic3r/PrintConfig.cpp:2742 -#: src/libslic3r/PrintConfig.cpp:2752 src/libslic3r/PrintConfig.cpp:2761 -#: src/libslic3r/PrintConfig.cpp:2771 src/libslic3r/PrintConfig.cpp:2782 -#: src/libslic3r/PrintConfig.cpp:2790 +#: src/slic3r/GUI/GUI_ObjectList.cpp:104 src/slic3r/GUI/GUI_ObjectList.cpp:663 +#: src/slic3r/GUI/Plater.cpp:361 src/slic3r/GUI/Tab.cpp:4014 +#: src/slic3r/GUI/Tab.cpp:4015 src/libslic3r/PrintConfig.cpp:2757 +#: src/libslic3r/PrintConfig.cpp:2764 src/libslic3r/PrintConfig.cpp:2773 +#: src/libslic3r/PrintConfig.cpp:2782 src/libslic3r/PrintConfig.cpp:2792 +#: src/libslic3r/PrintConfig.cpp:2802 src/libslic3r/PrintConfig.cpp:2839 +#: src/libslic3r/PrintConfig.cpp:2846 src/libslic3r/PrintConfig.cpp:2857 +#: src/libslic3r/PrintConfig.cpp:2867 src/libslic3r/PrintConfig.cpp:2876 +#: src/libslic3r/PrintConfig.cpp:2889 src/libslic3r/PrintConfig.cpp:2899 +#: src/libslic3r/PrintConfig.cpp:2908 src/libslic3r/PrintConfig.cpp:2918 +#: src/libslic3r/PrintConfig.cpp:2929 src/libslic3r/PrintConfig.cpp:2937 msgid "Supports" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:107 src/slic3r/GUI/GUI_ObjectList.cpp:629 -#: src/slic3r/GUI/Plater.cpp:642 src/slic3r/GUI/Tab.cpp:3705 -#: src/slic3r/GUI/Tab.cpp:3706 src/libslic3r/PrintConfig.cpp:2798 -#: src/libslic3r/PrintConfig.cpp:2805 src/libslic3r/PrintConfig.cpp:2819 -#: src/libslic3r/PrintConfig.cpp:2830 src/libslic3r/PrintConfig.cpp:2840 -#: src/libslic3r/PrintConfig.cpp:2862 src/libslic3r/PrintConfig.cpp:2873 -#: src/libslic3r/PrintConfig.cpp:2880 src/libslic3r/PrintConfig.cpp:2887 -#: src/libslic3r/PrintConfig.cpp:2898 src/libslic3r/PrintConfig.cpp:2907 -#: src/libslic3r/PrintConfig.cpp:2916 +#: src/slic3r/GUI/GUI_ObjectList.cpp:105 src/slic3r/GUI/GUI_ObjectList.cpp:664 +#: src/slic3r/GUI/Plater.cpp:501 src/slic3r/GUI/Tab.cpp:4055 +#: src/slic3r/GUI/Tab.cpp:4056 src/slic3r/GUI/Tab.cpp:4127 +#: src/libslic3r/PrintConfig.cpp:2945 src/libslic3r/PrintConfig.cpp:2952 +#: src/libslic3r/PrintConfig.cpp:2966 src/libslic3r/PrintConfig.cpp:2977 +#: src/libslic3r/PrintConfig.cpp:2987 src/libslic3r/PrintConfig.cpp:3009 +#: src/libslic3r/PrintConfig.cpp:3020 src/libslic3r/PrintConfig.cpp:3027 +#: src/libslic3r/PrintConfig.cpp:3034 src/libslic3r/PrintConfig.cpp:3045 +#: src/libslic3r/PrintConfig.cpp:3054 src/libslic3r/PrintConfig.cpp:3063 msgid "Pad" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:108 src/slic3r/GUI/Tab.cpp:3723 -#: src/slic3r/GUI/Tab.cpp:3724 src/libslic3r/SLA/Hollowing.cpp:46 -#: src/libslic3r/SLA/Hollowing.cpp:58 src/libslic3r/SLA/Hollowing.cpp:67 -#: src/libslic3r/SLA/Hollowing.cpp:76 src/libslic3r/PrintConfig.cpp:2926 -#: src/libslic3r/PrintConfig.cpp:2933 src/libslic3r/PrintConfig.cpp:2943 -#: src/libslic3r/PrintConfig.cpp:2952 +#: src/slic3r/GUI/GUI_ObjectList.cpp:106 src/slic3r/GUI/Tab.cpp:4073 +#: src/slic3r/GUI/Tab.cpp:4074 src/libslic3r/SLA/Hollowing.cpp:45 +#: src/libslic3r/SLA/Hollowing.cpp:57 src/libslic3r/SLA/Hollowing.cpp:66 +#: src/libslic3r/SLA/Hollowing.cpp:75 src/libslic3r/PrintConfig.cpp:3073 +#: src/libslic3r/PrintConfig.cpp:3080 src/libslic3r/PrintConfig.cpp:3090 +#: src/libslic3r/PrintConfig.cpp:3099 msgid "Hollowing" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:282 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:153 +#: src/slic3r/GUI/GUI_ObjectList.cpp:284 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:161 msgid "Name" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:290 src/slic3r/GUI/Tab.cpp:1500 -#: src/slic3r/GUI/wxExtensions.cpp:598 src/libslic3r/PrintConfig.cpp:487 -msgid "Extruder" -msgstr "" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:294 src/slic3r/GUI/GUI_ObjectList.cpp:407 +#: src/slic3r/GUI/GUI_ObjectList.cpp:300 src/slic3r/GUI/GUI_ObjectList.cpp:441 msgid "Editing" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:352 +#: src/slic3r/GUI/GUI_ObjectList.cpp:386 #, possible-c-format msgid "Auto-repaired (%d errors):" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:359 +#: src/slic3r/GUI/GUI_ObjectList.cpp:393 msgid "degenerate facets" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:360 +#: src/slic3r/GUI/GUI_ObjectList.cpp:394 msgid "edges fixed" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:361 +#: src/slic3r/GUI/GUI_ObjectList.cpp:395 msgid "facets removed" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:362 +#: src/slic3r/GUI/GUI_ObjectList.cpp:396 msgid "facets added" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:363 +#: src/slic3r/GUI/GUI_ObjectList.cpp:397 msgid "facets reversed" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:364 +#: src/slic3r/GUI/GUI_ObjectList.cpp:398 msgid "backwards edges" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:372 +#: src/slic3r/GUI/GUI_ObjectList.cpp:406 msgid "Right button click the icon to fix STL through Netfabb" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:409 +#: src/slic3r/GUI/GUI_ObjectList.cpp:443 msgid "Right button click the icon to change the object settings" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:411 +#: src/slic3r/GUI/GUI_ObjectList.cpp:445 msgid "Click the icon to change the object settings" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:415 +#: src/slic3r/GUI/GUI_ObjectList.cpp:449 msgid "Right button click the icon to change the object printable property" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:417 +#: src/slic3r/GUI/GUI_ObjectList.cpp:451 msgid "Click the icon to change the object printable property" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:462 src/slic3r/GUI/GUI_ObjectList.cpp:474 -#: src/slic3r/GUI/GUI_ObjectList.cpp:931 src/slic3r/GUI/GUI_ObjectList.cpp:4051 -#: src/slic3r/GUI/GUI_ObjectList.cpp:4061 -#: src/slic3r/GUI/GUI_ObjectList.cpp:4096 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:202 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:259 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:284 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:492 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:1755 -msgid "default" -msgstr "" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:540 +#: src/slic3r/GUI/GUI_ObjectList.cpp:574 msgid "Change Extruder" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:555 +#: src/slic3r/GUI/GUI_ObjectList.cpp:589 msgid "Rename Object" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:555 +#: src/slic3r/GUI/GUI_ObjectList.cpp:589 msgid "Rename Sub-object" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1105 -#: src/slic3r/GUI/GUI_ObjectList.cpp:3865 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1215 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4244 msgid "Instances to Separated Objects" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1120 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1230 msgid "Volumes in Object reordered" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1120 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1230 msgid "Object reordered" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1196 -#: src/slic3r/GUI/GUI_ObjectList.cpp:1544 -#: src/slic3r/GUI/GUI_ObjectList.cpp:1550 -#: src/slic3r/GUI/GUI_ObjectList.cpp:1863 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1306 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1661 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1667 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2008 #, possible-c-format msgid "Quick Add Settings (%s)" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1279 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1396 msgid "Select showing settings" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1328 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1445 msgid "Add Settings for Layers" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1329 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1446 msgid "Add Settings for Sub-object" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1330 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1447 msgid "Add Settings for Object" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1400 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1517 msgid "Add Settings Bundle for Height range" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1401 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1518 msgid "Add Settings Bundle for Sub-object" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1402 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1519 msgid "Add Settings Bundle for Object" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1441 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1558 msgid "Load" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1446 -#: src/slic3r/GUI/GUI_ObjectList.cpp:1478 -#: src/slic3r/GUI/GUI_ObjectList.cpp:1482 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1563 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1595 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1599 msgid "Box" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1446 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1563 msgid "Cylinder" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1446 -msgid "Sphere" -msgstr "" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1446 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1563 msgid "Slab" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1514 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1631 msgid "Height range Modifier" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1523 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1640 msgid "Add settings" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1603 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1718 msgid "Change type" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1613 -#: src/slic3r/GUI/GUI_ObjectList.cpp:1625 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1728 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1740 msgid "Set as a Separated Object" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1625 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1740 msgid "Set as a Separated Objects" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1635 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1750 msgid "Printable" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1650 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1765 msgid "Rename" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1661 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1776 msgid "Fix through the Netfabb" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1671 src/slic3r/GUI/Plater.cpp:3970 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1786 src/slic3r/GUI/Plater.cpp:3884 msgid "Export as STL" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1678 -#: src/slic3r/GUI/GUI_ObjectList.cpp:4040 src/slic3r/GUI/Plater.cpp:3938 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1793 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4439 src/slic3r/GUI/Plater.cpp:3852 msgid "Reload the selected volumes from disk" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1685 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1800 msgid "Set extruder for selected items" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1738 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1832 src/libslic3r/PrintConfig.cpp:369 +msgid "Default" +msgstr "" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1852 msgid "Scale to print volume" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1738 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1852 msgid "Scale the selected object to fit the print volume" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1807 -#: src/slic3r/GUI/GUI_ObjectList.cpp:2065 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1858 src/slic3r/GUI/Plater.cpp:4886 +msgid "Convert from imperial units" +msgstr "" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1861 src/slic3r/GUI/Plater.cpp:4886 +msgid "Revert conversion from imperial units" +msgstr "" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1868 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1876 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2569 src/libslic3r/PrintConfig.cpp:3641 +msgid "Merge" +msgstr "" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1868 +msgid "Merge objects to the one multipart object" +msgstr "" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1876 +msgid "Merge objects to the one single object" +msgstr "" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1953 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2210 msgid "Add Shape" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1893 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2038 msgid "Load Part" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1932 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2077 msgid "Error!" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2007 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2152 msgid "Add Generic Subobject" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2036 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2181 msgid "Generic" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2154 -#: src/slic3r/GUI/GUI_ObjectList.cpp:2256 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2307 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2408 msgid "Last instance of an object cannot be deleted." msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2166 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2319 msgid "Delete Settings" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2190 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2341 msgid "Delete All Instances from Object" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2206 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2357 msgid "Delete Height Range" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2237 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2389 msgid "From Object List You can't delete the last solid part from object." msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2241 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2393 msgid "Delete Subobject" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2260 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2412 msgid "Delete Instance" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2284 src/slic3r/GUI/Plater.cpp:2978 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2436 src/slic3r/GUI/Plater.cpp:2771 msgid "" "The selected object couldn't be split because it contains only one part." msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2288 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2440 msgid "Split to Parts" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2342 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2576 +msgid "Merged" +msgstr "" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:2660 +msgid "Merge all parts to the one single object" +msgstr "" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:2692 msgid "Add Layers" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2468 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2846 msgid "Group manipulation" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2480 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2858 msgid "Object manipulation" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2493 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2871 msgid "Object Settings to modify" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2497 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2875 msgid "Part Settings to modify" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2502 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2880 msgid "Layer range Settings to modify" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2508 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2886 msgid "Part manipulation" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2514 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2892 msgid "Instance manipulation" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2521 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2899 msgid "Height ranges" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2521 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2899 msgid "Settings for height range" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2707 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3083 msgid "Delete Selected Item" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2844 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3221 msgid "Delete Selected" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2920 -#: src/slic3r/GUI/GUI_ObjectList.cpp:2948 -#: src/slic3r/GUI/GUI_ObjectList.cpp:2968 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3297 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3325 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3345 msgid "Add Height Range" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3014 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3391 msgid "" "Cannot insert a new layer range after the current layer range.\n" "The next layer range is too thin to be split to two\n" "without violating the minimum layer height." msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3018 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3395 msgid "" "Cannot insert a new layer range between the current and the next layer " "range.\n" @@ -2630,206 +3155,208 @@ msgid "" "is thinner than the minimum layer height allowed." msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3023 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3400 msgid "" "Cannot insert a new layer range after the current layer range.\n" "Current layer range overlaps with the next layer range." msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3082 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3459 msgid "Edit Height Range" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3375 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3754 msgid "Selection-Remove from list" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3383 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3762 msgid "Selection-Add from list" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3501 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3880 msgid "Object or Instance" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3502 -#: src/slic3r/GUI/GUI_ObjectList.cpp:3635 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3881 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4014 msgid "Part" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3502 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3881 msgid "Layer" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3504 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3883 msgid "Unsupported selection" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3505 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3884 #, possible-c-format msgid "You started your selection with %s Item." msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3506 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3885 #, possible-c-format msgid "In this mode you can select only other %s Items%s" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3509 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3888 msgid "of a current Object" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3514 -#: src/slic3r/GUI/GUI_ObjectList.cpp:3589 src/slic3r/GUI/Plater.cpp:143 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3893 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3968 src/slic3r/GUI/Plater.cpp:147 msgid "Info" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3630 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4009 msgid "You can't change a type of the last solid part of the object." msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3635 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4014 msgid "Modifier" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3635 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4014 msgid "Support Enforcer" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3635 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4014 msgid "Support Blocker" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3637 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4016 msgid "Select type of part" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3642 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4021 msgid "Change Part Type" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3887 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4266 msgid "Enter new name" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3887 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4266 msgid "Renaming" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3903 -#: src/slic3r/GUI/GUI_ObjectList.cpp:4010 src/slic3r/GUI/Tab.cpp:3529 -#: src/slic3r/GUI/Tab.cpp:3533 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4282 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4409 +#: src/slic3r/GUI/SavePresetDialog.cpp:116 +#: src/slic3r/GUI/SavePresetDialog.cpp:124 msgid "The supplied name is not valid;" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3904 -#: src/slic3r/GUI/GUI_ObjectList.cpp:4011 src/slic3r/GUI/Tab.cpp:3530 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4283 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4410 +#: src/slic3r/GUI/SavePresetDialog.cpp:117 msgid "the following characters are not allowed:" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:4055 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4458 msgid "Select extruder number:" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:4056 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4459 msgid "This extruder will be set for selected items" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:4081 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4484 msgid "Change Extruders" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:4178 src/slic3r/GUI/Selection.cpp:1481 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4581 src/slic3r/GUI/Selection.cpp:1513 msgid "Set Printable" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:4178 src/slic3r/GUI/Selection.cpp:1481 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4581 src/slic3r/GUI/Selection.cpp:1513 msgid "Set Unprintable" msgstr "" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:62 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:105 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:68 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:111 msgid "World coordinates" msgstr "" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:63 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:106 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:69 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:112 msgid "Local coordinates" msgstr "" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:82 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:88 msgid "Select coordinate space, in which the transformation will be performed." msgstr "" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:155 src/libslic3r/GCode.cpp:638 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:163 src/libslic3r/GCode.cpp:623 msgid "Object name" msgstr "" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:215 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:457 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:223 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:505 msgid "Position" msgstr "" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:216 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:458 -#: src/slic3r/GUI/Mouse3DController.cpp:295 -#: src/slic3r/GUI/Mouse3DController.cpp:318 -msgid "Rotation" -msgstr "" - -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:263 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:271 #, possible-c-format msgid "Toggle %c axis mirroring" msgstr "" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:297 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:305 msgid "Set Mirror" msgstr "" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:337 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:349 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:341 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:418 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:486 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:487 +msgid "in" +msgstr "" + +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:345 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:357 msgid "Drop to bed" msgstr "" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:363 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:372 msgid "Reset rotation" msgstr "" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:385 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:394 msgid "Reset Rotation" msgstr "" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:397 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:399 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:407 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:409 msgid "Reset scale" msgstr "" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:459 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:507 msgid "Scale factors" msgstr "" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:516 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:561 msgid "Translate" msgstr "" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:578 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:625 msgid "" "You cannot use non-uniform scaling mode for multiple objects/parts selection" msgstr "" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:750 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:797 msgid "Set Position" msgstr "" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:781 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:828 msgid "Set Orientation" msgstr "" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:846 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:893 msgid "Set Scale" msgstr "" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:875 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:925 msgid "" "The currently manipulated object is tilted (rotation angles are not " "multiples of 90°).\n" @@ -2838,1122 +3365,1312 @@ msgid "" "once the rotation is embedded into the object coordinates." msgstr "" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:878 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:928 msgid "" "This operation is irreversible.\n" "Do you want to proceed?" msgstr "" -#: src/slic3r/GUI/GUI_ObjectSettings.cpp:59 +#: src/slic3r/GUI/GUI_ObjectSettings.cpp:62 msgid "Additional Settings" msgstr "" -#: src/slic3r/GUI/GUI_ObjectSettings.cpp:95 +#: src/slic3r/GUI/GUI_ObjectSettings.cpp:98 msgid "Remove parameter" msgstr "" -#: src/slic3r/GUI/GUI_ObjectSettings.cpp:101 +#: src/slic3r/GUI/GUI_ObjectSettings.cpp:104 #, possible-c-format msgid "Delete Option %s" msgstr "" -#: src/slic3r/GUI/GUI_ObjectSettings.cpp:152 +#: src/slic3r/GUI/GUI_ObjectSettings.cpp:157 #, possible-c-format msgid "Change Option %s" msgstr "" -#: src/slic3r/GUI/GUI_Preview.cpp:277 +#: src/slic3r/GUI/GUI_Preview.cpp:265 src/slic3r/GUI/GUI_Preview.cpp:271 msgid "View" msgstr "" -#: src/slic3r/GUI/GUI_Preview.cpp:280 src/slic3r/GUI/GUI_Preview.cpp:641 -#: src/libslic3r/GCode/PreviewData.cpp:346 -msgid "Feature type" -msgstr "" - -#: src/slic3r/GUI/GUI_Preview.cpp:281 src/libslic3r/PrintConfig.cpp:500 +#: src/slic3r/GUI/GUI_Preview.cpp:276 src/libslic3r/PrintConfig.cpp:536 msgid "Height" msgstr "" -#: src/slic3r/GUI/GUI_Preview.cpp:282 src/libslic3r/PrintConfig.cpp:2245 +#: src/slic3r/GUI/GUI_Preview.cpp:277 src/libslic3r/PrintConfig.cpp:2381 msgid "Width" msgstr "" -#: src/slic3r/GUI/GUI_Preview.cpp:284 src/slic3r/GUI/Tab.cpp:1523 +#: src/slic3r/GUI/GUI_Preview.cpp:279 src/slic3r/GUI/Tab.cpp:1803 msgid "Fan speed" msgstr "" -#: src/slic3r/GUI/GUI_Preview.cpp:285 +#: src/slic3r/GUI/GUI_Preview.cpp:280 msgid "Volumetric flow rate" msgstr "" -#: src/slic3r/GUI/GUI_Preview.cpp:286 src/slic3r/GUI/GUI_Preview.cpp:401 -#: src/slic3r/GUI/GUI_Preview.cpp:585 src/slic3r/GUI/GUI_Preview.cpp:640 -#: src/slic3r/GUI/GUI_Preview.cpp:901 src/libslic3r/GCode/PreviewData.cpp:358 -msgid "Tool" -msgstr "" - -#: src/slic3r/GUI/GUI_Preview.cpp:287 src/slic3r/GUI/GUI_Preview.cpp:638 -#: src/libslic3r/GCode/PreviewData.cpp:360 -msgid "Color Print" -msgstr "" - -#: src/slic3r/GUI/GUI_Preview.cpp:290 +#: src/slic3r/GUI/GUI_Preview.cpp:286 src/slic3r/GUI/GUI_Preview.cpp:288 msgid "Show" msgstr "" -#: src/slic3r/GUI/GUI_Preview.cpp:293 src/slic3r/GUI/GUI_Preview.cpp:294 +#: src/slic3r/GUI/GUI_Preview.cpp:293 src/slic3r/GUI/GUI_Preview.cpp:295 +#: src/slic3r/GUI/GUI_Preview.cpp:316 msgid "Feature types" msgstr "" -#: src/slic3r/GUI/GUI_Preview.cpp:296 src/libslic3r/ExtrusionEntity.cpp:310 +#: src/slic3r/GUI/GUI_Preview.cpp:301 src/libslic3r/ExtrusionEntity.cpp:314 +#: src/libslic3r/ExtrusionEntity.cpp:336 msgid "Perimeter" msgstr "" -#: src/slic3r/GUI/GUI_Preview.cpp:297 src/libslic3r/ExtrusionEntity.cpp:311 +#: src/slic3r/GUI/GUI_Preview.cpp:302 src/libslic3r/ExtrusionEntity.cpp:315 +#: src/libslic3r/ExtrusionEntity.cpp:338 msgid "External perimeter" msgstr "" -#: src/slic3r/GUI/GUI_Preview.cpp:298 src/libslic3r/ExtrusionEntity.cpp:312 +#: src/slic3r/GUI/GUI_Preview.cpp:303 src/libslic3r/ExtrusionEntity.cpp:316 +#: src/libslic3r/ExtrusionEntity.cpp:340 msgid "Overhang perimeter" msgstr "" -#: src/slic3r/GUI/GUI_Preview.cpp:299 src/libslic3r/ExtrusionEntity.cpp:313 +#: src/slic3r/GUI/GUI_Preview.cpp:304 src/libslic3r/ExtrusionEntity.cpp:317 +#: src/libslic3r/ExtrusionEntity.cpp:342 msgid "Internal infill" msgstr "" -#: src/slic3r/GUI/GUI_Preview.cpp:300 src/libslic3r/ExtrusionEntity.cpp:314 -#: src/libslic3r/PrintConfig.cpp:1763 src/libslic3r/PrintConfig.cpp:1774 +#: src/slic3r/GUI/GUI_Preview.cpp:305 src/libslic3r/ExtrusionEntity.cpp:318 +#: src/libslic3r/ExtrusionEntity.cpp:344 src/libslic3r/PrintConfig.cpp:1871 +#: src/libslic3r/PrintConfig.cpp:1882 msgid "Solid infill" msgstr "" -#: src/slic3r/GUI/GUI_Preview.cpp:301 src/libslic3r/ExtrusionEntity.cpp:315 -#: src/libslic3r/PrintConfig.cpp:2112 src/libslic3r/PrintConfig.cpp:2124 +#: src/slic3r/GUI/GUI_Preview.cpp:306 src/libslic3r/ExtrusionEntity.cpp:319 +#: src/libslic3r/ExtrusionEntity.cpp:346 src/libslic3r/PrintConfig.cpp:2248 +#: src/libslic3r/PrintConfig.cpp:2260 msgid "Top solid infill" msgstr "" -#: src/slic3r/GUI/GUI_Preview.cpp:302 src/libslic3r/ExtrusionEntity.cpp:316 +#: src/slic3r/GUI/GUI_Preview.cpp:308 src/libslic3r/ExtrusionEntity.cpp:321 +#: src/libslic3r/ExtrusionEntity.cpp:350 msgid "Bridge infill" msgstr "" -#: src/slic3r/GUI/GUI_Preview.cpp:303 src/libslic3r/ExtrusionEntity.cpp:317 -#: src/libslic3r/PrintConfig.cpp:918 +#: src/slic3r/GUI/GUI_Preview.cpp:309 src/libslic3r/ExtrusionEntity.cpp:322 +#: src/libslic3r/ExtrusionEntity.cpp:352 src/libslic3r/PrintConfig.cpp:962 msgid "Gap fill" msgstr "" -#: src/slic3r/GUI/GUI_Preview.cpp:304 src/slic3r/GUI/Tab.cpp:1178 -#: src/libslic3r/ExtrusionEntity.cpp:318 +#: src/slic3r/GUI/GUI_Preview.cpp:310 src/slic3r/GUI/Tab.cpp:1439 +#: src/libslic3r/ExtrusionEntity.cpp:323 src/libslic3r/ExtrusionEntity.cpp:354 msgid "Skirt" msgstr "" -#: src/slic3r/GUI/GUI_Preview.cpp:306 src/libslic3r/ExtrusionEntity.cpp:320 -#: src/libslic3r/PrintConfig.cpp:1998 +#: src/slic3r/GUI/GUI_Preview.cpp:312 src/libslic3r/ExtrusionEntity.cpp:325 +#: src/libslic3r/ExtrusionEntity.cpp:358 src/libslic3r/PrintConfig.cpp:2133 msgid "Support material interface" msgstr "" -#: src/slic3r/GUI/GUI_Preview.cpp:307 src/slic3r/GUI/Tab.cpp:1259 -#: src/libslic3r/ExtrusionEntity.cpp:321 +#: src/slic3r/GUI/GUI_Preview.cpp:313 src/slic3r/GUI/Tab.cpp:1521 +#: src/libslic3r/ExtrusionEntity.cpp:326 src/libslic3r/ExtrusionEntity.cpp:360 msgid "Wipe tower" msgstr "" -#: src/slic3r/GUI/GUI_Preview.cpp:312 src/libslic3r/PrintConfig.cpp:2159 -msgid "Travel" -msgstr "" - -#: src/slic3r/GUI/GUI_Preview.cpp:313 -msgid "Retractions" -msgstr "" - -#: src/slic3r/GUI/GUI_Preview.cpp:314 -msgid "Unretractions" -msgstr "" - -#: src/slic3r/GUI/GUI_Preview.cpp:315 +#: src/slic3r/GUI/GUI_Preview.cpp:338 src/slic3r/GUI/GUI_Preview.cpp:1478 msgid "Shells" msgstr "" -#: src/slic3r/GUI/GUI_Preview.cpp:316 +#: src/slic3r/GUI/GUI_Preview.cpp:339 msgid "Legend" msgstr "" -#: src/slic3r/GUI/Job.hpp:123 +#: src/slic3r/GUI/GUI_Preview.cpp:1479 +msgid "Tool marker" +msgstr "" + +#: src/slic3r/GUI/GUI_Preview.cpp:1480 +msgid "Legend/Estimated printing time" +msgstr "" + +#: src/slic3r/GUI/ImGuiWrapper.cpp:800 src/slic3r/GUI/Search.cpp:464 +msgid "Use for search" +msgstr "" + +#: src/slic3r/GUI/ImGuiWrapper.cpp:801 src/slic3r/GUI/Search.cpp:458 +msgid "Category" +msgstr "" + +#: src/slic3r/GUI/ImGuiWrapper.cpp:803 src/slic3r/GUI/Search.cpp:460 +msgid "Search in English" +msgstr "" + +#: src/slic3r/GUI/Jobs/ArrangeJob.cpp:149 +msgid "Arranging" +msgstr "" + +#: src/slic3r/GUI/Jobs/ArrangeJob.cpp:176 +msgid "Could not arrange model objects! Some geometries may be invalid." +msgstr "" + +#: src/slic3r/GUI/Jobs/ArrangeJob.cpp:182 +msgid "Arranging canceled." +msgstr "" + +#: src/slic3r/GUI/Jobs/ArrangeJob.cpp:183 +msgid "Arranging done." +msgstr "" + +#: src/slic3r/GUI/Jobs/Job.cpp:74 msgid "ERROR: not enough resources to execute a new job." msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:41 src/slic3r/GUI/MainFrame.cpp:855 +#: src/slic3r/GUI/Jobs/RotoptimizeJob.cpp:41 +msgid "Searching for optimal orientation" +msgstr "" + +#: src/slic3r/GUI/Jobs/RotoptimizeJob.cpp:73 +msgid "Orientation search canceled." +msgstr "" + +#: src/slic3r/GUI/Jobs/RotoptimizeJob.cpp:74 +msgid "Orientation found." +msgstr "" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:35 +msgid "Choose SLA archive:" +msgstr "" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:39 +msgid "Import file: " +msgstr "" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:46 +msgid "Import model and profile" +msgstr "" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:47 +msgid "Import profile only" +msgstr "" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:48 +msgid "Import model only" +msgstr "" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:56 +msgid "Quality: " +msgstr "" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:59 +msgid "Accurate" +msgstr "" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:60 +msgid "Balanced" +msgstr "" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:61 +msgid "Quick" +msgstr "" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:135 +msgid "Importing SLA archive" +msgstr "" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:159 +msgid "Importing canceled." +msgstr "" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:160 +msgid "Importing done." +msgstr "" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:208 src/slic3r/GUI/Plater.cpp:2254 +msgid "You cannot load SLA project with a multi-part object on the bed" +msgstr "" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:209 src/slic3r/GUI/Plater.cpp:2255 +#: src/slic3r/GUI/Tab.cpp:3188 +msgid "Please check your object list before preset changing." +msgstr "" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:37 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:39 src/slic3r/GUI/MainFrame.cpp:941 +#: src/slic3r/GUI/MainFrame.cpp:1332 msgid "Keyboard Shortcuts" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:112 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:105 msgid "New project, clear plater" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:113 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:106 msgid "Open project STL/OBJ/AMF/3MF with config, clear plater" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:114 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:107 msgid "Save project (3mf)" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:115 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:108 msgid "Save project as (3mf)" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:116 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:109 msgid "(Re)slice" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:118 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:111 msgid "Import STL/OBJ/AMF/3MF without config, keep plater" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:119 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:112 msgid "Import Config from ini/amf/3mf/gcode" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:120 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:113 msgid "Load Config from ini/amf/3mf/gcode and merge" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:122 src/slic3r/GUI/Plater.cpp:898 -#: src/slic3r/GUI/Plater.cpp:5531 src/libslic3r/PrintConfig.cpp:3375 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:115 src/slic3r/GUI/Plater.cpp:766 +#: src/slic3r/GUI/Plater.cpp:5706 src/libslic3r/PrintConfig.cpp:3546 msgid "Export G-code" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:123 src/slic3r/GUI/Plater.cpp:5532 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:116 src/slic3r/GUI/Plater.cpp:5707 msgid "Send G-code" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:124 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:117 msgid "Export config" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:125 src/slic3r/GUI/Plater.cpp:887 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:118 src/slic3r/GUI/Plater.cpp:755 msgid "Export to SD card / Flash drive" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:126 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:119 msgid "Eject SD card / Flash drive" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:128 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:121 msgid "Select all objects" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:129 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:122 msgid "Deselect all" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:130 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:123 msgid "Delete selected" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:134 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:127 msgid "Copy to clipboard" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:135 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:128 msgid "Paste from clipboard" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:136 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:129 msgid "Reload plater from disk" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:138 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:132 msgid "Select Plater Tab" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:139 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:133 msgid "Select Print Settings Tab" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:140 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:134 msgid "Select Filament Settings Tab" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:141 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:135 msgid "Select Printer Settings Tab" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:142 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:136 msgid "Switch to 3D" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:143 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:137 msgid "Switch to Preview" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:144 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:138 #: src/slic3r/GUI/PrintHostDialogs.cpp:136 msgid "Print host upload queue" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:146 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:140 msgid "Camera view" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:147 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:141 msgid "Show/Hide object/instance labels" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:149 -msgid "Turn On/Off facets' slope rendering" -msgstr "" - -#: src/slic3r/GUI/KBShortcutsDialog.cpp:152 src/slic3r/GUI/Preferences.cpp:10 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:143 src/slic3r/GUI/Preferences.cpp:12 msgid "Preferences" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:154 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:145 msgid "Show keyboard shortcuts list" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:157 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:148 msgid "Commands" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:162 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:153 msgid "Add Instance of the selected object" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:163 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:154 msgid "Remove Instance of the selected object" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:164 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:155 msgid "" "Press to select multiple objects\n" "or move multiple objects with mouse" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:165 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:156 msgid "Press to activate selection rectangle" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:166 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:157 msgid "Press to activate deselection rectangle" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:167 -#: src/slic3r/GUI/KBShortcutsDialog.cpp:209 -#: src/slic3r/GUI/KBShortcutsDialog.cpp:219 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:158 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:205 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:215 msgid "Arrow Up" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:167 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:158 msgid "Move selection 10 mm in positive Y direction" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:168 -#: src/slic3r/GUI/KBShortcutsDialog.cpp:210 -#: src/slic3r/GUI/KBShortcutsDialog.cpp:220 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:159 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:206 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:216 msgid "Arrow Down" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:168 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:159 msgid "Move selection 10 mm in negative Y direction" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:169 -#: src/slic3r/GUI/KBShortcutsDialog.cpp:221 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:160 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:217 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:229 msgid "Arrow Left" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:169 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:160 msgid "Move selection 10 mm in negative X direction" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:170 -#: src/slic3r/GUI/KBShortcutsDialog.cpp:222 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:161 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:218 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:230 msgid "Arrow Right" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:170 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:161 msgid "Move selection 10 mm in positive X direction" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:171 -#: src/slic3r/GUI/KBShortcutsDialog.cpp:172 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:162 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:163 msgid "Any arrow" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:171 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:162 msgid "Movement step set to 1 mm" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:172 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:163 msgid "Movement in camera space" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:173 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:164 msgid "Page Up" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:173 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:164 msgid "Rotate selection 45 degrees CCW" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:174 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:165 msgid "Page Down" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:174 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:165 msgid "Rotate selection 45 degrees CW" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:175 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:166 msgid "Gizmo move" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:176 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:167 msgid "Gizmo scale" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:177 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:168 msgid "Gizmo rotate" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:178 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:169 msgid "Gizmo cut" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:179 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:170 msgid "Gizmo Place face on bed" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:180 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:171 msgid "Gizmo SLA hollow" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:181 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:172 msgid "Gizmo SLA support points" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:182 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:173 msgid "Unselect gizmo or clear selection" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:183 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:174 msgid "Change camera type (perspective, orthographic)" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:184 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:175 msgid "Zoom to Bed" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:185 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:176 msgid "" "Zoom to selected object\n" "or all objects in scene, if none selected" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:186 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:177 msgid "Zoom in" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:187 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:178 msgid "Zoom out" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:189 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:179 +msgid "Switch between Editor/Preview" +msgstr "" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:180 +msgid "Collapse/Expand the sidebar" +msgstr "" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:182 msgid "Show/Hide 3Dconnexion devices settings dialog" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:197 src/slic3r/GUI/MainFrame.cpp:311 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:190 src/slic3r/GUI/MainFrame.cpp:340 +#: src/slic3r/GUI/MainFrame.cpp:352 msgid "Plater" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:200 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:193 #, possible-c-format msgid "" "Press to snap by 5% in Gizmo scale\n" "or to snap by 1mm in Gizmo move" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:201 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:194 msgid "" "Scale selection to fit print volume\n" "in Gizmo scale" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:202 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:195 msgid "Press to activate one direction scaling in Gizmo scale" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:203 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:196 msgid "" "Press to scale (in Gizmo scale) or rotate (in Gizmo rotate)\n" "selected objects around their own center" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:206 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:199 msgid "Gizmos" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:209 -#: src/slic3r/GUI/KBShortcutsDialog.cpp:211 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:205 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:207 msgid "Upper Layer" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:210 -#: src/slic3r/GUI/KBShortcutsDialog.cpp:212 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:206 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:208 msgid "Lower Layer" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:213 -msgid "Show/Hide Legend" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:209 +msgid "Show/Hide Legend/Estimated printing time" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:216 src/slic3r/GUI/Plater.cpp:4129 -#: src/slic3r/GUI/Tab.cpp:2385 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:212 src/slic3r/GUI/Plater.cpp:4052 +#: src/slic3r/GUI/Tab.cpp:2559 msgid "Preview" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:219 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:215 msgid "Move current slider thumb Up" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:220 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:216 msgid "Move current slider thumb Down" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:221 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:217 msgid "Set upper thumb to current slider thumb" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:222 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:218 msgid "Set lower thumb to current slider thumb" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:223 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:219 msgid "Add color change marker for current layer" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:224 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:220 msgid "Delete color change marker for current layer" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:227 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:221 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:222 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:231 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:232 +msgid "" +"Press to speed up 5 times while moving thumb\n" +"with arrow keys or mouse wheel" +msgstr "" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:225 msgid "Layers Slider" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:250 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:229 +msgid "Move current slider thumb Left" +msgstr "" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:230 +msgid "Move current slider thumb Right" +msgstr "" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:235 +msgid "Sequential Slider" +msgstr "" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:259 msgid "Keyboard shortcuts" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:72 +#: src/slic3r/GUI/MainFrame.cpp:63 src/slic3r/GUI/MainFrame.cpp:1262 +msgid "Open new instance" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:63 src/slic3r/GUI/MainFrame.cpp:77 +#: src/slic3r/GUI/MainFrame.cpp:1262 +msgid "Open a new PrusaSlicer instance" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:66 src/slic3r/GUI/MainFrame.cpp:79 +msgid "G-code preview" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:66 src/slic3r/GUI/MainFrame.cpp:1141 +msgid "Open G-code viewer" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:77 src/slic3r/GUI/MainFrame.cpp:1398 +msgid "Open PrusaSlicer" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:79 +msgid "Open new G-code viewer" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:166 msgid "" -" - Remember to check for updates at http://github.com/prusa3d/PrusaSlicer/" +" - Remember to check for updates at https://github.com/prusa3d/PrusaSlicer/" "releases" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:281 +#: src/slic3r/GUI/MainFrame.cpp:535 src/slic3r/GUI/MainFrame.cpp:537 msgid "based on Slic3r" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:533 -msgid "&New Project" +#: src/slic3r/GUI/MainFrame.cpp:909 src/slic3r/GUI/MainFrame.cpp:1308 +msgid "Prusa 3D &Drivers" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:533 -msgid "Start a new project" +#: src/slic3r/GUI/MainFrame.cpp:909 src/slic3r/GUI/MainFrame.cpp:1308 +msgid "Open the Prusa3D drivers download page in your browser" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:536 -msgid "&Open Project" +#: src/slic3r/GUI/MainFrame.cpp:911 src/slic3r/GUI/MainFrame.cpp:1310 +msgid "Software &Releases" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:536 -msgid "Open a project file" +#: src/slic3r/GUI/MainFrame.cpp:911 src/slic3r/GUI/MainFrame.cpp:1310 +msgid "Open the software releases page in your browser" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:541 -msgid "Recent projects" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:550 -msgid "" -"The selected project is no longer available.\n" -"Do you want to remove it from the recent projects list?" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:550 src/slic3r/GUI/MainFrame.cpp:932 -#: src/slic3r/GUI/PrintHostDialogs.cpp:231 -msgid "Error" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:575 -msgid "&Save Project" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:575 -msgid "Save current project file" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:579 src/slic3r/GUI/MainFrame.cpp:581 -msgid "Save Project &as" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:579 src/slic3r/GUI/MainFrame.cpp:581 -msgid "Save current project file as" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:589 -msgid "Import STL/OBJ/AM&F/3MF" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:589 -msgid "Load a model" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:593 -msgid "Import &Config" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:593 -msgid "Load exported configuration file" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:596 -msgid "Import Config from &project" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:596 -msgid "Load configuration from project file" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:600 -msgid "Import Config &Bundle" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:600 -msgid "Load presets from a bundle" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:603 -msgid "&Import" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:606 src/slic3r/GUI/MainFrame.cpp:896 -msgid "Export &G-code" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:606 -msgid "Export current plate as G-code" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:610 src/slic3r/GUI/MainFrame.cpp:897 -msgid "S&end G-code" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:610 -msgid "Send to print current plate as G-code" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:614 -msgid "Export G-code to SD card / Flash drive" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:614 -msgid "Export current plate as G-code to SD card / Flash drive" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:618 -msgid "Export plate as &STL" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:618 -msgid "Export current plate as STL" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:621 -msgid "Export plate as STL &including supports" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:621 -msgid "Export current plate as STL including supports" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:624 -msgid "Export plate as &AMF" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:624 -msgid "Export current plate as AMF" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:628 -msgid "Export &toolpaths as OBJ" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:628 -msgid "Export toolpaths as OBJ" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:632 -msgid "Export &Config" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:632 -msgid "Export current configuration to file" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:635 -msgid "Export Config &Bundle" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:635 -msgid "Export all presets to file" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:638 -msgid "&Export" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:640 -msgid "Ejec&t SD card / Flash drive" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:640 -msgid "Eject SD card / Flash drive after the G-code was exported to it." -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:648 -msgid "Quick Slice" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:648 -msgid "Slice a file into a G-code" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:654 -msgid "Quick Slice and Save As" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:654 -msgid "Slice a file into a G-code, save as" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:660 -msgid "Repeat Last Quick Slice" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:660 -msgid "Repeat last quick slice" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:668 -msgid "(Re)Slice No&w" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:668 -msgid "Start new slicing process" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:672 -msgid "&Repair STL file" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:672 -msgid "Automatically repair an STL file" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:676 -msgid "&Quit" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:676 +#: src/slic3r/GUI/MainFrame.cpp:917 src/slic3r/GUI/MainFrame.cpp:1316 #, possible-c-format -msgid "Quit %s" +msgid "%s &Website" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:701 -msgid "&Select all" +#: src/slic3r/GUI/MainFrame.cpp:918 src/slic3r/GUI/MainFrame.cpp:1317 +#, possible-c-format +msgid "Open the %s website in your browser" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:702 -msgid "Selects all objects" +#: src/slic3r/GUI/MainFrame.cpp:924 src/slic3r/GUI/MainFrame.cpp:1323 +msgid "System &Info" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:704 -msgid "D&eselect all" +#: src/slic3r/GUI/MainFrame.cpp:924 src/slic3r/GUI/MainFrame.cpp:1323 +msgid "Show system information" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:705 -msgid "Deselects all objects" +#: src/slic3r/GUI/MainFrame.cpp:926 src/slic3r/GUI/MainFrame.cpp:1325 +msgid "Show &Configuration Folder" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:708 -msgid "&Delete selected" +#: src/slic3r/GUI/MainFrame.cpp:926 src/slic3r/GUI/MainFrame.cpp:1325 +msgid "Show user configuration folder (datadir)" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:709 -msgid "Deletes the current selection" +#: src/slic3r/GUI/MainFrame.cpp:928 src/slic3r/GUI/MainFrame.cpp:1327 +msgid "Report an I&ssue" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:711 -msgid "Delete &all" +#: src/slic3r/GUI/MainFrame.cpp:928 src/slic3r/GUI/MainFrame.cpp:1327 +#, possible-c-format +msgid "Report an issue on %s" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:712 -msgid "Deletes all objects" +#: src/slic3r/GUI/MainFrame.cpp:933 src/slic3r/GUI/MainFrame.cpp:937 +#: src/slic3r/GUI/MainFrame.cpp:1329 +#, possible-c-format +msgid "&About %s" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:716 -msgid "&Undo" +#: src/slic3r/GUI/MainFrame.cpp:933 src/slic3r/GUI/MainFrame.cpp:937 +#: src/slic3r/GUI/MainFrame.cpp:1329 +msgid "Show about dialog" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:719 -msgid "&Redo" +#: src/slic3r/GUI/MainFrame.cpp:941 src/slic3r/GUI/MainFrame.cpp:1332 +msgid "Show the list of the keyboard shortcuts" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:724 -msgid "&Copy" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:725 -msgid "Copy selection to clipboard" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:727 -msgid "&Paste" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:728 -msgid "Paste clipboard" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:732 -msgid "Re&load from disk" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:733 -msgid "Reload the plater from disk" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:742 -msgid "&Plater Tab" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:742 -msgid "Show the plater" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:750 -msgid "P&rint Settings Tab" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:750 -msgid "Show the print settings" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:753 src/slic3r/GUI/MainFrame.cpp:899 -msgid "&Filament Settings Tab" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:753 -msgid "Show the filament settings" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:757 -msgid "Print&er Settings Tab" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:757 -msgid "Show the printer settings" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:762 -msgid "3&D" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:762 -msgid "Show the 3D editing view" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:765 -msgid "Pre&view" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:765 -msgid "Show the 3D slices preview" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:784 -msgid "Print &Host Upload Queue" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:784 -msgid "Display the Print Host Upload Queue window" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:794 +#: src/slic3r/GUI/MainFrame.cpp:955 src/slic3r/GUI/MainFrame.cpp:1275 msgid "Iso" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:794 +#: src/slic3r/GUI/MainFrame.cpp:955 src/slic3r/GUI/MainFrame.cpp:1275 msgid "Iso View" msgstr "" #. TRN To be shown in the main menu View->Top #. TRN To be shown in Print Settings "Top solid layers" -#: src/slic3r/GUI/MainFrame.cpp:798 src/libslic3r/PrintConfig.cpp:2139 -#: src/libslic3r/PrintConfig.cpp:2148 +#: src/slic3r/GUI/MainFrame.cpp:959 src/slic3r/GUI/MainFrame.cpp:1279 +#: src/libslic3r/PrintConfig.cpp:2275 src/libslic3r/PrintConfig.cpp:2284 msgid "Top" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:798 +#: src/slic3r/GUI/MainFrame.cpp:959 src/slic3r/GUI/MainFrame.cpp:1279 msgid "Top View" msgstr "" #. TRN To be shown in the main menu View->Bottom #. TRN To be shown in Print Settings "Bottom solid layers" #. TRN To be shown in Print Settings "Top solid layers" -#: src/slic3r/GUI/MainFrame.cpp:801 src/libslic3r/PrintConfig.cpp:174 -#: src/libslic3r/PrintConfig.cpp:183 +#: src/slic3r/GUI/MainFrame.cpp:962 src/slic3r/GUI/MainFrame.cpp:1282 +#: src/libslic3r/PrintConfig.cpp:208 src/libslic3r/PrintConfig.cpp:217 msgid "Bottom" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:801 +#: src/slic3r/GUI/MainFrame.cpp:962 src/slic3r/GUI/MainFrame.cpp:1282 msgid "Bottom View" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:803 +#: src/slic3r/GUI/MainFrame.cpp:964 src/slic3r/GUI/MainFrame.cpp:1284 msgid "Front" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:803 +#: src/slic3r/GUI/MainFrame.cpp:964 src/slic3r/GUI/MainFrame.cpp:1284 msgid "Front View" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:805 src/libslic3r/PrintConfig.cpp:1632 +#: src/slic3r/GUI/MainFrame.cpp:966 src/slic3r/GUI/MainFrame.cpp:1286 +#: src/libslic3r/PrintConfig.cpp:1740 msgid "Rear" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:805 +#: src/slic3r/GUI/MainFrame.cpp:966 src/slic3r/GUI/MainFrame.cpp:1286 msgid "Rear View" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:807 +#: src/slic3r/GUI/MainFrame.cpp:968 src/slic3r/GUI/MainFrame.cpp:1288 msgid "Left" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:807 +#: src/slic3r/GUI/MainFrame.cpp:968 src/slic3r/GUI/MainFrame.cpp:1288 msgid "Left View" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:809 +#: src/slic3r/GUI/MainFrame.cpp:970 src/slic3r/GUI/MainFrame.cpp:1290 msgid "Right" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:809 +#: src/slic3r/GUI/MainFrame.cpp:970 src/slic3r/GUI/MainFrame.cpp:1290 msgid "Right View" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:814 src/slic3r/GUI/MainFrame.cpp:822 +#: src/slic3r/GUI/MainFrame.cpp:986 +msgid "&New Project" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:986 +msgid "Start a new project" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:989 +msgid "&Open Project" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:989 +msgid "Open a project file" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:994 +msgid "Recent projects" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1003 +msgid "" +"The selected project is no longer available.\n" +"Do you want to remove it from the recent projects list?" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1003 src/slic3r/GUI/MainFrame.cpp:1486 +#: src/slic3r/GUI/PrintHostDialogs.cpp:231 +msgid "Error" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1028 +msgid "&Save Project" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1028 +msgid "Save current project file" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1032 src/slic3r/GUI/MainFrame.cpp:1034 +msgid "Save Project &as" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1032 src/slic3r/GUI/MainFrame.cpp:1034 +msgid "Save current project file as" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1042 +msgid "Import STL/OBJ/AM&F/3MF" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1042 +msgid "Load a model" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1046 +msgid "Import STL (imperial units)" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1046 +msgid "Load an model saved with imperial units" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1050 +msgid "Import SL1 archive" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1050 +msgid "Load an SL1 output archive" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1055 +msgid "Import &Config" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1055 +msgid "Load exported configuration file" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1058 +msgid "Import Config from &project" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1058 +msgid "Load configuration from project file" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1062 +msgid "Import Config &Bundle" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1062 +msgid "Load presets from a bundle" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1065 +msgid "&Import" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1068 src/slic3r/GUI/MainFrame.cpp:1448 +msgid "Export &G-code" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1068 +msgid "Export current plate as G-code" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1072 src/slic3r/GUI/MainFrame.cpp:1449 +msgid "S&end G-code" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1072 +msgid "Send to print current plate as G-code" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1076 +msgid "Export G-code to SD card / Flash drive" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1076 +msgid "Export current plate as G-code to SD card / Flash drive" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1080 +msgid "Export plate as &STL" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1080 +msgid "Export current plate as STL" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1083 +msgid "Export plate as STL &including supports" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1083 +msgid "Export current plate as STL including supports" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1086 +msgid "Export plate as &AMF" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1086 +msgid "Export current plate as AMF" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1090 src/slic3r/GUI/MainFrame.cpp:1395 +msgid "Export &toolpaths as OBJ" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1090 src/slic3r/GUI/MainFrame.cpp:1395 +msgid "Export toolpaths as OBJ" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1094 +msgid "Export &Config" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1094 +msgid "Export current configuration to file" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1097 +msgid "Export Config &Bundle" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1097 +msgid "Export all presets to file" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1100 +msgid "Export Config Bundle With Physical Printers" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1100 +msgid "Export all presets including physical printers to file" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1103 +msgid "&Export" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1105 +msgid "Ejec&t SD card / Flash drive" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1105 +msgid "Eject SD card / Flash drive after the G-code was exported to it." +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1113 +msgid "Quick Slice" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1113 +msgid "Slice a file into a G-code" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1119 +msgid "Quick Slice and Save As" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1119 +msgid "Slice a file into a G-code, save as" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1125 +msgid "Repeat Last Quick Slice" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1125 +msgid "Repeat last quick slice" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1133 +msgid "(Re)Slice No&w" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1133 +msgid "Start new slicing process" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1137 +msgid "&Repair STL file" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1137 +msgid "Automatically repair an STL file" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1141 +msgid "&G-code preview" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1144 src/slic3r/GUI/MainFrame.cpp:1402 +msgid "&Quit" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1144 src/slic3r/GUI/MainFrame.cpp:1402 +#, possible-c-format +msgid "Quit %s" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1171 +msgid "&Select all" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1172 +msgid "Selects all objects" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1174 +msgid "D&eselect all" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1175 +msgid "Deselects all objects" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1178 +msgid "&Delete selected" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1179 +msgid "Deletes the current selection" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1181 +msgid "Delete &all" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1182 +msgid "Deletes all objects" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1186 +msgid "&Undo" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1189 +msgid "&Redo" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1194 +msgid "&Copy" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1195 +msgid "Copy selection to clipboard" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1197 +msgid "&Paste" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1198 +msgid "Paste clipboard" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1202 +msgid "Re&load from disk" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1203 +msgid "Reload the plater from disk" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1207 +msgid "Searc&h" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1208 +msgid "Find option" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1216 +msgid "&Plater Tab" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1216 +msgid "Show the plater" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1221 +msgid "P&rint Settings Tab" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1221 +msgid "Show the print settings" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1224 src/slic3r/GUI/MainFrame.cpp:1451 +msgid "&Filament Settings Tab" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1224 +msgid "Show the filament settings" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1228 +msgid "Print&er Settings Tab" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1228 +msgid "Show the printer settings" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1234 +msgid "3&D" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1234 +msgid "Show the 3D editing view" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1237 +msgid "Pre&view" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1237 +msgid "Show the 3D slices preview" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1258 +msgid "Print &Host Upload Queue" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1258 +msgid "Display the Print Host Upload Queue window" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1294 msgid "Show &labels" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:814 src/slic3r/GUI/MainFrame.cpp:822 +#: src/slic3r/GUI/MainFrame.cpp:1294 msgid "Show object/instance labels in 3D scene" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:817 -msgid "Show &slope" +#: src/slic3r/GUI/MainFrame.cpp:1297 +msgid "&Collapse sidebar" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:817 -msgid "Objects coloring using faces' slope" +#: src/slic3r/GUI/MainFrame.cpp:1297 src/slic3r/GUI/Plater.cpp:2144 +msgid "Collapse sidebar" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:820 -msgid "&Options" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:831 -msgid "Prusa 3D &Drivers" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:831 -msgid "Open the Prusa3D drivers download page in your browser" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:833 -msgid "Software &Releases" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:833 -msgid "Open the software releases page in your browser" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:839 -#, possible-c-format -msgid "%s &Website" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:840 -#, possible-c-format -msgid "Open the %s website in your browser" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:846 -msgid "System &Info" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:846 -msgid "Show system information" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:848 -msgid "Show &Configuration Folder" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:848 -msgid "Show user configuration folder (datadir)" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:850 -msgid "Report an I&ssue" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:850 -#, possible-c-format -msgid "Report an issue on %s" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:852 -#, possible-c-format -msgid "&About %s" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:852 -msgid "Show about dialog" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:855 -msgid "Show the list of the keyboard shortcuts" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:868 +#: src/slic3r/GUI/MainFrame.cpp:1347 src/slic3r/GUI/MainFrame.cpp:1357 +#: src/slic3r/GUI/MainFrame.cpp:1417 msgid "&File" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:869 +#: src/slic3r/GUI/MainFrame.cpp:1348 src/slic3r/GUI/MainFrame.cpp:1358 msgid "&Edit" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:870 +#: src/slic3r/GUI/MainFrame.cpp:1349 src/slic3r/GUI/MainFrame.cpp:1359 msgid "&Window" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:871 +#: src/slic3r/GUI/MainFrame.cpp:1350 src/slic3r/GUI/MainFrame.cpp:1360 +#: src/slic3r/GUI/MainFrame.cpp:1418 msgid "&View" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:874 +#: src/slic3r/GUI/MainFrame.cpp:1353 src/slic3r/GUI/MainFrame.cpp:1363 +#: src/slic3r/GUI/MainFrame.cpp:1423 msgid "&Help" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:896 +#: src/slic3r/GUI/MainFrame.cpp:1391 +msgid "&Open G-code" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1391 +msgid "Open a G-code file" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1398 +msgid "Open &PrusaSlicer" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1448 msgid "E&xport" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:897 +#: src/slic3r/GUI/MainFrame.cpp:1449 msgid "S&end to print" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:899 +#: src/slic3r/GUI/MainFrame.cpp:1451 msgid "Mate&rial Settings Tab" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:920 +#: src/slic3r/GUI/MainFrame.cpp:1474 msgid "Choose a file to slice (STL/OBJ/AMF/3MF/PRUSA):" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:931 +#: src/slic3r/GUI/MainFrame.cpp:1485 msgid "No previously sliced file." msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:937 +#: src/slic3r/GUI/MainFrame.cpp:1491 msgid "Previously sliced file (" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:937 +#: src/slic3r/GUI/MainFrame.cpp:1491 msgid ") not found." msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:938 +#: src/slic3r/GUI/MainFrame.cpp:1492 msgid "File Not Found" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:973 +#: src/slic3r/GUI/MainFrame.cpp:1527 #, possible-c-format msgid "Save %s file as:" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:973 +#: src/slic3r/GUI/MainFrame.cpp:1527 msgid "SVG" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:973 +#: src/slic3r/GUI/MainFrame.cpp:1527 msgid "G-code" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:985 +#: src/slic3r/GUI/MainFrame.cpp:1539 msgid "Save zip file as:" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:994 src/slic3r/GUI/Plater.cpp:3121 -#: src/slic3r/GUI/Plater.cpp:5122 src/slic3r/GUI/Tab.cpp:1289 -#: src/slic3r/GUI/Tab.cpp:3731 +#: src/slic3r/GUI/MainFrame.cpp:1548 src/slic3r/GUI/Plater.cpp:2921 +#: src/slic3r/GUI/Plater.cpp:5234 src/slic3r/GUI/Tab.cpp:1551 +#: src/slic3r/GUI/Tab.cpp:4081 msgid "Slicing" msgstr "" #. TRN "Processing input_file_basename" -#: src/slic3r/GUI/MainFrame.cpp:996 +#: src/slic3r/GUI/MainFrame.cpp:1550 #, possible-c-format msgid "Processing %s" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:1019 +#: src/slic3r/GUI/MainFrame.cpp:1573 msgid " was successfully sliced." msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:1021 +#: src/slic3r/GUI/MainFrame.cpp:1575 msgid "Slicing Done!" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:1036 +#: src/slic3r/GUI/MainFrame.cpp:1590 msgid "Select the STL file to repair:" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:1046 +#: src/slic3r/GUI/MainFrame.cpp:1600 msgid "Save OBJ file (less prone to coordinate errors than STL) as:" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:1058 +#: src/slic3r/GUI/MainFrame.cpp:1612 msgid "Your file was repaired." msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:1058 src/libslic3r/PrintConfig.cpp:3469 +#: src/slic3r/GUI/MainFrame.cpp:1612 src/libslic3r/PrintConfig.cpp:3646 msgid "Repair" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:1072 +#: src/slic3r/GUI/MainFrame.cpp:1626 msgid "Save configuration as:" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:1091 src/slic3r/GUI/MainFrame.cpp:1153 +#: src/slic3r/GUI/MainFrame.cpp:1645 src/slic3r/GUI/MainFrame.cpp:1707 msgid "Select configuration to load:" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:1127 +#: src/slic3r/GUI/MainFrame.cpp:1681 msgid "Save presets bundle as:" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:1174 +#: src/slic3r/GUI/MainFrame.cpp:1728 #, possible-c-format msgid "%d presets successfully imported." msgstr "" @@ -3962,32 +4679,36 @@ msgstr "" msgid "3Dconnexion settings" msgstr "" -#: src/slic3r/GUI/Mouse3DController.cpp:278 +#: src/slic3r/GUI/Mouse3DController.cpp:274 msgid "Device:" msgstr "" -#: src/slic3r/GUI/Mouse3DController.cpp:285 +#: src/slic3r/GUI/Mouse3DController.cpp:279 msgid "Speed:" msgstr "" -#: src/slic3r/GUI/Mouse3DController.cpp:289 -#: src/slic3r/GUI/Mouse3DController.cpp:312 +#: src/slic3r/GUI/Mouse3DController.cpp:282 +#: src/slic3r/GUI/Mouse3DController.cpp:303 msgid "Translation" msgstr "" -#: src/slic3r/GUI/Mouse3DController.cpp:301 -#: src/slic3r/GUI/Mouse3DController.cpp:312 +#: src/slic3r/GUI/Mouse3DController.cpp:294 +#: src/slic3r/GUI/Mouse3DController.cpp:303 msgid "Zoom" msgstr "" -#: src/slic3r/GUI/Mouse3DController.cpp:308 +#: src/slic3r/GUI/Mouse3DController.cpp:300 msgid "Deadzone:" msgstr "" -#: src/slic3r/GUI/Mouse3DController.cpp:325 +#: src/slic3r/GUI/Mouse3DController.cpp:315 msgid "Options:" msgstr "" +#: src/slic3r/GUI/Mouse3DController.cpp:318 +msgid "Swap Y/Z axes" +msgstr "" + #: src/slic3r/GUI/MsgDialog.cpp:73 #, possible-c-format msgid "%s error" @@ -3998,6 +4719,60 @@ msgstr "" msgid "%s has encountered an error" msgstr "" +#: src/slic3r/GUI/NotificationManager.hpp:317 +msgid "Exporting finished." +msgstr "" + +#: src/slic3r/GUI/NotificationManager.hpp:317 +msgid "Eject drive." +msgstr "" + +#: src/slic3r/GUI/NotificationManager.hpp:318 +msgid "3D Mouse disconnected." +msgstr "" + +#: src/slic3r/GUI/NotificationManager.hpp:321 +msgid "Configuration update is available." +msgstr "" + +#: src/slic3r/GUI/NotificationManager.hpp:321 +msgid "See more." +msgstr "" + +#: src/slic3r/GUI/NotificationManager.hpp:322 +msgid "New version is available." +msgstr "" + +#: src/slic3r/GUI/NotificationManager.hpp:322 +msgid "See Releases page." +msgstr "" + +#: src/slic3r/GUI/NotificationManager.cpp:305 +#: src/slic3r/GUI/NotificationManager.cpp:315 +msgid "More" +msgstr "" + +#: src/slic3r/GUI/NotificationManager.cpp:631 +#: src/slic3r/GUI/NotificationManager.cpp:748 +msgid "Export G-Code." +msgstr "" + +#: src/slic3r/GUI/NotificationManager.cpp:667 +#: src/slic3r/GUI/NotificationManager.cpp:683 +#: src/slic3r/GUI/NotificationManager.cpp:694 +msgid "ERROR:" +msgstr "" + +#: src/slic3r/GUI/NotificationManager.cpp:672 +#: src/slic3r/GUI/NotificationManager.cpp:687 +#: src/slic3r/GUI/NotificationManager.cpp:702 +msgid "WARNING:" +msgstr "" + +#: src/slic3r/GUI/NotificationManager.cpp:751 +msgid "Slicing finished." +msgstr "" + #: src/slic3r/GUI/ObjectDataViewModel.cpp:58 msgid "Instances" msgstr "" @@ -4008,8 +4783,8 @@ msgstr "" msgid "Instance %d" msgstr "" -#: src/slic3r/GUI/ObjectDataViewModel.cpp:69 src/slic3r/GUI/Tab.cpp:3585 -#: src/slic3r/GUI/Tab.cpp:3667 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:69 src/slic3r/GUI/Tab.cpp:3928 +#: src/slic3r/GUI/Tab.cpp:4010 msgid "Layers" msgstr "" @@ -4017,649 +4792,769 @@ msgstr "" msgid "Range" msgstr "" -#: src/slic3r/GUI/OptionsGroup.cpp:274 +#: src/slic3r/GUI/OpenGLManager.cpp:259 +#, possible-c-format +msgid "" +"PrusaSlicer requires OpenGL 2.0 capable graphics driver to run correctly, \n" +"while OpenGL version %s, render %s, vendor %s was detected." +msgstr "" + +#: src/slic3r/GUI/OpenGLManager.cpp:262 +msgid "You may need to update your graphics card driver." +msgstr "" + +#: src/slic3r/GUI/OpenGLManager.cpp:265 +msgid "" +"As a workaround, you may run PrusaSlicer with a software rendered 3D " +"graphics by running prusa-slicer.exe with the --sw_renderer parameter." +msgstr "" + +#: src/slic3r/GUI/OpenGLManager.cpp:267 +msgid "Unsupported OpenGL version" +msgstr "" + +#: src/slic3r/GUI/OpenGLManager.cpp:275 +#, possible-c-format +msgid "" +"Unable to load the following shaders:\n" +"%s" +msgstr "" + +#: src/slic3r/GUI/OpenGLManager.cpp:276 +msgid "Error loading shaders" +msgstr "" + +#: src/slic3r/GUI/OptionsGroup.cpp:293 msgctxt "Layers" msgid "Top" msgstr "" -#: src/slic3r/GUI/OptionsGroup.cpp:274 +#: src/slic3r/GUI/OptionsGroup.cpp:293 msgctxt "Layers" msgid "Bottom" msgstr "" -#: src/slic3r/GUI/Plater.cpp:163 +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:55 +msgid "Delete this preset from this printer device" +msgstr "" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:85 +msgid "This printer will be shown in the presets list as" +msgstr "" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:159 +msgid "Physical Printer" +msgstr "" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:165 +msgid "Type here the name of your printer device" +msgstr "" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:176 +msgid "Descriptive name for the printer device" +msgstr "" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:180 +msgid "Add preset for this printer device" +msgstr "" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:209 src/slic3r/GUI/Tab.cpp:2024 +msgid "Print Host upload" +msgstr "" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:284 +msgid "Test" +msgstr "" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:289 +msgid "Could not get a valid Printer Host reference" +msgstr "" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:295 +msgid "Success!" +msgstr "" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:319 +msgid "" +"HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" +"signed certificate." +msgstr "" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:329 +msgid "Certificate files (*.crt, *.pem)|*.crt;*.pem|All files|*.*" +msgstr "" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:330 +msgid "Open CA certificate file" +msgstr "" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:358 +#: src/libslic3r/PrintConfig.cpp:113 +msgid "HTTPS CA File" +msgstr "" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:359 +#, possible-c-format +msgid "" +"On this system, %s uses HTTPS certificates from the system Certificate Store " +"or Keychain." +msgstr "" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:360 +msgid "" +"To use a custom CA file, please import your CA file into Certificate Store / " +"Keychain." +msgstr "" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:464 +msgid "The supplied name is empty. It can't be saved." +msgstr "" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:468 +msgid "You should to change a name of your printer device. It can't be saved." +msgstr "" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:476 +msgid "Printer with name \"%1%\" already exists." +msgstr "" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:477 +msgid "Replace?" +msgstr "" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:500 +msgid "" +"Next printer preset(s) is(are) duplicated:%1%Should I add it(they) just once " +"for the printer \"%2%\" and close the Editing Dialog?" +msgstr "" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:546 +msgid "It's not possible to delete last related preset for the printer." +msgstr "" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:547 +msgid "Infornation" +msgstr "" + +#: src/slic3r/GUI/Plater.cpp:167 msgid "Volume" msgstr "" -#: src/slic3r/GUI/Plater.cpp:164 +#: src/slic3r/GUI/Plater.cpp:168 msgid "Facets" msgstr "" -#: src/slic3r/GUI/Plater.cpp:165 +#: src/slic3r/GUI/Plater.cpp:169 msgid "Materials" msgstr "" -#: src/slic3r/GUI/Plater.cpp:168 +#: src/slic3r/GUI/Plater.cpp:172 msgid "Manifold" msgstr "" -#: src/slic3r/GUI/Plater.cpp:218 +#: src/slic3r/GUI/Plater.cpp:222 msgid "Sliced Info" msgstr "" -#: src/slic3r/GUI/Plater.cpp:237 src/slic3r/GUI/Plater.cpp:1236 +#: src/slic3r/GUI/Plater.cpp:241 src/slic3r/GUI/Plater.cpp:1141 msgid "Used Filament (m)" msgstr "" -#: src/slic3r/GUI/Plater.cpp:238 +#: src/slic3r/GUI/Plater.cpp:242 src/slic3r/GUI/Plater.cpp:1153 msgid "Used Filament (mm³)" msgstr "" -#: src/slic3r/GUI/Plater.cpp:239 +#: src/slic3r/GUI/Plater.cpp:243 msgid "Used Filament (g)" msgstr "" -#: src/slic3r/GUI/Plater.cpp:240 +#: src/slic3r/GUI/Plater.cpp:244 msgid "Used Material (unit)" msgstr "" -#: src/slic3r/GUI/Plater.cpp:241 +#: src/slic3r/GUI/Plater.cpp:245 msgid "Cost (money)" msgstr "" -#: src/slic3r/GUI/Plater.cpp:242 src/slic3r/GUI/Plater.cpp:1223 -#: src/slic3r/GUI/Plater.cpp:1265 -msgid "Estimated printing time" -msgstr "" - -#: src/slic3r/GUI/Plater.cpp:243 +#: src/slic3r/GUI/Plater.cpp:247 msgid "Number of tool changes" msgstr "" -#: src/slic3r/GUI/Plater.cpp:350 -msgid "Click to edit preset" -msgstr "" - -#: src/slic3r/GUI/Plater.cpp:505 +#: src/slic3r/GUI/Plater.cpp:364 msgid "Select what kind of support do you need" msgstr "" -#: src/slic3r/GUI/Plater.cpp:507 src/libslic3r/PrintConfig.cpp:1908 -#: src/libslic3r/PrintConfig.cpp:2691 +#: src/slic3r/GUI/Plater.cpp:366 src/libslic3r/PrintConfig.cpp:2043 +#: src/libslic3r/PrintConfig.cpp:2838 msgid "Support on build plate only" msgstr "" -#: src/slic3r/GUI/Plater.cpp:508 src/slic3r/GUI/Plater.cpp:631 +#: src/slic3r/GUI/Plater.cpp:367 src/slic3r/GUI/Plater.cpp:490 msgid "For support enforcers only" msgstr "" -#: src/slic3r/GUI/Plater.cpp:509 +#: src/slic3r/GUI/Plater.cpp:368 msgid "Everywhere" msgstr "" -#: src/slic3r/GUI/Plater.cpp:541 src/slic3r/GUI/Tab.cpp:1185 +#: src/slic3r/GUI/Plater.cpp:400 src/slic3r/GUI/Tab.cpp:1446 msgid "Brim" msgstr "" -#: src/slic3r/GUI/Plater.cpp:543 +#: src/slic3r/GUI/Plater.cpp:402 msgid "" "This flag enables the brim that will be printed around each object on the " "first layer." msgstr "" -#: src/slic3r/GUI/Plater.cpp:551 +#: src/slic3r/GUI/Plater.cpp:410 msgid "Purging volumes" msgstr "" -#: src/slic3r/GUI/Plater.cpp:645 +#: src/slic3r/GUI/Plater.cpp:504 msgid "Select what kind of pad do you need" msgstr "" -#: src/slic3r/GUI/Plater.cpp:647 +#: src/slic3r/GUI/Plater.cpp:506 msgid "Below object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:648 +#: src/slic3r/GUI/Plater.cpp:507 msgid "Around object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:822 +#: src/slic3r/GUI/Plater.cpp:690 msgid "Print settings" msgstr "" -#: src/slic3r/GUI/Plater.cpp:823 src/slic3r/GUI/Tab.cpp:1491 -#: src/slic3r/GUI/Tab.cpp:1492 +#: src/slic3r/GUI/Plater.cpp:691 src/slic3r/GUI/Tab.cpp:1770 +#: src/slic3r/GUI/Tab.cpp:1771 msgid "Filament" msgstr "" -#: src/slic3r/GUI/Plater.cpp:824 +#: src/slic3r/GUI/Plater.cpp:692 msgid "SLA print settings" msgstr "" -#: src/slic3r/GUI/Plater.cpp:825 src/slic3r/GUI/Preset.cpp:1566 +#: src/slic3r/GUI/Plater.cpp:693 src/libslic3r/Preset.cpp:1303 msgid "SLA material" msgstr "" -#: src/slic3r/GUI/Plater.cpp:826 +#: src/slic3r/GUI/Plater.cpp:694 msgid "Printer" msgstr "" -#: src/slic3r/GUI/Plater.cpp:885 src/slic3r/GUI/Plater.cpp:5532 +#: src/slic3r/GUI/Plater.cpp:753 src/slic3r/GUI/Plater.cpp:5707 msgid "Send to printer" msgstr "" -#: src/slic3r/GUI/Plater.cpp:886 +#: src/slic3r/GUI/Plater.cpp:754 msgid "Remove device" msgstr "" -#: src/slic3r/GUI/Plater.cpp:899 src/slic3r/GUI/Plater.cpp:3121 -#: src/slic3r/GUI/Plater.cpp:5125 +#: src/slic3r/GUI/Plater.cpp:767 src/slic3r/GUI/Plater.cpp:2921 +#: src/slic3r/GUI/Plater.cpp:5237 msgid "Slice now" msgstr "" -#: src/slic3r/GUI/Plater.cpp:1049 +#: src/slic3r/GUI/Plater.cpp:916 msgid "Hold Shift to Slice & Export G-code" msgstr "" -#: src/slic3r/GUI/Plater.cpp:1159 +#: src/slic3r/GUI/Plater.cpp:1061 #, possible-c-format msgid "%d (%d shells)" msgstr "" -#: src/slic3r/GUI/Plater.cpp:1164 +#: src/slic3r/GUI/Plater.cpp:1066 #, possible-c-format msgid "Auto-repaired (%d errors)" msgstr "" -#: src/slic3r/GUI/Plater.cpp:1167 +#: src/slic3r/GUI/Plater.cpp:1069 #, possible-c-format msgid "" "%d degenerate facets, %d edges fixed, %d facets removed, %d facets added, %d " "facets reversed, %d backwards edges" msgstr "" -#: src/slic3r/GUI/Plater.cpp:1177 +#: src/slic3r/GUI/Plater.cpp:1079 msgid "Yes" msgstr "" -#: src/slic3r/GUI/Plater.cpp:1198 +#: src/slic3r/GUI/Plater.cpp:1100 msgid "Used Material (ml)" msgstr "" -#: src/slic3r/GUI/Plater.cpp:1201 +#: src/slic3r/GUI/Plater.cpp:1103 msgid "object(s)" msgstr "" -#: src/slic3r/GUI/Plater.cpp:1201 +#: src/slic3r/GUI/Plater.cpp:1103 msgid "supports and pad" msgstr "" -#: src/slic3r/GUI/Plater.cpp:1238 src/slic3r/GUI/Plater.cpp:1252 +#: src/slic3r/GUI/Plater.cpp:1141 +msgid "Used Filament (in)" +msgstr "" + +#: src/slic3r/GUI/Plater.cpp:1143 src/slic3r/GUI/Plater.cpp:1160 msgid "objects" msgstr "" -#: src/slic3r/GUI/Plater.cpp:1238 src/slic3r/GUI/Plater.cpp:1252 +#: src/slic3r/GUI/Plater.cpp:1143 src/slic3r/GUI/Plater.cpp:1160 msgid "wipe tower" msgstr "" -#: src/slic3r/GUI/Plater.cpp:1250 src/libslic3r/PrintConfig.cpp:760 -#: src/libslic3r/PrintConfig.cpp:2517 src/libslic3r/PrintConfig.cpp:2518 +#: src/slic3r/GUI/Plater.cpp:1153 +msgid "Used Filament (in³)" +msgstr "" + +#: src/slic3r/GUI/Plater.cpp:1158 src/libslic3r/PrintConfig.cpp:796 +#: src/libslic3r/PrintConfig.cpp:2653 src/libslic3r/PrintConfig.cpp:2654 msgid "Cost" msgstr "" -#: src/slic3r/GUI/Plater.cpp:1267 src/libslic3r/PrintConfig.cpp:582 -msgid "Color" -msgstr "" - -#: src/slic3r/GUI/Plater.cpp:1268 -msgid "Pause" -msgstr "" - -#: src/slic3r/GUI/Plater.cpp:1293 +#: src/slic3r/GUI/Plater.cpp:1177 src/slic3r/GUI/Plater.cpp:1224 msgid "normal mode" msgstr "" -#: src/slic3r/GUI/Plater.cpp:1298 +#: src/slic3r/GUI/Plater.cpp:1187 src/slic3r/GUI/Plater.cpp:1235 msgid "stealth mode" msgstr "" -#: src/slic3r/GUI/Plater.cpp:1402 -msgid "Load File" +#: src/slic3r/GUI/Plater.cpp:1198 src/libslic3r/PrintConfig.cpp:618 +msgid "Color" +msgstr "" + +#: src/slic3r/GUI/Plater.cpp:1405 +msgid "You can open only one .gcode file at a time." msgstr "" #: src/slic3r/GUI/Plater.cpp:1406 +msgid "Drag and drop G-code file" +msgstr "" + +#: src/slic3r/GUI/Plater.cpp:1436 +msgid "Load File" +msgstr "" + +#: src/slic3r/GUI/Plater.cpp:1440 msgid "Load Files" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2207 +#: src/slic3r/GUI/Plater.cpp:1555 +msgid "Optimize Rotation" +msgstr "" + +#: src/slic3r/GUI/Plater.cpp:1561 +msgid "Import SLA archive" +msgstr "" + +#: src/slic3r/GUI/Plater.cpp:2031 #, possible-c-format msgid "" "Unmounting successful. The device %s(%s) can now be safely removed from the " "computer." msgstr "" -#: src/slic3r/GUI/Plater.cpp:2210 +#: src/slic3r/GUI/Plater.cpp:2034 #, possible-c-format msgid "Ejecting of device %s(%s) has failed." msgstr "" -#: src/slic3r/GUI/Plater.cpp:2223 +#: src/slic3r/GUI/Plater.cpp:2056 msgid "New Project" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2337 +#: src/slic3r/GUI/Plater.cpp:2143 +msgid "Expand sidebar" +msgstr "" + +#: src/slic3r/GUI/Plater.cpp:2216 msgid "Loading" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2347 +#: src/slic3r/GUI/Plater.cpp:2226 +msgid "Loading file" +msgstr "" + +#: src/slic3r/GUI/Plater.cpp:2309 #, possible-c-format -msgid "Processing input file %s" +msgid "" +"Some object(s) in file %s looks like saved in inches.\n" +"Should I consider them as a saved in inches and convert them?" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2375 -msgid "You cannot load SLA project with a multi-part object on the bed" +#: src/slic3r/GUI/Plater.cpp:2311 +msgid "Saved in inches object detected" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2376 src/slic3r/GUI/Tab.cpp:2958 -msgid "Please check your object list before preset changing." -msgstr "" - -#: src/slic3r/GUI/Plater.cpp:2421 +#: src/slic3r/GUI/Plater.cpp:2319 msgid "" "This file contains several objects positioned at multiple heights.\n" "Instead of considering them as multiple objects, should I consider\n" "this file as a single object having multiple parts?" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2424 src/slic3r/GUI/Plater.cpp:2477 +#: src/slic3r/GUI/Plater.cpp:2322 src/slic3r/GUI/Plater.cpp:2375 msgid "Multi-part object detected" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2431 +#: src/slic3r/GUI/Plater.cpp:2329 msgid "" "This file cannot be loaded in a simple mode. Do you want to switch to an " "advanced mode?" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2432 +#: src/slic3r/GUI/Plater.cpp:2330 msgid "Detected advanced data" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2454 +#: src/slic3r/GUI/Plater.cpp:2352 #, possible-c-format msgid "" "You can't to add the object(s) from %s because of one or some of them " "is(are) multi-part" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2474 +#: src/slic3r/GUI/Plater.cpp:2372 msgid "" "Multiple objects were loaded for a multi-material printer.\n" "Instead of considering them as multiple objects, should I consider\n" "these files to represent a single object having multiple parts?" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2490 +#: src/slic3r/GUI/Plater.cpp:2388 msgid "Loaded" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2592 +#: src/slic3r/GUI/Plater.cpp:2490 msgid "" "Your object appears to be too large, so it was automatically scaled down to " "fit your print bed." msgstr "" -#: src/slic3r/GUI/Plater.cpp:2593 +#: src/slic3r/GUI/Plater.cpp:2491 msgid "Object too large?" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2655 +#: src/slic3r/GUI/Plater.cpp:2553 msgid "Export STL file:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2662 +#: src/slic3r/GUI/Plater.cpp:2560 msgid "Export AMF file:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2668 +#: src/slic3r/GUI/Plater.cpp:2566 msgid "Save file as:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2674 +#: src/slic3r/GUI/Plater.cpp:2572 msgid "Export OBJ file:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2773 +#: src/slic3r/GUI/Plater.cpp:2673 msgid "Delete Object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2784 +#: src/slic3r/GUI/Plater.cpp:2684 msgid "Reset Project" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2823 -msgid "Optimize Rotation" -msgstr "" - -#: src/slic3r/GUI/Plater.cpp:2869 -msgid "Arranging" -msgstr "" - -#: src/slic3r/GUI/Plater.cpp:2896 -msgid "Could not arrange model objects! Some geometries may be invalid." -msgstr "" - -#: src/slic3r/GUI/Plater.cpp:2902 -msgid "Arranging canceled." -msgstr "" - -#: src/slic3r/GUI/Plater.cpp:2903 -msgid "Arranging done." -msgstr "" - -#: src/slic3r/GUI/Plater.cpp:2919 -msgid "Searching for optimal orientation" -msgstr "" - -#: src/slic3r/GUI/Plater.cpp:2952 -msgid "Orientation search canceled." -msgstr "" - -#: src/slic3r/GUI/Plater.cpp:2953 -msgid "Orientation found." -msgstr "" - -#: src/slic3r/GUI/Plater.cpp:2970 +#: src/slic3r/GUI/Plater.cpp:2763 msgid "" "The selected object can't be split because it contains more than one volume/" "material." msgstr "" -#: src/slic3r/GUI/Plater.cpp:2981 +#: src/slic3r/GUI/Plater.cpp:2774 msgid "Split to Objects" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3106 +#: src/slic3r/GUI/Plater.cpp:2906 src/slic3r/GUI/Plater.cpp:3583 msgid "Invalid data" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3115 +#: src/slic3r/GUI/Plater.cpp:2915 msgid "Ready to slice" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3153 src/slic3r/GUI/PrintHostDialogs.cpp:232 +#: src/slic3r/GUI/Plater.cpp:2953 src/slic3r/GUI/PrintHostDialogs.cpp:232 msgid "Cancelling" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3170 +#: src/slic3r/GUI/Plater.cpp:2972 msgid "Another export job is currently running." msgstr "" -#: src/slic3r/GUI/Plater.cpp:3286 +#: src/slic3r/GUI/Plater.cpp:3089 msgid "Please select the file to reload" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3321 +#: src/slic3r/GUI/Plater.cpp:3124 msgid "It is not allowed to change the file to reload" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3321 +#: src/slic3r/GUI/Plater.cpp:3124 msgid "Do you want to retry" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3339 +#: src/slic3r/GUI/Plater.cpp:3142 msgid "Reload from:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3428 +#: src/slic3r/GUI/Plater.cpp:3233 msgid "Unable to reload:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3433 +#: src/slic3r/GUI/Plater.cpp:3238 msgid "Error during reload" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3452 +#: src/slic3r/GUI/Plater.cpp:3257 msgid "Reload all from disk" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3473 +#: src/slic3r/GUI/Plater.cpp:3278 msgid "Fix Throught NetFabb" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3672 -msgid "Export failed" +#: src/slic3r/GUI/Plater.cpp:3543 +msgid "There are active warnings concerning sliced models:\n" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3682 src/slic3r/GUI/PrintHostDialogs.cpp:233 +#: src/slic3r/GUI/Plater.cpp:3554 +msgid "generated warnings" +msgstr "" + +#: src/slic3r/GUI/Plater.cpp:3589 src/slic3r/GUI/PrintHostDialogs.cpp:233 msgid "Cancelled" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3935 src/slic3r/GUI/Plater.cpp:3957 +#: src/slic3r/GUI/Plater.cpp:3849 src/slic3r/GUI/Plater.cpp:3871 msgid "Remove the selected object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3944 +#: src/slic3r/GUI/Plater.cpp:3858 msgid "Add one more instance of the selected object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3946 +#: src/slic3r/GUI/Plater.cpp:3860 msgid "Remove one instance of the selected object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3948 +#: src/slic3r/GUI/Plater.cpp:3862 msgid "Set number of instances" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3948 +#: src/slic3r/GUI/Plater.cpp:3862 msgid "Change the number of instances of the selected object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3967 +#: src/slic3r/GUI/Plater.cpp:3881 msgid "Reload the selected object from disk" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3970 +#: src/slic3r/GUI/Plater.cpp:3884 msgid "Export the selected object as STL file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3999 +#: src/slic3r/GUI/Plater.cpp:3915 msgid "Along X axis" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3999 +#: src/slic3r/GUI/Plater.cpp:3915 msgid "Mirror the selected object along the X axis" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4001 +#: src/slic3r/GUI/Plater.cpp:3917 msgid "Along Y axis" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4001 +#: src/slic3r/GUI/Plater.cpp:3917 msgid "Mirror the selected object along the Y axis" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4003 +#: src/slic3r/GUI/Plater.cpp:3919 msgid "Along Z axis" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4003 +#: src/slic3r/GUI/Plater.cpp:3919 msgid "Mirror the selected object along the Z axis" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4006 +#: src/slic3r/GUI/Plater.cpp:3922 msgid "Mirror" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4006 +#: src/slic3r/GUI/Plater.cpp:3922 msgid "Mirror the selected object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4018 +#: src/slic3r/GUI/Plater.cpp:3934 msgid "To objects" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4018 src/slic3r/GUI/Plater.cpp:4038 +#: src/slic3r/GUI/Plater.cpp:3934 src/slic3r/GUI/Plater.cpp:3954 msgid "Split the selected object into individual objects" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4020 +#: src/slic3r/GUI/Plater.cpp:3936 msgid "To parts" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4020 src/slic3r/GUI/Plater.cpp:4052 +#: src/slic3r/GUI/Plater.cpp:3936 src/slic3r/GUI/Plater.cpp:3972 msgid "Split the selected object into individual sub-parts" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4023 src/slic3r/GUI/Plater.cpp:4038 -#: src/slic3r/GUI/Plater.cpp:4052 src/libslic3r/PrintConfig.cpp:3493 +#: src/slic3r/GUI/Plater.cpp:3939 src/slic3r/GUI/Plater.cpp:3954 +#: src/slic3r/GUI/Plater.cpp:3972 src/libslic3r/PrintConfig.cpp:3670 msgid "Split" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4023 +#: src/slic3r/GUI/Plater.cpp:3939 msgid "Split the selected object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4044 -msgid "Optimize orientation" -msgstr "" - -#: src/slic3r/GUI/Plater.cpp:4044 +#: src/slic3r/GUI/Plater.cpp:3962 msgid "Optimize the rotation of the object for better print results." msgstr "" -#: src/slic3r/GUI/Plater.cpp:4121 +#: src/slic3r/GUI/Plater.cpp:4044 msgid "3D editor view" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4428 +#: src/slic3r/GUI/Plater.cpp:4423 msgid "" "%1% printer was active at the time the target Undo / Redo snapshot was " "taken. Switching to %1% printer requires reloading of %1% presets." msgstr "" -#: src/slic3r/GUI/Plater.cpp:4604 +#: src/slic3r/GUI/Plater.cpp:4627 msgid "Load Project" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4632 +#: src/slic3r/GUI/Plater.cpp:4655 msgid "Import Object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4636 +#: src/slic3r/GUI/Plater.cpp:4659 msgid "Import Objects" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4705 +#: src/slic3r/GUI/Plater.cpp:4774 msgid "All objects will be removed, continue?" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4713 +#: src/slic3r/GUI/Plater.cpp:4782 msgid "Delete Selected Objects" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4721 +#: src/slic3r/GUI/Plater.cpp:4790 msgid "Increase Instances" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4756 +#: src/slic3r/GUI/Plater.cpp:4824 msgid "Decrease Instances" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4787 +#: src/slic3r/GUI/Plater.cpp:4855 msgid "Enter the number of copies:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4788 +#: src/slic3r/GUI/Plater.cpp:4856 msgid "Copies of the selected object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4792 +#: src/slic3r/GUI/Plater.cpp:4860 #, possible-c-format msgid "Set numbers of copies to %d" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4822 +#: src/slic3r/GUI/Plater.cpp:4921 msgid "Cut by Plane" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4873 +#: src/slic3r/GUI/Plater.cpp:4975 msgid "Save G-code file as:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4873 +#: src/slic3r/GUI/Plater.cpp:4975 msgid "Save SL1 file as:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5008 +#: src/slic3r/GUI/Plater.cpp:5118 #, possible-c-format msgid "STL file exported to %s" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5025 +#: src/slic3r/GUI/Plater.cpp:5135 #, possible-c-format msgid "AMF file exported to %s" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5028 +#: src/slic3r/GUI/Plater.cpp:5138 #, possible-c-format msgid "Error exporting AMF file %s" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5057 +#: src/slic3r/GUI/Plater.cpp:5167 #, possible-c-format msgid "3MF file exported to %s" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5062 +#: src/slic3r/GUI/Plater.cpp:5172 #, possible-c-format msgid "Error exporting 3MF file %s" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5531 +#: src/slic3r/GUI/Plater.cpp:5706 msgid "Export" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5617 +#: src/slic3r/GUI/Plater.cpp:5803 msgid "Paste From Clipboard" msgstr "" -#: src/slic3r/GUI/Preferences.cpp:22 src/slic3r/GUI/Tab.cpp:1857 -#: src/slic3r/GUI/Tab.cpp:2069 +#: src/slic3r/GUI/Preferences.cpp:24 src/slic3r/GUI/Tab.cpp:2058 +#: src/slic3r/GUI/Tab.cpp:2240 src/slic3r/GUI/Tab.cpp:2348 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1066 msgid "General" msgstr "" -#: src/slic3r/GUI/Preferences.cpp:39 +#: src/slic3r/GUI/Preferences.cpp:52 msgid "Remember output directory" msgstr "" -#: src/slic3r/GUI/Preferences.cpp:41 +#: src/slic3r/GUI/Preferences.cpp:54 msgid "" "If this is enabled, Slic3r will prompt the last output directory instead of " "the one containing the input files." msgstr "" -#: src/slic3r/GUI/Preferences.cpp:47 +#: src/slic3r/GUI/Preferences.cpp:64 msgid "Auto-center parts" msgstr "" -#: src/slic3r/GUI/Preferences.cpp:49 +#: src/slic3r/GUI/Preferences.cpp:66 msgid "" "If this is enabled, Slic3r will auto-center objects around the print bed " "center." msgstr "" -#: src/slic3r/GUI/Preferences.cpp:55 +#: src/slic3r/GUI/Preferences.cpp:72 msgid "Background processing" msgstr "" -#: src/slic3r/GUI/Preferences.cpp:57 +#: src/slic3r/GUI/Preferences.cpp:74 msgid "" "If this is enabled, Slic3r will pre-process objects as soon as they're " "loaded in order to save time when exporting G-code." msgstr "" -#: src/slic3r/GUI/Preferences.cpp:66 +#: src/slic3r/GUI/Preferences.cpp:83 msgid "" "If enabled, PrusaSlicer will check for the new versions of itself online. " "When a new version becomes available a notification is displayed at the next " @@ -4667,17 +5562,17 @@ msgid "" "notification mechanisms, no automatic installation is done." msgstr "" -#: src/slic3r/GUI/Preferences.cpp:72 +#: src/slic3r/GUI/Preferences.cpp:89 msgid "Export sources full pathnames to 3mf and amf" msgstr "" -#: src/slic3r/GUI/Preferences.cpp:74 +#: src/slic3r/GUI/Preferences.cpp:91 msgid "" "If enabled, allows the Reload from disk command to automatically find and " "load the files when invoked." msgstr "" -#: src/slic3r/GUI/Preferences.cpp:82 +#: src/slic3r/GUI/Preferences.cpp:99 msgid "" "If enabled, Slic3r downloads updates of built-in system presets in the " "background. These updates are downloaded into a separate temporary location. " @@ -4685,263 +5580,383 @@ msgid "" "startup." msgstr "" -#: src/slic3r/GUI/Preferences.cpp:87 +#: src/slic3r/GUI/Preferences.cpp:104 msgid "Suppress \" - default - \" presets" msgstr "" -#: src/slic3r/GUI/Preferences.cpp:89 +#: src/slic3r/GUI/Preferences.cpp:106 msgid "" "Suppress \" - default - \" presets in the Print / Filament / Printer " "selections once there are any other valid presets available." msgstr "" -#: src/slic3r/GUI/Preferences.cpp:95 +#: src/slic3r/GUI/Preferences.cpp:112 msgid "Show incompatible print and filament presets" msgstr "" -#: src/slic3r/GUI/Preferences.cpp:97 +#: src/slic3r/GUI/Preferences.cpp:114 msgid "" "When checked, the print and filament presets are shown in the preset editor " "even if they are marked as incompatible with the active printer" msgstr "" -#: src/slic3r/GUI/Preferences.cpp:104 +#: src/slic3r/GUI/Preferences.cpp:120 src/libslic3r/PrintConfig.cpp:3697 +msgid "Single Instance" +msgstr "" + +#: src/slic3r/GUI/Preferences.cpp:123 +msgid "" +"On OSX there is always only one instance of app running by default. However " +"it is allowed to run multiple instances of same app from the command line. " +"In such case this settings will allow only one instance." +msgstr "" + +#: src/slic3r/GUI/Preferences.cpp:125 +msgid "" +"If this is enabled, when staring PrusaSlicer and another instance of same " +"PrusaSlicer is running, that instance will be reactivated instead." +msgstr "" + +#: src/slic3r/GUI/Preferences.cpp:135 msgid "Use Retina resolution for the 3D scene" msgstr "" -#: src/slic3r/GUI/Preferences.cpp:106 +#: src/slic3r/GUI/Preferences.cpp:137 msgid "" "If enabled, the 3D scene will be rendered in Retina resolution. If you are " "experiencing 3D performance problems, disabling this option may help." msgstr "" -#: src/slic3r/GUI/Preferences.cpp:113 +#: src/slic3r/GUI/Preferences.cpp:154 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:659 +msgid "Ask for unsaved changes when closing application" +msgstr "" + +#: src/slic3r/GUI/Preferences.cpp:156 +msgid "Always ask for unsaved changes when closing application" +msgstr "" + +#: src/slic3r/GUI/Preferences.cpp:161 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:660 +msgid "Ask for unsaved changes when selecting new preset" +msgstr "" + +#: src/slic3r/GUI/Preferences.cpp:163 +msgid "Always ask for unsaved changes when selecting new preset" +msgstr "" + +#: src/slic3r/GUI/Preferences.cpp:169 src/slic3r/GUI/Preferences.cpp:171 +msgid "Show splash screen" +msgstr "" + +#: src/slic3r/GUI/Preferences.cpp:178 msgid "Camera" msgstr "" -#: src/slic3r/GUI/Preferences.cpp:119 +#: src/slic3r/GUI/Preferences.cpp:184 msgid "Use perspective camera" msgstr "" -#: src/slic3r/GUI/Preferences.cpp:121 +#: src/slic3r/GUI/Preferences.cpp:186 msgid "" "If enabled, use perspective camera. If not enabled, use orthographic camera." msgstr "" -#: src/slic3r/GUI/Preferences.cpp:126 +#: src/slic3r/GUI/Preferences.cpp:191 msgid "Use free camera" msgstr "" -#: src/slic3r/GUI/Preferences.cpp:128 +#: src/slic3r/GUI/Preferences.cpp:193 msgid "If enabled, use free camera. If not enabled, use constrained camera." msgstr "" -#: src/slic3r/GUI/Preferences.cpp:133 +#: src/slic3r/GUI/Preferences.cpp:200 msgid "GUI" msgstr "" -#: src/slic3r/GUI/Preferences.cpp:143 +#: src/slic3r/GUI/Preferences.cpp:213 +msgid "Show sidebar collapse/expand button" +msgstr "" + +#: src/slic3r/GUI/Preferences.cpp:215 +msgid "" +"If enabled, the button for the collapse sidebar will be appeared in top " +"right corner of the 3D Scene" +msgstr "" + +#: src/slic3r/GUI/Preferences.cpp:220 msgid "Use custom size for toolbar icons" msgstr "" -#: src/slic3r/GUI/Preferences.cpp:145 +#: src/slic3r/GUI/Preferences.cpp:222 msgid "If enabled, you can change size of toolbar icons manually." msgstr "" -#: src/slic3r/GUI/Preferences.cpp:172 +#: src/slic3r/GUI/Preferences.cpp:230 +msgid "Sequential slider applied only to top layer" +msgstr "" + +#: src/slic3r/GUI/Preferences.cpp:232 +msgid "" +"If enabled, changes made using the sequential slider, in preview, apply only " +"to gcode top layer, if disabled, changes made using the sequential slider, " +"in preview, apply to the whole gcode." +msgstr "" + +#: src/slic3r/GUI/Preferences.cpp:255 +msgid "Render" +msgstr "" + +#: src/slic3r/GUI/Preferences.cpp:261 +msgid "Use environment map" +msgstr "" + +#: src/slic3r/GUI/Preferences.cpp:263 +msgid "If enabled, renders object using the environment map." +msgstr "" + +#: src/slic3r/GUI/Preferences.cpp:299 #, possible-c-format msgid "You need to restart %s to make the changes effective." msgstr "" -#: src/slic3r/GUI/Preferences.cpp:222 +#: src/slic3r/GUI/Preferences.cpp:376 msgid "Icon size in a respect to the default size" msgstr "" -#: src/slic3r/GUI/Preferences.cpp:237 +#: src/slic3r/GUI/Preferences.cpp:391 msgid "Select toolbar icon size in respect to the default one." msgstr "" -#: src/slic3r/GUI/Preset.cpp:250 -msgid "modified" +#: src/slic3r/GUI/Preferences.cpp:422 +msgid "Old regular layout with the tab bar" msgstr "" -#: src/slic3r/GUI/Preset.cpp:1151 src/slic3r/GUI/Preset.cpp:1206 -#: src/slic3r/GUI/Preset.cpp:1284 src/slic3r/GUI/Preset.cpp:1326 -#: src/slic3r/GUI/PresetBundle.cpp:1599 src/slic3r/GUI/PresetBundle.cpp:1697 +#: src/slic3r/GUI/Preferences.cpp:423 +msgid "New layout without the tab bar on the plater" +msgstr "" + +#: src/slic3r/GUI/Preferences.cpp:424 +msgid "Settings will be shown in the non-modal dialog" +msgstr "" + +#: src/slic3r/GUI/Preferences.cpp:433 +msgid "Settings layout mode" +msgstr "" + +#: src/slic3r/GUI/PresetComboBoxes.cpp:188 +#: src/slic3r/GUI/PresetComboBoxes.cpp:226 +#: src/slic3r/GUI/PresetComboBoxes.cpp:724 +#: src/slic3r/GUI/PresetComboBoxes.cpp:774 +#: src/slic3r/GUI/PresetComboBoxes.cpp:886 +#: src/slic3r/GUI/PresetComboBoxes.cpp:930 msgid "System presets" msgstr "" -#: src/slic3r/GUI/Preset.cpp:1210 src/slic3r/GUI/Preset.cpp:1330 -#: src/slic3r/GUI/PresetBundle.cpp:1702 +#: src/slic3r/GUI/PresetComboBoxes.cpp:230 +#: src/slic3r/GUI/PresetComboBoxes.cpp:778 +#: src/slic3r/GUI/PresetComboBoxes.cpp:934 msgid "User presets" msgstr "" -#: src/slic3r/GUI/Preset.cpp:1243 +#: src/slic3r/GUI/PresetComboBoxes.cpp:241 +msgid "Incompatible presets" +msgstr "" + +#: src/slic3r/GUI/PresetComboBoxes.cpp:566 +msgid "Click to edit preset" +msgstr "" + +#: src/slic3r/GUI/PresetComboBoxes.cpp:622 +#: src/slic3r/GUI/PresetComboBoxes.cpp:669 +msgid "Add/Remove presets" +msgstr "" + +#: src/slic3r/GUI/PresetComboBoxes.cpp:627 +#: src/slic3r/GUI/PresetComboBoxes.cpp:674 +msgid "Add physical printer" +msgstr "" + +#: src/slic3r/GUI/PresetComboBoxes.cpp:641 +msgid "Edit preset" +msgstr "" + +#: src/slic3r/GUI/PresetComboBoxes.cpp:645 +msgid "Edit physical printer" +msgstr "" + +#: src/slic3r/GUI/PresetComboBoxes.cpp:652 +msgid "Delete physical printer" +msgstr "" + +#: src/slic3r/GUI/PresetComboBoxes.cpp:658 +msgid "Are you sure you want to delete \"%1%\" printer?" +msgstr "" + +#: src/slic3r/GUI/PresetComboBoxes.cpp:659 +msgid "Delete Physical Printer" +msgstr "" + +#: src/slic3r/GUI/PresetComboBoxes.cpp:789 +#: src/slic3r/GUI/PresetComboBoxes.cpp:948 +msgid "Physical printers" +msgstr "" + +#: src/slic3r/GUI/PresetComboBoxes.cpp:813 msgid "Add/Remove materials" msgstr "" -#: src/slic3r/GUI/Preset.cpp:1245 +#: src/slic3r/GUI/PresetComboBoxes.cpp:815 +#: src/slic3r/GUI/PresetComboBoxes.cpp:972 msgid "Add/Remove printers" msgstr "" -#: src/slic3r/GUI/Preset.cpp:1564 -msgid "filament" -msgstr "" - -#: src/slic3r/GUI/Preset.cpp:1565 -msgid "SLA print" -msgstr "" - -#: src/slic3r/GUI/PresetBundle.cpp:1729 -msgid "Add/Remove filaments" -msgstr "" - -#: src/slic3r/GUI/PresetHints.cpp:29 +#: src/slic3r/GUI/PresetHints.cpp:28 msgid "" "If estimated layer time is below ~%1%s, fan will run at %2%%% and print " "speed will be reduced so that no less than %3%s are spent on that layer " "(however, speed will never be reduced below %4%mm/s)." msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:36 +#: src/slic3r/GUI/PresetHints.cpp:35 msgid "" "If estimated layer time is greater, but still below ~%1%s, fan will run at a " "proportionally decreasing speed between %2%%% and %3%%%." msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:40 +#: src/slic3r/GUI/PresetHints.cpp:39 msgid "During the other layers, fan" msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:42 +#: src/slic3r/GUI/PresetHints.cpp:41 msgid "Fan" msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:48 +#: src/slic3r/GUI/PresetHints.cpp:47 msgid "will always run at %1%%%" msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:51 +#: src/slic3r/GUI/PresetHints.cpp:50 msgid "except for the first %1% layers." msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:53 +#: src/slic3r/GUI/PresetHints.cpp:52 msgid "except for the first layer." msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:55 +#: src/slic3r/GUI/PresetHints.cpp:54 msgid "will be turned off." msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:156 +#: src/slic3r/GUI/PresetHints.cpp:155 msgid "external perimeters" msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:165 +#: src/slic3r/GUI/PresetHints.cpp:164 msgid "perimeters" msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:174 +#: src/slic3r/GUI/PresetHints.cpp:173 msgid "infill" msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:184 +#: src/slic3r/GUI/PresetHints.cpp:183 msgid "solid infill" msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:192 +#: src/slic3r/GUI/PresetHints.cpp:191 msgid "top solid infill" msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:203 +#: src/slic3r/GUI/PresetHints.cpp:202 msgid "support" msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:213 +#: src/slic3r/GUI/PresetHints.cpp:212 msgid "support interface" msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:219 +#: src/slic3r/GUI/PresetHints.cpp:218 msgid "First layer volumetric" msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:219 +#: src/slic3r/GUI/PresetHints.cpp:218 msgid "Bridging volumetric" msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:219 +#: src/slic3r/GUI/PresetHints.cpp:218 msgid "Volumetric" msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:220 +#: src/slic3r/GUI/PresetHints.cpp:219 msgid "flow rate is maximized" msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:223 +#: src/slic3r/GUI/PresetHints.cpp:222 msgid "by the print profile maximum" msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:224 +#: src/slic3r/GUI/PresetHints.cpp:223 msgid "when printing" msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:225 +#: src/slic3r/GUI/PresetHints.cpp:224 msgid "with a volumetric rate" msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:229 +#: src/slic3r/GUI/PresetHints.cpp:228 #, possible-c-format msgid "%3.2f mm³/s at filament speed %3.2f mm/s." msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:247 +#: src/slic3r/GUI/PresetHints.cpp:246 msgid "" "Recommended object thin wall thickness: Not available due to invalid layer " "height." msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:263 +#: src/slic3r/GUI/PresetHints.cpp:262 #, possible-c-format msgid "Recommended object thin wall thickness for layer height %.2f and" msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:270 +#: src/slic3r/GUI/PresetHints.cpp:269 #, possible-c-format msgid "%d lines: %.2f mm" msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:274 +#: src/slic3r/GUI/PresetHints.cpp:273 msgid "" "Recommended object thin wall thickness: Not available due to excessively " "small extrusion width." msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:304 +#: src/slic3r/GUI/PresetHints.cpp:302 msgid "" "Top / bottom shell thickness hint: Not available due to invalid layer height." msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:317 +#: src/slic3r/GUI/PresetHints.cpp:315 msgid "Top shell is %1% mm thick for layer height %2% mm." msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:320 +#: src/slic3r/GUI/PresetHints.cpp:318 msgid "Minimum top shell thickness is %1% mm." msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:323 +#: src/slic3r/GUI/PresetHints.cpp:321 msgid "Top is open." msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:336 +#: src/slic3r/GUI/PresetHints.cpp:334 msgid "Bottom shell is %1% mm thick for layer height %2% mm." msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:339 +#: src/slic3r/GUI/PresetHints.cpp:337 msgid "Minimum bottom shell thickness is %1% mm." msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:342 +#: src/slic3r/GUI/PresetHints.cpp:340 msgid "Bottom is open." msgstr "" @@ -4961,35 +5976,35 @@ msgstr "" msgid "Use forward slashes ( / ) as a directory separator if needed." msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:149 +#: src/slic3r/GUI/PrintHostDialogs.cpp:147 msgid "ID" msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:150 +#: src/slic3r/GUI/PrintHostDialogs.cpp:148 msgid "Progress" msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:151 +#: src/slic3r/GUI/PrintHostDialogs.cpp:149 msgid "Status" msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:152 +#: src/slic3r/GUI/PrintHostDialogs.cpp:150 msgid "Host" msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:153 +#: src/slic3r/GUI/PrintHostDialogs.cpp:151 msgid "Filename" msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:154 +#: src/slic3r/GUI/PrintHostDialogs.cpp:152 msgid "Error Message" msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:157 +#: src/slic3r/GUI/PrintHostDialogs.cpp:155 msgid "Cancel selected" msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:159 +#: src/slic3r/GUI/PrintHostDialogs.cpp:157 msgid "Show error message" msgstr "" @@ -5014,17 +6029,13 @@ msgstr "" msgid "NO RAMMING AT ALL" msgstr "" -#: src/slic3r/GUI/RammingChart.cpp:76 -msgid "Time" -msgstr "" - #: src/slic3r/GUI/RammingChart.cpp:76 src/slic3r/GUI/WipeTowerDialog.cpp:83 -#: src/libslic3r/PrintConfig.cpp:644 src/libslic3r/PrintConfig.cpp:688 -#: src/libslic3r/PrintConfig.cpp:703 src/libslic3r/PrintConfig.cpp:2415 -#: src/libslic3r/PrintConfig.cpp:2424 src/libslic3r/PrintConfig.cpp:2534 -#: src/libslic3r/PrintConfig.cpp:2542 src/libslic3r/PrintConfig.cpp:2550 -#: src/libslic3r/PrintConfig.cpp:2557 src/libslic3r/PrintConfig.cpp:2565 -#: src/libslic3r/PrintConfig.cpp:2573 +#: src/libslic3r/PrintConfig.cpp:680 src/libslic3r/PrintConfig.cpp:724 +#: src/libslic3r/PrintConfig.cpp:739 src/libslic3r/PrintConfig.cpp:2551 +#: src/libslic3r/PrintConfig.cpp:2560 src/libslic3r/PrintConfig.cpp:2670 +#: src/libslic3r/PrintConfig.cpp:2678 src/libslic3r/PrintConfig.cpp:2686 +#: src/libslic3r/PrintConfig.cpp:2693 src/libslic3r/PrintConfig.cpp:2701 +#: src/libslic3r/PrintConfig.cpp:2709 msgid "s" msgstr "" @@ -5032,441 +6043,484 @@ msgstr "" msgid "Volumetric speed" msgstr "" -#: src/slic3r/GUI/RammingChart.cpp:81 src/libslic3r/PrintConfig.cpp:601 -#: src/libslic3r/PrintConfig.cpp:1250 +#: src/slic3r/GUI/RammingChart.cpp:81 src/libslic3r/PrintConfig.cpp:637 +#: src/libslic3r/PrintConfig.cpp:1358 msgid "mm³/s" msgstr "" -#: src/slic3r/GUI/Selection.cpp:147 +#: src/slic3r/GUI/SavePresetDialog.cpp:72 +#, possible-c-format +msgid "Save %s as:" +msgstr "" + +#: src/slic3r/GUI/SavePresetDialog.cpp:125 +msgid "the following suffix is not allowed:" +msgstr "" + +#: src/slic3r/GUI/SavePresetDialog.cpp:131 +msgid "The supplied name is not available." +msgstr "" + +#: src/slic3r/GUI/SavePresetDialog.cpp:137 +msgid "Cannot overwrite a system profile." +msgstr "" + +#: src/slic3r/GUI/SavePresetDialog.cpp:142 +msgid "Cannot overwrite an external profile." +msgstr "" + +#: src/slic3r/GUI/SavePresetDialog.cpp:148 +msgid "Preset with name \"%1%\" already exists." +msgstr "" + +#: src/slic3r/GUI/SavePresetDialog.cpp:150 +msgid "And selected preset is imcopatible with selected printer." +msgstr "" + +#: src/slic3r/GUI/SavePresetDialog.cpp:151 +msgid "Note: This preset will be replaced after saving" +msgstr "" + +#: src/slic3r/GUI/SavePresetDialog.cpp:156 +msgid "The empty name is not available." +msgstr "" + +#: src/slic3r/GUI/SavePresetDialog.cpp:190 +#: src/slic3r/GUI/SavePresetDialog.cpp:196 +msgid "Save preset" +msgstr "" + +#: src/slic3r/GUI/SavePresetDialog.cpp:219 +msgctxt "PresetName" +msgid "Copy" +msgstr "" + +#: src/slic3r/GUI/SavePresetDialog.cpp:277 +msgid "" +"You have selected physical printer \"%1%\" \n" +"with related printer preset \"%2%\"" +msgstr "" + +#: src/slic3r/GUI/SavePresetDialog.cpp:310 +msgid "What would you like to do with \"%1%\" preset after saving?" +msgstr "" + +#: src/slic3r/GUI/SavePresetDialog.cpp:313 +msgid "Change \"%1%\" to \"%2%\" for this physical printer \"%3%\"" +msgstr "" + +#: src/slic3r/GUI/SavePresetDialog.cpp:314 +msgid "Add \"%1%\" as a next preset for the the physical printer \"%2%\"" +msgstr "" + +#: src/slic3r/GUI/SavePresetDialog.cpp:315 +msgid "Just switch to \"%1%\" preset" +msgstr "" + +#: src/slic3r/GUI/Search.cpp:77 src/slic3r/GUI/Tab.cpp:2378 +msgid "Stealth" +msgstr "" + +#: src/slic3r/GUI/Search.cpp:77 src/slic3r/GUI/Tab.cpp:2372 +msgid "Normal" +msgstr "" + +#: src/slic3r/GUI/Selection.cpp:191 msgid "Selection-Add" msgstr "" -#: src/slic3r/GUI/Selection.cpp:188 +#: src/slic3r/GUI/Selection.cpp:232 msgid "Selection-Remove" msgstr "" -#: src/slic3r/GUI/Selection.cpp:220 +#: src/slic3r/GUI/Selection.cpp:264 msgid "Selection-Add Object" msgstr "" -#: src/slic3r/GUI/Selection.cpp:239 +#: src/slic3r/GUI/Selection.cpp:283 msgid "Selection-Remove Object" msgstr "" -#: src/slic3r/GUI/Selection.cpp:257 +#: src/slic3r/GUI/Selection.cpp:301 msgid "Selection-Add Instance" msgstr "" -#: src/slic3r/GUI/Selection.cpp:276 +#: src/slic3r/GUI/Selection.cpp:320 msgid "Selection-Remove Instance" msgstr "" -#: src/slic3r/GUI/Selection.cpp:377 +#: src/slic3r/GUI/Selection.cpp:421 msgid "Selection-Add All" msgstr "" -#: src/slic3r/GUI/Selection.cpp:403 +#: src/slic3r/GUI/Selection.cpp:447 msgid "Selection-Remove All" msgstr "" -#: src/slic3r/GUI/Selection.cpp:946 +#: src/slic3r/GUI/Selection.cpp:988 msgid "Scale To Fit" msgstr "" -#: src/slic3r/GUI/Selection.cpp:1483 +#: src/slic3r/GUI/Selection.cpp:1515 msgid "Set Printable Instance" msgstr "" -#: src/slic3r/GUI/Selection.cpp:1483 +#: src/slic3r/GUI/Selection.cpp:1515 msgid "Set Unprintable Instance" msgstr "" -#: src/slic3r/GUI/SysInfoDialog.cpp:78 +#: src/slic3r/GUI/SysInfoDialog.cpp:90 src/slic3r/GUI/SysInfoDialog.cpp:92 msgid "System Information" msgstr "" -#: src/slic3r/GUI/SysInfoDialog.cpp:158 +#: src/slic3r/GUI/SysInfoDialog.cpp:177 msgid "Copy to Clipboard" msgstr "" -#: src/slic3r/GUI/Tab.cpp:51 src/libslic3r/PrintConfig.cpp:265 +#: src/slic3r/GUI/Tab.cpp:101 src/libslic3r/PrintConfig.cpp:299 msgid "Compatible printers" msgstr "" -#: src/slic3r/GUI/Tab.cpp:52 +#: src/slic3r/GUI/Tab.cpp:102 msgid "Select the printers this profile is compatible with." msgstr "" -#: src/slic3r/GUI/Tab.cpp:57 src/libslic3r/PrintConfig.cpp:280 +#: src/slic3r/GUI/Tab.cpp:107 src/libslic3r/PrintConfig.cpp:314 msgid "Compatible print profiles" msgstr "" -#: src/slic3r/GUI/Tab.cpp:58 +#: src/slic3r/GUI/Tab.cpp:108 msgid "Select the print profiles this profile is compatible with." msgstr "" #. TRN "Save current Settings" -#: src/slic3r/GUI/Tab.cpp:134 +#: src/slic3r/GUI/Tab.cpp:203 #, possible-c-format msgid "Save current %s" msgstr "" -#: src/slic3r/GUI/Tab.cpp:135 +#: src/slic3r/GUI/Tab.cpp:204 msgid "Delete this preset" msgstr "" -#: src/slic3r/GUI/Tab.cpp:140 +#: src/slic3r/GUI/Tab.cpp:210 msgid "" "Hover the cursor over buttons to find more information \n" "or click this button." msgstr "" -#: src/slic3r/GUI/Tab.cpp:248 -msgid "Add a new printer" +#: src/slic3r/GUI/Tab.cpp:214 +msgid "Click to start a search or use %1% shortcut" msgstr "" -#: src/slic3r/GUI/Tab.cpp:970 +#: src/slic3r/GUI/Tab.cpp:1224 msgid "Detach from system preset" msgstr "" -#: src/slic3r/GUI/Tab.cpp:982 +#: src/slic3r/GUI/Tab.cpp:1237 msgid "" "A copy of the current system preset will be created, which will be detached " "from the system preset." msgstr "" -#: src/slic3r/GUI/Tab.cpp:983 +#: src/slic3r/GUI/Tab.cpp:1238 msgid "" "The current custom preset will be detached from the parent system preset." msgstr "" -#: src/slic3r/GUI/Tab.cpp:986 +#: src/slic3r/GUI/Tab.cpp:1241 msgid "Modifications to the current profile will be saved." msgstr "" -#: src/slic3r/GUI/Tab.cpp:989 +#: src/slic3r/GUI/Tab.cpp:1244 msgid "" "This action is not revertable.\n" "Do you want to proceed?" msgstr "" -#: src/slic3r/GUI/Tab.cpp:991 +#: src/slic3r/GUI/Tab.cpp:1246 msgid "Detach preset" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1017 +#: src/slic3r/GUI/Tab.cpp:1272 msgid "This is a default preset." msgstr "" -#: src/slic3r/GUI/Tab.cpp:1019 +#: src/slic3r/GUI/Tab.cpp:1274 msgid "This is a system preset." msgstr "" -#: src/slic3r/GUI/Tab.cpp:1021 +#: src/slic3r/GUI/Tab.cpp:1276 msgid "Current preset is inherited from the default preset." msgstr "" -#: src/slic3r/GUI/Tab.cpp:1023 +#: src/slic3r/GUI/Tab.cpp:1278 msgid "Current preset is inherited from" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1027 +#: src/slic3r/GUI/Tab.cpp:1282 msgid "It can't be deleted or modified." msgstr "" -#: src/slic3r/GUI/Tab.cpp:1028 +#: src/slic3r/GUI/Tab.cpp:1283 msgid "" "Any modifications should be saved as a new preset inherited from this one." msgstr "" -#: src/slic3r/GUI/Tab.cpp:1029 +#: src/slic3r/GUI/Tab.cpp:1284 msgid "To do that please specify a new name for the preset." msgstr "" -#: src/slic3r/GUI/Tab.cpp:1033 +#: src/slic3r/GUI/Tab.cpp:1288 msgid "Additional information:" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1039 +#: src/slic3r/GUI/Tab.cpp:1294 msgid "printer model" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1047 +#: src/slic3r/GUI/Tab.cpp:1302 msgid "default print profile" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1050 +#: src/slic3r/GUI/Tab.cpp:1305 msgid "default filament profile" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1064 +#: src/slic3r/GUI/Tab.cpp:1319 msgid "default SLA material profile" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1068 +#: src/slic3r/GUI/Tab.cpp:1323 msgid "default SLA print profile" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1076 +#: src/slic3r/GUI/Tab.cpp:1331 msgid "full profile name" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1077 +#: src/slic3r/GUI/Tab.cpp:1332 msgid "symbolic profile name" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1115 src/slic3r/GUI/Tab.cpp:3665 +#: src/slic3r/GUI/Tab.cpp:1370 src/slic3r/GUI/Tab.cpp:4008 msgid "Layers and perimeters" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1120 +#: src/slic3r/GUI/Tab.cpp:1375 msgid "Vertical shells" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1131 +#: src/slic3r/GUI/Tab.cpp:1386 msgid "Horizontal shells" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1132 src/libslic3r/PrintConfig.cpp:1787 +#: src/slic3r/GUI/Tab.cpp:1387 src/libslic3r/PrintConfig.cpp:1895 msgid "Solid layers" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1136 +#: src/slic3r/GUI/Tab.cpp:1391 msgid "Minimum shell thickness" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1147 +#: src/slic3r/GUI/Tab.cpp:1402 msgid "Quality (slower slicing)" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1165 +#: src/slic3r/GUI/Tab.cpp:1426 msgid "Reducing printing time" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1177 +#: src/slic3r/GUI/Tab.cpp:1438 msgid "Skirt and brim" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1195 +#: src/slic3r/GUI/Tab.cpp:1456 msgid "Raft" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1199 +#: src/slic3r/GUI/Tab.cpp:1460 msgid "Options for support material and raft" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1214 +#: src/slic3r/GUI/Tab.cpp:1475 msgid "Speed for print moves" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1226 +#: src/slic3r/GUI/Tab.cpp:1488 msgid "Speed for non-print moves" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1229 +#: src/slic3r/GUI/Tab.cpp:1491 msgid "Modifiers" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1232 +#: src/slic3r/GUI/Tab.cpp:1494 msgid "Acceleration control (advanced)" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1239 +#: src/slic3r/GUI/Tab.cpp:1501 msgid "Autospeed (advanced)" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1247 +#: src/slic3r/GUI/Tab.cpp:1509 msgid "Multiple Extruders" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1255 +#: src/slic3r/GUI/Tab.cpp:1517 msgid "Ooze prevention" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1273 +#: src/slic3r/GUI/Tab.cpp:1535 msgid "Extrusion width" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1283 +#: src/slic3r/GUI/Tab.cpp:1545 msgid "Overlap" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1286 +#: src/slic3r/GUI/Tab.cpp:1548 msgid "Flow" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1295 +#: src/slic3r/GUI/Tab.cpp:1557 msgid "Other" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1298 src/slic3r/GUI/Tab.cpp:3734 +#: src/slic3r/GUI/Tab.cpp:1560 src/slic3r/GUI/Tab.cpp:4084 msgid "Output options" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1299 +#: src/slic3r/GUI/Tab.cpp:1561 msgid "Sequential printing" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1301 +#: src/slic3r/GUI/Tab.cpp:1563 msgid "Extruder clearance (mm)" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1306 src/slic3r/GUI/Tab.cpp:3735 +#: src/slic3r/GUI/Tab.cpp:1568 src/slic3r/GUI/Tab.cpp:4085 msgid "Output file" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1313 src/libslic3r/PrintConfig.cpp:1453 +#: src/slic3r/GUI/Tab.cpp:1575 src/libslic3r/PrintConfig.cpp:1561 msgid "Post-processing scripts" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1319 src/slic3r/GUI/Tab.cpp:1320 -#: src/slic3r/GUI/Tab.cpp:1606 src/slic3r/GUI/Tab.cpp:1607 -#: src/slic3r/GUI/Tab.cpp:2045 src/slic3r/GUI/Tab.cpp:2046 -#: src/slic3r/GUI/Tab.cpp:2127 src/slic3r/GUI/Tab.cpp:2128 -#: src/slic3r/GUI/Tab.cpp:3608 src/slic3r/GUI/Tab.cpp:3609 +#: src/slic3r/GUI/Tab.cpp:1581 src/slic3r/GUI/Tab.cpp:1582 +#: src/slic3r/GUI/Tab.cpp:1887 src/slic3r/GUI/Tab.cpp:1888 +#: src/slic3r/GUI/Tab.cpp:2221 src/slic3r/GUI/Tab.cpp:2222 +#: src/slic3r/GUI/Tab.cpp:2297 src/slic3r/GUI/Tab.cpp:2298 +#: src/slic3r/GUI/Tab.cpp:3951 src/slic3r/GUI/Tab.cpp:3952 msgid "Notes" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1326 src/slic3r/GUI/Tab.cpp:1614 -#: src/slic3r/GUI/Tab.cpp:2052 src/slic3r/GUI/Tab.cpp:2134 -#: src/slic3r/GUI/Tab.cpp:3616 src/slic3r/GUI/Tab.cpp:3740 +#: src/slic3r/GUI/Tab.cpp:1588 src/slic3r/GUI/Tab.cpp:1895 +#: src/slic3r/GUI/Tab.cpp:2228 src/slic3r/GUI/Tab.cpp:2304 +#: src/slic3r/GUI/Tab.cpp:3959 src/slic3r/GUI/Tab.cpp:4090 msgid "Dependencies" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1327 src/slic3r/GUI/Tab.cpp:1615 -#: src/slic3r/GUI/Tab.cpp:2053 src/slic3r/GUI/Tab.cpp:2135 -#: src/slic3r/GUI/Tab.cpp:3617 src/slic3r/GUI/Tab.cpp:3741 +#: src/slic3r/GUI/Tab.cpp:1589 src/slic3r/GUI/Tab.cpp:1896 +#: src/slic3r/GUI/Tab.cpp:2229 src/slic3r/GUI/Tab.cpp:2305 +#: src/slic3r/GUI/Tab.cpp:3960 src/slic3r/GUI/Tab.cpp:4091 msgid "Profile dependencies" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1389 src/slic3r/GUI/Tab.cpp:1444 +#: src/slic3r/GUI/Tab.cpp:1669 msgid "Filament Overrides" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1390 src/slic3r/GUI/Tab.cpp:1449 -#: src/slic3r/GUI/Tab.cpp:2365 -msgid "Retraction" -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:1499 src/libslic3r/PrintConfig.cpp:2074 +#: src/slic3r/GUI/Tab.cpp:1779 msgid "Temperature" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1505 +#: src/slic3r/GUI/Tab.cpp:1785 msgid "Bed" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1510 +#: src/slic3r/GUI/Tab.cpp:1790 msgid "Cooling" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1511 src/libslic3r/PrintConfig.cpp:1355 -#: src/libslic3r/PrintConfig.cpp:2207 +#: src/slic3r/GUI/Tab.cpp:1791 src/libslic3r/PrintConfig.cpp:1463 +#: src/libslic3r/PrintConfig.cpp:2343 msgid "Enable" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1522 +#: src/slic3r/GUI/Tab.cpp:1802 msgid "Fan settings" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1531 +#: src/slic3r/GUI/Tab.cpp:1811 msgid "Cooling thresholds" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1537 +#: src/slic3r/GUI/Tab.cpp:1817 msgid "Filament properties" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1544 +#: src/slic3r/GUI/Tab.cpp:1824 msgid "Print speed override" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1554 +#: src/slic3r/GUI/Tab.cpp:1834 msgid "Wipe tower parameters" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1557 +#: src/slic3r/GUI/Tab.cpp:1837 msgid "Toolchange parameters with single extruder MM printers" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1571 +#: src/slic3r/GUI/Tab.cpp:1850 msgid "Ramming settings" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1593 src/slic3r/GUI/Tab.cpp:2008 +#: src/slic3r/GUI/Tab.cpp:1872 src/slic3r/GUI/Tab.cpp:2160 +#: src/libslic3r/PrintConfig.cpp:1978 msgid "Custom G-code" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1594 src/slic3r/GUI/Tab.cpp:2009 -#: src/libslic3r/PrintConfig.cpp:1820 src/libslic3r/PrintConfig.cpp:1835 +#: src/slic3r/GUI/Tab.cpp:1873 src/slic3r/GUI/Tab.cpp:2161 +#: src/libslic3r/PrintConfig.cpp:1928 src/libslic3r/PrintConfig.cpp:1943 msgid "Start G-code" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1600 src/slic3r/GUI/Tab.cpp:2015 -#: src/libslic3r/PrintConfig.cpp:385 src/libslic3r/PrintConfig.cpp:395 +#: src/slic3r/GUI/Tab.cpp:1880 src/slic3r/GUI/Tab.cpp:2168 +#: src/libslic3r/PrintConfig.cpp:419 src/libslic3r/PrintConfig.cpp:429 msgid "End G-code" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1649 +#: src/slic3r/GUI/Tab.cpp:1930 msgid "Volumetric flow hints not available" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1735 src/slic3r/GUI/Tab.cpp:1948 -msgid "Test" -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:1744 -msgid "Could not get a valid Printer Host reference" -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:1750 src/slic3r/GUI/Tab.cpp:1961 -msgid "Success!" -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:1770 +#: src/slic3r/GUI/Tab.cpp:2026 msgid "" -"HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" -"signed certificate." +"Note: All parameters from this group are moved to the Physical Printer " +"settings (see changelog).\n" +"\n" +"A new Physical Printer profile is created by clicking on the \"cog\" icon " +"right of the Printer profiles combo box, by selecting the \"add or remove " +"printers\" item in the Printer combo box. The Physical Printer profile " +"editor opens also when clicking on the \"cog\" icon in the Printer settings " +"tab. The Physical Printer profiles are being stored into PrusaSlicer/" +"physical_printer directory." msgstr "" -#: src/slic3r/GUI/Tab.cpp:1785 -msgid "Certificate files (*.crt, *.pem)|*.crt;*.pem|All files|*.*" -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:1786 -msgid "Open CA certificate file" -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:1813 src/libslic3r/PrintConfig.cpp:111 -msgid "HTTPS CA File" -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:1814 -#, possible-c-format -msgid "" -"On this system, %s uses HTTPS certificates from the system Certificate Store " -"or Keychain." -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:1815 -msgid "" -"To use a custom CA file, please import your CA file into Certificate Store / " -"Keychain." -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:1858 src/slic3r/GUI/Tab.cpp:2070 +#: src/slic3r/GUI/Tab.cpp:2059 src/slic3r/GUI/Tab.cpp:2241 msgid "Size and coordinates" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1867 +#: src/slic3r/GUI/Tab.cpp:2068 src/slic3r/GUI/UnsavedChangesDialog.cpp:1066 msgid "Capabilities" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1872 +#: src/slic3r/GUI/Tab.cpp:2073 msgid "Number of extruders of the printer." msgstr "" -#: src/slic3r/GUI/Tab.cpp:1900 +#: src/slic3r/GUI/Tab.cpp:2101 msgid "" "Single Extruder Multi Material is selected, \n" "and all extruders must have the same diameter.\n" @@ -5474,256 +6528,227 @@ msgid "" "nozzle diameter value?" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1903 src/slic3r/GUI/Tab.cpp:2335 -#: src/libslic3r/PrintConfig.cpp:1326 +#: src/slic3r/GUI/Tab.cpp:2104 src/slic3r/GUI/Tab.cpp:2509 +#: src/libslic3r/PrintConfig.cpp:1434 msgid "Nozzle diameter" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1933 -msgid "USB/Serial connection" -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:1934 src/libslic3r/PrintConfig.cpp:1661 -msgid "Serial port" -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:1939 -msgid "Rescan serial ports" -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:1961 -msgid "Connection to printer works correctly." -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:1964 -msgid "Connection failed." -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:1977 src/slic3r/GUI/Tab.cpp:2122 -msgid "Print Host upload" -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:2021 src/libslic3r/PrintConfig.cpp:153 +#: src/slic3r/GUI/Tab.cpp:2175 src/libslic3r/PrintConfig.cpp:187 msgid "Before layer change G-code" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2027 src/libslic3r/PrintConfig.cpp:1080 +#: src/slic3r/GUI/Tab.cpp:2182 src/libslic3r/PrintConfig.cpp:1173 msgid "After layer change G-code" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2033 src/libslic3r/PrintConfig.cpp:2100 +#: src/slic3r/GUI/Tab.cpp:2189 src/libslic3r/PrintConfig.cpp:2236 msgid "Tool change G-code" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2039 +#: src/slic3r/GUI/Tab.cpp:2196 msgid "Between objects G-code (for sequential printing)" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2077 +#: src/slic3r/GUI/Tab.cpp:2203 +msgid "Color Change G-code" +msgstr "" + +#: src/slic3r/GUI/Tab.cpp:2209 src/libslic3r/PrintConfig.cpp:1969 +msgid "Pause Print G-code" +msgstr "" + +#: src/slic3r/GUI/Tab.cpp:2215 +msgid "Template Custom G-code" +msgstr "" + +#: src/slic3r/GUI/Tab.cpp:2248 msgid "Display" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2092 +#: src/slic3r/GUI/Tab.cpp:2263 msgid "Tilt" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2093 +#: src/slic3r/GUI/Tab.cpp:2264 msgid "Tilt time" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2099 src/slic3r/GUI/Tab.cpp:3592 +#: src/slic3r/GUI/Tab.cpp:2270 src/slic3r/GUI/Tab.cpp:3935 msgid "Corrections" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2116 src/slic3r/GUI/Tab.cpp:3588 +#: src/slic3r/GUI/Tab.cpp:2287 src/slic3r/GUI/Tab.cpp:3931 msgid "Exposure" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2183 src/slic3r/GUI/Tab.cpp:2268 -#: src/libslic3r/PrintConfig.cpp:1129 src/libslic3r/PrintConfig.cpp:1146 -#: src/libslic3r/PrintConfig.cpp:1163 src/libslic3r/PrintConfig.cpp:1179 -#: src/libslic3r/PrintConfig.cpp:1189 src/libslic3r/PrintConfig.cpp:1199 -#: src/libslic3r/PrintConfig.cpp:1209 +#: src/slic3r/GUI/Tab.cpp:2346 src/slic3r/GUI/Tab.cpp:2442 +#: src/libslic3r/PrintConfig.cpp:1202 src/libslic3r/PrintConfig.cpp:1237 +#: src/libslic3r/PrintConfig.cpp:1254 src/libslic3r/PrintConfig.cpp:1271 +#: src/libslic3r/PrintConfig.cpp:1287 src/libslic3r/PrintConfig.cpp:1297 +#: src/libslic3r/PrintConfig.cpp:1307 src/libslic3r/PrintConfig.cpp:1317 msgid "Machine limits" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2197 +#: src/slic3r/GUI/Tab.cpp:2371 msgid "Values in this column are for Normal mode" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2198 -msgid "Normal" -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:2203 +#: src/slic3r/GUI/Tab.cpp:2377 msgid "Values in this column are for Stealth mode" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2204 -msgid "Stealth" -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:2212 +#: src/slic3r/GUI/Tab.cpp:2386 msgid "Maximum feedrates" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2217 +#: src/slic3r/GUI/Tab.cpp:2391 msgid "Maximum accelerations" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2224 +#: src/slic3r/GUI/Tab.cpp:2398 msgid "Jerk limits" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2229 +#: src/slic3r/GUI/Tab.cpp:2403 msgid "Minimum feedrates" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2293 src/slic3r/GUI/Tab.cpp:2301 +#: src/slic3r/GUI/Tab.cpp:2467 src/slic3r/GUI/Tab.cpp:2475 msgid "Single extruder MM setup" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2302 +#: src/slic3r/GUI/Tab.cpp:2476 msgid "Single extruder multimaterial parameters" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2333 +#: src/slic3r/GUI/Tab.cpp:2507 msgid "" "This is a single extruder multimaterial printer, diameters of all extruders " "will be set to the new value. Do you want to proceed?" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2357 +#: src/slic3r/GUI/Tab.cpp:2531 msgid "Layer height limits" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2362 +#: src/slic3r/GUI/Tab.cpp:2536 msgid "Position (for multi-extruder printers)" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2368 +#: src/slic3r/GUI/Tab.cpp:2542 msgid "Only lift Z" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2381 +#: src/slic3r/GUI/Tab.cpp:2555 msgid "" "Retraction when tool is disabled (advanced settings for multi-extruder " "setups)" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2389 +#: src/slic3r/GUI/Tab.cpp:2564 msgid "Reset to Filament Color" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2570 +#: src/slic3r/GUI/Tab.cpp:2731 msgid "" "The Wipe option is not available when using the Firmware Retraction mode.\n" "\n" "Shall I disable it in order to enable Firmware Retraction?" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2572 +#: src/slic3r/GUI/Tab.cpp:2733 msgid "Firmware Retraction" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2918 -#, possible-c-format -msgid "Default preset (%s)" -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:2919 -#, possible-c-format -msgid "Preset (%s)" -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:2936 -msgid "has the following unsaved changes:" -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:2939 -msgid "is not compatible with printer" -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:2940 -msgid "is not compatible with print profile" -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:2942 -msgid "and it has the following unsaved changes:" -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:2946 -msgid "Unsaved Changes" -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:3040 +#: src/slic3r/GUI/Tab.cpp:3323 msgid "Detached" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3040 -msgctxt "PresetName" -msgid "Copy" -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:3069 -msgid "The supplied name is empty. It can't be saved." -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:3074 -msgid "Cannot overwrite a system profile." -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:3078 -msgid "Cannot overwrite an external profile." -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:3083 -msgid "Preset with name \"%1%\" already exists." -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:3084 -msgid "Replace?" -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:3152 +#: src/slic3r/GUI/Tab.cpp:3386 msgid "remove" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3152 +#: src/slic3r/GUI/Tab.cpp:3386 msgid "delete" msgstr "" -#. TRN remove/delete -#: src/slic3r/GUI/Tab.cpp:3154 +#: src/slic3r/GUI/Tab.cpp:3392 +msgid "" +"Are you sure you want to delete \"%1%\" preset from the physical printer " +"\"%2%\"?" +msgstr "" + +#: src/slic3r/GUI/Tab.cpp:3404 +msgid "Next physical printer(s) has/have selected preset" +msgstr "" + +#: src/slic3r/GUI/Tab.cpp:3408 +msgid "" +"Note, that selected preset will be deleted from this/those printer(s) too." +msgstr "" + +#: src/slic3r/GUI/Tab.cpp:3412 +msgid "Next physical printer(s) has/have one and only selected preset" +msgstr "" + +#: src/slic3r/GUI/Tab.cpp:3416 +msgid "" +"Note, that this/those printer(s) will be deleted after deleting of the " +"selected preset." +msgstr "" + +#: src/slic3r/GUI/Tab.cpp:3420 msgid "Are you sure you want to %1% the selected preset?" msgstr "" #. TRN Remove/Delete -#: src/slic3r/GUI/Tab.cpp:3157 +#: src/slic3r/GUI/Tab.cpp:3425 msgid "%1% Preset" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3216 src/slic3r/GUI/Tab.cpp:3286 +#: src/slic3r/GUI/Tab.cpp:3435 +msgid "It's a last for this physical printer. We can't delete it" +msgstr "" + +#: src/slic3r/GUI/Tab.cpp:3509 src/slic3r/GUI/Tab.cpp:3588 msgid "Set" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3325 +#: src/slic3r/GUI/Tab.cpp:3660 +msgid "" +"Machine limits will be emitted to G-code and used to estimate print time." +msgstr "" + +#: src/slic3r/GUI/Tab.cpp:3663 +msgid "" +"Machine limits will NOT be emitted to G-code, however they will be used to " +"estimate print time, which may therefore not be accurate as the printer may " +"apply a different set of machine limits." +msgstr "" + +#: src/slic3r/GUI/Tab.cpp:3667 +msgid "" +"Machine limits are not set, therefore the print time estimate may not be " +"accurate." +msgstr "" + +#: src/slic3r/GUI/Tab.cpp:3689 msgid "LOCKED LOCK" msgstr "" #. TRN Description for "LOCKED LOCK" -#: src/slic3r/GUI/Tab.cpp:3327 +#: src/slic3r/GUI/Tab.cpp:3691 msgid "" "indicates that the settings are the same as the system (or default) values " "for the current option group" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3329 +#: src/slic3r/GUI/Tab.cpp:3693 msgid "UNLOCKED LOCK" msgstr "" #. TRN Description for "UNLOCKED LOCK" -#: src/slic3r/GUI/Tab.cpp:3331 +#: src/slic3r/GUI/Tab.cpp:3695 msgid "" "indicates that some settings were changed and are not equal to the system " "(or default) values for the current option group.\n" @@ -5731,23 +6756,23 @@ msgid "" "to the system (or default) values." msgstr "" -#: src/slic3r/GUI/Tab.cpp:3336 +#: src/slic3r/GUI/Tab.cpp:3700 msgid "WHITE BULLET" msgstr "" #. TRN Description for "WHITE BULLET" -#: src/slic3r/GUI/Tab.cpp:3338 +#: src/slic3r/GUI/Tab.cpp:3702 msgid "" "for the left button: indicates a non-system (or non-default) preset,\n" "for the right button: indicates that the settings hasn't been modified." msgstr "" -#: src/slic3r/GUI/Tab.cpp:3341 +#: src/slic3r/GUI/Tab.cpp:3705 msgid "BACK ARROW" msgstr "" #. TRN Description for "BACK ARROW" -#: src/slic3r/GUI/Tab.cpp:3343 +#: src/slic3r/GUI/Tab.cpp:3707 msgid "" "indicates that the settings were changed and are not equal to the last saved " "preset for the current option group.\n" @@ -5755,13 +6780,13 @@ msgid "" "to the last saved preset." msgstr "" -#: src/slic3r/GUI/Tab.cpp:3353 +#: src/slic3r/GUI/Tab.cpp:3717 msgid "" "LOCKED LOCK icon indicates that the settings are the same as the system (or " "default) values for the current option group" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3355 +#: src/slic3r/GUI/Tab.cpp:3719 msgid "" "UNLOCKED LOCK icon indicates that some settings were changed and are not " "equal to the system (or default) values for the current option group.\n" @@ -5769,17 +6794,17 @@ msgid "" "default) values." msgstr "" -#: src/slic3r/GUI/Tab.cpp:3358 +#: src/slic3r/GUI/Tab.cpp:3722 msgid "WHITE BULLET icon indicates a non system (or non default) preset." msgstr "" -#: src/slic3r/GUI/Tab.cpp:3361 +#: src/slic3r/GUI/Tab.cpp:3725 msgid "" "WHITE BULLET icon indicates that the settings are the same as in the last " "saved preset for the current option group." msgstr "" -#: src/slic3r/GUI/Tab.cpp:3363 +#: src/slic3r/GUI/Tab.cpp:3727 msgid "" "BACK ARROW icon indicates that the settings were changed and are not equal " "to the last saved preset for the current option group.\n" @@ -5787,84 +6812,197 @@ msgid "" "preset." msgstr "" -#: src/slic3r/GUI/Tab.cpp:3369 +#: src/slic3r/GUI/Tab.cpp:3733 msgid "" "LOCKED LOCK icon indicates that the value is the same as the system (or " "default) value." msgstr "" -#: src/slic3r/GUI/Tab.cpp:3370 +#: src/slic3r/GUI/Tab.cpp:3734 msgid "" "UNLOCKED LOCK icon indicates that the value was changed and is not equal to " "the system (or default) value.\n" "Click to reset current value to the system (or default) value." msgstr "" -#: src/slic3r/GUI/Tab.cpp:3376 +#: src/slic3r/GUI/Tab.cpp:3740 msgid "" "WHITE BULLET icon indicates that the value is the same as in the last saved " "preset." msgstr "" -#: src/slic3r/GUI/Tab.cpp:3377 +#: src/slic3r/GUI/Tab.cpp:3741 msgid "" "BACK ARROW icon indicates that the value was changed and is not equal to the " "last saved preset.\n" "Click to reset current value to the last saved preset." msgstr "" -#. TRN Preset -#: src/slic3r/GUI/Tab.cpp:3490 -#, possible-c-format -msgid "Save %s as:" -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:3534 -msgid "the following suffix is not allowed:" -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:3538 -msgid "The supplied name is not available." -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:3551 src/slic3r/GUI/Tab.cpp:3553 +#: src/slic3r/GUI/Tab.cpp:3894 src/slic3r/GUI/Tab.cpp:3896 msgid "Material" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3675 +#: src/slic3r/GUI/Tab.cpp:4018 msgid "Support head" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3680 +#: src/slic3r/GUI/Tab.cpp:4023 msgid "Support pillar" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3696 +#: src/slic3r/GUI/Tab.cpp:4046 msgid "Connection of the support sticks and junctions" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3701 +#: src/slic3r/GUI/Tab.cpp:4051 msgid "Automatic generation" msgstr "" -#: src/slic3r/GUI/Tab.hpp:336 src/slic3r/GUI/Tab.hpp:441 +#: src/slic3r/GUI/Tab.cpp:4125 +msgid "" +"\"%1%\" is disabled because \"%2%\" is on in \"%3%\" category.\n" +"To enable \"%1%\", please switch off \"%2%\"" +msgstr "" + +#: src/slic3r/GUI/Tab.cpp:4127 src/libslic3r/PrintConfig.cpp:2917 +msgid "Object elevation" +msgstr "" + +#: src/slic3r/GUI/Tab.cpp:4127 src/libslic3r/PrintConfig.cpp:3019 +msgid "Pad around object" +msgstr "" + +#: src/slic3r/GUI/Tab.hpp:378 src/slic3r/GUI/Tab.hpp:502 msgid "Print Settings" msgstr "" -#: src/slic3r/GUI/Tab.hpp:363 +#: src/slic3r/GUI/Tab.hpp:409 msgid "Filament Settings" msgstr "" -#: src/slic3r/GUI/Tab.hpp:399 +#: src/slic3r/GUI/Tab.hpp:453 msgid "Printer Settings" msgstr "" -#: src/slic3r/GUI/Tab.hpp:426 +#: src/slic3r/GUI/Tab.hpp:486 msgid "Material Settings" msgstr "" -#: src/slic3r/GUI/Tab.hpp:453 -msgid "Save preset" +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:137 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:146 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:845 +msgid "Undef" +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:525 +msgid "Closing PrusaSlicer: Unsaved Changes" +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:542 +msgid "Switching Presets: Unsaved Changes" +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:608 +msgid "Old Value" +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:609 +msgid "New Value" +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:640 +msgid "Transfer" +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:641 +msgid "Discard" +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:642 +msgid "Save" +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:662 +msgid "PrusaSlicer will remember your action." +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:664 +msgid "" +"You will not be asked about the unsaved changes the next time you close " +"PrusaSlicer." +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:665 +msgid "" +"You will not be asked about the unsaved changes the next time you switch a " +"preset." +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:666 +msgid "" +"Visit \"Preferences\" and check \"%1%\"\n" +"to be asked about unsaved changes again." +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:668 +msgid "PrusaSlicer: Don't ask me again" +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:735 +msgid "" +"Some fields are too long to fit. Right mouse click reveals the full text." +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:737 +msgid "All modified options will be reverted." +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:740 +msgid "Save the selected options." +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:740 +msgid "Transfer the selected options to the newly selected presets." +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:744 +msgid "Save the selected options to preset \"%1%\"." +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:745 +msgid "Transfer the selected options to the newly selected preset \"%1%\"." +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1004 +msgid "The following presets were modified:" +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1009 +msgid "Preset \"%1%\" has the following unsaved changes:" +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1013 +msgid "" +"Preset \"%1%\" is not compatible with the new printer profile and it has the " +"following unsaved changes:" +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1014 +msgid "" +"Preset \"%1%\" is not compatible with the new print profile and it has the " +"following unsaved changes:" +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1061 +msgid "Extruders count" +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1177 +msgid "Old value" +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1178 +msgid "New value" msgstr "" #: src/slic3r/GUI/UpdateDialogs.cpp:38 @@ -6101,17 +7239,17 @@ msgstr "" msgid "Show advanced settings" msgstr "" -#: src/slic3r/GUI/wxExtensions.cpp:706 +#: src/slic3r/GUI/wxExtensions.cpp:623 #, possible-c-format msgid "Switch to the %s mode" msgstr "" -#: src/slic3r/GUI/wxExtensions.cpp:707 +#: src/slic3r/GUI/wxExtensions.cpp:624 #, possible-c-format msgid "Current mode is %s" msgstr "" -#: src/slic3r/Utils/AstroBox.cpp:69 src/slic3r/Utils/OctoPrint.cpp:69 +#: src/slic3r/Utils/AstroBox.cpp:69 src/slic3r/Utils/OctoPrint.cpp:68 #, possible-c-format msgid "Mismatched type of print host: %s" msgstr "" @@ -6183,7 +7321,7 @@ msgid "Model fixing" msgstr "" #: src/slic3r/Utils/FixModelByWin10.cpp:341 -msgid "Exporting model..." +msgid "Exporting model" msgstr "" #: src/slic3r/Utils/FixModelByWin10.cpp:368 @@ -6249,188 +7387,86 @@ msgid "" "is required." msgstr "" -#: src/slic3r/Utils/OctoPrint.cpp:84 +#: src/slic3r/Utils/OctoPrint.cpp:83 msgid "Connection to OctoPrint works correctly." msgstr "" -#: src/slic3r/Utils/OctoPrint.cpp:90 +#: src/slic3r/Utils/OctoPrint.cpp:89 msgid "Could not connect to OctoPrint" msgstr "" -#: src/slic3r/Utils/OctoPrint.cpp:92 +#: src/slic3r/Utils/OctoPrint.cpp:91 msgid "Note: OctoPrint version at least 1.1.0 is required." msgstr "" -#: src/slic3r/Utils/OctoPrint.cpp:179 +#: src/slic3r/Utils/OctoPrint.cpp:185 msgid "Connection to Prusa SL1 works correctly." msgstr "" -#: src/slic3r/Utils/OctoPrint.cpp:185 +#: src/slic3r/Utils/OctoPrint.cpp:191 msgid "Could not connect to Prusa SLA" msgstr "" -#: src/slic3r/Utils/PresetUpdater.cpp:706 +#: src/slic3r/Utils/PresetUpdater.cpp:726 #, possible-c-format msgid "requires min. %s and max. %s" msgstr "" -#: src/slic3r/Utils/PresetUpdater.cpp:710 +#: src/slic3r/Utils/PresetUpdater.cpp:730 #, possible-c-format msgid "requires min. %s" msgstr "" -#: src/slic3r/Utils/PresetUpdater.cpp:713 +#: src/slic3r/Utils/PresetUpdater.cpp:733 #, possible-c-format msgid "requires max. %s" msgstr "" -#: src/libslic3r/SLA/Pad.cpp:691 -msgid "Pad brim size is too small for the current configuration." +#: src/slic3r/Utils/Http.cpp:73 +msgid "" +"Could not detect system SSL certificate store. PrusaSlicer will be unable to " +"establish secure network connections." msgstr "" -#: src/libslic3r/Zipper.cpp:32 -msgid "undefined error" +#: src/slic3r/Utils/Http.cpp:78 +msgid "PrusaSlicer detected system SSL certificate store in: %1%" msgstr "" -#: src/libslic3r/Zipper.cpp:34 -msgid "too many files" +#: src/slic3r/Utils/Http.cpp:82 +msgid "" +"To specify the system certificate store manually, please set the %1% " +"environment variable to the correct CA bundle and restart the application." msgstr "" -#: src/libslic3r/Zipper.cpp:36 -msgid "file too large" +#: src/slic3r/Utils/Http.cpp:91 +msgid "" +"CURL init has failed. PrusaSlicer will be unable to establish network " +"connections. See logs for additional details." msgstr "" -#: src/libslic3r/Zipper.cpp:38 -msgid "unsupported method" +#: src/slic3r/Utils/Process.cpp:151 +msgid "Open G-code file:" msgstr "" -#: src/libslic3r/Zipper.cpp:40 -msgid "unsupported encryption" +#: src/libslic3r/GCode.cpp:604 +msgid "There is an object with no extrusions on the first layer." msgstr "" -#: src/libslic3r/Zipper.cpp:42 -msgid "unsupported feature" -msgstr "" - -#: src/libslic3r/Zipper.cpp:44 -msgid "failed finding central directory" -msgstr "" - -#: src/libslic3r/Zipper.cpp:46 -msgid "not a ZIP archive" -msgstr "" - -#: src/libslic3r/Zipper.cpp:48 -msgid "invalid header or archive is corrupted" -msgstr "" - -#: src/libslic3r/Zipper.cpp:50 -msgid "unsupported multidisk archive" -msgstr "" - -#: src/libslic3r/Zipper.cpp:52 -msgid "decompression failed or archive is corrupted" -msgstr "" - -#: src/libslic3r/Zipper.cpp:54 -msgid "compression failed" -msgstr "" - -#: src/libslic3r/Zipper.cpp:56 -msgid "unexpected decompressed size" -msgstr "" - -#: src/libslic3r/Zipper.cpp:58 -msgid "CRC-32 check failed" -msgstr "" - -#: src/libslic3r/Zipper.cpp:60 -msgid "unsupported central directory size" -msgstr "" - -#: src/libslic3r/Zipper.cpp:62 -msgid "allocation failed" -msgstr "" - -#: src/libslic3r/Zipper.cpp:64 -msgid "file open failed" -msgstr "" - -#: src/libslic3r/Zipper.cpp:66 -msgid "file create failed" -msgstr "" - -#: src/libslic3r/Zipper.cpp:68 -msgid "file write failed" -msgstr "" - -#: src/libslic3r/Zipper.cpp:70 -msgid "file read failed" -msgstr "" - -#: src/libslic3r/Zipper.cpp:72 -msgid "file close failed" -msgstr "" - -#: src/libslic3r/Zipper.cpp:74 -msgid "file seek failed" -msgstr "" - -#: src/libslic3r/Zipper.cpp:76 -msgid "file stat failed" -msgstr "" - -#: src/libslic3r/Zipper.cpp:78 -msgid "invalid parameter" -msgstr "" - -#: src/libslic3r/Zipper.cpp:80 -msgid "invalid filename" -msgstr "" - -#: src/libslic3r/Zipper.cpp:82 -msgid "buffer too small" -msgstr "" - -#: src/libslic3r/Zipper.cpp:84 -msgid "internal error" -msgstr "" - -#: src/libslic3r/Zipper.cpp:86 -msgid "file not found" -msgstr "" - -#: src/libslic3r/Zipper.cpp:88 -msgid "archive is too large" -msgstr "" - -#: src/libslic3r/Zipper.cpp:90 -msgid "validation failed" -msgstr "" - -#: src/libslic3r/Zipper.cpp:92 -msgid "write calledback failed" -msgstr "" - -#: src/libslic3r/Zipper.cpp:102 -msgid "Error with zip archive" -msgstr "" - -#: src/libslic3r/GCode.cpp:637 +#: src/libslic3r/GCode.cpp:622 msgid "Empty layers detected, the output would not be printable." msgstr "" -#: src/libslic3r/GCode.cpp:638 +#: src/libslic3r/GCode.cpp:623 msgid "Print z" msgstr "" -#: src/libslic3r/GCode.cpp:639 +#: src/libslic3r/GCode.cpp:624 msgid "" "This is usually caused by negligibly small extrusions or by a faulty model. " "Try to repair the model or change its orientation on the bed." msgstr "" -#: src/libslic3r/ExtrusionEntity.cpp:323 +#: src/libslic3r/ExtrusionEntity.cpp:328 src/libslic3r/ExtrusionEntity.cpp:364 msgid "Mixed" msgstr "" @@ -6439,122 +7475,254 @@ msgid "" "Cannot calculate extrusion width for %1%: Variable \"%2%\" not accessible." msgstr "" -#: src/libslic3r/Format/3mf.cpp:1626 +#: src/libslic3r/Format/3mf.cpp:1667 msgid "" "The selected 3mf file has been saved with a newer version of %1% and is not " "compatible." msgstr "" -#: src/libslic3r/Format/AMF.cpp:934 +#: src/libslic3r/Format/AMF.cpp:955 msgid "" "The selected amf file has been saved with a newer version of %1% and is not " "compatible." msgstr "" -#: src/libslic3r/Print.cpp:1218 +#: src/libslic3r/miniz_extension.cpp:91 +msgid "undefined error" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:93 +msgid "too many files" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:95 +msgid "file too large" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:97 +msgid "unsupported method" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:99 +msgid "unsupported encryption" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:101 +msgid "unsupported feature" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:103 +msgid "failed finding central directory" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:105 +msgid "not a ZIP archive" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:107 +msgid "invalid header or archive is corrupted" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:109 +msgid "unsupported multidisk archive" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:111 +msgid "decompression failed or archive is corrupted" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:113 +msgid "compression failed" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:115 +msgid "unexpected decompressed size" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:117 +msgid "CRC-32 check failed" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:119 +msgid "unsupported central directory size" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:121 +msgid "allocation failed" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:123 +msgid "file open failed" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:125 +msgid "file create failed" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:127 +msgid "file write failed" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:129 +msgid "file read failed" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:131 +msgid "file close failed" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:133 +msgid "file seek failed" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:135 +msgid "file stat failed" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:137 +msgid "invalid parameter" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:139 +msgid "invalid filename" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:141 +msgid "buffer too small" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:143 +msgid "internal error" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:145 +msgid "file not found" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:147 +msgid "archive is too large" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:149 +msgid "validation failed" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:151 +msgid "write calledback failed" +msgstr "" + +#: src/libslic3r/Preset.cpp:1301 +msgid "filament" +msgstr "" + +#: src/libslic3r/Preset.cpp:1302 +msgid "SLA print" +msgstr "" + +#: src/libslic3r/Print.cpp:1245 msgid "All objects are outside of the print volume." msgstr "" -#: src/libslic3r/Print.cpp:1221 +#: src/libslic3r/Print.cpp:1248 msgid "The supplied settings will cause an empty print." msgstr "" -#: src/libslic3r/Print.cpp:1225 +#: src/libslic3r/Print.cpp:1252 msgid "Some objects are too close; your extruder will collide with them." msgstr "" -#: src/libslic3r/Print.cpp:1227 +#: src/libslic3r/Print.cpp:1254 msgid "" "Some objects are too tall and cannot be printed without extruder collisions." msgstr "" -#: src/libslic3r/Print.cpp:1236 +#: src/libslic3r/Print.cpp:1263 msgid "The Spiral Vase option can only be used when printing a single object." msgstr "" -#: src/libslic3r/Print.cpp:1243 +#: src/libslic3r/Print.cpp:1270 msgid "" "The Spiral Vase option can only be used when printing single material " "objects." msgstr "" -#: src/libslic3r/Print.cpp:1256 +#: src/libslic3r/Print.cpp:1283 msgid "" "The wipe tower is only supported if all extruders have the same nozzle " "diameter and use filaments of the same diameter." msgstr "" -#: src/libslic3r/Print.cpp:1261 +#: src/libslic3r/Print.cpp:1288 msgid "" "The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter " "and Repetier G-code flavors." msgstr "" -#: src/libslic3r/Print.cpp:1263 +#: src/libslic3r/Print.cpp:1290 msgid "" "The Wipe Tower is currently only supported with the relative extruder " "addressing (use_relative_e_distances=1)." msgstr "" -#: src/libslic3r/Print.cpp:1265 +#: src/libslic3r/Print.cpp:1292 msgid "Ooze prevention is currently not supported with the wipe tower enabled." msgstr "" -#: src/libslic3r/Print.cpp:1267 +#: src/libslic3r/Print.cpp:1294 msgid "" "The Wipe Tower currently does not support volumetric E (use_volumetric_e=0)." msgstr "" -#: src/libslic3r/Print.cpp:1269 +#: src/libslic3r/Print.cpp:1296 msgid "" "The Wipe Tower is currently not supported for multimaterial sequential " "prints." msgstr "" -#: src/libslic3r/Print.cpp:1290 +#: src/libslic3r/Print.cpp:1317 msgid "" "The Wipe Tower is only supported for multiple objects if they have equal " "layer heights" msgstr "" -#: src/libslic3r/Print.cpp:1292 +#: src/libslic3r/Print.cpp:1319 msgid "" "The Wipe Tower is only supported for multiple objects if they are printed " "over an equal number of raft layers" msgstr "" -#: src/libslic3r/Print.cpp:1294 +#: src/libslic3r/Print.cpp:1321 msgid "" "The Wipe Tower is only supported for multiple objects if they are printed " "with the same support_material_contact_distance" msgstr "" -#: src/libslic3r/Print.cpp:1296 +#: src/libslic3r/Print.cpp:1323 msgid "" "The Wipe Tower is only supported for multiple objects if they are sliced " "equally." msgstr "" -#: src/libslic3r/Print.cpp:1338 +#: src/libslic3r/Print.cpp:1365 msgid "" "The Wipe tower is only supported if all objects have the same variable layer " "height" msgstr "" -#: src/libslic3r/Print.cpp:1364 +#: src/libslic3r/Print.cpp:1391 msgid "" "One or more object were assigned an extruder that the printer does not have." msgstr "" -#: src/libslic3r/Print.cpp:1373 +#: src/libslic3r/Print.cpp:1400 msgid "%1%=%2% mm is too low to be printable at a layer height %3% mm" msgstr "" -#: src/libslic3r/Print.cpp:1376 +#: src/libslic3r/Print.cpp:1403 msgid "Excessive %1%=%2% mm to be printable with a nozzle diameter %3% mm" msgstr "" -#: src/libslic3r/Print.cpp:1387 +#: src/libslic3r/Print.cpp:1414 msgid "" "Printing with multiple extruders of differing nozzle diameters. If support " "is to be printed with the current extruder (support_material_extruder == 0 " @@ -6562,13 +7730,13 @@ msgid "" "same diameter." msgstr "" -#: src/libslic3r/Print.cpp:1395 +#: src/libslic3r/Print.cpp:1422 msgid "" "For the Wipe Tower to work with the soluble supports, the support layers " "need to be synchronized with the object layers." msgstr "" -#: src/libslic3r/Print.cpp:1399 +#: src/libslic3r/Print.cpp:1426 msgid "" "The Wipe Tower currently supports the non-soluble supports only if they are " "printed with the current extruder without triggering a tool change. (both " @@ -6576,132 +7744,136 @@ msgid "" "set to 0)." msgstr "" -#: src/libslic3r/Print.cpp:1421 +#: src/libslic3r/Print.cpp:1448 msgid "First layer height can't be greater than nozzle diameter" msgstr "" -#: src/libslic3r/Print.cpp:1426 +#: src/libslic3r/Print.cpp:1453 msgid "Layer height can't be greater than nozzle diameter" msgstr "" -#: src/libslic3r/Print.cpp:1583 +#: src/libslic3r/Print.cpp:1610 msgid "Infilling layers" msgstr "" -#: src/libslic3r/Print.cpp:1605 +#: src/libslic3r/Print.cpp:1636 msgid "Generating skirt" msgstr "" -#: src/libslic3r/Print.cpp:1613 +#: src/libslic3r/Print.cpp:1645 msgid "Generating brim" msgstr "" -#: src/libslic3r/Print.cpp:1633 +#: src/libslic3r/Print.cpp:1676 msgid "Exporting G-code" msgstr "" -#: src/libslic3r/Print.cpp:1637 +#: src/libslic3r/Print.cpp:1680 msgid "Generating G-code" msgstr "" -#: src/libslic3r/SLAPrint.cpp:615 +#: src/libslic3r/SLA/Pad.cpp:532 +msgid "Pad brim size is too small for the current configuration." +msgstr "" + +#: src/libslic3r/SLAPrint.cpp:627 msgid "" "Cannot proceed without support points! Add support points or disable support " "generation." msgstr "" -#: src/libslic3r/SLAPrint.cpp:627 +#: src/libslic3r/SLAPrint.cpp:639 msgid "" "Elevation is too low for object. Use the \"Pad around object\" feature to " "print the object without elevation." msgstr "" -#: src/libslic3r/SLAPrint.cpp:633 +#: src/libslic3r/SLAPrint.cpp:645 msgid "" "The endings of the support pillars will be deployed on the gap between the " "object and the pad. 'Support base safety distance' has to be greater than " "the 'Pad object gap' parameter to avoid this." msgstr "" -#: src/libslic3r/SLAPrint.cpp:648 +#: src/libslic3r/SLAPrint.cpp:660 msgid "Exposition time is out of printer profile bounds." msgstr "" -#: src/libslic3r/SLAPrint.cpp:655 +#: src/libslic3r/SLAPrint.cpp:667 msgid "Initial exposition time is out of printer profile bounds." msgstr "" -#: src/libslic3r/SLAPrint.cpp:762 +#: src/libslic3r/SLAPrint.cpp:780 msgid "Slicing done" msgstr "" -#: src/libslic3r/SLAPrintSteps.cpp:43 +#: src/libslic3r/SLAPrintSteps.cpp:44 msgid "Hollowing model" msgstr "" -#: src/libslic3r/SLAPrintSteps.cpp:44 +#: src/libslic3r/SLAPrintSteps.cpp:45 msgid "Drilling holes into model." msgstr "" -#: src/libslic3r/SLAPrintSteps.cpp:45 +#: src/libslic3r/SLAPrintSteps.cpp:46 msgid "Slicing model" msgstr "" -#: src/libslic3r/SLAPrintSteps.cpp:46 src/libslic3r/SLAPrintSteps.cpp:356 +#: src/libslic3r/SLAPrintSteps.cpp:47 src/libslic3r/SLAPrintSteps.cpp:359 msgid "Generating support points" msgstr "" -#: src/libslic3r/SLAPrintSteps.cpp:47 +#: src/libslic3r/SLAPrintSteps.cpp:48 msgid "Generating support tree" msgstr "" -#: src/libslic3r/SLAPrintSteps.cpp:48 +#: src/libslic3r/SLAPrintSteps.cpp:49 msgid "Generating pad" msgstr "" -#: src/libslic3r/SLAPrintSteps.cpp:49 +#: src/libslic3r/SLAPrintSteps.cpp:50 msgid "Slicing supports" msgstr "" -#: src/libslic3r/SLAPrintSteps.cpp:64 +#: src/libslic3r/SLAPrintSteps.cpp:65 msgid "Merging slices and calculating statistics" msgstr "" -#: src/libslic3r/SLAPrintSteps.cpp:65 +#: src/libslic3r/SLAPrintSteps.cpp:66 msgid "Rasterizing layers" msgstr "" -#: src/libslic3r/SLAPrintSteps.cpp:190 -msgid "Too much overlapping holes." +#: src/libslic3r/SLAPrintSteps.cpp:192 +msgid "Too many overlapping holes." msgstr "" -#: src/libslic3r/SLAPrintSteps.cpp:199 +#: src/libslic3r/SLAPrintSteps.cpp:201 msgid "" "Drilling holes into the mesh failed. This is usually caused by broken model. " "Try to fix it first." msgstr "" -#: src/libslic3r/SLAPrintSteps.cpp:245 +#: src/libslic3r/SLAPrintSteps.cpp:247 msgid "" "Slicing had to be stopped due to an internal error: Inconsistent slice index." msgstr "" -#: src/libslic3r/SLAPrintSteps.cpp:413 src/libslic3r/SLAPrintSteps.cpp:422 -#: src/libslic3r/SLAPrintSteps.cpp:461 +#: src/libslic3r/SLAPrintSteps.cpp:411 src/libslic3r/SLAPrintSteps.cpp:420 +#: src/libslic3r/SLAPrintSteps.cpp:459 msgid "Visualizing supports" msgstr "" -#: src/libslic3r/SLAPrintSteps.cpp:453 +#: src/libslic3r/SLAPrintSteps.cpp:451 msgid "No pad can be generated for this model with the current configuration" msgstr "" -#: src/libslic3r/SLAPrintSteps.cpp:621 +#: src/libslic3r/SLAPrintSteps.cpp:619 msgid "" "There are unprintable objects. Try to adjust support settings to make the " "objects printable." msgstr "" -#: src/libslic3r/PrintBase.cpp:71 +#: src/libslic3r/PrintBase.cpp:72 msgid "Failed processing of the output_filename_format template." msgstr "" @@ -6741,91 +7913,107 @@ msgid "" "printing." msgstr "" -#: src/libslic3r/PrintConfig.cpp:87 +#: src/libslic3r/PrintConfig.cpp:89 msgid "Slice gap closing radius" msgstr "" -#: src/libslic3r/PrintConfig.cpp:89 +#: src/libslic3r/PrintConfig.cpp:91 msgid "" "Cracks smaller than 2x gap closing radius are being filled during the " "triangle mesh slicing. The gap closing operation may reduce the final print " "resolution, therefore it is advisable to keep the value reasonably low." msgstr "" -#: src/libslic3r/PrintConfig.cpp:97 +#: src/libslic3r/PrintConfig.cpp:99 msgid "Hostname, IP or URL" msgstr "" -#: src/libslic3r/PrintConfig.cpp:98 +#: src/libslic3r/PrintConfig.cpp:100 msgid "" "Slic3r can upload G-code files to a printer host. This field should contain " "the hostname, IP address or URL of the printer host instance." msgstr "" -#: src/libslic3r/PrintConfig.cpp:104 +#: src/libslic3r/PrintConfig.cpp:106 msgid "API Key / Password" msgstr "" -#: src/libslic3r/PrintConfig.cpp:105 +#: src/libslic3r/PrintConfig.cpp:107 msgid "" "Slic3r can upload G-code files to a printer host. This field should contain " "the API Key or the password required for authentication." msgstr "" -#: src/libslic3r/PrintConfig.cpp:112 +#: src/libslic3r/PrintConfig.cpp:114 msgid "" "Custom CA certificate file can be specified for HTTPS OctoPrint connections, " "in crt/pem format. If left blank, the default OS CA certificate repository " "is used." msgstr "" -#: src/libslic3r/PrintConfig.cpp:118 +#: src/libslic3r/PrintConfig.cpp:120 msgid "Elephant foot compensation" msgstr "" -#: src/libslic3r/PrintConfig.cpp:120 +#: src/libslic3r/PrintConfig.cpp:122 msgid "" "The first layer will be shrunk in the XY plane by the configured value to " "compensate for the 1st layer squish aka an Elephant Foot effect." msgstr "" -#: src/libslic3r/PrintConfig.cpp:136 +#: src/libslic3r/PrintConfig.cpp:138 +msgid "Password" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:144 +msgid "Printer preset name" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:145 +msgid "Related printer preset name" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:150 +msgid "Authorization Type" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:169 msgid "Avoid crossing perimeters" msgstr "" -#: src/libslic3r/PrintConfig.cpp:137 +#: src/libslic3r/PrintConfig.cpp:170 msgid "" "Optimize travel moves in order to minimize the crossing of perimeters. This " "is mostly useful with Bowden extruders which suffer from oozing. This " "feature slows down both the print and the G-code generation." msgstr "" -#: src/libslic3r/PrintConfig.cpp:144 src/libslic3r/PrintConfig.cpp:2071 +#: src/libslic3r/PrintConfig.cpp:177 src/libslic3r/PrintConfig.cpp:2206 msgid "Other layers" msgstr "" -#: src/libslic3r/PrintConfig.cpp:145 +#: src/libslic3r/PrintConfig.cpp:178 msgid "" "Bed temperature for layers after the first one. Set this to zero to disable " "bed temperature control commands in the output." msgstr "" -#: src/libslic3r/PrintConfig.cpp:147 +#: src/libslic3r/PrintConfig.cpp:181 msgid "Bed temperature" msgstr "" -#: src/libslic3r/PrintConfig.cpp:154 +#: src/libslic3r/PrintConfig.cpp:188 msgid "" "This custom code is inserted at every layer change, right before the Z move. " "Note that you can use placeholder variables for all Slic3r settings as well " "as [layer_num] and [layer_z]." msgstr "" -#: src/libslic3r/PrintConfig.cpp:164 +#: src/libslic3r/PrintConfig.cpp:198 msgid "Between objects G-code" msgstr "" -#: src/libslic3r/PrintConfig.cpp:165 +#: src/libslic3r/PrintConfig.cpp:199 msgid "" "This code is inserted between objects when using sequential printing. By " "default extruder and bed temperature are reset using non-wait command; " @@ -6835,80 +8023,81 @@ msgid "" "S[first_layer_temperature]\" command wherever you want." msgstr "" -#: src/libslic3r/PrintConfig.cpp:176 +#: src/libslic3r/PrintConfig.cpp:210 msgid "Number of solid layers to generate on bottom surfaces." msgstr "" -#: src/libslic3r/PrintConfig.cpp:177 +#: src/libslic3r/PrintConfig.cpp:211 msgid "Bottom solid layers" msgstr "" -#: src/libslic3r/PrintConfig.cpp:185 +#: src/libslic3r/PrintConfig.cpp:219 msgid "" "The number of bottom solid layers is increased above bottom_solid_layers if " "necessary to satisfy minimum thickness of bottom shell." msgstr "" -#: src/libslic3r/PrintConfig.cpp:187 +#: src/libslic3r/PrintConfig.cpp:221 msgid "Minimum bottom shell thickness" msgstr "" -#: src/libslic3r/PrintConfig.cpp:193 +#: src/libslic3r/PrintConfig.cpp:227 msgid "Bridge" msgstr "" -#: src/libslic3r/PrintConfig.cpp:194 +#: src/libslic3r/PrintConfig.cpp:228 msgid "" "This is the acceleration your printer will use for bridges. Set zero to " "disable acceleration control for bridges." msgstr "" -#: src/libslic3r/PrintConfig.cpp:196 src/libslic3r/PrintConfig.cpp:339 -#: src/libslic3r/PrintConfig.cpp:862 src/libslic3r/PrintConfig.cpp:984 -#: src/libslic3r/PrintConfig.cpp:1152 src/libslic3r/PrintConfig.cpp:1201 -#: src/libslic3r/PrintConfig.cpp:1211 src/libslic3r/PrintConfig.cpp:1403 +#: src/libslic3r/PrintConfig.cpp:230 src/libslic3r/PrintConfig.cpp:373 +#: src/libslic3r/PrintConfig.cpp:902 src/libslic3r/PrintConfig.cpp:1028 +#: src/libslic3r/PrintConfig.cpp:1260 src/libslic3r/PrintConfig.cpp:1309 +#: src/libslic3r/PrintConfig.cpp:1319 src/libslic3r/PrintConfig.cpp:1511 msgid "mm/s²" msgstr "" -#: src/libslic3r/PrintConfig.cpp:202 +#: src/libslic3r/PrintConfig.cpp:236 msgid "Bridging angle" msgstr "" -#: src/libslic3r/PrintConfig.cpp:204 +#: src/libslic3r/PrintConfig.cpp:238 msgid "" "Bridging angle override. If left to zero, the bridging angle will be " "calculated automatically. Otherwise the provided angle will be used for all " "bridges. Use 180° for zero angle." msgstr "" -#: src/libslic3r/PrintConfig.cpp:207 src/libslic3r/PrintConfig.cpp:780 -#: src/libslic3r/PrintConfig.cpp:1640 src/libslic3r/PrintConfig.cpp:1650 -#: src/libslic3r/PrintConfig.cpp:1901 src/libslic3r/PrintConfig.cpp:2056 -#: src/libslic3r/PrintConfig.cpp:2254 src/libslic3r/PrintConfig.cpp:2744 -#: src/libslic3r/PrintConfig.cpp:2865 +#: src/libslic3r/PrintConfig.cpp:241 src/libslic3r/PrintConfig.cpp:816 +#: src/libslic3r/PrintConfig.cpp:1748 src/libslic3r/PrintConfig.cpp:1758 +#: src/libslic3r/PrintConfig.cpp:2036 src/libslic3r/PrintConfig.cpp:2191 +#: src/libslic3r/PrintConfig.cpp:2390 src/libslic3r/PrintConfig.cpp:2891 +#: src/libslic3r/PrintConfig.cpp:3012 msgid "°" msgstr "" -#: src/libslic3r/PrintConfig.cpp:213 +#: src/libslic3r/PrintConfig.cpp:247 msgid "Bridges fan speed" msgstr "" -#: src/libslic3r/PrintConfig.cpp:214 +#: src/libslic3r/PrintConfig.cpp:248 msgid "This fan speed is enforced during all bridges and overhangs." msgstr "" -#: src/libslic3r/PrintConfig.cpp:215 src/libslic3r/PrintConfig.cpp:792 -#: src/libslic3r/PrintConfig.cpp:1219 src/libslic3r/PrintConfig.cpp:1282 -#: src/libslic3r/PrintConfig.cpp:1532 src/libslic3r/PrintConfig.cpp:2432 -#: src/libslic3r/PrintConfig.cpp:2784 +#: src/libslic3r/PrintConfig.cpp:249 src/libslic3r/PrintConfig.cpp:828 +#: src/libslic3r/PrintConfig.cpp:1148 src/libslic3r/PrintConfig.cpp:1327 +#: src/libslic3r/PrintConfig.cpp:1390 src/libslic3r/PrintConfig.cpp:1640 +#: src/libslic3r/PrintConfig.cpp:2568 src/libslic3r/PrintConfig.cpp:2805 +#: src/libslic3r/PrintConfig.cpp:2931 msgid "%" msgstr "" -#: src/libslic3r/PrintConfig.cpp:222 +#: src/libslic3r/PrintConfig.cpp:256 msgid "Bridge flow ratio" msgstr "" -#: src/libslic3r/PrintConfig.cpp:224 +#: src/libslic3r/PrintConfig.cpp:258 msgid "" "This factor affects the amount of plastic for bridging. You can decrease it " "slightly to pull the extrudates and prevent sagging, although default " @@ -6916,83 +8105,84 @@ msgid "" "before tweaking this." msgstr "" -#: src/libslic3r/PrintConfig.cpp:234 +#: src/libslic3r/PrintConfig.cpp:268 msgid "Bridges" msgstr "" -#: src/libslic3r/PrintConfig.cpp:236 +#: src/libslic3r/PrintConfig.cpp:270 msgid "Speed for printing bridges." msgstr "" -#: src/libslic3r/PrintConfig.cpp:237 src/libslic3r/PrintConfig.cpp:609 -#: src/libslic3r/PrintConfig.cpp:617 src/libslic3r/PrintConfig.cpp:626 -#: src/libslic3r/PrintConfig.cpp:634 src/libslic3r/PrintConfig.cpp:661 -#: src/libslic3r/PrintConfig.cpp:680 src/libslic3r/PrintConfig.cpp:922 -#: src/libslic3r/PrintConfig.cpp:1050 src/libslic3r/PrintConfig.cpp:1135 -#: src/libslic3r/PrintConfig.cpp:1169 src/libslic3r/PrintConfig.cpp:1181 -#: src/libslic3r/PrintConfig.cpp:1191 src/libslic3r/PrintConfig.cpp:1241 -#: src/libslic3r/PrintConfig.cpp:1300 src/libslic3r/PrintConfig.cpp:1433 -#: src/libslic3r/PrintConfig.cpp:1607 src/libslic3r/PrintConfig.cpp:1616 -#: src/libslic3r/PrintConfig.cpp:2035 src/libslic3r/PrintConfig.cpp:2161 +#: src/libslic3r/PrintConfig.cpp:271 src/libslic3r/PrintConfig.cpp:645 +#: src/libslic3r/PrintConfig.cpp:653 src/libslic3r/PrintConfig.cpp:662 +#: src/libslic3r/PrintConfig.cpp:670 src/libslic3r/PrintConfig.cpp:697 +#: src/libslic3r/PrintConfig.cpp:716 src/libslic3r/PrintConfig.cpp:966 +#: src/libslic3r/PrintConfig.cpp:1094 src/libslic3r/PrintConfig.cpp:1167 +#: src/libslic3r/PrintConfig.cpp:1243 src/libslic3r/PrintConfig.cpp:1277 +#: src/libslic3r/PrintConfig.cpp:1289 src/libslic3r/PrintConfig.cpp:1299 +#: src/libslic3r/PrintConfig.cpp:1349 src/libslic3r/PrintConfig.cpp:1408 +#: src/libslic3r/PrintConfig.cpp:1541 src/libslic3r/PrintConfig.cpp:1715 +#: src/libslic3r/PrintConfig.cpp:1724 src/libslic3r/PrintConfig.cpp:2170 +#: src/libslic3r/PrintConfig.cpp:2297 msgid "mm/s" msgstr "" -#: src/libslic3r/PrintConfig.cpp:244 +#: src/libslic3r/PrintConfig.cpp:278 msgid "Brim width" msgstr "" -#: src/libslic3r/PrintConfig.cpp:245 +#: src/libslic3r/PrintConfig.cpp:279 msgid "" "Horizontal width of the brim that will be printed around each object on the " "first layer." msgstr "" -#: src/libslic3r/PrintConfig.cpp:252 +#: src/libslic3r/PrintConfig.cpp:286 msgid "Clip multi-part objects" msgstr "" -#: src/libslic3r/PrintConfig.cpp:253 +#: src/libslic3r/PrintConfig.cpp:287 msgid "" "When printing multi-material objects, this settings will make Slic3r to clip " "the overlapping object parts one by the other (2nd part will be clipped by " "the 1st, 3rd part will be clipped by the 1st and 2nd etc)." msgstr "" -#: src/libslic3r/PrintConfig.cpp:260 +#: src/libslic3r/PrintConfig.cpp:294 msgid "Colorprint height" msgstr "" -#: src/libslic3r/PrintConfig.cpp:261 +#: src/libslic3r/PrintConfig.cpp:295 msgid "Heights at which a filament change is to occur." msgstr "" -#: src/libslic3r/PrintConfig.cpp:271 +#: src/libslic3r/PrintConfig.cpp:305 msgid "Compatible printers condition" msgstr "" -#: src/libslic3r/PrintConfig.cpp:272 +#: src/libslic3r/PrintConfig.cpp:306 msgid "" "A boolean expression using the configuration values of an active printer " "profile. If this expression evaluates to true, this profile is considered " "compatible with the active printer profile." msgstr "" -#: src/libslic3r/PrintConfig.cpp:286 +#: src/libslic3r/PrintConfig.cpp:320 msgid "Compatible print profiles condition" msgstr "" -#: src/libslic3r/PrintConfig.cpp:287 +#: src/libslic3r/PrintConfig.cpp:321 msgid "" "A boolean expression using the configuration values of an active print " "profile. If this expression evaluates to true, this profile is considered " "compatible with the active print profile." msgstr "" -#: src/libslic3r/PrintConfig.cpp:304 +#: src/libslic3r/PrintConfig.cpp:338 msgid "Complete individual objects" msgstr "" -#: src/libslic3r/PrintConfig.cpp:305 +#: src/libslic3r/PrintConfig.cpp:339 msgid "" "When printing multiple objects or copies, this feature will complete each " "object before moving onto next one (and starting it from its bottom layer). " @@ -7000,97 +8190,97 @@ msgid "" "warn and prevent you from extruder collisions, but beware." msgstr "" -#: src/libslic3r/PrintConfig.cpp:313 +#: src/libslic3r/PrintConfig.cpp:347 msgid "Enable auto cooling" msgstr "" -#: src/libslic3r/PrintConfig.cpp:314 +#: src/libslic3r/PrintConfig.cpp:348 msgid "" "This flag enables the automatic cooling logic that adjusts print speed and " "fan speed according to layer printing time." msgstr "" -#: src/libslic3r/PrintConfig.cpp:319 +#: src/libslic3r/PrintConfig.cpp:353 msgid "Cooling tube position" msgstr "" -#: src/libslic3r/PrintConfig.cpp:320 +#: src/libslic3r/PrintConfig.cpp:354 msgid "Distance of the center-point of the cooling tube from the extruder tip." msgstr "" -#: src/libslic3r/PrintConfig.cpp:327 +#: src/libslic3r/PrintConfig.cpp:361 msgid "Cooling tube length" msgstr "" -#: src/libslic3r/PrintConfig.cpp:328 +#: src/libslic3r/PrintConfig.cpp:362 msgid "Length of the cooling tube to limit space for cooling moves inside it." msgstr "" -#: src/libslic3r/PrintConfig.cpp:336 +#: src/libslic3r/PrintConfig.cpp:370 msgid "" "This is the acceleration your printer will be reset to after the role-" "specific acceleration values are used (perimeter/infill). Set zero to " "prevent resetting acceleration at all." msgstr "" -#: src/libslic3r/PrintConfig.cpp:345 +#: src/libslic3r/PrintConfig.cpp:379 msgid "Default filament profile" msgstr "" -#: src/libslic3r/PrintConfig.cpp:346 +#: src/libslic3r/PrintConfig.cpp:380 msgid "" "Default filament profile associated with the current printer profile. On " "selection of the current printer profile, this filament profile will be " "activated." msgstr "" -#: src/libslic3r/PrintConfig.cpp:352 +#: src/libslic3r/PrintConfig.cpp:386 msgid "Default print profile" msgstr "" -#: src/libslic3r/PrintConfig.cpp:353 src/libslic3r/PrintConfig.cpp:2599 -#: src/libslic3r/PrintConfig.cpp:2610 +#: src/libslic3r/PrintConfig.cpp:387 src/libslic3r/PrintConfig.cpp:2735 +#: src/libslic3r/PrintConfig.cpp:2746 msgid "" "Default print profile associated with the current printer profile. On " "selection of the current printer profile, this print profile will be " "activated." msgstr "" -#: src/libslic3r/PrintConfig.cpp:359 +#: src/libslic3r/PrintConfig.cpp:393 msgid "Disable fan for the first" msgstr "" -#: src/libslic3r/PrintConfig.cpp:360 +#: src/libslic3r/PrintConfig.cpp:394 msgid "" "You can set this to a positive value to disable fan at all during the first " "layers, so that it does not make adhesion worse." msgstr "" -#: src/libslic3r/PrintConfig.cpp:369 +#: src/libslic3r/PrintConfig.cpp:403 msgid "Don't support bridges" msgstr "" -#: src/libslic3r/PrintConfig.cpp:371 +#: src/libslic3r/PrintConfig.cpp:405 msgid "" "Experimental option for preventing support material from being generated " "under bridged areas." msgstr "" -#: src/libslic3r/PrintConfig.cpp:377 +#: src/libslic3r/PrintConfig.cpp:411 msgid "Distance between copies" msgstr "" -#: src/libslic3r/PrintConfig.cpp:378 +#: src/libslic3r/PrintConfig.cpp:412 msgid "Distance used for the auto-arrange feature of the plater." msgstr "" -#: src/libslic3r/PrintConfig.cpp:386 +#: src/libslic3r/PrintConfig.cpp:420 msgid "" "This end procedure is inserted at the end of the output file. Note that you " "can use placeholder variables for all PrusaSlicer settings." msgstr "" -#: src/libslic3r/PrintConfig.cpp:396 +#: src/libslic3r/PrintConfig.cpp:430 msgid "" "This end procedure is inserted at the end of the output file, before the " "printer end gcode (and before any toolchange from this filament in case of " @@ -7099,62 +8289,66 @@ msgid "" "in extruder order." msgstr "" -#: src/libslic3r/PrintConfig.cpp:407 +#: src/libslic3r/PrintConfig.cpp:441 msgid "Ensure vertical shell thickness" msgstr "" -#: src/libslic3r/PrintConfig.cpp:409 +#: src/libslic3r/PrintConfig.cpp:443 msgid "" "Add solid infill near sloping surfaces to guarantee the vertical shell " "thickness (top+bottom solid layers)." msgstr "" -#: src/libslic3r/PrintConfig.cpp:415 +#: src/libslic3r/PrintConfig.cpp:449 msgid "Top fill pattern" msgstr "" -#: src/libslic3r/PrintConfig.cpp:417 +#: src/libslic3r/PrintConfig.cpp:451 msgid "" "Fill pattern for top infill. This only affects the top visible layer, and " "not its adjacent solid shells." msgstr "" -#: src/libslic3r/PrintConfig.cpp:425 src/libslic3r/PrintConfig.cpp:843 -#: src/libslic3r/PrintConfig.cpp:2016 +#: src/libslic3r/PrintConfig.cpp:460 src/libslic3r/PrintConfig.cpp:881 +#: src/libslic3r/PrintConfig.cpp:2151 msgid "Rectilinear" msgstr "" -#: src/libslic3r/PrintConfig.cpp:426 src/libslic3r/PrintConfig.cpp:849 +#: src/libslic3r/PrintConfig.cpp:461 +msgid "Monotonic" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:462 src/libslic3r/PrintConfig.cpp:887 msgid "Concentric" msgstr "" -#: src/libslic3r/PrintConfig.cpp:427 src/libslic3r/PrintConfig.cpp:853 +#: src/libslic3r/PrintConfig.cpp:463 src/libslic3r/PrintConfig.cpp:891 msgid "Hilbert Curve" msgstr "" -#: src/libslic3r/PrintConfig.cpp:428 src/libslic3r/PrintConfig.cpp:854 +#: src/libslic3r/PrintConfig.cpp:464 src/libslic3r/PrintConfig.cpp:892 msgid "Archimedean Chords" msgstr "" -#: src/libslic3r/PrintConfig.cpp:429 src/libslic3r/PrintConfig.cpp:855 +#: src/libslic3r/PrintConfig.cpp:465 src/libslic3r/PrintConfig.cpp:893 msgid "Octagram Spiral" msgstr "" -#: src/libslic3r/PrintConfig.cpp:435 +#: src/libslic3r/PrintConfig.cpp:471 msgid "Bottom fill pattern" msgstr "" -#: src/libslic3r/PrintConfig.cpp:437 +#: src/libslic3r/PrintConfig.cpp:473 msgid "" "Fill pattern for bottom infill. This only affects the bottom external " "visible layer, and not its adjacent solid shells." msgstr "" -#: src/libslic3r/PrintConfig.cpp:446 src/libslic3r/PrintConfig.cpp:457 +#: src/libslic3r/PrintConfig.cpp:482 src/libslic3r/PrintConfig.cpp:493 msgid "External perimeters" msgstr "" -#: src/libslic3r/PrintConfig.cpp:448 +#: src/libslic3r/PrintConfig.cpp:484 msgid "" "Set this to a non-zero value to set a manual extrusion width for external " "perimeters. If left zero, default extrusion width will be used if set, " @@ -7162,43 +8356,43 @@ msgid "" "(for example 200%), it will be computed over layer height." msgstr "" -#: src/libslic3r/PrintConfig.cpp:451 src/libslic3r/PrintConfig.cpp:560 -#: src/libslic3r/PrintConfig.cpp:882 src/libslic3r/PrintConfig.cpp:895 -#: src/libslic3r/PrintConfig.cpp:1015 src/libslic3r/PrintConfig.cpp:1041 -#: src/libslic3r/PrintConfig.cpp:1423 src/libslic3r/PrintConfig.cpp:1768 -#: src/libslic3r/PrintConfig.cpp:1890 src/libslic3r/PrintConfig.cpp:1958 -#: src/libslic3r/PrintConfig.cpp:2118 +#: src/libslic3r/PrintConfig.cpp:487 src/libslic3r/PrintConfig.cpp:596 +#: src/libslic3r/PrintConfig.cpp:924 src/libslic3r/PrintConfig.cpp:937 +#: src/libslic3r/PrintConfig.cpp:1059 src/libslic3r/PrintConfig.cpp:1085 +#: src/libslic3r/PrintConfig.cpp:1531 src/libslic3r/PrintConfig.cpp:1876 +#: src/libslic3r/PrintConfig.cpp:2025 src/libslic3r/PrintConfig.cpp:2093 +#: src/libslic3r/PrintConfig.cpp:2254 msgid "mm or %" msgstr "" -#: src/libslic3r/PrintConfig.cpp:459 +#: src/libslic3r/PrintConfig.cpp:495 msgid "" "This separate setting will affect the speed of external perimeters (the " "visible ones). If expressed as percentage (for example: 80%) it will be " "calculated on the perimeters speed setting above. Set to zero for auto." msgstr "" -#: src/libslic3r/PrintConfig.cpp:462 src/libslic3r/PrintConfig.cpp:904 -#: src/libslic3r/PrintConfig.cpp:1727 src/libslic3r/PrintConfig.cpp:1779 -#: src/libslic3r/PrintConfig.cpp:2002 src/libslic3r/PrintConfig.cpp:2131 +#: src/libslic3r/PrintConfig.cpp:498 src/libslic3r/PrintConfig.cpp:946 +#: src/libslic3r/PrintConfig.cpp:1835 src/libslic3r/PrintConfig.cpp:1887 +#: src/libslic3r/PrintConfig.cpp:2137 src/libslic3r/PrintConfig.cpp:2267 msgid "mm/s or %" msgstr "" -#: src/libslic3r/PrintConfig.cpp:469 +#: src/libslic3r/PrintConfig.cpp:505 msgid "External perimeters first" msgstr "" -#: src/libslic3r/PrintConfig.cpp:471 +#: src/libslic3r/PrintConfig.cpp:507 msgid "" "Print contour perimeters from the outermost one to the innermost one instead " "of the default inverse order." msgstr "" -#: src/libslic3r/PrintConfig.cpp:477 +#: src/libslic3r/PrintConfig.cpp:513 msgid "Extra perimeters if needed" msgstr "" -#: src/libslic3r/PrintConfig.cpp:479 +#: src/libslic3r/PrintConfig.cpp:515 #, possible-c-format msgid "" "Add more perimeters when needed for avoiding gaps in sloping walls. Slic3r " @@ -7206,14 +8400,14 @@ msgid "" "is supported." msgstr "" -#: src/libslic3r/PrintConfig.cpp:489 +#: src/libslic3r/PrintConfig.cpp:525 msgid "" "The extruder to use (unless more specific extruder settings are specified). " "This value overrides perimeter and infill extruders, but not the support " "extruders." msgstr "" -#: src/libslic3r/PrintConfig.cpp:501 +#: src/libslic3r/PrintConfig.cpp:537 msgid "" "Set this to the vertical distance between your nozzle tip and (usually) the " "X carriage rods. In other words, this is the height of the clearance " @@ -7221,26 +8415,26 @@ msgid "" "extruder can peek before colliding with other printed objects." msgstr "" -#: src/libslic3r/PrintConfig.cpp:512 +#: src/libslic3r/PrintConfig.cpp:548 msgid "" "Set this to the clearance radius around your extruder. If the extruder is " "not centered, choose the largest value for safety. This setting is used to " "check for collisions and to display the graphical preview in the plater." msgstr "" -#: src/libslic3r/PrintConfig.cpp:522 +#: src/libslic3r/PrintConfig.cpp:558 msgid "Extruder Color" msgstr "" -#: src/libslic3r/PrintConfig.cpp:523 src/libslic3r/PrintConfig.cpp:583 +#: src/libslic3r/PrintConfig.cpp:559 src/libslic3r/PrintConfig.cpp:619 msgid "This is only used in the Slic3r interface as a visual help." msgstr "" -#: src/libslic3r/PrintConfig.cpp:529 +#: src/libslic3r/PrintConfig.cpp:565 msgid "Extruder offset" msgstr "" -#: src/libslic3r/PrintConfig.cpp:530 +#: src/libslic3r/PrintConfig.cpp:566 msgid "" "If your firmware doesn't handle the extruder displacement you need the G-" "code to take it into account. This option lets you specify the displacement " @@ -7248,21 +8442,21 @@ msgid "" "coordinates (they will be subtracted from the XY coordinate)." msgstr "" -#: src/libslic3r/PrintConfig.cpp:539 +#: src/libslic3r/PrintConfig.cpp:575 msgid "Extrusion axis" msgstr "" -#: src/libslic3r/PrintConfig.cpp:540 +#: src/libslic3r/PrintConfig.cpp:576 msgid "" "Use this option to set the axis letter associated to your printer's extruder " "(usually E but some printers use A)." msgstr "" -#: src/libslic3r/PrintConfig.cpp:545 +#: src/libslic3r/PrintConfig.cpp:581 msgid "Extrusion multiplier" msgstr "" -#: src/libslic3r/PrintConfig.cpp:546 +#: src/libslic3r/PrintConfig.cpp:582 msgid "" "This factor changes the amount of flow proportionally. You may need to tweak " "this setting to get nice surface finish and correct single wall widths. " @@ -7270,11 +8464,11 @@ msgid "" "more, check filament diameter and your firmware E steps." msgstr "" -#: src/libslic3r/PrintConfig.cpp:554 +#: src/libslic3r/PrintConfig.cpp:590 msgid "Default extrusion width" msgstr "" -#: src/libslic3r/PrintConfig.cpp:556 +#: src/libslic3r/PrintConfig.cpp:592 msgid "" "Set this to a non-zero value to allow a manual extrusion width. If left to " "zero, Slic3r derives extrusion widths from the nozzle diameter (see the " @@ -7283,119 +8477,119 @@ msgid "" "height." msgstr "" -#: src/libslic3r/PrintConfig.cpp:566 +#: src/libslic3r/PrintConfig.cpp:602 msgid "Keep fan always on" msgstr "" -#: src/libslic3r/PrintConfig.cpp:567 +#: src/libslic3r/PrintConfig.cpp:603 msgid "" "If this is enabled, fan will never be disabled and will be kept running at " "least at its minimum speed. Useful for PLA, harmful for ABS." msgstr "" -#: src/libslic3r/PrintConfig.cpp:572 +#: src/libslic3r/PrintConfig.cpp:608 msgid "Enable fan if layer print time is below" msgstr "" -#: src/libslic3r/PrintConfig.cpp:573 +#: src/libslic3r/PrintConfig.cpp:609 msgid "" "If layer print time is estimated below this number of seconds, fan will be " "enabled and its speed will be calculated by interpolating the minimum and " "maximum speeds." msgstr "" -#: src/libslic3r/PrintConfig.cpp:575 src/libslic3r/PrintConfig.cpp:1715 +#: src/libslic3r/PrintConfig.cpp:611 src/libslic3r/PrintConfig.cpp:1823 msgid "approximate seconds" msgstr "" -#: src/libslic3r/PrintConfig.cpp:588 +#: src/libslic3r/PrintConfig.cpp:624 msgid "Filament notes" msgstr "" -#: src/libslic3r/PrintConfig.cpp:589 +#: src/libslic3r/PrintConfig.cpp:625 msgid "You can put your notes regarding the filament here." msgstr "" -#: src/libslic3r/PrintConfig.cpp:597 src/libslic3r/PrintConfig.cpp:1247 +#: src/libslic3r/PrintConfig.cpp:633 src/libslic3r/PrintConfig.cpp:1355 msgid "Max volumetric speed" msgstr "" -#: src/libslic3r/PrintConfig.cpp:598 +#: src/libslic3r/PrintConfig.cpp:634 msgid "" "Maximum volumetric speed allowed for this filament. Limits the maximum " "volumetric speed of a print to the minimum of print and filament volumetric " "speed. Set to zero for no limit." msgstr "" -#: src/libslic3r/PrintConfig.cpp:607 +#: src/libslic3r/PrintConfig.cpp:643 msgid "Loading speed" msgstr "" -#: src/libslic3r/PrintConfig.cpp:608 +#: src/libslic3r/PrintConfig.cpp:644 msgid "Speed used for loading the filament on the wipe tower." msgstr "" -#: src/libslic3r/PrintConfig.cpp:615 +#: src/libslic3r/PrintConfig.cpp:651 msgid "Loading speed at the start" msgstr "" -#: src/libslic3r/PrintConfig.cpp:616 +#: src/libslic3r/PrintConfig.cpp:652 msgid "Speed used at the very beginning of loading phase." msgstr "" -#: src/libslic3r/PrintConfig.cpp:623 +#: src/libslic3r/PrintConfig.cpp:659 msgid "Unloading speed" msgstr "" -#: src/libslic3r/PrintConfig.cpp:624 +#: src/libslic3r/PrintConfig.cpp:660 msgid "" "Speed used for unloading the filament on the wipe tower (does not affect " "initial part of unloading just after ramming)." msgstr "" -#: src/libslic3r/PrintConfig.cpp:632 +#: src/libslic3r/PrintConfig.cpp:668 msgid "Unloading speed at the start" msgstr "" -#: src/libslic3r/PrintConfig.cpp:633 +#: src/libslic3r/PrintConfig.cpp:669 msgid "" "Speed used for unloading the tip of the filament immediately after ramming." msgstr "" -#: src/libslic3r/PrintConfig.cpp:640 +#: src/libslic3r/PrintConfig.cpp:676 msgid "Delay after unloading" msgstr "" -#: src/libslic3r/PrintConfig.cpp:641 +#: src/libslic3r/PrintConfig.cpp:677 msgid "" "Time to wait after the filament is unloaded. May help to get reliable " "toolchanges with flexible materials that may need more time to shrink to " "original dimensions." msgstr "" -#: src/libslic3r/PrintConfig.cpp:650 +#: src/libslic3r/PrintConfig.cpp:686 msgid "Number of cooling moves" msgstr "" -#: src/libslic3r/PrintConfig.cpp:651 +#: src/libslic3r/PrintConfig.cpp:687 msgid "" "Filament is cooled by being moved back and forth in the cooling tubes. " "Specify desired number of these moves." msgstr "" -#: src/libslic3r/PrintConfig.cpp:659 +#: src/libslic3r/PrintConfig.cpp:695 msgid "Speed of the first cooling move" msgstr "" -#: src/libslic3r/PrintConfig.cpp:660 +#: src/libslic3r/PrintConfig.cpp:696 msgid "Cooling moves are gradually accelerating beginning at this speed." msgstr "" -#: src/libslic3r/PrintConfig.cpp:667 +#: src/libslic3r/PrintConfig.cpp:703 msgid "Minimal purge on wipe tower" msgstr "" -#: src/libslic3r/PrintConfig.cpp:668 +#: src/libslic3r/PrintConfig.cpp:704 msgid "" "After a tool change, the exact position of the newly loaded filament inside " "the nozzle may not be known, and the filament pressure is likely not yet " @@ -7404,63 +8598,63 @@ msgid "" "to produce successive infill or sacrificial object extrusions reliably." msgstr "" -#: src/libslic3r/PrintConfig.cpp:672 +#: src/libslic3r/PrintConfig.cpp:708 msgid "mm³" msgstr "" -#: src/libslic3r/PrintConfig.cpp:678 +#: src/libslic3r/PrintConfig.cpp:714 msgid "Speed of the last cooling move" msgstr "" -#: src/libslic3r/PrintConfig.cpp:679 +#: src/libslic3r/PrintConfig.cpp:715 msgid "Cooling moves are gradually accelerating towards this speed." msgstr "" -#: src/libslic3r/PrintConfig.cpp:686 +#: src/libslic3r/PrintConfig.cpp:722 msgid "Filament load time" msgstr "" -#: src/libslic3r/PrintConfig.cpp:687 +#: src/libslic3r/PrintConfig.cpp:723 msgid "" "Time for the printer firmware (or the Multi Material Unit 2.0) to load a new " "filament during a tool change (when executing the T code). This time is " "added to the total print time by the G-code time estimator." msgstr "" -#: src/libslic3r/PrintConfig.cpp:694 +#: src/libslic3r/PrintConfig.cpp:730 msgid "Ramming parameters" msgstr "" -#: src/libslic3r/PrintConfig.cpp:695 +#: src/libslic3r/PrintConfig.cpp:731 msgid "" "This string is edited by RammingDialog and contains ramming specific " "parameters." msgstr "" -#: src/libslic3r/PrintConfig.cpp:701 +#: src/libslic3r/PrintConfig.cpp:737 msgid "Filament unload time" msgstr "" -#: src/libslic3r/PrintConfig.cpp:702 +#: src/libslic3r/PrintConfig.cpp:738 msgid "" "Time for the printer firmware (or the Multi Material Unit 2.0) to unload a " "filament during a tool change (when executing the T code). This time is " "added to the total print time by the G-code time estimator." msgstr "" -#: src/libslic3r/PrintConfig.cpp:710 +#: src/libslic3r/PrintConfig.cpp:746 msgid "" "Enter your filament diameter here. Good precision is required, so use a " "caliper and do multiple measurements along the filament, then compute the " "average." msgstr "" -#: src/libslic3r/PrintConfig.cpp:717 src/libslic3r/PrintConfig.cpp:2510 -#: src/libslic3r/PrintConfig.cpp:2511 +#: src/libslic3r/PrintConfig.cpp:753 src/libslic3r/PrintConfig.cpp:2646 +#: src/libslic3r/PrintConfig.cpp:2647 msgid "Density" msgstr "" -#: src/libslic3r/PrintConfig.cpp:718 +#: src/libslic3r/PrintConfig.cpp:754 msgid "" "Enter your filament density here. This is only for statistical information. " "A decent way is to weigh a known length of filament and compute the ratio of " @@ -7468,117 +8662,129 @@ msgid "" "displacement." msgstr "" -#: src/libslic3r/PrintConfig.cpp:721 +#: src/libslic3r/PrintConfig.cpp:757 msgid "g/cm³" msgstr "" -#: src/libslic3r/PrintConfig.cpp:726 +#: src/libslic3r/PrintConfig.cpp:762 msgid "Filament type" msgstr "" -#: src/libslic3r/PrintConfig.cpp:727 +#: src/libslic3r/PrintConfig.cpp:763 msgid "The filament material type for use in custom G-codes." msgstr "" -#: src/libslic3r/PrintConfig.cpp:754 +#: src/libslic3r/PrintConfig.cpp:790 msgid "Soluble material" msgstr "" -#: src/libslic3r/PrintConfig.cpp:755 +#: src/libslic3r/PrintConfig.cpp:791 msgid "Soluble material is most likely used for a soluble support." msgstr "" -#: src/libslic3r/PrintConfig.cpp:761 +#: src/libslic3r/PrintConfig.cpp:797 msgid "" "Enter your filament cost per kg here. This is only for statistical " "information." msgstr "" -#: src/libslic3r/PrintConfig.cpp:762 +#: src/libslic3r/PrintConfig.cpp:798 msgid "money/kg" msgstr "" -#: src/libslic3r/PrintConfig.cpp:771 src/libslic3r/PrintConfig.cpp:2594 +#: src/libslic3r/PrintConfig.cpp:807 src/libslic3r/PrintConfig.cpp:2730 msgid "(Unknown)" msgstr "" -#: src/libslic3r/PrintConfig.cpp:775 +#: src/libslic3r/PrintConfig.cpp:811 msgid "Fill angle" msgstr "" -#: src/libslic3r/PrintConfig.cpp:777 +#: src/libslic3r/PrintConfig.cpp:813 msgid "" "Default base angle for infill orientation. Cross-hatching will be applied to " "this. Bridges will be infilled using the best direction Slic3r can detect, " "so this setting does not affect them." msgstr "" -#: src/libslic3r/PrintConfig.cpp:789 +#: src/libslic3r/PrintConfig.cpp:825 msgid "Fill density" msgstr "" -#: src/libslic3r/PrintConfig.cpp:791 +#: src/libslic3r/PrintConfig.cpp:827 msgid "Density of internal infill, expressed in the range 0% - 100%." msgstr "" -#: src/libslic3r/PrintConfig.cpp:826 +#: src/libslic3r/PrintConfig.cpp:862 msgid "Fill pattern" msgstr "" -#: src/libslic3r/PrintConfig.cpp:828 +#: src/libslic3r/PrintConfig.cpp:864 msgid "Fill pattern for general low-density infill." msgstr "" -#: src/libslic3r/PrintConfig.cpp:844 +#: src/libslic3r/PrintConfig.cpp:882 msgid "Grid" msgstr "" -#: src/libslic3r/PrintConfig.cpp:845 +#: src/libslic3r/PrintConfig.cpp:883 msgid "Triangles" msgstr "" -#: src/libslic3r/PrintConfig.cpp:846 +#: src/libslic3r/PrintConfig.cpp:884 msgid "Stars" msgstr "" -#: src/libslic3r/PrintConfig.cpp:847 +#: src/libslic3r/PrintConfig.cpp:885 msgid "Cubic" msgstr "" -#: src/libslic3r/PrintConfig.cpp:848 +#: src/libslic3r/PrintConfig.cpp:886 msgid "Line" msgstr "" -#: src/libslic3r/PrintConfig.cpp:850 src/libslic3r/PrintConfig.cpp:2018 +#: src/libslic3r/PrintConfig.cpp:888 src/libslic3r/PrintConfig.cpp:2153 msgid "Honeycomb" msgstr "" -#: src/libslic3r/PrintConfig.cpp:851 +#: src/libslic3r/PrintConfig.cpp:889 msgid "3D Honeycomb" msgstr "" -#: src/libslic3r/PrintConfig.cpp:852 +#: src/libslic3r/PrintConfig.cpp:890 msgid "Gyroid" msgstr "" -#: src/libslic3r/PrintConfig.cpp:859 src/libslic3r/PrintConfig.cpp:868 -#: src/libslic3r/PrintConfig.cpp:876 src/libslic3r/PrintConfig.cpp:910 +#: src/libslic3r/PrintConfig.cpp:894 +msgid "Adaptive Cubic" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:895 +msgid "Support Cubic" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:899 src/libslic3r/PrintConfig.cpp:908 +#: src/libslic3r/PrintConfig.cpp:918 src/libslic3r/PrintConfig.cpp:952 msgid "First layer" msgstr "" -#: src/libslic3r/PrintConfig.cpp:860 +#: src/libslic3r/PrintConfig.cpp:900 msgid "" "This is the acceleration your printer will use for first layer. Set zero to " "disable acceleration control for first layer." msgstr "" -#: src/libslic3r/PrintConfig.cpp:869 +#: src/libslic3r/PrintConfig.cpp:909 +msgid "First layer bed temperature" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:910 msgid "" "Heated build plate temperature for the first layer. Set this to zero to " "disable bed temperature control commands in the output." msgstr "" -#: src/libslic3r/PrintConfig.cpp:878 +#: src/libslic3r/PrintConfig.cpp:920 msgid "" "Set this to a non-zero value to set a manual extrusion width for first " "layer. You can use this to force fatter extrudates for better adhesion. If " @@ -7586,7 +8792,7 @@ msgid "" "layer height. If set to zero, it will use the default extrusion width." msgstr "" -#: src/libslic3r/PrintConfig.cpp:891 +#: src/libslic3r/PrintConfig.cpp:933 msgid "" "When printing with very low layer heights, you might still want to print a " "thicker bottom layer to improve adhesion and tolerance for non perfect build " @@ -7594,47 +8800,51 @@ msgid "" "example: 150%) over the default layer height." msgstr "" -#: src/libslic3r/PrintConfig.cpp:900 +#: src/libslic3r/PrintConfig.cpp:942 msgid "First layer speed" msgstr "" -#: src/libslic3r/PrintConfig.cpp:901 +#: src/libslic3r/PrintConfig.cpp:943 msgid "" "If expressed as absolute value in mm/s, this speed will be applied to all " "the print moves of the first layer, regardless of their type. If expressed " "as a percentage (for example: 40%) it will scale the default speeds." msgstr "" -#: src/libslic3r/PrintConfig.cpp:911 +#: src/libslic3r/PrintConfig.cpp:953 +msgid "First layer extruder temperature" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:954 msgid "" "Extruder temperature for first layer. If you want to control temperature " "manually during print, set this to zero to disable temperature control " "commands in the output file." msgstr "" -#: src/libslic3r/PrintConfig.cpp:920 +#: src/libslic3r/PrintConfig.cpp:964 msgid "" "Speed for filling small gaps using short zigzag moves. Keep this reasonably " "low to avoid too much shaking and resonance issues. Set zero to disable gaps " "filling." msgstr "" -#: src/libslic3r/PrintConfig.cpp:928 +#: src/libslic3r/PrintConfig.cpp:972 msgid "Verbose G-code" msgstr "" -#: src/libslic3r/PrintConfig.cpp:929 +#: src/libslic3r/PrintConfig.cpp:973 msgid "" "Enable this to get a commented G-code file, with each line explained by a " "descriptive text. If you print from SD card, the additional weight of the " "file could make your firmware slow down." msgstr "" -#: src/libslic3r/PrintConfig.cpp:936 +#: src/libslic3r/PrintConfig.cpp:980 msgid "G-code flavor" msgstr "" -#: src/libslic3r/PrintConfig.cpp:937 +#: src/libslic3r/PrintConfig.cpp:981 msgid "" "Some G/M-code commands, including temperature control and others, are not " "universal. Set this option to your printer's firmware to get a compatible " @@ -7642,15 +8852,15 @@ msgid "" "extrusion value at all." msgstr "" -#: src/libslic3r/PrintConfig.cpp:960 +#: src/libslic3r/PrintConfig.cpp:1004 msgid "No extrusion" msgstr "" -#: src/libslic3r/PrintConfig.cpp:965 +#: src/libslic3r/PrintConfig.cpp:1009 msgid "Label objects" msgstr "" -#: src/libslic3r/PrintConfig.cpp:966 +#: src/libslic3r/PrintConfig.cpp:1010 msgid "" "Enable this to add comments into the G-Code labeling print moves with what " "object they belong to, which is useful for the Octoprint CancelObject " @@ -7658,46 +8868,46 @@ msgid "" "setup and Wipe into Object / Wipe into Infill." msgstr "" -#: src/libslic3r/PrintConfig.cpp:973 +#: src/libslic3r/PrintConfig.cpp:1017 msgid "High extruder current on filament swap" msgstr "" -#: src/libslic3r/PrintConfig.cpp:974 +#: src/libslic3r/PrintConfig.cpp:1018 msgid "" "It may be beneficial to increase the extruder motor current during the " "filament exchange sequence to allow for rapid ramming feed rates and to " "overcome resistance when loading a filament with an ugly shaped tip." msgstr "" -#: src/libslic3r/PrintConfig.cpp:982 +#: src/libslic3r/PrintConfig.cpp:1026 msgid "" "This is the acceleration your printer will use for infill. Set zero to " "disable acceleration control for infill." msgstr "" -#: src/libslic3r/PrintConfig.cpp:990 +#: src/libslic3r/PrintConfig.cpp:1034 msgid "Combine infill every" msgstr "" -#: src/libslic3r/PrintConfig.cpp:992 +#: src/libslic3r/PrintConfig.cpp:1036 msgid "" "This feature allows to combine infill and speed up your print by extruding " "thicker infill layers while preserving thin perimeters, thus accuracy." msgstr "" -#: src/libslic3r/PrintConfig.cpp:995 +#: src/libslic3r/PrintConfig.cpp:1039 msgid "Combine infill every n layers" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1001 +#: src/libslic3r/PrintConfig.cpp:1045 msgid "Infill extruder" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1003 +#: src/libslic3r/PrintConfig.cpp:1047 msgid "The extruder to use when printing infill." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1011 +#: src/libslic3r/PrintConfig.cpp:1055 msgid "" "Set this to a non-zero value to set a manual extrusion width for infill. If " "left zero, default extrusion width will be used if set, otherwise 1.125 x " @@ -7706,32 +8916,32 @@ msgid "" "example 90%) it will be computed over layer height." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1021 +#: src/libslic3r/PrintConfig.cpp:1065 msgid "Infill before perimeters" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1022 +#: src/libslic3r/PrintConfig.cpp:1066 msgid "" "This option will switch the print order of perimeters and infill, making the " "latter first." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1027 +#: src/libslic3r/PrintConfig.cpp:1071 msgid "Only infill where needed" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1029 +#: src/libslic3r/PrintConfig.cpp:1073 msgid "" "This option will limit infill to the areas actually needed for supporting " "ceilings (it will act as internal support material). If enabled, slows down " "the G-code generation due to the multiple checks involved." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1036 +#: src/libslic3r/PrintConfig.cpp:1080 msgid "Infill/perimeters overlap" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1038 +#: src/libslic3r/PrintConfig.cpp:1082 msgid "" "This setting applies an additional overlap between infill and perimeters for " "better bonding. Theoretically this shouldn't be needed, but backlash might " @@ -7739,30 +8949,63 @@ msgid "" "perimeter extrusion width." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1049 +#: src/libslic3r/PrintConfig.cpp:1093 msgid "Speed for printing the internal fill. Set to zero for auto." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1057 +#: src/libslic3r/PrintConfig.cpp:1101 msgid "Inherits profile" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1058 +#: src/libslic3r/PrintConfig.cpp:1102 msgid "Name of the profile, from which this profile inherits." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1071 +#: src/libslic3r/PrintConfig.cpp:1115 msgid "Interface shells" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1072 +#: src/libslic3r/PrintConfig.cpp:1116 msgid "" "Force the generation of solid shells between adjacent materials/volumes. " "Useful for multi-extruder prints with translucent materials or manual " "soluble support material." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1081 +#: src/libslic3r/PrintConfig.cpp:1124 +msgid "Enable ironing" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:1125 +msgid "" +"Enable ironing of the top layers with the hot print head for smooth surface" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:1131 src/libslic3r/PrintConfig.cpp:1133 +msgid "Ironing Type" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:1145 +msgid "Flow rate" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:1147 +msgid "Percent of a flow rate relative to object's normal layer height." +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:1155 +msgid "Spacing between ironing passes" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:1157 +msgid "Distance between ironing lines" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:1164 src/libslic3r/PrintConfig.cpp:1166 +msgid "Ironing speed" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:1174 msgid "" "This custom code is inserted at every layer change, right after the Z move " "and before the extruder moves to the first layer point. Note that you can " @@ -7770,11 +9013,11 @@ msgid "" "[layer_z]." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1092 +#: src/libslic3r/PrintConfig.cpp:1185 msgid "Supports remaining times" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1093 +#: src/libslic3r/PrintConfig.cpp:1186 msgid "" "Emit M73 P[percent printed] R[remaining time in minutes] at 1 minute " "intervals into the G-code to let the firmware show accurate remaining time. " @@ -7782,151 +9025,163 @@ msgid "" "firmware supports M73 Qxx Sxx for the silent mode." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1101 +#: src/libslic3r/PrintConfig.cpp:1194 msgid "Supports stealth mode" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1102 +#: src/libslic3r/PrintConfig.cpp:1195 msgid "The firmware supports stealth mode" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1125 +#: src/libslic3r/PrintConfig.cpp:1200 +msgid "How to apply" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:1201 +msgid "Purpose of Machine Limits" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:1203 +msgid "How to apply the Machine Limits" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:1233 msgid "Maximum feedrate X" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1126 +#: src/libslic3r/PrintConfig.cpp:1234 msgid "Maximum feedrate Y" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1127 +#: src/libslic3r/PrintConfig.cpp:1235 msgid "Maximum feedrate Z" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1128 +#: src/libslic3r/PrintConfig.cpp:1236 msgid "Maximum feedrate E" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1131 +#: src/libslic3r/PrintConfig.cpp:1239 msgid "Maximum feedrate of the X axis" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1132 +#: src/libslic3r/PrintConfig.cpp:1240 msgid "Maximum feedrate of the Y axis" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1133 +#: src/libslic3r/PrintConfig.cpp:1241 msgid "Maximum feedrate of the Z axis" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1134 +#: src/libslic3r/PrintConfig.cpp:1242 msgid "Maximum feedrate of the E axis" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1142 +#: src/libslic3r/PrintConfig.cpp:1250 msgid "Maximum acceleration X" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1143 +#: src/libslic3r/PrintConfig.cpp:1251 msgid "Maximum acceleration Y" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1144 +#: src/libslic3r/PrintConfig.cpp:1252 msgid "Maximum acceleration Z" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1145 +#: src/libslic3r/PrintConfig.cpp:1253 msgid "Maximum acceleration E" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1148 +#: src/libslic3r/PrintConfig.cpp:1256 msgid "Maximum acceleration of the X axis" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1149 +#: src/libslic3r/PrintConfig.cpp:1257 msgid "Maximum acceleration of the Y axis" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1150 +#: src/libslic3r/PrintConfig.cpp:1258 msgid "Maximum acceleration of the Z axis" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1151 +#: src/libslic3r/PrintConfig.cpp:1259 msgid "Maximum acceleration of the E axis" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1159 +#: src/libslic3r/PrintConfig.cpp:1267 msgid "Maximum jerk X" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1160 +#: src/libslic3r/PrintConfig.cpp:1268 msgid "Maximum jerk Y" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1161 +#: src/libslic3r/PrintConfig.cpp:1269 msgid "Maximum jerk Z" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1162 +#: src/libslic3r/PrintConfig.cpp:1270 msgid "Maximum jerk E" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1165 +#: src/libslic3r/PrintConfig.cpp:1273 msgid "Maximum jerk of the X axis" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1166 +#: src/libslic3r/PrintConfig.cpp:1274 msgid "Maximum jerk of the Y axis" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1167 +#: src/libslic3r/PrintConfig.cpp:1275 msgid "Maximum jerk of the Z axis" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1168 +#: src/libslic3r/PrintConfig.cpp:1276 msgid "Maximum jerk of the E axis" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1178 +#: src/libslic3r/PrintConfig.cpp:1286 msgid "Minimum feedrate when extruding" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1180 +#: src/libslic3r/PrintConfig.cpp:1288 msgid "Minimum feedrate when extruding (M205 S)" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1188 +#: src/libslic3r/PrintConfig.cpp:1296 msgid "Minimum travel feedrate" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1190 +#: src/libslic3r/PrintConfig.cpp:1298 msgid "Minimum travel feedrate (M205 T)" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1198 +#: src/libslic3r/PrintConfig.cpp:1306 msgid "Maximum acceleration when extruding" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1200 +#: src/libslic3r/PrintConfig.cpp:1308 msgid "Maximum acceleration when extruding (M204 S)" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1208 +#: src/libslic3r/PrintConfig.cpp:1316 msgid "Maximum acceleration when retracting" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1210 +#: src/libslic3r/PrintConfig.cpp:1318 msgid "Maximum acceleration when retracting (M204 T)" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1217 src/libslic3r/PrintConfig.cpp:1226 +#: src/libslic3r/PrintConfig.cpp:1325 src/libslic3r/PrintConfig.cpp:1334 msgid "Max" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1218 +#: src/libslic3r/PrintConfig.cpp:1326 msgid "This setting represents the maximum speed of your fan." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1227 +#: src/libslic3r/PrintConfig.cpp:1335 #, possible-c-format msgid "" "This is the highest printable layer height for this extruder, used to cap " @@ -7935,28 +9190,28 @@ msgid "" "adhesion. If set to 0, layer height is limited to 75% of the nozzle diameter." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1237 +#: src/libslic3r/PrintConfig.cpp:1345 msgid "Max print speed" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1238 +#: src/libslic3r/PrintConfig.cpp:1346 msgid "" "When setting other speed settings to 0 Slic3r will autocalculate the optimal " "speed in order to keep constant extruder pressure. This experimental setting " "is used to set the highest print speed you want to allow." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1248 +#: src/libslic3r/PrintConfig.cpp:1356 msgid "" "This experimental setting is used to set the maximum volumetric speed your " "extruder supports." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1257 +#: src/libslic3r/PrintConfig.cpp:1365 msgid "Max volumetric slope positive" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1258 src/libslic3r/PrintConfig.cpp:1269 +#: src/libslic3r/PrintConfig.cpp:1366 src/libslic3r/PrintConfig.cpp:1377 msgid "" "This experimental setting is used to limit the speed of change in extrusion " "rate. A value of 1.8 mm³/s² ensures, that a change from the extrusion rate " @@ -7964,95 +9219,95 @@ msgid "" "s) to 5.4 mm³/s (feedrate 60 mm/s) will take at least 2 seconds." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1262 src/libslic3r/PrintConfig.cpp:1273 +#: src/libslic3r/PrintConfig.cpp:1370 src/libslic3r/PrintConfig.cpp:1381 msgid "mm³/s²" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1268 +#: src/libslic3r/PrintConfig.cpp:1376 msgid "Max volumetric slope negative" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1280 src/libslic3r/PrintConfig.cpp:1289 +#: src/libslic3r/PrintConfig.cpp:1388 src/libslic3r/PrintConfig.cpp:1397 msgid "Min" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1281 +#: src/libslic3r/PrintConfig.cpp:1389 msgid "This setting represents the minimum PWM your fan needs to work." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1290 +#: src/libslic3r/PrintConfig.cpp:1398 msgid "" "This is the lowest printable layer height for this extruder and limits the " "resolution for variable layer height. Typical values are between 0.05 mm and " "0.1 mm." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1298 +#: src/libslic3r/PrintConfig.cpp:1406 msgid "Min print speed" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1299 +#: src/libslic3r/PrintConfig.cpp:1407 msgid "Slic3r will not scale speed down below this speed." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1306 +#: src/libslic3r/PrintConfig.cpp:1414 msgid "Minimal filament extrusion length" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1307 +#: src/libslic3r/PrintConfig.cpp:1415 msgid "" "Generate no less than the number of skirt loops required to consume the " "specified amount of filament on the bottom layer. For multi-extruder " "machines, this minimum applies to each extruder." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1316 +#: src/libslic3r/PrintConfig.cpp:1424 msgid "Configuration notes" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1317 +#: src/libslic3r/PrintConfig.cpp:1425 msgid "" "You can put here your personal notes. This text will be added to the G-code " "header comments." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1327 +#: src/libslic3r/PrintConfig.cpp:1435 msgid "" "This is the diameter of your extruder nozzle (for example: 0.5, 0.35 etc.)" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1332 +#: src/libslic3r/PrintConfig.cpp:1440 msgid "Host Type" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1333 +#: src/libslic3r/PrintConfig.cpp:1441 msgid "" "Slic3r can upload G-code files to a printer host. This field must contain " "the kind of the host." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1348 +#: src/libslic3r/PrintConfig.cpp:1456 msgid "Only retract when crossing perimeters" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1349 +#: src/libslic3r/PrintConfig.cpp:1457 msgid "" "Disables retraction when the travel path does not exceed the upper layer's " "perimeters (and thus any ooze will be probably invisible)." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1356 +#: src/libslic3r/PrintConfig.cpp:1464 msgid "" "This option will drop the temperature of the inactive extruders to prevent " "oozing. It will enable a tall skirt automatically and move extruders outside " "such skirt when changing temperatures." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1363 +#: src/libslic3r/PrintConfig.cpp:1471 msgid "Output filename format" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1364 +#: src/libslic3r/PrintConfig.cpp:1472 msgid "" "You can use all configuration options as variables inside this template. For " "example: [layer_height], [fill_density] etc. You can also use [timestamp], " @@ -8060,31 +9315,31 @@ msgid "" "[input_filename], [input_filename_base]." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1373 +#: src/libslic3r/PrintConfig.cpp:1481 msgid "Detect bridging perimeters" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1375 +#: src/libslic3r/PrintConfig.cpp:1483 msgid "" "Experimental option to adjust flow for overhangs (bridge flow will be used), " "to apply bridge speed to them and enable fan." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1381 +#: src/libslic3r/PrintConfig.cpp:1489 msgid "Filament parking position" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1382 +#: src/libslic3r/PrintConfig.cpp:1490 msgid "" "Distance of the extruder tip from the position where the filament is parked " "when unloaded. This should match the value in printer firmware." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1390 +#: src/libslic3r/PrintConfig.cpp:1498 msgid "Extra loading distance" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1391 +#: src/libslic3r/PrintConfig.cpp:1499 msgid "" "When set to zero, the distance the filament is moved from parking position " "during load is exactly the same as it was moved back during unload. When " @@ -8092,28 +9347,28 @@ msgid "" "than unloading." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1399 src/libslic3r/PrintConfig.cpp:1417 -#: src/libslic3r/PrintConfig.cpp:1430 src/libslic3r/PrintConfig.cpp:1440 +#: src/libslic3r/PrintConfig.cpp:1507 src/libslic3r/PrintConfig.cpp:1525 +#: src/libslic3r/PrintConfig.cpp:1538 src/libslic3r/PrintConfig.cpp:1548 msgid "Perimeters" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1400 +#: src/libslic3r/PrintConfig.cpp:1508 msgid "" "This is the acceleration your printer will use for perimeters. A high value " "like 9000 usually gives good results if your hardware is up to the job. Set " "zero to disable acceleration control for perimeters." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1408 +#: src/libslic3r/PrintConfig.cpp:1516 msgid "Perimeter extruder" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1410 +#: src/libslic3r/PrintConfig.cpp:1518 msgid "" "The extruder to use when printing perimeters and brim. First extruder is 1." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1419 +#: src/libslic3r/PrintConfig.cpp:1527 msgid "" "Set this to a non-zero value to set a manual extrusion width for perimeters. " "You may want to use thinner extrudates to get more accurate surfaces. If " @@ -8122,12 +9377,12 @@ msgid "" "it will be computed over layer height." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1432 +#: src/libslic3r/PrintConfig.cpp:1540 msgid "" "Speed for perimeters (contours, aka vertical shells). Set to zero for auto." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1442 +#: src/libslic3r/PrintConfig.cpp:1550 msgid "" "This option sets the number of perimeters to generate for each layer. Note " "that Slic3r may increase this number automatically when it detects sloping " @@ -8135,11 +9390,11 @@ msgid "" "Perimeters option is enabled." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1446 +#: src/libslic3r/PrintConfig.cpp:1554 msgid "(minimum)" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1454 +#: src/libslic3r/PrintConfig.cpp:1562 msgid "" "If you want to process the output G-code through custom scripts, just list " "their absolute paths here. Separate multiple scripts with a semicolon. " @@ -8148,55 +9403,55 @@ msgid "" "environment variables." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1466 +#: src/libslic3r/PrintConfig.cpp:1574 msgid "Printer type" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1467 +#: src/libslic3r/PrintConfig.cpp:1575 msgid "Type of the printer." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1472 +#: src/libslic3r/PrintConfig.cpp:1580 msgid "Printer notes" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1473 +#: src/libslic3r/PrintConfig.cpp:1581 msgid "You can put your notes regarding the printer here." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1481 +#: src/libslic3r/PrintConfig.cpp:1589 msgid "Printer vendor" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1482 +#: src/libslic3r/PrintConfig.cpp:1590 msgid "Name of the printer vendor." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1487 +#: src/libslic3r/PrintConfig.cpp:1595 msgid "Printer variant" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1488 +#: src/libslic3r/PrintConfig.cpp:1596 msgid "" "Name of the printer variant. For example, the printer variants may be " "differentiated by a nozzle diameter." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1501 +#: src/libslic3r/PrintConfig.cpp:1609 msgid "Raft layers" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1503 +#: src/libslic3r/PrintConfig.cpp:1611 msgid "" "The object will be raised by this number of layers, and support material " "will be generated under it." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1511 +#: src/libslic3r/PrintConfig.cpp:1619 msgid "Resolution" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1512 +#: src/libslic3r/PrintConfig.cpp:1620 msgid "" "Minimum detail resolution, used to simplify the input file for speeding up " "the slicing job and reducing memory usage. High-resolution models often " @@ -8204,289 +9459,293 @@ msgid "" "simplification and use full resolution from input." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1522 +#: src/libslic3r/PrintConfig.cpp:1630 msgid "Minimum travel after retraction" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1523 +#: src/libslic3r/PrintConfig.cpp:1631 msgid "" "Retraction is not triggered when travel moves are shorter than this length." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1529 +#: src/libslic3r/PrintConfig.cpp:1637 msgid "Retract amount before wipe" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1530 +#: src/libslic3r/PrintConfig.cpp:1638 msgid "" "With bowden extruders, it may be wise to do some amount of quick retract " "before doing the wipe movement." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1537 +#: src/libslic3r/PrintConfig.cpp:1645 msgid "Retract on layer change" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1538 +#: src/libslic3r/PrintConfig.cpp:1646 msgid "This flag enforces a retraction whenever a Z move is done." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1543 src/libslic3r/PrintConfig.cpp:1551 +#: src/libslic3r/PrintConfig.cpp:1651 src/libslic3r/PrintConfig.cpp:1659 msgid "Length" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1544 +#: src/libslic3r/PrintConfig.cpp:1652 msgid "Retraction Length" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1545 +#: src/libslic3r/PrintConfig.cpp:1653 msgid "" "When retraction is triggered, filament is pulled back by the specified " "amount (the length is measured on raw filament, before it enters the " "extruder)." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1547 src/libslic3r/PrintConfig.cpp:1556 +#: src/libslic3r/PrintConfig.cpp:1655 src/libslic3r/PrintConfig.cpp:1664 msgid "mm (zero to disable)" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1552 +#: src/libslic3r/PrintConfig.cpp:1660 msgid "Retraction Length (Toolchange)" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1553 +#: src/libslic3r/PrintConfig.cpp:1661 msgid "" "When retraction is triggered before changing tool, filament is pulled back " "by the specified amount (the length is measured on raw filament, before it " "enters the extruder)." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1561 +#: src/libslic3r/PrintConfig.cpp:1669 msgid "Lift Z" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1562 +#: src/libslic3r/PrintConfig.cpp:1670 msgid "" "If you set this to a positive value, Z is quickly raised every time a " "retraction is triggered. When using multiple extruders, only the setting for " "the first extruder will be considered." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1569 +#: src/libslic3r/PrintConfig.cpp:1677 msgid "Above Z" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1570 +#: src/libslic3r/PrintConfig.cpp:1678 msgid "Only lift Z above" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1571 +#: src/libslic3r/PrintConfig.cpp:1679 msgid "" "If you set this to a positive value, Z lift will only take place above the " "specified absolute Z. You can tune this setting for skipping lift on the " "first layers." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1578 +#: src/libslic3r/PrintConfig.cpp:1686 msgid "Below Z" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1579 +#: src/libslic3r/PrintConfig.cpp:1687 msgid "Only lift Z below" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1580 +#: src/libslic3r/PrintConfig.cpp:1688 msgid "" "If you set this to a positive value, Z lift will only take place below the " "specified absolute Z. You can tune this setting for limiting lift to the " "first layers." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1588 src/libslic3r/PrintConfig.cpp:1596 +#: src/libslic3r/PrintConfig.cpp:1696 src/libslic3r/PrintConfig.cpp:1704 msgid "Extra length on restart" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1589 +#: src/libslic3r/PrintConfig.cpp:1697 msgid "" "When the retraction is compensated after the travel move, the extruder will " "push this additional amount of filament. This setting is rarely needed." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1597 +#: src/libslic3r/PrintConfig.cpp:1705 msgid "" "When the retraction is compensated after changing tool, the extruder will " "push this additional amount of filament." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1604 src/libslic3r/PrintConfig.cpp:1605 +#: src/libslic3r/PrintConfig.cpp:1712 src/libslic3r/PrintConfig.cpp:1713 msgid "Retraction Speed" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1606 +#: src/libslic3r/PrintConfig.cpp:1714 msgid "The speed for retractions (it only applies to the extruder motor)." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1612 src/libslic3r/PrintConfig.cpp:1613 +#: src/libslic3r/PrintConfig.cpp:1720 src/libslic3r/PrintConfig.cpp:1721 msgid "Deretraction Speed" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1614 +#: src/libslic3r/PrintConfig.cpp:1722 msgid "" "The speed for loading of a filament into extruder after retraction (it only " "applies to the extruder motor). If left to zero, the retraction speed is " "used." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1621 +#: src/libslic3r/PrintConfig.cpp:1729 msgid "Seam position" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1623 +#: src/libslic3r/PrintConfig.cpp:1731 msgid "Position of perimeters starting points." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1629 +#: src/libslic3r/PrintConfig.cpp:1737 msgid "Random" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1630 +#: src/libslic3r/PrintConfig.cpp:1738 msgid "Nearest" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1631 +#: src/libslic3r/PrintConfig.cpp:1739 msgid "Aligned" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1639 +#: src/libslic3r/PrintConfig.cpp:1747 msgid "Direction" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1641 +#: src/libslic3r/PrintConfig.cpp:1749 msgid "Preferred direction of the seam" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1642 +#: src/libslic3r/PrintConfig.cpp:1750 msgid "Seam preferred direction" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1649 +#: src/libslic3r/PrintConfig.cpp:1757 msgid "Jitter" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1651 +#: src/libslic3r/PrintConfig.cpp:1759 msgid "Seam preferred direction jitter" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1652 +#: src/libslic3r/PrintConfig.cpp:1760 msgid "Preferred direction of the seam - jitter" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1662 +#: src/libslic3r/PrintConfig.cpp:1769 +msgid "Serial port" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:1770 msgid "USB/serial port for printer connection." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1669 +#: src/libslic3r/PrintConfig.cpp:1777 msgid "Serial port speed" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1670 +#: src/libslic3r/PrintConfig.cpp:1778 msgid "Speed (baud) of USB/serial port for printer connection." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1679 +#: src/libslic3r/PrintConfig.cpp:1787 msgid "Distance from object" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1680 +#: src/libslic3r/PrintConfig.cpp:1788 msgid "" "Distance between skirt and object(s). Set this to zero to attach the skirt " "to the object(s) and get a brim for better adhesion." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1687 +#: src/libslic3r/PrintConfig.cpp:1795 msgid "Skirt height" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1688 +#: src/libslic3r/PrintConfig.cpp:1796 msgid "" "Height of skirt expressed in layers. Set this to a tall value to use skirt " "as a shield against drafts." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1695 +#: src/libslic3r/PrintConfig.cpp:1803 msgid "Draft shield" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1696 +#: src/libslic3r/PrintConfig.cpp:1804 msgid "" "If enabled, the skirt will be as tall as a highest printed object. This is " "useful to protect an ABS or ASA print from warping and detaching from print " "bed due to wind draft." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1702 +#: src/libslic3r/PrintConfig.cpp:1810 msgid "Loops (minimum)" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1703 +#: src/libslic3r/PrintConfig.cpp:1811 msgid "Skirt Loops" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1704 +#: src/libslic3r/PrintConfig.cpp:1812 msgid "" "Number of loops for the skirt. If the Minimum Extrusion Length option is " "set, the number of loops might be greater than the one configured here. Set " "this to zero to disable skirt completely." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1712 +#: src/libslic3r/PrintConfig.cpp:1820 msgid "Slow down if layer print time is below" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1713 +#: src/libslic3r/PrintConfig.cpp:1821 msgid "" "If layer print time is estimated below this number of seconds, print moves " "speed will be scaled down to extend duration to this value." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1722 +#: src/libslic3r/PrintConfig.cpp:1830 msgid "Small perimeters" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1724 +#: src/libslic3r/PrintConfig.cpp:1832 msgid "" "This separate setting will affect the speed of perimeters having radius <= " "6.5mm (usually holes). If expressed as percentage (for example: 80%) it will " "be calculated on the perimeters speed setting above. Set to zero for auto." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1734 +#: src/libslic3r/PrintConfig.cpp:1842 msgid "Solid infill threshold area" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1736 +#: src/libslic3r/PrintConfig.cpp:1844 msgid "" "Force solid infill for regions having a smaller area than the specified " "threshold." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1737 +#: src/libslic3r/PrintConfig.cpp:1845 msgid "mm²" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1743 +#: src/libslic3r/PrintConfig.cpp:1851 msgid "Solid infill extruder" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1745 +#: src/libslic3r/PrintConfig.cpp:1853 msgid "The extruder to use when printing solid infill." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1751 +#: src/libslic3r/PrintConfig.cpp:1859 msgid "Solid infill every" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1753 +#: src/libslic3r/PrintConfig.cpp:1861 msgid "" "This feature allows to force a solid layer every given number of layers. " "Zero to disable. You can set this to any value (for example 9999); Slic3r " @@ -8494,7 +9753,7 @@ msgid "" "according to nozzle diameter and layer height." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1765 +#: src/libslic3r/PrintConfig.cpp:1873 msgid "" "Set this to a non-zero value to set a manual extrusion width for infill for " "solid surfaces. If left zero, default extrusion width will be used if set, " @@ -8502,26 +9761,26 @@ msgid "" "(for example 90%) it will be computed over layer height." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1776 +#: src/libslic3r/PrintConfig.cpp:1884 msgid "" "Speed for printing solid regions (top/bottom/internal horizontal shells). " "This can be expressed as a percentage (for example: 80%) over the default " "infill speed above. Set to zero for auto." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1788 +#: src/libslic3r/PrintConfig.cpp:1896 msgid "Number of solid layers to generate on top and bottom surfaces." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1794 src/libslic3r/PrintConfig.cpp:1795 +#: src/libslic3r/PrintConfig.cpp:1902 src/libslic3r/PrintConfig.cpp:1903 msgid "Minimum thickness of a top / bottom shell" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1801 +#: src/libslic3r/PrintConfig.cpp:1909 msgid "Spiral vase" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1802 +#: src/libslic3r/PrintConfig.cpp:1910 msgid "" "This feature will raise Z gradually while printing a single-walled object in " "order to remove any visible seam. This option requires a single perimeter, " @@ -8530,18 +9789,18 @@ msgid "" "when printing more than an object." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1810 +#: src/libslic3r/PrintConfig.cpp:1918 msgid "Temperature variation" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1811 +#: src/libslic3r/PrintConfig.cpp:1919 msgid "" "Temperature difference to be applied when an extruder is not active. Enables " "a full-height \"sacrificial\" skirt on which the nozzles are periodically " "wiped." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1821 +#: src/libslic3r/PrintConfig.cpp:1929 msgid "" "This start procedure is inserted at the beginning, after bed has reached the " "target temperature and extruder just started heating, and before extruder " @@ -8552,7 +9811,7 @@ msgid "" "put a \"M109 S[first_layer_temperature]\" command wherever you want." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1836 +#: src/libslic3r/PrintConfig.cpp:1944 msgid "" "This start procedure is inserted at the beginning, after any printer start " "gcode (and after any toolchange to this filament in case of multi-material " @@ -8565,29 +9824,45 @@ msgid "" "extruders, the gcode is processed in extruder order." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1852 +#: src/libslic3r/PrintConfig.cpp:1960 +msgid "Color change G-code" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:1961 +msgid "This G-code will be used as a code for the color change" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:1970 +msgid "This G-code will be used as a code for the pause print" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:1979 +msgid "This G-code will be used as a custom code" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:1987 msgid "Single Extruder Multi Material" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1853 +#: src/libslic3r/PrintConfig.cpp:1988 msgid "The printer multiplexes filaments into a single hot end." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1858 +#: src/libslic3r/PrintConfig.cpp:1993 msgid "Prime all printing extruders" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1859 +#: src/libslic3r/PrintConfig.cpp:1994 msgid "" "If enabled, all printing extruders will be primed at the front edge of the " "print bed at the start of the print." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1864 +#: src/libslic3r/PrintConfig.cpp:1999 msgid "No sparse layers (EXPERIMENTAL)" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1865 +#: src/libslic3r/PrintConfig.cpp:2000 msgid "" "If enabled, the wipe tower will not be printed on layers with no " "toolchanges. On layers with a toolchange, extruder will travel downward to " @@ -8595,75 +9870,75 @@ msgid "" "with the print." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1872 +#: src/libslic3r/PrintConfig.cpp:2007 msgid "Generate support material" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1874 +#: src/libslic3r/PrintConfig.cpp:2009 msgid "Enable support material generation." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1878 +#: src/libslic3r/PrintConfig.cpp:2013 msgid "Auto generated supports" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1880 +#: src/libslic3r/PrintConfig.cpp:2015 msgid "" "If checked, supports will be generated automatically based on the overhang " "threshold value. If unchecked, supports will be generated inside the " "\"Support Enforcer\" volumes only." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1886 +#: src/libslic3r/PrintConfig.cpp:2021 msgid "XY separation between an object and its support" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1888 +#: src/libslic3r/PrintConfig.cpp:2023 msgid "" "XY separation between an object and its support. If expressed as percentage " "(for example 50%), it will be calculated over external perimeter width." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1898 +#: src/libslic3r/PrintConfig.cpp:2033 msgid "Pattern angle" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1900 +#: src/libslic3r/PrintConfig.cpp:2035 msgid "" "Use this setting to rotate the support material pattern on the horizontal " "plane." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1910 src/libslic3r/PrintConfig.cpp:2693 +#: src/libslic3r/PrintConfig.cpp:2045 src/libslic3r/PrintConfig.cpp:2840 msgid "" "Only create support if it lies on a build plate. Don't create support on a " "print." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1916 +#: src/libslic3r/PrintConfig.cpp:2051 msgid "Contact Z distance" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1918 +#: src/libslic3r/PrintConfig.cpp:2053 msgid "" "The vertical distance between object and support material interface. Setting " "this to 0 will also prevent Slic3r from using bridge flow and speed for the " "first object layer." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1925 +#: src/libslic3r/PrintConfig.cpp:2060 msgid "0 (soluble)" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1926 +#: src/libslic3r/PrintConfig.cpp:2061 msgid "0.2 (detachable)" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1931 +#: src/libslic3r/PrintConfig.cpp:2066 msgid "Enforce support for the first" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1933 +#: src/libslic3r/PrintConfig.cpp:2068 msgid "" "Generate support material for the specified number of layers counting from " "bottom, regardless of whether normal support material is enabled or not and " @@ -8671,21 +9946,21 @@ msgid "" "of objects having a very thin or poor footprint on the build plate." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1938 +#: src/libslic3r/PrintConfig.cpp:2073 msgid "Enforce support for the first n layers" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1944 +#: src/libslic3r/PrintConfig.cpp:2079 msgid "Support material/raft/skirt extruder" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1946 +#: src/libslic3r/PrintConfig.cpp:2081 msgid "" "The extruder to use when printing support material, raft and skirt (1+, 0 to " "use the current extruder to minimize tool changes)." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1955 +#: src/libslic3r/PrintConfig.cpp:2090 msgid "" "Set this to a non-zero value to set a manual extrusion width for support " "material. If left zero, default extrusion width will be used if set, " @@ -8693,89 +9968,89 @@ msgid "" "example 90%) it will be computed over layer height." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1964 +#: src/libslic3r/PrintConfig.cpp:2099 msgid "Interface loops" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1966 +#: src/libslic3r/PrintConfig.cpp:2101 msgid "" "Cover the top contact layer of the supports with loops. Disabled by default." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1971 +#: src/libslic3r/PrintConfig.cpp:2106 msgid "Support material/raft interface extruder" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1973 +#: src/libslic3r/PrintConfig.cpp:2108 msgid "" "The extruder to use when printing support material interface (1+, 0 to use " "the current extruder to minimize tool changes). This affects raft too." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1980 +#: src/libslic3r/PrintConfig.cpp:2115 msgid "Interface layers" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1982 +#: src/libslic3r/PrintConfig.cpp:2117 msgid "" "Number of interface layers to insert between the object(s) and support " "material." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1989 +#: src/libslic3r/PrintConfig.cpp:2124 msgid "Interface pattern spacing" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1991 +#: src/libslic3r/PrintConfig.cpp:2126 msgid "Spacing between interface lines. Set zero to get a solid interface." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2000 +#: src/libslic3r/PrintConfig.cpp:2135 msgid "" "Speed for printing support material interface layers. If expressed as " "percentage (for example 50%) it will be calculated over support material " "speed." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2009 +#: src/libslic3r/PrintConfig.cpp:2144 msgid "Pattern" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2011 +#: src/libslic3r/PrintConfig.cpp:2146 msgid "Pattern used to generate support material." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2017 +#: src/libslic3r/PrintConfig.cpp:2152 msgid "Rectilinear grid" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2023 +#: src/libslic3r/PrintConfig.cpp:2158 msgid "Pattern spacing" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2025 +#: src/libslic3r/PrintConfig.cpp:2160 msgid "Spacing between support material lines." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2034 +#: src/libslic3r/PrintConfig.cpp:2169 msgid "Speed for printing support material." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2041 +#: src/libslic3r/PrintConfig.cpp:2176 msgid "Synchronize with object layers" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2043 +#: src/libslic3r/PrintConfig.cpp:2178 msgid "" "Synchronize support layers with the object print layers. This is useful with " "multi-material printers, where the extruder switch is expensive." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2049 +#: src/libslic3r/PrintConfig.cpp:2184 msgid "Overhang threshold" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2051 +#: src/libslic3r/PrintConfig.cpp:2186 msgid "" "Support material will not be generated for overhangs whose slope angle (90° " "= vertical) is above the given threshold. In other words, this value " @@ -8784,43 +10059,47 @@ msgid "" "detection (recommended)." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2063 +#: src/libslic3r/PrintConfig.cpp:2198 msgid "With sheath around the support" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2065 +#: src/libslic3r/PrintConfig.cpp:2200 msgid "" "Add a sheath (a single perimeter line) around the base support. This makes " "the support more reliable, but also more difficult to remove." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2072 +#: src/libslic3r/PrintConfig.cpp:2207 msgid "" "Extruder temperature for layers after the first one. Set this to zero to " "disable temperature control commands in the output." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2080 +#: src/libslic3r/PrintConfig.cpp:2210 +msgid "Extruder temperature" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:2216 msgid "Detect thin walls" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2082 +#: src/libslic3r/PrintConfig.cpp:2218 msgid "" "Detect single-width walls (parts where two extrusions don't fit and we need " "to collapse them into a single trace)." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2088 +#: src/libslic3r/PrintConfig.cpp:2224 msgid "Threads" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2089 +#: src/libslic3r/PrintConfig.cpp:2225 msgid "" "Threads are used to parallelize long-running tasks. Optimal threads number " "is slightly above the number of available cores/processors." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2101 +#: src/libslic3r/PrintConfig.cpp:2237 msgid "" "This custom code is inserted before every toolchange. Placeholder variables " "for all PrusaSlicer settings as well as {previous_extruder} and " @@ -8830,7 +10109,7 @@ msgid "" "behaviour both before and after the toolchange." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2114 +#: src/libslic3r/PrintConfig.cpp:2250 msgid "" "Set this to a non-zero value to set a manual extrusion width for infill for " "top surfaces. You may want to use thinner extrudates to fill all narrow " @@ -8839,7 +10118,7 @@ msgid "" "percentage (for example 90%) it will be computed over layer height." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2126 +#: src/libslic3r/PrintConfig.cpp:2262 msgid "" "Speed for printing top solid layers (it only applies to the uppermost " "external layers and not to their internal solid layers). You may want to " @@ -8848,54 +10127,54 @@ msgid "" "for auto." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2141 +#: src/libslic3r/PrintConfig.cpp:2277 msgid "Number of solid layers to generate on top surfaces." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2142 +#: src/libslic3r/PrintConfig.cpp:2278 msgid "Top solid layers" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2150 +#: src/libslic3r/PrintConfig.cpp:2286 msgid "" "The number of top solid layers is increased above top_solid_layers if " "necessary to satisfy minimum thickness of top shell. This is useful to " "prevent pillowing effect when printing with variable layer height." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2153 +#: src/libslic3r/PrintConfig.cpp:2289 msgid "Minimum top shell thickness" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2160 +#: src/libslic3r/PrintConfig.cpp:2296 msgid "Speed for travel moves (jumps between distant extrusion points)." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2168 +#: src/libslic3r/PrintConfig.cpp:2304 msgid "Use firmware retraction" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2169 +#: src/libslic3r/PrintConfig.cpp:2305 msgid "" "This experimental setting uses G10 and G11 commands to have the firmware " "handle the retraction. This is only supported in recent Marlin." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2175 +#: src/libslic3r/PrintConfig.cpp:2311 msgid "Use relative E distances" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2176 +#: src/libslic3r/PrintConfig.cpp:2312 msgid "" "If your firmware requires relative E values, check this, otherwise leave it " "unchecked. Most firmwares use absolute values." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2182 +#: src/libslic3r/PrintConfig.cpp:2318 msgid "Use volumetric E" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2183 +#: src/libslic3r/PrintConfig.cpp:2319 msgid "" "This experimental setting uses outputs the E values in cubic millimeters " "instead of linear millimeters. If your firmware doesn't already know " @@ -8905,127 +10184,127 @@ msgid "" "only supported in recent Marlin." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2193 +#: src/libslic3r/PrintConfig.cpp:2329 msgid "Enable variable layer height feature" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2194 +#: src/libslic3r/PrintConfig.cpp:2330 msgid "" "Some printers or printer setups may have difficulties printing with a " "variable layer height. Enabled by default." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2200 +#: src/libslic3r/PrintConfig.cpp:2336 msgid "Wipe while retracting" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2201 +#: src/libslic3r/PrintConfig.cpp:2337 msgid "" "This flag will move the nozzle while retracting to minimize the possible " "blob on leaky extruders." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2208 +#: src/libslic3r/PrintConfig.cpp:2344 msgid "" "Multi material printers may need to prime or purge extruders on tool " "changes. Extrude the excess material into the wipe tower." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2214 +#: src/libslic3r/PrintConfig.cpp:2350 msgid "Purging volumes - load/unload volumes" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2215 +#: src/libslic3r/PrintConfig.cpp:2351 msgid "" "This vector saves required volumes to change from/to each tool used on the " "wipe tower. These values are used to simplify creation of the full purging " "volumes below." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2221 +#: src/libslic3r/PrintConfig.cpp:2357 msgid "Purging volumes - matrix" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2222 +#: src/libslic3r/PrintConfig.cpp:2358 msgid "" "This matrix describes volumes (in cubic milimetres) required to purge the " "new filament on the wipe tower for any given pair of tools." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2231 +#: src/libslic3r/PrintConfig.cpp:2367 msgid "Position X" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2232 +#: src/libslic3r/PrintConfig.cpp:2368 msgid "X coordinate of the left front corner of a wipe tower" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2238 +#: src/libslic3r/PrintConfig.cpp:2374 msgid "Position Y" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2239 +#: src/libslic3r/PrintConfig.cpp:2375 msgid "Y coordinate of the left front corner of a wipe tower" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2246 +#: src/libslic3r/PrintConfig.cpp:2382 msgid "Width of a wipe tower" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2252 +#: src/libslic3r/PrintConfig.cpp:2388 msgid "Wipe tower rotation angle" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2253 +#: src/libslic3r/PrintConfig.cpp:2389 msgid "Wipe tower rotation angle with respect to x-axis." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2260 +#: src/libslic3r/PrintConfig.cpp:2396 msgid "Wipe into this object's infill" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2261 +#: src/libslic3r/PrintConfig.cpp:2397 msgid "" "Purging after toolchange will done inside this object's infills. This lowers " "the amount of waste but may result in longer print time due to additional " "travel moves." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2268 +#: src/libslic3r/PrintConfig.cpp:2404 msgid "Wipe into this object" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2269 +#: src/libslic3r/PrintConfig.cpp:2405 msgid "" "Object will be used to purge the nozzle after a toolchange to save material " "that would otherwise end up in the wipe tower and decrease print time. " "Colours of the objects will be mixed as a result." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2275 +#: src/libslic3r/PrintConfig.cpp:2411 msgid "Maximal bridging distance" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2276 +#: src/libslic3r/PrintConfig.cpp:2412 msgid "Maximal distance between supports on sparse infill sections." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2282 +#: src/libslic3r/PrintConfig.cpp:2418 msgid "XY Size Compensation" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2284 +#: src/libslic3r/PrintConfig.cpp:2420 msgid "" "The object will be grown/shrunk in the XY plane by the configured value " "(negative = inwards, positive = outwards). This might be useful for fine-" "tuning hole sizes." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2292 +#: src/libslic3r/PrintConfig.cpp:2428 msgid "Z offset" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2293 +#: src/libslic3r/PrintConfig.cpp:2429 msgid "" "This value will be added (or subtracted) from all the Z coordinates in the " "output G-code. It is used to compensate for bad Z endstop position: for " @@ -9033,408 +10312,414 @@ msgid "" "print bed, set this to -0.3 (or fix your endstop)." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2360 +#: src/libslic3r/PrintConfig.cpp:2496 msgid "Display width" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2361 +#: src/libslic3r/PrintConfig.cpp:2497 msgid "Width of the display" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2366 +#: src/libslic3r/PrintConfig.cpp:2502 msgid "Display height" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2367 +#: src/libslic3r/PrintConfig.cpp:2503 msgid "Height of the display" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2372 +#: src/libslic3r/PrintConfig.cpp:2508 msgid "Number of pixels in" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2374 +#: src/libslic3r/PrintConfig.cpp:2510 msgid "Number of pixels in X" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2380 +#: src/libslic3r/PrintConfig.cpp:2516 msgid "Number of pixels in Y" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2385 +#: src/libslic3r/PrintConfig.cpp:2521 msgid "Display horizontal mirroring" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2386 +#: src/libslic3r/PrintConfig.cpp:2522 msgid "Mirror horizontally" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2387 +#: src/libslic3r/PrintConfig.cpp:2523 msgid "Enable horizontal mirroring of output images" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2392 +#: src/libslic3r/PrintConfig.cpp:2528 msgid "Display vertical mirroring" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2393 +#: src/libslic3r/PrintConfig.cpp:2529 msgid "Mirror vertically" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2394 +#: src/libslic3r/PrintConfig.cpp:2530 msgid "Enable vertical mirroring of output images" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2399 +#: src/libslic3r/PrintConfig.cpp:2535 msgid "Display orientation" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2400 +#: src/libslic3r/PrintConfig.cpp:2536 msgid "" "Set the actual LCD display orientation inside the SLA printer. Portrait mode " "will flip the meaning of display width and height parameters and the output " "images will be rotated by 90 degrees." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2406 +#: src/libslic3r/PrintConfig.cpp:2542 msgid "Landscape" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2407 +#: src/libslic3r/PrintConfig.cpp:2543 msgid "Portrait" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2412 +#: src/libslic3r/PrintConfig.cpp:2548 msgid "Fast" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2413 +#: src/libslic3r/PrintConfig.cpp:2549 msgid "Fast tilt" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2414 +#: src/libslic3r/PrintConfig.cpp:2550 msgid "Time of the fast tilt" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2421 +#: src/libslic3r/PrintConfig.cpp:2557 msgid "Slow" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2422 +#: src/libslic3r/PrintConfig.cpp:2558 msgid "Slow tilt" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2423 +#: src/libslic3r/PrintConfig.cpp:2559 msgid "Time of the slow tilt" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2430 +#: src/libslic3r/PrintConfig.cpp:2566 msgid "Area fill" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2431 +#: src/libslic3r/PrintConfig.cpp:2567 msgid "" "The percentage of the bed area. \n" "If the print area exceeds the specified value, \n" "then a slow tilt will be used, otherwise - a fast tilt" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2438 src/libslic3r/PrintConfig.cpp:2439 -#: src/libslic3r/PrintConfig.cpp:2440 +#: src/libslic3r/PrintConfig.cpp:2574 src/libslic3r/PrintConfig.cpp:2575 +#: src/libslic3r/PrintConfig.cpp:2576 msgid "Printer scaling correction" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2446 src/libslic3r/PrintConfig.cpp:2447 +#: src/libslic3r/PrintConfig.cpp:2582 src/libslic3r/PrintConfig.cpp:2583 msgid "Printer absolute correction" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2448 +#: src/libslic3r/PrintConfig.cpp:2584 msgid "" "Will inflate or deflate the sliced 2D polygons according to the sign of the " "correction." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2454 +#: src/libslic3r/PrintConfig.cpp:2590 msgid "Elephant foot minimum width" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2456 +#: src/libslic3r/PrintConfig.cpp:2592 msgid "" "Minimum width of features to maintain when doing elephant foot compensation." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2463 src/libslic3r/PrintConfig.cpp:2464 +#: src/libslic3r/PrintConfig.cpp:2599 src/libslic3r/PrintConfig.cpp:2600 msgid "Printer gamma correction" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2465 +#: src/libslic3r/PrintConfig.cpp:2601 msgid "" "This will apply a gamma correction to the rasterized 2D polygons. A gamma " "value of zero means thresholding with the threshold in the middle. This " "behaviour eliminates antialiasing without losing holes in polygons." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2477 src/libslic3r/PrintConfig.cpp:2478 +#: src/libslic3r/PrintConfig.cpp:2613 src/libslic3r/PrintConfig.cpp:2614 msgid "SLA material type" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2489 src/libslic3r/PrintConfig.cpp:2490 +#: src/libslic3r/PrintConfig.cpp:2625 src/libslic3r/PrintConfig.cpp:2626 msgid "Initial layer height" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2496 src/libslic3r/PrintConfig.cpp:2497 +#: src/libslic3r/PrintConfig.cpp:2632 src/libslic3r/PrintConfig.cpp:2633 msgid "Bottle volume" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2498 +#: src/libslic3r/PrintConfig.cpp:2634 msgid "ml" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2503 src/libslic3r/PrintConfig.cpp:2504 +#: src/libslic3r/PrintConfig.cpp:2639 src/libslic3r/PrintConfig.cpp:2640 msgid "Bottle weight" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2505 +#: src/libslic3r/PrintConfig.cpp:2641 msgid "kg" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2512 +#: src/libslic3r/PrintConfig.cpp:2648 msgid "g/ml" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2519 +#: src/libslic3r/PrintConfig.cpp:2655 msgid "money/bottle" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2524 +#: src/libslic3r/PrintConfig.cpp:2660 msgid "Faded layers" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2525 +#: src/libslic3r/PrintConfig.cpp:2661 msgid "" "Number of the layers needed for the exposure time fade from initial exposure " "time to the exposure time" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2532 src/libslic3r/PrintConfig.cpp:2533 +#: src/libslic3r/PrintConfig.cpp:2668 src/libslic3r/PrintConfig.cpp:2669 msgid "Minimum exposure time" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2540 src/libslic3r/PrintConfig.cpp:2541 +#: src/libslic3r/PrintConfig.cpp:2676 src/libslic3r/PrintConfig.cpp:2677 msgid "Maximum exposure time" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2548 src/libslic3r/PrintConfig.cpp:2549 +#: src/libslic3r/PrintConfig.cpp:2684 src/libslic3r/PrintConfig.cpp:2685 msgid "Exposure time" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2555 src/libslic3r/PrintConfig.cpp:2556 +#: src/libslic3r/PrintConfig.cpp:2691 src/libslic3r/PrintConfig.cpp:2692 msgid "Minimum initial exposure time" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2563 src/libslic3r/PrintConfig.cpp:2564 +#: src/libslic3r/PrintConfig.cpp:2699 src/libslic3r/PrintConfig.cpp:2700 msgid "Maximum initial exposure time" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2571 src/libslic3r/PrintConfig.cpp:2572 +#: src/libslic3r/PrintConfig.cpp:2707 src/libslic3r/PrintConfig.cpp:2708 msgid "Initial exposure time" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2578 src/libslic3r/PrintConfig.cpp:2579 +#: src/libslic3r/PrintConfig.cpp:2714 src/libslic3r/PrintConfig.cpp:2715 msgid "Correction for expansion" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2585 +#: src/libslic3r/PrintConfig.cpp:2721 msgid "SLA print material notes" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2586 +#: src/libslic3r/PrintConfig.cpp:2722 msgid "You can put your notes regarding the SLA print material here." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2598 src/libslic3r/PrintConfig.cpp:2609 +#: src/libslic3r/PrintConfig.cpp:2734 src/libslic3r/PrintConfig.cpp:2745 msgid "Default SLA material profile" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2620 +#: src/libslic3r/PrintConfig.cpp:2756 msgid "Generate supports" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2622 +#: src/libslic3r/PrintConfig.cpp:2758 msgid "Generate supports for the models" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2627 -msgid "Support head front diameter" +#: src/libslic3r/PrintConfig.cpp:2763 +msgid "Pinhead front diameter" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2629 +#: src/libslic3r/PrintConfig.cpp:2765 msgid "Diameter of the pointing side of the head" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2636 -msgid "Support head penetration" +#: src/libslic3r/PrintConfig.cpp:2772 +msgid "Head penetration" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2638 +#: src/libslic3r/PrintConfig.cpp:2774 msgid "How much the pinhead has to penetrate the model surface" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2645 -msgid "Support head width" +#: src/libslic3r/PrintConfig.cpp:2781 +msgid "Pinhead width" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2647 +#: src/libslic3r/PrintConfig.cpp:2783 msgid "Width from the back sphere center to the front sphere center" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2655 -msgid "Support pillar diameter" +#: src/libslic3r/PrintConfig.cpp:2791 +msgid "Pillar diameter" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2657 +#: src/libslic3r/PrintConfig.cpp:2793 msgid "Diameter in mm of the support pillars" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2665 +#: src/libslic3r/PrintConfig.cpp:2801 +msgid "Small pillar diameter percent" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:2803 +msgid "" +"The percentage of smaller pillars compared to the normal pillar diameter " +"which are used in problematic areas where a normal pilla cannot fit." +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:2812 msgid "Max bridges on a pillar" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2667 +#: src/libslic3r/PrintConfig.cpp:2814 msgid "" "Maximum number of bridges that can be placed on a pillar. Bridges hold " "support point pinheads and connect to pillars as small branches." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2675 -msgid "Support pillar connection mode" +#: src/libslic3r/PrintConfig.cpp:2822 +msgid "Pillar connection mode" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2676 +#: src/libslic3r/PrintConfig.cpp:2823 msgid "" "Controls the bridge type between two neighboring pillars. Can be zig-zag, " "cross (double zig-zag) or dynamic which will automatically switch between " "the first two depending on the distance of the two pillars." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2684 +#: src/libslic3r/PrintConfig.cpp:2831 msgid "Zig-Zag" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2685 +#: src/libslic3r/PrintConfig.cpp:2832 msgid "Cross" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2686 +#: src/libslic3r/PrintConfig.cpp:2833 msgid "Dynamic" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2698 +#: src/libslic3r/PrintConfig.cpp:2845 msgid "Pillar widening factor" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2700 +#: src/libslic3r/PrintConfig.cpp:2847 msgid "" "Merging bridges or pillars into another pillars can increase the radius. " "Zero means no increase, one means full increase." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2709 +#: src/libslic3r/PrintConfig.cpp:2856 msgid "Support base diameter" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2711 +#: src/libslic3r/PrintConfig.cpp:2858 msgid "Diameter in mm of the pillar base" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2719 +#: src/libslic3r/PrintConfig.cpp:2866 msgid "Support base height" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2721 +#: src/libslic3r/PrintConfig.cpp:2868 msgid "The height of the pillar base cone" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2728 +#: src/libslic3r/PrintConfig.cpp:2875 msgid "Support base safety distance" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2731 +#: src/libslic3r/PrintConfig.cpp:2878 msgid "" "The minimum distance of the pillar base from the model in mm. Makes sense in " "zero elevation mode where a gap according to this parameter is inserted " "between the model and the pad." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2741 +#: src/libslic3r/PrintConfig.cpp:2888 msgid "Critical angle" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2743 +#: src/libslic3r/PrintConfig.cpp:2890 msgid "The default angle for connecting support sticks and junctions." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2751 +#: src/libslic3r/PrintConfig.cpp:2898 msgid "Max bridge length" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2753 +#: src/libslic3r/PrintConfig.cpp:2900 msgid "The max length of a bridge" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2760 +#: src/libslic3r/PrintConfig.cpp:2907 msgid "Max pillar linking distance" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2762 +#: src/libslic3r/PrintConfig.cpp:2909 msgid "" "The max distance of two pillars to get linked with each other. A zero value " "will prohibit pillar cascading." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2770 -msgid "Object elevation" -msgstr "" - -#: src/libslic3r/PrintConfig.cpp:2772 +#: src/libslic3r/PrintConfig.cpp:2919 msgid "" "How much the supports should lift up the supported object. If \"Pad around " "object\" is enabled, this value is ignored." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2783 +#: src/libslic3r/PrintConfig.cpp:2930 msgid "This is a relative measure of support points density." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2789 +#: src/libslic3r/PrintConfig.cpp:2936 msgid "Minimal distance of the support points" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2791 +#: src/libslic3r/PrintConfig.cpp:2938 msgid "No support points will be placed closer than this threshold." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2797 +#: src/libslic3r/PrintConfig.cpp:2944 msgid "Use pad" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2799 +#: src/libslic3r/PrintConfig.cpp:2946 msgid "Add a pad underneath the supported model" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2804 +#: src/libslic3r/PrintConfig.cpp:2951 msgid "Pad wall thickness" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2806 +#: src/libslic3r/PrintConfig.cpp:2953 msgid "The thickness of the pad and its optional cavity walls." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2814 +#: src/libslic3r/PrintConfig.cpp:2961 msgid "Pad wall height" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2815 +#: src/libslic3r/PrintConfig.cpp:2962 msgid "" "Defines the pad cavity depth. Set to zero to disable the cavity. Be careful " "when enabling this feature, as some resins may produce an extreme suction " @@ -9442,115 +10727,107 @@ msgid "" "difficult." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2828 +#: src/libslic3r/PrintConfig.cpp:2975 msgid "Pad brim size" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2829 +#: src/libslic3r/PrintConfig.cpp:2976 msgid "How far should the pad extend around the contained geometry" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2839 +#: src/libslic3r/PrintConfig.cpp:2986 msgid "Max merge distance" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2841 +#: src/libslic3r/PrintConfig.cpp:2988 msgid "" "Some objects can get along with a few smaller pads instead of a single big " "one. This parameter defines how far the center of two smaller pads should " "be. If theyare closer, they will get merged into one pad." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2861 +#: src/libslic3r/PrintConfig.cpp:3008 msgid "Pad wall slope" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2863 +#: src/libslic3r/PrintConfig.cpp:3010 msgid "" "The slope of the pad wall relative to the bed plane. 90 degrees means " "straight walls." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2872 -msgid "Pad around object" -msgstr "" - -#: src/libslic3r/PrintConfig.cpp:2874 +#: src/libslic3r/PrintConfig.cpp:3021 msgid "Create pad around object and ignore the support elevation" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2879 +#: src/libslic3r/PrintConfig.cpp:3026 msgid "Pad around object everywhere" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2881 +#: src/libslic3r/PrintConfig.cpp:3028 msgid "Force pad around object everywhere" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2886 +#: src/libslic3r/PrintConfig.cpp:3033 msgid "Pad object gap" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2888 +#: src/libslic3r/PrintConfig.cpp:3035 msgid "" "The gap between the object bottom and the generated pad in zero elevation " "mode." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2897 +#: src/libslic3r/PrintConfig.cpp:3044 msgid "Pad object connector stride" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2899 +#: src/libslic3r/PrintConfig.cpp:3046 msgid "" "Distance between two connector sticks which connect the object and the " "generated pad." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2906 +#: src/libslic3r/PrintConfig.cpp:3053 msgid "Pad object connector width" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2908 +#: src/libslic3r/PrintConfig.cpp:3055 msgid "" "Width of the connector sticks which connect the object and the generated pad." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2915 +#: src/libslic3r/PrintConfig.cpp:3062 msgid "Pad object connector penetration" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2918 +#: src/libslic3r/PrintConfig.cpp:3065 msgid "How much should the tiny connectors penetrate into the model body." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2925 +#: src/libslic3r/PrintConfig.cpp:3072 msgid "Enable hollowing" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2927 +#: src/libslic3r/PrintConfig.cpp:3074 msgid "Hollow out a model to have an empty interior" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2932 +#: src/libslic3r/PrintConfig.cpp:3079 msgid "Wall thickness" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2934 +#: src/libslic3r/PrintConfig.cpp:3081 msgid "Minimum wall thickness of a hollowed model." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2942 -msgid "Accuracy" -msgstr "" - -#: src/libslic3r/PrintConfig.cpp:2944 +#: src/libslic3r/PrintConfig.cpp:3091 msgid "" "Performance vs accuracy of calculation. Lower values may produce unwanted " "artifacts." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2954 +#: src/libslic3r/PrintConfig.cpp:3101 msgid "" "Hollowing is done in two steps: first, an imaginary interior is calculated " "deeper (offset plus the closing distance) in the object and then it's " @@ -9559,292 +10836,287 @@ msgid "" "most." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3342 +#: src/libslic3r/PrintConfig.cpp:3513 msgid "Export OBJ" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3343 +#: src/libslic3r/PrintConfig.cpp:3514 msgid "Export the model(s) as OBJ." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3354 +#: src/libslic3r/PrintConfig.cpp:3525 msgid "Export SLA" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3355 +#: src/libslic3r/PrintConfig.cpp:3526 msgid "Slice the model and export SLA printing layers as PNG." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3360 +#: src/libslic3r/PrintConfig.cpp:3531 msgid "Export 3MF" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3361 +#: src/libslic3r/PrintConfig.cpp:3532 msgid "Export the model(s) as 3MF." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3365 +#: src/libslic3r/PrintConfig.cpp:3536 msgid "Export AMF" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3366 +#: src/libslic3r/PrintConfig.cpp:3537 msgid "Export the model(s) as AMF." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3370 +#: src/libslic3r/PrintConfig.cpp:3541 msgid "Export STL" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3371 +#: src/libslic3r/PrintConfig.cpp:3542 msgid "Export the model(s) as STL." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3376 +#: src/libslic3r/PrintConfig.cpp:3547 msgid "Slice the model and export toolpaths as G-code." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3381 +#: src/libslic3r/PrintConfig.cpp:3552 +msgid "G-code viewer" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:3553 +msgid "Visualize an already sliced and saved G-code" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:3558 msgid "Slice" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3382 +#: src/libslic3r/PrintConfig.cpp:3559 msgid "" "Slice the model as FFF or SLA based on the printer_technology configuration " "value." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3387 +#: src/libslic3r/PrintConfig.cpp:3564 msgid "Help" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3388 +#: src/libslic3r/PrintConfig.cpp:3565 msgid "Show this help." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3393 +#: src/libslic3r/PrintConfig.cpp:3570 msgid "Help (FFF options)" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3394 +#: src/libslic3r/PrintConfig.cpp:3571 msgid "Show the full list of print/G-code configuration options." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3398 +#: src/libslic3r/PrintConfig.cpp:3575 msgid "Help (SLA options)" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3399 +#: src/libslic3r/PrintConfig.cpp:3576 msgid "Show the full list of SLA print configuration options." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3403 +#: src/libslic3r/PrintConfig.cpp:3580 msgid "Output Model Info" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3404 +#: src/libslic3r/PrintConfig.cpp:3581 msgid "Write information about the model to the console." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3408 +#: src/libslic3r/PrintConfig.cpp:3585 msgid "Save config file" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3409 +#: src/libslic3r/PrintConfig.cpp:3586 msgid "Save configuration to the specified file." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3419 +#: src/libslic3r/PrintConfig.cpp:3596 msgid "Align XY" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3420 +#: src/libslic3r/PrintConfig.cpp:3597 msgid "Align the model to the given point." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3425 +#: src/libslic3r/PrintConfig.cpp:3602 msgid "Cut model at the given Z." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3446 +#: src/libslic3r/PrintConfig.cpp:3623 msgid "Center" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3447 +#: src/libslic3r/PrintConfig.cpp:3624 msgid "Center the print around the given center." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3451 +#: src/libslic3r/PrintConfig.cpp:3628 msgid "Don't arrange" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3452 +#: src/libslic3r/PrintConfig.cpp:3629 msgid "" "Do not rearrange the given models before merging and keep their original XY " "coordinates." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3455 +#: src/libslic3r/PrintConfig.cpp:3632 msgid "Duplicate" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3456 +#: src/libslic3r/PrintConfig.cpp:3633 msgid "Multiply copies by this factor." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3460 +#: src/libslic3r/PrintConfig.cpp:3637 msgid "Duplicate by grid" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3461 +#: src/libslic3r/PrintConfig.cpp:3638 msgid "Multiply copies by creating a grid." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3464 -msgid "Merge" -msgstr "" - -#: src/libslic3r/PrintConfig.cpp:3465 +#: src/libslic3r/PrintConfig.cpp:3642 msgid "" "Arrange the supplied models in a plate and merge them in a single model in " "order to perform actions once." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3470 +#: src/libslic3r/PrintConfig.cpp:3647 msgid "" "Try to repair any non-manifold meshes (this option is implicitly added " "whenever we need to slice the model to perform the requested action)." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3474 +#: src/libslic3r/PrintConfig.cpp:3651 msgid "Rotation angle around the Z axis in degrees." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3478 +#: src/libslic3r/PrintConfig.cpp:3655 msgid "Rotate around X" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3479 +#: src/libslic3r/PrintConfig.cpp:3656 msgid "Rotation angle around the X axis in degrees." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3483 +#: src/libslic3r/PrintConfig.cpp:3660 msgid "Rotate around Y" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3484 +#: src/libslic3r/PrintConfig.cpp:3661 msgid "Rotation angle around the Y axis in degrees." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3489 +#: src/libslic3r/PrintConfig.cpp:3666 msgid "Scaling factor or percentage." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3494 +#: src/libslic3r/PrintConfig.cpp:3671 msgid "" "Detect unconnected parts in the given model(s) and split them into separate " "objects." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3497 +#: src/libslic3r/PrintConfig.cpp:3674 msgid "Scale to Fit" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3498 +#: src/libslic3r/PrintConfig.cpp:3675 msgid "Scale to fit the given volume." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3507 +#: src/libslic3r/PrintConfig.cpp:3684 msgid "Ignore non-existent config files" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3508 +#: src/libslic3r/PrintConfig.cpp:3685 msgid "Do not fail if a file supplied to --load does not exist." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3511 +#: src/libslic3r/PrintConfig.cpp:3688 msgid "Load config file" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3512 +#: src/libslic3r/PrintConfig.cpp:3689 msgid "" "Load configuration from the specified file. It can be used more than once to " "load options from multiple files." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3515 +#: src/libslic3r/PrintConfig.cpp:3692 msgid "Output File" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3516 +#: src/libslic3r/PrintConfig.cpp:3693 msgid "" "The file where the output will be written (if not specified, it will be " "based on the input file)." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3526 +#: src/libslic3r/PrintConfig.cpp:3698 +msgid "" +"If enabled, the command line arguments are sent to an existing instance of " +"GUI PrusaSlicer, or an existing PrusaSlicer window is activated. Overrides " +"the \"single_instance\" configuration value from application preferences." +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:3709 msgid "Data directory" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3527 +#: src/libslic3r/PrintConfig.cpp:3710 msgid "" "Load and store settings at the given directory. This is useful for " "maintaining different profiles or including configurations from a network " "storage." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3530 +#: src/libslic3r/PrintConfig.cpp:3713 msgid "Logging level" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3531 +#: src/libslic3r/PrintConfig.cpp:3714 msgid "" "Sets logging sensitivity. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, 5:" "trace\n" "For example. loglevel=2 logs fatal, error and warning level messages." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3537 +#: src/libslic3r/PrintConfig.cpp:3720 msgid "Render with a software renderer" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3538 +#: src/libslic3r/PrintConfig.cpp:3721 msgid "" "Render with a software renderer. The bundled MESA software renderer is " "loaded instead of the default OpenGL driver." msgstr "" -#: src/libslic3r/PrintObject.cpp:108 +#: src/libslic3r/Zipper.cpp:27 +msgid "Error with zip archive" +msgstr "" + +#: src/libslic3r/PrintObject.cpp:114 msgid "Processing triangulated mesh" msgstr "" -#: src/libslic3r/PrintObject.cpp:152 +#: src/libslic3r/PrintObject.cpp:158 msgid "Generating perimeters" msgstr "" -#: src/libslic3r/PrintObject.cpp:255 +#: src/libslic3r/PrintObject.cpp:261 msgid "Preparing infill" msgstr "" -#: src/libslic3r/PrintObject.cpp:395 +#: src/libslic3r/PrintObject.cpp:422 msgid "Generating support material" msgstr "" - -#: src/libslic3r/GCode/PreviewData.cpp:348 -msgid "Height (mm)" -msgstr "" - -#: src/libslic3r/GCode/PreviewData.cpp:350 -msgid "Width (mm)" -msgstr "" - -#: src/libslic3r/GCode/PreviewData.cpp:352 -msgid "Speed (mm/s)" -msgstr "" - -#: src/libslic3r/GCode/PreviewData.cpp:354 -msgid "Fan Speed (%)" -msgstr "" - -#: src/libslic3r/GCode/PreviewData.cpp:356 -msgid "Volumetric flow rate (mm³/s)" -msgstr "" diff --git a/resources/localization/list.txt b/resources/localization/list.txt index 3c2a95638..6950dc709 100644 --- a/resources/localization/list.txt +++ b/resources/localization/list.txt @@ -1,5 +1,4 @@ src/slic3r/GUI/AboutDialog.cpp -src/slic3r/GUI/AppConfig.cpp src/slic3r/GUI/BackgroundSlicingProcess.cpp src/slic3r/GUI/BedShapeDialog.cpp src/slic3r/GUI/BedShapeDialog.hpp @@ -9,45 +8,60 @@ src/slic3r/GUI/ConfigManipulation.cpp src/slic3r/GUI/ConfigSnapshotDialog.cpp src/slic3r/GUI/ConfigWizard.cpp src/slic3r/GUI/DoubleSlider.cpp +src/slic3r/GUI/ExtraRenderers.cpp src/slic3r/GUI/ExtruderSequenceDialog.cpp src/slic3r/GUI/Field.cpp src/slic3r/GUI/FirmwareDialog.cpp +src/slic3r/GUI/GCodeViewer.cpp src/slic3r/GUI/GLCanvas3D.cpp -src/slic3r/GUI/GLCanvas3DManager.cpp src/slic3r/GUI/Gizmos/GLGizmoCut.cpp +src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp src/slic3r/GUI/Gizmos/GLGizmoMove.cpp src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp src/slic3r/GUI/Gizmos/GLGizmoScale.cpp +src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp src/slic3r/GUI/Gizmos/GLGizmosManager.cpp +src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp src/slic3r/GUI/GUI.cpp src/slic3r/GUI/GUI_App.cpp +src/slic3r/GUI/GUI_Init.cpp src/slic3r/GUI/GUI_ObjectLayers.cpp src/slic3r/GUI/GUI_ObjectList.cpp src/slic3r/GUI/GUI_ObjectManipulation.cpp src/slic3r/GUI/GUI_ObjectSettings.cpp src/slic3r/GUI/GUI_Preview.cpp -src/slic3r/GUI/Job.hpp +src/slic3r/GUI/ImGuiWrapper.cpp +src/slic3r/GUI/Jobs/ArrangeJob.cpp +src/slic3r/GUI/Jobs/Job.cpp +src/slic3r/GUI/Jobs/RotoptimizeJob.cpp +src/slic3r/GUI/Jobs/SLAImportJob.cpp src/slic3r/GUI/KBShortcutsDialog.cpp src/slic3r/GUI/MainFrame.cpp src/slic3r/GUI/Mouse3DController.cpp src/slic3r/GUI/MsgDialog.cpp +src/slic3r/GUI/NotificationManager.hpp +src/slic3r/GUI/NotificationManager.cpp src/slic3r/GUI/ObjectDataViewModel.cpp +src/slic3r/GUI/OpenGLManager.cpp src/slic3r/GUI/OptionsGroup.cpp +src/slic3r/GUI/PhysicalPrinterDialog.cpp src/slic3r/GUI/Plater.cpp src/slic3r/GUI/Preferences.cpp -src/slic3r/GUI/Preset.cpp -src/slic3r/GUI/PresetBundle.cpp +src/slic3r/GUI/PresetComboBoxes.cpp src/slic3r/GUI/PresetHints.cpp src/slic3r/GUI/PrintHostDialogs.cpp src/slic3r/GUI/ProgressStatusBar.cpp src/slic3r/GUI/RammingChart.cpp +src/slic3r/GUI/SavePresetDialog.cpp +src/slic3r/GUI/Search.cpp src/slic3r/GUI/Selection.cpp src/slic3r/GUI/SysInfoDialog.cpp src/slic3r/GUI/Tab.cpp src/slic3r/GUI/Tab.hpp +src/slic3r/GUI/UnsavedChangesDialog.cpp src/slic3r/GUI/UpdateDialogs.cpp src/slic3r/GUI/WipeTowerDialog.cpp src/slic3r/GUI/wxExtensions.cpp @@ -57,18 +71,22 @@ src/slic3r/Utils/FixModelByWin10.cpp src/slic3r/Utils/FlashAir.cpp src/slic3r/Utils/OctoPrint.cpp src/slic3r/Utils/PresetUpdater.cpp -src/libslic3r/SLA/Pad.cpp -src/libslic3r/SLA/Hollowing.cpp -src/libslic3r/Zipper.cpp +src/slic3r/Utils/Http.cpp +src/slic3r/Utils/Process.cpp src/libslic3r/GCode.cpp src/libslic3r/ExtrusionEntity.cpp src/libslic3r/Flow.cpp src/libslic3r/Format/3mf.cpp src/libslic3r/Format/AMF.cpp +src/libslic3r/GCode/PreviewData.cpp +src/libslic3r/miniz_extension.cpp +src/libslic3r/Preset.cpp src/libslic3r/Print.cpp +src/libslic3r/SLA/Pad.cpp +src/libslic3r/SLA/Hollowing.cpp src/libslic3r/SLAPrint.cpp src/libslic3r/SLAPrintSteps.cpp src/libslic3r/PrintBase.cpp src/libslic3r/PrintConfig.cpp +src/libslic3r/Zipper.cpp src/libslic3r/PrintObject.cpp -src/libslic3r/GCode/PreviewData.cpp diff --git a/resources/profiles/Anycubic.idx b/resources/profiles/Anycubic.idx index 01a6c8f7e..d55dbb5f6 100644 --- a/resources/profiles/Anycubic.idx +++ b/resources/profiles/Anycubic.idx @@ -1,2 +1,4 @@ +min_slic3r_version = 2.3.0-alpha2 +0.0.2 Added Anycubic Predator min_slic3r_version = 2.3.0-alpha0 0.0.1 Initial Version diff --git a/resources/profiles/Anycubic.ini b/resources/profiles/Anycubic.ini index 69abb525a..2099306d4 100644 --- a/resources/profiles/Anycubic.ini +++ b/resources/profiles/Anycubic.ini @@ -5,7 +5,7 @@ name = Anycubic # Configuration version of this file. Config file will only be installed, if the config_version differs. # This means, the server may force the PrusaSlicer configuration to be downgraded. -config_version = 0.0.1 +config_version = 0.0.2 # Where to get the updates from? config_update_url = http://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/Anycubic/ # changelog_url = http://files.prusa3d.com/?latest=slicer-profiles&lng=%1% @@ -53,6 +53,13 @@ variants = 0.4 technology = FFF family = MEGA +[printer_model:PREDATOR] +name = Anycubic Predator +variants = 0.4; 0.6; 0.8 +technology = FFF +family = PREDATOR +default_materials = Generic PLA @PREDATOR; Generic PETG @PREDATOR; Generic ABS @PREDATOR + # All presets starting with asterisk, for example *common*, are intermediate and they will # not make it into the user interface. @@ -1096,3 +1103,692 @@ printer_notes = Do not remove the following keywords! These keywords are used in machine_max_feedrate_z = 8 +## Anycubic PREDATOR +## Author: https://github.com/tillverka3d +## Initial PR: https://github.com/prusa3d/PrusaSlicer/pull/4960 + +######################################### +###### begin common print presets ####### +######################################### + +# Common print preset +[print:*common predator*] +spiral_vase = 0 +top_solid_min_thickness = 0.8 +bottom_solid_min_thickness = 0.6 +extra_perimeters = 0 +ensure_vertical_shell_thickness = 1 +avoid_crossing_perimeters = 0 +thin_walls = 0 +overhangs = 1 +seam_position = nearest +external_perimeters_first = 0 +fill_density = 20% +external_fill_pattern = rectilinear +infill_every_layers = 1 +infill_only_where_needed = 0 +solid_infill_every_layers = 0 +fill_angle = 45 +solid_infill_below_area = 20 +bridge_angle = 0 +only_retract_when_crossing_perimeters = 0 +infill_first = 0 +skirts = 1 +skirt_distance = 4 +skirt_height = 1 +min_skirt_length = 8 +brim_width = 0 +support_material = 0 +support_material_auto = 1 +support_material_threshold = 50 +support_material_enforce_layers = 0 +raft_layers = 0 +support_material_contact_distance = 0.1 +support_material_pattern = rectilinear +support_material_with_sheath = 0 +support_material_spacing = 2 +support_material_angle = 0 +support_material_interface_layers = 2 +support_material_interface_spacing = 0.2 +support_material_interface_contact_loops = 0 +support_material_buildplate_only = 0 +support_material_xy_spacing = 60% +dont_support_bridges = 1 +support_material_synchronize_layers = 0 +travel_speed = 94 +first_layer_speed = 15 +perimeter_acceleration = 300 +infill_acceleration = 200 +bridge_acceleration = 300 +first_layer_acceleration = 300 +default_acceleration = 300 +max_volumetric_speed = 15 +perimeter_extruder = 1 +infill_extruder = 1 +solid_infill_extruder = 1 +support_material_extruder = 0 +support_material_interface_extruder = 0 +ooze_prevention = 0 +standby_temperature_delta = -5 +wipe_tower = 0 +wipe_tower_x = 170 +wipe_tower_y = 140 +wipe_tower_width = 60 +wipe_tower_rotation_angle = 0 +wipe_tower_bridging = 10 +interface_shells = 0 +infill_overlap = 20% +bridge_flow_ratio = 0.8 +resolution = 0 +xy_size_compensation = 0 +elefant_foot_compensation = 0.2 +clip_multipart_objects = 1 +complete_objects = 0 +extruder_clearance_radius = 45 +extruder_clearance_height = 25 +gcode_comments = 0 +output_filename_format = {input_filename_base}_{print_preset}_{filament_type[0]}_{printer_model}_{print_time}.gcode +post_process = +notes = +max_volumetric_extrusion_rate_slope_negative = 0 +max_volumetric_extrusion_rate_slope_positive = 0 +print_settings_id = + +# Common print preset +[print:*common predator 0.4 nozzle*] +inherits = *common predator* +printer_variant = 0.4 +nozzle_diameter = 0.4 +first_layer_height = 0.16 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_ANYCUBIC.*/ and printer_notes=~/.*PRINTER_MODEL_PREDATOR.*/ and printer_notes=~/.*PRINTER_HAS_BOWDEN.*/ and nozzle_diameter[0]==0.4 + +# Common print preset +[print:*common predator 0.6 nozzle*] +inherits = *common predator* +printer_variant = 0.6 +nozzle_diameter = 0.6 +first_layer_height = 0.24 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_ANYCUBIC.*/ and printer_notes=~/.*PRINTER_MODEL_PREDATOR.*/ and printer_notes=~/.*PRINTER_HAS_BOWDEN.*/ and nozzle_diameter[0]==0.6 + +# Common print preset +[print:*common predator 0.8 nozzle*] +inherits = *common predator* +printer_variant = 0.8 +nozzle_diameter = 0.8 +first_layer_height = 0.32 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_ANYCUBIC.*/ and printer_notes=~/.*PRINTER_MODEL_PREDATOR.*/ and printer_notes=~/.*PRINTER_HAS_BOWDEN.*/ and nozzle_diameter[0]==0.8 + +# Common print preset +[print:*common predator quality*] +perimeter_speed = 50 +small_perimeter_speed = 15 +external_perimeter_speed = 70% +infill_speed = 65 +solid_infill_speed = 85% +top_solid_infill_speed = 85% +support_material_speed = 30 +support_material_interface_speed = 85% +bridge_speed = 30 +gap_fill_speed = 40 +ironing_speed = 15 + +# Common print preset +[print:*common predator speed*] +perimeter_speed = 70 +small_perimeter_speed = 15 +external_perimeter_speed = 70% +infill_speed = 85 +solid_infill_speed = 85% +top_solid_infill_speed = 85% +support_material_speed = 30 +support_material_interface_speed = 85% +bridge_speed = 30 +gap_fill_speed = 40 +ironing_speed = 15 + +# Common print preset +[print:*common predator 0.4 nozzle detailed*] +inherits = *common predator 0.4 nozzle* +extrusion_width = 0.42 +first_layer_extrusion_width = 0.41 +perimeter_extrusion_width = 0.42 +external_perimeter_extrusion_width = 0.42 +infill_extrusion_width = 0.4 +solid_infill_extrusion_width = 0.4 +top_infill_extrusion_width = 0.4 +support_material_extrusion_width = 0.38 + +# Common print preset +[print:*common predator 0.4 nozzle coarse*] +inherits = *common predator 0.4 nozzle* +extrusion_width = 0.44 +first_layer_extrusion_width = 0.42 +perimeter_extrusion_width = 0.5 +external_perimeter_extrusion_width = 0.5 +infill_extrusion_width = 0.5 +solid_infill_extrusion_width = 0.5 +top_infill_extrusion_width = 0.4 +support_material_extrusion_width = 0.38 + +# Common print preset +[print:*common predator 0.6 nozzle detailed*] +inherits = *common predator 0.6 nozzle* +extrusion_width = 0.64 +first_layer_extrusion_width = 0.62 +perimeter_extrusion_width = 0.64 +external_perimeter_extrusion_width = 0.64 +infill_extrusion_width = 0.6 +solid_infill_extrusion_width = 0.6 +top_infill_extrusion_width = 0.6 +support_material_extrusion_width = 0.56 + +# Common print preset +[print:*common predator 0.6 nozzle coarse*] +inherits = *common predator 0.6 nozzle* +extrusion_width = 0.67 +first_layer_extrusion_width = 0.64 +perimeter_extrusion_width = 0.7 +external_perimeter_extrusion_width = 0.7 +infill_extrusion_width = 0.7 +solid_infill_extrusion_width = 0.7 +top_infill_extrusion_width = 0.6 +support_material_extrusion_width = 0.56 + +# Common print preset +[print:*common predator 0.8 nozzle detailed*] +inherits = *common predator 0.8 nozzle* +extrusion_width = 0.84 +first_layer_extrusion_width = 0.82 +perimeter_extrusion_width = 0.84 +external_perimeter_extrusion_width = 0.84 +infill_extrusion_width = 0.8 +solid_infill_extrusion_width = 0.8 +top_infill_extrusion_width = 0.8 +support_material_extrusion_width = 0.72 + +# Common print preset +[print:*common predator 0.8 nozzle coarse*] +inherits = *common predator 0.8 nozzle* +extrusion_width = 0.87 +first_layer_extrusion_width = 0.84 +perimeter_extrusion_width = 0.9 +external_perimeter_extrusion_width = 0.9 +infill_extrusion_width = 0.9 +solid_infill_extrusion_width = 0.9 +top_infill_extrusion_width = 0.8 +support_material_extrusion_width = 0.72 + +######################################### +####### end common print presets ######## +######################################### + +######################################### +########## begin print presets ########## +######################################### + +[print:0.08mm 0.4 nozzle DETAILED QUALITY @PREDATOR] +inherits = *common predator 0.4 nozzle detailed*; *common predator quality* +layer_height = 0.08 +max_print_speed = 50 +perimeters = 3 +fill_pattern = grid + +[print:0.16mm 0.4 nozzle DETAILED QUALITY @PREDATOR] +inherits = *common predator 0.4 nozzle detailed*; *common predator quality* +layer_height = 0.16 +max_print_speed = 60 +perimeters = 3 +fill_pattern = grid + +[print:0.16mm 0.4 nozzle COARSE QUALITY @PREDATOR] +inherits = *common predator 0.4 nozzle coarse*; *common predator quality* +layer_height = 0.16 +max_print_speed = 60 +perimeters = 3 +fill_pattern = grid + +[print:0.24mm 0.4 nozzle DETAILED QUALITY @PREDATOR] +inherits = *common predator 0.4 nozzle detailed*; *common predator quality* +layer_height = 0.24 +max_print_speed = 70 +perimeters = 3 +fill_pattern = grid + +[print:0.24mm 0.4 nozzle COARSE QUALITY @PREDATOR] +inherits = *common predator 0.4 nozzle coarse*; *common predator quality* +layer_height = 0.24 +max_print_speed = 70 +perimeters = 3 +fill_pattern = grid + +[print:0.32mm 0.4 nozzle DETAILED QUALITY @PREDATOR] +inherits = *common predator 0.4 nozzle detailed*; *common predator quality* +layer_height = 0.32 +max_print_speed = 70 +perimeters = 3 +fill_pattern = grid + +[print:0.32mm 0.4 nozzle COARSE QUALITY @PREDATOR] +inherits = *common predator 0.4 nozzle coarse*; *common predator quality* +layer_height = 0.32 +max_print_speed = 70 +perimeters = 3 +fill_pattern = grid + +[print:0.16mm 0.6 nozzle DETAILED QUALITY @PREDATOR] +inherits = *common predator 0.6 nozzle detailed*; *common predator quality* +layer_height = 0.16 +max_print_speed = 70 +perimeters = 2 +fill_pattern = gyroid + +[print:0.16mm 0.6 nozzle DETAILED SPEED @PREDATOR] +inherits = *common predator 0.6 nozzle detailed*; *common predator speed* +layer_height = 0.16 +max_print_speed = 80 +perimeters = 2 +fill_pattern = gyroid + +[print:0.16mm 0.6 nozzle COARSE QUALITY @PREDATOR] +inherits = *common predator 0.6 nozzle coarse*; *common predator quality* +layer_height = 0.16 +max_print_speed = 70 +perimeters = 2 +fill_pattern = gyroid + +[print:0.16mm 0.6 nozzle COARSE SPEED @PREDATOR] +inherits = *common predator 0.6 nozzle coarse*; *common predator speed* +layer_height = 0.16 +max_print_speed = 80 +perimeters = 2 +fill_pattern = gyroid + +[print:0.24mm 0.6 nozzle DETAILED QUALITY @PREDATOR] +inherits = *common predator 0.6 nozzle detailed*; *common predator quality* +layer_height = 0.24 +max_print_speed = 70 +perimeters = 2 +fill_pattern = gyroid + +[print:0.24mm 0.6 nozzle DETAILED SPEED @PREDATOR] +inherits = *common predator 0.6 nozzle detailed*; *common predator speed* +layer_height = 0.24 +max_print_speed = 80 +perimeters = 2 +fill_pattern = gyroid + +[print:0.24mm 0.6 nozzle COARSE QUALITY @PREDATOR] +inherits = *common predator 0.6 nozzle coarse*; *common predator quality* +layer_height = 0.24 +max_print_speed = 70 +perimeters = 2 +fill_pattern = gyroid + +[print:0.24mm 0.6 nozzle COARSE SPEED @PREDATOR] +inherits = *common predator 0.6 nozzle coarse*; *common predator speed* +layer_height = 0.24 +max_print_speed = 80 +perimeters = 2 +fill_pattern = gyroid + +[print:0.32mm 0.6 nozzle DETAILED QUALITY @PREDATOR] +inherits = *common predator 0.6 nozzle detailed*; *common predator quality* +layer_height = 0.32 +max_print_speed = 70 +perimeters = 2 +fill_pattern = gyroid + +[print:0.32mm 0.6 nozzle DETAILED SPEED @PREDATOR] +inherits = *common predator 0.6 nozzle detailed*; *common predator speed* +layer_height = 0.32 +max_print_speed = 80 +perimeters = 2 +fill_pattern = gyroid + +[print:0.32mm 0.6 nozzle COARSE QUALITY @PREDATOR] +inherits = *common predator 0.6 nozzle coarse*; *common predator quality* +layer_height = 0.32 +max_print_speed = 70 +perimeters = 2 +fill_pattern = gyroid + +[print:0.32mm 0.6 nozzle COARSE SPEED @PREDATOR] +inherits = *common predator 0.6 nozzle coarse*; *common predator speed* +layer_height = 0.32 +max_print_speed = 80 +perimeters = 2 +fill_pattern = gyroid + +[print:0.4mm 0.6 nozzle DETAILED QUALITY @PREDATOR] +inherits = *common predator 0.6 nozzle detailed*; *common predator quality* +layer_height = 0.4 +max_print_speed = 70 +perimeters = 2 +fill_pattern = gyroid + +[print:0.4mm 0.6 nozzle DETAILED SPEED @PREDATOR] +inherits = *common predator 0.6 nozzle detailed*; *common predator speed* +layer_height = 0.4 +max_print_speed = 80 +perimeters = 2 +fill_pattern = gyroid + +[print:0.4mm 0.6 nozzle COARSE QUALITY @PREDATOR] +inherits = *common predator 0.6 nozzle coarse*; *common predator quality* +layer_height = 0.4 +max_print_speed = 70 +perimeters = 2 +fill_pattern = gyroid + +[print:0.4mm 0.6 nozzle COARSE SPEED @PREDATOR] +inherits = *common predator 0.6 nozzle coarse*; *common predator speed* +layer_height = 0.4 +max_print_speed = 80 +perimeters = 2 +fill_pattern = gyroid + +[print:0.24mm 0.8 nozzle DETAILED QUALITY @PREDATOR] +inherits = *common predator 0.8 nozzle detailed*; *common predator quality* +layer_height = 0.24 +max_print_speed = 80 +perimeters = 2 +fill_pattern = gyroid + +[print:0.24mm 0.8 nozzle DETAILED SPEED @PREDATOR] +inherits = *common predator 0.8 nozzle detailed*; *common predator speed* +layer_height = 0.24 +max_print_speed = 90 +perimeters = 2 +fill_pattern = gyroid + +[print:0.24mm 0.8 nozzle COARSE QUALITY @PREDATOR] +inherits = *common predator 0.8 nozzle coarse*; *common predator quality* +layer_height = 0.24 +max_print_speed = 80 +perimeters = 2 +fill_pattern = gyroid + +[print:0.24mm 0.8 nozzle COARSE SPEED @PREDATOR] +inherits = *common predator 0.8 nozzle coarse*; *common predator speed* +layer_height = 0.24 +max_print_speed = 90 +perimeters = 2 +fill_pattern = gyroid + +[print:0.32mm 0.8 nozzle DETAILED QUALITY @PREDATOR] +inherits = *common predator 0.8 nozzle detailed*; *common predator quality* +layer_height = 0.32 +max_print_speed = 80 +perimeters = 2 +fill_pattern = gyroid + +[print:0.32mm 0.8 nozzle DETAILED SPEED @PREDATOR] +inherits = *common predator 0.8 nozzle detailed*; *common predator speed* +layer_height = 0.32 +max_print_speed = 90 +perimeters = 2 +fill_pattern = gyroid + +[print:0.32mm 0.8 nozzle COARSE QUALITY @PREDATOR] +inherits = *common predator 0.8 nozzle coarse*; *common predator quality* +layer_height = 0.32 +max_print_speed = 80 +perimeters = 2 +fill_pattern = gyroid + +[print:0.32mm 0.8 nozzle COARSE SPEED @PREDATOR] +inherits = *common predator 0.8 nozzle coarse*; *common predator speed* +layer_height = 0.32 +max_print_speed = 90 +perimeters = 2 +fill_pattern = gyroid + +[print:0.4mm 0.8 nozzle DETAILED QUALITY @PREDATOR] +inherits = *common predator 0.8 nozzle detailed*; *common predator quality* +layer_height = 0.4 +max_print_speed = 80 +perimeters = 2 +fill_pattern = gyroid + +[print:0.4mm 0.8 nozzle DETAILED SPEED @PREDATOR] +inherits = *common predator 0.8 nozzle detailed*; *common predator speed* +layer_height = 0.4 +max_print_speed = 90 +perimeters = 2 +fill_pattern = gyroid + +[print:0.4mm 0.8 nozzle COARSE QUALITY @PREDATOR] +inherits = *common predator 0.8 nozzle coarse*; *common predator quality* +layer_height = 0.4 +max_print_speed = 80 +perimeters = 2 +fill_pattern = gyroid + +[print:0.4mm 0.8 nozzle COARSE SPEED @PREDATOR] +inherits = *common predator 0.8 nozzle coarse*; *common predator speed* +layer_height = 0.4 +max_print_speed = 90 +perimeters = 2 +fill_pattern = gyroid + +[print:0.48mm 0.8 nozzle DETAILED QUALITY @PREDATOR] +inherits = *common predator 0.8 nozzle detailed*; *common predator quality* +layer_height = 0.48 +max_print_speed = 80 +perimeters = 2 +fill_pattern = gyroid + +[print:0.48mm 0.8 nozzle DETAILED SPEED @PREDATOR] +inherits = *common predator 0.8 nozzle detailed*; *common predator speed* +layer_height = 0.48 +max_print_speed = 90 +perimeters = 2 +fill_pattern = gyroid + +[print:0.48mm 0.8 nozzle COARSE QUALITY @PREDATOR] +inherits = *common predator 0.8 nozzle coarse*; *common predator quality* +layer_height = 0.48 +max_print_speed = 80 +perimeters = 2 +fill_pattern = gyroid + +[print:0.48mm 0.8 nozzle COARSE SPEED @PREDATOR] +inherits = *common predator 0.8 nozzle coarse*; *common predator speed* +layer_height = 0.48 +max_print_speed = 90 +perimeters = 2 +fill_pattern = gyroid + +######################################### +########### end print presets ########### +######################################### + +######################################### +######## begin filament presets ######### +######################################### + +# Common filament preset +[filament:*common predator*] +cooling = 0 +compatible_printers = +extrusion_multiplier = 1 +filament_cost = 0 +filament_density = 0 +filament_diameter = 1.75 +filament_notes = "" +filament_settings_id = "" +filament_soluble = 0 +min_print_speed = 15 +slowdown_below_layer_time = 20 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_ANYCUBIC.*/ and printer_notes=~/.*PRINTER_MODEL_PREDATOR.*/ + +[filament:*PLA predator*] +inherits = *common predator* +bed_temperature = 60 +fan_below_layer_time = 100 +filament_colour = #FF3232 +filament_max_volumetric_speed = 10 +filament_type = PLA +filament_density = 1.24 +filament_cost = 20 +first_layer_bed_temperature = 60 +first_layer_temperature = 200 +fan_always_on = 1 +cooling = 1 +max_fan_speed = 100 +min_fan_speed = 100 +bridge_fan_speed = 100 +disable_fan_first_layers = 1 +temperature = 200 + +[filament:*PET predator*] +inherits = *common predator* +bed_temperature = 70 +cooling = 1 +disable_fan_first_layers = 3 +fan_below_layer_time = 20 +filament_colour = #FF8000 +filament_max_volumetric_speed = 8 +filament_type = PETG +filament_density = 1.27 +filament_cost = 30 +first_layer_bed_temperature =70 +first_layer_temperature = 240 +fan_always_on = 1 +max_fan_speed = 50 +min_fan_speed = 20 +bridge_fan_speed = 100 +temperature = 240 + +[filament:*ABS predator*] +inherits = *common predator* +bed_temperature = 100 +cooling = 0 +disable_fan_first_layers = 3 +fan_below_layer_time = 20 +filament_colour = #3A80CA +filament_max_volumetric_speed = 10 +filament_type = ABS +filament_density = 1.04 +filament_cost = 20 +first_layer_bed_temperature = 100 +first_layer_temperature = 245 +fan_always_on = 0 +max_fan_speed = 0 +min_fan_speed = 0 +bridge_fan_speed = 30 +top_fan_speed = 0 +temperature = 245 + +[filament:Generic PLA @PREDATOR] +inherits = *PLA predator* +filament_vendor = Generic + +[filament:Generic PETG @PREDATOR] +inherits = *PET predator* +filament_vendor = Generic + +[filament:Generic ABS @PREDATOR] +inherits = *ABS predator* +filament_vendor = Generic + +######################################### +######### end filament presets ########## +######################################### + +######################################### +######### begin printer presets ######### +######################################### + +# Anycubic predator common printer preset +[printer:*common predator*] +printer_vendor = Anycubic +printer_model = Predator +printer_technology = FFF +printer_variant = 0.4 +thumbnails = 16x16,220x124 +bed_shape = 188.779x16.516,186.621x32.9063,183.043x49.0462,178.072x64.8128,171.745x80.0862,164.112x94.75,155.229x108.693,145.165x121.808,133.997x133.997,121.808x145.165,108.693x155.229,94.75x164.112,80.0862x171.745,64.8128x178.072,49.0462x183.043,32.9063x186.621,16.516x188.779,1.16035e-14x189.5,-16.516x188.779,-32.9063x186.621,-49.0462x183.043,-64.8128x178.072,-80.0862x171.745,-94.75x164.112,-108.693x155.229,-121.808x145.165,-133.997x133.997,-145.165x121.808,-155.229x108.693,-164.112x94.75,-171.745x80.0862,-178.072x64.8128,-183.043x49.0462,-186.621x32.9063,-188.779x16.516,-189.5x2.32071e-14,-188.779x-16.516,-186.621x-32.9063,-183.043x-49.0462,-178.072x-64.8128,-171.745x-80.0862,-164.112x-94.75,-155.229x-108.693,-145.165x-121.808,-133.997x-133.997,-121.808x-145.165,-108.693x-155.229,-94.75x-164.112,-80.0862x-171.745,-64.8128x-178.072,-49.0462x-183.043,-32.9063x-186.621,-16.516x-188.779,-3.48106e-14x-189.5,16.516x-188.779,32.9063x-186.621,49.0462x-183.043,64.8128x-178.072,80.0862x-171.745,94.75x-164.112,108.693x-155.229,121.808x-145.165,133.997x-133.997,145.165x-121.808,155.229x-108.693,164.112x-94.75,171.745x-80.0862,178.072x-64.8128,183.043x-49.0462,186.621x-32.9063,188.779x-16.516,189.5x-4.64141e-14 +max_print_height = 450 +z_offset = 0 +single_extruder_multi_material = 0 +gcode_flavor = reprap +silent_mode = 0 +remaining_times = 0 +use_relative_e_distances = 0 +use_firmware_retraction = 0 +use_volumetric_e = 0 +variable_layer_height = 1 +start_gcode = "; start_gcode | start\n\n; v11 2020-09-02_14-27 tillverka\n\n; set metric values\n\nG21\n\n; use absolute positioning\n\nG90\n\n; set extruder to absolute mode\n\nM82\n\n; start with fan off\n\nM107\n\n; set e-steps for bondtech bmg and force store in eeprom\n; mm/step for chitu\n; 1/415 for bondtech bmg\n\nM8011 S0.0024096394\nM8500\n\n; set temps\n\nM104 S[first_layer_temperature]\nM140 S[first_layer_bed_temperature]\n\n; home xy\n\nG28 X0 Y0\n\n; home z\n\nG28 Z0\n\n; move the head down to Z 94mm\n\nG1 Z94.0 F2394\n\n; set and wait for temps\n\nM109 S[first_layer_temperature]\nM190 S[first_layer_bed_temperature]\n\n; zero the extruded length\n\nG92 E0\n\n; extrude 3mm of feed stock\n\nG1 F200 E3\n\n; zero the extruded length again\n\nG92 E0\n\n; set speed\n\nG1 F{travel_speed}\n\n; print preskirt\n\nG92 E0\nG1 E3.94000 F2520.00000\n\nG1 X125.464 Y-139.310\nG1 Z0.329 F3994.000\n\nG1 F994.000\n\nG1 X125.464 Y-139.310 E4.19679\nG1 X130.218 Y-134.876 E4.70359\nG1 X132.569 Y-132.567 E4.96053\nG1 X137.099 Y-127.877 E5.46890\nG1 X139.325 Y-125.447 E5.72585\nG1 X141.507 Y-122.981 E5.98254\nG1 X145.685 Y-118.002 E6.48934\nG1 X149.741 Y-112.810 E7.00296\nG1 X153.561 Y-107.552 E7.50975\nG1 X155.440 Y-104.819 E7.76827\nG1 X158.980 Y-99.367 E8.27506\nG1 X160.702 Y-96.558 E8.53201\nG1 X163.962 Y-90.911 E9.04038\nG1 X165.535 Y-88.015 E9.29732\nG1 X168.496 Y-82.205 E9.80570\nG1 X169.915 Y-79.231 E10.06264\nG1 X171.280 Y-76.235 E10.31934\nG1 X173.819 Y-70.251 E10.82613\nG1 X176.180 Y-64.101 E11.33975\nG1 X178.297 Y-57.955 E11.84654\nG1 X179.294 Y-54.793 E12.10507\nG1 X181.085 Y-48.544 E12.61186\nG1 X181.911 Y-45.354 E12.86880\nG1 X183.378 Y-39.001 E13.37718\nG1 X184.035 Y-35.771 E13.63412\nG1 X185.168 Y-29.350 E14.14250\nG1 X185.655 Y-26.091 E14.39944\nG1 X186.084 Y-22.826 E14.65614\nG1 X186.764 Y-16.362 E15.16293\nG1 X187.223 Y-9.790 E15.67655\nG1 X187.450 Y-3.294 E16.18334\nG1 X187.479 Y0.002 E16.44028\nG1 X187.450 Y3.294 E16.69698\nG1 X187.223 Y9.810 E17.20529\nG1 X187.021 Y13.100 E17.46229\nG1 X186.454 Y19.575 E17.96909\nG1 X186.079 Y22.870 E18.22761\nG1 X185.174 Y29.307 E18.73440\nG1 X184.031 Y35.794 E19.24802\nG1 X182.679 Y42.152 E19.75481\nG1 X181.910 Y45.357 E20.01176\nG1 X180.223 Y51.655 E20.52013\nG1 X179.287 Y54.815 E20.77708\nG1 X177.272 Y61.017 E21.28545\nG1 X176.172 Y64.123 E21.54239\nG1 X175.019 Y67.207 E21.79909\nG1 X172.584 Y73.234 E22.30588\nG1 X169.905 Y79.252 E22.81950\nG1 X167.055 Y85.094 E23.32629\nG1 X165.524 Y88.035 E23.58482\nG1 X162.373 Y93.721 E24.09161\nG1 X160.700 Y96.560 E24.34855\nG1 X157.245 Y102.090 E24.85693\nG1 X155.427 Y104.838 E25.11387\nG1 X151.687 Y110.180 E25.62225\nG1 X149.727 Y112.829 E25.87919\nG1 X147.722 Y115.441 E26.13588\nG1 X143.631 Y120.493 E26.64268\nG1 X139.310 Y125.464 E27.15629\nG1 X134.876 Y130.218 E27.66309\nG1 X132.567 Y132.569 E27.92003\nG1 X127.877 Y137.099 E28.42840\nG1 X125.447 Y139.325 E28.68535\nG1 X122.981 Y141.507 E28.94204\nG1 X118.002 Y145.685 E29.44883\nG1 X112.810 Y149.741 E29.96245\nG1 X107.552 Y153.561 E30.46924\nG1 X104.819 Y155.440 E30.72777\nG1 X99.367 Y158.980 E31.23456\nG1 X96.558 Y160.702 E31.49151\nG1 X90.911 Y163.962 E31.99988\nG1 X88.015 Y165.535 E32.25682\nG1 X82.205 Y168.496 E32.76520\nG1 X79.231 Y169.915 E33.02214\nG1 X76.235 Y171.280 E33.27884\nG1 X70.251 Y173.819 E33.78563\nG1 X64.101 Y176.180 E34.29925\nG1 X57.955 Y178.297 E34.80604\nG1 X54.793 Y179.294 E35.06457\nG1 X48.544 Y181.085 E35.57136\nG1 X45.354 Y181.911 E35.82830\nG1 X39.001 Y183.378 E36.33668\nG1 X35.771 Y184.035 E36.59362\nG1 X29.350 Y185.168 E37.10200\nG1 X26.091 Y185.655 E37.35894\nG1 X22.826 Y186.084 E37.61563\nG1 X16.362 Y186.764 E38.12242\nG1 X9.790 Y187.223 E38.63605\nG1 X3.294 Y187.450 E39.14283\nG1 X-0.002 Y187.479 E39.39978\nG1 X-3.294 Y187.450 E39.65648\nG1 X-9.810 Y187.223 E40.16479\nG1 X-13.100 Y187.021 E40.42179\nG1 X-19.575 Y186.454 E40.92858\nG1 X-22.870 Y186.079 E41.18711\nG1 X-29.307 Y185.174 E41.69390\nG1 X-35.794 Y184.031 E42.20752\nG1 X-42.152 Y182.679 E42.71431\nG1 X-45.357 Y181.910 E42.97126\nG1 X-51.655 Y180.223 E43.47963\nG1 X-54.815 Y179.287 E43.73657\nG1 X-61.017 Y177.272 E44.24495\nG1 X-64.123 Y176.172 E44.50189\nG1 X-67.207 Y175.019 E44.75859\nG1 X-73.234 Y172.584 E45.26538\nG1 X-79.252 Y169.905 E45.77900\nG1 X-85.094 Y167.055 E46.28579\nG1 X-88.035 Y165.524 E46.54432\nG1 X-93.721 Y162.373 E47.05111\nG1 X-96.560 Y160.700 E47.30805\nG1 X-102.090 Y157.245 E47.81643\nG1 X-104.838 Y155.427 E48.07337\nG1 X-110.180 Y151.687 E48.58174\nG1 X-112.829 Y149.727 E48.83869\nG1 X-115.441 Y147.722 E49.09538\nG1 X-120.493 Y143.631 E49.60218\nG1 X-125.464 Y139.310 E50.11579\nG1 X-130.218 Y134.876 E50.62259\nG1 X-132.569 Y132.567 E50.87953\nG1 X-137.099 Y127.877 E51.38790\nG1 X-139.325 Y125.447 E51.64485\nG1 X-141.507 Y122.981 E51.90154\nG1 X-145.685 Y118.002 E52.40833\nG1 X-149.741 Y112.810 E52.92195\nG1 X-153.561 Y107.552 E53.42874\nG1 X-155.440 Y104.819 E53.68727\nG1 X-158.980 Y99.367 E54.19406\nG1 X-160.702 Y96.558 E54.45101\nG1 X-163.962 Y90.911 E54.95938\nG1 X-165.535 Y88.015 E55.21632\nG1 X-168.496 Y82.205 E55.72470\nG1 X-169.915 Y79.231 E55.98164\nG1 X-171.280 Y76.235 E56.23834\nG1 X-173.819 Y70.251 E56.74513\nG1 X-176.180 Y64.101 E57.25875\nG1 X-178.297 Y57.955 E57.76554\nG1 X-179.294 Y54.793 E58.02407\nG1 X-181.085 Y48.544 E58.53086\nG1 X-181.911 Y45.354 E58.78780\nG1 X-183.378 Y39.001 E59.29618\nG1 X-184.035 Y35.771 E59.55312\nG1 X-185.168 Y29.350 E60.06149\nG1 X-185.655 Y26.091 E60.31844\nG1 X-186.084 Y22.826 E60.57513\nG1 X-186.764 Y16.362 E61.08192\nG1 X-187.223 Y9.790 E61.59554\nG1 X-187.450 Y3.294 E62.10233\nG1 X-187.479 Y-0.002 E62.35928\nG1 X-187.450 Y-3.294 E62.61598\nG1 X-187.223 Y-9.810 E63.12429\nG1 X-187.021 Y-13.100 E63.38129\nG1 X-186.454 Y-19.575 E63.88808\nG1 X-186.079 Y-22.870 E64.14661\nG1 X-185.174 Y-29.307 E64.65340\nG1 X-184.031 Y-35.794 E65.16702\nG1 X-182.679 Y-42.152 E65.67381\nG1 X-181.910 Y-45.357 E65.93076\nG1 X-180.223 Y-51.655 E66.43913\nG1 X-179.287 Y-54.815 E66.69607\nG1 X-177.272 Y-61.017 E67.20445\nG1 X-176.172 Y-64.123 E67.46139\nG1 X-175.019 Y-67.207 E67.71809\nG1 X-172.584 Y-73.234 E68.22488\nG1 X-169.905 Y-79.252 E68.73850\nG1 X-167.055 Y-85.094 E69.24529\nG1 X-165.524 Y-88.035 E69.50382\nG1 X-162.373 Y-93.721 E70.01061\nG1 X-160.700 Y-96.560 E70.26755\nG1 X-157.245 Y-102.090 E70.77593\nG1 X-155.427 Y-104.838 E71.03287\nG1 X-151.687 Y-110.180 E71.54124\nG1 X-149.727 Y-112.829 E71.79819\nG1 X-147.722 Y-115.441 E72.05488\nG1 X-143.631 Y-120.493 E72.56167\nG1 X-139.310 Y-125.464 E73.07529\nG1 X-134.876 Y-130.218 E73.58209\nG1 X-132.567 Y-132.569 E73.83903\nG1 X-127.877 Y-137.099 E74.34740\nG1 X-125.447 Y-139.325 E74.60435\nG1 X-122.981 Y-141.507 E74.86104\nG1 X-118.002 Y-145.685 E75.36783\nG1 X-112.810 Y-149.741 E75.88145\nG1 X-107.552 Y-153.561 E76.38824\nG1 X-104.819 Y-155.440 E76.64677\nG1 X-99.367 Y-158.980 E77.15356\nG1 X-96.558 Y-160.702 E77.41051\nG1 X-90.911 Y-163.962 E77.91888\nG1 X-88.015 Y-165.535 E78.17582\nG1 X-82.205 Y-168.496 E78.68420\nG1 X-79.231 Y-169.915 E78.94114\nG1 X-76.235 Y-171.280 E79.19784\nG1 X-70.251 Y-173.819 E79.70463\nG1 X-64.101 Y-176.180 E80.21825\nG1 X-57.955 Y-178.297 E80.72504\nG1 X-54.793 Y-179.294 E80.98356\nG1 X-48.544 Y-181.085 E81.49036\nG1 X-45.354 Y-181.911 E81.74730\nG1 X-39.001 Y-183.378 E82.25568\nG1 X-35.771 Y-184.035 E82.51262\nG1 X-29.350 Y-185.168 E83.02099\nG1 X-26.091 Y-185.655 E83.27794\nG1 X-22.826 Y-186.084 E83.53463\nG1 X-16.362 Y-186.764 E84.04142\nG1 X-9.790 Y-187.223 E84.55504\nG1 X-3.294 Y-187.450 E85.06183\nG1 X0.006 Y-187.479 E85.31908\nG1 X6.521 Y-187.366 E85.82715\nG1 X9.810 Y-187.223 E86.08379\nG1 X13.100 Y-187.021 E86.34079\nG1 X19.575 Y-186.454 E86.84758\nG1 X22.870 Y-186.079 E87.10611\nG1 X29.307 Y-185.174 E87.61290\nG1 X35.794 Y-184.031 E88.12652\nG1 X42.152 Y-182.679 E88.63331\nG1 X45.357 Y-181.910 E88.89025\nG1 X51.655 Y-180.223 E89.39863\nG1 X54.815 Y-179.287 E89.65557\nG1 X61.017 Y-177.272 E90.16395\nG1 X64.123 Y-176.172 E90.42089\nG1 X67.207 Y-175.019 E90.67759\nG1 X73.234 Y-172.584 E91.18438\nG1 X79.252 Y-169.905 E91.69800\nG1 X85.094 Y-167.055 E92.20479\nG1 X88.035 Y-165.524 E92.46332\nG1 X93.721 Y-162.373 E92.97011\nG1 X96.560 Y-160.700 E93.22705\nG1 X102.090 Y-157.245 E93.73543\nG1 X104.838 Y-155.427 E93.99237\nG1 X110.180 Y-151.687 E94.50074\nG1 X112.829 Y-149.727 E94.75768\nG1 X115.441 Y-147.722 E95.01438\nG1 X120.493 Y-143.631 E95.52117\nG1 X122.911 Y-141.529 E95.77098\n\n; end preskirt\n; start_gcode | end" +end_gcode = "; end_gcode | start\n\n; v11 2020-09-02_14-27 tillverka\n\n; use relative positioning\n\nG91\n\n; retract the filament a bit before lifting the nozzle to release some of the pressure\n\nG1 E-1 F300\n\n; home\n\nG28\n\n; use absolute positioning\n\nG90\n\n; cooldown\n\nM104 S0\nM140 S0\n\n; end_gcode | end\n" +before_layer_gcode = +layer_gcode = +toolchange_gcode = +between_objects_gcode = +retract_length = 4 +retract_lift = 0.3 +retract_lift_above = 0 +retract_lift_below = 449 +retract_speed = 30 +deretract_speed = 0 +retract_restart_extra = 0 +retract_before_travel = 2 +retract_layer_change = 1 +wipe = 1 +retract_before_wipe = 70% +retract_length_toolchange = 10 +retract_restart_extra_toolchange = 0 +extruder_colour = #1193FF +machine_max_acceleration_e = 3000 +machine_max_acceleration_extruding = 1000 +machine_max_acceleration_retracting = 1000 +machine_max_acceleration_x = 1500 +machine_max_acceleration_y = 1500 +machine_max_acceleration_z = 1500 +machine_max_feedrate_e = 60 +machine_max_feedrate_x = 200 +machine_max_feedrate_y = 200 +machine_max_feedrate_z = 200 +machine_max_jerk_e = 5 +machine_max_jerk_x = 5 +machine_max_jerk_y = 5 +machine_max_jerk_z = 5 +machine_min_extruding_rate = 0 +machine_min_travel_rate = 0 +octoprint_apikey = +octoprint_host = +printer_settings_id = +serial_port = +serial_speed = 125000 +printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PREDATOR\nPRINTER_HAS_BOWDEN\n +default_filament_profile = Generic PLA @PREDATOR + +[printer:Anycubic Predator 0.4 nozzle] +inherits = *common predator* +printer_model = PREDATOR +printer_variant = 0.4 +nozzle_diameter = 0.4 +min_layer_height = 0.08 +max_layer_height = 0.32 +default_print_profile = 0.16mm 0.4 nozzle DETAILED QUALITY @PREDATOR + +[printer:Anycubic Predator 0.6 nozzle] +inherits = *common predator* +printer_model = PREDATOR +printer_variant = 0.6 +nozzle_diameter = 0.6 +min_layer_height = 0.12 +max_layer_height = 0.4 +default_print_profile = 0.24mm 0.8 nozzle DETAILED QUALITY @PREDATOR + +[printer:Anycubic Predator 0.8 nozzle] +inherits = *common predator* +printer_model = PREDATOR +printer_variant = 0.8 +nozzle_diameter = 0.8 +min_layer_height = 0.16 +max_layer_height = 0.48 +default_print_profile = 0.24mm 0.8 nozzle DETAILED QUALITY @PREDATOR + +######################################### +########## end printer presets ########## +######################################### diff --git a/resources/profiles/Anycubic/PREDATOR_thumbnail.png b/resources/profiles/Anycubic/PREDATOR_thumbnail.png new file mode 100644 index 000000000..a68b7df30 Binary files /dev/null and b/resources/profiles/Anycubic/PREDATOR_thumbnail.png differ diff --git a/resources/profiles/BIBO.ini b/resources/profiles/BIBO.ini index 2c94fc470..968436ddd 100644 --- a/resources/profiles/BIBO.ini +++ b/resources/profiles/BIBO.ini @@ -7,7 +7,7 @@ name = BIBO # This means, the server may force the PrusaSlicer configuration to be downgraded. config_version = 0.0.5 # Where to get the updates from? -config_update_url = http://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/BIBO/ +config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/BIBO/ # The printer models will be shown by the Configuration Wizard in this order, # also the first model installed & the first nozzle installed will be activated after install. diff --git a/resources/profiles/LulzBot.ini b/resources/profiles/LulzBot.ini index b8fa117c3..7f7a0ab4d 100644 --- a/resources/profiles/LulzBot.ini +++ b/resources/profiles/LulzBot.ini @@ -4,7 +4,7 @@ # Vendor name will be shown by the Config Wizard. name = LulzBot config_version = 0.0.3 -config_update_url = http://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/LulzBot/ +config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/LulzBot/ [printer_model:MINI_AERO] name = Mini Aero diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 8c4956543..dead65581 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -204,11 +204,11 @@ if (WIN32) VERBATIM ) endif () - + # This has to be a separate target due to the windows command line lenght limits add_custom_target(slic3rDllsCopy ALL DEPENDS slic3r) prusaslicer_copy_dlls(slic3rDllsCopy) - + else () if (APPLE) # On OSX, the name of the binary matches the name of the Application. @@ -247,4 +247,7 @@ if (WIN32) endif () else () install(TARGETS slic3r RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") + + # Install the symlink for gcodeviewer + install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink prusa-slicer prusa-gcodeviewer WORKING_DIRECTORY ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR})") endif () diff --git a/src/PrusaSlicer.cpp b/src/PrusaSlicer.cpp index 3440bb6c4..fd4438604 100644 --- a/src/PrusaSlicer.cpp +++ b/src/PrusaSlicer.cpp @@ -40,23 +40,21 @@ #include "libslic3r/Format/OBJ.hpp" #include "libslic3r/Format/SL1.hpp" #include "libslic3r/Utils.hpp" -#include "libslic3r/AppConfig.hpp" +#include "libslic3r/Thread.hpp" #include "PrusaSlicer.hpp" #ifdef SLIC3R_GUI - #include "slic3r/GUI/GUI.hpp" - #include "slic3r/GUI/GUI_App.hpp" - #include "slic3r/GUI/3DScene.hpp" - #include "slic3r/GUI/InstanceCheck.hpp" - #include "slic3r/GUI/MainFrame.hpp" - #include "slic3r/GUI/Plater.hpp" + #include "slic3r/GUI/GUI_Init.hpp" #endif /* SLIC3R_GUI */ using namespace Slic3r; int CLI::run(int argc, char **argv) { + // Mark the main thread for the debugger and for runtime checks. + set_current_thread_name("slic3r_main"); + #ifdef __WXGTK__ // On Linux, wxGTK has no support for Wayland, and the app crashes on // startup if gtk3 is used. This env var has to be set explicitly to @@ -151,7 +149,7 @@ int CLI::run(int argc, char **argv) #if ENABLE_GCODE_VIEWER for (const std::string& file : m_input_files) { std::string ext = boost::filesystem::path(file).extension().string(); - if (boost::filesystem::path(file).extension().string() == ".gcode") { + if (ext == ".gcode" || ext == ".g") { if (boost::filesystem::exists(file)) { start_as_gcodeviewer = true; break; @@ -573,75 +571,20 @@ int CLI::run(int argc, char **argv) if (start_gui) { #ifdef SLIC3R_GUI -// #ifdef USE_WX -#if ENABLE_GCODE_VIEWER - GUI::GUI_App* gui = new GUI::GUI_App(start_as_gcodeviewer ? GUI::GUI_App::EAppMode::GCodeViewer : GUI::GUI_App::EAppMode::Editor); - if (gui->get_app_mode() != GUI::GUI_App::EAppMode::GCodeViewer) { - // G-code viewer is currently not performing instance check, a new G-code viewer is started every time. - bool gui_single_instance_setting = gui->app_config->get("single_instance") == "1"; - if (Slic3r::instance_check(argc, argv, gui_single_instance_setting)) { - //TODO: do we have delete gui and other stuff? - return -1; - } - } -#else - GUI::GUI_App *gui = new GUI::GUI_App(); -#endif // ENABLE_GCODE_VIEWER - -// gui->autosave = m_config.opt_string("autosave"); - GUI::GUI_App::SetInstance(gui); -#if ENABLE_GCODE_VIEWER - gui->after_init_loads.set_params(load_configs, m_extra_config, m_input_files, start_as_gcodeviewer); -#else - gui->after_init_loads.set_params(load_configs, m_extra_config, m_input_files); -#endif // ENABLE_GCODE_VIEWER -/* -#if ENABLE_GCODE_VIEWER - gui->CallAfter([gui, this, &load_configs, start_as_gcodeviewer] { -#else - gui->CallAfter([gui, this, &load_configs] { -#endif // ENABLE_GCODE_VIEWER - if (!gui->initialized()) { - return; - } - -#if ENABLE_GCODE_VIEWER - if (start_as_gcodeviewer) { - if (!m_input_files.empty()) - gui->plater()->load_gcode(wxString::FromUTF8(m_input_files[0].c_str())); - } else { -#endif // ENABLE_GCODE_VIEWER_AS -#if 0 - // Load the cummulative config over the currently active profiles. - //FIXME if multiple configs are loaded, only the last one will have an effect. - // We need to decide what to do about loading of separate presets (just print preset, just filament preset etc). - // As of now only the full configs are supported here. - if (!m_print_config.empty()) - gui->mainframe->load_config(m_print_config); -#endif - if (!load_configs.empty()) - // Load the last config to give it a name at the UI. The name of the preset may be later - // changed by loading an AMF or 3MF. - //FIXME this is not strictly correct, as one may pass a print/filament/printer profile here instead of a full config. - gui->mainframe->load_config_file(load_configs.back()); - // If loading a 3MF file, the config is loaded from the last one. - if (!m_input_files.empty()) - gui->plater()->load_files(m_input_files, true, true); - if (!m_extra_config.empty()) - gui->mainframe->load_config(m_extra_config); -#if ENABLE_GCODE_VIEWER - } -#endif // ENABLE_GCODE_VIEWER - }); -*/ - int result = wxEntry(argc, argv); - return result; -#else /* SLIC3R_GUI */ + Slic3r::GUI::GUI_InitParams params; + params.argc = argc; + params.argv = argv; + params.load_configs = load_configs; + params.extra_config = std::move(m_extra_config); + params.input_files = std::move(m_input_files); + params.start_as_gcodeviewer = start_as_gcodeviewer; + return Slic3r::GUI::GUI_Run(params); +#else // SLIC3R_GUI // No GUI support. Just print out a help. this->print_help(false); // If started without a parameter, consider it to be OK, otherwise report an error code (no action etc). return (argc == 0) ? 0 : 1; -#endif /* SLIC3R_GUI */ +#endif // SLIC3R_GUI } return 0; diff --git a/src/hidapi/linux/hid.c b/src/hidapi/linux/hid.c index d68354fe1..5f486c0a9 100644 --- a/src/hidapi/linux/hid.c +++ b/src/hidapi/linux/hid.c @@ -42,10 +42,16 @@ #include #include #include -#include #include "hidapi.h" +// Declare udev structures needed in this module. They are passed by pointers +// to udev functions and not used directly. +struct udev_device; +struct udev_list_entry; +struct udev_enumerate; +struct udev; + typedef const char* (*hid_wrapper_udev_device_get_devnode_type)(struct udev_device *udev_device); typedef struct udev_device* (*hid_wrapper_udev_device_get_parent_with_subsystem_devtype_type)(struct udev_device *udev_device, const char *subsystem, const char *devtype); typedef const char* (*hid_wrapper_udev_device_get_sysattr_value_type)(struct udev_device *udev_device, const char *sysattr); diff --git a/src/libslic3r/AppConfig.cpp b/src/libslic3r/AppConfig.cpp index e54486e4e..d1c1c460c 100644 --- a/src/libslic3r/AppConfig.cpp +++ b/src/libslic3r/AppConfig.cpp @@ -2,6 +2,7 @@ #include "libslic3r/Utils.hpp" #include "AppConfig.hpp" #include "Exception.hpp" +#include "Thread.hpp" #include #include @@ -80,9 +81,9 @@ void AppConfig::set_defaults() set("single_instance", #ifdef __APPLE__ "1" -#else __APPLE__ +#else // __APPLE__ "0" -#endif __APPLE__ +#endif // __APPLE__ ); if (get("remember_output_path").empty()) @@ -218,6 +219,13 @@ std::string AppConfig::load() void AppConfig::save() { + { + // Returns "undefined" if the thread naming functionality is not supported by the operating system. + std::optional current_thread_name = get_current_thread_name(); + if (current_thread_name && *current_thread_name != "slic3r_main") + throw CriticalException("Calling AppConfig::save() from a worker thread!"); + } + // The config is first written to a file with a PID suffix and then moved // to avoid race conditions with multiple instances of Slic3r const auto path = config_path(); diff --git a/src/libslic3r/CMakeLists.txt b/src/libslic3r/CMakeLists.txt index 5df62138e..bd2df0c7e 100644 --- a/src/libslic3r/CMakeLists.txt +++ b/src/libslic3r/CMakeLists.txt @@ -209,6 +209,8 @@ add_library(libslic3r STATIC Utils.hpp Time.cpp Time.hpp + Thread.cpp + Thread.hpp TriangleSelector.cpp TriangleSelector.hpp MTUtils.hpp diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index e6c496a1a..53883f03b 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -828,7 +828,8 @@ void GCode::do_export(Print* print, const char* path, GCodePreviewData* preview_ std::error_code err_code; if (rename_file(path_tmp, path)) - if (copy_file(path_tmp, path, true) != SUCCESS) + if (copy_file(path_tmp, path, ("Failed to rename the output G-code file from " + path_tmp + " to " + path + '\n' + + "Is " + path_tmp + " locked? " + err_code.message() + '\n'), true) != CopyFileResult::SUCCESS) throw Slic3r::RuntimeError( std::string("Failed to rename the output G-code file from ") + path_tmp + " to " + path + '\n' + "Is " + path_tmp + " locked? " + err_code.message() + '\n'); @@ -1880,16 +1881,22 @@ static bool custom_gcode_sets_temperature(const std::string &gcode, const int mc while (*ptr != 0) { // Skip whitespaces. for (; *ptr == ' ' || *ptr == '\t'; ++ ptr); - if (*ptr == 'M') { - // Line starts with 'M'. It is a machine command. + if (*ptr == 'M' || // Line starts with 'M'. It is a machine command. + (*ptr == 'G' && include_g10)) { // Only check for G10 if requested + bool is_gcode = *ptr == 'G'; ++ ptr; - // Parse the M code value. + // Parse the M or G code value. char *endptr = nullptr; - int mcode = int(strtol(ptr, &endptr, 10)); - if (endptr != nullptr && endptr != ptr && (mcode == mcode_set_temp_dont_wait || mcode == mcode_set_temp_and_wait)) { + int mgcode = int(strtol(ptr, &endptr, 10)); + if (endptr != nullptr && endptr != ptr && + is_gcode ? + // G10 found + mgcode == 10 : // M104/M109 or M140/M190 found. + (mgcode == mcode_set_temp_dont_wait || mgcode == mcode_set_temp_and_wait)) { ptr = endptr; - // Let the caller know that the custom G-code sets the temperature. + if (! is_gcode) + // Let the caller know that the custom M-code sets the temperature. temp_set_by_gcode = true; // Now try to parse the temperature value. // While not at the end of the line: @@ -1905,6 +1912,10 @@ static bool custom_gcode_sets_temperature(const std::string &gcode, const int mc if (endptr > ptr) { ptr = endptr; temp_out = temp_parsed; + // Let the caller know that the custom G-code sets the temperature + // Only do this after successfully parsing temperature since G10 + // can be used for other reasons + temp_set_by_gcode = true; } } else { // Skip this word. @@ -1912,41 +1923,7 @@ static bool custom_gcode_sets_temperature(const std::string &gcode, const int mc } } } - } else if (*ptr == 'G' && include_g10) { // Only check for G10 if requested - // Line starts with 'G'. - ++ ptr; - // Parse the G code value. - char *endptr = nullptr; - int gcode = int(strtol(ptr, &endptr, 10)); - if (endptr != nullptr && endptr != ptr && gcode == 10 /* G10 */) { - // G10 code found - ptr = endptr; - // Now try to parse the temperature value. - // While not at the end of the line: - while (strchr(";\r\n\0", *ptr) == nullptr) { - // Skip whitespaces. - for (; *ptr == ' ' || *ptr == '\t'; ++ ptr); - if (*ptr == 'S') { - // Skip whitespaces. - for (++ ptr; *ptr == ' ' || *ptr == '\t'; ++ ptr); - // Parse an int. - endptr = nullptr; - long temp_parsed = strtol(ptr, &endptr, 10); - if (endptr > ptr) { - ptr = endptr; - temp_out = temp_parsed; - // Let the caller know that the custom G-code sets the temperature - // Only do this after successfully parsing temperature since G10 - // can be used for other reasons - temp_set_by_gcode = true; } - } else { - // Skip this word. - for (; strchr(" \t;\r\n\0", *ptr) == nullptr; ++ ptr); - } - } - } - } // Skip the rest of the line. for (; *ptr != 0 && *ptr != '\r' && *ptr != '\n'; ++ ptr); // Skip the end of line indicators. @@ -2035,11 +2012,13 @@ void GCode::_print_first_layer_bed_temperature(FILE *file, Print &print, const s // Only do that if the start G-code does not already contain any M-code controlling an extruder temperature. // M104 - Set Extruder Temperature // M109 - Set Extruder Temperature and Wait +// RepRapFirmware: G10 Sxx void GCode::_print_first_layer_extruder_temperatures(FILE *file, Print &print, const std::string &gcode, unsigned int first_printing_extruder_id, bool wait) { // Is the bed temperature set by the provided custom G-code? int temp_by_gcode = -1; - if (custom_gcode_sets_temperature(gcode, 104, 109, true, temp_by_gcode)) { + bool include_g10 = print.config().gcode_flavor == gcfRepRap; + if (custom_gcode_sets_temperature(gcode, 104, 109, include_g10, temp_by_gcode)) { // Set the extruder temperature at m_writer, but throw away the generated G-code as it will be written with the custom G-code. int temp = print.config().first_layer_temperature.get_at(first_printing_extruder_id); if (temp_by_gcode >= 0 && temp_by_gcode < 1000) diff --git a/src/libslic3r/GCode/GCodeProcessor.cpp b/src/libslic3r/GCode/GCodeProcessor.cpp index cbb64577c..5ae985239 100644 --- a/src/libslic3r/GCode/GCodeProcessor.cpp +++ b/src/libslic3r/GCode/GCodeProcessor.cpp @@ -400,7 +400,7 @@ void GCodeProcessor::TimeProcessor::post_process(const std::string& filename) const TimeMachine& machine = machines[i]; if (machine.enabled && g1_lines_counter < machine.g1_times_cache.size()) { float elapsed_time = machine.g1_times_cache[g1_lines_counter]; - std::pair to_export = { int(::roundf(100.0f * elapsed_time / machine.time)), + std::pair to_export = { int(100.0f * elapsed_time / machine.time), time_in_minutes(machine.time - elapsed_time) }; if (last_exported[i] != to_export) { export_line += format_line_M73(machine.line_m73_mask.c_str(), @@ -461,7 +461,8 @@ void GCodeProcessor::TimeProcessor::post_process(const std::string& filename) std::error_code err_code; if (err_code = rename_file(out_path, filename)) - if(copy_file(out_path, filename, true) != SUCCESS) + if(copy_file(out_path, filename, (std::string("Failed to rename the output G-code file from ") + out_path + " to " + filename + '\n' + + "Is " + out_path + " locked? (gcp)" + err_code.message() + '\n'), true) != SUCCESS) throw Slic3r::RuntimeError(std::string("Failed to rename the output G-code file from ") + out_path + " to " + filename + '\n' + "Is " + out_path + " locked? (gcp)" + err_code.message() + '\n'); } @@ -691,7 +692,7 @@ void GCodeProcessor::reset() m_global_positioning_type = EPositioningType::Absolute; m_e_local_positioning_type = EPositioningType::Absolute; m_extruder_offsets = std::vector(Min_Extruder_Count, Vec3f::Zero()); - m_flavor = gcfRepRap; + m_flavor = gcfSprinter; m_start_position = { 0.0f, 0.0f, 0.0f, 0.0f }; m_end_position = { 0.0f, 0.0f, 0.0f, 0.0f }; @@ -1128,6 +1129,8 @@ bool GCodeProcessor::process_cura_tags(const std::string& comment) m_flavor = gcfRepetier; else if (flavor == "RepRap") m_flavor = gcfRepRap; + else if (flavor == "Sprinter") + m_flavor = gcfSprinter; else if (flavor == "Marlin") m_flavor = gcfMarlin; else @@ -1832,7 +1835,7 @@ void GCodeProcessor::process_M201(const GCodeReader::GCodeLine& line) return; // see http://reprap.org/wiki/G-code#M201:_Set_max_printing_acceleration - float factor = (m_flavor != gcfRepRap && m_units == EUnits::Inches) ? INCHES_TO_MM : 1.0f; + float factor = ((m_flavor != gcfSprinter && m_flavor != gcfRepRap) && m_units == EUnits::Inches) ? INCHES_TO_MM : 1.0f; for (size_t i = 0; i < static_cast(PrintEstimatedTimeStatistics::ETimeMode::Count); ++i) { if (line.has_x()) diff --git a/src/libslic3r/GCodeWriter.cpp b/src/libslic3r/GCodeWriter.cpp index db710665f..fbb3e765a 100644 --- a/src/libslic3r/GCodeWriter.cpp +++ b/src/libslic3r/GCodeWriter.cpp @@ -100,7 +100,7 @@ std::string GCodeWriter::set_temperature(const unsigned int temperature, bool wa return ""; std::string code, comment; - if (wait && FLAVOR_IS_NOT(gcfTeacup) && FLAVOR_IS_NOT(gcfRepRap) && FLAVOR_IS_NOT(gcfSprinter)) { + if (wait && FLAVOR_IS_NOT(gcfTeacup) && FLAVOR_IS_NOT(gcfRepRap)) { code = "M109"; comment = "set temperature and wait for it to be reached"; } else { @@ -124,7 +124,9 @@ std::string GCodeWriter::set_temperature(const unsigned int temperature, bool wa gcode << temp_w_offset; bool multiple_tools = this->multiple_extruders && ! m_single_extruder_multi_material; if (tool != -1 && (multiple_tools || FLAVOR_IS(gcfMakerWare) || FLAVOR_IS(gcfSailfish)) ) { - if (FLAVOR_IS_NOT(gcfRepRap)) { + if (FLAVOR_IS(gcfRepRap)) { + gcode << " P" << tool; + } else { gcode << " T" << tool; } } diff --git a/src/libslic3r/MeshBoolean.cpp b/src/libslic3r/MeshBoolean.cpp index 10b387027..ed22dfc71 100644 --- a/src/libslic3r/MeshBoolean.cpp +++ b/src/libslic3r/MeshBoolean.cpp @@ -12,7 +12,6 @@ #include #include #include -#include #include #include #include diff --git a/src/libslic3r/Model.cpp b/src/libslic3r/Model.cpp index a8339ae1d..d0ee56082 100644 --- a/src/libslic3r/Model.cpp +++ b/src/libslic3r/Model.cpp @@ -1055,6 +1055,7 @@ void ModelObject::convert_units(ModelObjectPtrs& new_objects, bool from_imperial ModelVolume* vol = new_object->add_volume(mesh); vol->name = volume->name; + vol->set_type(volume->type()); // Don't copy the config's ID. vol->config.assign_config(volume->config); assert(vol->config.id().valid()); @@ -1065,7 +1066,7 @@ void ModelObject::convert_units(ModelObjectPtrs& new_objects, bool from_imperial if (volume_idxs.empty() || std::find(volume_idxs.begin(), volume_idxs.end(), vol_idx) != volume_idxs.end()) { vol->scale_geometry_after_creation(versor); - vol->set_offset(versor.cwiseProduct(vol->get_offset())); + vol->set_offset(versor.cwiseProduct(volume->get_offset())); } else vol->set_offset(volume->get_offset()); diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 3a6ba6201..aa8ba2c4b 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -11,6 +11,7 @@ #include "I18N.hpp" #include "ShortestPath.hpp" #include "SupportMaterial.hpp" +#include "Thread.hpp" #include "GCode.hpp" #include "GCode/WipeTower.hpp" #include "Utils.hpp" @@ -1696,6 +1697,8 @@ void Print::auto_assign_extruders(ModelObject* model_object) const // Slicing process, running at a background thread. void Print::process() { + name_tbb_thread_pool_threads(); + BOOST_LOG_TRIVIAL(info) << "Starting the slicing process." << log_memory_info(); for (PrintObject *obj : m_objects) obj->make_perimeters(); diff --git a/src/libslic3r/Print.hpp b/src/libslic3r/Print.hpp index 79a8069ff..aecc82c84 100644 --- a/src/libslic3r/Print.hpp +++ b/src/libslic3r/Print.hpp @@ -38,17 +38,18 @@ namespace FillAdaptive { }; // Print step IDs for keeping track of the print state. +// The Print steps are applied in this order. enum PrintStep { - psSkirt, - psBrim, - // Synonym for the last step before the Wipe Tower / Tool Ordering, for the G-code preview slider to understand that - // all the extrusions are there for the layer slider to add color changes etc. - psExtrusionPaths = psBrim, psWipeTower, + // Ordering of the tools on PrintObjects for a multi-material print. // psToolOrdering is a synonym to psWipeTower, as the Wipe Tower calculates and modifies the ToolOrdering, // while if printing without the Wipe Tower, the ToolOrdering is calculated as well. psToolOrdering = psWipeTower, - psSlicingFinished = psToolOrdering, + psSkirt, + psBrim, + // Last step before G-code export, after this step is finished, the initial extrusion path preview + // should be refreshed. + psSlicingFinished = psBrim, psGCodeExport, psCount, }; diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 3cbde26ca..070c67278 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -1778,7 +1778,7 @@ void PrintConfigDef::init_fff_params() def->enum_values.push_back("sprinter"); def->enum_values.push_back("lerdge"); def->enum_values.push_back("no-extrusion"); - def->enum_labels.push_back("RepRap"); + def->enum_labels.push_back("RepRapFirmware"); def->enum_labels.push_back("Repetier"); def->enum_labels.push_back("Teacup"); def->enum_labels.push_back("MakerWare (MakerBot)"); @@ -1792,7 +1792,7 @@ void PrintConfigDef::init_fff_params() def->enum_labels.push_back("Lerdge"); def->enum_labels.push_back(L("No extrusion")); def->mode = comAdvanced; - def->set_default_value(new ConfigOptionEnum(gcfRepRap)); + def->set_default_value(new ConfigOptionEnum(gcfSprinter)); def = this->add("gcode_label_objects", coBool); def->label = L("Label objects"); diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp index 5a48e4d3f..add088467 100644 --- a/src/libslic3r/PrintObject.cpp +++ b/src/libslic3r/PrintObject.cpp @@ -861,14 +861,14 @@ bool PrintObject::invalidate_step(PrintObjectStep step) // propagate to dependent steps if (step == posPerimeters) { - invalidated |= this->invalidate_steps({ posPrepareInfill, posInfill }); + invalidated |= this->invalidate_steps({ posPrepareInfill, posInfill, posIroning }); invalidated |= m_print->invalidate_steps({ psSkirt, psBrim }); } else if (step == posPrepareInfill) { - invalidated |= this->invalidate_step(posInfill); + invalidated |= this->invalidate_steps({ posInfill, posIroning }); } else if (step == posInfill) { invalidated |= m_print->invalidate_steps({ psSkirt, psBrim }); } else if (step == posSlice) { - invalidated |= this->invalidate_steps({ posPerimeters, posPrepareInfill, posInfill, posSupportMaterial }); + invalidated |= this->invalidate_steps({ posPerimeters, posPrepareInfill, posInfill, posIroning, posSupportMaterial }); invalidated |= m_print->invalidate_steps({ psSkirt, psBrim }); this->m_slicing_params.valid = false; } else if (step == posSupportMaterial) { @@ -2228,12 +2228,6 @@ void PrintObject::_slice(const std::vector &layer_height_profile) m_typed_slices = false; -#ifdef SLIC3R_PROFILE - // Disable parallelization so the Shiny profiler works - static tbb::task_scheduler_init *tbb_init = nullptr; - tbb_init = new tbb::task_scheduler_init(1); -#endif - // 1) Initialize layers and their slice heights. std::vector slice_zs; { diff --git a/src/libslic3r/SLAPrint.cpp b/src/libslic3r/SLAPrint.cpp index b6c321c09..4dae5beec 100644 --- a/src/libslic3r/SLAPrint.cpp +++ b/src/libslic3r/SLAPrint.cpp @@ -4,6 +4,7 @@ #include "ClipperUtils.hpp" #include "Geometry.hpp" #include "MTUtils.hpp" +#include "Thread.hpp" #include #include @@ -689,7 +690,10 @@ bool SLAPrint::invalidate_step(SLAPrintStep step) void SLAPrint::process() { - if(m_objects.empty()) return; + if (m_objects.empty()) + return; + + name_tbb_thread_pool_threads(); // Assumption: at this point the print objects should be populated only with // the model objects we have to process and the instances are also filtered diff --git a/src/libslic3r/Technologies.hpp b/src/libslic3r/Technologies.hpp index 2872346a1..7c63c3ffd 100644 --- a/src/libslic3r/Technologies.hpp +++ b/src/libslic3r/Technologies.hpp @@ -57,4 +57,5 @@ #define ENABLE_GCODE_VIEWER_STATISTICS (0 && ENABLE_GCODE_VIEWER) #define ENABLE_GCODE_VIEWER_DATA_CHECKING (0 && ENABLE_GCODE_VIEWER) + #endif // _prusaslicer_technologies_h_ diff --git a/src/libslic3r/Thread.cpp b/src/libslic3r/Thread.cpp new file mode 100644 index 000000000..4e915f0c9 --- /dev/null +++ b/src/libslic3r/Thread.cpp @@ -0,0 +1,238 @@ +#ifdef _WIN32 + #include + #include +#else + // any posix system + #include +#endif + +#include +#include +#include +#include +#include + + +#include "Thread.hpp" + +namespace Slic3r { + +#ifdef _WIN32 +// The new API is better than the old SEH style thread naming since the names also show up in crash dumpsand ETW traces. +// Because the new API is only available on newer Windows 10, look it up dynamically. + +typedef HRESULT(__stdcall* SetThreadDescriptionType)(HANDLE, PCWSTR); +typedef HRESULT(__stdcall* GetThreadDescriptionType)(HANDLE, PWSTR*); + +static bool s_SetGetThreadDescriptionInitialized = false; +static HMODULE s_hKernel32 = nullptr; +static SetThreadDescriptionType s_fnSetThreadDescription = nullptr; +static GetThreadDescriptionType s_fnGetThreadDescription = nullptr; + +static bool WindowsGetSetThreadNameAPIInitialize() +{ + if (! s_SetGetThreadDescriptionInitialized) { + // Not thread safe! It is therefore a good idea to name the main thread before spawning worker threads + // to initialize + s_hKernel32 = LoadLibraryW(L"Kernel32.dll"); + if (s_hKernel32) { + s_fnSetThreadDescription = (SetThreadDescriptionType)::GetProcAddress(s_hKernel32, "SetThreadDescription"); + s_fnGetThreadDescription = (GetThreadDescriptionType)::GetProcAddress(s_hKernel32, "GetThreadDescription"); + } + s_SetGetThreadDescriptionInitialized = true; + } + return s_fnSetThreadDescription && s_fnGetThreadDescription; +} + +#ifndef NDEBUG + // Use the old way by throwing an exception, so at least in Debug mode the thread names are shown by the debugger. + static constexpr DWORD MSVC_SEH_EXCEPTION_NAME_THREAD = 0x406D1388; + +#pragma pack(push,8) + typedef struct tagTHREADNAME_INFO + { + DWORD dwType; // Must be 0x1000. + LPCSTR szName; // Pointer to name (in user addr space). + DWORD dwThreadID; // Thread ID (-1=caller thread). + DWORD dwFlags; // Reserved for future use, must be zero. + } THREADNAME_INFO; +#pragma pack(pop) + + static void WindowsSetThreadNameSEH(HANDLE hThread, const char* thread_name) + { + THREADNAME_INFO info; + info.dwType = 0x1000; + info.szName = thread_name; + info.dwThreadID = ::GetThreadId(hThread); + info.dwFlags = 0; + __try { + RaiseException(MSVC_SEH_EXCEPTION_NAME_THREAD, 0, sizeof(info) / sizeof(ULONG_PTR), (ULONG_PTR*)&info); + } __except (EXCEPTION_EXECUTE_HANDLER) { + } + } +#endif // NDEBUG + +static bool WindowsSetThreadName(HANDLE hThread, const char *thread_name) +{ + if (! WindowsGetSetThreadNameAPIInitialize()) { +#ifdef NDEBUG + return false; +#else // NDEBUG + // Running on Windows 7 or old Windows 7 in debug mode, + // inform the debugger about the thread name by throwing an SEH. + WindowsSetThreadNameSEH(hThread, thread_name); + return true; +#endif // NDEBUG + } + + size_t len = strlen(thread_name); + if (len < 1024) { + // Allocate the temp string on stack. + wchar_t buf[1024]; + s_fnSetThreadDescription(hThread, boost::nowide::widen(buf, 1024, thread_name)); + } else { + // Allocate dynamically. + s_fnSetThreadDescription(hThread, boost::nowide::widen(thread_name).c_str()); + } + return true; +} + +bool set_thread_name(std::thread &thread, const char *thread_name) +{ + return WindowsSetThreadName(static_cast(thread.native_handle()), thread_name); +} + +bool set_thread_name(boost::thread &thread, const char *thread_name) +{ + return WindowsSetThreadName(static_cast(thread.native_handle()), thread_name); +} + +bool set_current_thread_name(const char *thread_name) +{ + return WindowsSetThreadName(::GetCurrentThread(), thread_name); +} + +std::optional get_current_thread_name() +{ + if (! WindowsGetSetThreadNameAPIInitialize()) + return std::nullopt; + + wchar_t *ptr = nullptr; + s_fnGetThreadDescription(::GetCurrentThread(), &ptr); + return (ptr == nullptr) ? std::string() : boost::nowide::narrow(ptr); +} + +#else // _WIN32 + +#ifdef __APPLE__ + +// Appe screwed the Posix norm. +bool set_thread_name(std::thread &thread, const char *thread_name) +{ +// not supported +// pthread_setname_np(thread.native_handle(), thread_name); + return false; +} + +bool set_thread_name(boost::thread &thread, const char *thread_name) +{ +// not supported +// pthread_setname_np(thread.native_handle(), thread_name); + return false; +} + +bool set_current_thread_name(const char *thread_name) +{ + pthread_setname_np(thread_name); + return true; +} + +std::optional get_current_thread_name() +{ +// not supported +// char buf[16]; +// return std::string(thread_getname_np(buf, 16) == 0 ? buf : ""); + return std::nullopt; +} + +#else + +// posix +bool set_thread_name(std::thread &thread, const char *thread_name) +{ + pthread_setname_np(thread.native_handle(), thread_name); + return true; +} + +bool set_thread_name(boost::thread &thread, const char *thread_name) +{ + pthread_setname_np(thread.native_handle(), thread_name); + return true; +} + +bool set_current_thread_name(const char *thread_name) +{ + pthread_setname_np(pthread_self(), thread_name); + return true; +} + +std::optional get_current_thread_name() +{ + char buf[16]; + return std::string(pthread_getname_np(pthread_self(), buf, 16) == 0 ? buf : ""); +} + +#endif + +#endif // _WIN32 + +// Spawn (n - 1) worker threads on Intel TBB thread pool and name them by an index and a system thread ID. +void name_tbb_thread_pool_threads() +{ + static bool initialized = false; + if (initialized) + return; + initialized = true; + + const size_t nthreads_hw = std::thread::hardware_concurrency(); + size_t nthreads = nthreads_hw; + +#ifdef SLIC3R_PROFILE + // Shiny profiler is not thread safe, thus disable parallelization. + nthreads = 1; +#endif + + if (nthreads != nthreads_hw) + new tbb::task_scheduler_init(int(nthreads)); + + std::atomic nthreads_running(0); + std::condition_variable cv; + std::mutex cv_m; + auto master_thread_id = tbb::this_tbb_thread::get_id(); + tbb::parallel_for( + tbb::blocked_range(0, nthreads, 1), + [&nthreads_running, nthreads, &master_thread_id, &cv, &cv_m](const tbb::blocked_range &range) { + assert(range.begin() + 1 == range.end()); + if (nthreads_running.fetch_add(1) + 1 == nthreads) { + // All threads are spinning. + // Wake them up. + cv.notify_all(); + } else { + // Wait for the last thread to wake the others. + std::unique_lock lk(cv_m); + cv.wait(lk, [&nthreads_running, nthreads]{return nthreads_running == nthreads;}); + } + auto thread_id = tbb::this_tbb_thread::get_id(); + if (thread_id == master_thread_id) { + // The calling thread runs the 0'th task. + assert(range.begin() == 0); + } else { + assert(range.begin() > 0); + std::ostringstream name; + name << "slic3r_tbb_" << range.begin(); + set_current_thread_name(name.str().c_str()); + } + }); +} + +} diff --git a/src/libslic3r/Thread.hpp b/src/libslic3r/Thread.hpp new file mode 100644 index 000000000..a86123796 --- /dev/null +++ b/src/libslic3r/Thread.hpp @@ -0,0 +1,57 @@ +#ifndef GUI_THREAD_HPP +#define GUI_THREAD_HPP + +#include +#include +#include +#include + +namespace Slic3r { + +// Set / get thread name. +// Returns false if the API is not supported. +// +// It is a good idea to name the main thread before spawning children threads, because dynamic linking is used on Windows 10 +// to initialize Get/SetThreadDescription functions, which is not thread safe. +// +// pthread_setname_np supports maximum 15 character thread names! (16th character is the null terminator) +// +// Methods taking the thread as an argument are not supported by OSX. +// Naming threads is only supported on newer Windows 10. + +bool set_thread_name(std::thread &thread, const char *thread_name); +inline bool set_thread_name(std::thread &thread, const std::string &thread_name) { return set_thread_name(thread, thread_name.c_str()); } +bool set_thread_name(boost::thread &thread, const char *thread_name); +inline bool set_thread_name(boost::thread &thread, const std::string &thread_name) { return set_thread_name(thread, thread_name.c_str()); } +bool set_current_thread_name(const char *thread_name); +inline bool set_current_thread_name(const std::string &thread_name) { return set_current_thread_name(thread_name.c_str()); } + +// Returns nullopt if not supported. +// Not supported by OSX. +// Naming threads is only supported on newer Windows 10. +std::optional get_current_thread_name(); + +// To be called somewhere before the TBB threads are spinned for the first time, to +// give them names recognizible in the debugger. +void name_tbb_thread_pool_threads(); + +template +inline boost::thread create_thread(boost::thread::attributes &attrs, Fn &&fn) +{ + // Duplicating the stack allocation size of Thread Building Block worker + // threads of the thread pool: allocate 4MB on a 64bit system, allocate 2MB + // on a 32bit system by default. + + attrs.set_stack_size((sizeof(void*) == 4) ? (2048 * 1024) : (4096 * 1024)); + return boost::thread{attrs, std::forward(fn)}; +} + +template inline boost::thread create_thread(Fn &&fn) +{ + boost::thread::attributes attrs; + return create_thread(attrs, std::forward(fn)); +} + +} + +#endif // GUI_THREAD_HPP diff --git a/src/libslic3r/Utils.hpp b/src/libslic3r/Utils.hpp index ad3be66e5..cda20dbc0 100644 --- a/src/libslic3r/Utils.hpp +++ b/src/libslic3r/Utils.hpp @@ -7,6 +7,8 @@ #include #include +#include + #include "libslic3r.h" namespace boost { namespace filesystem { class directory_entry; }} @@ -73,11 +75,12 @@ enum CopyFileResult { FAIL_CHECK_TARGET_NOT_OPENED }; // Copy a file, adjust the access attributes, so that the target is writable. -CopyFileResult copy_file_inner(const std::string &from, const std::string &to); +CopyFileResult copy_file_inner(const std::string &from, const std::string &to, std::string& error_message); // Copy file to a temp file first, then rename it to the final file name. // If with_check is true, then the content of the copied file is compared to the content // of the source file before renaming. -extern CopyFileResult copy_file(const std::string &from, const std::string &to, const bool with_check = false); +// Additional error info is passed in error message. +extern CopyFileResult copy_file(const std::string &from, const std::string &to, std::string& error_message, const bool with_check = false); // Compares two files if identical. extern CopyFileResult check_copy(const std::string& origin, const std::string& copy); diff --git a/src/libslic3r/utils.cpp b/src/libslic3r/utils.cpp index 91b95afd2..dbcb271bb 100644 --- a/src/libslic3r/utils.cpp +++ b/src/libslic3r/utils.cpp @@ -417,7 +417,7 @@ std::error_code rename_file(const std::string &from, const std::string &to) #endif } -CopyFileResult copy_file_inner(const std::string& from, const std::string& to) +CopyFileResult copy_file_inner(const std::string& from, const std::string& to, std::string& error_message) { const boost::filesystem::path source(from); const boost::filesystem::path target(to); @@ -429,20 +429,31 @@ CopyFileResult copy_file_inner(const std::string& from, const std::string& to) // the copy_file() function will fail appropriately and we don't want the permission() // calls to cause needless failures on permissionless filesystems (ie. FATs on SD cards etc.) // or when the target file doesn't exist. + + //This error code is ignored boost::system::error_code ec; + boost::filesystem::permissions(target, perms, ec); + //if (ec) + // BOOST_LOG_TRIVIAL(error) << "Copy file permisions before copy error message: " << ec.message(); + // This error code is passed up + ec.clear(); boost::filesystem::copy_file(source, target, boost::filesystem::copy_option::overwrite_if_exists, ec); if (ec) { + error_message = ec.message(); return FAIL_COPY_FILE; } + //ec.clear(); boost::filesystem::permissions(target, perms, ec); + //if (ec) + // BOOST_LOG_TRIVIAL(error) << "Copy file permisions after copy error message: " << ec.message(); return SUCCESS; } -CopyFileResult copy_file(const std::string &from, const std::string &to, const bool with_check) +CopyFileResult copy_file(const std::string &from, const std::string &to, std::string& error_message, const bool with_check) { std::string to_temp = to + ".tmp"; - CopyFileResult ret_val = copy_file_inner(from,to_temp); + CopyFileResult ret_val = copy_file_inner(from, to_temp, error_message); if(ret_val == SUCCESS) { if (with_check) diff --git a/src/platform/unix/PrusaSlicer.desktop b/src/platform/unix/PrusaSlicer.desktop new file mode 100644 index 000000000..464873f45 --- /dev/null +++ b/src/platform/unix/PrusaSlicer.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Name=PrusaSlicer +Exec=prusa-slicer %F +Icon=PrusaSlicer +Terminal=false +Type=Application +MimeType=model/stl;application/vnd.ms-3mfdocument;application/prs.wavefront-obj;application/x-amf; +Categories=Graphics;3DGraphics; +Keywords=3D;Printing;Slicer; \ No newline at end of file diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt index b51472f20..eb7d1c6a0 100644 --- a/src/slic3r/CMakeLists.txt +++ b/src/slic3r/CMakeLists.txt @@ -91,6 +91,8 @@ set(SLIC3R_GUI_SOURCES GUI/PresetHints.hpp GUI/GUI.cpp GUI/GUI.hpp + GUI/GUI_Init.cpp + GUI/GUI_Init.hpp GUI/GUI_Preview.cpp GUI/GUI_Preview.hpp GUI/GUI_App.cpp @@ -105,6 +107,8 @@ set(SLIC3R_GUI_SOURCES GUI/Plater.hpp GUI/PresetComboBoxes.hpp GUI/PresetComboBoxes.cpp + GUI/SavePresetDialog.hpp + GUI/SavePresetDialog.cpp GUI/PhysicalPrinterDialog.hpp GUI/PhysicalPrinterDialog.cpp GUI/GUI_ObjectList.cpp @@ -220,7 +224,6 @@ set(SLIC3R_GUI_SOURCES Utils/UndoRedo.hpp Utils/HexFile.cpp Utils/HexFile.hpp - Utils/Thread.hpp ) if (APPLE) diff --git a/src/slic3r/GUI/BackgroundSlicingProcess.cpp b/src/slic3r/GUI/BackgroundSlicingProcess.cpp index bf1cef90b..5fcdd4e7d 100644 --- a/src/slic3r/GUI/BackgroundSlicingProcess.cpp +++ b/src/slic3r/GUI/BackgroundSlicingProcess.cpp @@ -23,6 +23,7 @@ #include "libslic3r/GCode/PreviewData.hpp" #endif // !ENABLE_GCODE_VIEWER #include "libslic3r/Format/SL1.hpp" +#include "libslic3r/Thread.hpp" #include "libslic3r/libslic3r.h" #include @@ -36,7 +37,6 @@ #include "I18N.hpp" #include "RemovableDriveManager.hpp" -#include "slic3r/Utils/Thread.hpp" #include "slic3r/GUI/Plater.hpp" namespace Slic3r { @@ -45,7 +45,7 @@ bool SlicingProcessCompletedEvent::critical_error() const { try { this->rethrow_exception(); - } catch (const Slic3r::SlicingError &ex) { + } catch (const Slic3r::SlicingError &) { // Exception derived from SlicingError is non-critical. return false; } catch (...) { @@ -138,11 +138,12 @@ void BackgroundSlicingProcess::process_fff() //FIXME localize the messages // Perform the final post-processing of the export path by applying the print statistics over the file name. std::string export_path = m_fff_print->print_statistics().finalize_output_path(m_export_path); - int copy_ret_val = copy_file(m_temp_output_path, export_path, m_export_path_on_removable_media); + std::string error_message; + int copy_ret_val = copy_file(m_temp_output_path, export_path, error_message, m_export_path_on_removable_media); switch (copy_ret_val) { case SUCCESS: break; // no error case FAIL_COPY_FILE: - throw Slic3r::RuntimeError(_utf8(L("Copying of the temporary G-code to the output G-code failed. Maybe the SD card is write locked?"))); + throw Slic3r::RuntimeError((boost::format(_utf8(L("Copying of the temporary G-code to the output G-code failed. Maybe the SD card is write locked?\nError message: %1%"))) % error_message).str()); break; case FAIL_FILES_DIFFERENT: throw Slic3r::RuntimeError((boost::format(_utf8(L("Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp."))) % export_path).str()); @@ -157,7 +158,8 @@ void BackgroundSlicingProcess::process_fff() throw Slic3r::RuntimeError((boost::format(_utf8(L("Copying of the temporary G-code has finished but the exported code couldn't be opened during copy check. The output G-code is at %1%.tmp."))) % export_path).str()); break; default: - BOOST_LOG_TRIVIAL(warning) << "Unexpected fail code(" << (int)copy_ret_val << ") durring copy_file() to " << export_path << "."; + throw Slic3r::RuntimeError(_utf8(L("Unknown error occured during exporting G-code."))); + BOOST_LOG_TRIVIAL(error) << "Unexpected fail code(" << (int)copy_ret_val << ") durring copy_file() to " << export_path << "."; break; } @@ -232,6 +234,9 @@ void BackgroundSlicingProcess::process_sla() void BackgroundSlicingProcess::thread_proc() { + set_current_thread_name("slic3r_BgSlcPcs"); + name_tbb_thread_pool_threads(); + assert(m_print != nullptr); assert(m_print == m_fff_print || m_print == m_sla_print); std::unique_lock lck(m_mutex); @@ -527,7 +532,8 @@ void BackgroundSlicingProcess::prepare_upload() if (m_print == m_fff_print) { m_print->set_status(95, _utf8(L("Running post-processing scripts"))); - if (copy_file(m_temp_output_path, source_path.string()) != SUCCESS) { + std::string error_message; + if (copy_file(m_temp_output_path, source_path.string(), error_message) != SUCCESS) { throw Slic3r::RuntimeError(_utf8(L("Copying of the temporary G-code to the output G-code failed"))); } run_post_process_scripts(source_path.string(), m_fff_print->config()); diff --git a/src/slic3r/GUI/ConfigWizard.cpp b/src/slic3r/GUI/ConfigWizard.cpp index 85c4c83b0..6a4dfb3a4 100644 --- a/src/slic3r/GUI/ConfigWizard.cpp +++ b/src/slic3r/GUI/ConfigWizard.cpp @@ -916,7 +916,7 @@ void PageMaterials::update_lists(int sel_printer, int sel_type, int sel_vendor) const std::string& type = list_type->get_data(sel_type); const std::string& vendor = list_vendor->get_data(sel_vendor); // finst printer preset - std::vector, bool>> to_list; + std::vector to_list; for (size_t i = 0; i < sel_printers_count; i++) { const std::string& printer_name = list_printer->get_data(sel_printers[i]); const Preset* printer = nullptr; @@ -931,16 +931,19 @@ void PageMaterials::update_lists(int sel_printer, int sel_type, int sel_vendor) bool was_checked = false; //size_t printer_counter = materials->get_printer_counter(p); int cur_i = list_profile->find(p->alias); + bool emplace_to_to_list = false; if (cur_i == wxNOT_FOUND) { cur_i = list_profile->append(p->alias + (materials->get_omnipresent(p) ? "" : " *"), &p->alias); - to_list.emplace_back(p->alias, materials->get_omnipresent(p)); + emplace_to_to_list = true; } else was_checked = list_profile->IsChecked(cur_i); const std::string& section = materials->appconfig_section(); const bool checked = wizard_p()->appconfig_new.has(section, p->name); - list_profile->Check(cur_i, checked | was_checked); + list_profile->Check(cur_i, checked || was_checked); + if (emplace_to_to_list) + to_list.emplace_back(p->alias, materials->get_omnipresent(p), checked || was_checked); /* Update preset selection in config. * If one preset from aliases bundle is selected, @@ -1018,33 +1021,39 @@ void PageMaterials::sort_list_data(StringList* list, bool add_All_item, bool mat list->append(item, &const_cast(item.get())); } -void PageMaterials::sort_list_data(PresetList* list, const std::vector, bool>>& data) +void PageMaterials::sort_list_data(PresetList* list, const std::vector& data) { // sort data // then prusa profiles // then the rest // in alphabetical order - std::vector, bool>> prusa_profiles; - std::vector, bool>> other_profiles; + std::vector prusa_profiles; + std::vector other_profiles; //for (int i = 0; i < data.size(); ++i) { for (const auto& item : data) { - const std::string& name = item.first; + const std::string& name = item.name; if (name.find("Prusa") != std::string::npos) prusa_profiles.emplace_back(item); else other_profiles.emplace_back(item); } - std::sort(prusa_profiles.begin(), prusa_profiles.end(), [](std::pair, bool> a, std::pair, bool> b) { - return a.first.get() < b.first.get(); + std::sort(prusa_profiles.begin(), prusa_profiles.end(), [](ProfilePrintData a, ProfilePrintData b) { + return a.name.get() < b.name.get(); }); - std::sort(other_profiles.begin(), other_profiles.end(), [](std::pair, bool> a, std::pair, bool> b) { - return a.first.get() < b.first.get(); + std::sort(other_profiles.begin(), other_profiles.end(), [](ProfilePrintData a, ProfilePrintData b) { + return a.name.get() < b.name.get(); }); list->Clear(); - for (const auto& item : prusa_profiles) - list->append(std::string(item.first) + (item.second ? "" : " *"), &const_cast(item.first.get())); - for (const auto& item : other_profiles) - list->append(std::string(item.first) + (item.second ? "" : " *"), &const_cast(item.first.get())); + //for (const auto& item : prusa_profiles) + for (int i = 0; i < prusa_profiles.size(); ++i) { + list->append(std::string(prusa_profiles[i].name) + (prusa_profiles[i].omnipresent ? "" : " *"), &const_cast(prusa_profiles[i].name.get())); + list->Check(i, prusa_profiles[i].checked); + } + //for (const auto& item : other_profiles) + for (int i = 0; i < other_profiles.size(); ++i) { + list->append(std::string(other_profiles[i].name) + (other_profiles[i].omnipresent ? "" : " *"), &const_cast(other_profiles[i].name.get())); + list->Check(i + prusa_profiles.size(), other_profiles[i].checked); + } } void PageMaterials::select_material(int i) diff --git a/src/slic3r/GUI/ConfigWizard_private.hpp b/src/slic3r/GUI/ConfigWizard_private.hpp index 6446dd769..e3f4f088a 100644 --- a/src/slic3r/GUI/ConfigWizard_private.hpp +++ b/src/slic3r/GUI/ConfigWizard_private.hpp @@ -315,6 +315,14 @@ template struct DataList : public T typedef DataList StringList; typedef DataList PresetList; +struct ProfilePrintData +{ + std::reference_wrapper name; + bool omnipresent; + bool checked; + ProfilePrintData(const std::string& n, bool o, bool c) : name(n), omnipresent(o), checked(c) {} +}; + struct PageMaterials: ConfigWizardPage { Materials *materials; @@ -345,7 +353,7 @@ struct PageMaterials: ConfigWizardPage void clear_compatible_printers_label(); void sort_list_data(StringList* list, bool add_All_item, bool material_type_ordering); - void sort_list_data(PresetList* list, const std::vector, bool>>& data); + void sort_list_data(PresetList* list, const std::vector& data); void on_paint(); void on_mouse_move_on_profiles(wxMouseEvent& evt); diff --git a/src/slic3r/GUI/DoubleSlider.cpp b/src/slic3r/GUI/DoubleSlider.cpp index 3626d59f6..70a93d35f 100644 --- a/src/slic3r/GUI/DoubleSlider.cpp +++ b/src/slic3r/GUI/DoubleSlider.cpp @@ -12,6 +12,9 @@ #include "I18N.hpp" #include "ExtruderSequenceDialog.hpp" #include "libslic3r/Print.hpp" +#if ENABLE_GCODE_VIEWER +#include "libslic3r/AppConfig.hpp" +#endif // ENABLE_GCODE_VIEWER #include #include @@ -45,17 +48,18 @@ static std::string gcode(Type type) { const PrintConfig& config = GUI::wxGetApp().plater()->fff_print().config(); switch (type) { - case ColorChange: - return config.color_change_gcode; - case PausePrint: - return config.pause_print_gcode; - case Template: - return config.template_custom_gcode; - default: - return ""; + case ColorChange: return config.color_change_gcode; + case PausePrint: return config.pause_print_gcode; + case Template: return config.template_custom_gcode; + default: return ""; } } +static bool is_lower_thumb_editable() +{ + return Slic3r::GUI::get_app_config()->get("seq_top_layer_only") == "0"; +} + Control::Control( wxWindow *parent, wxWindowID id, int lowerValue, @@ -963,7 +967,7 @@ int Control::get_value_from_position(const wxCoord x, const wxCoord y) bool Control::detect_selected_slider(const wxPoint& pt) { if (is_point_in_rect(pt, m_rect_lower_thumb)) - m_selection = m_lower_editable ? ssLower : ssUndef; + m_selection = is_lower_thumb_editable() ? ssLower : ssUndef; else if(is_point_in_rect(pt, m_rect_higher_thumb)) m_selection = ssHigher; else @@ -1419,7 +1423,7 @@ void Control::OnWheel(wxMouseEvent& event) ssLower : ssHigher; } - if (m_selection == ssLower && !m_lower_editable) + if (m_selection == ssLower && !is_lower_thumb_editable()) m_selection = ssUndef; #if ENABLE_GCODE_VIEWER @@ -1472,7 +1476,7 @@ void Control::OnKeyDown(wxKeyEvent &event) else if (key == WXK_UP || key == WXK_DOWN) { if (key == WXK_UP) m_selection = ssHigher; - else if (key == WXK_DOWN && m_lower_editable) + else if (key == WXK_DOWN && is_lower_thumb_editable()) m_selection = ssLower; Refresh(); } @@ -1487,7 +1491,7 @@ void Control::OnKeyDown(wxKeyEvent &event) if (key == WXK_LEFT || key == WXK_RIGHT) { if (key == WXK_LEFT) m_selection = ssHigher; - else if (key == WXK_RIGHT && m_lower_editable) + else if (key == WXK_RIGHT && is_lower_thumb_editable()) m_selection = ssLower; Refresh(); } @@ -2006,13 +2010,11 @@ void Control::move_current_thumb_to_pos(wxPoint pos) const int mouse_val = tick_val >= 0 && m_draw_mode == dmRegular ? tick_val : get_value_from_position(pos); if (mouse_val >= 0) { - // if (abs(mouse_val - m_lower_value) < abs(mouse_val - m_higher_value)) { - // if (mouse_val <= m_lower_value) { if (m_selection == ssLower) { SetLowerValue(mouse_val); correct_lower_value(); } - else if (m_selection == ssHigher) { + else { // even m_selection is ssUndef, upper thumb should be selected SetHigherValue(mouse_val); correct_higher_value(); } @@ -2099,7 +2101,7 @@ void Control::jump_to_print_z() void Control::post_ticks_changed_event(Type type /*= Custom*/) { - m_force_mode_apply = type != ToolChange; +// m_force_mode_apply = type != ToolChange; // It looks like this condition is no needed now. Leave it for the testing wxPostEvent(this->GetParent(), wxCommandEvent(wxCUSTOMEVT_TICKSCHANGED)); } diff --git a/src/slic3r/GUI/DoubleSlider.hpp b/src/slic3r/GUI/DoubleSlider.hpp index 845e97989..899e7a58d 100644 --- a/src/slic3r/GUI/DoubleSlider.hpp +++ b/src/slic3r/GUI/DoubleSlider.hpp @@ -228,7 +228,6 @@ public: void SetModeAndOnlyExtruder(const bool is_one_extruder_printed_model, const int only_extruder); void SetExtruderColors(const std::vector& extruder_colors); - void set_lower_editable(bool editable) { m_lower_editable = editable; } void set_render_as_disabled(bool value) { m_render_as_disabled = value; } bool is_rendering_as_disabled() const { return m_render_as_disabled; } @@ -340,7 +339,6 @@ private: int m_lower_value; int m_higher_value; - bool m_lower_editable{ true }; bool m_render_as_disabled{ false }; ScalableBitmap m_bmp_thumb_higher; diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index 55193fde8..87a404994 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -2328,6 +2328,7 @@ void GCodeViewer::render_legend() const m_extrusions.role_visibility_flags = visible ? m_extrusions.role_visibility_flags & ~(1 << role) : m_extrusions.role_visibility_flags | (1 << role); // update buffers' render paths refresh_render_paths(false, false); + wxGetApp().plater()->update_preview_moves_slider(); wxGetApp().plater()->get_current_canvas3D()->set_as_dirty(); wxGetApp().plater()->update_preview_bottom_toolbar(); } @@ -2600,7 +2601,7 @@ void GCodeViewer::render_legend() const // items add_option(EMoveType::Retract, EOptionsColors::Retractions, _u8L("Retractions")); - add_option(EMoveType::Unretract, EOptionsColors::Unretractions, _u8L("Unretractions")); + add_option(EMoveType::Unretract, EOptionsColors::Unretractions, _u8L("Deretractions")); add_option(EMoveType::Tool_change, EOptionsColors::ToolChanges, _u8L("Tool changes")); add_option(EMoveType::Color_change, EOptionsColors::ColorChanges, _u8L("Color changes")); add_option(EMoveType::Pause_Print, EOptionsColors::PausePrints, _u8L("Pause prints")); diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 44ea7539d..b66f10209 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -2812,8 +2812,7 @@ void GLCanvas3D::load_preview(const std::vector& str_tool_colors, c void GLCanvas3D::bind_event_handlers() { - if (m_canvas != nullptr) - { + if (m_canvas != nullptr) { m_canvas->Bind(wxEVT_SIZE, &GLCanvas3D::on_size, this); m_canvas->Bind(wxEVT_IDLE, &GLCanvas3D::on_idle, this); m_canvas->Bind(wxEVT_CHAR, &GLCanvas3D::on_char, this); @@ -2835,13 +2834,14 @@ void GLCanvas3D::bind_event_handlers() m_canvas->Bind(wxEVT_RIGHT_DCLICK, &GLCanvas3D::on_mouse, this); m_canvas->Bind(wxEVT_PAINT, &GLCanvas3D::on_paint, this); m_canvas->Bind(wxEVT_SET_FOCUS, &GLCanvas3D::on_set_focus, this); + + m_event_handlers_bound = true; } } void GLCanvas3D::unbind_event_handlers() { - if (m_canvas != nullptr) - { + if (m_canvas != nullptr && m_event_handlers_bound) { m_canvas->Unbind(wxEVT_SIZE, &GLCanvas3D::on_size, this); m_canvas->Unbind(wxEVT_IDLE, &GLCanvas3D::on_idle, this); m_canvas->Unbind(wxEVT_CHAR, &GLCanvas3D::on_char, this); @@ -2863,6 +2863,8 @@ void GLCanvas3D::unbind_event_handlers() m_canvas->Unbind(wxEVT_RIGHT_DCLICK, &GLCanvas3D::on_mouse, this); m_canvas->Unbind(wxEVT_PAINT, &GLCanvas3D::on_paint, this); m_canvas->Unbind(wxEVT_SET_FOCUS, &GLCanvas3D::on_set_focus, this); + + m_event_handlers_bound = false; } } @@ -2888,8 +2890,7 @@ void GLCanvas3D::on_idle(wxIdleEvent& evt) _refresh_if_shown_on_screen(); - if (m_extra_frame_requested || mouse3d_controller_applied) - { + if (m_extra_frame_requested || mouse3d_controller_applied) { m_dirty = true; m_extra_frame_requested = false; evt.RequestMore(); @@ -2941,7 +2942,7 @@ void GLCanvas3D::on_char(wxKeyEvent& evt) post_event(SimpleEvent(EVT_GLTOOLBAR_COPY)); break; -#ifdef __linux__ +#if defined(__linux__) || defined(__APPLE__) case WXK_CONTROL_M: { Mouse3DController& controller = wxGetApp().plater()->get_mouse3d_controller(); @@ -3512,40 +3513,35 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) #endif /* SLIC3R_DEBUG_MOUSE_EVENTS */ } - if (m_main_toolbar.on_mouse(evt, *this)) - { + if (m_main_toolbar.on_mouse(evt, *this)) { if (evt.LeftUp() || evt.MiddleUp() || evt.RightUp()) mouse_up_cleanup(); m_mouse.set_start_position_3D_as_invalid(); return; } - if (m_undoredo_toolbar.on_mouse(evt, *this)) - { + if (m_undoredo_toolbar.on_mouse(evt, *this)) { if (evt.LeftUp() || evt.MiddleUp() || evt.RightUp()) mouse_up_cleanup(); m_mouse.set_start_position_3D_as_invalid(); return; } - if (wxGetApp().plater()->get_collapse_toolbar().on_mouse(evt, *this)) - { + if (wxGetApp().plater()->get_collapse_toolbar().on_mouse(evt, *this)) { if (evt.LeftUp() || evt.MiddleUp() || evt.RightUp()) mouse_up_cleanup(); m_mouse.set_start_position_3D_as_invalid(); return; } - if (wxGetApp().plater()->get_view_toolbar().on_mouse(evt, *this)) - { + if (wxGetApp().plater()->get_view_toolbar().on_mouse(evt, *this)) { if (evt.LeftUp() || evt.MiddleUp() || evt.RightUp()) mouse_up_cleanup(); m_mouse.set_start_position_3D_as_invalid(); return; } - if (m_gizmos.on_mouse(evt)) - { + if (m_gizmos.on_mouse(evt)) { if (evt.LeftUp() || evt.MiddleUp() || evt.RightUp()) mouse_up_cleanup(); @@ -3554,12 +3550,13 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) return; } + bool any_gizmo_active = m_gizmos.get_current() != nullptr; + int selected_object_idx = m_selection.get_object_idx(); int layer_editing_object_idx = is_layers_editing_enabled() ? selected_object_idx : -1; m_layers_editing.select_object(*m_model, layer_editing_object_idx); - if (m_mouse.drag.move_requires_threshold && m_mouse.is_move_start_threshold_position_2D_defined() && m_mouse.is_move_threshold_met(pos)) - { + if (m_mouse.drag.move_requires_threshold && m_mouse.is_move_start_threshold_position_2D_defined() && m_mouse.is_move_threshold_met(pos)) { m_mouse.drag.move_requires_threshold = false; m_mouse.set_move_start_threshold_position_2D_as_invalid(); } @@ -3568,8 +3565,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) // Grab keyboard focus on any mouse click event. m_canvas->SetFocus(); - if (evt.Entering()) - { + if (evt.Entering()) { //#if defined(__WXMSW__) || defined(__linux__) // // On Windows and Linux needs focus in order to catch key events // Set focus in order to remove it from sidebar fields @@ -3594,49 +3590,41 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) m_mouse.set_start_position_2D_as_invalid(); //#endif } - else if (evt.Leaving()) - { + else if (evt.Leaving()) { _deactivate_undo_redo_toolbar_items(); // to remove hover on objects when the mouse goes out of this canvas m_mouse.position = Vec2d(-1.0, -1.0); m_dirty = true; } - else if (evt.LeftDown() || evt.RightDown() || evt.MiddleDown()) - { + else if (evt.LeftDown() || evt.RightDown() || evt.MiddleDown()) { if (_deactivate_undo_redo_toolbar_items() || _deactivate_search_toolbar_item()) return; // If user pressed left or right button we first check whether this happened // on a volume or not. m_layers_editing.state = LayersEditing::Unknown; - if ((layer_editing_object_idx != -1) && m_layers_editing.bar_rect_contains(*this, pos(0), pos(1))) - { + if (layer_editing_object_idx != -1 && m_layers_editing.bar_rect_contains(*this, pos(0), pos(1))) { // A volume is selected and the mouse is inside the layer thickness bar. // Start editing the layer height. m_layers_editing.state = LayersEditing::Editing; _perform_layer_editing_action(&evt); } - else if (evt.LeftDown() && (evt.ShiftDown() || evt.AltDown()) && m_picking_enabled) - { + else if (evt.LeftDown() && (evt.ShiftDown() || evt.AltDown()) && m_picking_enabled) { if (m_gizmos.get_current_type() != GLGizmosManager::SlaSupports && m_gizmos.get_current_type() != GLGizmosManager::FdmSupports - && m_gizmos.get_current_type() != GLGizmosManager::Seam) - { + && m_gizmos.get_current_type() != GLGizmosManager::Seam) { m_rectangle_selection.start_dragging(m_mouse.position, evt.ShiftDown() ? GLSelectionRectangle::Select : GLSelectionRectangle::Deselect); m_dirty = true; } } - else - { + else { // Select volume in this 3D canvas. - // Don't deselect a volume if layer editing is enabled. We want the object to stay selected + // Don't deselect a volume if layer editing is enabled or any gizmo is active. We want the object to stay selected // during the scene manipulation. - if (m_picking_enabled && (!m_hover_volume_idxs.empty() || !is_layers_editing_enabled())) - { - if (evt.LeftDown() && !m_hover_volume_idxs.empty()) - { + if (m_picking_enabled && (!any_gizmo_active || !evt.CmdDown()) && (!m_hover_volume_idxs.empty() || !is_layers_editing_enabled())) { + if (evt.LeftDown() && !m_hover_volume_idxs.empty()) { int volume_idx = get_first_hover_volume_idx(); bool already_selected = m_selection.contains_volume(volume_idx); bool ctrl_down = evt.CmdDown(); @@ -3645,8 +3633,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) if (already_selected && ctrl_down) m_selection.remove(volume_idx); - else - { + else { m_selection.add(volume_idx, !ctrl_down, true); m_mouse.drag.move_requires_threshold = !already_selected; if (already_selected) @@ -3656,8 +3643,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) } // propagate event through callback - if (curr_idxs != m_selection.get_volume_idxs()) - { + if (curr_idxs != m_selection.get_volume_idxs()) { if (m_selection.is_empty()) m_gizmos.reset_all_states(); else @@ -3670,16 +3656,13 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) } } - if (!m_hover_volume_idxs.empty()) - { - if (evt.LeftDown() && m_moving_enabled && (m_mouse.drag.move_volume_idx == -1)) - { + if (!m_hover_volume_idxs.empty()) { + if (evt.LeftDown() && m_moving_enabled && m_mouse.drag.move_volume_idx == -1) { // Only accept the initial position, if it is inside the volume bounding box. int volume_idx = get_first_hover_volume_idx(); BoundingBoxf3 volume_bbox = m_volumes.volumes[volume_idx]->transformed_bounding_box(); volume_bbox.offset(1.0); - if (volume_bbox.contains(m_mouse.scene_position)) - { + if ((!any_gizmo_active || !evt.CmdDown()) && volume_bbox.contains(m_mouse.scene_position)) { m_volumes.volumes[volume_idx]->hover = GLVolume::HS_None; // The dragging operation is initiated. m_mouse.drag.move_volume_idx = volume_idx; @@ -3691,18 +3674,14 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) } } } - else if (evt.Dragging() && evt.LeftIsDown() && (m_layers_editing.state == LayersEditing::Unknown) && (m_mouse.drag.move_volume_idx != -1)) - { - if (!m_mouse.drag.move_requires_threshold) - { + else if (evt.Dragging() && evt.LeftIsDown() && m_layers_editing.state == LayersEditing::Unknown && m_mouse.drag.move_volume_idx != -1) { + if (!m_mouse.drag.move_requires_threshold) { m_mouse.dragging = true; Vec3d cur_pos = m_mouse.drag.start_position_3D; // we do not want to translate objects if the user just clicked on an object while pressing shift to remove it from the selection and then drag - if (m_selection.contains_volume(get_first_hover_volume_idx())) - { + if (m_selection.contains_volume(get_first_hover_volume_idx())) { const Camera& camera = wxGetApp().plater()->get_camera(); - if (std::abs(camera.get_dir_forward()(2)) < EPSILON) - { + if (std::abs(camera.get_dir_forward()(2)) < EPSILON) { // side view -> move selected volumes orthogonally to camera view direction Linef3 ray = mouse_ray(pos); Vec3d dir = ray.unit_vector(); @@ -3724,8 +3703,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) // apply offset cur_pos = m_mouse.drag.start_position_3D + projection_x * camera_right + projection_z * camera_up; } - else - { + else { // Generic view // Get new position at the same Z of the initial click point. float z0 = 0.0f; @@ -3739,35 +3717,28 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) m_dirty = true; } } - else if (evt.Dragging() && evt.LeftIsDown() && m_picking_enabled && m_rectangle_selection.is_dragging()) - { + else if (evt.Dragging() && evt.LeftIsDown() && m_picking_enabled && m_rectangle_selection.is_dragging()) { m_rectangle_selection.dragging(pos.cast()); m_dirty = true; } - else if (evt.Dragging()) - { + else if (evt.Dragging()) { m_mouse.dragging = true; - if ((m_layers_editing.state != LayersEditing::Unknown) && (layer_editing_object_idx != -1)) - { - if (m_layers_editing.state == LayersEditing::Editing) - { + if (m_layers_editing.state != LayersEditing::Unknown && layer_editing_object_idx != -1) { + if (m_layers_editing.state == LayersEditing::Editing) { _perform_layer_editing_action(&evt); m_mouse.position = pos.cast(); } } // do not process the dragging if the left mouse was set down in another canvas - else if (evt.LeftIsDown()) - { + else if (evt.LeftIsDown()) { // if dragging over blank area with left button, rotate - if (m_hover_volume_idxs.empty() && m_mouse.is_start_position_3D_defined()) - { + if ((any_gizmo_active || m_hover_volume_idxs.empty()) && m_mouse.is_start_position_3D_defined()) { const Vec3d rot = (Vec3d(pos.x(), pos.y(), 0.) - m_mouse.drag.start_position_3D) * (PI * TRACKBALLSIZE / 180.); if (wxGetApp().app_config->get("use_free_camera") == "1") // Virtual track ball (similar to the 3DConnexion mouse). wxGetApp().plater()->get_camera().rotate_local_around_target(Vec3d(rot.y(), rot.x(), 0.)); - else - { + else { // Forces camera right vector to be parallel to XY plane in case it has been misaligned using the 3D mouse free rotation. // It is cheaper to call this function right away instead of testing wxGetApp().plater()->get_mouse3d_controller().connected(), // which checks an atomics (flushes CPU caches). @@ -3781,11 +3752,9 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) } m_mouse.drag.start_position_3D = Vec3d((double)pos(0), (double)pos(1), 0.0); } - else if (evt.MiddleIsDown() || evt.RightIsDown()) - { + else if (evt.MiddleIsDown() || evt.RightIsDown()) { // If dragging over blank area with right button, pan. - if (m_mouse.is_start_position_2D_defined()) - { + if (m_mouse.is_start_position_2D_defined()) { // get point in model space at Z = 0 float z = 0.0f; const Vec3d& cur_pos = _mouse_to_3d(pos, &z); @@ -3805,43 +3774,36 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) m_mouse.drag.start_position_2D = pos; } } - else if (evt.LeftUp() || evt.MiddleUp() || evt.RightUp()) - { - if (m_layers_editing.state != LayersEditing::Unknown) - { + else if (evt.LeftUp() || evt.MiddleUp() || evt.RightUp()) { + if (m_layers_editing.state != LayersEditing::Unknown) { m_layers_editing.state = LayersEditing::Unknown; _stop_timer(); m_layers_editing.accept_changes(*this); } - else if ((m_mouse.drag.move_volume_idx != -1) && m_mouse.dragging) - { + else if (m_mouse.drag.move_volume_idx != -1 && m_mouse.dragging) { do_move(L("Move Object")); wxGetApp().obj_manipul()->set_dirty(); // Let the plater know that the dragging finished, so a delayed refresh // of the scene with the background processing data should be performed. post_event(SimpleEvent(EVT_GLCANVAS_MOUSE_DRAGGING_FINISHED)); } - else if (evt.LeftUp() && m_picking_enabled && m_rectangle_selection.is_dragging()) - { + else if (evt.LeftUp() && m_picking_enabled && m_rectangle_selection.is_dragging()) { if (evt.ShiftDown() || evt.AltDown()) _update_selection_from_hover(); m_rectangle_selection.stop_dragging(); } - else if (evt.LeftUp() && !m_mouse.ignore_left_up && !m_mouse.dragging && m_hover_volume_idxs.empty() && !is_layers_editing_enabled()) - { + else if (evt.LeftUp() && !m_mouse.ignore_left_up && !m_mouse.dragging && m_hover_volume_idxs.empty() && !is_layers_editing_enabled()) { // deselect and propagate event through callback - if (!evt.ShiftDown() && m_picking_enabled) + if (!evt.ShiftDown() && (!any_gizmo_active || !evt.CmdDown()) && m_picking_enabled) deselect_all(); } - else if (evt.RightUp()) - { + else if (evt.RightUp()) { m_mouse.position = pos.cast(); // forces a frame render to ensure that m_hover_volume_idxs is updated even when the user right clicks while // the context menu is already shown render(); - if (!m_hover_volume_idxs.empty()) - { + if (!m_hover_volume_idxs.empty()) { // if right clicking on volume, propagate event through callback (shows context menu) int volume_idx = get_first_hover_volume_idx(); if (!m_volumes.volumes[volume_idx]->is_wipe_tower // no context menu for the wipe tower @@ -3873,8 +3835,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) mouse_up_cleanup(); } - else if (evt.Moving()) - { + else if (evt.Moving()) { m_mouse.position = pos.cast(); // updates gizmos overlay @@ -5222,8 +5183,7 @@ void GLCanvas3D::_refresh_if_shown_on_screen() void GLCanvas3D::_picking_pass() const { - if (m_picking_enabled && !m_mouse.dragging && (m_mouse.position != Vec2d(DBL_MAX, DBL_MAX))) - { + if (m_picking_enabled && !m_mouse.dragging && m_mouse.position != Vec2d(DBL_MAX, DBL_MAX)) { m_hover_volume_idxs.clear(); // Render the object for picking. @@ -5257,16 +5217,16 @@ void GLCanvas3D::_picking_pass() const GLubyte color[4] = { 0, 0, 0, 0 }; const Size& cnv_size = get_canvas_size(); - bool inside = (0 <= m_mouse.position(0)) && (m_mouse.position(0) < cnv_size.get_width()) && (0 <= m_mouse.position(1)) && (m_mouse.position(1) < cnv_size.get_height()); - if (inside) - { + bool inside = 0 <= m_mouse.position(0) && m_mouse.position(0) < cnv_size.get_width() && 0 <= m_mouse.position(1) && m_mouse.position(1) < cnv_size.get_height(); + if (inside) { glsafe(::glReadPixels(m_mouse.position(0), cnv_size.get_height() - m_mouse.position(1) - 1, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, (void*)color)); if (picking_checksum_alpha_channel(color[0], color[1], color[2]) == color[3]) // Only non-interpolated colors are valid, those have their lowest three bits zeroed. volume_id = color[0] + (color[1] << 8) + (color[2] << 16); } - if ((0 <= volume_id) && (volume_id < (int)m_volumes.volumes.size())) - { + if (0 <= volume_id && volume_id < (int)m_volumes.volumes.size()) { + // do not add the volume id if any gizmo is active and CTRL is pressed + if (m_gizmos.get_current_type() == GLGizmosManager::EType::Undefined || !wxGetKeyState(WXK_CONTROL)) m_hover_volume_idxs.emplace_back(volume_id); m_gizmos.set_hover_id(-1); } diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp index de28a8fe3..07ee0ab28 100644 --- a/src/slic3r/GUI/GLCanvas3D.hpp +++ b/src/slic3r/GUI/GLCanvas3D.hpp @@ -474,6 +474,7 @@ private: // when true renders an extra frame by not resetting m_dirty to false // see request_extra_frame() bool m_extra_frame_requested; + bool m_event_handlers_bound{ false }; mutable GLVolumeCollection m_volumes; #if ENABLE_GCODE_VIEWER diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 87921ad7e..706689a3d 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -1,5 +1,6 @@ #include "libslic3r/Technologies.hpp" #include "GUI_App.hpp" +#include "GUI_Init.hpp" #include "GUI_ObjectList.hpp" #include "GUI_ObjectManipulation.hpp" #include "I18N.hpp" @@ -24,7 +25,6 @@ #include #include #include -#include #include #include #include @@ -71,7 +71,7 @@ #include "InstanceCheck.hpp" #include "NotificationManager.hpp" #include "UnsavedChangesDialog.hpp" -#include "PresetComboBoxes.hpp" +#include "SavePresetDialog.hpp" #include "BitmapCache.hpp" @@ -355,6 +355,63 @@ private: } }; + +#ifdef __linux__ +bool static check_old_linux_datadir(const wxString& app_name) { + // If we are on Linux and the datadir does not exist yet, look into the old + // location where the datadir was before version 2.3. If we find it there, + // tell the user that he might wanna migrate to the new location. + // (https://github.com/prusa3d/PrusaSlicer/issues/2911) + // To be precise, the datadir should exist, it is created when single instance + // lock happens. Instead of checking for existence, check the contents. + + namespace fs = boost::filesystem; + + std::string new_path = Slic3r::data_dir(); + + wxString dir; + if (! wxGetEnv(wxS("XDG_CONFIG_HOME"), &dir) || dir.empty() ) + dir = wxFileName::GetHomeDir() + wxS("/.config"); + std::string default_path = (dir + "/" + app_name).ToUTF8().data(); + + if (new_path != default_path) { + // This happens when the user specifies a custom --datadir. + // Do not show anything in that case. + return true; + } + + fs::path data_dir = fs::path(new_path); + if (! fs::is_directory(data_dir)) + return true; // This should not happen. + + int file_count = std::distance(fs::directory_iterator(data_dir), fs::directory_iterator()); + + if (file_count <= 1) { // just cache dir with an instance lock + std::string old_path = wxStandardPaths::Get().GetUserDataDir().ToUTF8().data(); + + if (fs::is_directory(old_path)) { + wxString msg = from_u8((boost::format(_u8L("Starting with %1% 2.3, configuration " + "directory on Linux has changed (according to XDG Base Directory Specification) to \n%2%.\n\n" + "This directory did not exist yet (maybe you run the new version for the first time).\nHowever, " + "an old %1% configuration directory was detected in \n%3%.\n\n" + "Consider moving the contents of the old directory to the new location in order to access " + "your profiles, etc.\nNote that if you decide to downgrade %1% in future, it will use the old " + "location again.\n\n" + "What do you want to do now?")) % SLIC3R_APP_NAME % new_path % old_path).str()); + wxString caption = from_u8((boost::format(_u8L("%s - BREAKING CHANGE")) % SLIC3R_APP_NAME).str()); + wxRichMessageDialog dlg(nullptr, msg, caption, wxYES_NO); + dlg.SetYesNoLabels(_L("Quit, I will move my data now"), _L("Start the application")); + if (dlg.ShowModal() != wxID_NO) + return false; + } + } else { + // If the new directory exists, be silent. The user likely already saw the message. + } + return true; +} +#endif + + wxString file_wildcards(FileType file_type, const std::string &custom_extension) { static const std::string defaults[FT_SIZE] = { @@ -545,15 +602,16 @@ static void generic_exception_handle() } } -void GUI_App::AfterInitLoads::on_loads(GUI_App* gui) +void GUI_App::post_init() { - if (!gui->initialized()) - return; + assert(initialized()); + if (! this->initialized()) + throw Slic3r::RuntimeError("Calling post_init() while not yet initialized"); #if ENABLE_GCODE_VIEWER - if (m_start_as_gcodeviewer) { - if (!m_input_files.empty()) - gui->plater()->load_gcode(wxString::FromUTF8(m_input_files[0].c_str())); + if (this->init_params->start_as_gcodeviewer) { + if (! this->init_params->input_files.empty()) + this->plater()->load_gcode(wxString::FromUTF8(this->init_params->input_files[0].c_str())); } else { #endif // ENABLE_GCODE_VIEWER_AS @@ -563,22 +621,22 @@ void GUI_App::AfterInitLoads::on_loads(GUI_App* gui) // We need to decide what to do about loading of separate presets (just print preset, just filament preset etc). // As of now only the full configs are supported here. if (!m_print_config.empty()) - gui->mainframe->load_config(m_print_config); + this->gui->mainframe->load_config(m_print_config); #endif - if (!m_load_configs.empty()) + if (! this->init_params->load_configs.empty()) // Load the last config to give it a name at the UI. The name of the preset may be later // changed by loading an AMF or 3MF. //FIXME this is not strictly correct, as one may pass a print/filament/printer profile here instead of a full config. - gui->mainframe->load_config_file(m_load_configs.back()); + this->mainframe->load_config_file(this->init_params->load_configs.back()); // If loading a 3MF file, the config is loaded from the last one. - if (!m_input_files.empty()) - gui->plater()->load_files(m_input_files, true, true); - if (!m_extra_config.empty()) - gui->mainframe->load_config(m_extra_config); + if (! this->init_params->input_files.empty()) + this->plater()->load_files(this->init_params->input_files, true, true); + if (! this->init_params->extra_config.empty()) + this->mainframe->load_config(this->init_params->extra_config); #if ENABLE_GCODE_VIEWER } #endif // ENABLE_GCODE_VIEWER - } +} IMPLEMENT_APP(GUI_App) @@ -640,8 +698,18 @@ void GUI_App::init_app_config() // Windows : "C:\Users\username\AppData\Roaming\Slic3r" or "C:\Documents and Settings\username\Application Data\Slic3r" // Mac : "~/Library/Application Support/Slic3r" - if (data_dir().empty()) - set_data_dir(wxStandardPaths::Get().GetUserDataDir().ToUTF8().data()); + if (data_dir().empty()) { + #ifndef __linux__ + set_data_dir(wxStandardPaths::Get().GetUserDataDir().ToUTF8().data()); + #else + // Since version 2.3, config dir on Linux is in ${XDG_CONFIG_HOME}. + // https://github.com/prusa3d/PrusaSlicer/issues/2911 + wxString dir; + if (! wxGetEnv(wxS("XDG_CONFIG_HOME"), &dir) || dir.empty() ) + dir = wxFileName::GetHomeDir() + wxS("/.config"); + set_data_dir((dir + "/" + GetAppName()).ToUTF8().data()); + #endif + } if (!app_config) #if ENABLE_GCODE_VIEWER @@ -654,7 +722,6 @@ void GUI_App::init_app_config() m_app_conf_exists = app_config->exists(); if (m_app_conf_exists) { std::string error = app_config->load(); -#if ENABLE_GCODE_VIEWER if (!error.empty()) { // Error while parsing config file. We'll customize the error message and rethrow to be displayed. if (is_editor()) { @@ -670,14 +737,6 @@ void GUI_App::init_app_config() "\n\n" + app_config->config_path() + "\n\n" + error); } } -#else - if (!error.empty()) - // Error while parsing config file. We'll customize the error message and rethrow to be displayed. - throw Slic3r::RuntimeError( - _u8L("Error parsing PrusaSlicer config file, it is probably corrupted. " - "Try to manually delete the file to recover from the error. Your user profiles will not be affected.") + - "\n\n" + AppConfig::config_path() + "\n\n" + error); -#endif // ENABLE_GCODE_VIEWER } } @@ -704,6 +763,13 @@ bool GUI_App::on_init_inner() wxCHECK_MSG(wxDirExists(resources_dir), false, wxString::Format("Resources path does not exist or is not a directory: %s", resources_dir)); +#ifdef __linux__ + if (! check_old_linux_datadir(GetAppName())) { + std::cerr << "Quitting, user chose to move his data to new location." << std::endl; + return false; + } +#endif + // Enable this to get the default Win32 COMCTRL32 behavior of static boxes. // wxSystemOptions::SetOption("msw.staticbox.optimized-paint", 0); // Enable this to disable Windows Vista themes for all wxNotebooks. The themes seem to lead to terrible @@ -863,7 +929,7 @@ bool GUI_App::on_init_inner() #ifdef WIN32 this->mainframe->register_win32_callbacks(); #endif - this->after_init_loads.on_loads(this); + this->post_init(); } // Preset updating & Configwizard are done after the above initializations, @@ -1259,9 +1325,9 @@ void fatal_error(wxWindow* parent) // Called after the Preferences dialog is closed and the program settings are saved. // Update the UI based on the current preferences. -void GUI_App::update_ui_from_settings() +void GUI_App::update_ui_from_settings(bool apply_free_camera_correction) { - mainframe->update_ui_from_settings(); + mainframe->update_ui_from_settings(apply_free_camera_correction); } void GUI_App::persist_window_geometry(wxTopLevelWindow *window, bool default_maximized) diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp index 310358778..22622cc1e 100644 --- a/src/slic3r/GUI/GUI_App.hpp +++ b/src/slic3r/GUI/GUI_App.hpp @@ -24,6 +24,7 @@ class wxNotebook; struct wxLanguageInfo; namespace Slic3r { + class AppConfig; class PresetBundle; class PresetUpdater; @@ -32,6 +33,7 @@ class PrintHostJobQueue; class Model; namespace GUI{ + class RemovableDriveManager; class OtherInstanceMessageHandler; class MainFrame; @@ -41,6 +43,7 @@ class ObjectSettings; class ObjectList; class ObjectLayers; class Plater; +struct GUI_InitParams; @@ -142,37 +145,6 @@ private: std::string m_instance_hash_string; size_t m_instance_hash_int; - // parameters needed for the after OnInit() loads - struct AfterInitLoads - { - std::vector m_load_configs; - DynamicPrintConfig m_extra_config; - std::vector m_input_files; -#if ENABLE_GCODE_VIEWER - bool m_start_as_gcodeviewer; -#endif // ENABLE_GCODE_VIEWER - - void set_params( - const std::vector& load_configs, - const DynamicPrintConfig& extra_config, -#if ENABLE_GCODE_VIEWER - const std::vector& input_files, - bool start_as_gcodeviewer -#else - const std::vector& input_files -#endif // ENABLE_GCODE_VIEWER - ) { - m_load_configs = load_configs; - m_extra_config = extra_config; - m_input_files = input_files; -#if ENABLE_GCODE_VIEWER - m_start_as_gcodeviewer = start_as_gcodeviewer; -#endif // ENABLE_GCODE_VIEWER - } - - void on_loads(GUI_App* gui); - }; - public: bool OnInit() override; bool initialized() const { return m_initialized; } @@ -191,6 +163,10 @@ public: bool is_recreating_gui() const { return m_is_recreating_gui; } #endif // ENABLE_GCODE_VIEWER + // To be called after the GUI is fully built up. + // Process command line parameters cached in this->init_params, + // load configs, STLs etc. + void post_init(); static std::string get_gl_info(bool format_as_html, bool extensions); wxGLContext* init_glcontext(wxGLCanvas& canvas); bool init_opengl(); @@ -241,7 +217,7 @@ public: static bool catch_error(std::function cb, const std::string& err); void persist_window_geometry(wxTopLevelWindow *window, bool default_maximized = false); - void update_ui_from_settings(); + void update_ui_from_settings(bool apply_free_camera_correction = true); bool switch_language(); bool load_language(wxString language, bool initial); @@ -278,12 +254,14 @@ public: Model& model(); + // Parameters extracted from the command line to be passed to GUI after initialization. + const GUI_InitParams* init_params { nullptr }; + AppConfig* app_config{ nullptr }; PresetBundle* preset_bundle{ nullptr }; PresetUpdater* preset_updater{ nullptr }; MainFrame* mainframe{ nullptr }; Plater* plater_{ nullptr }; - AfterInitLoads after_init_loads; std::mutex not_modal_dialog_mutex; wxDialog* not_modal_dialog = nullptr; diff --git a/src/slic3r/GUI/GUI_Init.cpp b/src/slic3r/GUI/GUI_Init.cpp new file mode 100644 index 000000000..d1c17bc89 --- /dev/null +++ b/src/slic3r/GUI/GUI_Init.cpp @@ -0,0 +1,96 @@ +#include "GUI_Init.hpp" + +#include "libslic3r/AppConfig.hpp" + +#include "slic3r/GUI/GUI.hpp" +#include "slic3r/GUI/GUI_App.hpp" +#include "slic3r/GUI/3DScene.hpp" +#include "slic3r/GUI/InstanceCheck.hpp" +#include "slic3r/GUI/format.hpp" +#include "slic3r/GUI/MainFrame.hpp" +#include "slic3r/GUI/Plater.hpp" + +// To show a message box if GUI initialization ends up with an exception thrown. +#include + +#include +#include + +namespace Slic3r { +namespace GUI { + +int GUI_Run(GUI_InitParams ¶ms) +{ + try { +#if ENABLE_GCODE_VIEWER + GUI::GUI_App* gui = new GUI::GUI_App(params.start_as_gcodeviewer ? GUI::GUI_App::EAppMode::GCodeViewer : GUI::GUI_App::EAppMode::Editor); + if (gui->get_app_mode() != GUI::GUI_App::EAppMode::GCodeViewer) { + // G-code viewer is currently not performing instance check, a new G-code viewer is started every time. + bool gui_single_instance_setting = gui->app_config->get("single_instance") == "1"; + if (Slic3r::instance_check(params.argc, params.argv, gui_single_instance_setting)) { + //TODO: do we have delete gui and other stuff? + return -1; + } + } +#else + GUI::GUI_App *gui = new GUI::GUI_App(); +#endif // ENABLE_GCODE_VIEWER + +// gui->autosave = m_config.opt_string("autosave"); + GUI::GUI_App::SetInstance(gui); + gui->init_params = ¶ms; +/* +#if ENABLE_GCODE_VIEWER + gui->CallAfter([gui, this, &load_configs, params.start_as_gcodeviewer] { +#else + gui->CallAfter([gui, this, &load_configs] { +#endif // ENABLE_GCODE_VIEWER + if (!gui->initialized()) { + return; + } + +#if ENABLE_GCODE_VIEWER + if (params.start_as_gcodeviewer) { + if (!m_input_files.empty()) + gui->plater()->load_gcode(wxString::FromUTF8(m_input_files[0].c_str())); + } else { +#endif // ENABLE_GCODE_VIEWER_AS +#if 0 + // Load the cummulative config over the currently active profiles. + //FIXME if multiple configs are loaded, only the last one will have an effect. + // We need to decide what to do about loading of separate presets (just print preset, just filament preset etc). + // As of now only the full configs are supported here. + if (!m_print_config.empty()) + gui->mainframe->load_config(m_print_config); +#endif + if (!load_configs.empty()) + // Load the last config to give it a name at the UI. The name of the preset may be later + // changed by loading an AMF or 3MF. + //FIXME this is not strictly correct, as one may pass a print/filament/printer profile here instead of a full config. + gui->mainframe->load_config_file(load_configs.back()); + // If loading a 3MF file, the config is loaded from the last one. + if (!m_input_files.empty()) + gui->plater()->load_files(m_input_files, true, true); + if (!m_extra_config.empty()) + gui->mainframe->load_config(m_extra_config); +#if ENABLE_GCODE_VIEWER + } +#endif // ENABLE_GCODE_VIEWER + }); +*/ + int result = wxEntry(params.argc, params.argv); + return result; + } catch (const Slic3r::Exception &ex) { + boost::nowide::cerr << ex.what() << std::endl; + wxMessageBox(boost::nowide::widen(ex.what()), _L("PrusaSlicer GUI initialization failed"), wxICON_STOP); + } catch (const std::exception &ex) { + boost::nowide::cerr << "PrusaSlicer GUI initialization failed: " << ex.what() << std::endl; + wxMessageBox(format_wxstr(_L("Fatal error, exception catched: %1%"), ex.what()), _L("PrusaSlicer GUI initialization failed"), wxICON_STOP); + } + + // error + return 1; +} + +} +} diff --git a/src/slic3r/GUI/GUI_Init.hpp b/src/slic3r/GUI/GUI_Init.hpp new file mode 100644 index 000000000..c420c9554 --- /dev/null +++ b/src/slic3r/GUI/GUI_Init.hpp @@ -0,0 +1,27 @@ +#ifndef slic3r_GUI_Init_hpp_ +#define slic3r_GUI_Init_hpp_ + +#include + +namespace Slic3r { + +namespace GUI { + +struct GUI_InitParams +{ + int argc; + char **argv; + + std::vector load_configs; + DynamicPrintConfig extra_config; + std::vector input_files; + + bool start_as_gcodeviewer; +}; + +int GUI_Run(GUI_InitParams ¶ms); + +} // namespace GUI +} // namespace Slic3r + +#endif // slic3r_GUI_Init_hpp_ diff --git a/src/slic3r/GUI/GUI_Preview.cpp b/src/slic3r/GUI/GUI_Preview.cpp index b8695eac9..4cf2848d6 100644 --- a/src/slic3r/GUI/GUI_Preview.cpp +++ b/src/slic3r/GUI/GUI_Preview.cpp @@ -71,7 +71,6 @@ bool View3D::init(wxWindow* parent, Model* model, DynamicPrintConfig* config, Ba m_canvas = new GLCanvas3D(m_canvas_widget); m_canvas->set_context(wxGetApp().init_glcontext(*m_canvas_widget)); - m_canvas->bind_event_handlers(); m_canvas->allow_multisample(OpenGLManager::can_multisample()); // XXX: If have OpenGL @@ -278,7 +277,6 @@ bool Preview::init(wxWindow* parent, Model* model) m_canvas = new GLCanvas3D(m_canvas_widget); m_canvas->set_context(wxGetApp().init_glcontext(*m_canvas_widget)); - m_canvas->bind_event_handlers(); m_canvas->allow_multisample(OpenGLManager::can_multisample()); m_canvas->set_config(m_config); m_canvas->set_model(model); @@ -368,7 +366,7 @@ bool Preview::init(wxWindow* parent, Model* model) #else m_checkbox_travel = new wxCheckBox(this, wxID_ANY, _(L("Travel"))); m_checkbox_retractions = new wxCheckBox(this, wxID_ANY, _(L(width_screen == tiny ? "Retr." : "Retractions"))); - m_checkbox_unretractions = new wxCheckBox(this, wxID_ANY, _(L(width_screen == tiny ? "Unre." : "Unretractions"))); + m_checkbox_unretractions = new wxCheckBox(this, wxID_ANY, _(L(width_screen == tiny ? "Dere." : "Deretractions"))); m_checkbox_shells = new wxCheckBox(this, wxID_ANY, _(L("Shells"))); m_checkbox_legend = new wxCheckBox(this, wxID_ANY, _(L("Legend"))); m_checkbox_legend->SetValue(true); @@ -382,7 +380,6 @@ bool Preview::init(wxWindow* parent, Model* model) right_sizer->Add(m_layers_slider_sizer, 1, wxEXPAND, 0); m_moves_slider = new DoubleSlider::Control(m_bottom_toolbar_panel, wxID_ANY, 0, 0, 0, 100, wxDefaultPosition, wxSize(-1, 3 * GetTextExtent("m").y), wxSL_HORIZONTAL); - m_moves_slider->set_lower_editable(get_app_config()->get("seq_top_layer_only") == "0"); m_moves_slider->SetDrawMode(DoubleSlider::dmSequentialGCodeView); wxBoxSizer* bottom_toolbar_sizer = new wxBoxSizer(wxHORIZONTAL); @@ -598,9 +595,6 @@ void Preview::refresh_print() return; load_print(true); -#if ENABLE_GCODE_VIEWER - m_moves_slider->set_lower_editable(get_app_config()->get("seq_top_layer_only") == "0"); -#endif // ENABLE_GCODE_VIEWER } void Preview::msw_rescale() @@ -1314,17 +1308,13 @@ void Preview::load_print_as_fff(bool keep_z_range) } #if ENABLE_GCODE_VIEWER - if (wxGetApp().is_editor() && !has_layers) -#else - if (! has_layers) -#endif // ENABLE_GCODE_VIEWER - { -#if ENABLE_GCODE_VIEWER + if (wxGetApp().is_editor() && !has_layers) { hide_layers_slider(); m_left_sizer->Hide(m_bottom_toolbar_panel); m_left_sizer->Layout(); Refresh(); #else + if (! has_layers) { reset_sliders(true); m_canvas->reset_legend_texture(); #endif // ENABLE_GCODE_VIEWER @@ -1332,8 +1322,7 @@ void Preview::load_print_as_fff(bool keep_z_range) return; } - if (m_preferred_color_mode == "tool_or_feature") - { + if (m_preferred_color_mode == "tool_or_feature") { // It is left to Slic3r to decide whether the print shall be colored by the tool or by the feature. // Color by feature if it is a single extruder print. unsigned int number_extruders = (unsigned int)print->extruders().size(); @@ -1362,18 +1351,21 @@ void Preview::load_print_as_fff(bool keep_z_range) std::vector color_print_values = {}; // set color print values, if it si selected "ColorPrint" view type #if ENABLE_GCODE_VIEWER - if (gcode_view_type == GCodeViewer::EViewType::ColorPrint) + if (gcode_view_type == GCodeViewer::EViewType::ColorPrint) { #else - if (m_gcode_preview_data->extrusion.view_type == GCodePreviewData::Extrusion::ColorPrint) + if (m_gcode_preview_data->extrusion.view_type == GCodePreviewData::Extrusion::ColorPrint) { #endif // ENABLE_GCODE_VIEWER - { colors = wxGetApp().plater()->get_colors_for_color_print(); #if !ENABLE_GCODE_VIEWER colors.push_back("#808080"); // gray color for pause print or custom G-code #endif // !ENABLE_GCODE_VIEWER - if (!gcode_preview_data_valid) + if (!gcode_preview_data_valid) { color_print_values = wxGetApp().plater()->model().custom_gcode_per_print_z.gcodes; +#if ENABLE_GCODE_VIEWER + colors.push_back("#808080"); // gray color for pause print or custom G-code +#endif // ENABLE_GCODE_VIEWER + } } #if ENABLE_GCODE_VIEWER else if (gcode_preview_data_valid || gcode_view_type == GCodeViewer::EViewType::Filament) @@ -1408,8 +1400,7 @@ void Preview::load_print_as_fff(bool keep_z_range) color_print_values.clear(); } - if (IsShown()) - { + if (IsShown()) { #if ENABLE_GCODE_VIEWER std::vector zs; #endif // ENABLE_GCODE_VIEWER @@ -1563,7 +1554,7 @@ wxString Preview::get_option_type_string(OptionType type) const { case OptionType::Travel: { return _L("Travel"); } case OptionType::Retractions: { return _L("Retractions"); } - case OptionType::Unretractions: { return _L("Unretractions"); } + case OptionType::Unretractions: { return _L("Deretractions"); } case OptionType::ToolChanges: { return _L("Tool changes"); } case OptionType::ColorChanges: { return _L("Color changes"); } case OptionType::PausePrints: { return _L("Pause prints"); } diff --git a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp index f55fdb52e..10ab9932b 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp @@ -30,7 +30,7 @@ void GLGizmoFdmSupports::on_shutdown() std::string GLGizmoFdmSupports::on_get_name() const { - return (_(L("FDM Support Editing")) + " [L]").ToUTF8().data(); + return (_L("Paint-on supports") + " [L]").ToUTF8().data(); } diff --git a/src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp b/src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp index c9e8b9d2b..fc5edff6d 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp @@ -28,7 +28,6 @@ bool GLGizmoFlatten::on_init() void GLGizmoFlatten::on_set_state() { - } CommonGizmosDataID GLGizmoFlatten::on_get_requirements() const @@ -38,7 +37,7 @@ CommonGizmosDataID GLGizmoFlatten::on_get_requirements() const std::string GLGizmoFlatten::on_get_name() const { - return (_(L("Place on face")) + " [F]").ToUTF8().data(); + return (_L("Place on face") + " [F]").ToUTF8().data(); } bool GLGizmoFlatten::on_is_activable() const @@ -48,8 +47,7 @@ bool GLGizmoFlatten::on_is_activable() const void GLGizmoFlatten::on_start_dragging() { - if (m_hover_id != -1) - { + if (m_hover_id != -1) { assert(m_planes_valid); m_normal = m_planes[m_hover_id].normal; m_starting_center = m_parent.get_selection().get_bounding_box().center(); @@ -65,16 +63,14 @@ void GLGizmoFlatten::on_render() const glsafe(::glEnable(GL_DEPTH_TEST)); glsafe(::glEnable(GL_BLEND)); - if (selection.is_single_full_instance()) - { + if (selection.is_single_full_instance()) { const Transform3d& m = selection.get_volume(*selection.get_volume_idxs().begin())->get_instance_transformation().get_matrix(); glsafe(::glPushMatrix()); glsafe(::glTranslatef(0.f, 0.f, selection.get_volume(*selection.get_volume_idxs().begin())->get_sla_shift_z())); glsafe(::glMultMatrixd(m.data())); if (this->is_plane_update_necessary()) const_cast(this)->update_planes(); - for (int i = 0; i < (int)m_planes.size(); ++i) - { + for (int i = 0; i < (int)m_planes.size(); ++i) { if (i == m_hover_id) glsafe(::glColor4f(0.9f, 0.9f, 0.9f, 0.75f)); else @@ -97,16 +93,14 @@ void GLGizmoFlatten::on_render_for_picking() const glsafe(::glDisable(GL_DEPTH_TEST)); glsafe(::glDisable(GL_BLEND)); - if (selection.is_single_full_instance()) - { + if (selection.is_single_full_instance() && !wxGetKeyState(WXK_CONTROL)) { const Transform3d& m = selection.get_volume(*selection.get_volume_idxs().begin())->get_instance_transformation().get_matrix(); glsafe(::glPushMatrix()); glsafe(::glTranslatef(0.f, 0.f, selection.get_volume(*selection.get_volume_idxs().begin())->get_sla_shift_z())); glsafe(::glMultMatrixd(m.data())); if (this->is_plane_update_necessary()) const_cast(this)->update_planes(); - for (int i = 0; i < (int)m_planes.size(); ++i) - { + for (int i = 0; i < (int)m_planes.size(); ++i) { glsafe(::glColor4fv(picking_color_component(i).data())); m_planes[i].vbo.render(); } @@ -129,8 +123,7 @@ void GLGizmoFlatten::update_planes() { const ModelObject* mo = m_c->selection_info()->model_object(); TriangleMesh ch; - for (const ModelVolume* vol : mo->volumes) - { + for (const ModelVolume* vol : mo->volumes) { if (vol->type() != ModelVolumeType::MODEL_PART) continue; TriangleMesh vol_ch = vol->get_convex_hull(); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp index 39cf49acc..e8a6f7bd3 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp @@ -80,7 +80,7 @@ void GLGizmoPainterBase::render_triangles(const Selection& selection) const glsafe(::glEnable(GL_POLYGON_OFFSET_FILL)); ScopeGuard offset_fill_guard([]() { glsafe(::glDisable(GL_POLYGON_OFFSET_FILL)); } ); - glsafe(::glPolygonOffset(-1.0, 1.0)); + glsafe(::glPolygonOffset(-5.0, -5.0)); // Take care of the clipping plane. The normal of the clipping plane is // saved with opposite sign than we need to pass to OpenGL (FIXME) diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp b/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp index 6d74aba4c..0fe222aad 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp @@ -43,7 +43,7 @@ bool GLGizmoSeam::on_init() std::string GLGizmoSeam::on_get_name() const { - return (_(L("Seam Editing")) + " [P]").ToUTF8().data(); + return (_L("Seam painting") + " [P]").ToUTF8().data(); } diff --git a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp index 54ae2de6e..739edec4c 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp @@ -504,22 +504,22 @@ bool GLGizmosManager::on_mouse(wxMouseEvent& evt) int selected_object_idx = selection.get_object_idx(); bool processed = false; + // when control is down we allow scene pan and rotation even when clicking over some object + bool control_down = evt.CmdDown(); + // mouse anywhere if (evt.Moving()) m_tooltip = update_hover_state(mouse_pos); - else if (evt.LeftUp()) - { - if (m_mouse_capture.left) - { + else if (evt.LeftUp()) { + if (m_mouse_capture.left) { processed = true; m_mouse_capture.left = false; } - else if (is_dragging()) - { + else if (is_dragging()) { switch (m_current) { - case Move: m_parent.do_move(L("Gizmo-Move")); break; - case Scale: m_parent.do_scale(L("Gizmo-Scale")); break; - case Rotate: m_parent.do_rotate(L("Gizmo-Rotate")); break; + case Move: { m_parent.do_move(L("Gizmo-Move")); break; } + case Scale: { m_parent.do_scale(L("Gizmo-Scale")); break; } + case Rotate: { m_parent.do_rotate(L("Gizmo-Rotate")); break; } default: break; } @@ -538,41 +538,34 @@ bool GLGizmosManager::on_mouse(wxMouseEvent& evt) // else // return false; } - else if (evt.MiddleUp()) - { - if (m_mouse_capture.middle) - { + else if (evt.MiddleUp()) { + if (m_mouse_capture.middle) { processed = true; m_mouse_capture.middle = false; } else return false; } - else if (evt.RightUp()) - { - if (pending_right_up) - { + else if (evt.RightUp()) { + if (pending_right_up) { pending_right_up = false; return true; } - if (m_mouse_capture.right) - { + if (m_mouse_capture.right) { processed = true; m_mouse_capture.right = false; } // else // return false; } - else if (evt.Dragging() && !is_dragging()) - { + else if (evt.Dragging() && !is_dragging()) { if (m_mouse_capture.any()) // if the button down was done on this toolbar, prevent from dragging into the scene processed = true; // else // return false; } - else if (evt.Dragging() && is_dragging()) - { + else if (evt.Dragging() && is_dragging()) { if (!m_parent.get_wxglcanvas()->HasCapture()) m_parent.get_wxglcanvas()->CaptureMouse(); @@ -595,7 +588,7 @@ bool GLGizmosManager::on_mouse(wxMouseEvent& evt) if (evt.AltDown()) transformation_type.set_independent(); selection.scale(get_scale(), transformation_type); - if (evt.ControlDown()) + if (control_down) selection.translate(get_scale_offset(), true); wxGetApp().obj_manipul()->set_dirty(); break; @@ -618,15 +611,13 @@ bool GLGizmosManager::on_mouse(wxMouseEvent& evt) processed = true; } - if (get_gizmo_idx_from_mouse(mouse_pos) == Undefined) - { + if (get_gizmo_idx_from_mouse(mouse_pos) == Undefined) { // mouse is outside the toolbar m_tooltip = ""; - if (evt.LeftDown()) - { - if ((m_current == SlaSupports || m_current == Hollow || m_current == FdmSupports ||m_current == Seam) - && gizmo_event(SLAGizmoEventType::LeftDown, mouse_pos, evt.ShiftDown(), evt.AltDown(), evt.ControlDown())) + if (evt.LeftDown() && (!control_down || grabber_contains_mouse())) { + if ((m_current == SlaSupports || m_current == Hollow || m_current == FdmSupports || m_current == Seam) + && gizmo_event(SLAGizmoEventType::LeftDown, mouse_pos, evt.ShiftDown(), evt.AltDown())) // the gizmo got the event and took some action, there is no need to do anything more processed = true; else if (!selection.is_empty() && grabber_contains_mouse()) { @@ -644,71 +635,67 @@ bool GLGizmosManager::on_mouse(wxMouseEvent& evt) processed = true; } } - else if (evt.RightDown() && (selected_object_idx != -1) && (m_current == SlaSupports || m_current == Hollow) - && gizmo_event(SLAGizmoEventType::RightDown, mouse_pos)) - { + else if (evt.RightDown() && selected_object_idx != -1 && (m_current == SlaSupports || m_current == Hollow) + && gizmo_event(SLAGizmoEventType::RightDown, mouse_pos)) { // we need to set the following right up as processed to avoid showing the context menu if the user release the mouse over the object pending_right_up = true; // event was taken care of by the SlaSupports gizmo processed = true; } - else if (evt.RightDown() && (selected_object_idx != -1) && (m_current == FdmSupports || m_current == Seam) - && gizmo_event(SLAGizmoEventType::RightDown, mouse_pos)) - { + else if (evt.RightDown() && !control_down && selected_object_idx != -1 && (m_current == FdmSupports || m_current == Seam) + && gizmo_event(SLAGizmoEventType::RightDown, mouse_pos)) { // event was taken care of by the FdmSupports / Seam gizmo processed = true; } - else if (evt.Dragging() && (m_parent.get_move_volume_id() != -1) + else if (evt.Dragging() && m_parent.get_move_volume_id() != -1 && (m_current == SlaSupports || m_current == Hollow || m_current == FdmSupports || m_current == Seam)) // don't allow dragging objects with the Sla gizmo on processed = true; - else if (evt.Dragging() && (m_current == SlaSupports || m_current == Hollow || m_current == FdmSupports || m_current == Seam ) - && gizmo_event(SLAGizmoEventType::Dragging, mouse_pos, evt.ShiftDown(), evt.AltDown(), evt.ControlDown())) - { + else if (evt.Dragging() && !control_down && (m_current == SlaSupports || m_current == Hollow || m_current == FdmSupports || m_current == Seam) + && gizmo_event(SLAGizmoEventType::Dragging, mouse_pos, evt.ShiftDown(), evt.AltDown())) { // the gizmo got the event and took some action, no need to do anything more here m_parent.set_as_dirty(); processed = true; } - else if (evt.LeftUp() && (m_current == SlaSupports || m_current == Hollow || m_current == FdmSupports || m_current == Seam) && !m_parent.is_mouse_dragging()) - { + else if (evt.Dragging() && control_down && (evt.LeftIsDown() || evt.RightIsDown())) { + // CTRL has been pressed while already dragging -> stop current action + if (evt.LeftIsDown()) + gizmo_event(SLAGizmoEventType::LeftUp, mouse_pos, evt.ShiftDown(), evt.AltDown(), true); + else if (evt.RightIsDown()) + gizmo_event(SLAGizmoEventType::RightUp, mouse_pos, evt.ShiftDown(), evt.AltDown(), true); + } + else if (evt.LeftUp() && (m_current == SlaSupports || m_current == Hollow || m_current == FdmSupports || m_current == Seam) && !m_parent.is_mouse_dragging()) { // in case SLA/FDM gizmo is selected, we just pass the LeftUp event and stop processing - neither // object moving or selecting is suppressed in that case - gizmo_event(SLAGizmoEventType::LeftUp, mouse_pos, evt.ShiftDown(), evt.AltDown(), evt.ControlDown()); + gizmo_event(SLAGizmoEventType::LeftUp, mouse_pos, evt.ShiftDown(), evt.AltDown(), control_down); processed = true; } - else if (evt.LeftUp() && (m_current == Flatten) && (m_gizmos[m_current]->get_hover_id() != -1)) - { + else if (evt.LeftUp() && m_current == Flatten && m_gizmos[m_current]->get_hover_id() != -1) { // to avoid to loose the selection when user clicks an the white faces of a different object while the Flatten gizmo is active processed = true; } - else if (evt.RightUp() && (m_current == FdmSupports || m_current == Seam) && !m_parent.is_mouse_dragging()) - { - gizmo_event(SLAGizmoEventType::RightUp, mouse_pos, evt.ShiftDown(), evt.AltDown(), evt.ControlDown()); + else if (evt.RightUp() && (m_current == FdmSupports || m_current == Seam) && !m_parent.is_mouse_dragging()) { + gizmo_event(SLAGizmoEventType::RightUp, mouse_pos, evt.ShiftDown(), evt.AltDown(), control_down); processed = true; } } - else - { + else { // mouse inside toolbar - if (evt.LeftDown() || evt.LeftDClick()) - { + if (evt.LeftDown() || evt.LeftDClick()) { m_mouse_capture.left = true; m_mouse_capture.parent = &m_parent; processed = true; - if (!selection.is_empty()) - { + if (!selection.is_empty()) { update_on_off_state(mouse_pos); update_data(); m_parent.set_as_dirty(); } } - else if (evt.MiddleDown()) - { + else if (evt.MiddleDown()) { m_mouse_capture.middle = true; m_mouse_capture.parent = &m_parent; } - else if (evt.RightDown()) - { + else if (evt.RightDown()) { m_mouse_capture.right = true; m_mouse_capture.parent = &m_parent; } diff --git a/src/slic3r/GUI/InstanceCheck.cpp b/src/slic3r/GUI/InstanceCheck.cpp index b19d5c84d..4aaecd2b2 100644 --- a/src/slic3r/GUI/InstanceCheck.cpp +++ b/src/slic3r/GUI/InstanceCheck.cpp @@ -11,6 +11,7 @@ #include "boost/nowide/convert.hpp" #include +#include #include #include #include @@ -136,6 +137,13 @@ namespace instance_check_internal fl.l_whence = SEEK_SET; fl.l_start = 0; fl.l_len = 1; + + if (! boost::filesystem::is_directory(path)) { + BOOST_LOG_TRIVIAL(debug) << "get_lock(): datadir does not exist yet, creating..."; + if (! boost::filesystem::create_directories(path)) + BOOST_LOG_TRIVIAL(debug) << "get_lock(): unable to create datadir !!!"; + } + if ((fdlock = open(dest_dir.c_str(), O_WRONLY | O_CREAT, 0666)) == -1) return true; diff --git a/src/slic3r/GUI/Jobs/Job.cpp b/src/slic3r/GUI/Jobs/Job.cpp index cc2cb75f1..fedb6f4ac 100644 --- a/src/slic3r/GUI/Jobs/Job.cpp +++ b/src/slic3r/GUI/Jobs/Job.cpp @@ -1,6 +1,7 @@ #include #include "Job.hpp" +#include #include namespace Slic3r { diff --git a/src/slic3r/GUI/Jobs/Job.hpp b/src/slic3r/GUI/Jobs/Job.hpp index 130ca2ed9..aea7692e7 100644 --- a/src/slic3r/GUI/Jobs/Job.hpp +++ b/src/slic3r/GUI/Jobs/Job.hpp @@ -3,7 +3,8 @@ #include -#include +#include "libslic3r/libslic3r.h" + #include #include "ProgressIndicator.hpp" diff --git a/src/slic3r/GUI/KBShortcutsDialog.cpp b/src/slic3r/GUI/KBShortcutsDialog.cpp index 9b5dfeb1d..0b5a2aee7 100644 --- a/src/slic3r/GUI/KBShortcutsDialog.cpp +++ b/src/slic3r/GUI/KBShortcutsDialog.cpp @@ -178,7 +178,7 @@ void KBShortcutsDialog::fill_shortcuts() { "O", L("Zoom out") }, { "Tab", L("Switch between Editor/Preview") }, { "Shift+Tab", L("Collapse/Expand the sidebar") }, -#ifdef __linux__ +#if defined(__linux__) || defined(__APPLE__) { ctrl + "M", L("Show/Hide 3Dconnexion devices settings dialog") }, #endif // __linux__ #if ENABLE_RENDER_PICKING_PASS @@ -190,10 +190,13 @@ void KBShortcutsDialog::fill_shortcuts() m_full_shortcuts.push_back(std::make_pair(_L("Plater"), plater_shortcuts)); Shortcuts gizmos_shortcuts = { - { "Shift+", L("Press to snap by 5% in Gizmo scale\nor to snap by 1mm in Gizmo move") }, - { "F", L("Scale selection to fit print volume\nin Gizmo scale") }, - { ctrl, L("Press to activate one direction scaling in Gizmo scale") }, - { alt, L("Press to scale (in Gizmo scale) or rotate (in Gizmo rotate)\nselected objects around their own center") }, + { ctrl, L("All gizmos: Press to rotate view with mouse left or to pan view with mouse right") }, + { "Shift+", L("Gizmo move: Press to snap by 1mm") }, + { "Shift+", L("Gizmo scale: Press to snap by 5%") }, + { "F", L("Gizmo scale: Scale selection to fit print volume") }, + { ctrl, L("Gizmo scale: Press to activate one direction scaling") }, + { alt, L("Gizmo scale: Press to scale selected objects around their own center") }, + { alt, L("Gizmo rotate: Press to rotate selected objects around their own center") }, }; m_full_shortcuts.push_back(std::make_pair(_L("Gizmos"), gizmos_shortcuts)); @@ -251,7 +254,11 @@ wxPanel* KBShortcutsDialog::create_header(wxWindow* parent, const wxFont& bold_f sizer->AddStretchSpacer(); // logo +#if ENABLE_GCODE_VIEWER + m_logo_bmp = ScalableBitmap(this, wxGetApp().is_editor() ? "Slic3r_32px.png" : "PrusaSlicer-gcodeviewer_32px.png", 32); +#else m_logo_bmp = ScalableBitmap(this, "Slic3r_32px.png", 32); +#endif // ENABLE_GCODE_VIEWER m_header_bitmap = new wxStaticBitmap(panel, wxID_ANY, m_logo_bmp.bmp()); sizer->Add(m_header_bitmap, 0, wxEXPAND | wxLEFT | wxRIGHT, 10); diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 2f62ce867..abbce5c6c 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -1302,7 +1302,7 @@ void MainFrame::init_menubar() append_menu_check_item(viewMenu, wxID_ANY, _L("Show &labels") + sep + "E", _L("Show object/instance labels in 3D scene"), [this](wxCommandEvent&) { m_plater->show_view3D_labels(!m_plater->are_view3D_labels_shown()); }, this, [this]() { return m_plater->is_view3D_shown(); }, [this]() { return m_plater->are_view3D_labels_shown(); }, this); - append_menu_check_item(viewMenu, wxID_ANY, _L("&Collapse sidebar"), _L("Collapse sidebar"), + append_menu_check_item(viewMenu, wxID_ANY, _L("&Collapse sidebar") + "\tShift+Tab", _L("Collapse sidebar"), [this](wxCommandEvent&) { m_plater->collapse_sidebar(!m_plater->is_sidebar_collapsed()); }, this, []() { return true; }, [this]() { return m_plater->is_sidebar_collapsed(); }, this); } @@ -1989,7 +1989,7 @@ void MainFrame::add_to_recent_projects(const wxString& filename) // // Called after the Preferences dialog is closed and the program settings are saved. // Update the UI based on the current preferences. -void MainFrame::update_ui_from_settings() +void MainFrame::update_ui_from_settings(bool apply_free_camera_correction) { // const bool bp_on = wxGetApp().app_config->get("background_processing") == "1"; // m_menu_item_reslice_now->Enable(!bp_on); @@ -1998,7 +1998,7 @@ void MainFrame::update_ui_from_settings() // m_plater->sidebar().Layout(); if (m_plater) - m_plater->update_ui_from_settings(); + m_plater->update_ui_from_settings(apply_free_camera_correction); for (auto tab: wxGetApp().tabs_list) tab->update_ui_from_settings(); } diff --git a/src/slic3r/GUI/MainFrame.hpp b/src/slic3r/GUI/MainFrame.hpp index 8172b0d33..611ea7991 100644 --- a/src/slic3r/GUI/MainFrame.hpp +++ b/src/slic3r/GUI/MainFrame.hpp @@ -9,7 +9,7 @@ #include #ifdef __APPLE__ #include -#endif __APPLE__ +#endif // __APPLE__ #include #include @@ -167,7 +167,7 @@ public: #endif // ENABLE_GCODE_VIEWER void update_menubar(); - void update_ui_from_settings(); + void update_ui_from_settings(bool apply_free_camera_correction = true); bool is_loaded() const { return m_loaded; } bool is_last_input_file() const { return !m_qs_last_input_file.IsEmpty(); } bool is_dlg_layout() const { return m_layout == ESettingsLayout::Dlg; } diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 93e609b52..dbef136f3 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -1645,7 +1645,7 @@ struct Plater::priv #endif // ENABLE_GCODE_VIEWER void reset_all_gizmos(); - void update_ui_from_settings(); + void update_ui_from_settings(bool apply_free_camera_correction = true); void update_main_toolbar_tooltips(); std::shared_ptr statusbar(); std::string get_config(const std::string &key) const; @@ -1795,7 +1795,8 @@ struct Plater::priv // Caching last value of show_action_buttons parameter for show_action_buttons(), so that a callback which does not know this state will not override it. mutable bool ready_to_slice = { false }; // Flag indicating that the G-code export targets a removable device, therefore the show_action_buttons() needs to be called at any case when the background processing finishes. - bool writing_to_removable_device = { false }; + bool writing_to_removable_device { false }; + bool show_ExportToRemovableFinished_notification { false }; bool inside_snapshot_capture() { return m_prevent_snapshots != 0; } bool process_completed_with_error { false }; private: @@ -2153,7 +2154,7 @@ void Plater::priv::select_view_3D(const std::string& name) set_current_panel(preview); #if ENABLE_GCODE_VIEWER - wxGetApp().update_ui_from_settings(); + wxGetApp().update_ui_from_settings(false); #endif // ENABLE_GCODE_VIEWER } @@ -2186,10 +2187,10 @@ void Plater::priv::reset_all_gizmos() // Called after the Preferences dialog is closed and the program settings are saved. // Update the UI based on the current preferences. -void Plater::priv::update_ui_from_settings() +void Plater::priv::update_ui_from_settings(bool apply_free_camera_correction) { camera.set_type(wxGetApp().app_config->get("use_perspective_camera")); - if (wxGetApp().app_config->get("use_free_camera") != "1") + if (apply_free_camera_correction && wxGetApp().app_config->get("use_free_camera") != "1") camera.recover_from_free_camera(); view3D->get_canvas3d()->update_ui_from_settings(); @@ -3330,16 +3331,14 @@ void Plater::priv::set_current_panel(wxPanel* panel) if (current_panel == panel) return; + wxPanel* old_panel = current_panel; current_panel = panel; // to reduce flickering when changing view, first set as visible the new current panel - for (wxPanel* p : panels) - { - if (p == current_panel) - { + for (wxPanel* p : panels) { + if (p == current_panel) { #ifdef __WXMAC__ // On Mac we need also to force a render to avoid flickering when changing view - if (force_render) - { + if (force_render) { if (p == view3D) dynamic_cast(p)->get_canvas3d()->render(); else if (p == preview) @@ -3350,21 +3349,22 @@ void Plater::priv::set_current_panel(wxPanel* panel) } } // then set to invisible the other - for (wxPanel* p : panels) - { + for (wxPanel* p : panels) { if (p != current_panel) p->Hide(); } panel_sizer->Layout(); - if (current_panel == view3D) - { - if (view3D->is_reload_delayed()) - { + if (current_panel == view3D) { + if (old_panel == preview) + preview->get_canvas3d()->unbind_event_handlers(); + + view3D->get_canvas3d()->bind_event_handlers(); + + if (view3D->is_reload_delayed()) { // Delayed loading of the 3D scene. - if (this->printer_technology == ptSLA) - { + if (this->printer_technology == ptSLA) { // Update the SLAPrint from the current Model, so that the reload_scene() // pulls the correct data. this->update_restart_background_process(true, false); @@ -3378,8 +3378,12 @@ void Plater::priv::set_current_panel(wxPanel* panel) if(notification_manager != nullptr) notification_manager->set_in_preview(false); } - else if (current_panel == preview) - { + else if (current_panel == preview) { + if (old_panel == view3D) + view3D->get_canvas3d()->unbind_event_handlers(); + + preview->get_canvas3d()->bind_event_handlers(); + // see: Plater::priv::object_list_changed() // FIXME: it may be better to have a single function making this check and let it be called wherever needed bool export_in_progress = this->background_process.is_export_scheduled(); @@ -3538,6 +3542,8 @@ void Plater::priv::on_export_began(wxCommandEvent& evt) { if (show_warning_dialog) warnings_dialog(); + if (this->writing_to_removable_device) + this->show_ExportToRemovableFinished_notification = true; } void Plater::priv::on_slicing_began() { @@ -3652,11 +3658,12 @@ void Plater::priv::on_process_completed(SlicingProcessCompletedEvent &evt) else if (wxGetApp().get_mode() == comSimple && wxGetApp().app_config->get("objects_always_expert") != "1") { show_action_buttons(false); } - else if (this->writing_to_removable_device) - { + // If writing to removable drive was scheduled, show notification with eject button + if (this->writing_to_removable_device && this->show_ExportToRemovableFinished_notification) { show_action_buttons(false); notification_manager->push_notification(NotificationType::ExportToRemovableFinished, *q->get_current_canvas3D()); } + this->show_ExportToRemovableFinished_notification = false; this->writing_to_removable_device = false; } @@ -4736,7 +4743,9 @@ void Plater::load_gcode() void Plater::load_gcode(const wxString& filename) { - if (filename.empty() || m_last_loaded_gcode == filename) + if (filename.empty() || + (!filename.Lower().EndsWith(".gcode") && !filename.Lower().EndsWith(".g")) || + m_last_loaded_gcode == filename) return; m_last_loaded_gcode = filename; @@ -4784,7 +4793,7 @@ void Plater::update() { p->update(); } void Plater::stop_jobs() { p->m_ui_jobs.stop_all(); } -void Plater::update_ui_from_settings() { p->update_ui_from_settings(); } +void Plater::update_ui_from_settings(bool apply_free_camera_correction) { p->update_ui_from_settings(apply_free_camera_correction); } void Plater::select_view(const std::string& direction) { p->select_view(direction); } @@ -5022,12 +5031,13 @@ void Plater::export_gcode(bool prefer_removable) if (! output_path.empty()) { bool path_on_removable_media = removable_drive_manager.set_and_verify_last_save_path(output_path.string()); + p->writing_to_removable_device = path_on_removable_media; p->export_gcode(output_path, path_on_removable_media, PrintHostJob()); // Storing a path to AppConfig either as path to removable media or a path to internal media. // is_path_on_removable_drive() is called with the "true" parameter to update its internal database as the user may have shuffled the external drives // while the dialog was open. appconfig.update_last_output_dir(output_path.parent_path().string(), path_on_removable_media); - p->writing_to_removable_device = path_on_removable_media; + } } diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index eeecc3326..d5ab0c687 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -172,7 +172,7 @@ public: // Called after the Preferences dialog is closed and the program settings are saved. // Update the UI based on the current preferences. - void update_ui_from_settings(); + void update_ui_from_settings(bool apply_free_camera_correction = true); void select_all(); void deselect_all(); diff --git a/src/slic3r/GUI/PresetComboBoxes.cpp b/src/slic3r/GUI/PresetComboBoxes.cpp index f9b088413..f71cbd17b 100644 --- a/src/slic3r/GUI/PresetComboBoxes.cpp +++ b/src/slic3r/GUI/PresetComboBoxes.cpp @@ -30,6 +30,7 @@ #include "../Utils/UndoRedo.hpp" #include "BitmapCache.hpp" #include "PhysicalPrinterDialog.hpp" +#include "SavePresetDialog.hpp" using Slic3r::GUI::format_wxstr; @@ -247,6 +248,51 @@ void PresetComboBox::update(std::string select_preset_name) Thaw(); } +void PresetComboBox::edit_physical_printer() +{ + if (!m_preset_bundle->physical_printers.has_selection()) + return; + + PhysicalPrinterDialog dlg(this->GetString(this->GetSelection())); + if (dlg.ShowModal() == wxID_OK) + update(); +} + +void PresetComboBox::add_physical_printer() +{ + if (PhysicalPrinterDialog(wxEmptyString).ShowModal() == wxID_OK) + update(); +} + +bool PresetComboBox::del_physical_printer(const wxString& note_string/* = wxEmptyString*/) +{ + const std::string& printer_name = m_preset_bundle->physical_printers.get_selected_full_printer_name(); + if (printer_name.empty()) + return false; + + wxString msg; + if (!note_string.IsEmpty()) + msg += note_string + "\n"; + msg += format_wxstr(_L("Are you sure you want to delete \"%1%\" printer?"), printer_name); + + if (wxMessageDialog(this, msg, _L("Delete Physical Printer"), wxYES_NO | wxNO_DEFAULT | wxICON_QUESTION).ShowModal() != wxID_YES) + return false; + + m_preset_bundle->physical_printers.delete_selected_printer(); + + this->update(); + + if (dynamic_cast(this) != nullptr) + wxGetApp().get_tab(m_type)->update_preset_choice(); + else if (dynamic_cast(this) != nullptr) + { + wxGetApp().get_tab(m_type)->update_btns_enabling(); + wxGetApp().plater()->sidebar().update_presets(m_type); + } + + return true; +} + void PresetComboBox::update() { this->update(into_u8(this->GetString(this->GetSelection()))); @@ -312,7 +358,7 @@ wxBitmap* PresetComboBox::get_bmp( std::string bitmap_key, bool wide_icons, con // Paint a red flag for incompatible presets. bmps.emplace_back(is_compatible ? bitmap_cache().mkclear(norm_icon_width, icon_height) : m_bitmapIncompatible.bmp()); - if (m_type == Preset::TYPE_FILAMENT) + if (m_type == Preset::TYPE_FILAMENT && !filament_rgb.empty()) { unsigned char rgb[3]; // Paint the color bars. @@ -641,28 +687,11 @@ void PlaterPresetComboBox::show_edit_menu() [this](wxCommandEvent&) { this->switch_to_tab(); }, "cog", menu, []() { return true; }, wxGetApp().plater()); if (this->is_selected_physical_printer()) { - append_menu_item(menu, wxID_ANY, _L("Edit physical printer"), "", - [this](wxCommandEvent&) { - PhysicalPrinterDialog dlg(this->GetString(this->GetSelection())); - if (dlg.ShowModal() == wxID_OK) - update(); - }, "cog", menu, []() { return true; }, wxGetApp().plater()); + append_menu_item(menu, wxID_ANY, _L("Edit physical printer"), "", + [this](wxCommandEvent&) { this->edit_physical_printer(); }, "cog", menu, []() { return true; }, wxGetApp().plater()); - append_menu_item(menu, wxID_ANY, _L("Delete physical printer"), "", - [this](wxCommandEvent&) { - const std::string& printer_name = m_preset_bundle->physical_printers.get_selected_full_printer_name(); - if (printer_name.empty()) - return; - - const wxString msg = from_u8((boost::format(_u8L("Are you sure you want to delete \"%1%\" printer?")) % printer_name).str()); - if (wxMessageDialog(this, msg, _L("Delete Physical Printer"), wxYES_NO | wxNO_DEFAULT | wxICON_QUESTION).ShowModal() != wxID_YES) - return; - - m_preset_bundle->physical_printers.delete_selected_printer(); - - wxGetApp().get_tab(m_type)->update_preset_choice(); - update(); - }, "cross", menu, []() { return true; }, wxGetApp().plater()); + append_menu_item(menu, wxID_ANY, _L("Delete physical printer"), "", + [this](wxCommandEvent&) { this->del_physical_printer(); }, "cross", menu, []() { return true; }, wxGetApp().plater()); } else append_menu_item(menu, wxID_ANY, _L("Add/Remove presets"), "", @@ -671,11 +700,7 @@ void PlaterPresetComboBox::show_edit_menu() }, "edit_uni", menu, []() { return true; }, wxGetApp().plater()); append_menu_item(menu, wxID_ANY, _L("Add physical printer"), "", - [this](wxCommandEvent&) { - PhysicalPrinterDialog dlg(wxEmptyString); - if (dlg.ShowModal() == wxID_OK) - update(); - }, "edit_uni", menu, []() { return true; }, wxGetApp().plater()); + [this](wxCommandEvent&) { this->add_physical_printer(); }, "edit_uni", menu, []() { return true; }, wxGetApp().plater()); wxGetApp().plater()->PopupMenu(menu); } @@ -804,11 +829,13 @@ void PlaterPresetComboBox::update() } } - if (m_type == Preset::TYPE_PRINTER || m_type == Preset::TYPE_SLA_MATERIAL) { + if (m_type == Preset::TYPE_PRINTER || m_type == Preset::TYPE_FILAMENT || m_type == Preset::TYPE_SLA_MATERIAL) { wxBitmap* bmp = get_bmp("edit_preset_list", wide_icons, "edit_uni"); assert(bmp); - if (m_type == Preset::TYPE_SLA_MATERIAL) + if (m_type == Preset::TYPE_FILAMENT) + set_label_marker(Append(separator(L("Add/Remove filaments")), *bmp), LABEL_ITEM_WIZARD_FILAMENTS); + else if (m_type == Preset::TYPE_SLA_MATERIAL) set_label_marker(Append(separator(L("Add/Remove materials")), *bmp), LABEL_ITEM_WIZARD_MATERIALS); else set_label_marker(Append(separator(L("Add/Remove printers")), *bmp), LABEL_ITEM_WIZARD_PRINTERS); @@ -1022,348 +1049,4 @@ void TabPresetComboBox::update_dirty() #endif /* __APPLE __ */ } - -//----------------------------------------------- -// SavePresetDialog::Item -//----------------------------------------------- - -SavePresetDialog::Item::Item(Preset::Type type, const std::string& suffix, wxBoxSizer* sizer, SavePresetDialog* parent): - m_type(type), - m_parent(parent) -{ - Tab* tab = wxGetApp().get_tab(m_type); - assert(tab); - m_presets = tab->get_presets(); - - const Preset& sel_preset = m_presets->get_selected_preset(); - std::string preset_name = sel_preset.is_default ? "Untitled" : - sel_preset.is_system ? (boost::format(("%1% - %2%")) % sel_preset.name % suffix).str() : - sel_preset.name; - - // if name contains extension - if (boost::iends_with(preset_name, ".ini")) { - size_t len = preset_name.length() - 4; - preset_name.resize(len); - } - - std::vector values; - for (const Preset& preset : *m_presets) { - if (preset.is_default || preset.is_system || preset.is_external) - continue; - values.push_back(preset.name); - } - - wxStaticText* label_top = new wxStaticText(m_parent, wxID_ANY, from_u8((boost::format(_utf8(L("Save %s as:"))) % into_u8(tab->title())).str())); - - m_valid_bmp = new wxStaticBitmap(m_parent, wxID_ANY, create_scaled_bitmap("tick_mark", m_parent)); - - m_combo = new wxComboBox(m_parent, wxID_ANY, from_u8(preset_name), wxDefaultPosition, wxSize(35 * wxGetApp().em_unit(), -1)); - for (const std::string& value : values) - m_combo->Append(from_u8(value)); - - m_combo->Bind(wxEVT_TEXT, [this](wxCommandEvent&) { update(); }); -#ifdef __WXOSX__ - // Under OSX wxEVT_TEXT wasn't invoked after change selection in combobox, - // So process wxEVT_COMBOBOX too - m_combo->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent&) { update(); }); -#endif //__WXOSX__ - - m_valid_label = new wxStaticText(m_parent, wxID_ANY, ""); - m_valid_label->SetFont(wxGetApp().bold_font()); - - wxBoxSizer* combo_sizer = new wxBoxSizer(wxHORIZONTAL); - combo_sizer->Add(m_valid_bmp, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, BORDER_W); - combo_sizer->Add(m_combo, 1, wxEXPAND, BORDER_W); - - sizer->Add(label_top, 0, wxEXPAND | wxTOP| wxBOTTOM, BORDER_W); - sizer->Add(combo_sizer, 0, wxEXPAND | wxBOTTOM, BORDER_W); - sizer->Add(m_valid_label, 0, wxEXPAND | wxLEFT, 3*BORDER_W); - - if (m_type == Preset::TYPE_PRINTER) - m_parent->add_info_for_edit_ph_printer(sizer); - - update(); -} - -void SavePresetDialog::Item::update() -{ - m_preset_name = into_u8(m_combo->GetValue()); - - m_valid_type = Valid; - wxString info_line; - - const char* unusable_symbols = "<>[]:/\\|?*\""; - - const std::string unusable_suffix = PresetCollection::get_suffix_modified();//"(modified)"; - for (size_t i = 0; i < std::strlen(unusable_symbols); i++) { - if (m_preset_name.find_first_of(unusable_symbols[i]) != std::string::npos) { - info_line = _L("The supplied name is not valid;") + "\n" + - _L("the following characters are not allowed:") + " " + unusable_symbols; - m_valid_type = NoValid; - break; - } - } - - if (m_valid_type == Valid && m_preset_name.find(unusable_suffix) != std::string::npos) { - info_line = _L("The supplied name is not valid;") + "\n" + - _L("the following suffix is not allowed:") + "\n\t" + - from_u8(PresetCollection::get_suffix_modified()); - m_valid_type = NoValid; - } - - if (m_valid_type == Valid && m_preset_name == "- default -") { - info_line = _L("The supplied name is not available."); - m_valid_type = NoValid; - } - - const Preset* existing = m_presets->find_preset(m_preset_name, false); - if (m_valid_type == Valid && existing && (existing->is_default || existing->is_system)) { - info_line = _L("Cannot overwrite a system profile."); - m_valid_type = NoValid; - } - - if (m_valid_type == Valid && existing && (existing->is_external)) { - info_line = _L("Cannot overwrite an external profile."); - m_valid_type = NoValid; - } - - if (m_valid_type == Valid && existing && m_preset_name != m_presets->get_selected_preset_name()) - { - info_line = from_u8((boost::format(_u8L("Preset with name \"%1%\" already exists.")) % m_preset_name).str()); - if (!existing->is_compatible) - info_line += "\n" + _L("And selected preset is imcopatible with selected printer."); - info_line += "\n" + _L("Note: This preset will be replaced after saving"); - m_valid_type = Warning; - } - - if (m_valid_type == Valid && m_preset_name.empty()) { - info_line = _L("The empty name is not available."); - m_valid_type = NoValid; - } - - m_valid_label->SetLabel(info_line); - m_valid_label->Show(!info_line.IsEmpty()); - - update_valid_bmp(); - - if (m_type == Preset::TYPE_PRINTER) - m_parent->update_info_for_edit_ph_printer(m_preset_name); - - m_parent->layout(); -} - -void SavePresetDialog::Item::update_valid_bmp() -{ - std::string bmp_name = m_valid_type == Warning ? "exclamation" : - m_valid_type == NoValid ? "cross" : "tick_mark" ; - m_valid_bmp->SetBitmap(create_scaled_bitmap(bmp_name, m_parent)); -} - -void SavePresetDialog::Item::accept() -{ - if (m_valid_type == Warning) - m_presets->delete_preset(m_preset_name); -} - - -//----------------------------------------------- -// SavePresetDialog -//----------------------------------------------- - -SavePresetDialog::SavePresetDialog(Preset::Type type, std::string suffix) - : DPIDialog(nullptr, wxID_ANY, _L("Save preset"), wxDefaultPosition, wxSize(45 * wxGetApp().em_unit(), 5 * wxGetApp().em_unit()), wxDEFAULT_DIALOG_STYLE | wxICON_WARNING | wxRESIZE_BORDER) -{ - build(std::vector{type}, suffix); -} - -SavePresetDialog::SavePresetDialog(std::vector types, std::string suffix) - : DPIDialog(nullptr, wxID_ANY, _L("Save preset"), wxDefaultPosition, wxSize(45 * wxGetApp().em_unit(), 5 * wxGetApp().em_unit()), wxDEFAULT_DIALOG_STYLE | wxICON_WARNING | wxRESIZE_BORDER) -{ - build(types, suffix); -} - -SavePresetDialog::~SavePresetDialog() -{ - for (auto item : m_items) { - delete item; - } -} - -void SavePresetDialog::build(std::vector types, std::string suffix) -{ - SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); -#if ENABLE_WX_3_1_3_DPI_CHANGED_EVENT && defined(__WXMSW__) - // ys_FIXME! temporary workaround for correct font scaling - // Because of from wxWidgets 3.1.3 auto rescaling is implemented for the Fonts, - // From the very beginning set dialog font to the wxSYS_DEFAULT_GUI_FONT - this->SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT)); -#endif // ENABLE_WX_3_1_3_DPI_CHANGED_EVENT - - if (suffix.empty()) - suffix = _CTX_utf8(L_CONTEXT("Copy", "PresetName"), "PresetName"); - - wxBoxSizer* topSizer = new wxBoxSizer(wxVERTICAL); - - m_presets_sizer = new wxBoxSizer(wxVERTICAL); - - // Add first item - for (Preset::Type type : types) - AddItem(type, suffix); - - // Add dialog's buttons - wxStdDialogButtonSizer* btns = this->CreateStdDialogButtonSizer(wxOK | wxCANCEL); - wxButton* btnOK = static_cast(this->FindWindowById(wxID_OK, this)); - btnOK->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { accept(); }); - btnOK->Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(enable_ok_btn()); }); - - topSizer->Add(m_presets_sizer, 0, wxEXPAND | wxALL, BORDER_W); - topSizer->Add(btns, 0, wxEXPAND | wxALL, BORDER_W); - - SetSizer(topSizer); - topSizer->SetSizeHints(this); - - this->CenterOnScreen(); -} - -void SavePresetDialog::AddItem(Preset::Type type, const std::string& suffix) -{ - m_items.emplace_back(new Item{type, suffix, m_presets_sizer, this}); -} - -std::string SavePresetDialog::get_name() -{ - return m_items.front()->preset_name(); -} - -std::string SavePresetDialog::get_name(Preset::Type type) -{ - for (const Item* item : m_items) - if (item->type() == type) - return item->preset_name(); - return ""; -} - -bool SavePresetDialog::enable_ok_btn() const -{ - for (const Item* item : m_items) - if (!item->is_valid()) - return false; - - return true; -} - -void SavePresetDialog::add_info_for_edit_ph_printer(wxBoxSizer* sizer) -{ - PhysicalPrinterCollection& printers = wxGetApp().preset_bundle->physical_printers; - m_ph_printer_name = printers.get_selected_printer_name(); - m_old_preset_name = printers.get_selected_printer_preset_name(); - - wxString msg_text = from_u8((boost::format(_u8L("You have selected physical printer \"%1%\" \n" - "with related printer preset \"%2%\"")) % - m_ph_printer_name % m_old_preset_name).str()); - m_label = new wxStaticText(this, wxID_ANY, msg_text); - m_label->SetFont(wxGetApp().bold_font()); - - wxString choices[] = {"","",""}; - - m_action_radio_box = new wxRadioBox(this, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, - WXSIZEOF(choices), choices, 3, wxRA_SPECIFY_ROWS); - m_action_radio_box->SetSelection(0); - m_action_radio_box->Bind(wxEVT_RADIOBOX, [this](wxCommandEvent& e) { - m_action = (ActionType)e.GetSelection(); }); - m_action = ChangePreset; - - m_radio_sizer = new wxBoxSizer(wxHORIZONTAL); - m_radio_sizer->Add(m_action_radio_box, 1, wxEXPAND | wxTOP, 2*BORDER_W); - - sizer->Add(m_label, 0, wxEXPAND | wxLEFT | wxTOP, 3*BORDER_W); - sizer->Add(m_radio_sizer, 1, wxEXPAND | wxLEFT, 3*BORDER_W); -} - -void SavePresetDialog::update_info_for_edit_ph_printer(const std::string& preset_name) -{ - bool show = wxGetApp().preset_bundle->physical_printers.has_selection() && m_old_preset_name != preset_name; - - m_label->Show(show); - m_radio_sizer->ShowItems(show); - if (!show) { - this->SetMinSize(wxSize(100,50)); - return; - } - - wxString msg_text = from_u8((boost::format(_u8L("What would you like to do with \"%1%\" preset after saving?")) % preset_name).str()); - m_action_radio_box->SetLabel(msg_text); - - wxString choices[] = { from_u8((boost::format(_u8L("Change \"%1%\" to \"%2%\" for this physical printer \"%3%\"")) % m_old_preset_name % preset_name % m_ph_printer_name).str()), - from_u8((boost::format(_u8L("Add \"%1%\" as a next preset for the the physical printer \"%2%\"")) % preset_name % m_ph_printer_name).str()), - from_u8((boost::format(_u8L("Just switch to \"%1%\" preset")) % preset_name).str()) }; - - int n = 0; - for(const wxString& label: choices) - m_action_radio_box->SetString(n++, label); -} - -void SavePresetDialog::layout() -{ - this->Layout(); - this->Fit(); -} - -void SavePresetDialog::on_dpi_changed(const wxRect& suggested_rect) -{ - const int& em = em_unit(); - - msw_buttons_rescale(this, em, { wxID_OK, wxID_CANCEL }); - - for (Item* item : m_items) - item->update_valid_bmp(); - - //const wxSize& size = wxSize(45 * em, 35 * em); - SetMinSize(/*size*/wxSize(100, 50)); - - Fit(); - Refresh(); -} - -void SavePresetDialog::update_physical_printers(const std::string& preset_name) -{ - if (m_action == UndefAction) - return; - - PhysicalPrinterCollection& physical_printers = wxGetApp().preset_bundle->physical_printers; - if (!physical_printers.has_selection()) - return; - - std::string printer_preset_name = physical_printers.get_selected_printer_preset_name(); - - if (m_action == Switch) - // unselect physical printer, if it was selected - physical_printers.unselect_printer(); - else - { - PhysicalPrinter printer = physical_printers.get_selected_printer(); - - if (m_action == ChangePreset) - printer.delete_preset(printer_preset_name); - - if (printer.add_preset(preset_name)) - physical_printers.save_printer(printer); - - physical_printers.select_printer(printer.get_full_name(preset_name)); - } -} - -void SavePresetDialog::accept() -{ - for (Item* item : m_items) { - item->accept(); - if (item->type() == Preset::TYPE_PRINTER) - update_physical_printers(item->preset_name()); - } - - EndModal(wxID_OK); -} - - - }} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/PresetComboBoxes.hpp b/src/slic3r/GUI/PresetComboBoxes.hpp index e33a2d753..2967ff263 100644 --- a/src/slic3r/GUI/PresetComboBoxes.hpp +++ b/src/slic3r/GUI/PresetComboBoxes.hpp @@ -59,6 +59,10 @@ public: void update(std::string select_preset); + void edit_physical_printer(); + void add_physical_printer(); + bool del_physical_printer(const wxString& note_string = wxEmptyString); + virtual void update(); virtual void msw_rescale(); @@ -187,91 +191,6 @@ public: Preset::Type type() const { return m_type; } }; - -//------------------------------------------------ -// SavePresetDialog -//------------------------------------------------ - -class SavePresetDialog : public DPIDialog -{ - enum ActionType - { - ChangePreset, - AddPreset, - Switch, - UndefAction - }; - - struct Item - { - enum ValidationType - { - Valid, - NoValid, - Warning - }; - - Item(Preset::Type type, const std::string& suffix, wxBoxSizer* sizer, SavePresetDialog* parent); - - void update_valid_bmp(); - void accept(); - - bool is_valid() const { return m_valid_type != NoValid; } - Preset::Type type() const { return m_type; } - std::string preset_name() const { return m_preset_name; } - - private: - Preset::Type m_type; - ValidationType m_valid_type; - std::string m_preset_name; - - SavePresetDialog* m_parent {nullptr}; - wxStaticBitmap* m_valid_bmp {nullptr}; - wxComboBox* m_combo {nullptr}; - wxStaticText* m_valid_label {nullptr}; - - PresetCollection* m_presets {nullptr}; - - void update(); - }; - - std::vector m_items; - - wxBoxSizer* m_presets_sizer {nullptr}; - wxStaticText* m_label {nullptr}; - wxRadioBox* m_action_radio_box {nullptr}; - wxBoxSizer* m_radio_sizer {nullptr}; - ActionType m_action {UndefAction}; - - std::string m_ph_printer_name; - std::string m_old_preset_name; - -public: - - SavePresetDialog(Preset::Type type, std::string suffix = ""); - SavePresetDialog(std::vector types, std::string suffix = ""); - ~SavePresetDialog(); - - void AddItem(Preset::Type type, const std::string& suffix); - - std::string get_name(); - std::string get_name(Preset::Type type); - - bool enable_ok_btn() const; - void add_info_for_edit_ph_printer(wxBoxSizer *sizer); - void update_info_for_edit_ph_printer(const std::string &preset_name); - void layout(); - -protected: - void on_dpi_changed(const wxRect& suggested_rect) override; - void on_sys_color_changed() override {} - -private: - void build(std::vector types, std::string suffix = ""); - void update_physical_printers(const std::string& preset_name); - void accept(); -}; - } // namespace GUI } // namespace Slic3r diff --git a/src/slic3r/GUI/SavePresetDialog.cpp b/src/slic3r/GUI/SavePresetDialog.cpp new file mode 100644 index 000000000..79ce296b8 --- /dev/null +++ b/src/slic3r/GUI/SavePresetDialog.cpp @@ -0,0 +1,368 @@ +#include "SavePresetDialog.hpp" + +#include +#include +#include +#include + +#include +#include +#include + +#include "libslic3r/PresetBundle.hpp" + +#include "GUI.hpp" +#include "GUI_App.hpp" +#include "format.hpp" +#include "Tab.hpp" + +using Slic3r::GUI::format_wxstr; + +namespace Slic3r { +namespace GUI { + +#define BORDER_W 10 + + +//----------------------------------------------- +// SavePresetDialog::Item +//----------------------------------------------- + +SavePresetDialog::Item::Item(Preset::Type type, const std::string& suffix, wxBoxSizer* sizer, SavePresetDialog* parent): + m_type(type), + m_parent(parent) +{ + Tab* tab = wxGetApp().get_tab(m_type); + assert(tab); + m_presets = tab->get_presets(); + + const Preset& sel_preset = m_presets->get_selected_preset(); + std::string preset_name = sel_preset.is_default ? "Untitled" : + sel_preset.is_system ? (boost::format(("%1% - %2%")) % sel_preset.name % suffix).str() : + sel_preset.name; + + // if name contains extension + if (boost::iends_with(preset_name, ".ini")) { + size_t len = preset_name.length() - 4; + preset_name.resize(len); + } + + std::vector values; + for (const Preset& preset : *m_presets) { + if (preset.is_default || preset.is_system || preset.is_external) + continue; + values.push_back(preset.name); + } + + wxStaticText* label_top = new wxStaticText(m_parent, wxID_ANY, from_u8((boost::format(_utf8(L("Save %s as:"))) % into_u8(tab->title())).str())); + + m_valid_bmp = new wxStaticBitmap(m_parent, wxID_ANY, create_scaled_bitmap("tick_mark", m_parent)); + + m_combo = new wxComboBox(m_parent, wxID_ANY, from_u8(preset_name), wxDefaultPosition, wxSize(35 * wxGetApp().em_unit(), -1)); + for (const std::string& value : values) + m_combo->Append(from_u8(value)); + + m_combo->Bind(wxEVT_TEXT, [this](wxCommandEvent&) { update(); }); +#ifdef __WXOSX__ + // Under OSX wxEVT_TEXT wasn't invoked after change selection in combobox, + // So process wxEVT_COMBOBOX too + m_combo->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent&) { update(); }); +#endif //__WXOSX__ + + m_valid_label = new wxStaticText(m_parent, wxID_ANY, ""); + m_valid_label->SetFont(wxGetApp().bold_font()); + + wxBoxSizer* combo_sizer = new wxBoxSizer(wxHORIZONTAL); + combo_sizer->Add(m_valid_bmp, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, BORDER_W); + combo_sizer->Add(m_combo, 1, wxEXPAND, BORDER_W); + + sizer->Add(label_top, 0, wxEXPAND | wxTOP| wxBOTTOM, BORDER_W); + sizer->Add(combo_sizer, 0, wxEXPAND | wxBOTTOM, BORDER_W); + sizer->Add(m_valid_label, 0, wxEXPAND | wxLEFT, 3*BORDER_W); + + if (m_type == Preset::TYPE_PRINTER) + m_parent->add_info_for_edit_ph_printer(sizer); + + update(); +} + +void SavePresetDialog::Item::update() +{ + m_preset_name = into_u8(m_combo->GetValue()); + + m_valid_type = Valid; + wxString info_line; + + const char* unusable_symbols = "<>[]:/\\|?*\""; + + const std::string unusable_suffix = PresetCollection::get_suffix_modified();//"(modified)"; + for (size_t i = 0; i < std::strlen(unusable_symbols); i++) { + if (m_preset_name.find_first_of(unusable_symbols[i]) != std::string::npos) { + info_line = _L("The supplied name is not valid;") + "\n" + + _L("the following characters are not allowed:") + " " + unusable_symbols; + m_valid_type = NoValid; + break; + } + } + + if (m_valid_type == Valid && m_preset_name.find(unusable_suffix) != std::string::npos) { + info_line = _L("The supplied name is not valid;") + "\n" + + _L("the following suffix is not allowed:") + "\n\t" + + from_u8(PresetCollection::get_suffix_modified()); + m_valid_type = NoValid; + } + + if (m_valid_type == Valid && m_preset_name == "- default -") { + info_line = _L("The supplied name is not available."); + m_valid_type = NoValid; + } + + const Preset* existing = m_presets->find_preset(m_preset_name, false); + if (m_valid_type == Valid && existing && (existing->is_default || existing->is_system)) { + info_line = _L("Cannot overwrite a system profile."); + m_valid_type = NoValid; + } + + if (m_valid_type == Valid && existing && (existing->is_external)) { + info_line = _L("Cannot overwrite an external profile."); + m_valid_type = NoValid; + } + + if (m_valid_type == Valid && existing && m_preset_name != m_presets->get_selected_preset_name()) + { + info_line = from_u8((boost::format(_u8L("Preset with name \"%1%\" already exists.")) % m_preset_name).str()); + if (!existing->is_compatible) + info_line += "\n" + _L("And selected preset is imcopatible with selected printer."); + info_line += "\n" + _L("Note: This preset will be replaced after saving"); + m_valid_type = Warning; + } + + if (m_valid_type == Valid && m_preset_name.empty()) { + info_line = _L("The empty name is not available."); + m_valid_type = NoValid; + } + + m_valid_label->SetLabel(info_line); + m_valid_label->Show(!info_line.IsEmpty()); + + update_valid_bmp(); + + if (m_type == Preset::TYPE_PRINTER) + m_parent->update_info_for_edit_ph_printer(m_preset_name); + + m_parent->layout(); +} + +void SavePresetDialog::Item::update_valid_bmp() +{ + std::string bmp_name = m_valid_type == Warning ? "exclamation" : + m_valid_type == NoValid ? "cross" : "tick_mark" ; + m_valid_bmp->SetBitmap(create_scaled_bitmap(bmp_name, m_parent)); +} + +void SavePresetDialog::Item::accept() +{ + if (m_valid_type == Warning) + m_presets->delete_preset(m_preset_name); +} + + +//----------------------------------------------- +// SavePresetDialog +//----------------------------------------------- + +SavePresetDialog::SavePresetDialog(Preset::Type type, std::string suffix) + : DPIDialog(nullptr, wxID_ANY, _L("Save preset"), wxDefaultPosition, wxSize(45 * wxGetApp().em_unit(), 5 * wxGetApp().em_unit()), wxDEFAULT_DIALOG_STYLE | wxICON_WARNING | wxRESIZE_BORDER) +{ + build(std::vector{type}, suffix); +} + +SavePresetDialog::SavePresetDialog(std::vector types, std::string suffix) + : DPIDialog(nullptr, wxID_ANY, _L("Save preset"), wxDefaultPosition, wxSize(45 * wxGetApp().em_unit(), 5 * wxGetApp().em_unit()), wxDEFAULT_DIALOG_STYLE | wxICON_WARNING | wxRESIZE_BORDER) +{ + build(types, suffix); +} + +SavePresetDialog::~SavePresetDialog() +{ + for (auto item : m_items) { + delete item; + } +} + +void SavePresetDialog::build(std::vector types, std::string suffix) +{ + SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); +#if ENABLE_WX_3_1_3_DPI_CHANGED_EVENT && defined(__WXMSW__) + // ys_FIXME! temporary workaround for correct font scaling + // Because of from wxWidgets 3.1.3 auto rescaling is implemented for the Fonts, + // From the very beginning set dialog font to the wxSYS_DEFAULT_GUI_FONT + this->SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT)); +#endif // ENABLE_WX_3_1_3_DPI_CHANGED_EVENT + + if (suffix.empty()) + suffix = _CTX_utf8(L_CONTEXT("Copy", "PresetName"), "PresetName"); + + wxBoxSizer* topSizer = new wxBoxSizer(wxVERTICAL); + + m_presets_sizer = new wxBoxSizer(wxVERTICAL); + + // Add first item + for (Preset::Type type : types) + AddItem(type, suffix); + + // Add dialog's buttons + wxStdDialogButtonSizer* btns = this->CreateStdDialogButtonSizer(wxOK | wxCANCEL); + wxButton* btnOK = static_cast(this->FindWindowById(wxID_OK, this)); + btnOK->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { accept(); }); + btnOK->Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(enable_ok_btn()); }); + + topSizer->Add(m_presets_sizer, 0, wxEXPAND | wxALL, BORDER_W); + topSizer->Add(btns, 0, wxEXPAND | wxALL, BORDER_W); + + SetSizer(topSizer); + topSizer->SetSizeHints(this); + + this->CenterOnScreen(); +} + +void SavePresetDialog::AddItem(Preset::Type type, const std::string& suffix) +{ + m_items.emplace_back(new Item{type, suffix, m_presets_sizer, this}); +} + +std::string SavePresetDialog::get_name() +{ + return m_items.front()->preset_name(); +} + +std::string SavePresetDialog::get_name(Preset::Type type) +{ + for (const Item* item : m_items) + if (item->type() == type) + return item->preset_name(); + return ""; +} + +bool SavePresetDialog::enable_ok_btn() const +{ + for (const Item* item : m_items) + if (!item->is_valid()) + return false; + + return true; +} + +void SavePresetDialog::add_info_for_edit_ph_printer(wxBoxSizer* sizer) +{ + PhysicalPrinterCollection& printers = wxGetApp().preset_bundle->physical_printers; + m_ph_printer_name = printers.get_selected_printer_name(); + m_old_preset_name = printers.get_selected_printer_preset_name(); + + wxString msg_text = from_u8((boost::format(_u8L("You have selected physical printer \"%1%\" \n" + "with related printer preset \"%2%\"")) % + m_ph_printer_name % m_old_preset_name).str()); + m_label = new wxStaticText(this, wxID_ANY, msg_text); + m_label->SetFont(wxGetApp().bold_font()); + + wxString choices[] = {"","",""}; + + m_action_radio_box = new wxRadioBox(this, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, + WXSIZEOF(choices), choices, 3, wxRA_SPECIFY_ROWS); + m_action_radio_box->SetSelection(0); + m_action_radio_box->Bind(wxEVT_RADIOBOX, [this](wxCommandEvent& e) { + m_action = (ActionType)e.GetSelection(); }); + m_action = ChangePreset; + + m_radio_sizer = new wxBoxSizer(wxHORIZONTAL); + m_radio_sizer->Add(m_action_radio_box, 1, wxEXPAND | wxTOP, 2*BORDER_W); + + sizer->Add(m_label, 0, wxEXPAND | wxLEFT | wxTOP, 3*BORDER_W); + sizer->Add(m_radio_sizer, 1, wxEXPAND | wxLEFT, 3*BORDER_W); +} + +void SavePresetDialog::update_info_for_edit_ph_printer(const std::string& preset_name) +{ + bool show = wxGetApp().preset_bundle->physical_printers.has_selection() && m_old_preset_name != preset_name; + + m_label->Show(show); + m_radio_sizer->ShowItems(show); + if (!show) { + this->SetMinSize(wxSize(100,50)); + return; + } + + wxString msg_text = from_u8((boost::format(_u8L("What would you like to do with \"%1%\" preset after saving?")) % preset_name).str()); + m_action_radio_box->SetLabel(msg_text); + + wxString choices[] = { from_u8((boost::format(_u8L("Change \"%1%\" to \"%2%\" for this physical printer \"%3%\"")) % m_old_preset_name % preset_name % m_ph_printer_name).str()), + from_u8((boost::format(_u8L("Add \"%1%\" as a next preset for the the physical printer \"%2%\"")) % preset_name % m_ph_printer_name).str()), + from_u8((boost::format(_u8L("Just switch to \"%1%\" preset")) % preset_name).str()) }; + + int n = 0; + for(const wxString& label: choices) + m_action_radio_box->SetString(n++, label); +} + +void SavePresetDialog::layout() +{ + this->Layout(); + this->Fit(); +} + +void SavePresetDialog::on_dpi_changed(const wxRect& suggested_rect) +{ + const int& em = em_unit(); + + msw_buttons_rescale(this, em, { wxID_OK, wxID_CANCEL }); + + for (Item* item : m_items) + item->update_valid_bmp(); + + //const wxSize& size = wxSize(45 * em, 35 * em); + SetMinSize(/*size*/wxSize(100, 50)); + + Fit(); + Refresh(); +} + +void SavePresetDialog::update_physical_printers(const std::string& preset_name) +{ + if (m_action == UndefAction) + return; + + PhysicalPrinterCollection& physical_printers = wxGetApp().preset_bundle->physical_printers; + if (!physical_printers.has_selection()) + return; + + std::string printer_preset_name = physical_printers.get_selected_printer_preset_name(); + + if (m_action == Switch) + // unselect physical printer, if it was selected + physical_printers.unselect_printer(); + else + { + PhysicalPrinter printer = physical_printers.get_selected_printer(); + + if (m_action == ChangePreset) + printer.delete_preset(printer_preset_name); + + if (printer.add_preset(preset_name)) + physical_printers.save_printer(printer); + + physical_printers.select_printer(printer.get_full_name(preset_name)); + } +} + +void SavePresetDialog::accept() +{ + for (Item* item : m_items) { + item->accept(); + if (item->type() == Preset::TYPE_PRINTER) + update_physical_printers(item->preset_name()); + } + + EndModal(wxID_OK); +} + +}} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/SavePresetDialog.hpp b/src/slic3r/GUI/SavePresetDialog.hpp new file mode 100644 index 000000000..61f069c00 --- /dev/null +++ b/src/slic3r/GUI/SavePresetDialog.hpp @@ -0,0 +1,103 @@ +#ifndef slic3r_SavePresetDialog_hpp_ +#define slic3r_SavePresetDialog_hpp_ + +//#include + +#include "libslic3r/Preset.hpp" +#include "wxExtensions.hpp" +#include "GUI_Utils.hpp" + +class wxString; +class wxStaticText; +class wxComboBox; +class wxRadioBox; +class wxStaticBitmap; + +namespace Slic3r { + +namespace GUI { + +class SavePresetDialog : public DPIDialog +{ + enum ActionType + { + ChangePreset, + AddPreset, + Switch, + UndefAction + }; + + struct Item + { + enum ValidationType + { + Valid, + NoValid, + Warning + }; + + Item(Preset::Type type, const std::string& suffix, wxBoxSizer* sizer, SavePresetDialog* parent); + + void update_valid_bmp(); + void accept(); + + bool is_valid() const { return m_valid_type != NoValid; } + Preset::Type type() const { return m_type; } + std::string preset_name() const { return m_preset_name; } + + private: + Preset::Type m_type; + ValidationType m_valid_type; + std::string m_preset_name; + + SavePresetDialog* m_parent {nullptr}; + wxStaticBitmap* m_valid_bmp {nullptr}; + wxComboBox* m_combo {nullptr}; + wxStaticText* m_valid_label {nullptr}; + + PresetCollection* m_presets {nullptr}; + + void update(); + }; + + std::vector m_items; + + wxBoxSizer* m_presets_sizer {nullptr}; + wxStaticText* m_label {nullptr}; + wxRadioBox* m_action_radio_box {nullptr}; + wxBoxSizer* m_radio_sizer {nullptr}; + ActionType m_action {UndefAction}; + + std::string m_ph_printer_name; + std::string m_old_preset_name; + +public: + + SavePresetDialog(Preset::Type type, std::string suffix = ""); + SavePresetDialog(std::vector types, std::string suffix = ""); + ~SavePresetDialog(); + + void AddItem(Preset::Type type, const std::string& suffix); + + std::string get_name(); + std::string get_name(Preset::Type type); + + bool enable_ok_btn() const; + void add_info_for_edit_ph_printer(wxBoxSizer *sizer); + void update_info_for_edit_ph_printer(const std::string &preset_name); + void layout(); + +protected: + void on_dpi_changed(const wxRect& suggested_rect) override; + void on_sys_color_changed() override {} + +private: + void build(std::vector types, std::string suffix = ""); + void update_physical_printers(const std::string& preset_name); + void accept(); +}; + +} // namespace GUI +} // namespace Slic3r + +#endif diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index d5dfd44e7..205e79af9 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -44,6 +44,7 @@ #include "format.hpp" #include "PhysicalPrinterDialog.hpp" #include "UnsavedChangesDialog.hpp" +#include "SavePresetDialog.hpp" #ifdef WIN32 #include @@ -208,9 +209,7 @@ void Tab::create_preset_tab() // TRN "Save current Settings" m_btn_save_preset->SetToolTip(from_u8((boost::format(_utf8(L("Save current %s"))) % m_title).str())); m_btn_delete_preset->SetToolTip(_(L("Delete this preset"))); - m_btn_delete_preset->Disable(); - if (m_btn_edit_ph_printer) - m_btn_edit_ph_printer->Disable(); + m_btn_delete_preset->Hide(); add_scaled_button(panel, &m_question_btn, "question"); m_question_btn->SetToolTip(_(L("Hover the cursor over buttons to find more information \n" @@ -345,11 +344,12 @@ void Tab::create_preset_tab() })); if (m_btn_edit_ph_printer) - m_btn_edit_ph_printer->Bind(wxEVT_BUTTON, ([this](wxCommandEvent e) { - PhysicalPrinterDialog dlg(m_presets_choice->GetString(m_presets_choice->GetSelection())); - if (dlg.ShowModal() == wxID_OK) - update_tab_ui(); - })); + m_btn_edit_ph_printer->Bind(wxEVT_BUTTON, [this](wxCommandEvent e) { + if (m_preset_bundle->physical_printers.has_selection()) + m_presets_choice->edit_physical_printer(); + else + m_presets_choice->add_physical_printer(); + }); // Fill cache for mode bitmaps m_mode_bitmap_cache.reserve(3); @@ -2999,17 +2999,15 @@ void Tab::rebuild_page_tree() void Tab::update_btns_enabling() { - // we can't delete last preset from the physical printer - if (m_type == Preset::TYPE_PRINTER && m_preset_bundle->physical_printers.has_selection()) - m_btn_delete_preset->Enable(m_preset_bundle->physical_printers.get_selected_printer().preset_names.size() > 1); - else { + // we can delete any preset from the physical printer + // and any user preset const Preset& preset = m_presets->get_edited_preset(); - m_btn_delete_preset->Enable(!preset.is_default && !preset.is_system); - } + m_btn_delete_preset->Show(m_type == Preset::TYPE_PRINTER && m_preset_bundle->physical_printers.has_selection() || + !preset.is_default && !preset.is_system); - // we can edit physical printer only if it's selected in the list if (m_btn_edit_ph_printer) - m_btn_edit_ph_printer->Enable(m_preset_bundle->physical_printers.has_selection()); + m_btn_edit_ph_printer->SetToolTip( m_preset_bundle->physical_printers.has_selection() ? + _L("Edit physical printer") : _L("Add physical printer")); } void Tab::update_preset_choice() @@ -3410,7 +3408,7 @@ void Tab::save_preset(std::string name /*= ""*/, bool detach) // Update the selection boxes at the plater. on_presets_changed(); // If current profile is saved, "delete preset" button have to be enabled - m_btn_delete_preset->Enable(true); + m_btn_delete_preset->Show(); if (m_type == Preset::TYPE_PRINTER) static_cast(this)->m_initial_extruders_count = static_cast(this)->m_extruders_count; @@ -3465,8 +3463,16 @@ void Tab::delete_preset() PhysicalPrinterCollection& physical_printers = m_preset_bundle->physical_printers; wxString msg; if (m_presets_choice->is_selected_physical_printer()) - msg = from_u8((boost::format(_u8L("Are you sure you want to delete \"%1%\" preset from the physical printer \"%2%\"?")) - % current_preset.name % physical_printers.get_selected_printer_name()).str()); + { + PhysicalPrinter& printer = physical_printers.get_selected_printer(); + if (printer.preset_names.size() == 1) { + if (m_presets_choice->del_physical_printer(_L("It's a last preset for this physical printer."))) + Layout(); + return; + } + + msg = format_wxstr(_L("Are you sure you want to delete \"%1%\" preset from the physical printer \"%2%\"?"), current_preset.name, printer.name); + } else { if (m_type == Preset::TYPE_PRINTER && !physical_printers.empty()) @@ -3507,11 +3513,6 @@ void Tab::delete_preset() if (m_presets_choice->is_selected_physical_printer()) { PhysicalPrinter& printer = physical_printers.get_selected_printer(); - if (printer.preset_names.size() == 1) { - wxMessageDialog dialog(nullptr, _L("It's a last for this physical printer. We can't delete it"), _L("Information"), wxICON_INFORMATION | wxOK); - dialog.ShowModal(); - return; - } // just delete this preset from the current physical printer printer.delete_preset(m_presets->get_edited_preset().name); // select first from the possible presets for this printer diff --git a/src/slic3r/GUI/UnsavedChangesDialog.cpp b/src/slic3r/GUI/UnsavedChangesDialog.cpp index 80cc0f715..02c61b416 100644 --- a/src/slic3r/GUI/UnsavedChangesDialog.cpp +++ b/src/slic3r/GUI/UnsavedChangesDialog.cpp @@ -14,7 +14,7 @@ #include "Tab.hpp" #include "ExtraRenderers.hpp" #include "wxExtensions.hpp" -#include "PresetComboBoxes.hpp" +#include "SavePresetDialog.hpp" #include "MainFrame.hpp" //#define FTS_FUZZY_MATCH_IMPLEMENTATION @@ -597,7 +597,7 @@ void UnsavedChangesDialog::build(Preset::Type type, PresetCollection* dependent_ #endif wxDataViewColumn* column = new wxDataViewColumn(label, rd, model_column, width, wxALIGN_TOP, wxDATAVIEW_COL_RESIZABLE | wxDATAVIEW_CELL_INERT); #else - wxDataViewColumn* column = new wxDataViewColumn(label, new BitmapTextRenderer(true), model_column, width, wxALIGN_TOP, wxDATAVIEW_COL_RESIZABLE); + wxDataViewColumn* column = new wxDataViewColumn(label, new BitmapTextRenderer(true, wxDATAVIEW_CELL_INERT), model_column, width, wxALIGN_TOP, wxDATAVIEW_COL_RESIZABLE); #endif //__linux__ m_tree->AppendColumn(column); if (set_expander) @@ -727,8 +727,6 @@ void UnsavedChangesDialog::context_menu(wxDataViewEvent& event) void UnsavedChangesDialog::show_info_line(Action action, std::string preset_name) { - if (m_motion_action == action) - return; if (action == Action::Undef && !m_has_long_strings) m_info_line->Hide(); else { @@ -752,8 +750,6 @@ void UnsavedChangesDialog::show_info_line(Action action, std::string preset_name m_info_line->Show(); } - m_motion_action = action; - Layout(); Refresh(); } @@ -1013,7 +1009,7 @@ void UnsavedChangesDialog::update(Preset::Type type, PresetCollection* dependent action_msg = format_wxstr(_L("Preset \"%1%\" has the following unsaved changes:"), presets->get_edited_preset().name); } else { - action_msg = format_wxstr(Preset::TYPE_PRINTER ? + action_msg = format_wxstr(type == Preset::TYPE_PRINTER ? _L("Preset \"%1%\" is not compatible with the new printer profile and it has the following unsaved changes:") : _L("Preset \"%1%\" is not compatible with the new print profile and it has the following unsaved changes:"), presets->get_edited_preset().name); diff --git a/src/slic3r/GUI/UnsavedChangesDialog.hpp b/src/slic3r/GUI/UnsavedChangesDialog.hpp index 836f24984..c799eba7e 100644 --- a/src/slic3r/GUI/UnsavedChangesDialog.hpp +++ b/src/slic3r/GUI/UnsavedChangesDialog.hpp @@ -210,9 +210,6 @@ class UnsavedChangesDialog : public DPIDialog // selected action after Dialog closing Action m_exit_action {Action::Undef}; - // Action during mouse motion - Action m_motion_action {Action::Undef}; - struct ItemData { std::string opt_key; diff --git a/src/slic3r/GUI/UpdateDialogs.cpp b/src/slic3r/GUI/UpdateDialogs.cpp index 14c9d43a9..1c18872f7 100644 --- a/src/slic3r/GUI/UpdateDialogs.cpp +++ b/src/slic3r/GUI/UpdateDialogs.cpp @@ -25,7 +25,7 @@ namespace Slic3r { namespace GUI { -static const char* URL_CHANGELOG = "http://files.prusa3d.com/?latest=slicer-stable&lng=%1%"; +static const char* URL_CHANGELOG = "https://files.prusa3d.com/?latest=slicer-stable&lng=%1%"; static const char* URL_DOWNLOAD = "https://www.prusa3d.com/downloads&lng=%1%"; static const char* URL_DEV = "https://github.com/supermerill/SuperSlicer/releases/tag/version_%1%"; diff --git a/src/slic3r/Utils/Duet.cpp b/src/slic3r/Utils/Duet.cpp index 4536dd217..ba93603a1 100644 --- a/src/slic3r/Utils/Duet.cpp +++ b/src/slic3r/Utils/Duet.cpp @@ -36,12 +36,10 @@ const char* Duet::get_name() const { return "Duet"; } bool Duet::test(wxString &msg) const { - bool connected = connect(msg); - if (connected) { - disconnect(); - } + auto connectionType = connect(msg); + disconnect(connectionType); - return connected; + return connectionType != ConnectionType::error; } wxString Duet::get_test_ok_msg () const @@ -59,33 +57,39 @@ wxString Duet::get_test_failed_msg (wxString &msg) const bool Duet::upload(PrintHostUpload upload_data, ProgressFn prorgess_fn, ErrorFn error_fn) const { wxString connect_msg; - if (!connect(connect_msg)) { + auto connectionType = connect(connect_msg); + if (connectionType == ConnectionType::error) { error_fn(std::move(connect_msg)); return false; } bool res = true; + bool dsf = (connectionType == ConnectionType::dsf); - auto upload_cmd = get_upload_url(upload_data.upload_path.string()); + auto upload_cmd = get_upload_url(upload_data.upload_path.string(), connectionType); BOOST_LOG_TRIVIAL(info) << boost::format("Duet: Uploading file %1%, filepath: %2%, print: %3%, command: %4%") % upload_data.source_path % upload_data.upload_path % upload_data.start_print % upload_cmd; - auto http = Http::post(std::move(upload_cmd)); - http.set_post_body(upload_data.source_path) - .on_complete([&](std::string body, unsigned status) { + auto http = (dsf ? Http::put(std::move(upload_cmd)) : Http::post(std::move(upload_cmd))); + if (dsf) { + http.set_put_body(upload_data.source_path); + } else { + http.set_post_body(upload_data.source_path); + } + http.on_complete([&](std::string body, unsigned status) { BOOST_LOG_TRIVIAL(debug) << boost::format("Duet: File uploaded: HTTP %1%: %2%") % status % body; - int err_code = get_err_code_from_body(body); + int err_code = dsf ? (status == 201 ? 0 : 1) : get_err_code_from_body(body); if (err_code != 0) { BOOST_LOG_TRIVIAL(error) << boost::format("Duet: Request completed but error code was received: %1%") % err_code; error_fn(format_error(body, L("Unknown error occured"), 0)); res = false; } else if (upload_data.start_print) { wxString errormsg; - res = start_print(errormsg, upload_data.upload_path.string()); + res = start_print(errormsg, upload_data.upload_path.string(), connectionType); if (! res) { error_fn(std::move(errormsg)); } @@ -106,20 +110,28 @@ bool Duet::upload(PrintHostUpload upload_data, ProgressFn prorgess_fn, ErrorFn e }) .perform_sync(); - disconnect(); + disconnect(connectionType); return res; } -bool Duet::connect(wxString &msg) const +Duet::ConnectionType Duet::connect(wxString &msg) const { - bool res = false; - auto url = get_connect_url(); + auto res = ConnectionType::error; + auto url = get_connect_url(false); auto http = Http::get(std::move(url)); http.on_error([&](std::string body, std::string error, unsigned status) { - BOOST_LOG_TRIVIAL(error) << boost::format("Duet: Error connecting: %1%, HTTP %2%, body: `%3%`") % error % status % body; - msg = format_error(body, error, status); + auto dsfUrl = get_connect_url(true); + auto dsfHttp = Http::get(std::move(dsfUrl)); + dsfHttp.on_error([&](std::string body, std::string error, unsigned status) { + BOOST_LOG_TRIVIAL(error) << boost::format("Duet: Error connecting: %1%, HTTP %2%, body: `%3%`") % error % status % body; + msg = format_error(body, error, status); + }) + .on_complete([&](std::string body, unsigned) { + res = ConnectionType::dsf; + }) + .perform_sync(); }) .on_complete([&](std::string body, unsigned) { BOOST_LOG_TRIVIAL(debug) << boost::format("Duet: Got: %1%") % body; @@ -127,7 +139,7 @@ bool Duet::connect(wxString &msg) const int err_code = get_err_code_from_body(body); switch (err_code) { case 0: - res = true; + res = ConnectionType::rrf; break; case 1: msg = format_error(body, L("Wrong password"), 0); @@ -146,8 +158,12 @@ bool Duet::connect(wxString &msg) const return res; } -void Duet::disconnect() const +void Duet::disconnect(ConnectionType connectionType) const { + // we don't need to disconnect from DSF or if it failed anyway + if (connectionType != ConnectionType::rrf) { + return; + } auto url = (boost::format("%1%rr_disconnect") % get_base_url()).str(); @@ -159,20 +175,33 @@ void Duet::disconnect() const .perform_sync(); } -std::string Duet::get_upload_url(const std::string &filename) const +std::string Duet::get_upload_url(const std::string &filename, ConnectionType connectionType) const { - return (boost::format("%1%rr_upload?name=0:/gcodes/%2%&%3%") - % get_base_url() - % Http::url_encode(filename) - % timestamp_str()).str(); + assert(connectionType != ConnectionType::error); + + if (connectionType == ConnectionType::dsf) { + return (boost::format("%1%machine/file/gcodes/%2%") + % get_base_url() + % Http::url_encode(filename)).str(); + } else { + return (boost::format("%1%rr_upload?name=0:/gcodes/%2%&%3%") + % get_base_url() + % Http::url_encode(filename) + % timestamp_str()).str(); + } } -std::string Duet::get_connect_url() const +std::string Duet::get_connect_url(const bool dsfUrl) const { - return (boost::format("%1%rr_connect?password=%2%&%3%") - % get_base_url() - % (password.empty() ? "reprap" : password) - % timestamp_str()).str(); + if (dsfUrl) { + return (boost::format("%1%machine/status") + % get_base_url()).str(); + } else { + return (boost::format("%1%rr_connect?password=%2%&%3%") + % get_base_url() + % (password.empty() ? "reprap" : password) + % timestamp_str()).str(); + } } std::string Duet::get_base_url() const @@ -201,15 +230,27 @@ std::string Duet::timestamp_str() const return std::string(buffer); } -bool Duet::start_print(wxString &msg, const std::string &filename) const +bool Duet::start_print(wxString &msg, const std::string &filename, ConnectionType connectionType) const { - bool res = false; + assert(connectionType != ConnectionType::error); - auto url = (boost::format("%1%rr_gcode?gcode=M32%%20\"%2%\"") + bool res = false; + bool dsf = (connectionType == ConnectionType::dsf); + + auto url = dsf + ? (boost::format("%1%machine/code") + % get_base_url()).str() + : (boost::format("%1%rr_gcode?gcode=M32%%20\"0:/gcodes/%2%\"") % get_base_url() % Http::url_encode(filename)).str(); - auto http = Http::get(std::move(url)); + auto http = (dsf ? Http::post(std::move(url)) : Http::get(std::move(url))); + if (dsf) { + http.set_post_body( + (boost::format("M32 \"0:/gcodes/%1%\"") + % filename).str() + ); + } http.on_error([&](std::string body, std::string error, unsigned status) { BOOST_LOG_TRIVIAL(error) << boost::format("Duet: Error starting print: %1%, HTTP %2%, body: `%3%`") % error % status % body; msg = format_error(body, error, status); diff --git a/src/slic3r/Utils/Duet.hpp b/src/slic3r/Utils/Duet.hpp index 702efbddb..7fdd8ea10 100644 --- a/src/slic3r/Utils/Duet.hpp +++ b/src/slic3r/Utils/Duet.hpp @@ -14,7 +14,7 @@ class Http; class Duet : public PrintHost { public: - Duet(DynamicPrintConfig *config); + explicit Duet(DynamicPrintConfig *config); ~Duet() override = default; const char* get_name() const override; @@ -29,16 +29,17 @@ public: std::string get_host() const override { return host; } private: + enum class ConnectionType { rrf, dsf, error }; std::string host; std::string password; - std::string get_upload_url(const std::string &filename) const; - std::string get_connect_url() const; + std::string get_upload_url(const std::string &filename, ConnectionType connectionType) const; + std::string get_connect_url(const bool dsfUrl) const; std::string get_base_url() const; std::string timestamp_str() const; - bool connect(wxString &msg) const; - void disconnect() const; - bool start_print(wxString &msg, const std::string &filename) const; + ConnectionType connect(wxString &msg) const; + void disconnect(ConnectionType connectionType) const; + bool start_print(wxString &msg, const std::string &filename, ConnectionType connectionType) const; int get_err_code_from_body(const std::string &body) const; }; diff --git a/src/slic3r/Utils/Http.cpp b/src/slic3r/Utils/Http.cpp index 8c79a478a..31b23defd 100644 --- a/src/slic3r/Utils/Http.cpp +++ b/src/slic3r/Utils/Http.cpp @@ -35,11 +35,11 @@ struct CurlGlobalInit { static std::unique_ptr instance; std::string message; - + CurlGlobalInit() { #ifdef OPENSSL_CERT_OVERRIDE // defined if SLIC3R_STATIC=ON - + // Look for a set of distro specific directories. Don't change the // order: https://bugzilla.redhat.com/show_bug.cgi?id=1053882 static const char * CA_BUNDLES[] = { @@ -48,17 +48,17 @@ struct CurlGlobalInit "/usr/share/ssl/certs/ca-bundle.crt", "/usr/local/share/certs/ca-root-nss.crt", // FreeBSD "/etc/ssl/cert.pem", - "/etc/ssl/ca-bundle.pem" // OpenSUSE Tumbleweed + "/etc/ssl/ca-bundle.pem" // OpenSUSE Tumbleweed }; - + namespace fs = boost::filesystem; // Env var name for the OpenSSL CA bundle (SSL_CERT_FILE nomally) const char *const SSL_CA_FILE = X509_get_default_cert_file_env(); const char * ssl_cafile = ::getenv(SSL_CA_FILE); - + if (!ssl_cafile) ssl_cafile = X509_get_default_cert_file(); - + int replace = true; if (!ssl_cafile || !fs::exists(fs::path(ssl_cafile))) { const char * bundle = nullptr; @@ -86,15 +86,15 @@ struct CurlGlobalInit } #endif // OPENSSL_CERT_OVERRIDE - + if (CURLcode ec = ::curl_global_init(CURL_GLOBAL_DEFAULT)) { message += _u8L("CURL init has failed. PrusaSlicer will be unable to establish " "network connections. See logs for additional details."); - + BOOST_LOG_TRIVIAL(error) << ::curl_easy_strerror(ec); } } - + ~CurlGlobalInit() { ::curl_global_cleanup(); } }; @@ -120,6 +120,7 @@ struct Http::priv std::string error_buffer; // Used for CURLOPT_ERRORBUFFER size_t limit; bool cancel; + std::unique_ptr putFile; std::thread io_thread; Http::CompleteFn completefn; @@ -138,6 +139,8 @@ struct Http::priv void set_timeout_connect(long timeout); void form_add_file(const char *name, const fs::path &path, const char* filename); void set_post_body(const fs::path &path); + void set_post_body(const std::string &body); + void set_put_body(const fs::path &path); std::string curl_error(CURLcode curlcode); std::string body_size_error(); @@ -154,7 +157,7 @@ Http::priv::priv(const std::string &url) , cancel(false) { Http::tls_global_init(); - + if (curl == nullptr) { throw Slic3r::RuntimeError(std::string("Could not construct Curl object")); } @@ -277,11 +280,28 @@ void Http::priv::form_add_file(const char *name, const fs::path &path, const cha } } +//FIXME may throw! Is the caller aware of it? void Http::priv::set_post_body(const fs::path &path) { std::ifstream file(path.string()); std::string file_content { std::istreambuf_iterator(file), std::istreambuf_iterator() }; - postfields = file_content; + postfields = std::move(file_content); +} + +void Http::priv::set_post_body(const std::string &body) +{ + postfields = body; +} + +void Http::priv::set_put_body(const fs::path &path) +{ + boost::system::error_code ec; + boost::uintmax_t filesize = file_size(path, ec); + if (!ec) { + putFile = std::make_unique(path); + ::curl_easy_setopt(curl, CURLOPT_READDATA, (void *) (putFile.get())); + ::curl_easy_setopt(curl, CURLOPT_INFILESIZE, filesize); + } } std::string Http::priv::curl_error(CURLcode curlcode) @@ -335,6 +355,8 @@ void Http::priv::http_perform() CURLcode res = ::curl_easy_perform(curl); + putFile.reset(); + if (res != CURLE_OK) { if (res == CURLE_ABORTED_BY_CALLBACK) { if (cancel) { @@ -373,6 +395,7 @@ Http::Http(Http &&other) : p(std::move(other.p)) {} Http::~Http() { + assert(! p || ! p->putFile); if (p && p->io_thread.joinable()) { p->io_thread.detach(); } @@ -465,6 +488,18 @@ Http& Http::set_post_body(const fs::path &path) return *this; } +Http& Http::set_post_body(const std::string &body) +{ + if (p) { p->set_post_body(body); } + return *this; +} + +Http& Http::set_put_body(const fs::path &path) +{ + if (p) { p->set_put_body(path);} + return *this; +} + Http& Http::on_complete(CompleteFn fn) { if (p) { p->completefn = std::move(fn); } @@ -519,6 +554,13 @@ Http Http::post(std::string url) return http; } +Http Http::put(std::string url) +{ + Http http{std::move(url)}; + curl_easy_setopt(http.p->curl, CURLOPT_UPLOAD, 1L); + return http; +} + bool Http::ca_file_supported() { ::CURL *curl = ::curl_easy_init(); @@ -531,7 +573,7 @@ std::string Http::tls_global_init() { if (!CurlGlobalInit::instance) CurlGlobalInit::instance = std::make_unique(); - + return CurlGlobalInit::instance->message; } @@ -542,7 +584,7 @@ std::string Http::tls_system_cert_store() #ifdef OPENSSL_CERT_OVERRIDE ret = ::getenv(X509_get_default_cert_file_env()); #endif - + return ret; } diff --git a/src/slic3r/Utils/Http.hpp b/src/slic3r/Utils/Http.hpp index ae3660fbf..b629fb328 100644 --- a/src/slic3r/Utils/Http.hpp +++ b/src/slic3r/Utils/Http.hpp @@ -49,6 +49,7 @@ public: // for a GET and a POST request respectively. static Http get(std::string url); static Http post(std::string url); + static Http put(std::string url); ~Http(); Http(const Http &) = delete; @@ -82,6 +83,16 @@ public: // This can be used for hosts which do not support multipart requests. Http& set_post_body(const boost::filesystem::path &path); + // Set the POST request body. + // The data is used verbatim, it is not additionally encoded in any way. + // This can be used for hosts which do not support multipart requests. + Http& set_post_body(const std::string &body); + + // Set the file contents as a PUT request body. + // The data is used verbatim, it is not additionally encoded in any way. + // This can be used for hosts which do not support multipart requests. + Http& set_put_body(const boost::filesystem::path &path); + // Callback called on HTTP request complete Http& on_complete(CompleteFn fn); // Callback called on an error occuring at any stage of the requests: Url parsing, DNS lookup, @@ -102,7 +113,7 @@ public: // Tells whether current backend supports seting up a CA file using ca_file() static bool ca_file_supported(); - + // Return empty string on success or error message on fail. static std::string tls_global_init(); static std::string tls_system_cert_store(); diff --git a/src/slic3r/Utils/PresetUpdater.cpp b/src/slic3r/Utils/PresetUpdater.cpp index 3faaa704d..d2880c4f8 100644 --- a/src/slic3r/Utils/PresetUpdater.cpp +++ b/src/slic3r/Utils/PresetUpdater.cpp @@ -309,7 +309,8 @@ void PresetUpdater::priv::sync_config(const VendorMap vendors) const std::string idx_path = (cache_path / (vendor.id + ".idx")).string(); const std::string idx_path_temp = idx_path + "-update"; //check if idx_url is leading to a safe site - //if (! boost::starts_with(idx_url, "http://files.my_company.com/wp-content/uploads/repository/")) + //if (! boost::starts_with(idx_url, "http://files.my_company.com/wp-content/uploads/repository/") + // && ! boost::starts_with(idx_url, "https://files.my_company.com/wp-content/uploads/repository/")) //{ // BOOST_LOG_TRIVIAL(warning) << "unsafe url path for vendor \"" << vendor.name << "\" rejected: " << idx_url; // continue; diff --git a/src/slic3r/Utils/Thread.hpp b/src/slic3r/Utils/Thread.hpp deleted file mode 100644 index 194971c9e..000000000 --- a/src/slic3r/Utils/Thread.hpp +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef GUI_THREAD_HPP -#define GUI_THREAD_HPP - -#include -#include - -namespace Slic3r { - -template -inline boost::thread create_thread(boost::thread::attributes &attrs, Fn &&fn) -{ - // Duplicating the stack allocation size of Thread Building Block worker - // threads of the thread pool: allocate 4MB on a 64bit system, allocate 2MB - // on a 32bit system by default. - - attrs.set_stack_size((sizeof(void*) == 4) ? (2048 * 1024) : (4096 * 1024)); - return boost::thread{attrs, std::forward(fn)}; -} - -template inline boost::thread create_thread(Fn &&fn) -{ - boost::thread::attributes attrs; - return create_thread(attrs, std::forward(fn)); -} - -} - -#endif // GUI_THREAD_HPP