diff --git a/CMakeLists.txt b/CMakeLists.txt index 9c69052c85..8d1d93c5cb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -328,13 +328,21 @@ find_package(TBB REQUIRED) # add_definitions(-DTBB_USE_CAPTURED_EXCEPTION=0) find_package(CURL REQUIRED) -include_directories(${CURL_INCLUDE_DIRS}) + +add_library(libcurl INTERFACE) +target_link_libraries(libcurl INTERFACE CURL::libcurl) + +if (NOT WIN32) + # Required by libcurl + find_package(ZLIB REQUIRED) + target_link_libraries(libcurl INTERFACE ZLIB::ZLIB) +endif() if (SLIC3R_STATIC) if (NOT APPLE) # libcurl is always linked dynamically to the system libcurl on OSX. # On other systems, libcurl is linked statically if SLIC3R_STATIC is set. - add_definitions(-DCURL_STATICLIB) + target_compile_definitions(libcurl INTERFACE CURL_STATICLIB) endif() if (CMAKE_SYSTEM_NAME STREQUAL "Linux") # As of now, our build system produces a statically linked libcurl, @@ -342,7 +350,8 @@ if (SLIC3R_STATIC) find_package(OpenSSL REQUIRED) message("OpenSSL include dir: ${OPENSSL_INCLUDE_DIR}") message("OpenSSL libraries: ${OPENSSL_LIBRARIES}") - include_directories(${OPENSSL_INCLUDE_DIR}) + target_include_directories(libcurl INTERFACE ${OPENSSL_INCLUDE_DIR}) + target_link_libraries(libcurl INTERFACE ${OPENSSL_LIBRARIES}) endif() endif() diff --git a/resources/icons/lock_open_sys.svg b/resources/icons/lock_open_sys.svg new file mode 100644 index 0000000000..e0aef4ad2a --- /dev/null +++ b/resources/icons/lock_open_sys.svg @@ -0,0 +1,11 @@ + + + + + + + + diff --git a/resources/icons/white/lock_open_sys.svg b/resources/icons/white/lock_open_sys.svg new file mode 100644 index 0000000000..c1aa64aec2 --- /dev/null +++ b/resources/icons/white/lock_open_sys.svg @@ -0,0 +1,11 @@ + + + + + + + + diff --git a/resources/localization/PrusaSlicer.pot b/resources/localization/PrusaSlicer.pot index 41c5577132..e44bf69b55 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-02-27 14:12+0100\n" +"POT-Creation-Date: 2020-03-05 13:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,46 +18,46 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" -#: src/slic3r/GUI/AboutDialog.cpp:39 src/slic3r/GUI/AboutDialog.cpp:291 +#: src/slic3r/GUI/AboutDialog.cpp:41 src/slic3r/GUI/AboutDialog.cpp:294 msgid "Portions copyright" msgstr "" -#: src/slic3r/GUI/AboutDialog.cpp:127 src/slic3r/GUI/AboutDialog.cpp:256 +#: src/slic3r/GUI/AboutDialog.cpp:129 src/slic3r/GUI/AboutDialog.cpp:258 msgid "Copyright" msgstr "" #. TRN "Slic3r _is licensed under the_ License" -#: src/slic3r/GUI/AboutDialog.cpp:129 +#: src/slic3r/GUI/AboutDialog.cpp:131 msgid "" "License agreements of all following programs (libraries) are part of " "application license agreement" msgstr "" -#: src/slic3r/GUI/AboutDialog.cpp:199 +#: src/slic3r/GUI/AboutDialog.cpp:201 #, possible-c-format msgid "About %s" msgstr "" -#: src/slic3r/GUI/AboutDialog.cpp:231 src/slic3r/GUI/MainFrame.cpp:64 +#: src/slic3r/GUI/AboutDialog.cpp:233 src/slic3r/GUI/MainFrame.cpp:64 msgid "Version" msgstr "" #. TRN "Slic3r _is licensed under the_ License" -#: src/slic3r/GUI/AboutDialog.cpp:258 +#: src/slic3r/GUI/AboutDialog.cpp:260 msgid "is licensed under the" msgstr "" -#: src/slic3r/GUI/AboutDialog.cpp:259 +#: src/slic3r/GUI/AboutDialog.cpp:261 msgid "GNU Affero General Public License, version 3" msgstr "" -#: src/slic3r/GUI/AboutDialog.cpp:260 +#: src/slic3r/GUI/AboutDialog.cpp:262 msgid "" "PrusaSlicer is based on Slic3r by Alessandro Ranellucci and the RepRap " "community." msgstr "" -#: src/slic3r/GUI/AboutDialog.cpp:261 +#: src/slic3r/GUI/AboutDialog.cpp:263 msgid "" "Contributions by Henrik Brix Andersen, Nicolas Dandrimont, Mark Hindess, " "Petr Ledvina, Joseph Lenox, Y. Sapir, Mike Sheldrake, Vojtech Bubnik and " @@ -71,56 +71,56 @@ msgid "" "not be affected." msgstr "" -#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:109 +#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:110 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:112 +#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:113 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:115 +#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:116 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:118 +#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:119 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:121 +#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:122 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:128 -#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:478 +#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:129 +#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:479 msgid "Running post-processing scripts" msgstr "" -#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:130 +#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:131 msgid "G-code file exported to %1%" msgstr "" -#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:134 -#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:184 +#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:135 +#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:185 msgid "Slicing complete" msgstr "" -#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:180 +#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:181 msgid "Masked SLA file exported to %1%" msgstr "" -#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:222 +#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:223 #, possible-c-format msgid "" "%s has encountered an error. It was likely caused by running out of memory. " @@ -128,15 +128,15 @@ msgid "" "and we would be glad if you reported it." msgstr "" -#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:480 +#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:481 msgid "Copying of the temporary G-code to the output G-code failed" msgstr "" -#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:505 +#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:506 msgid "Scheduling upload to `%1%`. See Window -> Print Host Upload Queue" msgstr "" -#: src/slic3r/GUI/BedShapeDialog.cpp:66 src/slic3r/GUI/GUI_ObjectList.cpp:2059 +#: src/slic3r/GUI/BedShapeDialog.cpp:66 src/slic3r/GUI/GUI_ObjectList.cpp:2060 msgid "Shape" msgstr "" @@ -146,7 +146,7 @@ msgstr "" #: src/slic3r/GUI/BedShapeDialog.cpp:77 #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:232 src/slic3r/GUI/Plater.cpp:160 -#: src/slic3r/GUI/Tab.cpp:2324 +#: src/slic3r/GUI/Tab.cpp:2326 msgid "Size" msgstr "" @@ -196,15 +196,15 @@ msgstr "" #: src/libslic3r/PrintConfig.cpp:2450 src/libslic3r/PrintConfig.cpp:2484 #: src/libslic3r/PrintConfig.cpp:2623 src/libslic3r/PrintConfig.cpp:2632 #: src/libslic3r/PrintConfig.cpp:2641 src/libslic3r/PrintConfig.cpp:2651 -#: src/libslic3r/PrintConfig.cpp:2695 src/libslic3r/PrintConfig.cpp:2705 -#: src/libslic3r/PrintConfig.cpp:2717 src/libslic3r/PrintConfig.cpp:2737 -#: src/libslic3r/PrintConfig.cpp:2747 src/libslic3r/PrintConfig.cpp:2757 -#: src/libslic3r/PrintConfig.cpp:2775 src/libslic3r/PrintConfig.cpp:2790 -#: src/libslic3r/PrintConfig.cpp:2804 src/libslic3r/PrintConfig.cpp:2815 -#: src/libslic3r/PrintConfig.cpp:2828 src/libslic3r/PrintConfig.cpp:2873 -#: src/libslic3r/PrintConfig.cpp:2883 src/libslic3r/PrintConfig.cpp:2892 -#: src/libslic3r/PrintConfig.cpp:2902 src/libslic3r/PrintConfig.cpp:2918 -#: src/libslic3r/PrintConfig.cpp:2942 +#: src/libslic3r/PrintConfig.cpp:2705 src/libslic3r/PrintConfig.cpp:2715 +#: src/libslic3r/PrintConfig.cpp:2727 src/libslic3r/PrintConfig.cpp:2747 +#: src/libslic3r/PrintConfig.cpp:2757 src/libslic3r/PrintConfig.cpp:2767 +#: src/libslic3r/PrintConfig.cpp:2785 src/libslic3r/PrintConfig.cpp:2800 +#: src/libslic3r/PrintConfig.cpp:2814 src/libslic3r/PrintConfig.cpp:2825 +#: src/libslic3r/PrintConfig.cpp:2838 src/libslic3r/PrintConfig.cpp:2883 +#: src/libslic3r/PrintConfig.cpp:2893 src/libslic3r/PrintConfig.cpp:2902 +#: src/libslic3r/PrintConfig.cpp:2912 src/libslic3r/PrintConfig.cpp:2928 +#: src/libslic3r/PrintConfig.cpp:2952 msgid "mm" msgstr "" @@ -240,7 +240,7 @@ msgid "Load..." msgstr "" #: src/slic3r/GUI/BedShapeDialog.cpp:190 src/slic3r/GUI/BedShapeDialog.cpp:269 -#: src/slic3r/GUI/Tab.cpp:3124 +#: src/slic3r/GUI/Tab.cpp:3126 msgid "Remove" msgstr "" @@ -336,7 +336,7 @@ msgid "" msgstr "" #: src/slic3r/GUI/ConfigManipulation.cpp:49 -#: src/slic3r/GUI/GUI_ObjectLayers.cpp:27 src/slic3r/GUI/Tab.cpp:1049 +#: src/slic3r/GUI/GUI_ObjectLayers.cpp:27 src/slic3r/GUI/Tab.cpp:1048 #: src/libslic3r/PrintConfig.cpp:71 msgid "Layer height" msgstr "" @@ -353,7 +353,7 @@ msgid "First layer height" msgstr "" #: src/slic3r/GUI/ConfigManipulation.cpp:81 -#, possible-c-format +#, no-c-format msgid "" "The Spiral Vase mode requires:\n" "- one perimeter\n" @@ -424,8 +424,8 @@ 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:614 src/slic3r/GUI/Plater.cpp:527 -#: src/slic3r/GUI/Tab.cpp:1091 src/slic3r/GUI/Tab.cpp:1092 +#: src/slic3r/GUI/GUI_ObjectList.cpp:615 src/slic3r/GUI/Plater.cpp:527 +#: src/slic3r/GUI/Tab.cpp:1090 src/slic3r/GUI/Tab.cpp:1091 #: 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 @@ -480,7 +480,7 @@ msgstr "" msgid "PrusaSlicer version" msgstr "" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:51 src/slic3r/GUI/Preset.cpp:1521 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:51 src/slic3r/GUI/Preset.cpp:1533 msgid "print" msgstr "" @@ -488,11 +488,11 @@ msgstr "" msgid "filaments" msgstr "" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:53 src/slic3r/GUI/Preset.cpp:1525 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:53 src/slic3r/GUI/Preset.cpp:1537 msgid "printer" msgstr "" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:57 src/slic3r/GUI/Tab.cpp:971 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:57 src/slic3r/GUI/Tab.cpp:970 msgid "vendor" msgstr "" @@ -546,7 +546,7 @@ msgid "Standard" msgstr "" #: src/slic3r/GUI/ConfigWizard.cpp:290 src/slic3r/GUI/ConfigWizard.cpp:573 -#: src/slic3r/GUI/Tab.cpp:3174 +#: src/slic3r/GUI/Tab.cpp:3176 msgid "All" msgstr "" @@ -662,9 +662,9 @@ msgid "" "an update is applied." msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:798 src/slic3r/GUI/GUI_ObjectList.cpp:1664 -#: src/slic3r/GUI/GUI_ObjectList.cpp:3956 src/slic3r/GUI/Plater.cpp:3225 -#: src/slic3r/GUI/Plater.cpp:3934 src/slic3r/GUI/Plater.cpp:3963 +#: src/slic3r/GUI/ConfigWizard.cpp:798 src/slic3r/GUI/GUI_ObjectList.cpp:1665 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3957 src/slic3r/GUI/Plater.cpp:3227 +#: src/slic3r/GUI/Plater.cpp:3936 src/slic3r/GUI/Plater.cpp:3965 msgid "Reload from disk" msgstr "" @@ -719,7 +719,7 @@ msgstr "" msgid "Firmware Type" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:891 src/slic3r/GUI/Tab.cpp:1947 +#: src/slic3r/GUI/ConfigWizard.cpp:891 src/slic3r/GUI/Tab.cpp:1949 msgid "Firmware" msgstr "" @@ -822,7 +822,7 @@ msgid "SLA Technology Printers" msgstr "" #: src/slic3r/GUI/ConfigWizard.cpp:1751 src/slic3r/GUI/DoubleSlider.cpp:1905 -#: src/slic3r/GUI/DoubleSlider.cpp:1926 src/slic3r/GUI/GUI.cpp:245 +#: src/slic3r/GUI/DoubleSlider.cpp:1926 src/slic3r/GUI/GUI.cpp:246 msgid "Notice" msgstr "" @@ -875,7 +875,7 @@ msgstr "" msgid "Filament Profiles Selection" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:2013 src/slic3r/GUI/GUI_ObjectList.cpp:3553 +#: src/slic3r/GUI/ConfigWizard.cpp:2013 src/slic3r/GUI/GUI_ObjectList.cpp:3554 msgid "Type:" msgstr "" @@ -1025,13 +1025,13 @@ msgid "Edit tick mark - Right click" msgstr "" #: src/slic3r/GUI/DoubleSlider.cpp:1134 src/slic3r/GUI/DoubleSlider.cpp:1170 -#: src/slic3r/GUI/GLCanvas3D.cpp:977 src/slic3r/GUI/GUI_ObjectList.cpp:1704 -#: src/slic3r/GUI/Tab.cpp:2320 src/libslic3r/GCode/PreviewData.cpp:445 +#: src/slic3r/GUI/GLCanvas3D.cpp:977 src/slic3r/GUI/GUI_ObjectList.cpp:1705 +#: src/slic3r/GUI/Tab.cpp:2322 src/libslic3r/GCode/PreviewData.cpp:445 #, possible-c-format msgid "Extruder %d" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1135 src/slic3r/GUI/GUI_ObjectList.cpp:1705 +#: src/slic3r/GUI/DoubleSlider.cpp:1135 src/slic3r/GUI/GUI_ObjectList.cpp:1706 msgid "active" msgstr "" @@ -1039,7 +1039,7 @@ msgstr "" msgid "Switch code to Change extruder" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1144 src/slic3r/GUI/GUI_ObjectList.cpp:1671 +#: src/slic3r/GUI/DoubleSlider.cpp:1144 src/slic3r/GUI/GUI_ObjectList.cpp:1672 msgid "Change extruder" msgstr "" @@ -1146,8 +1146,8 @@ msgstr "" #: src/slic3r/GUI/DoubleSlider.cpp:1917 msgid "" "Select YES if you want to delete all saved tool changes, \n" -"\tNO if you want all tool changes switch to color changes, \n" -"\tor CANCEL to leave it unchanged." +"NO if you want all tool changes switch to color changes, \n" +"or CANCEL to leave it unchanged." msgstr "" #: src/slic3r/GUI/DoubleSlider.cpp:1920 @@ -1200,7 +1200,7 @@ msgstr "" msgid "parameter name" msgstr "" -#: src/slic3r/GUI/Field.cpp:150 src/slic3r/GUI/OptionsGroup.cpp:580 +#: src/slic3r/GUI/Field.cpp:150 src/slic3r/GUI/OptionsGroup.cpp:581 msgid "N/A" msgstr "" @@ -1302,8 +1302,8 @@ msgstr "" msgid "Firmware image:" msgstr "" -#: src/slic3r/GUI/FirmwareDialog.cpp:805 src/slic3r/GUI/Tab.cpp:1658 -#: src/slic3r/GUI/Tab.cpp:1721 +#: src/slic3r/GUI/FirmwareDialog.cpp:805 src/slic3r/GUI/Tab.cpp:1657 +#: src/slic3r/GUI/Tab.cpp:1719 msgid "Browse" msgstr "" @@ -1336,7 +1336,7 @@ msgid "Advanced: Output log" msgstr "" #: src/slic3r/GUI/FirmwareDialog.cpp:852 -#: src/slic3r/GUI/Mouse3DController.cpp:364 +#: src/slic3r/GUI/Mouse3DController.cpp:336 #: src/slic3r/GUI/PrintHostDialogs.cpp:161 msgid "Close" msgstr "" @@ -1503,12 +1503,12 @@ msgid "Mirror Object" msgstr "" #: src/slic3r/GUI/GLCanvas3D.cpp:2921 -#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:562 +#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:570 msgid "Gizmo-Move" msgstr "" #: src/slic3r/GUI/GLCanvas3D.cpp:3001 -#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:564 +#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:572 msgid "Gizmo-Rotate" msgstr "" @@ -1542,19 +1542,19 @@ msgstr[1] "" msgid "Add..." msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:4475 src/slic3r/GUI/GUI_ObjectList.cpp:1718 -#: src/slic3r/GUI/Plater.cpp:3931 src/slic3r/GUI/Plater.cpp:3953 -#: src/slic3r/GUI/Tab.cpp:3124 +#: src/slic3r/GUI/GLCanvas3D.cpp:4475 src/slic3r/GUI/GUI_ObjectList.cpp:1719 +#: src/slic3r/GUI/Plater.cpp:3933 src/slic3r/GUI/Plater.cpp:3955 +#: src/slic3r/GUI/Tab.cpp:3126 msgid "Delete" msgstr "" #: src/slic3r/GUI/GLCanvas3D.cpp:4484 src/slic3r/GUI/KBShortcutsDialog.cpp:129 -#: src/slic3r/GUI/Plater.cpp:4669 +#: src/slic3r/GUI/Plater.cpp:4671 msgid "Delete all" msgstr "" #: src/slic3r/GUI/GLCanvas3D.cpp:4493 src/slic3r/GUI/KBShortcutsDialog.cpp:157 -#: src/slic3r/GUI/Plater.cpp:2754 +#: src/slic3r/GUI/Plater.cpp:2756 msgid "Arrange" msgstr "" @@ -1570,12 +1570,12 @@ msgstr "" msgid "Paste" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:4526 src/slic3r/GUI/Plater.cpp:3788 -#: src/slic3r/GUI/Plater.cpp:3800 src/slic3r/GUI/Plater.cpp:3940 +#: src/slic3r/GUI/GLCanvas3D.cpp:4526 src/slic3r/GUI/Plater.cpp:3790 +#: src/slic3r/GUI/Plater.cpp:3802 src/slic3r/GUI/Plater.cpp:3942 msgid "Add instance" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:4537 src/slic3r/GUI/Plater.cpp:3942 +#: src/slic3r/GUI/GLCanvas3D.cpp:4537 src/slic3r/GUI/Plater.cpp:3944 msgid "Remove instance" msgstr "" @@ -1583,12 +1583,12 @@ msgstr "" msgid "Split to objects" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:4560 src/slic3r/GUI/GUI_ObjectList.cpp:1487 +#: src/slic3r/GUI/GLCanvas3D.cpp:4560 src/slic3r/GUI/GUI_ObjectList.cpp:1488 msgid "Split to parts" msgstr "" #: src/slic3r/GUI/GLCanvas3D.cpp:4624 src/slic3r/GUI/KBShortcutsDialog.cpp:130 -#: src/slic3r/GUI/MainFrame.cpp:581 +#: src/slic3r/GUI/MainFrame.cpp:592 msgid "Undo" msgstr "" @@ -1601,7 +1601,7 @@ msgid "Next Undo action: %1%" msgstr "" #: src/slic3r/GUI/GLCanvas3D.cpp:4657 src/slic3r/GUI/KBShortcutsDialog.cpp:131 -#: src/slic3r/GUI/MainFrame.cpp:584 +#: src/slic3r/GUI/MainFrame.cpp:595 msgid "Redo" msgstr "" @@ -1617,29 +1617,29 @@ msgstr "" msgid "Selection-Remove from rectangle" msgstr "" -#: src/slic3r/GUI/GLCanvas3DManager.cpp:284 +#: src/slic3r/GUI/GLCanvas3DManager.cpp:306 #, 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:287 +#: src/slic3r/GUI/GLCanvas3DManager.cpp:309 msgid "You may need to update your graphics card driver." msgstr "" -#: src/slic3r/GUI/GLCanvas3DManager.cpp:290 +#: src/slic3r/GUI/GLCanvas3DManager.cpp:312 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:292 +#: src/slic3r/GUI/GLCanvas3DManager.cpp:314 msgid "Unsupported OpenGL version" msgstr "" #: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:42 -#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:144 src/libslic3r/PrintConfig.cpp:3402 +#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:144 src/libslic3r/PrintConfig.cpp:3412 msgid "Cut" msgstr "" @@ -1663,78 +1663,78 @@ msgstr "" msgid "Place on face" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:41 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:40 msgid "Hollow this object" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:42 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:41 msgid "Preview hollowed and drilled model" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:43 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:42 msgid "Offset" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:44 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:43 msgid "Quality" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:45 -#: src/libslic3r/PrintConfig.cpp:2934 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:44 +#: src/libslic3r/PrintConfig.cpp:2944 msgid "Closing distance" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:46 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:45 msgid "Hole diameter" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:47 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:46 msgid "Hole depth" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:48 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:47 msgid "Remove selected holes" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:49 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:48 msgid "Remove all holes" msgstr "" +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:49 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:57 +msgid "Clipping of view" +msgstr "" + #: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:50 #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:58 -msgid "Clipping of view" -msgstr "" - -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:51 -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:59 msgid "Reset direction" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:52 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:51 msgid "Show supports" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:421 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:423 msgid "Add drainage hole" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:539 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:541 msgid "Delete drainage hole" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:813 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:815 msgid "Hollowing parameter change" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:885 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:887 msgid "Change drainage hole diameter" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:977 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:979 msgid "Hollow and drill" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:1059 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:1061 msgid "Move drainage hole" msgstr "" @@ -1746,7 +1746,7 @@ msgstr "" #: 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:3451 +#: src/libslic3r/PrintConfig.cpp:3461 msgid "Rotate" msgstr "" @@ -1754,194 +1754,194 @@ msgstr "" #: 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:3466 +#: src/libslic3r/PrintConfig.cpp:3476 msgid "Scale" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:48 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:47 msgid "Head diameter" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:49 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:48 msgid "Lock supports under new islands" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:50 -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1371 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:49 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1361 msgid "Remove selected points" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:51 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:50 msgid "Remove all points" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:52 -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1374 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:51 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1364 msgid "Apply changes" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:53 -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1375 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:52 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1365 msgid "Discard changes" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:54 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:53 msgid "Minimal points distance" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:55 -#: src/libslic3r/PrintConfig.cpp:2764 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:54 +#: src/libslic3r/PrintConfig.cpp:2774 msgid "Support points density" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:56 -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1377 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:55 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1367 msgid "Auto-generate points" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:57 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:56 msgid "Manual editing" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:494 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:484 msgid "Add support point" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:631 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:621 msgid "Delete support point" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:820 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:810 msgid "Change point head diameter" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:888 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:878 msgid "Support parameter change" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:996 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:986 msgid "SLA Support Points" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1017 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1007 msgid "SLA gizmo turned on" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1045 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1035 msgid "Do you want to save your manually edited support points?" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1046 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1036 msgid "Save changes?" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1058 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1048 msgid "SLA gizmo turned off" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1097 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1087 msgid "Move support point" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1196 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1186 msgid "Support points edit" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1268 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1258 msgid "Autogeneration will erase all manually edited points." msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1269 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1259 msgid "Are you sure you want to do it?" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1270 src/slic3r/GUI/GUI.cpp:251 -#: src/slic3r/GUI/Tab.cpp:3084 src/slic3r/GUI/WipeTowerDialog.cpp:45 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1260 src/slic3r/GUI/GUI.cpp:258 +#: src/slic3r/GUI/Tab.cpp:3086 src/slic3r/GUI/WipeTowerDialog.cpp:45 #: src/slic3r/GUI/WipeTowerDialog.cpp:366 msgid "Warning" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1273 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1263 msgid "Autogenerate support points" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1334 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1324 msgid "SLA gizmo keyboard shortcuts" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1345 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1335 msgid "Note: some shortcuts work in (non)editing mode only." msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1363 -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1366 -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1367 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1353 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1356 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1357 msgid "Left click" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1363 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1353 msgid "Add point" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1364 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1354 msgid "Right click" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1364 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1354 msgid "Remove point" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1365 -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1368 -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1369 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1355 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1358 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1359 msgid "Drag" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1365 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1355 msgid "Move point" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1366 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1356 msgid "Add point to selection" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1367 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1357 msgid "Remove point from selection" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1368 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1358 msgid "Select by rectangle" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1369 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1359 msgid "Deselect by rectangle" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1370 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1360 msgid "Select all points" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1372 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1362 msgid "Mouse wheel" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1372 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1362 msgid "Move clipping plane" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1373 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1363 msgid "Reset clipping plane" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1376 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1366 msgid "Switch to editing mode" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:489 +#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:497 msgid "Gizmo-Place on Face" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:563 +#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:571 msgid "Gizmo-Scale" msgstr "" @@ -1959,180 +1959,180 @@ msgstr "" msgid "Fatal error" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:442 +#: src/slic3r/GUI/GUI_App.cpp:446 msgid "Changing of an application language" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:450 src/slic3r/GUI/GUI_App.cpp:459 +#: src/slic3r/GUI/GUI_App.cpp:454 src/slic3r/GUI/GUI_App.cpp:463 msgid "Recreating" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:466 +#: src/slic3r/GUI/GUI_App.cpp:470 msgid "Loading of current presets" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:474 +#: src/slic3r/GUI/GUI_App.cpp:478 msgid "Loading of a mode view" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:555 +#: src/slic3r/GUI/GUI_App.cpp:559 msgid "Choose one file (3MF/AMF):" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:567 +#: src/slic3r/GUI/GUI_App.cpp:571 msgid "Choose one or more files (STL/OBJ/AMF/3MF/PRUSA):" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:629 +#: src/slic3r/GUI/GUI_App.cpp:633 msgid "Select the language" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:629 +#: src/slic3r/GUI/GUI_App.cpp:633 msgid "Language" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:797 +#: src/slic3r/GUI/GUI_App.cpp:801 #, possible-c-format msgid "Run %s" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:800 +#: src/slic3r/GUI/GUI_App.cpp:804 msgid "&Configuration Snapshots" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:800 +#: src/slic3r/GUI/GUI_App.cpp:804 msgid "Inspect / activate configuration snapshots" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:801 +#: src/slic3r/GUI/GUI_App.cpp:805 msgid "Take Configuration &Snapshot" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:801 +#: src/slic3r/GUI/GUI_App.cpp:805 msgid "Capture a configuration snapshot" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:802 +#: src/slic3r/GUI/GUI_App.cpp:806 msgid "Check for updates" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:802 +#: src/slic3r/GUI/GUI_App.cpp:806 msgid "Check for configuration updates" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:804 +#: src/slic3r/GUI/GUI_App.cpp:808 msgid "&Preferences" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:810 +#: src/slic3r/GUI/GUI_App.cpp:814 msgid "Application preferences" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:813 src/slic3r/GUI/wxExtensions.cpp:753 +#: src/slic3r/GUI/GUI_App.cpp:817 src/slic3r/GUI/wxExtensions.cpp:756 msgid "Simple" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:813 +#: src/slic3r/GUI/GUI_App.cpp:817 msgid "Simple View Mode" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:814 src/slic3r/GUI/GUI_ObjectList.cpp:104 -#: src/slic3r/GUI/GUI_ObjectList.cpp:622 src/slic3r/GUI/Tab.cpp:1087 -#: src/slic3r/GUI/Tab.cpp:1102 src/slic3r/GUI/Tab.cpp:1201 -#: src/slic3r/GUI/Tab.cpp:1204 src/slic3r/GUI/Tab.cpp:1470 -#: src/slic3r/GUI/Tab.cpp:1967 src/slic3r/GUI/Tab.cpp:3661 -#: src/slic3r/GUI/wxExtensions.cpp:754 src/libslic3r/PrintConfig.cpp:88 +#: src/slic3r/GUI/GUI_App.cpp:818 src/slic3r/GUI/GUI_ObjectList.cpp:104 +#: src/slic3r/GUI/GUI_ObjectList.cpp:623 src/slic3r/GUI/Tab.cpp:1086 +#: src/slic3r/GUI/Tab.cpp:1101 src/slic3r/GUI/Tab.cpp:1200 +#: src/slic3r/GUI/Tab.cpp:1203 src/slic3r/GUI/Tab.cpp:1469 +#: src/slic3r/GUI/Tab.cpp:1969 src/slic3r/GUI/Tab.cpp:3665 +#: src/slic3r/GUI/wxExtensions.cpp:757 src/libslic3r/PrintConfig.cpp:88 #: src/libslic3r/PrintConfig.cpp:119 src/libslic3r/PrintConfig.cpp:223 #: src/libslic3r/PrintConfig.cpp:1037 src/libslic3r/PrintConfig.cpp:2276 #: src/libslic3r/PrintConfig.cpp:2448 msgid "Advanced" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:814 +#: src/slic3r/GUI/GUI_App.cpp:818 msgid "Advanced View Mode" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:815 src/slic3r/GUI/wxExtensions.cpp:755 +#: src/slic3r/GUI/GUI_App.cpp:819 src/slic3r/GUI/wxExtensions.cpp:758 msgid "Expert" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:815 +#: src/slic3r/GUI/GUI_App.cpp:819 msgid "Expert View Mode" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:820 +#: src/slic3r/GUI/GUI_App.cpp:824 msgid "Mode" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:820 +#: src/slic3r/GUI/GUI_App.cpp:824 #, possible-c-format msgid "%s View Mode" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:822 +#: src/slic3r/GUI/GUI_App.cpp:826 msgid "&Language" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:824 +#: src/slic3r/GUI/GUI_App.cpp:828 msgid "Flash printer &firmware" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:824 +#: src/slic3r/GUI/GUI_App.cpp:828 msgid "Upload a firmware image into an Arduino based printer" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:839 +#: src/slic3r/GUI/GUI_App.cpp:843 msgid "Taking configuration snapshot" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:839 +#: src/slic3r/GUI/GUI_App.cpp:843 msgid "Snapshot name" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:882 +#: src/slic3r/GUI/GUI_App.cpp:886 msgid "" "Switching the language will trigger application restart.\n" "You will lose content of the plater." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:884 +#: src/slic3r/GUI/GUI_App.cpp:888 msgid "Do you want to proceed?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:885 +#: src/slic3r/GUI/GUI_App.cpp:889 msgid "Language selection" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:908 +#: src/slic3r/GUI/GUI_App.cpp:912 msgid "&Configuration" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:932 +#: src/slic3r/GUI/GUI_App.cpp:936 msgid "The presets on the following tabs were modified" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:932 src/slic3r/GUI/Tab.cpp:2946 +#: src/slic3r/GUI/GUI_App.cpp:936 src/slic3r/GUI/Tab.cpp:2948 msgid "Discard changes and continue anyway?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:935 +#: src/slic3r/GUI/GUI_App.cpp:939 msgid "Unsaved Presets" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1084 src/slic3r/GUI/Tab.cpp:2958 +#: src/slic3r/GUI/GUI_App.cpp:1088 src/slic3r/GUI/Tab.cpp:2960 msgid "It's impossible to print multi-part object(s) with SLA technology." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1085 +#: src/slic3r/GUI/GUI_App.cpp:1089 msgid "Please check and fix your object list." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1086 src/slic3r/GUI/Plater.cpp:2313 -#: src/slic3r/GUI/Tab.cpp:2960 +#: src/slic3r/GUI/GUI_App.cpp:1090 src/slic3r/GUI/Plater.cpp:2315 +#: src/slic3r/GUI/Tab.cpp:2962 msgid "Attention!" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1103 +#: src/slic3r/GUI/GUI_App.cpp:1107 msgid "Select a gcode file:" msgstr "" @@ -2153,7 +2153,7 @@ 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:613 src/libslic3r/PrintConfig.cpp:72 +#: src/slic3r/GUI/GUI_ObjectList.cpp:614 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 @@ -2165,8 +2165,8 @@ 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:615 src/slic3r/GUI/GUI_Preview.cpp:246 -#: src/slic3r/GUI/Tab.cpp:1120 src/slic3r/GUI/Tab.cpp:1121 +#: src/slic3r/GUI/GUI_ObjectList.cpp:616 src/slic3r/GUI/GUI_Preview.cpp:246 +#: src/slic3r/GUI/Tab.cpp:1119 src/slic3r/GUI/Tab.cpp:1120 #: src/libslic3r/ExtrusionEntity.cpp:319 src/libslic3r/PrintConfig.cpp:370 #: src/libslic3r/PrintConfig.cpp:1502 src/libslic3r/PrintConfig.cpp:1866 #: src/libslic3r/PrintConfig.cpp:1872 src/libslic3r/PrintConfig.cpp:1880 @@ -2182,7 +2182,7 @@ msgid "Support material" msgstr "" #: src/slic3r/GUI/GUI_ObjectList.cpp:39 src/slic3r/GUI/GUI_ObjectList.cpp:101 -#: src/slic3r/GUI/GUI_ObjectList.cpp:619 src/libslic3r/PrintConfig.cpp:2252 +#: src/slic3r/GUI/GUI_ObjectList.cpp:620 src/libslic3r/PrintConfig.cpp:2252 #: src/libslic3r/PrintConfig.cpp:2260 msgid "Wipe options" msgstr "" @@ -2207,8 +2207,8 @@ msgstr "" msgid "Add support blocker" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:98 src/slic3r/GUI/GUI_ObjectList.cpp:616 -#: src/slic3r/GUI/GUI_Preview.cpp:224 src/slic3r/GUI/Tab.cpp:1145 +#: src/slic3r/GUI/GUI_ObjectList.cpp:98 src/slic3r/GUI/GUI_ObjectList.cpp:617 +#: src/slic3r/GUI/GUI_Preview.cpp:224 src/slic3r/GUI/Tab.cpp:1144 #: 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 @@ -2217,15 +2217,15 @@ msgstr "" msgid "Speed" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:99 src/slic3r/GUI/GUI_ObjectList.cpp:617 -#: src/slic3r/GUI/Tab.cpp:1180 src/slic3r/GUI/Tab.cpp:1838 +#: src/slic3r/GUI/GUI_ObjectList.cpp:99 src/slic3r/GUI/GUI_ObjectList.cpp:618 +#: src/slic3r/GUI/Tab.cpp:1179 src/slic3r/GUI/Tab.cpp:1840 #: src/libslic3r/PrintConfig.cpp:488 src/libslic3r/PrintConfig.cpp:1002 #: src/libslic3r/PrintConfig.cpp:1409 src/libslic3r/PrintConfig.cpp:1737 #: src/libslic3r/PrintConfig.cpp:1938 src/libslic3r/PrintConfig.cpp:1965 msgid "Extruders" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:100 src/slic3r/GUI/GUI_ObjectList.cpp:618 +#: src/slic3r/GUI/GUI_ObjectList.cpp:100 src/slic3r/GUI/GUI_ObjectList.cpp:619 #: 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:1757 @@ -2233,38 +2233,38 @@ msgstr "" msgid "Extrusion Width" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:106 src/slic3r/GUI/GUI_ObjectList.cpp:624 -#: src/slic3r/GUI/Plater.cpp:495 src/slic3r/GUI/Tab.cpp:3604 -#: src/slic3r/GUI/Tab.cpp:3605 src/libslic3r/PrintConfig.cpp:2614 +#: src/slic3r/GUI/GUI_ObjectList.cpp:106 src/slic3r/GUI/GUI_ObjectList.cpp:625 +#: src/slic3r/GUI/Plater.cpp:495 src/slic3r/GUI/Tab.cpp:3606 +#: src/slic3r/GUI/Tab.cpp:3607 src/libslic3r/PrintConfig.cpp:2614 #: src/libslic3r/PrintConfig.cpp:2621 src/libslic3r/PrintConfig.cpp:2630 #: src/libslic3r/PrintConfig.cpp:2639 src/libslic3r/PrintConfig.cpp:2649 -#: src/libslic3r/PrintConfig.cpp:2675 src/libslic3r/PrintConfig.cpp:2682 -#: src/libslic3r/PrintConfig.cpp:2693 src/libslic3r/PrintConfig.cpp:2703 -#: src/libslic3r/PrintConfig.cpp:2712 src/libslic3r/PrintConfig.cpp:2725 -#: src/libslic3r/PrintConfig.cpp:2735 src/libslic3r/PrintConfig.cpp:2744 -#: src/libslic3r/PrintConfig.cpp:2754 src/libslic3r/PrintConfig.cpp:2765 -#: src/libslic3r/PrintConfig.cpp:2773 +#: src/libslic3r/PrintConfig.cpp:2685 src/libslic3r/PrintConfig.cpp:2692 +#: src/libslic3r/PrintConfig.cpp:2703 src/libslic3r/PrintConfig.cpp:2713 +#: src/libslic3r/PrintConfig.cpp:2722 src/libslic3r/PrintConfig.cpp:2735 +#: src/libslic3r/PrintConfig.cpp:2745 src/libslic3r/PrintConfig.cpp:2754 +#: src/libslic3r/PrintConfig.cpp:2764 src/libslic3r/PrintConfig.cpp:2775 +#: src/libslic3r/PrintConfig.cpp:2783 msgid "Supports" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:107 src/slic3r/GUI/GUI_ObjectList.cpp:625 -#: src/slic3r/GUI/Plater.cpp:635 src/slic3r/GUI/Tab.cpp:3636 -#: src/slic3r/GUI/Tab.cpp:3637 src/libslic3r/PrintConfig.cpp:2781 -#: src/libslic3r/PrintConfig.cpp:2788 src/libslic3r/PrintConfig.cpp:2802 -#: src/libslic3r/PrintConfig.cpp:2813 src/libslic3r/PrintConfig.cpp:2823 -#: src/libslic3r/PrintConfig.cpp:2845 src/libslic3r/PrintConfig.cpp:2856 -#: src/libslic3r/PrintConfig.cpp:2863 src/libslic3r/PrintConfig.cpp:2870 -#: src/libslic3r/PrintConfig.cpp:2881 src/libslic3r/PrintConfig.cpp:2890 -#: src/libslic3r/PrintConfig.cpp:2899 +#: src/slic3r/GUI/GUI_ObjectList.cpp:107 src/slic3r/GUI/GUI_ObjectList.cpp:626 +#: src/slic3r/GUI/Plater.cpp:635 src/slic3r/GUI/Tab.cpp:3640 +#: src/slic3r/GUI/Tab.cpp:3641 src/libslic3r/PrintConfig.cpp:2791 +#: src/libslic3r/PrintConfig.cpp:2798 src/libslic3r/PrintConfig.cpp:2812 +#: src/libslic3r/PrintConfig.cpp:2823 src/libslic3r/PrintConfig.cpp:2833 +#: src/libslic3r/PrintConfig.cpp:2855 src/libslic3r/PrintConfig.cpp:2866 +#: src/libslic3r/PrintConfig.cpp:2873 src/libslic3r/PrintConfig.cpp:2880 +#: src/libslic3r/PrintConfig.cpp:2891 src/libslic3r/PrintConfig.cpp:2900 +#: src/libslic3r/PrintConfig.cpp:2909 msgid "Pad" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:108 src/slic3r/GUI/Tab.cpp:3654 -#: src/slic3r/GUI/Tab.cpp:3655 src/libslic3r/SLA/Hollowing.cpp:46 +#: src/slic3r/GUI/GUI_ObjectList.cpp:108 src/slic3r/GUI/Tab.cpp:3658 +#: src/slic3r/GUI/Tab.cpp:3659 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:2909 -#: src/libslic3r/PrintConfig.cpp:2916 src/libslic3r/PrintConfig.cpp:2926 -#: src/libslic3r/PrintConfig.cpp:2935 +#: src/libslic3r/SLA/Hollowing.cpp:76 src/libslic3r/PrintConfig.cpp:2919 +#: src/libslic3r/PrintConfig.cpp:2926 src/libslic3r/PrintConfig.cpp:2936 +#: src/libslic3r/PrintConfig.cpp:2945 msgid "Hollowing" msgstr "" @@ -2273,68 +2273,68 @@ msgstr "" msgid "Name" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:278 src/slic3r/GUI/Tab.cpp:1434 +#: src/slic3r/GUI/GUI_ObjectList.cpp:278 src/slic3r/GUI/Tab.cpp:1433 #: src/slic3r/GUI/wxExtensions.cpp:598 src/libslic3r/PrintConfig.cpp:487 msgid "Extruder" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:282 src/slic3r/GUI/GUI_ObjectList.cpp:394 +#: src/slic3r/GUI/GUI_ObjectList.cpp:282 src/slic3r/GUI/GUI_ObjectList.cpp:395 msgid "Editing" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:339 +#: src/slic3r/GUI/GUI_ObjectList.cpp:340 #, possible-c-format msgid "Auto-repaired (%d errors):" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:346 +#: src/slic3r/GUI/GUI_ObjectList.cpp:347 msgid "degenerate facets" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:347 +#: src/slic3r/GUI/GUI_ObjectList.cpp:348 msgid "edges fixed" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:348 +#: src/slic3r/GUI/GUI_ObjectList.cpp:349 msgid "facets removed" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:349 +#: src/slic3r/GUI/GUI_ObjectList.cpp:350 msgid "facets added" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:350 +#: src/slic3r/GUI/GUI_ObjectList.cpp:351 msgid "facets reversed" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:351 +#: src/slic3r/GUI/GUI_ObjectList.cpp:352 msgid "backwards edges" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:359 +#: src/slic3r/GUI/GUI_ObjectList.cpp:360 msgid "Right button click the icon to fix STL through Netfabb" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:396 +#: src/slic3r/GUI/GUI_ObjectList.cpp:397 msgid "Right button click the icon to change the object settings" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:398 +#: src/slic3r/GUI/GUI_ObjectList.cpp:399 msgid "Click the icon to change the object settings" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:402 +#: src/slic3r/GUI/GUI_ObjectList.cpp:403 msgid "Right button click the icon to change the object printable property" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:404 +#: src/slic3r/GUI/GUI_ObjectList.cpp:405 msgid "Click the icon to change the object printable property" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:457 src/slic3r/GUI/GUI_ObjectList.cpp:469 -#: src/slic3r/GUI/GUI_ObjectList.cpp:917 src/slic3r/GUI/GUI_ObjectList.cpp:3967 -#: src/slic3r/GUI/GUI_ObjectList.cpp:3977 -#: src/slic3r/GUI/GUI_ObjectList.cpp:4012 +#: src/slic3r/GUI/GUI_ObjectList.cpp:458 src/slic3r/GUI/GUI_ObjectList.cpp:470 +#: src/slic3r/GUI/GUI_ObjectList.cpp:918 src/slic3r/GUI/GUI_ObjectList.cpp:3968 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3978 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4013 #: src/slic3r/GUI/ObjectDataViewModel.cpp:200 #: src/slic3r/GUI/ObjectDataViewModel.cpp:257 #: src/slic3r/GUI/ObjectDataViewModel.cpp:282 @@ -2343,368 +2343,368 @@ msgstr "" msgid "default" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:536 +#: src/slic3r/GUI/GUI_ObjectList.cpp:537 msgid "Change Extruder" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:551 +#: src/slic3r/GUI/GUI_ObjectList.cpp:552 msgid "Rename Object" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:551 +#: src/slic3r/GUI/GUI_ObjectList.cpp:552 msgid "Rename Sub-object" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1091 -#: src/slic3r/GUI/GUI_ObjectList.cpp:3781 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1092 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3782 msgid "Instances to Separated Objects" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1106 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1107 msgid "Volumes in Object reordered" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1106 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1107 msgid "Object reordered" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1182 -#: src/slic3r/GUI/GUI_ObjectList.cpp:1530 -#: src/slic3r/GUI/GUI_ObjectList.cpp:1536 -#: src/slic3r/GUI/GUI_ObjectList.cpp:1849 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1183 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1531 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1537 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1850 #, possible-c-format msgid "Quick Add Settings (%s)" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1265 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1266 msgid "Select showing settings" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1314 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1315 msgid "Add Settings for Layers" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1315 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1316 msgid "Add Settings for Sub-object" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1316 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1317 msgid "Add Settings for Object" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1386 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1387 msgid "Add Settings Bundle for Height range" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1387 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1388 msgid "Add Settings Bundle for Sub-object" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1388 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1389 msgid "Add Settings Bundle for Object" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1427 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1428 msgid "Load" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1432 -#: src/slic3r/GUI/GUI_ObjectList.cpp:1464 -#: src/slic3r/GUI/GUI_ObjectList.cpp:1468 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1433 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1465 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1469 msgid "Box" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1432 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1433 msgid "Cylinder" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1432 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1433 msgid "Sphere" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1432 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1433 msgid "Slab" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1500 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1501 msgid "Height range Modifier" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1509 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1510 msgid "Add settings" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1589 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1590 msgid "Change type" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1599 -#: src/slic3r/GUI/GUI_ObjectList.cpp:1611 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1600 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1612 msgid "Set as a Separated Object" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1611 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1612 msgid "Set as a Separated Objects" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1621 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1622 msgid "Printable" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1636 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1637 msgid "Rename" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1647 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1648 msgid "Fix through the Netfabb" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1657 src/slic3r/GUI/Plater.cpp:3966 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1658 src/slic3r/GUI/Plater.cpp:3968 msgid "Export as STL" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1664 -#: src/slic3r/GUI/GUI_ObjectList.cpp:3956 src/slic3r/GUI/Plater.cpp:3934 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1665 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3957 src/slic3r/GUI/Plater.cpp:3936 msgid "Reload the selected volumes from disk" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1671 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1672 msgid "Set extruder for selected items" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1704 src/libslic3r/PrintConfig.cpp:335 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1705 src/libslic3r/PrintConfig.cpp:335 msgid "Default" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1724 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1725 msgid "Scale to print volume" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1724 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1725 msgid "Scale the selected object to fit the print volume" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1793 -#: src/slic3r/GUI/GUI_ObjectList.cpp:2051 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1794 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2052 msgid "Add Shape" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1879 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1880 msgid "Load Part" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1918 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1919 msgid "Error!" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1993 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1994 msgid "Add Generic Subobject" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2022 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2023 msgid "Generic" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2140 -#: src/slic3r/GUI/GUI_ObjectList.cpp:2242 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2141 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2243 msgid "Last instance of an object cannot be deleted." msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2152 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2153 msgid "Delete Settings" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2176 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2177 msgid "Delete All Instances from Object" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2192 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2193 msgid "Delete Height Range" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2223 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2224 msgid "From Object List You can't delete the last solid part from object." msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2227 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2228 msgid "Delete Subobject" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2246 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2247 msgid "Delete Instance" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2270 src/slic3r/GUI/Plater.cpp:2978 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2271 src/slic3r/GUI/Plater.cpp:2980 msgid "" "The selected object couldn't be split because it contains only one part." msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2274 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2275 msgid "Split to Parts" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2328 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2329 msgid "Add Layers" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2454 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2455 msgid "Group manipulation" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2466 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2467 msgid "Object manipulation" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2479 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2480 msgid "Object Settings to modify" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2483 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2484 msgid "Part Settings to modify" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2488 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2489 msgid "Layer range Settings to modify" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2494 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2495 msgid "Part manipulation" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2500 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2501 msgid "Instance manipulation" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2507 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2508 msgid "Height ranges" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2507 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2508 msgid "Settings for height range" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2693 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2694 msgid "Delete Selected Item" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2830 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2831 msgid "Delete Selected" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2896 -#: src/slic3r/GUI/GUI_ObjectList.cpp:2925 -#: src/slic3r/GUI/GUI_ObjectList.cpp:2943 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2897 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2926 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2944 msgid "Add Height Range" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3003 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3004 msgid "Edit Height Range" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3291 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3292 msgid "Selection-Remove from list" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3299 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3300 msgid "Selection-Add from list" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3417 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3418 msgid "Object or Instance" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3418 -#: src/slic3r/GUI/GUI_ObjectList.cpp:3551 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3419 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3552 msgid "Part" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3418 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3419 msgid "Layer" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3420 -msgid "Unsupported selection" -msgstr "" - #: src/slic3r/GUI/GUI_ObjectList.cpp:3421 -#, possible-c-format -msgid "You started your selection with %s Item." +msgid "Unsupported selection" msgstr "" #: src/slic3r/GUI/GUI_ObjectList.cpp:3422 #, possible-c-format +msgid "You started your selection with %s Item." +msgstr "" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:3423 +#, possible-c-format msgid "In this mode you can select only other %s Items%s" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3425 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3426 msgid "of a current Object" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3430 -#: src/slic3r/GUI/GUI_ObjectList.cpp:3505 src/slic3r/GUI/Plater.cpp:141 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3431 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3506 src/slic3r/GUI/Plater.cpp:141 msgid "Info" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3546 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3547 msgid "You can't change a type of the last solid part of the object." msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3551 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3552 msgid "Modifier" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3551 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3552 msgid "Support Enforcer" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3551 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3552 msgid "Support Blocker" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3553 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3554 msgid "Select type of part" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3558 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3559 msgid "Change Part Type" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3803 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3804 msgid "Enter new name" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3803 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3804 msgid "Renaming" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3819 -#: src/slic3r/GUI/GUI_ObjectList.cpp:3926 src/slic3r/GUI/Tab.cpp:3456 -#: src/slic3r/GUI/Tab.cpp:3460 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3820 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3927 src/slic3r/GUI/Tab.cpp:3458 +#: src/slic3r/GUI/Tab.cpp:3462 msgid "The supplied name is not valid;" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3820 -#: src/slic3r/GUI/GUI_ObjectList.cpp:3927 src/slic3r/GUI/Tab.cpp:3457 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3821 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3928 src/slic3r/GUI/Tab.cpp:3459 msgid "the following characters are not allowed:" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3971 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3972 msgid "Select extruder number:" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3972 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3973 msgid "This extruder will be set for selected items" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3997 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3998 msgid "Change Extruders" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:4094 src/slic3r/GUI/Selection.cpp:1474 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4095 src/slic3r/GUI/Selection.cpp:1475 msgid "Set Printable" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:4094 src/slic3r/GUI/Selection.cpp:1474 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4095 src/slic3r/GUI/Selection.cpp:1475 msgid "Set Unprintable" msgstr "" @@ -2733,8 +2733,8 @@ msgstr "" #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:216 #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:458 -#: src/slic3r/GUI/Mouse3DController.cpp:304 -#: src/slic3r/GUI/Mouse3DController.cpp:321 +#: src/slic3r/GUI/Mouse3DController.cpp:271 +#: src/slic3r/GUI/Mouse3DController.cpp:294 msgid "Rotation" msgstr "" @@ -2840,7 +2840,7 @@ msgstr "" msgid "Width" msgstr "" -#: src/slic3r/GUI/GUI_Preview.cpp:225 src/slic3r/GUI/Tab.cpp:1457 +#: src/slic3r/GUI/GUI_Preview.cpp:225 src/slic3r/GUI/Tab.cpp:1456 msgid "Fan speed" msgstr "" @@ -2902,7 +2902,7 @@ msgstr "" msgid "Gap fill" msgstr "" -#: src/slic3r/GUI/GUI_Preview.cpp:245 src/slic3r/GUI/Tab.cpp:1111 +#: src/slic3r/GUI/GUI_Preview.cpp:245 src/slic3r/GUI/Tab.cpp:1110 #: src/libslic3r/ExtrusionEntity.cpp:318 msgid "Skirt" msgstr "" @@ -2912,7 +2912,7 @@ msgstr "" msgid "Support material interface" msgstr "" -#: src/slic3r/GUI/GUI_Preview.cpp:248 src/slic3r/GUI/Tab.cpp:1191 +#: src/slic3r/GUI/GUI_Preview.cpp:248 src/slic3r/GUI/Tab.cpp:1190 #: src/libslic3r/ExtrusionEntity.cpp:321 msgid "Wipe tower" msgstr "" @@ -2941,7 +2941,7 @@ msgstr "" msgid "ERROR: not enough resources to execute a new job." msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:41 src/slic3r/GUI/MainFrame.cpp:708 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:41 src/slic3r/GUI/MainFrame.cpp:719 msgid "Keyboard Shortcuts" msgstr "" @@ -2978,11 +2978,11 @@ msgid "Load Config from ini/amf/3mf/gcode and merge" msgstr "" #: src/slic3r/GUI/KBShortcutsDialog.cpp:122 src/slic3r/GUI/Plater.cpp:891 -#: src/slic3r/GUI/Plater.cpp:5521 src/libslic3r/PrintConfig.cpp:3353 +#: src/slic3r/GUI/Plater.cpp:5522 src/libslic3r/PrintConfig.cpp:3363 msgid "Export G-code" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:123 src/slic3r/GUI/Plater.cpp:5522 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:123 src/slic3r/GUI/Plater.cpp:5523 msgid "Send G-code" msgstr "" @@ -3210,12 +3210,12 @@ msgstr "" msgid "Show/Hide 3Dconnexion devices settings dialog" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:192 src/slic3r/GUI/MainFrame.cpp:204 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:192 src/slic3r/GUI/MainFrame.cpp:214 msgid "Plater" msgstr "" #: src/slic3r/GUI/KBShortcutsDialog.cpp:195 -#, possible-c-format +#, no-c-format msgid "" "Press to snap by 5% in Gizmo scale\n" "or to snap by 1mm in Gizmo move" @@ -3255,8 +3255,8 @@ msgstr "" msgid "Show/Hide Legend" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:211 src/slic3r/GUI/Plater.cpp:4105 -#: src/slic3r/GUI/Tab.cpp:2390 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:211 src/slic3r/GUI/Plater.cpp:4107 +#: src/slic3r/GUI/Tab.cpp:2392 msgid "Preview" msgstr "" @@ -3298,608 +3298,610 @@ msgid "" "releases" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:174 +#: src/slic3r/GUI/MainFrame.cpp:184 msgid "based on Slic3r" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:405 +#: src/slic3r/GUI/MainFrame.cpp:415 msgid "&New Project" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:405 +#: src/slic3r/GUI/MainFrame.cpp:415 msgid "Start a new project" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:408 +#: src/slic3r/GUI/MainFrame.cpp:418 msgid "&Open Project" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:408 +#: src/slic3r/GUI/MainFrame.cpp:418 msgid "Open a project file" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:413 +#: src/slic3r/GUI/MainFrame.cpp:423 msgid "Recent projects" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:422 -msgid "The selected project is no more available" +#: src/slic3r/GUI/MainFrame.cpp:432 +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:422 src/slic3r/GUI/MainFrame.cpp:785 +#: src/slic3r/GUI/MainFrame.cpp:432 src/slic3r/GUI/MainFrame.cpp:796 #: src/slic3r/GUI/PrintHostDialogs.cpp:231 msgid "Error" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:446 +#: src/slic3r/GUI/MainFrame.cpp:457 msgid "&Save Project" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:446 +#: src/slic3r/GUI/MainFrame.cpp:457 msgid "Save current project file" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:450 src/slic3r/GUI/MainFrame.cpp:452 +#: src/slic3r/GUI/MainFrame.cpp:461 src/slic3r/GUI/MainFrame.cpp:463 msgid "Save Project &as" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:450 src/slic3r/GUI/MainFrame.cpp:452 +#: src/slic3r/GUI/MainFrame.cpp:461 src/slic3r/GUI/MainFrame.cpp:463 msgid "Save current project file as" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:460 +#: src/slic3r/GUI/MainFrame.cpp:471 msgid "Import STL/OBJ/AM&F/3MF" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:460 +#: src/slic3r/GUI/MainFrame.cpp:471 msgid "Load a model" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:464 +#: src/slic3r/GUI/MainFrame.cpp:475 msgid "Import &Config" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:464 +#: src/slic3r/GUI/MainFrame.cpp:475 msgid "Load exported configuration file" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:467 +#: src/slic3r/GUI/MainFrame.cpp:478 msgid "Import Config from &project" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:467 +#: src/slic3r/GUI/MainFrame.cpp:478 msgid "Load configuration from project file" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:471 +#: src/slic3r/GUI/MainFrame.cpp:482 msgid "Import Config &Bundle" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:471 +#: src/slic3r/GUI/MainFrame.cpp:482 msgid "Load presets from a bundle" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:474 +#: src/slic3r/GUI/MainFrame.cpp:485 msgid "&Import" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:477 src/slic3r/GUI/MainFrame.cpp:749 +#: src/slic3r/GUI/MainFrame.cpp:488 src/slic3r/GUI/MainFrame.cpp:760 msgid "Export &G-code" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:477 +#: src/slic3r/GUI/MainFrame.cpp:488 msgid "Export current plate as G-code" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:481 src/slic3r/GUI/MainFrame.cpp:750 +#: src/slic3r/GUI/MainFrame.cpp:492 src/slic3r/GUI/MainFrame.cpp:761 msgid "S&end G-code" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:481 +#: src/slic3r/GUI/MainFrame.cpp:492 msgid "Send to print current plate as G-code" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:486 +#: src/slic3r/GUI/MainFrame.cpp:497 msgid "Export plate as &STL" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:486 +#: src/slic3r/GUI/MainFrame.cpp:497 msgid "Export current plate as STL" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:489 +#: src/slic3r/GUI/MainFrame.cpp:500 msgid "Export plate as STL &including supports" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:489 +#: src/slic3r/GUI/MainFrame.cpp:500 msgid "Export current plate as STL including supports" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:492 +#: src/slic3r/GUI/MainFrame.cpp:503 msgid "Export plate as &AMF" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:492 +#: src/slic3r/GUI/MainFrame.cpp:503 msgid "Export current plate as AMF" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:496 +#: src/slic3r/GUI/MainFrame.cpp:507 msgid "Export &toolpaths as OBJ" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:496 +#: src/slic3r/GUI/MainFrame.cpp:507 msgid "Export toolpaths as OBJ" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:500 +#: src/slic3r/GUI/MainFrame.cpp:511 msgid "Export &Config" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:500 +#: src/slic3r/GUI/MainFrame.cpp:511 msgid "Export current configuration to file" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:503 +#: src/slic3r/GUI/MainFrame.cpp:514 msgid "Export Config &Bundle" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:503 +#: src/slic3r/GUI/MainFrame.cpp:514 msgid "Export all presets to file" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:506 +#: src/slic3r/GUI/MainFrame.cpp:517 msgid "&Export" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:512 +#: src/slic3r/GUI/MainFrame.cpp:523 msgid "Quick Slice" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:512 +#: src/slic3r/GUI/MainFrame.cpp:523 msgid "Slice a file into a G-code" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:518 +#: src/slic3r/GUI/MainFrame.cpp:529 msgid "Quick Slice and Save As" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:518 +#: src/slic3r/GUI/MainFrame.cpp:529 msgid "Slice a file into a G-code, save as" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:524 +#: src/slic3r/GUI/MainFrame.cpp:535 msgid "Repeat Last Quick Slice" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:524 +#: src/slic3r/GUI/MainFrame.cpp:535 msgid "Repeat last quick slice" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:532 +#: src/slic3r/GUI/MainFrame.cpp:543 msgid "(Re)Slice No&w" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:532 +#: src/slic3r/GUI/MainFrame.cpp:543 msgid "Start new slicing process" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:536 +#: src/slic3r/GUI/MainFrame.cpp:547 msgid "&Repair STL file" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:536 +#: src/slic3r/GUI/MainFrame.cpp:547 msgid "Automatically repair an STL file" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:540 +#: src/slic3r/GUI/MainFrame.cpp:551 msgid "&Quit" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:540 +#: src/slic3r/GUI/MainFrame.cpp:551 #, possible-c-format msgid "Quit %s" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:565 +#: src/slic3r/GUI/MainFrame.cpp:576 msgid "&Select all" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:566 +#: src/slic3r/GUI/MainFrame.cpp:577 msgid "Selects all objects" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:568 +#: src/slic3r/GUI/MainFrame.cpp:579 msgid "D&eselect all" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:569 +#: src/slic3r/GUI/MainFrame.cpp:580 msgid "Deselects all objects" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:572 +#: src/slic3r/GUI/MainFrame.cpp:583 msgid "&Delete selected" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:573 +#: src/slic3r/GUI/MainFrame.cpp:584 msgid "Deletes the current selection" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:575 +#: src/slic3r/GUI/MainFrame.cpp:586 msgid "Delete &all" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:576 +#: src/slic3r/GUI/MainFrame.cpp:587 msgid "Deletes all objects" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:580 +#: src/slic3r/GUI/MainFrame.cpp:591 msgid "&Undo" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:583 +#: src/slic3r/GUI/MainFrame.cpp:594 msgid "&Redo" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:588 +#: src/slic3r/GUI/MainFrame.cpp:599 msgid "&Copy" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:589 +#: src/slic3r/GUI/MainFrame.cpp:600 msgid "Copy selection to clipboard" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:591 +#: src/slic3r/GUI/MainFrame.cpp:602 msgid "&Paste" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:592 +#: src/slic3r/GUI/MainFrame.cpp:603 msgid "Paste clipboard" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:596 +#: src/slic3r/GUI/MainFrame.cpp:607 msgid "Re&load from disk" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:597 +#: src/slic3r/GUI/MainFrame.cpp:608 msgid "Reload the plater from disk" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:606 +#: src/slic3r/GUI/MainFrame.cpp:617 msgid "&Plater Tab" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:606 +#: src/slic3r/GUI/MainFrame.cpp:617 msgid "Show the plater" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:614 +#: src/slic3r/GUI/MainFrame.cpp:625 msgid "P&rint Settings Tab" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:614 +#: src/slic3r/GUI/MainFrame.cpp:625 msgid "Show the print settings" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:617 src/slic3r/GUI/MainFrame.cpp:752 +#: src/slic3r/GUI/MainFrame.cpp:628 src/slic3r/GUI/MainFrame.cpp:763 msgid "&Filament Settings Tab" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:617 +#: src/slic3r/GUI/MainFrame.cpp:628 msgid "Show the filament settings" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:621 +#: src/slic3r/GUI/MainFrame.cpp:632 msgid "Print&er Settings Tab" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:621 +#: src/slic3r/GUI/MainFrame.cpp:632 msgid "Show the printer settings" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:626 +#: src/slic3r/GUI/MainFrame.cpp:637 msgid "3&D" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:626 +#: src/slic3r/GUI/MainFrame.cpp:637 msgid "Show the 3D editing view" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:629 +#: src/slic3r/GUI/MainFrame.cpp:640 msgid "Pre&view" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:629 +#: src/slic3r/GUI/MainFrame.cpp:640 msgid "Show the 3D slices preview" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:648 +#: src/slic3r/GUI/MainFrame.cpp:659 msgid "Print &Host Upload Queue" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:648 +#: src/slic3r/GUI/MainFrame.cpp:659 msgid "Display the Print Host Upload Queue window" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:658 +#: src/slic3r/GUI/MainFrame.cpp:669 msgid "Iso" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:658 +#: src/slic3r/GUI/MainFrame.cpp:669 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:662 src/libslic3r/PrintConfig.cpp:2132 +#: src/slic3r/GUI/MainFrame.cpp:673 src/libslic3r/PrintConfig.cpp:2132 #: src/libslic3r/PrintConfig.cpp:2141 msgid "Top" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:662 +#: src/slic3r/GUI/MainFrame.cpp:673 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:665 src/libslic3r/PrintConfig.cpp:174 +#: src/slic3r/GUI/MainFrame.cpp:676 src/libslic3r/PrintConfig.cpp:174 #: src/libslic3r/PrintConfig.cpp:183 msgid "Bottom" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:665 +#: src/slic3r/GUI/MainFrame.cpp:676 msgid "Bottom View" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:667 +#: src/slic3r/GUI/MainFrame.cpp:678 msgid "Front" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:667 +#: src/slic3r/GUI/MainFrame.cpp:678 msgid "Front View" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:669 src/libslic3r/PrintConfig.cpp:1632 +#: src/slic3r/GUI/MainFrame.cpp:680 src/libslic3r/PrintConfig.cpp:1632 msgid "Rear" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:669 +#: src/slic3r/GUI/MainFrame.cpp:680 msgid "Rear View" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:671 +#: src/slic3r/GUI/MainFrame.cpp:682 msgid "Left" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:671 +#: src/slic3r/GUI/MainFrame.cpp:682 msgid "Left View" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:673 +#: src/slic3r/GUI/MainFrame.cpp:684 msgid "Right" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:673 +#: src/slic3r/GUI/MainFrame.cpp:684 msgid "Right View" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:676 +#: src/slic3r/GUI/MainFrame.cpp:687 msgid "Show &labels" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:676 +#: src/slic3r/GUI/MainFrame.cpp:687 msgid "Show object/instance labels in 3D scene" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:684 +#: src/slic3r/GUI/MainFrame.cpp:695 msgid "Prusa 3D &Drivers" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:684 +#: src/slic3r/GUI/MainFrame.cpp:695 msgid "Open the Prusa3D drivers download page in your browser" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:686 +#: src/slic3r/GUI/MainFrame.cpp:697 msgid "Software &Releases" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:686 +#: src/slic3r/GUI/MainFrame.cpp:697 msgid "Open the software releases page in your browser" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:692 +#: src/slic3r/GUI/MainFrame.cpp:703 #, possible-c-format msgid "%s &Website" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:693 +#: src/slic3r/GUI/MainFrame.cpp:704 #, possible-c-format msgid "Open the %s website in your browser" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:699 +#: src/slic3r/GUI/MainFrame.cpp:710 msgid "System &Info" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:699 +#: src/slic3r/GUI/MainFrame.cpp:710 msgid "Show system information" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:701 +#: src/slic3r/GUI/MainFrame.cpp:712 msgid "Show &Configuration Folder" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:701 +#: src/slic3r/GUI/MainFrame.cpp:712 msgid "Show user configuration folder (datadir)" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:703 +#: src/slic3r/GUI/MainFrame.cpp:714 msgid "Report an I&ssue" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:703 +#: src/slic3r/GUI/MainFrame.cpp:714 #, possible-c-format msgid "Report an issue on %s" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:705 +#: src/slic3r/GUI/MainFrame.cpp:716 #, possible-c-format msgid "&About %s" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:705 +#: src/slic3r/GUI/MainFrame.cpp:716 msgid "Show about dialog" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:708 +#: src/slic3r/GUI/MainFrame.cpp:719 msgid "Show the list of the keyboard shortcuts" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:721 +#: src/slic3r/GUI/MainFrame.cpp:732 msgid "&File" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:722 +#: src/slic3r/GUI/MainFrame.cpp:733 msgid "&Edit" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:723 +#: src/slic3r/GUI/MainFrame.cpp:734 msgid "&Window" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:724 +#: src/slic3r/GUI/MainFrame.cpp:735 msgid "&View" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:727 +#: src/slic3r/GUI/MainFrame.cpp:738 msgid "&Help" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:749 +#: src/slic3r/GUI/MainFrame.cpp:760 msgid "E&xport" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:750 +#: src/slic3r/GUI/MainFrame.cpp:761 msgid "S&end to print" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:752 +#: src/slic3r/GUI/MainFrame.cpp:763 msgid "Mate&rial Settings Tab" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:773 +#: src/slic3r/GUI/MainFrame.cpp:784 msgid "Choose a file to slice (STL/OBJ/AMF/3MF/PRUSA):" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:784 +#: src/slic3r/GUI/MainFrame.cpp:795 msgid "No previously sliced file." msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:790 +#: src/slic3r/GUI/MainFrame.cpp:801 msgid "Previously sliced file (" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:790 +#: src/slic3r/GUI/MainFrame.cpp:801 msgid ") not found." msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:791 +#: src/slic3r/GUI/MainFrame.cpp:802 msgid "File Not Found" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:826 +#: src/slic3r/GUI/MainFrame.cpp:837 #, possible-c-format msgid "Save %s file as:" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:826 +#: src/slic3r/GUI/MainFrame.cpp:837 msgid "SVG" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:826 +#: src/slic3r/GUI/MainFrame.cpp:837 msgid "G-code" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:838 +#: src/slic3r/GUI/MainFrame.cpp:849 msgid "Save zip file as:" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:847 src/slic3r/GUI/Plater.cpp:3121 -#: src/slic3r/GUI/Plater.cpp:5107 src/slic3r/GUI/Tab.cpp:1221 -#: src/slic3r/GUI/Tab.cpp:3662 +#: src/slic3r/GUI/MainFrame.cpp:858 src/slic3r/GUI/Plater.cpp:3123 +#: src/slic3r/GUI/Plater.cpp:5109 src/slic3r/GUI/Tab.cpp:1220 +#: src/slic3r/GUI/Tab.cpp:3666 msgid "Slicing" msgstr "" #. TRN "Processing input_file_basename" -#: src/slic3r/GUI/MainFrame.cpp:849 +#: src/slic3r/GUI/MainFrame.cpp:860 #, possible-c-format msgid "Processing %s" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:872 +#: src/slic3r/GUI/MainFrame.cpp:883 msgid " was successfully sliced." msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:874 +#: src/slic3r/GUI/MainFrame.cpp:885 msgid "Slicing Done!" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:889 +#: src/slic3r/GUI/MainFrame.cpp:900 msgid "Select the STL file to repair:" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:899 +#: src/slic3r/GUI/MainFrame.cpp:910 msgid "Save OBJ file (less prone to coordinate errors than STL) as:" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:911 +#: src/slic3r/GUI/MainFrame.cpp:922 msgid "Your file was repaired." msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:911 src/libslic3r/PrintConfig.cpp:3447 +#: src/slic3r/GUI/MainFrame.cpp:922 src/libslic3r/PrintConfig.cpp:3457 msgid "Repair" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:925 +#: src/slic3r/GUI/MainFrame.cpp:936 msgid "Save configuration as:" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:944 src/slic3r/GUI/MainFrame.cpp:1006 +#: src/slic3r/GUI/MainFrame.cpp:955 src/slic3r/GUI/MainFrame.cpp:1017 msgid "Select configuration to load:" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:980 +#: src/slic3r/GUI/MainFrame.cpp:991 msgid "Save presets bundle as:" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:1027 +#: src/slic3r/GUI/MainFrame.cpp:1038 #, possible-c-format msgid "%d presets successfully imported." msgstr "" -#: src/slic3r/GUI/Mouse3DController.cpp:274 +#: src/slic3r/GUI/Mouse3DController.cpp:239 msgid "3Dconnexion settings" msgstr "" -#: src/slic3r/GUI/Mouse3DController.cpp:289 +#: src/slic3r/GUI/Mouse3DController.cpp:254 msgid "Device:" msgstr "" -#: src/slic3r/GUI/Mouse3DController.cpp:296 +#: src/slic3r/GUI/Mouse3DController.cpp:261 msgid "Speed:" msgstr "" -#: src/slic3r/GUI/Mouse3DController.cpp:300 -#: src/slic3r/GUI/Mouse3DController.cpp:317 +#: src/slic3r/GUI/Mouse3DController.cpp:265 +#: src/slic3r/GUI/Mouse3DController.cpp:288 msgid "Translation" msgstr "" -#: src/slic3r/GUI/Mouse3DController.cpp:308 -#: src/slic3r/GUI/Mouse3DController.cpp:317 +#: src/slic3r/GUI/Mouse3DController.cpp:277 +#: src/slic3r/GUI/Mouse3DController.cpp:288 msgid "Zoom" msgstr "" -#: src/slic3r/GUI/Mouse3DController.cpp:313 +#: src/slic3r/GUI/Mouse3DController.cpp:284 msgid "Deadzone:" msgstr "" @@ -3923,8 +3925,8 @@ msgstr "" msgid "Instance %d" msgstr "" -#: src/slic3r/GUI/ObjectDataViewModel.cpp:67 src/slic3r/GUI/Tab.cpp:3512 -#: src/slic3r/GUI/Tab.cpp:3600 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:67 src/slic3r/GUI/Tab.cpp:3514 +#: src/slic3r/GUI/Tab.cpp:3602 msgid "Layers" msgstr "" @@ -3932,12 +3934,12 @@ msgstr "" msgid "Range" msgstr "" -#: src/slic3r/GUI/OptionsGroup.cpp:258 +#: src/slic3r/GUI/OptionsGroup.cpp:259 msgctxt "Layers" msgid "Top" msgstr "" -#: src/slic3r/GUI/OptionsGroup.cpp:258 +#: src/slic3r/GUI/OptionsGroup.cpp:259 msgctxt "Layers" msgid "Bottom" msgstr "" @@ -4000,7 +4002,7 @@ msgid "Select what kind of support do you need" msgstr "" #: src/slic3r/GUI/Plater.cpp:500 src/libslic3r/PrintConfig.cpp:1901 -#: src/libslic3r/PrintConfig.cpp:2674 +#: src/libslic3r/PrintConfig.cpp:2684 msgid "Support on build plate only" msgstr "" @@ -4012,7 +4014,7 @@ msgstr "" msgid "Everywhere" msgstr "" -#: src/slic3r/GUI/Plater.cpp:534 src/slic3r/GUI/Tab.cpp:1117 +#: src/slic3r/GUI/Plater.cpp:534 src/slic3r/GUI/Tab.cpp:1116 msgid "Brim" msgstr "" @@ -4042,8 +4044,8 @@ msgstr "" msgid "Print settings" msgstr "" -#: src/slic3r/GUI/Plater.cpp:816 src/slic3r/GUI/Tab.cpp:1425 -#: src/slic3r/GUI/Tab.cpp:1426 +#: src/slic3r/GUI/Plater.cpp:816 src/slic3r/GUI/Tab.cpp:1424 +#: src/slic3r/GUI/Tab.cpp:1425 msgid "Filament" msgstr "" @@ -4051,7 +4053,7 @@ msgstr "" msgid "SLA print settings" msgstr "" -#: src/slic3r/GUI/Plater.cpp:818 src/slic3r/GUI/Preset.cpp:1524 +#: src/slic3r/GUI/Plater.cpp:818 src/slic3r/GUI/Preset.cpp:1536 msgid "SLA material" msgstr "" @@ -4059,7 +4061,7 @@ msgstr "" msgid "Printer" msgstr "" -#: src/slic3r/GUI/Plater.cpp:878 src/slic3r/GUI/Plater.cpp:5522 +#: src/slic3r/GUI/Plater.cpp:878 src/slic3r/GUI/Plater.cpp:5523 msgid "Send to printer" msgstr "" @@ -4071,8 +4073,8 @@ msgstr "" msgid "Export to SD card / Flash drive" msgstr "" -#: src/slic3r/GUI/Plater.cpp:892 src/slic3r/GUI/Plater.cpp:3121 -#: src/slic3r/GUI/Plater.cpp:5110 +#: src/slic3r/GUI/Plater.cpp:892 src/slic3r/GUI/Plater.cpp:3123 +#: src/slic3r/GUI/Plater.cpp:5112 msgid "Slice now" msgstr "" @@ -4150,416 +4152,416 @@ msgstr "" msgid "Load Files" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2151 +#: src/slic3r/GUI/Plater.cpp:2155 msgid "New Project" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2273 +#: src/slic3r/GUI/Plater.cpp:2275 msgid "Loading" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2283 +#: src/slic3r/GUI/Plater.cpp:2285 #, possible-c-format msgid "Processing input file %s" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2311 +#: src/slic3r/GUI/Plater.cpp:2313 msgid "You cannot load SLA project with a multi-part object on the bed" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2312 src/slic3r/GUI/Tab.cpp:2959 +#: src/slic3r/GUI/Plater.cpp:2314 src/slic3r/GUI/Tab.cpp:2961 msgid "Please check your object list before preset changing." msgstr "" -#: src/slic3r/GUI/Plater.cpp:2357 +#: src/slic3r/GUI/Plater.cpp:2359 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:2360 src/slic3r/GUI/Plater.cpp:2413 +#: src/slic3r/GUI/Plater.cpp:2362 src/slic3r/GUI/Plater.cpp:2415 msgid "Multi-part object detected" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2367 +#: src/slic3r/GUI/Plater.cpp:2369 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:2368 +#: src/slic3r/GUI/Plater.cpp:2370 msgid "Detected advanced data" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2390 +#: src/slic3r/GUI/Plater.cpp:2392 #, 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:2410 +#: src/slic3r/GUI/Plater.cpp:2412 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:2426 +#: src/slic3r/GUI/Plater.cpp:2428 msgid "Loaded" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2528 +#: src/slic3r/GUI/Plater.cpp:2530 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:2529 +#: src/slic3r/GUI/Plater.cpp:2531 msgid "Object too large?" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2591 +#: src/slic3r/GUI/Plater.cpp:2593 msgid "Export STL file:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2598 +#: src/slic3r/GUI/Plater.cpp:2600 msgid "Export AMF file:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2604 +#: src/slic3r/GUI/Plater.cpp:2606 msgid "Save file as:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2610 +#: src/slic3r/GUI/Plater.cpp:2612 msgid "Export OBJ file:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2712 +#: src/slic3r/GUI/Plater.cpp:2714 msgid "Delete Object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2723 +#: src/slic3r/GUI/Plater.cpp:2725 msgid "Reset Project" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2760 +#: src/slic3r/GUI/Plater.cpp:2762 msgid "Hollow" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2767 +#: src/slic3r/GUI/Plater.cpp:2769 msgid "Optimize Rotation" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2813 +#: src/slic3r/GUI/Plater.cpp:2815 msgid "Arranging" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2835 +#: src/slic3r/GUI/Plater.cpp:2837 msgid "Could not arrange model objects! Some geometries may be invalid." msgstr "" -#: src/slic3r/GUI/Plater.cpp:2841 +#: src/slic3r/GUI/Plater.cpp:2843 msgid "Arranging canceled." msgstr "" -#: src/slic3r/GUI/Plater.cpp:2842 +#: src/slic3r/GUI/Plater.cpp:2844 msgid "Arranging done." msgstr "" -#: src/slic3r/GUI/Plater.cpp:2858 +#: src/slic3r/GUI/Plater.cpp:2860 msgid "Searching for optimal orientation" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2891 +#: src/slic3r/GUI/Plater.cpp:2893 msgid "Orientation search canceled." msgstr "" -#: src/slic3r/GUI/Plater.cpp:2892 +#: src/slic3r/GUI/Plater.cpp:2894 msgid "Orientation found." msgstr "" -#: src/slic3r/GUI/Plater.cpp:2922 +#: src/slic3r/GUI/Plater.cpp:2924 msgid "Indexing hollowed object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2926 +#: src/slic3r/GUI/Plater.cpp:2928 msgid "Hollowing cancelled." msgstr "" -#: src/slic3r/GUI/Plater.cpp:2927 +#: src/slic3r/GUI/Plater.cpp:2929 msgid "Hollowing done." msgstr "" -#: src/slic3r/GUI/Plater.cpp:2929 +#: src/slic3r/GUI/Plater.cpp:2931 msgid "Hollowing failed." msgstr "" -#: src/slic3r/GUI/Plater.cpp:2970 +#: src/slic3r/GUI/Plater.cpp:2972 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:2983 msgid "Split to Objects" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3106 +#: src/slic3r/GUI/Plater.cpp:3108 msgid "Invalid data" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3115 +#: src/slic3r/GUI/Plater.cpp:3117 msgid "Ready to slice" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3153 src/slic3r/GUI/PrintHostDialogs.cpp:232 +#: src/slic3r/GUI/Plater.cpp:3155 src/slic3r/GUI/PrintHostDialogs.cpp:232 msgid "Cancelling" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3170 +#: src/slic3r/GUI/Plater.cpp:3172 msgid "Another export job is currently running." msgstr "" -#: src/slic3r/GUI/Plater.cpp:3286 +#: src/slic3r/GUI/Plater.cpp:3288 msgid "Please select the file to reload" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3321 +#: src/slic3r/GUI/Plater.cpp:3323 msgid "It is not allowed to change the file to reload" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3321 +#: src/slic3r/GUI/Plater.cpp:3323 msgid "Do you want to retry" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3339 +#: src/slic3r/GUI/Plater.cpp:3341 msgid "Reload from:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3428 +#: src/slic3r/GUI/Plater.cpp:3430 msgid "Unable to reload:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3433 +#: src/slic3r/GUI/Plater.cpp:3435 msgid "Error during reload" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3452 +#: src/slic3r/GUI/Plater.cpp:3454 msgid "Reload all from disk" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3473 +#: src/slic3r/GUI/Plater.cpp:3475 msgid "Fix Throught NetFabb" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3664 +#: src/slic3r/GUI/Plater.cpp:3666 msgid "Export failed" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3669 src/slic3r/GUI/PrintHostDialogs.cpp:233 +#: src/slic3r/GUI/Plater.cpp:3671 src/slic3r/GUI/PrintHostDialogs.cpp:233 msgid "Cancelled" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3931 src/slic3r/GUI/Plater.cpp:3953 +#: src/slic3r/GUI/Plater.cpp:3933 src/slic3r/GUI/Plater.cpp:3955 msgid "Remove the selected object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3940 +#: src/slic3r/GUI/Plater.cpp:3942 msgid "Add one more instance of the selected object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3942 +#: src/slic3r/GUI/Plater.cpp:3944 msgid "Remove one instance of the selected object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3944 +#: src/slic3r/GUI/Plater.cpp:3946 msgid "Set number of instances" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3944 +#: src/slic3r/GUI/Plater.cpp:3946 msgid "Change the number of instances of the selected object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3963 +#: src/slic3r/GUI/Plater.cpp:3965 msgid "Reload the selected object from disk" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3966 +#: src/slic3r/GUI/Plater.cpp:3968 msgid "Export the selected object as STL file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3995 +#: src/slic3r/GUI/Plater.cpp:3997 msgid "Along X axis" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3995 +#: src/slic3r/GUI/Plater.cpp:3997 msgid "Mirror the selected object along the X axis" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3997 +#: src/slic3r/GUI/Plater.cpp:3999 msgid "Along Y axis" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3997 +#: src/slic3r/GUI/Plater.cpp:3999 msgid "Mirror the selected object along the Y axis" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3999 +#: src/slic3r/GUI/Plater.cpp:4001 msgid "Along Z axis" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3999 +#: src/slic3r/GUI/Plater.cpp:4001 msgid "Mirror the selected object along the Z axis" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4002 +#: src/slic3r/GUI/Plater.cpp:4004 msgid "Mirror" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4002 +#: src/slic3r/GUI/Plater.cpp:4004 msgid "Mirror the selected object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4014 +#: src/slic3r/GUI/Plater.cpp:4016 msgid "To objects" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4014 src/slic3r/GUI/Plater.cpp:4034 +#: src/slic3r/GUI/Plater.cpp:4016 src/slic3r/GUI/Plater.cpp:4036 msgid "Split the selected object into individual objects" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4016 +#: src/slic3r/GUI/Plater.cpp:4018 msgid "To parts" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4016 src/slic3r/GUI/Plater.cpp:4048 +#: src/slic3r/GUI/Plater.cpp:4018 src/slic3r/GUI/Plater.cpp:4050 msgid "Split the selected object into individual sub-parts" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4019 src/slic3r/GUI/Plater.cpp:4034 -#: src/slic3r/GUI/Plater.cpp:4048 src/libslic3r/PrintConfig.cpp:3471 +#: src/slic3r/GUI/Plater.cpp:4021 src/slic3r/GUI/Plater.cpp:4036 +#: src/slic3r/GUI/Plater.cpp:4050 src/libslic3r/PrintConfig.cpp:3481 msgid "Split" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4019 +#: src/slic3r/GUI/Plater.cpp:4021 msgid "Split the selected object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4040 +#: src/slic3r/GUI/Plater.cpp:4042 msgid "Optimize orientation" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4040 +#: src/slic3r/GUI/Plater.cpp:4042 msgid "Optimize the rotation of the object for better print results." msgstr "" -#: src/slic3r/GUI/Plater.cpp:4097 +#: src/slic3r/GUI/Plater.cpp:4099 msgid "3D editor view" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4400 +#: src/slic3r/GUI/Plater.cpp:4402 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:4575 +#: src/slic3r/GUI/Plater.cpp:4577 msgid "Load Project" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4603 +#: src/slic3r/GUI/Plater.cpp:4605 msgid "Import Object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4607 +#: src/slic3r/GUI/Plater.cpp:4609 msgid "Import Objects" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4669 +#: src/slic3r/GUI/Plater.cpp:4671 msgid "All objects will be removed, continue?" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4677 +#: src/slic3r/GUI/Plater.cpp:4679 msgid "Delete Selected Objects" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4685 +#: src/slic3r/GUI/Plater.cpp:4687 msgid "Increase Instances" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4720 +#: src/slic3r/GUI/Plater.cpp:4722 msgid "Decrease Instances" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4751 +#: src/slic3r/GUI/Plater.cpp:4753 msgid "Enter the number of copies:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4752 +#: src/slic3r/GUI/Plater.cpp:4754 msgid "Copies of the selected object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4756 +#: src/slic3r/GUI/Plater.cpp:4758 #, possible-c-format msgid "Set numbers of copies to %d" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4786 +#: src/slic3r/GUI/Plater.cpp:4788 msgid "Cut by Plane" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4839 +#: src/slic3r/GUI/Plater.cpp:4841 msgid "Save G-code file as:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4839 +#: src/slic3r/GUI/Plater.cpp:4841 msgid "Save SL1 file as:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4985 +#: src/slic3r/GUI/Plater.cpp:4987 #, possible-c-format msgid "STL file exported to %s" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5002 +#: src/slic3r/GUI/Plater.cpp:5004 #, possible-c-format msgid "AMF file exported to %s" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5005 +#: src/slic3r/GUI/Plater.cpp:5007 #, possible-c-format msgid "Error exporting AMF file %s" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5038 +#: src/slic3r/GUI/Plater.cpp:5040 #, possible-c-format msgid "3MF file exported to %s" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5043 +#: src/slic3r/GUI/Plater.cpp:5045 #, possible-c-format msgid "Error exporting 3MF file %s" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5203 +#: src/slic3r/GUI/Plater.cpp:5205 #, possible-c-format msgid "" "Unmounting successful. The device %s(%s) can now be safely removed from the " "computer." msgstr "" -#: src/slic3r/GUI/Plater.cpp:5521 +#: src/slic3r/GUI/Plater.cpp:5522 msgid "Export" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5606 +#: src/slic3r/GUI/Plater.cpp:5608 msgid "Paste From Clipboard" msgstr "" -#: src/slic3r/GUI/Preferences.cpp:22 src/slic3r/GUI/Tab.cpp:1796 -#: src/slic3r/GUI/Tab.cpp:2040 +#: src/slic3r/GUI/Preferences.cpp:22 src/slic3r/GUI/Tab.cpp:1798 +#: src/slic3r/GUI/Tab.cpp:2042 msgid "General" msgstr "" @@ -4699,34 +4701,34 @@ msgstr "" msgid "modified" msgstr "" -#: src/slic3r/GUI/Preset.cpp:1109 src/slic3r/GUI/Preset.cpp:1164 -#: src/slic3r/GUI/Preset.cpp:1242 src/slic3r/GUI/Preset.cpp:1284 -#: src/slic3r/GUI/PresetBundle.cpp:1583 src/slic3r/GUI/PresetBundle.cpp:1672 +#: src/slic3r/GUI/Preset.cpp:1121 src/slic3r/GUI/Preset.cpp:1176 +#: src/slic3r/GUI/Preset.cpp:1254 src/slic3r/GUI/Preset.cpp:1296 +#: src/slic3r/GUI/PresetBundle.cpp:1583 src/slic3r/GUI/PresetBundle.cpp:1679 msgid "System presets" msgstr "" -#: src/slic3r/GUI/Preset.cpp:1168 src/slic3r/GUI/Preset.cpp:1288 -#: src/slic3r/GUI/PresetBundle.cpp:1677 +#: src/slic3r/GUI/Preset.cpp:1180 src/slic3r/GUI/Preset.cpp:1300 +#: src/slic3r/GUI/PresetBundle.cpp:1684 msgid "User presets" msgstr "" -#: src/slic3r/GUI/Preset.cpp:1201 +#: src/slic3r/GUI/Preset.cpp:1213 msgid "Add/Remove materials" msgstr "" -#: src/slic3r/GUI/Preset.cpp:1203 +#: src/slic3r/GUI/Preset.cpp:1215 msgid "Add/Remove printers" msgstr "" -#: src/slic3r/GUI/Preset.cpp:1522 +#: src/slic3r/GUI/Preset.cpp:1534 msgid "filament" msgstr "" -#: src/slic3r/GUI/Preset.cpp:1523 +#: src/slic3r/GUI/Preset.cpp:1535 msgid "SLA print" msgstr "" -#: src/slic3r/GUI/PresetBundle.cpp:1704 +#: src/slic3r/GUI/PresetBundle.cpp:1711 msgid "Add/Remove filaments" msgstr "" @@ -4971,47 +4973,47 @@ msgstr "" msgid "mm³/s" msgstr "" -#: src/slic3r/GUI/Selection.cpp:146 +#: src/slic3r/GUI/Selection.cpp:147 msgid "Selection-Add" msgstr "" -#: src/slic3r/GUI/Selection.cpp:187 +#: src/slic3r/GUI/Selection.cpp:188 msgid "Selection-Remove" msgstr "" -#: src/slic3r/GUI/Selection.cpp:219 +#: src/slic3r/GUI/Selection.cpp:220 msgid "Selection-Add Object" msgstr "" -#: src/slic3r/GUI/Selection.cpp:238 +#: src/slic3r/GUI/Selection.cpp:239 msgid "Selection-Remove Object" msgstr "" -#: src/slic3r/GUI/Selection.cpp:256 +#: src/slic3r/GUI/Selection.cpp:257 msgid "Selection-Add Instance" msgstr "" -#: src/slic3r/GUI/Selection.cpp:275 +#: src/slic3r/GUI/Selection.cpp:276 msgid "Selection-Remove Instance" msgstr "" -#: src/slic3r/GUI/Selection.cpp:376 +#: src/slic3r/GUI/Selection.cpp:377 msgid "Selection-Add All" msgstr "" -#: src/slic3r/GUI/Selection.cpp:402 +#: src/slic3r/GUI/Selection.cpp:403 msgid "Selection-Remove All" msgstr "" -#: src/slic3r/GUI/Selection.cpp:939 +#: src/slic3r/GUI/Selection.cpp:940 msgid "Scale To Fit" msgstr "" -#: src/slic3r/GUI/Selection.cpp:1475 +#: src/slic3r/GUI/Selection.cpp:1477 msgid "Set Printable Instance" msgstr "" -#: src/slic3r/GUI/Selection.cpp:1475 +#: src/slic3r/GUI/Selection.cpp:1477 msgid "Set Unprintable Instance" msgstr "" @@ -5071,308 +5073,312 @@ msgstr "" msgid "Current preset is inherited from the default preset." msgstr "" -#: src/slic3r/GUI/Tab.cpp:960 -#, possible-c-format -msgid "" -"Current preset is inherited from:\n" -"\t%s" +#: src/slic3r/GUI/Tab.cpp:959 +msgid "Current preset is inherited from" msgstr "" -#: src/slic3r/GUI/Tab.cpp:964 +#: src/slic3r/GUI/Tab.cpp:963 msgid "It can't be deleted or modified." msgstr "" -#: src/slic3r/GUI/Tab.cpp:965 +#: src/slic3r/GUI/Tab.cpp:964 msgid "" "Any modifications should be saved as a new preset inherited from this one." msgstr "" -#: src/slic3r/GUI/Tab.cpp:966 +#: src/slic3r/GUI/Tab.cpp:965 msgid "To do that please specify a new name for the preset." msgstr "" -#: src/slic3r/GUI/Tab.cpp:970 +#: src/slic3r/GUI/Tab.cpp:969 msgid "Additional information:" msgstr "" -#: src/slic3r/GUI/Tab.cpp:976 +#: src/slic3r/GUI/Tab.cpp:975 msgid "printer model" msgstr "" -#: src/slic3r/GUI/Tab.cpp:984 +#: src/slic3r/GUI/Tab.cpp:983 msgid "default print profile" msgstr "" -#: src/slic3r/GUI/Tab.cpp:987 +#: src/slic3r/GUI/Tab.cpp:986 msgid "default filament profile" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1001 +#: src/slic3r/GUI/Tab.cpp:1000 msgid "default SLA material profile" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1005 +#: src/slic3r/GUI/Tab.cpp:1004 msgid "default SLA print profile" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1013 +#: src/slic3r/GUI/Tab.cpp:1012 msgid "full profile name" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1014 +#: src/slic3r/GUI/Tab.cpp:1013 msgid "symbolic profile name" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1048 src/slic3r/GUI/Tab.cpp:3598 +#: src/slic3r/GUI/Tab.cpp:1047 src/slic3r/GUI/Tab.cpp:3600 msgid "Layers and perimeters" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1053 +#: src/slic3r/GUI/Tab.cpp:1052 msgid "Vertical shells" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1064 +#: src/slic3r/GUI/Tab.cpp:1063 msgid "Horizontal shells" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1065 src/libslic3r/PrintConfig.cpp:1780 +#: src/slic3r/GUI/Tab.cpp:1064 src/libslic3r/PrintConfig.cpp:1780 msgid "Solid layers" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1069 +#: src/slic3r/GUI/Tab.cpp:1068 msgid "Minimum shell thickness" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1080 +#: src/slic3r/GUI/Tab.cpp:1079 msgid "Quality (slower slicing)" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1098 +#: src/slic3r/GUI/Tab.cpp:1097 msgid "Reducing printing time" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1110 +#: src/slic3r/GUI/Tab.cpp:1109 msgid "Skirt and brim" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1127 +#: src/slic3r/GUI/Tab.cpp:1126 msgid "Raft" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1131 +#: src/slic3r/GUI/Tab.cpp:1130 msgid "Options for support material and raft" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1146 +#: src/slic3r/GUI/Tab.cpp:1145 msgid "Speed for print moves" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1158 +#: src/slic3r/GUI/Tab.cpp:1157 msgid "Speed for non-print moves" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1161 +#: src/slic3r/GUI/Tab.cpp:1160 msgid "Modifiers" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1164 +#: src/slic3r/GUI/Tab.cpp:1163 msgid "Acceleration control (advanced)" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1171 +#: src/slic3r/GUI/Tab.cpp:1170 msgid "Autospeed (advanced)" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1179 +#: src/slic3r/GUI/Tab.cpp:1178 msgid "Multiple Extruders" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1187 +#: src/slic3r/GUI/Tab.cpp:1186 msgid "Ooze prevention" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1205 +#: src/slic3r/GUI/Tab.cpp:1204 msgid "Extrusion width" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1215 +#: src/slic3r/GUI/Tab.cpp:1214 msgid "Overlap" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1218 +#: src/slic3r/GUI/Tab.cpp:1217 msgid "Flow" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1227 +#: src/slic3r/GUI/Tab.cpp:1226 msgid "Other" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1230 src/slic3r/GUI/Tab.cpp:3665 +#: src/slic3r/GUI/Tab.cpp:1229 src/slic3r/GUI/Tab.cpp:3669 msgid "Output options" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1231 +#: src/slic3r/GUI/Tab.cpp:1230 msgid "Sequential printing" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1233 +#: src/slic3r/GUI/Tab.cpp:1232 msgid "Extruder clearance (mm)" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1238 src/slic3r/GUI/Tab.cpp:3666 +#: src/slic3r/GUI/Tab.cpp:1237 src/slic3r/GUI/Tab.cpp:3670 msgid "Output file" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1245 src/libslic3r/PrintConfig.cpp:1453 +#: src/slic3r/GUI/Tab.cpp:1244 src/libslic3r/PrintConfig.cpp:1453 msgid "Post-processing scripts" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1251 src/slic3r/GUI/Tab.cpp:1252 -#: src/slic3r/GUI/Tab.cpp:1540 src/slic3r/GUI/Tab.cpp:1541 -#: src/slic3r/GUI/Tab.cpp:2012 src/slic3r/GUI/Tab.cpp:2013 -#: src/slic3r/GUI/Tab.cpp:2128 src/slic3r/GUI/Tab.cpp:2129 -#: src/slic3r/GUI/Tab.cpp:3535 src/slic3r/GUI/Tab.cpp:3536 +#: src/slic3r/GUI/Tab.cpp:1250 src/slic3r/GUI/Tab.cpp:1251 +#: src/slic3r/GUI/Tab.cpp:1539 src/slic3r/GUI/Tab.cpp:1540 +#: src/slic3r/GUI/Tab.cpp:2014 src/slic3r/GUI/Tab.cpp:2015 +#: src/slic3r/GUI/Tab.cpp:2130 src/slic3r/GUI/Tab.cpp:2131 +#: src/slic3r/GUI/Tab.cpp:3537 src/slic3r/GUI/Tab.cpp:3538 msgid "Notes" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1258 src/slic3r/GUI/Tab.cpp:1548 -#: src/slic3r/GUI/Tab.cpp:2019 src/slic3r/GUI/Tab.cpp:2135 -#: src/slic3r/GUI/Tab.cpp:3543 src/slic3r/GUI/Tab.cpp:3671 +#: src/slic3r/GUI/Tab.cpp:1257 src/slic3r/GUI/Tab.cpp:1547 +#: src/slic3r/GUI/Tab.cpp:2021 src/slic3r/GUI/Tab.cpp:2137 +#: src/slic3r/GUI/Tab.cpp:3545 src/slic3r/GUI/Tab.cpp:3675 msgid "Dependencies" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1259 src/slic3r/GUI/Tab.cpp:1549 -#: src/slic3r/GUI/Tab.cpp:2020 src/slic3r/GUI/Tab.cpp:2136 -#: src/slic3r/GUI/Tab.cpp:3544 src/slic3r/GUI/Tab.cpp:3672 +#: src/slic3r/GUI/Tab.cpp:1258 src/slic3r/GUI/Tab.cpp:1548 +#: src/slic3r/GUI/Tab.cpp:2022 src/slic3r/GUI/Tab.cpp:2138 +#: src/slic3r/GUI/Tab.cpp:3546 src/slic3r/GUI/Tab.cpp:3676 msgid "Profile dependencies" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1323 src/slic3r/GUI/Tab.cpp:1378 +#: src/slic3r/GUI/Tab.cpp:1322 src/slic3r/GUI/Tab.cpp:1377 msgid "Filament Overrides" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1324 src/slic3r/GUI/Tab.cpp:1383 -#: src/slic3r/GUI/Tab.cpp:2370 +#: src/slic3r/GUI/Tab.cpp:1323 src/slic3r/GUI/Tab.cpp:1382 +#: src/slic3r/GUI/Tab.cpp:2372 msgid "Retraction" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1433 src/libslic3r/PrintConfig.cpp:2067 +#: src/slic3r/GUI/Tab.cpp:1432 src/libslic3r/PrintConfig.cpp:2067 msgid "Temperature" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1439 +#: src/slic3r/GUI/Tab.cpp:1438 msgid "Bed" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1444 +#: src/slic3r/GUI/Tab.cpp:1443 msgid "Cooling" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1445 src/libslic3r/PrintConfig.cpp:1355 +#: src/slic3r/GUI/Tab.cpp:1444 src/libslic3r/PrintConfig.cpp:1355 #: src/libslic3r/PrintConfig.cpp:2200 msgid "Enable" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1456 +#: src/slic3r/GUI/Tab.cpp:1455 msgid "Fan settings" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1465 +#: src/slic3r/GUI/Tab.cpp:1464 msgid "Cooling thresholds" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1471 +#: src/slic3r/GUI/Tab.cpp:1470 msgid "Filament properties" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1478 +#: src/slic3r/GUI/Tab.cpp:1477 msgid "Print speed override" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1488 +#: src/slic3r/GUI/Tab.cpp:1487 msgid "Wipe tower parameters" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1491 +#: src/slic3r/GUI/Tab.cpp:1490 msgid "Toolchange parameters with single extruder MM printers" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1505 +#: src/slic3r/GUI/Tab.cpp:1504 msgid "Ramming settings" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1527 src/slic3r/GUI/Tab.cpp:1975 +#: src/slic3r/GUI/Tab.cpp:1526 src/slic3r/GUI/Tab.cpp:1977 msgid "Custom G-code" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1528 src/slic3r/GUI/Tab.cpp:1976 +#: src/slic3r/GUI/Tab.cpp:1527 src/slic3r/GUI/Tab.cpp:1978 #: src/libslic3r/PrintConfig.cpp:1813 src/libslic3r/PrintConfig.cpp:1828 msgid "Start G-code" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1534 src/slic3r/GUI/Tab.cpp:1982 +#: src/slic3r/GUI/Tab.cpp:1533 src/slic3r/GUI/Tab.cpp:1984 #: src/libslic3r/PrintConfig.cpp:385 src/libslic3r/PrintConfig.cpp:395 msgid "End G-code" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1591 +#: src/slic3r/GUI/Tab.cpp:1590 msgid "Volumetric flow hints not available" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1677 src/slic3r/GUI/Tab.cpp:1915 +#: src/slic3r/GUI/Tab.cpp:1676 src/slic3r/GUI/Tab.cpp:1917 msgid "Test" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1687 +#: src/slic3r/GUI/Tab.cpp:1685 msgid "Could not get a valid Printer Host reference" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1693 src/slic3r/GUI/Tab.cpp:1928 +#: src/slic3r/GUI/Tab.cpp:1691 src/slic3r/GUI/Tab.cpp:1930 msgid "Success!" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1713 +#: src/slic3r/GUI/Tab.cpp:1711 msgid "" "HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" "signed certificate." msgstr "" -#: src/slic3r/GUI/Tab.cpp:1728 +#: src/slic3r/GUI/Tab.cpp:1726 msgid "Certificate files (*.crt, *.pem)|*.crt;*.pem|All files|*.*" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1729 +#: src/slic3r/GUI/Tab.cpp:1727 msgid "Open CA certificate file" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1757 -#, possible-c-format -msgid "" -"HTTPS CA File:\n" -" \tOn this system, %s uses HTTPS certificates from the system Certificate " -"Store or Keychain.\n" -" \tTo use a custom CA file, please import your CA file into Certificate " -"Store / Keychain." +#: src/slic3r/GUI/Tab.cpp:1754 src/libslic3r/PrintConfig.cpp:111 +msgid "HTTPS CA File" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1797 src/slic3r/GUI/Tab.cpp:2041 +#: src/slic3r/GUI/Tab.cpp:1755 +#, possible-c-format +msgid "" +"On this system, %s uses HTTPS certificates from the system Certificate Store " +"or Keychain." +msgstr "" + +#: src/slic3r/GUI/Tab.cpp:1756 +msgid "" +"To use a custom CA file, please import your CA file into Certificate Store / " +"Keychain." +msgstr "" + +#: src/slic3r/GUI/Tab.cpp:1799 src/slic3r/GUI/Tab.cpp:2043 msgid "Size and coordinates" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1802 src/slic3r/GUI/Tab.cpp:2046 -#: src/slic3r/GUI/Tab.cpp:3176 +#: src/slic3r/GUI/Tab.cpp:1804 src/slic3r/GUI/Tab.cpp:2048 +#: src/slic3r/GUI/Tab.cpp:3178 msgid "Set" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1834 +#: src/slic3r/GUI/Tab.cpp:1836 msgid "Capabilities" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1839 +#: src/slic3r/GUI/Tab.cpp:1841 msgid "Number of extruders of the printer." msgstr "" -#: src/slic3r/GUI/Tab.cpp:1867 +#: src/slic3r/GUI/Tab.cpp:1869 msgid "" "Single Extruder Multi Material is selected, \n" "and all extruders must have the same diameter.\n" @@ -5380,72 +5386,72 @@ msgid "" "nozzle diameter value?" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1870 src/slic3r/GUI/Tab.cpp:2340 +#: src/slic3r/GUI/Tab.cpp:1872 src/slic3r/GUI/Tab.cpp:2342 #: src/libslic3r/PrintConfig.cpp:1326 msgid "Nozzle diameter" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1900 +#: src/slic3r/GUI/Tab.cpp:1902 msgid "USB/Serial connection" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1901 src/libslic3r/PrintConfig.cpp:1661 +#: src/slic3r/GUI/Tab.cpp:1903 src/libslic3r/PrintConfig.cpp:1661 msgid "Serial port" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1906 +#: src/slic3r/GUI/Tab.cpp:1908 msgid "Rescan serial ports" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1928 +#: src/slic3r/GUI/Tab.cpp:1930 msgid "Connection to printer works correctly." msgstr "" -#: src/slic3r/GUI/Tab.cpp:1931 +#: src/slic3r/GUI/Tab.cpp:1933 msgid "Connection failed." msgstr "" -#: src/slic3r/GUI/Tab.cpp:1944 src/slic3r/GUI/Tab.cpp:2123 +#: src/slic3r/GUI/Tab.cpp:1946 src/slic3r/GUI/Tab.cpp:2125 msgid "Print Host upload" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1988 src/libslic3r/PrintConfig.cpp:153 +#: src/slic3r/GUI/Tab.cpp:1990 src/libslic3r/PrintConfig.cpp:153 msgid "Before layer change G-code" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1994 src/libslic3r/PrintConfig.cpp:1080 +#: src/slic3r/GUI/Tab.cpp:1996 src/libslic3r/PrintConfig.cpp:1080 msgid "After layer change G-code" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2000 src/libslic3r/PrintConfig.cpp:2093 +#: src/slic3r/GUI/Tab.cpp:2002 src/libslic3r/PrintConfig.cpp:2093 msgid "Tool change G-code" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2006 +#: src/slic3r/GUI/Tab.cpp:2008 msgid "Between objects G-code (for sequential printing)" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2078 +#: src/slic3r/GUI/Tab.cpp:2080 msgid "Display" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2093 +#: src/slic3r/GUI/Tab.cpp:2095 msgid "Tilt" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2094 +#: src/slic3r/GUI/Tab.cpp:2096 msgid "Tilt time" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2100 src/slic3r/GUI/Tab.cpp:3519 +#: src/slic3r/GUI/Tab.cpp:2102 src/slic3r/GUI/Tab.cpp:3521 msgid "Corrections" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2117 src/slic3r/GUI/Tab.cpp:3515 +#: src/slic3r/GUI/Tab.cpp:2119 src/slic3r/GUI/Tab.cpp:3517 msgid "Exposure" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2188 src/slic3r/GUI/Tab.cpp:2273 +#: src/slic3r/GUI/Tab.cpp:2190 src/slic3r/GUI/Tab.cpp:2275 #: 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 @@ -5453,175 +5459,175 @@ msgstr "" msgid "Machine limits" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2202 +#: src/slic3r/GUI/Tab.cpp:2204 msgid "Values in this column are for Normal mode" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2203 +#: src/slic3r/GUI/Tab.cpp:2205 msgid "Normal" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2208 +#: src/slic3r/GUI/Tab.cpp:2210 msgid "Values in this column are for Stealth mode" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2209 +#: src/slic3r/GUI/Tab.cpp:2211 msgid "Stealth" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2217 +#: src/slic3r/GUI/Tab.cpp:2219 msgid "Maximum feedrates" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2222 +#: src/slic3r/GUI/Tab.cpp:2224 msgid "Maximum accelerations" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2229 +#: src/slic3r/GUI/Tab.cpp:2231 msgid "Jerk limits" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2234 +#: src/slic3r/GUI/Tab.cpp:2236 msgid "Minimum feedrates" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2298 src/slic3r/GUI/Tab.cpp:2306 +#: src/slic3r/GUI/Tab.cpp:2300 src/slic3r/GUI/Tab.cpp:2308 msgid "Single extruder MM setup" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2307 +#: src/slic3r/GUI/Tab.cpp:2309 msgid "Single extruder multimaterial parameters" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2338 +#: src/slic3r/GUI/Tab.cpp:2340 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:2362 +#: src/slic3r/GUI/Tab.cpp:2364 msgid "Layer height limits" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2367 +#: src/slic3r/GUI/Tab.cpp:2369 msgid "Position (for multi-extruder printers)" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2373 +#: src/slic3r/GUI/Tab.cpp:2375 msgid "Only lift Z" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2386 +#: src/slic3r/GUI/Tab.cpp:2388 msgid "" "Retraction when tool is disabled (advanced settings for multi-extruder " "setups)" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2394 +#: src/slic3r/GUI/Tab.cpp:2396 msgid "Reset to Filament Color" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2575 +#: src/slic3r/GUI/Tab.cpp:2577 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:2577 +#: src/slic3r/GUI/Tab.cpp:2579 msgid "Firmware Retraction" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2919 +#: src/slic3r/GUI/Tab.cpp:2921 #, possible-c-format msgid "Default preset (%s)" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2920 +#: src/slic3r/GUI/Tab.cpp:2922 #, possible-c-format msgid "Preset (%s)" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2937 +#: src/slic3r/GUI/Tab.cpp:2939 msgid "has the following unsaved changes:" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2940 +#: src/slic3r/GUI/Tab.cpp:2942 msgid "is not compatible with printer" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2941 +#: src/slic3r/GUI/Tab.cpp:2943 msgid "is not compatible with print profile" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2943 +#: src/slic3r/GUI/Tab.cpp:2945 msgid "and it has the following unsaved changes:" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2947 +#: src/slic3r/GUI/Tab.cpp:2949 msgid "Unsaved Changes" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3045 +#: src/slic3r/GUI/Tab.cpp:3047 msgctxt "PresetName" msgid "%1% - Copy" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3068 +#: src/slic3r/GUI/Tab.cpp:3070 msgid "The supplied name is empty. It can't be saved." msgstr "" -#: src/slic3r/GUI/Tab.cpp:3073 +#: src/slic3r/GUI/Tab.cpp:3075 msgid "Cannot overwrite a system profile." msgstr "" -#: src/slic3r/GUI/Tab.cpp:3077 +#: src/slic3r/GUI/Tab.cpp:3079 msgid "Cannot overwrite an external profile." msgstr "" -#: src/slic3r/GUI/Tab.cpp:3082 +#: src/slic3r/GUI/Tab.cpp:3084 msgid "Preset with name \"%1%\" already exists." msgstr "" -#: src/slic3r/GUI/Tab.cpp:3083 +#: src/slic3r/GUI/Tab.cpp:3085 msgid "Replace?" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3121 +#: src/slic3r/GUI/Tab.cpp:3123 msgid "remove" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3121 +#: src/slic3r/GUI/Tab.cpp:3123 msgid "delete" msgstr "" #. TRN remove/delete -#: src/slic3r/GUI/Tab.cpp:3123 +#: src/slic3r/GUI/Tab.cpp:3125 msgid "Are you sure you want to %1% the selected preset?" msgstr "" #. TRN Remove/Delete -#: src/slic3r/GUI/Tab.cpp:3126 +#: src/slic3r/GUI/Tab.cpp:3128 msgid "%1% Preset" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3252 +#: src/slic3r/GUI/Tab.cpp:3254 msgid "LOCKED LOCK" msgstr "" #. TRN Description for "LOCKED LOCK" -#: src/slic3r/GUI/Tab.cpp:3254 +#: src/slic3r/GUI/Tab.cpp:3256 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:3256 +#: src/slic3r/GUI/Tab.cpp:3258 msgid "UNLOCKED LOCK" msgstr "" #. TRN Description for "UNLOCKED LOCK" -#: src/slic3r/GUI/Tab.cpp:3258 +#: src/slic3r/GUI/Tab.cpp:3260 msgid "" "indicates that some settings were changed and are not equal to the system " "(or default) values for the current option group.\n" @@ -5629,23 +5635,23 @@ msgid "" "to the system (or default) values." msgstr "" -#: src/slic3r/GUI/Tab.cpp:3263 +#: src/slic3r/GUI/Tab.cpp:3265 msgid "WHITE BULLET" msgstr "" #. TRN Description for "WHITE BULLET" -#: src/slic3r/GUI/Tab.cpp:3265 +#: src/slic3r/GUI/Tab.cpp:3267 msgid "" -"for the left button: \tindicates a non-system (or non-default) preset,\n" -"for the right button: \tindicates that the settings hasn't been modified." +"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:3268 +#: src/slic3r/GUI/Tab.cpp:3270 msgid "BACK ARROW" msgstr "" #. TRN Description for "BACK ARROW" -#: src/slic3r/GUI/Tab.cpp:3270 +#: src/slic3r/GUI/Tab.cpp:3272 msgid "" "indicates that the settings were changed and are not equal to the last saved " "preset for the current option group.\n" @@ -5653,13 +5659,13 @@ msgid "" "to the last saved preset." msgstr "" -#: src/slic3r/GUI/Tab.cpp:3280 +#: src/slic3r/GUI/Tab.cpp:3282 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:3282 +#: src/slic3r/GUI/Tab.cpp:3284 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" @@ -5667,17 +5673,17 @@ msgid "" "default) values." msgstr "" -#: src/slic3r/GUI/Tab.cpp:3285 +#: src/slic3r/GUI/Tab.cpp:3287 msgid "WHITE BULLET icon indicates a non system (or non default) preset." msgstr "" -#: src/slic3r/GUI/Tab.cpp:3288 +#: src/slic3r/GUI/Tab.cpp:3290 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:3290 +#: src/slic3r/GUI/Tab.cpp:3292 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" @@ -5685,26 +5691,26 @@ msgid "" "preset." msgstr "" -#: src/slic3r/GUI/Tab.cpp:3296 +#: src/slic3r/GUI/Tab.cpp:3298 msgid "" "LOCKED LOCK icon indicates that the value is the same as the system (or " "default) value." msgstr "" -#: src/slic3r/GUI/Tab.cpp:3297 +#: src/slic3r/GUI/Tab.cpp:3299 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:3303 +#: src/slic3r/GUI/Tab.cpp:3305 msgid "" "WHITE BULLET icon indicates that the value is the same as in the last saved " "preset." msgstr "" -#: src/slic3r/GUI/Tab.cpp:3304 +#: src/slic3r/GUI/Tab.cpp:3306 msgid "" "BACK ARROW icon indicates that the value was changed and is not equal to the " "last saved preset.\n" @@ -5712,36 +5718,36 @@ msgid "" msgstr "" #. TRN Preset -#: src/slic3r/GUI/Tab.cpp:3417 +#: src/slic3r/GUI/Tab.cpp:3419 #, possible-c-format msgid "Save %s as:" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3461 +#: src/slic3r/GUI/Tab.cpp:3463 msgid "the following suffix is not allowed:" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3465 +#: src/slic3r/GUI/Tab.cpp:3467 msgid "The supplied name is not available." msgstr "" -#: src/slic3r/GUI/Tab.cpp:3478 src/slic3r/GUI/Tab.cpp:3480 +#: src/slic3r/GUI/Tab.cpp:3480 src/slic3r/GUI/Tab.cpp:3482 msgid "Material" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3608 +#: src/slic3r/GUI/Tab.cpp:3610 msgid "Support head" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3613 +#: src/slic3r/GUI/Tab.cpp:3615 msgid "Support pillar" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3627 +#: src/slic3r/GUI/Tab.cpp:3631 msgid "Connection of the support sticks and junctions" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3632 +#: src/slic3r/GUI/Tab.cpp:3636 msgid "Automatic generation" msgstr "" @@ -5893,19 +5899,19 @@ msgid "" "choose whether to enable automatic preset updates." msgstr "" -#: src/slic3r/GUI/UpdateDialogs.cpp:286 +#: src/slic3r/GUI/UpdateDialogs.cpp:287 msgid "For more information please visit our wiki page:" msgstr "" -#: src/slic3r/GUI/UpdateDialogs.cpp:303 +#: src/slic3r/GUI/UpdateDialogs.cpp:304 msgid "Configuration updates" msgstr "" -#: src/slic3r/GUI/UpdateDialogs.cpp:303 +#: src/slic3r/GUI/UpdateDialogs.cpp:304 msgid "No updates available" msgstr "" -#: src/slic3r/GUI/UpdateDialogs.cpp:308 +#: src/slic3r/GUI/UpdateDialogs.cpp:309 #, possible-c-format msgid "%s has no configuration updates available." msgstr "" @@ -5999,30 +6005,30 @@ msgstr "" msgid "Show advanced settings" msgstr "" -#: src/slic3r/GUI/wxExtensions.cpp:703 +#: src/slic3r/GUI/wxExtensions.cpp:706 #, possible-c-format msgid "Switch to the %s mode" msgstr "" -#: src/slic3r/GUI/wxExtensions.cpp:704 +#: src/slic3r/GUI/wxExtensions.cpp:707 #, possible-c-format msgid "Current mode is %s" msgstr "" -#: src/slic3r/Utils/AstroBox.cpp:68 src/slic3r/Utils/OctoPrint.cpp:68 +#: src/slic3r/Utils/AstroBox.cpp:69 src/slic3r/Utils/OctoPrint.cpp:69 #, possible-c-format msgid "Mismatched type of print host: %s" msgstr "" -#: src/slic3r/Utils/AstroBox.cpp:83 +#: src/slic3r/Utils/AstroBox.cpp:84 msgid "Connection to AstroBox works correctly." msgstr "" -#: src/slic3r/Utils/AstroBox.cpp:89 +#: src/slic3r/Utils/AstroBox.cpp:90 msgid "Could not connect to AstroBox" msgstr "" -#: src/slic3r/Utils/AstroBox.cpp:89 +#: src/slic3r/Utils/AstroBox.cpp:92 msgid "Note: AstroBox version at least 1.1.0 is required." msgstr "" @@ -6030,21 +6036,21 @@ msgstr "" msgid "Connection to Duet works correctly." msgstr "" -#: src/slic3r/Utils/Duet.cpp:54 +#: src/slic3r/Utils/Duet.cpp:55 msgid "Could not connect to Duet" msgstr "" -#: src/slic3r/Utils/Duet.cpp:82 src/slic3r/Utils/Duet.cpp:137 -#: src/slic3r/Utils/FlashAir.cpp:119 src/slic3r/Utils/FlashAir.cpp:140 -#: src/slic3r/Utils/FlashAir.cpp:156 +#: src/slic3r/Utils/Duet.cpp:84 src/slic3r/Utils/Duet.cpp:139 +#: src/slic3r/Utils/FlashAir.cpp:122 src/slic3r/Utils/FlashAir.cpp:143 +#: src/slic3r/Utils/FlashAir.cpp:159 msgid "Unknown error occured" msgstr "" -#: src/slic3r/Utils/Duet.cpp:131 +#: src/slic3r/Utils/Duet.cpp:133 msgid "Wrong password" msgstr "" -#: src/slic3r/Utils/Duet.cpp:134 +#: src/slic3r/Utils/Duet.cpp:136 msgid "Could not get resources to create a new connection" msgstr "" @@ -6137,33 +6143,33 @@ msgstr "" msgid "Connection to FlashAir works correctly and upload is enabled." msgstr "" -#: src/slic3r/Utils/FlashAir.cpp:73 +#: src/slic3r/Utils/FlashAir.cpp:74 msgid "Could not connect to FlashAir" msgstr "" -#: src/slic3r/Utils/FlashAir.cpp:73 +#: src/slic3r/Utils/FlashAir.cpp:76 msgid "" "Note: FlashAir with firmware 2.00.02 or newer and activated upload function " "is required." msgstr "" -#: src/slic3r/Utils/OctoPrint.cpp:83 +#: src/slic3r/Utils/OctoPrint.cpp:84 msgid "Connection to OctoPrint works correctly." msgstr "" -#: src/slic3r/Utils/OctoPrint.cpp:89 +#: src/slic3r/Utils/OctoPrint.cpp:90 msgid "Could not connect to OctoPrint" msgstr "" -#: src/slic3r/Utils/OctoPrint.cpp:89 +#: src/slic3r/Utils/OctoPrint.cpp:92 msgid "Note: OctoPrint version at least 1.1.0 is required." msgstr "" -#: src/slic3r/Utils/OctoPrint.cpp:176 +#: src/slic3r/Utils/OctoPrint.cpp:179 msgid "Connection to Prusa SL1 works correctly." msgstr "" -#: src/slic3r/Utils/OctoPrint.cpp:181 +#: src/slic3r/Utils/OctoPrint.cpp:185 msgid "Could not connect to Prusa SLA" msgstr "" @@ -6325,7 +6331,7 @@ msgstr "" #: src/libslic3r/GCode.cpp:639 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." +"Try to repair the model or change its orientation on the bed." msgstr "" #: src/libslic3r/ExtrusionEntity.cpp:323 @@ -6502,34 +6508,34 @@ msgstr "" msgid "Generating G-code" msgstr "" -#: src/libslic3r/SLAPrint.cpp:613 +#: src/libslic3r/SLAPrint.cpp:615 msgid "" "Cannot proceed without support points! Add support points or disable support " "generation." msgstr "" -#: src/libslic3r/SLAPrint.cpp:625 +#: src/libslic3r/SLAPrint.cpp:627 msgid "" "Elevation is too low for object. Use the \"Pad around object\" feature to " "print the object without elevation." msgstr "" -#: src/libslic3r/SLAPrint.cpp:631 +#: src/libslic3r/SLAPrint.cpp:633 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:646 +#: src/libslic3r/SLAPrint.cpp:648 msgid "Exposition time is out of printer profile bounds." msgstr "" -#: src/libslic3r/SLAPrint.cpp:653 +#: src/libslic3r/SLAPrint.cpp:655 msgid "Initial exposition time is out of printer profile bounds." msgstr "" -#: src/libslic3r/SLAPrint.cpp:760 +#: src/libslic3r/SLAPrint.cpp:762 msgid "Slicing done" msgstr "" @@ -6670,10 +6676,6 @@ msgid "" "the API Key or the password required for authentication." msgstr "" -#: src/libslic3r/PrintConfig.cpp:111 -msgid "HTTPS CA File" -msgstr "" - #: src/libslic3r/PrintConfig.cpp:112 msgid "" "Custom CA certificate file can be specified for HTTPS OctoPrint connections, " @@ -6786,8 +6788,8 @@ 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:1894 src/libslic3r/PrintConfig.cpp:2049 -#: src/libslic3r/PrintConfig.cpp:2247 src/libslic3r/PrintConfig.cpp:2727 -#: src/libslic3r/PrintConfig.cpp:2848 +#: src/libslic3r/PrintConfig.cpp:2247 src/libslic3r/PrintConfig.cpp:2737 +#: src/libslic3r/PrintConfig.cpp:2858 msgid "°" msgstr "" @@ -6802,7 +6804,7 @@ 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:2425 -#: src/libslic3r/PrintConfig.cpp:2767 +#: src/libslic3r/PrintConfig.cpp:2777 msgid "%" msgstr "" @@ -7101,7 +7103,7 @@ msgid "Extra perimeters if needed" msgstr "" #: src/libslic3r/PrintConfig.cpp:479 -#, possible-c-format +#, no-c-format msgid "" "Add more perimeters when needed for avoiding gaps in sloping walls. Slic3r " "keeps adding perimeters, until more than 70% of the loop immediately above " @@ -7829,7 +7831,7 @@ msgid "This setting represents the maximum speed of your fan." msgstr "" #: src/libslic3r/PrintConfig.cpp:1227 -#, possible-c-format +#, no-c-format msgid "" "This is the highest printable layer height for this extruder, used to cap " "the variable layer height and support layer height. Maximum recommended " @@ -8525,7 +8527,7 @@ msgid "" "plane." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1903 src/libslic3r/PrintConfig.cpp:2676 +#: src/libslic3r/PrintConfig.cpp:1903 src/libslic3r/PrintConfig.cpp:2686 msgid "" "Only create support if it lies on a build plate. Don't create support on a " "print." @@ -9188,134 +9190,144 @@ msgid "Diameter in mm of the support pillars" msgstr "" #: src/libslic3r/PrintConfig.cpp:2658 +msgid "Max bridges on a pillar" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:2660 +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:2668 msgid "Support pillar connection mode" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2659 +#: src/libslic3r/PrintConfig.cpp:2669 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:2667 +#: src/libslic3r/PrintConfig.cpp:2677 msgid "Zig-Zag" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2668 +#: src/libslic3r/PrintConfig.cpp:2678 msgid "Cross" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2669 +#: src/libslic3r/PrintConfig.cpp:2679 msgid "Dynamic" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2681 +#: src/libslic3r/PrintConfig.cpp:2691 msgid "Pillar widening factor" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2683 +#: src/libslic3r/PrintConfig.cpp:2693 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:2692 +#: src/libslic3r/PrintConfig.cpp:2702 msgid "Support base diameter" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2694 +#: src/libslic3r/PrintConfig.cpp:2704 msgid "Diameter in mm of the pillar base" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2702 +#: src/libslic3r/PrintConfig.cpp:2712 msgid "Support base height" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2704 +#: src/libslic3r/PrintConfig.cpp:2714 msgid "The height of the pillar base cone" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2711 +#: src/libslic3r/PrintConfig.cpp:2721 msgid "Support base safety distance" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2714 +#: src/libslic3r/PrintConfig.cpp:2724 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:2724 +#: src/libslic3r/PrintConfig.cpp:2734 msgid "Critical angle" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2726 +#: src/libslic3r/PrintConfig.cpp:2736 msgid "The default angle for connecting support sticks and junctions." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2734 +#: src/libslic3r/PrintConfig.cpp:2744 msgid "Max bridge length" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2736 +#: src/libslic3r/PrintConfig.cpp:2746 msgid "The max length of a bridge" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2743 +#: src/libslic3r/PrintConfig.cpp:2753 msgid "Max pillar linking distance" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2745 +#: src/libslic3r/PrintConfig.cpp:2755 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:2753 +#: src/libslic3r/PrintConfig.cpp:2763 msgid "Object elevation" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2755 +#: src/libslic3r/PrintConfig.cpp:2765 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:2766 +#: src/libslic3r/PrintConfig.cpp:2776 msgid "This is a relative measure of support points density." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2772 +#: src/libslic3r/PrintConfig.cpp:2782 msgid "Minimal distance of the support points" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2774 +#: src/libslic3r/PrintConfig.cpp:2784 msgid "No support points will be placed closer than this threshold." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2780 +#: src/libslic3r/PrintConfig.cpp:2790 msgid "Use pad" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2782 +#: src/libslic3r/PrintConfig.cpp:2792 msgid "Add a pad underneath the supported model" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2787 +#: src/libslic3r/PrintConfig.cpp:2797 msgid "Pad wall thickness" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2789 +#: src/libslic3r/PrintConfig.cpp:2799 msgid "The thickness of the pad and its optional cavity walls." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2797 +#: src/libslic3r/PrintConfig.cpp:2807 msgid "Pad wall height" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2798 +#: src/libslic3r/PrintConfig.cpp:2808 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 " @@ -9323,115 +9335,115 @@ msgid "" "difficult." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2811 +#: src/libslic3r/PrintConfig.cpp:2821 msgid "Pad brim size" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2812 +#: src/libslic3r/PrintConfig.cpp:2822 msgid "How far should the pad extend around the contained geometry" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2822 +#: src/libslic3r/PrintConfig.cpp:2832 msgid "Max merge distance" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2824 +#: src/libslic3r/PrintConfig.cpp:2834 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:2844 +#: src/libslic3r/PrintConfig.cpp:2854 msgid "Pad wall slope" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2846 +#: src/libslic3r/PrintConfig.cpp:2856 msgid "" "The slope of the pad wall relative to the bed plane. 90 degrees means " "straight walls." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2855 +#: src/libslic3r/PrintConfig.cpp:2865 msgid "Pad around object" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2857 +#: src/libslic3r/PrintConfig.cpp:2867 msgid "Create pad around object and ignore the support elevation" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2862 +#: src/libslic3r/PrintConfig.cpp:2872 msgid "Pad around object everywhere" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2864 +#: src/libslic3r/PrintConfig.cpp:2874 msgid "Force pad around object everywhere" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2869 +#: src/libslic3r/PrintConfig.cpp:2879 msgid "Pad object gap" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2871 +#: src/libslic3r/PrintConfig.cpp:2881 msgid "" "The gap between the object bottom and the generated pad in zero elevation " "mode." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2880 +#: src/libslic3r/PrintConfig.cpp:2890 msgid "Pad object connector stride" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2882 +#: src/libslic3r/PrintConfig.cpp:2892 msgid "" "Distance between two connector sticks which connect the object and the " "generated pad." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2889 +#: src/libslic3r/PrintConfig.cpp:2899 msgid "Pad object connector width" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2891 +#: src/libslic3r/PrintConfig.cpp:2901 msgid "" "Width of the connector sticks which connect the object and the generated pad." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2898 +#: src/libslic3r/PrintConfig.cpp:2908 msgid "Pad object connector penetration" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2901 +#: src/libslic3r/PrintConfig.cpp:2911 msgid "How much should the tiny connectors penetrate into the model body." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2908 +#: src/libslic3r/PrintConfig.cpp:2918 msgid "Enable hollowing" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2910 +#: src/libslic3r/PrintConfig.cpp:2920 msgid "Hollow out a model to have an empty interior" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2915 +#: src/libslic3r/PrintConfig.cpp:2925 msgid "Wall thickness" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2917 +#: src/libslic3r/PrintConfig.cpp:2927 msgid "Minimum wall thickness of a hollowed model." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2925 +#: src/libslic3r/PrintConfig.cpp:2935 msgid "Accuracy" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2927 +#: src/libslic3r/PrintConfig.cpp:2937 msgid "" "Performance vs accuracy of calculation. Lower values may produce unwanted " "artifacts." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2937 +#: src/libslic3r/PrintConfig.cpp:2947 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 " @@ -9440,255 +9452,255 @@ msgid "" "most." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3320 +#: src/libslic3r/PrintConfig.cpp:3330 msgid "Export OBJ" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3321 +#: src/libslic3r/PrintConfig.cpp:3331 msgid "Export the model(s) as OBJ." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3332 +#: src/libslic3r/PrintConfig.cpp:3342 msgid "Export SLA" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3333 +#: src/libslic3r/PrintConfig.cpp:3343 msgid "Slice the model and export SLA printing layers as PNG." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3338 +#: src/libslic3r/PrintConfig.cpp:3348 msgid "Export 3MF" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3339 +#: src/libslic3r/PrintConfig.cpp:3349 msgid "Export the model(s) as 3MF." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3343 +#: src/libslic3r/PrintConfig.cpp:3353 msgid "Export AMF" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3344 +#: src/libslic3r/PrintConfig.cpp:3354 msgid "Export the model(s) as AMF." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3348 +#: src/libslic3r/PrintConfig.cpp:3358 msgid "Export STL" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3349 +#: src/libslic3r/PrintConfig.cpp:3359 msgid "Export the model(s) as STL." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3354 +#: src/libslic3r/PrintConfig.cpp:3364 msgid "Slice the model and export toolpaths as G-code." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3359 +#: src/libslic3r/PrintConfig.cpp:3369 msgid "Slice" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3360 +#: src/libslic3r/PrintConfig.cpp:3370 msgid "" "Slice the model as FFF or SLA based on the printer_technology configuration " "value." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3365 +#: src/libslic3r/PrintConfig.cpp:3375 msgid "Help" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3366 +#: src/libslic3r/PrintConfig.cpp:3376 msgid "Show this help." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3371 +#: src/libslic3r/PrintConfig.cpp:3381 msgid "Help (FFF options)" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3372 +#: src/libslic3r/PrintConfig.cpp:3382 msgid "Show the full list of print/G-code configuration options." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3376 +#: src/libslic3r/PrintConfig.cpp:3386 msgid "Help (SLA options)" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3377 +#: src/libslic3r/PrintConfig.cpp:3387 msgid "Show the full list of SLA print configuration options." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3381 +#: src/libslic3r/PrintConfig.cpp:3391 msgid "Output Model Info" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3382 +#: src/libslic3r/PrintConfig.cpp:3392 msgid "Write information about the model to the console." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3386 +#: src/libslic3r/PrintConfig.cpp:3396 msgid "Save config file" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3387 +#: src/libslic3r/PrintConfig.cpp:3397 msgid "Save configuration to the specified file." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3397 +#: src/libslic3r/PrintConfig.cpp:3407 msgid "Align XY" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3398 +#: src/libslic3r/PrintConfig.cpp:3408 msgid "Align the model to the given point." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3403 +#: src/libslic3r/PrintConfig.cpp:3413 msgid "Cut model at the given Z." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3424 +#: src/libslic3r/PrintConfig.cpp:3434 msgid "Center" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3425 +#: src/libslic3r/PrintConfig.cpp:3435 msgid "Center the print around the given center." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3429 +#: src/libslic3r/PrintConfig.cpp:3439 msgid "Don't arrange" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3430 +#: src/libslic3r/PrintConfig.cpp:3440 msgid "" "Do not rearrange the given models before merging and keep their original XY " "coordinates." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3433 +#: src/libslic3r/PrintConfig.cpp:3443 msgid "Duplicate" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3434 +#: src/libslic3r/PrintConfig.cpp:3444 msgid "Multiply copies by this factor." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3438 +#: src/libslic3r/PrintConfig.cpp:3448 msgid "Duplicate by grid" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3439 +#: src/libslic3r/PrintConfig.cpp:3449 msgid "Multiply copies by creating a grid." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3442 +#: src/libslic3r/PrintConfig.cpp:3452 msgid "Merge" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3443 +#: src/libslic3r/PrintConfig.cpp:3453 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:3448 +#: src/libslic3r/PrintConfig.cpp:3458 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:3452 +#: src/libslic3r/PrintConfig.cpp:3462 msgid "Rotation angle around the Z axis in degrees." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3456 +#: src/libslic3r/PrintConfig.cpp:3466 msgid "Rotate around X" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3457 +#: src/libslic3r/PrintConfig.cpp:3467 msgid "Rotation angle around the X axis in degrees." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3461 +#: src/libslic3r/PrintConfig.cpp:3471 msgid "Rotate around Y" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3462 +#: src/libslic3r/PrintConfig.cpp:3472 msgid "Rotation angle around the Y axis in degrees." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3467 +#: src/libslic3r/PrintConfig.cpp:3477 msgid "Scaling factor or percentage." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3472 +#: src/libslic3r/PrintConfig.cpp:3482 msgid "" "Detect unconnected parts in the given model(s) and split them into separate " "objects." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3475 +#: src/libslic3r/PrintConfig.cpp:3485 msgid "Scale to Fit" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3476 +#: src/libslic3r/PrintConfig.cpp:3486 msgid "Scale to fit the given volume." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3485 +#: src/libslic3r/PrintConfig.cpp:3495 msgid "Ignore non-existent config files" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3486 +#: src/libslic3r/PrintConfig.cpp:3496 msgid "Do not fail if a file supplied to --load does not exist." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3489 +#: src/libslic3r/PrintConfig.cpp:3499 msgid "Load config file" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3490 +#: src/libslic3r/PrintConfig.cpp:3500 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:3493 +#: src/libslic3r/PrintConfig.cpp:3503 msgid "Output File" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3494 +#: src/libslic3r/PrintConfig.cpp:3504 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:3504 +#: src/libslic3r/PrintConfig.cpp:3514 msgid "Data directory" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3505 +#: src/libslic3r/PrintConfig.cpp:3515 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:3508 +#: src/libslic3r/PrintConfig.cpp:3518 msgid "Logging level" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3509 +#: src/libslic3r/PrintConfig.cpp:3519 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:3515 +#: src/libslic3r/PrintConfig.cpp:3525 msgid "Render with a software renderer" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3516 +#: src/libslic3r/PrintConfig.cpp:3526 msgid "" "Render with a software renderer. The bundled MESA software renderer is " "loaded instead of the default OpenGL driver." diff --git a/resources/localization/cs/PrusaSlicer.mo b/resources/localization/cs/PrusaSlicer.mo index d1105a97ec..f57e6ad853 100644 Binary files a/resources/localization/cs/PrusaSlicer.mo and b/resources/localization/cs/PrusaSlicer.mo differ diff --git a/resources/localization/cs/PrusaSlicer_cs.po b/resources/localization/cs/PrusaSlicer_cs.po index a892a4dac6..a9c7dab9c4 100644 --- a/resources/localization/cs/PrusaSlicer_cs.po +++ b/resources/localization/cs/PrusaSlicer_cs.po @@ -5,7 +5,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -"X-Generator: Poedit 2.2.1\n" +"X-Generator: Poedit 2.3\n" "Project-Id-Version: \n" "POT-Creation-Date: \n" "PO-Revision-Date: \n" @@ -1561,6 +1561,10 @@ msgstr "Kubická" msgid "Current mode is %s" msgstr "Aktuální režim je %s" +#: src/slic3r/GUI/Tab.cpp:959 +msgid "Current preset is inherited from" +msgstr "Aktuální nastavení je zděděné od" + #: src/slic3r/GUI/Tab.cpp:957 msgid "Current preset is inherited from the default preset." msgstr "Aktuální nastavení je zděděno z výchozího nastavení." @@ -2136,6 +2140,18 @@ msgstr "Upravit značku - Pravé tlačítko myši" msgid "Editing" msgstr "Editace" +#: src/slic3r/GUI/MainFrame.cpp:547 +msgid "Ejec&t SD card / Flash drive" +msgstr "Vysunou&t SD kartu / Flash disk" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:126 +msgid "Eject SD card / Flash drive" +msgstr "Vysunout SD kartu / Flash disk" + +#: src/slic3r/GUI/MainFrame.cpp:547 +msgid "Eject SD card / Flash drive after the G-code was exported to it." +msgstr "Vysunout SD kartu / Flash disk po vyexportování G-codu." + #: src/libslic3r/PrintConfig.cpp:118 msgid "Elephant foot compensation" msgstr "Kompenzace rozplácnutí první vrstvy" @@ -2426,6 +2442,10 @@ msgstr "Exportovat stávající plochu jako AMF" msgid "Export current plate as G-code" msgstr "Exportovat stávající plochu do G-code" +#: src/slic3r/GUI/MainFrame.cpp:521 +msgid "Export current plate as G-code to SD card / Flash drive" +msgstr "Exportovat aktuální podložku jako G-code na SD kartu / Flash disk" + #: src/slic3r/GUI/MainFrame.cpp:486 msgid "Export current plate as STL" msgstr "Exportovat stávající plochu jako STL" @@ -2447,6 +2467,10 @@ msgstr "Exportovat úplné zdrojové cesty modelů a dílů do souborů 3mf a am msgid "Export G-code" msgstr "Exportovat G-code" +#: src/slic3r/GUI/MainFrame.cpp:521 +msgid "Export G-code to SD card / Flash drive" +msgstr "Exportovat G-code na SD kartu / Flash disk" + #: src/libslic3r/PrintConfig.cpp:3320 msgid "Export OBJ" msgstr "Exportovat OBJ" @@ -2956,6 +2980,15 @@ msgstr "" "na levé straně: indikuje nesystémové (jiné než výchozí) přednastavení,\n" "na pravé straně: indikuje, že nastavení nebylo změněno." +#. TRN Description for "WHITE BULLET" +#: src/slic3r/GUI/Tab.cpp:3267 +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 "" +"na levé straně: indikuje nesystémové (jiné než výchozí) přednastavení,\n" +"na pravé straně: indikuje, že nastavení nebylo změněno." + #: src/slic3r/GUI/ConfigManipulation.cpp:136 msgid "" "For the Wipe Tower to work with the soluble supports, the support layers\n" @@ -3589,7 +3622,9 @@ msgstr "indikuje, že nastavení jsou stejná jako systémové (výchozí) hodno msgid "" "indicates that the settings were changed and are not equal to the last saved preset for the current option group.\n" "Click the BACK ARROW icon to reset all settings for the current option group to the last saved preset." -msgstr "indikuje, že došlo ke změně nastavení, které není shodné s naposledy uloženým přednastavením pro aktuální skupinu nastavení. Klikněte na ikonu ŠIPKY ZPĚT pro reset všech nastavení pro aktuální skupinu nastavení na naposledy uložené přednastavení." +msgstr "" +"indikuje, že došlo ke změně nastavení, které není shodné s naposledy uloženým přednastavením pro aktuální skupinu nastavení.\n" +"Klikněte na ikonu ŠIPKY ZPĚT pro reset všech nastavení pro aktuální skupinu nastavení na naposledy uložené přednastavení." #: src/slic3r/GUI/ConfigManipulation.cpp:211 #: src/slic3r/GUI/GUI_ObjectList.cpp:35 src/slic3r/GUI/GUI_ObjectList.cpp:96 @@ -4118,6 +4153,10 @@ msgstr "Maximum" msgid "Max bridge length" msgstr "Maximální délka mostu" +#: src/libslic3r/PrintConfig.cpp:2658 +msgid "Max bridges on a pillar" +msgstr "Max počet mostů na sloupu" + #: src/libslic3r/PrintConfig.cpp:2822 msgid "Max merge distance" msgstr "Maximální vzdálenost pro sloučení" @@ -4286,6 +4325,10 @@ msgstr "Maximální ryv Y" msgid "Maximum jerk Z" msgstr "Maximální ryv Z" +#: src/libslic3r/PrintConfig.cpp:2660 +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 "Maximální počet mostů, které mohou být umístěny na podpěrný sloup. Mosty drží hroty podpěr a připojují se ke sloupům jako malé větve." + #: src/libslic3r/PrintConfig.cpp:598 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 "Maximální povolený objem průtoku pro tento filament. Omezuje maximální rychlost průtoku pro tisk až na minimální rychlost průtoku pro tisk a filament. Zadejte nulu pro nastavení bez omezení." @@ -4957,6 +5000,11 @@ msgstr "současného Objektu" msgid "Offset" msgstr "Odsazení" +#: src/slic3r/GUI/Tab.cpp:1755 +#, c-format +msgid "On this system, %s uses HTTPS certificates from the system Certificate Store or Keychain." +msgstr "V tomto systému používá %s certifikáty HTTPS ze systému Certificate Store nebo Keychain." + #: src/slic3r/GUI/DoubleSlider.cpp:950 msgid "One layer mode" msgstr "Zobrazení po jedné vrstvě" @@ -6430,6 +6478,16 @@ msgstr "" "NE, pokud chcete, aby se všechny změny nástroje přepnout na změny barev,\n" "nebo ZRUŠIT pro ponechání beze změny." +#: src/slic3r/GUI/DoubleSlider.cpp:1917 +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 "" +"Vyberte ANO, pokud chcete odstranit všechny uložené změny nástroje,\n" +"NE, pokud chcete, aby se všechny změny nástroje přepnout na změny barev,\n" +"nebo ZRUŠIT pro ponechání beze změny." + #: src/slic3r/GUI/Selection.cpp:146 msgid "Selection-Add" msgstr "Výběř - Přidání" @@ -7569,7 +7627,7 @@ msgstr "Textura" #: src/slic3r/GUI/ConfigManipulation.cpp:208 msgid "The %1% infill pattern is not supposed to work at 100%% density." -msgstr "Vzor výplně %1% není určen pro 100 %% hustotu výplně." +msgstr "Vzor výplně %1% není určen pro 100%% hustotu výplně." #: src/slic3r/GUI/FirmwareDialog.cpp:548 #, c-format @@ -7737,6 +7795,14 @@ msgstr "Vybraný objekt nemůže být rozdělen, protože obsahuje více než je msgid "The selected object couldn't be split because it contains only one part." msgstr "Vybraný objekt nemůže být rozdělen, protože obsahuje pouze jednu část." +#: src/slic3r/GUI/MainFrame.cpp:432 +msgid "" +"The selected project is no longer available.\n" +"Do you want to remove it from the recent projects list ?" +msgstr "" +"Vybraný projekt již není k dispozici.\n" +"Chcete ho odstranit ze seznamu posledních projektů?" + #: src/slic3r/GUI/MainFrame.cpp:422 msgid "The selected project is no more available" msgstr "Vybraný projekt již není dostupný" @@ -8087,6 +8153,10 @@ msgstr "Nejmenší tisknutelná výška vrstvy pro tento extruder. Omezuje rozli 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 "To je obvykle způsobeno zanedbatelně malým množstvím extrudovaného materiálu nebo chybným modelem. Zkuste model opravit nebo změnit jeho orientaci na podložce." +#: src/libslic3r/GCode.cpp:639 +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 "To je obvykle způsobeno zanedbatelně malým množstvím extrudovaného materiálu nebo chybným modelem. Zkuste model opravit nebo změnit jeho orientaci na podložce." + #: src/libslic3r/PrintConfig.cpp:2215 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 "Tato matice popisuje objemy (v kubických milimetrech) nutné k vyčištění nového filamentu na čistící věži pro danou dvojici nástrojů." @@ -8228,6 +8298,10 @@ msgstr "Na objekty" msgid "To parts" msgstr "Na části" +#: src/slic3r/GUI/Tab.cpp:1756 +msgid "To use a custom CA file, please import your CA file into Certificate Store / Keychain." +msgstr "Chcete-li použít vlastní soubor CA, importujte soubor CA do Certificate Store / Keychain." + #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:263 #, c-format msgid "Toggle %c axis mirroring" diff --git a/resources/localization/de/PrusaSlicer.mo b/resources/localization/de/PrusaSlicer.mo index fe2a2a42d5..67e23b0130 100644 Binary files a/resources/localization/de/PrusaSlicer.mo and b/resources/localization/de/PrusaSlicer.mo differ diff --git a/resources/localization/de/PrusaSlicer_de.po b/resources/localization/de/PrusaSlicer_de.po index e404fed5c0..f1ddeeab0b 100644 --- a/resources/localization/de/PrusaSlicer_de.po +++ b/resources/localization/de/PrusaSlicer_de.po @@ -5,7 +5,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 2.2.1\n" +"X-Generator: Poedit 2.3\n" "Project-Id-Version: \n" "POT-Creation-Date: \n" "PO-Revision-Date: \n" @@ -1557,6 +1557,10 @@ msgstr "Kubisch" msgid "Current mode is %s" msgstr "Aktueller Modus ist %s" +#: src/slic3r/GUI/Tab.cpp:959 +msgid "Current preset is inherited from" +msgstr "Aktuelle Voreinstellung ist abgeleitet von" + #: src/slic3r/GUI/Tab.cpp:957 msgid "Current preset is inherited from the default preset." msgstr "Aktuelle Voreinstellung ist abgeleitet von der Standardvoreinstellung." @@ -2952,6 +2956,15 @@ msgstr "" "Beim linken Knopf: zeigt eine Nicht-System- (oder Nicht-Standard-) Einstellung an.\n" "Beim rechten Knopf: zeigt an, dass die Einstellung nicht geändert wurde." +#. TRN Description for "WHITE BULLET" +#: src/slic3r/GUI/Tab.cpp:3267 +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 "" +"Beim linken Knopf: zeigt eine Nicht-System- (oder Nicht-Standard-) Einstellung an.\n" +"Beim rechten Knopf: zeigt an, dass die Einstellung nicht geändert wurde." + #: src/slic3r/GUI/ConfigManipulation.cpp:136 msgid "" "For the Wipe Tower to work with the soluble supports, the support layers\n" @@ -3582,7 +3595,7 @@ msgid "" "indicates that the settings were changed and are not equal to the last saved preset for the current option group.\n" "Click the BACK ARROW icon to reset all settings for the current option group to the last saved preset." msgstr "" -"zeigt an, dass die Einstellungen geändert wurden und nicht mit dem zuletzt gespeicherten Preset für die aktuelle Optionsgruppe übereinstimmen. \n" +"zeigt an, dass die Einstellungen geändert wurden und nicht mit dem zuletzt gespeicherten Preset für die aktuelle Optionsgruppe übereinstimmen.\n" "Klicken Sie auf das Symbol PFEIL ZURÜCK, um alle Einstellungen für die aktuelle Optionsgruppe auf das zuletzt gespeicherte Preset zurückzusetzen." #: src/slic3r/GUI/ConfigManipulation.cpp:211 @@ -4112,6 +4125,10 @@ msgstr "Max" msgid "Max bridge length" msgstr "Max Überbrückungslänge" +#: src/libslic3r/PrintConfig.cpp:2658 +msgid "Max bridges on a pillar" +msgstr "Max Brücken auf einem Pfeiler" + #: src/libslic3r/PrintConfig.cpp:2822 msgid "Max merge distance" msgstr "Maximaler Zusammenfügeabstand" @@ -4280,6 +4297,10 @@ msgstr "Maximaler Ruck Y" msgid "Maximum jerk Z" msgstr "Maximaler Ruck Z" +#: src/libslic3r/PrintConfig.cpp:2660 +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 "Maximale Anzahl von Brücken, die auf einen Pfeiler gesetzt werden können. Brücken halten Stützpunkt-Nadelköpfe und verbinden sich als kleine Äste mit den Pfeilern." + #: src/libslic3r/PrintConfig.cpp:598 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 "Maximale volumetrische Geschwindigkeit, die für dieses Filament zulässig ist. Begrenzt die maximale volumetrische Geschwindigkeit eines Drucks auf das Minimum von Druck- und Filament-Volumengeschwindigkeit. Wird auf null gesetzt, wenn es keine Begrenzung gibt." @@ -4951,6 +4972,11 @@ msgstr "des aktuellen Objekts" msgid "Offset" msgstr "Offset" +#: src/slic3r/GUI/Tab.cpp:1755 +#, c-format +msgid "On this system, %s uses HTTPS certificates from the system Certificate Store or Keychain." +msgstr "Auf diesem System verwendet %s HTTPS-Zertifikate aus dem System Zertifikatsspeicher oder Schlüsselbund." + #: src/slic3r/GUI/DoubleSlider.cpp:950 msgid "One layer mode" msgstr "Eine Schicht Modus" @@ -6421,6 +6447,16 @@ msgstr "" "NEIN, wenn Sie möchten, dass alle Werkzeugänderungen auf Farbwechsel umgestellt werden, \n" "oder ABBRECHEN, um sie unverändert zu lassen." +#: src/slic3r/GUI/DoubleSlider.cpp:1917 +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 "" +"Wählen Sie JA, wenn Sie alle gespeicherten Werkzeugänderungen löschen möchten, \n" +"NEIN, wenn Sie möchten, dass alle Werkzeugänderungen auf Farbwechsel umgestellt werden, \n" +"oder ABBRECHEN, um sie unverändert zu lassen." + #: src/slic3r/GUI/Selection.cpp:146 msgid "Selection-Add" msgstr "Auswahl hinzufügen" @@ -7733,6 +7769,14 @@ msgstr "Das ausgewählte Objekt konnte nicht getrennt werden, weil es aus mehr a msgid "The selected object couldn't be split because it contains only one part." msgstr "Das ausgewählte Objekt konnte nicht getrennt werden, da es nur aus einem Teil besteht." +#: src/slic3r/GUI/MainFrame.cpp:432 +msgid "" +"The selected project is no longer available.\n" +"Do you want to remove it from the recent projects list ?" +msgstr "" +"Das ausgewählte Projekt ist nicht mehr verfügbar.\n" +"Wollen Sie es aus der Liste der letzten Projekte entfernen ?" + #: src/slic3r/GUI/MainFrame.cpp:422 msgid "The selected project is no more available" msgstr "Das ausgewählte Projekt ist nicht mehr verfügbar" @@ -8077,6 +8121,10 @@ msgstr "Dies ist die niedrigste druckbare Schichthöhe für diesen Extruder und 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 "Dies wird in der Regel durch vernachlässigbar kleine Extrusionen oder durch ein fehlerhaftes Modell verursacht. Versuchen Sie, das Modell zu reparieren oder seine Ausrichtung auf dem Druckbett zu ändern." +#: src/libslic3r/GCode.cpp:639 +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 "Dies wird in der Regel durch vernachlässigbar kleine Extrusionen oder durch ein fehlerhaftes Modell verursacht. Versuchen Sie, das Modell zu reparieren oder seine Ausrichtung auf dem Druckbett zu ändern." + #: src/libslic3r/PrintConfig.cpp:2215 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 "Diese Matrix beschreibt die Volumina (in Kubikmillimetern), die benötigt werden, um das neue Filament auf dem Reinigungsturm für ein bestimmtes Werkzeugpaar zu reinigen." @@ -8218,6 +8266,10 @@ msgstr "Zu Objekten" msgid "To parts" msgstr "Zu Teilen" +#: src/slic3r/GUI/Tab.cpp:1756 +msgid "To use a custom CA file, please import your CA file into Certificate Store / Keychain." +msgstr "Um eine benutzerdefinierte CA-Datei zu verwenden, importieren Sie bitte Ihre CA-Datei in den Zertifikatsspeicher / Schlüsselbund." + #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:263 #, c-format msgid "Toggle %c axis mirroring" diff --git a/resources/localization/es/PrusaSlicer.mo b/resources/localization/es/PrusaSlicer.mo index 6f8e14bead..b6ac06005a 100644 Binary files a/resources/localization/es/PrusaSlicer.mo and b/resources/localization/es/PrusaSlicer.mo differ diff --git a/resources/localization/es/PrusaSlicer_es.po b/resources/localization/es/PrusaSlicer_es.po index 367d779c02..a82b4905f4 100644 --- a/resources/localization/es/PrusaSlicer_es.po +++ b/resources/localization/es/PrusaSlicer_es.po @@ -5,12 +5,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 1.8.7.1\n" -"Project-Id-Version: \n" -"POT-Creation-Date: \n" -"PO-Revision-Date: \n" -"Last-Translator: \n" -"Language-Team: \n" +"X-Generator: PhraseApp (phraseapp.com)\n" #: src/slic3r/GUI/MainFrame.cpp:66 msgid " - Remember to check for updates at http://github.com/prusa3d/PrusaSlicer/releases" @@ -28,7 +23,7 @@ msgid "%" msgstr "%" #: src/slic3r/GUI/GLCanvas3D.cpp:963 -#, c-format +#, possible-c-format msgid "%.2f - %.2f mm" msgstr "%.2f - %.2f mm" @@ -46,125 +41,97 @@ msgid "%1%=%2% mm is too low to be printable at a layer height %3% mm" msgstr "%1%=%2% mm es demasiado bajo para ser impreso a una altura de capa de %3% mm" #: src/slic3r/GUI/PresetHints.cpp:229 -#, c-format +#, possible-c-format msgid "%3.2f mm³/s at filament speed %3.2f mm/s." msgstr "%3.2f mm³/s a una velocidad de filamento de %3.2f mm/s." #: src/slic3r/GUI/Plater.cpp:1152 -#, c-format +#, possible-c-format msgid "%d (%d shells)" msgstr "%d (%d pieles)" #: src/slic3r/GUI/Plater.cpp:1160 -#, c-format +#, possible-c-format msgid "%d degenerate facets, %d edges fixed, %d facets removed, %d facets added, %d facets reversed, %d backwards edges" msgstr "%d facetas problemáticas, %d aristas corregidas, %d facetas eliminadas, %d facetas añadidas, %d facetas invertidas, %d aristas del revés" #: src/slic3r/GUI/PresetHints.cpp:270 -#, c-format +#, possible-c-format msgid "%d lines: %.2f mm" msgstr "%d líneas: %.2f mm" #: src/slic3r/GUI/MainFrame.cpp:1027 -#, c-format +#, possible-c-format msgid "%d presets successfully imported." msgstr "%d ajustes iniciales importados con éxito." #: src/slic3r/GUI/MainFrame.cpp:692 -#, c-format +#, possible-c-format msgid "%s &Website" msgstr "%s Sitio &Web" #: src/slic3r/GUI/UpdateDialogs.cpp:211 -#, c-format +#, possible-c-format msgid "%s configuration is incompatible" msgstr "%s la configuración es incompatible" #: src/slic3r/GUI/Field.cpp:175 -#, c-format +#, possible-c-format msgid "%s doesn't support percentage" msgstr "%s no permite porcentajes" #: src/slic3r/GUI/MsgDialog.cpp:73 -#, c-format +#, possible-c-format msgid "%s error" msgstr "%s error" #: src/slic3r/GUI/ConfigWizard.cpp:481 -#, c-format +#, possible-c-format msgid "%s Family" msgstr "%s Familia" #: src/slic3r/GUI/MsgDialog.cpp:74 -#, c-format +#, possible-c-format msgid "%s has encountered an error" msgstr "%s ha ocurrido un error" #: src/slic3r/GUI/GUI_App.cpp:138 -#, c-format -msgid "" -"%s has encountered an error. It was likely caused by running out of memory. If you are sure you have enough RAM on your system, this may also be a bug and we would be glad if you reported it.\n" -"\n" -"The application will now terminate." -msgstr "" -"%s ha encontrado un error. Probablemente fue causado por quedarse sin memoria. Si estás seguro de tener suficiente RAM en su sistema, esto también puede ser un error y nos complacería que lo informaras.\n" -"\n" -"La aplicación se cerrará." +#, possible-c-format +msgid "%s has encountered an error. It was likely caused by running out of memory. If you are sure you have enough RAM on your system, this may also be a bug and we would be glad if you reported it.\n\nThe application will now terminate." +msgstr "%s ha encontrado un error. Probablemente fue causado por quedarse sin memoria. Si estás seguro de tener suficiente RAM en su sistema, esto también puede ser un error y nos complacería que lo informaras.\n\nLa aplicación se cerrará." #: src/slic3r/GUI/BackgroundSlicingProcess.cpp:222 -#, c-format +#, possible-c-format msgid "%s has encountered an error. It was likely caused by running out of memory. If you are sure you have enough RAM on your system, this may also be a bug and we would be glad if you reported it." msgstr "%s ha encontrado un error. Probablemente fue causado por quedarse sin memoria. Si estás seguro de tener suficiente RAM en su sistema, esto también puede ser un error y nos complacería que lo informaras." #: src/slic3r/GUI/UpdateDialogs.cpp:308 -#, c-format +#, possible-c-format msgid "%s has no configuration updates available." msgstr "%s no tiene actualizaciones de configuración disponibles." #: src/slic3r/GUI/UpdateDialogs.cpp:148 src/slic3r/GUI/UpdateDialogs.cpp:210 -#, c-format +#, possible-c-format msgid "%s incompatibility" msgstr "%s incompatibilidad" #: src/slic3r/GUI/UpdateDialogs.cpp:270 -#, c-format -msgid "" -"%s now uses an updated configuration structure.\n" -"\n" -"So called 'System presets' have been introduced, which hold the built-in default settings for various printers. These System presets cannot be modified, instead, users now may create their own presets inheriting settings from one of the System presets.\n" -"An inheriting preset may either inherit a particular value from its parent or override it with a customized value.\n" -"\n" -"Please proceed with the %s that follows to set up the new presets and to choose whether to enable automatic preset updates." -msgstr "" -"Ahora %s usa una estructura actualizada para la configuración. \n" -"\n" -"Se han introducido los llamados 'Ajustes del sistema' , que tienen valores por defecto para varias impresoras. Estos ajustes del sistema no pueden modificarse, por el contrario, los usuarios pueden crear nuevos ajustes que se basan en alguno de ellos.\n" -"Un ajuste nuevo puede heredar un valor de un ajuste existente o bien tener un nuevo valor personalizado.\n" -"\n" -"Por favof, continúa con el %s que sigue para establecer los nuevos ajustes y seleccionar si quieres que estos se actualicen automáticamente." +#, possible-c-format +msgid "%s now uses an updated configuration structure.\n\nSo called 'System presets' have been introduced, which hold the built-in default settings for various printers. These System presets cannot be modified, instead, users now may create their own presets inheriting settings from one of the System presets.\nAn inheriting preset may either inherit a particular value from its parent or override it with a customized value.\n\nPlease proceed with the %s that follows to set up the new presets and to choose whether to enable automatic preset updates." +msgstr "Ahora %s usa una estructura actualizada para la configuración. \n\nSe han introducido los llamados 'Ajustes del sistema' , que tienen valores por defecto para varias impresoras. Estos ajustes del sistema no pueden modificarse, por el contrario, los usuarios pueden crear nuevos ajustes que se basan en alguno de ellos.\nUn ajuste nuevo puede heredar un valor de un ajuste existente o bien tener un nuevo valor personalizado.\n\nPor favof, continúa con el %s que sigue para establecer los nuevos ajustes y seleccionar si quieres que estos se actualicen automáticamente." #: src/slic3r/GUI/GUI_App.cpp:820 -#, c-format +#, possible-c-format msgid "%s View Mode" msgstr "%s Tipo de vista" #: src/slic3r/GUI/UpdateDialogs.cpp:151 -#, c-format -msgid "" -"%s will now start updates. Otherwise it won't be able to start.\n" -"\n" -"Note that a full configuration snapshot will be created first. It can then be restored at any time should there be a problem with the new version.\n" -"\n" -"Updated configuration bundles:" -msgstr "" -"%s comenzará las actualizaciones. De otro modo no podrá comenzar.\n" -"\n" -"Ten en cuenta que primero se creará una copia de seguridad. Puedes volver a ella si en algún momento hay problemas con la nueva versión.\n" -"\n" -"Configuraciones actualizadas:" +#, possible-c-format +msgid "%s will now start updates. Otherwise it won't be able to start.\n\nNote that a full configuration snapshot will be created first. It can then be restored at any time should there be a problem with the new version.\n\nUpdated configuration bundles:" +msgstr "%s comenzará las actualizaciones. De otro modo no podrá comenzar.\n\nTen en cuenta que primero se creará una copia de seguridad. Puedes volver a ella si en algún momento hay problemas con la nueva versión.\n\nConfiguraciones actualizadas:" #: src/slic3r/GUI/MainFrame.cpp:705 -#, c-format +#, possible-c-format msgid "&About %s" msgstr "&Acerca de %s" @@ -321,7 +288,7 @@ msgid "3Dconnexion settings" msgstr "Ajustes 3Dconnexion" #: src/slic3r/GUI/Plater.cpp:5038 -#, c-format +#, possible-c-format msgid "3MF file exported to %s" msgstr "Archivo 3MF exportado a %s" @@ -350,12 +317,12 @@ msgid "A toolpath outside the print area was detected" msgstr "Se detectó una trayectoria fuera del área de impresión" #: src/slic3r/GUI/AboutDialog.cpp:199 -#, c-format +#, possible-c-format msgid "About %s" msgstr "Acerca de %s" #: src/slic3r/GUI/GLCanvas3D.cpp:959 -#, c-format +#, possible-c-format msgid "above %.2f mm" msgstr "sobre %.2f mm" @@ -666,17 +633,13 @@ msgid "Alternate nozzles:" msgstr "Alternar nozzles:" #: src/slic3r/GUI/Plater.cpp:5002 -#, c-format +#, possible-c-format msgid "AMF file exported to %s" msgstr "Archivo AMF exportado a %s" #: src/slic3r/GUI/GLCanvas3D.cpp:690 -msgid "" -"An object outside the print area was detected\n" -"Resolve the current problem to continue slicing" -msgstr "" -"Se ha detectado una pieza fuera del área de impresión\n" -"Soluciona el problema actual para continuar el laminado" +msgid "An object outside the print area was detected\nResolve the current problem to continue slicing" +msgstr "Se ha detectado una pieza fuera del área de impresión\nSoluciona el problema actual para continuar el laminado" #: src/slic3r/GUI/GLCanvas3D.cpp:685 msgid "An object outside the print area was detected" @@ -730,12 +693,8 @@ msgid "Are you sure you want to %1% the selected preset?" msgstr "¿Estás seguro de que deseas %1% el preset seleccionado?" #: src/slic3r/GUI/FirmwareDialog.cpp:902 -msgid "" -"Are you sure you want to cancel firmware flashing?\n" -"This could leave your printer in an unusable state!" -msgstr "" -"¿Estas seguro de cancelar el flaseo del firmware?\n" -"¡Esto podría dejar tu impresora en un estado inusable!" +msgid "Are you sure you want to cancel firmware flashing?\nThis could leave your printer in an unusable state!" +msgstr "¿Estas seguro de cancelar el flaseo del firmware?\n¡Esto podría dejar tu impresora en un estado inusable!" #: src/slic3r/GUI/DoubleSlider.cpp:1903 src/slic3r/GUI/DoubleSlider.cpp:1924 msgid "Are you sure you want to continue?" @@ -823,12 +782,12 @@ msgid "Auto-generate points" msgstr "Auto-generar puntos" #: src/slic3r/GUI/Plater.cpp:1157 -#, c-format +#, possible-c-format msgid "Auto-repaired (%d errors)" msgstr "Reparados automáticamente (%d errores)" #: src/slic3r/GUI/GUI_ObjectList.cpp:339 -#, c-format +#, possible-c-format msgid "Auto-repaired (%d errors):" msgstr "Reparado automáticamente (%d errores):" @@ -869,20 +828,12 @@ msgid "BACK ARROW" msgstr "FLECHA HACIA ATRÁS" #: src/slic3r/GUI/Tab.cpp:3290 -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" -"Click to reset all settings for the current option group to the last saved preset." -msgstr "" -"El símbolo de FLECHA ATRÁS indica que los ajustes cambiaron y que no son iguales a los que se guardaron para el grupo de opciones actual.\n" -"Haz clic para devolver esos valores a los últimos guardados." +msgid "BACK ARROW icon indicates that the settings were changed and are not equal to the last saved preset for the current option group.\nClick to reset all settings for the current option group to the last saved preset." +msgstr "El símbolo de FLECHA ATRÁS indica que los ajustes cambiaron y que no son iguales a los que se guardaron para el grupo de opciones actual.\nHaz clic para devolver esos valores a los últimos guardados." #: src/slic3r/GUI/Tab.cpp:3304 -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 "" -"La FLECHA ATRÁS indica que el valor ha cambiado y ya no es el mismo que el guardado la última vez.\n" -"Haz clic para restaurar el valor al último ajuste guardado." +msgid "BACK ARROW icon indicates that the value was changed and is not equal to the last saved preset.\nClick to reset current value to the last saved preset." +msgstr "La FLECHA ATRÁS indica que el valor ha cambiado y ya no es el mismo que el guardado la última vez.\nHaz clic para restaurar el valor al último ajuste guardado." #: src/slic3r/GUI/Preferences.cpp:55 msgid "Background processing" @@ -1145,7 +1096,7 @@ msgid "Change Extruders" msgstr "Cambiar Extrusores" #: src/slic3r/GUI/GUI_ObjectSettings.cpp:152 -#, c-format +#, possible-c-format msgid "Change Option %s" msgstr "Cambiar opción %s" @@ -1266,7 +1217,7 @@ msgid "Color change (\"%1%\") for Extruder %2%" msgstr "Cambio de color (\"%1%\") para el Extrusor %2%" #: src/slic3r/GUI/GLCanvas3D.cpp:995 -#, c-format +#, possible-c-format msgid "Color change for Extruder %d at %.2f mm" msgstr "Cambio de color para Extrusor %d en %.2f mm" @@ -1557,22 +1508,22 @@ msgid "Cubic" msgstr "Cúbico" #: src/slic3r/GUI/wxExtensions.cpp:704 -#, c-format +#, possible-c-format msgid "Current mode is %s" msgstr "El modo actual es %s" +#: src/slic3r/GUI/Tab.cpp:959 +msgid "Current preset is inherited from" +msgstr "El preajuste fue heredado de" + #: src/slic3r/GUI/Tab.cpp:957 msgid "Current preset is inherited from the default preset." msgstr "El preajuste fue heredado del preajuste predeterminado." #: src/slic3r/GUI/Tab.cpp:960 -#, c-format -msgid "" -"Current preset is inherited from:\n" -"\t%s" -msgstr "" -"El preajuste fue heredado de:\n" -"%s" +#, possible-c-format +msgid "Current preset is inherited from:\n\t%s" +msgstr "El preajuste fue heredado de:\n%s" #: src/slic3r/GUI/UpdateDialogs.cpp:43 msgid "Current version:" @@ -1681,7 +1632,7 @@ msgid "Default filament profile associated with the current printer profile. On msgstr "Perfil de filamento por defecto asociado con el perfil de impresora actual. Al seleccionar el perfil de impresora actual se activará este perfil de filamento." #: src/slic3r/GUI/Tab.cpp:2919 -#, c-format +#, possible-c-format msgid "Default preset (%s)" msgstr "Ajustes por defecto (%s)" @@ -1786,7 +1737,7 @@ msgid "Delete Object" msgstr "Eliminar Objeto" #: src/slic3r/GUI/GUI_ObjectSettings.cpp:101 -#, c-format +#, possible-c-format msgid "Delete Option %s" msgstr "Eliminar Opción %s" @@ -2011,15 +1962,9 @@ msgid "Do not rearrange the given models before merging and keep their original msgstr "No reorganizar los modelos dados antes de fusionar y mantener sus coordenadas XY originales." #: src/slic3r/GUI/Field.cpp:240 -#, c-format -msgid "" -"Do you mean %s%% instead of %s %s?\n" -"Select YES if you want to change this value to %s%%, \n" -"or NO if you are sure that %s %s is a correct value." -msgstr "" -"¿Quieres decir %s%% en vez de %s %s?\n" -"Escoge SI si deseas cambiar este valor a %s%%,\n" -"o NO si estás seguro que %s %s es el valor correcto." +#, possible-c-format +msgid "Do you mean %s%% instead of %s %s?\nSelect YES if you want to change this value to %s%%, \nor NO if you are sure that %s %s is a correct value." +msgstr "¿Quieres decir %s%% en vez de %s %s?\nEscoge SI si deseas cambiar este valor a %s%%,\no NO si estás seguro que %s %s es el valor correcto." #: src/slic3r/GUI/ConfigWizard.cpp:1761 msgid "Do you want to automatic select default filaments?" @@ -2136,6 +2081,18 @@ msgstr "Editar marca de verificación - Clic derecho" msgid "Editing" msgstr "Edición" +#: src/slic3r/GUI/MainFrame.cpp:547 +msgid "Ejec&t SD card / Flash drive" +msgstr "Expul&sa tarjeta SD / disco USB" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:126 +msgid "Eject SD card / Flash drive" +msgstr "Expulsa la tarjeta SD / disco USB" + +#: src/slic3r/GUI/MainFrame.cpp:547 +msgid "Eject SD card / Flash drive after the G-code was exported to it." +msgstr "Expulsa la tarjeta SD / disco USB después de que se haya exportado a él." + #: src/libslic3r/PrintConfig.cpp:118 msgid "Elephant foot compensation" msgstr "Compensación del pie de elefante" @@ -2273,7 +2230,7 @@ msgid "Error" msgstr "Error" #: src/slic3r/GUI/FirmwareDialog.cpp:645 -#, c-format +#, possible-c-format msgid "Error accessing port at %s: %s" msgstr "Error al acceder al puerto en %s: %s" @@ -2282,12 +2239,12 @@ msgid "Error during reload" msgstr "Error al recargar" #: src/slic3r/GUI/Plater.cpp:5043 -#, c-format +#, possible-c-format msgid "Error exporting 3MF file %s" msgstr "Error al exportar archivo 3MF %s" #: src/slic3r/GUI/Plater.cpp:5005 -#, c-format +#, possible-c-format msgid "Error exporting AMF file %s" msgstr "Error exportando archivo AMF %s" @@ -2316,7 +2273,7 @@ msgid "Error! Invalid model" msgstr "Error! Modelo inválido" #: src/slic3r/GUI/FirmwareDialog.cpp:647 -#, c-format +#, possible-c-format msgid "Error: %s" msgstr "Error: %s" @@ -2346,7 +2303,7 @@ msgid "Excessive %1%=%2% mm to be printable with a nozzle diameter %3% mm" msgstr "%1%=%2% mm excesivos para ser imprimible con un nozzle de diámetro de %3% mm" #: src/slic3r/GUI/UpdateDialogs.cpp:191 src/slic3r/GUI/UpdateDialogs.cpp:246 -#, c-format +#, possible-c-format msgid "Exit %s" msgstr "Salir %s" @@ -2426,6 +2383,10 @@ msgstr "Exportar plataforma actual como AMF" msgid "Export current plate as G-code" msgstr "Exportar plataforma actual como código G" +#: src/slic3r/GUI/MainFrame.cpp:521 +msgid "Export current plate as G-code to SD card / Flash drive" +msgstr "Exporta a G-code en la tarjeta SD / disco USB" + #: src/slic3r/GUI/MainFrame.cpp:486 msgid "Export current plate as STL" msgstr "Exportar plataforma actual como STL" @@ -2447,6 +2408,10 @@ msgstr "Exportar nombres de ruta completos de las fuentes de los modelos y de pi msgid "Export G-code" msgstr "Exportar código G" +#: src/slic3r/GUI/MainFrame.cpp:521 +msgid "Export G-code to SD card / Flash drive" +msgstr "Exporta G-code a la tarjeta SD / disco USB" + #: src/libslic3r/PrintConfig.cpp:3320 msgid "Export OBJ" msgstr "Exportar OBJ" @@ -2576,7 +2541,7 @@ msgstr "Extrusor" #: src/slic3r/GUI/DoubleSlider.cpp:1134 src/slic3r/GUI/DoubleSlider.cpp:1170 #: src/slic3r/GUI/GLCanvas3D.cpp:977 src/slic3r/GUI/GUI_ObjectList.cpp:1704 #: src/slic3r/GUI/Tab.cpp:2320 src/libslic3r/GCode/PreviewData.cpp:445 -#, c-format +#, possible-c-format msgid "Extruder %d" msgstr "Extrusor %d" @@ -2949,20 +2914,17 @@ msgstr "Sólo para modificadores de soportes" #. TRN Description for "WHITE BULLET" #: src/slic3r/GUI/Tab.cpp:3265 -msgid "" -"for the left button: \tindicates a non-system (or non-default) preset,\n" -"for the right button: \tindicates that the settings hasn't been modified." -msgstr "" -"para el botón izquierdo: indica un preajuste que no es del sistema (o no predeterminado),\n" -"para el botón derecho: indica que la configuración no se ha modificado." +msgid "for the left button: \tindicates a non-system (or non-default) preset,\nfor the right button: \tindicates that the settings hasn't been modified." +msgstr "para el botón izquierdo: indica un preajuste que no es del sistema (o no predeterminado),\npara el botón derecho: indica que la configuración no se ha modificado." + +#. TRN Description for "WHITE BULLET" +#: src/slic3r/GUI/Tab.cpp:3267 +msgid "for the left button: indicates a non-system (or non-default) preset,\nfor the right button: indicates that the settings hasn't been modified." +msgstr "para el botón izquierdo: indica un preajuste que no es del sistema (o no predeterminado),\npara el botón derecho: indica que la configuración no se ha modificado." #: src/slic3r/GUI/ConfigManipulation.cpp:136 -msgid "" -"For the Wipe Tower to work with the soluble supports, the support layers\n" -"need to be synchronized with the object layers." -msgstr "" -"Para que la Torre de Limpieza funcione con los soportes solubles, las capas de soporte\n" -"deben sincronizarse con las capas de objetos." +msgid "For the Wipe Tower to work with the soluble supports, the support layers\nneed to be synchronized with the object layers." +msgstr "Para que la Torre de Limpieza funcione con los soportes solubles, las capas de soporte\ndeben sincronizarse con las capas de objetos." #: src/libslic3r/Print.cpp:1396 msgid "For the Wipe Tower to work with the soluble supports, the support layers need to be synchronized with the object layers." @@ -3005,12 +2967,8 @@ msgid "G-code" msgstr "Código G" #: src/slic3r/GUI/DoubleSlider.cpp:1021 -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 "" -"El código G asociado a esta marca de verificación está en conflicto con el modo de impresión.\n" -"Su edición provocará cambios en los datos del Slider." +msgid "G-code associated to this tick mark is in a conflict with print mode.\nEditing it will cause changes of Slider data." +msgstr "El código G asociado a esta marca de verificación está en conflicto con el modo de impresión.\nSu edición provocará cambios en los datos del Slider." #: src/slic3r/GUI/BackgroundSlicingProcess.cpp:130 msgid "G-code file exported to %1%" @@ -3213,7 +3171,7 @@ msgid "Heights at which a filament change is to occur." msgstr "Alturas en las que se producirá un cambio de filamento." #: src/slic3r/GUI/ConfigWizard.cpp:433 -#, c-format +#, 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 "Hola, bienvenido a %s! Este %s te ayuda con la configuración inicial; sólo unos pocos ajustes y estarás preparado para imprimir." @@ -3335,9 +3293,7 @@ msgid "Hostname, IP or URL" msgstr "Nombre de equipo, IP o URL" #: src/slic3r/GUI/Tab.cpp:139 -msgid "" -"Hover the cursor over buttons to find more information \n" -"or click this button." +msgid "Hover the cursor over buttons to find more information \nor click this button." msgstr "Sitúa el cursos sobre los botones para más información o haz clic en este botón." #: src/libslic3r/PrintConfig.cpp:2812 @@ -3365,15 +3321,9 @@ msgid "HTTPS CA file is optional. It is only needed if you use HTTPS with a self msgstr "El archivo HTTPS CA es opcional. Sólo se necesita si vas a usar HTTPS con un certificado auto-firmado." #: src/slic3r/GUI/Tab.cpp:1757 -#, c-format -msgid "" -"HTTPS CA File:\n" -" \tOn this system, %s uses HTTPS certificates from the system Certificate Store or Keychain.\n" -" \tTo use a custom CA file, please import your CA file into Certificate Store / Keychain." -msgstr "" -"Archivo CA HTTPS:\n" -"En este sistema,%s usa certificados HTTPS del almacén de certificados o llavero. \n" -"Para usar un archivo CA personalizado, importa tu archivo CA al Almacén de Certificados/Llavero." +#, possible-c-format +msgid "HTTPS CA File:\n \tOn this system, %s uses HTTPS certificates from the system Certificate Store or Keychain.\n \tTo use a custom CA file, please import your CA file into Certificate Store / Keychain." +msgstr "Archivo CA HTTPS:\nEn este sistema,%s usa certificados HTTPS del almacén de certificados o llavero. \nPara usar un archivo CA personalizado, importa tu archivo CA al Almacén de Certificados/Llavero." #: src/slic3r/GUI/Preferences.cpp:222 msgid "Icon size in a respect to the default size" @@ -3388,12 +3338,12 @@ msgid "If checked, supports will be generated automatically based on the overhan msgstr "Si se marca, los soportes se generarán automáticamente según el valor del umbral de voladizo. Si no se selecciona, los apoyos se generarán solo dentro de los volúmenes \"Forzar soportes\"." #: src/slic3r/GUI/ConfigWizard.cpp:773 -#, c-format +#, possible-c-format msgid "If enabled, %s checks for new application versions online. When a new version becomes available, a notification is displayed at the next application startup (never during program usage). This is only a notification mechanisms, no automatic installation is done." msgstr "Si está activado, %s comprueba si hay nuevas versiones de Slic3r PE en la red. Cuando hay disponible una nueva versión se muestra una notificación al iniciar la aplicación (nunca durante el uso del programa). Esto es sólo un mecanismo de notificación, sin que se realice una instalación automática." #: src/slic3r/GUI/ConfigWizard.cpp:783 -#, c-format +#, possible-c-format msgid "If enabled, %s downloads updates of built-in system presets in the background.These updates are downloaded into a separate temporary location.When a new preset version becomes available it is offered at application startup." msgstr "Si está activado, %s descargará actualizaciones de los ajustes del sistema mientras lo usamos. Estas actualizaciones se descargan a una ubicación temporal. Cuando hay un nuevo ajuste disponible, este se podrá incorporar y usar cuando la aplicación se vuelva a iniciar." @@ -3402,12 +3352,8 @@ msgid "If enabled, all printing extruders will be primed at the front edge of th msgstr "Si está habilitado, todos los extrusores de impresión estarán cebados en el borde frontal de la cama de impresión al comienzo de la impresión." #: src/slic3r/GUI/ConfigWizard.cpp:805 -msgid "" -"If enabled, allows the Reload from disk command to automatically find and load the files when invoked.\n" -"If not enabled, the Reload from disk command will ask to select each file using an open file dialog." -msgstr "" -"Si está activado, permite que la orden de Recarga desde el disco encuentre y cargue los archivos al invocarla. \n" -"Si no está activado, la orden de Recarga desde el disco te pedirá que selecciones cada archivo en un cuadro de abrir archivo." +msgid "If enabled, allows the Reload from disk command to automatically find and load the files when invoked.\nIf not enabled, the Reload from disk command will ask to select each file using an open file dialog." +msgstr "Si está activado, permite que la orden de Recarga desde el disco encuentre y cargue los archivos al invocarla. \nSi no está activado, la orden de Recarga desde el disco te pedirá que selecciones cada archivo en un cuadro de abrir archivo." #: src/slic3r/GUI/Preferences.cpp:74 msgid "If enabled, allows the Reload from disk command to automatically find and load the files when invoked." @@ -3542,7 +3488,7 @@ msgid "Import STL/OBJ/AMF/3MF without config, keep plater" msgstr "Importar STL/OBJ/AMF/3MF sin configuración, mantener la base" #: src/slic3r/GUI/GUI_ObjectList.cpp:3422 -#, c-format +#, possible-c-format msgid "In this mode you can select only other %s Items%s" msgstr "En este modo, solo puede seleccionar otros %s Items %s" @@ -3551,7 +3497,7 @@ msgid "Incompatible bundles:" msgstr "Grupos incompatibles:" #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:75 -#, c-format +#, possible-c-format msgid "Incompatible with this %s" msgstr "Incompatible con este %s" @@ -3569,12 +3515,8 @@ msgstr "Indexando pieza vaciada" #. TRN Description for "UNLOCKED LOCK" #: src/slic3r/GUI/Tab.cpp:3258 -msgid "" -"indicates that some settings were changed and are not equal to the system (or default) values for the current option group.\n" -"Click the UNLOCKED LOCK icon to reset all settings for current option group to the system (or default) values." -msgstr "" -"indica que se modificaron algunas configuraciones y no son iguales a los valores del sistema (o predeterminados) para el grupo de opciones actual.\n" -"Haz clic en el icono CANDADO DESBLOQUEADO para restablecer todos los ajustes del grupo de opciones actual a los valores del sistema (o predeterminados)." +msgid "indicates that some settings were changed and are not equal to the system (or default) values for the current option group.\nClick the UNLOCKED LOCK icon to reset all settings for current option group to the system (or default) values." +msgstr "indica que se modificaron algunas configuraciones y no son iguales a los valores del sistema (o predeterminados) para el grupo de opciones actual.\nHaz clic en el icono CANDADO DESBLOQUEADO para restablecer todos los ajustes del grupo de opciones actual a los valores del sistema (o predeterminados)." #. TRN Description for "LOCKED LOCK" #: src/slic3r/GUI/Tab.cpp:3254 @@ -3583,10 +3525,8 @@ msgstr "indica que los ajustes son los mismos que los valores del sistema (o por #. TRN Description for "BACK ARROW" #: src/slic3r/GUI/Tab.cpp:3270 -msgid "" -"indicates that the settings were changed and are not equal to the last saved preset for the current option group.\n" -"Click the BACK ARROW icon to reset all settings for the current option group to the last saved preset." -msgstr "indica que los ajustes cambiaron y no son iguales que los ajustes grabados la última vez para el grupo de opciones actual. Haz clic en el símbolo de FLECHA ATRÁS para resetear todos los ajustes del grupo de opciones actual a los grabados la vez anterior." +msgid "indicates that the settings were changed and are not equal to the last saved preset for the current option group.\nClick the BACK ARROW icon to reset all settings for the current option group to the last saved preset." +msgstr "indica que los ajustes cambiaron y no son iguales que los ajustes grabados la última vez para el grupo de opciones actual.\nHaz clic en el símbolo de FLECHA ATRÁS para resetear todos los ajustes del grupo de opciones actual a los grabados la vez anterior." #: src/slic3r/GUI/ConfigManipulation.cpp:211 #: src/slic3r/GUI/GUI_ObjectList.cpp:35 src/slic3r/GUI/GUI_ObjectList.cpp:96 @@ -3653,7 +3593,7 @@ msgstr "Inspeccionar / activar instantáneas de configuración" #: src/slic3r/GUI/ObjectDataViewModel.cpp:60 #: src/slic3r/GUI/ObjectDataViewModel.cpp:216 -#, c-format +#, possible-c-format msgid "Instance %d" msgstr "Instancia %d" @@ -3779,7 +3719,7 @@ msgid "Jump to height" msgstr "Salta a la altura" #: src/slic3r/GUI/DoubleSlider.cpp:955 -#, c-format +#, possible-c-format msgid "Jump to height %s or Set extruder sequence for the entire print" msgstr "Salta a la altura %s o Fija la secuencia del extrusor para toda la impresión" @@ -4115,6 +4055,10 @@ msgstr "Max" msgid "Max bridge length" msgstr "Distancia máxima de puentes" +#: src/libslic3r/PrintConfig.cpp:2658 +msgid "Max bridges on a pillar" +msgstr "Puentes maximos en un pilar" + #: src/libslic3r/PrintConfig.cpp:2822 msgid "Max merge distance" msgstr "Distancia máxima de combinación" @@ -4283,6 +4227,10 @@ msgstr "Máximo jerk Y" msgid "Maximum jerk Z" msgstr "Máximo jerk Z" +#: src/libslic3r/PrintConfig.cpp:2660 +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 "Número máximo de puentes que se pueden colocar en un pilar. Los puentes sostienen cabezas de alfiler de puntos de apoyo y se conectan a los pilares como pequeñas ramas." + #: src/libslic3r/PrintConfig.cpp:598 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 "Velocidad volumétrica máxima permitida para este filamento. Limita la velocidad volumétrica máxima de una impresión al mínimo de velocidad volumétrica de impresión y filamento. Establecer en cero para usar sin límite." @@ -4436,7 +4384,7 @@ msgid "Mirror vertically" msgstr "Reflejar verticalmente" #: src/slic3r/Utils/AstroBox.cpp:68 src/slic3r/Utils/OctoPrint.cpp:68 -#, c-format +#, possible-c-format msgid "Mismatched type of print host: %s" msgstr "Tipo de host de impresión no coincidente: %s" @@ -4674,7 +4622,7 @@ msgid "Multi-part object detected" msgstr "Objeto de piezas múltiples detectado" #: src/slic3r/GUI/FirmwareDialog.cpp:419 src/slic3r/GUI/FirmwareDialog.cpp:454 -#, c-format +#, possible-c-format msgid "Multiple %s devices found. Please only connect one at a time for flashing." msgstr "Se encontraron múltiples dispositivos %s. Por favor, conecta solo uno a la vez para flashear." @@ -4683,14 +4631,8 @@ msgid "Multiple Extruders" msgstr "Múltiples Extrusores" #: src/slic3r/GUI/Plater.cpp:2410 -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 "" -"Se cargaron varios objetos para una impresora de varios materiales.\n" -"En lugar de considerarlos como objetos múltiples, ¿debería considerar\n" -"estos archivos para formar un solo objeto que tiene varias partes?" +msgid "Multiple objects were loaded for a multi-material printer.\nInstead of considering them as multiple objects, should I consider\nthese files to represent a single object having multiple parts?" +msgstr "Se cargaron varios objetos para una impresora de varios materiales.\nEn lugar de considerarlos como objetos múltiples, ¿debería considerar\nestos archivos para formar un solo objeto que tiene varias partes?" #: src/libslic3r/PrintConfig.cpp:3439 msgid "Multiply copies by creating a grid." @@ -4738,7 +4680,7 @@ msgid "New project, clear plater" msgstr "Nuevo proyecto, limpiar plataforma" #: src/slic3r/GUI/UpdateDialogs.cpp:38 -#, c-format +#, possible-c-format msgid "New version of %s is available" msgstr "Nueva versión de %s disponible" @@ -4954,6 +4896,11 @@ msgstr "del Objeto actual" msgid "Offset" msgstr "Desplazamiento" +#: src/slic3r/GUI/Tab.cpp:1755 +#, possible-c-format +msgid "On this system, %s uses HTTPS certificates from the system Certificate Store or Keychain." +msgstr "En este sistema,%s usa certificados HTTPS del almacén de certificados o llavero." + #: src/slic3r/GUI/DoubleSlider.cpp:950 msgid "One layer mode" msgstr "Modo de capa única" @@ -5016,7 +4963,7 @@ msgid "Open project STL/OBJ/AMF/3MF with config, clear plater" msgstr "Abrir proyecto STL/OBJ/AMF/3MF con configuración, limpiar plataforma" #: src/slic3r/GUI/MainFrame.cpp:693 -#, c-format +#, possible-c-format msgid "Open the %s website in your browser" msgstr "Abrir el sitio web de %s en su navegador" @@ -5272,7 +5219,7 @@ msgid "Perimeters" msgstr "Perímetros" #: src/slic3r/GUI/ConfigWizard.cpp:860 -#, c-format +#, possible-c-format msgid "Pick another vendor supported by %s" msgstr "Elije otro proveedor compatible con% s" @@ -5366,7 +5313,7 @@ msgid "Preparing infill" msgstr "Preparando relleno" #: src/slic3r/GUI/Tab.cpp:2920 -#, c-format +#, possible-c-format msgid "Preset (%s)" msgstr "Ajuste inicial (%s)" @@ -5392,29 +5339,17 @@ msgid "Press to activate selection rectangle" msgstr "Presionar para activar el rectángulo de selección" #: src/slic3r/GUI/KBShortcutsDialog.cpp:198 -msgid "" -"Press to scale (in Gizmo scale) or rotate (in Gizmo rotate)\n" -"selected objects around their own center" -msgstr "" -"Presionar para escalar (en escalar Gizmo) o rotar(en rotar Gizmo)\n" -"objetos seleccionados alrededor de su propio centro" +msgid "Press to scale (in Gizmo scale) or rotate (in Gizmo rotate)\nselected objects around their own center" +msgstr "Presionar para escalar (en escalar Gizmo) o rotar(en rotar Gizmo)\nobjetos seleccionados alrededor de su propio centro" #: src/slic3r/GUI/KBShortcutsDialog.cpp:161 -msgid "" -"Press to select multiple objects\n" -"or move multiple objects with mouse" -msgstr "" -"Presiona para seleccionar objetos múltiples\n" -"o mover objetos múltiples con el ratón" +msgid "Press to select multiple objects\nor move multiple objects with mouse" +msgstr "Presiona para seleccionar objetos múltiples\no mover objetos múltiples con el ratón" #: src/slic3r/GUI/KBShortcutsDialog.cpp:195 #, no-c-format -msgid "" -"Press to snap by 5% in Gizmo scale\n" -"or to snap by 1mm in Gizmo move" -msgstr "" -"Presiona para ajustar un 5% en escala Gizmo\n" -"o para ajustar cada 1mm en mover Gizmo" +msgid "Press to snap by 5% in Gizmo scale\nor to snap by 1mm in Gizmo move" +msgstr "Presiona para ajustar un 5% en escala Gizmo\no para ajustar cada 1mm en mover Gizmo" #: src/slic3r/GUI/KBShortcutsDialog.cpp:211 src/slic3r/GUI/Plater.cpp:4105 #: src/slic3r/GUI/Tab.cpp:2390 @@ -5541,12 +5476,12 @@ msgstr "Imprimir con múltiples extrusoras de diferentes diámetros de boquilla. #. TRN "Processing input_file_basename" #: src/slic3r/GUI/MainFrame.cpp:849 -#, c-format +#, possible-c-format msgid "Processing %s" msgstr "Procesando %s" #: src/slic3r/GUI/Plater.cpp:2283 -#, c-format +#, possible-c-format msgid "Processing input file %s" msgstr "Procesando el archivo de entrada %s" @@ -5589,27 +5524,17 @@ msgid "PrusaSlicer is based on Slic3r by Alessandro Ranellucci and the RepRap co msgstr "PrusaSlicer está basado en Slic3r de Alessandro Ranellucci y la comunidad RepRap." #: src/slic3r/GUI/GLCanvas3DManager.cpp:284 -#, 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 "" -"PrusaSlicer requiere el controlador de gráficos OpenGL 2.0 para que funcione correctamente, \n" -"mientras que la versión %s OpenGL, renderizado %s, vendedor %s fue detectada." +#, possible-c-format +msgid "PrusaSlicer requires OpenGL 2.0 capable graphics driver to run correctly, \nwhile OpenGL version %s, render %s, vendor %s was detected." +msgstr "PrusaSlicer requiere el controlador de gráficos OpenGL 2.0 para que funcione correctamente, \nmientras que la versión %s OpenGL, renderizado %s, vendedor %s fue detectada." #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:50 msgid "PrusaSlicer version" msgstr "Versión PrusaSlicer" #: src/slic3r/GUI/ConfigWizard.cpp:815 -msgid "" -"PrusaSlicer's user interfaces comes in three variants:\n" -"Simple, Advanced, and Expert.\n" -"The Simple mode shows only the most frequently used settings relevant for regular 3D printing. The other two offer progressively more sophisticated fine-tuning, they are suitable for advanced and expert users, respectively." -msgstr "" -"Las interfaces de usuario de PrusaSlicer tiene tres variantes:\n" -"Simple, avanzado y experto.\n" -"El modo Simple muestra solo las configuraciones usadas con más frecuencia relevantes para la impresión 3D normal. Los otros dos ofrecen ajustes progresivamente más sofisticados, son adecuados para usuarios avanzados y expertos, respectivamente." +msgid "PrusaSlicer's user interfaces comes in three variants:\nSimple, Advanced, and Expert.\nThe Simple mode shows only the most frequently used settings relevant for regular 3D printing. The other two offer progressively more sophisticated fine-tuning, they are suitable for advanced and expert users, respectively." +msgstr "Las interfaces de usuario de PrusaSlicer tiene tres variantes:\nSimple, avanzado y experto.\nEl modo Simple muestra solo las configuraciones usadas con más frecuencia relevantes para la impresión 3D normal. Los otros dos ofrecen ajustes progresivamente más sofisticados, son adecuados para usuarios avanzados y expertos, respectivamente." #: src/libslic3r/PrintConfig.cpp:2254 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." @@ -5643,7 +5568,7 @@ msgstr "Calidad / Velocidad" #: src/slic3r/GUI/GUI_ObjectList.cpp:1530 #: src/slic3r/GUI/GUI_ObjectList.cpp:1536 #: src/slic3r/GUI/GUI_ObjectList.cpp:1849 -#, c-format +#, possible-c-format msgid "Quick Add Settings (%s)" msgstr "Añadir ajustes rápidos (%s)" @@ -5656,7 +5581,7 @@ msgid "Quick Slice and Save As" msgstr "Laminado rápido y Guardar como" #: src/slic3r/GUI/MainFrame.cpp:540 -#, c-format +#, possible-c-format msgid "Quit %s" msgstr "Cerrar %s" @@ -5677,14 +5602,8 @@ msgid "Ramming customization" msgstr "Configuración de empuje" #: src/slic3r/GUI/WipeTowerDialog.cpp:41 -msgid "" -"Ramming denotes the rapid extrusion just before a tool change in a single-extruder MM printer. Its purpose is to properly shape the end of the unloaded filament so it does not prevent insertion of the new filament and can itself be reinserted later. This phase is important and different materials can require different extrusion speeds to get the good shape. For this reason, the extrusion rates during ramming are adjustable.\n" -"\n" -"This is an expert-level setting, incorrect adjustment will likely lead to jams, extruder wheel grinding into filament etc." -msgstr "" -"El empuje señala la extrusión rápida justo antes de un cambio de filamento en una impresora MM de un sólo extrusor. Su propósito es asegurar una forma adecuada para el extremo de filamento que se va a descargar, para que no haya problemas al insertar uno nuevo y para que se pueda volver a insertar este más tarde. Esta fase es importante y diferentes materiales puede precisar diferentes velocidades para obtener la forma correcta. Por este motivo, las velocidades extrusión durante el empuje son ajustables.\n" -"\n" -"Este es un ajuste para expertos, ajustarlo incorrectamente podrá producir atascos, que la rueda del extrusor arañe el filamento, etc." +msgid "Ramming denotes the rapid extrusion just before a tool change in a single-extruder MM printer. Its purpose is to properly shape the end of the unloaded filament so it does not prevent insertion of the new filament and can itself be reinserted later. This phase is important and different materials can require different extrusion speeds to get the good shape. For this reason, the extrusion rates during ramming are adjustable.\n\nThis is an expert-level setting, incorrect adjustment will likely lead to jams, extruder wheel grinding into filament etc." +msgstr "El empuje señala la extrusión rápida justo antes de un cambio de filamento en una impresora MM de un sólo extrusor. Su propósito es asegurar una forma adecuada para el extremo de filamento que se va a descargar, para que no haya problemas al insertar uno nuevo y para que se pueda volver a insertar este más tarde. Esta fase es importante y diferentes materiales puede precisar diferentes velocidades para obtener la forma correcta. Por este motivo, las velocidades extrusión durante el empuje son ajustables.\n\nEste es un ajuste para expertos, ajustarlo incorrectamente podrá producir atascos, que la rueda del extrusor arañe el filamento, etc." #: src/slic3r/GUI/WipeTowerDialog.cpp:91 msgid "Ramming line spacing" @@ -5743,7 +5662,7 @@ msgid "Recent projects" msgstr "Proy&ectos recientes" #: src/slic3r/GUI/PresetHints.cpp:263 -#, c-format +#, possible-c-format msgid "Recommended object thin wall thickness for layer height %.2f and" msgstr "Espesor de pared delgada del objeto recomendado para una altura de capa %.2f y" @@ -5778,7 +5697,7 @@ msgid "Redo" msgstr "Rehacer" #: src/slic3r/GUI/GLCanvas3D.cpp:4065 -#, c-format +#, possible-c-format msgid "Redo %1$d Action" msgid_plural "Redo %1$d Actions" msgstr[0] "Rehacer %1$d Acción" @@ -5970,22 +5889,22 @@ msgid "Report an I&ssue" msgstr "Informar de un &problema" #: src/slic3r/GUI/MainFrame.cpp:703 -#, c-format +#, possible-c-format msgid "Report an issue on %s" msgstr "Reportar un problema a %s" #: src/slic3r/Utils/PresetUpdater.cpp:713 -#, c-format +#, possible-c-format msgid "requires max. %s" msgstr "requiere max. %s" #: src/slic3r/Utils/PresetUpdater.cpp:710 -#, c-format +#, possible-c-format msgid "requires min. %s" msgstr "requiere min. %s" #: src/slic3r/Utils/PresetUpdater.cpp:705 -#, c-format +#, possible-c-format msgid "requires min. %s and max. %s" msgstr "requiere un min. %s y un max. %s" @@ -6152,7 +6071,7 @@ msgid "Rotation angle around the Z axis in degrees." msgstr "Ángulo de rotación alrededor del eje Z en grados." #: src/slic3r/GUI/GUI_App.cpp:797 -#, c-format +#, possible-c-format msgid "Run %s" msgstr "Ejecutar %s" @@ -6181,12 +6100,12 @@ msgstr "E&nviar para imprimir" #. TRN Preset #: src/slic3r/GUI/Tab.cpp:3417 -#, c-format +#, possible-c-format msgid "Save %s as:" msgstr "Guardar %s como:" #: src/slic3r/GUI/MainFrame.cpp:826 -#, c-format +#, possible-c-format msgid "Save %s file as:" msgstr "Guardar archivo %s como:" @@ -6208,7 +6127,7 @@ msgstr "Guarda la configuración al archivo especificado." #. TRN "Save current Settings" #: src/slic3r/GUI/Tab.cpp:133 -#, c-format +#, possible-c-format msgid "Save current %s" msgstr "Guardar lo actual %s" @@ -6279,12 +6198,8 @@ msgid "Scale factors" msgstr "Factores de escala" #: src/slic3r/GUI/KBShortcutsDialog.cpp:196 -msgid "" -"Scale selection to fit print volume\n" -"in Gizmo scale" -msgstr "" -"Redimensiona para ajustar el volumen de impresión\n" -"en escala Gizmo" +msgid "Scale selection to fit print volume\nin Gizmo scale" +msgstr "Redimensiona para ajustar el volumen de impresión\nen escala Gizmo" #: src/slic3r/GUI/GUI_ObjectList.cpp:1724 msgid "Scale the selected object to fit the print volume" @@ -6419,14 +6334,12 @@ msgid "Select what kind of support do you need" msgstr "Selecciona qué clase de soporte necesitas" #: src/slic3r/GUI/DoubleSlider.cpp:1917 -msgid "" -"Select YES if you want to delete all saved tool changes, \n" -"\tNO if you want all tool changes switch to color changes, \n" -"\tor CANCEL to leave it unchanged." -msgstr "" -"Escoge SI si deseas borrar todos los cambios de herramienta,\n" -"NO si deseas que los cambios de herramienta sean cambios de color,\n" -"o CANCELAR para no hacer cambios." +msgid "Select YES if you want to delete all saved tool changes, \n\tNO if you want all tool changes switch to color changes, \n\tor CANCEL to leave it unchanged." +msgstr "Escoge SI si deseas borrar todos los cambios de herramienta,\nNO si deseas que los cambios de herramienta sean cambios de color,\no CANCELAR para no hacer cambios." + +#: src/slic3r/GUI/DoubleSlider.cpp:1917 +msgid "Select YES if you want to delete all saved tool changes, \nNO if you want all tool changes switch to color changes, \nor CANCEL to leave it unchanged." +msgstr "Escoge SI si deseas borrar todos los cambios de herramienta,\nNO si deseas que los cambios de herramienta sean cambios de color,\no CANCELAR para no hacer cambios." #: src/slic3r/GUI/Selection.cpp:146 msgid "Selection-Add" @@ -6567,7 +6480,7 @@ msgid "Set number of instances" msgstr "Establecer número de instancias" #: src/slic3r/GUI/Plater.cpp:4756 -#, c-format +#, possible-c-format msgid "Set numbers of copies to %d" msgstr "Establecer el número de copias a %d" @@ -6656,12 +6569,8 @@ msgid "Set upper thumb to current slider thumb" msgstr "Coloca el pulgar superior en el control deslizante actual" #: src/libslic3r/PrintConfig.cpp:3509 -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 "" -"Ajusta el nivel de avisos: 0:fallo, 1:error, 2:peligro, 3:info, 4:depuración, 5:traza\n" -"Por ejemplo. loglevel=2 registrará mensajes de fallo, error y peligro." +msgid "Sets logging sensitivity. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, 5:trace\nFor example. loglevel=2 logs fatal, error and warning level messages." +msgstr "Ajusta el nivel de avisos: 0:fallo, 1:error, 2:peligro, 3:info, 4:depuración, 5:traza\nPor ejemplo. loglevel=2 registrará mensajes de fallo, error y peligro." #: src/slic3r/GUI/BedShapeDialog.cpp:155 msgid "Settings" @@ -6832,14 +6741,8 @@ msgid "Single Extruder Multi Material" msgstr "Extrusor único de múltiples materiales" #: src/slic3r/GUI/Tab.cpp:1867 -msgid "" -"Single Extruder Multi Material is selected, \n" -"and all extruders must have the same diameter.\n" -"Do you want to change the diameter for all extruders to first extruder nozzle diameter value?" -msgstr "" -"Multi Material en extrusor único seleccionado,\n" -"y todos los extrusores deben tener el mismo diámetro.\n" -"¿Deseas cambiar el diámetro de todos los extrusores al valor del diámetro del nozzle del primer extrusor?" +msgid "Single Extruder Multi Material is selected, \nand all extruders must have the same diameter.\nDo you want to change the diameter for all extruders to first extruder nozzle diameter value?" +msgstr "Multi Material en extrusor único seleccionado,\ny todos los extrusores deben tener el mismo diámetro.\n¿Deseas cambiar el diámetro de todos los extrusores al valor del diámetro del nozzle del primer extrusor?" #: src/slic3r/GUI/Tab.cpp:2307 msgid "Single extruder multimaterial parameters" @@ -7294,7 +7197,7 @@ msgid "stealth mode" msgstr "modo silencioso" #: src/slic3r/GUI/Plater.cpp:4985 -#, c-format +#, possible-c-format msgid "STL file exported to %s" msgstr "Archivo STL exportado a %s" @@ -7445,12 +7348,8 @@ msgid "Supports stealth mode" msgstr "Soporta modo silencioso" #: src/slic3r/GUI/ConfigManipulation.cpp:159 -msgid "" -"Supports work better, if the following feature is enabled:\n" -"- Detect bridging perimeters" -msgstr "" -"Los soportes funcionan mejor si la siguiente característica está habilitada:\n" -"- Detectar perímetros con puentes" +msgid "Supports work better, if the following feature is enabled:\n- Detect bridging perimeters" +msgstr "Los soportes funcionan mejor si la siguiente característica está habilitada:\n- Detectar perímetros con puentes" #: src/slic3r/GUI/Preferences.cpp:87 msgid "Suppress \" - default - \" presets" @@ -7485,27 +7384,17 @@ msgid "Switch to Preview" msgstr "Cambiar a Previsualización" #: src/slic3r/GUI/wxExtensions.cpp:703 -#, c-format +#, possible-c-format msgid "Switch to the %s mode" msgstr "Cambiar al modo %s" #: src/slic3r/GUI/GUI_App.cpp:882 -msgid "" -"Switching the language will trigger application restart.\n" -"You will lose content of the plater." -msgstr "" -"Cambiar el idioma necesita reiniciar la aplicación.\n" -"Perderás todo el contenido situado en la base." +msgid "Switching the language will trigger application restart.\nYou will lose content of the plater." +msgstr "Cambiar el idioma necesita reiniciar la aplicación.\nPerderás todo el contenido situado en la base." #: src/slic3r/GUI/WipeTowerDialog.cpp:365 -msgid "" -"Switching to simple settings will discard changes done in the advanced mode!\n" -"\n" -"Do you want to proceed?" -msgstr "" -"¡Cambiar a los ajustes sencillos descartará los cambios realizados en el modo avanzado!\n" -"\n" -"¿Quiere continuar?" +msgid "Switching to simple settings will discard changes done in the advanced mode!\n\nDo you want to proceed?" +msgstr "¡Cambiar a los ajustes sencillos descartará los cambios realizados en el modo avanzado!\n\n¿Quiere continuar?" #: src/slic3r/GUI/Tab.cpp:1014 msgid "symbolic profile name" @@ -7570,24 +7459,17 @@ msgid "The %1% infill pattern is not supposed to work at 100%% density." msgstr "Se supone que el patrón de relleno %1% no funciona a una densidad del 100%%." #: src/slic3r/GUI/FirmwareDialog.cpp:548 -#, c-format +#, possible-c-format msgid "The %s device could not have been found" msgstr "El dispositivo %s no se pudo encontrar" #: src/slic3r/GUI/FirmwareDialog.cpp:436 -#, c-format -msgid "" -"The %s device was not found.\n" -"If the device is connected, please press the Reset button next to the USB connector ..." -msgstr "" -"No se encontró el dispositivo %s. \n" -"Si el dispositivo está conectado, presione el botón Reset al lado del conector USB ..." +#, possible-c-format +msgid "The %s device was not found.\nIf the device is connected, please press the Reset button next to the USB connector ..." +msgstr "No se encontró el dispositivo %s. \nSi el dispositivo está conectado, presione el botón Reset al lado del conector USB ..." #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:875 -msgid "" -"The currently manipulated object is tilted (rotation angles are not multiples of 90°).\n" -"Non-uniform scaling of tilted objects is only possible in the World coordinate system,\n" -"once the rotation is embedded into the object coordinates." +msgid "The currently manipulated object is tilted (rotation angles are not multiples of 90°).\nNon-uniform scaling of tilted objects is only possible in the World coordinate system,\nonce the rotation is embedded into the object coordinates." msgstr "El objeto que está manipulando está inclinado (los ángulos de rotación no son múltiplos de 90º). El escalado no uniforme de objetos inclinados sólo es posible en sistema de coordenadas Mundo, una vez que la rotación se ha aplicado a las coordenadas del objeto." #: src/libslic3r/PrintConfig.cpp:2726 @@ -7696,14 +7578,8 @@ msgid "The object will be raised by this number of layers, and support material msgstr "El objeto será elevado por este número de capas y se generará material de soporte debajo de él." #: src/libslic3r/PrintConfig.cpp:2424 -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 "" -"El porcentaje del área de la cama. \n" -"Si el área de impresión excede el valor especificado, \n" -"entonces se utilizará una inclinación lenta, de lo contrario - una inclinación rápida" +msgid "The percentage of the bed area. \nIf the print area exceeds the specified value, \nthen a slow tilt will be used, otherwise - a fast tilt" +msgstr "El porcentaje del área de la cama. \nSi el área de impresión excede el valor especificado, \nentonces se utilizará una inclinación lenta, de lo contrario - una inclinación rápida" #: src/slic3r/GUI/GUI_App.cpp:932 msgid "The presets on the following tabs were modified" @@ -7737,19 +7613,17 @@ msgstr "El objeto seleccionado no se puede dividir porque contiene más de un vo msgid "The selected object couldn't be split because it contains only one part." msgstr "El objeto seleccionado no se pudo dividir porque contiene solo una parte." +#: src/slic3r/GUI/MainFrame.cpp:432 +msgid "The selected project is no longer available.\nDo you want to remove it from the recent projects list ?" +msgstr "El proyecto seleccionado no está disponible.\n¿Desea eliminarlo de la lista de proyectos recientes?" + #: src/slic3r/GUI/MainFrame.cpp:422 msgid "The selected project is no more available" msgstr "El proyecto seleccionado no está diponible" #: src/slic3r/GUI/DoubleSlider.cpp:998 -msgid "" -"The sequential print is on.\n" -"It's impossible to apply any custom G-code for objects printing sequentually.\n" -"This code won't be processed during G-code generation." -msgstr "" -"La impresión secuencial está activada.\n" -"Es imposible incluir G-code personalizado para piezas que se imprimen secuencialmente.\n" -"Este código no se procesará durante la generación del G-code." +msgid "The sequential print is on.\nIt's impossible to apply any custom G-code for objects printing sequentually.\nThis code won't be processed during G-code generation." +msgstr "La impresión secuencial está activada.\nEs imposible incluir G-code personalizado para piezas que se imprimen secuencialmente.\nEste código no se procesará durante la generación del G-code." #: src/libslic3r/PrintConfig.cpp:2846 msgid "The slope of the pad wall relative to the bed plane. 90 degrees means straight walls." @@ -7765,22 +7639,8 @@ msgstr "La velocidad para las retracciones (solo se aplica al motor del extrusor #: src/slic3r/GUI/ConfigManipulation.cpp:81 #, no-c-format -msgid "" -"The Spiral Vase mode requires:\n" -"- one perimeter\n" -"- no top solid layers\n" -"- 0% fill density\n" -"- no support material\n" -"- Ensure vertical shell thickness enabled\n" -"- Detect thin walls disabled" -msgstr "" -"El modo Vaso Espiral necesita:\n" -"-un perímetro\n" -"-cero capas de tapa superior\n" -"-0% densidad de relleno\n" -"-sin soportes\n" -"-Comprueba que está activado el espesor de pared vertical\n" -"-Desactiva la detección de paredes finas" +msgid "The Spiral Vase mode requires:\n- one perimeter\n- no top solid layers\n- 0% fill density\n- no support material\n- Ensure vertical shell thickness enabled\n- Detect thin walls disabled" +msgstr "El modo Vaso Espiral necesita:\n-un perímetro\n-cero capas de tapa superior\n-0% densidad de relleno\n-sin soportes\n-Comprueba que está activado el espesor de pared vertical\n-Desactiva la detección de paredes finas" #: src/libslic3r/Print.cpp:1237 msgid "The Spiral Vase option can only be used when printing a single object." @@ -7817,10 +7677,7 @@ msgid "The vertical distance between object and support material interface. Sett msgstr "La distancia vertical entre el objeto y la interfaz del material de soporte. Establecer esto en 0 también evitará que Slic3r use el flujo y la velocidad del puente para la primera capa de los objetos." #: src/slic3r/GUI/Tab.cpp:2575 -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?" +msgid "The Wipe option is not available when using the Firmware Retraction mode.\n\nShall I disable it in order to enable Firmware Retraction?" msgstr "La opción Limpiar no está disponible cuando se usa el modo Retracción de firmware. ¿Lo inhabilito para habilitar la Retracción de firmware?" #: src/libslic3r/Print.cpp:1268 @@ -7828,13 +7685,8 @@ msgid "The Wipe Tower currently does not support volumetric E (use_volumetric_e= msgstr "La Torre de Limpieza actualmente no es compatible con E volumétrico (use_volumetric_e=0)." #: src/slic3r/GUI/ConfigManipulation.cpp:115 -msgid "" -"The Wipe Tower currently supports the non-soluble supports only\n" -"if they are printed with the current extruder without triggering a tool change.\n" -"(both support_material_extruder and support_material_interface_extruder need to be set to 0)." -msgstr "" -"La Torre de Limpieza actualmente admite los soportes no solubles solo si están impresos con el extrusor actual sin activar un cambio de herramienta. \n" -"(tanto support_material_extruder como support_material_interface_extruder deben configurarse en 0)." +msgid "The Wipe Tower currently supports the non-soluble supports only\nif they are printed with the current extruder without triggering a tool change.\n(both support_material_extruder and support_material_interface_extruder need to be set to 0)." +msgstr "La Torre de Limpieza actualmente admite los soportes no solubles solo si están impresos con el extrusor actual sin activar un cambio de herramienta. \n(tanto support_material_extruder como support_material_interface_extruder deben configurarse en 0)." #: src/libslic3r/Print.cpp:1400 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 support_material_extruder and support_material_interface_extruder need to be set to 0)." @@ -7881,29 +7733,19 @@ msgid "There are unprintable objects. Try to adjust support settings to make the msgstr "Hay objetos no imprimibles. Intenta ajustar la configuración de soportes para que los objetos se puedan imprimir." #: src/slic3r/GUI/DoubleSlider.cpp:1030 -msgid "" -"There is a color change for extruder that has not been used before.\n" -"Check your settings to avoid redundant color changes." -msgstr "" -"Hay un cambio de color para el extrusor que no se ha usado antes. \n" -"Comprueba tus ajustes para evitar cambios de color innecesarios." +msgid "There is a color change for extruder that has not been used before.\nCheck your settings to avoid redundant color changes." +msgstr "Hay un cambio de color para el extrusor que no se ha usado antes. \nComprueba tus ajustes para evitar cambios de color innecesarios." #: src/slic3r/GUI/DoubleSlider.cpp:1024 -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." +msgid "There is a color change for extruder that won't be used till the end of print job.\nThis code won't be processed during G-code generation." msgstr "Hay un cambio de color para el extrusor que no será usado hasta el final del trabajo de impresión. Este código no será procesado durante la generación del G-code." #: src/slic3r/GUI/DoubleSlider.cpp:1027 -msgid "" -"There is an extruder change set to the same extruder.\n" -"This code won't be processed during G-code generation." -msgstr "" -"Hay un cambio de extrusor establecido en el mismo extrusor.\n" -"Este código no se procesará durante la generación del código G." +msgid "There is an extruder change set to the same extruder.\nThis code won't be processed during G-code generation." +msgstr "Hay un cambio de extrusor establecido en el mismo extrusor.\nEste código no se procesará durante la generación del código G." #: src/slic3r/GUI/UpdateDialogs.cpp:225 -#, c-format +#, possible-c-format msgid "This %s version: %s" msgstr "Esta %s versión: %s" @@ -7980,29 +7822,13 @@ msgid "This file cannot be loaded in a simple mode. Do you want to switch to an msgstr "Este archivo no puede ser cargado en un modo sencillo. ¿Quieres cambiar al modo experto?" #: src/slic3r/GUI/Plater.cpp:2357 -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 "" -"Este archivo contiene varios objetos posicionados en múltiples alturas. En lugar de considerarlos como objetos múltiples, ¿debería considerar\n" -" este archivo como un único objeto que tiene varias partes?" +msgid "This file contains several objects positioned at multiple heights.\nInstead of considering them as multiple objects, should I consider\nthis file as a single object having multiple parts?" +msgstr "Este archivo contiene varios objetos posicionados en múltiples alturas. En lugar de considerarlos como objetos múltiples, ¿debería considerar\n este archivo como un único objeto que tiene varias partes?" #: src/slic3r/GUI/FirmwareDialog.cpp:332 -#, c-format -msgid "" -"This firmware hex file does not match the printer model.\n" -"The hex file is intended for: %s\n" -"Printer reported: %s\n" -"\n" -"Do you want to continue and flash this hex file anyway?\n" -"Please only continue if you are sure this is the right thing to do." -msgstr "" -"Este archivo hex del firmware no se corresponde con el modelo de impresora. El archivo hex está preparado para: %s\n" -"Esta Impresora: %s\n" -"\n" -"¿Quieres continuar y grabar este archivo hex de todos modos?\n" -"Por favor continúa solo si estás seguro de que es lo correcto." +#, possible-c-format +msgid "This firmware hex file does not match the printer model.\nThe hex file is intended for: %s\nPrinter reported: %s\n\nDo you want to continue and flash this hex file anyway?\nPlease only continue if you are sure this is the right thing to do." +msgstr "Este archivo hex del firmware no se corresponde con el modelo de impresora. El archivo hex está preparado para: %s\nEsta Impresora: %s\n\n¿Quieres continuar y grabar este archivo hex de todos modos?\nPor favor continúa solo si estás seguro de que es lo correcto." #: src/libslic3r/PrintConfig.cpp:314 msgid "This flag enables the automatic cooling logic that adjusts print speed and fan speed according to layer printing time." @@ -8077,17 +7903,17 @@ msgstr "Esta es la altura más baja de la capa imprimible para este extrusor y l 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 "Esto generalmente es causado por extrusiones insignificantemente pequeñas o por un modelo defectuoso. Intenta reparar el modelo o cambia su orientación en la cama." +#: src/libslic3r/GCode.cpp:639 +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 "Esto generalmente es causado por extrusiones insignificantemente pequeñas o por un modelo defectuoso. Intenta reparar el modelo o cambia su orientación en la cama." + #: src/libslic3r/PrintConfig.cpp:2215 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 "Esta matriz detalla los volúmenes (en milímetros cúbicos) necesarios para purgar el nuevo filamento en la torre de limpieza para cualquier par de filamentos." #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:878 -msgid "" -"This operation is irreversible.\n" -"Do you want to proceed?" -msgstr "" -"Esta operación es irreversible. \n" -"¿Deseas continuar?" +msgid "This operation is irreversible.\nDo you want to proceed?" +msgstr "Esta operación es irreversible. \n¿Deseas continuar?" #: src/libslic3r/PrintConfig.cpp:1442 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 surfaces which benefit from a higher number of perimeters if the Extra Perimeters option is enabled." @@ -8150,16 +7976,9 @@ msgid "This vector saves required volumes to change from/to each tool used on th msgstr "Este vector guarda los volúmenes necesarios para cambiar desde/hasta cada herramienta usada en la torre de limpieza. Estos valores se emplean para simplificar la creación de los volúmenes totales de purga más abajo." #: src/slic3r/GUI/UpdateDialogs.cpp:216 -#, c-format -msgid "" -"This version of %s is not compatible with currently installed configuration bundles.\n" -"This probably happened as a result of running an older %s after using a newer one.\n" -"\n" -"You may either exit %s and try again with a newer version, or you may re-run the initial configuration. Doing so will create a backup snapshot of the existing configuration before installing files compatible with this %s." -msgstr "" -"Esta versión de %s no es compatible con los grupos de configuraciones instaladas. Esto sucede probablemente por ejecutar una versión de %s después de haber usado una más reciente.\n" -"\n" -"Puedes salir de %s e intentarlo de nuevo con una versión más reciente, o puedes volver a ejecutar la configuración inicial. Al hacerlo se creará una copia de respaldo de la configuración existente antes de instalar la nueva compatible con esta versión de %s." +#, possible-c-format +msgid "This version of %s is not compatible with currently installed configuration bundles.\nThis probably happened as a result of running an older %s after using a newer one.\n\nYou may either exit %s and try again with a newer version, or you may re-run the initial configuration. Doing so will create a backup snapshot of the existing configuration before installing files compatible with this %s." +msgstr "Esta versión de %s no es compatible con los grupos de configuraciones instaladas. Esto sucede probablemente por ejecutar una versión de %s después de haber usado una más reciente.\n\nPuedes salir de %s e intentarlo de nuevo con una versión más reciente, o puedes volver a ejecutar la configuración inicial. Al hacerlo se creará una copia de respaldo de la configuración existente antes de instalar la nueva compatible con esta versión de %s." #: src/libslic3r/PrintConfig.cpp:2458 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." @@ -8217,8 +8036,12 @@ msgstr "A los objetos" msgid "To parts" msgstr "A las piezas" +#: src/slic3r/GUI/Tab.cpp:1756 +msgid "To use a custom CA file, please import your CA file into Certificate Store / Keychain." +msgstr "Para usar un archivo CA personalizado, importa tu archivo CA al Almacén de Certificados/Llavero." + #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:263 -#, c-format +#, possible-c-format msgid "Toggle %c axis mirroring" msgstr "Activar reflejo del eje %c" @@ -8343,7 +8166,7 @@ msgid "Undo" msgstr "Deshacer" #: src/slic3r/GUI/GLCanvas3D.cpp:4065 -#, c-format +#, possible-c-format msgid "Undo %1$d Action" msgid_plural "Undo %1$d Actions" msgstr[0] "Deshacer %1$d Acción" @@ -8384,23 +8207,15 @@ msgid "UNLOCKED LOCK" msgstr "CANDADO ABIERTO" #: src/slic3r/GUI/Tab.cpp:3282 -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" -"Click to reset all settings for current option group to the system (or default) values." -msgstr "" -"El icono de CANDADO DESBLOQUEADO indica que se cambiaron algunas configuraciones y no son iguales a los valores del sistema (o predeterminados) para el grupo de opciones actual.\n" -"Haz clic para restablecer todas las configuraciones para el grupo de opciones actual a los valores del sistema (o predeterminados)." +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.\nClick to reset all settings for current option group to the system (or default) values." +msgstr "El icono de CANDADO DESBLOQUEADO indica que se cambiaron algunas configuraciones y no son iguales a los valores del sistema (o predeterminados) para el grupo de opciones actual.\nHaz clic para restablecer todas las configuraciones para el grupo de opciones actual a los valores del sistema (o predeterminados)." #: src/slic3r/GUI/Tab.cpp:3297 -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 "" -"El icono de CANDADO DESBLOQUEADO indica que se cambiaron algunas configuraciones y no son iguales a los valores del sistema (o predeterminados).\n" -"Haz clic para reiniciar el valor actual a los del sistema (o predeterminados)" +msgid "UNLOCKED LOCK icon indicates that the value was changed and is not equal to the system (or default) value.\nClick to reset current value to the system (or default) value." +msgstr "El icono de CANDADO DESBLOQUEADO indica que se cambiaron algunas configuraciones y no son iguales a los valores del sistema (o predeterminados).\nHaz clic para reiniciar el valor actual a los del sistema (o predeterminados)" #: src/slic3r/GUI/Plater.cpp:5203 -#, c-format +#, possible-c-format msgid "Unmounting successful. The device %s(%s) can now be safely removed from the computer." msgstr "Expulsión exitosa. El dispositivo %s (%s) puede desconectarse del ordenador de forma segura." @@ -8449,7 +8264,7 @@ msgid "Unsupported selection" msgstr "Selección no soportada" #: src/slic3r/GUI/GLCanvas3D.cpp:955 -#, c-format +#, possible-c-format msgid "up to %.2f mm" msgstr "hasta %.2f mm" @@ -8711,12 +8526,12 @@ msgid "Welcome" msgstr "Bienvenido" #: src/slic3r/GUI/ConfigWizard.cpp:427 -#, c-format +#, possible-c-format msgid "Welcome to the %s Configuration Assistant" msgstr "Bienvenido al %s Asistente de Configuración" #: src/slic3r/GUI/ConfigWizard.cpp:429 -#, c-format +#, possible-c-format msgid "Welcome to the %s Configuration Wizard" msgstr "Bienvenido al %s Ayudante de Configuración" @@ -8882,17 +8697,8 @@ msgid "World coordinates" msgstr "Coordenadas mundiales" #: src/slic3r/GUI/UpdateDialogs.cpp:92 -msgid "" -"Would you like to install it?\n" -"\n" -"Note that a full configuration snapshot will be created first. It can then be restored at any time should there be a problem with the new version.\n" -"\n" -"Updated configuration bundles:" -msgstr "" -"¿Te gustaría instalarlo?\n" -"\n" -"Ten en cuenta que primero se creará una instantánea de la configuración. Así que se puede recuperar en cualquier momento en caso de que hubiera algún problema con la nueva versión.\n" -"Updated configuration bundles:" +msgid "Would you like to install it?\n\nNote that a full configuration snapshot will be created first. It can then be restored at any time should there be a problem with the new version.\n\nUpdated configuration bundles:" +msgstr "¿Te gustaría instalarlo?\n\nTen en cuenta que primero se creará una instantánea de la configuración. Así que se puede recuperar en cualquier momento en caso de que hubiera algún problema con la nueva versión.\nUpdated configuration bundles:" #: src/libslic3r/Zipper.cpp:92 msgid "write calledback failed" @@ -8959,7 +8765,7 @@ msgid "You can't change a type of the last solid part of the object." msgstr "No puede cambiar un tipo de la última parte sólida del objeto." #: src/slic3r/GUI/Plater.cpp:2390 -#, c-format +#, 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 "No puede agregar el(los) objeto(s) desde % s porque uno o algunos de ellos son de varias piezas" @@ -8988,12 +8794,12 @@ msgid "You must install a configuration update." msgstr "Es necesario instalar una actualización de la configuración." #: src/slic3r/GUI/Preferences.cpp:172 -#, c-format +#, possible-c-format msgid "You need to restart %s to make the changes effective." msgstr "Es necesario reiniciar %s para hacer los cambios efectivos." #: src/slic3r/GUI/GUI_ObjectList.cpp:3421 -#, c-format +#, possible-c-format msgid "You started your selection with %s Item." msgstr "Has empezado la selección con %s Items." @@ -9018,24 +8824,12 @@ msgid "Z offset" msgstr "Ajuste en altura Z" #: src/slic3r/GUI/ConfigManipulation.cpp:60 -msgid "" -"Zero first layer height is not valid.\n" -"\n" -"The first layer height will be reset to 0.01." -msgstr "" -"Cero como la altura de la primera capa no es válido.\n" -"\n" -"La altura de la primera capa se restablecerá a 0.01." +msgid "Zero first layer height is not valid.\n\nThe first layer height will be reset to 0.01." +msgstr "Cero como la altura de la primera capa no es válido.\n\nLa altura de la primera capa se restablecerá a 0.01." #: src/slic3r/GUI/ConfigManipulation.cpp:48 -msgid "" -"Zero layer height is not valid.\n" -"\n" -"The layer height will be reset to 0.01." -msgstr "" -"Cero como la altura de capa no es válido.\n" -"\n" -"La altura de capa se restablecerá a 0.01." +msgid "Zero layer height is not valid.\n\nThe layer height will be reset to 0.01." +msgstr "Cero como la altura de capa no es válido.\n\nLa altura de capa se restablecerá a 0.01." #: src/libslic3r/PrintConfig.cpp:2667 msgid "Zig-Zag" @@ -9059,12 +8853,8 @@ msgid "Zoom to Bed" msgstr "Zoom a la Cama" #: src/slic3r/GUI/KBShortcutsDialog.cpp:182 -msgid "" -"Zoom to selected object\n" -"or all objects in scene, if none selected" -msgstr "" -"Zoom a objetos seleccionados\n" -"o a todos los objetos en escena, si no se seleccionó ninguno" +msgid "Zoom to selected object\nor all objects in scene, if none selected" +msgstr "Zoom a objetos seleccionados\no a todos los objetos en escena, si no se seleccionó ninguno" #: src/libslic3r/PrintConfig.cpp:207 src/libslic3r/PrintConfig.cpp:780 #: src/libslic3r/PrintConfig.cpp:1640 src/libslic3r/PrintConfig.cpp:1650 diff --git a/resources/localization/fr/PrusaSlicer.mo b/resources/localization/fr/PrusaSlicer.mo index 7fd27690ee..03bcd7046b 100644 Binary files a/resources/localization/fr/PrusaSlicer.mo and b/resources/localization/fr/PrusaSlicer.mo differ diff --git a/resources/localization/fr/PrusaSlicer_fr.po b/resources/localization/fr/PrusaSlicer_fr.po index 235c6dd08d..4cf4b627e8 100644 --- a/resources/localization/fr/PrusaSlicer_fr.po +++ b/resources/localization/fr/PrusaSlicer_fr.po @@ -5,7 +5,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Poedit 1.8.7.1\n" +"X-Generator: Poedit 2.3\n" "Project-Id-Version: \n" "POT-Creation-Date: \n" "PO-Revision-Date: \n" @@ -1561,6 +1561,10 @@ msgstr "Cubique" msgid "Current mode is %s" msgstr "Le mode actuel est %s" +#: src/slic3r/GUI/Tab.cpp:959 +msgid "Current preset is inherited from" +msgstr "Le préréglage actuel est hérité de" + #: src/slic3r/GUI/Tab.cpp:957 msgid "Current preset is inherited from the default preset." msgstr "Le préréglage actuel est hérité du préréglage par défaut." @@ -2956,6 +2960,15 @@ msgstr "" "pour le bouton gauche : indique un préréglage non-système (ou non par défaut),\n" "pour le bouton droit : indique que le réglage n'a pas été modifié." +#. TRN Description for "WHITE BULLET" +#: src/slic3r/GUI/Tab.cpp:3267 +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 "" +"pour le bouton gauche : indique un préréglage non-système (ou non par défaut),\n" +"pour le bouton droit : indique que le réglage n'a pas été modifié." + #: src/slic3r/GUI/ConfigManipulation.cpp:136 msgid "" "For the Wipe Tower to work with the soluble supports, the support layers\n" @@ -3578,7 +3591,6 @@ msgid "" "Click the UNLOCKED LOCK icon to reset all settings for current option group to the system (or default) values." msgstr "" "indique que certains paramètres ont été modifiés et ne sont pas égaux aux valeurs du système (ou par défaut) pour le groupe d'options actuel.\n" -"\n" "Cliquez sur l'icône CADENAS OUVERT pour régler tous les paramètres pour le groupe d'options actuel sur les valeurs du système (ou par défaut)." #. TRN Description for "LOCKED LOCK" @@ -4055,15 +4067,15 @@ msgstr "Verrouiller les supports sous de nouveaux îlots" #: src/slic3r/GUI/Tab.cpp:3252 msgid "LOCKED LOCK" -msgstr "VERROU VERROUILLE" +msgstr "CADENAS FERMÉ" #: src/slic3r/GUI/Tab.cpp:3280 msgid "LOCKED LOCK icon indicates that the settings are the same as the system (or default) values for the current option group" -msgstr "L'icône VERROU VERROUILLE indique que les réglages sont les mêmes que les valeurs système (ou par défaut) pour le groupe d'options actuel" +msgstr "L'icône CADENAS FERMÉ indique que les réglages sont les mêmes que les valeurs système (ou par défaut) pour le groupe d'options actuel" #: src/slic3r/GUI/Tab.cpp:3296 msgid "LOCKED LOCK icon indicates that the value is the same as the system (or default) value." -msgstr "L'icône VERROU VERROUILLÉ indique que la valeur est la même que la valeur système (ou par défaut)." +msgstr "L'icône CADENAS FERMÉ indique que la valeur est la même que la valeur système (ou par défaut)." #: src/libslic3r/PrintConfig.cpp:3508 msgid "Logging level" @@ -4122,6 +4134,10 @@ msgstr "Maximum" msgid "Max bridge length" msgstr "Longueur maximum de pont" +#: src/libslic3r/PrintConfig.cpp:2658 +msgid "Max bridges on a pillar" +msgstr "Nombre de ponts maximum par pilier" + #: src/libslic3r/PrintConfig.cpp:2822 msgid "Max merge distance" msgstr "Distance maximum de fusion" @@ -4290,6 +4306,10 @@ msgstr "Mouvement brusque maximum Y" msgid "Maximum jerk Z" msgstr "Mouvement brusque maximum Z" +#: src/libslic3r/PrintConfig.cpp:2660 +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 "Le nombre de ponts maximum pouvant être placés sur un pilier. Les ponts soutiennent les têtes des points de support et sont connectés aux piliers comme de petites branches." + #: src/libslic3r/PrintConfig.cpp:598 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 "Vitesse volumétrique maximale autorisée pour ce filament. Limite la vitesse volumétrique d'une impression au minimum des vitesses volumétriques d'impression et de filament. Mettez à zéro pour enlever la limite." @@ -4961,6 +4981,11 @@ msgstr "d'un Objet en cours" msgid "Offset" msgstr "Décalage" +#: src/slic3r/GUI/Tab.cpp:1755 +#, c-format +msgid "On this system, %s uses HTTPS certificates from the system Certificate Store or Keychain." +msgstr "Dans ce système, %s utilise des certificats HTTPS issus du système Magasin de Certificats ou Trousseau." + #: src/slic3r/GUI/DoubleSlider.cpp:950 msgid "One layer mode" msgstr "Mode couche unique" @@ -6437,6 +6462,16 @@ msgstr "" "NON si vous souhaitez que tous les changements d'outil soient remplacés par des modifications de couleur, \n" "ou ANNULER pour ne pas les modifier." +#: src/slic3r/GUI/DoubleSlider.cpp:1917 +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 "" +"Sélectionnez OUI si vous souhaitez supprimer tous les changements d'outil enregistrées, \n" +"NON si vous souhaitez que tous les changements d'outil soient remplacés par des modifications de couleur, \n" +"ou ANNULER pour ne pas les modifier." + #: src/slic3r/GUI/Selection.cpp:146 msgid "Selection-Add" msgstr "Sélection-Ajouter" @@ -7745,6 +7780,14 @@ msgstr "L'objet sélectionné ne peut être scindé car il contient plus d'un vo msgid "The selected object couldn't be split because it contains only one part." msgstr "L'objet sélectionné n'a pu être scindé car il ne contient qu'une seule pièce." +#: src/slic3r/GUI/MainFrame.cpp:432 +msgid "" +"The selected project is no longer available.\n" +"Do you want to remove it from the recent projects list ?" +msgstr "" +"Le projet sélectionné n'est plus disponible.\n" +"Voulez-vous le retirer de la liste des projets récents ?" + #: src/slic3r/GUI/MainFrame.cpp:422 msgid "The selected project is no more available" msgstr "Le projet sélectionné n'est plus disponible" @@ -8092,6 +8135,10 @@ msgstr "Cette valeur est la hauteur de couche imprimable minimum pour cet extrud 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 "Ceci est généralement provoqué par de petites extrusions négligeables ou par un modèle défectueux. Essayez de réparer le modèle ou de changer son orientation sur le lit." +#: src/libslic3r/GCode.cpp:639 +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 "Ceci est généralement provoqué par de petites extrusions négligeables ou par un modèle défectueux. Essayez de réparer le modèle ou de changer son orientation sur le lit." + #: src/libslic3r/PrintConfig.cpp:2215 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 "Cette matrice décrit les volumes (en millimètres cube) nécessaires pour purger le nouveau filament dans la tour de nettoyage pour une paire d'outils donnée." @@ -8233,6 +8280,10 @@ msgstr "Vers les objets" msgid "To parts" msgstr "Vers les parties" +#: src/slic3r/GUI/Tab.cpp:1756 +msgid "To use a custom CA file, please import your CA file into Certificate Store / Keychain." +msgstr "Pour utiliser un fichier CA personnalisé, veuillez importer votre fichier CA dans le Magasin de Certificats / Trousseau." + #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:263 #, c-format msgid "Toggle %c axis mirroring" diff --git a/resources/localization/it/PrusaSlicer.mo b/resources/localization/it/PrusaSlicer.mo index 9130c6abf4..dde2a330b3 100644 Binary files a/resources/localization/it/PrusaSlicer.mo and b/resources/localization/it/PrusaSlicer.mo differ diff --git a/resources/localization/it/PrusaSlicer_it.po b/resources/localization/it/PrusaSlicer_it.po index 7a6c3e0a06..cfc083c54f 100644 --- a/resources/localization/it/PrusaSlicer_it.po +++ b/resources/localization/it/PrusaSlicer_it.po @@ -5,7 +5,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 1.8.7.1\n" +"X-Generator: Poedit 2.3\n" "Project-Id-Version: \n" "POT-Creation-Date: \n" "PO-Revision-Date: \n" @@ -1561,6 +1561,10 @@ msgstr "Cubico" msgid "Current mode is %s" msgstr "La modalità corrente è %s" +#: src/slic3r/GUI/Tab.cpp:959 +msgid "Current preset is inherited from" +msgstr "Il preset corrente è ereditato da" + #: src/slic3r/GUI/Tab.cpp:957 msgid "Current preset is inherited from the default preset." msgstr "Il preset attuale è stato ereditato dal preset predefinito." @@ -2956,6 +2960,15 @@ msgstr "" "per il tasto sinistro: indica un preset non di sistema (o non-predefinito),\n" "per il tasto destro: indica che le impostazioni non sono state modificate." +#. TRN Description for "WHITE BULLET" +#: src/slic3r/GUI/Tab.cpp:3267 +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 "" +"per il tasto sinistro: indica un preset non di sistema (o non-predefinito),\n" +"per il tasto destro: indica che le impostazioni non sono state modificate." + #: src/slic3r/GUI/ConfigManipulation.cpp:136 msgid "" "For the Wipe Tower to work with the soluble supports, the support layers\n" @@ -4115,6 +4128,10 @@ msgstr "Massimo" msgid "Max bridge length" msgstr "Lunghezza massima Bridge" +#: src/libslic3r/PrintConfig.cpp:2658 +msgid "Max bridges on a pillar" +msgstr "Ponteggi massimi su un pilastro" + #: src/libslic3r/PrintConfig.cpp:2822 msgid "Max merge distance" msgstr "Massima distanza di unione" @@ -4283,6 +4300,10 @@ msgstr "Jerk massimo Y" msgid "Maximum jerk Z" msgstr "Jerk massimo Z" +#: src/libslic3r/PrintConfig.cpp:2660 +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 "Numero massimo di ponteggi che può essere posizionato su un pilastro. I ponteggi mantengono le capocchie dei punti di supporto e si collegano ai pilastri come piccoli rami." + #: src/libslic3r/PrintConfig.cpp:598 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 "Massima velocità volumetrica consentita per questo filamento. Limita la velocità volumetrica massima di una stampa alla velocità volumetrica minima del filamento e di stampa. Imposta a zero per non avere limite." @@ -4953,6 +4974,11 @@ msgstr "di un Oggetto corrente" msgid "Offset" msgstr "Offset" +#: src/slic3r/GUI/Tab.cpp:1755 +#, c-format +msgid "On this system, %s uses HTTPS certificates from the system Certificate Store or Keychain." +msgstr "Su questo sistema, %s utilizza certificati HTTPS provenienti dal sistema Certificate Store o da Keychain." + #: src/slic3r/GUI/DoubleSlider.cpp:950 msgid "One layer mode" msgstr "Modalità Un Layer" @@ -6425,6 +6451,16 @@ msgstr "" "NO se vuoi che tutti i cambi attrezzo passino a cambi colore,\n" "o ANNULLA per lasciarlo invariato." +#: src/slic3r/GUI/DoubleSlider.cpp:1917 +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 "" +"Seleziona SI se vuoi cancellare tutti i cambi attrezzo salvati,\n" +"NO se vuoi che tutti i cambi attrezzo passino a cambi colore,\n" +"o ANNULLA per lasciarlo invariato." + #: src/slic3r/GUI/Selection.cpp:146 msgid "Selection-Add" msgstr "Selezione-Aggiungi" @@ -7736,6 +7772,14 @@ msgstr "L'oggetto selezionato non può essere diviso perché contiene più di un msgid "The selected object couldn't be split because it contains only one part." msgstr "L'oggetto selezionato non può essere diviso perché contiene solo una parte." +#: src/slic3r/GUI/MainFrame.cpp:432 +msgid "" +"The selected project is no longer available.\n" +"Do you want to remove it from the recent projects list ?" +msgstr "" +"Il progetto selezionato non è più disponibile.\n" +"Vuoi rimuoverlo dall'elenco dei progetti recenti?" + #: src/slic3r/GUI/MainFrame.cpp:422 msgid "The selected project is no more available" msgstr "Il progetto selezionato non è più disponibile" @@ -8080,6 +8124,10 @@ msgstr "Questa è l'altezza minima stampabile per questo estrusore e limita la r 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 "Questo solitamente è causato da estrusioni molto piccole o da un modello difettoso. Provare a riparare il modello o cambiare il suo orientamento sul piano." +#: src/libslic3r/GCode.cpp:639 +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 "Questo solitamente è causato da estrusioni molto piccole o da un modello difettoso. Provare a riparare il modello o cambiare il suo orientamento sul piano." + #: src/libslic3r/PrintConfig.cpp:2215 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 "Questa matrice descrive il volume (in millimetri cubici) necessario per spurgare il filamento nella torre di spurgo per una qualunque coppia di attrezzi." @@ -8221,6 +8269,10 @@ msgstr "In oggetti" msgid "To parts" msgstr "In parti" +#: src/slic3r/GUI/Tab.cpp:1756 +msgid "To use a custom CA file, please import your CA file into Certificate Store / Keychain." +msgstr "Per utilizzare un file CA personalizzato, importa il tuo file CA sul Certificate Store / Keychain." + #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:263 #, c-format msgid "Toggle %c axis mirroring" diff --git a/resources/localization/ja/PrusaSlicer.mo b/resources/localization/ja/PrusaSlicer.mo index 9211b25b0f..cdc5e8d751 100644 Binary files a/resources/localization/ja/PrusaSlicer.mo and b/resources/localization/ja/PrusaSlicer.mo differ diff --git a/resources/localization/ja/PrusaSlicer_ja.po b/resources/localization/ja/PrusaSlicer_ja.po index 1db540918b..c7889b1110 100644 --- a/resources/localization/ja/PrusaSlicer_ja.po +++ b/resources/localization/ja/PrusaSlicer_ja.po @@ -5,7 +5,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Poedit 2.2.1\n" +"X-Generator: Poedit 2.3\n" "Project-Id-Version: \n" "POT-Creation-Date: \n" "PO-Revision-Date: \n" @@ -1553,6 +1553,10 @@ msgstr "立方" msgid "Current mode is %s" msgstr "現在のモードは%sです" +#: src/slic3r/GUI/Tab.cpp:959 +msgid "Current preset is inherited from" +msgstr "現在のプリセット継承元" + #: src/slic3r/GUI/Tab.cpp:957 msgid "Current preset is inherited from the default preset." msgstr "現在の設定はデフォルト設定から継承されます。" @@ -2941,6 +2945,15 @@ msgid "" "for the right button: \tindicates that the settings hasn't been modified." msgstr "左ボタンの場合:システム(デフォルト)プリセットでないことを示し、右側ボタンの場合:設定が変更されていないことを示します。" +#. TRN Description for "WHITE BULLET" +#: src/slic3r/GUI/Tab.cpp:3267 +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 "" +"左ボタンの場合:システム(デフォルト)プリセットでないことを示し、\n" +"右側ボタンの場合:設定が変更されていないことを示します。" + #: src/slic3r/GUI/ConfigManipulation.cpp:136 msgid "" "For the Wipe Tower to work with the soluble supports, the support layers\n" @@ -3571,7 +3584,9 @@ msgstr "設定が現在の設定グループのシステム(デフォルト) msgid "" "indicates that the settings were changed and are not equal to the last saved preset for the current option group.\n" "Click the BACK ARROW icon to reset all settings for the current option group to the last saved preset." -msgstr "設定が変更され、現在のオプショングループに最後に保存されたプリセットと等しくないことを示します。戻る矢印アイコンをクリックして、現在のオプショングループのすべての設定を最後に保存されたプリセットに戻します。" +msgstr "" +"設定が変更され、現在のオプショングループに最後に保存されたプリセットと等しくないことを示します。\n" +"戻る矢印アイコンをクリックして、現在のオプショングループのすべての設定を最後に保存されたプリセットに戻します。" #: src/slic3r/GUI/ConfigManipulation.cpp:211 #: src/slic3r/GUI/GUI_ObjectList.cpp:35 src/slic3r/GUI/GUI_ObjectList.cpp:96 @@ -4100,6 +4115,10 @@ msgstr "最大" msgid "Max bridge length" msgstr "最長ブリッジ長さ" +#: src/libslic3r/PrintConfig.cpp:2658 +msgid "Max bridges on a pillar" +msgstr "柱の上の最大ブリッジ数" + #: src/libslic3r/PrintConfig.cpp:2822 msgid "Max merge distance" msgstr "最大結合距離" @@ -4268,6 +4287,10 @@ msgstr "Yの最大ジャーク" msgid "Maximum jerk Z" msgstr "Zの最大ジャーク" +#: src/libslic3r/PrintConfig.cpp:2660 +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:598 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 "このフィラメントに許容される最大体積押出し速度。プリントの最大体積押出し速度を、プリントとフィラメントの体積押出し速度の最小値にに制限します。 制限なしに設定するにはゼロを入力します。" @@ -4922,6 +4945,11 @@ msgstr "現在のオブジェクトの" msgid "Offset" msgstr "オフセット" +#: src/slic3r/GUI/Tab.cpp:1755 +#, c-format +msgid "On this system, %s uses HTTPS certificates from the system Certificate Store or Keychain." +msgstr "このシステムでは、%sはシステムの証明書ストアまたはキーチェーンからのHTTPS証明書を使用します。" + #: src/slic3r/GUI/DoubleSlider.cpp:950 msgid "One layer mode" msgstr "1レイヤーモード" @@ -6391,6 +6419,16 @@ msgstr "" "すべてのツールの変更を色の変更に切り替えたい場合は「いいえ」、\n" "または「キャンセル」で変更せずにそのままにします" +#: src/slic3r/GUI/DoubleSlider.cpp:1917 +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 "" +"保存したツールの変更をすべて削除する場合は、「はい」を選択します。\n" +"すべてのツールの変更を色の変更に切り替えたい場合は「いいえ」、\n" +"または「キャンセル」で変更せずにそのままにします" + #: src/slic3r/GUI/Selection.cpp:146 msgid "Selection-Add" msgstr "選択-追加" @@ -7696,6 +7734,14 @@ msgstr "選択したオブジェクトには複数のボリューム/マテリ msgid "The selected object couldn't be split because it contains only one part." msgstr "選択したオブジェクトには、1つのパーツしか含まれていないため、分割できませんでした。" +#: src/slic3r/GUI/MainFrame.cpp:432 +msgid "" +"The selected project is no longer available.\n" +"Do you want to remove it from the recent projects list ?" +msgstr "" +"選択したプロジェクトは使用できなくなりました。\n" +"最近のプロジェクトリストから削除しますか?" + #: src/slic3r/GUI/MainFrame.cpp:422 msgid "The selected project is no more available" msgstr "選択したプロジェクトはもう利用できません" @@ -8040,6 +8086,10 @@ msgstr "このエクストルーダーの最小プリント可能なレイヤー 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/GCode.cpp:639 +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/PrintConfig.cpp:2215 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 "この行列は、任意のツールチェンジ間においてワイプタワーの新しいフィラメントをパージするために必要な体積(立方ミリメートル)を示しています。" @@ -8180,6 +8230,10 @@ msgstr "オブジェクト" msgid "To parts" msgstr "パーツへ" +#: src/slic3r/GUI/Tab.cpp:1756 +msgid "To use a custom CA file, please import your CA file into Certificate Store / Keychain." +msgstr "カスタムCAファイルを使用するには、CAファイルを証明書ストア/キーチェーンにインポートしてください。" + #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:263 #, c-format msgid "Toggle %c axis mirroring" diff --git a/resources/localization/ko/PrusaSlicer.mo b/resources/localization/ko/PrusaSlicer.mo index 867fdc1e93..7ebda09fd5 100644 Binary files a/resources/localization/ko/PrusaSlicer.mo and b/resources/localization/ko/PrusaSlicer.mo differ diff --git a/resources/localization/ko/PrusaSlicer_ko_KR.po b/resources/localization/ko/PrusaSlicer_ko_KR.po index 71bc4488a3..dd3b29b1bf 100644 --- a/resources/localization/ko/PrusaSlicer_ko_KR.po +++ b/resources/localization/ko/PrusaSlicer_ko_KR.po @@ -1207,13 +1207,13 @@ msgstr "다중 압출기 인쇄를 위해 마지막 색상 변경 데이터가 #: src/slic3r/GUI/DoubleSlider.cpp:1889 msgid "" -"Select YES if you want to delete all saved tool changes, \n" -"\tNO if you want all tool changes switch to color changes, \n" -"\tor CANCEL for do nothing" +"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 for do nothing" msgstr "" -"저장된 도구 변경 내용을 모두 삭제하려면 YES를 선택합니다. \n" -"\t아니오 모든 도구 변경 이 색상 변경으로 전환하려면 \n" -"\t또는 아무것도 하지 않는 취소" +"저장된 도구 변경 내용을 모두 삭제하려면 YES를 선택합니다.\n" +"아니오 모든 도구 변경 이 색상 변경으로 전환하려면\n" +"또는 아무것도 하지 않는 취소" #: src/slic3r/GUI/DoubleSlider.cpp:1892 msgid "Do you want to delete all saved tool changes?" @@ -5411,16 +5411,18 @@ msgstr "CA 인증서 파일 열기" #: src/slic3r/GUI/Tab.cpp:1741 #, c-format msgid "" -"HTTPS CA File:\n" -" \tOn this system, %s uses HTTPS certificates from the system Certificate " +"On this system, %s uses HTTPS certificates from the system Certificate " "Store or Keychain.\n" -" \tTo use a custom CA file, please import your CA file into Certificate " +msgstr "" +"이 시스템에서 %s는 시스템 인증서 저장소나 키체인의 HTTPS 인증서를 사용 " +"합니다.\n" + +#: src/slic3r/GUI/Tab.cpp:1741 +msgid "" +"To use a custom CA file, please import your CA file into Certificate " "Store / Keychain." msgstr "" -"HTTPS CA 파일:\n" -" \t이 시스템에서 %s는 시스템 인증서 저장소나 키체인의 HTTPS 인증서를 사용 " -"합니다.\n" -" \t사용자 지정 CA 파일을 사용 하려면 CA 파일을 인증서 저장소/키체인에 가져" +"사용자 지정 CA 파일을 사용 하려면 CA 파일을 인증서 저장소/키체인에 가져" "오십시오." #: src/slic3r/GUI/Tab.cpp:1781 src/slic3r/GUI/Tab.cpp:2025 @@ -5717,8 +5719,8 @@ msgstr "흰색 글머리 기호" #. TRN Description for "WHITE BULLET" #: src/slic3r/GUI/Tab.cpp:3235 msgid "" -"for the left button: \tindicates a non-system (or non-default) preset,\n" -"for the right button: \tindicates that the settings hasn't been modified." +"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 "" "왼쪽 단추의 경우: 비시스템(또는 기본이 아닌) 사전 설정을 나타냅니다.\n" "오른쪽 버튼: 설정이 수정되지 않았음을 나타냅니다." @@ -6478,7 +6480,7 @@ msgstr "인쇄 z" #: src/libslic3r/GCode.cpp:639 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." +"Try to repair the model or change its orientation on the bed." msgstr "" "이는 일반적으로 무시할 수 있는 작은 돌출 또는 결함이 있는 모델에 의해 발생합" "니다. 모델을 수리하거나 배드에서 방향을 변경하십시오." diff --git a/resources/localization/nl/PrusaSlicer.mo b/resources/localization/nl/PrusaSlicer.mo index 68dab14a0f..f4d98c4a17 100644 Binary files a/resources/localization/nl/PrusaSlicer.mo and b/resources/localization/nl/PrusaSlicer.mo differ diff --git a/resources/localization/nl/PrusaSlicer_nl.po b/resources/localization/nl/PrusaSlicer_nl.po index 8dbac533e5..379f8e73c2 100644 --- a/resources/localization/nl/PrusaSlicer_nl.po +++ b/resources/localization/nl/PrusaSlicer_nl.po @@ -1223,9 +1223,9 @@ msgstr "Weet u zeker dat u wilt doorgaan?" #: src/slic3r/GUI/DoubleSlider.cpp:1915 msgid "" -"Select YES if you want to delete all saved tool changes, \n" -"\tNO if you want all tool changes switch to color changes, \n" -"\tor CANCEL to leave it unchanged" +"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 "" "Selecteer JA als u alle opgeslagen toolwisselingen wilt verwijdere,\n" "Selecteer NEE als u alle toolwisselingen wil omzetten in kleurwisselingen\n" @@ -5264,11 +5264,9 @@ msgstr "Huidige preset is gebaseerd op de standaard preset." #: src/slic3r/GUI/Tab.cpp:962 #, c-format msgid "" -"Current preset is inherited from:\n" -"\t%s" +"Current preset is inherited from" msgstr "" -"Huidige preset is gebaseerd op:\n" -"\t%s" +"Huidige preset is gebaseerd op" #: src/slic3r/GUI/Tab.cpp:966 msgid "It can't be deleted or modified." @@ -5544,16 +5542,18 @@ msgstr "Open een CA-certificaatbestand" #: src/slic3r/GUI/Tab.cpp:1759 #, c-format msgid "" -"HTTPS CA File:\n" -" \tOn this system, %s uses HTTPS certificates from the system Certificate " -"Store or Keychain.\n" -" \tTo use a custom CA file, please import your CA file into Certificate " +"On this system, %s uses HTTPS certificates from the system Certificate " +"Store or Keychain." +msgstr "" +"%s gebruikt op dit systeem HTTPS-certificaten van de Certificate Store " +"of Keychain." + +#: src/slic3r/GUI/Tab.cpp:1759 +msgid "" +"To use a custom CA file, please import your CA file into Certificate " "Store / Keychain." msgstr "" -"HTTPS-CA-bestand:\n" -" \t%s gebruikt op dit systeem HTTPS-certificaten van de Certificate Store " -"of Keychain.\n" -" \tOm een aangepast CA-bestand te gebruiken moet uw CA-bestand in de " +"Om een aangepast CA-bestand te gebruiken moet uw CA-bestand in de " "Certificate Store of Keychain geïmporteerd worden." #: src/slic3r/GUI/Tab.cpp:1799 src/slic3r/GUI/Tab.cpp:2043 @@ -5855,11 +5855,11 @@ msgstr "Wit bolletje" #. TRN Description for "WHITE BULLET" #: src/slic3r/GUI/Tab.cpp:3255 msgid "" -"for the left button: \tindicates a non-system (or non-default) preset,\n" -"for the right button: \tindicates that the settings hasn't been modified." +"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 "" -"linker knop: \tgeeft een niet-systeempreset aan,\n" -"rechter knop: \tgeeft aan dat de instelling niet veranderd is." +"linker knop: geeft een niet-systeempreset aan,\n" +"rechter knop: geeft aan dat de instelling niet veranderd is." #: src/slic3r/GUI/Tab.cpp:3258 msgid "BACK ARROW" @@ -6623,7 +6623,7 @@ msgstr "Print Z" #: src/libslic3r/GCode.cpp:639 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." +"Try to repair the model or change its orientation on the bed." msgstr "" "Dit komt meestal voor bij verwaarloosbare extrusiehoeveelheden of door een " "foutief model. Probeer het model te repareren of verander de oriëntatie." diff --git a/resources/localization/pl/PrusaSlicer.mo b/resources/localization/pl/PrusaSlicer.mo index 6b70e132bd..6b20f72025 100644 Binary files a/resources/localization/pl/PrusaSlicer.mo and b/resources/localization/pl/PrusaSlicer.mo differ diff --git a/resources/localization/pl/PrusaSlicer_pl.po b/resources/localization/pl/PrusaSlicer_pl.po index 7ad85d44cc..444993eefd 100644 --- a/resources/localization/pl/PrusaSlicer_pl.po +++ b/resources/localization/pl/PrusaSlicer_pl.po @@ -5,7 +5,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n == 1) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || n%10 == 1 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 12 && n%100 <= 14)) ? 2 : 3);\n" -"X-Generator: Poedit 2.2.1\n" +"X-Generator: Poedit 2.3\n" "Project-Id-Version: \n" "POT-Creation-Date: \n" "PO-Revision-Date: \n" @@ -1032,7 +1032,7 @@ msgstr "Mosty objętościowe" #: src/slic3r/GUI/Plater.cpp:534 src/slic3r/GUI/Tab.cpp:1117 msgid "Brim" -msgstr "Brim (obramowanie)" +msgstr "Brim" #: src/libslic3r/PrintConfig.cpp:244 msgid "Brim width" @@ -1561,6 +1561,10 @@ msgstr "Sześcienny" msgid "Current mode is %s" msgstr "Obecny tryb to %s" +#: src/slic3r/GUI/Tab.cpp:959 +msgid "Current preset is inherited from" +msgstr "Obecny zestaw ustawień jest dziedziczony z" + #: src/slic3r/GUI/Tab.cpp:957 msgid "Current preset is inherited from the default preset." msgstr "Obecny zestaw ustawień jest dziedziczony z zestawu domyślnego." @@ -2956,6 +2960,15 @@ msgstr "" "dla lewego przycisku: wskazuje na niesystemowy (lub inny niż domyślny) zestaw ustawień,\n" "dla prawego przycisku: wskazuje, że ustawienia nie zostały zmodyfikowane." +#. TRN Description for "WHITE BULLET" +#: src/slic3r/GUI/Tab.cpp:3267 +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 "" +"dla lewego przycisku: wskazuje na niesystemowy (lub inny niż domyślny) zestaw ustawień,\n" +"dla prawego przycisku: wskazuje, że ustawienia nie zostały zmodyfikowane." + #: src/slic3r/GUI/ConfigManipulation.cpp:136 msgid "" "For the Wipe Tower to work with the soluble supports, the support layers\n" @@ -3572,7 +3585,7 @@ msgid "" "indicates that some settings were changed and are not equal to the system (or default) values for the current option group.\n" "Click the UNLOCKED LOCK icon to reset all settings for current option group to the system (or default) values." msgstr "" -"oznacza, że niektóre ustawienia zostały zmodyfikowane i nie odpowiadają wartościom systemowym (lub domyślnym) w obecnej grupie opcji. \n" +"oznacza, że niektóre ustawienia zostały zmodyfikowane i nie odpowiadają wartościom systemowym (lub domyślnym) w obecnej grupie opcji.\n" "Kliknij ikonę OTWARTEJ KŁÓDKI, aby zresetować wszystkie ustawienia obecnej grupy ustawień do wartości systemowych (lub domyślnych)." #. TRN Description for "LOCKED LOCK" @@ -4116,6 +4129,10 @@ msgstr "Max" msgid "Max bridge length" msgstr "Maksymalna długość mostu" +#: src/libslic3r/PrintConfig.cpp:2658 +msgid "Max bridges on a pillar" +msgstr "Maks. liczba mostków na słupku" + #: src/libslic3r/PrintConfig.cpp:2822 msgid "Max merge distance" msgstr "Maksymalny dystans łączenia" @@ -4284,6 +4301,10 @@ msgstr "Maksymalny jerk Y" msgid "Maximum jerk Z" msgstr "Maksymalny jerk Z" +#: src/libslic3r/PrintConfig.cpp:2660 +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 "Maksymalna liczba mostków, która zostanie umieszczona na słupku podpory. Mostki wspierają łączniki podpór i łączą słupki podpór." + #: src/libslic3r/PrintConfig.cpp:598 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 "Maksymalna prędkość objętościowa dla tego filamentu. Ogranicza maksymalną prędkość objętościową do minimum objętościowej prędkości druku i filamentu. Ustaw zero aby usunąć ograniczenie." @@ -4954,6 +4975,11 @@ msgstr "obecnego Modelu" msgid "Offset" msgstr "Offset" +#: src/slic3r/GUI/Tab.cpp:1755 +#, c-format +msgid "On this system, %s uses HTTPS certificates from the system Certificate Store or Keychain." +msgstr "W tym systemie, %s używa certyfikatu HTTPS z magazynu systemowego (Certificate Store) lub Keychain." + #: src/slic3r/GUI/DoubleSlider.cpp:950 msgid "One layer mode" msgstr "Tryb jednej warstwy" @@ -6430,6 +6456,16 @@ msgstr "" "NIE, jeśli chcesz przełączyć zmiany narzędzi na zmiany koloru lub\n" "ANULUJ, aby pozostawić bez zmian." +#: src/slic3r/GUI/DoubleSlider.cpp:1917 +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 "" +"Wybierz TAK, jeśli chcesz usunąć wszystkie zapisane zmiany narzędzi,\n" +"NIE, jeśli chcesz przełączyć zmiany narzędzi na zmiany koloru lub\n" +"ANULUJ, aby pozostawić bez zmian." + #: src/slic3r/GUI/Selection.cpp:146 msgid "Selection-Add" msgstr "Zaznaczenie-Dodaj" @@ -7738,6 +7774,14 @@ msgstr "Wybrany model nie może być podzielony ponieważ składa się z więcej msgid "The selected object couldn't be split because it contains only one part." msgstr "Wybrany model nie może być rozdzielony ponieważ zawiera tylko jedną część." +#: src/slic3r/GUI/MainFrame.cpp:432 +msgid "" +"The selected project is no longer available.\n" +"Do you want to remove it from the recent projects list ?" +msgstr "" +"Wybrany obiekt nie jest już dostępny.\n" +"Czy chcesz usunąć go z listy niedawno używanych projektów?" + #: src/slic3r/GUI/MainFrame.cpp:422 msgid "The selected project is no more available" msgstr "Wybrany projekt nie jest dostępny" @@ -8083,6 +8127,10 @@ msgstr "To jest najniższa możliwa do wydrukowania wysokość warstwy dla tego 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 "Dzieje się to zazwyczaj z powodu zbyt małych odcinków ekstruzji (są one pomijane) lub uszkodzenia modelu. Spróbuj naprawić model lub zmienić jego orientację na stole." +#: src/libslic3r/GCode.cpp:639 +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 "Dzieje się to zazwyczaj z powodu zbyt małych odcinków ekstruzji (są one pomijane) lub uszkodzenia modelu. Spróbuj naprawić model lub zmienić jego orientację na stole." + #: src/libslic3r/PrintConfig.cpp:2215 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 "Ta formuła określa objętość (w milimetrach sześciennych) wymaganą do wyczyszczenia filamentu na wieży czyszczącej dla danej pary narzędzi (filamentów)." @@ -8224,6 +8272,10 @@ msgstr "Do modeli" msgid "To parts" msgstr "Na części" +#: src/slic3r/GUI/Tab.cpp:1756 +msgid "To use a custom CA file, please import your CA file into Certificate Store / Keychain." +msgstr "Aby użyć własnego certyfikatu, zaimportuj plik do Certificate Store / Keychain." + #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:263 #, c-format msgid "Toggle %c axis mirroring" diff --git a/resources/localization/pt_br/PrusaSlicer.mo b/resources/localization/pt_br/PrusaSlicer.mo index 0c01dd31a2..88d9d6ba0c 100644 Binary files a/resources/localization/pt_br/PrusaSlicer.mo and b/resources/localization/pt_br/PrusaSlicer.mo differ diff --git a/resources/localization/pt_br/PrusaSlicer_pt_br.po b/resources/localization/pt_br/PrusaSlicer_pt_br.po index 30c0687a58..ea20d2e88c 100644 --- a/resources/localization/pt_br/PrusaSlicer_pt_br.po +++ b/resources/localization/pt_br/PrusaSlicer_pt_br.po @@ -4196,11 +4196,9 @@ msgstr "Predefinição atual é herdada da predefinição padrão." #: src/slic3r/GUI/Tab.cpp:950 #, c-format msgid "" -"Current preset is inherited from:\n" -"\t%s" +"Current preset is inherited from" msgstr "" -"Predefinição atual é herdada de:\n" -"\t%s" +"Predefinição atual é herdada de" #: src/slic3r/GUI/Tab.cpp:954 msgid "It can't be deleted or modified." @@ -4472,16 +4470,18 @@ msgstr "Abra o arquivo de certificado da CA" #: src/slic3r/GUI/Tab.cpp:1962 #, c-format msgid "" -"HTTPS CA File:\n" -" \tOn this system, %s uses HTTPS certificates from the system Certificate " -"Store or Keychain.\n" -" \tTo use a custom CA file, please import your CA file into Certificate " +"On this system, %s uses HTTPS certificates from the system Certificate " +"Store or Keychain." +msgstr "" +"Neste sistema, %s usa certificados HTTPS do sistema Certificate Store " +"ou keychain." + +#: src/slic3r/GUI/Tab.cpp:1962 +msgid "" +"To use a custom CA file, please import your CA file into Certificate " "Store / Keychain." msgstr "" -"Arquivo HTTPS CA:\n" -" \tNeste sistema, %s usa certificados HTTPS do sistema Certificate Store " -"ou keychain.\n" -" \tPara usar um arquivo de CA personalizado, importe seu arquivo de CA " +"Para usar um arquivo de CA personalizado, importe seu arquivo de CA " "para o repositório de certificados/chaveiro." #: src/slic3r/GUI/Tab.cpp:2002 src/slic3r/GUI/Tab.cpp:2243 @@ -4778,12 +4778,12 @@ msgstr "PONTO BRANCO" #. TRN Description for "WHITE BULLET" #: src/slic3r/GUI/Tab.cpp:3427 msgid "" -"for the left button: \tindicates a non-system (or non-default) preset,\n" -"for the right button: \tindicates that the settings hasn't been modified." +"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 "" -"para o botão esquerdo: \t indica uma predefinição que não é do sistema (ou " +"para o botão esquerdo: indica uma predefinição que não é do sistema (ou " "não-padrão),\n" -"para o botão direito: \t indica que as config. não foram modificadas." +"para o botão direito: indica que as config. não foram modificadas." #: src/slic3r/GUI/Tab.cpp:3430 msgid "BACK ARROW" diff --git a/resources/localization/tr/PrusaSlicer.mo b/resources/localization/tr/PrusaSlicer.mo index ad28072e06..8b8b27069b 100644 Binary files a/resources/localization/tr/PrusaSlicer.mo and b/resources/localization/tr/PrusaSlicer.mo differ diff --git a/resources/localization/tr/PrusaSlicer_tr.po b/resources/localization/tr/PrusaSlicer_tr.po index be59157426..16af1a8367 100644 --- a/resources/localization/tr/PrusaSlicer_tr.po +++ b/resources/localization/tr/PrusaSlicer_tr.po @@ -3679,13 +3679,15 @@ msgstr "CA sertifika dosyasını aç" #: src/slic3r/GUI/Tab.cpp:1810 #, c-format msgid "" -"HTTPS CA File:\n" -" \tOn this system, %s uses HTTPS certificates from the system Certificate Store or Keychain.\n" -" \tTo use a custom CA file, please import your CA file into Certificate Store / Keychain." +"On this system, %s uses HTTPS certificates from the system Certificate Store or Keychain." msgstr "" -"HTTPS CA Dosyası:\n" -" \tBu sistemde, %s , sistem Sertifika Deposu veya Anahtarlıktan HTTPS sertifikaları kullanır.\n" -" \tÖzel bir CA dosyası kullanmak için, lütfen CA dosyanızı Sertifika Deposu/Anahtarlık içine aktarın." +"Bu sistemde, %s , sistem Sertifika Deposu veya Anahtarlıktan HTTPS sertifikaları kullanır." + +#: src/slic3r/GUI/Tab.cpp:1810 +msgid "" +"To use a custom CA file, please import your CA file into Certificate Store / Keychain." +msgstr "" +"Özel bir CA dosyası kullanmak için, lütfen CA dosyanızı Sertifika Deposu/Anahtarlık içine aktarın." #: src/slic3r/GUI/Tab.cpp:1850 src/slic3r/GUI/Tab.cpp:2051 msgid "Size and coordinates" @@ -3948,11 +3950,11 @@ msgstr "BEYAZ NOKTA" #. TRN Description for "WHITE BULLET" #: src/slic3r/GUI/Tab.cpp:3129 msgid "" -"for the left button: \tindicates a non-system preset,\n" -"for the right button: \tindicates that the settings hasn't been modified." +"for the left button: indicates a non-system preset,\n" +"for the right button: indicates that the settings hasn't been modified." msgstr "" -"sol tuş için: \tsistem dışı bir ön ayarı gösterir,\n" -"sağ tuş için: \tayarların değiştirilmediğini gösterir." +"sol tuş için: sistem dışı bir ön ayarı gösterir,\n" +"sağ tuş için: ayarların değiştirilmediğini gösterir." #: src/slic3r/GUI/Tab.cpp:3103 msgid "BACK ARROW" diff --git a/resources/localization/zh_cn/PrusaSlicer.mo b/resources/localization/zh_cn/PrusaSlicer.mo index 2d8b31823e..74bbb3d69d 100644 Binary files a/resources/localization/zh_cn/PrusaSlicer.mo and b/resources/localization/zh_cn/PrusaSlicer.mo differ diff --git a/resources/localization/zh_cn/PrusaSlicer_zh_CN.po b/resources/localization/zh_cn/PrusaSlicer_zh_CN.po index 3a13519bb5..a46b217415 100644 --- a/resources/localization/zh_cn/PrusaSlicer_zh_CN.po +++ b/resources/localization/zh_cn/PrusaSlicer_zh_CN.po @@ -4106,11 +4106,9 @@ msgstr "当前预设从默认预设继承。" #: src/slic3r/GUI/Tab.cpp:947 #, c-format msgid "" -"Current preset is inherited from:\n" -"\t%s" +"Current preset is inherited from" msgstr "" -"当前预设继承自:\n" -"\t%s" +"当前预设继承自" #: src/slic3r/GUI/Tab.cpp:951 msgid "It can't be deleted or modified." @@ -4375,15 +4373,17 @@ msgstr "打开 CA 证书文件" #: src/slic3r/GUI/Tab.cpp:1959 #, c-format msgid "" -"HTTPS CA File:\n" -" \tOn this system, %s uses HTTPS certificates from the system Certificate " -"Store or Keychain.\n" -" \tTo use a custom CA file, please import your CA file into Certificate " +"On this system, %s uses HTTPS certificates from the system Certificate " +"Store or Keychain." +msgstr "" +"在此系统上,%s 使用来自系统证书存储或钥匙串的 HTTPS 证书。" + +#: src/slic3r/GUI/Tab.cpp:1959 +msgid "" +"To use a custom CA file, please import your CA file into Certificate " "Store / Keychain." msgstr "" -"HTTPS CA 文件:\n" -" \t在此系统上,%s 使用来自系统证书存储或钥匙串的 HTTPS 证书。\n" -" \t要使用自定义 CA 文件,请将 CA 文件导入证书存储/钥匙串。" +"要使用自定义 CA 文件,请将 CA 文件导入证书存储/钥匙串。" #: src/slic3r/GUI/Tab.cpp:1999 src/slic3r/GUI/Tab.cpp:2240 msgid "Size and coordinates" @@ -4671,8 +4671,8 @@ msgstr "白色子弹" #. TRN Description for "WHITE BULLET" #: src/slic3r/GUI/Tab.cpp:3424 msgid "" -"for the left button: \tindicates a non-system (or non-default) preset,\n" -"for the right button: \tindicates that the settings hasn't been modified." +"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 "" "对于左侧按钮:指示非系统(或非默认)预设,\n" "对于右侧按钮:指示设置尚未修改。" diff --git a/resources/localization/zh_tw/PrusaSlicer.mo b/resources/localization/zh_tw/PrusaSlicer.mo index 12b1a17eb0..61b0de0191 100644 Binary files a/resources/localization/zh_tw/PrusaSlicer.mo and b/resources/localization/zh_tw/PrusaSlicer.mo differ diff --git a/resources/localization/zh_tw/PrusaSlicer_zh_TW.po b/resources/localization/zh_tw/PrusaSlicer_zh_TW.po index ce35bc342a..9e37785dc6 100644 --- a/resources/localization/zh_tw/PrusaSlicer_zh_TW.po +++ b/resources/localization/zh_tw/PrusaSlicer_zh_TW.po @@ -3049,8 +3049,8 @@ msgid "It's a system preset." msgstr "這是一個系統預設。" #: src/slic3r/GUI/Tab.cpp:860 -msgid "Current preset is inherited from " -msgstr "當前預設繼承自 " +msgid "Current preset is inherited from" +msgstr "當前預設繼承自" #: src/slic3r/GUI/Tab.cpp:865 msgid "It can't be deleted or modified. " @@ -3391,16 +3391,19 @@ msgid "Open CA certificate file" msgstr "打開 CA 證書文件" #: src/slic3r/GUI/Tab.cpp:1725 +#, c-format msgid "" -"HTTPS CA File:\n" -"\tOn this system, Slic3r uses HTTPS certificates from the system Certificate " -"Store or Keychain.\n" -"\tTo use a custom CA file, please import your CA file into Certificate " +"On this system, %s uses HTTPS certificates from the system Certificate " +"Store or Keychain." +msgstr "" +"在此係統上, %s 使用來自系統證書存儲或鑰匙串的 https 證書。" + +#: src/slic3r/GUI/Tab.cpp:1725 +msgid "" +"To use a custom CA file, please import your CA file into Certificate " "Store / Keychain." msgstr "" -"HTTPS CA 文件:\n" -"\t在此係統上, Slic3r 使用來自系統證書存儲或鑰匙串的 https 證書。\n" -"\t要使用自定義 CA 文件, 請將 CA 文件導入到證書存儲/鑰匙串。" +"要使用自定義 CA 文件, 請將 CA 文件導入到證書存儲/鑰匙串。" #: src/slic3r/GUI/Tab.cpp:1763 src/slic3r/GUI/Tab.cpp:1964 msgid "Size and coordinates" @@ -3664,11 +3667,11 @@ msgstr "" #: src/slic3r/GUI/Tab.cpp:2998 msgid "" -"WHITE BULLET;for the left button: \tindicates a non-system preset,\n" -"for the right button: \tindicates that the settings hasn't been modified." +"WHITE BULLET;for the left button: indicates a non-system preset,\n" +"for the right button: indicates that the settings hasn't been modified." msgstr "" -"白色彈頭; 對於左側按鈕: \t表示非系統預設,\n" -"對於右側按鈕: \t表示設置尚未被修改。" +"白色彈頭; 對於左側按鈕: 表示非系統預設,\n" +"對於右側按鈕: 表示設置尚未被修改。" #: src/slic3r/GUI/Tab.cpp:3002 msgid "" diff --git a/resources/profiles/Lulzbot.ini b/resources/profiles/Lulzbot.ini new file mode 100644 index 0000000000..721a9250ab --- /dev/null +++ b/resources/profiles/Lulzbot.ini @@ -0,0 +1,384 @@ +# generated by PrusaSlicer 2.1.1+win64 on 2020-02-25 at 01:51:21 UTC + +[vendor] +# Vendor name will be shown by the Config Wizard. +name = Lulzbot +config_version = 0.0.1 +config_update_url = http://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/Lulzbot/ + +[printer_model:MINI_AERO] +name = Mini Aero +variants = 0.5 +technology = FFF +#bed_model = mini_bed.stl +#bed_texture = mini.svg +default_materials = ColorFabb PLA-PHA @lulzbot;PrintedSolid Jesse PLA @lulzbot + +[printer_model:TAZ6_AERO] +name = Taz6 Aero +variants = 0.5 +technology = FFF +default_materials = ColorFabb PLA-PHA @lulzbot;PrintedSolid Jesse PLA @lulzbot + +[print:0.3mm @lulzbot] +avoid_crossing_perimeters = 0 +bottom_fill_pattern = rectilinear +bottom_solid_layers = 3 +bridge_acceleration = 500 +bridge_angle = 0 +bridge_flow_ratio = 1 +bridge_speed = 30 +brim_width = 0 +clip_multipart_objects = 0 +compatible_printers = +compatible_printers_condition = +complete_objects = 0 +default_acceleration = 500 +dont_support_bridges = 1 +elefant_foot_compensation = 0 +ensure_vertical_shell_thickness = 0 +external_perimeter_extrusion_width = 0.56 +external_perimeter_speed = 50% +external_perimeters_first = 0 +extra_perimeters = 1 +extruder_clearance_height = 20 +extruder_clearance_radius = 20 +extrusion_width = 0.56 +fill_angle = 45 +fill_density = 20% +fill_pattern = gyroid +first_layer_acceleration = 500 +first_layer_extrusion_width = 0.6 +first_layer_height = 100% +first_layer_speed = 40% +gap_fill_speed = 20 +gcode_comments = 0 +gcode_label_objects = 0 +infill_acceleration = 500 +infill_every_layers = 1 +infill_extruder = 1 +infill_extrusion_width = 0.56 +infill_first = 0 +infill_only_where_needed = 0 +infill_overlap = 25% +infill_speed = 60 +inherits = +interface_shells = 0 +layer_height = 0.3 +max_print_speed = 80 +max_volumetric_speed = 0 +min_skirt_length = 0 +notes = +only_retract_when_crossing_perimeters = 1 +ooze_prevention = 0 +output_filename_format = [printer_settings_id]_[input_filename_base]_[layer_height]_[filament_type]_[print_time].gcode +overhangs = 1 +perimeter_acceleration = 500 +perimeter_extruder = 1 +perimeter_extrusion_width = 0.56 +perimeter_speed = 60 +perimeters = 3 +post_process = +raft_layers = 0 +resolution = 0 +seam_position = nearest +single_extruder_multi_material_priming = 1 +skirt_distance = 3 +skirt_height = 1 +skirts = 3 +slice_closing_radius = 0.049 +small_perimeter_speed = 15 +solid_infill_below_area = 70 +solid_infill_every_layers = 0 +solid_infill_extruder = 1 +solid_infill_extrusion_width = 0.56 +solid_infill_speed = 60 +spiral_vase = 0 +standby_temperature_delta = -5 +support_material = 0 +support_material_angle = 0 +support_material_auto = 1 +support_material_buildplate_only = 0 +support_material_contact_distance = 0.2 +support_material_enforce_layers = 0 +support_material_extruder = 1 +support_material_extrusion_width = 0.44 +support_material_interface_contact_loops = 0 +support_material_interface_extruder = 1 +support_material_interface_layers = 3 +support_material_interface_spacing = 0 +support_material_interface_speed = 100% +support_material_pattern = rectilinear +support_material_spacing = 2.5 +support_material_speed = 60 +support_material_synchronize_layers = 0 +support_material_threshold = 0 +support_material_with_sheath = 1 +support_material_xy_spacing = 50% +thin_walls = 1 +threads = 12 +top_fill_pattern = rectilinear +top_infill_extrusion_width = 0.52 +top_solid_infill_speed = 40 +top_solid_layers = 3 +travel_speed = 175 +wipe_tower = 0 +wipe_tower_bridging = 10 +wipe_tower_rotation_angle = 0 +wipe_tower_width = 60 +wipe_tower_x = 180 +wipe_tower_y = 140 +xy_size_compensation = 0 + +[filament:ColorFabb PLA-PHA @lulzbot] +filament_vendor = ColorFabb +bed_temperature = 60 +bridge_fan_speed = 100 +compatible_printers = +compatible_printers_condition = +compatible_prints = +compatible_prints_condition = +cooling = 1 +disable_fan_first_layers = 3 +end_filament_gcode = "; Filament-specific end gcode \n;END gcode for filament\n" +extrusion_multiplier = 1 +fan_always_on = 0 +fan_below_layer_time = 60 +filament_colour = #29B2B2 +filament_cooling_final_speed = 3.4 +filament_cooling_initial_speed = 2.2 +filament_cooling_moves = 4 +filament_cost = 0 +filament_density = 1.25 +filament_deretract_speed = nil +filament_diameter = 2.85 +filament_load_time = 0 +filament_loading_speed = 28 +filament_loading_speed_start = 3 +filament_max_volumetric_speed = 0 +filament_minimal_purge_on_wipe_tower = 15 +filament_notes = "" +filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" +filament_retract_before_travel = nil +filament_retract_before_wipe = nil +filament_retract_layer_change = nil +filament_retract_length = nil +filament_retract_lift = nil +filament_retract_lift_above = nil +filament_retract_lift_below = nil +filament_retract_restart_extra = nil +filament_retract_speed = nil +filament_soluble = 0 +filament_toolchange_delay = 0 +filament_type = PLA +filament_unload_time = 0 +filament_unloading_speed = 90 +filament_unloading_speed_start = 100 +filament_wipe = nil +first_layer_bed_temperature = 60 +first_layer_temperature = 200 +inherits = +max_fan_speed = 100 +min_fan_speed = 35 +min_print_speed = 10 +slowdown_below_layer_time = 5 +start_filament_gcode = "; Filament gcode\n" +temperature = 200 + +[filament:PrintedSolid Jesse PLA @lulzbot] +filament_vendor = PrintedSolid +bed_temperature = 60 +bridge_fan_speed = 100 +compatible_printers = +compatible_printers_condition = +compatible_prints = +compatible_prints_condition = +cooling = 1 +disable_fan_first_layers = 3 +end_filament_gcode = "; Filament-specific end gcode \n;END gcode for filament\n" +extrusion_multiplier = 1 +fan_always_on = 0 +fan_below_layer_time = 60 +filament_colour = #29B2B2 +filament_cooling_final_speed = 3.4 +filament_cooling_initial_speed = 2.2 +filament_cooling_moves = 4 +filament_cost = 27 +filament_density = 1.25 +filament_deretract_speed = nil +filament_diameter = 2.85 +filament_load_time = 0 +filament_loading_speed = 28 +filament_loading_speed_start = 3 +filament_max_volumetric_speed = 0 +filament_minimal_purge_on_wipe_tower = 15 +filament_notes = "" +filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" +filament_retract_before_travel = nil +filament_retract_before_wipe = nil +filament_retract_layer_change = nil +filament_retract_length = nil +filament_retract_lift = nil +filament_retract_lift_above = nil +filament_retract_lift_below = nil +filament_retract_restart_extra = nil +filament_retract_speed = nil +filament_soluble = 0 +filament_toolchange_delay = 0 +filament_type = PLA +filament_unload_time = 0 +filament_unloading_speed = 90 +filament_unloading_speed_start = 100 +filament_wipe = nil +first_layer_bed_temperature = 60 +first_layer_temperature = 220 +inherits = +max_fan_speed = 100 +min_fan_speed = 35 +min_print_speed = 10 +slowdown_below_layer_time = 5 +start_filament_gcode = "; Filament gcode\n" +temperature = 220 + +[printer:Mini Aero 0.5mm] +printer_model = MINI_AERO +printer_variant = 0.5 +default_print_profile = 0.3mm @lulzbot +default_filament_profile = PrintedSolid Jesse PLA @lulzbot +bed_shape = 0x0,154x0,154x154,0x154 +before_layer_gcode = +between_objects_gcode = +cooling_tube_length = 5 +cooling_tube_retraction = 91.5 +deretract_speed = 20 +end_gcode = M400 ; wait for moves to finish\nM140 S40 ; start bed cooling\nM104 S0 ; disable hotend\nM107 ; disable fans\nG92 E1 ; set extruder to 1mm for retract on print end (LulzBot Cura had 5mm, might be a contributing factor to between print Aerostruder jamming)\nM117 Cooling please wait ; progress indicator message on LCD\nG1 X5 Y5 Z158 E0 F10000 ; move to cooling position\nG1 E1 ; re-prime extruder\nM190 R40 ; wait for bed to cool down to removal temp\nM77 ; Stop GLCD Timer\nG1 X145 F1000 ; move extruder out of the way\nG1 Y175 F1000 ; present finished print\nM140 S0; cool downs\nM84 ; disable steppers\nG90 ; absolute positioning\nM117 Print Complete. ; print complete message\n +extra_loading_move = -2 +extruder_colour = "" +extruder_offset = 0x0 +gcode_flavor = marlin +high_current_on_filament_swap = 0 +host_type = octoprint +inherits = +layer_gcode = +machine_max_acceleration_e = 10000,5000 +machine_max_acceleration_extruding = 1500,1250 +machine_max_acceleration_retracting = 1500,1250 +machine_max_acceleration_x = 9000,1000 +machine_max_acceleration_y = 9000,1000 +machine_max_acceleration_z = 100,200 +machine_max_feedrate_e = 40,120 +machine_max_feedrate_x = 800,200 +machine_max_feedrate_y = 800,200 +machine_max_feedrate_z = 8,12 +machine_max_jerk_e = 2.5,2.5 +machine_max_jerk_x = 20,10 +machine_max_jerk_y = 20,10 +machine_max_jerk_z = 0.2,0.4 +machine_min_extruding_rate = 0,0 +machine_min_travel_rate = 0,0 +max_layer_height = 0 +max_print_height = 158 +min_layer_height = 0.07 +nozzle_diameter = 0.5 +parking_pos_retraction = 92 +print_host = +printer_notes = LulzBot Mini w/ Aerostruder profile for Delaware Library System, Rt9 Library and Innovation Center. +printhost_apikey = +printhost_cafile = +remaining_times = 0 +retract_before_travel = 2 +retract_before_wipe = 0% +retract_layer_change = 1 +retract_length = 1 +retract_length_toolchange = 10 +retract_lift = 0 +retract_lift_above = 0 +retract_lift_below = 0 +retract_restart_extra = 0 +retract_restart_extra_toolchange = 0 +retract_speed = 40 +serial_port = +serial_speed = 250000 +silent_mode = 0 +single_extruder_multi_material = 0 +start_gcode = ;This G-Code has been generated specifically for the LulzBot Mini with Aerosturder\nM73 P0 ; clear GLCD progress bar\nM75 ; start GLCD timer\nG26 ; clear potential 'probe fail' condition\nM107 ; disable fans\nM420 S0 ; disable leveling matrix\nG90 ; absolute positioning\nM82 ; set extruder to absolute mode\nG92 E0 ; set extruder position to 0\nM140 S{first_layer_bed_temperature[0]} ; start bed heating up\nG28; home all axes\nG0 X0 Y187 Z156 F200 ; move away from endstops\nM109 R{first_layer_temperature[0] - 60} ; soften filament before retraction\n;G1 E-15 F75 ; retract filament (LulzBot Cura is apparently trying to cold pull, might be a contributing factor to hob gear filling with filament)\nM109 R{first_layer_temperature[0] - 60} ; wait for extruder to reach wiping temp\nG1 X45 Y173 F11520 ; move above wiper pad\nG1 Z0 F1200 ; push nozzle into wiper\nG1 X42 Y173 Z-.5 F4000 ; wiping\nG1 X52 Y171 Z-.5 F4000 ; wiping\nG1 X42 Y173 Z0 F4000 ; wiping\nG1 X52 Y171 F4000 ; wiping\nG1 X42 Y173 F4000 ; wiping\nG1 X52 Y171 F4000 ; wiping\nG1 X42 Y173 F4000 ; wiping\nG1 X52 Y171 F4000 ; wiping\nG1 X57 Y173 F4000 ; wiping\nG1 X77 Y171 F4000 ; wiping\nG1 X57 Y173 F4000 ; wiping\nG1 X77 Y171 F4000 ; wiping\nG1 X57 Y173 F4000 ; wiping\nG1 X87 Y171 F4000 ; wiping\nG1 X77 Y173 F4000 ; wiping\nG1 X97 Y171 F4000 ; wiping\nG1 X77 Y173 F4000 ; wiping\nG1 X97 Y171 F4000 ; wiping\nG1 X77 Y173 F4000 ; wiping\nG1 X97 Y171 F4000 ; wiping\nG1 X107 Y173 F4000 ; wiping\nG1 X97 Y171 F4000 ; wiping\nG1 X107 Y173 F4000 ; wiping\nG1 X97 Y171 F4000 ; wiping\nG1 X107 Y173 F4000 ; wiping\nG1 X112 Y171 Z-0.5 F1000 ; wiping\nG1 Z10 ; raise extruder\nG28 X0 Y0 ; home X and Y\nG0 X0 Y187 F200 ; move away from endstops\nM109 R{first_layer_temperature[0] - 60} ; wait for extruder to reach probe temp\nM204 S300 ; set probing acceleration\nG29 ; start auto-leveling sequence\nM420 S1 ; enable leveling matrix\nM425 Z ; use measured Z backlash for compensation\nM425 Z F0 ; turn off measured Z backlash compensation. (if activated in the quality settings, this command will automatically be ignored)\nM204 S2000 ; restore standard acceleration\nG28 X0 Y0 ; re-home to account for build variance of earlier mini builds\nG0 X0 Y187 F200 ; move away from endstops\nG0 Y152 F4000 ; move in front of wiper pad\nG4 S1 ; pause\nM400 ; wait for moves to finish\nM117 Heating... ; progress indicator message on LCD\nM109 R{first_layer_temperature[0]} ; wait for extruder to reach printing temp\nM190 R{first_layer_bed_temperature[0]} ; wait for bed to reach printing temp\nG1 Z2 E0 F75 ; prime tiny bit of filament into the nozzle\nM117 Mini Printing... ; progress indicator message on LCD\nM221 S74 ; Printer specific extrusion modifier. +thumbnails = +toolchange_gcode = +use_firmware_retraction = 0 +use_relative_e_distances = 0 +use_volumetric_e = 0 +variable_layer_height = 1 +wipe = 1 +z_offset = 0 + +[printer:Taz6 Aero 0.5mm] +printer_model = TAZ6_AERO +printer_variant = 0.5 +default_print_profile = 0.3mm @lulzbot +default_filament_profile = PrintedSolid Jesse PLA @lulzbot +bed_shape = 0x0,280x0,280x280,0x280 +before_layer_gcode = +between_objects_gcode = +cooling_tube_length = 5 +cooling_tube_retraction = 91.5 +deretract_speed = 20 +end_gcode = M400 ; wait for moves to finish\nM140 S40 ; start bed cooling\nM104 S0 ; disable hotend\nM107 ; disable fans\nG91 ; relative positioning\nG1 E-1 F300 ; filament retraction to release pressure\nG1 Z20 E-5 X-20 Y-20 F3000 ; lift up and retract even more filament\nG1 E6 ; re-prime extruder\nM117 Cooling please wait ; progress indicator message on LCD\nG90 ; absolute positioning\nG1 Y0 F3000 ; move to cooling position\nM190 R40 ; wait for bed to cool down to removal temp\nG1 Y280 F3000 ; present finished print\nM140 S0; cool downs\nM77 ; stop GLCD timer\nM84 ; disable steppers\nG90 ; absolute positioning\nM117 Print Complete. ; print complete message\n +extra_loading_move = -2 +extruder_colour = "" +extruder_offset = 0x0 +gcode_flavor = marlin +high_current_on_filament_swap = 0 +host_type = octoprint +inherits = +layer_gcode = +machine_max_acceleration_e = 1000,5000 +machine_max_acceleration_extruding = 1000,1250 +machine_max_acceleration_retracting = 1000,1250 +machine_max_acceleration_x = 9000,1000 +machine_max_acceleration_y = 9000,1000 +machine_max_acceleration_z = 100,200 +machine_max_feedrate_e = 40,120 +machine_max_feedrate_x = 800,200 +machine_max_feedrate_y = 800,200 +machine_max_feedrate_z = 3,12 +machine_max_jerk_e = 2.5,2.5 +machine_max_jerk_x = 12,10 +machine_max_jerk_y = 12,10 +machine_max_jerk_z = 0.2,0.4 +machine_min_extruding_rate = 0,0 +machine_min_travel_rate = 0,0 +max_layer_height = 0 +max_print_height = 250 +min_layer_height = 0.07 +nozzle_diameter = 0.5 +parking_pos_retraction = 92 +print_host = +printer_notes = LulzBot Taz 6 w/ Aerostruder profile for Delaware Library System, Rt9 Library and Innovation Center. +printer_technology = FFF +printhost_apikey = +printhost_cafile = +remaining_times = 0 +retract_before_travel = 2 +retract_before_wipe = 0% +retract_layer_change = 0 +retract_length = 2 +retract_length_toolchange = 10 +retract_lift = 0 +retract_lift_above = 0 +retract_lift_below = 0 +retract_restart_extra = 0 +retract_restart_extra_toolchange = 0 +retract_speed = 40 +serial_port = +serial_speed = 250000 +silent_mode = 0 +single_extruder_multi_material = 0 +start_gcode = ;This G-Code has been generated specifically for the LulzBot TAZ 6 with Aerosturder\nM73 P0 ; clear GLCD progress bar\nM75 ; start GLCD timer\nG26 ; clear potential 'probe fail' condition\nM107 ; disable fans\nM420 S0 ; disable leveling matrix\nG90 ; absolute positioning\nM82 ; set extruder to absolute mode\nG92 E0 ; set extruder position to 0\nM140 S{first_layer_bed_temperature[0]} ; start bed heating up\nG28 XY ; home X and Y\nG1 X-19 Y258 F1000 ; move to safe homing position\nM109 R{first_layer_temperature[0] - 60} ; soften filament before homing Z\nG28 Z ; home Z\nG1 E-15 F100 ; retract filament\nM109 R{first_layer_temperature[0] - 60} ; wait for extruder to reach wiping temp\nG1 X-15 Y100 F3000 ; move above wiper pad\nG1 Z1 ; push nozzle into wiper\nG1 X-17 Y95 F1000 ; slow wipe\nG1 X-17 Y90 F1000 ; slow wipe\nG1 X-17 Y85 F1000 ; slow wipe\nG1 X-15 Y90 F1000 ; slow wipe\nG1 X-17 Y80 F1000 ; slow wipe\nG1 X-15 Y95 F1000 ; slow wipe\nG1 X-17 Y75 F2000 ; fast wipe\nG1 X-15 Y65 F2000 ; fast wipe\nG1 X-17 Y70 F2000 ; fast wipe\nG1 X-15 Y60 F2000 ; fast wipe\nG1 X-17 Y55 F2000 ; fast wipe\nG1 X-15 Y50 F2000 ; fast wipe\nG1 X-17 Y40 F2000 ; fast wipe\nG1 X-15 Y45 F2000 ; fast wipe\nG1 X-17 Y35 F2000 ; fast wipe\nG1 X-15 Y40 F2000 ; fast wipe\nG1 X-17 Y70 F2000 ; fast wipe\nG1 X-15 Y30 Z2 F2000 ; fast wipe\nG1 X-17 Y35 F2000 ; fast wipe\nG1 X-15 Y25 F2000 ; fast wipe\nG1 X-17 Y30 F2000 ; fast wipe\nG1 X-15 Y25 Z1.5 F1000 ; slow wipe\nG1 X-17 Y23 F1000 ; slow wipe\nG1 Z10 ; raise extruder\nM109 R{first_layer_temperature[0] - 60} ; wait for extruder to reach probe temp\nG1 X-9 Y-9 ; move above first probe point\nM204 S100 ; set probing acceleration\nG29 ; start auto-leveling sequence\nM420 S1 ; enable leveling matrix\nM425 Z ; use measured Z backlash for compensation\nM425 Z F0 ; turn off measured Z backlash compensation. (if activated in the quality settings, this command will automatically be ignored)\nM204 S500 ; restore standard acceleration\nG1 X0 Y0 Z15 F5000 ; move up off last probe point\nG4 S1 ; pause\nM400 ; wait for moves to finish\nM117 Heating... ; progress indicator message on LCD\nM109 R{first_layer_temperature[0]} ; wait for extruder to reach printing temp\nM190 R{first_layer_bed_temperature[0]} ; wait for bed to reach printing temp\nG1 Z2 E0 F75 ; prime tiny bit of filament into the nozzle\nM117 TAZ 6 Printing... ; progress indicator message on LCD\n +thumbnails = +toolchange_gcode = +use_firmware_retraction = 0 +use_relative_e_distances = 0 +use_volumetric_e = 0 +variable_layer_height = 1 +wipe = 1 +z_offset = 0 diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 11996af1a4..b0eab9bcc1 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -104,33 +104,7 @@ endif () # Add the Slic3r GUI library, libcurl, OpenGL and GLU libraries. if (SLIC3R_GUI) # target_link_libraries(PrusaSlicer ws2_32 uxtheme setupapi libslic3r_gui ${wxWidgets_LIBRARIES}) -target_link_libraries(PrusaSlicer libslic3r_gui ${wxWidgets_LIBRARIES}) - - # Configure libcurl and its dependencies OpenSSL & zlib - find_package(CURL REQUIRED) - if (NOT WIN32) - # Required by libcurl - find_package(ZLIB REQUIRED) - endif() - target_include_directories(PrusaSlicer PRIVATE ${CURL_INCLUDE_DIRS}) - target_link_libraries(PrusaSlicer ${CURL_LIBRARIES} ${ZLIB_LIBRARIES}) - if (SLIC3R_STATIC) - if (NOT APPLE) - # libcurl is always linked dynamically to the system libcurl on OSX. - # On other systems, libcurl is linked statically if SLIC3R_STATIC is set. - target_compile_definitions(PrusaSlicer PRIVATE CURL_STATICLIB) - endif() - if (CMAKE_SYSTEM_NAME STREQUAL "Linux") - # As of now, our build system produces a statically linked libcurl, - # which links the OpenSSL library dynamically. - find_package(OpenSSL REQUIRED) - message("OpenSSL include dir: ${OPENSSL_INCLUDE_DIR}") - message("OpenSSL libraries: ${OPENSSL_LIBRARIES}") - target_include_directories(PrusaSlicer PRIVATE ${OPENSSL_INCLUDE_DIR}) - target_link_libraries(PrusaSlicer ${OPENSSL_LIBRARIES}) - endif() - endif() - +target_link_libraries(PrusaSlicer libslic3r_gui) if (MSVC) # Generate debug symbols even in release mode. target_link_options(PrusaSlicer PUBLIC "$<$:/DEBUG>") diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index 55e0c26e4e..cfc60ffe35 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -632,8 +632,11 @@ std::vector GCode::collect_layers_to_print(const PrintObjec // Negative support_contact_z is not taken into account, it can result in false positives in cases // where previous layer has object extrusions too (https://github.com/prusa3d/PrusaSlicer/issues/2752) + // Only check this layer in case it has some extrusions. + bool has_extrusions = (layer_to_print.object_layer && layer_to_print.object_layer->has_extrusions()) + || (layer_to_print.support_layer && layer_to_print.support_layer->has_extrusions()); - if (layer_to_print.print_z() > maximal_print_z + 2. * EPSILON) + if (has_extrusions && layer_to_print.print_z() > maximal_print_z + 2. * EPSILON) throw std::runtime_error(_(L("Empty layers detected, the output would not be printable.")) + "\n\n" + _(L("Object name")) + ": " + object.model_object()->name + "\n" + _(L("Print z")) + ": " + std::to_string(layers_to_print.back().print_z()) + "\n\n" + _(L("This is " diff --git a/src/libslic3r/GCode/ToolOrdering.cpp b/src/libslic3r/GCode/ToolOrdering.cpp index db7c58a9ce..9bdda3a4c2 100644 --- a/src/libslic3r/GCode/ToolOrdering.cpp +++ b/src/libslic3r/GCode/ToolOrdering.cpp @@ -212,10 +212,8 @@ void ToolOrdering::collect_extruders(const PrintObject &object, const std::vecto if (m_print_config_ptr) { // in this case complete_objects is false (see ToolOrdering constructors) something_nonoverriddable = false; for (const auto& eec : layerm->perimeters.entities) // let's check if there are nonoverriddable entities - if (!layer_tools.wiping_extrusions().is_overriddable_and_mark(dynamic_cast(*eec), *m_print_config_ptr, object, region)) { + if (!layer_tools.wiping_extrusions().is_overriddable_and_mark(dynamic_cast(*eec), *m_print_config_ptr, object, region)) something_nonoverriddable = true; - break; - } } if (something_nonoverriddable) @@ -237,7 +235,7 @@ void ToolOrdering::collect_extruders(const PrintObject &object, const std::vecto has_infill = true; if (m_print_config_ptr) { - if (!something_nonoverriddable && !layer_tools.wiping_extrusions().is_overriddable_and_mark(*fill, *m_print_config_ptr, object, region)) + if (! layer_tools.wiping_extrusions().is_overriddable_and_mark(*fill, *m_print_config_ptr, object, region)) something_nonoverriddable = true; } } diff --git a/src/platform/msw/PrusaSlicer.rc.in b/src/platform/msw/PrusaSlicer.rc.in index 2d4186a5d3..fb75305c8a 100644 --- a/src/platform/msw/PrusaSlicer.rc.in +++ b/src/platform/msw/PrusaSlicer.rc.in @@ -12,7 +12,7 @@ PRODUCTVERSION @SLIC3R_RC_VERSION@ VALUE "ProductName", "@SLIC3R_APP_NAME@" VALUE "ProductVersion", "@SLIC3R_BUILD_ID@" VALUE "InternalName", "@SLIC3R_APP_NAME@" - VALUE "LegalCopyright", "Copyright \251 2016-2019 Prusa Research, \251 2011-2018 Alessandro Ranelucci" + VALUE "LegalCopyright", "Copyright \251 2016-2020 Prusa Research, \251 2011-2018 Alessandro Ranelucci" VALUE "OriginalFilename", "prusa-slicer.exe" } } diff --git a/src/platform/osx/Info.plist.in b/src/platform/osx/Info.plist.in index f4e298180b..fc4b6a8756 100644 --- a/src/platform/osx/Info.plist.in +++ b/src/platform/osx/Info.plist.in @@ -5,7 +5,7 @@ CFBundleExecutable @SLIC3R_APP_KEY@ CFBundleGetInfoString - @SLIC3R_APP_NAME@ Copyright (C) 2011-2019 Alessandro Ranellucci, (C) 2016-2019 Prusa Reseach + @SLIC3R_APP_NAME@ Copyright (C) 2011-2019 Alessandro Ranellucci, (C) 2016-2020 Prusa Reseach CFBundleIconFile PrusaSlicer.icns CFBundleName diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt index c8589903e1..5e0c34da0e 100644 --- a/src/slic3r/CMakeLists.txt +++ b/src/slic3r/CMakeLists.txt @@ -191,7 +191,7 @@ add_library(libslic3r_gui STATIC ${SLIC3R_GUI_SOURCES}) encoding_check(libslic3r_gui) -target_link_libraries(libslic3r_gui libslic3r avrdude cereal imgui GLEW::GLEW OpenGL::GL OpenGL::GLU hidapi) +target_link_libraries(libslic3r_gui libslic3r avrdude cereal imgui GLEW::GLEW OpenGL::GL OpenGL::GLU hidapi libcurl ${wxWidgets_LIBRARIES}) if(APPLE) target_link_libraries(libslic3r_gui ${DISKARBITRATION_LIBRARY}) diff --git a/src/slic3r/GUI/AboutDialog.cpp b/src/slic3r/GUI/AboutDialog.cpp index bd95630a0b..98b04a63db 100644 --- a/src/slic3r/GUI/AboutDialog.cpp +++ b/src/slic3r/GUI/AboutDialog.cpp @@ -266,7 +266,7 @@ AboutDialog::AboutDialog() "" "" "" - "%4% © 2016-2019 Prusa Research.
" + "%4% © 2016-2020 Prusa Research.
" "%5% © 2011-2018 Alessandro Ranellucci.
" "Slic3r %6% " "%7%." diff --git a/src/slic3r/GUI/BackgroundSlicingProcess.cpp b/src/slic3r/GUI/BackgroundSlicingProcess.cpp index 536d6d6344..44b5a8bb87 100644 --- a/src/slic3r/GUI/BackgroundSlicingProcess.cpp +++ b/src/slic3r/GUI/BackgroundSlicingProcess.cpp @@ -101,10 +101,9 @@ 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); - GUI::RemovableDriveManager::get_instance().update(); - bool with_check = GUI::RemovableDriveManager::get_instance().is_path_on_removable_drive(export_path); + bool with_check = GUI::wxGetApp().removable_drive_manager()->is_path_on_removable_drive(export_path); int copy_ret_val = copy_file(m_temp_output_path, export_path, with_check); - switch (copy_ret_val){ + switch (copy_ret_val) { case SUCCESS: break; // no error case FAIL_COPY_FILE: throw std::runtime_error(_utf8(L("Copying of the temporary G-code to the output G-code failed. Maybe the SD card is write locked?"))); @@ -236,7 +235,7 @@ void BackgroundSlicingProcess::thread_proc() // Only post the canceled event, if canceled by user. // Don't post the canceled event, if canceled from Print::apply(). wxCommandEvent evt(m_event_finished_id); - evt.SetString(error); + evt.SetString(GUI::from_u8(error)); evt.SetInt(m_print->canceled() ? -1 : (error.empty() ? 1 : 0)); wxQueueEvent(GUI::wxGetApp().mainframe->m_plater, evt.Clone()); } diff --git a/src/slic3r/GUI/Camera.cpp b/src/slic3r/GUI/Camera.cpp index 0a0b02c6f0..74c21d3e80 100644 --- a/src/slic3r/GUI/Camera.cpp +++ b/src/slic3r/GUI/Camera.cpp @@ -260,7 +260,7 @@ void Camera::debug_render() const imgui.begin(std::string("Camera statistics"), ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse); std::string type = get_type_as_string(); - if (wxGetApp().plater()->get_mouse3d_controller().is_running() || (wxGetApp().app_config->get("use_free_camera") == "1")) + if (wxGetApp().plater()->get_mouse3d_controller().connected() || (wxGetApp().app_config->get("use_free_camera") == "1")) type += "/free"; else type += "/constrained"; @@ -537,6 +537,7 @@ void Camera::look_at(const Vec3d& position, const Vec3d& target, const Vec3d& up Vec3d unit_y = unit_z.cross(unit_x).normalized(); m_target = target; + m_distance = (position - target).norm(); Vec3d new_position = m_target + m_distance * unit_z; m_view_matrix(0, 0) = unit_x(0); diff --git a/src/slic3r/GUI/Camera.hpp b/src/slic3r/GUI/Camera.hpp index f592dbcd22..4b91445199 100644 --- a/src/slic3r/GUI/Camera.hpp +++ b/src/slic3r/GUI/Camera.hpp @@ -122,6 +122,8 @@ public: // returns true if the camera z axis (forward) is pointing in the negative direction of the world z axis bool is_looking_downward() const { return get_dir_forward().dot(Vec3d::UnitZ()) < 0.0; } + void look_at(const Vec3d& position, const Vec3d& target, const Vec3d& up); + double max_zoom() const { return 100.0; } double min_zoom() const; @@ -137,7 +139,6 @@ private: #endif // ENABLE_THUMBNAIL_GENERATOR void set_distance(double distance) const; - void look_at(const Vec3d& position, const Vec3d& target, const Vec3d& up); void set_default_orientation(); Vec3d validate_target(const Vec3d& target) const; void update_zenit(); diff --git a/src/slic3r/GUI/ConfigWizard.cpp b/src/slic3r/GUI/ConfigWizard.cpp index 9d241b0daf..e66922630d 100644 --- a/src/slic3r/GUI/ConfigWizard.cpp +++ b/src/slic3r/GUI/ConfigWizard.cpp @@ -42,16 +42,27 @@ using Config::SnapshotDB; // Configuration data structures extensions needed for the wizard -Bundle::Bundle(fs::path source_path, bool is_in_resources, bool is_prusa_bundle) - : preset_bundle(new PresetBundle) - , vendor_profile(nullptr) - , is_in_resources(is_in_resources) - , is_prusa_bundle(is_prusa_bundle) +bool Bundle::load(fs::path source_path, bool ais_in_resources, bool ais_prusa_bundle) { - preset_bundle->load_configbundle(source_path.string(), PresetBundle::LOAD_CFGBNDLE_SYSTEM); + this->preset_bundle = std::make_unique(); + this->is_in_resources = ais_in_resources; + this->is_prusa_bundle = ais_prusa_bundle; + + std::string path_string = source_path.string(); + size_t presets_loaded = preset_bundle->load_configbundle(path_string, PresetBundle::LOAD_CFGBNDLE_SYSTEM); auto first_vendor = preset_bundle->vendors.begin(); - wxCHECK_RET(first_vendor != preset_bundle->vendors.end(), "Failed to load preset bundle"); - vendor_profile = &first_vendor->second; + if (first_vendor == preset_bundle->vendors.end()) { + BOOST_LOG_TRIVIAL(error) << boost::format("Vendor bundle: `%1%`: No vendor information defined, cannot install.") % path_string; + return false; + } + if (presets_loaded == 0) { + BOOST_LOG_TRIVIAL(error) << boost::format("Vendor bundle: `%1%`: No profile loaded.") % path_string; + return false; + } + + BOOST_LOG_TRIVIAL(trace) << boost::format("Vendor bundle: `%1%`: %2% profiles loaded.") % path_string % presets_loaded; + this->vendor_profile = &first_vendor->second; + return true; } Bundle::Bundle(Bundle &&other) @@ -76,8 +87,11 @@ BundleMap BundleMap::load() prusa_bundle_path = (rsrc_vendor_dir / PresetBundle::PRUSA_BUNDLE).replace_extension(".ini"); prusa_bundle_rsrc = true; } - Bundle prusa_bundle(std::move(prusa_bundle_path), prusa_bundle_rsrc, true); - res.emplace(PresetBundle::PRUSA_BUNDLE, std::move(prusa_bundle)); + { + Bundle prusa_bundle; + if (prusa_bundle.load(std::move(prusa_bundle_path), prusa_bundle_rsrc, true)) + res.emplace(PresetBundle::PRUSA_BUNDLE, std::move(prusa_bundle)); + } // Load the other bundles in the datadir/vendor directory // and then additionally from resources/profiles. @@ -90,8 +104,9 @@ BundleMap BundleMap::load() // Don't load this bundle if we've already loaded it. if (res.find(id) != res.end()) { continue; } - Bundle bundle(dir_entry.path(), is_in_resources); - res.emplace(std::move(id), std::move(bundle)); + Bundle bundle; + if (bundle.load(dir_entry.path(), is_in_resources)) + res.emplace(std::move(id), std::move(bundle)); } } diff --git a/src/slic3r/GUI/ConfigWizard_private.hpp b/src/slic3r/GUI/ConfigWizard_private.hpp index 1d4b642212..64081153d1 100644 --- a/src/slic3r/GUI/ConfigWizard_private.hpp +++ b/src/slic3r/GUI/ConfigWizard_private.hpp @@ -100,13 +100,16 @@ struct Materials struct Bundle { std::unique_ptr preset_bundle; - VendorProfile *vendor_profile; - const bool is_in_resources; - const bool is_prusa_bundle; + VendorProfile *vendor_profile { nullptr }; + bool is_in_resources { false }; + bool is_prusa_bundle { false }; - Bundle(fs::path source_path, bool is_in_resources, bool is_prusa_bundle = false); + Bundle() = default; Bundle(Bundle &&other); + // Returns false if not loaded. Reason for that is logged as boost::log error. + bool load(fs::path source_path, bool is_in_resources, bool is_prusa_bundle = false); + const std::string& vendor_id() const { return vendor_profile->id; } }; diff --git a/src/slic3r/GUI/Event.hpp b/src/slic3r/GUI/Event.hpp index 429ef99b02..b9816a747e 100644 --- a/src/slic3r/GUI/Event.hpp +++ b/src/slic3r/GUI/Event.hpp @@ -40,11 +40,19 @@ template struct ArrayEvent : public wxEvent return new ArrayEvent(GetEventType(), data, GetEventObject()); } }; -template struct ArrayEvent : public wxEvent + +template struct Event : public wxEvent { T data; - ArrayEvent(wxEventType type, T data, wxObject* origin = nullptr) + Event(wxEventType type, const T &data, wxObject* origin = nullptr) + : wxEvent(0, type), data(std::move(data)) + { + m_propagationLevel = wxEVENT_PROPAGATE_MAX; + SetEventObject(origin); + } + + Event(wxEventType type, T&& data, wxObject* origin = nullptr) : wxEvent(0, type), data(std::move(data)) { m_propagationLevel = wxEVENT_PROPAGATE_MAX; @@ -53,13 +61,10 @@ template struct ArrayEvent : public wxEvent virtual wxEvent* Clone() const { - return new ArrayEvent(GetEventType(), data, GetEventObject()); + return new Event(GetEventType(), data, GetEventObject()); } }; -template using Event = ArrayEvent; - - } } diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index fcb7522ac9..bdc71f17ed 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -4088,12 +4088,6 @@ void GLCanvas3D::handle_layers_data_focus_event(const t_layer_height_range range void GLCanvas3D::update_ui_from_settings() { -#if ENABLE_NON_STATIC_CANVAS_MANAGER - Camera& camera = wxGetApp().plater()->get_camera(); - camera.set_type(wxGetApp().app_config->get("use_perspective_camera")); -#else - m_camera.set_type(wxGetApp().app_config->get("use_perspective_camera")); -#endif // ENABLE_NON_STATIC_CANVAS_MANAGER m_dirty = true; #if ENABLE_RETINA_GL diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 24d9123ba3..df7d4e8e90 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -155,6 +155,7 @@ GUI_App::GUI_App() , m_em_unit(10) , m_imgui(new ImGuiWrapper()) , m_wizard(nullptr) + , m_removable_drive_manager(std::make_unique()) {} GUI_App::~GUI_App() @@ -279,7 +280,6 @@ bool GUI_App::on_init_inner() m_printhost_job_queue.reset(new PrintHostJobQueue(mainframe->printhost_queue_dlg())); - RemovableDriveManager::get_instance().init(); Bind(wxEVT_IDLE, [this](wxIdleEvent& event) { @@ -291,10 +291,6 @@ bool GUI_App::on_init_inner() this->obj_manipul()->update_if_dirty(); -#if !__APPLE__ - RemovableDriveManager::get_instance().update(wxGetLocalTime(), true); -#endif - // Preset updating & Configwizard are done after the above initializations, // and after MainFrame is created & shown. // The extra CallAfter() is needed because of Mac, where this is the only way @@ -454,46 +450,30 @@ float GUI_App::toolbar_icon_scale(const bool is_limited/* = false*/) const void GUI_App::recreate_GUI() { - // Weird things happen as the Paint messages are floating around the windows being destructed. - // Avoid the Paint messages by hiding the main window. - // Also the application closes much faster without these unnecessary screen refreshes. - // In addition, there were some crashes due to the Paint events sent to already destructed windows. - mainframe->Show(false); + mainframe->shutdown(); const auto msg_name = _(L("Changing of an application language")) + dots; wxProgressDialog dlg(msg_name, msg_name); dlg.Pulse(); - - // to make sure nobody accesses data from the soon-to-be-destroyed widgets: - tabs_list.clear(); - plater_ = nullptr; - dlg.Update(10, _(L("Recreating")) + dots); - MainFrame* topwindow = mainframe; + MainFrame *old_main_frame = mainframe; mainframe = new MainFrame(); - sidebar().obj_list()->init_objects(); // propagate model objects to object list + // Propagate model objects to object list. + sidebar().obj_list()->init_objects(); + SetTopWindow(mainframe); - if (topwindow) { - SetTopWindow(mainframe); - - dlg.Update(30, _(L("Recreating")) + dots); - topwindow->Destroy(); - - // For this moment ConfigWizard is deleted, invalidate it - m_wizard = nullptr; - } + dlg.Update(30, _(L("Recreating")) + dots); + old_main_frame->Destroy(); + // For this moment ConfigWizard is deleted, invalidate it. + m_wizard = nullptr; dlg.Update(80, _(L("Loading of current presets")) + dots); - m_printhost_job_queue.reset(new PrintHostJobQueue(mainframe->printhost_queue_dlg())); - load_current_presets(); - mainframe->Show(true); dlg.Update(90, _(L("Loading of a mode view")) + dots); - /* Temporary workaround for the correct behavior of the Scrolled sidebar panel: * change min hight of object list to the normal min value (15 * wxGetApp().em_unit()) * after first whole Mainframe updating/layouting @@ -501,7 +481,6 @@ void GUI_App::recreate_GUI() const int list_min_height = 15 * em_unit(); if (obj_list()->GetMinSize().GetY() > list_min_height) obj_list()->SetMinSize(wxSize(-1, list_min_height)); - update_mode(); // #ys_FIXME_delete_after_testing Do we still need this ? @@ -596,9 +575,6 @@ void GUI_App::import_model(wxWindow *parent, wxArrayString& input_files) const bool GUI_App::switch_language() { if (select_language()) { -#if !ENABLE_NON_STATIC_CANVAS_MANAGER - _3DScene::remove_all_canvases(); -#endif // !ENABLE_NON_STATIC_CANVAS_MANAGER recreate_GUI(); return true; } else { diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp index d7cd0c9b81..bf75eaaa6a 100644 --- a/src/slic3r/GUI/GUI_App.hpp +++ b/src/slic3r/GUI/GUI_App.hpp @@ -32,9 +32,9 @@ class PresetUpdater; class ModelObject; class PrintHostJobQueue; -namespace GUI -{ +namespace GUI{ +class RemovableDriveManager; enum FileType { FT_STL, @@ -102,6 +102,9 @@ class GUI_App : public wxApp #if ENABLE_NON_STATIC_CANVAS_MANAGER GLCanvas3DManager m_canvas_mgr; #endif // ENABLE_NON_STATIC_CANVAS_MANAGER + + std::unique_ptr m_removable_drive_manager; + std::unique_ptr m_imgui; std::unique_ptr m_printhost_job_queue; ConfigWizard* m_wizard; // Managed by wxWindow tree @@ -192,6 +195,8 @@ public: std::vector tabs_list; + RemovableDriveManager* removable_drive_manager() { return m_removable_drive_manager.get(); } + ImGuiWrapper* imgui() { return m_imgui.get(); } PrintHostJobQueue& printhost_job_queue() { return *m_printhost_job_queue.get(); } diff --git a/src/slic3r/GUI/KBShortcutsDialog.cpp b/src/slic3r/GUI/KBShortcutsDialog.cpp index b6e55a7c9d..b595f12752 100644 --- a/src/slic3r/GUI/KBShortcutsDialog.cpp +++ b/src/slic3r/GUI/KBShortcutsDialog.cpp @@ -122,6 +122,8 @@ void KBShortcutsDialog::fill_shortcuts() { ctrl + "G", L("Export G-code") }, { ctrl + "Shift+" + "G", L("Send G-code") }, { ctrl + "E", L("Export config") }, + { ctrl + "U", L("Export to SD card / Flash drive") }, + { ctrl + "T", L("Eject SD card / Flash drive") }, // Edit { ctrl + "A", L("Select all objects") }, { "Esc", L("Deselect all") }, diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index b97e72aeae..50a551d779 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -25,6 +25,7 @@ #include "wxExtensions.hpp" #include "GUI_ObjectList.hpp" #include "Mouse3DController.hpp" +#include "RemovableDriveManager.hpp" #include "I18N.hpp" #include @@ -108,44 +109,7 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_S event.Veto(); return; } - - if (m_plater) - m_plater->stop_jobs(); - -#if ENABLE_NON_STATIC_CANVAS_MANAGER - // Unbinding of wxWidgets event handling in canvases needs to be done here because on MAC, - // when closing the application using Command+Q, a mouse event is triggered after this lambda is completed, - // causing a crash - if (m_plater) m_plater->unbind_canvas_event_handlers(); -#endif // ENABLE_NON_STATIC_CANVAS_MANAGER - - // Weird things happen as the Paint messages are floating around the windows being destructed. - // Avoid the Paint messages by hiding the main window. - // Also the application closes much faster without these unnecessary screen refreshes. - // In addition, there were some crashes due to the Paint events sent to already destructed windows. - this->Show(false); - - // Stop the background thread (Windows and Linux). - // Disconnect from a 3DConnextion driver (OSX). - m_plater->get_mouse3d_controller().shutdown(); - // Store the device parameter database back to appconfig. - m_plater->get_mouse3d_controller().save_config(*wxGetApp().app_config); - - // Save the slic3r.ini.Usually the ini file is saved from "on idle" callback, - // but in rare cases it may not have been called yet. - wxGetApp().app_config->save(); -// if (m_plater) -// m_plater->print = undef; -#if !ENABLE_NON_STATIC_CANVAS_MANAGER - _3DScene::remove_all_canvases(); -#endif // !ENABLE_NON_STATIC_CANVAS_MANAGER -// Slic3r::GUI::deregister_on_request_update_callback(); - - // set to null tabs and a plater - // to avoid any manipulations with them from App->wxEVT_IDLE after of the mainframe closing - wxGetApp().tabs_list.clear(); - wxGetApp().plater_ = nullptr; - + this->shutdown(); // propagate event event.Skip(); }); @@ -164,6 +128,50 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_S m_plater->show_action_buttons(true); } +// Called when closing the application and when switching the application language. +void MainFrame::shutdown() +{ + if (m_plater) + m_plater->stop_jobs(); + +#if ENABLE_NON_STATIC_CANVAS_MANAGER + // Unbinding of wxWidgets event handling in canvases needs to be done here because on MAC, + // when closing the application using Command+Q, a mouse event is triggered after this lambda is completed, + // causing a crash + if (m_plater) m_plater->unbind_canvas_event_handlers(); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER + + // Weird things happen as the Paint messages are floating around the windows being destructed. + // Avoid the Paint messages by hiding the main window. + // Also the application closes much faster without these unnecessary screen refreshes. + // In addition, there were some crashes due to the Paint events sent to already destructed windows. + this->Show(false); + + // Stop the background thread (Windows and Linux). + // Disconnect from a 3DConnextion driver (OSX). + m_plater->get_mouse3d_controller().shutdown(); + // Store the device parameter database back to appconfig. + m_plater->get_mouse3d_controller().save_config(*wxGetApp().app_config); + + // Stop the background thread of the removable drive manager, so that no new updates will be sent to the Plater. + wxGetApp().removable_drive_manager()->shutdown(); + + // Save the slic3r.ini.Usually the ini file is saved from "on idle" callback, + // but in rare cases it may not have been called yet. + wxGetApp().app_config->save(); +// if (m_plater) +// m_plater->print = undef; +#if !ENABLE_NON_STATIC_CANVAS_MANAGER + _3DScene::remove_all_canvases(); +#endif // !ENABLE_NON_STATIC_CANVAS_MANAGER +// Slic3r::GUI::deregister_on_request_update_callback(); + + // set to null tabs and a plater + // to avoid any manipulations with them from App->wxEVT_IDLE after of the mainframe closing + wxGetApp().tabs_list.clear(); + wxGetApp().plater_ = nullptr; +} + void MainFrame::update_title() { wxString title = wxEmptyString; @@ -332,6 +340,27 @@ bool MainFrame::can_send_gcode() const return print_host_opt != nullptr && !print_host_opt->value.empty(); } +bool MainFrame::can_export_gcode_sd() const +{ + if (m_plater == nullptr) + return false; + + if (m_plater->model().objects.empty()) + return false; + + if (m_plater->is_export_gcode_scheduled()) + return false; + + // TODO:: add other filters + + return wxGetApp().removable_drive_manager()->status().has_removable_drives; +} + +bool MainFrame::can_eject() const +{ + return wxGetApp().removable_drive_manager()->status().has_eject; +} + bool MainFrame::can_slice() const { bool bg_proc = wxGetApp().app_config->get("background_processing") == "1"; @@ -438,7 +467,7 @@ void MainFrame::init_menubar() m_plater->load_project(filename); else { - wxMessageDialog msg(this, _(L("The selected project is no longer available.\nDo you want to remove it from the recent projects list ?")), _(L("Error")), wxYES_NO | wxYES_DEFAULT); + wxMessageDialog msg(this, _(L("The selected project is no longer available.\nDo you want to remove it from the recent projects list?")), _(L("Error")), wxYES_NO | wxYES_DEFAULT); if (msg.ShowModal() == wxID_YES) { m_recent_projects.RemoveFileFromHistory(file_id); @@ -502,6 +531,9 @@ void MainFrame::init_menubar() [this](wxCommandEvent&) { if (m_plater) m_plater->send_gcode(); }, "export_gcode", nullptr, [this](){return can_send_gcode(); }, this); m_changeable_menu_items.push_back(item_send_gcode); + append_menu_item(export_menu, wxID_ANY, _(L("Export G-code to SD card / Flash drive")) + dots + "\tCtrl+U", _(L("Export current plate as G-code to SD card / Flash drive")), + [this](wxCommandEvent&) { if (m_plater) m_plater->export_gcode(true); }, "export_to_sd", nullptr, + [this]() {return can_export_gcode_sd(); }, this); export_menu->AppendSeparator(); append_menu_item(export_menu, wxID_ANY, _(L("Export plate as &STL")) + dots, _(L("Export current plate as STL")), [this](wxCommandEvent&) { if (m_plater) m_plater->export_stl(); }, "export_plater", nullptr, @@ -525,6 +557,10 @@ void MainFrame::init_menubar() [this]() {return true; }, this); append_submenu(fileMenu, export_menu, wxID_ANY, _(L("&Export")), ""); + append_menu_item(fileMenu, wxID_ANY, _(L("Ejec&t SD card / Flash drive")) + dots + "\tCtrl+T", _(L("Eject SD card / Flash drive after the G-code was exported to it.")), + [this](wxCommandEvent&) { if (m_plater) m_plater->eject_drive(); }, "eject_sd", nullptr, + [this]() {return can_eject(); }, this); + fileMenu->AppendSeparator(); #if 0 diff --git a/src/slic3r/GUI/MainFrame.hpp b/src/slic3r/GUI/MainFrame.hpp index a6d0749ab6..2ccd77666e 100644 --- a/src/slic3r/GUI/MainFrame.hpp +++ b/src/slic3r/GUI/MainFrame.hpp @@ -70,6 +70,8 @@ class MainFrame : public DPIFrame bool can_export_supports() const; bool can_export_gcode() const; bool can_send_gcode() const; + bool can_export_gcode_sd() const; + bool can_eject() const; bool can_slice() const; bool can_change_view() const; bool can_select() const; @@ -98,6 +100,9 @@ public: MainFrame(); ~MainFrame() = default; + // Called when closing the application and when switching the application language. + void shutdown(); + Plater* plater() { return m_plater; } void update_title(); diff --git a/src/slic3r/GUI/Mouse3DController.cpp b/src/slic3r/GUI/Mouse3DController.cpp index 6781ba9ff2..0cd39b092a 100644 --- a/src/slic3r/GUI/Mouse3DController.cpp +++ b/src/slic3r/GUI/Mouse3DController.cpp @@ -368,6 +368,8 @@ void Mouse3DController::render_settings_dialog(GLCanvas3D& canvas) const void Mouse3DController::connected(std::string device_name) { + assert(! m_connected); + assert(m_device_str.empty()); m_device_str = device_name; // Copy the parameters for m_device_str into the current parameters. if (auto it_params = m_params_by_device.find(m_device_str); it_params != m_params_by_device.end()) { @@ -380,13 +382,13 @@ void Mouse3DController::connected(std::string device_name) void Mouse3DController::disconnected() { // Copy the current parameters for m_device_str into the parameter database. - assert(! m_device_str.empty()); - if (! m_device_str.empty()) { + assert(m_connected == ! m_device_str.empty()); + if (m_connected) { tbb::mutex::scoped_lock lock(m_params_ui_mutex); m_params_by_device[m_device_str] = m_params_ui; + m_device_str.clear(); + m_connected = false; } - m_device_str.clear(); - m_connected = false; } bool Mouse3DController::handle_input(const DataPacketAxis& packet) @@ -451,12 +453,13 @@ void Mouse3DController::shutdown() // Stop the worker thread, if running. { // Notify the worker thread to cancel wait on detection polling. - std::unique_lock lock(m_stop_condition_mutex); + std::lock_guard lock(m_stop_condition_mutex); m_stop = true; - m_stop_condition.notify_all(); } + m_stop_condition.notify_all(); // Wait for the worker thread to stop. m_thread.join(); + m_stop = false; } } diff --git a/src/slic3r/GUI/Mouse3DController.hpp b/src/slic3r/GUI/Mouse3DController.hpp index 99c5511a51..e686e12cc2 100644 --- a/src/slic3r/GUI/Mouse3DController.hpp +++ b/src/slic3r/GUI/Mouse3DController.hpp @@ -12,6 +12,7 @@ #include #include #include +#include #include @@ -138,7 +139,7 @@ class Mouse3DController std::map m_params_by_device; mutable State m_state; - std::atomic m_connected; + std::atomic m_connected { false }; std::string m_device_str; #if ! __APPLE__ diff --git a/src/slic3r/GUI/Mouse3DHandlerMac.mm b/src/slic3r/GUI/Mouse3DHandlerMac.mm index d40948cd1a..eaf580908c 100644 --- a/src/slic3r/GUI/Mouse3DHandlerMac.mm +++ b/src/slic3r/GUI/Mouse3DHandlerMac.mm @@ -152,6 +152,8 @@ static void DeviceAdded(uint32_t unused) static void DeviceRemoved(uint32_t unused) { BOOST_LOG_TRIVIAL(info) << "3dx device removed\n"; + assert(m_connected); + assert(! m_device_str.empty()); mouse_3d_controller->disconnected(); } @@ -214,6 +216,8 @@ void Mouse3DController::shutdown() CleanupConnexionHandlers(); unload_driver(); } + // Copy the current parameters to parameter database, mark the device as disconnected. + this->disconnected(); mouse_3d_controller = nullptr; } diff --git a/src/slic3r/GUI/MsgDialog.cpp b/src/slic3r/GUI/MsgDialog.cpp index d4a82a03d6..5b583ba2a3 100644 --- a/src/slic3r/GUI/MsgDialog.cpp +++ b/src/slic3r/GUI/MsgDialog.cpp @@ -81,7 +81,7 @@ ErrorDialog::ErrorDialog(wxWindow *parent, const wxString &msg) html->SetMinSize(wxSize(40 * wxGetApp().em_unit(), -1)); wxFont font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); wxColour text_clr = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT); - wxColour bgr_clr = wxSystemSettings::GetColour(wxSYS_COLOUR_FRAMEBK); // wxSYS_COLOUR_WINDOW + wxColour bgr_clr = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW); auto text_clr_str = wxString::Format(wxT("#%02X%02X%02X"), text_clr.Red(), text_clr.Green(), text_clr.Blue()); auto bgr_clr_str = wxString::Format(wxT("#%02X%02X%02X"), bgr_clr.Red(), bgr_clr.Green(), bgr_clr.Blue()); const int font_size = font.GetPointSize()-1; diff --git a/src/slic3r/GUI/OptionsGroup.cpp b/src/slic3r/GUI/OptionsGroup.cpp index f0b108bd7e..207d42b5b3 100644 --- a/src/slic3r/GUI/OptionsGroup.cpp +++ b/src/slic3r/GUI/OptionsGroup.cpp @@ -113,7 +113,11 @@ void OptionsGroup::add_undo_buttuns_to_sizer(wxSizer* sizer, const t_field& fiel } void OptionsGroup::append_line(const Line& line, wxStaticText** full_Label/* = nullptr*/) { - if ( (line.sizer != nullptr || line.widget != nullptr) && line.full_width) { + if ( line.full_width && ( + line.sizer != nullptr || + line.widget != nullptr || + !line.get_extra_widgets().empty() ) + ) { if (line.sizer != nullptr) { sizer->Add(line.sizer, 0, wxEXPAND | wxALL, wxOSX ? 0 : 15); return; @@ -122,6 +126,17 @@ void OptionsGroup::append_line(const Line& line, wxStaticText** full_Label/* = n sizer->Add(line.widget(this->ctrl_parent()), 0, wxEXPAND | wxALL, wxOSX ? 0 : 15); return; } + if (!line.get_extra_widgets().empty()) { + const auto h_sizer = new wxBoxSizer(wxHORIZONTAL); + sizer->Add(h_sizer, 1, wxEXPAND | wxALL, wxOSX ? 0 : 15); + + bool is_first_item = true; + for (auto extra_widget : line.get_extra_widgets()) { + h_sizer->Add(extra_widget(this->ctrl_parent()), is_first_item ? 1 : 0, wxLEFT, 15); + is_first_item = false; + } + return; + } } auto option_set = line.get_options(); @@ -412,7 +427,9 @@ void ConfigOptionsGroup::back_to_config_value(const DynamicPrintConfig& config, auto *nozzle_diameter = dynamic_cast(config.option("nozzle_diameter")); value = int(nozzle_diameter->values.size()); } - else if (m_opt_map.find(opt_key) == m_opt_map.end() || opt_key == "bed_shape") { + else if (m_opt_map.find(opt_key) == m_opt_map.end() || + // This option don't have corresponded field + opt_key == "bed_shape" || opt_key == "compatible_printers" || opt_key == "compatible_prints" ) { value = get_config_value(config, opt_key); change_opt_value(*m_config, opt_key, value); return; @@ -629,7 +646,7 @@ boost::any ConfigOptionsGroup::get_config_value(const DynamicPrintConfig& config ret = static_cast(config.opt_string(opt_key)); break; case coStrings: - if (opt_key.compare("compatible_printers") == 0) { + if (opt_key == "compatible_printers" || opt_key == "compatible_prints") { ret = config.option(opt_key)->values; break; } diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 781b16fa55..98ef2a7122 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -301,15 +301,20 @@ PresetBitmapComboBox(parent, wxSize(15 * wxGetApp().em_unit(), -1)), if (preset_type == Slic3r::Preset::TYPE_FILAMENT) { Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &event) { - int shifl_Left = 0; + PresetBundle* preset_bundle = wxGetApp().preset_bundle; + const Preset* selected_preset = preset_bundle->filaments.find_preset(preset_bundle->filament_presets[extruder_idx]); + // Wide icons are shown if the currently selected preset is not compatible with the current printer, + // and red flag is drown in front of the selected preset. + bool wide_icons = selected_preset != nullptr && !selected_preset->is_compatible; float scale = m_em_unit*0.1f; + + int shifl_Left = wide_icons ? int(scale * 16 + 0.5) : 0; #if defined(wxBITMAPCOMBOBOX_OWNERDRAWN_BASED) - shifl_Left = int(scale * 4 + 0.5f); // IMAGE_SPACING_RIGHT = 4 for wxBitmapComboBox -> Space left of image + shifl_Left += int(scale * 4 + 0.5f); // IMAGE_SPACING_RIGHT = 4 for wxBitmapComboBox -> Space left of image #endif - int icon_right_pos = int(scale * (24+4) + 0.5); + int icon_right_pos = shifl_Left + int(scale * (24+4) + 0.5); int mouse_pos = event.GetLogicalPosition(wxClientDC(this)).x; -// if (extruder_idx < 0 || event.GetLogicalPosition(wxClientDC(this)).x > 24) { - if ( extruder_idx < 0 || mouse_pos < shifl_Left || mouse_pos > icon_right_pos ) { + if (mouse_pos < shifl_Left || mouse_pos > icon_right_pos ) { // Let the combo box process the mouse click. event.Skip(); return; @@ -338,7 +343,7 @@ PresetBitmapComboBox(parent, wxSize(15 * wxGetApp().em_unit(), -1)), cfg_new.set_key_value("extruder_colour", colors); wxGetApp().get_tab(Preset::TYPE_PRINTER)->load_config(cfg_new); - wxGetApp().preset_bundle->update_plater_filament_ui(extruder_idx, this); + preset_bundle->update_plater_filament_ui(extruder_idx, this); wxGetApp().plater()->on_config_change(cfg_new); } }); @@ -881,8 +886,8 @@ Sidebar::Sidebar(Plater *parent) }; init_scalable_btn(&p->btn_send_gcode , "export_gcode", _(L("Send to printer")) + "\tCtrl+Shift+G"); - init_scalable_btn(&p->btn_remove_device, "eject_sd" , _(L("Remove device"))); - init_scalable_btn(&p->btn_export_gcode_removable, "export_to_sd", _(L("Export to SD card / Flash drive"))); + init_scalable_btn(&p->btn_remove_device, "eject_sd" , _(L("Remove device")) + "\tCtrl+T"); + init_scalable_btn(&p->btn_export_gcode_removable, "export_to_sd", _(L("Export to SD card / Flash drive")) + "\tCtrl+U"); // regular buttons "Slice now" and "Export G-code" @@ -1509,6 +1514,7 @@ struct Plater::priv ret.poly.contour = std::move(p); ret.translation = scaled(m_pos); ret.rotation = m_rotation; + ret.priority++; return ret; } } wipetower; @@ -1572,18 +1578,23 @@ struct Plater::priv // the current bed width. static const constexpr double LOGICAL_BED_GAP = 1. / 5.; - ArrangePolygons m_selected, m_unselected; + ArrangePolygons m_selected, m_unselected, m_unprintable; // clear m_selected and m_unselected, reserve space for next usage void clear_input() { const Model &model = plater().model; - size_t count = 0; // To know how much space to reserve - for (auto obj : model.objects) count += obj->instances.size(); + size_t count = 0, cunprint = 0; // To know how much space to reserve + for (auto obj : model.objects) + for (auto mi : obj->instances) + mi->printable ? count++ : cunprint++; + m_selected.clear(); m_unselected.clear(); + m_unprintable.clear(); m_selected.reserve(count + 1 /* for optional wti */); m_unselected.reserve(count + 1 /* for optional wti */); + m_unprintable.reserve(cunprint /* for optional wti */); } // Stride between logical beds @@ -1612,8 +1623,10 @@ struct Plater::priv clear_input(); for (ModelObject *obj: plater().model.objects) - for (ModelInstance *mi : obj->instances) - m_selected.emplace_back(get_arrange_poly(mi)); + for (ModelInstance *mi : obj->instances) { + ArrangePolygons & cont = mi->printable ? m_selected : m_unprintable; + cont.emplace_back(get_arrange_poly(mi)); + } auto& wti = plater().updated_wipe_tower(); if (wti) m_selected.emplace_back(get_arrange_poly(&wti)); @@ -1648,9 +1661,12 @@ struct Plater::priv for (size_t i = 0; i < inst_sel.size(); ++i) { ArrangePolygon &&ap = get_arrange_poly(mo->instances[i]); - inst_sel[i] ? - m_selected.emplace_back(std::move(ap)) : - m_unselected.emplace_back(std::move(ap)); + ArrangePolygons &cont = mo->instances[i]->printable ? + (inst_sel[i] ? m_selected : + m_unselected) : + m_unprintable; + + cont.emplace_back(std::move(ap)); } } @@ -1682,16 +1698,35 @@ struct Plater::priv public: using PlaterJob::PlaterJob; - int status_range() const override { return int(m_selected.size()); } + int status_range() const override + { + return int(m_selected.size() + m_unprintable.size()); + } void process() override; void finalize() override { // Ignore the arrange result if aborted. if (was_canceled()) return; - + + // Unprintable items go to the last virtual bed + int beds = 0; + // Apply the arrange result to all selected objects - for (ArrangePolygon &ap : m_selected) ap.apply(); + for (ArrangePolygon &ap : m_selected) { + beds = std::max(ap.bed_idx, beds); + ap.apply(); + } + + // Get the virtual beds from the unselected items + for (ArrangePolygon &ap : m_unselected) + beds = std::max(ap.bed_idx, beds); + + // Move the unprintable items to the last virtual bed. + for (ArrangePolygon &ap : m_unprintable) { + ap.bed_idx += beds + 1; + ap.apply(); + } plater().update(); } @@ -1961,6 +1996,11 @@ struct Plater::priv wxString get_project_filename(const wxString& extension = wxEmptyString) const; void set_project_filename(const wxString& filename); + // 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 }; + private: bool init_object_menu(); bool init_common_menu(wxMenu* menu, const bool is_part = false); @@ -1986,8 +2026,8 @@ private: * we should call tack_snapshot just ones * instead of calls for each action separately * */ - std::string m_last_fff_printer_profile_name; - std::string m_last_sla_printer_profile_name; + std::string m_last_fff_printer_profile_name; + std::string m_last_sla_printer_profile_name; }; const std::regex Plater::priv::pattern_bundle(".*[.](amf|amf[.]xml|zip[.]amf|3mf|prusa)", std::regex::icase); @@ -2171,11 +2211,17 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) // Connect to a 3DConnextion driver (OSX). mouse3d_controller.init(); + this->q->Bind(EVT_REMOVABLE_DRIVE_EJECTED, [this](RemovableDriveEjectEvent &evt) { + this->show_action_buttons(this->ready_to_slice); + Slic3r::GUI::show_info(this->q, (boost::format(_utf8(L("Unmounting successful. The device %s(%s) can now be safely removed from the computer."))) + % evt.data.name % evt.data.path).str()); + }); + this->q->Bind(EVT_REMOVABLE_DRIVES_CHANGED, [this](RemovableDrivesChangedEvent &) { this->show_action_buttons(this->ready_to_slice); }); + // Start the background thread and register this window as a target for update events. + wxGetApp().removable_drive_manager()->init(this->q); + // Initialize the Undo / Redo stack with a first snapshot. this->take_snapshot(_(L("New Project"))); - - //void Plater::priv::show_action_buttons(const bool is_ready_to_slice) const - RemovableDriveManager::get_instance().set_drive_count_changed_callback(std::bind(&Plater::priv::show_action_buttons, this, std::placeholders::_1)); } Plater::priv::~priv() @@ -2249,6 +2295,14 @@ void Plater::priv::update_ui_from_settings() // $self->{buttons_sizer}->Layout; // } + camera.set_type(wxGetApp().app_config->get("use_perspective_camera")); + if (wxGetApp().app_config->get("use_free_camera") != "1") + { + // forces camera right vector to be parallel to XY plane + if (std::abs(camera.get_dir_right()(2)) > EPSILON) + camera.look_at(camera.get_position(), camera.get_target(), Vec3d::UnitZ()); + } + view3D->get_canvas3d()->update_ui_from_settings(); preview->get_canvas3d()->update_ui_from_settings(); } @@ -2842,16 +2896,21 @@ void Plater::priv::ArrangeJob::process() { } coord_t min_d = scaled(dist); - auto count = unsigned(m_selected.size()); + auto count = unsigned(m_selected.size() + m_unprintable.size()); arrangement::BedShapeHint bedshape = plater().get_bed_shape_hint(); - + + auto stopfn = [this]() { return was_canceled(); }; + try { arrangement::arrange(m_selected, m_unselected, min_d, bedshape, - [this, count](unsigned st) { - if (st > 0) // will not finalize after last one - update_status(int(count - st), arrangestr); - }, - [this]() { return was_canceled(); }); + [this, count](unsigned st) { + st += m_unprintable.size(); + if (st > 0) update_status(int(count - st), arrangestr); + }, stopfn); + arrangement::arrange(m_unprintable, {}, min_d, bedshape, + [this, count](unsigned st) { + if (st > 0) update_status(int(count - st), arrangestr); + }, stopfn); } catch (std::exception & /*e*/) { GUI::show_error(plater().q, _(L("Could not arrange model objects! " @@ -3717,14 +3776,9 @@ void Plater::priv::on_process_completed(wxCommandEvent &evt) sidebar->set_btn_label(ActionButtonType::abReslice, "Slice now"); show_action_buttons(true); } - else if (wxGetApp().get_mode() == comSimple) - show_action_buttons(false); - - if(!canceled && RemovableDriveManager::get_instance().get_is_writing()) - { - RemovableDriveManager::get_instance().set_is_writing(false); - show_action_buttons(false); - } + else if (this->writing_to_removable_device || wxGetApp().get_mode() == comSimple) + show_action_buttons(false); + this->writing_to_removable_device = false; } void Plater::priv::on_layer_editing_toggled(bool enable) @@ -4295,32 +4349,36 @@ void Plater::priv::update_object_menu() sidebar->obj_list()->append_menu_items_add_volume(&object_menu); } -void Plater::priv::show_action_buttons(const bool is_ready_to_slice) const +void Plater::priv::show_action_buttons(const bool ready_to_slice) const { - RemovableDriveManager::get_instance().set_plater_ready_to_slice(is_ready_to_slice); + // Cache this value, so that the callbacks from the RemovableDriveManager may repeat that value when calling show_action_buttons(). + this->ready_to_slice = ready_to_slice; + wxWindowUpdateLocker noUpdater(sidebar); const auto prin_host_opt = config->option("print_host"); const bool send_gcode_shown = prin_host_opt != nullptr && !prin_host_opt->value.empty(); - bool disconnect_shown = !RemovableDriveManager::get_instance().is_last_drive_removed(); - bool export_removable_shown = RemovableDriveManager::get_instance().get_drives_count() > 0; // when a background processing is ON, export_btn and/or send_btn are showing if (wxGetApp().app_config->get("background_processing") == "1") { + RemovableDriveManager::RemovableDrivesStatus removable_media_status = wxGetApp().removable_drive_manager()->status(); if (sidebar->show_reslice(false) | sidebar->show_export(true) | sidebar->show_send(send_gcode_shown) | - sidebar->show_export_removable(export_removable_shown) | - sidebar->show_disconnect(disconnect_shown)) + sidebar->show_export_removable(removable_media_status.has_removable_drives) | + sidebar->show_disconnect(removable_media_status.has_eject)) sidebar->Layout(); } else { - if (sidebar->show_reslice(is_ready_to_slice) | - sidebar->show_export(!is_ready_to_slice) | - sidebar->show_send(send_gcode_shown && !is_ready_to_slice) | - sidebar->show_export_removable(export_removable_shown && !is_ready_to_slice) | - sidebar->show_disconnect(disconnect_shown && !is_ready_to_slice)) + RemovableDriveManager::RemovableDrivesStatus removable_media_status; + if (! ready_to_slice) + removable_media_status = wxGetApp().removable_drive_manager()->status(); + if (sidebar->show_reslice(ready_to_slice) | + sidebar->show_export(!ready_to_slice) | + sidebar->show_send(send_gcode_shown && !ready_to_slice) | + sidebar->show_export_removable(!ready_to_slice && removable_media_status.has_removable_drives) | + sidebar->show_disconnect(!ready_to_slice && removable_media_status.has_eject)) sidebar->Layout(); } } @@ -4854,51 +4912,38 @@ void Plater::export_gcode(bool prefer_removable) return; } default_output_file = fs::path(Slic3r::fold_utf8_to_ascii(default_output_file.string())); - auto start_dir = wxGetApp().app_config->get_last_output_dir(default_output_file.parent_path().string()); - bool removable_drives_connected = GUI::RemovableDriveManager::get_instance().update(); - if(prefer_removable) - { - if(removable_drives_connected) - { - auto start_dir_removable = wxGetApp().app_config->get_last_output_dir(default_output_file.parent_path().string(), true); - if (RemovableDriveManager::get_instance().is_path_on_removable_drive(start_dir_removable)) - { - start_dir = start_dir_removable; - }else - { - start_dir = RemovableDriveManager::get_instance().get_drive_path(); - } - } + AppConfig &appconfig = *wxGetApp().app_config; + RemovableDriveManager &removable_drive_manager = *wxGetApp().removable_drive_manager(); + // Get a last save path, either to removable media or to an internal media. + std::string start_dir = appconfig.get_last_output_dir(default_output_file.parent_path().string(), prefer_removable); + if (prefer_removable) { + // Returns a path to a removable media if it exists, prefering start_dir. Update the internal removable drives database. + start_dir = removable_drive_manager.get_removable_drive_path(start_dir); + if (start_dir.empty()) + // Direct user to the last internal media. + start_dir = appconfig.get_last_output_dir(default_output_file.parent_path().string(), false); } - wxFileDialog dlg(this, (printer_technology() == ptFFF) ? _(L("Save G-code file as:")) : _(L("Save SL1 file as:")), - start_dir, - from_path(default_output_file.filename()), - GUI::file_wildcards((printer_technology() == ptFFF) ? FT_GCODE : FT_PNGZIP, default_output_file.extension().string()), - wxFD_SAVE | wxFD_OVERWRITE_PROMPT - ); fs::path output_path; - if (dlg.ShowModal() == wxID_OK) { - fs::path path = into_path(dlg.GetPath()); - wxGetApp().app_config->update_last_output_dir(path.parent_path().string(), RemovableDriveManager::get_instance().is_path_on_removable_drive(path.parent_path().string())); - output_path = std::move(path); + { + wxFileDialog dlg(this, (printer_technology() == ptFFF) ? _(L("Save G-code file as:")) : _(L("Save SL1 file as:")), + start_dir, + from_path(default_output_file.filename()), + GUI::file_wildcards((printer_technology() == ptFFF) ? FT_GCODE : FT_PNGZIP, default_output_file.extension().string()), + wxFD_SAVE | wxFD_OVERWRITE_PROMPT + ); + if (dlg.ShowModal() == wxID_OK) + output_path = into_path(dlg.GetPath()); } - if (! output_path.empty()) - { - std::string path = output_path.string(); - p->export_gcode(std::move(output_path), PrintHostJob()); - RemovableDriveManager::get_instance().update(0, false); - RemovableDriveManager::get_instance().set_last_save_path(path); - RemovableDriveManager::get_instance().verify_last_save_path(); - - if(!RemovableDriveManager::get_instance().is_last_drive_removed()) - { - RemovableDriveManager::get_instance().set_is_writing(true); - RemovableDriveManager::get_instance().erase_callbacks(); - RemovableDriveManager::get_instance().add_remove_callback(std::bind(&Plater::drive_ejected_callback, this)); - } - + if (! output_path.empty()) { + p->export_gcode(output_path, PrintHostJob()); + bool path_on_removable_media = removable_drive_manager.set_and_verify_last_save_path(output_path.string()); + // 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; } } @@ -5220,28 +5265,11 @@ void Plater::send_gcode() } } +// Called when the Eject button is pressed. void Plater::eject_drive() { - RemovableDriveManager::get_instance().update(0, true); - RemovableDriveManager::get_instance().erase_callbacks(); - RemovableDriveManager::get_instance().add_remove_callback(std::bind(&Plater::drive_ejected_callback, this)); - RemovableDriveManager::get_instance().eject_drive(RemovableDriveManager::get_instance().get_last_save_path()); - + wxGetApp().removable_drive_manager()->eject_drive(); } -void Plater::drive_ejected_callback() -{ - if (RemovableDriveManager::get_instance().get_did_eject()) - { - RemovableDriveManager::get_instance().set_did_eject(false); - show_info(this, - (boost::format(_utf8(L("Unmounting successful. The device %s(%s) can now be safely removed from the computer."))) - % RemovableDriveManager::get_instance().get_ejected_name() - % RemovableDriveManager::get_instance().get_ejected_path()).str()); - } - p->show_action_buttons(false); -} - - void Plater::take_snapshot(const std::string &snapshot_name) { p->take_snapshot(snapshot_name); } void Plater::take_snapshot(const wxString &snapshot_name) { p->take_snapshot(snapshot_name); } @@ -5631,7 +5659,7 @@ void Plater::suppress_background_process(const bool stop_background_process) void Plater::fix_through_netfabb(const int obj_idx, const int vol_idx/* = -1*/) { p->fix_through_netfabb(obj_idx, vol_idx); } void Plater::update_object_menu() { p->update_object_menu(); } -void Plater::show_action_buttons(const bool is_ready_to_slice) const { p->show_action_buttons(is_ready_to_slice); } +void Plater::show_action_buttons(const bool ready_to_slice) const { p->show_action_buttons(ready_to_slice); } void Plater::copy_selection_to_clipboard() { diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index c932c94c7b..e05942bb88 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -213,7 +213,6 @@ public: void fix_through_netfabb(const int obj_idx, const int vol_idx = -1); void send_gcode(); void eject_drive(); - void drive_ejected_callback(); void take_snapshot(const std::string &snapshot_name); void take_snapshot(const wxString &snapshot_name); diff --git a/src/slic3r/GUI/Preset.cpp b/src/slic3r/GUI/Preset.cpp index c0af7bceae..b5d6392f93 100644 --- a/src/slic3r/GUI/Preset.cpp +++ b/src/slic3r/GUI/Preset.cpp @@ -851,7 +851,7 @@ Preset& PresetCollection::load_preset(const std::string &path, const std::string return preset; } -void PresetCollection::save_current_preset(const std::string &new_name) +void PresetCollection::save_current_preset(const std::string &new_name, bool detach) { // 1) Find the preset with a new_name or create a new one, // initialize it with the edited config. @@ -866,6 +866,13 @@ void PresetCollection::save_current_preset(const std::string &new_name) preset.config = std::move(m_edited_preset.config); // The newly saved preset will be activated -> make it visible. preset.is_visible = true; + if (detach) { + // Clear the link to the parent profile. + preset.vendor = nullptr; + preset.inherits().clear(); + preset.alias.clear(); + preset.renamed_from.clear(); + } } else { // Creating a new preset. Preset &preset = *m_presets.insert(it, m_edited_preset); @@ -874,7 +881,12 @@ void PresetCollection::save_current_preset(const std::string &new_name) preset.name = new_name; preset.file = this->path_from_name(new_name); preset.vendor = nullptr; - if (preset.is_system) { + preset.alias.clear(); + preset.renamed_from.clear(); + if (detach) { + // Clear the link to the parent profile. + inherits.clear(); + } else if (preset.is_system) { // Inheriting from a system preset. inherits = /* preset.vendor->name + "/" + */ old_name; } else if (inherits.empty()) { @@ -1061,6 +1073,7 @@ size_t PresetCollection::update_compatible_internal(const PresetWithVendorProfil const ConfigOption *opt = active_printer.preset.config.option("nozzle_diameter"); if (opt) config.set_key_value("num_extruders", new ConfigOptionInt((int)static_cast(opt)->values.size())); + bool some_compatible = false; for (size_t idx_preset = m_num_default_presets; idx_preset < m_presets.size(); ++ idx_preset) { bool selected = idx_preset == m_idx_selected; Preset &preset_selected = m_presets[idx_preset]; @@ -1068,6 +1081,7 @@ size_t PresetCollection::update_compatible_internal(const PresetWithVendorProfil const PresetWithVendorProfile this_preset_with_vendor_profile = this->get_preset_with_vendor_profile(preset_edited); bool was_compatible = preset_edited.is_compatible; preset_edited.is_compatible = is_compatible_with_printer(this_preset_with_vendor_profile, active_printer, &config); + some_compatible |= preset_edited.is_compatible; if (active_print != nullptr) preset_edited.is_compatible &= is_compatible_with_print(this_preset_with_vendor_profile, *active_print, active_printer); if (! preset_edited.is_compatible && selected && @@ -1076,6 +1090,10 @@ size_t PresetCollection::update_compatible_internal(const PresetWithVendorProfil if (selected) preset_selected.is_compatible = preset_edited.is_compatible; } + // Update visibility of the default profiles here if the defaults are suppressed, the current profile is not compatible and we don't want to select another compatible profile. + if (m_idx_selected >= m_num_default_presets && m_default_suppressed) + for (size_t i = 0; i < m_num_default_presets; ++ i) + m_presets[i].is_visible = ! some_compatible; return m_idx_selected; } diff --git a/src/slic3r/GUI/Preset.hpp b/src/slic3r/GUI/Preset.hpp index 46008eadb4..1116070b26 100644 --- a/src/slic3r/GUI/Preset.hpp +++ b/src/slic3r/GUI/Preset.hpp @@ -312,7 +312,7 @@ public: // Save the preset under a new name. If the name is different from the old one, // a new preset is stored into the list of presets. // All presets are marked as not modified and the new preset is activated. - void save_current_preset(const std::string &new_name); + void save_current_preset(const std::string &new_name, bool detach = false); // Delete the current preset, activate the first visible preset. // returns true if the preset was deleted successfully. diff --git a/src/slic3r/GUI/PresetBundle.cpp b/src/slic3r/GUI/PresetBundle.cpp index 5c9dc2ec9a..2b5c062e63 100644 --- a/src/slic3r/GUI/PresetBundle.cpp +++ b/src/slic3r/GUI/PresetBundle.cpp @@ -703,7 +703,10 @@ void PresetBundle::load_config_file(const std::string &path) boost::nowide::ifstream ifs(path); boost::property_tree::read_ini(ifs, tree); } catch (const std::ifstream::failure &err) { - throw std::runtime_error(std::string("The config file cannot be loaded: ") + path + "\n\tReason: " + err.what()); + throw std::runtime_error(std::string("The Config Bundle cannot be loaded: ") + path + "\n\tReason: " + err.what()); + } catch (const boost::property_tree::file_parser_error &err) { + throw std::runtime_error((boost::format("Failed loading the Config Bundle \"%1%\": %2% at line %3%") + % err.filename() % err.message() % err.line()).str()); } catch (const std::runtime_error &err) { throw std::runtime_error(std::string("Failed loading the preset file: ") + path + "\n\tReason: " + err.what()); } @@ -1109,8 +1112,13 @@ size_t PresetBundle::load_configbundle(const std::string &path, unsigned int fla const VendorProfile *vendor_profile = nullptr; if (flags & (LOAD_CFGBNDLE_SYSTEM | LOAD_CFGBUNDLE_VENDOR_ONLY)) { auto vp = VendorProfile::from_ini(tree, path); - if (vp.num_variants() == 0) + if (vp.models.size() == 0) { + BOOST_LOG_TRIVIAL(error) << boost::format("Vendor bundle: `%1%`: No printer model defined.") % path; return 0; + } else if (vp.num_variants() == 0) { + BOOST_LOG_TRIVIAL(error) << boost::format("Vendor bundle: `%1%`: No printer variant defined") % path; + return 0; + } vendor_profile = &this->vendors.insert({vp.id, vp}).first->second; } @@ -1599,21 +1607,23 @@ void PresetBundle::update_plater_filament_ui(unsigned int idx_extruder, GUI::Pre // To avoid asserts, each added bitmap to wxBitmapCombobox should be the same size, so // set a bitmap height to m_bitmapLock->GetHeight() - // Note, under OSX we should use a ScaledHeight because of Retina scale + // + // To avoid asserts, each added bitmap to wxBitmapCombobox should be the same size. + // But for some display scaling (for example 125% or 175%) normal_icon_width differs from icon width. + // So: + // for nonsystem presets set a width of empty bitmap to m_bitmapLock->GetWidth() + // for compatible presets set a width of empty bitmap to m_bitmapIncompatible->GetWidth() + // + // Note, under OSX we should use a Scaled Height/Width because of Retina scale #ifdef __APPLE__ const int icon_height = m_bitmapLock->GetScaledHeight(); + const int lock_icon_width = m_bitmapLock->GetScaledWidth(); + const int flag_icon_width = m_bitmapIncompatible->GetScaledWidth(); #else const int icon_height = m_bitmapLock->GetHeight(); -#endif - - /* To avoid asserts, each added bitmap to wxBitmapCombobox should be the same size. - * But for some display scaling (for example 125% or 175%) normal_icon_width differs from icon width. - * So: - * for nonsystem presets set a width of empty bitmap to m_bitmapLock->GetWidth() - * for compatible presets set a width of empty bitmap to m_bitmapIncompatible->GetWidth() - **/ const int lock_icon_width = m_bitmapLock->GetWidth(); const int flag_icon_width = m_bitmapIncompatible->GetWidth(); +#endif wxString tooltip = ""; diff --git a/src/slic3r/GUI/RemovableDriveManager.cpp b/src/slic3r/GUI/RemovableDriveManager.cpp index aa7a3d6a31..0c4c417b25 100644 --- a/src/slic3r/GUI/RemovableDriveManager.cpp +++ b/src/slic3r/GUI/RemovableDriveManager.cpp @@ -1,6 +1,8 @@ #include "RemovableDriveManager.hpp" -#include -#include "boost/nowide/convert.hpp" +#include + +#include +#include #if _WIN32 #include @@ -9,11 +11,9 @@ #include #include -GUID WceusbshGUID = { 0x25dbce51, 0x6c8f, 0x4a72, - 0x8a,0x6d,0xb5,0x4c,0x2b,0x4f,0xc8,0x35 }; #else -//linux includes +// unix, linux & OSX includes #include #include #include @@ -26,124 +26,173 @@ GUID WceusbshGUID = { 0x25dbce51, 0x6c8f, 0x4a72, namespace Slic3r { namespace GUI { +wxDEFINE_EVENT(EVT_REMOVABLE_DRIVE_EJECTED, RemovableDriveEjectEvent); +wxDEFINE_EVENT(EVT_REMOVABLE_DRIVES_CHANGED, RemovableDrivesChangedEvent); + #if _WIN32 -/* currently not used, left for possible future use -INT_PTR WINAPI WinProcCallback(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); -*/ -void RemovableDriveManager::search_for_drives() +std::vector RemovableDriveManager::search_for_removable_drives() const { - m_current_drives.clear(); //get logical drives flags by letter in alphabetical order - DWORD drives_mask = GetLogicalDrives(); - for (size_t i = 0; i < 26; i++) - { - if(drives_mask & (1 << i)) - { - std::string path (1,(char)('A' + i)); - path+=":"; - UINT drive_type = GetDriveTypeA(path.c_str()); + DWORD drives_mask = ::GetLogicalDrives(); + + // Allocate the buffers before the loop. + std::wstring volume_name; + std::wstring file_system_name; + // Iterate the Windows drives from 'A' to 'Z' + std::vector current_drives; + for (size_t i = 0; i < 26; ++ i) + if (drives_mask & (1 << i)) { + std::string path { char('A' + i), ':' }; + UINT drive_type = ::GetDriveTypeA(path.c_str()); // DRIVE_REMOVABLE on W are sd cards and usb thumbnails (not usb harddrives) - if (drive_type == DRIVE_REMOVABLE) - { + if (drive_type == DRIVE_REMOVABLE) { // get name of drive std::wstring wpath = boost::nowide::widen(path); - std::wstring volume_name; - volume_name.resize(1024); - std::wstring file_system_name; - file_system_name.resize(1024); - LPWSTR lp_volume_name_buffer = new wchar_t; - BOOL error = GetVolumeInformationW(wpath.c_str(), &volume_name[0], sizeof(volume_name), NULL, NULL, NULL, &file_system_name[0], sizeof(file_system_name)); - if(error != 0) - { - volume_name.erase(std::find(volume_name.begin(), volume_name.end(), '\0'), volume_name.end()); - if (file_system_name != L"") - { + volume_name.resize(MAX_PATH + 1); + file_system_name.resize(MAX_PATH + 1); + BOOL error = ::GetVolumeInformationW(wpath.c_str(), volume_name.data(), sizeof(volume_name), nullptr, nullptr, nullptr, file_system_name.data(), sizeof(file_system_name)); + if (error != 0) { + volume_name.erase(volume_name.begin() + wcslen(volume_name.c_str()), volume_name.end()); + if (! file_system_name.empty()) { ULARGE_INTEGER free_space; - GetDiskFreeSpaceExA(path.c_str(), &free_space, NULL, NULL); - if (free_space.QuadPart > 0) - { + ::GetDiskFreeSpaceExA(path.c_str(), &free_space, nullptr, nullptr); + if (free_space.QuadPart > 0) { path += "\\"; - m_current_drives.push_back(DriveData(boost::nowide::narrow(volume_name), path)); + current_drives.emplace_back(DriveData{ boost::nowide::narrow(volume_name), path }); } } } } } + return current_drives; +} + +// Called from UI therefore it blocks the UI thread. +// It also blocks updates at the worker thread. +// Win32 implementation. +void RemovableDriveManager::eject_drive() +{ + if (m_last_save_path.empty()) + return; + +#ifndef REMOVABLE_DRIVE_MANAGER_OS_CALLBACKS + this->update(); +#endif // REMOVABLE_DRIVE_MANAGER_OS_CALLBACKS + + tbb::mutex::scoped_lock lock(m_drives_mutex); + auto it_drive_data = this->find_last_save_path_drive_data(); + if (it_drive_data != m_current_drives.end()) { + // get handle to device + std::string mpath = "\\\\.\\" + m_last_save_path; + mpath = mpath.substr(0, mpath.size() - 1); + HANDLE handle = CreateFileA(mpath.c_str(), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, 0, nullptr); + if (handle == INVALID_HANDLE_VALUE) { + std::cerr << "Ejecting " << mpath << " failed " << GetLastError() << " \n"; + return; + } + DWORD deviceControlRetVal(0); + //these 3 commands should eject device safely but they dont, the device does disappear from file explorer but the "device was safely remove" notification doesnt trigger. + //sd cards does trigger WM_DEVICECHANGE messege, usb drives dont + DeviceIoControl(handle, FSCTL_LOCK_VOLUME, nullptr, 0, nullptr, 0, &deviceControlRetVal, nullptr); + DeviceIoControl(handle, FSCTL_DISMOUNT_VOLUME, nullptr, 0, nullptr, 0, &deviceControlRetVal, nullptr); + // some implemenatations also calls IOCTL_STORAGE_MEDIA_REMOVAL here but it returns error to me + BOOL error = DeviceIoControl(handle, IOCTL_STORAGE_EJECT_MEDIA, nullptr, 0, nullptr, 0, &deviceControlRetVal, nullptr); + if (error == 0) { + CloseHandle(handle); + BOOST_LOG_TRIVIAL(error) << "Ejecting " << mpath << " failed " << deviceControlRetVal << " " << GetLastError() << " \n"; + return; + } + CloseHandle(handle); + assert(m_callback_evt_handler); + if (m_callback_evt_handler) + wxPostEvent(m_callback_evt_handler, RemovableDriveEjectEvent(EVT_REMOVABLE_DRIVE_EJECTED, std::move(*it_drive_data))); + m_current_drives.erase(it_drive_data); } } -void RemovableDriveManager::eject_drive(const std::string &path) + +std::string RemovableDriveManager::get_removable_drive_path(const std::string &path) { - if(m_current_drives.empty()) - return; - for (auto it = m_current_drives.begin(); it != m_current_drives.end(); ++it) +#ifndef REMOVABLE_DRIVE_MANAGER_OS_CALLBACKS + this->update(); +#endif // REMOVABLE_DRIVE_MANAGER_OS_CALLBACKS + + tbb::mutex::scoped_lock lock(m_drives_mutex); + if (m_current_drives.empty()) + return std::string(); + std::size_t found = path.find_last_of("\\"); + std::string new_path = path.substr(0, found); + int letter = PathGetDriveNumberA(new_path.c_str()); + for (const DriveData &drive_data : m_current_drives) { + char drive = drive_data.path[0]; + if (drive == 'A' + letter) + return path; + } + return m_current_drives.front().path; +} + +std::string RemovableDriveManager::get_removable_drive_from_path(const std::string& path) +{ + tbb::mutex::scoped_lock lock(m_drives_mutex); + std::size_t found = path.find_last_of("\\"); + std::string new_path = path.substr(0, found); + int letter = PathGetDriveNumberA(new_path.c_str()); + for (const DriveData &drive_data : m_current_drives) { + assert(! drive_data.path.empty()); + if (drive_data.path.front() == 'A' + letter) + return drive_data.path; + } + return std::string(); +} + +#if 0 +// currently not used, left for possible future use +INT_PTR WINAPI WinProcCallback(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) +{ + // here we need to catch messeges about device removal + // problem is that when ejecting usb (how is it implemented above) there is no messege dispached. Only after physical removal of the device. + //uncomment register_window() in init() to register and comment update() in GUI_App.cpp (only for windows!) to stop recieving periodical updates + + LRESULT lRet = 1; + static HDEVNOTIFY hDeviceNotify; + static constexpr GUID WceusbshGUID = { 0x25dbce51, 0x6c8f, 0x4a72, 0x8a,0x6d,0xb5,0x4c,0x2b,0x4f,0xc8,0x35 }; + + switch (message) { - if ((*it).path == path) + case WM_CREATE: + DEV_BROADCAST_DEVICEINTERFACE NotificationFilter; + + ZeroMemory(&NotificationFilter, sizeof(NotificationFilter)); + NotificationFilter.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE); + NotificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE; + NotificationFilter.dbcc_classguid = WceusbshGUID; + + hDeviceNotify = RegisterDeviceNotification(hWnd, &NotificationFilter, DEVICE_NOTIFY_WINDOW_HANDLE); + break; + + case WM_DEVICECHANGE: + { + // here is the important + if(wParam == DBT_DEVICEREMOVECOMPLETE) { - // get handle to device - std::string mpath = "\\\\.\\" + path; - mpath = mpath.substr(0, mpath.size() - 1); - HANDLE handle = CreateFileA(mpath.c_str(), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, 0, nullptr); - if (handle == INVALID_HANDLE_VALUE) - { - std::cerr << "Ejecting " << mpath << " failed " << GetLastError() << " \n"; - return; - } - DWORD deviceControlRetVal(0); - //these 3 commands should eject device safely but they dont, the device does disappear from file explorer but the "device was safely remove" notification doesnt trigger. - //sd cards does trigger WM_DEVICECHANGE messege, usb drives dont - - DeviceIoControl(handle, FSCTL_LOCK_VOLUME, nullptr, 0, nullptr, 0, &deviceControlRetVal, nullptr); - DeviceIoControl(handle, FSCTL_DISMOUNT_VOLUME, nullptr, 0, nullptr, 0, &deviceControlRetVal, nullptr); - // some implemenatations also calls IOCTL_STORAGE_MEDIA_REMOVAL here but it returns error to me - BOOL error = DeviceIoControl(handle, IOCTL_STORAGE_EJECT_MEDIA, nullptr, 0, nullptr, 0, &deviceControlRetVal, nullptr); - if (error == 0) - { - CloseHandle(handle); - std::cerr << "Ejecting " << mpath << " failed " << deviceControlRetVal << " " << GetLastError() << " \n"; - return; - } - CloseHandle(handle); - m_did_eject = true; - m_current_drives.erase(it); - m_ejected_path = m_last_save_path; - m_ejected_name = m_last_save_name; - break; + RemovableDriveManager::get_instance().update(0, true); } } -} -bool RemovableDriveManager::is_path_on_removable_drive(const std::string &path) -{ - if (m_current_drives.empty()) - return false; - std::size_t found = path.find_last_of("\\"); - std::string new_path = path.substr(0, found); - int letter = PathGetDriveNumberA(new_path.c_str()); - for (auto it = m_current_drives.begin(); it != m_current_drives.end(); ++it) - { - char drive = (*it).path[0]; - if (drive == ('A' + letter)) - return true; + break; + + default: + // Send all other messages on to the default windows handler. + lRet = DefWindowProc(hWnd, message, wParam, lParam); + break; } - return false; -} -std::string RemovableDriveManager::get_drive_from_path(const std::string& path) -{ - std::size_t found = path.find_last_of("\\"); - std::string new_path = path.substr(0, found); - int letter = PathGetDriveNumberA(new_path.c_str()); - for (auto it = m_current_drives.begin(); it != m_current_drives.end(); ++it) - { - char drive = (*it).path[0]; - if (drive == ('A' + letter)) - return (*it).path; - } - return ""; + return lRet; + } + void RemovableDriveManager::register_window() { //creates new unvisible window that is recieving callbacks from system // structure to register - /* currently not used, left for possible future use + // currently not used, left for possible future use WNDCLASSEX wndClass; wndClass.cbSize = sizeof(WNDCLASSEX); wndClass.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW; @@ -179,432 +228,288 @@ void RemovableDriveManager::register_window() } //ShowWindow(hWnd, SW_SHOWNORMAL); UpdateWindow(hWnd); - */ } -/* currently not used, left for possible future use -INT_PTR WINAPI WinProcCallback(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) +#endif + +#else + +namespace search_for_drives_internal { - // here we need to catch messeges about device removal - // problem is that when ejecting usb (how is it implemented above) there is no messege dispached. Only after physical removal of the device. - //uncomment register_window() in init() to register and comment update() in GUI_App.cpp (only for windows!) to stop recieving periodical updates - - LRESULT lRet = 1; - static HDEVNOTIFY hDeviceNotify; - - switch (message) + static bool compare_filesystem_id(const std::string &path_a, const std::string &path_b) { - case WM_CREATE: - DEV_BROADCAST_DEVICEINTERFACE NotificationFilter; + struct stat buf; + stat(path_a.c_str() ,&buf); + dev_t id_a = buf.st_dev; + stat(path_b.c_str() ,&buf); + dev_t id_b = buf.st_dev; + return id_a == id_b; + } - ZeroMemory(&NotificationFilter, sizeof(NotificationFilter)); - NotificationFilter.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE); - NotificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE; - NotificationFilter.dbcc_classguid = WceusbshGUID; - - hDeviceNotify = RegisterDeviceNotification(hWnd, &NotificationFilter, DEVICE_NOTIFY_WINDOW_HANDLE); - break; - - case WM_DEVICECHANGE: + void inspect_file(const std::string &path, const std::string &parent_path, std::vector &out) { - // here is the important - if(wParam == DBT_DEVICEREMOVECOMPLETE) - { -- RemovableDriveManager::get_instance().update(0, true); + //confirms if the file is removable drive and adds it to vector + + //if not same file system - could be removable drive + if (! compare_filesystem_id(path, parent_path)) { + //free space + boost::filesystem::space_info si = boost::filesystem::space(path); + if (si.available != 0) { + //user id + struct stat buf; + stat(path.c_str(), &buf); + uid_t uid = buf.st_uid; + std::string username(std::getenv("USER")); + struct passwd *pw = getpwuid(uid); + if (pw != 0 && pw->pw_name == username) + out.emplace_back(DriveData{ boost::filesystem::basename(boost::filesystem::path(path)), path }); + } } } - break; - - default: - // Send all other messages on to the default windows handler. - lRet = DefWindowProc(hWnd, message, wParam, lParam); - break; - } - return lRet; - -} -*/ -#else -void RemovableDriveManager::search_for_drives() -{ - - m_current_drives.clear(); - -#if __APPLE__ - // if on macos obj-c class will enumerate - if(m_rdmmm) - { - m_rdmmm->list_devices(); - } -#else + static void search_path(const std::string &path, const std::string &parent_path, std::vector &out) + { + glob_t globbuf; + globbuf.gl_offs = 2; + int error = glob(path.c_str(), GLOB_TILDE, NULL, &globbuf); + if (error == 0) { + for (size_t i = 0; i < globbuf.gl_pathc; ++ i) + inspect_file(globbuf.gl_pathv[i], parent_path, out); + } else { + //if error - path probably doesnt exists so function just exits + //std::cout<<"glob error "<< error<< "\n"; + } + globfree(&globbuf); + } +} + +std::vector RemovableDriveManager::search_for_removable_drives() const +{ + std::vector current_drives; + +#if __APPLE__ + + this->list_devices(current_drives); + +#else //search /media/* folder - search_path("/media/*", "/media"); + search_for_drives_internal::search_path("/media/*", "/media", current_drives); //search_path("/Volumes/*", "/Volumes"); std::string path(std::getenv("USER")); std::string pp(path); - { - //search /media/USERNAME/* folder - pp = "/media/"+pp; - path = "/media/" + path + "/*"; - search_path(path, pp); + //search /media/USERNAME/* folder + pp = "/media/"+pp; + path = "/media/" + path + "/*"; + search_for_drives_internal::search_path(path, pp, current_drives); - //search /run/media/USERNAME/* folder - path = "/run" + path; - pp = "/run"+pp; - search_path(path, pp); - - } + //search /run/media/USERNAME/* folder + path = "/run" + path; + pp = "/run"+pp; + search_for_drives_internal::search_path(path, pp, current_drives); #endif -} -void RemovableDriveManager::search_path(const std::string &path,const std::string &parent_path) -{ - glob_t globbuf; - globbuf.gl_offs = 2; - int error = glob(path.c_str(), GLOB_TILDE, NULL, &globbuf); - if(error == 0) - { - for(size_t i = 0; i < globbuf.gl_pathc; i++) - { - inspect_file(globbuf.gl_pathv[i], parent_path); - } - }else - { - //if error - path probably doesnt exists so function just exits - //std::cout<<"glob error "<< error<< "\n"; - } - - globfree(&globbuf); -} -void RemovableDriveManager::inspect_file(const std::string &path, const std::string &parent_path) -{ - //confirms if the file is removable drive and adds it to vector - //if not same file system - could be removable drive - if(!compare_filesystem_id(path, parent_path)) - { - //free space - boost::filesystem::space_info si = boost::filesystem::space(path); - if(si.available != 0) - { - //user id - struct stat buf; - stat(path.c_str(), &buf); - uid_t uid = buf.st_uid; - std::string username(std::getenv("USER")); - struct passwd *pw = getpwuid(uid); - if (pw != 0 && pw->pw_name == username) - m_current_drives.push_back(DriveData(boost::filesystem::basename(boost::filesystem::path(path)), path)); - } - - } + return current_drives; } -bool RemovableDriveManager::compare_filesystem_id(const std::string &path_a, const std::string &path_b) + +// Called from UI therefore it blocks the UI thread. +// It also blocks updates at the worker thread. +// Unix & OSX implementation. +void RemovableDriveManager::eject_drive() { - struct stat buf; - stat(path_a.c_str() ,&buf); - dev_t id_a = buf.st_dev; - stat(path_b.c_str() ,&buf); - dev_t id_b = buf.st_dev; - return id_a == id_b; -} -void RemovableDriveManager::eject_drive(const std::string &path) -{ - if (m_current_drives.empty()) + if (m_last_save_path.empty()) return; - for (auto it = m_current_drives.begin(); it != m_current_drives.end(); ++it) - { - if((*it).path == path) - { - - std::string correct_path(path); - for (size_t i = 0; i < correct_path.size(); ++i) - { - if(correct_path[i]==' ') - { - correct_path = correct_path.insert(i,1,'\\'); - i++; - } - } - //std::cout<<"Ejecting "<<(*it).name<<" from "<< correct_path<<"\n"; -// there is no usable command in c++ so terminal command is used instead -// but neither triggers "succesful safe removal messege" - std::string command = ""; -#if __APPLE__ - //m_rdmmm->eject_device(path); - command = "diskutil unmount "; -#else - command = "umount "; -#endif - command += correct_path; - int err = system(command.c_str()); - if(err) - { - std::cerr<<"Ejecting failed\n"; - return; - } +#ifndef REMOVABLE_DRIVE_MANAGER_OS_CALLBACKS + this->update(); +#endif // REMOVABLE_DRIVE_MANAGER_OS_CALLBACKS - m_did_eject = true; - m_current_drives.erase(it); - m_ejected_path = m_last_save_path; - m_ejected_name = m_last_save_name; - break; + tbb::mutex::scoped_lock lock(m_drives_mutex); + auto it_drive_data = this->find_last_save_path_drive_data(); + if (it_drive_data != m_current_drives.end()) { + std::string correct_path(m_last_save_path); + for (size_t i = 0; i < correct_path.size(); ++i) + if (correct_path[i]==' ') { + correct_path = correct_path.insert(i,1,'\\'); + ++ i; + } + //std::cout<<"Ejecting "<<(*it).name<<" from "<< correct_path<<"\n"; + // there is no usable command in c++ so terminal command is used instead + // but neither triggers "succesful safe removal messege" + std::string command = +#if __APPLE__ + //this->eject_device(m_last_save_path); + "diskutil unmount "; +#else + "umount "; +#endif + command += correct_path; + int err = system(command.c_str()); + if (err) { + BOOST_LOG_TRIVIAL(error) << "Ejecting " << m_last_save_path << " failed"; + return; } + assert(m_callback_evt_handler); + if (m_callback_evt_handler) + wxPostEvent(m_callback_evt_handler, RemovableDriveEjectEvent(EVT_REMOVABLE_DRIVE_EJECTED, std::move(*it_drive_data))); + m_current_drives.erase(it_drive_data); } +} -} -bool RemovableDriveManager::is_path_on_removable_drive(const std::string &path) +std::string RemovableDriveManager::get_removable_drive_path(const std::string &path) { - if (m_current_drives.empty()) - return false; +#ifndef REMOVABLE_DRIVE_MANAGER_OS_CALLBACKS + this->update(); +#endif // REMOVABLE_DRIVE_MANAGER_OS_CALLBACKS + std::size_t found = path.find_last_of("/"); std::string new_path = found == path.size() - 1 ? path.substr(0, found) : path; - for (auto it = m_current_drives.begin(); it != m_current_drives.end(); ++it) - { - if(compare_filesystem_id(new_path, (*it).path)) - return true; - } - return false; + + tbb::mutex::scoped_lock lock(m_drives_mutex); + for (const DriveData &data : m_current_drives) + if (search_for_drives_internal::compare_filesystem_id(new_path, data.path)) + return path; + return m_current_drives.empty() ? std::string() : m_current_drives.front().path; } -std::string RemovableDriveManager::get_drive_from_path(const std::string& path) + +std::string RemovableDriveManager::get_removable_drive_from_path(const std::string& path) { std::size_t found = path.find_last_of("/"); std::string new_path = found == path.size() - 1 ? path.substr(0, found) : path; - // trim the filename found = new_path.find_last_of("/"); new_path = new_path.substr(0, found); - //check if same filesystem - for (auto it = m_current_drives.begin(); it != m_current_drives.end(); ++it) - { - if (compare_filesystem_id(new_path, (*it).path)) - return (*it).path; - } - return ""; + // check if same filesystem + tbb::mutex::scoped_lock lock(m_drives_mutex); + for (const DriveData &drive_data : m_current_drives) + if (search_for_drives_internal::compare_filesystem_id(new_path, drive_data.path)) + return drive_data.path; + return std::string(); } #endif -RemovableDriveManager::RemovableDriveManager(): - m_drives_count(0), - m_last_update(0), - m_last_save_path(""), - m_last_save_name(""), - m_last_save_path_verified(false), - m_is_writing(false), - m_did_eject(false), - m_plater_ready_to_slice(true), - m_ejected_path(""), - m_ejected_name("") -#if __APPLE__ - , m_rdmmm(new RDMMMWrapper()) -#endif -{} -RemovableDriveManager::~RemovableDriveManager() +void RemovableDriveManager::init(wxEvtHandler *callback_evt_handler) { -#if __APPLE__ - delete m_rdmmm; -#endif -} -void RemovableDriveManager::init() -{ - //add_callback([](void) { RemovableDriveManager::get_instance().print(); }); + assert(! m_initialized); + assert(m_callback_evt_handler == nullptr); + + if (m_initialized) + return; + + m_initialized = true; + m_callback_evt_handler = callback_evt_handler; + #if _WIN32 - //register_window(); + //this->register_window_msw(); #elif __APPLE__ - m_rdmmm->register_window(); + this->register_window_osx(); #endif - update(0, true); -} -bool RemovableDriveManager::update(const long time,const bool check) -{ - if(time != 0) //time = 0 is forced update - { - long diff = m_last_update - time; - if(diff <= -2) - { - m_last_update = time; - }else - { - return false; // return value shouldnt matter if update didnt run - } - } - search_for_drives(); - if (m_drives_count != m_current_drives.size()) - { - if (check) - { - check_and_notify(); - } - m_drives_count = m_current_drives.size(); - } - return !m_current_drives.empty(); + +#ifdef REMOVABLE_DRIVE_MANAGER_OS_CALLBACKS + this->update(); +#else // REMOVABLE_DRIVE_MANAGER_OS_CALLBACKS + // Don't call update() manually, as the UI triggered APIs call this->update() anyways. + m_thread = boost::thread((boost::bind(&RemovableDriveManager::thread_proc, this))); +#endif // REMOVABLE_DRIVE_MANAGER_OS_CALLBACKS } -bool RemovableDriveManager::is_drive_mounted(const std::string &path) const +void RemovableDriveManager::shutdown() { - for (auto it = m_current_drives.begin(); it != m_current_drives.end(); ++it) - { - if ((*it).path == path) +#ifndef REMOVABLE_DRIVE_MANAGER_OS_CALLBACKS + if (m_thread.joinable()) { + // Stop the worker thread, if running. { - return true; + // Notify the worker thread to cancel wait on detection polling. + std::lock_guard lck(m_thread_stop_mutex); + m_stop = true; } + m_thread_stop_condition.notify_all(); + // Wait for the worker thread to stop. + m_thread.join(); + m_stop = false; } - return false; +#endif // REMOVABLE_DRIVE_MANAGER_OS_CALLBACKS + +#if _WIN32 + //this->unregister_window_msw(); +#elif __APPLE__ + this->unregister_window_osx(); +#endif + + m_initialized = false; + m_callback_evt_handler = nullptr; } -std::string RemovableDriveManager::get_drive_path() + +bool RemovableDriveManager::set_and_verify_last_save_path(const std::string &path) { - if (m_current_drives.size() == 0) +#ifndef REMOVABLE_DRIVE_MANAGER_OS_CALLBACKS + this->update(); +#endif // REMOVABLE_DRIVE_MANAGER_OS_CALLBACKS + + m_last_save_path = this->get_removable_drive_from_path(path); + return ! m_last_save_path.empty(); +} + +RemovableDriveManager::RemovableDrivesStatus RemovableDriveManager::status() +{ +#ifndef REMOVABLE_DRIVE_MANAGER_OS_CALLBACKS + this->update(); +#endif // REMOVABLE_DRIVE_MANAGER_OS_CALLBACKS + + RemovableDriveManager::RemovableDrivesStatus out; { - reset_last_save_path(); - return ""; + tbb::mutex::scoped_lock lock(m_drives_mutex); + out.has_eject = this->find_last_save_path_drive_data() != m_current_drives.end(); + out.has_removable_drives = ! m_current_drives.empty(); } - if (m_last_save_path_verified) - return m_last_save_path; - return m_current_drives.back().path; + if (! out.has_eject) + m_last_save_path.clear(); + return out; } -std::string RemovableDriveManager::get_last_save_path() const + +// Update is called from thread_proc() and from most of the public methods on demand. +void RemovableDriveManager::update() { - if (!m_last_save_path_verified) - return ""; - return m_last_save_path; -} -std::string RemovableDriveManager::get_last_save_name() const -{ - return m_last_save_name; -} -std::vector RemovableDriveManager::get_all_drives() const -{ - return m_current_drives; -} -void RemovableDriveManager::check_and_notify() -{ - if(m_drive_count_changed_callback) - { - m_drive_count_changed_callback(m_plater_ready_to_slice); + std::vector current_drives = this->search_for_removable_drives(); + + // Post update events. + tbb::mutex::scoped_lock lock(m_drives_mutex); + std::sort(current_drives.begin(), current_drives.end()); + if (current_drives != m_current_drives) { + assert(m_callback_evt_handler); + if (m_callback_evt_handler) + wxPostEvent(m_callback_evt_handler, RemovableDrivesChangedEvent(EVT_REMOVABLE_DRIVES_CHANGED)); } - if(m_callbacks.size() != 0 && m_drives_count > m_current_drives.size() && !is_drive_mounted(m_last_save_path)) - { - for (auto it = m_callbacks.begin(); it != m_callbacks.end(); ++it) + m_current_drives = std::move(current_drives); +} + +#ifndef REMOVABLE_DRIVE_MANAGER_OS_CALLBACKS +void RemovableDriveManager::thread_proc() +{ + for (;;) { + // Wait for 2 seconds before running the disk enumeration. + // Cancellable. { - (*it)(); + std::unique_lock lck(m_thread_stop_mutex); + m_thread_stop_condition.wait_for(lck, std::chrono::seconds(2), [this]{ return m_stop; }); } + if (m_stop) + // Stop the worker thread. + break; + // Update m_current drives and send out update events. + this->update(); } } -void RemovableDriveManager::add_remove_callback(std::function callback) +#endif // REMOVABLE_DRIVE_MANAGER_OS_CALLBACKS + +std::vector::const_iterator RemovableDriveManager::find_last_save_path_drive_data() const { - m_callbacks.push_back(callback); + return Slic3r::binary_find_by_predicate(m_current_drives.begin(), m_current_drives.end(), + [this](const DriveData &data){ return data.path < m_last_save_path; }, + [this](const DriveData &data){ return data.path == m_last_save_path; }); } -void RemovableDriveManager::erase_callbacks() -{ - m_callbacks.clear(); -} -void RemovableDriveManager::set_drive_count_changed_callback(std::function callback) -{ - m_drive_count_changed_callback = callback; -} -void RemovableDriveManager::set_plater_ready_to_slice(bool b) -{ - m_plater_ready_to_slice = b; -} -void RemovableDriveManager::set_last_save_path(const std::string& path) -{ - if(m_last_save_path_verified)// if old path is on drive - { - if(get_drive_from_path(path) != "") //and new is too, rewrite the path - { - m_last_save_path_verified = false; - m_last_save_path = path; - }//else do nothing - }else - { - m_last_save_path = path; - } -} -void RemovableDriveManager::verify_last_save_path() -{ - std::string last_drive = get_drive_from_path(m_last_save_path); - if (last_drive != "") - { - m_last_save_path_verified = true; - m_last_save_path = last_drive; - m_last_save_name = get_drive_name(last_drive); - }else - { - reset_last_save_path(); - } -} -std::string RemovableDriveManager::get_drive_name(const std::string& path) const -{ - if (m_current_drives.size() == 0) - return ""; - for (auto it = m_current_drives.begin(); it != m_current_drives.end(); ++it) - { - if ((*it).path == path) - { - return (*it).name; - } - } - return ""; -} -bool RemovableDriveManager::is_last_drive_removed() -{ - if(!m_last_save_path_verified) - { - return true; - } - bool r = !is_drive_mounted(m_last_save_path); - if (r) - { - reset_last_save_path(); - } - return r; -} -bool RemovableDriveManager::is_last_drive_removed_with_update(const long time) -{ - update(time, false); - return is_last_drive_removed(); -} -void RemovableDriveManager::reset_last_save_path() -{ - m_last_save_path_verified = false; - m_last_save_path = ""; - m_last_save_name = ""; -} -void RemovableDriveManager::set_is_writing(const bool b) -{ - m_is_writing = b; - if (b) - { - m_did_eject = false; - } -} -bool RemovableDriveManager::get_is_writing() const -{ - return m_is_writing; -} -bool RemovableDriveManager::get_did_eject() const -{ - return m_did_eject; -} -void RemovableDriveManager::set_did_eject(const bool b) -{ - m_did_eject = b; -} -size_t RemovableDriveManager::get_drives_count() const -{ - return m_current_drives.size(); -} -std::string RemovableDriveManager::get_ejected_path() const -{ - return m_ejected_path; -} -std::string RemovableDriveManager::get_ejected_name() const -{ - return m_ejected_name; -} -}}//namespace Slicer::Gui + +}} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/RemovableDriveManager.hpp b/src/slic3r/GUI/RemovableDriveManager.hpp index 032eef682b..8b661d19c2 100644 --- a/src/slic3r/GUI/RemovableDriveManager.hpp +++ b/src/slic3r/GUI/RemovableDriveManager.hpp @@ -3,119 +3,127 @@ #include #include -#include + +#include +#include +#include + +// Custom wxWidget events +#include "Event.hpp" namespace Slic3r { namespace GUI { -#if __APPLE__ -class RDMMMWrapper; -#endif - + struct DriveData { std::string name; std::string path; - DriveData(std::string n, std::string p):name(n),path(p){} + + void clear() { + name.clear(); + path.clear(); + } + bool empty() const { + return path.empty(); + } }; + +inline bool operator< (const DriveData &lhs, const DriveData &rhs) { return lhs.path < rhs.path; } +inline bool operator> (const DriveData &lhs, const DriveData &rhs) { return lhs.path > rhs.path; } +inline bool operator==(const DriveData &lhs, const DriveData &rhs) { return lhs.path == rhs.path; } + +using RemovableDriveEjectEvent = Event; +wxDECLARE_EVENT(EVT_REMOVABLE_DRIVE_EJECTED, RemovableDriveEjectEvent); + +using RemovableDrivesChangedEvent = SimpleEvent; +wxDECLARE_EVENT(EVT_REMOVABLE_DRIVES_CHANGED, RemovableDrivesChangedEvent); + +#if __APPLE__ + // Callbacks on device plug / unplug work reliably on OSX. + #define REMOVABLE_DRIVE_MANAGER_OS_CALLBACKS +#endif // __APPLE__ + class RemovableDriveManager { -#if __APPLE__ -friend class RDMMMWrapper; -#endif public: - static RemovableDriveManager& get_instance() - { - static RemovableDriveManager instance; - return instance; - } + RemovableDriveManager() = default; RemovableDriveManager(RemovableDriveManager const&) = delete; void operator=(RemovableDriveManager const&) = delete; - ~RemovableDriveManager(); - //call only once. on apple register for unmnount callbacks. on windows register for device notification is prepared but not called (eject usb drive on widnows doesnt trigger the callback, sdc ard does), also enumerates devices for first time so init shoud be called on linux too. - void init(); - //update() searches for removable devices, returns false if empty. /time = 0 is forced update, time expects wxGetLocalTime() - bool update(const long time = 0,const bool check = false); - bool is_drive_mounted(const std::string &path) const; - void eject_drive(const std::string &path); - //returns path to last drive which was used, if none was used, returns device that was enumerated last - std::string get_last_save_path() const; - std::string get_last_save_name() const; - //returns path to last drive which was used, if none was used, returns empty string - std::string get_drive_path(); - std::vector get_all_drives() const; - bool is_path_on_removable_drive(const std::string &path); - // callback will notify only if device with last save path was removed - void add_remove_callback(std::function callback); - // erases all remove callbacks added by add_remove_callback() - void erase_callbacks(); - //drive_count_changed callback is called on every added or removed device - void set_drive_count_changed_callback(std::function callback); - //thi serves to set correct value for drive_count_changed callback - void set_plater_ready_to_slice(bool b); - // marks one of the eveices in vector as last used - void set_last_save_path(const std::string &path); - void verify_last_save_path(); - bool is_last_drive_removed(); - // param as update() - bool is_last_drive_removed_with_update(const long time = 0); - void set_is_writing(const bool b); - bool get_is_writing() const; - bool get_did_eject() const; - void set_did_eject(const bool b); - std::string get_drive_name(const std::string& path) const; - size_t get_drives_count() const; - std::string get_ejected_path() const; - std::string get_ejected_name() const; -private: - RemovableDriveManager(); - void search_for_drives(); - //triggers callbacks if last used drive was removed - void check_and_notify(); - //returns drive path (same as path in DriveData) if exists otherwise empty string "" - std::string get_drive_from_path(const std::string& path); - void reset_last_save_path(); + ~RemovableDriveManager() { assert(! m_initialized); } + + // Start the background thread and register this window as a target for update events. + // Register for OSX notifications. + void init(wxEvtHandler *callback_evt_handler); + // Stop the background thread of the removable drive manager, so that no new updates will be sent out. + // Deregister OSX notifications. + void shutdown(); + + // Returns path to a removable media if it exists, prefering the input path. + std::string get_removable_drive_path(const std::string &path); + bool is_path_on_removable_drive(const std::string &path) { return this->get_removable_drive_path(path) == path; } + + // Verify whether the path provided is on removable media. If so, save the path for further eject and return true, otherwise return false. + bool set_and_verify_last_save_path(const std::string &path); + // Eject drive of a file set by set_and_verify_last_save_path(). + // On Unix / OSX, the function blocks and sends out the EVT_REMOVABLE_DRIVE_EJECTED event on success. + // On Windows, the function does not block, and the eject is detected in the background thread. + void eject_drive(); + + struct RemovableDrivesStatus { + bool has_removable_drives { false }; + bool has_eject { false }; + }; + RemovableDrivesStatus status(); + + // Enumerates current drives and sends out wxWidget events on change or eject. + // Called by each public method, by the background thread and from RemovableDriveManagerMM::on_device_unmount OSX notification handler. + // Not to be called manually. + // Public to be accessible from RemovableDriveManagerMM::on_device_unmount OSX notification handler. + // It would be better to make this method private and friend to RemovableDriveManagerMM, but RemovableDriveManagerMM is an ObjectiveC class. + void update(); + +private: + bool m_initialized { false }; + wxEvtHandler* m_callback_evt_handler { nullptr }; + +#ifndef REMOVABLE_DRIVE_MANAGER_OS_CALLBACKS + // Worker thread, worker thread synchronization and callbacks to the UI thread. + void thread_proc(); + boost::thread m_thread; + std::condition_variable m_thread_stop_condition; + mutable std::mutex m_thread_stop_mutex; + bool m_stop { false }; +#endif // REMOVABLE_DRIVE_MANAGER_OS_CALLBACKS + + // Called from update() to enumerate removable drives. + std::vector search_for_removable_drives() const; + + // m_current_drives is guarded by m_drives_mutex + // sorted ascending by path + std::vector m_current_drives; + mutable tbb::mutex m_drives_mutex; + + // Returns drive path (same as path in DriveData) if exists otherwise empty string. + std::string get_removable_drive_from_path(const std::string& path); + // Returns iterator to a drive in m_current_drives with path equal to m_last_save_path or end(). + std::vector::const_iterator find_last_save_path_drive_data() const; + // Set with set_and_verify_last_save_path() to a removable drive path to be ejected. + std::string m_last_save_path; - std::vector m_current_drives; - std::vector> m_callbacks; - std::function m_drive_count_changed_callback; - size_t m_drives_count; - long m_last_update; - std::string m_last_save_path; - bool m_last_save_path_verified; - std::string m_last_save_name; - bool m_is_writing;//on device - bool m_did_eject; - bool m_plater_ready_to_slice; - std::string m_ejected_path; - std::string m_ejected_name; #if _WIN32 //registers for notifications by creating invisible window - void register_window(); -#else -#if __APPLE__ - RDMMMWrapper * m_rdmmm; - #endif - void search_path(const std::string &path, const std::string &parent_path); - bool compare_filesystem_id(const std::string &path_a, const std::string &path_b); - void inspect_file(const std::string &path, const std::string &parent_path); -#endif -}; -// apple wrapper for RemovableDriveManagerMM which searches for drives and/or ejects them -#if __APPLE__ -class RDMMMWrapper -{ -public: - RDMMMWrapper(); - ~RDMMMWrapper(); - void register_window(); - void list_devices(); + //void register_window_msw(); +#elif __APPLE__ + void register_window_osx(); + void unregister_window_osx(); + void list_devices(std::vector &out) const; + // not used as of now void eject_device(const std::string &path); - void log(const std::string &msg); -protected: - void *m_imp; - //friend void RemovableDriveManager::inspect_file(const std::string &path, const std::string &parent_path); + // Opaque pointer to RemovableDriveManagerMM + void *m_impl_osx; +#endif }; -#endif -}} -#endif +}} + +#endif // slic3r_GUI_RemovableDriveManager_hpp_ diff --git a/src/slic3r/GUI/RemovableDriveManagerMM.mm b/src/slic3r/GUI/RemovableDriveManagerMM.mm index 01d38b1855..c2f55bb790 100644 --- a/src/slic3r/GUI/RemovableDriveManagerMM.mm +++ b/src/slic3r/GUI/RemovableDriveManagerMM.mm @@ -1,5 +1,6 @@ #import "RemovableDriveManager.hpp" #import "RemovableDriveManagerMM.h" +#import "GUI_App.hpp" #import #import @@ -10,22 +11,23 @@ -(instancetype) init { self = [super init]; - if(self) - { - } + //if(self){} return self; } + -(void) on_device_unmount: (NSNotification*) notification { - NSLog(@"on device change"); - Slic3r::GUI::RemovableDriveManager::get_instance().update(0,true); + //NSLog(@"on device change"); + Slic3r::GUI::wxGetApp().removable_drive_manager()->update(); } + -(void) add_unmount_observer { - NSLog(@"add unmount observer"); + //NSLog(@"add unmount observer"); [[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self selector: @selector(on_device_unmount:) name:NSWorkspaceDidUnmountNotification object:nil]; [[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self selector: @selector(on_device_unmount:) name:NSWorkspaceDidMountNotification object:nil]; } + -(NSArray*) list_dev { // DEPRICATED: @@ -40,118 +42,99 @@ DADiskRef disk; DASessionRef session; CFDictionaryRef descDict; - session = DASessionCreate(NULL); - if (session == NULL) { + session = DASessionCreate(nullptr); + if (session == nullptr) err = EINVAL; - } if (err == 0) { - disk = DADiskCreateFromVolumePath(NULL,session,(CFURLRef)volURL); - if (session == NULL) { + disk = DADiskCreateFromVolumePath(nullptr,session,(CFURLRef)volURL); + if (session == nullptr) err = EINVAL; - } } if (err == 0) { descDict = DADiskCopyDescription(disk); - if (descDict == NULL) { + if (descDict == nullptr) err = EINVAL; - } } if (err == 0) { CFTypeRef mediaEjectableKey = CFDictionaryGetValue(descDict,kDADiskDescriptionMediaEjectableKey); BOOL ejectable = [mediaEjectableKey boolValue]; CFTypeRef deviceProtocolName = CFDictionaryGetValue(descDict,kDADiskDescriptionDeviceProtocolKey); CFTypeRef deviceModelKey = CFDictionaryGetValue(descDict, kDADiskDescriptionDeviceModelKey); - if (mediaEjectableKey != NULL) - { + if (mediaEjectableKey != nullptr) { BOOL op = ejectable && (CFEqual(deviceProtocolName, CFSTR("USB")) || CFEqual(deviceModelKey, CFSTR("SD Card Reader"))); //!CFEqual(deviceModelKey, CFSTR("Disk Image")); - // - if (op) { + if (op) [result addObject:volURL.path]; - } } } - if (descDict != NULL) { + if (descDict != nullptr) CFRelease(descDict); - } - - } return result; } + +//this eject drive is not used now -(void)eject_drive:(NSString *)path { DADiskRef disk; DASessionRef session; NSURL *url = [[NSURL alloc] initFileURLWithPath:path]; int err = 0; - session = DASessionCreate(NULL); - if (session == NULL) { + session = DASessionCreate(nullptr); + if (session == nullptr) err = EINVAL; - } - if (err == 0) { - disk = DADiskCreateFromVolumePath(NULL,session,(CFURLRef)url); - } + if (err == 0) + disk = DADiskCreateFromVolumePath(nullptr,session,(CFURLRef)url); if( err == 0) - { - DADiskUnmount(disk, kDADiskUnmountOptionDefault, - NULL, NULL); - } - if (disk != NULL) { + DADiskUnmount(disk, kDADiskUnmountOptionDefault, nullptr, nullptr); + if (disk != nullptr) CFRelease(disk); - } - if (session != NULL) { + if (session != nullptr) CFRelease(session); - } } -namespace Slic3r { -namespace GUI { -RDMMMWrapper::RDMMMWrapper():m_imp(nullptr){ - m_imp = [[RemovableDriveManagerMM alloc] init]; -} -RDMMMWrapper::~RDMMMWrapper() -{ - if(m_imp) - { - [m_imp release]; - } -} -void RDMMMWrapper::register_window() -{ - if(m_imp) - { - [m_imp add_unmount_observer]; - } -} -void RDMMMWrapper::list_devices() -{ - if(m_imp) - { - NSArray* devices = [m_imp list_dev]; - for (NSString* volumePath in devices) - { - NSLog(@"%@", volumePath); - Slic3r::GUI::RemovableDriveManager::get_instance().inspect_file(std::string([volumePath UTF8String]), "/Volumes"); - } - } -} -void RDMMMWrapper::log(const std::string &msg) -{ - NSLog(@"%s", msg.c_str()); -} -void RDMMMWrapper::eject_device(const std::string &path) -{ - if(m_imp) - { - NSString * pth = [NSString stringWithCString:path.c_str() - encoding:[NSString defaultCStringEncoding]]; - [m_imp eject_drive:pth]; - } -} -}}//namespace Slicer::GUI - -/* - -*/ @end + +namespace Slic3r { +namespace GUI { + +void RemovableDriveManager::register_window_osx() +{ + assert(m_impl_osx == nullptr); + m_impl_osx = [[RemovableDriveManagerMM alloc] init]; + if (m_impl_osx) + [m_impl_osx add_unmount_observer]; +} + +void RemovableDriveManager::unregister_window_osx() +{ + if (m_impl_osx) + [m_impl_osx release]; +} + +namespace search_for_drives_internal +{ + void inspect_file(const std::string &path, const std::string &parent_path, std::vector &out); +} + +void RemovableDriveManager::list_devices(std::vector &out) const +{ + assert(m_impl_osx != nullptr); + if (m_impl_osx) { + NSArray* devices = [m_impl_osx list_dev]; + for (NSString* volumePath in devices) + search_for_drives_internal::inspect_file(std::string([volumePath UTF8String]), "/Volumes", out); + } +} + +// not used as of now +void RemovableDriveManager::eject_device(const std::string &path) +{ + assert(m_impl_osx != nullptr); + if (m_impl_osx) { + NSString * pth = [NSString stringWithCString:path.c_str() encoding:[NSString defaultCStringEncoding]]; + [m_impl_osx eject_drive:pth]; + } +} + +}}//namespace Slicer::GUI diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index c8022432ce..9e49dc5bdb 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -359,9 +359,10 @@ void Tab::update_labels_colour() color = &m_modified_label_clr; } if (opt.first == "bed_shape" || opt.first == "compatible_prints" || opt.first == "compatible_printers") { - if (m_colored_Label != nullptr) { - m_colored_Label->SetForegroundColour(*color); - m_colored_Label->Refresh(true); + wxStaticText* label = (m_colored_Labels.find(opt.first) == m_colored_Labels.end()) ? nullptr : m_colored_Labels.at(opt.first); + if (label) { + label->SetForegroundColour(*color); + label->Refresh(true); } continue; } @@ -449,9 +450,10 @@ void Tab::update_changed_ui() tt = &m_tt_white_bullet; } if (opt.first == "bed_shape" || opt.first == "compatible_prints" || opt.first == "compatible_printers") { - if (m_colored_Label != nullptr) { - m_colored_Label->SetForegroundColour(*color); - m_colored_Label->Refresh(true); + wxStaticText* label = (m_colored_Labels.find(opt.first) == m_colored_Labels.end()) ? nullptr : m_colored_Labels.at(opt.first); + if (label) { + label->SetForegroundColour(*color); + label->Refresh(true); } continue; } @@ -668,7 +670,8 @@ void Tab::on_roll_back_value(const bool to_sys /*= true*/) } if (group->title == _("Profile dependencies")) { - if (m_type != Slic3r::Preset::TYPE_PRINTER && (m_options_list["compatible_printers"] & os) == 0) { + // "compatible_printers" option doesn't exists in Printer Settimgs Tab + if (m_type != Preset::TYPE_PRINTER && (m_options_list["compatible_printers"] & os) == 0) { to_sys ? group->back_to_sys_value("compatible_printers") : group->back_to_initial_value("compatible_printers"); load_key_value("compatible_printers", true/*some value*/, true); @@ -676,7 +679,8 @@ void Tab::on_roll_back_value(const bool to_sys /*= true*/) m_compatible_printers.checkbox->SetValue(is_empty); is_empty ? m_compatible_printers.btn->Disable() : m_compatible_printers.btn->Enable(); } - if ((m_type == Slic3r::Preset::TYPE_PRINT || m_type == Slic3r::Preset::TYPE_SLA_PRINT) && (m_options_list["compatible_prints"] & os) == 0) { + // "compatible_prints" option exists only in Filament Settimgs and Materials Tabs + if ((m_type == Preset::TYPE_FILAMENT || m_type == Preset::TYPE_SLA_MATERIAL) && (m_options_list["compatible_prints"] & os) == 0) { to_sys ? group->back_to_sys_value("compatible_prints") : group->back_to_initial_value("compatible_prints"); load_key_value("compatible_prints", true/*some value*/, true); @@ -754,10 +758,17 @@ void Tab::update_visibility() { Freeze(); // There is needed Freeze/Thaw to avoid a flashing after Show/Layout + // m_detach_preset_btn will be shown always after call page->update_visibility() + // So let save a "show state" of m_detach_preset_btn before update_visibility + bool was_shown = m_detach_preset_btn->IsShown(); + for (auto page : m_pages) page->update_visibility(m_mode); update_page_tree_visibility(); + // update visibility for detach_preset_btn + m_detach_preset_btn->Show(was_shown); + Layout(); Thaw(); } @@ -942,6 +953,52 @@ void Tab::on_presets_changed() m_dependent_tabs.clear(); } +void Tab::build_preset_description_line(ConfigOptionsGroup* optgroup) +{ + auto description_line = [this](wxWindow* parent) { + return description_line_widget(parent, &m_parent_preset_description_line); + }; + + auto detach_preset_btn = [this](wxWindow* parent) { + add_scaled_button(parent, &m_detach_preset_btn, "lock_open_sys", _(L("Detach from system preset")), wxBU_LEFT | wxBU_EXACTFIT); + ScalableButton* btn = m_detach_preset_btn; + btn->SetFont(Slic3r::GUI::wxGetApp().normal_font()); + + auto sizer = new wxBoxSizer(wxHORIZONTAL); + sizer->Add(btn); + + btn->Bind(wxEVT_BUTTON, [this, parent](wxCommandEvent&) + { + bool system = m_presets->get_edited_preset().is_system; + bool dirty = m_presets->get_edited_preset().is_dirty; + wxString msg_text = system ? + _(L("A copy of the current system preset will be created, which will be detached from the system preset.")) : + _(L("The current custom preset will be detached from the parent system preset.")); + if (dirty) { + msg_text += "\n\n"; + msg_text += _(L("Modifications to the current profile will be saved.")); + } + msg_text += "\n\n"; + msg_text += _(L("This action is not revertable.\nDo you want to proceed?")); + + wxMessageDialog dialog(parent, msg_text, _(L("Detach preset")), wxICON_WARNING | wxYES_NO | wxCANCEL); + if (dialog.ShowModal() == wxID_YES) + save_preset(m_presets->get_edited_preset().is_system ? std::string() : m_presets->get_edited_preset().name, true); + }); + + btn->Hide(); + + return sizer; + }; + + Line line = Line{ "", "" }; + line.full_width = 1; + + line.append_widget(description_line); + line.append_widget(detach_preset_btn); + optgroup->append_line(line); +} + void Tab::update_preset_description_line() { const Preset* parent = m_presets->get_selected_preset_parent(); @@ -1007,14 +1064,18 @@ void Tab::update_preset_description_line() default: break; } } - else + else if (!preset.alias.empty()) { - description_line += "\n\n\t" + _(L("full profile name")) + ": \n\t\t" + parent->name; - description_line += "\n\t" + _(L("symbolic profile name")) + ": \n\t\t" + parent->alias; + description_line += "\n\n\t" + _(L("full profile name")) + ": \n\t\t" + preset.name; + description_line += "\n\t" + _(L("symbolic profile name")) + ": \n\t\t" + preset.alias; } } m_parent_preset_description_line->SetText(description_line, false); + + if (m_detach_preset_btn) + m_detach_preset_btn->Show(parent && parent->is_system && !preset.is_default); + Layout(); } void Tab::update_frequently_changed_parameters() @@ -1256,21 +1317,16 @@ void TabPrint::build() page = add_options_page(_(L("Dependencies")), "wrench.png"); optgroup = page->new_optgroup(_(L("Profile dependencies"))); - line = optgroup->create_single_option_line("compatible_printers"); - line.widget = [this](wxWindow* parent) { + + create_line_with_widget(optgroup.get(), "compatible_printers", [this](wxWindow* parent) { return compatible_widget_create(parent, m_compatible_printers); - }; - optgroup->append_line(line, &m_colored_Label); + }); + option = optgroup->get_option("compatible_printers_condition"); option.opt.full_width = true; optgroup->append_single_option_line(option); - line = Line{ "", "" }; - line.full_width = 1; - line.widget = [this](wxWindow* parent) { - return description_line_widget(parent, &m_parent_preset_description_line); - }; - optgroup->append_line(line); + build_preset_description_line(optgroup.get()); } // Reload current config (aka presets->edited_preset->config) into the UI fields. @@ -1546,31 +1602,23 @@ void TabFilament::build() page = add_options_page(_(L("Dependencies")), "wrench.png"); optgroup = page->new_optgroup(_(L("Profile dependencies"))); - - line = optgroup->create_single_option_line("compatible_printers"); - line.widget = [this](wxWindow* parent) { + create_line_with_widget(optgroup.get(), "compatible_printers", [this](wxWindow* parent) { return compatible_widget_create(parent, m_compatible_printers); - }; - optgroup->append_line(line, &m_colored_Label); + }); + option = optgroup->get_option("compatible_printers_condition"); option.opt.full_width = true; optgroup->append_single_option_line(option); - line = optgroup->create_single_option_line("compatible_prints"); - line.widget = [this](wxWindow* parent) { + create_line_with_widget(optgroup.get(), "compatible_prints", [this](wxWindow* parent) { return compatible_widget_create(parent, m_compatible_prints); - }; - optgroup->append_line(line, &m_colored_Label); + }); + option = optgroup->get_option("compatible_prints_condition"); option.opt.full_width = true; optgroup->append_single_option_line(option); - line = Line{ "", "" }; - line.full_width = 1; - line.widget = [this](wxWindow* parent) { - return description_line_widget(parent, &m_parent_preset_description_line); - }; - optgroup->append_line(line); + build_preset_description_line(optgroup.get()); } // Reload current config (aka presets->edited_preset->config) into the UI fields. @@ -1798,38 +1846,10 @@ void TabPrinter::build_fff() auto page = add_options_page(_(L("General")), "printer"); auto optgroup = page->new_optgroup(_(L("Size and coordinates"))); - Line line = optgroup->create_single_option_line("bed_shape");//{ _(L("Bed shape")), "" }; - line.widget = [this](wxWindow* parent) { - ScalableButton* btn; - add_scaled_button(parent, &btn, "printer_white", " " + _(L("Set")) + " " + dots, wxBU_LEFT | wxBU_EXACTFIT); - btn->SetFont(wxGetApp().normal_font()); + create_line_with_widget(optgroup.get(), "bed_shape", [this](wxWindow* parent) { + return create_bed_shape_widget(parent); + }); - auto sizer = new wxBoxSizer(wxHORIZONTAL); - sizer->Add(btn); - - btn->Bind(wxEVT_BUTTON, ([this](wxCommandEvent e) - { - BedShapeDialog dlg(this); - dlg.build_dialog(*m_config->option("bed_shape"), - *m_config->option("bed_custom_texture"), - *m_config->option("bed_custom_model")); - if (dlg.ShowModal() == wxID_OK) { - const std::vector& shape = dlg.get_shape(); - const std::string& custom_texture = dlg.get_custom_texture(); - const std::string& custom_model = dlg.get_custom_model(); - if (!shape.empty()) - { - load_key_value("bed_shape", shape); - load_key_value("bed_custom_texture", custom_texture); - load_key_value("bed_custom_model", custom_model); - update_changed_ui(); - } - } - })); - - return sizer; - }; - optgroup->append_line(line, &m_colored_Label); optgroup->append_single_option_line("max_print_height"); optgroup->append_single_option_line("z_offset"); @@ -2020,12 +2040,8 @@ void TabPrinter::build_fff() page = add_options_page(_(L("Dependencies")), "wrench.png"); optgroup = page->new_optgroup(_(L("Profile dependencies"))); - line = Line{ "", "" }; - line.full_width = 1; - line.widget = [this](wxWindow* parent) { - return description_line_widget(parent, &m_parent_preset_description_line); - }; - optgroup->append_line(line); + + build_preset_description_line(optgroup.get()); build_unregular_pages(); @@ -2042,39 +2058,9 @@ void TabPrinter::build_sla() auto page = add_options_page(_(L("General")), "printer"); auto optgroup = page->new_optgroup(_(L("Size and coordinates"))); - Line line = optgroup->create_single_option_line("bed_shape");//{ _(L("Bed shape")), "" }; - line.widget = [this](wxWindow* parent) { - ScalableButton* btn; - add_scaled_button(parent, &btn, "printer_white", " " + _(L("Set")) + " " + dots, wxBU_LEFT | wxBU_EXACTFIT); - btn->SetFont(wxGetApp().normal_font()); - - - auto sizer = new wxBoxSizer(wxHORIZONTAL); - sizer->Add(btn); - - btn->Bind(wxEVT_BUTTON, ([this](wxCommandEvent e) - { - BedShapeDialog dlg(this); - dlg.build_dialog(*m_config->option("bed_shape"), - *m_config->option("bed_custom_texture"), - *m_config->option("bed_custom_model")); - if (dlg.ShowModal() == wxID_OK) { - const std::vector& shape = dlg.get_shape(); - const std::string& custom_texture = dlg.get_custom_texture(); - const std::string& custom_model = dlg.get_custom_model(); - if (!shape.empty()) - { - load_key_value("bed_shape", shape); - load_key_value("bed_custom_texture", custom_texture); - load_key_value("bed_custom_model", custom_model); - update_changed_ui(); - } - } - })); - - return sizer; - }; - optgroup->append_line(line, &m_colored_Label); + create_line_with_widget(optgroup.get(), "bed_shape", [this](wxWindow* parent) { + return create_bed_shape_widget(parent); + }); optgroup->append_single_option_line("max_print_height"); optgroup = page->new_optgroup(_(L("Display"))); @@ -2082,7 +2068,7 @@ void TabPrinter::build_sla() optgroup->append_single_option_line("display_height"); auto option = optgroup->get_option("display_pixels_x"); - line = { _(option.opt.full_label), "" }; + Line line = { _(option.opt.full_label), "" }; line.append_option(option); line.append_option(optgroup->get_option("display_pixels_y")); optgroup->append_line(line); @@ -2136,12 +2122,8 @@ void TabPrinter::build_sla() page = add_options_page(_(L("Dependencies")), "wrench.png"); optgroup = page->new_optgroup(_(L("Profile dependencies"))); - line = Line{ "", "" }; - line.full_width = 1; - line.widget = [this](wxWindow* parent) { - return description_line_widget(parent, &m_parent_preset_description_line); - }; - optgroup->append_line(line); + + build_preset_description_line(optgroup.get()); } void TabPrinter::update_serial_ports() @@ -2604,6 +2586,15 @@ void TabPrinter::update_fff() void TabPrinter::update_sla() { ; } +void Tab::update_ui_items_related_on_parent_preset(const Preset* selected_preset_parent) +{ + m_is_default_preset = selected_preset_parent != nullptr && selected_preset_parent->is_default; + + m_bmp_non_system = selected_preset_parent ? &m_bmp_value_unlock : &m_bmp_white_bullet; + m_ttg_non_system = selected_preset_parent ? &m_ttg_value_unlock : &m_ttg_white_bullet_ns; + m_tt_non_system = selected_preset_parent ? &m_tt_value_unlock : &m_ttg_white_bullet_ns; +} + // Initialize the UI from the current preset void Tab::load_current_preset() { @@ -2622,12 +2613,7 @@ void Tab::load_current_preset() // Reload preset pages with the new configuration values. reload_config(); - const Preset* selected_preset_parent = m_presets->get_selected_preset_parent(); - m_is_default_preset = selected_preset_parent != nullptr && selected_preset_parent->is_default; - - m_bmp_non_system = selected_preset_parent ? &m_bmp_value_unlock : &m_bmp_white_bullet; - m_ttg_non_system = selected_preset_parent ? &m_ttg_value_unlock : &m_ttg_white_bullet_ns; - m_tt_non_system = selected_preset_parent ? &m_tt_value_unlock : &m_ttg_white_bullet_ns; + update_ui_items_related_on_parent_preset(m_presets->get_selected_preset_parent()); // m_undo_to_sys_btn->Enable(!preset.is_default); @@ -2779,7 +2765,7 @@ void Tab::select_preset(std::string preset_name, bool delete_current) bool printer_tab = m_presets->type() == Preset::TYPE_PRINTER; bool canceled = false; bool technology_changed = false; - m_dependent_tabs = {}; + m_dependent_tabs.clear(); if (current_dirty && ! may_discard_current_dirty_preset()) { canceled = true; } else if (print_tab) { @@ -2875,10 +2861,10 @@ void Tab::select_preset(std::string preset_name, bool delete_current) // Mark the print & filament enabled if they are compatible with the currently selected preset. // The following method should not discard changes of current print or filament presets on change of a printer profile, // if they are compatible with the current printer. - auto update_compatible_type = [](bool technology_changed, bool on_page, bool show_incompatible_presets) { - return technology_changed ? PresetSelectCompatibleType::Always : - on_page ? PresetSelectCompatibleType::Never : - (show_incompatible_presets ? PresetSelectCompatibleType::OnlyIfWasCompatible : PresetSelectCompatibleType::Always); + auto update_compatible_type = [delete_current](bool technology_changed, bool on_page, bool show_incompatible_presets) { + return (delete_current || technology_changed) ? PresetSelectCompatibleType::Always : + on_page ? PresetSelectCompatibleType::Never : + show_incompatible_presets ? PresetSelectCompatibleType::OnlyIfWasCompatible : PresetSelectCompatibleType::Always; }; if (current_dirty || delete_current || print_tab || printer_tab) m_preset_bundle->update_compatible( @@ -3033,18 +3019,20 @@ void Tab::OnKeyDown(wxKeyEvent& event) // and activates the new preset. // Wizard calls save_preset with a name "My Settings", otherwise no name is provided and this method // opens a Slic3r::GUI::SavePresetWindow dialog. -void Tab::save_preset(std::string name /*= ""*/) +void Tab::save_preset(std::string name /*= ""*/, bool detach) { // since buttons(and choices too) don't get focus on Mac, we set focus manually // to the treectrl so that the EVT_* events are fired for the input field having // focus currently.is there anything better than this ? //! m_treectrl->OnSetFocus(); + std::string suffix = detach ? _utf8(L("Detached")) : _CTX_utf8(L_CONTEXT("Copy", "PresetName"), "PresetName"); + if (name.empty()) { const Preset &preset = m_presets->get_selected_preset(); auto default_name = preset.is_default ? "Untitled" : -// preset.is_system ? (boost::format(_utf8(L("%1% - Copy"))) % preset.name).str() : - preset.is_system ? (boost::format(_CTX_utf8(L_CONTEXT("%1% - Copy", "PresetName"), "PresetName")) % preset.name).str() : +// preset.is_system ? (boost::format(_CTX_utf8(L_CONTEXT("%1% - Copy", "PresetName"), "PresetName")) % preset.name).str() : + preset.is_system ? (boost::format(("%1% - %2%")) % preset.name % suffix).str() : preset.name; bool have_extention = boost::iends_with(default_name, ".ini"); @@ -3094,8 +3082,9 @@ void Tab::save_preset(std::string name /*= ""*/) } // Save the preset into Slic3r::data_dir / presets / section_name / preset_name.ini - m_presets->save_current_preset(name); + m_presets->save_current_preset(name, detach); // Mark the print & filament enabled if they are compatible with the currently selected preset. + // If saving the preset changes compatibility with other presets, keep the now incompatible dependent presets selected, however with a "red flag" icon showing that they are no more compatible. m_preset_bundle->update_compatible(PresetSelectCompatibleType::Never); // Add the new item into the UI component, remove dirty flags and activate the saved item. update_tab_ui(); @@ -3106,6 +3095,11 @@ void Tab::save_preset(std::string name /*= ""*/) if (m_type == Preset::TYPE_PRINTER) static_cast(this)->m_initial_extruders_count = static_cast(this)->m_extruders_count; + + // Parent preset is "default" after detaching, so we should to update UI values, related on parent preset + if (detach) + update_ui_items_related_on_parent_preset(m_presets->get_selected_preset_parent()); + update_changed_ui(); /* If filament preset is saved for multi-material printer preset, @@ -3113,6 +3107,30 @@ void Tab::save_preset(std::string name /*= ""*/) * but in full_config a filament_colors option aren't.*/ if (m_type == Preset::TYPE_FILAMENT && wxGetApp().extruders_edited_cnt() > 1) wxGetApp().plater()->force_filament_colors_update(); + + { + // Profile compatiblity is updated first when the profile is saved. + // Update profile selection combo boxes at the depending tabs to reflect modifications in profile compatibility. + std::vector dependent; + switch (m_type) { + case Preset::TYPE_PRINT: + dependent = { Preset::TYPE_FILAMENT }; + break; + case Preset::TYPE_SLA_PRINT: + dependent = { Preset::TYPE_SLA_MATERIAL }; + break; + case Preset::TYPE_PRINTER: + if (static_cast(this)->m_printer_technology == ptFFF) + dependent = { Preset::TYPE_PRINT, Preset::TYPE_FILAMENT }; + else + dependent = { Preset::TYPE_SLA_PRINT, Preset::TYPE_SLA_MATERIAL }; + break; + default: + break; + } + for (Preset::Type preset_type : dependent) + wxGetApp().get_tab(preset_type)->update_tab_ui(); + } } // Called for a currently selected preset. @@ -3170,6 +3188,15 @@ void Tab::update_ui_from_settings() } } +void Tab::create_line_with_widget(ConfigOptionsGroup* optgroup, const std::string& opt_key, widget_t widget) +{ + Line line = optgroup->create_single_option_line(opt_key); + line.widget = widget; + + m_colored_Labels[opt_key] = nullptr; + optgroup->append_line(line, &m_colored_Labels[opt_key]); +} + // Return a callback to create a Tab widget to mark the preferences as compatible / incompatible to the current printer. wxSizer* Tab::compatible_widget_create(wxWindow* parent, PresetDependencies &deps) { @@ -3241,6 +3268,39 @@ wxSizer* Tab::compatible_widget_create(wxWindow* parent, PresetDependencies &dep return sizer; } +// Return a callback to create a TabPrinter widget to edit bed shape +wxSizer* TabPrinter::create_bed_shape_widget(wxWindow* parent) +{ + ScalableButton* btn; + add_scaled_button(parent, &btn, "printer_white", " " + _(L("Set")) + " " + dots, wxBU_LEFT | wxBU_EXACTFIT); + btn->SetFont(wxGetApp().normal_font()); + + auto sizer = new wxBoxSizer(wxHORIZONTAL); + sizer->Add(btn); + + btn->Bind(wxEVT_BUTTON, ([this](wxCommandEvent e) + { + BedShapeDialog dlg(this); + dlg.build_dialog(*m_config->option("bed_shape"), + *m_config->option("bed_custom_texture"), + *m_config->option("bed_custom_model")); + if (dlg.ShowModal() == wxID_OK) { + const std::vector& shape = dlg.get_shape(); + const std::string& custom_texture = dlg.get_custom_texture(); + const std::string& custom_model = dlg.get_custom_model(); + if (!shape.empty()) + { + load_key_value("bed_shape", shape); + load_key_value("bed_custom_texture", custom_texture); + load_key_value("bed_custom_model", custom_model); + update_changed_ui(); + } + } + })); + + return sizer; +} + void Tab::compatible_widget_reload(PresetDependencies &deps) { bool has_any = ! m_config->option(deps.key_list)->values.empty(); @@ -3416,7 +3476,7 @@ ConfigOptionsGroupShp Page::new_optgroup(const wxString& title, int noncommon_la void SavePresetWindow::build(const wxString& title, const std::string& default_name, std::vector &values) { // TRN Preset - auto text = new wxStaticText(this, wxID_ANY, from_u8((boost::format(_utf8(L("Save %s as:"))) % title).str()), + auto text = new wxStaticText(this, wxID_ANY, from_u8((boost::format(_utf8(L("Save %s as:"))) % into_u8(title)).str()), wxDefaultPosition, wxDefaultSize); m_combo = new wxComboBox(this, wxID_ANY, from_u8(default_name), wxDefaultPosition, wxDefaultSize, 0, 0, wxTE_PROCESS_ENTER); @@ -3544,30 +3604,24 @@ void TabSLAMaterial::build() page = add_options_page(_(L("Dependencies")), "wrench.png"); optgroup = page->new_optgroup(_(L("Profile dependencies"))); - Line line = optgroup->create_single_option_line("compatible_printers"); - line.widget = [this](wxWindow* parent) { + + create_line_with_widget(optgroup.get(), "compatible_printers", [this](wxWindow* parent) { return compatible_widget_create(parent, m_compatible_printers); - }; - optgroup->append_line(line, &m_colored_Label); + }); + option = optgroup->get_option("compatible_printers_condition"); option.opt.full_width = true; optgroup->append_single_option_line(option); - line = optgroup->create_single_option_line("compatible_prints"); - line.widget = [this](wxWindow* parent) { + create_line_with_widget(optgroup.get(), "compatible_prints", [this](wxWindow* parent) { return compatible_widget_create(parent, m_compatible_prints); - }; - optgroup->append_line(line, &m_colored_Label); + }); + option = optgroup->get_option("compatible_prints_condition"); option.opt.full_width = true; optgroup->append_single_option_line(option); - line = Line{ "", "" }; - line.full_width = 1; - line.widget = [this](wxWindow* parent) { - return description_line_widget(parent, &m_parent_preset_description_line); - }; - optgroup->append_line(line); + build_preset_description_line(optgroup.get()); } // Reload current config (aka presets->edited_preset->config) into the UI fields. @@ -3674,22 +3728,16 @@ void TabSLAPrint::build() page = add_options_page(_(L("Dependencies")), "wrench"); optgroup = page->new_optgroup(_(L("Profile dependencies"))); - Line line = optgroup->create_single_option_line("compatible_printers");//Line { _(L("Compatible printers")), "" }; - line.widget = [this](wxWindow* parent) { + + create_line_with_widget(optgroup.get(), "compatible_printers", [this](wxWindow* parent) { return compatible_widget_create(parent, m_compatible_printers); - }; - optgroup->append_line(line, &m_colored_Label); + }); option = optgroup->get_option("compatible_printers_condition"); option.opt.full_width = true; optgroup->append_single_option_line(option); - line = Line{ "", "" }; - line.full_width = 1; - line.widget = [this](wxWindow* parent) { - return description_line_widget(parent, &m_parent_preset_description_line); - }; - optgroup->append_line(line); + build_preset_description_line(optgroup.get()); } // Reload current config (aka presets->edited_preset->config) into the UI fields. diff --git a/src/slic3r/GUI/Tab.hpp b/src/slic3r/GUI/Tab.hpp index c3016fa04c..e2b00dc407 100644 --- a/src/slic3r/GUI/Tab.hpp +++ b/src/slic3r/GUI/Tab.hpp @@ -201,7 +201,7 @@ protected: bool m_disable_tree_sel_changed_event; bool m_show_incompatible_presets; - std::vector m_dependent_tabs = {}; + std::vector m_dependent_tabs; enum OptStatus { osSystemValue = 1, osInitValue = 2 }; std::map m_options_list; int m_opt_status_value = 0; @@ -227,7 +227,12 @@ public: PresetCollection* m_presets; DynamicPrintConfig* m_config; ogStaticText* m_parent_preset_description_line; - wxStaticText* m_colored_Label = nullptr; + ScalableButton* m_detach_preset_btn = nullptr; + + // map of option name -> wxStaticText (colored label, associated with option) + // Used for options which don't have corresponded field + std::map m_colored_Labels; + // Counter for the updating (because of an update() function can have a recursive behavior): // 1. increase value from the very beginning of an update() function // 2. decrease value at the end of an update() function @@ -253,6 +258,7 @@ public: const wxString& label = wxEmptyString, long style = wxBU_EXACTFIT | wxNO_BORDER); void add_scaled_bitmap(wxWindow* parent, ScalableBitmap& btn, const std::string& icon_name); + void update_ui_items_related_on_parent_preset(const Preset* selected_preset_parent); void load_current_preset(); void rebuild_page_tree(); void update_page_tree_visibility(); @@ -264,7 +270,7 @@ public: void OnTreeSelChange(wxTreeEvent& event); void OnKeyDown(wxKeyEvent& event); - void save_preset(std::string name = ""); + void save_preset(std::string name = std::string(), bool detach = false); void delete_preset(); void toggle_show_hide_incompatible(); void update_show_hide_incompatible_button(); @@ -306,11 +312,13 @@ public: void update_wiping_button_visibility(); protected: + void create_line_with_widget(ConfigOptionsGroup* optgroup, const std::string& opt_key, widget_t widget); wxSizer* compatible_widget_create(wxWindow* parent, PresetDependencies &deps); void compatible_widget_reload(PresetDependencies &deps); void load_key_value(const std::string& opt_key, const boost::any& value, bool saved_value = false); void on_presets_changed(); + void build_preset_description_line(ConfigOptionsGroup* optgroup); void update_preset_description_line(); void update_frequently_changed_parameters(); void fill_icon_descriptions(); @@ -406,6 +414,8 @@ public: void init_options_list() override; void msw_rescale() override; bool supports_printer_technology(const PrinterTechnology /* tech */) override { return true; } + + wxSizer* create_bed_shape_widget(wxWindow* parent); }; class TabSLAMaterial : public Tab diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 61fe972772..b91f75be41 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -29,7 +29,7 @@ set_property(GLOBAL PROPERTY USE_FOLDERS ON) add_subdirectory(libnest2d) add_subdirectory(libslic3r) -add_subdirectory(timeutils) +add_subdirectory(slic3rutils) add_subdirectory(fff_print) add_subdirectory(sla_print) add_subdirectory(cpp17 EXCLUDE_FROM_ALL) # does not have to be built all the time diff --git a/tests/libslic3r/CMakeLists.txt b/tests/libslic3r/CMakeLists.txt index d8dac3c10b..2353414f96 100644 --- a/tests/libslic3r/CMakeLists.txt +++ b/tests/libslic3r/CMakeLists.txt @@ -13,6 +13,7 @@ add_executable(${_TEST_NAME}_tests test_stl.cpp test_meshsimplify.cpp test_meshboolean.cpp + test_timeutils.cpp ) if (TARGET OpenVDB::openvdb) diff --git a/tests/timeutils/timeutils_tests_main.cpp b/tests/libslic3r/test_timeutils.cpp similarity index 89% rename from tests/timeutils/timeutils_tests_main.cpp rename to tests/libslic3r/test_timeutils.cpp index 9989f98716..6630d7055b 100644 --- a/tests/timeutils/timeutils_tests_main.cpp +++ b/tests/libslic3r/test_timeutils.cpp @@ -1,4 +1,4 @@ -#include +#include #include "libslic3r/Time.hpp" @@ -6,45 +6,44 @@ #include #include -namespace { +using namespace Slic3r; -void test_time_fmt(Slic3r::Utils::TimeFormat fmt) { +static void test_time_fmt(Slic3r::Utils::TimeFormat fmt) { using namespace Slic3r::Utils; time_t t = get_current_time_utc(); - + std::string tstr = time2str(t, TimeZone::local, fmt); time_t parsedtime = str2time(tstr, TimeZone::local, fmt); REQUIRE(t == parsedtime); - + tstr = time2str(t, TimeZone::utc, fmt); parsedtime = str2time(tstr, TimeZone::utc, fmt); REQUIRE(t == parsedtime); - + parsedtime = str2time("not valid string", TimeZone::local, fmt); REQUIRE(parsedtime == time_t(-1)); - + parsedtime = str2time("not valid string", TimeZone::utc, fmt); REQUIRE(parsedtime == time_t(-1)); } -} TEST_CASE("ISO8601Z", "[Timeutils]") { test_time_fmt(Slic3r::Utils::TimeFormat::iso8601Z); - + std::string mydate = "20190710T085000Z"; time_t t = Slic3r::Utils::parse_iso_utc_timestamp(mydate); std::string date = Slic3r::Utils::iso_utc_timestamp(t); - + REQUIRE(date == mydate); } TEST_CASE("Slic3r_UTC_Time_Format", "[Timeutils]") { using namespace Slic3r::Utils; test_time_fmt(TimeFormat::gcode); - + std::string mydate = "2019-07-10 at 08:50:00 UTC"; time_t t = Slic3r::Utils::str2time(mydate, TimeZone::utc, TimeFormat::gcode); std::string date = Slic3r::Utils::utc_timestamp(t); - + REQUIRE(date == mydate); } diff --git a/tests/timeutils/CMakeLists.txt b/tests/slic3rutils/CMakeLists.txt similarity index 55% rename from tests/timeutils/CMakeLists.txt rename to tests/slic3rutils/CMakeLists.txt index 6ece9f4d10..f03d8d69ac 100644 --- a/tests/timeutils/CMakeLists.txt +++ b/tests/slic3rutils/CMakeLists.txt @@ -1,11 +1,10 @@ get_filename_component(_TEST_NAME ${CMAKE_CURRENT_LIST_DIR} NAME) add_executable(${_TEST_NAME}_tests ${_TEST_NAME}_tests_main.cpp - ${PROJECT_SOURCE_DIR}/src/libslic3r/Time.cpp - ${PROJECT_SOURCE_DIR}/src/libslic3r/Time.hpp ) -target_link_libraries(${_TEST_NAME}_tests test_common) + +target_link_libraries(${_TEST_NAME}_tests test_common libslic3r_gui) set_property(TARGET ${_TEST_NAME}_tests PROPERTY FOLDER "tests") # catch_discover_tests(${_TEST_NAME}_tests TEST_PREFIX "${_TEST_NAME}: ") -add_test(${_TEST_NAME}_tests ${_TEST_NAME}_tests ${CATCH_EXTRA_ARGS}) +add_test(${_TEST_NAME}_tests ${_TEST_NAME}_tests "${CATCH_EXTRA_ARGS} exclude:[NotWorking]") diff --git a/tests/slic3rutils/slic3rutils_tests_main.cpp b/tests/slic3rutils/slic3rutils_tests_main.cpp new file mode 100644 index 0000000000..b821149763 --- /dev/null +++ b/tests/slic3rutils/slic3rutils_tests_main.cpp @@ -0,0 +1,22 @@ +#include + +#include "slic3r/Utils/Http.hpp" + +TEST_CASE("Http", "[Http][NotWorking]") { + + Slic3r::Http g = Slic3r::Http::get("https://github.com/"); + + unsigned status = 0; + g.on_error([&status](std::string, std::string, unsigned http_status) { + status = http_status; + }); + + g.on_complete([&status](std::string /* body */, unsigned http_status){ + status = http_status; + }); + + g.perform_sync(); + + REQUIRE(status == 200); +} + diff --git a/version.inc b/version.inc index 2e916f2610..2638989930 100644 --- a/version.inc +++ b/version.inc @@ -3,7 +3,7 @@ set(SLIC3R_APP_NAME "PrusaSlicer") set(SLIC3R_APP_KEY "PrusaSlicer") -set(SLIC3R_VERSION "2.2.0-rc") +set(SLIC3R_VERSION "2.2.0-rc2") set(SLIC3R_BUILD_ID "PrusaSlicer-${SLIC3R_VERSION}+UNKNOWN") set(SLIC3R_RC_VERSION "2,2,0,0") set(SLIC3R_RC_VERSION_DOTS "2.2.0.0")